pax_global_header00006660000000000000000000000064142370762310014517gustar00rootroot0000000000000052 comment=c458c47557981ad7839954d29e8951c3f02b91ef binaryen-version_108/000077500000000000000000000000001423707623100147455ustar00rootroot00000000000000binaryen-version_108/.clang-format000066400000000000000000000004261423707623100173220ustar00rootroot00000000000000--- Language: Cpp BasedOnStyle: LLVM PointerAlignment: Left IndentCaseLabels: true ContinuationIndentWidth: 2 ConstructorInitializerIndentWidth: 2 SpaceAfterTemplateKeyword: false BinPackArguments: false BinPackParameters: false --- Language: JavaScript DisableFormat: true --- binaryen-version_108/.clang-tidy000066400000000000000000000014011423707623100167750ustar00rootroot00000000000000Checks: '-*,clang-diagnostic-*,readability-braces-around-statements' CheckOptions: - key: readability-identifier-naming.ClassCase value: CamelCase - key: readability-identifier-naming.EnumCase value: CamelCase - key: readability-identifier-naming.EnumConstantCase value: CamelCase - key: readability-identifier-naming.FunctionCase value: camelBack - key: readability-identifier-naming.MemberCase value: camelBack - key: readability-identifier-naming.ParameterCase value: camelBack - key: readability-identifier-naming.VariableCase value: camelBack HeaderFilterRegex: src/* binaryen-version_108/.flake8000066400000000000000000000003521423707623100161200ustar00rootroot00000000000000[flake8] ignore = E501, # line too long E241, # space after comma (ignored for list in gen-s-parser.py) W504 # line break after binary operator exclude = third_party,./test/emscripten,./test/spec,./test/wasm-install,./test/lit binaryen-version_108/.git-blame-ignore-revs000066400000000000000000000006071423707623100210500ustar00rootroot00000000000000# This file contains a list of revisions that are ignored by git blame # These revisions are unlikely what you are interested in when blaming. # You can set this file as a default ignore file for blame by running # the following command. # # $ git config blame.ignoreRevsFile .git-blame-ignore-revs # Mass change to apply clang-format to everything db9124f1de0478dcac525009b6f1589b44a7edd8 binaryen-version_108/.gitattributes000066400000000000000000000001051423707623100176340ustar00rootroot00000000000000*.py text eol=lf *.sh text eol=lf test/binaryen.js/*.txt text eol=lf binaryen-version_108/.github/000077500000000000000000000000001423707623100163055ustar00rootroot00000000000000binaryen-version_108/.github/workflows/000077500000000000000000000000001423707623100203425ustar00rootroot00000000000000binaryen-version_108/.github/workflows/ci.yml000066400000000000000000000213211423707623100214570ustar00rootroot00000000000000name: CI on: # If we run CI on all branches then we end up doing duplicate work for # branches which are also PRs. push: branches: - main - kripken/* pull_request: jobs: lint: name: lint if: ${{ github.event_name == 'pull_request' }} runs-on: ubuntu-latest steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: install tools run: | sudo pip3 install -r requirements-dev.txt sudo apt-get install clang-format clang-tidy - name: update path run: echo "PATH=$PATH:/usr/lib/llvm-8/bin" >> $GITHUB_ENV - run: flake8 - run: ./scripts/clang-format-diff.sh - name: clang-tidy run: | # clang-tidy requires compile_commands.json generated by cmake cmake . -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ./scripts/clang-tidy-diff.sh build: name: build runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: install Python dev dependencies run: pip3 install -r requirements-dev.txt - name: gen-s-parser run: ./scripts/gen-s-parser.py | diff src/gen-s-parser.inc - if: matrix.os == 'ubuntu-latest' - name: install ninja (linux) run: sudo apt-get install ninja-build if: matrix.os == 'ubuntu-latest' - name: install ninja (macos) run: brew install ninja if: matrix.os == 'macos-latest' - name: install ninja (win) run: choco install ninja if: matrix.os == 'windows-latest' - name: mkdir run: mkdir -p out - name: cmake (linux) run: cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out/install if: matrix.os == 'ubuntu-latest' - name: cmake (macos) run: cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_OSX_ARCHITECTURES=x86_64 if: matrix.os == 'macos-latest' - name: cmake (win) # -G "Visual Studio 15 2017" run: cmake -S . -B out -DCMAKE_INSTALL_PREFIX=out/install if: matrix.os == 'windows-latest' - name: build run: cmake --build out --config Release -v - name: install run: cmake --install out --config Release - name: strip run: find out/install/ -type f -perm -u=x -exec strip -x {} + if: matrix.os != 'windows-latest' - name: Upload artifacts uses: actions/upload-artifact@v1 with: name: build-${{ matrix.os }} path: out/install - name: test binaryen-lit run: python out/bin/binaryen-lit -vv test/lit/parse-error.wast - name: test run: python check.py --binaryen-bin=out/bin build-clang: name: clang (LTO) runs-on: ubuntu-latest steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: install ninja run: sudo apt-get install ninja-build - name: install Python dev dependencies run: pip3 install -r requirements-dev.txt - name: cmake run: | mkdir -p out cmake -S . -B out -G Ninja -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DBYN_ENABLE_LTO=ON - name: build run: cmake --build out -v - name: test binaryen-lit run: python out/bin/binaryen-lit -vv test/lit/parse-error.wast - name: test run: python check.py --binaryen-bin=out/bin # TODO(sbc): Find a way to reduce the duplicate between these sanitizer jobs build-asan: name: asan runs-on: ubuntu-latest env: ASAN_OPTIONS: "symbolize=1" COMPILER_FLAGS: "-fsanitize=address" steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: install ninja run: sudo apt-get install ninja-build - name: install Python dev dependencies run: pip3 install -r requirements-dev.txt - name: cmake run: | mkdir -p out cmake -S . -B out -G Ninja -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_FLAGS="$COMPILER_FLAGS" -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS" - name: build run: cmake --build out - name: test run: python check.py --binaryen-bin=out/bin # Build with gcc 6.3 and run tests on Alpine Linux (inside chroot). # Note: Alpine uses musl libc. # Keep in sync with build_release.yml build-alpine: name: alpine runs-on: ubuntu-latest steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: start docker run: | docker run -w /src -dit --name alpine -v $PWD:/src node:lts-alpine echo 'docker exec alpine "$@";' > ./alpine.sh chmod +x ./alpine.sh - name: install packages run: | ./alpine.sh apk update ./alpine.sh apk add build-base cmake git python3 py3-pip clang ninja - name: install python dev dependencies run: ./alpine.sh pip3 install -r requirements-dev.txt - name: cmake run: | ./alpine.sh cmake . -G Ninja -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_CXX_FLAGS="-static" -DCMAKE_C_FLAGS="-static" -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DCMAKE_INSTALL_PREFIX=install - name: build run: | ./alpine.sh ninja install - name: test run: ./alpine.sh python3 ./check.py # Duplicates build-asan. Please keep in sync build-ubsan: name: ubsan runs-on: ubuntu-latest env: COMPILER_FLAGS: "-fsanitize=undefined -fno-sanitize-recover=all" CC: "clang" CXX: "clang++" steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: install ninja run: sudo apt-get install ninja-build - name: install Python dev dependencies run: pip3 install -r requirements-dev.txt - name: cmake run: | mkdir -p out cmake -S . -B out -G Ninja -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_FLAGS="$COMPILER_FLAGS" -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS -fsanitize-blacklist=$PWD/ubsan.blacklist" - name: build run: cmake --build out - name: test run: python check.py --binaryen-bin=out/bin # Duplicates build-asan. Please keep in sync build-tsan: name: tsan runs-on: ubuntu-latest env: COMPILER_FLAGS: "-fsanitize=thread" LINKER_FLAGS: "-fsanitize=thread" steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: install ninja run: sudo apt-get install ninja-build - name: install Python dev dependencies run: pip3 install -r requirements-dev.txt - name: cmake run: | mkdir -p out cmake -S . -B out -G Ninja -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_FLAGS="$COMPILER_FLAGS" -DCMAKE_CXX_FLAGS="$COMPILER_FLAGS" -DCMAKE_EXE_LINKER_FLAGS="$LINKER_FLAGS" - name: build run: cmake --build out - name: test run: python check.py --binaryen-bin=out/bin # Build the .js outputs using emcc build-emscripten: name: emscripten runs-on: ubuntu-latest steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: install ninja run: sudo apt-get install ninja-build - name: emsdk install run: | mkdir $HOME/emsdk git clone --depth 1 https://github.com/emscripten-core/emsdk.git $HOME/emsdk $HOME/emsdk/emsdk update-tags $HOME/emsdk/emsdk install tot $HOME/emsdk/emsdk activate tot - name: update path run: echo "PATH=$PATH:$HOME/emsdk" >> $GITHUB_ENV - name: emcc-tests run: | source $HOME/emsdk/emsdk_env.sh ./scripts/emcc-tests.sh # Windows + gcc needs work before the tests will run, so just test the compile build-mingw: name: mingw runs-on: windows-latest steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: cmake run: | mkdir -p out cmake -S . -B out -G "MSYS Makefiles" - name: build run: cmake --build out binaryen-version_108/.github/workflows/create_release.yml000066400000000000000000000114521423707623100240330ustar00rootroot00000000000000name: Create Release # Trigger whenever a tag is created/updated on: push: tags: - "*" permissions: contents: write jobs: build: name: build runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, windows-latest] defaults: run: shell: bash steps: - uses: actions/checkout@v1 with: submodules: true - name: install ninja (macos) run: brew install ninja if: matrix.os == 'macos-latest' - name: install ninja (win) run: choco install ninja if: matrix.os == 'windows-latest' - name: mkdir run: mkdir -p out - name: cmake (macos) run: | cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_OSX_ARCHITECTURES=x86_64 cmake -S . -B out-arm64 -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out-arm64/install -DCMAKE_OSX_ARCHITECTURES=arm64 if: matrix.os == 'macos-latest' - name: cmake (win) # -G "Visual Studio 15 2017" run: cmake -S . -B out -DCMAKE_INSTALL_PREFIX=out/install if: matrix.os == 'windows-latest' - name: build run: cmake --build out -v --config Release --target install - name: build-arm64 run: cmake --build out-arm64 -v --config Release --target install if: matrix.os == 'macos-latest' - name: strip run: find out*/install/ -type f -perm -u=x -exec strip -x {} + if: matrix.os != 'windows-latest' - name: archive id: archive run: | OSNAME=$(echo ${{ matrix.os }} | sed 's/-latest//') VERSION=$GITHUB_REF_NAME PKGNAME="binaryen-$VERSION-x86_64-$OSNAME" TARBALL=$PKGNAME.tar.gz SHASUM=$PKGNAME.tar.gz.sha256 rm -rf binaryen-$VERSION mv out/install binaryen-$VERSION tar -czf $TARBALL binaryen-$VERSION # on Windows, MSYS2 will strip the carriage return from CMake output cmake -E sha256sum $TARBALL > $SHASUM echo "::set-output name=tarball::$TARBALL" echo "::set-output name=shasum::$SHASUM" - name: archive-arm64 id: archive-arm64 run: | OSNAME=$(echo ${{ matrix.os }} | sed 's/-latest//') VERSION=$GITHUB_REF_NAME PKGNAME="binaryen-$VERSION-arm64-$OSNAME" TARBALL=$PKGNAME.tar.gz SHASUM=$PKGNAME.tar.gz.sha256 rm -rf binaryen-$VERSION mv out-arm64/install binaryen-$VERSION tar -czf $TARBALL binaryen-$VERSION # on Windows, MSYS2 will strip the carriage return from CMake output cmake -E sha256sum $TARBALL > $SHASUM echo "::set-output name=tarball::$TARBALL" echo "::set-output name=shasum::$SHASUM" if: matrix.os == 'macos-latest' - name: upload tarball uses: softprops/action-gh-release@v1 with: draft: true files: | ${{ steps.archive.outputs.tarball }} ${{ steps.archive.outputs.shasum }} ${{ steps.archive-arm64.outputs.tarball }} ${{ steps.archive-arm64.outputs.shasum }} # Build with gcc 6.3 and run tests on Alpine Linux (inside chroot). # Note: Alpine uses musl libc. build-alpine: name: alpine runs-on: ubuntu-latest steps: - uses: actions/setup-python@v1 with: python-version: '3.x' - uses: actions/checkout@v1 with: submodules: true - name: start docker run: | docker run -w /src -dit --name alpine -v $PWD:/src node:lts-alpine echo 'docker exec alpine "$@";' > ./alpine.sh chmod +x ./alpine.sh - name: install packages run: | ./alpine.sh apk update ./alpine.sh apk add build-base cmake git python3 clang ninja py3-pip - name: install python dev dependencies run: ./alpine.sh pip3 install -r requirements-dev.txt - name: cmake run: | ./alpine.sh cmake . -G Ninja -DCMAKE_CXX_FLAGS="-static" -DCMAKE_C_FLAGS="-static" -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DCMAKE_INSTALL_PREFIX=install - name: build run: | ./alpine.sh ninja install - name: test run: ./alpine.sh python3 ./check.py - name: archive id: archive run: | VERSION=$GITHUB_REF_NAME PKGNAME="binaryen-$VERSION-x86_64-linux" TARBALL=$PKGNAME.tar.gz SHASUM=$PKGNAME.tar.gz.sha256 ./alpine.sh find install/ -type f -perm -u=x -exec strip {} + mv install binaryen-$VERSION tar -czf $TARBALL binaryen-$VERSION cmake -E sha256sum $TARBALL > $SHASUM echo "::set-output name=tarball::$TARBALL" echo "::set-output name=shasum::$SHASUM" - name: upload tarball uses: softprops/action-gh-release@v1 with: draft: true files: | ${{ steps.archive.outputs.tarball }} ${{ steps.archive.outputs.shasum }} binaryen-version_108/.gitignore000066400000000000000000000011421423707623100167330ustar00rootroot00000000000000Makefile *.pyc *~ *.diff TAGS tags # autogenerated during the build /src/passes/WasmIntrinsics.cpp # File generated by build-js.sh /out/ # files related to building in-tree CMakeFiles *.cmake /CMakeCache.txt /Makefile /*.ninja /.ninja_deps /.ninja_log /bin/ /lib/ /config.h compile_commands.json test/lit/lit.site.cfg.py # files related to bulding in-tree on windows /.vs/ /*.vcxproj* /*.dir/ /*.sln /*.sdf /*.VC.opendb /Win32/ # files commonly related to building out-of-tree /build/ # macOS .DS_Store # files related to VS Code /.history /.vscode # files related to Emsdk installation .emsdk_version binaryen-version_108/.gitmodules000066400000000000000000000001641423707623100171230ustar00rootroot00000000000000[submodule "third_party/googletest"] path = third_party/googletest url = https://github.com/google/googletest.git binaryen-version_108/CHANGELOG.md000066400000000000000000000343361423707623100165670ustar00rootroot00000000000000Changelog ========= This document describes changes between tagged Binaryen versions. To browse or download snapshots of old tagged versions, visit https://github.com/WebAssembly/binaryen/releases. Not all changes are documented here. In particular, new features, user-oriented fixes, options, command-line parameters, usage changes, deprecations, significant internal modifications and optimizations etc. generally deserve a mention. To examine the full set of changes between versions, visit the link to full changeset diff at the end of each section. Current Trunk ------------- v108 ---- - Add CMake flag BUILD_TOOLS to control building tools (#4655) - Add CMake flag JS_OF_OCAML for js_of_ocaml (#4637) - Remove externref (#4633) v107 ---- - Update the wasm GC type section binary format (#4625, #4631) - Lift the restriction in liveness-traversal.h on max 65535 locals (#4567) - Switch to nominal fuzzing by default (#4610) - Refactor Feature::All to match FeatureSet.setAll() (#4557) - New Signature Pruning pass (#4545) - Add support for extended-const proposal (#4529) - Add BUILD_TESTS CMake option to make gtest dependency optional. - Updated tests to use filecheck 0.0.22 (#4537). Updating is required to successfully run the lit tests. This can be done with `pip3 install -r requirements-dev.txt`. v106 ---- - [wasm2js] Support exports of Globals (#4523) - MergeSimilarFunctions optimization pass (#4414) - Various wasm-ctor-eval improvements, including support for GC. v105 ---- - This release contains binaries for ARM64 MacOS devices (#4397) - Otherwise, mostly bug fixes and incremental optimization improvements. v104 ---- - Bugfixes only, release created due to incorrect github release artifacts in v103 release (#4398). v103 ---- - The EffectAnalyzer now takes advantage of immutability of globals. To achieve that it must have access to the module. That is already the case in the C++ API, but the JS API allowed one to optionally not add a module when calling `getSideEffects()`. It is now mandatory to pass in the module. - JS and Wasm builds now emit ECMAScript modules. New usage is: ```js import Binaryen from "path/to/binaryen.js"; const binaryen = await Binaryen(); ... ``` - CallIndirect changed from storing a Signature to storing a HeapType v102 ---- - Add `BinaryenUpdateMaps` to the C API. - Adds a TrapsNeverHappen mode (#4059). This has many of the benefits of IgnoreImplicitTraps, but can be used safely in more cases. IgnoreImplicitTraps is now deprecated. - Adds type argument for BinaryenAddTable method (#4107). For the binaryen.js api this parameter is optional and by default is set to funcref type. - Replace `BinaryenExpressionGetSideEffects`'s features parameter with a module parameter. - OptimizeInstructions now lifts identical code in `select`/`if` arms (#3828). This may cause direct `BinaryenTupleExtract(BinaryenTupleMake(...))` to [use multivalue types](https://github.com/grain-lang/grain/pull/1158). v101 ---- - `BinaryenSetFunctionTable` and `module.setFunctionTable` have been removed in favor of `BinaryenAddTable` and `module.addTable` respectively. - `BinaryenIsFunctionTableImported` is removed. - A new type `BinaryenElementSegmentRef` has been added to the C API with new apis in both C & JS: - `BinaryenAddActiveElementSegment` - `BinaryenAddPassiveElementSegment` - `BinaryenRemoveElementSegment` - `BinaryenGetElementSegment` - `BinaryenGetElementSegmentByIndex` - `BinaryenElementSegmentGetName` - `BinaryenElementSegmentSetName` - `BinaryenElementSegmentGetTable` - `BinaryenElementSegmentSetTable` - `BinayenElementSegmentIsPassive` - `module.addActiveElementSegment` - `module.addPassiveElementSegment` - `module.removeElementSegment` - `module.getElementSegment` - `module.getElementSegmentByIndex` - `module.getTableSegments` - `module.getNumElementSegments` - `binaryen.getElementSegmentInfo` - `BinaryenAddTable` and `module.addTable` no longer take offset and function names. - `BinaryenGetNumFunctionTableSegments` is replaced with `BinaryenGetNumElementSegments`. - `BinaryenGetFunctionTableSegmentOffset` is replaced with `BinaryenElementSegmentGetOffset`. - `BinaryenGetFunctionTableSegmentLength` is replaced with `BinaryenElementSegmentGetLength`. - `BinaryenGetFunctionTableSegmentData` is replaced with `BinaryenElementSegmentGetData`. - Boolean values in the C API now should use `bool` instead of `int`. - Experimental SIMD instructions have been removed and the names and opcodes of the standard instructions have been updated to match the final spec. v100 ---- - `wasm-dis` now supports options to enable or disable Wasm features. - Reference types support has been improved by allowing multiple tables in a module. - `call_indirect` and `return_call_indirect` now take an additional table name parameter. This is necessary for reference types support. - New getter/setter methods have been introduced for `call_indirect` table name: - `BinaryenCallIndirectGetTable` - `BinaryenCallIndirectSetTable` - JS API `CallIndirect.table` - New APIs have been added to add and manipulate multiple tables in a module: - `BinaryenAddTable` - `BinaryenRemoveTable` - `BinaryenGetNumTables` - `BinaryenGetTable` - `BinaryenGetTableByIndex` - `BinaryenTableGetName` - `BinaryenTableGetInitial` - `BinaryenTableHasMax` - `BinaryenTableGetMax` - `BinaryenTableImportGetModule` - `BinaryenTableImportGetBase` - `module.addTable` - `module.removeTable` - `module.getTable` - `module.getTableByIndex` - `module.getNumTables` - `binaryen.getTableInfo` v99 --- - `RefFunc` C and JS API constructors (`BinaryenRefFunc` and `ref.func` respectively) now take an extra `type` parameter, similar to `RefNull`. This is necessary for typed function references support. - JS API functions for atomic notify/wait instructions are renamed. - `module.atomic.notify` -> `module.memory.atomic.notify` - `module.i32.atomic.wait` -> `module.memory.atomic.wait32` - `module.i64.atomic.wait` -> `module.memory.atomic.wait64` - Remove old/broken SpollPointers pass. This pass: Spills values that might be pointers to the C stack. This allows Boehm-style GC to see them properly. This can be revived if needed from git history (#3261). - Make `NUM_PARAMS` in `FuncCastEmulation` a runtime configuration option named `max-func-params`. This defaults to the original value of 16. - `BinaryenGetFunction`, `BinaryenGetGlobal` and `BinaryenGetEvent` now return `NULL` instead of aborting when the respective element does not yet exist. v98 --- - Add `--fast-math` mode. (#3155) - Initial implementation of "Memory64" proposal (#3130) - Lots of changes in support of GC proposal v97 --- - Remove asm2wasm, which supported Emscripten's fastcomp backend, after fastcomp was removed. - The new feature flag `--enable-anyref` enables just the `anyref` type incl. basic subtyping of `externref`, `funcref` and `exnref` (if enabled). - Enabling the exception handling or anyref features without also enabling reference types is a validation error now. - The `Host` expression and its respective APIs have been refactored into separate `MemorySize` and `MemoryGrow` expressions to align with other memory instructions. v96 --- - Fuzzing: Compare wasm2js to the interpreter (#3026) - Fix CountLeadingZeroes on MSVC, which lead to bad optimizations (#3028) - Asyncify verbose option (#3022) - wasm2js: Add an "Export" scope for name resolution, avoids annoying warnings (#2998) - Extend the C- and JS-APIs (#2586) v95 --- - Add Asyncify "add list" that adds to the list of functions to be instrumented. Rename old lists to be clearer and more consistent with that, so now there is "remove list" to remove, "add list" to add, and "only list" which if set means that only those functions should be instrumented and nothing else. - Renamed various ambiguous C-API functions for consistency: - `BinaryenBlockGetChild` to `BinaryenBlockGetChildAt` - `BinaryenSwitchGetName` to `BinaryenSwitchGetNameAt` - `BinaryenCallGetOperand` to `BinaryenCallGetOperandAt` - `BinaryenCallIndirectGetOperand` to `BinaryenCallIndirectGetOperandAt` - `BinaryenHostGetOperand` to `BinaryenHostGetOperandAt` - `BinaryenThrowGetOperand` to `BinaryenThrowGetOperandAt` - `BinaryenTupleMakeGetOperand` to `BinaryenTupleMakeGetOperandAt` v94 --- - The C-API's `BinaryenSetAPITracing` and the JS-API's `setAPITracing` have been removed because this feature was not very useful anymore and had a significant maintainance cost. - wasm-emscripten-finalize will no longer generate `stackSave`, `stackAlloc`, `stackRestore` function. It not expects them to be included in the input file. v93 --- - First release with binaries built with github actions. v92 --- - The `multivalue` feature has been added. It allows functions and control flow structures to return tuples and for locals and globals to have tuple types. Tuples are created with the new `tuple.make` pseudoinstruction and their elements are retrieved with the new `tuple.extract` pseudoinstruction. - The internal type interner has been rewritten to avoid taking locks in far more situations. Depending on the workload, this may result in large speedups and increased parallelism. - Represent the `dylink` section in Binaryen IR, so we can read, write, and update it. v91 --- - `BinaryenExpressionGetSideEffects` (C API) and `getSideEffects` (JS API) now takes an additional `features` parameter. - Reference type support is added. Supported instructions are `ref.null`, `ref.is_null`, `ref.func`, and typed `select`. Table instructions are not supported yet. For typed `select`, C/JS API can take an additional 'type' parameter. v90 --- - `local.tee`'s C/Binaryen.js API now takes an additional type parameter for its local type, like `local.get`. This is required to handle subtypes. - Added load_splat SIMD instructions - Binaryen.js instruction API changes: - `notify` -> `atomic.notify` - `i32.wait` / `i64.wait` -> `i32.atomic.wait` / `i64.atomic.wait` - Binaryen.js: `flags` argument in `setMemory` function is removed. - `atomic.fence` instruction support is added. - wasm-emscripten-finalize: Don't rely on name section being present in the input. Use the exported names for things instead. - Added `mutable` parameter to BinaryenAddGlobalImport. - Replace BinaryenSIMDBitselect* with BinaryenSIMDTernary* in the C API and add qfma/qfms instructions. - Added `offset` parameter to BinaryenSetFunctionTable. - Add the ability to create multivalue Types in the C and JS APIs. - Remove named function types. They are replaced by `params` and `results` types local to each function. - Binaryen.js can now be compiled to Wasm using the `binaryen_wasm` target. Unlike the JS variant, the Wasm variant requires asynchronously awaiting the Wasm blob's instantiation and initialization before being usable, using the `binaryen.ready` promise, e.g. `binaryen.ready.then(() => ...)`. - Binaryen.js now uses `binaryen` (was `Binaryen`) as its global name to align with the npm package. - Binaryen.js: The result of `getMemorySegmentInfoByIndex` now has the same structure as the respective inputs on creation (`byteOffset` -> `offset`). v88 --- - wasm-emscripten-finalize: For -pie binaries that import a mutable stack pointer we internalize this an import it as immutable. - The `tail-call` feature including the `return_call` and `return_call_indirect` instructions is ready to use. v87 --- - Rename Bysyncify => Asyncify v86 --- - The --initial-stack-pointer argument to wasm-emscripten-finalize no longer has any effect. It will be removed completely in future release. v85 --- - Wast file parsing rules now don't allow a few invalid formats for typeuses that were previously allowed. Typeuse entries should follow this format, meaning they should have (type) -> (param) -> (result) order if more than one of them exist. ``` typeuse ::= (type index|name)+ | (type index|name)+ (param ..)* (result ..)* | (param ..)* (result ..)* ``` Also, all (local) nodes in function definition should be after all typeuse elements. - Removed APIs related to deprecated instruction names in Binaryen.js: - `get_local` / `getLocal` - `set_local` / `setLocal` - `tee_local` / `teeLocal` - `get_global` / `getGlobal` - `set_global` / `setGlobal` - `current_memory` / `currentMemory` - `grow_memory` / `growMemory` They are now available as their new instruction names: `local.get`, `local.set`, `local.tee`, `global.get`, `global.set`, `memory.size`, and `memory.grow`. - Add feature handling to the C/JS API with no feature enabled by default. v84 --- - Generate dynCall thunks for any signatures used in "invoke" calls. v81 --- - Fix AsmConstWalker handling of string address in arg0 with -fPIC code v80 --- - Change default feature set in the absence of a target features section from all features to MVP. v79 --- - Improve support for side modules v78 --- - Add `namedGlobals` to metadata output of wasm-emscripten-finalize - Add support for llvm PIC code. - Add --side-module option to wasm-emscripten-finalize. - Add `segmentPassive` argument to `BinaryenSetMemory` for marking segments passive. - Make `-o -` print to stdout instead of a file named "-". v73 --- - Remove wasm-merge tool. v73 --- - Remove jsCall generation from wasm-emscripten-finalize. This is not needed as of https://github.com/emscripten-core/emscripten/pull/8255. v55 --- - `RelooperCreate` in the C API now has a Module parameter, and `RelooperRenderAndDispose` does not. - The JS API now has the `Relooper` constructor receive the `Module`. - Relooper: Condition properties on Branches must not have side effects. older ----- - `BinaryenSetFunctionTable` in the C API no longer accepts an array of functions, instead it accepts an array of function names, `const char** funcNames`. Previously, you could not include imported functions because they are of type `BinaryenImportRef` instead of `BinaryenFunctionRef`. #1650 - `BinaryenSetFunctionTable` in the C API now expects the initial and maximum table size as additional parameters, like `BinaryenSetMemory` does for pages, so tables can be grown dynamically. #1687 - Add `shared` parameters to `BinaryenAddMemoryImport` and `BinaryenSetMemory`, to support a shared memory. #1686 binaryen-version_108/CMakeLists.txt000066400000000000000000000421021423707623100175040ustar00rootroot00000000000000# Version set according the the cmake versions available in Ubuntu/Bionic: # https://packages.ubuntu.com/bionic/cmake cmake_minimum_required(VERSION 3.10.2) # Needed for C++17 (std::variant) # TODO(https://github.com/WebAssembly/binaryen/issues/4299): We need # to reduce this for compatability with emsdk. set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version") project(binaryen LANGUAGES C CXX VERSION 108) include(GNUInstallDirs) # The C++ standard whose features are required to build Binaryen. # Keep in sync with scripts/test/shared.py cxx_standard # The if condition allows embedding in a project with a higher default C++ standard set set(REQUIRED_CXX_STANDARD 17) if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD ${REQUIRED_CXX_STANDARD}) elseif(CMAKE_CXX_STANDARD LESS ${REQUIRED_CXX_STANDARD}) message(SEND_ERROR "Building with C++ standards older than C++${REQUIRED_CXX_STANDARD} is not supported, change CMAKE_CXX_STANDARD to ${REQUIRED_CXX_STANDARD} or later") endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(NOT CMAKE_BUILD_TYPE) message(STATUS "No build type selected, default to Release") set(CMAKE_BUILD_TYPE "Release") endif() # We default to assertions enabled, even in release builds so that we get # more useful error reports from users. option(BYN_ENABLE_ASSERTIONS "Enable assertions" ON) # Turn this off to avoid the dependency on gtest. option(BUILD_TESTS "Build GTest-based tests" ON) # Turn this off to build only the library. option(BUILD_TOOLS "Build tools" ON) # Turn this on to build binaryen.js as ES5, with additional compatibility configuration for js_of_ocaml. option(JS_OF_OCAML "Build binaryen.js for js_of_ocaml" OFF) # For git users, attempt to generate a more useful version string if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) find_package(Git QUIET REQUIRED) execute_process(COMMAND "${GIT_EXECUTABLE}" --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git describe --tags --match version_* RESULT_VARIABLE GIT_VERSION_RESULT OUTPUT_VARIABLE GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) if(${GIT_VERSION_RESULT}) message(WARNING "Error running git describe to determine version") else() set(PROJECT_VERSION "${PROJECT_VERSION} (${GIT_VERSION})") endif() endif() configure_file(config.h.in config.h) # Support functionality. function(add_compile_flag value) message(STATUS "Building with ${value}") foreach(variable CMAKE_C_FLAGS CMAKE_CXX_FLAGS) set(${variable} "${${variable}} ${value}" PARENT_SCOPE) endforeach(variable) endfunction() function(add_cxx_flag value) message(STATUS "Building with ${value}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${value}" PARENT_SCOPE) endfunction() function(add_debug_compile_flag value) if("${CMAKE_BUILD_TYPE}" MATCHES "Debug") message(STATUS "Building with ${value}") endif() foreach(variable CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG) set(${variable} "${${variable}} ${value}" PARENT_SCOPE) endforeach(variable) endfunction() function(add_nondebug_compile_flag value) if(NOT "${CMAKE_BUILD_TYPE}" MATCHES "Debug") message(STATUS "Building with ${value}") endif() foreach(variable CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_MINSIZEREL) set(${variable} "${${variable}} ${value}" PARENT_SCOPE) endforeach(variable) endfunction() function(add_link_flag value) message(STATUS "Linking with ${value}") foreach(variable CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) set(${variable} "${${variable}} ${value}" PARENT_SCOPE) endforeach(variable) endfunction() function(binaryen_setup_rpath name) if(CMAKE_INSTALL_RPATH) return() endif() if(APPLE) set(_install_name_dir INSTALL_NAME_DIR "@rpath") set(_install_rpath "@loader_path/../lib") elseif(UNIX) set(_install_rpath "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)") set_property(TARGET ${name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-z,origin ") endif() else() return() endif() set_target_properties(${name} PROPERTIES BUILD_WITH_INSTALL_RPATH On INSTALL_RPATH "${_install_rpath}" ${_install_name_dir}) endfunction() function(binaryen_add_executable name sources) add_executable(${name} ${sources}) target_link_libraries(${name} ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(${name} binaryen) binaryen_setup_rpath(${name}) install(TARGETS ${name} DESTINATION ${CMAKE_INSTALL_BINDIR}) endfunction() # Options option(BUILD_STATIC_LIB "Build as a static library" OFF) if(MSVC) # We don't have dllexport declarations set up for windows yet. set(BUILD_STATIC_LIB ON) endif() # For now, don't include full DWARF support in JS builds, for size. if(NOT EMSCRIPTEN) option(BUILD_LLVM_DWARF "Enable full DWARF support" ON) if(BUILD_LLVM_DWARF) if(MSVC) ADD_COMPILE_FLAG("/DBUILD_LLVM_DWARF") else() ADD_COMPILE_FLAG("-DBUILD_LLVM_DWARF") endif() endif() endif() # Compiler setup. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) if(BUILD_LLVM_DWARF) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/llvm-project/include) endif() # Add output directory to include path so config.h can be found include_directories(${CMAKE_CURRENT_BINARY_DIR}) # Force output to bin/ and lib/. This is to suppress CMake multigenerator output paths and avoid bin/Debug, bin/Release/ and so on, which is CMake default. foreach(SUFFIX "_DEBUG" "_RELEASE" "_RELWITHDEBINFO" "_MINSIZEREL" "") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY${SUFFIX} "${PROJECT_BINARY_DIR}/bin") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY${SUFFIX} "${PROJECT_BINARY_DIR}/lib") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY${SUFFIX} "${PROJECT_BINARY_DIR}/lib") endforeach() option(BYN_ENABLE_LTO "Build with LTO" Off) if(BYN_ENABLE_LTO) if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") message(FATAL_ERROR "ThinLTO is only supported by clang") endif() add_link_flag("-fuse-ld=lld") set_property(GLOBAL APPEND PROPERTY JOB_POOLS link_job_pool=2) set(CMAKE_JOB_POOL_LINK link_job_pool) add_compile_flag("-flto=thin") endif() if(MSVC) if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") # multi-core build. add_compile_flag("/MP") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.0") # VS2013 and older explicitly need /arch:sse2 set, VS2015 no longer has that option, but always enabled. add_compile_flag("/arch:sse2") endif() endif() add_compile_flag("/wd4146") # Ignore warning "warning C4146: unary minus operator applied to unsigned type, result still unsigned", this pattern is used somewhat commonly in the code. # 4267 and 4244 are conversion/truncation warnings. We might want to fix these but they are currently pervasive. add_compile_flag("/wd4267") add_compile_flag("/wd4244") # 4722 warns that destructors never return, even with [[noreturn]]. add_compile_flag("/wd4722") # "destructor was implicitly defined as deleted" caused by LLVM headers. add_compile_flag("/wd4624") add_compile_flag("/WX-") add_debug_compile_flag("/Od") add_nondebug_compile_flag("/O2") add_compile_flag("/D_CRT_SECURE_NO_WARNINGS") add_compile_flag("/D_SCL_SECURE_NO_WARNINGS") # workaround for https://github.com/WebAssembly/binaryen/issues/3661 add_compile_flag("/D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING") # Visual Studio 2018 15.8 implemented conformant support for std::aligned_storage, but the conformant support is only enabled when the following flag is passed, to avoid # breaking backwards compatibility with code that relied on the non-conformant behavior (the old nonconformant behavior is not used with Binaryen) add_compile_flag("/D_ENABLE_EXTENDED_ALIGNED_STORAGE") # Don't warn about using "strdup" as a reserved name. add_compile_flag("/D_CRT_NONSTDC_NO_DEPRECATE") if(BYN_ENABLE_ASSERTIONS) # On non-Debug builds cmake automatically defines NDEBUG, so we # explicitly undefine it: add_nondebug_compile_flag("/UNDEBUG") # Keep asserts. endif() # Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines. if( NOT CMAKE_BUILD_TYPE MATCHES "Debug" ) foreach(flags_var_to_scrub CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_MINSIZEREL) string(REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " "${flags_var_to_scrub}" "${${flags_var_to_scrub}}") # Compile with `/MT` to link against `libcmt.lib`, removing a dependency # on `msvcrt.dll`. May result in slightly larger binaries but they should # be more portable across systems. string(REPLACE "/MD" "/MT" ${flags_var_to_scrub} "${${flags_var_to_scrub}}") endforeach() endif() add_link_flag("/STACK:8388608") if(RUN_STATIC_ANALYZER) add_definitions(/analyze) endif() else() option(ENABLE_WERROR "Enable -Werror" ON) set(THREADS_PREFER_PTHREAD_FLAG ON) set(CMAKE_THREAD_PREFER_PTHREAD ON) find_package(Threads REQUIRED) if(NOT EMSCRIPTEN) if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") # wasm doesn't allow for x87 floating point math add_compile_flag("-msse2") add_compile_flag("-mfpmath=sse") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[2-6]" AND NOT CMAKE_CXX_FLAGS MATCHES "-mfpu=") add_compile_flag("-mfpu=vfpv3") endif() endif() add_compile_flag("-Wall") if(ENABLE_WERROR) add_compile_flag("-Werror") endif() add_compile_flag("-Wextra") add_compile_flag("-Wno-unused-parameter") add_compile_flag("-fno-omit-frame-pointer") add_compile_flag("-fno-rtti") # TODO(https://github.com/WebAssembly/binaryen/pull/2314): Remove these two # flags once we resolve the issue. add_compile_flag("-Wno-implicit-int-float-conversion") add_compile_flag("-Wno-unknown-warning-option") add_compile_flag("-Wswitch") # we explicitly expect this in the code add_compile_flag("-Wimplicit-fallthrough") add_compile_flag("-Wnon-virtual-dtor") if(WIN32) add_compile_flag("-D_GNU_SOURCE") add_compile_flag("-D__STDC_FORMAT_MACROS") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_link_flag("-Wl,/stack:8388608") else() add_link_flag("-Wl,--stack,8388608") endif() elseif(NOT EMSCRIPTEN) add_compile_flag("-fPIC") endif() add_debug_compile_flag("-O0") add_debug_compile_flag("-g3") add_nondebug_compile_flag("-O2") if(BYN_ENABLE_ASSERTIONS) # On non-Debug builds cmake automatically defines NDEBUG, so we # explicitly undefine it: add_nondebug_compile_flag("-UNDEBUG") endif() endif() if(EMSCRIPTEN) # link with -O3 for metadce and other powerful optimizations. note that we # must use add_link_options so that this appears after CMake's default -O2 add_link_options("-O3") add_link_flag("-s SINGLE_FILE") add_link_flag("-s ALLOW_MEMORY_GROWTH=1") add_compile_flag("-s DISABLE_EXCEPTION_CATCHING=0") add_link_flag("-s DISABLE_EXCEPTION_CATCHING=0") # make the tools immediately usable on Node.js add_link_flag("-s NODERAWFS") # in opt builds, LTO helps so much (>20%) it's worth slow compile times add_nondebug_compile_flag("-flto") endif() # clang doesn't print colored diagnostics when invoked from Ninja if(UNIX AND CMAKE_GENERATOR STREQUAL "Ninja") if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") add_compile_flag("-fdiagnostics-color=always") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") add_compile_flag("-fcolor-diagnostics") endif() endif() # Static libraries # Current (partial) dependency structure is as follows: # tools -> passes -> wasm -> asmjs -> support # TODO: It's odd that wasm should depend on asmjs, maybe we should fix that. add_subdirectory(src/ir) add_subdirectory(src/asmjs) add_subdirectory(src/cfg) add_subdirectory(src/emscripten-optimizer) add_subdirectory(src/passes) add_subdirectory(src/support) add_subdirectory(src/wasm) if(BUILD_TOOLS) # Build binaryen tools add_subdirectory(src/tools) endif() add_subdirectory(third_party) # Configure lit tests add_subdirectory(test/lit) if(BUILD_TESTS) # Configure GTest unit tests add_subdirectory(test/gtest) endif() # Object files set(binaryen_objs $ $ $ $ $ $ $) if(BUILD_LLVM_DWARF) SET(binaryen_objs ${binaryen_objs} $) endif() # Sources. file(GLOB binaryen_HEADERS src/*.h) set(binaryen_SOURCES src/binaryen-c.cpp ${binaryen_HEADERS} ) if(BUILD_STATIC_LIB) message(STATUS "Building libbinaryen as statically linked library.") add_library(binaryen STATIC ${binaryen_SOURCES} ${binaryen_objs}) add_definitions(-DBUILD_STATIC_LIBRARY) else() message(STATUS "Building libbinaryen as shared library.") add_library(binaryen SHARED ${binaryen_SOURCES} ${binaryen_objs}) endif() if(NOT (BUILD_STATIC_LIB AND BYN_INSTALL_TOOLS_ONLY)) install(TARGETS binaryen RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() if(NOT BYN_INSTALL_TOOLS_ONLY) install(FILES src/binaryen-c.h src/wasm-delegations.def DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) endif() # binaryen.js # # Note that we can't emit binaryen.js directly, as there is libbinaryen already # declared earlier, so we create binaryen_wasm/js.js, which must then be copied. # Note that SHELL: is needed as otherwise cmake will coalesce -s link flags # in an incorrect way for emscripten. if(EMSCRIPTEN) set(binaryen_emscripten_SOURCES src/binaryen-c.cpp ${binaryen_HEADERS} ) # binaryen.js WebAssembly variant add_executable(binaryen_wasm ${binaryen_emscripten_SOURCES}) target_link_libraries(binaryen_wasm wasm asmjs emscripten-optimizer passes ir cfg support wasm) target_link_libraries(binaryen_wasm "-s NO_FILESYSTEM=0") target_link_libraries(binaryen_wasm "-s NODERAWFS=0") target_link_libraries(binaryen_wasm "-s EXPORT_NAME=Binaryen") target_link_libraries(binaryen_wasm "-s EXPORT_ES6=1") target_link_libraries(binaryen_wasm "--post-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-post.js") target_link_libraries(binaryen_wasm "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-extern-pre.js") target_link_libraries(binaryen_wasm optimized "--closure 1") target_link_libraries(binaryen_wasm optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT6\"") target_link_libraries(binaryen_wasm optimized "-flto") target_link_libraries(binaryen_wasm debug "--profiling") install(TARGETS binaryen_wasm DESTINATION ${CMAKE_INSTALL_BINDIR}) # binaryen.js JavaScript variant add_executable(binaryen_js ${binaryen_emscripten_SOURCES}) target_link_libraries(binaryen_js wasm asmjs emscripten-optimizer passes ir cfg support wasm) target_link_libraries(binaryen_js "-s WASM=0") target_link_libraries(binaryen_js "-s WASM_ASYNC_COMPILATION=0") if(${CMAKE_CXX_COMPILER_VERSION} STREQUAL "6.0.1") # only valid with fastcomp and WASM=0 target_link_libraries(binaryen_js "-s ELIMINATE_DUPLICATE_FUNCTIONS=1") endif() # Disabling filesystem and setting web environment for js_of_ocaml # so it doesn't try to detect the "node" environment if(JS_OF_OCAML) target_link_libraries(binaryen_js "-s NO_FILESYSTEM=1") target_link_libraries(binaryen_js "-s ENVIRONMENT=web,worker") else() target_link_libraries(binaryen_js "-s NO_FILESYSTEM=0") endif() target_link_libraries(binaryen_js "-s NODERAWFS=0") target_link_libraries(binaryen_js "-s EXPORT_NAME=Binaryen") # Currently, js_of_ocaml can only process ES5 code if(JS_OF_OCAML) target_link_libraries(binaryen_js "-s EXPORT_ES6=0") else() target_link_libraries(binaryen_js "-s EXPORT_ES6=1") endif() target_link_libraries(binaryen_js "--post-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-post.js") # js_of_ocaml needs a specified variable with special comment to provide the library to consumers if(JS_OF_OCAML) target_link_libraries(binaryen_js "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.jsoo-extern-pre.js") else() target_link_libraries(binaryen_js "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-extern-pre.js") endif() target_link_libraries(binaryen_js optimized "--closure 1") # Currently, js_of_ocaml can only process ES5 code if(JS_OF_OCAML) target_link_libraries(binaryen_js optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT5\"") else() target_link_libraries(binaryen_js optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT6\"") endif() target_link_libraries(binaryen_js optimized "-flto") target_link_libraries(binaryen_js debug "--profiling") target_link_libraries(binaryen_js debug "-s ASSERTIONS") install(TARGETS binaryen_js DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() configure_file(scripts/binaryen-lit.in ${CMAKE_BINARY_DIR}/bin/binaryen-lit @ONLY) binaryen-version_108/Contributing.md000066400000000000000000000032231423707623100177360ustar00rootroot00000000000000# Contributing to WebAssembly Interested in participating? Please follow [the same contributing guidelines as the design repository][]. [the same contributing guidelines as the design repository]: https://github.com/WebAssembly/design/blob/main/Contributing.md Also, please be sure to read [the README.md](README.md) for this repository. ## Adding support for new instructions Use this handy checklist to make sure your new instructions are fully supported: - [ ] Instruction class or opcode added to src/wasm.h - [ ] Instruction class added to src/wasm-builder.h - [ ] Instruction class added to src/wasm-traversal.h - [ ] Validation added to src/wasm/wasm-validator.cpp - [ ] Interpretation added to src/wasm-interpreter.h - [ ] Effects handled in src/ir/effects.h - [ ] Precomputing handled in src/passes/Precompute.cpp - [ ] Hashing and comparing in src/ir/ExpressionAnalyzer.cpp - [ ] Parsing added in scripts/gen-s-parser.py, src/wasm-s-parser.h and src/wasm/wasm-s-parser.cpp - [ ] Printing added in src/passes/Print.cpp - [ ] Decoding added in src/wasm-binary.h and src/wasm/wasm-binary.cpp - [ ] Binary writing added in src/wasm-stack.h and src/wasm/wasm-stack.cpp - [ ] Support added in various classes inheriting OverriddenVisitor (and possibly other non-OverriddenVisitor classes as necessary) - [ ] Support added to src/tools/fuzzing.h - [ ] C API support added in src/binaryen-c.h and src/binaryen-c.cpp - [ ] JS API support added in src/js/binaryen.js-post.js - [ ] C API tested in test/example/c-api-kitchen-sink.c - [ ] JS API tested in test/binaryen.js/kitchen-sink.js - [ ] Tests added in test/spec - [ ] Tests added in top-level test/ binaryen-version_108/LICENSE000066400000000000000000000261351423707623100157610ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. binaryen-version_108/README.md000066400000000000000000000706461423707623100162410ustar00rootroot00000000000000[![CI](https://github.com/WebAssembly/binaryen/workflows/CI/badge.svg?branch=main&event=push)](https://github.com/WebAssembly/binaryen/actions?query=workflow%3ACI) # Binaryen Binaryen is a compiler and toolchain infrastructure library for WebAssembly, written in C++. It aims to make [compiling to WebAssembly] **easy, fast, and effective**: * **Easy**: Binaryen has a simple [C API] in a single header, and can also be [used from JavaScript][JS_API]. It accepts input in [WebAssembly-like form][compile_to_wasm] but also accepts a general [control flow graph] for compilers that prefer that. * **Fast**: Binaryen's internal IR uses compact data structures and is designed for completely parallel codegen and optimization, using all available CPU cores. Binaryen's IR also compiles down to WebAssembly extremely easily and quickly because it is essentially a subset of WebAssembly. * **Effective**: Binaryen's optimizer has many passes (see an overview later down) that can improve code size and speed. These optimizations aim to make Binaryen powerful enough to be used as a [compiler backend][backend] by itself. One specific area of focus is on WebAssembly-specific optimizations (that general-purpose compilers might not do), which you can think of as wasm [minification], similar to minification for JavaScript, CSS, etc., all of which are language-specific. Compilers using Binaryen include: * [`AssemblyScript`](https://github.com/AssemblyScript/assemblyscript) which compiles a variant of TypeScript to WebAssembly * [`wasm2js`](https://github.com/WebAssembly/binaryen/blob/main/src/wasm2js.h) which compiles WebAssembly to JS * [`Asterius`](https://github.com/tweag/asterius) which compiles Haskell to WebAssembly * [`Grain`](https://github.com/grain-lang/grain) which compiles Grain to WebAssembly Binaryen also provides a set of **toolchain utilities** that can * **Parse** and **emit** WebAssembly. In particular this lets you load WebAssembly, optimize it using Binaryen, and re-emit it, thus implementing a wasm-to-wasm optimizer in a single command. * **Interpret** WebAssembly as well as run the WebAssembly spec tests. * Integrate with **[Emscripten](http://emscripten.org)** in order to provide a complete compiler toolchain from C and C++ to WebAssembly. * **Polyfill** WebAssembly by running it in the interpreter compiled to JavaScript, if the browser does not yet have native support (useful for testing). Consult the [contributing instructions](Contributing.md) if you're interested in participating. ## Binaryen IR Binaryen's internal IR is designed to be * **Flexible and fast** for optimization. * **As close as possible to WebAssembly** so it is simple and fast to convert it to and from WebAssembly. There are a few differences between Binaryen IR and the WebAssembly language: * Tree structure * Binaryen IR [is a tree][binaryen_ir], i.e., it has hierarchical structure, for convenience of optimization. This differs from the WebAssembly binary format which is a stack machine. * Consequently Binaryen's text format allows only s-expressions. WebAssembly's official text format is primarily a linear instruction list (with s-expression extensions). Binaryen can't read the linear style, but it can read a wasm text file if it contains only s-expressions. * Binaryen uses Stack IR to optimize "stacky" code (that can't be represented in structured form). * When stacky code must be represented in Binaryen IR, such as with multivalue instructions and blocks, it is represented with tuple types that do not exist in the WebAssembly language. In addition to multivalue instructions, locals and globals can also have tuple types in Binaryen IR but not in WebAssembly. Experiments show that better support for multivalue could enable useful but small code size savings of 1-3%, so it has not been worth changing the core IR structure to support it better. * Block input values (currently only supported in `catch` blocks in the exception handling feature) are represented as `pop` subexpressions. * Types and unreachable code * WebAssembly limits block/if/loop types to none and the concrete value types (i32, i64, f32, f64). Binaryen IR has an unreachable type, and it allows block/if/loop to take it, allowing [local transforms that don't need to know the global context][unreachable]. As a result, Binaryen's default text output is not necessarily valid wasm text. (To get valid wasm text, you can do `--generate-stack-ir --print-stack-ir`, which prints Stack IR, this is guaranteed to be valid for wasm parsers.) * Binaryen ignores unreachable code when reading WebAssembly binaries. That means that if you read a wasm file with unreachable code, that code will be discarded as if it were optimized out (often this is what you want anyhow, and optimized programs have no unreachable code anyway, but if you write an unoptimized file and then read it, it may look different). The reason for this behavior is that unreachable code in WebAssembly has corner cases that are tricky to handle in Binaryen IR (it can be very unstructured, and Binaryen IR is more structured than WebAssembly as noted earlier). Note that Binaryen does support unreachable code in .wat text files, since as we saw Binaryen only supports s-expressions there, which are structured. * Blocks * Binaryen IR has only one node that contains a variable-length list of operands: the block. WebAssembly on the other hand allows lists in loops, if arms, and the top level of a function. Binaryen's IR has a single operand for all non-block nodes; this operand may of course be a block. The motivation for this property is that many passes need special code for iterating on lists, so having a single IR node with a list simplifies them. * As in wasm, blocks and loops may have names. Branch targets in the IR are resolved by name (as opposed to nesting depth). This has 2 consequences: * Blocks without names may not be branch targets. * Names are required to be unique. (Reading .wat files with duplicate names is supported; the names are modified when the IR is constructed). * As an optimization, a block that is the child of a loop (or if arm, or function toplevel) and which has no branches targeting it will not be emitted when generating wasm. Instead its list of operands will be directly used in the containing node. Such a block is sometimes called an "implicit block". * Reference Types * The wasm text and binary formats require that a function whose address is taken by `ref.func` must be either in the table, or declared via an `(elem declare func $..)`. Binaryen will emit that data when necessary, but it does not represent it in IR. That is, IR can be worked on without needing to think about declaring function references. As a result, you might notice that round-trip conversions (wasm => Binaryen IR => wasm) change code a little in some corner cases. * When optimizing Binaryen uses an additional IR, Stack IR (see `src/wasm-stack.h`). Stack IR allows a bunch of optimizations that are tailored for the stack machine form of WebAssembly's binary format (but Stack IR is less efficient for general optimizations than the main Binaryen IR). If you have a wasm file that has been particularly well-optimized, a simple round-trip conversion (just read and write, without optimization) may cause more noticeable differences, as Binaryen fits it into Binaryen IR's more structured format. If you also optimize during the round-trip conversion then Stack IR opts will be run and the final wasm will be better optimized. Notes when working with Binaryen IR: * As mentioned above, Binaryen IR has a tree structure. As a result, each expression should have exactly one parent - you should not "reuse" a node by having it appear more than once in the tree. The motivation for this limitation is that when we optimize we modify nodes, so if they appear more than once in the tree, a change in one place can appear in another incorrectly. * For similar reasons, nodes should not appear in more than one functions. ### Intrinsics Binaryen intrinsic functions look like calls to imports, e.g., ```wat (import "binaryen-intrinsics" "foo" (func $foo)) ``` Implementing them that way allows them to be read and written by other tools, and it avoids confusing errors on a binary format error that could happen in those tools if we had a custom binary format extension. An intrinsic method may be optimized away by the optimizer. If it is not, it must be **lowered** before shipping the wasm, as otherwise it will look like a call to an import that does not exist (and VMs will show an error on not having a proper value for that import). That final lowering is *not* done automatically. A user of intrinsics must run the pass for that explicitly, because the tools do not know when the user intends to finish optimizing, as the user may have a pipeline of multiple optimization steps, or may be doing local experimentation, or fuzzing/reducing, etc. Only the user knows when the final optimization happens before the wasm is "final" and ready to be shipped. Note that, in general, some additional optimizations may be possible after the final lowering, and so a useful pattern is to optimize once normally with intrinsics, then lower them away, then optimize after that, e.g.: ``` wasm-opt input.wasm -o output.wasm -O --intrinsic-lowering -O ``` Each intrinsic defines its semantics, which includes what the optimizer is allowed to do with it and what the final lowering will turn it to. See [intrinsics.h](https://github.com/WebAssembly/binaryen/blob/main/src/ir/intrinsics.h) for the detailed definitions. A quick summary appears here: * `call.without.effects`: Similar to a `call_ref` in that it receives parameters, and a reference to a function to call, and calls that function with those parameters, except that the optimizer can assume the call has no side effects, and may be able to optimize it out (if it does not have a result that is used, generally). ## Tools This repository contains code that builds the following tools in `bin/`: * **wasm-opt**: Loads WebAssembly and runs Binaryen IR passes on it. * **wasm-as**: Assembles WebAssembly in text format (currently S-Expression format) into binary format (going through Binaryen IR). * **wasm-dis**: Un-assembles WebAssembly in binary format into text format (going through Binaryen IR). * **wasm2js**: A WebAssembly-to-JS compiler. This is used by Emscripten to generate JavaScript as an alternative to WebAssembly. * **wasm-reduce**: A testcase reducer for WebAssembly files. Given a wasm file that is interesting for some reason (say, it crashes a specific VM), wasm-reduce can find a smaller wasm file that has the same property, which is often easier to debug. See the [docs](https://github.com/WebAssembly/binaryen/wiki/Fuzzing#reducing) for more details. * **wasm-shell**: A shell that can load and interpret WebAssembly code. It can also run the spec test suite. * **wasm-emscripten-finalize**: Takes a wasm binary produced by llvm+lld and performs emscripten-specific passes over it. * **wasm-ctor-eval**: A tool that can execute functions (or parts of functions) at compile time. * **binaryen.js**: A standalone JavaScript library that exposes Binaryen methods for [creating and optimizing Wasm modules](https://github.com/WebAssembly/binaryen/blob/main/test/binaryen.js/hello-world.js). For builds, see [binaryen.js on npm](https://www.npmjs.com/package/binaryen) (or download it directly from [github](https://raw.githubusercontent.com/AssemblyScript/binaryen.js/master/index.js), [rawgit](https://cdn.rawgit.com/AssemblyScript/binaryen.js/master/index.js), or [unpkg](https://unpkg.com/binaryen@latest/index.js)). Usage instructions for each are below. ## Binaryen Optimizations Binaryen contains [a lot of optimization passes](https://github.com/WebAssembly/binaryen/tree/main/src/passes) to make WebAssembly smaller and faster. You can run the Binaryen optimizer by using ``wasm-opt``, but also they can be run while using other tools, like ``wasm2js`` and ``wasm-metadce``. * The default optimization pipeline is set up by functions like [`addDefaultFunctionOptimizationPasses`](https://github.com/WebAssembly/binaryen/blob/369b8bdd3d9d49e4d9e0edf62e14881c14d9e352/src/passes/pass.cpp#L396). * There are various [pass options](https://github.com/WebAssembly/binaryen/blob/369b8bdd3d9d49e4d9e0edf62e14881c14d9e352/src/pass.h#L85) that you can set, to adjust the optimization and shrink levels, whether to ignore unlikely traps, inlining heuristics, fast-math, and so forth. See ``wasm-opt --help`` for how to set them and other details. See each optimization pass for details of what it does, but here is a quick overview of some of the relevant ones: * **CoalesceLocals** - Key “register allocation†pass. Does a live range analysis and then reuses locals in order to minimize their number, as well as to remove copies between them. * **CodeFolding** - Avoids duplicate code by merging it (e.g. if two `if` arms have some shared instructions at their end). * **CodePushing** - “Pushes†code forward past branch operations, potentially allowing the code to not be run if the branch is taken. * **DeadArgumentElimination** - LTO pass to remove arguments to a function if it is always called with the same constants. * **DeadCodeElimination** * **Directize** - Turn an indirect call into a normal call, when the table index is constant. * **DuplicateFunctionElimination** - LTO pass. * **Inlining** - LTO pass. * **LocalCSE** - Simple local common subexpression elimination. * **LoopInvariantCodeMotion** * **MemoryPacking** - Key "optimize data segments" pass that combines segments, removes unneeded parts, etc. * **MergeBlocks** - Merge a `block` to an outer one where possible, reducing their number. * **MergeLocals** - When two locals have the same value in part of their overlap, pick in a way to help CoalesceLocals do better later (split off from CoalesceLocals to keep the latter simple). * **MinifyImportsAndExports** - Minifies them to “aâ€, “bâ€, etc. * **OptimizeAddedConstants** - Optimize a load/store with an added constant into a constant offset. * **OptimizeInstructions** - Key peephole optimization pass with a constantly increasing list of patterns. * **PickLoadSigns** - Adjust whether a load is signed or unsigned in order to avoid sign/unsign operations later. * **Precompute** - Calculates constant expressions at compile time, using the built-in interpreter (which is guaranteed to be able to handle any constant expression). * **ReReloop** - Transforms wasm structured control flow to a CFG and then goes back to structured form using the Relooper algorithm, which may find more optimal shapes. * **RedundantSetElimination** - Removes a `local.set` of a value that is already present in a local. (Overlaps with CoalesceLocals; this achieves the specific operation just mentioned without all the other work CoalesceLocals does, and therefore is useful in other places in the optimization pipeline.) * **RemoveUnsedBrs** - Key “minor control flow optimizations†pass, including jump threading and various transforms that can get rid of a `br` or `br_table` (like turning a `block` with a `br` in the middle into an `if` when possible). * **RemoveUnusedModuleElements** - “Global DCEâ€, an LTO pass that removes imports, functions, globals, etc., when they are not used. * **ReorderFunctions** - Put more-called functions first, potentially allowing the LEB emitted to call them to be smaller (in a very large program). * **ReorderLocals** - Put more-used locals first, potentially allowing the LEB emitted to use them to be smaller (in a very large function). After the sorting, it also removes locals not used at all. * **SimplifyGlobals** - Optimizes globals in various ways, for example, coalescing them, removing mutability from a global never modified, applying a constant value from an immutable global, etc. * **SimplifyLocals** - Key “`local.get/set/tee`†optimization pass, doing things like replacing a set and a get with moving the set’s value to the get (and creating a tee) where possible. Also creates `block/if/loop` return values instead of using a local to pass the value. * **Vacuum** - Key “remove silly unneeded code†pass, doing things like removing an `if` arm that has no contents, a drop of a constant value with no side effects, a `block` with a single child, etc. “LTO†in the above means an optimization is Link Time Optimization-like in that it works across multiple functions, but in a sense Binaryen is always “LTO†as it usually is run on the final linked wasm. Advanced optimization techniques in the Binaryen optimizer include [SSAification](https://github.com/WebAssembly/binaryen/blob/main/src/passes/SSAify.cpp), [Flat IR](https://github.com/WebAssembly/binaryen/blob/main/src/ir/flat.h), and [Stack/Poppy IR](https://github.com/WebAssembly/binaryen/blob/main/src/ir/stack-utils.h). Binaryen also contains various passes that do other things than optimizations, like [legalization for JavaScript](https://github.com/WebAssembly/binaryen/blob/main/src/passes/LegalizeJSInterface.cpp), [Asyncify](https://github.com/WebAssembly/binaryen/blob/main/src/passes/Asyncify.cpp), etc. ## Building Binaryen uses git submodules (at time of writing just for gtest), so before you build you will have to initialize the submodules: ``` git submodule init git submodule update ``` After that you can build with CMake: ``` cmake . && make ``` A C++17 compiler is required. Note that you can also use `ninja` as your generator: `cmake -G Ninja . && ninja`. To avoid the gtest dependency, you can pass `-DBUILD_TESTS=OFF` to cmake. Binaryen.js can be built using Emscripten, which can be installed via [the SDK](http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html)). ``` emcmake cmake . && emmake make binaryen_js ``` ### Visual C++ 1. Using the Microsoft Visual Studio Installer, install the "Visual C++ tools for CMake" component. 1. Generate the projects: ``` mkdir build cd build "%VISUAL_STUDIO_ROOT%\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" .. ``` Substitute VISUAL_STUDIO_ROOT with the path to your Visual Studio installation. In case you are using the Visual Studio Build Tools, the path will be "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools". 1. From the Developer Command Prompt, build the desired projects: ``` msbuild binaryen.vcxproj ``` CMake generates a project named "ALL_BUILD.vcxproj" for conveniently building all the projects. ## Running ### wasm-opt Run ```` bin/wasm-opt [.wasm or .wat file] [options] [passes, see --help] [--help] ```` The wasm optimizer receives WebAssembly as input, and can run transformation passes on it, as well as print it (before and/or after the transformations). For example, try ```` bin/wasm-opt test/passes/lower-if-else.wat --print ```` That will pretty-print out one of the test cases in the test suite. To run a transformation pass on it, try ```` bin/wasm-opt test/passes/lower-if-else.wat --print --lower-if-else ```` The `lower-if-else` pass lowers if-else into a block and a break. You can see the change the transformation causes by comparing the output of the two print commands. It's easy to add your own transformation passes to the shell, just add `.cpp` files into `src/passes`, and rebuild the shell. For example code, take a look at the [`lower-if-else` pass](https://github.com/WebAssembly/binaryen/blob/main/src/passes/LowerIfElse.cpp). Some more notes: * See `bin/wasm-opt --help` for the full list of options and passes. * Passing `--debug` will emit some debugging info. ### wasm2js Run ``` bin/wasm2js [input.wasm file] ``` This will print out JavaScript to the console. For example, try ``` $ bin/wasm2js test/hello_world.wat ``` That output contains ``` function add(x, y) { x = x | 0; y = y | 0; return x + y | 0 | 0; } ``` as a translation of ``` (func $add (; 0 ;) (type $0) (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) ``` wasm2js's output is in ES6 module format - basically, it converts a wasm module into an ES6 module (to run on older browsers and Node.js versions you can use Babel etc. to convert it to ES5). Let's look at a full example of calling that hello world wat; first, create the main JS file: ```javascript // main.mjs import { add } from "./hello_world.mjs"; console.log('the sum of 1 and 2 is:', add(1, 2)); ``` The run this (note that you need a new enough Node.js with ES6 module support): ```shell $ bin/wasm2js test/hello_world.wat -o hello_world.mjs $ node --experimental-modules main.mjs the sum of 1 and 2 is: 3 ``` Things keep to in mind with wasm2js's output: * You should run wasm2js with optimizations for release builds, using `-O` or another optimization level. That will optimize along the entire pipeline (wasm and JS). It won't do everything a JS minifer would, though, like minify whitespace, so you should still run a normal JS minifer afterwards. * It is not possible to match WebAssembly semantics 100% precisely with fast JavaScript code. For example, every load and store may trap, and to make JavaScript do the same we'd need to add checks everywhere, which would be large and slow. Instead, wasm2js assumes loads and stores do not trap, that int/float conversions do not trap, and so forth. There may also be slight differences in corner cases of conversions, like non-trapping float to int. ### wasm-ctor-eval `wasm-ctor-eval` executes functions, or parts of them, at compile time. After doing so it serializes the runtime state into the wasm, which is like taking a "snapshot". When the wasm is later loaded and run in a VM, it will continue execution from that point, without re-doing the work that was already executed. For example, consider this small program: ```wat (module ;; A global variable that begins at 0. (global $global (mut i32) (i32.const 0)) (import "import" "import" (func $import)) (func "main" ;; Set the global to 1. (global.set $global (i32.const 1)) ;; Call the imported function. This *cannot* be executed at ;; compile time. (call $import) ;; We will never get to this point, since we stop at the ;; import. (global.set $global (i32.const 2)) ) ) ``` We can evaluate part of it at compile time like this: ``` wasm-ctor-eval input.wat --ctors=main -S -o - ``` This tells it that there is a single function that we want to execute ("ctor" is short for "global constructor", a name that comes from code that is executed before a program's entry point) and then to print it as text to `stdout`. The result is this: ```wat trying to eval main ...partial evalling successful, but stopping since could not eval: call import: import.import ...stopping (module (type $none_=>_none (func)) (import "import" "import" (func $import)) (global $global (mut i32) (i32.const 1)) (export "main" (func $0_0)) (func $0_0 (call $import) (global.set $global (i32.const 2) ) ) ) ``` The logging shows us managing to eval part of `main()`, but not all of it, as expected: We can eval the first `global.get`, but then we stop at the call to the imported function (because we don't know what that function will be when the wasm is actually run in a VM later). Note how in the output wasm the global's value has been updated from 0 to 1, and that the first `global.get` has been removed: the wasm is now in a state that, when we run it in a VM, will seamlessly continue to run from the point at which `wasm-ctor-eval` stopped. In this tiny example we just saved a small amount of work. How much work can be saved depends on your program. (It can help to do pure computation up front, and leave calls to imports to as late as possible.) Note that `wasm-ctor-eval`'s name is related to global constructor functions, as mentioned earlier, but there is no limitation on what you can execute here. Any export from the wasm can be executed, if its contents are suitable. For example, in Emscripten `wasm-ctor-eval` is even run on `main()` when possible. ## Testing ``` ./check.py ``` (or `python check.py`) will run `wasm-shell`, `wasm-opt`, etc. on the testcases in `test/`, and verify their outputs. The `check.py` script supports some options: ``` ./check.py [--interpreter=/path/to/interpreter] [TEST1] [TEST2].. ``` * If an interpreter is provided, we run the output through it, checking for parse errors. * If tests are provided, we run exactly those. If none are provided, we run them all. To see what tests are available, run `./check.py --list-suites`. * Some tests require `emcc` or `nodejs` in the path. They will not run if the tool cannot be found, and you'll see a warning. * We have tests from upstream in `tests/spec`, in git submodules. Running `./check.py` should update those. ### Setting up dependencies ``` ./third_party/setup.py [mozjs|v8|wabt|all] ``` (or `python third_party/setup.py`) installs required dependencies like the SpiderMonkey JS shell, the V8 JS shell and WABT in `third_party/`. Other scripts automatically pick these up when installed. Run `pip3 install -r requirements-dev.txt` to get the requirements for the `lit` tests. Note that you need to have the location `pip` installs to in your `$PATH` (on linux, `~/.local/bin`). ### Fuzzing ``` ./scripts/fuzz_opt.py [--binaryen-bin=build/bin] ``` (or `python scripts/fuzz_opt.py`) will run various fuzzing modes on random inputs with random passes until it finds a possible bug. See [the wiki page](https://github.com/WebAssembly/binaryen/wiki/Fuzzing) for all the details. ## Design Principles * **Interned strings for names**: It's very convenient to have names on nodes, instead of just numeric indices etc. To avoid most of the performance difference between strings and numeric indices, all strings are interned, which means there is a single copy of each string in memory, string comparisons are just a pointer comparison, etc. * **Allocate in arenas**: Based on experience with other optimizing/transformating toolchains, it's not worth the overhead to carefully track memory of individual nodes. Instead, we allocate all elements of a module in an arena, and the entire arena can be freed when the module is no longer needed. ## FAQ * Why the weird name for the project? "Binaryen" is a combination of **binary** - since WebAssembly is a binary format for the web - and **Emscripten** - with which it can integrate in order to compile C and C++ all the way to WebAssembly, via asm.js. Binaryen began as Emscripten's WebAssembly processing library (`wasm-emscripten`). "Binaryen" is pronounced [in the same manner](http://www.makinggameofthrones.com/production-diary/2011/2/11/official-pronunciation-guide-for-game-of-thrones.html) as "[Targaryen](https://en.wikipedia.org/wiki/List_of_A_Song_of_Ice_and_Fire_characters#House_Targaryen)": *bi-NAIR-ee-in*. Or something like that? Anyhow, however Targaryen is correctly pronounced, they should rhyme. Aside from pronunciation, the Targaryen house words, "Fire and Blood", have also inspired Binaryen's: "Code and Bugs." * Does it compile under Windows and/or Visual Studio? Yes, it does. Here's a step-by-step [tutorial][win32] on how to compile it under **Windows 10 x64** with with **CMake** and **Visual Studio 2015**. However, Visual Studio 2017 may now be required. Help would be appreciated on Windows and OS X as most of the core devs are on Linux. [compiling to WebAssembly]: https://github.com/WebAssembly/binaryen/wiki/Compiling-to-WebAssembly-with-Binaryen [win32]: https://github.com/brakmic/bazaar/blob/master/webassembly/COMPILING_WIN32.md [C API]: https://github.com/WebAssembly/binaryen/wiki/Compiling-to-WebAssembly-with-Binaryen#c-api-1 [control flow graph]: https://github.com/WebAssembly/binaryen/wiki/Compiling-to-WebAssembly-with-Binaryen#cfg-api [JS_API]: https://github.com/WebAssembly/binaryen/wiki/binaryen.js-API [compile_to_wasm]: https://github.com/WebAssembly/binaryen/wiki/Compiling-to-WebAssembly-with-Binaryen#what-do-i-need-to-have-in-order-to-use-binaryen-to-compile-to-webassembly [backend]: https://kripken.github.io/talks/binaryen.html#/9 [minification]: https://kripken.github.io/talks/binaryen.html#/2 [unreachable]: https://github.com/WebAssembly/binaryen/issues/903 [binaryen_ir]: https://github.com/WebAssembly/binaryen/issues/663 binaryen-version_108/auto_update_tests.py000077500000000000000000000170651423707623100210670ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2015 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import subprocess import sys from collections import OrderedDict from scripts.test import binaryenjs from scripts.test import lld from scripts.test import shared from scripts.test import support from scripts.test import wasm2js from scripts.test import wasm_opt def update_example_tests(): print('\n[ checking example testcases... ]\n') for src in shared.get_tests(shared.get_test_dir('example')): basename = os.path.basename(src) output_file = os.path.join(shared.options.binaryen_bin, 'example') libdir = os.path.join(shared.BINARYEN_INSTALL_DIR, 'lib') cmd = ['-I' + os.path.join(shared.options.binaryen_root, 'src'), '-g', '-pthread', '-o', output_file] if not src.endswith(('.c', '.cpp')): continue expected = os.path.splitext(src)[0] + '.txt' # windows + gcc will need some work if shared.skip_if_on_windows('gcc'): return # build the C file separately extra = [os.environ.get('CC') or 'gcc', src, '-c', '-o', 'example.o', '-I' + os.path.join(shared.options.binaryen_root, 'src'), '-g', '-L' + libdir, '-pthread'] print('build: ', ' '.join(extra)) if src.endswith('.cpp'): extra += ['-std=c++' + str(shared.cxx_standard)] print(os.getcwd()) subprocess.check_call(extra) # Link against the binaryen C library DSO, using rpath cmd = ['example.o', '-L' + libdir, '-lbinaryen', '-Wl,-rpath,' + os.path.abspath(libdir)] + cmd print(' ', basename, src, expected) if os.environ.get('COMPILER_FLAGS'): for f in os.environ.get('COMPILER_FLAGS').split(' '): cmd.append(f) cmd = [os.environ.get('CXX') or 'g++', '-std=c++' + str(shared.cxx_standard)] + cmd try: print('link: ', ' '.join(cmd)) subprocess.check_call(cmd) print('run...', output_file) proc = subprocess.Popen([output_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) actual, err = proc.communicate() assert proc.returncode == 0, [proc.returncode, actual, err] with open(expected, 'wb') as o: o.write(actual) finally: os.remove(output_file) def update_wasm_dis_tests(): print('\n[ checking wasm-dis on provided binaries... ]\n') for t in shared.get_tests(shared.options.binaryen_test, ['.wasm']): print('..', os.path.basename(t)) cmd = shared.WASM_DIS + [t] if os.path.isfile(t + '.map'): cmd += ['--source-map', t + '.map'] actual = support.run_command(cmd) open(t + '.fromBinary', 'w').write(actual) def update_ctor_eval_tests(): print('\n[ checking wasm-ctor-eval... ]\n') for t in shared.get_tests(shared.get_test_dir('ctor-eval'), ['.wast', '.wasm']): print('..', os.path.basename(t)) ctors = open(t + '.ctors').read().strip() cmd = shared.WASM_CTOR_EVAL + [t, '-all', '-o', 'a.wast', '-S', '--ctors', ctors] if 'ignore-external-input' in t: cmd += ['--ignore-external-input'] if 'results' in t: cmd += ['--kept-exports', 'test1,test3'] support.run_command(cmd) actual = open('a.wast').read() out = t + '.out' with open(out, 'w') as o: o.write(actual) def update_metadce_tests(): print('\n[ checking wasm-metadce... ]\n') for t in shared.get_tests(shared.get_test_dir('metadce'), ['.wast', '.wasm']): print('..', os.path.basename(t)) graph = t + '.graph.txt' cmd = shared.WASM_METADCE + [t, '--graph-file=' + graph, '-o', 'a.wast', '-S', '-all'] stdout = support.run_command(cmd) actual = open('a.wast').read() out = t + '.dced' with open(out, 'w') as o: o.write(actual) with open(out + '.stdout', 'w') as o: o.write(stdout) def update_reduce_tests(): print('\n[ checking wasm-reduce ]\n') for t in shared.get_tests(shared.get_test_dir('reduce'), ['.wast']): print('..', os.path.basename(t)) # convert to wasm support.run_command(shared.WASM_AS + [t, '-o', 'a.wasm', '-all']) print(support.run_command(shared.WASM_REDUCE + ['a.wasm', '--command=%s b.wasm --fuzz-exec -all' % shared.WASM_OPT[0], '-t', 'b.wasm', '-w', 'c.wasm'])) expected = t + '.txt' support.run_command(shared.WASM_DIS + ['c.wasm', '-o', expected]) def update_spec_tests(): print('\n[ updating wasm-shell spec testcases... ]\n') for t in shared.options.spec_tests: print('..', os.path.basename(t)) cmd = shared.WASM_SHELL + [t] expected = os.path.join(shared.get_test_dir('spec'), 'expected-output', os.path.basename(t) + '.log') if os.path.isfile(expected): stdout = support.run_command(cmd, stderr=subprocess.PIPE) # filter out binaryen interpreter logging that the spec suite # doesn't expect filtered = [line for line in stdout.splitlines() if not line.startswith('[trap')] stdout = '\n'.join(filtered) + '\n' with open(expected, 'w') as o: o.write(stdout) def update_lit_tests(): print('\n[ updating lit testcases... ]\n') script = os.path.join(shared.options.binaryen_root, 'scripts', 'update_lit_checks.py') lit_dir = shared.get_test_dir('lit') subprocess.check_output([sys.executable, script, '--binaryen-bin=' + shared.options.binaryen_bin, os.path.join(lit_dir, '**', '*.wast'), os.path.join(lit_dir, '**', '*.wat')]) # Update the help lit tests script = os.path.join(shared.options.binaryen_root, 'scripts', 'update_help_checks.py') subprocess.check_output([sys.executable, script, '--binaryen-bin=' + shared.options.binaryen_bin]) TEST_SUITES = OrderedDict([ ('wasm-opt', wasm_opt.update_wasm_opt_tests), ('wasm-dis', update_wasm_dis_tests), ('example', update_example_tests), ('ctor-eval', update_ctor_eval_tests), ('wasm-metadce', update_metadce_tests), ('wasm-reduce', update_reduce_tests), ('spec', update_spec_tests), ('lld', lld.update_lld_tests), ('wasm2js', wasm2js.update_wasm2js_tests), ('binaryenjs', binaryenjs.update_binaryen_js_tests), ('lit', update_lit_tests), ]) def main(): all_suites = TEST_SUITES.keys() skip_by_default = ['binaryenjs'] if shared.options.list_suites: for suite in all_suites: print(suite) return 0 if not shared.requested: shared.requested = [s for s in all_suites if s not in skip_by_default] for test in shared.requested: TEST_SUITES[test]() print('\n[ success! ]') if __name__ == '__main__': sys.exit(main()) binaryen-version_108/check.py000077500000000000000000000417611423707623100164100ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2015 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import glob import os import subprocess import sys import unittest from collections import OrderedDict from scripts.test import binaryenjs from scripts.test import lld from scripts.test import shared from scripts.test import support from scripts.test import wasm2js from scripts.test import wasm_opt def get_changelog_version(): with open(os.path.join(shared.options.binaryen_root, 'CHANGELOG.md')) as f: lines = f.readlines() lines = [l for l in lines if len(l.split()) == 1] lines = [l for l in lines if l.startswith('v')] version = lines[0][1:] print("Parsed CHANGELOG.md version: %s" % version) return int(version) def run_version_tests(): print('[ checking --version ... ]\n') not_executable_suffix = ['.DS_Store', '.txt', '.js', '.ilk', '.pdb', '.dll', '.wasm', '.manifest'] not_executable_prefix = ['binaryen-lit', 'binaryen-unittests'] bin_files = [os.path.join(shared.options.binaryen_bin, f) for f in os.listdir(shared.options.binaryen_bin)] executables = [f for f in bin_files if os.path.isfile(f) and not any(f.endswith(s) for s in not_executable_suffix) and not any(os.path.basename(f).startswith(s) for s in not_executable_prefix)] executables = sorted(executables) assert len(executables) changelog_version = get_changelog_version() for e in executables: print('.. %s --version' % e) out, err = subprocess.Popen([e, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() out = out.decode('utf-8') err = err.decode('utf-8') assert len(err) == 0, 'Expected no stderr, got:\n%s' % err assert os.path.basename(e).replace('.exe', '') in out, 'Expected version to contain program name, got:\n%s' % out assert len(out.strip().splitlines()) == 1, 'Expected only version info, got:\n%s' % out parts = out.split() assert parts[1] == 'version' version = int(parts[2]) assert version == changelog_version def run_wasm_dis_tests(): print('\n[ checking wasm-dis on provided binaries... ]\n') for t in shared.get_tests(shared.options.binaryen_test, ['.wasm']): print('..', os.path.basename(t)) cmd = shared.WASM_DIS + [t] if os.path.isfile(t + '.map'): cmd += ['--source-map', t + '.map'] actual = support.run_command(cmd) shared.fail_if_not_identical_to_file(actual, t + '.fromBinary') # also verify there are no validation errors def check(): cmd = shared.WASM_OPT + [t, '-all'] support.run_command(cmd) shared.with_pass_debug(check) def run_crash_tests(): print("\n[ checking we don't crash on tricky inputs... ]\n") for t in shared.get_tests(shared.get_test_dir('crash'), ['.wast', '.wasm']): print('..', os.path.basename(t)) cmd = shared.WASM_OPT + [t] # expect a parse error to be reported support.run_command(cmd, expected_err='parse exception:', err_contains=True, expected_status=1) def run_dylink_tests(): print("\n[ we emit dylink sections properly... ]\n") dylink_tests = glob.glob(os.path.join(shared.options.binaryen_test, 'dylib*.wasm')) for t in sorted(dylink_tests): print('..', os.path.basename(t)) cmd = shared.WASM_OPT + [t, '-o', 'a.wasm'] support.run_command(cmd) with open('a.wasm', 'rb') as output: index = output.read().find(b'dylink') print(' ', index) assert index == 11, 'dylink section must be first, right after the magic number etc.' def run_ctor_eval_tests(): print('\n[ checking wasm-ctor-eval... ]\n') for t in shared.get_tests(shared.get_test_dir('ctor-eval'), ['.wast', '.wasm']): print('..', os.path.basename(t)) ctors = open(t + '.ctors').read().strip() cmd = shared.WASM_CTOR_EVAL + [t, '-all', '-o', 'a.wat', '-S', '--ctors', ctors] if 'ignore-external-input' in t: cmd += ['--ignore-external-input'] if 'results' in t: cmd += ['--kept-exports', 'test1,test3'] support.run_command(cmd) actual = open('a.wat').read() out = t + '.out' shared.fail_if_not_identical_to_file(actual, out) def run_wasm_metadce_tests(): print('\n[ checking wasm-metadce ]\n') for t in shared.get_tests(shared.get_test_dir('metadce'), ['.wast', '.wasm']): print('..', os.path.basename(t)) graph = t + '.graph.txt' cmd = shared.WASM_METADCE + [t, '--graph-file=' + graph, '-o', 'a.wat', '-S', '-all'] stdout = support.run_command(cmd) expected = t + '.dced' with open('a.wat') as seen: shared.fail_if_not_identical_to_file(seen.read(), expected) shared.fail_if_not_identical_to_file(stdout, expected + '.stdout') def run_wasm_reduce_tests(): if not shared.has_shell_timeout(): print('\n[ skipping wasm-reduce testcases]\n') return print('\n[ checking wasm-reduce testcases]\n') # fixed testcases for t in shared.get_tests(shared.get_test_dir('reduce'), ['.wast']): print('..', os.path.basename(t)) # convert to wasm support.run_command(shared.WASM_AS + [t, '-o', 'a.wasm', '-all']) support.run_command(shared.WASM_REDUCE + ['a.wasm', '--command=%s b.wasm --fuzz-exec -all ' % shared.WASM_OPT[0], '-t', 'b.wasm', '-w', 'c.wasm', '--timeout=4']) expected = t + '.txt' support.run_command(shared.WASM_DIS + ['c.wasm', '-o', 'a.wat']) with open('a.wat') as seen: shared.fail_if_not_identical_to_file(seen.read(), expected) # run on a nontrivial fuzz testcase, for general coverage # this is very slow in ThreadSanitizer, so avoid it there if 'fsanitize=thread' not in str(os.environ): print('\n[ checking wasm-reduce fuzz testcase ]\n') # TODO: re-enable multivalue once it is better optimized support.run_command(shared.WASM_OPT + [os.path.join(shared.options.binaryen_test, 'signext.wast'), '-ttf', '-Os', '-o', 'a.wasm', '--detect-features', '--disable-multivalue']) before = os.stat('a.wasm').st_size support.run_command(shared.WASM_REDUCE + ['a.wasm', '--command=%s b.wasm --fuzz-exec --detect-features' % shared.WASM_OPT[0], '-t', 'b.wasm', '-w', 'c.wasm']) after = os.stat('c.wasm').st_size # This number is a custom threshold to check if we have shrunk the # output sufficiently assert after < 0.85 * before, [before, after] def run_spec_tests(): print('\n[ checking wasm-shell spec testcases... ]\n') for wast in shared.options.spec_tests: base = os.path.basename(wast) print('..', base) # windows has some failures that need to be investigated if base == 'names.wast' and shared.skip_if_on_windows('spec: ' + base): continue def run_spec_test(wast): cmd = shared.WASM_SHELL + [wast] output = support.run_command(cmd, stderr=subprocess.PIPE) # filter out binaryen interpreter logging that the spec suite # doesn't expect filtered = [line for line in output.splitlines() if not line.startswith('[trap')] return '\n'.join(filtered) + '\n' def run_opt_test(wast): # check optimization validation cmd = shared.WASM_OPT + [wast, '-O', '-all'] support.run_command(cmd) def check_expected(actual, expected): if expected and os.path.exists(expected): expected = open(expected).read() print(' (using expected output)') actual = actual.strip() expected = expected.strip() if actual != expected: shared.fail(actual, expected) expected = os.path.join(shared.get_test_dir('spec'), 'expected-output', base + '.log') # some spec tests should fail (actual process failure, not just assert_invalid) try: actual = run_spec_test(wast) except Exception as e: if ('wasm-validator error' in str(e) or 'parse exception' in str(e)) and '.fail.' in base: print('<< test failed as expected >>') continue # don't try all the binary format stuff TODO else: shared.fail_with_error(str(e)) check_expected(actual, expected) # skip binary checks for tests that reuse previous modules by name, as that's a wast-only feature if 'exports.wast' in base: # FIXME continue run_spec_test(wast) # check binary format. here we can verify execution of the final # result, no need for an output verification # some wast files cannot be split: # * comments.wast: contains characters that are not valid utf-8, # so our string splitting code fails there # FIXME Remove reference type tests from this list after nullref is # implemented in V8 if base not in ['comments.wast', 'ref_null.wast', 'ref_is_null.wast', 'ref_func.wast', 'old_select.wast']: split_num = 0 actual = '' with open('spec.wast', 'w') as transformed_spec_file: for module, asserts in support.split_wast(wast): print(' testing split module', split_num) split_num += 1 support.write_wast('split.wast', module, asserts) run_opt_test('split.wast') # also that our optimizer doesn't break on it result_wast_file = shared.binary_format_check('split.wast', verify_final_result=False, original_wast=wast) with open(result_wast_file) as f: result_wast = f.read() # add the asserts, and verify that the test still passes transformed_spec_file.write(result_wast + '\n' + '\n'.join(asserts)) # compare all the outputs to the expected output actual = run_spec_test('spec.wast') check_expected(actual, os.path.join(shared.get_test_dir('spec'), 'expected-output', base + '.log')) def run_validator_tests(): print('\n[ running validation tests... ]\n') # Ensure the tests validate by default cmd = shared.WASM_AS + [os.path.join(shared.get_test_dir('validator'), 'invalid_export.wast'), '-o', 'a.wasm'] support.run_command(cmd) cmd = shared.WASM_AS + [os.path.join(shared.get_test_dir('validator'), 'invalid_import.wast'), '-o', 'a.wasm'] support.run_command(cmd) cmd = shared.WASM_AS + ['--validate=web', os.path.join(shared.get_test_dir('validator'), 'invalid_export.wast'), '-o', 'a.wasm'] support.run_command(cmd, expected_status=1) cmd = shared.WASM_AS + ['--validate=web', os.path.join(shared.get_test_dir('validator'), 'invalid_import.wast'), '-o', 'a.wasm'] support.run_command(cmd, expected_status=1) cmd = shared.WASM_AS + ['--validate=none', os.path.join(shared.get_test_dir('validator'), 'invalid_return.wast'), '-o', 'a.wasm'] support.run_command(cmd) cmd = shared.WASM_AS + [os.path.join(shared.get_test_dir('validator'), 'invalid_number.wast'), '-o', 'a.wasm'] support.run_command(cmd, expected_status=1) def run_example_tests(): print('\n[ checking native example testcases...]\n') if not shared.NATIVECC or not shared.NATIVEXX: shared.fail_with_error('Native compiler (e.g. gcc/g++) was not found in PATH!') return # windows + gcc will need some work if shared.skip_if_on_windows('example'): return for t in shared.get_tests(shared.get_test_dir('example')): output_file = 'example' cmd = ['-I' + os.path.join(shared.options.binaryen_root, 't'), '-g', '-pthread', '-o', output_file] if not t.endswith(('.c', '.cpp')): continue src = os.path.join(shared.get_test_dir('example'), t) expected = os.path.join(shared.get_test_dir('example'), '.'.join(t.split('.')[:-1]) + '.txt') # build the C file separately libpath = shared.options.binaryen_lib extra = [shared.NATIVECC, src, '-c', '-o', 'example.o', '-I' + os.path.join(shared.options.binaryen_root, 'src'), '-g', '-L' + libpath, '-pthread'] if src.endswith('.cpp'): extra += ['-std=c++' + str(shared.cxx_standard)] if os.environ.get('COMPILER_FLAGS'): for f in os.environ.get('COMPILER_FLAGS').split(' '): extra.append(f) print('build: ', ' '.join(extra)) subprocess.check_call(extra) # Link against the binaryen C library DSO, using an executable-relative rpath cmd = ['example.o', '-L' + libpath, '-lbinaryen'] + cmd + ['-Wl,-rpath,' + libpath] print(' ', t, src, expected) if os.environ.get('COMPILER_FLAGS'): for f in os.environ.get('COMPILER_FLAGS').split(' '): cmd.append(f) cmd = [shared.NATIVEXX, '-std=c++' + str(shared.cxx_standard)] + cmd print('link: ', ' '.join(cmd)) subprocess.check_call(cmd) print('run...', output_file) actual = subprocess.check_output([os.path.abspath(output_file)]).decode('utf-8') os.remove(output_file) shared.fail_if_not_identical_to_file(actual, expected) def run_unittest(): print('\n[ checking unit tests...]\n') # equivalent to `python -m unittest discover -s ./test -v` suite = unittest.defaultTestLoader.discover(os.path.dirname(shared.options.binaryen_test)) result = unittest.TextTestRunner(verbosity=2, failfast=shared.options.abort_on_first_failure).run(suite) shared.num_failures += len(result.errors) + len(result.failures) if shared.options.abort_on_first_failure and shared.num_failures: raise Exception("unittest failed") def run_lit(): def run(): lit_script = os.path.join(shared.options.binaryen_bin, 'binaryen-lit') lit_tests = os.path.join(shared.options.binaryen_root, 'test', 'lit') # lit expects to be run as its own executable cmd = [sys.executable, lit_script, lit_tests, '-vv'] result = subprocess.run(cmd) if result.returncode != 0: shared.num_failures += 1 if shared.options.abort_on_first_failure and shared.num_failures: raise Exception("lit test failed") shared.with_pass_debug(run) def run_gtest(): def run(): gtest = os.path.join(shared.options.binaryen_bin, 'binaryen-unittests') if not os.path.isfile(gtest): shared.warn('gtest binary not found - skipping tests') else: result = subprocess.run(gtest) if result.returncode != 0: shared.num_failures += 1 if shared.options.abort_on_first_failure and shared.num_failures: raise Exception("gtest test failed") shared.with_pass_debug(run) TEST_SUITES = OrderedDict([ ('version', run_version_tests), ('wasm-opt', wasm_opt.test_wasm_opt), ('wasm-dis', run_wasm_dis_tests), ('crash', run_crash_tests), ('dylink', run_dylink_tests), ('ctor-eval', run_ctor_eval_tests), ('wasm-metadce', run_wasm_metadce_tests), ('wasm-reduce', run_wasm_reduce_tests), ('spec', run_spec_tests), ('lld', lld.test_wasm_emscripten_finalize), ('wasm2js', wasm2js.test_wasm2js), ('validator', run_validator_tests), ('example', run_example_tests), ('unit', run_unittest), ('binaryenjs', binaryenjs.test_binaryen_js), ('binaryenjs_wasm', binaryenjs.test_binaryen_wasm), ('lit', run_lit), ('gtest', run_gtest), ]) # Run all the tests def main(): all_suites = TEST_SUITES.keys() skip_by_default = ['binaryenjs', 'binaryenjs_wasm'] if shared.options.list_suites: for suite in all_suites: print(suite) return 0 for r in shared.requested: if r not in all_suites: print('invalid test suite: %s (see --list-suites)\n' % r) return 1 if not shared.requested: shared.requested = [s for s in all_suites if s not in skip_by_default] for test in shared.requested: TEST_SUITES[test]() # Check/display the results if shared.num_failures == 0: print('\n[ success! ]') if shared.warnings: print('\n' + '\n'.join(shared.warnings)) if shared.num_failures > 0: print('\n[ ' + str(shared.num_failures) + ' failures! ]') return 1 return 0 if __name__ == '__main__': sys.exit(main()) binaryen-version_108/config.h.in000066400000000000000000000000621423707623100167660ustar00rootroot00000000000000#cmakedefine PROJECT_VERSION "${PROJECT_VERSION}" binaryen-version_108/media/000077500000000000000000000000001423707623100160245ustar00rootroot00000000000000binaryen-version_108/media/example.png000066400000000000000000000655461423707623100202050ustar00rootroot00000000000000‰PNG  IHDRø,9P pHYs  šœtIMEß 4Hì IDATxÚìÝw\ÇûðÏî^§÷ŽŠ  bW¬¨X°÷.F“Xc,Ñø5‰1¦G£1–4ÆÄÅÞ{‰cW""½×ãúí€ ú¼_þws»3;³³ÏÎÎî2Mež „By±´ !„B!„B:„B!èB!„P C!„B!„B:„B¡@‡B!„B!„ t!„B(Ð!„B¡@‡B!„B!„P C!„B!„B:„B!èB!„P C!„B!„B(Ð1ónkäá7ä›:›¿†Âˆ[|~T~ãîÇõ$ÉxðÈñˆ5þ†ä‡³õ_~ð?ùí+l¸ªÏ!Fl½í˜Eÿ•´“˜ì PÉ’±jª­ªì ©ÉÎë$ñÑÓˆÛyð‰²à3}“Îum¥•SÖhøøzbH<Þí#«ú¼‘Wàµ*²ÒJ·^ò*½ US…ý!!èTŒÔ«÷  æèöÇêŠ-!÷NðúpT‘ÿ¹—[ÍòfÌ5 ïá³¾;züLVø yøä Á{¾ÞÆúÍøç áýÝ·¶mÕ¯û‚½8ýn³öˆ·¾…BÈ›Å#:¢ZCWNòbñtã‚o—¸™¦bMl½št5¦¯ý…XÅ+)‡Ô«÷ G ¶”‘—ÀoØ¡¡« Ú̧!Çw,^±íLB~JónkâoY,ý¥œ‚Îd½xÞ]»Ïg“Z7ônXÇÉFº̧¡‡·ÿõå_ç£ÕåΛ¤ÞØ?Ò¦¶““¹ JztëèÞ-KÖŸPðES2ÒÚ'0k@Ûf®¦ô¹IQᡇ7¯üæ`lÞÅu|ýñÀÍëÕµ•qPÆ„þ»~ý‰ÿ÷fõò±Ì Û¾|áìíò¼EjcÖO¾¾pÑŠ˜­ß¹´üoŠK½¶î’u1âö?E® Ýü¼ÎðƒIüó!­Ã uô•›ê1í¿œ×UëV¿ŸãÃ˨_C˽7x`{7Ãç&Þ¸pø×•kƒïçèËS„r®ÔàÖë;íÈ©/}Ü,D€<þÎáà5_¬9õüÀAE0öi’‰w±óÞí׳©³9«ËzzxÏæÅkO?È-Ç:MËÓÞ _)kâÞ¾‹ÏNí:5ñpw°µ‘q49‰—ÿž5`åýrwJBûNASçh_Û\UÂýËÇ»V0¦­Æ»LÉaIM×}7*Ð×já àÖŸ ƒ¯$æõ6ÙIwÎïš~׫*†Ø»_7 úÐÑ%Žü»ö|¿ _X¸ûíß»ã§Ãg¬z ,W? öøñТ½gáÞläœU½›/ô›ºï©®|yÓó2߯µœŠ¤´÷l=vNëQ=~ï­-ïoüþ`lþ/ëöý°GÓ¾ԵqàüŸóÿg×0è»)w‡Ì¿SÚEMüƒdÀE«Òò€6#&™Ù[pHzþ¢#géd 5*][½ŠP™£µy»«öNk\8Ý’‘94ï>~m÷®m&ŽŸs&MgpªªõÊ<›dÎÄ©ÑЙ+ºù|ÒrÆÑx]9‹`\œÃàïÖnâRøs÷f#f41xoШov'ºÎrµ7ÃWjÚvÁ‘ŸŸ?` MLS3Ë}$–zM_½nQÛ­+vôî8Ö»‚›íMØeªp_ ¤JÎÉŒ° mZt*€&3VMîäcñ:æ´Š=Fôrvx\òÈ¿æÁ†ïf¶íÐÁº‘¿Ïð/~ UAÖê‡U|%@¦%Þ]Ú±cgû-­[è»øl`Þå£O[˜”7oêðÕM ÖkR¯•Cû‘£V]L¾“õ´-¬Yƒ ymÄP\ÿnÒP&­,};7øáô?Oœ¼ÿ|vgQ‹æ~6~ï|qS@}eIÛvÃf_R.#{IKmmzy™ûƒïËM^mZ:[—pK`ãf %*CS­ŠP’¼jͯÐK9æÓ«™É³ÓSÖ¹ï·{¦5–!óÜÚ…Ý:Û6hã8õû£·‰K>êlΔ«†­´œ­7òï¡ýú¸7nmÛr`¿ÅgSËsæ4,¼ ÝÐ"÷ ©î˜Åq¢ƒ¿Ú¬u[ëÆÝZNøyg à:`ÝŠau >ƒ*O{+ÿJ£·N7ªQ[[ïæyµÐns|9Ã>qã)?.j+ƒòÎoóÆù´ð³nØvÒÒ ÷4ÛpÕy—y®3,­?,GÞycEØ_s÷§¶}f/¿zõRÄžË'¶r1¯ª¯^ƒ¸cÁ¥œ­]ÿcÞº³¡‰r•*ûéýÿ{oæúT ÎˆZ˜Vd}Ù±2å*óé鿾œ~FXv p—T,oyxmNÒƒ}+çŽN¸Æþµ Ï9+kOÏl;‘˜«Õ(3£Â.üµxîä#©Ï_!'Æe«•ia›¶ÜyTdrÄ®àì<¬K™Ã9~òk“´ƒß~~1‹tY1Q¹€¥›€ÀsÂyø'ß65‘½›£«FE¨iÃ9ó:š@yj~PÿEûÎGe*4ªÔÇÿý:wÒ´ËZXvŸæ—&”£Fo½I¡îÇ¥*4ŠÌ¨S}5û¼° p—³Æ$óýèƒ&È~ôþ„õÿ=LWª©÷þÝðîÈù‡s!h>ñ£¦†Þ\ŽöV•Æ]Úr?2%[¡ã+XR³æ³ÇÖÒÖOžö¿]¡O³Ô*yRèéÍóVÞ2Âf¬‰»LUî „Tß@ºä]s‡uY|&FpŽ ý'Î]tæüÙk¿¼×ÅNPõeùôëî D>rß° >óæš}‰€iÇ.µ¤•\¹>óÚéHöVB#äMvþ 3YaÍ(ÂÏ\Õõg_Ú·ôëmë¿|ÌL¯ÈVI… xU®'`Kƒîùùñ•¦×VõÿìdþÀ¿:ùNÀÙÖµ€³ëÒ».»€ž ¤€ÀÊÓŽ’ï$©«M*dÔéÚLjßþž˜bEÒ%Ùu7ië&©`ª¦õê3¯ýû€S=[a9‹`ÌíæÑ¥» |héÉä¢!¯.ñÔ’½)€u÷îµ ]©Áí͘+5<®Ó±ƒph͵,¾ªz°š´ËTå¾@Hutè2.oý¡O—öµúN›òÓ?»o%ë!®8ýÀ¾oÚUñ#LÄu‡õrví0øŽuthBÞO¥1}vŠ€XVÒVÙyc$Ç._½áVȹ´ðòð9¡'/,h€aŸ-L»;hÊæ›jH½ºÎùö·ëWÏßüë[Û‹+™qFÚ0hiȪ–ç~ xÿï¹ݸ6ån‚°õ±rv~£캎ñ–@dÛÐÐÆ„&iªE*MhïéÀiìùÛÅ’~-bQ#Öî–‚*-B¹[¯.#!€ÄLÌ–³ÆÜn¶¢o¾p“˜êñÕ8ž¶†Ž%ÜÞŒ¹RÃKj]Ë@\X´±&ÙÖð]¦šçª tòiR„lüãÇ ¡=zÍ_Øö\ü~ý*}éij×' þxð£rtEy} oŒs4½ž¯HÞXË®ó·Ü^3{b€¯§©8?ö°v·{ñôH—pfi§v#Ç-ß>F H¼:ŽZ¾ùpÈ×]]*|c-:Ì\}n¡úöyí&oºUôÞ ^ñäN`áédâÔa`kÉBa;xDCs3׺f@ìü#Íë-Â+!’˜ª,BZ¯N«À0(‚ÑñXÆ2 noF\i9J˜×I°ÆÙ†oÈ.SSwgBŽqésùú×ÛëÙVåÓYDÞýº»1‡ß/ÇD8qÎ¥h^[ô8¡ Šó&ñ÷˸:@Ê¡Ÿt tmÜÚÂÇÏ¡e÷vßÜ+ù,*óÁŽ_¿ìÒεׇ³7^Më=êÇ#*Ô±0&­güqhZƒû«'vúüXÔó›@£œ|ôÙ„Aòö_þØ›ÀÞ ]UdXÞ-¤¯³å8RéõX®ÄáuMòãD—5öiVtfi3ˆ -B™+­të­Tò²Ç’½Ò“iR'pkR[òâžåRòžUz loF]©á%LàÖÌçk5c—1p\§ç*t¤M—nÿkíŒþÞNVRŽaX‰™½OÛÁ_NõðøZlNÅ{ ïå$î.Çu+œ»:ÐH;q<ê¹_éér¶ª͛ÈÁÛÀ­•þvôâã¤t…F«Uçd¦DÆÉË>—Jtaõ×S:°Íà1f~?O+‘ÐÔÁgà´yYÉro/ûõ¦&ý–ÿ¹úÖž–"¡Äª~Ç ?ÿù¡· 4×Ö,»YŽgòØÞŒ»RƒKúÓo¡ZHº/Þ¸mz×fŽ&B–J-ÝœL*Ðq½Þ]ÆÀNõå×·;R!ÆgTlq©¼ÌdÚÇ[>y¯á_‡Ôµ`õ¨E~³ï½YÛ—ëýv†µ7w¥—4bó¼÷|þÜ0ĥ猥=gTªãz½»Œaª§p¯ow&äµè@taûÊñ£{4i^ð¨´OZô›2ù׋räÞÙºî¡ Êˆu›Jq®ØcXo' q÷¾ˆÒNåTVº|+:­ #ÚôÈkÿü<§Y߯w•øðV]â¶Yã§m¹™×åkÒî]صô@t¹¯¾½4oº¤õŸ÷÷Ž+‘ñYªü×3(²“ãŸÜ¸ôï†Ïž¤®|´mÎÏ»ŽÝÏ,èÇ•©OÎï_ÔwÚ¯‘å X»Û¾üЙ|õv&Ä^O Úèíëoê$ÞºUx¹ë5¡|t±}0éÓ=¡Oó›‘üñ¥=?î)ò]ÚñG}·òØíÈÌü&¡J‹úïØ?ßí~–¬|ExéJ k½—Ñ "I·îƒ÷çî É[±*åι%4ò²“éw}6¼ÕGkw‡&ä€>+&tǯóZöýjWB9Ïê loÆ]©á%Õ&ìülx³i¿ýs¹ð ÍP¤ÇÞ 9ºrw¤ª\×kÝe êT‹+ñ¦×¹;RLS™§1——ÿª”Ò_ëcDŸ™7öwOÜÒ±Û’ëÕì]ˆÕ9o„Z!†œyNÚvk®GöÁÉž³.çÐö 5¶%×ܬ‹êõ t⎼§¤¼j½„Tç8xæp§°s§B#"Sy—VCšâh¯Ÿ~L¤:Ïd˜hâõJr.®3¬—´{o„¢ºmÕêœ7B-ä•(ù=ØÏy%C¿Ä@B÷žŸM}×Ågï=ü{þ±z·©ÉØššq‰GàW ñä¶påPë%¤’ôi—–¬Úê~\J®rãBv,î:ætºFj6cÏÑ!„B©6XÚ„B¡@‡B!„B!„ t!„B(Ð!„B¡@‡B!„B!„P C!„B!„B:„B!èB!„T–àÍ) ËþìÆ5þóhí}~X¨œK „BHõŒhB!„rÕî1çðŽy–FB!ä52ú¥+βÓÌ•»¦úJ Ô¬?»+A[í·^ÿQ”(ñ!„Bj0㎹°æ?^{hª¯Oþž9lxMˆr!„òæ2æˆçÒïëí<À?Z4aÁåÌ¢“y¦‡%ÛUÂx s¼ž?•Í«ÅL c<ÌÑ-JÓGòÏ’Ë„ìH ¶»”qdÁóü}¿+SwR ¾Ø"?svœëÍA¯ãeó&ÏÇ]%MO®ðœåBŽégÁõ‘1À#Z¥?’¥ß¡àÕÔš!„76Ðam:/ù²“ä‡ÿ7}añ(Ãô2g ¯ 1,ÓÕ‚)ü²ž)÷ž7WìdÜJ;Ö±H@ã#cæË˜Ö)ºå|Á ÓÝVð©¬`åÓÓ’yÛËLÌ-v`} WÅÀMÂN”°m2´ó2y5(B!¤:1Ú¥+‘wÐŒ¦P]\2k®X9ÉXgö ÛgQNÑX©»-7D˜ÿs);CöÊ7ÇþϾH”S„¯%7VD͉By3‰çøaî@Úæ•Çbte¦äHÔÇæý©×’¨OÌû›ƒ  ,¸Fy‘„N¿*AÛç©fh¼îX~äÄŒ2g¤€æælÞ…*J?7VÓ3Zû]6_Õ¾ñ4g;° ×èˆ×ö~ªé§ýK™Ÿ·~挌!„ò:B'¿n@Fȶ°—^¾ÉÕò©ù±ÃhùÄ‚¿E¦ƒ4?Ù™TÝnŸË#U­_™ªÏXHY7`˜¦ùC;ü¾4ÝU-TzþD†>´J7ÃøËòB0~c²î˜šWðÈÖð[RuS1ëÂP‹"„Bª#ÍÑ;7ts3òåSry è…Wø7À`P;?ôâCŠL=ÎÕðO†XÆš‡‚-ì•ÝØÅ .—ÿ×8gḶ%cÇ œ§FE!„TFÑa%fRÊÌ\]%—¤/5Ìx'ü_Ä´4±1ÆZ¸—%0¡B!ä tôŠl™•)g@býGQš.Qš.Q/ÜÝÍ#*?RbZ Ÿ}l*bjåý¥ãÓx€G|A²v"”]ð¹ã+ÞœAåЕ²ðˆ}Ù$ - çB!o` £Š‹àÖ¼®¤RËáùóùs{Ñ͆ë)‚˜˜k“?õ8]¡æž¿\p‰Ì߆ f¤Ç¼0âÂ#² êgÅ6@ÀÀ”…¨ôµ§\Tnθ²²LS3îkF€çC òv=S73NÛï©& J3(NûC¦þF޶o”ö4½”B©NŒ4GGéD"ê;´ jbr&D^‰%ÝËÔÝ6á|@ÀÎsbçD6fñyÁÆõ,}ª”µÀ±3Ù™¥.—k ÷³ËËFuxþ’¨k.Øh^X:Þ|.p3SaÂÕš[pÍ-žÛ¼%ÃËiD‡B©NŒu{¹òÑúO‹³ûyT*xÒjõ_§èãJ CަèöL=ÎUê¾Ìä5„M'Ë3kè¿ }ô‹ŸrŒ=~~Š>¾Ä_rŒ µ&B!¤šá…ÖFY.õQŠï¨Þn~Í2ßÌxîf(†éi‘ÿÀSYúh¾¬Ïs5ü‘\è9Æ‘cL€çï)øÕɺMªbS•“”újH9Æ–c¤ Èu|œWsõg”|Þíè<χÈùl–qà˜Âw©ghù‡*þßþ¼ŠnðI«ãO+a.`œŒ(•~_¦þœyA•\Ãó™ L9Æ’€G´Z4[A%5(B!¤:ašÊ<4¹ZvõG3$oùΔC Ú¼„ByŒ6¢€ÏzrIêÔܵQ¯Þ¾—ßN¡]B!äÍt^õô¿cç¹C[ÕnÐiPÇŒCÿÜÊ¢‘!„òF:xeÔŃÁ¤Ý—,=®¤û!„òºsŽ!„BHµÂÒ& „B:„B!èB!„P C!„B)'ónkäá7ä›:›u±²Æ¥^ÓW¯[ÔVVÂ".}ät&«\ÉŒk,>‰·°{ñà,ÊüÙ!3º0Öá…“*™!IþÄ^¡,W2£ª)•%­7îðÞY­9{¦ {,Fu!5P5à+òš1Àª‹Kfí/ñŠcÒ°ÿ£7ÿ‘„ùǾŒ«ÎÇñl†´wKêôni аÃûïÉ_Ús‹juÝÉ)J&kÕzHߣ–¾}FûY¿|Ž65&³ŠNŒµiÑ©šÌX5¹“E©YQ‡¯nâÕÌ$ï_½VíGŽZu1 øNZÔÓ¶ 9ˆOùqQ[”w~›7Χ…ŸuÓÀ¶“–n¸§)¾0“™N˜ùûÓYùÿ¢ç¹$üe¡”¬Úb`.W°0.™¶• õY›Ä¯\£?v]b—~IôÜ[f Lö–V–âá– ‹Ãx˜œ3¬>ML&„ÔHÕóÒ•Äsü0w móÊc1%ÆBÇV=ó:^>åò¾Ã§ï'+Xó:­ºì\K X7oå~þ@„ ´)×vŸo8­£ ¬[t‚»)äÞÝyäQNI³¨Ý¿ÿ}7—3wiÕs`O/ «~µÏíy¨„ȵu×¼£KîÝ£{ÝŒÏÙùv0¨±9À8·kí~íHdñ9‰g¶ýs#13W­ç$fV6vfê˜üª{–|^|ø§œC8Ï¿°Ð IDAT“Âþš»¿ÛÆ~¶}f/ï3[—vaÿ¡C›÷ž¾š¨.õ Íks’ì[97Ýaß‘áÖýkËv'ç0k>{lm mýäiÿ Éâ )ôôæy\çw~oYd\°dU‹WqêP‹”\Ó‡9œ³B(2Ñ©èÅ]s„€î?»¤Ý=ºXiönHý’‹<ÇÀdÆVs*KóhÇÊmÓVô4®ÞºOË$„ЈŽüº9!ÛÂ%&àl|êå ¬¤žÛ(4![­Ó*ÓÃ/=ž˜(¹zY†pÚ„#2ÀÄÝÕroì=õ ·ä#Š^£ÑêõªŒè ûŽÜ×äg§¾Øz×1(ïÞ}9&C­Sç$\?räfÞÅ Ymo›çãÆÜ¤Ä”•FÏë4ŠŒ¤˜ðˆ$E• è’wÍÖeAð™ À96ôŸ8wÑ™óg¯ýò^»²ãYyØù'ÌldyÍAZ§c3 áКkYed×Àd¯„>^¢ Ñ3y#:B­´®àr/ˆõeäÍÀdoueå„m<Ÿ8toç(¤“B#:F!vnè æfd)÷´pæ¦yÙø¿û¥ÿ‹ LÍ9\óâÕqgÞn:Æ×$ÿlúÈሗǼ"în¼]ȬeÀ›Ùæ-I•Ï’ÃSÐÔ€‰½ékŽu—·þÐgëRÛú­zuéØ­Û€&võ§há5¦ÿü=Éz`$†ÍÕ½‹o7;S1À+Ò¢s,0lþe¡u-;qaÑeÞSd`²*ÀØ*L»ä˜ÔS ¬t¬à]:Ë(œhÃé„fªt¦¬˜ìí®,EÄ•ôõvõu#JC}&!„FtŒ)‰™€23·”ù,La7_Ú‘P$I!´ts2)<·­]ß]fÀq×<÷–çyÏ—œ—g³_ùê±ý4)B6þñcÐОN½æ¯‹l{.~¿¾kÙuþ–ÛkfO ðõ´3Í{>!#µv·+6M„Ï/ÉK6²ÉŒÞ:¼Ó?O¶j¯Ù騼@á9kÝ‹Ù+ù”Q ƒ’½Å•¥—§ç™KèñÉ„ tŒC¯ÈVY™–2MS'OÍ}Y”òlž±À¾åPÛgß™4Ö×Çü¥%ZºçÏ;V¦+ô€>'Ež÷»º¶…Ï0f$Þù7å$åTä¶¾ >bÆô9Ž|ýëmŽõl…€Ä{Ü/ãê)‡V|Ò-0еqk ?‡–ÝÛ}s¯ø±72 €[3IÙ‡hƒ’—Pm><[èîX¤¬pŠýÌ-z¶[ô<ר¥VÅF*tœ&€Vl[fði`²WÓê«ke±2 )E¶’îº"„P cªø°nÍë–Ò)kSÂcò.©"/¯ÿkñ’Ÿ¿øö§¯–­]»÷âí'·×ý¸dMXÁÅ)ÖªUŸöø„“Ûÿ}¢q½îý”|ÉÔÑÁZ*äD^ºµ2Ë;&=N×Ú”ûó"©o`Ÿ&¦Ndîê×·W£¼¨Gy¯"ÏyãµÊü_97óqr #Y¹4jÑÀ®œ—¥M—nÿkíŒþÞNVRŽaX‰™½OÛÁ_NõðøZ¬ 9x»¸µòÃߎ^|œ”®ÐhµêœÌ”È8yÑ%)Ÿ>‘Øõý´—c™00™qq:‘%QF°En¤P—Ëðz†W±ºA±£°F˜{Ÿt&¹‚2ڸɌ¯&U–¤N 1¡ 4™RUË9:šøK'Qß¡mP“3!ò’ºí'Ï'zws€¸NÛáuÚÿ2%Ö„}”ÿ"ƬA@wWàcOéGùàFd.¨c/ŸŠöíçÆÍú¿Ó¬±óñ¨s—c*2A›—oÂ:]?ü¸kÁçI"î'—ãÙûRÏ›6sjÚläô¾{²uöæ'j€Mz‡6nM&|=2yÅɰÇ)ÙJ+”È쬊¿e+7ô§ßBÇ|Þ¸ûâÛ\}»ý¿;I ˆÍ‹\ÿ+O2£ÒqêLH¬Ô}st§¥êN¯8ž5ÕTõ Uët±OªÃmúaSe§ÏZi+”ÌèqN ª,™÷ÈŽæ@ⱚ C¡@ÇH”Öïx:mšûˆÙý¾¿¼õq ã$º”sÛöÛ¼Ó¯Y Oµ1u0å¦Àˆ]º{ˆ¤þ·çjšȸuìïûjqÔïÛñZđؗÌÍT†8™LŸqeç~çqZX=Ÿ*ãÖm×2*ô„}zØõ'º×æ^Z2ãPŽ@Gñ`ݸϔuöoXÛ!’*îþÍSGv,_w*ï‘AÊû›ç轡¯{ÐW¿}UVô±yÞ{>nâÒsÆÒž3*™Ì¨A°({ŸÌd\® uš}ë2GÊRLS6ªÆÉ 2mdV2™‘ÕœÊâÜzOm<Þ½þ! èBj"ÎQh] ³¥K}”â;ª‡·›_³ÌãÁ73JuxUÊýëaÑ F,–˜È¤B€.75þAèµ+24<ÀÚ´0ÄÇȽ¶ëÀÕ4]ÞÏ’â™-ÝM‰³mÎí;1JØ5ñkl 9ãSs©€ÑæÄÝ¿²gû©°"oŸàÕ©n>Lâe–ææŽ:#öÑ¥“vœZdlèÙÒ2Â.ÝH}IüÃ+ï?QšÚX[™I  WË3RžÜ¿}ãALªºSGtòè»—öìܶâÕ¿Ükùq_g\š[oØ/;¯2Ú„Ò[@¤ì7óéw?Ä7’RÕ×ð@GT»ÇœÃ;æX–˜×vÖ\»’¾Ðkø8zH5«,R…rï¯WA¹ñŸ{¹%íêfuý§}¶øØÑS)oÈÃoÈï½·gÕŠ÷Û×–<FÀYxŸõÝÑãg²ÂoÈÃo$_Þóåð6Ö/œã±–Ý¿Üxh^—Z"jHÔ¨!ÂdÅžæý›ãþÒôœÎ£¾ÚÂBÏRÕ—©š?G‡³ì4s宩¾(OÎ4xWÂso÷d˜®‚Â2´ßgóI<Ì8¦¾„q×ñ»¼¶º·kFR§Ó°Ycz¶öq“ŸãòÙ­ëÖ¬¾˜ZùÜø%ã¼née•õ¶¨â:­`ïñî…£3”ô•6lM÷ ß/çäŸ]mÛóE Å éâvôëÿé"OIºN-t-ÿ_Ž>¸D9¬Y»7„®™=¡s~G€1uj0bf{aÍê” ¨¬·Bu­Sõ“}ßì ¿¼oõ¤qÃëµð³ðiëÚiÔ¯¶_WAÐpâŠa.…yÓ$\Ù{)ü|ðÏAÃû»7nmÛª_÷{púÝ ç¢EÐ< 0té‘ H›O<¼éÃöæ,5$jHÔÞT5¦êkÔˆç2à§kK;™ñ–MXp¹ØëvXög7®iY¿æ?Ö^@a2þóhíýs¿-ò!Ãt6gýÅŒ‡q@ Péø›¹ú™ú°^hXÏ„`Â63ŽyÕÂ#F­‘ë·eóiåë¼rl†žn\ðí²w"ÓT¬‰­W“£Æôµß:kâ¿ùc+’zcÿüaH›ÚNNæy£{ª¤G·ŽîݲdýÙEñ«sBûNASçh_Û\UÂýËÇ{ííøüPÉŒTYšÖýÒZz©\4R€V.мcvúˆÅíDöY„ê€ñI<ÔÖú¼W“h²D‘af§XÞIfŠ•”ÑÛyÉ}æúÔW:YëÌMõ,›iùÇ*ëü¢²4¦ÍÀÔv .v:1 uºävˆÅMUn÷n9î2.êŠõ¦mæñêrôP§œ]÷õ‡d‘¾mê°‰'R [g×õ¯CK‡Zfíž1dÜá_£™?WT9ê‘uÚroa}õ™Ý'^È.½X¾svý7ÅEyjZíÉ!Ï%¹ô^³ã»¡¶È:þY‹é‡+÷úOjHåhHÒFsnírÉ:ÜÇÿ³3òbçùí¾?t|˜eâ–w-¼K ér ok3¤êóe®lÓ=½}3…›µžáÙŒ§Ò+§­]ë|½CÓŒ¾Ý³½Ý5R¼šËHEÞ¶Ø{ÀôÙØ[‰£/e É”=Z“ÿmÉã<åày³ª¾DÕõ]W¬Mç%_v2ƒüðÿ¦/¼\å/d˜–ìs‘“˜cüÌ8?3?^R°å…v†=×÷¹3*®bv8ËÈáÓ Ÿ$®ÕÂÀ­?_IÌ+avÒó»æŸßU4™ž—ù6®åTäwöž­ÇÎi=ªÇïǬ¹Q¸»I½¦¯^·¨má2±£wDZÞ/î†%3je Õm»gÝ'&j/¿T/¿¬ÿsÙzSÿ ¥}‘ñN¡¹º^ÛÔz~9t9ò´È‘L¢=+ñùœÓ[йÜÂ}Ä¥ Õ~9…»›•²Ee‹‚ÑØZm“¦äˆ¿Ý-.Ç;Ö ©S]òÉíòûkðˆŸžìõÑæ¼ÝZà4zÑ7C-·íÓGS^Õ˦VRÙÉò2ר‰ ¸hUÚ›·:öДqvµöÎjÕý³%]/=–¦§†ôJ’"âä±Ô wmÚl ;s¥H<#vïÕÖP^9ý$—R)‡CªÕM›:=­ŽèY@cYKÞ}¼¼©‡ó²`YvAƒ³óÿd„¢ð°ÀˆtVN +™èäAÓÔ7} §zU}Í tDÞA3˜Buqɬý¯yÈ‘cg™ë¯¥ó*€a™YŽ\ïRî»KTð‰åšþ¬M‹N›ÌX59ká–ó÷2Kn'êðÕM¼VìAS»º#gþ:½­µï¤E=w÷Ú¬qã)?.j+ƒòÎo —¬:q?QgY¿u÷©Í|ǧhTf`²ª©,ñŽïÿKàÔÐ[¸ævè—è£i÷~bÌWÎgSЊ}éy¨p˵N>YƤù˜¨z •‡ül–ùüæþ»Áîâ#qj&«Ô0ÏYŽ¥‰ƒ¿q Iá]âgP²ZéŽÖM˜;BaÓ:Ëù€]”ÆÈuªO;¿,hM‹S;þ²lÄåw¶„«EõÆþ°Ê_ŠÈõA‹.–k//úòóÎÌJŽë9™™¥S­Æ-çþþ/ëï–uDd-Úôò2÷ß——ô½âá– ‹»ßœßpàœaõϬ¾§¦†ôJ’âá?§3ÞjÙ{ˆé•k9…¥qôëé üà=95¤—>ʪzÖ2ûÓêˆn¹k¿Åí(Z¬©Û*}ä°l;ÿÄA·jm¼ÇòDª.½B0:n;'M’3bKumŸì¶u$iUwðR˜¬øÀÓ8stÞ ª/uõÕ2ΑxŽæ¤m^y,¦¤\¯ÿ(JÓ%JÓ%ZwóÙµ*M—¨ÂפÊÿ!VÓ=JÓ;F»ª ÝØÉXgê˜?‹rngë>‹×xª ˆÒôŒÖNLÔ-ÍæËW9а¿æîOlûÌ^~õꥈ=+–O lå *ë®x^›“ô`ßʹ£ƒÓ®±íü‘³æ³ÇÖÒÖOžö¿]¡O³Ô*yRèéÍóVÞ*ös“µ²Š4¶´TN©…^˦?1Ýÿ›ëÖ 8E¯ª'ÜëT‚˜›ÖkÿÏ<`]rJH$xpK“Â)^<8•oilF«ÕpQ-¢€IJá⯛Ç0Ó˜ ª¢Nyù¥•s¿ Ó‹ZÌÝ4ÙÇ®Ñû›?k"Ôßûrúï—rªöfAónkä¯&_;ºkåòq-¬².-=å§e4]Î9ð“_{˜¤üöó‹Y¥dNóhÇÊm€Ç qõÄÔ^UCʽ¹óT2`Óc˜ŸYá7¬½_·Ÿý/MO ée§ú¥W=ïÞ#µ‘ê{ö?®²ýï‘P®a49¢û§íWl–ê kÖE!ËÛè¬ÎÖ€0ô²,>‹Õé˜ÜTñÝó¶k7šf¿‘wþVߪ¯YŽÐɯ›²-LñÊW.×C (tüþ }\~-Á†¦“I~gr/M;;MQÍgñà•ž¤Ô_-wð®KÞ5wX—Ágb4çØÐâÜEgΟ½öË{]ìÊîåaçŸ0³‘åU ´NÇf@¡5×²ÊØµ Löj*K'¼|À,0k˜ãPúh’2N–@¢£©–½4^Ãjx^Ëj°˜Q+pR ûñ­Ot`Ì}G4'OÓdçâÚ‹ÖZ_z$Ô"ûÜN#c¿ù4¹©e±…äu¿Ü›0àS-«¾†èèÙ ÀDfeÊ!½2•Ïåó»?o§*Ýì#uð`úʘãÙUòœ}Σ#_ÿ:rü¾Žõl…¼Çý2®rhÅÒe‡nÜOÏÖ0óºV†,ð)ÒF&¡½‹[3É¡dE]¦AÉ^Ue ¬UV²…9:@¨ê:&Ãȼm½ó˜éãA¶‚a…¼Ì>kʧ)nåÍ•q—fÜ:-8ÏfL}'ßÞé7›4í´0øÃð€a•š¢£×ë––c·VÇìÛqUû¦. DxŸ7ƤõŒ?Móº³zbŸeWÓ šéÁÊ,¤ÙJ=5¤WØ´qÇ™¹«·óû´[>ój“ÁmÌ€ìóû®æPCªÔáC'ˆÏB+Ñî…n'“ 8 Ñs1׬7^³Þl¢ön™Ù½w¦—SæûD_.³HÍ+Ï(µ€Pg%ã!7謆çl™G}½iÞ–ª¯a#:ªø°nÍëJ*šämô~VlS LYTðYÓ<ÿoÁ­Ü ¬ß[±Í…Œ)°p1­D(ç{ФM—nÿkíŒþÞNVRŽaX‰™½OÛÁ_NõðøZ¬ 9x»¸µòÃߎ^|œ”®ÐhµêœÌ”ȸbSוOŸHìú~Ú˱Œj`²WSYŒÞÃ?Û P„›$iÖÍ€dßfëë¢ 9«Ó3›™"¬È|Å––ÿüõÊ4Âл îÒU)+Ï`«^.ºû¯Ýªmc¦–ܱðx£ÄfÐøzè s˜\5½ié'?z6/‰‘.3Ô誯aŽ&þÒ‰DÀ¬mP“J:ü¥‚ŽF"á~vwîwáTty3õç ª¬•9÷“³`¿»ðT-áa7á'Á"+Ö´|]™gM›œþÕþý‡bB¯æ<¼–zýèÕ óß©<Ù:{ó5 Nz É„¯G¶ià`&á°B‰©Uñy鹡?ýª…¤ûâÛ¦wmæh"dY¡ÔÒÍɤ"ɪ¨²TÝúfÕwÒ‰8^b¥l58nJ; ³çÚ—´@VÀØ3È4¼Q?ØqÌ"æYHÊij½Ú*¡¥YnßiOû¾|õ‚›§¥ýF+ÌZ&~Ö21ÿÃóó³tu‘4ÿJŒTšµHú¤ERaÞ®l+ÈÛÛUõ5kDPßÛ´j¿l“ÙÿT»z~Q¼ö×>ªÈµÚ -ªÐ§ëÃËßäªõ bµ§éϨøÔ"?OÑðgrùr^W']ؾrüèÁMš;M½ —>iÑoÊä_O<ëÈtI;?ê?ïïW"ã³TykÔ*²“ãŸÜ¸ôÏZ³6açgÛMûíŸËQéû¶"=öVÈÑ•»#UåMV•%¸vQŸÍϦ<2ÛûK­UÇÅêüÍÈd\søn±ý±kÒ„LV“÷¡žQd ŸJo‡˜¤”¯¿2îÒŒZ§—¾+ç5"cÛ¼Eû oÂâ³Ï-]¸!‚f3W vªà ˆ.qÛ¬ñÓ¶\Ì»°©I»wa×ÒÑ*@õhËûŸü¾öäíðTeþ×Éã#®ï^·dH¾CׇÎX»Û–÷tɹϊ­DÈÙóÓöêªßë©!½@¶ñ«¼MŸ¼mËœJ®ý-iH/—}×öÇù.[OšF¦°ù›]Ë%=6=sÐls!Lœ¦(¸$¥á™ZãöëiQÑ¢Ï2Ýøƒó¾«’Œ‚ÂéU\R”ìê ³’Æ0˜Ô ŽË·›G¦ç-–ÉŠ•]8úü½î©çƒª]| IDATVì4‹LË?”+“¥!GÌ“´oiÕ—ºWßw]¹ZvõG3$oùΔC ¼ÉŒóþðêZY¯ò»T§¯kÙú»VÏðDÖñO[L?RÉWQCªXCbd¾ßîß0˸¿¢éàuájHoÑáƒú:¢@³wÁ°?#»‘+6oëmÊP{ Ê"Õ #qüuÇêž@øúaŸ«tE ©\GsÓZÎȦn‡ÿýþÛ,wñ¿}µý‘†5¤·¶êK^KµÑÉÛ“-ýg®Ü=ÕWÝß ì¹!†óšXYoç‰øOà2hïÑ/:‹¡¾ý÷à ¿œ6Ö ¨!FX{üÇgy!¯êüâw¯}(ç©!Ñáãí®úš‚£Ðºo^uñ`ðic·ð%K‡+yj5±²„š696^;fž¨¥ õ¦ÐËã“ìZ¹ÝXÚÎÖF|«5$ÈœZ÷ïÚ¤– ^uóäŠ/æ|´û‰‚§†D‡·¾êŸWÍGt!„B*Ž¥M@!„ t!„B(Ð!„B¡@‡B!¤J hn ëF†wmfÇ'Ü<¹åPXš®¦HìóÎŒ1µ 2xåÚªÊ%#„Bj Ñ) rïÐÌNˆ›víê*¢-B!„ÔxoÝˆŽ¨vé¿O,™°äÔó¯Ue˜’þ,–BbçÙªUãÆõ\ÌD, ÍM‹ ¿úß•[q }ñ„NZ´kZ¿ž‹‰¼:+.òÁå —nÄ*ôÔæ!„ tªgÙiæÊ]S}%PjÖŸÝ•Pô™cê§gNÞ´ïÚÔ‰·Nžˆ~ñµbœ­ßði=\…E·žÌºVC¿Z 78°i댼‹]¬I£v(ò^FFdîR¿Õ ú|lú§ !„B(Ð1Ö¼ãÇkMðžü=súLJž²ª6íÎŽ?îì(uºÌ§ñ9pµ*á+©O`WÂä<ÀY7îØ¡ä·OK½{õð}´ýf6=¡“B¡@Lj8—~_oŸàþÑò  .g>wéÙ„ÜB/ÎÌÕ$\=q¯V Åýka‘ñrЦnë¡C[;³€Ðµ‘½0,R èR®:Öp|ûÔ[gÎ_¸•¬–85òÑÛÇçÒÈ^x3»\o¡ç¬µïÖ¤–³½••©˜Ëˉ<562üÚWoŽ&°òjÕÿ‰·³™Ï ½..¹Î KF!„P S3°6—|ÙÉ òÃÿ›¾ð…(Ç`|έëo=û¿6éÁ• q­‡¹`¸Âi=Ú” ۷Űñ‘éZÔO¯Ÿ>ÑÄgˆ ½¶Ü+gÄŽ>=Ì‹~$4±©ÝȦv£Æ>û6m»•©Ö²q¿xJó$siâïRÒ¦0,!„òf„oC!EÞA3˜Buqɬý F{ #9øøuÌ ”×⟽W—ý8?ÊÉ L,œÌ9÷/ǩ˹mFLz)Ñ‘¬AÏNu%ÀH=zõ,_ÊȳaÉ!„7ÄÛ0¢#ñ?ÌHÛ¼òXL)U÷6,ù(ñVIŠ'SÅœ>ñ°´× ,›õÔÎ@ZÈî#ËÿœÕÓ³›¶p™©™9 •–çD2Kçz݆tk$Dn>¶Â‡1YfÞyW tq§·8ÿTmåÓaØ€¦Åo30!„BNM!tòëæd„l STÑÌ\<\,c¥¿0ZÄÊÜ:à.‚>9dÛö#O”˜‡¬Wfåš¶ðoïUÇÉÚ\Äà5JUþÝ_R+) ­kÙåMßɺvòìãL pûì‰fM‹m&#„B(Щ1ÄÎ ]ÄÜŒTWÑX‹z}`{`ÕÎ{YÏ.21çÃFu©/Ÿr{gðÉ[©šŠÜm%°m7rLï:Å`È%’‚?9#µÌÿ =&³ô‹s&#„B(Щ1X‰™€23×x°QÝÛ°d#›Y¹zµèÓË׎ÔÛ¿­}øÑü9@¬Y½®ïhj >éúÁ-Çî¥h*˜y«¦½ž‹rJŒ`6¶+`+ŒB¡@§ÆÐ+²€‰ÌÊ”CúKc½NŸ7E[ 0P•1ÃóZeVò£ëçÎ6ñâÀÌÉŒC‚`¤µ:¿?¢©-÷o ¾š\‰‘$—]Þ_¹÷Oÿû06=W¥Õ3Sß )C]Ÿå:7]ÈØ{9JnE”rÎÀd„BÈ›â-8¯WŇÅpk^Wb@T¤*xÈK«Æî&ÔÚ«MàVÀšzõî×¹m7 ‰Ãp3»z~]»çߟ›–«ÀHk÷ÚÂÈøo—!QgÕpФß.˜9½#î…pJÇ?ûS§Óétzž×iµšb7biR#ò‡’Ä>Zº˜‹X†Ÿ¯]“B!oŠ·`DGéD"ê;´ jbr&D^vbm꓾‰+°Î&Îî÷©òÎÝý×ÒY§F­šz ›¶*ù§éaW5kÙ¨csX¶óE›¡È½s×bMºv }ü¤hh¤IOâë;3€Ì»ëûÞ]KË·âÉ¥9­L˜4ê5ºQ¯J%#„BÞoÃɼòÑúO‹³ûy¼,°ãs†\Ë~þS‰•…˜ØÖu–ö»ÜÇ‚Câµ¶umË—?¾„¿ ?ɸsüDÌË'ñªØ£;.ÆêŒ“ŒByCpŽBë7¾ºÔG)¾£zx»ù5Ë<|3£Ìû´™î%ÁÊÎÞJ&dÀ«2£Þ:q&,:[­HKJËUëÀ ÅiÞõ­"->*ôò¿;÷„<ÌÊ „ŽÍý|-Ëz.MFØ¥©…±†.;1Ç¢v-']â­Sû®Æ?ÿ8½üé»1*L&ûÿöî<.ªrÿøwfcA@5AÔ54÷]”Ô´{£ÒºbeþºÖµ¬[÷Zš¥uoš·ÒP·4 q7E QÙ÷a`†Ù˜™ß,‚ $Iãçý—gΜó<œ×ùð}ž9¹€ËnÛ±A«RÈjªJ‹óÒ³ŠÊ›õDÔÒXr3½RÍ1YÍ9L"C‹ZÙX_[Z™šYTÙ¾ß߸€)`Œ¸?N2oëµB,¨&zÍò•q•Zt=À#…Šs®$òC–H|§M÷“%H«Õ ÷tL%ê¨K~>•À \8jðcãç“Å}w³Q_SÉ:ªâ«?ÈæsÊݼåD® ÓQLÛ£2GAxV è è èô-6šàÂõY¹Ô¥ËK]Þ2ÕcMÚUñÅHJ|uв ø=x„ ¢:` gðSkOzãIqß·#K`ëöì³áî\4üùXÄ“7FŽ1Ñ…ƒ¶ø³ÀÐUxüšíGVùñH¥}rÏÅ#•-}ùi\υ϶Žì²z½uæ·›ÿAdtœèaë“ccð\LJ½²tÚ” "¢àOÊS+R“.FïÞµój]OûËL2u}¸o0kkJÀ®y/î¸$õþ¤¢ z×n¢q¯·ÊGE߬ [ÔÇ)zÕGc_ÿöÖ®×"&ø8 Ú“pPÀ“‹×LhÖóýiKÌY¸%^Fü€çOìýÛã"\<ý*:½ÁrœõÞÁ72ä}º,bCRƒ‘?íYB‰ÿ˜À/gG+‹H§Q6Õ×HKKÒ¯&¥Ët·s =.ÀÓu 9›tʺò¬›‰ç ëÛ‚“‘ò†ë¢È÷;ý·ïf3¸6¾cÆŒñsss¬¼èVòÕ‹éÕ¿X:ƒ)äø˜«ƒ˜Ç""ji¾S™Ÿ“}íê|¹žˆ5À÷ñIÃ]ZY ¹­)­¢®¬07åçk7+”}Sá¸,Üþ‚“J¢6¼¿õLzá5ÓÜÆcøO/9ðr™²µõm'ï9ñÑ<Ëú˜UaÏŸ©ëè–mè×q[Š¿\°âDmûëú¦ô}OÏ­ßu胅^9´)7põ‰r.«XOؼq¼)NüßêwŒ¥ßù‰åKF;uª°8|±³ØÎÙ¼àzGÐað$¡KÂ&8vt‹oíäÿ¤“ŸÇÅ/÷'–?ÔåÕ™"¯¹+fˆ;Ή#vô qô6$ö?dÞµa‰‡M·0À¦kuƒ- ñͯ¸~#_ND ®½Ï07Qç-ÌÌ­ûZöæóÃÞ˜› }¸.îDtóïH®j=Þ¦êô„#o%éØFWs6òÕ#Á_Ï_üñ;g§½º¯5¶°-ÙôÏ…b*Yy²öžCӔŭ\aërì•Q“ßÜšøÌ©;ÁèÏ7m4A+ÞË"çI}uó+ÇX1n³wI9ÝL̇Î^Ð)åtŠ N!áãìÌ毅UЂ™wSN'b¿K‚°ÚÇ´§Ý›rÚ5äµ¥À™´¾›8 xlêø!¼¾8‡–;¥uD4<ò³ÇûXv7±I'aë²]Å$÷ùÖÅ"âx>óïÏBøT¸gÙ¦«FSŒ2gćÎ]æ…‰Éý*:=Ås6Ì™èÎ¾í§¤Æê ¡G_Û»>%öÄ…Û• -|¿gV…9uÙÎÌ~ÔÔÖ»¤¡6é‡ç³j”L‘ë¨Éá\¸DF9'Äæ«LÑýž|ÑM”´¦—æÛ'ÅݨhæØú…Ι7LDÄpäœ_¨!öÀ‘³ü…­oQ•¦ž¾œ–#½Ó j!6ÏÒz ½ ¾ª=ªK.îÝÏj¨“5È•ê‹#;xNZ0ÉW@Äqò±1Ë‘jôI(3¾^w|RÔ,›¯}:ã5]eÆåãqqûŽ¿V¥é2öfP$n_·qlôÆÀu{_Ly~¾7‡›é37®þ"QÞÝúöÚ¼CÛc^Þî6o…çî¿§«qY 蘳AÁ“ìˆdWb2”Æ7°qµe´V4ccS+µDDZͽ•–µgkŤîÒñ¸[µ-DDõ¹—Ožöya¦OâaÅÎ8sœÙ6Þ®æ­ñåö‰ï“¤J"ÒT^wõ\4‚G$ìmÍ.¬0XûxhÍ eçvD¥ÜäÑ*ë+‹ë;×MTÍÂÀÇ=\ qDdЪÔm5+¾¿O ‹ºš#ë¤I«ÞyqÞ‰™ýÐ燆<¿N}ò˵ï~{¾¦SÓªr·­ùðÉׇDîJxÎ\Bê‹ï½±íþaRž• Ÿi7y¬ý†ôb-. ÓÀu*!"éÂn¦Ð0¸Â¶ÑŒziC÷7@–È®­bò—!¿Ü@h/bÑà :L ›ÖœCÕ9UªŽÊ‡º&·–FHˆÈ| ID–ƒ,ZTžš]§»_p¾tºk—A†¯}ÀŠÁê³T,)úß3¢·Øxš6ñ‰)“&Ínë5eul ÇÒÙo­¹›>5ŇŸ[?&eë‰95žy÷¹èÒ_›!¥ÌO–ÒLo‰Ÿ=—tú-ÌÑéiƒñ,øD¤jhîæÎnhQ·¥ó¶¯ ÏC &ã¾ÄàpÙŒ‡t’ƒñCfÜ»Aû †ûµ˜Õˆi÷¤œ?š¶6ûJÔŽ–-œ:hÚ[»‹‰l¦~øœïžö晵^ L3.ç×[^¯¨o&"ˆ‡kAÇtè•MJ"X » 1-²²¶Õ”l2ØÉ‚Ãdó,mí÷ÖuÍ¿’6ôú®á£-M0ÙÌ߀ ú¶½±Ä)½¼VÑv Cl:ÃÌàÙyÛ¶þS^-×雪å­ÿäï9 ÛLǶõh{[sÖ¹Ý;w|°iëÛïoygÓŽCÒ^Ûïì=y^ü{ÿI#"{O›N³½B¿üëq!Õß(ÐÇ¿sàoC…¿òÑL%Ÿˆ”M*|ë  ÃÐU©+2¤êå0„w°Taì^ZŸ“Q2ˆxnÓŸ]9½›ýòù¡¤»þñ‹Óú$vÛ’—·mËXüÂéû Èñ\‰Hz«S‘tL‡¶"ñLyÙY6ÜüÂcIGW›zìêÐçÇXßGª¢« UÞ“ìˆë:f‘똮?¬-3gæ©õ] EåämMDf®¡{=´ýõêØü¬š/FÐR“_©>˜Eİ zæå ŽÏ­5ghôš²¤s¥~³œ˜D–þ³—ûÏîDŠ/%µ~GJ[‘Ÿí»È‹KDænÁóÝ‚»VfJ¢·Æ¤7kkr« ^ "wèsÞ¡¿óØ~{ÎqjîÿA#üÃWÿâgEѯí+j MlÇå[þõ´ É/¼·ô¹ò–¼×_=¾õ_W¦¿üUi7!Rà>NDTuêJ%&èôcºê)UÞžC%D–‹_›åÖMLÔŸÝ¿ãÇÔ¼ÚÖQ ½¢º´¤í+ZÃ2DºÚK1ÇSeF÷ ´»wdL_Ÿq½ÈH}AhoÑ‹µ¯ ͹ —ë~ùº…ƒˆMD¤—%>žRoä²›±1)íO<4ÈÓŽFÿ˜#7þ! +‰ˆMd¥Ÿ>#Õ=°cû­”Ù»W¼ùÍÁäªæŽ6W—g%îýtÝȹ›Ï·…C3÷%ïò8N½ðflI ?{!º–xA[?^ìnüiF,§é+—X|¿'€þŒeo6­Ð#ºº¼Z¿§Ÿòv öo8}à†ÌèŸü-7®%¿xåÜÅ« ×KXô² "­459£#'¨k³®g”*\.Ï\À7c‘®¹®"ûVJrN¥LÛõq/ªª¬"•Ðz€•Í Òk²Ú¢¬´ÔliÆÐó³f”(VÖb >›AÔ"¯-»}írBVµ\GDdÐÔeßÈ©6,Å"Å ¬,/ñlì¡„EçOÓ)¤7RKz6‡Ïç 8,Fë™5Ý‘æggæ–T« ¤W”¤ß–ªÙÀ\Ð1ïÆ U)d5U¥ÅyéYEåÍúß~l¿õ¥·ŽÙ¶cçç™#_Ÿé@‰ë<Ã>?œ\PÛÞ´lÇ9ßî\ìÆ’Å¼²zKº²ýÄ4¥×ó%ógø5´"6&C~O‰í0ëë/—z™Éþcî¥×@ÿÅ!pG+ô8Jæm½öQˆÕD¯Y¾2îžÁ žë‚ðŠ[©©¹åµr-“oå2|¢ICDDÕ±ŸEýŒe¯ÿh¢I»*¾I‰¯Zv¡ñ÷íŠ)ú໑îÔxz}àêx¬uпaŽNoè¤Ç6„y~1$|Û> ë—ÿº7ëîCtÙ–’ÁNîVNîOüâ}†²[Ù<åYøÓ¨?à‘ʦþgÏù©O¾Þ´Ü…(wOØúSH9ýæèô޾ñÒ–ˆi_¤©hÀŒ·÷{Frw.ׯQlô=Ziüñ´zTs‚Æ3Ï›{ø›ÿ¾rÛqîá¸MË]H“öÍÌeÛЕýæèôšAU|õÇÙüaN¹›·œÈUµ—tôʺ¥ŽaÆø&T Õùi‰Çœ»Yß%¶íðàaâ_ßN–‘˜Z‡Dïí¢¢Úv”Sê–Ùk£S›03àOstÀdaè tttúž£ó(1òÄ~óp>=¶øÀ@øSAEtÀÎà§Öž8ôÆ“â¾oG–ÀÖ30$ìÙgÃݹhø‡s±ˆ'oŒŠ{c¢ mðg¡«Þ'ñø5Û¬òã‘Jûäž‹G*[úòÓ¸ž ŸmÙ)dõz'êÌo7ÿƒè·¯ñê“ccð\LJ½²tÚ” "¢àOÊS+R“.FïÞµój]OûËL2u}¸o0kkJÀ®y/%Ëþ ¤¢ z×n¢q¯·ÊGE߬ [ÔÇ)zÕGc_ÿöÖ®×"&ø8 Ú“pPÀ“‹×LhÖóýiKÌY¸%^Fü€çOìýÛã"\<ý*:½ÁrœõÞÁ72ä}º,bC’±EXB‰ÿ˜À/gG+‹H§Q6Õ×HKKÒ¯&¥Ët·s =.ÀÓu 9›tʺò¬›‰ç ëÛ‚“‘ò†ë¢È÷;ý·ïf3¸6¾cÆŒñsss¬¼èVòÕ‹éÕª{W?` y>æãê`'汈ˆZšïTæçd_»z#_®'b ð}|Òp‡VVBnkAJ«¨++ÌMùùÚÍ eßTF8. ·¿àÁ¤’¨ ïo=“^xGÍ4·ñþÄÓKg¼\¦$""¾ïÚ›ß/sl<1#äÍ ŠÎïæýWÜé0qÕþå¾ï¤5·½¨oJß÷ôÜú]‡>Xèõ—C›rWŸÀºž:&W)°ž°yãx Rœø¿ÕïK9 ¾óË—ŒvêT5`qøb;g±³yÁõŽ ÃàIB—„MpìèßÚÉÿI'?‹_îO,×<Ô“yÍ]1; c -Gìèâè9lHìÿ~ȼ;jÛ:oa€M×ê[0@â7š_qýF¾œˆ\{Ÿan¢Î[˜™[öµì;Ì燽17ú .p]݉èæÿÞ9\Õz¼MÕé GÞJ8Ò±2ÿ쩺e±þ˜àBrs§7;O#&R%Ÿ/jîº[MYÜʶ.Ç^5ùÍÍ¡‰Ïœºƒ,€þ|ÓFô¸Rà½,rŽÔW7¿rÜØˆCà6kq—”ÓMÁÄ|èìRN§˜à>ÎÎìaþZX-˜`l¡P±ßŒ%ÁXí‰ÎcÚÓ‹îM9í òÚR`‹LÚݪí‚ǦŽÂë‹sh¹SZGDÃ#?{q¼e7›”9ß—YN_à#ìÃ샧Jˆ(÷ÇL…±7íø0Ã@¹kü01 _CE§§xîφ9ÝÙ·ý”ÔX‚!ôòk»s×§Äž¸p»²¡…ï÷̪0§.Û™ÙšÚz—4Ô&ýpâ|V’)r59|‚ —h@À(ç„Ø|µ‘)ºÀ“o8’ ‰’ÖôÒ|û䱸Í[¿Ð9󆉈cƒœSâ 5Ä8r–[>P•¦ž¾œ–#½Ó j!6ÏÒz ½ ¾ª=ªK.îÝÏj¨“5È•ê‹#;xNZ0ÉW@Äqò±1Ë‘jôI(3¾^w|RÔ,›¯}:ã5]eÆåãqqûŽ¿V¥é4öÖ|ã𹚅ómŸ þàúÙ¶5É™ƒ'=FD6^¯ÑæÚóòÎp·y+I*Óè4òÊëññ7T­U˜ÁÞÖl"–µ÷""2”Ûu&1·ª^©Õ z­²¾²8³ ±#êUÍB·Ù‹#×¾öÏ ¯o|ã¥5áO¸·Íæ[ñûä×PWsd]ØÄ .HµD,û¡!ϯÛt!ábÊçh{·ié߬"²˜ðòãí `XO÷!"éùË%Ýå/yFT‚œÈnòX{3\¨è˜ ®ÃP Iov3…†Á¶fÔKº/S°Dvmµë¿l ùåB{‹Η¹˜6­9‡ªsªTí¯Ô5¹µ4BBDæ…L"²dÑú£òÔì:Ýý‚ÓØð¥Ó]» ò0ÌxíV VŸÅm,)úß3¢·Øxš6ñ‰)“&Ínë5eul ÇÒÙo­Ñ©²¿Ž)~)ÒeÊ SœOGéˆ!ò[À&’=S¤êv×Êüd)Íô–øÙs©X‹  ŸBE§§ Ƴà‘ª¡¹›;»¡EÝ–NÌÛ¾‚d<1˜Œû~ƒÃe3ÒI Æ™qïí/î×bV#¦Ý“rþhÚÚì+Q;>Z¶pê ioí.&²™úás^íAK›{do¢žÈï™/Y Ÿ5žO$O:œ¥ì~ŸzE}3 D<\C:¦C¯lR‘ÀJØMˆi‘•µ­¦dûø“ÁN&›gik/¸·Ö ¨kþ•´¡×w mi‚Éfþþdзím$NéåµmSpm‡Øt<†™Á³ó¶mý§¼Z®'Ò7UË[ÿ?Èßs@·™ŽmëÑö¶æ¬s»wîø`ÓÖ·ßßòΦ‡¤½8¶ßÙ{ò¼ø÷þ“FDöž6CN-å§?Œ—9<÷ÒX–pÔüÑDM ?\“ßïÊXò‰H٤·®ú1 ]õº"CJ¡^NCxKÆî¥õ9Õ¡!‰ˆç6ýÙ•Ó»ÉCµ¹RÕ(o‘ºð걋™…Õ µž%K†<4\˜r >¯ËWC‹ª…ÈŒˆü}ì nV©|±››eÕÍÛ5=àÒ«ÕD<"’Œé)ý9¿DŸqclÒŽœ)дÔf(F7'âûM™QxìdF­F0(`Ê4ßÖÔ£(̬k!¢ÚÌÜÆ±""¦$ô…páÉ+™yõr•ŽaÆå E¶˜Õ…• =tƒN§ÓétzQK‹Vß‹cëÁIòGlù6ÒêÒÑ}§’S‹«e*Whãê¹Êˆ RÊZªÚÊ áIDAT¡á§‡Š§?ë2%reÀ}' ‰šÏ¾ußå?y®ŽD$½U‰©È:¦C[‘x¦Š¼ìÆ,n~኱¤£«M=vuèóc¬ï¿#UÑÕ„*ïIvÄu³ÈuL×Ö–™3óÔú.…¢òFò¶&"3×п½Úþzul~VM#h©É¯Ô Ì"bØ=órPÇçÖš3 4zMYÒ¹R¿YNL"KÿÙËýgw "Å—’Z¿#¥­HŠÏö]äÅ%"s·àùnÁ]+3%Ñ[cÒ›µ5¹Õ/‘À;ô9ïÐßyl¿=ç¸?5w„ÿ þá«ñ³¢è×öuMªì˜M‰K¿výûßaˆW÷¤Êï7 'ð'"ª:u¥tú1 ]õ”*oÏ¡"ËůÍrë&&jŠÏîßñcj^m먆^Q]ZÒ6Û£cX†HW{)æxªÌè„v÷ŽŒéë3®™$´·èÅÚW†æÜ„Ëu¿|ÝÂAÄ&"ÒË’O©7òNÙÍØ˜”ö'äiG£Ìéf„‡a%±‰ ²ôÓg¤ºvl¿•2{÷Š7¿9˜\XÕÜÑæêò¬Ä½Ÿ®9wóù{¡®òðG1¥D ±ˆîœŒ¾ÜpŸœÃrš¾r‰5QÁ÷{rPÐèÏXöfÐ =¢«Ë«õ{ú)o§`ÿ†ÓnÈŒŽµ4Vܸ–tþâ•s¯&\/a=6ÒË‚ˆ´ÒÔ䌎œ ®ÍºžQªdp¹ ± šè5ËWÆÝ3xÁs]>Bq+55·¼V®eò­\†OX4iˆ€ˆ¨:ö³¨Ÿ±ìõM4iWÅ#)ñÕAË.t7ó†!ð{ÿø·¯8em1wn7#RLqÐßíŒt§ÆÓëWÇc­+€þ stzC'=¶!Ìóëøˆ!áÛöYX¿ü×½Yw't°-%ƒÜ­œÜŸøÅû e·²xÊ1²ð§QÀ#•ÿ|‘UèbǪªVš»E¼ýïWœ‰¨â¿ïÌ3žr<ç§>ùzÓr¢Ü=aëO!å è˜(}ã¥-Ó´Û¿_å7ãí½Çs§~Û¾ˆׯQlô=Ziüñ´zTs‚Æ3Ï›{yÝÌiá‘Ók¼ï¾ Nøð•) ££Qlǹ‡ãÞžÀ%MÚ7ó#>Oh@W è˜0ìâÖˆÀôÕ;^ä~|¼ün @UüÓÁsC}=]\옳‰È j¨.ÎI¿råf~#Jý ‹Ï©©ÖxäAQ|ãâîÿ~¾ý§rU7“nZ*Î}rh»eϪ-g T˜™ð§€9:`²ðõr@Ð@Ð@Ð@Ð@ÐxÔ‚SÜw|ÄÖ”¨—ƉQÂxt<«—ën¹Ðä;u¬kàÒñœŸb“KÕx¬-‚މ0hªÓŽÆ•ºÏ êì?Ç­ø»ø¼&D“¡kÊ=yI5qñh7`çÌcGó•ˆ:¦îQš²¢ÌÙña†„s׆yab2‚ŽiÑæÚ##r›·Â“‹Î@Ð1-òŒ¨9‘Ýä±öfè}Ó¢ÌO–‘ÄÏ%£WÔ7‘@ÄÃutLí„–|"R6©ôè}ÓÂs t$"é­J5zAǤ¼ÃljˆªN]©Ô¢÷tLËiúÊ%ÖDßïÉAAAÇ„°flÛ0ŠCò£ÌÖ ïtLæDÅAÿüêÝ)j<ýÁº³w0AÇ40xÎSþshg¤;Qîž°õ§Êuèx€Gû8Eǹ‡ãÞžÀ%MÚ7ó#>Oh@5àñ¬^®WTTÛŽrJÝ2{mtjÖ,xt0FÜÑ `’° è è è è èôÿ ÃOÞ÷ÆDzL+è˜I¦®÷±5%ê¥qb wúå“‘õ ·\hò:ÖÇ5péxÎO±É¥j<ÑL"è4ÕiGãJÝg†uöŸãVü]|oÓ:DDº¦Ü“—TvóvÎÜw|ÄÖ”¨—ƉQ&€þà=YßpûÈ…&ß©c}\—Žçü›\ªÆÀ$‚‘ASv4®Ô}fèPgÿ9nÅßÅçañ0 CD¤kÊ=yI5qñh7`çÌcGó•ˆ:ðð<èé4ÊœýfH8wm˜&&€)"mÞ¡í12"·y+<¹h`0¥ C$ψJÙMko†“ :¤ÌO–‘ÄÏ%0± £WÔ7‘@ÄÃuÀÄ‚S`É'"e“JÓ :<×@G"’ÞªT£…À¤‚ŽÀ;|œˆ¨êÔ•J-ZL(è°œ¦¯\bMTðýžtÀ„‚Ûaƶ £8$?úñÁl ÚL%è0ÅAÿüêÝ)j<ýÁº³w0L#è0xÎSþshg¤;Qîž°õ§Êuh\x¸Øh7Žsǽ=Kš´oæG|žÐ€j /dev/null) if [ -n "$TIDY_MSG" -a "$TIDY_MSG" != "No relevant changes found." ]; then echo "Please fix clang-tidy errors before committing" echo # Run clang-tidy once again to show the error git diff -U0 $BRANCH... | $CLANG_TIDY_DIFF $ARG 2> /dev/null exit 1 fi binaryen-version_108/scripts/emcc-tests.sh000077500000000000000000000007441423707623100210470ustar00rootroot00000000000000#!/usr/bin/env bash set -o errexit set -o pipefail mkdir -p emcc-build echo "emcc-tests: build:wasm" emcmake cmake -B emcc-build -DCMAKE_BUILD_TYPE=Release -G Ninja ninja -C emcc-build binaryen_wasm echo "emcc-tests: test:wasm" ./check.py --binaryen-bin=emcc-build/bin binaryenjs_wasm echo "emcc-tests: done:wasm" echo "emcc-tests: build:js" ninja -C emcc-build binaryen_js echo "emcc-tests: test:js" ./check.py --binaryen-bin=emcc-build/bin binaryenjs echo "emcc-tests: done:js" binaryen-version_108/scripts/foreach.py000077500000000000000000000034531423707623100204250ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2021 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import sys import subprocess from test import support # Usage: foreach infile tempfile cmd... # # Split 'infile', which contains multiple text modules, into separate temp files # containing one text module each and named `tempfile`.0, `tempfile`.1, etc. Run # `cmd` with the current temp file appended to it on all the temp files in # sequence. Exit with code 0 only if all of the subprocesses exited with code 0. def main(): infile = sys.argv[1] tempfile = sys.argv[2] cmd = sys.argv[3:] returncode = 0 all_modules = open(infile).read() for i, (module, asserts) in enumerate(support.split_wast(infile)): tempname = tempfile + '.' + str(i) with open(tempname, 'w') as temp: print(module, file=temp) new_cmd = cmd + [tempname] result = subprocess.run(new_cmd) if result.returncode != 0: returncode = result.returncode module_char_start = all_modules.find(module) module_line_start = all_modules[:module_char_start].count(os.linesep) print(f'[Failing module at line {module_line_start}]', file=sys.stderr) sys.exit(returncode) if __name__ == '__main__': main() binaryen-version_108/scripts/fuzz_opt.py000077500000000000000000001644711423707623100207060ustar00rootroot00000000000000#!/usr/bin/python3 ''' Runs random passes and options on random inputs, using wasm-opt. Can be configured to run just wasm-opt itself (using --fuzz-exec) or also run VMs on it. For afl-fuzz integration, you probably don't want this, and can use something like BINARYEN_CORES=1 BINARYEN_PASS_DEBUG=1 afl-fuzz -i afl-testcases/ -o afl-findings/ -m 100 -d -- bin/wasm-opt -ttf --fuzz-exec --Os @@ (that is on a fixed set of arguments to wasm-opt, though - this script covers different options being passed) ''' import contextlib import os import difflib import math import shutil import subprocess import random import re import sys import time import traceback from test import shared from test import support assert sys.version_info.major == 3, 'requires Python 3!' # parameters TYPE_SYSTEM_FLAG = '--nominal' # feature options that are always passed to the tools. CONSTANT_FEATURE_OPTS = ['--all-features'] CONSTANT_FEATURE_OPTS.append(TYPE_SYSTEM_FLAG) INPUT_SIZE_MIN = 1024 INPUT_SIZE_MEAN = 40 * 1024 INPUT_SIZE_MAX = 5 * INPUT_SIZE_MEAN PRINT_WATS = False given_seed = None # utilities def in_binaryen(*args): return os.path.join(shared.options.binaryen_root, *args) def in_bin(tool): return os.path.join(shared.options.binaryen_bin, tool) def random_size(): if random.random() < 0.25: # sometimes do an exponential distribution, which prefers smaller sizes but may # also get very high ret = int(random.expovariate(1.0 / INPUT_SIZE_MEAN)) # if the result is valid, use it, otherwise do the normal thing # (don't clamp, which would give us a lot of values on the borders) if ret >= INPUT_SIZE_MIN and ret <= INPUT_SIZE_MAX: return ret # most of the time do a simple linear range around the mean return random.randint(INPUT_SIZE_MIN, 2 * INPUT_SIZE_MEAN - INPUT_SIZE_MIN) def run(cmd, stderr=None, silent=False): if not silent: print(' '.join(cmd)) return subprocess.check_output(cmd, stderr=stderr, text=True) def run_unchecked(cmd): print(' '.join(cmd)) return subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True).communicate()[0] def randomize_pass_debug(): if random.random() < 0.1: print('[pass-debug]') os.environ['BINARYEN_PASS_DEBUG'] = '1' else: os.environ['BINARYEN_PASS_DEBUG'] = '0' del os.environ['BINARYEN_PASS_DEBUG'] print('randomized pass debug:', os.environ.get('BINARYEN_PASS_DEBUG', '')) @contextlib.contextmanager def no_pass_debug(): old_env = os.environ.copy() if os.environ.get('BINARYEN_PASS_DEBUG'): del os.environ['BINARYEN_PASS_DEBUG'] try: yield finally: os.environ.update(old_env) def randomize_feature_opts(): global FEATURE_OPTS FEATURE_OPTS = CONSTANT_FEATURE_OPTS[:] # 1/3 the time apply all the possible opts, 1/3 none of them, to maximize # coverage both ways, and 1/3 pick each one randomly if random.random() < 0.33333: FEATURE_OPTS += POSSIBLE_FEATURE_OPTS elif random.random() < 0.5: for possible in POSSIBLE_FEATURE_OPTS: if random.random() < 0.5: FEATURE_OPTS.append(possible) if possible in IMPLIED_FEATURE_OPTS: FEATURE_OPTS.extend(IMPLIED_FEATURE_OPTS[possible]) print('randomized feature opts:', ' '.join(FEATURE_OPTS)) ALL_FEATURE_OPTS = ['--all-features', '-all', '--mvp-features', '-mvp'] def update_feature_opts(wasm): global FEATURE_OPTS # we will re-compute the features; leave all other things as they are EXTRA = [x for x in FEATURE_OPTS if not x.startswith('--enable') and not x.startswith('--disable') and x not in ALL_FEATURE_OPTS] FEATURE_OPTS = run([in_bin('wasm-opt'), wasm] + FEATURE_OPTS + ['--print-features']).strip().split('\n') # filter out '', which can happen if no features are enabled FEATURE_OPTS = [x for x in FEATURE_OPTS if x] print(FEATURE_OPTS, EXTRA) FEATURE_OPTS += EXTRA def randomize_fuzz_settings(): # a list of the optimizations to run on the wasm global FUZZ_OPTS # a boolean whether NaN values are allowed, or we de-NaN them global NANS # a boolean whether out of bounds operations are allowed, or we bounds-enforce them global OOB # a boolean whether we legalize the wasm for JS global LEGALIZE FUZZ_OPTS = [] if random.random() < 0.5: NANS = True else: NANS = False FUZZ_OPTS += ['--denan'] if random.random() < 0.5: OOB = True else: OOB = False FUZZ_OPTS += ['--no-fuzz-oob'] if random.random() < 0.5: LEGALIZE = True FUZZ_OPTS += ['--legalize-js-interface'] else: LEGALIZE = False print('randomized settings (NaNs, OOB, legalize):', NANS, OOB, LEGALIZE) def init_important_initial_contents(): FIXED_IMPORTANT_INITIAL_CONTENTS = [ # Perenially-important passes os.path.join('lit', 'passes', 'optimize-instructions.wast'), os.path.join('passes', 'optimize-instructions_fuzz-exec.wast'), ] MANUAL_RECENT_INITIAL_CONTENTS = [ # Recently-added or modified passes. These can be added to and pruned # frequently. os.path.join('lit', 'passes', 'once-reduction.wast'), os.path.join('passes', 'remove-unused-brs_enable-multivalue.wast'), os.path.join('lit', 'passes', 'optimize-instructions-bulk-memory.wast'), os.path.join('lit', 'passes', 'optimize-instructions-ignore-traps.wast'), os.path.join('lit', 'passes', 'optimize-instructions-gc.wast'), os.path.join('lit', 'passes', 'optimize-instructions-gc-iit.wast'), os.path.join('lit', 'passes', 'optimize-instructions-call_ref.wast'), os.path.join('lit', 'passes', 'inlining_splitting.wast'), os.path.join('heap-types.wast'), ] RECENT_DAYS = 30 # Returns the list of test wast/wat files added or modified within the # RECENT_DAYS number of days counting from the commit time of HEAD def auto_select_recent_initial_contents(): # Print 'git log' with changed file status and without commit messages, # with commits within RECENT_DAYS number of days, counting from the # commit time of HEAD. The reason we use the commit time of HEAD instead # of the current system time is to make the results deterministic given # the Binaryen HEAD commit. from datetime import datetime, timedelta, timezone head_ts_str = run(['git', 'log', '-1', '--format=%cd', '--date=raw'], silent=True).split()[0] head_dt = datetime.utcfromtimestamp(int(head_ts_str)) start_dt = head_dt - timedelta(days=RECENT_DAYS) start_ts = start_dt.replace(tzinfo=timezone.utc).timestamp() log = run(['git', 'log', '--name-status', '--format=', '--date=raw', '--no-renames', f'--since={start_ts}'], silent=True).splitlines() # Pick up lines in the form of # A test/../something.wast # M test/../something.wast # (wat extension is also included) p = re.compile(r'^[AM]\stest' + os.sep + r'(.*\.(wat|wast))$') matches = [p.match(e) for e in log] auto_set = set([match.group(1) for match in matches if match]) auto_set = auto_set.difference(set(FIXED_IMPORTANT_INITIAL_CONTENTS)) return sorted(list(auto_set)) def is_git_repo(): try: ret = run(['git', 'rev-parse', '--is-inside-work-tree'], silent=True, stderr=subprocess.DEVNULL) return ret == 'true\n' except subprocess.CalledProcessError: return False if not is_git_repo() and shared.options.auto_initial_contents: print('Warning: The current directory is not a git repository, so you cannot use "--auto-initial-contents". Using the manually selected contents.\n') shared.options.auto_initial_contents = False print('- Perenially-important initial contents:') for test in FIXED_IMPORTANT_INITIAL_CONTENTS: print(' ' + test) print() recent_contents = [] print('- Recently added or modified initial contents ', end='') if shared.options.auto_initial_contents: print(f'(automatically selected: within last {RECENT_DAYS} days):') recent_contents += auto_select_recent_initial_contents() else: print('(manually selected):') recent_contents = MANUAL_RECENT_INITIAL_CONTENTS for test in recent_contents: print(' ' + test) print() # We prompt the user only when there is no seed given. This fuzz_opt.py is # often used with seed in a script called from wasm-reduce, in which case we # should not pause for a user input. if given_seed is None: ret = input('Do you want to proceed with these initial contents? (Y/n) ').lower() if ret != 'y' and ret != '': sys.exit(1) initial_contents = FIXED_IMPORTANT_INITIAL_CONTENTS + recent_contents global IMPORTANT_INITIAL_CONTENTS IMPORTANT_INITIAL_CONTENTS = [os.path.join(shared.get_test_dir('.'), t) for t in initial_contents] def pick_initial_contents(): # if we use an initial wasm file's contents as the basis for the # fuzzing, then that filename, or None if we start entirely from scratch global INITIAL_CONTENTS INITIAL_CONTENTS = None # half the time don't use any initial contents if random.random() < 0.5: return # some of the time use initial contents that are known to be especially # important if random.random() < 0.5: test_name = random.choice(IMPORTANT_INITIAL_CONTENTS) else: test_name = random.choice(all_tests) print('initial contents:', test_name) if shared.options.auto_initial_contents: # when using auto initial contents, we look through the git history to # find test files. if a test file was renamed or removed then it may # no longer exist, and we should just skip it. if not os.path.exists(test_name): return assert os.path.exists(test_name) # tests that check validation errors are not helpful for us if '.fail.' in test_name: print('initial contents is just a .fail test') return if os.path.basename(test_name) in [ # contains too many segments to run in a wasm VM 'limit-segments_disable-bulk-memory.wast', # https://github.com/WebAssembly/binaryen/issues/3203 'simd.wast', # corner cases of escaping of names is not interesting 'names.wast', # huge amount of locals that make it extremely slow 'too_much_for_liveness.wasm' ]: print('initial contents is disallowed') return if test_name.endswith('.wast'): # this can contain multiple modules, pick one split_parts = support.split_wast(test_name) if len(split_parts) > 1: index = random.randint(0, len(split_parts) - 1) chosen = split_parts[index] module, asserts = chosen if not module: # there is no module in this choice (just asserts), ignore it print('initial contents has no module') return test_name = 'initial.wat' with open(test_name, 'w') as f: f.write(module) print(' picked submodule %d from multi-module wast' % index) global FEATURE_OPTS FEATURE_OPTS += [ # has not been fuzzed in general yet '--disable-memory64', # avoid multivalue for now due to bad interactions with gc rtts in # stacky code. for example, this fails to roundtrip as the tuple code # ends up creating stacky binary code that needs to spill rtts to locals, # which is not allowed: # # (module # (type $other (struct)) # (func $foo (result (rtt $other)) # (select # (rtt.canon $other) # (rtt.canon $other) # (tuple.extract 1 # (tuple.make # (i32.const 0) # (i32.const 0) # ) # ) # ) # ) # ) '--disable-multivalue', # DWARF is incompatible with multivalue atm; it's more important to # fuzz multivalue since we aren't actually fuzzing DWARF here '--strip-dwarf', ] # the given wasm may not work with the chosen feature opts. for example, if # we pick atomics.wast but want to run with --disable-atomics, then we'd # error, so we need to test the wasm. first, make sure it doesn't have a # features section, as that would enable a feature that we might want to # be disabled, and our test would not error as we want it to. if test_name.endswith('.wasm'): temp_test_name = 'initial.wasm' try: run([in_bin('wasm-opt'), test_name, '-all', '--strip-target-features', '-o', temp_test_name]) except Exception: # the input can be invalid if e.g. it is raw data that is used with # -ttf as fuzzer input print('(initial contents are not valid wasm, ignoring)') return test_name = temp_test_name # next, test the wasm. try: run([in_bin('wasm-opt'), test_name] + FEATURE_OPTS, stderr=subprocess.PIPE, silent=True) except Exception: print('(initial contents not valid for features, ignoring)') return INITIAL_CONTENTS = test_name # Test outputs we want to ignore are marked this way. IGNORE = '[binaryen-fuzzer-ignore]' # Traps are reported as [trap REASON] TRAP_PREFIX = '[trap ' # Host limits are reported as [host limit REASON] HOST_LIMIT_PREFIX = '[host limit ' # --fuzz-exec reports calls as [fuzz-exec] calling foo FUZZ_EXEC_CALL_PREFIX = '[fuzz-exec] calling' # compare two strings, strictly def compare(x, y, context, verbose=True): if x != y and x != IGNORE and y != IGNORE: message = ''.join([a + '\n' for a in difflib.unified_diff(x.splitlines(), y.splitlines(), fromfile='expected', tofile='actual')]) if verbose: raise Exception(context + " comparison error, expected to have '%s' == '%s', diff:\n\n%s" % ( x, y, message )) else: raise Exception(context + "\nDiff:\n\n%s" % (message)) # converts a possibly-signed integer to an unsigned integer def unsign(x, bits): return x & ((1 << bits) - 1) # numbers are "close enough" if they just differ in printing, as different # vms may print at different precision levels and verbosity def numbers_are_close_enough(x, y): # handle nan comparisons like -nan:0x7ffff0 vs NaN, ignoring the bits if 'nan' in x.lower() and 'nan' in y.lower(): return True # if one input is a pair, then it is in fact a 64-bit integer that is # reported as two 32-bit chunks. convert such 'low high' pairs into a 64-bit # integer for comparison to the other value if ' ' in x or ' ' in y: def to_64_bit(a): if ' ' not in a: return unsign(int(a), bits=64) low, high = a.split(' ') return unsign(int(low), 32) + (1 << 32) * unsign(int(high), 32) return to_64_bit(x) == to_64_bit(y) # float() on the strings will handle many minor differences, like # float('1.0') == float('1') , float('inf') == float('Infinity'), etc. try: return float(x) == float(y) except Exception: pass # otherwise, try a full eval which can handle i64s too try: ex = eval(x) ey = eval(y) return ex == ey or float(ex) == float(ey) except Exception as e: print('failed to check if numbers are close enough:', e) return False # compare between vms, which may slightly change how numbers are printed def compare_between_vms(x, y, context): x_lines = x.splitlines() y_lines = y.splitlines() if len(x_lines) != len(y_lines): return compare(x, y, context + ' (note: different number of lines between vms)') num_lines = len(x_lines) for i in range(num_lines): x_line = x_lines[i] y_line = y_lines[i] if x_line != y_line: # this is different, but maybe it's a vm difference we can ignore LEI_LOGGING = '[LoggingExternalInterface logging' if x_line.startswith(LEI_LOGGING) and y_line.startswith(LEI_LOGGING): x_val = x_line[len(LEI_LOGGING) + 1:-1] y_val = y_line[len(LEI_LOGGING) + 1:-1] if numbers_are_close_enough(x_val, y_val): continue NOTE_RESULT = '[fuzz-exec] note result' if x_line.startswith(NOTE_RESULT) and y_line.startswith(NOTE_RESULT): x_val = x_line.split(' ')[-1] y_val = y_line.split(' ')[-1] if numbers_are_close_enough(x_val, y_val): continue # this failed to compare. print a custom diff of the relevant lines MARGIN = 3 start = max(i - MARGIN, 0) end = min(i + MARGIN, num_lines) return compare('\n'.join(x_lines[start:end]), '\n'.join(y_lines[start:end]), context) def fix_output(out): # large doubles may print slightly different on different VMs def fix_double(x): x = x.group(1) if 'nan' in x or 'NaN' in x: x = 'nan' else: x = x.replace('Infinity', 'inf') x = str(float(x)) return 'f64.const ' + x out = re.sub(r'f64\.const (-?[nanN:abcdefxIity\d+-.]+)', fix_double, out) # mark traps from wasm-opt as exceptions, even though they didn't run in a vm out = out.replace(TRAP_PREFIX, 'exception: ' + TRAP_PREFIX) lines = out.splitlines() for i in range(len(lines)): line = lines[i] if 'Warning: unknown flag' in line or 'Try --help for options' in line: # ignore some VM warnings that don't matter, like if a newer V8 has # removed a flag that is no longer needed. but print the line so the # developer can see it. print(line) lines[i] = None elif 'exception' in line: # exceptions may differ when optimizing, but an exception should # occur, so ignore their types (also js engines print them out # slightly differently) lines[i] = ' *exception*' return '\n'.join([line for line in lines if line is not None]) def fix_spec_output(out): out = fix_output(out) # spec shows a pointer when it traps, remove that out = '\n'.join(map(lambda x: x if 'runtime trap' not in x else x[x.find('runtime trap'):], out.splitlines())) # https://github.com/WebAssembly/spec/issues/543 , float consts are messed up out = '\n'.join(map(lambda x: x if 'f32' not in x and 'f64' not in x else '', out.splitlines())) return out def run_vm(cmd): def filter_known_issues(output): known_issues = [ # can be caused by flatten, ssa, etc. passes 'local count too large', # https://github.com/WebAssembly/binaryen/issues/3767 # note that this text is a little too broad, but the problem is rare # enough that it's unlikely to hide an unrelated issue 'found br_if of type', # all host limitations are arbitrary and may differ between VMs and also # be affected by optimizations, so ignore them. HOST_LIMIT_PREFIX, ] for issue in known_issues: if issue in output: return IGNORE return output try: # some known issues do not cause the entire process to fail return filter_known_issues(run(cmd)) except subprocess.CalledProcessError: # other known issues do make it fail, so re-run without checking for # success and see if we should ignore it if filter_known_issues(run_unchecked(cmd)) == IGNORE: return IGNORE raise MAX_INTERPRETER_ENV_VAR = 'BINARYEN_MAX_INTERPRETER_DEPTH' MAX_INTERPRETER_DEPTH = 1000 def run_bynterp(wasm, args): # increase the interpreter stack depth, to test more things os.environ[MAX_INTERPRETER_ENV_VAR] = str(MAX_INTERPRETER_DEPTH) try: return run_vm([in_bin('wasm-opt'), wasm] + FEATURE_OPTS + args) finally: del os.environ['BINARYEN_MAX_INTERPRETER_DEPTH'] V8_LIFTOFF_ARGS = ['--liftoff', '--no-wasm-tier-up'] # default to running with liftoff enabled, because we need to pick either # liftoff or turbofan for consistency (otherwise running the same command twice # may have different results due to NaN nondeterminism), and liftoff is faster # for small things def run_d8_js(js, args=[], liftoff=True): cmd = [shared.V8] + shared.V8_OPTS if liftoff: cmd += V8_LIFTOFF_ARGS cmd += [js] if args: cmd += ['--'] + args return run_vm(cmd) def run_d8_wasm(wasm, liftoff=True): return run_d8_js(in_binaryen('scripts', 'fuzz_shell.js'), [wasm], liftoff=liftoff) def all_disallowed(features): return not any(('--enable-' + x) in FEATURE_OPTS for x in features) class TestCaseHandler: # how frequent this handler will be run. 1 means always run it, 0.5 means half the # time frequency = 1 def __init__(self): self.num_runs = 0 # If the core handle_pair() method is not overridden, it calls handle() on # each of the items. That is useful if you just want the two wasms and don't # care about their relationship. def handle_pair(self, input, before_wasm, after_wasm, opts): self.handle(before_wasm) self.handle(after_wasm) def can_run_on_feature_opts(self, feature_opts): return True def increment_runs(self): self.num_runs += 1 def count_runs(self): return self.num_runs # Fuzz the interpreter with --fuzz-exec. class FuzzExec(TestCaseHandler): frequency = 1 def handle_pair(self, input, before_wasm, after_wasm, opts): run([in_bin('wasm-opt'), before_wasm] + opts + ['--fuzz-exec']) class CompareVMs(TestCaseHandler): frequency = 0.6 def __init__(self): super(CompareVMs, self).__init__() class BinaryenInterpreter: name = 'binaryen interpreter' def run(self, wasm): return run_bynterp(wasm, ['--fuzz-exec-before']) def can_run(self, wasm): return True def can_compare_to_self(self): return True def can_compare_to_others(self): return True class D8: name = 'd8' def run(self, wasm, extra_d8_flags=[]): run([in_bin('wasm-opt'), wasm, '--emit-js-wrapper=' + wasm + '.js'] + FEATURE_OPTS) return run_vm([shared.V8, wasm + '.js'] + shared.V8_OPTS + extra_d8_flags + ['--', wasm]) def can_run(self, wasm): # INITIAL_CONTENT is disallowed because some initial spec testcases # have names that require mangling, see # https://github.com/WebAssembly/binaryen/pull/3216 return not INITIAL_CONTENTS def can_compare_to_self(self): # With nans, VM differences can confuse us, so only very simple VMs # can compare to themselves after opts in that case. return not NANS def can_compare_to_others(self): # If not legalized, the JS will fail immediately, so no point to # compare to others. return LEGALIZE and not NANS class D8Liftoff(D8): name = 'd8_liftoff' def run(self, wasm): return super(D8Liftoff, self).run(wasm, extra_d8_flags=V8_LIFTOFF_ARGS) class D8TurboFan(D8): name = 'd8_turbofan' def run(self, wasm): return super(D8TurboFan, self).run(wasm, extra_d8_flags=['--no-liftoff']) class Wasm2C: name = 'wasm2c' def __init__(self): # look for wabt in the path. if it's not here, don't run wasm2c try: wabt_bin = shared.which('wasm2c') wabt_root = os.path.dirname(os.path.dirname(wabt_bin)) self.wasm2c_dir = os.path.join(wabt_root, 'wasm2c') if not os.path.isdir(self.wasm2c_dir): print('wabt found, but not wasm2c support dir') self.wasm2c_dir = None except Exception as e: print('warning: no wabt found:', e) self.wasm2c_dir = None def can_run(self, wasm): if self.wasm2c_dir is None: return False # if we legalize for JS, the ABI is not what C wants if LEGALIZE: return False # relatively slow, so run it less frequently if random.random() < 0.5: return False # wasm2c doesn't support most features return all_disallowed(['exception-handling', 'simd', 'threads', 'bulk-memory', 'nontrapping-float-to-int', 'tail-call', 'sign-ext', 'reference-types', 'multivalue', 'gc']) def run(self, wasm): run([in_bin('wasm-opt'), wasm, '--emit-wasm2c-wrapper=main.c'] + FEATURE_OPTS) run(['wasm2c', wasm, '-o', 'wasm.c']) compile_cmd = ['clang', 'main.c', 'wasm.c', os.path.join(self.wasm2c_dir, 'wasm-rt-impl.c'), '-I' + self.wasm2c_dir, '-lm', '-Werror'] run(compile_cmd) return run_vm(['./a.out']) def can_compare_to_self(self): # The binaryen optimizer changes NaNs in the ways that wasm # expects, but that's not quite what C has return not NANS def can_compare_to_others(self): # C won't trap on OOB, and NaNs can differ from wasm VMs return not OOB and not NANS class Wasm2C2Wasm(Wasm2C): name = 'wasm2c2wasm' def __init__(self): super(Wasm2C2Wasm, self).__init__() self.has_emcc = shared.which('emcc') is not None def run(self, wasm): run([in_bin('wasm-opt'), wasm, '--emit-wasm2c-wrapper=main.c'] + FEATURE_OPTS) run(['wasm2c', wasm, '-o', 'wasm.c']) compile_cmd = ['emcc', 'main.c', 'wasm.c', os.path.join(self.wasm2c_dir, 'wasm-rt-impl.c'), '-I' + self.wasm2c_dir, '-lm', '-s', 'ENVIRONMENT=shell', '-s', 'ALLOW_MEMORY_GROWTH'] # disable the signal handler: emcc looks like unix, but wasm has # no signals compile_cmd += ['-DWASM_RT_MEMCHECK_SIGNAL_HANDLER=0'] if random.random() < 0.5: compile_cmd += ['-O' + str(random.randint(1, 3))] elif random.random() < 0.5: if random.random() < 0.5: compile_cmd += ['-Os'] else: compile_cmd += ['-Oz'] # avoid pass-debug on the emcc invocation itself (which runs # binaryen to optimize the wasm), as the wasm here can be very # large and it isn't what we are focused on testing here with no_pass_debug(): run(compile_cmd) return run_d8_js('a.out.js') def can_run(self, wasm): # quite slow (more steps), so run it less frequently if random.random() < 0.8: return False # prefer not to run if the wasm is very large, as it can OOM # the JS engine. return super(Wasm2C2Wasm, self).can_run(wasm) and self.has_emcc and \ os.path.getsize(wasm) <= INPUT_SIZE_MEAN def can_compare_to_others(self): # NaNs can differ from wasm VMs return not NANS self.vms = [BinaryenInterpreter(), D8(), D8Liftoff(), D8TurboFan(), Wasm2C(), Wasm2C2Wasm()] def handle_pair(self, input, before_wasm, after_wasm, opts): before = self.run_vms(before_wasm) after = self.run_vms(after_wasm) self.compare_before_and_after(before, after) def run_vms(self, wasm): # vm_results will map vms to their results vm_results = {} for vm in self.vms: if vm.can_run(wasm): print(f'[CompareVMs] running {vm.name}') vm_results[vm] = fix_output(vm.run(wasm)) # compare between the vms on this specific input first_vm = None for vm in vm_results.keys(): if vm.can_compare_to_others(): if first_vm is None: first_vm = vm else: compare_between_vms(vm_results[first_vm], vm_results[vm], 'CompareVMs between VMs: ' + first_vm.name + ' and ' + vm.name) return vm_results def compare_before_and_after(self, before, after): # compare each VM to itself on the before and after inputs for vm in before.keys(): if vm in after and vm.can_compare_to_self(): compare(before[vm], after[vm], 'CompareVMs between before and after: ' + vm.name) def can_run_on_feature_opts(self, feature_opts): return all_disallowed(['simd', 'multivalue']) # Check for determinism - the same command must have the same output. class CheckDeterminism(TestCaseHandler): # not that important frequency = 0.1 def handle_pair(self, input, before_wasm, after_wasm, opts): # check for determinism run([in_bin('wasm-opt'), before_wasm, '-o', 'b1.wasm'] + opts) run([in_bin('wasm-opt'), before_wasm, '-o', 'b2.wasm'] + opts) b1 = open('b1.wasm', 'rb').read() b2 = open('b2.wasm', 'rb').read() if (b1 != b2): run([in_bin('wasm-dis'), 'b1.wasm', '-o', 'b1.wat', TYPE_SYSTEM_FLAG]) run([in_bin('wasm-dis'), 'b2.wasm', '-o', 'b2.wat', TYPE_SYSTEM_FLAG]) t1 = open('b1.wat', 'r').read() t2 = open('b2.wat', 'r').read() compare(t1, t2, 'Output must be deterministic.', verbose=False) class Wasm2JS(TestCaseHandler): frequency = 0.6 def handle_pair(self, input, before_wasm, after_wasm, opts): before_wasm_temp = before_wasm + '.temp.wasm' after_wasm_temp = after_wasm + '.temp.wasm' # legalize the before wasm, so that comparisons to the interpreter # later make sense (if we don't do this, the wasm may have i64 exports). # after applying other necessary fixes, we'll recreate the after wasm # from scratch. run([in_bin('wasm-opt'), before_wasm, '--legalize-js-interface', '-o', before_wasm_temp] + FEATURE_OPTS) compare_before_to_after = random.random() < 0.5 compare_to_interpreter = compare_before_to_after and random.random() < 0.5 if compare_before_to_after: # to compare the wasm before and after optimizations, we must # remove operations that wasm2js does not support with full # precision, such as i64-to-f32, as the optimizer can give different # results. simplification_passes = ['--stub-unsupported-js'] if compare_to_interpreter: # unexpectedly-unaligned loads/stores work fine in wasm in general but # not in wasm2js, since typed arrays silently round down, effectively. # if we want to compare to the interpreter, remove unaligned # operations (by forcing alignment 1, then lowering those into aligned # components, which means all loads and stores are of a single byte). simplification_passes += ['--dealign', '--alignment-lowering'] run([in_bin('wasm-opt'), before_wasm_temp, '-o', before_wasm_temp] + simplification_passes + FEATURE_OPTS) # now that the before wasm is fixed up, generate a proper after wasm run([in_bin('wasm-opt'), before_wasm_temp, '-o', after_wasm_temp] + opts + FEATURE_OPTS) # always check for compiler crashes before = self.run(before_wasm_temp) after = self.run(after_wasm_temp) if NANS: # with NaNs we can't compare the output, as a reinterpret through # memory might end up different in JS than wasm return # we also cannot compare if the wasm hits a trap, as wasm2js does not # trap on many things wasm would, and in those cases it can do weird # undefined things. in such a case, at least compare up until before # the trap, which lets us compare at least some results in some cases. # (this is why wasm2js is not in CompareVMs, which does full # comparisons - we need to limit the comparison in a special way here) interpreter = run_bynterp(before_wasm_temp, ['--fuzz-exec-before']) if TRAP_PREFIX in interpreter: trap_index = interpreter.index(TRAP_PREFIX) # we can't test this function, which the trap is in the middle of. # erase everything from this function's output and onward, so we # only compare the previous trap-free code call_start = interpreter.rindex(FUZZ_EXEC_CALL_PREFIX, 0, trap_index) call_end = interpreter.index('\n', call_start) call_line = interpreter[call_start:call_end] before = before[:before.index(call_line)] after = after[:after.index(call_line)] interpreter = interpreter[:interpreter.index(call_line)] def fix_output_for_js(x): # start with the normal output fixes that all VMs need x = fix_output(x) # check if a number is 0 or a subnormal, which is basically zero def is_basically_zero(x): # to check if something is a subnormal, compare it to the largest one return x >= 0 and x <= 2.22507385850720088902e-308 def fix_number(x): x = x.group(1) try: x = float(x) # There appear to be some cases where JS VMs will print # subnormals in full detail while other VMs do not, and vice # versa. Ignore such really tiny numbers. if is_basically_zero(x): x = 0 except ValueError: # not a floating-point number, nothing to do pass return ' => ' + str(x) # logging notation is "function_name => result", look for that with # a floating-point result that may need to be fixed up return re.sub(r' => (-?[\d+-.e\-+]+)', fix_number, x) before = fix_output_for_js(before) after = fix_output_for_js(after) if compare_before_to_after: compare_between_vms(before, after, 'Wasm2JS (before/after)') if compare_to_interpreter: interpreter = fix_output_for_js(interpreter) compare_between_vms(before, interpreter, 'Wasm2JS (vs interpreter)') def run(self, wasm): wrapper = run([in_bin('wasm-opt'), wasm, '--emit-js-wrapper=/dev/stdout'] + FEATURE_OPTS) cmd = [in_bin('wasm2js'), wasm, '--emscripten'] # avoid optimizations if we have nans, as we don't handle them with # full precision and optimizations can change things # OOB accesses are also an issue with optimizations, that can turn the # loaded "undefined" into either 0 (with an |0) or stay undefined # in optimized code. if not NANS and not OOB and random.random() < 0.5: # when optimizing also enable deterministic mode, to avoid things # like integer divide by zero causing false positives (1 / 0 is # Infinity without a | 0 , and 0 with one, and the truthiness of # those differs; we don't want to care about this because it # would trap in wasm anyhow) cmd += ['-O', '--deterministic'] main = run(cmd + FEATURE_OPTS) with open(os.path.join(shared.options.binaryen_root, 'scripts', 'wasm2js.js')) as f: glue = f.read() js_file = wasm + '.js' with open(js_file, 'w') as f: f.write(glue) f.write(main) f.write(wrapper) return run_vm([shared.NODEJS, js_file, 'a.wasm']) def can_run_on_feature_opts(self, feature_opts): # TODO: properly handle memory growth. right now the wasm2js handler # uses --emscripten which assumes the Memory is created before, and # wasm2js.js just starts with a size of 1 and no limit. We should switch # to non-emscripten mode or adding memory information, or check # specifically for growth here if INITIAL_CONTENTS: return False return all_disallowed(['exception-handling', 'simd', 'threads', 'bulk-memory', 'nontrapping-float-to-int', 'tail-call', 'sign-ext', 'reference-types', 'multivalue', 'gc']) class Asyncify(TestCaseHandler): frequency = 0.6 def handle_pair(self, input, before_wasm, after_wasm, opts): # we must legalize in order to run in JS run([in_bin('wasm-opt'), before_wasm, '--legalize-js-interface', '-o', 'async.' + before_wasm] + FEATURE_OPTS) run([in_bin('wasm-opt'), after_wasm, '--legalize-js-interface', '-o', 'async.' + after_wasm] + FEATURE_OPTS) before_wasm = 'async.' + before_wasm after_wasm = 'async.' + after_wasm before = fix_output(run_d8_wasm(before_wasm)) after = fix_output(run_d8_wasm(after_wasm)) try: compare(before, after, 'Asyncify (before/after)') except Exception: # if we failed to just compare the builds before asyncify even runs, # then it may use NaNs or be sensitive to legalization; ignore it print('ignoring due to pre-asyncify difference') return def do_asyncify(wasm): cmd = [in_bin('wasm-opt'), wasm, '--asyncify', '-o', 'async.t.wasm'] # if we allow NaNs, running binaryen optimizations and then # executing in d8 may lead to different results due to NaN # nondeterminism between VMs. if not NANS: if random.random() < 0.5: cmd += ['--optimize-level=%d' % random.randint(1, 3)] if random.random() < 0.5: cmd += ['--shrink-level=%d' % random.randint(1, 2)] cmd += FEATURE_OPTS run(cmd) out = run_d8_wasm('async.t.wasm') # ignore the output from the new asyncify API calls - the ones with asserts will trap, too for ignore in ['[fuzz-exec] calling asyncify_start_unwind\nexception!\n', '[fuzz-exec] calling asyncify_start_unwind\n', '[fuzz-exec] calling asyncify_start_rewind\nexception!\n', '[fuzz-exec] calling asyncify_start_rewind\n', '[fuzz-exec] calling asyncify_stop_rewind\n', '[fuzz-exec] calling asyncify_stop_unwind\n']: out = out.replace(ignore, '') out = '\n'.join([l for l in out.splitlines() if 'asyncify: ' not in l]) return fix_output(out) before_asyncify = do_asyncify(before_wasm) after_asyncify = do_asyncify(after_wasm) compare(before, before_asyncify, 'Asyncify (before/before_asyncify)') compare(before, after_asyncify, 'Asyncify (before/after_asyncify)') def can_run_on_feature_opts(self, feature_opts): return all_disallowed(['exception-handling', 'simd', 'tail-call', 'reference-types', 'multivalue', 'gc']) # Check that the text format round-trips without error. class RoundtripText(TestCaseHandler): frequency = 0.05 def handle(self, wasm): # use name-types because in wasm GC we can end up truncating the default # names which are very long, causing names to collide and the wast to be # invalid # FIXME: run name-types by default during load? run([in_bin('wasm-opt'), wasm, '--name-types', '-S', '-o', 'a.wast'] + FEATURE_OPTS) run([in_bin('wasm-opt'), 'a.wast'] + FEATURE_OPTS) # The global list of all test case handlers testcase_handlers = [ FuzzExec(), CompareVMs(), CheckDeterminism(), Wasm2JS(), Asyncify(), # FIXME: Re-enable after https://github.com/WebAssembly/binaryen/issues/3989 # RoundtripText() ] test_suffixes = ['*.wasm', '*.wast', '*.wat'] core_tests = shared.get_tests(shared.get_test_dir('.'), test_suffixes) passes_tests = shared.get_tests(shared.get_test_dir('passes'), test_suffixes) spec_tests = shared.get_tests(shared.get_test_dir('spec'), test_suffixes) wasm2js_tests = shared.get_tests(shared.get_test_dir('wasm2js'), test_suffixes) lld_tests = shared.get_tests(shared.get_test_dir('lld'), test_suffixes) unit_tests = shared.get_tests(shared.get_test_dir(os.path.join('unit', 'input')), test_suffixes) lit_tests = shared.get_tests(shared.get_test_dir('lit'), test_suffixes, recursive=True) all_tests = core_tests + passes_tests + spec_tests + wasm2js_tests + lld_tests + unit_tests + lit_tests # Do one test, given an input file for -ttf and some optimizations to run def test_one(random_input, given_wasm): randomize_pass_debug() randomize_feature_opts() randomize_fuzz_settings() pick_initial_contents() opts = randomize_opt_flags() print('randomized opts:', ' '.join(opts)) print() if given_wasm: # if given a wasm file we want to use it as is, but we also want to # apply properties like not having any NaNs, which the original fuzz # wasm had applied. that is, we need to preserve properties like not # having nans through reduction. run([in_bin('wasm-opt'), given_wasm, '-o', 'a.wasm'] + FUZZ_OPTS + FEATURE_OPTS) else: # emit the target features section so that reduction can work later, # without needing to specify the features generate_command = [in_bin('wasm-opt'), random_input, '-ttf', '-o', 'a.wasm'] + FUZZ_OPTS + FEATURE_OPTS if INITIAL_CONTENTS: generate_command += ['--initial-fuzz=' + INITIAL_CONTENTS] if PRINT_WATS: printed = run(generate_command + ['--print']) with open('a.printed.wast', 'w') as f: f.write(printed) else: run(generate_command) wasm_size = os.stat('a.wasm').st_size bytes = wasm_size print('pre wasm size:', wasm_size) update_feature_opts('a.wasm') # create a second wasm for handlers that want to look at pairs. generate_command = [in_bin('wasm-opt'), 'a.wasm', '-o', 'b.wasm'] + opts + FUZZ_OPTS + FEATURE_OPTS if PRINT_WATS: printed = run(generate_command + ['--print']) with open('b.printed.wast', 'w') as f: f.write(printed) else: run(generate_command) wasm_size = os.stat('b.wasm').st_size bytes += wasm_size print('post wasm size:', wasm_size) # first, find which handlers can even run here relevant_handlers = [handler for handler in testcase_handlers if not hasattr(handler, 'get_commands') and handler.can_run_on_feature_opts(FEATURE_OPTS)] if len(relevant_handlers) == 0: return 0 # filter by frequency filtered_handlers = [handler for handler in relevant_handlers if random.random() < handler.frequency] if len(filtered_handlers) == 0: # pick at least one, to not waste the effort we put into making the wasm filtered_handlers = [random.choice(relevant_handlers)] # run only some of the pair handling handlers. if we ran them all all the # time that would mean we have less variety in wasm files and passes run # on them in the same amount of time. NUM_PAIR_HANDLERS = 3 used_handlers = set() for i in range(NUM_PAIR_HANDLERS): testcase_handler = random.choice(filtered_handlers) if testcase_handler in used_handlers: continue used_handlers.add(testcase_handler) assert testcase_handler.can_run_on_feature_opts(FEATURE_OPTS) print('running testcase handler:', testcase_handler.__class__.__name__) testcase_handler.increment_runs() # let the testcase handler handle this testcase however it wants. in this case we give it # the input and both wasms. testcase_handler.handle_pair(input=random_input, before_wasm='a.wasm', after_wasm='b.wasm', opts=opts + FEATURE_OPTS) print('') return bytes def write_commands(commands, filename): with open(filename, 'w') as f: f.write('set -e\n') for command in commands: f.write('echo "%s"\n' % command) pre = 'BINARYEN_PASS_DEBUG=%s ' % (os.environ.get('BINARYEN_PASS_DEBUG') or '0') f.write(pre + command + ' &> /dev/null\n') f.write('echo "ok"\n') # main opt_choices = [ [], ['-O1'], ['-O2'], ['-O3'], ['-O4'], ['-Os'], ['-Oz'], ["--cfp"], ["--coalesce-locals"], # XXX slow, non-default ["--coalesce-locals-learning"], ["--code-pushing"], ["--code-folding"], ["--const-hoisting"], ["--dae"], ["--dae-optimizing"], ["--dce"], ["--directize"], ["--flatten", "--dfo"], ["--duplicate-function-elimination"], ["--flatten"], # ["--fpcast-emu"], # removes indirect call failures as it makes them go through regardless of type ["--inlining"], ["--inlining-optimizing"], ["--flatten", "--simplify-locals-notee-nostructure", "--local-cse"], ["--global-refining"], ["--gto"], ["--local-cse"], ["--heap2local"], ["--remove-unused-names", "--heap2local"], ["--generate-stack-ir"], ["--licm"], ["--local-subtyping"], ["--memory-packing"], ["--merge-blocks"], ['--merge-locals'], ['--once-reduction'], ["--optimize-instructions"], ["--optimize-stack-ir"], ["--generate-stack-ir", "--optimize-stack-ir"], ["--pick-load-signs"], ["--precompute"], ["--precompute-propagate"], ["--print"], ["--remove-unused-brs"], ["--remove-unused-nonfunction-module-elements"], ["--remove-unused-module-elements"], ["--remove-unused-names"], ["--reorder-functions"], ["--reorder-locals"], ["--flatten", "--rereloop"], ["--roundtrip"], ["--rse"], ["--signature-pruning"], ["--signature-refining"], ["--simplify-locals"], ["--simplify-locals-nonesting"], ["--simplify-locals-nostructure"], ["--simplify-locals-notee"], ["--simplify-locals-notee-nostructure"], ["--ssa"], ["--type-refining"], ["--vacuum"], ] def randomize_opt_flags(): flag_groups = [] has_flatten = False # core opts while 1: choice = random.choice(opt_choices) if '--flatten' in choice or '-O4' in choice: if has_flatten: print('avoiding multiple --flatten in a single command, due to exponential overhead') continue if '--enable-multivalue' in FEATURE_OPTS and '--enable-reference-types' in FEATURE_OPTS: print('avoiding --flatten due to multivalue + reference types not supporting it (spilling of non-nullable tuples)') continue if '--gc' not in FEATURE_OPTS: print('avoiding --flatten due to GC not supporting it (spilling of RTTs)') continue if INITIAL_CONTENTS and os.path.getsize(INITIAL_CONTENTS) > 2000: print('avoiding --flatten due using a large amount of initial contents, which may blow up') continue else: has_flatten = True if ('--rereloop' in choice or '--dfo' in choice) and \ '--enable-exception-handling' in FEATURE_OPTS: print('avoiding --rereloop or --dfo due to exception-handling not supporting it') continue flag_groups.append(choice) if len(flag_groups) > 20 or random.random() < 0.3: break # maybe add an extra round trip if random.random() < 0.5: pos = random.randint(0, len(flag_groups)) flag_groups = flag_groups[:pos] + [['--roundtrip']] + flag_groups[pos:] ret = [flag for group in flag_groups for flag in group] # modifiers (if not already implied by a -O? option) if '-O' not in str(ret): if random.random() < 0.5: ret += ['--optimize-level=' + str(random.randint(0, 3))] if random.random() < 0.5: ret += ['--shrink-level=' + str(random.randint(0, 3))] # possibly converge. don't do this very often as it can be slow. if random.random() < 0.05: ret += ['--converge'] # possibly inline all the things as much as possible. inlining that much may # be realistic in some cases (on GC benchmarks it is very helpful), but # also, inlining so much allows other optimizations to kick in, which # increases coverage # (the specific number here doesn't matter, but it is far higher than the # wasm limitation on function body size which is 128K) if random.random() < 0.5: ret += ['-fimfs=99999999'] assert ret.count('--flatten') <= 1 return ret # main # possible feature options that are sometimes passed to the tools. this # contains the list of all possible feature flags we can disable (after # we enable all before that in the constant options) POSSIBLE_FEATURE_OPTS = run([in_bin('wasm-opt'), '--print-features', in_binaryen('test', 'hello_world.wat')] + CONSTANT_FEATURE_OPTS).replace('--enable', '--disable').strip().split('\n') print('POSSIBLE_FEATURE_OPTS:', POSSIBLE_FEATURE_OPTS) # some features depend on other features, so if a required feature is # disabled, its dependent features need to be disabled as well. IMPLIED_FEATURE_OPTS = { '--disable-reference-types': ['--disable-gc'] } if __name__ == '__main__': # if we are given a seed, run exactly that one testcase. otherwise, # run new ones until we fail # if we are given a seed, we can also be given a wasm file, which we use # instead of the randomly generating one. this can be useful for # reduction. given_wasm = None if len(shared.requested) >= 1: given_seed = int(shared.requested[0]) print('checking a single given seed', given_seed) if len(shared.requested) >= 2: given_wasm = shared.requested[1] print('using given wasm file', given_wasm) else: given_seed = None print('checking infinite random inputs') init_important_initial_contents() seed = time.time() * os.getpid() raw_input_data = 'input.dat' counter = 0 total_wasm_size = 0 total_input_size = 0 total_input_size_squares = 0 start_time = time.time() while True: counter += 1 if given_seed is not None: seed = given_seed given_seed_passed = True else: seed = random.randint(0, 1 << 64) random.seed(seed) input_size = random_size() total_input_size += input_size total_input_size_squares += input_size ** 2 print('') mean = float(total_input_size) / counter mean_of_squares = float(total_input_size_squares) / counter stddev = math.sqrt(mean_of_squares - (mean ** 2)) elapsed = max(0.000001, time.time() - start_time) print('ITERATION:', counter, 'seed:', seed, 'size:', input_size, '(mean:', str(mean) + ', stddev:', str(stddev) + ')', 'speed:', counter / elapsed, 'iters/sec, ', total_wasm_size / elapsed, 'wasm_bytes/sec\n') with open(raw_input_data, 'wb') as f: f.write(bytes([random.randint(0, 255) for x in range(input_size)])) assert os.path.getsize(raw_input_data) == input_size # remove the generated wasm file, so that we can tell if the fuzzer # fails to create one if os.path.exists('a.wasm'): os.remove('a.wasm') # run an iteration of the fuzzer try: total_wasm_size += test_one(raw_input_data, given_wasm) except KeyboardInterrupt: print('(stopping by user request)') break except Exception as e: # print the exception manually, so that we can show our message at # the very end where it won't be missed ex_type, ex, tb = sys.exc_info() print('!') print('-----------------------------------------') print('Exception:') traceback.print_tb(tb) print('-----------------------------------------') print('!') for arg in e.args: print(arg) if given_seed is not None: given_seed_passed = False # We want to generate a template reducer script only when there is # no given wasm file. That we have a given wasm file means we are no # longer working on the original test case but modified one, which # is likely to be called within wasm-reduce script itself, so # original.wasm and reduce.sh should not be overwritten. if not given_wasm: # We can't do this if a.wasm doesn't exist, which can be the # case if we failed to even generate the wasm. if not os.path.exists('a.wasm'): print('''\ ================================================================================ You found a bug in the fuzzer itself! It failed to generate a valid wasm file from the random input. Please report it with seed: %(seed)d and the exact version of Binaryen you found it on, plus the exact Python version (hopefully deterministic random numbers will be identical). You can run that testcase again with "fuzz_opt.py %(seed)d" (We can't automatically reduce this testcase since we can only run the reducer on valid wasm files.) ================================================================================ ''' % {'seed': seed}) break # show some useful info about filing a bug and reducing the # testcase (to make reduction simple, save "original.wasm" on # the side, so that we can autoreduce using the name "a.wasm" # which we use internally) original_wasm = os.path.abspath('original.wasm') shutil.copyfile('a.wasm', original_wasm) # write out a useful reduce.sh auto_init = '' if shared.options.auto_initial_contents: auto_init = '--auto-initial-contents' with open('reduce.sh', 'w') as reduce_sh: reduce_sh.write('''\ # check the input is even a valid wasm file echo "At least one of the next two values should be 0:" %(wasm_opt)s %(typesystem)s --detect-features %(temp_wasm)s echo " " $? %(wasm_opt)s %(typesystem)s --all-features %(temp_wasm)s echo " " $? # run the command echo "The following value should be 1:" ./scripts/fuzz_opt.py %(auto_init)s --binaryen-bin %(bin)s %(seed)d %(temp_wasm)s > o 2> e echo " " $? # # You may want to print out part of "o" or "e", if the output matters and not # just the return code. For example, # # cat o | tail -n 10 # # would print out the last few lines of stdout, which might be useful if that # mentions the specific error you want. Make sure that includes the right # details (sometimes stderr matters too), and preferably no more (less details # allow more reduction, but raise the risk of it reducing to something you don't # quite want). # # To do a "dry run" of what the reducer will do, copy the original file to the # test file that this script will run on, # # cp %(original_wasm)s %(temp_wasm)s # # and then run # # bash %(reduce_sh)s # # You may also need to add --timeout 5 or such if the testcase is a slow one. # ''' % {'wasm_opt': in_bin('wasm-opt'), 'bin': shared.options.binaryen_bin, 'seed': seed, 'auto_init': auto_init, 'original_wasm': original_wasm, 'temp_wasm': os.path.abspath('t.wasm'), 'typesystem': TYPE_SYSTEM_FLAG, 'reduce_sh': os.path.abspath('reduce.sh')}) print('''\ ================================================================================ You found a bug! Please report it with seed: %(seed)d and the exact version of Binaryen you found it on, plus the exact Python version (hopefully deterministic random numbers will be identical). You can run that testcase again with "fuzz_opt.py %(seed)d" The initial wasm file used here is saved as %(original_wasm)s You can reduce the testcase by running this now: |||| vvvv %(wasm_reduce)s %(type_system_flag)s %(original_wasm)s '--command=bash %(reduce_sh)s' -t %(temp_wasm)s -w %(working_wasm)s ^^^^ |||| Make sure to verify by eye that the output says something like this: At least one of the next two values should be 0: 0 1 The following value should be 1: 1 (If it does not, then one possible issue is that the fuzzer fails to write a valid binary. If so, you can print the output of the fuzzer's first command (using -ttf / --translate-to-fuzz) in text form and run the reduction from that, passing --text to the reducer.) You can also read "%(reduce_sh)s" which has been filled out for you and includes docs and suggestions. After reduction, the reduced file will be in %(working_wasm)s ================================================================================ ''' % {'seed': seed, 'original_wasm': original_wasm, 'temp_wasm': os.path.abspath('t.wasm'), 'working_wasm': os.path.abspath('w.wasm'), 'wasm_reduce': in_bin('wasm-reduce'), 'reduce_sh': os.path.abspath('reduce.sh'), 'type_system_flag': TYPE_SYSTEM_FLAG}) break if given_seed is not None: break print('\nInvocations so far:') for testcase_handler in testcase_handlers: print(' ', testcase_handler.__class__.__name__ + ':', testcase_handler.count_runs()) if given_seed is not None: if given_seed_passed: print('(finished running seed %d without error)' % given_seed) sys.exit(0) else: print('(finished running seed %d, see error above)' % given_seed) sys.exit(1) binaryen-version_108/scripts/fuzz_passes.py000077500000000000000000000101651423707623100213700ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ''' This fuzzes passes, by starting with a working program, then running random passes on the wast, and seeing if they break something Usage: Provide a base filename for a runnable program, e.g. a.out.js. Then we will modify a.out.wast. Note that the program must be built to run using that wast (BINARYEN_METHOD=interpret-s-expr) Other parameters after the first are used when calling the program. ''' from __future__ import print_function import os import random import shutil import subprocess import sys PASSES = [ "duplicate-function-elimination", "dce", "remove-unused-brs", "remove-unused-names", "optimize-instructions", "precompute", "simplify-locals", "vacuum", "coalesce-locals", "reorder-locals", "merge-blocks", "remove-unused-functions", ] # main base = sys.argv[1] wast = base[:-3] + '.wast' print('>>> base program:', base, ', wast:', wast) args = sys.argv[2:] def run(): if os.path.exists(wast): print('>>> running using a wast of size', os.stat(wast).st_size) cmd = ['mozjs', base] + args try: return subprocess.check_output(cmd, stderr=subprocess.STDOUT) except Exception as e: print(">>> !!! ", e, " !!!") original_wast = None try: # get normal output normal = run() print('>>> normal output:\n', normal) assert normal, 'must be output' # ensure we actually use the wast original_wast = wast + '.original.wast' shutil.move(wast, original_wast) assert run() != normal, 'running without the wast must fail' # ensure a bad pass makes it fail def apply_passes(passes): wasm_opt = os.path.join('bin', 'wasm-opt') subprocess.check_call([wasm_opt, original_wast] + passes + ['-o', wast]) apply_passes(['--remove-imports']) assert run() != normal, 'running after a breaking pass must fail' # loop, looking for failures def simplify(passes): # passes is known to fail, try to simplify down by removing more = True while more: more = False print('>>> trying to reduce:', ' '.join(passes), ' [' + str(len(passes)) + ']') for i in range(len(passes)): smaller = passes[:i] + passes[i + 1:] print('>>>>>> try to reduce to:', ' '.join(smaller), ' [' + str(len(smaller)) + ']') try: apply_passes(smaller) assert run() == normal except Exception: # this failed too, so it's a good reduction passes = smaller print('>>> reduction successful') more = True break print('>>> reduced to:', ' '.join(passes)) tested = set() def pick_passes(): ret = [] while 1: str_ret = str(ret) if random.random() < 0.1 and str_ret not in tested: tested.add(str_ret) return ret ret.append('--' + random.choice(PASSES)) counter = 0 while 1: passes = pick_passes() print('>>> [' + str(counter) + '] testing:', ' '.join(passes)) counter += 1 try: apply_passes(passes) except Exception as e: print(e) simplify(passes) break seen = run() if seen != normal: print('>>> bad output:\n', seen) simplify(passes) break finally: if original_wast: shutil.move(original_wast, wast) binaryen-version_108/scripts/fuzz_passes_wast.py000077500000000000000000000072301423707623100224250ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ''' This fuzzes passes, by starting with a wast, then running random passes on the wast, and seeing if they break optimization or validation Usage: Provide the filename of the wast. ''' from __future__ import print_function import os import random import shutil import subprocess import sys PASSES = [ "duplicate-function-elimination", "dce", "remove-unused-brs", "remove-unused-names", "optimize-instructions", "precompute", "simplify-locals", "vacuum", "coalesce-locals", "reorder-locals", "merge-blocks", "remove-unused-functions", ] # main wast = sys.argv[1] print('>>> wast:', wast) args = sys.argv[2:] def run(): try: cmd = ['bin/wasm-opt', wast] print('run', cmd) subprocess.check_call(cmd, stderr=open('/dev/null')) except Exception as e: return ">>> !!! ", e, " !!!" return 'ok' original_wast = None try: # get normal output normal = run() print('>>> normal output:\n', normal) assert normal, 'must be output' # ensure we actually use the wast original_wast = wast + '.original.wast' shutil.move(wast, original_wast) def apply_passes(passes): wasm_opt = os.path.join('bin', 'wasm-opt') subprocess.check_call([wasm_opt, original_wast] + passes + ['-o', wast], stderr=open('/dev/null')) # loop, looking for failures def simplify(passes): # passes is known to fail, try to simplify down by removing more = True while more: more = False print('>>> trying to reduce:', ' '.join(passes), ' [' + str(len(passes)) + ']') for i in range(len(passes)): smaller = passes[:i] + passes[i + 1:] print('>>>>>> try to reduce to:', ' '.join(smaller), ' [' + str(len(smaller)) + ']') try: apply_passes(smaller) assert run() == normal except Exception: # this failed too, so it's a good reduction passes = smaller print('>>> reduction successful') more = True break print('>>> reduced to:', ' '.join(passes)) tested = set() def pick_passes(): # return '--waka'.split(' ') ret = [] while 1: str_ret = str(ret) if random.random() < 0.5 and str_ret not in tested: tested.add(str_ret) return ret ret.append('--' + random.choice(PASSES)) counter = 0 while 1: passes = pick_passes() print('>>> [' + str(counter) + '] testing:', ' '.join(passes)) counter += 1 try: apply_passes(passes) except Exception as e: print(e) simplify(passes) break seen = run() if seen != normal: print('>>> bad output:\n', seen) simplify(passes) break finally: if original_wast: shutil.move(original_wast, wast) binaryen-version_108/scripts/fuzz_relooper.py000077500000000000000000000303701423707623100217210ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ''' This fuzzes the relooper using the C API. ''' from __future__ import print_function import difflib import os import random import subprocess import time seed_init = int(time.time()) seed_init *= seed_init seed_init %= (2**32) if os.environ.get('LD_LIBRARY_PATH'): os.environ['LD_LIBRARY_PATH'] += os.pathsep + 'lib' else: os.environ['LD_LIBRARY_PATH'] = 'lib' counter = 0 while True: # Random decisions seed = seed_init random.seed(seed) seed_init += 1 num = random.randint(2, 250) density = random.random() * random.random() code_likelihood = random.random() code_max = random.randint(0, num if random.random() < 0.5 else 3) max_printed = random.randint(1, num if random.random() < 0.5 else 3) max_decision = num * 20 decisions = [random.randint(1, max_decision) for x in range(num * 3)] branches = [0] * num defaults = [0] * num branch_codes = [0] * num # code on the branch, which may alter the global state # with some probability print the same id for different blocks, # as the printing is the block contents - allow merging etc. opts def printed_id(i): if random.random() < 0.5: return i return i % max_printed printed_ids = [printed_id(i) for i in range(num)] def random_code(): if code_max == 0 or random.random() > code_likelihood: return 0 # no code # A random number to perturb/increment the global state return random.randint(1, code_max) for i in range(num): b = set([]) bs = random.randint(1, max(1, round(density * random.random() * (num - 1)))) for j in range(bs): b.add(random.randint(1, num - 1)) b = list(b) defaults[i] = random.choice(b) b.remove(defaults[i]) branches[i] = b branch_codes[i] = [random_code() for item in range(len(b) + 1)] # one for each branch, plus the default optimize = random.random() < 0.5 print(counter, ':', num, density, optimize, code_likelihood, code_max, max_printed, ', seed =', seed) counter += 1 for temp in ['fuzz.wasm', 'fuzz.wast', 'fast.txt', 'fuzz.slow.js', 'fuzz.c']: try: os.unlink(temp) except OSError: pass # parts entry = ''' var label = 0; var state; var decisions = %s; var index = 0; function check() { if (index >= decisions.length) throw 'HALT'; console.log('(i32.const ' + (-decisions[index]) + ')'); return decisions[index++]; } ''' % str(decisions) slow = entry + '\n' slow += 'label = 0;\n' slow += ''' while(1) switch(label) { ''' fast = ''' #include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf(module, BinaryenBinary(module, BinaryenGeUInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * %d)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL ); // increment index BinaryenExpressionRef incer = BinaryenStore(module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4)) ), BinaryenTypeInt32() ); // optionally, print the return value BinaryenExpressionRef args[] = { BinaryenBinary(module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))) ) ) }; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))) ); BinaryenExpressionRef checkBodyList[] = { halter, incer, debugger, returner }; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeInt32() ); BinaryenFunctionTypeRef i = BinaryenAddFunctionType(module, "i", BinaryenTypeInt32(), NULL, 0); BinaryenAddFunction(module, "check", i, NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); ''' % len(decisions) for i in range(num): slow += ' case %d: console.log("(i32.const %d)"); state = check(); \n' % ( i, printed_ids[i]) b = branches[i] bc = branch_codes[i] def get_phi(j): phi = '' if bc[j]: phi = 'index += %d; ' % bc[j] return phi for j in range(len(b)): slow += ' if (state %% %d == %d) { %s label = %d; break }\n' % ( len(b) + 1, j, get_phi(j), b[j]) # TODO: split range 1-n into these options slow += ' %slabel = %d; break\n' % (get_phi(-1), defaults[i]) use_switch = [random.random() < 0.5 for i in range(num)] for i in range(num): fast += ''' RelooperBlockRef b%d; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(%d)) }; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet(module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32())) }; ''' % (i, printed_ids[i]) if use_switch[i]: fast += ''' b%d = RelooperAddBlockWithSwitch(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(%d)) ) ); ''' % (i, len(branches[i]) + 1) else: # non-switch fast += ''' b%d = RelooperAddBlock(relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); ''' % i fast += ''' } ''' for i in range(num): b = branches[i] bc = branch_codes[i] def get_phi(j): phi = 'NULL' if bc[j]: # increment the index of global state phi = ''' BinaryenStore(module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * %d)) ), BinaryenTypeInt32() )''' % bc[j] return phi for j in range(len(b)): if use_switch[i]: total = len(b) + 1 values = ','.join([str(x) for x in range(random.randint(len(b) + 1, max_decision + 2)) if x % total == j]) fast += ''' { BinaryenIndex values[] = { %s }; RelooperAddBranchForSwitch(b%d, b%d, values, sizeof(values) / sizeof(BinaryenIndex), %s); } ''' % (values, i, b[j], get_phi(j)) else: # non-switch fast += ''' RelooperAddBranch(b%d, b%d, BinaryenBinary(module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(%d)) ), BinaryenConst(module, BinaryenLiteralInt32(%d)) ), %s); ''' % (i, b[j], len(b) + 1, j, get_phi(j)) # default branch if use_switch[i]: fast += ''' RelooperAddBranchForSwitch(b%d, b%d, NULL, 0, %s); ''' % (i, defaults[i], get_phi(-1)) else: fast += ''' RelooperAddBranch(b%d, b%d, NULL, %s); ''' % (i, defaults[i], get_phi(-1)) fast += ''' BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); int decisions[] = { %s }; int numDecisions = sizeof(decisions)/sizeof(int); // write out all the decisions, then the body of the function BinaryenExpressionRef full[numDecisions + 1]; { int i; for (i = 0; i < numDecisions; i++) { full[i] = BinaryenStore(module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), BinaryenTypeInt32() ); } } full[numDecisions] = body; BinaryenExpressionRef all = BinaryenBlock(module, NULL, full, numDecisions + 1, BinaryenTypeNone()); BinaryenFunctionTypeRef v = BinaryenAddFunctionType(module, "v", BinaryenTypeNone(), NULL, 0); // locals: state, free-for-label BinaryenType localTypes[] = { BinaryenTypeInt32(), BinaryenTypeInt32() }; BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", v, localTypes, 2, all); BinaryenSetStart(module, theMain); // import BinaryenType iparams[] = { BinaryenTypeInt32() }; BinaryenFunctionTypeRef vi = BinaryenAddFunctionType(module, "vi", BinaryenTypeNone(), iparams, 1); BinaryenAddFunctionImport(module, "print", "spectest", "print", vi); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, 0, 0); // optionally, optimize if (%d) BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // write it out BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } ''' % (', '.join(map(str, decisions)), optimize) slow += '}' open('fuzz.slow.js', 'w').write(slow) open('fuzz.c', 'w').write(fast) print('.') cmd = [os.environ.get('CC') or 'gcc', 'fuzz.c', '-Isrc', '-lbinaryen', '-lasmjs', '-lsupport', '-Llib/.', '-pthread', '-o', 'fuzz'] subprocess.check_call(cmd) print('^') subprocess.check_call(['./fuzz'], stdout=open('fuzz.wast', 'w')) print('*') fast_out = subprocess.Popen(['bin/wasm-shell', 'fuzz.wast'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0] print('-') node = os.getenv('NODE', 'nodejs') slow_out = subprocess.Popen([node, 'fuzz.slow.js'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0] print('_') if slow_out != fast_out: print(''.join([a.rstrip() + '\n' for a in difflib.unified_diff( slow_out.split('\n'), fast_out.split('\n'), fromfile='slow', tofile='fast')])) assert False binaryen-version_108/scripts/fuzz_shell.js000066400000000000000000000161641423707623100211670ustar00rootroot00000000000000// Shell integration. if (typeof console === 'undefined') { console = { log: print }; } var tempRet0; var binary; if (typeof process === 'object' && typeof require === 'function' /* node.js detection */) { var args = process.argv.slice(2); binary = require('fs').readFileSync(args[0]); if (!binary.buffer) binary = new Uint8Array(binary); } else { var args; if (typeof scriptArgs != 'undefined') { args = scriptArgs; } else if (typeof arguments != 'undefined') { args = arguments; } if (typeof readbuffer === 'function') { binary = new Uint8Array(readbuffer(args[0])); } else { binary = read(args[0], 'binary'); } } // Utilities. function assert(x, y) { if (!x) throw (y || 'assertion failed');// + new Error().stack; } // Deterministic randomness. var detrand = (function() { var hash = 5381; // TODO DET_RAND_SEED; var x = 0; return function() { hash = (((hash << 5) + hash) ^ (x & 0xff)) >>> 0; x = (x + 1) % 256; return (hash % 256) / 256; }; })(); // Asyncify integration. var Asyncify = { sleeping: false, sleepingFunction: null, sleeps: 0, maxDepth: 0, DATA_ADDR: 4, DATA_MAX: 65536, savedMemory: null, instrumentImports: function(imports) { var ret = {}; for (var module in imports) { ret[module] = {}; for (var i in imports[module]) { if (typeof imports[module][i] === 'function') { (function(module, i) { ret[module][i] = function() { refreshView(); if (!Asyncify.sleeping) { // Sleep if asyncify support is present (which also requires // that the memory be exported), and at a certain probability. if (exports.asyncify_start_unwind && view && detrand() < 0.5) { // We are called in order to start a sleep/unwind. console.log('asyncify: sleep in ' + i + '...'); Asyncify.sleepingFunction = i; Asyncify.sleeps++; var depth = new Error().stack.split('\n').length - 6; Asyncify.maxDepth = Math.max(Asyncify.maxDepth, depth); // Save the memory we use for data, so after we restore it later, the // sleep/resume appears to have had no change to memory. Asyncify.savedMemory = new Int32Array(view.subarray(Asyncify.DATA_ADDR >> 2, Asyncify.DATA_MAX >> 2)); // Unwinding. // Fill in the data structure. The first value has the stack location, // which for simplicity we can start right after the data structure itself. view[Asyncify.DATA_ADDR >> 2] = Asyncify.DATA_ADDR + 8; // The end of the stack will not be reached here anyhow. view[Asyncify.DATA_ADDR + 4 >> 2] = Asyncify.DATA_MAX; exports.asyncify_start_unwind(Asyncify.DATA_ADDR); Asyncify.sleeping = true; } else { // Don't sleep, normal execution. return imports[module][i].apply(null, arguments); } } else { // We are called as part of a resume/rewind. Stop sleeping. console.log('asyncify: resume in ' + i + '...'); assert(Asyncify.sleepingFunction === i); exports.asyncify_stop_rewind(); // The stack should have been all used up, and so returned to the original state. assert(view[Asyncify.DATA_ADDR >> 2] == Asyncify.DATA_ADDR + 8); assert(view[Asyncify.DATA_ADDR + 4 >> 2] == Asyncify.DATA_MAX); Asyncify.sleeping = false; // Restore the memory to the state from before we slept. view.set(Asyncify.savedMemory, Asyncify.DATA_ADDR >> 2); return imports[module][i].apply(null, arguments); } }; })(module, i); } else { ret[module][i] = imports[module][i]; } } } // Add ignored.print, which is ignored by asyncify, and allows debugging of asyncified code. ret['ignored'] = { 'print': function(x, y) { console.log(x, y) } }; return ret; }, instrumentExports: function(exports) { var ret = {}; for (var e in exports) { if (typeof exports[e] === 'function' && !e.startsWith('asyncify_')) { (function(e) { ret[e] = function() { while (1) { var ret = exports[e].apply(null, arguments); // If we are sleeping, then the stack was unwound; rewind it. if (Asyncify.sleeping) { console.log('asyncify: stop unwind; rewind'); assert(!ret, 'results during sleep are meaningless, just 0'); //console.log('asyncify: after unwind', view[Asyncify.DATA_ADDR >> 2], view[Asyncify.DATA_ADDR + 4 >> 2]); try { exports.asyncify_stop_unwind(); exports.asyncify_start_rewind(Asyncify.DATA_ADDR); } catch (e) { console.log('error in unwind/rewind switch', e); } continue; } return ret; } }; })(e); } else { ret[e] = exports[e]; } } return ret; }, check: function() { assert(!Asyncify.sleeping); }, finish: function() { if (Asyncify.sleeps > 0) { print('asyncify:', 'sleeps:', Asyncify.sleeps, 'max depth:', Asyncify.maxDepth); } }, }; // Fuzz integration. function logValue(x, y) { if (typeof y !== 'undefined') { console.log('[LoggingExternalInterface logging ' + x + ' ' + y + ']'); } else { console.log('[LoggingExternalInterface logging ' + x + ']'); } } // Set up the imports. var imports = { 'fuzzing-support': { 'log-i32': logValue, 'log-i64': logValue, 'log-f32': logValue, 'log-f64': logValue, }, 'env': { 'setTempRet0': function(x) { tempRet0 = x }, 'getTempRet0': function() { return tempRet0 }, }, }; imports = Asyncify.instrumentImports(imports); // Create the wasm. var instance = new WebAssembly.Instance(new WebAssembly.Module(binary), imports); // Handle the exports. var exports = instance.exports; exports = Asyncify.instrumentExports(exports); var view; // Recreate the view. This is important both initially and after a growth. function refreshView() { if (exports.memory) { view = new Int32Array(exports.memory.buffer); } } // Run the wasm. var sortedExports = []; for (var e in exports) { sortedExports.push(e); } sortedExports.sort(); sortedExports = sortedExports.filter(function(e) { // Filter special intrinsic functions. return !e.startsWith('asyncify_'); }); sortedExports.forEach(function(e) { Asyncify.check(); if (typeof exports[e] !== 'function') return; try { console.log('[fuzz-exec] calling ' + e); var result = exports[e](); if (typeof result !== 'undefined') { console.log('[fuzz-exec] note result: $' + e + ' => ' + result); } } catch (e) { console.log('exception!');// + [e, e.stack]); } }); // Finish up Asyncify.finish(); binaryen-version_108/scripts/gen-s-parser.py000077500000000000000000001320031423707623100213130ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2018 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import sys instructions = [ ("unreachable", "makeUnreachable()"), ("nop", "makeNop()"), ("block", "makeBlock(s)"), ("loop", "makeLoop(s)"), ("if", "makeIf(s)"), ("then", "makeThenOrElse(s)"), ("else", "makeThenOrElse(s)"), ("br", "makeBreak(s)"), ("br_if", "makeBreak(s)"), ("br_table", "makeBreakTable(s)"), ("return", "makeReturn(s)"), ("call", "makeCall(s, /*isReturn=*/false)"), ("call_indirect", "makeCallIndirect(s, /*isReturn=*/false)"), ("return_call", "makeCall(s, /*isReturn=*/true)"), ("return_call_indirect", "makeCallIndirect(s, /*isReturn=*/true)"), ("drop", "makeDrop(s)"), ("select", "makeSelect(s)"), ("local.get", "makeLocalGet(s)"), ("local.set", "makeLocalSet(s)"), ("local.tee", "makeLocalTee(s)"), ("global.get", "makeGlobalGet(s)"), ("global.set", "makeGlobalSet(s)"), ("memory.init", "makeMemoryInit(s)"), ("data.drop", "makeDataDrop(s)"), ("memory.copy", "makeMemoryCopy(s)"), ("memory.fill", "makeMemoryFill(s)"), ("i32.load", "makeLoad(s, Type::i32, /*isAtomic=*/false)"), ("i64.load", "makeLoad(s, Type::i64, /*isAtomic=*/false)"), ("f32.load", "makeLoad(s, Type::f32, /*isAtomic=*/false)"), ("f64.load", "makeLoad(s, Type::f64, /*isAtomic=*/false)"), ("i32.load8_s", "makeLoad(s, Type::i32, /*isAtomic=*/false)"), ("i32.load8_u", "makeLoad(s, Type::i32, /*isAtomic=*/false)"), ("i32.load16_s", "makeLoad(s, Type::i32, /*isAtomic=*/false)"), ("i32.load16_u", "makeLoad(s, Type::i32, /*isAtomic=*/false)"), ("i64.load8_s", "makeLoad(s, Type::i64, /*isAtomic=*/false)"), ("i64.load8_u", "makeLoad(s, Type::i64, /*isAtomic=*/false)"), ("i64.load16_s", "makeLoad(s, Type::i64, /*isAtomic=*/false)"), ("i64.load16_u", "makeLoad(s, Type::i64, /*isAtomic=*/false)"), ("i64.load32_s", "makeLoad(s, Type::i64, /*isAtomic=*/false)"), ("i64.load32_u", "makeLoad(s, Type::i64, /*isAtomic=*/false)"), ("i32.store", "makeStore(s, Type::i32, /*isAtomic=*/false)"), ("i64.store", "makeStore(s, Type::i64, /*isAtomic=*/false)"), ("f32.store", "makeStore(s, Type::f32, /*isAtomic=*/false)"), ("f64.store", "makeStore(s, Type::f64, /*isAtomic=*/false)"), ("i32.store8", "makeStore(s, Type::i32, /*isAtomic=*/false)"), ("i32.store16", "makeStore(s, Type::i32, /*isAtomic=*/false)"), ("i64.store8", "makeStore(s, Type::i64, /*isAtomic=*/false)"), ("i64.store16", "makeStore(s, Type::i64, /*isAtomic=*/false)"), ("i64.store32", "makeStore(s, Type::i64, /*isAtomic=*/false)"), ("memory.size", "makeMemorySize(s)"), ("memory.grow", "makeMemoryGrow(s)"), ("i32.const", "makeConst(s, Type::i32)"), ("i64.const", "makeConst(s, Type::i64)"), ("f32.const", "makeConst(s, Type::f32)"), ("f64.const", "makeConst(s, Type::f64)"), ("i32.eqz", "makeUnary(s, UnaryOp::EqZInt32)"), ("i32.eq", "makeBinary(s, BinaryOp::EqInt32)"), ("i32.ne", "makeBinary(s, BinaryOp::NeInt32)"), ("i32.lt_s", "makeBinary(s, BinaryOp::LtSInt32)"), ("i32.lt_u", "makeBinary(s, BinaryOp::LtUInt32)"), ("i32.gt_s", "makeBinary(s, BinaryOp::GtSInt32)"), ("i32.gt_u", "makeBinary(s, BinaryOp::GtUInt32)"), ("i32.le_s", "makeBinary(s, BinaryOp::LeSInt32)"), ("i32.le_u", "makeBinary(s, BinaryOp::LeUInt32)"), ("i32.ge_s", "makeBinary(s, BinaryOp::GeSInt32)"), ("i32.ge_u", "makeBinary(s, BinaryOp::GeUInt32)"), ("i64.eqz", "makeUnary(s, UnaryOp::EqZInt64)"), ("i64.eq", "makeBinary(s, BinaryOp::EqInt64)"), ("i64.ne", "makeBinary(s, BinaryOp::NeInt64)"), ("i64.lt_s", "makeBinary(s, BinaryOp::LtSInt64)"), ("i64.lt_u", "makeBinary(s, BinaryOp::LtUInt64)"), ("i64.gt_s", "makeBinary(s, BinaryOp::GtSInt64)"), ("i64.gt_u", "makeBinary(s, BinaryOp::GtUInt64)"), ("i64.le_s", "makeBinary(s, BinaryOp::LeSInt64)"), ("i64.le_u", "makeBinary(s, BinaryOp::LeUInt64)"), ("i64.ge_s", "makeBinary(s, BinaryOp::GeSInt64)"), ("i64.ge_u", "makeBinary(s, BinaryOp::GeUInt64)"), ("f32.eq", "makeBinary(s, BinaryOp::EqFloat32)"), ("f32.ne", "makeBinary(s, BinaryOp::NeFloat32)"), ("f32.lt", "makeBinary(s, BinaryOp::LtFloat32)"), ("f32.gt", "makeBinary(s, BinaryOp::GtFloat32)"), ("f32.le", "makeBinary(s, BinaryOp::LeFloat32)"), ("f32.ge", "makeBinary(s, BinaryOp::GeFloat32)"), ("f64.eq", "makeBinary(s, BinaryOp::EqFloat64)"), ("f64.ne", "makeBinary(s, BinaryOp::NeFloat64)"), ("f64.lt", "makeBinary(s, BinaryOp::LtFloat64)"), ("f64.gt", "makeBinary(s, BinaryOp::GtFloat64)"), ("f64.le", "makeBinary(s, BinaryOp::LeFloat64)"), ("f64.ge", "makeBinary(s, BinaryOp::GeFloat64)"), ("i32.clz", "makeUnary(s, UnaryOp::ClzInt32)"), ("i32.ctz", "makeUnary(s, UnaryOp::CtzInt32)"), ("i32.popcnt", "makeUnary(s, UnaryOp::PopcntInt32)"), ("i32.add", "makeBinary(s, BinaryOp::AddInt32)"), ("i32.sub", "makeBinary(s, BinaryOp::SubInt32)"), ("i32.mul", "makeBinary(s, BinaryOp::MulInt32)"), ("i32.div_s", "makeBinary(s, BinaryOp::DivSInt32)"), ("i32.div_u", "makeBinary(s, BinaryOp::DivUInt32)"), ("i32.rem_s", "makeBinary(s, BinaryOp::RemSInt32)"), ("i32.rem_u", "makeBinary(s, BinaryOp::RemUInt32)"), ("i32.and", "makeBinary(s, BinaryOp::AndInt32)"), ("i32.or", "makeBinary(s, BinaryOp::OrInt32)"), ("i32.xor", "makeBinary(s, BinaryOp::XorInt32)"), ("i32.shl", "makeBinary(s, BinaryOp::ShlInt32)"), ("i32.shr_s", "makeBinary(s, BinaryOp::ShrSInt32)"), ("i32.shr_u", "makeBinary(s, BinaryOp::ShrUInt32)"), ("i32.rotl", "makeBinary(s, BinaryOp::RotLInt32)"), ("i32.rotr", "makeBinary(s, BinaryOp::RotRInt32)"), ("i64.clz", "makeUnary(s, UnaryOp::ClzInt64)"), ("i64.ctz", "makeUnary(s, UnaryOp::CtzInt64)"), ("i64.popcnt", "makeUnary(s, UnaryOp::PopcntInt64)"), ("i64.add", "makeBinary(s, BinaryOp::AddInt64)"), ("i64.sub", "makeBinary(s, BinaryOp::SubInt64)"), ("i64.mul", "makeBinary(s, BinaryOp::MulInt64)"), ("i64.div_s", "makeBinary(s, BinaryOp::DivSInt64)"), ("i64.div_u", "makeBinary(s, BinaryOp::DivUInt64)"), ("i64.rem_s", "makeBinary(s, BinaryOp::RemSInt64)"), ("i64.rem_u", "makeBinary(s, BinaryOp::RemUInt64)"), ("i64.and", "makeBinary(s, BinaryOp::AndInt64)"), ("i64.or", "makeBinary(s, BinaryOp::OrInt64)"), ("i64.xor", "makeBinary(s, BinaryOp::XorInt64)"), ("i64.shl", "makeBinary(s, BinaryOp::ShlInt64)"), ("i64.shr_s", "makeBinary(s, BinaryOp::ShrSInt64)"), ("i64.shr_u", "makeBinary(s, BinaryOp::ShrUInt64)"), ("i64.rotl", "makeBinary(s, BinaryOp::RotLInt64)"), ("i64.rotr", "makeBinary(s, BinaryOp::RotRInt64)"), ("f32.abs", "makeUnary(s, UnaryOp::AbsFloat32)"), ("f32.neg", "makeUnary(s, UnaryOp::NegFloat32)"), ("f32.ceil", "makeUnary(s, UnaryOp::CeilFloat32)"), ("f32.floor", "makeUnary(s, UnaryOp::FloorFloat32)"), ("f32.trunc", "makeUnary(s, UnaryOp::TruncFloat32)"), ("f32.nearest", "makeUnary(s, UnaryOp::NearestFloat32)"), ("f32.sqrt", "makeUnary(s, UnaryOp::SqrtFloat32)"), ("f32.add", "makeBinary(s, BinaryOp::AddFloat32)"), ("f32.sub", "makeBinary(s, BinaryOp::SubFloat32)"), ("f32.mul", "makeBinary(s, BinaryOp::MulFloat32)"), ("f32.div", "makeBinary(s, BinaryOp::DivFloat32)"), ("f32.min", "makeBinary(s, BinaryOp::MinFloat32)"), ("f32.max", "makeBinary(s, BinaryOp::MaxFloat32)"), ("f32.copysign", "makeBinary(s, BinaryOp::CopySignFloat32)"), ("f64.abs", "makeUnary(s, UnaryOp::AbsFloat64)"), ("f64.neg", "makeUnary(s, UnaryOp::NegFloat64)"), ("f64.ceil", "makeUnary(s, UnaryOp::CeilFloat64)"), ("f64.floor", "makeUnary(s, UnaryOp::FloorFloat64)"), ("f64.trunc", "makeUnary(s, UnaryOp::TruncFloat64)"), ("f64.nearest", "makeUnary(s, UnaryOp::NearestFloat64)"), ("f64.sqrt", "makeUnary(s, UnaryOp::SqrtFloat64)"), ("f64.add", "makeBinary(s, BinaryOp::AddFloat64)"), ("f64.sub", "makeBinary(s, BinaryOp::SubFloat64)"), ("f64.mul", "makeBinary(s, BinaryOp::MulFloat64)"), ("f64.div", "makeBinary(s, BinaryOp::DivFloat64)"), ("f64.min", "makeBinary(s, BinaryOp::MinFloat64)"), ("f64.max", "makeBinary(s, BinaryOp::MaxFloat64)"), ("f64.copysign", "makeBinary(s, BinaryOp::CopySignFloat64)"), ("i32.wrap_i64", "makeUnary(s, UnaryOp::WrapInt64)"), ("i32.trunc_f32_s", "makeUnary(s, UnaryOp::TruncSFloat32ToInt32)"), ("i32.trunc_f32_u", "makeUnary(s, UnaryOp::TruncUFloat32ToInt32)"), ("i32.trunc_f64_s", "makeUnary(s, UnaryOp::TruncSFloat64ToInt32)"), ("i32.trunc_f64_u", "makeUnary(s, UnaryOp::TruncUFloat64ToInt32)"), ("i64.extend_i32_s", "makeUnary(s, UnaryOp::ExtendSInt32)"), ("i64.extend_i32_u", "makeUnary(s, UnaryOp::ExtendUInt32)"), ("i64.trunc_f32_s", "makeUnary(s, UnaryOp::TruncSFloat32ToInt64)"), ("i64.trunc_f32_u", "makeUnary(s, UnaryOp::TruncUFloat32ToInt64)"), ("i64.trunc_f64_s", "makeUnary(s, UnaryOp::TruncSFloat64ToInt64)"), ("i64.trunc_f64_u", "makeUnary(s, UnaryOp::TruncUFloat64ToInt64)"), ("f32.convert_i32_s", "makeUnary(s, UnaryOp::ConvertSInt32ToFloat32)"), ("f32.convert_i32_u", "makeUnary(s, UnaryOp::ConvertUInt32ToFloat32)"), ("f32.convert_i64_s", "makeUnary(s, UnaryOp::ConvertSInt64ToFloat32)"), ("f32.convert_i64_u", "makeUnary(s, UnaryOp::ConvertUInt64ToFloat32)"), ("f32.demote_f64", "makeUnary(s, UnaryOp::DemoteFloat64)"), ("f64.convert_i32_s", "makeUnary(s, UnaryOp::ConvertSInt32ToFloat64)"), ("f64.convert_i32_u", "makeUnary(s, UnaryOp::ConvertUInt32ToFloat64)"), ("f64.convert_i64_s", "makeUnary(s, UnaryOp::ConvertSInt64ToFloat64)"), ("f64.convert_i64_u", "makeUnary(s, UnaryOp::ConvertUInt64ToFloat64)"), ("f64.promote_f32", "makeUnary(s, UnaryOp::PromoteFloat32)"), ("i32.reinterpret_f32", "makeUnary(s, UnaryOp::ReinterpretFloat32)"), ("i64.reinterpret_f64", "makeUnary(s, UnaryOp::ReinterpretFloat64)"), ("f32.reinterpret_i32", "makeUnary(s, UnaryOp::ReinterpretInt32)"), ("f64.reinterpret_i64", "makeUnary(s, UnaryOp::ReinterpretInt64)"), ("i32.extend8_s", "makeUnary(s, UnaryOp::ExtendS8Int32)"), ("i32.extend16_s", "makeUnary(s, UnaryOp::ExtendS16Int32)"), ("i64.extend8_s", "makeUnary(s, UnaryOp::ExtendS8Int64)"), ("i64.extend16_s", "makeUnary(s, UnaryOp::ExtendS16Int64)"), ("i64.extend32_s", "makeUnary(s, UnaryOp::ExtendS32Int64)"), # atomic instructions ("memory.atomic.notify", "makeAtomicNotify(s)"), ("memory.atomic.wait32", "makeAtomicWait(s, Type::i32)"), ("memory.atomic.wait64", "makeAtomicWait(s, Type::i64)"), ("atomic.fence", "makeAtomicFence(s)"), ("i32.atomic.load8_u", "makeLoad(s, Type::i32, /*isAtomic=*/true)"), ("i32.atomic.load16_u", "makeLoad(s, Type::i32, /*isAtomic=*/true)"), ("i32.atomic.load", "makeLoad(s, Type::i32, /*isAtomic=*/true)"), ("i64.atomic.load8_u", "makeLoad(s, Type::i64, /*isAtomic=*/true)"), ("i64.atomic.load16_u", "makeLoad(s, Type::i64, /*isAtomic=*/true)"), ("i64.atomic.load32_u", "makeLoad(s, Type::i64, /*isAtomic=*/true)"), ("i64.atomic.load", "makeLoad(s, Type::i64, /*isAtomic=*/true)"), ("i32.atomic.store8", "makeStore(s, Type::i32, /*isAtomic=*/true)"), ("i32.atomic.store16", "makeStore(s, Type::i32, /*isAtomic=*/true)"), ("i32.atomic.store", "makeStore(s, Type::i32, /*isAtomic=*/true)"), ("i64.atomic.store8", "makeStore(s, Type::i64, /*isAtomic=*/true)"), ("i64.atomic.store16", "makeStore(s, Type::i64, /*isAtomic=*/true)"), ("i64.atomic.store32", "makeStore(s, Type::i64, /*isAtomic=*/true)"), ("i64.atomic.store", "makeStore(s, Type::i64, /*isAtomic=*/true)"), ("i32.atomic.rmw8.add_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw16.add_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw.add", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i64.atomic.rmw8.add_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw16.add_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw32.add_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw.add", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i32.atomic.rmw8.sub_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw16.sub_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw.sub", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i64.atomic.rmw8.sub_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw16.sub_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw32.sub_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw.sub", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i32.atomic.rmw8.and_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw16.and_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw.and", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i64.atomic.rmw8.and_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw16.and_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw32.and_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw.and", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i32.atomic.rmw8.or_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw16.or_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw.or", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i64.atomic.rmw8.or_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw16.or_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw32.or_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw.or", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i32.atomic.rmw8.xor_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw16.xor_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw.xor", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i64.atomic.rmw8.xor_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw16.xor_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw32.xor_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw.xor", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i32.atomic.rmw8.xchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw16.xchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw.xchg", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i64.atomic.rmw8.xchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw16.xchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw32.xchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw.xchg", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i32.atomic.rmw8.cmpxchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw16.cmpxchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i32.atomic.rmw.cmpxchg", "makeAtomicRMWOrCmpxchg(s, Type::i32)"), ("i64.atomic.rmw8.cmpxchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw16.cmpxchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw32.cmpxchg_u", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), ("i64.atomic.rmw.cmpxchg", "makeAtomicRMWOrCmpxchg(s, Type::i64)"), # nontrapping float-to-int instructions ("i32.trunc_sat_f32_s", "makeUnary(s, UnaryOp::TruncSatSFloat32ToInt32)"), ("i32.trunc_sat_f32_u", "makeUnary(s, UnaryOp::TruncSatUFloat32ToInt32)"), ("i32.trunc_sat_f64_s", "makeUnary(s, UnaryOp::TruncSatSFloat64ToInt32)"), ("i32.trunc_sat_f64_u", "makeUnary(s, UnaryOp::TruncSatUFloat64ToInt32)"), ("i64.trunc_sat_f32_s", "makeUnary(s, UnaryOp::TruncSatSFloat32ToInt64)"), ("i64.trunc_sat_f32_u", "makeUnary(s, UnaryOp::TruncSatUFloat32ToInt64)"), ("i64.trunc_sat_f64_s", "makeUnary(s, UnaryOp::TruncSatSFloat64ToInt64)"), ("i64.trunc_sat_f64_u", "makeUnary(s, UnaryOp::TruncSatUFloat64ToInt64)"), # SIMD ops ("v128.load", "makeLoad(s, Type::v128, /*isAtomic=*/false)"), ("v128.store", "makeStore(s, Type::v128, /*isAtomic=*/false)"), ("v128.const", "makeConst(s, Type::v128)"), ("i8x16.shuffle", "makeSIMDShuffle(s)"), ("i8x16.splat", "makeUnary(s, UnaryOp::SplatVecI8x16)"), ("i8x16.extract_lane_s", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI8x16, 16)"), ("i8x16.extract_lane_u", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI8x16, 16)"), ("i8x16.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI8x16, 16)"), ("i16x8.splat", "makeUnary(s, UnaryOp::SplatVecI16x8)"), ("i16x8.extract_lane_s", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI16x8, 8)"), ("i16x8.extract_lane_u", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI16x8, 8)"), ("i16x8.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI16x8, 8)"), ("i32x4.splat", "makeUnary(s, UnaryOp::SplatVecI32x4)"), ("i32x4.extract_lane", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI32x4, 4)"), ("i32x4.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI32x4, 4)"), ("i64x2.splat", "makeUnary(s, UnaryOp::SplatVecI64x2)"), ("i64x2.extract_lane", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI64x2, 2)"), ("i64x2.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI64x2, 2)"), ("f32x4.splat", "makeUnary(s, UnaryOp::SplatVecF32x4)"), ("f32x4.extract_lane", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF32x4, 4)"), ("f32x4.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF32x4, 4)"), ("f64x2.splat", "makeUnary(s, UnaryOp::SplatVecF64x2)"), ("f64x2.extract_lane", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF64x2, 2)"), ("f64x2.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF64x2, 2)"), ("i8x16.eq", "makeBinary(s, BinaryOp::EqVecI8x16)"), ("i8x16.ne", "makeBinary(s, BinaryOp::NeVecI8x16)"), ("i8x16.lt_s", "makeBinary(s, BinaryOp::LtSVecI8x16)"), ("i8x16.lt_u", "makeBinary(s, BinaryOp::LtUVecI8x16)"), ("i8x16.gt_s", "makeBinary(s, BinaryOp::GtSVecI8x16)"), ("i8x16.gt_u", "makeBinary(s, BinaryOp::GtUVecI8x16)"), ("i8x16.le_s", "makeBinary(s, BinaryOp::LeSVecI8x16)"), ("i8x16.le_u", "makeBinary(s, BinaryOp::LeUVecI8x16)"), ("i8x16.ge_s", "makeBinary(s, BinaryOp::GeSVecI8x16)"), ("i8x16.ge_u", "makeBinary(s, BinaryOp::GeUVecI8x16)"), ("i16x8.eq", "makeBinary(s, BinaryOp::EqVecI16x8)"), ("i16x8.ne", "makeBinary(s, BinaryOp::NeVecI16x8)"), ("i16x8.lt_s", "makeBinary(s, BinaryOp::LtSVecI16x8)"), ("i16x8.lt_u", "makeBinary(s, BinaryOp::LtUVecI16x8)"), ("i16x8.gt_s", "makeBinary(s, BinaryOp::GtSVecI16x8)"), ("i16x8.gt_u", "makeBinary(s, BinaryOp::GtUVecI16x8)"), ("i16x8.le_s", "makeBinary(s, BinaryOp::LeSVecI16x8)"), ("i16x8.le_u", "makeBinary(s, BinaryOp::LeUVecI16x8)"), ("i16x8.ge_s", "makeBinary(s, BinaryOp::GeSVecI16x8)"), ("i16x8.ge_u", "makeBinary(s, BinaryOp::GeUVecI16x8)"), ("i32x4.eq", "makeBinary(s, BinaryOp::EqVecI32x4)"), ("i32x4.ne", "makeBinary(s, BinaryOp::NeVecI32x4)"), ("i32x4.lt_s", "makeBinary(s, BinaryOp::LtSVecI32x4)"), ("i32x4.lt_u", "makeBinary(s, BinaryOp::LtUVecI32x4)"), ("i32x4.gt_s", "makeBinary(s, BinaryOp::GtSVecI32x4)"), ("i32x4.gt_u", "makeBinary(s, BinaryOp::GtUVecI32x4)"), ("i32x4.le_s", "makeBinary(s, BinaryOp::LeSVecI32x4)"), ("i32x4.le_u", "makeBinary(s, BinaryOp::LeUVecI32x4)"), ("i32x4.ge_s", "makeBinary(s, BinaryOp::GeSVecI32x4)"), ("i32x4.ge_u", "makeBinary(s, BinaryOp::GeUVecI32x4)"), ("i64x2.eq", "makeBinary(s, BinaryOp::EqVecI64x2)"), ("i64x2.ne", "makeBinary(s, BinaryOp::NeVecI64x2)"), ("i64x2.lt_s", "makeBinary(s, BinaryOp::LtSVecI64x2)"), ("i64x2.gt_s", "makeBinary(s, BinaryOp::GtSVecI64x2)"), ("i64x2.le_s", "makeBinary(s, BinaryOp::LeSVecI64x2)"), ("i64x2.ge_s", "makeBinary(s, BinaryOp::GeSVecI64x2)"), ("f32x4.eq", "makeBinary(s, BinaryOp::EqVecF32x4)"), ("f32x4.ne", "makeBinary(s, BinaryOp::NeVecF32x4)"), ("f32x4.lt", "makeBinary(s, BinaryOp::LtVecF32x4)"), ("f32x4.gt", "makeBinary(s, BinaryOp::GtVecF32x4)"), ("f32x4.le", "makeBinary(s, BinaryOp::LeVecF32x4)"), ("f32x4.ge", "makeBinary(s, BinaryOp::GeVecF32x4)"), ("f64x2.eq", "makeBinary(s, BinaryOp::EqVecF64x2)"), ("f64x2.ne", "makeBinary(s, BinaryOp::NeVecF64x2)"), ("f64x2.lt", "makeBinary(s, BinaryOp::LtVecF64x2)"), ("f64x2.gt", "makeBinary(s, BinaryOp::GtVecF64x2)"), ("f64x2.le", "makeBinary(s, BinaryOp::LeVecF64x2)"), ("f64x2.ge", "makeBinary(s, BinaryOp::GeVecF64x2)"), ("v128.not", "makeUnary(s, UnaryOp::NotVec128)"), ("v128.and", "makeBinary(s, BinaryOp::AndVec128)"), ("v128.or", "makeBinary(s, BinaryOp::OrVec128)"), ("v128.xor", "makeBinary(s, BinaryOp::XorVec128)"), ("v128.andnot", "makeBinary(s, BinaryOp::AndNotVec128)"), ("v128.any_true", "makeUnary(s, UnaryOp::AnyTrueVec128)"), ("v128.bitselect", "makeSIMDTernary(s, SIMDTernaryOp::Bitselect)"), ("v128.load8_lane", "makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load8LaneVec128)"), ("v128.load16_lane", "makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load16LaneVec128)"), ("v128.load32_lane", "makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load32LaneVec128)"), ("v128.load64_lane", "makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load64LaneVec128)"), ("v128.store8_lane", "makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store8LaneVec128)"), ("v128.store16_lane", "makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store16LaneVec128)"), ("v128.store32_lane", "makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store32LaneVec128)"), ("v128.store64_lane", "makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store64LaneVec128)"), ("i8x16.popcnt", "makeUnary(s, UnaryOp::PopcntVecI8x16)"), ("i8x16.abs", "makeUnary(s, UnaryOp::AbsVecI8x16)"), ("i8x16.neg", "makeUnary(s, UnaryOp::NegVecI8x16)"), ("i8x16.all_true", "makeUnary(s, UnaryOp::AllTrueVecI8x16)"), ("i8x16.bitmask", "makeUnary(s, UnaryOp::BitmaskVecI8x16)"), ("i8x16.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI8x16)"), ("i8x16.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI8x16)"), ("i8x16.shr_u", "makeSIMDShift(s, SIMDShiftOp::ShrUVecI8x16)"), ("i8x16.add", "makeBinary(s, BinaryOp::AddVecI8x16)"), ("i8x16.add_sat_s", "makeBinary(s, BinaryOp::AddSatSVecI8x16)"), ("i8x16.add_sat_u", "makeBinary(s, BinaryOp::AddSatUVecI8x16)"), ("i8x16.sub", "makeBinary(s, BinaryOp::SubVecI8x16)"), ("i8x16.sub_sat_s", "makeBinary(s, BinaryOp::SubSatSVecI8x16)"), ("i8x16.sub_sat_u", "makeBinary(s, BinaryOp::SubSatUVecI8x16)"), ("i8x16.min_s", "makeBinary(s, BinaryOp::MinSVecI8x16)"), ("i8x16.min_u", "makeBinary(s, BinaryOp::MinUVecI8x16)"), ("i8x16.max_s", "makeBinary(s, BinaryOp::MaxSVecI8x16)"), ("i8x16.max_u", "makeBinary(s, BinaryOp::MaxUVecI8x16)"), ("i8x16.avgr_u", "makeBinary(s, BinaryOp::AvgrUVecI8x16)"), ("i16x8.abs", "makeUnary(s, UnaryOp::AbsVecI16x8)"), ("i16x8.neg", "makeUnary(s, UnaryOp::NegVecI16x8)"), ("i16x8.all_true", "makeUnary(s, UnaryOp::AllTrueVecI16x8)"), ("i16x8.bitmask", "makeUnary(s, UnaryOp::BitmaskVecI16x8)"), ("i16x8.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI16x8)"), ("i16x8.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI16x8)"), ("i16x8.shr_u", "makeSIMDShift(s, SIMDShiftOp::ShrUVecI16x8)"), ("i16x8.add", "makeBinary(s, BinaryOp::AddVecI16x8)"), ("i16x8.add_sat_s", "makeBinary(s, BinaryOp::AddSatSVecI16x8)"), ("i16x8.add_sat_u", "makeBinary(s, BinaryOp::AddSatUVecI16x8)"), ("i16x8.sub", "makeBinary(s, BinaryOp::SubVecI16x8)"), ("i16x8.sub_sat_s", "makeBinary(s, BinaryOp::SubSatSVecI16x8)"), ("i16x8.sub_sat_u", "makeBinary(s, BinaryOp::SubSatUVecI16x8)"), ("i16x8.mul", "makeBinary(s, BinaryOp::MulVecI16x8)"), ("i16x8.min_s", "makeBinary(s, BinaryOp::MinSVecI16x8)"), ("i16x8.min_u", "makeBinary(s, BinaryOp::MinUVecI16x8)"), ("i16x8.max_s", "makeBinary(s, BinaryOp::MaxSVecI16x8)"), ("i16x8.max_u", "makeBinary(s, BinaryOp::MaxUVecI16x8)"), ("i16x8.avgr_u", "makeBinary(s, BinaryOp::AvgrUVecI16x8)"), ("i16x8.q15mulr_sat_s", "makeBinary(s, BinaryOp::Q15MulrSatSVecI16x8)"), ("i16x8.extmul_low_i8x16_s", "makeBinary(s, BinaryOp::ExtMulLowSVecI16x8)"), ("i16x8.extmul_high_i8x16_s", "makeBinary(s, BinaryOp::ExtMulHighSVecI16x8)"), ("i16x8.extmul_low_i8x16_u", "makeBinary(s, BinaryOp::ExtMulLowUVecI16x8)"), ("i16x8.extmul_high_i8x16_u", "makeBinary(s, BinaryOp::ExtMulHighUVecI16x8)"), ("i32x4.abs", "makeUnary(s, UnaryOp::AbsVecI32x4)"), ("i32x4.neg", "makeUnary(s, UnaryOp::NegVecI32x4)"), ("i32x4.all_true", "makeUnary(s, UnaryOp::AllTrueVecI32x4)"), ("i32x4.bitmask", "makeUnary(s, UnaryOp::BitmaskVecI32x4)"), ("i32x4.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI32x4)"), ("i32x4.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI32x4)"), ("i32x4.shr_u", "makeSIMDShift(s, SIMDShiftOp::ShrUVecI32x4)"), ("i32x4.add", "makeBinary(s, BinaryOp::AddVecI32x4)"), ("i32x4.sub", "makeBinary(s, BinaryOp::SubVecI32x4)"), ("i32x4.mul", "makeBinary(s, BinaryOp::MulVecI32x4)"), ("i32x4.min_s", "makeBinary(s, BinaryOp::MinSVecI32x4)"), ("i32x4.min_u", "makeBinary(s, BinaryOp::MinUVecI32x4)"), ("i32x4.max_s", "makeBinary(s, BinaryOp::MaxSVecI32x4)"), ("i32x4.max_u", "makeBinary(s, BinaryOp::MaxUVecI32x4)"), ("i32x4.dot_i16x8_s", "makeBinary(s, BinaryOp::DotSVecI16x8ToVecI32x4)"), ("i32x4.extmul_low_i16x8_s", "makeBinary(s, BinaryOp::ExtMulLowSVecI32x4)"), ("i32x4.extmul_high_i16x8_s", "makeBinary(s, BinaryOp::ExtMulHighSVecI32x4)"), ("i32x4.extmul_low_i16x8_u", "makeBinary(s, BinaryOp::ExtMulLowUVecI32x4)"), ("i32x4.extmul_high_i16x8_u", "makeBinary(s, BinaryOp::ExtMulHighUVecI32x4)"), ("i64x2.abs", "makeUnary(s, UnaryOp::AbsVecI64x2)"), ("i64x2.neg", "makeUnary(s, UnaryOp::NegVecI64x2)"), ("i64x2.all_true", "makeUnary(s, UnaryOp::AllTrueVecI64x2)"), ("i64x2.bitmask", "makeUnary(s, UnaryOp::BitmaskVecI64x2)"), ("i64x2.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI64x2)"), ("i64x2.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI64x2)"), ("i64x2.shr_u", "makeSIMDShift(s, SIMDShiftOp::ShrUVecI64x2)"), ("i64x2.add", "makeBinary(s, BinaryOp::AddVecI64x2)"), ("i64x2.sub", "makeBinary(s, BinaryOp::SubVecI64x2)"), ("i64x2.mul", "makeBinary(s, BinaryOp::MulVecI64x2)"), ("i64x2.extmul_low_i32x4_s", "makeBinary(s, BinaryOp::ExtMulLowSVecI64x2)"), ("i64x2.extmul_high_i32x4_s", "makeBinary(s, BinaryOp::ExtMulHighSVecI64x2)"), ("i64x2.extmul_low_i32x4_u", "makeBinary(s, BinaryOp::ExtMulLowUVecI64x2)"), ("i64x2.extmul_high_i32x4_u", "makeBinary(s, BinaryOp::ExtMulHighUVecI64x2)"), ("f32x4.abs", "makeUnary(s, UnaryOp::AbsVecF32x4)"), ("f32x4.neg", "makeUnary(s, UnaryOp::NegVecF32x4)"), ("f32x4.sqrt", "makeUnary(s, UnaryOp::SqrtVecF32x4)"), ("f32x4.add", "makeBinary(s, BinaryOp::AddVecF32x4)"), ("f32x4.sub", "makeBinary(s, BinaryOp::SubVecF32x4)"), ("f32x4.mul", "makeBinary(s, BinaryOp::MulVecF32x4)"), ("f32x4.div", "makeBinary(s, BinaryOp::DivVecF32x4)"), ("f32x4.min", "makeBinary(s, BinaryOp::MinVecF32x4)"), ("f32x4.max", "makeBinary(s, BinaryOp::MaxVecF32x4)"), ("f32x4.pmin", "makeBinary(s, BinaryOp::PMinVecF32x4)"), ("f32x4.pmax", "makeBinary(s, BinaryOp::PMaxVecF32x4)"), ("f32x4.ceil", "makeUnary(s, UnaryOp::CeilVecF32x4)"), ("f32x4.floor", "makeUnary(s, UnaryOp::FloorVecF32x4)"), ("f32x4.trunc", "makeUnary(s, UnaryOp::TruncVecF32x4)"), ("f32x4.nearest", "makeUnary(s, UnaryOp::NearestVecF32x4)"), ("f64x2.abs", "makeUnary(s, UnaryOp::AbsVecF64x2)"), ("f64x2.neg", "makeUnary(s, UnaryOp::NegVecF64x2)"), ("f64x2.sqrt", "makeUnary(s, UnaryOp::SqrtVecF64x2)"), ("f64x2.add", "makeBinary(s, BinaryOp::AddVecF64x2)"), ("f64x2.sub", "makeBinary(s, BinaryOp::SubVecF64x2)"), ("f64x2.mul", "makeBinary(s, BinaryOp::MulVecF64x2)"), ("f64x2.div", "makeBinary(s, BinaryOp::DivVecF64x2)"), ("f64x2.min", "makeBinary(s, BinaryOp::MinVecF64x2)"), ("f64x2.max", "makeBinary(s, BinaryOp::MaxVecF64x2)"), ("f64x2.pmin", "makeBinary(s, BinaryOp::PMinVecF64x2)"), ("f64x2.pmax", "makeBinary(s, BinaryOp::PMaxVecF64x2)"), ("f64x2.ceil", "makeUnary(s, UnaryOp::CeilVecF64x2)"), ("f64x2.floor", "makeUnary(s, UnaryOp::FloorVecF64x2)"), ("f64x2.trunc", "makeUnary(s, UnaryOp::TruncVecF64x2)"), ("f64x2.nearest", "makeUnary(s, UnaryOp::NearestVecF64x2)"), ("i32x4.trunc_sat_f32x4_s", "makeUnary(s, UnaryOp::TruncSatSVecF32x4ToVecI32x4)"), ("i32x4.trunc_sat_f32x4_u", "makeUnary(s, UnaryOp::TruncSatUVecF32x4ToVecI32x4)"), ("f32x4.convert_i32x4_s", "makeUnary(s, UnaryOp::ConvertSVecI32x4ToVecF32x4)"), ("f32x4.convert_i32x4_u", "makeUnary(s, UnaryOp::ConvertUVecI32x4ToVecF32x4)"), ("v128.load8_splat", "makeSIMDLoad(s, SIMDLoadOp::Load8SplatVec128)"), ("v128.load16_splat", "makeSIMDLoad(s, SIMDLoadOp::Load16SplatVec128)"), ("v128.load32_splat", "makeSIMDLoad(s, SIMDLoadOp::Load32SplatVec128)"), ("v128.load64_splat", "makeSIMDLoad(s, SIMDLoadOp::Load64SplatVec128)"), ("v128.load8x8_s", "makeSIMDLoad(s, SIMDLoadOp::Load8x8SVec128)"), ("v128.load8x8_u", "makeSIMDLoad(s, SIMDLoadOp::Load8x8UVec128)"), ("v128.load16x4_s", "makeSIMDLoad(s, SIMDLoadOp::Load16x4SVec128)"), ("v128.load16x4_u", "makeSIMDLoad(s, SIMDLoadOp::Load16x4UVec128)"), ("v128.load32x2_s", "makeSIMDLoad(s, SIMDLoadOp::Load32x2SVec128)"), ("v128.load32x2_u", "makeSIMDLoad(s, SIMDLoadOp::Load32x2UVec128)"), ("v128.load32_zero", "makeSIMDLoad(s, SIMDLoadOp::Load32ZeroVec128)"), ("v128.load64_zero", "makeSIMDLoad(s, SIMDLoadOp::Load64ZeroVec128)"), ("i8x16.narrow_i16x8_s", "makeBinary(s, BinaryOp::NarrowSVecI16x8ToVecI8x16)"), ("i8x16.narrow_i16x8_u", "makeBinary(s, BinaryOp::NarrowUVecI16x8ToVecI8x16)"), ("i16x8.narrow_i32x4_s", "makeBinary(s, BinaryOp::NarrowSVecI32x4ToVecI16x8)"), ("i16x8.narrow_i32x4_u", "makeBinary(s, BinaryOp::NarrowUVecI32x4ToVecI16x8)"), ("i16x8.extend_low_i8x16_s", "makeUnary(s, UnaryOp::ExtendLowSVecI8x16ToVecI16x8)"), ("i16x8.extend_high_i8x16_s", "makeUnary(s, UnaryOp::ExtendHighSVecI8x16ToVecI16x8)"), ("i16x8.extend_low_i8x16_u", "makeUnary(s, UnaryOp::ExtendLowUVecI8x16ToVecI16x8)"), ("i16x8.extend_high_i8x16_u", "makeUnary(s, UnaryOp::ExtendHighUVecI8x16ToVecI16x8)"), ("i32x4.extend_low_i16x8_s", "makeUnary(s, UnaryOp::ExtendLowSVecI16x8ToVecI32x4)"), ("i32x4.extend_high_i16x8_s", "makeUnary(s, UnaryOp::ExtendHighSVecI16x8ToVecI32x4)"), ("i32x4.extend_low_i16x8_u", "makeUnary(s, UnaryOp::ExtendLowUVecI16x8ToVecI32x4)"), ("i32x4.extend_high_i16x8_u", "makeUnary(s, UnaryOp::ExtendHighUVecI16x8ToVecI32x4)"), ("i64x2.extend_low_i32x4_s", "makeUnary(s, UnaryOp::ExtendLowSVecI32x4ToVecI64x2)"), ("i64x2.extend_high_i32x4_s", "makeUnary(s, UnaryOp::ExtendHighSVecI32x4ToVecI64x2)"), ("i64x2.extend_low_i32x4_u", "makeUnary(s, UnaryOp::ExtendLowUVecI32x4ToVecI64x2)"), ("i64x2.extend_high_i32x4_u", "makeUnary(s, UnaryOp::ExtendHighUVecI32x4ToVecI64x2)"), ("i8x16.swizzle", "makeBinary(s, BinaryOp::SwizzleVecI8x16)"), ("i16x8.extadd_pairwise_i8x16_s", "makeUnary(s, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8)"), ("i16x8.extadd_pairwise_i8x16_u", "makeUnary(s, UnaryOp::ExtAddPairwiseUVecI8x16ToI16x8)"), ("i32x4.extadd_pairwise_i16x8_s", "makeUnary(s, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4)"), ("i32x4.extadd_pairwise_i16x8_u", "makeUnary(s, UnaryOp::ExtAddPairwiseUVecI16x8ToI32x4)"), ("f64x2.convert_low_i32x4_s", "makeUnary(s, UnaryOp::ConvertLowSVecI32x4ToVecF64x2)"), ("f64x2.convert_low_i32x4_u", "makeUnary(s, UnaryOp::ConvertLowUVecI32x4ToVecF64x2)"), ("i32x4.trunc_sat_f64x2_s_zero", "makeUnary(s, UnaryOp::TruncSatZeroSVecF64x2ToVecI32x4)"), ("i32x4.trunc_sat_f64x2_u_zero", "makeUnary(s, UnaryOp::TruncSatZeroUVecF64x2ToVecI32x4)"), ("f32x4.demote_f64x2_zero", "makeUnary(s, UnaryOp::DemoteZeroVecF64x2ToVecF32x4)"), ("f64x2.promote_low_f32x4", "makeUnary(s, UnaryOp::PromoteLowVecF32x4ToVecF64x2)"), # relaxed SIMD ops ("i8x16.relaxed_swizzle", "makeBinary(s, BinaryOp::RelaxedSwizzleVecI8x16)"), ("i32x4.relaxed_trunc_f32x4_s", "makeUnary(s, UnaryOp::RelaxedTruncSVecF32x4ToVecI32x4)"), ("i32x4.relaxed_trunc_f32x4_u", "makeUnary(s, UnaryOp::RelaxedTruncUVecF32x4ToVecI32x4)"), ("i32x4.relaxed_trunc_f64x2_s_zero", "makeUnary(s, UnaryOp::RelaxedTruncZeroSVecF64x2ToVecI32x4)"), ("i32x4.relaxed_trunc_f64x2_u_zero", "makeUnary(s, UnaryOp::RelaxedTruncZeroUVecF64x2ToVecI32x4)"), ("f32x4.relaxed_fma", "makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmaVecF32x4)"), ("f32x4.relaxed_fms", "makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmsVecF32x4)"), ("f64x2.relaxed_fma", "makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmaVecF64x2)"), ("f64x2.relaxed_fms", "makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmsVecF64x2)"), ("i8x16.laneselect", "makeSIMDTernary(s, SIMDTernaryOp::LaneselectI8x16)"), ("i16x8.laneselect", "makeSIMDTernary(s, SIMDTernaryOp::LaneselectI16x8)"), ("i32x4.laneselect", "makeSIMDTernary(s, SIMDTernaryOp::LaneselectI32x4)"), ("i64x2.laneselect", "makeSIMDTernary(s, SIMDTernaryOp::LaneselectI64x2)"), ("f32x4.relaxed_min", "makeBinary(s, BinaryOp::RelaxedMinVecF32x4)"), ("f32x4.relaxed_max", "makeBinary(s, BinaryOp::RelaxedMaxVecF32x4)"), ("f64x2.relaxed_min", "makeBinary(s, BinaryOp::RelaxedMinVecF64x2)"), ("f64x2.relaxed_max", "makeBinary(s, BinaryOp::RelaxedMaxVecF64x2)"), ("i16x8.relaxed_q15mulr_s", "makeBinary(s, BinaryOp::RelaxedQ15MulrSVecI16x8)"), ("i16x8.dot_i8x16_i7x16_s", "makeBinary(s, BinaryOp::DotI8x16I7x16SToVecI16x8)"), ("i16x8.dot_i8x16_i7x16_u", "makeBinary(s, BinaryOp::DotI8x16I7x16UToVecI16x8)"), ("i32x4.dot_i8x16_i7x16_add_s", "makeSIMDTernary(s, SIMDTernaryOp::DotI8x16I7x16AddSToVecI32x4)"), ("i32x4.dot_i8x16_i7x16_add_u", "makeSIMDTernary(s, SIMDTernaryOp::DotI8x16I7x16AddUToVecI32x4)"), # reference types instructions ("ref.null", "makeRefNull(s)"), ("ref.is_null", "makeRefIs(s, RefIsNull)"), ("ref.func", "makeRefFunc(s)"), ("ref.eq", "makeRefEq(s)"), # table instructions ("table.get", "makeTableGet(s)"), ("table.set", "makeTableSet(s)"), ("table.size", "makeTableSize(s)"), ("table.grow", "makeTableGrow(s)"), # TODO: # table.init # table.fill # table.copy # # exception handling instructions ("try", "makeTry(s)"), ("throw", "makeThrow(s)"), ("rethrow", "makeRethrow(s)"), # Multivalue pseudoinstructions ("tuple.make", "makeTupleMake(s)"), ("tuple.extract", "makeTupleExtract(s)"), ("pop", "makePop(s)"), # Typed function references instructions ("call_ref", "makeCallRef(s, /*isReturn=*/false)"), ("return_call_ref", "makeCallRef(s, /*isReturn=*/true)"), # GC ("i31.new", "makeI31New(s)"), ("i31.get_s", "makeI31Get(s, true)"), ("i31.get_u", "makeI31Get(s, false)"), ("ref.test", "makeRefTest(s)"), ("ref.test_static", "makeRefTestStatic(s)"), ("ref.cast", "makeRefCast(s)"), ("ref.cast_static", "makeRefCastStatic(s)"), ("ref.cast_nop_static", "makeRefCastNopStatic(s)"), ("br_on_null", "makeBrOn(s, BrOnNull)"), ("br_on_non_null", "makeBrOn(s, BrOnNonNull)"), ("br_on_cast", "makeBrOn(s, BrOnCast)"), ("br_on_cast_static", "makeBrOnStatic(s, BrOnCast)"), ("br_on_cast_fail", "makeBrOn(s, BrOnCastFail)"), ("br_on_cast_static_fail", "makeBrOnStatic(s, BrOnCastFail)"), ("br_on_func", "makeBrOn(s, BrOnFunc)"), ("br_on_non_func", "makeBrOn(s, BrOnNonFunc)"), ("br_on_data", "makeBrOn(s, BrOnData)"), ("br_on_non_data", "makeBrOn(s, BrOnNonData)"), ("br_on_i31", "makeBrOn(s, BrOnI31)"), ("br_on_non_i31", "makeBrOn(s, BrOnNonI31)"), ("rtt.canon", "makeRttCanon(s)"), ("rtt.sub", "makeRttSub(s)"), ("rtt.fresh_sub", "makeRttFreshSub(s)"), ("struct.new_with_rtt", "makeStructNew(s, false)"), ("struct.new_default_with_rtt", "makeStructNew(s, true)"), ("struct.new", "makeStructNewStatic(s, false)"), ("struct.new_default", "makeStructNewStatic(s, true)"), ("struct.get", "makeStructGet(s)"), ("struct.get_s", "makeStructGet(s, true)"), ("struct.get_u", "makeStructGet(s, false)"), ("struct.set", "makeStructSet(s)"), ("array.new_with_rtt", "makeArrayNew(s, false)"), ("array.new_default_with_rtt", "makeArrayNew(s, true)"), ("array.new", "makeArrayNewStatic(s, false)"), ("array.new_default", "makeArrayNewStatic(s, true)"), ("array.init", "makeArrayInit(s)"), ("array.init_static", "makeArrayInitStatic(s)"), ("array.get", "makeArrayGet(s)"), ("array.get_s", "makeArrayGet(s, true)"), ("array.get_u", "makeArrayGet(s, false)"), ("array.set", "makeArraySet(s)"), ("array.len", "makeArrayLen(s)"), ("array.copy", "makeArrayCopy(s)"), ("ref.is_func", "makeRefIs(s, RefIsFunc)"), ("ref.is_data", "makeRefIs(s, RefIsData)"), ("ref.is_i31", "makeRefIs(s, RefIsI31)"), ("ref.as_non_null", "makeRefAs(s, RefAsNonNull)"), ("ref.as_func", "makeRefAs(s, RefAsFunc)"), ("ref.as_data", "makeRefAs(s, RefAsData)"), ("ref.as_i31", "makeRefAs(s, RefAsI31)"), ] class CodePrinter: indents = 0 def __enter__(self): CodePrinter.indents += 1 def __exit__(self, *args): CodePrinter.indents -= 1 def indent(self): # call in a 'with' statement return self def print_line(self, line): print(" " * CodePrinter.indents + line) class Node: def __init__(self, expr=None, children=None, inst=None): # the expression to return if this is the string has ended self.expr = expr # map unique strings to children nodes self.children = children if children else {} # full instruction leading to this node self.inst = inst def _common_prefix(a, b): """Return the common prefix of two strings.""" prefix = [] while a and b and a[0] == b[0]: prefix.append(a[0]) a = a[1:] b = b[1:] return "".join(prefix) def do_insert(self, full_inst, inst, expr): if not inst: assert self.expr is None, "Repeated instruction " + full_inst self.expr = expr self.inst = full_inst return # find key with shared prefix prefix, key = "", None for k in self.children: prefix = Node._common_prefix(inst, k) if prefix: key = k break if key is None: # unique prefix, insert and stop self.children[inst] = Node(expr, inst=full_inst) return key_remainder = key[len(prefix):] if key_remainder: # split key and move everything after the prefix to a new node child = self.children.pop(key) self.children[prefix] = Node(children={key_remainder: child}) # update key for recursive insert key = prefix # chop off prefix and recurse self.children[key].do_insert(full_inst, inst[len(key):], expr) def insert(self, inst, expr): self.do_insert(inst, inst, expr) def instruction_parser(): """Build a trie out of all the instructions, then emit it as C++ code.""" trie = Node() inst_length = 0 for inst, expr in instructions: inst_length = max(inst_length, len(inst)) trie.insert(inst, expr) printer = CodePrinter() printer.print_line("char op[{}] = {{'\\0'}};".format(inst_length + 1)) printer.print_line("strncpy(op, s[0]->c_str(), {});".format(inst_length)) def print_leaf(expr, inst): printer.print_line("if (strcmp(op, \"{inst}\") == 0) {{ return {expr}; }}" .format(inst=inst, expr=expr)) printer.print_line("goto parse_error;") def emit(node, idx=0): assert node.children printer.print_line("switch (op[{}]) {{".format(idx)) with printer.indent(): if node.expr: printer.print_line("case '\\0':") with printer.indent(): print_leaf(node.expr, node.inst) children = sorted(node.children.items(), key=lambda pair: pair[0]) for prefix, child in children: if child.children: printer.print_line("case '{}': {{".format(prefix[0])) with printer.indent(): emit(child, idx + len(prefix)) printer.print_line("}") else: assert child.expr printer.print_line("case '{}':".format(prefix[0])) with printer.indent(): print_leaf(child.expr, child.inst) printer.print_line("default: goto parse_error;") printer.print_line("}") emit(trie) printer.print_line("parse_error:") with printer.indent(): printer.print_line("throw ParseException(std::string(op), s.line, s.col);") def print_header(): print("// DO NOT EDIT! This file generated by scripts/gen-s-parser.py\n") print("// clang-format off\n") def print_footer(): print("\n// clang-format on") def generate_with_guard(generator, guard): print("#ifdef {}".format(guard)) print("#undef {}".format(guard)) generator() print("#endif // {}".format(guard)) def main(): if sys.version_info.major != 3: import datetime print("It's " + str(datetime.datetime.now().year) + "! Use Python 3!") sys.exit(1) print_header() generate_with_guard(instruction_parser, "INSTRUCTION_PARSER") print_footer() if __name__ == "__main__": main() binaryen-version_108/scripts/not.py000077500000000000000000000017061423707623100176150ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2020 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import sys import subprocess # Emulate the `not` tool from LLVM's test infrastructure for use with lit and # FileCheck. It succeeds if the given subcommand fails and vice versa. def main(): cmd = sys.argv[1:] result = subprocess.run(cmd) sys.exit(0 if result.returncode != 0 else 1) if __name__ == '__main__': main() binaryen-version_108/scripts/port_passes_tests_to_lit.py000077500000000000000000000073031423707623100241520ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2021 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Automatically port legacy passes tests to be lit tests """ import argparse import glob import os import subprocess import sys script_dir = os.path.dirname(__file__) test_dir = os.path.join(os.path.dirname(script_dir), 'test') def warn(msg): print(f'WARNING: {msg}', file=sys.stderr) def port_test(args, test): name = os.path.basename(test) base = name.replace('.wast', '') print('..', name) if not test.endswith('.wast'): warn('Skipping because only .wast files are supported') return dest = os.path.join(test_dir, 'lit', 'passes', name) if not args.force and os.path.exists(dest): warn('Skipping because destination file already exist') return joined_passes = base passes_file = os.path.join(test_dir, 'passes', base + '.passes') if os.path.exists(passes_file): with open(passes_file) as f: joined_passes = f.read().strip() if 'translate-to-fuzz' in joined_passes or 'dwarf' in joined_passes: warn('Skipping due to Windows issues') return for bad in ['noprint', 'metrics', 'fuzz', 'print', 'emit', 'dump']: if bad in joined_passes: warn('Skipping due to nonstandard output') return passes = joined_passes.split('_') opts = [('--' + p if not p.startswith('O') and p != 'g' else '-' + p) for p in passes] run_line = (f';; RUN: foreach %s %t wasm-opt {" ".join(opts)} -S -o -' ' | filecheck %s') notice = (f';; NOTE: This test was ported using port_test.py and could be' ' cleaned up.') with open(test, 'r') as src_file: with open(dest, 'w') as dest_file: print(notice, file=dest_file) print('', file=dest_file) print(run_line, file=dest_file) print('', file=dest_file) print(src_file.read(), file=dest_file, end='') update_script = os.path.join(script_dir, 'update_lit_checks.py') subprocess.run([sys.executable, update_script, '-f', '--all-items', dest]) if not args.no_delete: for f in glob.glob(test.replace('.wast', '.*')): # Do not delete binary tests with the same name if f.endswith('.wasm') or f.endswith('.bin.txt'): continue os.remove(f) if args.git_add: subprocess.run(['git', 'add', f]) if args.git_add: subprocess.run(['git', 'add', dest]) def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('-f', '--force', action='store_true', help='Overwrite existing lit tests') parser.add_argument('--no-delete', action='store_true', help='Do not remove the old tests') parser.add_argument('--git-add', action='store_true', help='Stage changes') parser.add_argument('tests', nargs='+', help='The test files to port') args = parser.parse_args() for pattern in args.tests: for test in glob.glob(pattern, recursive=True): port_test(args, test) if __name__ == '__main__': main() binaryen-version_108/scripts/storage.py000077500000000000000000000036531423707623100204640ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import print_function import glob import json import os import urllib2 STORAGE_BASE = 'https://storage.googleapis.com/wasm-llvm/builds/git/' def download_revision(force_latest): name = 'latest' if force_latest else 'lkgr' downloaded = urllib2.urlopen(STORAGE_BASE + name).read().strip() # TODO: for now try opening as JSON, if that doesn't work then the content is # just a hash. The waterfall is in the process of migrating to JSON. info = None try: info = json.loads(downloaded) except ValueError: pass return info['build'] if type(info) == dict else downloaded def download_tar(tar_pattern, directory, revision): tar_path = os.path.join(directory, tar_pattern) revision_tar_path = tar_path % revision if os.path.isfile(revision_tar_path): print('Already have `%s`' % revision_tar_path) else: print('Downloading `%s`' % revision_tar_path) with open(revision_tar_path, 'w+') as f: f.write(urllib2.urlopen(STORAGE_BASE + tar_pattern % revision).read()) # Remove any previous tarfiles. for older_tar in glob.glob(tar_path % '*'): if older_tar != revision_tar_path: print('Removing older tar file `%s`' % older_tar) os.remove(older_tar) return revision_tar_path binaryen-version_108/scripts/strip_local_names.py000066400000000000000000000005221423707623100225030ustar00rootroot00000000000000 """Removes local names. When you don't care about local names but do want to diff for structural changes, this can help. """ import sys for line in open(sys.argv[1]).readlines(): if '(local.tee ' in line or '(local.set ' in line or '(local.get ' in line: print(line[:line.find('$')]) else: print(line.rstrip()) binaryen-version_108/scripts/test/000077500000000000000000000000001423707623100174135ustar00rootroot00000000000000binaryen-version_108/scripts/test/__init__.py000066400000000000000000000012541423707623100215260ustar00rootroot00000000000000# Copyright 2015 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Empty __init__.py file: Python treats the directory as containing a package. binaryen-version_108/scripts/test/binaryenjs.py000066400000000000000000000104301423707623100221270ustar00rootroot00000000000000# Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import subprocess from . import shared from . import support def do_test_binaryen_js_with(which): if not (shared.MOZJS or shared.NODEJS): shared.fail_with_error('no vm to run binaryen.js tests') node_has_wasm = shared.NODEJS and support.node_has_webassembly(shared.NODEJS) if not os.path.exists(which): shared.fail_with_error('no ' + which + ' build to test') print('\n[ checking binaryen.js testcases (' + which + ')... ]\n') for s in sorted(os.listdir(os.path.join(shared.options.binaryen_test, 'binaryen.js'))): if not s.endswith('.js'): continue print(s) f = open('a.mjs', 'w') # avoid stdout/stderr ordering issues in some js shells - use just stdout f.write(''' console.warn = console.error = console.log; ''') binaryen_js = open(which).read() f.write(binaryen_js) test_path = os.path.join(shared.options.binaryen_test, 'binaryen.js', s) test_src = open(test_path).read() f.write(support.js_test_wrap().replace('%TEST%', test_src)) f.close() def test(cmd): if 'fatal' not in s: out = support.run_command(cmd, stderr=subprocess.STDOUT) else: # expect an error - the specific error code will depend on the vm out = support.run_command(cmd, stderr=subprocess.STDOUT, expected_status=None) expected = open(os.path.join(shared.options.binaryen_test, 'binaryen.js', s + '.txt')).read() if expected not in out: shared.fail(out, expected) # run in all possible shells if shared.MOZJS: test([shared.MOZJS, '-m', 'a.mjs']) if shared.NODEJS: if node_has_wasm or 'WebAssembly.' not in test_src: test([shared.NODEJS, 'a.mjs']) else: print('Skipping ' + test_path + ' because WebAssembly might not be supported') def update_binaryen_js_tests(): if not (shared.MOZJS or shared.NODEJS): print('no vm to run binaryen.js tests') return if not os.path.exists(shared.BINARYEN_JS): print('no binaryen.js build to test') return print('\n[ checking binaryen.js testcases... ]\n') node_has_wasm = shared.NODEJS and support.node_has_webassembly(shared.NODEJS) for s in shared.get_tests(shared.get_test_dir('binaryen.js'), ['.js']): basename = os.path.basename(s) print(basename) f = open('a.mjs', 'w') # avoid stdout/stderr ordering issues in some js shells - use just stdout f.write(''' console.warn = console.error = console.log; ''') f.write(open(shared.BINARYEN_JS).read()) test_src = open(s).read() f.write(support.js_test_wrap().replace('%TEST%', test_src)) f.close() def update(cmd): if 'fatal' not in basename: out = support.run_command(cmd, stderr=subprocess.STDOUT) else: # expect an error - the specific error code will depend on the vm out = support.run_command(cmd, stderr=subprocess.STDOUT, expected_status=None) with open(s + '.txt', 'w') as o: o.write(out) # run in available shell if shared.MOZJS: update([shared.MOZJS, '-m', 'a.mjs']) elif node_has_wasm or 'WebAssembly.' not in test_src: update([shared.NODEJS, 'a.mjs']) else: print('Skipping ' + basename + ' because WebAssembly might not be supported') def test_binaryen_js(): do_test_binaryen_js_with(shared.BINARYEN_JS) def test_binaryen_wasm(): do_test_binaryen_js_with(shared.BINARYEN_WASM) binaryen-version_108/scripts/test/env.js000066400000000000000000000004161423707623100205420ustar00rootroot00000000000000// This is the name by which the tests import the wasm table. export const table = []; var tempRet0 = 0; export function setTempRet0(x) { tempRet0 = x; } export function getTempRet0() { return tempRet0; } export const memoryBase = 0; export const tableBase = 0; binaryen-version_108/scripts/test/generate_lld_tests.py000077500000000000000000000071031423707623100236400ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2017 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import print_function import os import sys import shared import support def files_with_extensions(path, extensions): for file in sorted(os.listdir(path)): ext = os.path.splitext(file)[1] if ext in extensions: yield file, ext def generate_wat_files(llvm_bin, emscripten_root): print('\n[ building wat files from C sources... ]\n') lld_path = os.path.join(shared.options.binaryen_test, 'lld') for src_file, ext in files_with_extensions(lld_path, ['.c', '.cpp', '.s']): print('..', src_file) obj_file = src_file.replace(ext, '.o') src_path = os.path.join(lld_path, src_file) obj_path = os.path.join(lld_path, obj_file) wasm_file = src_file.replace(ext, '.wasm') wat_file = src_file.replace(ext, '.wat') obj_path = os.path.join(lld_path, obj_file) wasm_path = os.path.join(lld_path, wasm_file) wat_path = os.path.join(lld_path, wat_file) is_shared = 'shared' in src_file is_64 = '64' in src_file compile_cmd = [ os.path.join(llvm_bin, 'clang'), src_path, '-o', obj_path, '-mllvm', '-enable-emscripten-sjlj', '-c', '-nostdinc', '-Xclang', '-nobuiltininc', '-Xclang', '-nostdsysteminc', '-Xclang', '-I%s/system/include' % emscripten_root, '-O1', ] link_cmd = [ os.path.join(llvm_bin, 'wasm-ld'), '-flavor', 'wasm', '-z', '-stack-size=1048576', obj_path, '-o', wasm_path, '--allow-undefined', '--export', '__wasm_call_ctors', '--export', '__start_em_asm', '--export', '__stop_em_asm', '--global-base=568', ] # We had a regression where this test only worked if debug names # were included. if 'longjmp' in src_file: link_cmd.append('--strip-debug') if is_shared: compile_cmd.append('-fPIC') compile_cmd.append('-fvisibility=default') link_cmd.append('-shared') link_cmd.append('--experimental-pic') else: link_cmd.append('--entry=main') if is_64: compile_cmd.append('--target=wasm64-emscripten') link_cmd.append('-mwasm64') else: compile_cmd.append('--target=wasm32-emscripten') try: support.run_command(compile_cmd) support.run_command(link_cmd) support.run_command(shared.WASM_DIS + [wasm_path, '-o', wat_path]) finally: # Don't need the .o or .wasm files, don't leave them around shared.delete_from_orbit(obj_path) shared.delete_from_orbit(wasm_path) if __name__ == '__main__': if len(shared.options.positional_args) != 2: print('Usage: generate_lld_tests.py [llvm/bin/dir] [path/to/emscripten]') sys.exit(1) generate_wat_files(*shared.options.positional_args) binaryen-version_108/scripts/test/lld.py000066400000000000000000000075641423707623100205540ustar00rootroot00000000000000# Copyright 2017 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import json import os from . import shared from . import support def args_for_finalize(filename): ret = ['--global-base=568'] if 'safe_stack' in filename: ret += ['--check-stack-overflow'] if 'shared' in filename: ret += ['--side-module'] if 'standalone-wasm' in filename: ret += ['--standalone-wasm'] if 'no-emit-metadata' in filename: ret += ['--no-emit-metadata'] return ret def run_test(input_path): print('..', input_path) is_passive = '.passive.' in input_path mem_file = input_path + '.mem' extension_arg_map = { '.out': [], } if not is_passive: extension_arg_map.update({ '.mem.out': ['--separate-data-segments', mem_file], }) for ext, args in extension_arg_map.items(): expected_file = input_path + ext if not os.path.exists(expected_file): if ext == '.out': shared.fail_with_error('output ' + expected_file + ' does not exist') else: continue cmd = shared.WASM_EMSCRIPTEN_FINALIZE + args if '64' in input_path: cmd += ['--enable-memory64', '--bigint'] cmd += [input_path, '-S'] cmd += args_for_finalize(os.path.basename(input_path)) actual = support.run_command(cmd) shared.fail_if_not_identical_to_file(actual, expected_file) if ext == '.out' and '--no-emit-metadata' not in cmd: start = actual.find('--BEGIN METADATA --\n') end = actual.find('-- END METADATA --\n') if start == -1 or end == -1: shared.fail_with_error('json metadata tags not found') the_json = actual[start + len('--BEGIN METADATA --\n'):end] json.loads(the_json) if ext == '.mem.out': with open(mem_file) as mf: mem = mf.read() shared.fail_if_not_identical_to_file(mem, input_path + '.mem.mem') os.remove(mem_file) def test_wasm_emscripten_finalize(): print('\n[ checking wasm-emscripten-finalize testcases... ]\n') for input_path in shared.get_tests(shared.get_test_dir('lld'), ['.wat', '.wasm']): run_test(input_path) def update_lld_tests(): print('\n[ updating wasm-emscripten-finalize testcases... ]\n') for input_path in shared.get_tests(shared.get_test_dir('lld'), ['.wat', '.wasm']): print('..', input_path) is_passive = '.passive.' in input_path mem_file = input_path + '.mem' extension_arg_map = { '.out': [], } if not is_passive: extension_arg_map.update({ '.mem.out': ['--separate-data-segments', mem_file + '.mem'], }) for ext, ext_args in extension_arg_map.items(): out_path = input_path + ext if ext != '.out' and not os.path.exists(out_path): continue cmd = shared.WASM_EMSCRIPTEN_FINALIZE + ext_args if '64' in input_path: cmd += ['--enable-memory64', '--bigint'] cmd += [input_path, '-S'] cmd += args_for_finalize(os.path.basename(input_path)) actual = support.run_command(cmd) with open(out_path, 'w') as o: o.write(actual) binaryen-version_108/scripts/test/mod.ule.js000066400000000000000000000001011423707623100213040ustar00rootroot00000000000000 export function ba_se() { console.log('"mod.ule"."ba.se"'); } binaryen-version_108/scripts/test/node-esm-loader.mjs000066400000000000000000000022771423707623100231110ustar00rootroot00000000000000// originally lifted from https://nodejs.org/api/esm.html import path from 'path'; import process from 'process'; const baseURL = new URL('file://'); const binaryen_root = path.dirname(path.dirname(process.cwd())); baseURL.pathname = `${binaryen_root}/`; const specialTestSuiteModules = { 'spectest': { url: new URL('scripts/test/spectest.js', baseURL).href, format: 'module' }, 'env': { url: new URL('scripts/test/env.js', baseURL).href, format: 'module' }, 'mod.ule': { url: new URL('scripts/test/mod.ule.js', baseURL).href, format: 'module' } }; export async function resolve(specifier, context, defaultResolve) { const specialModule = specialTestSuiteModules[specifier]; if (specialModule) { return specialModule; } return defaultResolve(specifier, context, defaultResolve); } export async function getFormat(url, context, defaultGetFormat) { const specifiers = Object.keys(specialTestSuiteModules); for (let i = 0, k = specifiers.length; i < k; ++i) { const specialModule = specialTestSuiteModules[specifiers[i]]; if (specialModule.url == url) { return specialModule; } } return defaultGetFormat(url, context, defaultGetFormat); } binaryen-version_108/scripts/test/shared.py000066400000000000000000000453601423707623100212430ustar00rootroot00000000000000# Copyright 2015 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import print_function import argparse import difflib import fnmatch import glob import os import shutil import subprocess import sys # The C++ standard whose features are required to build Binaryen. # Keep in sync with CMakeLists.txt CXX_STANDARD cxx_standard = 17 def parse_args(args): usage_str = ("usage: 'python check.py [options]'\n\n" "Runs the Binaryen test suite.") parser = argparse.ArgumentParser(description=usage_str) parser.add_argument( '--torture', dest='torture', action='store_true', default=True, help='Chooses whether to run the torture testcases. Default: true.') parser.add_argument( '--no-torture', dest='torture', action='store_false', help='Disables running the torture testcases.') parser.add_argument( '--abort-on-first-failure', dest='abort_on_first_failure', action='store_true', default=True, help=('Specifies whether to halt test suite execution on first test error.' ' Default: true.')) parser.add_argument( '--no-abort-on-first-failure', dest='abort_on_first_failure', action='store_false', help=('If set, the whole test suite will run to completion independent of' ' earlier errors.')) parser.add_argument( '--binaryen-bin', dest='binaryen_bin', default='', help=('Specifies the path to the Binaryen executables in the CMake build' ' directory. Default: bin/ of current directory (i.e. assume an' ' in-tree build).' ' If not specified, the environment variable BINARYEN_ROOT= can also' ' be used to adjust this.')) parser.add_argument( '--binaryen-lib', dest='binaryen_lib', default='', help=('Specifies a path to where the built Binaryen shared library resides at.' ' Default: ./lib relative to bin specified above.')) parser.add_argument( '--binaryen-root', dest='binaryen_root', default='', help=('Specifies a path to the root of the Binaryen repository tree.' ' Default: the directory where this file check.py resides.')) parser.add_argument( '--out-dir', dest='out_dir', default='', help=('Specifies a path to the output directory for temp files, which ' 'is also where the test runner changes directory into.' ' Default:. out/test under the binaryen root.')) parser.add_argument( '--valgrind', dest='valgrind', default='', help=('Specifies a path to Valgrind tool, which will be used to validate' ' execution if specified. (Pass --valgrind=valgrind to search in' ' PATH)')) parser.add_argument( '--valgrind-full-leak-check', dest='valgrind_full_leak_check', action='store_true', default=False, help=('If specified, all unfreed (but still referenced) pointers at the' ' end of execution are considered memory leaks. Default: disabled.')) parser.add_argument( '--spec-test', action='append', nargs='*', default=[], dest='spec_tests', help='Names specific spec tests to run.') parser.add_argument( 'positional_args', metavar='TEST_SUITE', nargs='*', help=('Names specific test suites to run. Use --list-suites to see a ' 'list of all test suites')) parser.add_argument( '--list-suites', action='store_true', help='List the test suites that can be run.') parser.add_argument( '--filter', dest='test_name_filter', default='', help=('Specifies a filter. Only tests whose paths contains this ' 'substring will be run')) # This option is only for fuzz_opt.py # TODO Allow each script to inherit the default set of options and add its # own custom options on top of that parser.add_argument( '--auto-initial-contents', dest='auto_initial_contents', action='store_true', default=False, help='Select important initial contents automaticaly in fuzzer. ' 'Default: disabled.') return parser.parse_args(args) options = parse_args(sys.argv[1:]) requested = options.positional_args script_dir = os.path.dirname(os.path.abspath(__file__)) num_failures = 0 warnings = [] def warn(text): global warnings warnings.append(text) print('warning:', text, file=sys.stderr) # setup # Locate Binaryen build artifacts directory (bin/ by default) if not options.binaryen_bin: if os.environ.get('BINARYEN_ROOT'): if os.path.isdir(os.path.join(os.environ.get('BINARYEN_ROOT'), 'bin')): options.binaryen_bin = os.path.join( os.environ.get('BINARYEN_ROOT'), 'bin') else: options.binaryen_bin = os.environ.get('BINARYEN_ROOT') else: options.binaryen_bin = 'bin' options.binaryen_bin = os.path.normpath(os.path.abspath(options.binaryen_bin)) if not options.binaryen_lib: options.binaryen_lib = os.path.join(os.path.dirname(options.binaryen_bin), 'lib') options.binaryen_lib = os.path.normpath(os.path.abspath(options.binaryen_lib)) options.binaryen_build = os.path.dirname(options.binaryen_bin) # ensure BINARYEN_ROOT is set up os.environ['BINARYEN_ROOT'] = os.path.dirname(options.binaryen_bin) wasm_dis_filenames = ['wasm-dis', 'wasm-dis.exe', 'wasm-dis.js'] if not any(os.path.isfile(os.path.join(options.binaryen_bin, f)) for f in wasm_dis_filenames): warn('Binaryen not found (or has not been successfully built to bin/ ?') # Locate Binaryen source directory if not specified. if not options.binaryen_root: options.binaryen_root = os.path.dirname(os.path.dirname(script_dir)) options.binaryen_test = os.path.join(options.binaryen_root, 'test') if not options.out_dir: options.out_dir = os.path.join(options.binaryen_root, 'out', 'test') if not os.path.exists(options.out_dir): os.makedirs(options.out_dir) os.chdir(options.out_dir) # Finds the given executable 'program' in PATH. # Operates like the Unix tool 'which'. def which(program): def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) fpath, fname = os.path.split(program) if fpath: if is_exe(program): return program else: paths = [ # Prefer tools installed using third_party/setup.py os.path.join(options.binaryen_root, 'third_party', 'mozjs'), os.path.join(options.binaryen_root, 'third_party', 'v8'), os.path.join(options.binaryen_root, 'third_party', 'wabt', 'bin') ] + os.environ['PATH'].split(os.pathsep) for path in paths: path = path.strip('"') exe_file = os.path.join(path, program) if is_exe(exe_file): return exe_file if '.' not in fname: if is_exe(exe_file + '.exe'): return exe_file + '.exe' if is_exe(exe_file + '.cmd'): return exe_file + '.cmd' if is_exe(exe_file + '.bat'): return exe_file + '.bat' WATERFALL_BUILD_DIR = os.path.join(options.binaryen_test, 'wasm-install') BIN_DIR = os.path.abspath(os.path.join(WATERFALL_BUILD_DIR, 'wasm-install', 'bin')) NATIVECC = (os.environ.get('CC') or which('mingw32-gcc') or which('gcc') or which('clang')) NATIVEXX = (os.environ.get('CXX') or which('mingw32-g++') or which('g++') or which('clang++')) NODEJS = os.getenv('NODE', which('node') or which('nodejs')) MOZJS = which('mozjs') or which('spidermonkey') V8 = which('v8') or which('d8') BINARYEN_INSTALL_DIR = os.path.dirname(options.binaryen_bin) WASM_OPT = [os.path.join(options.binaryen_bin, 'wasm-opt')] WASM_AS = [os.path.join(options.binaryen_bin, 'wasm-as')] WASM_DIS = [os.path.join(options.binaryen_bin, 'wasm-dis')] WASM2JS = [os.path.join(options.binaryen_bin, 'wasm2js')] WASM_CTOR_EVAL = [os.path.join(options.binaryen_bin, 'wasm-ctor-eval')] WASM_SHELL = [os.path.join(options.binaryen_bin, 'wasm-shell')] WASM_REDUCE = [os.path.join(options.binaryen_bin, 'wasm-reduce')] WASM_METADCE = [os.path.join(options.binaryen_bin, 'wasm-metadce')] WASM_EMSCRIPTEN_FINALIZE = [os.path.join(options.binaryen_bin, 'wasm-emscripten-finalize')] BINARYEN_JS = os.path.join(options.binaryen_bin, 'binaryen_js.js') BINARYEN_WASM = os.path.join(options.binaryen_bin, 'binaryen_wasm.js') def wrap_with_valgrind(cmd): # Exit code 97 is arbitrary, used to easily detect when an error occurs that # is detected by Valgrind. valgrind = [options.valgrind, '--quiet', '--error-exitcode=97'] if options.valgrind_full_leak_check: valgrind += ['--leak-check=full', '--show-leak-kinds=all'] return valgrind + cmd if options.valgrind: WASM_OPT = wrap_with_valgrind(WASM_OPT) WASM_AS = wrap_with_valgrind(WASM_AS) WASM_DIS = wrap_with_valgrind(WASM_DIS) WASM_SHELL = wrap_with_valgrind(WASM_SHELL) def in_binaryen(*args): return os.path.join(options.binaryen_root, *args) os.environ['BINARYEN'] = in_binaryen() def get_platform(): return {'linux': 'linux', 'linux2': 'linux', 'darwin': 'mac', 'win32': 'windows', 'cygwin': 'windows'}[sys.platform] def has_shell_timeout(): return get_platform() != 'windows' and os.system('timeout 1s pwd') == 0 # Default options to pass to v8. These enable all features. # See https://github.com/v8/v8/blob/master/src/wasm/wasm-feature-flags.h V8_OPTS = [ '--wasm-staging', '--experimental-wasm-eh', '--experimental-wasm-compilation-hints', '--experimental-wasm-gc', '--experimental-wasm-typed-funcref', '--experimental-wasm-memory64' ] # external tools try: if NODEJS is not None: subprocess.check_call([NODEJS, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) except (OSError, subprocess.CalledProcessError): NODEJS = None if NODEJS is None: warn('no node found (did not check proper js form)') # utilities # removes a file if it exists, using any and all ways of doing so def delete_from_orbit(filename): try: os.unlink(filename) except OSError: pass if not os.path.exists(filename): return try: shutil.rmtree(filename, ignore_errors=True) except OSError: pass if not os.path.exists(filename): return try: import stat os.chmod(filename, os.stat(filename).st_mode | stat.S_IWRITE) def remove_readonly_and_try_again(func, path, exc_info): if not (os.stat(path).st_mode & stat.S_IWRITE): os.chmod(path, os.stat(path).st_mode | stat.S_IWRITE) func(path) else: raise shutil.rmtree(filename, onerror=remove_readonly_and_try_again) except OSError: pass # This is a workaround for https://bugs.python.org/issue9400 class Py2CalledProcessError(subprocess.CalledProcessError): def __init__(self, returncode, cmd, output=None, stderr=None): super(Exception, self).__init__(returncode, cmd, output, stderr) self.returncode = returncode self.cmd = cmd self.output = output self.stderr = stderr def run_process(cmd, check=True, input=None, capture_output=False, decode_output=True, *args, **kw): if input and type(input) == str: input = bytes(input, 'utf-8') if capture_output: kw['stdout'] = subprocess.PIPE kw['stderr'] = subprocess.PIPE ret = subprocess.run(cmd, check=check, input=input, *args, **kw) if decode_output and ret.stdout is not None: ret.stdout = ret.stdout.decode('utf-8') if ret.stderr is not None: ret.stderr = ret.stderr.decode('utf-8') return ret def fail_with_error(msg): global num_failures try: num_failures += 1 raise Exception(msg) except Exception as e: print(str(e)) if options.abort_on_first_failure: raise def fail(actual, expected, fromfile='expected'): diff_lines = difflib.unified_diff( expected.split('\n'), actual.split('\n'), fromfile=fromfile, tofile='actual') diff_str = ''.join([a.rstrip() + '\n' for a in diff_lines])[:] fail_with_error("incorrect output, diff:\n\n%s" % diff_str) def fail_if_not_identical(actual, expected, fromfile='expected'): if expected != actual: fail(actual, expected, fromfile=fromfile) def fail_if_not_contained(actual, expected): if expected not in actual: fail(actual, expected) def fail_if_not_identical_to_file(actual, expected_file): binary = expected_file.endswith(".wasm") or type(actual) == bytes with open(expected_file, 'rb' if binary else 'r') as f: fail_if_not_identical(actual, f.read(), fromfile=expected_file) def get_test_dir(name): """Returns the test directory located at BINARYEN_ROOT/test/[name].""" return os.path.join(options.binaryen_test, name) def get_tests(test_dir, extensions=[], recursive=False): """Returns the list of test files in a given directory. 'extensions' is a list of file extensions. If 'extensions' is empty, returns all files. """ tests = [] star = '**/*' if recursive else '*' if not extensions: tests += glob.glob(os.path.join(test_dir, star), recursive=True) for ext in extensions: tests += glob.glob(os.path.join(test_dir, star + ext), recursive=True) if options.test_name_filter: tests = fnmatch.filter(tests, options.test_name_filter) return sorted(tests) if not options.spec_tests: options.spec_tests = get_tests(get_test_dir('spec'), ['.wast']) else: options.spec_tests = options.spec_tests[:] # 11/27/2019: We updated the spec test suite to upstream spec repo. For some # files that started failing after this update, we added the new files to this # skip-list and preserved old ones by renaming them to 'old_[FILENAME].wast' # not to lose coverage. When the cause of the error is fixed or the unsupported # construct gets support so the new test passes, we can delete the # corresponding 'old_[FILENAME].wast' file. When you fix the new file and # delete the old file, make sure you rename the corresponding .wast.log file in # expected-output/ if any. SPEC_TESTS_TO_SKIP = [ # Stacky code / notation 'block.wast', 'call.wast', 'float_exprs.wast', 'globals.wast', 'loop.wast', 'nop.wast', 'select.wast', 'stack.wast', 'unwind.wast', # Binary module 'binary.wast', 'binary-leb128.wast', 'custom.wast', # Empty 'then' or 'else' in 'if' 'if.wast', 'local_set.wast', 'store.wast', # No module in a file 'token.wast', 'utf8-custom-section-id.wast', 'utf8-import-field.wast', 'utf8-import-module.wast', 'utf8-invalid-encoding.wast', # 'register' command 'linking.wast', # Misc. unsupported constructs 'call_indirect.wast', # Empty (param) and (result) 'const.wast', # Unparenthesized expression 'data.wast', # Various unsupported (data) notations 'elem.wast', # Unsupported 'offset' syntax in (elem) 'exports.wast', # Multiple inlined exports for a function 'func.wast', # Forward named type reference 'skip-stack-guard-page.wast', # Hexadecimal style (0x..) in memory offset # Untriaged: We don't know the cause of the error yet 'address.wast', # wasm2js 'assert_return' failure 'br_if.wast', # Validation error 'float_literals.wast', # 'assert_return' failure 'int_literals.wast', # 'assert_return' failure 'local_tee.wast', # Validation failure 'memory_grow.wast', # 'assert_return' failure 'start.wast', # Assertion failure 'type.wast', # 'assertion_invalid' failure 'unreachable.wast', # Validation failure 'unreached-invalid.wast' # 'assert_invalid' failure ] options.spec_tests = [t for t in options.spec_tests if os.path.basename(t) not in SPEC_TESTS_TO_SKIP] # check utilities def binary_format_check(wast, verify_final_result=True, wasm_as_args=['-g'], binary_suffix='.fromBinary', original_wast=None): # checks we can convert the wast to binary and back print(' (binary format check)') cmd = WASM_AS + [wast, '-o', 'a.wasm', '-all'] + wasm_as_args print(' ', ' '.join(cmd)) if os.path.exists('a.wasm'): os.unlink('a.wasm') subprocess.check_call(cmd, stdout=subprocess.PIPE) assert os.path.exists('a.wasm') cmd = WASM_DIS + ['a.wasm', '-o', 'ab.wast', '-all'] print(' ', ' '.join(cmd)) if os.path.exists('ab.wast'): os.unlink('ab.wast') subprocess.check_call(cmd, stdout=subprocess.PIPE) assert os.path.exists('ab.wast') # make sure it is a valid wast cmd = WASM_OPT + ['ab.wast', '-all'] print(' ', ' '.join(cmd)) subprocess.check_call(cmd, stdout=subprocess.PIPE) if verify_final_result: actual = open('ab.wast').read() fail_if_not_identical_to_file(actual, wast + binary_suffix) return 'ab.wast' def minify_check(wast, verify_final_result=True): # checks we can parse minified output print(' (minify check)') cmd = WASM_OPT + [wast, '--print-minified', '-all'] print(' ', ' '.join(cmd)) subprocess.check_call(cmd, stdout=open('a.wast', 'w'), stderr=subprocess.PIPE) subprocess.check_call(WASM_OPT + ['a.wast', '-all'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) # run a check with BINARYEN_PASS_DEBUG set, to do full validation def with_pass_debug(check): old_pass_debug = os.environ.get('BINARYEN_PASS_DEBUG') try: os.environ['BINARYEN_PASS_DEBUG'] = '1' check() finally: if old_pass_debug is not None: os.environ['BINARYEN_PASS_DEBUG'] = old_pass_debug else: if 'BINARYEN_PASS_DEBUG' in os.environ: del os.environ['BINARYEN_PASS_DEBUG'] # checks if we are on windows, and if so logs out that a test is being skipped, # and returns True. This is a central location for all test skipping on # windows, so that we can easily find which tests are skipped. def skip_if_on_windows(name): if get_platform() == 'windows': print('skipping test "%s" on windows' % name) return True return False binaryen-version_108/scripts/test/spectest.js000066400000000000000000000007011423707623100216010ustar00rootroot00000000000000export function print() { console.log(); } export function print_i32(arg) { console.log(arg, ': i32'); } export function print_f32(arg) { console.log(arg, ': f32'); } export function print_f64(arg) { console.log(arg, ': f64'); } export function print_i32_f32(arg0, arg1) { console.log(arg0, ': i32'); console.log(arg1, ': f32'); } export function print_f64_f64(arg0, arg1) { console.log(arg0, ': f64'); console.log(arg1, ': f64'); } binaryen-version_108/scripts/test/support.py000066400000000000000000000160061423707623100215040ustar00rootroot00000000000000# Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import filecmp import os import shutil import subprocess import sys import tempfile def _open_archive(tarfile, tmp_dir): with tempfile.TemporaryFile(mode='w+') as f: try: subprocess.check_call(['tar', '-xvf', tarfile], cwd=tmp_dir, stdout=f) except Exception: f.seek(0) sys.stderr.write(f.read()) raise return os.listdir(tmp_dir) def _files_same(dir1, dir2, basenames): diff = filecmp.cmpfiles(dir1, dir2, basenames) return 0 == len(diff[1] + diff[2]) def _dirs_same(dir1, dir2, basenames): for d in basenames: left = os.path.join(dir1, d) right = os.path.join(dir2, d) if not (os.path.isdir(left) and os.path.isdir(right)): return False diff = filecmp.dircmp(right, right) if 0 != len(diff.left_only + diff.right_only + diff.diff_files + diff.common_funny + diff.funny_files): return False return True def _move_files(dirfrom, dirto, basenames): for f in basenames: from_file = os.path.join(dirfrom, f) to_file = os.path.join(dirto, f) if os.path.isfile(to_file): os.path.remove(to_file) shutil.move(from_file, to_file) def _move_dirs(dirfrom, dirto, basenames): for d in basenames: from_dir = os.path.join(dirfrom, d) to_dir = os.path.join(dirto, d) if os.path.isdir(to_dir): shutil.rmtree(to_dir) shutil.move(from_dir, to_dir) def untar(tarfile, outdir): """Returns True if untar content differs from pre-existing outdir content.""" tmpdir = tempfile.mkdtemp() try: untared = _open_archive(tarfile, tmpdir) files = [f for f in untared if os.path.isfile(os.path.join(tmpdir, f))] dirs = [d for d in untared if os.path.isdir(os.path.join(tmpdir, d))] assert len(files) + len(dirs) == len(untared), 'Only files and directories' if _files_same(tmpdir, outdir, files) and _dirs_same(tmpdir, outdir, dirs): # Nothing new or different in the tarfile. return False # Some or all of the files / directories are new. _move_files(tmpdir, outdir, files) _move_dirs(tmpdir, outdir, dirs) return True finally: if os.path.isdir(tmpdir): shutil.rmtree(tmpdir) def split_wast(wastFile): # if it's a binary, leave it as is, we can't split it wast = None if not wastFile.endswith('.wasm'): try: wast = open(wastFile, 'r').read() except Exception: pass if not wast: return ((open(wastFile, 'rb').read(), []),) # .wast files can contain multiple modules, and assertions for each one. # this splits out a wast into [(module, assertions), ..] # we ignore module invalidity tests here. ret = [] def to_end(j): depth = 1 while depth > 0 and j < len(wast): if wast[j] == '"': while 1: j = wast.find('"', j + 1) if wast[j - 1] == '\\': continue break assert j > 0 elif wast[j] == '(': depth += 1 elif wast[j] == ')': depth -= 1 elif wast[j] == ';' and wast[j + 1] == ';': j = wast.find('\n', j) j += 1 return j i = 0 while i >= 0: start = wast.find('(', i) if start >= 0 and wast[start + 1] == ';': # block comment i = wast.find(';)', start + 2) assert i > 0, wast[start:] i += 2 continue skip = wast.find(';', i) if skip >= 0 and skip < start and skip + 1 < len(wast): if wast[skip + 1] == ';': i = wast.find('\n', i) + 1 continue if start < 0: break i = to_end(start + 1) chunk = wast[start:i] if chunk.startswith('(module'): ret += [(chunk, [])] elif chunk.startswith('(assert_invalid'): continue elif chunk.startswith(('(assert', '(invoke', '(register')): # ret may be empty if there are some asserts before the first # module. in that case these are asserts *without* a module, which # are valid (they may check something that doesn't refer to a module # in any way). if not ret: ret += [(None, [])] ret[-1][1].append(chunk) return ret # write a split wast from split_wast. the wast may be binary if the original # file was binary def write_wast(filename, wast, asserts=[]): if type(wast) == bytes: assert not asserts with open(filename, 'wb') as o: o.write(wast) else: with open(filename, 'w') as o: o.write(wast + '\n'.join(asserts)) def run_command(cmd, expected_status=0, stderr=None, expected_err=None, err_contains=False, err_ignore=None): if expected_err is not None: assert stderr == subprocess.PIPE or stderr is None,\ "Can't redirect stderr if using expected_err" stderr = subprocess.PIPE print('executing: ', ' '.join(cmd)) proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=stderr, universal_newlines=True, encoding='UTF-8') out, err = proc.communicate() code = proc.returncode if expected_status is not None and code != expected_status: raise Exception(('run_command failed (%s)' % code, out + str(err or ''))) if expected_err is not None: if err_ignore is not None: err = "\n".join([line for line in err.split('\n') if err_ignore not in line]) err_correct = expected_err in err if err_contains else expected_err == err if not err_correct: raise Exception(('run_command unexpected stderr', "expected '%s', actual '%s'" % (expected_err, err))) return out def node_has_webassembly(cmd): cmd = [cmd, '-e', 'process.stdout.write(typeof WebAssembly)'] return run_command(cmd) == 'object' def js_test_wrap(): # common wrapper code for JS tests, waiting for binaryen.js to become ready # and providing common utility used by all tests: return ''' (async function __in_test_code__() { var binaryen = await Binaryen() function assert(x) { if (!x) throw Error('Test assertion failed'); } %TEST% })(); ''' binaryen-version_108/scripts/test/wasm2js.py000066400000000000000000000204361423707623100213600ustar00rootroot00000000000000# Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os from scripts.test import shared from scripts.test import support tests = shared.get_tests(shared.options.binaryen_test) # memory64 is not supported in wasm2js yet (but may be with BigInt eventually). tests = [t for t in tests if '64.wast' not in t] spec_tests = shared.options.spec_tests spec_tests = [t for t in spec_tests if '.fail' not in t] spec_tests = [t for t in spec_tests if '64.wast' not in t] wasm2js_tests = shared.get_tests(shared.get_test_dir('wasm2js'), ['.wast']) assert_tests = ['wasm2js.wast.asserts'] # These tests exercise functionality not supported by wasm2js wasm2js_blacklist = ['empty_imported_table.wast'] def check_for_stale_files(): if shared.options.test_name_filter: return # TODO(sbc): Generalize and apply other test suites all_tests = [] for t in tests + spec_tests + wasm2js_tests: all_tests.append(os.path.basename(os.path.splitext(t)[0])) all_files = os.listdir(shared.get_test_dir('wasm2js')) for f in all_files: prefix = f.split('.')[0] if prefix not in all_tests: shared.fail_with_error('orphan test output: %s' % f) def test_wasm2js_output(): for opt in (0, 1): for t in tests + spec_tests + wasm2js_tests: basename = os.path.basename(t) if basename in wasm2js_blacklist: continue asm = basename.replace('.wast', '.2asm.js') expected_file = os.path.join(shared.get_test_dir('wasm2js'), asm) if opt: expected_file += '.opt' if not os.path.exists(expected_file): continue print('..', os.path.basename(t)) all_js = [] all_out = '' for module, asserts in support.split_wast(t): support.write_wast('split.wast', module, asserts) # wasm2js does not yet support EH, and enabling it can reduce # optimization opportunities cmd = shared.WASM2JS + ['split.wast', '-all', '--disable-exception-handling'] if opt: cmd += ['-O'] if 'emscripten' in t: cmd += ['--emscripten'] if 'deterministic' in t: cmd += ['--deterministic'] js = support.run_command(cmd) all_js.append(js) if not shared.NODEJS and not shared.MOZJS: print('No JS interpreters. Skipping spec tests.') continue open('a.2asm.mjs', 'w').write(js) cmd += ['--allow-asserts'] js = support.run_command(cmd) # also verify it passes pass-debug verifications shared.with_pass_debug(lambda: support.run_command(cmd)) open('a.2asm.asserts.mjs', 'w').write(js) # verify asm.js is valid js, note that we're using --experimental-modules # to enable ESM syntax and we're also passing a custom loader to handle the # `spectest` and `env` modules in our tests. if shared.NODEJS: loader = os.path.join(shared.options.binaryen_root, 'scripts', 'test', 'node-esm-loader.mjs') node = [shared.NODEJS, '--experimental-modules', '--no-warnings', '--loader', loader] cmd = node[:] cmd.append('a.2asm.mjs') out = support.run_command(cmd) shared.fail_if_not_identical(out, '') cmd = node[:] cmd.append('a.2asm.asserts.mjs') out = support.run_command(cmd, expected_err='', err_ignore='ExperimentalWarning') all_out += out shared.fail_if_not_identical_to_file(''.join(all_js), expected_file) expected_out = os.path.join(shared.get_test_dir('spec'), 'expected-output', os.path.basename(t) + '.log') if os.path.exists(expected_out): expected_out = open(expected_out).read() else: expected_out = '' shared.fail_if_not_identical(all_out, expected_out) def test_asserts_output(): for wasm in assert_tests: print('..', wasm) asserts = os.path.basename(wasm).replace('.wast.asserts', '.asserts.js') traps = os.path.basename(wasm).replace('.wast.asserts', '.traps.js') asserts_expected_file = os.path.join(shared.options.binaryen_test, asserts) traps_expected_file = os.path.join(shared.options.binaryen_test, traps) wasm = os.path.join(shared.get_test_dir('wasm2js'), wasm) cmd = shared.WASM2JS + [wasm, '--allow-asserts', '-all', '--disable-exception-handling'] out = support.run_command(cmd) shared.fail_if_not_identical_to_file(out, asserts_expected_file) cmd += ['--pedantic'] out = support.run_command(cmd) shared.fail_if_not_identical_to_file(out, traps_expected_file) def test_wasm2js(): print('\n[ checking wasm2js testcases... ]\n') check_for_stale_files() if shared.skip_if_on_windows('wasm2js'): return test_wasm2js_output() test_asserts_output() def update_wasm2js_tests(): print('\n[ checking wasm2js ]\n') for opt in (0, 1): for wasm in tests + spec_tests + wasm2js_tests: if not wasm.endswith('.wast'): continue if os.path.basename(wasm) in wasm2js_blacklist: continue asm = os.path.basename(wasm).replace('.wast', '.2asm.js') expected_file = os.path.join(shared.get_test_dir('wasm2js'), asm) if opt: expected_file += '.opt' # we run wasm2js on tests and spec tests only if the output # exists - only some work so far. the tests in extra are in # the test/wasm2js dir and so are specific to wasm2js, and # we run all of those. if wasm not in wasm2js_tests and not os.path.exists(expected_file): continue print('..', wasm) t = os.path.join(shared.options.binaryen_test, wasm) all_out = [] for module, asserts in support.split_wast(t): support.write_wast('split.wast', module, asserts) # wasm2js does not yet support EH, and enable it can reduce # optimization opportunities cmd = shared.WASM2JS + ['split.wast', '-all', '--disable-exception-handling'] if opt: cmd += ['-O'] if 'emscripten' in wasm: cmd += ['--emscripten'] if 'deterministic' in t: cmd += ['--deterministic'] out = support.run_command(cmd) all_out.append(out) with open(expected_file, 'w') as o: o.write(''.join(all_out)) for wasm in assert_tests: print('..', wasm) asserts = os.path.basename(wasm).replace('.wast.asserts', '.asserts.js') traps = os.path.basename(wasm).replace('.wast.asserts', '.traps.js') asserts_expected_file = os.path.join(shared.options.binaryen_test, asserts) traps_expected_file = os.path.join(shared.options.binaryen_test, traps) cmd = shared.WASM2JS + [os.path.join(shared.get_test_dir('wasm2js'), wasm), '--allow-asserts', '-all', '--disable-exception-handling'] out = support.run_command(cmd) with open(asserts_expected_file, 'w') as o: o.write(out) cmd += ['--pedantic'] out = support.run_command(cmd) with open(traps_expected_file, 'w') as o: o.write(out) binaryen-version_108/scripts/test/wasm_opt.py000066400000000000000000000262361423707623100216270ustar00rootroot00000000000000# Copyright 2016 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import shutil import subprocess from . import shared from . import support def test_wasm_opt(): print('\n[ checking wasm-opt -o notation... ]\n') for extra_args in [[], ['--no-validation']]: wast = os.path.join(shared.options.binaryen_test, 'hello_world.wat') shared.delete_from_orbit('a.wat') out = 'a.wat' cmd = shared.WASM_OPT + [wast, '-o', out, '-S'] + extra_args support.run_command(cmd) shared.fail_if_not_identical_to_file(open(out).read(), wast) print('\n[ checking wasm-opt binary reading/writing... ]\n') shutil.copyfile(os.path.join(shared.options.binaryen_test, 'hello_world.wat'), 'a.wat') shared.delete_from_orbit('a.wasm') shared.delete_from_orbit('b.wast') support.run_command(shared.WASM_OPT + ['a.wat', '-o', 'a.wasm']) assert open('a.wasm', 'rb').read()[0] == 0, 'we emit binary by default' support.run_command(shared.WASM_OPT + ['a.wasm', '-o', 'b.wast', '-S']) assert open('b.wast', 'rb').read()[0] != 0, 'we emit text with -S' print('\n[ checking wasm-opt passes... ]\n') for t in shared.get_tests(shared.get_test_dir('passes'), ['.wast', '.wasm']): print('..', os.path.basename(t)) # windows has some failures that need to be investigated: # * ttf tests have different outputs - order of execution of params? # * dwarf tests print windows slashes instead of unix if ('translate-to-fuzz' in t or 'dwarf' in t) and \ shared.skip_if_on_windows('fuzz translation tests'): continue binary = '.wasm' in t base = os.path.basename(t).replace('.wast', '').replace('.wasm', '') passname = base passes_file = os.path.join(shared.get_test_dir('passes'), passname + '.passes') if os.path.exists(passes_file): passname = open(passes_file).read().strip() passes = [p for p in passname.split('_') if p != 'noprint'] opts = [('--' + p if not p.startswith('O') and p != 'g' else '-' + p) for p in passes] actual = '' for module, asserts in support.split_wast(t): assert len(asserts) == 0 support.write_wast('split.wast', module) cmd = shared.WASM_OPT + opts + ['split.wast'] if 'noprint' not in t: cmd.append('--print') curr = support.run_command(cmd) actual += curr # also check debug mode output is valid debugged = support.run_command(cmd + ['--debug'], stderr=subprocess.PIPE) shared.fail_if_not_contained(actual, debugged) # also check pass-debug mode def check(): # ignore stderr, as the pass-debug output is very verbose in CI pass_debug = support.run_command(cmd, stderr=subprocess.PIPE) shared.fail_if_not_identical(curr, pass_debug) shared.with_pass_debug(check) expected_file = os.path.join(shared.get_test_dir('passes'), base + ('.bin' if binary else '') + '.txt') shared.fail_if_not_identical_to_file(actual, expected_file) if 'emit-js-wrapper' in t: with open('a.js') as actual: shared.fail_if_not_identical_to_file(actual.read(), t + '.js') if 'emit-spec-wrapper' in t: with open('a.wat') as actual: shared.fail_if_not_identical_to_file(actual.read(), t + '.wat') print('\n[ checking wasm-opt parsing & printing... ]\n') for t in shared.get_tests(shared.get_test_dir('print'), ['.wast']): print('..', os.path.basename(t)) wasm = os.path.basename(t).replace('.wast', '') cmd = shared.WASM_OPT + [t, '--print', '-all'] print(' ', ' '.join(cmd)) actual, err = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True).communicate() expected_file = os.path.join(shared.get_test_dir('print'), wasm + '.txt') shared.fail_if_not_identical_to_file(actual, expected_file) cmd = shared.WASM_OPT + [os.path.join(shared.get_test_dir('print'), t), '--print-minified', '-all'] print(' ', ' '.join(cmd)) actual, err = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True).communicate() shared.fail_if_not_identical(actual.strip(), open(os.path.join(shared.get_test_dir('print'), wasm + '.minified.txt')).read().strip()) print('\n[ checking wasm-opt testcases... ]\n') for t in shared.get_tests(shared.options.binaryen_test, ['.wast']): print('..', os.path.basename(t)) f = t + '.from-wast' cmd = shared.WASM_OPT + [t, '--print', '-all'] actual = support.run_command(cmd) actual = actual.replace('printing before:\n', '') shared.fail_if_not_identical_to_file(actual, f) # FIXME Remove this condition after nullref is implemented in V8 if 'reference-types.wast' not in t: shared.binary_format_check(t, wasm_as_args=['-g']) # test with debuginfo shared.binary_format_check(t, wasm_as_args=[], binary_suffix='.fromBinary.noDebugInfo') # test without debuginfo shared.minify_check(t) print('\n[ checking wasm-opt debugInfo read-write... ]\n') for t in shared.get_tests(shared.options.binaryen_test, ['.fromasm']): if 'debugInfo' not in t: continue print('..', os.path.basename(t)) f = t + '.read-written' support.run_command(shared.WASM_AS + [t, '--source-map=a.map', '-o', 'a.wasm', '-g']) support.run_command(shared.WASM_OPT + ['a.wasm', '--input-source-map=a.map', '-o', 'b.wasm', '--output-source-map=b.map', '-g']) actual = support.run_command(shared.WASM_DIS + ['b.wasm', '--source-map=b.map']) shared.fail_if_not_identical_to_file(actual, f) def update_wasm_opt_tests(): print('\n[ checking wasm-opt -o notation... ]\n') wast = os.path.join(shared.options.binaryen_test, 'hello_world.wat') cmd = shared.WASM_OPT + [wast, '-o', 'a.wast', '-S'] support.run_command(cmd) open(wast, 'w').write(open('a.wast').read()) print('\n[ checking wasm-opt parsing & printing... ]\n') for t in shared.get_tests(shared.get_test_dir('print'), ['.wast']): print('..', os.path.basename(t)) wasm = t.replace('.wast', '') cmd = shared.WASM_OPT + [t, '--print', '-all'] print(' ', ' '.join(cmd)) actual = subprocess.check_output(cmd) print(cmd, actual) with open(wasm + '.txt', 'wb') as o: o.write(actual) cmd = shared.WASM_OPT + [t, '--print-minified', '-all'] print(' ', ' '.join(cmd)) actual = subprocess.check_output(cmd) with open(wasm + '.minified.txt', 'wb') as o: o.write(actual) print('\n[ checking wasm-opt passes... ]\n') for t in shared.get_tests(shared.get_test_dir('passes'), ['.wast', '.wasm']): print('..', os.path.basename(t)) # windows has some failures that need to be investigated: # * ttf tests have different outputs - order of execution of params? # * dwarf tests print windows slashes instead of unix if ('translate-to-fuzz' in t or 'dwarf' in t) and \ shared.skip_if_on_windows('fuzz translation tests'): continue binary = t.endswith('.wasm') base = os.path.basename(t).replace('.wast', '').replace('.wasm', '') passname = base passes_file = os.path.join(shared.get_test_dir('passes'), passname + '.passes') if os.path.exists(passes_file): passname = open(passes_file).read().strip() passes = [p for p in passname.split('_') if p != 'noprint'] opts = [('--' + p if not p.startswith('O') and p != 'g' else '-' + p) for p in passes] actual = '' for module, asserts in support.split_wast(t): assert len(asserts) == 0 support.write_wast('split.wast', module) cmd = shared.WASM_OPT + opts + ['split.wast'] if 'noprint' not in t: cmd.append('--print') actual += support.run_command(cmd) with open(os.path.join(shared.options.binaryen_test, 'passes', base + ('.bin' if binary else '') + '.txt'), 'w') as o: o.write(actual) if 'emit-js-wrapper' in t: with open('a.js') as i: with open(t + '.js', 'w') as o: o.write(i.read()) if 'emit-spec-wrapper' in t: with open('a.wat') as i: with open(t + '.wat', 'w') as o: o.write(i.read()) print('\n[ checking wasm-opt testcases... ]\n') for t in shared.get_tests(shared.options.binaryen_test, ['.wast']): print('..', os.path.basename(t)) f = t + '.from-wast' cmd = shared.WASM_OPT + [t, '--print', '-all'] actual = support.run_command(cmd) actual = actual.replace('printing before:\n', '') open(f, 'w').write(actual) print('\n[ checking wasm-opt debugInfo read-write... ]\n') for t in shared.get_tests(shared.options.binaryen_test, ['.fromasm']): if 'debugInfo' not in t: continue print('..', os.path.basename(t)) f = t + '.read-written' support.run_command(shared.WASM_AS + [t, '--source-map=a.map', '-o', 'a.wasm', '-g']) support.run_command(shared.WASM_OPT + ['a.wasm', '--input-source-map=a.map', '-o', 'b.wasm', '--output-source-map=b.map', '-g']) actual = support.run_command(shared.WASM_DIS + ['b.wasm', '--source-map=b.map']) open(f, 'w').write(actual) print('\n[ checking binary format testcases... ]\n') for wast in shared.get_tests(shared.options.binaryen_test, ['.wast']): for debug_info in [0, 1]: cmd = shared.WASM_AS + [wast, '-o', 'a.wasm', '-all'] if debug_info: cmd += ['-g'] print(' '.join(cmd)) if os.path.exists('a.wasm'): os.unlink('a.wasm') subprocess.check_call(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) assert os.path.exists('a.wasm') cmd = shared.WASM_DIS + ['a.wasm', '-o', 'a.wast', '-all'] print(' '.join(cmd)) if os.path.exists('a.wast'): os.unlink('a.wast') subprocess.check_call(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) assert os.path.exists('a.wast') actual = open('a.wast').read() binary_file = wast + '.fromBinary' if not debug_info: binary_file += '.noDebugInfo' with open(binary_file, 'w') as o: print('writey', binary_file) o.write(actual) binaryen-version_108/scripts/update_help_checks.py000077500000000000000000000034051423707623100226250ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2022 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """A test case update script for lit help checks. """ import os import subprocess import test.shared as shared script_dir = os.path.dirname(__file__) root_dir = os.path.dirname(script_dir) test_dir = os.path.join(root_dir, 'test', 'lit', 'help') TOOLS = ['wasm-opt', 'wasm-as', 'wasm-dis', 'wasm2js', 'wasm-ctor-eval', 'wasm-shell', 'wasm-reduce', 'wasm-metadce', 'wasm-split', 'wasm-fuzz-types', 'wasm-emscripten-finalize'] def main(): for tool in TOOLS: tool_path = os.path.join(shared.options.binaryen_bin, tool) command = [tool_path, '--help'] print(command) output = subprocess.check_output(command).decode('utf-8') with open(os.path.join(test_dir, tool + '.test'), 'w') as out: out.write(f';; RUN: {tool} --help | filecheck %s' + os.linesep) first = True for line in output.splitlines(): if first: out.write(f';; CHECK: {line}'.strip() + os.linesep) first = False else: out.write(f';; CHECK-NEXT: {line}'.strip() + os.linesep) if __name__ == '__main__': main() binaryen-version_108/scripts/update_lit_checks.py000077500000000000000000000307111423707623100224650ustar00rootroot00000000000000#!/usr/bin/env python3 # Copyright 2021 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """A test case update script. This script is a utility to update wasm-opt based lit tests with new FileCheck patterns. It is based on LLVM's update_llc_test_checks.py script. """ import argparse import glob import os import re import subprocess import sys import tempfile script_dir = os.path.dirname(__file__) script_name = os.path.basename(__file__) NOTICE = (';; NOTE: Assertions have been generated by {script} and should not' + ' be edited.') RUN_LINE_RE = re.compile(r'^\s*;;\s*RUN:\s*(.*)$') CHECK_PREFIX_RE = re.compile(r'.*--check-prefix[= ](\S+).*') MODULE_RE = re.compile(r'^\(module.*$', re.MULTILINE) ALL_ITEMS = '|'.join(['type', 'import', 'global', 'memory', 'data', 'table', 'elem', 'tag', 'export', 'start', 'func']) ITEM_NAME = r'\$?[^\s()]*|"[^\s()]*"' ITEM_RE = re.compile(r'(^\s*)\((' + ALL_ITEMS + r')\s+(' + ITEM_NAME + ').*$', re.MULTILINE) FUZZ_EXEC_FUNC = re.compile(r'^\[fuzz-exec\] calling (?P\S*)$') def warn(msg): print(f'warning: {msg}', file=sys.stderr) def itertests(args): """ Yield (filename, lines) for each test specified in the command line args """ for pattern in args.tests: tests = glob.glob(pattern, recursive=True) if not tests: warn(f'No tests matched {pattern}. Ignoring it.') continue for test in tests: with open(test) as f: lines = [line.rstrip() for line in f] first_line = lines[0] if lines else '' if script_name not in first_line and not args.force: warn(f'Skipping test {test} which was not generated by ' f'{script_name}. Use -f to override.') continue yield test, lines def find_run_lines(test, lines): line_matches = [RUN_LINE_RE.match(l) for l in lines] matches = [match.group(1) for match in line_matches if match] if not matches: warn(f'No RUN lines found in {test}. Ignoring.') return [] run_lines = [matches[0]] for line in matches[1:]: if run_lines[-1].endswith('\\'): run_lines[-1] = run_lines[-1].rstrip('\\') + ' ' + line else: run_lines.append(line) return run_lines def run_command(args, test, tmp, command): env = dict(os.environ) env['PATH'] = args.binaryen_bin + os.pathsep + env['PATH'] command = command.replace('%s', test) command = command.replace('%t', tmp) command = command.replace('foreach', os.path.join(script_dir, 'foreach.py')) return subprocess.check_output(command, shell=True, env=env).decode('utf-8') def find_end(module, start): # Find the index one past the closing parenthesis corresponding to the first # open parenthesis at `start`. assert module[start] == '(' depth = 1 for end in range(start + 1, len(module)): if depth == 0: break elif module[end] == '(': depth += 1 elif module[end] == ')': depth -= 1 return end def split_modules(text): # Return a list of strings; one for each module module_starts = [match.start() for match in MODULE_RE.finditer(text)] if len(module_starts) < 2: return [text] first_module = text[:module_starts[1]] modules = [first_module] for i in range(1, len(module_starts) - 1): module = text[module_starts[i]:module_starts[i + 1]] modules.append(module) last_module = text[module_starts[-1]:] modules.append(last_module) return modules def parse_output_modules(text): # Return a list containing, for each module in the text, a list of # ((kind, name), [line]) for module items. modules = [] for module in split_modules(text): items = [] for match in ITEM_RE.finditer(module): kind, name = match[2], match[3] end = find_end(module, match.end(1)) lines = module[match.start():end].split('\n') items.append(((kind, name), lines)) modules.append(items) return modules def parse_output_fuzz_exec(text): # Returns the same data as `parse_output_modules`, but can't tell where # module boundaries are, so always just returns items for a single module. items = [] for line in text.split('\n'): func = FUZZ_EXEC_FUNC.match(line) if func: # Add quotes around the name because that is how it will be parsed # in the input. name = f'"{func.group("name")}"' items.append((('func', name), [line])) elif line: assert items, 'unexpected non-invocation line' items[-1][1].append(line) return [items] def get_command_output(args, kind, test, lines, tmp): # Return list of maps from prefixes to lists of module items of the form # ((kind, name), [line]). The outer list has an entry for each module. command_output = [] for line in find_run_lines(test, lines): commands = [cmd.strip() for cmd in line.rsplit('|', 1)] if (len(commands) > 2 or (len(commands) == 2 and not commands[1].startswith('filecheck '))): warn('pipes only supported for one command piped to `filecheck`') filecheck_cmd = '' if len(commands) > 1 and commands[1].startswith('filecheck '): filecheck_cmd = commands[1] commands = commands[:1] prefix = '' if filecheck_cmd.startswith('filecheck '): prefix_match = CHECK_PREFIX_RE.match(filecheck_cmd) if prefix_match: prefix = prefix_match.group(1) else: prefix = 'CHECK' output = run_command(args, test, tmp, commands[0]) if prefix: if kind == 'wat': module_outputs = parse_output_modules(output) elif kind == 'fuzz-exec': module_outputs = parse_output_fuzz_exec(output) else: assert False, "unknown output kind" for i in range(len(module_outputs)): if len(command_output) == i: command_output.append({}) command_output[i][prefix] = module_outputs[i] return command_output def update_test(args, test, lines, tmp): # Do not update `args` directly because the changes should only apply to the # current test. all_items = args.all_items output_kind = args.output if lines and script_name in lines[0]: # Apply previously used options for this file if '--all-items' in lines[0]: all_items = True output = re.search(r'--output=(?P\S*)', lines[0]) if output: output_kind = output.group('kind') # Skip the notice if it is already in the output lines = lines[1:] command_output = get_command_output(args, output_kind, test, lines, tmp) prefixes = set(prefix for module_output in command_output for prefix in module_output.keys()) check_line_re = re.compile(r'^\s*;;\s*(' + '|'.join(prefixes) + r')(?:-NEXT|-LABEL|-NOT)?:.*$') # Filter out whitespace between check blocks if lines: filtered = [lines[0]] for i in range(1, len(lines) - 1): if lines[i] or not check_line_re.match(lines[i - 1]) or \ not check_line_re.match(lines[i + 1]): filtered.append(lines[i]) filtered.append(lines[-1]) lines = filtered named_items = [] for line in lines: match = ITEM_RE.match(line) if match: kind, name = match[2], match[3] named_items.append((kind, name)) script = script_name if all_items: script += ' --all-items' if output_kind != 'wat': script += f' --output={output_kind}' output_lines = [NOTICE.format(script=script)] def emit_checks(indent, prefix, lines): def pad(line): return line if not line or line.startswith(' ') else ' ' + line output_lines.append(f'{indent};; {prefix}: {pad(lines[0])}') for line in lines[1:]: output_lines.append(f'{indent};; {prefix}-NEXT:{pad(line)}') input_modules = [m.split('\n') for m in split_modules('\n'.join(lines))] if len(input_modules) > len(command_output): warn('Fewer output modules than input modules:' 'not all modules will get checks.') # Remove extra newlines at the end of modules input_modules = [m[:-1] for m in input_modules[:-1]] + [input_modules[-1]] for module_idx in range(len(input_modules)): output = command_output[module_idx] \ if module_idx < len(command_output) else {} for line in input_modules[module_idx]: # Skip pre-existing check lines; we will regenerate them. if check_line_re.match(line): continue match = ITEM_RE.match(line) if not match: output_lines.append(line) continue indent, kind, name = match.groups() for prefix, items in output.items(): # If the output for this prefix contains an item with this # name, emit all the items up to and including the matching # item has_item = False for kind_name, lines in items: if name and (kind, name) == kind_name: has_item = True break if has_item: first = True while True: kind_name, lines = items.pop(0) if all_items or kind_name in named_items: if not first: output_lines.append('') first = False emit_checks(indent, prefix, lines) if name and (kind, name) == kind_name: break output_lines.append(line) # Output any remaining checks for each prefix first = True for prefix, items in output.items(): for kind_name, lines in items: if all_items or kind_name in named_items: if not first: output_lines.append('') first = False emit_checks('', prefix, lines) if args.dry_run: print('\n'.join(output_lines)) else: with open(test, 'w') as f: for line in output_lines: f.write(line + '\n') def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( '--binaryen-bin', dest='binaryen_bin', default='bin', help=('Specifies the path to the Binaryen executables in the CMake build' ' directory. Default: bin/ of current directory (i.e. assume an' ' in-tree build).')) parser.add_argument( '--all-items', action='store_true', help=('Emit checks for all module items, even those that do not appear' ' in the input.')) parser.add_argument( '--output', choices=['wat', 'fuzz-exec'], default='wat', help=('The kind of output test commands are expected to produce.')) parser.add_argument( '-f', '--force', action='store_true', help=('Generate FileCheck patterns even for test files whose existing ' 'patterns were not generated by this script.')) parser.add_argument( '--dry-run', action='store_true', help=('Print the updated test file contents instead of changing the ' 'test files')) parser.add_argument('tests', nargs='+', help='The test files to update') args = parser.parse_args() args.binaryen_bin = os.path.abspath(args.binaryen_bin) tmp = tempfile.mktemp() for test, lines in itertests(args): update_test(args, test, lines, tmp) if __name__ == '__main__': main() binaryen-version_108/scripts/validation_shell.js000066400000000000000000000013771423707623100223230ustar00rootroot00000000000000// Test a file is valid, by just loading it. // Shell integration. if (typeof console === 'undefined') { console = { log: print }; } var binary; if (typeof process === 'object' && typeof require === 'function' /* node.js detection */) { var args = process.argv.slice(2); binary = require('fs').readFileSync(args[0]); if (!binary.buffer) binary = new Uint8Array(binary); } else { var args; if (typeof scriptArgs != 'undefined') { args = scriptArgs; } else if (typeof arguments != 'undefined') { args = arguments; } if (typeof readbuffer === 'function') { binary = new Uint8Array(readbuffer(args[0])); } else { binary = read(args[0], 'binary'); } } // Test the wasm for validity by compiling it. new WebAssembly.Module(binary); binaryen-version_108/scripts/wasm2js.js000066400000000000000000000167141423707623100203710ustar00rootroot00000000000000// wasm2js.js - enough of a polyfill for the WebAssembly object so that we can load // wasm2js code that way. Similar to the same file in emscripten, but tailored for // fuzzing purposes here. var WebAssembly = { Memory: function(opts) { return { buffer: new ArrayBuffer(opts['initial'] * 64 * 1024), }; }, Table: function(opts) { var ret = new Array(opts['initial']); ret.grow = function(by) { ret.push(null); }; ret.set = function(i, func) { ret[i] = func; }; ret.get = function(i) { return ret[i]; }; return ret; }, Module: function(binary) { // TODO: use the binary and info somehow - right now the wasm2js output is embedded in // the main JS return {}; }, Instance: function(module, info) { // TODO: use the module and info somehow - right now the wasm2js output is embedded in // the main JS var decodeBase64 = typeof atob === 'function' ? atob : function (input) { var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var output = ''; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; // remove all characters that are not A-Z, a-z, 0-9, +, /, or = input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ''); do { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); enc4 = keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 !== 64) { output = output + String.fromCharCode(chr2); } if (enc4 !== 64) { output = output + String.fromCharCode(chr3); } } while (i < input.length); return output; }; var atob = decodeBase64; // Additional imports asmLibraryArg['__tempMemory__'] = 0; // risky! // This will be replaced by the actual wasm2js code. var exports = instantiate(asmLibraryArg, wasmMemory); return { 'exports': exports }; }, instantiate: function(binary, info) { return { then: function(ok, err) { ok({ 'instance': new WebAssembly.Instance(new WebAssembly.Module(binary, info)) }); } }; } }; var tempRet0 = 0; var asmLibraryArg = { log_i32: function(x) { console.log('[LoggingExternalInterface logging ' + literal(x, 'i32') + ']'); }, log_i64: function(x, h) { console.log('[LoggingExternalInterface logging ' + literal(x, 'i32') + ' ' + literal(h, 'i32') + ']'); }, log_f32: function(x) { console.log('[LoggingExternalInterface logging ' + literal(x, 'f64') + ']'); }, log_f64: function(x) { console.log('[LoggingExternalInterface logging ' + literal(x, 'f64') + ']'); }, log_execution: function(loc) { console.log('log_execution ' + loc); }, setTempRet0: function(x) { tempRet0 = x; }, getTempRet0: function() { return x; }, get_i32: function(loc, index, value) { console.log('get_i32 ' + [loc, index, value]); return value; }, get_i64: function(loc, index, low, high) { console.log('get_i64 ' + [loc, index, low, high]); asmLibraryArg['setTempRet0'](high); return low; }, get_f32: function(loc, index, value) { console.log('get_f32 ' + [loc, index, value]); return value; }, get_f64: function(loc, index, value) { console.log('get_f64 ' + [loc, index, value]); return value; }, set_i32: function(loc, index, value) { console.log('set_i32 ' + [loc, index, value]); return value; }, set_i64: function(loc, index, low, high) { console.log('set_i64 ' + [loc, index, low, high]); asmLibraryArg['setTempRet0'](high); return low; }, set_f32: function(loc, index, value) { console.log('set_f32 ' + [loc, index, value]); return value; }, set_f64: function(loc, index, value) { console.log('set_f64 ' + [loc, index, value]); return value; }, load_ptr: function(loc, bytes, offset, ptr) { console.log('load_ptr ' + [loc, bytes, offset, ptr]); return ptr; }, load_val_i32: function(loc, value) { console.log('load_val_i32 ' + [loc, value]); return value; }, load_val_i64: function(loc, low, high) { console.log('load_val_i64 ' + [loc, low, high]); asmLibraryArg['setTempRet0'](high); return low; }, load_val_f32: function(loc, value) { console.log('load_val_f32 ' + [loc, value]); return value; }, load_val_f64: function(loc, value) { console.log('load_val_f64 ' + [loc, value]); return value; }, store_ptr: function(loc, bytes, offset, ptr) { console.log('store_ptr ' + [loc, bytes, offset, ptr]); return ptr; }, store_val_i32: function(loc, value) { console.log('store_val_i32 ' + [loc, value]); return value; }, store_val_i64: function(loc, low, high) { console.log('store_val_i64 ' + [loc, low, high]); asmLibraryArg['setTempRet0'](high); return low; }, store_val_f32: function(loc, value) { console.log('store_val_f32 ' + [loc, value]); return value; }, store_val_f64: function(loc, value) { console.log('store_val_f64 ' + [loc, value]); return value; }, struct_get_val_i32: function(loc, value) { console.log('struct_get_val_i32 ' + [loc, value]); return value; }, struct_get_val_i64: function(loc, value) { console.log('struct_get_val_i64 ' + [loc, value]); return value; }, struct_get_val_f32: function(loc, value) { console.log('struct_get_val_f32 ' + [loc, value]); return value; }, struct_get_val_f64: function(loc, value) { console.log('struct_get_val_f64 ' + [loc, value]); return value; }, struct_set_val_i32: function(loc, value) { console.log('struct_set_val_i32 ' + [loc, value]); return value; }, struct_set_val_i64: function(loc, value) { console.log('struct_set_val_i64 ' + [loc, value]); return value; }, struct_set_val_f32: function(loc, value) { console.log('struct_set_val_f32 ' + [loc, value]); return value; }, struct_set_val_f64: function(loc, value) { console.log('struct_set_val_f64 ' + [loc, value]); return value; }, array_get_val_i32: function(loc, value) { console.log('array_get_val_i32 ' + [loc, value]); return value; }, array_get_val_i64: function(loc, value) { console.log('array_get_val_i64 ' + [loc, value]); return value; }, array_get_val_f32: function(loc, value) { console.log('array_get_val_f32 ' + [loc, value]); return value; }, array_get_val_f64: function(loc, value) { console.log('array_get_val_f64 ' + [loc, value]); return value; }, array_set_val_i32: function(loc, value) { console.log('array_set_val_i32 ' + [loc, value]); return value; }, array_set_val_i64: function(loc, value) { console.log('array_set_val_i64 ' + [loc, value]); return value; }, array_set_val_f32: function(loc, value) { console.log('array_set_val_f32 ' + [loc, value]); return value; }, array_set_val_f64: function(loc, value) { console.log('array_set_val_f64 ' + [loc, value]); return value; }, array_get_index: function(loc, value) { console.log('array_get_index ' + [loc, value]); return value; }, array_set_index: function(loc, value) { console.log('array_set_index ' + [loc, value]); return value; }, }; var wasmMemory = new WebAssembly.Memory({ initial: 1 }); binaryen-version_108/src/000077500000000000000000000000001423707623100155345ustar00rootroot00000000000000binaryen-version_108/src/abi/000077500000000000000000000000001423707623100162675ustar00rootroot00000000000000binaryen-version_108/src/abi/js.h000066400000000000000000000073311423707623100170600ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_abi_abi_h #define wasm_abi_abi_h #include "asmjs/shared-constants.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { namespace ABI { enum class LegalizationLevel { Full = 0, Minimal = 1 }; inline std::string getLegalizationPass(LegalizationLevel level) { if (level == LegalizationLevel::Full) { return "legalize-js-interface"; } else { return "legalize-js-interface-minimally"; } } namespace wasm2js { extern cashew::IString SCRATCH_LOAD_I32; extern cashew::IString SCRATCH_STORE_I32; extern cashew::IString SCRATCH_LOAD_F32; extern cashew::IString SCRATCH_STORE_F32; extern cashew::IString SCRATCH_LOAD_F64; extern cashew::IString SCRATCH_STORE_F64; extern cashew::IString MEMORY_INIT; extern cashew::IString MEMORY_FILL; extern cashew::IString MEMORY_COPY; extern cashew::IString DATA_DROP; extern cashew::IString ATOMIC_WAIT_I32; extern cashew::IString ATOMIC_RMW_I64; extern cashew::IString GET_STASHED_BITS; // The wasm2js helpers let us do things that can't be done without special help, // like read and write to scratch memory for purposes of implementing things // like reinterpret, etc. // The optional "specific" parameter is a specific function we want. If not // provided, we create them all. inline void ensureHelpers(Module* wasm, cashew::IString specific = cashew::IString()) { auto ensureImport = [&](Name name, Type params, Type results) { if (wasm->getFunctionOrNull(name)) { return; } if (specific.is() && name != specific) { return; } auto func = Builder::makeFunction(name, Signature(params, results), {}); func->module = ENV; func->base = name; wasm->addFunction(std::move(func)); }; ensureImport(SCRATCH_LOAD_I32, {Type::i32}, Type::i32); ensureImport(SCRATCH_STORE_I32, {Type::i32, Type::i32}, Type::none); ensureImport(SCRATCH_LOAD_F32, {}, Type::f32); ensureImport(SCRATCH_STORE_F32, {Type::f32}, Type::none); ensureImport(SCRATCH_LOAD_F64, {}, Type::f64); ensureImport(SCRATCH_STORE_F64, {Type::f64}, Type::none); ensureImport( MEMORY_INIT, {Type::i32, Type::i32, Type::i32, Type::i32}, Type::none); ensureImport(MEMORY_FILL, {Type::i32, Type::i32, Type::i32}, Type::none); ensureImport(MEMORY_COPY, {Type::i32, Type::i32, Type::i32}, Type::none); ensureImport(DATA_DROP, {Type::i32}, Type::none); ensureImport( ATOMIC_WAIT_I32, {Type::i32, Type::i32, Type::i32, Type::i32}, Type::i32); ensureImport( ATOMIC_RMW_I64, {Type::i32, Type::i32, Type::i32, Type::i32, Type::i32, Type::i32}, Type::i32); ensureImport(GET_STASHED_BITS, {}, Type::i32); } inline bool isHelper(cashew::IString name) { return name == SCRATCH_LOAD_I32 || name == SCRATCH_STORE_I32 || name == SCRATCH_LOAD_F32 || name == SCRATCH_STORE_F32 || name == SCRATCH_LOAD_F64 || name == SCRATCH_STORE_F64 || name == ATOMIC_WAIT_I32 || name == MEMORY_INIT || name == MEMORY_FILL || name == MEMORY_COPY || name == DATA_DROP || name == ATOMIC_RMW_I64 || name == GET_STASHED_BITS; } } // namespace wasm2js } // namespace ABI } // namespace wasm #endif // wasm_abi_abi_h binaryen-version_108/src/asm_v_wasm.h000066400000000000000000000025251423707623100200450ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_asm_v_wasm_h #define wasm_asm_v_wasm_h #include "emscripten-optimizer/optimizer.h" #include "wasm.h" namespace wasm { JsType wasmToJsType(Type type); char getSig(Type type); std::string getSig(Type results, Type params); template std::string getSig(Type result, const ListType& operands) { std::string ret; ret += getSig(result); for (auto operand : operands) { ret += getSig(operand->type); } return ret; } template std::string getSigFromStructs(Type result, const ListType& operands) { std::string ret; ret += getSig(result); for (auto operand : operands) { ret += getSig(operand.type); } return ret; } } // namespace wasm #endif // wasm_asm_v_wasm_h binaryen-version_108/src/asmjs/000077500000000000000000000000001423707623100166515ustar00rootroot00000000000000binaryen-version_108/src/asmjs/CMakeLists.txt000066400000000000000000000002461423707623100214130ustar00rootroot00000000000000FILE(GLOB asmjs_HEADERS *.h) set(asmjs_SOURCES asm_v_wasm.cpp asmangle.cpp shared-constants.cpp ${asmjs_HEADERS} ) add_library(asmjs OBJECT ${asmjs_SOURCES}) binaryen-version_108/src/asmjs/asm_v_wasm.cpp000066400000000000000000000043151423707623100215140ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "asm_v_wasm.h" #include "support/utilities.h" #include "wasm.h" namespace wasm { JsType wasmToJsType(Type type) { TODO_SINGLE_COMPOUND(type); switch (type.getBasic()) { case Type::i32: return JS_INT; case Type::f32: return JS_FLOAT; case Type::f64: return JS_DOUBLE; case Type::i64: return JS_INT64; case Type::v128: WASM_UNREACHABLE("v128 not implemented yet"); case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: WASM_UNREACHABLE("reference types are not supported by wasm2js"); case Type::none: return JS_NONE; case Type::unreachable: WASM_UNREACHABLE("invalid type"); } WASM_UNREACHABLE("invalid type"); } char getSig(Type type) { TODO_SINGLE_COMPOUND(type); switch (type.getBasic()) { case Type::i32: return 'i'; case Type::i64: return 'j'; case Type::f32: return 'f'; case Type::f64: return 'd'; case Type::v128: return 'V'; case Type::funcref: return 'F'; case Type::anyref: return 'A'; case Type::eqref: return 'Q'; case Type::i31ref: return 'I'; case Type::dataref: return 'D'; case Type::none: return 'v'; case Type::unreachable: WASM_UNREACHABLE("invalid type"); } WASM_UNREACHABLE("invalid type"); } std::string getSig(Type results, Type params) { assert(!results.isTuple()); std::string sig; sig += getSig(results); for (const auto& param : params) { sig += getSig(param); } return sig; } } // namespace wasm binaryen-version_108/src/asmjs/asmangle.cpp000066400000000000000000000112611423707623100211450ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "asmjs/asmangle.h" #include namespace wasm { std::string asmangle(std::string name) { // Wasm allows empty names as exports etc., but JS doesn't allow such // identifiers. if (name.empty()) { name = "$"; } bool mightBeKeyword = true; size_t i = 1; assert(!name.empty()); // Names must start with a character, $ or _ switch (auto ch = name[0]) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { name = "$" + name; i = 2; goto notKeyword; } notKeyword: case '$': case '_': { mightBeKeyword = false; break; } default: { if (!(ch >= 'a' && ch <= 'z') && !(ch >= 'A' && ch <= 'Z')) { name = "$" + name.substr(1); mightBeKeyword = false; } } } // Names must contain only characters, digits, $ or _ size_t len = name.length(); for (; i < len; ++i) { switch (char ch = name[i]) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '$': case '_': { mightBeKeyword = false; break; } default: { if (!(ch >= 'a' && ch <= 'z') && !(ch >= 'A' && ch <= 'Z')) { name = name.substr(0, i) + "_" + name.substr(i + 1); mightBeKeyword = false; } } } } // Names must not collide with keywords if (mightBeKeyword && len >= 2 && len <= 10) { switch (name[0]) { case 'a': { if (name == "arguments") { goto mangleKeyword; } break; } case 'b': { if (name == "break") { goto mangleKeyword; } break; } case 'c': { if (name == "case" || name == "continue" || name == "catch" || name == "const" || name == "class") { goto mangleKeyword; } break; } case 'd': { if (name == "do" || name == "default" || name == "debugger") { goto mangleKeyword; } break; } case 'e': { if (name == "else" || name == "enum" || name == "eval" || // to be sure name == "export" || name == "extends") { goto mangleKeyword; } break; } case 'f': { if (name == "for" || name == "false" || name == "finally" || name == "function") { goto mangleKeyword; } break; } case 'i': { if (name == "if" || name == "in" || name == "import" || name == "interface" || name == "implements" || name == "instanceof") { goto mangleKeyword; } break; } case 'l': { if (name == "let") { goto mangleKeyword; } break; } case 'n': { if (name == "new" || name == "null") { goto mangleKeyword; } break; } case 'p': { if (name == "public" || name == "package" || name == "private" || name == "protected") { goto mangleKeyword; } break; } case 'r': { if (name == "return") { goto mangleKeyword; } break; } case 's': { if (name == "super" || name == "static" || name == "switch") { goto mangleKeyword; } break; } case 't': { if (name == "try" || name == "this" || name == "true" || name == "throw" || name == "typeof") { goto mangleKeyword; } break; } case 'v': { if (name == "var" || name == "void") { goto mangleKeyword; } break; } case 'w': { if (name == "with" || name == "while") { goto mangleKeyword; } break; } case 'y': { if (name == "yield") { goto mangleKeyword; } break; } mangleKeyword : { name = name + "_"; } } } return name; } } // namespace wasm binaryen-version_108/src/asmjs/asmangle.h000066400000000000000000000015611423707623100206140ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_asmjs_asmangle_h #define wasm_asmjs_asmangle_h #include namespace wasm { // Mangles a WebAssembly name to a valid JavaScript identifier. std::string asmangle(std::string name); } // namespace wasm #endif // wasm_asmjs_asmangle_h binaryen-version_108/src/asmjs/shared-constants.cpp000066400000000000000000000115341423707623100226410ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "asmjs/shared-constants.h" namespace wasm { cashew::IString TOPMOST("topmost"); cashew::IString INT8ARRAY("Int8Array"); cashew::IString INT16ARRAY("Int16Array"); cashew::IString INT32ARRAY("Int32Array"); cashew::IString UINT8ARRAY("Uint8Array"); cashew::IString UINT16ARRAY("Uint16Array"); cashew::IString UINT32ARRAY("Uint32Array"); cashew::IString FLOAT32ARRAY("Float32Array"); cashew::IString FLOAT64ARRAY("Float64Array"); cashew::IString ARRAY_BUFFER("ArrayBuffer"); cashew::IString ASM_MODULE("asmModule"); cashew::IString MATH("Math"); cashew::IString IMUL("imul"); cashew::IString CLZ32("clz32"); cashew::IString FROUND("fround"); cashew::IString ASM2WASM("asm2wasm"); cashew::IString MIN("min"); cashew::IString MAX("max"); cashew::IString F64_REM("f64-rem"); cashew::IString F64_TO_INT("f64-to-int"); cashew::IString F64_TO_UINT("f64-to-uint"); cashew::IString F64_TO_INT64("f64-to-int64"); cashew::IString F64_TO_UINT64("f64-to-uint64"); cashew::IString F32_TO_INT("f32-to-int"); cashew::IString F32_TO_UINT("f32-to-uint"); cashew::IString F32_TO_INT64("f32-to-int64"); cashew::IString F32_TO_UINT64("f32-to-uint64"); cashew::IString I32S_DIV("i32s-div"); cashew::IString I32U_DIV("i32u-div"); cashew::IString I32S_REM("i32s-rem"); cashew::IString I32U_REM("i32u-rem"); cashew::IString ABS("abs"); cashew::IString FLOOR("floor"); cashew::IString CEIL("ceil"); cashew::IString TRUNC("trunc"); cashew::IString SQRT("sqrt"); cashew::IString POW("pow"); cashew::IString I32_TEMP("asm2wasm_i32_temp"); cashew::IString DEBUGGER("debugger"); cashew::IString BUFFER("buffer"); cashew::IString ENV("env"); cashew::IString STACKTOP("STACKTOP"); cashew::IString STACK_MAX("STACK_MAX"); cashew::IString INSTRUMENT("instrument"); cashew::IString MATH_IMUL("Math_imul"); cashew::IString MATH_ABS("Math_abs"); cashew::IString MATH_CEIL("Math_ceil"); cashew::IString MATH_CLZ32("Math_clz32"); cashew::IString MATH_FLOOR("Math_floor"); cashew::IString MATH_TRUNC("Math_trunc"); cashew::IString MATH_SQRT("Math_sqrt"); cashew::IString MATH_MIN("Math_min"); cashew::IString MATH_MAX("Math_max"); cashew::IString WASM_CTZ32("__wasm_ctz_i32"); cashew::IString WASM_CTZ64("__wasm_ctz_i64"); cashew::IString WASM_CLZ32("__wasm_clz_i32"); cashew::IString WASM_CLZ64("__wasm_clz_i64"); cashew::IString WASM_POPCNT32("__wasm_popcnt_i32"); cashew::IString WASM_POPCNT64("__wasm_popcnt_i64"); cashew::IString WASM_ROTL32("__wasm_rotl_i32"); cashew::IString WASM_ROTL64("__wasm_rotl_i64"); cashew::IString WASM_ROTR32("__wasm_rotr_i32"); cashew::IString WASM_ROTR64("__wasm_rotr_i64"); cashew::IString WASM_MEMORY_GROW("__wasm_memory_grow"); cashew::IString WASM_MEMORY_SIZE("__wasm_memory_size"); cashew::IString WASM_FETCH_HIGH_BITS("__wasm_fetch_high_bits"); cashew::IString INT64_TO_32_HIGH_BITS("i64toi32_i32$HIGH_BITS"); cashew::IString WASM_NEAREST_F32("__wasm_nearest_f32"); cashew::IString WASM_NEAREST_F64("__wasm_nearest_f64"); cashew::IString WASM_I64_MUL("__wasm_i64_mul"); cashew::IString WASM_I64_SDIV("__wasm_i64_sdiv"); cashew::IString WASM_I64_UDIV("__wasm_i64_udiv"); cashew::IString WASM_I64_SREM("__wasm_i64_srem"); cashew::IString WASM_I64_UREM("__wasm_i64_urem"); cashew::IString ASM_FUNC("asmFunc"); cashew::IString ABORT_FUNC("abort"); cashew::IString FUNCTION_TABLE("FUNCTION_TABLE"); cashew::IString NO_RESULT("wasm2js$noresult"); // no result at all // result in an expression, no temp var cashew::IString EXPRESSION_RESULT("wasm2js$expresult"); namespace ABI { namespace wasm2js { cashew::IString SCRATCH_LOAD_I32("wasm2js_scratch_load_i32"); cashew::IString SCRATCH_STORE_I32("wasm2js_scratch_store_i32"); cashew::IString SCRATCH_LOAD_F32("wasm2js_scratch_load_f32"); cashew::IString SCRATCH_STORE_F32("wasm2js_scratch_store_f32"); cashew::IString SCRATCH_LOAD_F64("wasm2js_scratch_load_f64"); cashew::IString SCRATCH_STORE_F64("wasm2js_scratch_store_f64"); cashew::IString MEMORY_INIT("wasm2js_memory_init"); cashew::IString MEMORY_FILL("wasm2js_memory_fill"); cashew::IString MEMORY_COPY("wasm2js_memory_copy"); cashew::IString DATA_DROP("wasm2js_data_drop"); cashew::IString ATOMIC_WAIT_I32("wasm2js_atomic_wait_i32"); cashew::IString ATOMIC_RMW_I64("wasm2js_atomic_rmw_i64"); cashew::IString GET_STASHED_BITS("wasm2js_get_stashed_bits"); } // namespace wasm2js } // namespace ABI } // namespace wasm binaryen-version_108/src/asmjs/shared-constants.h000066400000000000000000000070101423707623100223000ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_asmjs_shared_constants_h #define wasm_asmjs_shared_constants_h #include "emscripten-optimizer/istring.h" namespace wasm { extern cashew::IString TOPMOST; extern cashew::IString INT8ARRAY; extern cashew::IString INT16ARRAY; extern cashew::IString INT32ARRAY; extern cashew::IString UINT8ARRAY; extern cashew::IString UINT16ARRAY; extern cashew::IString UINT32ARRAY; extern cashew::IString FLOAT32ARRAY; extern cashew::IString FLOAT64ARRAY; extern cashew::IString ARRAY_BUFFER; extern cashew::IString ASM_MODULE; extern cashew::IString MATH; extern cashew::IString IMUL; extern cashew::IString CLZ32; extern cashew::IString FROUND; extern cashew::IString ASM2WASM; extern cashew::IString MIN; extern cashew::IString MAX; extern cashew::IString F64_REM; extern cashew::IString F64_TO_INT; extern cashew::IString F64_TO_UINT; extern cashew::IString F64_TO_INT64; extern cashew::IString F64_TO_UINT64; extern cashew::IString F32_TO_INT; extern cashew::IString F32_TO_UINT; extern cashew::IString F32_TO_INT64; extern cashew::IString F32_TO_UINT64; extern cashew::IString I32S_DIV; extern cashew::IString I32U_DIV; extern cashew::IString I32S_REM; extern cashew::IString I32U_REM; extern cashew::IString ABS; extern cashew::IString FLOOR; extern cashew::IString CEIL; extern cashew::IString TRUNC; extern cashew::IString SQRT; extern cashew::IString POW; extern cashew::IString I32_TEMP; extern cashew::IString DEBUGGER; extern cashew::IString BUFFER; extern cashew::IString ENV; extern cashew::IString STACKTOP; extern cashew::IString STACK_MAX; extern cashew::IString INSTRUMENT; extern cashew::IString MATH_IMUL; extern cashew::IString MATH_ABS; extern cashew::IString MATH_CLZ32; extern cashew::IString MATH_CEIL; extern cashew::IString MATH_FLOOR; extern cashew::IString MATH_TRUNC; extern cashew::IString MATH_SQRT; extern cashew::IString MATH_MIN; extern cashew::IString MATH_MAX; extern cashew::IString WASM_CTZ32; extern cashew::IString WASM_CTZ64; extern cashew::IString WASM_CLZ32; extern cashew::IString WASM_CLZ64; extern cashew::IString WASM_POPCNT32; extern cashew::IString WASM_POPCNT64; extern cashew::IString WASM_ROTL32; extern cashew::IString WASM_ROTL64; extern cashew::IString WASM_ROTR32; extern cashew::IString WASM_ROTR64; extern cashew::IString WASM_MEMORY_GROW; extern cashew::IString WASM_MEMORY_SIZE; extern cashew::IString WASM_FETCH_HIGH_BITS; extern cashew::IString INT64_TO_32_HIGH_BITS; extern cashew::IString WASM_NEAREST_F32; extern cashew::IString WASM_NEAREST_F64; extern cashew::IString WASM_I64_MUL; extern cashew::IString WASM_I64_SDIV; extern cashew::IString WASM_I64_UDIV; extern cashew::IString WASM_I64_SREM; extern cashew::IString WASM_I64_UREM; // wasm2js constants extern cashew::IString ASM_FUNC; extern cashew::IString ABORT_FUNC; extern cashew::IString FUNCTION_TABLE; extern cashew::IString NO_RESULT; extern cashew::IString EXPRESSION_RESULT; } // namespace wasm #endif // wasm_asmjs_shared_constants_h binaryen-version_108/src/binaryen-c.cpp000066400000000000000000005614651423707623100203100ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //=============================== // Binaryen C API implementation //=============================== #include #include "binaryen-c.h" #include "cfg/Relooper.h" #include "ir/utils.h" #include "pass.h" #include "shell-interface.h" #include "support/colors.h" #include "wasm-binary.h" #include "wasm-builder.h" #include "wasm-interpreter.h" #include "wasm-s-parser.h" #include "wasm-validator.h" #include "wasm.h" #include "wasm2js.h" #include #include #ifdef __EMSCRIPTEN__ #include #endif using namespace wasm; // Literal utilities static_assert(sizeof(BinaryenLiteral) == sizeof(Literal), "Binaryen C API literal must match wasm.h"); BinaryenLiteral toBinaryenLiteral(Literal x) { BinaryenLiteral ret; ret.type = x.type.getID(); TODO_SINGLE_COMPOUND(x.type); switch (x.type.getBasic()) { case Type::i32: ret.i32 = x.geti32(); break; case Type::i64: ret.i64 = x.geti64(); break; case Type::f32: ret.i32 = x.reinterpreti32(); break; case Type::f64: ret.i64 = x.reinterpreti64(); break; case Type::v128: memcpy(&ret.v128, x.getv128Ptr(), 16); break; case Type::funcref: ret.func = x.isNull() ? nullptr : x.getFunc().c_str(); break; case Type::anyref: case Type::eqref: assert(x.isNull() && "unexpected non-null reference type literal"); break; case Type::i31ref: WASM_UNREACHABLE("TODO: i31ref"); case Type::dataref: WASM_UNREACHABLE("TODO: dataref"); case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } return ret; } Literal fromBinaryenLiteral(BinaryenLiteral x) { switch (x.type) { case Type::i32: return Literal(x.i32); case Type::i64: return Literal(x.i64); case Type::f32: return Literal(x.i32).castToF32(); case Type::f64: return Literal(x.i64).castToF64(); case Type::v128: return Literal(x.v128); case Type::funcref: return Literal::makeFunc(x.func); case Type::anyref: case Type::eqref: return Literal::makeNull(Type(x.type)); case Type::i31ref: WASM_UNREACHABLE("TODO: i31ref"); case Type::dataref: WASM_UNREACHABLE("TODO: dataref"); case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("invalid type"); } // Mutexes (global for now; in theory if multiple modules // are used at once this should be optimized to be per- // module, but likely it doesn't matter) static std::mutex BinaryenFunctionMutex; // Optimization options static PassOptions globalPassOptions = PassOptions::getWithDefaultOptimizationOptions(); extern "C" { // // ========== Module Creation ========== // // Core types // TODO: Deprecate BinaryenTypeExternref? BinaryenType BinaryenTypeNone(void) { return Type::none; } BinaryenType BinaryenTypeInt32(void) { return Type::i32; } BinaryenType BinaryenTypeInt64(void) { return Type::i64; } BinaryenType BinaryenTypeFloat32(void) { return Type::f32; } BinaryenType BinaryenTypeFloat64(void) { return Type::f64; } BinaryenType BinaryenTypeVec128(void) { return Type::v128; } BinaryenType BinaryenTypeFuncref(void) { return Type::funcref; } BinaryenType BinaryenTypeExternref(void) { return Type::anyref; } BinaryenType BinaryenTypeAnyref(void) { return Type::anyref; } BinaryenType BinaryenTypeEqref(void) { return Type::eqref; } BinaryenType BinaryenTypeI31ref(void) { return Type::i31ref; } BinaryenType BinaryenTypeDataref(void) { return Type::dataref; } BinaryenType BinaryenTypeUnreachable(void) { return Type::unreachable; } BinaryenType BinaryenTypeAuto(void) { return uintptr_t(-1); } BinaryenType BinaryenTypeCreate(BinaryenType* types, BinaryenIndex numTypes) { std::vector typeVec; typeVec.reserve(numTypes); for (BinaryenIndex i = 0; i < numTypes; ++i) { typeVec.push_back(Type(types[i])); } return Type(typeVec).getID(); } uint32_t BinaryenTypeArity(BinaryenType t) { return Type(t).size(); } void BinaryenTypeExpand(BinaryenType t, BinaryenType* buf) { Type types(t); size_t i = 0; for (const auto& type : types) { buf[i++] = type.getID(); } } WASM_DEPRECATED BinaryenType BinaryenNone(void) { return Type::none; } WASM_DEPRECATED BinaryenType BinaryenInt32(void) { return Type::i32; } WASM_DEPRECATED BinaryenType BinaryenInt64(void) { return Type::i64; } WASM_DEPRECATED BinaryenType BinaryenFloat32(void) { return Type::f32; } WASM_DEPRECATED BinaryenType BinaryenFloat64(void) { return Type::f64; } WASM_DEPRECATED BinaryenType BinaryenUndefined(void) { return uint32_t(-1); } // Expression ids BinaryenExpressionId BinaryenInvalidId(void) { return Expression::Id::InvalidId; } #define DELEGATE(CLASS_TO_VISIT) \ BinaryenExpressionId Binaryen##CLASS_TO_VISIT##Id(void) { \ return Expression::Id::CLASS_TO_VISIT##Id; \ } #include "wasm-delegations.def" // External kinds BinaryenExternalKind BinaryenExternalFunction(void) { return static_cast(ExternalKind::Function); } BinaryenExternalKind BinaryenExternalTable(void) { return static_cast(ExternalKind::Table); } BinaryenExternalKind BinaryenExternalMemory(void) { return static_cast(ExternalKind::Memory); } BinaryenExternalKind BinaryenExternalGlobal(void) { return static_cast(ExternalKind::Global); } BinaryenExternalKind BinaryenExternalTag(void) { return static_cast(ExternalKind::Tag); } // Features BinaryenFeatures BinaryenFeatureMVP(void) { return static_cast(FeatureSet::MVP); } BinaryenFeatures BinaryenFeatureAtomics(void) { return static_cast(FeatureSet::Atomics); } BinaryenFeatures BinaryenFeatureBulkMemory(void) { return static_cast(FeatureSet::BulkMemory); } BinaryenFeatures BinaryenFeatureMutableGlobals(void) { return static_cast(FeatureSet::MutableGlobals); } BinaryenFeatures BinaryenFeatureNontrappingFPToInt(void) { return static_cast(FeatureSet::TruncSat); } BinaryenFeatures BinaryenFeatureSignExt(void) { return static_cast(FeatureSet::SignExt); } BinaryenFeatures BinaryenFeatureSIMD128(void) { return static_cast(FeatureSet::SIMD); } BinaryenFeatures BinaryenFeatureExceptionHandling(void) { return static_cast(FeatureSet::ExceptionHandling); } BinaryenFeatures BinaryenFeatureTailCall(void) { return static_cast(FeatureSet::TailCall); } BinaryenFeatures BinaryenFeatureReferenceTypes(void) { return static_cast(FeatureSet::ReferenceTypes); } BinaryenFeatures BinaryenFeatureMultivalue(void) { return static_cast(FeatureSet::Multivalue); } BinaryenFeatures BinaryenFeatureGC(void) { return static_cast(FeatureSet::GC); } BinaryenFeatures BinaryenFeatureMemory64(void) { return static_cast(FeatureSet::Memory64); } BinaryenFeatures BinaryenFeatureTypedFunctionReferences(void) { return static_cast(FeatureSet::TypedFunctionReferences); } BinaryenFeatures BinaryenFeatureRelaxedSIMD(void) { return static_cast(FeatureSet::RelaxedSIMD); } BinaryenFeatures BinaryenFeatureExtendedConst(void) { return static_cast(FeatureSet::ExtendedConst); } BinaryenFeatures BinaryenFeatureAll(void) { return static_cast(FeatureSet::All); } // Modules BinaryenModuleRef BinaryenModuleCreate(void) { return new Module(); } void BinaryenModuleDispose(BinaryenModuleRef module) { delete (Module*)module; } // Literals BinaryenLiteral BinaryenLiteralInt32(int32_t x) { return toBinaryenLiteral(Literal(x)); } BinaryenLiteral BinaryenLiteralInt64(int64_t x) { return toBinaryenLiteral(Literal(x)); } BinaryenLiteral BinaryenLiteralFloat32(float x) { return toBinaryenLiteral(Literal(x)); } BinaryenLiteral BinaryenLiteralFloat64(double x) { return toBinaryenLiteral(Literal(x)); } BinaryenLiteral BinaryenLiteralVec128(const uint8_t x[16]) { return toBinaryenLiteral(Literal(x)); } BinaryenLiteral BinaryenLiteralFloat32Bits(int32_t x) { return toBinaryenLiteral(Literal(x).castToF32()); } BinaryenLiteral BinaryenLiteralFloat64Bits(int64_t x) { return toBinaryenLiteral(Literal(x).castToF64()); } // Expressions BinaryenOp BinaryenClzInt32(void) { return ClzInt32; } BinaryenOp BinaryenCtzInt32(void) { return CtzInt32; } BinaryenOp BinaryenPopcntInt32(void) { return PopcntInt32; } BinaryenOp BinaryenNegFloat32(void) { return NegFloat32; } BinaryenOp BinaryenAbsFloat32(void) { return AbsFloat32; } BinaryenOp BinaryenCeilFloat32(void) { return CeilFloat32; } BinaryenOp BinaryenFloorFloat32(void) { return FloorFloat32; } BinaryenOp BinaryenTruncFloat32(void) { return TruncFloat32; } BinaryenOp BinaryenNearestFloat32(void) { return NearestFloat32; } BinaryenOp BinaryenSqrtFloat32(void) { return SqrtFloat32; } BinaryenOp BinaryenEqZInt32(void) { return EqZInt32; } BinaryenOp BinaryenClzInt64(void) { return ClzInt64; } BinaryenOp BinaryenCtzInt64(void) { return CtzInt64; } BinaryenOp BinaryenPopcntInt64(void) { return PopcntInt64; } BinaryenOp BinaryenNegFloat64(void) { return NegFloat64; } BinaryenOp BinaryenAbsFloat64(void) { return AbsFloat64; } BinaryenOp BinaryenCeilFloat64(void) { return CeilFloat64; } BinaryenOp BinaryenFloorFloat64(void) { return FloorFloat64; } BinaryenOp BinaryenTruncFloat64(void) { return TruncFloat64; } BinaryenOp BinaryenNearestFloat64(void) { return NearestFloat64; } BinaryenOp BinaryenSqrtFloat64(void) { return SqrtFloat64; } BinaryenOp BinaryenEqZInt64(void) { return EqZInt64; } BinaryenOp BinaryenExtendSInt32(void) { return ExtendSInt32; } BinaryenOp BinaryenExtendUInt32(void) { return ExtendUInt32; } BinaryenOp BinaryenWrapInt64(void) { return WrapInt64; } BinaryenOp BinaryenTruncSFloat32ToInt32(void) { return TruncSFloat32ToInt32; } BinaryenOp BinaryenTruncSFloat32ToInt64(void) { return TruncSFloat32ToInt64; } BinaryenOp BinaryenTruncUFloat32ToInt32(void) { return TruncUFloat32ToInt32; } BinaryenOp BinaryenTruncUFloat32ToInt64(void) { return TruncUFloat32ToInt64; } BinaryenOp BinaryenTruncSFloat64ToInt32(void) { return TruncSFloat64ToInt32; } BinaryenOp BinaryenTruncSFloat64ToInt64(void) { return TruncSFloat64ToInt64; } BinaryenOp BinaryenTruncUFloat64ToInt32(void) { return TruncUFloat64ToInt32; } BinaryenOp BinaryenTruncUFloat64ToInt64(void) { return TruncUFloat64ToInt64; } BinaryenOp BinaryenReinterpretFloat32(void) { return ReinterpretFloat32; } BinaryenOp BinaryenReinterpretFloat64(void) { return ReinterpretFloat64; } BinaryenOp BinaryenExtendS8Int32(void) { return ExtendS8Int32; } BinaryenOp BinaryenExtendS16Int32(void) { return ExtendS16Int32; } BinaryenOp BinaryenExtendS8Int64(void) { return ExtendS8Int64; } BinaryenOp BinaryenExtendS16Int64(void) { return ExtendS16Int64; } BinaryenOp BinaryenExtendS32Int64(void) { return ExtendS32Int64; } BinaryenOp BinaryenConvertSInt32ToFloat32(void) { return ConvertSInt32ToFloat32; } BinaryenOp BinaryenConvertSInt32ToFloat64(void) { return ConvertSInt32ToFloat64; } BinaryenOp BinaryenConvertUInt32ToFloat32(void) { return ConvertUInt32ToFloat32; } BinaryenOp BinaryenConvertUInt32ToFloat64(void) { return ConvertUInt32ToFloat64; } BinaryenOp BinaryenConvertSInt64ToFloat32(void) { return ConvertSInt64ToFloat32; } BinaryenOp BinaryenConvertSInt64ToFloat64(void) { return ConvertSInt64ToFloat64; } BinaryenOp BinaryenConvertUInt64ToFloat32(void) { return ConvertUInt64ToFloat32; } BinaryenOp BinaryenConvertUInt64ToFloat64(void) { return ConvertUInt64ToFloat64; } BinaryenOp BinaryenPromoteFloat32(void) { return PromoteFloat32; } BinaryenOp BinaryenDemoteFloat64(void) { return DemoteFloat64; } BinaryenOp BinaryenReinterpretInt32(void) { return ReinterpretInt32; } BinaryenOp BinaryenReinterpretInt64(void) { return ReinterpretInt64; } BinaryenOp BinaryenAddInt32(void) { return AddInt32; } BinaryenOp BinaryenSubInt32(void) { return SubInt32; } BinaryenOp BinaryenMulInt32(void) { return MulInt32; } BinaryenOp BinaryenDivSInt32(void) { return DivSInt32; } BinaryenOp BinaryenDivUInt32(void) { return DivUInt32; } BinaryenOp BinaryenRemSInt32(void) { return RemSInt32; } BinaryenOp BinaryenRemUInt32(void) { return RemUInt32; } BinaryenOp BinaryenAndInt32(void) { return AndInt32; } BinaryenOp BinaryenOrInt32(void) { return OrInt32; } BinaryenOp BinaryenXorInt32(void) { return XorInt32; } BinaryenOp BinaryenShlInt32(void) { return ShlInt32; } BinaryenOp BinaryenShrUInt32(void) { return ShrUInt32; } BinaryenOp BinaryenShrSInt32(void) { return ShrSInt32; } BinaryenOp BinaryenRotLInt32(void) { return RotLInt32; } BinaryenOp BinaryenRotRInt32(void) { return RotRInt32; } BinaryenOp BinaryenEqInt32(void) { return EqInt32; } BinaryenOp BinaryenNeInt32(void) { return NeInt32; } BinaryenOp BinaryenLtSInt32(void) { return LtSInt32; } BinaryenOp BinaryenLtUInt32(void) { return LtUInt32; } BinaryenOp BinaryenLeSInt32(void) { return LeSInt32; } BinaryenOp BinaryenLeUInt32(void) { return LeUInt32; } BinaryenOp BinaryenGtSInt32(void) { return GtSInt32; } BinaryenOp BinaryenGtUInt32(void) { return GtUInt32; } BinaryenOp BinaryenGeSInt32(void) { return GeSInt32; } BinaryenOp BinaryenGeUInt32(void) { return GeUInt32; } BinaryenOp BinaryenAddInt64(void) { return AddInt64; } BinaryenOp BinaryenSubInt64(void) { return SubInt64; } BinaryenOp BinaryenMulInt64(void) { return MulInt64; } BinaryenOp BinaryenDivSInt64(void) { return DivSInt64; } BinaryenOp BinaryenDivUInt64(void) { return DivUInt64; } BinaryenOp BinaryenRemSInt64(void) { return RemSInt64; } BinaryenOp BinaryenRemUInt64(void) { return RemUInt64; } BinaryenOp BinaryenAndInt64(void) { return AndInt64; } BinaryenOp BinaryenOrInt64(void) { return OrInt64; } BinaryenOp BinaryenXorInt64(void) { return XorInt64; } BinaryenOp BinaryenShlInt64(void) { return ShlInt64; } BinaryenOp BinaryenShrUInt64(void) { return ShrUInt64; } BinaryenOp BinaryenShrSInt64(void) { return ShrSInt64; } BinaryenOp BinaryenRotLInt64(void) { return RotLInt64; } BinaryenOp BinaryenRotRInt64(void) { return RotRInt64; } BinaryenOp BinaryenEqInt64(void) { return EqInt64; } BinaryenOp BinaryenNeInt64(void) { return NeInt64; } BinaryenOp BinaryenLtSInt64(void) { return LtSInt64; } BinaryenOp BinaryenLtUInt64(void) { return LtUInt64; } BinaryenOp BinaryenLeSInt64(void) { return LeSInt64; } BinaryenOp BinaryenLeUInt64(void) { return LeUInt64; } BinaryenOp BinaryenGtSInt64(void) { return GtSInt64; } BinaryenOp BinaryenGtUInt64(void) { return GtUInt64; } BinaryenOp BinaryenGeSInt64(void) { return GeSInt64; } BinaryenOp BinaryenGeUInt64(void) { return GeUInt64; } BinaryenOp BinaryenAddFloat32(void) { return AddFloat32; } BinaryenOp BinaryenSubFloat32(void) { return SubFloat32; } BinaryenOp BinaryenMulFloat32(void) { return MulFloat32; } BinaryenOp BinaryenDivFloat32(void) { return DivFloat32; } BinaryenOp BinaryenCopySignFloat32(void) { return CopySignFloat32; } BinaryenOp BinaryenMinFloat32(void) { return MinFloat32; } BinaryenOp BinaryenMaxFloat32(void) { return MaxFloat32; } BinaryenOp BinaryenEqFloat32(void) { return EqFloat32; } BinaryenOp BinaryenNeFloat32(void) { return NeFloat32; } BinaryenOp BinaryenLtFloat32(void) { return LtFloat32; } BinaryenOp BinaryenLeFloat32(void) { return LeFloat32; } BinaryenOp BinaryenGtFloat32(void) { return GtFloat32; } BinaryenOp BinaryenGeFloat32(void) { return GeFloat32; } BinaryenOp BinaryenAddFloat64(void) { return AddFloat64; } BinaryenOp BinaryenSubFloat64(void) { return SubFloat64; } BinaryenOp BinaryenMulFloat64(void) { return MulFloat64; } BinaryenOp BinaryenDivFloat64(void) { return DivFloat64; } BinaryenOp BinaryenCopySignFloat64(void) { return CopySignFloat64; } BinaryenOp BinaryenMinFloat64(void) { return MinFloat64; } BinaryenOp BinaryenMaxFloat64(void) { return MaxFloat64; } BinaryenOp BinaryenEqFloat64(void) { return EqFloat64; } BinaryenOp BinaryenNeFloat64(void) { return NeFloat64; } BinaryenOp BinaryenLtFloat64(void) { return LtFloat64; } BinaryenOp BinaryenLeFloat64(void) { return LeFloat64; } BinaryenOp BinaryenGtFloat64(void) { return GtFloat64; } BinaryenOp BinaryenGeFloat64(void) { return GeFloat64; } BinaryenOp BinaryenAtomicRMWAdd(void) { return RMWAdd; } BinaryenOp BinaryenAtomicRMWSub(void) { return RMWSub; } BinaryenOp BinaryenAtomicRMWAnd(void) { return RMWAnd; } BinaryenOp BinaryenAtomicRMWOr(void) { return RMWOr; } BinaryenOp BinaryenAtomicRMWXor(void) { return RMWXor; } BinaryenOp BinaryenAtomicRMWXchg(void) { return RMWXchg; } BinaryenOp BinaryenTruncSatSFloat32ToInt32(void) { return TruncSatSFloat32ToInt32; } BinaryenOp BinaryenTruncSatSFloat32ToInt64(void) { return TruncSatSFloat32ToInt64; } BinaryenOp BinaryenTruncSatUFloat32ToInt32(void) { return TruncSatUFloat32ToInt32; } BinaryenOp BinaryenTruncSatUFloat32ToInt64(void) { return TruncSatUFloat32ToInt64; } BinaryenOp BinaryenTruncSatSFloat64ToInt32(void) { return TruncSatSFloat64ToInt32; } BinaryenOp BinaryenTruncSatSFloat64ToInt64(void) { return TruncSatSFloat64ToInt64; } BinaryenOp BinaryenTruncSatUFloat64ToInt32(void) { return TruncSatUFloat64ToInt32; } BinaryenOp BinaryenTruncSatUFloat64ToInt64(void) { return TruncSatUFloat64ToInt64; } BinaryenOp BinaryenSplatVecI8x16(void) { return SplatVecI8x16; } BinaryenOp BinaryenExtractLaneSVecI8x16(void) { return ExtractLaneSVecI8x16; } BinaryenOp BinaryenExtractLaneUVecI8x16(void) { return ExtractLaneUVecI8x16; } BinaryenOp BinaryenReplaceLaneVecI8x16(void) { return ReplaceLaneVecI8x16; } BinaryenOp BinaryenSplatVecI16x8(void) { return SplatVecI16x8; } BinaryenOp BinaryenExtractLaneSVecI16x8(void) { return ExtractLaneSVecI16x8; } BinaryenOp BinaryenExtractLaneUVecI16x8(void) { return ExtractLaneUVecI16x8; } BinaryenOp BinaryenReplaceLaneVecI16x8(void) { return ReplaceLaneVecI16x8; } BinaryenOp BinaryenSplatVecI32x4(void) { return SplatVecI32x4; } BinaryenOp BinaryenExtractLaneVecI32x4(void) { return ExtractLaneVecI32x4; } BinaryenOp BinaryenReplaceLaneVecI32x4(void) { return ReplaceLaneVecI32x4; } BinaryenOp BinaryenSplatVecI64x2(void) { return SplatVecI64x2; } BinaryenOp BinaryenExtractLaneVecI64x2(void) { return ExtractLaneVecI64x2; } BinaryenOp BinaryenReplaceLaneVecI64x2(void) { return ReplaceLaneVecI64x2; } BinaryenOp BinaryenSplatVecF32x4(void) { return SplatVecF32x4; } BinaryenOp BinaryenExtractLaneVecF32x4(void) { return ExtractLaneVecF32x4; } BinaryenOp BinaryenReplaceLaneVecF32x4(void) { return ReplaceLaneVecF32x4; } BinaryenOp BinaryenSplatVecF64x2(void) { return SplatVecF64x2; } BinaryenOp BinaryenExtractLaneVecF64x2(void) { return ExtractLaneVecF64x2; } BinaryenOp BinaryenReplaceLaneVecF64x2(void) { return ReplaceLaneVecF64x2; } BinaryenOp BinaryenEqVecI8x16(void) { return EqVecI8x16; } BinaryenOp BinaryenNeVecI8x16(void) { return NeVecI8x16; } BinaryenOp BinaryenLtSVecI8x16(void) { return LtSVecI8x16; } BinaryenOp BinaryenLtUVecI8x16(void) { return LtUVecI8x16; } BinaryenOp BinaryenGtSVecI8x16(void) { return GtSVecI8x16; } BinaryenOp BinaryenGtUVecI8x16(void) { return GtUVecI8x16; } BinaryenOp BinaryenLeSVecI8x16(void) { return LeSVecI8x16; } BinaryenOp BinaryenLeUVecI8x16(void) { return LeUVecI8x16; } BinaryenOp BinaryenGeSVecI8x16(void) { return GeSVecI8x16; } BinaryenOp BinaryenGeUVecI8x16(void) { return GeUVecI8x16; } BinaryenOp BinaryenEqVecI16x8(void) { return EqVecI16x8; } BinaryenOp BinaryenNeVecI16x8(void) { return NeVecI16x8; } BinaryenOp BinaryenLtSVecI16x8(void) { return LtSVecI16x8; } BinaryenOp BinaryenLtUVecI16x8(void) { return LtUVecI16x8; } BinaryenOp BinaryenGtSVecI16x8(void) { return GtSVecI16x8; } BinaryenOp BinaryenGtUVecI16x8(void) { return GtUVecI16x8; } BinaryenOp BinaryenLeSVecI16x8(void) { return LeSVecI16x8; } BinaryenOp BinaryenLeUVecI16x8(void) { return LeUVecI16x8; } BinaryenOp BinaryenGeSVecI16x8(void) { return GeSVecI16x8; } BinaryenOp BinaryenGeUVecI16x8(void) { return GeUVecI16x8; } BinaryenOp BinaryenEqVecI32x4(void) { return EqVecI32x4; } BinaryenOp BinaryenNeVecI32x4(void) { return NeVecI32x4; } BinaryenOp BinaryenLtSVecI32x4(void) { return LtSVecI32x4; } BinaryenOp BinaryenLtUVecI32x4(void) { return LtUVecI32x4; } BinaryenOp BinaryenGtSVecI32x4(void) { return GtSVecI32x4; } BinaryenOp BinaryenGtUVecI32x4(void) { return GtUVecI32x4; } BinaryenOp BinaryenLeSVecI32x4(void) { return LeSVecI32x4; } BinaryenOp BinaryenLeUVecI32x4(void) { return LeUVecI32x4; } BinaryenOp BinaryenGeSVecI32x4(void) { return GeSVecI32x4; } BinaryenOp BinaryenGeUVecI32x4(void) { return GeUVecI32x4; } BinaryenOp BinaryenEqVecI64x2(void) { return EqVecI64x2; } BinaryenOp BinaryenNeVecI64x2(void) { return NeVecI64x2; } BinaryenOp BinaryenLtSVecI64x2(void) { return LtSVecI64x2; } BinaryenOp BinaryenGtSVecI64x2(void) { return GtSVecI64x2; } BinaryenOp BinaryenLeSVecI64x2(void) { return LeSVecI64x2; } BinaryenOp BinaryenGeSVecI64x2(void) { return GeSVecI64x2; } BinaryenOp BinaryenEqVecF32x4(void) { return EqVecF32x4; } BinaryenOp BinaryenNeVecF32x4(void) { return NeVecF32x4; } BinaryenOp BinaryenLtVecF32x4(void) { return LtVecF32x4; } BinaryenOp BinaryenGtVecF32x4(void) { return GtVecF32x4; } BinaryenOp BinaryenLeVecF32x4(void) { return LeVecF32x4; } BinaryenOp BinaryenGeVecF32x4(void) { return GeVecF32x4; } BinaryenOp BinaryenEqVecF64x2(void) { return EqVecF64x2; } BinaryenOp BinaryenNeVecF64x2(void) { return NeVecF64x2; } BinaryenOp BinaryenLtVecF64x2(void) { return LtVecF64x2; } BinaryenOp BinaryenGtVecF64x2(void) { return GtVecF64x2; } BinaryenOp BinaryenLeVecF64x2(void) { return LeVecF64x2; } BinaryenOp BinaryenGeVecF64x2(void) { return GeVecF64x2; } BinaryenOp BinaryenNotVec128(void) { return NotVec128; } BinaryenOp BinaryenAndVec128(void) { return AndVec128; } BinaryenOp BinaryenOrVec128(void) { return OrVec128; } BinaryenOp BinaryenXorVec128(void) { return XorVec128; } BinaryenOp BinaryenAndNotVec128(void) { return AndNotVec128; } BinaryenOp BinaryenBitselectVec128(void) { return Bitselect; } BinaryenOp BinaryenAnyTrueVec128(void) { return AnyTrueVec128; } BinaryenOp BinaryenAbsVecI8x16(void) { return AbsVecI8x16; } BinaryenOp BinaryenNegVecI8x16(void) { return NegVecI8x16; } BinaryenOp BinaryenAllTrueVecI8x16(void) { return AllTrueVecI8x16; } BinaryenOp BinaryenBitmaskVecI8x16(void) { return BitmaskVecI8x16; } BinaryenOp BinaryenPopcntVecI8x16(void) { return PopcntVecI8x16; } BinaryenOp BinaryenShlVecI8x16(void) { return ShlVecI8x16; } BinaryenOp BinaryenShrSVecI8x16(void) { return ShrSVecI8x16; } BinaryenOp BinaryenShrUVecI8x16(void) { return ShrUVecI8x16; } BinaryenOp BinaryenAddVecI8x16(void) { return AddVecI8x16; } BinaryenOp BinaryenAddSatSVecI8x16(void) { return AddSatSVecI8x16; } BinaryenOp BinaryenAddSatUVecI8x16(void) { return AddSatUVecI8x16; } BinaryenOp BinaryenSubVecI8x16(void) { return SubVecI8x16; } BinaryenOp BinaryenSubSatSVecI8x16(void) { return SubSatSVecI8x16; } BinaryenOp BinaryenSubSatUVecI8x16(void) { return SubSatUVecI8x16; } BinaryenOp BinaryenMinSVecI8x16(void) { return MinSVecI8x16; } BinaryenOp BinaryenMinUVecI8x16(void) { return MinUVecI8x16; } BinaryenOp BinaryenMaxSVecI8x16(void) { return MaxSVecI8x16; } BinaryenOp BinaryenMaxUVecI8x16(void) { return MaxUVecI8x16; } BinaryenOp BinaryenAvgrUVecI8x16(void) { return AvgrUVecI8x16; } BinaryenOp BinaryenAbsVecI16x8(void) { return AbsVecI16x8; } BinaryenOp BinaryenNegVecI16x8(void) { return NegVecI16x8; } BinaryenOp BinaryenAllTrueVecI16x8(void) { return AllTrueVecI16x8; } BinaryenOp BinaryenBitmaskVecI16x8(void) { return BitmaskVecI16x8; } BinaryenOp BinaryenShlVecI16x8(void) { return ShlVecI16x8; } BinaryenOp BinaryenShrSVecI16x8(void) { return ShrSVecI16x8; } BinaryenOp BinaryenShrUVecI16x8(void) { return ShrUVecI16x8; } BinaryenOp BinaryenAddVecI16x8(void) { return AddVecI16x8; } BinaryenOp BinaryenAddSatSVecI16x8(void) { return AddSatSVecI16x8; } BinaryenOp BinaryenAddSatUVecI16x8(void) { return AddSatUVecI16x8; } BinaryenOp BinaryenSubVecI16x8(void) { return SubVecI16x8; } BinaryenOp BinaryenSubSatSVecI16x8(void) { return SubSatSVecI16x8; } BinaryenOp BinaryenSubSatUVecI16x8(void) { return SubSatUVecI16x8; } BinaryenOp BinaryenMulVecI16x8(void) { return MulVecI16x8; } BinaryenOp BinaryenMinSVecI16x8(void) { return MinSVecI16x8; } BinaryenOp BinaryenMinUVecI16x8(void) { return MinUVecI16x8; } BinaryenOp BinaryenMaxSVecI16x8(void) { return MaxSVecI16x8; } BinaryenOp BinaryenMaxUVecI16x8(void) { return MaxUVecI16x8; } BinaryenOp BinaryenAvgrUVecI16x8(void) { return AvgrUVecI16x8; } BinaryenOp BinaryenQ15MulrSatSVecI16x8(void) { return Q15MulrSatSVecI16x8; } BinaryenOp BinaryenExtMulLowSVecI16x8(void) { return ExtMulLowSVecI16x8; } BinaryenOp BinaryenExtMulHighSVecI16x8(void) { return ExtMulHighSVecI16x8; } BinaryenOp BinaryenExtMulLowUVecI16x8(void) { return ExtMulLowUVecI16x8; } BinaryenOp BinaryenExtMulHighUVecI16x8(void) { return ExtMulHighUVecI16x8; } BinaryenOp BinaryenAbsVecI32x4(void) { return AbsVecI32x4; } BinaryenOp BinaryenNegVecI32x4(void) { return NegVecI32x4; } BinaryenOp BinaryenAllTrueVecI32x4(void) { return AllTrueVecI32x4; } BinaryenOp BinaryenBitmaskVecI32x4(void) { return BitmaskVecI32x4; } BinaryenOp BinaryenShlVecI32x4(void) { return ShlVecI32x4; } BinaryenOp BinaryenShrSVecI32x4(void) { return ShrSVecI32x4; } BinaryenOp BinaryenShrUVecI32x4(void) { return ShrUVecI32x4; } BinaryenOp BinaryenAddVecI32x4(void) { return AddVecI32x4; } BinaryenOp BinaryenSubVecI32x4(void) { return SubVecI32x4; } BinaryenOp BinaryenMulVecI32x4(void) { return MulVecI32x4; } BinaryenOp BinaryenMinSVecI32x4(void) { return MinSVecI32x4; } BinaryenOp BinaryenMinUVecI32x4(void) { return MinUVecI32x4; } BinaryenOp BinaryenMaxSVecI32x4(void) { return MaxSVecI32x4; } BinaryenOp BinaryenMaxUVecI32x4(void) { return MaxUVecI32x4; } BinaryenOp BinaryenDotSVecI16x8ToVecI32x4(void) { return DotSVecI16x8ToVecI32x4; } BinaryenOp BinaryenExtMulLowSVecI32x4(void) { return ExtMulLowSVecI32x4; } BinaryenOp BinaryenExtMulHighSVecI32x4(void) { return ExtMulHighSVecI32x4; } BinaryenOp BinaryenExtMulLowUVecI32x4(void) { return ExtMulLowUVecI32x4; } BinaryenOp BinaryenExtMulHighUVecI32x4(void) { return ExtMulHighUVecI32x4; } BinaryenOp BinaryenAbsVecI64x2(void) { return AbsVecI64x2; } BinaryenOp BinaryenNegVecI64x2(void) { return NegVecI64x2; } BinaryenOp BinaryenAllTrueVecI64x2(void) { return AllTrueVecI64x2; } BinaryenOp BinaryenBitmaskVecI64x2(void) { return BitmaskVecI64x2; } BinaryenOp BinaryenShlVecI64x2(void) { return ShlVecI64x2; } BinaryenOp BinaryenShrSVecI64x2(void) { return ShrSVecI64x2; } BinaryenOp BinaryenShrUVecI64x2(void) { return ShrUVecI64x2; } BinaryenOp BinaryenAddVecI64x2(void) { return AddVecI64x2; } BinaryenOp BinaryenSubVecI64x2(void) { return SubVecI64x2; } BinaryenOp BinaryenMulVecI64x2(void) { return MulVecI64x2; } BinaryenOp BinaryenExtMulLowSVecI64x2(void) { return ExtMulLowSVecI64x2; } BinaryenOp BinaryenExtMulHighSVecI64x2(void) { return ExtMulHighSVecI64x2; } BinaryenOp BinaryenExtMulLowUVecI64x2(void) { return ExtMulLowUVecI64x2; } BinaryenOp BinaryenExtMulHighUVecI64x2(void) { return ExtMulHighUVecI64x2; } BinaryenOp BinaryenAbsVecF32x4(void) { return AbsVecF32x4; } BinaryenOp BinaryenNegVecF32x4(void) { return NegVecF32x4; } BinaryenOp BinaryenSqrtVecF32x4(void) { return SqrtVecF32x4; } BinaryenOp BinaryenAddVecF32x4(void) { return AddVecF32x4; } BinaryenOp BinaryenSubVecF32x4(void) { return SubVecF32x4; } BinaryenOp BinaryenMulVecF32x4(void) { return MulVecF32x4; } BinaryenOp BinaryenDivVecF32x4(void) { return DivVecF32x4; } BinaryenOp BinaryenMinVecF32x4(void) { return MinVecF32x4; } BinaryenOp BinaryenMaxVecF32x4(void) { return MaxVecF32x4; } BinaryenOp BinaryenPMinVecF32x4(void) { return PMinVecF32x4; } BinaryenOp BinaryenCeilVecF32x4(void) { return CeilVecF32x4; } BinaryenOp BinaryenFloorVecF32x4(void) { return FloorVecF32x4; } BinaryenOp BinaryenTruncVecF32x4(void) { return TruncVecF32x4; } BinaryenOp BinaryenNearestVecF32x4(void) { return NearestVecF32x4; } BinaryenOp BinaryenPMaxVecF32x4(void) { return PMaxVecF32x4; } BinaryenOp BinaryenAbsVecF64x2(void) { return AbsVecF64x2; } BinaryenOp BinaryenNegVecF64x2(void) { return NegVecF64x2; } BinaryenOp BinaryenSqrtVecF64x2(void) { return SqrtVecF64x2; } BinaryenOp BinaryenAddVecF64x2(void) { return AddVecF64x2; } BinaryenOp BinaryenSubVecF64x2(void) { return SubVecF64x2; } BinaryenOp BinaryenMulVecF64x2(void) { return MulVecF64x2; } BinaryenOp BinaryenDivVecF64x2(void) { return DivVecF64x2; } BinaryenOp BinaryenMinVecF64x2(void) { return MinVecF64x2; } BinaryenOp BinaryenMaxVecF64x2(void) { return MaxVecF64x2; } BinaryenOp BinaryenPMinVecF64x2(void) { return PMinVecF64x2; } BinaryenOp BinaryenPMaxVecF64x2(void) { return PMaxVecF64x2; } BinaryenOp BinaryenCeilVecF64x2(void) { return CeilVecF64x2; } BinaryenOp BinaryenFloorVecF64x2(void) { return FloorVecF64x2; } BinaryenOp BinaryenTruncVecF64x2(void) { return TruncVecF64x2; } BinaryenOp BinaryenNearestVecF64x2(void) { return NearestVecF64x2; } BinaryenOp BinaryenExtAddPairwiseSVecI8x16ToI16x8(void) { return ExtAddPairwiseSVecI8x16ToI16x8; } BinaryenOp BinaryenExtAddPairwiseUVecI8x16ToI16x8(void) { return ExtAddPairwiseUVecI8x16ToI16x8; } BinaryenOp BinaryenExtAddPairwiseSVecI16x8ToI32x4(void) { return ExtAddPairwiseSVecI16x8ToI32x4; } BinaryenOp BinaryenExtAddPairwiseUVecI16x8ToI32x4(void) { return ExtAddPairwiseUVecI16x8ToI32x4; } BinaryenOp BinaryenTruncSatSVecF32x4ToVecI32x4(void) { return TruncSatSVecF32x4ToVecI32x4; } BinaryenOp BinaryenTruncSatUVecF32x4ToVecI32x4(void) { return TruncSatUVecF32x4ToVecI32x4; } BinaryenOp BinaryenConvertSVecI32x4ToVecF32x4(void) { return ConvertSVecI32x4ToVecF32x4; } BinaryenOp BinaryenConvertUVecI32x4ToVecF32x4(void) { return ConvertUVecI32x4ToVecF32x4; } BinaryenOp BinaryenLoad8SplatVec128(void) { return Load8SplatVec128; } BinaryenOp BinaryenLoad16SplatVec128(void) { return Load16SplatVec128; } BinaryenOp BinaryenLoad32SplatVec128(void) { return Load32SplatVec128; } BinaryenOp BinaryenLoad64SplatVec128(void) { return Load64SplatVec128; } BinaryenOp BinaryenLoad8x8SVec128(void) { return Load8x8SVec128; } BinaryenOp BinaryenLoad8x8UVec128(void) { return Load8x8UVec128; } BinaryenOp BinaryenLoad16x4SVec128(void) { return Load16x4SVec128; } BinaryenOp BinaryenLoad16x4UVec128(void) { return Load16x4UVec128; } BinaryenOp BinaryenLoad32x2SVec128(void) { return Load32x2SVec128; } BinaryenOp BinaryenLoad32x2UVec128(void) { return Load32x2UVec128; } BinaryenOp BinaryenLoad32ZeroVec128(void) { return Load32ZeroVec128; } BinaryenOp BinaryenLoad64ZeroVec128(void) { return Load64ZeroVec128; } BinaryenOp BinaryenLoad8LaneVec128(void) { return Load8LaneVec128; } BinaryenOp BinaryenLoad16LaneVec128(void) { return Load16LaneVec128; } BinaryenOp BinaryenLoad32LaneVec128(void) { return Load32LaneVec128; } BinaryenOp BinaryenLoad64LaneVec128(void) { return Load64LaneVec128; } BinaryenOp BinaryenStore8LaneVec128(void) { return Store8LaneVec128; } BinaryenOp BinaryenStore16LaneVec128(void) { return Store16LaneVec128; } BinaryenOp BinaryenStore32LaneVec128(void) { return Store32LaneVec128; } BinaryenOp BinaryenStore64LaneVec128(void) { return Store64LaneVec128; } BinaryenOp BinaryenNarrowSVecI16x8ToVecI8x16(void) { return NarrowSVecI16x8ToVecI8x16; } BinaryenOp BinaryenNarrowUVecI16x8ToVecI8x16(void) { return NarrowUVecI16x8ToVecI8x16; } BinaryenOp BinaryenNarrowSVecI32x4ToVecI16x8(void) { return NarrowSVecI32x4ToVecI16x8; } BinaryenOp BinaryenNarrowUVecI32x4ToVecI16x8(void) { return NarrowUVecI32x4ToVecI16x8; } BinaryenOp BinaryenExtendLowSVecI8x16ToVecI16x8(void) { return ExtendLowSVecI8x16ToVecI16x8; } BinaryenOp BinaryenExtendHighSVecI8x16ToVecI16x8(void) { return ExtendHighSVecI8x16ToVecI16x8; } BinaryenOp BinaryenExtendLowUVecI8x16ToVecI16x8(void) { return ExtendLowUVecI8x16ToVecI16x8; } BinaryenOp BinaryenExtendHighUVecI8x16ToVecI16x8(void) { return ExtendHighUVecI8x16ToVecI16x8; } BinaryenOp BinaryenExtendLowSVecI16x8ToVecI32x4(void) { return ExtendLowSVecI16x8ToVecI32x4; } BinaryenOp BinaryenExtendHighSVecI16x8ToVecI32x4(void) { return ExtendHighSVecI16x8ToVecI32x4; } BinaryenOp BinaryenExtendLowUVecI16x8ToVecI32x4(void) { return ExtendLowUVecI16x8ToVecI32x4; } BinaryenOp BinaryenExtendHighUVecI16x8ToVecI32x4(void) { return ExtendHighUVecI16x8ToVecI32x4; } BinaryenOp BinaryenExtendLowSVecI32x4ToVecI64x2(void) { return ExtendLowSVecI32x4ToVecI64x2; } BinaryenOp BinaryenExtendHighSVecI32x4ToVecI64x2(void) { return ExtendHighSVecI32x4ToVecI64x2; } BinaryenOp BinaryenExtendLowUVecI32x4ToVecI64x2(void) { return ExtendLowUVecI32x4ToVecI64x2; } BinaryenOp BinaryenExtendHighUVecI32x4ToVecI64x2(void) { return ExtendHighUVecI32x4ToVecI64x2; } BinaryenOp BinaryenConvertLowSVecI32x4ToVecF64x2(void) { return ConvertLowSVecI32x4ToVecF64x2; } BinaryenOp BinaryenConvertLowUVecI32x4ToVecF64x2(void) { return ConvertLowUVecI32x4ToVecF64x2; } BinaryenOp BinaryenTruncSatZeroSVecF64x2ToVecI32x4(void) { return TruncSatZeroSVecF64x2ToVecI32x4; } BinaryenOp BinaryenTruncSatZeroUVecF64x2ToVecI32x4(void) { return TruncSatZeroUVecF64x2ToVecI32x4; } BinaryenOp BinaryenDemoteZeroVecF64x2ToVecF32x4(void) { return DemoteZeroVecF64x2ToVecF32x4; } BinaryenOp BinaryenPromoteLowVecF32x4ToVecF64x2(void) { return PromoteLowVecF32x4ToVecF64x2; } BinaryenOp BinaryenSwizzleVecI8x16(void) { return SwizzleVecI8x16; } BinaryenOp BinaryenRefIsNull(void) { return RefIsNull; } BinaryenOp BinaryenRefIsFunc(void) { return RefIsFunc; } BinaryenOp BinaryenRefIsData(void) { return RefIsData; } BinaryenOp BinaryenRefIsI31(void) { return RefIsI31; } BinaryenOp BinaryenRefAsNonNull(void) { return RefAsNonNull; }; BinaryenOp BinaryenRefAsFunc(void) { return RefAsFunc; } BinaryenOp BinaryenRefAsData(void) { return RefAsData; }; BinaryenOp BinaryenRefAsI31(void) { return RefAsI31; }; BinaryenExpressionRef BinaryenBlock(BinaryenModuleRef module, const char* name, BinaryenExpressionRef* children, BinaryenIndex numChildren, BinaryenType type) { auto* ret = ((Module*)module)->allocator.alloc(); if (name) { ret->name = name; } for (BinaryenIndex i = 0; i < numChildren; i++) { ret->list.push_back((Expression*)children[i]); } if (type != BinaryenTypeAuto()) { ret->finalize(Type(type)); } else { ret->finalize(); } return static_cast(ret); } BinaryenExpressionRef BinaryenIf(BinaryenModuleRef module, BinaryenExpressionRef condition, BinaryenExpressionRef ifTrue, BinaryenExpressionRef ifFalse) { return static_cast(Builder(*(Module*)module) .makeIf((Expression*)condition, (Expression*)ifTrue, (Expression*)ifFalse)); } BinaryenExpressionRef BinaryenLoop(BinaryenModuleRef module, const char* name, BinaryenExpressionRef body) { return static_cast( Builder(*(Module*)module) .makeLoop(name ? Name(name) : Name(), (Expression*)body)); } BinaryenExpressionRef BinaryenBreak(BinaryenModuleRef module, const char* name, BinaryenExpressionRef condition, BinaryenExpressionRef value) { return static_cast( Builder(*(Module*)module) .makeBreak(name, (Expression*)value, (Expression*)condition)); } BinaryenExpressionRef BinaryenSwitch(BinaryenModuleRef module, const char** names, BinaryenIndex numNames, const char* defaultName, BinaryenExpressionRef condition, BinaryenExpressionRef value) { auto* ret = ((Module*)module)->allocator.alloc(); for (BinaryenIndex i = 0; i < numNames; i++) { ret->targets.push_back(names[i]); } ret->default_ = defaultName; ret->condition = (Expression*)condition; ret->value = (Expression*)value; ret->finalize(); return static_cast(ret); } static BinaryenExpressionRef makeBinaryenCall(BinaryenModuleRef module, const char* target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType, bool isReturn) { auto* ret = ((Module*)module)->allocator.alloc(); ret->target = target; for (BinaryenIndex i = 0; i < numOperands; i++) { ret->operands.push_back((Expression*)operands[i]); } ret->type = Type(returnType); ret->isReturn = isReturn; ret->finalize(); return static_cast(ret); } BinaryenExpressionRef BinaryenCall(BinaryenModuleRef module, const char* target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType) { return makeBinaryenCall( module, target, operands, numOperands, returnType, false); } BinaryenExpressionRef BinaryenReturnCall(BinaryenModuleRef module, const char* target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType) { return makeBinaryenCall( module, target, operands, numOperands, returnType, true); } static BinaryenExpressionRef makeBinaryenCallIndirect(BinaryenModuleRef module, const char* table, BinaryenExpressionRef target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType params, BinaryenType results, bool isReturn) { auto* ret = ((Module*)module)->allocator.alloc(); ret->table = table; ret->target = (Expression*)target; for (BinaryenIndex i = 0; i < numOperands; i++) { ret->operands.push_back((Expression*)operands[i]); } ret->heapType = Signature(Type(params), Type(results)); ret->type = Type(results); ret->isReturn = isReturn; ret->finalize(); return static_cast(ret); } BinaryenExpressionRef BinaryenCallIndirect(BinaryenModuleRef module, const char* table, BinaryenExpressionRef target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType params, BinaryenType results) { return makeBinaryenCallIndirect( module, table, target, operands, numOperands, params, results, false); } BinaryenExpressionRef BinaryenReturnCallIndirect(BinaryenModuleRef module, const char* table, BinaryenExpressionRef target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType params, BinaryenType results) { return makeBinaryenCallIndirect( module, table, target, operands, numOperands, params, results, true); } BinaryenExpressionRef BinaryenLocalGet(BinaryenModuleRef module, BinaryenIndex index, BinaryenType type) { return static_cast( Builder(*(Module*)module).makeLocalGet(index, Type(type))); } BinaryenExpressionRef BinaryenLocalSet(BinaryenModuleRef module, BinaryenIndex index, BinaryenExpressionRef value) { return static_cast( Builder(*(Module*)module).makeLocalSet(index, (Expression*)value)); } BinaryenExpressionRef BinaryenLocalTee(BinaryenModuleRef module, BinaryenIndex index, BinaryenExpressionRef value, BinaryenType type) { return static_cast( Builder(*(Module*)module) .makeLocalTee(index, (Expression*)value, Type(type))); } BinaryenExpressionRef BinaryenGlobalGet(BinaryenModuleRef module, const char* name, BinaryenType type) { return static_cast( Builder(*(Module*)module).makeGlobalGet(name, Type(type))); } BinaryenExpressionRef BinaryenGlobalSet(BinaryenModuleRef module, const char* name, BinaryenExpressionRef value) { return static_cast( Builder(*(Module*)module).makeGlobalSet(name, (Expression*)value)); } BinaryenExpressionRef BinaryenLoad(BinaryenModuleRef module, uint32_t bytes, bool signed_, uint32_t offset, uint32_t align, BinaryenType type, BinaryenExpressionRef ptr) { return static_cast(Builder(*(Module*)module) .makeLoad(bytes, !!signed_, offset, align ? align : bytes, (Expression*)ptr, Type(type))); } BinaryenExpressionRef BinaryenStore(BinaryenModuleRef module, uint32_t bytes, uint32_t offset, uint32_t align, BinaryenExpressionRef ptr, BinaryenExpressionRef value, BinaryenType type) { return static_cast(Builder(*(Module*)module) .makeStore(bytes, offset, align ? align : bytes, (Expression*)ptr, (Expression*)value, Type(type))); } BinaryenExpressionRef BinaryenConst(BinaryenModuleRef module, BinaryenLiteral value) { return static_cast( Builder(*(Module*)module).makeConst(fromBinaryenLiteral(value))); } BinaryenExpressionRef BinaryenUnary(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef value) { return static_cast( Builder(*(Module*)module).makeUnary(UnaryOp(op), (Expression*)value)); } BinaryenExpressionRef BinaryenBinary(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef left, BinaryenExpressionRef right) { return static_cast( Builder(*(Module*)module) .makeBinary(BinaryOp(op), (Expression*)left, (Expression*)right)); } BinaryenExpressionRef BinaryenSelect(BinaryenModuleRef module, BinaryenExpressionRef condition, BinaryenExpressionRef ifTrue, BinaryenExpressionRef ifFalse, BinaryenType type) { auto* ret = ((Module*)module)->allocator.alloc()); return static_cast(expression)->ifTrue; } void BinaryenSelectSetIfTrue(BinaryenExpressionRef expr, BinaryenExpressionRef ifTrueExpr) { auto* expression = (Expression*)expr; assert(expression->is()); return static_cast(expression)->ifFalse; } void BinaryenSelectSetIfFalse(BinaryenExpressionRef expr, BinaryenExpressionRef ifFalseExpr) { auto* expression = (Expression*)expr; assert(expression->is()); return static_cast(expression)->condition; } void BinaryenSelectSetCondition(BinaryenExpressionRef expr, BinaryenExpressionRef condExpr) { auto* expression = (Expression*)expr; assert(expression->is()) { return doVisitSelect(select); } else if (auto* unreachable = curr->dynCast()) { return doVisitUnreachable(unreachable); } else if (auto* drop = curr->dynCast()) { return doVisitDrop(drop); } else if (curr->is() || curr->is() || curr->is()) { Fatal() << "DataFlow does not support EH instructions yet"; } else { return doVisitGeneric(curr); } } Node* doVisitBlock(Block* curr) { // TODO: handle super-deep nesting auto* oldParent = parent; expressionParentMap[curr] = oldParent; parent = curr; for (auto* child : curr->list) { visit(child); } // Merge the outputs // TODO handle conditions on these breaks if (curr->name.is()) { auto iter = breakStates.find(curr->name); if (iter != breakStates.end()) { auto& states = iter->second; // Add the state flowing out if (!isInUnreachable()) { states.push_back(locals); } mergeBlock(states, locals); } } parent = oldParent; return &bad; } Node* doVisitIf(If* curr) { auto* oldParent = parent; expressionParentMap[curr] = oldParent; parent = curr; // Set up the condition. Node* condition = visit(curr->condition); assert(condition); // Handle the contents. auto initialState = locals; visit(curr->ifTrue); auto afterIfTrueState = locals; if (curr->ifFalse) { locals = initialState; visit(curr->ifFalse); auto afterIfFalseState = locals; // TODO: optimize mergeIf(afterIfTrueState, afterIfFalseState, condition, curr, locals); } else { mergeIf(initialState, afterIfTrueState, condition, curr, locals); } parent = oldParent; return &bad; } Node* doVisitLoop(Loop* curr) { auto* oldParent = parent; expressionParentMap[curr] = oldParent; parent = curr; // As in Souper's LLVM extractor, we avoid loop phis, as we don't want // our traces to represent a value that differs across loop iterations. // For example, // %b = block // %x = phi %b, 1, %y // %y = phi %b, 2, %x // %z = eq %x %y // infer %z // Here %y refers to the previous iteration's %x. // To do this, we set all locals to a Var at the loop entry, then process // the inside of the loop. When that is done, we can see if a phi was // actually needed for each local. If it was, we leave the Var (it // represents an unknown value; analysis stops there), and if not, we // can replace the Var with the fixed value. // TODO: perhaps some more general uses of DataFlow will want loop phis? // TODO: optimize stuff here if (isInUnreachable()) { return &bad; // none of this matters } if (!curr->name.is()) { visit(curr->body); return &bad; // no phis are possible } auto previous = locals; auto numLocals = func->getNumLocals(); for (Index i = 0; i < numLocals; i++) { locals[i] = makeVar(func->getLocalType(i)); } auto vars = locals; // all the Vars we just created // We may need to replace values later - only new nodes added from // here are relevant. auto firstNodeFromLoop = nodes.size(); // Process the loop body. visit(curr->body); // Find all incoming paths. auto& breaks = breakStates[curr->name]; // Phis are possible, check for them. for (Index i = 0; i < numLocals; i++) { if (!isRelevantType(func->getLocalType(i))) { continue; } bool needPhi = false; // We replaced the proper value with a Var. If it's still that // Var - or it's the original proper value, which can happen with // constants - on all incoming paths, then a phi is not needed. auto* var = vars[i]; auto* proper = previous[i]; for (auto& other : breaks) { assert(!isInUnreachable(other)); auto& curr = *(other[i]); if (curr != *var && curr != *proper) { // A phi would be necessary here. needPhi = true; break; } } if (needPhi) { // Nothing to do - leave the Vars, the loop phis are // unknown values to us. } else { // Undo the Var for this local: In every new node added for // the loop body, replace references to the Var with the // previous value (the value that is all we need instead of a phi). for (auto j = firstNodeFromLoop; j < nodes.size(); j++) { for (auto*& value : nodes[j].get()->values) { if (value == var) { value = proper; } } } // Also undo in the current local state, which is flowing out // of the loop. for (auto*& node : locals) { if (node == var) { node = proper; } } } } return &bad; } Node* doVisitBreak(Break* curr) { if (!isInUnreachable()) { breakStates[curr->name].push_back(locals); } if (!curr->condition) { setInUnreachable(); } else { visit(curr->condition); } return &bad; } Node* doVisitSwitch(Switch* curr) { visit(curr->condition); if (!isInUnreachable()) { std::unordered_set targets; for (auto target : curr->targets) { targets.insert(target); } targets.insert(curr->default_); for (auto target : targets) { breakStates[target].push_back(locals); } } setInUnreachable(); return &bad; } Node* doVisitLocalGet(LocalGet* curr) { if (!isRelevantLocal(curr->index) || isInUnreachable()) { return &bad; } // We now know which IR node this get refers to auto* node = locals[curr->index]; return node; } Node* doVisitLocalSet(LocalSet* curr) { if (!isRelevantLocal(curr->index) || isInUnreachable()) { return &bad; } assert(curr->value->type.isConcrete()); sets.push_back(curr); expressionParentMap[curr] = parent; expressionParentMap[curr->value] = curr; // Set the current node in the local state. auto* node = visit(curr->value); locals[curr->index] = setNodeMap[curr] = node; // If we created a new node (and not just did a get of a set, which // passes around an existing node), mark its parent. if (nodeParentMap.find(node) == nodeParentMap.end()) { nodeParentMap[node] = curr; } return &bad; } Node* doVisitConst(Const* curr) { return makeConst(curr->value); } Node* doVisitUnary(Unary* curr) { // First, check if we support this op. switch (curr->op) { case ClzInt32: case ClzInt64: case CtzInt32: case CtzInt64: case PopcntInt32: case PopcntInt64: { // These are ok as-is. // Check if our child is supported. auto* value = expandFromI1(visit(curr->value), curr); if (value->isBad()) { return value; } // Great, we are supported! auto* ret = addNode(Node::makeExpr(curr, curr)); ret->addValue(value); return ret; } case EqZInt32: case EqZInt64: { // These can be implemented using a binary. // Check if our child is supported. auto* value = expandFromI1(visit(curr->value), curr); if (value->isBad()) { return value; } // Great, we are supported! return makeZeroComp(value, true, curr); } default: { // Anything else is an unknown value. return makeVar(curr->type); } } } Node* doVisitBinary(Binary* curr) { // First, check if we support this op. switch (curr->op) { case AddInt32: case AddInt64: case SubInt32: case SubInt64: case MulInt32: case MulInt64: case DivSInt32: case DivSInt64: case DivUInt32: case DivUInt64: case RemSInt32: case RemSInt64: case RemUInt32: case RemUInt64: case AndInt32: case AndInt64: case OrInt32: case OrInt64: case XorInt32: case XorInt64: case ShlInt32: case ShlInt64: case ShrUInt32: case ShrUInt64: case ShrSInt32: case ShrSInt64: case RotLInt32: case RotLInt64: case RotRInt32: case RotRInt64: case EqInt32: case EqInt64: case NeInt32: case NeInt64: case LtSInt32: case LtSInt64: case LtUInt32: case LtUInt64: case LeSInt32: case LeSInt64: case LeUInt32: case LeUInt64: { // These are ok as-is. // Check if our children are supported. auto* left = expandFromI1(visit(curr->left), curr); if (left->isBad()) { return left; } auto* right = expandFromI1(visit(curr->right), curr); if (right->isBad()) { return right; } // Great, we are supported! auto* ret = addNode(Node::makeExpr(curr, curr)); ret->addValue(left); ret->addValue(right); return ret; } case GtSInt32: case GtSInt64: case GeSInt32: case GeSInt64: case GtUInt32: case GtUInt64: case GeUInt32: case GeUInt64: { // These need to be flipped as Souper does not support redundant ops. Builder builder(*module); BinaryOp opposite; switch (curr->op) { case GtSInt32: opposite = LtSInt32; break; case GtSInt64: opposite = LtSInt64; break; case GeSInt32: opposite = LeSInt32; break; case GeSInt64: opposite = LeSInt64; break; case GtUInt32: opposite = LtUInt32; break; case GtUInt64: opposite = LtUInt64; break; case GeUInt32: opposite = LeUInt32; break; case GeUInt64: opposite = LeUInt64; break; default: WASM_UNREACHABLE("unexpected op"); } auto* ret = visitBinary(builder.makeBinary(opposite, curr->right, curr->left)); // We just created a new binary node, but we need to set the origin // properly to the original. ret->origin = curr; return ret; } default: { // Anything else is an unknown value. return makeVar(curr->type); } } } Node* doVisitSelect(Select* curr) { auto* ifTrue = expandFromI1(visit(curr->ifTrue), curr); if (ifTrue->isBad()) { return ifTrue; } auto* ifFalse = expandFromI1(visit(curr->ifFalse), curr); if (ifFalse->isBad()) { return ifFalse; } auto* condition = ensureI1(visit(curr->condition), curr); if (condition->isBad()) { return condition; } // Great, we are supported! auto* ret = addNode(Node::makeExpr(curr, curr)); ret->addValue(condition); ret->addValue(ifTrue); ret->addValue(ifFalse); return ret; } Node* doVisitUnreachable(Unreachable* curr) { setInUnreachable(); return &bad; } Node* doVisitDrop(Drop* curr) { visit(curr->value); // We need to know that the value's parent is a drop, indicating // the value is not actually used here. expressionParentMap[curr->value] = curr; return &bad; } Node* doVisitGeneric(Expression* curr) { // Just need to visit the nodes so we note all the gets for (auto* child : ChildIterator(curr)) { visit(child); } return makeVar(curr->type); } // Helpers. bool isRelevantType(wasm::Type type) { return type.isInteger(); } bool isRelevantLocal(Index index) { return isRelevantType(func->getLocalType(index)); } // Merge local state for an if, also creating a block and conditions. void mergeIf(Locals& aState, Locals& bState, Node* condition, Expression* expr, Locals& out) { // Create the conditions (if we can). Node* ifTrue; Node* ifFalse; if (!condition->isBad()) { // Generate boolean (i1 returning) conditions for the two branches. auto& conditions = expressionConditionMap[expr]; ifTrue = ensureI1(condition, nullptr); conditions.push_back(ifTrue); ifFalse = makeZeroComp(condition, true, nullptr); conditions.push_back(ifFalse); } else { ifTrue = ifFalse = &bad; } // Finally, merge the state with that block. TODO optimize std::vector states; if (!isInUnreachable(aState)) { states.emplace_back(aState, ifTrue); } if (!isInUnreachable(bState)) { states.emplace_back(bState, ifFalse); } merge(states, out); } // Merge local state for a block void mergeBlock(std::vector& localses, Locals& out) { // TODO: conditions std::vector states; for (auto& locals : localses) { states.emplace_back(locals, &bad); } merge(states, out); } // Merge local state for multiple control flow paths, creating phis as needed. void merge(std::vector& states, Locals& out) { // We should only receive reachable states. #ifndef NDEBUG for (auto& state : states) { assert(!isInUnreachable(state.locals)); } #endif Index numStates = states.size(); if (numStates == 0) { // We were unreachable, and still are. assert(isInUnreachable()); return; } // We may have just become reachable, if we were not before. setInReachable(); // Just one thing to merge is trivial. if (numStates == 1) { out = states[0].locals; return; } // We create a block if we need one. Index numLocals = func->getNumLocals(); Node* block = nullptr; for (Index i = 0; i < numLocals; i++) { if (!isRelevantType(func->getLocalType(i))) { continue; } // Process the inputs. If any is bad, the phi is bad. bool bad = false; for (auto& state : states) { auto* node = state.locals[i]; if (node->isBad()) { bad = true; out[i] = node; break; } } if (bad) { continue; } // Nothing is bad, proceed. Node* first = nullptr; for (auto& state : states) { if (!first) { first = out[i] = state.locals[i]; } else if (state.locals[i] != first) { // We need to actually merge some stuff. if (!block) { block = addNode(Node::makeBlock()); for (Index index = 0; index < numStates; index++) { auto* condition = states[index].condition; if (!condition->isBad()) { condition = addNode(Node::makeCond(block, index, condition)); } block->addValue(condition); } } auto* phi = addNode(Node::makePhi(block, i)); for (auto& state : states) { auto* value = expandFromI1(state.locals[i], nullptr); phi->addValue(value); } out[i] = phi; break; } } } } // If the node returns an i1, then we are called from a context that needs // to use it normally as in wasm - extend it Node* expandFromI1(Node* node, Expression* origin) { if (!node->isBad() && node->returnsI1()) { node = addNode(Node::makeZext(node, origin)); } return node; } Node* ensureI1(Node* node, Expression* origin) { if (!node->isBad() && !node->returnsI1()) { node = makeZeroComp(node, false, origin); } return node; } // Given a node representing something that is local.set'd, return // the set. LocalSet* getSet(Node* node) { auto iter = nodeParentMap.find(node); if (iter == nodeParentMap.end()) { return nullptr; } return iter->second->dynCast(); } // Given an expression, return the parent if such exists. Expression* getParent(Expression* curr) { auto iter = expressionParentMap.find(curr); if (iter == expressionParentMap.end()) { return nullptr; } return iter->second; } // Given an expression, return the set for it if such exists. LocalSet* getSet(Expression* curr) { auto* parent = getParent(curr); return parent ? parent->dynCast() : nullptr; } // Creates an expression that uses a node. Generally, a node represents // a value in a local, so we create a local.get for it. Expression* makeUse(Node* node) { Builder builder(*module); if (node->isPhi()) { // The index is the wasm local that we assign to when implementing // the phi; get from there. auto index = node->index; return builder.makeLocalGet(index, func->getLocalType(index)); } else if (node->isConst()) { return builder.makeConst(node->expr->cast()->value); } else if (node->isExpr()) { // Find the set we are a value of. auto index = getSet(node)->index; return builder.makeLocalGet(index, func->getLocalType(index)); } else if (node->isZext()) { // i1 zexts are a no-op for wasm return makeUse(node->values[0]); } else if (node->isVar()) { // Nothing valid for us to read here. Emit a call, representing an unknown // variable value. return Builder(*module).makeCall(FAKE_CALL, {}, node->wasmType); } else { WASM_UNREACHABLE("unexpected node type"); // TODO } } const Name FAKE_CALL = "fake$dfo$call"; }; } // namespace wasm::DataFlow #endif // wasm_dataflow_graph_h binaryen-version_108/src/dataflow/node.h000066400000000000000000000150271423707623100204400ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // DataFlow IR is an SSA representation. It can be built from the main // Binaryen IR. // // THe main initial use case was an IR that could easily be converted to // Souper IR, and the design favors that. // #ifndef wasm_dataflow_node_h #define wasm_dataflow_node_h #include "ir/utils.h" #include "wasm.h" namespace wasm::DataFlow { // // The core IR representation in DataFlow: a Node. // // We reuse the Binaryen IR as much as possible: when things are identical // between the two IRs, we just create an Expr node, which stores the opcode and // other details, and we can emit them to Souper by reading the Binaryen // Expression. Other node types here are special things from Souper IR that we // can't represent that way. // // * Souper comparisons return an i1. We extend them immediately if they are // going to be used as i32s or i64s. // * When we use an Expression node, we just use its immediate fields, like the // op in a binary, alignment etc. in a load, etc. We don't look into the // pointers to child nodes. Instead, the DataFlow IR has its own pointers // directly to DataFlow children. In particular, this means that it's easy // to create an Expression with the info you need and not care about linking // it up to other Expressions. // struct Node { enum Type { Var, // an unknown variable number (not to be confused with var/param/local // in wasm) Expr, // a value represented by a Binaryen Expression Phi, // a phi from converging control flow Cond, // a blockpc, representing one of the branchs for a Block Block, // a source of phis Zext, // zero-extend an i1 (from an op where Souper returns i1 but wasm does // not, and so we need a special way to get back to an i32/i64 if we // operate on that value instead of just passing it straight to // Souper). Bad // something we can't handle and should ignore } type; Node(Type type) : type(type) {} // TODO: the others, if we need them bool isVar() { return type == Var; } bool isExpr() { return type == Expr; } bool isPhi() { return type == Phi; } bool isCond() { return type == Cond; } bool isBlock() { return type == Block; } bool isZext() { return type == Zext; } bool isBad() { return type == Bad; } bool isConst() { return type == Expr && expr->is(); } union { // For Var wasm::Type wasmType; // For Expr Expression* expr; // For Phi and Cond (the local index for phi, the block // index for cond) Index index; }; // The wasm expression that we originate from (if such exists). A single // wasm instruction may be turned into multiple dataflow IR nodes, and some // nodes have no wasm origin (like phis). Expression* origin = nullptr; // Extra list of related nodes. // For Expr, these are the Nodes for the inputs to the expression (e.g. // a binary would have 2 in this vector here). // For Phi, this is the block and then the list of values to pick from. // For Cond, this is the block and node. // For Block, this is the list of Conds. Note that that block does not // depend on them - the Phis do, but we store them in the block so that // we can avoid duplication. // For Zext, this is the value we extend. std::vector values; // Constructors static Node* makeVar(wasm::Type wasmType) { Node* ret = new Node(Var); ret->wasmType = wasmType; return ret; } static Node* makeExpr(Expression* expr, Expression* origin) { Node* ret = new Node(Expr); ret->expr = expr; ret->origin = origin; return ret; } static Node* makePhi(Node* block, Index index) { Node* ret = new Node(Phi); ret->addValue(block); ret->index = index; return ret; } static Node* makeCond(Node* block, Index index, Node* node) { Node* ret = new Node(Cond); ret->addValue(block); ret->index = index; ret->addValue(node); return ret; } static Node* makeBlock() { Node* ret = new Node(Block); return ret; } static Node* makeZext(Node* child, Expression* origin) { Node* ret = new Node(Zext); ret->addValue(child); ret->origin = origin; return ret; } static Node* makeBad() { Node* ret = new Node(Bad); return ret; } // Helpers void addValue(Node* value) { values.push_back(value); } Node* getValue(Index i) { return values.at(i); } // Gets the wasm type of the node. If there isn't a valid one, // return unreachable. wasm::Type getWasmType() { switch (type) { case Var: return wasmType; case Expr: return expr->type; case Phi: return getValue(1)->getWasmType(); case Zext: return getValue(0)->getWasmType(); case Bad: return wasm::Type::unreachable; default: WASM_UNREACHABLE("invalid node type"); } } bool operator==(const Node& other) { if (type != other.type) { return false; } switch (type) { case Var: case Block: return this == &other; case Expr: { if (!ExpressionAnalyzer::equal(expr, other.expr)) { return false; } break; } case Cond: { if (index != other.index) { return false; } break; } default: {} } if (values.size() != other.values.size()) { return false; } for (Index i = 0; i < values.size(); i++) { if (*(values[i]) != *(other.values[i])) { return false; } } return true; } bool operator!=(const Node& other) { return !(*this == other); } // As mentioned above, comparisons return i1. This checks // if an operation is of that sort. bool returnsI1() { if (isExpr()) { if (auto* binary = expr->dynCast()) { return binary->isRelational(); } else if (auto* unary = expr->dynCast()) { return unary->isRelational(); } } return false; } }; } // namespace wasm::DataFlow #endif // wasm_dataflow_node binaryen-version_108/src/dataflow/users.h000066400000000000000000000050641423707623100206540ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // DataFlow IR is an SSA representation. It can be built from the main // Binaryen IR. // // THe main initial use case was an IR that could easily be converted to // Souper IR, and the design favors that. // #ifndef wasm_dataflow_users_h #define wasm_dataflow_users_h #include "dataflow/graph.h" namespace wasm::DataFlow { // Calculates the users of each node. // users[x] = { y, z, .. } // where y, z etc. are nodes that use x, that is, x is in their // values vector. class Users { typedef std::unordered_set UserSet; std::unordered_map users; public: void build(Graph& graph) { for (auto& node : graph.nodes) { for (auto* value : node->values) { users[value].insert(node.get()); } } } UserSet& getUsers(Node* node) { auto iter = users.find(node); if (iter == users.end()) { static UserSet empty; // FIXME thread_local? return empty; } return iter->second; } Index getNumUses(Node* node) { auto& users = getUsers(node); // A user may have more than one use Index numUses = 0; for (auto* user : users) { #ifndef NDEBUG bool found = false; #endif for (auto* value : user->values) { if (value == node) { numUses++; #ifndef NDEBUG found = true; #endif } } assert(found); } return numUses; } // Stops using all the values of this node. Called when a node is being // removed. void stopUsingValues(Node* node) { for (auto* value : node->values) { auto& users = getUsers(value); users.erase(node); } } // Adds a new user to a node. Called when we add or change a value of a node. void addUser(Node* node, Node* newUser) { users[node].insert(newUser); } // Remove all uses of a node. Called when a node is being removed. void removeAllUsesOf(Node* node) { users.erase(node); } }; } // namespace wasm::DataFlow #endif // wasm_dataflow_users binaryen-version_108/src/dataflow/utils.h000066400000000000000000000100321423707623100206420ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // DataFlow IR is an SSA representation. It can be built from the main // Binaryen IR. // // THe main initial use case was an IR that could easily be converted to // Souper IR, and the design favors that. // #ifndef wasm_dataflow_utils_h #define wasm_dataflow_utils_h #include "dataflow/graph.h" #include "dataflow/node.h" #include "wasm.h" namespace wasm::DataFlow { inline std::ostream& dump(Node* node, std::ostream& o, size_t indent = 0) { auto doIndent = [&]() { for (size_t i = 0; i < indent; i++) { o << ' '; } }; doIndent(); o << '[' << node << ' '; switch (node->type) { case Node::Type::Var: o << "var " << node->wasmType << ' ' << node; break; case Node::Type::Expr: { o << "expr "; o << *node->expr << '\n'; break; } case Node::Type::Phi: o << "phi " << node->index; break; case Node::Type::Cond: o << "cond " << node->index; break; case Node::Type::Block: { // don't print the conds - they would recurse o << "block (" << node->values.size() << " conds)]\n"; return o; } case Node::Type::Zext: o << "zext"; break; case Node::Type::Bad: o << "bad"; break; } if (!node->values.empty()) { o << '\n'; for (auto* value : node->values) { dump(value, o, indent + 1); } doIndent(); } o << "] (origin: " << (void*)(node->origin) << ")\n"; return o; } inline std::ostream& dump(Graph& graph, std::ostream& o) { for (auto& node : graph.nodes) { o << "NODE " << node.get() << ": "; dump(node.get(), o); if (auto* set = graph.getSet(node.get())) { o << " and that is set to local " << set->index << '\n'; } } return o; } // Checks if the inputs are all identical - something we could // probably optimize. Returns false if irrelevant. inline bool allInputsIdentical(Node* node) { switch (node->type) { case Node::Type::Expr: { if (node->expr->is()) { return *(node->getValue(0)) == *(node->getValue(1)); } else if (node->expr->is()) { return node->getValue(0)->isConst() && node->getValue(1)->isConst() && node->getValue(2)->isConst(); } break; } case Node::Type::Phi: { // Check if any of the others are not equal for (Index i = 1; i < node->values.size(); i++) { if (!node->getValue(i)->isConst()) { return false; } } return true; } default: {} } return false; } } // namespace wasm::DataFlow #endif // wasm_dataflow_utils binaryen-version_108/src/emscripten-optimizer/000077500000000000000000000000001423707623100217255ustar00rootroot00000000000000binaryen-version_108/src/emscripten-optimizer/CMakeLists.txt000066400000000000000000000003571423707623100244720ustar00rootroot00000000000000FILE(GLOB emscripten-optimizer_HEADERS *.h) set(emscripten-optimizer_SOURCES optimizer-shared.cpp parser.cpp simple_ast.cpp ${emscripten-optimizer_HEADERS} ) add_library(emscripten-optimizer OBJECT ${emscripten-optimizer_SOURCES}) binaryen-version_108/src/emscripten-optimizer/istring.h000066400000000000000000000127721423707623100235660ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Interned String type, 100% interned on creation. Comparisons are always just // a pointer comparison #ifndef wasm_istring_h #define wasm_istring_h #include #include #include #include #include #include #include #include #include "support/threads.h" #include "support/utilities.h" namespace cashew { struct IString { const char* str = nullptr; static size_t hash_c(const char* str) { // see http://www.cse.yorku.ca/~oz/hash.html unsigned int hash = 5381; int c; while ((c = *str++)) { hash = ((hash << 5) + hash) ^ c; } return (size_t)hash; } class CStringHash { public: size_t operator()(const char* str) const { return IString::hash_c(str); } }; class CStringEqual { public: bool operator()(const char* x, const char* y) const { return strcmp(x, y) == 0; } }; IString() = default; // if reuse=true, then input is assumed to remain alive; not copied IString(const char* s, bool reuse = true) { assert(s); set(s, reuse); } void set(const char* s, bool reuse = true) { typedef std::unordered_set StringSet; // one global store of strings per thread, we must not access this // in parallel thread_local static StringSet strings; auto existing = strings.find(s); if (existing == strings.end()) { // if the string isn't already known, we must use a single global // storage location, guarded by a mutex, so each string is allocated // exactly once static std::mutex mutex; std::unique_lock lock(mutex); // a single global set contains the actual strings, so we allocate each // one exactly once. static StringSet globalStrings; auto globalExisting = globalStrings.find(s); if (globalExisting == globalStrings.end()) { if (!reuse) { static std::vector> allocated; allocated.emplace_back(wasm::make_unique(s)); s = allocated.back()->c_str(); // we'll never modify it, so this is ok } // insert into global set globalStrings.insert(s); } else { s = *globalExisting; } // add the string to our thread-local set strings.insert(s); } else { s = *existing; } str = s; } void set(const IString& s) { str = s.str; } void clear() { str = nullptr; } bool operator==(const IString& other) const { // assert((str == other.str) == !strcmp(str, other.str)); return str == other.str; // fast! } bool operator!=(const IString& other) const { // assert((str == other.str) == !strcmp(str, other.str)); return str != other.str; // fast! } bool operator<(const IString& other) const { return strcmp(str ? str : "", other.str ? other.str : "") < 0; } char operator[](int x) const { return str[x]; } bool operator!() const { // no string, or empty string return !str || str[0] == 0; } const char* c_str() const { return str; } bool equals(const char* other) const { return !strcmp(str, other); } bool is() const { return str != nullptr; } bool isNull() const { return str == nullptr; } const char* stripPrefix(const char* prefix) const { const char* ptr = str; while (true) { if (*prefix == 0) { return ptr; } if (*ptr == 0) { return nullptr; } if (*ptr++ != *prefix++) { return nullptr; } } } bool startsWith(const char* prefix) const { return stripPrefix(prefix) != nullptr; } bool startsWith(const IString& prefix) const { return startsWith(prefix.str); } size_t size() const { return str ? strlen(str) : 0; } }; } // namespace cashew // Utilities for creating hashmaps/sets over IStrings namespace std { template<> struct hash { size_t operator()(const cashew::IString& str) const { return std::hash{}(size_t(str.str)); } }; template<> struct equal_to { bool operator()(const cashew::IString& x, const cashew::IString& y) const { return x == y; } }; } // namespace std namespace cashew { // IStringSet class IStringSet : public std::unordered_set { std::vector data; public: IStringSet() = default; IStringSet(const char* init) { // comma-delimited list int size = strlen(init) + 1; data.resize(size); char* curr = &data[0]; strncpy(curr, init, size); while (1) { char* end = strchr(curr, ' '); if (end) { *end = 0; } insert(curr); if (!end) { break; } curr = end + 1; } } bool has(const IString& str) { return count(str) > 0; } }; class IOrderedStringSet : public std::set { public: bool has(const IString& str) { return count(str) > 0; } }; } // namespace cashew #endif // wasm_istring_h binaryen-version_108/src/emscripten-optimizer/optimizer-shared.cpp000066400000000000000000000120441423707623100257200ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include "optimizer.h" #include "support/safe_integer.h" using namespace cashew; IString JS_FLOAT_ZERO; IString SIMD_INT8X16_CHECK("SIMD_Int8x16_check"); IString SIMD_INT16X8_CHECK("SIMD_Int16x8_check"); IString SIMD_INT32X4_CHECK("SIMD_Int32x4_check"); IString SIMD_FLOAT32X4_CHECK("SIMD_Float32x4_check"); IString SIMD_FLOAT64X2_CHECK("SIMD_Float64x2_check"); Ref makeJsCoercedZero(JsType type) { switch (type) { case JS_INT: return ValueBuilder::makeNum(0); break; case JS_DOUBLE: return ValueBuilder::makeUnary(PLUS, ValueBuilder::makeNum(0)); break; case JS_FLOAT: { if (!JS_FLOAT_ZERO.isNull()) { return ValueBuilder::makeName(JS_FLOAT_ZERO); } else { return ValueBuilder::makeCall(MATH_FROUND, ValueBuilder::makeNum(0)); } break; } case JS_FLOAT32X4: { return ValueBuilder::makeCall(SIMD_FLOAT32X4, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); break; } case JS_FLOAT64X2: { return ValueBuilder::makeCall( SIMD_FLOAT64X2, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); break; } case JS_INT8X16: { return ValueBuilder::makeCall(SIMD_INT8X16, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); break; } case JS_INT16X8: { return ValueBuilder::makeCall(SIMD_INT16X8, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); break; } case JS_INT32X4: { return ValueBuilder::makeCall(SIMD_INT32X4, ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0), ValueBuilder::makeNum(0)); break; } default: assert(0); } abort(); } Ref makeJsCoercion(Ref node, JsType type) { switch (type) { case JS_INT: return ValueBuilder::makeBinary(node, OR, ValueBuilder::makeNum(0)); case JS_DOUBLE: return ValueBuilder::makeUnary(PLUS, node); case JS_FLOAT: return ValueBuilder::makeCall(MATH_FROUND, node); case JS_FLOAT32X4: return ValueBuilder::makeCall(SIMD_FLOAT32X4_CHECK, node); case JS_FLOAT64X2: return ValueBuilder::makeCall(SIMD_FLOAT64X2_CHECK, node); case JS_INT8X16: return ValueBuilder::makeCall(SIMD_INT8X16_CHECK, node); case JS_INT16X8: return ValueBuilder::makeCall(SIMD_INT16X8_CHECK, node); case JS_INT32X4: return ValueBuilder::makeCall(SIMD_INT32X4_CHECK, node); case JS_NONE: default: // non-validating code, emit nothing XXX this is dangerous, we should only // allow this when we know we are not validating return node; } } Ref makeSigning(Ref node, JsSign sign) { assert(sign == JS_SIGNED || sign == JS_UNSIGNED); return ValueBuilder::makeBinary( node, sign == JS_SIGNED ? OR : TRSHIFT, ValueBuilder::makeNum(0)); } binaryen-version_108/src/emscripten-optimizer/optimizer.h000066400000000000000000000026051423707623100241230ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_optimizer_h #define wasm_optimizer_h #include "simple_ast.h" using namespace cashew; extern IString JS_FLOAT_ZERO; extern IString SIMD_INT8X16_CHECK; extern IString SIMD_INT16X8_CHECK; extern IString SIMD_INT32X4_CHECK; extern IString SIMD_FLOAT32X4_CHECK; extern IString SIMD_FLOAT64X2_CHECK; enum JsType { JS_INT = 0, JS_DOUBLE, JS_FLOAT, JS_FLOAT32X4, JS_FLOAT64X2, JS_INT8X16, JS_INT16X8, JS_INT32X4, JS_INT64, JS_NONE // number of types }; enum JsSign { // small constants can be signed or unsigned, variables are also flexible JS_FLEXIBLE = 0, JS_SIGNED, JS_UNSIGNED, JS_NONSIGNED, }; Ref makeJsCoercedZero(JsType type); Ref makeJsCoercion(Ref node, JsType type); Ref makeSigning(Ref node, JsSign sign); #endif // wasm_optimizer_h binaryen-version_108/src/emscripten-optimizer/parser.cpp000066400000000000000000000115251423707623100237310ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "parser.h" namespace cashew { // common strings IString TOPLEVEL("toplevel"); IString DEFUN("defun"); IString BLOCK("block"); IString VAR("var"); IString CONST("const"); IString CONDITIONAL("conditional"); IString BINARY("binary"); IString RETURN("return"); IString IF("if"); IString ELSE("else"); IString WHILE("while"); IString DO("do"); IString FOR("for"); IString SEQ("seq"); IString SUB("sub"); IString CALL("call"); IString LABEL("label"); IString BREAK("break"); IString CONTINUE("continue"); IString SWITCH("switch"); IString STRING("string"); IString TRY("try"); IString INF("inf"); IString NaN("nan"); IString LLVM_CTTZ_I32("_llvm_cttz_i32"); IString UDIVMODDI4("___udivmoddi4"); IString UNARY_PREFIX("unary-prefix"); IString UNARY_POSTFIX("unary-postfix"); IString MATH_FROUND("Math_fround"); IString MATH_CLZ32("Math_clz32"); IString INT64("i64"); IString INT64_CONST("i64_const"); IString SIMD_FLOAT32X4("SIMD_Float32x4"); IString SIMD_FLOAT64X2("SIMD_Float64x2"); IString SIMD_INT8X16("SIMD_Int8x16"); IString SIMD_INT16X8("SIMD_Int16x8"); IString SIMD_INT32X4("SIMD_Int32x4"); IString PLUS("+"); IString MINUS("-"); IString OR("|"); IString AND("&"); IString XOR("^"); IString L_NOT("!"); IString B_NOT("~"); IString LT("<"); IString GE(">="); IString LE("<="); IString GT(">"); IString EQ("=="); IString NE("!="); IString DIV("/"); IString MOD("%"); IString MUL("*"); IString RSHIFT(">>"); IString LSHIFT("<<"); IString TRSHIFT(">>>"); IString HEAP8("HEAP8"); IString HEAP16("HEAP16"); IString HEAP32("HEAP32"); IString HEAPF32("HEAPF32"); IString HEAPU8("HEAPU8"); IString HEAPU16("HEAPU16"); IString HEAPU32("HEAPU32"); IString HEAPF64("HEAPF64"); IString F0("f0"); IString EMPTY(""); IString FUNCTION("function"); IString OPEN_PAREN("("); IString OPEN_BRACE("["); IString OPEN_CURLY("{"); IString CLOSE_CURLY("}"); IString COMMA(","); IString QUESTION("?"); IString COLON(":"); IString CASE("case"); IString DEFAULT("default"); IString DOT("dot"); IString PERIOD("."); IString NEW("new"); IString ARRAY("array"); IString OBJECT("object"); IString THROW("throw"); IString SET("="); IString ATOMICS("Atomics"); IString COMPARE_EXCHANGE("compareExchange"); IString LOAD("load"); IString STORE("store"); IString GETTER("get"); IString SETTER("set"); IStringSet keywords("var const function if else do while for break continue return " "switch case default throw try catch finally true false null new"); const char *OPERATOR_INITS = "+-*/%<>&^|~=!,?:.", *SEPARATORS = "([;{}"; int MAX_OPERATOR_SIZE = 3; std::vector operatorClasses; static std::vector> precedences; // op, type => prec struct Init { Init() { // operators, rtl, type operatorClasses.emplace_back(".", false, OperatorClass::Binary); operatorClasses.emplace_back("! ~ + -", true, OperatorClass::Prefix); operatorClasses.emplace_back("* / %", false, OperatorClass::Binary); operatorClasses.emplace_back("+ -", false, OperatorClass::Binary); operatorClasses.emplace_back("<< >> >>>", false, OperatorClass::Binary); operatorClasses.emplace_back("< <= > >=", false, OperatorClass::Binary); operatorClasses.emplace_back("== !=", false, OperatorClass::Binary); operatorClasses.emplace_back("&", false, OperatorClass::Binary); operatorClasses.emplace_back("^", false, OperatorClass::Binary); operatorClasses.emplace_back("|", false, OperatorClass::Binary); operatorClasses.emplace_back("? :", true, OperatorClass::Tertiary); operatorClasses.emplace_back("=", true, OperatorClass::Binary); operatorClasses.emplace_back(",", true, OperatorClass::Binary); precedences.resize(OperatorClass::Tertiary + 1); for (size_t prec = 0; prec < operatorClasses.size(); prec++) { for (auto curr : operatorClasses[prec].ops) { precedences[operatorClasses[prec].type][curr] = prec; } } } }; Init init; int OperatorClass::getPrecedence(Type type, IString op) { return precedences[type][op]; } bool OperatorClass::getRtl(int prec) { return operatorClasses[prec].rtl; } bool isIdentInit(char x) { return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z') || x == '_' || x == '$'; } bool isIdentPart(char x) { return isIdentInit(x) || (x >= '0' && x <= '9'); } } // namespace cashew binaryen-version_108/src/emscripten-optimizer/parser.h000066400000000000000000000746541423707623100234120ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Pure parsing. Calls methods on a Builder (template argument) to actually // construct the AST // // XXX All parsing methods assume they take ownership of the input string. This // lets them reuse parts of it. You will segfault if the input string cannot // be reused and written to. #ifndef wasm_parser_h #define wasm_parser_h #include #include #include #include #include #include "istring.h" #include "support/safe_integer.h" namespace cashew { // common strings extern IString TOPLEVEL; extern IString DEFUN; extern IString BLOCK; extern IString VAR; extern IString CONST; extern IString CONDITIONAL; extern IString BINARY; extern IString RETURN; extern IString IF; extern IString ELSE; extern IString WHILE; extern IString DO; extern IString FOR; extern IString SEQ; extern IString SUB; extern IString CALL; extern IString LABEL; extern IString BREAK; extern IString CONTINUE; extern IString SWITCH; extern IString STRING; extern IString TRY; extern IString INF; extern IString NaN; extern IString LLVM_CTTZ_I32; extern IString UDIVMODDI4; extern IString UNARY_PREFIX; extern IString UNARY_POSTFIX; extern IString MATH_FROUND; extern IString MATH_CLZ32; extern IString INT64; extern IString INT64_CONST; extern IString SIMD_FLOAT32X4; extern IString SIMD_FLOAT64X2; extern IString SIMD_INT8X16; extern IString SIMD_INT16X8; extern IString SIMD_INT32X4; extern IString PLUS; extern IString MINUS; extern IString OR; extern IString AND; extern IString XOR; extern IString L_NOT; extern IString B_NOT; extern IString LT; extern IString GE; extern IString LE; extern IString GT; extern IString EQ; extern IString NE; extern IString DIV; extern IString MOD; extern IString MUL; extern IString RSHIFT; extern IString LSHIFT; extern IString TRSHIFT; extern IString HEAP8; extern IString HEAP16; extern IString HEAP32; extern IString HEAPF32; extern IString HEAPU8; extern IString HEAPU16; extern IString HEAPU32; extern IString HEAPF64; extern IString F0; extern IString EMPTY; extern IString FUNCTION; extern IString OPEN_PAREN; extern IString OPEN_BRACE; extern IString OPEN_CURLY; extern IString CLOSE_CURLY; extern IString COMMA; extern IString QUESTION; extern IString COLON; extern IString CASE; extern IString DEFAULT; extern IString DOT; extern IString PERIOD; extern IString NEW; extern IString ARRAY; extern IString OBJECT; extern IString THROW; extern IString SET; extern IString ATOMICS; extern IString COMPARE_EXCHANGE; extern IString LOAD; extern IString STORE; extern IString GETTER; extern IString SETTER; extern IStringSet keywords; extern const char *OPERATOR_INITS, *SEPARATORS; extern int MAX_OPERATOR_SIZE, LOWEST_PREC; struct OperatorClass { enum Type { Binary = 0, Prefix = 1, Postfix = 2, Tertiary = 3 }; IStringSet ops; bool rtl; Type type; OperatorClass(const char* o, bool r, Type t) : ops(o), rtl(r), type(t) {} static int getPrecedence(Type type, IString op); static bool getRtl(int prec); }; extern std::vector operatorClasses; extern bool isIdentInit(char x); extern bool isIdentPart(char x); // parser template class Parser { static bool isSpace(char x) { return x == 32 || x == 9 || x == 10 || x == 13; } /* space, tab, linefeed/newline, or return */ static void skipSpace(char*& curr) { while (*curr) { if (isSpace(*curr)) { curr++; continue; } if (curr[0] == '/' && curr[1] == '/') { curr += 2; while (*curr && *curr != '\n') { curr++; } if (*curr) { curr++; } continue; } if (curr[0] == '/' && curr[1] == '*') { curr += 2; while (*curr && (curr[0] != '*' || curr[1] != '/')) { curr++; } curr += 2; continue; } return; } } static bool isDigit(char x) { return x >= '0' && x <= '9'; } static bool hasChar(const char* list, char x) { while (*list) { if (*list++ == x) { return true; } } return false; } // An atomic fragment of something. Stops at a natural boundary. enum FragType { KEYWORD = 0, OPERATOR = 1, IDENT = 2, STRING = 3, // without quotes INT = 4, DOUBLE = 5, SEPARATOR = 6 }; struct Frag { // MSVC does not allow unrestricted unions: // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf #ifndef _MSC_VER union { #endif IString str; double num; #ifndef _MSC_VER }; #endif int size; FragType type; bool isNumber() const { return type == INT || type == DOUBLE; } explicit Frag(char* src) { char* start = src; if (isIdentInit(*src)) { // read an identifier or a keyword src++; while (isIdentPart(*src)) { src++; } if (*src == 0) { str.set(start); } else { char temp = *src; *src = 0; str.set(start, false); *src = temp; } type = keywords.has(str) ? KEYWORD : IDENT; } else if (isDigit(*src) || (src[0] == '.' && isDigit(src[1]))) { if (src[0] == '0' && (src[1] == 'x' || src[1] == 'X')) { // Explicitly parse hex numbers of form "0x...", because strtod // supports hex number strings only in C++11, and Visual Studio 2013 // does not yet support that functionality. src += 2; num = 0; while (1) { if (*src >= '0' && *src <= '9') { num *= 16; num += *src - '0'; } else if (*src >= 'a' && *src <= 'f') { num *= 16; num += *src - 'a' + 10; } else if (*src >= 'A' && *src <= 'F') { num *= 16; num += *src - 'A' + 10; } else { break; } src++; } } else { num = strtod(start, &src); } // asm.js must have a '.' for double values. however, we also tolerate // uglify's tendency to emit without a '.' (and fix it later with a +). // for valid asm.js input, the '.' should be enough, and for uglify // in the emscripten optimizer pipeline, we use simple_ast where // INT/DOUBLE is quite the same at this point anyhow type = (std::find(start, src, '.') == src && (wasm::isSInteger32(num) || wasm::isUInteger32(num))) ? INT : DOUBLE; assert(src > start); } else if (hasChar(OPERATOR_INITS, *src)) { switch (*src) { case '!': str = src[1] == '=' ? NE : L_NOT; break; case '%': str = MOD; break; case '&': str = AND; break; case '*': str = MUL; break; case '+': str = PLUS; break; case ',': str = COMMA; break; case '-': str = MINUS; break; case '.': str = PERIOD; break; case '/': str = DIV; break; case ':': str = COLON; break; case '<': str = src[1] == '<' ? LSHIFT : (src[1] == '=' ? LE : LT); break; case '=': str = src[1] == '=' ? EQ : SET; break; case '>': str = src[1] == '>' ? (src[2] == '>' ? TRSHIFT : RSHIFT) : (src[1] == '=' ? GE : GT); break; case '?': str = QUESTION; break; case '^': str = XOR; break; case '|': str = OR; break; case '~': str = B_NOT; break; default: abort(); } size = strlen(str.str); #ifndef NDEBUG char temp = start[size]; start[size] = 0; assert(strcmp(str.str, start) == 0); start[size] = temp; #endif type = OPERATOR; return; } else if (hasChar(SEPARATORS, *src)) { type = SEPARATOR; char temp = src[1]; src[1] = 0; str.set(src, false); src[1] = temp; src++; } else if (*src == '"' || *src == '\'') { char* end = strchr(src + 1, *src); *end = 0; str.set(src + 1); src = end + 1; type = STRING; } else { dump("frag parsing", src); abort(); } size = src - start; } }; struct ExpressionElement { bool isNode; // MSVC does not allow unrestricted unions: // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf #ifndef _MSC_VER union { #endif NodeRef node; IString op; #ifndef _MSC_VER }; #endif ExpressionElement(NodeRef n) : isNode(true), node(n) {} ExpressionElement(IString o) : isNode(false), op(o) {} NodeRef getNode() { assert(isNode); return node; } IString getOp() { assert(!isNode); return op; } }; // This is a list of the current stack of node-operator-node-operator-etc. // this works by each parseExpression call appending to the vector; then // recursing out, and the toplevel sorts it all typedef std::vector ExpressionParts; std::vector expressionPartsStack; // Parses an element in a list of such elements, e.g. list of statements in a // block, or list of parameters in a call NodeRef parseElement(char*& src, const char* seps = ";") { // dump("parseElement", src); skipSpace(src); Frag frag(src); src += frag.size; switch (frag.type) { case KEYWORD: { return parseAfterKeyword(frag, src, seps); } case IDENT: { return parseAfterIdent(frag, src, seps); } case STRING: case INT: case DOUBLE: { return parseExpression(parseFrag(frag), src, seps); } case SEPARATOR: { if (frag.str == OPEN_PAREN) { return parseExpression(parseAfterParen(src), src, seps); } if (frag.str == OPEN_BRACE) { return parseExpression(parseAfterBrace(src), src, seps); } if (frag.str == OPEN_CURLY) { return parseExpression(parseAfterCurly(src), src, seps); } abort(); } case OPERATOR: { return parseExpression(frag.str, src, seps); } default: /* dump("parseElement", src); printf("bad frag type: %d\n",frag.type); */ abort(); } return nullptr; } NodeRef parseFrag(Frag& frag) { switch (frag.type) { case IDENT: return Builder::makeName(frag.str); case STRING: return Builder::makeString(frag.str); case INT: return Builder::makeInt(uint32_t(frag.num)); case DOUBLE: return Builder::makeDouble(frag.num); default: abort(); } return nullptr; } NodeRef parseAfterKeyword(Frag& frag, char*& src, const char* seps) { skipSpace(src); if (frag.str == FUNCTION) { return parseFunction(src, seps); } else if (frag.str == VAR) { return parseVar(src, seps, false); } else if (frag.str == CONST) { return parseVar(src, seps, true); } else if (frag.str == RETURN) { return parseReturn(src, seps); } else if (frag.str == IF) { return parseIf(src, seps); } else if (frag.str == DO) { return parseDo(src, seps); } else if (frag.str == WHILE) { return parseWhile(src, seps); } else if (frag.str == BREAK) { return parseBreak(src, seps); } else if (frag.str == CONTINUE) { return parseContinue(src, seps); } else if (frag.str == SWITCH) { return parseSwitch(src, seps); } else if (frag.str == NEW) { return parseNew(src, seps); } else if (frag.str == FOR) { return parseFor(src, seps); } dump(frag.str.str, src); abort(); return nullptr; } NodeRef parseFunction(char*& src, const char* seps) { Frag name(src); if (name.type == IDENT) { src += name.size; } else { assert(name.type == SEPARATOR && name.str[0] == '('); name.str = IString(); } NodeRef ret = Builder::makeFunction(name.str); skipSpace(src); assert(*src == '('); src++; while (1) { skipSpace(src); if (*src == ')') { break; } Frag arg(src); assert(arg.type == IDENT); src += arg.size; Builder::appendArgumentToFunction(ret, arg.str); skipSpace(src); if (*src == ')') { break; } if (*src == ',') { src++; continue; } abort(); } src++; Builder::setBlockContent(ret, parseBracketedBlock(src)); // TODO: parse expression? return ret; } NodeRef parseVar(char*& src, const char* seps, bool is_const) { NodeRef ret = Builder::makeVar(is_const); while (1) { skipSpace(src); if (*src == ';') { break; } Frag name(src); assert(name.type == IDENT); NodeRef value; src += name.size; skipSpace(src); if (*src == '=') { src++; skipSpace(src); value = parseElement(src, ";,"); } Builder::appendToVar(ret, name.str, value); skipSpace(src); if (*src == ';') { break; } if (*src == ',') { src++; continue; } abort(); } src++; return ret; } NodeRef parseReturn(char*& src, const char* seps) { skipSpace(src); NodeRef value = !hasChar(seps, *src) ? parseElement(src, seps) : nullptr; skipSpace(src); assert(hasChar(seps, *src)); if (*src == ';') { src++; } return Builder::makeReturn(value); } NodeRef parseIf(char*& src, const char* seps) { NodeRef condition = parseParenned(src); NodeRef ifTrue = parseMaybeBracketed(src, seps); skipSpace(src); NodeRef ifFalse; if (!hasChar(seps, *src)) { Frag next(src); if (next.type == KEYWORD && next.str == ELSE) { src += next.size; ifFalse = parseMaybeBracketed(src, seps); } } return Builder::makeIf(condition, ifTrue, ifFalse); } NodeRef parseDo(char*& src, const char* seps) { NodeRef body = parseMaybeBracketed(src, seps); skipSpace(src); Frag next(src); assert(next.type == KEYWORD && next.str == WHILE); src += next.size; NodeRef condition = parseParenned(src); return Builder::makeDo(body, condition); } NodeRef parseWhile(char*& src, const char* seps) { NodeRef condition = parseParenned(src); NodeRef body = parseMaybeBracketed(src, seps); return Builder::makeWhile(condition, body); } NodeRef parseFor(char*& src, const char* seps) { skipSpace(src); assert(*src == '('); src++; NodeRef init = parseElement(src, ";"); skipSpace(src); assert(*src == ';'); src++; NodeRef condition = parseElement(src, ";"); skipSpace(src); assert(*src == ';'); src++; NodeRef inc = parseElement(src, ")"); skipSpace(src); assert(*src == ')'); src++; NodeRef body = parseMaybeBracketed(src, seps); return Builder::makeFor(init, condition, inc, body); } NodeRef parseBreak(char*& src, const char* seps) { skipSpace(src); Frag next(src); if (next.type == IDENT) { src += next.size; } return Builder::makeBreak(next.type == IDENT ? next.str : IString()); } NodeRef parseContinue(char*& src, const char* seps) { skipSpace(src); Frag next(src); if (next.type == IDENT) { src += next.size; } return Builder::makeContinue(next.type == IDENT ? next.str : IString()); } NodeRef parseSwitch(char*& src, const char* seps) { NodeRef ret = Builder::makeSwitch(parseParenned(src)); skipSpace(src); assert(*src == '{'); src++; while (1) { // find all cases and possibly a default skipSpace(src); if (*src == '}') { break; } Frag next(src); if (next.type == KEYWORD) { if (next.str == CASE) { src += next.size; skipSpace(src); NodeRef arg; Frag value(src); if (value.isNumber()) { arg = parseFrag(value); src += value.size; } else if (value.type == OPERATOR) { // negative number assert(value.str == MINUS); src += value.size; skipSpace(src); Frag value2(src); assert(value2.isNumber()); arg = Builder::makePrefix(MINUS, parseFrag(value2)); src += value2.size; } else { // identifier and function call assert(value.type == IDENT); src += value.size; skipSpace(src); arg = parseCall(parseFrag(value), src); } Builder::appendCaseToSwitch(ret, arg); skipSpace(src); assert(*src == ':'); src++; continue; } else if (next.str == DEFAULT) { src += next.size; Builder::appendDefaultToSwitch(ret); skipSpace(src); assert(*src == ':'); src++; continue; } // otherwise, may be some keyword that happens to start a block (e.g. // case 1: _return_ 5) } // not case X: or default: or }, so must be some code skipSpace(src); bool explicitBlock = *src == '{'; NodeRef subBlock = explicitBlock ? parseBracketedBlock(src) : parseBlock(src, ";}", CASE, DEFAULT); Builder::appendCodeToSwitch(ret, subBlock, explicitBlock); } skipSpace(src); assert(*src == '}'); src++; return ret; } NodeRef parseNew(char*& src, const char* seps) { return Builder::makeNew(parseElement(src, seps)); } NodeRef parseAfterIdent(Frag& frag, char*& src, const char* seps) { skipSpace(src); if (*src == '(') { return parseExpression(parseCall(parseFrag(frag), src), src, seps); } if (*src == '[') { return parseExpression(parseIndexing(parseFrag(frag), src), src, seps); } if (*src == ':' && expressionPartsStack.back().size() == 0) { src++; skipSpace(src); NodeRef inner; if (*src == '{') { // context lets us know this is not an object, but a block inner = parseBracketedBlock(src); } else { inner = parseElement(src, seps); } return Builder::makeLabel(frag.str, inner); } if (*src == '.') { return parseExpression(parseDotting(parseFrag(frag), src), src, seps); } return parseExpression(parseFrag(frag), src, seps); } NodeRef parseCall(NodeRef target, char*& src) { expressionPartsStack.resize(expressionPartsStack.size() + 1); assert(*src == '('); src++; NodeRef ret = Builder::makeCall(target); while (1) { skipSpace(src); if (*src == ')') { break; } Builder::appendToCall(ret, parseElement(src, ",)")); skipSpace(src); if (*src == ')') { break; } if (*src == ',') { src++; continue; } abort(); } src++; assert(expressionPartsStack.back().size() == 0); expressionPartsStack.pop_back(); return ret; } NodeRef parseIndexing(NodeRef target, char*& src) { expressionPartsStack.resize(expressionPartsStack.size() + 1); assert(*src == '['); src++; NodeRef ret = Builder::makeIndexing(target, parseElement(src, "]")); skipSpace(src); assert(*src == ']'); src++; assert(expressionPartsStack.back().size() == 0); expressionPartsStack.pop_back(); return ret; } NodeRef parseDotting(NodeRef target, char*& src) { assert(*src == '.'); src++; Frag key(src); assert(key.type == IDENT); src += key.size; return Builder::makeDot(target, key.str); } NodeRef parseAfterParen(char*& src) { expressionPartsStack.resize(expressionPartsStack.size() + 1); skipSpace(src); NodeRef ret = parseElement(src, ")"); skipSpace(src); assert(*src == ')'); src++; assert(expressionPartsStack.back().size() == 0); expressionPartsStack.pop_back(); return ret; } NodeRef parseAfterBrace(char*& src) { expressionPartsStack.resize(expressionPartsStack.size() + 1); NodeRef ret = Builder::makeArray(); while (1) { skipSpace(src); assert(*src); if (*src == ']') { break; } NodeRef element = parseElement(src, ",]"); Builder::appendToArray(ret, element); skipSpace(src); if (*src == ']') { break; } if (*src == ',') { src++; continue; } abort(); } src++; return ret; } NodeRef parseAfterCurly(char*& src) { expressionPartsStack.resize(expressionPartsStack.size() + 1); NodeRef ret = Builder::makeObject(); while (1) { skipSpace(src); assert(*src); if (*src == '}') { break; } Frag key(src); assert(key.type == IDENT || key.type == STRING); src += key.size; skipSpace(src); assert(*src == ':'); src++; NodeRef value = parseElement(src, ",}"); Builder::appendToObject(ret, key.str, value); skipSpace(src); if (*src == '}') { break; } if (*src == ',') { src++; continue; } abort(); } src++; return ret; } void dumpParts(ExpressionParts& parts, int i) { printf("expressionparts: %d (at %d)\n", parts.size(), i); printf("| "); for (int i = 0; i < parts.size(); i++) { if (parts[i].isNode) { parts[i].getNode()->stringify(std::cout); printf(" "); } else { printf(" _%s_ ", parts[i].getOp().str); } } printf("|\n"); } NodeRef makeBinary(NodeRef left, IString op, NodeRef right) { if (op == PERIOD) { return Builder::makeDot(left, right); } else { return Builder::makeBinary(left, op, right); } } NodeRef parseExpression(ExpressionElement initial, char*& src, const char* seps) { // dump("parseExpression", src); ExpressionParts& parts = expressionPartsStack.back(); skipSpace(src); if (*src == 0 || hasChar(seps, *src)) { if (parts.size() > 0) { parts.push_back(initial); // cherry on top of the cake } return initial.getNode(); } bool top = parts.size() == 0; if (initial.isNode) { Frag next(src); if (next.type == OPERATOR) { parts.push_back(initial); src += next.size; parts.push_back(next.str); } else { if (*src == '(') { initial = parseCall(initial.getNode(), src); } else if (*src == '[') { initial = parseIndexing(initial.getNode(), src); } else { dump("bad parseExpression state", src); abort(); } return parseExpression(initial, src, seps); } } else { parts.push_back(initial); } NodeRef last = parseElement(src, seps); if (!top) { return last; } { // |parts| may have been invalidated by that call ExpressionParts& parts = expressionPartsStack.back(); // we are the toplevel. sort it all out // collapse right to left, highest priority first // dumpParts(parts, 0); for (auto& ops : operatorClasses) { if (ops.rtl) { // right to left for (int i = parts.size() - 1; i >= 0; i--) { if (parts[i].isNode) { continue; } IString op = parts[i].getOp(); if (!ops.ops.has(op)) { continue; } if (ops.type == OperatorClass::Binary && i > 0 && i < (int)parts.size() - 1) { parts[i] = makeBinary(parts[i - 1].getNode(), op, parts[i + 1].getNode()); parts.erase(parts.begin() + i + 1); parts.erase(parts.begin() + i - 1); } else if (ops.type == OperatorClass::Prefix && i < (int)parts.size() - 1) { if (i > 0 && parts[i - 1].isNode) { // cannot apply prefix operator if it would join two nodes continue; } parts[i] = Builder::makePrefix(op, parts[i + 1].getNode()); parts.erase(parts.begin() + i + 1); } else if (ops.type == OperatorClass::Tertiary) { // we must be at X ? Y : Z // ^ // dumpParts(parts, i); if (op != COLON) { continue; } assert(i < (int)parts.size() - 1 && i >= 3); if (parts[i - 2].getOp() != QUESTION) { continue; // e.g. x ? y ? 1 : 0 : 2 } parts[i - 3] = Builder::makeConditional(parts[i - 3].getNode(), parts[i - 1].getNode(), parts[i + 1].getNode()); parts.erase(parts.begin() + i - 2, parts.begin() + i + 2); // basically a reset, due to things like x ? y ? 1 : 0 : 2 i = parts.size(); } // TODO: postfix } } else { // left to right for (int i = 0; i < (int)parts.size(); i++) { if (parts[i].isNode) { continue; } IString op = parts[i].getOp(); if (!ops.ops.has(op)) { continue; } if (ops.type == OperatorClass::Binary && i > 0 && i < (int)parts.size() - 1) { parts[i] = makeBinary(parts[i - 1].getNode(), op, parts[i + 1].getNode()); parts.erase(parts.begin() + i + 1); parts.erase(parts.begin() + i - 1); i--; } else if (ops.type == OperatorClass::Prefix && i < (int)parts.size() - 1) { if (i > 0 && parts[i - 1].isNode) { // cannot apply prefix operator if it would join two nodes continue; } parts[i] = Builder::makePrefix(op, parts[i + 1].getNode()); parts.erase(parts.begin() + i + 1); // allow a previous prefix operator to cascade i = std::max(i - 2, 0); } // TODO: tertiary, postfix } } } assert(parts.size() == 1); NodeRef ret = parts[0].getNode(); parts.clear(); return ret; } } // Parses a block of code (e.g. a bunch of statements inside {,}, or the top // level of o file) NodeRef parseBlock(char*& src, const char* seps = ";", IString keywordSep1 = IString(), IString keywordSep2 = IString()) { NodeRef block = Builder::makeBlock(); // dump("parseBlock", src); while (1) { skipSpace(src); if (*src == 0) { break; } if (*src == ';') { src++; // skip a statement in this block continue; } if (hasChar(seps, *src)) { break; } if (!!keywordSep1) { Frag next(src); if (next.type == KEYWORD && next.str == keywordSep1) { break; } } if (!!keywordSep2) { Frag next(src); if (next.type == KEYWORD && next.str == keywordSep2) { break; } } NodeRef element = parseElementOrStatement(src, seps); Builder::appendToBlock(block, element); } return block; } NodeRef parseBracketedBlock(char*& src) { skipSpace(src); assert(*src == '{'); src++; // the two are not symmetrical, ; is just internally separating, } is the // final one - parseBlock knows all this NodeRef block = parseBlock(src, ";}"); assert(*src == '}'); src++; return block; } NodeRef parseElementOrStatement(char*& src, const char* seps) { skipSpace(src); if (*src == ';') { src++; // we don't need the brackets here, but oh well return Builder::makeBlock(); } if (*src == '{') { // detect a trivial {} in a statement context char* before = src; src++; skipSpace(src); if (*src == '}') { src++; // we don't need the brackets here, but oh well return Builder::makeBlock(); } src = before; } NodeRef ret = parseElement(src, seps); skipSpace(src); if (*src == ';') { ret = Builder::makeStatement(ret); src++; } return ret; } NodeRef parseMaybeBracketed(char*& src, const char* seps) { skipSpace(src); return *src == '{' ? parseBracketedBlock(src) : parseElementOrStatement(src, seps); } NodeRef parseParenned(char*& src) { skipSpace(src); assert(*src == '('); src++; NodeRef ret = parseElement(src, ")"); skipSpace(src); assert(*src == ')'); src++; return ret; } // Debugging char* allSource = nullptr; int allSize = 0; static void dump(const char* where, char* curr) { /* printf("%s:\n=============\n", where); for (int i = 0; i < allSize; i++) printf("%c", allSource[i] ? allSource[i] : '?'); printf("\n"); for (int i = 0; i < (curr - allSource); i++) printf(" "); printf("^\n=============\n"); */ fprintf(stderr, "%s:\n==========\n", where); int newlinesLeft = 2; int charsLeft = 200; while (*curr) { if (*curr == '\n') { newlinesLeft--; if (newlinesLeft == 0) { break; } } charsLeft--; if (charsLeft == 0) { break; } fprintf(stderr, "%c", *curr++); } fprintf(stderr, "\n\n"); } public: Parser() { expressionPartsStack.resize(1); } // Highest-level parsing, as of a JavaScript script file. NodeRef parseToplevel(char* src) { allSource = src; allSize = strlen(src); NodeRef toplevel = Builder::makeToplevel(); Builder::setBlockContent(toplevel, parseBlock(src)); return toplevel; } }; } // namespace cashew #endif // wasm_parser_h binaryen-version_108/src/emscripten-optimizer/simple_ast.cpp000066400000000000000000000105151423707623100245730ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "simple_ast.h" namespace cashew { // Ref methods Ref& Ref::operator[](unsigned x) { return (*get())[x]; } Ref& Ref::operator[](IString x) { return (*get())[x]; } bool Ref::operator==(const char* str) { return get()->isString() && !strcmp(get()->str.str, str); } bool Ref::operator!=(const char* str) { return get()->isString() ? !!strcmp(get()->str.str, str) : true; } bool Ref::operator==(const IString& str) { return get()->isString() && get()->str == str; } bool Ref::operator!=(const IString& str) { return get()->isString() && get()->str != str; } bool Ref::operator==(Ref other) { return **this == *other; } bool Ref::operator!() { return !get() || get()->isNull(); } // Arena GlobalMixedArena arena; // Value Value& Value::setAssign(Ref target, Ref value) { asAssign()->target() = target; asAssign()->value() = value; return *this; } Value& Value::setAssignName(IString target, Ref value) { asAssignName()->target() = target; asAssignName()->value() = value; return *this; } Assign* Value::asAssign() { assert(isAssign()); return static_cast(this); } AssignName* Value::asAssignName() { assert(isAssignName()); return static_cast(this); } void Value::stringify(std::ostream& os, bool pretty) { static int indent = 0; #define indentify() \ { \ for (int i_ = 0; i_ < indent; i_++) \ os << " "; \ } switch (type) { case String: { if (str.str) { os << '"' << str.str << '"'; } else { os << "\"(null)\""; } break; } case Number: { // doubles can have 17 digits of precision os << std::setprecision(17) << num; break; } case Array: { if (arr->size() == 0) { os << "[]"; break; } os << '['; if (pretty) { os << std::endl; indent++; } for (size_t i = 0; i < arr->size(); i++) { if (i > 0) { if (pretty) { os << "," << std::endl; } else { os << ", "; } } indentify(); (*arr)[i]->stringify(os, pretty); } if (pretty) { os << std::endl; indent--; } indentify(); os << ']'; break; } case Null: { os << "null"; break; } case Bool: { os << (boo ? "true" : "false"); break; } case Object: { os << '{'; if (pretty) { os << std::endl; indent++; } bool first = true; for (auto i : *obj) { if (first) { first = false; } else { os << ", "; if (pretty) { os << std::endl; } } indentify(); os << '"' << i.first.c_str() << "\": "; i.second->stringify(os, pretty); } if (pretty) { os << std::endl; indent--; } indentify(); os << '}'; break; } case Assign_: { os << "["; ref->stringify(os, pretty); os << ", "; asAssign()->value()->stringify(os, pretty); os << "]"; break; } case AssignName_: { os << "[\"" << asAssignName()->target().str << "\""; os << ", "; asAssignName()->value()->stringify(os, pretty); os << "]"; break; } } } // dump void dump(const char* str, Ref node, bool pretty) { std::cerr << str << ": "; if (!!node) { node->stringify(std::cerr, pretty); } else { std::cerr << "(nullptr)"; } std::cerr << std::endl; } } // namespace cashew binaryen-version_108/src/emscripten-optimizer/simple_ast.h000066400000000000000000001341041423707623100242410ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_simple_ast_h #define wasm_simple_ast_h #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mixed_arena.h" #include "parser.h" #include "snprintf.h" #include "support/safe_integer.h" #define err(str) fprintf(stderr, str "\n"); #define errv(str, ...) fprintf(stderr, str "\n", __VA_ARGS__); #define printErr err namespace cashew { struct Value; struct Ref; void dump(const char* str, Ref node, bool pretty = false); // Reference to a value, plus some operators for convenience struct Ref { Value* inst; Ref(Value* v = nullptr) : inst(v) {} Value* get() { return inst; } Value& operator*() { return *inst; } Value* operator->() { return inst; } Ref& operator[](unsigned x); Ref& operator[](IString x); // special conveniences bool operator==(const char* str); // comparison to string, which is by value bool operator!=(const char* str); bool operator==(const IString& str); bool operator!=(const IString& str); // prevent Ref == number, which is potentially ambiguous; use ->getNumber() == // number bool operator==(double d) { abort(); return false; } bool operator==(Ref other); bool operator!(); // check if null, in effect }; // Arena allocation, free it all on process exit // A mixed arena for global allocation only, so members do not // receive an allocator, they all use the global one anyhow class GlobalMixedArena : public MixedArena { public: template T* alloc() { auto* ret = static_cast(allocSpace(sizeof(T), alignof(T))); new (ret) T(); return ret; } }; extern GlobalMixedArena arena; class ArrayStorage : public ArenaVectorBase { public: void allocate(size_t size) { allocatedElements = size; data = static_cast( arena.allocSpace(sizeof(Ref) * allocatedElements, alignof(Ref))); } }; struct Assign; struct AssignName; // Main value type struct Value { enum Type { String = 0, Number = 1, Array = 2, Null = 3, Bool = 4, Object = 5, Assign_ = 6, // ref = target AssignName_ = 7 }; Type type = Null; typedef std::unordered_map ObjectStorage; // MSVC does not allow unrestricted unions: // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf #ifdef _MSC_VER IString str; #endif union { // TODO: optimize #ifndef _MSC_VER IString str; #endif double num; ArrayStorage* arr; bool boo; ObjectStorage* obj; Ref ref; }; // constructors all copy their input Value() {} explicit Value(const char* s) { setString(s); } explicit Value(double n) { setNumber(n); } explicit Value(ArrayStorage& a) { setArray(); *arr = a; } // no bool constructor - would endanger the double one (int might convert the // wrong way) ~Value() { free(); } void free() { if (type == Array) { arr->clear(); } else if (type == Object) { delete obj; } type = Null; num = 0; } Value& setString(const char* s) { free(); type = String; str.set(s); return *this; } Value& setString(const IString& s) { free(); type = String; str.set(s); return *this; } Value& setNumber(double n) { free(); type = Number; num = n; return *this; } Value& setArray(ArrayStorage& a) { free(); type = Array; arr = arena.alloc(); *arr = a; return *this; } Value& setArray(size_t size_hint = 0) { free(); type = Array; arr = arena.alloc(); arr->reserve(size_hint); return *this; } Value& setNull() { free(); type = Null; return *this; } // Bool in the name, as otherwise might overload over int Value& setBool(bool b) { free(); type = Bool; boo = b; return *this; } Value& setObject() { free(); type = Object; obj = new ObjectStorage(); return *this; } Value& setAssign(Ref target, Ref value); Value& setAssignName(IString target, Ref value); bool isString() { return type == String; } bool isNumber() { return type == Number; } bool isArray() { return type == Array; } bool isNull() { return type == Null; } bool isBool() { return type == Bool; } bool isObject() { return type == Object; } bool isAssign() { return type == Assign_; } bool isAssignName() { return type == AssignName_; } // avoid overloading == as it might overload over int bool isBool(bool b) { return type == Bool && b == boo; } // convenience function to check if something is an array and // also has a certain string as the first element. This is a // very common operation as the first element defines the node // type for most ast nodes bool isArray(IString name) { return isArray() && (*this)[0] == name; } const char* getCString() { assert(isString()); return str.str; } IString& getIString() { assert(isString()); return str; } double& getNumber() { assert(isNumber()); return num; } ArrayStorage& getArray() { assert(isArray()); return *arr; } bool& getBool() { assert(isBool()); return boo; } Assign* asAssign(); AssignName* asAssignName(); int32_t getInteger() { // convenience function to get a known integer assert(wasm::isInteger(getNumber())); int32_t ret = getNumber(); assert(double(ret) == getNumber()); // no loss in conversion return ret; } Value& operator=(const Value& other) { free(); switch (other.type) { case String: setString(other.str); break; case Number: setNumber(other.num); break; case Array: setArray(*other.arr); break; case Null: setNull(); break; case Bool: setBool(other.boo); break; default: abort(); // TODO } return *this; } bool operator==(const Value& other) { if (type != other.type) { return false; } switch (other.type) { case String: return str == other.str; case Number: return num == other.num; case Array: return this == &other; // if you want a deep compare, use deepCompare case Null: break; case Bool: return boo == other.boo; case Object: return this == &other; // if you want a deep compare, use deepCompare default: abort(); } return true; } char* parse(char* curr) { /* space, tab, linefeed/newline, or return */ #define is_json_space(x) (x == 32 || x == 9 || x == 10 || x == 13) #define skip() \ { \ while (*curr && is_json_space(*curr)) \ curr++; \ } skip(); if (*curr == '"') { // String curr++; char* close = strchr(curr, '"'); assert(close); *close = 0; // end this string, and reuse it straight from the input setString(curr); curr = close + 1; } else if (*curr == '[') { // Array curr++; skip(); setArray(); while (*curr != ']') { Ref temp = arena.alloc(); arr->push_back(temp); curr = temp->parse(curr); skip(); if (*curr == ']') { break; } assert(*curr == ','); curr++; skip(); } curr++; } else if (*curr == 'n') { // Null assert(strncmp(curr, "null", 4) == 0); setNull(); curr += 4; } else if (*curr == 't') { // Bool true assert(strncmp(curr, "true", 4) == 0); setBool(true); curr += 4; } else if (*curr == 'f') { // Bool false assert(strncmp(curr, "false", 5) == 0); setBool(false); curr += 5; } else if (*curr == '{') { // Object curr++; skip(); setObject(); while (*curr != '}') { assert(*curr == '"'); curr++; char* close = strchr(curr, '"'); assert(close); *close = 0; // end this string, and reuse it straight from the input IString key(curr); curr = close + 1; skip(); assert(*curr == ':'); curr++; skip(); Ref value = arena.alloc(); curr = value->parse(curr); (*obj)[key] = value; skip(); if (*curr == '}') { break; } assert(*curr == ','); curr++; skip(); } curr++; } else { // Number char* after; setNumber(strtod(curr, &after)); curr = after; } return curr; } void stringify(std::ostream& os, bool pretty = false); // String operations // Number operations // Array operations size_t size() { assert(isArray()); return arr->size(); } bool empty() { return size() == 0; } void setSize(size_t size) { assert(isArray()); auto old = arr->size(); if (old != size) { arr->resize(size); } if (old < size) { for (auto i = old; i < size; i++) { (*arr)[i] = arena.alloc(); } } } Ref& operator[](unsigned x) { assert(isArray()); return (*arr)[x]; } Value& push_back(Ref r) { assert(isArray()); arr->push_back(r); return *this; } Ref pop_back() { assert(isArray()); Ref ret = arr->back(); arr->pop_back(); return ret; } Ref back() { assert(isArray()); if (arr->size() == 0) { return nullptr; } return arr->back(); } void splice(int x, int num) { assert(isArray()); arr->erase(arr->begin() + x, arr->begin() + x + num); } int indexOf(Ref other) { assert(isArray()); for (size_t i = 0; i < arr->size(); i++) { if (other == (*arr)[i]) { return i; } } return -1; } Ref map(std::function func) { assert(isArray()); Ref ret = arena.alloc(); ret->setArray(); for (size_t i = 0; i < arr->size(); i++) { ret->push_back(func((*arr)[i])); } return ret; } Ref filter(std::function func) { assert(isArray()); Ref ret = arena.alloc(); ret->setArray(); for (size_t i = 0; i < arr->size(); i++) { Ref curr = (*arr)[i]; if (func(curr)) { ret->push_back(curr); } } return ret; } /* void forEach(std::function func) { for (size_t i = 0; i < arr->size(); i++) { func((*arr)[i]); } } */ // Null operations // Bool operations // Object operations Ref& operator[](IString x) { assert(isObject()); return (*obj)[x]; } bool has(IString x) { assert(isObject()); return obj->count(x) > 0; } }; struct Assign : public Value { Ref value_; Assign(Ref targetInit, Ref valueInit) { type = Assign_; target() = targetInit; value() = valueInit; } Assign() : Assign(nullptr, nullptr) {} Ref& target() { return ref; } Ref& value() { return value_; } }; struct AssignName : public Value { IString target_; AssignName(IString targetInit, Ref valueInit) { type = AssignName_; target() = targetInit; value() = valueInit; } AssignName() : AssignName(IString(), nullptr) {} IString& target() { return target_; } Ref& value() { return ref; } }; // JS printing support struct JSPrinter { bool pretty, finalize; char* buffer = nullptr; size_t size = 0; size_t used = 0; int indent = 0; bool possibleSpace = false; // add a space to separate identifiers Ref ast; JSPrinter(bool pretty_, bool finalize_, Ref ast_) : pretty(pretty_), finalize(finalize_), ast(ast_) {} ~JSPrinter() { free(buffer); } void printAst() { print(ast); ensure(1); buffer[used] = 0; } // Utils void ensure(int safety = 100) { if (size >= used + safety) { return; } size = std::max((size_t)1024, size * 2) + safety; if (!buffer) { buffer = (char*)malloc(size); if (!buffer) { errv("Out of memory allocating %zd bytes for output buffer!", size); abort(); } } else { char* buf = (char*)realloc(buffer, size); if (!buf) { free(buffer); errv("Out of memory allocating %zd bytes for output buffer!", size); abort(); } buffer = buf; } } void emit(char c) { maybeSpace(c); if (!pretty && c == '}' && buffer[used - 1] == ';') { used--; // optimize ;} into }, the ; is not separating anything } ensure(1); buffer[used++] = c; } void emit(const char* s) { maybeSpace(*s); int len = strlen(s); ensure(len + 1); strncpy(buffer + used, s, len + 1); used += len; } void newline() { if (!pretty) { return; } emit('\n'); for (int i = 0; i < indent; i++) { emit(' '); } } void space() { if (pretty) { emit(' '); } } void safeSpace() { if (pretty) { emit(' '); } else { possibleSpace = true; } } void maybeSpace(char s) { if (possibleSpace) { possibleSpace = false; if (isIdentPart(s)) { emit(' '); } } } bool isNothing(Ref node) { return node->isArray() && node[0] == TOPLEVEL && node[1]->size() == 0; } bool isDefun(Ref node) { return node->isArray() && node[0] == DEFUN; } bool endsInBlock(Ref node) { if (node->isArray() && node[0] == BLOCK) { return true; } // Check for a label on a block if (node->isArray() && node[0] == LABEL && endsInBlock(node[2])) { return true; } // Check for an if if (node->isArray() && node[0] == IF && endsInBlock(ifHasElse(node) ? node[3] : node[2])) { return true; } return false; } bool isIf(Ref node) { return node->isArray() && node[0] == IF; } void print(Ref node) { ensure(); if (node->isString()) { printName(node); return; } if (node->isNumber()) { printNum(node); return; } if (node->isAssignName()) { printAssignName(node); return; } if (node->isAssign()) { printAssign(node); return; } IString type = node[0]->getIString(); switch (type.str[0]) { case 'a': { if (type == ARRAY) { printArray(node); } else { abort(); } break; } case 'b': { if (type == BINARY) { printBinary(node); } else if (type == BLOCK) { printBlock(node); } else if (type == BREAK) { printBreak(node); } else { abort(); } break; } case 'c': { if (type == CALL) { printCall(node); } else if (type == CONDITIONAL) { printConditional(node); } else if (type == CONTINUE) { printContinue(node); } else { abort(); } break; } case 'd': { if (type == DEFUN) { printDefun(node); } else if (type == DO) { printDo(node); } else if (type == DOT) { printDot(node); } else { abort(); } break; } case 'i': { if (type == IF) { printIf(node); } else { abort(); } break; } case 'l': { if (type == LABEL) { printLabel(node); } else { abort(); } break; } case 'n': { if (type == NEW) { printNew(node); } else { abort(); } break; } case 'o': { if (type == OBJECT) { printObject(node); } break; } case 'r': { if (type == RETURN) { printReturn(node); } else { abort(); } break; } case 's': { if (type == SUB) { printSub(node); } else if (type == SEQ) { printSeq(node); } else if (type == SWITCH) { printSwitch(node); } else if (type == STRING) { printString(node); } else { abort(); } break; } case 't': { if (type == TOPLEVEL) { printToplevel(node); } else if (type == TRY) { printTry(node); } else { abort(); } break; } case 'u': { if (type == UNARY_PREFIX) { printUnaryPrefix(node); } else { abort(); } break; } case 'v': { if (type == VAR) { printVar(node); } else { abort(); } break; } case 'w': { if (type == WHILE) { printWhile(node); } else { abort(); } break; } default: { errv("cannot yet print %s\n", type.str); abort(); } } } // print a node, and if nothing is emitted, emit something instead void print(Ref node, const char* otherwise) { auto last = used; print(node); if (used == last) { emit(otherwise); } } void printStats(Ref stats) { bool first = true; for (size_t i = 0; i < stats->size(); i++) { Ref curr = stats[i]; if (!isNothing(curr)) { if (first) { first = false; } else { newline(); } print(curr); if (!isDefun(curr) && !endsInBlock(curr) && !isIf(curr)) { emit(';'); } } } } void printToplevel(Ref node) { if (node[1]->size() > 0) { printStats(node[1]); } } void printBlock(Ref node) { if (node->size() == 1 || node[1]->size() == 0) { emit("{}"); return; } emit('{'); indent++; newline(); printStats(node[1]); indent--; newline(); emit('}'); } void printDefun(Ref node) { emit("function "); emit(node[1]->getCString()); emit('('); Ref args = node[2]; for (size_t i = 0; i < args->size(); i++) { if (i > 0) { (pretty ? emit(", ") : emit(',')); } emit(args[i]->getCString()); } emit(')'); space(); if (node->size() == 3 || node[3]->size() == 0) { emit("{}"); return; } emit('{'); indent++; newline(); printStats(node[3]); indent--; newline(); emit('}'); newline(); } void printAssign(Ref node) { auto* assign = node->asAssign(); printChild(assign->target(), node, -1); space(); emit('='); space(); printChild(assign->value(), node, 1); } void printAssignName(Ref node) { auto* assign = node->asAssignName(); emit(assign->target().c_str()); space(); emit('='); space(); printChild(assign->value(), node, 1); } void printName(Ref node) { emit(node->getCString()); } static char* numToString(double d, bool finalize = true) { // If this number is NaN or infinite then things are a bit tricky. In JS we // want to eventually use `NaN` and/or `Infinity`, but neither of those // identifiers are valid in asm.js. Instead we have to explicitly import // `NaN` and `Infinity` from the global environment, and those names are // bound locally in an asm function as `nan` and `infinity`. // // TODO: the JS names of `NaN` and `Infinity` should be used once literal // asm.js code isn't generated any more if (std::isnan(d)) { if (std::signbit(d)) { return (char*)"-nan"; } else { return (char*)"nan"; } } else if (!std::isfinite(d)) { if (std::signbit(d)) { return (char*)"-infinity"; } else { return (char*)"infinity"; } } bool neg = d < 0; if (neg) { d = -d; } // try to emit the fewest necessary characters bool integer = wasm::isInteger(d); #define BUFFERSIZE 1000 // f is normal, e is scientific for float, x for integer // These need to be thread-local because they are returned. thread_local char full_storage_f[BUFFERSIZE]; thread_local char full_storage_e[BUFFERSIZE]; // full has one more char, for a possible '-' char* storage_f = full_storage_f + 1; char* storage_e = full_storage_e + 1; auto err_f = std::numeric_limits::quiet_NaN(); auto err_e = std::numeric_limits::quiet_NaN(); for (int e = 0; e <= 1; e++) { char* buffer = e ? storage_e : storage_f; double temp; if (!integer) { char format[6]; for (int i = 0; i <= 18; i++) { format[0] = '%'; format[1] = '.'; if (i < 10) { format[2] = '0' + i; format[3] = e ? 'e' : 'f'; format[4] = 0; } else { format[2] = '1'; format[3] = '0' + (i - 10); format[4] = e ? 'e' : 'f'; format[5] = 0; } snprintf(buffer, BUFFERSIZE - 1, format, d); sscanf(buffer, "%lf", &temp); // errv("%.18f, %.18e => %s => %.18f, %.18e (%d), ", d, d, // buffer, temp, temp, temp == d); if (temp == d) { break; } } } else { // integer assert(d >= 0); if (wasm::isUInteger64(d)) { unsigned long long uu = wasm::toUInteger64(d); bool asHex = e && !finalize; snprintf(buffer, BUFFERSIZE - 1, asHex ? "0x%llx" : "%llu", uu); if (asHex) { unsigned long long tempULL; sscanf(buffer, "%llx", &tempULL); temp = (double)tempULL; } else { sscanf(buffer, "%lf", &temp); } } else { // too large for a machine integer, just use floats // even on integers, e with a dot is useful, e.g. 1.2e+200 snprintf(buffer, BUFFERSIZE - 1, e ? "%e" : "%.0f", d); sscanf(buffer, "%lf", &temp); } // errv("%.18f, %.18e => %s => %.18f, %.18e, %llu (%d)\n", d, // d, buffer, temp, temp, uu, temp == d); } (e ? err_e : err_f) = fabs(temp - d); // errv("current attempt: %.18f => %s", d, buffer); // assert(temp == d); char* dot = strchr(buffer, '.'); if (dot) { // remove trailing zeros char* end = dot + 1; while (*end >= '0' && *end <= '9') { end++; } end--; while (*end == '0') { char* copy = end; do { copy[0] = copy[1]; } while (*copy++ != 0); end--; } // errv("%.18f => %s", d, buffer); // remove preceding zeros while (*buffer == '0') { char* copy = buffer; do { copy[0] = copy[1]; } while (*copy++ != 0); } // errv("%.18f ===> %s", d, buffer); } else if (!integer || !e) { // no dot. try to change 12345000 => 12345e3 char* end = strchr(buffer, 0); end--; char* test = end; // remove zeros, and also doubles can use at most 24 digits, we can // truncate any extras even if not zero while ((*test == '0' || test - buffer > 24) && test > buffer) { test--; } int num = end - test; if (num >= 3) { test++; test[0] = 'e'; if (num < 10) { test[1] = '0' + num; test[2] = 0; } else if (num < 100) { test[1] = '0' + (num / 10); test[2] = '0' + (num % 10); test[3] = 0; } else { assert(num < 1000); test[1] = '0' + (num / 100); test[2] = '0' + (num % 100) / 10; test[3] = '0' + (num % 10); test[4] = 0; } } } // errv("..current attempt: %.18f => %s", d, buffer); } // fprintf(stderr, "options:\n%s\n%s\n (first? %d)\n", storage_e, storage_f, // strlen(storage_e) < strlen(storage_f)); char* ret; if (err_e == err_f) { ret = strlen(storage_e) < strlen(storage_f) ? storage_e : storage_f; } else { ret = err_e < err_f ? storage_e : storage_f; } if (neg) { ret--; // safe to go back one, there is one more char in full_* *ret = '-'; } return ret; } void printNum(Ref node) { if (node->getNumber() < 0 && buffer[used - 1] == '-') { emit(' '); // cannot join - and - to --, looks like the -- operator } emit(numToString(node->getNumber(), finalize)); } void printString(Ref node) { emit('"'); emit(node[1]->getCString()); emit('"'); } // Parens optimizing bool capturesOperators(Ref node) { Ref type = node[0]; return type == CALL || type == ARRAY || type == OBJECT || type == SEQ; } int getPrecedence(Ref node, bool parent) { if (node->isAssign() || node->isAssignName()) { return OperatorClass::getPrecedence(OperatorClass::Binary, SET); } if (!node->isArray()) { // node is a value return -1; } Ref type = node[0]; if (type == BINARY || type == UNARY_PREFIX) { return OperatorClass::getPrecedence( type == BINARY ? OperatorClass::Binary : OperatorClass::Prefix, node[1]->getIString()); } else if (type == SEQ) { return OperatorClass::getPrecedence(OperatorClass::Binary, COMMA); } else if (type == CALL) { // call arguments are split by commas, but call itself is safe return parent ? OperatorClass::getPrecedence(OperatorClass::Binary, COMMA) : -1; } else if (type == CONDITIONAL) { return OperatorClass::getPrecedence(OperatorClass::Tertiary, QUESTION); } // otherwise, this is something that fixes precedence explicitly, and we can // ignore return -1; // XXX } // check whether we need parens for the child, when rendered in the parent // @param childPosition -1 means it is printed to the left of parent, 0 means // "anywhere", 1 means right bool needParens(Ref parent, Ref child, int childPosition) { int parentPrecedence = getPrecedence(parent, true); int childPrecedence = getPrecedence(child, false); if (childPrecedence > parentPrecedence) { return true; // child is definitely a danger } if (childPrecedence < parentPrecedence) { return false; // definitely cool } // equal precedence, so associativity (rtl/ltr) is what matters // (except for some exceptions, where multiple operators can combine into // confusion) if (parent->isArray() && parent[0] == UNARY_PREFIX) { assert(child[0] == UNARY_PREFIX); if ((parent[1] == PLUS || parent[1] == MINUS) && child[1] == parent[1]) { // cannot emit ++x when we mean +(+x) return true; } } if (childPosition == 0) { return true; // child could be anywhere, so always paren } if (childPrecedence < 0) { return false; // both precedences are safe } // check if child is on the dangerous side if (OperatorClass::getRtl(parentPrecedence)) { return childPosition < 0; } else { return childPosition > 0; } } void printChild(Ref child, Ref parent, int childPosition = 0) { bool parens = needParens(parent, child, childPosition); if (parens) { emit('('); } print(child); if (parens) { emit(')'); } } void printBinary(Ref node) { printChild(node[2], node, -1); space(); emit(node[1]->getCString()); space(); printChild(node[3], node, 1); } void printUnaryPrefix(Ref node) { if (finalize && node[1] == PLUS && (node[2]->isNumber() || (node[2]->isArray() && node[2][0] == UNARY_PREFIX && node[2][1] == MINUS && node[2][2]->isNumber()))) { // emit a finalized number int last = used; print(node[2]); ensure(1); // we temporarily append a 0 char* curr = buffer + last; // ensure might invalidate buffer[used] = 0; if (strstr(curr, "infinity")) { return; } if (strstr(curr, "nan")) { return; } if (strchr(curr, '.')) { return; // already a decimal point, all good } char* e = strchr(curr, 'e'); if (!e) { emit(".0"); return; } ensure(3); curr = buffer + last; // ensure might invalidate char* end = strchr(curr, 0); while (end >= e) { end[2] = end[0]; end--; } e[0] = '.'; e[1] = '0'; used += 2; return; } if ((buffer[used - 1] == '-' && node[1] == MINUS) || (buffer[used - 1] == '+' && node[1] == PLUS)) { emit(' '); // cannot join - and - to --, looks like the -- operator } emit(node[1]->getCString()); printChild(node[2], node, 1); } void printConditional(Ref node) { printChild(node[1], node, -1); space(); emit('?'); space(); printChild(node[2], node, 0); space(); emit(':'); space(); printChild(node[3], node, 1); } void printCall(Ref node) { printChild(node[1], node, 0); emit('('); Ref args = node[2]; for (size_t i = 0; i < args->size(); i++) { if (i > 0) { (pretty ? emit(", ") : emit(',')); } printChild(args[i], node, 0); } emit(')'); } void printSeq(Ref node) { printChild(node[1], node, -1); emit(','); space(); printChild(node[2], node, 1); } void printDot(Ref node) { print(node[1]); emit('.'); emit(node[2]->getCString()); } void printSwitch(Ref node) { emit("switch"); space(); emit('('); print(node[1]); emit(')'); space(); emit('{'); newline(); Ref cases = node[2]; for (size_t i = 0; i < cases->size(); i++) { Ref c = cases[i]; if (!c[0]) { emit("default:"); } else { emit("case "); print(c[0]); emit(':'); } if (c[1]->size() > 0) { indent++; newline(); auto curr = used; printStats(c[1]); indent--; if (curr != used) { newline(); } else { used--; // avoid the extra indentation we added tentatively } } else { newline(); } } emit('}'); } void printTry(Ref node) { emit("try "); printBlock(node[1]); emit(" catch ("); printName(node[2]); emit(") "); printBlock(node[3]); } void printSub(Ref node) { printChild(node[1], node, -1); emit('['); print(node[2]); emit(']'); } void printVar(Ref node) { emit("var "); Ref args = node[1]; for (size_t i = 0; i < args->size(); i++) { if (i > 0) { (pretty ? emit(", ") : emit(',')); } emit(args[i][0]->getCString()); if (args[i]->size() > 1) { space(); emit('='); space(); print(args[i][1]); } } } static bool isBlock(Ref node) { return node->isArray() && !node->empty() && node[0] == BLOCK; } static bool ifHasElse(Ref node) { assert(node->isArray() && node[0] == IF); return node->size() >= 4 && !!node[3]; } void printIf(Ref node) { emit("if"); safeSpace(); emit('('); print(node[1]); emit(')'); space(); bool emitsBracesAnyhow = isBlock(node[2]); if (!emitsBracesAnyhow) { emit('{'); indent++; newline(); } print(node[2]); if (!emitsBracesAnyhow) { indent--; newline(); emit('}'); } if (ifHasElse(node)) { space(); emit("else"); safeSpace(); bool emitsBracesAnyhow = isBlock(node[3]); if (!emitsBracesAnyhow) { emit('{'); indent++; newline(); } print(node[3]); if (!emitsBracesAnyhow) { indent--; newline(); emit('}'); } } } void printDo(Ref node) { emit("do"); safeSpace(); print(node[2], "{}"); space(); emit("while"); space(); emit('('); print(node[1]); emit(')'); } void printWhile(Ref node) { emit("while"); space(); emit('('); print(node[1]); emit(')'); space(); print(node[2], "{}"); } void printLabel(Ref node) { emit(node[1]->getCString()); space(); emit(':'); space(); print(node[2]); } void printReturn(Ref node) { emit("return"); if (!!node[1]) { emit(' '); print(node[1]); } } void printBreak(Ref node) { emit("break"); if (!!node[1]) { emit(' '); emit(node[1]->getCString()); } } void printContinue(Ref node) { emit("continue"); if (!!node[1]) { emit(' '); emit(node[1]->getCString()); } } void printNew(Ref node) { emit("new "); print(node[1]); } void printArray(Ref node) { emit('['); Ref args = node[1]; for (size_t i = 0; i < args->size(); i++) { if (i > 0) { (pretty ? emit(", ") : emit(',')); } print(args[i]); } emit(']'); } void printObject(Ref node) { emit('{'); indent++; newline(); Ref args = node[1]; for (size_t i = 0; i < args->size(); i++) { if (i > 0) { pretty ? emit(", ") : emit(','); newline(); } bool needQuote = false; const char* getterSetter = nullptr; const char* setterParam = nullptr; const char* str; if (args[i][0]->isArray()) { if (args[i][0][0] == STRING) { // A quoted string. needQuote = true; str = args[i][0][1]->getCString(); } else if (args[i][0][0] == GETTER) { getterSetter = GETTER.c_str(); str = args[i][0][1]->getCString(); } else if (args[i][0][0] == SETTER) { getterSetter = SETTER.c_str(); str = args[i][0][1]->getCString(); setterParam = args[i][0][2]->getCString(); } else { abort(); } } else { // Just a raw string, no quotes. str = args[i][0]->getCString(); } const char* check = str; while (*check) { if (!isalnum(*check) && *check != '_' && *check != '$') { needQuote = true; break; } check++; } if (getterSetter != nullptr) { emit(getterSetter); space(); } if (needQuote) { emit('"'); } emit(str); if (needQuote) { emit('"'); } if (getterSetter != nullptr) { emit('('); if (setterParam != nullptr) { emit(setterParam); } emit(')'); } else { emit(":"); } space(); print(args[i][1]); } indent--; newline(); emit('}'); } }; // cashew builder class ValueBuilder { static Ref makeRawString(const IString& s) { return &arena.alloc()->setString(s); } static Ref makeNull() { return &arena.alloc()->setNull(); } public: static Ref makeRawArray(int size_hint = 0) { return &arena.alloc()->setArray(size_hint); } static Ref makeToplevel() { return &makeRawArray(2) ->push_back(makeRawString(TOPLEVEL)) .push_back(makeRawArray()); } static Ref makeString(IString str) { return &makeRawArray(2) ->push_back(makeRawString(STRING)) .push_back(makeRawString(str)); } static Ref makeBlock() { return &makeRawArray(2) ->push_back(makeRawString(BLOCK)) .push_back(makeRawArray()); } static Ref makeName(IString name) { return makeRawString(name); } static void setBlockContent(Ref target, Ref block) { if (target[0] == TOPLEVEL) { target[1]->setArray(block[1]->getArray()); } else if (target[0] == DEFUN) { target[3]->setArray(block[1]->getArray()); } else { abort(); } } static void appendToBlock(Ref block, Ref element) { assert(block[0] == BLOCK); block[1]->push_back(element); } static Ref makeCall(Ref target) { return &makeRawArray(3) ->push_back(makeRawString(CALL)) .push_back(target) .push_back(makeRawArray()); } static Ref makeCall(Ref target, Ref arg) { Ref ret = &makeRawArray(3) ->push_back(makeRawString(CALL)) .push_back(target) .push_back(makeRawArray()); ret[2]->push_back(arg); return ret; } static Ref makeCall(IString target) { Ref ret = &makeRawArray(3) ->push_back(makeRawString(CALL)) .push_back(makeName(target)) .push_back(makeRawArray()); return ret; } template static Ref makeCall(IString target, Ts... args) { size_t nArgs = sizeof...(Ts); Ref callArgs = makeRawArray(nArgs); Ref argArray[] = {args...}; for (size_t i = 0; i < nArgs; ++i) { callArgs->push_back(argArray[i]); } return &makeRawArray(3) ->push_back(makeRawString(CALL)) .push_back(makeName(target)) .push_back(callArgs); } static void appendToCall(Ref call, Ref element) { assert(call[0] == CALL); call[2]->push_back(element); } static Ref makeStatement(Ref contents) { return contents; } static Ref makeDouble(double num) { return &arena.alloc()->setNumber(num); } static Ref makeInt(uint32_t num) { return makeDouble(double(num)); } static Ref makeInt(int32_t num) { return makeDouble(double(num)); } static Ref makeNum(double num) { return makeDouble(num); } static Ref makeUnary(IString op, Ref value) { return &makeRawArray(3) ->push_back(makeRawString(UNARY_PREFIX)) .push_back(makeRawString(op)) .push_back(value); } static Ref makeBinary(Ref left, IString op, Ref right) { if (op == SET) { if (left->isString()) { return &arena.alloc()->setAssignName(left->getIString(), right); } else { return &arena.alloc()->setAssign(left, right); } } else if (op == COMMA) { return &makeRawArray(3) ->push_back(makeRawString(SEQ)) .push_back(left) .push_back(right); } else { return &makeRawArray(4) ->push_back(makeRawString(BINARY)) .push_back(makeRawString(op)) .push_back(left) .push_back(right); } } static Ref makePrefix(IString op, Ref right) { return &makeRawArray(3) ->push_back(makeRawString(UNARY_PREFIX)) .push_back(makeRawString(op)) .push_back(right); } static Ref makeFunction(IString name) { return &makeRawArray(4) ->push_back(makeRawString(DEFUN)) .push_back(makeRawString(name)) .push_back(makeRawArray()) .push_back(makeRawArray()); } static void appendArgumentToFunction(Ref func, IString arg) { assert(func[0] == DEFUN); func[2]->push_back(makeRawString(arg)); } static Ref makeVar(bool is_const = false) { return &makeRawArray(2) ->push_back(makeRawString(VAR)) .push_back(makeRawArray()); } static void appendToVar(Ref var, IString name, Ref value) { assert(var[0] == VAR); Ref array = &makeRawArray(1)->push_back(makeRawString(name)); if (!!value) { array->push_back(value); } var[1]->push_back(array); } static Ref makeReturn(Ref value) { return &makeRawArray(2) ->push_back(makeRawString(RETURN)) .push_back(!!value ? value : makeNull()); } static Ref makeIndexing(Ref target, Ref index) { return &makeRawArray(3) ->push_back(makeRawString(SUB)) .push_back(target) .push_back(index); } static Ref makeIf(Ref condition, Ref ifTrue, Ref ifFalse) { return &makeRawArray(4) ->push_back(makeRawString(IF)) .push_back(condition) .push_back(ifTrue) .push_back(!!ifFalse ? ifFalse : makeNull()); } static Ref makeConditional(Ref condition, Ref ifTrue, Ref ifFalse) { return &makeRawArray(4) ->push_back(makeRawString(CONDITIONAL)) .push_back(condition) .push_back(ifTrue) .push_back(ifFalse); } static Ref makeSeq(Ref left, Ref right) { return &makeRawArray(3) ->push_back(makeRawString(SEQ)) .push_back(left) .push_back(right); } static Ref makeDo(Ref body, Ref condition) { return &makeRawArray(3) ->push_back(makeRawString(DO)) .push_back(condition) .push_back(body); } static Ref makeWhile(Ref condition, Ref body) { return &makeRawArray(3) ->push_back(makeRawString(WHILE)) .push_back(condition) .push_back(body); } static Ref makeFor(Ref init, Ref condition, Ref inc, Ref body) { return &makeRawArray(5) ->push_back(makeRawString(FOR)) .push_back(init) .push_back(condition) .push_back(inc) .push_back(body); } static Ref makeBreak(IString label) { return &makeRawArray(2) ->push_back(makeRawString(BREAK)) .push_back(!!label ? makeRawString(label) : makeNull()); } static Ref makeContinue(IString label) { return &makeRawArray(2) ->push_back(makeRawString(CONTINUE)) .push_back(!!label ? makeRawString(label) : makeNull()); } static Ref makeLabel(IString name, Ref body) { return &makeRawArray(3) ->push_back(makeRawString(LABEL)) .push_back(makeRawString(name)) .push_back(body); } static Ref makeSwitch(Ref input) { return &makeRawArray(3) ->push_back(makeRawString(SWITCH)) .push_back(input) .push_back(makeRawArray()); } static void appendCaseToSwitch(Ref switch_, Ref arg) { assert(switch_[0] == SWITCH); switch_[2]->push_back( &makeRawArray(2)->push_back(arg).push_back(makeRawArray())); } static void appendDefaultToSwitch(Ref switch_) { assert(switch_[0] == SWITCH); switch_[2]->push_back( &makeRawArray(2)->push_back(makeNull()).push_back(makeRawArray())); } static void appendCodeToSwitch(Ref switch_, Ref code, bool explicitBlock) { assert(switch_[0] == SWITCH); assert(code[0] == BLOCK); if (!explicitBlock) { for (size_t i = 0; i < code[1]->size(); i++) { switch_[2]->back()->back()->push_back(code[1][i]); } } else { switch_[2]->back()->back()->push_back(code); } } static Ref makeTry(Ref try_, Ref arg, Ref catch_) { assert(try_[0] == BLOCK); assert(catch_[0] == BLOCK); return &makeRawArray(3) ->push_back(makeRawString(TRY)) .push_back(try_) .push_back(arg) .push_back(catch_); } static Ref makeDot(Ref obj, IString key) { return &makeRawArray(3) ->push_back(makeRawString(DOT)) .push_back(obj) .push_back(makeRawString(key)); } template static Ref makeDot(Ref obj, Ref key, Ts... args) { return makeDot(makeDot(obj, key), args...); } static Ref makeDot(Ref obj, Ref key) { assert(key->isString()); return makeDot(obj, key->getIString()); } static Ref makeNew(Ref call) { return &makeRawArray(2)->push_back(makeRawString(NEW)).push_back(call); } static Ref makeArray() { return &makeRawArray(2) ->push_back(makeRawString(ARRAY)) .push_back(makeRawArray()); } static void appendToArray(Ref array, Ref element) { assert(array[0] == ARRAY); array[1]->push_back(element); } static Ref makeObject() { return &makeRawArray(2) ->push_back(makeRawString(OBJECT)) .push_back(makeRawArray()); } static void appendToObject(Ref array, IString key, Ref value) { assert(array[0] == OBJECT); array[1]->push_back( &makeRawArray(2)->push_back(makeRawString(key)).push_back(value)); } static void appendToObjectWithQuotes(Ref array, IString key, Ref value) { assert(array[0] == OBJECT); array[1]->push_back( &makeRawArray(2)->push_back(makeString(key)).push_back(value)); } static void appendToObjectAsGetter(Ref array, IString key, Ref value) { assert(array[0] == OBJECT); array[1]->push_back(&makeRawArray(2) ->push_back(&makeRawArray(2) ->push_back(makeRawString(GETTER)) .push_back(makeRawString(key))) .push_back(value)); } static void appendToObjectAsSetter(Ref array, IString key, IString param, Ref value) { assert(array[0] == OBJECT); array[1]->push_back(&makeRawArray(2) ->push_back(&makeRawArray(3) ->push_back(makeRawString(SETTER)) .push_back(makeRawString(key)) .push_back(makeRawString(param))) .push_back(value)); } static Ref makeSub(Ref obj, Ref index) { return &makeRawArray(2) ->push_back(makeRawString(SUB)) .push_back(obj) .push_back(index); } static Ref makePtrShift(Ref ptr, int shifts) { return makeBinary(ptr, RSHIFT, makeInt(shifts)); } }; // Tolerates 0.0 in the input; does not trust a +() to be there. class DotZeroValueBuilder : public ValueBuilder { public: static Ref makeDouble(double num) { return makePrefix(PLUS, ValueBuilder::makeDouble(num)); } }; } // namespace cashew #endif // wasm_simple_ast_h binaryen-version_108/src/emscripten-optimizer/snprintf.h000066400000000000000000000024571423707623100237510ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_snprintf_h #define wasm_snprintf_h #include // Visual Studio does not support C99, so emulate snprintf support for it // manually. #ifdef _MSC_VER #define snprintf c99_snprintf inline int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap) { int count = -1; if (size != 0) count = _vsnprintf_s(str, size, _TRUNCATE, format, ap); if (count == -1) count = _vscprintf(format, ap); return count; } inline int c99_snprintf(char* str, size_t size, const char* format, ...) { int count; va_list ap; va_start(ap, format); count = c99_vsnprintf(str, size, format, ap); va_end(ap); return count; } #endif #endif // wasm_snprintf_h binaryen-version_108/src/gen-s-parser.inc000066400000000000000000004637671423707623100205610ustar00rootroot00000000000000// DO NOT EDIT! This file generated by scripts/gen-s-parser.py // clang-format off #ifdef INSTRUCTION_PARSER #undef INSTRUCTION_PARSER char op[33] = {'\0'}; strncpy(op, s[0]->c_str(), 32); switch (op[0]) { case 'a': { switch (op[1]) { case 'r': { switch (op[6]) { case 'c': if (strcmp(op, "array.copy") == 0) { return makeArrayCopy(s); } goto parse_error; case 'g': { switch (op[9]) { case '\0': if (strcmp(op, "array.get") == 0) { return makeArrayGet(s); } goto parse_error; case '_': { switch (op[10]) { case 's': if (strcmp(op, "array.get_s") == 0) { return makeArrayGet(s, true); } goto parse_error; case 'u': if (strcmp(op, "array.get_u") == 0) { return makeArrayGet(s, false); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'i': { switch (op[10]) { case '\0': if (strcmp(op, "array.init") == 0) { return makeArrayInit(s); } goto parse_error; case '_': if (strcmp(op, "array.init_static") == 0) { return makeArrayInitStatic(s); } goto parse_error; default: goto parse_error; } } case 'l': if (strcmp(op, "array.len") == 0) { return makeArrayLen(s); } goto parse_error; case 'n': { switch (op[9]) { case '\0': if (strcmp(op, "array.new") == 0) { return makeArrayNewStatic(s, false); } goto parse_error; case '_': { switch (op[10]) { case 'd': { switch (op[17]) { case '\0': if (strcmp(op, "array.new_default") == 0) { return makeArrayNewStatic(s, true); } goto parse_error; case '_': if (strcmp(op, "array.new_default_with_rtt") == 0) { return makeArrayNew(s, true); } goto parse_error; default: goto parse_error; } } case 'w': if (strcmp(op, "array.new_with_rtt") == 0) { return makeArrayNew(s, false); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 's': if (strcmp(op, "array.set") == 0) { return makeArraySet(s); } goto parse_error; default: goto parse_error; } } case 't': if (strcmp(op, "atomic.fence") == 0) { return makeAtomicFence(s); } goto parse_error; default: goto parse_error; } } case 'b': { switch (op[1]) { case 'l': if (strcmp(op, "block") == 0) { return makeBlock(s); } goto parse_error; case 'r': { switch (op[2]) { case '\0': if (strcmp(op, "br") == 0) { return makeBreak(s); } goto parse_error; case '_': { switch (op[3]) { case 'i': if (strcmp(op, "br_if") == 0) { return makeBreak(s); } goto parse_error; case 'o': { switch (op[6]) { case 'c': { switch (op[10]) { case '\0': if (strcmp(op, "br_on_cast") == 0) { return makeBrOn(s, BrOnCast); } goto parse_error; case '_': { switch (op[11]) { case 'f': if (strcmp(op, "br_on_cast_fail") == 0) { return makeBrOn(s, BrOnCastFail); } goto parse_error; case 's': { switch (op[17]) { case '\0': if (strcmp(op, "br_on_cast_static") == 0) { return makeBrOnStatic(s, BrOnCast); } goto parse_error; case '_': if (strcmp(op, "br_on_cast_static_fail") == 0) { return makeBrOnStatic(s, BrOnCastFail); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'd': if (strcmp(op, "br_on_data") == 0) { return makeBrOn(s, BrOnData); } goto parse_error; case 'f': if (strcmp(op, "br_on_func") == 0) { return makeBrOn(s, BrOnFunc); } goto parse_error; case 'i': if (strcmp(op, "br_on_i31") == 0) { return makeBrOn(s, BrOnI31); } goto parse_error; case 'n': { switch (op[7]) { case 'o': { switch (op[10]) { case 'd': if (strcmp(op, "br_on_non_data") == 0) { return makeBrOn(s, BrOnNonData); } goto parse_error; case 'f': if (strcmp(op, "br_on_non_func") == 0) { return makeBrOn(s, BrOnNonFunc); } goto parse_error; case 'i': if (strcmp(op, "br_on_non_i31") == 0) { return makeBrOn(s, BrOnNonI31); } goto parse_error; case 'n': if (strcmp(op, "br_on_non_null") == 0) { return makeBrOn(s, BrOnNonNull); } goto parse_error; default: goto parse_error; } } case 'u': if (strcmp(op, "br_on_null") == 0) { return makeBrOn(s, BrOnNull); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 't': if (strcmp(op, "br_table") == 0) { return makeBreakTable(s); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'c': { switch (op[4]) { case '\0': if (strcmp(op, "call") == 0) { return makeCall(s, /*isReturn=*/false); } goto parse_error; case '_': { switch (op[5]) { case 'i': if (strcmp(op, "call_indirect") == 0) { return makeCallIndirect(s, /*isReturn=*/false); } goto parse_error; case 'r': if (strcmp(op, "call_ref") == 0) { return makeCallRef(s, /*isReturn=*/false); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'd': { switch (op[1]) { case 'a': if (strcmp(op, "data.drop") == 0) { return makeDataDrop(s); } goto parse_error; case 'r': if (strcmp(op, "drop") == 0) { return makeDrop(s); } goto parse_error; default: goto parse_error; } } case 'e': if (strcmp(op, "else") == 0) { return makeThenOrElse(s); } goto parse_error; case 'f': { switch (op[1]) { case '3': { switch (op[3]) { case '.': { switch (op[4]) { case 'a': { switch (op[5]) { case 'b': if (strcmp(op, "f32.abs") == 0) { return makeUnary(s, UnaryOp::AbsFloat32); } goto parse_error; case 'd': if (strcmp(op, "f32.add") == 0) { return makeBinary(s, BinaryOp::AddFloat32); } goto parse_error; default: goto parse_error; } } case 'c': { switch (op[5]) { case 'e': if (strcmp(op, "f32.ceil") == 0) { return makeUnary(s, UnaryOp::CeilFloat32); } goto parse_error; case 'o': { switch (op[6]) { case 'n': { switch (op[7]) { case 's': if (strcmp(op, "f32.const") == 0) { return makeConst(s, Type::f32); } goto parse_error; case 'v': { switch (op[13]) { case '3': { switch (op[16]) { case 's': if (strcmp(op, "f32.convert_i32_s") == 0) { return makeUnary(s, UnaryOp::ConvertSInt32ToFloat32); } goto parse_error; case 'u': if (strcmp(op, "f32.convert_i32_u") == 0) { return makeUnary(s, UnaryOp::ConvertUInt32ToFloat32); } goto parse_error; default: goto parse_error; } } case '6': { switch (op[16]) { case 's': if (strcmp(op, "f32.convert_i64_s") == 0) { return makeUnary(s, UnaryOp::ConvertSInt64ToFloat32); } goto parse_error; case 'u': if (strcmp(op, "f32.convert_i64_u") == 0) { return makeUnary(s, UnaryOp::ConvertUInt64ToFloat32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "f32.copysign") == 0) { return makeBinary(s, BinaryOp::CopySignFloat32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'd': { switch (op[5]) { case 'e': if (strcmp(op, "f32.demote_f64") == 0) { return makeUnary(s, UnaryOp::DemoteFloat64); } goto parse_error; case 'i': if (strcmp(op, "f32.div") == 0) { return makeBinary(s, BinaryOp::DivFloat32); } goto parse_error; default: goto parse_error; } } case 'e': if (strcmp(op, "f32.eq") == 0) { return makeBinary(s, BinaryOp::EqFloat32); } goto parse_error; case 'f': if (strcmp(op, "f32.floor") == 0) { return makeUnary(s, UnaryOp::FloorFloat32); } goto parse_error; case 'g': { switch (op[5]) { case 'e': if (strcmp(op, "f32.ge") == 0) { return makeBinary(s, BinaryOp::GeFloat32); } goto parse_error; case 't': if (strcmp(op, "f32.gt") == 0) { return makeBinary(s, BinaryOp::GtFloat32); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[5]) { case 'e': if (strcmp(op, "f32.le") == 0) { return makeBinary(s, BinaryOp::LeFloat32); } goto parse_error; case 'o': if (strcmp(op, "f32.load") == 0) { return makeLoad(s, Type::f32, /*isAtomic=*/false); } goto parse_error; case 't': if (strcmp(op, "f32.lt") == 0) { return makeBinary(s, BinaryOp::LtFloat32); } goto parse_error; default: goto parse_error; } } case 'm': { switch (op[5]) { case 'a': if (strcmp(op, "f32.max") == 0) { return makeBinary(s, BinaryOp::MaxFloat32); } goto parse_error; case 'i': if (strcmp(op, "f32.min") == 0) { return makeBinary(s, BinaryOp::MinFloat32); } goto parse_error; case 'u': if (strcmp(op, "f32.mul") == 0) { return makeBinary(s, BinaryOp::MulFloat32); } goto parse_error; default: goto parse_error; } } case 'n': { switch (op[6]) { case '\0': if (strcmp(op, "f32.ne") == 0) { return makeBinary(s, BinaryOp::NeFloat32); } goto parse_error; case 'a': if (strcmp(op, "f32.nearest") == 0) { return makeUnary(s, UnaryOp::NearestFloat32); } goto parse_error; case 'g': if (strcmp(op, "f32.neg") == 0) { return makeUnary(s, UnaryOp::NegFloat32); } goto parse_error; default: goto parse_error; } } case 'r': if (strcmp(op, "f32.reinterpret_i32") == 0) { return makeUnary(s, UnaryOp::ReinterpretInt32); } goto parse_error; case 's': { switch (op[5]) { case 'q': if (strcmp(op, "f32.sqrt") == 0) { return makeUnary(s, UnaryOp::SqrtFloat32); } goto parse_error; case 't': if (strcmp(op, "f32.store") == 0) { return makeStore(s, Type::f32, /*isAtomic=*/false); } goto parse_error; case 'u': if (strcmp(op, "f32.sub") == 0) { return makeBinary(s, BinaryOp::SubFloat32); } goto parse_error; default: goto parse_error; } } case 't': if (strcmp(op, "f32.trunc") == 0) { return makeUnary(s, UnaryOp::TruncFloat32); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[6]) { case 'a': { switch (op[7]) { case 'b': if (strcmp(op, "f32x4.abs") == 0) { return makeUnary(s, UnaryOp::AbsVecF32x4); } goto parse_error; case 'd': if (strcmp(op, "f32x4.add") == 0) { return makeBinary(s, BinaryOp::AddVecF32x4); } goto parse_error; default: goto parse_error; } } case 'c': { switch (op[7]) { case 'e': if (strcmp(op, "f32x4.ceil") == 0) { return makeUnary(s, UnaryOp::CeilVecF32x4); } goto parse_error; case 'o': { switch (op[20]) { case 's': if (strcmp(op, "f32x4.convert_i32x4_s") == 0) { return makeUnary(s, UnaryOp::ConvertSVecI32x4ToVecF32x4); } goto parse_error; case 'u': if (strcmp(op, "f32x4.convert_i32x4_u") == 0) { return makeUnary(s, UnaryOp::ConvertUVecI32x4ToVecF32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'd': { switch (op[7]) { case 'e': if (strcmp(op, "f32x4.demote_f64x2_zero") == 0) { return makeUnary(s, UnaryOp::DemoteZeroVecF64x2ToVecF32x4); } goto parse_error; case 'i': if (strcmp(op, "f32x4.div") == 0) { return makeBinary(s, BinaryOp::DivVecF32x4); } goto parse_error; default: goto parse_error; } } case 'e': { switch (op[7]) { case 'q': if (strcmp(op, "f32x4.eq") == 0) { return makeBinary(s, BinaryOp::EqVecF32x4); } goto parse_error; case 'x': if (strcmp(op, "f32x4.extract_lane") == 0) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF32x4, 4); } goto parse_error; default: goto parse_error; } } case 'f': if (strcmp(op, "f32x4.floor") == 0) { return makeUnary(s, UnaryOp::FloorVecF32x4); } goto parse_error; case 'g': { switch (op[7]) { case 'e': if (strcmp(op, "f32x4.ge") == 0) { return makeBinary(s, BinaryOp::GeVecF32x4); } goto parse_error; case 't': if (strcmp(op, "f32x4.gt") == 0) { return makeBinary(s, BinaryOp::GtVecF32x4); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[7]) { case 'e': if (strcmp(op, "f32x4.le") == 0) { return makeBinary(s, BinaryOp::LeVecF32x4); } goto parse_error; case 't': if (strcmp(op, "f32x4.lt") == 0) { return makeBinary(s, BinaryOp::LtVecF32x4); } goto parse_error; default: goto parse_error; } } case 'm': { switch (op[7]) { case 'a': if (strcmp(op, "f32x4.max") == 0) { return makeBinary(s, BinaryOp::MaxVecF32x4); } goto parse_error; case 'i': if (strcmp(op, "f32x4.min") == 0) { return makeBinary(s, BinaryOp::MinVecF32x4); } goto parse_error; case 'u': if (strcmp(op, "f32x4.mul") == 0) { return makeBinary(s, BinaryOp::MulVecF32x4); } goto parse_error; default: goto parse_error; } } case 'n': { switch (op[8]) { case '\0': if (strcmp(op, "f32x4.ne") == 0) { return makeBinary(s, BinaryOp::NeVecF32x4); } goto parse_error; case 'a': if (strcmp(op, "f32x4.nearest") == 0) { return makeUnary(s, UnaryOp::NearestVecF32x4); } goto parse_error; case 'g': if (strcmp(op, "f32x4.neg") == 0) { return makeUnary(s, UnaryOp::NegVecF32x4); } goto parse_error; default: goto parse_error; } } case 'p': { switch (op[8]) { case 'a': if (strcmp(op, "f32x4.pmax") == 0) { return makeBinary(s, BinaryOp::PMaxVecF32x4); } goto parse_error; case 'i': if (strcmp(op, "f32x4.pmin") == 0) { return makeBinary(s, BinaryOp::PMinVecF32x4); } goto parse_error; default: goto parse_error; } } case 'r': { switch (op[8]) { case 'l': { switch (op[14]) { case 'f': { switch (op[16]) { case 'a': if (strcmp(op, "f32x4.relaxed_fma") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmaVecF32x4); } goto parse_error; case 's': if (strcmp(op, "f32x4.relaxed_fms") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmsVecF32x4); } goto parse_error; default: goto parse_error; } } case 'm': { switch (op[15]) { case 'a': if (strcmp(op, "f32x4.relaxed_max") == 0) { return makeBinary(s, BinaryOp::RelaxedMaxVecF32x4); } goto parse_error; case 'i': if (strcmp(op, "f32x4.relaxed_min") == 0) { return makeBinary(s, BinaryOp::RelaxedMinVecF32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "f32x4.replace_lane") == 0) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF32x4, 4); } goto parse_error; default: goto parse_error; } } case 's': { switch (op[7]) { case 'p': if (strcmp(op, "f32x4.splat") == 0) { return makeUnary(s, UnaryOp::SplatVecF32x4); } goto parse_error; case 'q': if (strcmp(op, "f32x4.sqrt") == 0) { return makeUnary(s, UnaryOp::SqrtVecF32x4); } goto parse_error; case 'u': if (strcmp(op, "f32x4.sub") == 0) { return makeBinary(s, BinaryOp::SubVecF32x4); } goto parse_error; default: goto parse_error; } } case 't': if (strcmp(op, "f32x4.trunc") == 0) { return makeUnary(s, UnaryOp::TruncVecF32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case '6': { switch (op[3]) { case '.': { switch (op[4]) { case 'a': { switch (op[5]) { case 'b': if (strcmp(op, "f64.abs") == 0) { return makeUnary(s, UnaryOp::AbsFloat64); } goto parse_error; case 'd': if (strcmp(op, "f64.add") == 0) { return makeBinary(s, BinaryOp::AddFloat64); } goto parse_error; default: goto parse_error; } } case 'c': { switch (op[5]) { case 'e': if (strcmp(op, "f64.ceil") == 0) { return makeUnary(s, UnaryOp::CeilFloat64); } goto parse_error; case 'o': { switch (op[6]) { case 'n': { switch (op[7]) { case 's': if (strcmp(op, "f64.const") == 0) { return makeConst(s, Type::f64); } goto parse_error; case 'v': { switch (op[13]) { case '3': { switch (op[16]) { case 's': if (strcmp(op, "f64.convert_i32_s") == 0) { return makeUnary(s, UnaryOp::ConvertSInt32ToFloat64); } goto parse_error; case 'u': if (strcmp(op, "f64.convert_i32_u") == 0) { return makeUnary(s, UnaryOp::ConvertUInt32ToFloat64); } goto parse_error; default: goto parse_error; } } case '6': { switch (op[16]) { case 's': if (strcmp(op, "f64.convert_i64_s") == 0) { return makeUnary(s, UnaryOp::ConvertSInt64ToFloat64); } goto parse_error; case 'u': if (strcmp(op, "f64.convert_i64_u") == 0) { return makeUnary(s, UnaryOp::ConvertUInt64ToFloat64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "f64.copysign") == 0) { return makeBinary(s, BinaryOp::CopySignFloat64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'd': if (strcmp(op, "f64.div") == 0) { return makeBinary(s, BinaryOp::DivFloat64); } goto parse_error; case 'e': if (strcmp(op, "f64.eq") == 0) { return makeBinary(s, BinaryOp::EqFloat64); } goto parse_error; case 'f': if (strcmp(op, "f64.floor") == 0) { return makeUnary(s, UnaryOp::FloorFloat64); } goto parse_error; case 'g': { switch (op[5]) { case 'e': if (strcmp(op, "f64.ge") == 0) { return makeBinary(s, BinaryOp::GeFloat64); } goto parse_error; case 't': if (strcmp(op, "f64.gt") == 0) { return makeBinary(s, BinaryOp::GtFloat64); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[5]) { case 'e': if (strcmp(op, "f64.le") == 0) { return makeBinary(s, BinaryOp::LeFloat64); } goto parse_error; case 'o': if (strcmp(op, "f64.load") == 0) { return makeLoad(s, Type::f64, /*isAtomic=*/false); } goto parse_error; case 't': if (strcmp(op, "f64.lt") == 0) { return makeBinary(s, BinaryOp::LtFloat64); } goto parse_error; default: goto parse_error; } } case 'm': { switch (op[5]) { case 'a': if (strcmp(op, "f64.max") == 0) { return makeBinary(s, BinaryOp::MaxFloat64); } goto parse_error; case 'i': if (strcmp(op, "f64.min") == 0) { return makeBinary(s, BinaryOp::MinFloat64); } goto parse_error; case 'u': if (strcmp(op, "f64.mul") == 0) { return makeBinary(s, BinaryOp::MulFloat64); } goto parse_error; default: goto parse_error; } } case 'n': { switch (op[6]) { case '\0': if (strcmp(op, "f64.ne") == 0) { return makeBinary(s, BinaryOp::NeFloat64); } goto parse_error; case 'a': if (strcmp(op, "f64.nearest") == 0) { return makeUnary(s, UnaryOp::NearestFloat64); } goto parse_error; case 'g': if (strcmp(op, "f64.neg") == 0) { return makeUnary(s, UnaryOp::NegFloat64); } goto parse_error; default: goto parse_error; } } case 'p': if (strcmp(op, "f64.promote_f32") == 0) { return makeUnary(s, UnaryOp::PromoteFloat32); } goto parse_error; case 'r': if (strcmp(op, "f64.reinterpret_i64") == 0) { return makeUnary(s, UnaryOp::ReinterpretInt64); } goto parse_error; case 's': { switch (op[5]) { case 'q': if (strcmp(op, "f64.sqrt") == 0) { return makeUnary(s, UnaryOp::SqrtFloat64); } goto parse_error; case 't': if (strcmp(op, "f64.store") == 0) { return makeStore(s, Type::f64, /*isAtomic=*/false); } goto parse_error; case 'u': if (strcmp(op, "f64.sub") == 0) { return makeBinary(s, BinaryOp::SubFloat64); } goto parse_error; default: goto parse_error; } } case 't': if (strcmp(op, "f64.trunc") == 0) { return makeUnary(s, UnaryOp::TruncFloat64); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[6]) { case 'a': { switch (op[7]) { case 'b': if (strcmp(op, "f64x2.abs") == 0) { return makeUnary(s, UnaryOp::AbsVecF64x2); } goto parse_error; case 'd': if (strcmp(op, "f64x2.add") == 0) { return makeBinary(s, BinaryOp::AddVecF64x2); } goto parse_error; default: goto parse_error; } } case 'c': { switch (op[7]) { case 'e': if (strcmp(op, "f64x2.ceil") == 0) { return makeUnary(s, UnaryOp::CeilVecF64x2); } goto parse_error; case 'o': { switch (op[24]) { case 's': if (strcmp(op, "f64x2.convert_low_i32x4_s") == 0) { return makeUnary(s, UnaryOp::ConvertLowSVecI32x4ToVecF64x2); } goto parse_error; case 'u': if (strcmp(op, "f64x2.convert_low_i32x4_u") == 0) { return makeUnary(s, UnaryOp::ConvertLowUVecI32x4ToVecF64x2); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'd': if (strcmp(op, "f64x2.div") == 0) { return makeBinary(s, BinaryOp::DivVecF64x2); } goto parse_error; case 'e': { switch (op[7]) { case 'q': if (strcmp(op, "f64x2.eq") == 0) { return makeBinary(s, BinaryOp::EqVecF64x2); } goto parse_error; case 'x': if (strcmp(op, "f64x2.extract_lane") == 0) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF64x2, 2); } goto parse_error; default: goto parse_error; } } case 'f': if (strcmp(op, "f64x2.floor") == 0) { return makeUnary(s, UnaryOp::FloorVecF64x2); } goto parse_error; case 'g': { switch (op[7]) { case 'e': if (strcmp(op, "f64x2.ge") == 0) { return makeBinary(s, BinaryOp::GeVecF64x2); } goto parse_error; case 't': if (strcmp(op, "f64x2.gt") == 0) { return makeBinary(s, BinaryOp::GtVecF64x2); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[7]) { case 'e': if (strcmp(op, "f64x2.le") == 0) { return makeBinary(s, BinaryOp::LeVecF64x2); } goto parse_error; case 't': if (strcmp(op, "f64x2.lt") == 0) { return makeBinary(s, BinaryOp::LtVecF64x2); } goto parse_error; default: goto parse_error; } } case 'm': { switch (op[7]) { case 'a': if (strcmp(op, "f64x2.max") == 0) { return makeBinary(s, BinaryOp::MaxVecF64x2); } goto parse_error; case 'i': if (strcmp(op, "f64x2.min") == 0) { return makeBinary(s, BinaryOp::MinVecF64x2); } goto parse_error; case 'u': if (strcmp(op, "f64x2.mul") == 0) { return makeBinary(s, BinaryOp::MulVecF64x2); } goto parse_error; default: goto parse_error; } } case 'n': { switch (op[8]) { case '\0': if (strcmp(op, "f64x2.ne") == 0) { return makeBinary(s, BinaryOp::NeVecF64x2); } goto parse_error; case 'a': if (strcmp(op, "f64x2.nearest") == 0) { return makeUnary(s, UnaryOp::NearestVecF64x2); } goto parse_error; case 'g': if (strcmp(op, "f64x2.neg") == 0) { return makeUnary(s, UnaryOp::NegVecF64x2); } goto parse_error; default: goto parse_error; } } case 'p': { switch (op[7]) { case 'm': { switch (op[8]) { case 'a': if (strcmp(op, "f64x2.pmax") == 0) { return makeBinary(s, BinaryOp::PMaxVecF64x2); } goto parse_error; case 'i': if (strcmp(op, "f64x2.pmin") == 0) { return makeBinary(s, BinaryOp::PMinVecF64x2); } goto parse_error; default: goto parse_error; } } case 'r': if (strcmp(op, "f64x2.promote_low_f32x4") == 0) { return makeUnary(s, UnaryOp::PromoteLowVecF32x4ToVecF64x2); } goto parse_error; default: goto parse_error; } } case 'r': { switch (op[8]) { case 'l': { switch (op[14]) { case 'f': { switch (op[16]) { case 'a': if (strcmp(op, "f64x2.relaxed_fma") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmaVecF64x2); } goto parse_error; case 's': if (strcmp(op, "f64x2.relaxed_fms") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::RelaxedFmsVecF64x2); } goto parse_error; default: goto parse_error; } } case 'm': { switch (op[15]) { case 'a': if (strcmp(op, "f64x2.relaxed_max") == 0) { return makeBinary(s, BinaryOp::RelaxedMaxVecF64x2); } goto parse_error; case 'i': if (strcmp(op, "f64x2.relaxed_min") == 0) { return makeBinary(s, BinaryOp::RelaxedMinVecF64x2); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "f64x2.replace_lane") == 0) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF64x2, 2); } goto parse_error; default: goto parse_error; } } case 's': { switch (op[7]) { case 'p': if (strcmp(op, "f64x2.splat") == 0) { return makeUnary(s, UnaryOp::SplatVecF64x2); } goto parse_error; case 'q': if (strcmp(op, "f64x2.sqrt") == 0) { return makeUnary(s, UnaryOp::SqrtVecF64x2); } goto parse_error; case 'u': if (strcmp(op, "f64x2.sub") == 0) { return makeBinary(s, BinaryOp::SubVecF64x2); } goto parse_error; default: goto parse_error; } } case 't': if (strcmp(op, "f64x2.trunc") == 0) { return makeUnary(s, UnaryOp::TruncVecF64x2); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'g': { switch (op[7]) { case 'g': if (strcmp(op, "global.get") == 0) { return makeGlobalGet(s); } goto parse_error; case 's': if (strcmp(op, "global.set") == 0) { return makeGlobalSet(s); } goto parse_error; default: goto parse_error; } } case 'i': { switch (op[1]) { case '1': { switch (op[6]) { case 'a': { switch (op[7]) { case 'b': if (strcmp(op, "i16x8.abs") == 0) { return makeUnary(s, UnaryOp::AbsVecI16x8); } goto parse_error; case 'd': { switch (op[9]) { case '\0': if (strcmp(op, "i16x8.add") == 0) { return makeBinary(s, BinaryOp::AddVecI16x8); } goto parse_error; case '_': { switch (op[14]) { case 's': if (strcmp(op, "i16x8.add_sat_s") == 0) { return makeBinary(s, BinaryOp::AddSatSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.add_sat_u") == 0) { return makeBinary(s, BinaryOp::AddSatUVecI16x8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'l': if (strcmp(op, "i16x8.all_true") == 0) { return makeUnary(s, UnaryOp::AllTrueVecI16x8); } goto parse_error; case 'v': if (strcmp(op, "i16x8.avgr_u") == 0) { return makeBinary(s, BinaryOp::AvgrUVecI16x8); } goto parse_error; default: goto parse_error; } } case 'b': if (strcmp(op, "i16x8.bitmask") == 0) { return makeUnary(s, UnaryOp::BitmaskVecI16x8); } goto parse_error; case 'd': { switch (op[22]) { case 's': if (strcmp(op, "i16x8.dot_i8x16_i7x16_s") == 0) { return makeBinary(s, BinaryOp::DotI8x16I7x16SToVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.dot_i8x16_i7x16_u") == 0) { return makeBinary(s, BinaryOp::DotI8x16I7x16UToVecI16x8); } goto parse_error; default: goto parse_error; } } case 'e': { switch (op[7]) { case 'q': if (strcmp(op, "i16x8.eq") == 0) { return makeBinary(s, BinaryOp::EqVecI16x8); } goto parse_error; case 'x': { switch (op[9]) { case 'a': { switch (op[28]) { case 's': if (strcmp(op, "i16x8.extadd_pairwise_i8x16_s") == 0) { return makeUnary(s, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.extadd_pairwise_i8x16_u") == 0) { return makeUnary(s, UnaryOp::ExtAddPairwiseUVecI8x16ToI16x8); } goto parse_error; default: goto parse_error; } } case 'e': { switch (op[13]) { case 'h': { switch (op[24]) { case 's': if (strcmp(op, "i16x8.extend_high_i8x16_s") == 0) { return makeUnary(s, UnaryOp::ExtendHighSVecI8x16ToVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.extend_high_i8x16_u") == 0) { return makeUnary(s, UnaryOp::ExtendHighUVecI8x16ToVecI16x8); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[23]) { case 's': if (strcmp(op, "i16x8.extend_low_i8x16_s") == 0) { return makeUnary(s, UnaryOp::ExtendLowSVecI8x16ToVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.extend_low_i8x16_u") == 0) { return makeUnary(s, UnaryOp::ExtendLowUVecI8x16ToVecI16x8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'm': { switch (op[13]) { case 'h': { switch (op[24]) { case 's': if (strcmp(op, "i16x8.extmul_high_i8x16_s") == 0) { return makeBinary(s, BinaryOp::ExtMulHighSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.extmul_high_i8x16_u") == 0) { return makeBinary(s, BinaryOp::ExtMulHighUVecI16x8); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[23]) { case 's': if (strcmp(op, "i16x8.extmul_low_i8x16_s") == 0) { return makeBinary(s, BinaryOp::ExtMulLowSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.extmul_low_i8x16_u") == 0) { return makeBinary(s, BinaryOp::ExtMulLowUVecI16x8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'r': { switch (op[19]) { case 's': if (strcmp(op, "i16x8.extract_lane_s") == 0) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI16x8, 8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.extract_lane_u") == 0) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI16x8, 8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'g': { switch (op[7]) { case 'e': { switch (op[9]) { case 's': if (strcmp(op, "i16x8.ge_s") == 0) { return makeBinary(s, BinaryOp::GeSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.ge_u") == 0) { return makeBinary(s, BinaryOp::GeUVecI16x8); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[9]) { case 's': if (strcmp(op, "i16x8.gt_s") == 0) { return makeBinary(s, BinaryOp::GtSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.gt_u") == 0) { return makeBinary(s, BinaryOp::GtUVecI16x8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'l': { switch (op[7]) { case 'a': if (strcmp(op, "i16x8.laneselect") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI16x8); } goto parse_error; case 'e': { switch (op[9]) { case 's': if (strcmp(op, "i16x8.le_s") == 0) { return makeBinary(s, BinaryOp::LeSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.le_u") == 0) { return makeBinary(s, BinaryOp::LeUVecI16x8); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[9]) { case 's': if (strcmp(op, "i16x8.lt_s") == 0) { return makeBinary(s, BinaryOp::LtSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.lt_u") == 0) { return makeBinary(s, BinaryOp::LtUVecI16x8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'm': { switch (op[7]) { case 'a': { switch (op[10]) { case 's': if (strcmp(op, "i16x8.max_s") == 0) { return makeBinary(s, BinaryOp::MaxSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.max_u") == 0) { return makeBinary(s, BinaryOp::MaxUVecI16x8); } goto parse_error; default: goto parse_error; } } case 'i': { switch (op[10]) { case 's': if (strcmp(op, "i16x8.min_s") == 0) { return makeBinary(s, BinaryOp::MinSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.min_u") == 0) { return makeBinary(s, BinaryOp::MinUVecI16x8); } goto parse_error; default: goto parse_error; } } case 'u': if (strcmp(op, "i16x8.mul") == 0) { return makeBinary(s, BinaryOp::MulVecI16x8); } goto parse_error; default: goto parse_error; } } case 'n': { switch (op[7]) { case 'a': { switch (op[19]) { case 's': if (strcmp(op, "i16x8.narrow_i32x4_s") == 0) { return makeBinary(s, BinaryOp::NarrowSVecI32x4ToVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.narrow_i32x4_u") == 0) { return makeBinary(s, BinaryOp::NarrowUVecI32x4ToVecI16x8); } goto parse_error; default: goto parse_error; } } case 'e': { switch (op[8]) { case '\0': if (strcmp(op, "i16x8.ne") == 0) { return makeBinary(s, BinaryOp::NeVecI16x8); } goto parse_error; case 'g': if (strcmp(op, "i16x8.neg") == 0) { return makeUnary(s, UnaryOp::NegVecI16x8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'q': if (strcmp(op, "i16x8.q15mulr_sat_s") == 0) { return makeBinary(s, BinaryOp::Q15MulrSatSVecI16x8); } goto parse_error; case 'r': { switch (op[8]) { case 'l': if (strcmp(op, "i16x8.relaxed_q15mulr_s") == 0) { return makeBinary(s, BinaryOp::RelaxedQ15MulrSVecI16x8); } goto parse_error; case 'p': if (strcmp(op, "i16x8.replace_lane") == 0) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI16x8, 8); } goto parse_error; default: goto parse_error; } } case 's': { switch (op[7]) { case 'h': { switch (op[8]) { case 'l': if (strcmp(op, "i16x8.shl") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI16x8); } goto parse_error; case 'r': { switch (op[10]) { case 's': if (strcmp(op, "i16x8.shr_s") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShrSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.shr_u") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShrUVecI16x8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "i16x8.splat") == 0) { return makeUnary(s, UnaryOp::SplatVecI16x8); } goto parse_error; case 'u': { switch (op[9]) { case '\0': if (strcmp(op, "i16x8.sub") == 0) { return makeBinary(s, BinaryOp::SubVecI16x8); } goto parse_error; case '_': { switch (op[14]) { case 's': if (strcmp(op, "i16x8.sub_sat_s") == 0) { return makeBinary(s, BinaryOp::SubSatSVecI16x8); } goto parse_error; case 'u': if (strcmp(op, "i16x8.sub_sat_u") == 0) { return makeBinary(s, BinaryOp::SubSatUVecI16x8); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case '3': { switch (op[2]) { case '1': { switch (op[4]) { case 'g': { switch (op[8]) { case 's': if (strcmp(op, "i31.get_s") == 0) { return makeI31Get(s, true); } goto parse_error; case 'u': if (strcmp(op, "i31.get_u") == 0) { return makeI31Get(s, false); } goto parse_error; default: goto parse_error; } } case 'n': if (strcmp(op, "i31.new") == 0) { return makeI31New(s); } goto parse_error; default: goto parse_error; } } case '2': { switch (op[3]) { case '.': { switch (op[4]) { case 'a': { switch (op[5]) { case 'd': if (strcmp(op, "i32.add") == 0) { return makeBinary(s, BinaryOp::AddInt32); } goto parse_error; case 'n': if (strcmp(op, "i32.and") == 0) { return makeBinary(s, BinaryOp::AndInt32); } goto parse_error; case 't': { switch (op[11]) { case 'l': { switch (op[15]) { case '\0': if (strcmp(op, "i32.atomic.load") == 0) { return makeLoad(s, Type::i32, /*isAtomic=*/true); } goto parse_error; case '1': if (strcmp(op, "i32.atomic.load16_u") == 0) { return makeLoad(s, Type::i32, /*isAtomic=*/true); } goto parse_error; case '8': if (strcmp(op, "i32.atomic.load8_u") == 0) { return makeLoad(s, Type::i32, /*isAtomic=*/true); } goto parse_error; default: goto parse_error; } } case 'r': { switch (op[14]) { case '.': { switch (op[15]) { case 'a': { switch (op[16]) { case 'd': if (strcmp(op, "i32.atomic.rmw.add") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'n': if (strcmp(op, "i32.atomic.rmw.and") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; default: goto parse_error; } } case 'c': if (strcmp(op, "i32.atomic.rmw.cmpxchg") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'o': if (strcmp(op, "i32.atomic.rmw.or") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 's': if (strcmp(op, "i32.atomic.rmw.sub") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'x': { switch (op[16]) { case 'c': if (strcmp(op, "i32.atomic.rmw.xchg") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'o': if (strcmp(op, "i32.atomic.rmw.xor") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case '1': { switch (op[17]) { case 'a': { switch (op[18]) { case 'd': if (strcmp(op, "i32.atomic.rmw16.add_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'n': if (strcmp(op, "i32.atomic.rmw16.and_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; default: goto parse_error; } } case 'c': if (strcmp(op, "i32.atomic.rmw16.cmpxchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'o': if (strcmp(op, "i32.atomic.rmw16.or_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 's': if (strcmp(op, "i32.atomic.rmw16.sub_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'x': { switch (op[18]) { case 'c': if (strcmp(op, "i32.atomic.rmw16.xchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'o': if (strcmp(op, "i32.atomic.rmw16.xor_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case '8': { switch (op[16]) { case 'a': { switch (op[17]) { case 'd': if (strcmp(op, "i32.atomic.rmw8.add_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'n': if (strcmp(op, "i32.atomic.rmw8.and_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; default: goto parse_error; } } case 'c': if (strcmp(op, "i32.atomic.rmw8.cmpxchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'o': if (strcmp(op, "i32.atomic.rmw8.or_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 's': if (strcmp(op, "i32.atomic.rmw8.sub_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'x': { switch (op[17]) { case 'c': if (strcmp(op, "i32.atomic.rmw8.xchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; case 'o': if (strcmp(op, "i32.atomic.rmw8.xor_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 's': { switch (op[16]) { case '\0': if (strcmp(op, "i32.atomic.store") == 0) { return makeStore(s, Type::i32, /*isAtomic=*/true); } goto parse_error; case '1': if (strcmp(op, "i32.atomic.store16") == 0) { return makeStore(s, Type::i32, /*isAtomic=*/true); } goto parse_error; case '8': if (strcmp(op, "i32.atomic.store8") == 0) { return makeStore(s, Type::i32, /*isAtomic=*/true); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'c': { switch (op[5]) { case 'l': if (strcmp(op, "i32.clz") == 0) { return makeUnary(s, UnaryOp::ClzInt32); } goto parse_error; case 'o': if (strcmp(op, "i32.const") == 0) { return makeConst(s, Type::i32); } goto parse_error; case 't': if (strcmp(op, "i32.ctz") == 0) { return makeUnary(s, UnaryOp::CtzInt32); } goto parse_error; default: goto parse_error; } } case 'd': { switch (op[8]) { case 's': if (strcmp(op, "i32.div_s") == 0) { return makeBinary(s, BinaryOp::DivSInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.div_u") == 0) { return makeBinary(s, BinaryOp::DivUInt32); } goto parse_error; default: goto parse_error; } } case 'e': { switch (op[5]) { case 'q': { switch (op[6]) { case '\0': if (strcmp(op, "i32.eq") == 0) { return makeBinary(s, BinaryOp::EqInt32); } goto parse_error; case 'z': if (strcmp(op, "i32.eqz") == 0) { return makeUnary(s, UnaryOp::EqZInt32); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[10]) { case '1': if (strcmp(op, "i32.extend16_s") == 0) { return makeUnary(s, UnaryOp::ExtendS16Int32); } goto parse_error; case '8': if (strcmp(op, "i32.extend8_s") == 0) { return makeUnary(s, UnaryOp::ExtendS8Int32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'g': { switch (op[5]) { case 'e': { switch (op[7]) { case 's': if (strcmp(op, "i32.ge_s") == 0) { return makeBinary(s, BinaryOp::GeSInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.ge_u") == 0) { return makeBinary(s, BinaryOp::GeUInt32); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[7]) { case 's': if (strcmp(op, "i32.gt_s") == 0) { return makeBinary(s, BinaryOp::GtSInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.gt_u") == 0) { return makeBinary(s, BinaryOp::GtUInt32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'l': { switch (op[5]) { case 'e': { switch (op[7]) { case 's': if (strcmp(op, "i32.le_s") == 0) { return makeBinary(s, BinaryOp::LeSInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.le_u") == 0) { return makeBinary(s, BinaryOp::LeUInt32); } goto parse_error; default: goto parse_error; } } case 'o': { switch (op[8]) { case '\0': if (strcmp(op, "i32.load") == 0) { return makeLoad(s, Type::i32, /*isAtomic=*/false); } goto parse_error; case '1': { switch (op[11]) { case 's': if (strcmp(op, "i32.load16_s") == 0) { return makeLoad(s, Type::i32, /*isAtomic=*/false); } goto parse_error; case 'u': if (strcmp(op, "i32.load16_u") == 0) { return makeLoad(s, Type::i32, /*isAtomic=*/false); } goto parse_error; default: goto parse_error; } } case '8': { switch (op[10]) { case 's': if (strcmp(op, "i32.load8_s") == 0) { return makeLoad(s, Type::i32, /*isAtomic=*/false); } goto parse_error; case 'u': if (strcmp(op, "i32.load8_u") == 0) { return makeLoad(s, Type::i32, /*isAtomic=*/false); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 't': { switch (op[7]) { case 's': if (strcmp(op, "i32.lt_s") == 0) { return makeBinary(s, BinaryOp::LtSInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.lt_u") == 0) { return makeBinary(s, BinaryOp::LtUInt32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'm': if (strcmp(op, "i32.mul") == 0) { return makeBinary(s, BinaryOp::MulInt32); } goto parse_error; case 'n': if (strcmp(op, "i32.ne") == 0) { return makeBinary(s, BinaryOp::NeInt32); } goto parse_error; case 'o': if (strcmp(op, "i32.or") == 0) { return makeBinary(s, BinaryOp::OrInt32); } goto parse_error; case 'p': if (strcmp(op, "i32.popcnt") == 0) { return makeUnary(s, UnaryOp::PopcntInt32); } goto parse_error; case 'r': { switch (op[5]) { case 'e': { switch (op[6]) { case 'i': if (strcmp(op, "i32.reinterpret_f32") == 0) { return makeUnary(s, UnaryOp::ReinterpretFloat32); } goto parse_error; case 'm': { switch (op[8]) { case 's': if (strcmp(op, "i32.rem_s") == 0) { return makeBinary(s, BinaryOp::RemSInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.rem_u") == 0) { return makeBinary(s, BinaryOp::RemUInt32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'o': { switch (op[7]) { case 'l': if (strcmp(op, "i32.rotl") == 0) { return makeBinary(s, BinaryOp::RotLInt32); } goto parse_error; case 'r': if (strcmp(op, "i32.rotr") == 0) { return makeBinary(s, BinaryOp::RotRInt32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 's': { switch (op[5]) { case 'h': { switch (op[6]) { case 'l': if (strcmp(op, "i32.shl") == 0) { return makeBinary(s, BinaryOp::ShlInt32); } goto parse_error; case 'r': { switch (op[8]) { case 's': if (strcmp(op, "i32.shr_s") == 0) { return makeBinary(s, BinaryOp::ShrSInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.shr_u") == 0) { return makeBinary(s, BinaryOp::ShrUInt32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 't': { switch (op[9]) { case '\0': if (strcmp(op, "i32.store") == 0) { return makeStore(s, Type::i32, /*isAtomic=*/false); } goto parse_error; case '1': if (strcmp(op, "i32.store16") == 0) { return makeStore(s, Type::i32, /*isAtomic=*/false); } goto parse_error; case '8': if (strcmp(op, "i32.store8") == 0) { return makeStore(s, Type::i32, /*isAtomic=*/false); } goto parse_error; default: goto parse_error; } } case 'u': if (strcmp(op, "i32.sub") == 0) { return makeBinary(s, BinaryOp::SubInt32); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[10]) { case 'f': { switch (op[11]) { case '3': { switch (op[14]) { case 's': if (strcmp(op, "i32.trunc_f32_s") == 0) { return makeUnary(s, UnaryOp::TruncSFloat32ToInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.trunc_f32_u") == 0) { return makeUnary(s, UnaryOp::TruncUFloat32ToInt32); } goto parse_error; default: goto parse_error; } } case '6': { switch (op[14]) { case 's': if (strcmp(op, "i32.trunc_f64_s") == 0) { return makeUnary(s, UnaryOp::TruncSFloat64ToInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.trunc_f64_u") == 0) { return makeUnary(s, UnaryOp::TruncUFloat64ToInt32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 's': { switch (op[15]) { case '3': { switch (op[18]) { case 's': if (strcmp(op, "i32.trunc_sat_f32_s") == 0) { return makeUnary(s, UnaryOp::TruncSatSFloat32ToInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.trunc_sat_f32_u") == 0) { return makeUnary(s, UnaryOp::TruncSatUFloat32ToInt32); } goto parse_error; default: goto parse_error; } } case '6': { switch (op[18]) { case 's': if (strcmp(op, "i32.trunc_sat_f64_s") == 0) { return makeUnary(s, UnaryOp::TruncSatSFloat64ToInt32); } goto parse_error; case 'u': if (strcmp(op, "i32.trunc_sat_f64_u") == 0) { return makeUnary(s, UnaryOp::TruncSatUFloat64ToInt32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'w': if (strcmp(op, "i32.wrap_i64") == 0) { return makeUnary(s, UnaryOp::WrapInt64); } goto parse_error; case 'x': if (strcmp(op, "i32.xor") == 0) { return makeBinary(s, BinaryOp::XorInt32); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[6]) { case 'a': { switch (op[7]) { case 'b': if (strcmp(op, "i32x4.abs") == 0) { return makeUnary(s, UnaryOp::AbsVecI32x4); } goto parse_error; case 'd': if (strcmp(op, "i32x4.add") == 0) { return makeBinary(s, BinaryOp::AddVecI32x4); } goto parse_error; case 'l': if (strcmp(op, "i32x4.all_true") == 0) { return makeUnary(s, UnaryOp::AllTrueVecI32x4); } goto parse_error; default: goto parse_error; } } case 'b': if (strcmp(op, "i32x4.bitmask") == 0) { return makeUnary(s, UnaryOp::BitmaskVecI32x4); } goto parse_error; case 'd': { switch (op[11]) { case '1': if (strcmp(op, "i32x4.dot_i16x8_s") == 0) { return makeBinary(s, BinaryOp::DotSVecI16x8ToVecI32x4); } goto parse_error; case '8': { switch (op[26]) { case 's': if (strcmp(op, "i32x4.dot_i8x16_i7x16_add_s") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::DotI8x16I7x16AddSToVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.dot_i8x16_i7x16_add_u") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::DotI8x16I7x16AddUToVecI32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'e': { switch (op[7]) { case 'q': if (strcmp(op, "i32x4.eq") == 0) { return makeBinary(s, BinaryOp::EqVecI32x4); } goto parse_error; case 'x': { switch (op[9]) { case 'a': { switch (op[28]) { case 's': if (strcmp(op, "i32x4.extadd_pairwise_i16x8_s") == 0) { return makeUnary(s, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.extadd_pairwise_i16x8_u") == 0) { return makeUnary(s, UnaryOp::ExtAddPairwiseUVecI16x8ToI32x4); } goto parse_error; default: goto parse_error; } } case 'e': { switch (op[13]) { case 'h': { switch (op[24]) { case 's': if (strcmp(op, "i32x4.extend_high_i16x8_s") == 0) { return makeUnary(s, UnaryOp::ExtendHighSVecI16x8ToVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.extend_high_i16x8_u") == 0) { return makeUnary(s, UnaryOp::ExtendHighUVecI16x8ToVecI32x4); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[23]) { case 's': if (strcmp(op, "i32x4.extend_low_i16x8_s") == 0) { return makeUnary(s, UnaryOp::ExtendLowSVecI16x8ToVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.extend_low_i16x8_u") == 0) { return makeUnary(s, UnaryOp::ExtendLowUVecI16x8ToVecI32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'm': { switch (op[13]) { case 'h': { switch (op[24]) { case 's': if (strcmp(op, "i32x4.extmul_high_i16x8_s") == 0) { return makeBinary(s, BinaryOp::ExtMulHighSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.extmul_high_i16x8_u") == 0) { return makeBinary(s, BinaryOp::ExtMulHighUVecI32x4); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[23]) { case 's': if (strcmp(op, "i32x4.extmul_low_i16x8_s") == 0) { return makeBinary(s, BinaryOp::ExtMulLowSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.extmul_low_i16x8_u") == 0) { return makeBinary(s, BinaryOp::ExtMulLowUVecI32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'r': if (strcmp(op, "i32x4.extract_lane") == 0) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI32x4, 4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'g': { switch (op[7]) { case 'e': { switch (op[9]) { case 's': if (strcmp(op, "i32x4.ge_s") == 0) { return makeBinary(s, BinaryOp::GeSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.ge_u") == 0) { return makeBinary(s, BinaryOp::GeUVecI32x4); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[9]) { case 's': if (strcmp(op, "i32x4.gt_s") == 0) { return makeBinary(s, BinaryOp::GtSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.gt_u") == 0) { return makeBinary(s, BinaryOp::GtUVecI32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'l': { switch (op[7]) { case 'a': if (strcmp(op, "i32x4.laneselect") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI32x4); } goto parse_error; case 'e': { switch (op[9]) { case 's': if (strcmp(op, "i32x4.le_s") == 0) { return makeBinary(s, BinaryOp::LeSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.le_u") == 0) { return makeBinary(s, BinaryOp::LeUVecI32x4); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[9]) { case 's': if (strcmp(op, "i32x4.lt_s") == 0) { return makeBinary(s, BinaryOp::LtSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.lt_u") == 0) { return makeBinary(s, BinaryOp::LtUVecI32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'm': { switch (op[7]) { case 'a': { switch (op[10]) { case 's': if (strcmp(op, "i32x4.max_s") == 0) { return makeBinary(s, BinaryOp::MaxSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.max_u") == 0) { return makeBinary(s, BinaryOp::MaxUVecI32x4); } goto parse_error; default: goto parse_error; } } case 'i': { switch (op[10]) { case 's': if (strcmp(op, "i32x4.min_s") == 0) { return makeBinary(s, BinaryOp::MinSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.min_u") == 0) { return makeBinary(s, BinaryOp::MinUVecI32x4); } goto parse_error; default: goto parse_error; } } case 'u': if (strcmp(op, "i32x4.mul") == 0) { return makeBinary(s, BinaryOp::MulVecI32x4); } goto parse_error; default: goto parse_error; } } case 'n': { switch (op[8]) { case '\0': if (strcmp(op, "i32x4.ne") == 0) { return makeBinary(s, BinaryOp::NeVecI32x4); } goto parse_error; case 'g': if (strcmp(op, "i32x4.neg") == 0) { return makeUnary(s, UnaryOp::NegVecI32x4); } goto parse_error; default: goto parse_error; } } case 'r': { switch (op[8]) { case 'l': { switch (op[21]) { case '3': { switch (op[26]) { case 's': if (strcmp(op, "i32x4.relaxed_trunc_f32x4_s") == 0) { return makeUnary(s, UnaryOp::RelaxedTruncSVecF32x4ToVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.relaxed_trunc_f32x4_u") == 0) { return makeUnary(s, UnaryOp::RelaxedTruncUVecF32x4ToVecI32x4); } goto parse_error; default: goto parse_error; } } case '6': { switch (op[26]) { case 's': if (strcmp(op, "i32x4.relaxed_trunc_f64x2_s_zero") == 0) { return makeUnary(s, UnaryOp::RelaxedTruncZeroSVecF64x2ToVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.relaxed_trunc_f64x2_u_zero") == 0) { return makeUnary(s, UnaryOp::RelaxedTruncZeroUVecF64x2ToVecI32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "i32x4.replace_lane") == 0) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI32x4, 4); } goto parse_error; default: goto parse_error; } } case 's': { switch (op[7]) { case 'h': { switch (op[8]) { case 'l': if (strcmp(op, "i32x4.shl") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI32x4); } goto parse_error; case 'r': { switch (op[10]) { case 's': if (strcmp(op, "i32x4.shr_s") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShrSVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.shr_u") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShrUVecI32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "i32x4.splat") == 0) { return makeUnary(s, UnaryOp::SplatVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.sub") == 0) { return makeBinary(s, BinaryOp::SubVecI32x4); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[17]) { case '3': { switch (op[22]) { case 's': if (strcmp(op, "i32x4.trunc_sat_f32x4_s") == 0) { return makeUnary(s, UnaryOp::TruncSatSVecF32x4ToVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.trunc_sat_f32x4_u") == 0) { return makeUnary(s, UnaryOp::TruncSatUVecF32x4ToVecI32x4); } goto parse_error; default: goto parse_error; } } case '6': { switch (op[22]) { case 's': if (strcmp(op, "i32x4.trunc_sat_f64x2_s_zero") == 0) { return makeUnary(s, UnaryOp::TruncSatZeroSVecF64x2ToVecI32x4); } goto parse_error; case 'u': if (strcmp(op, "i32x4.trunc_sat_f64x2_u_zero") == 0) { return makeUnary(s, UnaryOp::TruncSatZeroUVecF64x2ToVecI32x4); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case '6': { switch (op[3]) { case '.': { switch (op[4]) { case 'a': { switch (op[5]) { case 'd': if (strcmp(op, "i64.add") == 0) { return makeBinary(s, BinaryOp::AddInt64); } goto parse_error; case 'n': if (strcmp(op, "i64.and") == 0) { return makeBinary(s, BinaryOp::AndInt64); } goto parse_error; case 't': { switch (op[11]) { case 'l': { switch (op[15]) { case '\0': if (strcmp(op, "i64.atomic.load") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/true); } goto parse_error; case '1': if (strcmp(op, "i64.atomic.load16_u") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/true); } goto parse_error; case '3': if (strcmp(op, "i64.atomic.load32_u") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/true); } goto parse_error; case '8': if (strcmp(op, "i64.atomic.load8_u") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/true); } goto parse_error; default: goto parse_error; } } case 'r': { switch (op[14]) { case '.': { switch (op[15]) { case 'a': { switch (op[16]) { case 'd': if (strcmp(op, "i64.atomic.rmw.add") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'n': if (strcmp(op, "i64.atomic.rmw.and") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; default: goto parse_error; } } case 'c': if (strcmp(op, "i64.atomic.rmw.cmpxchg") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'o': if (strcmp(op, "i64.atomic.rmw.or") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 's': if (strcmp(op, "i64.atomic.rmw.sub") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'x': { switch (op[16]) { case 'c': if (strcmp(op, "i64.atomic.rmw.xchg") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'o': if (strcmp(op, "i64.atomic.rmw.xor") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case '1': { switch (op[17]) { case 'a': { switch (op[18]) { case 'd': if (strcmp(op, "i64.atomic.rmw16.add_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'n': if (strcmp(op, "i64.atomic.rmw16.and_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; default: goto parse_error; } } case 'c': if (strcmp(op, "i64.atomic.rmw16.cmpxchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'o': if (strcmp(op, "i64.atomic.rmw16.or_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 's': if (strcmp(op, "i64.atomic.rmw16.sub_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'x': { switch (op[18]) { case 'c': if (strcmp(op, "i64.atomic.rmw16.xchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'o': if (strcmp(op, "i64.atomic.rmw16.xor_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case '3': { switch (op[17]) { case 'a': { switch (op[18]) { case 'd': if (strcmp(op, "i64.atomic.rmw32.add_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'n': if (strcmp(op, "i64.atomic.rmw32.and_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; default: goto parse_error; } } case 'c': if (strcmp(op, "i64.atomic.rmw32.cmpxchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'o': if (strcmp(op, "i64.atomic.rmw32.or_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 's': if (strcmp(op, "i64.atomic.rmw32.sub_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'x': { switch (op[18]) { case 'c': if (strcmp(op, "i64.atomic.rmw32.xchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'o': if (strcmp(op, "i64.atomic.rmw32.xor_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case '8': { switch (op[16]) { case 'a': { switch (op[17]) { case 'd': if (strcmp(op, "i64.atomic.rmw8.add_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'n': if (strcmp(op, "i64.atomic.rmw8.and_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; default: goto parse_error; } } case 'c': if (strcmp(op, "i64.atomic.rmw8.cmpxchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'o': if (strcmp(op, "i64.atomic.rmw8.or_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 's': if (strcmp(op, "i64.atomic.rmw8.sub_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'x': { switch (op[17]) { case 'c': if (strcmp(op, "i64.atomic.rmw8.xchg_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; case 'o': if (strcmp(op, "i64.atomic.rmw8.xor_u") == 0) { return makeAtomicRMWOrCmpxchg(s, Type::i64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 's': { switch (op[16]) { case '\0': if (strcmp(op, "i64.atomic.store") == 0) { return makeStore(s, Type::i64, /*isAtomic=*/true); } goto parse_error; case '1': if (strcmp(op, "i64.atomic.store16") == 0) { return makeStore(s, Type::i64, /*isAtomic=*/true); } goto parse_error; case '3': if (strcmp(op, "i64.atomic.store32") == 0) { return makeStore(s, Type::i64, /*isAtomic=*/true); } goto parse_error; case '8': if (strcmp(op, "i64.atomic.store8") == 0) { return makeStore(s, Type::i64, /*isAtomic=*/true); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'c': { switch (op[5]) { case 'l': if (strcmp(op, "i64.clz") == 0) { return makeUnary(s, UnaryOp::ClzInt64); } goto parse_error; case 'o': if (strcmp(op, "i64.const") == 0) { return makeConst(s, Type::i64); } goto parse_error; case 't': if (strcmp(op, "i64.ctz") == 0) { return makeUnary(s, UnaryOp::CtzInt64); } goto parse_error; default: goto parse_error; } } case 'd': { switch (op[8]) { case 's': if (strcmp(op, "i64.div_s") == 0) { return makeBinary(s, BinaryOp::DivSInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.div_u") == 0) { return makeBinary(s, BinaryOp::DivUInt64); } goto parse_error; default: goto parse_error; } } case 'e': { switch (op[5]) { case 'q': { switch (op[6]) { case '\0': if (strcmp(op, "i64.eq") == 0) { return makeBinary(s, BinaryOp::EqInt64); } goto parse_error; case 'z': if (strcmp(op, "i64.eqz") == 0) { return makeUnary(s, UnaryOp::EqZInt64); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[10]) { case '1': if (strcmp(op, "i64.extend16_s") == 0) { return makeUnary(s, UnaryOp::ExtendS16Int64); } goto parse_error; case '3': if (strcmp(op, "i64.extend32_s") == 0) { return makeUnary(s, UnaryOp::ExtendS32Int64); } goto parse_error; case '8': if (strcmp(op, "i64.extend8_s") == 0) { return makeUnary(s, UnaryOp::ExtendS8Int64); } goto parse_error; case '_': { switch (op[15]) { case 's': if (strcmp(op, "i64.extend_i32_s") == 0) { return makeUnary(s, UnaryOp::ExtendSInt32); } goto parse_error; case 'u': if (strcmp(op, "i64.extend_i32_u") == 0) { return makeUnary(s, UnaryOp::ExtendUInt32); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'g': { switch (op[5]) { case 'e': { switch (op[7]) { case 's': if (strcmp(op, "i64.ge_s") == 0) { return makeBinary(s, BinaryOp::GeSInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.ge_u") == 0) { return makeBinary(s, BinaryOp::GeUInt64); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[7]) { case 's': if (strcmp(op, "i64.gt_s") == 0) { return makeBinary(s, BinaryOp::GtSInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.gt_u") == 0) { return makeBinary(s, BinaryOp::GtUInt64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'l': { switch (op[5]) { case 'e': { switch (op[7]) { case 's': if (strcmp(op, "i64.le_s") == 0) { return makeBinary(s, BinaryOp::LeSInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.le_u") == 0) { return makeBinary(s, BinaryOp::LeUInt64); } goto parse_error; default: goto parse_error; } } case 'o': { switch (op[8]) { case '\0': if (strcmp(op, "i64.load") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/false); } goto parse_error; case '1': { switch (op[11]) { case 's': if (strcmp(op, "i64.load16_s") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/false); } goto parse_error; case 'u': if (strcmp(op, "i64.load16_u") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/false); } goto parse_error; default: goto parse_error; } } case '3': { switch (op[11]) { case 's': if (strcmp(op, "i64.load32_s") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/false); } goto parse_error; case 'u': if (strcmp(op, "i64.load32_u") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/false); } goto parse_error; default: goto parse_error; } } case '8': { switch (op[10]) { case 's': if (strcmp(op, "i64.load8_s") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/false); } goto parse_error; case 'u': if (strcmp(op, "i64.load8_u") == 0) { return makeLoad(s, Type::i64, /*isAtomic=*/false); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 't': { switch (op[7]) { case 's': if (strcmp(op, "i64.lt_s") == 0) { return makeBinary(s, BinaryOp::LtSInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.lt_u") == 0) { return makeBinary(s, BinaryOp::LtUInt64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'm': if (strcmp(op, "i64.mul") == 0) { return makeBinary(s, BinaryOp::MulInt64); } goto parse_error; case 'n': if (strcmp(op, "i64.ne") == 0) { return makeBinary(s, BinaryOp::NeInt64); } goto parse_error; case 'o': if (strcmp(op, "i64.or") == 0) { return makeBinary(s, BinaryOp::OrInt64); } goto parse_error; case 'p': if (strcmp(op, "i64.popcnt") == 0) { return makeUnary(s, UnaryOp::PopcntInt64); } goto parse_error; case 'r': { switch (op[5]) { case 'e': { switch (op[6]) { case 'i': if (strcmp(op, "i64.reinterpret_f64") == 0) { return makeUnary(s, UnaryOp::ReinterpretFloat64); } goto parse_error; case 'm': { switch (op[8]) { case 's': if (strcmp(op, "i64.rem_s") == 0) { return makeBinary(s, BinaryOp::RemSInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.rem_u") == 0) { return makeBinary(s, BinaryOp::RemUInt64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'o': { switch (op[7]) { case 'l': if (strcmp(op, "i64.rotl") == 0) { return makeBinary(s, BinaryOp::RotLInt64); } goto parse_error; case 'r': if (strcmp(op, "i64.rotr") == 0) { return makeBinary(s, BinaryOp::RotRInt64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 's': { switch (op[5]) { case 'h': { switch (op[6]) { case 'l': if (strcmp(op, "i64.shl") == 0) { return makeBinary(s, BinaryOp::ShlInt64); } goto parse_error; case 'r': { switch (op[8]) { case 's': if (strcmp(op, "i64.shr_s") == 0) { return makeBinary(s, BinaryOp::ShrSInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.shr_u") == 0) { return makeBinary(s, BinaryOp::ShrUInt64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 't': { switch (op[9]) { case '\0': if (strcmp(op, "i64.store") == 0) { return makeStore(s, Type::i64, /*isAtomic=*/false); } goto parse_error; case '1': if (strcmp(op, "i64.store16") == 0) { return makeStore(s, Type::i64, /*isAtomic=*/false); } goto parse_error; case '3': if (strcmp(op, "i64.store32") == 0) { return makeStore(s, Type::i64, /*isAtomic=*/false); } goto parse_error; case '8': if (strcmp(op, "i64.store8") == 0) { return makeStore(s, Type::i64, /*isAtomic=*/false); } goto parse_error; default: goto parse_error; } } case 'u': if (strcmp(op, "i64.sub") == 0) { return makeBinary(s, BinaryOp::SubInt64); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[10]) { case 'f': { switch (op[11]) { case '3': { switch (op[14]) { case 's': if (strcmp(op, "i64.trunc_f32_s") == 0) { return makeUnary(s, UnaryOp::TruncSFloat32ToInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.trunc_f32_u") == 0) { return makeUnary(s, UnaryOp::TruncUFloat32ToInt64); } goto parse_error; default: goto parse_error; } } case '6': { switch (op[14]) { case 's': if (strcmp(op, "i64.trunc_f64_s") == 0) { return makeUnary(s, UnaryOp::TruncSFloat64ToInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.trunc_f64_u") == 0) { return makeUnary(s, UnaryOp::TruncUFloat64ToInt64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 's': { switch (op[15]) { case '3': { switch (op[18]) { case 's': if (strcmp(op, "i64.trunc_sat_f32_s") == 0) { return makeUnary(s, UnaryOp::TruncSatSFloat32ToInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.trunc_sat_f32_u") == 0) { return makeUnary(s, UnaryOp::TruncSatUFloat32ToInt64); } goto parse_error; default: goto parse_error; } } case '6': { switch (op[18]) { case 's': if (strcmp(op, "i64.trunc_sat_f64_s") == 0) { return makeUnary(s, UnaryOp::TruncSatSFloat64ToInt64); } goto parse_error; case 'u': if (strcmp(op, "i64.trunc_sat_f64_u") == 0) { return makeUnary(s, UnaryOp::TruncSatUFloat64ToInt64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'x': if (strcmp(op, "i64.xor") == 0) { return makeBinary(s, BinaryOp::XorInt64); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[6]) { case 'a': { switch (op[7]) { case 'b': if (strcmp(op, "i64x2.abs") == 0) { return makeUnary(s, UnaryOp::AbsVecI64x2); } goto parse_error; case 'd': if (strcmp(op, "i64x2.add") == 0) { return makeBinary(s, BinaryOp::AddVecI64x2); } goto parse_error; case 'l': if (strcmp(op, "i64x2.all_true") == 0) { return makeUnary(s, UnaryOp::AllTrueVecI64x2); } goto parse_error; default: goto parse_error; } } case 'b': if (strcmp(op, "i64x2.bitmask") == 0) { return makeUnary(s, UnaryOp::BitmaskVecI64x2); } goto parse_error; case 'e': { switch (op[7]) { case 'q': if (strcmp(op, "i64x2.eq") == 0) { return makeBinary(s, BinaryOp::EqVecI64x2); } goto parse_error; case 'x': { switch (op[9]) { case 'e': { switch (op[13]) { case 'h': { switch (op[24]) { case 's': if (strcmp(op, "i64x2.extend_high_i32x4_s") == 0) { return makeUnary(s, UnaryOp::ExtendHighSVecI32x4ToVecI64x2); } goto parse_error; case 'u': if (strcmp(op, "i64x2.extend_high_i32x4_u") == 0) { return makeUnary(s, UnaryOp::ExtendHighUVecI32x4ToVecI64x2); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[23]) { case 's': if (strcmp(op, "i64x2.extend_low_i32x4_s") == 0) { return makeUnary(s, UnaryOp::ExtendLowSVecI32x4ToVecI64x2); } goto parse_error; case 'u': if (strcmp(op, "i64x2.extend_low_i32x4_u") == 0) { return makeUnary(s, UnaryOp::ExtendLowUVecI32x4ToVecI64x2); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'm': { switch (op[13]) { case 'h': { switch (op[24]) { case 's': if (strcmp(op, "i64x2.extmul_high_i32x4_s") == 0) { return makeBinary(s, BinaryOp::ExtMulHighSVecI64x2); } goto parse_error; case 'u': if (strcmp(op, "i64x2.extmul_high_i32x4_u") == 0) { return makeBinary(s, BinaryOp::ExtMulHighUVecI64x2); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[23]) { case 's': if (strcmp(op, "i64x2.extmul_low_i32x4_s") == 0) { return makeBinary(s, BinaryOp::ExtMulLowSVecI64x2); } goto parse_error; case 'u': if (strcmp(op, "i64x2.extmul_low_i32x4_u") == 0) { return makeBinary(s, BinaryOp::ExtMulLowUVecI64x2); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'r': if (strcmp(op, "i64x2.extract_lane") == 0) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI64x2, 2); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'g': { switch (op[7]) { case 'e': if (strcmp(op, "i64x2.ge_s") == 0) { return makeBinary(s, BinaryOp::GeSVecI64x2); } goto parse_error; case 't': if (strcmp(op, "i64x2.gt_s") == 0) { return makeBinary(s, BinaryOp::GtSVecI64x2); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[7]) { case 'a': if (strcmp(op, "i64x2.laneselect") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI64x2); } goto parse_error; case 'e': if (strcmp(op, "i64x2.le_s") == 0) { return makeBinary(s, BinaryOp::LeSVecI64x2); } goto parse_error; case 't': if (strcmp(op, "i64x2.lt_s") == 0) { return makeBinary(s, BinaryOp::LtSVecI64x2); } goto parse_error; default: goto parse_error; } } case 'm': if (strcmp(op, "i64x2.mul") == 0) { return makeBinary(s, BinaryOp::MulVecI64x2); } goto parse_error; case 'n': { switch (op[8]) { case '\0': if (strcmp(op, "i64x2.ne") == 0) { return makeBinary(s, BinaryOp::NeVecI64x2); } goto parse_error; case 'g': if (strcmp(op, "i64x2.neg") == 0) { return makeUnary(s, UnaryOp::NegVecI64x2); } goto parse_error; default: goto parse_error; } } case 'r': if (strcmp(op, "i64x2.replace_lane") == 0) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI64x2, 2); } goto parse_error; case 's': { switch (op[7]) { case 'h': { switch (op[8]) { case 'l': if (strcmp(op, "i64x2.shl") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI64x2); } goto parse_error; case 'r': { switch (op[10]) { case 's': if (strcmp(op, "i64x2.shr_s") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShrSVecI64x2); } goto parse_error; case 'u': if (strcmp(op, "i64x2.shr_u") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShrUVecI64x2); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "i64x2.splat") == 0) { return makeUnary(s, UnaryOp::SplatVecI64x2); } goto parse_error; case 'u': if (strcmp(op, "i64x2.sub") == 0) { return makeBinary(s, BinaryOp::SubVecI64x2); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case '8': { switch (op[6]) { case 'a': { switch (op[7]) { case 'b': if (strcmp(op, "i8x16.abs") == 0) { return makeUnary(s, UnaryOp::AbsVecI8x16); } goto parse_error; case 'd': { switch (op[9]) { case '\0': if (strcmp(op, "i8x16.add") == 0) { return makeBinary(s, BinaryOp::AddVecI8x16); } goto parse_error; case '_': { switch (op[14]) { case 's': if (strcmp(op, "i8x16.add_sat_s") == 0) { return makeBinary(s, BinaryOp::AddSatSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.add_sat_u") == 0) { return makeBinary(s, BinaryOp::AddSatUVecI8x16); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'l': if (strcmp(op, "i8x16.all_true") == 0) { return makeUnary(s, UnaryOp::AllTrueVecI8x16); } goto parse_error; case 'v': if (strcmp(op, "i8x16.avgr_u") == 0) { return makeBinary(s, BinaryOp::AvgrUVecI8x16); } goto parse_error; default: goto parse_error; } } case 'b': if (strcmp(op, "i8x16.bitmask") == 0) { return makeUnary(s, UnaryOp::BitmaskVecI8x16); } goto parse_error; case 'e': { switch (op[7]) { case 'q': if (strcmp(op, "i8x16.eq") == 0) { return makeBinary(s, BinaryOp::EqVecI8x16); } goto parse_error; case 'x': { switch (op[19]) { case 's': if (strcmp(op, "i8x16.extract_lane_s") == 0) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI8x16, 16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.extract_lane_u") == 0) { return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI8x16, 16); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'g': { switch (op[7]) { case 'e': { switch (op[9]) { case 's': if (strcmp(op, "i8x16.ge_s") == 0) { return makeBinary(s, BinaryOp::GeSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.ge_u") == 0) { return makeBinary(s, BinaryOp::GeUVecI8x16); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[9]) { case 's': if (strcmp(op, "i8x16.gt_s") == 0) { return makeBinary(s, BinaryOp::GtSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.gt_u") == 0) { return makeBinary(s, BinaryOp::GtUVecI8x16); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'l': { switch (op[7]) { case 'a': if (strcmp(op, "i8x16.laneselect") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::LaneselectI8x16); } goto parse_error; case 'e': { switch (op[9]) { case 's': if (strcmp(op, "i8x16.le_s") == 0) { return makeBinary(s, BinaryOp::LeSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.le_u") == 0) { return makeBinary(s, BinaryOp::LeUVecI8x16); } goto parse_error; default: goto parse_error; } } case 't': { switch (op[9]) { case 's': if (strcmp(op, "i8x16.lt_s") == 0) { return makeBinary(s, BinaryOp::LtSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.lt_u") == 0) { return makeBinary(s, BinaryOp::LtUVecI8x16); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'm': { switch (op[7]) { case 'a': { switch (op[10]) { case 's': if (strcmp(op, "i8x16.max_s") == 0) { return makeBinary(s, BinaryOp::MaxSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.max_u") == 0) { return makeBinary(s, BinaryOp::MaxUVecI8x16); } goto parse_error; default: goto parse_error; } } case 'i': { switch (op[10]) { case 's': if (strcmp(op, "i8x16.min_s") == 0) { return makeBinary(s, BinaryOp::MinSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.min_u") == 0) { return makeBinary(s, BinaryOp::MinUVecI8x16); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'n': { switch (op[7]) { case 'a': { switch (op[19]) { case 's': if (strcmp(op, "i8x16.narrow_i16x8_s") == 0) { return makeBinary(s, BinaryOp::NarrowSVecI16x8ToVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.narrow_i16x8_u") == 0) { return makeBinary(s, BinaryOp::NarrowUVecI16x8ToVecI8x16); } goto parse_error; default: goto parse_error; } } case 'e': { switch (op[8]) { case '\0': if (strcmp(op, "i8x16.ne") == 0) { return makeBinary(s, BinaryOp::NeVecI8x16); } goto parse_error; case 'g': if (strcmp(op, "i8x16.neg") == 0) { return makeUnary(s, UnaryOp::NegVecI8x16); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'p': if (strcmp(op, "i8x16.popcnt") == 0) { return makeUnary(s, UnaryOp::PopcntVecI8x16); } goto parse_error; case 'r': { switch (op[8]) { case 'l': if (strcmp(op, "i8x16.relaxed_swizzle") == 0) { return makeBinary(s, BinaryOp::RelaxedSwizzleVecI8x16); } goto parse_error; case 'p': if (strcmp(op, "i8x16.replace_lane") == 0) { return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI8x16, 16); } goto parse_error; default: goto parse_error; } } case 's': { switch (op[7]) { case 'h': { switch (op[8]) { case 'l': if (strcmp(op, "i8x16.shl") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShlVecI8x16); } goto parse_error; case 'r': { switch (op[10]) { case 's': if (strcmp(op, "i8x16.shr_s") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShrSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.shr_u") == 0) { return makeSIMDShift(s, SIMDShiftOp::ShrUVecI8x16); } goto parse_error; default: goto parse_error; } } case 'u': if (strcmp(op, "i8x16.shuffle") == 0) { return makeSIMDShuffle(s); } goto parse_error; default: goto parse_error; } } case 'p': if (strcmp(op, "i8x16.splat") == 0) { return makeUnary(s, UnaryOp::SplatVecI8x16); } goto parse_error; case 'u': { switch (op[9]) { case '\0': if (strcmp(op, "i8x16.sub") == 0) { return makeBinary(s, BinaryOp::SubVecI8x16); } goto parse_error; case '_': { switch (op[14]) { case 's': if (strcmp(op, "i8x16.sub_sat_s") == 0) { return makeBinary(s, BinaryOp::SubSatSVecI8x16); } goto parse_error; case 'u': if (strcmp(op, "i8x16.sub_sat_u") == 0) { return makeBinary(s, BinaryOp::SubSatUVecI8x16); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'w': if (strcmp(op, "i8x16.swizzle") == 0) { return makeBinary(s, BinaryOp::SwizzleVecI8x16); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'f': if (strcmp(op, "if") == 0) { return makeIf(s); } goto parse_error; default: goto parse_error; } } case 'l': { switch (op[2]) { case 'c': { switch (op[6]) { case 'g': if (strcmp(op, "local.get") == 0) { return makeLocalGet(s); } goto parse_error; case 's': if (strcmp(op, "local.set") == 0) { return makeLocalSet(s); } goto parse_error; case 't': if (strcmp(op, "local.tee") == 0) { return makeLocalTee(s); } goto parse_error; default: goto parse_error; } } case 'o': if (strcmp(op, "loop") == 0) { return makeLoop(s); } goto parse_error; default: goto parse_error; } } case 'm': { switch (op[7]) { case 'a': { switch (op[14]) { case 'n': if (strcmp(op, "memory.atomic.notify") == 0) { return makeAtomicNotify(s); } goto parse_error; case 'w': { switch (op[18]) { case '3': if (strcmp(op, "memory.atomic.wait32") == 0) { return makeAtomicWait(s, Type::i32); } goto parse_error; case '6': if (strcmp(op, "memory.atomic.wait64") == 0) { return makeAtomicWait(s, Type::i64); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'c': if (strcmp(op, "memory.copy") == 0) { return makeMemoryCopy(s); } goto parse_error; case 'f': if (strcmp(op, "memory.fill") == 0) { return makeMemoryFill(s); } goto parse_error; case 'g': if (strcmp(op, "memory.grow") == 0) { return makeMemoryGrow(s); } goto parse_error; case 'i': if (strcmp(op, "memory.init") == 0) { return makeMemoryInit(s); } goto parse_error; case 's': if (strcmp(op, "memory.size") == 0) { return makeMemorySize(s); } goto parse_error; default: goto parse_error; } } case 'n': if (strcmp(op, "nop") == 0) { return makeNop(); } goto parse_error; case 'p': if (strcmp(op, "pop") == 0) { return makePop(s); } goto parse_error; case 'r': { switch (op[1]) { case 'e': { switch (op[2]) { case 'f': { switch (op[4]) { case 'a': { switch (op[7]) { case 'd': if (strcmp(op, "ref.as_data") == 0) { return makeRefAs(s, RefAsData); } goto parse_error; case 'f': if (strcmp(op, "ref.as_func") == 0) { return makeRefAs(s, RefAsFunc); } goto parse_error; case 'i': if (strcmp(op, "ref.as_i31") == 0) { return makeRefAs(s, RefAsI31); } goto parse_error; case 'n': if (strcmp(op, "ref.as_non_null") == 0) { return makeRefAs(s, RefAsNonNull); } goto parse_error; default: goto parse_error; } } case 'c': { switch (op[8]) { case '\0': if (strcmp(op, "ref.cast") == 0) { return makeRefCast(s); } goto parse_error; case '_': { switch (op[9]) { case 'n': if (strcmp(op, "ref.cast_nop_static") == 0) { return makeRefCastNopStatic(s); } goto parse_error; case 's': if (strcmp(op, "ref.cast_static") == 0) { return makeRefCastStatic(s); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'e': if (strcmp(op, "ref.eq") == 0) { return makeRefEq(s); } goto parse_error; case 'f': if (strcmp(op, "ref.func") == 0) { return makeRefFunc(s); } goto parse_error; case 'i': { switch (op[7]) { case 'd': if (strcmp(op, "ref.is_data") == 0) { return makeRefIs(s, RefIsData); } goto parse_error; case 'f': if (strcmp(op, "ref.is_func") == 0) { return makeRefIs(s, RefIsFunc); } goto parse_error; case 'i': if (strcmp(op, "ref.is_i31") == 0) { return makeRefIs(s, RefIsI31); } goto parse_error; case 'n': if (strcmp(op, "ref.is_null") == 0) { return makeRefIs(s, RefIsNull); } goto parse_error; default: goto parse_error; } } case 'n': if (strcmp(op, "ref.null") == 0) { return makeRefNull(s); } goto parse_error; case 't': { switch (op[8]) { case '\0': if (strcmp(op, "ref.test") == 0) { return makeRefTest(s); } goto parse_error; case '_': if (strcmp(op, "ref.test_static") == 0) { return makeRefTestStatic(s); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 't': { switch (op[3]) { case 'h': if (strcmp(op, "rethrow") == 0) { return makeRethrow(s); } goto parse_error; case 'u': { switch (op[6]) { case '\0': if (strcmp(op, "return") == 0) { return makeReturn(s); } goto parse_error; case '_': { switch (op[11]) { case '\0': if (strcmp(op, "return_call") == 0) { return makeCall(s, /*isReturn=*/true); } goto parse_error; case '_': { switch (op[12]) { case 'i': if (strcmp(op, "return_call_indirect") == 0) { return makeCallIndirect(s, /*isReturn=*/true); } goto parse_error; case 'r': if (strcmp(op, "return_call_ref") == 0) { return makeCallRef(s, /*isReturn=*/true); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 't': { switch (op[4]) { case 'c': if (strcmp(op, "rtt.canon") == 0) { return makeRttCanon(s); } goto parse_error; case 'f': if (strcmp(op, "rtt.fresh_sub") == 0) { return makeRttFreshSub(s); } goto parse_error; case 's': if (strcmp(op, "rtt.sub") == 0) { return makeRttSub(s); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 's': { switch (op[1]) { case 'e': if (strcmp(op, "select") == 0) { return makeSelect(s); } goto parse_error; case 't': { switch (op[7]) { case 'g': { switch (op[10]) { case '\0': if (strcmp(op, "struct.get") == 0) { return makeStructGet(s); } goto parse_error; case '_': { switch (op[11]) { case 's': if (strcmp(op, "struct.get_s") == 0) { return makeStructGet(s, true); } goto parse_error; case 'u': if (strcmp(op, "struct.get_u") == 0) { return makeStructGet(s, false); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'n': { switch (op[10]) { case '\0': if (strcmp(op, "struct.new") == 0) { return makeStructNewStatic(s, false); } goto parse_error; case '_': { switch (op[11]) { case 'd': { switch (op[18]) { case '\0': if (strcmp(op, "struct.new_default") == 0) { return makeStructNewStatic(s, true); } goto parse_error; case '_': if (strcmp(op, "struct.new_default_with_rtt") == 0) { return makeStructNew(s, true); } goto parse_error; default: goto parse_error; } } case 'w': if (strcmp(op, "struct.new_with_rtt") == 0) { return makeStructNew(s, false); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 's': if (strcmp(op, "struct.set") == 0) { return makeStructSet(s); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 't': { switch (op[1]) { case 'a': { switch (op[6]) { case 'g': { switch (op[7]) { case 'e': if (strcmp(op, "table.get") == 0) { return makeTableGet(s); } goto parse_error; case 'r': if (strcmp(op, "table.grow") == 0) { return makeTableGrow(s); } goto parse_error; default: goto parse_error; } } case 's': { switch (op[7]) { case 'e': if (strcmp(op, "table.set") == 0) { return makeTableSet(s); } goto parse_error; case 'i': if (strcmp(op, "table.size") == 0) { return makeTableSize(s); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'h': { switch (op[2]) { case 'e': if (strcmp(op, "then") == 0) { return makeThenOrElse(s); } goto parse_error; case 'r': if (strcmp(op, "throw") == 0) { return makeThrow(s); } goto parse_error; default: goto parse_error; } } case 'r': if (strcmp(op, "try") == 0) { return makeTry(s); } goto parse_error; case 'u': { switch (op[6]) { case 'e': if (strcmp(op, "tuple.extract") == 0) { return makeTupleExtract(s); } goto parse_error; case 'm': if (strcmp(op, "tuple.make") == 0) { return makeTupleMake(s); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case 'u': if (strcmp(op, "unreachable") == 0) { return makeUnreachable(); } goto parse_error; case 'v': { switch (op[5]) { case 'a': { switch (op[7]) { case 'd': { switch (op[8]) { case '\0': if (strcmp(op, "v128.and") == 0) { return makeBinary(s, BinaryOp::AndVec128); } goto parse_error; case 'n': if (strcmp(op, "v128.andnot") == 0) { return makeBinary(s, BinaryOp::AndNotVec128); } goto parse_error; default: goto parse_error; } } case 'y': if (strcmp(op, "v128.any_true") == 0) { return makeUnary(s, UnaryOp::AnyTrueVec128); } goto parse_error; default: goto parse_error; } } case 'b': if (strcmp(op, "v128.bitselect") == 0) { return makeSIMDTernary(s, SIMDTernaryOp::Bitselect); } goto parse_error; case 'c': if (strcmp(op, "v128.const") == 0) { return makeConst(s, Type::v128); } goto parse_error; case 'l': { switch (op[9]) { case '\0': if (strcmp(op, "v128.load") == 0) { return makeLoad(s, Type::v128, /*isAtomic=*/false); } goto parse_error; case '1': { switch (op[11]) { case '_': { switch (op[12]) { case 'l': if (strcmp(op, "v128.load16_lane") == 0) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load16LaneVec128); } goto parse_error; case 's': if (strcmp(op, "v128.load16_splat") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load16SplatVec128); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[14]) { case 's': if (strcmp(op, "v128.load16x4_s") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load16x4SVec128); } goto parse_error; case 'u': if (strcmp(op, "v128.load16x4_u") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load16x4UVec128); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case '3': { switch (op[11]) { case '_': { switch (op[12]) { case 'l': if (strcmp(op, "v128.load32_lane") == 0) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load32LaneVec128); } goto parse_error; case 's': if (strcmp(op, "v128.load32_splat") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load32SplatVec128); } goto parse_error; case 'z': if (strcmp(op, "v128.load32_zero") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load32ZeroVec128); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[14]) { case 's': if (strcmp(op, "v128.load32x2_s") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load32x2SVec128); } goto parse_error; case 'u': if (strcmp(op, "v128.load32x2_u") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load32x2UVec128); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } case '6': { switch (op[12]) { case 'l': if (strcmp(op, "v128.load64_lane") == 0) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load64LaneVec128); } goto parse_error; case 's': if (strcmp(op, "v128.load64_splat") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load64SplatVec128); } goto parse_error; case 'z': if (strcmp(op, "v128.load64_zero") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load64ZeroVec128); } goto parse_error; default: goto parse_error; } } case '8': { switch (op[10]) { case '_': { switch (op[11]) { case 'l': if (strcmp(op, "v128.load8_lane") == 0) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Load8LaneVec128); } goto parse_error; case 's': if (strcmp(op, "v128.load8_splat") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load8SplatVec128); } goto parse_error; default: goto parse_error; } } case 'x': { switch (op[13]) { case 's': if (strcmp(op, "v128.load8x8_s") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load8x8SVec128); } goto parse_error; case 'u': if (strcmp(op, "v128.load8x8_u") == 0) { return makeSIMDLoad(s, SIMDLoadOp::Load8x8UVec128); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } } default: goto parse_error; } } case 'n': if (strcmp(op, "v128.not") == 0) { return makeUnary(s, UnaryOp::NotVec128); } goto parse_error; case 'o': if (strcmp(op, "v128.or") == 0) { return makeBinary(s, BinaryOp::OrVec128); } goto parse_error; case 's': { switch (op[10]) { case '\0': if (strcmp(op, "v128.store") == 0) { return makeStore(s, Type::v128, /*isAtomic=*/false); } goto parse_error; case '1': if (strcmp(op, "v128.store16_lane") == 0) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store16LaneVec128); } goto parse_error; case '3': if (strcmp(op, "v128.store32_lane") == 0) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store32LaneVec128); } goto parse_error; case '6': if (strcmp(op, "v128.store64_lane") == 0) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store64LaneVec128); } goto parse_error; case '8': if (strcmp(op, "v128.store8_lane") == 0) { return makeSIMDLoadStoreLane(s, SIMDLoadStoreLaneOp::Store8LaneVec128); } goto parse_error; default: goto parse_error; } } case 'x': if (strcmp(op, "v128.xor") == 0) { return makeBinary(s, BinaryOp::XorVec128); } goto parse_error; default: goto parse_error; } } default: goto parse_error; } parse_error: throw ParseException(std::string(op), s.line, s.col); #endif // INSTRUCTION_PARSER // clang-format on binaryen-version_108/src/ir/000077500000000000000000000000001423707623100161465ustar00rootroot00000000000000binaryen-version_108/src/ir/CMakeLists.txt000066400000000000000000000005641423707623100207130ustar00rootroot00000000000000FILE(GLOB ir_HEADERS *.h) set(ir_SOURCES ExpressionAnalyzer.cpp ExpressionManipulator.cpp eh-utils.cpp intrinsics.cpp lubs.cpp memory-utils.cpp module-utils.cpp names.cpp properties.cpp LocalGraph.cpp ReFinalize.cpp stack-utils.cpp table-utils.cpp type-updating.cpp module-splitting.cpp ${ir_HEADERS} ) add_library(ir OBJECT ${ir_SOURCES}) binaryen-version_108/src/ir/ExpressionAnalyzer.cpp000066400000000000000000000336131423707623100225250ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/iteration.h" #include "ir/load-utils.h" #include "ir/utils.h" #include "shared-constants.h" #include "support/hash.h" #include "support/small_vector.h" #include "wasm-traversal.h" #include "wasm.h" namespace wasm { // Given a stack of expressions, checks if the topmost is used as a result. // For example, if the parent is a block and the node is before the last // position, it is not used. bool ExpressionAnalyzer::isResultUsed(ExpressionStack& stack, Function* func) { for (int i = int(stack.size()) - 2; i >= 0; i--) { auto* curr = stack[i]; auto* above = stack[i + 1]; // only if and block can drop values (pre-drop expression was added) FIXME if (curr->is()) { auto* block = curr->cast(); for (size_t j = 0; j < block->list.size() - 1; j++) { if (block->list[j] == above) { return false; } } assert(block->list.back() == above); // continue down } else if (curr->is()) { auto* iff = curr->cast(); if (above == iff->condition) { return true; } if (!iff->ifFalse) { return false; } assert(above == iff->ifTrue || above == iff->ifFalse); // continue down } else { if (curr->is()) { return false; } return true; // all other node types use the result } } // The value might be used, so it depends on if the function returns return func->getResults() != Type::none; } // Checks if a value is dropped. bool ExpressionAnalyzer::isResultDropped(ExpressionStack& stack) { for (int i = int(stack.size()) - 2; i >= 0; i--) { auto* curr = stack[i]; auto* above = stack[i + 1]; if (curr->is()) { auto* block = curr->cast(); for (size_t j = 0; j < block->list.size() - 1; j++) { if (block->list[j] == above) { return false; } } assert(block->list.back() == above); // continue down } else if (curr->is()) { auto* iff = curr->cast(); if (above == iff->condition) { return false; } if (!iff->ifFalse) { return false; } assert(above == iff->ifTrue || above == iff->ifFalse); // continue down } else { if (curr->is()) { return true; // dropped } return false; // all other node types use the result } } return false; } bool ExpressionAnalyzer::flexibleEqual(Expression* left, Expression* right, ExprComparer comparer) { struct Comparer { // for each name on the left, the corresponding name on the right std::map rightNames; std::vector leftStack; std::vector rightStack; bool noteNames(Name left, Name right) { if (left.is() != right.is()) { return false; } if (left.is()) { assert(rightNames.find(left) == rightNames.end()); rightNames[left] = right; } return true; } bool compare(Expression* left, Expression* right, ExprComparer comparer) { // The empty name is the same on both sides. rightNames[Name()] = Name(); leftStack.push_back(left); rightStack.push_back(right); while (leftStack.size() > 0 && rightStack.size() > 0) { left = leftStack.back(); leftStack.pop_back(); right = rightStack.back(); rightStack.pop_back(); if (!left != !right) { return false; } if (!left) { continue; } // There are actual expressions to compare here. Start with the custom // comparer function that was provided. if (comparer(left, right)) { continue; } if (left->type != right->type) { return false; } // Do the actual comparison, updating the names and stacks accordingly. if (!compareNodes(left, right)) { return false; } } if (leftStack.size() > 0 || rightStack.size() > 0) { return false; } return true; } bool compareNodes(Expression* left, Expression* right) { if (left->_id != right->_id) { return false; } #define DELEGATE_ID left->_id // Create cast versions of it for later operations. #define DELEGATE_START(id) \ auto* castLeft = left->cast(); \ WASM_UNUSED(castLeft); \ auto* castRight = right->cast(); \ WASM_UNUSED(castRight); // Handle each type of field, comparing it appropriately. #define DELEGATE_FIELD_CHILD(id, field) \ leftStack.push_back(castLeft->field); \ rightStack.push_back(castRight->field); #define DELEGATE_FIELD_CHILD_VECTOR(id, field) \ if (castLeft->field.size() != castRight->field.size()) { \ return false; \ } \ for (auto* child : castLeft->field) { \ leftStack.push_back(child); \ } \ for (auto* child : castRight->field) { \ rightStack.push_back(child); \ } #define COMPARE_FIELD(field) \ if (castLeft->field != castRight->field) { \ return false; \ } #define DELEGATE_FIELD_INT(id, field) COMPARE_FIELD(field) #define DELEGATE_FIELD_LITERAL(id, field) COMPARE_FIELD(field) #define DELEGATE_FIELD_NAME(id, field) COMPARE_FIELD(field) #define DELEGATE_FIELD_TYPE(id, field) COMPARE_FIELD(field) #define DELEGATE_FIELD_HEAPTYPE(id, field) COMPARE_FIELD(field) #define DELEGATE_FIELD_ADDRESS(id, field) COMPARE_FIELD(field) #define COMPARE_LIST(field) \ if (castLeft->field.size() != castRight->field.size()) { \ return false; \ } \ for (Index i = 0; i < castLeft->field.size(); i++) { \ if (castLeft->field[i] != castRight->field[i]) { \ return false; \ } \ } #define DELEGATE_FIELD_INT_ARRAY(id, field) COMPARE_LIST(field) #define DELEGATE_FIELD_NAME_VECTOR(id, field) COMPARE_LIST(field) #define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) \ if (castLeft->field.is() != castRight->field.is()) { \ return false; \ } \ rightNames[castLeft->field] = castRight->field; #define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) \ if (!compareNames(castLeft->field, castRight->field)) { \ return false; \ } #define DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) \ if (castLeft->field.size() != castRight->field.size()) { \ return false; \ } \ for (Index i = 0; i < castLeft->field.size(); i++) { \ if (!compareNames(castLeft->field[i], castRight->field[i])) { \ return false; \ } \ } #include "wasm-delegations-fields.def" return true; } bool compareNames(Name left, Name right) { auto iter = rightNames.find(left); // If it's not found, that means it was defined out of the expression // being compared, in which case we can just treat it literally - it // must be exactly identical. if (iter != rightNames.end()) { left = iter->second; } return left == right; } }; return Comparer().compare(left, right, comparer); } namespace { struct Hasher { bool visitChildren; size_t digest = wasm::hash(0); Index internalCounter = 0; // for each internal name, its unique id std::map internalNames; ExpressionStack stack; Hasher(Expression* curr, bool visitChildren, ExpressionAnalyzer::ExprHasher custom) : visitChildren(visitChildren) { stack.push_back(curr); // DELEGATE_CALLER_TARGET is a fake target used to denote delegating to // the caller. Add it here to prevent the unknown name error. noteScopeName(DELEGATE_CALLER_TARGET); while (stack.size() > 0) { curr = stack.back(); stack.pop_back(); if (!curr) { // This was an optional child that was not present. Hash a 0 to // represent that. rehash(digest, 0); continue; } rehash(digest, curr->_id); // we often don't need to hash the type, as it is tied to other values // we are hashing anyhow, but there are exceptions: for example, a // local.get's type is determined by the function, so if we are // hashing only expression fragments, then two from different // functions may turn out the same even if the type differs. Likewise, // if we hash between modules, then we need to take int account // call_imports type, etc. The simplest thing is just to hash the // type for all of them. rehash(digest, curr->type.getID()); // If the custom hasher handled this expr, then we have nothing to do. if (custom(curr, digest)) { continue; } // Hash the contents of the expression normally. hashExpression(curr); } } void hashExpression(Expression* curr) { #define DELEGATE_ID curr->_id // Create cast versions of it for later operations. #define DELEGATE_START(id) \ auto* cast = curr->cast(); \ WASM_UNUSED(cast); // Handle each type of field, comparing it appropriately. #define DELEGATE_GET_FIELD(id, field) cast->field #define DELEGATE_FIELD_CHILD(id, field) \ if (visitChildren) { \ stack.push_back(cast->field); \ } #define HASH_FIELD(field) rehash(digest, cast->field); #define DELEGATE_FIELD_INT(id, field) HASH_FIELD(field) #define DELEGATE_FIELD_LITERAL(id, field) HASH_FIELD(field) #define DELEGATE_FIELD_NAME(id, field) visitNonScopeName(cast->field) #define DELEGATE_FIELD_TYPE(id, field) visitType(cast->field); #define DELEGATE_FIELD_HEAPTYPE(id, field) visitHeapType(cast->field); #define DELEGATE_FIELD_ADDRESS(id, field) visitAddress(cast->field); // Note that we only note the scope name, but do not also visit it. That means // that (block $x) and (block) get the same hash. In other words, we only change // the hash based on uses of scope names, that is when there is a noticeable // difference in break targets. #define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) noteScopeName(cast->field); #define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) visitScopeName(cast->field); #include "wasm-delegations-fields.def" } void noteScopeName(Name curr) { if (curr.is()) { internalNames[curr] = internalCounter++; } } void visitScopeName(Name curr) { // We consider 3 cases here, and prefix a hash value of 0, 1, or 2 to // maximally differentiate them. // Try's delegate target can be null. if (!curr.is()) { rehash(digest, 0); return; } // Names are relative, we give the same hash for // (block $x (br $x)) // (block $y (br $y)) // But if the name is not known to us, hash the absolute one. if (!internalNames.count(curr)) { rehash(digest, 1); // Perform the same hashing as a generic name. visitNonScopeName(curr); return; } rehash(digest, 2); rehash(digest, internalNames[curr]); } void visitNonScopeName(Name curr) { rehash(digest, uint64_t(curr.str)); } void visitType(Type curr) { rehash(digest, curr.getID()); } void visitHeapType(HeapType curr) { rehash(digest, curr.getID()); } void visitAddress(Address curr) { rehash(digest, curr.addr); } }; } // anonymous namespace size_t ExpressionAnalyzer::flexibleHash(Expression* curr, ExpressionAnalyzer::ExprHasher custom) { return Hasher(curr, true, custom).digest; } size_t ExpressionAnalyzer::shallowHash(Expression* curr) { return Hasher(curr, false, ExpressionAnalyzer::nothingHasher).digest; } } // namespace wasm binaryen-version_108/src/ir/ExpressionManipulator.cpp000066400000000000000000000107411423707623100232300ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/load-utils.h" #include "ir/utils.h" namespace wasm::ExpressionManipulator { Expression* flexibleCopy(Expression* original, Module& wasm, CustomCopier custom) { // Perform the copy using a stack of tasks (avoiding recusion). struct CopyTask { // The thing to copy. Expression* original; // The location of the pointer to write the copy to. Expression** destPointer; }; std::vector tasks; Expression* ret; tasks.push_back({original, &ret}); while (!tasks.empty()) { auto task = tasks.back(); tasks.pop_back(); // If the custom copier handled this one, we have nothing to do. auto* copy = custom(task.original); if (copy) { *task.destPointer = copy; continue; } // If the original is a null, just copy that. (This can happen for an // optional child.) auto* original = task.original; if (original == nullptr) { *task.destPointer = nullptr; continue; } // Allocate a new copy, and copy the fields. #define DELEGATE_ID original->_id // Allocate a new expression of the right type, and create cast versions of it // for later operations. #define DELEGATE_START(id) \ copy = wasm.allocator.alloc(); \ auto* castOriginal = original->cast(); \ WASM_UNUSED(castOriginal); \ auto* castCopy = copy->cast(); \ WASM_UNUSED(castCopy); // Handle each type of field, copying it appropriately. #define DELEGATE_FIELD_CHILD(id, field) \ tasks.push_back({castOriginal->field, &castCopy->field}); #define DELEGATE_FIELD_CHILD_VECTOR(id, field) \ castCopy->field.resize(castOriginal->field.size()); \ for (Index i = 0; i < castOriginal->field.size(); i++) { \ tasks.push_back({castOriginal->field[i], &castCopy->field[i]}); \ } #define COPY_FIELD(field) castCopy->field = castOriginal->field; #define DELEGATE_FIELD_INT(id, field) COPY_FIELD(field) #define DELEGATE_FIELD_LITERAL(id, field) COPY_FIELD(field) #define DELEGATE_FIELD_NAME(id, field) COPY_FIELD(field) #define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) COPY_FIELD(field) #define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) COPY_FIELD(field) #define DELEGATE_FIELD_TYPE(id, field) COPY_FIELD(field) #define DELEGATE_FIELD_HEAPTYPE(id, field) COPY_FIELD(field) #define DELEGATE_FIELD_ADDRESS(id, field) COPY_FIELD(field) #define COPY_FIELD_LIST(field) \ for (Index i = 0; i < castOriginal->field.size(); i++) { \ castCopy->field[i] = castOriginal->field[i]; \ } #define COPY_VECTOR(field) \ castCopy->field.resize(castOriginal->field.size()); \ COPY_FIELD_LIST(field) #define COPY_ARRAY(field) \ assert(castCopy->field.size() == castOriginal->field.size()); \ COPY_FIELD_LIST(field) #define DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) COPY_VECTOR(field) #define DELEGATE_FIELD_NAME_VECTOR(id, field) COPY_VECTOR(field) #define DELEGATE_FIELD_INT_ARRAY(id, field) COPY_ARRAY(field) #include "wasm-delegations-fields.def" // The type can be simply copied. copy->type = original->type; // Write the copy to where it should be referred to. *task.destPointer = copy; } return ret; } // Splice an item into the middle of a block's list void spliceIntoBlock(Block* block, Index index, Expression* add) { block->list.insertAt(index, add); block->finalize(block->type); } } // namespace wasm::ExpressionManipulator binaryen-version_108/src/ir/LocalGraph.cpp000066400000000000000000000261751423707623100207010ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include namespace wasm { namespace LocalGraphInternal { // Information about a basic block. struct Info { // actions occurring in this block: local.gets and local.sets std::vector actions; // for each index, the last local.set for it std::unordered_map lastSets; }; // flow helper class. flows the gets to their sets struct Flower : public CFGWalker, Info> { LocalGraph::GetSetses& getSetses; LocalGraph::Locations& locations; Flower(LocalGraph::GetSetses& getSetses, LocalGraph::Locations& locations, Function* func) : getSetses(getSetses), locations(locations) { setFunction(func); // create the CFG by walking the IR CFGWalker, Info>::doWalkFunction(func); // flow gets across blocks flow(func); } BasicBlock* makeBasicBlock() { return new BasicBlock(); } // cfg traversal work static void doVisitLocalGet(Flower* self, Expression** currp) { auto* curr = (*currp)->cast(); // if in unreachable code, skip if (!self->currBasicBlock) { return; } self->currBasicBlock->contents.actions.emplace_back(curr); self->locations[curr] = currp; } static void doVisitLocalSet(Flower* self, Expression** currp) { auto* curr = (*currp)->cast(); // if in unreachable code, skip if (!self->currBasicBlock) { return; } self->currBasicBlock->contents.actions.emplace_back(curr); self->currBasicBlock->contents.lastSets[curr->index] = curr; self->locations[curr] = currp; } void flow(Function* func) { // This block struct is optimized for this flow process (Minimal // information, iteration index). struct FlowBlock { // Last Traversed Iteration: This value helps us to find if this block has // been seen while traversing blocks. We compare this value to the current // iteration index in order to determine if we already process this block // in the current iteration. This speeds up the processing compared to // unordered_set or other struct usage. (No need to reset internal values, // lookup into container, ...) size_t lastTraversedIteration; std::vector actions; std::vector in; // Sor each index, the last local.set for it // The unordered_map from BasicBlock.Info is converted into a vector // This speeds up search as there are usually few sets in a block, so just // scanning them linearly is efficient, avoiding hash computations (while // in Info, it's convenient to have a map so we can assign them easily, // where the last one seen overwrites the previous; and, we do that O(1)). std::vector> lastSets; }; auto numLocals = func->getNumLocals(); std::vector> allGets; allGets.resize(numLocals); std::vector work; // Convert input blocks (basicBlocks) into more efficient flow blocks to // improve memory access. std::vector flowBlocks; flowBlocks.resize(basicBlocks.size()); // Init mapping between basicblocks and flowBlocks std::unordered_map basicToFlowMap; for (Index i = 0; i < basicBlocks.size(); ++i) { basicToFlowMap[basicBlocks[i].get()] = &flowBlocks[i]; } const size_t NULL_ITERATION = -1; FlowBlock* entryFlowBlock = nullptr; for (Index i = 0; i < flowBlocks.size(); ++i) { auto& block = basicBlocks[i]; auto& flowBlock = flowBlocks[i]; // Get the equivalent block to entry in the flow list if (block.get() == entry) { entryFlowBlock = &flowBlock; } flowBlock.lastTraversedIteration = NULL_ITERATION; flowBlock.actions.swap(block->contents.actions); // Map in block to flow blocks auto& in = block->in; flowBlock.in.resize(in.size()); std::transform(in.begin(), in.end(), flowBlock.in.begin(), [&](BasicBlock* block) { return basicToFlowMap[block]; }); // Convert unordered_map to vector. flowBlock.lastSets.reserve(block->contents.lastSets.size()); for (auto set : block->contents.lastSets) { flowBlock.lastSets.emplace_back(set); } } assert(entryFlowBlock != nullptr); size_t currentIteration = 0; for (auto& block : flowBlocks) { #ifdef LOCAL_GRAPH_DEBUG std::cout << "basic block " << block.get() << " :\n"; for (auto& action : block->contents.actions) { std::cout << " action: " << *action << '\n'; } for (auto* lastSet : block->contents.lastSets) { std::cout << " last set " << lastSet << '\n'; } #endif // go through the block, finding each get and adding it to its index, // and seeing how sets affect that auto& actions = block.actions; // move towards the front, handling things as we go for (int i = int(actions.size()) - 1; i >= 0; i--) { auto* action = actions[i]; if (auto* get = action->dynCast()) { allGets[get->index].push_back(get); } else { // This set is the only set for all those gets. auto* set = action->cast(); auto& gets = allGets[set->index]; for (auto* get : gets) { getSetses[get].insert(set); } gets.clear(); } } // If anything is left, we must flow it back through other blocks. we // can do that for all gets as a whole, they will get the same results. for (Index index = 0; index < numLocals; index++) { auto& gets = allGets[index]; if (gets.empty()) { continue; } work.push_back(&block); // Note that we may need to revisit the later parts of this initial // block, if we are in a loop, so don't mark it as seen. while (!work.empty()) { auto* curr = work.back(); work.pop_back(); // We have gone through this block; now we must handle flowing to // the inputs. if (curr->in.empty()) { if (curr == entryFlowBlock) { // These receive a param or zero init value. for (auto* get : gets) { getSetses[get].insert(nullptr); } } } else { for (auto* pred : curr->in) { if (pred->lastTraversedIteration == currentIteration) { // We've already seen pred in this iteration. continue; } pred->lastTraversedIteration = currentIteration; auto lastSet = std::find_if(pred->lastSets.begin(), pred->lastSets.end(), [&](std::pair& value) { return value.first == index; }); if (lastSet != pred->lastSets.end()) { // There is a set here, apply it, and stop the flow. for (auto* get : gets) { getSetses[get].insert(lastSet->second); } } else { // Keep on flowing. work.push_back(pred); } } } } gets.clear(); currentIteration++; } } } }; } // namespace LocalGraphInternal // LocalGraph implementation LocalGraph::LocalGraph(Function* func) : func(func) { LocalGraphInternal::Flower flower(getSetses, locations, func); #ifdef LOCAL_GRAPH_DEBUG std::cout << "LocalGraph::dump\n"; for (auto& [get, sets] : getSetses) { std::cout << "GET\n" << get << " is influenced by\n"; for (auto* set : sets) { std::cout << set << '\n'; } } std::cout << "total locations: " << locations.size() << '\n'; #endif } bool LocalGraph::equivalent(LocalGet* a, LocalGet* b) { auto& aSets = getSetses[a]; auto& bSets = getSetses[b]; // The simple case of one set dominating two gets easily proves that they must // have the same value. (Note that we can infer dominance from the fact that // there is a single set: if the set did not dominate one of the gets then // there would definitely be another set for that get, the zero initialization // at the function entry, if nothing else.) if (aSets.size() != 1 || bSets.size() != 1) { // TODO: use a LinearExecutionWalker to find trivially equal gets in basic // blocks. that plus the above should handle 80% of cases. // TODO: handle chains, merges and other situations return false; } auto* aSet = *aSets.begin(); auto* bSet = *bSets.begin(); if (aSet != bSet) { return false; } if (!aSet) { // They are both nullptr, indicating the implicit value for a parameter // or the zero for a local. if (func->isParam(a->index)) { // For parameters to be equivalent they must have the exact same // index. return a->index == b->index; } else { // As locals, they are both of value zero, but must have the right // type as well. return func->getLocalType(a->index) == func->getLocalType(b->index); } } else { // They are both the same actual set. return true; } } void LocalGraph::computeSetInfluences() { for (auto& [curr, _] : locations) { if (auto* get = curr->dynCast()) { for (auto* set : getSetses[get]) { setInfluences[set].insert(get); } } } } void LocalGraph::computeGetInfluences() { for (auto& [curr, _] : locations) { if (auto* set = curr->dynCast()) { FindAll findAll(set->value); for (auto* get : findAll.list) { getInfluences[get].insert(set); } } } } void LocalGraph::computeSSAIndexes() { std::unordered_map> indexSets; for (auto& [get, sets] : getSetses) { for (auto* set : sets) { indexSets[get->index].insert(set); } } for (auto& [curr, _] : locations) { if (auto* set = curr->dynCast()) { auto& sets = indexSets[set->index]; if (sets.size() == 1 && *sets.begin() != curr) { // While it has just one set, it is not the right one (us), // so mark it invalid. sets.clear(); } } } for (auto& [index, sets] : indexSets) { if (sets.size() == 1) { SSAIndexes.insert(index); } } } bool LocalGraph::isSSA(Index x) { return SSAIndexes.count(x); } } // namespace wasm binaryen-version_108/src/ir/ReFinalize.cpp000066400000000000000000000230141423707623100207020ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/branch-utils.h" #include "ir/find_all.h" #include "ir/utils.h" namespace wasm { static Type getValueType(Expression* value) { return value ? value->type : Type::none; } namespace { // Handles a branch fixup for visitBlock: if the branch goes to the // target name, give it a value which is unreachable. template void handleBranchForVisitBlock(T* curr, Name name, Module* module) { if (BranchUtils::getUniqueTargets(curr).count(name)) { assert(!curr->value); Builder builder(*module); curr->value = builder.makeUnreachable(); } } } // anonymous namespace void ReFinalize::visitBlock(Block* curr) { if (curr->list.size() == 0) { curr->type = Type::none; return; } if (curr->name.is()) { auto iter = breakTypes.find(curr->name); if (iter != breakTypes.end()) { // Set the type to be a supertype of the branch types and the flowed-out // type. TODO: calculate proper LUBs to compute a new correct type in this // situation. auto& types = iter->second; types.insert(curr->list.back()->type); curr->type = Type::getLeastUpperBound(types); return; } } curr->type = curr->list.back()->type; if (curr->type == Type::unreachable) { return; } // type is none, but we might be unreachable if (curr->type == Type::none) { for (auto* child : curr->list) { if (child->type == Type::unreachable) { curr->type = Type::unreachable; break; } } } } void ReFinalize::visitIf(If* curr) { curr->finalize(); } void ReFinalize::visitLoop(Loop* curr) { curr->finalize(); } void ReFinalize::visitBreak(Break* curr) { curr->finalize(); auto valueType = getValueType(curr->value); if (valueType == Type::unreachable) { replaceUntaken(curr->value, curr->condition); } else { updateBreakValueType(curr->name, valueType); } } void ReFinalize::visitSwitch(Switch* curr) { curr->finalize(); auto valueType = getValueType(curr->value); if (valueType == Type::unreachable) { replaceUntaken(curr->value, curr->condition); } else { for (auto target : curr->targets) { updateBreakValueType(target, valueType); } updateBreakValueType(curr->default_, valueType); } } void ReFinalize::visitCall(Call* curr) { curr->finalize(); } void ReFinalize::visitCallIndirect(CallIndirect* curr) { curr->finalize(); } void ReFinalize::visitLocalGet(LocalGet* curr) { curr->finalize(); } void ReFinalize::visitLocalSet(LocalSet* curr) { curr->finalize(); } void ReFinalize::visitGlobalGet(GlobalGet* curr) { curr->finalize(); } void ReFinalize::visitGlobalSet(GlobalSet* curr) { curr->finalize(); } void ReFinalize::visitLoad(Load* curr) { curr->finalize(); } void ReFinalize::visitStore(Store* curr) { curr->finalize(); } void ReFinalize::visitAtomicRMW(AtomicRMW* curr) { curr->finalize(); } void ReFinalize::visitAtomicCmpxchg(AtomicCmpxchg* curr) { curr->finalize(); } void ReFinalize::visitAtomicWait(AtomicWait* curr) { curr->finalize(); } void ReFinalize::visitAtomicNotify(AtomicNotify* curr) { curr->finalize(); } void ReFinalize::visitAtomicFence(AtomicFence* curr) { curr->finalize(); } void ReFinalize::visitSIMDExtract(SIMDExtract* curr) { curr->finalize(); } void ReFinalize::visitSIMDReplace(SIMDReplace* curr) { curr->finalize(); } void ReFinalize::visitSIMDShuffle(SIMDShuffle* curr) { curr->finalize(); } void ReFinalize::visitSIMDTernary(SIMDTernary* curr) { curr->finalize(); } void ReFinalize::visitSIMDShift(SIMDShift* curr) { curr->finalize(); } void ReFinalize::visitSIMDLoad(SIMDLoad* curr) { curr->finalize(); } void ReFinalize::visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { curr->finalize(); } void ReFinalize::visitMemoryInit(MemoryInit* curr) { curr->finalize(); } void ReFinalize::visitDataDrop(DataDrop* curr) { curr->finalize(); } void ReFinalize::visitMemoryCopy(MemoryCopy* curr) { curr->finalize(); } void ReFinalize::visitMemoryFill(MemoryFill* curr) { curr->finalize(); } void ReFinalize::visitConst(Const* curr) { curr->finalize(); } void ReFinalize::visitUnary(Unary* curr) { curr->finalize(); } void ReFinalize::visitBinary(Binary* curr) { curr->finalize(); } void ReFinalize::visitSelect(Select* curr) { curr->finalize(); } void ReFinalize::visitDrop(Drop* curr) { curr->finalize(); } void ReFinalize::visitReturn(Return* curr) { curr->finalize(); } void ReFinalize::visitMemorySize(MemorySize* curr) { curr->finalize(); } void ReFinalize::visitMemoryGrow(MemoryGrow* curr) { curr->finalize(); } void ReFinalize::visitRefNull(RefNull* curr) { curr->finalize(); } void ReFinalize::visitRefIs(RefIs* curr) { curr->finalize(); } void ReFinalize::visitRefFunc(RefFunc* curr) { // TODO: should we look up the function and update the type from there? This // could handle a change to the function's type, but is also not really what // this class has been meant to do. } void ReFinalize::visitRefEq(RefEq* curr) { curr->finalize(); } void ReFinalize::visitTableGet(TableGet* curr) { curr->finalize(); } void ReFinalize::visitTableSet(TableSet* curr) { curr->finalize(); } void ReFinalize::visitTableSize(TableSize* curr) { curr->finalize(); } void ReFinalize::visitTableGrow(TableGrow* curr) { curr->finalize(); } void ReFinalize::visitTry(Try* curr) { curr->finalize(); } void ReFinalize::visitThrow(Throw* curr) { curr->finalize(); } void ReFinalize::visitRethrow(Rethrow* curr) { curr->finalize(); } void ReFinalize::visitNop(Nop* curr) { curr->finalize(); } void ReFinalize::visitUnreachable(Unreachable* curr) { curr->finalize(); } void ReFinalize::visitPop(Pop* curr) { curr->finalize(); } void ReFinalize::visitTupleMake(TupleMake* curr) { curr->finalize(); } void ReFinalize::visitTupleExtract(TupleExtract* curr) { curr->finalize(); } void ReFinalize::visitI31New(I31New* curr) { curr->finalize(); } void ReFinalize::visitI31Get(I31Get* curr) { curr->finalize(); } void ReFinalize::visitCallRef(CallRef* curr) { curr->finalize(); } void ReFinalize::visitRefTest(RefTest* curr) { curr->finalize(); } void ReFinalize::visitRefCast(RefCast* curr) { curr->finalize(); } void ReFinalize::visitBrOn(BrOn* curr) { curr->finalize(); if (curr->type == Type::unreachable) { replaceUntaken(curr->ref, nullptr); } else { updateBreakValueType(curr->name, curr->getSentType()); } } void ReFinalize::visitRttCanon(RttCanon* curr) { curr->finalize(); } void ReFinalize::visitRttSub(RttSub* curr) { curr->finalize(); } void ReFinalize::visitStructNew(StructNew* curr) { curr->finalize(); } void ReFinalize::visitStructGet(StructGet* curr) { curr->finalize(); } void ReFinalize::visitStructSet(StructSet* curr) { curr->finalize(); } void ReFinalize::visitArrayNew(ArrayNew* curr) { curr->finalize(); } void ReFinalize::visitArrayInit(ArrayInit* curr) { curr->finalize(); } void ReFinalize::visitArrayGet(ArrayGet* curr) { curr->finalize(); } void ReFinalize::visitArraySet(ArraySet* curr) { curr->finalize(); } void ReFinalize::visitArrayLen(ArrayLen* curr) { curr->finalize(); } void ReFinalize::visitArrayCopy(ArrayCopy* curr) { curr->finalize(); } void ReFinalize::visitRefAs(RefAs* curr) { curr->finalize(); } void ReFinalize::visitFunction(Function* curr) { // we may have changed the body from unreachable to none, which might be bad // if the function has a return value if (curr->getResults() != Type::none && curr->body->type == Type::none) { Builder builder(*getModule()); curr->body = builder.blockify(curr->body, builder.makeUnreachable()); } } void ReFinalize::visitExport(Export* curr) { WASM_UNREACHABLE("unimp"); } void ReFinalize::visitGlobal(Global* curr) { WASM_UNREACHABLE("unimp"); } void ReFinalize::visitTable(Table* curr) { WASM_UNREACHABLE("unimp"); } void ReFinalize::visitElementSegment(ElementSegment* curr) { WASM_UNREACHABLE("unimp"); } void ReFinalize::visitMemory(Memory* curr) { WASM_UNREACHABLE("unimp"); } void ReFinalize::visitTag(Tag* curr) { WASM_UNREACHABLE("unimp"); } void ReFinalize::visitModule(Module* curr) { WASM_UNREACHABLE("unimp"); } void ReFinalize::updateBreakValueType(Name name, Type type) { if (type != Type::unreachable) { breakTypes[name].insert(type); } } // Replace an untaken branch/switch with an unreachable value. // A condition may also exist and may or may not be unreachable. void ReFinalize::replaceUntaken(Expression* value, Expression* condition) { assert(value->type == Type::unreachable); auto* replacement = value; if (condition) { Builder builder(*getModule()); // Even if we have // (block // (unreachable) // (i32.const 1) // ) // we want the block type to be unreachable. That is valid as // the value is unreachable, and necessary since the type of // the condition did not have an impact before (the break/switch // type was unreachable), and might not fit in. if (condition->type.isConcrete()) { condition = builder.makeDrop(condition); } replacement = builder.makeSequence(value, condition); assert(replacement->type.isBasic() && "Basic type expected"); } replaceCurrent(replacement); } } // namespace wasm binaryen-version_108/src/ir/abstract.h000066400000000000000000000150431423707623100201250ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Abstracts out operations from specific opcodes. #ifndef wasm_ir_abstract_h #define wasm_ir_abstract_h #include namespace wasm::Abstract { enum Op { // Unary Abs, Neg, Popcnt, // Binary Add, Sub, Mul, DivU, DivS, Rem, RemU, RemS, Shl, ShrU, ShrS, RotL, RotR, And, Or, Xor, // Relational EqZ, Eq, Ne, LtS, LtU, LeS, LeU, GtS, GtU, GeS, GeU }; inline bool hasAnyShift(BinaryOp op) { return op == ShlInt32 || op == ShrSInt32 || op == ShrUInt32 || op == RotLInt32 || op == RotRInt32 || op == ShlInt64 || op == ShrSInt64 || op == ShrUInt64 || op == RotLInt64 || op == RotRInt64; } inline bool hasAnyReinterpret(UnaryOp op) { return op == ReinterpretInt32 || op == ReinterpretInt64 || op == ReinterpretFloat32 || op == ReinterpretFloat64; } // Provide a wasm type and an abstract op and get the concrete one. For example, // you can provide i32 and Add and receive the specific opcode for a 32-bit // addition, AddInt32. If the op does not exist, it returns Invalid. inline UnaryOp getUnary(Type type, Op op) { switch (type.getBasic()) { case Type::i32: { switch (op) { case EqZ: return EqZInt32; case Popcnt: return PopcntInt32; default: return InvalidUnary; } break; } case Type::i64: { switch (op) { case EqZ: return EqZInt64; case Popcnt: return PopcntInt64; default: return InvalidUnary; } break; } case Type::f32: { switch (op) { case Abs: return AbsFloat32; case Neg: return NegFloat32; default: return InvalidUnary; } break; } case Type::f64: { switch (op) { case Abs: return AbsFloat64; case Neg: return NegFloat64; default: return InvalidUnary; } break; } case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: { return InvalidUnary; } } WASM_UNREACHABLE("invalid type"); } inline BinaryOp getBinary(Type type, Op op) { switch (type.getBasic()) { case Type::i32: { switch (op) { case Add: return AddInt32; case Sub: return SubInt32; case Mul: return MulInt32; case DivU: return DivUInt32; case DivS: return DivSInt32; case RemU: return RemUInt32; case RemS: return RemSInt32; case Shl: return ShlInt32; case ShrU: return ShrUInt32; case ShrS: return ShrSInt32; case RotL: return RotLInt32; case RotR: return RotRInt32; case And: return AndInt32; case Or: return OrInt32; case Xor: return XorInt32; case Eq: return EqInt32; case Ne: return NeInt32; case LtS: return LtSInt32; case LtU: return LtUInt32; case LeS: return LeSInt32; case LeU: return LeUInt32; case GtS: return GtSInt32; case GtU: return GtUInt32; case GeS: return GeSInt32; case GeU: return GeUInt32; default: return InvalidBinary; } break; } case Type::i64: { switch (op) { case Add: return AddInt64; case Sub: return SubInt64; case Mul: return MulInt64; case DivU: return DivUInt64; case DivS: return DivSInt64; case RemU: return RemUInt64; case RemS: return RemSInt64; case Shl: return ShlInt64; case ShrU: return ShrUInt64; case ShrS: return ShrSInt64; case RotL: return RotLInt64; case RotR: return RotRInt64; case And: return AndInt64; case Or: return OrInt64; case Xor: return XorInt64; case Eq: return EqInt64; case Ne: return NeInt64; case LtS: return LtSInt64; case LtU: return LtUInt64; case LeS: return LeSInt64; case LeU: return LeUInt64; case GtS: return GtSInt64; case GtU: return GtUInt64; case GeS: return GeSInt64; case GeU: return GeUInt64; default: return InvalidBinary; } break; } case Type::f32: { switch (op) { case Add: return AddFloat32; case Sub: return SubFloat32; case Mul: return MulFloat32; case DivU: return DivFloat32; case DivS: return DivFloat32; case Eq: return EqFloat32; case Ne: return NeFloat32; default: return InvalidBinary; } break; } case Type::f64: { switch (op) { case Add: return AddFloat64; case Sub: return SubFloat64; case Mul: return MulFloat64; case DivU: return DivFloat64; case DivS: return DivFloat64; case Eq: return EqFloat64; case Ne: return NeFloat64; default: return InvalidBinary; } break; } case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: { return InvalidBinary; } } WASM_UNREACHABLE("invalid type"); } } // namespace wasm::Abstract #endif // wasm_ir_abstract_h binaryen-version_108/src/ir/bits.h000066400000000000000000000345531423707623100172720ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_bits_h #define wasm_ir_bits_h #include "ir/literal-utils.h" #include "support/bits.h" #include "wasm-builder.h" #include namespace wasm::Bits { // get a mask to keep only the low # of bits inline int32_t lowBitMask(int32_t bits) { uint32_t ret = -1; if (bits >= 32) { return ret; } return ret >> (32 - bits); } // checks if the input is a mask of lower bits, i.e., all 1s up to some high // bit, and all zeros from there. returns the number of masked bits, or 0 if // this is not such a mask inline uint32_t getMaskedBits(uint32_t mask) { if (mask == uint32_t(-1)) { return 32; // all the bits } if (mask == 0) { return 0; // trivially not a mask } // otherwise, see if x & (x + 1) turns this into non-zero value // 00011111 & (00011111 + 1) => 0 if (mask & (mask + 1)) { return 0; } // this is indeed a mask return 32 - countLeadingZeroes(mask); } // gets the number of effective shifts a shift operation does. In // wasm, only 5 bits matter for 32-bit shifts, and 6 for 64. inline Index getEffectiveShifts(Index amount, Type type) { if (type == Type::i32) { return amount & 31; } else if (type == Type::i64) { return amount & 63; } WASM_UNREACHABLE("unexpected type"); } inline Index getEffectiveShifts(Expression* expr) { auto* amount = expr->cast(); if (amount->type == Type::i32) { return getEffectiveShifts(amount->value.geti32(), Type::i32); } else if (amount->type == Type::i64) { return getEffectiveShifts(amount->value.geti64(), Type::i64); } WASM_UNREACHABLE("unexpected type"); } inline Expression* makeSignExt(Expression* value, Index bytes, Module& wasm) { if (value->type == Type::i32) { if (bytes == 1 || bytes == 2) { auto shifts = bytes == 1 ? 24 : 16; Builder builder(wasm); return builder.makeBinary( ShrSInt32, builder.makeBinary( ShlInt32, value, LiteralUtils::makeFromInt32(shifts, Type::i32, wasm)), LiteralUtils::makeFromInt32(shifts, Type::i32, wasm)); } assert(bytes == 4); return value; // nothing to do } else { assert(value->type == Type::i64); if (bytes == 1 || bytes == 2 || bytes == 4) { auto shifts = bytes == 1 ? 56 : (bytes == 2 ? 48 : 32); Builder builder(wasm); return builder.makeBinary( ShrSInt64, builder.makeBinary( ShlInt64, value, LiteralUtils::makeFromInt32(shifts, Type::i64, wasm)), LiteralUtils::makeFromInt32(shifts, Type::i64, wasm)); } assert(bytes == 8); return value; // nothing to do } } // getMaxBits() helper that has pessimistic results for the bits used in locals. struct DummyLocalInfoProvider { Index getMaxBitsForLocal(LocalGet* get) { if (get->type == Type::i32) { return 32; } else if (get->type == Type::i64) { return 64; } WASM_UNREACHABLE("type has no integer bit size"); } }; // Returns the maximum amount of bits used in an integer expression // not extremely precise (doesn't look into add operands, etc.) // LocalInfoProvider is an optional class that can provide answers about // local.get. template Index getMaxBits(Expression* curr, LocalInfoProvider* localInfoProvider = nullptr) { if (auto* c = curr->dynCast()) { switch (curr->type.getBasic()) { case Type::i32: return 32 - c->value.countLeadingZeroes().geti32(); case Type::i64: return 64 - c->value.countLeadingZeroes().geti64(); default: WASM_UNREACHABLE("invalid type"); } } else if (auto* binary = curr->dynCast()) { switch (binary->op) { // 32-bit case RotLInt32: case RotRInt32: case SubInt32: return 32; case AddInt32: { auto maxBitsLeft = getMaxBits(binary->left, localInfoProvider); auto maxBitsRight = getMaxBits(binary->right, localInfoProvider); return std::min(Index(32), std::max(maxBitsLeft, maxBitsRight) + 1); } case MulInt32: { auto maxBitsRight = getMaxBits(binary->right, localInfoProvider); auto maxBitsLeft = getMaxBits(binary->left, localInfoProvider); return std::min(Index(32), maxBitsLeft + maxBitsRight); } case DivSInt32: { if (auto* c = binary->right->dynCast()) { int32_t maxBitsLeft = getMaxBits(binary->left, localInfoProvider); // If either side might be negative, then the result will be negative if (maxBitsLeft == 32 || c->value.geti32() < 0) { return 32; } int32_t bitsRight = getMaxBits(c); return std::max(0, maxBitsLeft - bitsRight + 1); } return 32; } case DivUInt32: { int32_t maxBitsLeft = getMaxBits(binary->left, localInfoProvider); if (auto* c = binary->right->dynCast()) { int32_t bitsRight = getMaxBits(c); return std::max(0, maxBitsLeft - bitsRight + 1); } return maxBitsLeft; } case RemSInt32: { if (auto* c = binary->right->dynCast()) { auto maxBitsLeft = getMaxBits(binary->left, localInfoProvider); // if left may be negative, the result may be negative if (maxBitsLeft == 32) { return 32; } auto bitsRight = Index(ceilLog2(c->value.geti32())); return std::min(maxBitsLeft, bitsRight); } return 32; } case RemUInt32: { if (auto* c = binary->right->dynCast()) { auto maxBitsLeft = getMaxBits(binary->left, localInfoProvider); auto bitsRight = Index(ceilLog2(c->value.geti32())); return std::min(maxBitsLeft, bitsRight); } return 32; } case AndInt32: { return std::min(getMaxBits(binary->left, localInfoProvider), getMaxBits(binary->right, localInfoProvider)); } case OrInt32: case XorInt32: { return std::max(getMaxBits(binary->left, localInfoProvider), getMaxBits(binary->right, localInfoProvider)); } case ShlInt32: { if (auto* shifts = binary->right->dynCast()) { return std::min(Index(32), getMaxBits(binary->left, localInfoProvider) + Bits::getEffectiveShifts(shifts)); } return 32; } case ShrUInt32: { if (auto* shift = binary->right->dynCast()) { auto maxBits = getMaxBits(binary->left, localInfoProvider); auto shifts = std::min(Index(Bits::getEffectiveShifts(shift)), maxBits); // can ignore more shifts than zero us out return std::max(Index(0), maxBits - shifts); } return 32; } case ShrSInt32: { if (auto* shift = binary->right->dynCast()) { auto maxBits = getMaxBits(binary->left, localInfoProvider); // if left may be negative, the result may be negative if (maxBits == 32) { return 32; } auto shifts = std::min(Index(Bits::getEffectiveShifts(shift)), maxBits); // can ignore more shifts than zero us out return std::max(Index(0), maxBits - shifts); } return 32; } case RotLInt64: case RotRInt64: case SubInt64: return 64; case AddInt64: { auto maxBitsLeft = getMaxBits(binary->left, localInfoProvider); auto maxBitsRight = getMaxBits(binary->right, localInfoProvider); return std::min(Index(64), std::max(maxBitsLeft, maxBitsRight) + 1); } case MulInt64: { auto maxBitsRight = getMaxBits(binary->right, localInfoProvider); auto maxBitsLeft = getMaxBits(binary->left, localInfoProvider); return std::min(Index(64), maxBitsLeft + maxBitsRight); } case DivSInt64: { if (auto* c = binary->right->dynCast()) { int32_t maxBitsLeft = getMaxBits(binary->left, localInfoProvider); // if left or right const value is negative if (maxBitsLeft == 64 || c->value.geti64() < 0) { return 64; } int32_t bitsRight = getMaxBits(c); return std::max(0, maxBitsLeft - bitsRight + 1); } return 64; } case DivUInt64: { int32_t maxBitsLeft = getMaxBits(binary->left, localInfoProvider); if (auto* c = binary->right->dynCast()) { int32_t bitsRight = getMaxBits(c); return std::max(0, maxBitsLeft - bitsRight + 1); } return maxBitsLeft; } case RemSInt64: { if (auto* c = binary->right->dynCast()) { auto maxBitsLeft = getMaxBits(binary->left, localInfoProvider); // if left may be negative, the result may be negative if (maxBitsLeft == 64) { return 64; } auto bitsRight = Index(ceilLog2(c->value.geti64())); return std::min(maxBitsLeft, bitsRight); } return 64; } case RemUInt64: { if (auto* c = binary->right->dynCast()) { auto maxBitsLeft = getMaxBits(binary->left, localInfoProvider); auto bitsRight = Index(ceilLog2(c->value.geti64())); return std::min(maxBitsLeft, bitsRight); } return 64; } case AndInt64: { return std::min(getMaxBits(binary->left, localInfoProvider), getMaxBits(binary->right, localInfoProvider)); } case OrInt64: case XorInt64: { return std::max(getMaxBits(binary->left, localInfoProvider), getMaxBits(binary->right, localInfoProvider)); } case ShlInt64: { if (auto* shifts = binary->right->dynCast()) { auto maxBits = getMaxBits(binary->left, localInfoProvider); return std::min(Index(64), Bits::getEffectiveShifts(shifts) + maxBits); } return 64; } case ShrUInt64: { if (auto* shift = binary->right->dynCast()) { auto maxBits = getMaxBits(binary->left, localInfoProvider); auto shifts = std::min(Index(Bits::getEffectiveShifts(shift)), maxBits); // can ignore more shifts than zero us out return std::max(Index(0), maxBits - shifts); } return 64; } case ShrSInt64: { if (auto* shift = binary->right->dynCast()) { auto maxBits = getMaxBits(binary->left, localInfoProvider); // if left may be negative, the result may be negative if (maxBits == 64) { return 64; } auto shifts = std::min(Index(Bits::getEffectiveShifts(shift)), maxBits); // can ignore more shifts than zero us out return std::max(Index(0), maxBits - shifts); } return 64; } // comparisons case EqInt32: case NeInt32: case LtSInt32: case LtUInt32: case LeSInt32: case LeUInt32: case GtSInt32: case GtUInt32: case GeSInt32: case GeUInt32: case EqInt64: case NeInt64: case LtSInt64: case LtUInt64: case LeSInt64: case LeUInt64: case GtSInt64: case GtUInt64: case GeSInt64: case GeUInt64: case EqFloat32: case NeFloat32: case LtFloat32: case LeFloat32: case GtFloat32: case GeFloat32: case EqFloat64: case NeFloat64: case LtFloat64: case LeFloat64: case GtFloat64: case GeFloat64: return 1; default: { } } } else if (auto* unary = curr->dynCast()) { switch (unary->op) { case ClzInt32: case CtzInt32: case PopcntInt32: return 6; case ClzInt64: case CtzInt64: case PopcntInt64: return 7; case EqZInt32: case EqZInt64: return 1; case WrapInt64: case ExtendUInt32: return std::min(Index(32), getMaxBits(unary->value, localInfoProvider)); case ExtendS8Int32: { auto maxBits = getMaxBits(unary->value, localInfoProvider); return maxBits >= 8 ? Index(32) : maxBits; } case ExtendS16Int32: { auto maxBits = getMaxBits(unary->value, localInfoProvider); return maxBits >= 16 ? Index(32) : maxBits; } case ExtendS8Int64: { auto maxBits = getMaxBits(unary->value, localInfoProvider); return maxBits >= 8 ? Index(64) : maxBits; } case ExtendS16Int64: { auto maxBits = getMaxBits(unary->value, localInfoProvider); return maxBits >= 16 ? Index(64) : maxBits; } case ExtendS32Int64: case ExtendSInt32: { auto maxBits = getMaxBits(unary->value, localInfoProvider); return maxBits >= 32 ? Index(64) : maxBits; } default: { } } } else if (auto* set = curr->dynCast()) { // a tee passes through the value return getMaxBits(set->value, localInfoProvider); } else if (auto* get = curr->dynCast()) { // TODO: Should this be optional? assert(localInfoProvider); return localInfoProvider->getMaxBitsForLocal(get); } else if (auto* load = curr->dynCast()) { // if signed, then the sign-extension might fill all the bits // if unsigned, then we have a limit if (LoadUtils::isSignRelevant(load) && !load->signed_) { return 8 * load->bytes; } } switch (curr->type.getBasic()) { case Type::i32: return 32; case Type::i64: return 64; case Type::unreachable: return 64; // not interesting, but don't crash default: WASM_UNREACHABLE("invalid type"); } } } // namespace wasm::Bits #endif // wasm_ir_bits_h binaryen-version_108/src/ir/block-utils.h000066400000000000000000000051501423707623100205500ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_block_h #define wasm_ir_block_h #include "ir/branch-utils.h" #include "ir/effects.h" #include "ir/manipulation.h" #include "literal.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm::BlockUtils { // if a block has just one element, it can often be replaced // with that content template inline Expression* simplifyToContents(Block* block, T* parent, bool allowTypeChange = false) { auto& list = block->list; if (list.size() == 1 && !BranchUtils::BranchSeeker::has(list[0], block->name)) { // just one element. try to replace the block auto* singleton = list[0]; auto sideEffects = EffectAnalyzer(parent->getPassOptions(), *parent->getModule(), singleton) .hasSideEffects(); if (!sideEffects && !singleton->type.isConcrete()) { // no side effects, and singleton is not returning a value, so we can // throw away the block and its contents, basically return Builder(*parent->getModule()).replaceWithIdenticalType(block); } else if (Type::isSubType(singleton->type, block->type) || allowTypeChange) { return singleton; } else { // (side effects +) type change, must be block with declared value but // inside is unreachable (if both concrete, must match, and since no name // on block, we can't be branched to, so if singleton is unreachable, so // is the block) assert(block->type.isConcrete() && singleton->type == Type::unreachable); // we could replace with unreachable, but would need to update all // the parent's types } } else if (list.size() == 0) { ExpressionManipulator::nop(block); } return block; } // similar, but when we allow the type to change while doing so template inline Expression* simplifyToContentsWithPossibleTypeChange(Block* block, T* parent) { return simplifyToContents(block, parent, true); } } // namespace wasm::BlockUtils #endif // wasm_ir_block_h binaryen-version_108/src/ir/branch-utils.h000066400000000000000000000327471423707623100207270ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_branch_h #define wasm_ir_branch_h #include "ir/iteration.h" #include "wasm-traversal.h" #include "wasm.h" namespace wasm::BranchUtils { // Some branches are obviously not actually reachable (e.g. (br $out // (unreachable))) inline bool isBranchReachable(Expression* expr) { // If any child is unreachable, the branch is not taken. Note that expr itself // may be unreachable regardless (as in the case of a simple Break with no // condition, which is still taken). for (auto child : ChildIterator(expr)) { if (child->type == Type::unreachable) { return false; } } return true; } // Perform a generic operation on uses of scope names (branch + delegate // targets) in an expression. The provided function receives a Name& which it // can modify if it needs to. template void operateOnScopeNameUses(Expression* expr, T func) { #define DELEGATE_ID expr->_id #define DELEGATE_START(id) \ auto* cast = expr->cast(); \ WASM_UNUSED(cast); #define DELEGATE_GET_FIELD(id, field) cast->field #define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) func(cast->field); #define DELEGATE_FIELD_CHILD(id, field) #define DELEGATE_FIELD_INT(id, field) #define DELEGATE_FIELD_LITERAL(id, field) #define DELEGATE_FIELD_NAME(id, field) #define DELEGATE_FIELD_NAME_VECTOR(id, field) #define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) #define DELEGATE_FIELD_TYPE(id, field) #define DELEGATE_FIELD_HEAPTYPE(id, field) #define DELEGATE_FIELD_ADDRESS(id, field) #define DELEGATE_FIELD_CHILD_VECTOR(id, field) #define DELEGATE_FIELD_INT_ARRAY(id, field) #include "wasm-delegations-fields.def" } // Similar to operateOnScopeNameUses, but also passes in the type that is sent // if the branch is taken. The type is none if there is no value. template void operateOnScopeNameUsesAndSentTypes(Expression* expr, T func) { operateOnScopeNameUses(expr, [&](Name& name) { // There isn't a delegate mechanism for getting a sent value, so do a direct // if-else chain. This will need to be updated with new br variants. if (auto* br = expr->dynCast()) { func(name, br->value ? br->value->type : Type::none); } else if (auto* sw = expr->dynCast()) { func(name, sw->value ? sw->value->type : Type::none); } else if (auto* br = expr->dynCast()) { func(name, br->getSentType()); } else { assert(expr->is() || expr->is()); // delegate or rethrow } }); } // Similar to operateOnScopeNameUses, but also passes in the expression that is // sent if the branch is taken. nullptr is given if there is no value. template void operateOnScopeNameUsesAndSentValues(Expression* expr, T func) { operateOnScopeNameUses(expr, [&](Name& name) { // There isn't a delegate mechanism for getting a sent value, so do a direct // if-else chain. This will need to be updated with new br variants. if (auto* br = expr->dynCast()) { func(name, br->value); } else if (auto* sw = expr->dynCast()) { func(name, sw->value); } else if (auto* br = expr->dynCast()) { func(name, br->ref); } else { assert(expr->is() || expr->is()); // delegate or rethrow } }); } // Perform a generic operation on definitions of scope names in an expression. // The provided function receives a Name& which it can modify if it needs to. template void operateOnScopeNameDefs(Expression* expr, T func) { #define DELEGATE_ID expr->_id #define DELEGATE_START(id) \ auto* cast = expr->cast(); \ WASM_UNUSED(cast); #define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) func(cast->field) #define DELEGATE_FIELD_CHILD(id, field) #define DELEGATE_FIELD_INT(id, field) #define DELEGATE_FIELD_LITERAL(id, field) #define DELEGATE_FIELD_NAME(id, field) #define DELEGATE_FIELD_NAME_VECTOR(id, field) #define DELEGATE_FIELD_TYPE(id, field) #define DELEGATE_FIELD_HEAPTYPE(id, field) #define DELEGATE_FIELD_ADDRESS(id, field) #define DELEGATE_FIELD_CHILD_VECTOR(id, field) #define DELEGATE_FIELD_INT_ARRAY(id, field) #define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) #define DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) #include "wasm-delegations-fields.def" } using NameSet = std::set; inline NameSet getUniqueTargets(Expression* expr) { NameSet ret; operateOnScopeNameUses(expr, [&](Name& name) { ret.insert(name); }); return ret; } // If we branch to 'from', change that to 'to' instead. inline bool replacePossibleTarget(Expression* branch, Name from, Name to) { bool worked = false; operateOnScopeNameUses(branch, [&](Name& name) { if (name == from) { name = to; worked = true; } }); return worked; } // Replace all delegate/rethrow targets within the given AST. inline void replaceExceptionTargets(Expression* ast, Name from, Name to) { struct Replacer : public PostWalker> { Name from, to; Replacer(Name from, Name to) : from(from), to(to) {} void visitExpression(Expression* curr) { if (curr->is() || curr->is()) { operateOnScopeNameUses(curr, [&](Name& name) { if (name == from) { name = to; } }); } } }; Replacer replacer(from, to); replacer.walk(ast); } // Replace all branch targets within the given AST. inline void replaceBranchTargets(Expression* ast, Name from, Name to) { struct Replacer : public PostWalker> { Name from, to; Replacer(Name from, Name to) : from(from), to(to) {} void visitExpression(Expression* curr) { if (Properties::isBranch(curr)) { operateOnScopeNameUses(curr, [&](Name& name) { if (name == from) { name = to; } }); } } }; Replacer replacer(from, to); replacer.walk(ast); } // Returns the set of targets to which we branch that are // outside of an expression. inline NameSet getExitingBranches(Expression* ast) { struct Scanner : public PostWalker> { NameSet targets; void visitExpression(Expression* curr) { operateOnScopeNameDefs(curr, [&](Name& name) { if (name.is()) { targets.erase(name); } }); operateOnScopeNameUses(curr, [&](Name& name) { targets.insert(name); }); } }; Scanner scanner; scanner.walk(ast); // anything not erased is a branch out return scanner.targets; } // returns the list of all branch targets in a node inline NameSet getBranchTargets(Expression* ast) { struct Scanner : public PostWalker> { NameSet targets; void visitExpression(Expression* curr) { operateOnScopeNameDefs(curr, [&](Name& name) { if (name.is()) { targets.insert(name); } }); } }; Scanner scanner; scanner.walk(ast); return scanner.targets; } // Check if an expression defines a particular name as a branch target anywhere // inside it. inline bool hasBranchTarget(Expression* ast, Name target) { if (!target.is()) { return false; } struct Scanner : public PostWalker> { Name target; bool has = false; void visitExpression(Expression* curr) { operateOnScopeNameDefs(curr, [&](Name& name) { if (name == target) { has = true; } }); } }; Scanner scanner; scanner.target = target; scanner.walk(ast); return scanner.has; } // Get the name of the branch target that is defined in the expression, or an // empty name if there is none. inline Name getDefinedName(Expression* curr) { Name ret; operateOnScopeNameDefs(curr, [&](Name& name) { ret = name; }); return ret; } // Return the value sent by a branch instruction, or nullptr if there is none. inline Expression* getSentValue(Expression* curr) { Expression* ret = nullptr; operateOnScopeNameUsesAndSentValues( curr, [&](Name name, Expression* value) { ret = value; }); return ret; } // Finds if there are branches targeting a name. Note that since names are // unique in our IR, we just need to look for the name, and do not need // to analyze scoping. struct BranchSeeker : public PostWalker> { Name target; Index found = 0; std::unordered_set types; BranchSeeker(Name target) : target(target) {} void noteFound(Type newType) { found++; types.insert(newType); } void visitExpression(Expression* curr) { operateOnScopeNameUsesAndSentTypes(curr, [&](Name& name, Type type) { if (name == target) { noteFound(type); } }); } static bool has(Expression* tree, Name target) { if (!target.is()) { return false; } BranchSeeker seeker(target); seeker.walk(tree); return seeker.found > 0; } static Index count(Expression* tree, Name target) { if (!target.is()) { return 0; } BranchSeeker seeker(target); seeker.walk(tree); return seeker.found; } }; // Accumulates all the branches in an entire tree. struct BranchAccumulator : public PostWalker> { NameSet branches; void visitExpression(Expression* curr) { auto selfBranches = getUniqueTargets(curr); branches.insert(selfBranches.begin(), selfBranches.end()); } }; // A helper structure for the common case of post-walking some IR while querying // whether a branch is present. We can cache results for children in order to // avoid quadratic time searches. // We assume that a node will be scanned *once* here. That means that if we // scan a node, we can discard all information for its children. This avoids // linearly increasing memory usage over time. class BranchSeekerCache { // Maps all the branches present in an expression and all its nested children. std::unordered_map branches; public: const NameSet& getBranches(Expression* curr) { auto iter = branches.find(curr); if (iter != branches.end()) { return iter->second; } NameSet currBranches; auto add = [&](NameSet& moreBranches) { // Make sure to do a fast swap for the first set of branches to arrive. // This helps the case of the first child being a block with a very large // set of names. if (currBranches.empty()) { currBranches.swap(moreBranches); } else { currBranches.insert(moreBranches.begin(), moreBranches.end()); } }; // Add from the children, which are hopefully cached. for (auto child : ChildIterator(curr)) { auto iter = branches.find(child); if (iter != branches.end()) { add(iter->second); // We are scanning the parent, which means we assume the child will // never be visited again. branches.erase(iter); } else { // The child was not cached. Scan it manually. BranchAccumulator childBranches; childBranches.walk(child); add(childBranches.branches); // Don't bother caching anything - we are scanning the parent, so the // child will presumably not be scanned again. } } // Finish with the parent's own branches. auto selfBranches = getUniqueTargets(curr); add(selfBranches); return branches[curr] = std::move(currBranches); } bool hasBranch(Expression* curr, Name target) { bool result = getBranches(curr).count(target); #ifdef BRANCH_UTILS_DEBUG assert(bresult == BranchSeeker::has(curr, target)); #endif return result; } }; // Stores information about branch targets, specifically, finding them by their // name, and finding the branches to them. struct BranchTargets { BranchTargets(Expression* expr) { inner.walk(expr); } // Gets the expression that defines this branch target, i.e., where we branch // to if we branch to that name. Expression* getTarget(Name name) { return inner.targets[name]; } // Gets the expressions branching to a target. std::unordered_set getBranches(Name name) { auto iter = inner.branches.find(name); if (iter != inner.branches.end()) { return iter->second; } return {}; } private: struct Inner : public PostWalker> { void visitExpression(Expression* curr) { operateOnScopeNameDefs(curr, [&](Name name) { if (name.is()) { targets[name] = curr; } }); operateOnScopeNameUses(curr, [&](Name& name) { if (name.is()) { branches[name].insert(curr); } }); } std::map targets; std::map> branches; } inner; }; } // namespace wasm::BranchUtils #endif // wasm_ir_branch_h binaryen-version_108/src/ir/cost.h000066400000000000000000000471151423707623100172770ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_cost_h #define wasm_ir_cost_h #include #include namespace wasm { // Measure the execution cost of an AST. Very handwave-ey using CostType = uint32_t; struct CostAnalyzer : public OverriddenVisitor { CostAnalyzer(Expression* ast) { cost = visit(ast); } CostType cost; CostType maybeVisit(Expression* curr) { return curr ? visit(curr) : 0; } CostType visitBlock(Block* curr) { CostType ret = 0; for (auto* child : curr->list) { ret += visit(child); } return ret; } CostType visitIf(If* curr) { return 1 + visit(curr->condition) + std::max(visit(curr->ifTrue), maybeVisit(curr->ifFalse)); } CostType visitLoop(Loop* curr) { return 5 * visit(curr->body); } CostType visitBreak(Break* curr) { return 1 + maybeVisit(curr->value) + maybeVisit(curr->condition); } CostType visitSwitch(Switch* curr) { return 2 + visit(curr->condition) + maybeVisit(curr->value); } CostType visitCall(Call* curr) { // XXX this does not take into account if the call is to an import, which // may be costlier in general CostType ret = 4; for (auto* child : curr->operands) { ret += visit(child); } return ret; } CostType visitCallIndirect(CallIndirect* curr) { CostType ret = 6 + visit(curr->target); for (auto* child : curr->operands) { ret += visit(child); } return ret; } CostType visitCallRef(CallRef* curr) { CostType ret = 5 + visit(curr->target); for (auto* child : curr->operands) { ret += visit(child); } return ret; } CostType visitLocalGet(LocalGet* curr) { return 0; } CostType visitLocalSet(LocalSet* curr) { return 1 + visit(curr->value); } CostType visitGlobalGet(GlobalGet* curr) { return 1; } CostType visitGlobalSet(GlobalSet* curr) { return 2 + visit(curr->value); } CostType visitLoad(Load* curr) { return 1 + visit(curr->ptr) + 10 * curr->isAtomic; } CostType visitStore(Store* curr) { return 2 + visit(curr->ptr) + visit(curr->value) + 10 * curr->isAtomic; } CostType visitAtomicRMW(AtomicRMW* curr) { return 100 + visit(curr->ptr) + visit(curr->value); } CostType visitAtomicCmpxchg(AtomicCmpxchg* curr) { return 100 + visit(curr->ptr) + visit(curr->expected) + visit(curr->replacement); } CostType visitAtomicWait(AtomicWait* curr) { return 100 + visit(curr->ptr) + visit(curr->expected) + visit(curr->timeout); } CostType visitAtomicNotify(AtomicNotify* curr) { return 100 + visit(curr->ptr) + visit(curr->notifyCount); } CostType visitAtomicFence(AtomicFence* curr) { return 100; } CostType visitConst(Const* curr) { return 1; } CostType visitUnary(Unary* curr) { CostType ret = 0; switch (curr->op) { case ClzInt32: case CtzInt32: case PopcntInt32: case NegFloat32: case AbsFloat32: case CeilFloat32: case FloorFloat32: case TruncFloat32: case NearestFloat32: case ClzInt64: case CtzInt64: case PopcntInt64: case NegFloat64: case AbsFloat64: case CeilFloat64: case FloorFloat64: case TruncFloat64: case NearestFloat64: case EqZInt32: case EqZInt64: case ExtendSInt32: case ExtendUInt32: case WrapInt64: case PromoteFloat32: case DemoteFloat64: case TruncSFloat32ToInt32: case TruncUFloat32ToInt32: case TruncSFloat64ToInt32: case TruncUFloat64ToInt32: case ReinterpretFloat32: case TruncSFloat32ToInt64: case TruncUFloat32ToInt64: case TruncSFloat64ToInt64: case TruncUFloat64ToInt64: case ReinterpretFloat64: case ReinterpretInt32: case ConvertSInt32ToFloat32: case ConvertUInt32ToFloat32: case ConvertSInt64ToFloat32: case ConvertUInt64ToFloat32: case ReinterpretInt64: case ConvertSInt32ToFloat64: case ConvertUInt32ToFloat64: case ConvertSInt64ToFloat64: case ConvertUInt64ToFloat64: case ExtendS8Int32: case ExtendS16Int32: case ExtendS8Int64: case ExtendS16Int64: case ExtendS32Int64: case TruncSatSFloat32ToInt32: case TruncSatUFloat32ToInt32: case TruncSatSFloat64ToInt32: case TruncSatUFloat64ToInt32: case TruncSatSFloat32ToInt64: case TruncSatUFloat32ToInt64: case TruncSatSFloat64ToInt64: case TruncSatUFloat64ToInt64: ret = 1; break; case SqrtFloat32: case SqrtFloat64: ret = 2; break; case SplatVecI8x16: case SplatVecI16x8: case SplatVecI32x4: case SplatVecI64x2: case SplatVecF32x4: case SplatVecF64x2: case NotVec128: case AnyTrueVec128: case AbsVecI8x16: case NegVecI8x16: case AllTrueVecI8x16: case BitmaskVecI8x16: case PopcntVecI8x16: case AbsVecI16x8: case NegVecI16x8: case AllTrueVecI16x8: case BitmaskVecI16x8: case AbsVecI32x4: case NegVecI32x4: case AllTrueVecI32x4: case BitmaskVecI32x4: case AbsVecI64x2: case NegVecI64x2: case AllTrueVecI64x2: case BitmaskVecI64x2: case AbsVecF32x4: case NegVecF32x4: case SqrtVecF32x4: case CeilVecF32x4: case FloorVecF32x4: case TruncVecF32x4: case NearestVecF32x4: case AbsVecF64x2: case NegVecF64x2: case SqrtVecF64x2: case CeilVecF64x2: case FloorVecF64x2: case TruncVecF64x2: case NearestVecF64x2: case ExtAddPairwiseSVecI8x16ToI16x8: case ExtAddPairwiseUVecI8x16ToI16x8: case ExtAddPairwiseSVecI16x8ToI32x4: case ExtAddPairwiseUVecI16x8ToI32x4: case TruncSatSVecF32x4ToVecI32x4: case TruncSatUVecF32x4ToVecI32x4: case ConvertSVecI32x4ToVecF32x4: case ConvertUVecI32x4ToVecF32x4: case ExtendLowSVecI8x16ToVecI16x8: case ExtendHighSVecI8x16ToVecI16x8: case ExtendLowUVecI8x16ToVecI16x8: case ExtendHighUVecI8x16ToVecI16x8: case ExtendLowSVecI16x8ToVecI32x4: case ExtendHighSVecI16x8ToVecI32x4: case ExtendLowUVecI16x8ToVecI32x4: case ExtendHighUVecI16x8ToVecI32x4: case ExtendLowSVecI32x4ToVecI64x2: case ExtendHighSVecI32x4ToVecI64x2: case ExtendLowUVecI32x4ToVecI64x2: case ExtendHighUVecI32x4ToVecI64x2: case ConvertLowSVecI32x4ToVecF64x2: case ConvertLowUVecI32x4ToVecF64x2: case TruncSatZeroSVecF64x2ToVecI32x4: case TruncSatZeroUVecF64x2ToVecI32x4: case DemoteZeroVecF64x2ToVecF32x4: case PromoteLowVecF32x4ToVecF64x2: case RelaxedTruncSVecF32x4ToVecI32x4: case RelaxedTruncUVecF32x4ToVecI32x4: case RelaxedTruncZeroSVecF64x2ToVecI32x4: case RelaxedTruncZeroUVecF64x2ToVecI32x4: ret = 1; break; case InvalidUnary: WASM_UNREACHABLE("invalid unary op"); } return ret + visit(curr->value); } CostType visitBinary(Binary* curr) { CostType ret = 0; switch (curr->op) { case AddInt32: case SubInt32: ret = 1; break; case MulInt32: ret = 2; break; case DivSInt32: case DivUInt32: case RemSInt32: case RemUInt32: ret = curr->right->is() ? 2 : 3; break; case AndInt32: case OrInt32: case XorInt32: case ShlInt32: case ShrUInt32: case ShrSInt32: case RotLInt32: case RotRInt32: case AddInt64: case SubInt64: ret = 1; break; case MulInt64: ret = 2; break; case DivSInt64: case DivUInt64: case RemSInt64: case RemUInt64: ret = curr->right->is() ? 3 : 4; break; case AndInt64: case OrInt64: case XorInt64: ret = 1; break; case ShlInt64: case ShrUInt64: case ShrSInt64: case RotLInt64: case RotRInt64: case AddFloat32: case SubFloat32: ret = 1; break; case MulFloat32: ret = 2; break; case DivFloat32: ret = 3; break; case CopySignFloat32: case MinFloat32: case MaxFloat32: case AddFloat64: case SubFloat64: ret = 1; break; case MulFloat64: ret = 2; break; case DivFloat64: ret = 3; break; case CopySignFloat64: case MinFloat64: case MaxFloat64: case EqInt32: case NeInt32: case LtUInt32: case LtSInt32: case LeUInt32: case LeSInt32: case GtUInt32: case GtSInt32: case GeUInt32: case GeSInt32: case EqInt64: case NeInt64: case LtUInt64: case LtSInt64: case LeUInt64: case LeSInt64: case GtUInt64: case GtSInt64: case GeUInt64: case GeSInt64: case EqFloat32: case NeFloat32: case LtFloat32: case GtFloat32: case LeFloat32: case GeFloat32: case EqFloat64: case NeFloat64: case LtFloat64: case GtFloat64: case LeFloat64: case GeFloat64: case EqVecI8x16: case NeVecI8x16: case LtSVecI8x16: case LtUVecI8x16: case LeSVecI8x16: case LeUVecI8x16: case GtSVecI8x16: case GtUVecI8x16: case GeSVecI8x16: case GeUVecI8x16: case EqVecI16x8: case NeVecI16x8: case LtSVecI16x8: case LtUVecI16x8: case LeSVecI16x8: case LeUVecI16x8: case GtSVecI16x8: case GtUVecI16x8: case GeSVecI16x8: case GeUVecI16x8: case EqVecI32x4: case NeVecI32x4: case LtSVecI32x4: case LtUVecI32x4: case LeSVecI32x4: case LeUVecI32x4: case GtSVecI32x4: case GtUVecI32x4: case GeSVecI32x4: case GeUVecI32x4: case EqVecI64x2: case NeVecI64x2: case LtSVecI64x2: case LeSVecI64x2: case GtSVecI64x2: case GeSVecI64x2: case EqVecF32x4: case NeVecF32x4: case LtVecF32x4: case LeVecF32x4: case GtVecF32x4: case GeVecF32x4: case EqVecF64x2: case NeVecF64x2: case LtVecF64x2: case LeVecF64x2: case GtVecF64x2: case GeVecF64x2: case AndVec128: case OrVec128: case XorVec128: case AndNotVec128: case AddVecI8x16: case AddSatSVecI8x16: case AddSatUVecI8x16: case SubVecI8x16: case SubSatSVecI8x16: case SubSatUVecI8x16: case MinSVecI8x16: case MinUVecI8x16: case MaxSVecI8x16: case MaxUVecI8x16: case AvgrUVecI8x16: case AddVecI16x8: case AddSatSVecI16x8: case AddSatUVecI16x8: case SubVecI16x8: case SubSatSVecI16x8: case SubSatUVecI16x8: ret = 1; break; case MulVecI16x8: ret = 2; break; case MinSVecI16x8: case MinUVecI16x8: case MaxSVecI16x8: case MaxUVecI16x8: case AvgrUVecI16x8: case Q15MulrSatSVecI16x8: case ExtMulLowSVecI16x8: case ExtMulHighSVecI16x8: case ExtMulLowUVecI16x8: case ExtMulHighUVecI16x8: case AddVecI32x4: case SubVecI32x4: ret = 1; break; case MulVecI32x4: ret = 2; break; case MinSVecI32x4: case MinUVecI32x4: case MaxSVecI32x4: case MaxUVecI32x4: case DotSVecI16x8ToVecI32x4: case ExtMulLowSVecI32x4: case ExtMulHighSVecI32x4: case ExtMulLowUVecI32x4: case ExtMulHighUVecI32x4: case AddVecI64x2: case SubVecI64x2: case MulVecI64x2: case ExtMulLowSVecI64x2: case ExtMulHighSVecI64x2: case ExtMulLowUVecI64x2: case ExtMulHighUVecI64x2: case AddVecF32x4: case SubVecF32x4: ret = 1; break; case MulVecF32x4: ret = 2; break; case DivVecF32x4: ret = 3; break; case MinVecF32x4: case MaxVecF32x4: case PMinVecF32x4: case PMaxVecF32x4: case RelaxedMinVecF32x4: case RelaxedMaxVecF32x4: case AddVecF64x2: case SubVecF64x2: ret = 1; break; case MulVecF64x2: ret = 2; break; case DivVecF64x2: ret = 3; break; case MinVecF64x2: case MaxVecF64x2: case PMinVecF64x2: case PMaxVecF64x2: case RelaxedMinVecF64x2: case RelaxedMaxVecF64x2: case NarrowSVecI16x8ToVecI8x16: case NarrowUVecI16x8ToVecI8x16: case NarrowSVecI32x4ToVecI16x8: case NarrowUVecI32x4ToVecI16x8: case SwizzleVecI8x16: case RelaxedSwizzleVecI8x16: case RelaxedQ15MulrSVecI16x8: case DotI8x16I7x16SToVecI16x8: case DotI8x16I7x16UToVecI16x8: ret = 1; break; case InvalidBinary: WASM_UNREACHABLE("invalid binary op"); } return ret + visit(curr->left) + visit(curr->right); } CostType visitSelect(Select* curr) { return 1 + visit(curr->condition) + visit(curr->ifTrue) + visit(curr->ifFalse); } CostType visitDrop(Drop* curr) { return visit(curr->value); } CostType visitReturn(Return* curr) { return maybeVisit(curr->value); } CostType visitMemorySize(MemorySize* curr) { return 1; } CostType visitMemoryGrow(MemoryGrow* curr) { return 100 + visit(curr->delta); } CostType visitMemoryInit(MemoryInit* curr) { return 6 + visit(curr->dest) + visit(curr->offset) + visit(curr->size); } CostType visitMemoryCopy(MemoryCopy* curr) { // TODO when the size is a constant, estimate the time based on that return 6 + visit(curr->dest) + visit(curr->source) + visit(curr->size); } CostType visitMemoryFill(MemoryFill* curr) { return 6 + visit(curr->dest) + visit(curr->value) + visit(curr->size); } CostType visitSIMDLoad(SIMDLoad* curr) { return 1 + visit(curr->ptr); } CostType visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { return 1 + CostType(curr->isStore()) + visit(curr->ptr) + visit(curr->vec); } CostType visitSIMDReplace(SIMDReplace* curr) { return 2 + visit(curr->vec) + visit(curr->value); } CostType visitSIMDExtract(SIMDExtract* curr) { return 1 + visit(curr->vec); } CostType visitSIMDTernary(SIMDTernary* curr) { CostType ret = 0; switch (curr->op) { case Bitselect: case LaneselectI8x16: case LaneselectI16x8: case LaneselectI32x4: case LaneselectI64x2: case RelaxedFmaVecF32x4: case RelaxedFmsVecF32x4: case RelaxedFmaVecF64x2: case RelaxedFmsVecF64x2: case DotI8x16I7x16AddSToVecI32x4: case DotI8x16I7x16AddUToVecI32x4: ret = 1; break; } return ret + visit(curr->a) + visit(curr->b) + visit(curr->c); } CostType visitSIMDShift(SIMDShift* curr) { return 1 + visit(curr->vec) + visit(curr->shift); } CostType visitSIMDShuffle(SIMDShuffle* curr) { return 1 + visit(curr->left) + visit(curr->right); } CostType visitRefNull(RefNull* curr) { return 1; } CostType visitRefIs(RefIs* curr) { return 1 + visit(curr->value); } CostType visitRefFunc(RefFunc* curr) { return 1; } CostType visitRefEq(RefEq* curr) { return 1 + visit(curr->left) + visit(curr->right); } CostType visitTableGet(TableGet* curr) { return 1 + visit(curr->index); } CostType visitTableSet(TableSet* curr) { return 2 + visit(curr->index) + visit(curr->value); } CostType visitTableSize(TableSize* curr) { return 1; } CostType visitTableGrow(TableGrow* curr) { return 100 + visit(curr->value) + visit(curr->delta); } CostType visitTry(Try* curr) { // We assume no exception will be thrown in most cases return visit(curr->body); } CostType visitThrow(Throw* curr) { CostType ret = 100; for (auto* child : curr->operands) { ret += visit(child); } return ret; } CostType visitRethrow(Rethrow* curr) { return 100; } CostType visitTupleMake(TupleMake* curr) { CostType ret = 0; for (auto* child : curr->operands) { ret += visit(child); } return ret; } CostType visitTupleExtract(TupleExtract* curr) { return visit(curr->tuple); } CostType visitPop(Pop* curr) { return 0; } CostType visitNop(Nop* curr) { return 0; } CostType visitUnreachable(Unreachable* curr) { return 0; } CostType visitDataDrop(DataDrop* curr) { return 5; } CostType visitI31New(I31New* curr) { return 3 + visit(curr->value); } CostType visitI31Get(I31Get* curr) { return 2 + visit(curr->i31); } CostType visitRefTest(RefTest* curr) { return 2 + nullCheckCost(curr->ref) + visit(curr->ref) + maybeVisit(curr->rtt); } CostType visitRefCast(RefCast* curr) { return 2 + nullCheckCost(curr->ref) + visit(curr->ref) + maybeVisit(curr->rtt); } CostType visitBrOn(BrOn* curr) { // BrOnCast has more work to do with the rtt, so add a little there. CostType base = curr->op == BrOnCast ? 3 : 2; return base + nullCheckCost(curr->ref) + maybeVisit(curr->ref) + maybeVisit(curr->rtt); } CostType visitRttCanon(RttCanon* curr) { // TODO: investigate actual RTT costs in VMs return 1; } CostType visitRttSub(RttSub* curr) { // TODO: investigate actual RTT costs in VMs return 2 + visit(curr->parent); } CostType visitStructNew(StructNew* curr) { // While allocation itself is almost free with generational GC, there is // at least some baseline cost, plus writing the fields. (If we use default // values for the fields, then it is possible they are all 0 and if so, we // can get that almost for free as well, so don't add anything there.) CostType ret = 4 + maybeVisit(curr->rtt) + curr->operands.size(); for (auto* child : curr->operands) { ret += visit(child); } return ret; } CostType visitStructGet(StructGet* curr) { return 1 + nullCheckCost(curr->ref) + visit(curr->ref); } CostType visitStructSet(StructSet* curr) { return 2 + nullCheckCost(curr->ref) + visit(curr->ref) + visit(curr->value); } CostType visitArrayNew(ArrayNew* curr) { return 4 + maybeVisit(curr->rtt) + visit(curr->size) + maybeVisit(curr->init); } CostType visitArrayInit(ArrayInit* curr) { CostType ret = 4 + maybeVisit(curr->rtt); for (auto* child : curr->values) { ret += visit(child); } return ret; } CostType visitArrayGet(ArrayGet* curr) { return 1 + nullCheckCost(curr->ref) + visit(curr->ref) + visit(curr->index); } CostType visitArraySet(ArraySet* curr) { return 2 + nullCheckCost(curr->ref) + visit(curr->ref) + visit(curr->index) + visit(curr->value); } CostType visitArrayLen(ArrayLen* curr) { return 1 + nullCheckCost(curr->ref) + visit(curr->ref); } CostType visitArrayCopy(ArrayCopy* curr) { // Similar to MemoryCopy. return 6 + visit(curr->destRef) + visit(curr->destIndex) + visit(curr->srcRef) + visit(curr->srcIndex) + visit(curr->length); } CostType visitRefAs(RefAs* curr) { return 1 + visit(curr->value); } private: CostType nullCheckCost(Expression* ref) { // A nullable type requires a bounds check in most VMs. return ref->type.isNullable(); } }; } // namespace wasm #endif // wasm_ir_cost_h binaryen-version_108/src/ir/debug.h000066400000000000000000000033341423707623100174100ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_debug_h #define wasm_ir_debug_h #include namespace wasm::debug { // Given an expression and a copy of it in another function, copy the debug // info into the second function. inline void copyDebugInfo(Expression* origin, Expression* copy, Function* originFunc, Function* copyFunc) { struct Lister : public PostWalker> { std::vector list; void visitExpression(Expression* curr) { list.push_back(curr); } }; Lister originList; originList.walk(origin); Lister copyList; copyList.walk(copy); auto& originDebug = originFunc->debugLocations; auto& copyDebug = copyFunc->debugLocations; assert(originList.list.size() == copyList.list.size()); for (Index i = 0; i < originList.list.size(); i++) { auto iter = originDebug.find(originList.list[i]); if (iter != originDebug.end()) { auto location = iter->second; copyDebug[copyList.list[i]] = location; } } }; } // namespace wasm::debug #endif // wasm_ir_debug_h binaryen-version_108/src/ir/effects.h000066400000000000000000000733721423707623100177520ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_effects_h #define wasm_ir_effects_h #include "ir/intrinsics.h" #include "pass.h" #include "wasm-traversal.h" namespace wasm { // Analyze various possible effects. class EffectAnalyzer { public: EffectAnalyzer(const PassOptions& passOptions, Module& module, Expression* ast = nullptr) : ignoreImplicitTraps(passOptions.ignoreImplicitTraps), trapsNeverHappen(passOptions.trapsNeverHappen), module(module), features(module.features) { if (ast) { walk(ast); } } bool ignoreImplicitTraps; bool trapsNeverHappen; Module& module; FeatureSet features; // Walk an expression and all its children. void walk(Expression* ast) { pre(); InternalAnalyzer(*this).walk(ast); post(); } // Visit an expression, without any children. void visit(Expression* ast) { pre(); InternalAnalyzer(*this).visit(ast); post(); } // Core effect tracking // Definitely branches out of this expression, or does a return, etc. // breakTargets tracks individual targets, which we may eventually see are // internal, while this is set when we see something that will definitely // not be internal, or is otherwise special like an infinite loop (which // does not technically branch "out", but it does break the normal assumption // of control flow proceeding normally). bool branchesOut = false; bool calls = false; std::set localsRead; std::set localsWritten; std::set mutableGlobalsRead; std::set globalsWritten; bool readsMemory = false; bool writesMemory = false; bool readsTable = false; bool writesTable = false; // TODO: More specific type-based alias analysis, and not just at the // struct/array level. bool readsMutableStruct = false; bool writesStruct = false; bool readsArray = false; bool writesArray = false; // A trap, either from an unreachable instruction, or from an implicit trap // that we do not ignore (see below). // // Note that we ignore trap differences, so it is ok to reorder traps with // each other, but it is not ok to remove them or reorder them with other // effects in a noticeable way. // // Note also that we ignore runtime-dependent traps, such as hitting a // recursion limit or running out of memory. Such traps are not part of wasm's // official semantics, and they can occur anywhere: *any* instruction could in // theory be implemented by a VM call (as will be the case when running in an // interpreter), and such a call could run out of stack or memory in // principle. To put it another way, an i32 division by zero is the program // doing something bad that causes a trap, but the VM running out of memory is // the VM doing something bad - and therefore the VM behaving in a way that is // not according to the wasm semantics - and we do not model such things. Note // that as a result we do *not* mark things like GC allocation instructions as // having side effects, which has the nice benefit of making it possible to // eliminate an allocation whose result is not captured. bool trap = false; // A trap from an instruction like a load or div/rem, which may trap on corner // cases. If we do not ignore implicit traps then these are counted as a trap. bool implicitTrap = false; // An atomic load/store/RMW/Cmpxchg or an operator that has a defined ordering // wrt atomics (e.g. memory.grow) bool isAtomic = false; bool throws_ = false; // The nested depth of try-catch_all. If an instruction that may throw is // inside an inner try-catch_all, we don't mark it as 'throws_', because it // will be caught by an inner catch_all. We only count 'try's with a // 'catch_all' because instructions within a 'try' without a 'catch_all' can // still throw outside of the try. size_t tryDepth = 0; // The nested depth of catch. This is necessary to track danglng pops. size_t catchDepth = 0; // If this expression contains 'pop's that are not enclosed in 'catch' body. // For example, (drop (pop i32)) should set this to true. bool danglingPop = false; // Helper functions to check for various effect types bool accessesLocal() const { return localsRead.size() + localsWritten.size() > 0; } bool accessesMutableGlobal() const { return globalsWritten.size() + mutableGlobalsRead.size() > 0; } bool accessesMemory() const { return calls || readsMemory || writesMemory; } bool accessesTable() const { return calls || readsTable || writesTable; } bool accessesMutableStruct() const { return calls || readsMutableStruct || writesStruct; } bool accessesArray() const { return calls || readsArray || writesArray; } bool throws() const { return throws_ || !delegateTargets.empty(); } // Check whether this may transfer control flow to somewhere outside of this // expression (aside from just flowing out normally). That includes a break // or a throw (if the throw is not known to be caught inside this expression; // note that if the throw is not caught in this expression then it might be // caught in this function but outside of this expression, or it might not be // caught in the function at all, which would mean control flow cannot be // transferred inside the function, but this expression does not know that). bool transfersControlFlow() const { return branchesOut || throws() || hasExternalBreakTargets(); } // Changes something in globally-stored state. bool writesGlobalState() const { return globalsWritten.size() || writesMemory || writesTable || writesStruct || writesArray || isAtomic || calls; } bool readsMutableGlobalState() const { return mutableGlobalsRead.size() || readsMemory || readsTable || readsMutableStruct || readsArray || isAtomic || calls; } bool hasNonTrapSideEffects() const { return localsWritten.size() > 0 || danglingPop || writesGlobalState() || throws() || transfersControlFlow(); } bool hasSideEffects() const { return trap || hasNonTrapSideEffects(); } // Check if there are side effects, and they are of a kind that cannot be // removed by optimization passes. // // The difference between this and hasSideEffects is subtle, and only related // to trapsNeverHappen - if trapsNeverHappen then any trap we see is removable // by optimizations. In general, you should call hasSideEffects, and only call // this method if you are certain that it is a place that would not perform an // unsafe transformation with a trap. Specifically, if a pass calls this // and gets the result that there are no unremovable side effects, then it // must either // // 1. Remove any side effects present, if any, so they no longer exist. // 2. Keep the code exactly where it is. // // If instead of 1&2 a pass kept the side effect and also reordered the code // with other things, then that could be bad, as the side effect might have // been behind a condition that avoids it occurring. // // TODO: Go through the optimizer and use this in all places that do not move // code around. bool hasUnremovableSideEffects() const { return hasNonTrapSideEffects() || (trap && !trapsNeverHappen); } bool hasAnything() const { return hasSideEffects() || accessesLocal() || readsMemory || readsTable || accessesMutableGlobal(); } // check if we break to anything external from ourselves bool hasExternalBreakTargets() const { return !breakTargets.empty(); } // checks if these effects would invalidate another set (e.g., if we write, we // invalidate someone that reads, they can't be moved past us) bool invalidates(const EffectAnalyzer& other) { if ((transfersControlFlow() && other.hasSideEffects()) || (other.transfersControlFlow() && hasSideEffects()) || ((writesMemory || calls) && other.accessesMemory()) || ((other.writesMemory || other.calls) && accessesMemory()) || ((writesTable || calls) && other.accessesTable()) || ((other.writesTable || other.calls) && accessesTable()) || ((writesStruct || calls) && other.accessesMutableStruct()) || ((other.writesStruct || other.calls) && accessesMutableStruct()) || ((writesArray || calls) && other.accessesArray()) || ((other.writesArray || other.calls) && accessesArray()) || (danglingPop || other.danglingPop)) { return true; } // All atomics are sequentially consistent for now, and ordered wrt other // memory references. if ((isAtomic && other.accessesMemory()) || (other.isAtomic && accessesMemory())) { return true; } for (auto local : localsWritten) { if (other.localsRead.count(local) || other.localsWritten.count(local)) { return true; } } for (auto local : localsRead) { if (other.localsWritten.count(local)) { return true; } } if ((other.calls && accessesMutableGlobal()) || (calls && other.accessesMutableGlobal())) { return true; } for (auto global : globalsWritten) { if (other.mutableGlobalsRead.count(global) || other.globalsWritten.count(global)) { return true; } } for (auto global : mutableGlobalsRead) { if (other.globalsWritten.count(global)) { return true; } } // We are ok to reorder implicit traps, but not conditionalize them. if ((trap && other.transfersControlFlow()) || (other.trap && transfersControlFlow())) { return true; } // Note that the above includes disallowing the reordering of a trap with an // exception (as an exception can transfer control flow inside the current // function, so transfersControlFlow would be true) - while we allow the // reordering of traps with each other, we do not reorder exceptions with // anything. assert(!((trap && other.throws()) || (throws() && other.trap))); // We can't reorder an implicit trap in a way that could alter what global // state is modified. if ((trap && other.writesGlobalState()) || (other.trap && writesGlobalState())) { return true; } return false; } void mergeIn(EffectAnalyzer& other) { branchesOut = branchesOut || other.branchesOut; calls = calls || other.calls; readsMemory = readsMemory || other.readsMemory; writesMemory = writesMemory || other.writesMemory; readsTable = readsTable || other.readsTable; writesTable = writesTable || other.writesTable; readsMutableStruct = readsMutableStruct || other.readsMutableStruct; writesStruct = writesStruct || other.writesStruct; readsArray = readsArray || other.readsArray; writesArray = writesArray || other.writesArray; trap = trap || other.trap; implicitTrap = implicitTrap || other.implicitTrap; trapsNeverHappen = trapsNeverHappen || other.trapsNeverHappen; isAtomic = isAtomic || other.isAtomic; throws_ = throws_ || other.throws_; danglingPop = danglingPop || other.danglingPop; for (auto i : other.localsRead) { localsRead.insert(i); } for (auto i : other.localsWritten) { localsWritten.insert(i); } for (auto i : other.mutableGlobalsRead) { mutableGlobalsRead.insert(i); } for (auto i : other.globalsWritten) { globalsWritten.insert(i); } for (auto i : other.breakTargets) { breakTargets.insert(i); } for (auto i : other.delegateTargets) { delegateTargets.insert(i); } } // the checks above happen after the node's children were processed, in the // order of execution we must also check for control flow that happens before // the children, i.e., loops bool checkPre(Expression* curr) { if (curr->is()) { branchesOut = true; return true; } return false; } bool checkPost(Expression* curr) { visit(curr); if (curr->is()) { branchesOut = true; } return hasAnything(); } std::set breakTargets; std::set delegateTargets; private: struct InternalAnalyzer : public PostWalker> { EffectAnalyzer& parent; InternalAnalyzer(EffectAnalyzer& parent) : parent(parent) {} static void scan(InternalAnalyzer* self, Expression** currp) { Expression* curr = *currp; // We need to decrement try depth before catch starts, so handle it // separately if (curr->is()) { self->pushTask(doVisitTry, currp); self->pushTask(doEndCatch, currp); auto& catchBodies = curr->cast()->catchBodies; for (int i = int(catchBodies.size()) - 1; i >= 0; i--) { self->pushTask(scan, &catchBodies[i]); } self->pushTask(doStartCatch, currp); self->pushTask(scan, &curr->cast()->body); self->pushTask(doStartTry, currp); return; } PostWalker>::scan( self, currp); } static void doStartTry(InternalAnalyzer* self, Expression** currp) { Try* curr = (*currp)->cast(); // We only count 'try's with a 'catch_all' because instructions within a // 'try' without a 'catch_all' can still throw outside of the try. if (curr->hasCatchAll()) { self->parent.tryDepth++; } } static void doStartCatch(InternalAnalyzer* self, Expression** currp) { Try* curr = (*currp)->cast(); // This is conservative. When an inner try-delegate targets the current // expression, even if the try-delegate's body can't throw, we consider // the current expression can throw for simplicity, unless the current // expression is not inside a try-catch_all. It is hard to figure out // whether the original try-delegate's body throws or not at this point. if (curr->name.is()) { if (self->parent.delegateTargets.count(curr->name) && self->parent.tryDepth == 0) { self->parent.throws_ = true; } self->parent.delegateTargets.erase(curr->name); } // We only count 'try's with a 'catch_all' because instructions within a // 'try' without a 'catch_all' can still throw outside of the try. if (curr->hasCatchAll()) { assert(self->parent.tryDepth > 0 && "try depth cannot be negative"); self->parent.tryDepth--; } self->parent.catchDepth++; } static void doEndCatch(InternalAnalyzer* self, Expression** currp) { assert(self->parent.catchDepth > 0 && "catch depth cannot be negative"); self->parent.catchDepth--; } void visitBlock(Block* curr) { if (curr->name.is()) { parent.breakTargets.erase(curr->name); // these were internal breaks } } void visitIf(If* curr) {} void visitLoop(Loop* curr) { if (curr->name.is()) { parent.breakTargets.erase(curr->name); // these were internal breaks } // if the loop is unreachable, then there is branching control flow: // (1) if the body is unreachable because of a (return), uncaught (br) // etc., then we already noted branching, so it is ok to mark it // again (if we have *caught* (br)s, then they did not lead to the // loop body being unreachable). (same logic applies to blocks) // (2) if the loop is unreachable because it only has branches up to the // loop top, but no way to get out, then it is an infinite loop, and // we consider that a branching side effect (note how the same logic // does not apply to blocks). if (curr->type == Type::unreachable) { parent.branchesOut = true; } } void visitBreak(Break* curr) { parent.breakTargets.insert(curr->name); } void visitSwitch(Switch* curr) { for (auto name : curr->targets) { parent.breakTargets.insert(name); } parent.breakTargets.insert(curr->default_); } void visitCall(Call* curr) { // call.without.effects has no effects. if (Intrinsics(parent.module).isCallWithoutEffects(curr)) { return; } parent.calls = true; // When EH is enabled, any call can throw. if (parent.features.hasExceptionHandling() && parent.tryDepth == 0) { parent.throws_ = true; } if (curr->isReturn) { parent.branchesOut = true; } } void visitCallIndirect(CallIndirect* curr) { parent.calls = true; if (parent.features.hasExceptionHandling() && parent.tryDepth == 0) { parent.throws_ = true; } if (curr->isReturn) { parent.branchesOut = true; } } void visitLocalGet(LocalGet* curr) { parent.localsRead.insert(curr->index); } void visitLocalSet(LocalSet* curr) { parent.localsWritten.insert(curr->index); } void visitGlobalGet(GlobalGet* curr) { if (parent.module.getGlobal(curr->name)->mutable_ == Mutable) { parent.mutableGlobalsRead.insert(curr->name); } } void visitGlobalSet(GlobalSet* curr) { parent.globalsWritten.insert(curr->name); } void visitLoad(Load* curr) { parent.readsMemory = true; parent.isAtomic |= curr->isAtomic; parent.implicitTrap = true; } void visitStore(Store* curr) { parent.writesMemory = true; parent.isAtomic |= curr->isAtomic; parent.implicitTrap = true; } void visitAtomicRMW(AtomicRMW* curr) { parent.readsMemory = true; parent.writesMemory = true; parent.isAtomic = true; parent.implicitTrap = true; } void visitAtomicCmpxchg(AtomicCmpxchg* curr) { parent.readsMemory = true; parent.writesMemory = true; parent.isAtomic = true; parent.implicitTrap = true; } void visitAtomicWait(AtomicWait* curr) { parent.readsMemory = true; // AtomicWait doesn't strictly write memory, but it does modify the // waiters list associated with the specified address, which we can think // of as a write. parent.writesMemory = true; parent.isAtomic = true; parent.implicitTrap = true; } void visitAtomicNotify(AtomicNotify* curr) { // AtomicNotify doesn't strictly write memory, but it does modify the // waiters list associated with the specified address, which we can think // of as a write. parent.readsMemory = true; parent.writesMemory = true; parent.isAtomic = true; parent.implicitTrap = true; } void visitAtomicFence(AtomicFence* curr) { // AtomicFence should not be reordered with any memory operations, so we // set these to true. parent.readsMemory = true; parent.writesMemory = true; parent.isAtomic = true; } void visitSIMDExtract(SIMDExtract* curr) {} void visitSIMDReplace(SIMDReplace* curr) {} void visitSIMDShuffle(SIMDShuffle* curr) {} void visitSIMDTernary(SIMDTernary* curr) {} void visitSIMDShift(SIMDShift* curr) {} void visitSIMDLoad(SIMDLoad* curr) { parent.readsMemory = true; parent.implicitTrap = true; } void visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { if (curr->isLoad()) { parent.readsMemory = true; } else { parent.writesMemory = true; } parent.implicitTrap = true; } void visitMemoryInit(MemoryInit* curr) { parent.writesMemory = true; parent.implicitTrap = true; } void visitDataDrop(DataDrop* curr) { // data.drop does not actually write memory, but it does alter the size of // a segment, which can be noticeable later by memory.init, so we need to // mark it as having a global side effect of some kind. parent.writesMemory = true; parent.implicitTrap = true; } void visitMemoryCopy(MemoryCopy* curr) { parent.readsMemory = true; parent.writesMemory = true; parent.implicitTrap = true; } void visitMemoryFill(MemoryFill* curr) { parent.writesMemory = true; parent.implicitTrap = true; } void visitConst(Const* curr) {} void visitUnary(Unary* curr) { switch (curr->op) { case TruncSFloat32ToInt32: case TruncSFloat32ToInt64: case TruncUFloat32ToInt32: case TruncUFloat32ToInt64: case TruncSFloat64ToInt32: case TruncSFloat64ToInt64: case TruncUFloat64ToInt32: case TruncUFloat64ToInt64: { parent.implicitTrap = true; break; } default: {} } } void visitBinary(Binary* curr) { switch (curr->op) { case DivSInt32: case DivUInt32: case RemSInt32: case RemUInt32: case DivSInt64: case DivUInt64: case RemSInt64: case RemUInt64: { // div and rem may contain implicit trap only if RHS is // non-constant or constant which equal zero or -1 for // signed divisions. Reminder traps only with zero // divider. if (auto* c = curr->right->dynCast()) { if (c->value.isZero()) { parent.implicitTrap = true; } else if ((curr->op == DivSInt32 || curr->op == DivSInt64) && c->value.getInteger() == -1LL) { parent.implicitTrap = true; } } else { parent.implicitTrap = true; } break; } default: {} } } void visitSelect(Select* curr) {} void visitDrop(Drop* curr) {} void visitReturn(Return* curr) { parent.branchesOut = true; } void visitMemorySize(MemorySize* curr) { // memory.size accesses the size of the memory, and thus can be modeled as // reading memory parent.readsMemory = true; // Atomics are sequentially consistent with memory.size. parent.isAtomic = true; } void visitMemoryGrow(MemoryGrow* curr) { // TODO: find out if calls is necessary here parent.calls = true; // memory.grow technically does a read-modify-write operation on the // memory size in the successful case, modifying the set of valid // addresses, and just a read operation in the failure case parent.readsMemory = true; parent.writesMemory = true; // Atomics are also sequentially consistent with memory.grow. parent.isAtomic = true; } void visitRefNull(RefNull* curr) {} void visitRefIs(RefIs* curr) {} void visitRefFunc(RefFunc* curr) {} void visitRefEq(RefEq* curr) {} void visitTableGet(TableGet* curr) { parent.readsTable = true; parent.implicitTrap = true; } void visitTableSet(TableSet* curr) { parent.writesTable = true; parent.implicitTrap = true; } void visitTableSize(TableSize* curr) { parent.readsTable = true; } void visitTableGrow(TableGrow* curr) { // table.grow technically does a read-modify-write operation on the // table size in the successful case, modifying the set of valid // indices, and just a read operation in the failure case parent.readsTable = true; parent.writesTable = true; } void visitTry(Try* curr) { if (curr->delegateTarget.is()) { parent.delegateTargets.insert(curr->delegateTarget); } } void visitThrow(Throw* curr) { if (parent.tryDepth == 0) { parent.throws_ = true; } } void visitRethrow(Rethrow* curr) { if (parent.tryDepth == 0) { parent.throws_ = true; } // traps when the arg is null parent.implicitTrap = true; } void visitNop(Nop* curr) {} void visitUnreachable(Unreachable* curr) { parent.trap = true; } void visitPop(Pop* curr) { if (parent.catchDepth == 0) { parent.danglingPop = true; } } void visitTupleMake(TupleMake* curr) {} void visitTupleExtract(TupleExtract* curr) {} void visitI31New(I31New* curr) {} void visitI31Get(I31Get* curr) {} void visitCallRef(CallRef* curr) { parent.calls = true; if (parent.features.hasExceptionHandling() && parent.tryDepth == 0) { parent.throws_ = true; } if (curr->isReturn) { parent.branchesOut = true; } // traps when the arg is null parent.implicitTrap = true; } void visitRefTest(RefTest* curr) {} void visitRefCast(RefCast* curr) { // Traps if the ref is not null and it has an invalid rtt. parent.implicitTrap = true; } void visitBrOn(BrOn* curr) { parent.breakTargets.insert(curr->name); } void visitRttCanon(RttCanon* curr) {} void visitRttSub(RttSub* curr) {} void visitStructNew(StructNew* curr) {} void visitStructGet(StructGet* curr) { if (curr->ref->type == Type::unreachable) { return; } if (curr->ref->type.getHeapType() .getStruct() .fields[curr->index] .mutable_ == Mutable) { parent.readsMutableStruct = true; } // traps when the arg is null if (curr->ref->type.isNullable()) { parent.implicitTrap = true; } } void visitStructSet(StructSet* curr) { parent.writesStruct = true; // traps when the arg is null if (curr->ref->type.isNullable()) { parent.implicitTrap = true; } } void visitArrayNew(ArrayNew* curr) {} void visitArrayInit(ArrayInit* curr) {} void visitArrayGet(ArrayGet* curr) { parent.readsArray = true; // traps when the arg is null or the index out of bounds parent.implicitTrap = true; } void visitArraySet(ArraySet* curr) { parent.writesArray = true; // traps when the arg is null or the index out of bounds parent.implicitTrap = true; } void visitArrayLen(ArrayLen* curr) { // traps when the arg is null if (curr->ref->type.isNullable()) { parent.implicitTrap = true; } } void visitArrayCopy(ArrayCopy* curr) { parent.readsArray = true; parent.writesArray = true; // traps when a ref is null, or when out of bounds. parent.implicitTrap = true; } void visitRefAs(RefAs* curr) { // traps when the arg is not valid parent.implicitTrap = true; // Note: We could be more precise here and report the lack of a possible // trap if the input is non-nullable (and also of the right kind for // RefAsFunc etc.). However, we have optimization passes that will // remove a RefAs in such a case (in OptimizeInstructions, and also // Vacuum in trapsNeverHappen mode), so duplicating that code here would // only help until the next time those optimizations run. As a tradeoff, // we keep the code here simpler, but it does mean another optimization // cycle may be needed in some cases. } }; public: // Helpers static bool canReorder(const PassOptions& passOptions, Module& module, Expression* a, Expression* b) { EffectAnalyzer aEffects(passOptions, module, a); EffectAnalyzer bEffects(passOptions, module, b); return !aEffects.invalidates(bEffects); } // C-API enum SideEffects : uint32_t { None = 0, Branches = 1 << 0, Calls = 1 << 1, ReadsLocal = 1 << 2, WritesLocal = 1 << 3, ReadsGlobal = 1 << 4, WritesGlobal = 1 << 5, ReadsMemory = 1 << 6, WritesMemory = 1 << 7, ReadsTable = 1 << 8, WritesTable = 1 << 9, ImplicitTrap = 1 << 10, IsAtomic = 1 << 11, Throws = 1 << 12, DanglingPop = 1 << 13, TrapsNeverHappen = 1 << 14, Any = (1 << 15) - 1 }; uint32_t getSideEffects() const { uint32_t effects = 0; if (branchesOut || hasExternalBreakTargets()) { effects |= SideEffects::Branches; } if (calls) { effects |= SideEffects::Calls; } if (localsRead.size() > 0) { effects |= SideEffects::ReadsLocal; } if (localsWritten.size() > 0) { effects |= SideEffects::WritesLocal; } if (mutableGlobalsRead.size()) { effects |= SideEffects::ReadsGlobal; } if (globalsWritten.size() > 0) { effects |= SideEffects::WritesGlobal; } if (readsMemory) { effects |= SideEffects::ReadsMemory; } if (writesMemory) { effects |= SideEffects::WritesMemory; } if (readsTable) { effects |= SideEffects::ReadsTable; } if (writesTable) { effects |= SideEffects::WritesTable; } if (implicitTrap) { effects |= SideEffects::ImplicitTrap; } if (trapsNeverHappen) { effects |= SideEffects::TrapsNeverHappen; } if (isAtomic) { effects |= SideEffects::IsAtomic; } if (throws_) { effects |= SideEffects::Throws; } if (danglingPop) { effects |= SideEffects::DanglingPop; } return effects; } void ignoreBranches() { branchesOut = false; breakTargets.clear(); } private: void pre() { breakTargets.clear(); delegateTargets.clear(); } void post() { assert(tryDepth == 0); if (ignoreImplicitTraps) { implicitTrap = false; } else if (implicitTrap) { trap = true; } } }; // Calculate effects only on the node itself (shallowly), and not on // children. class ShallowEffectAnalyzer : public EffectAnalyzer { public: ShallowEffectAnalyzer(const PassOptions& passOptions, Module& module, Expression* ast = nullptr) : EffectAnalyzer(passOptions, module) { if (ast) { visit(ast); } } }; } // namespace wasm #endif // wasm_ir_effects_h binaryen-version_108/src/ir/eh-utils.cpp000066400000000000000000000127031423707623100204070ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/eh-utils.h" #include "ir/branch-utils.h" #include "ir/find_all.h" #include "ir/type-updating.h" namespace wasm { namespace EHUtils { // This returns three values, some of them as output parameters: // - Return value: 'pop' expression (Expression*), when there is one in // first-descendant line. If there's no such pop, it returns null. // - isPopNested: Whether the discovered 'pop' is nested within a block // - popPtr: 'pop' expression's pointer (Expression**), when there is one found // // When 'catchBody' itself is a 'pop', 'pop''s pointer is null, because there is // no way to get the given expression's address. But that's fine because pop's // pointer is only necessary (in handleBlockNestedPops) to fix it up when it is // nested, and if 'catchBody' itself is a pop, we don't need to fix it up. static Expression* getFirstPop(Expression* catchBody, bool& isPopNested, Expression**& popPtr) { Expression* firstChild = catchBody; isPopNested = false; popPtr = nullptr; // When there are multiple expressions within a catch body, an implicit // block is created within it for convenience purposes. auto* implicitBlock = catchBody->dynCast(); // Go down the line for the first child until we reach a leaf. A pop should be // in that first-decendant line. Expression** firstChildPtr = nullptr; while (true) { if (firstChild->is()) { popPtr = firstChildPtr; return firstChild; } if (Properties::isControlFlowStructure(firstChild)) { if (auto* iff = firstChild->dynCast()) { // If's condition is a value child who comes before an 'if' instruction // in binary, it is fine if a 'pop' is in there. We don't allow a 'pop' // to be in an 'if''s then or else body because they are not first // descendants. firstChild = iff->condition; firstChildPtr = &iff->condition; continue; } else if (firstChild->is()) { // We don't allow the pop to be included in a loop, because it cannot be // run more than once return nullptr; } if (firstChild->is()) { // If there are no branches that targets the implicit block, it will be // removed when written back. But if there are branches that target the // implicit block, // (catch $e // (block $l0 // (pop i32) ;; within a block! // (br $l0) // ... // ) // This cannot be removed, so this is considered a nested pop (which we // should fix). if (firstChild == implicitBlock) { if (BranchUtils::BranchSeeker::has(implicitBlock, implicitBlock->name)) { isPopNested = true; } } else { isPopNested = true; } } else if (firstChild->is()) { isPopNested = true; } else { WASM_UNREACHABLE("Unexpected control flow expression"); } } ChildIterator it(firstChild); if (it.getNumChildren() == 0) { return nullptr; } firstChildPtr = &*it.begin(); firstChild = *firstChildPtr; } } bool containsValidDanglingPop(Expression* catchBody) { bool isPopNested = false; Expression** popPtr = nullptr; auto* pop = getFirstPop(catchBody, isPopNested, popPtr); return pop != nullptr && !isPopNested; } void handleBlockNestedPop(Try* try_, Function* func, Module& wasm) { Builder builder(wasm); for (Index i = 0; i < try_->catchTags.size(); i++) { Name tagName = try_->catchTags[i]; auto* tag = wasm.getTag(tagName); if (tag->sig.params == Type::none) { continue; } auto* catchBody = try_->catchBodies[i]; bool isPopNested = false; Expression** popPtr = nullptr; Expression* pop = getFirstPop(catchBody, isPopNested, popPtr); assert(pop && "Pop has not been found in this catch"); // Change code like // (catch $e // ... // (block // (pop i32) // ) // ) // into // (catch $e // (local.set $new // (pop i32) // ) // ... // (block // (local.get $new) // ) // ) if (isPopNested) { assert(popPtr); Index newLocal = builder.addVar(func, pop->type); try_->catchBodies[i] = builder.makeSequence(builder.makeLocalSet(newLocal, pop), catchBody); *popPtr = builder.makeLocalGet(newLocal, pop->type); } } } void handleBlockNestedPops(Function* func, Module& wasm) { if (!wasm.features.hasExceptionHandling()) { return; } FindAll trys(func->body); for (auto* try_ : trys.list) { handleBlockNestedPop(try_, func, wasm); } // Pops we handled can be of non-defaultable types, so we may have created // non-nullable type locals. Fix them. TypeUpdating::handleNonDefaultableLocals(func, wasm); } } // namespace EHUtils } // namespace wasm binaryen-version_108/src/ir/eh-utils.h000066400000000000000000000033521423707623100200540ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_eh_h #define wasm_ir_eh_h #include "wasm.h" namespace wasm { namespace EHUtils { // Returns true if a 'pop' instruction exists in a valid location, which means // right after a 'catch' instruction in binary writing order. // - This assumes there should be at least a single pop. So given a catch body // whose tag type is void or a catch_all's body, this returns false. // - This returns true even if there are more pops after the first one within a // catch body, which is invalid. That will be taken care of in validation. bool containsValidDanglingPop(Expression* catchBody); // Given a 'Try' expression, fixes up 'pop's nested in blocks, which are // currently not supported without block param types, by creating a new local, // putting a (local.set $new (pop type)) right after 'catch', and putting a // '(local.get $new)' where the 'pop' used to be. void handleBlockNestedPop(Try* try_, Function* func, Module& wasm); // Calls handleBlockNestedPop for each 'Try's in a given function. void handleBlockNestedPops(Function* func, Module& wasm); } // namespace EHUtils } // namespace wasm #endif // wasm_ir_eh_h binaryen-version_108/src/ir/element-utils.h000066400000000000000000000030271423707623100211100ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_element_h #define wasm_ir_element_h #include "wasm-builder.h" #include "wasm.h" namespace wasm::ElementUtils { // iterate over functions referenced in an element segment template inline void iterElementSegmentFunctionNames(ElementSegment* segment, T visitor) { if (!segment->type.isFunction()) { return; } for (Index i = 0; i < segment->data.size(); i++) { if (auto* get = segment->data[i]->dynCast()) { visitor(get->func, i); } } } // iterate over functions referenced in all element segments of a module template inline void iterAllElementFunctionNames(const Module* wasm, T visitor) { for (auto& segment : wasm->elementSegments) { iterElementSegmentFunctionNames( segment.get(), [&](Name& name, Index i) { visitor(name); }); } } } // namespace wasm::ElementUtils #endif // wasm_ir_element_h binaryen-version_108/src/ir/equivalent_sets.h000066400000000000000000000051331423707623100215340ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_equivalent_sets_h #define wasm_ir_equivalent_sets_h #include namespace wasm { // // A map of each index to all those it is equivalent to, and some helpers. // struct EquivalentSets { // A set of indexes. This is ordered for deterministic iteration. typedef std::set Set; std::unordered_map> indexSets; // Clears the state completely, removing all equivalences. void clear() { indexSets.clear(); } // Resets an index, removing any equivalences between it and others. void reset(Index index) { auto iter = indexSets.find(index); if (iter != indexSets.end()) { auto& set = iter->second; assert(!set->empty()); // can't be empty - we are equal to ourselves! if (set->size() > 1) { // We are not the last item, fix things up set->erase(index); } indexSets.erase(iter); } } // Adds a new equivalence between two indexes. // `justReset` is an index that was just reset, and has no // equivalences. `other` may have existing equivalences. void add(Index justReset, Index other) { auto iter = indexSets.find(other); if (iter != indexSets.end()) { auto& set = iter->second; set->insert(justReset); indexSets[justReset] = set; } else { auto set = std::make_shared(); set->insert(justReset); set->insert(other); indexSets[justReset] = set; indexSets[other] = set; } } // Checks whether two indexes contain the same data. bool check(Index a, Index b) { if (a == b) { return true; } if (auto* set = getEquivalents(a)) { if (set->find(b) != set->end()) { return true; } } return false; } // Returns the equivalent set, or nullptr Set* getEquivalents(Index index) { auto iter = indexSets.find(index); if (iter != indexSets.end()) { return iter->second.get(); } return nullptr; } }; } // namespace wasm #endif // wasm_ir_equivalent_sets_h binaryen-version_108/src/ir/export-utils.h000066400000000000000000000020211423707623100207710ustar00rootroot00000000000000/* * Copyright 2022 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_export_h #define wasm_ir_export_h #include "wasm.h" namespace wasm::ExportUtils { inline std::vector getExportedFunctions(Module& wasm) { std::vector ret; for (auto& ex : wasm.exports) { if (ex->kind == ExternalKind::Function) { ret.push_back(wasm.getFunction(ex->value)); } } return ret; } } // namespace wasm::ExportUtils #endif // wasm_ir_export_h binaryen-version_108/src/ir/features.h000066400000000000000000000075221423707623100201430ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_features_h #define wasm_ir_features_h #include #include #include #include namespace wasm::Features { inline FeatureSet get(UnaryOp op) { FeatureSet ret; switch (op) { case TruncSatSFloat32ToInt32: case TruncSatUFloat32ToInt32: case TruncSatSFloat64ToInt32: case TruncSatUFloat64ToInt32: case TruncSatSFloat32ToInt64: case TruncSatUFloat32ToInt64: case TruncSatSFloat64ToInt64: case TruncSatUFloat64ToInt64: { ret.setTruncSat(); break; } case SplatVecI8x16: case SplatVecI16x8: case SplatVecI32x4: case SplatVecI64x2: case SplatVecF32x4: case SplatVecF64x2: case NotVec128: case NegVecI8x16: case AllTrueVecI8x16: case NegVecI16x8: case AllTrueVecI16x8: case NegVecI32x4: case AllTrueVecI32x4: case NegVecI64x2: case AbsVecF32x4: case NegVecF32x4: case SqrtVecF32x4: case AbsVecF64x2: case NegVecF64x2: case SqrtVecF64x2: case TruncSatSVecF32x4ToVecI32x4: case TruncSatUVecF32x4ToVecI32x4: case ConvertSVecI32x4ToVecF32x4: case ConvertUVecI32x4ToVecF32x4: { ret.setSIMD(); break; } case ExtendS8Int32: case ExtendS16Int32: case ExtendS8Int64: case ExtendS16Int64: case ExtendS32Int64: { ret.setSignExt(); break; } default: {} } return ret; } inline FeatureSet get(BinaryOp op) { FeatureSet ret; switch (op) { case EqVecI8x16: case NeVecI8x16: case LtSVecI8x16: case LtUVecI8x16: case GtSVecI8x16: case GtUVecI8x16: case LeSVecI8x16: case LeUVecI8x16: case GeSVecI8x16: case GeUVecI8x16: case EqVecI16x8: case NeVecI16x8: case LtSVecI16x8: case LtUVecI16x8: case GtSVecI16x8: case GtUVecI16x8: case LeSVecI16x8: case LeUVecI16x8: case GeSVecI16x8: case GeUVecI16x8: case EqVecI32x4: case NeVecI32x4: case LtSVecI32x4: case LtUVecI32x4: case GtSVecI32x4: case GtUVecI32x4: case LeSVecI32x4: case LeUVecI32x4: case GeSVecI32x4: case GeUVecI32x4: case EqVecF32x4: case NeVecF32x4: case LtVecF32x4: case GtVecF32x4: case LeVecF32x4: case GeVecF32x4: case EqVecF64x2: case NeVecF64x2: case LtVecF64x2: case GtVecF64x2: case LeVecF64x2: case GeVecF64x2: case AndVec128: case OrVec128: case XorVec128: case AddVecI8x16: case AddSatSVecI8x16: case AddSatUVecI8x16: case SubVecI8x16: case SubSatSVecI8x16: case SubSatUVecI8x16: case AddVecI16x8: case AddSatSVecI16x8: case AddSatUVecI16x8: case SubVecI16x8: case SubSatSVecI16x8: case SubSatUVecI16x8: case MulVecI16x8: case AddVecI32x4: case SubVecI32x4: case MulVecI32x4: case AddVecI64x2: case SubVecI64x2: case AddVecF32x4: case SubVecF32x4: case MulVecF32x4: case DivVecF32x4: case MinVecF32x4: case MaxVecF32x4: case AddVecF64x2: case SubVecF64x2: case MulVecF64x2: case DivVecF64x2: case MinVecF64x2: case MaxVecF64x2: { ret.setSIMD(); break; } default: {} } return ret; } } // namespace wasm::Features #endif // wasm_ir_features_h binaryen-version_108/src/ir/find_all.h000066400000000000000000000037031423707623100200720ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_find_all_h #define wasm_ir_find_all_h #include namespace wasm { // Find all instances of a certain node type template struct FindAll { std::vector list; FindAll(Expression* ast) { struct Finder : public PostWalker> { std::vector* list; void visitExpression(Expression* curr) { if (curr->is()) { (*list).push_back(curr->cast()); } } }; Finder finder; finder.list = &list; finder.walk(ast); } bool has() { return !list.empty(); } }; // Find all pointers to instances of a certain node type struct PointerFinder : public PostWalker> { Expression::Id id; std::vector* list; void visitExpression(Expression* curr) { if (curr->_id == id) { (*list).push_back(getCurrentPointer()); } } }; template struct FindAllPointers { std::vector list; // Note that a pointer may be to the function->body itself, so we must // take \ast by reference. FindAllPointers(Expression*& ast) { PointerFinder finder; finder.id = (Expression::Id)T::SpecificId; finder.list = &list; finder.walk(ast); } }; } // namespace wasm #endif // wasm_ir_find_all_h binaryen-version_108/src/ir/flat.h000066400000000000000000000103311423707623100172430ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Flattens code, removing nesting.e.g. an if return value would be // converted to a local // // (i32.add // (if (..condition..) // (..if true..) // (..if false..) // ) // (i32.const 1) // ) // => // (if (..condition..) // (local.set $temp // (..if true..) // ) // (local.set $temp // (..if false..) // ) // ) // (i32.add // (local.get $temp) // (i32.const 1) // ) // // Formally, this pass flattens in the precise sense of // making the AST have these properties: // // 1. Aside from a local.set, the operands of an instruction must be a // local.get, a const, an unreachable, or a ref.as_non_null. Anything else // is written to a local earlier. // 2. Disallow control flow (block, loop, if, and try) return values, and do // not allow the function body to have a concrete type, i.e., do not use // control flow to pass around values. // 3. Disallow local.tee, setting a local is always done in a local.set // on a non-nested-expression location. // 4. local.set cannot have an operand that is control flow (control flow with // values is prohibited already, but e.g. a block ending in unreachable, // which can normally be nested, is also disallowed). // // Note: ref.as_non_null must be allowed in a nested position because we cannot // spill it to a local - the result is non-null, which is not allowable in a // local. // #ifndef wasm_ir_flat_h #define wasm_ir_flat_h #include "ir/iteration.h" #include "ir/properties.h" #include "pass.h" #include "wasm-traversal.h" namespace wasm::Flat { inline void verifyFlatness(Function* func) { struct VerifyFlatness : public PostWalker> { void visitExpression(Expression* curr) { if (Properties::isControlFlowStructure(curr)) { verify(!curr->type.isConcrete(), "control flow structures must not flow values"); } else if (auto* set = curr->dynCast()) { verify(!set->isTee() || set->type == Type::unreachable, "tees are not allowed, only sets"); verify(!Properties::isControlFlowStructure(set->value), "set values cannot be control flow"); } else { for (auto* child : ChildIterator(curr)) { bool isRefAsNonNull = child->is() && child->cast()->op == RefAsNonNull; verify(Properties::isConstantExpression(child) || child->is() || child->is() || isRefAsNonNull, "instructions must only have constant expressions, local.get, " "or unreachable as children"); } } } void verify(bool condition, const char* message) { if (!condition) { Fatal() << "IR must be flat: run --flatten beforehand (" << message << ", in " << getFunction()->name << ')'; } } }; VerifyFlatness verifier; verifier.walkFunction(func); verifier.setFunction(func); verifier.verify(!func->body->type.isConcrete(), "function bodies must not flow values"); } inline void verifyFlatness(Module* module) { struct VerifyFlatness : public WalkerPass< PostWalker>> { bool isFunctionParallel() override { return true; } VerifyFlatness* create() override { return new VerifyFlatness(); } void doVisitFunction(Function* func) { verifyFlatness(func); } }; PassRunner runner(module); VerifyFlatness().run(&runner, module); } } // namespace wasm::Flat #endif // wasm_ir_flat_h binaryen-version_108/src/ir/function-utils.h000066400000000000000000000027551423707623100213130ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_function_h #define wasm_ir_function_h #include "ir/utils.h" #include "wasm.h" namespace wasm::FunctionUtils { // Checks if two functions are equal in all functional aspects, // everything but their name (which can't be the same, in the same // module!) - same params, vars, body, result, etc. inline bool equal(Function* left, Function* right) { if (left->type != right->type) { return false; } if (left->getNumVars() != right->getNumVars()) { return false; } for (Index i = left->getParams().size(); i < left->getNumLocals(); i++) { if (left->getLocalType(i) != right->getLocalType(i)) { return false; } } if (!left->imported() && !right->imported()) { return ExpressionAnalyzer::equal(left->body, right->body); } return left->imported() && right->imported(); } } // namespace wasm::FunctionUtils #endif // wasm_ir_function_h binaryen-version_108/src/ir/gc-type-utils.h000066400000000000000000000101311423707623100210210ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_gc_type_utils_h #define wasm_ir_gc_type_utils_h #include "wasm.h" namespace wasm::GCTypeUtils { // Helper code to evaluate a reference at compile time and check if it is of a // certain kind. Various wasm instructions check if something is a function or // data etc., and that code is shared here. enum Kind { Func, Data, I31, Other }; enum EvaluationResult { // The result is not known at compile time. Unknown, // The evaluation is known to succeed (i.e., we find what we are looking // for), or fail, at compile time. Success, Failure }; // Given an instruction that checks if the child reference is of a certain kind // (like br_on_func checks if it is a function), see if type info lets us // determine that at compile time. // This ignores nullability - it just checks the kind. inline EvaluationResult evaluateKindCheck(Expression* curr) { Kind expected; Expression* child; // Some operations flip the condition. bool flip = false; if (auto* br = curr->dynCast()) { switch (br->op) { // We don't check nullability here. case BrOnNull: case BrOnNonNull: case BrOnCastFail: flip = true; [[fallthrough]]; case BrOnCast: if (!br->rtt) { // This is a static cast check, which we may be able to resolve at // compile time. Note that the type must be non-nullable for us to // succeed at that inference, as otherwise a null can make us fail. if (Type::isSubType(br->ref->type, Type(br->intendedType, NonNullable))) { return flip ? Failure : Success; } } return Unknown; case BrOnNonFunc: flip = true; [[fallthrough]]; case BrOnFunc: expected = Func; break; case BrOnNonData: flip = true; [[fallthrough]]; case BrOnData: expected = Data; break; case BrOnNonI31: flip = true; [[fallthrough]]; case BrOnI31: expected = I31; break; default: WASM_UNREACHABLE("unhandled BrOn"); } child = br->ref; } else if (auto* is = curr->dynCast()) { switch (is->op) { // We don't check nullability here. case RefIsNull: return Unknown; case RefIsFunc: expected = Func; break; case RefIsData: expected = Data; break; case RefIsI31: expected = I31; break; default: WASM_UNREACHABLE("unhandled BrOn"); } child = is->value; } else if (auto* as = curr->dynCast()) { switch (as->op) { // We don't check nullability here. case RefAsNonNull: return Unknown; case RefAsFunc: expected = Func; break; case RefAsData: expected = Data; break; case RefAsI31: expected = I31; break; default: WASM_UNREACHABLE("unhandled BrOn"); } child = as->value; } else { WASM_UNREACHABLE("invalid input to evaluateKindCheck"); } auto childType = child->type; Kind actual; if (childType.isFunction()) { actual = Func; } else if (childType.isData()) { actual = Data; } else if (childType.getHeapType() == HeapType::i31) { actual = I31; } else { return Unknown; } auto success = actual == expected; if (flip) { success = !success; } return success ? Success : Failure; } } // namespace wasm::GCTypeUtils #endif // wasm_ir_gc_type_utils_h binaryen-version_108/src/ir/global-utils.h000066400000000000000000000040741423707623100207220ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_global_h #define wasm_ir_global_h #include #include #include "ir/iteration.h" #include "ir/module-utils.h" #include "literal.h" #include "wasm.h" namespace wasm::GlobalUtils { // find a global initialized to the value of an import, or null if no such // global inline Global* getGlobalInitializedToImport(Module& wasm, Name module, Name base) { // find the import Name imported; ModuleUtils::iterImportedGlobals(wasm, [&](Global* import) { if (import->module == module && import->base == base) { imported = import->name; } }); if (imported.isNull()) { return nullptr; } // find a global inited to it Global* ret = nullptr; ModuleUtils::iterDefinedGlobals(wasm, [&](Global* defined) { if (auto* init = defined->init->dynCast()) { if (init->name == imported) { ret = defined; } } }); return ret; } inline bool canInitializeGlobal(Expression* curr, FeatureSet features) { if (auto* tuple = curr->dynCast()) { for (auto* op : tuple->operands) { if (!canInitializeGlobal(op, features)) { return false; } } return true; } if (Properties::isValidInConstantExpression(curr, features)) { for (auto* child : ChildIterator(curr)) { if (!canInitializeGlobal(child, features)) { return false; } } return true; } return false; } } // namespace wasm::GlobalUtils #endif // wasm_ir_global_h binaryen-version_108/src/ir/hashed.h000066400000000000000000000044421423707623100175570ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _wasm_ir_hashed_h #define _wasm_ir_hashed_h #include "ir/utils.h" #include "support/hash.h" #include "wasm.h" #include namespace wasm { // A pass that hashes all functions struct FunctionHasher : public WalkerPass> { bool isFunctionParallel() override { return true; } struct Map : public std::map {}; FunctionHasher(Map* output, ExpressionAnalyzer::ExprHasher customHasher) : output(output), customHasher(customHasher) {} FunctionHasher(Map* output) : output(output), customHasher(ExpressionAnalyzer::nothingHasher) {} FunctionHasher* create() override { return new FunctionHasher(output, customHasher); } static Map createMap(Module* module) { Map hashes; for (auto& func : module->functions) { // ensure an entry for each function - we must not modify the map shape in // parallel, just the values hashes[func.get()] = hash(0); } return hashes; } void doWalkFunction(Function* func) { output->at(func) = flexibleHashFunction(func, customHasher); } static size_t flexibleHashFunction(Function* func, ExpressionAnalyzer::ExprHasher customHasher) { auto digest = hash(func->type); for (auto type : func->vars) { rehash(digest, type.getID()); } hash_combine(digest, ExpressionAnalyzer::flexibleHash(func->body, customHasher)); return digest; } static size_t hashFunction(Function* func) { return flexibleHashFunction(func, ExpressionAnalyzer::nothingHasher); } private: Map* output; ExpressionAnalyzer::ExprHasher customHasher; }; } // namespace wasm #endif // _wasm_ir_hashed_h binaryen-version_108/src/ir/import-utils.h000066400000000000000000000061141423707623100207710ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_import_h #define wasm_ir_import_h #include "literal.h" #include "wasm.h" namespace wasm { // Collects info on imports, into a form convenient for summarizing // and searching. struct ImportInfo { Module& wasm; std::vector importedGlobals; std::vector importedFunctions; std::vector importedTables; std::vector importedTags; ImportInfo(Module& wasm) : wasm(wasm) { for (auto& import : wasm.globals) { if (import->imported()) { importedGlobals.push_back(import.get()); } } for (auto& import : wasm.functions) { if (import->imported()) { importedFunctions.push_back(import.get()); } } for (auto& import : wasm.tables) { if (import->imported()) { importedTables.push_back(import.get()); } } for (auto& import : wasm.tags) { if (import->imported()) { importedTags.push_back(import.get()); } } } Global* getImportedGlobal(Name module, Name base) { for (auto* import : importedGlobals) { if (import->module == module && import->base == base) { return import; } } return nullptr; } Function* getImportedFunction(Name module, Name base) { for (auto* import : importedFunctions) { if (import->module == module && import->base == base) { return import; } } return nullptr; } Tag* getImportedTag(Name module, Name base) { for (auto* import : importedTags) { if (import->module == module && import->base == base) { return import; } } return nullptr; } Index getNumImportedGlobals() { return importedGlobals.size(); } Index getNumImportedFunctions() { return importedFunctions.size(); } Index getNumImportedTables() { return importedTables.size(); } Index getNumImportedTags() { return importedTags.size(); } Index getNumImports() { return getNumImportedGlobals() + getNumImportedFunctions() + getNumImportedTags() + (wasm.memory.imported() ? 1 : 0) + getNumImportedTables(); } Index getNumDefinedGlobals() { return wasm.globals.size() - getNumImportedGlobals(); } Index getNumDefinedFunctions() { return wasm.functions.size() - getNumImportedFunctions(); } Index getNumDefinedTables() { return wasm.tables.size() - getNumImportedTables(); } Index getNumDefinedTags() { return wasm.tags.size() - getNumImportedTags(); } }; } // namespace wasm #endif // wasm_ir_import_h binaryen-version_108/src/ir/intrinsics.cpp000066400000000000000000000024431423707623100210420ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/intrinsics.h" #include "wasm-builder.h" namespace wasm { static Name BinaryenIntrinsics("binaryen-intrinsics"), CallWithoutEffects("call.without.effects"); bool Intrinsics::isCallWithoutEffects(Function* func) { return func->module == BinaryenIntrinsics && func->base == CallWithoutEffects; } Call* Intrinsics::isCallWithoutEffects(Expression* curr) { if (auto* call = curr->dynCast()) { // The target function may not exist if the module is still being // constructed. if (auto* func = module.getFunctionOrNull(call->target)) { if (isCallWithoutEffects(func)) { return call; } } } return nullptr; } } // namespace wasm binaryen-version_108/src/ir/intrinsics.h000066400000000000000000000061411423707623100205060ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_intrinsics_h #define wasm_ir_intrinsics_h #include "pass.h" #include "wasm-traversal.h" // // See the README.md for background on intrinsic functions. // // Intrinsics can be recognized by Intrinsics::isFoo() methods, that check if a // function is a particular intrinsic, or if a call to a function is so. The // latter returns nullptr if the input is not that intrinsic, and otherwise the // intrinsic itself cast to a Call*. // namespace wasm { class Intrinsics { Module& module; public: Intrinsics(Module& module) : module(module) {} // // Check if an instruction is the call.without.effects intrinsic. // // (import "binaryen-intrinsics" "call.without.effects" // (func (..params..) (param $target funcref) (..results..))) // // call.without.effects can take any parameters, and in addition a funcref, // and return any result. // // Precise semantics: // // * The optimizer will assume this instruction has no side effects. // * Final lowering turns a call.without.effects into a call of the given // function with the given parameters. (This will either be a direct call, // or a call_ref; note that either way, the function reference that appears // here must have the proper type - if not, you will get an error.) // // call.without.effects is useful to be able to get rid of an unused result // that has side effects. For example, // // (drop (call $get-something)) // // cannot be removed, as a call has side effects. But if a code generator // knows that it is fine to not make the call given that the result is // dropped (perhaps the side effects are to initialize a global cache, for // example) then instead of emitting // // (call $get-something) // // it can emit // // (call $call.without.effects (ref.func $get-something)) // // which will have this behavior in the optimizer if it is dropped: // // (drop (call $call.without.effects (ref.func $get-something))) // => // (drop (ref.func $get-something)) // // Later optimizations can remove the dropped ref.func. Or, if the result is // actually used, // // (local.set $x (call $call.without.effects (ref.func $get-something))) // => // (local.set $x (call $get-something)) // // Later passes will then turn that into a direct call and further optimize // things. // bool isCallWithoutEffects(Function* func); Call* isCallWithoutEffects(Expression* curr); }; } // namespace wasm #endif // wasm_ir_intrinsics_h binaryen-version_108/src/ir/iteration.h000066400000000000000000000132231423707623100203160ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_iteration_h #define wasm_ir_iteration_h #include "ir/properties.h" #include "wasm.h" namespace wasm { // // Allows iteration over the children of the expression, in order of execution // where relevant. // // * This skips missing children, e.g. if an if has no else, it is represented // as having 2 children (and not 3 with the last a nullptr). // // In general, it is preferable not to use this class and to directly access the // children (using e.g. iff->ifTrue etc.), as that is faster. However, in cases // where speed does not matter, this can be convenient. TODO: reimplement these // to avoid materializing all the chilren at once. // // ChildIterator - Iterates over all children // // ValueChildIterator - Iterates over all children that produce values used by // this instruction. For example, includes If::condition // but not If::ifTrue. // template class AbstractChildIterator { using Self = AbstractChildIterator; struct Iterator { const Self& parent; Index index; Iterator(const Self& parent, Index index) : parent(parent), index(index) {} bool operator!=(const Iterator& other) const { return index != other.index || &parent != &(other.parent); } bool operator==(const Iterator& other) const { return !(*this != other); } void operator++() { index++; } Expression*& operator*() { return *parent.children[parent.mapIndex(index)]; } }; friend struct Iterator; Index mapIndex(Index index) const { assert(index < children.size()); // The vector of children is in reverse order, as that is how // wasm-delegations-fields works. To get the order of execution, reverse // things. return children.size() - 1 - index; } public: // The vector of children in the order emitted by wasm-delegations-fields // (which is in reverse execution order). SmallVector children; AbstractChildIterator(Expression* parent) { auto* self = (Specific*)this; #define DELEGATE_ID parent->_id #define DELEGATE_START(id) \ auto* cast = parent->cast(); \ WASM_UNUSED(cast); #define DELEGATE_GET_FIELD(id, field) cast->field #define DELEGATE_FIELD_CHILD(id, field) self->addChild(parent, &cast->field); #define DELEGATE_FIELD_OPTIONAL_CHILD(id, field) \ if (cast->field) { \ self->addChild(parent, &cast->field); \ } #define DELEGATE_FIELD_INT(id, field) #define DELEGATE_FIELD_INT_ARRAY(id, field) #define DELEGATE_FIELD_LITERAL(id, field) #define DELEGATE_FIELD_NAME(id, field) #define DELEGATE_FIELD_NAME_VECTOR(id, field) #define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) #define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) #define DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) #define DELEGATE_FIELD_TYPE(id, field) #define DELEGATE_FIELD_HEAPTYPE(id, field) #define DELEGATE_FIELD_ADDRESS(id, field) #include "wasm-delegations-fields.def" } Iterator begin() const { return Iterator(*this, 0); } Iterator end() const { return Iterator(*this, children.size()); } void addChild(Expression* parent, Expression** child) { children.push_back(child); } // API for accessing children in random order. Expression*& getChild(Index index) { return *children[mapIndex(index)]; } Index getNumChildren() { return children.size(); } }; class ChildIterator : public AbstractChildIterator { public: ChildIterator(Expression* parent) : AbstractChildIterator(parent) {} }; class ValueChildIterator : public AbstractChildIterator { public: ValueChildIterator(Expression* parent) : AbstractChildIterator(parent) {} void addChild(Expression* parent, Expression** child) { if (Properties::isControlFlowStructure(parent)) { // If conditions are the only value children of control flow structures if (auto* iff = parent->dynCast()) { if (child == &iff->condition) { children.push_back(child); } } } else { // All children on non-control flow expressions are value children children.push_back(child); } } }; // Returns true if the current expression contains a certain kind of expression, // within the given depth of BFS. If depth is -1, this searches all children. template bool containsChild(Expression* parent, int depth = -1) { std::vector exprs; std::vector nextExprs; exprs.push_back(parent); while (!exprs.empty() && depth > 0) { for (auto* expr : exprs) { for (auto* child : ChildIterator(expr)) { if (child->is()) { return true; } nextExprs.push_back(child); } } exprs.swap(nextExprs); nextExprs.clear(); if (depth > 0) { depth--; } } return false; } } // namespace wasm #endif // wasm_ir_iteration_h binaryen-version_108/src/ir/label-utils.h000066400000000000000000000025751423707623100205450ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_label_h #define wasm_ir_label_h #include "wasm-traversal.h" #include "wasm.h" namespace wasm::LabelUtils { // Handles branch/loop labels in a function; makes it easy to add new // ones without duplicates class LabelManager : public PostWalker { public: LabelManager(Function* func) { walkFunction(func); } Name getUnique(std::string prefix) { while (1) { auto curr = Name(prefix + std::to_string(counter++)); if (labels.emplace(curr).second) { return curr; } } } void visitBlock(Block* curr) { labels.insert(curr->name); } void visitLoop(Loop* curr) { labels.insert(curr->name); } private: std::set labels; size_t counter = 0; }; } // namespace wasm::LabelUtils #endif // wasm_ir_label_h binaryen-version_108/src/ir/linear-execution.h000066400000000000000000000130621423707623100215740ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_linear_execution_h #define wasm_ir_linear_execution_h #include #include #include namespace wasm { // Traversal in the order of execution. This is quick and simple, but // does not provide the same comprehensive information that a full // conversion to basic blocks would. What it does give is a quick // way to view straightline execution traces, i.e., that have no // branching. This can let optimizations get most of what they // want without the cost of creating another AST. // // When execution is no longer linear, this notifies via a call // to noteNonLinear(). template> struct LinearExecutionWalker : public PostWalker { LinearExecutionWalker() = default; // subclasses should implement this void noteNonLinear(Expression* curr) { abort(); } static void doNoteNonLinear(SubType* self, Expression** currp) { self->noteNonLinear(*currp); } static void scan(SubType* self, Expression** currp) { Expression* curr = *currp; switch (curr->_id) { case Expression::Id::InvalidId: abort(); case Expression::Id::BlockId: { self->pushTask(SubType::doVisitBlock, currp); if (curr->cast()->name.is()) { self->pushTask(SubType::doNoteNonLinear, currp); } auto& list = curr->cast()->list; for (int i = int(list.size()) - 1; i >= 0; i--) { self->pushTask(SubType::scan, &list[i]); } break; } case Expression::Id::IfId: { self->pushTask(SubType::doVisitIf, currp); self->pushTask(SubType::doNoteNonLinear, currp); self->maybePushTask(SubType::scan, &curr->cast()->ifFalse); self->pushTask(SubType::doNoteNonLinear, currp); self->pushTask(SubType::scan, &curr->cast()->ifTrue); self->pushTask(SubType::doNoteNonLinear, currp); self->pushTask(SubType::scan, &curr->cast()->condition); break; } case Expression::Id::LoopId: { self->pushTask(SubType::doVisitLoop, currp); self->pushTask(SubType::scan, &curr->cast()->body); self->pushTask(SubType::doNoteNonLinear, currp); break; } case Expression::Id::BreakId: { self->pushTask(SubType::doVisitBreak, currp); self->pushTask(SubType::doNoteNonLinear, currp); self->maybePushTask(SubType::scan, &curr->cast()->condition); self->maybePushTask(SubType::scan, &curr->cast()->value); break; } case Expression::Id::SwitchId: { self->pushTask(SubType::doVisitSwitch, currp); self->pushTask(SubType::doNoteNonLinear, currp); self->pushTask(SubType::scan, &curr->cast()->condition); self->maybePushTask(SubType::scan, &curr->cast()->value); break; } case Expression::Id::ReturnId: { self->pushTask(SubType::doVisitReturn, currp); self->pushTask(SubType::doNoteNonLinear, currp); self->maybePushTask(SubType::scan, &curr->cast()->value); break; } case Expression::Id::TryId: { self->pushTask(SubType::doVisitTry, currp); self->pushTask(SubType::doNoteNonLinear, currp); auto& list = curr->cast()->catchBodies; for (int i = int(list.size()) - 1; i >= 0; i--) { self->pushTask(SubType::scan, &list[i]); self->pushTask(SubType::doNoteNonLinear, currp); } self->pushTask(SubType::scan, &curr->cast()->body); break; } case Expression::Id::ThrowId: { self->pushTask(SubType::doVisitThrow, currp); self->pushTask(SubType::doNoteNonLinear, currp); auto& list = curr->cast()->operands; for (int i = int(list.size()) - 1; i >= 0; i--) { self->pushTask(SubType::scan, &list[i]); } break; } case Expression::Id::RethrowId: { self->pushTask(SubType::doVisitRethrow, currp); self->pushTask(SubType::doNoteNonLinear, currp); break; } case Expression::Id::UnreachableId: { self->pushTask(SubType::doVisitUnreachable, currp); self->pushTask(SubType::doNoteNonLinear, currp); break; } case Expression::Id::BrOnId: { self->pushTask(SubType::doVisitBrOn, currp); self->pushTask(SubType::doNoteNonLinear, currp); self->maybePushTask(SubType::scan, &curr->cast()->rtt); self->pushTask(SubType::scan, &curr->cast()->ref); break; } default: { // All relevant things should have been handled. assert(!Properties::isControlFlowStructure(curr)); assert(!Properties::isBranch(curr)); // other node types do not have control flow, use regular post-order PostWalker::scan(self, currp); } } } }; } // namespace wasm #endif // wasm_ir_linear_execution_h binaryen-version_108/src/ir/literal-utils.h000066400000000000000000000041231423707623100211110ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_literal_utils_h #define wasm_ir_literal_utils_h #include "wasm-builder.h" #include "wasm.h" namespace wasm::LiteralUtils { inline Expression* makeFromInt32(int32_t x, Type type, Module& wasm) { auto* ret = wasm.allocator.alloc(); ret->value = Literal::makeFromInt32(x, type); ret->type = type; return ret; } inline bool canMakeZero(Type type) { if (type.isNonNullable()) { return false; } if (type.isRtt() && type.getRtt().hasDepth()) { // An rtt with depth cannot be constructed as a simple zero: we'd need to // create not just a zero (an rtt.canon) but also some rtt.subs that add to // the depth, so disallow that. Also, there is no practical way to create a // zero Literal for such a type, as we'd need to supply the list of super // types somehow, and creating a zero Literal is how makeZero works. return false; } if (type.isTuple()) { for (auto t : type) { if (!canMakeZero(t)) { return false; } } } return true; } inline Expression* makeZero(Type type, Module& wasm) { assert(canMakeZero(type)); // TODO: Remove this function once V8 supports v128.const // (https://bugs.chromium.org/p/v8/issues/detail?id=8460) Builder builder(wasm); if (type == Type::v128) { return builder.makeUnary(SplatVecI32x4, builder.makeConst(int32_t(0))); } return builder.makeConstantExpression(Literal::makeZeros(type)); } } // namespace wasm::LiteralUtils #endif // wasm_ir_literal_utils_h binaryen-version_108/src/ir/load-utils.h000066400000000000000000000023751423707623100204030ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_load_h #define wasm_ir_load_h #include "wasm.h" namespace wasm::LoadUtils { // checks if the sign of a load matters, which is when an integer // load is of fewer bytes than the size of the type (so we must // fill in bits either signed or unsigned wise) inline bool isSignRelevant(Load* load) { auto type = load->type; if (load->type == Type::unreachable) { return false; } return !type.isFloat() && load->bytes < type.getByteSize(); } // check if a load can be signed (which some opts want to do) inline bool canBeSigned(Load* load) { return !load->isAtomic; } } // namespace wasm::LoadUtils #endif // wasm_ir_load_h binaryen-version_108/src/ir/local-graph.h000066400000000000000000000071461423707623100205200ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_local_graph_h #define wasm_ir_local_graph_h #include "support/small_set.h" #include "wasm.h" namespace wasm { // // Finds the connections between local.gets and local.sets, creating // a graph of those ties. This is useful for "ssa-style" optimization, // in which you want to know exactly which sets are relevant for a // a get, so it is as if each get has just one set, logically speaking // (see the SSA pass for actually creating new local indexes based // on this). // struct LocalGraph { // main API // the constructor computes getSetses, the sets affecting each get LocalGraph(Function* func); // The local.sets relevant for an index or a get. The most common case is to // have a single set; after that, to be a phi of 2 items, so we use a small // set of size 2 to avoid allocations there. using Sets = SmallSet; using GetSetses = std::unordered_map; using Locations = std::map; // externally useful information GetSetses getSetses; // the sets affecting each get. a nullptr set means the // initial value (0 for a var, the received value for a // param) Locations locations; // where each get and set is (for easy replacing) // Checks if two gets are equivalent, that is, definitely have the same // value. bool equivalent(LocalGet* a, LocalGet* b); // Optional: compute the influence graphs between sets and gets // (useful for algorithms that propagate changes). void computeSetInfluences(); void computeGetInfluences(); void computeInfluences() { computeSetInfluences(); computeGetInfluences(); } // for each get, the sets whose values are influenced by that get using GetInfluences = std::unordered_set; std::unordered_map getInfluences; using SetInfluences = std::unordered_set; std::unordered_map setInfluences; // Optional: Compute the local indexes that are SSA, in the sense of // * a single set for all the gets for that local index // * the set dominates all the gets (logically implied by the former // property) // * no other set (aside from the zero-init) // The third property is not exactly standard SSA, but is useful since we are // not in SSA form in our IR. To see why it matters, consider these: // // x = 0 // zero init // [..] // x = 10 // y = x + 20 // x = 30 // !!! // f(y) // // The !!! line violates that property - it is another set for x, and it may // interfere say with replacing f(y) with f(x + 20). Instead, if we know the // only other possible set for x is the zero init, then things like the !!! // line cannot exist, and it is valid to replace f(y) with f(x + 20). (This // could be simpler, but in wasm the zero init always exists.) void computeSSAIndexes(); bool isSSA(Index x); private: Function* func; std::set SSAIndexes; }; } // namespace wasm #endif // wasm_ir_local_graph_h binaryen-version_108/src/ir/local-utils.h000066400000000000000000000063001423707623100205460ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_local_utils_h #define wasm_ir_local_utils_h #include #include namespace wasm { struct LocalGetCounter : public PostWalker { std::vector num; LocalGetCounter() = default; LocalGetCounter(Function* func) { analyze(func, func->body); } LocalGetCounter(Function* func, Expression* ast) { analyze(func, ast); } void analyze(Function* func) { analyze(func, func->body); } void analyze(Function* func, Expression* ast) { num.clear(); num.resize(func->getNumLocals()); walk(ast); } void visitLocalGet(LocalGet* curr) { num[curr->index]++; } }; // Removes trivially unneeded sets: sets for whom there is no possible get, and // sets of the same value immediately. struct UnneededSetRemover : public PostWalker { PassOptions& passOptions; LocalGetCounter* localGetCounter = nullptr; Module& module; UnneededSetRemover(Function* func, PassOptions& passOptions, Module& module) : passOptions(passOptions), module(module) { LocalGetCounter counter(func); UnneededSetRemover inner(counter, func, passOptions, module); removed = inner.removed; } UnneededSetRemover(LocalGetCounter& localGetCounter, Function* func, PassOptions& passOptions, Module& module) : passOptions(passOptions), localGetCounter(&localGetCounter), module(module) { walk(func->body); } bool removed = false; void visitLocalSet(LocalSet* curr) { // If no possible uses, remove. if (localGetCounter->num[curr->index] == 0) { remove(curr); } // If setting the same value as we already have, remove. auto* value = curr->value; while (true) { if (auto* set = value->dynCast()) { if (set->index == curr->index) { remove(curr); } else { // Handle tee chains. value = set->value; continue; } } else if (auto* get = value->dynCast()) { if (get->index == curr->index) { remove(curr); } } break; } } void remove(LocalSet* set) { auto* value = set->value; if (set->isTee()) { replaceCurrent(value); } else if (EffectAnalyzer(passOptions, module, set->value) .hasSideEffects()) { Drop* drop = ExpressionManipulator::convert(set); drop->value = value; drop->finalize(); } else { ExpressionManipulator::nop(set); } removed = true; } }; } // namespace wasm #endif // wasm_ir_local_utils_h binaryen-version_108/src/ir/localize.h000066400000000000000000000071541423707623100201300ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_localizer_h #define wasm_ir_localizer_h #include "ir/iteration.h" #include "wasm-builder.h" namespace wasm { // Make an expression available in a local. If already in one, just // use that local, otherwise use a new local. // // Note that if the local is reused, this assumes it is not modified in between // the set and the get, which the caller must ensure. struct Localizer { Index index; Expression* expr; Localizer(Expression* input, Function* func, Module* wasm) { expr = input; if (auto* get = expr->dynCast()) { index = get->index; } else if (auto* set = expr->dynCast()) { index = set->index; } else { index = Builder::addVar(func, expr->type); expr = Builder(*wasm).makeLocalTee(index, expr, expr->type); } } }; // Replaces all children with gets of locals, if they have any effects that // interact with any of the others, or if they have side effects which cannot be // removed. // // After this, the original input has only local.gets as inputs, or other things // that have no interacting effects, and so those children can be reordered // and/or removed as needed. // // The sets of the locals are emitted on a |sets| property on the class. Those // must be emitted right before the input. // // This stops at the first unreachable child, as there is no code executing // after that point anyhow. // // TODO: use in more places struct ChildLocalizer { std::vector sets; ChildLocalizer(Expression* input, Function* func, Module* wasm, const PassOptions& options) { Builder builder(*wasm); ChildIterator iterator(input); auto& children = iterator.children; auto num = children.size(); // Compute the effects of all children. std::vector effects; for (Index i = 0; i < num; i++) { // The children are in reverse order in ChildIterator, but we want to // process them in the normal order. auto* child = *children[num - 1 - i]; effects.emplace_back(options, *wasm, child); } // Go through the children and move to locals those that we need to. for (Index i = 0; i < num; i++) { auto** childp = children[num - 1 - i]; auto* child = *childp; if (child->type == Type::unreachable) { break; } // Use a local if we need to. That is the case either if this has side // effects we can't remove, or if it interacts with other children. bool needLocal = effects[i].hasUnremovableSideEffects(); if (!needLocal) { for (Index j = 0; j < num; j++) { if (j != i && effects[i].invalidates(effects[j])) { needLocal = true; break; } } } if (needLocal) { auto local = builder.addVar(func, child->type); sets.push_back(builder.makeLocalSet(local, child)); *childp = builder.makeLocalGet(local, child->type); } } } }; } // namespace wasm #endif // wasm_ir_localizer_h binaryen-version_108/src/ir/lubs.cpp000066400000000000000000000053061423707623100176230ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/lubs.h" #include "ir/utils.h" #include "wasm-type.h" #include "wasm.h" namespace wasm { namespace LUB { LUBFinder getResultsLUB(Function* func, Module& wasm) { LUBFinder lub; if (!wasm.features.hasGC()) { return lub; } Type originalType = func->getResults(); if (!originalType.hasRef()) { // Nothing to refine. return lub; } // Before we do anything, we must refinalize the function, because otherwise // its body may contain a block with a forced type, // // (func (result X) // (block (result X) // (..content with more specific type Y..) // ) ReFinalize().walkFunctionInModule(func, &wasm); lub.noteUpdatableExpression(func->body); if (lub.getBestPossible() == originalType) { return lub; } // Scan the body and look at the returns. First, return expressions. for (auto* ret : FindAll(func->body).list) { lub.noteUpdatableExpression(ret->value); if (lub.getBestPossible() == originalType) { return lub; } } // Process return_calls and call_refs. Unlike return expressions which we // just handled, these only get a type to update, not a value. auto processReturnType = [&](Type type) { // Return whether we still look ok to do the optimization. If this is // false then we can stop here. lub.note(type); return lub.getBestPossible() != originalType; }; for (auto* call : FindAll(func->body).list) { if (call->isReturn && !processReturnType(wasm.getFunction(call->target)->getResults())) { return lub; } } for (auto* call : FindAll(func->body).list) { if (call->isReturn && !processReturnType(call->heapType.getSignature().results)) { return lub; } } for (auto* call : FindAll(func->body).list) { if (call->isReturn) { auto targetType = call->target->type; if (targetType == Type::unreachable) { continue; } if (!processReturnType(targetType.getHeapType().getSignature().results)) { return lub; } } } return lub; } } // namespace LUB } // namespace wasm binaryen-version_108/src/ir/lubs.h000066400000000000000000000116741423707623100172750ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_lubs_h #define wasm_ir_lubs_h #include "ir/module-utils.h" #include "wasm.h" namespace wasm { // // Helper to find a LUB of a series of expressions. This works incrementally so // that if we see we are not improving on an existing type then we can stop // early. It also notes null expressions that can be updated later, and if // updating them would allow a better LUB it can do so. That is, given this: // // (ref.null any) ;; an expression that we can update // (.. something of type data ..) // // We can update that null to type (ref null data) which would allow setting // that as the LUB. This is important in cases where there is a null initial // value in a field, for example: we should not let the type there prevent us // from optimizing - after all, all nulls compare equally anyhow. // struct LUBFinder { LUBFinder() {} LUBFinder(Type initialType) { note(initialType); } // Note another type to take into account in the lub. void note(Type type) { lub = Type::getLeastUpperBound(lub, type); } // Note an expression that can be updated, that is, that we can modify in // safe ways if doing so would allow us to get a better lub. The specific // optimization possible here involves nulls, see the top comment. void noteUpdatableExpression(Expression* curr) { if (auto* null = curr->dynCast()) { nulls.insert(null); } else { note(curr->type); } } void noteNullDefault() { // A default value is indicated by a null pointer. nulls.insert(nullptr); } // Returns whether we noted any (reachable) value. This ignores nulls, as they // do not contribute type information - we do not try to find a lub based on // them (rather we update them to the LUB). bool noted() { return lub != Type::unreachable; } // Returns the best possible lub. This ignores updatable nulls for the reasons // mentioned above, since they will not limit us, aside from making the type // nullable if nulls exist. This does not update the nulls. Type getBestPossible() { if (lub == Type::unreachable) { // Perhaps if we have seen nulls we could compute a lub on them, but it's // not clear that is helpful. return lub; } // We have a lub. Make it nullable if we need to. if (!lub.isNullable() && !nulls.empty()) { return Type(lub.getHeapType(), Nullable); } else { return lub; } } // Update the nulls for the best possible LUB, if we found one. void updateNulls() { auto newType = getBestPossible(); if (newType != Type::unreachable) { for (auto* null : nulls) { // Default null values (represented as nullptr here) do not need to be // updated. Aside from that, if this null is already of a more specific // type, also do not update it - it's never worth making a type less // specific. What we care about here is making sure the nulls are all // specific enough given the LUB that is being applied. if (null && !Type::isSubType(null->type, newType)) { null->finalize(newType); } } } } // Combines the information in another LUBFinder into this one, and returns // whether we changed anything. bool combine(const LUBFinder& other) { // Check if the lub was changed. auto old = lub; note(other.lub); bool changed = old != lub; // Check if we added new updatable nulls. for (auto* null : other.nulls) { if (nulls.insert(null).second) { changed = true; } } return changed; } private: // The least upper bound. As we go this always contains the latest value based // on everything we've seen so far, except for nulls. Type lub = Type::unreachable; // Nulls that we can update. A nullptr here indicates an "implicit" null, that // is, a null default value. std::unordered_set nulls; }; namespace LUB { // Given a function, computes a LUB for its results. The caller can then decide // to apply a refined type if we found one. // // This modifies the called function even if it fails to find a refined type as // it does a refinalize in order to be able to compute the new types. We could // roll back that change, but it's not harmful and can help, so we keep it // regardless. LUBFinder getResultsLUB(Function* func, Module& wasm); } // namespace LUB } // namespace wasm #endif // wasm_ir_lubs_h binaryen-version_108/src/ir/manipulation.h000066400000000000000000000051631423707623100210240ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_manipulation_h #define wasm_ir_manipulation_h #include "wasm.h" namespace wasm::ExpressionManipulator { // Re-use a node's memory. This helps avoid allocation when optimizing. template inline OutputType* convert(InputType* input) { static_assert(sizeof(OutputType) <= sizeof(InputType), "Can only convert to a smaller size Expression node"); input->~InputType(); // arena-allocaed, so no destructor, but avoid UB. OutputType* output = (OutputType*)(input); new (output) OutputType; return output; } // Convenience methods for certain instructions, which are common conversions template inline Nop* nop(InputType* target) { auto* ret = convert(target); ret->finalize(); return ret; } template inline RefNull* refNull(InputType* target, Type type) { auto* ret = convert(target); ret->finalize(type); return ret; } template inline Unreachable* unreachable(InputType* target) { auto* ret = convert(target); ret->finalize(); return ret; } // Convert a node that allocates template inline OutputType* convert(InputType* input, MixedArena& allocator) { assert(sizeof(OutputType) <= sizeof(InputType)); input->~InputType(); // arena-allocaed, so no destructor, but avoid UB. OutputType* output = (OutputType*)(input); new (output) OutputType(allocator); return output; } using CustomCopier = std::function; Expression* flexibleCopy(Expression* original, Module& wasm, CustomCopier custom); inline Expression* copy(Expression* original, Module& wasm) { auto copy = [](Expression* curr) { return nullptr; }; return flexibleCopy(original, wasm, copy); } // Splice an item into the middle of a block's list void spliceIntoBlock(Block* block, Index index, Expression* add); } // namespace wasm::ExpressionManipulator #endif // wams_ir_manipulation_h binaryen-version_108/src/ir/match.h000066400000000000000000001012651423707623100174200ustar00rootroot00000000000000/* * Copyright 2020 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // match.h - Provides an easily extensible layered API for matching expression // patterns and extracting their components. The low-level API provides modular // building blocks for creating matchers for any data type and the high-level // API provides a succinct and flexible interface for matching expressions and // extracting useful information from them. #ifndef wasm_ir_match_h #define wasm_ir_match_h #include "ir/abstract.h" #include "wasm.h" namespace wasm::Match { // The available matchers are: // // i32, i64, f32, f64 // // Match constants of the corresponding type. Takes zero or one argument. The // argument can be a specific value to match or it can be a pointer to a // value, Literal, or Const* at which to store the matched entity. // // bval, ival, fval // // Match any boolean, any integer or any floating point constant. Takes // neither, either, or both of two possible arguments: first, a pointer to a // value, Literal, or Const* at which to store the matched entity and second, // a specific value to match. // // constant // // Matches any numeric Const expression. Takes neither, either, or both of // two possible arguments: first, a pointer to either Literal or Const* at // which to store the matched entity and second, a specific value (given as // an int32_t) to match.. // // any // // Matches any Expression. Optionally takes as an argument a pointer to // Expression* at which to store the matched Expression*. // // unary // // Matches Unary expressions. Takes an optional pointer to Unary* at which to // store the matched Unary*, followed by either a UnaryOp or an Abstract::Op // describing which unary expressions to match, followed by a matcher to // apply to the unary expression's operand. // // binary // // Matches Binary expressions. Takes an optional pointer to Binary* at which // to store the matched Binary*, followed by either a BinaryOp or an // Abstract::Op describing which binary expresions to match, followed by // matchers to apply to the binary expression's left and right operands. // // select // // Matches Select expressions. Takes an optional pointer to Select* at which // to store the matched Select*, followed by matchers to apply to the ifTrue, // ifFalse, and condition operands. // // // How to create new matchers: // // Lets add a matcher for an expression type that is declared in wasm.h: // // class Frozzle : public SpecificExpression { // public: // Expression* foo; // Expression* bar; // Expression* baz; // }; // // This expression is very simple; in order to match it, all we need to do is // apply other matchers to its subexpressions. The matcher infrastructure will // handle this automatically once we tell it how to access the subexpressions. // To tell the matcher infrastructure how many subexpressions there are we need // to specialize `NumComponents`. // // template<> struct NumComponents { // static constexpr size_t value = 3; // }; // // And to tell the matcher infrastructure how to access those three // subexpressions, we need to specialize `GetComponent` three times. // // template<> struct GetComponent { // Expression* operator()(Frozzle* curr) { return curr->foo; } // }; // template<> struct GetComponent { // Expression* operator()(Frozzle* curr) { return curr->bar; } // }; // template<> struct GetComponent { // Expression* operator()(Frozzle* curr) { return curr->baz; } // }; // // For simple expressions, that's all we need to do to get a fully functional // matcher that we can construct and use like this, where S1, S2, and S3 are // the types of the submatchers to use and s1, s2, and s3 are instances of // those types: // // Frozzle* extracted; // auto matcher = Matcher(&extracted, {}, s1, s2, s3); // if (matches(expr, matcher)) { // // `extracted` set to `expr` here // } // // It's annoying to have to write out the types S1, S2, and S3 and we don't get // class template argument deduction (CTAD) until C++17, so it's useful to // create a wrapper function so can take advantage of function template // argument deduction. We can also take this opportunity to make the interface // more compact. // // template // inline decltype(auto) frozzle(Frozzle** binder, // S1&& s1, S2&& s2, S3&& s3) { // return Matcher(binder, {}, s1, s2, s3); // } // template // inline decltype(auto) frozzle(S1&& s1, S2&& s2, S3&& s3) { // return Matcher(nullptr, {}, s1, s2, s3); // } // // Notice that we make the interface more compact by providing overloads with // and without the binder. Here is the final matcher usage: // // Frozzle* extracted; // if (matches(expr, frozzle(&extracted, s1, s2, s3))) { // // `extracted` set to `expr` here // } // // Some matchers are more complicated, though, because they need to do // something besides just applying submatchers to the components of an // expression. These matchers require slightly more work. // // // Complex matchers: // // Lets add a matcher that will match calls to functions whose names start with // certain prefixes. Since this is not a normal matcher for Call expressions, // we can't identify it by the Call* type. Instead, we have to create a new // identifier type, called a "Kind" for it. // // struct PrefixCallKind {}; // // Next, since we're not in the common case of using a specific expression // pointer as our kind, we have to tell the matcher infrastructure what type of // thing this matcher matches. Since we want this matcher to be able to match // any given prefix, we also need the matcher to contain the given prefix as // state, and we need to tell the matcher infrastructure what type that state // is as well. To specify these types, we need to specialize // `KindTypeRegistry` for `PrefixCallKind`. // // template<> struct KindTypeRegistry { // using matched_t = Call*; // using data_t = Name; // }; // // Note that because `matched_t` is set to a specific expression pointer, this // matcher will automatically be able to be applied to any `Expression*`, not // just `Call*`. If `matched_t` were not a specific expression pointer, this // matcher would only be able to be applied to types compatible with // `matched_t`. Also note that if a matcher does not need to store any state, // its `data_t` should be set to `unused_t`. // // Now we need to tell the matcher infrastructure what custom logic to apply // for this matcher. We do this by specializing `MatchSelf`. // // template<> struct MatchSelf { // bool operator()(Call* curr, Name prefix) { // return curr->name.startsWith(prefix); // } // }; // // Note that the first parameter to `MatchSelf::operator()` will be that // kind's `matched_t` and the second parameter will be that kind's `data_t`, // which may be `unused_t`. (TODO: detect if `data_t` is `unused_t` and don't // expose it in the Matcher interface if so.) // // After this, everything is the same as in the simple matcher case. This // particular matcher doesn't need to recurse into any subcomponents, so we can // skip straight to creating the wrapper function. // // decltype(auto) prefixCall(Call** binder, Name prefix) { // return Matcher(binder, prefix); // } // // Now we can use the new matcher: // // Call* call; // if (matches(expr, prefixCall(&call, "__foo"))) { // // `call` set to `expr` here // } // // The main entrypoint for matching. If the match succeeds, all variables bound // in the matcher will be set to their corresponding matched values. Otherwise, // the value of the bound variables is unspecified and may have changed. template inline bool matches(Expression* expr, Matcher matcher) { return matcher.matches(expr); } namespace Internal { struct unused_t {}; // Each matcher has a `Kind`, which controls how candidate values are // destructured and inspected. For most matchers, `Kind` is a pointer to the // matched subtype of Expression, but when there are multiple matchers for the // same kind of expression, they are disambiguated by having different `Kind`s. // In this case, or if the matcher matches something besides a pointer to a // subtype of Expression, or if the matcher requires additional state, the // matched type and the type of additional state must be associated with the // `Kind` via a specialization of `KindTypeRegistry`. template struct KindTypeRegistry { // The matched type using matched_t = void; // The type of additional state needed to perform a match. Can be set to // `unused_t` if it's not needed. using data_t = unused_t; }; // Given a `Kind`, produce the type `matched_t` that is matched by that Kind and // the type `candidate_t` that is the type of the parameter of the `matches` // method. These types are only different if `matched_t` is a pointer to a // subtype of Expression, in which case `candidate_t` is Expression*. template struct MatchTypes { using matched_t = typename std::conditional_t< std::is_base_of>::value, Kind, typename KindTypeRegistry::matched_t>; static constexpr bool isExpr = std::is_base_of>::value; using candidate_t = typename std::conditional_t; }; template using matched_t = typename MatchTypes::matched_t; template using candidate_t = typename MatchTypes::candidate_t; template using data_t = typename KindTypeRegistry::data_t; // Defined if the matched type is a specific expression pointer, so can be // `dynCast`ed to from Expression*. template using enable_if_castable_t = typename std::enable_if< std::is_base_of>>::value && !std::is_same>::value, int>::type; // Opposite of above template using enable_if_not_castable_t = typename std::enable_if< !std::is_base_of>>::value || std::is_same>::value, int>::type; // Do a normal dynCast from Expression* to the subtype, storing the result in // `out` and returning `true` iff the cast succeeded. template = 0> inline bool dynCastCandidate(candidate_t candidate, matched_t& out) { out = candidate->template dynCast>>(); return out != nullptr; } // Otherwise we are not matching an Expression, so this is infallible. template = 0> inline bool dynCastCandidate(candidate_t candidate, matched_t& out) { out = candidate; return true; } // Matchers can optionally specialize this to perform custom matching logic // before recursing into submatchers, potentially short-circuiting the match. // Uses a struct because partial specialization of functions is not allowed. template struct MatchSelf { bool operator()(matched_t, data_t) { return true; } }; // Used to statically ensure that each matcher has the correct number of // submatchers. This needs to be specialized for each kind of matcher that has // submatchers. template struct NumComponents { static constexpr size_t value = 0; }; // Every kind of matcher needs to partially specialize this for each of its // components. Each specialization should define // // T operator()(matched_t) // // where T is the component's type. Components will be matched from first to // last. Uses a struct instead of a function because partial specialization of // functions is not allowed. template struct GetComponent; // A type-level linked list to hold an arbitrary number of matchers. template struct SubMatchers {}; template struct SubMatchers { CurrMatcher curr; SubMatchers next; SubMatchers(CurrMatcher curr, NextMatchers... next) : curr(curr), next(next...){}; }; // Iterates through the components of the candidate, applying a submatcher to // each component. Uses a struct instead of a function because partial // specialization of functions is not allowed. template struct Components { static inline bool match(matched_t candidate, SubMatchers& matchers) { return matchers.curr.matches(GetComponent{}(candidate)) && Components::match(candidate, matchers.next); } }; template struct Components { static_assert(pos == NumComponents::value, "Unexpected number of submatchers"); static inline bool match(matched_t, SubMatchers<>) { // Base case when there are no components left; trivially true. return true; } }; template struct Matcher { matched_t* binder; data_t data; SubMatchers submatchers; Matcher(matched_t* binder, data_t data, Matchers... submatchers) : binder(binder), data(data), submatchers(submatchers...) {} inline bool matches(candidate_t candidate) { matched_t casted; if (dynCastCandidate(candidate, casted)) { if (binder != nullptr) { *binder = casted; } return MatchSelf{}(casted, data) && Components::match(casted, submatchers); } return false; } }; // Concrete low-level matcher implementations. Not intended for direct external // use. // Any: matches any value of the expected type template struct AnyKind {}; template struct KindTypeRegistry> { using matched_t = T; using data_t = unused_t; }; template inline decltype(auto) Any(T* binder) { return Matcher>(binder, {}); } // Exact: matches exact values of the expected type template struct ExactKind {}; template struct KindTypeRegistry> { using matched_t = T; using data_t = T; }; template struct MatchSelf> { bool operator()(T self, T expected) { return self == expected; } }; template inline decltype(auto) Exact(T* binder, T data) { return Matcher>(binder, data); } // {Bool,I32,I64,Int,F32,F64,Float,Number}Lit: // match `Literal` of the expected `Type` struct BoolLK { static bool matchType(Literal lit) { return lit.type == Type::i32 && (uint32_t)lit.geti32() <= 1U; } static int32_t getVal(Literal lit) { return lit.geti32(); } }; struct I32LK { static bool matchType(Literal lit) { return lit.type == Type::i32; } static int32_t getVal(Literal lit) { return lit.geti32(); } }; struct I64LK { static bool matchType(Literal lit) { return lit.type == Type::i64; } static int64_t getVal(Literal lit) { return lit.geti64(); } }; struct IntLK { static bool matchType(Literal lit) { return lit.type.isInteger(); } static int64_t getVal(Literal lit) { return lit.getInteger(); } }; struct F32LK { static bool matchType(Literal lit) { return lit.type == Type::f32; } static float getVal(Literal lit) { return lit.getf32(); } }; struct F64LK { static bool matchType(Literal lit) { return lit.type == Type::f64; } static double getVal(Literal lit) { return lit.getf64(); } }; struct FloatLK { static bool matchType(Literal lit) { return lit.type.isFloat(); } static double getVal(Literal lit) { return lit.getFloat(); } }; template struct LitKind {}; template struct KindTypeRegistry> { using matched_t = Literal; using data_t = unused_t; }; template struct MatchSelf> { bool operator()(Literal lit, unused_t) { return T::matchType(lit); } }; template struct NumComponents> { static constexpr size_t value = 1; }; template struct GetComponent, 0> { decltype(auto) operator()(Literal lit) { return T::getVal(lit); } }; template inline decltype(auto) BoolLit(Literal* binder, S&& s) { return Matcher, S>(binder, {}, s); } template inline decltype(auto) I32Lit(Literal* binder, S&& s) { return Matcher, S>(binder, {}, s); } template inline decltype(auto) I64Lit(Literal* binder, S&& s) { return Matcher, S>(binder, {}, s); } template inline decltype(auto) IntLit(Literal* binder, S&& s) { return Matcher, S>(binder, {}, s); } template inline decltype(auto) F32Lit(Literal* binder, S&& s) { return Matcher, S>(binder, {}, s); } template inline decltype(auto) F64Lit(Literal* binder, S&& s) { return Matcher, S>(binder, {}, s); } template inline decltype(auto) FloatLit(Literal* binder, S&& s) { return Matcher, S>(binder, {}, s); } struct NumberLitKind {}; template<> struct KindTypeRegistry { using matched_t = Literal; using data_t = int32_t; }; template<> struct MatchSelf { bool operator()(Literal lit, int32_t expected) { return lit.type.isNumber() && Literal::makeFromInt32(expected, lit.type) == lit; } }; inline decltype(auto) NumberLit(Literal* binder, int32_t expected) { return Matcher(binder, expected); } // Const template<> struct NumComponents { static constexpr size_t value = 1; }; template<> struct GetComponent { Literal operator()(Const* c) { return c->value; } }; template inline decltype(auto) ConstMatcher(Const** binder, S&& s) { return Matcher(binder, {}, s); } // Unary, UnaryOp and AbstractUnaryOp template<> struct NumComponents { static constexpr size_t value = 2; }; template<> struct GetComponent { UnaryOp operator()(Unary* curr) { return curr->op; } }; template<> struct GetComponent { Expression* operator()(Unary* curr) { return curr->value; } }; struct UnaryOpK { using Op = UnaryOp; static UnaryOp getOp(Type, Op op) { return op; } }; struct AbstractUnaryOpK { using Op = Abstract::Op; static UnaryOp getOp(Type type, Abstract::Op op) { return Abstract::getUnary(type, op); } }; template struct UnaryOpKind {}; template struct KindTypeRegistry> { using matched_t = Unary*; using data_t = typename T::Op; }; template struct MatchSelf> { bool operator()(Unary* curr, typename T::Op op) { return curr->op == T::getOp(curr->value->type, op); } }; template struct NumComponents> { static constexpr size_t value = 1; }; template struct GetComponent, 0> { Expression* operator()(Unary* curr) { return curr->value; } }; template inline decltype(auto) UnaryMatcher(Unary** binder, S1&& s1, S2&& s2) { return Matcher(binder, {}, s1, s2); } template inline decltype(auto) UnaryOpMatcher(Unary** binder, UnaryOp op, S&& s) { return Matcher, S>(binder, op, s); } template inline decltype(auto) AbstractUnaryOpMatcher(Unary** binder, Abstract::Op op, S&& s) { return Matcher, S>(binder, op, s); } // Binary, BinaryOp and AbstractBinaryOp template<> struct NumComponents { static constexpr size_t value = 3; }; template<> struct GetComponent { BinaryOp operator()(Binary* curr) { return curr->op; } }; template<> struct GetComponent { Expression* operator()(Binary* curr) { return curr->left; } }; template<> struct GetComponent { Expression* operator()(Binary* curr) { return curr->right; } }; struct BinaryOpK { using Op = BinaryOp; static BinaryOp getOp(Type, Op op) { return op; } }; struct AbstractBinaryOpK { using Op = Abstract::Op; static BinaryOp getOp(Type type, Abstract::Op op) { return Abstract::getBinary(type, op); } }; template struct BinaryOpKind {}; template struct KindTypeRegistry> { using matched_t = Binary*; using data_t = typename T::Op; }; template struct MatchSelf> { bool operator()(Binary* curr, typename T::Op op) { return curr->op == T::getOp(curr->left->type, op); } }; template struct NumComponents> { static constexpr size_t value = 2; }; template struct GetComponent, 0> { Expression* operator()(Binary* curr) { return curr->left; } }; template struct GetComponent, 1> { Expression* operator()(Binary* curr) { return curr->right; } }; template inline decltype(auto) BinaryMatcher(Binary** binder, S1&& s1, S2&& s2, S3&& s3) { return Matcher(binder, {}, s1, s2, s3); } template inline decltype(auto) BinaryOpMatcher(Binary** binder, BinaryOp op, S1&& s1, S2&& s2) { return Matcher, S1, S2>(binder, op, s1, s2); } template inline decltype(auto) AbstractBinaryOpMatcher(Binary** binder, Abstract::Op op, S1&& s1, S2&& s2) { return Matcher, S1, S2>(binder, op, s1, s2); } // Select template<> struct NumComponents { static constexpr size_t value = 3; }; template<> struct GetComponent { Expression* operator()(Select* curr) { return curr->ifTrue; } }; template<> struct GetComponent { Expression* operator()(Select* curr) { return curr->ifFalse; } }; template<> struct GetComponent { Expression* operator()(Select* curr) { return curr->condition; } }; template inline decltype(auto) SelectMatcher(Select** binder, S1&& s1, S2&& s2, S3&& s3) { return Matcher(binder, {}, s1, s2, s3); } } // namespace Internal // Public matching API inline decltype(auto) bval() { return Internal::ConstMatcher( nullptr, Internal::BoolLit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) bval(bool x) { return Internal::ConstMatcher( nullptr, Internal::BoolLit(nullptr, Internal::Exact(nullptr, x))); } inline decltype(auto) bval(bool* binder) { return Internal::ConstMatcher( nullptr, Internal::BoolLit(nullptr, Internal::Any(binder))); } inline decltype(auto) bval(Literal* binder) { return Internal::ConstMatcher( nullptr, Internal::BoolLit(binder, Internal::Any(nullptr))); } inline decltype(auto) bval(Const** binder) { return Internal::ConstMatcher( binder, Internal::BoolLit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) i32() { return Internal::ConstMatcher( nullptr, Internal::I32Lit(nullptr, Internal::Any(nullptr))); } // Use int rather than int32_t to disambiguate literal 0, which otherwise could // be resolved to either the int32_t overload or any of the pointer overloads. inline decltype(auto) i32(int x) { return Internal::ConstMatcher( nullptr, Internal::I32Lit(nullptr, Internal::Exact(nullptr, x))); } inline decltype(auto) i32(int32_t* binder) { return Internal::ConstMatcher( nullptr, Internal::I32Lit(nullptr, Internal::Any(binder))); } inline decltype(auto) i32(Literal* binder) { return Internal::ConstMatcher( nullptr, Internal::I32Lit(binder, Internal::Any(nullptr))); } inline decltype(auto) i32(Const** binder) { return Internal::ConstMatcher( binder, Internal::I32Lit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) i64() { return Internal::ConstMatcher( nullptr, Internal::I64Lit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) i64(int64_t x) { return Internal::ConstMatcher( nullptr, Internal::I64Lit(nullptr, Internal::Exact(nullptr, x))); } // Disambiguate literal 0, which could otherwise be interpreted as a pointer inline decltype(auto) i64(int x) { return i64(int64_t(x)); } inline decltype(auto) i64(int64_t* binder) { return Internal::ConstMatcher( nullptr, Internal::I64Lit(nullptr, Internal::Any(binder))); } inline decltype(auto) i64(Literal* binder) { return Internal::ConstMatcher( nullptr, Internal::I64Lit(binder, Internal::Any(nullptr))); } inline decltype(auto) i64(Const** binder) { return Internal::ConstMatcher( binder, Internal::I64Lit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) f32() { return Internal::ConstMatcher( nullptr, Internal::F32Lit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) f32(float x) { return Internal::ConstMatcher( nullptr, Internal::F32Lit(nullptr, Internal::Exact(nullptr, x))); } // Disambiguate literal 0, which could otherwise be interpreted as a pointer inline decltype(auto) f32(int x) { return f32(float(x)); } inline decltype(auto) f32(float* binder) { return Internal::ConstMatcher( nullptr, Internal::F32Lit(nullptr, Internal::Any(binder))); } inline decltype(auto) f32(Literal* binder) { return Internal::ConstMatcher( nullptr, Internal::F32Lit(binder, Internal::Any(nullptr))); } inline decltype(auto) f32(Const** binder) { return Internal::ConstMatcher( binder, Internal::F32Lit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) f64() { return Internal::ConstMatcher( nullptr, Internal::F64Lit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) f64(double x) { return Internal::ConstMatcher( nullptr, Internal::F64Lit(nullptr, Internal::Exact(nullptr, x))); } // Disambiguate literal 0, which could otherwise be interpreted as a pointer inline decltype(auto) f64(int x) { return f64(double(x)); } inline decltype(auto) f64(double* binder) { return Internal::ConstMatcher( nullptr, Internal::F64Lit(nullptr, Internal::Any(binder))); } inline decltype(auto) f64(Literal* binder) { return Internal::ConstMatcher( nullptr, Internal::F64Lit(binder, Internal::Any(nullptr))); } inline decltype(auto) f64(Const** binder) { return Internal::ConstMatcher( binder, Internal::F64Lit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) ival() { return Internal::ConstMatcher( nullptr, Internal::IntLit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) ival(int64_t x) { return Internal::ConstMatcher( nullptr, Internal::IntLit(nullptr, Internal::Exact(nullptr, x))); } // Disambiguate literal 0, which could otherwise be interpreted as a pointer inline decltype(auto) ival(int x) { return ival(int64_t(x)); } inline decltype(auto) ival(int64_t* binder) { return Internal::ConstMatcher( nullptr, Internal::IntLit(nullptr, Internal::Any(binder))); } inline decltype(auto) ival(Literal* binder) { return Internal::ConstMatcher( nullptr, Internal::IntLit(binder, Internal::Any(nullptr))); } inline decltype(auto) ival(Const** binder) { return Internal::ConstMatcher( binder, Internal::IntLit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) ival(Literal* binder, int64_t x) { return Internal::ConstMatcher( nullptr, Internal::IntLit(binder, Internal::Exact(nullptr, x))); } inline decltype(auto) ival(Const** binder, int64_t x) { return Internal::ConstMatcher( binder, Internal::IntLit(nullptr, Internal::Exact(nullptr, x))); } inline decltype(auto) fval() { return Internal::ConstMatcher( nullptr, Internal::FloatLit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) fval(double x) { return Internal::ConstMatcher( nullptr, Internal::FloatLit(nullptr, Internal::Exact(nullptr, x))); } // Disambiguate literal 0, which could otherwise be interpreted as a pointer inline decltype(auto) fval(int x) { return fval(double(x)); } inline decltype(auto) fval(double* binder) { return Internal::ConstMatcher( nullptr, Internal::FloatLit(nullptr, Internal::Any(binder))); } inline decltype(auto) fval(Literal* binder) { return Internal::ConstMatcher( nullptr, Internal::FloatLit(binder, Internal::Any(nullptr))); } inline decltype(auto) fval(Const** binder) { return Internal::ConstMatcher( binder, Internal::FloatLit(nullptr, Internal::Any(nullptr))); } inline decltype(auto) fval(Literal* binder, double x) { return Internal::ConstMatcher( nullptr, Internal::FloatLit(binder, Internal::Exact(nullptr, x))); } inline decltype(auto) fval(Const** binder, double x) { return Internal::ConstMatcher( binder, Internal::FloatLit(nullptr, Internal::Exact(nullptr, x))); } inline decltype(auto) constant() { return Internal::ConstMatcher(nullptr, Internal::Any(nullptr)); } inline decltype(auto) constant(int x) { return Internal::ConstMatcher(nullptr, Internal::NumberLit(nullptr, x)); } inline decltype(auto) constant(Literal* binder) { return Internal::ConstMatcher(nullptr, Internal::Any(binder)); } inline decltype(auto) constant(Const** binder) { return Internal::ConstMatcher(binder, Internal::Any(nullptr)); } inline decltype(auto) constant(Literal* binder, int32_t x) { return Internal::ConstMatcher(nullptr, Internal::NumberLit(binder, x)); } inline decltype(auto) constant(Const** binder, int32_t x) { return Internal::ConstMatcher(binder, Internal::NumberLit(nullptr, x)); } inline decltype(auto) any() { return Internal::Any(nullptr); } inline decltype(auto) any(Expression** binder) { return Internal::Any(binder); } template inline decltype(auto) unary(S&& s) { return Internal::UnaryMatcher(nullptr, Internal::Any(nullptr), s); } template inline decltype(auto) unary(Unary** binder, S&& s) { return Internal::UnaryMatcher(binder, Internal::Any(nullptr), s); } template inline decltype(auto) unary(UnaryOp* binder, S&& s) { return Internal::UnaryMatcher(nullptr, Internal::Any(binder), s); } template inline decltype(auto) unary(UnaryOp op, S&& s) { return Internal::UnaryOpMatcher(nullptr, op, s); } template inline decltype(auto) unary(Abstract::Op op, S&& s) { return Internal::AbstractUnaryOpMatcher(nullptr, op, s); } template inline decltype(auto) unary(Unary** binder, UnaryOp op, S&& s) { return Internal::UnaryOpMatcher(binder, op, s); } template inline decltype(auto) unary(Unary** binder, Abstract::Op op, S&& s) { return Internal::AbstractUnaryOpMatcher(binder, op, s); } template inline decltype(auto) binary(S1&& s1, S2&& s2) { return Internal::BinaryMatcher( nullptr, Internal::Any(nullptr), s1, s2); } template inline decltype(auto) binary(Binary** binder, S1&& s1, S2&& s2) { return Internal::BinaryMatcher( binder, Internal::Any(nullptr), s1, s2); } template inline decltype(auto) binary(BinaryOp* binder, S1&& s1, S2&& s2) { return Internal::BinaryMatcher( nullptr, Internal::Any(binder), s1, s2); } template inline decltype(auto) binary(BinaryOp op, S1&& s1, S2&& s2) { return Internal::BinaryOpMatcher(nullptr, op, s1, s2); } template inline decltype(auto) binary(Abstract::Op op, S1&& s1, S2&& s2) { return Internal::AbstractBinaryOpMatcher(nullptr, op, s1, s2); } template inline decltype(auto) binary(Binary** binder, BinaryOp op, S1&& s1, S2&& s2) { return Internal::BinaryOpMatcher(binder, op, s1, s2); } template inline decltype(auto) binary(Binary** binder, Abstract::Op op, S1&& s1, S2&& s2) { return Internal::AbstractBinaryOpMatcher(binder, op, s1, s2); } template inline decltype(auto) select(S1&& s1, S2&& s2, S3&& s3) { return Internal::SelectMatcher(nullptr, s1, s2, s3); } template inline decltype(auto) select(Select** binder, S1&& s1, S2&& s2, S3&& s3) { return Internal::SelectMatcher(binder, s1, s2, s3); } } // namespace wasm::Match #endif // wasm_ir_match_h binaryen-version_108/src/ir/memory-utils.cpp000066400000000000000000000041001423707623100213130ustar00rootroot00000000000000/* * Copyright 2022 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/memory-utils.h" #include "wasm.h" namespace wasm::MemoryUtils { bool flatten(Module& wasm) { // The presence of any MemoryInit instructions is a problem because they care // about segment identity, which flattening gets rid of ( when it merges them // all into one big segment). ModuleUtils::ParallelFunctionAnalysis analysis( wasm, [&](Function* func, bool& hasMemoryInit) { if (func->imported()) { return; } hasMemoryInit = FindAll(func->body).list.size() > 0; }); for (auto& [func, hasMemoryInit] : analysis.map) { if (hasMemoryInit) { return false; } } auto& memory = wasm.memory; if (memory.segments.size() == 0) { return true; } std::vector data; for (auto& segment : memory.segments) { if (segment.isPassive) { return false; } auto* offset = segment.offset->dynCast(); if (!offset) { return false; } } for (auto& segment : memory.segments) { auto* offset = segment.offset->dynCast(); Index start = offset->value.getInteger(); Index end = start + segment.data.size(); if (end > data.size()) { data.resize(end); } std::copy(segment.data.begin(), segment.data.end(), data.begin() + start); } memory.segments.resize(1); memory.segments[0].offset->cast()->value = Literal(int32_t(0)); memory.segments[0].data.swap(data); return true; } } // namespace wasm::MemoryUtils binaryen-version_108/src/ir/memory-utils.h000066400000000000000000000115651423707623100207750ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_memory_h #define wasm_ir_memory_h #include #include #include "literal.h" #include "wasm-binary.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm::MemoryUtils { // Flattens memory into a single data segment, or no segment. If there is // a segment, it starts at 0. // Returns true if successful (e.g. relocatable segments cannot be flattened). bool flatten(Module& wasm); // Ensures that the memory exists (of minimal size). inline void ensureExists(Memory& memory) { if (!memory.exists) { memory.exists = true; memory.initial = memory.max = 1; } } // Try to merge segments until they fit into web limitations. // Return true if successful. inline bool ensureLimitedSegments(Module& module) { Memory& memory = module.memory; if (memory.segments.size() <= WebLimitations::MaxDataSegments) { return true; } // Conservatively refuse to change segments if there might be memory.init // and data.drop instructions. if (module.features.hasBulkMemory()) { return false; } auto isEmpty = [](Memory::Segment& segment) { return segment.data.size() == 0; }; auto isConstantOffset = [](Memory::Segment& segment) { return segment.offset && segment.offset->is(); }; Index numConstant = 0, numDynamic = 0; bool hasPassiveSegments = false; for (auto& segment : memory.segments) { if (!isEmpty(segment)) { if (isConstantOffset(segment)) { numConstant++; } else { numDynamic++; } } hasPassiveSegments |= segment.isPassive; } if (hasPassiveSegments) { return false; } // check if we have too many dynamic data segments, which we can do nothing // about if (numDynamic + 1 >= WebLimitations::MaxDataSegments) { return false; } // we'll merge constant segments if we must if (numConstant + numDynamic >= WebLimitations::MaxDataSegments) { numConstant = WebLimitations::MaxDataSegments - numDynamic - 1; auto num = numConstant + numDynamic; WASM_UNUSED(num); assert(num == WebLimitations::MaxDataSegments - 1); } std::vector mergedSegments; mergedSegments.reserve(WebLimitations::MaxDataSegments); // drop empty segments and pass through dynamic-offset segments for (auto& segment : memory.segments) { if (isEmpty(segment)) { continue; } if (isConstantOffset(segment)) { continue; } mergedSegments.push_back(segment); } // from here on, we concern ourselves with non-empty constant-offset // segments, the ones which we may need to merge auto isRelevant = [&](Memory::Segment& segment) { return !isEmpty(segment) && isConstantOffset(segment); }; for (Index i = 0; i < memory.segments.size(); i++) { auto& segment = memory.segments[i]; if (!isRelevant(segment)) { continue; } if (mergedSegments.size() + 2 < WebLimitations::MaxDataSegments) { mergedSegments.push_back(segment); continue; } // we can emit only one more segment! merge everything into one // start the combined segment at the bottom of them all auto start = segment.offset->cast()->value.getInteger(); for (Index j = i + 1; j < memory.segments.size(); j++) { auto& segment = memory.segments[j]; if (!isRelevant(segment)) { continue; } auto offset = segment.offset->cast()->value.getInteger(); start = std::min(start, offset); } // create the segment and add in all the data auto* c = module.allocator.alloc(); c->value = Literal(int32_t(start)); c->type = Type::i32; Memory::Segment combined(c); for (Index j = i; j < memory.segments.size(); j++) { auto& segment = memory.segments[j]; if (!isRelevant(segment)) { continue; } auto offset = segment.offset->cast()->value.getInteger(); auto needed = offset + segment.data.size() - start; if (combined.data.size() < needed) { combined.data.resize(needed); } std::copy(segment.data.begin(), segment.data.end(), combined.data.begin() + (offset - start)); } mergedSegments.push_back(combined); break; } memory.segments.swap(mergedSegments); return true; } } // namespace wasm::MemoryUtils #endif // wasm_ir_memory_h binaryen-version_108/src/ir/module-splitting.cpp000066400000000000000000000617171423707623100221660ustar00rootroot00000000000000/* * Copyright 2020 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // The process of module splitting involves these steps: // // 1. Create the new secondary module. // // 2. Export globals, tags, tables, and memories from the primary module and // import them in the secondary module. // // 3. Move the deferred functions from the primary to the secondary module. // // 4. For any secondary function exported from the primary module, export in // its place a trampoline function that makes an indirect call to its // placeholder function (and eventually to the original secondary // function), allocating a new table slot for the placeholder if necessary. // // 5. Rewrite direct calls from primary functions to secondary functions to be // indirect calls to their placeholder functions (and eventually to their // original secondary functions), allocating new table slots for the // placeholders if necessary. // // 6. For each primary function directly called from a secondary function, // export the primary function if it is not already exported and import it // into the secondary module. // // 7. Replace all references to secondary functions in the primary module's // table segments with references to imported placeholder functions. // // 8. Create new active table segments in the secondary module that will // replace all the placeholder function references in the table with // references to their corresponding secondary functions upon // instantiation. // // Functions can be used or referenced three ways in a WebAssembly module: they // can be exported, called, or placed in a table. The above procedure introduces // a layer of indirection to each of those mechanisms that removes all // references to secondary functions from the primary module but restores the // original program's semantics once the secondary module is instantiated. As // more mechanisms that reference functions are added in the future, such as // ref.func instructions, they will have to be modified to use a similar layer // of indirection. // // The code as currently written makes a couple assumptions about the module // that is being split: // // 1. It assumes that mutable-globals is allowed. This could be worked around // by introducing wrapper functions for globals and rewriting secondary // code that accesses them, but now that mutable-globals is shipped on all // browsers, hopefully that extra complexity won't be necessary. // // 2. It assumes that either all table segment offsets are constants or there // is exactly one segment that may have a non-constant offset. It also // assumes that all segments are active segments (although Binaryen does // not yet support passive table segments anyway). #include "ir/module-splitting.h" #include "ir/element-utils.h" #include "ir/manipulation.h" #include "ir/module-utils.h" #include "ir/names.h" #include "pass.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm::ModuleSplitting { namespace { template void forEachElement(Module& module, F f) { ModuleUtils::iterActiveElementSegments(module, [&](ElementSegment* segment) { Name base = ""; Index offset = 0; if (auto* c = segment->offset->dynCast()) { offset = c->value.geti32(); } else if (auto* g = segment->offset->dynCast()) { base = g->name; } ElementUtils::iterElementSegmentFunctionNames( segment, [&](Name& entry, Index i) { f(segment->table, base, offset + i, entry); }); }); } struct TableSlotManager { struct Slot { Name tableName; // If `global` is empty, then this slot is at a statically known index. Name global; Index index = 0; // Generate code to compute the index of this table slot Expression* makeExpr(Module& module); }; Module& module; Table* activeTable = nullptr; ElementSegment* activeSegment = nullptr; Slot activeBase; std::map funcIndices; std::vector activeTableSegments; TableSlotManager(Module& module); Table* makeTable(); ElementSegment* makeElementSegment(); // Returns the table index for `func`, allocating a new index if necessary. Slot getSlot(Name func, HeapType type); void addSlot(Name func, Slot slot); }; Expression* TableSlotManager::Slot::makeExpr(Module& module) { Builder builder(module); auto makeIndex = [&]() { return builder.makeConst(int32_t(index)); }; if (global.size()) { Expression* getBase = builder.makeGlobalGet(global, Type::i32); return index == 0 ? getBase : builder.makeBinary(AddInt32, getBase, makeIndex()); } else { return makeIndex(); } } void TableSlotManager::addSlot(Name func, Slot slot) { // Ignore functions that already have slots. funcIndices.insert({func, slot}); } TableSlotManager::TableSlotManager(Module& module) : module(module) { // TODO: Reject or handle passive element segments auto it = std::find_if(module.tables.begin(), module.tables.end(), [&](std::unique_ptr& table) { return table->type == Type::funcref; }); if (it == module.tables.end()) { return; } activeTable = it->get(); ModuleUtils::iterTableSegments( module, activeTable->name, [&](ElementSegment* segment) { activeTableSegments.push_back(segment); }); // If there is exactly one table segment and that segment has a non-constant // offset, append new items to the end of that segment. In all other cases, // append new items at constant offsets after all existing items at constant // offsets. if (activeTableSegments.size() == 1 && activeTableSegments[0]->type == Type::funcref && !activeTableSegments[0]->offset->is()) { assert(activeTableSegments[0]->offset->is() && "Unexpected initializer instruction"); activeSegment = activeTableSegments[0]; activeBase = {activeTable->name, activeTableSegments[0]->offset->cast()->name, 0}; } else { // Finds the segment with the highest occupied table slot so that new items // can be inserted contiguously at the end of it without accidentally // overwriting any other items. TODO: be more clever about filling gaps in // the table, if that is ever useful. Index maxIndex = 0; for (auto& segment : activeTableSegments) { assert(segment->offset->is() && "Unexpected non-const segment offset with multiple segments"); Index segmentBase = segment->offset->cast()->value.geti32(); if (segmentBase + segment->data.size() >= maxIndex) { maxIndex = segmentBase + segment->data.size(); activeSegment = segment; activeBase = {activeTable->name, "", segmentBase}; } } } // Initialize funcIndices with the functions already in the table. forEachElement(module, [&](Name table, Name base, Index offset, Name func) { addSlot(func, {table, base, offset}); }); } Table* TableSlotManager::makeTable() { return module.addTable( Builder::makeTable(Names::getValidTableName(module, Name::fromInt(0)))); } ElementSegment* TableSlotManager::makeElementSegment() { return module.addElementSegment(Builder::makeElementSegment( Names::getValidElementSegmentName(module, Name::fromInt(0)), activeTable->name, Builder(module).makeConst(int32_t(0)))); } TableSlotManager::Slot TableSlotManager::getSlot(Name func, HeapType type) { auto slotIt = funcIndices.find(func); if (slotIt != funcIndices.end()) { return slotIt->second; } // If there are no segments yet, allocate one. if (activeSegment == nullptr) { if (activeTable == nullptr) { activeTable = makeTable(); activeBase = {activeTable->name, "", 0}; } // None of the existing segments should refer to the active table assert(std::all_of(module.elementSegments.begin(), module.elementSegments.end(), [&](std::unique_ptr& segment) { return segment->table != activeTable->name; })); activeSegment = makeElementSegment(); } Slot newSlot = {activeBase.tableName, activeBase.global, activeBase.index + Index(activeSegment->data.size())}; Builder builder(module); activeSegment->data.push_back(builder.makeRefFunc(func, type)); addSlot(func, newSlot); if (activeTable->initial <= newSlot.index) { activeTable->initial = newSlot.index + 1; // TODO: handle the active table not being the dylink table (#3823) if (module.dylinkSection) { module.dylinkSection->tableSize = activeTable->initial; } } if (activeTable->max <= newSlot.index) { activeTable->max = newSlot.index + 1; } return newSlot; } struct ModuleSplitter { const Config& config; std::unique_ptr secondaryPtr; Module& primary; Module& secondary; const std::pair, std::set> classifiedFuncs; const std::set& primaryFuncs; const std::set& secondaryFuncs; TableSlotManager tableManager; Names::MinifiedNameGenerator minified; // Map from internal function names to (one of) their corresponding export // names. std::map exportedPrimaryFuncs; // Map placeholder indices to the names of the functions they replace. std::map placeholderMap; // Initialization helpers static std::unique_ptr initSecondary(const Module& primary); static std::pair, std::set> classifyFunctions(const Module& primary, const Config& config); static std::map initExportedPrimaryFuncs(const Module& primary); // Other helpers void exportImportFunction(Name func); // Main splitting steps void moveSecondaryFunctions(); void thunkExportedSecondaryFunctions(); void indirectCallsToSecondaryFunctions(); void exportImportCalledPrimaryFunctions(); void setupTablePatching(); void shareImportableItems(); ModuleSplitter(Module& primary, const Config& config) : config(config), secondaryPtr(initSecondary(primary)), primary(primary), secondary(*secondaryPtr), classifiedFuncs(classifyFunctions(primary, config)), primaryFuncs(classifiedFuncs.first), secondaryFuncs(classifiedFuncs.second), tableManager(primary), exportedPrimaryFuncs(initExportedPrimaryFuncs(primary)) { moveSecondaryFunctions(); thunkExportedSecondaryFunctions(); indirectCallsToSecondaryFunctions(); exportImportCalledPrimaryFunctions(); setupTablePatching(); shareImportableItems(); } }; std::unique_ptr ModuleSplitter::initSecondary(const Module& primary) { // Create the secondary module and copy trivial properties. auto secondary = std::make_unique(); secondary->features = primary.features; secondary->hasFeaturesSection = primary.hasFeaturesSection; return secondary; } std::pair, std::set> ModuleSplitter::classifyFunctions(const Module& primary, const Config& config) { std::set primaryFuncs, secondaryFuncs; for (auto& func : primary.functions) { if (func->imported() || config.primaryFuncs.count(func->name)) { primaryFuncs.insert(func->name); } else { assert(func->name != primary.start && "The start function must be kept"); secondaryFuncs.insert(func->name); } } return std::make_pair(primaryFuncs, secondaryFuncs); } std::map ModuleSplitter::initExportedPrimaryFuncs(const Module& primary) { std::map functionExportNames; for (auto& ex : primary.exports) { if (ex->kind == ExternalKind::Function) { functionExportNames[ex->value] = ex->name; } } return functionExportNames; } void ModuleSplitter::exportImportFunction(Name funcName) { Name exportName; // If the function is already exported, use the existing export name. // Otherwise, create a new export for it. auto exportIt = exportedPrimaryFuncs.find(funcName); if (exportIt != exportedPrimaryFuncs.end()) { exportName = exportIt->second; } else { if (config.minimizeNewExportNames) { do { exportName = config.newExportPrefix + minified.getName(); } while (primary.getExportOrNull(exportName) != nullptr); } else { exportName = Names::getValidExportName( primary, config.newExportPrefix + funcName.c_str()); } primary.addExport( Builder::makeExport(exportName, funcName, ExternalKind::Function)); exportedPrimaryFuncs[funcName] = exportName; } // Import the function if it is not already imported into the secondary // module. if (secondary.getFunctionOrNull(funcName) == nullptr) { auto func = Builder::makeFunction(funcName, primary.getFunction(funcName)->type, {}); func->module = config.importNamespace; func->base = exportName; secondary.addFunction(std::move(func)); } } void ModuleSplitter::moveSecondaryFunctions() { // Move the specified functions from the primary to the secondary module. for (auto funcName : secondaryFuncs) { auto* func = primary.getFunction(funcName); ModuleUtils::copyFunction(func, secondary); primary.removeFunction(funcName); } } void ModuleSplitter::thunkExportedSecondaryFunctions() { // Update exports of secondary functions in the primary module to export // wrapper functions that indirectly call the secondary functions. We are // adding secondary function names to the primary table here, but they will be // replaced with placeholder functions later along with any references to // secondary functions that were already in the table. Builder builder(primary); for (auto& ex : primary.exports) { if (ex->kind != ExternalKind::Function || !secondaryFuncs.count(ex->value)) { continue; } Name secondaryFunc = ex->value; if (primary.getFunctionOrNull(secondaryFunc)) { // We've already created a thunk for this function continue; } auto* func = primary.addFunction(Builder::makeFunction( secondaryFunc, secondary.getFunction(secondaryFunc)->type, {})); std::vector args; Type params = func->getParams(); for (size_t i = 0, size = params.size(); i < size; ++i) { args.push_back(builder.makeLocalGet(i, params[i])); } auto tableSlot = tableManager.getSlot(secondaryFunc, func->type); func->body = builder.makeCallIndirect( tableSlot.tableName, tableSlot.makeExpr(primary), args, func->type); } } void ModuleSplitter::indirectCallsToSecondaryFunctions() { // Update direct calls of secondary functions to be indirect calls of their // corresponding table indices instead. struct CallIndirector : public WalkerPass> { ModuleSplitter& parent; Builder builder; CallIndirector(ModuleSplitter& parent) : parent(parent), builder(parent.primary) {} // Avoid visitRefFunc on element segment data void walkElementSegment(ElementSegment* segment) {} void visitCall(Call* curr) { if (!parent.secondaryFuncs.count(curr->target)) { return; } auto* func = parent.secondary.getFunction(curr->target); auto tableSlot = parent.tableManager.getSlot(curr->target, func->type); replaceCurrent( builder.makeCallIndirect(tableSlot.tableName, tableSlot.makeExpr(parent.primary), curr->operands, func->type, curr->isReturn)); } void visitRefFunc(RefFunc* curr) { assert(false && "TODO: handle ref.func as well"); } }; PassRunner runner(&primary); CallIndirector(*this).run(&runner, &primary); } void ModuleSplitter::exportImportCalledPrimaryFunctions() { // Find primary functions called in the secondary module. ModuleUtils::ParallelFunctionAnalysis> callCollector( secondary, [&](Function* func, std::vector& calledPrimaryFuncs) { struct CallCollector : PostWalker { const std::set& primaryFuncs; std::vector& calledPrimaryFuncs; CallCollector(const std::set& primaryFuncs, std::vector& calledPrimaryFuncs) : primaryFuncs(primaryFuncs), calledPrimaryFuncs(calledPrimaryFuncs) { } void visitCall(Call* curr) { if (primaryFuncs.count(curr->target)) { calledPrimaryFuncs.push_back(curr->target); } } void visitRefFunc(RefFunc* curr) { assert(false && "TODO: handle ref.func as well"); } }; CallCollector(primaryFuncs, calledPrimaryFuncs).walkFunction(func); }); std::set calledPrimaryFuncs; for (auto& entry : callCollector.map) { auto& calledFuncs = entry.second; calledPrimaryFuncs.insert(calledFuncs.begin(), calledFuncs.end()); } // Ensure each called primary function is exported and imported for (auto func : calledPrimaryFuncs) { exportImportFunction(func); } } void ModuleSplitter::setupTablePatching() { if (!tableManager.activeTable) { return; } std::map replacedElems; // Replace table references to secondary functions with an imported // placeholder that encodes the table index in its name: // `importNamespace`.`index`. forEachElement(primary, [&](Name, Name, Index index, Name& elem) { if (secondaryFuncs.count(elem)) { placeholderMap[index] = elem; auto* secondaryFunc = secondary.getFunction(elem); replacedElems[index] = secondaryFunc; auto placeholder = std::make_unique(); placeholder->module = config.placeholderNamespace; placeholder->base = std::to_string(index); placeholder->name = Names::getValidFunctionName( primary, std::string("placeholder_") + std::string(placeholder->base.c_str())); placeholder->hasExplicitName = false; placeholder->type = secondaryFunc->type; elem = placeholder->name; primary.addFunction(std::move(placeholder)); } }); if (replacedElems.size() == 0) { // No placeholders to patch out of the table return; } auto secondaryTable = ModuleUtils::copyTable(tableManager.activeTable, secondary); if (tableManager.activeBase.global.size()) { assert(tableManager.activeTableSegments.size() == 1 && "Unexpected number of segments with non-const base"); assert(secondary.tables.size() == 1 && secondary.elementSegments.empty()); // Since addition is not currently allowed in initializer expressions, we // need to start the new secondary segment where the primary segment starts. // The secondary segment will contain the same primary functions as the // primary module except in positions where it needs to overwrite a // placeholder function. All primary functions in the table therefore need // to be imported into the second module. TODO: use better strategies here, // such as using ref.func in the start function or standardizing addition in // initializer expressions. ElementSegment* primarySeg = tableManager.activeTableSegments.front(); std::vector secondaryElems; secondaryElems.reserve(primarySeg->data.size()); // Copy functions from the primary segment to the secondary segment, // replacing placeholders and creating new exports and imports as necessary. auto replacement = replacedElems.begin(); for (Index i = 0; i < primarySeg->data.size() && replacement != replacedElems.end(); ++i) { if (replacement->first == i) { // primarySeg->data[i] is a placeholder, so use the secondary function. auto* func = replacement->second; auto* ref = Builder(secondary).makeRefFunc(func->name, func->type); secondaryElems.push_back(ref); ++replacement; } else if (auto* get = primarySeg->data[i]->dynCast()) { exportImportFunction(get->func); auto* copied = ExpressionManipulator::copy(primarySeg->data[i], secondary); secondaryElems.push_back(copied); } } auto offset = ExpressionManipulator::copy(primarySeg->offset, secondary); auto secondarySeg = std::make_unique( secondaryTable->name, offset, secondaryTable->type, secondaryElems); secondarySeg->setName(primarySeg->name, primarySeg->hasExplicitName); secondary.addElementSegment(std::move(secondarySeg)); return; } // Create active table segments in the secondary module to patch in the // original functions when it is instantiated. Index currBase = replacedElems.begin()->first; std::vector currData; auto finishSegment = [&]() { auto* offset = Builder(secondary).makeConst(int32_t(currBase)); auto secondarySeg = std::make_unique( secondaryTable->name, offset, secondaryTable->type, currData); Name name = Names::getValidElementSegmentName( secondary, Name::fromInt(secondary.elementSegments.size())); secondarySeg->setName(name, false); secondary.addElementSegment(std::move(secondarySeg)); }; for (auto curr = replacedElems.begin(); curr != replacedElems.end(); ++curr) { if (curr->first != currBase + currData.size()) { finishSegment(); currBase = curr->first; currData.clear(); } auto* func = curr->second; currData.push_back(Builder(secondary).makeRefFunc(func->name, func->type)); } if (currData.size()) { finishSegment(); } } void ModuleSplitter::shareImportableItems() { // Map internal names to (one of) their corresponding export names. Don't // consider functions because they have already been imported and exported as // necessary. std::unordered_map, Name> exports; for (auto& ex : primary.exports) { if (ex->kind != ExternalKind::Function) { exports[std::make_pair(ex->kind, ex->value)] = ex->name; } } auto makeImportExport = [&](Importable& primaryItem, Importable& secondaryItem, const std::string& genericExportName, ExternalKind kind) { secondaryItem.name = primaryItem.name; secondaryItem.hasExplicitName = primaryItem.hasExplicitName; secondaryItem.module = config.importNamespace; auto exportIt = exports.find(std::make_pair(kind, primaryItem.name)); if (exportIt != exports.end()) { secondaryItem.base = exportIt->second; } else { Name exportName = Names::getValidExportName( primary, config.newExportPrefix + genericExportName); primary.addExport(new Export{exportName, primaryItem.name, kind}); secondaryItem.base = exportName; } }; // TODO: Be more selective by only sharing global items that are actually used // in the secondary module, just like we do for functions. if (primary.memory.exists) { secondary.memory.exists = true; secondary.memory.initial = primary.memory.initial; secondary.memory.max = primary.memory.max; secondary.memory.shared = primary.memory.shared; secondary.memory.indexType = primary.memory.indexType; makeImportExport( primary.memory, secondary.memory, "memory", ExternalKind::Memory); } for (auto& table : primary.tables) { auto secondaryTable = secondary.getTableOrNull(table->name); if (!secondaryTable) { secondaryTable = ModuleUtils::copyTable(table.get(), secondary); } makeImportExport(*table, *secondaryTable, "table", ExternalKind::Table); } for (auto& global : primary.globals) { if (global->mutable_) { assert(primary.features.hasMutableGlobals() && "TODO: add wrapper functions for disallowed mutable globals"); } auto secondaryGlobal = std::make_unique(); secondaryGlobal->type = global->type; secondaryGlobal->mutable_ = global->mutable_; secondaryGlobal->init = global->init == nullptr ? nullptr : ExpressionManipulator::copy(global->init, secondary); makeImportExport(*global, *secondaryGlobal, "global", ExternalKind::Global); secondary.addGlobal(std::move(secondaryGlobal)); } for (auto& tag : primary.tags) { auto secondaryTag = std::make_unique(); secondaryTag->sig = tag->sig; makeImportExport(*tag, *secondaryTag, "tag", ExternalKind::Tag); secondary.addTag(std::move(secondaryTag)); } } } // anonymous namespace Results splitFunctions(Module& primary, const Config& config) { ModuleSplitter split(primary, config); return {std::move(split.secondaryPtr), std::move(split.placeholderMap)}; } } // namespace wasm::ModuleSplitting binaryen-version_108/src/ir/module-splitting.h000066400000000000000000000065451423707623100216310ustar00rootroot00000000000000/* * Copyright 2020 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // module-splitting.h: Provides an interface for decomposing WebAssembly modules // into multiple modules that can be loaded independently. This works by moving // functions to a new secondary module and rewriting the primary module to call // them indirectly. Until the secondary module is instantiated, those indirect // calls will go to placeholder functions newly imported into the primary // module. If the primary module has a single segment with a non-constant // offset, the placeholder function import names are the offsets from that base // global of the corresponding functions in the table. Otherwise, the // placeholder import names are the absolute table indices of the corresponding // functions. The secondary module imports all of its dependencies from the // primary module. // // This code currently makes a couple assumptions about the modules that will be // split and will fail assertions if those assumptions are not true. // // 1) It assumes that mutable-globals are allowed. // // 2) It assumes that either all segment offsets are constants or there is // exactly one segment that may have a non-constant offset. // // These requirements will be relaxed as necessary in the future, but for now // this code should be considered experimental and used with care. #ifndef wasm_ir_module_splitting_h #define wasm_ir_module_splitting_h #include "wasm.h" namespace wasm::ModuleSplitting { struct Config { // The set of functions to keep in the primary module. All others are split // out into the new secondary module. Must include the start function if it // exists. May or may not include imported functions, which are always kept in // the primary module regardless. std::set primaryFuncs; // The namespace from which to import primary functions into the secondary // module. Name importNamespace = "primary"; // The namespace from which to import placeholder functions into the primary // module. Name placeholderNamespace = "placeholder"; // The prefix to attach to the name of any newly created exports. This can be // used to differentiate between "real" exports of the module and exports that // should only be consumed by the secondary module. std::string newExportPrefix = ""; // Whether the export names of newly created exports should be minimized. If // false, the original function names will be used (after `newExportPrefix`) // as the new export names. bool minimizeNewExportNames = false; }; struct Results { std::unique_ptr secondary; std::map placeholderMap; }; // Returns the new secondary module and modifies the `primary` module in place. Results splitFunctions(Module& primary, const Config& config); } // namespace wasm::ModuleSplitting #endif // wasm_ir_module_splitting_h binaryen-version_108/src/ir/module-utils.cpp000066400000000000000000000250711423707623100213020ustar00rootroot00000000000000/* * Copyright 2022 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "module-utils.h" #include "support/insert_ordered.h" #include "support/topological_sort.h" namespace wasm::ModuleUtils { namespace { // Helper for collecting HeapTypes and their frequencies. struct Counts : public InsertOrderedMap { void note(HeapType type) { if (!type.isBasic()) { (*this)[type]++; } } void note(Type type) { for (HeapType ht : type.getHeapTypeChildren()) { note(ht); } } // Ensure a type is included without increasing its count. void include(HeapType type) { if (!type.isBasic()) { (*this)[type]; } } }; struct CodeScanner : PostWalker> { Counts& counts; CodeScanner(Module& wasm, Counts& counts) : counts(counts) { setModule(&wasm); } void visitExpression(Expression* curr) { if (auto* call = curr->dynCast()) { counts.note(call->heapType); } else if (curr->is()) { counts.note(curr->type); } else if (curr->is() || curr->is()) { counts.note(curr->type.getRtt().heapType); } else if (auto* make = curr->dynCast()) { handleMake(make); } else if (auto* make = curr->dynCast()) { handleMake(make); } else if (auto* make = curr->dynCast()) { handleMake(make); } else if (auto* cast = curr->dynCast()) { handleCast(cast); } else if (auto* cast = curr->dynCast()) { handleCast(cast); } else if (auto* cast = curr->dynCast()) { if (cast->op == BrOnCast || cast->op == BrOnCastFail) { handleCast(cast); } } else if (auto* get = curr->dynCast()) { counts.note(get->ref->type); } else if (auto* set = curr->dynCast()) { counts.note(set->ref->type); } else if (Properties::isControlFlowStructure(curr)) { if (curr->type.isTuple()) { // TODO: Allow control flow to have input types as well counts.note(Signature(Type::none, curr->type)); } else { counts.note(curr->type); } } } template void handleMake(T* curr) { if (!curr->rtt && curr->type != Type::unreachable) { counts.note(curr->type.getHeapType()); } } template void handleCast(T* curr) { // Some operations emit a HeapType in the binary format, if they are // static and not dynamic (if dynamic, the RTT provides the heap type). if (!curr->rtt) { counts.note(curr->intendedType); } } }; Counts getHeapTypeCounts(Module& wasm) { // Collect module-level info. Counts counts; CodeScanner(wasm, counts).walkModuleCode(&wasm); for (auto& curr : wasm.tags) { counts.note(curr->sig); } for (auto& curr : wasm.tables) { counts.note(curr->type); } for (auto& curr : wasm.elementSegments) { counts.note(curr->type); } // Collect info from functions in parallel. ModuleUtils::ParallelFunctionAnalysis analysis(wasm, [&](Function* func, Counts& counts) { counts.note(func->type); for (auto type : func->vars) { counts.note(type); } if (!func->imported()) { CodeScanner(wasm, counts).walk(func->body); } }); // Combine the function info with the module info. for (auto& [_, functionCounts] : analysis.map) { for (auto& [sig, count] : functionCounts) { counts[sig] += count; } } // Recursively traverse each reference type, which may have a child type that // is itself a reference type. This reflects an appearance in the binary // format that is in the type section itself. As we do this we may find more // and more types, as nested children of previous ones. Each such type will // appear in the type section once, so we just need to visit it once. Also // track which recursion groups we've already processed to avoid quadratic // behavior when there is a single large group. InsertOrderedSet newTypes; for (auto& [type, _] : counts) { newTypes.insert(type); } std::unordered_set includedGroups; while (!newTypes.empty()) { auto iter = newTypes.begin(); auto ht = *iter; newTypes.erase(iter); for (HeapType child : ht.getHeapTypeChildren()) { if (!child.isBasic()) { if (!counts.count(child)) { newTypes.insert(child); } counts.note(child); } } if (auto super = ht.getSuperType()) { if (!counts.count(*super)) { newTypes.insert(*super); // We should unconditionally count supertypes, but while the type system // is in flux, skip counting them to keep the type orderings in nominal // test outputs more similar to the orderings in the equirecursive // outputs. FIXME counts.include(*super); } } // Make sure we've noted the complete recursion group of each type as well. auto recGroup = ht.getRecGroup(); if (includedGroups.insert(recGroup).second) { for (auto type : recGroup) { if (!counts.count(type)) { newTypes.insert(type); counts.include(type); } } } } return counts; } void setIndices(IndexedHeapTypes& indexedTypes) { for (Index i = 0; i < indexedTypes.types.size(); i++) { indexedTypes.indices[indexedTypes.types[i]] = i; } } } // anonymous namespace std::vector collectHeapTypes(Module& wasm) { Counts counts = getHeapTypeCounts(wasm); std::vector types; types.reserve(counts.size()); for (auto& [type, _] : counts) { types.push_back(type); } return types; } IndexedHeapTypes getOptimizedIndexedHeapTypes(Module& wasm) { TypeSystem system = getTypeSystem(); Counts counts = getHeapTypeCounts(wasm); if (system == TypeSystem::Equirecursive) { // Sort by frequency and then original insertion order. std::vector> sorted(counts.begin(), counts.end()); std::stable_sort(sorted.begin(), sorted.end(), [&](auto a, auto b) { return a.second > b.second; }); // Collect the results. IndexedHeapTypes indexedTypes; for (Index i = 0; i < sorted.size(); ++i) { indexedTypes.types.push_back(sorted[i].first); } setIndices(indexedTypes); return indexedTypes; } // Types have to be arranged into topologically ordered recursion groups. // Under isorecrsive typing, the topological sort has to take all referenced // rec groups into account but under nominal typing it only has to take // supertypes into account. First, sort the groups by average use count among // their members so that the later topological sort will place frequently used // types first. struct GroupInfo { size_t index; double useCount = 0; std::unordered_set preds; std::vector sortedPreds; GroupInfo(size_t index) : index(index) {} bool operator<(const GroupInfo& other) const { if (useCount != other.useCount) { return useCount < other.useCount; } return index > other.index; } }; struct GroupInfoMap : std::unordered_map { void sort(std::vector& groups) { std::sort(groups.begin(), groups.end(), [&](auto& a, auto& b) { return this->at(a) < this->at(b); }); } }; // Collect the information that will be used to sort the recursion groups. GroupInfoMap groupInfos; for (auto& [type, _] : counts) { RecGroup group = type.getRecGroup(); // Try to initialize a new info or get the existing info. auto& info = groupInfos.insert({group, {groupInfos.size()}}).first->second; // Update the reference count. info.useCount += counts.at(type); // Collect predecessor groups. switch (system) { case TypeSystem::Isorecursive: for (auto child : type.getReferencedHeapTypes()) { if (!child.isBasic()) { RecGroup otherGroup = child.getRecGroup(); if (otherGroup != group) { info.preds.insert(otherGroup); } } } break; case TypeSystem::Nominal: if (auto super = type.getSuperType()) { info.preds.insert(super->getRecGroup()); } break; case TypeSystem::Equirecursive: WASM_UNREACHABLE( "Equirecursive types should already have been handled"); } } // Fix up the use counts to be averages to ensure groups are used comensurate // with the amount of index space they occupy. Skip this for nominal types // since their internal group size is always 1. if (system != TypeSystem::Nominal) { for (auto& [group, info] : groupInfos) { info.useCount /= group.size(); } } // Sort the predecessors so the most used will be visited first. for (auto& [group, info] : groupInfos) { info.sortedPreds.insert( info.sortedPreds.end(), info.preds.begin(), info.preds.end()); groupInfos.sort(info.sortedPreds); info.preds.clear(); } struct RecGroupSort : TopologicalSort { GroupInfoMap& groupInfos; RecGroupSort(GroupInfoMap& groupInfos) : groupInfos(groupInfos) { // Sort all the groups so the topological sort visits the most used first. std::vector sortedGroups; sortedGroups.reserve(groupInfos.size()); for (auto& [group, _] : groupInfos) { sortedGroups.push_back(group); } groupInfos.sort(sortedGroups); for (auto group : sortedGroups) { push(group); } } void pushPredecessors(RecGroup group) { for (auto pred : groupInfos.at(group).sortedPreds) { push(pred); } } }; // Perform the topological sort and collect the types. IndexedHeapTypes indexedTypes; indexedTypes.types.reserve(counts.size()); for (auto group : RecGroupSort(groupInfos)) { for (auto member : group) { indexedTypes.types.push_back(member); } } setIndices(indexedTypes); return indexedTypes; } } // namespace wasm::ModuleUtils binaryen-version_108/src/ir/module-utils.h000066400000000000000000000343141423707623100207470ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_module_h #define wasm_ir_module_h #include "ir/element-utils.h" #include "ir/find_all.h" #include "ir/manipulation.h" #include "ir/properties.h" #include "pass.h" #include "support/unique_deferring_queue.h" #include "wasm.h" namespace wasm::ModuleUtils { // Copies a function into a module. If newName is provided it is used as the // name of the function (otherwise the original name is copied). inline Function* copyFunction(Function* func, Module& out, Name newName = Name()) { auto ret = std::make_unique(); ret->name = newName.is() ? newName : func->name; ret->type = func->type; ret->vars = func->vars; ret->localNames = func->localNames; ret->localIndices = func->localIndices; ret->debugLocations = func->debugLocations; ret->body = ExpressionManipulator::copy(func->body, out); ret->module = func->module; ret->base = func->base; // TODO: copy Stack IR assert(!func->stackIR); return out.addFunction(std::move(ret)); } inline Global* copyGlobal(Global* global, Module& out) { auto* ret = new Global(); ret->name = global->name; ret->type = global->type; ret->mutable_ = global->mutable_; ret->module = global->module; ret->base = global->base; if (global->imported()) { ret->init = nullptr; } else { ret->init = ExpressionManipulator::copy(global->init, out); } out.addGlobal(ret); return ret; } inline Tag* copyTag(Tag* tag, Module& out) { auto* ret = new Tag(); ret->name = tag->name; ret->sig = tag->sig; out.addTag(ret); return ret; } inline ElementSegment* copyElementSegment(const ElementSegment* segment, Module& out) { auto copy = [&](std::unique_ptr&& ret) { ret->name = segment->name; ret->hasExplicitName = segment->hasExplicitName; ret->type = segment->type; ret->data.reserve(segment->data.size()); for (auto* item : segment->data) { ret->data.push_back(ExpressionManipulator::copy(item, out)); } return out.addElementSegment(std::move(ret)); }; if (segment->table.isNull()) { return copy(std::make_unique()); } else { auto offset = ExpressionManipulator::copy(segment->offset, out); return copy(std::make_unique(segment->table, offset)); } } inline Table* copyTable(const Table* table, Module& out) { auto ret = std::make_unique
(); ret->name = table->name; ret->hasExplicitName = table->hasExplicitName; ret->type = table->type; ret->module = table->module; ret->base = table->base; ret->initial = table->initial; ret->max = table->max; return out.addTable(std::move(ret)); } inline void copyModule(const Module& in, Module& out) { // we use names throughout, not raw pointers, so simple copying is fine // for everything *but* expressions for (auto& curr : in.exports) { out.addExport(new Export(*curr)); } for (auto& curr : in.functions) { copyFunction(curr.get(), out); } for (auto& curr : in.globals) { copyGlobal(curr.get(), out); } for (auto& curr : in.tags) { copyTag(curr.get(), out); } for (auto& curr : in.elementSegments) { copyElementSegment(curr.get(), out); } for (auto& curr : in.tables) { copyTable(curr.get(), out); } out.memory = in.memory; for (auto& segment : out.memory.segments) { segment.offset = ExpressionManipulator::copy(segment.offset, out); } out.start = in.start; out.userSections = in.userSections; out.debugInfoFileNames = in.debugInfoFileNames; out.features = in.features; out.typeNames = in.typeNames; } inline void clearModule(Module& wasm) { wasm.~Module(); new (&wasm) Module; } // Renaming // Rename functions along with all their uses. // Note that for this to work the functions themselves don't necessarily need // to exist. For example, it is possible to remove a given function and then // call this redirect all of its uses. template inline void renameFunctions(Module& wasm, T& map) { // Update the function itself. for (auto& [oldName, newName] : map) { if (Function* F = wasm.getFunctionOrNull(oldName)) { assert(!wasm.getFunctionOrNull(newName) || F->name == newName); F->name = newName; } } wasm.updateMaps(); // Update other global things. auto maybeUpdate = [&](Name& name) { auto iter = map.find(name); if (iter != map.end()) { name = iter->second; } }; maybeUpdate(wasm.start); ElementUtils::iterAllElementFunctionNames(&wasm, maybeUpdate); for (auto& exp : wasm.exports) { if (exp->kind == ExternalKind::Function) { maybeUpdate(exp->value); } } // Update call instructions. for (auto& func : wasm.functions) { // TODO: parallelize if (!func->imported()) { FindAll calls(func->body); for (auto* call : calls.list) { maybeUpdate(call->target); } } } } inline void renameFunction(Module& wasm, Name oldName, Name newName) { std::map map; map[oldName] = newName; renameFunctions(wasm, map); } // Convenient iteration over imported/non-imported module elements template inline void iterImportedMemories(Module& wasm, T visitor) { if (wasm.memory.exists && wasm.memory.imported()) { visitor(&wasm.memory); } } template inline void iterDefinedMemories(Module& wasm, T visitor) { if (wasm.memory.exists && !wasm.memory.imported()) { visitor(&wasm.memory); } } template inline void iterImportedTables(Module& wasm, T visitor) { for (auto& import : wasm.tables) { if (import->imported()) { visitor(import.get()); } } } template inline void iterDefinedTables(Module& wasm, T visitor) { for (auto& import : wasm.tables) { if (!import->imported()) { visitor(import.get()); } } } template inline void iterTableSegments(Module& wasm, Name table, T visitor) { // Just a precaution so that we don't iterate over passive elem segments by // accident assert(table.is() && "Table name must not be null"); for (auto& segment : wasm.elementSegments) { if (segment->table == table) { visitor(segment.get()); } } } template inline void iterActiveElementSegments(Module& wasm, T visitor) { for (auto& segment : wasm.elementSegments) { if (segment->table.is()) { visitor(segment.get()); } } } template inline void iterImportedGlobals(Module& wasm, T visitor) { for (auto& import : wasm.globals) { if (import->imported()) { visitor(import.get()); } } } template inline void iterDefinedGlobals(Module& wasm, T visitor) { for (auto& import : wasm.globals) { if (!import->imported()) { visitor(import.get()); } } } template inline void iterImportedFunctions(Module& wasm, T visitor) { for (auto& import : wasm.functions) { if (import->imported()) { visitor(import.get()); } } } template inline void iterDefinedFunctions(Module& wasm, T visitor) { for (auto& import : wasm.functions) { if (!import->imported()) { visitor(import.get()); } } } template inline void iterImportedTags(Module& wasm, T visitor) { for (auto& import : wasm.tags) { if (import->imported()) { visitor(import.get()); } } } template inline void iterDefinedTags(Module& wasm, T visitor) { for (auto& import : wasm.tags) { if (!import->imported()) { visitor(import.get()); } } } template inline void iterImports(Module& wasm, T visitor) { iterImportedMemories(wasm, visitor); iterImportedTables(wasm, visitor); iterImportedGlobals(wasm, visitor); iterImportedFunctions(wasm, visitor); iterImportedTags(wasm, visitor); } // Helper class for performing an operation on all the functions in the module, // in parallel, with an Info object for each one that can contain results of // some computation that the operation performs. // The operation performed should not modify the wasm module in any way, by // default - otherwise, set the Mutability to Mutable. (This is not enforced at // compile time - TODO find a way - but at runtime in pass-debug mode it is // checked.) template using DefaultMap = std::map; template class MapT = DefaultMap> struct ParallelFunctionAnalysis { Module& wasm; typedef MapT Map; Map map; typedef std::function Func; ParallelFunctionAnalysis(Module& wasm, Func work) : wasm(wasm) { // Fill in map, as we operate on it in parallel (each function to its own // entry). for (auto& func : wasm.functions) { map[func.get()]; } // Run on the imports first. TODO: parallelize this too for (auto& func : wasm.functions) { if (func->imported()) { work(func.get(), map[func.get()]); } } struct Mapper : public WalkerPass> { bool isFunctionParallel() override { return true; } bool modifiesBinaryenIR() override { return Mut; } Mapper(Module& module, Map& map, Func work) : module(module), map(map), work(work) {} Mapper* create() override { return new Mapper(module, map, work); } void doWalkFunction(Function* curr) { assert(map.count(curr)); work(curr, map[curr]); } private: Module& module; Map& map; Func work; }; PassRunner runner(&wasm); Mapper(wasm, map, work).run(&runner, &wasm); } }; // Helper class for analyzing the call graph. // // Provides hooks for running some initial calculation on each function (which // is done in parallel), writing to a FunctionInfo structure for each function. // Then you can call propagateBack() to propagate a property of interest to the // calling functions, transitively. // // For example, if some functions are known to call an import "foo", then you // can use this to find which functions call something that might eventually // reach foo, by initially marking the direct callers as "calling foo" and // propagating that backwards. template struct CallGraphPropertyAnalysis { Module& wasm; // The basic information for each function about whom it calls and who is // called by it. struct FunctionInfo { std::set callsTo; std::set calledBy; // A non-direct call is any call that is not direct. That includes // CallIndirect and CallRef. bool hasNonDirectCall = false; }; typedef std::map Map; Map map; typedef std::function Func; CallGraphPropertyAnalysis(Module& wasm, Func work) : wasm(wasm) { ParallelFunctionAnalysis analysis(wasm, [&](Function* func, T& info) { work(func, info); if (func->imported()) { return; } struct Mapper : public PostWalker { Mapper(Module* module, T& info, Func work) : module(module), info(info), work(work) {} void visitCall(Call* curr) { info.callsTo.insert(module->getFunction(curr->target)); } void visitCallIndirect(CallIndirect* curr) { info.hasNonDirectCall = true; } void visitCallRef(CallRef* curr) { info.hasNonDirectCall = true; } private: Module* module; T& info; Func work; } mapper(&wasm, info, work); mapper.walk(func->body); }); map.swap(analysis.map); // Find what is called by what. for (auto& [func, info] : map) { for (auto* target : info.callsTo) { map[target].calledBy.insert(func); } } } enum NonDirectCalls { IgnoreNonDirectCalls, NonDirectCallsHaveProperty }; // Propagate a property from a function to those that call it. // // hasProperty() - Check if the property is present. // canHaveProperty() - Check if the property could be present. // addProperty() - Adds the property. This receives a second parameter which // is the function due to which we are adding the property. void propagateBack(std::function hasProperty, std::function canHaveProperty, std::function addProperty, NonDirectCalls nonDirectCalls) { // The work queue contains items we just learned can change the state. UniqueDeferredQueue work; for (auto& func : wasm.functions) { if (hasProperty(map[func.get()]) || (nonDirectCalls == NonDirectCallsHaveProperty && map[func.get()].hasNonDirectCall)) { addProperty(map[func.get()], func.get()); work.push(func.get()); } } while (!work.empty()) { auto* func = work.pop(); for (auto* caller : map[func].calledBy) { // If we don't already have the property, and we are not forbidden // from getting it, then it propagates back to us now. if (!hasProperty(map[caller]) && canHaveProperty(map[caller])) { addProperty(map[caller], func); work.push(caller); } } } } }; // Helper function for collecting all the non-basic heap types used in the // module, i.e. the types that would appear in the type section. std::vector collectHeapTypes(Module& wasm); struct IndexedHeapTypes { std::vector types; std::unordered_map indices; }; // Similar to `collectHeapTypes`, but provides fast lookup of the index for each // type as well. Also orders the types to be valid and sorts the types by // frequency of use to minimize code size. IndexedHeapTypes getOptimizedIndexedHeapTypes(Module& wasm); } // namespace wasm::ModuleUtils #endif // wasm_ir_module_h binaryen-version_108/src/ir/names.cpp000066400000000000000000000053041423707623100177570ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/names.h" #include namespace wasm::Names { // Reserved words in JS that we will not emit up to size 4 - size 5 and above // would mean we use an astronomical number of symbols, which is not realistic // anyhow. static std::unordered_set reserved = {"do", "if", "in", "for", "new", "try", "var", "env", "let", "case", "else", "enum", "void", "this", "with"}; // Possible initial letters. static std::string validInitialChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$"; // Possible later letters. static std::string validLaterChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$0123456789"; std::string MinifiedNameGenerator::getName() { std::string name; do { size_t n = state++; std::stringstream ss; ss << validInitialChars[n % validInitialChars.size()]; n /= validInitialChars.size(); // `m` is the number of `state` counts each of the `n` represents. size_t m = validInitialChars.size(); while (n) { if (n % (validLaterChars.size() + 1) == 0) { // Skip states that contain zeros in later positions. state += m; ++n; } ss << validLaterChars[(n % (validLaterChars.size() + 1)) - 1]; n /= (validLaterChars.size() + 1); m *= (validLaterChars.size() + 1); } name = ss.str(); } while (reserved.count(name)); return name; } } // namespace wasm::Names binaryen-version_108/src/ir/names.h000066400000000000000000000055641423707623100174340ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_names_h #define wasm_ir_names_h #include "wasm.h" namespace wasm::Names { // Add explicit names for function locals not yet named, and do not // modify existing names inline void ensureNames(Function* func) { std::unordered_set seen; for (auto& [_, name] : func->localNames) { seen.insert(name); } Index nameIndex = seen.size(); for (Index i = 0; i < func->getNumLocals(); i++) { if (!func->hasLocalName(i)) { while (1) { auto name = Name::fromInt(nameIndex++); if (seen.emplace(name).second) { func->localNames[i] = name; func->localIndices[name] = i; break; } } } } } // Given a root of a name, finds a valid name with perhaps a number appended // to it, by calling a function to check if a name is valid. inline Name getValidName(Name root, std::function check) { if (check(root)) { return root; } auto prefixed = std::string(root.str) + '_'; Index num = 0; while (1) { auto name = prefixed + std::to_string(num); if (check(name)) { return name; } num++; } } inline Name getValidExportName(Module& module, Name root) { return getValidName(root, [&](Name test) { return !module.getExportOrNull(test); }); } inline Name getValidGlobalName(Module& module, Name root) { return getValidName(root, [&](Name test) { return !module.getGlobalOrNull(test); }); } inline Name getValidFunctionName(Module& module, Name root) { return getValidName( root, [&](Name test) { return !module.getFunctionOrNull(test); }); } inline Name getValidTableName(Module& module, Name root) { return getValidName(root, [&](Name test) { return !module.getTableOrNull(test); }); } inline Name getValidTagName(Module& module, Name root) { return getValidName(root, [&](Name test) { return !module.getTagOrNull(test); }); } inline Name getValidElementSegmentName(Module& module, Name root) { return getValidName( root, [&](Name test) { return !module.getElementSegmentOrNull(test); }); } class MinifiedNameGenerator { size_t state = 0; public: // Get a fresh minified name. std::string getName(); }; } // namespace wasm::Names #endif // wasm_ir_names_h binaryen-version_108/src/ir/numbering.h000066400000000000000000000043301423707623100203050ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_numberings_h #define wasm_ir_numberings_h #include "ir/properties.h" #include "wasm.h" namespace wasm { // General value numbering: Returns a number for an expression. Expressions with // the same number must be identical in value; expressions with different values // might happen to be identical at runtime. class ValueNumbering { public: // Get the value numbering of an arbitrary expression. Index getValue(Expression* expr) { if (Properties::isConstantExpression(expr)) { return getValue(Properties::getLiterals(expr)); } else { auto iter = expressionValues.find(expr); if (iter != expressionValues.end()) { return iter->second; } // TODO: full GVN to check for different expressions with the same value. return expressionValues[expr] = getUniqueValue(); } } // Get the value numbering of an arbitrary set of constants. Index getValue(Literals lit) { auto iter = literalValues.find(lit); if (iter != literalValues.end()) { return iter->second; } return literalValues[lit] = getUniqueValue(); } // Return a new unique value. Normally this is called internally, but there // are also use cases for the user of the class to call this, when they want // to get a new value that will not collide with any others. Index getUniqueValue() { return nextValue++; } private: Index nextValue = 0; // Cache the value numbers of literals and expressions. std::unordered_map literalValues; std::unordered_map expressionValues; }; } // namespace wasm #endif // wasm_ir_numberings_h binaryen-version_108/src/ir/ordering.h000066400000000000000000000035401423707623100201320ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_reorderer_h #define wasm_ir_reorderer_h #include #include namespace wasm { // // Given two expressions that appear in a specific order - first and then // second - this helper can create a sequence in which we return the value of // the first. If the two expressions can be reordered, this simply returns // // (second, first) // // If side effects prevent that, it will use a local to save the value of the // first, and return it at the end, // // (temp = first, second, temp) // Expression* getResultOfFirst(Expression* first, Expression* second, Function* func, Module* wasm, const PassOptions& passOptions) { assert(first->type.isConcrete()); Builder builder(*wasm); if (EffectAnalyzer::canReorder(passOptions, *wasm, first, second)) { return builder.makeSequence(second, first); } auto type = first->type; auto index = Builder::addVar(func, type); return builder.makeBlock({builder.makeLocalSet(index, first), second, builder.makeLocalGet(index, type)}); } } // namespace wasm #endif // wasm_ir_reorderer_h binaryen-version_108/src/ir/parents.h000066400000000000000000000022051423707623100177720ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_parents_h #define wasm_ir_parents_h #include "parsing.h" namespace wasm { struct Parents { Parents(Expression* expr) { inner.walk(expr); } Expression* getParent(Expression* curr) { return inner.parentMap[curr]; } private: struct Inner : public ExpressionStackWalker> { void visitExpression(Expression* curr) { parentMap[curr] = getParent(); } std::map parentMap; } inner; }; } // namespace wasm #endif // wasm_ir_parents_h binaryen-version_108/src/ir/possible-constant.h000066400000000000000000000117021423707623100217670ustar00rootroot00000000000000/* * Copyright 2022 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_possible_constant_h #define wasm_ir_possible_constant_h #include #include "ir/properties.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { // Represents data about what constant values are possible in a particular // place. There may be no values, or one, or many, or if a non-constant value is // possible, then all we can say is that the value is "unknown" - it can be // anything. The values can either be literal values (Literal) or the names of // immutable globals (Name). // // Currently this just looks for a single constant value, and even two constant // values are treated as unknown. It may be worth optimizing more than that TODO struct PossibleConstantValues { private: // No possible value. struct None : public std::monostate {}; // Many possible values, and so this represents unknown data: we cannot infer // anything there. struct Many : public std::monostate {}; using Variant = std::variant; Variant value; public: PossibleConstantValues() : value(None()) {} // Notes the contents of an expression and update our internal knowledge based // on it and all previous values noted. void note(Expression* expr, Module& wasm) { // If this is a constant literal value, note that. if (Properties::isConstantExpression(expr)) { note(Properties::getLiteral(expr)); return; } // If this is an immutable global that we get, note that. if (auto* get = expr->dynCast()) { auto* global = wasm.getGlobal(get->name); if (global->mutable_ == Immutable) { note(get->name); return; } } // Otherwise, this is not something we can reason about. noteUnknown(); } // Note either a Literal or a Name. template void note(T curr) { if (std::get_if(&value)) { // This is the first value. value = curr; return; } if (std::get_if(&value)) { // This was already representing multiple values; nothing changes. return; } // This is a subsequent value. Check if it is different from all previous // ones. if (Variant(curr) != value) { noteUnknown(); } } // Notes a value that is unknown - it can be anything. We have failed to // identify a constant value here. void noteUnknown() { value = Many(); } // Combine the information in a given PossibleConstantValues to this one. This // is the same as if we have called note*() on us with all the history of // calls to that other object. // // Returns whether we changed anything. bool combine(const PossibleConstantValues& other) { if (std::get_if(&other.value)) { return false; } if (std::get_if(&value)) { value = other.value; return true; } if (std::get_if(&value)) { return false; } if (other.value != value) { value = Many(); return true; } return false; } // Check if all the values are identical and constant. bool isConstant() const { return !std::get_if(&value) && !std::get_if(&value); } bool isConstantLiteral() const { return std::get_if(&value); } bool isConstantGlobal() const { return std::get_if(&value); } // Returns the single constant value. Literal getConstantLiteral() const { assert(isConstant()); return std::get(value); } Name getConstantGlobal() const { assert(isConstant()); return std::get(value); } // Assuming we have a single value, make an expression containing that value. Expression* makeExpression(Module& wasm) { Builder builder(wasm); if (isConstantLiteral()) { return builder.makeConstantExpression(getConstantLiteral()); } else { auto name = getConstantGlobal(); return builder.makeGlobalGet(name, wasm.getGlobal(name)->type); } } // Returns whether we have ever noted a value. bool hasNoted() const { return !std::get_if(&value); } void dump(std::ostream& o) { o << '['; if (!hasNoted()) { o << "unwritten"; } else if (!isConstant()) { o << "unknown"; } else if (isConstantLiteral()) { o << getConstantLiteral(); } else if (isConstantGlobal()) { o << '$' << getConstantGlobal(); } o << ']'; } }; } // namespace wasm #endif // wasm_ir_possible_constant_h binaryen-version_108/src/ir/properties.cpp000066400000000000000000000023761423707623100210560ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/properties.h" #include "wasm-traversal.h" namespace wasm::Properties { bool isGenerative(Expression* curr, FeatureSet features) { // Practically no wasm instructions are generative. Exceptions occur only in // GC atm. if (!features.hasGC()) { return false; } struct Scanner : public PostWalker { bool generative = false; void visitStructNew(StructNew* curr) { generative = true; } void visitArrayNew(ArrayNew* curr) { generative = true; } void visitArrayInit(ArrayInit* curr) { generative = true; } } scanner; scanner.walk(curr); return scanner.generative; } } // namespace wasm::Properties binaryen-version_108/src/ir/properties.h000066400000000000000000000360641423707623100205240ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_properties_h #define wasm_ir_properties_h #include "ir/bits.h" #include "ir/effects.h" #include "ir/match.h" #include "wasm.h" namespace wasm::Properties { inline bool emitsBoolean(Expression* curr) { if (auto* unary = curr->dynCast()) { return unary->isRelational(); } else if (auto* binary = curr->dynCast()) { return binary->isRelational(); } return false; } inline bool isSymmetric(Binary* binary) { switch (binary->op) { case AddInt32: case MulInt32: case AndInt32: case OrInt32: case XorInt32: case EqInt32: case NeInt32: case AddInt64: case MulInt64: case AndInt64: case OrInt64: case XorInt64: case EqInt64: case NeInt64: case EqFloat32: case NeFloat32: case EqFloat64: case NeFloat64: return true; default: return false; } } inline bool isControlFlowStructure(Expression* curr) { return curr->is() || curr->is() || curr->is() || curr->is(); } // Check if an expression is a control flow construct with a name, which implies // it may have breaks or delegates to it. inline bool isNamedControlFlow(Expression* curr) { if (auto* block = curr->dynCast()) { return block->name.is(); } else if (auto* loop = curr->dynCast()) { return loop->name.is(); } else if (auto* try_ = curr->dynCast()) { return try_->name.is(); } return false; } // A constant expression is something like a Const: it has a fixed value known // at compile time, and passes that propagate constants can try to propagate it. // Constant expressions are also allowed in global initializers in wasm. Also // when two constant expressions compare equal at compile time, their values at // runtime will be equal as well. // TODO: look into adding more things here like RttCanon. inline bool isSingleConstantExpression(const Expression* curr) { return curr->is() || curr->is() || curr->is(); } inline bool isConstantExpression(const Expression* curr) { if (isSingleConstantExpression(curr)) { return true; } if (auto* tuple = curr->dynCast()) { for (auto* op : tuple->operands) { if (!isSingleConstantExpression(op)) { return false; } } return true; } return false; } inline bool isBranch(const Expression* curr) { return curr->is() || curr->is() || curr->is(); } inline Literal getLiteral(const Expression* curr) { if (auto* c = curr->dynCast()) { return c->value; } else if (auto* n = curr->dynCast()) { return Literal(n->type); } else if (auto* r = curr->dynCast()) { return Literal(r->func, r->type); } else if (auto* i = curr->dynCast()) { if (auto* c = i->value->dynCast()) { return Literal::makeI31(c->value.geti32()); } } WASM_UNREACHABLE("non-constant expression"); } inline Literals getLiterals(const Expression* curr) { if (isSingleConstantExpression(curr)) { return {getLiteral(curr)}; } else if (auto* tuple = curr->dynCast()) { Literals literals; for (auto* op : tuple->operands) { literals.push_back(getLiteral(op)); } return literals; } else { WASM_UNREACHABLE("non-constant expression"); } } // Check if an expression is a sign-extend, and if so, returns the value // that is extended, otherwise nullptr inline Expression* getSignExtValue(Expression* curr) { // We only care about i32s here, and ignore i64s, unreachables, etc. if (curr->type != Type::i32) { return nullptr; } if (auto* unary = curr->dynCast()) { if (unary->op == ExtendS8Int32 || unary->op == ExtendS16Int32) { return unary->value; } return nullptr; } using namespace Match; int32_t leftShift = 0, rightShift = 0; Expression* extended = nullptr; if (matches(curr, binary(ShrSInt32, binary(ShlInt32, any(&extended), i32(&leftShift)), i32(&rightShift))) && leftShift == rightShift && leftShift != 0) { return extended; } return nullptr; } // gets the size of the sign-extended value inline Index getSignExtBits(Expression* curr) { assert(curr->type == Type::i32); if (auto* unary = curr->dynCast()) { switch (unary->op) { case ExtendS8Int32: return 8; case ExtendS16Int32: return 16; default: WASM_UNREACHABLE("invalid unary operation"); } } else { auto* rightShift = curr->cast()->right; return 32 - Bits::getEffectiveShifts(rightShift); } } // Check if an expression is almost a sign-extend: perhaps the inner shift // is too large. We can split the shifts in that case, which is sometimes // useful (e.g. if we can remove the signext) inline Expression* getAlmostSignExt(Expression* curr) { using namespace Match; int32_t leftShift = 0, rightShift = 0; Expression* extended = nullptr; if (matches(curr, binary(ShrSInt32, binary(ShlInt32, any(&extended), i32(&leftShift)), i32(&rightShift))) && Bits::getEffectiveShifts(rightShift, Type::i32) <= Bits::getEffectiveShifts(leftShift, Type::i32) && rightShift != 0) { return extended; } return nullptr; } // gets the size of the almost sign-extended value, as well as the // extra shifts, if any inline Index getAlmostSignExtBits(Expression* curr, Index& extraLeftShifts) { auto* leftShift = curr->cast()->left->cast()->right; auto* rightShift = curr->cast()->right; extraLeftShifts = Bits::getEffectiveShifts(leftShift) - Bits::getEffectiveShifts(rightShift); return getSignExtBits(curr); } // Check if an expression is a zero-extend, and if so, returns the value // that is extended, otherwise nullptr inline Expression* getZeroExtValue(Expression* curr) { // We only care about i32s here, and ignore i64s, unreachables, etc. if (curr->type != Type::i32) { return nullptr; } using namespace Match; int32_t mask = 0; Expression* extended = nullptr; if (matches(curr, binary(AndInt32, any(&extended), i32(&mask))) && Bits::getMaskedBits(mask) != 0) { return extended; } return nullptr; } // gets the size of the sign-extended value inline Index getZeroExtBits(Expression* curr) { assert(curr->type == Type::i32); int32_t mask = curr->cast()->right->cast()->value.geti32(); return Bits::getMaskedBits(mask); } // Returns a falling-through value, that is, it looks through a local.tee // and other operations that receive a value and let it flow through them. If // there is no value falling through, returns the node itself (as that is the // value that trivially falls through, with 0 steps in the middle). // // Note that this returns the value that would fall through if one does in fact // do so. For example, the final element in a block may not fall through if we // hit a return or a trap or an exception is thrown before we get there. // // This method returns the 'immediate' fallthrough, that is, the immediate // child of this expression. See getFallthrough for a method that looks all the // way to the final value falling through, potentially through multiple // intermediate expressions. // // TODO: Receive a Module instead of FeatureSet, to pass to EffectAnalyzer? inline Expression* getImmediateFallthrough(Expression* curr, const PassOptions& passOptions, Module& module) { // If the current node is unreachable, there is no value // falling through. if (curr->type == Type::unreachable) { return curr; } if (auto* set = curr->dynCast()) { if (set->isTee()) { return set->value; } } else if (auto* block = curr->dynCast()) { // if no name, we can't be broken to, and then can look at the fallthrough if (!block->name.is() && block->list.size() > 0) { return block->list.back(); } } else if (auto* loop = curr->dynCast()) { return loop->body; } else if (auto* iff = curr->dynCast()) { if (iff->ifFalse) { // Perhaps just one of the two actually returns. if (iff->ifTrue->type == Type::unreachable) { return iff->ifFalse; } else if (iff->ifFalse->type == Type::unreachable) { return iff->ifTrue; } } } else if (auto* br = curr->dynCast()) { if (br->condition && br->value) { return br->value; } } else if (auto* tryy = curr->dynCast()) { if (!EffectAnalyzer(passOptions, module, tryy->body).throws()) { return tryy->body; } } else if (auto* as = curr->dynCast()) { return as->ref; } else if (auto* as = curr->dynCast()) { return as->value; } else if (auto* br = curr->dynCast()) { return br->ref; } return curr; } // Similar to getImmediateFallthrough, but looks through multiple children to // find the final value that falls through. inline Expression* getFallthrough(Expression* curr, const PassOptions& passOptions, Module& module) { while (1) { auto* next = getImmediateFallthrough(curr, passOptions, module); if (next == curr) { return curr; } curr = next; } } inline Index getNumChildren(Expression* curr) { Index ret = 0; #define DELEGATE_ID curr->_id #define DELEGATE_START(id) \ auto* cast = curr->cast(); \ WASM_UNUSED(cast); #define DELEGATE_GET_FIELD(id, field) cast->field #define DELEGATE_FIELD_CHILD(id, field) ret++; #define DELEGATE_FIELD_OPTIONAL_CHILD(id, field) \ if (cast->field) { \ ret++; \ } #define DELEGATE_FIELD_INT(id, field) #define DELEGATE_FIELD_INT_ARRAY(id, field) #define DELEGATE_FIELD_LITERAL(id, field) #define DELEGATE_FIELD_NAME(id, field) #define DELEGATE_FIELD_NAME_VECTOR(id, field) #define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) #define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) #define DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) #define DELEGATE_FIELD_TYPE(id, field) #define DELEGATE_FIELD_HEAPTYPE(id, field) #define DELEGATE_FIELD_ADDRESS(id, field) #include "wasm-delegations-fields.def" return ret; } // Returns whether the resulting value here must fall through without being // modified. For example, a tee always does so. That is, this returns false if // and only if the return value may have some computation performed on it to // change it from the inputs the instruction receives. // This differs from getFallthrough() which returns a single value that falls // through - here if more than one value can fall through, like in if-else, // we can return true. That is, there we care about a value falling through and // for us to get that actual value to look at; here we just care whether the // value falls through without being changed, even if it might be one of // several options. inline bool isResultFallthrough(Expression* curr) { // Note that we don't check if there is a return value here; the node may be // unreachable, for example, but then there is no meaningful answer to give // anyhow. return curr->is() || curr->is() || curr->is() || curr->is() || curr->is() || curr->is()) { if (index == 0) { return &select->condition; } else if (index == 1) { return &select->ifTrue; } else if (index == 2) { return &select->ifFalse; } WASM_UNREACHABLE("unexpected index"); } WASM_UNREACHABLE("unexpected expression type"); } }; Pass* createDataFlowOptsPass() { return new DataFlowOpts(); } } // namespace wasm binaryen-version_108/src/passes/DeAlign.cpp000066400000000000000000000022401423707623100210370ustar00rootroot00000000000000/* * Copyright 2020 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Forces all loads and stores to be completely unaligned, that is, to have // alignment 1. // #include "pass.h" #include "wasm.h" namespace wasm { struct DeAlign : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new DeAlign(); } void visitLoad(Load* curr) { curr->align = 1; } void visitStore(Store* curr) { curr->align = 1; } void visitSIMDLoad(SIMDLoad* curr) { curr->align = 1; } }; Pass* createDeAlignPass() { return new DeAlign(); } } // namespace wasm binaryen-version_108/src/passes/DeNaN.cpp000066400000000000000000000121251423707623100204640ustar00rootroot00000000000000/* * Copyright 2020 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Instrument the wasm to convert NaN values at runtime into 0s. That is, every // operation that might produce a NaN will go through a helper function which // filters out NaNs (replacing them with 0). This ensures that NaNs are never // consumed by any instructions, which is useful when fuzzing between VMs that // differ on wasm's nondeterminism around NaNs. // #include "ir/names.h" #include "ir/properties.h" #include "pass.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { struct DeNaN : public WalkerPass< ControlFlowWalker>> { Name deNan32, deNan64; void visitExpression(Expression* expr) { // If the expression returns a floating-point value, ensure it is not a // NaN. If we can do this at compile time, do it now, which is useful for // initializations of global (which we can't do a function call in). Note // that we don't instrument local.gets, which would cause problems if we // ran this pass more than once (the added functions use gets, and we don't // want to instrument them). if (expr->is()) { return; } // If the result just falls through without being modified, then we've // already fixed it up earlier. if (Properties::isResultFallthrough(expr)) { return; } Builder builder(*getModule()); Expression* replacement = nullptr; auto* c = expr->dynCast(); if (expr->type == Type::f32) { if (c && c->value.isNaN()) { replacement = builder.makeConst(float(0)); } else { replacement = builder.makeCall(deNan32, {expr}, Type::f32); } } else if (expr->type == Type::f64) { if (c && c->value.isNaN()) { replacement = builder.makeConst(double(0)); } else { replacement = builder.makeCall(deNan64, {expr}, Type::f64); } } if (replacement) { // We can't do this outside of a function, like in a global initializer, // where a call would be illegal. if (replacement->is() || getFunction()) { replaceCurrent(replacement); } else { std::cerr << "warning: cannot de-nan outside of function context\n"; } } } void visitFunction(Function* func) { if (func->imported()) { return; } // Instrument all locals as they enter the function. Builder builder(*getModule()); std::vector fixes; auto num = func->getNumParams(); for (Index i = 0; i < num; i++) { if (func->getLocalType(i) == Type::f32) { fixes.push_back(builder.makeLocalSet( i, builder.makeCall( deNan32, {builder.makeLocalGet(i, Type::f32)}, Type::f32))); } else if (func->getLocalType(i) == Type::f64) { fixes.push_back(builder.makeLocalSet( i, builder.makeCall( deNan64, {builder.makeLocalGet(i, Type::f64)}, Type::f64))); } } if (!fixes.empty()) { fixes.push_back(func->body); func->body = builder.makeBlock(fixes); // Merge blocks so we don't add an unnecessary one. PassRunner runner(getModule(), getPassOptions()); runner.setIsNested(true); runner.add("merge-blocks"); runner.run(); } } void doWalkModule(Module* module) { // Pick names for the helper functions. deNan32 = Names::getValidFunctionName(*module, "deNan32"); deNan64 = Names::getValidFunctionName(*module, "deNan64"); ControlFlowWalker>::doWalkModule( module); // Add helper functions after the walk, so they are not instrumented. Builder builder(*module); auto add = [&](Name name, Type type, Literal literal, BinaryOp op) { auto func = Builder::makeFunction(name, Signature(type, type), {}); // Compare the value to itself to check if it is a NaN, and return 0 if // so: // // (if (result f*) // (f*.eq // (local.get $0) // (local.get $0) // ) // (local.get $0) // (f*.const 0) // ) func->body = builder.makeIf( builder.makeBinary( op, builder.makeLocalGet(0, type), builder.makeLocalGet(0, type)), builder.makeLocalGet(0, type), builder.makeConst(literal)); module->addFunction(std::move(func)); }; add(deNan32, Type::f32, Literal(float(0)), EqFloat32); add(deNan64, Type::f64, Literal(double(0)), EqFloat64); } }; Pass* createDeNaNPass() { return new DeNaN(); } } // namespace wasm binaryen-version_108/src/passes/DeadArgumentElimination.cpp000066400000000000000000000402231423707623100242700ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Optimizes call arguments in a whole-program manner. In particular, this // removes ones that are not used (dead), but it also does more things: // // * Find functions for whom an argument is always passed the same // constant. If so, we can just set that local to that constant // in the function. // * Find functions that don't use the value passed to an argument. // If so, we can avoid even sending and receiving it. (Note how if // the previous point was true for an argument, then the second // must as well.) // * Find return values ("return arguments" ;) that are never used. // * Refine the types of arguments, that is make the argument type more // specific if all the passed values allow that. // // This pass does not depend on flattening, but it may be more effective, // as then call arguments never have side effects (which we need to // watch for here). // #include #include #include "ir/effects.h" #include "ir/element-utils.h" #include "ir/find_all.h" #include "ir/lubs.h" #include "ir/module-utils.h" #include "ir/type-updating.h" #include "ir/utils.h" #include "param-utils.h" #include "pass.h" #include "passes/opt-utils.h" #include "support/sorted_vector.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { // Information for a function struct DAEFunctionInfo { // The unused parameters, if any. SortedVector unusedParams; // Maps a function name to the calls going to it. std::unordered_map> calls; // Map of all calls that are dropped, to their drops' locations (so that // if we can optimize out the drop, we can replace the drop there). std::unordered_map droppedCalls; // Whether this function contains any tail calls (including indirect tail // calls) and the set of functions this function tail calls. Tail-callers and // tail-callees cannot have their dropped returns removed because of the // constraint that tail-callees must have the same return type as // tail-callers. Indirectly tail called functions are already not optimized // because being in a table inhibits DAE. TODO: Allow the removal of dropped // returns from tail-callers if their tail-callees can have their returns // removed as well. bool hasTailCalls = false; std::unordered_set tailCallees; // Whether the function can be called from places that // affect what we can do. For now, any call we don't // see inhibits our optimizations, but TODO: an export // could be worked around by exporting a thunk that // adds the parameter. // This is atomic so that we can write to it from any function at any time // during the parallel analysis phase which is run in DAEScanner. std::atomic hasUnseenCalls; DAEFunctionInfo() { hasUnseenCalls = false; } }; typedef std::unordered_map DAEFunctionInfoMap; struct DAEScanner : public WalkerPass>> { bool isFunctionParallel() override { return true; } Pass* create() override { return new DAEScanner(infoMap); } DAEScanner(DAEFunctionInfoMap* infoMap) : infoMap(infoMap) {} DAEFunctionInfoMap* infoMap; DAEFunctionInfo* info; Index numParams; void visitCall(Call* curr) { if (!getModule()->getFunction(curr->target)->imported()) { info->calls[curr->target].push_back(curr); } if (curr->isReturn) { info->hasTailCalls = true; info->tailCallees.insert(curr->target); } } void visitCallIndirect(CallIndirect* curr) { if (curr->isReturn) { info->hasTailCalls = true; } } void visitCallRef(CallRef* curr) { if (curr->isReturn) { info->hasTailCalls = true; } } void visitDrop(Drop* curr) { if (auto* call = curr->value->dynCast()) { info->droppedCalls[call] = getCurrentPointer(); } } void visitRefFunc(RefFunc* curr) { // We can't modify another function in parallel. assert((*infoMap).count(curr->func)); // Treat a ref.func as an unseen call, preventing us from changing the // function's type. If we did change it, it could be an observable // difference from the outside, if the reference escapes, for example. // TODO: look for actual escaping? // TODO: create a thunk for external uses that allow internal optimizations (*infoMap)[curr->func].hasUnseenCalls = true; } // main entry point void doWalkFunction(Function* func) { numParams = func->getNumParams(); info = &((*infoMap)[func->name]); PostWalker>::doWalkFunction(func); // If there are relevant params, check if they are used. If we can't // optimize the function anyhow, there's no point (note that our check here // is technically racy - another thread could update hasUnseenCalls to true // around when we check it - but that just means that we might or might not // do some extra work, as we'll ignore the results later if we have unseen // calls. That is, the check for hasUnseenCalls here is just a minor // optimization to avoid pointless work. We can avoid that work if either // we know there is an unseen call before the parallel analysis that we are // part of, say if we are exported, or if another parallel function finds a // RefFunc to us and updates it before we check it). if (numParams > 0 && !info->hasUnseenCalls) { auto usedParams = ParamUtils::getUsedParams(func); for (Index i = 0; i < numParams; i++) { if (usedParams.count(i) == 0) { info->unusedParams.insert(i); } } } } }; struct DAE : public Pass { // This pass changes locals and parameters. // FIXME DWARF updating does not handle local changes yet. bool invalidatesDWARF() override { return true; } bool optimize = false; void run(PassRunner* runner, Module* module) override { // Iterate to convergence. while (1) { if (!iteration(runner, module)) { break; } } } bool iteration(PassRunner* runner, Module* module) { allDroppedCalls.clear(); DAEFunctionInfoMap infoMap; // Ensure they all exist so the parallel threads don't modify the data // structure. for (auto& func : module->functions) { infoMap[func->name]; } DAEScanner scanner(&infoMap); scanner.walkModuleCode(module); for (auto& curr : module->exports) { if (curr->kind == ExternalKind::Function) { infoMap[curr->value].hasUnseenCalls = true; } } // Scan all the functions. scanner.run(runner, module); // Combine all the info. std::map> allCalls; std::unordered_set tailCallees; for (auto& [_, info] : infoMap) { for (auto& [name, calls] : info.calls) { auto& allCallsToName = allCalls[name]; allCallsToName.insert(allCallsToName.end(), calls.begin(), calls.end()); } for (auto& callee : info.tailCallees) { tailCallees.insert(callee); } for (auto& [name, calls] : info.droppedCalls) { allDroppedCalls[name] = calls; } } // If we refine return types then we will need to do more type updating // at the end. bool refinedReturnTypes = false; // We now have a mapping of all call sites for each function, and can look // for optimization opportunities. for (auto& [name, calls] : allCalls) { // We can only optimize if we see all the calls and can modify them. if (infoMap[name].hasUnseenCalls) { continue; } auto* func = module->getFunction(name); // Refine argument types before doing anything else. This does not // affect whether an argument is used or not, it just refines the type // where possible. refineArgumentTypes(func, calls, module, infoMap[name]); // Refine return types as well. if (refineReturnTypes(func, calls, module)) { refinedReturnTypes = true; } auto optimizedIndexes = ParamUtils::applyConstantValues({func}, calls, {}, module); for (auto i : optimizedIndexes) { // Mark it as unused, which we know it now is (no point to re-scan just // for that). infoMap[name].unusedParams.insert(i); } } if (refinedReturnTypes) { // Changing a call expression's return type can propagate out to its // parents, and so we must refinalize. // TODO: We could track in which functions we actually make changes. ReFinalize().run(runner, module); } // Track which functions we changed, and optimize them later if necessary. std::unordered_set changed; // We now know which parameters are unused, and can potentially remove them. for (auto& [name, calls] : allCalls) { if (infoMap[name].hasUnseenCalls) { continue; } auto* func = module->getFunction(name); auto numParams = func->getNumParams(); if (numParams == 0) { continue; } auto removedIndexes = ParamUtils::removeParameters( {func}, infoMap[name].unusedParams, calls, {}, module, runner); if (!removedIndexes.empty()) { // Success! changed.insert(func); } } // We can also tell which calls have all their return values dropped. Note // that we can't do this if we changed anything so far, as we may have // modified allCalls (we can't modify a call site twice in one iteration, // once to remove a param, once to drop the return value). if (changed.empty()) { for (auto& func : module->functions) { if (func->getResults() == Type::none) { continue; } auto name = func->name; if (infoMap[name].hasUnseenCalls) { continue; } if (infoMap[name].hasTailCalls) { continue; } if (tailCallees.count(name)) { continue; } auto iter = allCalls.find(name); if (iter == allCalls.end()) { continue; } auto& calls = iter->second; bool allDropped = std::all_of(calls.begin(), calls.end(), [&](Call* call) { return allDroppedCalls.count(call); }); if (!allDropped) { continue; } removeReturnValue(func.get(), calls, module); // TODO Removing a drop may also open optimization opportunities in the // callers. changed.insert(func.get()); } } if (optimize && !changed.empty()) { OptUtils::optimizeAfterInlining(changed, module, runner); } return !changed.empty() || refinedReturnTypes; } private: std::unordered_map allDroppedCalls; void removeReturnValue(Function* func, std::vector& calls, Module* module) { func->setResults(Type::none); Builder builder(*module); // Remove any return values. struct ReturnUpdater : public PostWalker { Module* module; ReturnUpdater(Function* func, Module* module) : module(module) { walk(func->body); } void visitReturn(Return* curr) { auto* value = curr->value; assert(value); curr->value = nullptr; Builder builder(*module); replaceCurrent(builder.makeSequence(builder.makeDrop(value), curr)); } } returnUpdater(func, module); // Remove any value flowing out. if (func->body->type.isConcrete()) { func->body = builder.makeDrop(func->body); } // Remove the drops on the calls. for (auto* call : calls) { auto iter = allDroppedCalls.find(call); assert(iter != allDroppedCalls.end()); Expression** location = iter->second; *location = call; // Update the call's type. if (call->type != Type::unreachable) { call->type = Type::none; } } } // Given a function and all the calls to it, see if we can refine the type of // its arguments. If we only pass in a subtype, we may as well refine the type // to that. // // This assumes that the function has no calls aside from |calls|, that is, it // is not exported or called from the table or by reference. void refineArgumentTypes(Function* func, const std::vector& calls, Module* module, const DAEFunctionInfo& info) { if (!module->features.hasGC()) { return; } auto numParams = func->getNumParams(); std::vector newParamTypes; newParamTypes.reserve(numParams); std::vector lubs(numParams); for (Index i = 0; i < numParams; i++) { auto originalType = func->getLocalType(i); // If the parameter type is not a reference, there is nothing to refine. // And if it is unused, also do nothing, as we can leave it to the other // parts of this pass to optimize it properly, which avoids having to // think about corner cases involving refining the type of an unused // param (in particular, unused params are turned into locals, which means // we'd need to think about defaultability etc.). if (!originalType.isRef() || info.unusedParams.has(i)) { newParamTypes.push_back(originalType); continue; } auto& lub = lubs[i]; for (auto* call : calls) { auto* operand = call->operands[i]; lub.noteUpdatableExpression(operand); if (lub.getBestPossible() == originalType) { // We failed to refine this parameter to anything more specific. break; } } // Nothing is sent here at all; leave such optimizations to DCE. if (!lub.noted()) { return; } newParamTypes.push_back(lub.getBestPossible()); } // Check if we are able to optimize here before we do the work to scan the // function body. auto newParams = Type(newParamTypes); if (newParams == func->getParams()) { return; } // We can do this! TypeUpdating::updateParamTypes(func, newParamTypes, *module); // Update anything the lubs need to update. for (auto& lub : lubs) { lub.updateNulls(); } // Also update the function's type. func->setParams(newParams); } // See if the types returned from a function allow us to define a more refined // return type for it. If so, we can update it and all calls going to it. // // This assumes that the function has no calls aside from |calls|, that is, it // is not exported or called from the table or by reference. Exports should be // fine, as should indirect calls in principle, but VMs will need to support // function subtyping in indirect calls. TODO: relax this when possible // // Returns whether we optimized. // // TODO: We may be missing a global optimum here, as e.g. if a function calls // itself and returns that value, then we would not do any change here, // as one of the return values is exactly what it already is. Similar // unoptimality can happen with multiple functions, more local code in // the middle, etc. bool refineReturnTypes(Function* func, const std::vector& calls, Module* module) { auto lub = LUB::getResultsLUB(func, *module); if (!lub.noted()) { return false; } auto newType = lub.getBestPossible(); if (newType != func->getResults()) { lub.updateNulls(); func->setResults(newType); for (auto* call : calls) { if (call->type != Type::unreachable) { call->type = newType; } } return true; } return false; } }; Pass* createDAEPass() { return new DAE(); } Pass* createDAEOptimizingPass() { auto* ret = new DAE(); ret->optimize = true; return ret; } } // namespace wasm binaryen-version_108/src/passes/DeadCodeElimination.cpp000066400000000000000000000146511423707623100233660ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Removes dead, i.e. unreachable, code. // // We keep a record of when control flow is reachable. When it isn't, we // kill (turn into unreachable). We then fold away entire unreachable // expressions. // // When dead code causes an operation to not happen, like a store, a call // or an add, we replace with a block with a list of what does happen. // That isn't necessarily smaller, but blocks are friendlier to other // optimizations: blocks can be merged and eliminated, and they clearly // have no side effects. // #include #include #include #include #include #include #include namespace wasm { struct DeadCodeElimination : public WalkerPass< PostWalker>> { bool isFunctionParallel() override { return true; } Pass* create() override { return new DeadCodeElimination; } // as we remove code, we must keep the types of other nodes valid TypeUpdater typeUpdater; Expression* replaceCurrent(Expression* expression) { auto* old = getCurrent(); if (old == expression) { return expression; } super::replaceCurrent(expression); // also update the type updater typeUpdater.noteReplacement(old, expression); return expression; } void doWalkFunction(Function* func) { typeUpdater.walk(func->body); walk(func->body); } void visitExpression(Expression* curr) { if (!Properties::isControlFlowStructure(curr)) { // Control flow structures require special handling, but others are // simple. if (curr->type == Type::unreachable) { // This may be dead code. Check if there is an unreachable child. bool hasUnreachableChild = false; for (auto* child : ChildIterator(curr)) { if (child->type == Type::unreachable) { hasUnreachableChild = true; break; } } if (hasUnreachableChild) { // This is indeed unreachable code, made unreachable by that child. Builder builder(*getModule()); std::vector remainingChildren; bool afterUnreachable = false; for (auto* child : ChildIterator(curr)) { if (afterUnreachable) { typeUpdater.noteRecursiveRemoval(child); continue; } if (child->type == Type::unreachable) { remainingChildren.push_back(child); afterUnreachable = true; } else { remainingChildren.push_back(builder.makeDrop(child)); } } if (remainingChildren.size() == 1) { replaceCurrent(remainingChildren[0]); } else { replaceCurrent(builder.makeBlock(remainingChildren)); } } } return; } // This is a control flow structure. if (auto* block = curr->dynCast()) { auto& list = block->list; // The index from which to remove, which is one after the first // unreachable instruction. Note that 0 is not a valid value, so we can // use it as such. Index removeFromHere = 0; for (Index i = 0; i < list.size(); i++) { if (list[i]->type == Type::unreachable) { removeFromHere = i + 1; break; } } if (removeFromHere != 0) { for (Index i = removeFromHere; i < list.size(); i++) { typeUpdater.noteRecursiveRemoval(list[i]); } list.resize(removeFromHere); if (list.size() == 1 && list[0]->is()) { replaceCurrent(list[0]); return; } } // Finally, if there is no need for a concrete type (which is when there // is one marked, but nothing breaks to it, and also the block does not // have a concrete value flowing out) then remove it, which may allow // more reduction. if (block->type.isConcrete() && list.back()->type == Type::unreachable && !typeUpdater.hasBreaks(block)) { typeUpdater.changeType(block, Type::unreachable); } } else if (auto* iff = curr->dynCast()) { if (iff->condition->type == Type::unreachable) { typeUpdater.noteRecursiveRemoval(iff->ifTrue); if (iff->ifFalse) { typeUpdater.noteRecursiveRemoval(iff->ifFalse); } replaceCurrent(iff->condition); return; } // If both arms are unreachable, there is no need for a concrete type, // which may allow more reduction. if (iff->type != Type::unreachable && iff->ifFalse && iff->ifTrue->type == Type::unreachable && iff->ifFalse->type == Type::unreachable) { typeUpdater.changeType(iff, Type::unreachable); } } else if (auto* loop = curr->dynCast()) { // The loop body may have unreachable type if it branches back to the // loop top, for example. The only case we look for here is where we've // already removed the entire body as dead code. if (loop->body->is()) { replaceCurrent(loop->body); } } else if (auto* tryy = curr->dynCast()) { // If both try body and catch body are unreachable, there is no need for a // concrete type, which may allow more reduction. bool allCatchesUnreachable = true; for (auto* catchBody : tryy->catchBodies) { allCatchesUnreachable &= catchBody->type == Type::unreachable; } if (tryy->type != Type::unreachable && tryy->body->type == Type::unreachable && allCatchesUnreachable) { typeUpdater.changeType(tryy, Type::unreachable); } } else { WASM_UNREACHABLE("unimplemented DCE control flow structure"); } } }; Pass* createDeadCodeEliminationPass() { return new DeadCodeElimination(); } } // namespace wasm binaryen-version_108/src/passes/Directize.cpp000066400000000000000000000177541423707623100214760ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Turn indirect calls into direct calls. This is possible if we know // the table cannot change, and if we see a constant argument for the // indirect call's index. // #include #include "ir/table-utils.h" #include "ir/type-updating.h" #include "ir/utils.h" #include "pass.h" #include "wasm-builder.h" #include "wasm-traversal.h" #include "wasm.h" namespace wasm { namespace { struct FunctionDirectizer : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new FunctionDirectizer(tables); } FunctionDirectizer( const std::unordered_map& tables) : tables(tables) {} void visitCallIndirect(CallIndirect* curr) { auto it = tables.find(curr->table); if (it == tables.end()) { return; } auto& flatTable = it->second; // If the target is constant, we can emit a direct call. if (curr->target->is()) { std::vector operands(curr->operands.begin(), curr->operands.end()); replaceCurrent(makeDirectCall(operands, curr->target, flatTable, curr)); return; } // If the target is a select of two different constants, we can emit two // direct calls. // TODO: handle 3+ // TODO: handle the case where just one arm is a constant? if (auto* select = curr->target->dynCast()) { select->ifTrue = optimizeBoolean(select->ifTrue); select->ifFalse = optimizeBoolean(select->ifFalse); } else if (auto* tryy = boolean->dynCast()) { if (tryy->type == Type::i32) { tryy->body = optimizeBoolean(tryy->body); for (Index i = 0; i < tryy->catchBodies.size(); i++) { tryy->catchBodies[i] = optimizeBoolean(tryy->catchBodies[i]); } } } // TODO: recurse into br values? return boolean; } Expression* optimizeSelect(Select* curr) { using namespace Match; using namespace Abstract; Builder builder(*getModule()); curr->condition = optimizeBoolean(curr->condition); { // Constant condition, we can just pick the correct side (barring side // effects) Expression *ifTrue, *ifFalse; if (matches(curr, select(pure(&ifTrue), any(&ifFalse), i32(0)))) { return ifFalse; } if (matches(curr, select(any(&ifTrue), any(&ifFalse), i32(0)))) { return builder.makeSequence(builder.makeDrop(ifTrue), ifFalse); } int32_t cond; if (matches(curr, select(any(&ifTrue), pure(&ifFalse), i32(&cond)))) { // The condition must be non-zero because a zero would have matched one // of the previous patterns. assert(cond != 0); return ifTrue; } // Don't bother when `ifFalse` isn't pure - we would need to reverse the // order using a temp local, which would be bad } { // Flip select to remove eqz if we can reorder Select* s; Expression *ifTrue, *ifFalse, *c; if (matches( curr, select( &s, any(&ifTrue), any(&ifFalse), unary(EqZInt32, any(&c)))) && canReorder(ifTrue, ifFalse)) { s->ifTrue = ifFalse; s->ifFalse = ifTrue; s->condition = c; return s; } } { // TODO: Remove this after landing SCCP pass. See: #4161 // i32(x) ? i32(x) : 0 ==> x Expression *x, *y; if (matches(curr, select(any(&x), i32(0), any(&y))) && areConsecutiveInputsEqualAndFoldable(x, y)) { return curr->ifTrue; } // i32(x) ? 0 : i32(x) ==> { x, 0 } if (matches(curr, select(i32(0), any(&x), any(&y))) && areConsecutiveInputsEqualAndFoldable(x, y)) { return builder.makeSequence(builder.makeDrop(x), curr->ifTrue); } // i64(x) == 0 ? 0 : i64(x) ==> x // i64(x) != 0 ? i64(x) : 0 ==> x if ((matches(curr, select(i64(0), any(&x), unary(EqZInt64, any(&y)))) || matches( curr, select(any(&x), i64(0), binary(NeInt64, any(&y), i64(0))))) && areConsecutiveInputsEqualAndFoldable(x, y)) { return curr->condition->is() ? curr->ifFalse : curr->ifTrue; } // i64(x) == 0 ? i64(x) : 0 ==> { x, 0 } // i64(x) != 0 ? 0 : i64(x) ==> { x, 0 } if ((matches(curr, select(any(&x), i64(0), unary(EqZInt64, any(&y)))) || matches( curr, select(i64(0), any(&x), binary(NeInt64, any(&y), i64(0))))) && areConsecutiveInputsEqualAndFoldable(x, y)) { return builder.makeSequence( builder.makeDrop(x), curr->condition->is() ? curr->ifFalse : curr->ifTrue); } } { // Simplify selects between 0 and 1 Expression* c; bool reversed = matches(curr, select(ival(0), ival(1), any(&c))); if (reversed || matches(curr, select(ival(1), ival(0), any(&c)))) { if (reversed) { c = optimizeBoolean(builder.makeUnary(EqZInt32, c)); } if (!Properties::emitsBoolean(c)) { // cond ? 1 : 0 ==> !!cond c = builder.makeUnary(EqZInt32, builder.makeUnary(EqZInt32, c)); } return curr->type == Type::i64 ? builder.makeUnary(ExtendUInt32, c) : c; } } { // Simplify x < 0 ? -1 : 1 or x >= 0 ? 1 : -1 to // i32(x) >> 31 | 1 // i64(x) >> 63 | 1 Binary* bin; if (matches( curr, select(ival(-1), ival(1), binary(&bin, LtS, any(), ival(0)))) || matches( curr, select(ival(1), ival(-1), binary(&bin, GeS, any(), ival(0))))) { auto c = bin->right->cast(); auto type = curr->ifTrue->type; if (type == c->type) { bin->type = type; bin->op = Abstract::getBinary(type, ShrS); c->value = Literal::makeFromInt32(type.getByteSize() * 8 - 1, type); curr->ifTrue->cast()->value = Literal::makeOne(type); return builder.makeBinary( Abstract::getBinary(type, Or), bin, curr->ifTrue); } } } if (curr->type == Type::i32 && Bits::getMaxBits(curr->condition, this) <= 1 && Bits::getMaxBits(curr->ifTrue, this) <= 1 && Bits::getMaxBits(curr->ifFalse, this) <= 1) { // The condition and both arms are i32 booleans, which allows us to do // boolean optimizations. Expression* x; Expression* y; // x ? y : 0 ==> x & y if (matches(curr, select(any(&y), ival(0), any(&x)))) { return builder.makeBinary(AndInt32, y, x); } // x ? 1 : y ==> x | y if (matches(curr, select(ival(1), any(&y), any(&x)))) { return builder.makeBinary(OrInt32, y, x); } } { // Sides are identical, fold Expression *ifTrue, *ifFalse, *c; if (matches(curr, select(any(&ifTrue), any(&ifFalse), any(&c))) && ExpressionAnalyzer::equal(ifTrue, ifFalse)) { auto value = effects(ifTrue); if (value.hasSideEffects()) { // At best we don't need the condition, but need to execute the // value twice. a block is larger than a select by 2 bytes, and we // must drop one value, so 3, while we save the condition, so it's // not clear this is worth it, TODO } else { // value has no side effects auto condition = effects(c); if (!condition.hasSideEffects()) { return ifTrue; } else { // The condition is last, so we need a new local, and it may be a // bad idea to use a block like we do for an if. Do it only if we // can reorder if (!condition.invalidates(value)) { return builder.makeSequence(builder.makeDrop(c), ifTrue); } } } } } return nullptr; } // find added constants in an expression tree, including multiplied/shifted, // and combine them note that we ignore division/shift-right, as rounding // makes this nonlinear, so not a valid opt Expression* optimizeAddedConstants(Binary* binary) { assert(binary->type.isInteger()); uint64_t constant = 0; std::vector constants; struct SeekState { Expression* curr; uint64_t mul; SeekState(Expression* curr, uint64_t mul) : curr(curr), mul(mul) {} }; std::vector seekStack; seekStack.emplace_back(binary, 1); while (!seekStack.empty()) { auto state = seekStack.back(); seekStack.pop_back(); auto curr = state.curr; auto mul = state.mul; if (auto* c = curr->dynCast()) { uint64_t value = c->value.getInteger(); if (value != 0ULL) { constant += value * mul; constants.push_back(c); } continue; } else if (auto* binary = curr->dynCast()) { if (binary->op == Abstract::getBinary(binary->type, Abstract::Add)) { seekStack.emplace_back(binary->right, mul); seekStack.emplace_back(binary->left, mul); continue; } else if (binary->op == Abstract::getBinary(binary->type, Abstract::Sub)) { // if the left is a zero, ignore it, it's how we negate ints auto* left = binary->left->dynCast(); seekStack.emplace_back(binary->right, -mul); if (!left || !left->value.isZero()) { seekStack.emplace_back(binary->left, mul); } continue; } else if (binary->op == Abstract::getBinary(binary->type, Abstract::Shl)) { if (auto* c = binary->right->dynCast()) { seekStack.emplace_back(binary->left, mul << Bits::getEffectiveShifts(c)); continue; } } else if (binary->op == Abstract::getBinary(binary->type, Abstract::Mul)) { if (auto* c = binary->left->dynCast()) { seekStack.emplace_back(binary->right, mul * (uint64_t)c->value.getInteger()); continue; } else if (auto* c = binary->right->dynCast()) { seekStack.emplace_back(binary->left, mul * (uint64_t)c->value.getInteger()); continue; } } } }; // find all factors if (constants.size() <= 1) { // nothing much to do, except for the trivial case of adding/subbing a // zero if (auto* c = binary->right->dynCast()) { if (c->value.isZero()) { return binary->left; } } return nullptr; } // wipe out all constants, we'll replace with a single added one for (auto* c : constants) { c->value = Literal::makeZero(c->type); } // remove added/subbed zeros struct ZeroRemover : public PostWalker { // TODO: we could save the binarys and costs we drop, and reuse them later PassOptions& passOptions; ZeroRemover(PassOptions& passOptions) : passOptions(passOptions) {} void visitBinary(Binary* curr) { if (!curr->type.isInteger()) { return; } auto type = curr->type; auto* left = curr->left->dynCast(); auto* right = curr->right->dynCast(); // Canonicalization prefers an add instead of a subtract wherever // possible. That prevents a subtracted constant on the right, // as it would be added. And for a zero on the left, it can't be // removed (it is how we negate ints). if (curr->op == Abstract::getBinary(type, Abstract::Add)) { if (left && left->value.isZero()) { replaceCurrent(curr->right); return; } if (right && right->value.isZero()) { replaceCurrent(curr->left); return; } } else if (curr->op == Abstract::getBinary(type, Abstract::Shl)) { // shifting a 0 is a 0, or anything by 0 has no effect, all unless the // shift has side effects if (((left && left->value.isZero()) || (right && Bits::getEffectiveShifts(right) == 0)) && !EffectAnalyzer(passOptions, *getModule(), curr->right) .hasSideEffects()) { replaceCurrent(curr->left); return; } } else if (curr->op == Abstract::getBinary(type, Abstract::Mul)) { // multiplying by zero is a zero, unless the other side has side // effects if (left && left->value.isZero() && !EffectAnalyzer(passOptions, *getModule(), curr->right) .hasSideEffects()) { replaceCurrent(left); return; } if (right && right->value.isZero() && !EffectAnalyzer(passOptions, *getModule(), curr->left) .hasSideEffects()) { replaceCurrent(right); return; } } } }; Expression* walked = binary; ZeroRemover remover(getPassOptions()); remover.setModule(getModule()); remover.walk(walked); if (constant == 0ULL) { return walked; // nothing more to do } if (auto* c = walked->dynCast()) { assert(c->value.isZero()); // Accumulated 64-bit constant value in 32-bit context will be wrapped // during downcasting. So it's valid unification for 32-bit and 64-bit // values. c->value = Literal::makeFromInt64(constant, c->type); return c; } Builder builder(*getModule()); return builder.makeBinary( Abstract::getBinary(walked->type, Abstract::Add), walked, builder.makeConst(Literal::makeFromInt64(constant, walked->type))); } // expensive1 | expensive2 can be turned into expensive1 ? 1 : expensive2, // and expensive | cheap can be turned into cheap ? 1 : expensive, // so that we can avoid one expensive computation, if it has no side effects. Expression* conditionalizeExpensiveOnBitwise(Binary* binary) { // this operation can increase code size, so don't always do it auto& options = getPassRunner()->options; if (options.optimizeLevel < 2 || options.shrinkLevel > 0) { return nullptr; } const auto MIN_COST = 7; assert(binary->op == AndInt32 || binary->op == OrInt32); if (binary->right->is()) { return nullptr; // trivial } // bitwise logical operator on two non-numerical values, check if they are // boolean auto* left = binary->left; auto* right = binary->right; if (!Properties::emitsBoolean(left) || !Properties::emitsBoolean(right)) { return nullptr; } auto leftEffects = effects(left); auto rightEffects = effects(right); auto leftHasSideEffects = leftEffects.hasSideEffects(); auto rightHasSideEffects = rightEffects.hasSideEffects(); if (leftHasSideEffects && rightHasSideEffects) { return nullptr; // both must execute } // canonicalize with side effects, if any, happening on the left if (rightHasSideEffects) { if (CostAnalyzer(left).cost < MIN_COST) { return nullptr; // avoidable code is too cheap } if (leftEffects.invalidates(rightEffects)) { return nullptr; // cannot reorder } std::swap(left, right); } else if (leftHasSideEffects) { if (CostAnalyzer(right).cost < MIN_COST) { return nullptr; // avoidable code is too cheap } } else { // no side effects, reorder based on cost estimation auto leftCost = CostAnalyzer(left).cost; auto rightCost = CostAnalyzer(right).cost; if (std::max(leftCost, rightCost) < MIN_COST) { return nullptr; // avoidable code is too cheap } // canonicalize with expensive code on the right if (leftCost > rightCost) { std::swap(left, right); } } // worth it! perform conditionalization Builder builder(*getModule()); if (binary->op == OrInt32) { return builder.makeIf( left, builder.makeConst(Literal(int32_t(1))), right); } else { // & return builder.makeIf( left, right, builder.makeConst(Literal(int32_t(0)))); } } // We can combine `and` operations, e.g. // (x == 0) & (y == 0) ==> (x | y) == 0 Expression* combineAnd(Binary* curr) { assert(curr->op == AndInt32); using namespace Abstract; using namespace Match; { // (i32(x) == 0) & (i32(y) == 0) ==> i32(x | y) == 0 // (i64(x) == 0) & (i64(y) == 0) ==> i64(x | y) == 0 Expression *x, *y; if (matches(curr->left, unary(EqZ, any(&x))) && matches(curr->right, unary(EqZ, any(&y))) && x->type == y->type) { auto* inner = curr->left->cast(); inner->value = Builder(*getModule()).makeBinary(getBinary(x->type, Or), x, y); return inner; } } { // Binary operations that inverse a bitwise AND can be // reordered. If F(x) = binary(x, c), and F(x) preserves AND, // that is, // // F(x) & F(y) == F(x | y) // // Then also // // binary(x, c) & binary(y, c) => binary(x | y, c) Binary *bx, *by; Expression *x, *y; Const *cx, *cy; if (matches(curr->left, binary(&bx, any(&x), ival(&cx))) && matches(curr->right, binary(&by, any(&y), ival(&cy))) && bx->op == by->op && x->type == y->type && cx->value == cy->value && inversesAnd(bx)) { by->op = getBinary(x->type, Or); by->type = x->type; by->left = x; by->right = y; bx->left = by; return bx; } } { // Binary operations that preserve a bitwise AND can be // reordered. If F(x) = binary(x, c), and F(x) preserves AND, // that is, // // F(x) & F(y) == F(x & y) // // Then also // // binary(x, c) & binary(y, c) => binary(x & y, c) Binary *bx, *by; Expression *x, *y; Const *cx, *cy; if (matches(curr->left, binary(&bx, any(&x), ival(&cx))) && matches(curr->right, binary(&by, any(&y), ival(&cy))) && bx->op == by->op && x->type == y->type && cx->value == cy->value && preserveAnd(bx)) { by->op = getBinary(x->type, And); by->type = x->type; by->left = x; by->right = y; bx->left = by; return bx; } } return nullptr; } // We can combine `or` operations, e.g. // (x > y) | (x == y) ==> x >= y // (x != 0) | (y != 0) ==> (x | y) != 0 Expression* combineOr(Binary* curr) { assert(curr->op == OrInt32); using namespace Abstract; using namespace Match; if (auto* left = curr->left->dynCast()) { if (auto* right = curr->right->dynCast()) { if (left->op != right->op && ExpressionAnalyzer::equal(left->left, right->left) && ExpressionAnalyzer::equal(left->right, right->right) && !effects(left->left).hasSideEffects() && !effects(left->right).hasSideEffects()) { switch (left->op) { // (x > y) | (x == y) ==> x >= y case EqInt32: { if (right->op == GtSInt32) { left->op = GeSInt32; return left; } break; } default: { } } } } } { // Binary operations that inverses a bitwise OR to AND. // If F(x) = binary(x, c), and F(x) inverses OR, // that is, // // F(x) | F(y) == F(x & y) // // Then also // // binary(x, c) | binary(y, c) => binary(x & y, c) Binary *bx, *by; Expression *x, *y; Const *cx, *cy; if (matches(curr->left, binary(&bx, any(&x), ival(&cx))) && matches(curr->right, binary(&by, any(&y), ival(&cy))) && bx->op == by->op && x->type == y->type && cx->value == cy->value && inversesOr(bx)) { by->op = getBinary(x->type, And); by->type = x->type; by->left = x; by->right = y; bx->left = by; return bx; } } { // Binary operations that preserve a bitwise OR can be // reordered. If F(x) = binary(x, c), and F(x) preserves OR, // that is, // // F(x) | F(y) == F(x | y) // // Then also // // binary(x, c) | binary(y, c) => binary(x | y, c) Binary *bx, *by; Expression *x, *y; Const *cx, *cy; if (matches(curr->left, binary(&bx, any(&x), ival(&cx))) && matches(curr->right, binary(&by, any(&y), ival(&cy))) && bx->op == by->op && x->type == y->type && cx->value == cy->value && preserveOr(bx)) { by->op = getBinary(x->type, Or); by->type = x->type; by->left = x; by->right = y; bx->left = by; return bx; } } return nullptr; } // Check whether an operation preserves the Or operation through it, that is, // // F(x | y) = F(x) | F(y) // // Mathematically that means F is homomorphic with respect to the | operation. // // F(x) is seen as taking a single parameter of its first child. That is, the // first child is |x|, and the rest is constant. For example, if we are given // a binary with operation != and the right child is a constant 0, then // F(x) = (x != 0). bool preserveOr(Binary* curr) { using namespace Abstract; using namespace Match; // (x != 0) | (y != 0) ==> (x | y) != 0 // This effectively checks if any bits are set in x or y. if (matches(curr, binary(Ne, any(), ival(0)))) { return true; } // (x < 0) | (y < 0) ==> (x | y) < 0 // This effectively checks if x or y have the sign bit set. if (matches(curr, binary(LtS, any(), ival(0)))) { return true; } return false; } // Check whether an operation inverses the Or operation to And, that is, // // F(x | y) = F(x) & F(y) // // Mathematically that means F is homomorphic with respect to the | operation. // // F(x) is seen as taking a single parameter of its first child. That is, the // first child is |x|, and the rest is constant. For example, if we are given // a binary with operation != and the right child is a constant 0, then // F(x) = (x != 0). bool inversesOr(Binary* curr) { using namespace Abstract; using namespace Match; // (x >= 0) | (y >= 0) ==> (x & y) >= 0 if (matches(curr, binary(GeS, any(), ival(0)))) { return true; } // (x !=-1) | (y !=-1) ==> (x & y) !=-1 if (matches(curr, binary(Ne, any(), ival(-1)))) { return true; } return false; } // Check whether an operation preserves the And operation through it, that is, // // F(x & y) = F(x) & F(y) // // Mathematically that means F is homomorphic with respect to the & operation. // // F(x) is seen as taking a single parameter of its first child. That is, the // first child is |x|, and the rest is constant. For example, if we are given // a binary with operation != and the right child is a constant 0, then // F(x) = (x != 0). bool preserveAnd(Binary* curr) { using namespace Abstract; using namespace Match; // (x < 0) & (y < 0) ==> (x & y) < 0 if (matches(curr, binary(LtS, any(), ival(0)))) { return true; } // (x == -1) & (y == -1) ==> (x & y) == -1 if (matches(curr, binary(Eq, any(), ival(-1)))) { return true; } return false; } // Check whether an operation inverses the And operation to Or, that is, // // F(x & y) = F(x) | F(y) // // Mathematically that means F is homomorphic with respect to the & operation. // // F(x) is seen as taking a single parameter of its first child. That is, the // first child is |x|, and the rest is constant. For example, if we are given // a binary with operation != and the right child is a constant 0, then // F(x) = (x != 0). bool inversesAnd(Binary* curr) { using namespace Abstract; using namespace Match; // (x >= 0) & (y >= 0) ==> (x | y) >= 0 if (matches(curr, binary(GeS, any(), ival(0)))) { return true; } return false; } // fold constant factors into the offset void optimizeMemoryAccess(Expression*& ptr, Address& offset) { // ptr may be a const, but it isn't worth folding that in (we still have a // const); in fact, it's better to do the opposite for gzip purposes as well // as for readability. auto* last = ptr->dynCast(); if (last) { uint64_t value64 = last->value.getInteger(); uint64_t offset64 = offset; if (getModule()->memory.is64()) { last->value = Literal(int64_t(value64 + offset64)); offset = 0; } else { // don't do this if it would wrap the pointer if (value64 <= uint64_t(std::numeric_limits::max()) && offset64 <= uint64_t(std::numeric_limits::max()) && value64 + offset64 <= uint64_t(std::numeric_limits::max())) { last->value = Literal(int32_t(value64 + offset64)); offset = 0; } } } } // Optimize a multiply by a power of two on the right, which // can be a shift. // This doesn't shrink code size, and VMs likely optimize it anyhow, // but it's still worth doing since // * Often shifts are more common than muls. // * The constant is smaller. template Expression* optimizePowerOf2Mul(Binary* binary, T c) { static_assert(std::is_same::value || std::is_same::value, "type mismatch"); auto shifts = Bits::countTrailingZeroes(c); binary->op = std::is_same::value ? ShlInt32 : ShlInt64; binary->right->cast()->value = Literal(static_cast(shifts)); return binary; } // Optimize an unsigned divide / remainder by a power of two on the right // This doesn't shrink code size, and VMs likely optimize it anyhow, // but it's still worth doing since // * Usually ands are more common than urems. // * The constant is slightly smaller. template Expression* optimizePowerOf2URem(Binary* binary, T c) { static_assert(std::is_same::value || std::is_same::value, "type mismatch"); binary->op = std::is_same::value ? AndInt32 : AndInt64; binary->right->cast()->value = Literal(c - 1); return binary; } template Expression* optimizePowerOf2UDiv(Binary* binary, T c) { static_assert(std::is_same::value || std::is_same::value, "type mismatch"); auto shifts = Bits::countTrailingZeroes(c); binary->op = std::is_same::value ? ShrUInt32 : ShrUInt64; binary->right->cast()->value = Literal(static_cast(shifts)); return binary; } template Expression* optimizePowerOf2FDiv(Binary* binary, T c) { // // x / C_pot => x * (C_pot ^ -1) // // Explanation: // Floating point numbers are represented as: // ((-1) ^ sign) * (2 ^ (exp - bias)) * (1 + significand) // // If we have power of two numbers, then the mantissa (significand) // is all zeros. Let's focus on the exponent, ignoring the sign part: // (2 ^ (exp - bias)) // // and for inverted power of two floating point: // 1.0 / (2 ^ (exp - bias)) -> 2 ^ -(exp - bias) // // So inversion of C_pot is valid because it changes only the sign // of the exponent part and doesn't touch the significand part, // which remains the same (zeros). static_assert(std::is_same::value || std::is_same::value, "type mismatch"); double invDivisor = 1.0 / (double)c; binary->op = std::is_same::value ? MulFloat32 : MulFloat64; binary->right->cast()->value = Literal(static_cast(invDivisor)); return binary; } Expression* makeZeroExt(Expression* curr, int32_t bits) { Builder builder(*getModule()); return builder.makeBinary( AndInt32, curr, builder.makeConst(Literal(Bits::lowBitMask(bits)))); } // given an "almost" sign extend - either a proper one, or it // has too many shifts left - we remove the sign extend. If there are // too many shifts, we split the shifts first, so this removes the // two sign extend shifts and adds one (smaller one) Expression* removeAlmostSignExt(Binary* outer) { auto* inner = outer->left->cast(); auto* outerConst = outer->right->cast(); auto* innerConst = inner->right->cast(); auto* value = inner->left; if (outerConst->value == innerConst->value) { return value; } // add a shift, by reusing the existing node innerConst->value = innerConst->value.sub(outerConst->value); return inner; } // check if an expression is already sign-extended bool isSignExted(Expression* curr, Index bits) { if (Properties::getSignExtValue(curr)) { return Properties::getSignExtBits(curr) == bits; } if (auto* get = curr->dynCast()) { // check what we know about the local return localInfo[get->index].signExtedBits == bits; } return false; } // optimize trivial math operations, given that the right side of a binary // is a constant Expression* optimizeWithConstantOnRight(Binary* curr) { using namespace Match; using namespace Abstract; Builder builder(*getModule()); Expression* left; auto* right = curr->right->cast(); auto type = curr->right->type; // Operations on zero if (matches(curr, binary(Shl, any(&left), ival(0))) || matches(curr, binary(ShrU, any(&left), ival(0))) || matches(curr, binary(ShrS, any(&left), ival(0))) || matches(curr, binary(Or, any(&left), ival(0))) || matches(curr, binary(Xor, any(&left), ival(0)))) { return left; } if (matches(curr, binary(Mul, pure(&left), ival(0))) || matches(curr, binary(And, pure(&left), ival(0)))) { return right; } // -x * C ==> x * -C, if shrinkLevel != 0 or C != C_pot // -x * C ==> -(x * C), otherwise // where x, C are integers Binary* inner; if (matches( curr, binary(Mul, binary(&inner, Sub, ival(0), any(&left)), ival()))) { if (getPassOptions().shrinkLevel != 0 || !Bits::isPowerOf2(right->value.getInteger())) { right->value = right->value.neg(); curr->left = left; return curr; } else { curr->left = left; Const* zero = inner->left->cast(); return builder.makeBinary(inner->op, zero, curr); } } // x == 0 ==> eqz x if (matches(curr, binary(Eq, any(&left), ival(0)))) { return builder.makeUnary(Abstract::getUnary(type, EqZ), left); } // Operations on one // (signed)x % 1 ==> 0 if (matches(curr, binary(RemS, pure(&left), ival(1)))) { right->value = Literal::makeZero(type); return right; } // (signed)x % C_pot != 0 ==> (x & (abs(C_pot) - 1)) != 0 { Const* c; Binary* inner; if (matches(curr, binary(Ne, binary(&inner, RemS, any(), ival(&c)), ival(0))) && (c->value.isSignedMin() || Bits::isPowerOf2(c->value.abs().getInteger()))) { inner->op = Abstract::getBinary(c->type, And); if (c->value.isSignedMin()) { c->value = Literal::makeSignedMax(c->type); } else { c->value = c->value.abs().sub(Literal::makeOne(c->type)); } return curr; } } // i32(bool(x)) == 1 ==> i32(bool(x)) // i32(bool(x)) != 0 ==> i32(bool(x)) // i32(bool(x)) & 1 ==> i32(bool(x)) // i64(bool(x)) & 1 ==> i64(bool(x)) if ((matches(curr, binary(EqInt32, any(&left), i32(1))) || matches(curr, binary(NeInt32, any(&left), i32(0))) || matches(curr, binary(And, any(&left), ival(1)))) && Bits::getMaxBits(left, this) == 1) { return left; } // i64(bool(x)) == 1 ==> i32(bool(x)) // i64(bool(x)) != 0 ==> i32(bool(x)) if ((matches(curr, binary(EqInt64, any(&left), i64(1))) || matches(curr, binary(NeInt64, any(&left), i64(0)))) && Bits::getMaxBits(left, this) == 1) { return builder.makeUnary(WrapInt64, left); } // bool(x) != 1 ==> !bool(x) if (matches(curr, binary(Ne, any(&left), ival(1))) && Bits::getMaxBits(left, this) == 1) { return builder.makeUnary(Abstract::getUnary(type, EqZ), left); } // bool(x) ^ 1 ==> !bool(x) if (matches(curr, binary(Xor, any(&left), ival(1))) && Bits::getMaxBits(left, this) == 1) { auto* result = builder.makeUnary(Abstract::getUnary(type, EqZ), left); if (left->type == Type::i64) { // Xor's result is also an i64 in this case, but EqZ returns i32, so we // must expand it so that we keep returning the same value as before. // This means we replace a xor and a const with a xor and an extend, // which is still smaller (the const is 2 bytes, the extend just 1), and // also the extend may be removed by further work. result = builder.makeUnary(ExtendUInt32, result); } return result; } // bool(x) | 1 ==> 1 if (matches(curr, binary(Or, pure(&left), ival(1))) && Bits::getMaxBits(left, this) == 1) { return right; } // Operations on all 1s // x & -1 ==> x if (matches(curr, binary(And, any(&left), ival(-1)))) { return left; } // x | -1 ==> -1 if (matches(curr, binary(Or, pure(&left), ival(-1)))) { return right; } // (signed)x % -1 ==> 0 if (matches(curr, binary(RemS, pure(&left), ival(-1)))) { right->value = Literal::makeZero(type); return right; } // i32(x) / i32.min_s ==> x == i32.min_s if (matches( curr, binary(DivSInt32, any(), i32(std::numeric_limits::min())))) { curr->op = EqInt32; return curr; } // i64(x) / i64.min_s ==> i64(x == i64.min_s) // only for zero shrink level if (getPassOptions().shrinkLevel == 0 && matches( curr, binary(DivSInt64, any(), i64(std::numeric_limits::min())))) { curr->op = EqInt64; curr->type = Type::i32; return Builder(*getModule()).makeUnary(ExtendUInt32, curr); } // (unsigned)x < 0 ==> i32(0) if (matches(curr, binary(LtU, pure(&left), ival(0)))) { right->value = Literal::makeZero(Type::i32); right->type = Type::i32; return right; } // (unsigned)x <= -1 ==> i32(1) if (matches(curr, binary(LeU, pure(&left), ival(-1)))) { right->value = Literal::makeOne(Type::i32); right->type = Type::i32; return right; } // (unsigned)x > -1 ==> i32(0) if (matches(curr, binary(GtU, pure(&left), ival(-1)))) { right->value = Literal::makeZero(Type::i32); right->type = Type::i32; return right; } // (unsigned)x >= 0 ==> i32(1) if (matches(curr, binary(GeU, pure(&left), ival(0)))) { right->value = Literal::makeOne(Type::i32); right->type = Type::i32; return right; } // (unsigned)x < -1 ==> x != -1 // Friendlier to JS emitting as we don't need to write an unsigned -1 value // which is large. if (matches(curr, binary(LtU, any(), ival(-1)))) { curr->op = Abstract::getBinary(type, Ne); return curr; } // (unsigned)x <= 0 ==> x == 0 if (matches(curr, binary(LeU, any(), ival(0)))) { curr->op = Abstract::getBinary(type, Eq); return curr; } // (unsigned)x > 0 ==> x != 0 if (matches(curr, binary(GtU, any(), ival(0)))) { curr->op = Abstract::getBinary(type, Ne); return curr; } // (unsigned)x >= -1 ==> x == -1 if (matches(curr, binary(GeU, any(), ival(-1)))) { curr->op = Abstract::getBinary(type, Eq); return curr; } { Const* c; // (signed)x < (i32|i64).min_s ==> i32(0) if (matches(curr, binary(LtS, pure(&left), ival(&c))) && c->value.isSignedMin()) { right->value = Literal::makeZero(Type::i32); right->type = Type::i32; return right; } // (signed)x <= (i32|i64).max_s ==> i32(1) if (matches(curr, binary(LeS, pure(&left), ival(&c))) && c->value.isSignedMax()) { right->value = Literal::makeOne(Type::i32); right->type = Type::i32; return right; } // (signed)x > (i32|i64).max_s ==> i32(0) if (matches(curr, binary(GtS, pure(&left), ival(&c))) && c->value.isSignedMax()) { right->value = Literal::makeZero(Type::i32); right->type = Type::i32; return right; } // (signed)x >= (i32|i64).min_s ==> i32(1) if (matches(curr, binary(GeS, pure(&left), ival(&c))) && c->value.isSignedMin()) { right->value = Literal::makeOne(Type::i32); right->type = Type::i32; return right; } // (signed)x < (i32|i64).max_s ==> x != (i32|i64).max_s if (matches(curr, binary(LtS, any(), ival(&c))) && c->value.isSignedMax()) { curr->op = Abstract::getBinary(type, Ne); return curr; } // (signed)x <= (i32|i64).min_s ==> x == (i32|i64).min_s if (matches(curr, binary(LeS, any(), ival(&c))) && c->value.isSignedMin()) { curr->op = Abstract::getBinary(type, Eq); return curr; } // (signed)x > (i32|i64).min_s ==> x != (i32|i64).min_s if (matches(curr, binary(GtS, any(), ival(&c))) && c->value.isSignedMin()) { curr->op = Abstract::getBinary(type, Ne); return curr; } // (signed)x >= (i32|i64).max_s ==> x == (i32|i64).max_s if (matches(curr, binary(GeS, any(), ival(&c))) && c->value.isSignedMax()) { curr->op = Abstract::getBinary(type, Eq); return curr; } } // x * -1 ==> 0 - x if (matches(curr, binary(Mul, any(&left), ival(-1)))) { right->value = Literal::makeZero(type); curr->op = Abstract::getBinary(type, Sub); curr->left = right; curr->right = left; return curr; } { // ~(1 << x) aka (1 << x) ^ -1 ==> rotl(-2, x) Expression* x; if (matches(curr, binary(Xor, binary(Shl, ival(1), any(&x)), ival(-1)))) { curr->op = Abstract::getBinary(type, RotL); right->value = Literal::makeFromInt32(-2, type); curr->left = right; curr->right = x; return curr; } } { double value; if (matches(curr, binary(Sub, any(), fval(&value))) && value == 0.0) { // x - (-0.0) ==> x + 0.0 if (std::signbit(value)) { curr->op = Abstract::getBinary(type, Add); right->value = right->value.neg(); return curr; } else if (fastMath) { // x - 0.0 ==> x return curr->left; } } } { // x * 2.0 ==> x + x // but we apply this only for simple expressions like // local.get and global.get for avoid using extra local // variable. Expression* x; if (matches(curr, binary(Mul, any(&x), fval(2.0))) && (x->is() || x->is())) { curr->op = Abstract::getBinary(type, Abstract::Add); curr->right = ExpressionManipulator::copy(x, *getModule()); return curr; } } { // x + (-0.0) ==> x double value; if (fastMath && matches(curr, binary(Add, any(), fval(&value))) && value == 0.0 && std::signbit(value)) { return curr->left; } } // -x * fval(C) ==> x * -C // -x / fval(C) ==> x / -C if (matches(curr, binary(Mul, unary(Neg, any(&left)), fval())) || matches(curr, binary(DivS, unary(Neg, any(&left)), fval()))) { right->value = right->value.neg(); curr->left = left; return curr; } // x * -1.0 ==> // -x, if fastMath == true // -0.0 - x, if fastMath == false if (matches(curr, binary(Mul, any(), fval(-1.0)))) { if (fastMath) { return builder.makeUnary(Abstract::getUnary(type, Neg), left); } // x * -1.0 ==> -0.0 - x curr->op = Abstract::getBinary(type, Sub); right->value = Literal::makeZero(type).neg(); std::swap(curr->left, curr->right); return curr; } if (matches(curr, binary(Mul, any(&left), constant(1))) || matches(curr, binary(DivS, any(&left), constant(1))) || matches(curr, binary(DivU, any(&left), constant(1)))) { if (curr->type.isInteger() || fastMath) { return left; } } return nullptr; } // optimize trivial math operations, given that the left side of a binary // is a constant. since we canonicalize constants to the right for symmetrical // operations, we only need to handle asymmetrical ones here // TODO: templatize on type? Expression* optimizeWithConstantOnLeft(Binary* curr) { using namespace Match; using namespace Abstract; auto type = curr->left->type; auto* left = curr->left->cast(); // 0 <<>> x ==> 0 if (Abstract::hasAnyShift(curr->op) && left->value.isZero() && !effects(curr->right).hasSideEffects()) { return curr->left; } // (signed)-1 >> x ==> -1 // rotl(-1, x) ==> -1 // rotr(-1, x) ==> -1 if ((curr->op == Abstract::getBinary(type, ShrS) || curr->op == Abstract::getBinary(type, RotL) || curr->op == Abstract::getBinary(type, RotR)) && left->value.getInteger() == -1LL && !effects(curr->right).hasSideEffects()) { return curr->left; } { // C1 - (x + C2) ==> (C1 - C2) - x Const *c1, *c2; Expression* x; if (matches(curr, binary(Sub, ival(&c1), binary(Add, any(&x), ival(&c2))))) { left->value = c1->value.sub(c2->value); curr->right = x; return curr; } // C1 - (C2 - x) ==> x + (C1 - C2) if (matches(curr, binary(Sub, ival(&c1), binary(Sub, ival(&c2), any(&x))))) { left->value = c1->value.sub(c2->value); curr->op = Abstract::getBinary(type, Add); curr->right = x; std::swap(curr->left, curr->right); return curr; } } { // fval(C) / -x ==> -C / x Expression* right; if (matches(curr, binary(DivS, fval(), unary(Neg, any(&right))))) { left->value = left->value.neg(); curr->right = right; return curr; } } return nullptr; } // TODO: templatize on type? Expression* optimizeRelational(Binary* curr) { auto type = curr->right->type; if (curr->left->type.isInteger()) { if (curr->op == Abstract::getBinary(type, Abstract::Eq) || curr->op == Abstract::getBinary(type, Abstract::Ne)) { if (auto* left = curr->left->dynCast()) { // TODO: inequalities can also work, if the constants do not overflow // integer math, even on 2s complement, allows stuff like // x + 5 == 7 // => // x == 2 if (left->op == Abstract::getBinary(type, Abstract::Add)) { if (auto* leftConst = left->right->dynCast()) { if (auto* rightConst = curr->right->dynCast()) { return combineRelationalConstants( curr, left, leftConst, nullptr, rightConst); } else if (auto* rightBinary = curr->right->dynCast()) { if (rightBinary->op == Abstract::getBinary(type, Abstract::Add)) { if (auto* rightConst = rightBinary->right->dynCast()) { return combineRelationalConstants( curr, left, leftConst, rightBinary, rightConst); } } } } } } } // x - y == 0 => x == y // x - y != 0 => x != y // unsigned(x - y) > 0 => x != y // unsigned(x - y) <= 0 => x == y { using namespace Abstract; using namespace Match; Binary* inner; // unsigned(x - y) > 0 => x != y if (matches(curr, binary(GtU, binary(&inner, Sub, any(), any()), ival(0)))) { curr->op = Abstract::getBinary(type, Ne); curr->right = inner->right; curr->left = inner->left; return curr; } // unsigned(x - y) <= 0 => x == y if (matches(curr, binary(LeU, binary(&inner, Sub, any(), any()), ival(0)))) { curr->op = Abstract::getBinary(type, Eq); curr->right = inner->right; curr->left = inner->left; return curr; } // x - y == 0 => x == y // x - y != 0 => x != y // This is not true for signed comparisons like x -y < 0 due to overflow // effects (e.g. 8 - 0x80000000 < 0 is not the same as 8 < 0x80000000). if (matches(curr, binary(Eq, binary(&inner, Sub, any(), any()), ival(0))) || matches(curr, binary(Ne, binary(&inner, Sub, any(), any()), ival(0)))) { curr->right = inner->right; curr->left = inner->left; return curr; } } } return nullptr; } Expression* deduplicateUnary(Unary* unaryOuter) { if (auto* unaryInner = unaryOuter->value->dynCast()) { if (unaryInner->op == unaryOuter->op) { switch (unaryInner->op) { case NegFloat32: case NegFloat64: { // neg(neg(x)) ==> x return unaryInner->value; } case AbsFloat32: case CeilFloat32: case FloorFloat32: case TruncFloat32: case NearestFloat32: case AbsFloat64: case CeilFloat64: case FloorFloat64: case TruncFloat64: case NearestFloat64: { // unaryOp(unaryOp(x)) ==> unaryOp(x) return unaryInner; } case ExtendS8Int32: case ExtendS16Int32: { assert(getModule()->features.hasSignExt()); return unaryInner; } case EqZInt32: { // eqz(eqz(bool(x))) ==> bool(x) if (Bits::getMaxBits(unaryInner->value, this) == 1) { return unaryInner->value; } break; } default: { } } } } return nullptr; } Expression* deduplicateBinary(Binary* outer) { Type type = outer->type; if (type.isInteger()) { if (auto* inner = outer->right->dynCast()) { if (outer->op == inner->op) { if (!EffectAnalyzer(getPassOptions(), *getModule(), outer->left) .hasSideEffects()) { if (ExpressionAnalyzer::equal(inner->left, outer->left)) { // x - (x - y) ==> y // x ^ (x ^ y) ==> y if (outer->op == Abstract::getBinary(type, Abstract::Sub) || outer->op == Abstract::getBinary(type, Abstract::Xor)) { return inner->right; } // x & (x & y) ==> x & y // x | (x | y) ==> x | y if (outer->op == Abstract::getBinary(type, Abstract::And) || outer->op == Abstract::getBinary(type, Abstract::Or)) { return inner; } } if (ExpressionAnalyzer::equal(inner->right, outer->left) && canReorder(outer->left, inner->left)) { // x ^ (y ^ x) ==> y // (note that we need the check for reordering here because if // e.g. y writes to a local that x reads, the second appearance // of x would be different from the first) if (outer->op == Abstract::getBinary(type, Abstract::Xor)) { return inner->left; } // x & (y & x) ==> y & x // x | (y | x) ==> y | x // (here we need the check for reordering for the more obvious // reason that previously x appeared before y, and now y appears // first; or, if we tried to emit x [&|] y here, reversing the // order, we'd be in the same situation as the previous comment) if (outer->op == Abstract::getBinary(type, Abstract::And) || outer->op == Abstract::getBinary(type, Abstract::Or)) { return inner; } } } } } if (auto* inner = outer->left->dynCast()) { if (outer->op == inner->op) { if (!EffectAnalyzer(getPassOptions(), *getModule(), outer->right) .hasSideEffects()) { if (ExpressionAnalyzer::equal(inner->right, outer->right)) { // (x ^ y) ^ y ==> x if (outer->op == Abstract::getBinary(type, Abstract::Xor)) { return inner->left; } // (x % y) % y ==> x % y // (x & y) & y ==> x & y // (x | y) | y ==> x | y if (outer->op == Abstract::getBinary(type, Abstract::RemS) || outer->op == Abstract::getBinary(type, Abstract::RemU) || outer->op == Abstract::getBinary(type, Abstract::And) || outer->op == Abstract::getBinary(type, Abstract::Or)) { return inner; } } // See comments in the parallel code earlier about ordering here. if (ExpressionAnalyzer::equal(inner->left, outer->right) && canReorder(inner->left, inner->right)) { // (x ^ y) ^ x ==> y if (outer->op == Abstract::getBinary(type, Abstract::Xor)) { return inner->right; } // (x & y) & x ==> x & y // (x | y) | x ==> x | y if (outer->op == Abstract::getBinary(type, Abstract::And) || outer->op == Abstract::getBinary(type, Abstract::Or)) { return inner; } } } } } } return nullptr; } // given a relational binary with a const on both sides, combine the constants // left is also a binary, and has a constant; right may be just a constant, in // which case right is nullptr Expression* combineRelationalConstants(Binary* binary, Binary* left, Const* leftConst, Binary* right, Const* rightConst) { auto type = binary->right->type; // we fold constants to the right Literal extra = leftConst->value; if (left->op == Abstract::getBinary(type, Abstract::Sub)) { extra = extra.neg(); } if (right && right->op == Abstract::getBinary(type, Abstract::Sub)) { extra = extra.neg(); } rightConst->value = rightConst->value.sub(extra); binary->left = left->left; return binary; } Expression* optimizeMemoryCopy(MemoryCopy* memCopy) { auto& options = getPassOptions(); if (options.ignoreImplicitTraps || options.trapsNeverHappen) { if (ExpressionAnalyzer::equal(memCopy->dest, memCopy->source)) { // memory.copy(x, x, sz) ==> {drop(x), drop(x), drop(sz)} Builder builder(*getModule()); return builder.makeBlock({builder.makeDrop(memCopy->dest), builder.makeDrop(memCopy->source), builder.makeDrop(memCopy->size)}); } } // memory.copy(dst, src, C) ==> store(dst, load(src)) if (auto* csize = memCopy->size->dynCast()) { auto bytes = csize->value.getInteger(); Builder builder(*getModule()); switch (bytes) { case 0: { if (options.ignoreImplicitTraps || options.trapsNeverHappen) { // memory.copy(dst, src, 0) ==> {drop(dst), drop(src)} return builder.makeBlock({builder.makeDrop(memCopy->dest), builder.makeDrop(memCopy->source)}); } break; } case 1: case 2: case 4: { return builder.makeStore( bytes, // bytes 0, // offset 1, // align memCopy->dest, builder.makeLoad(bytes, false, 0, 1, memCopy->source, Type::i32), Type::i32); } case 8: { return builder.makeStore( bytes, // bytes 0, // offset 1, // align memCopy->dest, builder.makeLoad(bytes, false, 0, 1, memCopy->source, Type::i64), Type::i64); } case 16: { if (options.shrinkLevel == 0) { // This adds an extra 2 bytes so apply it only for // minimal shrink level if (getModule()->features.hasSIMD()) { return builder.makeStore( bytes, // bytes 0, // offset 1, // align memCopy->dest, builder.makeLoad( bytes, false, 0, 1, memCopy->source, Type::v128), Type::v128); } } break; } default: { } } } return nullptr; } Expression* optimizeMemoryFill(MemoryFill* memFill) { if (memFill->type == Type::unreachable) { return nullptr; } if (!memFill->size->is()) { return nullptr; } auto& options = getPassOptions(); Builder builder(*getModule()); auto* csize = memFill->size->cast(); auto bytes = csize->value.getInteger(); if (bytes == 0LL && (options.ignoreImplicitTraps || options.trapsNeverHappen)) { // memory.fill(d, v, 0) ==> { drop(d), drop(v) } return builder.makeBlock( {builder.makeDrop(memFill->dest), builder.makeDrop(memFill->value)}); } const uint32_t offset = 0, align = 1; if (auto* cvalue = memFill->value->dynCast()) { uint32_t value = cvalue->value.geti32() & 0xFF; // memory.fill(d, C1, C2) ==> // store(d, (C1 & 0xFF) * (-1U / max(bytes))) switch (bytes) { case 1: { return builder.makeStore(1, // bytes offset, align, memFill->dest, builder.makeConst(value), Type::i32); } case 2: { return builder.makeStore(2, offset, align, memFill->dest, builder.makeConst(value * 0x0101U), Type::i32); } case 4: { // transform only when "value" or shrinkLevel equal to zero due to // it could increase size by several bytes if (value == 0 || options.shrinkLevel == 0) { return builder.makeStore( 4, offset, align, memFill->dest, builder.makeConst(value * 0x01010101U), Type::i32); } break; } case 8: { // transform only when "value" or shrinkLevel equal to zero due to // it could increase size by several bytes if (value == 0 || options.shrinkLevel == 0) { return builder.makeStore( 8, offset, align, memFill->dest, builder.makeConst(value * 0x0101010101010101ULL), Type::i64); } break; } case 16: { if (options.shrinkLevel == 0) { if (getModule()->features.hasSIMD()) { uint8_t values[16]; std::fill_n(values, 16, (uint8_t)value); return builder.makeStore(16, offset, align, memFill->dest, builder.makeConst(values), Type::v128); } else { // { i64.store(d, C', 0), i64.store(d, C', 8) } auto destType = memFill->dest->type; Index tempLocal = builder.addVar(getFunction(), destType); return builder.makeBlock({ builder.makeStore( 8, offset, align, builder.makeLocalTee(tempLocal, memFill->dest, destType), builder.makeConst(value * 0x0101010101010101ULL), Type::i64), builder.makeStore( 8, offset + 8, align, builder.makeLocalGet(tempLocal, destType), builder.makeConst(value * 0x0101010101010101ULL), Type::i64), }); } } break; } default: { } } } // memory.fill(d, v, 1) ==> store8(d, v) if (bytes == 1LL) { return builder.makeStore( 1, offset, align, memFill->dest, memFill->value, Type::i32); } return nullptr; } // given a binary expression with equal children and no side effects in // either, we can fold various things Expression* optimizeBinaryWithEqualEffectlessChildren(Binary* binary) { // TODO add: perhaps worth doing 2*x if x is quite large? switch (binary->op) { case SubInt32: case XorInt32: case SubInt64: case XorInt64: return LiteralUtils::makeZero(binary->left->type, *getModule()); case NeInt32: case LtSInt32: case LtUInt32: case GtSInt32: case GtUInt32: case NeInt64: case LtSInt64: case LtUInt64: case GtSInt64: case GtUInt64: return LiteralUtils::makeZero(Type::i32, *getModule()); case AndInt32: case OrInt32: case AndInt64: case OrInt64: return binary->left; case EqInt32: case LeSInt32: case LeUInt32: case GeSInt32: case GeUInt32: case EqInt64: case LeSInt64: case LeUInt64: case GeSInt64: case GeUInt64: return LiteralUtils::makeFromInt32(1, Type::i32, *getModule()); default: return nullptr; } } BinaryOp invertBinaryOp(BinaryOp op) { // use de-morgan's laws switch (op) { case EqInt32: return NeInt32; case NeInt32: return EqInt32; case LtSInt32: return GeSInt32; case LtUInt32: return GeUInt32; case LeSInt32: return GtSInt32; case LeUInt32: return GtUInt32; case GtSInt32: return LeSInt32; case GtUInt32: return LeUInt32; case GeSInt32: return LtSInt32; case GeUInt32: return LtUInt32; case EqInt64: return NeInt64; case NeInt64: return EqInt64; case LtSInt64: return GeSInt64; case LtUInt64: return GeUInt64; case LeSInt64: return GtSInt64; case LeUInt64: return GtUInt64; case GtSInt64: return LeSInt64; case GtUInt64: return LeUInt64; case GeSInt64: return LtSInt64; case GeUInt64: return LtUInt64; case EqFloat32: return NeFloat32; case NeFloat32: return EqFloat32; case EqFloat64: return NeFloat64; case NeFloat64: return EqFloat64; default: return InvalidBinary; } } BinaryOp reverseRelationalOp(BinaryOp op) { switch (op) { case EqInt32: return EqInt32; case NeInt32: return NeInt32; case LtSInt32: return GtSInt32; case LtUInt32: return GtUInt32; case LeSInt32: return GeSInt32; case LeUInt32: return GeUInt32; case GtSInt32: return LtSInt32; case GtUInt32: return LtUInt32; case GeSInt32: return LeSInt32; case GeUInt32: return LeUInt32; case EqInt64: return EqInt64; case NeInt64: return NeInt64; case LtSInt64: return GtSInt64; case LtUInt64: return GtUInt64; case LeSInt64: return GeSInt64; case LeUInt64: return GeUInt64; case GtSInt64: return LtSInt64; case GtUInt64: return LtUInt64; case GeSInt64: return LeSInt64; case GeUInt64: return LeUInt64; case EqFloat32: return EqFloat32; case NeFloat32: return NeFloat32; case LtFloat32: return GtFloat32; case LeFloat32: return GeFloat32; case GtFloat32: return LtFloat32; case GeFloat32: return LeFloat32; case EqFloat64: return EqFloat64; case NeFloat64: return NeFloat64; case LtFloat64: return GtFloat64; case LeFloat64: return GeFloat64; case GtFloat64: return LtFloat64; case GeFloat64: return LeFloat64; default: return InvalidBinary; } } BinaryOp makeUnsignedBinaryOp(BinaryOp op) { switch (op) { case DivSInt32: return DivUInt32; case RemSInt32: return RemUInt32; case ShrSInt32: return ShrUInt32; case LtSInt32: return LtUInt32; case LeSInt32: return LeUInt32; case GtSInt32: return GtUInt32; case GeSInt32: return GeUInt32; case DivSInt64: return DivUInt64; case RemSInt64: return RemUInt64; case ShrSInt64: return ShrUInt64; case LtSInt64: return LtUInt64; case LeSInt64: return LeUInt64; case GtSInt64: return GtUInt64; case GeSInt64: return GeUInt64; default: return InvalidBinary; } } bool shouldCanonicalize(Binary* binary) { if ((binary->op == SubInt32 || binary->op == SubInt64) && binary->right->is() && !binary->left->is()) { return true; } if (Properties::isSymmetric(binary) || binary->isRelational()) { return true; } switch (binary->op) { case AddFloat32: case MulFloat32: case AddFloat64: case MulFloat64: { // If the LHS is known to be non-NaN, the operands can commute. // We don't care about the RHS because right now we only know if // an expression is non-NaN if it is constant, but if the RHS is // constant, then this expression is already canonicalized. if (auto* c = binary->left->dynCast()) { return !c->value.isNaN(); } return false; } default: return false; } } // Optimize an if-else or a select, something with a condition and two // arms with outputs. template void optimizeTernary(T* curr) { using namespace Abstract; using namespace Match; Builder builder(*getModule()); // If one arm is an operation and the other is an appropriate constant, we // can move the operation outside (where it may be further optimized), e.g. // // (select // (i32.eqz (X)) // (i32.const 0|1) // (Y) // ) // => // (i32.eqz // (select // (X) // (i32.const 1|0) // (Y) // ) // ) // // Ignore unreachable code here; leave that for DCE. if (curr->type != Type::unreachable && curr->ifTrue->type != Type::unreachable && curr->ifFalse->type != Type::unreachable) { Unary* un; Const* c; auto check = [&](Expression* a, Expression* b) { return matches(b, bval(&c)) && matches(a, unary(&un, EqZ, any())); }; if (check(curr->ifTrue, curr->ifFalse) || check(curr->ifFalse, curr->ifTrue)) { // The new type of curr will be that of the value of the unary, as after // we move the unary out, its value is curr's direct child. auto newType = un->value->type; auto updateArm = [&](Expression* arm) -> Expression* { if (arm == un) { // This is the arm that had the eqz, which we need to remove. return un->value; } else { // This is the arm with the constant, which we need to flip. // Note that we also need to set the type to match the other arm. c->value = Literal::makeFromInt32(1 - c->value.getInteger(), newType); c->type = newType; return c; } }; curr->ifTrue = updateArm(curr->ifTrue); curr->ifFalse = updateArm(curr->ifFalse); un->value = curr; curr->finalize(newType); return replaceCurrent(un); } } { // Identical code on both arms can be folded out, e.g. // // (select // (i32.eqz (X)) // (i32.eqz (Y)) // (Z) // ) // => // (i32.eqz // (select // (X) // (Y) // (Z) // ) // ) // // Continue doing this while we can, noting the chain of moved expressions // as we go, then do a single replaceCurrent() at the end. SmallVector chain; while (1) { // Ignore control flow structures (which are handled in MergeBlocks). if (!Properties::isControlFlowStructure(curr->ifTrue) && ExpressionAnalyzer::shallowEqual(curr->ifTrue, curr->ifFalse)) { // TODO: consider the case with more than one child. ChildIterator ifTrueChildren(curr->ifTrue); if (ifTrueChildren.children.size() == 1) { // ifTrue and ifFalse's children will become the direct children of // curr, and so they must be compatible to allow for a proper new // type after the transformation. // // At minimum an LUB is required, as shown here: // // (if // (condition) // (drop (i32.const 1)) // (drop (f64.const 2.0)) // ) // // However, that may not be enough, as with nominal types we can // have things like this: // // (if // (condition) // (struct.get $A 1 (..)) // (struct.get $B 1 (..)) // ) // // It is possible that the LUB of $A and $B does not contain field // "1". With structural types this specific problem is not possible, // and it appears to be the case that with the GC MVP there is no // instruction that poses a problem, but in principle it can happen // there as well, if we add an instruction that returns the number // of fields in a type, for example. For that reason, and to avoid // a difference between structural and nominal typing here, disallow // subtyping in both. (Note: In that example, the problem only // happens because the type is not part of the struct.get - we infer // it from the reference. That is why after hoisting the struct.get // out, and computing a new type for the if that is now the child of // the single struct.get, we get a struct.get of a supertype. So in // principle we could fix this by modifying the IR as well, but the // problem is more general, so avoid that.) ChildIterator ifFalseChildren(curr->ifFalse); auto* ifTrueChild = *ifTrueChildren.begin(); auto* ifFalseChild = *ifFalseChildren.begin(); bool validTypes = ifTrueChild->type == ifFalseChild->type; // In addition, after we move code outside of curr then we need to // not change unreachability - if we did, we'd need to propagate // that further, and we leave such work to DCE and Vacuum anyhow. // This can happen in something like this for example, where the // outer type changes from i32 to unreachable if we move the // returns outside: // // (if (result i32) // (local.get $x) // (return // (local.get $y) // ) // (return // (local.get $z) // ) // ) assert(curr->ifTrue->type == curr->ifFalse->type); auto newOuterType = curr->ifTrue->type; if ((newOuterType == Type::unreachable) != (curr->type == Type::unreachable)) { validTypes = false; } // If the expression we are about to move outside has side effects, // then we cannot do so in general with a select: we'd be reducing // the amount of the effects as well as moving them. For an if, // the side effects execute once, so there is no problem. // TODO: handle certain side effects when possible in select bool validEffects = std::is_same::value || !ShallowEffectAnalyzer( getPassOptions(), *getModule(), curr->ifTrue) .hasSideEffects(); // In addition, check for specific limitations of select. bool validChildren = !std::is_same::value || Properties::canEmitSelectWithArms(ifTrueChild, ifFalseChild); if (validTypes && validEffects && validChildren) { // Replace ifTrue with its child. curr->ifTrue = ifTrueChild; // Relace ifFalse with its child, and reuse that node outside. auto* reuse = curr->ifFalse; curr->ifFalse = ifFalseChild; // curr's type may have changed, if the instructions we moved out // had different input types than output types. curr->finalize(); // Point to curr from the code that is now outside of it. *ChildIterator(reuse).begin() = curr; if (!chain.empty()) { // We've already moved things out, so chain them to there. That // is, the end of the chain should now point to reuse (which // in turn already points to curr). *ChildIterator(chain.back()).begin() = reuse; } chain.push_back(reuse); continue; } } } break; } if (!chain.empty()) { // The beginning of the chain is the new top parent. return replaceCurrent(chain[0]); } } } }; Pass* createOptimizeInstructionsPass() { return new OptimizeInstructions; } } // namespace wasm binaryen-version_108/src/passes/PickLoadSigns.cpp000066400000000000000000000077431423707623100222430ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include namespace wasm { // Adjust load signedness based on usage. If a load only has uses that sign or // unsign it anyhow, then it could be either, and picking the popular one can // help remove the most sign/unsign operations // unsigned, then it could be either struct PickLoadSigns : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new PickLoadSigns; } struct Usage { Index signedUsages = 0; Index signedBits; Index unsignedUsages = 0; Index unsignedBits; Index totalUsages = 0; }; std::vector usages; // local index => usage // loads that write to a local => the local std::unordered_map loads; void doWalkFunction(Function* func) { // prepare usages.resize(func->getNumLocals()); // walk ExpressionStackWalker::doWalkFunction(func); // optimize optimize(); } void visitLocalGet(LocalGet* curr) { // this is a use. check from the context what it is, signed or unsigned, // etc. auto& usage = usages[curr->index]; usage.totalUsages++; if (expressionStack.size() >= 2) { auto* parent = expressionStack[expressionStack.size() - 2]; if (Properties::getZeroExtValue(parent)) { auto bits = Properties::getZeroExtBits(parent); if (usage.unsignedUsages == 0) { usage.unsignedBits = bits; } else if (usage.unsignedBits != bits) { usage.unsignedBits = 0; } usage.unsignedUsages++; } else if (expressionStack.size() >= 3) { auto* grandparent = expressionStack[expressionStack.size() - 3]; if (Properties::getSignExtValue(grandparent)) { auto bits = Properties::getSignExtBits(grandparent); if (usage.signedUsages == 0) { usage.signedBits = bits; } else if (usage.signedBits != bits) { usage.signedBits = 0; } usage.signedUsages++; } } } } void visitLocalSet(LocalSet* curr) { if (curr->isTee()) { // we can't modify a tee, the value is used elsewhere return; } if (auto* load = curr->value->dynCast()) { loads[load] = curr->index; } } void optimize() { // optimize based on the info we saw for (auto& [load, index] : loads) { auto& usage = usages[index]; // if we can't optimize, give up if (usage.totalUsages == 0 || // no usages, so no idea usage.signedUsages + usage.unsignedUsages != usage.totalUsages || // non-sign/unsigned usages, so cannot change (usage.signedUsages != 0 && usage.signedBits != load->bytes * 8) || // sign usages exist but the wrong size (usage.unsignedUsages != 0 && usage.unsignedBits != load->bytes * 8)) { // unsigned usages exist but the wrong size continue; } // Atomic operations are always unsigned, never signed. if (load->isAtomic) { continue; } // we can pick the optimal one. our hope is to remove 2 items per // signed use (two shifts), so we factor that in load->signed_ = usage.signedUsages * 2 >= usage.unsignedUsages; } } }; Pass* createPickLoadSignsPass() { return new PickLoadSigns(); } } // namespace wasm binaryen-version_108/src/passes/Poppify.cpp000066400000000000000000000400451423707623100211670ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Poppify.cpp - Transform Binaryen IR to Poppy IR. // // Poppy IR represents stack machine code using normal Binaryen IR types by // imposing the following constraints: // // 1. Function bodies and children of control flow (except If conditions) must // be blocks. // // 2. Blocks may have any Expressions as children. The sequence of instructions // in a block follows the same validation rules as in WebAssembly. That // means that any expression may have a concrete type, not just the final // expression in the block. // // 3. All other children must be Pops, which are used to determine the input // stack type of each instruction. Pops may not have `unreachable` type. // Pops must correspond to the results of previous expressions or block // inputs in a stack discipline. // // 4. Only control flow structures and instructions that have polymorphic // unreachable behavior in WebAssembly may have unreachable type. Blocks may // be unreachable when they are not branch targets and when they have an // unreachable child. Note that this means a block may be unreachable even // if it would otherwise have a concrete type, unlike in Binaryen IR. For // example, this block could have unreachable type in Poppy IR but would // have to have type i32 in Binaryen IR: // // (block // (unreachable) // (i32.const 1) // ) // // As an example of Poppification, the following Binaryen IR Function: // // (func $foo (result i32) // (i32.add // (i32.const 42) // (i32.const 5) // ) // ) // // would look like this in Poppy IR: // // (func $foo (result i32) // (block // (i32.const 42) // (i32.const 5) // (i32.add // (pop i32) // (pop i32) // ) // ) // ) // // Notice that the sequence of instructions in the block is now identical to the // sequence of instructions in a WebAssembly binary. Also note that Poppy IR's // validation rules are largely additional on top of the normal Binaryen IR // validation rules, with the only exceptions being block body validation and // block unreachability rules. // #include "ir/names.h" #include "ir/properties.h" #include "ir/stack-utils.h" #include "ir/utils.h" #include "pass.h" #include "wasm-stack.h" namespace wasm { namespace { // Generate names for the elements of tuple globals Name getGlobalElem(Module* module, Name global, Index i) { return Names::getValidGlobalName( *module, std::string(global.c_str()) + '$' + std::to_string(i)); } struct Poppifier : BinaryenIRWriter { // Collects instructions to be inserted into a block at a certain scope, as // well as what kind of scope it is, which determines how the instructions are // inserted. struct Scope { enum Kind { Func, Block, Loop, If, Else, Try, Catch } kind; std::vector instrs; Scope(Kind kind) : kind(kind) {} }; Module* module; Builder builder; std::vector scopeStack; // Maps tuple locals to the new locals that will hold their elements std::unordered_map> tupleVars; // Records the scratch local to be used for tuple.extracts of each type std::unordered_map scratchLocals; Poppifier(Function* func, Module* module); Index getScratchLocal(Type type); // Replace `expr`'s children with Pops of the correct type. void poppify(Expression* expr); // Pops the current scope off the scope stack and replaces `expr` with a block // containing the instructions from that scope. void patchScope(Expression*& expr); // BinaryenIRWriter methods void emit(Expression* curr); void emitHeader() {} void emitIfElse(If* curr); void emitCatch(Try* curr, Index i); void emitCatchAll(Try* curr); void emitDelegate(Try* curr); void emitScopeEnd(Expression* curr); void emitFunctionEnd(); void emitUnreachable(); void emitDebugLocation(Expression* curr) {} // Tuple lowering methods void emitTupleExtract(TupleExtract* curr); void emitDrop(Drop* curr); void emitLocalGet(LocalGet* curr); void emitLocalSet(LocalSet* curr); void emitGlobalGet(GlobalGet* curr); void emitGlobalSet(GlobalSet* curr); }; Poppifier::Poppifier(Function* func, Module* module) : BinaryenIRWriter(func), module(module), builder(*module) { // Start with a scope to emit top-level instructions into scopeStack.emplace_back(Scope::Func); // Map each tuple local to a set of expanded locals for (Index i = func->getNumParams(), end = func->getNumLocals(); i < end; ++i) { Type localType = func->getLocalType(i); if (localType.isTuple()) { auto& vars = tupleVars[i]; for (auto type : localType) { vars.push_back(builder.addVar(func, type)); } } } } Index Poppifier::getScratchLocal(Type type) { // If there is no scratch local for `type`, allocate a new one auto insert = scratchLocals.insert({type, Index(-1)}); if (insert.second) { insert.first->second = builder.addVar(func, type); } return insert.first->second; } void Poppifier::patchScope(Expression*& expr) { auto scope = std::move(scopeStack.back()); auto& instrs = scope.instrs; scopeStack.pop_back(); if (auto* block = expr->dynCast()) { // Reuse blocks, but do not patch a block into itself, which would otherwise // happen when emitting if/else or try/catch arms and function bodies. if (instrs.size() == 0 || instrs[0] != block) { block->list.set(instrs); } } else { // Otherwise create a new block, even if we have just a single // expression. We want blocks in every new scope rather than other // instructions because Poppy IR optimizations only look at the children of // blocks. expr = builder.makeBlock(instrs, expr->type); } } void Poppifier::emit(Expression* curr) { // Control flow structures introduce new scopes. The instructions collected // for the new scope will be patched back into the original Expression when // the scope ends. if (Properties::isControlFlowStructure(curr)) { Scope::Kind kind; switch (curr->_id) { case Expression::BlockId: { kind = Scope::Block; break; } case Expression::LoopId: { kind = Scope::Loop; break; } case Expression::IfId: // The condition has already been emitted curr->cast()->condition = builder.makePop(Type::i32); kind = Scope::If; break; case Expression::TryId: kind = Scope::Try; break; default: WASM_UNREACHABLE("Unexpected control flow structure"); } scopeStack.emplace_back(kind); } else if (curr->is()) { // Turns into nothing when poppified return; } else if (curr->is()) { // Turns into nothing when poppified return; } else if (auto* extract = curr->dynCast()) { emitTupleExtract(extract); } else if (auto* drop = curr->dynCast()) { emitDrop(drop); } else if (auto* get = curr->dynCast()) { emitLocalGet(get); } else if (auto* set = curr->dynCast()) { emitLocalSet(set); } else if (auto* get = curr->dynCast()) { emitGlobalGet(get); } else if (auto* set = curr->dynCast()) { emitGlobalSet(set); } else { // Replace all children (which have already been emitted) with pops and emit // the current instruction into the current scope. poppify(curr); scopeStack.back().instrs.push_back(curr); } }; void Poppifier::emitIfElse(If* curr) { auto& scope = scopeStack.back(); WASM_UNUSED(scope); assert(scope.kind == Scope::If); patchScope(curr->ifTrue); scopeStack.emplace_back(Scope::Else); } void Poppifier::emitCatch(Try* curr, Index i) { auto& scope = scopeStack.back(); WASM_UNUSED(scope); if (i == 0) { assert(scope.kind == Scope::Try); patchScope(curr->body); } else { assert(scope.kind == Scope::Catch); patchScope(curr->catchBodies[i - 1]); } scopeStack.emplace_back(Scope::Catch); } void Poppifier::emitCatchAll(Try* curr) { auto& scope = scopeStack.back(); WASM_UNUSED(scope); if (curr->catchBodies.size() == 1) { assert(scope.kind == Scope::Try); patchScope(curr->body); } else { assert(scope.kind == Scope::Catch); patchScope(curr->catchBodies[curr->catchBodies.size() - 2]); } scopeStack.emplace_back(Scope::Catch); } void Poppifier::emitDelegate(Try* curr) { auto& scope = scopeStack.back(); WASM_UNUSED(scope); assert(scope.kind == Scope::Try); patchScope(curr->body); scopeStack.back().instrs.push_back(curr); } void Poppifier::emitScopeEnd(Expression* curr) { switch (scopeStack.back().kind) { case Scope::Block: patchScope(curr); break; case Scope::Loop: patchScope(curr->cast()->body); break; case Scope::If: patchScope(curr->cast()->ifTrue); break; case Scope::Else: patchScope(curr->cast()->ifFalse); break; case Scope::Catch: patchScope(curr->cast()->catchBodies.back()); break; case Scope::Try: WASM_UNREACHABLE("try without catch"); case Scope::Func: WASM_UNREACHABLE("unexpected end of function"); } scopeStack.back().instrs.push_back(curr); } void Poppifier::emitFunctionEnd() { auto& scope = scopeStack.back(); WASM_UNUSED(scope); assert(scope.kind == Scope::Func); patchScope(func->body); } void Poppifier::emitUnreachable() { // TODO: Try making this a nop auto& instrs = scopeStack.back().instrs; instrs.push_back(builder.makeUnreachable()); } void Poppifier::emitTupleExtract(TupleExtract* curr) { auto& instrs = scopeStack.back().instrs; auto types = curr->tuple->type; // Drop all the values after the one we want for (size_t i = types.size() - 1; i > curr->index; --i) { instrs.push_back(builder.makeDrop(builder.makePop(types[i]))); } // If the extracted value is the only one left, we're done if (curr->index == 0) { return; } // Otherwise, save it to a scratch local and drop the other values auto type = types[curr->index]; Index scratch = getScratchLocal(type); instrs.push_back(builder.makeLocalSet(scratch, builder.makePop(type))); for (size_t i = curr->index - 1; i != size_t(-1); --i) { instrs.push_back(builder.makeDrop(builder.makePop(types[i]))); } // Retrieve the saved value instrs.push_back(builder.makeLocalGet(scratch, type)); } void Poppifier::emitDrop(Drop* curr) { auto& instrs = scopeStack.back().instrs; if (curr->value->type.isTuple()) { // Drop each element individually auto types = curr->value->type; for (auto it = types.rbegin(), end = types.rend(); it != end; ++it) { instrs.push_back(builder.makeDrop(builder.makePop(*it))); } } else { poppify(curr); instrs.push_back(curr); } } void Poppifier::emitLocalGet(LocalGet* curr) { auto& instrs = scopeStack.back().instrs; if (curr->type.isTuple()) { auto types = func->getLocalType(curr->index); const auto& elems = tupleVars[curr->index]; for (size_t i = 0; i < types.size(); ++i) { instrs.push_back(builder.makeLocalGet(elems[i], types[i])); } } else { instrs.push_back(curr); } } void Poppifier::emitLocalSet(LocalSet* curr) { auto& instrs = scopeStack.back().instrs; if (curr->value->type.isTuple()) { auto types = func->getLocalType(curr->index); const auto& elems = tupleVars[curr->index]; // Add the unconditional sets for (size_t i = types.size() - 1; i >= 1; --i) { instrs.push_back( builder.makeLocalSet(elems[i], builder.makePop(types[i]))); } if (curr->isTee()) { // Use a tee followed by gets to retrieve the tuple instrs.push_back( builder.makeLocalTee(elems[0], builder.makePop(types[0]), types[0])); for (size_t i = 1; i < types.size(); ++i) { instrs.push_back(builder.makeLocalGet(elems[i], types[i])); } } else { // Otherwise just add the last set instrs.push_back( builder.makeLocalSet(elems[0], builder.makePop(types[0]))); } } else { poppify(curr); instrs.push_back(curr); } } void Poppifier::emitGlobalGet(GlobalGet* curr) { auto& instrs = scopeStack.back().instrs; if (curr->type.isTuple()) { auto types = module->getGlobal(curr->name)->type; for (Index i = 0; i < types.size(); ++i) { instrs.push_back( builder.makeGlobalGet(getGlobalElem(module, curr->name, i), types[i])); } } else { instrs.push_back(curr); } } void Poppifier::emitGlobalSet(GlobalSet* curr) { auto& instrs = scopeStack.back().instrs; if (curr->value->type.isTuple()) { auto types = module->getGlobal(curr->name)->type; for (Index i = types.size(); i > 0; --i) { instrs.push_back( builder.makeGlobalSet(getGlobalElem(module, curr->name, i - 1), builder.makePop(types[i - 1]))); } } else { poppify(curr); instrs.push_back(curr); } } void Poppifier::poppify(Expression* expr) { struct Poppifier : PostWalker { bool scanned = false; Builder builder; Poppifier(Builder& builder) : builder(builder) {} static void scan(Poppifier* self, Expression** currp) { if (!self->scanned) { self->scanned = true; PostWalker::scan(self, currp); } else { *currp = self->builder.makePop((*currp)->type); } } } poppifier(builder); poppifier.walk(expr); } class PoppifyFunctionsPass : public Pass { bool isFunctionParallel() override { return true; } void runOnFunction(PassRunner* runner, Module* module, Function* func) override { if (func->profile != IRProfile::Poppy) { Poppifier(func, module).write(); func->profile = IRProfile::Poppy; } } Pass* create() override { return new PoppifyFunctionsPass; } }; } // anonymous namespace class PoppifyPass : public Pass { void run(PassRunner* runner, Module* module) { PassRunner subRunner(runner); subRunner.add(std::make_unique()); // TODO: Enable this once it handles Poppy blocks correctly // subRunner.add(std::make_unique()); subRunner.run(); lowerTupleGlobals(module); } void lowerTupleGlobals(Module* module) { Builder builder(*module); std::vector> newGlobals; for (int g = module->globals.size() - 1; g >= 0; --g) { const auto& global = *module->globals[g]; if (!global.type.isTuple()) { continue; } assert(!global.imported()); for (Index i = 0; i < global.type.size(); ++i) { Expression* init; if (global.init == nullptr) { init = nullptr; } else if (auto* make = global.init->dynCast()) { init = make->operands[i]; } else if (auto* get = global.init->dynCast()) { init = builder.makeGlobalGet(getGlobalElem(module, get->name, i), global.type[i]); } else { WASM_UNREACHABLE("Unexpected tuple global initializer"); } auto mutability = global.mutable_ ? Builder::Mutable : Builder::Immutable; newGlobals.emplace_back( builder.makeGlobal(getGlobalElem(module, global.name, i), global.type[i], init, mutability)); } module->removeGlobal(global.name); } while (newGlobals.size()) { module->addGlobal(std::move(newGlobals.back())); newGlobals.pop_back(); } module->updateMaps(); } }; Pass* createPoppifyPass() { return new PoppifyPass; } } // namespace wasm binaryen-version_108/src/passes/PostEmscripten.cpp000066400000000000000000000116101423707623100225140ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Misc optimizations that are useful for and/or are only valid for // emscripten output. // #include #include #include #include #include #include #include #include #include #include #include #define DEBUG_TYPE "post-emscripten" namespace wasm { namespace { static bool isInvoke(Function* F) { return F->imported() && F->module == ENV && F->base.startsWith("invoke_"); } } // namespace struct PostEmscripten : public Pass { void run(PassRunner* runner, Module* module) override { // Optimize exceptions optimizeExceptions(runner, module); } // Optimize exceptions (and setjmp) by removing unnecessary invoke* calls. // An invoke is a call to JS with a function pointer; JS does a try-catch // and calls the pointer, catching and reporting any error. If we know no // exception will be thrown, we can simply skip the invoke. void optimizeExceptions(PassRunner* runner, Module* module) { // First, check if this code even uses invokes. bool hasInvokes = false; for (auto& imp : module->functions) { if (isInvoke(imp.get())) { hasInvokes = true; } } if (!hasInvokes || module->tables.empty()) { return; } // Next, see if the Table is flat, which we need in order to see where // invokes go statically. (In dynamic linking, the table is not flat, // and we can't do this.) TableUtils::FlatTable flatTable(*module, *module->tables[0]); if (!flatTable.valid) { return; } // This code has exceptions. Find functions that definitely cannot throw, // and remove invokes to them. struct Info : public ModuleUtils::CallGraphPropertyAnalysis::FunctionInfo { bool canThrow = false; }; ModuleUtils::CallGraphPropertyAnalysis analyzer( *module, [&](Function* func, Info& info) { if (func->imported()) { // Assume any import can throw. We may want to reduce this to just // longjmp/cxa_throw/etc. info.canThrow = true; } }); // Assume a non-direct call might throw. analyzer.propagateBack( [](const Info& info) { return info.canThrow; }, [](const Info& info) { return true; }, [](Info& info, Function* reason) { info.canThrow = true; }, analyzer.NonDirectCallsHaveProperty); // Apply the information. struct OptimizeInvokes : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new OptimizeInvokes(map, flatTable); } std::map& map; TableUtils::FlatTable& flatTable; OptimizeInvokes(std::map& map, TableUtils::FlatTable& flatTable) : map(map), flatTable(flatTable) {} void visitCall(Call* curr) { auto* target = getModule()->getFunction(curr->target); if (!isInvoke(target)) { return; } // The first operand is the function pointer index, which must be // constant if we are to optimize it statically. if (auto* index = curr->operands[0]->dynCast()) { size_t indexValue = index->value.geti32(); if (indexValue >= flatTable.names.size()) { // UB can lead to indirect calls to invalid pointers. return; } auto actualTarget = flatTable.names[indexValue]; if (actualTarget.isNull()) { // UB can lead to an indirect call of 0 or an index in which there // is no function name. return; } if (map[getModule()->getFunction(actualTarget)].canThrow) { return; } // This invoke cannot throw! Make it a direct call. curr->target = actualTarget; for (Index i = 0; i < curr->operands.size() - 1; i++) { curr->operands[i] = curr->operands[i + 1]; } curr->operands.resize(curr->operands.size() - 1); } } }; OptimizeInvokes(analyzer.map, flatTable).run(runner, module); } }; Pass* createPostEmscriptenPass() { return new PostEmscripten(); } } // namespace wasm binaryen-version_108/src/passes/Precompute.cpp000066400000000000000000000465411423707623100216730ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Computes code at compile time where possible, replacing it with the // computed constant. // // The "propagate" variant of this pass also propagates constants across // sets and gets, which implements a standard constant propagation. // // Possible nondeterminism: WebAssembly NaN signs are nondeterministic, // and this pass may optimize e.g. a float 0 / 0 into +nan while a VM may // emit -nan, which can be a noticeable difference if the bits are // looked at. // #include #include #include #include #include #include #include #include #include #include namespace wasm { using GetValues = std::unordered_map; // A map of values on the heap. This maps the expressions that create the // heap data (struct.new, array.new, etc.) to the data they are created with. // Each such expression gets its own GCData created for it. This allows // computing identity between locals referring to the same GCData, by seeing // if they point to the same thing. // // Note that a source expression may create different data each time it is // reached in a loop, // // (loop // (if .. // (local.set $x // (struct.new .. // ) // ) // ..compare $x to something.. // ) // // Just like in SSA form, this is not a problem because the loop entry must // have a merge, if a value entering the loop might be noticed. In SSA form // that means a phi is created, and identity is set there. In our // representation, the merge will cause a local.get of $x to have more // possible input values than that struct.new, which means we will not infer // a value for it, and not attempt to say anything about comparisons of $x. using HeapValues = std::unordered_map>; // Precomputes an expression. Errors if we hit anything that can't be // precomputed. Inherits most of its functionality from // ConstantExpressionRunner, which it shares with the C-API, but adds handling // of GetValues computed during the precompute pass. class PrecomputingExpressionRunner : public ConstantExpressionRunner { using Super = ConstantExpressionRunner; // Concrete values of gets computed during the pass, which the runner does not // know about since it only records values of sets it visits. GetValues& getValues; HeapValues& heapValues; // Limit evaluation depth for 2 reasons: first, it is highly unlikely // that we can do anything useful to precompute a hugely nested expression // (we should succed at smaller parts of it first). Second, a low limit is // helpful to avoid platform differences in native stack sizes. static const Index MAX_DEPTH = 50; // Limit loop iterations since loops might be infinite. Since we are going to // replace the expression and must preserve side effects, we limit this to the // very first iteration because a side effect would be necessary to achieve // more than one iteration before becoming concrete. static const Index MAX_LOOP_ITERATIONS = 1; public: PrecomputingExpressionRunner(Module* module, GetValues& getValues, HeapValues& heapValues, bool replaceExpression) : ConstantExpressionRunner( module, replaceExpression ? FlagValues::PRESERVE_SIDEEFFECTS : FlagValues::DEFAULT, MAX_DEPTH, MAX_LOOP_ITERATIONS), getValues(getValues), heapValues(heapValues) {} Flow visitLocalGet(LocalGet* curr) { auto iter = getValues.find(curr); if (iter != getValues.end()) { auto values = iter->second; if (values.isConcrete()) { return Flow(values); } } return ConstantExpressionRunner< PrecomputingExpressionRunner>::visitLocalGet(curr); } // TODO: Use immutability for values Flow visitStructNew(StructNew* curr) { auto flow = Super::visitStructNew(curr); if (flow.breaking()) { return flow; } return getHeapCreationFlow(flow, curr); } Flow visitStructSet(StructSet* curr) { return Flow(NONCONSTANT_FLOW); } Flow visitStructGet(StructGet* curr) { if (curr->ref->type != Type::unreachable) { // If this field is immutable then we may be able to precompute this, as // if we also created the data in this function (or it was created in an // immutable global) then we know the value in the field. If it is // immutable, call the super method which will do the rest here. That // includes checking for the data being properly created, as if it was // not then we will not have a constant value for it, which means the // local.get of that value will stop us. auto& field = curr->ref->type.getHeapType().getStruct().fields[curr->index]; if (field.mutable_ == Immutable) { return Super::visitStructGet(curr); } } // Otherwise, we've failed to precompute. return Flow(NONCONSTANT_FLOW); } Flow visitArrayNew(ArrayNew* curr) { auto flow = Super::visitArrayNew(curr); if (flow.breaking()) { return flow; } return getHeapCreationFlow(flow, curr); } Flow visitArrayInit(ArrayInit* curr) { auto flow = Super::visitArrayInit(curr); if (flow.breaking()) { return flow; } return getHeapCreationFlow(flow, curr); } Flow visitArraySet(ArraySet* curr) { return Flow(NONCONSTANT_FLOW); } Flow visitArrayGet(ArrayGet* curr) { if (curr->ref->type != Type::unreachable) { // See above with struct.get auto element = curr->ref->type.getHeapType().getArray().element; if (element.mutable_ == Immutable) { return Super::visitArrayGet(curr); } } // Otherwise, we've failed to precompute. return Flow(NONCONSTANT_FLOW); } Flow visitArrayLen(ArrayLen* curr) { return Flow(NONCONSTANT_FLOW); } Flow visitArrayCopy(ArrayCopy* curr) { return Flow(NONCONSTANT_FLOW); } // Generates heap info for a heap-allocating expression. template Flow getHeapCreationFlow(Flow flow, T* curr) { // We must return a literal that refers to the canonical location for this // source expression, so that each time we compute a specific struct.new // we get the same identity. std::shared_ptr& canonical = heapValues[curr]; std::shared_ptr newGCData = flow.getSingleValue().getGCData(); if (!canonical) { canonical = std::make_shared(*newGCData); } else { *canonical = *newGCData; } return Literal(canonical, curr->type); } }; struct Precompute : public WalkerPass< PostWalker>> { bool isFunctionParallel() override { return true; } Pass* create() override { return new Precompute(propagate); } bool propagate = false; Precompute(bool propagate) : propagate(propagate) {} GetValues getValues; HeapValues heapValues; void doWalkFunction(Function* func) { // Walk the function and precompute things. super::doWalkFunction(func); if (!propagate) { return; } // When propagating, we can utilize the graph of local operations to // precompute the values from a local.set to a local.get. This populates // getValues which is then used by a subsequent walk that applies those // values. bool propagated = propagateLocals(func); if (propagated) { // We found constants to propagate and entered them in getValues. Do // another walk to apply them and perhaps other optimizations that are // unlocked. super::doWalkFunction(func); } // Note that in principle even more cycles could find further work here, in // very rare cases. To avoid constructing a LocalGraph again just for that // unlikely chance, we leave such things for later runs of this pass and for // --converge. } template void reuseConstantNode(T* curr, Flow flow) { if (flow.values.isConcrete()) { // reuse a const / ref.null / ref.func node if there is one if (curr->value && flow.values.size() == 1) { Literal singleValue = flow.getSingleValue(); if (singleValue.type.isNumber()) { if (auto* c = curr->value->template dynCast()) { c->value = singleValue; c->finalize(); curr->finalize(); return; } } else if (singleValue.isNull()) { if (auto* n = curr->value->template dynCast()) { n->finalize(singleValue.type); curr->finalize(); return; } } else if (singleValue.type == Type::funcref) { if (auto* r = curr->value->template dynCast()) { r->func = singleValue.getFunc(); r->finalize(); curr->finalize(); return; } } } curr->value = flow.getConstExpression(*getModule()); } else { curr->value = nullptr; } curr->finalize(); } void visitExpression(Expression* curr) { // TODO: if local.get, only replace with a constant if we don't care about // size...? if (Properties::isConstantExpression(curr) || curr->is()) { return; } // try to evaluate this into a const Flow flow = precomputeExpression(curr); if (!canEmitConstantFor(flow.values)) { return; } if (flow.breaking()) { if (flow.breakTo == NONCONSTANT_FLOW) { return; } if (flow.breakTo == RETURN_FLOW) { // this expression causes a return. if it's already a return, reuse the // node if (auto* ret = curr->dynCast()) { reuseConstantNode(ret, flow); } else { Builder builder(*getModule()); replaceCurrent(builder.makeReturn( flow.values.isConcrete() ? flow.getConstExpression(*getModule()) : nullptr)); } return; } // this expression causes a break, emit it directly. if it's already a br, // reuse the node. if (auto* br = curr->dynCast()) { br->name = flow.breakTo; br->condition = nullptr; reuseConstantNode(br, flow); } else { Builder builder(*getModule()); replaceCurrent(builder.makeBreak( flow.breakTo, flow.values.isConcrete() ? flow.getConstExpression(*getModule()) : nullptr)); } return; } // this was precomputed if (flow.values.isConcrete()) { replaceCurrent(flow.getConstExpression(*getModule())); } else { ExpressionManipulator::nop(curr); } } void visitFunction(Function* curr) { // removing breaks can alter types ReFinalize().walkFunctionInModule(curr, getModule()); } private: // Precompute an expression, returning a flow, which may be a constant // (that we can replace the expression with if replaceExpression is set). Flow precomputeExpression(Expression* curr, bool replaceExpression = true) { Flow flow; try { flow = PrecomputingExpressionRunner( getModule(), getValues, heapValues, replaceExpression) .visit(curr); } catch (PrecomputingExpressionRunner::NonconstantException&) { return Flow(NONCONSTANT_FLOW); } // If we are replacing the expression, then the resulting value must be of // a type we can emit a constant for. if (!flow.breaking() && replaceExpression && !canEmitConstantFor(flow.values)) { return Flow(NONCONSTANT_FLOW); } return flow; } // Precomputes the value of an expression, as opposed to the expression // itself. This differs from precomputeExpression in that we care about // the value the expression will have, which we cannot necessary replace // the expression with. For example, // (local.tee (i32.const 1)) // will have value 1 which we can optimize here, but in precomputeExpression // we could not do anything. Literals precomputeValue(Expression* curr) { // Note that we set replaceExpression to false, as we just care about // the value here. Flow flow = precomputeExpression(curr, false /* replaceExpression */); if (flow.breaking()) { return {}; } return flow.values; } // Propagates values around. Returns whether we propagated. bool propagateLocals(Function* func) { bool propagated = false; // using the graph of get-set interactions, do a constant-propagation type // operation: note which sets are assigned locals, then see if that lets us // compute other sets as locals (since some of the gets they read may be // constant). // compute all dependencies LocalGraph localGraph(func); localGraph.computeInfluences(); // prepare the work list. we add things here that might change to a constant // initially, that means everything UniqueDeferredQueue work; for (auto& [curr, _] : localGraph.locations) { work.push(curr); } // the constant value, or none if not a constant std::unordered_map setValues; // propagate constant values while (!work.empty()) { auto* curr = work.pop(); // see if this set or get is actually a constant value, and if so, // mark it as such and add everything it influences to the work list, // as they may be constant too. if (auto* set = curr->dynCast()) { if (setValues[set].isConcrete()) { continue; // already known constant } // Precompute the value. Note that this executes the code from scratch // each time we reach this point, and so we need to be careful about // repeating side effects if those side effects are expressed *in the // value*. A case where that can happen is GC data (each struct.new // creates a new, unique struct, even if the data is equal), and so // PrecomputingExpressionRunner has special logic to make sure that // reference identity is preserved properly. // // (Other side effects are fine; if an expression does a call and we // somehow know the entire expression precomputes to a 42, then we can // propagate that 42 along to the users, regardless of whatever the call // did globally.) auto values = precomputeValue(Properties::getFallthrough( set->value, getPassOptions(), *getModule())); // Fix up the value. The computation we just did was to look at the // fallthrough, then precompute that; that looks through expressions // that pass through the value. Normally that does not matter here, // for example, (block .. (value)) returns the value unmodified. // However, some things change the type, for example RefAsNonNull has // a non-null type, while its input may be nullable. That does not // matter either, as if we managed to precompute it then the value had // the more specific (in this example, non-nullable) type. But there // is a situation where this can cause an issue: RefCast. An attempt to // perform a "bad" cast, say of a function to a struct, is a case where // the fallthrough value's type is very different than the actually // returned value's type. To handle that, if we precomputed a value and // if it has the wrong type then precompute it again without looking // through to the fallthrough. if (values.isConcrete() && !Type::isSubType(values.getType(), set->value->type)) { values = precomputeValue(set->value); } setValues[set] = values; if (values.isConcrete()) { for (auto* get : localGraph.setInfluences[set]) { work.push(get); } } } else { auto* get = curr->cast(); if (getValues[get].size() >= 1) { continue; // already known constant } // for this get to have constant value, all sets must agree Literals values; bool first = true; for (auto* set : localGraph.getSetses[get]) { Literals curr; if (set == nullptr) { if (getFunction()->isVar(get->index)) { auto localType = getFunction()->getLocalType(get->index); if (localType.isNonNullable()) { Fatal() << "Non-nullable local accessing the default value in " << getFunction()->name << " (" << get->index << ')'; } curr = Literal::makeZeros(localType); } else { // it's a param, so it's hopeless values = {}; break; } } else { curr = setValues[set]; } if (curr.isNone()) { // not a constant, give up values = {}; break; } // we found a concrete value. compare with the current one if (first) { values = curr; // this is the first first = false; } else { if (values != curr) { // not the same, give up values = {}; break; } } } // we may have found a value if (values.isConcrete()) { // we did! getValues[get] = values; for (auto* set : localGraph.getInfluences[get]) { work.push(set); } propagated = true; } } } return propagated; } bool canEmitConstantFor(const Literals& values) { for (auto& value : values) { if (!canEmitConstantFor(value)) { return false; } } return true; } bool canEmitConstantFor(const Literal& value) { // A null is fine to emit a constant for - we'll emit a RefNull. Otherwise, // see below about references to GC data. if (value.isNull()) { return true; } return canEmitConstantFor(value.type); } bool canEmitConstantFor(Type type) { // A function is fine to emit a constant for - we'll emit a RefFunc, which // is compact and immutable, so there can't be a problem. if (type.isFunction()) { return true; } // All other reference types cannot be precomputed. Even an immutable GC // reference is not currently something this pass can handle, as it will // evaluate and reevaluate code multiple times in e.g. propagateLocals, see // the comment above. if (type.isRef()) { return false; } // For now, don't try to precompute an Rtt. TODO figure out when that would // be safe and useful. return !type.isRtt(); } }; Pass* createPrecomputePass() { return new Precompute(false); } Pass* createPrecomputePropagatePass() { return new Precompute(true); } } // namespace wasm binaryen-version_108/src/passes/Print.cpp000066400000000000000000002577511423707623100206530ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Print out text in s-expression format // #include #include #include #include #include #include #include namespace wasm { static std::ostream& printExpression(Expression* expression, std::ostream& o, bool minify = false, bool full = false, Module* wasm = nullptr); static std::ostream& printStackInst(StackInst* inst, std::ostream& o, Function* func = nullptr); static std::ostream& printStackIR(StackIR* ir, std::ostream& o, Function* func = nullptr); namespace { bool isFullForced() { if (getenv("BINARYEN_PRINT_FULL")) { return std::stoi(getenv("BINARYEN_PRINT_FULL")) != 0; } return false; } std::ostream& printName(Name name, std::ostream& o) { // we need to quote names if they have tricky chars if (!name.str || !strpbrk(name.str, "()")) { o << '$' << name.str; } else { o << "\"$" << name.str << '"'; } return o; } static std::ostream& printLocal(Index index, Function* func, std::ostream& o) { Name name; if (func) { name = func->getLocalNameOrDefault(index); } if (!name) { name = Name::fromInt(index); } return printName(name, o); } namespace { // Helper for printing the name of a type. This output is guaranteed to not // contain spaces. struct TypeNamePrinter { // Optional. If present, the module's HeapType names will be used. Module* wasm; // Keep track of the first depth at which we see each HeapType so if we see it // again, we can unambiguously refer to it without infinitely recursing. size_t currHeapTypeDepth = 0; std::unordered_map heapTypeDepths; // The stream we are printing to. std::ostream& os; TypeNamePrinter(std::ostream& os, Module* wasm = nullptr) : wasm(wasm), os(os) {} void print(Type type); void print(HeapType heapType); void print(const Tuple& tuple); void print(const Field& field); void print(const Signature& sig); void print(const Struct& struct_); void print(const Array& array); void print(const Rtt& rtt); // FIXME: This hard limit on how many times we call print() avoids extremely // large outputs, which can be inconveniently large in some cases, but // we should have a better mechanism for this. static const size_t MaxPrints = 100; size_t prints = 0; bool exceededLimit() { if (prints >= MaxPrints) { os << "?"; return true; } prints++; return false; } }; void TypeNamePrinter::print(Type type) { if (exceededLimit()) { return; } if (type.isBasic()) { os << type; } else if (type.isTuple()) { print(type.getTuple()); } else if (type.isRtt()) { print(type.getRtt()); } else if (type.isRef()) { os << "ref"; if (type.isNullable()) { os << "?"; } os << '|'; print(type.getHeapType()); os << '|'; } else { WASM_UNREACHABLE("unexpected type"); } } void TypeNamePrinter::print(HeapType type) { if (exceededLimit()) { return; } if (type.isBasic()) { os << type; return; } // If there is a name for this type in this module, use it. // FIXME: in theory there could be two types, one with a name, and one // without, and the one without gets an automatic name that matches the // other's. To check for that, if (first) we could assert at the very end of // this function that the automatic name is not present in the given names. if (wasm && wasm->typeNames.count(type)) { os << '$' << wasm->typeNames[type].name; return; } // If we have seen this HeapType before, just print its relative depth instead // of infinitely recursing. auto it = heapTypeDepths.find(type); if (it != heapTypeDepths.end()) { assert(it->second <= currHeapTypeDepth); size_t relativeDepth = currHeapTypeDepth - it->second; os << "..." << relativeDepth; return; } // If this is the top-level heap type, add a $ if (currHeapTypeDepth == 0) { os << "$"; } // Update the context for the current HeapType before recursing. heapTypeDepths[type] = ++currHeapTypeDepth; if (type.isSignature()) { print(type.getSignature()); } else if (type.isStruct()) { print(type.getStruct()); } else if (type.isArray()) { print(type.getArray()); } else { WASM_UNREACHABLE("unexpected type"); } // Restore the previous context after the recursion. heapTypeDepths.erase(type); --currHeapTypeDepth; } void TypeNamePrinter::print(const Tuple& tuple) { auto sep = ""; for (auto type : tuple.types) { os << sep; sep = "_"; print(type); } } void TypeNamePrinter::print(const Field& field) { if (field.mutable_) { os << "mut:"; } if (field.type == Type::i32 && field.packedType != Field::not_packed) { if (field.packedType == Field::i8) { os << "i8"; } else if (field.packedType == Field::i16) { os << "i16"; } else { WASM_UNREACHABLE("invalid packed type"); } } else { print(field.type); } } void TypeNamePrinter::print(const Signature& sig) { // TODO: Switch to using an unambiguous delimiter rather than differentiating // only the top level with a different arrow. print(sig.params); if (currHeapTypeDepth == 1) { os << "_=>_"; } else { os << "_->_"; } print(sig.results); } void TypeNamePrinter::print(const Struct& struct_) { os << '{'; auto sep = ""; for (const auto& field : struct_.fields) { os << sep; sep = "_"; print(field); } os << '}'; } void TypeNamePrinter::print(const Array& array) { os << '['; print(array.element); os << ']'; } void TypeNamePrinter::print(const Rtt& rtt) { os << "rtt_"; if (rtt.hasDepth()) { os << rtt.depth << '_'; } print(rtt.heapType); } } // anonymous namespace static std::ostream& printType(std::ostream& o, Type type, Module* wasm) { if (type.isBasic()) { o << type; } else if (type.isTuple()) { o << '('; auto sep = ""; for (const auto& t : type) { o << sep; printType(o, t, wasm); sep = " "; } o << ')'; } else if (type.isRtt()) { auto rtt = type.getRtt(); o << "(rtt "; if (rtt.hasDepth()) { o << rtt.depth << ' '; } TypeNamePrinter(o, wasm).print(rtt.heapType); o << ')'; } else if (type.isRef() && !type.isBasic()) { o << "(ref "; if (type.isNullable()) { o << "null "; } TypeNamePrinter(o, wasm).print(type.getHeapType()); o << ')'; } else { WASM_UNREACHABLE("unexpected type"); } return o; } static std::ostream& printHeapType(std::ostream& o, HeapType type, Module* wasm) { TypeNamePrinter(o, wasm).print(type); return o; } static std::ostream& printPrefixedTypes(std::ostream& o, const char* prefix, Type type, Module* wasm) { o << '(' << prefix; if (type == Type::none) { return o << ')'; } if (type.isTuple()) { // Tuple types are not printed in parens, we can just emit them one after // the other in the same list as the "result". for (auto t : type) { o << ' '; printType(o, t, wasm); } } else { o << ' '; printType(o, type, wasm); } o << ')'; return o; } static std::ostream& printResultType(std::ostream& o, Type type, Module* wasm) { return printPrefixedTypes(o, "result", type, wasm); } static std::ostream& printParamType(std::ostream& o, Type type, Module* wasm) { return printPrefixedTypes(o, "param", type, wasm); } // Generic processing of a struct's field, given an optional module. Calls func // with the field name, if it is present, or with a null Name if not. template void processFieldName(Module* wasm, HeapType type, Index index, T func) { if (wasm) { auto it = wasm->typeNames.find(type); if (it != wasm->typeNames.end()) { auto& fieldNames = it->second.fieldNames; auto it = fieldNames.find(index); if (it != fieldNames.end()) { auto name = it->second; if (name.is()) { func(it->second); return; } } } } func(Name()); } } // anonymous namespace // Printing "unreachable" as a instruction prefix type is not valid in wasm text // format. Print something else to make it pass. static Type forceConcrete(Type type) { return type.isConcrete() ? type : Type::i32; } // Prints the internal contents of an expression: everything but // the children. struct PrintExpressionContents : public OverriddenVisitor { Module* wasm = nullptr; Function* currFunction = nullptr; std::ostream& o; FeatureSet features; PrintExpressionContents(Module* wasm, Function* currFunction, std::ostream& o) : wasm(wasm), currFunction(currFunction), o(o), features(wasm->features) {} PrintExpressionContents(Function* currFunction, std::ostream& o) : currFunction(currFunction), o(o), features(FeatureSet::All) {} void visitBlock(Block* curr) { printMedium(o, "block"); if (curr->name.is()) { o << ' '; printName(curr->name, o); } if (curr->type.isConcrete()) { o << ' '; printResultType(o, curr->type, wasm); } } void visitIf(If* curr) { printMedium(o, "if"); if (curr->type.isConcrete()) { o << ' '; printResultType(o, curr->type, wasm); } } void visitLoop(Loop* curr) { printMedium(o, "loop"); if (curr->name.is()) { o << ' '; printName(curr->name, o); } if (curr->type.isConcrete()) { o << ' '; printResultType(o, curr->type, wasm); } } void visitBreak(Break* curr) { if (curr->condition) { printMedium(o, "br_if "); } else { printMedium(o, "br "); } printName(curr->name, o); } void visitSwitch(Switch* curr) { printMedium(o, "br_table"); for (auto& t : curr->targets) { o << ' '; printName(t, o); } o << ' '; printName(curr->default_, o); } void visitCall(Call* curr) { if (curr->isReturn) { printMedium(o, "return_call "); } else { printMedium(o, "call "); } printName(curr->target, o); } void visitCallIndirect(CallIndirect* curr) { if (curr->isReturn) { printMedium(o, "return_call_indirect "); } else { printMedium(o, "call_indirect "); } if (features.hasReferenceTypes()) { printName(curr->table, o); o << ' '; } o << '('; printMinor(o, "type "); TypeNamePrinter(o, wasm).print(curr->heapType); o << ')'; } void visitLocalGet(LocalGet* curr) { printMedium(o, "local.get "); printLocal(curr->index, currFunction, o); } void visitLocalSet(LocalSet* curr) { if (curr->isTee()) { printMedium(o, "local.tee "); } else { printMedium(o, "local.set "); } printLocal(curr->index, currFunction, o); } void visitGlobalGet(GlobalGet* curr) { printMedium(o, "global.get "); printName(curr->name, o); } void visitGlobalSet(GlobalSet* curr) { printMedium(o, "global.set "); printName(curr->name, o); } void visitLoad(Load* curr) { prepareColor(o) << forceConcrete(curr->type); if (curr->isAtomic) { o << ".atomic"; } o << ".load"; if (curr->type != Type::unreachable && curr->bytes < curr->type.getByteSize()) { if (curr->bytes == 1) { o << '8'; } else if (curr->bytes == 2) { o << "16"; } else if (curr->bytes == 4) { o << "32"; } else { abort(); } o << (curr->signed_ ? "_s" : "_u"); } restoreNormalColor(o); if (curr->offset) { o << " offset=" << curr->offset; } if (curr->align != curr->bytes) { o << " align=" << curr->align; } } void visitStore(Store* curr) { prepareColor(o) << forceConcrete(curr->valueType); if (curr->isAtomic) { o << ".atomic"; } o << ".store"; if (curr->bytes < 4 || (curr->valueType == Type::i64 && curr->bytes < 8)) { if (curr->bytes == 1) { o << '8'; } else if (curr->bytes == 2) { o << "16"; } else if (curr->bytes == 4) { o << "32"; } else { abort(); } } restoreNormalColor(o); if (curr->offset) { o << " offset=" << curr->offset; } if (curr->align != curr->bytes) { o << " align=" << curr->align; } } static void printRMWSize(std::ostream& o, Type type, uint8_t bytes) { prepareColor(o) << forceConcrete(type) << ".atomic.rmw"; if (type != Type::unreachable && bytes != type.getByteSize()) { if (bytes == 1) { o << '8'; } else if (bytes == 2) { o << "16"; } else if (bytes == 4) { o << "32"; } else { WASM_UNREACHABLE("invalid RMW byte length"); } } o << '.'; } void visitAtomicRMW(AtomicRMW* curr) { prepareColor(o); printRMWSize(o, curr->type, curr->bytes); switch (curr->op) { case RMWAdd: o << "add"; break; case RMWSub: o << "sub"; break; case RMWAnd: o << "and"; break; case RMWOr: o << "or"; break; case RMWXor: o << "xor"; break; case RMWXchg: o << "xchg"; break; } if (curr->type != Type::unreachable && curr->bytes != curr->type.getByteSize()) { o << "_u"; } restoreNormalColor(o); if (curr->offset) { o << " offset=" << curr->offset; } } void visitAtomicCmpxchg(AtomicCmpxchg* curr) { prepareColor(o); printRMWSize(o, curr->type, curr->bytes); o << "cmpxchg"; if (curr->type != Type::unreachable && curr->bytes != curr->type.getByteSize()) { o << "_u"; } restoreNormalColor(o); if (curr->offset) { o << " offset=" << curr->offset; } } void visitAtomicWait(AtomicWait* curr) { prepareColor(o); Type type = forceConcrete(curr->expectedType); assert(type == Type::i32 || type == Type::i64); o << "memory.atomic.wait" << (type == Type::i32 ? "32" : "64"); restoreNormalColor(o); if (curr->offset) { o << " offset=" << curr->offset; } } void visitAtomicNotify(AtomicNotify* curr) { printMedium(o, "memory.atomic.notify"); if (curr->offset) { o << " offset=" << curr->offset; } } void visitAtomicFence(AtomicFence* curr) { printMedium(o, "atomic.fence"); } void visitSIMDExtract(SIMDExtract* curr) { prepareColor(o); switch (curr->op) { case ExtractLaneSVecI8x16: o << "i8x16.extract_lane_s"; break; case ExtractLaneUVecI8x16: o << "i8x16.extract_lane_u"; break; case ExtractLaneSVecI16x8: o << "i16x8.extract_lane_s"; break; case ExtractLaneUVecI16x8: o << "i16x8.extract_lane_u"; break; case ExtractLaneVecI32x4: o << "i32x4.extract_lane"; break; case ExtractLaneVecI64x2: o << "i64x2.extract_lane"; break; case ExtractLaneVecF32x4: o << "f32x4.extract_lane"; break; case ExtractLaneVecF64x2: o << "f64x2.extract_lane"; break; } restoreNormalColor(o); o << " " << int(curr->index); } void visitSIMDReplace(SIMDReplace* curr) { prepareColor(o); switch (curr->op) { case ReplaceLaneVecI8x16: o << "i8x16.replace_lane"; break; case ReplaceLaneVecI16x8: o << "i16x8.replace_lane"; break; case ReplaceLaneVecI32x4: o << "i32x4.replace_lane"; break; case ReplaceLaneVecI64x2: o << "i64x2.replace_lane"; break; case ReplaceLaneVecF32x4: o << "f32x4.replace_lane"; break; case ReplaceLaneVecF64x2: o << "f64x2.replace_lane"; break; } restoreNormalColor(o); o << " " << int(curr->index); } void visitSIMDShuffle(SIMDShuffle* curr) { prepareColor(o); o << "i8x16.shuffle"; restoreNormalColor(o); for (uint8_t mask_index : curr->mask) { o << " " << std::to_string(mask_index); } } void visitSIMDTernary(SIMDTernary* curr) { prepareColor(o); switch (curr->op) { case Bitselect: o << "v128.bitselect"; break; case LaneselectI8x16: o << "i8x16.laneselect"; break; case LaneselectI16x8: o << "i16x8.laneselect"; break; case LaneselectI32x4: o << "i32x4.laneselect"; break; case LaneselectI64x2: o << "i64x2.laneselect"; break; case RelaxedFmaVecF32x4: o << "f32x4.relaxed_fma"; break; case RelaxedFmsVecF32x4: o << "f32x4.relaxed_fms"; break; case RelaxedFmaVecF64x2: o << "f64x2.relaxed_fma"; break; case RelaxedFmsVecF64x2: o << "f64x2.relaxed_fms"; break; case DotI8x16I7x16AddSToVecI32x4: o << "i32x4.dot_i8x16_i7x16_add_s"; break; case DotI8x16I7x16AddUToVecI32x4: o << "i32x4.dot_i8x16_i7x16_add_u"; break; } restoreNormalColor(o); } void visitSIMDShift(SIMDShift* curr) { prepareColor(o); switch (curr->op) { case ShlVecI8x16: o << "i8x16.shl"; break; case ShrSVecI8x16: o << "i8x16.shr_s"; break; case ShrUVecI8x16: o << "i8x16.shr_u"; break; case ShlVecI16x8: o << "i16x8.shl"; break; case ShrSVecI16x8: o << "i16x8.shr_s"; break; case ShrUVecI16x8: o << "i16x8.shr_u"; break; case ShlVecI32x4: o << "i32x4.shl"; break; case ShrSVecI32x4: o << "i32x4.shr_s"; break; case ShrUVecI32x4: o << "i32x4.shr_u"; break; case ShlVecI64x2: o << "i64x2.shl"; break; case ShrSVecI64x2: o << "i64x2.shr_s"; break; case ShrUVecI64x2: o << "i64x2.shr_u"; break; } restoreNormalColor(o); } void visitSIMDLoad(SIMDLoad* curr) { prepareColor(o); switch (curr->op) { case Load8SplatVec128: o << "v128.load8_splat"; break; case Load16SplatVec128: o << "v128.load16_splat"; break; case Load32SplatVec128: o << "v128.load32_splat"; break; case Load64SplatVec128: o << "v128.load64_splat"; break; case Load8x8SVec128: o << "v128.load8x8_s"; break; case Load8x8UVec128: o << "v128.load8x8_u"; break; case Load16x4SVec128: o << "v128.load16x4_s"; break; case Load16x4UVec128: o << "v128.load16x4_u"; break; case Load32x2SVec128: o << "v128.load32x2_s"; break; case Load32x2UVec128: o << "v128.load32x2_u"; break; case Load32ZeroVec128: o << "v128.load32_zero"; break; case Load64ZeroVec128: o << "v128.load64_zero"; break; } restoreNormalColor(o); if (curr->offset) { o << " offset=" << curr->offset; } if (curr->align != curr->getMemBytes()) { o << " align=" << curr->align; } } void visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { prepareColor(o); switch (curr->op) { case Load8LaneVec128: o << "v128.load8_lane"; break; case Load16LaneVec128: o << "v128.load16_lane"; break; case Load32LaneVec128: o << "v128.load32_lane"; break; case Load64LaneVec128: o << "v128.load64_lane"; break; case Store8LaneVec128: o << "v128.store8_lane"; break; case Store16LaneVec128: o << "v128.store16_lane"; break; case Store32LaneVec128: o << "v128.store32_lane"; break; case Store64LaneVec128: o << "v128.store64_lane"; break; } restoreNormalColor(o); if (curr->offset) { o << " offset=" << curr->offset; } if (curr->align != curr->getMemBytes()) { o << " align=" << curr->align; } o << " " << int(curr->index); } void visitMemoryInit(MemoryInit* curr) { prepareColor(o); o << "memory.init"; restoreNormalColor(o); o << ' ' << curr->segment; } void visitDataDrop(DataDrop* curr) { prepareColor(o); o << "data.drop"; restoreNormalColor(o); o << ' ' << curr->segment; } void visitMemoryCopy(MemoryCopy* curr) { prepareColor(o); o << "memory.copy"; restoreNormalColor(o); } void visitMemoryFill(MemoryFill* curr) { prepareColor(o); o << "memory.fill"; restoreNormalColor(o); } void visitConst(Const* curr) { o << curr->value.type << ".const " << curr->value; } void visitUnary(Unary* curr) { prepareColor(o); switch (curr->op) { case ClzInt32: o << "i32.clz"; break; case CtzInt32: o << "i32.ctz"; break; case PopcntInt32: o << "i32.popcnt"; break; case EqZInt32: o << "i32.eqz"; break; case ClzInt64: o << "i64.clz"; break; case CtzInt64: o << "i64.ctz"; break; case PopcntInt64: o << "i64.popcnt"; break; case EqZInt64: o << "i64.eqz"; break; case NegFloat32: o << "f32.neg"; break; case AbsFloat32: o << "f32.abs"; break; case CeilFloat32: o << "f32.ceil"; break; case FloorFloat32: o << "f32.floor"; break; case TruncFloat32: o << "f32.trunc"; break; case NearestFloat32: o << "f32.nearest"; break; case SqrtFloat32: o << "f32.sqrt"; break; case NegFloat64: o << "f64.neg"; break; case AbsFloat64: o << "f64.abs"; break; case CeilFloat64: o << "f64.ceil"; break; case FloorFloat64: o << "f64.floor"; break; case TruncFloat64: o << "f64.trunc"; break; case NearestFloat64: o << "f64.nearest"; break; case SqrtFloat64: o << "f64.sqrt"; break; case ExtendSInt32: o << "i64.extend_i32_s"; break; case ExtendUInt32: o << "i64.extend_i32_u"; break; case WrapInt64: o << "i32.wrap_i64"; break; case TruncSFloat32ToInt32: o << "i32.trunc_f32_s"; break; case TruncSFloat32ToInt64: o << "i64.trunc_f32_s"; break; case TruncUFloat32ToInt32: o << "i32.trunc_f32_u"; break; case TruncUFloat32ToInt64: o << "i64.trunc_f32_u"; break; case TruncSFloat64ToInt32: o << "i32.trunc_f64_s"; break; case TruncSFloat64ToInt64: o << "i64.trunc_f64_s"; break; case TruncUFloat64ToInt32: o << "i32.trunc_f64_u"; break; case TruncUFloat64ToInt64: o << "i64.trunc_f64_u"; break; case ReinterpretFloat32: o << "i32.reinterpret_f32"; break; case ReinterpretFloat64: o << "i64.reinterpret_f64"; break; case ConvertUInt32ToFloat32: o << "f32.convert_i32_u"; break; case ConvertUInt32ToFloat64: o << "f64.convert_i32_u"; break; case ConvertSInt32ToFloat32: o << "f32.convert_i32_s"; break; case ConvertSInt32ToFloat64: o << "f64.convert_i32_s"; break; case ConvertUInt64ToFloat32: o << "f32.convert_i64_u"; break; case ConvertUInt64ToFloat64: o << "f64.convert_i64_u"; break; case ConvertSInt64ToFloat32: o << "f32.convert_i64_s"; break; case ConvertSInt64ToFloat64: o << "f64.convert_i64_s"; break; case PromoteFloat32: o << "f64.promote_f32"; break; case DemoteFloat64: o << "f32.demote_f64"; break; case ReinterpretInt32: o << "f32.reinterpret_i32"; break; case ReinterpretInt64: o << "f64.reinterpret_i64"; break; case ExtendS8Int32: o << "i32.extend8_s"; break; case ExtendS16Int32: o << "i32.extend16_s"; break; case ExtendS8Int64: o << "i64.extend8_s"; break; case ExtendS16Int64: o << "i64.extend16_s"; break; case ExtendS32Int64: o << "i64.extend32_s"; break; case TruncSatSFloat32ToInt32: o << "i32.trunc_sat_f32_s"; break; case TruncSatUFloat32ToInt32: o << "i32.trunc_sat_f32_u"; break; case TruncSatSFloat64ToInt32: o << "i32.trunc_sat_f64_s"; break; case TruncSatUFloat64ToInt32: o << "i32.trunc_sat_f64_u"; break; case TruncSatSFloat32ToInt64: o << "i64.trunc_sat_f32_s"; break; case TruncSatUFloat32ToInt64: o << "i64.trunc_sat_f32_u"; break; case TruncSatSFloat64ToInt64: o << "i64.trunc_sat_f64_s"; break; case TruncSatUFloat64ToInt64: o << "i64.trunc_sat_f64_u"; break; case SplatVecI8x16: o << "i8x16.splat"; break; case SplatVecI16x8: o << "i16x8.splat"; break; case SplatVecI32x4: o << "i32x4.splat"; break; case SplatVecI64x2: o << "i64x2.splat"; break; case SplatVecF32x4: o << "f32x4.splat"; break; case SplatVecF64x2: o << "f64x2.splat"; break; case NotVec128: o << "v128.not"; break; case AnyTrueVec128: o << "v128.any_true"; break; case AbsVecI8x16: o << "i8x16.abs"; break; case NegVecI8x16: o << "i8x16.neg"; break; case AllTrueVecI8x16: o << "i8x16.all_true"; break; case BitmaskVecI8x16: o << "i8x16.bitmask"; break; case PopcntVecI8x16: o << "i8x16.popcnt"; break; case AbsVecI16x8: o << "i16x8.abs"; break; case NegVecI16x8: o << "i16x8.neg"; break; case AllTrueVecI16x8: o << "i16x8.all_true"; break; case BitmaskVecI16x8: o << "i16x8.bitmask"; break; case AbsVecI32x4: o << "i32x4.abs"; break; case NegVecI32x4: o << "i32x4.neg"; break; case AllTrueVecI32x4: o << "i32x4.all_true"; break; case BitmaskVecI32x4: o << "i32x4.bitmask"; break; case AbsVecI64x2: o << "i64x2.abs"; break; case NegVecI64x2: o << "i64x2.neg"; break; case AllTrueVecI64x2: o << "i64x2.all_true"; break; case BitmaskVecI64x2: o << "i64x2.bitmask"; break; case AbsVecF32x4: o << "f32x4.abs"; break; case NegVecF32x4: o << "f32x4.neg"; break; case SqrtVecF32x4: o << "f32x4.sqrt"; break; case CeilVecF32x4: o << "f32x4.ceil"; break; case FloorVecF32x4: o << "f32x4.floor"; break; case TruncVecF32x4: o << "f32x4.trunc"; break; case NearestVecF32x4: o << "f32x4.nearest"; break; case AbsVecF64x2: o << "f64x2.abs"; break; case NegVecF64x2: o << "f64x2.neg"; break; case SqrtVecF64x2: o << "f64x2.sqrt"; break; case CeilVecF64x2: o << "f64x2.ceil"; break; case FloorVecF64x2: o << "f64x2.floor"; break; case TruncVecF64x2: o << "f64x2.trunc"; break; case NearestVecF64x2: o << "f64x2.nearest"; break; case ExtAddPairwiseSVecI8x16ToI16x8: o << "i16x8.extadd_pairwise_i8x16_s"; break; case ExtAddPairwiseUVecI8x16ToI16x8: o << "i16x8.extadd_pairwise_i8x16_u"; break; case ExtAddPairwiseSVecI16x8ToI32x4: o << "i32x4.extadd_pairwise_i16x8_s"; break; case ExtAddPairwiseUVecI16x8ToI32x4: o << "i32x4.extadd_pairwise_i16x8_u"; break; case TruncSatSVecF32x4ToVecI32x4: o << "i32x4.trunc_sat_f32x4_s"; break; case TruncSatUVecF32x4ToVecI32x4: o << "i32x4.trunc_sat_f32x4_u"; break; case ConvertSVecI32x4ToVecF32x4: o << "f32x4.convert_i32x4_s"; break; case ConvertUVecI32x4ToVecF32x4: o << "f32x4.convert_i32x4_u"; break; case ExtendLowSVecI8x16ToVecI16x8: o << "i16x8.extend_low_i8x16_s"; break; case ExtendHighSVecI8x16ToVecI16x8: o << "i16x8.extend_high_i8x16_s"; break; case ExtendLowUVecI8x16ToVecI16x8: o << "i16x8.extend_low_i8x16_u"; break; case ExtendHighUVecI8x16ToVecI16x8: o << "i16x8.extend_high_i8x16_u"; break; case ExtendLowSVecI16x8ToVecI32x4: o << "i32x4.extend_low_i16x8_s"; break; case ExtendHighSVecI16x8ToVecI32x4: o << "i32x4.extend_high_i16x8_s"; break; case ExtendLowUVecI16x8ToVecI32x4: o << "i32x4.extend_low_i16x8_u"; break; case ExtendHighUVecI16x8ToVecI32x4: o << "i32x4.extend_high_i16x8_u"; break; case ExtendLowSVecI32x4ToVecI64x2: o << "i64x2.extend_low_i32x4_s"; break; case ExtendHighSVecI32x4ToVecI64x2: o << "i64x2.extend_high_i32x4_s"; break; case ExtendLowUVecI32x4ToVecI64x2: o << "i64x2.extend_low_i32x4_u"; break; case ExtendHighUVecI32x4ToVecI64x2: o << "i64x2.extend_high_i32x4_u"; break; case ConvertLowSVecI32x4ToVecF64x2: o << "f64x2.convert_low_i32x4_s"; break; case ConvertLowUVecI32x4ToVecF64x2: o << "f64x2.convert_low_i32x4_u"; break; case TruncSatZeroSVecF64x2ToVecI32x4: o << "i32x4.trunc_sat_f64x2_s_zero"; break; case TruncSatZeroUVecF64x2ToVecI32x4: o << "i32x4.trunc_sat_f64x2_u_zero"; break; case DemoteZeroVecF64x2ToVecF32x4: o << "f32x4.demote_f64x2_zero"; break; case PromoteLowVecF32x4ToVecF64x2: o << "f64x2.promote_low_f32x4"; break; case RelaxedTruncSVecF32x4ToVecI32x4: o << "i32x4.relaxed_trunc_f32x4_s"; break; case RelaxedTruncUVecF32x4ToVecI32x4: o << "i32x4.relaxed_trunc_f32x4_u"; break; case RelaxedTruncZeroSVecF64x2ToVecI32x4: o << "i32x4.relaxed_trunc_f64x2_s_zero"; break; case RelaxedTruncZeroUVecF64x2ToVecI32x4: o << "i32x4.relaxed_trunc_f64x2_u_zero"; break; case InvalidUnary: WASM_UNREACHABLE("unvalid unary operator"); } restoreNormalColor(o); } void visitBinary(Binary* curr) { prepareColor(o); switch (curr->op) { case AddInt32: o << "i32.add"; break; case SubInt32: o << "i32.sub"; break; case MulInt32: o << "i32.mul"; break; case DivSInt32: o << "i32.div_s"; break; case DivUInt32: o << "i32.div_u"; break; case RemSInt32: o << "i32.rem_s"; break; case RemUInt32: o << "i32.rem_u"; break; case AndInt32: o << "i32.and"; break; case OrInt32: o << "i32.or"; break; case XorInt32: o << "i32.xor"; break; case ShlInt32: o << "i32.shl"; break; case ShrUInt32: o << "i32.shr_u"; break; case ShrSInt32: o << "i32.shr_s"; break; case RotLInt32: o << "i32.rotl"; break; case RotRInt32: o << "i32.rotr"; break; case EqInt32: o << "i32.eq"; break; case NeInt32: o << "i32.ne"; break; case LtSInt32: o << "i32.lt_s"; break; case LtUInt32: o << "i32.lt_u"; break; case LeSInt32: o << "i32.le_s"; break; case LeUInt32: o << "i32.le_u"; break; case GtSInt32: o << "i32.gt_s"; break; case GtUInt32: o << "i32.gt_u"; break; case GeSInt32: o << "i32.ge_s"; break; case GeUInt32: o << "i32.ge_u"; break; case AddInt64: o << "i64.add"; break; case SubInt64: o << "i64.sub"; break; case MulInt64: o << "i64.mul"; break; case DivSInt64: o << "i64.div_s"; break; case DivUInt64: o << "i64.div_u"; break; case RemSInt64: o << "i64.rem_s"; break; case RemUInt64: o << "i64.rem_u"; break; case AndInt64: o << "i64.and"; break; case OrInt64: o << "i64.or"; break; case XorInt64: o << "i64.xor"; break; case ShlInt64: o << "i64.shl"; break; case ShrUInt64: o << "i64.shr_u"; break; case ShrSInt64: o << "i64.shr_s"; break; case RotLInt64: o << "i64.rotl"; break; case RotRInt64: o << "i64.rotr"; break; case EqInt64: o << "i64.eq"; break; case NeInt64: o << "i64.ne"; break; case LtSInt64: o << "i64.lt_s"; break; case LtUInt64: o << "i64.lt_u"; break; case LeSInt64: o << "i64.le_s"; break; case LeUInt64: o << "i64.le_u"; break; case GtSInt64: o << "i64.gt_s"; break; case GtUInt64: o << "i64.gt_u"; break; case GeSInt64: o << "i64.ge_s"; break; case GeUInt64: o << "i64.ge_u"; break; case AddFloat32: o << "f32.add"; break; case SubFloat32: o << "f32.sub"; break; case MulFloat32: o << "f32.mul"; break; case DivFloat32: o << "f32.div"; break; case CopySignFloat32: o << "f32.copysign"; break; case MinFloat32: o << "f32.min"; break; case MaxFloat32: o << "f32.max"; break; case EqFloat32: o << "f32.eq"; break; case NeFloat32: o << "f32.ne"; break; case LtFloat32: o << "f32.lt"; break; case LeFloat32: o << "f32.le"; break; case GtFloat32: o << "f32.gt"; break; case GeFloat32: o << "f32.ge"; break; case AddFloat64: o << "f64.add"; break; case SubFloat64: o << "f64.sub"; break; case MulFloat64: o << "f64.mul"; break; case DivFloat64: o << "f64.div"; break; case CopySignFloat64: o << "f64.copysign"; break; case MinFloat64: o << "f64.min"; break; case MaxFloat64: o << "f64.max"; break; case EqFloat64: o << "f64.eq"; break; case NeFloat64: o << "f64.ne"; break; case LtFloat64: o << "f64.lt"; break; case LeFloat64: o << "f64.le"; break; case GtFloat64: o << "f64.gt"; break; case GeFloat64: o << "f64.ge"; break; case EqVecI8x16: o << "i8x16.eq"; break; case NeVecI8x16: o << "i8x16.ne"; break; case LtSVecI8x16: o << "i8x16.lt_s"; break; case LtUVecI8x16: o << "i8x16.lt_u"; break; case GtSVecI8x16: o << "i8x16.gt_s"; break; case GtUVecI8x16: o << "i8x16.gt_u"; break; case LeSVecI8x16: o << "i8x16.le_s"; break; case LeUVecI8x16: o << "i8x16.le_u"; break; case GeSVecI8x16: o << "i8x16.ge_s"; break; case GeUVecI8x16: o << "i8x16.ge_u"; break; case EqVecI16x8: o << "i16x8.eq"; break; case NeVecI16x8: o << "i16x8.ne"; break; case LtSVecI16x8: o << "i16x8.lt_s"; break; case LtUVecI16x8: o << "i16x8.lt_u"; break; case GtSVecI16x8: o << "i16x8.gt_s"; break; case GtUVecI16x8: o << "i16x8.gt_u"; break; case LeSVecI16x8: o << "i16x8.le_s"; break; case LeUVecI16x8: o << "i16x8.le_u"; break; case GeSVecI16x8: o << "i16x8.ge_s"; break; case GeUVecI16x8: o << "i16x8.ge_u"; break; case EqVecI32x4: o << "i32x4.eq"; break; case NeVecI32x4: o << "i32x4.ne"; break; case LtSVecI32x4: o << "i32x4.lt_s"; break; case LtUVecI32x4: o << "i32x4.lt_u"; break; case GtSVecI32x4: o << "i32x4.gt_s"; break; case GtUVecI32x4: o << "i32x4.gt_u"; break; case LeSVecI32x4: o << "i32x4.le_s"; break; case LeUVecI32x4: o << "i32x4.le_u"; break; case GeSVecI32x4: o << "i32x4.ge_s"; break; case GeUVecI32x4: o << "i32x4.ge_u"; break; case EqVecI64x2: o << "i64x2.eq"; break; case NeVecI64x2: o << "i64x2.ne"; break; case LtSVecI64x2: o << "i64x2.lt_s"; break; case GtSVecI64x2: o << "i64x2.gt_s"; break; case LeSVecI64x2: o << "i64x2.le_s"; break; case GeSVecI64x2: o << "i64x2.ge_s"; break; case EqVecF32x4: o << "f32x4.eq"; break; case NeVecF32x4: o << "f32x4.ne"; break; case LtVecF32x4: o << "f32x4.lt"; break; case GtVecF32x4: o << "f32x4.gt"; break; case LeVecF32x4: o << "f32x4.le"; break; case GeVecF32x4: o << "f32x4.ge"; break; case EqVecF64x2: o << "f64x2.eq"; break; case NeVecF64x2: o << "f64x2.ne"; break; case LtVecF64x2: o << "f64x2.lt"; break; case GtVecF64x2: o << "f64x2.gt"; break; case LeVecF64x2: o << "f64x2.le"; break; case GeVecF64x2: o << "f64x2.ge"; break; case AndVec128: o << "v128.and"; break; case OrVec128: o << "v128.or"; break; case XorVec128: o << "v128.xor"; break; case AndNotVec128: o << "v128.andnot"; break; case AddVecI8x16: o << "i8x16.add"; break; case AddSatSVecI8x16: o << "i8x16.add_sat_s"; break; case AddSatUVecI8x16: o << "i8x16.add_sat_u"; break; case SubVecI8x16: o << "i8x16.sub"; break; case SubSatSVecI8x16: o << "i8x16.sub_sat_s"; break; case SubSatUVecI8x16: o << "i8x16.sub_sat_u"; break; case MinSVecI8x16: o << "i8x16.min_s"; break; case MinUVecI8x16: o << "i8x16.min_u"; break; case MaxSVecI8x16: o << "i8x16.max_s"; break; case MaxUVecI8x16: o << "i8x16.max_u"; break; case AvgrUVecI8x16: o << "i8x16.avgr_u"; break; case AddVecI16x8: o << "i16x8.add"; break; case AddSatSVecI16x8: o << "i16x8.add_sat_s"; break; case AddSatUVecI16x8: o << "i16x8.add_sat_u"; break; case SubVecI16x8: o << "i16x8.sub"; break; case SubSatSVecI16x8: o << "i16x8.sub_sat_s"; break; case SubSatUVecI16x8: o << "i16x8.sub_sat_u"; break; case MulVecI16x8: o << "i16x8.mul"; break; case MinSVecI16x8: o << "i16x8.min_s"; break; case MinUVecI16x8: o << "i16x8.min_u"; break; case MaxSVecI16x8: o << "i16x8.max_s"; break; case MaxUVecI16x8: o << "i16x8.max_u"; break; case AvgrUVecI16x8: o << "i16x8.avgr_u"; break; case Q15MulrSatSVecI16x8: o << "i16x8.q15mulr_sat_s"; break; case ExtMulLowSVecI16x8: o << "i16x8.extmul_low_i8x16_s"; break; case ExtMulHighSVecI16x8: o << "i16x8.extmul_high_i8x16_s"; break; case ExtMulLowUVecI16x8: o << "i16x8.extmul_low_i8x16_u"; break; case ExtMulHighUVecI16x8: o << "i16x8.extmul_high_i8x16_u"; break; case AddVecI32x4: o << "i32x4.add"; break; case SubVecI32x4: o << "i32x4.sub"; break; case MulVecI32x4: o << "i32x4.mul"; break; case MinSVecI32x4: o << "i32x4.min_s"; break; case MinUVecI32x4: o << "i32x4.min_u"; break; case MaxSVecI32x4: o << "i32x4.max_s"; break; case MaxUVecI32x4: o << "i32x4.max_u"; break; case DotSVecI16x8ToVecI32x4: o << "i32x4.dot_i16x8_s"; break; case ExtMulLowSVecI32x4: o << "i32x4.extmul_low_i16x8_s"; break; case ExtMulHighSVecI32x4: o << "i32x4.extmul_high_i16x8_s"; break; case ExtMulLowUVecI32x4: o << "i32x4.extmul_low_i16x8_u"; break; case ExtMulHighUVecI32x4: o << "i32x4.extmul_high_i16x8_u"; break; case AddVecI64x2: o << "i64x2.add"; break; case SubVecI64x2: o << "i64x2.sub"; break; case MulVecI64x2: o << "i64x2.mul"; break; case ExtMulLowSVecI64x2: o << "i64x2.extmul_low_i32x4_s"; break; case ExtMulHighSVecI64x2: o << "i64x2.extmul_high_i32x4_s"; break; case ExtMulLowUVecI64x2: o << "i64x2.extmul_low_i32x4_u"; break; case ExtMulHighUVecI64x2: o << "i64x2.extmul_high_i32x4_u"; break; case AddVecF32x4: o << "f32x4.add"; break; case SubVecF32x4: o << "f32x4.sub"; break; case MulVecF32x4: o << "f32x4.mul"; break; case DivVecF32x4: o << "f32x4.div"; break; case MinVecF32x4: o << "f32x4.min"; break; case MaxVecF32x4: o << "f32x4.max"; break; case PMinVecF32x4: o << "f32x4.pmin"; break; case PMaxVecF32x4: o << "f32x4.pmax"; break; case AddVecF64x2: o << "f64x2.add"; break; case SubVecF64x2: o << "f64x2.sub"; break; case MulVecF64x2: o << "f64x2.mul"; break; case DivVecF64x2: o << "f64x2.div"; break; case MinVecF64x2: o << "f64x2.min"; break; case MaxVecF64x2: o << "f64x2.max"; break; case PMinVecF64x2: o << "f64x2.pmin"; break; case PMaxVecF64x2: o << "f64x2.pmax"; break; case NarrowSVecI16x8ToVecI8x16: o << "i8x16.narrow_i16x8_s"; break; case NarrowUVecI16x8ToVecI8x16: o << "i8x16.narrow_i16x8_u"; break; case NarrowSVecI32x4ToVecI16x8: o << "i16x8.narrow_i32x4_s"; break; case NarrowUVecI32x4ToVecI16x8: o << "i16x8.narrow_i32x4_u"; break; case SwizzleVecI8x16: o << "i8x16.swizzle"; break; case RelaxedMinVecF32x4: o << "f32x4.relaxed_min"; break; case RelaxedMaxVecF32x4: o << "f32x4.relaxed_max"; break; case RelaxedMinVecF64x2: o << "f64x2.relaxed_min"; break; case RelaxedMaxVecF64x2: o << "f64x2.relaxed_max"; break; case RelaxedSwizzleVecI8x16: o << "i8x16.relaxed_swizzle"; break; case RelaxedQ15MulrSVecI16x8: o << "i16x8.relaxed_q15mulr_s"; break; case DotI8x16I7x16SToVecI16x8: o << "i16x8.dot_i8x16_i7x16_s"; break; case DotI8x16I7x16UToVecI16x8: o << "i16x8.dot_i8x16_i7x16_u"; break; case InvalidBinary: WASM_UNREACHABLE("unvalid binary operator"); } restoreNormalColor(o); } void visitSelect(Select* curr) { prepareColor(o) << "select"; restoreNormalColor(o); if (curr->type.isRef()) { o << ' '; printResultType(o, curr->type, wasm); } } void visitDrop(Drop* curr) { printMedium(o, "drop"); } void visitReturn(Return* curr) { printMedium(o, "return"); } void visitMemorySize(MemorySize* curr) { printMedium(o, "memory.size"); } void visitMemoryGrow(MemoryGrow* curr) { printMedium(o, "memory.grow"); } void visitRefNull(RefNull* curr) { printMedium(o, "ref.null "); printHeapType(o, curr->type.getHeapType(), wasm); } void visitRefIs(RefIs* curr) { switch (curr->op) { case RefIsNull: printMedium(o, "ref.is_null"); break; case RefIsFunc: printMedium(o, "ref.is_func"); break; case RefIsData: printMedium(o, "ref.is_data"); break; case RefIsI31: printMedium(o, "ref.is_i31"); break; default: WASM_UNREACHABLE("unimplemented ref.is_*"); } } void visitRefFunc(RefFunc* curr) { printMedium(o, "ref.func "); printName(curr->func, o); } void visitRefEq(RefEq* curr) { printMedium(o, "ref.eq"); } void visitTableGet(TableGet* curr) { printMedium(o, "table.get "); printName(curr->table, o); } void visitTableSet(TableSet* curr) { printMedium(o, "table.set "); printName(curr->table, o); } void visitTableSize(TableSize* curr) { printMedium(o, "table.size "); printName(curr->table, o); } void visitTableGrow(TableGrow* curr) { printMedium(o, "table.grow "); printName(curr->table, o); } void visitTry(Try* curr) { printMedium(o, "try"); if (curr->name.is()) { o << ' '; printName(curr->name, o); } if (curr->type.isConcrete()) { o << ' '; printResultType(o, curr->type, wasm); } } void visitThrow(Throw* curr) { printMedium(o, "throw "); printName(curr->tag, o); } void visitRethrow(Rethrow* curr) { printMedium(o, "rethrow "); printName(curr->target, o); } void visitNop(Nop* curr) { printMinor(o, "nop"); } void visitUnreachable(Unreachable* curr) { printMinor(o, "unreachable"); } void visitPop(Pop* curr) { prepareColor(o) << "pop"; for (auto type : curr->type) { o << ' '; printType(o, type, wasm); } restoreNormalColor(o); } void visitTupleMake(TupleMake* curr) { printMedium(o, "tuple.make"); } void visitTupleExtract(TupleExtract* curr) { printMedium(o, "tuple.extract "); o << curr->index; } void visitI31New(I31New* curr) { printMedium(o, "i31.new"); } void visitI31Get(I31Get* curr) { printMedium(o, curr->signed_ ? "i31.get_s" : "i31.get_u"); } void visitCallRef(CallRef* curr) { if (curr->isReturn) { printMedium(o, "return_call_ref"); } else { printMedium(o, "call_ref"); } } void visitRefTest(RefTest* curr) { if (curr->rtt) { printMedium(o, "ref.test"); } else { printMedium(o, "ref.test_static "); printHeapType(o, curr->intendedType, wasm); } } void visitRefCast(RefCast* curr) { if (curr->rtt) { printMedium(o, "ref.cast"); } else { if (curr->safety == RefCast::Unsafe) { printMedium(o, "ref.cast_nop_static "); } else { printMedium(o, "ref.cast_static "); } printHeapType(o, curr->intendedType, wasm); } } void visitBrOn(BrOn* curr) { switch (curr->op) { case BrOnNull: printMedium(o, "br_on_null "); break; case BrOnNonNull: printMedium(o, "br_on_non_null "); break; case BrOnCast: if (curr->rtt) { printMedium(o, "br_on_cast "); } else { printMedium(o, "br_on_cast_static "); printName(curr->name, o); o << ' '; printHeapType(o, curr->intendedType, wasm); return; } break; case BrOnCastFail: if (curr->rtt) { printMedium(o, "br_on_cast_fail "); } else { printMedium(o, "br_on_cast_static_fail "); printName(curr->name, o); o << ' '; printHeapType(o, curr->intendedType, wasm); return; } break; case BrOnFunc: printMedium(o, "br_on_func "); break; case BrOnNonFunc: printMedium(o, "br_on_non_func "); break; case BrOnData: printMedium(o, "br_on_data "); break; case BrOnNonData: printMedium(o, "br_on_non_data "); break; case BrOnI31: printMedium(o, "br_on_i31 "); break; case BrOnNonI31: printMedium(o, "br_on_non_i31 "); break; default: WASM_UNREACHABLE("invalid ref.is_*"); } printName(curr->name, o); } void visitRttCanon(RttCanon* curr) { printMedium(o, "rtt.canon "); TypeNamePrinter(o, wasm).print(curr->type.getRtt().heapType); } void visitRttSub(RttSub* curr) { if (curr->fresh) { printMedium(o, "rtt.fresh_sub "); } else { printMedium(o, "rtt.sub "); } TypeNamePrinter(o, wasm).print(curr->type.getRtt().heapType); } // If we cannot print a valid unreachable instruction (say, a struct.get, // where if the ref is unreachable, we don't know what heap type to print), // then print the children in a block, which is good enough as this // instruction is never reached anyhow. // // This function checks if the input is in fact unreachable, and if so, begins // to emit a replacement for it and returns true. bool printUnreachableReplacement(Expression* curr) { if (curr->type == Type::unreachable) { printMedium(o, "block"); return true; } return false; } void visitStructNew(StructNew* curr) { if (printUnreachableReplacement(curr)) { return; } printMedium(o, "struct.new"); if (curr->isWithDefault()) { printMedium(o, "_default"); } if (curr->rtt) { printMedium(o, "_with_rtt"); } o << ' '; TypeNamePrinter(o, wasm).print(curr->type.getHeapType()); } void printFieldName(HeapType type, Index index) { processFieldName(wasm, type, index, [&](Name name) { if (name.is()) { o << '$' << name; } else { o << index; } }); } void visitStructGet(StructGet* curr) { if (printUnreachableReplacement(curr->ref)) { return; } auto heapType = curr->ref->type.getHeapType(); const auto& field = heapType.getStruct().fields[curr->index]; if (field.type == Type::i32 && field.packedType != Field::not_packed) { if (curr->signed_) { printMedium(o, "struct.get_s "); } else { printMedium(o, "struct.get_u "); } } else { printMedium(o, "struct.get "); } TypeNamePrinter(o, wasm).print(heapType); o << ' '; printFieldName(heapType, curr->index); } void visitStructSet(StructSet* curr) { if (printUnreachableReplacement(curr->ref)) { return; } printMedium(o, "struct.set "); auto heapType = curr->ref->type.getHeapType(); TypeNamePrinter(o, wasm).print(heapType); o << ' '; printFieldName(heapType, curr->index); } void visitArrayNew(ArrayNew* curr) { if (printUnreachableReplacement(curr)) { return; } printMedium(o, "array.new"); if (curr->isWithDefault()) { printMedium(o, "_default"); } if (curr->rtt) { printMedium(o, "_with_rtt"); } o << ' '; TypeNamePrinter(o, wasm).print(curr->type.getHeapType()); } void visitArrayInit(ArrayInit* curr) { if (printUnreachableReplacement(curr)) { return; } printMedium(o, "array.init"); if (!curr->rtt) { printMedium(o, "_static"); } o << ' '; TypeNamePrinter(o, wasm).print(curr->type.getHeapType()); } void visitArrayGet(ArrayGet* curr) { if (printUnreachableReplacement(curr->ref)) { return; } const auto& element = curr->ref->type.getHeapType().getArray().element; if (element.type == Type::i32 && element.packedType != Field::not_packed) { if (curr->signed_) { printMedium(o, "array.get_s "); } else { printMedium(o, "array.get_u "); } } else { printMedium(o, "array.get "); } TypeNamePrinter(o, wasm).print(curr->ref->type.getHeapType()); } void visitArraySet(ArraySet* curr) { if (printUnreachableReplacement(curr->ref)) { return; } printMedium(o, "array.set "); TypeNamePrinter(o, wasm).print(curr->ref->type.getHeapType()); } void visitArrayLen(ArrayLen* curr) { if (printUnreachableReplacement(curr->ref)) { return; } printMedium(o, "array.len "); TypeNamePrinter(o, wasm).print(curr->ref->type.getHeapType()); } void visitArrayCopy(ArrayCopy* curr) { if (printUnreachableReplacement(curr->srcRef) || printUnreachableReplacement(curr->destRef)) { return; } printMedium(o, "array.copy "); TypeNamePrinter(o, wasm).print(curr->destRef->type.getHeapType()); o << ' '; TypeNamePrinter(o, wasm).print(curr->srcRef->type.getHeapType()); } void visitRefAs(RefAs* curr) { switch (curr->op) { case RefAsNonNull: printMedium(o, "ref.as_non_null"); break; case RefAsFunc: printMedium(o, "ref.as_func"); break; case RefAsData: printMedium(o, "ref.as_data"); break; case RefAsI31: printMedium(o, "ref.as_i31"); break; default: WASM_UNREACHABLE("invalid ref.is_*"); } } }; // Prints an expression in s-expr format, including both the // internal contents and the nested children. struct PrintSExpression : public UnifiedExpressionVisitor { std::ostream& o; unsigned indent = 0; bool minify; const char* maybeSpace; const char* maybeNewLine; bool full = false; // whether to not elide nodes in output when possible // (like implicit blocks) and to emit types bool stackIR = false; // whether to print stack IR if it is present // (if false, and Stack IR is there, we just // note it exists) Module* currModule = nullptr; Function* currFunction = nullptr; Function::DebugLocation lastPrintedLocation; bool debugInfo; // Used to print delegate's depth argument when it throws to the caller int controlFlowDepth = 0; PrintSExpression(std::ostream& o) : o(o) { setMinify(false); if (!full) { full = isFullForced(); } } void printDebugLocation(const Function::DebugLocation& location) { if (lastPrintedLocation == location) { return; } lastPrintedLocation = location; auto fileName = currModule->debugInfoFileNames[location.fileIndex]; o << ";;@ " << fileName << ":" << location.lineNumber << ":" << location.columnNumber << '\n'; doIndent(o, indent); } void printDebugLocation(Expression* curr) { if (currFunction) { // show an annotation, if there is one auto& debugLocations = currFunction->debugLocations; auto iter = debugLocations.find(curr); if (iter != debugLocations.end()) { printDebugLocation(iter->second); } // show a binary position, if there is one if (debugInfo) { auto iter = currFunction->expressionLocations.find(curr); if (iter != currFunction->expressionLocations.end()) { Colors::grey(o); o << ";; code offset: 0x" << std::hex << iter->second.start << std::dec << '\n'; restoreNormalColor(o); doIndent(o, indent); } } } } // Prints debug info for a delimiter in an expression. void printDebugDelimiterLocation(Expression* curr, Index i) { if (currFunction && debugInfo) { auto iter = currFunction->delimiterLocations.find(curr); if (iter != currFunction->delimiterLocations.end()) { auto& locations = iter->second; Colors::grey(o); o << ";; code offset: 0x" << std::hex << locations[i] << std::dec << '\n'; restoreNormalColor(o); doIndent(o, indent); } } } void printExpressionContents(Expression* curr) { if (currModule) { PrintExpressionContents(currModule, currFunction, o).visit(curr); } else { PrintExpressionContents(currFunction, o).visit(curr); } } void visit(Expression* curr) { printDebugLocation(curr); UnifiedExpressionVisitor::visit(curr); } void setMinify(bool minify_) { minify = minify_; maybeSpace = minify ? "" : " "; maybeNewLine = minify ? "" : "\n"; } void setFull(bool full_) { full = full_; } void setStackIR(bool stackIR_) { stackIR = stackIR_; } void setDebugInfo(bool debugInfo_) { debugInfo = debugInfo_; } void incIndent() { if (minify) { return; } o << '\n'; indent++; } void decIndent() { if (!minify) { assert(indent > 0); indent--; doIndent(o, indent); } o << ')'; } void printFullLine(Expression* expression) { if (!minify) { doIndent(o, indent); } if (full) { o << "[" << expression->type << "] "; } visit(expression); o << maybeNewLine; } // loop, if, and try can contain implicit blocks. But they are not needed to // be printed in some cases. void maybePrintImplicitBlock(Expression* curr, bool allowMultipleInsts) { auto block = curr->dynCast(); if (!full && block && block->name.isNull() && (allowMultipleInsts || block->list.size() == 1)) { for (auto expression : block->list) { printFullLine(expression); } } else { printFullLine(curr); } } // Generic visitor, overridden only when necessary. void visitExpression(Expression* curr) { o << '('; printExpressionContents(curr); auto it = ChildIterator(curr); if (!it.children.empty()) { incIndent(); for (auto* child : it) { printFullLine(child); } decIndent(); } else { o << ')'; } } void visitBlock(Block* curr) { // special-case Block, because Block nesting (in their first element) can be // incredibly deep std::vector stack; while (1) { if (stack.size() > 0) { doIndent(o, indent); printDebugLocation(curr); } stack.push_back(curr); if (full) { o << "[" << curr->type << "] "; } o << '('; printExpressionContents(curr); incIndent(); if (curr->list.size() > 0 && curr->list[0]->is()) { // recurse into the first element curr = curr->list[0]->cast(); continue; } else { break; // that's all we can recurse, start to unwind } } int startControlFlowDepth = controlFlowDepth; controlFlowDepth += stack.size(); auto* top = stack.back(); while (stack.size() > 0) { curr = stack.back(); stack.pop_back(); auto& list = curr->list; for (size_t i = 0; i < list.size(); i++) { if (curr != top && i == 0) { // one of the block recursions we already handled decIndent(); if (full) { o << " ;; end block"; auto* child = list[0]->cast(); if (child->name.is()) { o << ' ' << child->name; } } o << '\n'; continue; } printFullLine(list[i]); } } decIndent(); if (full) { o << " ;; end block"; if (curr->name.is()) { o << ' ' << curr->name; } } controlFlowDepth = startControlFlowDepth; } void visitIf(If* curr) { controlFlowDepth++; o << '('; printExpressionContents(curr); incIndent(); printFullLine(curr->condition); maybePrintImplicitBlock(curr->ifTrue, false); if (curr->ifFalse) { // Note: debug info here is not used as LLVM does not emit ifs, and since // LLVM is the main source of DWARF, effectively we never encounter ifs // with DWARF. printDebugDelimiterLocation(curr, BinaryLocations::Else); maybePrintImplicitBlock(curr->ifFalse, false); } decIndent(); if (full) { o << " ;; end if"; } controlFlowDepth--; } void visitLoop(Loop* curr) { controlFlowDepth++; o << '('; printExpressionContents(curr); incIndent(); maybePrintImplicitBlock(curr->body, true); decIndent(); if (full) { o << " ;; end loop"; if (curr->name.is()) { o << ' ' << curr->name; } } controlFlowDepth--; } // try-catch-end is written in the folded wat format as // (try // (do // ... // ) // (catch $e // ... // ) // ... // (catch_all // ... // ) // ) // The parenthesis wrapping do/catch/catch_all is just a syntax and does not // affect nested depths of instructions within. // // try-delegate is written in the forded format as // (try // (do // ... // ) // (delegate $label) // ) // When the 'delegate' delegates to the caller, we write the argument as an // immediate. void visitTry(Try* curr) { controlFlowDepth++; o << '('; printExpressionContents(curr); incIndent(); doIndent(o, indent); o << '('; printMedium(o, "do"); incIndent(); maybePrintImplicitBlock(curr->body, true); decIndent(); o << "\n"; for (size_t i = 0; i < curr->catchTags.size(); i++) { doIndent(o, indent); printDebugDelimiterLocation(curr, i); o << '('; printMedium(o, "catch "); printName(curr->catchTags[i], o); incIndent(); maybePrintImplicitBlock(curr->catchBodies[i], true); decIndent(); o << "\n"; } if (curr->hasCatchAll()) { doIndent(o, indent); printDebugDelimiterLocation(curr, curr->catchTags.size()); o << '('; printMedium(o, "catch_all"); incIndent(); maybePrintImplicitBlock(curr->catchBodies.back(), true); decIndent(); o << "\n"; } controlFlowDepth--; if (curr->isDelegate()) { doIndent(o, indent); o << '('; printMedium(o, "delegate "); if (curr->delegateTarget == DELEGATE_CALLER_TARGET) { o << controlFlowDepth; } else { printName(curr->delegateTarget, o); } o << ")\n"; } decIndent(); if (full) { o << " ;; end try"; } } void maybePrintUnreachableReplacement(Expression* curr, Type type) { // See the parallel function // PrintExpressionContents::printUnreachableReplacement for background. That // one handles the header, and this one the body. For convenience, this one // also gets a parameter of the type to check for unreachability, to avoid // boilerplate in the callers; if the type is not unreachable, it does the // normal behavior. // // Note that the list of instructions using that function must match those // using this one, so we print the header and body properly together. if (type != Type::unreachable) { visitExpression(curr); return; } // Emit a block with drops of the children. o << "(block"; if (!minify) { o << " ;; (replaces something unreachable we can't emit)"; } incIndent(); for (auto* child : ChildIterator(curr)) { Drop drop; drop.value = child; printFullLine(&drop); } decIndent(); } void visitStructNew(StructNew* curr) { maybePrintUnreachableReplacement(curr, curr->type); } void visitStructSet(StructSet* curr) { maybePrintUnreachableReplacement(curr, curr->ref->type); } void visitStructGet(StructGet* curr) { maybePrintUnreachableReplacement(curr, curr->ref->type); } void visitArrayNew(ArrayNew* curr) { maybePrintUnreachableReplacement(curr, curr->type); } void visitArrayInit(ArrayInit* curr) { maybePrintUnreachableReplacement(curr, curr->type); } void visitArraySet(ArraySet* curr) { maybePrintUnreachableReplacement(curr, curr->ref->type); } void visitArrayGet(ArrayGet* curr) { maybePrintUnreachableReplacement(curr, curr->ref->type); } // Module-level visitors void printSupertypeOr(HeapType curr, std::string noSuper) { if (auto super = curr.getSuperType()) { TypeNamePrinter(o, currModule).print(*super); } else { o << noSuper; } } void handleSignature(HeapType curr, Name name = Name()) { Signature sig = curr.getSignature(); bool hasSupertype = !name.is() && (getTypeSystem() == TypeSystem::Nominal || getTypeSystem() == TypeSystem::Isorecursive); if (hasSupertype) { o << "(func_subtype"; } else { o << "(func"; } if (name.is()) { o << " $" << name; } if (sig.params.size() > 0) { o << maybeSpace; o << "(param "; auto sep = ""; for (auto type : sig.params) { o << sep; printType(o, type, currModule); sep = " "; } o << ')'; } if (sig.results.size() > 0) { o << maybeSpace; o << "(result "; auto sep = ""; for (auto type : sig.results) { o << sep; printType(o, type, currModule); sep = " "; } o << ')'; } if (hasSupertype) { o << ' '; printSupertypeOr(curr, "func"); } o << ")"; } void handleFieldBody(const Field& field) { if (field.mutable_) { o << "(mut "; } if (field.type == Type::i32 && field.packedType != Field::not_packed) { if (field.packedType == Field::i8) { o << "i8"; } else if (field.packedType == Field::i16) { o << "i16"; } else { WASM_UNREACHABLE("invalid packed type"); } } else { printType(o, field.type, currModule); } if (field.mutable_) { o << ')'; } } void handleArray(HeapType curr) { bool hasSupertype = getTypeSystem() == TypeSystem::Nominal || getTypeSystem() == TypeSystem::Isorecursive; if (hasSupertype) { o << "(array_subtype "; } else { o << "(array "; } handleFieldBody(curr.getArray().element); if (hasSupertype) { o << ' '; printSupertypeOr(curr, "data"); } o << ')'; } void handleStruct(HeapType curr) { bool hasSupertype = getTypeSystem() == TypeSystem::Nominal || getTypeSystem() == TypeSystem::Isorecursive; const auto& fields = curr.getStruct().fields; if (hasSupertype) { o << "(struct_subtype "; } else { o << "(struct "; } auto sep = ""; for (Index i = 0; i < fields.size(); i++) { o << sep << "(field "; processFieldName(currModule, curr, i, [&](Name name) { if (name.is()) { o << '$' << name << ' '; } }); handleFieldBody(fields[i]); o << ')'; sep = " "; } if (hasSupertype) { o << ' '; printSupertypeOr(curr, "data"); } o << ')'; } void handleHeapType(HeapType type) { if (type.isSignature()) { handleSignature(type); } else if (type.isArray()) { handleArray(type); } else if (type.isStruct()) { handleStruct(type); } else { o << type; } } void visitExport(Export* curr) { o << '('; printMedium(o, "export "); printText(o, curr->name.str) << " ("; switch (curr->kind) { case ExternalKind::Function: o << "func"; break; case ExternalKind::Table: o << "table"; break; case ExternalKind::Memory: o << "memory"; break; case ExternalKind::Global: o << "global"; break; case ExternalKind::Tag: o << "tag"; break; case ExternalKind::Invalid: WASM_UNREACHABLE("invalid ExternalKind"); } o << ' '; printName(curr->value, o) << "))"; } void emitImportHeader(Importable* curr) { printMedium(o, "import "); printText(o, curr->module.str) << ' '; printText(o, curr->base.str) << ' '; } void visitGlobal(Global* curr) { if (curr->imported()) { visitImportedGlobal(curr); } else { visitDefinedGlobal(curr); } } void emitGlobalType(Global* curr) { if (curr->mutable_) { o << "(mut "; printType(o, curr->type, currModule) << ')'; } else { printType(o, curr->type, currModule); } } void visitImportedGlobal(Global* curr) { doIndent(o, indent); o << '('; emitImportHeader(curr); o << "(global "; printName(curr->name, o) << ' '; emitGlobalType(curr); o << "))" << maybeNewLine; } void visitDefinedGlobal(Global* curr) { doIndent(o, indent); o << '('; printMedium(o, "global "); printName(curr->name, o) << ' '; emitGlobalType(curr); o << ' '; visit(curr->init); o << ')'; o << maybeNewLine; } void visitFunction(Function* curr) { if (curr->imported()) { visitImportedFunction(curr); } else { visitDefinedFunction(curr); } } void visitImportedFunction(Function* curr) { doIndent(o, indent); currFunction = curr; lastPrintedLocation = {0, 0, 0}; o << '('; emitImportHeader(curr); handleSignature(curr->getSig(), curr->name); o << ')'; o << maybeNewLine; } void visitDefinedFunction(Function* curr) { doIndent(o, indent); currFunction = curr; lastPrintedLocation = {0, 0, 0}; if (currFunction->prologLocation.size()) { printDebugLocation(*currFunction->prologLocation.begin()); } o << '('; printMajor(o, "func "); printName(curr->name, o); if (getTypeSystem() == TypeSystem::Nominal || getTypeSystem() == TypeSystem::Isorecursive) { o << " (type "; printHeapType(o, curr->type, currModule) << ')'; } if (!stackIR && curr->stackIR && !minify) { o << " (; has Stack IR ;)"; } if (curr->getParams().size() > 0) { Index i = 0; for (const auto& param : curr->getParams()) { o << maybeSpace; o << '('; printMinor(o, "param "); printLocal(i, currFunction, o); o << ' '; printType(o, param, currModule) << ')'; ++i; } } if (curr->getResults() != Type::none) { o << maybeSpace; printResultType(o, curr->getResults(), currModule); } incIndent(); for (size_t i = curr->getVarIndexBase(); i < curr->getNumLocals(); i++) { doIndent(o, indent); o << '('; printMinor(o, "local "); printLocal(i, currFunction, o) << ' '; printType(o, curr->getLocalType(i), currModule) << ')'; o << maybeNewLine; } // Print the body. if (!stackIR || !curr->stackIR) { // It is ok to emit a block here, as a function can directly contain a // list, even if our ast avoids that for simplicity. We can just do that // optimization here.. if (!full && curr->body->is() && curr->body->cast()->name.isNull()) { Block* block = curr->body->cast(); for (auto item : block->list) { printFullLine(item); } } else { printFullLine(curr->body); } assert(controlFlowDepth == 0); } else { // Print the stack IR. printStackIR(curr->stackIR.get(), o, curr); } if (currFunction->epilogLocation.size() && lastPrintedLocation != *currFunction->epilogLocation.begin()) { // Print last debug location: mix of decIndent and printDebugLocation // logic. doIndent(o, indent); if (!minify) { indent--; } printDebugLocation(*currFunction->epilogLocation.begin()); o << ')'; } else { decIndent(); } o << maybeNewLine; } void visitTag(Tag* curr) { if (curr->imported()) { visitImportedTag(curr); } else { visitDefinedTag(curr); } } void visitImportedTag(Tag* curr) { doIndent(o, indent); o << '('; emitImportHeader(curr); o << "(tag "; printName(curr->name, o); o << maybeSpace; printParamType(o, curr->sig.params, currModule); o << "))"; o << maybeNewLine; } void visitDefinedTag(Tag* curr) { doIndent(o, indent); o << '('; printMedium(o, "tag "); printName(curr->name, o); o << maybeSpace; printParamType(o, curr->sig.params, currModule); o << ")" << maybeNewLine; } void printTableHeader(Table* curr) { o << '('; printMedium(o, "table") << ' '; printName(curr->name, o) << ' '; o << curr->initial; if (curr->hasMax()) { o << ' ' << curr->max; } o << ' '; printType(o, curr->type, currModule) << ')'; } void visitTable(Table* curr) { if (curr->imported()) { doIndent(o, indent); o << '('; emitImportHeader(curr); printTableHeader(curr); o << ')' << maybeNewLine; } else { doIndent(o, indent); printTableHeader(curr); o << maybeNewLine; } } void visitElementSegment(ElementSegment* curr) { bool usesExpressions = TableUtils::usesExpressions(curr, currModule); auto printElemType = [&]() { if (!usesExpressions) { o << "func"; } else { printType(o, curr->type, currModule); } }; doIndent(o, indent); o << '('; printMedium(o, "elem"); // If there is no explicit name, and there are multiple segments, use our // internal names to differentiate them. if (curr->hasExplicitName || currModule->elementSegments.size() > 1) { o << ' '; printName(curr->name, o); } if (curr->table.is()) { if (usesExpressions || currModule->tables.size() > 1) { // tableuse o << " (table "; printName(curr->table, o); o << ")"; } o << ' '; visit(curr->offset); if (usesExpressions || currModule->tables.size() > 1) { o << ' '; printElemType(); } } else { o << ' '; printElemType(); } if (!usesExpressions) { for (auto* entry : curr->data) { auto* refFunc = entry->cast(); o << ' '; printName(refFunc->func, o); } } else { for (auto* entry : curr->data) { o << ' '; printExpression(entry, o); } } o << ')' << maybeNewLine; } void printMemoryHeader(Memory* curr) { o << '('; printMedium(o, "memory") << ' '; printName(curr->name, o) << ' '; if (curr->shared) { o << '('; printMedium(o, "shared "); } if (curr->is64()) { o << "i64 "; } o << curr->initial; if (curr->hasMax()) { o << ' ' << curr->max; } if (curr->shared) { o << ")"; } o << ")"; } void visitMemory(Memory* curr) { if (!curr->exists) { return; } if (curr->imported()) { doIndent(o, indent); o << '('; emitImportHeader(curr); printMemoryHeader(&currModule->memory); o << ')' << maybeNewLine; } else { doIndent(o, indent); printMemoryHeader(curr); o << '\n'; } for (auto segment : curr->segments) { doIndent(o, indent); o << '('; printMajor(o, "data "); if (segment.name.is()) { printName(segment.name, o); o << ' '; } if (!segment.isPassive) { visit(segment.offset); o << ' '; } o << "\""; for (size_t i = 0; i < segment.data.size(); i++) { unsigned char c = segment.data[i]; switch (c) { case '\n': o << "\\n"; break; case '\r': o << "\\0d"; break; case '\t': o << "\\t"; break; case '\f': o << "\\0c"; break; case '\b': o << "\\08"; break; case '\\': o << "\\\\"; break; case '"': o << "\\\""; break; case '\'': o << "\\'"; break; default: { if (c >= 32 && c < 127) { o << c; } else { o << std::hex << '\\' << (c / 16) << (c % 16) << std::dec; } } } } o << "\")" << maybeNewLine; } } void printDylinkSection(const std::unique_ptr& dylinkSection) { doIndent(o, indent) << ";; dylink section\n"; doIndent(o, indent) << ";; memorysize: " << dylinkSection->memorySize << '\n'; doIndent(o, indent) << ";; memoryalignment: " << dylinkSection->memoryAlignment << '\n'; doIndent(o, indent) << ";; tablesize: " << dylinkSection->tableSize << '\n'; doIndent(o, indent) << ";; tablealignment: " << dylinkSection->tableAlignment << '\n'; for (auto& neededDynlib : dylinkSection->neededDynlibs) { doIndent(o, indent) << ";; needed dynlib: " << neededDynlib << '\n'; } if (dylinkSection->tail.size()) { doIndent(o, indent) << ";; extra dylink data, size " << dylinkSection->tail.size() << "\n"; } } void visitModule(Module* curr) { currModule = curr; o << '('; printMajor(o, "module"); if (curr->name.is()) { o << ' '; printName(curr->name, o); } incIndent(); // Use the same type order as the binary output would even though there is // no code size benefit in the text format. auto indexedTypes = ModuleUtils::getOptimizedIndexedHeapTypes(*curr); std::optional currGroup; bool nontrivialGroup = false; auto finishGroup = [&]() { if (nontrivialGroup) { decIndent(); o << maybeNewLine; } }; for (auto type : indexedTypes.types) { RecGroup newGroup = type.getRecGroup(); if (!currGroup || *currGroup != newGroup) { if (currGroup) { finishGroup(); } currGroup = newGroup; nontrivialGroup = currGroup->size() > 1; if (nontrivialGroup) { doIndent(o, indent); o << "(rec "; incIndent(); } } doIndent(o, indent); o << '('; printMedium(o, "type") << ' '; TypeNamePrinter(o, curr).print(type); o << ' '; handleHeapType(type); o << ")" << maybeNewLine; } finishGroup(); ModuleUtils::iterImportedMemories( *curr, [&](Memory* memory) { visitMemory(memory); }); ModuleUtils::iterImportedTables(*curr, [&](Table* table) { visitTable(table); }); ModuleUtils::iterImportedGlobals( *curr, [&](Global* global) { visitGlobal(global); }); ModuleUtils::iterImportedFunctions( *curr, [&](Function* func) { visitFunction(func); }); ModuleUtils::iterImportedTags(*curr, [&](Tag* tag) { visitTag(tag); }); ModuleUtils::iterDefinedGlobals( *curr, [&](Global* global) { visitGlobal(global); }); ModuleUtils::iterDefinedMemories( *curr, [&](Memory* memory) { visitMemory(memory); }); ModuleUtils::iterDefinedTables(*curr, [&](Table* table) { visitTable(table); }); for (auto& segment : curr->elementSegments) { visitElementSegment(segment.get()); } auto elemDeclareNames = TableUtils::getFunctionsNeedingElemDeclare(*curr); if (!elemDeclareNames.empty()) { doIndent(o, indent); printMedium(o, "(elem"); o << " declare func"; for (auto name : elemDeclareNames) { o << " $" << name; } o << ')' << maybeNewLine; } ModuleUtils::iterDefinedTags(*curr, [&](Tag* tag) { visitTag(tag); }); for (auto& child : curr->exports) { doIndent(o, indent); visitExport(child.get()); o << maybeNewLine; } if (curr->start.is()) { doIndent(o, indent); o << '('; printMedium(o, "start") << ' '; printName(curr->start, o) << ')'; o << maybeNewLine; } ModuleUtils::iterDefinedFunctions( *curr, [&](Function* func) { visitFunction(func); }); if (curr->dylinkSection) { printDylinkSection(curr->dylinkSection); } for (auto& section : curr->userSections) { doIndent(o, indent); o << ";; custom section \"" << section.name << "\", size " << section.data.size(); bool isPrintable = true; for (auto c : section.data) { if (!isprint(static_cast(c))) { isPrintable = false; break; } } if (isPrintable) { o << ", contents: "; // std::quoted is not available in all the supported compilers yet. o << '"'; for (auto c : section.data) { if (c == '\\' || c == '"') { o << '\\'; } o << c; } o << '"'; } o << maybeNewLine; } if (curr->hasFeaturesSection) { doIndent(o, indent); o << ";; features section: " << curr->features.toString() << '\n'; } decIndent(); o << maybeNewLine; currModule = nullptr; } }; // Prints out a module class Printer : public Pass { protected: std::ostream& o; public: Printer() : o(std::cout) {} Printer(std::ostream* o) : o(*o) {} bool modifiesBinaryenIR() override { return false; } void run(PassRunner* runner, Module* module) override { PrintSExpression print(o); print.setDebugInfo(runner->options.debugInfo); print.visitModule(module); } }; Pass* createPrinterPass() { return new Printer(); } // Prints out a minified module class MinifiedPrinter : public Printer { public: MinifiedPrinter() = default; MinifiedPrinter(std::ostream* o) : Printer(o) {} void run(PassRunner* runner, Module* module) override { PrintSExpression print(o); print.setMinify(true); print.setDebugInfo(runner->options.debugInfo); print.visitModule(module); } }; Pass* createMinifiedPrinterPass() { return new MinifiedPrinter(); } // Prints out a module withough elision, i.e., the full ast class FullPrinter : public Printer { public: FullPrinter() = default; FullPrinter(std::ostream* o) : Printer(o) {} void run(PassRunner* runner, Module* module) override { PrintSExpression print(o); print.setFull(true); print.setDebugInfo(runner->options.debugInfo); print.visitModule(module); } }; Pass* createFullPrinterPass() { return new FullPrinter(); } // Print Stack IR (if present) class PrintStackIR : public Printer { public: PrintStackIR() = default; PrintStackIR(std::ostream* o) : Printer(o) {} void run(PassRunner* runner, Module* module) override { PrintSExpression print(o); print.setDebugInfo(runner->options.debugInfo); print.setStackIR(true); print.visitModule(module); } }; Pass* createPrintStackIRPass() { return new PrintStackIR(); } static std::ostream& printExpression(Expression* expression, std::ostream& o, bool minify, bool full, Module* wasm) { if (!expression) { o << "(null expression)"; return o; } PrintSExpression print(o); print.setMinify(minify); print.currModule = wasm; if (full || isFullForced()) { print.setFull(true); o << "[" << expression->type << "] "; } print.visit(expression); return o; } static std::ostream& printStackInst(StackInst* inst, std::ostream& o, Function* func) { switch (inst->op) { case StackInst::Basic: case StackInst::BlockBegin: case StackInst::IfBegin: case StackInst::LoopBegin: case StackInst::TryBegin: { PrintExpressionContents(func, o).visit(inst->origin); break; } case StackInst::BlockEnd: case StackInst::IfEnd: case StackInst::LoopEnd: case StackInst::TryEnd: { printMedium(o, "end"); o << " ;; type: "; TypeNamePrinter(o).print(inst->type); break; } case StackInst::IfElse: { printMedium(o, "else"); break; } case StackInst::Catch: { // Because StackInst does not have info on which catch within a try this // is, we can't print the tag name. printMedium(o, "catch"); break; } case StackInst::CatchAll: { printMedium(o, "catch_all"); break; } case StackInst::Delegate: { printMedium(o, "delegate "); printName(inst->origin->cast()->delegateTarget, o); break; } default: WASM_UNREACHABLE("unexpeted op"); } return o; } static std::ostream& printStackIR(StackIR* ir, std::ostream& o, Function* func) { size_t indent = func ? 2 : 0; auto doIndent = [&indent, &o]() { for (size_t j = 0; j < indent; j++) { o << ' '; } }; int controlFlowDepth = 0; // Stack to track indices of catches within a try SmallVector catchIndexStack; for (Index i = 0; i < (*ir).size(); i++) { auto* inst = (*ir)[i]; if (!inst) { continue; } switch (inst->op) { case StackInst::Basic: { doIndent(); // Pop is a pseudo instruction and should not be printed in the stack IR // format to make it valid wat form. if (inst->origin->is()) { break; } PrintExpressionContents(func, o).visit(inst->origin); break; } case StackInst::TryBegin: catchIndexStack.push_back(0); [[fallthrough]]; case StackInst::BlockBegin: case StackInst::IfBegin: case StackInst::LoopBegin: { controlFlowDepth++; doIndent(); PrintExpressionContents(func, o).visit(inst->origin); indent++; break; } case StackInst::TryEnd: catchIndexStack.pop_back(); [[fallthrough]]; case StackInst::BlockEnd: case StackInst::IfEnd: case StackInst::LoopEnd: { controlFlowDepth--; indent--; doIndent(); printMedium(o, "end"); break; } case StackInst::IfElse: { indent--; doIndent(); printMedium(o, "else"); indent++; break; } case StackInst::Catch: { indent--; doIndent(); printMedium(o, "catch "); Try* curr = inst->origin->cast(); printName(curr->catchTags[catchIndexStack.back()++], o); indent++; break; } case StackInst::CatchAll: { indent--; doIndent(); printMedium(o, "catch_all"); indent++; break; } case StackInst::Delegate: { controlFlowDepth--; indent--; doIndent(); printMedium(o, "delegate "); Try* curr = inst->origin->cast(); if (curr->delegateTarget == DELEGATE_CALLER_TARGET) { o << controlFlowDepth; } else { printName(curr->delegateTarget, o); } break; } default: WASM_UNREACHABLE("unexpeted op"); } std::cout << '\n'; } assert(controlFlowDepth == 0); return o; } } // namespace wasm namespace std { std::ostream& operator<<(std::ostream& o, wasm::Module& module) { wasm::PassRunner runner(&module); wasm::Printer(&o).run(&runner, &module); return o; } std::ostream& operator<<(std::ostream& o, wasm::Expression& expression) { return wasm::printExpression(&expression, o); } std::ostream& operator<<(std::ostream& o, wasm::Expression* expression) { return wasm::printExpression(expression, o); } std::ostream& operator<<(std::ostream& o, wasm::ModuleExpression pair) { return wasm::printExpression(pair.second, o, false, false, &pair.first); } std::ostream& operator<<(std::ostream& o, wasm::StackInst& inst) { return wasm::printStackInst(&inst, o); } std::ostream& operator<<(std::ostream& o, wasm::StackIR& ir) { return wasm::printStackIR(&ir, o); } } // namespace std binaryen-version_108/src/passes/PrintCallGraph.cpp000066400000000000000000000070751423707623100224210ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Prints the call graph in .dot format. You can use http://www.graphviz.org/ to // view .dot files. // #include #include #include "ir/element-utils.h" #include "ir/module-utils.h" #include "ir/utils.h" #include "pass.h" #include "wasm.h" namespace wasm { struct PrintCallGraph : public Pass { bool modifiesBinaryenIR() override { return false; } void run(PassRunner* runner, Module* module) override { std::ostream& o = std::cout; o << "digraph call {\n" " rankdir = LR;\n" " subgraph cluster_key {\n" " node [shape=box, fontname=courier, fontsize=10];\n" " edge [fontname=courier, fontsize=10];\n" " label = \"Key\";\n" " \"Import\" [style=\"filled\", fillcolor=\"turquoise\"];\n" " \"Export\" [style=\"filled\", fillcolor=\"gray\"];\n" " \"Indirect Target\" [style=\"filled, rounded\", " "fillcolor=\"white\"];\n" " \"A\" -> \"B\" [style=\"filled, rounded\", label = \"Direct " "Call\"];\n" " }\n\n" " node [shape=box, fontname=courier, fontsize=10];\n"; // Defined functions ModuleUtils::iterDefinedFunctions(*module, [&](Function* curr) { std::cout << " \"" << curr->name << "\" [style=\"filled\", fillcolor=\"white\"];\n"; }); // Imported functions ModuleUtils::iterImportedFunctions(*module, [&](Function* curr) { o << " \"" << curr->name << "\" [style=\"filled\", fillcolor=\"turquoise\"];\n"; }); // Exports for (auto& curr : module->exports) { if (curr->kind == ExternalKind::Function) { Function* func = module->getFunction(curr->value); o << " \"" << func->name << "\" [style=\"filled\", fillcolor=\"gray\"];\n"; } } struct CallPrinter : public PostWalker { Module* module; Function* currFunction; std::set visitedTargets; // Used to avoid printing duplicate edges. std::vector allIndirectTargets; CallPrinter(Module* module) : module(module) { // Walk function bodies. ModuleUtils::iterDefinedFunctions(*module, [&](Function* curr) { currFunction = curr; visitedTargets.clear(); walk(curr->body); }); } void visitCall(Call* curr) { auto* target = module->getFunction(curr->target); if (!visitedTargets.emplace(target->name).second) { return; } std::cout << " \"" << currFunction->name << "\" -> \"" << target->name << "\"; // call\n"; } }; CallPrinter printer(module); // Indirect Targets ElementUtils::iterAllElementFunctionNames(module, [&](Name& name) { auto* func = module->getFunction(name); o << " \"" << func->name << "\" [style=\"filled, rounded\"];\n"; }); o << "}\n"; } }; Pass* createPrintCallGraphPass() { return new PrintCallGraph(); } } // namespace wasm binaryen-version_108/src/passes/PrintFeatures.cpp000066400000000000000000000021271423707623100223330ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Print out the feature options corresponding to enabled features // #include "pass.h" #include "wasm-features.h" #include "wasm.h" namespace wasm { struct PrintFeatures : public Pass { void run(PassRunner* runner, Module* module) override { module->features.iterFeatures([](FeatureSet::Feature f) { std::cout << "--enable-" << FeatureSet::toString(f) << std::endl; }); } }; Pass* createPrintFeaturesPass() { return new PrintFeatures(); } } // namespace wasm binaryen-version_108/src/passes/PrintFunctionMap.cpp000066400000000000000000000032411423707623100227760ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Prints the a map of function indexes to function names. This can be // useful for interpreting a stack trace from a production environment // where names did not exist on the client. The map looks like this: // // 0:foo // 1:bar // 2:baz // #include "ir/module-utils.h" #include "pass.h" #include "support/file.h" #include "wasm.h" namespace wasm { struct PrintFunctionMap : public Pass { bool modifiesBinaryenIR() override { return false; } void run(PassRunner* runner, Module* module) override { // If an argument is provided, write to that file; otherwise write to // stdout. auto outFile = runner->options.getArgumentOrDefault("symbolmap", ""); Output output(outFile, Flags::Text); auto& o = output.getStream(); Index i = 0; auto write = [&](Function* func) { o << i++ << ':' << func->name.str << '\n'; }; ModuleUtils::iterImportedFunctions(*module, write); ModuleUtils::iterDefinedFunctions(*module, write); } }; Pass* createPrintFunctionMapPass() { return new PrintFunctionMap(); } } // namespace wasm binaryen-version_108/src/passes/ReReloop.cpp000066400000000000000000000271421423707623100212730ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Convert the AST to a CFG, and optimize+convert it back to the AST // using the relooper. // // This pass depends on flatten being run before it. // #include #include "cfg/Relooper.h" #include "ir/flat.h" #include "ir/utils.h" #include "pass.h" #include "wasm-builder.h" #include "wasm-traversal.h" #include "wasm.h" namespace wasm { struct ReReloop final : public Pass { bool isFunctionParallel() override { return true; } Pass* create() override { return new ReReloop; } std::unique_ptr relooper; std::unique_ptr builder; // block handling CFG::Block* currCFGBlock = nullptr; CFG::Block* makeCFGBlock() { return relooper->AddBlock(builder->makeBlock()); } CFG::Block* setCurrCFGBlock(CFG::Block* curr) { if (currCFGBlock) { finishBlock(); } return currCFGBlock = curr; } CFG::Block* startCFGBlock() { return setCurrCFGBlock(makeCFGBlock()); } CFG::Block* getCurrCFGBlock() { return currCFGBlock; } Block* getCurrBlock() { return currCFGBlock->Code->cast(); } void finishBlock() { getCurrBlock()->finalize(); } // break handling std::map breakTargets; void addBreakTarget(Name name, CFG::Block* target) { breakTargets[name] = target; } CFG::Block* getBreakTarget(Name name) { return breakTargets[name]; } // branch handling void addBranch(CFG::Block* from, CFG::Block* to, Expression* condition = nullptr) { from->AddBranchTo(to, condition); } void addSwitchBranch(CFG::Block* from, CFG::Block* to, const std::set& values) { std::vector list; for (auto i : values) { list.push_back(i); } from->AddSwitchBranchTo(to, std::move(list)); } // we work using a stack of control flow tasks struct Task { virtual ~Task() = default; ReReloop& parent; Task(ReReloop& parent) : parent(parent) {} virtual void run() { WASM_UNREACHABLE("unimpl"); } }; typedef std::shared_ptr TaskPtr; std::vector stack; struct TriageTask final : public Task { Expression* curr; TriageTask(ReReloop& parent, Expression* curr) : Task(parent), curr(curr) {} void run() override { parent.triage(curr); } }; struct BlockTask final : public Task { Block* curr; CFG::Block* later; BlockTask(ReReloop& parent, Block* curr) : Task(parent), curr(curr) {} static void handle(ReReloop& parent, Block* curr) { if (curr->name.is()) { // we may be branched to. create a target, and // ensure we are called at the join point auto task = std::make_shared(parent, curr); task->curr = curr; task->later = parent.makeCFGBlock(); parent.addBreakTarget(curr->name, task->later); parent.stack.push_back(task); } auto& list = curr->list; for (int i = int(list.size()) - 1; i >= 0; i--) { parent.stack.push_back(std::make_shared(parent, list[i])); } } void run() override { // add fallthrough parent.addBranch(parent.getCurrCFGBlock(), later); parent.setCurrCFGBlock(later); } }; struct LoopTask final : public Task { static void handle(ReReloop& parent, Loop* curr) { parent.stack.push_back(std::make_shared(parent, curr->body)); if (curr->name.is()) { // we may be branched to. create a target auto* before = parent.getCurrCFGBlock(); auto* top = parent.startCFGBlock(); parent.addBreakTarget(curr->name, top); parent.addBranch(before, top); } } }; struct IfTask final : public Task { If* curr; CFG::Block* condition; CFG::Block* ifTrueEnd; int phase = 0; IfTask(ReReloop& parent, If* curr) : Task(parent), curr(curr) {} static void handle(ReReloop& parent, If* curr) { auto task = std::make_shared(parent, curr); task->curr = curr; task->condition = parent.getCurrCFGBlock(); auto* ifTrueBegin = parent.startCFGBlock(); parent.addBranch(task->condition, ifTrueBegin, curr->condition); if (curr->ifFalse) { parent.stack.push_back(task); parent.stack.push_back( std::make_shared(parent, curr->ifFalse)); } parent.stack.push_back(task); parent.stack.push_back( std::make_shared(parent, curr->ifTrue)); } void run() override { if (phase == 0) { // end of ifTrue ifTrueEnd = parent.getCurrCFGBlock(); auto* after = parent.startCFGBlock(); // if condition was false, go after the ifTrue, to ifFalse or outside parent.addBranch(condition, after); if (!curr->ifFalse) { parent.addBranch(ifTrueEnd, after); } phase++; } else if (phase == 1) { // end if ifFalse auto* ifFalseEnd = parent.getCurrCFGBlock(); auto* after = parent.startCFGBlock(); parent.addBranch(ifTrueEnd, after); parent.addBranch(ifFalseEnd, after); } else { WASM_UNREACHABLE("invalid phase"); } } }; struct BreakTask : public Task { static void handle(ReReloop& parent, Break* curr) { // add the branch. note how if the condition is false, it is the right // value there as well auto* before = parent.getCurrCFGBlock(); parent.addBranch( before, parent.getBreakTarget(curr->name), curr->condition); if (curr->condition) { auto* after = parent.startCFGBlock(); parent.addBranch(before, after); } else { parent.stopControlFlow(); } } }; struct SwitchTask : public Task { static void handle(ReReloop& parent, Switch* curr) { // set the switch condition for the block ending now auto* before = parent.getCurrCFGBlock(); assert(!before->SwitchCondition); before->SwitchCondition = curr->condition; std::map> targetValues; auto& targets = curr->targets; auto num = targets.size(); for (Index i = 0; i < num; i++) { targetValues[targets[i]].insert(i); } for (auto& [name, indices] : targetValues) { parent.addSwitchBranch(before, parent.getBreakTarget(name), indices); } // the default may be among the targets, in which case, we can't add it // simply as it would be a duplicate, so create a temp block if (targetValues.count(curr->default_) == 0) { parent.addSwitchBranch( before, parent.getBreakTarget(curr->default_), std::set()); } else { auto* temp = parent.startCFGBlock(); parent.addSwitchBranch(before, temp, std::set()); parent.addBranch(temp, parent.getBreakTarget(curr->default_)); } parent.stopControlFlow(); } }; struct ReturnTask : public Task { static void handle(ReReloop& parent, Return* curr) { // reuse the return parent.getCurrBlock()->list.push_back(curr); parent.stopControlFlow(); } }; struct UnreachableTask : public Task { static void handle(ReReloop& parent, Unreachable* curr) { // reuse the unreachable parent.getCurrBlock()->list.push_back(curr); parent.stopControlFlow(); } }; // handle an element we encounter void triage(Expression* curr) { if (auto* block = curr->dynCast()) { BlockTask::handle(*this, block); } else if (auto* loop = curr->dynCast()) { LoopTask::handle(*this, loop); } else if (auto* iff = curr->dynCast()) { IfTask::handle(*this, iff); } else if (auto* br = curr->dynCast()) { BreakTask::handle(*this, br); } else if (auto* sw = curr->dynCast()) { SwitchTask::handle(*this, sw); } else if (auto* ret = curr->dynCast()) { ReturnTask::handle(*this, ret); } else if (auto* un = curr->dynCast()) { UnreachableTask::handle(*this, un); } else if (curr->is() || curr->is() || curr->is()) { Fatal() << "ReReloop does not support EH instructions yet"; } else { // not control flow, so just a simple element getCurrBlock()->list.push_back(curr); } } void stopControlFlow() { startCFGBlock(); // TODO: optimize with this? } void runOnFunction(PassRunner* runner, Module* module, Function* function) override { Flat::verifyFlatness(function); // since control flow is flattened, this is pretty simple // first, traverse the function body. note how we don't need to traverse // into expressions, as we know they contain no control flow builder = make_unique(*module); relooper = make_unique(module); auto* entry = startCFGBlock(); stack.push_back(TaskPtr(new TriageTask(*this, function->body))); // main loop while (stack.size() > 0) { TaskPtr curr = stack.back(); stack.pop_back(); curr->run(); } // finish the current block finishBlock(); // blocks that do not have any exits are dead ends in the relooper. we need // to make sure that are in fact dead ends, and do not flow control // anywhere. add a return as needed for (auto& cfgBlock : relooper->Blocks) { auto* block = cfgBlock->Code->cast(); if (cfgBlock->BranchesOut.empty() && block->type != Type::unreachable) { block->list.push_back(function->getResults() == Type::none ? (Expression*)builder->makeReturn() : (Expression*)builder->makeUnreachable()); block->finalize(); } } #ifdef RERELOOP_DEBUG std::cout << "rerelooping " << function->name << '\n'; for (auto* block : relooper->Blocks) { std::cout << block << " block:\n" << block->Code << '\n'; for (auto& [target, branch] : block->BranchesOut) { std::cout << "branch to " << target << "\n"; if (branch->Condition) { std::cout << " with condition\n" << branch->Condition << '\n'; } } } #endif // run the relooper to recreate control flow relooper->Calculate(entry); // render { auto temp = builder->addVar(function, Type::i32); CFG::RelooperBuilder builder(*module, temp); function->body = relooper->Render(builder); // if the function has a result, and the relooper emitted // something that seems like it flows out without a value // (but that path is never reached; it just has a br to it // because of the relooper's boilerplate switch-handling // code, for example, which could be optimized out later // but isn't yet), then make sure it has a proper type if (function->getResults() != Type::none && function->body->type == Type::none) { function->body = builder.makeSequence(function->body, builder.makeUnreachable()); } } // TODO: should this be in the relooper itself? ReFinalize().walkFunctionInModule(function, module); } }; Pass* createReReloopPass() { return new ReReloop(); } } // namespace wasm binaryen-version_108/src/passes/RedundantSetElimination.cpp000066400000000000000000000325541423707623100243400ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Eliminate redundant local.sets: if a local already has a particular // value, we don't need to set it again. A common case here is loops // that start at zero, since the default value is initialized to // zero anyhow. // // A risk here is that we extend live ranges, e.g. we may use the default // value at the very end of a function, keeping that local alive throughout. // For that reason it is probably better to run this near the end of // optimization, and especially after coalesce-locals. A final vaccum // should be done after it, as this pass can leave around drop()s of // values no longer necessary. // // So far this tracks constant values, and for everything else it considers // them unique (so each local.set of a non-constant is a unique value, each // merge is a unique value, etc.; there is no sophisticated value numbering // here). // #include #include #include #include #include #include #include #include #include namespace wasm { // Map each local index to its current value number (which is computed in // ValueNumbering). using LocalValues = std::vector; namespace { // information in a basic block struct Info { LocalValues start, end; // the local values at the start and end of the block std::vector setps; }; struct RedundantSetElimination : public WalkerPass, Info>> { bool isFunctionParallel() override { return true; } Pass* create() override { return new RedundantSetElimination(); } Index numLocals; // cfg traversal work static void doVisitLocalSet(RedundantSetElimination* self, Expression** currp) { if (self->currBasicBlock) { self->currBasicBlock->contents.setps.push_back(currp); } } // main entry point void doWalkFunction(Function* func) { numLocals = func->getNumLocals(); if (numLocals == 0) { return; // nothing to do } // Create a unique value for use to mark unseen locations. unseenValue = valueNumbering.getUniqueValue(); // create the CFG by walking the IR CFGWalker, Info>:: doWalkFunction(func); // flow values across blocks flowValues(func); // remove redundant sets optimize(); } // Use a value numbering for the values of expressions. ValueNumbering valueNumbering; // In additon to valueNumbering, each block has values for each merge. std::unordered_map> blockMergeValues; // A value that indicates we haven't seen this location yet. Index unseenValue; Index getUniqueValue() { auto value = valueNumbering.getUniqueValue(); #ifdef RSE_DEBUG std::cout << "new unique value " << value << '\n'; #endif return value; } Index getValue(Literals lit) { auto value = valueNumbering.getValue(lit); #ifdef RSE_DEBUG std::cout << "lit value " << value << '\n'; #endif return value; } Index getBlockMergeValue(BasicBlock* block, Index index) { auto& mergeValues = blockMergeValues[block]; auto iter = mergeValues.find(index); if (iter != mergeValues.end()) { return iter->second; } #ifdef RSE_DEBUG std::cout << "new block-merge value for " << block << " : " << index << '\n'; #endif return mergeValues[index] = getUniqueValue(); } bool isBlockMergeValue(BasicBlock* block, Index index, Index value) { auto iter = blockMergeValues.find(block); if (iter == blockMergeValues.end()) { return false; } auto& mergeValues = iter->second; auto iter2 = mergeValues.find(index); if (iter2 == mergeValues.end()) { return false; } return value == iter2->second; } Index getValue(Expression* expr, LocalValues& currValues) { if (auto* get = expr->dynCast()) { // a copy of whatever that was return currValues[get->index]; } auto value = valueNumbering.getValue(expr); #ifdef RSE_DEBUG std::cout << "expr value " << value << '\n'; #endif return value; } // flowing void flowValues(Function* func) { for (auto& block : basicBlocks) { LocalValues& start = block->contents.start; start.resize(numLocals); if (block.get() == entry) { // params are complex values we can't optimize; vars are zeros for (Index i = 0; i < numLocals; i++) { auto type = func->getLocalType(i); if (func->isParam(i)) { #ifdef RSE_DEBUG std::cout << "new param value for " << i << '\n'; #endif start[i] = getUniqueValue(); } else if (!LiteralUtils::canMakeZero(type)) { #ifdef RSE_DEBUG std::cout << "new unique value for non-zeroable " << i << '\n'; #endif start[i] = getUniqueValue(); } else { start[i] = getValue(Literal::makeZeros(type)); } } } else { // other blocks have all unseen values to begin with for (Index i = 0; i < numLocals; i++) { start[i] = unseenValue; } } // the ends all begin unseen LocalValues& end = block->contents.end; end.resize(numLocals); for (Index i = 0; i < numLocals; i++) { end[i] = unseenValue; } } // keep working while stuff is flowing. we use a unique deferred queue // which ensures both FIFO and that we don't do needless work - if // A and B reach C, and both queue C, we only want to do C at the latest // time, when we have information from all those reaching it. UniqueDeferredQueue work; work.push(entry); while (!work.empty()) { auto* curr = work.pop(); #ifdef RSE_DEBUG std::cout << "flow block " << curr << '\n'; #endif // process a block: first, update its start based on those reaching it if (!curr->in.empty()) { if (curr->in.size() == 1) { // just copy the pred, nothing to merge curr->contents.start = (*curr->in.begin())->contents.end; } else { // perform a merge auto in = curr->in; for (Index i = 0; i < numLocals; i++) { auto old = curr->contents.start[i]; // If we already had a merge value here, keep it. // TODO This may have some false positives, as we may e.g. have // a single pred that first gives us x, then later y after // flow led to a merge, and we may see x and y at the same // time due to flow from a successor, and then it looks like // we need a merge but we don't. avoiding that would require // more memory and is probably not worth it, but might be // worth investigating // NB While suboptimal, this simplification provides a simple proof // of convergence. We prove that, in each fixed block+local, // the value number at the end is nondecreasing across // iterations, by induction on the iteration: // * The first iteration is on the entry block. It increases // the value number at the end from 0 (unseen) to something // else (a value number for 0 for locals, a unique value // for params; all >0). // * Induction step: assuming the property holds for all past // iterations, consider the current iteration. Of our // predecessors, those that we iterated on have the property; // those that we haven't will have 0 (unseen). // * If we assign to that local in this block, that will be // the value in the output, forever, and it is greater // than the initial value of 0. // * If we see different values coming in, we create a merge // value number. Its number is higher than everything // else since we give it the next available number, so we // do not decrease in this iteration, and we will output // the same value in the future too (here is where we use // the simplification property). // * Otherwise, we will flow the incoming value through, // and it did not decrease (by induction), so neither do // we. // Finally, given value numbers are nondecreasing, we must // converge since we only keep working as long as we see new // values at the end of a block. // // Not that we don't trust this proof, but the convergence // property (value numbers at block ends do not decrease) is // verified later down. if (isBlockMergeValue(curr, i, old)) { continue; } auto iter = in.begin(); auto value = (*iter)->contents.end[i]; iter++; while (iter != in.end()) { auto otherValue = (*iter)->contents.end[i]; if (value == unseenValue) { value = otherValue; } else if (otherValue == unseenValue) { // nothing to do, other has no information } else if (value != otherValue) { // 2 different values, this is a merged value value = getBlockMergeValue(curr, i); break; // no more work once we see a merge } iter++; } curr->contents.start[i] = value; } } } #ifdef RSE_DEBUG dump("start", curr->contents.start); #endif // flow values through it, then add those we can reach if they need an // update. auto currValues = curr->contents.start; // we'll modify this as we go auto& setps = curr->contents.setps; for (auto** setp : setps) { auto* set = (*setp)->cast(); currValues[set->index] = getValue(set->value, currValues); } if (currValues == curr->contents.end) { // nothing changed, so no more work to do // note that the first iteration this is always not the case, // since end contains unseen (and then the comparison ends on // the first element) continue; } // update the end state and update children #ifndef NDEBUG // verify the convergence property mentioned in the NB comment // above: the value numbers at the end must be nondecreasing for (Index i = 0; i < numLocals; i++) { assert(currValues[i] >= curr->contents.end[i]); } #endif curr->contents.end.swap(currValues); #ifdef RSE_DEBUG dump("end ", curr->contents.end); #endif for (auto* next : curr->out) { work.push(next); } } } // optimizing void optimize() { // in each block, run the values through the sets, // and remove redundant sets when we see them for (auto& block : basicBlocks) { auto currValues = block->contents.start; // we'll modify this as we go auto& setps = block->contents.setps; for (auto** setp : setps) { auto* set = (*setp)->cast(); auto oldValue = currValues[set->index]; auto newValue = getValue(set->value, currValues); auto index = set->index; if (newValue == oldValue) { remove(setp); continue; // no more work to do } // update for later steps currValues[index] = newValue; } } } void remove(Expression** setp) { auto* set = (*setp)->cast(); auto* value = set->value; if (!set->isTee()) { auto* drop = ExpressionManipulator::convert(set); drop->value = value; drop->finalize(); } else { *setp = value; } } // debugging void dump(BasicBlock* block) { std::cout << "====\n"; if (block) { std::cout << "block: " << block << '\n'; for (auto* out : block->out) { std::cout << " goes to " << out << '\n'; } } for (Index i = 0; i < block->contents.start.size(); i++) { std::cout << " start[" << i << "] = " << block->contents.start[i] << '\n'; } for (auto** setp : block->contents.setps) { std::cout << " " << *setp << '\n'; } std::cout << "====\n"; } void dump(const char* desc, LocalValues& values) { std::cout << desc << ": "; for (auto x : values) { std::cout << x << ' '; } std::cout << '\n'; } }; } // namespace Pass* createRedundantSetEliminationPass() { return new RedundantSetElimination(); } } // namespace wasm binaryen-version_108/src/passes/RemoveImports.cpp000066400000000000000000000040771423707623100223610ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Removes function imports, and replaces them with nops. This is useful // for running a module through the reference interpreter, which // does not validate imports for a JS environment (by removing // imports, we can at least get the reference interpreter to // look at all the rest of the code). // #include "ir/element-utils.h" #include "ir/module-utils.h" #include "pass.h" #include "wasm.h" namespace wasm { struct RemoveImports : public WalkerPass> { void visitCall(Call* curr) { auto* func = getModule()->getFunction(curr->target); if (!func->imported()) { return; } Type type = func->getResults(); if (type == Type::none) { replaceCurrent(getModule()->allocator.alloc()); } else { Literal nopLiteral(type); replaceCurrent(getModule()->allocator.alloc()->set(nopLiteral)); } } void visitModule(Module* curr) { std::vector names; ModuleUtils::iterImportedFunctions( *curr, [&](Function* func) { names.push_back(func->name); }); // Do not remove names referenced in a table std::set indirectNames; ElementUtils::iterAllElementFunctionNames( curr, [&](Name& name) { indirectNames.insert(name); }); for (auto& name : names) { if (indirectNames.find(name) == indirectNames.end()) { curr->removeFunction(name); } } } }; Pass* createRemoveImportsPass() { return new RemoveImports(); } } // namespace wasm binaryen-version_108/src/passes/RemoveMemory.cpp000066400000000000000000000017131423707623100221660ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Removeds memory segments, leaving only code in the module. // #include #include namespace wasm { struct RemoveMemory : public Pass { void run(PassRunner* runner, Module* module) override { module->memory.segments.clear(); } }; Pass* createRemoveMemoryPass() { return new RemoveMemory(); } } // namespace wasm binaryen-version_108/src/passes/RemoveNonJSOps.cpp000066400000000000000000000276061423707623100224000ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // RemoveNonJSOps removes operations that aren't inherently implementable // in JS. This includes things like 64-bit division, `f32.nearest`, // `f64.copysign`, etc. Most operations are lowered to a call to an injected // intrinsic implementation. Intrinsics don't use themselves to implement // themselves. // // You'll find a large wat blob in `wasm-intrinsics.wat` next to this file // which contains all of the injected intrinsics. We manually copy over any // needed intrinsics from this module into the module that we're optimizing // after walking the current module. // // StubUnsupportedJSOps stubs out operations that are not fully supported // even with RemoveNonJSOps. For example, i64->f32 conversions do not have // perfect rounding in all cases. StubUnsupportedJSOps removes those entirely // and replaces them with "stub" operations that do nothing. This is only // really useful for fuzzing as it changes the behavior of the program. // #include #include #include "abi/js.h" #include "asmjs/shared-constants.h" #include "ir/find_all.h" #include "ir/literal-utils.h" #include "ir/memory-utils.h" #include "ir/module-utils.h" #include "passes/intrinsics-module.h" #include "support/insert_ordered.h" #include "wasm-builder.h" #include "wasm-s-parser.h" namespace wasm { struct RemoveNonJSOpsPass : public WalkerPass> { std::unique_ptr builder; std::unordered_set neededIntrinsics; InsertOrderedSet> neededImportedGlobals; bool isFunctionParallel() override { return false; } Pass* create() override { return new RemoveNonJSOpsPass; } void doWalkModule(Module* module) { // Intrinsics may use scratch memory, ensure it. ABI::wasm2js::ensureHelpers(module); // Discover all of the intrinsics that we need to inject, lowering all // operations to intrinsic calls while we're at it. if (!builder) { builder = make_unique(*module); } PostWalker::doWalkModule(module); if (neededIntrinsics.size() == 0) { return; } // Parse the wat blob we have at the end of this file. // // TODO: only do this once per invocation of wasm2asm Module intrinsicsModule; std::string input(IntrinsicsModuleWast); SExpressionParser parser(const_cast(input.c_str())); Element& root = *parser.root; SExpressionWasmBuilder builder( intrinsicsModule, *root[0], IRProfile::Normal); std::set neededFunctions; // Iteratively link intrinsics from `intrinsicsModule` into our destination // module, as needed. // // Note that intrinsics often use one another. For example the 64-bit // division intrinsic ends up using the 32-bit ctz intrinsic, but does so // via a native instruction. The loop here is used to continuously reprocess // injected intrinsics to ensure that they never contain non-js ops when // we're done. while (neededIntrinsics.size() > 0) { // Recursively probe all needed intrinsics for transitively used // functions. This is building up a set of functions we'll link into our // module. for (auto& name : neededIntrinsics) { addNeededFunctions(intrinsicsModule, name, neededFunctions); } neededIntrinsics.clear(); // Link in everything that wasn't already linked in. After we've done the // copy we then walk the function to rewrite any non-js operations it has // as well. for (auto& name : neededFunctions) { auto* func = module->getFunctionOrNull(name); if (!func) { func = ModuleUtils::copyFunction(intrinsicsModule.getFunction(name), *module); } doWalkFunction(func); } neededFunctions.clear(); } // Copy all the globals in the intrinsics module for (auto& global : intrinsicsModule.globals) { ModuleUtils::copyGlobal(global.get(), *module); } // Intrinsics may use memory, so ensure the module has one. MemoryUtils::ensureExists(module->memory); // Add missing globals for (auto& [name, type] : neededImportedGlobals) { if (!getModule()->getGlobalOrNull(name)) { auto global = make_unique(); global->name = name; global->type = type; global->mutable_ = false; global->module = ENV; global->base = name; module->addGlobal(global.release()); } } } void addNeededFunctions(Module& m, Name name, std::set& needed) { if (!needed.emplace(name).second) { return; } auto function = m.getFunction(name); FindAll calls(function->body); for (auto* call : calls.list) { auto* called = m.getFunction(call->target); if (!called->imported()) { this->addNeededFunctions(m, call->target, needed); } } } void doWalkFunction(Function* func) { if (!builder) { builder = make_unique(*getModule()); } PostWalker::doWalkFunction(func); } void visitLoad(Load* curr) { if (curr->align == 0 || curr->align >= curr->bytes) { return; } // Switch unaligned loads of floats to unaligned loads of integers (which we // can actually implement) and then use reinterpretation to get the float // back out. switch (curr->type.getBasic()) { case Type::f32: curr->type = Type::i32; replaceCurrent(builder->makeUnary(ReinterpretInt32, curr)); break; case Type::f64: curr->type = Type::i64; replaceCurrent(builder->makeUnary(ReinterpretInt64, curr)); break; default: break; } } void visitStore(Store* curr) { if (curr->align == 0 || curr->align >= curr->bytes) { return; } // Switch unaligned stores of floats to unaligned stores of integers (which // we can actually implement) and then use reinterpretation to store the // right value. switch (curr->valueType.getBasic()) { case Type::f32: curr->valueType = Type::i32; curr->value = builder->makeUnary(ReinterpretFloat32, curr->value); break; case Type::f64: curr->valueType = Type::i64; curr->value = builder->makeUnary(ReinterpretFloat64, curr->value); break; default: break; } } void visitBinary(Binary* curr) { Name name; switch (curr->op) { case CopySignFloat32: case CopySignFloat64: rewriteCopysign(curr); return; case RotLInt32: name = WASM_ROTL32; break; case RotRInt32: name = WASM_ROTR32; break; case RotLInt64: name = WASM_ROTL64; break; case RotRInt64: name = WASM_ROTR64; break; case MulInt64: name = WASM_I64_MUL; break; case DivSInt64: name = WASM_I64_SDIV; break; case DivUInt64: name = WASM_I64_UDIV; break; case RemSInt64: name = WASM_I64_SREM; break; case RemUInt64: name = WASM_I64_UREM; break; default: return; } neededIntrinsics.insert(name); replaceCurrent( builder->makeCall(name, {curr->left, curr->right}, curr->type)); } void rewriteCopysign(Binary* curr) { // i32.copysign(x, y) => f32.reinterpret( // (i32.reinterpret(x) & ~(1 << 31)) | // (i32.reinterpret(y) & (1 << 31) // ) // // i64.copysign(x, y) => f64.reinterpret( // (i64.reinterpret(x) & ~(1 << 63)) | // (i64.reinterpret(y) & (1 << 63) // ) Literal signBit, otherBits; UnaryOp int2float, float2int; BinaryOp bitAnd, bitOr; switch (curr->op) { case CopySignFloat32: float2int = ReinterpretFloat32; int2float = ReinterpretInt32; bitAnd = AndInt32; bitOr = OrInt32; signBit = Literal(uint32_t(1U << 31)); otherBits = Literal(~uint32_t(1U << 31)); break; case CopySignFloat64: float2int = ReinterpretFloat64; int2float = ReinterpretInt64; bitAnd = AndInt64; bitOr = OrInt64; signBit = Literal(uint64_t(1ULL << 63)); otherBits = Literal(~uint64_t(1ULL << 63)); break; default: return; } replaceCurrent(builder->makeUnary( int2float, builder->makeBinary( bitOr, builder->makeBinary(bitAnd, builder->makeUnary(float2int, curr->left), builder->makeConst(otherBits)), builder->makeBinary(bitAnd, builder->makeUnary(float2int, curr->right), builder->makeConst(signBit))))); } void visitUnary(Unary* curr) { Name functionCall; switch (curr->op) { case NearestFloat32: functionCall = WASM_NEAREST_F32; break; case NearestFloat64: functionCall = WASM_NEAREST_F64; break; case PopcntInt64: functionCall = WASM_POPCNT64; break; case PopcntInt32: functionCall = WASM_POPCNT32; break; case CtzInt64: functionCall = WASM_CTZ64; break; case CtzInt32: functionCall = WASM_CTZ32; break; default: return; } neededIntrinsics.insert(functionCall); replaceCurrent(builder->makeCall(functionCall, {curr->value}, curr->type)); } void visitGlobalGet(GlobalGet* curr) { neededImportedGlobals.insert({curr->name, curr->type}); } }; struct StubUnsupportedJSOpsPass : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new StubUnsupportedJSOpsPass; } void visitUnary(Unary* curr) { switch (curr->op) { case ConvertUInt64ToFloat32: // See detailed comment in lowerConvertIntToFloat in // I64ToI32Lowering.cpp. stubOut(curr->value, curr->type); break; default: { } } } void visitCallIndirect(CallIndirect* curr) { // Indirect calls of the wrong type trap in wasm, but not in wasm2js. Remove // the indirect call, but leave the arguments. Builder builder(*getModule()); std::vector items; for (auto* operand : curr->operands) { items.push_back(builder.makeDrop(operand)); } items.push_back(builder.makeDrop(curr->target)); stubOut(builder.makeBlock(items), curr->type); } void stubOut(Expression* value, Type outputType) { Builder builder(*getModule()); // In some cases we can just replace with the value. auto* replacement = value; if (outputType == Type::unreachable) { // This is unreachable anyhow; just leave the value instead of the // original node. assert(value->type == Type::unreachable); } else if (outputType != Type::none) { // Drop the value if we need to. if (value->type != Type::none) { value = builder.makeDrop(value); } // Return something with the right output type. replacement = builder.makeSequence( value, LiteralUtils::makeZero(outputType, *getModule())); } replaceCurrent(replacement); } }; Pass* createRemoveNonJSOpsPass() { return new RemoveNonJSOpsPass(); } Pass* createStubUnsupportedJSOpsPass() { return new StubUnsupportedJSOpsPass(); } } // namespace wasm binaryen-version_108/src/passes/RemoveUnusedBrs.cpp000066400000000000000000001642241423707623100226370ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Removes branches for which we go to where they go anyhow // #include #include #include #include #include #include #include #include #include #include namespace wasm { // Grab a slice out of a block, replacing it with nops, and returning // either another block with the contents (if more than 1) or a single // expression. // This does not finalize the input block; it leaves that for the caller. static Expression* stealSlice(Builder& builder, Block* input, Index from, Index to) { Expression* ret; if (to == from + 1) { // just one ret = input->list[from]; } else { auto* block = builder.makeBlock(); for (Index i = from; i < to; i++) { block->list.push_back(input->list[i]); } block->finalize(); ret = block; } if (to == input->list.size()) { input->list.resize(from); } else { for (Index i = from; i < to; i++) { input->list[i] = builder.makeNop(); } } return ret; } // to turn an if into a br-if, we must be able to reorder the // condition and possible value, and the possible value must // not have side effects (as they would run unconditionally) static bool canTurnIfIntoBrIf(Expression* ifCondition, Expression* brValue, PassOptions& options, Module& wasm) { // if the if isn't even reached, this is all dead code anyhow if (ifCondition->type == Type::unreachable) { return false; } if (!brValue) { return true; } EffectAnalyzer value(options, wasm, brValue); if (value.hasSideEffects()) { return false; } return !EffectAnalyzer(options, wasm, ifCondition).invalidates(value); } // This leads to similar choices as LLVM does. // See https://github.com/WebAssembly/binaryen/pull/4228 // It can be tuned more later. const Index TooCostlyToRunUnconditionally = 9; // Check if it is not worth it to run code unconditionally. This // assumes we are trying to run two expressions where previously // only one of the two might have executed. We assume here that // executing both is good for code size. static bool tooCostlyToRunUnconditionally(const PassOptions& passOptions, Expression* one, Expression* two) { // If we care mostly about code size, just do it for that reason. if (passOptions.shrinkLevel) { return false; } // Consider the cost of executing all the code unconditionally. auto total = CostAnalyzer(one).cost + CostAnalyzer(two).cost; return total >= TooCostlyToRunUnconditionally; } // As above, but a single expression that we are considering moving to a place // where it executes unconditionally. static bool tooCostlyToRunUnconditionally(const PassOptions& passOptions, Expression* curr) { if (passOptions.shrinkLevel) { return false; } return CostAnalyzer(curr).cost >= TooCostlyToRunUnconditionally; } struct RemoveUnusedBrs : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new RemoveUnusedBrs; } bool anotherCycle; typedef std::vector Flows; // list of breaks that are currently flowing. if they reach their target // without interference, they can be removed (or their value forwarded TODO) Flows flows; // a stack for if-else contents, we merge their outputs std::vector ifStack; // list of all loops, so we can optimize them std::vector loops; static void visitAny(RemoveUnusedBrs* self, Expression** currp) { auto* curr = *currp; auto& flows = self->flows; if (curr->is()) { flows.clear(); auto* br = curr->cast(); if (!br->condition) { // TODO: optimize? // a break, let's see where it flows to flows.push_back(currp); } else { self->stopValueFlow(); } } else if (curr->is()) { flows.clear(); flows.push_back(currp); } else if (curr->is()) { auto* iff = curr->cast(); if (iff->condition->type == Type::unreachable) { // avoid trying to optimize this, we never reach it anyhow self->stopFlow(); return; } if (iff->ifFalse) { assert(self->ifStack.size() > 0); auto ifTrueFlows = std::move(self->ifStack.back()); self->ifStack.pop_back(); // we can flow values out in most cases, except if one arm // has the none type - we will update the types later, but // there is no way to emit a proper type for one arm being // none and the other flowing a value; and there is no way // to flow a value from a none. if (iff->ifTrue->type == Type::none || iff->ifFalse->type == Type::none) { self->removeValueFlow(ifTrueFlows); self->stopValueFlow(); } for (auto* flow : ifTrueFlows) { flows.push_back(flow); } } else { // if without else stops the flow of values self->stopValueFlow(); } } else if (auto* block = curr->dynCast()) { // any breaks flowing to here are unnecessary, as we get here anyhow auto name = block->name; auto& list = block->list; if (name.is()) { Index size = flows.size(); Index skip = 0; for (Index i = 0; i < size; i++) { auto* flow = (*flows[i])->dynCast(); if (flow && flow->name == name) { if (!flow->value) { // br => nop ExpressionManipulator::nop(flow); } else { // br with value => value *flows[i] = flow->value; } skip++; self->anotherCycle = true; } else if (skip > 0) { flows[i - skip] = flows[i]; } } if (skip > 0) { flows.resize(size - skip); } // drop a nop at the end of a block, which prevents a value flowing while (list.size() > 0 && list.back()->is()) { list.resize(list.size() - 1); self->anotherCycle = true; } } // A value flowing is only valid if it is a value that the block actually // flows out. If it is never reached, it does not flow out, and may be // invalid to represent as such. auto size = list.size(); for (Index i = 0; i < size; i++) { if (i != size - 1 && list[i]->type == Type::unreachable) { // No value flows out of this block. self->stopValueFlow(); break; } } } else if (curr->is()) { // ignore (could be result of a previous cycle) self->stopValueFlow(); } else if (curr->is()) { // do nothing - it's ok for values to flow out } else if (auto* sw = curr->dynCast()) { self->stopFlow(); self->optimizeSwitch(sw); } else { // anything else stops the flow self->stopFlow(); } } void stopFlow() { flows.clear(); } void removeValueFlow(Flows& currFlows) { currFlows.erase(std::remove_if(currFlows.begin(), currFlows.end(), [&](Expression** currp) { auto* curr = *currp; if (auto* ret = curr->dynCast()) { return ret->value; } return curr->cast()->value; }), currFlows.end()); } void stopValueFlow() { removeValueFlow(flows); } static void clear(RemoveUnusedBrs* self, Expression** currp) { self->flows.clear(); } static void saveIfTrue(RemoveUnusedBrs* self, Expression** currp) { self->ifStack.push_back(std::move(self->flows)); } void visitLoop(Loop* curr) { loops.push_back(curr); } void optimizeSwitch(Switch* curr) { // if the final element is the default, we don't need it while (!curr->targets.empty() && curr->targets.back() == curr->default_) { curr->targets.pop_back(); } // if the first element is the default, we can remove it by shifting // everything (which does add a subtraction of a constant, but often that is // worth it as the constant can be folded away and/or we remove multiple // elements here) Index removable = 0; while (removable < curr->targets.size() && curr->targets[removable] == curr->default_) { removable++; } if (removable > 0) { for (Index i = removable; i < curr->targets.size(); i++) { curr->targets[i - removable] = curr->targets[i]; } curr->targets.resize(curr->targets.size() - removable); Builder builder(*getModule()); curr->condition = builder.makeBinary( SubInt32, curr->condition, builder.makeConst(int32_t(removable))); } // when there isn't a value, we can do some trivial optimizations without // worrying about the value being executed before the condition if (curr->value) { return; } if (curr->targets.size() == 0) { // a switch with just a default always goes there Builder builder(*getModule()); replaceCurrent(builder.makeSequence(builder.makeDrop(curr->condition), builder.makeBreak(curr->default_))); } else if (curr->targets.size() == 1) { // a switch with two options is basically an if Builder builder(*getModule()); replaceCurrent(builder.makeIf(curr->condition, builder.makeBreak(curr->default_), builder.makeBreak(curr->targets.front()))); } else { // there are also some other cases where we want to convert a switch into // ifs, especially if the switch is large and we are focusing on size. an // especially egregious case is a switch like this: [a b b [..] b b c] // with default b (which may be arrived at after we trim away excess // default values on both sides). in this case, we really have 3 values in // a simple form, so it is the next logical case after handling 1 and 2 // values right above here. to optimize this, we must add a local + a // bunch of nodes (if*2, tee, eq, get, const, break*3), so the table must // be big enough for it to make sense // How many targets we need when shrinking. This is literally the size at // which the transformation begins to be smaller. const uint32_t MIN_SHRINK = 13; // How many targets we need when not shrinking, in which case, 2 ifs may // be slower, so we do this when the table is ridiculously large for one // with just 3 values in it. const uint32_t MIN_GENERAL = 128; auto shrink = getPassRunner()->options.shrinkLevel > 0; if ((curr->targets.size() >= MIN_SHRINK && shrink) || (curr->targets.size() >= MIN_GENERAL && !shrink)) { for (Index i = 1; i < curr->targets.size() - 1; i++) { if (curr->targets[i] != curr->default_) { return; } } // great, we are in that case, optimize Builder builder(*getModule()); auto temp = builder.addVar(getFunction(), Type::i32); Expression* z; replaceCurrent(z = builder.makeIf( builder.makeLocalTee(temp, curr->condition, Type::i32), builder.makeIf(builder.makeBinary( EqInt32, builder.makeLocalGet(temp, Type::i32), builder.makeConst( int32_t(curr->targets.size() - 1))), builder.makeBreak(curr->targets.back()), builder.makeBreak(curr->default_)), builder.makeBreak(curr->targets.front()))); } } } void visitIf(If* curr) { if (!curr->ifFalse) { // if without an else. try to reduce // if (condition) br => br_if (condition) if (Break* br = curr->ifTrue->dynCast()) { if (canTurnIfIntoBrIf( curr->condition, br->value, getPassOptions(), *getModule())) { if (!br->condition) { br->condition = curr->condition; } else { // In this case we can replace // if (condition1) br_if (condition2) // => // br_if select (condition1) (condition2) (i32.const 0) // In other words, we replace an if (3 bytes) with a select and a // zero (also 3 bytes). The size is unchanged, but the select may // be further optimizable, and if select does not branch we also // avoid one branch. // Multivalue selects are not supported if (br->value && br->value->type.isTuple()) { return; } // If running the br's condition unconditionally is too expensive, // give up. auto* zero = LiteralUtils::makeZero(Type::i32, *getModule()); if (tooCostlyToRunUnconditionally( getPassOptions(), br->condition, zero)) { return; } // Of course we can't do this if the br's condition has side // effects, as we would then execute those unconditionally. if (EffectAnalyzer(getPassOptions(), *getModule(), br->condition) .hasSideEffects()) { return; } Builder builder(*getModule()); // Note that we use the br's condition as the select condition. // That keeps the order of the two conditions as it was originally. br->condition = builder.makeSelect(br->condition, curr->condition, zero); } br->finalize(); replaceCurrent(Builder(*getModule()).dropIfConcretelyTyped(br)); anotherCycle = true; } } // if (condition-A) { if (condition-B) .. } // => // if (condition-A ? condition-B : 0) { .. } // // This replaces an if, which is 3 bytes, with a select plus a zero, which // is also 3 bytes. The benefit is that the select may be faster, and also // further optimizations may be possible on the select. if (auto* child = curr->ifTrue->dynCast()) { if (child->ifFalse) { return; } // If running the child's condition unconditionally is too expensive, // give up. if (tooCostlyToRunUnconditionally(getPassOptions(), child->condition)) { return; } // Of course we can't do this if the inner if's condition has side // effects, as we would then execute those unconditionally. if (EffectAnalyzer(getPassOptions(), *getModule(), child->condition) .hasSideEffects()) { return; } Builder builder(*getModule()); curr->condition = builder.makeSelect( child->condition, curr->condition, builder.makeConst(int32_t(0))); curr->ifTrue = child->ifTrue; } } // TODO: if-else can be turned into a br_if as well, if one of the sides is // a dead end we handle the case of a returned value to a local.set // later down, see visitLocalSet. } // override scan to add a pre and a post check task to all nodes static void scan(RemoveUnusedBrs* self, Expression** currp) { self->pushTask(visitAny, currp); auto* iff = (*currp)->dynCast(); if (iff) { if (iff->condition->type == Type::unreachable) { // avoid trying to optimize this, we never reach it anyhow return; } self->pushTask(doVisitIf, currp); if (iff->ifFalse) { // we need to join up if-else control flow, and clear after the // condition self->pushTask(scan, &iff->ifFalse); // safe the ifTrue flow, we'll join it later self->pushTask(saveIfTrue, currp); } self->pushTask(scan, &iff->ifTrue); self->pushTask(clear, currp); // clear all flow after the condition self->pushTask(scan, &iff->condition); } else { super::scan(self, currp); } } // optimizes a loop. returns true if we made changes bool optimizeLoop(Loop* loop) { // if a loop ends in // (loop $in // (block $out // if (..) br $in; else br $out; // ) // ) // then our normal opts can remove the break out since it flows directly out // (and later passes make the if one-armed). however, the simple analysis // fails on patterns like // if (..) br $out; // br $in; // which is a common way to do a while (1) loop (end it with a jump to the // top), so we handle that here. Specifically we want to conditionalize // breaks to the loop top, i.e., put them behind a condition, so that other // code can flow directly out and thus brs out can be removed. (even if // the change is to let a break somewhere else flow out, that can still be // helpful, as it shortens the logical loop. it is also good to generate // an if-else instead of an if, as it might allow an eqz to be removed // by flipping arms) if (!loop->name.is()) { return false; } auto* block = loop->body->dynCast(); if (!block) { return false; } // does the last element break to the top of the loop? auto& list = block->list; if (list.size() <= 1) { return false; } auto* last = list.back()->dynCast(); if (!last || !ExpressionAnalyzer::isSimple(last) || last->name != loop->name) { return false; } // last is a simple break to the top of the loop. if we can conditionalize // it, it won't block things from flowing out and not needing breaks to do // so. Index i = list.size() - 2; Builder builder(*getModule()); while (1) { auto* curr = list[i]; if (auto* iff = curr->dynCast()) { // let's try to move the code going to the top of the loop into the // if-else if (!iff->ifFalse) { // we need the ifTrue to break, so it cannot reach the code we want to // move if (iff->ifTrue->type == Type::unreachable) { iff->ifFalse = stealSlice(builder, block, i + 1, list.size()); iff->finalize(); block->finalize(); return true; } } else { // this is already an if-else. if one side is a dead end, we can // append to the other, if there is no returned value to concern us // can't be, since in the middle of a block assert(!iff->type.isConcrete()); // ensures the first node is a block, if it isn't already, and merges // in the second, either as a single element or, if a block, by // appending to the first block. this keeps the order of operations in // place, that is, the appended element will be executed after the // first node's elements auto blockifyMerge = [&](Expression* any, Expression* append) -> Block* { Block* block = nullptr; if (any) { block = any->dynCast(); } // if the first isn't a block, or it's a block with a name (so we // might branch to the end, and so can't append to it, we might skip // that code!) then make a new block if (!block || block->name.is()) { block = builder.makeBlock(any); } else { assert(!block->type.isConcrete()); } auto* other = append->dynCast(); if (!other) { block->list.push_back(append); } else { for (auto* item : other->list) { block->list.push_back(item); } } block->finalize(); return block; }; if (iff->ifTrue->type == Type::unreachable) { iff->ifFalse = blockifyMerge( iff->ifFalse, stealSlice(builder, block, i + 1, list.size())); iff->finalize(); block->finalize(); return true; } else if (iff->ifFalse->type == Type::unreachable) { iff->ifTrue = blockifyMerge( iff->ifTrue, stealSlice(builder, block, i + 1, list.size())); iff->finalize(); block->finalize(); return true; } } return false; } else if (auto* brIf = curr->dynCast()) { // br_if is similar to if. if (brIf->condition && !brIf->value && brIf->name != loop->name) { if (i == list.size() - 2) { // there is the br_if, and then the br to the top, so just flip them // and the condition brIf->condition = builder.makeUnary(EqZInt32, brIf->condition); last->name = brIf->name; brIf->name = loop->name; return true; } else { // there are elements in the middle, // br_if $somewhere (condition) // (..more..) // br $in // we can convert the br_if to an if. this has a cost, though, // so only do it if it looks useful, which it definitely is if // (a) $somewhere is straight out (so the br out vanishes), and // (b) this br_if is the only branch to that block (so the block // will vanish) if (brIf->name == block->name && BranchUtils::BranchSeeker::count(block, block->name) == 1) { // note that we could drop the last element here, it is a br we // know for sure is removable, but telling stealSlice to steal all // to the end is more efficient, it can just truncate. list[i] = builder.makeIf(brIf->condition, builder.makeBreak(brIf->name), stealSlice(builder, block, i + 1, list.size())); block->finalize(); return true; } } } return false; } // if there is control flow, we must stop looking if (EffectAnalyzer(getPassOptions(), *getModule(), curr) .transfersControlFlow()) { return false; } if (i == 0) { return false; } i--; } } bool sinkBlocks(Function* func) { struct Sinker : public PostWalker { bool worked = false; void visitBlock(Block* curr) { // If the block has a single child which is a loop, and the block is // named, then it is the exit for the loop. It's better to move it into // the loop, where it can be better optimized by other passes. Similar // logic for ifs: if the block is an exit for the if, we can move the // block in, consider for example: // (block $label // (if (..condition1..) // (block // (br_if $label (..condition2..)) // (..code..) // ) // ) // ) // After also merging the blocks, we have // (if (..condition1..) // (block $label // (br_if $label (..condition2..)) // (..code..) // ) // ) // which can be further optimized later. if (curr->name.is() && curr->list.size() == 1) { if (auto* loop = curr->list[0]->dynCast()) { curr->list[0] = loop->body; loop->body = curr; curr->finalize(curr->type); loop->finalize(); replaceCurrent(loop); worked = true; } else if (auto* iff = curr->list[0]->dynCast()) { // The label can't be used in the condition. if (BranchUtils::BranchSeeker::count(iff->condition, curr->name) == 0) { // We can move the block into either arm, if there are no uses in // the other. Expression** target = nullptr; if (!iff->ifFalse || BranchUtils::BranchSeeker::count( iff->ifFalse, curr->name) == 0) { target = &iff->ifTrue; } else if (BranchUtils::BranchSeeker::count(iff->ifTrue, curr->name) == 0) { target = &iff->ifFalse; } if (target) { curr->list[0] = *target; *target = curr; // The block used to contain the if, and may have changed type // from unreachable to none, for example, if the if has an // unreachable condition but the arm is not unreachable. curr->finalize(); iff->finalize(); replaceCurrent(iff); worked = true; // Note that the type might change, e.g. if the if condition is // unreachable but the block that was on the outside had a // break. } } } } } } sinker; sinker.doWalkFunction(func); if (sinker.worked) { ReFinalize().walkFunctionInModule(func, getModule()); return true; } return false; } // GC-specific optimizations. These are split out from the main code to keep // things as simple as possible. bool optimizeGC(Function* func) { if (!getModule()->features.hasGC()) { return false; } struct Optimizer : public PostWalker { bool worked = false; void visitBrOn(BrOn* curr) { // Ignore unreachable BrOns which we cannot improve anyhow. Note that // we must check the ref field manually, as we may be changing types as // we go here. (Another option would be to use a TypeUpdater here // instead of calling ReFinalize at the very end, but that would be more // complex and slower.) if (curr->type == Type::unreachable || curr->ref->type == Type::unreachable) { return; } // First, check for a possible null which would prevent all other // optimizations. // TODO: Look into using BrOnNonNull here, to replace a br_on_func whose // input is (ref null func) with br_on_non_null (as only the null check // would be needed). auto refType = curr->ref->type; if (refType.isNullable()) { return; } if (curr->op == BrOnNull) { // This cannot be null, so the br is never taken, and the non-null // value flows through. replaceCurrent(curr->ref); worked = true; return; } if (curr->op == BrOnNonNull) { // This cannot be null, so the br is always taken. replaceCurrent( Builder(*getModule()).makeBreak(curr->name, curr->ref)); worked = true; return; } // Check if the type is the kind we are checking for. auto result = GCTypeUtils::evaluateKindCheck(curr); if (result == GCTypeUtils::Success) { // The type is what we are looking for, so we can switch from BrOn to // a simple br which is always taken. replaceCurrent( Builder(*getModule()).makeBreak(curr->name, curr->ref)); worked = true; } else if (result == GCTypeUtils::Failure) { // The type is not what we are looking for, so the branch is never // taken, and the value just flows through. replaceCurrent(curr->ref); worked = true; } } } optimizer; optimizer.setModule(getModule()); optimizer.doWalkFunction(func); // If we removed any BrOn instructions, that might affect the reachability // of the things they used to break to, so update types. if (optimizer.worked) { ReFinalize().walkFunctionInModule(func, getModule()); return true; } return false; } void doWalkFunction(Function* func) { // multiple cycles may be needed do { anotherCycle = false; super::doWalkFunction(func); assert(ifStack.empty()); // flows may contain returns, which are flowing out and so can be // optimized for (Index i = 0; i < flows.size(); i++) { auto* flow = (*flows[i])->dynCast(); if (!flow) { continue; } if (!flow->value) { // return => nop ExpressionManipulator::nop(flow); } else { // return with value => value *flows[i] = flow->value; } anotherCycle = true; } flows.clear(); // optimize loops (we don't do it while tracking flows, as they can // interfere) for (auto* loop : loops) { anotherCycle |= optimizeLoop(loop); } loops.clear(); if (anotherCycle) { ReFinalize().walkFunctionInModule(func, getModule()); } if (sinkBlocks(func)) { anotherCycle = true; } if (optimizeGC(func)) { anotherCycle = true; } } while (anotherCycle); // thread trivial jumps struct JumpThreader : public ControlFlowWalker { // map of all value-less breaks and switches going to a block (and not a // loop) std::map> branchesToBlock; bool worked = false; void visitBreak(Break* curr) { if (!curr->value) { if (auto* target = findBreakTarget(curr->name)->dynCast()) { branchesToBlock[target].push_back(curr); } } } void visitSwitch(Switch* curr) { if (!curr->value) { auto names = BranchUtils::getUniqueTargets(curr); for (auto name : names) { if (auto* target = findBreakTarget(name)->dynCast()) { branchesToBlock[target].push_back(curr); } } } } void visitBlock(Block* curr) { auto& list = curr->list; if (list.size() == 1 && curr->name.is()) { // if this block has just one child, a sub-block, then jumps to the // former are jumps to us, really if (auto* child = list[0]->dynCast()) { // the two blocks must have the same type for us to update the // branch, as otherwise one block may be unreachable and the other // concrete, so one might lack a value if (child->name.is() && child->name != curr->name && child->type == curr->type) { redirectBranches(child, curr->name); } } } else if (list.size() == 2) { // if this block has two children, a child-block and a simple jump, // then jumps to child-block can be replaced with jumps to the new // target auto* child = list[0]->dynCast(); auto* jump = list[1]->dynCast(); if (child && child->name.is() && jump && ExpressionAnalyzer::isSimple(jump)) { redirectBranches(child, jump->name); } } } void redirectBranches(Block* from, Name to) { auto& branches = branchesToBlock[from]; for (auto* branch : branches) { if (BranchUtils::replacePossibleTarget(branch, from->name, to)) { worked = true; } } // if the jump is to another block then we can update the list, and // maybe push it even more later if (auto* newTarget = findBreakTarget(to)->dynCast()) { for (auto* branch : branches) { branchesToBlock[newTarget].push_back(branch); } } } void finish(Function* func) { if (worked) { // by changing where brs go, we may change block types etc. ReFinalize().walkFunctionInModule(func, getModule()); } } }; JumpThreader jumpThreader; jumpThreader.setModule(getModule()); jumpThreader.walkFunction(func); jumpThreader.finish(func); // perform some final optimizations struct FinalOptimizer : public PostWalker { bool shrink; PassOptions& passOptions; bool needUniqify = false; FinalOptimizer(PassOptions& passOptions) : passOptions(passOptions) {} void visitBlock(Block* curr) { // if a block has an if br else br, we can un-conditionalize the latter, // allowing the if to become a br_if. // * note that if not in a block already, then we need to create a block // for this, so not useful otherwise // * note that this only happens at the end of a block, as code after // the if is dead // * note that we do this at the end, because un-conditionalizing can // interfere with optimizeLoop()ing. auto& list = curr->list; for (Index i = 0; i < list.size(); i++) { auto* iff = list[i]->dynCast(); if (!iff || !iff->ifFalse) { // if it lacked an if-false, it would already be a br_if, as that's // the easy case continue; } auto* ifTrueBreak = iff->ifTrue->dynCast(); if (ifTrueBreak && !ifTrueBreak->condition && canTurnIfIntoBrIf(iff->condition, ifTrueBreak->value, passOptions, *getModule())) { // we are an if-else where the ifTrue is a break without a // condition, so we can do this ifTrueBreak->condition = iff->condition; ifTrueBreak->finalize(); list[i] = Builder(*getModule()).dropIfConcretelyTyped(ifTrueBreak); ExpressionManipulator::spliceIntoBlock(curr, i + 1, iff->ifFalse); continue; } // otherwise, perhaps we can flip the if auto* ifFalseBreak = iff->ifFalse->dynCast(); if (ifFalseBreak && !ifFalseBreak->condition && canTurnIfIntoBrIf(iff->condition, ifFalseBreak->value, passOptions, *getModule())) { ifFalseBreak->condition = Builder(*getModule()).makeUnary(EqZInt32, iff->condition); ifFalseBreak->finalize(); list[i] = Builder(*getModule()).dropIfConcretelyTyped(ifFalseBreak); ExpressionManipulator::spliceIntoBlock(curr, i + 1, iff->ifTrue); continue; } } if (list.size() >= 2) { // combine/optimize adjacent br_ifs + a br (maybe _if) right after it for (Index i = 0; i < list.size() - 1; i++) { auto* br1 = list[i]->dynCast(); // avoid unreachable brs, as they are dead code anyhow, and after // merging them the outer scope could need type changes if (!br1 || !br1->condition || br1->type == Type::unreachable) { continue; } assert(!br1->value); auto* br2 = list[i + 1]->dynCast(); if (!br2 || br1->name != br2->name) { continue; } assert(!br2->value); // same target as previous, which has no value // a br_if and then a br[_if] with the same target right after it if (br2->condition) { if (shrink && br2->type != Type::unreachable) { // Join adjacent br_ifs to the same target, making one br_if // with a "selectified" condition that executes both. if (!EffectAnalyzer(passOptions, *getModule(), br2->condition) .hasSideEffects()) { // it's ok to execute them both, do it Builder builder(*getModule()); br1->condition = builder.makeBinary(OrInt32, br1->condition, br2->condition); ExpressionManipulator::nop(br2); } } } else { // merge, we go there anyhow Builder builder(*getModule()); list[i] = builder.makeDrop(br1->condition); } } // Combine adjacent br_ifs that test the same value into a br_table, // when that makes sense. tablify(curr); // Pattern-patch ifs, recreating them when it makes sense. restructureIf(curr); } } void visitSwitch(Switch* curr) { if (BranchUtils::getUniqueTargets(curr).size() == 1) { // This switch has just one target no matter what; replace with a br // if we can (to do so, we must put the condition before a possible // value). if (!curr->value || EffectAnalyzer::canReorder( passOptions, *getModule(), curr->condition, curr->value)) { Builder builder(*getModule()); replaceCurrent(builder.makeSequence( builder.makeDrop(curr->condition), // might have side effects builder.makeBreak(curr->default_, curr->value))); } } } // Restructuring of ifs: if we have // (block $x // (drop (br_if $x (cond))) // .., no other references to $x // ) // then we can turn that into (if (!cond) ..). // Code size wise, we turn the block into an if (no change), and // lose the br_if (-2). .. turns into the body of the if in the binary // format. We need to flip the condition, which at worst adds 1. // If the block has a return value, we can do something similar, removing // the drop from the br_if and putting the if on the outside, // (block $x // (drop (br_if $x (value) (cond))) // .., no other references to $x // ..final element.. // ) // => // (if // (cond) // (value) ;; must not have side effects! // (block // .., no other references to $x // ..final element.. // ) // ) // This is beneficial as the block will likely go away in the binary // format (the if arm is an implicit block), and the drop is removed. void restructureIf(Block* curr) { auto& list = curr->list; // We should be called only on potentially-interesting lists. assert(list.size() >= 2); if (curr->name.is()) { Break* br = nullptr; Drop* drop = list[0]->dynCast(); if (drop) { br = drop->value->dynCast(); } else { br = list[0]->dynCast(); } // Check if the br is conditional and goes to the block. It may or may // not have a value, depending on if it was dropped or not. If the // type is unreachable that means it is not actually reached, which we // can ignore. Builder builder(*getModule()); if (br && br->condition && br->name == curr->name && br->type != Type::unreachable) { if (BranchUtils::BranchSeeker::count(curr, curr->name) == 1) { // no other breaks to that name, so we can do this if (!drop) { assert(!br->value); replaceCurrent(builder.makeIf( builder.makeUnary(EqZInt32, br->condition), curr)); ExpressionManipulator::nop(br); curr->finalize(curr->type); } else { // To use an if, the value must have no side effects, as in the // if it may not execute. if (!EffectAnalyzer(passOptions, *getModule(), br->value) .hasSideEffects()) { // We also need to reorder the condition and the value. if (EffectAnalyzer::canReorder( passOptions, *getModule(), br->condition, br->value)) { ExpressionManipulator::nop(list[0]); replaceCurrent( builder.makeIf(br->condition, br->value, curr)); } } else { // The value has side effects, so it must always execute. We // may still be able to optimize this, however, by using a // select: // (block $x // (drop (br_if $x (value) (cond))) // ..., no other references to $x // ..final element.. // ) // => // (select // (value) // (block $x // ..., no other references to $x // ..final element.. // ) // (cond) // ) // To do this we must be able to reorder the condition with // the rest of the block (but not the value), and we must be // able to make the rest of the block always execute, so it // must not have side effects. // TODO: we can do this when there *are* other refs to $x, // with a larger refactoring here. // Test for the conditions with a temporary nop instead of the // br_if. Expression* old = list[0]; Nop nop; // After this assignment, curr is what is left in the block // after ignoring the br_if. list[0] = &nop; auto canReorder = EffectAnalyzer::canReorder( passOptions, *getModule(), br->condition, curr); auto hasSideEffects = EffectAnalyzer(passOptions, *getModule(), curr) .hasSideEffects(); list[0] = old; if (canReorder && !hasSideEffects && Properties::canEmitSelectWithArms(br->value, curr)) { ExpressionManipulator::nop(list[0]); replaceCurrent( builder.makeSelect(br->condition, br->value, curr)); } } } } } } } void visitIf(If* curr) { // we may have simplified ifs enough to turn them into selects if (auto* select = selectify(curr)) { replaceCurrent(select); } } // Convert an if into a select, if possible and beneficial to do so. Select* selectify(If* iff) { // Only an if-else can be turned into a select. if (!iff->ifFalse) { return nullptr; } if (!Properties::canEmitSelectWithArms(iff->ifTrue, iff->ifFalse)) { return nullptr; } if (iff->condition->type == Type::unreachable) { // An if with an unreachable condition may nonetheless have a type // that is not unreachable, // // (if (result i32) (unreachable) ..) // // Turning such an if into a select would change the type of the // expression, which would require updating types further up. Avoid // that, leaving dead code elimination to that dedicated pass. return nullptr; } // This is always helpful for code size, but can be a tradeoff with // performance as we run both code paths. So when shrinking we always // try to do this, but otherwise must consider more carefully. if (tooCostlyToRunUnconditionally( passOptions, iff->ifTrue, iff->ifFalse)) { return nullptr; } // Check if side effects allow this: we need to execute the two arms // unconditionally, and also to make the condition run last. EffectAnalyzer ifTrue(passOptions, *getModule(), iff->ifTrue); if (ifTrue.hasSideEffects()) { return nullptr; } EffectAnalyzer ifFalse(passOptions, *getModule(), iff->ifFalse); if (ifFalse.hasSideEffects()) { return nullptr; } EffectAnalyzer condition(passOptions, *getModule(), iff->condition); if (condition.invalidates(ifTrue) || condition.invalidates(ifFalse)) { return nullptr; } return Builder(*getModule()) .makeSelect(iff->condition, iff->ifTrue, iff->ifFalse, iff->type); } void visitLocalSet(LocalSet* curr) { // Sets of an if can be optimized in various ways that remove part of // the if branching, or all of it. // The optimizations we can do here can recurse and call each // other, so pass around a pointer to the output. optimizeSetIf(getCurrentPointer()); } void optimizeSetIf(Expression** currp) { if (optimizeSetIfWithBrArm(currp)) { return; } if (optimizeSetIfWithCopyArm(currp)) { return; } } // If one arm is a br, we prefer a br_if and the set later: // (local.set $x // (if (result i32) // (..condition..) // (br $somewhere) // (..result) // ) // ) // => // (br_if $somewhere // (..condition..) // ) // (local.set $x // (..result) // ) // TODO: handle a condition in the br? need to watch for side effects bool optimizeSetIfWithBrArm(Expression** currp) { auto* set = (*currp)->cast(); auto* iff = set->value->dynCast(); if (!iff || !iff->type.isConcrete() || !iff->condition->type.isConcrete()) { return false; } auto tryToOptimize = [&](Expression* one, Expression* two, bool flipCondition) { if (one->type == Type::unreachable && two->type != Type::unreachable) { if (auto* br = one->dynCast()) { if (ExpressionAnalyzer::isSimple(br)) { // Wonderful, do it! Builder builder(*getModule()); if (flipCondition) { builder.flip(iff); } br->condition = iff->condition; br->finalize(); set->value = two; auto* block = builder.makeSequence(br, set); *currp = block; // Recurse on the set, which now has a new value. optimizeSetIf(&block->list[1]); return true; } } } return false; }; return tryToOptimize(iff->ifTrue, iff->ifFalse, false) || tryToOptimize(iff->ifFalse, iff->ifTrue, true); } // If one arm is a get of the same outer set, it is a copy which // we can remove. If this is not a tee, then we remove the get // as well as the if-else opcode in the binary format, which is // great: // (local.set $x // (if (result i32) // (..condition..) // (..result) // (local.get $x) // ) // ) // => // (if // (..condition..) // (local.set $x // (..result) // ) // ) // If this is a tee, then we can do the same operation but // inside a block, and keep the get: // (local.tee $x // (if (result i32) // (..condition..) // (..result) // (local.get $x) // ) // ) // => // (block (result i32) // (if // (..condition..) // (local.set $x // (..result) // ) // ) // (local.get $x) // ) // We save the if-else opcode, and add the block's opcodes. // This may be detrimental, however, often the block can be // merged or eliminated given the outside scope, and we // removed one of the if branches. bool optimizeSetIfWithCopyArm(Expression** currp) { auto* set = (*currp)->cast(); auto* iff = set->value->dynCast(); if (!iff || !iff->type.isConcrete() || !iff->condition->type.isConcrete()) { return false; } Builder builder(*getModule()); LocalGet* get = iff->ifTrue->dynCast(); if (get && get->index == set->index) { builder.flip(iff); } else { get = iff->ifFalse->dynCast(); if (get && get->index != set->index) { get = nullptr; } } if (!get) { return false; } // We can do it! bool tee = set->isTee(); assert(set->index == get->index); assert(iff->ifFalse == get); set->value = iff->ifTrue; set->finalize(); iff->ifTrue = set; iff->ifFalse = nullptr; iff->finalize(); Expression* replacement = iff; if (tee) { set->makeSet(); // We need a block too. replacement = builder.makeSequence(iff, get // reuse the get ); } *currp = replacement; // Recurse on the set, which now has a new value. optimizeSetIf(&iff->ifTrue); return true; } // (br_if)+ => br_table // we look for the specific pattern of // (br_if ..target1.. // (i32.eq // (..input..) // (i32.const ..value1..) // ) // ) // (br_if ..target2.. // (i32.eq // (..input..) // (i32.const ..value2..) // ) // ) // TODO: consider also looking at <= etc. and not just eq void tablify(Block* block) { auto& list = block->list; if (list.size() <= 1) { return; } // Heuristics. These are slightly inspired by the constants from the // asm.js backend. // How many br_ifs we need to see to consider doing this const uint32_t MIN_NUM = 3; // How much of a range of values is definitely too big const uint32_t MAX_RANGE = 1024; // Multiplied by the number of br_ifs, then compared to the range. When // this is high, we allow larger ranges. const uint32_t NUM_TO_RANGE_FACTOR = 3; // check if the input is a proper br_if on an i32.eq of a condition // value to a const, and the const is in the proper range, // [0-int32_max), to avoid overflow concerns. returns the br_if if so, // or nullptr otherwise auto getProperBrIf = [](Expression* curr) -> Break* { auto* br = curr->dynCast(); if (!br) { return nullptr; } if (!br->condition || br->value) { return nullptr; } if (br->type != Type::none) { // no value, so can be unreachable or none. ignore unreachable ones, // dce will clean it up return nullptr; } auto* condition = br->condition; // Also support eqz, which is the same as == 0. if (auto* unary = condition->dynCast()) { if (unary->op == EqZInt32) { return br; } return nullptr; } auto* binary = condition->dynCast(); if (!binary) { return nullptr; } if (binary->op != EqInt32) { return nullptr; } auto* c = binary->right->dynCast(); if (!c) { return nullptr; } uint32_t value = c->value.geti32(); if (value >= uint32_t(std::numeric_limits::max())) { return nullptr; } return br; }; // check if the input is a proper br_if // and returns the condition if so, or nullptr otherwise auto getProperBrIfConditionValue = [&getProperBrIf](Expression* curr) -> Expression* { auto* br = getProperBrIf(curr); if (!br) { return nullptr; } auto* condition = br->condition; if (auto* binary = condition->dynCast()) { return binary->left; } else if (auto* unary = condition->dynCast()) { assert(unary->op == EqZInt32); return unary->value; } else { WASM_UNREACHABLE("invalid br_if condition"); } }; // returns the constant value, as a uint32_t auto getProperBrIfConstant = [&getProperBrIf](Expression* curr) -> uint32_t { auto* condition = getProperBrIf(curr)->condition; if (auto* binary = condition->dynCast()) { return binary->right->cast()->value.geti32(); } else if (auto* unary = condition->dynCast()) { assert(unary->op == EqZInt32); return 0; } else { WASM_UNREACHABLE("invalid br_if condition"); } }; Index start = 0; while (start < list.size() - 1) { auto* conditionValue = getProperBrIfConditionValue(list[start]); if (!conditionValue) { start++; continue; } // If the first condition value is a tee, that is ok, so long as the // others afterwards are gets of the value that is tee'd. LocalGet get; if (auto* tee = conditionValue->dynCast()) { get.index = tee->index; get.type = getFunction()->getLocalType(get.index); conditionValue = &get; } // if the condition has side effects, we can't replace many // appearances of it with a single one if (EffectAnalyzer(passOptions, *getModule(), conditionValue) .hasSideEffects()) { start++; continue; } // look for a "run" of br_ifs with all the same conditionValue, and // having unique constants (an overlapping constant could be handled, // just the first branch is taken, but we can't remove the other br_if // (it may be the only branch keeping a block reachable), which may // make this bad for code size. Index end = start + 1; std::unordered_set usedConstants; usedConstants.insert(getProperBrIfConstant(list[start])); while (end < list.size() && ExpressionAnalyzer::equal( getProperBrIfConditionValue(list[end]), conditionValue)) { if (!usedConstants.insert(getProperBrIfConstant(list[end])) .second) { // this constant already appeared break; } end++; } auto num = end - start; if (num >= 2 && num >= MIN_NUM) { // we found a suitable range, [start, end), containing more than 1 // element. let's see if it's worth it auto min = getProperBrIfConstant(list[start]); auto max = min; for (Index i = start + 1; i < end; i++) { auto* curr = list[i]; min = std::min(min, getProperBrIfConstant(curr)); max = std::max(max, getProperBrIfConstant(curr)); } uint32_t range = max - min; // decision time if (range <= MAX_RANGE && range <= num * NUM_TO_RANGE_FACTOR) { // great! let's do this std::unordered_set usedNames; for (Index i = start; i < end; i++) { usedNames.insert(getProperBrIf(list[i])->name); } // we need a name for the default too Name defaultName; Index i = 0; while (1) { defaultName = "tablify|" + std::to_string(i++); if (usedNames.count(defaultName) == 0) { break; } } std::vector table; for (Index i = start; i < end; i++) { auto name = getProperBrIf(list[i])->name; auto index = getProperBrIfConstant(list[i]); index -= min; while (table.size() <= index) { table.push_back(defaultName); } // we should have made sure there are no overlaps assert(table[index] == defaultName); table[index] = name; } Builder builder(*getModule()); // the table and condition are offset by the min auto* newCondition = getProperBrIfConditionValue(list[start]); if (min != 0) { newCondition = builder.makeBinary( SubInt32, newCondition, builder.makeConst(int32_t(min))); } list[end - 1] = builder.makeBlock( defaultName, builder.makeSwitch(table, defaultName, newCondition)); for (Index i = start; i < end - 1; i++) { ExpressionManipulator::nop(list[i]); } // the defaultName may exist elsewhere in this function, // uniquify it later needUniqify = true; } } start = end; } } }; FinalOptimizer finalOptimizer(getPassOptions()); finalOptimizer.setModule(getModule()); finalOptimizer.shrink = getPassRunner()->options.shrinkLevel > 0; finalOptimizer.walkFunction(func); if (finalOptimizer.needUniqify) { wasm::UniqueNameMapper::uniquify(func->body); } } }; Pass* createRemoveUnusedBrsPass() { return new RemoveUnusedBrs(); } } // namespace wasm binaryen-version_108/src/passes/RemoveUnusedModuleElements.cpp000066400000000000000000000346201423707623100250270ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Removes module elements that are are never used: functions, globals, and // tags, which may be imported or not, and function types (which we merge and // remove if unneeded) // #include #include "ir/element-utils.h" #include "ir/intrinsics.h" #include "ir/module-utils.h" #include "ir/utils.h" #include "pass.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { enum class ModuleElementKind { Function, Global, Tag, Table, ElementSegment }; typedef std::pair ModuleElement; // Finds reachabilities // TODO: use Effects to determine if a memory is used struct ReachabilityAnalyzer : public PostWalker { Module* module; std::vector queue; std::set reachable; bool usesMemory = false; // The signatures that we have seen a call_ref for. When we see a RefFunc of a // signature in here, we know it is reachable. std::unordered_set calledSignatures; // All the RefFuncs we've seen, grouped by heap type. When we see a CallRef of // one of the types here, we know all the RefFuncs corresponding to it are // reachable. This is the reverse side of calledSignatures: for a function to // be reached via a reference, we need the combination of a RefFunc of it as // well as a CallRef of that, and we may see them in any order. (Or, if the // RefFunc is in a table, we need a CallIndirect, which is handled in the // table logic.) // // After we see a call for a type, we can clear out the entry here for it, as // we'll have that type in calledSignatures, and so this contains only // RefFuncs that we have not seen a call for yet, hence "uncalledRefFuncMap." // // TODO: We assume a closed world in the GC space atm, but eventually should // have a flag for that, and when the world is not closed we'd need to // check for RefFuncs that flow out to exports or imports std::unordered_map> uncalledRefFuncMap; ReachabilityAnalyzer(Module* module, const std::vector& roots) : module(module) { queue = roots; // Globals used in memory/table init expressions are also roots for (auto& segment : module->memory.segments) { if (!segment.isPassive) { walk(segment.offset); } } for (auto& segment : module->elementSegments) { if (segment->table.is()) { walk(segment->offset); } } // main loop while (queue.size()) { auto curr = queue.back(); queue.pop_back(); if (reachable.emplace(curr).second) { auto& [kind, value] = curr; if (kind == ModuleElementKind::Function) { // if not an import, walk it auto* func = module->getFunction(value); if (!func->imported()) { walk(func->body); } } else if (kind == ModuleElementKind::Global) { // if not imported, it has an init expression we need to walk auto* global = module->getGlobal(value); if (!global->imported()) { walk(global->init); } } else if (kind == ModuleElementKind::Table) { ModuleUtils::iterTableSegments( *module, curr.second, [&](ElementSegment* segment) { walk(segment->offset); }); } } } } void maybeAdd(ModuleElement element) { if (reachable.count(element) == 0) { queue.emplace_back(element); } } // Add a reference to a table and all its segments and elements. void maybeAddTable(Name name) { maybeAdd(ModuleElement(ModuleElementKind::Table, name)); ModuleUtils::iterTableSegments(*module, name, [&](ElementSegment* segment) { maybeAdd(ModuleElement(ModuleElementKind::ElementSegment, segment->name)); }); } void visitCall(Call* curr) { maybeAdd(ModuleElement(ModuleElementKind::Function, curr->target)); if (Intrinsics(*module).isCallWithoutEffects(curr)) { // A call-without-effects receives a function reference and calls it, the // same as a CallRef. When we have a flag for non-closed-world, we should // handle this automatically by the reference flowing out to an import, // which is what binaryen intrinsics look like. For now, to support use // cases of a closed world but that also use this intrinsic, handle the // intrinsic specifically here. auto* target = curr->operands.back(); if (auto* refFunc = target->dynCast()) { // We can see exactly where this goes. Call call(module->allocator); call.target = refFunc->func; visitCall(&call); } else { // All we can see is the type, so do a CallRef of that. CallRef callRef(module->allocator); callRef.target = target; visitCallRef(&callRef); } } } void visitCallIndirect(CallIndirect* curr) { maybeAddTable(curr->table); } void visitCallRef(CallRef* curr) { // Ignore unreachable code. if (!curr->target->type.isRef()) { return; } auto type = curr->target->type.getHeapType(); // Call all the functions of that signature. We can then forget about // them, as this signature will be marked as called. auto iter = uncalledRefFuncMap.find(type); if (iter != uncalledRefFuncMap.end()) { // We must not have a type in both calledSignatures and // uncalledRefFuncMap: once it is called, we do not track RefFuncs for // it any more. assert(calledSignatures.count(type) == 0); for (Name target : iter->second) { maybeAdd(ModuleElement(ModuleElementKind::Function, target)); } uncalledRefFuncMap.erase(iter); } calledSignatures.insert(type); } void visitGlobalGet(GlobalGet* curr) { maybeAdd(ModuleElement(ModuleElementKind::Global, curr->name)); } void visitGlobalSet(GlobalSet* curr) { maybeAdd(ModuleElement(ModuleElementKind::Global, curr->name)); } void visitLoad(Load* curr) { usesMemory = true; } void visitStore(Store* curr) { usesMemory = true; } void visitAtomicCmpxchg(AtomicCmpxchg* curr) { usesMemory = true; } void visitAtomicRMW(AtomicRMW* curr) { usesMemory = true; } void visitAtomicWait(AtomicWait* curr) { usesMemory = true; } void visitAtomicNotify(AtomicNotify* curr) { usesMemory = true; } void visitAtomicFence(AtomicFence* curr) { usesMemory = true; } void visitMemoryInit(MemoryInit* curr) { usesMemory = true; } void visitDataDrop(DataDrop* curr) { usesMemory = true; } void visitMemoryCopy(MemoryCopy* curr) { usesMemory = true; } void visitMemoryFill(MemoryFill* curr) { usesMemory = true; } void visitMemorySize(MemorySize* curr) { usesMemory = true; } void visitMemoryGrow(MemoryGrow* curr) { usesMemory = true; } void visitRefFunc(RefFunc* curr) { auto type = curr->type.getHeapType(); if (calledSignatures.count(type)) { // We must not have a type in both calledSignatures and // uncalledRefFuncMap: once it is called, we do not track RefFuncs for it // any more. assert(uncalledRefFuncMap.count(type) == 0); // We've seen a RefFunc for this, so it is reachable. maybeAdd(ModuleElement(ModuleElementKind::Function, curr->func)); } else { // We've never seen a CallRef for this, but might see one later. uncalledRefFuncMap[type].insert(curr->func); } } void visitTableGet(TableGet* curr) { maybeAddTable(curr->table); } void visitTableSet(TableSet* curr) { maybeAddTable(curr->table); } void visitTableSize(TableSize* curr) { maybeAddTable(curr->table); } void visitTableGrow(TableGrow* curr) { maybeAddTable(curr->table); } void visitThrow(Throw* curr) { maybeAdd(ModuleElement(ModuleElementKind::Tag, curr->tag)); } void visitTry(Try* curr) { for (auto tag : curr->catchTags) { maybeAdd(ModuleElement(ModuleElementKind::Tag, tag)); } } }; struct RemoveUnusedModuleElements : public Pass { bool rootAllFunctions; RemoveUnusedModuleElements(bool rootAllFunctions) : rootAllFunctions(rootAllFunctions) {} void run(PassRunner* runner, Module* module) override { std::vector roots; // Module start is a root. if (module->start.is()) { auto startFunction = module->getFunction(module->start); // Can be skipped if the start function is empty. if (!startFunction->imported() && startFunction->body->is()) { module->start.clear(); } else { roots.emplace_back(ModuleElementKind::Function, module->start); } } // If told to, root all the functions if (rootAllFunctions) { ModuleUtils::iterDefinedFunctions(*module, [&](Function* func) { roots.emplace_back(ModuleElementKind::Function, func->name); }); } ModuleUtils::iterActiveElementSegments( *module, [&](ElementSegment* segment) { auto table = module->getTable(segment->table); if (table->imported() && !segment->data.empty()) { roots.emplace_back(ModuleElementKind::ElementSegment, segment->name); } }); // Exports are roots. bool exportsMemory = false; for (auto& curr : module->exports) { if (curr->kind == ExternalKind::Function) { roots.emplace_back(ModuleElementKind::Function, curr->value); } else if (curr->kind == ExternalKind::Global) { roots.emplace_back(ModuleElementKind::Global, curr->value); } else if (curr->kind == ExternalKind::Tag) { roots.emplace_back(ModuleElementKind::Tag, curr->value); } else if (curr->kind == ExternalKind::Table) { roots.emplace_back(ModuleElementKind::Table, curr->value); ModuleUtils::iterTableSegments( *module, curr->value, [&](ElementSegment* segment) { roots.emplace_back(ModuleElementKind::ElementSegment, segment->name); }); } else if (curr->kind == ExternalKind::Memory) { exportsMemory = true; } } // Check for special imports, which are roots. bool importsMemory = false; if (module->memory.imported()) { importsMemory = true; } // For now, all functions that can be called indirectly are marked as roots. // TODO: Compute this based on which ElementSegments are actually reachable, // and which functions have a call_indirect of the proper type. ElementUtils::iterAllElementFunctionNames(module, [&](Name& name) { roots.emplace_back(ModuleElementKind::Function, name); }); // Compute reachability starting from the root set. ReachabilityAnalyzer analyzer(module, roots); // RefFuncs that are never called are a special case: We cannot remove the // function, since then (ref.func $foo) would not validate. But if we know // it is never called, at least the contents do not matter, so we can // empty it out. std::unordered_set uncalledRefFuncs; for (auto& [type, targets] : analyzer.uncalledRefFuncMap) { for (auto target : targets) { uncalledRefFuncs.insert(target); } // We cannot have a type in both this map and calledSignatures. assert(analyzer.calledSignatures.count(type) == 0); } #ifndef NDEBUG for (auto type : analyzer.calledSignatures) { assert(analyzer.uncalledRefFuncMap.count(type) == 0); } #endif // Remove unreachable elements. module->removeFunctions([&](Function* curr) { if (analyzer.reachable.count( ModuleElement(ModuleElementKind::Function, curr->name))) { // This is reached. return false; } if (uncalledRefFuncs.count(curr->name)) { // This is not reached, but has a reference. See comment above on // uncalledRefFuncs. if (!curr->imported()) { curr->body = Builder(*module).makeUnreachable(); } return false; } // The function is not reached and has no reference; remove it. return true; }); module->removeGlobals([&](Global* curr) { return analyzer.reachable.count( ModuleElement(ModuleElementKind::Global, curr->name)) == 0; }); module->removeTags([&](Tag* curr) { return analyzer.reachable.count( ModuleElement(ModuleElementKind::Tag, curr->name)) == 0; }); module->removeElementSegments([&](ElementSegment* curr) { return curr->data.empty() || analyzer.reachable.count(ModuleElement( ModuleElementKind::ElementSegment, curr->name)) == 0; }); // Since we've removed all empty element segments, here we mark all tables // that have a segment left. std::unordered_set nonemptyTables; ModuleUtils::iterActiveElementSegments( *module, [&](ElementSegment* segment) { nonemptyTables.insert(segment->table); }); module->removeTables([&](Table* curr) { return (nonemptyTables.count(curr->name) == 0 || !curr->imported()) && analyzer.reachable.count( ModuleElement(ModuleElementKind::Table, curr->name)) == 0; }); // TODO: After removing elements, we may be able to remove more things, and // should continue to work. (For example, after removing a reference // to a function from an element segment, we may be able to remove // that function, etc.) // Handle the memory if (!exportsMemory && !analyzer.usesMemory) { if (!importsMemory) { // The memory is unobservable to the outside, we can remove the // contents. module->memory.segments.clear(); } if (module->memory.segments.empty()) { module->memory.exists = false; module->memory.module = module->memory.base = Name(); module->memory.initial = 0; module->memory.max = 0; } } } }; Pass* createRemoveUnusedModuleElementsPass() { return new RemoveUnusedModuleElements(false); } Pass* createRemoveUnusedNonFunctionModuleElementsPass() { return new RemoveUnusedModuleElements(true); } } // namespace wasm binaryen-version_108/src/passes/RemoveUnusedNames.cpp000066400000000000000000000060531423707623100231470ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Removes names from locations that are never branched to, and // merge names when possible (by merging their blocks) // #include #include #include #include namespace wasm { struct RemoveUnusedNames : public WalkerPass>> { bool isFunctionParallel() override { return true; } Pass* create() override { return new RemoveUnusedNames; } // We maintain a list of branches that we saw in children, then when we reach // a parent block, we know if it was branched to std::map> branchesSeen; void visitExpression(Expression* curr) { BranchUtils::operateOnScopeNameUses(curr, [&](Name& name) { if (name.is()) { branchesSeen[name].insert(curr); } }); } void handleBreakTarget(Name& name) { if (name.is()) { if (branchesSeen.find(name) == branchesSeen.end()) { name = Name(); } else { branchesSeen.erase(name); } } } void visitBlock(Block* curr) { if (curr->name.is() && curr->list.size() == 1) { auto* child = curr->list[0]->dynCast(); if (child && child->name.is() && child->type == curr->type) { // we have just one child, this block, so breaking out of it goes to the // same place as breaking out of us, we just need one name (and block) auto& branches = branchesSeen[curr->name]; for (auto* branch : branches) { BranchUtils::replacePossibleTarget(branch, curr->name, child->name); } child->finalize(child->type); replaceCurrent(child); } } handleBreakTarget(curr->name); } void visitLoop(Loop* curr) { handleBreakTarget(curr->name); if (!curr->name.is() && curr->body->type == curr->type) { replaceCurrent(curr->body); } } void visitTry(Try* curr) { handleBreakTarget(curr->name); // Try has not just a break target but also an optional delegate with a // target name, so call the generic visitor as well to handle that. visitExpression(curr); } void visitFunction(Function* curr) { // When we reach the function body we can erase delegations to the caller. branchesSeen.erase(DELEGATE_CALLER_TARGET); assert(branchesSeen.empty()); } }; Pass* createRemoveUnusedNamesPass() { return new RemoveUnusedNames(); } } // namespace wasm binaryen-version_108/src/passes/ReorderFunctions.cpp000066400000000000000000000060041423707623100230310ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Sorts functions by their static use count. This helps reduce the size of wasm // binaries because fewer bytes are needed to encode references to frequently // used functions. // // This may incur a tradeoff, though, as while it reduces binary size, it may // increase gzip size. This might be because the new order has the functions in // a less beneficial position for compression, that is, mutually-compressible // functions are no longer together (when they were before, in the original // order, the has some natural tendency one way or the other). TODO: investigate // similarity ordering here (see #4322) // #include #include #include #include namespace wasm { typedef std::unordered_map> NameCountMap; struct CallCountScanner : public WalkerPass> { bool isFunctionParallel() override { return true; } CallCountScanner(NameCountMap* counts) : counts(counts) {} CallCountScanner* create() override { return new CallCountScanner(counts); } void visitCall(Call* curr) { // can't add a new element in parallel assert(counts->count(curr->target) > 0); (*counts)[curr->target]++; } private: NameCountMap* counts; }; struct ReorderFunctions : public Pass { void run(PassRunner* runner, Module* module) override { NameCountMap counts; // fill in info, as we operate on it in parallel (each function to its own // entry) for (auto& func : module->functions) { counts[func->name]; } // find counts on function calls CallCountScanner(&counts).run(runner, module); // find counts on global usages if (module->start.is()) { counts[module->start]++; } for (auto& curr : module->exports) { counts[curr->value]++; } ElementUtils::iterAllElementFunctionNames( module, [&](Name& name) { counts[name]++; }); // sort std::sort(module->functions.begin(), module->functions.end(), [&counts](const std::unique_ptr& a, const std::unique_ptr& b) -> bool { if (counts[a->name] == counts[b->name]) { return strcmp(a->name.str, b->name.str) > 0; } return counts[a->name] > counts[b->name]; }); } }; Pass* createReorderFunctionsPass() { return new ReorderFunctions(); } } // namespace wasm binaryen-version_108/src/passes/ReorderLocals.cpp000066400000000000000000000114351423707623100223020ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Sorts locals by access frequency. // // Secondarily, sort by first appearance. This canonicalizes the order. // // While sorting, we remove locals that have no uses at all. // #include #include #include namespace wasm { struct ReorderLocals : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new ReorderLocals; } // local index => times it is used std::vector counts; // local index => how many locals we saw before this one, before a use of // this one appeared. that is, one local has 1, another has 2, and so forth, // in the order in which we saw the first uses of them (we use "0" to mark // locals we have not yet seen). std::vector firstUses; Index firstUseIndex = 1; enum { Unseen = 0 }; void doWalkFunction(Function* curr) { if (curr->getNumVars() == 0) { return; // nothing to do. All locals are parameters } Index num = curr->getNumLocals(); counts.clear(); counts.resize(num); firstUses.clear(); firstUses.resize(num, Unseen); // Gather information about local usages. walk(curr->body); // Use the information about local usages. std::vector newToOld(num); for (size_t i = 0; i < num; i++) { newToOld[i] = i; } // sort, keeping params in front (where they will not be moved) sort( newToOld.begin(), newToOld.end(), [this, curr](Index a, Index b) -> bool { if (curr->isParam(a) && !curr->isParam(b)) { return true; } if (curr->isParam(b) && !curr->isParam(a)) { return false; } if (curr->isParam(b) && curr->isParam(a)) { return a < b; } if (counts[a] == counts[b]) { if (counts[a] == 0) { return a < b; } return firstUses[a] < firstUses[b]; } return counts[a] > counts[b]; }); // sorting left params in front, perhaps slightly reordered. verify and fix. size_t numParams = curr->getParams().size(); for (size_t i = 0; i < numParams; i++) { assert(newToOld[i] < numParams); newToOld[i] = i; } // sort vars, and drop unused ones std::vector oldVars; std::swap(oldVars, curr->vars); for (size_t i = curr->getVarIndexBase(); i < newToOld.size(); i++) { Index index = newToOld[i]; if (counts[index] > 0) { curr->vars.push_back(oldVars[index - curr->getVarIndexBase()]); } else { newToOld.resize(i); break; } } counts.clear(); std::vector oldToNew; oldToNew.resize(num); for (size_t i = 0; i < newToOld.size(); i++) { if (curr->isParam(i)) { oldToNew[i] = i; } else { oldToNew[newToOld[i]] = i; } } // apply the renaming to AST nodes struct ReIndexer : public PostWalker { Function* func; std::vector& oldToNew; ReIndexer(Function* func, std::vector& oldToNew) : func(func), oldToNew(oldToNew) {} void visitLocalGet(LocalGet* curr) { curr->index = oldToNew[curr->index]; } void visitLocalSet(LocalSet* curr) { curr->index = oldToNew[curr->index]; } }; ReIndexer reIndexer(curr, oldToNew); reIndexer.walk(curr->body); // apply to the names auto oldLocalNames = curr->localNames; auto oldLocalIndices = curr->localIndices; curr->localNames.clear(); curr->localIndices.clear(); for (size_t i = 0; i < newToOld.size(); i++) { auto iter = oldLocalNames.find(newToOld[i]); if (iter != oldLocalNames.end()) { auto old = iter->second; curr->localNames[i] = old; curr->localIndices[old] = i; } } } void visitLocalGet(LocalGet* curr) { counts[curr->index]++; if (firstUses[curr->index] == Unseen) { firstUses[curr->index] = firstUseIndex++; } } void visitLocalSet(LocalSet* curr) { counts[curr->index]++; if (firstUses[curr->index] == Unseen) { firstUses[curr->index] = firstUseIndex++; } } }; Pass* createReorderLocalsPass() { return new ReorderLocals(); } } // namespace wasm binaryen-version_108/src/passes/RoundTrip.cpp000066400000000000000000000034171423707623100214710ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Write the module to binary, and load it from there. This is useful in // testing to check for the effects of roundtripping in a single wasm-opt // parameter. // #include "ir/module-utils.h" #include "pass.h" #include "wasm-binary.h" #include "wasm.h" namespace wasm { struct RoundTrip : public Pass { void run(PassRunner* runner, Module* module) override { BufferWithRandomAccess buffer; // Save features, which would not otherwise make it through a round trip if // the target features section has been stripped. We also need them in order // to tell the builder which features to build with. auto features = module->features; // Write, clear, and read the module WasmBinaryWriter(module, buffer).write(); ModuleUtils::clearModule(*module); auto input = buffer.getAsChars(); WasmBinaryBuilder parser(*module, features, input); parser.setDWARF(runner->options.debugInfo); try { parser.read(); } catch (ParseException& p) { p.dump(std::cerr); std::cerr << '\n'; Fatal() << "error in parsing wasm binary"; } } }; Pass* createRoundTripPass() { return new RoundTrip(); } } // namespace wasm binaryen-version_108/src/passes/SSAify.cpp000066400000000000000000000150321423707623100206750ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Transforms code into SSA form. That ensures each variable has a // single assignment. // // Note that "SSA form" usually means SSA + phis. This pass does not // create phis, we still emit something in our AST, which does not // have a phi instruction. What we emit when control flow joins // require more than one input to a value is multiple assignments // to the same local, with the SSA guarantee that one and only one // of those assignments will arrive at the uses of that "merge local". // TODO: consider adding a "proper" phi node to the AST, that passes // can utilize // // There is also a "no-merge" variant of this pass. That will ignore // sets leading to merges, that is, it only creates new SSA indexes // for sets whose gets have just that set, e.g. // // x = .. // f(x, x) // x = .. // g(x, x) // => // x = .. // f(x, x) // x' = .. // g(x', x') // // This "untangles" local indexes in a way that helps other passes, // while not creating copies with overlapping lifetimes that can // lead to a code size increase. In particular, the new variables // added by ssa-nomerge can be easily removed by the coalesce-locals // pass. // #include #include "ir/find_all.h" #include "ir/literal-utils.h" #include "ir/local-graph.h" #include "ir/type-updating.h" #include "pass.h" #include "support/permutations.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { // A set we know is impossible / not in the ast static LocalSet IMPOSSIBLE_SET; // Tracks assignments to locals, assuming single-assignment form, i.e., // each assignment creates a new variable. struct SSAify : public Pass { bool isFunctionParallel() override { return true; } // SSAify maps each original local to a number of new ones. // FIXME DWARF updating does not handle local changes yet. bool invalidatesDWARF() override { return true; } Pass* create() override { return new SSAify(allowMerges); } SSAify(bool allowMerges) : allowMerges(allowMerges) {} bool allowMerges; Module* module; Function* func; // things we add to the function prologue std::vector functionPrepends; void runOnFunction(PassRunner* runner, Module* module_, Function* func_) override { module = module_; func = func_; LocalGraph graph(func); graph.computeSetInfluences(); graph.computeSSAIndexes(); // create new local indexes, one for each set createNewIndexes(graph); // we now know the sets for each get, and can compute get indexes and handle // phis computeGetsAndPhis(graph); // add prepends to function addPrepends(); // Handle non-nullability in new locals we added. TypeUpdating::handleNonDefaultableLocals(func, *module); } void createNewIndexes(LocalGraph& graph) { FindAll sets(func->body); for (auto* set : sets.list) { // Indexes already in SSA form do not need to be modified - there is // already just one set for that index. Otherwise, use a new index, unless // merges are disallowed. if (!graph.isSSA(set->index) && (allowMerges || !hasMerges(set, graph))) { set->index = addLocal(func->getLocalType(set->index)); } } } bool hasMerges(LocalSet* set, LocalGraph& graph) { for (auto* get : graph.setInfluences[set]) { if (graph.getSetses[get].size() > 1) { return true; } } return false; } void computeGetsAndPhis(LocalGraph& graph) { FindAll gets(func->body); for (auto* get : gets.list) { auto& sets = graph.getSetses[get]; if (sets.size() == 0) { continue; // unreachable, ignore } if (sets.size() == 1) { // easy, just one set, use its index auto* set = *sets.begin(); if (set) { get->index = set->index; } else { // no set, assign param or zero if (func->isParam(get->index)) { // leave it, it's fine } else { // zero it out (*graph.locations[get]) = LiteralUtils::makeZero(get->type, *module); } } continue; } if (!allowMerges) { continue; } // more than 1 set, need a phi: a new local written to at each of the sets auto new_ = addLocal(get->type); auto old = get->index; get->index = new_; Builder builder(*module); // write to the local in each of our sets for (auto* set : sets) { if (set) { // a set exists, just add a tee of its value auto* value = set->value; auto* tee = builder.makeLocalTee(new_, value, get->type); set->value = tee; // the value may have been something we tracked the location // of. if so, update that, since we moved it into the tee if (graph.locations.count(value) > 0) { assert(graph.locations[value] == &set->value); graph.locations[value] = &tee->value; } } else { // this is a param or the zero init value. if (func->isParam(old)) { // we add a set with the proper // param value at the beginning of the function auto* set = builder.makeLocalSet( new_, builder.makeLocalGet(old, func->getLocalType(old))); functionPrepends.push_back(set); } else { // this is a zero init, so we don't need to do anything actually } } } } } Index addLocal(Type type) { return Builder::addVar(func, type); } void addPrepends() { if (functionPrepends.size() > 0) { Builder builder(*module); auto* block = builder.makeBlock(); for (auto* pre : functionPrepends) { block->list.push_back(pre); } block->list.push_back(func->body); block->finalize(func->body->type); func->body = block; } } }; Pass* createSSAifyPass() { return new SSAify(true); } Pass* createSSAifyNoMergePass() { return new SSAify(false); } } // namespace wasm binaryen-version_108/src/passes/SafeHeap.cpp000066400000000000000000000326261423707623100212230ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Instruments code to check for incorrect heap access. This checks // for dereferencing 0 (null pointer access), reading past the valid // top of sbrk()-addressible memory, and incorrect alignment notation. // #include "asmjs/shared-constants.h" #include "ir/bits.h" #include "ir/find_all.h" #include "ir/import-utils.h" #include "ir/load-utils.h" #include "pass.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { static const Name GET_SBRK_PTR("emscripten_get_sbrk_ptr"); static const Name SBRK("sbrk"); static const Name SEGFAULT_IMPORT("segfault"); static const Name ALIGNFAULT_IMPORT("alignfault"); static Name getLoadName(Load* curr) { std::string ret = "SAFE_HEAP_LOAD_"; ret += curr->type.toString(); ret += "_" + std::to_string(curr->bytes) + "_"; if (LoadUtils::isSignRelevant(curr) && !curr->signed_) { ret += "U_"; } if (curr->isAtomic) { ret += "A"; } else { ret += std::to_string(curr->align); } return ret; } static Name getStoreName(Store* curr) { std::string ret = "SAFE_HEAP_STORE_"; ret += curr->valueType.toString(); ret += "_" + std::to_string(curr->bytes) + "_"; if (curr->isAtomic) { ret += "A"; } else { ret += std::to_string(curr->align); } return ret; } struct AccessInstrumenter : public WalkerPass> { // A set of function that we should ignore (not instrument). std::set ignoreFunctions; bool isFunctionParallel() override { return true; } AccessInstrumenter* create() override { return new AccessInstrumenter(ignoreFunctions); } AccessInstrumenter(std::set ignoreFunctions) : ignoreFunctions(ignoreFunctions) {} void visitLoad(Load* curr) { if (ignoreFunctions.count(getFunction()->name) != 0 || curr->type == Type::unreachable) { return; } Builder builder(*getModule()); replaceCurrent( builder.makeCall(getLoadName(curr), {curr->ptr, builder.makeConstPtr(curr->offset.addr)}, curr->type)); } void visitStore(Store* curr) { if (ignoreFunctions.count(getFunction()->name) != 0 || curr->type == Type::unreachable) { return; } Builder builder(*getModule()); replaceCurrent(builder.makeCall( getStoreName(curr), {curr->ptr, builder.makeConstPtr(curr->offset.addr), curr->value}, Type::none)); } }; static std::set findCalledFunctions(Module* module, Name startFunc) { std::set called; std::vector toVisit; auto addFunction = [&](Name name) { if (called.insert(name).second) { toVisit.push_back(name); } }; if (startFunc.is()) { addFunction(startFunc); while (!toVisit.empty()) { auto next = toVisit.back(); toVisit.pop_back(); auto* func = module->getFunction(next); for (auto* call : FindAll(func->body).list) { addFunction(call->target); } } } return called; } struct SafeHeap : public Pass { PassOptions options; void run(PassRunner* runner, Module* module) override { options = runner->options; // add imports addImports(module); // instrument loads and stores // We avoid instrumenting the module start function of any function that it // directly calls. This is because in some cases the linker generates // `__wasm_init_memory` (either as the start function or a function directly // called from it) and this function is used in shared memory builds to load // the passive memory segments, which in turn means that value of sbrk() is // not available until after it has run. std::set ignoreFunctions = findCalledFunctions(module, module->start); ignoreFunctions.insert(getSbrkPtr); AccessInstrumenter(ignoreFunctions).run(runner, module); // add helper checking funcs and imports addGlobals(module, module->features); } Name getSbrkPtr, dynamicTopPtr, sbrk, segfault, alignfault; void addImports(Module* module) { ImportInfo info(*module); auto indexType = module->memory.indexType; if (auto* existing = info.getImportedFunction(ENV, GET_SBRK_PTR)) { getSbrkPtr = existing->name; } else if (auto* existing = module->getExportOrNull(GET_SBRK_PTR)) { getSbrkPtr = existing->value; } else if (auto* existing = info.getImportedFunction(ENV, SBRK)) { sbrk = existing->name; } else { auto import = Builder::makeFunction( GET_SBRK_PTR, Signature(Type::none, indexType), {}); getSbrkPtr = GET_SBRK_PTR; import->module = ENV; import->base = GET_SBRK_PTR; module->addFunction(std::move(import)); } if (auto* existing = info.getImportedFunction(ENV, SEGFAULT_IMPORT)) { segfault = existing->name; } else { auto import = Builder::makeFunction( SEGFAULT_IMPORT, Signature(Type::none, Type::none), {}); segfault = SEGFAULT_IMPORT; import->module = ENV; import->base = SEGFAULT_IMPORT; module->addFunction(std::move(import)); } if (auto* existing = info.getImportedFunction(ENV, ALIGNFAULT_IMPORT)) { alignfault = existing->name; } else { auto import = Builder::makeFunction( ALIGNFAULT_IMPORT, Signature(Type::none, Type::none), {}); alignfault = ALIGNFAULT_IMPORT; import->module = ENV; import->base = ALIGNFAULT_IMPORT; module->addFunction(std::move(import)); } } bool isPossibleAtomicOperation(Index align, Index bytes, bool shared, Type type) { return align == bytes && shared && type.isInteger(); } void addGlobals(Module* module, FeatureSet features) { // load funcs Load load; for (Type type : {Type::i32, Type::i64, Type::f32, Type::f64, Type::v128}) { if (type == Type::v128 && !features.hasSIMD()) { continue; } load.type = type; for (Index bytes : {1, 2, 4, 8, 16}) { load.bytes = bytes; if (bytes > type.getByteSize() || (type == Type::f32 && bytes != 4) || (type == Type::f64 && bytes != 8) || (type == Type::v128 && bytes != 16)) { continue; } for (auto signed_ : {true, false}) { load.signed_ = signed_; if (type.isFloat() && signed_) { continue; } for (Index align : {1, 2, 4, 8, 16}) { load.align = align; if (align > bytes) { continue; } for (auto isAtomic : {true, false}) { load.isAtomic = isAtomic; if (isAtomic && !isPossibleAtomicOperation( align, bytes, module->memory.shared, type)) { continue; } addLoadFunc(load, module); } } } } } // store funcs Store store; for (Type valueType : {Type::i32, Type::i64, Type::f32, Type::f64, Type::v128}) { if (valueType == Type::v128 && !features.hasSIMD()) { continue; } store.valueType = valueType; store.type = Type::none; for (Index bytes : {1, 2, 4, 8, 16}) { store.bytes = bytes; if (bytes > valueType.getByteSize() || (valueType == Type::f32 && bytes != 4) || (valueType == Type::f64 && bytes != 8) || (valueType == Type::v128 && bytes != 16)) { continue; } for (Index align : {1, 2, 4, 8, 16}) { store.align = align; if (align > bytes) { continue; } for (auto isAtomic : {true, false}) { store.isAtomic = isAtomic; if (isAtomic && !isPossibleAtomicOperation( align, bytes, module->memory.shared, valueType)) { continue; } addStoreFunc(store, module); } } } } } // creates a function for a particular style of load void addLoadFunc(Load style, Module* module) { auto name = getLoadName(&style); if (module->getFunctionOrNull(name)) { return; } // pointer, offset auto indexType = module->memory.indexType; auto funcSig = Signature({indexType, indexType}, style.type); auto func = Builder::makeFunction(name, funcSig, {indexType}); Builder builder(*module); auto* block = builder.makeBlock(); block->list.push_back(builder.makeLocalSet( 2, builder.makeBinary(module->memory.is64() ? AddInt64 : AddInt32, builder.makeLocalGet(0, indexType), builder.makeLocalGet(1, indexType)))); // check for reading past valid memory: if pointer + offset + bytes block->list.push_back( makeBoundsCheck(style.type, builder, 2, style.bytes, module)); // check proper alignment if (style.align > 1) { block->list.push_back(makeAlignCheck(style.align, builder, 2, module)); } // do the load auto* load = module->allocator.alloc(); *load = style; // basically the same as the template we are given! load->ptr = builder.makeLocalGet(2, indexType); Expression* last = load; if (load->isAtomic && load->signed_) { // atomic loads cannot be signed, manually sign it last = Bits::makeSignExt(load, load->bytes, *module); load->signed_ = false; } block->list.push_back(last); block->finalize(style.type); func->body = block; module->addFunction(std::move(func)); } // creates a function for a particular type of store void addStoreFunc(Store style, Module* module) { auto name = getStoreName(&style); if (module->getFunctionOrNull(name)) { return; } auto indexType = module->memory.indexType; // pointer, offset, value auto funcSig = Signature({indexType, indexType, style.valueType}, Type::none); auto func = Builder::makeFunction(name, funcSig, {indexType}); Builder builder(*module); auto* block = builder.makeBlock(); block->list.push_back(builder.makeLocalSet( 3, builder.makeBinary(module->memory.is64() ? AddInt64 : AddInt32, builder.makeLocalGet(0, indexType), builder.makeLocalGet(1, indexType)))); // check for reading past valid memory: if pointer + offset + bytes block->list.push_back( makeBoundsCheck(style.valueType, builder, 3, style.bytes, module)); // check proper alignment if (style.align > 1) { block->list.push_back(makeAlignCheck(style.align, builder, 3, module)); } // do the store auto* store = module->allocator.alloc(); *store = style; // basically the same as the template we are given! store->ptr = builder.makeLocalGet(3, indexType); store->value = builder.makeLocalGet(2, style.valueType); block->list.push_back(store); block->finalize(Type::none); func->body = block; module->addFunction(std::move(func)); } Expression* makeAlignCheck(Address align, Builder& builder, Index local, Module* module) { auto indexType = module->memory.indexType; Expression* ptrBits = builder.makeLocalGet(local, indexType); if (module->memory.is64()) { ptrBits = builder.makeUnary(WrapInt64, ptrBits); } return builder.makeIf( builder.makeBinary( AndInt32, ptrBits, builder.makeConst(int32_t(align - 1))), builder.makeCall(alignfault, {}, Type::none)); } Expression* makeBoundsCheck( Type type, Builder& builder, Index local, Index bytes, Module* module) { auto indexType = module->memory.indexType; auto upperOp = module->memory.is64() ? options.lowMemoryUnused ? LtUInt64 : EqInt64 : options.lowMemoryUnused ? LtUInt32 : EqInt32; auto upperBound = options.lowMemoryUnused ? PassOptions::LowMemoryBound : 0; Expression* brkLocation; if (sbrk.is()) { brkLocation = builder.makeCall(sbrk, {builder.makeConstPtr(0)}, indexType); } else { Expression* sbrkPtr; if (dynamicTopPtr.is()) { sbrkPtr = builder.makeGlobalGet(dynamicTopPtr, indexType); } else { sbrkPtr = builder.makeCall(getSbrkPtr, {}, indexType); } auto size = module->memory.is64() ? 8 : 4; brkLocation = builder.makeLoad(size, false, 0, size, sbrkPtr, indexType); } auto gtuOp = module->memory.is64() ? GtUInt64 : GtUInt32; auto addOp = module->memory.is64() ? AddInt64 : AddInt32; return builder.makeIf( builder.makeBinary( OrInt32, builder.makeBinary(upperOp, builder.makeLocalGet(local, indexType), builder.makeConstPtr(upperBound)), builder.makeBinary( gtuOp, builder.makeBinary(addOp, builder.makeLocalGet(local, indexType), builder.makeConstPtr(bytes)), brkLocation)), builder.makeCall(segfault, {}, Type::none)); } }; Pass* createSafeHeapPass() { return new SafeHeap(); } } // namespace wasm binaryen-version_108/src/passes/SetGlobals.cpp000066400000000000000000000040001423707623100215670ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Assigns values to specified globals. This can be useful to perform a minor // customization of an existing wasm file. #include "pass.h" #include "support/string.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { struct SetGlobals : public Pass { void run(PassRunner* runner, Module* module) override { Name input = runner->options.getArgument( "set-globals", "SetGlobals usage: wasm-opt --pass-arg=set-globals@x=y,z=w"); // The input is a set of X=Y pairs separated by commas. String::Split pairs(input.str, ","); for (auto& pair : pairs) { String::Split nameAndValue(pair, "="); auto name = nameAndValue[0]; auto value = nameAndValue[1]; auto* glob = module->getGlobalOrNull(name); if (!glob) { std::cerr << "warning: could not find global: " << name << '\n'; } // Parse the input. Literal lit; if (glob->type == Type::i32) { lit = Literal(int32_t(stoi(value))); } else if (glob->type == Type::i64) { lit = Literal(int64_t(stoll(value))); } else { Fatal() << "global's type is not supported: " << name; } // The global now has a value, and is not imported. glob->init = Builder(*module).makeConst(lit); glob->module = glob->base = Name(); } } }; // declare pass Pass* createSetGlobalsPass() { return new SetGlobals(); } } // namespace wasm binaryen-version_108/src/passes/SignaturePruning.cpp000066400000000000000000000202121423707623100230370ustar00rootroot00000000000000/* * Copyright 2022 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Remove params from signature/function types where possible. // // This differs from DeadArgumentElimination in that DAE will look at each // function by itself, and cannot handle indirectly-called functions. This pass // looks at each heap type at a time, and if all functions with a heap type do // not use a particular param, will remove the param. // // Like in DAE, as part of pruning parameters this will find parameters that are // always sent the same constant value. We can then apply that value in the // function, making the parameter's value unused, which means we can prune it. // #include "ir/find_all.h" #include "ir/lubs.h" #include "ir/module-utils.h" #include "ir/type-updating.h" #include "param-utils.h" #include "pass.h" #include "support/sorted_vector.h" #include "wasm-type.h" #include "wasm.h" namespace wasm { namespace { struct SignaturePruning : public Pass { // Maps each heap type to the possible pruned heap type. We will fill this // during analysis and then use it while doing an update of the types. If a // type has no improvement that we can find, it will not appear in this map. std::unordered_map newSignatures; void run(PassRunner* runner, Module* module) override { if (getTypeSystem() != TypeSystem::Nominal) { Fatal() << "SignaturePruning requires nominal typing"; } if (!module->tables.empty()) { // When there are tables we must also take their types into account, which // would require us to take call_indirect, element segments, etc. into // account. For now, do nothing if there are tables. // TODO return; } // First, find all the information we need. Start by collecting inside each // function in parallel. struct Info { std::vector calls; std::vector callRefs; std::unordered_set usedParams; // If we set this to false, we may not attempt to perform any optimization // whatsoever on this data. bool optimizable = true; }; ModuleUtils::ParallelFunctionAnalysis analysis( *module, [&](Function* func, Info& info) { if (func->imported()) { // Imports cannot be modified. info.optimizable = false; return; } info.calls = std::move(FindAll(func->body).list); info.callRefs = std::move(FindAll(func->body).list); info.usedParams = ParamUtils::getUsedParams(func); }); // A map of types to all the information combined over all the functions // with that type. std::unordered_map allInfo; // Map heap types to all functions with that type. std::unordered_map> sigFuncs; // Combine all the information we gathered into that map. for (auto& [func, info] : analysis.map) { // For direct calls, add each call to the type of the function being // called. for (auto* call : info.calls) { allInfo[module->getFunction(call->target)->type].calls.push_back(call); } // For indirect calls, add each call_ref to the type the call_ref uses. for (auto* callRef : info.callRefs) { auto calledType = callRef->target->type; if (calledType != Type::unreachable) { allInfo[calledType.getHeapType()].callRefs.push_back(callRef); } } // A parameter used in this function is used in the heap type - just one // function is enough to prevent the parameter from being removed. auto& allUsedParams = allInfo[func->type].usedParams; for (auto index : info.usedParams) { allUsedParams.insert(index); } if (!info.optimizable) { allInfo[func->type].optimizable = false; } sigFuncs[func->type].push_back(func); } // Exported functions cannot be modified. for (auto& exp : module->exports) { if (exp->kind == ExternalKind::Function) { auto* func = module->getFunction(exp->value); allInfo[func->type].optimizable = false; } } // Find parameters to prune. for (auto& [type, funcs] : sigFuncs) { auto sig = type.getSignature(); auto& info = allInfo[type]; auto& usedParams = info.usedParams; auto numParams = sig.params.size(); if (!info.optimizable) { continue; } // A type with a signature supertype cannot be optimized: we'd need to // remove the field from the super as well, which atm we don't attempt to // do. TODO if (auto super = type.getSuperType()) { if (super->isSignature()) { continue; } } // Apply constant indexes: find the parameters that are always sent a // constant value, and apply that value in the function. That then makes // the parameter unused (since the applied value makes us ignore the value // arriving in the parameter). auto optimizedIndexes = ParamUtils::applyConstantValues( funcs, info.calls, info.callRefs, module); for (auto i : optimizedIndexes) { usedParams.erase(i); } if (usedParams.size() == numParams) { // All parameters are used, give up on this one. continue; } // We found possible work! Find the specific params that are unused & try // to prune them. SortedVector unusedParams; for (Index i = 0; i < numParams; i++) { if (usedParams.count(i) == 0) { unusedParams.insert(i); } } auto oldParams = sig.params; auto removedIndexes = ParamUtils::removeParameters( funcs, unusedParams, info.calls, info.callRefs, module, runner); if (removedIndexes.empty()) { continue; } // Success! Update the types. std::vector newParams; for (Index i = 0; i < numParams; i++) { if (!removedIndexes.has(i)) { newParams.push_back(oldParams[i]); } } // Create a new signature. When the TypeRewriter operates below it will // modify the existing heap type in place to change its signature to this // one (which preserves identity, that is, even if after pruning the new // signature is structurally identical to another one, it will remain // nominally different from those). newSignatures[type] = Signature(Type(newParams), sig.results); // removeParameters() updates the type as it goes, but in this pass we // need the type to match the other locations, nominally. That is, we need // all the functions of a particular type to still have the same type // after this operation, and that must be the exact same type at the // relevant call_refs and so forth. The TypeRewriter below will do the // right thing as it rewrites everything all at once, so we do not want // the type to be modified by removeParameters(), and so we undo the type // it made. // // Note that we cannot just ask removeParameters() to not update the type, // as it adds a new local there, whose index depends on the type (which // contains the # of parameters, and that determine where non-parameter // local indexes begin). Rather than have it update the type and then undo // that, which would add more complexity in that method, undo the change // here. for (auto* func : funcs) { func->type = type; } } // Rewrite the types. GlobalTypeRewriter::updateSignatures(newSignatures, *module); } }; } // anonymous namespace Pass* createSignaturePruningPass() { return new SignaturePruning(); } } // namespace wasm binaryen-version_108/src/passes/SignatureRefining.cpp000066400000000000000000000217431423707623100231700ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Apply more specific subtypes to signature/function types where possible. // // This differs from DeadArgumentElimination's refineArgumentTypes() etc. in // that DAE will modify the type of a function. It can only do that if the // function's type is not observable, which means it is not taken by reference. // On the other hand, this pass will modify the signature types themselves, // which means it can optimize functions whose reference is taken, and it does // so while considering all users of the type (across all functions sharing that // type, and all call_refs using it). // #include "ir/export-utils.h" #include "ir/find_all.h" #include "ir/lubs.h" #include "ir/module-utils.h" #include "ir/type-updating.h" #include "ir/utils.h" #include "pass.h" #include "wasm-type.h" #include "wasm.h" namespace wasm { namespace { struct SignatureRefining : public Pass { // Maps each heap type to the possible refinement of the types in their // signatures. We will fill this during analysis and then use it while doing // an update of the types. If a type has no improvement that we can find, it // will not appear in this map. std::unordered_map newSignatures; void run(PassRunner* runner, Module* module) override { if (getTypeSystem() != TypeSystem::Nominal) { Fatal() << "SignatureRefining requires nominal typing"; } if (!module->tables.empty()) { // When there are tables we must also take their types into account, which // would require us to take call_indirect, element segments, etc. into // account. For now, do nothing if there are tables. // TODO return; } // First, find all the information we need. Start by collecting inside each // function in parallel. struct Info { // The calls and call_refs. std::vector calls; std::vector callRefs; // A possibly improved LUB for the results. LUBFinder resultsLUB; // Normally we can optimize, but some cases prevent a particular signature // type from being changed at all, see below. bool canModify = true; }; // This analysis also modifies the wasm as it goes, as the getResultsLUB() // operation has side effects (see comment on header declaration). ModuleUtils::ParallelFunctionAnalysis analysis( *module, [&](Function* func, Info& info) { if (func->imported()) { return; } info.calls = std::move(FindAll(func->body).list); info.callRefs = std::move(FindAll(func->body).list); info.resultsLUB = LUB::getResultsLUB(func, *module); }); // A map of types to all the information combined over all the functions // with that type. std::unordered_map allInfo; // Combine all the information we gathered into that map. for (auto& [func, info] : analysis.map) { // For direct calls, add each call to the type of the function being // called. for (auto* call : info.calls) { allInfo[module->getFunction(call->target)->type].calls.push_back(call); } // For indirect calls, add each call_ref to the type the call_ref uses. for (auto* callRef : info.callRefs) { auto calledType = callRef->target->type; if (calledType != Type::unreachable) { allInfo[calledType.getHeapType()].callRefs.push_back(callRef); } } // Add the function's return LUB to the one for the heap type of that // function. allInfo[func->type].resultsLUB.combine(info.resultsLUB); } // We cannot alter the signature of an exported function, as the outside may // notice us doing so. For example, if we turn a parameter from nullable // into non-nullable then callers sending a null will break. Put another // way, we need to see all callers to refine types, and for exports we // cannot do so. // TODO If a function type is passed we should also mark the types used // there, etc., recursively. For now this code just handles the top- // level type, which is enough to keep the fuzzer from erroring. More // generally, we need to decide about adding a "closed-world" flag of // some kind. for (auto* exportedFunc : ExportUtils::getExportedFunctions(*module)) { allInfo[exportedFunc->type].canModify = false; } bool refinedResults = false; // Compute optimal LUBs. std::unordered_set seen; for (auto& func : module->functions) { auto type = func->type; if (!seen.insert(type).second) { continue; } auto& info = allInfo[type]; if (!info.canModify) { continue; } auto sig = type.getSignature(); auto numParams = sig.params.size(); std::vector paramLUBs(numParams); auto updateLUBs = [&](const ExpressionList& operands) { for (Index i = 0; i < numParams; i++) { paramLUBs[i].noteUpdatableExpression(operands[i]); } }; for (auto* call : info.calls) { updateLUBs(call->operands); } for (auto* callRef : info.callRefs) { updateLUBs(callRef->operands); } // Find the final LUBs, and see if we found an improvement. std::vector newParamsTypes; for (auto& lub : paramLUBs) { if (!lub.noted()) { break; } newParamsTypes.push_back(lub.getBestPossible()); } Type newParams; if (newParamsTypes.size() < numParams) { // We did not have type information to calculate a LUB (no calls, or // some param is always unreachable), so there is nothing we can improve // here. Other passes might remove the type entirely. newParams = func->getParams(); } else { newParams = Type(newParamsTypes); } auto& resultsLUB = info.resultsLUB; Type newResults; if (!resultsLUB.noted()) { // We did not have type information to calculate a LUB (no returned // value, or it can return a value but traps instead etc.). newResults = func->getResults(); } else { newResults = resultsLUB.getBestPossible(); } if (newParams == func->getParams() && newResults == func->getResults()) { continue; } // We found an improvement! newSignatures[type] = Signature(newParams, newResults); // Update nulls as necessary, now that we are changing things. if (newParams != func->getParams()) { for (auto& lub : paramLUBs) { lub.updateNulls(); } } if (newResults != func->getResults()) { resultsLUB.updateNulls(); refinedResults = true; // Update the types of calls using the signature. for (auto* call : info.calls) { if (call->type != Type::unreachable) { call->type = newResults; } } for (auto* callRef : info.callRefs) { if (callRef->type != Type::unreachable) { callRef->type = newResults; } } } } if (newSignatures.empty()) { // We found nothing to optimize. return; } // Update function contents for their new parameter types. struct CodeUpdater : public WalkerPass> { bool isFunctionParallel() override { return true; } SignatureRefining& parent; Module& wasm; CodeUpdater(SignatureRefining& parent, Module& wasm) : parent(parent), wasm(wasm) {} CodeUpdater* create() override { return new CodeUpdater(parent, wasm); } void doWalkFunction(Function* func) { auto iter = parent.newSignatures.find(func->type); if (iter != parent.newSignatures.end()) { std::vector newParamsTypes; for (auto param : iter->second.params) { newParamsTypes.push_back(param); } TypeUpdating::updateParamTypes(func, newParamsTypes, wasm); } } }; CodeUpdater(*this, *module).run(runner, module); // Rewrite the types. GlobalTypeRewriter::updateSignatures(newSignatures, *module); if (refinedResults) { // After return types change we need to propagate. // TODO: we could do this only in relevant functions perhaps ReFinalize().run(runner, module); } } }; } // anonymous namespace Pass* createSignatureRefiningPass() { return new SignatureRefining(); } } // namespace wasm binaryen-version_108/src/passes/SimplifyGlobals.cpp000066400000000000000000000543261423707623100226500ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Simplify and optimize globals and their use. // // * Turns never-written and unwritable (not imported or exported) // globals immutable. // * If an immutable global is a copy of another, use the earlier one, // to allow removal of the copies later. // * Apply the constant values of immutable globals. // * Apply the constant values of previous global.sets, in a linear // execution trace. // * Remove writes to globals that are never read from. // * Remove writes to globals that are always assigned the same value. // * Remove writes to globals that are only read from in order to write (see // below, "readOnlyToWrite"). // // Some globals may not have uses after these changes, which we leave // to other passes to optimize. // // This pass has a "optimize" variant (similar to inlining and DAE) // that also runs general function optimizations where we managed to replace // a constant value. That is helpful as such a replacement often opens up // further optimization opportunities. // #include #include "ir/effects.h" #include "ir/linear-execution.h" #include "ir/properties.h" #include "ir/utils.h" #include "pass.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { namespace { struct GlobalInfo { // Whether the global is imported and exported. bool imported = false; bool exported = false; // How many times the global is written and read. std::atomic written{0}; std::atomic read{0}; // Whether the global is written a value different from its initial value. std::atomic nonInitWritten{false}; // How many times the global is "read, but only to write", that is, is used in // something like this pattern: // // if (global == X) { global = Y } // // The if's condition only uses |global| in order to decide to write to that // same global, so it is "read, but only to write." If all we have are such // reads only to write then the global is really not necessary, even though // there are both reads and writes of it, and regardless of what the written // values are etc. // // This pattern can show up in global initialization code, where in the block // alongside "global = Y" there was some useful code, but the optimizer // managed to remove it. For example, // // if (global == 0) { global = 1; sideEffect(); } // // If the global's initial value is the default 0, and there are no other uses // of this global, then this code will run sideEffect() the very first time we // reach here. We therefore need to keep this global and its reads and writes. // However, if sideEffect() were removed, then we read the global only to // write it - and nothing else - and so we can optimize away that global // entirely. std::atomic readOnlyToWrite{0}; }; using GlobalInfoMap = std::map; struct GlobalUseScanner : public WalkerPass> { bool isFunctionParallel() override { return true; } GlobalUseScanner(GlobalInfoMap* infos) : infos(infos) {} GlobalUseScanner* create() override { return new GlobalUseScanner(infos); } void visitGlobalSet(GlobalSet* curr) { (*infos)[curr->name].written++; // Check if there is a write of a value that may differ from the initial // one. If there is anything but identical constants in both the initial // value and the written value then we must assume that. auto* global = getModule()->getGlobal(curr->name); if (global->imported() || !Properties::isConstantExpression(curr->value) || !Properties::isConstantExpression(global->init) || Properties::getLiterals(curr->value) != Properties::getLiterals(global->init)) { (*infos)[curr->name].nonInitWritten = true; } } void visitGlobalGet(GlobalGet* curr) { (*infos)[curr->name].read++; } void visitIf(If* curr) { // We are looking for // // if (global == X) { global = Y } // // Ignore an if-else, which cannot be that. if (curr->ifFalse) { return; } auto global = readsGlobalOnlyToWriteIt(curr->condition, curr->ifTrue); if (global.is()) { // This is exactly the pattern we sought! (*infos)[global].readOnlyToWrite++; } } // Given a condition and some code that is executed based on the condition, // check if the condition reads from some global in order to make the decision // whether to run that code, and that code only writes to that global, which // means the global is "read, but only to be written." // // The condition may also do other things than read from that global - it may // compare it to a value, or negate it, or anything else, so long as the value // of the global is only used to decide to run the code, like this: // // if (global % 17 < 4) { global = 1 } // // What we want to disallow is using the global to actually do something that // is noticeeable *aside* from writing the global, like this: // // if (global ? foo() : bar()) { .. } // // Here ? : is another nested if, and we end up running different code based // on global, which is noticeable: the global is *not* only read in order to // write that global, but also for other reasons. // // Returns the global name if things like up, or a null name otherwise. Name readsGlobalOnlyToWriteIt(Expression* condition, Expression* code) { // See if writing a global is the only effect the code has. (Note that we // don't need to care about the case where the code has no effects at // all - other passes would handle that trivial situation.) EffectAnalyzer codeEffects(getPassOptions(), *getModule(), code); if (codeEffects.globalsWritten.size() != 1) { return Name(); } auto writtenGlobal = *codeEffects.globalsWritten.begin(); codeEffects.globalsWritten.clear(); if (codeEffects.hasAnything()) { return Name(); } // See if we read that global in the condition expression. EffectAnalyzer conditionEffects(getPassOptions(), *getModule(), condition); if (!conditionEffects.mutableGlobalsRead.count(writtenGlobal)) { return Name(); } // If the condition has no other (non-removable) effects other than reading // that global then we have found what we looked for. if (!conditionEffects.hasUnremovableSideEffects()) { return writtenGlobal; } // There are unremovable side effects of some form. However, they may not // be related to the reading of the global, that is, the global's value may // not flow to anything that uses it in a dangerous way. It *would* be // dangerous for the global's value to flow into a nested if condition, as // mentioned in the comment earlier, but if it flows into an if arm for // example then that is safe, so long as the final place it flows out to is // the condition. // // To check this, find the get of the global in the condition, and look up // through its parents to see how the global's value is used. struct FlowScanner : public ExpressionStackWalker> { GlobalUseScanner& globalUseScanner; Name writtenGlobal; PassOptions& passOptions; Module& wasm; FlowScanner(GlobalUseScanner& globalUseScanner, Name writtenGlobal, PassOptions& passOptions, Module& wasm) : globalUseScanner(globalUseScanner), writtenGlobal(writtenGlobal), passOptions(passOptions), wasm(wasm) {} bool ok = true; void visitExpression(Expression* curr) { if (auto* get = curr->dynCast()) { if (get->name == writtenGlobal) { // We found the get of the global. Check where its value flows to, // and how it is used there. assert(expressionStack.back() == get); for (int i = int(expressionStack.size()) - 2; i >= 0; i--) { // Consider one pair of parent->child, and check if the parent // causes any problems when the child's value reaches it. auto* parent = expressionStack[i]; auto* child = expressionStack[i + 1]; EffectAnalyzer parentEffects(passOptions, wasm); parentEffects.visit(parent); if (parentEffects.hasUnremovableSideEffects()) { // The parent has some side effect, and the child's value may // be used to determine its manner, so this is dangerous. ok = false; break; } if (auto* iff = parent->dynCast()) { if (iff->condition == child) { // The child is used to decide what code to run, which is // dangerous: check what effects it causes. If it is a nested // appearance of the pattern, that is one case that we know is // actually safe. if (!iff->ifFalse && globalUseScanner.readsGlobalOnlyToWriteIt( iff->condition, iff->ifTrue) == writtenGlobal) { // This is safe, and we can stop here: the value does not // flow any further. break; } // Otherwise, we found a problem, and can stop. ok = false; break; } } } } } } }; FlowScanner scanner(*this, writtenGlobal, getPassOptions(), *getModule()); scanner.walk(condition); return scanner.ok ? writtenGlobal : Name(); } void visitFunction(Function* curr) { // We are looking for a function body like this: // // if (global == X) return; // global = Y; // // And nothing else at all. Note that this does not overlap with the if // pattern above (the assignment is in the if body) so we will never have // overlapping matchings (which would each count as 1, leading to a // miscount). if (curr->body->type != Type::none) { return; } auto* block = curr->body->dynCast(); if (!block) { return; } auto& list = block->list; if (list.size() != 2) { return; } auto* iff = list[0]->dynCast(); if (!iff || iff->ifFalse || !iff->ifTrue->is()) { return; } auto global = readsGlobalOnlyToWriteIt(iff->condition, list[1]); if (global.is()) { // This is exactly the pattern we sought! (*infos)[global].readOnlyToWrite++; } } private: GlobalInfoMap* infos; }; using NameNameMap = std::map; using NameSet = std::set; struct GlobalUseModifier : public WalkerPass> { bool isFunctionParallel() override { return true; } GlobalUseModifier(NameNameMap* copiedParentMap) : copiedParentMap(copiedParentMap) {} GlobalUseModifier* create() override { return new GlobalUseModifier(copiedParentMap); } void visitGlobalGet(GlobalGet* curr) { auto iter = copiedParentMap->find(curr->name); if (iter != copiedParentMap->end()) { curr->name = iter->second; } } private: NameNameMap* copiedParentMap; }; struct ConstantGlobalApplier : public WalkerPass< LinearExecutionWalker>> { bool isFunctionParallel() override { return true; } ConstantGlobalApplier(NameSet* constantGlobals, bool optimize) : constantGlobals(constantGlobals), optimize(optimize) {} ConstantGlobalApplier* create() override { return new ConstantGlobalApplier(constantGlobals, optimize); } void visitExpression(Expression* curr) { if (auto* set = curr->dynCast()) { if (Properties::isConstantExpression(set->value)) { currConstantGlobals[set->name] = getLiteralsFromConstExpression(set->value); } else { currConstantGlobals.erase(set->name); } return; } else if (auto* get = curr->dynCast()) { // Check if the global is known to be constant all the time. if (constantGlobals->count(get->name)) { auto* global = getModule()->getGlobal(get->name); assert(Properties::isConstantExpression(global->init)); replaceCurrent(ExpressionManipulator::copy(global->init, *getModule())); replaced = true; return; } // Check if the global has a known value in this linear trace. auto iter = currConstantGlobals.find(get->name); if (iter != currConstantGlobals.end()) { Builder builder(*getModule()); replaceCurrent(builder.makeConstantExpression(iter->second)); replaced = true; } return; } // Otherwise, invalidate if we need to. EffectAnalyzer effects(getPassOptions(), *getModule()); effects.visit(curr); assert(effects.globalsWritten.empty()); // handled above if (effects.calls) { currConstantGlobals.clear(); } } static void doNoteNonLinear(ConstantGlobalApplier* self, Expression** currp) { self->currConstantGlobals.clear(); } void visitFunction(Function* curr) { if (replaced && optimize) { PassRunner runner(getModule(), getPassRunner()->options); runner.setIsNested(true); runner.addDefaultFunctionOptimizationPasses(); runner.runOnFunction(curr); } } private: NameSet* constantGlobals; bool optimize; bool replaced = false; // The globals currently constant in the linear trace. std::map currConstantGlobals; }; struct GlobalSetRemover : public WalkerPass> { GlobalSetRemover(const NameSet* toRemove, bool optimize) : toRemove(toRemove), optimize(optimize) {} bool isFunctionParallel() override { return true; } GlobalSetRemover* create() override { return new GlobalSetRemover(toRemove, optimize); } void visitGlobalSet(GlobalSet* curr) { if (toRemove->count(curr->name) != 0) { replaceCurrent(Builder(*getModule()).makeDrop(curr->value)); removed = true; } } void visitFunction(Function* curr) { if (removed && optimize) { PassRunner runner(getModule(), getPassRunner()->options); runner.setIsNested(true); runner.addDefaultFunctionOptimizationPasses(); runner.runOnFunction(curr); } } private: const NameSet* toRemove; bool optimize; bool removed = false; }; } // anonymous namespace struct SimplifyGlobals : public Pass { PassRunner* runner; Module* module; GlobalInfoMap map; bool optimize; SimplifyGlobals(bool optimize = false) : optimize(optimize) {} void run(PassRunner* runner_, Module* module_) override { runner = runner_; module = module_; while (iteration()) { } } bool iteration() { analyze(); // Removing unneeded writes can in some cases lead to more optimizations // that we need an entire additional iteration to perform, see below. bool more = removeUnneededWrites(); preferEarlierImports(); propagateConstantsToGlobals(); propagateConstantsToCode(); return more; } void analyze() { map.clear(); // First, find out all the relevant info. for (auto& global : module->globals) { auto& info = map[global->name]; if (global->imported()) { info.imported = true; } } for (auto& ex : module->exports) { if (ex->kind == ExternalKind::Global) { map[ex->value].exported = true; } } GlobalUseScanner(&map).run(runner, module); // We now know which are immutable in practice. for (auto& global : module->globals) { auto& info = map[global->name]; if (global->mutable_ && !info.imported && !info.exported && !info.written) { global->mutable_ = false; } } } // Removes writes from globals that will never do anything useful with the // written value anyhow. Returns whether an addition iteration is necessary. bool removeUnneededWrites() { bool more = false; // Globals that are not exports and not read from do not need their sets. // Likewise, globals that only write their initial value later also do not // need those writes. And, globals that are only read from in order to write // to themselves as well. First, find such globals. NameSet globalsNotNeedingSets; for (auto& global : module->globals) { auto& info = map[global->name]; if (!info.written) { // No writes occur here, so there is nothing for us to remove. continue; } if (info.imported || info.exported) { // If the global is observable from the outside, we can't do anythng // here. // // TODO: optimize the case of an imported but immutable global, etc. continue; } // We only ever optimize read-only-to-write if all of our reads are done // in places we identified as read-only-to-write. That is, we have // eliminated the possibility of any other uses. (Technically, each // read-to-write location might have more than one read since we did not // count them, but only verified there was one read or more; but this is // good enough as the common case has exactly one.) // // Note that there might be more writes, if there are additional writes // besides those in the read-only-to-write locations. But we can ignore // those, as whatever they write will not be read in order to do anything // of value. bool onlyReadOnlyToWrite = (info.read == info.readOnlyToWrite); // There is at least one write in each read-only-to-write location, unless // our logic is wrong somewhere. assert(info.written >= info.readOnlyToWrite); if (!info.read || !info.nonInitWritten || onlyReadOnlyToWrite) { globalsNotNeedingSets.insert(global->name); // We can now mark this global as immutable, and un-written, since we // are about to remove all the sets on it. global->mutable_ = false; info.written = 0; // Nested only-read-to-write expressions require another full iteration // to optimize, as we have: // // if (a) { // a = 1; // if (b) { // b = 1; // } // } // // The first iteration can only optimize b, as the outer if's body has // more effects than we understand. After finishing the first iteration, // b will no longer exist, removing those effects. // // TODO: In principle other situations exist as well where more // iterations help, like if we remove a set that turns something // into a read-only-to-write. if (onlyReadOnlyToWrite) { more = true; } } } // Remove all the sets on the unnecessary globals. Later optimizations can // then see that since the global has no writes, it is a constant, which // will lead to removal of gets, and after removing them, the global itself // will be removed as well. GlobalSetRemover(&globalsNotNeedingSets, optimize).run(runner, module); return more; } void preferEarlierImports() { // Optimize uses of immutable globals, prefer the earlier import when // there is a copy. NameNameMap copiedParentMap; for (auto& global : module->globals) { auto child = global->name; if (!global->mutable_ && !global->imported()) { if (auto* get = global->init->dynCast()) { auto parent = get->name; if (!module->getGlobal(get->name)->mutable_) { copiedParentMap[child] = parent; } } } } if (!copiedParentMap.empty()) { // Go all the way back. for (auto& global : module->globals) { auto child = global->name; if (copiedParentMap.count(child)) { while (copiedParentMap.count(copiedParentMap[child])) { copiedParentMap[child] = copiedParentMap[copiedParentMap[child]]; } } } // Apply to the gets. GlobalUseModifier(&copiedParentMap).run(runner, module); } } // Constant propagation part 1: even an mutable global with a constant // value can have that value propagated to another global that reads it, // since we do know the value during startup, it can't be modified until // code runs. void propagateConstantsToGlobals() { // Go over the list of globals in order, which is the order of // initialization as well, tracking their constant values. std::map constantGlobals; for (auto& global : module->globals) { if (!global->imported()) { if (Properties::isConstantExpression(global->init)) { constantGlobals[global->name] = getLiteralsFromConstExpression(global->init); } else if (auto* get = global->init->dynCast()) { auto iter = constantGlobals.find(get->name); if (iter != constantGlobals.end()) { Builder builder(*module); global->init = builder.makeConstantExpression(iter->second); } } } } } // Constant propagation part 2: apply the values of immutable globals // with constant values to to global.gets in the code. void propagateConstantsToCode() { NameSet constantGlobals; for (auto& global : module->globals) { if (!global->mutable_ && !global->imported() && Properties::isConstantExpression(global->init)) { constantGlobals.insert(global->name); } } ConstantGlobalApplier(&constantGlobals, optimize).run(runner, module); } }; Pass* createSimplifyGlobalsPass() { return new SimplifyGlobals(false); } Pass* createSimplifyGlobalsOptimizingPass() { return new SimplifyGlobals(true); } } // namespace wasm binaryen-version_108/src/passes/SimplifyLocals.cpp000066400000000000000000001107101423707623100224700ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Locals-related optimizations // // This "sinks" local.sets, pushing them to the next local.get where possible, // and removing the set if there are no gets remaining (the latter is // particularly useful in ssa mode, but not only). // // We also note where local.sets coalesce: if all breaks of a block set // a specific local, we can use a block return value for it, in effect // removing multiple local.sets and replacing them with one that the // block returns to. Further optimization rounds then have the opportunity // to remove that local.set as well. TODO: support partial traces; right // now, whenever control flow splits, we invalidate everything. // // After this pass, some locals may be completely unused. reorder-locals // can get rid of those (the operation is trivial there after it sorts by use // frequency). // // This pass has options: // // * Tee: allow teeing, i.e., sinking a local with more than one use, // and so after sinking we have a tee for the first use. // * Structure: create block and if return values, by merging the // internal local.sets into one on the outside, // that can itself then be sunk further. // // There is also an option to disallow nesting entirely, which disallows // Tee and Structure from those 2 options, and also disallows any sinking // operation that would create nesting. This keeps the IR flat while // removing redundant locals. // #include "ir/equivalent_sets.h" #include #include #include #include #include #include #include #include #include #include namespace wasm { // Main class template struct SimplifyLocals : public WalkerPass>> { bool isFunctionParallel() override { return true; } Pass* create() override { return new SimplifyLocals(); } // information for a local.set we can sink struct SinkableInfo { Expression** item; EffectAnalyzer effects; SinkableInfo(Expression** item, PassOptions& passOptions, Module& module) : item(item), effects(passOptions, module, *item) {} }; // a list of sinkables in a linear execution trace typedef std::map Sinkables; // locals in current linear execution trace, which we try to sink Sinkables sinkables; // Information about an exit from a block: the break, and the // sinkables. For the final exit from a block (falling off) // exitter is null. struct BlockBreak { Expression** brp; Sinkables sinkables; }; // a list of all sinkable traces that exit a block. the last // is falling off the end, others are branches. this is used for // block returns std::map> blockBreaks; // blocks that we can't produce a block return value for them. // (switch target, or some other reason) std::set unoptimizableBlocks; // A stack of sinkables from the current traversal state. When // execution reaches an if-else, it splits, and can then // be merged on return. std::vector ifStack; // whether we need to run an additional cycle bool anotherCycle; // whether this is the first cycle, in which we always disallow teeing bool firstCycle; // local => # of local.gets for it LocalGetCounter getCounter; static void doNoteNonLinear(SimplifyLocals* self, Expression** currp) { // Main processing. auto* curr = *currp; if (auto* br = curr->dynCast()) { if (br->value) { // value means the block already has a return value self->unoptimizableBlocks.insert(br->name); } else { self->blockBreaks[br->name].push_back( {currp, std::move(self->sinkables)}); } } else if (curr->is()) { return; // handled in visitBlock } else if (curr->is()) { assert(!curr->cast() ->ifFalse); // if-elses are handled by doNoteIf* methods } else { // Not one of the recognized instructions, so do not optimize here: mark // all the targets as unoptimizable. // TODO optimize BrOn, Switch, etc. auto targets = BranchUtils::getUniqueTargets(curr); for (auto target : targets) { self->unoptimizableBlocks.insert(target); } // TODO: we could use this info to stop gathering data on these blocks } self->sinkables.clear(); } static void doNoteIfCondition( SimplifyLocals* self, Expression** currp) { // we processed the condition of this if-else, and now control flow branches // into either the true or the false sides self->sinkables.clear(); } static void doNoteIfTrue(SimplifyLocals* self, Expression** currp) { auto* iff = (*currp)->cast(); if (iff->ifFalse) { // We processed the ifTrue side of this if-else, save it on the stack. self->ifStack.push_back(std::move(self->sinkables)); } else { // This is an if without an else. if (allowStructure) { self->optimizeIfReturn(iff, currp); } self->sinkables.clear(); } } static void doNoteIfFalse(SimplifyLocals* self, Expression** currp) { // we processed the ifFalse side of this if-else, we can now try to // mere with the ifTrue side and optimize a return value, if possible auto* iff = (*currp)->cast(); assert(iff->ifFalse); if (allowStructure) { self->optimizeIfElseReturn(iff, currp, self->ifStack.back()); } self->ifStack.pop_back(); self->sinkables.clear(); } void visitBlock(Block* curr) { bool hasBreaks = curr->name.is() && blockBreaks[curr->name].size() > 0; if (allowStructure) { optimizeBlockReturn(curr); // can modify blockBreaks } // post-block cleanups if (curr->name.is()) { if (unoptimizableBlocks.count(curr->name)) { sinkables.clear(); unoptimizableBlocks.erase(curr->name); } if (hasBreaks) { // more than one path to here, so nonlinear sinkables.clear(); blockBreaks.erase(curr->name); } } } void visitLoop(Loop* curr) { if (allowStructure) { optimizeLoopReturn(curr); } } void optimizeLocalGet(LocalGet* curr) { auto found = sinkables.find(curr->index); if (found != sinkables.end()) { auto* set = (*found->second.item) ->template cast(); // the set we may be sinking bool oneUse = firstCycle || getCounter.num[curr->index] == 1; // the set's value may be a get (i.e., the set is a copy) auto* get = set->value->template dynCast(); // if nesting is not allowed, and this might cause nesting, check if the // sink would cause such a thing if (!allowNesting) { // a get is always ok to sink if (!get) { assert(expressionStack.size() >= 2); assert(expressionStack[expressionStack.size() - 1] == curr); auto* parent = expressionStack[expressionStack.size() - 2]; bool parentIsSet = parent->template is(); // if the parent of this get is a set, we can sink into the set's // value, it would not be nested. if (!parentIsSet) { return; } } } // we can optimize here if (!allowNesting && get && !oneUse) { // if we can't nest 's a copy with multiple uses, then we can't create // a tee, and we can't nop the origin, but we can at least switch to // the copied index, which may make the origin unneeded eventually. curr->index = get->index; anotherCycle = true; return; } // sink it, and nop the origin if (oneUse) { // with just one use, we can sink just the value this->replaceCurrent(set->value); } else { this->replaceCurrent(set); assert(!set->isTee()); set->makeTee(this->getFunction()->getLocalType(set->index)); } // reuse the local.get that is dying *found->second.item = curr; ExpressionManipulator::nop(curr); sinkables.erase(found); anotherCycle = true; } } void visitDrop(Drop* curr) { // collapse drop-tee into set, which can occur if a get was sunk into a tee auto* set = curr->value->dynCast(); if (set) { assert(set->isTee()); set->makeSet(); this->replaceCurrent(set); } } void checkInvalidations(EffectAnalyzer& effects) { // TODO: this is O(bad) std::vector invalidated; for (auto& [index, info] : sinkables) { if (effects.invalidates(info.effects)) { invalidated.push_back(index); } } for (auto index : invalidated) { sinkables.erase(index); } } // a full expression stack is used when !allowNesting, so that we can check if // a sink would cause nesting ExpressionStack expressionStack; static void visitPre(SimplifyLocals* self, Expression** currp) { Expression* curr = *currp; // Expressions that may throw cannot be sinked into 'try'. At the start of // 'try', we drop all sinkables that may throw. if (curr->is()) { std::vector invalidated; for (auto& [index, info] : self->sinkables) { if (info.effects.throws()) { invalidated.push_back(index); } } for (auto index : invalidated) { self->sinkables.erase(index); } } EffectAnalyzer effects(self->getPassOptions(), *self->getModule()); if (effects.checkPre(curr)) { self->checkInvalidations(effects); } if (!allowNesting) { self->expressionStack.push_back(curr); } } static void visitPost(SimplifyLocals* self, Expression** currp) { // Handling invalidations in the case where the current node is a get // that we sink into is not trivial in general. In the simple case, // all current sinkables are compatible with each other (otherwise one // would have invalidated a previous one, and removed it). Given that, if // we sink one of the sinkables, then that new code cannot invalidate any // other sinkable - we've already compared them. However, a tricky case // is when a sinkable contains another sinkable, // // (local.set $x // (block (result i32) // (A (local.get $y)) // (local.set $y B) // ) // ) // (C (local.get $y)) // (D (local.get $x)) // // If we sink the set of $y, we have // // (local.set $x // (block (result i32) // (A (local.get $y)) // (nop) // ) // ) // (C B) // (D (local.get $x)) // // There is now a risk that the set of $x should be invalidated, because // if we sink it then A may happen after B (imagine that B contains // something dangerous for that). To verify the risk, we could recursively // scan all of B, but that is less efficient. Instead, the key thing is // that if we sink out an inner part of a set, we should just leave further // work on it to a later iteration. This is achieved by checking for // invalidation on the original node, the local.get $y, which is guaranteed // to invalidate the parent whose inner part was removed (since the inner // part has a set, and the original node is a get of that same local). // // To implement this, if the current node is a get, note it and use it // for invalidations later down. We must note it since optimizing the get // may perform arbitrary changes to the graph, including reuse the get. Expression* original = *currp; LocalGet originalGet; if (auto* get = (*currp)->dynCast()) { // Note: no visitor for LocalGet, so that we can handle it here. originalGet = *get; original = &originalGet; self->optimizeLocalGet(get); } // perform main LocalSet processing here, since we may be the result of // replaceCurrent, i.e., no visitor for LocalSet, like LocalGet above. auto* set = (*currp)->dynCast(); if (set) { // if we see a set that was already potentially-sinkable, then the // previous store is dead, leave just the value auto found = self->sinkables.find(set->index); if (found != self->sinkables.end()) { auto* previous = (*found->second.item)->template cast(); assert(!previous->isTee()); auto* previousValue = previous->value; Drop* drop = ExpressionManipulator::convert(previous); drop->value = previousValue; drop->finalize(); self->sinkables.erase(found); self->anotherCycle = true; } } EffectAnalyzer effects(self->getPassOptions(), *self->getModule()); if (effects.checkPost(original)) { self->checkInvalidations(effects); } if (set && self->canSink(set)) { Index index = set->index; assert(self->sinkables.count(index) == 0); self->sinkables.emplace(std::pair{ index, SinkableInfo(currp, self->getPassOptions(), *self->getModule())}); } if (!allowNesting) { self->expressionStack.pop_back(); } } bool canSink(LocalSet* set) { // we can never move a tee if (set->isTee()) { return false; } // We cannot move expressions containing pops that are not enclosed in // 'catch', because 'pop' should follow right after 'catch'. FeatureSet features = this->getModule()->features; if (features.hasExceptionHandling() && EffectAnalyzer(this->getPassOptions(), *this->getModule(), set->value) .danglingPop) { return false; } // if in the first cycle, or not allowing tees, then we cannot sink if >1 // use as that would make a tee if ((firstCycle || !allowTee) && getCounter.num[set->index] > 1) { return false; } return true; } std::vector blocksToEnlarge; std::vector ifsToEnlarge; std::vector loopsToEnlarge; void optimizeLoopReturn(Loop* loop) { // If there is a sinkable thing in an eligible loop, we can optimize // it in a trivial way to the outside of the loop. if (loop->type != Type::none) { return; } if (sinkables.empty()) { return; } Index goodIndex = sinkables.begin()->first; // Ensure we have a place to write the return values for, if not, we // need another cycle. auto* block = loop->body->dynCast(); if (!block || block->name.is() || block->list.size() == 0 || !block->list.back()->is()) { loopsToEnlarge.push_back(loop); return; } Builder builder(*this->getModule()); auto** item = sinkables.at(goodIndex).item; auto* set = (*item)->template cast(); block->list[block->list.size() - 1] = set->value; *item = builder.makeNop(); block->finalize(); assert(block->type != Type::none); loop->finalize(); set->value = loop; set->finalize(); this->replaceCurrent(set); // We moved things around, clear all tracking; we'll do another cycle // anyhow. sinkables.clear(); anotherCycle = true; } void optimizeBlockReturn(Block* block) { if (!block->name.is() || unoptimizableBlocks.count(block->name) > 0) { return; } auto breaks = std::move(blockBreaks[block->name]); blockBreaks.erase(block->name); if (breaks.size() == 0) { // block has no branches TODO we might optimize trivial stuff here too return; } // block does not already have a return value (if one break has one, they // all do) assert(!(*breaks[0].brp)->template cast()->value); // look for a local.set that is present in them all bool found = false; Index sharedIndex = -1; for (auto& [index, _] : sinkables) { bool inAll = true; for (size_t j = 0; j < breaks.size(); j++) { if (breaks[j].sinkables.count(index) == 0) { inAll = false; break; } } if (inAll) { sharedIndex = index; found = true; break; } } if (!found) { return; } // If one of our brs is a br_if, then we will give it a value. since // the value executes before the condition, it is dangerous if we are // moving code out of the condition, // (br_if // (block // ..use $x.. // (local.set $x ..) // ) // ) // => // (br_if // (local.tee $x ..) ;; this now affects the use! // (block // ..use $x.. // ) // ) // so we must check for that. for (size_t j = 0; j < breaks.size(); j++) { // move break local.set's value to the break auto* breakLocalSetPointer = breaks[j].sinkables.at(sharedIndex).item; auto* brp = breaks[j].brp; auto* br = (*brp)->template cast(); auto* set = (*breakLocalSetPointer)->template cast(); if (br->condition) { // TODO: optimize FindAll findAll(br->condition); for (auto* otherSet : findAll.list) { if (otherSet == set) { // the set is indeed in the condition, so we can't just move it // but maybe there are no effects? see if, ignoring the set // itself, there is any risk Nop nop; *breakLocalSetPointer = &nop; EffectAnalyzer condition( this->getPassOptions(), *this->getModule(), br->condition); EffectAnalyzer value( this->getPassOptions(), *this->getModule(), set); *breakLocalSetPointer = set; if (condition.invalidates(value)) { // indeed, we can't do this, stop return; } break; // we found set in the list, can stop now } } } } // Great, this local is set in them all, we can optimize! if (block->list.size() == 0 || !block->list.back()->is()) { // We can't do this here, since we can't push to the block - // it would invalidate sinkable pointers. So we queue a request // to grow the block at the end of the turn, we'll get this next // cycle. blocksToEnlarge.push_back(block); return; } // move block local.set's value to the end, in return position, and nop the // set auto* blockLocalSetPointer = sinkables.at(sharedIndex).item; auto* value = (*blockLocalSetPointer)->template cast()->value; block->list[block->list.size() - 1] = value; ExpressionManipulator::nop(*blockLocalSetPointer); for (size_t j = 0; j < breaks.size(); j++) { // move break local.set's value to the break auto* breakLocalSetPointer = breaks[j].sinkables.at(sharedIndex).item; auto* brp = breaks[j].brp; auto* br = (*brp)->template cast(); assert(!br->value); // if the break is conditional, then we must set the value here - if the // break is not reached, we must still have the new value in the local auto* set = (*breakLocalSetPointer)->template cast(); if (br->condition) { br->value = set; set->makeTee(this->getFunction()->getLocalType(set->index)); *breakLocalSetPointer = this->getModule()->allocator.template alloc(); // in addition, as this is a conditional br that now has a value, it now // returns a value, so it must be dropped br->finalize(); *brp = Builder(*this->getModule()).makeDrop(br); } else { br->value = set->value; ExpressionManipulator::nop(set); } } // finally, create a local.set on the block itself auto* newLocalSet = Builder(*this->getModule()).makeLocalSet(sharedIndex, block); this->replaceCurrent(newLocalSet); sinkables.clear(); anotherCycle = true; block->finalize(); } // optimize local.sets from both sides of an if into a return value void optimizeIfElseReturn(If* iff, Expression** currp, Sinkables& ifTrue) { assert(iff->ifFalse); // if this if already has a result, or is unreachable code, we have // nothing to do if (iff->type != Type::none) { return; } // We now have the sinkables from both sides of the if, and can look // for something to sink. That is either a shared index on both sides, // *or* if one side is unreachable, we can sink anything from the other, // (if // (..) // (br $x) // (local.set $y (..)) // ) // => // (local.set $y // (if (result i32) // (..) // (br $x) // (..) // ) // ) Sinkables& ifFalse = sinkables; Index goodIndex = -1; bool found = false; if (iff->ifTrue->type == Type::unreachable) { // since the if type is none assert(iff->ifFalse->type != Type::unreachable); if (!ifFalse.empty()) { goodIndex = ifFalse.begin()->first; found = true; } } else if (iff->ifFalse->type == Type::unreachable) { // since the if type is none assert(iff->ifTrue->type != Type::unreachable); if (!ifTrue.empty()) { goodIndex = ifTrue.begin()->first; found = true; } } else { // Look for a shared index. for (auto& [index, _] : ifTrue) { if (ifFalse.count(index) > 0) { goodIndex = index; found = true; break; } } } if (!found) { return; } // great, we can optimize! // ensure we have a place to write the return values for, if not, we // need another cycle auto* ifTrueBlock = iff->ifTrue->dynCast(); if (iff->ifTrue->type != Type::unreachable) { if (!ifTrueBlock || ifTrueBlock->name.is() || ifTrueBlock->list.size() == 0 || !ifTrueBlock->list.back()->is()) { ifsToEnlarge.push_back(iff); return; } } auto* ifFalseBlock = iff->ifFalse->dynCast(); if (iff->ifFalse->type != Type::unreachable) { if (!ifFalseBlock || ifFalseBlock->name.is() || ifFalseBlock->list.size() == 0 || !ifFalseBlock->list.back()->is()) { ifsToEnlarge.push_back(iff); return; } } // all set, go if (iff->ifTrue->type != Type::unreachable) { auto* ifTrueItem = ifTrue.at(goodIndex).item; ifTrueBlock->list[ifTrueBlock->list.size() - 1] = (*ifTrueItem)->template cast()->value; ExpressionManipulator::nop(*ifTrueItem); ifTrueBlock->finalize(); assert(ifTrueBlock->type != Type::none); } if (iff->ifFalse->type != Type::unreachable) { auto* ifFalseItem = ifFalse.at(goodIndex).item; ifFalseBlock->list[ifFalseBlock->list.size() - 1] = (*ifFalseItem)->template cast()->value; ExpressionManipulator::nop(*ifFalseItem); ifFalseBlock->finalize(); assert(ifFalseBlock->type != Type::none); } iff->finalize(); // update type assert(iff->type != Type::none); // finally, create a local.set on the iff itself auto* newLocalSet = Builder(*this->getModule()).makeLocalSet(goodIndex, iff); *currp = newLocalSet; anotherCycle = true; } // Optimize local.sets from a one-sided iff, adding a get on the other: // (if // (..condition..) // (block // (local.set $x (..value..)) // ) // ) // => // (local.set $x // (if (result ..) // (..condition..) // (block (result ..) // (..value..) // ) // (local.get $x) // ) // ) // This is a speculative optimization: we add a get here, as well as a branch // in the if, so this is harmful for code size and for speed. However, later // optimizations may sink the set and enable other useful things. If none of // that happens, other passes can "undo" this by turning an if with a copy // arm into a one-sided if. void optimizeIfReturn(If* iff, Expression** currp) { // If this if is unreachable code, we have nothing to do. if (iff->type != Type::none || iff->ifTrue->type != Type::none) { return; } // Anything sinkable is good for us. if (sinkables.empty()) { return; } Index goodIndex = sinkables.begin()->first; // Ensure we have a place to write the return values for, if not, we // need another cycle. auto* ifTrueBlock = iff->ifTrue->dynCast(); if (!ifTrueBlock || ifTrueBlock->name.is() || ifTrueBlock->list.size() == 0 || !ifTrueBlock->list.back()->is()) { ifsToEnlarge.push_back(iff); return; } // Update the ifTrue side. Builder builder(*this->getModule()); auto** item = sinkables.at(goodIndex).item; auto* set = (*item)->template cast(); ifTrueBlock->list[ifTrueBlock->list.size() - 1] = set->value; *item = builder.makeNop(); ifTrueBlock->finalize(); assert(ifTrueBlock->type != Type::none); // Update the ifFalse side. iff->ifFalse = builder.makeLocalGet( set->index, this->getFunction()->getLocalType(set->index)); iff->finalize(); // update type // Update the get count. getCounter.num[set->index]++; assert(iff->type != Type::none); // Finally, reuse the local.set on the iff itself. set->value = iff; set->finalize(); *currp = set; anotherCycle = true; } // override scan to add a pre and a post check task to all nodes static void scan(SimplifyLocals* self, Expression** currp) { self->pushTask(visitPost, currp); auto* curr = *currp; if (auto* iff = curr->dynCast()) { // handle if in a special manner, using the ifStack for if-elses etc. if (iff->ifFalse) { self->pushTask( SimplifyLocals::doNoteIfFalse, currp); self->pushTask( SimplifyLocals::scan, &iff->ifFalse); } self->pushTask( SimplifyLocals::doNoteIfTrue, currp); self->pushTask( SimplifyLocals::scan, &iff->ifTrue); self->pushTask(SimplifyLocals:: doNoteIfCondition, currp); self->pushTask( SimplifyLocals::scan, &iff->condition); } else { WalkerPass>>::scan(self, currp); } self->pushTask(visitPre, currp); } void doWalkFunction(Function* func) { if (func->getNumLocals() == 0) { return; // nothing to do } // scan local.gets getCounter.analyze(func); // multiple passes may be required per function, consider this: // x = load // y = store // c(x, y) // the load cannot cross the store, but y can be sunk, after which so can x. // // we start with a cycle focusing on single-use locals, which are easy to // sink (we don't need to put a set), and a good match for common compiler // output patterns. further cycles do fully general sinking. firstCycle = true; do { anotherCycle = runMainOptimizations(func); // After the special first cycle, definitely do another. if (firstCycle) { firstCycle = false; anotherCycle = true; } // If we are all done, run the final optimizations, which may suggest we // can do more work. if (!anotherCycle) { // Don't run multiple cycles of just the final optimizations - in // particular, get canonicalization is not guaranteed to converge. // Instead, if final opts help then see if they enable main // opts; continue only if they do. In other words, do not end up // doing final opts again and again when no main opts are being // enabled. if (runLateOptimizations(func) && runMainOptimizations(func)) { anotherCycle = true; } } } while (anotherCycle); } bool runMainOptimizations(Function* func) { anotherCycle = false; WalkerPass>>:: doWalkFunction(func); // enlarge blocks that were marked, for the next round if (blocksToEnlarge.size() > 0) { for (auto* block : blocksToEnlarge) { block->list.push_back( this->getModule()->allocator.template alloc()); } blocksToEnlarge.clear(); anotherCycle = true; } // enlarge ifs that were marked, for the next round if (ifsToEnlarge.size() > 0) { for (auto* iff : ifsToEnlarge) { auto ifTrue = Builder(*this->getModule()).blockifyWithName(iff->ifTrue, Name()); iff->ifTrue = ifTrue; if (ifTrue->list.size() == 0 || !ifTrue->list.back()->template is()) { ifTrue->list.push_back( this->getModule()->allocator.template alloc()); } if (iff->ifFalse) { auto ifFalse = Builder(*this->getModule()).blockifyWithName(iff->ifFalse, Name()); iff->ifFalse = ifFalse; if (ifFalse->list.size() == 0 || !ifFalse->list.back()->template is()) { ifFalse->list.push_back( this->getModule()->allocator.template alloc()); } } } ifsToEnlarge.clear(); anotherCycle = true; } // enlarge loops that were marked, for the next round if (loopsToEnlarge.size() > 0) { for (auto* loop : loopsToEnlarge) { auto block = Builder(*this->getModule()).blockifyWithName(loop->body, Name()); loop->body = block; if (block->list.size() == 0 || !block->list.back()->template is()) { block->list.push_back( this->getModule()->allocator.template alloc()); } } loopsToEnlarge.clear(); anotherCycle = true; } // clean up sinkables.clear(); blockBreaks.clear(); unoptimizableBlocks.clear(); return anotherCycle; } bool runLateOptimizations(Function* func) { // Finally, after optimizing a function we can do some additional // optimization. getCounter.analyze(func); // Remove equivalent copies - assignment of // a local to another local that already contains that value. Note that // we do that at the very end, and only after structure, as removing // the copy here: // (if // (local.get $var$0) // (local.set $var$0 // (local.get $var$0) // ) // (local.set $var$0 // (i32.const 208) // ) // ) // will inhibit us creating an if return value. struct EquivalentOptimizer : public LinearExecutionWalker { std::vector* numLocalGets; bool removeEquivalentSets; Module* module; bool anotherCycle = false; // We track locals containing the same value. EquivalentSets equivalences; static void doNoteNonLinear(EquivalentOptimizer* self, Expression** currp) { // TODO do this across non-linear paths too, in coalesce-locals perhaps? // (would inhibit structure opts here, though. self->equivalences.clear(); } void visitLocalSet(LocalSet* curr) { // Remove trivial copies, even through a tee auto* value = curr->value; Function* func = this->getFunction(); while (auto* subSet = value->dynCast()) { value = subSet->value; } if (auto* get = value->dynCast()) { if (equivalences.check(curr->index, get->index)) { // This is an unnecessary copy! if (removeEquivalentSets) { if (curr->isTee()) { this->replaceCurrent(curr->value); } else { this->replaceCurrent(Builder(*module).makeDrop(curr->value)); } anotherCycle = true; } // Nothing more to do, ignore the copy. return; } else if (func->getLocalType(curr->index) == func->getLocalType(get->index)) { // There is a new equivalence now. Remove all the old ones, and add // the new one. // Note that we ignore the case of subtyping here, to keep this // optimization simple by assuming all equivalent indexes also have // the same type. TODO: consider optimizing this. equivalences.reset(curr->index); equivalences.add(curr->index, get->index); return; } } // A new value of some kind is assigned here, and it's not something we // could handle earlier, so remove all the old equivalent ones. equivalences.reset(curr->index); } void visitLocalGet(LocalGet* curr) { // Canonicalize gets: if some are equivalent, then we can pick more // then one, and other passes may benefit from having more uniformity. if (auto* set = equivalences.getEquivalents(curr->index)) { // Pick the index with the most uses - maximizing the chance to // lower one's uses to zero. // Helper method that returns the # of gets *ignoring the current // get*, as we want to see what is best overall, treating this one as // to be decided upon. auto getNumGetsIgnoringCurr = [&](Index index) { auto ret = (*numLocalGets)[index]; if (index == curr->index) { assert(ret >= 1); ret--; } return ret; }; Index best = -1; for (auto index : *set) { if (best == Index(-1) || getNumGetsIgnoringCurr(index) > getNumGetsIgnoringCurr(best)) { best = index; } } assert(best != Index(-1)); // Due to ordering, the best index may be different from us but have // the same # of locals - make sure we actually improve. if (best != curr->index && getNumGetsIgnoringCurr(best) > getNumGetsIgnoringCurr(curr->index)) { // Update the get counts. (*numLocalGets)[best]++; assert((*numLocalGets)[curr->index] >= 1); (*numLocalGets)[curr->index]--; // Make the change. curr->index = best; anotherCycle = true; } } } }; EquivalentOptimizer eqOpter; eqOpter.module = this->getModule(); eqOpter.numLocalGets = &getCounter.num; eqOpter.removeEquivalentSets = allowStructure; eqOpter.walkFunction(func); // We may have already had a local with no uses, or we may have just // gotten there thanks to the EquivalentOptimizer. If there are such // locals, remove all their sets. UnneededSetRemover setRemover( getCounter, func, this->getPassOptions(), *this->getModule()); setRemover.setModule(this->getModule()); return eqOpter.anotherCycle || setRemover.removed; } }; Pass* createSimplifyLocalsPass() { return new SimplifyLocals(); } Pass* createSimplifyLocalsNoTeePass() { return new SimplifyLocals(); } Pass* createSimplifyLocalsNoStructurePass() { return new SimplifyLocals(); } Pass* createSimplifyLocalsNoTeeNoStructurePass() { return new SimplifyLocals(); } Pass* createSimplifyLocalsNoNestingPass() { return new SimplifyLocals(); } } // namespace wasm binaryen-version_108/src/passes/Souperify.cpp000066400000000000000000000566361423707623100215430ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Souperify - convert to Souper IR in text form. // // This needs 'flatten' to be run before it, as it assumes the IR is in // flat form. You may also want to optimize a little, e.g. // --flatten --simplify-locals-nonesting --reorder-locals // (as otherwise flattening introduces many copies; we do ignore boring // copies here, but they end up as identical LHSes). // // See https://github.com/google/souper/issues/323 // // TODO: // * pcs and blockpcs for things other than ifs // * Investigate 'inlining', adding in nodes through calls // * Consider generalizing DataFlow IR for internal Binaryen use. // * Automatic conversion of Binaryen IR opts to run on the DataFlow IR. // This would subsume precompute-propagate, for example. Using DFIR we // can "expand" the BIR into expressions that BIR opts can handle // directly, without the need for *-propagate techniques. // #include "dataflow/graph.h" #include "dataflow/node.h" #include "dataflow/utils.h" #include "ir/flat.h" #include "ir/local-graph.h" #include "ir/utils.h" #include "pass.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { static int debug() { static char* str = getenv("BINARYEN_DEBUG_SOUPERIFY"); static int ret = str ? atoi(str) : 0; return ret; } namespace DataFlow { // Internal helper to find all the uses of a set. struct UseFinder { // Gets a list of all the uses of an expression. As we are in flat IR, // the expression must be the value of a set, and we seek the other sets // (or rather, their values) that contain a get that uses that value. // There may also be non-set uses of the value, for example in a drop // or a return. We represent those with a nullptr, meaning "other". std::vector getUses(Expression* origin, Graph& graph, LocalGraph& localGraph) { if (debug() >= 2) { std::cout << "getUses\n" << origin << '\n'; } std::vector ret; auto* set = graph.getSet(origin); if (!set) { // If the parent is not a set (a drop, call, return, etc.) then // it is not something we need to track. return ret; } addSetUses(set, graph, localGraph, ret); return ret; } // There may be loops of sets with copies between them. std::unordered_set seenSets; void addSetUses(LocalSet* set, Graph& graph, LocalGraph& localGraph, std::vector& ret) { // If already handled, nothing to do here. if (!seenSets.emplace(set).second) { return; } // Find all the uses of that set. auto& gets = localGraph.setInfluences[set]; if (debug() >= 2) { std::cout << "addSetUses for " << set << ", " << gets.size() << " gets\n"; } for (auto* get : gets) { // Each of these relevant gets is either // (1) a child of a set, which we can track, or // (2) not a child of a set, e.g., a call argument or such auto& sets = localGraph.getInfluences[get]; // TODO: iterator // In flat IR, each get can influence at most 1 set. assert(sets.size() <= 1); if (sets.size() == 0) { // This get is not the child of a set. Check if it is a drop, // otherwise it is an actual use, and so an external use. auto* parent = graph.getParent(get); if (parent && parent->is()) { // Just ignore it. } else { ret.push_back(nullptr); if (debug() >= 2) { std::cout << "add nullptr\n"; } } } else { // This get is the child of a set. auto* subSet = *sets.begin(); // If this is a copy, we need to look through it: data-flow IR // counts actual values, not copies, and in particular we need // to look through the copies that implement a phi. if (subSet->value == get) { // Indeed a copy. // TODO: this could be optimized and done all at once beforehand. addSetUses(subSet, graph, localGraph, ret); } else { // Not a copy. auto* value = subSet->value; ret.push_back(value); if (debug() >= 2) { std::cout << "add a value\n" << value << '\n'; } } } } } }; // Generates a trace: all the information to generate a Souper LHS // for a specific local.set whose value we want to infer. struct Trace { Graph& graph; Node* toInfer; // Nodes we should exclude from being children of traces (but they // may be the root we try to infer. std::unordered_set& excludeAsChildren; // A limit on how deep we go - we don't want to create arbitrarily // large traces. size_t depthLimit = 10; size_t totalLimit = 30; bool bad = false; std::vector nodes; std::unordered_set addedNodes; std::vector pathConditions; // When we need to (like when the depth is too deep), we replace // expressions with other expressions, and track them here. std::unordered_map> replacements; // The nodes that have additional external uses (only computed // for the "work" nodes, not the descriptive nodes arriving for // path conditions). std::unordered_set hasExternalUses; // We add path conditions after the "work". We collect them here // and then go through them at the proper time. std::vector conditionsToAdd; // Whether we are at the adding-conditions stage (i.e., post // adding the "work"). bool addingConditions = false; // The local information graph. Used to check if a node has external uses. LocalGraph& localGraph; Trace(Graph& graph, Node* toInfer, std::unordered_set& excludeAsChildren, LocalGraph& localGraph) : graph(graph), toInfer(toInfer), excludeAsChildren(excludeAsChildren), localGraph(localGraph) { if (debug() >= 2) { std::cout << "\nstart a trace (in " << graph.func->name << ")\n"; } // Check if there is a depth limit override auto* depthLimitStr = getenv("BINARYEN_SOUPERIFY_DEPTH_LIMIT"); if (depthLimitStr) { depthLimit = atoi(depthLimitStr); } auto* totalLimitStr = getenv("BINARYEN_SOUPERIFY_TOTAL_LIMIT"); if (totalLimitStr) { totalLimit = atoi(totalLimitStr); } // Pull in all the dependencies, starting from the value itself. add(toInfer, 0); if (bad) { return; } // If we are trivial before adding pcs, we are still trivial, and // can ignore this. auto sizeBeforePathConditions = nodes.size(); // No input is uninteresting if (sizeBeforePathConditions == 0) { bad = true; return; } // Just a var is uninteresting. TODO: others too? if (sizeBeforePathConditions == 1 && nodes[0]->isVar()) { bad = true; return; } // Before adding the path conditions, we can now compute the // actual number of uses of "work" nodes, the real computation done // here and that we hope to replace, as opposed to path condition // computation which is only descriptive and helps optimization of // the work. findExternalUses(); // We can now add conditions. addingConditions = true; for (auto* condition : conditionsToAdd) { add(condition, 0); } // Add in path conditions based on the location of this node: e.g. // if it is inside an if's true branch, we can add a path-condition // for that. auto iter = graph.nodeParentMap.find(toInfer); if (iter != graph.nodeParentMap.end()) { addPath(toInfer, iter->second); } } Node* add(Node* node, size_t depth) { depth++; // If replaced, return the replacement. auto iter = replacements.find(node); if (iter != replacements.end()) { return iter->second.get(); } // If already added, nothing more to do. if (addedNodes.find(node) != addedNodes.end()) { return node; } switch (node->type) { case Node::Type::Var: { break; // nothing more to add } case Node::Type::Expr: { // If this is a Const, it's not an instruction - nothing to add, // it's just a value. if (node->expr->is()) { return node; } // If we've gone too deep, emit a var instead. // Do the same if this is a node we should exclude from traces. if (depth >= depthLimit || nodes.size() >= totalLimit || (node != toInfer && excludeAsChildren.find(node) != excludeAsChildren.end())) { auto type = node->getWasmType(); assert(type.isConcrete()); auto* var = Node::makeVar(type); replacements[node] = std::unique_ptr(var); node = var; break; } // Add the dependencies. assert(!node->expr->is()); for (Index i = 0; i < node->values.size(); i++) { add(node->getValue(i), depth); } break; } case Node::Type::Phi: { auto* block = add(node->getValue(0), depth); assert(block); auto size = block->values.size(); // First, add the conditions for the block for (Index i = 0; i < size; i++) { // a condition may be bad, but conditions are not necessary - // we can proceed without the extra condition information auto* condition = block->getValue(i); if (!condition->isBad()) { if (!addingConditions) { // Too early, queue it for later. conditionsToAdd.push_back(condition); } else { add(condition, depth); } } } // Then, add the phi values for (Index i = 1; i < size + 1; i++) { add(node->getValue(i), depth); } break; } case Node::Type::Cond: { add(node->getValue(0), depth); // add the block add(node->getValue(1), depth); // add the node break; } case Node::Type::Block: { break; // nothing more to add } case Node::Type::Zext: { add(node->getValue(0), depth); break; } case Node::Type::Bad: { bad = true; return nullptr; } default: WASM_UNREACHABLE("unexpected node type"); } // Assert on no cycles assert(addedNodes.find(node) == addedNodes.end()); nodes.push_back(node); addedNodes.insert(node); return node; } void addPath(Node* node, Expression* curr) { // We track curr and parent, which are always in the state of parent // being the parent of curr. auto* parent = graph.expressionParentMap.at(curr); while (parent) { auto iter = graph.expressionConditionMap.find(parent); if (iter != graph.expressionConditionMap.end()) { // Given the block, add a proper path-condition addPathTo(parent, curr, iter->second); } curr = parent; parent = graph.expressionParentMap.at(parent); } } // curr is a child of parent, and parent has a Block which we are // give as 'node'. Add a path condition for reaching the child. void addPathTo(Expression* parent, Expression* curr, std::vector conditions) { if (auto* iff = parent->dynCast()) { Index index; if (curr == iff->ifTrue) { index = 0; } else if (curr == iff->ifFalse) { index = 1; } else { WASM_UNREACHABLE("invalid expr"); } auto* condition = conditions[index]; // Add the condition itself as an instruction in the trace - // the pc uses it as its input. add(condition, 0); // Add it as a pc, which we will emit directly. pathConditions.push_back(condition); } else { WASM_UNREACHABLE("invalid expr"); } } bool isBad() { return bad; } static bool isTraceable(Node* node) { if (!node->origin) { // Ignore artificial etc. nodes. // TODO: perhaps require all the nodes for an origin appear, so we // don't try to compute an internal part of one, like the // extra artificial != 0 of a select? return false; } if (node->isExpr()) { // Consider only the simple computational nodes. auto* expr = node->expr; return expr->is() || expr->is() || expr->is()) { std::cout << "select "; printInternal(node->getValue(0)); std::cout << ", "; printInternal(node->getValue(1)); std::cout << ", "; printInternal(node->getValue(2)); } else { WASM_UNREACHABLE("unexecpted node type"); } } void printPathCondition(Node* condition) { std::cout << "pc "; printInternal(condition); std::cout << " 1:i1\n"; } // Checks if a value looks suspiciously optimizable. void warnOnSuspiciousValues(Node* node) { assert(debug()); // If the node has no uses, it's not interesting enough to be // suspicious. TODO // If an input was replaced with a var, then we should not // look into it, it's not suspiciously trivial. for (auto* value : node->values) { if (value != getMaybeReplaced(value)) { return; } } if (allInputsIdentical(node)) { std::cout << "^^ suspicious identical inputs! missing optimization in " << graph.func->name << "? ^^\n"; return; } if (!node->isPhi() && allInputsConstant(node)) { std::cout << "^^ suspicious constant inputs! missing optimization in " << graph.func->name << "? ^^\n"; return; } } }; } // namespace DataFlow struct Souperify : public WalkerPass> { // Not parallel, for now - could parallelize and combine outputs at the end. // If Souper is thread-safe, we could also run it in parallel. bool singleUseOnly; Souperify(bool singleUseOnly) : singleUseOnly(singleUseOnly) {} void doWalkFunction(Function* func) { std::cout << "\n; function: " << func->name << '\n'; Flat::verifyFlatness(func); // Build the data-flow IR. DataFlow::Graph graph; graph.build(func, getModule()); if (debug() >= 2) { dump(graph, std::cout); } // Build the local graph data structure. LocalGraph localGraph(func); localGraph.computeInfluences(); // If we only want single-use nodes, exclude all the others. std::unordered_set excludeAsChildren; if (singleUseOnly) { for (auto& nodePtr : graph.nodes) { auto* node = nodePtr.get(); if (node->origin) { // TODO: work for identical origins could be saved auto uses = DataFlow::UseFinder().getUses(node->origin, graph, localGraph); if (debug() >= 2) { std::cout << "following node has " << uses.size() << " uses\n"; dump(node, std::cout); } if (uses.size() > 1) { excludeAsChildren.insert(node); } } } } // Emit possible traces. for (auto& nodePtr : graph.nodes) { auto* node = nodePtr.get(); // Trace if (DataFlow::Trace::isTraceable(node)) { DataFlow::Trace trace(graph, node, excludeAsChildren, localGraph); if (!trace.isBad()) { DataFlow::Printer printer(graph, trace); if (singleUseOnly) { assert(!printer.printedHasExternalUses); } } } } } }; Pass* createSouperifyPass() { return new Souperify(false); } Pass* createSouperifySingleUsePass() { return new Souperify(true); } } // namespace wasm binaryen-version_108/src/passes/StackCheck.cpp000066400000000000000000000144021423707623100215420ustar00rootroot00000000000000/* * Copyright 2020 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Enforce stack pointer limits. This pass will add checks around all // assignments to the __stack_pointer global that LLVM uses for its // shadow stack. // #include "abi/js.h" #include "ir/abstract.h" #include "ir/import-utils.h" #include "ir/names.h" #include "pass.h" #include "shared-constants.h" #include "support/debug.h" #include "wasm-emscripten.h" #define DEBUG_TYPE "stack-check" namespace wasm { // Exported function to set the base and the limit. static Name SET_STACK_LIMITS("__set_stack_limits"); static void importStackOverflowHandler(Module& module, Name name, Signature sig) { ImportInfo info(module); if (!info.getImportedFunction(ENV, name)) { auto import = Builder::makeFunction(name, sig, {}); import->module = ENV; import->base = name; module.addFunction(std::move(import)); } } static void addExportedFunction(Module& module, std::unique_ptr function) { auto export_ = Builder::makeExport(function->name, function->name, ExternalKind::Function); module.addFunction(std::move(function)); module.addExport(std::move(export_)); } struct EnforceStackLimits : public WalkerPass> { EnforceStackLimits(const Global* stackPointer, const Global* stackBase, const Global* stackLimit, Builder& builder, Name handler) : stackPointer(stackPointer), stackBase(stackBase), stackLimit(stackLimit), builder(builder), handler(handler) {} bool isFunctionParallel() override { return true; } Pass* create() override { return new EnforceStackLimits( stackPointer, stackBase, stackLimit, builder, handler); } Expression* stackBoundsCheck(Function* func, Expression* value) { // Add a local to store the value of the expression. We need the value // twice: once to check if it has overflowed, and again to assign to store // it. auto newSP = Builder::addVar(func, stackPointer->type); // If we imported a handler, call it. That can show a nice error in JS. // Otherwise, just trap. Expression* handlerExpr; if (handler.is()) { handlerExpr = builder.makeCall(handler, {builder.makeLocalGet(newSP, stackPointer->type)}, stackPointer->type); } else { handlerExpr = builder.makeUnreachable(); } // If it is >= the base or <= the limit, then error. auto check = builder.makeIf( builder.makeBinary( BinaryOp::OrInt32, builder.makeBinary( Abstract::getBinary(stackPointer->type, Abstract::GtU), builder.makeLocalTee(newSP, value, stackPointer->type), builder.makeGlobalGet(stackBase->name, stackBase->type)), builder.makeBinary( Abstract::getBinary(stackPointer->type, Abstract::LtU), builder.makeLocalGet(newSP, stackPointer->type), builder.makeGlobalGet(stackLimit->name, stackLimit->type))), handlerExpr); // (global.set $__stack_pointer (local.get $newSP)) auto newSet = builder.makeGlobalSet( stackPointer->name, builder.makeLocalGet(newSP, stackPointer->type)); return builder.blockify(check, newSet); } void visitGlobalSet(GlobalSet* curr) { if (getModule()->getGlobalOrNull(curr->name) == stackPointer) { replaceCurrent(stackBoundsCheck(getFunction(), curr->value)); } } private: const Global* stackPointer; const Global* stackBase; const Global* stackLimit; Builder& builder; Name handler; }; struct StackCheck : public Pass { void run(PassRunner* runner, Module* module) override { Global* stackPointer = getStackPointerGlobal(*module); if (!stackPointer) { BYN_DEBUG(std::cerr << "no stack pointer found\n"); return; } // Pick appropriate names. auto stackBaseName = Names::getValidGlobalName(*module, "__stack_base"); auto stackLimitName = Names::getValidGlobalName(*module, "__stack_limit"); Name handler; auto handlerName = runner->options.getArgumentOrDefault("stack-check-handler", ""); if (handlerName != "") { handler = handlerName; importStackOverflowHandler( *module, handler, Signature({stackPointer->type}, Type::none)); } Builder builder(*module); // Add the globals. auto stackBase = module->addGlobal(builder.makeGlobal(stackBaseName, stackPointer->type, builder.makeConstPtr(0), Builder::Mutable)); auto stackLimit = module->addGlobal(builder.makeGlobal(stackLimitName, stackPointer->type, builder.makeConstPtr(0), Builder::Mutable)); // Instrument all the code. PassRunner innerRunner(module); EnforceStackLimits(stackPointer, stackBase, stackLimit, builder, handler) .run(&innerRunner, module); // Generate the exported function. auto limitsFunc = builder.makeFunction( SET_STACK_LIMITS, Signature({stackPointer->type, stackPointer->type}, Type::none), {}); auto* getBase = builder.makeLocalGet(0, stackPointer->type); auto* storeBase = builder.makeGlobalSet(stackBaseName, getBase); auto* getLimit = builder.makeLocalGet(1, stackPointer->type); auto* storeLimit = builder.makeGlobalSet(stackLimitName, getLimit); limitsFunc->body = builder.makeBlock({storeBase, storeLimit}); addExportedFunction(*module, std::move(limitsFunc)); } }; Pass* createStackCheckPass() { return new StackCheck; } } // namespace wasm binaryen-version_108/src/passes/StackIR.cpp000066400000000000000000000275051423707623100210470ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Operations on Stack IR. // #include "ir/iteration.h" #include "ir/local-graph.h" #include "pass.h" #include "wasm-stack.h" #include "wasm.h" namespace wasm { // Generate Stack IR from Binaryen IR struct GenerateStackIR : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new GenerateStackIR; } bool modifiesBinaryenIR() override { return false; } void doWalkFunction(Function* func) { StackIRGenerator stackIRGen(*getModule(), func); stackIRGen.write(); func->stackIR = make_unique(); func->stackIR->swap(stackIRGen.getStackIR()); } }; Pass* createGenerateStackIRPass() { return new GenerateStackIR(); } // Optimize class StackIROptimizer { Function* func; PassOptions& passOptions; StackIR& insts; FeatureSet features; public: StackIROptimizer(Function* func, PassOptions& passOptions, FeatureSet features) : func(func), passOptions(passOptions), insts(*func->stackIR.get()), features(features) { assert(func->stackIR); } void run() { dce(); // FIXME: local2Stack is currently rather slow (due to localGraph), // so for now run it only when really optimizing if (passOptions.optimizeLevel >= 3 || passOptions.shrinkLevel >= 1) { local2Stack(); } // Removing unneeded blocks is dangerous with GC, as if we do this: // // (call // (rtt) // (block // (nop) // (i32) // ) // ) // === remove inner block ==> // (call // (rtt) // (nop) // (i32) // ) // // Then we end up with a nop that forces us to emit this during load: // // (call // (block // (local.set // (rtt) // ) // (nop) // (local.get) // ) // (i32) // ) // // However, that is not valid as an rtt cannot be set to a local. if (!features.hasGC()) { removeUnneededBlocks(); } dce(); } private: // Passes. // Remove unreachable code. void dce() { bool inUnreachableCode = false; for (Index i = 0; i < insts.size(); i++) { auto* inst = insts[i]; if (!inst) { continue; } if (inUnreachableCode) { // Does the unreachable code end here? if (isControlFlowBarrier(inst)) { inUnreachableCode = false; } else { // We can remove this. removeAt(i); } } else if (inst->type == Type::unreachable) { inUnreachableCode = true; } } } // If ordered properly, we can avoid a local.set/local.get pair, // and use the value directly from the stack, for example // [..produce a value on the stack..] // local.set $x // [..much code..] // local.get $x // call $foo ;; use the value, foo(value) // As long as the code in between does not modify $x, and has // no control flow branching out, we can remove both the set // and the get. void local2Stack() { // We use the localGraph to tell us if a get-set pair is indeed // a set that is read by that get, and only that get. Note that we run // this on the Binaryen IR, so we are assuming that no previous opt // has changed the interaction of local operations. // TODO: we can do this a lot faster, as we just care about linear // control flow. LocalGraph localGraph(func); localGraph.computeSetInfluences(); // We maintain a stack of relevant values. This contains: // * a null for each actual value that the value stack would have // * an index of each LocalSet that *could* be on the value // stack at that location. const Index null = -1; std::vector values; // We also maintain a stack of values vectors for control flow, // saving the stack as we enter and restoring it when we exit. std::vector> savedValues; #ifdef STACK_OPT_DEBUG std::cout << "func: " << func->name << '\n' << insts << '\n'; #endif for (Index i = 0; i < insts.size(); i++) { auto* inst = insts[i]; if (!inst) { continue; } // First, consume values from the stack as required. auto consumed = getNumConsumedValues(inst); #ifdef STACK_OPT_DEBUG std::cout << " " << i << " : " << *inst << ", " << values.size() << " on stack, will consume " << consumed << "\n "; for (auto s : values) std::cout << s << ' '; std::cout << '\n'; #endif // TODO: currently we run dce before this, but if we didn't, we'd need // to handle unreachable code here - it's ok to pop multiple values // there even if the stack is at size 0. while (consumed > 0) { assert(values.size() > 0); // Whenever we hit a possible stack value, kill it - it would // be consumed here, so we can never optimize to it. while (values.back() != null) { values.pop_back(); assert(values.size() > 0); } // Finally, consume the actual value that is consumed here. values.pop_back(); consumed--; } // After consuming, we can see what to do with this. First, handle // control flow. if (isControlFlowBegin(inst)) { // Save the stack for when we end this control flow. savedValues.push_back(values); // TODO: optimize copies values.clear(); } else if (isControlFlowEnd(inst)) { assert(!savedValues.empty()); values = savedValues.back(); savedValues.pop_back(); } else if (isControlFlow(inst)) { // Otherwise, in the middle of control flow, just clear it values.clear(); } // This is something we should handle, look into it. if (inst->type.isConcrete()) { bool optimized = false; if (auto* get = inst->origin->dynCast()) { // This is a potential optimization opportunity! See if we // can reach the set. if (values.size() > 0) { Index j = values.size() - 1; while (1) { // If there's an actual value in the way, we've failed. auto index = values[j]; if (index == null) { break; } auto* set = insts[index]->origin->cast(); if (set->index == get->index) { // This might be a proper set-get pair, where the set is // used by this get and nothing else, check that. auto& sets = localGraph.getSetses[get]; if (sets.size() == 1 && *sets.begin() == set) { auto& setInfluences = localGraph.setInfluences[set]; if (setInfluences.size() == 1) { assert(*setInfluences.begin() == get); // Do it! The set and the get can go away, the proper // value is on the stack. #ifdef STACK_OPT_DEBUG std::cout << " stackify the get\n"; #endif insts[index] = nullptr; insts[i] = nullptr; // Continuing on from here, replace this on the stack // with a null, representing a regular value. We // keep possible values above us active - they may // be optimized later, as they would be pushed after // us, and used before us, so there is no conflict. values[j] = null; optimized = true; break; } } } // We failed here. Can we look some more? if (j == 0) { break; } j--; } } } if (!optimized) { // This is an actual regular value on the value stack. values.push_back(null); } } else if (inst->origin->is() && inst->type == Type::none) { // This set is potentially optimizable later, add to stack. values.push_back(i); } } } // There may be unnecessary blocks we can remove: blocks // without branches to them are always ok to remove. // TODO: a branch to a block in an if body can become // a branch to that if body void removeUnneededBlocks() { for (auto*& inst : insts) { if (!inst) { continue; } if (auto* block = inst->origin->dynCast()) { if (!BranchUtils::BranchSeeker::has(block, block->name)) { // TODO optimize, maybe run remove-unused-names inst = nullptr; } } } } // Utilities. // A control flow "barrier" - a point where stack machine // unreachability ends. bool isControlFlowBarrier(StackInst* inst) { switch (inst->op) { case StackInst::BlockEnd: case StackInst::IfElse: case StackInst::IfEnd: case StackInst::LoopEnd: case StackInst::Catch: case StackInst::CatchAll: case StackInst::Delegate: case StackInst::TryEnd: { return true; } default: { return false; } } } // A control flow beginning. bool isControlFlowBegin(StackInst* inst) { switch (inst->op) { case StackInst::BlockBegin: case StackInst::IfBegin: case StackInst::LoopBegin: case StackInst::TryBegin: { return true; } default: { return false; } } } // A control flow ending. bool isControlFlowEnd(StackInst* inst) { switch (inst->op) { case StackInst::BlockEnd: case StackInst::IfEnd: case StackInst::LoopEnd: case StackInst::TryEnd: case StackInst::Delegate: { return true; } default: { return false; } } } bool isControlFlow(StackInst* inst) { return inst->op != StackInst::Basic; } // Remove the instruction at index i. If the instruction // is control flow, and so has been expanded to multiple // instructions, remove them as well. void removeAt(Index i) { auto* inst = insts[i]; insts[i] = nullptr; if (inst->op == StackInst::Basic) { return; // that was it } auto* origin = inst->origin; while (1) { i++; assert(i < insts.size()); inst = insts[i]; insts[i] = nullptr; if (inst && inst->origin == origin && isControlFlowEnd(inst)) { return; // that's it, we removed it all } } } Index getNumConsumedValues(StackInst* inst) { if (isControlFlow(inst)) { // If consumes 1; that's it. if (inst->op == StackInst::IfBegin) { return 1; } return 0; } // Otherwise, for basic instructions, just count the expression children. return ChildIterator(inst->origin).children.size(); } }; struct OptimizeStackIR : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new OptimizeStackIR; } bool modifiesBinaryenIR() override { return false; } void doWalkFunction(Function* func) { if (!func->stackIR) { return; } StackIROptimizer(func, getPassOptions(), getModule()->features).run(); } }; Pass* createOptimizeStackIRPass() { return new OptimizeStackIR(); } } // namespace wasm binaryen-version_108/src/passes/Strip.cpp000066400000000000000000000043661423707623100206500ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Similar to strip-ing a native binary, this family of passes can // removes debug info and other things. // #include #include "pass.h" #include "wasm-binary.h" #include "wasm.h" namespace wasm { struct Strip : public Pass { // A function that returns true if the method should be removed. typedef std::function Decider; Decider decider; Strip(Decider decider) : decider(decider) {} void run(PassRunner* runner, Module* module) override { // Remove name and debug sections. auto& sections = module->userSections; sections.erase(std::remove_if(sections.begin(), sections.end(), decider), sections.end()); // If we're cleaning up debug info, clear on the function and module too. UserSection temp; temp.name = BinaryConsts::UserSections::Name; if (decider(temp)) { module->clearDebugInfo(); for (auto& func : module->functions) { func->clearNames(); func->clearDebugInfo(); } } } }; Pass* createStripDebugPass() { return new Strip([&](const UserSection& curr) { return curr.name == BinaryConsts::UserSections::Name || curr.name == BinaryConsts::UserSections::SourceMapUrl || curr.name.find(".debug") == 0 || curr.name.find("reloc..debug") == 0; }); } Pass* createStripDWARFPass() { return new Strip([&](const UserSection& curr) { return curr.name.find(".debug") == 0 || curr.name.find("reloc..debug") == 0; }); } Pass* createStripProducersPass() { return new Strip([&](const UserSection& curr) { return curr.name == BinaryConsts::UserSections::Producers; }); } } // namespace wasm binaryen-version_108/src/passes/StripTargetFeatures.cpp000066400000000000000000000021041423707623100235020ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "pass.h" namespace wasm { struct StripTargetFeatures : public Pass { bool isStripped = false; StripTargetFeatures(bool isStripped) : isStripped(isStripped) {} void run(PassRunner* runner, Module* module) override { module->hasFeaturesSection = !isStripped; } }; Pass* createStripTargetFeaturesPass() { return new StripTargetFeatures(true); } Pass* createEmitTargetFeaturesPass() { return new StripTargetFeatures(false); } } // namespace wasm binaryen-version_108/src/passes/TrapMode.cpp000066400000000000000000000256401423707623100212600ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Pass that supports potentially-trapping wasm operations. // For example, integer division traps when dividing by zero, so this pass // generates a check and replaces the result with zero in that case. // #include "asmjs/shared-constants.h" #include "ir/trapping.h" #include "mixed_arena.h" #include "pass.h" #include "support/name.h" #include "wasm-builder.h" #include "wasm-type.h" #include "wasm.h" namespace wasm { Name I64S_REM("i64s-rem"); Name I64U_REM("i64u-rem"); Name I64S_DIV("i64s-div"); Name I64U_DIV("i64u-div"); static Expression* ensureDouble(Expression* expr, MixedArena& allocator) { if (expr->type == Type::f32) { auto conv = allocator.alloc(); conv->op = PromoteFloat32; conv->value = expr; conv->type = Type::f64; return conv; } assert(expr->type == Type::f64); return expr; } Name getBinaryFuncName(Binary* curr) { switch (curr->op) { case RemSInt32: return I32S_REM; case RemUInt32: return I32U_REM; case DivSInt32: return I32S_DIV; case DivUInt32: return I32U_DIV; case RemSInt64: return I64S_REM; case RemUInt64: return I64U_REM; case DivSInt64: return I64S_DIV; case DivUInt64: return I64U_DIV; default: return Name(); } } Name getUnaryFuncName(Unary* curr) { switch (curr->op) { case TruncSFloat32ToInt32: return F32_TO_INT; case TruncUFloat32ToInt32: return F32_TO_UINT; case TruncSFloat32ToInt64: return F32_TO_INT64; case TruncUFloat32ToInt64: return F32_TO_UINT64; case TruncSFloat64ToInt32: return F64_TO_INT; case TruncUFloat64ToInt32: return F64_TO_UINT; case TruncSFloat64ToInt64: return F64_TO_INT64; case TruncUFloat64ToInt64: return F64_TO_UINT64; default: return Name(); } } bool isTruncOpSigned(UnaryOp op) { switch (op) { case TruncUFloat32ToInt32: case TruncUFloat32ToInt64: case TruncUFloat64ToInt32: case TruncUFloat64ToInt64: return false; default: return true; } } Function* generateBinaryFunc(Module& wasm, Binary* curr) { BinaryOp op = curr->op; Type type = curr->type; bool isI64 = type == Type::i64; Builder builder(wasm); Expression* result = builder.makeBinary( op, builder.makeLocalGet(0, type), builder.makeLocalGet(1, type)); BinaryOp divSIntOp = isI64 ? DivSInt64 : DivSInt32; UnaryOp eqZOp = isI64 ? EqZInt64 : EqZInt32; Literal minLit = isI64 ? Literal(std::numeric_limits::min()) : Literal(std::numeric_limits::min()); Literal zeroLit = isI64 ? Literal(int64_t(0)) : Literal(int32_t(0)); if (op == divSIntOp) { // guard against signed division overflow BinaryOp eqOp = isI64 ? EqInt64 : EqInt32; Literal negLit = isI64 ? Literal(int64_t(-1)) : Literal(int32_t(-1)); result = builder.makeIf( builder.makeBinary( AndInt32, builder.makeBinary( eqOp, builder.makeLocalGet(0, type), builder.makeConst(minLit)), builder.makeBinary( eqOp, builder.makeLocalGet(1, type), builder.makeConst(negLit))), builder.makeConst(zeroLit), result); } auto funcSig = Signature({type, type}, type); auto func = Builder::makeFunction(getBinaryFuncName(curr), funcSig, {}); func->body = builder.makeIf(builder.makeUnary(eqZOp, builder.makeLocalGet(1, type)), builder.makeConst(zeroLit), result); // TODO: use unique_ptr properly and do not release ownership. return func.release(); } template void makeClampLimitLiterals(Literal& iMin, Literal& fMin, Literal& fMax) { IntType minVal = std::numeric_limits::min(); IntType maxVal = std::numeric_limits::max(); iMin = Literal(minVal); fMin = Literal(FloatType(minVal) - 1); fMax = Literal(FloatType(maxVal) + 1); } Function* generateUnaryFunc(Module& wasm, Unary* curr) { Type type = curr->value->type; Type retType = curr->type; UnaryOp truncOp = curr->op; bool isF64 = type == Type::f64; Builder builder(wasm); BinaryOp leOp = isF64 ? LeFloat64 : LeFloat32; BinaryOp geOp = isF64 ? GeFloat64 : GeFloat32; BinaryOp neOp = isF64 ? NeFloat64 : NeFloat32; Literal iMin, fMin, fMax; switch (truncOp) { case TruncSFloat32ToInt32: makeClampLimitLiterals(iMin, fMin, fMax); break; case TruncUFloat32ToInt32: makeClampLimitLiterals(iMin, fMin, fMax); break; case TruncSFloat32ToInt64: makeClampLimitLiterals(iMin, fMin, fMax); break; case TruncUFloat32ToInt64: makeClampLimitLiterals(iMin, fMin, fMax); break; case TruncSFloat64ToInt32: makeClampLimitLiterals(iMin, fMin, fMax); break; case TruncUFloat64ToInt32: makeClampLimitLiterals(iMin, fMin, fMax); break; case TruncSFloat64ToInt64: makeClampLimitLiterals(iMin, fMin, fMax); break; case TruncUFloat64ToInt64: makeClampLimitLiterals(iMin, fMin, fMax); break; default: WASM_UNREACHABLE("unexpected op"); } auto func = Builder::makeFunction(getUnaryFuncName(curr), Signature(type, retType), {}); func->body = builder.makeUnary(truncOp, builder.makeLocalGet(0, type)); // too small XXX this is different than asm.js, which does frem. here we // clamp, which is much simpler/faster, and similar to native builds func->body = builder.makeIf(builder.makeBinary(leOp, builder.makeLocalGet(0, type), builder.makeConst(fMin)), builder.makeConst(iMin), func->body); // too big XXX see above func->body = builder.makeIf( builder.makeBinary( geOp, builder.makeLocalGet(0, type), builder.makeConst(fMax)), // NB: min here as well. anything out of range => to the min builder.makeConst(iMin), func->body); // nan func->body = builder.makeIf( builder.makeBinary( neOp, builder.makeLocalGet(0, type), builder.makeLocalGet(0, type)), // NB: min here as well. anything invalid => to the min builder.makeConst(iMin), func->body); // TODO: use unique_ptr properly and do not release ownership. return func.release(); } void ensureBinaryFunc(Binary* curr, Module& wasm, TrappingFunctionContainer& trappingFunctions) { Name name = getBinaryFuncName(curr); if (trappingFunctions.hasFunction(name)) { return; } trappingFunctions.addFunction(generateBinaryFunc(wasm, curr)); } void ensureUnaryFunc(Unary* curr, Module& wasm, TrappingFunctionContainer& trappingFunctions) { Name name = getUnaryFuncName(curr); if (trappingFunctions.hasFunction(name)) { return; } trappingFunctions.addFunction(generateUnaryFunc(wasm, curr)); } void ensureF64ToI64JSImport(TrappingFunctionContainer& trappingFunctions) { if (trappingFunctions.hasImport(F64_TO_INT)) { return; } // f64-to-int = asm2wasm.f64-to-int; auto import = new Function; import->name = F64_TO_INT; import->module = ASM2WASM; import->base = F64_TO_INT; import->type = Signature(Type::f64, Type::i32); trappingFunctions.addImport(import); } Expression* makeTrappingBinary(Binary* curr, TrappingFunctionContainer& trappingFunctions) { Name name = getBinaryFuncName(curr); if (!name.is() || trappingFunctions.getMode() == TrapMode::Allow) { return curr; } // the wasm operation might trap if done over 0, so generate a safe call Type type = curr->type; Module& wasm = trappingFunctions.getModule(); Builder builder(wasm); ensureBinaryFunc(curr, wasm, trappingFunctions); return builder.makeCall(name, {curr->left, curr->right}, type); } Expression* makeTrappingUnary(Unary* curr, TrappingFunctionContainer& trappingFunctions) { Name name = getUnaryFuncName(curr); TrapMode mode = trappingFunctions.getMode(); if (!name.is() || mode == TrapMode::Allow) { return curr; } Module& wasm = trappingFunctions.getModule(); Builder builder(wasm); // WebAssembly traps on float-to-int overflows, but asm.js wouldn't, so we // must do something We can handle this in one of two ways: clamping, which is // fast, or JS, which is precisely like JS but in order to do that we do a // slow ffi If i64, there is no "JS" way to handle this, as no i64s in JS, so // always clamp if we don't allow traps asm.js doesn't have unsigned // f64-to-int, so just use the signed one. if (curr->type != Type::i64 && mode == TrapMode::JS) { // WebAssembly traps on float-to-int overflows, but asm.js wouldn't, so we // must emulate that ensureF64ToI64JSImport(trappingFunctions); Expression* f64Value = ensureDouble(curr->value, wasm.allocator); return builder.makeCall(F64_TO_INT, {f64Value}, Type::i32); } ensureUnaryFunc(curr, wasm, trappingFunctions); return builder.makeCall(name, {curr->value}, curr->type); } struct TrapModePass : public WalkerPass> { public: // Needs to be non-parallel so that visitModule gets called after visiting // each node in the module, so we can add the functions that we created. bool isFunctionParallel() override { return false; } TrapModePass(TrapMode mode) : mode(mode) { assert(mode != TrapMode::Allow); } Pass* create() override { return new TrapModePass(mode); } void visitUnary(Unary* curr) { replaceCurrent(makeTrappingUnary(curr, *trappingFunctions)); } void visitBinary(Binary* curr) { replaceCurrent(makeTrappingBinary(curr, *trappingFunctions)); } void visitModule(Module* curr) { trappingFunctions->addToModule(); } void doWalkModule(Module* module) { trappingFunctions = make_unique(mode, *module); super::doWalkModule(module); } private: TrapMode mode; // Need to defer adding generated functions because adding functions while // iterating over existing functions causes problems. std::unique_ptr trappingFunctions; }; Pass* createTrapModeClamp() { return new TrapModePass(TrapMode::Clamp); } Pass* createTrapModeJS() { return new TrapModePass(TrapMode::JS); } } // namespace wasm binaryen-version_108/src/passes/TypeRefining.cpp000066400000000000000000000263371423707623100221540ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Apply more specific subtypes to type fields where possible, where all the // writes to that field in the entire program allow doing so. // #include "ir/lubs.h" #include "ir/struct-utils.h" #include "ir/type-updating.h" #include "ir/utils.h" #include "pass.h" #include "support/unique_deferring_queue.h" #include "wasm-type.h" #include "wasm.h" namespace wasm { namespace { // We use a LUBFinder to track field info, which includes the best LUB possible // as well as relevant nulls (nulls force us to keep the type nullable). using FieldInfo = LUBFinder; struct FieldInfoScanner : public StructUtils::StructScanner { Pass* create() override { return new FieldInfoScanner(functionNewInfos, functionSetGetInfos); } FieldInfoScanner( StructUtils::FunctionStructValuesMap& functionNewInfos, StructUtils::FunctionStructValuesMap& functionSetGetInfos) : StructUtils::StructScanner( functionNewInfos, functionSetGetInfos) {} void noteExpression(Expression* expr, HeapType type, Index index, FieldInfo& info) { info.noteUpdatableExpression(expr); } void noteDefault(Type fieldType, HeapType type, Index index, FieldInfo& info) { // Default values do not affect what the heap type of a field can be turned // into. Note them, however, as they force us to keep the type nullable. if (fieldType.isRef()) { info.noteNullDefault(); } } void noteCopy(HeapType type, Index index, FieldInfo& info) { // Copies do not add any type requirements at all: the type will always be // read and written to a place with the same type. } void noteRead(HeapType type, Index index, FieldInfo& info) { // Nothing to do for a read, we just care about written values. } }; struct TypeRefining : public Pass { StructUtils::StructValuesMap finalInfos; void run(PassRunner* runner, Module* module) override { if (getTypeSystem() != TypeSystem::Nominal) { Fatal() << "TypeRefining requires nominal typing"; } // Find and analyze struct operations inside each function. StructUtils::FunctionStructValuesMap functionNewInfos(*module), functionSetGetInfos(*module); FieldInfoScanner scanner(functionNewInfos, functionSetGetInfos); scanner.run(runner, module); scanner.runOnModuleCode(runner, module); // Combine the data from the functions. StructUtils::StructValuesMap combinedNewInfos; StructUtils::StructValuesMap combinedSetGetInfos; functionNewInfos.combineInto(combinedNewInfos); functionSetGetInfos.combineInto(combinedSetGetInfos); // Propagate things written during new to supertypes, as they must also be // able to contain that type. Propagate things written using set to subtypes // as well, as the reference might be to a supertype if the field is present // there. StructUtils::TypeHierarchyPropagator propagator(*module); propagator.propagateToSuperTypes(combinedNewInfos); propagator.propagateToSuperAndSubTypes(combinedSetGetInfos); // Combine everything together. combinedNewInfos.combineInto(finalInfos); combinedSetGetInfos.combineInto(finalInfos); // While we do the following work, see if we have anything to optimize, so // that we can avoid wasteful work later if not. bool canOptimize = false; // We have combined all the information we have about writes to the fields, // but we still need to make sure that the new types makes sense. In // particular, subtyping cares about things like mutability, and we also // need to handle the case where we have no writes to a type but do have // them to subtypes or supertypes; in all these cases, we must preserve // that a field is always a subtype of the parent field. To do so, we go // through all the types downward from supertypes to subtypes, ensuring the // subtypes are suitable. auto& subTypes = propagator.subTypes; UniqueDeferredQueue work; for (auto type : subTypes.types) { if (type.isStruct() && !type.getSuperType()) { work.push(type); } } while (!work.empty()) { auto type = work.pop(); // First, find fields that have nothing written to them at all, and set // their value to their old type. We must pick some type for the field, // and we have nothing better to go on. (If we have a super, and it does // have writes, then we may further update this type later, see the // isSubType check in the loop after this.) auto& fields = type.getStruct().fields; for (Index i = 0; i < fields.size(); i++) { auto oldType = fields[i].type; auto& info = finalInfos[type][i]; if (!info.noted()) { info = LUBFinder(oldType); } } // Next ensure proper subtyping of this struct's fields versus its super. if (auto super = type.getSuperType()) { auto& superFields = super->getStruct().fields; for (Index i = 0; i < superFields.size(); i++) { auto newSuperType = finalInfos[*super][i].getBestPossible(); auto& info = finalInfos[type][i]; auto newType = info.getBestPossible(); if (!Type::isSubType(newType, newSuperType)) { // To ensure we are a subtype of the super's field, simply copy that // value, which is more specific than us. // // This situation cannot happen normally, but if a type is not used // then it can. For example, imagine that $B and $C are subtypes of // $A, and that $C is never created anywhere. A struct.new of $B // propagates info to $A (forcing $A's type to take it into account // and not be more specific than it), but that does not reach $C // (struct.new propagates only up, not down; if it propagated down // then we could never specialize a subtype more than its super). If // $C had some value written to it then that value would force the // LUB of $A to take it into account, but as here $C is never even // created, that does not happen. And then if we update $A's type // to something more specific than $C's old type, we end up with the // problem that this code path fixes: we just need to get $C's type // to be identical to its super so that validation works. info = LUBFinder(newSuperType); } else if (fields[i].mutable_ == Mutable) { // Mutable fields must have identical types, so we cannot // specialize. // TODO: Perhaps we should be using a new Field::isSubType() method // here? This entire analysis might be done on fields, and not // types, which would also handle more things added to fields // in the future. info = LUBFinder(newSuperType); } } } // After all those decisions, see if we found anything to optimize. for (Index i = 0; i < fields.size(); i++) { auto oldType = fields[i].type; auto& lub = finalInfos[type][i]; auto newType = lub.getBestPossible(); if (newType != oldType) { canOptimize = true; lub.updateNulls(); } } for (auto subType : subTypes.getSubTypes(type)) { work.push(subType); } } if (canOptimize) { updateInstructions(*module, runner); updateTypes(*module, runner); } } // If we change types then some instructions may need to be modified. // Specifically, we assume that reads from structs impose no constraints on // us, so that we can optimize maximally. If a struct is never created nor // written to, but only read from, then we have literally no constraints on it // at all, and we can end up with a situation where we alter the type to // something that is invalid for that read. To ensure the code still // validates, simply remove such reads. void updateInstructions(Module& wasm, PassRunner* runner) { struct ReadUpdater : public WalkerPass> { bool isFunctionParallel() override { return true; } TypeRefining& parent; ReadUpdater(TypeRefining& parent) : parent(parent) {} ReadUpdater* create() override { return new ReadUpdater(parent); } void visitStructGet(StructGet* curr) { if (curr->ref->type == Type::unreachable) { return; } auto oldType = curr->ref->type.getHeapType(); auto newFieldType = parent.finalInfos[oldType][curr->index].getBestPossible(); if (!Type::isSubType(newFieldType, curr->type)) { // This instruction is invalid, so it must be the result of the // situation described above: we ignored the read during our // inference, and optimized accordingly, and so now we must remove it // to keep the module validating. It doesn't matter what we emit here, // since there are no struct.new or struct.sets for this type, so this // code is logically unreachable. // // Note that we emit an unreachable here, which changes the type, and // so we should refinalize. However, we will be refinalizing later // anyhow in updateTypes, so there is no need. Builder builder(*getModule()); replaceCurrent(builder.makeSequence(builder.makeDrop(curr->ref), builder.makeUnreachable())); } } }; ReadUpdater updater(*this); updater.run(runner, &wasm); updater.runOnModuleCode(runner, &wasm); } void updateTypes(Module& wasm, PassRunner* runner) { class TypeRewriter : public GlobalTypeRewriter { TypeRefining& parent; public: TypeRewriter(Module& wasm, TypeRefining& parent) : GlobalTypeRewriter(wasm), parent(parent) {} void modifyStruct(HeapType oldStructType, Struct& struct_) override { const auto& oldFields = oldStructType.getStruct().fields; auto& newFields = struct_.fields; for (Index i = 0; i < newFields.size(); i++) { auto oldType = oldFields[i].type; if (!oldType.isRef()) { continue; } auto newType = parent.finalInfos[oldStructType][i].getBestPossible(); newFields[i].type = getTempType(newType); } } }; TypeRewriter(wasm, *this).update(); ReFinalize().run(runner, &wasm); } }; } // anonymous namespace Pass* createTypeRefiningPass() { return new TypeRefining(); } } // namespace wasm binaryen-version_108/src/passes/Untee.cpp000066400000000000000000000031701423707623100206170ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Removes local.tees, replacing them with gets and sets. // // This makes the code "flatter", with less nested side // effects. That can make some passes, like CodePushing, // more effective. // #include #include #include namespace wasm { struct Untee : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new Untee; } void visitLocalSet(LocalSet* curr) { if (curr->isTee()) { if (curr->value->type == Type::unreachable) { // we don't reach the tee, just remove it replaceCurrent(curr->value); } else { // a normal tee. replace with set and get Builder builder(*getModule()); LocalGet* get = builder.makeLocalGet( curr->index, getFunction()->getLocalType(curr->index)); replaceCurrent(builder.makeSequence(curr, get)); curr->makeSet(); } } } }; Pass* createUnteePass() { return new Untee(); } } // namespace wasm binaryen-version_108/src/passes/Vacuum.cpp000066400000000000000000000324361423707623100210060ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Removes obviously unneeded code // #include #include #include #include #include #include #include #include #include namespace wasm { struct Vacuum : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new Vacuum; } TypeUpdater typeUpdater; Expression* replaceCurrent(Expression* expression) { auto* old = getCurrent(); super::replaceCurrent(expression); // also update the type updater typeUpdater.noteReplacement(old, expression); return expression; } void doWalkFunction(Function* func) { typeUpdater.walk(func->body); walk(func->body); } // Returns nullptr if curr is dead, curr if it must stay as is, or one of its // children if it can be replaced. Takes into account: // // * The result may be used or unused. // * The type may or may not matter. // // For example, // // (drop // (i32.eqz // (call ..))) // // The drop means that the value is not used later. And while the call has // side effects, the i32.eqz does not. So when we are called on the i32.eqz, // and told the result does not matter, we can return the call. Note that in // this case the type does not matter either, as drop doesn't care, and anyhow // i32.eqz returns the same type as it receives. But for an expression that // returns a different type, if the type matters then we cannot replace it. Expression* optimize(Expression* curr, bool resultUsed, bool typeMatters) { auto type = curr->type; // If the type is none, then we can never replace it with another type. if (type == Type::none) { typeMatters = true; } // An unreachable node must not be changed. DCE will remove those. if (type == Type::unreachable) { return curr; } // resultUsed only makes sense when the type is concrete assert(!resultUsed || curr->type != Type::none); // If we actually need the result, then we must not change anything. // TODO: maybe there is something clever though? if (resultUsed) { return curr; } // We iterate on possible replacements. auto* prev = curr; while (1) { // If a replacement changes the type, and the type matters, return the // previous one and stop. if (typeMatters && curr->type != type) { return prev; } prev = curr; // Some instructions have special handling in visit*, and we should do // nothing for them here. if (curr->is() || curr->is() || curr->is() || curr->is() || curr->is()) { return curr; } // Check if this expression itself has side effects, ignoring children. EffectAnalyzer self(getPassOptions(), *getModule()); self.visit(curr); if (self.hasUnremovableSideEffects()) { return curr; } // The result isn't used, and this has no side effects itself, so we can // get rid of it. However, the children may have side effects. SmallVector childrenWithEffects; for (auto* child : ChildIterator(curr)) { if (EffectAnalyzer(getPassOptions(), *getModule(), child) .hasUnremovableSideEffects()) { childrenWithEffects.push_back(child); } } if (childrenWithEffects.empty()) { return nullptr; } if (childrenWithEffects.size() == 1) { // We know the result isn't used, and curr has no side effects, so we // can skip curr and keep looking into the child. curr = childrenWithEffects[0]; continue; } // TODO: with multiple children with side effects, we can perhaps figure // out something clever, like a block with drops, or an i32.add for just // two, etc. return curr; } } void visitBlock(Block* curr) { // compress out nops and other dead code int skip = 0; auto& list = curr->list; size_t size = list.size(); for (size_t z = 0; z < size; z++) { auto* child = list[z]; // The last element may be used. bool used = z == size - 1 && curr->type.isConcrete() && ExpressionAnalyzer::isResultUsed(expressionStack, getFunction()); auto* optimized = optimize(child, used, true); if (!optimized) { auto childType = child->type; if (childType.isConcrete()) { if (LiteralUtils::canMakeZero(childType)) { // We can't just skip a final concrete element, even if it isn't // used. Instead, replace it with something that's easy to optimize // out (for example, code-folding can merge out identical zeros at // the end of if arms). optimized = LiteralUtils::makeZero(childType, *getModule()); } else { // Don't optimize it out. optimized = child; } } else if (childType == Type::unreachable) { // Don't try to optimize out an unreachable child (dce can do that // properly). optimized = child; } } if (!optimized) { typeUpdater.noteRecursiveRemoval(child); skip++; } else { if (optimized != child) { typeUpdater.noteReplacement(child, optimized); list[z] = optimized; } if (skip > 0) { list[z - skip] = list[z]; list[z] = nullptr; } // if this is unreachable, the rest is dead code if (list[z - skip]->type == Type::unreachable && z < size - 1) { for (Index i = z - skip + 1; i < list.size(); i++) { auto* remove = list[i]; if (remove) { typeUpdater.noteRecursiveRemoval(remove); } } list.resize(z - skip + 1); typeUpdater.maybeUpdateTypeToUnreachable(curr); skip = 0; // nothing more to do on the list break; } } } if (skip > 0) { list.resize(size - skip); typeUpdater.maybeUpdateTypeToUnreachable(curr); } // the block may now be a trivial one that we can get rid of and just leave // its contents replaceCurrent(BlockUtils::simplifyToContents(curr, this)); } void visitIf(If* curr) { // if the condition is a constant, just apply it // we can just return the ifTrue or ifFalse. if (auto* value = curr->condition->dynCast()) { Expression* child; if (value->value.getInteger()) { child = curr->ifTrue; if (curr->ifFalse) { typeUpdater.noteRecursiveRemoval(curr->ifFalse); } } else { if (curr->ifFalse) { child = curr->ifFalse; typeUpdater.noteRecursiveRemoval(curr->ifTrue); } else { typeUpdater.noteRecursiveRemoval(curr); ExpressionManipulator::nop(curr); return; } } replaceCurrent(child); return; } // if the condition is unreachable, just return it if (curr->condition->type == Type::unreachable) { typeUpdater.noteRecursiveRemoval(curr->ifTrue); if (curr->ifFalse) { typeUpdater.noteRecursiveRemoval(curr->ifFalse); } replaceCurrent(curr->condition); return; } // from here on, we can assume the condition executed if (curr->ifFalse) { if (curr->ifFalse->is()) { curr->ifFalse = nullptr; } else if (curr->ifTrue->is()) { curr->ifTrue = curr->ifFalse; curr->ifFalse = nullptr; curr->condition = Builder(*getModule()).makeUnary(EqZInt32, curr->condition); } else if (curr->ifTrue->is() && curr->ifFalse->is()) { // instead of dropping both sides, drop the if, if they are the same // type auto* left = curr->ifTrue->cast()->value; auto* right = curr->ifFalse->cast()->value; if (left->type == right->type) { curr->ifTrue = left; curr->ifFalse = right; curr->finalize(); replaceCurrent(Builder(*getModule()).makeDrop(curr)); } } } else { // This is an if without an else. If the body is empty, we do not need it. if (curr->ifTrue->is()) { replaceCurrent(Builder(*getModule()).makeDrop(curr->condition)); } } } void visitLoop(Loop* curr) { if (curr->body->is()) { ExpressionManipulator::nop(curr); } } void visitDrop(Drop* curr) { // optimize the dropped value, maybe leaving nothing curr->value = optimize(curr->value, false, false); if (curr->value == nullptr) { ExpressionManipulator::nop(curr); return; } // a drop of a tee is a set if (auto* set = curr->value->dynCast()) { assert(set->isTee()); set->makeSet(); replaceCurrent(set); return; } // If the value has no side effects, or it has side effects we can remove, // do so. This basically means that if noTrapsHappen is set then we can // use that assumption (that no trap actually happens at runtime) and remove // a trapping value. // // TODO: A complete CFG analysis for noTrapsHappen mode, removing all code // that definitely reaches a trap, *even if* it has side effects. // // Note that we check the type here to avoid removing unreachable code - we // leave that for DCE. if (curr->type == Type::none && !EffectAnalyzer(getPassOptions(), *getModule(), curr) .hasUnremovableSideEffects()) { ExpressionManipulator::nop(curr); return; } // if we are dropping a block's return value, we might be able to remove it // entirely if (auto* block = curr->value->dynCast()) { auto* last = block->list.back(); // note that the last element may be concrete but not the block, if the // block has an unreachable element in the middle, making the block // unreachable despite later elements and in particular the last if (last->type.isConcrete() && block->type == last->type) { last = optimize(last, false, false); if (!last) { // we may be able to remove this, if there are no brs bool canPop = true; if (block->name.is()) { BranchUtils::BranchSeeker seeker(block->name); Expression* temp = block; seeker.walk(temp); if (seeker.found && Type::hasLeastUpperBound(seeker.types)) { canPop = false; } } if (canPop) { block->list.back() = last; block->list.pop_back(); block->type = Type::none; // we don't need the drop anymore, let's see what we have left in // the block if (block->list.size() > 1) { replaceCurrent(block); } else if (block->list.size() == 1) { replaceCurrent(block->list[0]); } else { ExpressionManipulator::nop(curr); } return; } } } } // sink a drop into an arm of an if-else if the other arm ends in an // unreachable, as it if is a branch, this can make that branch optimizable // and more vaccuming possible auto* iff = curr->value->dynCast(); if (iff && iff->ifFalse && iff->type.isConcrete()) { // reuse the drop in both cases if (iff->ifTrue->type == Type::unreachable && iff->ifFalse->type.isConcrete()) { curr->value = iff->ifFalse; iff->ifFalse = curr; iff->type = Type::none; replaceCurrent(iff); } else if (iff->ifFalse->type == Type::unreachable && iff->ifTrue->type.isConcrete()) { curr->value = iff->ifTrue; iff->ifTrue = curr; iff->type = Type::none; replaceCurrent(iff); } } } void visitTry(Try* curr) { // If try's body does not throw, the whole try-catch can be replaced with // the try's body. if (!EffectAnalyzer(getPassOptions(), *getModule(), curr->body).throws()) { replaceCurrent(curr->body); for (auto* catchBody : curr->catchBodies) { typeUpdater.noteRecursiveRemoval(catchBody); } } } void visitFunction(Function* curr) { auto* optimized = optimize(curr->body, curr->getResults() != Type::none, true); if (optimized) { curr->body = optimized; } else { ExpressionManipulator::nop(curr->body); } if (curr->getResults() == Type::none && !EffectAnalyzer(getPassOptions(), *getModule(), curr->body) .hasUnremovableSideEffects()) { ExpressionManipulator::nop(curr->body); } } }; Pass* createVacuumPass() { return new Vacuum(); } } // namespace wasm binaryen-version_108/src/passes/WasmIntrinsics.cpp.in000066400000000000000000000002741423707623100231230ustar00rootroot00000000000000#include "passes/intrinsics-module.h" static const char theModule[@WASM_INTRINSICS_SIZE@] = { @WASM_INTRINSICS_EMBED@ }; namespace wasm { const char* IntrinsicsModuleWast = theModule; } binaryen-version_108/src/passes/intrinsics-module.h000066400000000000000000000014561423707623100226610ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef passes_intrinsics_module_h #define passes_intrinsics_module_h namespace wasm { extern const char* IntrinsicsModuleWast; } // namespace wasm #endif // passes_intrinsics_module_h binaryen-version_108/src/passes/opt-utils.h000066400000000000000000000062031423707623100211440ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_passes_opt_utils_h #define wasm_passes_opt_utils_h #include #include #include #include #include #include namespace wasm { namespace OptUtils { // Run useful optimizations after inlining new code into a set // of functions. inline void optimizeAfterInlining(const std::unordered_set& funcs, Module* module, PassRunner* parentRunner) { // save the full list of functions on the side std::vector> all; all.swap(module->functions); module->updateMaps(); for (auto& func : funcs) { module->addFunction(func); } PassRunner runner(module, parentRunner->options); runner.setIsNested(true); runner.setValidateGlobally(false); // not a full valid module // this is especially useful after inlining runner.add("precompute-propagate"); runner.addDefaultFunctionOptimizationPasses(); // do all the usual stuff runner.run(); // restore all the funcs for (auto& func : module->functions) { func.release(); } all.swap(module->functions); module->updateMaps(); } struct FunctionRefReplacer : public WalkerPass> { bool isFunctionParallel() override { return true; } using MaybeReplace = std::function; FunctionRefReplacer(MaybeReplace maybeReplace) : maybeReplace(maybeReplace) {} FunctionRefReplacer* create() override { return new FunctionRefReplacer(maybeReplace); } void visitCall(Call* curr) { maybeReplace(curr->target); } void visitRefFunc(RefFunc* curr) { maybeReplace(curr->func); } private: MaybeReplace maybeReplace; }; inline void replaceFunctions(PassRunner* runner, Module& module, const std::map& replacements) { auto maybeReplace = [&](Name& name) { auto iter = replacements.find(name); if (iter != replacements.end()) { name = iter->second; } }; // replace direct calls in code both functions and module elements FunctionRefReplacer replacer(maybeReplace); replacer.run(runner, &module); replacer.runOnModuleCode(runner, &module); // replace in start if (module.start.is()) { maybeReplace(module.start); } // replace in exports for (auto& exp : module.exports) { if (exp->kind == ExternalKind::Function) { maybeReplace(exp->value); } } } } // namespace OptUtils } // namespace wasm #endif // wasm_passes_opt_utils_h binaryen-version_108/src/passes/param-utils.cpp000066400000000000000000000153371423707623100220050ustar00rootroot00000000000000/* * Copyright 2022 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ir/function-utils.h" #include "ir/local-graph.h" #include "ir/possible-constant.h" #include "ir/type-updating.h" #include "support/sorted_vector.h" #include "wasm.h" namespace wasm::ParamUtils { std::unordered_set getUsedParams(Function* func) { LocalGraph localGraph(func); std::unordered_set usedParams; for (auto& [get, sets] : localGraph.getSetses) { if (!func->isParam(get->index)) { continue; } for (auto* set : sets) { // A nullptr value indicates there is no LocalSet* that sets the value, // so it must be the parameter value. if (!set) { usedParams.insert(get->index); } } } return usedParams; } bool removeParameter(const std::vector& funcs, Index index, const std::vector& calls, const std::vector& callRefs, Module* module, PassRunner* runner) { assert(funcs.size() > 0); auto* first = funcs[0]; #ifndef NDEBUG for (auto* func : funcs) { assert(func->type == first->type); } #endif // Check if none of the calls has a param with side effects that we cannot // remove (as if we can remove them, we will simply do that when we remove the // parameter). Note: flattening the IR beforehand can help here. auto hasBadEffects = [&](ExpressionList& operands) { return EffectAnalyzer(runner->options, *module, operands[index]) .hasUnremovableSideEffects(); }; bool callParamsAreValid = std::none_of(calls.begin(), calls.end(), [&](Call* call) { return hasBadEffects(call->operands); }); if (!callParamsAreValid) { return false; } bool callRefParamsAreValid = std::none_of(callRefs.begin(), callRefs.end(), [&](CallRef* call) { return hasBadEffects(call->operands); }); if (!callRefParamsAreValid) { return false; } // The type must be valid for us to handle as a local (since we // replace the parameter with a local). // TODO: if there are no references at all, we can avoid creating a // local bool typeIsValid = TypeUpdating::canHandleAsLocal(first->getLocalType(index)); if (!typeIsValid) { return false; } // We can do it! // Remove the parameter from the function. We must add a new local // for uses of the parameter, but cannot make it use the same index // (in general). auto paramsType = first->getParams(); std::vector params(paramsType.begin(), paramsType.end()); auto type = params[index]; params.erase(params.begin() + index); // TODO: parallelize some of these loops? for (auto* func : funcs) { func->setParams(Type(params)); // It's cumbersome to adjust local names - TODO don't clear them? Builder::clearLocalNames(func); } std::vector newIndexes; for (auto* func : funcs) { newIndexes.push_back(Builder::addVar(func, type)); } // Update local operations. struct LocalUpdater : public PostWalker { Index removedIndex; Index newIndex; LocalUpdater(Function* func, Index removedIndex, Index newIndex) : removedIndex(removedIndex), newIndex(newIndex) { walk(func->body); } void visitLocalGet(LocalGet* curr) { updateIndex(curr->index); } void visitLocalSet(LocalSet* curr) { updateIndex(curr->index); } void updateIndex(Index& index) { if (index == removedIndex) { index = newIndex; } else if (index > removedIndex) { index--; } } }; for (Index i = 0; i < funcs.size(); i++) { auto* func = funcs[i]; if (!func->imported()) { LocalUpdater(funcs[i], index, newIndexes[i]); TypeUpdating::handleNonDefaultableLocals(func, *module); } } // Remove the arguments from the calls. for (auto* call : calls) { call->operands.erase(call->operands.begin() + index); } for (auto* call : callRefs) { call->operands.erase(call->operands.begin() + index); } return true; } SortedVector removeParameters(const std::vector& funcs, SortedVector indexes, const std::vector& calls, const std::vector& callRefs, Module* module, PassRunner* runner) { if (indexes.empty()) { return {}; } assert(funcs.size() > 0); auto* first = funcs[0]; #ifndef NDEBUG for (auto* func : funcs) { assert(func->type == first->type); } #endif // Iterate downwards, as we may remove more than one, and going forwards would // alter the indexes after us. Index i = first->getNumParams() - 1; SortedVector removed; while (1) { if (indexes.has(i)) { if (removeParameter(funcs, i, calls, callRefs, module, runner)) { // Success! removed.insert(i); } } if (i == 0) { break; } i--; } return removed; } SortedVector applyConstantValues(const std::vector& funcs, const std::vector& calls, const std::vector& callRefs, Module* module) { assert(funcs.size() > 0); auto* first = funcs[0]; #ifndef NDEBUG for (auto* func : funcs) { assert(func->type == first->type); } #endif SortedVector optimized; auto numParams = first->getNumParams(); for (Index i = 0; i < numParams; i++) { PossibleConstantValues value; for (auto* call : calls) { value.note(call->operands[i], *module); if (!value.isConstant()) { break; } } for (auto* call : callRefs) { value.note(call->operands[i], *module); if (!value.isConstant()) { break; } } if (!value.isConstant()) { continue; } // Optimize: write the constant value in the function bodies, making them // ignore the parameter's value. Builder builder(*module); for (auto* func : funcs) { func->body = builder.makeSequence( builder.makeLocalSet(i, value.makeExpression(*module)), func->body); } optimized.insert(i); } return optimized; } } // namespace wasm::ParamUtils binaryen-version_108/src/passes/param-utils.h000066400000000000000000000102331423707623100214400ustar00rootroot00000000000000/* * Copyright 2022 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_ir_function_h #define wasm_ir_function_h #include "pass.h" #include "support/sorted_vector.h" #include "wasm.h" // Helper code for passes that manipulate function parameters, specifically // checking if they are used and removing them if so. This is closely tied to // the internals of those passes, and so is not in /ir/ (it would be inside the // pass .cpp file, but there is more than one). namespace wasm::ParamUtils { // Find which parameters are actually used in the function, that is, that the // values arriving in the parameter are read. This ignores values set in the // function, like this: // // function foo(x) { // x = 10; // bar(x); // read of a param index, but not the param value passed in. // } // // This is an actual use: // // function foo(x) { // bar(x); // read of a param value // } std::unordered_set getUsedParams(Function* func); // Try to remove a parameter from a set of functions and replace it with a local // instead. This may not succeed if the parameter type cannot be used in a // local, or if we hit another limitation, in which case this returns false and // does nothing. If we succeed then the parameter is removed both from the // functions and from the calls to it, which are passed in (the caller must // ensure to pass in all relevant calls and call_refs). // // This does not check if removing the parameter would change the semantics // (say, if the parameter's value is used), which the caller is assumed to do. // // This assumes that the set of functions all have the same signature. The main // use cases are either to send a single function, or to send a set of functions // that all have the same heap type (and so if they all do not use some // parameter, it can be removed from them all). // // This does *not* update the types in call_refs. It is assumed that the caller // will be updating types, which is simpler as there may be other locations that // need adjusting and it is easier to do it all in one place. Also, the caller // can update all the types at once throughout the program after making // multiple calls to removeParameter(). bool removeParameter(const std::vector& funcs, Index index, const std::vector& calls, const std::vector& callRefs, Module* module, PassRunner* runner); // The same as removeParameter, but gets a sorted list of indexes. It tries to // remove them all, and returns which we removed. SortedVector removeParameters(const std::vector& funcs, SortedVector indexes, const std::vector& calls, const std::vector& callRefs, Module* module, PassRunner* runner); // Given a set of functions and the calls and call_refs that reach them, find // which parameters are passed the same constant value in all the calls. For // each such parameter, apply it inside the function, that is, do a local.set of // that value in the function. The parameter's incoming value is then ignored, // which allows other optimizations to remove it. // // Returns the indexes that were optimized. SortedVector applyConstantValues(const std::vector& funcs, const std::vector& calls, const std::vector& callRefs, Module* module); } // namespace wasm::ParamUtils #endif // wasm_ir_function_h binaryen-version_108/src/passes/pass.cpp000066400000000000000000001103451423707623100205100ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #ifdef __linux__ #include #endif #include "ir/hashed.h" #include "ir/module-utils.h" #include "pass.h" #include "passes/passes.h" #include "support/colors.h" #include "wasm-debug.h" #include "wasm-io.h" #include "wasm-validator.h" namespace wasm { // PassRegistry PassRegistry::PassRegistry() { registerPasses(); } static PassRegistry singleton; PassRegistry* PassRegistry::get() { return &singleton; } void PassRegistry::registerPass(const char* name, const char* description, Creator create) { assert(passInfos.find(name) == passInfos.end()); passInfos[name] = PassInfo(description, create); } void PassRegistry::registerTestPass(const char* name, const char* description, Creator create) { assert(passInfos.find(name) == passInfos.end()); passInfos[name] = PassInfo(description, create, true); } std::unique_ptr PassRegistry::createPass(std::string name) { if (passInfos.find(name) == passInfos.end()) { Fatal() << "Could not find pass: " << name << "\n"; } std::unique_ptr ret; ret.reset(passInfos[name].create()); ret->name = name; return ret; } std::vector PassRegistry::getRegisteredNames() { std::vector ret; for (auto& [name, _] : passInfos) { ret.push_back(name); } return ret; } std::string PassRegistry::getPassDescription(std::string name) { assert(passInfos.find(name) != passInfos.end()); return passInfos[name].description; } bool PassRegistry::isPassHidden(std::string name) { assert(passInfos.find(name) != passInfos.end()); return passInfos[name].hidden; } // PassRunner void PassRegistry::registerPasses() { registerPass("alignment-lowering", "lower unaligned loads and stores to smaller aligned ones", createAlignmentLoweringPass); registerPass("asyncify", "async/await style transform, allowing pausing and resuming", createAsyncifyPass); registerPass("avoid-reinterprets", "Tries to avoid reinterpret operations via more loads", createAvoidReinterpretsPass); registerPass( "dae", "removes arguments to calls in an lto-like manner", createDAEPass); registerPass("dae-optimizing", "removes arguments to calls in an lto-like manner, and " "optimizes where we removed", createDAEOptimizingPass); registerPass("coalesce-locals", "reduce # of locals by coalescing", createCoalesceLocalsPass); registerPass("coalesce-locals-learning", "reduce # of locals by coalescing and learning", createCoalesceLocalsWithLearningPass); registerPass("code-pushing", "push code forward, potentially making it not always execute", createCodePushingPass); registerPass( "code-folding", "fold code, merging duplicates", createCodeFoldingPass); registerPass("const-hoisting", "hoist repeated constants to a local", createConstHoistingPass); registerPass("cfp", "propagate constant struct field values", createConstantFieldPropagationPass); registerPass( "dce", "removes unreachable code", createDeadCodeEliminationPass); registerPass("dealign", "forces all loads and stores to have alignment 1", createDeAlignPass); registerPass("denan", "instrument the wasm to convert NaNs into 0 at runtime", createDeNaNPass); registerPass( "directize", "turns indirect calls into direct ones", createDirectizePass); registerPass( "dfo", "optimizes using the DataFlow SSA IR", createDataFlowOptsPass); registerPass("dwarfdump", "dump DWARF debug info sections from the read binary", createDWARFDumpPass); registerPass("duplicate-import-elimination", "removes duplicate imports", createDuplicateImportEliminationPass); registerPass("duplicate-function-elimination", "removes duplicate functions", createDuplicateFunctionEliminationPass); registerPass("emit-target-features", "emit the target features section in the output", createEmitTargetFeaturesPass); registerPass("extract-function", "leaves just one function (useful for debugging)", createExtractFunctionPass); registerPass("extract-function-index", "leaves just one function selected by index", createExtractFunctionIndexPass); registerPass( "flatten", "flattens out code, removing nesting", createFlattenPass); registerPass("fpcast-emu", "emulates function pointer casts, allowing incorrect indirect " "calls to (sometimes) work", createFuncCastEmulationPass); registerPass( "func-metrics", "reports function metrics", createFunctionMetricsPass); registerPass("generate-dyncalls", "generate dynCall fuctions used by emscripten ABI", createGenerateDynCallsPass); registerPass( "generate-i64-dyncalls", "generate dynCall functions used by emscripten ABI, but only for " "functions with i64 in their signature (which cannot be invoked " "via the wasm table without JavaScript BigInt support).", createGenerateI64DynCallsPass); registerPass( "generate-stack-ir", "generate Stack IR", createGenerateStackIRPass); registerPass( "global-refining", "refine the types of globals", createGlobalRefiningPass); registerPass( "gto", "globally optimize GC types", createGlobalTypeOptimizationPass); registerPass("type-refining", "apply more specific subtypes to type fields where possible", createTypeRefiningPass); registerPass( "heap2local", "replace GC allocations with locals", createHeap2LocalPass); registerPass( "inline-main", "inline __original_main into main", createInlineMainPass); registerPass("inlining", "inline functions (you probably want inlining-optimizing)", createInliningPass); registerPass("inlining-optimizing", "inline functions and optimizes where we inlined", createInliningOptimizingPass); registerPass("intrinsic-lowering", "lower away binaryen intrinsics", createIntrinsicLoweringPass); registerPass("legalize-js-interface", "legalizes i64 types on the import/export boundary", createLegalizeJSInterfacePass); registerPass("legalize-js-interface-minimally", "legalizes i64 types on the import/export boundary in a minimal " "manner, only on things only JS will call", createLegalizeJSInterfaceMinimallyPass); registerPass("local-cse", "common subexpression elimination inside basic blocks", createLocalCSEPass); registerPass("local-subtyping", "apply more specific subtypes to locals where possible", createLocalSubtypingPass); registerPass("log-execution", "instrument the build with logging of where execution goes", createLogExecutionPass); registerPass("i64-to-i32-lowering", "lower all uses of i64s to use i32s instead", createI64ToI32LoweringPass); registerPass( "instrument-locals", "instrument the build with code to intercept all loads and stores", createInstrumentLocalsPass); registerPass( "instrument-memory", "instrument the build with code to intercept all loads and stores", createInstrumentMemoryPass); registerPass( "licm", "loop invariant code motion", createLoopInvariantCodeMotionPass); registerPass("limit-segments", "attempt to merge segments to fit within web limits", createLimitSegmentsPass); registerPass("memory64-lowering", "lower loads and stores to a 64-bit memory to instead use a " "32-bit one", createMemory64LoweringPass); registerPass("memory-packing", "packs memory into separate segments, skipping zeros", createMemoryPackingPass); registerPass( "merge-blocks", "merges blocks to their parents", createMergeBlocksPass); registerPass("merge-similar-functions", "merges similar functions when benefical", createMergeSimilarFunctionsPass); registerPass( "merge-locals", "merges locals when beneficial", createMergeLocalsPass); registerPass("metrics", "reports metrics", createMetricsPass); registerPass("minify-imports", "minifies import names (only those, and not export names), and " "emits a mapping to the minified ones", createMinifyImportsPass); registerPass("minify-imports-and-exports", "minifies both import and export names, and emits a mapping to " "the minified ones", createMinifyImportsAndExportsPass); registerPass("minify-imports-and-exports-and-modules", "minifies both import and export names, and emits a mapping to " "the minified ones, and minifies the modules as well", createMinifyImportsAndExportsAndModulesPass); registerPass("mod-asyncify-always-and-only-unwind", "apply the assumption that asyncify imports always unwind, " "and we never rewind", createModAsyncifyAlwaysOnlyUnwindPass); registerPass("mod-asyncify-never-unwind", "apply the assumption that asyncify never unwinds", createModAsyncifyNeverUnwindPass); registerPass("nm", "name list", createNameListPass); registerPass("name-types", "(re)name all heap types", createNameTypesPass); registerPass("once-reduction", "reduces calls to code that only runs once", createOnceReductionPass); registerPass("optimize-added-constants", "optimizes added constants into load/store offsets", createOptimizeAddedConstantsPass); registerPass("optimize-added-constants-propagate", "optimizes added constants into load/store offsets, propagating " "them across locals too", createOptimizeAddedConstantsPropagatePass); registerPass("optimize-instructions", "optimizes instruction combinations", createOptimizeInstructionsPass); registerPass( "optimize-stack-ir", "optimize Stack IR", createOptimizeStackIRPass); registerPass("pick-load-signs", "pick load signs based on their uses", createPickLoadSignsPass); registerPass( "poppify", "Tranform Binaryen IR into Poppy IR", createPoppifyPass); registerPass("post-emscripten", "miscellaneous optimizations for Emscripten-generated code", createPostEmscriptenPass); registerPass("optimize-for-js", "early optimize of the instruction combinations for js", createOptimizeForJSPass); registerPass("precompute", "computes compile-time evaluatable expressions", createPrecomputePass); registerPass("precompute-propagate", "computes compile-time evaluatable expressions and propagates " "them through locals", createPrecomputePropagatePass); registerPass("print", "print in s-expression format", createPrinterPass); registerPass("print-minified", "print in minified s-expression format", createMinifiedPrinterPass); registerPass("print-features", "print options for enabled features", createPrintFeaturesPass); registerPass( "print-full", "print in full s-expression format", createFullPrinterPass); registerPass( "print-call-graph", "print call graph", createPrintCallGraphPass); // Register PrintFunctionMap using its normal name. registerPass("print-function-map", "print a map of function indexes to names", createPrintFunctionMapPass); // Also register it as "symbolmap" so that wasm-opt --symbolmap=foo is the // same as wasm-as --symbolmap=foo even though the latter is not a pass // (wasm-as cannot run arbitrary passes). // TODO: switch emscripten to this name, then remove the old one registerPass( "symbolmap", "(alias for print-function-map)", createPrintFunctionMapPass); registerPass("print-stack-ir", "print out Stack IR (useful for internal debugging)", createPrintStackIRPass); registerPass("remove-non-js-ops", "removes operations incompatible with js", createRemoveNonJSOpsPass); registerPass("remove-imports", "removes imports and replaces them with nops", createRemoveImportsPass); registerPass( "remove-memory", "removes memory segments", createRemoveMemoryPass); registerPass("remove-unused-brs", "removes breaks from locations that are not needed", createRemoveUnusedBrsPass); registerPass("remove-unused-module-elements", "removes unused module elements", createRemoveUnusedModuleElementsPass); registerPass("remove-unused-nonfunction-module-elements", "removes unused module elements that are not functions", createRemoveUnusedNonFunctionModuleElementsPass); registerPass("remove-unused-names", "removes names from locations that are never branched to", createRemoveUnusedNamesPass); registerPass("reorder-functions", "sorts functions by access frequency", createReorderFunctionsPass); registerPass("reorder-locals", "sorts locals by access frequency", createReorderLocalsPass); registerPass("rereloop", "re-optimize control flow using the relooper algorithm", createReReloopPass); registerPass( "rse", "remove redundant local.sets", createRedundantSetEliminationPass); registerPass("roundtrip", "write the module to binary, then read it", createRoundTripPass); registerPass("safe-heap", "instrument loads and stores to check for invalid behavior", createSafeHeapPass); registerPass("set-globals", "sets specified globals to specified values", createSetGlobalsPass); registerPass("signature-pruning", "remove params from function signature types where possible", createSignaturePruningPass); registerPass("signature-refining", "apply more specific subtypes to signature types where possible", createSignatureRefiningPass); registerPass("simplify-globals", "miscellaneous globals-related optimizations", createSimplifyGlobalsPass); registerPass("simplify-globals-optimizing", "miscellaneous globals-related optimizations, and optimizes " "where we replaced global.gets with constants", createSimplifyGlobalsOptimizingPass); registerPass("simplify-locals", "miscellaneous locals-related optimizations", createSimplifyLocalsPass); registerPass("simplify-locals-nonesting", "miscellaneous locals-related optimizations (no nesting at all; " "preserves flatness)", createSimplifyLocalsNoNestingPass); registerPass("simplify-locals-notee", "miscellaneous locals-related optimizations (no tees)", createSimplifyLocalsNoTeePass); registerPass("simplify-locals-nostructure", "miscellaneous locals-related optimizations (no structure)", createSimplifyLocalsNoStructurePass); registerPass( "simplify-locals-notee-nostructure", "miscellaneous locals-related optimizations (no tees or structure)", createSimplifyLocalsNoTeeNoStructurePass); registerPass("souperify", "emit Souper IR in text form", createSouperifyPass); registerPass("souperify-single-use", "emit Souper IR in text form (single-use nodes only)", createSouperifySingleUsePass); registerPass("stub-unsupported-js", "stub out unsupported JS operations", createStubUnsupportedJSOpsPass); registerPass("ssa", "ssa-ify variables so that they have a single assignment", createSSAifyPass); registerPass( "ssa-nomerge", "ssa-ify variables so that they have a single assignment, ignoring merges", createSSAifyNoMergePass); registerPass( "strip", "deprecated; same as strip-debug", createStripDebugPass); registerPass("stack-check", "enforce limits on llvm's __stack_pointer global", createStackCheckPass); registerPass("strip-debug", "strip debug info (including the names section)", createStripDebugPass); registerPass("strip-dwarf", "strip dwarf debug info", createStripDWARFPass); registerPass("strip-producers", "strip the wasm producers section", createStripProducersPass); registerPass("strip-target-features", "strip the wasm target features section", createStripTargetFeaturesPass); registerPass("trap-mode-clamp", "replace trapping operations with clamping semantics", createTrapModeClamp); registerPass("trap-mode-js", "replace trapping operations with js semantics", createTrapModeJS); registerPass("untee", "removes local.tees, replacing them with sets and gets", createUnteePass); registerPass("vacuum", "removes obviously unneeded code", createVacuumPass); // registerPass( // "lower-i64", "lowers i64 into pairs of i32s", createLowerInt64Pass); // Register passes used for internal testing. These don't show up in --help. registerTestPass("catch-pop-fixup", "fixup nested pops within catches", createCatchPopFixupPass); } void PassRunner::addIfNoDWARFIssues(std::string passName) { auto pass = PassRegistry::get()->createPass(passName); if (!pass->invalidatesDWARF() || !shouldPreserveDWARF()) { doAdd(std::move(pass)); } } void PassRunner::addDefaultOptimizationPasses() { addDefaultGlobalOptimizationPrePasses(); addDefaultFunctionOptimizationPasses(); addDefaultGlobalOptimizationPostPasses(); } void PassRunner::addDefaultFunctionOptimizationPasses() { // All the additions here are optional if DWARF must be preserved. That is, // when DWARF is relevant we run fewer optimizations. // FIXME: support DWARF in all of them. // Untangling to semi-ssa form is helpful (but best to ignore merges // so as to not introduce new copies). if (options.optimizeLevel >= 3 || options.shrinkLevel >= 1) { addIfNoDWARFIssues("ssa-nomerge"); } // if we are willing to work very very hard, flatten the IR and do opts // that depend on flat IR if (options.optimizeLevel >= 4) { addIfNoDWARFIssues("flatten"); // LocalCSE is particularly useful after flatten (see comment in the pass // itself), but we must simplify locals a little first (as flatten adds many // new and redundant ones, which make things seem different if we do not // run some amount of simplify-locals first). addIfNoDWARFIssues("simplify-locals-notee-nostructure"); addIfNoDWARFIssues("local-cse"); // TODO: add rereloop etc. here } addIfNoDWARFIssues("dce"); addIfNoDWARFIssues("remove-unused-names"); addIfNoDWARFIssues("remove-unused-brs"); addIfNoDWARFIssues("remove-unused-names"); addIfNoDWARFIssues("optimize-instructions"); if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { addIfNoDWARFIssues("pick-load-signs"); } // early propagation if (options.optimizeLevel >= 3 || options.shrinkLevel >= 2) { addIfNoDWARFIssues("precompute-propagate"); } else { addIfNoDWARFIssues("precompute"); } if (options.lowMemoryUnused) { if (options.optimizeLevel >= 3 || options.shrinkLevel >= 1) { addIfNoDWARFIssues("optimize-added-constants-propagate"); } else { addIfNoDWARFIssues("optimize-added-constants"); } } if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { addIfNoDWARFIssues("code-pushing"); } // don't create if/block return values yet, as coalesce can remove copies that // that could inhibit addIfNoDWARFIssues("simplify-locals-nostructure"); addIfNoDWARFIssues("vacuum"); // previous pass creates garbage addIfNoDWARFIssues("reorder-locals"); // simplify-locals opens opportunities for optimizations addIfNoDWARFIssues("remove-unused-brs"); if (options.optimizeLevel > 1 && wasm->features.hasGC()) { addIfNoDWARFIssues("heap2local"); } // if we are willing to work hard, also optimize copies before coalescing if (options.optimizeLevel >= 3 || options.shrinkLevel >= 2) { addIfNoDWARFIssues("merge-locals"); // very slow on e.g. sqlite } if (options.optimizeLevel > 1 && wasm->features.hasGC()) { // Coalescing may prevent subtyping (as a coalesced local must have the // supertype of all those combined into it), so subtype first. // TODO: when optimizing for size, maybe the order should reverse? addIfNoDWARFIssues("local-subtyping"); } addIfNoDWARFIssues("coalesce-locals"); if (options.optimizeLevel >= 3 || options.shrinkLevel >= 1) { addIfNoDWARFIssues("local-cse"); } addIfNoDWARFIssues("simplify-locals"); addIfNoDWARFIssues("vacuum"); addIfNoDWARFIssues("reorder-locals"); addIfNoDWARFIssues("coalesce-locals"); addIfNoDWARFIssues("reorder-locals"); addIfNoDWARFIssues("vacuum"); if (options.optimizeLevel >= 3 || options.shrinkLevel >= 1) { addIfNoDWARFIssues("code-folding"); } addIfNoDWARFIssues("merge-blocks"); // makes remove-unused-brs more effective addIfNoDWARFIssues( "remove-unused-brs"); // coalesce-locals opens opportunities addIfNoDWARFIssues( "remove-unused-names"); // remove-unused-brs opens opportunities addIfNoDWARFIssues("merge-blocks"); // clean up remove-unused-brs new blocks // late propagation if (options.optimizeLevel >= 3 || options.shrinkLevel >= 2) { addIfNoDWARFIssues("precompute-propagate"); } else { addIfNoDWARFIssues("precompute"); } addIfNoDWARFIssues("optimize-instructions"); if (options.optimizeLevel >= 2 || options.shrinkLevel >= 1) { addIfNoDWARFIssues( "rse"); // after all coalesce-locals, and before a final vacuum } addIfNoDWARFIssues("vacuum"); // just to be safe } void PassRunner::addDefaultGlobalOptimizationPrePasses() { addIfNoDWARFIssues("duplicate-function-elimination"); addIfNoDWARFIssues("memory-packing"); if (options.optimizeLevel >= 2) { addIfNoDWARFIssues("once-reduction"); } if (wasm->features.hasGC() && getTypeSystem() == TypeSystem::Nominal && options.optimizeLevel >= 2) { addIfNoDWARFIssues("type-refining"); addIfNoDWARFIssues("signature-pruning"); addIfNoDWARFIssues("signature-refining"); addIfNoDWARFIssues("global-refining"); // Global type optimization can remove fields that are not needed, which can // remove ref.funcs that were once assigned to vtables but are no longer // needed, which can allow more code to be removed globally. After those, // constant field propagation can be more effective. addIfNoDWARFIssues("gto"); addIfNoDWARFIssues("remove-unused-module-elements"); addIfNoDWARFIssues("cfp"); } } void PassRunner::addDefaultGlobalOptimizationPostPasses() { if (options.optimizeLevel >= 2 || options.shrinkLevel >= 1) { addIfNoDWARFIssues("dae-optimizing"); } if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { addIfNoDWARFIssues("inlining-optimizing"); } // Optimizations show more functions as duplicate, so run this here in Post. addIfNoDWARFIssues("duplicate-function-elimination"); addIfNoDWARFIssues("duplicate-import-elimination"); // perform after the number of functions is reduced by inlining-optimizing if (options.shrinkLevel >= 2) { addIfNoDWARFIssues("merge-similar-functions"); } if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { addIfNoDWARFIssues("simplify-globals-optimizing"); } else { addIfNoDWARFIssues("simplify-globals"); } addIfNoDWARFIssues("remove-unused-module-elements"); // may allow more inlining/dae/etc., need --converge for that addIfNoDWARFIssues("directize"); // perform Stack IR optimizations here, at the very end of the // optimization pipeline if (options.optimizeLevel >= 2 || options.shrinkLevel >= 1) { addIfNoDWARFIssues("generate-stack-ir"); addIfNoDWARFIssues("optimize-stack-ir"); } } static void dumpWast(Name name, Module* wasm) { // write out the wat static int counter = 0; std::string numstr = std::to_string(counter++); while (numstr.size() < 3) { numstr = '0' + numstr; } auto fullName = std::string("byn-"); #ifdef __linux__ // TODO: use _getpid() on windows, elsewhere? fullName += std::to_string(getpid()) + '-'; #endif fullName += numstr + "-" + name.str; Colors::setEnabled(false); ModuleWriter writer; writer.writeText(*wasm, fullName + ".wast"); writer.writeBinary(*wasm, fullName + ".wasm"); } void PassRunner::run() { assert(!ran); ran = true; static const int passDebug = getPassDebug(); // Emit logging information when asked for. At passDebug level 1+ we log // the main passes, while in 2 we also log nested ones. Note that for // nested ones we can only emit their name - we can't validate, or save the // file, or print, as the wasm may be in an intermediate state that is not // valid. if (options.debug || (passDebug == 2 || (passDebug && !isNested))) { // for debug logging purposes, run each pass in full before running the // other auto totalTime = std::chrono::duration(0); WasmValidator::Flags validationFlags = WasmValidator::Minimal; if (options.validateGlobally) { validationFlags = validationFlags | WasmValidator::Globally; } auto what = isNested ? "nested passes" : "passes"; std::cerr << "[PassRunner] running " << what << std::endl; size_t padding = 0; for (auto& pass : passes) { padding = std::max(padding, pass->name.size()); } if (passDebug >= 3 && !isNested) { dumpWast("before", wasm); } for (auto& pass : passes) { // ignoring the time, save a printout of the module before, in case this // pass breaks it, so we can print the before and after std::stringstream moduleBefore; if (passDebug == 2 && !isNested) { moduleBefore << *wasm << '\n'; } // prepare to run std::cerr << "[PassRunner] running pass: " << pass->name << "... "; for (size_t i = 0; i < padding - pass->name.size(); i++) { std::cerr << ' '; } auto before = std::chrono::steady_clock::now(); if (pass->isFunctionParallel()) { // function-parallel passes should get a new instance per function ModuleUtils::iterDefinedFunctions( *wasm, [&](Function* func) { runPassOnFunction(pass.get(), func); }); } else { runPass(pass.get()); } auto after = std::chrono::steady_clock::now(); std::chrono::duration diff = after - before; std::cerr << diff.count() << " seconds." << std::endl; totalTime += diff; if (options.validate && !isNested) { // validate, ignoring the time std::cerr << "[PassRunner] (validating)\n"; if (!WasmValidator().validate(*wasm, validationFlags)) { std::cout << *wasm << '\n'; if (passDebug >= 2) { Fatal() << "Last pass (" << pass->name << ") broke validation. Here is the module before: \n" << moduleBefore.str() << "\n"; } else { Fatal() << "Last pass (" << pass->name << ") broke validation. Run with BINARYEN_PASS_DEBUG=2 " "in the env to see the earlier state, or 3 to dump " "byn-* files for each pass\n"; } } } if (passDebug >= 3) { dumpWast(pass->name, wasm); } } std::cerr << "[PassRunner] " << what << " took " << totalTime.count() << " seconds." << std::endl; if (options.validate && !isNested) { std::cerr << "[PassRunner] (final validation)\n"; if (!WasmValidator().validate(*wasm, validationFlags)) { std::cout << *wasm << '\n'; Fatal() << "final module does not validate\n"; } } } else { // non-debug normal mode, run them in an optimal manner - for locality it is // better to run as many passes as possible on a single function before // moving to the next std::vector stack; auto flush = [&]() { if (stack.size() > 0) { // run the stack of passes on all the functions, in parallel size_t num = ThreadPool::get()->size(); std::vector> doWorkers; std::atomic nextFunction; nextFunction.store(0); size_t numFunctions = wasm->functions.size(); for (size_t i = 0; i < num; i++) { doWorkers.push_back([&]() { auto index = nextFunction.fetch_add(1); // get the next task, if there is one if (index >= numFunctions) { return ThreadWorkState::Finished; // nothing left } Function* func = this->wasm->functions[index].get(); if (!func->imported()) { // do the current task: run all passes on this function for (auto* pass : stack) { runPassOnFunction(pass, func); } } if (index + 1 == numFunctions) { return ThreadWorkState::Finished; // we did the last one } return ThreadWorkState::More; }); } ThreadPool::get()->work(doWorkers); } stack.clear(); }; for (auto& pass : passes) { if (pass->isFunctionParallel()) { stack.push_back(pass.get()); } else { flush(); runPass(pass.get()); } } flush(); } } void PassRunner::runOnFunction(Function* func) { if (options.debug) { std::cerr << "[PassRunner] running passes on function " << func->name << std::endl; } for (auto& pass : passes) { runPassOnFunction(pass.get(), func); } } void PassRunner::doAdd(std::unique_ptr pass) { if (pass->invalidatesDWARF() && shouldPreserveDWARF()) { std::cerr << "warning: running pass '" << pass->name << "' which is not fully compatible with DWARF\n"; } if (passRemovesDebugInfo(pass->name)) { addedPassesRemovedDWARF = true; } passes.emplace_back(std::move(pass)); } // Checks that the state is valid before and after a // pass runs on a function. We run these extra checks when // pass-debug mode is enabled. struct AfterEffectFunctionChecker { Function* func; Name name; // Check Stack IR state: if the main IR changes, there should be no // stack IR, as the stack IR would be wrong. bool beganWithStackIR; size_t originalFunctionHash; // In the creator we can scan the state of the module and function before the // pass runs. AfterEffectFunctionChecker(Function* func) : func(func), name(func->name) { beganWithStackIR = func->stackIR != nullptr; if (beganWithStackIR) { originalFunctionHash = FunctionHasher::hashFunction(func); } } // This is called after the pass is run, at which time we can check things. void check() { assert(func->name == name); // no global module changes should have occurred if (beganWithStackIR && func->stackIR) { auto after = FunctionHasher::hashFunction(func); if (after != originalFunctionHash) { Fatal() << "[PassRunner] PASS_DEBUG check failed: had Stack IR before " "and after the pass ran, and the pass modified the main IR, " "which invalidates Stack IR - pass should have been marked " "'modifiesBinaryenIR'"; } } } }; // Runs checks on the entire module, in a non-function-parallel pass. // In particular, in such a pass functions may be removed or renamed, track // that. struct AfterEffectModuleChecker { Module* module; std::vector checkers; bool beganWithAnyStackIR; AfterEffectModuleChecker(Module* module) : module(module) { for (auto& func : module->functions) { checkers.emplace_back(func.get()); } beganWithAnyStackIR = hasAnyStackIR(); } void check() { if (beganWithAnyStackIR && hasAnyStackIR()) { // If anything changed to the functions, that's not good. if (checkers.size() != module->functions.size()) { error(); } for (Index i = 0; i < checkers.size(); i++) { // Did a pointer change? (a deallocated function could cause that) if (module->functions[i].get() != checkers[i].func || module->functions[i]->body != checkers[i].func->body) { error(); } // Did a name change? if (module->functions[i]->name != checkers[i].name) { error(); } } // Global function state appears to not have been changed: the same // functions are there. Look into their contents. for (auto& checker : checkers) { checker.check(); } } } void error() { Fatal() << "[PassRunner] PASS_DEBUG check failed: had Stack IR before and " "after the pass ran, and the pass modified global function " "state - pass should have been marked 'modifiesBinaryenIR'"; } bool hasAnyStackIR() { for (auto& func : module->functions) { if (func->stackIR) { return true; } } return false; } }; void PassRunner::runPass(Pass* pass) { std::unique_ptr checker; if (getPassDebug()) { checker = std::unique_ptr( new AfterEffectModuleChecker(wasm)); } pass->run(this, wasm); handleAfterEffects(pass); if (getPassDebug()) { checker->check(); } } void PassRunner::runPassOnFunction(Pass* pass, Function* func) { assert(pass->isFunctionParallel()); // function-parallel passes get a new instance per function auto instance = std::unique_ptr(pass->create()); std::unique_ptr checker; if (getPassDebug()) { checker = std::unique_ptr( new AfterEffectFunctionChecker(func)); } instance->runOnFunction(this, wasm, func); handleAfterEffects(pass, func); if (getPassDebug()) { checker->check(); } } void PassRunner::handleAfterEffects(Pass* pass, Function* func) { if (pass->modifiesBinaryenIR()) { // If Binaryen IR is modified, Stack IR must be cleared - it would // be out of sync in a potentially dangerous way. if (func) { func->stackIR.reset(nullptr); } else { for (auto& func : wasm->functions) { func->stackIR.reset(nullptr); } } } } int PassRunner::getPassDebug() { static const int passDebug = getenv("BINARYEN_PASS_DEBUG") ? atoi(getenv("BINARYEN_PASS_DEBUG")) : 0; return passDebug; } bool PassRunner::passRemovesDebugInfo(const std::string& name) { return name == "strip" || name == "strip-debug" || name == "strip-dwarf"; } bool PassRunner::shouldPreserveDWARF() { // Check if the debugging subsystem wants to preserve DWARF. if (!Debug::shouldPreserveDWARF(options, *wasm)) { return false; } // We may need DWARF. Check if one of our previous passes would remove it // anyhow, in which case, there is nothing to preserve. if (addedPassesRemovedDWARF) { return false; } return true; } } // namespace wasm binaryen-version_108/src/passes/passes.h000066400000000000000000000113071423707623100205030ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_passes_h #define wasm_passes_h namespace wasm { class Pass; // Normal passes: Pass* createAlignmentLoweringPass(); Pass* createAsyncifyPass(); Pass* createAvoidReinterpretsPass(); Pass* createCoalesceLocalsPass(); Pass* createCoalesceLocalsWithLearningPass(); Pass* createCodeFoldingPass(); Pass* createCodePushingPass(); Pass* createConstHoistingPass(); Pass* createConstantFieldPropagationPass(); Pass* createDAEPass(); Pass* createDAEOptimizingPass(); Pass* createDataFlowOptsPass(); Pass* createDeadCodeEliminationPass(); Pass* createDeNaNPass(); Pass* createDeAlignPass(); Pass* createDirectizePass(); Pass* createDWARFDumpPass(); Pass* createDuplicateImportEliminationPass(); Pass* createDuplicateFunctionEliminationPass(); Pass* createEmitTargetFeaturesPass(); Pass* createExtractFunctionPass(); Pass* createExtractFunctionIndexPass(); Pass* createFlattenPass(); Pass* createFuncCastEmulationPass(); Pass* createFullPrinterPass(); Pass* createFunctionMetricsPass(); Pass* createGenerateDynCallsPass(); Pass* createGenerateI64DynCallsPass(); Pass* createGenerateStackIRPass(); Pass* createGlobalRefiningPass(); Pass* createGlobalTypeOptimizationPass(); Pass* createHeap2LocalPass(); Pass* createI64ToI32LoweringPass(); Pass* createInlineMainPass(); Pass* createInliningPass(); Pass* createInliningOptimizingPass(); Pass* createLegalizeJSInterfacePass(); Pass* createLegalizeJSInterfaceMinimallyPass(); Pass* createLimitSegmentsPass(); Pass* createLocalCSEPass(); Pass* createLocalSubtypingPass(); Pass* createLogExecutionPass(); Pass* createIntrinsicLoweringPass(); Pass* createInstrumentLocalsPass(); Pass* createInstrumentMemoryPass(); Pass* createLoopInvariantCodeMotionPass(); Pass* createMemory64LoweringPass(); Pass* createMemoryPackingPass(); Pass* createMergeBlocksPass(); Pass* createMergeSimilarFunctionsPass(); Pass* createMergeLocalsPass(); Pass* createMinifiedPrinterPass(); Pass* createMinifyImportsPass(); Pass* createMinifyImportsAndExportsPass(); Pass* createMinifyImportsAndExportsAndModulesPass(); Pass* createMetricsPass(); Pass* createNameListPass(); Pass* createNameTypesPass(); Pass* createOnceReductionPass(); Pass* createOptimizeAddedConstantsPass(); Pass* createOptimizeAddedConstantsPropagatePass(); Pass* createOptimizeInstructionsPass(); Pass* createOptimizeForJSPass(); Pass* createOptimizeStackIRPass(); Pass* createPickLoadSignsPass(); Pass* createModAsyncifyAlwaysOnlyUnwindPass(); Pass* createModAsyncifyNeverUnwindPass(); Pass* createPoppifyPass(); Pass* createPostEmscriptenPass(); Pass* createPrecomputePass(); Pass* createPrecomputePropagatePass(); Pass* createPrinterPass(); Pass* createPrintCallGraphPass(); Pass* createPrintFeaturesPass(); Pass* createPrintFunctionMapPass(); Pass* createPrintStackIRPass(); Pass* createRemoveNonJSOpsPass(); Pass* createRemoveImportsPass(); Pass* createRemoveMemoryPass(); Pass* createRemoveUnusedBrsPass(); Pass* createRemoveUnusedModuleElementsPass(); Pass* createRemoveUnusedNonFunctionModuleElementsPass(); Pass* createRemoveUnusedNamesPass(); Pass* createReorderFunctionsPass(); Pass* createReorderLocalsPass(); Pass* createReReloopPass(); Pass* createRedundantSetEliminationPass(); Pass* createRoundTripPass(); Pass* createSafeHeapPass(); Pass* createSetGlobalsPass(); Pass* createSignaturePruningPass(); Pass* createSignatureRefiningPass(); Pass* createSimplifyLocalsPass(); Pass* createSimplifyGlobalsPass(); Pass* createSimplifyGlobalsOptimizingPass(); Pass* createSimplifyLocalsNoNestingPass(); Pass* createSimplifyLocalsNoTeePass(); Pass* createSimplifyLocalsNoStructurePass(); Pass* createSimplifyLocalsNoTeeNoStructurePass(); Pass* createStackCheckPass(); Pass* createStripDebugPass(); Pass* createStripDWARFPass(); Pass* createStripProducersPass(); Pass* createStripTargetFeaturesPass(); Pass* createSouperifyPass(); Pass* createSouperifySingleUsePass(); Pass* createStubUnsupportedJSOpsPass(); Pass* createSSAifyPass(); Pass* createSSAifyNoMergePass(); Pass* createTrapModeClamp(); Pass* createTrapModeJS(); Pass* createTypeRefiningPass(); Pass* createUnteePass(); Pass* createVacuumPass(); // Test passes: Pass* createCatchPopFixupPass(); } // namespace wasm #endif binaryen-version_108/src/passes/test_passes.cpp000066400000000000000000000025441423707623100221000ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // This file contains passes used for internal testing. This file can be used to // test utility functions separately. // #include "ir/eh-utils.h" #include "pass.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { namespace { // Pass to test EHUtil::handleBlockNestedPops function struct CatchPopFixup : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new CatchPopFixup; } void doWalkFunction(Function* func) { EHUtils::handleBlockNestedPops(func, *getModule()); } void run(PassRunner* runner, Module* module) override {} }; } // anonymous namespace Pass* createCatchPopFixupPass() { return new CatchPopFixup(); } } // namespace wasm binaryen-version_108/src/passes/wasm-intrinsics.wat000066400000000000000000000557301423707623100227130ustar00rootroot00000000000000;; A large WAST blob which contains the implementations of all the intrinsics ;; that we inject as part of this module. This blob was generated from a Rust ;; program [1] which uses the Rust compiler-builtins project. It's not ;; necessarily perfect but gets the job done! The idea here is that we inject ;; these pretty early so they can continue to be optimized by further passes ;; (aka inlining and whatnot) ;; ;; LOCAL MODS done by hand afterwards: ;; * Remove hardcoded address 1024 which was used for temporary data; instead ;; add $wasm-intrinsics-temp-i64 global for that. ;; * Fix function type of __wasm_ctz_i64, which was wrong somehow, ;; i32, i32 => i32 instead of i64 => i64 ;; * Remove unnecessary memory import. ;; ;; [1]: https://gist.github.com/alexcrichton/e7ea67bcdd17ce4b6254e66f77165690 (module (type $0 (func (param i64 i64) (result i64))) (type $1 (func (param f32) (result f32))) (type $2 (func (param f64) (result f64))) (type $3 (func (param i32) (result i32))) (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i64) (result i64))) (export "__wasm_i64_sdiv" (func $__wasm_i64_sdiv)) (export "__wasm_i64_udiv" (func $__wasm_i64_udiv)) (export "__wasm_i64_srem" (func $__wasm_i64_srem)) (export "__wasm_i64_urem" (func $__wasm_i64_urem)) (export "__wasm_i64_mul" (func $__wasm_i64_mul)) (export "__wasm_ctz_i32" (func $__wasm_ctz_i32)) (export "__wasm_ctz_i64" (func $__wasm_ctz_i64)) (export "__wasm_rotl_i32" (func $__wasm_rotl_i32)) (export "__wasm_rotr_i32" (func $__wasm_rotr_i32)) (export "__wasm_rotl_i64" (func $__wasm_rotl_i64)) (export "__wasm_rotr_i64" (func $__wasm_rotr_i64)) (export "__wasm_nearest_f32" (func $__wasm_nearest_f32)) (export "__wasm_nearest_f64" (func $__wasm_nearest_f64)) (export "__wasm_popcnt_i32" (func $__wasm_popcnt_i32)) (export "__wasm_popcnt_i64" (func $__wasm_popcnt_i64)) (global $__wasm-intrinsics-temp-i64 (mut i64) (i64.const 0)) ;; lowering of the i32.popcnt instruction, counts the number of bits set in the ;; input and returns the result (func $__wasm_popcnt_i32 (param $var$0 i32) (result i32) (local $var$1 i32) (block $label$1 (result i32) (loop $label$2 (drop (br_if $label$1 (local.get $var$1) (i32.eqz (local.get $var$0) ) ) ) (local.set $var$0 (i32.and (local.get $var$0) (i32.sub (local.get $var$0) (i32.const 1) ) ) ) (local.set $var$1 (i32.add (local.get $var$1) (i32.const 1) ) ) (br $label$2) ) ) ) ;; lowering of the i64.popcnt instruction, counts the number of bits set in the ;; input and returns the result (func $__wasm_popcnt_i64 (param $var$0 i64) (result i64) (local $var$1 i64) (block $label$1 (result i64) (loop $label$2 (drop (br_if $label$1 (local.get $var$1) (i64.eqz (local.get $var$0) ) ) ) (local.set $var$0 (i64.and (local.get $var$0) (i64.sub (local.get $var$0) (i64.const 1) ) ) ) (local.set $var$1 (i64.add (local.get $var$1) (i64.const 1) ) ) (br $label$2) ) ) ) ;; lowering of the i64.div_s instruction, return $var0 / $var$1 (func $__wasm_i64_sdiv (; 0 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (call $_ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E (local.get $var$0) (local.get $var$1) ) ) ;; lowering of the i64.div_u instruction, return $var0 / $var$1 (func $__wasm_i64_udiv (; 1 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (call $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E (local.get $var$0) (local.get $var$1) ) ) ;; lowering of the i64.rem_s instruction, return $var0 % $var$1 (func $__wasm_i64_srem (; 2 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (call $_ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E (local.get $var$0) (local.get $var$1) ) ) ;; lowering of the i64.rem_u instruction, return $var0 % $var$1 (func $__wasm_i64_urem (; 3 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (drop (call $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E (local.get $var$0) (local.get $var$1) ) ) (global.get $__wasm-intrinsics-temp-i64) ) ;; lowering of the i64.mul instruction, return $var0 * $var$1 (func $__wasm_i64_mul (; 4 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (call $_ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE (local.get $var$0) (local.get $var$1) ) ) ;; lowering of the i32.ctz instruction, counting the number of zeros in $var$0 (func $__wasm_ctz_i32 (; 7 ;) (type $3) (param $var$0 i32) (result i32) (if (local.get $var$0) (return (i32.sub (i32.const 31) (i32.clz (i32.xor (i32.add (local.get $var$0) (i32.const -1) ) (local.get $var$0) ) ) ) ) ) (i32.const 32) ) ;; lowering of the i64.ctz instruction, counting the number of zeros in $var$0 (func $__wasm_ctz_i64 (; 8 ;) (type $5) (param $var$0 i64) (result i64) (if (i32.eqz (i64.eqz (local.get $var$0) ) ) (return (i64.sub (i64.const 63) (i64.clz (i64.xor (i64.add (local.get $var$0) (i64.const -1) ) (local.get $var$0) ) ) ) ) ) (i64.const 64) ) ;; lowering of the i32.rotl instruction, rotating the first argument, with ;; wraparound, by the second argument (func $__wasm_rotl_i32 (; 8 ;) (type $4) (param $var$0 i32) (param $var$1 i32) (result i32) (local $var$2 i32) (i32.or (i32.shl (i32.and (i32.shr_u (i32.const -1) (local.tee $var$2 (i32.and (local.get $var$1) (i32.const 31) ) ) ) (local.get $var$0) ) (local.get $var$2) ) (i32.shr_u (i32.and (i32.shl (i32.const -1) (local.tee $var$1 (i32.and (i32.sub (i32.const 0) (local.get $var$1) ) (i32.const 31) ) ) ) (local.get $var$0) ) (local.get $var$1) ) ) ) ;; lowering of the i32.rotr instruction, rotating the first argument, with ;; wraparound, by the second argument (func $__wasm_rotr_i32 (; 9 ;) (type $4) (param $var$0 i32) (param $var$1 i32) (result i32) (local $var$2 i32) (i32.or (i32.shr_u (i32.and (i32.shl (i32.const -1) (local.tee $var$2 (i32.and (local.get $var$1) (i32.const 31) ) ) ) (local.get $var$0) ) (local.get $var$2) ) (i32.shl (i32.and (i32.shr_u (i32.const -1) (local.tee $var$1 (i32.and (i32.sub (i32.const 0) (local.get $var$1) ) (i32.const 31) ) ) ) (local.get $var$0) ) (local.get $var$1) ) ) ) ;; lowering of the i64.rotl instruction, rotating the first argument, with ;; wraparound, by the second argument (func $__wasm_rotl_i64 (; 10 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i64) (i64.or (i64.shl (i64.and (i64.shr_u (i64.const -1) (local.tee $var$2 (i64.and (local.get $var$1) (i64.const 63) ) ) ) (local.get $var$0) ) (local.get $var$2) ) (i64.shr_u (i64.and (i64.shl (i64.const -1) (local.tee $var$1 (i64.and (i64.sub (i64.const 0) (local.get $var$1) ) (i64.const 63) ) ) ) (local.get $var$0) ) (local.get $var$1) ) ) ) ;; lowering of the i64.rotr instruction, rotating the first argument, with ;; wraparound, by the second argument (func $__wasm_rotr_i64 (; 11 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i64) (i64.or (i64.shr_u (i64.and (i64.shl (i64.const -1) (local.tee $var$2 (i64.and (local.get $var$1) (i64.const 63) ) ) ) (local.get $var$0) ) (local.get $var$2) ) (i64.shl (i64.and (i64.shr_u (i64.const -1) (local.tee $var$1 (i64.and (i64.sub (i64.const 0) (local.get $var$1) ) (i64.const 63) ) ) ) (local.get $var$0) ) (local.get $var$1) ) ) ) ;; lowering of the f32.nearest instruction, rounding the input to the nearest ;; integer while breaking ties by rounding to even (func $__wasm_nearest_f32 (; 12 ;) (type $1) (param $var$0 f32) (result f32) (local $var$1 f32) (local $var$2 f32) (if (i32.eqz (f32.lt (local.tee $var$2 (f32.sub (local.get $var$0) (local.tee $var$1 (f32.floor (local.get $var$0) ) ) ) ) (f32.const 0.5) ) ) (block (local.set $var$0 (f32.ceil (local.get $var$0) ) ) (if (f32.gt (local.get $var$2) (f32.const 0.5) ) (return (local.get $var$0) ) ) (local.set $var$1 (select (local.get $var$1) (local.get $var$0) (f32.eq (f32.sub (local.tee $var$2 (f32.mul (local.get $var$1) (f32.const 0.5) ) ) (f32.floor (local.get $var$2) ) ) (f32.const 0) ) ) ) ) ) (local.get $var$1) ) ;; lowering of the f64.nearest instruction, rounding the input to the nearest ;; integer while breaking ties by rounding to even (func $__wasm_nearest_f64 (; 13 ;) (type $2) (param $var$0 f64) (result f64) (local $var$1 f64) (local $var$2 f64) (if (i32.eqz (f64.lt (local.tee $var$2 (f64.sub (local.get $var$0) (local.tee $var$1 (f64.floor (local.get $var$0) ) ) ) ) (f64.const 0.5) ) ) (block (local.set $var$0 (f64.ceil (local.get $var$0) ) ) (if (f64.gt (local.get $var$2) (f64.const 0.5) ) (return (local.get $var$0) ) ) (local.set $var$1 (select (local.get $var$1) (local.get $var$0) (f64.eq (f64.sub (local.tee $var$2 (f64.mul (local.get $var$1) (f64.const 0.5) ) ) (f64.floor (local.get $var$2) ) ) (f64.const 0) ) ) ) ) ) (local.get $var$1) ) (func $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E (; 14 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i32) (local $var$3 i32) (local $var$4 i32) (local $var$5 i64) (local $var$6 i64) (local $var$7 i64) (local $var$8 i64) (block $label$1 (block $label$2 (block $label$3 (block $label$4 (block $label$5 (block $label$6 (block $label$7 (block $label$8 (block $label$9 (block $label$10 (block $label$11 (if (local.tee $var$2 (i32.wrap_i64 (i64.shr_u (local.get $var$0) (i64.const 32) ) ) ) (block (br_if $label$11 (i32.eqz (local.tee $var$3 (i32.wrap_i64 (local.get $var$1) ) ) ) ) (br_if $label$9 (i32.eqz (local.tee $var$4 (i32.wrap_i64 (i64.shr_u (local.get $var$1) (i64.const 32) ) ) ) ) ) (br_if $label$8 (i32.le_u (local.tee $var$2 (i32.sub (i32.clz (local.get $var$4) ) (i32.clz (local.get $var$2) ) ) ) (i32.const 31) ) ) (br $label$2) ) ) (br_if $label$2 (i64.ge_u (local.get $var$1) (i64.const 4294967296) ) ) (global.set $__wasm-intrinsics-temp-i64 (i64.extend_i32_u (i32.sub (local.tee $var$2 (i32.wrap_i64 (local.get $var$0) ) ) (i32.mul (local.tee $var$2 (i32.div_u (local.get $var$2) (local.tee $var$3 (i32.wrap_i64 (local.get $var$1) ) ) ) ) (local.get $var$3) ) ) ) ) (return (i64.extend_i32_u (local.get $var$2) ) ) ) (local.set $var$3 (i32.wrap_i64 (i64.shr_u (local.get $var$1) (i64.const 32) ) ) ) (br_if $label$7 (i32.eqz (i32.wrap_i64 (local.get $var$0) ) ) ) (br_if $label$6 (i32.eqz (local.get $var$3) ) ) (br_if $label$6 (i32.and (local.tee $var$4 (i32.add (local.get $var$3) (i32.const -1) ) ) (local.get $var$3) ) ) (global.set $__wasm-intrinsics-temp-i64 (i64.or (i64.shl (i64.extend_i32_u (i32.and (local.get $var$4) (local.get $var$2) ) ) (i64.const 32) ) (i64.and (local.get $var$0) (i64.const 4294967295) ) ) ) (return (i64.extend_i32_u (i32.shr_u (local.get $var$2) (i32.and (i32.ctz (local.get $var$3) ) (i32.const 31) ) ) ) ) ) (unreachable) ) (br_if $label$5 (i32.eqz (i32.and (local.tee $var$4 (i32.add (local.get $var$3) (i32.const -1) ) ) (local.get $var$3) ) ) ) (local.set $var$3 (i32.sub (i32.const 0) (local.tee $var$2 (i32.sub (i32.add (i32.clz (local.get $var$3) ) (i32.const 33) ) (i32.clz (local.get $var$2) ) ) ) ) ) (br $label$3) ) (local.set $var$3 (i32.sub (i32.const 63) (local.get $var$2) ) ) (local.set $var$2 (i32.add (local.get $var$2) (i32.const 1) ) ) (br $label$3) ) (global.set $__wasm-intrinsics-temp-i64 (i64.shl (i64.extend_i32_u (i32.sub (local.get $var$2) (i32.mul (local.tee $var$4 (i32.div_u (local.get $var$2) (local.get $var$3) ) ) (local.get $var$3) ) ) ) (i64.const 32) ) ) (return (i64.extend_i32_u (local.get $var$4) ) ) ) (br_if $label$4 (i32.lt_u (local.tee $var$2 (i32.sub (i32.clz (local.get $var$3) ) (i32.clz (local.get $var$2) ) ) ) (i32.const 31) ) ) (br $label$2) ) (global.set $__wasm-intrinsics-temp-i64 (i64.extend_i32_u (i32.and (local.get $var$4) (i32.wrap_i64 (local.get $var$0) ) ) ) ) (br_if $label$1 (i32.eq (local.get $var$3) (i32.const 1) ) ) (return (i64.shr_u (local.get $var$0) (i64.extend_i32_u (i32.ctz (local.get $var$3) ) ) ) ) ) (local.set $var$3 (i32.sub (i32.const 63) (local.get $var$2) ) ) (local.set $var$2 (i32.add (local.get $var$2) (i32.const 1) ) ) ) (local.set $var$5 (i64.shr_u (local.get $var$0) (i64.extend_i32_u (i32.and (local.get $var$2) (i32.const 63) ) ) ) ) (local.set $var$0 (i64.shl (local.get $var$0) (i64.extend_i32_u (i32.and (local.get $var$3) (i32.const 63) ) ) ) ) (block $label$13 (if (local.get $var$2) (block (local.set $var$8 (i64.add (local.get $var$1) (i64.const -1) ) ) (loop $label$15 (local.set $var$5 (i64.sub (local.tee $var$5 (i64.or (i64.shl (local.get $var$5) (i64.const 1) ) (i64.shr_u (local.get $var$0) (i64.const 63) ) ) ) (i64.and (local.tee $var$6 (i64.shr_s (i64.sub (local.get $var$8) (local.get $var$5) ) (i64.const 63) ) ) (local.get $var$1) ) ) ) (local.set $var$0 (i64.or (i64.shl (local.get $var$0) (i64.const 1) ) (local.get $var$7) ) ) (local.set $var$7 (local.tee $var$6 (i64.and (local.get $var$6) (i64.const 1) ) ) ) (br_if $label$15 (local.tee $var$2 (i32.add (local.get $var$2) (i32.const -1) ) ) ) ) (br $label$13) ) ) ) (global.set $__wasm-intrinsics-temp-i64 (local.get $var$5) ) (return (i64.or (i64.shl (local.get $var$0) (i64.const 1) ) (local.get $var$6) ) ) ) (global.set $__wasm-intrinsics-temp-i64 (local.get $var$0) ) (local.set $var$0 (i64.const 0) ) ) (local.get $var$0) ) (func $_ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE (; 15 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i32) (local $var$3 i32) (local $var$4 i32) (local $var$5 i32) (local $var$6 i32) (i64.or (i64.shl (i64.extend_i32_u (i32.add (i32.add (i32.add (i32.add (i32.mul (local.tee $var$4 (i32.shr_u (local.tee $var$2 (i32.wrap_i64 (local.get $var$1) ) ) (i32.const 16) ) ) (local.tee $var$5 (i32.shr_u (local.tee $var$3 (i32.wrap_i64 (local.get $var$0) ) ) (i32.const 16) ) ) ) (i32.mul (local.get $var$2) (i32.wrap_i64 (i64.shr_u (local.get $var$0) (i64.const 32) ) ) ) ) (i32.mul (i32.wrap_i64 (i64.shr_u (local.get $var$1) (i64.const 32) ) ) (local.get $var$3) ) ) (i32.shr_u (local.tee $var$2 (i32.add (i32.shr_u (local.tee $var$6 (i32.mul (local.tee $var$2 (i32.and (local.get $var$2) (i32.const 65535) ) ) (local.tee $var$3 (i32.and (local.get $var$3) (i32.const 65535) ) ) ) ) (i32.const 16) ) (i32.mul (local.get $var$2) (local.get $var$5) ) ) ) (i32.const 16) ) ) (i32.shr_u (local.tee $var$2 (i32.add (i32.and (local.get $var$2) (i32.const 65535) ) (i32.mul (local.get $var$4) (local.get $var$3) ) ) ) (i32.const 16) ) ) ) (i64.const 32) ) (i64.extend_i32_u (i32.or (i32.shl (local.get $var$2) (i32.const 16) ) (i32.and (local.get $var$6) (i32.const 65535) ) ) ) ) ) (func $_ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E (; 16 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i64) (i64.sub (i64.xor (i64.div_u (i64.sub (i64.xor (local.tee $var$2 (i64.shr_s (local.get $var$0) (i64.const 63) ) ) (local.get $var$0) ) (local.get $var$2) ) (i64.sub (i64.xor (local.tee $var$2 (i64.shr_s (local.get $var$1) (i64.const 63) ) ) (local.get $var$1) ) (local.get $var$2) ) ) (local.tee $var$0 (i64.shr_s (i64.xor (local.get $var$1) (local.get $var$0) ) (i64.const 63) ) ) ) (local.get $var$0) ) ) (func $_ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E (; 17 ;) (type $0) (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i64) (i64.sub (i64.xor (i64.rem_u (i64.sub (i64.xor (local.tee $var$2 (i64.shr_s (local.get $var$0) (i64.const 63) ) ) (local.get $var$0) ) (local.get $var$2) ) (i64.sub (i64.xor (local.tee $var$0 (i64.shr_s (local.get $var$1) (i64.const 63) ) ) (local.get $var$1) ) (local.get $var$0) ) ) (local.get $var$2) ) (local.get $var$2) ) ) ;; custom section "linking", size 3 ) binaryen-version_108/src/pretty_printing.h000066400000000000000000000036171423707623100211550ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Pretty printing helpers // #ifndef wasm_pretty_printing_h #define wasm_pretty_printing_h #include #include "support/colors.h" inline std::ostream& doIndent(std::ostream& o, unsigned indent) { for (unsigned i = 0; i < indent; i++) { o << " "; } return o; } inline std::ostream& prepareMajorColor(std::ostream& o) { Colors::red(o); Colors::bold(o); return o; } inline std::ostream& prepareColor(std::ostream& o) { Colors::magenta(o); Colors::bold(o); return o; } inline std::ostream& prepareMinorColor(std::ostream& o) { Colors::orange(o); return o; } inline std::ostream& restoreNormalColor(std::ostream& o) { Colors::normal(o); return o; } inline std::ostream& printText(std::ostream& o, const char* str) { o << '"'; Colors::green(o); o << str; Colors::normal(o); return o << '"'; } inline std::ostream& printMajor(std::ostream& o, const char* str) { prepareMajorColor(o); o << str; restoreNormalColor(o); return o; } inline std::ostream& printMedium(std::ostream& o, const char* str) { prepareColor(o); o << str; restoreNormalColor(o); return o; } inline std::ostream& printMinor(std::ostream& o, const char* str) { prepareMinorColor(o); o << str; restoreNormalColor(o); return o; } #endif // wasm_pretty_printing_h binaryen-version_108/src/shared-constants.h000066400000000000000000000032711423707623100211700ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_shared_constants_h #define wasm_shared_constants_h #include "wasm.h" namespace wasm { extern Name MEMORY_BASE; extern Name TABLE_BASE; extern Name STACK_POINTER; extern Name GET_TEMP_RET0; extern Name SET_TEMP_RET0; extern Name NEW_SIZE; extern Name MODULE; extern Name START; extern Name FUNC; extern Name PARAM; extern Name RESULT; extern Name MEMORY; extern Name DATA; extern Name PASSIVE; extern Name EXPORT; extern Name IMPORT; extern Name TABLE; extern Name GLOBAL; extern Name ELEM; extern Name LOCAL; extern Name TYPE; extern Name REF; extern Name NULL_; extern Name CALL; extern Name CALL_IMPORT; extern Name CALL_INDIRECT; extern Name BLOCK; extern Name BR_IF; extern Name THEN; extern Name ELSE; extern Name _NAN; extern Name _INFINITY; extern Name NEG_INFINITY; extern Name NEG_NAN; extern Name CASE; extern Name BR; extern Name FUNCREF; extern Name FAKE_RETURN; extern Name DELEGATE_CALLER_TARGET; extern Name MUT; extern Name SPECTEST; extern Name PRINT; extern Name EXIT; extern Name SHARED; extern Name TAG; } // namespace wasm #endif // wasm_shared_constants_h binaryen-version_108/src/shell-interface.h000066400000000000000000000232351423707623100207570ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Implementation of the shell interpreter execution environment // #ifndef wasm_shell_interface_h #define wasm_shell_interface_h #include "asmjs/shared-constants.h" #include "ir/module-utils.h" #include "shared-constants.h" #include "support/name.h" #include "support/utilities.h" #include "wasm-interpreter.h" #include "wasm.h" namespace wasm { // An exception emitted when exit() is called. struct ExitException {}; // An exception emitted when a wasm trap occurs. struct TrapException {}; // An exception emitted when a host limitation is hit. (These are not wasm traps // as they are not in the spec; for example, the spec has no limit on how much // GC memory may be allocated, but hosts have limits.) struct HostLimitException {}; struct ShellExternalInterface : ModuleRunner::ExternalInterface { // The underlying memory can be accessed through unaligned pointers which // isn't well-behaved in C++. WebAssembly nonetheless expects it to behave // properly. Avoid emitting unaligned load/store by checking for alignment // explicitly, and performing memcpy if unaligned. // // The allocated memory tries to have the same alignment as the memory being // simulated. class Memory { // Use char because it doesn't run afoul of aliasing rules. std::vector memory; template static bool aligned(const char* address) { static_assert(!(sizeof(T) & (sizeof(T) - 1)), "must be a power of 2"); return 0 == (reinterpret_cast(address) & (sizeof(T) - 1)); } Memory(Memory&) = delete; Memory& operator=(const Memory&) = delete; public: Memory() = default; void resize(size_t newSize) { // Ensure the smallest allocation is large enough that most allocators // will provide page-aligned storage. This hopefully allows the // interpreter's memory to be as aligned as the memory being simulated, // ensuring that the performance doesn't needlessly degrade. // // The code is optimistic this will work until WG21's p0035r0 happens. const size_t minSize = 1 << 12; size_t oldSize = memory.size(); memory.resize(std::max(minSize, newSize)); if (newSize < oldSize && newSize < minSize) { std::memset(&memory[newSize], 0, minSize - newSize); } } template void set(size_t address, T value) { if (aligned(&memory[address])) { *reinterpret_cast(&memory[address]) = value; } else { std::memcpy(&memory[address], &value, sizeof(T)); } } template T get(size_t address) { if (aligned(&memory[address])) { return *reinterpret_cast(&memory[address]); } else { T loaded; std::memcpy(&loaded, &memory[address], sizeof(T)); return loaded; } } } memory; std::unordered_map> tables; std::map> linkedInstances; ShellExternalInterface( std::map> linkedInstances_ = {}) : memory() { linkedInstances.swap(linkedInstances_); } virtual ~ShellExternalInterface() = default; ModuleRunner* getImportInstance(Importable* import) { auto it = linkedInstances.find(import->module); if (it == linkedInstances.end()) { Fatal() << "importGlobals: unknown import: " << import->module.str << "." << import->base.str; } return it->second.get(); } void init(Module& wasm, ModuleRunner& instance) override { if (wasm.memory.exists && !wasm.memory.imported()) { memory.resize(wasm.memory.initial * wasm::Memory::kPageSize); } ModuleUtils::iterDefinedTables( wasm, [&](Table* table) { tables[table->name].resize(table->initial); }); } void importGlobals(std::map& globals, Module& wasm) override { ModuleUtils::iterImportedGlobals(wasm, [&](Global* import) { auto inst = getImportInstance(import); auto* exportedGlobal = inst->wasm.getExportOrNull(import->base); if (!exportedGlobal) { Fatal() << "importGlobals: unknown import: " << import->module.str << "." << import->name.str; } globals[import->name] = inst->globals[exportedGlobal->value]; }); } Literals callImport(Function* import, Literals& arguments) override { if (import->module == SPECTEST && import->base.startsWith(PRINT)) { for (auto argument : arguments) { std::cout << argument << " : " << argument.type << '\n'; } return {}; } else if (import->module == ENV && import->base == EXIT) { // XXX hack for torture tests std::cout << "exit()\n"; throw ExitException(); } else if (auto* inst = getImportInstance(import)) { return inst->callExport(import->base, arguments); } Fatal() << "callImport: unknown import: " << import->module.str << "." << import->name.str; } Literals callTable(Name tableName, Index index, HeapType sig, Literals& arguments, Type results, ModuleRunner& instance) override { auto it = tables.find(tableName); if (it == tables.end()) { trap("callTable on non-existing table"); } auto& table = it->second; if (index >= table.size()) { trap("callTable overflow"); } Function* func = nullptr; if (table[index].isFunction() && !table[index].isNull()) { func = instance.wasm.getFunctionOrNull(table[index].getFunc()); } if (!func) { trap("uninitialized table element"); } if (sig != func->type) { trap("callIndirect: function types don't match"); } if (func->getParams().size() != arguments.size()) { trap("callIndirect: bad # of arguments"); } size_t i = 0; for (const auto& param : func->getParams()) { if (!Type::isSubType(arguments[i++].type, param)) { trap("callIndirect: bad argument type"); } } if (func->getResults() != results) { trap("callIndirect: bad result type"); } if (func->imported()) { return callImport(func, arguments); } else { return instance.callFunctionInternal(func->name, arguments); } } int8_t load8s(Address addr) override { return memory.get(addr); } uint8_t load8u(Address addr) override { return memory.get(addr); } int16_t load16s(Address addr) override { return memory.get(addr); } uint16_t load16u(Address addr) override { return memory.get(addr); } int32_t load32s(Address addr) override { return memory.get(addr); } uint32_t load32u(Address addr) override { return memory.get(addr); } int64_t load64s(Address addr) override { return memory.get(addr); } uint64_t load64u(Address addr) override { return memory.get(addr); } std::array load128(Address addr) override { return memory.get>(addr); } void store8(Address addr, int8_t value) override { memory.set(addr, value); } void store16(Address addr, int16_t value) override { memory.set(addr, value); } void store32(Address addr, int32_t value) override { memory.set(addr, value); } void store64(Address addr, int64_t value) override { memory.set(addr, value); } void store128(Address addr, const std::array& value) override { memory.set>(addr, value); } Index tableSize(Name tableName) override { return (Index)tables[tableName].size(); } void tableStore(Name tableName, Index index, const Literal& entry) override { auto& table = tables[tableName]; if (index >= table.size()) { trap("out of bounds table access"); } else { table[index] = entry; } } Literal tableLoad(Name tableName, Index index) override { auto it = tables.find(tableName); if (it == tables.end()) { trap("tableGet on non-existing table"); } auto& table = it->second; if (index >= table.size()) { trap("out of bounds table access"); } return table[index]; } bool growMemory(Address /*oldSize*/, Address newSize) override { // Apply a reasonable limit on memory size, 1GB, to avoid DOS on the // interpreter. if (newSize > 1024 * 1024 * 1024) { return false; } memory.resize(newSize); return true; } bool growTable(Name name, const Literal& value, Index /*oldSize*/, Index newSize) override { // Apply a reasonable limit on table size, 1GB, to avoid DOS on the // interpreter. if (newSize > 1024 * 1024 * 1024) { return false; } tables[name].resize(newSize, value); return true; } void trap(const char* why) override { std::cout << "[trap " << why << "]\n"; throw TrapException(); } void hostLimit(const char* why) override { std::cout << "[host limit " << why << "]\n"; throw HostLimitException(); } void throwException(const WasmException& exn) override { throw exn; } }; } // namespace wasm #endif // wasm_shell_interface_h binaryen-version_108/src/support/000077500000000000000000000000001423707623100172505ustar00rootroot00000000000000binaryen-version_108/src/support/CMakeLists.txt000066400000000000000000000004051423707623100220070ustar00rootroot00000000000000FILE(GLOB support_HEADERS *.h) set(support_SOURCES archive.cpp bits.cpp colors.cpp command-line.cpp debug.cpp file.cpp path.cpp safe_integer.cpp threads.cpp utilities.cpp ${support_HEADERS} ) add_library(support OBJECT ${support_SOURCES}) binaryen-version_108/src/support/alloc.h000066400000000000000000000030051423707623100205110ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Allocation helpers // #ifndef wasm_support_alloc_h #define wasm_support_alloc_h #include #if defined(WIN32) || defined(_WIN32) #include #endif namespace wasm { // An allocation of a specific size and a minimum alignment. Must be freed // with aligned_free. Returns nullptr on failure. inline void* aligned_malloc(size_t align, size_t size) { #if defined(WIN32) || defined(_WIN32) _set_errno(0); void* ret = _aligned_malloc(size, align); if (errno == ENOMEM) ret = nullptr; return ret; #elif defined(__APPLE__) || !defined(_ISOC11_SOURCE) void* ptr; int result = posix_memalign(&ptr, align, size); return result == 0 ? ptr : nullptr; #else return aligned_alloc(align, size); #endif } inline void aligned_free(void* ptr) { #if defined(WIN32) || defined(_WIN32) _aligned_free(ptr); #else free(ptr); #endif } } // namespace wasm #endif // wasm_support_alloc_h binaryen-version_108/src/support/archive.cpp000066400000000000000000000163271423707623100214060ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "support/archive.h" #include "support/utilities.h" #include static const char* const magic = "!\n"; class ArchiveMemberHeader { public: uint8_t fileName[16]; uint8_t timestamp[12]; uint8_t UID[6]; uint8_t GID[6]; uint8_t accessMode[8]; uint8_t size[10]; // Size of data only, not including padding or header uint8_t magic[2]; std::string getName() const; // Members are not larger than 4GB uint32_t getSize() const; }; std::string ArchiveMemberHeader::getName() const { char endChar; if (fileName[0] == '/') { // Special name (string table or reference, or symbol table) endChar = ' '; } else { endChar = '/'; // regular name } auto* end = static_cast(memchr(fileName, endChar, sizeof(fileName))); if (!end) { end = fileName + sizeof(fileName); } return std::string((char*)(fileName), end - fileName); } uint32_t ArchiveMemberHeader::getSize() const { auto* end = static_cast(memchr(size, ' ', sizeof(size))); std::string sizeString((const char*)size, end); auto sizeInt = std::stoll(sizeString, nullptr, 10); if (sizeInt < 0 || sizeInt >= std::numeric_limits::max()) { wasm::Fatal() << "Malformed archive: size parsing failed\n"; } return static_cast(sizeInt); } Archive::Archive(Buffer& b, bool& error) : data(b), symbolTable({nullptr, 0}), stringTable({nullptr, 0}), firstRegularData(nullptr) { error = false; if (data.size() < strlen(magic) || memcmp(data.data(), magic, strlen(magic))) { error = true; return; } // We require GNU format archives. So the first member may be named "/" and it // points to the symbol table. The next member may optionally be "//" and // point to a string table if a filename is too large to fit in the 16-char // name field of the header. child_iterator it = child_begin(false); if (it.hasError()) { error = true; return; } child_iterator end = child_end(); if (it == end) { return; // Empty archive. } const Child* c = &*it; auto increment = [&]() { ++it; error = it.hasError(); if (error) { return true; } c = &*it; return false; }; std::string name = c->getRawName(); if (name == "/") { symbolTable = c->getBuffer(); if (increment() || it == end) { return; } name = c->getRawName(); } if (name == "//") { stringTable = c->getBuffer(); if (increment() || it == end) { return; } setFirstRegular(*c); return; } if (name[0] != '/') { setFirstRegular(*c); return; } // Not a GNU archive. error = true; } Archive::Child::Child(const Archive* parent, const uint8_t* data, bool* error) : parent(parent), data(data) { if (!data) { return; } len = sizeof(ArchiveMemberHeader) + getHeader()->getSize(); startOfFile = sizeof(ArchiveMemberHeader); } uint32_t Archive::Child::getSize() const { return len - startOfFile; } Archive::SubBuffer Archive::Child::getBuffer() const { return {data + startOfFile, getSize()}; } std::string Archive::Child::getRawName() const { return getHeader()->getName(); } Archive::Child Archive::Child::getNext(bool& error) const { // Members are aligned to even byte boundaries. uint32_t nextOffset = len + (len & 1); if ((size_t)(data - (const uint8_t*)parent->data.data() + nextOffset) >= parent->data.size()) { // End of the archive. return Child(); } return Child(parent, data + nextOffset, &error); } std::string Archive::Child::getName() const { std::string name = getRawName(); // Check if it's a special name. if (name[0] == '/') { if (name.size() == 1) { // Linker member. return name; } if (name.size() == 2 && name[1] == '/') { // String table. return name; } // It's a long name. // Get the offset. int offset = std::stoi(name.substr(1), nullptr, 10); // Verify it. if (offset < 0 || (unsigned)offset >= parent->stringTable.len) { wasm::Fatal() << "Malformed archive: name parsing failed\n"; } std::string addr(parent->stringTable.data + offset, parent->stringTable.data + parent->stringTable.len); // GNU long file names end with a "/\n". size_t end = addr.find('\n'); return addr.substr(0, end - 1); } // It's a simple name. if (name[name.size() - 1] == '/') { return name.substr(0, name.size() - 1); } return name; } Archive::child_iterator Archive::child_begin(bool SkipInternal) const { if (data.size() == 0) { return child_end(); } if (SkipInternal) { child_iterator it; it.child = Child(this, firstRegularData, &it.error); return it; } auto* loc = (const uint8_t*)data.data() + strlen(magic); child_iterator it; it.child = Child(this, loc, &it.error); return it; } Archive::child_iterator Archive::child_end() const { return Child(); } namespace { struct Symbol { uint32_t symbolIndex; uint32_t stringIndex; void next(Archive::SubBuffer& symbolTable) { // Symbol table entries are NUL-terminated. Skip past the next NUL. stringIndex = strchr((char*)symbolTable.data + stringIndex, '\0') - (char*)symbolTable.data + 1; ++symbolIndex; } }; } // namespace static uint32_t read32be(const uint8_t* buf) { return static_cast(buf[0]) << 24 | static_cast(buf[1]) << 16 | static_cast(buf[2]) << 8 | static_cast(buf[3]); } void Archive::dump() const { printf("Archive data %p len %zu, firstRegularData %p\n", data.data(), data.size(), firstRegularData); printf("Symbol table %p, len %u\n", symbolTable.data, symbolTable.len); printf("string table %p, len %u\n", stringTable.data, stringTable.len); const uint8_t* buf = symbolTable.data; if (!buf) { for (auto c = child_begin(), e = child_end(); c != e; ++c) { printf("Child %p, len %u, name %s, size %u\n", c->data, c->len, c->getName().c_str(), c->getSize()); } return; } uint32_t symbolCount = read32be(buf); printf("Symbol count %u\n", symbolCount); buf += sizeof(uint32_t) + (symbolCount * sizeof(uint32_t)); uint32_t string_start_offset = buf - symbolTable.data; Symbol sym = {0, string_start_offset}; while (sym.symbolIndex != symbolCount) { printf("Symbol %u, offset %u\n", sym.symbolIndex, sym.stringIndex); // get the member uint32_t offset = read32be(symbolTable.data + sym.symbolIndex * 4); auto* loc = (const uint8_t*)&data[offset]; child_iterator it; it.child = Child(this, loc, &it.error); printf("Child %p, len %u\n", it.child.data, it.child.len); } } binaryen-version_108/src/support/archive.h000066400000000000000000000066041423707623100210500ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* Minimal class for interacting with archives. The API is inspired by LLVM's * Archive class, (in case we want to switch to using that at some point); * however we are missing useful error-handling capabilities and other utilities * that LLVM has (e.g. ErrorOr, MemoryBuffer, StringRef). * We only support the GNU format (not the BSD or COFF variants) */ #ifndef wasm_support_archive_h #define wasm_support_archive_h #include #include #include "wasm.h" class ArchiveMemberHeader; class Archive { // Vector is char instead of uint8_t because read_file only works with char. // Everything else is uint8_t to help distinguish between uses as // uninterpreted bytes (most uses) and C strings (a few uses e.g. strchr) // because most things in these buffers are not nul-terminated using Buffer = std::vector; public: struct SubBuffer { const uint8_t* data; uint32_t len; }; class Child { friend class Archive; const Archive* parent = nullptr; // Includes header but not padding byte. const uint8_t* data = nullptr; uint32_t len = 0; // Offset from data to the start of the file uint16_t startOfFile = 0; const ArchiveMemberHeader* getHeader() const { return reinterpret_cast(data); } Child getNext(bool& error) const; public: Child(){}; Child(const Archive* parent, const uint8_t* data, bool* error); // Size of actual member data (no header/padding) uint32_t getSize() const; SubBuffer getBuffer() const; std::string getRawName() const; std::string getName() const; bool operator==(const Child& other) const { return data == other.data; } }; class child_iterator { friend class Archive; Child child; bool error = false; // TODO: use std::error_code instead? public: child_iterator() = default; explicit child_iterator(bool error) : error(error) {} child_iterator(const Child& c) : child(c) {} const Child* operator->() const { return &child; } const Child& operator*() const { return child; } bool operator==(const child_iterator& other) const { return child == other.child; } bool operator!=(const child_iterator& other) const { return !(*this == other); } child_iterator& operator++() { assert(!error); child = child.getNext(error); return *this; } bool hasError() const { return error; } }; Archive(Buffer& buffer, bool& error); child_iterator child_begin(bool SkipInternal = true) const; child_iterator child_end() const; void dump() const; private: void setFirstRegular(const Child& c) { firstRegularData = c.data; } Buffer& data; SubBuffer symbolTable; SubBuffer stringTable; const uint8_t* firstRegularData; }; #endif // wasm_support_archive_h binaryen-version_108/src/support/base64.h000066400000000000000000000036741423707623100205170ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_support_base64_h #define wasm_support_base64_h #include #include #include inline std::string base64Encode(std::vector& data) { std::string ret; size_t i = 0; const char* alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"; while (i + 3 <= data.size()) { uint32_t bits = (((uint32_t)(uint8_t)data[i + 0]) << 16) | (((uint32_t)(uint8_t)data[i + 1]) << 8) | (((uint32_t)(uint8_t)data[i + 2]) << 0); ret += alphabet[(bits >> 18) & 0x3f]; ret += alphabet[(bits >> 12) & 0x3f]; ret += alphabet[(bits >> 6) & 0x3f]; ret += alphabet[(bits >> 0) & 0x3f]; i += 3; } if (i + 2 == data.size()) { uint32_t bits = (((uint32_t)(uint8_t)data[i + 0]) << 8) | (((uint32_t)(uint8_t)data[i + 1]) << 0); ret += alphabet[(bits >> 10) & 0x3f]; ret += alphabet[(bits >> 4) & 0x3f]; ret += alphabet[(bits << 2) & 0x3f]; ret += '='; } else if (i + 1 == data.size()) { uint32_t bits = (uint32_t)(uint8_t)data[i + 0]; ret += alphabet[(bits >> 2) & 0x3f]; ret += alphabet[(bits << 4) & 0x3f]; ret += '='; ret += '='; } else { assert(i == data.size()); } return ret; } #endif // wasm_support_base64_h binaryen-version_108/src/support/bits.cpp000066400000000000000000000154731423707623100207270ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "support/bits.h" #include "../compiler-support.h" #include "support/utilities.h" #ifdef _MSC_VER #include #endif namespace wasm::Bits { int popCount(uint8_t v) { // Small table lookup. static const uint8_t tbl[32] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5}; return tbl[v & 0xf] + tbl[v >> 4]; } int popCount(uint16_t v) { #if __has_builtin(__builtin_popcount) || defined(__GNUC__) return __builtin_popcount(v); #else return popCount((uint8_t)(v & 0xFF)) + popCount((uint8_t)(v >> 8)); #endif } int popCount(uint32_t v) { #if __has_builtin(__builtin_popcount) || defined(__GNUC__) return __builtin_popcount(v); #else // See Stanford bithacks, counting bits set in parallel, "best method": // http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel v = v - ((v >> 1) & 0x55555555); v = (v & 0x33333333) + ((v >> 2) & 0x33333333); return (((v + (v >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24; #endif } int popCount(uint64_t v) { #if __has_builtin(__builtin_popcount) || defined(__GNUC__) return __builtin_popcountll(v); #else return popCount((uint32_t)v) + popCount((uint32_t)(v >> 32)); #endif } uint32_t bitReverse(uint32_t v) { // See Hacker's Delight, first edition, figure 7-1. v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); v = ((v & 0x0F0F0F0F) << 4) | ((v >> 4) & 0x0F0F0F0F); v = (v << 24) | ((v & 0xFF00) << 8) | ((v >> 8) & 0xFF00) | (v >> 24); return v; } int countTrailingZeroes(uint32_t v) { if (v == 0) { return 32; } #if __has_builtin(__builtin_ctz) || defined(__GNUC__) return __builtin_ctz(v); #elif defined(_MSC_VER) unsigned long count; _BitScanForward(&count, v); return (int)count; #else // See Stanford bithacks, count the consecutive zero bits (trailing) on the // right with multiply and lookup: // http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightMultLookup static const uint8_t tbl[32] = {0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9}; return (int)tbl[((uint32_t)((v & -v) * 0x077CB531U)) >> 27]; #endif } int countTrailingZeroes(uint64_t v) { if (v == 0) { return 64; } #if __has_builtin(__builtin_ctzll) || defined(__GNUC__) return __builtin_ctzll(v); #elif defined(_MSC_VER) && defined(_M_X64) unsigned long count; _BitScanForward64(&count, v); return (int)count; #else return (uint32_t)v ? countTrailingZeroes((uint32_t)v) : 32 + countTrailingZeroes((uint32_t)(v >> 32)); #endif } int countLeadingZeroes(uint32_t v) { if (v == 0) { return 32; } #if __has_builtin(__builtin_clz) || defined(__GNUC__) return __builtin_clz(v); #elif defined(_MSC_VER) unsigned long count; _BitScanReverse(&count, v); // BitScanReverse gives the bit position (0 for the LSB, then 1, etc.) of the // first bit that is 1, when looking from the MSB. To count leading zeros, we // need to adjust that. return 31 - int(count); #else // See Stanford bithacks, find the log base 2 of an N-bit integer in // O(lg(N)) operations with multiply and lookup: // http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn static const uint8_t tbl[32] = {31, 22, 30, 21, 18, 10, 29, 2, 20, 17, 15, 13, 9, 6, 28, 1, 23, 19, 11, 3, 16, 14, 7, 24, 12, 4, 8, 25, 5, 26, 27, 0}; v = v | (v >> 1); v = v | (v >> 2); v = v | (v >> 4); v = v | (v >> 8); v = v | (v >> 16); return (int)tbl[((uint32_t)(v * 0x07C4ACDDU)) >> 27]; #endif } int countLeadingZeroes(uint64_t v) { if (v == 0) { return 64; } #if __has_builtin(__builtin_clzll) || defined(__GNUC__) return __builtin_clzll(v); #elif defined(_MSC_VER) && defined(_M_X64) unsigned long count; _BitScanReverse64(&count, v); return 63 - int(count); #else return v >> 32 ? countLeadingZeroes((uint32_t)(v >> 32)) : 32 + countLeadingZeroes((uint32_t)v); #endif } int ceilLog2(uint32_t v) { return 32 - countLeadingZeroes(v - 1); } int ceilLog2(uint64_t v) { return 64 - countLeadingZeroes(v - 1); } bool isPowerOf2InvertibleFloat(float v) { // Power of two floating points should have zero as their significands, // so here we just mask the exponent range of "v" and compare it with the // unmasked input value. If they are equal, our value is a power of // two. Also, we reject all values which are less than the minimal possible // power of two or greater than the maximum possible power of two. // We check values only with exponent in more limited ranges // [-126..+126] for floats and [-1022..+1022] for doubles for avoiding // overflows and reject NaNs, infinity and denormals. We also reject // "asymmetric exponents", like +1023, because the range of // (non-NaN, non-infinity) values is -1022..+1023, and it is convenient in // optimizations to depend on being able to invert a power of two without // losing precision. // This function used in OptimizeInstruction pass. const uint32_t MIN_POT = 0x01U << 23; // 0x1p-126 const uint32_t MAX_POT = 0xFDU << 23; // 0x1p+126 const uint32_t EXP_MASK = 0xFFU << 23; // mask only exponent const uint32_t SIGN_MASK = ~0U >> 1; // mask everything except sign auto u = bit_cast(v) & SIGN_MASK; return u >= MIN_POT && u <= MAX_POT && (u & EXP_MASK) == u; } bool isPowerOf2InvertibleFloat(double v) { // See isPowerOf2InvertibleFloat(float) const uint64_t MIN_POT = 0x001ULL << 52; // 0x1p-1022 const uint64_t MAX_POT = 0x7FDULL << 52; // 0x1p+1022 const uint64_t EXP_MASK = 0x7FFULL << 52; // mask only exponent const uint64_t SIGN_MASK = ~0ULL >> 1; // mask everything except sign auto u = bit_cast(v) & SIGN_MASK; return u >= MIN_POT && u <= MAX_POT && (u & EXP_MASK) == u; } uint32_t log2(uint32_t v) { if (!isPowerOf2(v)) { WASM_UNREACHABLE("value should be a power of two"); } return 31 - countLeadingZeroes(v); } uint32_t pow2(uint32_t v) { return v < 32 ? 1 << v : 0; } } // namespace wasm::Bits binaryen-version_108/src/support/bits.h000066400000000000000000000055461423707623100203740ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_support_bits_h #define wasm_support_bits_h #include #include #include /* * Portable bit functions. * * Not all platforms offer fast intrinsics for these functions, and some * compilers require checking CPUID at runtime before using the intrinsic. * * We instead use portable and reasonably-fast implementations, while * avoiding implementations with large lookup tables. */ namespace wasm::Bits { int popCount(uint8_t); int popCount(uint16_t); int popCount(uint32_t); int popCount(uint64_t); inline int popCount(int8_t v) { return popCount(uint8_t(v)); } inline int popCount(int16_t v) { return popCount(uint16_t(v)); } inline int popCount(int32_t v) { return popCount(uint32_t(v)); } inline int popCount(int64_t v) { return popCount(uint64_t(v)); } uint32_t bitReverse(uint32_t); int countTrailingZeroes(uint32_t); int countTrailingZeroes(uint64_t); inline int countTrailingZeroes(int32_t v) { return countTrailingZeroes(uint32_t(v)); } inline int countTrailingZeroes(int64_t v) { return countTrailingZeroes(uint64_t(v)); } int countLeadingZeroes(uint32_t); int countLeadingZeroes(uint64_t); inline int countLeadingZeroes(int32_t v) { return countLeadingZeroes(uint32_t(v)); } inline int countLeadingZeroes(int64_t v) { return countLeadingZeroes(uint64_t(v)); } int ceilLog2(uint32_t); int ceilLog2(uint64_t); inline int ceilLog2(int32_t v) { return ceilLog2(uint32_t(v)); } inline int ceilLog2(int64_t v) { return ceilLog2(uint64_t(v)); } template bool isPowerOf2(T v) { return v != 0 && (v & (v - 1)) == 0; } bool isPowerOf2InvertibleFloat(float); bool isPowerOf2InvertibleFloat(double); template inline static T rotateLeft(T val, U count) { auto value = typename std::make_unsigned::type(val); U mask = sizeof(T) * CHAR_BIT - 1; count &= mask; return (value << count) | (value >> (-count & mask)); } template inline static T rotateRight(T val, U count) { auto value = typename std::make_unsigned::type(val); U mask = sizeof(T) * CHAR_BIT - 1; count &= mask; return (value >> count) | (value << (-count & mask)); } uint32_t log2(uint32_t v); uint32_t pow2(uint32_t v); } // namespace wasm::Bits #endif // wasm_support_bits_h binaryen-version_108/src/support/colors.cpp000066400000000000000000000035651423707623100212660ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "support/colors.h" #include #include namespace { bool colors_enabled = true; } // anonymous namespace void Colors::setEnabled(bool enabled) { colors_enabled = enabled; } bool Colors::isEnabled() { return colors_enabled; } #if defined(__linux__) || defined(__APPLE__) #include void Colors::outputColorCode(std::ostream& stream, const char* colorCode) { const static bool has_color = []() { return (getenv("COLORS") && getenv("COLORS")[0] == '1') || // forced (isatty(STDOUT_FILENO) && (!getenv("COLORS") || getenv("COLORS")[0] != '0')); // implicit }(); if (has_color && colors_enabled) { stream << colorCode; } } #elif defined(_WIN32) #include #include #include void Colors::outputColorCode(std::ostream& stream, const WORD& colorCode) { const static bool has_color = []() { return _isatty(_fileno(stdout)) && (!getenv("COLORS") || getenv("COLORS")[0] != '0'); // implicit }(); static HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); static HANDLE hStderr = GetStdHandle(STD_ERROR_HANDLE); if (has_color && colors_enabled) SetConsoleTextAttribute(&stream == &std::cout ? hStdout : hStderr, colorCode); } #endif binaryen-version_108/src/support/colors.h000066400000000000000000000051051423707623100207230ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_support_color_h #define wasm_support_color_h #include namespace Colors { void setEnabled(bool enabled); bool isEnabled(); #if defined(__linux__) || defined(__APPLE__) void outputColorCode(std::ostream& stream, const char* colorCode); inline void normal(std::ostream& stream) { outputColorCode(stream, "\033[0m"); } inline void red(std::ostream& stream) { outputColorCode(stream, "\033[31m"); } inline void magenta(std::ostream& stream) { outputColorCode(stream, "\033[35m"); } inline void orange(std::ostream& stream) { outputColorCode(stream, "\033[33m"); } inline void grey(std::ostream& stream) { outputColorCode(stream, "\033[37m"); } inline void green(std::ostream& stream) { outputColorCode(stream, "\033[32m"); } inline void blue(std::ostream& stream) { outputColorCode(stream, "\033[34m"); } inline void bold(std::ostream& stream) { outputColorCode(stream, "\033[1m"); } #elif defined(_WIN32) void outputColorCode(std::ostream& stream, const unsigned short& colorCode); inline void normal(std::ostream& stream) { outputColorCode(stream, 0x07); } inline void red(std::ostream& stream) { outputColorCode(stream, 0x0c); } inline void magenta(std::ostream& stream) { outputColorCode(stream, 0x05); } inline void orange(std::ostream& stream) { outputColorCode(stream, 0x06); } inline void grey(std::ostream& stream) { outputColorCode(stream, 0x08); } inline void green(std::ostream& stream) { outputColorCode(stream, 0x02); } inline void blue(std::ostream& stream) { outputColorCode(stream, 0x09); } inline void bold(std::ostream& stream) { /* Do nothing */ } #else inline void normal(std::ostream& stream) {} inline void red(std::ostream& stream) {} inline void magenta(std::ostream& stream) {} inline void orange(std::ostream& stream) {} inline void grey(std::ostream& stream) {} inline void green(std::ostream& stream) {} inline void blue(std::ostream& stream) {} inline void bold(std::ostream& stream) {} #endif } // namespace Colors #endif // wasm_support_color_h binaryen-version_108/src/support/command-line.cpp000066400000000000000000000170421423707623100223230ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "support/command-line.h" #include "config.h" #include "support/debug.h" using namespace wasm; #ifndef SCREEN_WIDTH #define SCREEN_WIDTH 80 #endif void printWrap(std::ostream& os, int leftPad, const std::string& content) { int len = content.size(); int space = SCREEN_WIDTH - leftPad; std::string nextWord; std::string pad(leftPad, ' '); for (int i = 0; i <= len; ++i) { if (i != len && content[i] != ' ' && content[i] != '\n') { nextWord += content[i]; } else { if (static_cast(nextWord.size()) > space) { os << '\n' << pad; space = SCREEN_WIDTH - leftPad; } os << nextWord; space -= nextWord.size() + 1; if (space > 0) { os << ' '; } nextWord.clear(); if (content[i] == '\n') { os << '\n'; space = SCREEN_WIDTH - leftPad; } } } } Options::Options(const std::string& command, const std::string& description) : debug(false), positional(Arguments::Zero) { std::string GeneralOption = "General options"; add("--version", "", "Output version information and exit", GeneralOption, Arguments::Zero, [command](Options*, const std::string&) { std::cout << command << " version " << PROJECT_VERSION << '\n'; exit(0); }); add("--help", "-h", "Show this help message and exit", GeneralOption, Arguments::Zero, [this, command, description](Options* o, const std::string&) { for (size_t i = 0; i < SCREEN_WIDTH; i++) { std::cout << '='; } std::cout << '\n'; std::cout << command; if (positional != Arguments::Zero) { std::cout << ' ' << positionalName; } std::cout << "\n\n"; printWrap(std::cout, 0, description); std::cout << '\n'; for (size_t i = 0; i < SCREEN_WIDTH; i++) { std::cout << '='; } std::cout << '\n'; size_t optionWidth = 0; for (const auto& o : options) { if (o.hidden) { continue; } optionWidth = std::max(optionWidth, o.longName.size() + o.shortName.size()); } for (int i = int(categories.size()) - 1; i >= 0; i--) { auto& category = categories[i]; std::cout << "\n\n" << category << ":\n"; for (size_t i = 0; i < category.size() + 1; i++) { std::cout << '-'; } std::cout << '\n'; for (const auto& o : options) { if (o.hidden || o.category != category) { continue; } std::cout << '\n'; bool long_n_short = o.longName.size() != 0 && o.shortName.size() != 0; size_t pad = 1 + optionWidth - o.longName.size() - o.shortName.size(); std::cout << " " << o.longName << (long_n_short ? ',' : ' ') << o.shortName << std::string(pad, ' '); printWrap(std::cout, optionWidth + 4, o.description); std::cout << '\n'; } } std::cout << '\n'; exit(EXIT_SUCCESS); }); add("--debug", "-d", "Print debug information to stderr", GeneralOption, Arguments::Optional, [&](Options* o, const std::string& arguments) { debug = true; setDebugEnabled(arguments.c_str()); }); } Options::~Options() {} Options& Options::add(const std::string& longName, const std::string& shortName, const std::string& description, const std::string& category, Arguments arguments, const Action& action, bool hidden) { options.push_back( {longName, shortName, description, category, arguments, action, hidden, 0}); if (std::find(categories.begin(), categories.end(), category) == categories.end()) { categories.push_back(category); } return *this; } Options& Options::add_positional(const std::string& name, Arguments arguments, const Action& action) { positional = arguments; positionalName = name; positionalAction = action; return *this; } void Options::parse(int argc, const char* argv[]) { assert(argc > 0 && "expect at least program name as an argument"); size_t positionalsSeen = 0; auto dashes = [](const std::string& s) { for (size_t i = 0; i < s.size(); ++i) { if (s[i] != '-') { return i; } } return s.size(); }; for (size_t i = 1, e = argc; i != e; ++i) { std::string currentOption = argv[i]; // "-" alone is a positional option if (dashes(currentOption) == 0 || currentOption == "-") { // Positional. switch (positional) { case Arguments::Zero: // Optional arguments must use --flag=A format, and not separated by // spaces (which would be ambiguous). case Arguments::Optional: std::cerr << "Unexpected positional argument '" << currentOption << "'\n"; exit(EXIT_FAILURE); case Arguments::One: if (positionalsSeen) { std::cerr << "Unexpected second positional argument '" << currentOption << "' for " << positionalName << '\n'; exit(EXIT_FAILURE); } [[fallthrough]]; case Arguments::N: positionalAction(this, currentOption); ++positionalsSeen; break; } continue; } // Non-positional. std::string argument; auto equal = currentOption.find_first_of('='); if (equal != std::string::npos) { argument = currentOption.substr(equal + 1); currentOption = currentOption.substr(0, equal); } Option* option = nullptr; for (auto& o : options) { if (o.longName == currentOption || o.shortName == currentOption) { option = &o; } } if (!option) { std::cerr << "Unknown option '" << currentOption << "'\n"; exit(EXIT_FAILURE); } switch (option->arguments) { case Arguments::Zero: if (argument.size()) { std::cerr << "Unexpected argument '" << argument << "' for option '" << currentOption << "'\n"; exit(EXIT_FAILURE); } break; case Arguments::One: if (option->seen) { std::cerr << "Unexpected second argument '" << argument << "' for '" << currentOption << "'\n"; exit(EXIT_FAILURE); } [[fallthrough]]; case Arguments::N: if (!argument.size()) { if (i + 1 == e) { std::cerr << "Couldn't find expected argument for '" << currentOption << "'\n"; exit(EXIT_FAILURE); } argument = argv[++i]; } break; case Arguments::Optional: break; } option->action(this, argument); ++option->seen; } } binaryen-version_108/src/support/command-line.h000066400000000000000000000046351423707623100217740ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Command line helpers. // #ifndef wasm_support_command_line_h #define wasm_support_command_line_h #include #include #include #include #include #include "wasm.h" namespace wasm { class Options { public: using Action = std::function; enum class Arguments { // No arguments. Zero, // One argument, in the form --flag A or --flag=A One, // Multiple arguments, in the form --flag A B C N, // An optional single argument, in the form --flag=A (we disallow --flag A // as that would be ambiguous regarding whether A is another flag, or an // argument to us). Optional }; bool debug; std::map extra; Options(const std::string& command, const std::string& description); ~Options(); Options& add(const std::string& longName, const std::string& shortName, const std::string& description, const std::string& category, Arguments arguments, const Action& action, bool hidden = false); Options& add_positional(const std::string& name, Arguments arguments, const Action& action); void parse(int argc, const char* argv[]); private: struct Option { std::string longName; std::string shortName; std::string description; std::string category; Arguments arguments; Action action; bool hidden; size_t seen; }; std::vector
makeTable(Name name, Type type = Type::funcref, Address initial = 0, Address max = Table::kMaxSize) { auto table = std::make_unique
(); table->name = name; table->type = type; table->initial = initial; table->max = max; return table; } static std::unique_ptr makeElementSegment(Name name, Name table, Expression* offset = nullptr, Type type = Type::funcref) { auto seg = std::make_unique(); seg->name = name; seg->table = table; seg->offset = offset; seg->type = type; return seg; } static std::unique_ptr makeExport(Name name, Name value, ExternalKind kind) { auto export_ = std::make_unique(); export_->name = name; export_->value = value; export_->kind = kind; return export_; } enum Mutability { Mutable, Immutable }; static std::unique_ptr makeGlobal(Name name, Type type, Expression* init, Mutability mutable_) { auto glob = std::make_unique(); glob->name = name; glob->type = type; glob->init = init; glob->mutable_ = mutable_ == Mutable; return glob; } static std::unique_ptr makeTag(Name name, Signature sig) { auto tag = std::make_unique(); tag->name = name; tag->sig = sig; return tag; } // IR nodes Nop* makeNop() { return wasm.allocator.alloc(); } Block* makeBlock(Expression* first = nullptr) { auto* ret = wasm.allocator.alloc(); if (first) { ret->list.push_back(first); ret->finalize(); } return ret; } Block* makeBlock(Name name, Expression* first = nullptr) { auto* ret = makeBlock(first); ret->name = name; ret->finalize(); return ret; } Block* makeBlock(const std::vector& items) { auto* ret = wasm.allocator.alloc(); ret->list.set(items); ret->finalize(); return ret; } Block* makeBlock(const std::vector& items, Type type) { auto* ret = wasm.allocator.alloc(); ret->list.set(items); ret->finalize(type); return ret; } Block* makeBlock(const ExpressionList& items) { auto* ret = wasm.allocator.alloc(); ret->list.set(items); ret->finalize(); return ret; } Block* makeBlock(const ExpressionList& items, Type type) { auto* ret = wasm.allocator.alloc(); ret->list.set(items); ret->finalize(type); return ret; } Block* makeBlock(Name name, const ExpressionList& items) { auto* ret = wasm.allocator.alloc(); ret->name = name; ret->list.set(items); ret->finalize(); return ret; } Block* makeBlock(Name name, const ExpressionList& items, Type type) { auto* ret = wasm.allocator.alloc(); ret->name = name; ret->list.set(items); ret->finalize(type); return ret; } If* makeIf(Expression* condition, Expression* ifTrue, Expression* ifFalse = nullptr) { auto* ret = wasm.allocator.alloc(); ret->condition = condition; ret->ifTrue = ifTrue; ret->ifFalse = ifFalse; ret->finalize(); return ret; } If* makeIf(Expression* condition, Expression* ifTrue, Expression* ifFalse, Type type) { auto* ret = wasm.allocator.alloc(); ret->condition = condition; ret->ifTrue = ifTrue; ret->ifFalse = ifFalse; ret->finalize(type); return ret; } Loop* makeLoop(Name name, Expression* body) { auto* ret = wasm.allocator.alloc(); ret->name = name; ret->body = body; ret->finalize(); return ret; } Loop* makeLoop(Name name, Expression* body, Type type) { auto* ret = wasm.allocator.alloc(); ret->name = name; ret->body = body; ret->finalize(type); return ret; } Break* makeBreak(Name name, Expression* value = nullptr, Expression* condition = nullptr) { auto* ret = wasm.allocator.alloc(); ret->name = name; ret->value = value; ret->condition = condition; ret->finalize(); return ret; } template Switch* makeSwitch(T& list, Name default_, Expression* condition, Expression* value = nullptr) { auto* ret = wasm.allocator.alloc(); ret->targets.set(list); ret->default_ = default_; ret->value = value; ret->condition = condition; return ret; } Call* makeCall(Name target, const std::vector& args, Type type, bool isReturn = false) { auto* call = wasm.allocator.alloc(); // not all functions may exist yet, so type must be provided call->type = type; call->target = target; call->operands.set(args); call->isReturn = isReturn; return call; } template Call* makeCall(Name target, const T& args, Type type, bool isReturn = false) { auto* call = wasm.allocator.alloc(); // not all functions may exist yet, so type must be provided call->type = type; call->target = target; call->operands.set(args); call->isReturn = isReturn; call->finalize(); return call; } template CallIndirect* makeCallIndirect(const Name table, Expression* target, const T& args, HeapType heapType, bool isReturn = false) { assert(heapType.isSignature()); auto* call = wasm.allocator.alloc(); call->table = table; call->heapType = heapType; call->type = heapType.getSignature().results; call->target = target; call->operands.set(args); call->isReturn = isReturn; call->finalize(); return call; } template CallRef* makeCallRef(Expression* target, const T& args, Type type, bool isReturn = false) { auto* call = wasm.allocator.alloc(); call->type = type; call->target = target; call->operands.set(args); call->isReturn = isReturn; call->finalize(); return call; } LocalGet* makeLocalGet(Index index, Type type) { auto* ret = wasm.allocator.alloc(); ret->index = index; ret->type = type; return ret; } LocalSet* makeLocalSet(Index index, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->index = index; ret->value = value; ret->makeSet(); ret->finalize(); return ret; } LocalSet* makeLocalTee(Index index, Expression* value, Type type) { auto* ret = wasm.allocator.alloc(); ret->index = index; ret->value = value; ret->makeTee(type); return ret; } GlobalGet* makeGlobalGet(Name name, Type type) { auto* ret = wasm.allocator.alloc(); ret->name = name; ret->type = type; return ret; } GlobalSet* makeGlobalSet(Name name, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->name = name; ret->value = value; ret->finalize(); return ret; } Load* makeLoad(unsigned bytes, bool signed_, uint32_t offset, unsigned align, Expression* ptr, Type type) { auto* ret = wasm.allocator.alloc(); ret->isAtomic = false; ret->bytes = bytes; ret->signed_ = signed_; ret->offset = offset; ret->align = align; ret->ptr = ptr; ret->type = type; return ret; } Load* makeAtomicLoad(unsigned bytes, uint32_t offset, Expression* ptr, Type type) { Load* load = makeLoad(bytes, false, offset, bytes, ptr, type); load->isAtomic = true; return load; } AtomicWait* makeAtomicWait(Expression* ptr, Expression* expected, Expression* timeout, Type expectedType, Address offset) { auto* wait = wasm.allocator.alloc(); wait->offset = offset; wait->ptr = ptr; wait->expected = expected; wait->timeout = timeout; wait->expectedType = expectedType; wait->finalize(); return wait; } AtomicNotify* makeAtomicNotify(Expression* ptr, Expression* notifyCount, Address offset) { auto* notify = wasm.allocator.alloc(); notify->offset = offset; notify->ptr = ptr; notify->notifyCount = notifyCount; notify->finalize(); return notify; } AtomicFence* makeAtomicFence() { return wasm.allocator.alloc(); } Store* makeStore(unsigned bytes, uint32_t offset, unsigned align, Expression* ptr, Expression* value, Type type) { auto* ret = wasm.allocator.alloc(); ret->isAtomic = false; ret->bytes = bytes; ret->offset = offset; ret->align = align; ret->ptr = ptr; ret->value = value; ret->valueType = type; ret->finalize(); assert(ret->value->type.isConcrete() ? ret->value->type == type : true); return ret; } Store* makeAtomicStore(unsigned bytes, uint32_t offset, Expression* ptr, Expression* value, Type type) { Store* store = makeStore(bytes, offset, bytes, ptr, value, type); store->isAtomic = true; return store; } AtomicRMW* makeAtomicRMW(AtomicRMWOp op, unsigned bytes, uint32_t offset, Expression* ptr, Expression* value, Type type) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->bytes = bytes; ret->offset = offset; ret->ptr = ptr; ret->value = value; ret->type = type; ret->finalize(); return ret; } AtomicCmpxchg* makeAtomicCmpxchg(unsigned bytes, uint32_t offset, Expression* ptr, Expression* expected, Expression* replacement, Type type) { auto* ret = wasm.allocator.alloc(); ret->bytes = bytes; ret->offset = offset; ret->ptr = ptr; ret->expected = expected; ret->replacement = replacement; ret->type = type; ret->finalize(); return ret; } SIMDExtract* makeSIMDExtract(SIMDExtractOp op, Expression* vec, uint8_t index) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->vec = vec; ret->index = index; ret->finalize(); return ret; } SIMDReplace* makeSIMDReplace(SIMDReplaceOp op, Expression* vec, uint8_t index, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->vec = vec; ret->index = index; ret->value = value; ret->finalize(); return ret; } SIMDShuffle* makeSIMDShuffle(Expression* left, Expression* right, const std::array& mask) { auto* ret = wasm.allocator.alloc(); ret->left = left; ret->right = right; ret->mask = mask; ret->finalize(); return ret; } SIMDTernary* makeSIMDTernary(SIMDTernaryOp op, Expression* a, Expression* b, Expression* c) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->a = a; ret->b = b; ret->c = c; ret->finalize(); return ret; } SIMDShift* makeSIMDShift(SIMDShiftOp op, Expression* vec, Expression* shift) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->vec = vec; ret->shift = shift; ret->finalize(); return ret; } SIMDLoad* makeSIMDLoad(SIMDLoadOp op, Address offset, Address align, Expression* ptr) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->offset = offset; ret->align = align; ret->ptr = ptr; ret->finalize(); return ret; } SIMDLoadStoreLane* makeSIMDLoadStoreLane(SIMDLoadStoreLaneOp op, Address offset, Address align, uint8_t index, Expression* ptr, Expression* vec) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->offset = offset; ret->align = align; ret->index = index; ret->ptr = ptr; ret->vec = vec; ret->finalize(); return ret; } MemoryInit* makeMemoryInit(uint32_t segment, Expression* dest, Expression* offset, Expression* size) { auto* ret = wasm.allocator.alloc(); ret->segment = segment; ret->dest = dest; ret->offset = offset; ret->size = size; ret->finalize(); return ret; } DataDrop* makeDataDrop(uint32_t segment) { auto* ret = wasm.allocator.alloc(); ret->segment = segment; ret->finalize(); return ret; } MemoryCopy* makeMemoryCopy(Expression* dest, Expression* source, Expression* size) { auto* ret = wasm.allocator.alloc(); ret->dest = dest; ret->source = source; ret->size = size; ret->finalize(); return ret; } MemoryFill* makeMemoryFill(Expression* dest, Expression* value, Expression* size) { auto* ret = wasm.allocator.alloc(); ret->dest = dest; ret->value = value; ret->size = size; ret->finalize(); return ret; } Const* makeConst(Literal value) { assert(value.type.isNumber()); auto* ret = wasm.allocator.alloc(); ret->value = value; ret->type = value.type; return ret; } template Const* makeConst(T x) { return makeConst(Literal(x)); } Unary* makeUnary(UnaryOp op, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->value = value; ret->finalize(); return ret; } Const* makeConstPtr(uint64_t val) { return makeConst(Literal::makeFromInt64(val, wasm.memory.indexType)); } Binary* makeBinary(BinaryOp op, Expression* left, Expression* right) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->left = left; ret->right = right; ret->finalize(); return ret; } Select* makeSelect(Expression* condition, Expression* ifTrue, Expression* ifFalse) { auto* ret = wasm.allocator.alloc(); ret->condition = condition; ret->ifTrue = ifTrue; ret->ifFalse = ifFalse; ret->finalize(type); return ret; } Return* makeReturn(Expression* value = nullptr) { auto* ret = wasm.allocator.alloc(); ret->value = value; return ret; } MemorySize* makeMemorySize() { auto* ret = wasm.allocator.alloc(); if (wasm.memory.is64()) { ret->make64(); } ret->finalize(); return ret; } MemoryGrow* makeMemoryGrow(Expression* delta) { auto* ret = wasm.allocator.alloc(); if (wasm.memory.is64()) { ret->make64(); } ret->delta = delta; ret->finalize(); return ret; } RefNull* makeRefNull(HeapType type) { auto* ret = wasm.allocator.alloc(); ret->finalize(Type(type, Nullable)); return ret; } RefNull* makeRefNull(Type type) { auto* ret = wasm.allocator.alloc(); ret->finalize(type); return ret; } RefIs* makeRefIs(RefIsOp op, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->value = value; ret->finalize(); return ret; } RefFunc* makeRefFunc(Name func, HeapType heapType) { auto* ret = wasm.allocator.alloc(); ret->func = func; ret->finalize(Type(heapType, NonNullable)); return ret; } RefEq* makeRefEq(Expression* left, Expression* right) { auto* ret = wasm.allocator.alloc(); ret->left = left; ret->right = right; ret->finalize(); return ret; } TableGet* makeTableGet(Name table, Expression* index, Type type) { auto* ret = wasm.allocator.alloc(); ret->table = table; ret->index = index; ret->type = type; ret->finalize(); return ret; } TableSet* makeTableSet(Name table, Expression* index, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->table = table; ret->index = index; ret->value = value; ret->finalize(); return ret; } TableSize* makeTableSize(Name table) { auto* ret = wasm.allocator.alloc(); ret->table = table; ret->finalize(); return ret; } TableGrow* makeTableGrow(Name table, Expression* value, Expression* delta) { auto* ret = wasm.allocator.alloc(); ret->table = table; ret->value = value; ret->delta = delta; ret->finalize(); return ret; } private: Try* makeTry(Name name, Expression* body, const std::vector& catchTags, const std::vector& catchBodies, Name delegateTarget, Type type, bool hasType) { // differentiate whether a type was passed in auto* ret = wasm.allocator.alloc(); ret->name = name; ret->body = body; ret->catchTags.set(catchTags); ret->catchBodies.set(catchBodies); if (hasType) { ret->finalize(type); } else { ret->finalize(); } return ret; } public: Try* makeTry(Expression* body, const std::vector& catchTags, const std::vector& catchBodies) { return makeTry( Name(), body, catchTags, catchBodies, Name(), Type::none, false); } Try* makeTry(Expression* body, const std::vector& catchTags, const std::vector& catchBodies, Type type) { return makeTry(Name(), body, catchTags, catchBodies, Name(), type, true); } Try* makeTry(Name name, Expression* body, const std::vector& catchTags, const std::vector& catchBodies) { return makeTry( name, body, catchTags, catchBodies, Name(), Type::none, false); } Try* makeTry(Name name, Expression* body, const std::vector& catchTags, const std::vector& catchBodies, Type type) { return makeTry(name, body, catchTags, catchBodies, Name(), type, true); } Try* makeTry(Expression* body, Name delegateTarget) { return makeTry(Name(), body, {}, {}, delegateTarget, Type::none, false); } Try* makeTry(Expression* body, Name delegateTarget, Type type) { return makeTry(Name(), body, {}, {}, delegateTarget, type, true); } Try* makeTry(Name name, Expression* body, Name delegateTarget) { return makeTry(name, body, {}, {}, delegateTarget, Type::none, false); } Try* makeTry(Name name, Expression* body, Name delegateTarget, Type type) { return makeTry(name, body, {}, {}, delegateTarget, type, true); } Throw* makeThrow(Tag* tag, const std::vector& args) { return makeThrow(tag->name, args); } Throw* makeThrow(Name tag, const std::vector& args) { auto* ret = wasm.allocator.alloc(); ret->tag = tag; ret->operands.set(args); ret->finalize(); return ret; } Rethrow* makeRethrow(Name target) { auto* ret = wasm.allocator.alloc(); ret->target = target; ret->finalize(); return ret; } Unreachable* makeUnreachable() { return wasm.allocator.alloc(); } Pop* makePop(Type type) { auto* ret = wasm.allocator.alloc(); ret->type = type; ret->finalize(); return ret; } template TupleMake* makeTupleMake(ListType&& operands) { auto* ret = wasm.allocator.alloc(); ret->operands.set(operands); ret->finalize(); return ret; } TupleExtract* makeTupleExtract(Expression* tuple, Index index) { auto* ret = wasm.allocator.alloc(); ret->tuple = tuple; ret->index = index; ret->finalize(); return ret; } I31New* makeI31New(Expression* value) { auto* ret = wasm.allocator.alloc(); ret->value = value; ret->finalize(); return ret; } I31Get* makeI31Get(Expression* i31, bool signed_) { auto* ret = wasm.allocator.alloc(); ret->i31 = i31; ret->signed_ = signed_; ret->finalize(); return ret; } RefTest* makeRefTest(Expression* ref, Expression* rtt) { auto* ret = wasm.allocator.alloc(); ret->ref = ref; ret->rtt = rtt; ret->finalize(); return ret; } RefTest* makeRefTest(Expression* ref, HeapType intendedType) { auto* ret = wasm.allocator.alloc(); ret->ref = ref; ret->intendedType = intendedType; ret->finalize(); return ret; } RefCast* makeRefCast(Expression* ref, Expression* rtt) { auto* ret = wasm.allocator.alloc(); ret->ref = ref; ret->rtt = rtt; ret->finalize(); return ret; } RefCast* makeRefCast(Expression* ref, HeapType intendedType, RefCast::Safety safety) { auto* ret = wasm.allocator.alloc(); ret->ref = ref; ret->intendedType = intendedType; ret->safety = safety; ret->finalize(); return ret; } BrOn* makeBrOn(BrOnOp op, Name name, Expression* ref, Expression* rtt = nullptr) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->name = name; ret->ref = ref; ret->rtt = rtt; ret->finalize(); return ret; } BrOn* makeBrOn(BrOnOp op, Name name, Expression* ref, HeapType intendedType) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->name = name; ret->ref = ref; ret->intendedType = intendedType; ret->finalize(); return ret; } RttCanon* makeRttCanon(HeapType heapType) { auto* ret = wasm.allocator.alloc(); ret->type = Type(Rtt(heapType.getDepth(), heapType)); ret->finalize(); return ret; } RttSub* makeRttSub(HeapType heapType, Expression* parent) { auto* ret = wasm.allocator.alloc(); ret->parent = parent; auto parentRtt = parent->type.getRtt(); if (parentRtt.hasDepth()) { ret->type = Type(Rtt(parentRtt.depth + 1, heapType)); } else { ret->type = Type(Rtt(heapType)); } ret->finalize(); return ret; } RttSub* makeRttFreshSub(HeapType heapType, Expression* parent) { auto* ret = makeRttSub(heapType, parent); ret->fresh = true; return ret; } template StructNew* makeStructNew(Expression* rtt, const T& args) { auto* ret = wasm.allocator.alloc(); ret->rtt = rtt; ret->operands.set(args); ret->finalize(); return ret; } template StructNew* makeStructNew(HeapType type, const T& args) { auto* ret = wasm.allocator.alloc(); ret->operands.set(args); ret->type = Type(type, NonNullable); ret->finalize(); return ret; } StructGet* makeStructGet(Index index, Expression* ref, Type type, bool signed_ = false) { auto* ret = wasm.allocator.alloc(); ret->index = index; ret->ref = ref; ret->type = type; ret->signed_ = signed_; ret->finalize(); return ret; } StructSet* makeStructSet(Index index, Expression* ref, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->index = index; ret->ref = ref; ret->value = value; ret->finalize(); return ret; } ArrayNew* makeArrayNew(Expression* rtt, Expression* size, Expression* init = nullptr) { auto* ret = wasm.allocator.alloc(); ret->rtt = rtt; ret->size = size; ret->init = init; ret->finalize(); return ret; } ArrayNew* makeArrayNew(HeapType type, Expression* size, Expression* init = nullptr) { auto* ret = wasm.allocator.alloc(); ret->size = size; ret->init = init; ret->type = Type(type, NonNullable); ret->finalize(); return ret; } ArrayInit* makeArrayInit(Expression* rtt, const std::vector& values) { auto* ret = wasm.allocator.alloc(); ret->rtt = rtt; ret->values.set(values); ret->finalize(); return ret; } ArrayInit* makeArrayInit(HeapType type, const std::vector& values) { auto* ret = wasm.allocator.alloc(); ret->values.set(values); ret->type = Type(type, NonNullable); ret->finalize(); return ret; } ArrayGet* makeArrayGet(Expression* ref, Expression* index, bool signed_ = false) { auto* ret = wasm.allocator.alloc(); ret->ref = ref; ret->index = index; ret->signed_ = signed_; ret->finalize(); return ret; } ArraySet* makeArraySet(Expression* ref, Expression* index, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->ref = ref; ret->index = index; ret->value = value; ret->finalize(); return ret; } ArrayLen* makeArrayLen(Expression* ref) { auto* ret = wasm.allocator.alloc(); ret->ref = ref; ret->finalize(); return ret; } ArrayCopy* makeArrayCopy(Expression* destRef, Expression* destIndex, Expression* srcRef, Expression* srcIndex, Expression* length) { auto* ret = wasm.allocator.alloc(); ret->destRef = destRef; ret->destIndex = destIndex; ret->srcRef = srcRef; ret->srcIndex = srcIndex; ret->length = length; ret->finalize(); return ret; } RefAs* makeRefAs(RefAsOp op, Expression* value) { auto* ret = wasm.allocator.alloc(); ret->op = op; ret->value = value; ret->finalize(); return ret; } // Additional helpers Drop* makeDrop(Expression* value) { auto* ret = wasm.allocator.alloc(); ret->value = value; ret->finalize(); return ret; } // Make a constant expression. This might be a wasm Const, or something // else of constant value like ref.null. Expression* makeConstantExpression(Literal value) { auto type = value.type; if (type.isNumber()) { return makeConst(value); } if (value.isNull()) { return makeRefNull(type); } if (type.isFunction()) { return makeRefFunc(value.getFunc(), type.getHeapType()); } if (type.isRtt()) { return makeRtt(value.type); } TODO_SINGLE_COMPOUND(type); switch (type.getBasic()) { case Type::anyref: case Type::eqref: assert(value.isNull() && "unexpected non-null reference type literal"); return makeRefNull(type); case Type::i31ref: return makeI31New(makeConst(value.geti31())); default: WASM_UNREACHABLE("invalid constant expression"); } } Expression* makeConstantExpression(Literals values) { assert(values.size() > 0); if (values.size() == 1) { return makeConstantExpression(values[0]); } else { std::vector consts; for (auto value : values) { consts.push_back(makeConstantExpression(value)); } return makeTupleMake(consts); } } // Given a type, creates an RTT expression of that type, using a combination // of rtt.canon and rtt.subs. Expression* makeRtt(Type type) { Expression* ret = makeRttCanon(type.getHeapType()); if (type.getRtt().hasDepth()) { for (Index i = 0; i < type.getRtt().depth; i++) { ret = makeRttSub(type.getHeapType(), ret); } } return ret; } // Additional utility functions for building on top of nodes // Convenient to have these on Builder, as it has allocation built in static Index addParam(Function* func, Name name, Type type) { // only ok to add a param if no vars, otherwise indices are invalidated assert(func->localIndices.size() == func->getParams().size()); assert(name.is()); Signature sig = func->getSig(); std::vector params(sig.params.begin(), sig.params.end()); params.push_back(type); func->type = Signature(Type(params), sig.results); Index index = func->localNames.size(); func->localIndices[name] = index; func->localNames[index] = name; return index; } static Index addVar(Function* func, Name name, Type type) { // always ok to add a var, it does not affect other indices assert(type.isConcrete()); Index index = func->getNumLocals(); if (name.is()) { func->localIndices[name] = index; func->localNames[index] = name; } func->vars.emplace_back(type); return index; } static Index addVar(Function* func, Type type) { return addVar(func, Name(), type); } static void clearLocalNames(Function* func) { func->localNames.clear(); func->localIndices.clear(); } // ensure a node is a block, if it isn't already, and optionally append to the // block Block* blockify(Expression* any, Expression* append = nullptr) { Block* block = nullptr; if (any) { block = any->dynCast(); } if (!block) { block = makeBlock(any); } if (append) { block->list.push_back(append); block->finalize(); } return block; } template Block* blockify(Expression* any, Expression* append, Ts... args) { return blockify(blockify(any, append), args...); } // ensure a node is a block, if it isn't already, and optionally append to the // block this variant sets a name for the block, so it will not reuse a block // already named Block* blockifyWithName(Expression* any, Name name, Expression* append = nullptr) { Block* block = nullptr; if (any) { block = any->dynCast(); } if (!block || block->name.is()) { block = makeBlock(any); } block->name = name; if (append) { block->list.push_back(append); block->finalize(); } return block; } // a helper for the common pattern of a sequence of two expressions. Similar // to blockify, but does *not* reuse a block if the first is one. Block* makeSequence(Expression* left, Expression* right) { auto* block = makeBlock(left); block->list.push_back(right); block->finalize(); return block; } Block* makeSequence(Expression* left, Expression* right, Type type) { auto* block = makeBlock(left); block->list.push_back(right); block->finalize(type); return block; } // Drop an expression if it has a concrete type Expression* dropIfConcretelyTyped(Expression* curr) { if (!curr->type.isConcrete()) { return curr; } return makeDrop(curr); } void flip(If* iff) { std::swap(iff->ifTrue, iff->ifFalse); iff->condition = makeUnary(EqZInt32, iff->condition); } // Returns a replacement with the precise same type, and with minimal contents // as best we can. As a replacement, this may reuse the input node. template Expression* replaceWithIdenticalType(T* curr) { if (curr->type.isTuple() && curr->type.isDefaultable()) { return makeConstantExpression(Literal::makeZeros(curr->type)); } if (curr->type.isNullable()) { return ExpressionManipulator::refNull(curr, curr->type); } if (curr->type.isFunction() || !curr->type.isBasic()) { // We can't do any better, keep the original. return curr; } Literal value; // TODO: reuse node conditionally when possible for literals switch (curr->type.getBasic()) { case Type::i32: value = Literal(int32_t(0)); break; case Type::i64: value = Literal(int64_t(0)); break; case Type::f32: value = Literal(float(0)); break; case Type::f64: value = Literal(double(0)); break; case Type::v128: { std::array bytes; bytes.fill(0); value = Literal(bytes.data()); break; } case Type::funcref: WASM_UNREACHABLE("handled above"); case Type::anyref: case Type::eqref: return ExpressionManipulator::refNull(curr, curr->type); case Type::i31ref: return makeI31New(makeConst(0)); case Type::dataref: return curr; case Type::none: return ExpressionManipulator::nop(curr); case Type::unreachable: return ExpressionManipulator::unreachable(curr); } return makeConst(value); } }; // This class adds methods that first inspect the input. They may not have fully // comprehensive error checking, when that can be left to the validator; the // benefit of the validate* methods is that they can share code between the // text and binary format parsers, for handling certain situations in the // input which preclude even creating valid IR, which the validator depends // on. class ValidatingBuilder : public Builder { size_t line = -1, col = -1; public: ValidatingBuilder(Module& wasm, size_t line) : Builder(wasm), line(line) {} ValidatingBuilder(Module& wasm, size_t line, size_t col) : Builder(wasm), line(line), col(col) {} Expression* validateAndMakeBrOn(BrOnOp op, Name name, Expression* ref, Expression* rtt = nullptr) { if (op == BrOnCast) { if (rtt->type == Type::unreachable) { // An unreachable rtt is not supported: the text and binary formats do // not provide the type, so if it's unreachable we should not even // create a br_on_cast in such a case, as we'd have no idea what it // casts to. return makeSequence(makeDrop(ref), rtt); } } if (op == BrOnNull) { if (!ref->type.isRef() && ref->type != Type::unreachable) { throw ParseException("Invalid ref for br_on_null", line, col); } } return makeBrOn(op, name, ref, rtt); } template Expression* validateAndMakeCallRef(Expression* target, const T& args, bool isReturn = false) { if (!target->type.isRef()) { if (target->type == Type::unreachable) { // An unreachable target is not supported. Similiar to br_on_cast, just // emit an unreachable sequence, since we don't have enough information // to create a full call_ref. auto* block = makeBlock(args); block->list.push_back(target); block->finalize(Type::unreachable); return block; } throw ParseException("Non-reference type for a call_ref", line, col); } auto heapType = target->type.getHeapType(); if (!heapType.isSignature()) { throw ParseException("Invalid reference type for a call_ref", line, col); } return makeCallRef(target, args, heapType.getSignature().results, isReturn); } }; } // namespace wasm #endif // wasm_wasm_builder_h binaryen-version_108/src/wasm-debug.h000066400000000000000000000025361423707623100177460ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Comprehensive debug info support (beyond source maps). // #ifndef wasm_wasm_debug_h #define wasm_wasm_debug_h #include #include "pass.h" #include "wasm.h" namespace wasm::Debug { bool isDWARFSection(Name name); bool hasDWARFSections(const Module& wasm); // Dump the DWARF sections to stdout. void dumpDWARF(const Module& wasm); // Check whether we should preserve valid DWARF while optimizing. (If so, we // will disable optimizations that currently cause issues with debug info.) bool shouldPreserveDWARF(PassOptions& options, Module& wasm); // Update the DWARF sections. void writeDWARFSections(Module& wasm, const BinaryLocations& newLocations); } // namespace wasm::Debug #undef DEBUG_TYPE #endif // wasm_wasm_debug_h binaryen-version_108/src/wasm-delegations-fields.def000066400000000000000000000543331423707623100227330ustar00rootroot00000000000000/* * Copyright 2020 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Implements a switch on an expression class ID, and has a case for each id // in which it runs delegates on the fields and immediates. You should include // this file after defining the relevant DELEGATE_* macros. // // All defines used here are undefed automatically at the end for you. // // Most of the defines are necessary, and you will get an error if you forget // them, but some are optional and some imply others, see below. // // The defines are as follows: // // DELEGATE_START(id) - called at the start of a case for an expression class. // // DELEGATE_END(id) - called at the end of a case. // // DELEGATE_GET_FIELD(id, field) - called to get a field by its name. This must // know the object on which to get it, so it is just useful for the case // where you operate on a single such object, but in that case it is nice // because then other things can be defined automatically for you, see later. // // DELEGATE_FIELD_CHILD(id, field) - called for each child field (note: children // are visited in reverse order, which is convenient for walking by pushing // them to a stack first). // // DELEGATE_FIELD_OPTIONAL_CHILD(id, field) - called for a child that may not be // present (like a Return's value). If you do not define this then // DELEGATE_FIELD_CHILD is called. // // DELEGATE_FIELD_CHILD_VECTOR(id, field) - called for a variable-sized vector // of child pointers. If this is not defined, and DELEGATE_GET_FIELD is, then // DELEGATE_FIELD_CHILD is called on them. // // DELEGATE_FIELD_INT(id, field) - called for an integer field (bool, enum, // Index, int32, or int64). // // DELEGATE_FIELD_INT_ARRAY(id, field) - called for a std::array of fixed size // of integer values (like a SIMD mask). If this is not defined, and // DELEGATE_GET_FIELD is, then DELEGATE_FIELD_INT is called on them. // // DELEGATE_FIELD_LITERAL(id, field) - called for a Literal. // // DELEGATE_FIELD_NAME(id, field) - called for a Name. // // DELEGATE_FIELD_NAME_VECTOR(id, field) - called for a variable-sized vector of // names (like try's catch tag names). If this is not defined, and // DELEGATE_GET_FIELD is, then DELEGATE_FIELD_CHILD is called on them. // // DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) - called for a scope name definition // (like a block's name). // // DELEGATE_FIELD_SCOPE_NAME_USE(id, field) - called for a scope name use (like // a break's target). // // DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) - called for a variable-sized // vector of scope names (like a switch's targets). If this is not defined, // and DELEGATE_GET_FIELD is, then DELEGATE_FIELD_SCOPE_NAME_USE is called on // them. // // DELEGATE_FIELD_TYPE(id, field) - called for a Type. // // DELEGATE_FIELD_HEAPTYPE(id, field) - called for a HeapType. // // DELEGATE_FIELD_ADDRESS(id, field) - called for an Address. #ifndef DELEGATE_START #define DELEGATE_START(id) #endif #ifndef DELEGATE_END #define DELEGATE_END(id) #endif #ifndef DELEGATE_FIELD_CHILD #error please define DELEGATE_FIELD_CHILD(id, field) #endif #ifndef DELEGATE_FIELD_OPTIONAL_CHILD #define DELEGATE_FIELD_OPTIONAL_CHILD(id, field) DELEGATE_FIELD_CHILD(id, field) #endif #ifndef DELEGATE_FIELD_CHILD_VECTOR #ifdef DELEGATE_GET_FIELD #define DELEGATE_FIELD_CHILD_VECTOR(id, field) \ for (int i = int((DELEGATE_GET_FIELD(id, field)).size()) - 1; i >= 0; i--) { \ DELEGATE_FIELD_CHILD(id, field[i]); \ } #else #error please define DELEGATE_FIELD_CHILD_VECTOR(id, field) #endif #endif #ifndef DELEGATE_FIELD_INT #error please define DELEGATE_FIELD_INT(id, field) #endif #ifndef DELEGATE_FIELD_INT_ARRAY #ifdef DELEGATE_GET_FIELD #define DELEGATE_FIELD_INT_ARRAY(id, field) \ for (Index i = 0; i < (DELEGATE_GET_FIELD(id, field)).size(); i++) { \ DELEGATE_FIELD_INT(id, field[i]); \ } #else #error please define DELEGATE_FIELD_INT_ARRAY(id, field) #endif #endif #ifndef DELEGATE_FIELD_LITERAL #error please define DELEGATE_FIELD_LITERAL(id, field) #endif #ifndef DELEGATE_FIELD_NAME #error please define DELEGATE_FIELD_NAME(id, field) #endif #ifndef DELEGATE_FIELD_NAME_VECTOR #ifdef DELEGATE_GET_FIELD #define DELEGATE_FIELD_NAME_VECTOR(id, field) \ for (Index i = 0; i < (DELEGATE_GET_FIELD(id, field)).size(); i++) { \ DELEGATE_FIELD_NAME(id, field[i]); \ } #else #error please define DELEGATE_FIELD_NAME_VECTOR(id, field) #endif #endif #ifndef DELEGATE_FIELD_SCOPE_NAME_DEF #error please define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) #endif #ifndef DELEGATE_FIELD_SCOPE_NAME_USE #error please define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) #endif #ifndef DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR #ifdef DELEGATE_GET_FIELD #define DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) \ for (Index i = 0; i < (DELEGATE_GET_FIELD(id, field)).size(); i++) { \ DELEGATE_FIELD_SCOPE_NAME_USE(id, field[i]); \ } #else #error please define DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) #endif #endif #ifndef DELEGATE_FIELD_TYPE #error please define DELEGATE_FIELD_TYPE(id, field) #endif #ifndef DELEGATE_FIELD_HEAPTYPE #error please define DELEGATE_FIELD_HEAPTYPE(id, field) #endif #ifndef DELEGATE_FIELD_ADDRESS #error please define DELEGATE_FIELD_ADDRESS(id, field) #endif switch (DELEGATE_ID) { case Expression::Id::InvalidId: case Expression::Id::NumExpressionIds: { WASM_UNREACHABLE("unexpected expression type"); } case Expression::Id::BlockId: { DELEGATE_START(Block); DELEGATE_FIELD_CHILD_VECTOR(Block, list); DELEGATE_FIELD_SCOPE_NAME_DEF(Block, name); DELEGATE_END(Block); break; } case Expression::Id::IfId: { DELEGATE_START(If); DELEGATE_FIELD_OPTIONAL_CHILD(If, ifFalse); DELEGATE_FIELD_CHILD(If, ifTrue); DELEGATE_FIELD_CHILD(If, condition); DELEGATE_END(If); break; } case Expression::Id::LoopId: { DELEGATE_START(Loop); DELEGATE_FIELD_CHILD(Loop, body); DELEGATE_FIELD_SCOPE_NAME_DEF(Loop, name); DELEGATE_END(Loop); break; } case Expression::Id::BreakId: { DELEGATE_START(Break); DELEGATE_FIELD_OPTIONAL_CHILD(Break, condition); DELEGATE_FIELD_OPTIONAL_CHILD(Break, value); DELEGATE_FIELD_SCOPE_NAME_USE(Break, name); DELEGATE_END(Break); break; } case Expression::Id::SwitchId: { DELEGATE_START(Switch); DELEGATE_FIELD_CHILD(Switch, condition); DELEGATE_FIELD_OPTIONAL_CHILD(Switch, value); DELEGATE_FIELD_SCOPE_NAME_USE(Switch, default_); DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(Switch, targets); DELEGATE_END(Switch); break; } case Expression::Id::CallId: { DELEGATE_START(Call); DELEGATE_FIELD_CHILD_VECTOR(Call, operands); DELEGATE_FIELD_NAME(Call, target); DELEGATE_FIELD_INT(Call, isReturn); DELEGATE_END(Call); break; } case Expression::Id::CallIndirectId: { DELEGATE_START(CallIndirect); DELEGATE_FIELD_CHILD(CallIndirect, target); DELEGATE_FIELD_NAME(CallIndirect, table); DELEGATE_FIELD_CHILD_VECTOR(CallIndirect, operands); DELEGATE_FIELD_HEAPTYPE(CallIndirect, heapType); DELEGATE_FIELD_INT(CallIndirect, isReturn); DELEGATE_END(CallIndirect); break; } case Expression::Id::LocalGetId: { DELEGATE_START(LocalGet); DELEGATE_FIELD_INT(LocalGet, index); DELEGATE_END(LocalGet); break; } case Expression::Id::LocalSetId: { DELEGATE_START(LocalSet); DELEGATE_FIELD_CHILD(LocalSet, value); DELEGATE_FIELD_INT(LocalSet, index); DELEGATE_END(LocalSet); break; } case Expression::Id::GlobalGetId: { DELEGATE_START(GlobalGet); DELEGATE_FIELD_INT(GlobalGet, name); DELEGATE_END(GlobalGet); break; } case Expression::Id::GlobalSetId: { DELEGATE_START(GlobalSet); DELEGATE_FIELD_CHILD(GlobalSet, value); DELEGATE_FIELD_INT(GlobalSet, name); DELEGATE_END(GlobalSet); break; } case Expression::Id::LoadId: { DELEGATE_START(Load); DELEGATE_FIELD_CHILD(Load, ptr); DELEGATE_FIELD_INT(Load, bytes); DELEGATE_FIELD_INT(Load, signed_); DELEGATE_FIELD_ADDRESS(Load, offset); DELEGATE_FIELD_ADDRESS(Load, align); DELEGATE_FIELD_INT(Load, isAtomic); DELEGATE_END(Load); break; } case Expression::Id::StoreId: { DELEGATE_START(Store); DELEGATE_FIELD_CHILD(Store, value); DELEGATE_FIELD_CHILD(Store, ptr); DELEGATE_FIELD_INT(Store, bytes); DELEGATE_FIELD_ADDRESS(Store, offset); DELEGATE_FIELD_ADDRESS(Store, align); DELEGATE_FIELD_INT(Store, isAtomic); DELEGATE_FIELD_TYPE(Store, valueType); DELEGATE_END(Store); break; } case Expression::Id::AtomicRMWId: { DELEGATE_START(AtomicRMW); DELEGATE_FIELD_CHILD(AtomicRMW, value); DELEGATE_FIELD_CHILD(AtomicRMW, ptr); DELEGATE_FIELD_INT(AtomicRMW, op); DELEGATE_FIELD_INT(AtomicRMW, bytes); DELEGATE_FIELD_ADDRESS(AtomicRMW, offset); DELEGATE_END(AtomicRMW); break; } case Expression::Id::AtomicCmpxchgId: { DELEGATE_START(AtomicCmpxchg); DELEGATE_FIELD_CHILD(AtomicCmpxchg, replacement); DELEGATE_FIELD_CHILD(AtomicCmpxchg, expected); DELEGATE_FIELD_CHILD(AtomicCmpxchg, ptr); DELEGATE_FIELD_INT(AtomicCmpxchg, bytes); DELEGATE_FIELD_ADDRESS(AtomicCmpxchg, offset); DELEGATE_END(AtomicCmpxchg); break; } case Expression::Id::AtomicWaitId: { DELEGATE_START(AtomicWait); DELEGATE_FIELD_CHILD(AtomicWait, timeout); DELEGATE_FIELD_CHILD(AtomicWait, expected); DELEGATE_FIELD_CHILD(AtomicWait, ptr); DELEGATE_FIELD_ADDRESS(AtomicWait, offset); DELEGATE_FIELD_TYPE(AtomicWait, expectedType); DELEGATE_END(AtomicWait); break; } case Expression::Id::AtomicNotifyId: { DELEGATE_START(AtomicNotify); DELEGATE_FIELD_CHILD(AtomicNotify, notifyCount); DELEGATE_FIELD_CHILD(AtomicNotify, ptr); DELEGATE_FIELD_ADDRESS(AtomicNotify, offset); DELEGATE_END(AtomicNotify); break; } case Expression::Id::AtomicFenceId: { DELEGATE_START(AtomicFence); DELEGATE_FIELD_INT(AtomicFence, order); DELEGATE_END(AtomicFence); break; } case Expression::Id::SIMDExtractId: { DELEGATE_START(SIMDExtract); DELEGATE_FIELD_CHILD(SIMDExtract, vec); DELEGATE_FIELD_INT(SIMDExtract, op); DELEGATE_FIELD_INT(SIMDExtract, index); DELEGATE_END(SIMDExtract); break; } case Expression::Id::SIMDReplaceId: { DELEGATE_START(SIMDReplace); DELEGATE_FIELD_CHILD(SIMDReplace, value); DELEGATE_FIELD_CHILD(SIMDReplace, vec); DELEGATE_FIELD_INT(SIMDReplace, op); DELEGATE_FIELD_INT(SIMDReplace, index); DELEGATE_END(SIMDReplace); break; } case Expression::Id::SIMDShuffleId: { DELEGATE_START(SIMDShuffle); DELEGATE_FIELD_CHILD(SIMDShuffle, right); DELEGATE_FIELD_CHILD(SIMDShuffle, left); DELEGATE_FIELD_INT_ARRAY(SIMDShuffle, mask); DELEGATE_END(SIMDShuffle); break; } case Expression::Id::SIMDTernaryId: { DELEGATE_START(SIMDTernary); DELEGATE_FIELD_CHILD(SIMDTernary, c); DELEGATE_FIELD_CHILD(SIMDTernary, b); DELEGATE_FIELD_CHILD(SIMDTernary, a); DELEGATE_FIELD_INT(SIMDTernary, op); DELEGATE_END(SIMDTernary); break; } case Expression::Id::SIMDShiftId: { DELEGATE_START(SIMDShift); DELEGATE_FIELD_CHILD(SIMDShift, shift); DELEGATE_FIELD_CHILD(SIMDShift, vec); DELEGATE_FIELD_INT(SIMDShift, op); DELEGATE_END(SIMDShift); break; } case Expression::Id::SIMDLoadId: { DELEGATE_START(SIMDLoad); DELEGATE_FIELD_CHILD(SIMDLoad, ptr); DELEGATE_FIELD_INT(SIMDLoad, op); DELEGATE_FIELD_ADDRESS(SIMDLoad, offset); DELEGATE_FIELD_ADDRESS(SIMDLoad, align); DELEGATE_END(SIMDLoad); break; } case Expression::Id::SIMDLoadStoreLaneId: { DELEGATE_START(SIMDLoadStoreLane); DELEGATE_FIELD_CHILD(SIMDLoadStoreLane, vec); DELEGATE_FIELD_CHILD(SIMDLoadStoreLane, ptr); DELEGATE_FIELD_INT(SIMDLoadStoreLane, op); DELEGATE_FIELD_ADDRESS(SIMDLoadStoreLane, offset); DELEGATE_FIELD_ADDRESS(SIMDLoadStoreLane, align); DELEGATE_FIELD_INT(SIMDLoadStoreLane, index); DELEGATE_END(SIMDLoadStoreLane); break; } case Expression::Id::MemoryInitId: { DELEGATE_START(MemoryInit); DELEGATE_FIELD_CHILD(MemoryInit, size); DELEGATE_FIELD_CHILD(MemoryInit, offset); DELEGATE_FIELD_CHILD(MemoryInit, dest); DELEGATE_FIELD_INT(MemoryInit, segment); DELEGATE_END(MemoryInit); break; } case Expression::Id::DataDropId: { DELEGATE_START(DataDrop); DELEGATE_FIELD_INT(DataDrop, segment); DELEGATE_END(DataDrop); break; } case Expression::Id::MemoryCopyId: { DELEGATE_START(MemoryCopy); DELEGATE_FIELD_CHILD(MemoryCopy, size); DELEGATE_FIELD_CHILD(MemoryCopy, source); DELEGATE_FIELD_CHILD(MemoryCopy, dest); DELEGATE_END(MemoryCopy); break; } case Expression::Id::MemoryFillId: { DELEGATE_START(MemoryFill); DELEGATE_FIELD_CHILD(MemoryFill, size); DELEGATE_FIELD_CHILD(MemoryFill, value); DELEGATE_FIELD_CHILD(MemoryFill, dest); DELEGATE_END(MemoryFill); break; } case Expression::Id::ConstId: { DELEGATE_START(Const); DELEGATE_FIELD_LITERAL(Const, value); DELEGATE_END(Const); break; } case Expression::Id::UnaryId: { DELEGATE_START(Unary); DELEGATE_FIELD_CHILD(Unary, value); DELEGATE_FIELD_INT(Unary, op); DELEGATE_END(Unary); break; } case Expression::Id::BinaryId: { DELEGATE_START(Binary); DELEGATE_FIELD_CHILD(Binary, right); DELEGATE_FIELD_CHILD(Binary, left); DELEGATE_FIELD_INT(Binary, op); DELEGATE_END(Binary); break; } case Expression::Id::SelectId: { DELEGATE_START(Select); DELEGATE_FIELD_CHILD(Select, condition); DELEGATE_FIELD_CHILD(Select, ifFalse); DELEGATE_FIELD_CHILD(Select, ifTrue); DELEGATE_END(Select); break; } case Expression::Id::DropId: { DELEGATE_START(Drop); DELEGATE_FIELD_CHILD(Drop, value); DELEGATE_END(Drop); break; } case Expression::Id::ReturnId: { DELEGATE_START(Return); DELEGATE_FIELD_OPTIONAL_CHILD(Return, value); DELEGATE_END(Return); break; } case Expression::Id::MemorySizeId: { DELEGATE_START(MemorySize); DELEGATE_FIELD_TYPE(MemorySize, ptrType); DELEGATE_END(MemorySize); break; } case Expression::Id::MemoryGrowId: { DELEGATE_START(MemoryGrow); DELEGATE_FIELD_TYPE(MemoryGrow, ptrType); DELEGATE_FIELD_CHILD(MemoryGrow, delta); DELEGATE_END(MemoryGrow); break; } case Expression::Id::RefNullId: { DELEGATE_START(RefNull); DELEGATE_END(RefNull); break; } case Expression::Id::RefIsId: { DELEGATE_START(RefIs); DELEGATE_FIELD_INT(RefIs, op); DELEGATE_FIELD_CHILD(RefIs, value); DELEGATE_END(RefIs); break; } case Expression::Id::RefFuncId: { DELEGATE_START(RefFunc); DELEGATE_FIELD_NAME(RefFunc, func); DELEGATE_END(RefFunc); break; } case Expression::Id::RefEqId: { DELEGATE_START(RefEq); DELEGATE_FIELD_CHILD(RefEq, right); DELEGATE_FIELD_CHILD(RefEq, left); DELEGATE_END(RefEq); break; } case Expression::Id::TableGetId: { DELEGATE_START(TableGet); DELEGATE_FIELD_CHILD(TableGet, index); DELEGATE_FIELD_NAME(TableGet, table); DELEGATE_END(TableGet); break; } case Expression::Id::TableSetId: { DELEGATE_START(TableSet); DELEGATE_FIELD_CHILD(TableSet, value); DELEGATE_FIELD_CHILD(TableSet, index); DELEGATE_FIELD_NAME(TableSet, table); DELEGATE_END(TableSet); break; } case Expression::Id::TableSizeId: { DELEGATE_START(TableSize); DELEGATE_FIELD_NAME(TableSize, table); DELEGATE_END(TableSize); break; } case Expression::Id::TableGrowId: { DELEGATE_START(TableGrow); DELEGATE_FIELD_CHILD(TableGrow, delta); DELEGATE_FIELD_CHILD(TableGrow, value); DELEGATE_FIELD_NAME(TableGrow, table); DELEGATE_END(TableGrow); break; } case Expression::Id::TryId: { DELEGATE_START(Try); DELEGATE_FIELD_SCOPE_NAME_USE(Try, delegateTarget); DELEGATE_FIELD_CHILD_VECTOR(Try, catchBodies); DELEGATE_FIELD_NAME_VECTOR(Try, catchTags); DELEGATE_FIELD_SCOPE_NAME_DEF(Try, name); DELEGATE_FIELD_CHILD(Try, body); DELEGATE_END(Try); break; } case Expression::Id::ThrowId: { DELEGATE_START(Throw); DELEGATE_FIELD_CHILD_VECTOR(Throw, operands); DELEGATE_FIELD_NAME(Throw, tag); DELEGATE_END(Throw); break; } case Expression::Id::RethrowId: { DELEGATE_START(Rethrow); DELEGATE_FIELD_SCOPE_NAME_USE(Rethrow, target); DELEGATE_END(Rethrow); break; } case Expression::Id::NopId: { DELEGATE_START(Nop); DELEGATE_END(Nop); break; } case Expression::Id::UnreachableId: { DELEGATE_START(Unreachable); DELEGATE_END(Unreachable); break; } case Expression::Id::PopId: { DELEGATE_START(Pop); DELEGATE_END(Pop); break; } case Expression::Id::TupleMakeId: { DELEGATE_START(TupleMake); DELEGATE_FIELD_CHILD_VECTOR(Tuple, operands); DELEGATE_END(TupleMake); break; } case Expression::Id::TupleExtractId: { DELEGATE_START(TupleExtract); DELEGATE_FIELD_CHILD(TupleExtract, tuple); DELEGATE_FIELD_INT(TupleExtract, index); DELEGATE_END(TupleExtract); break; } case Expression::Id::I31NewId: { DELEGATE_START(I31New); DELEGATE_FIELD_CHILD(I31New, value); DELEGATE_END(I31New); break; } case Expression::Id::I31GetId: { DELEGATE_START(I31Get); DELEGATE_FIELD_CHILD(I31Get, i31); DELEGATE_FIELD_INT(I31Get, signed_); DELEGATE_END(I31Get); break; } case Expression::Id::CallRefId: { DELEGATE_START(CallRef); DELEGATE_FIELD_CHILD(CallRef, target); DELEGATE_FIELD_CHILD_VECTOR(CallRef, operands); DELEGATE_FIELD_INT(CallRef, isReturn); DELEGATE_END(CallRef); break; } case Expression::Id::RefTestId: { DELEGATE_START(RefTest); DELEGATE_FIELD_HEAPTYPE(RefTest, intendedType); DELEGATE_FIELD_OPTIONAL_CHILD(RefTest, rtt); DELEGATE_FIELD_CHILD(RefTest, ref); DELEGATE_END(RefTest); break; } case Expression::Id::RefCastId: { DELEGATE_START(RefCast); DELEGATE_FIELD_HEAPTYPE(RefCast, intendedType); DELEGATE_FIELD_OPTIONAL_CHILD(RefCast, rtt); DELEGATE_FIELD_CHILD(RefCast, ref); DELEGATE_END(RefCast); break; } case Expression::Id::BrOnId: { DELEGATE_START(BrOn); DELEGATE_FIELD_INT(BrOn, op); DELEGATE_FIELD_SCOPE_NAME_USE(BrOn, name); DELEGATE_FIELD_HEAPTYPE(BrOn, intendedType); DELEGATE_FIELD_OPTIONAL_CHILD(BrOn, rtt); DELEGATE_FIELD_CHILD(BrOn, ref); DELEGATE_END(BrOn); break; } case Expression::Id::RttCanonId: { DELEGATE_START(RttCanon); DELEGATE_END(RttCanon); break; } case Expression::Id::RttSubId: { DELEGATE_START(RttSub); DELEGATE_FIELD_CHILD(RttSub, parent); DELEGATE_FIELD_INT(RttSub, fresh); DELEGATE_END(RttSub); break; } case Expression::Id::StructNewId: { DELEGATE_START(StructNew); DELEGATE_FIELD_OPTIONAL_CHILD(StructNew, rtt); DELEGATE_FIELD_CHILD_VECTOR(StructNew, operands); DELEGATE_END(StructNew); break; } case Expression::Id::StructGetId: { DELEGATE_START(StructGet); DELEGATE_FIELD_INT(StructGet, index); DELEGATE_FIELD_CHILD(StructGet, ref); DELEGATE_FIELD_INT(StructGet, signed_); DELEGATE_END(StructGet); break; } case Expression::Id::StructSetId: { DELEGATE_START(StructSet); DELEGATE_FIELD_INT(StructSet, index); DELEGATE_FIELD_CHILD(StructSet, value); DELEGATE_FIELD_CHILD(StructSet, ref); DELEGATE_END(StructSet); break; } case Expression::Id::ArrayNewId: { DELEGATE_START(ArrayNew); DELEGATE_FIELD_OPTIONAL_CHILD(ArrayNew, rtt); DELEGATE_FIELD_CHILD(ArrayNew, size); DELEGATE_FIELD_OPTIONAL_CHILD(ArrayNew, init); DELEGATE_END(ArrayNew); break; } case Expression::Id::ArrayInitId: { DELEGATE_START(ArrayInit); DELEGATE_FIELD_OPTIONAL_CHILD(ArrayInit, rtt); DELEGATE_FIELD_CHILD_VECTOR(ArrayInit, values); DELEGATE_END(ArrayInit); break; } case Expression::Id::ArrayGetId: { DELEGATE_START(ArrayGet); DELEGATE_FIELD_CHILD(ArrayGet, index); DELEGATE_FIELD_CHILD(ArrayGet, ref); DELEGATE_FIELD_INT(ArrayGet, signed_); DELEGATE_END(ArrayGet); break; } case Expression::Id::ArraySetId: { DELEGATE_START(ArraySet); DELEGATE_FIELD_CHILD(ArrayGet, value); DELEGATE_FIELD_CHILD(ArrayGet, index); DELEGATE_FIELD_CHILD(ArrayGet, ref); DELEGATE_END(ArraySet); break; } case Expression::Id::ArrayLenId: { DELEGATE_START(ArrayLen); DELEGATE_FIELD_CHILD(ArrayLen, ref); DELEGATE_END(ArrayLen); break; } case Expression::Id::ArrayCopyId: { DELEGATE_START(ArrayCopy); DELEGATE_FIELD_CHILD(ArrayCopy, length); DELEGATE_FIELD_CHILD(ArrayCopy, srcIndex); DELEGATE_FIELD_CHILD(ArrayCopy, srcRef); DELEGATE_FIELD_CHILD(ArrayCopy, destIndex); DELEGATE_FIELD_CHILD(ArrayCopy, destRef); DELEGATE_END(ArrayCopy); break; } case Expression::Id::RefAsId: { DELEGATE_START(RefAs); DELEGATE_FIELD_INT(RefAs, op); DELEGATE_FIELD_CHILD(RefAs, value); DELEGATE_END(RefAs); break; } } #undef DELEGATE_ID #undef DELEGATE_START #undef DELEGATE_END #undef DELEGATE_FIELD_CHILD #undef DELEGATE_FIELD_OPTIONAL_CHILD #undef DELEGATE_FIELD_CHILD_VECTOR #undef DELEGATE_FIELD_INT #undef DELEGATE_FIELD_INT_ARRAY #undef DELEGATE_FIELD_LITERAL #undef DELEGATE_FIELD_NAME #undef DELEGATE_FIELD_NAME_VECTOR #undef DELEGATE_FIELD_SCOPE_NAME_DEF #undef DELEGATE_FIELD_SCOPE_NAME_USE #undef DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR #undef DELEGATE_FIELD_TYPE #undef DELEGATE_FIELD_HEAPTYPE #undef DELEGATE_FIELD_ADDRESS #undef DELEGATE_GET_FIELD binaryen-version_108/src/wasm-delegations.def000066400000000000000000000037721423707623100214700ustar00rootroot00000000000000/* * Copyright 2020 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ DELEGATE(Nop); DELEGATE(Block); DELEGATE(If); DELEGATE(Loop); DELEGATE(Break); DELEGATE(Switch); DELEGATE(Call); DELEGATE(CallIndirect); DELEGATE(LocalGet); DELEGATE(LocalSet); DELEGATE(GlobalGet); DELEGATE(GlobalSet); DELEGATE(Load); DELEGATE(Store); DELEGATE(AtomicRMW); DELEGATE(AtomicCmpxchg); DELEGATE(AtomicWait); DELEGATE(AtomicNotify); DELEGATE(AtomicFence); DELEGATE(SIMDExtract); DELEGATE(SIMDReplace); DELEGATE(SIMDShuffle); DELEGATE(SIMDTernary); DELEGATE(SIMDShift); DELEGATE(SIMDLoad); DELEGATE(SIMDLoadStoreLane); DELEGATE(MemoryInit); DELEGATE(DataDrop); DELEGATE(MemoryCopy); DELEGATE(MemoryFill); DELEGATE(Const); DELEGATE(Unary); DELEGATE(Binary); DELEGATE(Select); DELEGATE(Drop); DELEGATE(Return); DELEGATE(MemorySize); DELEGATE(MemoryGrow); DELEGATE(Unreachable); DELEGATE(Pop); DELEGATE(RefNull); DELEGATE(RefIs); DELEGATE(RefFunc); DELEGATE(RefEq); DELEGATE(TableGet); DELEGATE(TableSet); DELEGATE(TableSize); DELEGATE(TableGrow); DELEGATE(Try); DELEGATE(Throw); DELEGATE(Rethrow); DELEGATE(TupleMake); DELEGATE(TupleExtract); DELEGATE(I31New); DELEGATE(I31Get); DELEGATE(CallRef); DELEGATE(RefTest); DELEGATE(RefCast); DELEGATE(BrOn); DELEGATE(RttCanon); DELEGATE(RttSub); DELEGATE(StructNew); DELEGATE(StructGet); DELEGATE(StructSet); DELEGATE(ArrayNew); DELEGATE(ArrayInit); DELEGATE(ArrayGet); DELEGATE(ArraySet); DELEGATE(ArrayLen); DELEGATE(ArrayCopy); DELEGATE(RefAs); #undef DELEGATE binaryen-version_108/src/wasm-emscripten.h000066400000000000000000000042041423707623100210230ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_wasm_emscripten_h #define wasm_wasm_emscripten_h #include "support/file.h" #include "wasm-builder.h" #include "wasm.h" namespace wasm { Global* getStackPointerGlobal(Module& wasm); // Class which modifies a wasm module for use with emscripten. Generates // runtime functions and emits metadata. class EmscriptenGlueGenerator { public: EmscriptenGlueGenerator(Module& wasm, Address stackPointerOffset = Address(0)) : wasm(wasm), builder(wasm), stackPointerOffset(stackPointerOffset), useStackPointerGlobal(stackPointerOffset == 0) {} std::string generateEmscriptenMetadata(); void fixInvokeFunctionNames(); // clang uses name mangling to rename the argc/argv form of main to // __main_argc_argv. Emscripten in non-standalone mode expects that function // to be exported as main. This function renames __main_argc_argv to main // as expected by emscripten. void renameMainArgcArgv(); // Emits the data segments to a file. The file contains data from address base // onwards (we must pass in base, as we can't tell it from the wasm - the // first segment may start after a run of zeros, but we need those zeros in // the file). void separateDataSegments(Output* outfile, Address base); bool standalone = false; bool sideModule = false; bool minimizeWasmChanges = false; bool noDynCalls = false; bool onlyI64DynCalls = false; private: Module& wasm; Builder builder; Address stackPointerOffset; bool useStackPointerGlobal; }; } // namespace wasm #endif // wasm_wasm_emscripten_h binaryen-version_108/src/wasm-features.h000066400000000000000000000156051423707623100204770ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_features_h #define wasm_features_h #include #include #include "compiler-support.h" #include "support/utilities.h" struct FeatureSet { enum Feature : uint32_t { MVP = 0, Atomics = 1 << 0, MutableGlobals = 1 << 1, TruncSat = 1 << 2, SIMD = 1 << 3, BulkMemory = 1 << 4, SignExt = 1 << 5, ExceptionHandling = 1 << 6, TailCall = 1 << 7, ReferenceTypes = 1 << 8, Multivalue = 1 << 9, GC = 1 << 10, Memory64 = 1 << 11, TypedFunctionReferences = 1 << 12, // TODO: Remove this feature when the wasm spec stabilizes. GCNNLocals = 1 << 13, RelaxedSIMD = 1 << 14, ExtendedConst = 1 << 15, // GCNNLocals are opt-in: merely asking for "All" does not apply them. To // get all possible values use AllPossible. See setAll() below for more // details. All = ((1 << 16) - 1) & ~GCNNLocals, AllPossible = (1 << 16) - 1, }; static std::string toString(Feature f) { switch (f) { case Atomics: return "threads"; case MutableGlobals: return "mutable-globals"; case TruncSat: return "nontrapping-float-to-int"; case SIMD: return "simd"; case BulkMemory: return "bulk-memory"; case SignExt: return "sign-ext"; case ExceptionHandling: return "exception-handling"; case TailCall: return "tail-call"; case ReferenceTypes: return "reference-types"; case Multivalue: return "multivalue"; case GC: return "gc"; case Memory64: return "memory64"; case TypedFunctionReferences: return "typed-function-references"; case GCNNLocals: return "gc-nn-locals"; case RelaxedSIMD: return "relaxed-simd"; case ExtendedConst: return "extended-const"; default: WASM_UNREACHABLE("unexpected feature"); } } std::string toString() const { std::string ret; uint32_t x = 1; while (x & Feature::AllPossible) { if (features & x) { if (!ret.empty()) { ret += ", "; } ret += toString(Feature(x)); } x <<= 1; } return ret; } FeatureSet() : features(MVP) {} FeatureSet(uint32_t features) : features(features) {} operator uint32_t() const { return features; } bool isMVP() const { return features == MVP; } bool has(FeatureSet f) const { return (features & f) == f.features; } bool hasAtomics() const { return (features & Atomics) != 0; } bool hasMutableGlobals() const { return (features & MutableGlobals) != 0; } bool hasTruncSat() const { return (features & TruncSat) != 0; } bool hasSIMD() const { return (features & SIMD) != 0; } bool hasBulkMemory() const { return (features & BulkMemory) != 0; } bool hasSignExt() const { return (features & SignExt) != 0; } bool hasExceptionHandling() const { return (features & ExceptionHandling) != 0; } bool hasTailCall() const { return (features & TailCall) != 0; } bool hasReferenceTypes() const { return (features & ReferenceTypes) != 0; } bool hasMultivalue() const { return (features & Multivalue) != 0; } bool hasGC() const { return (features & GC) != 0; } bool hasMemory64() const { return (features & Memory64) != 0; } bool hasTypedFunctionReferences() const { return (features & TypedFunctionReferences) != 0; } bool hasGCNNLocals() const { return (features & GCNNLocals) != 0; } bool hasRelaxedSIMD() const { return (features & RelaxedSIMD) != 0; } bool hasExtendedConst() const { return (features & ExtendedConst) != 0; } bool hasAll() const { return (features & AllPossible) != 0; } void set(FeatureSet f, bool v = true) { features = v ? (features | f) : (features & ~f); } void setAtomics(bool v = true) { set(Atomics, v); } void setMutableGlobals(bool v = true) { set(MutableGlobals, v); } void setTruncSat(bool v = true) { set(TruncSat, v); } void setSIMD(bool v = true) { set(SIMD, v); } void setBulkMemory(bool v = true) { set(BulkMemory, v); } void setSignExt(bool v = true) { set(SignExt, v); } void setExceptionHandling(bool v = true) { set(ExceptionHandling, v); } void setTailCall(bool v = true) { set(TailCall, v); } void setReferenceTypes(bool v = true) { set(ReferenceTypes, v); } void setMultivalue(bool v = true) { set(Multivalue, v); } void setGC(bool v = true) { set(GC, v); } void setMemory64(bool v = true) { set(Memory64, v); } void setTypedFunctionReferences(bool v = true) { set(TypedFunctionReferences, v); } void setGCNNLocals(bool v = true) { set(GCNNLocals, v); } void setRelaxedSIMD(bool v = true) { set(RelaxedSIMD, v); } void setExtendedConst(bool v = true) { set(ExtendedConst, v); } void setMVP() { features = MVP; } void setAll() { // Do not set GCNNLocals, which forces the user to opt in to that feature // explicitly. That is, wasm-opt -all will enable GC but *not* enable // non-nullable locals. To get them, do wasm-opt -all --enable-gc-nn-locals // FIXME: When the wasm spec stabilizes, this feature will go away, as the // non-nullable locals experiment will either become the standard, // or it will go away. // Leave the old GCNNLocals value unmodified. This makes things like // --enable-gc-nn-locals -all work (that is, if we enable the feature, // then -all does not disable it; it simply does not enable it by itself). auto oldGCNNLocals = hasGCNNLocals(); features = AllPossible; setGCNNLocals(oldGCNNLocals); } void enable(const FeatureSet& other) { features |= other.features; } void disable(const FeatureSet& other) { features = features & ~other.features & AllPossible; } template void iterFeatures(F f) const { for (uint32_t feature = MVP + 1; feature < AllPossible; feature <<= 1) { if (has(feature)) { f(static_cast(feature)); } } } bool operator<=(const FeatureSet& other) const { return !(features & ~other.features); } bool operator==(const FeatureSet& other) const { return *this <= other && other <= *this; } bool operator!=(const FeatureSet& other) const { return !(*this == other); } FeatureSet& operator|=(const FeatureSet& other) { features |= other.features; return *this; } uint32_t features; }; #endif // wasm_features_h binaryen-version_108/src/wasm-interpreter.h000066400000000000000000003437511423707623100212320ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Simple WebAssembly interpreter. This operates directly on the AST, // for simplicity and clarity. A goal is for it to be possible for // people to read this code and understand WebAssembly semantics. // #ifndef wasm_wasm_interpreter_h #define wasm_wasm_interpreter_h #include #include #include #include #include "ir/module-utils.h" #include "support/bits.h" #include "support/safe_integer.h" #include "wasm-builder.h" #include "wasm-traversal.h" #include "wasm.h" namespace wasm { struct WasmException { Name tag; Literals values; }; std::ostream& operator<<(std::ostream& o, const WasmException& exn); using namespace cashew; // Utilities extern Name WASM, RETURN_FLOW, NONCONSTANT_FLOW; // Stuff that flows around during executing expressions: a literal, or a change // in control flow. class Flow { public: Flow() : values() {} Flow(Literal value) : values{value} { assert(value.type.isConcrete()); } Flow(Literals& values) : values(values) {} Flow(Literals&& values) : values(std::move(values)) {} Flow(Name breakTo) : values(), breakTo(breakTo) {} Flow(Name breakTo, Literal value) : values{value}, breakTo(breakTo) {} Literals values; Name breakTo; // if non-null, a break is going on // A helper function for the common case where there is only one value const Literal& getSingleValue() { assert(values.size() == 1); return values[0]; } Type getType() { return values.getType(); } Expression* getConstExpression(Module& module) { assert(values.size() > 0); Builder builder(module); return builder.makeConstantExpression(values); } bool breaking() { return breakTo.is(); } void clearIf(Name target) { if (breakTo == target) { breakTo.clear(); } } friend std::ostream& operator<<(std::ostream& o, const Flow& flow) { o << "(flow " << (flow.breakTo.is() ? flow.breakTo.str : "-") << " : {"; for (size_t i = 0; i < flow.values.size(); ++i) { if (i > 0) { o << ", "; } o << flow.values[i]; } o << "})"; return o; } }; // Debugging helpers #ifdef WASM_INTERPRETER_DEBUG class Indenter { static int indentLevel; const char* entryName; public: Indenter(const char* entry); ~Indenter(); static void print(); }; #define NOTE_ENTER(x) \ Indenter _int_blah(x); \ { \ Indenter::print(); \ std::cout << "visit " << x << " : " << curr << "\n"; \ } #define NOTE_ENTER_(x) \ Indenter _int_blah(x); \ { \ Indenter::print(); \ std::cout << "visit " << x << "\n"; \ } #define NOTE_NAME(p0) \ { \ Indenter::print(); \ std::cout << "name " << '(' << Name(p0) << ")\n"; \ } #define NOTE_EVAL1(p0) \ { \ Indenter::print(); \ std::cout << "eval " #p0 " (" << p0 << ")\n"; \ } #define NOTE_EVAL2(p0, p1) \ { \ Indenter::print(); \ std::cout << "eval " #p0 " (" << p0 << "), " #p1 " (" << p1 << ")\n"; \ } #else // WASM_INTERPRETER_DEBUG #define NOTE_ENTER(x) #define NOTE_ENTER_(x) #define NOTE_NAME(p0) #define NOTE_EVAL1(p0) #define NOTE_EVAL2(p0, p1) #endif // WASM_INTERPRETER_DEBUG // Execute an expression template class ExpressionRunner : public OverriddenVisitor { SubType* self() { return static_cast(this); } protected: // Optional module context to search for globals and called functions. NULL if // we are not interested in any context. Module* module = nullptr; // Maximum depth before giving up. Index maxDepth; Index depth = 0; // Maximum iterations before giving up on a loop. Index maxLoopIterations; Flow generateArguments(const ExpressionList& operands, Literals& arguments) { NOTE_ENTER_("generateArguments"); arguments.reserve(operands.size()); for (auto expression : operands) { Flow flow = self()->visit(expression); if (flow.breaking()) { return flow; } NOTE_EVAL1(flow.values); arguments.push_back(flow.getSingleValue()); } return Flow(); } public: // Indicates no limit of maxDepth or maxLoopIterations. static const Index NO_LIMIT = 0; ExpressionRunner(Module* module = nullptr, Index maxDepth = NO_LIMIT, Index maxLoopIterations = NO_LIMIT) : module(module), maxDepth(maxDepth), maxLoopIterations(maxLoopIterations) { } virtual ~ExpressionRunner() = default; Flow visit(Expression* curr) { depth++; if (maxDepth != NO_LIMIT && depth > maxDepth) { hostLimit("interpreter recursion limit"); } auto ret = OverriddenVisitor::visit(curr); if (!ret.breaking()) { Type type = ret.getType(); if (type.isConcrete() || curr->type.isConcrete()) { #if 1 // def WASM_INTERPRETER_DEBUG if (!Type::isSubType(type, curr->type)) { std::cerr << "expected " << curr->type << ", seeing " << type << " from\n" << *curr << '\n'; } #endif assert(Type::isSubType(type, curr->type)); } } depth--; return ret; } // Gets the module this runner is operating on. Module* getModule() { return module; } Flow visitBlock(Block* curr) { NOTE_ENTER("Block"); // special-case Block, because Block nesting (in their first element) can be // incredibly deep std::vector stack; stack.push_back(curr); while (curr->list.size() > 0 && curr->list[0]->is()) { curr = curr->list[0]->cast(); stack.push_back(curr); } Flow flow; auto* top = stack.back(); while (stack.size() > 0) { curr = stack.back(); stack.pop_back(); if (flow.breaking()) { flow.clearIf(curr->name); continue; } auto& list = curr->list; for (size_t i = 0; i < list.size(); i++) { if (curr != top && i == 0) { // one of the block recursions we already handled continue; } flow = visit(list[i]); if (flow.breaking()) { flow.clearIf(curr->name); break; } } } return flow; } Flow visitIf(If* curr) { NOTE_ENTER("If"); Flow flow = visit(curr->condition); if (flow.breaking()) { return flow; } NOTE_EVAL1(flow.values); if (flow.getSingleValue().geti32()) { Flow flow = visit(curr->ifTrue); if (!flow.breaking() && !curr->ifFalse) { flow = Flow(); // if_else returns a value, but if does not } return flow; } if (curr->ifFalse) { return visit(curr->ifFalse); } return Flow(); } Flow visitLoop(Loop* curr) { NOTE_ENTER("Loop"); Index loopCount = 0; while (1) { Flow flow = visit(curr->body); if (flow.breaking()) { if (flow.breakTo == curr->name) { if (maxLoopIterations != NO_LIMIT && ++loopCount >= maxLoopIterations) { return Flow(NONCONSTANT_FLOW); } continue; // lol } } // loop does not loop automatically, only continue achieves that return flow; } } Flow visitBreak(Break* curr) { NOTE_ENTER("Break"); bool condition = true; Flow flow; if (curr->value) { flow = visit(curr->value); if (flow.breaking()) { return flow; } } if (curr->condition) { Flow conditionFlow = visit(curr->condition); if (conditionFlow.breaking()) { return conditionFlow; } condition = conditionFlow.getSingleValue().getInteger() != 0; if (!condition) { return flow; } } flow.breakTo = curr->name; return flow; } Flow visitSwitch(Switch* curr) { NOTE_ENTER("Switch"); Flow flow; Literals values; if (curr->value) { flow = visit(curr->value); if (flow.breaking()) { return flow; } values = flow.values; } flow = visit(curr->condition); if (flow.breaking()) { return flow; } int64_t index = flow.getSingleValue().getInteger(); Name target = curr->default_; if (index >= 0 && (size_t)index < curr->targets.size()) { target = curr->targets[(size_t)index]; } flow.breakTo = target; flow.values = values; return flow; } Flow visitConst(Const* curr) { NOTE_ENTER("Const"); NOTE_EVAL1(curr->value); return Flow(curr->value); // heh } // Unary and Binary nodes, the core math computations. We mostly just // delegate to the Literal::* methods, except we handle traps here. Flow visitUnary(Unary* curr) { NOTE_ENTER("Unary"); Flow flow = visit(curr->value); if (flow.breaking()) { return flow; } Literal value = flow.getSingleValue(); NOTE_EVAL1(value); switch (curr->op) { case ClzInt32: case ClzInt64: return value.countLeadingZeroes(); case CtzInt32: case CtzInt64: return value.countTrailingZeroes(); case PopcntInt32: case PopcntInt64: return value.popCount(); case EqZInt32: case EqZInt64: return value.eqz(); case ReinterpretInt32: return value.castToF32(); case ReinterpretInt64: return value.castToF64(); case ExtendSInt32: return value.extendToSI64(); case ExtendUInt32: return value.extendToUI64(); case WrapInt64: return value.wrapToI32(); case ConvertUInt32ToFloat32: case ConvertUInt64ToFloat32: return value.convertUIToF32(); case ConvertUInt32ToFloat64: case ConvertUInt64ToFloat64: return value.convertUIToF64(); case ConvertSInt32ToFloat32: case ConvertSInt64ToFloat32: return value.convertSIToF32(); case ConvertSInt32ToFloat64: case ConvertSInt64ToFloat64: return value.convertSIToF64(); case ExtendS8Int32: case ExtendS8Int64: return value.extendS8(); case ExtendS16Int32: case ExtendS16Int64: return value.extendS16(); case ExtendS32Int64: return value.extendS32(); case NegFloat32: case NegFloat64: return value.neg(); case AbsFloat32: case AbsFloat64: return value.abs(); case CeilFloat32: case CeilFloat64: return value.ceil(); case FloorFloat32: case FloorFloat64: return value.floor(); case TruncFloat32: case TruncFloat64: return value.trunc(); case NearestFloat32: case NearestFloat64: return value.nearbyint(); case SqrtFloat32: case SqrtFloat64: return value.sqrt(); case TruncSFloat32ToInt32: case TruncSFloat64ToInt32: case TruncSFloat32ToInt64: case TruncSFloat64ToInt64: return truncSFloat(curr, value); case TruncUFloat32ToInt32: case TruncUFloat64ToInt32: case TruncUFloat32ToInt64: case TruncUFloat64ToInt64: return truncUFloat(curr, value); case TruncSatSFloat32ToInt32: case TruncSatSFloat64ToInt32: return value.truncSatToSI32(); case TruncSatSFloat32ToInt64: case TruncSatSFloat64ToInt64: return value.truncSatToSI64(); case TruncSatUFloat32ToInt32: case TruncSatUFloat64ToInt32: return value.truncSatToUI32(); case TruncSatUFloat32ToInt64: case TruncSatUFloat64ToInt64: return value.truncSatToUI64(); case ReinterpretFloat32: return value.castToI32(); case PromoteFloat32: return value.extendToF64(); case ReinterpretFloat64: return value.castToI64(); case DemoteFloat64: return value.demote(); case SplatVecI8x16: return value.splatI8x16(); case SplatVecI16x8: return value.splatI16x8(); case SplatVecI32x4: return value.splatI32x4(); case SplatVecI64x2: return value.splatI64x2(); case SplatVecF32x4: return value.splatF32x4(); case SplatVecF64x2: return value.splatF64x2(); case NotVec128: return value.notV128(); case AnyTrueVec128: return value.anyTrueV128(); case AbsVecI8x16: return value.absI8x16(); case NegVecI8x16: return value.negI8x16(); case AllTrueVecI8x16: return value.allTrueI8x16(); case BitmaskVecI8x16: return value.bitmaskI8x16(); case PopcntVecI8x16: return value.popcntI8x16(); case AbsVecI16x8: return value.absI16x8(); case NegVecI16x8: return value.negI16x8(); case AllTrueVecI16x8: return value.allTrueI16x8(); case BitmaskVecI16x8: return value.bitmaskI16x8(); case AbsVecI32x4: return value.absI32x4(); case NegVecI32x4: return value.negI32x4(); case AllTrueVecI32x4: return value.allTrueI32x4(); case BitmaskVecI32x4: return value.bitmaskI32x4(); case AbsVecI64x2: return value.absI64x2(); case NegVecI64x2: return value.negI64x2(); case AllTrueVecI64x2: return value.allTrueI64x2(); case BitmaskVecI64x2: return value.bitmaskI64x2(); case AbsVecF32x4: return value.absF32x4(); case NegVecF32x4: return value.negF32x4(); case SqrtVecF32x4: return value.sqrtF32x4(); case CeilVecF32x4: return value.ceilF32x4(); case FloorVecF32x4: return value.floorF32x4(); case TruncVecF32x4: return value.truncF32x4(); case NearestVecF32x4: return value.nearestF32x4(); case AbsVecF64x2: return value.absF64x2(); case NegVecF64x2: return value.negF64x2(); case SqrtVecF64x2: return value.sqrtF64x2(); case CeilVecF64x2: return value.ceilF64x2(); case FloorVecF64x2: return value.floorF64x2(); case TruncVecF64x2: return value.truncF64x2(); case NearestVecF64x2: return value.nearestF64x2(); case ExtAddPairwiseSVecI8x16ToI16x8: return value.extAddPairwiseToSI16x8(); case ExtAddPairwiseUVecI8x16ToI16x8: return value.extAddPairwiseToUI16x8(); case ExtAddPairwiseSVecI16x8ToI32x4: return value.extAddPairwiseToSI32x4(); case ExtAddPairwiseUVecI16x8ToI32x4: return value.extAddPairwiseToUI32x4(); case TruncSatSVecF32x4ToVecI32x4: case RelaxedTruncSVecF32x4ToVecI32x4: return value.truncSatToSI32x4(); case TruncSatUVecF32x4ToVecI32x4: case RelaxedTruncUVecF32x4ToVecI32x4: return value.truncSatToUI32x4(); case ConvertSVecI32x4ToVecF32x4: return value.convertSToF32x4(); case ConvertUVecI32x4ToVecF32x4: return value.convertUToF32x4(); case ExtendLowSVecI8x16ToVecI16x8: return value.extendLowSToI16x8(); case ExtendHighSVecI8x16ToVecI16x8: return value.extendHighSToI16x8(); case ExtendLowUVecI8x16ToVecI16x8: return value.extendLowUToI16x8(); case ExtendHighUVecI8x16ToVecI16x8: return value.extendHighUToI16x8(); case ExtendLowSVecI16x8ToVecI32x4: return value.extendLowSToI32x4(); case ExtendHighSVecI16x8ToVecI32x4: return value.extendHighSToI32x4(); case ExtendLowUVecI16x8ToVecI32x4: return value.extendLowUToI32x4(); case ExtendHighUVecI16x8ToVecI32x4: return value.extendHighUToI32x4(); case ExtendLowSVecI32x4ToVecI64x2: return value.extendLowSToI64x2(); case ExtendHighSVecI32x4ToVecI64x2: return value.extendHighSToI64x2(); case ExtendLowUVecI32x4ToVecI64x2: return value.extendLowUToI64x2(); case ExtendHighUVecI32x4ToVecI64x2: return value.extendHighUToI64x2(); case ConvertLowSVecI32x4ToVecF64x2: return value.convertLowSToF64x2(); case ConvertLowUVecI32x4ToVecF64x2: return value.convertLowUToF64x2(); case TruncSatZeroSVecF64x2ToVecI32x4: case RelaxedTruncZeroSVecF64x2ToVecI32x4: return value.truncSatZeroSToI32x4(); case TruncSatZeroUVecF64x2ToVecI32x4: case RelaxedTruncZeroUVecF64x2ToVecI32x4: return value.truncSatZeroUToI32x4(); case DemoteZeroVecF64x2ToVecF32x4: return value.demoteZeroToF32x4(); case PromoteLowVecF32x4ToVecF64x2: return value.promoteLowToF64x2(); case InvalidUnary: WASM_UNREACHABLE("invalid unary op"); } WASM_UNREACHABLE("invalid op"); } Flow visitBinary(Binary* curr) { NOTE_ENTER("Binary"); Flow flow = visit(curr->left); if (flow.breaking()) { return flow; } Literal left = flow.getSingleValue(); flow = visit(curr->right); if (flow.breaking()) { return flow; } Literal right = flow.getSingleValue(); NOTE_EVAL2(left, right); assert(curr->left->type.isConcrete() ? left.type == curr->left->type : true); assert(curr->right->type.isConcrete() ? right.type == curr->right->type : true); switch (curr->op) { case AddInt32: case AddInt64: case AddFloat32: case AddFloat64: return left.add(right); case SubInt32: case SubInt64: case SubFloat32: case SubFloat64: return left.sub(right); case MulInt32: case MulInt64: case MulFloat32: case MulFloat64: return left.mul(right); case DivSInt32: { if (right.getInteger() == 0) { trap("i32.div_s by 0"); } if (left.getInteger() == std::numeric_limits::min() && right.getInteger() == -1) { trap("i32.div_s overflow"); // signed division overflow } return left.divS(right); } case DivUInt32: { if (right.getInteger() == 0) { trap("i32.div_u by 0"); } return left.divU(right); } case RemSInt32: { if (right.getInteger() == 0) { trap("i32.rem_s by 0"); } if (left.getInteger() == std::numeric_limits::min() && right.getInteger() == -1) { return Literal(int32_t(0)); } return left.remS(right); } case RemUInt32: { if (right.getInteger() == 0) { trap("i32.rem_u by 0"); } return left.remU(right); } case DivSInt64: { if (right.getInteger() == 0) { trap("i64.div_s by 0"); } if (left.getInteger() == LLONG_MIN && right.getInteger() == -1LL) { trap("i64.div_s overflow"); // signed division overflow } return left.divS(right); } case DivUInt64: { if (right.getInteger() == 0) { trap("i64.div_u by 0"); } return left.divU(right); } case RemSInt64: { if (right.getInteger() == 0) { trap("i64.rem_s by 0"); } if (left.getInteger() == LLONG_MIN && right.getInteger() == -1LL) { return Literal(int64_t(0)); } return left.remS(right); } case RemUInt64: { if (right.getInteger() == 0) { trap("i64.rem_u by 0"); } return left.remU(right); } case DivFloat32: case DivFloat64: return left.div(right); case AndInt32: case AndInt64: return left.and_(right); case OrInt32: case OrInt64: return left.or_(right); case XorInt32: case XorInt64: return left.xor_(right); case ShlInt32: case ShlInt64: return left.shl(right); case ShrUInt32: case ShrUInt64: return left.shrU(right); case ShrSInt32: case ShrSInt64: return left.shrS(right); case RotLInt32: case RotLInt64: return left.rotL(right); case RotRInt32: case RotRInt64: return left.rotR(right); case EqInt32: case EqInt64: case EqFloat32: case EqFloat64: return left.eq(right); case NeInt32: case NeInt64: case NeFloat32: case NeFloat64: return left.ne(right); case LtSInt32: case LtSInt64: return left.ltS(right); case LtUInt32: case LtUInt64: return left.ltU(right); case LeSInt32: case LeSInt64: return left.leS(right); case LeUInt32: case LeUInt64: return left.leU(right); case GtSInt32: case GtSInt64: return left.gtS(right); case GtUInt32: case GtUInt64: return left.gtU(right); case GeSInt32: case GeSInt64: return left.geS(right); case GeUInt32: case GeUInt64: return left.geU(right); case LtFloat32: case LtFloat64: return left.lt(right); case LeFloat32: case LeFloat64: return left.le(right); case GtFloat32: case GtFloat64: return left.gt(right); case GeFloat32: case GeFloat64: return left.ge(right); case CopySignFloat32: case CopySignFloat64: return left.copysign(right); case MinFloat32: case MinFloat64: return left.min(right); case MaxFloat32: case MaxFloat64: return left.max(right); case EqVecI8x16: return left.eqI8x16(right); case NeVecI8x16: return left.neI8x16(right); case LtSVecI8x16: return left.ltSI8x16(right); case LtUVecI8x16: return left.ltUI8x16(right); case GtSVecI8x16: return left.gtSI8x16(right); case GtUVecI8x16: return left.gtUI8x16(right); case LeSVecI8x16: return left.leSI8x16(right); case LeUVecI8x16: return left.leUI8x16(right); case GeSVecI8x16: return left.geSI8x16(right); case GeUVecI8x16: return left.geUI8x16(right); case EqVecI16x8: return left.eqI16x8(right); case NeVecI16x8: return left.neI16x8(right); case LtSVecI16x8: return left.ltSI16x8(right); case LtUVecI16x8: return left.ltUI16x8(right); case GtSVecI16x8: return left.gtSI16x8(right); case GtUVecI16x8: return left.gtUI16x8(right); case LeSVecI16x8: return left.leSI16x8(right); case LeUVecI16x8: return left.leUI16x8(right); case GeSVecI16x8: return left.geSI16x8(right); case GeUVecI16x8: return left.geUI16x8(right); case EqVecI32x4: return left.eqI32x4(right); case NeVecI32x4: return left.neI32x4(right); case LtSVecI32x4: return left.ltSI32x4(right); case LtUVecI32x4: return left.ltUI32x4(right); case GtSVecI32x4: return left.gtSI32x4(right); case GtUVecI32x4: return left.gtUI32x4(right); case LeSVecI32x4: return left.leSI32x4(right); case LeUVecI32x4: return left.leUI32x4(right); case GeSVecI32x4: return left.geSI32x4(right); case GeUVecI32x4: return left.geUI32x4(right); case EqVecI64x2: return left.eqI64x2(right); case NeVecI64x2: return left.neI64x2(right); case LtSVecI64x2: return left.ltSI64x2(right); case GtSVecI64x2: return left.gtSI64x2(right); case LeSVecI64x2: return left.leSI64x2(right); case GeSVecI64x2: return left.geSI64x2(right); case EqVecF32x4: return left.eqF32x4(right); case NeVecF32x4: return left.neF32x4(right); case LtVecF32x4: return left.ltF32x4(right); case GtVecF32x4: return left.gtF32x4(right); case LeVecF32x4: return left.leF32x4(right); case GeVecF32x4: return left.geF32x4(right); case EqVecF64x2: return left.eqF64x2(right); case NeVecF64x2: return left.neF64x2(right); case LtVecF64x2: return left.ltF64x2(right); case GtVecF64x2: return left.gtF64x2(right); case LeVecF64x2: return left.leF64x2(right); case GeVecF64x2: return left.geF64x2(right); case AndVec128: return left.andV128(right); case OrVec128: return left.orV128(right); case XorVec128: return left.xorV128(right); case AndNotVec128: return left.andV128(right.notV128()); case AddVecI8x16: return left.addI8x16(right); case AddSatSVecI8x16: return left.addSaturateSI8x16(right); case AddSatUVecI8x16: return left.addSaturateUI8x16(right); case SubVecI8x16: return left.subI8x16(right); case SubSatSVecI8x16: return left.subSaturateSI8x16(right); case SubSatUVecI8x16: return left.subSaturateUI8x16(right); case MinSVecI8x16: return left.minSI8x16(right); case MinUVecI8x16: return left.minUI8x16(right); case MaxSVecI8x16: return left.maxSI8x16(right); case MaxUVecI8x16: return left.maxUI8x16(right); case AvgrUVecI8x16: return left.avgrUI8x16(right); case AddVecI16x8: return left.addI16x8(right); case AddSatSVecI16x8: return left.addSaturateSI16x8(right); case AddSatUVecI16x8: return left.addSaturateUI16x8(right); case SubVecI16x8: return left.subI16x8(right); case SubSatSVecI16x8: return left.subSaturateSI16x8(right); case SubSatUVecI16x8: return left.subSaturateUI16x8(right); case MulVecI16x8: return left.mulI16x8(right); case MinSVecI16x8: return left.minSI16x8(right); case MinUVecI16x8: return left.minUI16x8(right); case MaxSVecI16x8: return left.maxSI16x8(right); case MaxUVecI16x8: return left.maxUI16x8(right); case AvgrUVecI16x8: return left.avgrUI16x8(right); case Q15MulrSatSVecI16x8: case RelaxedQ15MulrSVecI16x8: return left.q15MulrSatSI16x8(right); case ExtMulLowSVecI16x8: return left.extMulLowSI16x8(right); case ExtMulHighSVecI16x8: return left.extMulHighSI16x8(right); case ExtMulLowUVecI16x8: return left.extMulLowUI16x8(right); case ExtMulHighUVecI16x8: return left.extMulHighUI16x8(right); case AddVecI32x4: return left.addI32x4(right); case SubVecI32x4: return left.subI32x4(right); case MulVecI32x4: return left.mulI32x4(right); case MinSVecI32x4: return left.minSI32x4(right); case MinUVecI32x4: return left.minUI32x4(right); case MaxSVecI32x4: return left.maxSI32x4(right); case MaxUVecI32x4: return left.maxUI32x4(right); case DotSVecI16x8ToVecI32x4: return left.dotSI16x8toI32x4(right); case ExtMulLowSVecI32x4: return left.extMulLowSI32x4(right); case ExtMulHighSVecI32x4: return left.extMulHighSI32x4(right); case ExtMulLowUVecI32x4: return left.extMulLowUI32x4(right); case ExtMulHighUVecI32x4: return left.extMulHighUI32x4(right); case AddVecI64x2: return left.addI64x2(right); case SubVecI64x2: return left.subI64x2(right); case MulVecI64x2: return left.mulI64x2(right); case ExtMulLowSVecI64x2: return left.extMulLowSI64x2(right); case ExtMulHighSVecI64x2: return left.extMulHighSI64x2(right); case ExtMulLowUVecI64x2: return left.extMulLowUI64x2(right); case ExtMulHighUVecI64x2: return left.extMulHighUI64x2(right); case AddVecF32x4: return left.addF32x4(right); case SubVecF32x4: return left.subF32x4(right); case MulVecF32x4: return left.mulF32x4(right); case DivVecF32x4: return left.divF32x4(right); case MinVecF32x4: case RelaxedMinVecF32x4: return left.minF32x4(right); case MaxVecF32x4: case RelaxedMaxVecF32x4: return left.maxF32x4(right); case PMinVecF32x4: return left.pminF32x4(right); case PMaxVecF32x4: return left.pmaxF32x4(right); case AddVecF64x2: return left.addF64x2(right); case SubVecF64x2: return left.subF64x2(right); case MulVecF64x2: return left.mulF64x2(right); case DivVecF64x2: return left.divF64x2(right); case MinVecF64x2: case RelaxedMinVecF64x2: return left.minF64x2(right); case MaxVecF64x2: case RelaxedMaxVecF64x2: return left.maxF64x2(right); case PMinVecF64x2: return left.pminF64x2(right); case PMaxVecF64x2: return left.pmaxF64x2(right); case NarrowSVecI16x8ToVecI8x16: return left.narrowSToI8x16(right); case NarrowUVecI16x8ToVecI8x16: return left.narrowUToI8x16(right); case NarrowSVecI32x4ToVecI16x8: return left.narrowSToI16x8(right); case NarrowUVecI32x4ToVecI16x8: return left.narrowUToI16x8(right); case SwizzleVecI8x16: case RelaxedSwizzleVecI8x16: return left.swizzleI8x16(right); case DotI8x16I7x16SToVecI16x8: return left.dotSI8x16toI16x8(right); case DotI8x16I7x16UToVecI16x8: return left.dotUI8x16toI16x8(right); case InvalidBinary: WASM_UNREACHABLE("invalid binary op"); } WASM_UNREACHABLE("invalid op"); } Flow visitSIMDExtract(SIMDExtract* curr) { NOTE_ENTER("SIMDExtract"); Flow flow = self()->visit(curr->vec); if (flow.breaking()) { return flow; } Literal vec = flow.getSingleValue(); switch (curr->op) { case ExtractLaneSVecI8x16: return vec.extractLaneSI8x16(curr->index); case ExtractLaneUVecI8x16: return vec.extractLaneUI8x16(curr->index); case ExtractLaneSVecI16x8: return vec.extractLaneSI16x8(curr->index); case ExtractLaneUVecI16x8: return vec.extractLaneUI16x8(curr->index); case ExtractLaneVecI32x4: return vec.extractLaneI32x4(curr->index); case ExtractLaneVecI64x2: return vec.extractLaneI64x2(curr->index); case ExtractLaneVecF32x4: return vec.extractLaneF32x4(curr->index); case ExtractLaneVecF64x2: return vec.extractLaneF64x2(curr->index); } WASM_UNREACHABLE("invalid op"); } Flow visitSIMDReplace(SIMDReplace* curr) { NOTE_ENTER("SIMDReplace"); Flow flow = self()->visit(curr->vec); if (flow.breaking()) { return flow; } Literal vec = flow.getSingleValue(); flow = self()->visit(curr->value); if (flow.breaking()) { return flow; } Literal value = flow.getSingleValue(); switch (curr->op) { case ReplaceLaneVecI8x16: return vec.replaceLaneI8x16(value, curr->index); case ReplaceLaneVecI16x8: return vec.replaceLaneI16x8(value, curr->index); case ReplaceLaneVecI32x4: return vec.replaceLaneI32x4(value, curr->index); case ReplaceLaneVecI64x2: return vec.replaceLaneI64x2(value, curr->index); case ReplaceLaneVecF32x4: return vec.replaceLaneF32x4(value, curr->index); case ReplaceLaneVecF64x2: return vec.replaceLaneF64x2(value, curr->index); } WASM_UNREACHABLE("invalid op"); } Flow visitSIMDShuffle(SIMDShuffle* curr) { NOTE_ENTER("SIMDShuffle"); Flow flow = self()->visit(curr->left); if (flow.breaking()) { return flow; } Literal left = flow.getSingleValue(); flow = self()->visit(curr->right); if (flow.breaking()) { return flow; } Literal right = flow.getSingleValue(); return left.shuffleV8x16(right, curr->mask); } Flow visitSIMDTernary(SIMDTernary* curr) { NOTE_ENTER("SIMDBitselect"); Flow flow = self()->visit(curr->a); if (flow.breaking()) { return flow; } Literal a = flow.getSingleValue(); flow = self()->visit(curr->b); if (flow.breaking()) { return flow; } Literal b = flow.getSingleValue(); flow = self()->visit(curr->c); if (flow.breaking()) { return flow; } Literal c = flow.getSingleValue(); switch (curr->op) { case Bitselect: case LaneselectI8x16: case LaneselectI16x8: case LaneselectI32x4: case LaneselectI64x2: return c.bitselectV128(a, b); case RelaxedFmaVecF32x4: return a.relaxedFmaF32x4(b, c); case RelaxedFmsVecF32x4: return a.relaxedFmsF32x4(b, c); case RelaxedFmaVecF64x2: return a.relaxedFmaF64x2(b, c); case RelaxedFmsVecF64x2: return a.relaxedFmsF64x2(b, c); default: // TODO: implement signselect and dot_add WASM_UNREACHABLE("not implemented"); } } Flow visitSIMDShift(SIMDShift* curr) { NOTE_ENTER("SIMDShift"); Flow flow = self()->visit(curr->vec); if (flow.breaking()) { return flow; } Literal vec = flow.getSingleValue(); flow = self()->visit(curr->shift); if (flow.breaking()) { return flow; } Literal shift = flow.getSingleValue(); switch (curr->op) { case ShlVecI8x16: return vec.shlI8x16(shift); case ShrSVecI8x16: return vec.shrSI8x16(shift); case ShrUVecI8x16: return vec.shrUI8x16(shift); case ShlVecI16x8: return vec.shlI16x8(shift); case ShrSVecI16x8: return vec.shrSI16x8(shift); case ShrUVecI16x8: return vec.shrUI16x8(shift); case ShlVecI32x4: return vec.shlI32x4(shift); case ShrSVecI32x4: return vec.shrSI32x4(shift); case ShrUVecI32x4: return vec.shrUI32x4(shift); case ShlVecI64x2: return vec.shlI64x2(shift); case ShrSVecI64x2: return vec.shrSI64x2(shift); case ShrUVecI64x2: return vec.shrUI64x2(shift); } WASM_UNREACHABLE("invalid op"); } Flow visitSelect(Select* curr) { NOTE_ENTER("Select"); Flow ifTrue = visit(curr->ifTrue); if (ifTrue.breaking()) { return ifTrue; } Flow ifFalse = visit(curr->ifFalse); if (ifFalse.breaking()) { return ifFalse; } Flow condition = visit(curr->condition); if (condition.breaking()) { return condition; } NOTE_EVAL1(condition.getSingleValue()); return condition.getSingleValue().geti32() ? ifTrue : ifFalse; // ;-) } Flow visitDrop(Drop* curr) { NOTE_ENTER("Drop"); Flow value = visit(curr->value); if (value.breaking()) { return value; } return Flow(); } Flow visitReturn(Return* curr) { NOTE_ENTER("Return"); Flow flow; if (curr->value) { flow = visit(curr->value); if (flow.breaking()) { return flow; } NOTE_EVAL1(flow.getSingleValue()); } flow.breakTo = RETURN_FLOW; return flow; } Flow visitNop(Nop* curr) { NOTE_ENTER("Nop"); return Flow(); } Flow visitUnreachable(Unreachable* curr) { NOTE_ENTER("Unreachable"); trap("unreachable"); WASM_UNREACHABLE("unreachable"); } Literal truncSFloat(Unary* curr, Literal value) { double val = value.getFloat(); if (std::isnan(val)) { trap("truncSFloat of nan"); } if (curr->type == Type::i32) { if (value.type == Type::f32) { if (!isInRangeI32TruncS(value.reinterpreti32())) { trap("i32.truncSFloat overflow"); } } else { if (!isInRangeI32TruncS(value.reinterpreti64())) { trap("i32.truncSFloat overflow"); } } return Literal(int32_t(val)); } else { if (value.type == Type::f32) { if (!isInRangeI64TruncS(value.reinterpreti32())) { trap("i64.truncSFloat overflow"); } } else { if (!isInRangeI64TruncS(value.reinterpreti64())) { trap("i64.truncSFloat overflow"); } } return Literal(int64_t(val)); } } Literal truncUFloat(Unary* curr, Literal value) { double val = value.getFloat(); if (std::isnan(val)) { trap("truncUFloat of nan"); } if (curr->type == Type::i32) { if (value.type == Type::f32) { if (!isInRangeI32TruncU(value.reinterpreti32())) { trap("i32.truncUFloat overflow"); } } else { if (!isInRangeI32TruncU(value.reinterpreti64())) { trap("i32.truncUFloat overflow"); } } return Literal(uint32_t(val)); } else { if (value.type == Type::f32) { if (!isInRangeI64TruncU(value.reinterpreti32())) { trap("i64.truncUFloat overflow"); } } else { if (!isInRangeI64TruncU(value.reinterpreti64())) { trap("i64.truncUFloat overflow"); } } return Literal(uint64_t(val)); } } Flow visitAtomicFence(AtomicFence* curr) { // Wasm currently supports only sequentially consistent atomics, in which // case atomic_fence can be lowered to nothing. NOTE_ENTER("AtomicFence"); return Flow(); } Flow visitTupleMake(TupleMake* curr) { NOTE_ENTER("tuple.make"); Literals arguments; Flow flow = generateArguments(curr->operands, arguments); if (flow.breaking()) { return flow; } for (auto arg : arguments) { assert(arg.type.isConcrete()); flow.values.push_back(arg); } return flow; } Flow visitTupleExtract(TupleExtract* curr) { NOTE_ENTER("tuple.extract"); Flow flow = visit(curr->tuple); if (flow.breaking()) { return flow; } assert(flow.values.size() > curr->index); return Flow(flow.values[curr->index]); } Flow visitLocalGet(LocalGet* curr) { WASM_UNREACHABLE("unimp"); } Flow visitLocalSet(LocalSet* curr) { WASM_UNREACHABLE("unimp"); } Flow visitGlobalGet(GlobalGet* curr) { WASM_UNREACHABLE("unimp"); } Flow visitGlobalSet(GlobalSet* curr) { WASM_UNREACHABLE("unimp"); } Flow visitCall(Call* curr) { WASM_UNREACHABLE("unimp"); } Flow visitCallIndirect(CallIndirect* curr) { WASM_UNREACHABLE("unimp"); } Flow visitLoad(Load* curr) { WASM_UNREACHABLE("unimp"); } Flow visitStore(Store* curr) { WASM_UNREACHABLE("unimp"); } Flow visitMemorySize(MemorySize* curr) { WASM_UNREACHABLE("unimp"); } Flow visitMemoryGrow(MemoryGrow* curr) { WASM_UNREACHABLE("unimp"); } Flow visitMemoryInit(MemoryInit* curr) { WASM_UNREACHABLE("unimp"); } Flow visitDataDrop(DataDrop* curr) { WASM_UNREACHABLE("unimp"); } Flow visitMemoryCopy(MemoryCopy* curr) { WASM_UNREACHABLE("unimp"); } Flow visitMemoryFill(MemoryFill* curr) { WASM_UNREACHABLE("unimp"); } Flow visitAtomicRMW(AtomicRMW* curr) { WASM_UNREACHABLE("unimp"); } Flow visitAtomicCmpxchg(AtomicCmpxchg* curr) { WASM_UNREACHABLE("unimp"); } Flow visitAtomicWait(AtomicWait* curr) { WASM_UNREACHABLE("unimp"); } Flow visitAtomicNotify(AtomicNotify* curr) { WASM_UNREACHABLE("unimp"); } Flow visitSIMDLoad(SIMDLoad* curr) { WASM_UNREACHABLE("unimp"); } Flow visitSIMDLoadSplat(SIMDLoad* curr) { WASM_UNREACHABLE("unimp"); } Flow visitSIMDLoadExtend(SIMDLoad* curr) { WASM_UNREACHABLE("unimp"); } Flow visitSIMDLoadZero(SIMDLoad* curr) { WASM_UNREACHABLE("unimp"); } Flow visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { WASM_UNREACHABLE("unimp"); } Flow visitPop(Pop* curr) { WASM_UNREACHABLE("unimp"); } Flow visitCallRef(CallRef* curr) { WASM_UNREACHABLE("unimp"); } Flow visitRefNull(RefNull* curr) { NOTE_ENTER("RefNull"); return Literal::makeNull(curr->type); } Flow visitRefIs(RefIs* curr) { NOTE_ENTER("RefIs"); Flow flow = visit(curr->value); if (flow.breaking()) { return flow; } const auto& value = flow.getSingleValue(); NOTE_EVAL1(value); switch (curr->op) { case RefIsNull: return Literal(value.isNull()); case RefIsFunc: return Literal(!value.isNull() && value.type.isFunction()); case RefIsData: return Literal(!value.isNull() && value.isData()); case RefIsI31: return Literal(!value.isNull() && value.type.getHeapType() == HeapType::i31); default: WASM_UNREACHABLE("unimplemented ref.is_*"); } } Flow visitRefFunc(RefFunc* curr) { NOTE_ENTER("RefFunc"); NOTE_NAME(curr->func); return Literal::makeFunc(curr->func, curr->type); } Flow visitRefEq(RefEq* curr) { NOTE_ENTER("RefEq"); Flow flow = visit(curr->left); if (flow.breaking()) { return flow; } auto left = flow.getSingleValue(); flow = visit(curr->right); if (flow.breaking()) { return flow; } auto right = flow.getSingleValue(); NOTE_EVAL2(left, right); return Literal(int32_t(left == right)); } Flow visitTableGet(TableGet* curr) { WASM_UNREACHABLE("unimp"); } Flow visitTableSet(TableSet* curr) { WASM_UNREACHABLE("unimp"); } Flow visitTableSize(TableSize* curr) { WASM_UNREACHABLE("unimp"); } Flow visitTableGrow(TableGrow* curr) { WASM_UNREACHABLE("unimp"); } Flow visitTry(Try* curr) { WASM_UNREACHABLE("unimp"); } Flow visitThrow(Throw* curr) { NOTE_ENTER("Throw"); Literals arguments; Flow flow = generateArguments(curr->operands, arguments); if (flow.breaking()) { return flow; } NOTE_EVAL1(curr->tag); WasmException exn; exn.tag = curr->tag; for (auto item : arguments) { exn.values.push_back(item); } throwException(exn); WASM_UNREACHABLE("throw"); } Flow visitRethrow(Rethrow* curr) { WASM_UNREACHABLE("unimp"); } Flow visitI31New(I31New* curr) { NOTE_ENTER("I31New"); Flow flow = visit(curr->value); if (flow.breaking()) { return flow; } const auto& value = flow.getSingleValue(); NOTE_EVAL1(value); return Literal::makeI31(value.geti32()); } Flow visitI31Get(I31Get* curr) { NOTE_ENTER("I31Get"); Flow flow = visit(curr->i31); if (flow.breaking()) { return flow; } const auto& value = flow.getSingleValue(); NOTE_EVAL1(value); return Literal(value.geti31(curr->signed_)); } // Helper for ref.test, ref.cast, and br_on_cast, which share almost all their // logic except for what they return. struct Cast { // The control flow that preempts the cast. struct Breaking : Flow { Breaking(Flow breaking) : Flow(breaking) {} }; // The null input to the cast. struct Null : Literal { Null(Literal original) : Literal(original) {} }; // The result of the successful cast. struct Success : Literal { Success(Literal result) : Literal(result) {} }; // The input to a failed cast. struct Failure : Literal { Failure(Literal original) : Literal(original) {} }; std::variant state; template Cast(T state) : state(state) {} Flow* getBreaking() { return std::get_if(&state); } Literal* getNull() { return std::get_if(&state); } Literal* getSuccess() { return std::get_if(&state); } Literal* getFailure() { return std::get_if(&state); } Literal* getNullOrFailure() { if (auto* original = getNull()) { return original; } else { return getFailure(); } } }; template Cast doCast(T* curr) { Flow ref = self()->visit(curr->ref); if (ref.breaking()) { return typename Cast::Breaking{ref}; } // The RTT value for the type we are trying to cast to. Literal intendedRtt; if (curr->rtt) { // This is a dynamic check with an RTT. Flow rtt = self()->visit(curr->rtt); if (rtt.breaking()) { return typename Cast::Breaking{rtt}; } intendedRtt = rtt.getSingleValue(); } else { // If there is no explicit RTT, use the canonical RTT for the static type. intendedRtt = Literal::makeCanonicalRtt(curr->intendedType); } Literal original = ref.getSingleValue(); if (original.isNull()) { return typename Cast::Null{original}; } // The input may not be GC data or a function; for example it could be an // anyref or an i31. The cast definitely fails in these cases. if (!original.isData() && !original.isFunction()) { return typename Cast::Failure{original}; } Literal actualRtt; if (original.isFunction()) { // Function references always have the canonical RTTs of the functions // they reference. We must have a module to look up the function's type to // get that canonical RTT. auto* func = module ? module->getFunctionOrNull(original.getFunc()) : nullptr; if (!func) { return typename Cast::Breaking{NONCONSTANT_FLOW}; } actualRtt = Literal::makeCanonicalRtt(func->type); } else { assert(original.isData()); actualRtt = original.getGCData()->rtt; }; // We have the actual and intended RTTs, so perform the cast. if (actualRtt.isSubRtt(intendedRtt)) { Type resultType(intendedRtt.type.getHeapType(), NonNullable); if (original.isFunction()) { return typename Cast::Success{Literal{original.getFunc(), resultType}}; } else { return typename Cast::Success{Literal(original.getGCData(), resultType)}; } } else { return typename Cast::Failure{original}; } } Flow visitRefTest(RefTest* curr) { NOTE_ENTER("RefTest"); auto cast = doCast(curr); if (auto* breaking = cast.getBreaking()) { return *breaking; } else { return Literal(int32_t(bool(cast.getSuccess()))); } } Flow visitRefCast(RefCast* curr) { NOTE_ENTER("RefCast"); auto cast = doCast(curr); if (auto* breaking = cast.getBreaking()) { return *breaking; } else if (cast.getNull()) { return Literal::makeNull(Type(curr->type.getHeapType(), Nullable)); } else if (auto* result = cast.getSuccess()) { return *result; } assert(cast.getFailure()); trap("cast error"); WASM_UNREACHABLE("unreachable"); } Flow visitBrOn(BrOn* curr) { NOTE_ENTER("BrOn"); // BrOnCast* uses the casting infrastructure, so handle them first. if (curr->op == BrOnCast || curr->op == BrOnCastFail) { auto cast = doCast(curr); if (auto* breaking = cast.getBreaking()) { return *breaking; } else if (auto* original = cast.getNullOrFailure()) { if (curr->op == BrOnCast) { return *original; } else { return Flow(curr->name, *original); } } else { auto* result = cast.getSuccess(); assert(result); if (curr->op == BrOnCast) { return Flow(curr->name, *result); } else { return *result; } } } // The others do a simpler check for the type. Flow flow = visit(curr->ref); if (flow.breaking()) { return flow; } const auto& value = flow.getSingleValue(); NOTE_EVAL1(value); if (curr->op == BrOnNull) { // Unlike the others, BrOnNull does not propagate the value if it takes // the branch. if (value.isNull()) { return Flow(curr->name); } // If the branch is not taken, we return the non-null value. return {value}; } if (curr->op == BrOnNonNull) { // Unlike the others, BrOnNonNull does not return a value if it does not // take the branch. if (value.isNull()) { return Flow(); } // If the branch is taken, we send the non-null value. return Flow(curr->name, value); } // See if the input is the right kind (ignoring the flipping behavior of // BrOn*). bool isRightKind; if (value.isNull()) { // A null is never the right kind. isRightKind = false; } else { switch (curr->op) { case BrOnNonFunc: case BrOnFunc: isRightKind = value.type.isFunction(); break; case BrOnNonData: case BrOnData: isRightKind = value.isData(); break; case BrOnNonI31: case BrOnI31: isRightKind = value.type.getHeapType() == HeapType::i31; break; default: WASM_UNREACHABLE("invalid br_on_*"); } } // The Non* operations require us to flip the normal behavior. switch (curr->op) { case BrOnNonFunc: case BrOnNonData: case BrOnNonI31: isRightKind = !isRightKind; break; default: { } } if (isRightKind) { // Take the branch. return Flow(curr->name, value); } return {value}; } Flow visitRttCanon(RttCanon* curr) { return Literal::makeCanonicalRtt(curr->type.getHeapType()); } Flow visitRttSub(RttSub* curr) { Flow parent = self()->visit(curr->parent); if (parent.breaking()) { return parent; } auto parentValue = parent.getSingleValue(); auto newSupers = std::make_unique(parentValue.getRttSupers()); newSupers->push_back(parentValue.type.getHeapType()); if (curr->fresh) { newSupers->back().makeFresh(); } return Literal(std::move(newSupers), curr->type); } Flow visitStructNew(StructNew* curr) { NOTE_ENTER("StructNew"); Literal rttVal; if (curr->rtt) { Flow rtt = self()->visit(curr->rtt); if (rtt.breaking()) { return rtt; } rttVal = rtt.getSingleValue(); } if (curr->type == Type::unreachable) { // We cannot proceed to compute the heap type, as there isn't one. Just // find why we are unreachable, and stop there. for (auto* operand : curr->operands) { auto value = self()->visit(operand); if (value.breaking()) { return value; } } WASM_UNREACHABLE("unreachable but no unreachable child"); } auto heapType = curr->type.getHeapType(); const auto& fields = heapType.getStruct().fields; Literals data(fields.size()); for (Index i = 0; i < fields.size(); i++) { if (curr->isWithDefault()) { data[i] = Literal::makeZero(fields[i].type); } else { auto value = self()->visit(curr->operands[i]); if (value.breaking()) { return value; } data[i] = value.getSingleValue(); } } if (!curr->rtt) { rttVal = Literal::makeCanonicalRtt(heapType); } return Literal(std::make_shared(rttVal, data), curr->type); } Flow visitStructGet(StructGet* curr) { NOTE_ENTER("StructGet"); Flow ref = self()->visit(curr->ref); if (ref.breaking()) { return ref; } auto data = ref.getSingleValue().getGCData(); if (!data) { trap("null ref"); } auto field = curr->ref->type.getHeapType().getStruct().fields[curr->index]; return extendForPacking(data->values[curr->index], field, curr->signed_); } Flow visitStructSet(StructSet* curr) { NOTE_ENTER("StructSet"); Flow ref = self()->visit(curr->ref); if (ref.breaking()) { return ref; } Flow value = self()->visit(curr->value); if (value.breaking()) { return value; } auto data = ref.getSingleValue().getGCData(); if (!data) { trap("null ref"); } auto field = curr->ref->type.getHeapType().getStruct().fields[curr->index]; data->values[curr->index] = truncateForPacking(value.getSingleValue(), field); return Flow(); } // Arbitrary deterministic limit on size. If we need to allocate a Literals // vector that takes around 1-2GB of memory then we are likely to hit memory // limits on 32-bit machines, and in particular on wasm32 VMs that do not // have 4GB support, so give up there. static const Index ArrayLimit = (1 << 30) / sizeof(Literal); Flow visitArrayNew(ArrayNew* curr) { NOTE_ENTER("ArrayNew"); Literal rttVal; if (curr->rtt) { Flow rtt = self()->visit(curr->rtt); if (rtt.breaking()) { return rtt; } rttVal = rtt.getSingleValue(); } auto size = self()->visit(curr->size); if (size.breaking()) { return size; } if (curr->type == Type::unreachable) { // We cannot proceed to compute the heap type, as there isn't one. Just // visit the unreachable child, and stop there. auto init = self()->visit(curr->init); assert(init.breaking()); return init; } auto heapType = curr->type.getHeapType(); const auto& element = heapType.getArray().element; Index num = size.getSingleValue().geti32(); if (num >= ArrayLimit) { hostLimit("allocation failure"); } Literals data(num); if (curr->isWithDefault()) { for (Index i = 0; i < num; i++) { data[i] = Literal::makeZero(element.type); } } else { auto init = self()->visit(curr->init); if (init.breaking()) { return init; } auto field = curr->type.getHeapType().getArray().element; auto value = truncateForPacking(init.getSingleValue(), field); for (Index i = 0; i < num; i++) { data[i] = value; } } if (!curr->rtt) { rttVal = Literal::makeCanonicalRtt(heapType); } return Literal(std::make_shared(rttVal, data), curr->type); } Flow visitArrayInit(ArrayInit* curr) { NOTE_ENTER("ArrayInit"); Literal rttVal; if (curr->rtt) { Flow rtt = self()->visit(curr->rtt); if (rtt.breaking()) { return rtt; } rttVal = rtt.getSingleValue(); } Index num = curr->values.size(); if (num >= ArrayLimit) { hostLimit("allocation failure"); } if (curr->type == Type::unreachable) { // We cannot proceed to compute the heap type, as there isn't one. Just // find why we are unreachable, and stop there. for (auto* value : curr->values) { auto result = self()->visit(value); if (result.breaking()) { return result; } } WASM_UNREACHABLE("unreachable but no unreachable child"); } auto heapType = curr->type.getHeapType(); auto field = heapType.getArray().element; Literals data(num); for (Index i = 0; i < num; i++) { auto value = self()->visit(curr->values[i]); if (value.breaking()) { return value; } data[i] = truncateForPacking(value.getSingleValue(), field); } if (!curr->rtt) { rttVal = Literal::makeCanonicalRtt(heapType); } return Literal(std::make_shared(rttVal, data), curr->type); } Flow visitArrayGet(ArrayGet* curr) { NOTE_ENTER("ArrayGet"); Flow ref = self()->visit(curr->ref); if (ref.breaking()) { return ref; } Flow index = self()->visit(curr->index); if (index.breaking()) { return index; } auto data = ref.getSingleValue().getGCData(); if (!data) { trap("null ref"); } Index i = index.getSingleValue().geti32(); if (i >= data->values.size()) { trap("array oob"); } auto field = curr->ref->type.getHeapType().getArray().element; return extendForPacking(data->values[i], field, curr->signed_); } Flow visitArraySet(ArraySet* curr) { NOTE_ENTER("ArraySet"); Flow ref = self()->visit(curr->ref); if (ref.breaking()) { return ref; } Flow index = self()->visit(curr->index); if (index.breaking()) { return index; } Flow value = self()->visit(curr->value); if (value.breaking()) { return value; } auto data = ref.getSingleValue().getGCData(); if (!data) { trap("null ref"); } Index i = index.getSingleValue().geti32(); if (i >= data->values.size()) { trap("array oob"); } auto field = curr->ref->type.getHeapType().getArray().element; data->values[i] = truncateForPacking(value.getSingleValue(), field); return Flow(); } Flow visitArrayLen(ArrayLen* curr) { NOTE_ENTER("ArrayLen"); Flow ref = self()->visit(curr->ref); if (ref.breaking()) { return ref; } auto data = ref.getSingleValue().getGCData(); if (!data) { trap("null ref"); } return Literal(int32_t(data->values.size())); } Flow visitArrayCopy(ArrayCopy* curr) { NOTE_ENTER("ArrayCopy"); Flow destRef = self()->visit(curr->destRef); if (destRef.breaking()) { return destRef; } Flow destIndex = self()->visit(curr->destIndex); if (destIndex.breaking()) { return destIndex; } Flow srcRef = self()->visit(curr->srcRef); if (srcRef.breaking()) { return srcRef; } Flow srcIndex = self()->visit(curr->srcIndex); if (srcIndex.breaking()) { return srcIndex; } Flow length = self()->visit(curr->length); if (length.breaking()) { return length; } auto destData = destRef.getSingleValue().getGCData(); if (!destData) { trap("null ref"); } auto srcData = srcRef.getSingleValue().getGCData(); if (!srcData) { trap("null ref"); } size_t destVal = destIndex.getSingleValue().getUnsigned(); size_t srcVal = srcIndex.getSingleValue().getUnsigned(); size_t lengthVal = length.getSingleValue().getUnsigned(); if (lengthVal >= ArrayLimit) { hostLimit("allocation failure"); } std::vector copied; copied.resize(lengthVal); for (size_t i = 0; i < lengthVal; i++) { if (srcVal + i >= srcData->values.size()) { trap("oob"); } copied[i] = srcData->values[srcVal + i]; } for (size_t i = 0; i < lengthVal; i++) { if (destVal + i >= destData->values.size()) { trap("oob"); } destData->values[destVal + i] = copied[i]; } return Flow(); } Flow visitRefAs(RefAs* curr) { NOTE_ENTER("RefAs"); Flow flow = visit(curr->value); if (flow.breaking()) { return flow; } const auto& value = flow.getSingleValue(); NOTE_EVAL1(value); if (value.isNull()) { trap("null ref"); } switch (curr->op) { case RefAsNonNull: // We've already checked for a null. break; case RefAsFunc: if (!value.type.isFunction()) { trap("not a func"); } break; case RefAsData: if (!value.isData()) { trap("not a data"); } break; case RefAsI31: if (value.type.getHeapType() != HeapType::i31) { trap("not an i31"); } break; default: WASM_UNREACHABLE("unimplemented ref.as_*"); } return value; } virtual void trap(const char* why) { WASM_UNREACHABLE("unimp"); } virtual void hostLimit(const char* why) { WASM_UNREACHABLE("unimp"); } virtual void throwException(const WasmException& exn) { WASM_UNREACHABLE("unimp"); } private: // Truncate the value if we need to. The storage is just a list of Literals, // so we can't just write the value like we would to a C struct field and // expect it to truncate for us. Instead, we truncate so the stored value is // proper for the type. Literal truncateForPacking(Literal value, const Field& field) { if (field.type == Type::i32) { int32_t c = value.geti32(); if (field.packedType == Field::i8) { value = Literal(c & 0xff); } else if (field.packedType == Field::i16) { value = Literal(c & 0xffff); } } return value; } Literal extendForPacking(Literal value, const Field& field, bool signed_) { if (field.type == Type::i32) { int32_t c = value.geti32(); if (field.packedType == Field::i8) { // The stored value should already be truncated. assert(c == (c & 0xff)); if (signed_) { value = Literal((c << 24) >> 24); } } else if (field.packedType == Field::i16) { assert(c == (c & 0xffff)); if (signed_) { value = Literal((c << 16) >> 16); } } } return value; } }; // Execute a suspected constant expression (precompute and C-API). template class ConstantExpressionRunner : public ExpressionRunner { public: enum FlagValues { // By default, just evaluate the expression, i.e. all we want to know is // whether it computes down to a concrete value, where it is not necessary // to preserve side effects like those of a `local.tee`. DEFAULT = 0, // Be very careful to preserve any side effects. For example, if we are // intending to replace the expression with a constant afterwards, even if // we can technically evaluate down to a constant, we still cannot replace // the expression if it also sets a local, which must be preserved in this // scenario so subsequent code keeps functioning. PRESERVE_SIDEEFFECTS = 1 << 0, // Traverse through function calls, attempting to compute their concrete // value. Must not be used in function-parallel scenarios, where the called // function might be concurrently modified, leading to undefined behavior. TRAVERSE_CALLS = 1 << 1 }; // Flags indicating special requirements, for example whether we are just // evaluating (default), also going to replace the expression afterwards or // executing in a function-parallel scenario. See FlagValues. typedef uint32_t Flags; // Indicates no limit of maxDepth or maxLoopIterations. static const Index NO_LIMIT = 0; protected: // Flags indicating special requirements. See FlagValues. Flags flags = FlagValues::DEFAULT; // Map remembering concrete local values set in the context of this flow. std::unordered_map localValues; // Map remembering concrete global values set in the context of this flow. std::unordered_map globalValues; public: struct NonconstantException { }; // TODO: use a flow with a special name, as this is likely very slow ConstantExpressionRunner(Module* module, Flags flags, Index maxDepth, Index maxLoopIterations) : ExpressionRunner(module, maxDepth, maxLoopIterations), flags(flags) {} // Sets a known local value to use. void setLocalValue(Index index, Literals& values) { assert(values.isConcrete()); localValues[index] = values; } // Sets a known global value to use. void setGlobalValue(Name name, Literals& values) { assert(values.isConcrete()); globalValues[name] = values; } Flow visitLocalGet(LocalGet* curr) { NOTE_ENTER("LocalGet"); NOTE_EVAL1(curr->index); // Check if a constant value has been set in the context of this runner. auto iter = localValues.find(curr->index); if (iter != localValues.end()) { return Flow(iter->second); } return Flow(NONCONSTANT_FLOW); } Flow visitLocalSet(LocalSet* curr) { NOTE_ENTER("LocalSet"); NOTE_EVAL1(curr->index); if (!(flags & FlagValues::PRESERVE_SIDEEFFECTS)) { // If we are evaluating and not replacing the expression, remember the // constant value set, if any, and see if there is a value flowing through // a tee. auto setFlow = ExpressionRunner::visit(curr->value); if (!setFlow.breaking()) { setLocalValue(curr->index, setFlow.values); if (curr->type.isConcrete()) { assert(curr->isTee()); return setFlow; } return Flow(); } } return Flow(NONCONSTANT_FLOW); } Flow visitGlobalGet(GlobalGet* curr) { NOTE_ENTER("GlobalGet"); NOTE_NAME(curr->name); if (this->module != nullptr) { auto* global = this->module->getGlobal(curr->name); // Check if the global has an immutable value anyway if (!global->imported() && !global->mutable_) { return ExpressionRunner::visit(global->init); } } // Check if a constant value has been set in the context of this runner. auto iter = globalValues.find(curr->name); if (iter != globalValues.end()) { return Flow(iter->second); } return Flow(NONCONSTANT_FLOW); } Flow visitGlobalSet(GlobalSet* curr) { NOTE_ENTER("GlobalSet"); NOTE_NAME(curr->name); if (!(flags & FlagValues::PRESERVE_SIDEEFFECTS) && this->module != nullptr) { // If we are evaluating and not replacing the expression, remember the // constant value set, if any, for subsequent gets. assert(this->module->getGlobal(curr->name)->mutable_); auto setFlow = ExpressionRunner::visit(curr->value); if (!setFlow.breaking()) { setGlobalValue(curr->name, setFlow.values); return Flow(); } } return Flow(NONCONSTANT_FLOW); } Flow visitCall(Call* curr) { NOTE_ENTER("Call"); NOTE_NAME(curr->target); // Traverse into functions using the same mode, which we can also do // when replacing as long as the function does not have any side effects. // Might yield something useful for simple functions like `clamp`, sometimes // even if arguments are only partially constant or not constant at all. if ((flags & FlagValues::TRAVERSE_CALLS) != 0 && this->module != nullptr) { auto* func = this->module->getFunction(curr->target); if (!func->imported()) { if (func->getResults().isConcrete()) { auto numOperands = curr->operands.size(); assert(numOperands == func->getNumParams()); auto prevLocalValues = localValues; localValues.clear(); for (Index i = 0; i < numOperands; ++i) { auto argFlow = ExpressionRunner::visit(curr->operands[i]); if (!argFlow.breaking()) { assert(argFlow.values.isConcrete()); localValues[i] = argFlow.values; } } auto retFlow = ExpressionRunner::visit(func->body); localValues = prevLocalValues; if (retFlow.breakTo == RETURN_FLOW) { return Flow(retFlow.values); } else if (!retFlow.breaking()) { return retFlow; } } } } return Flow(NONCONSTANT_FLOW); } Flow visitCallIndirect(CallIndirect* curr) { NOTE_ENTER("CallIndirect"); return Flow(NONCONSTANT_FLOW); } Flow visitCallRef(CallRef* curr) { NOTE_ENTER("CallRef"); return Flow(NONCONSTANT_FLOW); } Flow visitTableGet(TableGet* curr) { NOTE_ENTER("TableGet"); return Flow(NONCONSTANT_FLOW); } Flow visitTableSet(TableSet* curr) { NOTE_ENTER("TableSet"); return Flow(NONCONSTANT_FLOW); } Flow visitTableSize(TableSize* curr) { NOTE_ENTER("TableSize"); return Flow(NONCONSTANT_FLOW); } Flow visitTableGrow(TableGrow* curr) { NOTE_ENTER("TableGrow"); return Flow(NONCONSTANT_FLOW); } Flow visitLoad(Load* curr) { NOTE_ENTER("Load"); return Flow(NONCONSTANT_FLOW); } Flow visitStore(Store* curr) { NOTE_ENTER("Store"); return Flow(NONCONSTANT_FLOW); } Flow visitMemorySize(MemorySize* curr) { NOTE_ENTER("MemorySize"); return Flow(NONCONSTANT_FLOW); } Flow visitMemoryGrow(MemoryGrow* curr) { NOTE_ENTER("MemoryGrow"); return Flow(NONCONSTANT_FLOW); } Flow visitMemoryInit(MemoryInit* curr) { NOTE_ENTER("MemoryInit"); return Flow(NONCONSTANT_FLOW); } Flow visitDataDrop(DataDrop* curr) { NOTE_ENTER("DataDrop"); return Flow(NONCONSTANT_FLOW); } Flow visitMemoryCopy(MemoryCopy* curr) { NOTE_ENTER("MemoryCopy"); return Flow(NONCONSTANT_FLOW); } Flow visitMemoryFill(MemoryFill* curr) { NOTE_ENTER("MemoryFill"); return Flow(NONCONSTANT_FLOW); } Flow visitAtomicRMW(AtomicRMW* curr) { NOTE_ENTER("AtomicRMW"); return Flow(NONCONSTANT_FLOW); } Flow visitAtomicCmpxchg(AtomicCmpxchg* curr) { NOTE_ENTER("AtomicCmpxchg"); return Flow(NONCONSTANT_FLOW); } Flow visitAtomicWait(AtomicWait* curr) { NOTE_ENTER("AtomicWait"); return Flow(NONCONSTANT_FLOW); } Flow visitAtomicNotify(AtomicNotify* curr) { NOTE_ENTER("AtomicNotify"); return Flow(NONCONSTANT_FLOW); } Flow visitSIMDLoad(SIMDLoad* curr) { NOTE_ENTER("SIMDLoad"); return Flow(NONCONSTANT_FLOW); } Flow visitSIMDLoadSplat(SIMDLoad* curr) { NOTE_ENTER("SIMDLoadSplat"); return Flow(NONCONSTANT_FLOW); } Flow visitSIMDLoadExtend(SIMDLoad* curr) { NOTE_ENTER("SIMDLoadExtend"); return Flow(NONCONSTANT_FLOW); } Flow visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { NOTE_ENTER("SIMDLoadStoreLane"); return Flow(NONCONSTANT_FLOW); } Flow visitPop(Pop* curr) { NOTE_ENTER("Pop"); return Flow(NONCONSTANT_FLOW); } Flow visitTry(Try* curr) { NOTE_ENTER("Try"); return Flow(NONCONSTANT_FLOW); } Flow visitRethrow(Rethrow* curr) { NOTE_ENTER("Rethrow"); return Flow(NONCONSTANT_FLOW); } void trap(const char* why) override { throw NonconstantException(); } void hostLimit(const char* why) override { throw NonconstantException(); } virtual void throwException(const WasmException& exn) override { throw NonconstantException(); } }; using GlobalValueSet = std::map; // // A runner for a module. Each runner contains the information to execute the // module, such as the state of globals, and so forth, so it basically // encapsulates an instantiation of the wasm, and implements all the interpreter // instructions that use that info (like global.set etc.) that are not declared // in ExpressionRunner, which just looks at a single instruction. // // To embed this interpreter, you need to provide an ExternalInterface instance // (see below) which provides the embedding-specific details, that is, how to // connect to the embedding implementation. // // To call into the interpreter, use callExport. // template class ModuleRunnerBase : public ExpressionRunner { public: // // You need to implement one of these to create a concrete interpreter. The // ExternalInterface provides embedding-specific functionality like calling // an imported function or accessing memory. // struct ExternalInterface { ExternalInterface( std::map> linkedInstances = {}) {} virtual ~ExternalInterface() = default; virtual void init(Module& wasm, SubType& instance) {} virtual void importGlobals(GlobalValueSet& globals, Module& wasm) = 0; virtual Literals callImport(Function* import, Literals& arguments) = 0; virtual Literals callTable(Name tableName, Index index, HeapType sig, Literals& arguments, Type result, SubType& instance) = 0; virtual bool growMemory(Address oldSize, Address newSize) = 0; virtual bool growTable(Name name, const Literal& value, Index oldSize, Index newSize) = 0; virtual void trap(const char* why) = 0; virtual void hostLimit(const char* why) = 0; virtual void throwException(const WasmException& exn) = 0; // the default impls for load and store switch on the sizes. you can either // customize load/store, or the sub-functions which they call virtual Literal load(Load* load, Address addr) { switch (load->type.getBasic()) { case Type::i32: { switch (load->bytes) { case 1: return load->signed_ ? Literal((int32_t)load8s(addr)) : Literal((int32_t)load8u(addr)); case 2: return load->signed_ ? Literal((int32_t)load16s(addr)) : Literal((int32_t)load16u(addr)); case 4: return Literal((int32_t)load32s(addr)); default: WASM_UNREACHABLE("invalid size"); } break; } case Type::i64: { switch (load->bytes) { case 1: return load->signed_ ? Literal((int64_t)load8s(addr)) : Literal((int64_t)load8u(addr)); case 2: return load->signed_ ? Literal((int64_t)load16s(addr)) : Literal((int64_t)load16u(addr)); case 4: return load->signed_ ? Literal((int64_t)load32s(addr)) : Literal((int64_t)load32u(addr)); case 8: return Literal((int64_t)load64s(addr)); default: WASM_UNREACHABLE("invalid size"); } break; } case Type::f32: return Literal(load32u(addr)).castToF32(); case Type::f64: return Literal(load64u(addr)).castToF64(); case Type::v128: return Literal(load128(addr).data()); case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("invalid type"); } virtual void store(Store* store, Address addr, Literal value) { switch (store->valueType.getBasic()) { case Type::i32: { switch (store->bytes) { case 1: store8(addr, value.geti32()); break; case 2: store16(addr, value.geti32()); break; case 4: store32(addr, value.geti32()); break; default: WASM_UNREACHABLE("invalid store size"); } break; } case Type::i64: { switch (store->bytes) { case 1: store8(addr, value.geti64()); break; case 2: store16(addr, value.geti64()); break; case 4: store32(addr, value.geti64()); break; case 8: store64(addr, value.geti64()); break; default: WASM_UNREACHABLE("invalid store size"); } break; } // write floats carefully, ensuring all bits reach memory case Type::f32: store32(addr, value.reinterpreti32()); break; case Type::f64: store64(addr, value.reinterpreti64()); break; case Type::v128: store128(addr, value.getv128()); break; case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } } virtual int8_t load8s(Address addr) { WASM_UNREACHABLE("unimp"); } virtual uint8_t load8u(Address addr) { WASM_UNREACHABLE("unimp"); } virtual int16_t load16s(Address addr) { WASM_UNREACHABLE("unimp"); } virtual uint16_t load16u(Address addr) { WASM_UNREACHABLE("unimp"); } virtual int32_t load32s(Address addr) { WASM_UNREACHABLE("unimp"); } virtual uint32_t load32u(Address addr) { WASM_UNREACHABLE("unimp"); } virtual int64_t load64s(Address addr) { WASM_UNREACHABLE("unimp"); } virtual uint64_t load64u(Address addr) { WASM_UNREACHABLE("unimp"); } virtual std::array load128(Address addr) { WASM_UNREACHABLE("unimp"); } virtual void store8(Address addr, int8_t value) { WASM_UNREACHABLE("unimp"); } virtual void store16(Address addr, int16_t value) { WASM_UNREACHABLE("unimp"); } virtual void store32(Address addr, int32_t value) { WASM_UNREACHABLE("unimp"); } virtual void store64(Address addr, int64_t value) { WASM_UNREACHABLE("unimp"); } virtual void store128(Address addr, const std::array&) { WASM_UNREACHABLE("unimp"); } virtual Index tableSize(Name tableName) = 0; virtual void tableStore(Name tableName, Index index, const Literal& entry) { WASM_UNREACHABLE("unimp"); } virtual Literal tableLoad(Name tableName, Index index) { WASM_UNREACHABLE("unimp"); } }; SubType* self() { return static_cast(this); } // TODO: this duplicates module in ExpressionRunner, and can be removed Module& wasm; // Values of globals GlobalValueSet globals; // Multivalue ABI support (see push/pop). std::vector multiValues; ModuleRunnerBase( Module& wasm, ExternalInterface* externalInterface, std::map> linkedInstances_ = {}) : ExpressionRunner(&wasm), wasm(wasm), externalInterface(externalInterface), linkedInstances(linkedInstances_) { // import globals from the outside externalInterface->importGlobals(globals, wasm); // prepare memory memorySize = wasm.memory.initial; // generate internal (non-imported) globals ModuleUtils::iterDefinedGlobals(wasm, [&](Global* global) { globals[global->name] = self()->visit(global->init).values; }); // initialize the rest of the external interface externalInterface->init(wasm, *self()); initializeTableContents(); initializeMemoryContents(); // run start, if present if (wasm.start.is()) { Literals arguments; callFunction(wasm.start, arguments); } } // call an exported function Literals callExport(Name name, const Literals& arguments) { Export* export_ = wasm.getExportOrNull(name); if (!export_) { externalInterface->trap("callExport not found"); } return callFunction(export_->value, arguments); } Literals callExport(Name name) { return callExport(name, Literals()); } // get an exported global Literals getExport(Name name) { Export* export_ = wasm.getExportOrNull(name); if (!export_) { externalInterface->trap("getExport external not found"); } Name internalName = export_->value; auto iter = globals.find(internalName); if (iter == globals.end()) { externalInterface->trap("getExport internal not found"); } return iter->second; } std::string printFunctionStack() { std::string ret = "/== (binaryen interpreter stack trace)\n"; for (int i = int(functionStack.size()) - 1; i >= 0; i--) { ret += std::string("|: ") + functionStack[i].str + "\n"; } ret += std::string("\\==\n"); return ret; } private: // Keep a record of call depth, to guard against excessive recursion. size_t callDepth = 0; // Function name stack. We maintain this explicitly to allow printing of // stack traces. std::vector functionStack; std::unordered_set droppedSegments; struct TableInterfaceInfo { // The external interface in which the table is defined. ExternalInterface* interface; // The name the table has in that interface. Name name; }; TableInterfaceInfo getTableInterfaceInfo(Name name) { auto* table = wasm.getTable(name); if (table->imported()) { auto& importedInstance = linkedInstances.at(table->module); auto* tableExport = importedInstance->wasm.getExport(table->base); return TableInterfaceInfo{importedInstance->externalInterface, tableExport->value}; } else { return TableInterfaceInfo{externalInterface, name}; } } void initializeTableContents() { for (auto& table : wasm.tables) { if (table->type.isNullable()) { // Initial with nulls in a nullable table. auto info = getTableInterfaceInfo(table->name); auto null = Literal::makeNull(table->type); for (Address i = 0; i < table->initial; i++) { info.interface->tableStore(info.name, i, null); } } } ModuleUtils::iterActiveElementSegments(wasm, [&](ElementSegment* segment) { Address offset = (uint32_t)self()->visit(segment->offset).getSingleValue().geti32(); Table* table = wasm.getTable(segment->table); ExternalInterface* extInterface = externalInterface; Name tableName = segment->table; if (table->imported()) { auto inst = linkedInstances.at(table->module); extInterface = inst->externalInterface; tableName = inst->wasm.getExport(table->base)->value; } for (Index i = 0; i < segment->data.size(); ++i) { Flow ret = self()->visit(segment->data[i]); extInterface->tableStore(tableName, offset + i, ret.getSingleValue()); } }); } void initializeMemoryContents() { Const offset; offset.value = Literal(uint32_t(0)); offset.finalize(); // apply active memory segments for (size_t i = 0, e = wasm.memory.segments.size(); i < e; ++i) { Memory::Segment& segment = wasm.memory.segments[i]; if (segment.isPassive) { continue; } Const size; size.value = Literal(uint32_t(segment.data.size())); size.finalize(); MemoryInit init; init.segment = i; init.dest = segment.offset; init.offset = &offset; init.size = &size; init.finalize(); DataDrop drop; drop.segment = i; drop.finalize(); self()->visit(&init); self()->visit(&drop); } } public: class FunctionScope { public: std::vector locals; Function* function; SubType& parent; FunctionScope* oldScope; FunctionScope(Function* function, const Literals& arguments, SubType& parent) : function(function), parent(parent) { oldScope = parent.scope; parent.scope = this; if (function->getParams().size() != arguments.size()) { std::cerr << "Function `" << function->name << "` expects " << function->getParams().size() << " parameters, got " << arguments.size() << " arguments." << std::endl; WASM_UNREACHABLE("invalid param count"); } locals.resize(function->getNumLocals()); Type params = function->getParams(); for (size_t i = 0; i < function->getNumLocals(); i++) { if (i < arguments.size()) { if (!Type::isSubType(arguments[i].type, params[i])) { std::cerr << "Function `" << function->name << "` expects type " << params[i] << " for parameter " << i << ", got " << arguments[i].type << "." << std::endl; WASM_UNREACHABLE("invalid param count"); } locals[i] = {arguments[i]}; } else { assert(function->isVar(i)); locals[i] = Literal::makeZeros(function->getLocalType(i)); } } } ~FunctionScope() { parent.scope = oldScope; } // The current delegate target, if delegation of an exception is in // progress. If no delegation is in progress, this will be an empty Name. // This is on a function scope because it cannot "escape" to the outside, // that is, a delegate target is like a branch target, it operates within // a function. Name currDelegateTarget; }; private: // This is managed in an RAII manner by the FunctionScope class. FunctionScope* scope = nullptr; // Stack of SmallVector, 4> exceptionStack; protected: // Returns the instance that defines the memory used by this one. SubType* getMemoryInstance() { auto* inst = self(); while (inst->wasm.memory.imported()) { inst = inst->linkedInstances.at(inst->wasm.memory.module).get(); } return inst; } // Returns a reference to the current value of a potentially imported global Literals& getGlobal(Name name) { auto* inst = self(); auto* global = inst->wasm.getGlobal(name); while (global->imported()) { inst = inst->linkedInstances.at(global->module).get(); Export* globalExport = inst->wasm.getExport(global->base); global = inst->wasm.getGlobal(globalExport->value); } return inst->globals[global->name]; } public: Flow visitCall(Call* curr) { NOTE_ENTER("Call"); NOTE_NAME(curr->target); Literals arguments; Flow flow = self()->generateArguments(curr->operands, arguments); if (flow.breaking()) { return flow; } auto* func = wasm.getFunction(curr->target); Flow ret; if (func->imported()) { ret.values = externalInterface->callImport(func, arguments); } else { ret.values = callFunctionInternal(curr->target, arguments); } #ifdef WASM_INTERPRETER_DEBUG std::cout << "(returned to " << scope->function->name << ")\n"; #endif // TODO: make this a proper tail call (return first) if (curr->isReturn) { ret.breakTo = RETURN_FLOW; } return ret; } Flow visitCallIndirect(CallIndirect* curr) { NOTE_ENTER("CallIndirect"); Literals arguments; Flow flow = self()->generateArguments(curr->operands, arguments); if (flow.breaking()) { return flow; } Flow target = self()->visit(curr->target); if (target.breaking()) { return target; } Index index = target.getSingleValue().geti32(); Type type = curr->isReturn ? scope->function->getResults() : curr->type; auto info = getTableInterfaceInfo(curr->table); Flow ret = info.interface->callTable( info.name, index, curr->heapType, arguments, type, *self()); // TODO: make this a proper tail call (return first) if (curr->isReturn) { ret.breakTo = RETURN_FLOW; } return ret; } Flow visitCallRef(CallRef* curr) { NOTE_ENTER("CallRef"); Literals arguments; Flow flow = self()->generateArguments(curr->operands, arguments); if (flow.breaking()) { return flow; } Flow target = self()->visit(curr->target); if (target.breaking()) { return target; } if (target.getSingleValue().isNull()) { trap("null target in call_ref"); } Name funcName = target.getSingleValue().getFunc(); auto* func = wasm.getFunction(funcName); Flow ret; if (func->imported()) { ret.values = externalInterface->callImport(func, arguments); } else { ret.values = callFunctionInternal(funcName, arguments); } #ifdef WASM_INTERPRETER_DEBUG std::cout << "(returned to " << scope->function->name << ")\n"; #endif // TODO: make this a proper tail call (return first) if (curr->isReturn) { ret.breakTo = RETURN_FLOW; } return ret; } Flow visitTableGet(TableGet* curr) { NOTE_ENTER("TableGet"); Flow index = self()->visit(curr->index); if (index.breaking()) { return index; } auto info = getTableInterfaceInfo(curr->table); return info.interface->tableLoad(info.name, index.getSingleValue().geti32()); } Flow visitTableSet(TableSet* curr) { NOTE_ENTER("TableSet"); Flow indexFlow = self()->visit(curr->index); if (indexFlow.breaking()) { return indexFlow; } Flow valueFlow = self()->visit(curr->value); if (valueFlow.breaking()) { return valueFlow; } auto info = getTableInterfaceInfo(curr->table); info.interface->tableStore(info.name, indexFlow.getSingleValue().geti32(), valueFlow.getSingleValue()); return Flow(); } Flow visitTableSize(TableSize* curr) { NOTE_ENTER("TableSize"); auto info = getTableInterfaceInfo(curr->table); Index tableSize = info.interface->tableSize(curr->table); return Literal::makeFromInt32(tableSize, Type::i32); } Flow visitTableGrow(TableGrow* curr) { NOTE_ENTER("TableGrow"); Flow valueFlow = self()->visit(curr->value); if (valueFlow.breaking()) { return valueFlow; } Flow deltaFlow = self()->visit(curr->delta); if (deltaFlow.breaking()) { return deltaFlow; } Name tableName = curr->table; auto info = getTableInterfaceInfo(tableName); Index tableSize = info.interface->tableSize(tableName); Flow ret = Literal::makeFromInt32(tableSize, Type::i32); Flow fail = Literal::makeFromInt32(-1, Type::i32); Index delta = deltaFlow.getSingleValue().geti32(); if (tableSize >= uint32_t(-1) - delta) { return fail; } auto maxTableSize = self()->wasm.getTable(tableName)->max; if (uint64_t(tableSize) + uint64_t(delta) > uint64_t(maxTableSize)) { return fail; } Index newSize = tableSize + delta; if (!info.interface->growTable( tableName, valueFlow.getSingleValue(), tableSize, newSize)) { // We failed to grow the table in practice, even though it was valid // to try to do so. return fail; } return ret; } Flow visitLocalGet(LocalGet* curr) { NOTE_ENTER("LocalGet"); auto index = curr->index; NOTE_EVAL1(index); NOTE_EVAL1(scope->locals[index]); return scope->locals[index]; } Flow visitLocalSet(LocalSet* curr) { NOTE_ENTER("LocalSet"); auto index = curr->index; Flow flow = self()->visit(curr->value); if (flow.breaking()) { return flow; } NOTE_EVAL1(index); NOTE_EVAL1(flow.getSingleValue()); assert(curr->isTee() ? Type::isSubType(flow.getType(), curr->type) : true); scope->locals[index] = flow.values; return curr->isTee() ? flow : Flow(); } Flow visitGlobalGet(GlobalGet* curr) { NOTE_ENTER("GlobalGet"); auto name = curr->name; NOTE_EVAL1(name); return getGlobal(name); } Flow visitGlobalSet(GlobalSet* curr) { NOTE_ENTER("GlobalSet"); auto name = curr->name; Flow flow = self()->visit(curr->value); if (flow.breaking()) { return flow; } NOTE_EVAL1(name); NOTE_EVAL1(flow.getSingleValue()); getGlobal(name) = flow.values; return Flow(); } Flow visitLoad(Load* curr) { NOTE_ENTER("Load"); Flow flow = self()->visit(curr->ptr); if (flow.breaking()) { return flow; } NOTE_EVAL1(flow); auto* inst = getMemoryInstance(); auto addr = inst->getFinalAddress(curr, flow.getSingleValue()); if (curr->isAtomic) { inst->checkAtomicAddress(addr, curr->bytes); } auto ret = inst->externalInterface->load(curr, addr); NOTE_EVAL1(addr); NOTE_EVAL1(ret); return ret; } Flow visitStore(Store* curr) { NOTE_ENTER("Store"); Flow ptr = self()->visit(curr->ptr); if (ptr.breaking()) { return ptr; } Flow value = self()->visit(curr->value); if (value.breaking()) { return value; } auto* inst = getMemoryInstance(); auto addr = inst->getFinalAddress(curr, ptr.getSingleValue()); if (curr->isAtomic) { inst->checkAtomicAddress(addr, curr->bytes); } NOTE_EVAL1(addr); NOTE_EVAL1(value); inst->externalInterface->store(curr, addr, value.getSingleValue()); return Flow(); } Flow visitAtomicRMW(AtomicRMW* curr) { NOTE_ENTER("AtomicRMW"); Flow ptr = self()->visit(curr->ptr); if (ptr.breaking()) { return ptr; } auto value = self()->visit(curr->value); if (value.breaking()) { return value; } NOTE_EVAL1(ptr); auto* inst = getMemoryInstance(); auto addr = inst->getFinalAddress(curr, ptr.getSingleValue()); NOTE_EVAL1(addr); NOTE_EVAL1(value); auto loaded = inst->doAtomicLoad(addr, curr->bytes, curr->type); NOTE_EVAL1(loaded); auto computed = value.getSingleValue(); switch (curr->op) { case RMWAdd: computed = loaded.add(computed); break; case RMWSub: computed = loaded.sub(computed); break; case RMWAnd: computed = loaded.and_(computed); break; case RMWOr: computed = loaded.or_(computed); break; case RMWXor: computed = loaded.xor_(computed); break; case RMWXchg: break; } inst->doAtomicStore(addr, curr->bytes, computed); return loaded; } Flow visitAtomicCmpxchg(AtomicCmpxchg* curr) { NOTE_ENTER("AtomicCmpxchg"); Flow ptr = self()->visit(curr->ptr); if (ptr.breaking()) { return ptr; } NOTE_EVAL1(ptr); auto expected = self()->visit(curr->expected); if (expected.breaking()) { return expected; } auto replacement = self()->visit(curr->replacement); if (replacement.breaking()) { return replacement; } auto* inst = getMemoryInstance(); auto addr = inst->getFinalAddress(curr, ptr.getSingleValue()); expected = Flow(wrapToSmallerSize(expected.getSingleValue(), curr->bytes)); NOTE_EVAL1(addr); NOTE_EVAL1(expected); NOTE_EVAL1(replacement); auto loaded = inst->doAtomicLoad(addr, curr->bytes, curr->type); NOTE_EVAL1(loaded); if (loaded == expected.getSingleValue()) { inst->doAtomicStore(addr, curr->bytes, replacement.getSingleValue()); } return loaded; } Flow visitAtomicWait(AtomicWait* curr) { NOTE_ENTER("AtomicWait"); Flow ptr = self()->visit(curr->ptr); if (ptr.breaking()) { return ptr; } NOTE_EVAL1(ptr); auto expected = self()->visit(curr->expected); NOTE_EVAL1(expected); if (expected.breaking()) { return expected; } auto timeout = self()->visit(curr->timeout); NOTE_EVAL1(timeout); if (timeout.breaking()) { return timeout; } auto* inst = getMemoryInstance(); auto bytes = curr->expectedType.getByteSize(); auto addr = inst->getFinalAddress(curr, ptr.getSingleValue(), bytes); auto loaded = inst->doAtomicLoad(addr, bytes, curr->expectedType); NOTE_EVAL1(loaded); if (loaded != expected.getSingleValue()) { return Literal(int32_t(1)); // not equal } // TODO: add threads support! // for now, just assume we are woken up return Literal(int32_t(0)); // woken up } Flow visitAtomicNotify(AtomicNotify* curr) { NOTE_ENTER("AtomicNotify"); Flow ptr = self()->visit(curr->ptr); if (ptr.breaking()) { return ptr; } NOTE_EVAL1(ptr); auto count = self()->visit(curr->notifyCount); NOTE_EVAL1(count); if (count.breaking()) { return count; } auto* inst = getMemoryInstance(); auto addr = inst->getFinalAddress(curr, ptr.getSingleValue(), 4); // Just check TODO actual threads support inst->checkAtomicAddress(addr, 4); return Literal(int32_t(0)); // none woken up } Flow visitSIMDLoad(SIMDLoad* curr) { NOTE_ENTER("SIMDLoad"); switch (curr->op) { case Load8SplatVec128: case Load16SplatVec128: case Load32SplatVec128: case Load64SplatVec128: return visitSIMDLoadSplat(curr); case Load8x8SVec128: case Load8x8UVec128: case Load16x4SVec128: case Load16x4UVec128: case Load32x2SVec128: case Load32x2UVec128: return visitSIMDLoadExtend(curr); case Load32ZeroVec128: case Load64ZeroVec128: return visitSIMDLoadZero(curr); } WASM_UNREACHABLE("invalid op"); } Flow visitSIMDLoadSplat(SIMDLoad* curr) { Load load; load.type = Type::i32; load.bytes = curr->getMemBytes(); load.signed_ = false; load.offset = curr->offset; load.align = curr->align; load.isAtomic = false; load.ptr = curr->ptr; Literal (Literal::*splat)() const = nullptr; switch (curr->op) { case Load8SplatVec128: splat = &Literal::splatI8x16; break; case Load16SplatVec128: splat = &Literal::splatI16x8; break; case Load32SplatVec128: splat = &Literal::splatI32x4; break; case Load64SplatVec128: load.type = Type::i64; splat = &Literal::splatI64x2; break; default: WASM_UNREACHABLE("invalid op"); } load.finalize(); Flow flow = self()->visit(&load); if (flow.breaking()) { return flow; } return (flow.getSingleValue().*splat)(); } Flow visitSIMDLoadExtend(SIMDLoad* curr) { Flow flow = self()->visit(curr->ptr); if (flow.breaking()) { return flow; } NOTE_EVAL1(flow); Address src(uint32_t(flow.getSingleValue().geti32())); auto* inst = getMemoryInstance(); auto loadLane = [&](Address addr) { switch (curr->op) { case Load8x8SVec128: return Literal(int32_t(inst->externalInterface->load8s(addr))); case Load8x8UVec128: return Literal(int32_t(inst->externalInterface->load8u(addr))); case Load16x4SVec128: return Literal(int32_t(inst->externalInterface->load16s(addr))); case Load16x4UVec128: return Literal(int32_t(inst->externalInterface->load16u(addr))); case Load32x2SVec128: return Literal(int64_t(inst->externalInterface->load32s(addr))); case Load32x2UVec128: return Literal(int64_t(inst->externalInterface->load32u(addr))); default: WASM_UNREACHABLE("unexpected op"); } WASM_UNREACHABLE("invalid op"); }; auto fillLanes = [&](auto lanes, size_t laneBytes) { for (auto& lane : lanes) { lane = loadLane( inst->getFinalAddress(curr, Literal(uint32_t(src)), laneBytes)); src = Address(uint32_t(src) + laneBytes); } return Literal(lanes); }; switch (curr->op) { case Load8x8SVec128: case Load8x8UVec128: { std::array lanes; return fillLanes(lanes, 1); } case Load16x4SVec128: case Load16x4UVec128: { std::array lanes; return fillLanes(lanes, 2); } case Load32x2SVec128: case Load32x2UVec128: { std::array lanes; return fillLanes(lanes, 4); } default: WASM_UNREACHABLE("unexpected op"); } WASM_UNREACHABLE("invalid op"); } Flow visitSIMDLoadZero(SIMDLoad* curr) { Flow flow = self()->visit(curr->ptr); if (flow.breaking()) { return flow; } NOTE_EVAL1(flow); auto* inst = getMemoryInstance(); Address src = inst->getFinalAddress(curr, flow.getSingleValue(), curr->getMemBytes()); auto zero = Literal::makeZero(curr->op == Load32ZeroVec128 ? Type::i32 : Type::i64); if (curr->op == Load32ZeroVec128) { auto val = Literal(inst->externalInterface->load32u(src)); return Literal(std::array{{val, zero, zero, zero}}); } else { auto val = Literal(inst->externalInterface->load64u(src)); return Literal(std::array{{val, zero}}); } } Flow visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { NOTE_ENTER("SIMDLoadStoreLane"); Flow flow = self()->visit(curr->ptr); if (flow.breaking()) { return flow; } NOTE_EVAL1(flow); auto* inst = getMemoryInstance(); Address addr = inst->getFinalAddress(curr, flow.getSingleValue(), curr->getMemBytes()); flow = self()->visit(curr->vec); if (flow.breaking()) { return flow; } Literal vec = flow.getSingleValue(); switch (curr->op) { case Load8LaneVec128: case Store8LaneVec128: { std::array lanes = vec.getLanesUI8x16(); if (curr->isLoad()) { lanes[curr->index] = Literal(inst->externalInterface->load8u(addr)); return Literal(lanes); } else { inst->externalInterface->store8(addr, lanes[curr->index].geti32()); return {}; } } case Load16LaneVec128: case Store16LaneVec128: { std::array lanes = vec.getLanesUI16x8(); if (curr->isLoad()) { lanes[curr->index] = Literal(inst->externalInterface->load16u(addr)); return Literal(lanes); } else { inst->externalInterface->store16(addr, lanes[curr->index].geti32()); return {}; } } case Load32LaneVec128: case Store32LaneVec128: { std::array lanes = vec.getLanesI32x4(); if (curr->isLoad()) { lanes[curr->index] = Literal(inst->externalInterface->load32u(addr)); return Literal(lanes); } else { inst->externalInterface->store32(addr, lanes[curr->index].geti32()); return {}; } } case Store64LaneVec128: case Load64LaneVec128: { std::array lanes = vec.getLanesI64x2(); if (curr->isLoad()) { lanes[curr->index] = Literal(inst->externalInterface->load64u(addr)); return Literal(lanes); } else { inst->externalInterface->store64(addr, lanes[curr->index].geti64()); return {}; } } } WASM_UNREACHABLE("unexpected op"); } Flow visitMemorySize(MemorySize* curr) { NOTE_ENTER("MemorySize"); auto* inst = getMemoryInstance(); return Literal::makeFromInt64(inst->memorySize, inst->wasm.memory.indexType); } Flow visitMemoryGrow(MemoryGrow* curr) { NOTE_ENTER("MemoryGrow"); auto* inst = getMemoryInstance(); auto indexType = inst->wasm.memory.indexType; auto fail = Literal::makeFromInt64(-1, indexType); Flow flow = self()->visit(curr->delta); if (flow.breaking()) { return flow; } Flow ret = Literal::makeFromInt64(inst->memorySize, indexType); uint64_t delta = flow.getSingleValue().getUnsigned(); if (delta > uint32_t(-1) / Memory::kPageSize && indexType == Type::i32) { return fail; } if (inst->memorySize >= uint32_t(-1) - delta && indexType == Type::i32) { return fail; } auto newSize = inst->memorySize + delta; if (newSize > inst->wasm.memory.max) { return fail; } if (!inst->externalInterface->growMemory( inst->memorySize * Memory::kPageSize, newSize * Memory::kPageSize)) { // We failed to grow the memory in practice, even though it was valid // to try to do so. return fail; } inst->memorySize = newSize; return ret; } Flow visitMemoryInit(MemoryInit* curr) { NOTE_ENTER("MemoryInit"); Flow dest = self()->visit(curr->dest); if (dest.breaking()) { return dest; } Flow offset = self()->visit(curr->offset); if (offset.breaking()) { return offset; } Flow size = self()->visit(curr->size); if (size.breaking()) { return size; } NOTE_EVAL1(dest); NOTE_EVAL1(offset); NOTE_EVAL1(size); assert(curr->segment < wasm.memory.segments.size()); Memory::Segment& segment = wasm.memory.segments[curr->segment]; Address destVal(dest.getSingleValue().getUnsigned()); Address offsetVal(uint32_t(offset.getSingleValue().geti32())); Address sizeVal(uint32_t(size.getSingleValue().geti32())); if (offsetVal + sizeVal > 0 && droppedSegments.count(curr->segment)) { trap("out of bounds segment access in memory.init"); } if ((uint64_t)offsetVal + sizeVal > segment.data.size()) { trap("out of bounds segment access in memory.init"); } auto* inst = getMemoryInstance(); if (destVal + sizeVal > inst->memorySize * Memory::kPageSize) { trap("out of bounds memory access in memory.init"); } for (size_t i = 0; i < sizeVal; ++i) { Literal addr(destVal + i); inst->externalInterface->store8( inst->getFinalAddressWithoutOffset(addr, 1), segment.data[offsetVal + i]); } return {}; } Flow visitDataDrop(DataDrop* curr) { NOTE_ENTER("DataDrop"); droppedSegments.insert(curr->segment); return {}; } Flow visitMemoryCopy(MemoryCopy* curr) { NOTE_ENTER("MemoryCopy"); Flow dest = self()->visit(curr->dest); if (dest.breaking()) { return dest; } Flow source = self()->visit(curr->source); if (source.breaking()) { return source; } Flow size = self()->visit(curr->size); if (size.breaking()) { return size; } NOTE_EVAL1(dest); NOTE_EVAL1(source); NOTE_EVAL1(size); Address destVal(dest.getSingleValue().getUnsigned()); Address sourceVal(source.getSingleValue().getUnsigned()); Address sizeVal(size.getSingleValue().getUnsigned()); auto* inst = getMemoryInstance(); if (sourceVal + sizeVal > inst->memorySize * Memory::kPageSize || destVal + sizeVal > inst->memorySize * Memory::kPageSize || // FIXME: better/cheaper way to detect wrapping? sourceVal + sizeVal < sourceVal || sourceVal + sizeVal < sizeVal || destVal + sizeVal < destVal || destVal + sizeVal < sizeVal) { trap("out of bounds segment access in memory.copy"); } int64_t start = 0; int64_t end = sizeVal; int step = 1; // Reverse direction if source is below dest if (sourceVal < destVal) { start = int64_t(sizeVal) - 1; end = -1; step = -1; } for (int64_t i = start; i != end; i += step) { inst->externalInterface->store8( inst->getFinalAddressWithoutOffset(Literal(destVal + i), 1), inst->externalInterface->load8s( inst->getFinalAddressWithoutOffset(Literal(sourceVal + i), 1))); } return {}; } Flow visitMemoryFill(MemoryFill* curr) { NOTE_ENTER("MemoryFill"); Flow dest = self()->visit(curr->dest); if (dest.breaking()) { return dest; } Flow value = self()->visit(curr->value); if (value.breaking()) { return value; } Flow size = self()->visit(curr->size); if (size.breaking()) { return size; } NOTE_EVAL1(dest); NOTE_EVAL1(value); NOTE_EVAL1(size); Address destVal(dest.getSingleValue().getUnsigned()); Address sizeVal(size.getSingleValue().getUnsigned()); auto* inst = getMemoryInstance(); // FIXME: cheaper wrapping detection? if (destVal > inst->memorySize * Memory::kPageSize || sizeVal > inst->memorySize * Memory::kPageSize || destVal + sizeVal > inst->memorySize * Memory::kPageSize) { trap("out of bounds memory access in memory.fill"); } uint8_t val(value.getSingleValue().geti32()); for (size_t i = 0; i < sizeVal; ++i) { inst->externalInterface->store8( inst->getFinalAddressWithoutOffset(Literal(destVal + i), 1), val); } return {}; } Flow visitTry(Try* curr) { NOTE_ENTER("Try"); try { return self()->visit(curr->body); } catch (const WasmException& e) { // If delegation is in progress and the current try is not the target of // the delegation, don't handle it and just rethrow. if (scope->currDelegateTarget.is()) { if (scope->currDelegateTarget == curr->name) { scope->currDelegateTarget.clear(); } else { throw; } } auto processCatchBody = [&](Expression* catchBody) { // Push the current exception onto the exceptionStack in case // 'rethrow's use it exceptionStack.push_back(std::make_pair(e, curr->name)); // We need to pop exceptionStack in either case: when the catch body // exits normally or when a new exception is thrown Flow ret; try { ret = self()->visit(catchBody); } catch (const WasmException&) { exceptionStack.pop_back(); throw; } exceptionStack.pop_back(); return ret; }; for (size_t i = 0; i < curr->catchTags.size(); i++) { if (curr->catchTags[i] == e.tag) { multiValues.push_back(e.values); return processCatchBody(curr->catchBodies[i]); } } if (curr->hasCatchAll()) { return processCatchBody(curr->catchBodies.back()); } if (curr->isDelegate()) { scope->currDelegateTarget = curr->delegateTarget; } // This exception is not caught by this try-catch. Rethrow it. throw; } } Flow visitRethrow(Rethrow* curr) { for (int i = exceptionStack.size() - 1; i >= 0; i--) { if (exceptionStack[i].second == curr->target) { throwException(exceptionStack[i].first); } } WASM_UNREACHABLE("rethrow"); } Flow visitPop(Pop* curr) { NOTE_ENTER("Pop"); assert(!multiValues.empty()); auto ret = multiValues.back(); assert(curr->type == ret.getType()); multiValues.pop_back(); return ret; } void trap(const char* why) override { externalInterface->trap(why); } void hostLimit(const char* why) override { externalInterface->hostLimit(why); } void throwException(const WasmException& exn) override { externalInterface->throwException(exn); } // Given a value, wrap it to a smaller given number of bytes. Literal wrapToSmallerSize(Literal value, Index bytes) { if (value.type == Type::i32) { switch (bytes) { case 1: { return value.and_(Literal(uint32_t(0xff))); } case 2: { return value.and_(Literal(uint32_t(0xffff))); } case 4: { break; } default: WASM_UNREACHABLE("unexpected bytes"); } } else { assert(value.type == Type::i64); switch (bytes) { case 1: { return value.and_(Literal(uint64_t(0xff))); } case 2: { return value.and_(Literal(uint64_t(0xffff))); } case 4: { return value.and_(Literal(uint64_t(0xffffffffUL))); } case 8: { break; } default: WASM_UNREACHABLE("unexpected bytes"); } } return value; } // Call a function, starting an invocation. Literals callFunction(Name name, const Literals& arguments) { // if the last call ended in a jump up the stack, it might have left stuff // for us to clean up here callDepth = 0; functionStack.clear(); return callFunctionInternal(name, arguments); } // Internal function call. Must be public so that callTable implementations // can use it (refactor?) Literals callFunctionInternal(Name name, const Literals& arguments) { if (callDepth > maxDepth) { externalInterface->trap("stack limit"); } auto previousCallDepth = callDepth; callDepth++; auto previousFunctionStackSize = functionStack.size(); functionStack.push_back(name); Function* function = wasm.getFunction(name); assert(function); FunctionScope scope(function, arguments, *self()); #ifdef WASM_INTERPRETER_DEBUG std::cout << "entering " << function->name << "\n with arguments:\n"; for (unsigned i = 0; i < arguments.size(); ++i) { std::cout << " $" << i << ": " << arguments[i] << '\n'; } #endif Flow flow = self()->visit(function->body); // cannot still be breaking, it means we missed our stop assert(!flow.breaking() || flow.breakTo == RETURN_FLOW); auto type = flow.getType(); if (!Type::isSubType(type, function->getResults())) { std::cerr << "calling " << function->name << " resulted in " << type << " but the function type is " << function->getResults() << '\n'; WASM_UNREACHABLE("unexpected result type"); } // may decrease more than one, if we jumped up the stack callDepth = previousCallDepth; // if we jumped up the stack, we also need to pop higher frames // TODO can FunctionScope handle this automatically? while (functionStack.size() > previousFunctionStackSize) { functionStack.pop_back(); } #ifdef WASM_INTERPRETER_DEBUG std::cout << "exiting " << function->name << " with " << flow.values << '\n'; #endif return flow.values; } // The maximum call stack depth to evaluate into. static const Index maxDepth = 250; protected: Address memorySize; // in pages void trapIfGt(uint64_t lhs, uint64_t rhs, const char* msg) { if (lhs > rhs) { std::stringstream ss; ss << msg << ": " << lhs << " > " << rhs; externalInterface->trap(ss.str().c_str()); } } template Address getFinalAddress(LS* curr, Literal ptr, Index bytes) { Address memorySizeBytes = memorySize * Memory::kPageSize; uint64_t addr = ptr.type == Type::i32 ? ptr.geti32() : ptr.geti64(); trapIfGt(curr->offset, memorySizeBytes, "offset > memory"); trapIfGt(addr, memorySizeBytes - curr->offset, "final > memory"); addr += curr->offset; trapIfGt(bytes, memorySizeBytes, "bytes > memory"); checkLoadAddress(addr, bytes); return addr; } template Address getFinalAddress(LS* curr, Literal ptr) { return getFinalAddress(curr, ptr, curr->bytes); } Address getFinalAddressWithoutOffset(Literal ptr, Index bytes) { uint64_t addr = ptr.type == Type::i32 ? ptr.geti32() : ptr.geti64(); checkLoadAddress(addr, bytes); return addr; } void checkLoadAddress(Address addr, Index bytes) { Address memorySizeBytes = memorySize * Memory::kPageSize; trapIfGt(addr, memorySizeBytes - bytes, "highest > memory"); } void checkAtomicAddress(Address addr, Index bytes) { checkLoadAddress(addr, bytes); // Unaligned atomics trap. if (bytes > 1) { if (addr & (bytes - 1)) { externalInterface->trap("unaligned atomic operation"); } } } Literal doAtomicLoad(Address addr, Index bytes, Type type) { checkAtomicAddress(addr, bytes); Const ptr; ptr.value = Literal(int32_t(addr)); ptr.type = Type::i32; Load load; load.bytes = bytes; // When an atomic loads a partial number of bytes for the type, it is // always an unsigned extension. load.signed_ = false; load.align = bytes; load.isAtomic = true; // understatement load.ptr = &ptr; load.type = type; return externalInterface->load(&load, addr); } void doAtomicStore(Address addr, Index bytes, Literal toStore) { checkAtomicAddress(addr, bytes); Const ptr; ptr.value = Literal(int32_t(addr)); ptr.type = Type::i32; Const value; value.value = toStore; value.type = toStore.type; Store store; store.bytes = bytes; store.align = bytes; store.isAtomic = true; // understatement store.ptr = &ptr; store.value = &value; store.valueType = value.type; return externalInterface->store(&store, addr, toStore); } ExternalInterface* externalInterface; std::map> linkedInstances; }; class ModuleRunner : public ModuleRunnerBase { public: ModuleRunner( Module& wasm, ExternalInterface* externalInterface, std::map> linkedInstances = {}) : ModuleRunnerBase(wasm, externalInterface, linkedInstances) {} }; } // namespace wasm #endif // wasm_wasm_interpreter_h binaryen-version_108/src/wasm-io.h000066400000000000000000000074161423707623100172710ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Abstracts reading and writing, supporting both text and binary. // #ifndef wasm_wasm_io_h #define wasm_wasm_io_h #include "parsing.h" #include "support/file.h" #include "wasm.h" namespace wasm { class ModuleIOBase { protected: bool debugInfo; public: // Whether we support debug info (the names section). void setDebugInfo(bool debugInfo_) { debugInfo = debugInfo_; } }; class ModuleReader : public ModuleIOBase { public: // Reading defaults to loading the names section. Name section info is used in // various internal ways that we do not opt-in to currently. ModuleReader() { setDebugInfo(true); } // If DWARF support is enabled, we track the locations of all IR nodes in // the binary, so that we can update DWARF sections later when writing. void setDWARF(bool DWARF_) { DWARF = DWARF_; } void setProfile(IRProfile profile_) { profile = profile_; } // TODO: add support for this in the text format as well void setSkipFunctionBodies(bool skipFunctionBodies_) { skipFunctionBodies = skipFunctionBodies_; } // read text void readText(std::string filename, Module& wasm); // read binary void readBinary(std::string filename, Module& wasm, std::string sourceMapFilename = ""); // read text or binary, checking the contents for what it is. If `filename` is // empty, read from stdin. void read(std::string filename, Module& wasm, std::string sourceMapFilename = ""); // check whether a file is a wasm binary bool isBinaryFile(std::string filename); private: bool DWARF = false; IRProfile profile = IRProfile::Normal; bool skipFunctionBodies = false; void readStdin(Module& wasm, std::string sourceMapFilename); void readBinaryData(std::vector& input, Module& wasm, std::string sourceMapFilename); }; class ModuleWriter : public ModuleIOBase { bool binary = true; // TODO: Remove `emitModuleName`. See the comment in wasm-binary.h bool emitModuleName = false; std::string symbolMap; std::string sourceMapFilename; std::string sourceMapUrl; public: // Writing defaults to not storing the names section. Storing it is a user- // observable fact that must be opted into. ModuleWriter() { setDebugInfo(false); } void setBinary(bool binary_) { binary = binary_; } void setSymbolMap(std::string symbolMap_) { symbolMap = symbolMap_; } void setSourceMapFilename(std::string sourceMapFilename_) { sourceMapFilename = sourceMapFilename_; } void setSourceMapUrl(std::string sourceMapUrl_) { sourceMapUrl = sourceMapUrl_; } void setEmitModuleName(bool set) { emitModuleName = set; } // write text void writeText(Module& wasm, Output& output); void writeText(Module& wasm, std::string filename); // write binary void writeBinary(Module& wasm, Output& output); void writeBinary(Module& wasm, std::string filename); // write text or binary, defaulting to binary unless setBinary(false), // and unless there is no output file (in which case we write text // to stdout). void write(Module& wasm, Output& output); void write(Module& wasm, std::string filename); }; } // namespace wasm #endif // wasm_wasm_io_h binaryen-version_108/src/wasm-module-building.h000066400000000000000000000252121423707623100217340ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_wasm_module_building_h #define wasm_wasm_module_building_h #include "pass.h" #include #include namespace wasm { #ifdef BINARYEN_THREAD_DEBUG static std::mutex debug; #define DEBUG_THREAD(x) \ { \ std::lock_guard lock(debug); \ std::cerr << "[OptimizingIncrementalModuleBuilder Threading (thread: " \ << std::this_thread::get_id() << ")] " << x; \ std::cerr << '\n'; \ } #else #define DEBUG_THREAD(x) #endif // // OptimizingIncrementalModuleBuilder // // Helps build wasm modules efficiently. If you build a module by // adding function by function, and you want to optimize them, this class // starts optimizing using worker threads *while you are still adding*. // It runs function optimization passes at that time. This does not // run global optimization after that by default, but you can do that // to by calling optimizeGlobally(), which runs the the global post-passes // (we can't run the pre-passes, as they must be run before function // passes, and no such time is possible here given that we receive // functions one by one and optimize them). // // This might also be faster than normal module optimization since it // runs all passes on each function, then goes on to the next function // which is better for data locality. // // Usage: Create an instance, passing it the module and the total // number of functions. Then call addFunction as you have // new functions to add (this also adds it to the module). Finally, // call finish() when all functions have been added. // // This avoids locking by using atomics. We allocate an array of nullptrs // that represent all the functions, and as we add a function, we place it // at the next index. Each worker will read from the start to the end, // and when a non-nullptr is found, the worker optimizes that function and // nulls it. There is also an end marker that is not nullptr nor the address of // a valid function, which represents that beyond this point we have not // yet filled in. In other words, // * the main thread fills everything with the end marker // * the main thread transforms a marker entry into a function // * workers pause when they see the marker // * workers skip over nullptrs // * workers transform functions into nullptrs, and optimize them // * we keep an atomic count of the number of active workers and // the number of optimized functions. // * after adding a function, the main thread notifys up workers if // it calculates there is work for them. // * a lock is used for going to sleep and waking up. // Locking should be rare, as optimization is // generally slower than generation; in the optimal case, we never // lock beyond the first step, and all further work is lock-free. // // N.B.: Optimizing functions in parallel with adding functions is possible, // but the rest of the global state of the module should be fixed, // such as globals, imports, etc. Function-parallel optimization passes // may read (but not modify) those fields. class OptimizingIncrementalModuleBuilder { Module* wasm; uint32_t numFunctions; PassOptions passOptions; std::function addPrePasses; Function* endMarker; std::atomic* list; uint32_t nextFunction; // only used on main thread uint32_t numWorkers; std::vector> threads; std::atomic liveWorkers, activeWorkers, availableFuncs, finishedFuncs; std::mutex mutex; std::condition_variable condition; bool finishing; bool debug; bool validateGlobally; public: // numFunctions must be equal to the number of functions allocated, or higher. // Knowing this bounds helps avoid locking. OptimizingIncrementalModuleBuilder( Module* wasm, Index numFunctions, PassOptions passOptions, std::function addPrePasses, bool debug, bool validateGlobally) : wasm(wasm), numFunctions(numFunctions), passOptions(passOptions), addPrePasses(addPrePasses), endMarker(nullptr), list(nullptr), nextFunction(0), numWorkers(0), liveWorkers(0), activeWorkers(0), availableFuncs(0), finishedFuncs(0), finishing(false), debug(debug), validateGlobally(validateGlobally) { if (!useWorkers()) { // if we shouldn't use threads, don't return; } // prepare work list endMarker = new Function(); list = new std::atomic[numFunctions]; for (uint32_t i = 0; i < numFunctions; i++) { list[i].store(endMarker); } // create workers DEBUG_THREAD("creating workers"); numWorkers = ThreadPool::getNumCores(); assert(numWorkers >= 1); // worth it to use threads liveWorkers.store(0); activeWorkers.store(0); // TODO: one less, and add it at the very end, to not compete with main // thread? for (uint32_t i = 0; i < numWorkers; i++) { createWorker(); } waitUntilAllReady(); DEBUG_THREAD("workers are ready"); // prepare the rest of the initial state availableFuncs.store(0); finishedFuncs.store(0); } ~OptimizingIncrementalModuleBuilder() { delete[] list; delete endMarker; } bool useWorkers() { return numFunctions > 0 && !debug && ThreadPool::getNumCores() > 1 && !PassRunner::getPassDebug(); } // Add a function to the module, and to be optimized void addFunction(Function* func) { wasm->addFunction(func); if (!useWorkers()) { return; // we optimize at the end in that case } queueFunction(func); // notify workers if needed auto notify = availableFuncs.load(); for (uint32_t i = 0; i < notify; i++) { notifyWorker(); } } // All functions have been added, block until all are optimized, and then do // global optimizations. When this returns, the module is ready and optimized. void finish() { if (!useWorkers()) { // optimize each function now that we are done adding functions, // then optimize globally PassRunner passRunner(wasm, passOptions); if (debug) { passRunner.setDebug(true); passRunner.setValidateGlobally(validateGlobally); } addPrePasses(passRunner); passRunner.addDefaultFunctionOptimizationPasses(); passRunner.run(); } else { DEBUG_THREAD("finish()ing"); assert(nextFunction == numFunctions); notifyAllWorkers(); waitUntilAllFinished(); } // TODO: clear side thread allocators from module allocator, as these // threads were transient } private: void createWorker() { DEBUG_THREAD("create a worker"); threads.emplace_back(make_unique(workerMain, this)); } void notifyWorker() { DEBUG_THREAD("notify a worker"); std::lock_guard lock(mutex); condition.notify_one(); } void notifyAllWorkers() { DEBUG_THREAD("notify all workers"); std::lock_guard lock(mutex); condition.notify_all(); } void waitUntilAllReady() { DEBUG_THREAD("wait until all workers are ready"); std::unique_lock lock(mutex); if (liveWorkers.load() < numWorkers) { condition.wait(lock, [this]() { return liveWorkers.load() == numWorkers; }); } } void waitUntilAllFinished() { DEBUG_THREAD("wait until all workers are finished"); { std::unique_lock lock(mutex); finishing = true; if (liveWorkers.load() > 0) { condition.wait(lock, [this]() { return liveWorkers.load() == 0; }); } } DEBUG_THREAD("joining"); for (auto& thread : threads) { thread->join(); } DEBUG_THREAD("joined"); } void queueFunction(Function* func) { DEBUG_THREAD("queue function"); // TODO: if we are given more than we expected, use a slower work queue? assert(nextFunction < numFunctions); list[nextFunction++].store(func); availableFuncs++; } void optimizeGlobally() { PassRunner passRunner(wasm, passOptions); passRunner.addDefaultGlobalOptimizationPostPasses(); passRunner.run(); } // worker code void optimizeFunction(Function* func) { PassRunner passRunner(wasm, passOptions); addPrePasses(passRunner); passRunner.addDefaultFunctionOptimizationPasses(); passRunner.runOnFunction(func); } static void workerMain(OptimizingIncrementalModuleBuilder* self) { DEBUG_THREAD("workerMain"); { std::lock_guard lock(self->mutex); self->liveWorkers++; self->activeWorkers++; self->condition.notify_all(); } for (uint32_t i = 0; i < self->numFunctions; i++) { DEBUG_THREAD("workerMain iteration " << i); if (self->list[i].load() == self->endMarker) { // sleep, this entry isn't ready yet DEBUG_THREAD("workerMain sleep"); self->activeWorkers--; { std::unique_lock lock(self->mutex); // while waiting for the lock, things may have ended if (!self->finishing) { self->condition.wait(lock); } } // continue DEBUG_THREAD("workerMain continue"); self->activeWorkers++; i--; continue; } DEBUG_THREAD("workerMain exchange item"); auto* func = self->list[i].exchange(nullptr); if (func == nullptr) { DEBUG_THREAD("workerMain sees was already taken"); continue; // someone else has taken this one } // we have work to do! DEBUG_THREAD("workerMain work on " << size_t(func)); self->availableFuncs--; self->optimizeFunction(func); self->finishedFuncs++; } DEBUG_THREAD("workerMain ready to exit"); { std::lock_guard lock(self->mutex); self->liveWorkers--; self->condition.notify_all(); } DEBUG_THREAD("workerMain exiting"); } }; } // namespace wasm #endif // wasm_wasm_module_building_h binaryen-version_108/src/wasm-s-parser.h000066400000000000000000000306501423707623100204120ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Parses WebAssembly code in S-Expression format, as in .wast files // such as are in the spec test suite. // #ifndef wasm_wasm_s_parser_h #define wasm_wasm_s_parser_h #include "mixed_arena.h" #include "parsing.h" // for UniqueNameMapper. TODO: move dependency to cpp file? #include "wasm-builder.h" #include "wasm.h" namespace wasm { class SourceLocation { public: cashew::IString filename; uint32_t line; uint32_t column; SourceLocation(cashew::IString filename_, uint32_t line_, uint32_t column_ = 0) : filename(filename_), line(line_), column(column_) {} }; // // An element in an S-Expression: a list or a string // class Element { typedef ArenaVector List; bool isList_ = true; List list_; cashew::IString str_; bool dollared_; bool quoted_; public: Element(MixedArena& allocator) : list_(allocator) {} bool isList() const { return isList_; } bool isStr() const { return !isList_; } bool dollared() const { return isStr() && dollared_; } bool quoted() const { return isStr() && quoted_; } size_t line = -1; size_t col = -1; // original locations at the start/end of the S-Expression list SourceLocation* startLoc = nullptr; SourceLocation* endLoc = nullptr; // list methods List& list(); Element* operator[](unsigned i); size_t size() { return list().size(); } List::Iterator begin() { return list().begin(); } List::Iterator end() { return list().end(); } // string methods cashew::IString str() const; const char* c_str() const; Element* setString(cashew::IString str__, bool dollared__, bool quoted__); Element* setMetadata(size_t line_, size_t col_, SourceLocation* startLoc_); // comparisons bool operator==(Name name) { return isStr() && str() == name; } template bool operator!=(T t) { return !(*this == t); } // printing friend std::ostream& operator<<(std::ostream& o, Element& e); void dump(); }; // // Generic S-Expression parsing into lists // class SExpressionParser { char* input; size_t line; char* lineStart; SourceLocation* loc = nullptr; MixedArena allocator; public: // Assumes control of and modifies the input. SExpressionParser(char* input); Element* root; private: Element* parse(); void skipWhitespace(); void parseDebugLocation(); Element* parseString(); }; // // SExpressions => WebAssembly module // class SExpressionWasmBuilder { Module& wasm; MixedArena& allocator; IRProfile profile; // The main list of types declared in the module std::vector types; std::unordered_map typeIndices; std::vector functionNames; std::vector tableNames; std::vector globalNames; std::vector tagNames; int functionCounter = 0; int globalCounter = 0; int tagCounter = 0; int tableCounter = 0; int elemCounter = 0; int memoryCounter = 0; // we need to know function return types before we parse their contents std::map functionTypes; std::unordered_map debugInfoFileIndices; // Maps type indexes to a mapping of field index => name. This is not the same // as the field names stored on the wasm object, as that maps types after // their canonicalization. Canonicalization loses information, which means // that structurally identical types cannot have different names. However, // while parsing the text format we keep this mapping of type indexes to names // which does allow reading such content. std::unordered_map> fieldNames; public: // Assumes control of and modifies the input. SExpressionWasmBuilder(Module& wasm, Element& module, IRProfile profile); private: void preParseHeapTypes(Element& module); // pre-parse types and function definitions, so we know function return types // before parsing their contents void preParseFunctionType(Element& s); bool isImport(Element& curr); void preParseImports(Element& curr); void parseModuleElement(Element& curr); // function parsing state std::unique_ptr currFunction; bool brokeToAutoBlock; UniqueNameMapper nameMapper; Name getFunctionName(Element& s); Name getTableName(Element& s); Name getGlobalName(Element& s); Name getTagName(Element& s); void parseStart(Element& s) { wasm.addStart(getFunctionName(*s[1])); } // returns the next index in s size_t parseFunctionNames(Element& s, Name& name, Name& exportName); void parseFunction(Element& s, bool preParseImport = false); Type stringToType(cashew::IString str, bool allowError = false, bool prefix = false) { return stringToType(str.str, allowError, prefix); } Type stringToType(const char* str, bool allowError = false, bool prefix = false); HeapType stringToHeapType(cashew::IString str, bool prefix = false) { return stringToHeapType(str.str, prefix); } HeapType stringToHeapType(const char* str, bool prefix = false); Type elementToType(Element& s); Type stringToLaneType(const char* str); bool isType(cashew::IString str) { return stringToType(str, true) != Type::none; } HeapType getFunctionType(Name name, Element& s); public: Expression* parseExpression(Element* s) { return parseExpression(*s); } Expression* parseExpression(Element& s); Module& getModule() { return wasm; } private: Expression* makeExpression(Element& s); Expression* makeUnreachable(); Expression* makeNop(); Expression* makeBinary(Element& s, BinaryOp op); Expression* makeUnary(Element& s, UnaryOp op); Expression* makeSelect(Element& s); Expression* makeDrop(Element& s); Expression* makeMemorySize(Element& s); Expression* makeMemoryGrow(Element& s); Index getLocalIndex(Element& s); Expression* makeLocalGet(Element& s); Expression* makeLocalTee(Element& s); Expression* makeLocalSet(Element& s); Expression* makeGlobalGet(Element& s); Expression* makeGlobalSet(Element& s); Expression* makeBlock(Element& s); Expression* makeThenOrElse(Element& s); Expression* makeConst(Element& s, Type type); Expression* makeLoad(Element& s, Type type, bool isAtomic); Expression* makeStore(Element& s, Type type, bool isAtomic); Expression* makeAtomicRMWOrCmpxchg(Element& s, Type type); Expression* makeAtomicRMW(Element& s, Type type, uint8_t bytes, const char* extra); Expression* makeAtomicCmpxchg(Element& s, Type type, uint8_t bytes, const char* extra); Expression* makeAtomicWait(Element& s, Type type); Expression* makeAtomicNotify(Element& s); Expression* makeAtomicFence(Element& s); Expression* makeSIMDExtract(Element& s, SIMDExtractOp op, size_t lanes); Expression* makeSIMDReplace(Element& s, SIMDReplaceOp op, size_t lanes); Expression* makeSIMDShuffle(Element& s); Expression* makeSIMDTernary(Element& s, SIMDTernaryOp op); Expression* makeSIMDShift(Element& s, SIMDShiftOp op); Expression* makeSIMDLoad(Element& s, SIMDLoadOp op); Expression* makeSIMDLoadStoreLane(Element& s, SIMDLoadStoreLaneOp op); Expression* makeMemoryInit(Element& s); Expression* makeDataDrop(Element& s); Expression* makeMemoryCopy(Element& s); Expression* makeMemoryFill(Element& s); Expression* makePush(Element& s); Expression* makePop(Element& s); Expression* makeIf(Element& s); Expression* makeMaybeBlock(Element& s, size_t i, Type type); Expression* makeLoop(Element& s); Expression* makeCall(Element& s, bool isReturn); Expression* makeCallIndirect(Element& s, bool isReturn); template void parseOperands(Element& s, Index i, Index j, T& list) { while (i < j) { list.push_back(parseExpression(s[i])); i++; } } template void parseCallOperands(Element& s, Index i, Index j, T* call) { parseOperands(s, i, j, call->operands); } enum class LabelType { Break, Exception }; Name getLabel(Element& s, LabelType labelType = LabelType::Break); Expression* makeBreak(Element& s); Expression* makeBreakTable(Element& s); Expression* makeReturn(Element& s); Expression* makeRefNull(Element& s); Expression* makeRefIs(Element& s, RefIsOp op); Expression* makeRefFunc(Element& s); Expression* makeRefEq(Element& s); Expression* makeTableGet(Element& s); Expression* makeTableSet(Element& s); Expression* makeTableSize(Element& s); Expression* makeTableGrow(Element& s); Expression* makeTry(Element& s); Expression* makeTryOrCatchBody(Element& s, Type type, bool isTry); Expression* makeThrow(Element& s); Expression* makeRethrow(Element& s); Expression* makeTupleMake(Element& s); Expression* makeTupleExtract(Element& s); Expression* makeCallRef(Element& s, bool isReturn); Expression* makeI31New(Element& s); Expression* makeI31Get(Element& s, bool signed_); Expression* makeRefTest(Element& s); Expression* makeRefTestStatic(Element& s); Expression* makeRefCast(Element& s); Expression* makeRefCastStatic(Element& s); Expression* makeRefCastNopStatic(Element& s); Expression* makeBrOn(Element& s, BrOnOp op); Expression* makeBrOnStatic(Element& s, BrOnOp op); Expression* makeRttCanon(Element& s); Expression* makeRttSub(Element& s); Expression* makeRttFreshSub(Element& s); Expression* makeStructNew(Element& s, bool default_); Expression* makeStructNewStatic(Element& s, bool default_); Index getStructIndex(Element& type, Element& field); Expression* makeStructGet(Element& s, bool signed_ = false); Expression* makeStructSet(Element& s); Expression* makeArrayNew(Element& s, bool default_); Expression* makeArrayNewStatic(Element& s, bool default_); Expression* makeArrayInit(Element& s); Expression* makeArrayInitStatic(Element& s); Expression* makeArrayGet(Element& s, bool signed_ = false); Expression* makeArraySet(Element& s); Expression* makeArrayLen(Element& s); Expression* makeArrayCopy(Element& s); Expression* makeRefAs(Element& s, RefAsOp op); // Helper functions Type parseOptionalResultType(Element& s, Index& i); Index parseMemoryLimits(Element& s, Index i); Index parseMemoryIndex(Element& s, Index i); std::vector parseParamOrLocal(Element& s); std::vector parseParamOrLocal(Element& s, size_t& localIndex); std::vector parseResults(Element& s); HeapType parseTypeRef(Element& s); size_t parseTypeUse(Element& s, size_t startPos, HeapType& functionType, std::vector& namedParams); size_t parseTypeUse(Element& s, size_t startPos, HeapType& functionType); void stringToBinary(const char* input, size_t size, std::vector& data); void parseMemory(Element& s, bool preParseImport = false); void parseData(Element& s); void parseInnerData( Element& s, Index i, Name name, Expression* offset, bool isPassive); void parseExport(Element& s); void parseImport(Element& s); void parseGlobal(Element& s, bool preParseImport = false); void parseTable(Element& s, bool preParseImport = false); void parseElem(Element& s, Table* table = nullptr); ElementSegment* parseElemFinish(Element& s, std::unique_ptr& segment, Index i = 1, bool usesExpressions = false); // Parses something like (func ..), (array ..), (struct) HeapType parseHeapType(Element& s); void parseTag(Element& s, bool preParseImport = false); Function::DebugLocation getDebugLocation(const SourceLocation& loc); // Struct/Array instructions have an unnecessary heap type that is just for // validation (except for the case of unreachability, but that's not a problem // anyhow, we can ignore it there). That is, we also have a reference / rtt // child from which we can infer the type anyhow, and we just need to check // that type is the same. void validateHeapTypeUsingChild(Expression* child, HeapType heapType, Element& s); }; } // namespace wasm #endif // wasm_wasm_s_parser_h binaryen-version_108/src/wasm-stack.h000066400000000000000000000372621423707623100177710ustar00rootroot00000000000000/* * Copyright 2018 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_stack_h #define wasm_stack_h #include "ir/branch-utils.h" #include "ir/properties.h" #include "pass.h" #include "support/insert_ordered.h" #include "wasm-binary.h" #include "wasm-traversal.h" #include "wasm.h" namespace wasm { // Stack IR: an IR that represents code at the wasm binary format level, // that is, a stack machine. Binaryen IR is *almost* identical to this, // but as documented in README.md, there are a few differences, intended // to make Binaryen IR fast and flexible for maximal optimization. Stack // IR, on the other hand, is designed to optimize a few final things that // can only really be done when modeling the stack machine format precisely. // Currently the benefits of Stack IR are minor, less than 1% reduction in // code size. For that reason it is just a secondary IR, run optionally // after the main IR has been optimized. However, if we improve Stack IR // optimizations to a point where they have a significant impact, it's // possible that could motivate investigating replacing the main IR with Stack // IR (so that we have just a single IR). // A StackIR instance (see wasm.h) contains a linear sequence of // stack instructions. This representation is very simple: just a single vector // of all instructions, in order. // * nullptr is allowed in the vector, representing something to skip. // This is useful as a common thing optimizations do is remove instructions, // so this way we can do so without compacting the vector all the time. // Direct writing binaryen IR to binary is fast. Otherwise, StackIRGenerator // lets you optimize the Stack IR before emitting stack IR to binary (but the // cost is that the extra IR in the middle makes things 20% slower than emitting // binaryen IR to binary directly). // A Stack IR instruction. Most just directly reflect a Binaryen IR node, // but we need extra ones for certain things. class StackInst { public: StackInst(MixedArena&) {} enum Op { Basic, // an instruction directly corresponding to a non-control-flow // Binaryen IR node BlockBegin, // the beginning of a block BlockEnd, // the ending of a block IfBegin, // the beginning of a if IfElse, // the else of a if IfEnd, // the ending of a if LoopBegin, // the beginning of a loop LoopEnd, // the ending of a loop TryBegin, // the beginning of a try Catch, // the catch within a try CatchAll, // the catch_all within a try Delegate, // the delegate within a try TryEnd // the ending of a try } op; Expression* origin; // the expression this originates from // the type - usually identical to the origin type, but e.g. wasm has no // unreachable blocks, they must be none Type type; }; class BinaryInstWriter : public OverriddenVisitor { public: BinaryInstWriter(WasmBinaryWriter& parent, BufferWithRandomAccess& o, Function* func, bool sourceMap, bool DWARF) : parent(parent), o(o), func(func), sourceMap(sourceMap), DWARF(DWARF) {} void visit(Expression* curr) { if (func && !sourceMap) { parent.writeDebugLocation(curr, func); } OverriddenVisitor::visit(curr); if (func && !sourceMap) { parent.writeDebugLocationEnd(curr, func); } } #define DELEGATE(CLASS_TO_VISIT) \ void visit##CLASS_TO_VISIT(CLASS_TO_VISIT* curr); #include "wasm-delegations.def" void emitResultType(Type type); void emitIfElse(If* curr); void emitCatch(Try* curr, Index i); void emitCatchAll(Try* curr); void emitDelegate(Try* curr); // emit an end at the end of a block/loop/if/try void emitScopeEnd(Expression* curr); // emit an end at the end of a function void emitFunctionEnd(); void emitUnreachable(); void mapLocalsAndEmitHeader(); MappedLocals mappedLocals; private: void emitMemoryAccess(size_t alignment, size_t bytes, uint32_t offset); int32_t getBreakIndex(Name name); WasmBinaryWriter& parent; BufferWithRandomAccess& o; Function* func = nullptr; bool sourceMap; bool DWARF; std::vector breakStack; // The types of locals in the compact form, in order. std::vector localTypes; // type => number of locals of that type in the compact form std::unordered_map numLocalsByType; void noteLocalType(Type type); // Keeps track of the binary index of the scratch locals used to lower // tuple.extract. InsertOrderedMap scratchLocals; void countScratchLocals(); void setScratchLocals(); }; // Takes binaryen IR and converts it to something else (binary or stack IR) template class BinaryenIRWriter : public Visitor> { public: BinaryenIRWriter(Function* func) : func(func) {} void write(); // visits a node, emitting the proper code for it void visit(Expression* curr); void visitBlock(Block* curr); void visitIf(If* curr); void visitLoop(Loop* curr); void visitTry(Try* curr); protected: Function* func = nullptr; private: void emit(Expression* curr) { static_cast(this)->emit(curr); } void emitHeader() { static_cast(this)->emitHeader(); } void emitIfElse(If* curr) { static_cast(this)->emitIfElse(curr); } void emitCatch(Try* curr, Index i) { static_cast(this)->emitCatch(curr, i); } void emitCatchAll(Try* curr) { static_cast(this)->emitCatchAll(curr); } void emitDelegate(Try* curr) { static_cast(this)->emitDelegate(curr); } void emitScopeEnd(Expression* curr) { static_cast(this)->emitScopeEnd(curr); } void emitFunctionEnd() { static_cast(this)->emitFunctionEnd(); } void emitUnreachable() { static_cast(this)->emitUnreachable(); } void emitDebugLocation(Expression* curr) { static_cast(this)->emitDebugLocation(curr); } void visitPossibleBlockContents(Expression* curr); }; template void BinaryenIRWriter::write() { assert(func && "BinaryenIRWriter: function is not set"); emitHeader(); visitPossibleBlockContents(func->body); emitFunctionEnd(); } // emits a node, but if it is a block with no name, emit a list of its contents template void BinaryenIRWriter::visitPossibleBlockContents(Expression* curr) { auto* block = curr->dynCast(); if (!block || BranchUtils::BranchSeeker::has(block, block->name)) { visit(curr); return; } for (auto* child : block->list) { visit(child); // Since this child was unreachable, either this child or one of its // descendants was a source of unreachability that was actually // emitted. Subsequent children won't be reachable, so skip them. if (child->type == Type::unreachable) { break; } } } template void BinaryenIRWriter::visit(Expression* curr) { emitDebugLocation(curr); // We emit unreachable instructions that create unreachability, but not // unreachable instructions that just inherit unreachability from their // children, since the latter won't be reached. This (together with logic in // the control flow visitors) also ensures that the final instruction in each // unreachable block is a source of unreachability, which means we don't need // to emit an extra `unreachable` before the end of the block to prevent type // errors. bool hasUnreachableChild = false; for (auto* child : ValueChildIterator(curr)) { visit(child); if (child->type == Type::unreachable) { hasUnreachableChild = true; break; } } if (hasUnreachableChild) { // `curr` is not reachable, so don't emit it. return; } // Control flow requires special handling, but most instructions can be // emitted directly after their children. if (Properties::isControlFlowStructure(curr)) { Visitor::visit(curr); } else { emit(curr); } } template void BinaryenIRWriter::visitBlock(Block* curr) { auto visitChildren = [this](Block* curr, Index from) { auto& list = curr->list; while (from < list.size()) { auto* child = list[from]; visit(child); if (child->type == Type::unreachable) { break; } ++from; } }; auto afterChildren = [this](Block* curr) { emitScopeEnd(curr); if (curr->type == Type::unreachable) { // Since this block is unreachable, no instructions will be emitted after // it in its enclosing scope. That means that this block will be the last // instruction before the end of its parent scope, so its type must match // the type of its parent. But we don't have a concrete type for this // block and we don't know what type its parent expects, so we can't // ensure the types match. To work around this, we insert an `unreachable` // instruction after every unreachable control flow structure and depend // on its polymorphic behavior to paper over any type mismatches. emitUnreachable(); } }; // Handle very deeply nested blocks in the first position efficiently, // avoiding heavy recursion. We only start to do this if we see it will help // us (to avoid allocation of the vector). if (!curr->list.empty() && curr->list[0]->is()) { std::vector parents; Block* child; while (!curr->list.empty() && (child = curr->list[0]->dynCast())) { parents.push_back(curr); emit(curr); curr = child; } // Emit the current block, which does not have a block as a child in the // first position. emit(curr); visitChildren(curr, 0); afterChildren(curr); bool childUnreachable = curr->type == Type::unreachable; // Finish the later parts of all the parent blocks. while (!parents.empty()) { auto* parent = parents.back(); parents.pop_back(); if (!childUnreachable) { visitChildren(parent, 1); } afterChildren(parent); childUnreachable = parent->type == Type::unreachable; } return; } // Simple case of not having a nested block in the first position. emit(curr); visitChildren(curr, 0); afterChildren(curr); } template void BinaryenIRWriter::visitIf(If* curr) { emit(curr); visitPossibleBlockContents(curr->ifTrue); if (curr->ifFalse) { emitIfElse(curr); visitPossibleBlockContents(curr->ifFalse); } emitScopeEnd(curr); if (curr->type == Type::unreachable) { // We already handled the case of the condition being unreachable in // `visit`. Otherwise, we may still be unreachable, if we are an if-else // with both sides unreachable. Just like with blocks, we emit an extra // `unreachable` to work around potential type mismatches. assert(curr->ifFalse); emitUnreachable(); } } template void BinaryenIRWriter::visitLoop(Loop* curr) { emit(curr); visitPossibleBlockContents(curr->body); emitScopeEnd(curr); if (curr->type == Type::unreachable) { // we emitted a loop without a return type, so it must not be consumed emitUnreachable(); } } template void BinaryenIRWriter::visitTry(Try* curr) { emit(curr); visitPossibleBlockContents(curr->body); for (Index i = 0; i < curr->catchTags.size(); i++) { emitCatch(curr, i); visitPossibleBlockContents(curr->catchBodies[i]); } if (curr->hasCatchAll()) { emitCatchAll(curr); visitPossibleBlockContents(curr->catchBodies.back()); } if (curr->isDelegate()) { emitDelegate(curr); // Note that when we emit a delegate we do not need to also emit a scope // ending, as the delegate ends the scope. } else { emitScopeEnd(curr); } if (curr->type == Type::unreachable) { emitUnreachable(); } } // Binaryen IR to binary writer class BinaryenIRToBinaryWriter : public BinaryenIRWriter { public: BinaryenIRToBinaryWriter(WasmBinaryWriter& parent, BufferWithRandomAccess& o, Function* func = nullptr, bool sourceMap = false, bool DWARF = false) : BinaryenIRWriter(func), parent(parent), writer(parent, o, func, sourceMap, DWARF), sourceMap(sourceMap) {} void visit(Expression* curr) { BinaryenIRWriter::visit(curr); } void emit(Expression* curr) { writer.visit(curr); } void emitHeader() { if (func->prologLocation.size()) { parent.writeDebugLocation(*func->prologLocation.begin()); } writer.mapLocalsAndEmitHeader(); } void emitIfElse(If* curr) { writer.emitIfElse(curr); } void emitCatch(Try* curr, Index i) { writer.emitCatch(curr, i); } void emitCatchAll(Try* curr) { writer.emitCatchAll(curr); } void emitDelegate(Try* curr) { writer.emitDelegate(curr); } void emitScopeEnd(Expression* curr) { writer.emitScopeEnd(curr); } void emitFunctionEnd() { if (func->epilogLocation.size()) { parent.writeDebugLocation(*func->epilogLocation.begin()); } writer.emitFunctionEnd(); } void emitUnreachable() { writer.emitUnreachable(); } void emitDebugLocation(Expression* curr) { if (sourceMap) { parent.writeDebugLocation(curr, func); } } MappedLocals& getMappedLocals() { return writer.mappedLocals; } private: WasmBinaryWriter& parent; BinaryInstWriter writer; bool sourceMap; }; // Binaryen IR to stack IR converter // Queues the expressions linearly in Stack IR (SIR) class StackIRGenerator : public BinaryenIRWriter { public: StackIRGenerator(Module& module, Function* func) : BinaryenIRWriter(func), module(module) {} void emit(Expression* curr); void emitScopeEnd(Expression* curr); void emitHeader() {} void emitIfElse(If* curr) { stackIR.push_back(makeStackInst(StackInst::IfElse, curr)); } void emitCatch(Try* curr, Index i) { stackIR.push_back(makeStackInst(StackInst::Catch, curr)); } void emitCatchAll(Try* curr) { stackIR.push_back(makeStackInst(StackInst::CatchAll, curr)); } void emitDelegate(Try* curr) { stackIR.push_back(makeStackInst(StackInst::Delegate, curr)); } void emitFunctionEnd() {} void emitUnreachable() { stackIR.push_back(makeStackInst(Builder(module).makeUnreachable())); } void emitDebugLocation(Expression* curr) {} StackIR& getStackIR() { return stackIR; } private: StackInst* makeStackInst(StackInst::Op op, Expression* origin); StackInst* makeStackInst(Expression* origin) { return makeStackInst(StackInst::Basic, origin); } Module& module; StackIR stackIR; // filled in write() }; // Stack IR to binary writer class StackIRToBinaryWriter { public: StackIRToBinaryWriter(WasmBinaryWriter& parent, BufferWithRandomAccess& o, Function* func) : writer(parent, o, func, false /* sourceMap */, false /* DWARF */), func(func) {} void write(); MappedLocals& getMappedLocals() { return writer.mappedLocals; } private: BinaryInstWriter writer; Function* func; }; } // namespace wasm #endif // wasm_stack_h binaryen-version_108/src/wasm-traversal.h000066400000000000000000000400571423707623100206630ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // WebAssembly AST visitor. Useful for anything that wants to do something // different for each AST node type, like printing, interpreting, etc. // // This class is specifically designed as a template to avoid virtual function // call overhead. To write a visitor, derive from this class as follows: // // struct MyVisitor : public WasmVisitor { .. } // #ifndef wasm_wasm_traversal_h #define wasm_wasm_traversal_h #include "support/small_vector.h" #include "support/threads.h" #include "wasm.h" namespace wasm { // A generic visitor, defaulting to doing nothing on each visit template struct Visitor { // Expression visitors #define DELEGATE(CLASS_TO_VISIT) \ ReturnType visit##CLASS_TO_VISIT(CLASS_TO_VISIT* curr) { \ return ReturnType(); \ } #include "wasm-delegations.def" // Module-level visitors ReturnType visitExport(Export* curr) { return ReturnType(); } ReturnType visitGlobal(Global* curr) { return ReturnType(); } ReturnType visitFunction(Function* curr) { return ReturnType(); } ReturnType visitTable(Table* curr) { return ReturnType(); } ReturnType visitElementSegment(ElementSegment* curr) { return ReturnType(); } ReturnType visitMemory(Memory* curr) { return ReturnType(); } ReturnType visitTag(Tag* curr) { return ReturnType(); } ReturnType visitModule(Module* curr) { return ReturnType(); } ReturnType visit(Expression* curr) { assert(curr); switch (curr->_id) { #define DELEGATE(CLASS_TO_VISIT) \ case Expression::Id::CLASS_TO_VISIT##Id: \ return static_cast(this)->visit##CLASS_TO_VISIT( \ static_cast(curr)) #include "wasm-delegations.def" default: WASM_UNREACHABLE("unexpected expression type"); } } }; // A visitor which must be overridden for each visitor that is reached. template struct OverriddenVisitor { // Expression visitors, which must be overridden #define DELEGATE(CLASS_TO_VISIT) \ ReturnType visit##CLASS_TO_VISIT(CLASS_TO_VISIT* curr) { \ static_assert( \ &SubType::visit##CLASS_TO_VISIT != \ &OverriddenVisitor::visit##CLASS_TO_VISIT, \ "Derived class must implement visit" #CLASS_TO_VISIT); \ WASM_UNREACHABLE("Derived class must implement visit" #CLASS_TO_VISIT); \ } #include "wasm-delegations.def" ReturnType visit(Expression* curr) { assert(curr); switch (curr->_id) { #define DELEGATE(CLASS_TO_VISIT) \ case Expression::Id::CLASS_TO_VISIT##Id: \ return static_cast(this)->visit##CLASS_TO_VISIT( \ static_cast(curr)) #include "wasm-delegations.def" default: WASM_UNREACHABLE("unexpected expression type"); } } }; // Visit with a single unified visitor, called on every node, instead of // separate visit* per node template struct UnifiedExpressionVisitor : public Visitor { // called on each node ReturnType visitExpression(Expression* curr) { return ReturnType(); } // redirects #define DELEGATE(CLASS_TO_VISIT) \ ReturnType visit##CLASS_TO_VISIT(CLASS_TO_VISIT* curr) { \ return static_cast(this)->visitExpression(curr); \ } #include "wasm-delegations.def" }; // // Base class for all WasmWalkers, which can traverse an AST // and provide the option to replace nodes while doing so. // // Subclass and implement the visit*() // calls to run code on different node types. // template struct Walker : public VisitorType { // Useful methods for visitor implementions // Replace the current node. You can call this in your visit*() methods. // Note that the visit*() for the result node is not called for you (i.e., // just one visit*() method is called by the traversal; if you replace a node, // and you want to process the output, you must do that explicitly). Expression* replaceCurrent(Expression* expression) { // Copy debug info, if present. if (currFunction) { auto& debugLocations = currFunction->debugLocations; if (!debugLocations.empty()) { auto* curr = getCurrent(); auto iter = debugLocations.find(curr); if (iter != debugLocations.end()) { auto location = iter->second; debugLocations.erase(iter); debugLocations[expression] = location; } } } return *replacep = expression; } Expression* getCurrent() { return *replacep; } Expression** getCurrentPointer() { return replacep; } // Get the current module Module* getModule() { return currModule; } // Get the current function Function* getFunction() { return currFunction; } // Walk starting void walkGlobal(Global* global) { walk(global->init); static_cast(this)->visitGlobal(global); } void walkFunction(Function* func) { setFunction(func); static_cast(this)->doWalkFunction(func); static_cast(this)->visitFunction(func); setFunction(nullptr); } void walkTag(Tag* tag) { static_cast(this)->visitTag(tag); } void walkFunctionInModule(Function* func, Module* module) { setModule(module); setFunction(func); static_cast(this)->doWalkFunction(func); static_cast(this)->visitFunction(func); setFunction(nullptr); setModule(nullptr); } // override this to provide custom functionality void doWalkFunction(Function* func) { walk(func->body); } void walkElementSegment(ElementSegment* segment) { if (segment->table.is()) { walk(segment->offset); } for (auto* expr : segment->data) { walk(expr); } static_cast(this)->visitElementSegment(segment); } void walkTable(Table* table) { static_cast(this)->visitTable(table); } void walkMemory(Memory* memory) { for (auto& segment : memory->segments) { if (!segment.isPassive) { walk(segment.offset); } } static_cast(this)->visitMemory(memory); } void walkModule(Module* module) { setModule(module); static_cast(this)->doWalkModule(module); static_cast(this)->visitModule(module); setModule(nullptr); } // override this to provide custom functionality void doWalkModule(Module* module) { // Dispatch statically through the SubType. SubType* self = static_cast(this); for (auto& curr : module->exports) { self->visitExport(curr.get()); } for (auto& curr : module->globals) { if (curr->imported()) { self->visitGlobal(curr.get()); } else { self->walkGlobal(curr.get()); } } for (auto& curr : module->functions) { if (curr->imported()) { self->visitFunction(curr.get()); } else { self->walkFunction(curr.get()); } } for (auto& curr : module->tags) { if (curr->imported()) { self->visitTag(curr.get()); } else { self->walkTag(curr.get()); } } for (auto& curr : module->tables) { self->walkTable(curr.get()); } for (auto& curr : module->elementSegments) { self->walkElementSegment(curr.get()); } self->walkMemory(&module->memory); } // Walks module-level code, that is, code that is not in functions. void walkModuleCode(Module* module) { // Dispatch statically through the SubType. SubType* self = static_cast(this); for (auto& curr : module->globals) { if (!curr->imported()) { self->walk(curr->init); } } for (auto& curr : module->elementSegments) { if (curr->offset) { self->walk(curr->offset); } for (auto* item : curr->data) { self->walk(item); } } } // Walk implementation. We don't use recursion as ASTs may be highly // nested. // Tasks receive the this pointer and a pointer to the pointer to operate on typedef void (*TaskFunc)(SubType*, Expression**); struct Task { TaskFunc func; Expression** currp; Task() {} Task(TaskFunc func, Expression** currp) : func(func), currp(currp) {} }; void pushTask(TaskFunc func, Expression** currp) { assert(*currp); stack.emplace_back(func, currp); } void maybePushTask(TaskFunc func, Expression** currp) { if (*currp) { stack.emplace_back(func, currp); } } Task popTask() { auto ret = stack.back(); stack.pop_back(); return ret; } void walk(Expression*& root) { assert(stack.size() == 0); pushTask(SubType::scan, &root); while (stack.size() > 0) { auto task = popTask(); replacep = task.currp; assert(*task.currp); task.func(static_cast(this), task.currp); } } // subclasses implement this to define the proper order of execution static void scan(SubType* self, Expression** currp) { abort(); } // task hooks to call visitors #define DELEGATE(CLASS_TO_VISIT) \ static void doVisit##CLASS_TO_VISIT(SubType* self, Expression** currp) { \ self->visit##CLASS_TO_VISIT((*currp)->cast()); \ } #include "wasm-delegations.def" void setModule(Module* module) { currModule = module; } void setFunction(Function* func) { currFunction = func; } private: // the address of the current node, used to replace it Expression** replacep = nullptr; SmallVector stack; // stack of tasks Function* currFunction = nullptr; // current function being processed Module* currModule = nullptr; // current module being processed }; // Walks in post-order, i.e., children first. When there isn't an obvious // order to operands, we follow them in order of execution. template> struct PostWalker : public Walker { static void scan(SubType* self, Expression** currp) { Expression* curr = *currp; #define DELEGATE_ID curr->_id #define DELEGATE_START(id) \ self->pushTask(SubType::doVisit##id, currp); \ auto* cast = curr->cast(); \ WASM_UNUSED(cast); #define DELEGATE_GET_FIELD(id, field) cast->field #define DELEGATE_FIELD_CHILD(id, field) \ self->pushTask(SubType::scan, &cast->field); #define DELEGATE_FIELD_OPTIONAL_CHILD(id, field) \ self->maybePushTask(SubType::scan, &cast->field); #define DELEGATE_FIELD_INT(id, field) #define DELEGATE_FIELD_INT_ARRAY(id, field) #define DELEGATE_FIELD_LITERAL(id, field) #define DELEGATE_FIELD_NAME(id, field) #define DELEGATE_FIELD_NAME_VECTOR(id, field) #define DELEGATE_FIELD_SCOPE_NAME_DEF(id, field) #define DELEGATE_FIELD_SCOPE_NAME_USE(id, field) #define DELEGATE_FIELD_SCOPE_NAME_USE_VECTOR(id, field) #define DELEGATE_FIELD_TYPE(id, field) #define DELEGATE_FIELD_HEAPTYPE(id, field) #define DELEGATE_FIELD_ADDRESS(id, field) #include "wasm-delegations-fields.def" } }; // Stacks of expressions tend to be limited in size (although, sometimes // super-nested blocks exist for br_table). typedef SmallVector ExpressionStack; // Traversal with a control-flow stack. template> struct ControlFlowWalker : public PostWalker { ControlFlowWalker() = default; ExpressionStack controlFlowStack; // contains blocks, loops, and ifs // Uses the control flow stack to find the target of a break to a name Expression* findBreakTarget(Name name) { assert(!controlFlowStack.empty()); Index i = controlFlowStack.size() - 1; while (true) { auto* curr = controlFlowStack[i]; if (Block* block = curr->template dynCast()) { if (name == block->name) { return curr; } } else if (Loop* loop = curr->template dynCast()) { if (name == loop->name) { return curr; } } else { // an if or try, ignorable assert(curr->template is() || curr->template is()); } if (i == 0) { return nullptr; } i--; } } static void doPreVisitControlFlow(SubType* self, Expression** currp) { self->controlFlowStack.push_back(*currp); } static void doPostVisitControlFlow(SubType* self, Expression** currp) { // note that we might be popping something else, as we may have been // replaced self->controlFlowStack.pop_back(); } static void scan(SubType* self, Expression** currp) { auto* curr = *currp; switch (curr->_id) { case Expression::Id::BlockId: case Expression::Id::IfId: case Expression::Id::LoopId: case Expression::Id::TryId: { self->pushTask(SubType::doPostVisitControlFlow, currp); break; } default: { } } PostWalker::scan(self, currp); switch (curr->_id) { case Expression::Id::BlockId: case Expression::Id::IfId: case Expression::Id::LoopId: case Expression::Id::TryId: { self->pushTask(SubType::doPreVisitControlFlow, currp); break; } default: { } } } }; // Traversal with an expression stack. template> struct ExpressionStackWalker : public PostWalker { ExpressionStackWalker() = default; ExpressionStack expressionStack; // Uses the control flow stack to find the target of a break to a name Expression* findBreakTarget(Name name) { assert(!expressionStack.empty()); Index i = expressionStack.size() - 1; while (true) { auto* curr = expressionStack[i]; if (Block* block = curr->template dynCast()) { if (name == block->name) { return curr; } } else if (Loop* loop = curr->template dynCast()) { if (name == loop->name) { return curr; } } if (i == 0) { return nullptr; } i--; } } Expression* getParent() { if (expressionStack.size() == 1) { return nullptr; } assert(expressionStack.size() >= 2); return expressionStack[expressionStack.size() - 2]; } static void doPreVisit(SubType* self, Expression** currp) { self->expressionStack.push_back(*currp); } static void doPostVisit(SubType* self, Expression** currp) { self->expressionStack.pop_back(); } static void scan(SubType* self, Expression** currp) { self->pushTask(SubType::doPostVisit, currp); PostWalker::scan(self, currp); self->pushTask(SubType::doPreVisit, currp); } Expression* replaceCurrent(Expression* expression) { PostWalker::replaceCurrent(expression); // also update the stack expressionStack.back() = expression; return expression; } }; } // namespace wasm #endif // wasm_wasm_traversal_h binaryen-version_108/src/wasm-type-printing.h000066400000000000000000000063451423707623100214730ustar00rootroot00000000000000/* * Copyright 2022 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_wasm_type_printing_h #define wasm_wasm_type_printing_h #include #include #include #include "support/name.h" #include "support/utilities.h" #include "wasm-type.h" namespace wasm { // CRTP base that all other type name generators should subclass. Provides the // ability to use the generator as a function to print Types and HeapTypes to // streams. template struct TypeNameGeneratorBase { TypeNames getNames(HeapType type) { static_assert(&TypeNameGeneratorBase::getNames != &Subclass::getNames, "Derived class must implement getNames"); WASM_UNREACHABLE("Derived class must implement getNames"); } HeapType::Printed operator()(HeapType type) { return type.print( [&](HeapType ht) { return static_cast(this)->getNames(ht); }); } Type::Printed operator()(Type type) { return type.print( [&](HeapType ht) { return static_cast(this)->getNames(ht); }); } }; // Generates names like "func.0", "struct.1", "array.2", etc. Struct fields are // not given names. struct DefaultTypeNameGenerator : TypeNameGeneratorBase { size_t funcCount = 0; size_t structCount = 0; size_t arrayCount = 0; // Cached names for types that have already been seen. std::unordered_map nameCache; TypeNames getNames(HeapType type); }; // Generates names based on the indices of types in some collection, falling // back to the given FallbackGenerator when encountering a type not in the // collection. Struct fields are not given names. template struct IndexedTypeNameGenerator : TypeNameGeneratorBase> { DefaultTypeNameGenerator defaultGenerator; FallbackGenerator& fallback; std::unordered_map names; template IndexedTypeNameGenerator(T& types, FallbackGenerator& fallback, const std::string& prefix = "") : fallback(fallback) { for (size_t i = 0; i < types.size(); ++i) { names.insert({types[i], {prefix + std::to_string(i), {}}}); } } template IndexedTypeNameGenerator(T& types, const std::string& prefix = "") : IndexedTypeNameGenerator(types, defaultGenerator, prefix) {} TypeNames getNames(HeapType type) { if (auto it = names.find(type); it != names.end()) { return it->second; } else { return fallback.getNames(type); } } }; } // namespace wasm #endif // wasm_wasm_type_printing_h binaryen-version_108/src/wasm-type.h000066400000000000000000000652051423707623100176430ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef wasm_wasm_type_h #define wasm_wasm_type_h #include #include #include #include #include #include #include "support/index.h" #include "support/name.h" #include "support/parent_index_iterator.h" #include "wasm-features.h" // TODO: At various code locations we were assuming that single types are basic // types, but this is going to change with the introduction of the compound // Signature, Struct and Array types that will be single but not basic. To // prepare for this change, the following macro marks affected code locations. #define TODO_SINGLE_COMPOUND(type) \ assert(!type.isTuple() && "Unexpected tuple type"); \ assert(type.isBasic() && "TODO: handle compound types"); namespace wasm { enum class TypeSystem { Equirecursive, Nominal, Isorecursive, }; // This should only ever be called before any Types or HeapTypes have been // created. The default system is equirecursive. void setTypeSystem(TypeSystem system); TypeSystem getTypeSystem(); // Dangerous! Frees all types and heap types that have ever been created and // resets the type system's internal state. This is only really meant to be used // for tests. void destroyAllTypesForTestingPurposesOnly(); // The types defined in this file. All of them are small and typically passed by // value except for `Tuple` and `Struct`, which may own an unbounded amount of // data. class Type; class HeapType; class RecGroup; struct Tuple; struct Signature; struct Field; struct Struct; struct Array; struct Rtt; enum Nullability { NonNullable, Nullable }; enum Mutability { Immutable, Mutable }; // HeapType name information used for printing. struct TypeNames { // The name of the type. Name name; // For a Struct, names of fields. std::unordered_map fieldNames; }; // Used to generate HeapType names. using HeapTypeNameGenerator = std::function; // The type used for interning IDs in the public interfaces of Type and // HeapType. using TypeID = uint64_t; class Type { // The `id` uniquely represents each type, so type equality is just a // comparison of the ids. For basic types the `id` is just the `BasicType` // enum value below, and for constructed types the `id` is the address of the // canonical representation of the type, making lookups cheap for all types. // Since `Type` is really just a single integer, it should be passed by value. // This is a uintptr_t rather than a TypeID (uint64_t) to save memory on // 32-bit platforms. uintptr_t id; public: enum BasicType : uint32_t { none, unreachable, i32, i64, f32, f64, v128, funcref, anyref, eqref, i31ref, dataref, }; static constexpr BasicType _last_basic_type = dataref; Type() : id(none) {} // BasicType can be implicitly upgraded to Type constexpr Type(BasicType id) : id(id) {} // But converting raw TypeID is more dangerous, so make it explicit explicit Type(TypeID id) : id(id) {} // Construct tuple from a list of single types Type(std::initializer_list); // Construct from tuple description Type(const Tuple&); Type(Tuple&&); // Construct from a heap type description. Also covers construction from // Signature, Struct or Array via implicit conversion to HeapType. Type(HeapType, Nullability nullable); // Construct from rtt description Type(Rtt); // Predicates // Compound Concrete // Type Basic │ Single│ // â•’â•â•â•â•â•â•â•â•â•â•â•â•â•╦â•│â•╤â•│â•╤â•│â•╤â•│â•╤â•â•â•â•â•â•â•â•• // │ none â•‘ x │ │ │ │ │ // │ unreachable â•‘ x │ │ │ │ │ // ├─────────────╫───┼───┼───┼───┤───────┤ // │ i32 â•‘ x │ │ x │ x │ I │ â” Number // │ i64 â•‘ x │ │ x │ x │ I │ │ I_nteger // │ f32 â•‘ x │ │ x │ x │ F │ │ F_loat // │ f64 â•‘ x │ │ x │ x │ F │ │ V_ector // │ v128 â•‘ x │ │ x │ x │ V │ ┘ // ├─ Aliases ───╫───┼───┼───┼───┤───────┤ // │ funcref â•‘ x │ │ x │ x │ f n │ â” Ref // │ anyref â•‘ x │ │ x │ x │ f? n │ │ f_unc // │ eqref â•‘ x │ │ x │ x │ n │ │ n_ullable // │ i31ref â•‘ x │ │ x │ x │ │ │ // │ dataref â•‘ x │ │ x │ x │ │ │ // ├─ Compound ──╫───┼───┼───┼───┤───────┤ │ // │ Ref â•‘ │ x │ x │ x │ f? n? │◄┘ // │ Tuple â•‘ │ x │ │ x │ │ // │ Rtt â•‘ │ x │ x │ x │ │ // └─────────────╨───┴───┴───┴───┴───────┘ constexpr bool isBasic() const { return id <= _last_basic_type; } constexpr bool isConcrete() const { return id >= i32; } constexpr bool isInteger() const { return id == i32 || id == i64; } constexpr bool isFloat() const { return id == f32 || id == f64; } constexpr bool isVector() const { return id == v128; }; constexpr bool isNumber() const { return id >= i32 && id <= v128; } bool isTuple() const; bool isSingle() const { return isConcrete() && !isTuple(); } bool isRef() const; bool isFunction() const; bool isData() const; // Checks whether a type is a reference and is nullable. This returns false // for a value that is not a reference, that is, for which nullability is // irrelevant. bool isNullable() const; // Checks whether a type is a reference and is non-nullable. This returns // false for a value that is not a reference, that is, for which nullability // is irrelevant. (For that reason, this is only the negation of isNullable() // on references, but both return false on non-references.) bool isNonNullable() const; bool isRtt() const; bool isStruct() const; bool isArray() const; bool isDefaultable() const; // Check if a type is either defaultable or non-nullable. This is useful in // the case where we allow non-nullable types, but we disallow other things // that are non-defaultable. For example, when GC-non-nullable references are // allowed we can have a non-nullable reference, but we cannot have any other // nondefaultable type. bool isDefaultableOrNonNullable() const; Nullability getNullability() const; private: template bool hasPredicate() { for (const auto& type : *this) { if ((type.*pred)()) { return true; } } return false; } public: bool hasVector() { return hasPredicate<&Type::isVector>(); } bool hasRef() { return hasPredicate<&Type::isRef>(); } constexpr TypeID getID() const { return id; } constexpr BasicType getBasic() const { assert(isBasic() && "Basic type expected"); return static_cast(id); } // (In)equality must be defined for both Type and BasicType because it is // otherwise ambiguous whether to convert both this and other to int or // convert other to Type. bool operator==(const Type& other) const { return id == other.id; } bool operator==(const BasicType& other) const { return id == other; } bool operator!=(const Type& other) const { return id != other.id; } bool operator!=(const BasicType& other) const { return id != other; } // Returns the type size in bytes. Only single types are supported. unsigned getByteSize() const; // Returns whether the type has a size in bytes. This is the same as whether // it can be stored in linear memory. Things like references do not have this // property, while numbers do. Tuples may or may not depending on their // contents. unsigned hasByteSize() const; // Reinterpret an integer type to a float type with the same size and vice // versa. Only single integer and float types are supported. Type reinterpret() const; // Returns the feature set required to use this type. FeatureSet getFeatures() const; // Returns the tuple, assuming that this is a tuple type. Note that it is // normally simpler to use operator[] and size() on the Type directly. const Tuple& getTuple() const; // Gets the heap type corresponding to this type, assuming that it is a // reference or Rtt type. HeapType getHeapType() const; // Gets the Rtt for this type, assuming that it is an Rtt type. Rtt getRtt() const; // Returns a number type based on its size in bytes and whether it is a float // type. static Type get(unsigned byteSize, bool float_); // Returns true if left is a subtype of right. Subtype includes itself. static bool isSubType(Type left, Type right); // Return the ordered HeapType children, looking through child Types. std::vector getHeapTypeChildren(); // Computes the least upper bound from the type lattice. // If one of the type is unreachable, the other type becomes the result. If // the common supertype does not exist, returns none, a poison value. static bool hasLeastUpperBound(Type a, Type b); static Type getLeastUpperBound(Type a, Type b); template static bool hasLeastUpperBound(const T& types) { auto first = types.begin(), end = types.end(); if (first == end) { return false; } for (auto second = std::next(first); second != end;) { if (!hasLeastUpperBound(*first++, *second++)) { return false; } } return true; } template static Type getLeastUpperBound(const T& types) { auto it = types.begin(), end = types.end(); if (it == end) { return Type::none; } Type lub = *it++; for (; it != end; ++it) { lub = getLeastUpperBound(lub, *it); if (lub == Type::none) { return Type::none; } } return lub; } // Helper allowing the value of `print(...)` to be sent to an ostream. Stores // a `TypeID` because `Type` is incomplete at this point and using a reference // makes it less convenient to use. struct Printed { TypeID typeID; HeapTypeNameGenerator generateName; }; // Given a function for generating non-basic HeapType names, print this Type // to `os`.`generateName` should return the same name each time it is called // with the same HeapType and it should return different names for different // types. Printed print(HeapTypeNameGenerator generateName) { return Printed{getID(), generateName}; } std::string toString() const; size_t size() const; struct Iterator : ParentIndexIterator { using value_type = Type; using pointer = const Type*; using reference = const Type&; reference operator*() const; }; Iterator begin() const { return Iterator{{this, 0}}; } Iterator end() const { return Iterator{{this, size()}}; } std::reverse_iterator rbegin() const { return std::make_reverse_iterator(end()); } std::reverse_iterator rend() const { return std::make_reverse_iterator(begin()); } const Type& operator[](size_t i) const { return *Iterator{{this, i}}; } }; class HeapType { // Unlike `Type`, which represents the types of values on the WebAssembly // stack, `HeapType` is used to describe the structures that reference types // refer to. HeapTypes are canonicalized and interned exactly like Types and // should also be passed by value. uintptr_t id; public: enum BasicHeapType : uint32_t { func, any, eq, i31, data, }; static constexpr BasicHeapType _last_basic_type = data; // BasicHeapType can be implicitly upgraded to HeapType constexpr HeapType(BasicHeapType id) : id(id) {} // But converting raw TypeID is more dangerous, so make it explicit explicit HeapType(TypeID id) : id(id) {} // Choose an arbitrary heap type as the default. constexpr HeapType() : HeapType(func) {} // Construct a HeapType referring to the single canonical HeapType for the // given signature. In nominal mode, this is the first HeapType created with // this signature. HeapType(Signature signature); // Create a HeapType with the given structure. In equirecursive mode, this may // be the same as a previous HeapType created with the same contents. In // nominal mode, this will be a fresh type distinct from all previously // created HeapTypes. // TODO: make these explicit to differentiate them. HeapType(const Struct& struct_); HeapType(Struct&& struct_); HeapType(Array array); constexpr bool isBasic() const { return id <= _last_basic_type; } bool isFunction() const; bool isData() const; bool isSignature() const; bool isStruct() const; bool isArray() const; Signature getSignature() const; const Struct& getStruct() const; Array getArray() const; // If there is a nontrivial (i.e. non-basic) nominal supertype, return it, // else an empty optional. std::optional getSuperType() const; // Return the depth of this heap type in the nominal type hierarchy, i.e. the // number of supertypes in its supertype chain. size_t getDepth() const; // Get the recursion group for this non-basic type. RecGroup getRecGroup() const; size_t getRecGroupIndex() const; constexpr TypeID getID() const { return id; } constexpr BasicHeapType getBasic() const { assert(isBasic() && "Basic heap type expected"); return static_cast(id); } // (In)equality must be defined for both HeapType and BasicHeapType because it // is otherwise ambiguous whether to convert both this and other to int or // convert other to HeapType. bool operator==(const HeapType& other) const { return id == other.id; } bool operator==(const BasicHeapType& other) const { return id == other; } bool operator!=(const HeapType& other) const { return id != other.id; } bool operator!=(const BasicHeapType& other) const { return id != other; } // Returns true if left is a subtype of right. Subtype includes itself. static bool isSubType(HeapType left, HeapType right); // Return the ordered HeapType children, looking through child Types. std::vector getHeapTypeChildren() const; // Similar to `getHeapTypeChildren`, but also includes the supertype if it // exists. std::vector getReferencedHeapTypes() const; // Return the LUB of two HeapTypes. The LUB always exists. static HeapType getLeastUpperBound(HeapType a, HeapType b); // Helper allowing the value of `print(...)` to be sent to an ostream. Stores // a `TypeID` because `Type` is incomplete at this point and using a reference // makes it less convenient to use. struct Printed { TypeID typeID; HeapTypeNameGenerator generateName; }; // Given a function for generating HeapType names, print the definition of // this HeapType to `os`. `generateName` should return the same // name each time it is called with the same HeapType and it should return // different names for different types. Printed print(HeapTypeNameGenerator generateName) { return Printed{getID(), generateName}; } std::string toString() const; }; // A recursion group consisting of one or more HeapTypes. HeapTypes with single // members are encoded without using any additional memory, which is why // `getHeapTypes` has to return a vector by value; it might have to create one // on the fly. class RecGroup { uintptr_t id; public: explicit RecGroup(uintptr_t id) : id(id) {} constexpr TypeID getID() const { return id; } bool operator==(const RecGroup& other) const { return id == other.id; } bool operator!=(const RecGroup& other) const { return id != other.id; } size_t size() const; struct Iterator : ParentIndexIterator { using value_type = HeapType; using pointer = const HeapType*; using reference = const HeapType&; value_type operator*() const; }; Iterator begin() const { return Iterator{{this, 0}}; } Iterator end() const { return Iterator{{this, size()}}; } HeapType operator[](size_t i) const { return *Iterator{{this, i}}; } }; typedef std::vector TypeList; // Passed by reference rather than by value because it can own an unbounded // amount of data. struct Tuple { TypeList types; Tuple() : types() {} Tuple(std::initializer_list types) : types(types) { validate(); } Tuple(const TypeList& types) : types(types) { validate(); } Tuple(TypeList&& types) : types(std::move(types)) { validate(); } // Allow copies when constructing. Tuple(const Tuple& other) : types(other.types) { validate(); } // Prevent accidental copies. Tuple& operator=(const Tuple&) = delete; bool operator==(const Tuple& other) const { return types == other.types; } bool operator!=(const Tuple& other) const { return !(*this == other); } std::string toString() const; private: void validate() { #ifndef NDEBUG for (auto type : types) { assert(type.isSingle()); } #endif } }; struct Signature { Type params; Type results; Signature() : params(Type::none), results(Type::none) {} Signature(Type params, Type results) : params(params), results(results) {} bool operator==(const Signature& other) const { return params == other.params && results == other.results; } bool operator!=(const Signature& other) const { return !(*this == other); } std::string toString() const; }; struct Field { Type type; enum PackedType { not_packed, i8, i16, } packedType; // applicable iff type=i32 Mutability mutable_; // Arbitrary defaults for convenience. Field() : type(Type::i32), packedType(not_packed), mutable_(Mutable) {} Field(Type type, Mutability mutable_) : type(type), packedType(not_packed), mutable_(mutable_) {} Field(PackedType packedType, Mutability mutable_) : type(Type::i32), packedType(packedType), mutable_(mutable_) {} constexpr bool isPacked() const { if (packedType != not_packed) { assert(type == Type::i32 && "unexpected type"); return true; } return false; } bool operator==(const Field& other) const { return type == other.type && packedType == other.packedType && mutable_ == other.mutable_; } bool operator!=(const Field& other) const { return !(*this == other); } std::string toString() const; unsigned getByteSize() const; }; typedef std::vector FieldList; // Passed by reference rather than by value because it can own an unbounded // amount of data. struct Struct { FieldList fields; Struct() = default; Struct(const Struct& other) : fields(other.fields) {} Struct(const FieldList& fields) : fields(fields) {} Struct(FieldList&& fields) : fields(std::move(fields)) {} bool operator==(const Struct& other) const { return fields == other.fields; } bool operator!=(const Struct& other) const { return !(*this == other); } std::string toString() const; // Prevent accidental copies Struct& operator=(const Struct&) = delete; }; struct Array { Field element; Array() = default; Array(const Array& other) : element(other.element) {} Array(Field element) : element(element) {} bool operator==(const Array& other) const { return element == other.element; } bool operator!=(const Array& other) const { return !(*this == other); } std::string toString() const; }; struct Rtt { // An Rtt can have no depth specified static constexpr uint32_t NoDepth = -1; uint32_t depth; HeapType heapType; explicit Rtt(HeapType heapType) : depth(NoDepth), heapType(heapType) {} Rtt(uint32_t depth, HeapType heapType) : depth(depth), heapType(heapType) {} bool operator==(const Rtt& other) const { return depth == other.depth && heapType == other.heapType; } bool operator!=(const Rtt& other) const { return !(*this == other); } bool hasDepth() const { return depth != uint32_t(NoDepth); } std::string toString() const; }; // TypeBuilder - allows for the construction of recursive types. Contains a // table of `n` mutable HeapTypes and can construct temporary types that are // backed by those HeapTypes, refering to them by reference. Those temporary // types are owned by the TypeBuilder and should only be used in the // construction of HeapTypes to insert into the TypeBuilder. Temporary types // should never be used in the construction of normal Types, only other // temporary types. struct TypeBuilder { struct Impl; std::unique_ptr impl; TypeBuilder(size_t n); TypeBuilder() : TypeBuilder(0) {} ~TypeBuilder(); TypeBuilder(TypeBuilder& other) = delete; TypeBuilder& operator=(TypeBuilder&) = delete; TypeBuilder(TypeBuilder&& other); TypeBuilder& operator=(TypeBuilder&& other); // Append `n` new uninitialized HeapType slots to the end of the TypeBuilder. void grow(size_t n); // The number of HeapType slots in the TypeBuilder. size_t size(); // Sets the heap type at index `i`. May only be called before `build`. The // BasicHeapType overload may not be used in nominal mode. void setHeapType(size_t i, HeapType::BasicHeapType basic); void setHeapType(size_t i, Signature signature); void setHeapType(size_t i, const Struct& struct_); void setHeapType(size_t i, Struct&& struct_); void setHeapType(size_t i, Array array); // This is an ugly hack around the fact that temp heap types initialized with // BasicHeapTypes are not themselves considered basic, so `HeapType::isBasic` // and `HeapType::getBasic` do not work as expected with them. Call these // methods instead. bool isBasic(size_t i); HeapType::BasicHeapType getBasic(size_t i); // Gets the temporary HeapType at index `i`. This HeapType should only be used // to construct temporary Types using the methods below. HeapType getTempHeapType(size_t i); // Gets a temporary type or heap type for use in initializing the // TypeBuilder's HeapTypes. For Ref and Rtt types, the HeapType may be a // temporary HeapType owned by this builder or a canonical HeapType. Type getTempTupleType(const Tuple&); Type getTempRefType(HeapType heapType, Nullability nullable); Type getTempRttType(Rtt rtt); // In nominal mode, or for nominal types, declare the HeapType being built at // index `i` to be an immediate subtype of the HeapType being built at index // `j`. Does nothing for equirecursive types. void setSubType(size_t i, size_t j); // Create a new recursion group covering slots [i, i + length). Groups must // not overlap or go out of bounds. void createRecGroup(size_t i, size_t length); enum class ErrorReason { // There is a cycle in the supertype relation. SelfSupertype, // The declared supertype of a type is invalid. InvalidSupertype, // The declared supertype is an invalid forward reference. ForwardSupertypeReference, // A child of the type is an invalid forward reference. ForwardChildReference, }; struct Error { // The index of the type causing the failure. size_t index; ErrorReason reason; }; struct BuildResult : std::variant, Error> { operator bool() const { return bool(std::get_if>(this)); } const std::vector& operator*() const { return std::get>(*this); } const Error* getError() const { return std::get_if(this); } }; // Returns all of the newly constructed heap types. May only be called once // all of the heap types have been initialized with `setHeapType`. In nominal // mode, all of the constructed HeapTypes will be fresh and distinct. In // nominal mode, will also produce a fatal error if the declared subtype // relationships are not valid. BuildResult build(); // Utility for ergonomically using operator[] instead of explicit setHeapType // and getTempHeapType methods. struct Entry { TypeBuilder& builder; size_t index; operator HeapType() const { return builder.getTempHeapType(index); } Entry& operator=(HeapType::BasicHeapType basic) { builder.setHeapType(index, basic); return *this; } Entry& operator=(Signature signature) { builder.setHeapType(index, signature); return *this; } Entry& operator=(const Struct& struct_) { builder.setHeapType(index, struct_); return *this; } Entry& operator=(Struct&& struct_) { builder.setHeapType(index, std::move(struct_)); return *this; } Entry& operator=(Array array) { builder.setHeapType(index, array); return *this; } Entry& subTypeOf(Entry other) { assert(&builder == &other.builder); builder.setSubType(index, other.index); return *this; } }; Entry operator[](size_t i) { return Entry{*this, i}; } }; std::ostream& operator<<(std::ostream&, Type); std::ostream& operator<<(std::ostream&, Type::Printed); std::ostream& operator<<(std::ostream&, HeapType); std::ostream& operator<<(std::ostream&, HeapType::Printed); std::ostream& operator<<(std::ostream&, Tuple); std::ostream& operator<<(std::ostream&, Signature); std::ostream& operator<<(std::ostream&, Field); std::ostream& operator<<(std::ostream&, Struct); std::ostream& operator<<(std::ostream&, Array); std::ostream& operator<<(std::ostream&, Rtt); std::ostream& operator<<(std::ostream&, TypeBuilder::ErrorReason); } // namespace wasm namespace std { template<> class hash { public: size_t operator()(const wasm::Type&) const; }; template<> class hash { public: size_t operator()(const wasm::Tuple&) const; }; template<> class hash { public: size_t operator()(const wasm::Signature&) const; }; template<> class hash { public: size_t operator()(const wasm::Field&) const; }; template<> class hash { public: size_t operator()(const wasm::Struct&) const; }; template<> class hash { public: size_t operator()(const wasm::Array&) const; }; template<> class hash { public: size_t operator()(const wasm::HeapType&) const; }; template<> class hash { public: size_t operator()(const wasm::Rtt&) const; }; template<> class hash { public: size_t operator()(const wasm::RecGroup&) const; }; } // namespace std #endif // wasm_wasm_type_h binaryen-version_108/src/wasm-validator.h000066400000000000000000000041131423707623100206360ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Simple WebAssembly module validator. // // There are some options regarding how to validate: // // * validateWeb: The Web platform doesn't have i64 values, so it is illegal // to import or export such a value. When this option is set, // such imports/exports are validation errors. // // * validateGlobally: Binaryen supports building modules in parallel, which // means you can add and optimize a function before the // module is complete, for example, you can add function A // with a call to function B before function B exists. // When validateGlobally is disabled, we don't look at // global correctness, and instead only check inside // each function (so in the example above we wouldn't care // about function B not existing yet, but we would care // if e.g. inside function A an i32.add receives an i64). // // * quiet: Whether to log errors verbosely. // #ifndef wasm_wasm_validator_h #define wasm_wasm_validator_h #include #include #include #include "wasm.h" namespace wasm { struct WasmValidator { enum FlagValues { Minimal = 0, Web = 1 << 0, Globally = 1 << 1, Quiet = 1 << 2 }; typedef uint32_t Flags; bool validate(Module& module, Flags flags = Globally); }; } // namespace wasm #endif // wasm_wasm_validator_h binaryen-version_108/src/wasm.h000066400000000000000000001351031423707623100166570ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // wasm.h: Define Binaryen IR, a representation for WebAssembly, with // all core parts in one simple header file. // // For more overview, see README.md // #ifndef wasm_wasm_h #define wasm_wasm_h #include #include #include #include #include #include #include #include "literal.h" #include "mixed_arena.h" #include "support/index.h" #include "support/name.h" #include "wasm-features.h" #include "wasm-type.h" namespace wasm { // An index in a wasm module typedef uint32_t Index; // An address in linear memory. struct Address { typedef uint32_t address32_t; typedef uint64_t address64_t; address64_t addr; constexpr Address() : addr(0) {} constexpr Address(uint64_t a) : addr(a) {} Address& operator=(uint64_t a) { addr = a; return *this; } operator address64_t() const { return addr; } Address& operator++(int) { ++addr; return *this; } }; enum class IRProfile { Normal, Poppy }; // Operators enum UnaryOp { // int ClzInt32, ClzInt64, CtzInt32, CtzInt64, PopcntInt32, PopcntInt64, // float NegFloat32, NegFloat64, AbsFloat32, AbsFloat64, CeilFloat32, CeilFloat64, FloorFloat32, FloorFloat64, TruncFloat32, TruncFloat64, NearestFloat32, NearestFloat64, SqrtFloat32, SqrtFloat64, // relational EqZInt32, EqZInt64, // conversions // extend i32 to i64 ExtendSInt32, ExtendUInt32, // i64 to i32 WrapInt64, // float to int TruncSFloat32ToInt32, TruncSFloat32ToInt64, TruncUFloat32ToInt32, TruncUFloat32ToInt64, TruncSFloat64ToInt32, TruncSFloat64ToInt64, TruncUFloat64ToInt32, TruncUFloat64ToInt64, // reintepret bits to int ReinterpretFloat32, ReinterpretFloat64, // int to float ConvertSInt32ToFloat32, ConvertSInt32ToFloat64, ConvertUInt32ToFloat32, ConvertUInt32ToFloat64, ConvertSInt64ToFloat32, ConvertSInt64ToFloat64, ConvertUInt64ToFloat32, ConvertUInt64ToFloat64, // f32 to f64 PromoteFloat32, // f64 to f32 DemoteFloat64, // reinterpret bits to float ReinterpretInt32, ReinterpretInt64, // Extend signed subword-sized integer. This differs from e.g. ExtendSInt32 // because the input integer is in an i64 value insetad of an i32 value. ExtendS8Int32, ExtendS16Int32, ExtendS8Int64, ExtendS16Int64, ExtendS32Int64, // Saturating float-to-int TruncSatSFloat32ToInt32, TruncSatUFloat32ToInt32, TruncSatSFloat64ToInt32, TruncSatUFloat64ToInt32, TruncSatSFloat32ToInt64, TruncSatUFloat32ToInt64, TruncSatSFloat64ToInt64, TruncSatUFloat64ToInt64, // SIMD splats SplatVecI8x16, SplatVecI16x8, SplatVecI32x4, SplatVecI64x2, SplatVecF32x4, SplatVecF64x2, // SIMD arithmetic NotVec128, AnyTrueVec128, AbsVecI8x16, NegVecI8x16, AllTrueVecI8x16, BitmaskVecI8x16, PopcntVecI8x16, AbsVecI16x8, NegVecI16x8, AllTrueVecI16x8, BitmaskVecI16x8, AbsVecI32x4, NegVecI32x4, AllTrueVecI32x4, BitmaskVecI32x4, AbsVecI64x2, NegVecI64x2, AllTrueVecI64x2, BitmaskVecI64x2, AbsVecF32x4, NegVecF32x4, SqrtVecF32x4, CeilVecF32x4, FloorVecF32x4, TruncVecF32x4, NearestVecF32x4, AbsVecF64x2, NegVecF64x2, SqrtVecF64x2, CeilVecF64x2, FloorVecF64x2, TruncVecF64x2, NearestVecF64x2, ExtAddPairwiseSVecI8x16ToI16x8, ExtAddPairwiseUVecI8x16ToI16x8, ExtAddPairwiseSVecI16x8ToI32x4, ExtAddPairwiseUVecI16x8ToI32x4, // SIMD conversions TruncSatSVecF32x4ToVecI32x4, TruncSatUVecF32x4ToVecI32x4, ConvertSVecI32x4ToVecF32x4, ConvertUVecI32x4ToVecF32x4, ExtendLowSVecI8x16ToVecI16x8, ExtendHighSVecI8x16ToVecI16x8, ExtendLowUVecI8x16ToVecI16x8, ExtendHighUVecI8x16ToVecI16x8, ExtendLowSVecI16x8ToVecI32x4, ExtendHighSVecI16x8ToVecI32x4, ExtendLowUVecI16x8ToVecI32x4, ExtendHighUVecI16x8ToVecI32x4, ExtendLowSVecI32x4ToVecI64x2, ExtendHighSVecI32x4ToVecI64x2, ExtendLowUVecI32x4ToVecI64x2, ExtendHighUVecI32x4ToVecI64x2, ConvertLowSVecI32x4ToVecF64x2, ConvertLowUVecI32x4ToVecF64x2, TruncSatZeroSVecF64x2ToVecI32x4, TruncSatZeroUVecF64x2ToVecI32x4, DemoteZeroVecF64x2ToVecF32x4, PromoteLowVecF32x4ToVecF64x2, // Relaxed SIMD RelaxedTruncSVecF32x4ToVecI32x4, RelaxedTruncUVecF32x4ToVecI32x4, RelaxedTruncZeroSVecF64x2ToVecI32x4, RelaxedTruncZeroUVecF64x2ToVecI32x4, InvalidUnary }; enum BinaryOp { // int or float AddInt32, SubInt32, MulInt32, // int DivSInt32, DivUInt32, RemSInt32, RemUInt32, AndInt32, OrInt32, XorInt32, ShlInt32, ShrSInt32, ShrUInt32, RotLInt32, RotRInt32, // relational ops // int or float EqInt32, NeInt32, // int LtSInt32, LtUInt32, LeSInt32, LeUInt32, GtSInt32, GtUInt32, GeSInt32, GeUInt32, // int or float AddInt64, SubInt64, MulInt64, // int DivSInt64, DivUInt64, RemSInt64, RemUInt64, AndInt64, OrInt64, XorInt64, ShlInt64, ShrSInt64, ShrUInt64, RotLInt64, RotRInt64, // relational ops // int or float EqInt64, NeInt64, // int LtSInt64, LtUInt64, LeSInt64, LeUInt64, GtSInt64, GtUInt64, GeSInt64, GeUInt64, // int or float AddFloat32, SubFloat32, MulFloat32, // float DivFloat32, CopySignFloat32, MinFloat32, MaxFloat32, // relational ops // int or float EqFloat32, NeFloat32, // float LtFloat32, LeFloat32, GtFloat32, GeFloat32, // int or float AddFloat64, SubFloat64, MulFloat64, // float DivFloat64, CopySignFloat64, MinFloat64, MaxFloat64, // relational ops // int or float EqFloat64, NeFloat64, // float LtFloat64, LeFloat64, GtFloat64, GeFloat64, // SIMD relational ops (return vectors) EqVecI8x16, NeVecI8x16, LtSVecI8x16, LtUVecI8x16, GtSVecI8x16, GtUVecI8x16, LeSVecI8x16, LeUVecI8x16, GeSVecI8x16, GeUVecI8x16, EqVecI16x8, NeVecI16x8, LtSVecI16x8, LtUVecI16x8, GtSVecI16x8, GtUVecI16x8, LeSVecI16x8, LeUVecI16x8, GeSVecI16x8, GeUVecI16x8, EqVecI32x4, NeVecI32x4, LtSVecI32x4, LtUVecI32x4, GtSVecI32x4, GtUVecI32x4, LeSVecI32x4, LeUVecI32x4, GeSVecI32x4, GeUVecI32x4, EqVecI64x2, NeVecI64x2, LtSVecI64x2, GtSVecI64x2, LeSVecI64x2, GeSVecI64x2, EqVecF32x4, NeVecF32x4, LtVecF32x4, GtVecF32x4, LeVecF32x4, GeVecF32x4, EqVecF64x2, NeVecF64x2, LtVecF64x2, GtVecF64x2, LeVecF64x2, GeVecF64x2, // SIMD arithmetic AndVec128, OrVec128, XorVec128, AndNotVec128, AddVecI8x16, AddSatSVecI8x16, AddSatUVecI8x16, SubVecI8x16, SubSatSVecI8x16, SubSatUVecI8x16, MinSVecI8x16, MinUVecI8x16, MaxSVecI8x16, MaxUVecI8x16, AvgrUVecI8x16, AddVecI16x8, AddSatSVecI16x8, AddSatUVecI16x8, SubVecI16x8, SubSatSVecI16x8, SubSatUVecI16x8, MulVecI16x8, MinSVecI16x8, MinUVecI16x8, MaxSVecI16x8, MaxUVecI16x8, AvgrUVecI16x8, Q15MulrSatSVecI16x8, ExtMulLowSVecI16x8, ExtMulHighSVecI16x8, ExtMulLowUVecI16x8, ExtMulHighUVecI16x8, AddVecI32x4, SubVecI32x4, MulVecI32x4, MinSVecI32x4, MinUVecI32x4, MaxSVecI32x4, MaxUVecI32x4, DotSVecI16x8ToVecI32x4, ExtMulLowSVecI32x4, ExtMulHighSVecI32x4, ExtMulLowUVecI32x4, ExtMulHighUVecI32x4, AddVecI64x2, SubVecI64x2, MulVecI64x2, ExtMulLowSVecI64x2, ExtMulHighSVecI64x2, ExtMulLowUVecI64x2, ExtMulHighUVecI64x2, AddVecF32x4, SubVecF32x4, MulVecF32x4, DivVecF32x4, MinVecF32x4, MaxVecF32x4, PMinVecF32x4, PMaxVecF32x4, AddVecF64x2, SubVecF64x2, MulVecF64x2, DivVecF64x2, MinVecF64x2, MaxVecF64x2, PMinVecF64x2, PMaxVecF64x2, // SIMD Conversion NarrowSVecI16x8ToVecI8x16, NarrowUVecI16x8ToVecI8x16, NarrowSVecI32x4ToVecI16x8, NarrowUVecI32x4ToVecI16x8, // SIMD Swizzle SwizzleVecI8x16, // Relaxed SIMD RelaxedSwizzleVecI8x16, RelaxedMinVecF32x4, RelaxedMaxVecF32x4, RelaxedMinVecF64x2, RelaxedMaxVecF64x2, RelaxedQ15MulrSVecI16x8, DotI8x16I7x16SToVecI16x8, DotI8x16I7x16UToVecI16x8, InvalidBinary }; enum AtomicRMWOp { RMWAdd, RMWSub, RMWAnd, RMWOr, RMWXor, RMWXchg }; enum SIMDExtractOp { ExtractLaneSVecI8x16, ExtractLaneUVecI8x16, ExtractLaneSVecI16x8, ExtractLaneUVecI16x8, ExtractLaneVecI32x4, ExtractLaneVecI64x2, ExtractLaneVecF32x4, ExtractLaneVecF64x2 }; enum SIMDReplaceOp { ReplaceLaneVecI8x16, ReplaceLaneVecI16x8, ReplaceLaneVecI32x4, ReplaceLaneVecI64x2, ReplaceLaneVecF32x4, ReplaceLaneVecF64x2, }; enum SIMDShiftOp { ShlVecI8x16, ShrSVecI8x16, ShrUVecI8x16, ShlVecI16x8, ShrSVecI16x8, ShrUVecI16x8, ShlVecI32x4, ShrSVecI32x4, ShrUVecI32x4, ShlVecI64x2, ShrSVecI64x2, ShrUVecI64x2 }; enum SIMDLoadOp { Load8SplatVec128, Load16SplatVec128, Load32SplatVec128, Load64SplatVec128, Load8x8SVec128, Load8x8UVec128, Load16x4SVec128, Load16x4UVec128, Load32x2SVec128, Load32x2UVec128, Load32ZeroVec128, Load64ZeroVec128, }; enum SIMDLoadStoreLaneOp { Load8LaneVec128, Load16LaneVec128, Load32LaneVec128, Load64LaneVec128, Store8LaneVec128, Store16LaneVec128, Store32LaneVec128, Store64LaneVec128, }; enum SIMDTernaryOp { Bitselect, // Relaxed SIMD RelaxedFmaVecF32x4, RelaxedFmsVecF32x4, RelaxedFmaVecF64x2, RelaxedFmsVecF64x2, LaneselectI8x16, LaneselectI16x8, LaneselectI32x4, LaneselectI64x2, DotI8x16I7x16AddSToVecI32x4, DotI8x16I7x16AddUToVecI32x4, }; enum RefIsOp { RefIsNull, RefIsFunc, RefIsData, RefIsI31, }; enum RefAsOp { RefAsNonNull, RefAsFunc, RefAsData, RefAsI31, }; enum BrOnOp { BrOnNull, BrOnNonNull, BrOnCast, BrOnCastFail, BrOnFunc, BrOnNonFunc, BrOnData, BrOnNonData, BrOnI31, BrOnNonI31, }; // // Expressions // // Note that little is provided in terms of constructors for these. The // rationale is that writing `new Something(a, b, c, d, e)` is not the clearest, // and it would be better to write new `Something(name=a, leftOperand=b...` // etc., but C++ lacks named operands so you will see things like // auto x = new Something(); // x->name = a; // x->leftOperand = b; // .. // which is less compact but less ambiguous. See wasm-builder.h for a more // friendly API for building nodes. // // Most nodes have no need of internal allocation, and when arena-allocated // they drop the provided arena on the floor. You can create random instances // of those that are not in an arena without issue. However, the nodes that // have internal allocation will need an allocator provided to them in order // to be constructed. class Expression { public: enum Id { InvalidId = 0, BlockId, IfId, LoopId, BreakId, SwitchId, CallId, CallIndirectId, LocalGetId, LocalSetId, GlobalGetId, GlobalSetId, LoadId, StoreId, ConstId, UnaryId, BinaryId, SelectId, DropId, ReturnId, MemorySizeId, MemoryGrowId, NopId, UnreachableId, AtomicRMWId, AtomicCmpxchgId, AtomicWaitId, AtomicNotifyId, AtomicFenceId, SIMDExtractId, SIMDReplaceId, SIMDShuffleId, SIMDTernaryId, SIMDShiftId, SIMDLoadId, SIMDLoadStoreLaneId, MemoryInitId, DataDropId, MemoryCopyId, MemoryFillId, PopId, RefNullId, RefIsId, RefFuncId, RefEqId, TableGetId, TableSetId, TableSizeId, TableGrowId, TryId, ThrowId, RethrowId, TupleMakeId, TupleExtractId, I31NewId, I31GetId, CallRefId, RefTestId, RefCastId, BrOnId, RttCanonId, RttSubId, StructNewId, StructGetId, StructSetId, ArrayNewId, ArrayInitId, ArrayGetId, ArraySetId, ArrayLenId, ArrayCopyId, RefAsId, NumExpressionIds }; Id _id; // the type of the expression: its *output*, not necessarily its input(s) Type type = Type::none; Expression(Id id) : _id(id) {} void finalize() {} template bool is() const { static_assert(std::is_base_of::value, "Expression is not a base of destination type T"); return int(_id) == int(T::SpecificId); } template T* dynCast() { static_assert(std::is_base_of::value, "Expression is not a base of destination type T"); return int(_id) == int(T::SpecificId) ? (T*)this : nullptr; } template const T* dynCast() const { static_assert(std::is_base_of::value, "Expression is not a base of destination type T"); return int(_id) == int(T::SpecificId) ? (const T*)this : nullptr; } template T* cast() { static_assert(std::is_base_of::value, "Expression is not a base of destination type T"); assert(int(_id) == int(T::SpecificId)); return (T*)this; } template const T* cast() const { static_assert(std::is_base_of::value, "Expression is not a base of destination type T"); assert(int(_id) == int(T::SpecificId)); return (const T*)this; } // Print the expression to stderr. Meant for use while debugging. void dump(); }; const char* getExpressionName(Expression* curr); Literal getLiteralFromConstExpression(Expression* curr); Literals getLiteralsFromConstExpression(Expression* curr); typedef ArenaVector ExpressionList; template class SpecificExpression : public Expression { public: enum { SpecificId = SID // compile-time access to the type for the class }; SpecificExpression() : Expression(SID) {} }; class Nop : public SpecificExpression { public: Nop() = default; Nop(MixedArena& allocator) {} }; class Block : public SpecificExpression { public: Block(MixedArena& allocator) : list(allocator) {} Name name; ExpressionList list; // set the type purely based on its contents. this scans the block, so it is // not fast. void finalize(); // set the type given you know its type, which is the case when parsing // s-expression or binary, as explicit types are given. the only additional // work this does is to set the type to unreachable in the cases that is // needed (which may require scanning the block) void finalize(Type type_); enum Breakability { Unknown, HasBreak, NoBreak }; // set the type given you know its type, and you know if there is a break to // this block. this avoids the need to scan the contents of the block in the // case that it might be unreachable, so it is recommended if you already know // the type and breakability anyhow. void finalize(Type type_, Breakability breakability); }; class If : public SpecificExpression { public: If() : ifFalse(nullptr) {} If(MixedArena& allocator) : If() {} Expression* condition; Expression* ifTrue; Expression* ifFalse; // set the type given you know its type, which is the case when parsing // s-expression or binary, as explicit types are given. the only additional // work this does is to set the type to unreachable in the cases that is // needed. void finalize(Type type_); // set the type purely based on its contents. void finalize(); }; class Loop : public SpecificExpression { public: Loop() = default; Loop(MixedArena& allocator) {} Name name; Expression* body; // set the type given you know its type, which is the case when parsing // s-expression or binary, as explicit types are given. the only additional // work this does is to set the type to unreachable in the cases that is // needed. void finalize(Type type_); // set the type purely based on its contents. void finalize(); }; class Break : public SpecificExpression { public: Break() : value(nullptr), condition(nullptr) {} Break(MixedArena& allocator) : Break() { type = Type::unreachable; } Name name; Expression* value; Expression* condition; void finalize(); }; class Switch : public SpecificExpression { public: Switch(MixedArena& allocator) : targets(allocator) { type = Type::unreachable; } ArenaVector targets; Name default_; Expression* value = nullptr; Expression* condition = nullptr; void finalize(); }; class Call : public SpecificExpression { public: Call(MixedArena& allocator) : operands(allocator) {} ExpressionList operands; Name target; bool isReturn = false; void finalize(); }; class CallIndirect : public SpecificExpression { public: CallIndirect(MixedArena& allocator) : operands(allocator) {} HeapType heapType; ExpressionList operands; Expression* target; Name table; bool isReturn = false; void finalize(); }; class LocalGet : public SpecificExpression { public: LocalGet() = default; LocalGet(MixedArena& allocator) {} Index index; }; class LocalSet : public SpecificExpression { public: LocalSet() = default; LocalSet(MixedArena& allocator) {} void finalize(); Index index; Expression* value; bool isTee() const; void makeTee(Type type); void makeSet(); }; class GlobalGet : public SpecificExpression { public: GlobalGet() = default; GlobalGet(MixedArena& allocator) {} Name name; }; class GlobalSet : public SpecificExpression { public: GlobalSet() = default; GlobalSet(MixedArena& allocator) {} Name name; Expression* value; void finalize(); }; class Load : public SpecificExpression { public: Load() = default; Load(MixedArena& allocator) {} uint8_t bytes; bool signed_ = false; Address offset; Address align; bool isAtomic; Expression* ptr; // type must be set during creation, cannot be inferred void finalize(); }; class Store : public SpecificExpression { public: Store() = default; Store(MixedArena& allocator) : Store() {} uint8_t bytes; Address offset; Address align; bool isAtomic; Expression* ptr; Expression* value; Type valueType; void finalize(); }; class AtomicRMW : public SpecificExpression { public: AtomicRMW() = default; AtomicRMW(MixedArena& allocator) : AtomicRMW() {} AtomicRMWOp op; uint8_t bytes; Address offset; Expression* ptr; Expression* value; void finalize(); }; class AtomicCmpxchg : public SpecificExpression { public: AtomicCmpxchg() = default; AtomicCmpxchg(MixedArena& allocator) : AtomicCmpxchg() {} uint8_t bytes; Address offset; Expression* ptr; Expression* expected; Expression* replacement; void finalize(); }; class AtomicWait : public SpecificExpression { public: AtomicWait() = default; AtomicWait(MixedArena& allocator) : AtomicWait() {} Address offset; Expression* ptr; Expression* expected; Expression* timeout; Type expectedType; void finalize(); }; class AtomicNotify : public SpecificExpression { public: AtomicNotify() = default; AtomicNotify(MixedArena& allocator) : AtomicNotify() {} Address offset; Expression* ptr; Expression* notifyCount; void finalize(); }; class AtomicFence : public SpecificExpression { public: AtomicFence() = default; AtomicFence(MixedArena& allocator) : AtomicFence() {} // Current wasm threads only supports sequentialy consistent atomics, but // other orderings may be added in the future. This field is reserved for // that, and currently set to 0. uint8_t order = 0; void finalize(); }; class SIMDExtract : public SpecificExpression { public: SIMDExtract() = default; SIMDExtract(MixedArena& allocator) : SIMDExtract() {} SIMDExtractOp op; Expression* vec; uint8_t index; void finalize(); }; class SIMDReplace : public SpecificExpression { public: SIMDReplace() = default; SIMDReplace(MixedArena& allocator) : SIMDReplace() {} SIMDReplaceOp op; Expression* vec; uint8_t index; Expression* value; void finalize(); }; class SIMDShuffle : public SpecificExpression { public: SIMDShuffle() = default; SIMDShuffle(MixedArena& allocator) : SIMDShuffle() {} Expression* left; Expression* right; std::array mask; void finalize(); }; class SIMDTernary : public SpecificExpression { public: SIMDTernary() = default; SIMDTernary(MixedArena& allocator) : SIMDTernary() {} SIMDTernaryOp op; Expression* a; Expression* b; Expression* c; void finalize(); }; class SIMDShift : public SpecificExpression { public: SIMDShift() = default; SIMDShift(MixedArena& allocator) : SIMDShift() {} SIMDShiftOp op; Expression* vec; Expression* shift; void finalize(); }; class SIMDLoad : public SpecificExpression { public: SIMDLoad() = default; SIMDLoad(MixedArena& allocator) {} SIMDLoadOp op; Address offset; Address align; Expression* ptr; Index getMemBytes(); void finalize(); }; class SIMDLoadStoreLane : public SpecificExpression { public: SIMDLoadStoreLane() = default; SIMDLoadStoreLane(MixedArena& allocator) {} SIMDLoadStoreLaneOp op; Address offset; Address align; uint8_t index; Expression* ptr; Expression* vec; bool isStore(); bool isLoad() { return !isStore(); } Index getMemBytes(); void finalize(); }; class MemoryInit : public SpecificExpression { public: MemoryInit() = default; MemoryInit(MixedArena& allocator) : MemoryInit() {} Index segment; Expression* dest; Expression* offset; Expression* size; void finalize(); }; class DataDrop : public SpecificExpression { public: DataDrop() = default; DataDrop(MixedArena& allocator) : DataDrop() {} Index segment; void finalize(); }; class MemoryCopy : public SpecificExpression { public: MemoryCopy() = default; MemoryCopy(MixedArena& allocator) : MemoryCopy() {} Expression* dest; Expression* source; Expression* size; void finalize(); }; class MemoryFill : public SpecificExpression { public: MemoryFill() = default; MemoryFill(MixedArena& allocator) : MemoryFill() {} Expression* dest; Expression* value; Expression* size; void finalize(); }; class Const : public SpecificExpression { public: Const() = default; Const(MixedArena& allocator) {} Literal value; Const* set(Literal value_); void finalize(); }; class Unary : public SpecificExpression { public: Unary() = default; Unary(MixedArena& allocator) {} UnaryOp op; Expression* value; bool isRelational(); void finalize(); }; class Binary : public SpecificExpression { public: Binary() = default; Binary(MixedArena& allocator) {} BinaryOp op; Expression* left; Expression* right; // the type is always the type of the operands, // except for relationals bool isRelational(); void finalize(); }; class Select : public SpecificExpression { public: Select() = default; Select(MixedArena& allocator) {} Expression* ifTrue; Expression* ifFalse; Expression* condition; void finalize(); void finalize(Type type_); }; class Drop : public SpecificExpression { public: Drop() = default; Drop(MixedArena& allocator) {} Expression* value; void finalize(); }; class Return : public SpecificExpression { public: Return() { type = Type::unreachable; } Return(MixedArena& allocator) : Return() {} Expression* value = nullptr; }; class MemorySize : public SpecificExpression { public: MemorySize() { type = Type::i32; } MemorySize(MixedArena& allocator) : MemorySize() {} Type ptrType = Type::i32; void make64(); void finalize(); }; class MemoryGrow : public SpecificExpression { public: MemoryGrow() { type = Type::i32; } MemoryGrow(MixedArena& allocator) : MemoryGrow() {} Expression* delta = nullptr; Type ptrType = Type::i32; void make64(); void finalize(); }; class Unreachable : public SpecificExpression { public: Unreachable() { type = Type::unreachable; } Unreachable(MixedArena& allocator) : Unreachable() {} }; // Represents a pop of a value that arrives as an implicit argument to the // current block. Currently used in exception handling. class Pop : public SpecificExpression { public: Pop() = default; Pop(MixedArena& allocator) {} }; class RefNull : public SpecificExpression { public: RefNull() = default; RefNull(MixedArena& allocator) {} void finalize(); void finalize(HeapType heapType); void finalize(Type type); }; class RefIs : public SpecificExpression { public: RefIs(MixedArena& allocator) {} // RefIs can represent ref.is_null, ref.is_func, ref.is_data, and ref.is_i31. RefIsOp op; Expression* value; void finalize(); }; class RefFunc : public SpecificExpression { public: RefFunc(MixedArena& allocator) {} Name func; void finalize(); void finalize(Type type_); }; class RefEq : public SpecificExpression { public: RefEq(MixedArena& allocator) {} Expression* left; Expression* right; void finalize(); }; class TableGet : public SpecificExpression { public: TableGet(MixedArena& allocator) {} Name table; Expression* index; void finalize(); }; class TableSet : public SpecificExpression { public: TableSet(MixedArena& allocator) {} Name table; Expression* index; Expression* value; void finalize(); }; class TableSize : public SpecificExpression { public: TableSize() { type = Type::i32; } TableSize(MixedArena& allocator) : TableSize() {} Name table; void finalize(); }; class TableGrow : public SpecificExpression { public: TableGrow() { type = Type::i32; } TableGrow(MixedArena& allocator) : TableGrow() {} Name table; Expression* value; Expression* delta; void finalize(); }; class Try : public SpecificExpression { public: Try(MixedArena& allocator) : catchTags(allocator), catchBodies(allocator) {} Name name; // label that can only be targeted by 'delegate's Expression* body; ArenaVector catchTags; ExpressionList catchBodies; Name delegateTarget; // target try's label bool hasCatchAll() const { return catchBodies.size() - catchTags.size() == 1; } bool isCatch() const { return !catchBodies.empty(); } bool isDelegate() const { return delegateTarget.is(); } void finalize(); void finalize(Type type_); }; class Throw : public SpecificExpression { public: Throw(MixedArena& allocator) : operands(allocator) {} Name tag; ExpressionList operands; void finalize(); }; class Rethrow : public SpecificExpression { public: Rethrow(MixedArena& allocator) {} Name target; void finalize(); }; class TupleMake : public SpecificExpression { public: TupleMake(MixedArena& allocator) : operands(allocator) {} ExpressionList operands; void finalize(); }; class TupleExtract : public SpecificExpression { public: TupleExtract(MixedArena& allocator) {} Expression* tuple; Index index; void finalize(); }; class I31New : public SpecificExpression { public: I31New(MixedArena& allocator) {} Expression* value; void finalize(); }; class I31Get : public SpecificExpression { public: I31Get(MixedArena& allocator) {} Expression* i31; bool signed_ = false; void finalize(); }; class CallRef : public SpecificExpression { public: CallRef(MixedArena& allocator) : operands(allocator) {} ExpressionList operands; Expression* target; bool isReturn = false; void finalize(); void finalize(Type type_); }; class RefTest : public SpecificExpression { public: RefTest(MixedArena& allocator) {} Expression* ref; // If rtt is provided then this is a dynamic test with an rtt. If nullptr then // this is a static cast and intendedType is set, and it contains the type we // intend to cast to. Expression* rtt = nullptr; HeapType intendedType; void finalize(); // Returns the type we intend to cast to. HeapType getIntendedType(); }; class RefCast : public SpecificExpression { public: RefCast(MixedArena& allocator) {} Expression* ref; // See above with RefTest. Expression* rtt = nullptr; HeapType intendedType; // Support the unsafe `ref.cast_nop_static` to enable precise cast overhead // measurements. enum Safety { Safe, Unsafe }; Safety safety; void finalize(); // Returns the type we intend to cast to. HeapType getIntendedType(); }; class BrOn : public SpecificExpression { public: BrOn(MixedArena& allocator) {} BrOnOp op; Name name; Expression* ref; // BrOnCast* has, like RefCast and RefTest, either an rtt or a static intended // type. Expression* rtt = nullptr; HeapType intendedType; // TODO: BrOnNull also has an optional extra value in the spec, which we do // not support. See also the discussion on // https://github.com/WebAssembly/function-references/issues/45 // - depending on the decision there, we may want to move BrOnNull into // Break or a new class of its own. void finalize(); // Returns the type we intend to cast to. Relevant only for the cast variants. HeapType getIntendedType(); // Returns the type sent on the branch, if it is taken. Type getSentType(); }; class RttCanon : public SpecificExpression { public: RttCanon(MixedArena& allocator) {} void finalize(); }; class RttSub : public SpecificExpression { public: RttSub(MixedArena& allocator) {} Expression* parent; // rtt.fresh_sub is like rtt.sub, but never caching or canonicalizing (i.e., // it always returns a fresh RTT, non-identical to any other RTT in the // system). bool fresh = false; void finalize(); }; class StructNew : public SpecificExpression { public: StructNew(MixedArena& allocator) : operands(allocator) {} // A dynamic StructNew has an rtt, while a static one declares the type using // the type field. Expression* rtt = nullptr; // A struct.new_with_default has empty operands. This does leave the case of a // struct with no fields ambiguous, but it doesn't make a difference in that // case, and binaryen doesn't guarantee roundtripping binaries anyhow. ExpressionList operands; bool isWithDefault() { return operands.empty(); } void finalize(); }; class StructGet : public SpecificExpression { public: StructGet(MixedArena& allocator) {} Index index; Expression* ref; // Packed fields have a sign. bool signed_ = false; void finalize(); }; class StructSet : public SpecificExpression { public: StructSet(MixedArena& allocator) {} Index index; Expression* ref; Expression* value; void finalize(); }; class ArrayNew : public SpecificExpression { public: ArrayNew(MixedArena& allocator) {} // If set, then the initial value is assigned to all entries in the array. If // not set, this is array.new_with_default and the default of the type is // used. Expression* init = nullptr; Expression* size; // A dynamic ArrayNew has an rtt, while a static one declares the type using // the type field. Expression* rtt = nullptr; bool isWithDefault() { return !init; } void finalize(); }; class ArrayInit : public SpecificExpression { public: ArrayInit(MixedArena& allocator) : values(allocator) {} ExpressionList values; // A dynamic ArrayInit has an rtt, while a static one declares the type using // the type field. Expression* rtt = nullptr; void finalize(); }; class ArrayGet : public SpecificExpression { public: ArrayGet(MixedArena& allocator) {} Expression* ref; Expression* index; // Packed fields have a sign. bool signed_ = false; void finalize(); }; class ArraySet : public SpecificExpression { public: ArraySet(MixedArena& allocator) {} Expression* ref; Expression* index; Expression* value; void finalize(); }; class ArrayLen : public SpecificExpression { public: ArrayLen(MixedArena& allocator) {} Expression* ref; void finalize(); }; class ArrayCopy : public SpecificExpression { public: ArrayCopy(MixedArena& allocator) {} Expression* destRef; Expression* destIndex; Expression* srcRef; Expression* srcIndex; Expression* length; void finalize(); }; class RefAs : public SpecificExpression { public: RefAs(MixedArena& allocator) {} RefAsOp op; Expression* value; void finalize(); }; // Globals struct Named { Name name; // Explicit names are ones that we read from the input file and // will be written the name section in the output file. // Implicit names are names that binaryen generated for internal // use only and will not be written the name section. bool hasExplicitName = false; void setName(Name name_, bool hasExplicitName_) { name = name_; hasExplicitName = hasExplicitName_; } void setExplicitName(Name name_) { setName(name_, true); } }; struct Importable : Named { // If these are set, then this is an import, as module.base Name module, base; bool imported() const { return module.is(); } }; class Function; // Represents an offset into a wasm binary file. This is used for debug info. // For now, assume this is 32 bits as that's the size limit of wasm files // anyhow. using BinaryLocation = uint32_t; // Represents a mapping of wasm module elements to their location in the // binary representation. This is used for general debugging info support. // Offsets are relative to the beginning of the code section, as in DWARF. struct BinaryLocations { struct Span { BinaryLocation start = 0, end = 0; }; // Track the range of addresses an expressions appears at. This is the // contiguous range that all instructions have - control flow instructions // have additional opcodes later (like an end for a block or loop), see // just after this. std::unordered_map expressions; // Track the extra delimiter positions that some instructions, in particular // control flow, have, like 'end' for loop and block. We keep these in a // separate map because they are rare and we optimize for the storage space // for the common type of instruction which just needs a Span. // For "else" (from an if) we use index 0, and for catch (from a try) we use // indexes 0 and above. // We use automatic zero-initialization here because that indicates a "null" // debug value, indicating the information is not present. using DelimiterLocations = ZeroInitSmallVector; enum DelimiterId : size_t { Else = 0, Invalid = size_t(-1) }; std::unordered_map delimiters; // DWARF debug info can refer to multiple interesting positions in a function. struct FunctionLocations { // The very start of the function, where the binary has a size LEB. BinaryLocation start = 0; // The area where we declare locals, which is right after the size LEB. BinaryLocation declarations = 0; // The end, which is one past the final "end" instruction byte. BinaryLocation end = 0; }; std::unordered_map functions; }; // Forward declarations of Stack IR, as functions can contain it, see // the stackIR property. // Stack IR is a secondary IR to the main IR defined in this file (Binaryen // IR). See wasm-stack.h. class StackInst; using StackIR = std::vector; class Function : public Importable { public: HeapType type = HeapType(Signature()); // parameters and return value IRProfile profile = IRProfile::Normal; std::vector vars; // non-param locals // The body of the function Expression* body = nullptr; // If present, this stack IR was generated from the main Binaryen IR body, // and possibly optimized. If it is present when writing to wasm binary, // it will be emitted instead of the main Binaryen IR. // // Note that no special care is taken to synchronize the two IRs - if you // emit stack IR and then optimize the main IR, you need to recompute the // stack IR. The Pass system will throw away Stack IR if a pass is run // that declares it may modify Binaryen IR. std::unique_ptr stackIR; // local names. these are optional. std::unordered_map localNames; std::unordered_map localIndices; // Source maps debugging info: map expression nodes to their file, line, col. struct DebugLocation { BinaryLocation fileIndex, lineNumber, columnNumber; bool operator==(const DebugLocation& other) const { return fileIndex == other.fileIndex && lineNumber == other.lineNumber && columnNumber == other.columnNumber; } bool operator!=(const DebugLocation& other) const { return !(*this == other); } bool operator<(const DebugLocation& other) const { return fileIndex != other.fileIndex ? fileIndex < other.fileIndex : lineNumber != other.lineNumber ? lineNumber < other.lineNumber : columnNumber < other.columnNumber; } }; std::unordered_map debugLocations; std::set prologLocation; std::set epilogLocation; // General debugging info support: track instructions and the function itself. std::unordered_map expressionLocations; std::unordered_map delimiterLocations; BinaryLocations::FunctionLocations funcLocation; Signature getSig() { return type.getSignature(); } Type getParams() { return getSig().params; } Type getResults() { return getSig().results; } void setParams(Type params) { type = Signature(params, getResults()); } void setResults(Type results) { type = Signature(getParams(), results); } size_t getNumParams(); size_t getNumVars(); size_t getNumLocals(); bool isParam(Index index); bool isVar(Index index); Name getLocalName(Index index); Index getLocalIndex(Name name); Index getVarIndexBase(); Type getLocalType(Index index); Name getLocalNameOrDefault(Index index); Name getLocalNameOrGeneric(Index index); bool hasLocalName(Index index) const; void setLocalName(Index index, Name name); void clearNames(); void clearDebugInfo(); }; // The kind of an import or export. enum class ExternalKind { Function = 0, Table = 1, Memory = 2, Global = 3, Tag = 4, Invalid = -1 }; class Export { public: // exported name - note that this is the key, as the internal name is // non-unique (can have multiple exports for an internal, also over kinds) Name name; Name value; // internal name ExternalKind kind; }; class ElementSegment : public Named { public: Name table; Expression* offset; Type type = Type::funcref; std::vector data; ElementSegment() = default; ElementSegment(Name table, Expression* offset, Type type = Type::funcref) : table(table), offset(offset), type(type) {} ElementSegment(Name table, Expression* offset, Type type, std::vector& init) : table(table), offset(offset), type(type) { data.swap(init); } }; class Table : public Importable { public: static const Address::address32_t kPageSize = 1; static const Index kUnlimitedSize = Index(-1); // In wasm32/64, the maximum table size is limited by a 32-bit pointer: 4GB static const Index kMaxSize = Index(-1); Address initial = 0; Address max = kMaxSize; Type type = Type::funcref; bool hasMax() { return max != kUnlimitedSize; } void clear() { name = ""; initial = 0; max = kMaxSize; } }; class Memory : public Importable { public: static const Address::address32_t kPageSize = 64 * 1024; static const Address::address64_t kUnlimitedSize = Address::address64_t(-1); // In wasm32, the maximum memory size is limited by a 32-bit pointer: 4GB static const Address::address32_t kMaxSize32 = (uint64_t(4) * 1024 * 1024 * 1024) / kPageSize; struct Segment { // For use in name section only Name name; bool isPassive = false; Expression* offset = nullptr; std::vector data; // TODO: optimize Segment() = default; Segment(Expression* offset) : offset(offset) {} Segment(Expression* offset, const char* init, Address size) : offset(offset) { data.resize(size); std::copy_n(init, size, data.begin()); } Segment(Expression* offset, std::vector& init) : offset(offset) { data.swap(init); } Segment(Name name, bool isPassive, Expression* offset, const char* init, Address size) : name(name), isPassive(isPassive), offset(offset) { data.resize(size); std::copy_n(init, size, data.begin()); } }; bool exists = false; Address initial = 0; // sizes are in pages Address max = kMaxSize32; std::vector segments; bool shared = false; Type indexType = Type::i32; Memory() { name = Name::fromInt(0); } bool hasMax() { return max != kUnlimitedSize; } bool is64() { return indexType == Type::i64; } void clear() { exists = false; name = ""; initial = 0; max = kMaxSize32; segments.clear(); shared = false; indexType = Type::i32; } }; class Global : public Importable { public: Type type; Expression* init = nullptr; bool mutable_ = false; }; class Tag : public Importable { public: Signature sig; }; // "Opaque" data, not part of the core wasm spec, that is held in binaries. // May be parsed/handled by utility code elsewhere, but not in wasm.h class UserSection { public: std::string name; std::vector data; }; // The optional "dylink" section is used in dynamic linking. class DylinkSection { public: bool isLegacy = false; Index memorySize, memoryAlignment, tableSize, tableAlignment; std::vector neededDynlibs; std::vector tail; }; class Module { public: // wasm contents (generally you shouldn't access these from outside, except // maybe for iterating; use add*() and the get() functions) std::vector> exports; std::vector> functions; std::vector> globals; std::vector> tags; std::vector> elementSegments; std::vector> tables; Memory memory; Name start; std::vector userSections; // Optional user section IR representation. std::unique_ptr dylinkSection; // Source maps debug info. std::vector debugInfoFileNames; // `features` are the features allowed to be used in this module and should be // respected regardless of the value of`hasFeaturesSection`. // `hasFeaturesSection` means we read a features section and will emit one // too. FeatureSet features = FeatureSet::MVP; bool hasFeaturesSection = false; // Module name, if specified. Serves a documentary role only. Name name; std::unordered_map typeNames; MixedArena allocator; private: // TODO: add a build option where Names are just indices, and then these // methods are not needed // exports map is by the *exported* name, which is unique std::unordered_map exportsMap; std::unordered_map functionsMap; std::unordered_map tablesMap; std::unordered_map elementSegmentsMap; std::unordered_map globalsMap; std::unordered_map tagsMap; public: Module() = default; Export* getExport(Name name); Function* getFunction(Name name); Table* getTable(Name name); ElementSegment* getElementSegment(Name name); Global* getGlobal(Name name); Tag* getTag(Name name); Export* getExportOrNull(Name name); Table* getTableOrNull(Name name); ElementSegment* getElementSegmentOrNull(Name name); Function* getFunctionOrNull(Name name); Global* getGlobalOrNull(Name name); Tag* getTagOrNull(Name name); Export* addExport(Export* curr); Function* addFunction(Function* curr); Global* addGlobal(Global* curr); Tag* addTag(Tag* curr); Export* addExport(std::unique_ptr&& curr); Function* addFunction(std::unique_ptr&& curr); Table* addTable(std::unique_ptr
&& curr); ElementSegment* addElementSegment(std::unique_ptr&& curr); Global* addGlobal(std::unique_ptr&& curr); Tag* addTag(std::unique_ptr&& curr); void addStart(const Name& s); void removeExport(Name name); void removeFunction(Name name); void removeTable(Name name); void removeElementSegment(Name name); void removeGlobal(Name name); void removeTag(Name name); void removeExports(std::function pred); void removeFunctions(std::function pred); void removeTables(std::function pred); void removeElementSegments(std::function pred); void removeGlobals(std::function pred); void removeTags(std::function pred); void updateMaps(); void clearDebugInfo(); }; using ModuleExpression = std::pair; } // namespace wasm namespace std { template<> struct hash { size_t operator()(const wasm::Address a) const { return std::hash()(a.addr); } }; std::ostream& operator<<(std::ostream& o, wasm::Module& module); std::ostream& operator<<(std::ostream& o, wasm::Expression& expression); std::ostream& operator<<(std::ostream& o, wasm::ModuleExpression pair); std::ostream& operator<<(std::ostream& o, wasm::StackInst& inst); std::ostream& operator<<(std::ostream& o, wasm::StackIR& ir); } // namespace std #endif // wasm_wasm_h binaryen-version_108/src/wasm/000077500000000000000000000000001423707623100165035ustar00rootroot00000000000000binaryen-version_108/src/wasm/CMakeLists.txt000066400000000000000000000010061423707623100212400ustar00rootroot00000000000000file(GLOB wasm_HEADERS ../*.h) set(wasm_SOURCES literal.cpp parsing.cpp wasm.cpp wasm-binary.cpp wasm-debug.cpp wasm-emscripten.cpp wasm-interpreter.cpp wasm-io.cpp wasm-s-parser.cpp wasm-stack.cpp wasm-type.cpp wasm-validator.cpp ${wasm_HEADERS} ) # wasm-debug.cpp includes LLVM header using std::iterator (deprecated in C++17) if (NOT MSVC) set_source_files_properties(wasm-debug.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations) endif() add_library(wasm OBJECT ${wasm_SOURCES}) binaryen-version_108/src/wasm/literal.cpp000066400000000000000000002450221423707623100206500ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "literal.h" #include #include #include "emscripten-optimizer/simple_ast.h" #include "ir/bits.h" #include "pretty_printing.h" #include "support/bits.h" #include "support/utilities.h" namespace wasm { template using LaneArray = std::array; Literal::Literal(Type type) : type(type) { if (type.isBasic()) { switch (type.getBasic()) { case Type::i32: case Type::f32: i32 = 0; return; case Type::i64: case Type::f64: i64 = 0; return; case Type::v128: memset(&v128, 0, 16); return; case Type::none: return; case Type::unreachable: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: break; } } if (isData()) { assert(!type.isNonNullable()); new (&gcData) std::shared_ptr(); } else if (type.isRtt()) { new (this) Literal(Literal::makeCanonicalRtt(type.getHeapType())); } else { // For anything else, zero out all the union data. memset(&v128, 0, 16); } } Literal::Literal(const uint8_t init[16]) : type(Type::v128) { memcpy(&v128, init, 16); } Literal::Literal(std::shared_ptr gcData, Type type) : gcData(gcData), type(type) { // Null data is only allowed if nullable. assert(gcData || type.isNullable()); // The type must be a proper type for GC data. assert(isData()); } Literal::Literal(std::unique_ptr&& rttSupers, Type type) : rttSupers(std::move(rttSupers)), type(type) { assert(type.isRtt()); } Literal::Literal(const Literal& other) : type(other.type) { if (type.isBasic()) { switch (type.getBasic()) { case Type::i32: case Type::f32: i32 = other.i32; return; case Type::i64: case Type::f64: i64 = other.i64; return; case Type::v128: memcpy(&v128, other.v128, 16); return; case Type::none: return; case Type::unreachable: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: break; } } if (other.isData()) { new (&gcData) std::shared_ptr(other.gcData); return; } if (type.isFunction()) { func = other.func; return; } if (type.isRtt()) { // Allocate a new RttSupers with a copy of the other's data. new (&rttSupers) auto(std::make_unique(*other.rttSupers)); return; } if (type.isRef()) { auto heapType = type.getHeapType(); if (heapType.isBasic()) { switch (heapType.getBasic()) { case HeapType::any: case HeapType::eq: return; // null case HeapType::i31: i32 = other.i32; return; case HeapType::func: case HeapType::data: WASM_UNREACHABLE("invalid type"); } } } } Literal::~Literal() { // Early exit for the common case; basic types need no special handling. if (type.isBasic()) { return; } if (isData()) { gcData.~shared_ptr(); } else if (type.isRtt()) { rttSupers.~unique_ptr(); } } Literal& Literal::operator=(const Literal& other) { if (this != &other) { this->~Literal(); new (this) auto(other); } return *this; } Literal Literal::makeCanonicalRtt(HeapType type) { auto supers = std::make_unique(); std::optional supertype; for (auto curr = type; (supertype = curr.getSuperType()); curr = *supertype) { supers->emplace_back(*supertype); } // We want the highest types to be first. std::reverse(supers->begin(), supers->end()); size_t depth = supers->size(); return Literal(std::move(supers), Type(Rtt(depth, type))); } template static void extractBytes(uint8_t (&dest)[16], const LaneArray& lanes) { std::array bytes; const size_t lane_width = 16 / Lanes; for (size_t lane_index = 0; lane_index < Lanes; ++lane_index) { uint8_t bits[16]; lanes[lane_index].getBits(bits); LaneT lane; memcpy(&lane, bits, sizeof(lane)); for (size_t offset = 0; offset < lane_width; ++offset) { bytes.at(lane_index * lane_width + offset) = uint8_t(lane >> (8 * offset)); } } memcpy(&dest, bytes.data(), sizeof(bytes)); } Literal::Literal(const LaneArray<16>& lanes) : type(Type::v128) { extractBytes(v128, lanes); } Literal::Literal(const LaneArray<8>& lanes) : type(Type::v128) { extractBytes(v128, lanes); } Literal::Literal(const LaneArray<4>& lanes) : type(Type::v128) { extractBytes(v128, lanes); } Literal::Literal(const LaneArray<2>& lanes) : type(Type::v128) { extractBytes(v128, lanes); } Literals Literal::makeZeros(Type type) { assert(type.isConcrete()); Literals zeroes; for (const auto& t : type) { zeroes.push_back(makeZero(t)); } return zeroes; } Literals Literal::makeOnes(Type type) { assert(type.isConcrete()); Literals units; for (const auto& t : type) { units.push_back(makeOne(t)); } return units; } Literals Literal::makeNegOnes(Type type) { assert(type.isConcrete()); Literals units; for (const auto& t : type) { units.push_back(makeNegOne(t)); } return units; } Literal Literal::makeZero(Type type) { assert(type.isSingle()); if (type.isRef()) { if (type == Type::i31ref) { return makeI31(0); } else { return makeNull(type); } } else if (type.isRtt()) { return Literal(type); } else { return makeFromInt32(0, type); } } Literal Literal::makeOne(Type type) { assert(type.isNumber()); return makeFromInt32(1, type); } Literal Literal::makeNegOne(Type type) { assert(type.isNumber()); return makeFromInt32(-1, type); } std::array Literal::getv128() const { assert(type == Type::v128); std::array ret; memcpy(ret.data(), v128, sizeof(ret)); return ret; } std::shared_ptr Literal::getGCData() const { assert(isData()); return gcData; } const RttSupers& Literal::getRttSupers() const { assert(type.isRtt()); return *rttSupers; } Literal Literal::castToF32() { assert(type == Type::i32); Literal ret(Type::f32); ret.i32 = i32; return ret; } Literal Literal::castToF64() { assert(type == Type::i64); Literal ret(Type::f64); ret.i64 = i64; return ret; } Literal Literal::castToI32() { assert(type == Type::f32); Literal ret(Type::i32); ret.i32 = i32; return ret; } Literal Literal::castToI64() { assert(type == Type::f64); Literal ret(Type::i64); ret.i64 = i64; return ret; } int64_t Literal::getInteger() const { switch (type.getBasic()) { case Type::i32: return i32; case Type::i64: return i64; default: abort(); } } uint64_t Literal::getUnsigned() const { switch (type.getBasic()) { case Type::i32: return static_cast(i32); case Type::i64: return i64; default: abort(); } } double Literal::getFloat() const { switch (type.getBasic()) { case Type::f32: return getf32(); case Type::f64: return getf64(); default: abort(); } } void Literal::getBits(uint8_t (&buf)[16]) const { memset(buf, 0, 16); switch (type.getBasic()) { case Type::i32: case Type::f32: memcpy(buf, &i32, sizeof(i32)); break; case Type::i64: case Type::f64: memcpy(buf, &i64, sizeof(i64)); break; case Type::v128: memcpy(buf, &v128, sizeof(v128)); break; case Type::none: case Type::unreachable: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: WASM_UNREACHABLE("invalid type"); } } bool Literal::operator==(const Literal& other) const { // The types must be identical, unless both are references - in that case, // nulls of different types *do* compare equal. if (type.isRef() && other.type.isRef() && (isNull() || other.isNull())) { return isNull() && other.isNull(); } if (type != other.type) { return false; } auto compareRef = [&]() { assert(type.isRef()); // Note that we've already handled nulls earlier. if (type.isFunction()) { assert(func.is() && other.func.is()); return func == other.func; } if (type.isData()) { return gcData == other.gcData; } // other non-null reference type literals cannot represent concrete values, // i.e. there is no concrete anyref or eqref other than null. WASM_UNREACHABLE("unexpected type"); }; if (type.isBasic()) { switch (type.getBasic()) { case Type::none: return true; // special voided literal case Type::i32: case Type::f32: case Type::i31ref: return i32 == other.i32; case Type::i64: case Type::f64: return i64 == other.i64; case Type::v128: return memcmp(v128, other.v128, 16) == 0; case Type::funcref: case Type::anyref: case Type::eqref: case Type::dataref: return compareRef(); case Type::unreachable: break; } } else if (type.isRef()) { return compareRef(); } else if (type.isRtt()) { return *rttSupers == *other.rttSupers; } WASM_UNREACHABLE("unexpected type"); } bool Literal::operator!=(const Literal& other) const { return !(*this == other); } bool Literal::isNaN() { if (type == Type::f32 && std::isnan(getf32())) { return true; } if (type == Type::f64 && std::isnan(getf64())) { return true; } // TODO: SIMD? return false; } uint32_t Literal::NaNPayload(float f) { assert(std::isnan(f) && "expected a NaN"); // SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF // NaN has all-one exponent and non-zero fraction. return ~0xff800000u & bit_cast(f); } uint64_t Literal::NaNPayload(double f) { assert(std::isnan(f) && "expected a NaN"); // SEEEEEEE EEEEFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF // NaN has all-one exponent and non-zero fraction. return ~0xfff0000000000000ull & bit_cast(f); } float Literal::setQuietNaN(float f) { assert(std::isnan(f) && "expected a NaN"); // An SNaN is a NaN with the most significant fraction bit clear. return bit_cast(0x00400000u | bit_cast(f)); } double Literal::setQuietNaN(double f) { assert(std::isnan(f) && "expected a NaN"); // An SNaN is a NaN with the most significant fraction bit clear. return bit_cast(0x0008000000000000ull | bit_cast(f)); } void Literal::printFloat(std::ostream& o, float f) { if (std::isnan(f)) { const char* sign = std::signbit(f) ? "-" : ""; o << sign << "nan"; if (uint32_t payload = NaNPayload(f)) { o << ":0x" << std::hex << payload << std::dec; } return; } printDouble(o, f); } void Literal::printDouble(std::ostream& o, double d) { if (d == 0 && std::signbit(d)) { o << "-0"; return; } if (std::isnan(d)) { const char* sign = std::signbit(d) ? "-" : ""; o << sign << "nan"; if (uint64_t payload = NaNPayload(d)) { o << ":0x" << std::hex << payload << std::dec; } return; } if (!std::isfinite(d)) { o << (std::signbit(d) ? "-inf" : "inf"); return; } const char* text = cashew::JSPrinter::numToString(d); // spec interpreter hates floats starting with '.' if (text[0] == '.') { o << '0'; } else if (text[0] == '-' && text[1] == '.') { o << "-0"; text++; } o << text; } void Literal::printVec128(std::ostream& o, const std::array& v) { o << std::hex; for (auto i = 0; i < 16; i += 4) { if (i) { o << " "; } o << "0x" << std::setfill('0') << std::setw(8) << uint32_t(v[i] | (v[i + 1] << 8) | (v[i + 2] << 16) | (v[i + 3] << 24)); } o << std::dec; } std::ostream& operator<<(std::ostream& o, Literal literal) { prepareMinorColor(o); if (literal.type.isFunction()) { if (literal.isNull()) { o << "funcref(null)"; } else { o << "funcref(" << literal.getFunc() << ")"; } } else if (literal.type.isRef()) { if (literal.isData()) { auto data = literal.getGCData(); if (data) { o << "[ref " << data->rtt << ' ' << data->values << ']'; } else { o << "[ref null " << literal.type << ']'; } } else { switch (literal.type.getHeapType().getBasic()) { case HeapType::any: assert(literal.isNull() && "unexpected non-null anyref literal"); o << "anyref(null)"; break; case HeapType::eq: assert(literal.isNull() && "unexpected non-null eqref literal"); o << "eqref(null)"; break; case HeapType::i31: o << "i31ref(" << literal.geti31() << ")"; break; case HeapType::func: case HeapType::data: WASM_UNREACHABLE("type should have been handled above"); } } } else if (literal.type.isRtt()) { o << "[rtt "; for (auto& super : literal.getRttSupers()) { o << super.type << " :> "; if (super.freshPtr) { o << " (fresh)"; } } o << literal.type << ']'; } else { TODO_SINGLE_COMPOUND(literal.type); switch (literal.type.getBasic()) { case Type::none: o << "?"; break; case Type::i32: o << literal.geti32(); break; case Type::i64: o << literal.geti64(); break; case Type::f32: literal.printFloat(o, literal.getf32()); break; case Type::f64: literal.printDouble(o, literal.getf64()); break; case Type::v128: o << "i32x4 "; literal.printVec128(o, literal.getv128()); break; case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } } restoreNormalColor(o); return o; } std::ostream& operator<<(std::ostream& o, wasm::Literals literals) { if (literals.size() == 1) { return o << literals[0]; } else { o << '('; if (literals.size() > 0) { o << literals[0]; } for (size_t i = 1; i < literals.size(); ++i) { o << ", " << literals[i]; } return o << ')'; } } Literal Literal::countLeadingZeroes() const { if (type == Type::i32) { return Literal((int32_t)Bits::countLeadingZeroes(i32)); } if (type == Type::i64) { return Literal((int64_t)Bits::countLeadingZeroes(i64)); } WASM_UNREACHABLE("invalid type"); } Literal Literal::countTrailingZeroes() const { if (type == Type::i32) { return Literal((int32_t)Bits::countTrailingZeroes(i32)); } if (type == Type::i64) { return Literal((int64_t)Bits::countTrailingZeroes(i64)); } WASM_UNREACHABLE("invalid type"); } Literal Literal::popCount() const { if (type == Type::i32) { return Literal((int32_t)Bits::popCount(i32)); } if (type == Type::i64) { return Literal((int64_t)Bits::popCount(i64)); } WASM_UNREACHABLE("invalid type"); } Literal Literal::extendToSI64() const { assert(type == Type::i32); return Literal((int64_t)i32); } Literal Literal::extendToUI64() const { assert(type == Type::i32); return Literal((uint64_t)(uint32_t)i32); } Literal Literal::extendToF64() const { assert(type == Type::f32); return Literal(double(getf32())); } Literal Literal::extendS8() const { if (type == Type::i32) { return Literal(int32_t(int8_t(geti32() & 0xFF))); } if (type == Type::i64) { return Literal(int64_t(int8_t(geti64() & 0xFF))); } WASM_UNREACHABLE("invalid type"); } Literal Literal::extendS16() const { if (type == Type::i32) { return Literal(int32_t(int16_t(geti32() & 0xFFFF))); } if (type == Type::i64) { return Literal(int64_t(int16_t(geti64() & 0xFFFF))); } WASM_UNREACHABLE("invalid type"); } Literal Literal::extendS32() const { if (type == Type::i64) { return Literal(int64_t(int32_t(geti64() & 0xFFFFFFFF))); } WASM_UNREACHABLE("invalid type"); } Literal Literal::wrapToI32() const { assert(type == Type::i64); return Literal((int32_t)i64); } Literal Literal::convertSIToF32() const { if (type == Type::i32) { return Literal(float(i32)); } if (type == Type::i64) { return Literal(float(i64)); } WASM_UNREACHABLE("invalid type"); } Literal Literal::convertUIToF32() const { if (type == Type::i32) { return Literal(float(uint32_t(i32))); } if (type == Type::i64) { return Literal(float(uint64_t(i64))); } WASM_UNREACHABLE("invalid type"); } Literal Literal::convertSIToF64() const { if (type == Type::i32) { return Literal(double(i32)); } if (type == Type::i64) { return Literal(double(i64)); } WASM_UNREACHABLE("invalid type"); } Literal Literal::convertUIToF64() const { if (type == Type::i32) { return Literal(double(uint32_t(i32))); } if (type == Type::i64) { return Literal(double(uint64_t(i64))); } WASM_UNREACHABLE("invalid type"); } template struct AsInt { using type = void; }; template<> struct AsInt { using type = int32_t; }; template<> struct AsInt { using type = int64_t; }; template::type)> static Literal saturating_trunc(typename AsInt::type val) { if (std::isnan(bit_cast(val))) { return Literal(I(0)); } if (!RangeCheck(val)) { if (std::signbit(bit_cast(val))) { return Literal(std::numeric_limits::min()); } else { return Literal(std::numeric_limits::max()); } } return Literal(I(std::trunc(bit_cast(val)))); } Literal Literal::truncSatToSI32() const { if (type == Type::f32) { return saturating_trunc( Literal(*this).castToI32().geti32()); } if (type == Type::f64) { return saturating_trunc( Literal(*this).castToI64().geti64()); } WASM_UNREACHABLE("invalid type"); } Literal Literal::truncSatToSI64() const { if (type == Type::f32) { return saturating_trunc( Literal(*this).castToI32().geti32()); } if (type == Type::f64) { return saturating_trunc( Literal(*this).castToI64().geti64()); } WASM_UNREACHABLE("invalid type"); } Literal Literal::truncSatToUI32() const { if (type == Type::f32) { return saturating_trunc( Literal(*this).castToI32().geti32()); } if (type == Type::f64) { return saturating_trunc( Literal(*this).castToI64().geti64()); } WASM_UNREACHABLE("invalid type"); } Literal Literal::truncSatToUI64() const { if (type == Type::f32) { return saturating_trunc( Literal(*this).castToI32().geti32()); } if (type == Type::f64) { return saturating_trunc( Literal(*this).castToI64().geti64()); } WASM_UNREACHABLE("invalid type"); } Literal Literal::eqz() const { switch (type.getBasic()) { case Type::i32: return eq(Literal(int32_t(0))); case Type::i64: return eq(Literal(int64_t(0))); case Type::f32: return eq(Literal(float(0))); case Type::f64: return eq(Literal(double(0))); case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("invalid type"); } Literal Literal::neg() const { switch (type.getBasic()) { case Type::i32: return Literal(-uint32_t(i32)); case Type::i64: return Literal(-uint64_t(i64)); case Type::f32: return Literal(i32 ^ 0x80000000).castToF32(); case Type::f64: return Literal(int64_t(i64 ^ 0x8000000000000000ULL)).castToF64(); case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("invalid type"); } Literal Literal::abs() const { switch (type.getBasic()) { case Type::i32: return Literal(std::abs(i32)); case Type::i64: return Literal(std::abs(i64)); case Type::f32: return Literal(i32 & 0x7fffffff).castToF32(); case Type::f64: return Literal(int64_t(i64 & 0x7fffffffffffffffULL)).castToF64(); case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("unexpected type"); } Literal Literal::ceil() const { switch (type.getBasic()) { case Type::f32: return Literal(std::ceil(getf32())); case Type::f64: return Literal(std::ceil(getf64())); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::floor() const { switch (type.getBasic()) { case Type::f32: return Literal(std::floor(getf32())); case Type::f64: return Literal(std::floor(getf64())); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::trunc() const { switch (type.getBasic()) { case Type::f32: return Literal(std::trunc(getf32())); case Type::f64: return Literal(std::trunc(getf64())); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::nearbyint() const { switch (type.getBasic()) { case Type::f32: return Literal(std::nearbyint(getf32())); case Type::f64: return Literal(std::nearbyint(getf64())); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::sqrt() const { switch (type.getBasic()) { case Type::f32: return Literal(std::sqrt(getf32())); case Type::f64: return Literal(std::sqrt(getf64())); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::demote() const { auto f64 = getf64(); if (std::isnan(f64)) { return Literal(float(f64)); } if (std::isinf(f64)) { return Literal(float(f64)); } // when close to the limit, but still truncatable to a valid value, do that // see // https://github.com/WebAssembly/sexpr-wasm-prototype/blob/2d375e8d502327e814d62a08f22da9d9b6b675dc/src/wasm-interpreter.c#L247 uint64_t bits = reinterpreti64(); if (bits > 0x47efffffe0000000ULL && bits < 0x47effffff0000000ULL) { return Literal(std::numeric_limits::max()); } if (bits > 0xc7efffffe0000000ULL && bits < 0xc7effffff0000000ULL) { return Literal(-std::numeric_limits::max()); } // when we must convert to infinity, do that if (f64 < -std::numeric_limits::max()) { return Literal(-std::numeric_limits::infinity()); } if (f64 > std::numeric_limits::max()) { return Literal(std::numeric_limits::infinity()); } return Literal(float(getf64())); } // Wasm has nondeterministic rules for NaN propagation in some operations. For // example. f32.neg is deterministic and just flips the sign, even of a NaN, but // f32.add is nondeterministic, and if one or more of the inputs is a NaN, then // // * if all NaNs are canonical NaNs, the output is some arbitrary canonical NaN // * otherwise the output is some arbitrary arithmetic NaN // // (canonical = NaN payload is 1000..000; arithmetic: 1???..???, that is, the // high bit is 1 and all others can be 0 or 1) // // For many things we don't need to care, and can just do a normal C++ add for // an f32.add, for example - the wasm rules are specified so that things like // that just work (in order for such math to be fast). However, for our // optimizer, it is useful to "standardize" NaNs when there is nondeterminism. // That is, when there are multiple valid outputs, it's nice to emit the same // one consistently, so that it doesn't look like the optimization changed // something. In other words, if the valid output of an expression is a set of // valid NaNs, and after optimization the output is still that same set, then // the optimization is valid. And if the interpreter picks the same NaN in both // cases from that identical set then nothing looks wrong to the fuzzer. template static Literal standardizeNaN(T result) { if (!std::isnan(result)) { return Literal(result); } // Pick a simple canonical payload, and positive. if (sizeof(T) == 4) { return Literal(Literal(uint32_t(0x7fc00000u)).reinterpretf32()); } else if (sizeof(T) == 8) { return Literal(Literal(uint64_t(0x7ff8000000000000ull)).reinterpretf64()); } else { WASM_UNREACHABLE("invalid float"); } } Literal Literal::add(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) + uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) + uint64_t(other.i64)); case Type::f32: return standardizeNaN(getf32() + other.getf32()); case Type::f64: return standardizeNaN(getf64() + other.getf64()); case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("unexpected type"); } Literal Literal::sub(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) - uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) - uint64_t(other.i64)); case Type::f32: return standardizeNaN(getf32() - other.getf32()); case Type::f64: return standardizeNaN(getf64() - other.getf64()); case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("unexpected type"); } template static T add_sat_s(T a, T b) { static_assert(std::is_signed::value, "Trying to instantiate add_sat_s with unsigned type"); using UT = typename std::make_unsigned::type; UT ua = static_cast(a); UT ub = static_cast(b); UT ures = ua + ub; // overflow if sign of result is different from sign of a and b if (static_cast((ures ^ ua) & (ures ^ ub)) < 0) { return (a < 0) ? std::numeric_limits::min() : std::numeric_limits::max(); } return static_cast(ures); } template static T sub_sat_s(T a, T b) { static_assert(std::is_signed::value, "Trying to instantiate sub_sat_s with unsigned type"); using UT = typename std::make_unsigned::type; UT ua = static_cast(a); UT ub = static_cast(b); UT ures = ua - ub; // overflow if a and b have different signs and result and a differ in sign if (static_cast((ua ^ ub) & (ures ^ ua)) < 0) { return (a < 0) ? std::numeric_limits::min() : std::numeric_limits::max(); } return static_cast(ures); } template static T add_sat_u(T a, T b) { static_assert(std::is_unsigned::value, "Trying to instantiate add_sat_u with signed type"); T res = a + b; // overflow if result is less than arguments return (res < a) ? std::numeric_limits::max() : res; } template static T sub_sat_u(T a, T b) { static_assert(std::is_unsigned::value, "Trying to instantiate sub_sat_u with signed type"); T res = a - b; // overflow if result is greater than a return (res > a) ? 0 : res; } Literal Literal::addSatSI8(const Literal& other) const { return Literal(add_sat_s(geti32(), other.geti32())); } Literal Literal::addSatUI8(const Literal& other) const { return Literal(add_sat_u(geti32(), other.geti32())); } Literal Literal::addSatSI16(const Literal& other) const { return Literal(add_sat_s(geti32(), other.geti32())); } Literal Literal::addSatUI16(const Literal& other) const { return Literal(add_sat_u(geti32(), other.geti32())); } Literal Literal::subSatSI8(const Literal& other) const { return Literal(sub_sat_s(geti32(), other.geti32())); } Literal Literal::subSatUI8(const Literal& other) const { return Literal(sub_sat_u(geti32(), other.geti32())); } Literal Literal::subSatSI16(const Literal& other) const { return Literal(sub_sat_s(geti32(), other.geti32())); } Literal Literal::subSatUI16(const Literal& other) const { return Literal(sub_sat_u(geti32(), other.geti32())); } Literal Literal::q15MulrSatSI16(const Literal& other) const { int64_t value = (int64_t(geti32()) * int64_t(other.geti32()) + 0x4000LL) >> 15LL; int64_t lower = std::numeric_limits::min(); int64_t upper = std::numeric_limits::max(); return Literal(int16_t(std::min(std::max(value, lower), upper))); } Literal Literal::mul(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) * uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) * uint64_t(other.i64)); case Type::f32: return standardizeNaN(getf32() * other.getf32()); case Type::f64: return standardizeNaN(getf64() * other.getf64()); case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("unexpected type"); } Literal Literal::div(const Literal& other) const { switch (type.getBasic()) { case Type::f32: { float lhs = getf32(), rhs = other.getf32(); float sign = std::signbit(lhs) == std::signbit(rhs) ? 0.f : -0.f; switch (std::fpclassify(rhs)) { case FP_ZERO: switch (std::fpclassify(lhs)) { case FP_NAN: case FP_ZERO: return standardizeNaN(lhs / rhs); case FP_NORMAL: // fallthrough case FP_SUBNORMAL: // fallthrough case FP_INFINITE: return Literal( std::copysign(std::numeric_limits::infinity(), sign)); default: WASM_UNREACHABLE("invalid fp classification"); } case FP_NAN: // fallthrough case FP_INFINITE: // fallthrough case FP_NORMAL: // fallthrough case FP_SUBNORMAL: return standardizeNaN(lhs / rhs); default: WASM_UNREACHABLE("invalid fp classification"); } } case Type::f64: { double lhs = getf64(), rhs = other.getf64(); double sign = std::signbit(lhs) == std::signbit(rhs) ? 0. : -0.; switch (std::fpclassify(rhs)) { case FP_ZERO: switch (std::fpclassify(lhs)) { case FP_NAN: case FP_ZERO: return standardizeNaN(lhs / rhs); case FP_NORMAL: // fallthrough case FP_SUBNORMAL: // fallthrough case FP_INFINITE: return Literal( std::copysign(std::numeric_limits::infinity(), sign)); default: WASM_UNREACHABLE("invalid fp classification"); } case FP_NAN: // fallthrough case FP_INFINITE: // fallthrough case FP_NORMAL: // fallthrough case FP_SUBNORMAL: return standardizeNaN(lhs / rhs); default: WASM_UNREACHABLE("invalid fp classification"); } } default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::divS(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 / other.i32); case Type::i64: return Literal(i64 / other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::divU(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) / uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) / uint64_t(other.i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::remS(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 % other.i32); case Type::i64: return Literal(i64 % other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::remU(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) % uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) % uint64_t(other.i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::minInt(const Literal& other) const { return geti32() < other.geti32() ? *this : other; } Literal Literal::maxInt(const Literal& other) const { return geti32() > other.geti32() ? *this : other; } Literal Literal::minUInt(const Literal& other) const { return uint32_t(geti32()) < uint32_t(other.geti32()) ? *this : other; } Literal Literal::maxUInt(const Literal& other) const { return uint32_t(geti32()) > uint32_t(other.geti32()) ? *this : other; } Literal Literal::avgrUInt(const Literal& other) const { return Literal((geti32() + other.geti32() + 1) / 2); } Literal Literal::and_(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 & other.i32); case Type::i64: return Literal(i64 & other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::or_(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 | other.i32); case Type::i64: return Literal(i64 | other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::xor_(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 ^ other.i32); case Type::i64: return Literal(i64 ^ other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::shl(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) << Bits::getEffectiveShifts(other.i32, Type::i32)); case Type::i64: return Literal(uint64_t(i64) << Bits::getEffectiveShifts(other.i64, Type::i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::shrS(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 >> Bits::getEffectiveShifts(other.i32, Type::i32)); case Type::i64: return Literal(i64 >> Bits::getEffectiveShifts(other.i64, Type::i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::shrU(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) >> Bits::getEffectiveShifts(other.i32, Type::i32)); case Type::i64: return Literal(uint64_t(i64) >> Bits::getEffectiveShifts(other.i64, Type::i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::rotL(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(Bits::rotateLeft(uint32_t(i32), uint32_t(other.i32))); case Type::i64: return Literal(Bits::rotateLeft(uint64_t(i64), uint64_t(other.i64))); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::rotR(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(Bits::rotateRight(uint32_t(i32), uint32_t(other.i32))); case Type::i64: return Literal(Bits::rotateRight(uint64_t(i64), uint64_t(other.i64))); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::eq(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 == other.i32); case Type::i64: return Literal(i64 == other.i64); case Type::f32: return Literal(getf32() == other.getf32()); case Type::f64: return Literal(getf64() == other.getf64()); case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("unexpected type"); } Literal Literal::ne(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 != other.i32); case Type::i64: return Literal(i64 != other.i64); case Type::f32: return Literal(getf32() != other.getf32()); case Type::f64: return Literal(getf64() != other.getf64()); case Type::v128: case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } WASM_UNREACHABLE("unexpected type"); } Literal Literal::ltS(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 < other.i32); case Type::i64: return Literal(i64 < other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::ltU(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) < uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) < uint64_t(other.i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::lt(const Literal& other) const { switch (type.getBasic()) { case Type::f32: return Literal(getf32() < other.getf32()); case Type::f64: return Literal(getf64() < other.getf64()); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::leS(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 <= other.i32); case Type::i64: return Literal(i64 <= other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::leU(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) <= uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) <= uint64_t(other.i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::le(const Literal& other) const { switch (type.getBasic()) { case Type::f32: return Literal(getf32() <= other.getf32()); case Type::f64: return Literal(getf64() <= other.getf64()); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::gtS(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 > other.i32); case Type::i64: return Literal(i64 > other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::gtU(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) > uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) > uint64_t(other.i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::gt(const Literal& other) const { switch (type.getBasic()) { case Type::f32: return Literal(getf32() > other.getf32()); case Type::f64: return Literal(getf64() > other.getf64()); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::geS(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(i32 >= other.i32); case Type::i64: return Literal(i64 >= other.i64); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::geU(const Literal& other) const { switch (type.getBasic()) { case Type::i32: return Literal(uint32_t(i32) >= uint32_t(other.i32)); case Type::i64: return Literal(uint64_t(i64) >= uint64_t(other.i64)); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::ge(const Literal& other) const { switch (type.getBasic()) { case Type::f32: return Literal(getf32() >= other.getf32()); case Type::f64: return Literal(getf64() >= other.getf64()); default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::min(const Literal& other) const { switch (type.getBasic()) { case Type::f32: { auto l = getf32(), r = other.getf32(); if (std::isnan(l)) { return standardizeNaN(l); } if (std::isnan(r)) { return standardizeNaN(r); } if (l == r && l == 0) { return Literal(std::signbit(l) ? l : r); } return Literal(std::min(l, r)); } case Type::f64: { auto l = getf64(), r = other.getf64(); if (std::isnan(l)) { return standardizeNaN(l); } if (std::isnan(r)) { return standardizeNaN(r); } if (l == r && l == 0) { return Literal(std::signbit(l) ? l : r); } return Literal(std::min(l, r)); } default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::max(const Literal& other) const { switch (type.getBasic()) { case Type::f32: { auto l = getf32(), r = other.getf32(); if (std::isnan(l)) { return standardizeNaN(l); } if (std::isnan(r)) { return standardizeNaN(r); } if (l == r && l == 0) { return Literal(std::signbit(l) ? r : l); } return Literal(std::max(l, r)); } case Type::f64: { auto l = getf64(), r = other.getf64(); if (std::isnan(l)) { return standardizeNaN(l); } if (std::isnan(r)) { return standardizeNaN(r); } if (l == r && l == 0) { return Literal(std::signbit(l) ? r : l); } return Literal(std::max(l, r)); } default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::pmin(const Literal& other) const { switch (type.getBasic()) { case Type::f32: case Type::f64: return other.lt(*this).geti32() ? other : *this; default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::pmax(const Literal& other) const { switch (type.getBasic()) { case Type::f32: case Type::f64: return this->lt(other).geti32() ? other : *this; default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::copysign(const Literal& other) const { // operate on bits directly, to avoid signalling bit being set on a float switch (type.getBasic()) { case Type::f32: return Literal((i32 & 0x7fffffff) | (other.i32 & 0x80000000)).castToF32(); break; case Type::f64: return Literal((i64 & 0x7fffffffffffffffUL) | (other.i64 & 0x8000000000000000UL)) .castToF64(); break; default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::fma(const Literal& left, const Literal& right) const { switch (type.getBasic()) { case Type::f32: return Literal(::fmaf(left.getf32(), right.getf32(), getf32())); break; case Type::f64: return Literal(::fma(left.getf64(), right.getf64(), getf64())); break; default: WASM_UNREACHABLE("unexpected type"); } } Literal Literal::fms(const Literal& left, const Literal& right) const { switch (type.getBasic()) { case Type::f32: return Literal(::fmaf(-left.getf32(), right.getf32(), getf32())); break; case Type::f64: return Literal(::fma(-left.getf64(), right.getf64(), getf64())); break; default: WASM_UNREACHABLE("unexpected type"); } } template static LaneArray getLanes(const Literal& val) { assert(val.type == Type::v128); const size_t lane_width = 16 / Lanes; std::array bytes = val.getv128(); LaneArray lanes; for (size_t lane_index = 0; lane_index < Lanes; ++lane_index) { LaneT lane(0); for (size_t offset = 0; offset < lane_width; ++offset) { lane |= LaneT(bytes.at(lane_index * lane_width + offset)) << LaneT(8 * offset); } lanes.at(lane_index) = Literal(lane); } return lanes; } LaneArray<16> Literal::getLanesSI8x16() const { return getLanes(*this); } LaneArray<16> Literal::getLanesUI8x16() const { return getLanes(*this); } LaneArray<8> Literal::getLanesSI16x8() const { return getLanes(*this); } LaneArray<8> Literal::getLanesUI16x8() const { return getLanes(*this); } LaneArray<4> Literal::getLanesI32x4() const { return getLanes(*this); } LaneArray<2> Literal::getLanesI64x2() const { return getLanes(*this); } LaneArray<4> Literal::getLanesF32x4() const { auto lanes = getLanesI32x4(); for (size_t i = 0; i < lanes.size(); ++i) { lanes[i] = lanes[i].castToF32(); } return lanes; } LaneArray<2> Literal::getLanesF64x2() const { auto lanes = getLanesI64x2(); for (size_t i = 0; i < lanes.size(); ++i) { lanes[i] = lanes[i].castToF64(); } return lanes; } Literal Literal::shuffleV8x16(const Literal& other, const std::array& mask) const { assert(type == Type::v128); uint8_t bytes[16]; for (size_t i = 0; i < mask.size(); ++i) { bytes[i] = (mask[i] < 16) ? v128[mask[i]] : other.v128[mask[i] - 16]; } return Literal(bytes); } template static Literal splat(const Literal& val) { assert(val.type == Ty); LaneArray lanes; lanes.fill(val); return Literal(lanes); } Literal Literal::splatI8x16() const { return splat(*this); } Literal Literal::splatI16x8() const { return splat(*this); } Literal Literal::splatI32x4() const { return splat(*this); } Literal Literal::splatI64x2() const { return splat(*this); } Literal Literal::splatF32x4() const { return splat(*this); } Literal Literal::splatF64x2() const { return splat(*this); } Literal Literal::extractLaneSI8x16(uint8_t index) const { return getLanesSI8x16().at(index); } Literal Literal::extractLaneUI8x16(uint8_t index) const { return getLanesUI8x16().at(index); } Literal Literal::extractLaneSI16x8(uint8_t index) const { return getLanesSI16x8().at(index); } Literal Literal::extractLaneUI16x8(uint8_t index) const { return getLanesUI16x8().at(index); } Literal Literal::extractLaneI32x4(uint8_t index) const { return getLanesI32x4().at(index); } Literal Literal::extractLaneI64x2(uint8_t index) const { return getLanesI64x2().at(index); } Literal Literal::extractLaneF32x4(uint8_t index) const { return getLanesF32x4().at(index); } Literal Literal::extractLaneF64x2(uint8_t index) const { return getLanesF64x2().at(index); } template (Literal::*IntoLanes)() const> static Literal replace(const Literal& val, const Literal& other, uint8_t index) { LaneArray lanes = (val.*IntoLanes)(); lanes.at(index) = other; auto ret = Literal(lanes); return ret; } Literal Literal::replaceLaneI8x16(const Literal& other, uint8_t index) const { return replace<16, &Literal::getLanesUI8x16>(*this, other, index); } Literal Literal::replaceLaneI16x8(const Literal& other, uint8_t index) const { return replace<8, &Literal::getLanesUI16x8>(*this, other, index); } Literal Literal::replaceLaneI32x4(const Literal& other, uint8_t index) const { return replace<4, &Literal::getLanesI32x4>(*this, other, index); } Literal Literal::replaceLaneI64x2(const Literal& other, uint8_t index) const { return replace<2, &Literal::getLanesI64x2>(*this, other, index); } Literal Literal::replaceLaneF32x4(const Literal& other, uint8_t index) const { return replace<4, &Literal::getLanesF32x4>(*this, other, index); } Literal Literal::replaceLaneF64x2(const Literal& other, uint8_t index) const { return replace<2, &Literal::getLanesF64x2>(*this, other, index); } template (Literal::*IntoLanes)() const, Literal (Literal::*UnaryOp)(void) const> static Literal unary(const Literal& val) { LaneArray lanes = (val.*IntoLanes)(); for (size_t i = 0; i < Lanes; ++i) { lanes[i] = (lanes[i].*UnaryOp)(); } return Literal(lanes); } Literal Literal::notV128() const { std::array ones; ones.fill(0xff); return xorV128(Literal(ones.data())); } Literal Literal::absI8x16() const { return unary<16, &Literal::getLanesSI8x16, &Literal::abs>(*this); } Literal Literal::absI16x8() const { return unary<8, &Literal::getLanesSI16x8, &Literal::abs>(*this); } Literal Literal::absI32x4() const { return unary<4, &Literal::getLanesI32x4, &Literal::abs>(*this); } Literal Literal::absI64x2() const { return unary<2, &Literal::getLanesI64x2, &Literal::abs>(*this); } Literal Literal::negI8x16() const { return unary<16, &Literal::getLanesUI8x16, &Literal::neg>(*this); } Literal Literal::popcntI8x16() const { return unary<16, &Literal::getLanesUI8x16, &Literal::popCount>(*this); } Literal Literal::negI16x8() const { return unary<8, &Literal::getLanesUI16x8, &Literal::neg>(*this); } Literal Literal::negI32x4() const { return unary<4, &Literal::getLanesI32x4, &Literal::neg>(*this); } Literal Literal::negI64x2() const { return unary<2, &Literal::getLanesI64x2, &Literal::neg>(*this); } Literal Literal::absF32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::abs>(*this); } Literal Literal::negF32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::neg>(*this); } Literal Literal::sqrtF32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::sqrt>(*this); } Literal Literal::ceilF32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::ceil>(*this); } Literal Literal::floorF32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::floor>(*this); } Literal Literal::truncF32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::trunc>(*this); } Literal Literal::nearestF32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::nearbyint>(*this); } Literal Literal::absF64x2() const { return unary<2, &Literal::getLanesF64x2, &Literal::abs>(*this); } Literal Literal::negF64x2() const { return unary<2, &Literal::getLanesF64x2, &Literal::neg>(*this); } Literal Literal::sqrtF64x2() const { return unary<2, &Literal::getLanesF64x2, &Literal::sqrt>(*this); } Literal Literal::ceilF64x2() const { return unary<2, &Literal::getLanesF64x2, &Literal::ceil>(*this); } Literal Literal::floorF64x2() const { return unary<2, &Literal::getLanesF64x2, &Literal::floor>(*this); } Literal Literal::truncF64x2() const { return unary<2, &Literal::getLanesF64x2, &Literal::trunc>(*this); } Literal Literal::nearestF64x2() const { return unary<2, &Literal::getLanesF64x2, &Literal::nearbyint>(*this); } template static Literal extAddPairwise(const Literal& vec) { LaneArray lanes = getLanes(vec); LaneArray result; for (size_t i = 0; i < Lanes; i++) { result[i] = Literal((LaneTo)(LaneFrom)lanes[i * 2 + 0].geti32() + (LaneTo)(LaneFrom)lanes[i * 2 + 1].geti32()); } return Literal(result); } Literal Literal::extAddPairwiseToSI16x8() const { return extAddPairwise<8, int8_t, int16_t>(*this); } Literal Literal::extAddPairwiseToUI16x8() const { return extAddPairwise<8, uint8_t, int16_t>(*this); } Literal Literal::extAddPairwiseToSI32x4() const { return extAddPairwise<4, int16_t, int32_t>(*this); } Literal Literal::extAddPairwiseToUI32x4() const { return extAddPairwise<4, uint16_t, uint32_t>(*this); } Literal Literal::truncSatToSI32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::truncSatToSI32>(*this); } Literal Literal::truncSatToUI32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::truncSatToUI32>(*this); } Literal Literal::convertSToF32x4() const { return unary<4, &Literal::getLanesI32x4, &Literal::convertSIToF32>(*this); } Literal Literal::convertUToF32x4() const { return unary<4, &Literal::getLanesI32x4, &Literal::convertUIToF32>(*this); } Literal Literal::anyTrueV128() const { auto lanes = getLanesI32x4(); for (size_t i = 0; i < 4; ++i) { if (lanes[i].geti32() != 0) { return Literal(int32_t(1)); } } return Literal(int32_t(0)); } template (Literal::*IntoLanes)() const> static Literal all_true(const Literal& val) { LaneArray lanes = (val.*IntoLanes)(); for (size_t i = 0; i < Lanes; ++i) { if (lanes[i] == Literal::makeZero(lanes[i].type)) { return Literal(int32_t(0)); } } return Literal(int32_t(1)); } template (Literal::*IntoLanes)() const> static Literal bitmask(const Literal& val) { uint32_t result = 0; LaneArray lanes = (val.*IntoLanes)(); for (size_t i = 0; i < Lanes; ++i) { if (lanes[i].geti32() & (1 << 31)) { result = result | (1 << i); } } return Literal(result); } Literal Literal::allTrueI8x16() const { return all_true<16, &Literal::getLanesUI8x16>(*this); } Literal Literal::bitmaskI8x16() const { return bitmask<16, &Literal::getLanesSI8x16>(*this); } Literal Literal::allTrueI16x8() const { return all_true<8, &Literal::getLanesUI16x8>(*this); } Literal Literal::bitmaskI16x8() const { return bitmask<8, &Literal::getLanesSI16x8>(*this); } Literal Literal::allTrueI32x4() const { return all_true<4, &Literal::getLanesI32x4>(*this); } Literal Literal::bitmaskI32x4() const { return bitmask<4, &Literal::getLanesI32x4>(*this); } Literal Literal::allTrueI64x2() const { return all_true<2, &Literal::getLanesI64x2>(*this); } Literal Literal::bitmaskI64x2() const { uint32_t result = 0; LaneArray<2> lanes = getLanesI64x2(); for (size_t i = 0; i < 2; ++i) { if (lanes[i].geti64() & (1ll << 63)) { result = result | (1 << i); } } return Literal(result); } template (Literal::*IntoLanes)() const, Literal (Literal::*ShiftOp)(const Literal&) const> static Literal shift(const Literal& vec, const Literal& shift) { assert(shift.type == Type::i32); size_t lane_bits = 128 / Lanes; LaneArray lanes = (vec.*IntoLanes)(); for (size_t i = 0; i < Lanes; ++i) { lanes[i] = (lanes[i].*ShiftOp)(Literal(int32_t(shift.geti32() % lane_bits))); } return Literal(lanes); } Literal Literal::shlI8x16(const Literal& other) const { return shift<16, &Literal::getLanesUI8x16, &Literal::shl>(*this, other); } Literal Literal::shrSI8x16(const Literal& other) const { return shift<16, &Literal::getLanesSI8x16, &Literal::shrS>(*this, other); } Literal Literal::shrUI8x16(const Literal& other) const { return shift<16, &Literal::getLanesUI8x16, &Literal::shrU>(*this, other); } Literal Literal::shlI16x8(const Literal& other) const { return shift<8, &Literal::getLanesUI16x8, &Literal::shl>(*this, other); } Literal Literal::shrSI16x8(const Literal& other) const { return shift<8, &Literal::getLanesSI16x8, &Literal::shrS>(*this, other); } Literal Literal::shrUI16x8(const Literal& other) const { return shift<8, &Literal::getLanesUI16x8, &Literal::shrU>(*this, other); } Literal Literal::shlI32x4(const Literal& other) const { return shift<4, &Literal::getLanesI32x4, &Literal::shl>(*this, other); } Literal Literal::shrSI32x4(const Literal& other) const { return shift<4, &Literal::getLanesI32x4, &Literal::shrS>(*this, other); } Literal Literal::shrUI32x4(const Literal& other) const { return shift<4, &Literal::getLanesI32x4, &Literal::shrU>(*this, other); } Literal Literal::shlI64x2(const Literal& other) const { return shift<2, &Literal::getLanesI64x2, &Literal::shl>(*this, other); } Literal Literal::shrSI64x2(const Literal& other) const { return shift<2, &Literal::getLanesI64x2, &Literal::shrS>(*this, other); } Literal Literal::shrUI64x2(const Literal& other) const { return shift<2, &Literal::getLanesI64x2, &Literal::shrU>(*this, other); } template (Literal::*IntoLanes)() const, Literal (Literal::*CompareOp)(const Literal&) const, typename LaneT = int32_t> static Literal compare(const Literal& val, const Literal& other) { LaneArray lanes = (val.*IntoLanes)(); LaneArray other_lanes = (other.*IntoLanes)(); for (size_t i = 0; i < Lanes; ++i) { lanes[i] = (lanes[i].*CompareOp)(other_lanes[i]) == Literal(int32_t(1)) ? Literal(LaneT(-1)) : Literal(LaneT(0)); } return Literal(lanes); } Literal Literal::eqI8x16(const Literal& other) const { return compare<16, &Literal::getLanesUI8x16, &Literal::eq>(*this, other); } Literal Literal::neI8x16(const Literal& other) const { return compare<16, &Literal::getLanesUI8x16, &Literal::ne>(*this, other); } Literal Literal::ltSI8x16(const Literal& other) const { return compare<16, &Literal::getLanesSI8x16, &Literal::ltS>(*this, other); } Literal Literal::ltUI8x16(const Literal& other) const { return compare<16, &Literal::getLanesUI8x16, &Literal::ltU>(*this, other); } Literal Literal::gtSI8x16(const Literal& other) const { return compare<16, &Literal::getLanesSI8x16, &Literal::gtS>(*this, other); } Literal Literal::gtUI8x16(const Literal& other) const { return compare<16, &Literal::getLanesUI8x16, &Literal::gtU>(*this, other); } Literal Literal::leSI8x16(const Literal& other) const { return compare<16, &Literal::getLanesSI8x16, &Literal::leS>(*this, other); } Literal Literal::leUI8x16(const Literal& other) const { return compare<16, &Literal::getLanesUI8x16, &Literal::leU>(*this, other); } Literal Literal::geSI8x16(const Literal& other) const { return compare<16, &Literal::getLanesSI8x16, &Literal::geS>(*this, other); } Literal Literal::geUI8x16(const Literal& other) const { return compare<16, &Literal::getLanesUI8x16, &Literal::geU>(*this, other); } Literal Literal::eqI16x8(const Literal& other) const { return compare<8, &Literal::getLanesUI16x8, &Literal::eq>(*this, other); } Literal Literal::neI16x8(const Literal& other) const { return compare<8, &Literal::getLanesUI16x8, &Literal::ne>(*this, other); } Literal Literal::ltSI16x8(const Literal& other) const { return compare<8, &Literal::getLanesSI16x8, &Literal::ltS>(*this, other); } Literal Literal::ltUI16x8(const Literal& other) const { return compare<8, &Literal::getLanesUI16x8, &Literal::ltU>(*this, other); } Literal Literal::gtSI16x8(const Literal& other) const { return compare<8, &Literal::getLanesSI16x8, &Literal::gtS>(*this, other); } Literal Literal::gtUI16x8(const Literal& other) const { return compare<8, &Literal::getLanesUI16x8, &Literal::gtU>(*this, other); } Literal Literal::leSI16x8(const Literal& other) const { return compare<8, &Literal::getLanesSI16x8, &Literal::leS>(*this, other); } Literal Literal::leUI16x8(const Literal& other) const { return compare<8, &Literal::getLanesUI16x8, &Literal::leU>(*this, other); } Literal Literal::geSI16x8(const Literal& other) const { return compare<8, &Literal::getLanesSI16x8, &Literal::geS>(*this, other); } Literal Literal::geUI16x8(const Literal& other) const { return compare<8, &Literal::getLanesUI16x8, &Literal::geU>(*this, other); } Literal Literal::eqI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::eq>(*this, other); } Literal Literal::neI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::ne>(*this, other); } Literal Literal::ltSI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::ltS>(*this, other); } Literal Literal::ltUI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::ltU>(*this, other); } Literal Literal::gtSI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::gtS>(*this, other); } Literal Literal::gtUI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::gtU>(*this, other); } Literal Literal::leSI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::leS>(*this, other); } Literal Literal::leUI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::leU>(*this, other); } Literal Literal::geSI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::geS>(*this, other); } Literal Literal::geUI32x4(const Literal& other) const { return compare<4, &Literal::getLanesI32x4, &Literal::geU>(*this, other); } Literal Literal::eqI64x2(const Literal& other) const { return compare<2, &Literal::getLanesI64x2, &Literal::eq, int64_t>(*this, other); } Literal Literal::neI64x2(const Literal& other) const { return compare<2, &Literal::getLanesI64x2, &Literal::ne, int64_t>(*this, other); } Literal Literal::ltSI64x2(const Literal& other) const { return compare<2, &Literal::getLanesI64x2, &Literal::ltS, int64_t>(*this, other); } Literal Literal::gtSI64x2(const Literal& other) const { return compare<2, &Literal::getLanesI64x2, &Literal::gtS, int64_t>(*this, other); } Literal Literal::leSI64x2(const Literal& other) const { return compare<2, &Literal::getLanesI64x2, &Literal::leS, int64_t>(*this, other); } Literal Literal::geSI64x2(const Literal& other) const { return compare<2, &Literal::getLanesI64x2, &Literal::geS, int64_t>(*this, other); } Literal Literal::eqF32x4(const Literal& other) const { return compare<4, &Literal::getLanesF32x4, &Literal::eq>(*this, other); } Literal Literal::neF32x4(const Literal& other) const { return compare<4, &Literal::getLanesF32x4, &Literal::ne>(*this, other); } Literal Literal::ltF32x4(const Literal& other) const { return compare<4, &Literal::getLanesF32x4, &Literal::lt>(*this, other); } Literal Literal::gtF32x4(const Literal& other) const { return compare<4, &Literal::getLanesF32x4, &Literal::gt>(*this, other); } Literal Literal::leF32x4(const Literal& other) const { return compare<4, &Literal::getLanesF32x4, &Literal::le>(*this, other); } Literal Literal::geF32x4(const Literal& other) const { return compare<4, &Literal::getLanesF32x4, &Literal::ge>(*this, other); } Literal Literal::eqF64x2(const Literal& other) const { return compare<2, &Literal::getLanesF64x2, &Literal::eq, int64_t>(*this, other); } Literal Literal::neF64x2(const Literal& other) const { return compare<2, &Literal::getLanesF64x2, &Literal::ne, int64_t>(*this, other); } Literal Literal::ltF64x2(const Literal& other) const { return compare<2, &Literal::getLanesF64x2, &Literal::lt, int64_t>(*this, other); } Literal Literal::gtF64x2(const Literal& other) const { return compare<2, &Literal::getLanesF64x2, &Literal::gt, int64_t>(*this, other); } Literal Literal::leF64x2(const Literal& other) const { return compare<2, &Literal::getLanesF64x2, &Literal::le, int64_t>(*this, other); } Literal Literal::geF64x2(const Literal& other) const { return compare<2, &Literal::getLanesF64x2, &Literal::ge, int64_t>(*this, other); } template (Literal::*IntoLanes)() const, Literal (Literal::*BinaryOp)(const Literal&) const> static Literal binary(const Literal& val, const Literal& other) { LaneArray lanes = (val.*IntoLanes)(); LaneArray other_lanes = (other.*IntoLanes)(); for (size_t i = 0; i < Lanes; ++i) { lanes[i] = (lanes[i].*BinaryOp)(other_lanes[i]); } return Literal(lanes); } Literal Literal::andV128(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::and_>(*this, other); } Literal Literal::orV128(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::or_>(*this, other); } Literal Literal::xorV128(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::xor_>(*this, other); } Literal Literal::addI8x16(const Literal& other) const { return binary<16, &Literal::getLanesUI8x16, &Literal::add>(*this, other); } Literal Literal::addSaturateSI8x16(const Literal& other) const { return binary<16, &Literal::getLanesUI8x16, &Literal::addSatSI8>(*this, other); } Literal Literal::addSaturateUI8x16(const Literal& other) const { return binary<16, &Literal::getLanesSI8x16, &Literal::addSatUI8>(*this, other); } Literal Literal::subI8x16(const Literal& other) const { return binary<16, &Literal::getLanesUI8x16, &Literal::sub>(*this, other); } Literal Literal::subSaturateSI8x16(const Literal& other) const { return binary<16, &Literal::getLanesUI8x16, &Literal::subSatSI8>(*this, other); } Literal Literal::subSaturateUI8x16(const Literal& other) const { return binary<16, &Literal::getLanesSI8x16, &Literal::subSatUI8>(*this, other); } Literal Literal::minSI8x16(const Literal& other) const { return binary<16, &Literal::getLanesSI8x16, &Literal::minInt>(*this, other); } Literal Literal::minUI8x16(const Literal& other) const { return binary<16, &Literal::getLanesUI8x16, &Literal::minInt>(*this, other); } Literal Literal::maxSI8x16(const Literal& other) const { return binary<16, &Literal::getLanesSI8x16, &Literal::maxInt>(*this, other); } Literal Literal::maxUI8x16(const Literal& other) const { return binary<16, &Literal::getLanesUI8x16, &Literal::maxInt>(*this, other); } Literal Literal::avgrUI8x16(const Literal& other) const { return binary<16, &Literal::getLanesUI8x16, &Literal::avgrUInt>(*this, other); } Literal Literal::addI16x8(const Literal& other) const { return binary<8, &Literal::getLanesUI16x8, &Literal::add>(*this, other); } Literal Literal::addSaturateSI16x8(const Literal& other) const { return binary<8, &Literal::getLanesUI16x8, &Literal::addSatSI16>(*this, other); } Literal Literal::addSaturateUI16x8(const Literal& other) const { return binary<8, &Literal::getLanesSI16x8, &Literal::addSatUI16>(*this, other); } Literal Literal::subI16x8(const Literal& other) const { return binary<8, &Literal::getLanesUI16x8, &Literal::sub>(*this, other); } Literal Literal::subSaturateSI16x8(const Literal& other) const { return binary<8, &Literal::getLanesUI16x8, &Literal::subSatSI16>(*this, other); } Literal Literal::subSaturateUI16x8(const Literal& other) const { return binary<8, &Literal::getLanesSI16x8, &Literal::subSatUI16>(*this, other); } Literal Literal::mulI16x8(const Literal& other) const { return binary<8, &Literal::getLanesUI16x8, &Literal::mul>(*this, other); } Literal Literal::minSI16x8(const Literal& other) const { return binary<8, &Literal::getLanesSI16x8, &Literal::minInt>(*this, other); } Literal Literal::minUI16x8(const Literal& other) const { return binary<8, &Literal::getLanesUI16x8, &Literal::minInt>(*this, other); } Literal Literal::maxSI16x8(const Literal& other) const { return binary<8, &Literal::getLanesSI16x8, &Literal::maxInt>(*this, other); } Literal Literal::maxUI16x8(const Literal& other) const { return binary<8, &Literal::getLanesUI16x8, &Literal::maxInt>(*this, other); } Literal Literal::avgrUI16x8(const Literal& other) const { return binary<8, &Literal::getLanesUI16x8, &Literal::avgrUInt>(*this, other); } Literal Literal::q15MulrSatSI16x8(const Literal& other) const { return binary<8, &Literal::getLanesSI16x8, &Literal::q15MulrSatSI16>(*this, other); } Literal Literal::addI32x4(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::add>(*this, other); } Literal Literal::subI32x4(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::sub>(*this, other); } Literal Literal::mulI32x4(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::mul>(*this, other); } Literal Literal::minSI32x4(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::minInt>(*this, other); } Literal Literal::minUI32x4(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::minUInt>(*this, other); } Literal Literal::maxSI32x4(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::maxInt>(*this, other); } Literal Literal::maxUI32x4(const Literal& other) const { return binary<4, &Literal::getLanesI32x4, &Literal::maxUInt>(*this, other); } Literal Literal::addI64x2(const Literal& other) const { return binary<2, &Literal::getLanesI64x2, &Literal::add>(*this, other); } Literal Literal::subI64x2(const Literal& other) const { return binary<2, &Literal::getLanesI64x2, &Literal::sub>(*this, other); } Literal Literal::mulI64x2(const Literal& other) const { return binary<2, &Literal::getLanesI64x2, &Literal::mul>(*this, other); } Literal Literal::addF32x4(const Literal& other) const { return binary<4, &Literal::getLanesF32x4, &Literal::add>(*this, other); } Literal Literal::subF32x4(const Literal& other) const { return binary<4, &Literal::getLanesF32x4, &Literal::sub>(*this, other); } Literal Literal::mulF32x4(const Literal& other) const { return binary<4, &Literal::getLanesF32x4, &Literal::mul>(*this, other); } Literal Literal::divF32x4(const Literal& other) const { return binary<4, &Literal::getLanesF32x4, &Literal::div>(*this, other); } Literal Literal::minF32x4(const Literal& other) const { return binary<4, &Literal::getLanesF32x4, &Literal::min>(*this, other); } Literal Literal::maxF32x4(const Literal& other) const { return binary<4, &Literal::getLanesF32x4, &Literal::max>(*this, other); } Literal Literal::pminF32x4(const Literal& other) const { return binary<4, &Literal::getLanesF32x4, &Literal::pmin>(*this, other); } Literal Literal::pmaxF32x4(const Literal& other) const { return binary<4, &Literal::getLanesF32x4, &Literal::pmax>(*this, other); } Literal Literal::addF64x2(const Literal& other) const { return binary<2, &Literal::getLanesF64x2, &Literal::add>(*this, other); } Literal Literal::subF64x2(const Literal& other) const { return binary<2, &Literal::getLanesF64x2, &Literal::sub>(*this, other); } Literal Literal::mulF64x2(const Literal& other) const { return binary<2, &Literal::getLanesF64x2, &Literal::mul>(*this, other); } Literal Literal::divF64x2(const Literal& other) const { return binary<2, &Literal::getLanesF64x2, &Literal::div>(*this, other); } Literal Literal::minF64x2(const Literal& other) const { return binary<2, &Literal::getLanesF64x2, &Literal::min>(*this, other); } Literal Literal::maxF64x2(const Literal& other) const { return binary<2, &Literal::getLanesF64x2, &Literal::max>(*this, other); } Literal Literal::pminF64x2(const Literal& other) const { return binary<2, &Literal::getLanesF64x2, &Literal::pmin>(*this, other); } Literal Literal::pmaxF64x2(const Literal& other) const { return binary<2, &Literal::getLanesF64x2, &Literal::pmax>(*this, other); } template (Literal::*IntoLanes)() const> static Literal dot(const Literal& left, const Literal& right) { LaneArray lhs = (left.*IntoLanes)(); LaneArray rhs = (right.*IntoLanes)(); LaneArray result; for (size_t i = 0; i < Lanes; ++i) { result[i] = Literal(int32_t(0)); for (size_t j = 0; j < Factor; ++j) { result[i] = Literal(result[i].geti32() + lhs[i * Factor + j].geti32() * rhs[i * Factor + j].geti32()); } } return Literal(result); } Literal Literal::dotSI8x16toI16x8(const Literal& other) const { return dot<8, 2, &Literal::getLanesSI8x16>(*this, other); } Literal Literal::dotUI8x16toI16x8(const Literal& other) const { return dot<8, 2, &Literal::getLanesUI8x16>(*this, other); } Literal Literal::dotSI16x8toI32x4(const Literal& other) const { return dot<4, 2, &Literal::getLanesSI16x8>(*this, other); } Literal Literal::bitselectV128(const Literal& left, const Literal& right) const { return andV128(left).orV128(notV128().andV128(right)); } template struct TwiceWidth {}; template<> struct TwiceWidth { using type = int16_t; }; template<> struct TwiceWidth { using type = int32_t; }; template Literal saturating_narrow( typename TwiceWidth::type>::type val) { using WideT = typename TwiceWidth::type>::type; if (val > WideT(std::numeric_limits::max())) { val = std::numeric_limits::max(); } else if (val < WideT(std::numeric_limits::min())) { val = std::numeric_limits::min(); } return Literal(int32_t(val)); } template (Literal::*IntoLanes)() const> Literal narrow(const Literal& low, const Literal& high) { LaneArray lowLanes = (low.*IntoLanes)(); LaneArray highLanes = (high.*IntoLanes)(); LaneArray result; for (size_t i = 0; i < Lanes / 2; ++i) { result[i] = saturating_narrow(lowLanes[i].geti32()); result[Lanes / 2 + i] = saturating_narrow(highLanes[i].geti32()); } return Literal(result); } Literal Literal::narrowSToI8x16(const Literal& other) const { return narrow<16, int8_t, &Literal::getLanesSI16x8>(*this, other); } Literal Literal::narrowUToI8x16(const Literal& other) const { return narrow<16, uint8_t, &Literal::getLanesSI16x8>(*this, other); } Literal Literal::narrowSToI16x8(const Literal& other) const { return narrow<8, int16_t, &Literal::getLanesI32x4>(*this, other); } Literal Literal::narrowUToI16x8(const Literal& other) const { return narrow<8, uint16_t, &Literal::getLanesI32x4>(*this, other); } enum class LaneOrder { Low, High }; template Literal extend(const Literal& vec) { LaneArray lanes = getLanes(vec); LaneArray result; for (size_t i = 0; i < Lanes; ++i) { size_t idx = (Side == LaneOrder::Low) ? i : i + Lanes; result[i] = Literal((LaneTo)(LaneFrom)lanes[idx].geti32()); } return Literal(result); } template Literal extendF32(const Literal& vec) { LaneArray<4> lanes = vec.getLanesF32x4(); LaneArray<2> result; for (size_t i = 0; i < 2; ++i) { size_t idx = (Side == LaneOrder::Low) ? i : i + 2; result[i] = Literal((double)lanes[idx].getf32()); } return Literal(result); } Literal Literal::extendLowSToI16x8() const { return extend<8, int8_t, int16_t, LaneOrder::Low>(*this); } Literal Literal::extendHighSToI16x8() const { return extend<8, int8_t, int16_t, LaneOrder::High>(*this); } Literal Literal::extendLowUToI16x8() const { return extend<8, uint8_t, uint16_t, LaneOrder::Low>(*this); } Literal Literal::extendHighUToI16x8() const { return extend<8, uint8_t, uint16_t, LaneOrder::High>(*this); } Literal Literal::extendLowSToI32x4() const { return extend<4, int16_t, int32_t, LaneOrder::Low>(*this); } Literal Literal::extendHighSToI32x4() const { return extend<4, int16_t, int32_t, LaneOrder::High>(*this); } Literal Literal::extendLowUToI32x4() const { return extend<4, uint16_t, uint32_t, LaneOrder::Low>(*this); } Literal Literal::extendHighUToI32x4() const { return extend<4, uint16_t, uint32_t, LaneOrder::High>(*this); } Literal Literal::extendLowSToI64x2() const { return extend<2, int32_t, int64_t, LaneOrder::Low>(*this); } Literal Literal::extendHighSToI64x2() const { return extend<2, int32_t, int64_t, LaneOrder::High>(*this); } Literal Literal::extendLowUToI64x2() const { return extend<2, uint32_t, uint64_t, LaneOrder::Low>(*this); } Literal Literal::extendHighUToI64x2() const { return extend<2, uint32_t, uint64_t, LaneOrder::High>(*this); } template Literal extMul(const Literal& a, const Literal& b) { LaneArray lhs = getLanes(a); LaneArray rhs = getLanes(b); LaneArray result; for (size_t i = 0; i < Lanes; ++i) { size_t idx = (Side == LaneOrder::Low) ? i : i + Lanes; result[i] = Literal((LaneTo)(LaneFrom)lhs[idx].geti32() * (LaneTo)(LaneFrom)rhs[idx].geti32()); } return Literal(result); } Literal Literal::extMulLowSI16x8(const Literal& other) const { return extMul<8, int8_t, int16_t, LaneOrder::Low>(*this, other); } Literal Literal::extMulHighSI16x8(const Literal& other) const { return extMul<8, int8_t, int16_t, LaneOrder::High>(*this, other); } Literal Literal::extMulLowUI16x8(const Literal& other) const { return extMul<8, uint8_t, uint16_t, LaneOrder::Low>(*this, other); } Literal Literal::extMulHighUI16x8(const Literal& other) const { return extMul<8, uint8_t, uint16_t, LaneOrder::High>(*this, other); } Literal Literal::extMulLowSI32x4(const Literal& other) const { return extMul<4, int16_t, int32_t, LaneOrder::Low>(*this, other); } Literal Literal::extMulHighSI32x4(const Literal& other) const { return extMul<4, int16_t, int32_t, LaneOrder::High>(*this, other); } Literal Literal::extMulLowUI32x4(const Literal& other) const { return extMul<4, uint16_t, uint32_t, LaneOrder::Low>(*this, other); } Literal Literal::extMulHighUI32x4(const Literal& other) const { return extMul<4, uint16_t, uint32_t, LaneOrder::High>(*this, other); } Literal Literal::extMulLowSI64x2(const Literal& other) const { return extMul<2, int32_t, int64_t, LaneOrder::Low>(*this, other); } Literal Literal::extMulHighSI64x2(const Literal& other) const { return extMul<2, int32_t, int64_t, LaneOrder::High>(*this, other); } Literal Literal::extMulLowUI64x2(const Literal& other) const { return extMul<2, uint32_t, uint64_t, LaneOrder::Low>(*this, other); } Literal Literal::extMulHighUI64x2(const Literal& other) const { return extMul<2, uint32_t, uint64_t, LaneOrder::High>(*this, other); } Literal Literal::convertLowSToF64x2() const { return extend<2, int32_t, double, LaneOrder::Low>(*this); } Literal Literal::convertLowUToF64x2() const { return extend<2, uint32_t, double, LaneOrder::Low>(*this); } template (Literal::*IntoLanes)() const, Literal (Literal::*UnaryOp)(void) const> static Literal unary_zero(const Literal& val) { LaneArray lanes = (val.*IntoLanes)(); LaneArray result; for (size_t i = 0; i < Lanes / 2; ++i) { result[i] = (lanes[i].*UnaryOp)(); } for (size_t i = Lanes / 2; i < Lanes; ++i) { result[i] = Literal::makeZero(lanes[0].type); } return Literal(result); } Literal Literal::truncSatZeroSToI32x4() const { return unary_zero<4, &Literal::getLanesF64x2, &Literal::truncSatToSI32>( *this); } Literal Literal::truncSatZeroUToI32x4() const { return unary_zero<4, &Literal::getLanesF64x2, &Literal::truncSatToUI32>( *this); } Literal Literal::demoteZeroToF32x4() const { return unary_zero<4, &Literal::getLanesF64x2, &Literal::demote>(*this); } Literal Literal::promoteLowToF64x2() const { return extendF32(*this); } Literal Literal::swizzleI8x16(const Literal& other) const { auto lanes = getLanesUI8x16(); auto indices = other.getLanesUI8x16(); LaneArray<16> result; for (size_t i = 0; i < 16; ++i) { size_t index = indices[i].geti32(); result[i] = index >= 16 ? Literal(int32_t(0)) : lanes[index]; } return Literal(result); } namespace { template (Literal::*IntoLanes)() const, Literal (Literal::*TernaryOp)(const Literal&, const Literal&) const> static Literal ternary(const Literal& a, const Literal& b, const Literal& c) { LaneArray x = (a.*IntoLanes)(); LaneArray y = (b.*IntoLanes)(); LaneArray z = (c.*IntoLanes)(); LaneArray r; for (size_t i = 0; i < Lanes; ++i) { r[i] = (x[i].*TernaryOp)(y[i], z[i]); } return Literal(r); } } // namespace Literal Literal::relaxedFmaF32x4(const Literal& left, const Literal& right) const { return ternary<4, &Literal::getLanesF32x4, &Literal::fma>(*this, left, right); } Literal Literal::relaxedFmsF32x4(const Literal& left, const Literal& right) const { return ternary<4, &Literal::getLanesF32x4, &Literal::fms>(*this, left, right); } Literal Literal::relaxedFmaF64x2(const Literal& left, const Literal& right) const { return ternary<2, &Literal::getLanesF64x2, &Literal::fma>(*this, left, right); } Literal Literal::relaxedFmsF64x2(const Literal& left, const Literal& right) const { return ternary<2, &Literal::getLanesF64x2, &Literal::fms>(*this, left, right); } bool Literal::isSubRtt(const Literal& other) const { assert(type.isRtt() && other.type.isRtt()); // For this literal to be a sub-rtt of the other rtt, the supers must be a // superset. That is, if other is a->b->c then we should be a->b->c as well // with possibly ->d->.. added. The rttSupers array represents those chains, // but only the supers, which means the last item in the chain is simply the // type of the literal. const auto& supers = getRttSupers(); const auto& otherSupers = other.getRttSupers(); if (otherSupers.size() > supers.size()) { return false; } for (Index i = 0; i < otherSupers.size(); i++) { if (supers[i] != otherSupers[i]) { return false; } } // If we have more supers than other, compare that extra super. Otherwise, // we have the same amount of supers, and must be completely identical to // other. if (otherSupers.size() < supers.size()) { return other.type.getHeapType() == supers[otherSupers.size()].type; } else { return other.type == type; } } } // namespace wasm binaryen-version_108/src/wasm/parsing.cpp000066400000000000000000000074361423707623100206640ustar00rootroot00000000000000/* * Copyright 2021 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "parsing.h" #include "ir/branch-utils.h" namespace wasm { void ParseException::dump(std::ostream& o) const { Colors::magenta(o); o << "["; Colors::red(o); o << "parse exception: "; Colors::green(o); o << text; if (line != size_t(-1)) { Colors::normal(o); o << " (at " << line << ":" << col << ")"; } Colors::magenta(o); o << "]"; Colors::normal(o); } void MapParseException::dump(std::ostream& o) const { Colors::magenta(o); o << "["; Colors::red(o); o << "map parse exception: "; Colors::green(o); o << text; Colors::magenta(o); o << "]"; Colors::normal(o); } // UniqueNameMapper Name UniqueNameMapper::getPrefixedName(Name prefix) { if (reverseLabelMapping.find(prefix) == reverseLabelMapping.end()) { return prefix; } // make sure to return a unique name not already on the stack while (1) { Name ret = Name(prefix.str + std::to_string(otherIndex++)); if (reverseLabelMapping.find(ret) == reverseLabelMapping.end()) { return ret; } } } Name UniqueNameMapper::pushLabelName(Name sName) { Name name = getPrefixedName(sName); labelStack.push_back(name); labelMappings[sName].push_back(name); reverseLabelMapping[name] = sName; return name; } void UniqueNameMapper::popLabelName(Name name) { assert(labelStack.back() == name); labelStack.pop_back(); labelMappings[reverseLabelMapping[name]].pop_back(); } Name UniqueNameMapper::sourceToUnique(Name sName) { // DELEGATE_CALLER_TARGET is a fake target used to denote delegating to the // caller. We do not need to modify it, as it has no definitions, only uses. if (sName == DELEGATE_CALLER_TARGET) { return DELEGATE_CALLER_TARGET; } if (labelMappings.find(sName) == labelMappings.end()) { throw ParseException("bad label in sourceToUnique"); } if (labelMappings[sName].empty()) { throw ParseException("use of popped label in sourceToUnique"); } return labelMappings[sName].back(); } Name UniqueNameMapper::uniqueToSource(Name name) { if (reverseLabelMapping.find(name) == reverseLabelMapping.end()) { throw ParseException("label mismatch in uniqueToSource"); } return reverseLabelMapping[name]; } void UniqueNameMapper::clear() { labelStack.clear(); labelMappings.clear(); reverseLabelMapping.clear(); } void UniqueNameMapper::uniquify(Expression* curr) { struct Walker : public ControlFlowWalker> { UniqueNameMapper mapper; static void doPreVisitControlFlow(Walker* self, Expression** currp) { BranchUtils::operateOnScopeNameDefs(*currp, [&](Name& name) { if (name.is()) { name = self->mapper.pushLabelName(name); } }); } static void doPostVisitControlFlow(Walker* self, Expression** currp) { BranchUtils::operateOnScopeNameDefs(*currp, [&](Name& name) { if (name.is()) { self->mapper.popLabelName(name); } }); } void visitExpression(Expression* curr) { BranchUtils::operateOnScopeNameUses(curr, [&](Name& name) { if (name.is()) { name = mapper.sourceToUnique(name); } }); } }; Walker walker; walker.walk(curr); } } // namespace wasm binaryen-version_108/src/wasm/wasm-binary.cpp000066400000000000000000006620651423707623100214570ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include "ir/eh-utils.h" #include "ir/module-utils.h" #include "ir/table-utils.h" #include "ir/type-updating.h" #include "support/bits.h" #include "support/debug.h" #include "wasm-binary.h" #include "wasm-debug.h" #include "wasm-stack.h" #define DEBUG_TYPE "binary" namespace wasm { void WasmBinaryWriter::prepare() { // Collect function types and their frequencies. Collect information in each // function in parallel, then merge. indexedTypes = ModuleUtils::getOptimizedIndexedHeapTypes(*wasm); importInfo = wasm::make_unique(*wasm); } void WasmBinaryWriter::write() { writeHeader(); writeDylinkSection(); initializeDebugInfo(); if (sourceMap) { writeSourceMapProlog(); } writeTypes(); writeImports(); writeFunctionSignatures(); writeTableDeclarations(); writeMemory(); writeTags(); writeGlobals(); writeExports(); writeStart(); writeElementSegments(); writeDataCount(); writeFunctions(); writeDataSegments(); if (debugInfo || emitModuleName) { writeNames(); } if (sourceMap && !sourceMapUrl.empty()) { writeSourceMapUrl(); } if (symbolMap.size() > 0) { writeSymbolMap(); } if (sourceMap) { writeSourceMapEpilog(); } #ifdef BUILD_LLVM_DWARF // Update DWARF user sections after writing the data they refer to // (function bodies), and before writing the user sections themselves. if (Debug::hasDWARFSections(*wasm)) { Debug::writeDWARFSections(*wasm, binaryLocations); } #endif writeLateUserSections(); writeFeaturesSection(); } void WasmBinaryWriter::writeHeader() { BYN_TRACE("== writeHeader\n"); o << int32_t(BinaryConsts::Magic); // magic number \0asm o << int32_t(BinaryConsts::Version); } int32_t WasmBinaryWriter::writeU32LEBPlaceholder() { int32_t ret = o.size(); o << int32_t(0); o << int8_t(0); return ret; } void WasmBinaryWriter::writeResizableLimits( Address initial, Address maximum, bool hasMaximum, bool shared, bool is64) { uint32_t flags = (hasMaximum ? (uint32_t)BinaryConsts::HasMaximum : 0U) | (shared ? (uint32_t)BinaryConsts::IsShared : 0U) | (is64 ? (uint32_t)BinaryConsts::Is64 : 0U); o << U32LEB(flags); if (is64) { o << U64LEB(initial); if (hasMaximum) { o << U64LEB(maximum); } } else { o << U32LEB(initial); if (hasMaximum) { o << U32LEB(maximum); } } } template int32_t WasmBinaryWriter::startSection(T code) { o << uint8_t(code); if (sourceMap) { sourceMapLocationsSizeAtSectionStart = sourceMapLocations.size(); } binaryLocationsSizeAtSectionStart = binaryLocations.expressions.size(); return writeU32LEBPlaceholder(); // section size to be filled in later } void WasmBinaryWriter::finishSection(int32_t start) { // section size does not include the reserved bytes of the size field itself int32_t size = o.size() - start - MaxLEB32Bytes; auto sizeFieldSize = o.writeAt(start, U32LEB(size)); // We can move things back if the actual LEB for the size doesn't use the // maximum 5 bytes. In that case we need to adjust offsets after we move // things backwards. auto adjustmentForLEBShrinking = MaxLEB32Bytes - sizeFieldSize; if (adjustmentForLEBShrinking) { // we can save some room, nice assert(sizeFieldSize < MaxLEB32Bytes); std::move(&o[start] + MaxLEB32Bytes, &o[start] + MaxLEB32Bytes + size, &o[start] + sizeFieldSize); o.resize(o.size() - adjustmentForLEBShrinking); if (sourceMap) { for (auto i = sourceMapLocationsSizeAtSectionStart; i < sourceMapLocations.size(); ++i) { sourceMapLocations[i].first -= adjustmentForLEBShrinking; } } } if (binaryLocationsSizeAtSectionStart != binaryLocations.expressions.size()) { // We added the binary locations, adjust them: they must be relative // to the code section. assert(binaryLocationsSizeAtSectionStart == 0); // The section type byte is right before the LEB for the size; we want // offsets that are relative to the body, which is after that section type // byte and the the size LEB. auto body = start + sizeFieldSize; // Offsets are relative to the body of the code section: after the // section type byte and the size. // Everything was moved by the adjustment, track that. After this, // we are at the right absolute address. // We are relative to the section start. auto totalAdjustment = adjustmentForLEBShrinking + body; for (auto& [_, locations] : binaryLocations.expressions) { locations.start -= totalAdjustment; locations.end -= totalAdjustment; } for (auto& [_, locations] : binaryLocations.functions) { locations.start -= totalAdjustment; locations.declarations -= totalAdjustment; locations.end -= totalAdjustment; } for (auto& [_, locations] : binaryLocations.delimiters) { for (auto& item : locations) { item -= totalAdjustment; } } } } int32_t WasmBinaryWriter::startSubsection(BinaryConsts::UserSections::Subsection code) { return startSection(code); } void WasmBinaryWriter::finishSubsection(int32_t start) { finishSection(start); } void WasmBinaryWriter::writeStart() { if (!wasm->start.is()) { return; } BYN_TRACE("== writeStart\n"); auto start = startSection(BinaryConsts::Section::Start); o << U32LEB(getFunctionIndex(wasm->start.str)); finishSection(start); } void WasmBinaryWriter::writeMemory() { if (!wasm->memory.exists || wasm->memory.imported()) { return; } BYN_TRACE("== writeMemory\n"); auto start = startSection(BinaryConsts::Section::Memory); o << U32LEB(1); // Define 1 memory writeResizableLimits(wasm->memory.initial, wasm->memory.max, wasm->memory.hasMax(), wasm->memory.shared, wasm->memory.is64()); finishSection(start); } void WasmBinaryWriter::writeTypes() { if (indexedTypes.types.size() == 0) { return; } // Count the number of recursion groups, which is the number of elements in // the type section. With nominal typing there is always one group and with // equirecursive typing there is one group per type. size_t numGroups = 0; switch (getTypeSystem()) { case TypeSystem::Equirecursive: numGroups = indexedTypes.types.size(); break; case TypeSystem::Nominal: numGroups = 1; break; case TypeSystem::Isorecursive: { std::optional lastGroup; for (auto type : indexedTypes.types) { auto currGroup = type.getRecGroup(); numGroups += lastGroup != currGroup; lastGroup = currGroup; } } } BYN_TRACE("== writeTypes\n"); auto start = startSection(BinaryConsts::Section::Type); o << U32LEB(numGroups); if (getTypeSystem() == TypeSystem::Nominal) { // The nominal recursion group contains every type. o << S32LEB(BinaryConsts::EncodedType::Rec) << U32LEB(indexedTypes.types.size()); } std::optional lastGroup = std::nullopt; for (Index i = 0; i < indexedTypes.types.size(); ++i) { auto type = indexedTypes.types[i]; // Check whether we need to start a new recursion group. Recursion groups of // size 1 are implicit, so only emit a group header for larger groups. This // gracefully handles non-isorecursive type systems, which only have groups // of size 1 internally (even though nominal types are emitted as a single // large group). auto currGroup = type.getRecGroup(); if (lastGroup != currGroup && currGroup.size() > 1) { o << S32LEB(BinaryConsts::EncodedType::Rec) << U32LEB(currGroup.size()); } lastGroup = currGroup; // Emit the type definition. BYN_TRACE("write " << type << std::endl); if (auto super = type.getSuperType()) { // Subtype constructor and vector of 1 supertype. o << S32LEB(BinaryConsts::EncodedType::Sub) << U32LEB(1); writeHeapType(*super); } if (type.isSignature()) { o << S32LEB(BinaryConsts::EncodedType::Func); auto sig = type.getSignature(); for (auto& sigType : {sig.params, sig.results}) { o << U32LEB(sigType.size()); for (const auto& type : sigType) { writeType(type); } } } else if (type.isStruct()) { o << S32LEB(BinaryConsts::EncodedType::Struct); auto fields = type.getStruct().fields; o << U32LEB(fields.size()); for (const auto& field : fields) { writeField(field); } } else if (type.isArray()) { o << S32LEB(BinaryConsts::EncodedType::Array); writeField(type.getArray().element); } else { WASM_UNREACHABLE("TODO GC type writing"); } } finishSection(start); } void WasmBinaryWriter::writeImports() { auto num = importInfo->getNumImports(); if (num == 0) { return; } BYN_TRACE("== writeImports\n"); auto start = startSection(BinaryConsts::Section::Import); o << U32LEB(num); auto writeImportHeader = [&](Importable* import) { writeInlineString(import->module.str); writeInlineString(import->base.str); }; ModuleUtils::iterImportedFunctions(*wasm, [&](Function* func) { BYN_TRACE("write one function\n"); writeImportHeader(func); o << U32LEB(int32_t(ExternalKind::Function)); o << U32LEB(getTypeIndex(func->type)); }); ModuleUtils::iterImportedGlobals(*wasm, [&](Global* global) { BYN_TRACE("write one global\n"); writeImportHeader(global); o << U32LEB(int32_t(ExternalKind::Global)); writeType(global->type); o << U32LEB(global->mutable_); }); ModuleUtils::iterImportedTags(*wasm, [&](Tag* tag) { BYN_TRACE("write one tag\n"); writeImportHeader(tag); o << U32LEB(int32_t(ExternalKind::Tag)); o << uint8_t(0); // Reserved 'attribute' field. Always 0. o << U32LEB(getTypeIndex(tag->sig)); }); if (wasm->memory.imported()) { BYN_TRACE("write one memory\n"); writeImportHeader(&wasm->memory); o << U32LEB(int32_t(ExternalKind::Memory)); writeResizableLimits(wasm->memory.initial, wasm->memory.max, wasm->memory.hasMax(), wasm->memory.shared, wasm->memory.is64()); } ModuleUtils::iterImportedTables(*wasm, [&](Table* table) { BYN_TRACE("write one table\n"); writeImportHeader(table); o << U32LEB(int32_t(ExternalKind::Table)); writeType(table->type); writeResizableLimits(table->initial, table->max, table->hasMax(), /*shared=*/false, /*is64*/ false); }); finishSection(start); } void WasmBinaryWriter::writeFunctionSignatures() { if (importInfo->getNumDefinedFunctions() == 0) { return; } BYN_TRACE("== writeFunctionSignatures\n"); auto start = startSection(BinaryConsts::Section::Function); o << U32LEB(importInfo->getNumDefinedFunctions()); ModuleUtils::iterDefinedFunctions(*wasm, [&](Function* func) { BYN_TRACE("write one\n"); o << U32LEB(getTypeIndex(func->type)); }); finishSection(start); } void WasmBinaryWriter::writeExpression(Expression* curr) { BinaryenIRToBinaryWriter(*this, o).visit(curr); } void WasmBinaryWriter::writeFunctions() { if (importInfo->getNumDefinedFunctions() == 0) { return; } BYN_TRACE("== writeFunctions\n"); auto sectionStart = startSection(BinaryConsts::Section::Code); o << U32LEB(importInfo->getNumDefinedFunctions()); bool DWARF = Debug::hasDWARFSections(*getModule()); ModuleUtils::iterDefinedFunctions(*wasm, [&](Function* func) { assert(binaryLocationTrackedExpressionsForFunc.empty()); size_t sourceMapLocationsSizeAtFunctionStart = sourceMapLocations.size(); BYN_TRACE("write one at" << o.size() << std::endl); size_t sizePos = writeU32LEBPlaceholder(); size_t start = o.size(); BYN_TRACE("writing" << func->name << std::endl); // Emit Stack IR if present, and if we can if (func->stackIR && !sourceMap && !DWARF) { BYN_TRACE("write Stack IR\n"); StackIRToBinaryWriter writer(*this, o, func); writer.write(); if (debugInfo) { funcMappedLocals[func->name] = std::move(writer.getMappedLocals()); } } else { BYN_TRACE("write Binaryen IR\n"); BinaryenIRToBinaryWriter writer(*this, o, func, sourceMap, DWARF); writer.write(); if (debugInfo) { funcMappedLocals[func->name] = std::move(writer.getMappedLocals()); } } size_t size = o.size() - start; assert(size <= std::numeric_limits::max()); BYN_TRACE("body size: " << size << ", writing at " << sizePos << ", next starts at " << o.size() << "\n"); auto sizeFieldSize = o.writeAt(sizePos, U32LEB(size)); // We can move things back if the actual LEB for the size doesn't use the // maximum 5 bytes. In that case we need to adjust offsets after we move // things backwards. auto adjustmentForLEBShrinking = MaxLEB32Bytes - sizeFieldSize; if (adjustmentForLEBShrinking) { // we can save some room, nice assert(sizeFieldSize < MaxLEB32Bytes); std::move(&o[start], &o[start] + size, &o[sizePos] + sizeFieldSize); o.resize(o.size() - adjustmentForLEBShrinking); if (sourceMap) { for (auto i = sourceMapLocationsSizeAtFunctionStart; i < sourceMapLocations.size(); ++i) { sourceMapLocations[i].first -= adjustmentForLEBShrinking; } } for (auto* curr : binaryLocationTrackedExpressionsForFunc) { // We added the binary locations, adjust them: they must be relative // to the code section. auto& span = binaryLocations.expressions[curr]; span.start -= adjustmentForLEBShrinking; span.end -= adjustmentForLEBShrinking; auto iter = binaryLocations.delimiters.find(curr); if (iter != binaryLocations.delimiters.end()) { for (auto& item : iter->second) { item -= adjustmentForLEBShrinking; } } } } if (!binaryLocationTrackedExpressionsForFunc.empty()) { binaryLocations.functions[func] = BinaryLocations::FunctionLocations{ BinaryLocation(sizePos), BinaryLocation(start - adjustmentForLEBShrinking), BinaryLocation(o.size())}; } tableOfContents.functionBodies.emplace_back( func->name, sizePos + sizeFieldSize, size); binaryLocationTrackedExpressionsForFunc.clear(); }); finishSection(sectionStart); } void WasmBinaryWriter::writeGlobals() { if (importInfo->getNumDefinedGlobals() == 0) { return; } BYN_TRACE("== writeglobals\n"); auto start = startSection(BinaryConsts::Section::Global); // Count and emit the total number of globals after tuple globals have been // expanded into their constituent parts. Index num = 0; ModuleUtils::iterDefinedGlobals( *wasm, [&num](Global* global) { num += global->type.size(); }); o << U32LEB(num); ModuleUtils::iterDefinedGlobals(*wasm, [&](Global* global) { BYN_TRACE("write one\n"); size_t i = 0; for (const auto& t : global->type) { writeType(t); o << U32LEB(global->mutable_); if (global->type.size() == 1) { writeExpression(global->init); } else { writeExpression(global->init->cast()->operands[i]); } o << int8_t(BinaryConsts::End); ++i; } }); finishSection(start); } void WasmBinaryWriter::writeExports() { if (wasm->exports.size() == 0) { return; } BYN_TRACE("== writeexports\n"); auto start = startSection(BinaryConsts::Section::Export); o << U32LEB(wasm->exports.size()); for (auto& curr : wasm->exports) { BYN_TRACE("write one\n"); writeInlineString(curr->name.str); o << U32LEB(int32_t(curr->kind)); switch (curr->kind) { case ExternalKind::Function: o << U32LEB(getFunctionIndex(curr->value)); break; case ExternalKind::Table: o << U32LEB(0); break; case ExternalKind::Memory: o << U32LEB(0); break; case ExternalKind::Global: o << U32LEB(getGlobalIndex(curr->value)); break; case ExternalKind::Tag: o << U32LEB(getTagIndex(curr->value)); break; default: WASM_UNREACHABLE("unexpected extern kind"); } } finishSection(start); } void WasmBinaryWriter::writeDataCount() { if (!wasm->features.hasBulkMemory() || !wasm->memory.segments.size()) { return; } auto start = startSection(BinaryConsts::Section::DataCount); o << U32LEB(wasm->memory.segments.size()); finishSection(start); } void WasmBinaryWriter::writeDataSegments() { if (wasm->memory.segments.size() == 0) { return; } if (wasm->memory.segments.size() > WebLimitations::MaxDataSegments) { std::cerr << "Some VMs may not accept this binary because it has a large " << "number of data segments. Run the limit-segments pass to " << "merge segments.\n"; } auto start = startSection(BinaryConsts::Section::Data); o << U32LEB(wasm->memory.segments.size()); for (auto& segment : wasm->memory.segments) { uint32_t flags = 0; if (segment.isPassive) { flags |= BinaryConsts::IsPassive; } o << U32LEB(flags); if (!segment.isPassive) { writeExpression(segment.offset); o << int8_t(BinaryConsts::End); } writeInlineBuffer(segment.data.data(), segment.data.size()); } finishSection(start); } uint32_t WasmBinaryWriter::getFunctionIndex(Name name) const { auto it = indexes.functionIndexes.find(name); assert(it != indexes.functionIndexes.end()); return it->second; } uint32_t WasmBinaryWriter::getTableIndex(Name name) const { auto it = indexes.tableIndexes.find(name); assert(it != indexes.tableIndexes.end()); return it->second; } uint32_t WasmBinaryWriter::getGlobalIndex(Name name) const { auto it = indexes.globalIndexes.find(name); assert(it != indexes.globalIndexes.end()); return it->second; } uint32_t WasmBinaryWriter::getTagIndex(Name name) const { auto it = indexes.tagIndexes.find(name); assert(it != indexes.tagIndexes.end()); return it->second; } uint32_t WasmBinaryWriter::getTypeIndex(HeapType type) const { auto it = indexedTypes.indices.find(type); #ifndef NDEBUG if (it == indexedTypes.indices.end()) { std::cout << "Missing type: " << type << '\n'; assert(0); } #endif return it->second; } void WasmBinaryWriter::writeTableDeclarations() { if (importInfo->getNumDefinedTables() == 0) { // std::cerr << std::endl << "(WasmBinaryWriter::writeTableDeclarations) No // defined tables found. skipping" << std::endl; return; } BYN_TRACE("== writeTableDeclarations\n"); auto start = startSection(BinaryConsts::Section::Table); auto num = importInfo->getNumDefinedTables(); o << U32LEB(num); ModuleUtils::iterDefinedTables(*wasm, [&](Table* table) { writeType(table->type); writeResizableLimits(table->initial, table->max, table->hasMax(), /*shared=*/false, /*is64*/ false); }); finishSection(start); } void WasmBinaryWriter::writeElementSegments() { size_t elemCount = wasm->elementSegments.size(); auto needingElemDecl = TableUtils::getFunctionsNeedingElemDeclare(*wasm); if (!needingElemDecl.empty()) { elemCount++; } if (elemCount == 0) { return; } BYN_TRACE("== writeElementSegments\n"); auto start = startSection(BinaryConsts::Section::Element); o << U32LEB(elemCount); for (auto& segment : wasm->elementSegments) { Index tableIdx = 0; bool isPassive = segment->table.isNull(); // If the segment is MVP, we can use the shorter form. bool usesExpressions = TableUtils::usesExpressions(segment.get(), wasm); // The table index can and should be elided for active segments of table 0 // when table 0 has type funcref. This was the only type of segment // supported by the MVP, which also did not support table indices in the // segment encoding. bool hasTableIndex = false; if (!isPassive) { tableIdx = getTableIndex(segment->table); hasTableIndex = tableIdx > 0 || wasm->getTable(segment->table)->type != Type::funcref; } uint32_t flags = 0; if (usesExpressions) { flags |= BinaryConsts::UsesExpressions; } if (isPassive) { flags |= BinaryConsts::IsPassive; } else if (hasTableIndex) { flags |= BinaryConsts::HasIndex; } o << U32LEB(flags); if (!isPassive) { if (hasTableIndex) { o << U32LEB(tableIdx); } writeExpression(segment->offset); o << int8_t(BinaryConsts::End); } if (isPassive || hasTableIndex) { if (usesExpressions) { // elemType writeType(segment->type); } else { // MVP elemKind of funcref o << U32LEB(0); } } o << U32LEB(segment->data.size()); if (usesExpressions) { for (auto* item : segment->data) { writeExpression(item); o << int8_t(BinaryConsts::End); } } else { for (auto& item : segment->data) { // We've ensured that all items are ref.func. auto& name = item->cast()->func; o << U32LEB(getFunctionIndex(name)); } } } if (!needingElemDecl.empty()) { o << U32LEB(BinaryConsts::IsPassive | BinaryConsts::IsDeclarative); o << U32LEB(0); // type (indicating funcref) o << U32LEB(needingElemDecl.size()); for (auto name : needingElemDecl) { o << U32LEB(indexes.functionIndexes[name]); } } finishSection(start); } void WasmBinaryWriter::writeTags() { if (importInfo->getNumDefinedTags() == 0) { return; } BYN_TRACE("== writeTags\n"); auto start = startSection(BinaryConsts::Section::Tag); auto num = importInfo->getNumDefinedTags(); o << U32LEB(num); ModuleUtils::iterDefinedTags(*wasm, [&](Tag* tag) { BYN_TRACE("write one\n"); o << uint8_t(0); // Reserved 'attribute' field. Always 0. o << U32LEB(getTypeIndex(tag->sig)); }); finishSection(start); } void WasmBinaryWriter::writeNames() { BYN_TRACE("== writeNames\n"); auto start = startSection(BinaryConsts::Section::User); writeInlineString(BinaryConsts::UserSections::Name); // module name if (emitModuleName && wasm->name.is()) { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameModule); writeEscapedName(wasm->name.str); finishSubsection(substart); } if (!debugInfo) { // We were only writing the module name. finishSection(start); return; } // function names { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameFunction); o << U32LEB(indexes.functionIndexes.size()); Index emitted = 0; auto add = [&](Function* curr) { o << U32LEB(emitted); writeEscapedName(curr->name.str); emitted++; }; ModuleUtils::iterImportedFunctions(*wasm, add); ModuleUtils::iterDefinedFunctions(*wasm, add); assert(emitted == indexes.functionIndexes.size()); finishSubsection(substart); } // local names { // Find all functions with at least one local name and only emit the // subsection if there is at least one. std::vector> functionsWithLocalNames; Index checked = 0; auto check = [&](Function* curr) { auto numLocals = curr->getNumLocals(); for (Index i = 0; i < numLocals; ++i) { if (curr->hasLocalName(i)) { functionsWithLocalNames.push_back({checked, curr}); break; } } checked++; }; ModuleUtils::iterImportedFunctions(*wasm, check); ModuleUtils::iterDefinedFunctions(*wasm, check); assert(checked == indexes.functionIndexes.size()); if (functionsWithLocalNames.size() > 0) { // Otherwise emit those functions but only include locals with a name. auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameLocal); o << U32LEB(functionsWithLocalNames.size()); Index emitted = 0; for (auto& [index, func] : functionsWithLocalNames) { // Pairs of (local index in IR, name). std::vector> localsWithNames; auto numLocals = func->getNumLocals(); for (Index i = 0; i < numLocals; ++i) { if (func->hasLocalName(i)) { localsWithNames.push_back({i, func->getLocalName(i)}); } } assert(localsWithNames.size()); o << U32LEB(index); o << U32LEB(localsWithNames.size()); for (auto& [indexInFunc, name] : localsWithNames) { // TODO: handle multivalue Index indexInBinary; auto iter = funcMappedLocals.find(func->name); if (iter != funcMappedLocals.end()) { indexInBinary = iter->second[{indexInFunc, 0}]; } else { // No data on funcMappedLocals. That is only possible if we are an // imported function, where there are no locals to map, and in that // case the index is unchanged anyhow: parameters always have the // same index, they are not mapped in any way. assert(func->imported()); indexInBinary = indexInFunc; } o << U32LEB(indexInBinary); writeEscapedName(name.str); } emitted++; } assert(emitted == functionsWithLocalNames.size()); finishSubsection(substart); } } // type names { std::vector namedTypes; for (auto& [type, _] : indexedTypes.indices) { if (wasm->typeNames.count(type) && wasm->typeNames[type].name.is()) { namedTypes.push_back(type); } } if (!namedTypes.empty()) { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameType); o << U32LEB(namedTypes.size()); for (auto type : namedTypes) { o << U32LEB(indexedTypes.indices[type]); writeEscapedName(wasm->typeNames[type].name.str); } finishSubsection(substart); } } // table names { std::vector> tablesWithNames; Index checked = 0; auto check = [&](Table* curr) { if (curr->hasExplicitName) { tablesWithNames.push_back({checked, curr}); } checked++; }; ModuleUtils::iterImportedTables(*wasm, check); ModuleUtils::iterDefinedTables(*wasm, check); assert(checked == indexes.tableIndexes.size()); if (tablesWithNames.size() > 0) { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameTable); o << U32LEB(tablesWithNames.size()); for (auto& [index, table] : tablesWithNames) { o << U32LEB(index); writeEscapedName(table->name.str); } finishSubsection(substart); } } // memory names if (wasm->memory.exists && wasm->memory.hasExplicitName) { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameMemory); o << U32LEB(1) << U32LEB(0); // currently exactly 1 memory at index 0 writeEscapedName(wasm->memory.name.str); finishSubsection(substart); } // global names { std::vector> globalsWithNames; Index checked = 0; auto check = [&](Global* curr) { if (curr->hasExplicitName) { globalsWithNames.push_back({checked, curr}); } checked++; }; ModuleUtils::iterImportedGlobals(*wasm, check); ModuleUtils::iterDefinedGlobals(*wasm, check); assert(checked == indexes.globalIndexes.size()); if (globalsWithNames.size() > 0) { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameGlobal); o << U32LEB(globalsWithNames.size()); for (auto& [index, global] : globalsWithNames) { o << U32LEB(index); writeEscapedName(global->name.str); } finishSubsection(substart); } } // elem segment names { std::vector> elemsWithNames; Index checked = 0; for (auto& curr : wasm->elementSegments) { if (curr->hasExplicitName) { elemsWithNames.push_back({checked, curr.get()}); } checked++; } assert(checked == indexes.elemIndexes.size()); if (elemsWithNames.size() > 0) { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameElem); o << U32LEB(elemsWithNames.size()); for (auto& [index, elem] : elemsWithNames) { o << U32LEB(index); writeEscapedName(elem->name.str); } finishSubsection(substart); } } // data segment names if (wasm->memory.exists) { Index count = 0; for (auto& seg : wasm->memory.segments) { if (seg.name.is()) { count++; } } if (count) { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameData); o << U32LEB(count); for (Index i = 0; i < wasm->memory.segments.size(); i++) { auto& seg = wasm->memory.segments[i]; if (seg.name.is()) { o << U32LEB(i); writeEscapedName(seg.name.str); } } finishSubsection(substart); } } // TODO: label, type, and element names // see: https://github.com/WebAssembly/extended-name-section // GC field names if (wasm->features.hasGC()) { std::vector relevantTypes; for (auto& type : indexedTypes.types) { if (type.isStruct() && wasm->typeNames.count(type) && !wasm->typeNames[type].fieldNames.empty()) { relevantTypes.push_back(type); } } if (!relevantTypes.empty()) { auto substart = startSubsection(BinaryConsts::UserSections::Subsection::NameField); o << U32LEB(relevantTypes.size()); for (Index i = 0; i < relevantTypes.size(); i++) { auto type = relevantTypes[i]; o << U32LEB(indexedTypes.indices[type]); std::unordered_map& fieldNames = wasm->typeNames.at(type).fieldNames; o << U32LEB(fieldNames.size()); for (auto& [index, name] : fieldNames) { o << U32LEB(index); writeEscapedName(name.str); } } finishSubsection(substart); } } finishSection(start); } void WasmBinaryWriter::writeSourceMapUrl() { BYN_TRACE("== writeSourceMapUrl\n"); auto start = startSection(BinaryConsts::Section::User); writeInlineString(BinaryConsts::UserSections::SourceMapUrl); writeInlineString(sourceMapUrl.c_str()); finishSection(start); } void WasmBinaryWriter::writeSymbolMap() { std::ofstream file(symbolMap); auto write = [&](Function* func) { file << getFunctionIndex(func->name) << ":" << func->name.str << std::endl; }; ModuleUtils::iterImportedFunctions(*wasm, write); ModuleUtils::iterDefinedFunctions(*wasm, write); file.close(); } void WasmBinaryWriter::initializeDebugInfo() { lastDebugLocation = {0, /* lineNumber = */ 1, 0}; } void WasmBinaryWriter::writeSourceMapProlog() { *sourceMap << "{\"version\":3,\"sources\":["; for (size_t i = 0; i < wasm->debugInfoFileNames.size(); i++) { if (i > 0) { *sourceMap << ","; } // TODO respect JSON string encoding, e.g. quotes and control chars. *sourceMap << "\"" << wasm->debugInfoFileNames[i] << "\""; } *sourceMap << "],\"names\":[],\"mappings\":\""; } static void writeBase64VLQ(std::ostream& out, int32_t n) { uint32_t value = n >= 0 ? n << 1 : ((-n) << 1) | 1; while (1) { uint32_t digit = value & 0x1F; value >>= 5; if (!value) { // last VLQ digit -- base64 codes 'A'..'Z', 'a'..'f' out << char(digit < 26 ? 'A' + digit : 'a' + digit - 26); break; } // more VLG digit will follow -- add continuation bit (0x20), // base64 codes 'g'..'z', '0'..'9', '+', '/' out << char(digit < 20 ? 'g' + digit : digit < 30 ? '0' + digit - 20 : digit == 30 ? '+' : '/'); } } void WasmBinaryWriter::writeSourceMapEpilog() { // write source map entries size_t lastOffset = 0; Function::DebugLocation lastLoc = {0, /* lineNumber = */ 1, 0}; for (const auto& [offset, loc] : sourceMapLocations) { if (lastOffset > 0) { *sourceMap << ","; } writeBase64VLQ(*sourceMap, int32_t(offset - lastOffset)); writeBase64VLQ(*sourceMap, int32_t(loc->fileIndex - lastLoc.fileIndex)); writeBase64VLQ(*sourceMap, int32_t(loc->lineNumber - lastLoc.lineNumber)); writeBase64VLQ(*sourceMap, int32_t(loc->columnNumber - lastLoc.columnNumber)); lastLoc = *loc; lastOffset = offset; } *sourceMap << "\"}"; } void WasmBinaryWriter::writeLateUserSections() { for (auto& section : wasm->userSections) { if (section.name != BinaryConsts::UserSections::Dylink) { writeUserSection(section); } } } void WasmBinaryWriter::writeUserSection(const UserSection& section) { auto start = startSection(BinaryConsts::User); writeInlineString(section.name.c_str()); for (size_t i = 0; i < section.data.size(); i++) { o << uint8_t(section.data[i]); } finishSection(start); } void WasmBinaryWriter::writeFeaturesSection() { if (!wasm->hasFeaturesSection || wasm->features.isMVP()) { return; } // TODO(tlively): unify feature names with rest of toolchain and use // FeatureSet::toString() auto toString = [](FeatureSet::Feature f) { switch (f) { case FeatureSet::Atomics: return BinaryConsts::UserSections::AtomicsFeature; case FeatureSet::MutableGlobals: return BinaryConsts::UserSections::MutableGlobalsFeature; case FeatureSet::TruncSat: return BinaryConsts::UserSections::TruncSatFeature; case FeatureSet::SIMD: return BinaryConsts::UserSections::SIMD128Feature; case FeatureSet::BulkMemory: return BinaryConsts::UserSections::BulkMemoryFeature; case FeatureSet::SignExt: return BinaryConsts::UserSections::SignExtFeature; case FeatureSet::ExceptionHandling: return BinaryConsts::UserSections::ExceptionHandlingFeature; case FeatureSet::TailCall: return BinaryConsts::UserSections::TailCallFeature; case FeatureSet::ReferenceTypes: return BinaryConsts::UserSections::ReferenceTypesFeature; case FeatureSet::Multivalue: return BinaryConsts::UserSections::MultivalueFeature; case FeatureSet::GC: return BinaryConsts::UserSections::GCFeature; case FeatureSet::Memory64: return BinaryConsts::UserSections::Memory64Feature; case FeatureSet::TypedFunctionReferences: return BinaryConsts::UserSections::TypedFunctionReferencesFeature; case FeatureSet::RelaxedSIMD: return BinaryConsts::UserSections::RelaxedSIMDFeature; case FeatureSet::ExtendedConst: return BinaryConsts::UserSections::ExtendedConstFeature; default: WASM_UNREACHABLE("unexpected feature flag"); } }; std::vector features; wasm->features.iterFeatures( [&](FeatureSet::Feature f) { features.push_back(toString(f)); }); auto start = startSection(BinaryConsts::User); writeInlineString(BinaryConsts::UserSections::TargetFeatures); o << U32LEB(features.size()); for (auto& f : features) { o << uint8_t(BinaryConsts::FeatureUsed); writeInlineString(f); } finishSection(start); } void WasmBinaryWriter::writeLegacyDylinkSection() { if (!wasm->dylinkSection) { return; } auto start = startSection(BinaryConsts::User); writeInlineString(BinaryConsts::UserSections::Dylink); o << U32LEB(wasm->dylinkSection->memorySize); o << U32LEB(wasm->dylinkSection->memoryAlignment); o << U32LEB(wasm->dylinkSection->tableSize); o << U32LEB(wasm->dylinkSection->tableAlignment); o << U32LEB(wasm->dylinkSection->neededDynlibs.size()); for (auto& neededDynlib : wasm->dylinkSection->neededDynlibs) { writeInlineString(neededDynlib.c_str()); } finishSection(start); } void WasmBinaryWriter::writeDylinkSection() { if (!wasm->dylinkSection) { return; } if (wasm->dylinkSection->isLegacy) { writeLegacyDylinkSection(); return; } auto start = startSection(BinaryConsts::User); writeInlineString(BinaryConsts::UserSections::Dylink0); auto substart = startSubsection(BinaryConsts::UserSections::Subsection::DylinkMemInfo); o << U32LEB(wasm->dylinkSection->memorySize); o << U32LEB(wasm->dylinkSection->memoryAlignment); o << U32LEB(wasm->dylinkSection->tableSize); o << U32LEB(wasm->dylinkSection->tableAlignment); finishSubsection(substart); if (wasm->dylinkSection->neededDynlibs.size()) { substart = startSubsection(BinaryConsts::UserSections::Subsection::DylinkNeeded); o << U32LEB(wasm->dylinkSection->neededDynlibs.size()); for (auto& neededDynlib : wasm->dylinkSection->neededDynlibs) { writeInlineString(neededDynlib.c_str()); } finishSubsection(substart); } writeData(wasm->dylinkSection->tail.data(), wasm->dylinkSection->tail.size()); finishSection(start); } void WasmBinaryWriter::writeDebugLocation(const Function::DebugLocation& loc) { if (loc == lastDebugLocation) { return; } auto offset = o.size(); sourceMapLocations.emplace_back(offset, &loc); lastDebugLocation = loc; } void WasmBinaryWriter::writeDebugLocation(Expression* curr, Function* func) { if (sourceMap) { auto& debugLocations = func->debugLocations; auto iter = debugLocations.find(curr); if (iter != debugLocations.end()) { writeDebugLocation(iter->second); } } // If this is an instruction in a function, and if the original wasm had // binary locations tracked, then track it in the output as well. if (func && !func->expressionLocations.empty()) { binaryLocations.expressions[curr] = BinaryLocations::Span{BinaryLocation(o.size()), 0}; binaryLocationTrackedExpressionsForFunc.push_back(curr); } } void WasmBinaryWriter::writeDebugLocationEnd(Expression* curr, Function* func) { if (func && !func->expressionLocations.empty()) { auto& span = binaryLocations.expressions.at(curr); span.end = o.size(); } } void WasmBinaryWriter::writeExtraDebugLocation(Expression* curr, Function* func, size_t id) { if (func && !func->expressionLocations.empty()) { binaryLocations.delimiters[curr][id] = o.size(); } } void WasmBinaryWriter::writeData(const char* data, size_t size) { for (size_t i = 0; i < size; i++) { o << int8_t(data[i]); } } void WasmBinaryWriter::writeInlineString(const char* name) { int32_t size = strlen(name); o << U32LEB(size); writeData(name, size); } static bool isHexDigit(char ch) { return (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F'); } static int decodeHexNibble(char ch) { return ch <= '9' ? ch & 15 : (ch & 15) + 9; } void WasmBinaryWriter::writeEscapedName(const char* name) { assert(name); if (!strpbrk(name, "\\")) { writeInlineString(name); return; } // decode escaped by escapeName (see below) function names std::string unescaped; int32_t size = strlen(name); for (int32_t i = 0; i < size;) { char ch = name[i++]; // support only `\xx` escapes; ignore invalid or unsupported escapes if (ch != '\\' || i + 1 >= size || !isHexDigit(name[i]) || !isHexDigit(name[i + 1])) { unescaped.push_back(ch); continue; } unescaped.push_back( char((decodeHexNibble(name[i]) << 4) | decodeHexNibble(name[i + 1]))); i += 2; } writeInlineString(unescaped.c_str()); } void WasmBinaryWriter::writeInlineBuffer(const char* data, size_t size) { o << U32LEB(size); writeData(data, size); } void WasmBinaryWriter::writeType(Type type) { if (type.isRef() && !type.isBasic()) { if (type.isNullable()) { o << S32LEB(BinaryConsts::EncodedType::nullable); } else { o << S32LEB(BinaryConsts::EncodedType::nonnullable); } writeHeapType(type.getHeapType()); return; } if (type.isRtt()) { auto rtt = type.getRtt(); if (rtt.hasDepth()) { o << S32LEB(BinaryConsts::EncodedType::rtt_n); o << U32LEB(rtt.depth); } else { o << S32LEB(BinaryConsts::EncodedType::rtt); } writeIndexedHeapType(rtt.heapType); return; } int ret = 0; TODO_SINGLE_COMPOUND(type); switch (type.getBasic()) { // None only used for block signatures. TODO: Separate out? case Type::none: ret = BinaryConsts::EncodedType::Empty; break; case Type::i32: ret = BinaryConsts::EncodedType::i32; break; case Type::i64: ret = BinaryConsts::EncodedType::i64; break; case Type::f32: ret = BinaryConsts::EncodedType::f32; break; case Type::f64: ret = BinaryConsts::EncodedType::f64; break; case Type::v128: ret = BinaryConsts::EncodedType::v128; break; case Type::funcref: ret = BinaryConsts::EncodedType::funcref; break; case Type::anyref: ret = BinaryConsts::EncodedType::anyref; break; case Type::eqref: ret = BinaryConsts::EncodedType::eqref; break; case Type::i31ref: ret = BinaryConsts::EncodedType::i31ref; break; case Type::dataref: ret = BinaryConsts::EncodedType::dataref; break; default: WASM_UNREACHABLE("unexpected type"); } o << S32LEB(ret); } void WasmBinaryWriter::writeHeapType(HeapType type) { if (type.isSignature() || type.isStruct() || type.isArray()) { o << S64LEB(getTypeIndex(type)); // TODO: Actually s33 return; } int ret = 0; if (type.isBasic()) { switch (type.getBasic()) { case HeapType::func: ret = BinaryConsts::EncodedHeapType::func; break; case HeapType::any: ret = BinaryConsts::EncodedHeapType::any; break; case HeapType::eq: ret = BinaryConsts::EncodedHeapType::eq; break; case HeapType::i31: ret = BinaryConsts::EncodedHeapType::i31; break; case HeapType::data: ret = BinaryConsts::EncodedHeapType::data; break; } } else { WASM_UNREACHABLE("TODO: compound GC types"); } o << S64LEB(ret); // TODO: Actually s33 } void WasmBinaryWriter::writeIndexedHeapType(HeapType type) { o << U32LEB(getTypeIndex(type)); } void WasmBinaryWriter::writeField(const Field& field) { if (field.type == Type::i32 && field.packedType != Field::not_packed) { if (field.packedType == Field::i8) { o << S32LEB(BinaryConsts::EncodedType::i8); } else if (field.packedType == Field::i16) { o << S32LEB(BinaryConsts::EncodedType::i16); } else { WASM_UNREACHABLE("invalid packed type"); } } else { writeType(field.type); } o << U32LEB(field.mutable_); } // reader WasmBinaryBuilder::WasmBinaryBuilder(Module& wasm, FeatureSet features, const std::vector& input) : wasm(wasm), allocator(wasm.allocator), input(input), sourceMap(nullptr), nextDebugLocation(0, {0, 0, 0}), debugLocation() { wasm.features = features; } bool WasmBinaryBuilder::hasDWARFSections() { assert(pos == 0); getInt32(); // magic getInt32(); // version bool has = false; while (more()) { uint8_t sectionCode = getInt8(); uint32_t payloadLen = getU32LEB(); if (uint64_t(pos) + uint64_t(payloadLen) > input.size()) { throwError("Section extends beyond end of input"); } auto oldPos = pos; if (sectionCode == BinaryConsts::Section::User) { auto sectionName = getInlineString(); if (Debug::isDWARFSection(sectionName)) { has = true; break; } } pos = oldPos + payloadLen; } pos = 0; return has; } void WasmBinaryBuilder::read() { if (DWARF) { // In order to update dwarf, we must store info about each IR node's // binary position. This has noticeable memory overhead, so we don't do it // by default: the user must request it by setting "DWARF", and even if so // we scan ahead to see that there actually *are* DWARF sections, so that // we don't do unnecessary work. if (!hasDWARFSections()) { DWARF = false; } } readHeader(); readSourceMapHeader(); // read sections until the end while (more()) { uint8_t sectionCode = getInt8(); uint32_t payloadLen = getU32LEB(); if (uint64_t(pos) + uint64_t(payloadLen) > input.size()) { throwError("Section extends beyond end of input"); } auto oldPos = pos; // note the section in the list of seen sections, as almost no sections can // appear more than once, and verify those that shouldn't do not. if (sectionCode != BinaryConsts::Section::User && sectionCode != BinaryConsts::Section::Code) { if (!seenSections.insert(BinaryConsts::Section(sectionCode)).second) { throwError("section seen more than once: " + std::to_string(sectionCode)); } } switch (sectionCode) { case BinaryConsts::Section::Start: readStart(); break; case BinaryConsts::Section::Memory: readMemory(); break; case BinaryConsts::Section::Type: readTypes(); break; case BinaryConsts::Section::Import: readImports(); break; case BinaryConsts::Section::Function: readFunctionSignatures(); break; case BinaryConsts::Section::Code: if (DWARF) { codeSectionLocation = pos; } readFunctions(); break; case BinaryConsts::Section::Export: readExports(); break; case BinaryConsts::Section::Element: readElementSegments(); break; case BinaryConsts::Section::Global: readGlobals(); break; case BinaryConsts::Section::Data: readDataSegments(); break; case BinaryConsts::Section::DataCount: readDataCount(); break; case BinaryConsts::Section::Table: readTableDeclarations(); break; case BinaryConsts::Section::Tag: readTags(); break; default: { readUserSection(payloadLen); if (pos > oldPos + payloadLen) { throwError("bad user section size, started at " + std::to_string(oldPos) + " plus payload " + std::to_string(payloadLen) + " not being equal to new position " + std::to_string(pos)); } pos = oldPos + payloadLen; } } // make sure we advanced exactly past this section if (pos != oldPos + payloadLen) { throwError("bad section size, started at " + std::to_string(oldPos) + " plus payload " + std::to_string(payloadLen) + " not being equal to new position " + std::to_string(pos)); } } validateBinary(); processNames(); } void WasmBinaryBuilder::readUserSection(size_t payloadLen) { BYN_TRACE("== readUserSection\n"); auto oldPos = pos; Name sectionName = getInlineString(); size_t read = pos - oldPos; if (read > payloadLen) { throwError("bad user section size"); } payloadLen -= read; if (sectionName.equals(BinaryConsts::UserSections::Name)) { if (debugInfo) { readNames(payloadLen); } else { pos += payloadLen; } } else if (sectionName.equals(BinaryConsts::UserSections::TargetFeatures)) { readFeatures(payloadLen); } else if (sectionName.equals(BinaryConsts::UserSections::Dylink)) { readDylink(payloadLen); } else if (sectionName.equals(BinaryConsts::UserSections::Dylink0)) { readDylink0(payloadLen); } else { // an unfamiliar custom section if (sectionName.equals(BinaryConsts::UserSections::Linking)) { std::cerr << "warning: linking section is present, so this is not a standard " "wasm file - binaryen cannot handle this properly!\n"; } wasm.userSections.resize(wasm.userSections.size() + 1); auto& section = wasm.userSections.back(); section.name = sectionName.str; auto data = getByteView(payloadLen); section.data = {data.first, data.second}; } } std::pair WasmBinaryBuilder::getByteView(size_t size) { if (size > input.size() || pos > input.size() - size) { throwError("unexpected end of input"); } pos += size; return {input.data() + (pos - size), input.data() + pos}; } uint8_t WasmBinaryBuilder::getInt8() { if (!more()) { throwError("unexpected end of input"); } BYN_TRACE("getInt8: " << (int)(uint8_t)input[pos] << " (at " << pos << ")\n"); return input[pos++]; } uint16_t WasmBinaryBuilder::getInt16() { BYN_TRACE("<==\n"); auto ret = uint16_t(getInt8()); ret |= uint16_t(getInt8()) << 8; BYN_TRACE("getInt16: " << ret << "/0x" << std::hex << ret << std::dec << " ==>\n"); return ret; } uint32_t WasmBinaryBuilder::getInt32() { BYN_TRACE("<==\n"); auto ret = uint32_t(getInt16()); ret |= uint32_t(getInt16()) << 16; BYN_TRACE("getInt32: " << ret << "/0x" << std::hex << ret << std::dec << " ==>\n"); return ret; } uint64_t WasmBinaryBuilder::getInt64() { BYN_TRACE("<==\n"); auto ret = uint64_t(getInt32()); ret |= uint64_t(getInt32()) << 32; BYN_TRACE("getInt64: " << ret << "/0x" << std::hex << ret << std::dec << " ==>\n"); return ret; } uint8_t WasmBinaryBuilder::getLaneIndex(size_t lanes) { BYN_TRACE("<==\n"); auto ret = getInt8(); if (ret >= lanes) { throwError("Illegal lane index"); } BYN_TRACE("getLaneIndex(" << lanes << "): " << ret << " ==>" << std::endl); return ret; } Literal WasmBinaryBuilder::getFloat32Literal() { BYN_TRACE("<==\n"); auto ret = Literal(getInt32()); ret = ret.castToF32(); BYN_TRACE("getFloat32: " << ret << " ==>\n"); return ret; } Literal WasmBinaryBuilder::getFloat64Literal() { BYN_TRACE("<==\n"); auto ret = Literal(getInt64()); ret = ret.castToF64(); BYN_TRACE("getFloat64: " << ret << " ==>\n"); return ret; } Literal WasmBinaryBuilder::getVec128Literal() { BYN_TRACE("<==\n"); std::array bytes; for (auto i = 0; i < 16; ++i) { bytes[i] = getInt8(); } auto ret = Literal(bytes.data()); BYN_TRACE("getVec128: " << ret << " ==>\n"); return ret; } uint32_t WasmBinaryBuilder::getU32LEB() { BYN_TRACE("<==\n"); U32LEB ret; ret.read([&]() { return getInt8(); }); BYN_TRACE("getU32LEB: " << ret.value << " ==>\n"); return ret.value; } uint64_t WasmBinaryBuilder::getU64LEB() { BYN_TRACE("<==\n"); U64LEB ret; ret.read([&]() { return getInt8(); }); BYN_TRACE("getU64LEB: " << ret.value << " ==>\n"); return ret.value; } int32_t WasmBinaryBuilder::getS32LEB() { BYN_TRACE("<==\n"); S32LEB ret; ret.read([&]() { return (int8_t)getInt8(); }); BYN_TRACE("getS32LEB: " << ret.value << " ==>\n"); return ret.value; } int64_t WasmBinaryBuilder::getS64LEB() { BYN_TRACE("<==\n"); S64LEB ret; ret.read([&]() { return (int8_t)getInt8(); }); BYN_TRACE("getS64LEB: " << ret.value << " ==>\n"); return ret.value; } uint64_t WasmBinaryBuilder::getUPtrLEB() { return wasm.memory.is64() ? getU64LEB() : getU32LEB(); } bool WasmBinaryBuilder::getBasicType(int32_t code, Type& out) { switch (code) { case BinaryConsts::EncodedType::i32: out = Type::i32; return true; case BinaryConsts::EncodedType::i64: out = Type::i64; return true; case BinaryConsts::EncodedType::f32: out = Type::f32; return true; case BinaryConsts::EncodedType::f64: out = Type::f64; return true; case BinaryConsts::EncodedType::v128: out = Type::v128; return true; case BinaryConsts::EncodedType::funcref: out = Type::funcref; return true; case BinaryConsts::EncodedType::anyref: out = Type::anyref; return true; case BinaryConsts::EncodedType::eqref: out = Type::eqref; return true; case BinaryConsts::EncodedType::i31ref: out = Type(HeapType::i31, NonNullable); return true; case BinaryConsts::EncodedType::dataref: out = Type(HeapType::data, NonNullable); return true; default: return false; } } bool WasmBinaryBuilder::getBasicHeapType(int64_t code, HeapType& out) { switch (code) { case BinaryConsts::EncodedHeapType::func: out = HeapType::func; return true; case BinaryConsts::EncodedHeapType::any: out = HeapType::any; return true; case BinaryConsts::EncodedHeapType::eq: out = HeapType::eq; return true; case BinaryConsts::EncodedHeapType::i31: out = HeapType::i31; return true; case BinaryConsts::EncodedHeapType::data: out = HeapType::data; return true; default: return false; } } Type WasmBinaryBuilder::getType(int initial) { // Single value types are negative; signature indices are non-negative if (initial >= 0) { // TODO: Handle block input types properly. return getSignatureByTypeIndex(initial).results; } Type type; if (getBasicType(initial, type)) { return type; } switch (initial) { // None only used for block signatures. TODO: Separate out? case BinaryConsts::EncodedType::Empty: return Type::none; case BinaryConsts::EncodedType::nullable: return Type(getHeapType(), Nullable); case BinaryConsts::EncodedType::nonnullable: return Type(getHeapType(), NonNullable); case BinaryConsts::EncodedType::rtt_n: { auto depth = getU32LEB(); auto heapType = getIndexedHeapType(); return Type(Rtt(depth, heapType)); } case BinaryConsts::EncodedType::rtt: { return Type(Rtt(getIndexedHeapType())); } default: throwError("invalid wasm type: " + std::to_string(initial)); } WASM_UNREACHABLE("unexpected type"); } Type WasmBinaryBuilder::getType() { return getType(getS32LEB()); } HeapType WasmBinaryBuilder::getHeapType() { auto type = getS64LEB(); // TODO: Actually s33 // Single heap types are negative; heap type indices are non-negative if (type >= 0) { if (size_t(type) >= types.size()) { throwError("invalid signature index: " + std::to_string(type)); } return types[type]; } HeapType ht; if (getBasicHeapType(type, ht)) { return ht; } else { throwError("invalid wasm heap type: " + std::to_string(type)); } WASM_UNREACHABLE("unexpected type"); } HeapType WasmBinaryBuilder::getIndexedHeapType() { auto index = getU32LEB(); if (index >= types.size()) { throwError("invalid heap type index: " + std::to_string(index)); } return types[index]; } Type WasmBinaryBuilder::getConcreteType() { auto type = getType(); if (!type.isConcrete()) { throw ParseException("non-concrete type when one expected"); } return type; } Name WasmBinaryBuilder::getInlineString() { BYN_TRACE("<==\n"); auto len = getU32LEB(); auto data = getByteView(len); std::string str(data.first, data.second); if (str.find('\0') != std::string::npos) { throwError( "inline string contains NULL (0). that is technically valid in wasm, " "but you shouldn't do it, and it's not supported in binaryen"); } BYN_TRACE("getInlineString: " << str << " ==>\n"); return Name(str); } void WasmBinaryBuilder::verifyInt8(int8_t x) { int8_t y = getInt8(); if (x != y) { throwError("surprising value"); } } void WasmBinaryBuilder::verifyInt16(int16_t x) { int16_t y = getInt16(); if (x != y) { throwError("surprising value"); } } void WasmBinaryBuilder::verifyInt32(int32_t x) { int32_t y = getInt32(); if (x != y) { throwError("surprising value"); } } void WasmBinaryBuilder::verifyInt64(int64_t x) { int64_t y = getInt64(); if (x != y) { throwError("surprising value"); } } void WasmBinaryBuilder::readHeader() { BYN_TRACE("== readHeader\n"); verifyInt32(BinaryConsts::Magic); verifyInt32(BinaryConsts::Version); } void WasmBinaryBuilder::readStart() { BYN_TRACE("== readStart\n"); startIndex = getU32LEB(); } void WasmBinaryBuilder::readMemory() { BYN_TRACE("== readMemory\n"); auto numMemories = getU32LEB(); if (!numMemories) { return; } if (numMemories != 1) { throwError("Must be exactly 1 memory"); } if (wasm.memory.exists) { throwError("Memory cannot be both imported and defined"); } wasm.memory.exists = true; getResizableLimits(wasm.memory.initial, wasm.memory.max, wasm.memory.shared, wasm.memory.indexType, Memory::kUnlimitedSize); } void WasmBinaryBuilder::readTypes() { BYN_TRACE("== readTypes\n"); TypeBuilder builder(getU32LEB()); if (getTypeSystem() == TypeSystem::Nominal && builder.size() > 1) { throwError("Nominal type sections must have a single element"); } BYN_TRACE("num: " << builder.size() << std::endl); auto makeType = [&](int32_t typeCode) { Type type; if (getBasicType(typeCode, type)) { return type; } switch (typeCode) { case BinaryConsts::EncodedType::nullable: case BinaryConsts::EncodedType::nonnullable: { auto nullability = typeCode == BinaryConsts::EncodedType::nullable ? Nullable : NonNullable; int64_t htCode = getS64LEB(); // TODO: Actually s33 HeapType ht; if (getBasicHeapType(htCode, ht)) { return Type(ht, nullability); } if (size_t(htCode) >= builder.size()) { throwError("invalid type index: " + std::to_string(htCode)); } return builder.getTempRefType(builder[size_t(htCode)], nullability); } case BinaryConsts::EncodedType::rtt_n: case BinaryConsts::EncodedType::rtt: { auto depth = typeCode == BinaryConsts::EncodedType::rtt ? Rtt::NoDepth : getU32LEB(); auto htCode = getU32LEB(); if (size_t(htCode) >= builder.size()) { throwError("invalid type index: " + std::to_string(htCode)); } return builder.getTempRttType(Rtt(depth, builder[htCode])); } default: throwError("unexpected type index: " + std::to_string(typeCode)); } WASM_UNREACHABLE("unexpected type"); }; auto readType = [&]() { return makeType(getS32LEB()); }; auto readSignatureDef = [&]() { std::vector params; std::vector results; size_t numParams = getU32LEB(); BYN_TRACE("num params: " << numParams << std::endl); for (size_t j = 0; j < numParams; j++) { params.push_back(readType()); } auto numResults = getU32LEB(); BYN_TRACE("num results: " << numResults << std::endl); for (size_t j = 0; j < numResults; j++) { results.push_back(readType()); } return Signature(builder.getTempTupleType(params), builder.getTempTupleType(results)); }; auto readMutability = [&]() { switch (getU32LEB()) { case 0: return Immutable; case 1: return Mutable; default: throw ParseException("Expected 0 or 1 for mutability"); } }; auto readFieldDef = [&]() { // The value may be a general wasm type, or one of the types only possible // in a field. auto typeCode = getS32LEB(); if (typeCode == BinaryConsts::EncodedType::i8) { auto mutable_ = readMutability(); return Field(Field::i8, mutable_); } if (typeCode == BinaryConsts::EncodedType::i16) { auto mutable_ = readMutability(); return Field(Field::i16, mutable_); } // It's a regular wasm value. auto type = makeType(typeCode); auto mutable_ = readMutability(); return Field(type, mutable_); }; auto readStructDef = [&]() { FieldList fields; size_t numFields = getU32LEB(); BYN_TRACE("num fields: " << numFields << std::endl); for (size_t j = 0; j < numFields; j++) { fields.push_back(readFieldDef()); } return Struct(std::move(fields)); }; for (size_t i = 0; i < builder.size(); i++) { BYN_TRACE("read one\n"); auto form = getS32LEB(); if (form == BinaryConsts::EncodedType::Rec) { uint32_t groupSize = getU32LEB(); if (getTypeSystem() == TypeSystem::Equirecursive) { throwError("Recursion groups not allowed with equirecursive typing"); } if (groupSize == 0u) { // TODO: Support groups of size zero by shrinking the builder. throwError("Recursion groups of size zero not supported"); } // The group counts as one element in the type section, so we have to // allocate space for the extra types. builder.grow(groupSize - 1); builder.createRecGroup(i, groupSize); form = getS32LEB(); } std::optional superIndex; if (form == BinaryConsts::EncodedType::Sub) { uint32_t supers = getU32LEB(); if (supers > 0) { if (supers != 1) { throwError("Invalid type definition with " + std::to_string(supers) + " supertypes"); } superIndex = getU32LEB(); } form = getS32LEB(); } if (form == BinaryConsts::EncodedType::Func || form == BinaryConsts::EncodedType::FuncSubtype) { builder[i] = readSignatureDef(); } else if (form == BinaryConsts::EncodedType::Struct || form == BinaryConsts::EncodedType::StructSubtype) { builder[i] = readStructDef(); } else if (form == BinaryConsts::EncodedType::Array || form == BinaryConsts::EncodedType::ArraySubtype) { builder[i] = Array(readFieldDef()); } else { throwError("Bad type form " + std::to_string(form)); } if (form == BinaryConsts::EncodedType::FuncSubtype || form == BinaryConsts::EncodedType::StructSubtype || form == BinaryConsts::EncodedType::ArraySubtype) { int64_t super = getS64LEB(); // TODO: Actually s33 if (super >= 0) { superIndex = (uint32_t)super; } else { // Validate but otherwise ignore trivial supertypes. HeapType basicSuper; if (!getBasicHeapType(super, basicSuper)) { throwError("Unrecognized supertype " + std::to_string(super)); } if (form == BinaryConsts::EncodedType::FuncSubtype) { if (basicSuper != HeapType::func) { throwError( "The only allowed trivial supertype for functions is func"); } } else { if (basicSuper != HeapType::data) { throwError("The only allowed trivial supertype for structs and " "arrays is data"); } } } } if (superIndex) { if (*superIndex > builder.size()) { throwError("Out of bounds supertype index " + std::to_string(*superIndex)); } builder[i].subTypeOf(builder[*superIndex]); } } auto result = builder.build(); if (auto* err = result.getError()) { Fatal() << "Invalid type: " << err->reason << " at index " << err->index; } types = *result; } Name WasmBinaryBuilder::getFunctionName(Index index) { if (index >= wasm.functions.size()) { throwError("invalid function index"); } return wasm.functions[index]->name; } Name WasmBinaryBuilder::getTableName(Index index) { if (index >= wasm.tables.size()) { throwError("invalid table index"); } return wasm.tables[index]->name; } Name WasmBinaryBuilder::getGlobalName(Index index) { if (index >= wasm.globals.size()) { throwError("invalid global index"); } return wasm.globals[index]->name; } Name WasmBinaryBuilder::getTagName(Index index) { if (index >= wasm.tags.size()) { throwError("invalid tag index"); } return wasm.tags[index]->name; } void WasmBinaryBuilder::getResizableLimits(Address& initial, Address& max, bool& shared, Type& indexType, Address defaultIfNoMax) { auto flags = getU32LEB(); bool hasMax = (flags & BinaryConsts::HasMaximum) != 0; bool isShared = (flags & BinaryConsts::IsShared) != 0; bool is64 = (flags & BinaryConsts::Is64) != 0; initial = is64 ? getU64LEB() : getU32LEB(); if (isShared && !hasMax) { throwError("shared memory must have max size"); } shared = isShared; indexType = is64 ? Type::i64 : Type::i32; if (hasMax) { max = is64 ? getU64LEB() : getU32LEB(); } else { max = defaultIfNoMax; } } void WasmBinaryBuilder::readImports() { BYN_TRACE("== readImports\n"); size_t num = getU32LEB(); BYN_TRACE("num: " << num << std::endl); Builder builder(wasm); size_t tableCounter = 0; size_t memoryCounter = 0; size_t functionCounter = 0; size_t globalCounter = 0; size_t tagCounter = 0; for (size_t i = 0; i < num; i++) { BYN_TRACE("read one\n"); auto module = getInlineString(); auto base = getInlineString(); auto kind = (ExternalKind)getU32LEB(); // We set a unique prefix for the name based on the kind. This ensures no // collisions between them, which can't occur here (due to the index i) but // could occur later due to the names section. switch (kind) { case ExternalKind::Function: { Name name(std::string("fimport$") + std::to_string(functionCounter++)); auto index = getU32LEB(); functionTypes.push_back(getTypeByIndex(index)); auto type = getTypeByIndex(index); if (!type.isSignature()) { throwError(std::string("Imported function ") + module.str + '.' + base.str + "'s type must be a signature. Given: " + type.toString()); } auto curr = builder.makeFunction(name, type, {}); curr->module = module; curr->base = base; functionImports.push_back(curr.get()); wasm.addFunction(std::move(curr)); break; } case ExternalKind::Table: { Name name(std::string("timport$") + std::to_string(tableCounter++)); auto table = builder.makeTable(name); table->module = module; table->base = base; table->type = getType(); bool is_shared; Type indexType; getResizableLimits(table->initial, table->max, is_shared, indexType, Table::kUnlimitedSize); if (is_shared) { throwError("Tables may not be shared"); } if (indexType == Type::i64) { throwError("Tables may not be 64-bit"); } tableImports.push_back(table.get()); wasm.addTable(std::move(table)); break; } case ExternalKind::Memory: { Name name(std::string("mimport$") + std::to_string(memoryCounter++)); wasm.memory.module = module; wasm.memory.base = base; wasm.memory.name = name; wasm.memory.exists = true; getResizableLimits(wasm.memory.initial, wasm.memory.max, wasm.memory.shared, wasm.memory.indexType, Memory::kUnlimitedSize); break; } case ExternalKind::Global: { Name name(std::string("gimport$") + std::to_string(globalCounter++)); auto type = getConcreteType(); auto mutable_ = getU32LEB(); auto curr = builder.makeGlobal(name, type, nullptr, mutable_ ? Builder::Mutable : Builder::Immutable); curr->module = module; curr->base = base; globalImports.push_back(curr.get()); wasm.addGlobal(std::move(curr)); break; } case ExternalKind::Tag: { Name name(std::string("eimport$") + std::to_string(tagCounter++)); getInt8(); // Reserved 'attribute' field auto index = getU32LEB(); auto curr = builder.makeTag(name, getSignatureByTypeIndex(index)); curr->module = module; curr->base = base; wasm.addTag(std::move(curr)); break; } default: { throwError("bad import kind"); } } } } Name WasmBinaryBuilder::getNextLabel() { requireFunctionContext("getting a label"); return Name("label$" + std::to_string(nextLabel++)); } void WasmBinaryBuilder::requireFunctionContext(const char* error) { if (!currFunction) { throwError(std::string("in a non-function context: ") + error); } } void WasmBinaryBuilder::readFunctionSignatures() { BYN_TRACE("== readFunctionSignatures\n"); size_t num = getU32LEB(); BYN_TRACE("num: " << num << std::endl); for (size_t i = 0; i < num; i++) { BYN_TRACE("read one\n"); auto index = getU32LEB(); functionTypes.push_back(getTypeByIndex(index)); // Check that the type is a signature. getSignatureByTypeIndex(index); } } HeapType WasmBinaryBuilder::getTypeByIndex(Index index) { if (index >= types.size()) { throwError("invalid type index " + std::to_string(index) + " / " + std::to_string(types.size())); } return types[index]; } HeapType WasmBinaryBuilder::getTypeByFunctionIndex(Index index) { if (index >= functionTypes.size()) { throwError("invalid function index"); } return functionTypes[index]; } Signature WasmBinaryBuilder::getSignatureByTypeIndex(Index index) { auto heapType = getTypeByIndex(index); if (!heapType.isSignature()) { throwError("invalid signature type " + heapType.toString()); } return heapType.getSignature(); } Signature WasmBinaryBuilder::getSignatureByFunctionIndex(Index index) { auto heapType = getTypeByFunctionIndex(index); if (!heapType.isSignature()) { throwError("invalid signature type " + heapType.toString()); } return heapType.getSignature(); } void WasmBinaryBuilder::readFunctions() { BYN_TRACE("== readFunctions\n"); size_t total = getU32LEB(); if (total != functionTypes.size() - functionImports.size()) { throwError("invalid function section size, must equal types"); } for (size_t i = 0; i < total; i++) { BYN_TRACE("read one at " << pos << std::endl); auto sizePos = pos; size_t size = getU32LEB(); if (size == 0) { throwError("empty function size"); } endOfFunction = pos + size; auto* func = new Function; func->name = Name::fromInt(i); func->type = getTypeByFunctionIndex(functionImports.size() + i); currFunction = func; if (DWARF) { func->funcLocation = BinaryLocations::FunctionLocations{ BinaryLocation(sizePos - codeSectionLocation), BinaryLocation(pos - codeSectionLocation), BinaryLocation(pos - codeSectionLocation + size)}; } readNextDebugLocation(); BYN_TRACE("reading " << i << std::endl); readVars(); std::swap(func->prologLocation, debugLocation); { // process the function body BYN_TRACE("processing function: " << i << std::endl); nextLabel = 0; debugLocation.clear(); willBeIgnored = false; // process body assert(breakStack.empty()); assert(breakTargetNames.empty()); assert(exceptionTargetNames.empty()); assert(expressionStack.empty()); assert(controlFlowStack.empty()); assert(letStack.empty()); assert(depth == 0); // Even if we are skipping function bodies we need to not skip the start // function. That contains important code for wasm-emscripten-finalize in // the form of pthread-related segment initializations. As this is just // one function, it doesn't add significant time, so the optimization of // skipping bodies is still very useful. auto currFunctionIndex = functionImports.size() + functions.size(); bool isStart = startIndex == currFunctionIndex; if (!skipFunctionBodies || isStart) { func->body = getBlockOrSingleton(func->getResults()); } else { // When skipping the function body we need to put something valid in // their place so we validate. An unreachable is always acceptable // there. func->body = Builder(wasm).makeUnreachable(); // Skip reading the contents. pos = endOfFunction; } assert(depth == 0); assert(breakStack.empty()); assert(breakTargetNames.empty()); assert(exceptionTargetNames.empty()); if (!expressionStack.empty()) { throwError("stack not empty on function exit"); } assert(controlFlowStack.empty()); assert(letStack.empty()); if (pos != endOfFunction) { throwError("binary offset at function exit not at expected location"); } } if (!wasm.features.hasGCNNLocals()) { TypeUpdating::handleNonDefaultableLocals(func, wasm); } std::swap(func->epilogLocation, debugLocation); currFunction = nullptr; debugLocation.clear(); functions.push_back(func); } BYN_TRACE(" end function bodies\n"); } void WasmBinaryBuilder::readVars() { size_t numLocalTypes = getU32LEB(); for (size_t t = 0; t < numLocalTypes; t++) { auto num = getU32LEB(); auto type = getConcreteType(); while (num > 0) { currFunction->vars.push_back(type); num--; } } } void WasmBinaryBuilder::readExports() { BYN_TRACE("== readExports\n"); size_t num = getU32LEB(); BYN_TRACE("num: " << num << std::endl); std::unordered_set names; for (size_t i = 0; i < num; i++) { BYN_TRACE("read one\n"); auto curr = new Export; curr->name = getInlineString(); if (!names.emplace(curr->name).second) { throwError("duplicate export name"); } curr->kind = (ExternalKind)getU32LEB(); auto index = getU32LEB(); exportIndices[curr] = index; exportOrder.push_back(curr); } } static int32_t readBase64VLQ(std::istream& in) { uint32_t value = 0; uint32_t shift = 0; while (1) { auto ch = in.get(); if (ch == EOF) { throw MapParseException("unexpected EOF in the middle of VLQ"); } if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch < 'g')) { // last number digit uint32_t digit = ch < 'a' ? ch - 'A' : ch - 'a' + 26; value |= digit << shift; break; } if (!(ch >= 'g' && ch <= 'z') && !(ch >= '0' && ch <= '9') && ch != '+' && ch != '/') { throw MapParseException("invalid VLQ digit"); } uint32_t digit = ch > '9' ? ch - 'g' : (ch >= '0' ? ch - '0' + 20 : (ch == '+' ? 30 : 31)); value |= digit << shift; shift += 5; } return value & 1 ? -int32_t(value >> 1) : int32_t(value >> 1); } void WasmBinaryBuilder::readSourceMapHeader() { if (!sourceMap) { return; } auto skipWhitespace = [&]() { while (sourceMap->peek() == ' ' || sourceMap->peek() == '\n') { sourceMap->get(); } }; auto maybeReadChar = [&](char expected) { if (sourceMap->peek() != expected) { return false; } sourceMap->get(); return true; }; auto mustReadChar = [&](char expected) { char c = sourceMap->get(); if (c != expected) { throw MapParseException(std::string("Unexpected char: expected '") + expected + "' got '" + c + "'"); } }; auto findField = [&](const char* name) { bool matching = false; size_t len = strlen(name); size_t pos; while (1) { int ch = sourceMap->get(); if (ch == EOF) { return false; } if (ch == '\"') { if (matching) { // we matched a terminating quote. if (pos == len) { break; } matching = false; } else { matching = true; pos = 0; } } else if (matching && name[pos] == ch) { ++pos; } else if (matching) { matching = false; } } skipWhitespace(); mustReadChar(':'); skipWhitespace(); return true; }; auto readString = [&](std::string& str) { std::vector vec; skipWhitespace(); mustReadChar('\"'); if (!maybeReadChar('\"')) { while (1) { int ch = sourceMap->get(); if (ch == EOF) { throw MapParseException("unexpected EOF in the middle of string"); } if (ch == '\"') { break; } vec.push_back(ch); } } skipWhitespace(); str = std::string(vec.begin(), vec.end()); }; if (!findField("sources")) { throw MapParseException("cannot find the 'sources' field in map"); } skipWhitespace(); mustReadChar('['); if (!maybeReadChar(']')) { do { std::string file; readString(file); Index index = wasm.debugInfoFileNames.size(); wasm.debugInfoFileNames.push_back(file); debugInfoFileIndices[file] = index; } while (maybeReadChar(',')); mustReadChar(']'); } if (!findField("mappings")) { throw MapParseException("cannot find the 'mappings' field in map"); } mustReadChar('\"'); if (maybeReadChar('\"')) { // empty mappings nextDebugLocation.first = 0; return; } // read first debug location uint32_t position = readBase64VLQ(*sourceMap); uint32_t fileIndex = readBase64VLQ(*sourceMap); uint32_t lineNumber = readBase64VLQ(*sourceMap) + 1; // adjust zero-based line number uint32_t columnNumber = readBase64VLQ(*sourceMap); nextDebugLocation = {position, {fileIndex, lineNumber, columnNumber}}; } void WasmBinaryBuilder::readNextDebugLocation() { if (!sourceMap) { return; } while (nextDebugLocation.first && nextDebugLocation.first <= pos) { debugLocation.clear(); // use debugLocation only for function expressions if (currFunction) { debugLocation.insert(nextDebugLocation.second); } char ch; *sourceMap >> ch; if (ch == '\"') { // end of records nextDebugLocation.first = 0; break; } if (ch != ',') { throw MapParseException("Unexpected delimiter"); } int32_t positionDelta = readBase64VLQ(*sourceMap); uint32_t position = nextDebugLocation.first + positionDelta; int32_t fileIndexDelta = readBase64VLQ(*sourceMap); uint32_t fileIndex = nextDebugLocation.second.fileIndex + fileIndexDelta; int32_t lineNumberDelta = readBase64VLQ(*sourceMap); uint32_t lineNumber = nextDebugLocation.second.lineNumber + lineNumberDelta; int32_t columnNumberDelta = readBase64VLQ(*sourceMap); uint32_t columnNumber = nextDebugLocation.second.columnNumber + columnNumberDelta; nextDebugLocation = {position, {fileIndex, lineNumber, columnNumber}}; } } Expression* WasmBinaryBuilder::readExpression() { assert(depth == 0); processExpressions(); if (expressionStack.size() != 1) { throwError("expected to read a single expression"); } auto* ret = popExpression(); assert(depth == 0); return ret; } void WasmBinaryBuilder::readGlobals() { BYN_TRACE("== readGlobals\n"); size_t num = getU32LEB(); BYN_TRACE("num: " << num << std::endl); for (size_t i = 0; i < num; i++) { BYN_TRACE("read one\n"); auto type = getConcreteType(); auto mutable_ = getU32LEB(); if (mutable_ & ~1) { throwError("Global mutability must be 0 or 1"); } auto* init = readExpression(); globals.push_back( Builder::makeGlobal("global$" + std::to_string(i), type, init, mutable_ ? Builder::Mutable : Builder::Immutable)); } } void WasmBinaryBuilder::processExpressions() { BYN_TRACE("== processExpressions\n"); unreachableInTheWasmSense = false; while (1) { Expression* curr; auto ret = readExpression(curr); if (!curr) { lastSeparator = ret; BYN_TRACE("== processExpressions finished\n"); return; } pushExpression(curr); if (curr->type == Type::unreachable) { // Once we see something unreachable, we don't want to add anything else // to the stack, as it could be stacky code that is non-representable in // our AST. but we do need to skip it. // If there is nothing else here, just stop. Otherwise, go into // unreachable mode. peek to see what to do. if (pos == endOfFunction) { throwError("Reached function end without seeing End opcode"); } if (!more()) { throwError("unexpected end of input"); } auto peek = input[pos]; if (peek == BinaryConsts::End || peek == BinaryConsts::Else || peek == BinaryConsts::Catch || peek == BinaryConsts::CatchAll || peek == BinaryConsts::Delegate) { BYN_TRACE("== processExpressions finished with unreachable" << std::endl); lastSeparator = BinaryConsts::ASTNodes(peek); // Read the byte we peeked at. No new instruction is generated for it. Expression* dummy = nullptr; readExpression(dummy); assert(!dummy); return; } else { skipUnreachableCode(); return; } } } } void WasmBinaryBuilder::skipUnreachableCode() { BYN_TRACE("== skipUnreachableCode\n"); // preserve the stack, and restore it. it contains the instruction that made // us unreachable, and we can ignore anything after it. things after it may // pop, we want to undo that auto savedStack = expressionStack; // note we are entering unreachable code, and note what the state as before so // we can restore it auto before = willBeIgnored; willBeIgnored = true; // clear the stack. nothing should be popped from there anyhow, just stuff // can be pushed and then popped. Popping past the top of the stack will // result in uneachables being returned expressionStack.clear(); while (1) { // set the unreachableInTheWasmSense flag each time, as sub-blocks may set // and unset it unreachableInTheWasmSense = true; Expression* curr; auto ret = readExpression(curr); if (!curr) { BYN_TRACE("== skipUnreachableCode finished\n"); lastSeparator = ret; unreachableInTheWasmSense = false; willBeIgnored = before; expressionStack = savedStack; return; } pushExpression(curr); } } void WasmBinaryBuilder::pushExpression(Expression* curr) { auto type = curr->type; if (type.isTuple()) { // Store tuple to local and push individual extracted values Builder builder(wasm); // Non-nullable types require special handling as they cannot be stored to // a local, so we may need to use a different local type than the original. auto localType = type; if (!wasm.features.hasGCNNLocals()) { std::vector finalTypes; for (auto t : type) { if (t.isNonNullable()) { t = Type(t.getHeapType(), Nullable); } finalTypes.push_back(t); } localType = Type(Tuple(finalTypes)); } requireFunctionContext("pushExpression-tuple"); Index tuple = builder.addVar(currFunction, localType); expressionStack.push_back(builder.makeLocalSet(tuple, curr)); for (Index i = 0; i < localType.size(); ++i) { Expression* value = builder.makeTupleExtract(builder.makeLocalGet(tuple, localType), i); if (localType[i] != type[i]) { // We modified this to be nullable; undo that. value = builder.makeRefAs(RefAsNonNull, value); } expressionStack.push_back(value); } } else { expressionStack.push_back(curr); } } Expression* WasmBinaryBuilder::popExpression() { BYN_TRACE("== popExpression\n"); if (expressionStack.empty()) { if (unreachableInTheWasmSense) { // in unreachable code, trying to pop past the polymorphic stack // area results in receiving unreachables BYN_TRACE("== popping unreachable from polymorphic stack" << std::endl); return allocator.alloc(); } throwError( "attempted pop from empty stack / beyond block start boundary at " + std::to_string(pos)); } // the stack is not empty, and we would not be going out of the current block auto ret = expressionStack.back(); assert(!ret->type.isTuple()); expressionStack.pop_back(); return ret; } Expression* WasmBinaryBuilder::popNonVoidExpression() { auto* ret = popExpression(); if (ret->type != Type::none) { return ret; } // we found a void, so this is stacky code that we must handle carefully Builder builder(wasm); // add elements until we find a non-void std::vector expressions; expressions.push_back(ret); while (1) { auto* curr = popExpression(); expressions.push_back(curr); if (curr->type != Type::none) { break; } } auto* block = builder.makeBlock(); while (!expressions.empty()) { block->list.push_back(expressions.back()); expressions.pop_back(); } requireFunctionContext("popping void where we need a new local"); auto type = block->list[0]->type; if (type.isConcrete()) { auto local = builder.addVar(currFunction, type); block->list[0] = builder.makeLocalSet(local, block->list[0]); block->list.push_back(builder.makeLocalGet(local, type)); } else { assert(type == Type::unreachable); // nothing to do here - unreachable anyhow } block->finalize(); return block; } Expression* WasmBinaryBuilder::popTuple(size_t numElems) { Builder builder(wasm); std::vector elements; elements.resize(numElems); for (size_t i = 0; i < numElems; i++) { auto* elem = popNonVoidExpression(); if (elem->type == Type::unreachable) { // All the previously-popped items cannot be reached, so ignore them. We // cannot continue popping because there might not be enough items on the // expression stack after an unreachable expression. Any remaining // elements can stay unperturbed on the stack and will be explicitly // dropped by some parent call to pushBlockElements. return elem; } elements[numElems - i - 1] = elem; } return Builder(wasm).makeTupleMake(std::move(elements)); } Expression* WasmBinaryBuilder::popTypedExpression(Type type) { if (type.isSingle()) { return popNonVoidExpression(); } else if (type.isTuple()) { return popTuple(type.size()); } else { WASM_UNREACHABLE("Invalid popped type"); } } void WasmBinaryBuilder::validateBinary() { if (hasDataCount && wasm.memory.segments.size() != dataCount) { throwError("Number of segments does not agree with DataCount section"); } } void WasmBinaryBuilder::processNames() { for (auto* func : functions) { wasm.addFunction(func); } for (auto& global : globals) { wasm.addGlobal(std::move(global)); } for (auto& table : tables) { wasm.addTable(std::move(table)); } for (auto& segment : elementSegments) { wasm.addElementSegment(std::move(segment)); } // now that we have names, apply things if (startIndex != static_cast(-1)) { wasm.start = getFunctionName(startIndex); } for (auto* curr : exportOrder) { auto index = exportIndices[curr]; switch (curr->kind) { case ExternalKind::Function: { curr->value = getFunctionName(index); break; } case ExternalKind::Table: curr->value = getTableName(index); break; case ExternalKind::Memory: curr->value = wasm.memory.name; break; case ExternalKind::Global: curr->value = getGlobalName(index); break; case ExternalKind::Tag: curr->value = getTagName(index); break; default: throwError("bad export kind"); } wasm.addExport(curr); } for (auto& [index, refs] : functionRefs) { for (auto* ref : refs) { if (auto* call = ref->dynCast()) { call->target = getFunctionName(index); } else if (auto* refFunc = ref->dynCast()) { refFunc->func = getFunctionName(index); } else { WASM_UNREACHABLE("Invalid type in function references"); } } } for (auto& [index, refs] : tableRefs) { for (auto* ref : refs) { if (auto* callIndirect = ref->dynCast()) { callIndirect->table = getTableName(index); } else if (auto* get = ref->dynCast()) { get->table = getTableName(index); } else if (auto* set = ref->dynCast()) { set->table = getTableName(index); } else if (auto* size = ref->dynCast()) { size->table = getTableName(index); } else if (auto* grow = ref->dynCast()) { grow->table = getTableName(index); } else { WASM_UNREACHABLE("Invalid type in table references"); } } } for (auto& [index, refs] : globalRefs) { for (auto* ref : refs) { if (auto* get = ref->dynCast()) { get->name = getGlobalName(index); } else if (auto* set = ref->dynCast()) { set->name = getGlobalName(index); } else { WASM_UNREACHABLE("Invalid type in global references"); } } } // Everything now has its proper name. wasm.updateMaps(); } void WasmBinaryBuilder::readDataCount() { BYN_TRACE("== readDataCount\n"); hasDataCount = true; dataCount = getU32LEB(); } void WasmBinaryBuilder::readDataSegments() { BYN_TRACE("== readDataSegments\n"); auto num = getU32LEB(); for (size_t i = 0; i < num; i++) { Memory::Segment curr; uint32_t flags = getU32LEB(); if (flags > 2) { throwError("bad segment flags, must be 0, 1, or 2, not " + std::to_string(flags)); } curr.isPassive = flags & BinaryConsts::IsPassive; if (flags & BinaryConsts::HasIndex) { auto memIndex = getU32LEB(); if (memIndex != 0) { throwError("nonzero memory index"); } } if (!curr.isPassive) { curr.offset = readExpression(); } auto size = getU32LEB(); auto data = getByteView(size); curr.data = {data.first, data.second}; wasm.memory.segments.push_back(std::move(curr)); } } void WasmBinaryBuilder::readTableDeclarations() { BYN_TRACE("== readTableDeclarations\n"); auto numTables = getU32LEB(); for (size_t i = 0; i < numTables; i++) { auto elemType = getType(); if (!elemType.isRef()) { throwError("Table type must be a reference type"); } auto table = Builder::makeTable(Name::fromInt(i), elemType); bool is_shared; Type indexType; getResizableLimits( table->initial, table->max, is_shared, indexType, Table::kUnlimitedSize); if (is_shared) { throwError("Tables may not be shared"); } if (indexType == Type::i64) { throwError("Tables may not be 64-bit"); } tables.push_back(std::move(table)); } } void WasmBinaryBuilder::readElementSegments() { BYN_TRACE("== readElementSegments\n"); auto numSegments = getU32LEB(); if (numSegments >= Table::kMaxSize) { throwError("Too many segments"); } for (size_t i = 0; i < numSegments; i++) { auto flags = getU32LEB(); bool isPassive = (flags & BinaryConsts::IsPassive) != 0; bool hasTableIdx = !isPassive && ((flags & BinaryConsts::HasIndex) != 0); bool isDeclarative = isPassive && ((flags & BinaryConsts::IsDeclarative) != 0); bool usesExpressions = (flags & BinaryConsts::UsesExpressions) != 0; if (isDeclarative) { // Declared segments are needed in wasm text and binary, but not in // Binaryen IR; skip over the segment auto type = getU32LEB(); WASM_UNUSED(type); auto num = getU32LEB(); for (Index i = 0; i < num; i++) { getU32LEB(); } continue; } auto segment = std::make_unique(); segment->setName(Name::fromInt(i), false); if (!isPassive) { Index tableIdx = 0; if (hasTableIdx) { tableIdx = getU32LEB(); } Table* table = nullptr; auto numTableImports = tableImports.size(); if (tableIdx < numTableImports) { table = tableImports[tableIdx]; } else if (tableIdx - numTableImports < tables.size()) { table = tables[tableIdx - numTableImports].get(); } if (!table) { throwError("Table index out of range."); } segment->table = table->name; segment->offset = readExpression(); } if (isPassive || hasTableIdx) { if (usesExpressions) { segment->type = getType(); if (!segment->type.isFunction()) { throwError("Invalid type for a usesExpressions element segment"); } } else { auto elemKind = getU32LEB(); if (elemKind != 0x0) { throwError("Invalid kind (!= funcref(0)) since !usesExpressions."); } } } auto& segmentData = segment->data; auto size = getU32LEB(); if (usesExpressions) { for (Index j = 0; j < size; j++) { segmentData.push_back(readExpression()); } } else { for (Index j = 0; j < size; j++) { Index index = getU32LEB(); auto sig = getTypeByFunctionIndex(index); // Use a placeholder name for now auto* refFunc = Builder(wasm).makeRefFunc(Name::fromInt(index), sig); functionRefs[index].push_back(refFunc); segmentData.push_back(refFunc); } } elementSegments.push_back(std::move(segment)); } } void WasmBinaryBuilder::readTags() { BYN_TRACE("== readTags\n"); size_t numTags = getU32LEB(); BYN_TRACE("num: " << numTags << std::endl); for (size_t i = 0; i < numTags; i++) { BYN_TRACE("read one\n"); getInt8(); // Reserved 'attribute' field auto typeIndex = getU32LEB(); wasm.addTag(Builder::makeTag("tag$" + std::to_string(i), getSignatureByTypeIndex(typeIndex))); } } static bool isIdChar(char ch) { return (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '!' || ch == '#' || ch == '$' || ch == '%' || ch == '&' || ch == '\'' || ch == '*' || ch == '+' || ch == '-' || ch == '.' || ch == '/' || ch == ':' || ch == '<' || ch == '=' || ch == '>' || ch == '?' || ch == '@' || ch == '^' || ch == '_' || ch == '`' || ch == '|' || ch == '~'; } static char formatNibble(int nibble) { return nibble < 10 ? '0' + nibble : 'a' - 10 + nibble; } Name WasmBinaryBuilder::escape(Name name) { bool allIdChars = true; for (const char* p = name.str; allIdChars && *p; p++) { allIdChars = isIdChar(*p); } if (allIdChars) { return name; } // encode name, if at least one non-idchar (per WebAssembly spec) was found std::string escaped; for (const char* p = name.str; *p; p++) { char ch = *p; if (isIdChar(ch)) { escaped.push_back(ch); continue; } // replace non-idchar with `\xx` escape escaped.push_back('\\'); escaped.push_back(formatNibble(ch >> 4)); escaped.push_back(formatNibble(ch & 15)); } return escaped; } // Performs necessary processing of names from the name section before using // them. Specifically it escapes and deduplicates them. class NameProcessor { public: Name process(Name name) { return deduplicate(WasmBinaryBuilder::escape(name)); } private: std::unordered_set usedNames; Name deduplicate(Name base) { Name name = base; // De-duplicate names by appending .1, .2, etc. for (int i = 1; !usedNames.insert(name).second; ++i) { name = std::string(base.str) + std::string(".") + std::to_string(i); } return name; } }; void WasmBinaryBuilder::readNames(size_t payloadLen) { BYN_TRACE("== readNames\n"); auto sectionPos = pos; uint32_t lastType = 0; while (pos < sectionPos + payloadLen) { auto nameType = getU32LEB(); if (lastType && nameType <= lastType) { std::cerr << "warning: out-of-order name subsection: " << nameType << std::endl; } lastType = nameType; auto subsectionSize = getU32LEB(); auto subsectionPos = pos; if (nameType == BinaryConsts::UserSections::Subsection::NameModule) { wasm.name = getInlineString(); } else if (nameType == BinaryConsts::UserSections::Subsection::NameFunction) { auto num = getU32LEB(); NameProcessor processor; for (size_t i = 0; i < num; i++) { auto index = getU32LEB(); auto rawName = getInlineString(); auto name = processor.process(rawName); auto numFunctionImports = functionImports.size(); if (index < numFunctionImports) { functionImports[index]->setExplicitName(name); } else if (index - numFunctionImports < functions.size()) { functions[index - numFunctionImports]->setExplicitName(name); } else { std::cerr << "warning: function index out of bounds in name section, " "function subsection: " << std::string(rawName.str) << " at index " << std::to_string(index) << std::endl; } } } else if (nameType == BinaryConsts::UserSections::Subsection::NameLocal) { auto numFuncs = getU32LEB(); auto numFunctionImports = functionImports.size(); for (size_t i = 0; i < numFuncs; i++) { auto funcIndex = getU32LEB(); Function* func = nullptr; if (funcIndex < numFunctionImports) { func = functionImports[funcIndex]; } else if (funcIndex - numFunctionImports < functions.size()) { func = functions[funcIndex - numFunctionImports]; } else { std::cerr << "warning: function index out of bounds in name section, local " "subsection: " << std::to_string(funcIndex) << std::endl; } auto numLocals = getU32LEB(); NameProcessor processor; for (size_t j = 0; j < numLocals; j++) { auto localIndex = getU32LEB(); auto rawLocalName = getInlineString(); if (!func) { continue; // read and discard in case of prior error } auto localName = processor.process(rawLocalName); if (localName.size() == 0) { std::cerr << "warning: empty local name at index " << std::to_string(localIndex) << " in function " << std::string(func->name.str) << std::endl; } else if (localIndex < func->getNumLocals()) { func->localNames[localIndex] = localName; } else { std::cerr << "warning: local index out of bounds in name " "section, local subsection: " << std::string(rawLocalName.str) << " at index " << std::to_string(localIndex) << " in function " << std::string(func->name.str) << std::endl; } } } } else if (nameType == BinaryConsts::UserSections::Subsection::NameType) { auto num = getU32LEB(); NameProcessor processor; for (size_t i = 0; i < num; i++) { auto index = getU32LEB(); auto rawName = getInlineString(); auto name = processor.process(rawName); if (index < types.size()) { wasm.typeNames[types[index]].name = name; } else { std::cerr << "warning: type index out of bounds in name section, " "type subsection: " << std::string(rawName.str) << " at index " << std::to_string(index) << std::endl; } } } else if (nameType == BinaryConsts::UserSections::Subsection::NameTable) { auto num = getU32LEB(); NameProcessor processor; for (size_t i = 0; i < num; i++) { auto index = getU32LEB(); auto rawName = getInlineString(); auto name = processor.process(rawName); auto numTableImports = tableImports.size(); auto setTableName = [&](Table* table) { for (auto& segment : elementSegments) { if (segment->table == table->name) { segment->table = name; } } table->setExplicitName(name); }; if (index < numTableImports) { setTableName(tableImports[index]); } else if (index - numTableImports < tables.size()) { setTableName(tables[index - numTableImports].get()); } else { std::cerr << "warning: table index out of bounds in name section, " "table subsection: " << std::string(rawName.str) << " at index " << std::to_string(index) << std::endl; } } } else if (nameType == BinaryConsts::UserSections::Subsection::NameElem) { auto num = getU32LEB(); NameProcessor processor; for (size_t i = 0; i < num; i++) { auto index = getU32LEB(); auto rawName = getInlineString(); auto name = processor.process(rawName); if (index < elementSegments.size()) { elementSegments[index]->setExplicitName(name); } else { std::cerr << "warning: elem index out of bounds in name section, " "elem subsection: " << std::string(rawName.str) << " at index " << std::to_string(index) << std::endl; } } } else if (nameType == BinaryConsts::UserSections::Subsection::NameMemory) { auto num = getU32LEB(); for (size_t i = 0; i < num; i++) { auto index = getU32LEB(); auto rawName = getInlineString(); if (index == 0) { wasm.memory.setExplicitName(escape(rawName)); } else { std::cerr << "warning: memory index out of bounds in name section, " "memory subsection: " << std::string(rawName.str) << " at index " << std::to_string(index) << std::endl; } } } else if (nameType == BinaryConsts::UserSections::Subsection::NameData) { auto num = getU32LEB(); for (size_t i = 0; i < num; i++) { auto index = getU32LEB(); auto rawName = getInlineString(); if (index < wasm.memory.segments.size()) { wasm.memory.segments[i].name = rawName; } else { std::cerr << "warning: memory index out of bounds in name section, " "memory subsection: " << std::string(rawName.str) << " at index " << std::to_string(index) << std::endl; } } } else if (nameType == BinaryConsts::UserSections::Subsection::NameGlobal) { auto num = getU32LEB(); NameProcessor processor; for (size_t i = 0; i < num; i++) { auto index = getU32LEB(); auto rawName = getInlineString(); auto name = processor.process(rawName); auto numGlobalImports = globalImports.size(); if (index < numGlobalImports) { globalImports[index]->setExplicitName(name); } else if (index - numGlobalImports < globals.size()) { globals[index - numGlobalImports]->setExplicitName(name); } else { std::cerr << "warning: global index out of bounds in name section, " "global subsection: " << std::string(rawName.str) << " at index " << std::to_string(index) << std::endl; } } } else if (nameType == BinaryConsts::UserSections::Subsection::NameField) { auto numTypes = getU32LEB(); for (size_t i = 0; i < numTypes; i++) { auto typeIndex = getU32LEB(); bool validType = typeIndex < types.size() && types[typeIndex].isStruct(); if (!validType) { std::cerr << "warning: invalid field index in name field section\n"; } auto numFields = getU32LEB(); NameProcessor processor; for (size_t i = 0; i < numFields; i++) { auto fieldIndex = getU32LEB(); auto rawName = getInlineString(); auto name = processor.process(rawName); if (validType) { wasm.typeNames[types[typeIndex]].fieldNames[fieldIndex] = name; } } } } else { std::cerr << "warning: unknown name subsection with id " << std::to_string(nameType) << " at " << pos << std::endl; pos = subsectionPos + subsectionSize; } if (pos != subsectionPos + subsectionSize) { throwError("bad names subsection position change"); } } if (pos != sectionPos + payloadLen) { throwError("bad names section position change"); } } void WasmBinaryBuilder::readFeatures(size_t payloadLen) { wasm.hasFeaturesSection = true; auto sectionPos = pos; size_t numFeatures = getU32LEB(); for (size_t i = 0; i < numFeatures; ++i) { uint8_t prefix = getInt8(); bool disallowed = prefix == BinaryConsts::FeatureDisallowed; bool required = prefix == BinaryConsts::FeatureRequired; bool used = prefix == BinaryConsts::FeatureUsed; if (!disallowed && !required && !used) { throwError("Unrecognized feature policy prefix"); } if (required) { std::cerr << "warning: required features in feature section are ignored"; } Name name = getInlineString(); if (pos > sectionPos + payloadLen) { throwError("ill-formed string extends beyond section"); } FeatureSet feature; if (name == BinaryConsts::UserSections::AtomicsFeature) { feature = FeatureSet::Atomics; } else if (name == BinaryConsts::UserSections::BulkMemoryFeature) { feature = FeatureSet::BulkMemory; } else if (name == BinaryConsts::UserSections::ExceptionHandlingFeature) { feature = FeatureSet::ExceptionHandling; } else if (name == BinaryConsts::UserSections::MutableGlobalsFeature) { feature = FeatureSet::MutableGlobals; } else if (name == BinaryConsts::UserSections::TruncSatFeature) { feature = FeatureSet::TruncSat; } else if (name == BinaryConsts::UserSections::SignExtFeature) { feature = FeatureSet::SignExt; } else if (name == BinaryConsts::UserSections::SIMD128Feature) { feature = FeatureSet::SIMD; } else if (name == BinaryConsts::UserSections::TailCallFeature) { feature = FeatureSet::TailCall; } else if (name == BinaryConsts::UserSections::ReferenceTypesFeature) { feature = FeatureSet::ReferenceTypes; } else if (name == BinaryConsts::UserSections::MultivalueFeature) { feature = FeatureSet::Multivalue; } else if (name == BinaryConsts::UserSections::GCFeature) { feature = FeatureSet::GC; } else if (name == BinaryConsts::UserSections::Memory64Feature) { feature = FeatureSet::Memory64; } else if (name == BinaryConsts::UserSections::TypedFunctionReferencesFeature) { feature = FeatureSet::TypedFunctionReferences; } else if (name == BinaryConsts::UserSections::RelaxedSIMDFeature) { feature = FeatureSet::RelaxedSIMD; } else if (name == BinaryConsts::UserSections::ExtendedConstFeature) { feature = FeatureSet::ExtendedConst; } else { // Silently ignore unknown features (this may be and old binaryen running // on a new wasm). } if (disallowed && wasm.features.has(feature)) { std::cerr << "warning: feature " << feature.toString() << " was enabled by the user, but disallowed in the features section."; } if (required || used) { wasm.features.enable(feature); } } if (pos != sectionPos + payloadLen) { throwError("bad features section size"); } } void WasmBinaryBuilder::readDylink(size_t payloadLen) { wasm.dylinkSection = make_unique(); auto sectionPos = pos; wasm.dylinkSection->isLegacy = true; wasm.dylinkSection->memorySize = getU32LEB(); wasm.dylinkSection->memoryAlignment = getU32LEB(); wasm.dylinkSection->tableSize = getU32LEB(); wasm.dylinkSection->tableAlignment = getU32LEB(); size_t numNeededDynlibs = getU32LEB(); for (size_t i = 0; i < numNeededDynlibs; ++i) { wasm.dylinkSection->neededDynlibs.push_back(getInlineString()); } if (pos != sectionPos + payloadLen) { throwError("bad dylink section size"); } } void WasmBinaryBuilder::readDylink0(size_t payloadLen) { BYN_TRACE("== readDylink0\n"); auto sectionPos = pos; uint32_t lastType = 0; wasm.dylinkSection = make_unique(); while (pos < sectionPos + payloadLen) { auto oldPos = pos; auto dylinkType = getU32LEB(); if (lastType && dylinkType <= lastType) { std::cerr << "warning: out-of-order dylink.0 subsection: " << dylinkType << std::endl; } lastType = dylinkType; auto subsectionSize = getU32LEB(); auto subsectionPos = pos; if (dylinkType == BinaryConsts::UserSections::Subsection::DylinkMemInfo) { wasm.dylinkSection->memorySize = getU32LEB(); wasm.dylinkSection->memoryAlignment = getU32LEB(); wasm.dylinkSection->tableSize = getU32LEB(); wasm.dylinkSection->tableAlignment = getU32LEB(); } else if (dylinkType == BinaryConsts::UserSections::Subsection::DylinkNeeded) { size_t numNeededDynlibs = getU32LEB(); for (size_t i = 0; i < numNeededDynlibs; ++i) { wasm.dylinkSection->neededDynlibs.push_back(getInlineString()); } } else { // Unknown subsection. Stop parsing now and store the rest of // the section verbatim. pos = oldPos; size_t remaining = (sectionPos + payloadLen) - pos; auto tail = getByteView(remaining); wasm.dylinkSection->tail = {tail.first, tail.second}; break; } if (pos != subsectionPos + subsectionSize) { throwError("bad dylink.0 subsection position change"); } } } BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) { if (pos == endOfFunction) { throwError("Reached function end without seeing End opcode"); } BYN_TRACE("zz recurse into " << ++depth << " at " << pos << std::endl); readNextDebugLocation(); std::set currDebugLocation; if (debugLocation.size()) { currDebugLocation.insert(*debugLocation.begin()); } size_t startPos = pos; uint8_t code = getInt8(); BYN_TRACE("readExpression seeing " << (int)code << std::endl); switch (code) { case BinaryConsts::Block: visitBlock((curr = allocator.alloc())->cast()); break; case BinaryConsts::If: visitIf((curr = allocator.alloc())->cast()); break; case BinaryConsts::Loop: visitLoop((curr = allocator.alloc())->cast()); break; case BinaryConsts::Br: case BinaryConsts::BrIf: visitBreak((curr = allocator.alloc())->cast(), code); break; // code distinguishes br from br_if case BinaryConsts::BrTable: visitSwitch((curr = allocator.alloc())->cast()); break; case BinaryConsts::CallFunction: visitCall((curr = allocator.alloc())->cast()); break; case BinaryConsts::CallIndirect: visitCallIndirect( (curr = allocator.alloc())->cast()); break; case BinaryConsts::RetCallFunction: { auto call = allocator.alloc(); call->isReturn = true; curr = call; visitCall(call); break; } case BinaryConsts::RetCallIndirect: { auto call = allocator.alloc(); call->isReturn = true; curr = call; visitCallIndirect(call); break; } case BinaryConsts::LocalGet: visitLocalGet((curr = allocator.alloc())->cast()); break; case BinaryConsts::LocalTee: case BinaryConsts::LocalSet: visitLocalSet((curr = allocator.alloc())->cast(), code); break; case BinaryConsts::GlobalGet: visitGlobalGet((curr = allocator.alloc())->cast()); break; case BinaryConsts::GlobalSet: visitGlobalSet((curr = allocator.alloc())->cast()); break; case BinaryConsts::Select: case BinaryConsts::SelectWithType: visitSelect((curr = allocator.alloc(), code); break; case BinaryConsts::Return: visitReturn((curr = allocator.alloc())->cast()); break; case BinaryConsts::Nop: visitNop((curr = allocator.alloc())->cast()); break; case BinaryConsts::Unreachable: visitUnreachable( (curr = allocator.alloc())->cast()); break; case BinaryConsts::Drop: visitDrop((curr = allocator.alloc())->cast()); break; case BinaryConsts::End: curr = nullptr; // Pop the current control flow structure off the stack. If there is none // then this is the "end" of the function itself, which also emits an // "end" byte. if (!controlFlowStack.empty()) { controlFlowStack.pop_back(); } break; case BinaryConsts::Else: case BinaryConsts::Catch: case BinaryConsts::CatchAll: { curr = nullptr; if (DWARF && currFunction) { assert(!controlFlowStack.empty()); auto currControlFlow = controlFlowStack.back(); BinaryLocation delimiterId; if (currControlFlow->is()) { delimiterId = BinaryLocations::Else; } else { // Both Catch and CatchAll can simply append to the list as we go, as // we visit them in the right order in the binary, and like the binary // we store the CatchAll at the end. delimiterId = currFunction->delimiterLocations[currControlFlow].size(); } currFunction->delimiterLocations[currControlFlow][delimiterId] = startPos - codeSectionLocation; } break; } case BinaryConsts::Delegate: { curr = nullptr; if (DWARF && currFunction) { assert(!controlFlowStack.empty()); controlFlowStack.pop_back(); } break; } case BinaryConsts::RefNull: visitRefNull((curr = allocator.alloc())->cast()); break; case BinaryConsts::RefIsNull: visitRefIs((curr = allocator.alloc())->cast(), code); break; case BinaryConsts::RefFunc: visitRefFunc((curr = allocator.alloc())->cast()); break; case BinaryConsts::RefEq: visitRefEq((curr = allocator.alloc())->cast()); break; case BinaryConsts::RefAsNonNull: visitRefAs((curr = allocator.alloc())->cast(), code); break; case BinaryConsts::BrOnNull: maybeVisitBrOn(curr, code); break; case BinaryConsts::BrOnNonNull: maybeVisitBrOn(curr, code); break; case BinaryConsts::TableGet: visitTableGet((curr = allocator.alloc())->cast()); break; case BinaryConsts::TableSet: visitTableSet((curr = allocator.alloc())->cast()); break; case BinaryConsts::Try: visitTryOrTryInBlock(curr); break; case BinaryConsts::Throw: visitThrow((curr = allocator.alloc())->cast()); break; case BinaryConsts::Rethrow: visitRethrow((curr = allocator.alloc())->cast()); break; case BinaryConsts::MemorySize: { auto size = allocator.alloc(); if (wasm.memory.is64()) { size->make64(); } curr = size; visitMemorySize(size); break; } case BinaryConsts::MemoryGrow: { auto grow = allocator.alloc(); if (wasm.memory.is64()) { grow->make64(); } curr = grow; visitMemoryGrow(grow); break; } case BinaryConsts::CallRef: visitCallRef((curr = allocator.alloc())->cast()); break; case BinaryConsts::RetCallRef: { auto call = allocator.alloc(); call->isReturn = true; curr = call; visitCallRef(call); break; } case BinaryConsts::Let: { visitLet((curr = allocator.alloc())->cast()); break; } case BinaryConsts::AtomicPrefix: { code = static_cast(getU32LEB()); if (maybeVisitLoad(curr, code, /*isAtomic=*/true)) { break; } if (maybeVisitStore(curr, code, /*isAtomic=*/true)) { break; } if (maybeVisitAtomicRMW(curr, code)) { break; } if (maybeVisitAtomicCmpxchg(curr, code)) { break; } if (maybeVisitAtomicWait(curr, code)) { break; } if (maybeVisitAtomicNotify(curr, code)) { break; } if (maybeVisitAtomicFence(curr, code)) { break; } throwError("invalid code after atomic prefix: " + std::to_string(code)); break; } case BinaryConsts::MiscPrefix: { auto opcode = getU32LEB(); if (maybeVisitTruncSat(curr, opcode)) { break; } if (maybeVisitMemoryInit(curr, opcode)) { break; } if (maybeVisitDataDrop(curr, opcode)) { break; } if (maybeVisitMemoryCopy(curr, opcode)) { break; } if (maybeVisitMemoryFill(curr, opcode)) { break; } if (maybeVisitTableSize(curr, opcode)) { break; } if (maybeVisitTableGrow(curr, opcode)) { break; } throwError("invalid code after misc prefix: " + std::to_string(opcode)); break; } case BinaryConsts::SIMDPrefix: { auto opcode = getU32LEB(); if (maybeVisitSIMDBinary(curr, opcode)) { break; } if (maybeVisitSIMDUnary(curr, opcode)) { break; } if (maybeVisitSIMDConst(curr, opcode)) { break; } if (maybeVisitSIMDStore(curr, opcode)) { break; } if (maybeVisitSIMDExtract(curr, opcode)) { break; } if (maybeVisitSIMDReplace(curr, opcode)) { break; } if (maybeVisitSIMDShuffle(curr, opcode)) { break; } if (maybeVisitSIMDTernary(curr, opcode)) { break; } if (maybeVisitSIMDShift(curr, opcode)) { break; } if (maybeVisitSIMDLoad(curr, opcode)) { break; } if (maybeVisitSIMDLoadStoreLane(curr, opcode)) { break; } throwError("invalid code after SIMD prefix: " + std::to_string(opcode)); break; } case BinaryConsts::GCPrefix: { auto opcode = getU32LEB(); if (maybeVisitI31New(curr, opcode)) { break; } if (maybeVisitI31Get(curr, opcode)) { break; } if (maybeVisitRefTest(curr, opcode)) { break; } if (maybeVisitRefCast(curr, opcode)) { break; } if (maybeVisitBrOn(curr, opcode)) { break; } if (maybeVisitRttCanon(curr, opcode)) { break; } if (maybeVisitRttSub(curr, opcode)) { break; } if (maybeVisitStructNew(curr, opcode)) { break; } if (maybeVisitStructGet(curr, opcode)) { break; } if (maybeVisitStructSet(curr, opcode)) { break; } if (maybeVisitArrayNew(curr, opcode)) { break; } if (maybeVisitArrayInit(curr, opcode)) { break; } if (maybeVisitArrayGet(curr, opcode)) { break; } if (maybeVisitArraySet(curr, opcode)) { break; } if (maybeVisitArrayLen(curr, opcode)) { break; } if (maybeVisitArrayCopy(curr, opcode)) { break; } if (opcode == BinaryConsts::RefIsFunc || opcode == BinaryConsts::RefIsData || opcode == BinaryConsts::RefIsI31) { visitRefIs((curr = allocator.alloc())->cast(), opcode); break; } if (opcode == BinaryConsts::RefAsFunc || opcode == BinaryConsts::RefAsData || opcode == BinaryConsts::RefAsI31) { visitRefAs((curr = allocator.alloc())->cast(), opcode); break; } throwError("invalid code after GC prefix: " + std::to_string(opcode)); break; } default: { // otherwise, the code is a subcode TODO: optimize if (maybeVisitBinary(curr, code)) { break; } if (maybeVisitUnary(curr, code)) { break; } if (maybeVisitConst(curr, code)) { break; } if (maybeVisitLoad(curr, code, /*isAtomic=*/false)) { break; } if (maybeVisitStore(curr, code, /*isAtomic=*/false)) { break; } throwError("bad node code " + std::to_string(code)); break; } } if (curr) { if (currDebugLocation.size()) { requireFunctionContext("debugLocation"); currFunction->debugLocations[curr] = *currDebugLocation.begin(); } if (DWARF && currFunction) { currFunction->expressionLocations[curr] = BinaryLocations::Span{BinaryLocation(startPos - codeSectionLocation), BinaryLocation(pos - codeSectionLocation)}; } } BYN_TRACE("zz recurse from " << depth-- << " at " << pos << std::endl); return BinaryConsts::ASTNodes(code); } Index WasmBinaryBuilder::getAbsoluteLocalIndex(Index index) { // Wasm binaries put each let at the bottom of the index space, which may be // good for binary size as often the uses of the let variables are close to // the let itself. However, in Binaryen IR we just have a simple flat index // space of absolute values, which we add to as we parse, and we depend on // later optimizations to reorder locals for size. // // For example, if we have $x, then we add a let with $y, the binary would map // 0 => y, 1 => x, while in Binaryen IR $x always stays at 0, and $y is added // at 1. // // Compute the relative index in the let we were added. We start by looking at // the last let added, and if we belong to it, we are already relative to it. // We will continue relativizing as we go down, til we find our let. int64_t relative = index; for (auto i = int64_t(letStack.size()) - 1; i >= 0; i--) { auto& info = letStack[i]; int64_t currNum = info.num; // There were |currNum| let items added in this let. Check if we were one of // them. if (relative < currNum) { return info.absoluteStart + relative; } relative -= currNum; } // We were not a let, but a normal var from the beginning. In that case, after // we subtracted the let items, we have the proper absolute index. return relative; } void WasmBinaryBuilder::startControlFlow(Expression* curr) { if (DWARF && currFunction) { controlFlowStack.push_back(curr); } } void WasmBinaryBuilder::pushBlockElements(Block* curr, Type type, size_t start) { assert(start <= expressionStack.size()); // The results of this block are the last values pushed to the expressionStack Expression* results = nullptr; if (type.isConcrete()) { results = popTypedExpression(type); } if (expressionStack.size() < start) { throwError("Block requires more values than are available"); } // Everything else on the stack after `start` is either a none-type expression // or a concretely-type expression that is implicitly dropped due to // unreachability at the end of the block, like this: // // block i32 // i32.const 1 // i32.const 2 // i32.const 3 // return // end // // The first two const elements will be emitted as drops in the block (the // optimizer can remove them, of course, but in general we may need dropped // items here as they may have side effects). // for (size_t i = start; i < expressionStack.size(); ++i) { auto* item = expressionStack[i]; if (item->type.isConcrete()) { item = Builder(wasm).makeDrop(item); } curr->list.push_back(item); } expressionStack.resize(start); if (results != nullptr) { curr->list.push_back(results); } } void WasmBinaryBuilder::visitBlock(Block* curr) { BYN_TRACE("zz node: Block\n"); startControlFlow(curr); // special-case Block and de-recurse nested blocks in their first position, as // that is a common pattern that can be very highly nested. std::vector stack; while (1) { curr->type = getType(); curr->name = getNextLabel(); breakStack.push_back({curr->name, curr->type}); stack.push_back(curr); if (more() && input[pos] == BinaryConsts::Block) { // a recursion readNextDebugLocation(); curr = allocator.alloc(); startControlFlow(curr); pos++; if (debugLocation.size()) { requireFunctionContext("block-debugLocation"); currFunction->debugLocations[curr] = *debugLocation.begin(); } continue; } else { // end of recursion break; } } Block* last = nullptr; while (stack.size() > 0) { curr = stack.back(); stack.pop_back(); // everything after this, that is left when we see the marker, is ours size_t start = expressionStack.size(); if (last) { // the previous block is our first-position element pushExpression(last); } last = curr; processExpressions(); size_t end = expressionStack.size(); if (end < start) { throwError("block cannot pop from outside"); } pushBlockElements(curr, curr->type, start); curr->finalize(curr->type, breakTargetNames.find(curr->name) != breakTargetNames.end() ? Block::HasBreak : Block::NoBreak); breakStack.pop_back(); breakTargetNames.erase(curr->name); } } // Gets a block of expressions. If it's just one, return that singleton. Expression* WasmBinaryBuilder::getBlockOrSingleton(Type type) { Name label = getNextLabel(); breakStack.push_back({label, type}); auto start = expressionStack.size(); processExpressions(); size_t end = expressionStack.size(); if (end < start) { throwError("block cannot pop from outside"); } breakStack.pop_back(); auto* block = allocator.alloc(); pushBlockElements(block, type, start); block->name = label; block->finalize(type); // maybe we don't need a block here? if (breakTargetNames.find(block->name) == breakTargetNames.end() && exceptionTargetNames.find(block->name) == exceptionTargetNames.end()) { block->name = Name(); if (block->list.size() == 1) { return block->list[0]; } } breakTargetNames.erase(block->name); return block; } void WasmBinaryBuilder::visitIf(If* curr) { BYN_TRACE("zz node: If\n"); startControlFlow(curr); curr->type = getType(); curr->condition = popNonVoidExpression(); curr->ifTrue = getBlockOrSingleton(curr->type); if (lastSeparator == BinaryConsts::Else) { curr->ifFalse = getBlockOrSingleton(curr->type); } curr->finalize(curr->type); if (lastSeparator != BinaryConsts::End) { throwError("if should end with End"); } } void WasmBinaryBuilder::visitLoop(Loop* curr) { BYN_TRACE("zz node: Loop\n"); startControlFlow(curr); curr->type = getType(); curr->name = getNextLabel(); breakStack.push_back({curr->name, Type::none}); // find the expressions in the block, and create the body // a loop may have a list of instructions in wasm, much like // a block, but it only has a label at the top of the loop, // so even if we need a block (if there is more than 1 // expression) we never need a label on the block. auto start = expressionStack.size(); processExpressions(); size_t end = expressionStack.size(); if (start > end) { throwError("block cannot pop from outside"); } if (end - start == 1) { curr->body = popExpression(); } else { auto* block = allocator.alloc(); pushBlockElements(block, curr->type, start); block->finalize(curr->type); curr->body = block; } breakStack.pop_back(); breakTargetNames.erase(curr->name); curr->finalize(curr->type); } WasmBinaryBuilder::BreakTarget WasmBinaryBuilder::getBreakTarget(int32_t offset) { BYN_TRACE("getBreakTarget " << offset << std::endl); if (breakStack.size() < 1 + size_t(offset)) { throwError("bad breakindex (low)"); } size_t index = breakStack.size() - 1 - offset; if (index >= breakStack.size()) { throwError("bad breakindex (high)"); } BYN_TRACE("breaktarget " << breakStack[index].name << " type " << breakStack[index].type << std::endl); auto& ret = breakStack[index]; // if the break is in literally unreachable code, then we will not emit it // anyhow, so do not note that the target has breaks to it if (!willBeIgnored) { breakTargetNames.insert(ret.name); } return ret; } Name WasmBinaryBuilder::getExceptionTargetName(int32_t offset) { BYN_TRACE("getExceptionTarget " << offset << std::endl); // We always start parsing a function by creating a block label and pushing it // in breakStack in getBlockOrSingleton, so if a 'delegate''s target is that // block, it does not mean it targets that block; it throws to the caller. if (breakStack.size() - 1 == size_t(offset)) { return DELEGATE_CALLER_TARGET; } size_t index = breakStack.size() - 1 - offset; if (index > breakStack.size()) { throwError("bad try index (high)"); } BYN_TRACE("exception target " << breakStack[index].name << std::endl); auto& ret = breakStack[index]; // if the delegate/rethrow is in literally unreachable code, then we will not // emit it anyhow, so do not note that the target has a reference to it if (!willBeIgnored) { exceptionTargetNames.insert(ret.name); } return ret.name; } void WasmBinaryBuilder::visitBreak(Break* curr, uint8_t code) { BYN_TRACE("zz node: Break, code " << int32_t(code) << std::endl); BreakTarget target = getBreakTarget(getU32LEB()); curr->name = target.name; if (code == BinaryConsts::BrIf) { curr->condition = popNonVoidExpression(); } if (target.type.isConcrete()) { curr->value = popTypedExpression(target.type); } curr->finalize(); } void WasmBinaryBuilder::visitSwitch(Switch* curr) { BYN_TRACE("zz node: Switch\n"); curr->condition = popNonVoidExpression(); auto numTargets = getU32LEB(); BYN_TRACE("targets: " << numTargets << std::endl); for (size_t i = 0; i < numTargets; i++) { curr->targets.push_back(getBreakTarget(getU32LEB()).name); } auto defaultTarget = getBreakTarget(getU32LEB()); curr->default_ = defaultTarget.name; BYN_TRACE("default: " << curr->default_ << "\n"); if (defaultTarget.type.isConcrete()) { curr->value = popTypedExpression(defaultTarget.type); } curr->finalize(); } void WasmBinaryBuilder::visitCall(Call* curr) { BYN_TRACE("zz node: Call\n"); auto index = getU32LEB(); auto sig = getSignatureByFunctionIndex(index); auto num = sig.params.size(); curr->operands.resize(num); for (size_t i = 0; i < num; i++) { curr->operands[num - i - 1] = popNonVoidExpression(); } curr->type = sig.results; functionRefs[index].push_back(curr); // we don't know function names yet curr->finalize(); } void WasmBinaryBuilder::visitCallIndirect(CallIndirect* curr) { BYN_TRACE("zz node: CallIndirect\n"); auto index = getU32LEB(); curr->heapType = getTypeByIndex(index); Index tableIdx = getU32LEB(); // TODO: Handle error cases where `heapType` is not a signature? auto num = curr->heapType.getSignature().params.size(); curr->operands.resize(num); curr->target = popNonVoidExpression(); for (size_t i = 0; i < num; i++) { curr->operands[num - i - 1] = popNonVoidExpression(); } // Defer setting the table name for later, when we know it. tableRefs[tableIdx].push_back(curr); curr->finalize(); } void WasmBinaryBuilder::visitLocalGet(LocalGet* curr) { BYN_TRACE("zz node: LocalGet " << pos << std::endl); requireFunctionContext("local.get"); curr->index = getAbsoluteLocalIndex(getU32LEB()); if (curr->index >= currFunction->getNumLocals()) { throwError("bad local.get index"); } curr->type = currFunction->getLocalType(curr->index); curr->finalize(); } void WasmBinaryBuilder::visitLocalSet(LocalSet* curr, uint8_t code) { BYN_TRACE("zz node: Set|LocalTee\n"); requireFunctionContext("local.set outside of function"); curr->index = getAbsoluteLocalIndex(getU32LEB()); if (curr->index >= currFunction->getNumLocals()) { throwError("bad local.set index"); } curr->value = popNonVoidExpression(); if (code == BinaryConsts::LocalTee) { curr->makeTee(currFunction->getLocalType(curr->index)); } else { curr->makeSet(); } curr->finalize(); } void WasmBinaryBuilder::visitGlobalGet(GlobalGet* curr) { BYN_TRACE("zz node: GlobalGet " << pos << std::endl); auto index = getU32LEB(); if (index < globalImports.size()) { auto* import = globalImports[index]; curr->name = import->name; curr->type = import->type; } else { Index adjustedIndex = index - globalImports.size(); if (adjustedIndex >= globals.size()) { throwError("invalid global index"); } auto& glob = globals[adjustedIndex]; curr->name = glob->name; curr->type = glob->type; } globalRefs[index].push_back(curr); // we don't know the final name yet } void WasmBinaryBuilder::visitGlobalSet(GlobalSet* curr) { BYN_TRACE("zz node: GlobalSet\n"); auto index = getU32LEB(); if (index < globalImports.size()) { auto* import = globalImports[index]; curr->name = import->name; } else { Index adjustedIndex = index - globalImports.size(); if (adjustedIndex >= globals.size()) { throwError("invalid global index"); } curr->name = globals[adjustedIndex]->name; } curr->value = popNonVoidExpression(); globalRefs[index].push_back(curr); // we don't know the final name yet curr->finalize(); } void WasmBinaryBuilder::readMemoryAccess(Address& alignment, Address& offset) { auto rawAlignment = getU32LEB(); if (rawAlignment > 4) { throwError("Alignment must be of a reasonable size"); } alignment = Bits::pow2(rawAlignment); offset = getUPtrLEB(); } bool WasmBinaryBuilder::maybeVisitLoad(Expression*& out, uint8_t code, bool isAtomic) { Load* curr; auto allocate = [&]() { curr = allocator.alloc(); }; if (!isAtomic) { switch (code) { case BinaryConsts::I32LoadMem8S: allocate(); curr->bytes = 1; curr->type = Type::i32; curr->signed_ = true; break; case BinaryConsts::I32LoadMem8U: allocate(); curr->bytes = 1; curr->type = Type::i32; break; case BinaryConsts::I32LoadMem16S: allocate(); curr->bytes = 2; curr->type = Type::i32; curr->signed_ = true; break; case BinaryConsts::I32LoadMem16U: allocate(); curr->bytes = 2; curr->type = Type::i32; break; case BinaryConsts::I32LoadMem: allocate(); curr->bytes = 4; curr->type = Type::i32; break; case BinaryConsts::I64LoadMem8S: allocate(); curr->bytes = 1; curr->type = Type::i64; curr->signed_ = true; break; case BinaryConsts::I64LoadMem8U: allocate(); curr->bytes = 1; curr->type = Type::i64; break; case BinaryConsts::I64LoadMem16S: allocate(); curr->bytes = 2; curr->type = Type::i64; curr->signed_ = true; break; case BinaryConsts::I64LoadMem16U: allocate(); curr->bytes = 2; curr->type = Type::i64; break; case BinaryConsts::I64LoadMem32S: allocate(); curr->bytes = 4; curr->type = Type::i64; curr->signed_ = true; break; case BinaryConsts::I64LoadMem32U: allocate(); curr->bytes = 4; curr->type = Type::i64; break; case BinaryConsts::I64LoadMem: allocate(); curr->bytes = 8; curr->type = Type::i64; break; case BinaryConsts::F32LoadMem: allocate(); curr->bytes = 4; curr->type = Type::f32; break; case BinaryConsts::F64LoadMem: allocate(); curr->bytes = 8; curr->type = Type::f64; break; default: return false; } BYN_TRACE("zz node: Load\n"); } else { switch (code) { case BinaryConsts::I32AtomicLoad8U: allocate(); curr->bytes = 1; curr->type = Type::i32; break; case BinaryConsts::I32AtomicLoad16U: allocate(); curr->bytes = 2; curr->type = Type::i32; break; case BinaryConsts::I32AtomicLoad: allocate(); curr->bytes = 4; curr->type = Type::i32; break; case BinaryConsts::I64AtomicLoad8U: allocate(); curr->bytes = 1; curr->type = Type::i64; break; case BinaryConsts::I64AtomicLoad16U: allocate(); curr->bytes = 2; curr->type = Type::i64; break; case BinaryConsts::I64AtomicLoad32U: allocate(); curr->bytes = 4; curr->type = Type::i64; break; case BinaryConsts::I64AtomicLoad: allocate(); curr->bytes = 8; curr->type = Type::i64; break; default: return false; } BYN_TRACE("zz node: AtomicLoad\n"); } curr->isAtomic = isAtomic; readMemoryAccess(curr->align, curr->offset); curr->ptr = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitStore(Expression*& out, uint8_t code, bool isAtomic) { Store* curr; if (!isAtomic) { switch (code) { case BinaryConsts::I32StoreMem8: curr = allocator.alloc(); curr->bytes = 1; curr->valueType = Type::i32; break; case BinaryConsts::I32StoreMem16: curr = allocator.alloc(); curr->bytes = 2; curr->valueType = Type::i32; break; case BinaryConsts::I32StoreMem: curr = allocator.alloc(); curr->bytes = 4; curr->valueType = Type::i32; break; case BinaryConsts::I64StoreMem8: curr = allocator.alloc(); curr->bytes = 1; curr->valueType = Type::i64; break; case BinaryConsts::I64StoreMem16: curr = allocator.alloc(); curr->bytes = 2; curr->valueType = Type::i64; break; case BinaryConsts::I64StoreMem32: curr = allocator.alloc(); curr->bytes = 4; curr->valueType = Type::i64; break; case BinaryConsts::I64StoreMem: curr = allocator.alloc(); curr->bytes = 8; curr->valueType = Type::i64; break; case BinaryConsts::F32StoreMem: curr = allocator.alloc(); curr->bytes = 4; curr->valueType = Type::f32; break; case BinaryConsts::F64StoreMem: curr = allocator.alloc(); curr->bytes = 8; curr->valueType = Type::f64; break; default: return false; } } else { switch (code) { case BinaryConsts::I32AtomicStore8: curr = allocator.alloc(); curr->bytes = 1; curr->valueType = Type::i32; break; case BinaryConsts::I32AtomicStore16: curr = allocator.alloc(); curr->bytes = 2; curr->valueType = Type::i32; break; case BinaryConsts::I32AtomicStore: curr = allocator.alloc(); curr->bytes = 4; curr->valueType = Type::i32; break; case BinaryConsts::I64AtomicStore8: curr = allocator.alloc(); curr->bytes = 1; curr->valueType = Type::i64; break; case BinaryConsts::I64AtomicStore16: curr = allocator.alloc(); curr->bytes = 2; curr->valueType = Type::i64; break; case BinaryConsts::I64AtomicStore32: curr = allocator.alloc(); curr->bytes = 4; curr->valueType = Type::i64; break; case BinaryConsts::I64AtomicStore: curr = allocator.alloc(); curr->bytes = 8; curr->valueType = Type::i64; break; default: return false; } } curr->isAtomic = isAtomic; BYN_TRACE("zz node: Store\n"); readMemoryAccess(curr->align, curr->offset); curr->value = popNonVoidExpression(); curr->ptr = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitAtomicRMW(Expression*& out, uint8_t code) { if (code < BinaryConsts::AtomicRMWOps_Begin || code > BinaryConsts::AtomicRMWOps_End) { return false; } auto* curr = allocator.alloc(); // Set curr to the given opcode, type and size. #define SET(opcode, optype, size) \ curr->op = RMW##opcode; \ curr->type = optype; \ curr->bytes = size // Handle the cases for all the valid types for a particular opcode #define SET_FOR_OP(Op) \ case BinaryConsts::I32AtomicRMW##Op: \ SET(Op, Type::i32, 4); \ break; \ case BinaryConsts::I32AtomicRMW##Op##8U: \ SET(Op, Type::i32, 1); \ break; \ case BinaryConsts::I32AtomicRMW##Op##16U: \ SET(Op, Type::i32, 2); \ break; \ case BinaryConsts::I64AtomicRMW##Op: \ SET(Op, Type::i64, 8); \ break; \ case BinaryConsts::I64AtomicRMW##Op##8U: \ SET(Op, Type::i64, 1); \ break; \ case BinaryConsts::I64AtomicRMW##Op##16U: \ SET(Op, Type::i64, 2); \ break; \ case BinaryConsts::I64AtomicRMW##Op##32U: \ SET(Op, Type::i64, 4); \ break; switch (code) { SET_FOR_OP(Add); SET_FOR_OP(Sub); SET_FOR_OP(And); SET_FOR_OP(Or); SET_FOR_OP(Xor); SET_FOR_OP(Xchg); default: WASM_UNREACHABLE("unexpected opcode"); } #undef SET_FOR_OP #undef SET BYN_TRACE("zz node: AtomicRMW\n"); Address readAlign; readMemoryAccess(readAlign, curr->offset); if (readAlign != curr->bytes) { throwError("Align of AtomicRMW must match size"); } curr->value = popNonVoidExpression(); curr->ptr = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitAtomicCmpxchg(Expression*& out, uint8_t code) { if (code < BinaryConsts::AtomicCmpxchgOps_Begin || code > BinaryConsts::AtomicCmpxchgOps_End) { return false; } auto* curr = allocator.alloc(); // Set curr to the given type and size. #define SET(optype, size) \ curr->type = optype; \ curr->bytes = size switch (code) { case BinaryConsts::I32AtomicCmpxchg: SET(Type::i32, 4); break; case BinaryConsts::I64AtomicCmpxchg: SET(Type::i64, 8); break; case BinaryConsts::I32AtomicCmpxchg8U: SET(Type::i32, 1); break; case BinaryConsts::I32AtomicCmpxchg16U: SET(Type::i32, 2); break; case BinaryConsts::I64AtomicCmpxchg8U: SET(Type::i64, 1); break; case BinaryConsts::I64AtomicCmpxchg16U: SET(Type::i64, 2); break; case BinaryConsts::I64AtomicCmpxchg32U: SET(Type::i64, 4); break; default: WASM_UNREACHABLE("unexpected opcode"); } BYN_TRACE("zz node: AtomicCmpxchg\n"); Address readAlign; readMemoryAccess(readAlign, curr->offset); if (readAlign != curr->bytes) { throwError("Align of AtomicCpxchg must match size"); } curr->replacement = popNonVoidExpression(); curr->expected = popNonVoidExpression(); curr->ptr = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitAtomicWait(Expression*& out, uint8_t code) { if (code < BinaryConsts::I32AtomicWait || code > BinaryConsts::I64AtomicWait) { return false; } auto* curr = allocator.alloc(); switch (code) { case BinaryConsts::I32AtomicWait: curr->expectedType = Type::i32; break; case BinaryConsts::I64AtomicWait: curr->expectedType = Type::i64; break; default: WASM_UNREACHABLE("unexpected opcode"); } curr->type = Type::i32; BYN_TRACE("zz node: AtomicWait\n"); curr->timeout = popNonVoidExpression(); curr->expected = popNonVoidExpression(); curr->ptr = popNonVoidExpression(); Address readAlign; readMemoryAccess(readAlign, curr->offset); if (readAlign != curr->expectedType.getByteSize()) { throwError("Align of AtomicWait must match size"); } curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitAtomicNotify(Expression*& out, uint8_t code) { if (code != BinaryConsts::AtomicNotify) { return false; } auto* curr = allocator.alloc(); BYN_TRACE("zz node: AtomicNotify\n"); curr->type = Type::i32; curr->notifyCount = popNonVoidExpression(); curr->ptr = popNonVoidExpression(); Address readAlign; readMemoryAccess(readAlign, curr->offset); if (readAlign != curr->type.getByteSize()) { throwError("Align of AtomicNotify must match size"); } curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitAtomicFence(Expression*& out, uint8_t code) { if (code != BinaryConsts::AtomicFence) { return false; } auto* curr = allocator.alloc(); BYN_TRACE("zz node: AtomicFence\n"); curr->order = getU32LEB(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitConst(Expression*& out, uint8_t code) { Const* curr; BYN_TRACE("zz node: Const, code " << code << std::endl); switch (code) { case BinaryConsts::I32Const: curr = allocator.alloc(); curr->value = Literal(getS32LEB()); break; case BinaryConsts::I64Const: curr = allocator.alloc(); curr->value = Literal(getS64LEB()); break; case BinaryConsts::F32Const: curr = allocator.alloc(); curr->value = getFloat32Literal(); break; case BinaryConsts::F64Const: curr = allocator.alloc(); curr->value = getFloat64Literal(); break; default: return false; } curr->type = curr->value.type; out = curr; return true; } bool WasmBinaryBuilder::maybeVisitUnary(Expression*& out, uint8_t code) { Unary* curr; switch (code) { case BinaryConsts::I32Clz: curr = allocator.alloc(); curr->op = ClzInt32; break; case BinaryConsts::I64Clz: curr = allocator.alloc(); curr->op = ClzInt64; break; case BinaryConsts::I32Ctz: curr = allocator.alloc(); curr->op = CtzInt32; break; case BinaryConsts::I64Ctz: curr = allocator.alloc(); curr->op = CtzInt64; break; case BinaryConsts::I32Popcnt: curr = allocator.alloc(); curr->op = PopcntInt32; break; case BinaryConsts::I64Popcnt: curr = allocator.alloc(); curr->op = PopcntInt64; break; case BinaryConsts::I32EqZ: curr = allocator.alloc(); curr->op = EqZInt32; break; case BinaryConsts::I64EqZ: curr = allocator.alloc(); curr->op = EqZInt64; break; case BinaryConsts::F32Neg: curr = allocator.alloc(); curr->op = NegFloat32; break; case BinaryConsts::F64Neg: curr = allocator.alloc(); curr->op = NegFloat64; break; case BinaryConsts::F32Abs: curr = allocator.alloc(); curr->op = AbsFloat32; break; case BinaryConsts::F64Abs: curr = allocator.alloc(); curr->op = AbsFloat64; break; case BinaryConsts::F32Ceil: curr = allocator.alloc(); curr->op = CeilFloat32; break; case BinaryConsts::F64Ceil: curr = allocator.alloc(); curr->op = CeilFloat64; break; case BinaryConsts::F32Floor: curr = allocator.alloc(); curr->op = FloorFloat32; break; case BinaryConsts::F64Floor: curr = allocator.alloc(); curr->op = FloorFloat64; break; case BinaryConsts::F32NearestInt: curr = allocator.alloc(); curr->op = NearestFloat32; break; case BinaryConsts::F64NearestInt: curr = allocator.alloc(); curr->op = NearestFloat64; break; case BinaryConsts::F32Sqrt: curr = allocator.alloc(); curr->op = SqrtFloat32; break; case BinaryConsts::F64Sqrt: curr = allocator.alloc(); curr->op = SqrtFloat64; break; case BinaryConsts::F32UConvertI32: curr = allocator.alloc(); curr->op = ConvertUInt32ToFloat32; break; case BinaryConsts::F64UConvertI32: curr = allocator.alloc(); curr->op = ConvertUInt32ToFloat64; break; case BinaryConsts::F32SConvertI32: curr = allocator.alloc(); curr->op = ConvertSInt32ToFloat32; break; case BinaryConsts::F64SConvertI32: curr = allocator.alloc(); curr->op = ConvertSInt32ToFloat64; break; case BinaryConsts::F32UConvertI64: curr = allocator.alloc(); curr->op = ConvertUInt64ToFloat32; break; case BinaryConsts::F64UConvertI64: curr = allocator.alloc(); curr->op = ConvertUInt64ToFloat64; break; case BinaryConsts::F32SConvertI64: curr = allocator.alloc(); curr->op = ConvertSInt64ToFloat32; break; case BinaryConsts::F64SConvertI64: curr = allocator.alloc(); curr->op = ConvertSInt64ToFloat64; break; case BinaryConsts::I64SExtendI32: curr = allocator.alloc(); curr->op = ExtendSInt32; break; case BinaryConsts::I64UExtendI32: curr = allocator.alloc(); curr->op = ExtendUInt32; break; case BinaryConsts::I32WrapI64: curr = allocator.alloc(); curr->op = WrapInt64; break; case BinaryConsts::I32UTruncF32: curr = allocator.alloc(); curr->op = TruncUFloat32ToInt32; break; case BinaryConsts::I32UTruncF64: curr = allocator.alloc(); curr->op = TruncUFloat64ToInt32; break; case BinaryConsts::I32STruncF32: curr = allocator.alloc(); curr->op = TruncSFloat32ToInt32; break; case BinaryConsts::I32STruncF64: curr = allocator.alloc(); curr->op = TruncSFloat64ToInt32; break; case BinaryConsts::I64UTruncF32: curr = allocator.alloc(); curr->op = TruncUFloat32ToInt64; break; case BinaryConsts::I64UTruncF64: curr = allocator.alloc(); curr->op = TruncUFloat64ToInt64; break; case BinaryConsts::I64STruncF32: curr = allocator.alloc(); curr->op = TruncSFloat32ToInt64; break; case BinaryConsts::I64STruncF64: curr = allocator.alloc(); curr->op = TruncSFloat64ToInt64; break; case BinaryConsts::F32Trunc: curr = allocator.alloc(); curr->op = TruncFloat32; break; case BinaryConsts::F64Trunc: curr = allocator.alloc(); curr->op = TruncFloat64; break; case BinaryConsts::F32DemoteI64: curr = allocator.alloc(); curr->op = DemoteFloat64; break; case BinaryConsts::F64PromoteF32: curr = allocator.alloc(); curr->op = PromoteFloat32; break; case BinaryConsts::I32ReinterpretF32: curr = allocator.alloc(); curr->op = ReinterpretFloat32; break; case BinaryConsts::I64ReinterpretF64: curr = allocator.alloc(); curr->op = ReinterpretFloat64; break; case BinaryConsts::F32ReinterpretI32: curr = allocator.alloc(); curr->op = ReinterpretInt32; break; case BinaryConsts::F64ReinterpretI64: curr = allocator.alloc(); curr->op = ReinterpretInt64; break; case BinaryConsts::I32ExtendS8: curr = allocator.alloc(); curr->op = ExtendS8Int32; break; case BinaryConsts::I32ExtendS16: curr = allocator.alloc(); curr->op = ExtendS16Int32; break; case BinaryConsts::I64ExtendS8: curr = allocator.alloc(); curr->op = ExtendS8Int64; break; case BinaryConsts::I64ExtendS16: curr = allocator.alloc(); curr->op = ExtendS16Int64; break; case BinaryConsts::I64ExtendS32: curr = allocator.alloc(); curr->op = ExtendS32Int64; break; default: return false; } BYN_TRACE("zz node: Unary\n"); curr->value = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitTruncSat(Expression*& out, uint32_t code) { Unary* curr; switch (code) { case BinaryConsts::I32STruncSatF32: curr = allocator.alloc(); curr->op = TruncSatSFloat32ToInt32; break; case BinaryConsts::I32UTruncSatF32: curr = allocator.alloc(); curr->op = TruncSatUFloat32ToInt32; break; case BinaryConsts::I32STruncSatF64: curr = allocator.alloc(); curr->op = TruncSatSFloat64ToInt32; break; case BinaryConsts::I32UTruncSatF64: curr = allocator.alloc(); curr->op = TruncSatUFloat64ToInt32; break; case BinaryConsts::I64STruncSatF32: curr = allocator.alloc(); curr->op = TruncSatSFloat32ToInt64; break; case BinaryConsts::I64UTruncSatF32: curr = allocator.alloc(); curr->op = TruncSatUFloat32ToInt64; break; case BinaryConsts::I64STruncSatF64: curr = allocator.alloc(); curr->op = TruncSatSFloat64ToInt64; break; case BinaryConsts::I64UTruncSatF64: curr = allocator.alloc(); curr->op = TruncSatUFloat64ToInt64; break; default: return false; } BYN_TRACE("zz node: Unary (nontrapping float-to-int)\n"); curr->value = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitMemoryInit(Expression*& out, uint32_t code) { if (code != BinaryConsts::MemoryInit) { return false; } auto* curr = allocator.alloc(); curr->size = popNonVoidExpression(); curr->offset = popNonVoidExpression(); curr->dest = popNonVoidExpression(); curr->segment = getU32LEB(); if (getInt8() != 0) { throwError("Unexpected nonzero memory index"); } curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitDataDrop(Expression*& out, uint32_t code) { if (code != BinaryConsts::DataDrop) { return false; } auto* curr = allocator.alloc(); curr->segment = getU32LEB(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitMemoryCopy(Expression*& out, uint32_t code) { if (code != BinaryConsts::MemoryCopy) { return false; } auto* curr = allocator.alloc(); curr->size = popNonVoidExpression(); curr->source = popNonVoidExpression(); curr->dest = popNonVoidExpression(); if (getInt8() != 0 || getInt8() != 0) { throwError("Unexpected nonzero memory index"); } curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitMemoryFill(Expression*& out, uint32_t code) { if (code != BinaryConsts::MemoryFill) { return false; } auto* curr = allocator.alloc(); curr->size = popNonVoidExpression(); curr->value = popNonVoidExpression(); curr->dest = popNonVoidExpression(); if (getInt8() != 0) { throwError("Unexpected nonzero memory index"); } curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitTableSize(Expression*& out, uint32_t code) { if (code != BinaryConsts::TableSize) { return false; } Index tableIdx = getU32LEB(); if (tableIdx >= tables.size()) { throwError("bad table index"); } auto* curr = allocator.alloc(); curr->finalize(); // Defer setting the table name for later, when we know it. tableRefs[tableIdx].push_back(curr); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitTableGrow(Expression*& out, uint32_t code) { if (code != BinaryConsts::TableGrow) { return false; } Index tableIdx = getU32LEB(); if (tableIdx >= tables.size()) { throwError("bad table index"); } auto* curr = allocator.alloc(); curr->delta = popNonVoidExpression(); curr->value = popNonVoidExpression(); curr->finalize(); // Defer setting the table name for later, when we know it. tableRefs[tableIdx].push_back(curr); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitBinary(Expression*& out, uint8_t code) { Binary* curr; #define INT_TYPED_CODE(code) \ { \ case BinaryConsts::I32##code: \ curr = allocator.alloc(); \ curr->op = code##Int32; \ break; \ case BinaryConsts::I64##code: \ curr = allocator.alloc(); \ curr->op = code##Int64; \ break; \ } #define FLOAT_TYPED_CODE(code) \ { \ case BinaryConsts::F32##code: \ curr = allocator.alloc(); \ curr->op = code##Float32; \ break; \ case BinaryConsts::F64##code: \ curr = allocator.alloc(); \ curr->op = code##Float64; \ break; \ } #define TYPED_CODE(code) \ { \ INT_TYPED_CODE(code) \ FLOAT_TYPED_CODE(code) \ } switch (code) { TYPED_CODE(Add); TYPED_CODE(Sub); TYPED_CODE(Mul); INT_TYPED_CODE(DivS); INT_TYPED_CODE(DivU); INT_TYPED_CODE(RemS); INT_TYPED_CODE(RemU); INT_TYPED_CODE(And); INT_TYPED_CODE(Or); INT_TYPED_CODE(Xor); INT_TYPED_CODE(Shl); INT_TYPED_CODE(ShrU); INT_TYPED_CODE(ShrS); INT_TYPED_CODE(RotL); INT_TYPED_CODE(RotR); FLOAT_TYPED_CODE(Div); FLOAT_TYPED_CODE(CopySign); FLOAT_TYPED_CODE(Min); FLOAT_TYPED_CODE(Max); TYPED_CODE(Eq); TYPED_CODE(Ne); INT_TYPED_CODE(LtS); INT_TYPED_CODE(LtU); INT_TYPED_CODE(LeS); INT_TYPED_CODE(LeU); INT_TYPED_CODE(GtS); INT_TYPED_CODE(GtU); INT_TYPED_CODE(GeS); INT_TYPED_CODE(GeU); FLOAT_TYPED_CODE(Lt); FLOAT_TYPED_CODE(Le); FLOAT_TYPED_CODE(Gt); FLOAT_TYPED_CODE(Ge); default: return false; } BYN_TRACE("zz node: Binary\n"); curr->right = popNonVoidExpression(); curr->left = popNonVoidExpression(); curr->finalize(); out = curr; return true; #undef TYPED_CODE #undef INT_TYPED_CODE #undef FLOAT_TYPED_CODE } bool WasmBinaryBuilder::maybeVisitSIMDBinary(Expression*& out, uint32_t code) { Binary* curr; switch (code) { case BinaryConsts::I8x16Eq: curr = allocator.alloc(); curr->op = EqVecI8x16; break; case BinaryConsts::I8x16Ne: curr = allocator.alloc(); curr->op = NeVecI8x16; break; case BinaryConsts::I8x16LtS: curr = allocator.alloc(); curr->op = LtSVecI8x16; break; case BinaryConsts::I8x16LtU: curr = allocator.alloc(); curr->op = LtUVecI8x16; break; case BinaryConsts::I8x16GtS: curr = allocator.alloc(); curr->op = GtSVecI8x16; break; case BinaryConsts::I8x16GtU: curr = allocator.alloc(); curr->op = GtUVecI8x16; break; case BinaryConsts::I8x16LeS: curr = allocator.alloc(); curr->op = LeSVecI8x16; break; case BinaryConsts::I8x16LeU: curr = allocator.alloc(); curr->op = LeUVecI8x16; break; case BinaryConsts::I8x16GeS: curr = allocator.alloc(); curr->op = GeSVecI8x16; break; case BinaryConsts::I8x16GeU: curr = allocator.alloc(); curr->op = GeUVecI8x16; break; case BinaryConsts::I16x8Eq: curr = allocator.alloc(); curr->op = EqVecI16x8; break; case BinaryConsts::I16x8Ne: curr = allocator.alloc(); curr->op = NeVecI16x8; break; case BinaryConsts::I16x8LtS: curr = allocator.alloc(); curr->op = LtSVecI16x8; break; case BinaryConsts::I16x8LtU: curr = allocator.alloc(); curr->op = LtUVecI16x8; break; case BinaryConsts::I16x8GtS: curr = allocator.alloc(); curr->op = GtSVecI16x8; break; case BinaryConsts::I16x8GtU: curr = allocator.alloc(); curr->op = GtUVecI16x8; break; case BinaryConsts::I16x8LeS: curr = allocator.alloc(); curr->op = LeSVecI16x8; break; case BinaryConsts::I16x8LeU: curr = allocator.alloc(); curr->op = LeUVecI16x8; break; case BinaryConsts::I16x8GeS: curr = allocator.alloc(); curr->op = GeSVecI16x8; break; case BinaryConsts::I16x8GeU: curr = allocator.alloc(); curr->op = GeUVecI16x8; break; case BinaryConsts::I32x4Eq: curr = allocator.alloc(); curr->op = EqVecI32x4; break; case BinaryConsts::I32x4Ne: curr = allocator.alloc(); curr->op = NeVecI32x4; break; case BinaryConsts::I32x4LtS: curr = allocator.alloc(); curr->op = LtSVecI32x4; break; case BinaryConsts::I32x4LtU: curr = allocator.alloc(); curr->op = LtUVecI32x4; break; case BinaryConsts::I32x4GtS: curr = allocator.alloc(); curr->op = GtSVecI32x4; break; case BinaryConsts::I32x4GtU: curr = allocator.alloc(); curr->op = GtUVecI32x4; break; case BinaryConsts::I32x4LeS: curr = allocator.alloc(); curr->op = LeSVecI32x4; break; case BinaryConsts::I32x4LeU: curr = allocator.alloc(); curr->op = LeUVecI32x4; break; case BinaryConsts::I32x4GeS: curr = allocator.alloc(); curr->op = GeSVecI32x4; break; case BinaryConsts::I32x4GeU: curr = allocator.alloc(); curr->op = GeUVecI32x4; break; case BinaryConsts::I64x2Eq: curr = allocator.alloc(); curr->op = EqVecI64x2; break; case BinaryConsts::I64x2Ne: curr = allocator.alloc(); curr->op = NeVecI64x2; break; case BinaryConsts::I64x2LtS: curr = allocator.alloc(); curr->op = LtSVecI64x2; break; case BinaryConsts::I64x2GtS: curr = allocator.alloc(); curr->op = GtSVecI64x2; break; case BinaryConsts::I64x2LeS: curr = allocator.alloc(); curr->op = LeSVecI64x2; break; case BinaryConsts::I64x2GeS: curr = allocator.alloc(); curr->op = GeSVecI64x2; break; case BinaryConsts::F32x4Eq: curr = allocator.alloc(); curr->op = EqVecF32x4; break; case BinaryConsts::F32x4Ne: curr = allocator.alloc(); curr->op = NeVecF32x4; break; case BinaryConsts::F32x4Lt: curr = allocator.alloc(); curr->op = LtVecF32x4; break; case BinaryConsts::F32x4Gt: curr = allocator.alloc(); curr->op = GtVecF32x4; break; case BinaryConsts::F32x4Le: curr = allocator.alloc(); curr->op = LeVecF32x4; break; case BinaryConsts::F32x4Ge: curr = allocator.alloc(); curr->op = GeVecF32x4; break; case BinaryConsts::F64x2Eq: curr = allocator.alloc(); curr->op = EqVecF64x2; break; case BinaryConsts::F64x2Ne: curr = allocator.alloc(); curr->op = NeVecF64x2; break; case BinaryConsts::F64x2Lt: curr = allocator.alloc(); curr->op = LtVecF64x2; break; case BinaryConsts::F64x2Gt: curr = allocator.alloc(); curr->op = GtVecF64x2; break; case BinaryConsts::F64x2Le: curr = allocator.alloc(); curr->op = LeVecF64x2; break; case BinaryConsts::F64x2Ge: curr = allocator.alloc(); curr->op = GeVecF64x2; break; case BinaryConsts::V128And: curr = allocator.alloc(); curr->op = AndVec128; break; case BinaryConsts::V128Or: curr = allocator.alloc(); curr->op = OrVec128; break; case BinaryConsts::V128Xor: curr = allocator.alloc(); curr->op = XorVec128; break; case BinaryConsts::V128Andnot: curr = allocator.alloc(); curr->op = AndNotVec128; break; case BinaryConsts::I8x16Add: curr = allocator.alloc(); curr->op = AddVecI8x16; break; case BinaryConsts::I8x16AddSatS: curr = allocator.alloc(); curr->op = AddSatSVecI8x16; break; case BinaryConsts::I8x16AddSatU: curr = allocator.alloc(); curr->op = AddSatUVecI8x16; break; case BinaryConsts::I8x16Sub: curr = allocator.alloc(); curr->op = SubVecI8x16; break; case BinaryConsts::I8x16SubSatS: curr = allocator.alloc(); curr->op = SubSatSVecI8x16; break; case BinaryConsts::I8x16SubSatU: curr = allocator.alloc(); curr->op = SubSatUVecI8x16; break; case BinaryConsts::I8x16MinS: curr = allocator.alloc(); curr->op = MinSVecI8x16; break; case BinaryConsts::I8x16MinU: curr = allocator.alloc(); curr->op = MinUVecI8x16; break; case BinaryConsts::I8x16MaxS: curr = allocator.alloc(); curr->op = MaxSVecI8x16; break; case BinaryConsts::I8x16MaxU: curr = allocator.alloc(); curr->op = MaxUVecI8x16; break; case BinaryConsts::I8x16AvgrU: curr = allocator.alloc(); curr->op = AvgrUVecI8x16; break; case BinaryConsts::I16x8Add: curr = allocator.alloc(); curr->op = AddVecI16x8; break; case BinaryConsts::I16x8AddSatS: curr = allocator.alloc(); curr->op = AddSatSVecI16x8; break; case BinaryConsts::I16x8AddSatU: curr = allocator.alloc(); curr->op = AddSatUVecI16x8; break; case BinaryConsts::I16x8Sub: curr = allocator.alloc(); curr->op = SubVecI16x8; break; case BinaryConsts::I16x8SubSatS: curr = allocator.alloc(); curr->op = SubSatSVecI16x8; break; case BinaryConsts::I16x8SubSatU: curr = allocator.alloc(); curr->op = SubSatUVecI16x8; break; case BinaryConsts::I16x8Mul: curr = allocator.alloc(); curr->op = MulVecI16x8; break; case BinaryConsts::I16x8MinS: curr = allocator.alloc(); curr->op = MinSVecI16x8; break; case BinaryConsts::I16x8MinU: curr = allocator.alloc(); curr->op = MinUVecI16x8; break; case BinaryConsts::I16x8MaxS: curr = allocator.alloc(); curr->op = MaxSVecI16x8; break; case BinaryConsts::I16x8MaxU: curr = allocator.alloc(); curr->op = MaxUVecI16x8; break; case BinaryConsts::I16x8AvgrU: curr = allocator.alloc(); curr->op = AvgrUVecI16x8; break; case BinaryConsts::I16x8Q15MulrSatS: curr = allocator.alloc(); curr->op = Q15MulrSatSVecI16x8; break; case BinaryConsts::I16x8ExtmulLowI8x16S: curr = allocator.alloc(); curr->op = ExtMulLowSVecI16x8; break; case BinaryConsts::I16x8ExtmulHighI8x16S: curr = allocator.alloc(); curr->op = ExtMulHighSVecI16x8; break; case BinaryConsts::I16x8ExtmulLowI8x16U: curr = allocator.alloc(); curr->op = ExtMulLowUVecI16x8; break; case BinaryConsts::I16x8ExtmulHighI8x16U: curr = allocator.alloc(); curr->op = ExtMulHighUVecI16x8; break; case BinaryConsts::I32x4Add: curr = allocator.alloc(); curr->op = AddVecI32x4; break; case BinaryConsts::I32x4Sub: curr = allocator.alloc(); curr->op = SubVecI32x4; break; case BinaryConsts::I32x4Mul: curr = allocator.alloc(); curr->op = MulVecI32x4; break; case BinaryConsts::I32x4MinS: curr = allocator.alloc(); curr->op = MinSVecI32x4; break; case BinaryConsts::I32x4MinU: curr = allocator.alloc(); curr->op = MinUVecI32x4; break; case BinaryConsts::I32x4MaxS: curr = allocator.alloc(); curr->op = MaxSVecI32x4; break; case BinaryConsts::I32x4MaxU: curr = allocator.alloc(); curr->op = MaxUVecI32x4; break; case BinaryConsts::I32x4DotI16x8S: curr = allocator.alloc(); curr->op = DotSVecI16x8ToVecI32x4; break; case BinaryConsts::I32x4ExtmulLowI16x8S: curr = allocator.alloc(); curr->op = ExtMulLowSVecI32x4; break; case BinaryConsts::I32x4ExtmulHighI16x8S: curr = allocator.alloc(); curr->op = ExtMulHighSVecI32x4; break; case BinaryConsts::I32x4ExtmulLowI16x8U: curr = allocator.alloc(); curr->op = ExtMulLowUVecI32x4; break; case BinaryConsts::I32x4ExtmulHighI16x8U: curr = allocator.alloc(); curr->op = ExtMulHighUVecI32x4; break; case BinaryConsts::I64x2Add: curr = allocator.alloc(); curr->op = AddVecI64x2; break; case BinaryConsts::I64x2Sub: curr = allocator.alloc(); curr->op = SubVecI64x2; break; case BinaryConsts::I64x2Mul: curr = allocator.alloc(); curr->op = MulVecI64x2; break; case BinaryConsts::I64x2ExtmulLowI32x4S: curr = allocator.alloc(); curr->op = ExtMulLowSVecI64x2; break; case BinaryConsts::I64x2ExtmulHighI32x4S: curr = allocator.alloc(); curr->op = ExtMulHighSVecI64x2; break; case BinaryConsts::I64x2ExtmulLowI32x4U: curr = allocator.alloc(); curr->op = ExtMulLowUVecI64x2; break; case BinaryConsts::I64x2ExtmulHighI32x4U: curr = allocator.alloc(); curr->op = ExtMulHighUVecI64x2; break; case BinaryConsts::F32x4Add: curr = allocator.alloc(); curr->op = AddVecF32x4; break; case BinaryConsts::F32x4Sub: curr = allocator.alloc(); curr->op = SubVecF32x4; break; case BinaryConsts::F32x4Mul: curr = allocator.alloc(); curr->op = MulVecF32x4; break; case BinaryConsts::F32x4Div: curr = allocator.alloc(); curr->op = DivVecF32x4; break; case BinaryConsts::F32x4Min: curr = allocator.alloc(); curr->op = MinVecF32x4; break; case BinaryConsts::F32x4Max: curr = allocator.alloc(); curr->op = MaxVecF32x4; break; case BinaryConsts::F32x4Pmin: curr = allocator.alloc(); curr->op = PMinVecF32x4; break; case BinaryConsts::F32x4Pmax: curr = allocator.alloc(); curr->op = PMaxVecF32x4; break; case BinaryConsts::F64x2Add: curr = allocator.alloc(); curr->op = AddVecF64x2; break; case BinaryConsts::F64x2Sub: curr = allocator.alloc(); curr->op = SubVecF64x2; break; case BinaryConsts::F64x2Mul: curr = allocator.alloc(); curr->op = MulVecF64x2; break; case BinaryConsts::F64x2Div: curr = allocator.alloc(); curr->op = DivVecF64x2; break; case BinaryConsts::F64x2Min: curr = allocator.alloc(); curr->op = MinVecF64x2; break; case BinaryConsts::F64x2Max: curr = allocator.alloc(); curr->op = MaxVecF64x2; break; case BinaryConsts::F64x2Pmin: curr = allocator.alloc(); curr->op = PMinVecF64x2; break; case BinaryConsts::F64x2Pmax: curr = allocator.alloc(); curr->op = PMaxVecF64x2; break; case BinaryConsts::I8x16NarrowI16x8S: curr = allocator.alloc(); curr->op = NarrowSVecI16x8ToVecI8x16; break; case BinaryConsts::I8x16NarrowI16x8U: curr = allocator.alloc(); curr->op = NarrowUVecI16x8ToVecI8x16; break; case BinaryConsts::I16x8NarrowI32x4S: curr = allocator.alloc(); curr->op = NarrowSVecI32x4ToVecI16x8; break; case BinaryConsts::I16x8NarrowI32x4U: curr = allocator.alloc(); curr->op = NarrowUVecI32x4ToVecI16x8; break; case BinaryConsts::I8x16Swizzle: curr = allocator.alloc(); curr->op = SwizzleVecI8x16; break; case BinaryConsts::I8x16RelaxedSwizzle: curr = allocator.alloc(); curr->op = RelaxedSwizzleVecI8x16; break; case BinaryConsts::F32x4RelaxedMin: curr = allocator.alloc(); curr->op = RelaxedMinVecF32x4; break; case BinaryConsts::F32x4RelaxedMax: curr = allocator.alloc(); curr->op = RelaxedMaxVecF32x4; break; case BinaryConsts::F64x2RelaxedMin: curr = allocator.alloc(); curr->op = RelaxedMinVecF64x2; break; case BinaryConsts::F64x2RelaxedMax: curr = allocator.alloc(); curr->op = RelaxedMaxVecF64x2; break; case BinaryConsts::I16x8RelaxedQ15MulrS: curr = allocator.alloc(); curr->op = RelaxedQ15MulrSVecI16x8; break; case BinaryConsts::I16x8DotI8x16I7x16S: curr = allocator.alloc(); curr->op = DotI8x16I7x16SToVecI16x8; break; case BinaryConsts::I16x8DotI8x16I7x16U: curr = allocator.alloc(); curr->op = DotI8x16I7x16UToVecI16x8; break; default: return false; } BYN_TRACE("zz node: Binary\n"); curr->right = popNonVoidExpression(); curr->left = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDUnary(Expression*& out, uint32_t code) { Unary* curr; switch (code) { case BinaryConsts::I8x16Splat: curr = allocator.alloc(); curr->op = SplatVecI8x16; break; case BinaryConsts::I16x8Splat: curr = allocator.alloc(); curr->op = SplatVecI16x8; break; case BinaryConsts::I32x4Splat: curr = allocator.alloc(); curr->op = SplatVecI32x4; break; case BinaryConsts::I64x2Splat: curr = allocator.alloc(); curr->op = SplatVecI64x2; break; case BinaryConsts::F32x4Splat: curr = allocator.alloc(); curr->op = SplatVecF32x4; break; case BinaryConsts::F64x2Splat: curr = allocator.alloc(); curr->op = SplatVecF64x2; break; case BinaryConsts::V128Not: curr = allocator.alloc(); curr->op = NotVec128; break; case BinaryConsts::V128AnyTrue: curr = allocator.alloc(); curr->op = AnyTrueVec128; break; case BinaryConsts::I8x16Popcnt: curr = allocator.alloc(); curr->op = PopcntVecI8x16; break; case BinaryConsts::I8x16Abs: curr = allocator.alloc(); curr->op = AbsVecI8x16; break; case BinaryConsts::I8x16Neg: curr = allocator.alloc(); curr->op = NegVecI8x16; break; case BinaryConsts::I8x16AllTrue: curr = allocator.alloc(); curr->op = AllTrueVecI8x16; break; case BinaryConsts::I8x16Bitmask: curr = allocator.alloc(); curr->op = BitmaskVecI8x16; break; case BinaryConsts::I16x8Abs: curr = allocator.alloc(); curr->op = AbsVecI16x8; break; case BinaryConsts::I16x8Neg: curr = allocator.alloc(); curr->op = NegVecI16x8; break; case BinaryConsts::I16x8AllTrue: curr = allocator.alloc(); curr->op = AllTrueVecI16x8; break; case BinaryConsts::I16x8Bitmask: curr = allocator.alloc(); curr->op = BitmaskVecI16x8; break; case BinaryConsts::I32x4Abs: curr = allocator.alloc(); curr->op = AbsVecI32x4; break; case BinaryConsts::I32x4Neg: curr = allocator.alloc(); curr->op = NegVecI32x4; break; case BinaryConsts::I32x4AllTrue: curr = allocator.alloc(); curr->op = AllTrueVecI32x4; break; case BinaryConsts::I32x4Bitmask: curr = allocator.alloc(); curr->op = BitmaskVecI32x4; break; case BinaryConsts::I64x2Abs: curr = allocator.alloc(); curr->op = AbsVecI64x2; break; case BinaryConsts::I64x2Neg: curr = allocator.alloc(); curr->op = NegVecI64x2; break; case BinaryConsts::I64x2AllTrue: curr = allocator.alloc(); curr->op = AllTrueVecI64x2; break; case BinaryConsts::I64x2Bitmask: curr = allocator.alloc(); curr->op = BitmaskVecI64x2; break; case BinaryConsts::F32x4Abs: curr = allocator.alloc(); curr->op = AbsVecF32x4; break; case BinaryConsts::F32x4Neg: curr = allocator.alloc(); curr->op = NegVecF32x4; break; case BinaryConsts::F32x4Sqrt: curr = allocator.alloc(); curr->op = SqrtVecF32x4; break; case BinaryConsts::F32x4Ceil: curr = allocator.alloc(); curr->op = CeilVecF32x4; break; case BinaryConsts::F32x4Floor: curr = allocator.alloc(); curr->op = FloorVecF32x4; break; case BinaryConsts::F32x4Trunc: curr = allocator.alloc(); curr->op = TruncVecF32x4; break; case BinaryConsts::F32x4Nearest: curr = allocator.alloc(); curr->op = NearestVecF32x4; break; case BinaryConsts::F64x2Abs: curr = allocator.alloc(); curr->op = AbsVecF64x2; break; case BinaryConsts::F64x2Neg: curr = allocator.alloc(); curr->op = NegVecF64x2; break; case BinaryConsts::F64x2Sqrt: curr = allocator.alloc(); curr->op = SqrtVecF64x2; break; case BinaryConsts::F64x2Ceil: curr = allocator.alloc(); curr->op = CeilVecF64x2; break; case BinaryConsts::F64x2Floor: curr = allocator.alloc(); curr->op = FloorVecF64x2; break; case BinaryConsts::F64x2Trunc: curr = allocator.alloc(); curr->op = TruncVecF64x2; break; case BinaryConsts::F64x2Nearest: curr = allocator.alloc(); curr->op = NearestVecF64x2; break; case BinaryConsts::I16x8ExtaddPairwiseI8x16S: curr = allocator.alloc(); curr->op = ExtAddPairwiseSVecI8x16ToI16x8; break; case BinaryConsts::I16x8ExtaddPairwiseI8x16U: curr = allocator.alloc(); curr->op = ExtAddPairwiseUVecI8x16ToI16x8; break; case BinaryConsts::I32x4ExtaddPairwiseI16x8S: curr = allocator.alloc(); curr->op = ExtAddPairwiseSVecI16x8ToI32x4; break; case BinaryConsts::I32x4ExtaddPairwiseI16x8U: curr = allocator.alloc(); curr->op = ExtAddPairwiseUVecI16x8ToI32x4; break; case BinaryConsts::I32x4TruncSatF32x4S: curr = allocator.alloc(); curr->op = TruncSatSVecF32x4ToVecI32x4; break; case BinaryConsts::I32x4TruncSatF32x4U: curr = allocator.alloc(); curr->op = TruncSatUVecF32x4ToVecI32x4; break; case BinaryConsts::F32x4ConvertI32x4S: curr = allocator.alloc(); curr->op = ConvertSVecI32x4ToVecF32x4; break; case BinaryConsts::F32x4ConvertI32x4U: curr = allocator.alloc(); curr->op = ConvertUVecI32x4ToVecF32x4; break; case BinaryConsts::I16x8ExtendLowI8x16S: curr = allocator.alloc(); curr->op = ExtendLowSVecI8x16ToVecI16x8; break; case BinaryConsts::I16x8ExtendHighI8x16S: curr = allocator.alloc(); curr->op = ExtendHighSVecI8x16ToVecI16x8; break; case BinaryConsts::I16x8ExtendLowI8x16U: curr = allocator.alloc(); curr->op = ExtendLowUVecI8x16ToVecI16x8; break; case BinaryConsts::I16x8ExtendHighI8x16U: curr = allocator.alloc(); curr->op = ExtendHighUVecI8x16ToVecI16x8; break; case BinaryConsts::I32x4ExtendLowI16x8S: curr = allocator.alloc(); curr->op = ExtendLowSVecI16x8ToVecI32x4; break; case BinaryConsts::I32x4ExtendHighI16x8S: curr = allocator.alloc(); curr->op = ExtendHighSVecI16x8ToVecI32x4; break; case BinaryConsts::I32x4ExtendLowI16x8U: curr = allocator.alloc(); curr->op = ExtendLowUVecI16x8ToVecI32x4; break; case BinaryConsts::I32x4ExtendHighI16x8U: curr = allocator.alloc(); curr->op = ExtendHighUVecI16x8ToVecI32x4; break; case BinaryConsts::I64x2ExtendLowI32x4S: curr = allocator.alloc(); curr->op = ExtendLowSVecI32x4ToVecI64x2; break; case BinaryConsts::I64x2ExtendHighI32x4S: curr = allocator.alloc(); curr->op = ExtendHighSVecI32x4ToVecI64x2; break; case BinaryConsts::I64x2ExtendLowI32x4U: curr = allocator.alloc(); curr->op = ExtendLowUVecI32x4ToVecI64x2; break; case BinaryConsts::I64x2ExtendHighI32x4U: curr = allocator.alloc(); curr->op = ExtendHighUVecI32x4ToVecI64x2; break; case BinaryConsts::F64x2ConvertLowI32x4S: curr = allocator.alloc(); curr->op = ConvertLowSVecI32x4ToVecF64x2; break; case BinaryConsts::F64x2ConvertLowI32x4U: curr = allocator.alloc(); curr->op = ConvertLowUVecI32x4ToVecF64x2; break; case BinaryConsts::I32x4TruncSatF64x2SZero: curr = allocator.alloc(); curr->op = TruncSatZeroSVecF64x2ToVecI32x4; break; case BinaryConsts::I32x4TruncSatF64x2UZero: curr = allocator.alloc(); curr->op = TruncSatZeroUVecF64x2ToVecI32x4; break; case BinaryConsts::F32x4DemoteF64x2Zero: curr = allocator.alloc(); curr->op = DemoteZeroVecF64x2ToVecF32x4; break; case BinaryConsts::F64x2PromoteLowF32x4: curr = allocator.alloc(); curr->op = PromoteLowVecF32x4ToVecF64x2; break; case BinaryConsts::I32x4RelaxedTruncF32x4S: curr = allocator.alloc(); curr->op = RelaxedTruncSVecF32x4ToVecI32x4; break; case BinaryConsts::I32x4RelaxedTruncF32x4U: curr = allocator.alloc(); curr->op = RelaxedTruncUVecF32x4ToVecI32x4; break; case BinaryConsts::I32x4RelaxedTruncF64x2SZero: curr = allocator.alloc(); curr->op = RelaxedTruncZeroSVecF64x2ToVecI32x4; break; case BinaryConsts::I32x4RelaxedTruncF64x2UZero: curr = allocator.alloc(); curr->op = RelaxedTruncZeroUVecF64x2ToVecI32x4; break; default: return false; } curr->value = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDConst(Expression*& out, uint32_t code) { if (code != BinaryConsts::V128Const) { return false; } auto* curr = allocator.alloc(); curr->value = getVec128Literal(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDStore(Expression*& out, uint32_t code) { if (code != BinaryConsts::V128Store) { return false; } auto* curr = allocator.alloc(); curr->bytes = 16; curr->valueType = Type::v128; readMemoryAccess(curr->align, curr->offset); curr->isAtomic = false; curr->value = popNonVoidExpression(); curr->ptr = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDExtract(Expression*& out, uint32_t code) { SIMDExtract* curr; switch (code) { case BinaryConsts::I8x16ExtractLaneS: curr = allocator.alloc(); curr->op = ExtractLaneSVecI8x16; curr->index = getLaneIndex(16); break; case BinaryConsts::I8x16ExtractLaneU: curr = allocator.alloc(); curr->op = ExtractLaneUVecI8x16; curr->index = getLaneIndex(16); break; case BinaryConsts::I16x8ExtractLaneS: curr = allocator.alloc(); curr->op = ExtractLaneSVecI16x8; curr->index = getLaneIndex(8); break; case BinaryConsts::I16x8ExtractLaneU: curr = allocator.alloc(); curr->op = ExtractLaneUVecI16x8; curr->index = getLaneIndex(8); break; case BinaryConsts::I32x4ExtractLane: curr = allocator.alloc(); curr->op = ExtractLaneVecI32x4; curr->index = getLaneIndex(4); break; case BinaryConsts::I64x2ExtractLane: curr = allocator.alloc(); curr->op = ExtractLaneVecI64x2; curr->index = getLaneIndex(2); break; case BinaryConsts::F32x4ExtractLane: curr = allocator.alloc(); curr->op = ExtractLaneVecF32x4; curr->index = getLaneIndex(4); break; case BinaryConsts::F64x2ExtractLane: curr = allocator.alloc(); curr->op = ExtractLaneVecF64x2; curr->index = getLaneIndex(2); break; default: return false; } curr->vec = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDReplace(Expression*& out, uint32_t code) { SIMDReplace* curr; switch (code) { case BinaryConsts::I8x16ReplaceLane: curr = allocator.alloc(); curr->op = ReplaceLaneVecI8x16; curr->index = getLaneIndex(16); break; case BinaryConsts::I16x8ReplaceLane: curr = allocator.alloc(); curr->op = ReplaceLaneVecI16x8; curr->index = getLaneIndex(8); break; case BinaryConsts::I32x4ReplaceLane: curr = allocator.alloc(); curr->op = ReplaceLaneVecI32x4; curr->index = getLaneIndex(4); break; case BinaryConsts::I64x2ReplaceLane: curr = allocator.alloc(); curr->op = ReplaceLaneVecI64x2; curr->index = getLaneIndex(2); break; case BinaryConsts::F32x4ReplaceLane: curr = allocator.alloc(); curr->op = ReplaceLaneVecF32x4; curr->index = getLaneIndex(4); break; case BinaryConsts::F64x2ReplaceLane: curr = allocator.alloc(); curr->op = ReplaceLaneVecF64x2; curr->index = getLaneIndex(2); break; default: return false; } curr->value = popNonVoidExpression(); curr->vec = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDShuffle(Expression*& out, uint32_t code) { if (code != BinaryConsts::I8x16Shuffle) { return false; } auto* curr = allocator.alloc(); for (auto i = 0; i < 16; ++i) { curr->mask[i] = getLaneIndex(32); } curr->right = popNonVoidExpression(); curr->left = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDTernary(Expression*& out, uint32_t code) { SIMDTernary* curr; switch (code) { case BinaryConsts::V128Bitselect: curr = allocator.alloc(); curr->op = Bitselect; break; case BinaryConsts::I8x16Laneselect: curr = allocator.alloc(); curr->op = LaneselectI8x16; break; case BinaryConsts::I16x8Laneselect: curr = allocator.alloc(); curr->op = LaneselectI16x8; break; case BinaryConsts::I32x4Laneselect: curr = allocator.alloc(); curr->op = LaneselectI32x4; break; case BinaryConsts::I64x2Laneselect: curr = allocator.alloc(); curr->op = LaneselectI64x2; break; case BinaryConsts::F32x4RelaxedFma: curr = allocator.alloc(); curr->op = RelaxedFmaVecF32x4; break; case BinaryConsts::F32x4RelaxedFms: curr = allocator.alloc(); curr->op = RelaxedFmsVecF32x4; break; case BinaryConsts::F64x2RelaxedFma: curr = allocator.alloc(); curr->op = RelaxedFmaVecF64x2; break; case BinaryConsts::F64x2RelaxedFms: curr = allocator.alloc(); curr->op = RelaxedFmsVecF64x2; break; case BinaryConsts::I32x4DotI8x16I7x16AddS: curr = allocator.alloc(); curr->op = DotI8x16I7x16AddSToVecI32x4; break; case BinaryConsts::I32x4DotI8x16I7x16AddU: curr = allocator.alloc(); curr->op = DotI8x16I7x16AddUToVecI32x4; break; default: return false; } curr->c = popNonVoidExpression(); curr->b = popNonVoidExpression(); curr->a = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDShift(Expression*& out, uint32_t code) { SIMDShift* curr; switch (code) { case BinaryConsts::I8x16Shl: curr = allocator.alloc(); curr->op = ShlVecI8x16; break; case BinaryConsts::I8x16ShrS: curr = allocator.alloc(); curr->op = ShrSVecI8x16; break; case BinaryConsts::I8x16ShrU: curr = allocator.alloc(); curr->op = ShrUVecI8x16; break; case BinaryConsts::I16x8Shl: curr = allocator.alloc(); curr->op = ShlVecI16x8; break; case BinaryConsts::I16x8ShrS: curr = allocator.alloc(); curr->op = ShrSVecI16x8; break; case BinaryConsts::I16x8ShrU: curr = allocator.alloc(); curr->op = ShrUVecI16x8; break; case BinaryConsts::I32x4Shl: curr = allocator.alloc(); curr->op = ShlVecI32x4; break; case BinaryConsts::I32x4ShrS: curr = allocator.alloc(); curr->op = ShrSVecI32x4; break; case BinaryConsts::I32x4ShrU: curr = allocator.alloc(); curr->op = ShrUVecI32x4; break; case BinaryConsts::I64x2Shl: curr = allocator.alloc(); curr->op = ShlVecI64x2; break; case BinaryConsts::I64x2ShrS: curr = allocator.alloc(); curr->op = ShrSVecI64x2; break; case BinaryConsts::I64x2ShrU: curr = allocator.alloc(); curr->op = ShrUVecI64x2; break; default: return false; } curr->shift = popNonVoidExpression(); curr->vec = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDLoad(Expression*& out, uint32_t code) { if (code == BinaryConsts::V128Load) { auto* curr = allocator.alloc(); curr->type = Type::v128; curr->bytes = 16; readMemoryAccess(curr->align, curr->offset); curr->isAtomic = false; curr->ptr = popNonVoidExpression(); curr->finalize(); out = curr; return true; } SIMDLoad* curr; switch (code) { case BinaryConsts::V128Load8Splat: curr = allocator.alloc(); curr->op = Load8SplatVec128; break; case BinaryConsts::V128Load16Splat: curr = allocator.alloc(); curr->op = Load16SplatVec128; break; case BinaryConsts::V128Load32Splat: curr = allocator.alloc(); curr->op = Load32SplatVec128; break; case BinaryConsts::V128Load64Splat: curr = allocator.alloc(); curr->op = Load64SplatVec128; break; case BinaryConsts::V128Load8x8S: curr = allocator.alloc(); curr->op = Load8x8SVec128; break; case BinaryConsts::V128Load8x8U: curr = allocator.alloc(); curr->op = Load8x8UVec128; break; case BinaryConsts::V128Load16x4S: curr = allocator.alloc(); curr->op = Load16x4SVec128; break; case BinaryConsts::V128Load16x4U: curr = allocator.alloc(); curr->op = Load16x4UVec128; break; case BinaryConsts::V128Load32x2S: curr = allocator.alloc(); curr->op = Load32x2SVec128; break; case BinaryConsts::V128Load32x2U: curr = allocator.alloc(); curr->op = Load32x2UVec128; break; case BinaryConsts::V128Load32Zero: curr = allocator.alloc(); curr->op = Load32ZeroVec128; break; case BinaryConsts::V128Load64Zero: curr = allocator.alloc(); curr->op = Load64ZeroVec128; break; default: return false; } readMemoryAccess(curr->align, curr->offset); curr->ptr = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitSIMDLoadStoreLane(Expression*& out, uint32_t code) { SIMDLoadStoreLaneOp op; size_t lanes; switch (code) { case BinaryConsts::V128Load8Lane: op = Load8LaneVec128; lanes = 16; break; case BinaryConsts::V128Load16Lane: op = Load16LaneVec128; lanes = 8; break; case BinaryConsts::V128Load32Lane: op = Load32LaneVec128; lanes = 4; break; case BinaryConsts::V128Load64Lane: op = Load64LaneVec128; lanes = 2; break; case BinaryConsts::V128Store8Lane: op = Store8LaneVec128; lanes = 16; break; case BinaryConsts::V128Store16Lane: op = Store16LaneVec128; lanes = 8; break; case BinaryConsts::V128Store32Lane: op = Store32LaneVec128; lanes = 4; break; case BinaryConsts::V128Store64Lane: op = Store64LaneVec128; lanes = 2; break; default: return false; } auto* curr = allocator.alloc(); curr->op = op; readMemoryAccess(curr->align, curr->offset); curr->index = getLaneIndex(lanes); curr->vec = popNonVoidExpression(); curr->ptr = popNonVoidExpression(); curr->finalize(); out = curr; return true; } void WasmBinaryBuilder::visitSelect(Select* curr, uint8_t code) { BYN_TRACE("zz node: Select, code " << int32_t(code) << std::endl); if (code == BinaryConsts::SelectWithType) { size_t numTypes = getU32LEB(); std::vector types; for (size_t i = 0; i < numTypes; i++) { types.push_back(getType()); } curr->type = Type(types); } curr->condition = popNonVoidExpression(); curr->ifFalse = popNonVoidExpression(); curr->ifTrue = popNonVoidExpression(); if (code == BinaryConsts::SelectWithType) { curr->finalize(curr->type); } else { curr->finalize(); } } void WasmBinaryBuilder::visitReturn(Return* curr) { BYN_TRACE("zz node: Return\n"); requireFunctionContext("return"); Type type = currFunction->getResults(); if (type.isConcrete()) { curr->value = popTypedExpression(type); } curr->finalize(); } void WasmBinaryBuilder::visitMemorySize(MemorySize* curr) { BYN_TRACE("zz node: MemorySize\n"); auto reserved = getU32LEB(); if (reserved != 0) { throwError("Invalid reserved field on memory.size"); } curr->finalize(); } void WasmBinaryBuilder::visitMemoryGrow(MemoryGrow* curr) { BYN_TRACE("zz node: MemoryGrow\n"); curr->delta = popNonVoidExpression(); auto reserved = getU32LEB(); if (reserved != 0) { throwError("Invalid reserved field on memory.grow"); } curr->finalize(); } void WasmBinaryBuilder::visitNop(Nop* curr) { BYN_TRACE("zz node: Nop\n"); } void WasmBinaryBuilder::visitUnreachable(Unreachable* curr) { BYN_TRACE("zz node: Unreachable\n"); } void WasmBinaryBuilder::visitDrop(Drop* curr) { BYN_TRACE("zz node: Drop\n"); curr->value = popNonVoidExpression(); curr->finalize(); } void WasmBinaryBuilder::visitRefNull(RefNull* curr) { BYN_TRACE("zz node: RefNull\n"); curr->finalize(getHeapType()); } void WasmBinaryBuilder::visitRefIs(RefIs* curr, uint8_t code) { BYN_TRACE("zz node: RefIs\n"); switch (code) { case BinaryConsts::RefIsNull: curr->op = RefIsNull; break; case BinaryConsts::RefIsFunc: curr->op = RefIsFunc; break; case BinaryConsts::RefIsData: curr->op = RefIsData; break; case BinaryConsts::RefIsI31: curr->op = RefIsI31; break; default: WASM_UNREACHABLE("invalid code for ref.is_*"); } curr->value = popNonVoidExpression(); curr->finalize(); } void WasmBinaryBuilder::visitRefFunc(RefFunc* curr) { BYN_TRACE("zz node: RefFunc\n"); Index index = getU32LEB(); // We don't know function names yet, so record this use to be updated later. // Note that we do not need to check that 'index' is in bounds, as that will // be verified in the next line. (Also, note that functionRefs[index] may // write to an odd place in the functionRefs map if index is invalid, but that // is harmless.) functionRefs[index].push_back(curr); // To support typed function refs, we give the reference not just a general // funcref, but a specific subtype with the actual signature. curr->finalize(Type(getTypeByFunctionIndex(index), NonNullable)); } void WasmBinaryBuilder::visitRefEq(RefEq* curr) { BYN_TRACE("zz node: RefEq\n"); curr->right = popNonVoidExpression(); curr->left = popNonVoidExpression(); curr->finalize(); } void WasmBinaryBuilder::visitTableGet(TableGet* curr) { BYN_TRACE("zz node: TableGet\n"); Index tableIdx = getU32LEB(); if (tableIdx >= tables.size()) { throwError("bad table index"); } curr->index = popNonVoidExpression(); curr->type = tables[tableIdx]->type; curr->finalize(); // Defer setting the table name for later, when we know it. tableRefs[tableIdx].push_back(curr); } void WasmBinaryBuilder::visitTableSet(TableSet* curr) { BYN_TRACE("zz node: TableSet\n"); Index tableIdx = getU32LEB(); if (tableIdx >= tables.size()) { throwError("bad table index"); } curr->value = popNonVoidExpression(); curr->index = popNonVoidExpression(); curr->finalize(); // Defer setting the table name for later, when we know it. tableRefs[tableIdx].push_back(curr); } void WasmBinaryBuilder::visitTryOrTryInBlock(Expression*& out) { BYN_TRACE("zz node: Try\n"); auto* curr = allocator.alloc(); startControlFlow(curr); // For simplicity of implementation, like if scopes, we create a hidden block // within each try-body and catch-body, and let branches target those inner // blocks instead. curr->type = getType(); curr->body = getBlockOrSingleton(curr->type); Builder builder(wasm); // A nameless label shared by all catch body blocks Name catchLabel = getNextLabel(); breakStack.push_back({catchLabel, curr->type}); auto readCatchBody = [&](Type tagType) { auto start = expressionStack.size(); if (tagType != Type::none) { pushExpression(builder.makePop(tagType)); } processExpressions(); size_t end = expressionStack.size(); if (start > end) { throwError("block cannot pop from outside"); } if (end - start == 1) { curr->catchBodies.push_back(popExpression()); } else { auto* block = allocator.alloc(); pushBlockElements(block, curr->type, start); block->finalize(curr->type); curr->catchBodies.push_back(block); } }; while (lastSeparator == BinaryConsts::Catch || lastSeparator == BinaryConsts::CatchAll) { if (lastSeparator == BinaryConsts::Catch) { auto index = getU32LEB(); if (index >= wasm.tags.size()) { throwError("bad tag index"); } auto* tag = wasm.tags[index].get(); curr->catchTags.push_back(tag->name); readCatchBody(tag->sig.params); } else { // catch_all if (curr->hasCatchAll()) { throwError("there should be at most one 'catch_all' clause per try"); } readCatchBody(Type::none); } } breakStack.pop_back(); if (lastSeparator == BinaryConsts::Delegate) { curr->delegateTarget = getExceptionTargetName(getU32LEB()); } // For simplicity, we ensure that try's labels can only be targeted by // delegates and rethrows, and delegates/rethrows can only target try's // labels. (If they target blocks or loops, it is a validation failure.) // Because we create an inner block within each try and catch body, if any // delegate/rethrow targets those inner blocks, we should make them target the // try's label instead. curr->name = getNextLabel(); if (auto* block = curr->body->dynCast()) { if (block->name.is()) { if (exceptionTargetNames.find(block->name) != exceptionTargetNames.end()) { BranchUtils::replaceExceptionTargets(block, block->name, curr->name); exceptionTargetNames.erase(block->name); } } } if (exceptionTargetNames.find(catchLabel) != exceptionTargetNames.end()) { for (auto* catchBody : curr->catchBodies) { BranchUtils::replaceExceptionTargets(catchBody, catchLabel, curr->name); } exceptionTargetNames.erase(catchLabel); } // If catch bodies contained stacky code, 'pop's can be nested within a block. // Fix that up. EHUtils::handleBlockNestedPop(curr, currFunction, wasm); curr->finalize(curr->type); // For simplicity, we create an inner block within the catch body too, but the // one within the 'catch' *must* be omitted when we write out the binary back // later, because the 'catch' instruction pushes a value onto the stack and // the inner block does not support block input parameters without multivalue // support. // try // ... // catch $e ;; Pushes value(s) onto the stack // block ;; Inner block. Should be deleted when writing binary! // use the pushed value // end // end // // But when input binary code is like // try // ... // catch $e // br 0 // end // // 'br 0' accidentally happens to target the inner block, creating code like // this in Binaryen IR, making the inner block not deletable, resulting in a // validation error: // (try // ... // (catch $e // (block $label0 ;; Cannot be deleted, because there's a branch to this // ... // (br $label0) // ) // ) // ) // // When this happens, we fix this by creating a block that wraps the whole // try-catch, and making the branches target that block instead, like this: // (block $label ;; New enclosing block, new target for the branch // (try // ... // (catch $e // (block ;; Now this can be deleted when writing binary // ... // (br $label) // ) // ) // ) // ) if (breakTargetNames.find(catchLabel) == breakTargetNames.end()) { out = curr; } else { // Create a new block that encloses the whole try-catch auto* block = builder.makeBlock(catchLabel, curr); out = block; } breakTargetNames.erase(catchLabel); } void WasmBinaryBuilder::visitThrow(Throw* curr) { BYN_TRACE("zz node: Throw\n"); auto index = getU32LEB(); if (index >= wasm.tags.size()) { throwError("bad tag index"); } auto* tag = wasm.tags[index].get(); curr->tag = tag->name; size_t num = tag->sig.params.size(); curr->operands.resize(num); for (size_t i = 0; i < num; i++) { curr->operands[num - i - 1] = popNonVoidExpression(); } curr->finalize(); } void WasmBinaryBuilder::visitRethrow(Rethrow* curr) { BYN_TRACE("zz node: Rethrow\n"); curr->target = getExceptionTargetName(getU32LEB()); // This special target is valid only for delegates if (curr->target == DELEGATE_CALLER_TARGET) { throwError(std::string("rethrow target cannot use internal name ") + DELEGATE_CALLER_TARGET.str); } curr->finalize(); } void WasmBinaryBuilder::visitCallRef(CallRef* curr) { BYN_TRACE("zz node: CallRef\n"); curr->target = popNonVoidExpression(); auto type = curr->target->type; if (type == Type::unreachable) { // If our input is unreachable, then we cannot even find out how many inputs // we have, and just set ourselves to unreachable as well. curr->finalize(type); return; } if (!type.isRef()) { throwError("Non-ref type for a call_ref: " + type.toString()); } auto heapType = type.getHeapType(); if (!heapType.isSignature()) { throwError("Invalid reference type for a call_ref: " + type.toString()); } auto sig = heapType.getSignature(); auto num = sig.params.size(); curr->operands.resize(num); for (size_t i = 0; i < num; i++) { curr->operands[num - i - 1] = popNonVoidExpression(); } curr->finalize(sig.results); } void WasmBinaryBuilder::visitLet(Block* curr) { // A let is lowered into a block that contains the value, and we allocate // locals as needed, which works as we remove non-nullability. startControlFlow(curr); // Get the output type. curr->type = getType(); // Get the new local types. First, get the absolute index from which we will // start to allocate them. requireFunctionContext("let"); Index absoluteStart = currFunction->vars.size(); readVars(); Index numNewVars = currFunction->vars.size() - absoluteStart; // Assign the values into locals. Builder builder(wasm); for (Index i = 0; i < numNewVars; i++) { auto* value = popNonVoidExpression(); curr->list.push_back(builder.makeLocalSet(absoluteStart + i, value)); } // Read the body, with adjusted local indexes. letStack.emplace_back(LetData{numNewVars, absoluteStart}); curr->list.push_back(getBlockOrSingleton(curr->type)); letStack.pop_back(); curr->finalize(curr->type); } bool WasmBinaryBuilder::maybeVisitI31New(Expression*& out, uint32_t code) { if (code != BinaryConsts::I31New) { return false; } auto* curr = allocator.alloc(); curr->value = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitI31Get(Expression*& out, uint32_t code) { I31Get* curr; switch (code) { case BinaryConsts::I31GetS: curr = allocator.alloc(); curr->signed_ = true; break; case BinaryConsts::I31GetU: curr = allocator.alloc(); curr->signed_ = false; break; default: return false; } curr->i31 = popNonVoidExpression(); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitRefTest(Expression*& out, uint32_t code) { if (code == BinaryConsts::RefTest) { auto* rtt = popNonVoidExpression(); auto* ref = popNonVoidExpression(); out = Builder(wasm).makeRefTest(ref, rtt); return true; } else if (code == BinaryConsts::RefTestStatic) { auto intendedType = getIndexedHeapType(); auto* ref = popNonVoidExpression(); out = Builder(wasm).makeRefTest(ref, intendedType); return true; } return false; } bool WasmBinaryBuilder::maybeVisitRefCast(Expression*& out, uint32_t code) { if (code == BinaryConsts::RefCast) { auto* rtt = popNonVoidExpression(); auto* ref = popNonVoidExpression(); out = Builder(wasm).makeRefCast(ref, rtt); return true; } else if (code == BinaryConsts::RefCastStatic || code == BinaryConsts::RefCastNopStatic) { auto intendedType = getIndexedHeapType(); auto* ref = popNonVoidExpression(); auto safety = code == BinaryConsts::RefCastNopStatic ? RefCast::Unsafe : RefCast::Safe; out = Builder(wasm).makeRefCast(ref, intendedType, safety); return true; } return false; } bool WasmBinaryBuilder::maybeVisitBrOn(Expression*& out, uint32_t code) { BrOnOp op; switch (code) { case BinaryConsts::BrOnNull: op = BrOnNull; break; case BinaryConsts::BrOnNonNull: op = BrOnNonNull; break; case BinaryConsts::BrOnCast: case BinaryConsts::BrOnCastStatic: op = BrOnCast; break; case BinaryConsts::BrOnCastFail: case BinaryConsts::BrOnCastStaticFail: op = BrOnCastFail; break; case BinaryConsts::BrOnFunc: op = BrOnFunc; break; case BinaryConsts::BrOnNonFunc: op = BrOnNonFunc; break; case BinaryConsts::BrOnData: op = BrOnData; break; case BinaryConsts::BrOnNonData: op = BrOnNonData; break; case BinaryConsts::BrOnI31: op = BrOnI31; break; case BinaryConsts::BrOnNonI31: op = BrOnNonI31; break; default: return false; } auto name = getBreakTarget(getU32LEB()).name; if (code == BinaryConsts::BrOnCastStatic || code == BinaryConsts::BrOnCastStaticFail) { auto intendedType = getIndexedHeapType(); auto* ref = popNonVoidExpression(); out = Builder(wasm).makeBrOn(op, name, ref, intendedType); return true; } Expression* rtt = nullptr; if (op == BrOnCast || op == BrOnCastFail) { rtt = popNonVoidExpression(); } auto* ref = popNonVoidExpression(); out = ValidatingBuilder(wasm, pos).validateAndMakeBrOn(op, name, ref, rtt); return true; } bool WasmBinaryBuilder::maybeVisitRttCanon(Expression*& out, uint32_t code) { if (code != BinaryConsts::RttCanon) { return false; } auto heapType = getIndexedHeapType(); out = Builder(wasm).makeRttCanon(heapType); return true; } bool WasmBinaryBuilder::maybeVisitRttSub(Expression*& out, uint32_t code) { if (code != BinaryConsts::RttSub && code != BinaryConsts::RttFreshSub) { return false; } auto targetHeapType = getIndexedHeapType(); auto* parent = popNonVoidExpression(); if (code == BinaryConsts::RttSub) { out = Builder(wasm).makeRttSub(targetHeapType, parent); } else { out = Builder(wasm).makeRttFreshSub(targetHeapType, parent); } return true; } bool WasmBinaryBuilder::maybeVisitStructNew(Expression*& out, uint32_t code) { if (code == BinaryConsts::StructNew || code == BinaryConsts::StructNewDefault) { auto heapType = getIndexedHeapType(); std::vector operands; if (code == BinaryConsts::StructNew) { auto numOperands = heapType.getStruct().fields.size(); operands.resize(numOperands); for (Index i = 0; i < numOperands; i++) { operands[numOperands - i - 1] = popNonVoidExpression(); } } out = Builder(wasm).makeStructNew(heapType, operands); return true; } else if (code == BinaryConsts::StructNewWithRtt || code == BinaryConsts::StructNewDefaultWithRtt) { auto heapType = getIndexedHeapType(); auto* rtt = popNonVoidExpression(); validateHeapTypeUsingChild(rtt, heapType); std::vector operands; if (code == BinaryConsts::StructNewWithRtt) { auto numOperands = heapType.getStruct().fields.size(); operands.resize(numOperands); for (Index i = 0; i < numOperands; i++) { operands[numOperands - i - 1] = popNonVoidExpression(); } } out = Builder(wasm).makeStructNew(rtt, operands); return true; } return false; } bool WasmBinaryBuilder::maybeVisitStructGet(Expression*& out, uint32_t code) { StructGet* curr; switch (code) { case BinaryConsts::StructGet: curr = allocator.alloc(); break; case BinaryConsts::StructGetS: curr = allocator.alloc(); curr->signed_ = true; break; case BinaryConsts::StructGetU: curr = allocator.alloc(); curr->signed_ = false; break; default: return false; } auto heapType = getIndexedHeapType(); curr->index = getU32LEB(); curr->ref = popNonVoidExpression(); validateHeapTypeUsingChild(curr->ref, heapType); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitStructSet(Expression*& out, uint32_t code) { if (code != BinaryConsts::StructSet) { return false; } auto* curr = allocator.alloc(); auto heapType = getIndexedHeapType(); curr->index = getU32LEB(); curr->value = popNonVoidExpression(); curr->ref = popNonVoidExpression(); validateHeapTypeUsingChild(curr->ref, heapType); curr->finalize(); out = curr; return true; } bool WasmBinaryBuilder::maybeVisitArrayNew(Expression*& out, uint32_t code) { if (code == BinaryConsts::ArrayNew || code == BinaryConsts::ArrayNewDefault) { auto heapType = getIndexedHeapType(); auto* size = popNonVoidExpression(); Expression* init = nullptr; if (code == BinaryConsts::ArrayNew) { init = popNonVoidExpression(); } out = Builder(wasm).makeArrayNew(heapType, size, init); return true; } else if (code == BinaryConsts::ArrayNewWithRtt || code == BinaryConsts::ArrayNewDefaultWithRtt) { auto heapType = getIndexedHeapType(); auto* rtt = popNonVoidExpression(); validateHeapTypeUsingChild(rtt, heapType); auto* size = popNonVoidExpression(); Expression* init = nullptr; if (code == BinaryConsts::ArrayNewWithRtt) { init = popNonVoidExpression(); } out = Builder(wasm).makeArrayNew(rtt, size, init); return true; } return false; } bool WasmBinaryBuilder::maybeVisitArrayInit(Expression*& out, uint32_t code) { if (code == BinaryConsts::ArrayInitStatic) { auto heapType = getIndexedHeapType(); auto size = getU32LEB(); std::vector values(size); for (size_t i = 0; i < size; i++) { values[size - i - 1] = popNonVoidExpression(); } out = Builder(wasm).makeArrayInit(heapType, values); return true; } else if (code == BinaryConsts::ArrayInit) { auto heapType = getIndexedHeapType(); auto size = getU32LEB(); auto* rtt = popNonVoidExpression(); validateHeapTypeUsingChild(rtt, heapType); std::vector values(size); for (size_t i = 0; i < size; i++) { values[size - i - 1] = popNonVoidExpression(); } out = Builder(wasm).makeArrayInit(rtt, values); return true; } return false; } bool WasmBinaryBuilder::maybeVisitArrayGet(Expression*& out, uint32_t code) { bool signed_ = false; switch (code) { case BinaryConsts::ArrayGet: case BinaryConsts::ArrayGetU: break; case BinaryConsts::ArrayGetS: signed_ = true; break; default: return false; } auto heapType = getIndexedHeapType(); auto* index = popNonVoidExpression(); auto* ref = popNonVoidExpression(); validateHeapTypeUsingChild(ref, heapType); out = Builder(wasm).makeArrayGet(ref, index, signed_); return true; } bool WasmBinaryBuilder::maybeVisitArraySet(Expression*& out, uint32_t code) { if (code != BinaryConsts::ArraySet) { return false; } auto heapType = getIndexedHeapType(); auto* value = popNonVoidExpression(); auto* index = popNonVoidExpression(); auto* ref = popNonVoidExpression(); validateHeapTypeUsingChild(ref, heapType); out = Builder(wasm).makeArraySet(ref, index, value); return true; } bool WasmBinaryBuilder::maybeVisitArrayLen(Expression*& out, uint32_t code) { if (code != BinaryConsts::ArrayLen) { return false; } auto heapType = getIndexedHeapType(); auto* ref = popNonVoidExpression(); validateHeapTypeUsingChild(ref, heapType); out = Builder(wasm).makeArrayLen(ref); return true; } bool WasmBinaryBuilder::maybeVisitArrayCopy(Expression*& out, uint32_t code) { if (code != BinaryConsts::ArrayCopy) { return false; } auto destHeapType = getIndexedHeapType(); auto srcHeapType = getIndexedHeapType(); auto* length = popNonVoidExpression(); auto* srcIndex = popNonVoidExpression(); auto* srcRef = popNonVoidExpression(); auto* destIndex = popNonVoidExpression(); auto* destRef = popNonVoidExpression(); validateHeapTypeUsingChild(destRef, destHeapType); validateHeapTypeUsingChild(srcRef, srcHeapType); out = Builder(wasm).makeArrayCopy(destRef, destIndex, srcRef, srcIndex, length); return true; } void WasmBinaryBuilder::visitRefAs(RefAs* curr, uint8_t code) { BYN_TRACE("zz node: RefAs\n"); switch (code) { case BinaryConsts::RefAsNonNull: curr->op = RefAsNonNull; break; case BinaryConsts::RefAsFunc: curr->op = RefAsFunc; break; case BinaryConsts::RefAsData: curr->op = RefAsData; break; case BinaryConsts::RefAsI31: curr->op = RefAsI31; break; default: WASM_UNREACHABLE("invalid code for ref.as_*"); } curr->value = popNonVoidExpression(); if (!curr->value->type.isRef() && curr->value->type != Type::unreachable) { throwError("bad input type for ref.as: " + curr->value->type.toString()); } curr->finalize(); } void WasmBinaryBuilder::throwError(std::string text) { throw ParseException(text, 0, pos); } void WasmBinaryBuilder::validateHeapTypeUsingChild(Expression* child, HeapType heapType) { if (child->type == Type::unreachable) { return; } if ((!child->type.isRef() && !child->type.isRtt()) || !HeapType::isSubType(child->type.getHeapType(), heapType)) { throwError("bad heap type: expected " + heapType.toString() + " but found " + child->type.toString()); } } } // namespace wasm binaryen-version_108/src/wasm/wasm-debug.cpp000066400000000000000000001207311423707623100212460ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "wasm-debug.h" #include "wasm.h" #ifdef BUILD_LLVM_DWARF #include "llvm/ObjectYAML/DWARFEmitter.h" #include "llvm/ObjectYAML/DWARFYAML.h" #include "llvm/include/llvm/DebugInfo/DWARFContext.h" std::error_code dwarf2yaml(llvm::DWARFContext& DCtx, llvm::DWARFYAML::Data& Y); #endif #include "wasm-binary.h" #include "wasm-debug.h" #include "wasm.h" namespace wasm::Debug { bool isDWARFSection(Name name) { return name.startsWith(".debug_"); } bool hasDWARFSections(const Module& wasm) { for (auto& section : wasm.userSections) { if (isDWARFSection(section.name)) { return true; } } return false; } #ifdef BUILD_LLVM_DWARF // In wasm32 the address size is 32 bits. static const size_t AddressSize = 4; struct BinaryenDWARFInfo { llvm::StringMap> sections; std::unique_ptr context; BinaryenDWARFInfo(const Module& wasm) { // Get debug sections from the wasm. for (auto& section : wasm.userSections) { if (Name(section.name).startsWith(".debug_") && section.data.data()) { // TODO: efficiency sections[section.name.substr(1)] = llvm::MemoryBuffer::getMemBufferCopy( llvm::StringRef(section.data.data(), section.data.size())); } } // Parse debug sections. uint8_t addrSize = AddressSize; bool isLittleEndian = true; context = llvm::DWARFContext::create(sections, addrSize, isLittleEndian); } }; void dumpDWARF(const Module& wasm) { BinaryenDWARFInfo info(wasm); std::cout << "DWARF debug info\n"; std::cout << "================\n\n"; for (auto& section : wasm.userSections) { if (Name(section.name).startsWith(".debug_")) { std::cout << "Contains section " << section.name << " (" << section.data.size() << " bytes)\n"; } } llvm::DIDumpOptions options; options.DumpType = llvm::DIDT_All; options.ShowChildren = true; options.Verbose = true; info.context->dump(llvm::outs(), options); } bool shouldPreserveDWARF(PassOptions& options, Module& wasm) { return options.debugInfo && hasDWARFSections(wasm); } // // Big picture: We use a DWARFContext to read data, then DWARFYAML support // code to write it. That is not the main LLVM Dwarf code used for writing // object files, but it avoids us create a "fake" MC layer, and provides a // simple way to write out the debug info. Likely the level of info represented // in the DWARFYAML::Data object is sufficient for Binaryen's needs, but if not, // we may need a different approach. // // In more detail: // // 1. Binary sections => DWARFContext: // // llvm::DWARFContext::create(sections..) // // 2. DWARFContext => DWARFYAML::Data // // std::error_code dwarf2yaml(DWARFContext &DCtx, DWARFYAML::Data &Y) { // // 3. DWARFYAML::Data => binary sections // // StringMap> // EmitDebugSections(llvm::DWARFYAML::Data &DI, bool ApplyFixups); // // Represents the state when parsing a line table. struct LineState { uint32_t addr = 0; // TODO sectionIndex? uint32_t line = 1; uint32_t col = 0; uint32_t file = 1; uint32_t isa = 0; uint32_t discriminator = 0; bool isStmt; bool basicBlock = false; bool prologueEnd = false; bool epilogueBegin = false; // Each instruction is part of a sequence, all of which get the same ID. The // order within a sequence may change if binaryen reorders things, which means // that we can't track the end_sequence location and assume it is at the end - // we must track sequences and then emit an end for each one. // -1 is an invalid marker value (note that this assumes we can fit all ids // into just under 32 bits). uint32_t sequenceId = -1; LineState(const LineState& other) = default; LineState(const llvm::DWARFYAML::LineTable& table, uint32_t sequenceId) : isStmt(table.DefaultIsStmt), sequenceId(sequenceId) {} LineState& operator=(const LineState& other) = default; // Updates the state, and returns whether a new row is ready to be emitted. bool update(llvm::DWARFYAML::LineTableOpcode& opcode, const llvm::DWARFYAML::LineTable& table) { switch (opcode.Opcode) { case 0: { // Extended opcodes switch (opcode.SubOpcode) { case llvm::dwarf::DW_LNE_set_address: { addr = opcode.Data; break; } case llvm::dwarf::DW_LNE_end_sequence: { return true; } case llvm::dwarf::DW_LNE_set_discriminator: { discriminator = opcode.Data; break; } case llvm::dwarf::DW_LNE_define_file: { Fatal() << "TODO: DW_LNE_define_file"; } default: { // An unknown opcode, ignore. std::cerr << "warning: unknown subopcopde " << opcode.SubOpcode << '\n'; } } break; } case llvm::dwarf::DW_LNS_set_column: { col = opcode.Data; break; } case llvm::dwarf::DW_LNS_set_prologue_end: { prologueEnd = true; break; } case llvm::dwarf::DW_LNS_copy: { return true; } case llvm::dwarf::DW_LNS_advance_pc: { assert(table.MinInstLength == 1); addr += opcode.Data; break; } case llvm::dwarf::DW_LNS_advance_line: { line += opcode.SData; break; } case llvm::dwarf::DW_LNS_set_file: { file = opcode.Data; break; } case llvm::dwarf::DW_LNS_negate_stmt: { isStmt = !isStmt; break; } case llvm::dwarf::DW_LNS_set_basic_block: { basicBlock = true; break; } case llvm::dwarf::DW_LNS_const_add_pc: { uint8_t AdjustOpcode = 255 - table.OpcodeBase; uint64_t AddrOffset = (AdjustOpcode / table.LineRange) * table.MinInstLength; addr += AddrOffset; break; } case llvm::dwarf::DW_LNS_fixed_advance_pc: { addr += opcode.Data; break; } case llvm::dwarf::DW_LNS_set_isa: { isa = opcode.Data; break; } default: { if (opcode.Opcode >= table.OpcodeBase) { // Special opcode: adjust line and addr, using some math. uint8_t AdjustOpcode = opcode.Opcode - table.OpcodeBase; // 20 - 13 = 7 uint64_t AddrOffset = (AdjustOpcode / table.LineRange) * table.MinInstLength; // (7 / 14) * 1 = 0 int32_t LineOffset = table.LineBase + (AdjustOpcode % table.LineRange); // -5 + (7 % 14) = 2 line += LineOffset; addr += AddrOffset; return true; } else { Fatal() << "unknown debug line opcode: " << std::hex << opcode.Opcode; } } } return false; } // Checks if this starts a new range of addresses. Each range is a set of // related addresses, where in particular, if the first has been zeroed out // by the linker, we must omit the entire range. (If we do not, then the // initial range is 0 and the others are offsets relative to it, which will // look like random addresses, perhaps into the middle of instructions, and // perhaps that happen to collide with real ones.) bool startsNewRange(llvm::DWARFYAML::LineTableOpcode& opcode) { return opcode.Opcode == 0 && opcode.SubOpcode == llvm::dwarf::DW_LNE_set_address; } bool needToEmit() { // Zero values imply we can ignore this line. // https://github.com/WebAssembly/debugging/issues/9#issuecomment-567720872 return line != 0 && addr != 0; } // Given an old state, emit the diff from it to this state into a new line // table entry (that will be emitted in the updated DWARF debug line section). void emitDiff(const LineState& old, std::vector& newOpcodes, const llvm::DWARFYAML::LineTable& table, bool endSequence) const { bool useSpecial = false; if (addr != old.addr || line != old.line) { // Try to use a special opcode TODO } if (addr != old.addr && !useSpecial) { // len = 1 (subopcode) + 4 (wasm32 address) // FIXME: look at AddrSize on the Unit. auto item = makeItem(llvm::dwarf::DW_LNE_set_address, 5); item.Data = addr; newOpcodes.push_back(item); } if (line != old.line && !useSpecial) { auto item = makeItem(llvm::dwarf::DW_LNS_advance_line); // In wasm32 we have 32-bit addresses, and the delta here might be // negative (note that SData is 64-bit, as LLVM supports 64-bit // addresses too). item.SData = int32_t(line - old.line); newOpcodes.push_back(item); } if (col != old.col) { auto item = makeItem(llvm::dwarf::DW_LNS_set_column); item.Data = col; newOpcodes.push_back(item); } if (file != old.file) { auto item = makeItem(llvm::dwarf::DW_LNS_set_file); item.Data = file; newOpcodes.push_back(item); } if (isa != old.isa) { auto item = makeItem(llvm::dwarf::DW_LNS_set_isa); item.Data = isa; newOpcodes.push_back(item); } if (discriminator != old.discriminator) { // len = 1 (subopcode) + 4 (wasm32 address) auto item = makeItem(llvm::dwarf::DW_LNE_set_discriminator, 5); item.Data = discriminator; newOpcodes.push_back(item); } if (isStmt != old.isStmt) { newOpcodes.push_back(makeItem(llvm::dwarf::DW_LNS_negate_stmt)); } if (basicBlock != old.basicBlock) { assert(basicBlock); newOpcodes.push_back(makeItem(llvm::dwarf::DW_LNS_set_basic_block)); } if (prologueEnd) { newOpcodes.push_back(makeItem(llvm::dwarf::DW_LNS_set_prologue_end)); } if (epilogueBegin != old.epilogueBegin) { Fatal() << "eb"; } if (useSpecial) { // Emit a special, which emits a line automatically. // TODO } else { // Emit the line manually. if (endSequence) { // len = 1 (subopcode) newOpcodes.push_back(makeItem(llvm::dwarf::DW_LNE_end_sequence, 1)); } else { newOpcodes.push_back(makeItem(llvm::dwarf::DW_LNS_copy)); } } } // Some flags are automatically reset after each debug line. void resetAfterLine() { prologueEnd = false; } private: llvm::DWARFYAML::LineTableOpcode makeItem(llvm::dwarf::LineNumberOps opcode) const { llvm::DWARFYAML::LineTableOpcode item = {}; item.Opcode = opcode; return item; } llvm::DWARFYAML::LineTableOpcode makeItem(llvm::dwarf::LineNumberExtendedOps opcode, uint64_t len) const { auto item = makeItem(llvm::dwarf::LineNumberOps(0)); // All the length after the len field itself, including the subopcode // (1 byte). item.ExtLen = len; item.SubOpcode = opcode; return item; } }; // Represents a mapping of addresses to expressions. We track beginnings and // endings of expressions separately, since the end of one (which is one past // the end in DWARF notation) overlaps with the beginning of the next, and also // to let us use contextual information (we may know we are looking up the end // of an instruction). struct AddrExprMap { std::unordered_map startMap; std::unordered_map endMap; // Some instructions have delimiter binary locations, like the else and end in // and if. Track those separately, including their expression and their id // ("else", "end", etc.), as they are rare, and we don't want to // bloat the common case which is represented in the earlier maps. struct DelimiterInfo { Expression* expr; size_t id; }; std::unordered_map delimiterMap; // Construct the map from the binaryLocations loaded from the wasm. AddrExprMap(const Module& wasm) { for (auto& func : wasm.functions) { for (auto& [expr, span] : func->expressionLocations) { add(expr, span); } for (auto& [expr, delim] : func->delimiterLocations) { add(expr, delim); } } } Expression* getStart(BinaryLocation addr) const { auto iter = startMap.find(addr); if (iter != startMap.end()) { return iter->second; } return nullptr; } Expression* getEnd(BinaryLocation addr) const { auto iter = endMap.find(addr); if (iter != endMap.end()) { return iter->second; } return nullptr; } DelimiterInfo getDelimiter(BinaryLocation addr) const { auto iter = delimiterMap.find(addr); if (iter != delimiterMap.end()) { return iter->second; } return DelimiterInfo{nullptr, BinaryLocations::Invalid}; } private: void add(Expression* expr, const BinaryLocations::Span span) { assert(startMap.count(span.start) == 0); startMap[span.start] = expr; assert(endMap.count(span.end) == 0); endMap[span.end] = expr; } void add(Expression* expr, const BinaryLocations::DelimiterLocations& delimiter) { for (Index i = 0; i < delimiter.size(); i++) { if (delimiter[i] != 0) { assert(delimiterMap.count(delimiter[i]) == 0); delimiterMap[delimiter[i]] = DelimiterInfo{expr, i}; } } } }; // Represents a mapping of addresses to expressions. As with expressions, we // track both start and end; here, however, "start" means the "start" and // "declarations" fields in FunctionLocations, and "end" means the two locations // of one past the end, and one before it which is the "end" opcode that is // emitted. struct FuncAddrMap { std::unordered_map startMap, endMap; // Construct the map from the binaryLocations loaded from the wasm. FuncAddrMap(const Module& wasm) { for (auto& func : wasm.functions) { startMap[func->funcLocation.start] = func.get(); startMap[func->funcLocation.declarations] = func.get(); endMap[func->funcLocation.end - 1] = func.get(); endMap[func->funcLocation.end] = func.get(); } } Function* getStart(BinaryLocation addr) const { auto iter = startMap.find(addr); if (iter != startMap.end()) { return iter->second; } return nullptr; } Function* getEnd(BinaryLocation addr) const { auto iter = endMap.find(addr); if (iter != endMap.end()) { return iter->second; } return nullptr; } }; // Track locations from the original binary and the new one we wrote, so that // we can update debug positions. // We track expressions and functions separately, instead of having a single // big map of (oldAddr) => (newAddr) because of the potentially ambiguous case // of the final expression in a function: it's end might be identical in offset // to the end of the function. So we have two different things that map to the // same offset. However, if the context is "the end of the function" then the // updated address is the new end of the function, even if the function ends // with a different instruction now, as the old last instruction might have // moved or been optimized out. struct LocationUpdater { Module& wasm; const BinaryLocations& newLocations; AddrExprMap oldExprAddrMap; FuncAddrMap oldFuncAddrMap; // Map offsets of location list entries in the debug_loc section to the index // of their compile unit. std::unordered_map locToUnitMap; // Map start of line tables in the debug_line section to their new locations. std::unordered_map debugLineMap; typedef std::pair OldToNew; // Map of compile unit index => old and new base offsets (i.e., in the // original binary and in the new one). std::unordered_map compileUnitBases; // TODO: for memory efficiency, we may want to do this in a streaming manner, // binary to binary, without YAML IR. LocationUpdater(Module& wasm, const BinaryLocations& newLocations) : wasm(wasm), newLocations(newLocations), oldExprAddrMap(wasm), oldFuncAddrMap(wasm) {} // Updates an expression's address. If there was never an instruction at that // address, or if there was but if that instruction no longer exists, return // 0. Otherwise, return the new updated location. BinaryLocation getNewExprStart(BinaryLocation oldAddr) const { if (auto* expr = oldExprAddrMap.getStart(oldAddr)) { auto iter = newLocations.expressions.find(expr); if (iter != newLocations.expressions.end()) { BinaryLocation newAddr = iter->second.start; return newAddr; } } return 0; } bool hasOldExprStart(BinaryLocation oldAddr) const { return oldExprAddrMap.getStart(oldAddr); } BinaryLocation getNewExprEnd(BinaryLocation oldAddr) const { if (auto* expr = oldExprAddrMap.getEnd(oldAddr)) { auto iter = newLocations.expressions.find(expr); if (iter != newLocations.expressions.end()) { return iter->second.end; } } return 0; } bool hasOldExprEnd(BinaryLocation oldAddr) const { return oldExprAddrMap.getEnd(oldAddr); } BinaryLocation getNewFuncStart(BinaryLocation oldAddr) const { if (auto* func = oldFuncAddrMap.getStart(oldAddr)) { // The function might have been optimized away, check. auto iter = newLocations.functions.find(func); if (iter != newLocations.functions.end()) { auto oldLocations = func->funcLocation; auto newLocations = iter->second; if (oldAddr == oldLocations.start) { return newLocations.start; } else if (oldAddr == oldLocations.declarations) { return newLocations.declarations; } else { WASM_UNREACHABLE("invalid func start"); } } } return 0; } bool hasOldFuncStart(BinaryLocation oldAddr) const { return oldFuncAddrMap.getStart(oldAddr); } BinaryLocation getNewFuncEnd(BinaryLocation oldAddr) const { if (auto* func = oldFuncAddrMap.getEnd(oldAddr)) { // The function might have been optimized away, check. auto iter = newLocations.functions.find(func); if (iter != newLocations.functions.end()) { auto oldLocations = func->funcLocation; auto newLocations = iter->second; if (oldAddr == oldLocations.end) { return newLocations.end; } else if (oldAddr == oldLocations.end - 1) { return newLocations.end - 1; } else { WASM_UNREACHABLE("invalid func end"); } } } return 0; } // Check for either the end opcode, or one past the end. bool hasOldFuncEnd(BinaryLocation oldAddr) const { return oldFuncAddrMap.getEnd(oldAddr); } // Check specifically for the end opcode. bool hasOldFuncEndOpcode(BinaryLocation oldAddr) const { if (auto* func = oldFuncAddrMap.getEnd(oldAddr)) { return oldAddr == func->funcLocation.end - 1; } return false; } BinaryLocation getNewDelimiter(BinaryLocation oldAddr) const { auto info = oldExprAddrMap.getDelimiter(oldAddr); if (info.expr) { auto iter = newLocations.delimiters.find(info.expr); if (iter != newLocations.delimiters.end()) { return iter->second[info.id]; } } return 0; } bool hasOldDelimiter(BinaryLocation oldAddr) const { return oldExprAddrMap.getDelimiter(oldAddr).expr; } // getNewStart|EndAddr utilities. // TODO: should we track the start and end of delimiters, even though they // are just one byte? BinaryLocation getNewStart(BinaryLocation oldStart) const { if (hasOldExprStart(oldStart)) { return getNewExprStart(oldStart); } else if (hasOldFuncStart(oldStart)) { return getNewFuncStart(oldStart); } else if (hasOldDelimiter(oldStart)) { return getNewDelimiter(oldStart); } return 0; } BinaryLocation getNewEnd(BinaryLocation oldEnd) const { if (hasOldExprEnd(oldEnd)) { return getNewExprEnd(oldEnd); } else if (hasOldFuncEnd(oldEnd)) { return getNewFuncEnd(oldEnd); } else if (hasOldDelimiter(oldEnd)) { return getNewDelimiter(oldEnd); } return 0; } BinaryLocation getNewDebugLineLocation(BinaryLocation old) const { return debugLineMap.at(old); } // Given an offset in .debug_loc, get the old and new compile unit bases. OldToNew getCompileUnitBasesForLoc(size_t offset) const { if (locToUnitMap.count(offset) == 0) { // There is no compile unit for this loc. It doesn't matter what we set // here. return OldToNew{0, 0}; } auto index = locToUnitMap.at(offset); auto iter = compileUnitBases.find(index); if (iter != compileUnitBases.end()) { return iter->second; } return OldToNew{0, 0}; } }; // A tombstone value is a value that is placed where something used to exist, // but no longer does, like a reference to a function that was DCE'd out during // linking. In theory the value can be any invalid location, and tools will // basically ignore it. // Earlier LLVM used to use 0 there, and newer versions use -1 or -2 depending // on the DWARF section. For now, support them all, but TODO stop supporting 0, // as there are apparently some possible corner cases where 0 is a valid value. static bool isTombstone(uint32_t x) { return x == 0 || x == uint32_t(-1) || x == uint32_t(-2); } // Update debug lines, and update the locationUpdater with debug line offset // changes so we can update offsets into the debug line section. static void updateDebugLines(llvm::DWARFYAML::Data& data, LocationUpdater& locationUpdater) { for (auto& table : data.DebugLines) { uint32_t sequenceId = 0; // Parse the original opcodes and emit new ones. LineState state(table, sequenceId); // All the addresses we need to write out. std::vector newAddrs; std::unordered_map newAddrInfo; // If the address was zeroed out, we must omit the entire range (we could // also leave it unchanged, so that the debugger ignores it based on the // initial zero; but it's easier and better to just not emit it at all). bool omittingRange = false; for (auto& opcode : table.Opcodes) { // Update the state, and check if we have a new row to emit. if (state.startsNewRange(opcode)) { omittingRange = false; } if (state.update(opcode, table)) { if (isTombstone(state.addr)) { omittingRange = true; } if (omittingRange) { state = LineState(table, sequenceId); continue; } // An expression may not exist for this line table item, if we optimized // it away. BinaryLocation oldAddr = state.addr; BinaryLocation newAddr = 0; if (locationUpdater.hasOldExprStart(oldAddr)) { newAddr = locationUpdater.getNewExprStart(oldAddr); } // Test for a function's end address first, as LLVM output appears to // use 1-past-the-end-of-the-function as a location in that function, // and not the next (but the first byte of the next function, which is // ambiguously identical to that value, is used at least in low_pc). else if (locationUpdater.hasOldFuncEnd(oldAddr)) { newAddr = locationUpdater.getNewFuncEnd(oldAddr); } else if (locationUpdater.hasOldFuncStart(oldAddr)) { newAddr = locationUpdater.getNewFuncStart(oldAddr); } else if (locationUpdater.hasOldDelimiter(oldAddr)) { newAddr = locationUpdater.getNewDelimiter(oldAddr); } else if (locationUpdater.hasOldExprEnd(oldAddr)) { newAddr = locationUpdater.getNewExprEnd(oldAddr); } if (newAddr && state.needToEmit()) { // LLVM sometimes emits the same address more than once. We should // probably investigate that. if (newAddrInfo.count(newAddr)) { continue; } newAddrs.push_back(newAddr); newAddrInfo.emplace(newAddr, state); auto& updatedState = newAddrInfo.at(newAddr); // The only difference is the address TODO other stuff? updatedState.addr = newAddr; // Reset relevant state. state.resetAfterLine(); } if (opcode.Opcode == 0 && opcode.SubOpcode == llvm::dwarf::DW_LNE_end_sequence) { sequenceId++; // We assume the number of sequences can fit in 32 bits, and -1 is // an invalid value. assert(sequenceId != uint32_t(-1)); state = LineState(table, sequenceId); } } } // Sort the new addresses (which may be substantially different from the // original layout after optimization). std::sort(newAddrs.begin(), newAddrs.end()); // Emit a new line table. { std::vector newOpcodes; for (size_t i = 0; i < newAddrs.size(); i++) { LineState state = newAddrInfo.at(newAddrs[i]); assert(state.needToEmit()); LineState lastState(table, -1); if (i != 0) { lastState = newAddrInfo.at(newAddrs[i - 1]); // If the last line is in another sequence, clear the old state, as // there is nothing to diff to. if (lastState.sequenceId != state.sequenceId) { lastState = LineState(table, -1); } } // This line ends a sequence if there is no next line after it, or if // the next line is in a different sequence. bool endSequence = i + 1 == newAddrs.size() || newAddrInfo.at(newAddrs[i + 1]).sequenceId != state.sequenceId; state.emitDiff(lastState, newOpcodes, table, endSequence); } table.Opcodes.swap(newOpcodes); } } // After updating the contents, run the emitter in order to update the // lengths of each section. We will use that to update offsets into the // debug_line section. std::vector computedLengths; llvm::DWARFYAML::ComputeDebugLine(data, computedLengths); BinaryLocation newLocation = 0; for (size_t i = 0; i < data.DebugLines.size(); i++) { auto& table = data.DebugLines[i]; auto oldLocation = table.Position; locationUpdater.debugLineMap[oldLocation] = newLocation; table.Position = newLocation; newLocation += computedLengths[i] + AddressSize; table.Length.setLength(computedLengths[i]); } } // Iterate in parallel over a DwarfContext representation element and a // YAML element, which parallel each other. template static void iterContextAndYAML(const T& contextList, U& yamlList, W func) { auto yamlValue = yamlList.begin(); for (const auto& contextValue : contextList) { assert(yamlValue != yamlList.end()); func(contextValue, *yamlValue); yamlValue++; } assert(yamlValue == yamlList.end()); } // Updates a YAML entry from a DWARF DIE. Also updates LocationUpdater // associating each .debug_loc entry with the base address of its corresponding // compilation unit. static void updateDIE(const llvm::DWARFDebugInfoEntry& DIE, llvm::DWARFYAML::Entry& yamlEntry, const llvm::DWARFAbbreviationDeclaration* abbrevDecl, LocationUpdater& locationUpdater, size_t compileUnitIndex) { auto tag = DIE.getTag(); // Pairs of low/high_pc require some special handling, as the high // may be an offset relative to the low. First, process everything but // the high pcs, so we see the low pcs first. BinaryLocation oldLowPC = 0, newLowPC = 0; iterContextAndYAML( abbrevDecl->attributes(), yamlEntry.Values, [&](const llvm::DWARFAbbreviationDeclaration::AttributeSpec& attrSpec, llvm::DWARFYAML::FormValue& yamlValue) { auto attr = attrSpec.Attr; if (attr == llvm::dwarf::DW_AT_low_pc) { // This is an address. BinaryLocation oldValue = yamlValue.Value, newValue = 0; if (tag == llvm::dwarf::DW_TAG_GNU_call_site || tag == llvm::dwarf::DW_TAG_inlined_subroutine || tag == llvm::dwarf::DW_TAG_lexical_block || tag == llvm::dwarf::DW_TAG_label) { newValue = locationUpdater.getNewStart(oldValue); } else if (tag == llvm::dwarf::DW_TAG_compile_unit) { newValue = locationUpdater.getNewFuncStart(oldValue); // Per the DWARF spec, "The base address of a compile unit is // defined as the value of the DW_AT_low_pc attribute, if present." locationUpdater.compileUnitBases[compileUnitIndex] = LocationUpdater::OldToNew{oldValue, newValue}; } else if (tag == llvm::dwarf::DW_TAG_subprogram) { newValue = locationUpdater.getNewFuncStart(oldValue); } else { Fatal() << "unknown tag with low_pc " << llvm::dwarf::TagString(tag).str(); } oldLowPC = oldValue; newLowPC = newValue; yamlValue.Value = newValue; } else if (attr == llvm::dwarf::DW_AT_stmt_list) { // This is an offset into the debug line section. yamlValue.Value = locationUpdater.getNewDebugLineLocation(yamlValue.Value); } else if (attr == llvm::dwarf::DW_AT_location && attrSpec.Form == llvm::dwarf::DW_FORM_sec_offset) { BinaryLocation locOffset = yamlValue.Value; locationUpdater.locToUnitMap[locOffset] = compileUnitIndex; } }); // Next, process the high_pcs. // TODO: do this more efficiently, without a second traversal (but that's a // little tricky given the special double-traversal we have). iterContextAndYAML( abbrevDecl->attributes(), yamlEntry.Values, [&](const llvm::DWARFAbbreviationDeclaration::AttributeSpec& attrSpec, llvm::DWARFYAML::FormValue& yamlValue) { auto attr = attrSpec.Attr; if (attr != llvm::dwarf::DW_AT_high_pc) { return; } BinaryLocation oldValue = yamlValue.Value, newValue = 0; bool isRelative = attrSpec.Form == llvm::dwarf::DW_FORM_data4; if (isRelative) { oldValue += oldLowPC; } if (tag == llvm::dwarf::DW_TAG_GNU_call_site || tag == llvm::dwarf::DW_TAG_inlined_subroutine || tag == llvm::dwarf::DW_TAG_lexical_block || tag == llvm::dwarf::DW_TAG_label) { newValue = locationUpdater.getNewExprEnd(oldValue); } else if (tag == llvm::dwarf::DW_TAG_compile_unit || tag == llvm::dwarf::DW_TAG_subprogram) { newValue = locationUpdater.getNewFuncEnd(oldValue); } else { Fatal() << "unknown tag with low_pc " << llvm::dwarf::TagString(tag).str(); } if (isRelative) { newValue -= newLowPC; } yamlValue.Value = newValue; }); } static void updateCompileUnits(const BinaryenDWARFInfo& info, llvm::DWARFYAML::Data& yaml, LocationUpdater& locationUpdater, bool is64) { // The context has the high-level information we need, and the YAML is where // we write changes. First, iterate over the compile units. size_t compileUnitIndex = 0; iterContextAndYAML( info.context->compile_units(), yaml.CompileUnits, [&](const std::unique_ptr& CU, llvm::DWARFYAML::Unit& yamlUnit) { // Our Memory64Lowering pass may change the "architecture" of the DWARF // data. AddrSize will cause all DW_AT_low_pc to be written as 32/64-bit. auto NewAddrSize = is64 ? 8 : 4; if (NewAddrSize != yamlUnit.AddrSize) { yamlUnit.AddrSize = NewAddrSize; yamlUnit.AddrSizeChanged = true; } // Process the DIEs in each compile unit. iterContextAndYAML( CU->dies(), yamlUnit.Entries, [&](const llvm::DWARFDebugInfoEntry& DIE, llvm::DWARFYAML::Entry& yamlEntry) { // Process the entries in each relevant DIE, looking for attributes to // change. auto abbrevDecl = DIE.getAbbreviationDeclarationPtr(); if (abbrevDecl) { // This is relevant; look for things to update. updateDIE( DIE, yamlEntry, abbrevDecl, locationUpdater, compileUnitIndex); } }); compileUnitIndex++; }); } static void updateRanges(llvm::DWARFYAML::Data& yaml, const LocationUpdater& locationUpdater) { // In each range section, try to update the start and end. If we no longer // have something to map them to, we must skip that part. size_t skip = 0; for (size_t i = 0; i < yaml.Ranges.size(); i++) { auto& range = yaml.Ranges[i]; BinaryLocation oldStart = range.Start, oldEnd = range.End, newStart = 0, newEnd = 0; // If this is an end marker (0, 0), or an invalid range (0, x) or (x, 0) // then just emit it as it is - either to mark the end, or to mark an // invalid entry. if (isTombstone(oldStart) || isTombstone(oldEnd)) { newStart = oldStart; newEnd = oldEnd; } else { // This was a valid entry; update it. newStart = locationUpdater.getNewStart(oldStart); newEnd = locationUpdater.getNewEnd(oldEnd); if (isTombstone(newStart) || isTombstone(newEnd)) { // This part of the range no longer has a mapping, so we must skip it. // Don't use (0, 0) as that would be an end marker; emit something // invalid for the debugger to ignore. newStart = 0; newEnd = 1; } // TODO even if range start and end markers have been preserved, // instructions in the middle may have moved around, making the range no // longer contiguous. We should check that, and possibly split/merge // the range. Or, we may need to have tracking in the IR for this. } auto& writtenRange = yaml.Ranges[i - skip]; writtenRange.Start = newStart; writtenRange.End = newEnd; } } // A location that is ignoreable, i.e., not a special value like 0 or -1 (which // would indicate an end or a base in .debug_loc). static const BinaryLocation IGNOREABLE_LOCATION = 1; static bool isNewBaseLoc(const llvm::DWARFYAML::Loc& loc) { return loc.Start == BinaryLocation(-1); } static bool isEndMarkerLoc(const llvm::DWARFYAML::Loc& loc) { return isTombstone(loc.Start) && isTombstone(loc.End); } // Update the .debug_loc section. static void updateLoc(llvm::DWARFYAML::Data& yaml, const LocationUpdater& locationUpdater) { // Similar to ranges, try to update the start and end. Note that here we // can't skip since the location description is a variable number of bytes, // so we mark no longer valid addresses as empty. bool atStart = true; // We need to keep positions in the .debug_loc section identical to before // (or else we'd need to update their positions too) and so we need to keep // base entries around (a base entry is added to every entry after it in the // list). However, we may change the base's value as after moving instructions // around the old base may not be smaller than all the values relative to it. BinaryLocation oldBase, newBase; auto& locs = yaml.Locs; for (size_t i = 0; i < locs.size(); i++) { auto& loc = locs[i]; if (atStart) { std::tie(oldBase, newBase) = locationUpdater.getCompileUnitBasesForLoc(loc.CompileUnitOffset); atStart = false; } // By default we copy values over, unless we modify them below. BinaryLocation newStart = loc.Start, newEnd = loc.End; if (isNewBaseLoc(loc)) { // This is a new base. // Note that the base is not the address of an instruction, necessarily - // it's just a number (seems like it could always be an instruction, but // that's not what LLVM emits). // We must look forward at everything relative to this base, so that we // can emit a new proper base (as mentioned earlier, the original base may // not be valid if instructions moved to a position before it - they must // be positive offsets from it). oldBase = newBase = newEnd; BinaryLocation smallest = -1; for (size_t j = i + 1; j < locs.size(); j++) { auto& futureLoc = locs[j]; if (isNewBaseLoc(futureLoc) || isEndMarkerLoc(futureLoc)) { break; } auto updatedStart = locationUpdater.getNewStart(futureLoc.Start + oldBase); // If we found a valid mapping, this is a relevant value for us. If the // optimizer removed it, it's a 0, and we can ignore it here - we will // emit IGNOREABLE_LOCATION for it later anyhow. if (updatedStart != 0) { smallest = std::min(smallest, updatedStart); } } // If we found no valid values that will be relativized here, just use 0 // as the new (never-to-be-used) base, which is less confusing (otherwise // the value looks like it means something). if (smallest == BinaryLocation(-1)) { smallest = 0; } newBase = newEnd = smallest; } else if (isEndMarkerLoc(loc)) { // This is an end marker, this list is done; reset the base. atStart = true; } else { // This is a normal entry, try to find what it should be updated to. First // de-relativize it to the base to get the absolute address, then look for // a new address for it. newStart = locationUpdater.getNewStart(loc.Start + oldBase); newEnd = locationUpdater.getNewEnd(loc.End + oldBase); if (newStart == 0 || newEnd == 0 || newStart > newEnd) { // This part of the loc no longer has a mapping, or after the mapping // it is no longer a proper span, so we must ignore it. newStart = newEnd = IGNOREABLE_LOCATION; } else { // We picked a new base that ensures it is smaller than the values we // will relativize to it. assert(newStart >= newBase && newEnd >= newBase); newStart -= newBase; newEnd -= newBase; if (newStart == 0 && newEnd == 0) { // After mapping to the new positions, and after relativizing to the // base, if we end up with (0, 0) then we must emit something else, as // that would be interpreted as the end of a list. As it is an empty // span, the actual value doesn't matter, it just has to be != 0. // This can happen if the very first span in a compile unit is an // empty span, in which case relative to the base of the compile unit // we would have (0, 0). newStart = newEnd = IGNOREABLE_LOCATION; } } // The loc start and end markers have been preserved. However, TODO // instructions in the middle may have moved around, making the loc no // longer contiguous, we should check that, and possibly split/merge // the loc. Or, we may need to have tracking in the IR for this. } loc.Start = newStart; loc.End = newEnd; // Note how the ".Location" field is unchanged. } } void writeDWARFSections(Module& wasm, const BinaryLocations& newLocations) { BinaryenDWARFInfo info(wasm); // Convert to Data representation, which YAML can use to write. llvm::DWARFYAML::Data data; if (dwarf2yaml(*info.context, data)) { Fatal() << "Failed to parse DWARF to YAML"; } LocationUpdater locationUpdater(wasm, newLocations); updateDebugLines(data, locationUpdater); updateCompileUnits(info, data, locationUpdater, wasm.memory.is64()); updateRanges(data, locationUpdater); updateLoc(data, locationUpdater); // Convert to binary sections. auto newSections = EmitDebugSections(data, false /* EmitFixups for debug_info */); // Update the custom sections in the wasm. // TODO: efficiency for (auto& section : wasm.userSections) { if (Name(section.name).startsWith(".debug_")) { auto llvmName = section.name.substr(1); if (newSections.count(llvmName)) { auto llvmData = newSections[llvmName]->getBuffer(); section.data.resize(llvmData.size()); std::copy(llvmData.begin(), llvmData.end(), section.data.data()); } } } } #else // BUILD_LLVM_DWARF void dumpDWARF(const Module& wasm) { std::cerr << "warning: no DWARF dumping support present\n"; } void writeDWARFSections(Module& wasm, const BinaryLocations& newLocations) { std::cerr << "warning: no DWARF updating support present\n"; } bool shouldPreserveDWARF(PassOptions& options, Module& wasm) { return false; } #endif // BUILD_LLVM_DWARF } // namespace wasm::Debug binaryen-version_108/src/wasm/wasm-emscripten.cpp000066400000000000000000000420661423707623100223350ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "wasm-emscripten.h" #include #include "asm_v_wasm.h" #include "asmjs/shared-constants.h" #include "ir/import-utils.h" #include "ir/literal-utils.h" #include "ir/module-utils.h" #include "shared-constants.h" #include "support/debug.h" #include "wasm-builder.h" #include "wasm-traversal.h" #include "wasm.h" #define DEBUG_TYPE "emscripten" namespace wasm { cashew::IString EM_JS_PREFIX("__em_js__"); void addExportedFunction(Module& wasm, Function* function) { wasm.addFunction(function); auto export_ = new Export; export_->name = export_->value = function->name; export_->kind = ExternalKind::Function; wasm.addExport(export_); } // TODO(sbc): There should probably be a better way to do this. bool isExported(Module& wasm, Name name) { for (auto& ex : wasm.exports) { if (ex->value == name) { return true; } } return false; } Global* getStackPointerGlobal(Module& wasm) { // Assumption: The stack pointer is either imported as __stack_pointer or // we just assume it's the first non-imported global. // TODO(sbc): Find a better way to discover the stack pointer. Perhaps the // linker could export it by name? for (auto& g : wasm.globals) { if (g->imported() && g->base == STACK_POINTER) { return g.get(); } } for (auto& g : wasm.globals) { if (!g->imported()) { return g.get(); } } return nullptr; } const Address UNKNOWN_OFFSET(uint32_t(-1)); std::string escape(std::string code) { // replace newlines quotes with escaped newlines size_t curr = 0; while ((curr = code.find("\\n", curr)) != std::string::npos) { code = code.replace(curr, 2, "\\\\n"); curr += 3; // skip this one } curr = 0; while ((curr = code.find("\\t", curr)) != std::string::npos) { code = code.replace(curr, 2, "\\\\t"); curr += 3; // skip this one } // replace double quotes with escaped single quotes curr = 0; while ((curr = code.find('"', curr)) != std::string::npos) { if (curr == 0 || code[curr - 1] != '\\') { code = code.replace(curr, 1, "\\" "\""); curr += 2; // skip this one } else { // already escaped, escape the slash as well code = code.replace(curr, 1, "\\" "\\" "\""); curr += 3; // skip this one } } return code; } class StringConstantTracker { public: StringConstantTracker(Module& wasm) : wasm(wasm) { calcSegmentOffsets(); } const char* stringAtAddr(Address address) { for (unsigned i = 0; i < wasm.memory.segments.size(); ++i) { Memory::Segment& segment = wasm.memory.segments[i]; Address offset = segmentOffsets[i]; if (offset != UNKNOWN_OFFSET && address >= offset && address < offset + segment.data.size()) { return &segment.data[address - offset]; } } Fatal() << "unable to find data for ASM/EM_JS const at: " << address; return nullptr; } std::vector
segmentOffsets; // segment index => address offset private: void calcSegmentOffsets() { std::unordered_map passiveOffsets; if (wasm.features.hasBulkMemory()) { // Fetch passive segment offsets out of memory.init instructions struct OffsetSearcher : PostWalker { std::unordered_map& offsets; OffsetSearcher(std::unordered_map& offsets) : offsets(offsets) {} void visitMemoryInit(MemoryInit* curr) { // The desitination of the memory.init is either a constant // or the result of an addition with __memory_base in the // case of PIC code. auto* dest = curr->dest->dynCast(); if (!dest) { auto* add = curr->dest->dynCast(); if (!add) { return; } dest = add->left->dynCast(); if (!dest) { return; } } auto it = offsets.find(curr->segment); if (it != offsets.end()) { Fatal() << "Cannot get offset of passive segment initialized " "multiple times"; } offsets[curr->segment] = dest->value.getInteger(); } } searcher(passiveOffsets); searcher.walkModule(&wasm); } for (unsigned i = 0; i < wasm.memory.segments.size(); ++i) { auto& segment = wasm.memory.segments[i]; if (segment.isPassive) { auto it = passiveOffsets.find(i); if (it != passiveOffsets.end()) { segmentOffsets.push_back(it->second); } else { // This was a non-constant offset (perhaps TLS) segmentOffsets.push_back(UNKNOWN_OFFSET); } } else if (auto* addrConst = segment.offset->dynCast()) { auto address = addrConst->value.getUnsigned(); segmentOffsets.push_back(address); } else { // TODO(sbc): Wasm shared libraries have data segments with non-const // offset. segmentOffsets.push_back(0); } } } Module& wasm; }; struct AsmConst { Address id; std::string code; }; struct SegmentRemover : WalkerPass> { SegmentRemover(Index segment) : segment(segment) {} bool isFunctionParallel() override { return true; } Pass* create() override { return new SegmentRemover(segment); } void visitMemoryInit(MemoryInit* curr) { if (segment == curr->segment) { Builder builder(*getModule()); replaceCurrent(builder.blockify(builder.makeDrop(curr->dest), builder.makeDrop(curr->offset), builder.makeDrop(curr->size))); } } void visitDataDrop(DataDrop* curr) { if (segment == curr->segment) { Builder builder(*getModule()); replaceCurrent(builder.makeNop()); } } Index segment; }; static void removeSegment(Module& wasm, Index segment) { PassRunner runner(&wasm); SegmentRemover(segment).run(&runner, &wasm); // Resize the segment to zero. In theory we should completely remove it // but that would mean re-numbering the segments that follow which is // non-trivial. wasm.memory.segments[segment].data.resize(0); } static Address getExportedAddress(Module& wasm, Export* export_) { Global* g = wasm.getGlobal(export_->value); auto* addrConst = g->init->dynCast(); return addrConst->value.getUnsigned(); } static std::vector findEmAsmConsts(Module& wasm, bool minimizeWasmChanges) { // Newer version of emscripten/llvm export these symbols so we can use them to // find all the EM_ASM constants. Sadly __start_em_asm and __stop_em_asm // don't alwasy mark the start and end of segment because in dynamic linking // we merge all data segments into one. Export* start = wasm.getExportOrNull("__start_em_asm"); Export* end = wasm.getExportOrNull("__stop_em_asm"); if (!start && !end) { BYN_TRACE("findEmAsmConsts: no start/stop symbols\n"); return {}; } if (!start || !end) { Fatal() << "Found only one of __start_em_asm and __stop_em_asm"; } std::vector asmConsts; StringConstantTracker stringTracker(wasm); Address startAddress = getExportedAddress(wasm, start); Address endAddress = getExportedAddress(wasm, end); for (Index i = 0; i < wasm.memory.segments.size(); i++) { Address segmentStart = stringTracker.segmentOffsets[i]; size_t segmentSize = wasm.memory.segments[i].data.size(); if (segmentStart <= startAddress && segmentStart + segmentSize >= endAddress) { Address address = startAddress; while (address < endAddress) { auto code = stringTracker.stringAtAddr(address); asmConsts.push_back({address, code}); address.addr += strlen(code) + 1; } if (segmentStart == startAddress && segmentStart + segmentSize == endAddress) { removeSegment(wasm, i); } else { // If we can't remove the whole segment then just set the string // data to zero. size_t segmentOffset = startAddress - segmentStart; char* startElem = &wasm.memory.segments[i].data[segmentOffset]; memset(startElem, 0, endAddress - startAddress); } break; } } assert(asmConsts.size()); wasm.removeExport("__start_em_asm"); wasm.removeExport("__stop_em_asm"); return asmConsts; } struct EmJsWalker : public PostWalker { Module& wasm; StringConstantTracker stringTracker; std::vector toRemove; std::map codeByName; std::map codeAddresses; // map from address to string len EmJsWalker(Module& _wasm) : wasm(_wasm), stringTracker(_wasm) {} void visitExport(Export* curr) { if (!curr->name.startsWith(EM_JS_PREFIX.str)) { return; } Address address; if (curr->kind == ExternalKind::Global) { auto* global = wasm.getGlobal(curr->value); Const* const_ = global->init->cast(); address = const_->value.getUnsigned(); } else if (curr->kind == ExternalKind::Function) { auto* func = wasm.getFunction(curr->value); // An EM_JS has a single const in the body. Typically it is just returned, // but in unoptimized code it might be stored to a local and loaded from // there, and in relocatable code it might get added to __memory_base etc. FindAll consts(func->body); if (consts.list.size() != 1) { Fatal() << "Unexpected generated __em_js__ function body: " << curr->name; } auto* addrConst = consts.list[0]; address = addrConst->value.getUnsigned(); } else { return; } toRemove.push_back(*curr); auto code = stringTracker.stringAtAddr(address); auto funcName = std::string(curr->name.stripPrefix(EM_JS_PREFIX.str)); codeByName[funcName] = code; codeAddresses[address] = strlen(code) + 1; } }; EmJsWalker findEmJsFuncsAndReturnWalker(Module& wasm) { EmJsWalker walker(wasm); walker.walkModule(&wasm); for (const Export& exp : walker.toRemove) { if (exp.kind == ExternalKind::Function) { wasm.removeFunction(exp.value); } else { wasm.removeGlobal(exp.value); } wasm.removeExport(exp.name); } // With newer versions of emscripten/llvm we pack all EM_JS strings into // single segment. // We can detect this by checking for segments that contain only JS strings. // When we find such segements we remove them from the final binary. for (Index i = 0; i < wasm.memory.segments.size(); i++) { Address start = walker.stringTracker.segmentOffsets[i]; Address cur = start; while (cur < start + wasm.memory.segments[i].data.size()) { if (walker.codeAddresses.count(cur) == 0) { break; } cur.addr += walker.codeAddresses[cur]; } if (cur == start + wasm.memory.segments[i].data.size()) { // Entire segment is contains JS strings. Remove it. removeSegment(wasm, i); } } return walker; } std::string EmscriptenGlueGenerator::generateEmscriptenMetadata() { bool commaFirst; auto nextElement = [&commaFirst]() { if (commaFirst) { commaFirst = false; return "\n "; } else { return ",\n "; } }; std::stringstream meta; meta << "{\n"; std::vector asmConsts = findEmAsmConsts(wasm, minimizeWasmChanges); // print commaFirst = true; if (!asmConsts.empty()) { meta << " \"asmConsts\": {"; for (auto& asmConst : asmConsts) { meta << nextElement(); meta << '"' << asmConst.id << "\": \"" << escape(asmConst.code) << "\""; } meta << "\n },\n"; } EmJsWalker emJsWalker = findEmJsFuncsAndReturnWalker(wasm); if (!emJsWalker.codeByName.empty()) { meta << " \"emJsFuncs\": {"; commaFirst = true; for (auto& [name, code] : emJsWalker.codeByName) { meta << nextElement(); meta << '"' << name << "\": \"" << escape(code) << '"'; } meta << "\n },\n"; } // Avoid adding duplicate imports to `declares' or `invokeFuncs`. Even // though we might import the same function multiple times (i.e. with // different sigs) we only need to list is in the metadata once. std::set declares; std::set invokeFuncs; // We use the `base` rather than the `name` of the imports here and below // becasue this is the externally visible name that the embedder (JS) will // see. meta << " \"declares\": ["; commaFirst = true; ModuleUtils::iterImportedFunctions(wasm, [&](Function* import) { if (emJsWalker.codeByName.count(import->base.str) == 0 && !import->base.startsWith("invoke_")) { if (declares.insert(import->base.str).second) { meta << nextElement() << '"' << import->base.str << '"'; } } }); meta << "\n ],\n"; meta << " \"globalImports\": ["; commaFirst = true; ModuleUtils::iterImportedGlobals(wasm, [&](Global* import) { meta << nextElement() << '"' << import->base.str << '"'; }); meta << "\n ],\n"; if (!wasm.exports.empty()) { meta << " \"exports\": ["; commaFirst = true; for (const auto& ex : wasm.exports) { if (ex->kind == ExternalKind::Function) { meta << nextElement() << '"' << ex->name.str << '"'; } } meta << "\n ],\n"; meta << " \"namedGlobals\": {"; commaFirst = true; for (const auto& ex : wasm.exports) { if (ex->kind == ExternalKind::Global) { const Global* g = wasm.getGlobal(ex->value); assert(g->type == Type::i32 || g->type == Type::i64); Const* init = g->init->cast(); uint64_t addr = init->value.getInteger(); meta << nextElement() << '"' << ex->name.str << "\" : \"" << addr << '"'; } } meta << "\n },\n"; } meta << " \"invokeFuncs\": ["; commaFirst = true; ModuleUtils::iterImportedFunctions(wasm, [&](Function* import) { if (import->module == ENV && import->base.startsWith("invoke_")) { if (invokeFuncs.insert(import->base.str).second) { meta << nextElement() << '"' << import->base.str << '"'; } } }); meta << "\n ],\n"; // In normal mode we attempt to determine if main takes argumnts or not // In standalone mode we export _start instead and rely on the presence // of the __wasi_args_get and __wasi_args_sizes_get syscalls allow us to // DCE to the argument handling JS code instead. if (!standalone) { auto mainReadsParams = false; auto* exp = wasm.getExportOrNull("main"); if (!exp) { exp = wasm.getExportOrNull("__main_argc_argv"); } if (exp) { if (exp->kind == ExternalKind::Function) { auto* main = wasm.getFunction(exp->value); mainReadsParams = true; // If main does not read its parameters, it will just be a stub that // calls __original_main (which has no parameters). if (auto* call = main->body->dynCast()) { if (call->operands.empty()) { mainReadsParams = false; } } } } meta << " \"mainReadsParams\": " << int(mainReadsParams) << ",\n"; } meta << " \"features\": ["; commaFirst = true; wasm.features.iterFeatures([&](FeatureSet::Feature f) { meta << nextElement() << "\"--enable-" << FeatureSet::toString(f) << '"'; }); meta << "\n ]\n"; meta << "}\n"; return meta.str(); } void EmscriptenGlueGenerator::separateDataSegments(Output* outfile, Address base) { size_t lastEnd = 0; for (Memory::Segment& seg : wasm.memory.segments) { if (seg.isPassive) { Fatal() << "separating passive segments not implemented"; } if (!seg.offset->is()) { Fatal() << "separating relocatable segments not implemented"; } size_t offset = seg.offset->cast()->value.getInteger(); offset -= base; size_t fill = offset - lastEnd; if (fill > 0) { std::vector buf(fill); outfile->write(buf.data(), fill); } outfile->write(seg.data.data(), seg.data.size()); lastEnd = offset + seg.data.size(); } wasm.memory.segments.clear(); } void EmscriptenGlueGenerator::renameMainArgcArgv() { // If an export call ed __main_argc_argv exists rename it to main Export* ex = wasm.getExportOrNull("__main_argc_argv"); if (!ex) { BYN_TRACE("renameMain: __main_argc_argv not found\n"); return; } ex->name = "main"; wasm.updateMaps(); ModuleUtils::renameFunction(wasm, "__main_argc_argv", "main"); } } // namespace wasm binaryen-version_108/src/wasm/wasm-interpreter.cpp000066400000000000000000000011141423707623100225140ustar00rootroot00000000000000#include "wasm-interpreter.h" namespace wasm { #ifdef WASM_INTERPRETER_DEBUG int Indenter::indentLevel = 0; Indenter::Indenter(const char* entry) : entryName(entry) { ++indentLevel; } Indenter::~Indenter() { print(); std::cout << "exit " << entryName << '\n'; --indentLevel; } void Indenter::print() { std::cout << indentLevel << ':'; for (int i = 0; i <= indentLevel; ++i) { std::cout << ' '; } } #endif // WASM_INTERPRETER_DEBUG std::ostream& operator<<(std::ostream& o, const WasmException& exn) { return o << exn.tag << " " << exn.values; } } // namespace wasm binaryen-version_108/src/wasm/wasm-io.cpp000066400000000000000000000133441423707623100205700ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // Abstracts reading and writing, supporting both text and binary // depending on the suffix. // // When the suffix is unclear, writing defaults to text (this // allows odd suffixes, which we use in the test suite), while // reading will check the magic number and default to text if not // binary. // #include "wasm-io.h" #include "support/debug.h" #include "wasm-binary.h" #include "wasm-s-parser.h" namespace wasm { #define DEBUG_TYPE "writer" static void readTextData(std::string& input, Module& wasm, IRProfile profile) { SExpressionParser parser(const_cast(input.c_str())); Element& root = *parser.root; SExpressionWasmBuilder builder(wasm, *root[0], profile); } void ModuleReader::readText(std::string filename, Module& wasm) { BYN_TRACE("reading text from " << filename << "\n"); auto input(read_file(filename, Flags::Text)); readTextData(input, wasm, profile); } void ModuleReader::readBinaryData(std::vector& input, Module& wasm, std::string sourceMapFilename) { std::unique_ptr sourceMapStream; // Assume that the wasm has had its initial features applied, and use those // while parsing. WasmBinaryBuilder parser(wasm, wasm.features, input); parser.setDebugInfo(debugInfo); parser.setDWARF(DWARF); parser.setSkipFunctionBodies(skipFunctionBodies); if (sourceMapFilename.size()) { sourceMapStream = make_unique(); sourceMapStream->open(sourceMapFilename); parser.setDebugLocations(sourceMapStream.get()); } parser.read(); if (sourceMapStream) { sourceMapStream->close(); } } void ModuleReader::readBinary(std::string filename, Module& wasm, std::string sourceMapFilename) { BYN_TRACE("reading binary from " << filename << "\n"); auto input(read_file>(filename, Flags::Binary)); readBinaryData(input, wasm, sourceMapFilename); } bool ModuleReader::isBinaryFile(std::string filename) { std::ifstream infile; std::ios_base::openmode flags = std::ifstream::in | std::ifstream::binary; infile.open(filename, flags); char buffer[4] = {1, 2, 3, 4}; infile.read(buffer, 4); infile.close(); return buffer[0] == '\0' && buffer[1] == 'a' && buffer[2] == 's' && buffer[3] == 'm'; } void ModuleReader::read(std::string filename, Module& wasm, std::string sourceMapFilename) { // empty filename or "-" means read from stdin if (!filename.size() || filename == "-") { readStdin(wasm, sourceMapFilename); return; } if (isBinaryFile(filename)) { readBinary(filename, wasm, sourceMapFilename); } else { // default to text if (sourceMapFilename.size()) { std::cerr << "Binaryen ModuleReader::read() - source map filename " "provided, but file appears to not be binary\n"; } readText(filename, wasm); } } // TODO: reading into a vector then copying into a string is unnecessarily // inefficient. It would be better to read just once into a stringstream. void ModuleReader::readStdin(Module& wasm, std::string sourceMapFilename) { std::vector input = read_stdin(); if (input.size() >= 4 && input[0] == '\0' && input[1] == 'a' && input[2] == 's' && input[3] == 'm') { readBinaryData(input, wasm, sourceMapFilename); } else { std::ostringstream s; s.write(input.data(), input.size()); s << '\0'; std::string input_str = s.str(); readTextData(input_str, wasm, profile); } } #undef DEBUG_TYPE #define DEBUG_TYPE "writer" void ModuleWriter::writeText(Module& wasm, Output& output) { output.getStream() << wasm; } void ModuleWriter::writeText(Module& wasm, std::string filename) { BYN_TRACE("writing text to " << filename << "\n"); Output output(filename, Flags::Text); writeText(wasm, output); } void ModuleWriter::writeBinary(Module& wasm, Output& output) { BufferWithRandomAccess buffer; WasmBinaryWriter writer(&wasm, buffer); // if debug info is used, then we want to emit the names section writer.setNamesSection(debugInfo); if (emitModuleName) { writer.setEmitModuleName(true); } std::unique_ptr sourceMapStream; if (sourceMapFilename.size()) { sourceMapStream = make_unique(); sourceMapStream->open(sourceMapFilename); writer.setSourceMap(sourceMapStream.get(), sourceMapUrl); } if (symbolMap.size() > 0) { writer.setSymbolMap(symbolMap); } writer.write(); buffer.writeTo(output); if (sourceMapStream) { sourceMapStream->close(); } } void ModuleWriter::writeBinary(Module& wasm, std::string filename) { BYN_TRACE("writing binary to " << filename << "\n"); Output output(filename, Flags::Binary); writeBinary(wasm, output); } void ModuleWriter::write(Module& wasm, Output& output) { if (binary) { writeBinary(wasm, output); } else { writeText(wasm, output); } } void ModuleWriter::write(Module& wasm, std::string filename) { if (binary && filename.size() > 0) { writeBinary(wasm, filename); } else { writeText(wasm, filename); } } } // namespace wasm binaryen-version_108/src/wasm/wasm-s-parser.cpp000066400000000000000000003310121423707623100217100ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "wasm-s-parser.h" #include #include #include #include "ir/branch-utils.h" #include "ir/table-utils.h" #include "shared-constants.h" #include "support/string.h" #include "wasm-binary.h" #include "wasm-builder.h" #define abort_on(str) \ { throw ParseException(std::string("abort_on ") + str); } #define element_assert(condition) \ assert((condition) ? true : (std::cerr << "on: " << *this << '\n' && 0)); using cashew::IString; namespace { int unhex(char c) { if (c >= '0' && c <= '9') { return c - '0'; } if (c >= 'a' && c <= 'f') { return c - 'a' + 10; } if (c >= 'A' && c <= 'F') { return c - 'A' + 10; } throw wasm::ParseException("invalid hexadecimal"); } } // namespace namespace wasm { static Name STRUCT("struct"), FIELD("field"), ARRAY("array"), FUNC_SUBTYPE("func_subtype"), STRUCT_SUBTYPE("struct_subtype"), ARRAY_SUBTYPE("array_subtype"), EXTENDS("extends"), REC("rec"), I8("i8"), I16("i16"), RTT("rtt"), DECLARE("declare"), ITEM("item"), OFFSET("offset"); static Address getAddress(const Element* s) { return atoll(s->c_str()); } static void checkAddress(Address a, const char* errorText, const Element* errorElem) { if (a > std::numeric_limits::max()) { throw ParseException(errorText, errorElem->line, errorElem->col); } } static bool elementStartsWith(Element& s, IString str) { return s.isList() && s.size() > 0 && s[0]->isStr() && s[0]->str() == str; } static bool elementStartsWith(Element* s, IString str) { return elementStartsWith(*s, str); } Element::List& Element::list() { if (!isList()) { throw ParseException("expected list", line, col); } return list_; } Element* Element::operator[](unsigned i) { if (!isList()) { throw ParseException("expected list", line, col); } if (i >= list().size()) { throw ParseException("expected more elements in list", line, col); } return list()[i]; } IString Element::str() const { if (!isStr()) { throw ParseException("expected string", line, col); } return str_; } const char* Element::c_str() const { if (!isStr()) { throw ParseException("expected string", line, col); } return str_.str; } Element* Element::setString(IString str__, bool dollared__, bool quoted__) { isList_ = false; str_ = str__; dollared_ = dollared__; quoted_ = quoted__; return this; } Element* Element::setMetadata(size_t line_, size_t col_, SourceLocation* startLoc_) { line = line_; col = col_; startLoc = startLoc_; return this; } std::ostream& operator<<(std::ostream& o, Element& e) { if (e.isList_) { o << '('; for (auto item : e.list_) { o << ' ' << *item; } o << " )"; } else { if (e.dollared()) { o << '$'; } o << e.str_.str; } return o; } void Element::dump() { std::cout << "dumping " << this << " : " << *this << ".\n"; } SExpressionParser::SExpressionParser(char* input) : input(input) { root = nullptr; line = 1; lineStart = input; while (!root) { // keep parsing until we pass an initial comment root = parse(); } } Element* SExpressionParser::parse() { std::vector stack; std::vector stackLocs; Element* curr = allocator.alloc(); while (1) { skipWhitespace(); if (input[0] == 0) { break; } if (input[0] == '(') { input++; stack.push_back(curr); curr = allocator.alloc()->setMetadata( line, input - lineStart - 1, loc); stackLocs.push_back(loc); assert(stack.size() == stackLocs.size()); } else if (input[0] == ')') { input++; curr->endLoc = loc; auto last = curr; if (stack.empty()) { throw ParseException("s-expr stack empty"); } curr = stack.back(); assert(stack.size() == stackLocs.size()); stack.pop_back(); loc = stackLocs.back(); stackLocs.pop_back(); curr->list().push_back(last); } else { curr->list().push_back(parseString()); } } if (stack.size() != 0) { throw ParseException("stack is not empty", curr->line, curr->col); } return curr; } void SExpressionParser::parseDebugLocation() { // Extracting debug location (if valid) char* debugLoc = input + 3; // skipping ";;@" while (debugLoc[0] && debugLoc[0] == ' ') { debugLoc++; } char* debugLocEnd = debugLoc; while (debugLocEnd[0] && debugLocEnd[0] != '\n') { debugLocEnd++; } char* pos = debugLoc; while (pos < debugLocEnd && pos[0] != ':') { pos++; } if (pos >= debugLocEnd) { return; // no line number } std::string name(debugLoc, pos); char* lineStart = ++pos; while (pos < debugLocEnd && pos[0] != ':') { pos++; } std::string lineStr(lineStart, pos); if (pos >= debugLocEnd) { return; // no column number } std::string colStr(++pos, debugLocEnd); void* buf = allocator.allocSpace(sizeof(SourceLocation), alignof(SourceLocation)); loc = new (buf) SourceLocation( IString(name.c_str(), false), atoi(lineStr.c_str()), atoi(colStr.c_str())); } void SExpressionParser::skipWhitespace() { while (1) { while (isspace(input[0])) { if (input[0] == '\n') { line++; lineStart = input + 1; } input++; } if (input[0] == ';' && input[1] == ';') { if (input[2] == '@') { parseDebugLocation(); } while (input[0] && input[0] != '\n') { input++; } line++; if (!input[0]) { return; } lineStart = ++input; } else if (input[0] == '(' && input[1] == ';') { // Skip nested block comments. input += 2; int depth = 1; while (1) { if (!input[0]) { return; } if (input[0] == '(' && input[1] == ';') { input += 2; depth++; } else if (input[0] == ';' && input[1] == ')') { input += 2; --depth; if (depth == 0) { break; } } else if (input[0] == '\n') { line++; lineStart = input; input++; } else { input++; } } } else { return; } } } Element* SExpressionParser::parseString() { bool dollared = false; if (input[0] == '$') { input++; dollared = true; } char* start = input; if (input[0] == '"') { // parse escaping \", but leave code escaped - we'll handle escaping in // memory segments specifically input++; std::string str; while (1) { if (input[0] == 0) { throw ParseException("unterminated string", line, start - lineStart); } if (input[0] == '"') { break; } if (input[0] == '\\') { str += input[0]; if (input[1] == 0) { throw ParseException( "unterminated string escape", line, start - lineStart); } str += input[1]; input += 2; continue; } str += input[0]; input++; } input++; return allocator.alloc() ->setString(IString(str.c_str(), false), dollared, true) ->setMetadata(line, start - lineStart, loc); } while (input[0] && !isspace(input[0]) && input[0] != ')' && input[0] != '(' && input[0] != ';') { input++; } if (start == input) { throw ParseException("expected string", line, input - lineStart); } char temp = input[0]; input[0] = 0; auto ret = allocator.alloc() ->setString(IString(start, false), dollared, false) ->setMetadata(line, start - lineStart, loc); input[0] = temp; return ret; } SExpressionWasmBuilder::SExpressionWasmBuilder(Module& wasm, Element& module, IRProfile profile) : wasm(wasm), allocator(wasm.allocator), profile(profile) { if (module.size() == 0) { throw ParseException("empty toplevel, expected module"); } if (module[0]->str() != MODULE) { throw ParseException("toplevel does not start with module"); } if (module.size() == 1) { return; } Index i = 1; if (module[i]->dollared()) { wasm.name = module[i]->str(); if (module.size() == 2) { return; } i++; } // spec tests have a `binary` keyword after the optional module name. Skip it Name BINARY("binary"); if (module[i]->isStr() && module[i]->str() == BINARY && !module[i]->quoted()) { i++; } if (i < module.size() && module[i]->isStr()) { // these s-expressions contain a binary module, actually std::vector data; while (i < module.size()) { auto str = module[i++]->c_str(); if (auto size = strlen(str)) { stringToBinary(str, size, data); } } // TODO: support applying features here WasmBinaryBuilder binaryBuilder(wasm, FeatureSet::MVP, data); binaryBuilder.read(); return; } preParseHeapTypes(module); Index implementedFunctions = 0; functionCounter = 0; for (unsigned j = i; j < module.size(); j++) { auto& s = *module[j]; preParseFunctionType(s); preParseImports(s); if (elementStartsWith(s, FUNC) && !isImport(s)) { implementedFunctions++; } } // we go through the functions again, now parsing them, and the counter begins // from where imports ended functionCounter -= implementedFunctions; for (unsigned j = i; j < module.size(); j++) { parseModuleElement(*module[j]); } } bool SExpressionWasmBuilder::isImport(Element& curr) { for (Index i = 0; i < curr.size(); i++) { auto& x = *curr[i]; if (elementStartsWith(x, IMPORT)) { return true; } } return false; } void SExpressionWasmBuilder::preParseImports(Element& curr) { IString id = curr[0]->str(); if (id == IMPORT) { parseImport(curr); } if (isImport(curr)) { if (id == FUNC) { parseFunction(curr, true /* preParseImport */); } else if (id == GLOBAL) { parseGlobal(curr, true /* preParseImport */); } else if (id == TABLE) { parseTable(curr, true /* preParseImport */); } else if (id == MEMORY) { parseMemory(curr, true /* preParseImport */); } else if (id == TAG) { parseTag(curr, true /* preParseImport */); } else { throw ParseException( "fancy import we don't support yet", curr.line, curr.col); } } } void SExpressionWasmBuilder::parseModuleElement(Element& curr) { if (isImport(curr)) { return; // already done } IString id = curr[0]->str(); if (id == START) { return parseStart(curr); } if (id == FUNC) { return parseFunction(curr); } if (id == MEMORY) { return parseMemory(curr); } if (id == DATA) { return parseData(curr); } if (id == EXPORT) { return parseExport(curr); } if (id == IMPORT) { return; // already done } if (id == GLOBAL) { return parseGlobal(curr); } if (id == TABLE) { return parseTable(curr); } if (id == ELEM) { return parseElem(curr); } if (id == TYPE) { return; // already done } if (id == REC) { return; // already done } if (id == TAG) { return parseTag(curr); } std::cerr << "bad module element " << id.str << '\n'; throw ParseException("unknown module element", curr.line, curr.col); } Name SExpressionWasmBuilder::getFunctionName(Element& s) { if (s.dollared()) { return s.str(); } else { // index size_t offset = atoi(s.str().c_str()); if (offset >= functionNames.size()) { throw ParseException( "unknown function in getFunctionName", s.line, s.col); } return functionNames[offset]; } } Name SExpressionWasmBuilder::getTableName(Element& s) { if (s.dollared()) { return s.str(); } else { // index size_t offset = atoi(s.str().c_str()); if (offset >= tableNames.size()) { throw ParseException("unknown table in getTableName", s.line, s.col); } return tableNames[offset]; } } Name SExpressionWasmBuilder::getGlobalName(Element& s) { if (s.dollared()) { return s.str(); } else { // index size_t offset = atoi(s.str().c_str()); if (offset >= globalNames.size()) { throw ParseException("unknown global in getGlobalName", s.line, s.col); } return globalNames[offset]; } } Name SExpressionWasmBuilder::getTagName(Element& s) { if (s.dollared()) { return s.str(); } else { // index size_t offset = atoi(s.str().c_str()); if (offset >= tagNames.size()) { throw ParseException("unknown tag in getTagName", s.line, s.col); } return tagNames[offset]; } } // Parse various forms of (param ...) or (local ...) element. This ignores all // parameter or local names when specified. std::vector SExpressionWasmBuilder::parseParamOrLocal(Element& s) { size_t fakeIndex = 0; std::vector namedParams = parseParamOrLocal(s, fakeIndex); std::vector params; for (auto& p : namedParams) { params.push_back(p.type); } return params; } // Parses various forms of (param ...) or (local ...) element: // (param $name type) (e.g. (param $a i32)) // (param type+) (e.g. (param i32 f64)) // (local $name type) (e.g. (local $a i32)) // (local type+) (e.g. (local i32 f64)) // If the name is unspecified, it will create one using localIndex. std::vector SExpressionWasmBuilder::parseParamOrLocal(Element& s, size_t& localIndex) { assert(elementStartsWith(s, PARAM) || elementStartsWith(s, LOCAL)); std::vector namedParams; if (s.size() == 1) { // (param) or (local) return namedParams; } for (size_t i = 1; i < s.size(); i++) { IString name; if (s[i]->dollared()) { if (i != 1) { throw ParseException("invalid wasm type", s[i]->line, s[i]->col); } if (i + 1 >= s.size()) { throw ParseException("invalid param entry", s.line, s.col); } name = s[i]->str(); i++; } else { name = Name::fromInt(localIndex); } localIndex++; Type type; type = elementToType(*s[i]); if (elementStartsWith(s, PARAM) && type.isTuple()) { throw ParseException( "params may not have tuple types", s[i]->line, s[i]->col); } namedParams.emplace_back(name, type); } return namedParams; } // Parses (result type) element. (e.g. (result i32)) std::vector SExpressionWasmBuilder::parseResults(Element& s) { assert(elementStartsWith(s, RESULT)); std::vector types; for (size_t i = 1; i < s.size(); i++) { types.push_back(elementToType(*s[i])); } return types; } // Parses an element that references an entry in the type section. The element // should be in the form of (type name) or (type index). // (e.g. (type $a), (type 0)) HeapType SExpressionWasmBuilder::parseTypeRef(Element& s) { assert(elementStartsWith(s, TYPE)); if (s.size() != 2) { throw ParseException("invalid type reference", s.line, s.col); } auto heapType = parseHeapType(*s[1]); if (!heapType.isSignature()) { throw ParseException("expected signature type", s.line, s.col); } return heapType; } // Parses typeuse, a reference to a type definition. It is in the form of either // (type index) or (type name), possibly augmented by inlined (param) and // (result) nodes. (type) node can be omitted as well. Outputs are returned by // parameter references. // typeuse ::= (type index|name)+ | // (type index|name)+ (param ..)* (result ..)* | // (param ..)* (result ..)* size_t SExpressionWasmBuilder::parseTypeUse(Element& s, size_t startPos, HeapType& functionType, std::vector& namedParams) { std::vector params, results; size_t i = startPos; bool typeExists = false, paramsOrResultsExist = false; if (i < s.size() && elementStartsWith(*s[i], TYPE)) { typeExists = true; functionType = parseTypeRef(*s[i++]); } size_t paramPos = i; size_t localIndex = 0; while (i < s.size() && elementStartsWith(*s[i], PARAM)) { paramsOrResultsExist = true; auto newParams = parseParamOrLocal(*s[i++], localIndex); namedParams.insert(namedParams.end(), newParams.begin(), newParams.end()); for (auto p : newParams) { params.push_back(p.type); } } while (i < s.size() && elementStartsWith(*s[i], RESULT)) { paramsOrResultsExist = true; auto newResults = parseResults(*s[i++]); results.insert(results.end(), newResults.begin(), newResults.end()); } auto inlineSig = Signature(Type(params), Type(results)); // If none of type/param/result exists, this is equivalent to a type that does // not have parameters and returns nothing. if (!typeExists && !paramsOrResultsExist) { paramsOrResultsExist = true; } if (!typeExists) { functionType = inlineSig; } else if (paramsOrResultsExist) { // verify that (type) and (params)/(result) match if (inlineSig != functionType.getSignature()) { throw ParseException("type and param/result don't match", s[paramPos]->line, s[paramPos]->col); } } // Add implicitly defined type to global list so it has an index if (std::find(types.begin(), types.end(), functionType) == types.end()) { types.push_back(functionType); } // If only (type) is specified, populate `namedParams` if (!paramsOrResultsExist) { size_t index = 0; assert(functionType.isSignature()); Signature sig = functionType.getSignature(); for (const auto& param : sig.params) { namedParams.emplace_back(Name::fromInt(index++), param); } } return i; } // Parses a typeuse. Use this when only FunctionType* is needed. size_t SExpressionWasmBuilder::parseTypeUse(Element& s, size_t startPos, HeapType& functionType) { std::vector params; return parseTypeUse(s, startPos, functionType, params); } void SExpressionWasmBuilder::preParseHeapTypes(Element& module) { // Iterate through each individual type definition, calling `f` with the // definition and its recursion group number. auto forEachType = [&](auto f) { size_t groupNumber = 0; for (auto* elemPtr : module) { auto& elem = *elemPtr; if (elementStartsWith(elem, TYPE)) { f(elem, groupNumber++); } else if (elementStartsWith(elem, REC)) { for (auto* innerPtr : elem) { auto& inner = *innerPtr; if (elementStartsWith(inner, TYPE)) { f(inner, groupNumber); } } ++groupNumber; } } }; // Map type names to indices size_t numTypes = 0; forEachType([&](Element& elem, size_t) { if (elem[1]->dollared()) { std::string name = elem[1]->c_str(); if (!typeIndices.insert({name, numTypes}).second) { throw ParseException("duplicate function type", elem.line, elem.col); } } ++numTypes; }); TypeBuilder builder(numTypes); // Create recursion groups size_t currGroup = 0, groupStart = 0, groupLength = 0; auto finishGroup = [&]() { builder.createRecGroup(groupStart, groupLength); groupStart = groupStart + groupLength; groupLength = 0; }; forEachType([&](Element&, size_t group) { if (group != currGroup) { finishGroup(); currGroup = group; } ++groupLength; }); finishGroup(); auto parseRefType = [&](Element& elem) -> Type { // '(' 'ref' 'null'? ht ')' auto nullable = elem[1]->isStr() && *elem[1] == NULL_ ? Nullable : NonNullable; auto& referent = nullable ? *elem[2] : *elem[1]; const char* name = referent.c_str(); if (referent.dollared()) { return builder.getTempRefType(builder[typeIndices[name]], nullable); } else if (String::isNumber(name)) { size_t index = atoi(name); if (index >= numTypes) { throw ParseException("invalid type index", elem.line, elem.col); } return builder.getTempRefType(builder[index], nullable); } else { return Type(stringToHeapType(name), nullable); } }; auto parseRttType = [&](Element& elem) -> Type { // '(' 'rtt' depth? typeidx ')' uint32_t depth; Element* idx; switch (elem.size()) { default: throw ParseException( "unexpected number of rtt parameters", elem.line, elem.col); case 2: depth = Rtt::NoDepth; idx = elem[1]; break; case 3: if (!String::isNumber(elem[1]->c_str())) { throw ParseException( "invalid rtt depth", elem[1]->line, elem[1]->col); } depth = atoi(elem[1]->c_str()); idx = elem[2]; break; } if (idx->dollared()) { HeapType type = builder[typeIndices[idx->c_str()]]; return builder.getTempRttType(Rtt(depth, type)); } else if (String::isNumber(idx->c_str())) { size_t index = atoi(idx->c_str()); if (index < numTypes) { return builder.getTempRttType(Rtt(depth, builder[index])); } } throw ParseException("invalid type index", idx->line, idx->col); }; auto parseValType = [&](Element& elem) { if (elem.isStr()) { return stringToType(elem.c_str()); } else if (*elem[0] == REF) { return parseRefType(elem); } else if (*elem[0] == RTT) { return parseRttType(elem); } else { throw ParseException("unknown valtype kind", elem[0]->line, elem[0]->col); } }; auto parseParams = [&](Element& elem) { auto it = ++elem.begin(); if (it != elem.end() && (*it)->dollared()) { ++it; } std::vector params; for (auto end = elem.end(); it != end; ++it) { params.push_back(parseValType(**it)); } return params; }; auto parseResults = [&](Element& elem) { std::vector results; for (auto it = ++elem.begin(); it != elem.end(); ++it) { results.push_back(parseValType(**it)); } return results; }; auto parseSignatureDef = [&](Element& elem, bool nominal) { // '(' 'func' vec(param) vec(result) ')' // param ::= '(' 'param' id? valtype ')' // result ::= '(' 'result' valtype ')' std::vector params, results; auto end = elem.end() - (nominal ? 1 : 0); for (auto it = ++elem.begin(); it != end; ++it) { Element& curr = **it; if (elementStartsWith(curr, PARAM)) { auto newParams = parseParams(curr); params.insert(params.end(), newParams.begin(), newParams.end()); } else if (elementStartsWith(curr, RESULT)) { auto newResults = parseResults(curr); results.insert(results.end(), newResults.begin(), newResults.end()); } } return Signature(builder.getTempTupleType(params), builder.getTempTupleType(results)); }; // Parses a field, and notes the name if one is found. auto parseField = [&](Element* elem, Name& name) { Mutability mutable_ = Immutable; // elem is a list, containing either // TYPE // or // (field TYPE) // or // (field $name TYPE) if (elementStartsWith(elem, FIELD)) { if (elem->size() == 3) { name = (*elem)[1]->str(); } elem = (*elem)[elem->size() - 1]; } // The element may also be (mut (..)). if (elementStartsWith(elem, MUT)) { mutable_ = Mutable; elem = (*elem)[1]; } if (elem->isStr()) { // elem is a simple string name like "i32". It can be a normal wasm // type, or one of the special types only available in fields. if (*elem == I8) { return Field(Field::i8, mutable_); } else if (*elem == I16) { return Field(Field::i16, mutable_); } } // Otherwise it's an arbitrary type. return Field(parseValType(*elem), mutable_); }; auto parseStructDef = [&](Element& elem, size_t typeIndex, bool nominal) { FieldList fields; Index end = elem.size() - (nominal ? 1 : 0); for (Index i = 1; i < end; i++) { Name name; fields.emplace_back(parseField(elem[i], name)); if (name.is()) { // Only add the name to the map if it exists. fieldNames[typeIndex][i - 1] = name; } } return Struct(fields); }; auto parseArrayDef = [&](Element& elem) { Name unused; return Array(parseField(elem[1], unused)); }; size_t index = 0; forEachType([&](Element& elem, size_t) { Element& def = elem[1]->dollared() ? *elem[2] : *elem[1]; Element& kind = *def[0]; bool hasSupertype = kind == FUNC_SUBTYPE || kind == STRUCT_SUBTYPE || kind == ARRAY_SUBTYPE; if (kind == FUNC || kind == FUNC_SUBTYPE) { builder[index] = parseSignatureDef(def, hasSupertype); } else if (kind == STRUCT || kind == STRUCT_SUBTYPE) { builder[index] = parseStructDef(def, index, hasSupertype); } else if (kind == ARRAY || kind == ARRAY_SUBTYPE) { builder[index] = parseArrayDef(def); } else { throw ParseException("unknown heaptype kind", kind.line, kind.col); } Element* super = nullptr; if (hasSupertype) { super = def[def.size() - 1]; if (super->dollared()) { // OK } else if (kind == FUNC_SUBTYPE && super->str() == FUNC) { // OK; no supertype super = nullptr; } else if ((kind == STRUCT_SUBTYPE || kind == ARRAY_SUBTYPE) && super->str() == DATA) { // OK; no supertype super = nullptr; } else { throw ParseException("unknown supertype", super->line, super->col); } } else if (elementStartsWith(elem[elem.size() - 1], EXTENDS)) { // '(' 'extends' $supertype ')' Element& extends = *elem[elem.size() - 1]; super = extends[1]; } if (super) { auto it = typeIndices.find(super->c_str()); if (it == typeIndices.end()) { throw ParseException("unknown supertype", super->line, super->col); } builder[index].subTypeOf(builder[it->second]); } ++index; }); auto result = builder.build(); if (auto* err = result.getError()) { // Find the name to provide a better error message. std::stringstream msg; msg << "Invalid type: " << err->reason; for (auto& [name, index] : typeIndices) { if (index == err->index) { Fatal() << msg.str() << " at type $" << name; } } // No name, just report the index. Fatal() << msg.str() << " at index " << err->index; } types = *result; for (auto& [name, index] : typeIndices) { auto type = types[index]; // A type may appear in the type section more than once, but we canonicalize // types internally, so there will be a single name chosen for that type. Do // so determistically. if (wasm.typeNames.count(type) && wasm.typeNames[type].name.str < name) { continue; } auto& currTypeNames = wasm.typeNames[type]; currTypeNames.name = name; if (type.isStruct()) { currTypeNames.fieldNames = fieldNames[index]; } } } void SExpressionWasmBuilder::preParseFunctionType(Element& s) { IString id = s[0]->str(); if (id != FUNC) { return; } size_t i = 1; Name name, exportName; i = parseFunctionNames(s, name, exportName); if (!name.is()) { // unnamed, use an index name = Name::fromInt(functionCounter); } functionNames.push_back(name); functionCounter++; parseTypeUse(s, i, functionTypes[name]); } size_t SExpressionWasmBuilder::parseFunctionNames(Element& s, Name& name, Name& exportName) { size_t i = 1; while (i < s.size() && i < 3 && s[i]->isStr()) { if (s[i]->quoted()) { // an export name exportName = s[i]->str(); i++; } else if (s[i]->dollared()) { name = s[i]->str(); i++; } else { break; } } if (i < s.size() && s[i]->isList()) { auto& inner = *s[i]; if (elementStartsWith(inner, EXPORT)) { exportName = inner[1]->str(); i++; } } #if 0 if (exportName.is() && !name.is()) { name = exportName; // useful for debugging } #endif return i; } void SExpressionWasmBuilder::parseFunction(Element& s, bool preParseImport) { brokeToAutoBlock = false; Name name, exportName; size_t i = parseFunctionNames(s, name, exportName); bool hasExplicitName = name.is(); if (!preParseImport) { if (!name.is()) { // unnamed, use an index name = Name::fromInt(functionCounter); } functionCounter++; } else { // just preparsing, functionCounter was incremented by preParseFunctionType if (!name.is()) { // unnamed, use an index name = functionNames[functionCounter - 1]; } } if (exportName.is()) { auto ex = make_unique(); ex->name = exportName; ex->value = name; ex->kind = ExternalKind::Function; if (wasm.getExportOrNull(ex->name)) { throw ParseException("duplicate export", s.line, s.col); } wasm.addExport(ex.release()); } // parse import Name importModule, importBase; if (i < s.size() && elementStartsWith(*s[i], IMPORT)) { Element& curr = *s[i]; importModule = curr[1]->str(); importBase = curr[2]->str(); i++; } // parse typeuse: type/param/result HeapType type; std::vector params; i = parseTypeUse(s, i, type, params); // when (import) is inside a (func) element, this is not a function definition // but an import. if (importModule.is()) { if (!importBase.size()) { throw ParseException("module but no base for import", s.line, s.col); } if (!preParseImport) { throw ParseException("!preParseImport in func", s.line, s.col); } auto im = make_unique(); im->setName(name, hasExplicitName); im->module = importModule; im->base = importBase; im->type = type; functionTypes[name] = type; if (wasm.getFunctionOrNull(im->name)) { throw ParseException("duplicate import", s.line, s.col); } wasm.addFunction(std::move(im)); if (currFunction) { throw ParseException("import module inside function dec", s.line, s.col); } nameMapper.clear(); return; } // at this point this not an import but a real function definition. if (preParseImport) { throw ParseException("preParseImport in func", s.line, s.col); } size_t localIndex = params.size(); // local index for params and locals // parse locals std::vector vars; while (i < s.size() && elementStartsWith(*s[i], LOCAL)) { auto newVars = parseParamOrLocal(*s[i++], localIndex); vars.insert(vars.end(), newVars.begin(), newVars.end()); } // make a new function currFunction = std::unique_ptr( Builder(wasm).makeFunction(name, std::move(params), type, std::move(vars))); currFunction->profile = profile; // parse body Block* autoBlock = nullptr; // may need to add a block for the very top level auto ensureAutoBlock = [&]() { if (!autoBlock) { autoBlock = allocator.alloc(); autoBlock->list.push_back(currFunction->body); currFunction->body = autoBlock; } }; while (i < s.size()) { Expression* ex = parseExpression(*s[i++]); if (!currFunction->body) { currFunction->body = ex; } else { ensureAutoBlock(); autoBlock->list.push_back(ex); } } if (brokeToAutoBlock) { ensureAutoBlock(); autoBlock->name = FAKE_RETURN; } if (autoBlock) { autoBlock->finalize(type.getSignature().results); } if (!currFunction->body) { currFunction->body = allocator.alloc(); } if (s.startLoc) { currFunction->prologLocation.insert(getDebugLocation(*s.startLoc)); } if (s.endLoc) { currFunction->epilogLocation.insert(getDebugLocation(*s.endLoc)); } if (wasm.getFunctionOrNull(currFunction->name)) { throw ParseException("duplicate function", s.line, s.col); } wasm.addFunction(currFunction.release()); nameMapper.clear(); } Type SExpressionWasmBuilder::stringToType(const char* str, bool allowError, bool prefix) { if (str[0] == 'i') { if (str[1] == '3' && str[2] == '2' && (prefix || str[3] == 0)) { return Type::i32; } if (str[1] == '6' && str[2] == '4' && (prefix || str[3] == 0)) { return Type::i64; } } if (str[0] == 'f') { if (str[1] == '3' && str[2] == '2' && (prefix || str[3] == 0)) { return Type::f32; } if (str[1] == '6' && str[2] == '4' && (prefix || str[3] == 0)) { return Type::f64; } } if (str[0] == 'v') { if (str[1] == '1' && str[2] == '2' && str[3] == '8' && (prefix || str[4] == 0)) { return Type::v128; } } if (strncmp(str, "funcref", 7) == 0 && (prefix || str[7] == 0)) { return Type::funcref; } if ((strncmp(str, "externref", 9) == 0 && (prefix || str[9] == 0)) || (strncmp(str, "anyref", 6) == 0 && (prefix || str[6] == 0))) { return Type::anyref; } if (strncmp(str, "eqref", 5) == 0 && (prefix || str[5] == 0)) { return Type::eqref; } if (strncmp(str, "i31ref", 6) == 0 && (prefix || str[6] == 0)) { return Type::i31ref; } if (strncmp(str, "dataref", 7) == 0 && (prefix || str[7] == 0)) { return Type::dataref; } if (allowError) { return Type::none; } throw ParseException(std::string("invalid wasm type: ") + str); } HeapType SExpressionWasmBuilder::stringToHeapType(const char* str, bool prefix) { if (str[0] == 'f') { if (str[1] == 'u' && str[2] == 'n' && str[3] == 'c' && (prefix || str[4] == 0)) { return HeapType::func; } } if (str[0] == 'e') { if (str[1] == 'q' && (prefix || str[2] == 0)) { return HeapType::eq; } if (str[1] == 'x' && str[2] == 't' && str[3] == 'e' && str[4] == 'r' && str[5] == 'n' && (prefix || str[6] == 0)) { return HeapType::any; } } if (str[0] == 'a') { if (str[1] == 'n' && str[2] == 'y' && (prefix || str[3] == 0)) { return HeapType::any; } } if (str[0] == 'i') { if (str[1] == '3' && str[2] == '1' && (prefix || str[3] == 0)) { return HeapType::i31; } } if (str[0] == 'd') { if (str[1] == 'a' && str[2] == 't' && str[3] == 'a' && (prefix || str[4] == 0)) { return HeapType::data; } } throw ParseException(std::string("invalid wasm heap type: ") + str); } Type SExpressionWasmBuilder::elementToType(Element& s) { if (s.isStr()) { return stringToType(s.str()); } auto& list = s.list(); auto size = list.size(); if (elementStartsWith(s, REF)) { // It's a reference. It should be in the form // (ref $name) // or // (ref null $name) // and also $name can be the expanded structure of the type and not a name, // so something like (ref (func (result i32))), etc. if (size != 2 && size != 3) { throw ParseException( std::string("invalid reference type size"), s.line, s.col); } if (size == 3 && *list[1] != NULL_) { throw ParseException( std::string("invalid reference type qualifier"), s.line, s.col); } Nullability nullable = NonNullable; size_t i = 1; if (size == 3) { nullable = Nullable; i++; } return Type(parseHeapType(*s[i]), nullable); } if (elementStartsWith(s, RTT)) { // It's an RTT, something like (rtt N $typename) or just (rtt $typename) // if there is no depth. if (s[1]->dollared()) { auto heapType = parseHeapType(*s[1]); return Type(Rtt(heapType)); } else { auto depth = atoi(s[1]->str().c_str()); auto heapType = parseHeapType(*s[2]); return Type(Rtt(depth, heapType)); } } // It's a tuple. std::vector types; for (size_t i = 0; i < s.size(); ++i) { types.push_back(elementToType(*list[i])); } return Type(types); } Type SExpressionWasmBuilder::stringToLaneType(const char* str) { if (strcmp(str, "i8x16") == 0) { return Type::i32; } if (strcmp(str, "i16x8") == 0) { return Type::i32; } if (strcmp(str, "i32x4") == 0) { return Type::i32; } if (strcmp(str, "i64x2") == 0) { return Type::i64; } if (strcmp(str, "f32x4") == 0) { return Type::f32; } if (strcmp(str, "f64x2") == 0) { return Type::f64; } return Type::none; } HeapType SExpressionWasmBuilder::getFunctionType(Name name, Element& s) { auto iter = functionTypes.find(name); if (iter == functionTypes.end()) { throw ParseException( "invalid call target: " + std::string(name.str), s.line, s.col); } return iter->second; } Function::DebugLocation SExpressionWasmBuilder::getDebugLocation(const SourceLocation& loc) { IString file = loc.filename; auto& debugInfoFileNames = wasm.debugInfoFileNames; auto iter = debugInfoFileIndices.find(file); if (iter == debugInfoFileIndices.end()) { Index index = debugInfoFileNames.size(); debugInfoFileNames.push_back(file.c_str()); debugInfoFileIndices[file] = index; } uint32_t fileIndex = debugInfoFileIndices[file]; return {fileIndex, loc.line, loc.column}; } Expression* SExpressionWasmBuilder::parseExpression(Element& s) { Expression* result = makeExpression(s); if (s.startLoc && currFunction) { currFunction->debugLocations[result] = getDebugLocation(*s.startLoc); } return result; } Expression* SExpressionWasmBuilder::makeExpression(Element& s){ #define INSTRUCTION_PARSER #include "gen-s-parser.inc" } Expression* SExpressionWasmBuilder::makeUnreachable() { return allocator.alloc(); } Expression* SExpressionWasmBuilder::makeNop() { return allocator.alloc(); } Expression* SExpressionWasmBuilder::makeBinary(Element& s, BinaryOp op) { auto ret = allocator.alloc(); ret->op = op; ret->left = parseExpression(s[1]); ret->right = parseExpression(s[2]); ret->finalize(); return ret; } Expression* SExpressionWasmBuilder::makeUnary(Element& s, UnaryOp op) { auto ret = allocator.alloc(); ret->op = op; ret->value = parseExpression(s[1]); ret->finalize(); return ret; } Expression* SExpressionWasmBuilder::makeSelect(Element& s) { auto ret = allocator.alloc
(); table->setName(name, hasExplicitName); table->module = module; table->base = base; tableNames.push_back(name); if (j < inner.size() - 1) { auto initElem = inner[j++]; table->initial = getAddress(initElem); checkAddress(table->initial, "excessive table init size", initElem); } if (j < inner.size() - 1) { auto maxElem = inner[j++]; table->max = getAddress(maxElem); checkAddress(table->max, "excessive table max size", maxElem); } else { table->max = Table::kUnlimitedSize; } wasm.addTable(std::move(table)); j++; // funcref // ends with the table element type } else if (kind == ExternalKind::Memory) { wasm.memory.setName(name, hasExplicitName); wasm.memory.module = module; wasm.memory.base = base; if (inner[j]->isList()) { auto& limits = *inner[j]; if (!elementStartsWith(limits, SHARED)) { throw ParseException( "bad memory limit declaration", inner[j]->line, inner[j]->col); } wasm.memory.shared = true; j = parseMemoryLimits(limits, 1); } else { j = parseMemoryLimits(inner, j); } } else if (kind == ExternalKind::Tag) { auto tag = make_unique(); HeapType tagType; j = parseTypeUse(inner, j, tagType); tag->sig = tagType.getSignature(); tag->setName(name, hasExplicitName); tag->module = module; tag->base = base; wasm.addTag(tag.release()); } // If there are more elements, they are invalid if (j < inner.size()) { throw ParseException("invalid element", inner[j]->line, inner[j]->col); } } void SExpressionWasmBuilder::parseGlobal(Element& s, bool preParseImport) { std::unique_ptr global = make_unique(); size_t i = 1; if (s[i]->dollared() && !(s[i]->isStr() && isType(s[i]->str()))) { global->setExplicitName(s[i++]->str()); } else { global->name = Name::fromInt(globalCounter); } globalCounter++; globalNames.push_back(global->name); bool mutable_ = false; Type type = Type::none; bool exported = false; Name importModule, importBase; while (i < s.size() && s[i]->isList()) { auto& inner = *s[i++]; if (elementStartsWith(inner, EXPORT)) { auto ex = make_unique(); ex->name = inner[1]->str(); ex->value = global->name; ex->kind = ExternalKind::Global; if (wasm.getExportOrNull(ex->name)) { throw ParseException("duplicate export", s.line, s.col); } wasm.addExport(ex.release()); exported = true; } else if (elementStartsWith(inner, IMPORT)) { importModule = inner[1]->str(); importBase = inner[2]->str(); } else if (elementStartsWith(inner, MUT)) { mutable_ = true; type = elementToType(*inner[1]); break; } else { type = elementToType(inner); break; } } if (exported && mutable_) { throw ParseException("cannot export a mutable global", s.line, s.col); } if (type == Type::none) { type = stringToType(s[i++]->str()); } if (importModule.is()) { // this is an import, actually if (!importBase.size()) { throw ParseException("module but no base for import", s.line, s.col); } if (!preParseImport) { throw ParseException("!preParseImport in global", s.line, s.col); } auto im = make_unique(); im->name = global->name; im->module = importModule; im->base = importBase; im->type = type; im->mutable_ = mutable_; if (wasm.getGlobalOrNull(im->name)) { throw ParseException("duplicate import", s.line, s.col); } wasm.addGlobal(im.release()); return; } if (preParseImport) { throw ParseException("preParseImport in global", s.line, s.col); } global->type = type; if (i < s.size()) { global->init = parseExpression(s[i++]); } else { throw ParseException("global without init", s.line, s.col); } global->mutable_ = mutable_; if (i != s.size()) { throw ParseException("extra import elements", s.line, s.col); } if (wasm.getGlobalOrNull(global->name)) { throw ParseException("duplicate import", s.line, s.col); } wasm.addGlobal(global.release()); } void SExpressionWasmBuilder::parseTable(Element& s, bool preParseImport) { std::unique_ptr
table = make_unique
(); Index i = 1; if (s[i]->dollared()) { table->setExplicitName(s[i++]->str()); } else { table->name = Name::fromInt(tableCounter++); } tableNames.push_back(table->name); Name importModule, importBase; if (s[i]->isList()) { auto& inner = *s[i]; if (elementStartsWith(inner, EXPORT)) { auto ex = make_unique(); ex->name = inner[1]->str(); ex->value = table->name; ex->kind = ExternalKind::Table; if (wasm.getExportOrNull(ex->name)) { throw ParseException("duplicate export", inner.line, inner.col); } wasm.addExport(ex.release()); i++; } else if (elementStartsWith(inner, IMPORT)) { if (!preParseImport) { throw ParseException("!preParseImport in table", inner.line, inner.col); } table->module = inner[1]->str(); table->base = inner[2]->str(); i++; } else if (!elementStartsWith(inner, REF)) { throw ParseException("invalid table", inner.line, inner.col); } } bool hasExplicitLimit = false; if (s[i]->isStr() && String::isNumber(s[i]->c_str())) { table->initial = atoi(s[i++]->c_str()); hasExplicitLimit = true; } if (s[i]->isStr() && String::isNumber(s[i]->c_str())) { table->max = atoi(s[i++]->c_str()); } table->type = elementToType(*s[i++]); if (!table->type.isRef()) { throw ParseException("Only reference types are valid for tables"); } if (i < s.size() && s[i]->isList()) { if (hasExplicitLimit) { throw ParseException( "Table cannot have both explicit limits and an inline (elem ...)"); } // (table type (elem ..)) parseElem(*s[i], table.get()); auto it = std::find_if(wasm.elementSegments.begin(), wasm.elementSegments.end(), [&](std::unique_ptr& segment) { return segment->table == table->name; }); if (it != wasm.elementSegments.end()) { table->initial = table->max = it->get()->data.size(); } else { table->initial = table->max = 0; } } wasm.addTable(std::move(table)); } // parses an elem segment // elem ::= (elem (table tableidx)? (offset (expr)) reftype vec(item (expr))) // | (elem reftype vec(item (expr))) // | (elem declare reftype vec(item (expr))) // // abbreviation: // (offset (expr)) ≡ (expr) // (item (expr)) ≡ (expr) // ϵ ≡ (table 0) // // funcref vec(ref.func) ≡ func vec(funcidx) // (elem (expr) vec(funcidx)) ≡ (elem (table 0) (offset (expr)) func // vec(funcidx)) // void SExpressionWasmBuilder::parseElem(Element& s, Table* table) { Index i = 1; Name name = Name::fromInt(elemCounter++); bool hasExplicitName = false; bool isPassive = true; bool usesExpressions = false; if (table) { Expression* offset = allocator.alloc()->set(Literal(int32_t(0))); auto segment = std::make_unique(table->name, offset); segment->setName(name, hasExplicitName); parseElemFinish(s, segment, i, s[i]->isList()); return; } if (s[i]->isStr() && s[i]->dollared()) { name = s[i++]->str(); hasExplicitName = true; } if (s[i]->isStr() && s[i]->str() == DECLARE) { // We don't store declared segments in the IR return; } auto segment = std::make_unique(); segment->setName(name, hasExplicitName); if (s[i]->isList() && !elementStartsWith(s[i], REF)) { // Optional (table ) if (elementStartsWith(s[i], TABLE)) { auto& inner = *s[i++]; segment->table = getTableName(*inner[1]); } // Offset expression (offset ()) | () auto& inner = *s[i++]; if (elementStartsWith(inner, OFFSET)) { if (inner.size() > 2) { throw ParseException( "Invalid offset for an element segment.", s.line, s.col); } segment->offset = parseExpression(inner[1]); } else { segment->offset = parseExpression(inner); } isPassive = false; } if (i < s.size()) { if (s[i]->isStr() && s[i]->dollared()) { usesExpressions = false; } else if (s[i]->isStr() && s[i]->str() == FUNC) { usesExpressions = false; i += 1; } else { segment->type = elementToType(*s[i]); usesExpressions = true; i += 1; if (!segment->type.isFunction()) { throw ParseException( "Invalid type for an element segment.", s.line, s.col); } } } if (!isPassive && segment->table.isNull()) { if (wasm.tables.empty()) { throw ParseException("active element without table", s.line, s.col); } table = wasm.tables.front().get(); segment->table = table->name; } // We may be post-MVP also due to type reasons or otherwise, as detected by // the utility function for Binaryen IR. usesExpressions = usesExpressions || TableUtils::usesExpressions(segment.get(), &wasm); parseElemFinish(s, segment, i, usesExpressions); } ElementSegment* SExpressionWasmBuilder::parseElemFinish( Element& s, std::unique_ptr& segment, Index i, bool usesExpressions) { for (; i < s.size(); i++) { if (!s[i]->isList()) { // An MVP-style declaration: just a function name. auto func = getFunctionName(*s[i]); segment->data.push_back( Builder(wasm).makeRefFunc(func, functionTypes[func])); continue; } if (!usesExpressions) { throw ParseException("expected an MVP-style $funcname in elem."); } auto& inner = *s[i]; if (elementStartsWith(inner, ITEM)) { if (inner[1]->isList()) { // (item (ref.func $f)) segment->data.push_back(parseExpression(inner[1])); } else { // (item ref.func $f) inner.list().removeAt(0); segment->data.push_back(parseExpression(inner)); } } else { segment->data.push_back(parseExpression(inner)); } } return wasm.addElementSegment(std::move(segment)); } HeapType SExpressionWasmBuilder::parseHeapType(Element& s) { if (s.isStr()) { // It's a string. if (s.dollared()) { auto it = typeIndices.find(s.str().str); if (it == typeIndices.end()) { throw ParseException("unknown dollared function type", s.line, s.col); } return types[it->second]; } else { // It may be a numerical index, or it may be a built-in type name like // "i31". auto* str = s.str().c_str(); if (String::isNumber(str)) { size_t offset = atoi(str); if (offset >= types.size()) { throw ParseException("unknown indexed function type", s.line, s.col); } return types[offset]; } return stringToHeapType(str, /* prefix = */ false); } } throw ParseException("invalid heap type", s.line, s.col); } void SExpressionWasmBuilder::parseTag(Element& s, bool preParseImport) { auto tag = make_unique(); size_t i = 1; // Parse name if (s[i]->isStr() && s[i]->dollared()) { auto& inner = *s[i++]; tag->setExplicitName(inner.str()); if (wasm.getTagOrNull(tag->name)) { throw ParseException("duplicate tag", inner.line, inner.col); } } else { tag->name = Name::fromInt(tagCounter); assert(!wasm.getTagOrNull(tag->name)); } tagCounter++; tagNames.push_back(tag->name); // Parse import, if any if (i < s.size() && elementStartsWith(*s[i], IMPORT)) { assert(preParseImport && "import element in non-preParseImport mode"); auto& importElem = *s[i++]; if (importElem.size() != 3) { throw ParseException("invalid import", importElem.line, importElem.col); } if (!importElem[1]->isStr() || importElem[1]->dollared()) { throw ParseException( "invalid import module name", importElem[1]->line, importElem[1]->col); } if (!importElem[2]->isStr() || importElem[2]->dollared()) { throw ParseException( "invalid import base name", importElem[2]->line, importElem[2]->col); } tag->module = importElem[1]->str(); tag->base = importElem[2]->str(); } // Parse export, if any if (i < s.size() && elementStartsWith(*s[i], EXPORT)) { auto& exportElem = *s[i++]; if (tag->module.is()) { throw ParseException("import and export cannot be specified together", exportElem.line, exportElem.col); } if (exportElem.size() != 2) { throw ParseException("invalid export", exportElem.line, exportElem.col); } if (!exportElem[1]->isStr() || exportElem[1]->dollared()) { throw ParseException( "invalid export name", exportElem[1]->line, exportElem[1]->col); } auto ex = make_unique(); ex->name = exportElem[1]->str(); if (wasm.getExportOrNull(ex->name)) { throw ParseException( "duplicate export", exportElem[1]->line, exportElem[1]->col); } ex->value = tag->name; ex->kind = ExternalKind::Tag; } // Parse typeuse HeapType tagType; i = parseTypeUse(s, i, tagType); tag->sig = tagType.getSignature(); // If there are more elements, they are invalid if (i < s.size()) { throw ParseException("invalid element", s[i]->line, s[i]->col); } wasm.addTag(tag.release()); } void SExpressionWasmBuilder::validateHeapTypeUsingChild(Expression* child, HeapType heapType, Element& s) { if (child->type == Type::unreachable) { return; } if ((!child->type.isRef() && !child->type.isRtt()) || !HeapType::isSubType(child->type.getHeapType(), heapType)) { throw ParseException("bad heap type: expected " + heapType.toString() + " but found " + child->type.toString(), s.line, s.col); } } } // namespace wasm binaryen-version_108/src/wasm/wasm-stack.cpp000066400000000000000000002326251423707623100212730ustar00rootroot00000000000000/* * Copyright 2019 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "wasm-stack.h" #include "ir/find_all.h" #include "wasm-debug.h" namespace wasm { static Name IMPOSSIBLE_CONTINUE("impossible-continue"); void BinaryInstWriter::emitResultType(Type type) { if (type == Type::unreachable) { parent.writeType(Type::none); } else if (type.isTuple()) { o << S32LEB(parent.getTypeIndex(Signature(Type::none, type))); } else { parent.writeType(type); } } void BinaryInstWriter::visitBlock(Block* curr) { breakStack.push_back(curr->name); o << int8_t(BinaryConsts::Block); emitResultType(curr->type); } void BinaryInstWriter::visitIf(If* curr) { // the binary format requires this; we have a block if we need one // TODO: optimize this in Stack IR (if child is a block, we may break to this // instead) breakStack.emplace_back(IMPOSSIBLE_CONTINUE); o << int8_t(BinaryConsts::If); emitResultType(curr->type); } void BinaryInstWriter::emitIfElse(If* curr) { if (func && !sourceMap) { parent.writeExtraDebugLocation(curr, func, BinaryLocations::Else); } o << int8_t(BinaryConsts::Else); } void BinaryInstWriter::visitLoop(Loop* curr) { breakStack.push_back(curr->name); o << int8_t(BinaryConsts::Loop); emitResultType(curr->type); } void BinaryInstWriter::visitBreak(Break* curr) { o << int8_t(curr->condition ? BinaryConsts::BrIf : BinaryConsts::Br) << U32LEB(getBreakIndex(curr->name)); } void BinaryInstWriter::visitSwitch(Switch* curr) { o << int8_t(BinaryConsts::BrTable) << U32LEB(curr->targets.size()); for (auto target : curr->targets) { o << U32LEB(getBreakIndex(target)); } o << U32LEB(getBreakIndex(curr->default_)); } void BinaryInstWriter::visitCall(Call* curr) { int8_t op = curr->isReturn ? BinaryConsts::RetCallFunction : BinaryConsts::CallFunction; o << op << U32LEB(parent.getFunctionIndex(curr->target)); } void BinaryInstWriter::visitCallIndirect(CallIndirect* curr) { Index tableIdx = parent.getTableIndex(curr->table); int8_t op = curr->isReturn ? BinaryConsts::RetCallIndirect : BinaryConsts::CallIndirect; o << op << U32LEB(parent.getTypeIndex(curr->heapType)) << U32LEB(tableIdx); } void BinaryInstWriter::visitLocalGet(LocalGet* curr) { size_t numValues = func->getLocalType(curr->index).size(); for (Index i = 0; i < numValues; ++i) { o << int8_t(BinaryConsts::LocalGet) << U32LEB(mappedLocals[std::make_pair(curr->index, i)]); } } void BinaryInstWriter::visitLocalSet(LocalSet* curr) { size_t numValues = func->getLocalType(curr->index).size(); for (Index i = numValues - 1; i >= 1; --i) { o << int8_t(BinaryConsts::LocalSet) << U32LEB(mappedLocals[std::make_pair(curr->index, i)]); } if (!curr->isTee()) { o << int8_t(BinaryConsts::LocalSet) << U32LEB(mappedLocals[std::make_pair(curr->index, 0)]); } else { o << int8_t(BinaryConsts::LocalTee) << U32LEB(mappedLocals[std::make_pair(curr->index, 0)]); for (Index i = 1; i < numValues; ++i) { o << int8_t(BinaryConsts::LocalGet) << U32LEB(mappedLocals[std::make_pair(curr->index, i)]); } } } void BinaryInstWriter::visitGlobalGet(GlobalGet* curr) { // Emit a global.get for each element if this is a tuple global Index index = parent.getGlobalIndex(curr->name); size_t numValues = curr->type.size(); for (Index i = 0; i < numValues; ++i) { o << int8_t(BinaryConsts::GlobalGet) << U32LEB(index + i); } } void BinaryInstWriter::visitGlobalSet(GlobalSet* curr) { // Emit a global.set for each element if this is a tuple global Index index = parent.getGlobalIndex(curr->name); size_t numValues = parent.getModule()->getGlobal(curr->name)->type.size(); for (int i = numValues - 1; i >= 0; --i) { o << int8_t(BinaryConsts::GlobalSet) << U32LEB(index + i); } } void BinaryInstWriter::visitLoad(Load* curr) { if (!curr->isAtomic) { switch (curr->type.getBasic()) { case Type::i32: { switch (curr->bytes) { case 1: o << int8_t(curr->signed_ ? BinaryConsts::I32LoadMem8S : BinaryConsts::I32LoadMem8U); break; case 2: o << int8_t(curr->signed_ ? BinaryConsts::I32LoadMem16S : BinaryConsts::I32LoadMem16U); break; case 4: o << int8_t(BinaryConsts::I32LoadMem); break; default: abort(); } break; } case Type::i64: { switch (curr->bytes) { case 1: o << int8_t(curr->signed_ ? BinaryConsts::I64LoadMem8S : BinaryConsts::I64LoadMem8U); break; case 2: o << int8_t(curr->signed_ ? BinaryConsts::I64LoadMem16S : BinaryConsts::I64LoadMem16U); break; case 4: o << int8_t(curr->signed_ ? BinaryConsts::I64LoadMem32S : BinaryConsts::I64LoadMem32U); break; case 8: o << int8_t(BinaryConsts::I64LoadMem); break; default: abort(); } break; } case Type::f32: o << int8_t(BinaryConsts::F32LoadMem); break; case Type::f64: o << int8_t(BinaryConsts::F64LoadMem); break; case Type::v128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Load); break; case Type::unreachable: // the pointer is unreachable, so we are never reached; just don't emit // a load return; case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: WASM_UNREACHABLE("unexpected type"); } } else { o << int8_t(BinaryConsts::AtomicPrefix); switch (curr->type.getBasic()) { case Type::i32: { switch (curr->bytes) { case 1: o << int8_t(BinaryConsts::I32AtomicLoad8U); break; case 2: o << int8_t(BinaryConsts::I32AtomicLoad16U); break; case 4: o << int8_t(BinaryConsts::I32AtomicLoad); break; default: WASM_UNREACHABLE("invalid load size"); } break; } case Type::i64: { switch (curr->bytes) { case 1: o << int8_t(BinaryConsts::I64AtomicLoad8U); break; case 2: o << int8_t(BinaryConsts::I64AtomicLoad16U); break; case 4: o << int8_t(BinaryConsts::I64AtomicLoad32U); break; case 8: o << int8_t(BinaryConsts::I64AtomicLoad); break; default: WASM_UNREACHABLE("invalid load size"); } break; } case Type::unreachable: return; default: WASM_UNREACHABLE("unexpected type"); } } emitMemoryAccess(curr->align, curr->bytes, curr->offset); } void BinaryInstWriter::visitStore(Store* curr) { if (!curr->isAtomic) { switch (curr->valueType.getBasic()) { case Type::i32: { switch (curr->bytes) { case 1: o << int8_t(BinaryConsts::I32StoreMem8); break; case 2: o << int8_t(BinaryConsts::I32StoreMem16); break; case 4: o << int8_t(BinaryConsts::I32StoreMem); break; default: abort(); } break; } case Type::i64: { switch (curr->bytes) { case 1: o << int8_t(BinaryConsts::I64StoreMem8); break; case 2: o << int8_t(BinaryConsts::I64StoreMem16); break; case 4: o << int8_t(BinaryConsts::I64StoreMem32); break; case 8: o << int8_t(BinaryConsts::I64StoreMem); break; default: abort(); } break; } case Type::f32: o << int8_t(BinaryConsts::F32StoreMem); break; case Type::f64: o << int8_t(BinaryConsts::F64StoreMem); break; case Type::v128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Store); break; case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } } else { o << int8_t(BinaryConsts::AtomicPrefix); switch (curr->valueType.getBasic()) { case Type::i32: { switch (curr->bytes) { case 1: o << int8_t(BinaryConsts::I32AtomicStore8); break; case 2: o << int8_t(BinaryConsts::I32AtomicStore16); break; case 4: o << int8_t(BinaryConsts::I32AtomicStore); break; default: WASM_UNREACHABLE("invalid store size"); } break; } case Type::i64: { switch (curr->bytes) { case 1: o << int8_t(BinaryConsts::I64AtomicStore8); break; case 2: o << int8_t(BinaryConsts::I64AtomicStore16); break; case 4: o << int8_t(BinaryConsts::I64AtomicStore32); break; case 8: o << int8_t(BinaryConsts::I64AtomicStore); break; default: WASM_UNREACHABLE("invalid store size"); } break; } default: WASM_UNREACHABLE("unexpected type"); } } emitMemoryAccess(curr->align, curr->bytes, curr->offset); } void BinaryInstWriter::visitAtomicRMW(AtomicRMW* curr) { o << int8_t(BinaryConsts::AtomicPrefix); #define CASE_FOR_OP(Op) \ case RMW##Op: \ switch (curr->type.getBasic()) { \ case Type::i32: \ switch (curr->bytes) { \ case 1: \ o << int8_t(BinaryConsts::I32AtomicRMW##Op##8U); \ break; \ case 2: \ o << int8_t(BinaryConsts::I32AtomicRMW##Op##16U); \ break; \ case 4: \ o << int8_t(BinaryConsts::I32AtomicRMW##Op); \ break; \ default: \ WASM_UNREACHABLE("invalid rmw size"); \ } \ break; \ case Type::i64: \ switch (curr->bytes) { \ case 1: \ o << int8_t(BinaryConsts::I64AtomicRMW##Op##8U); \ break; \ case 2: \ o << int8_t(BinaryConsts::I64AtomicRMW##Op##16U); \ break; \ case 4: \ o << int8_t(BinaryConsts::I64AtomicRMW##Op##32U); \ break; \ case 8: \ o << int8_t(BinaryConsts::I64AtomicRMW##Op); \ break; \ default: \ WASM_UNREACHABLE("invalid rmw size"); \ } \ break; \ default: \ WASM_UNREACHABLE("unexpected type"); \ } \ break switch (curr->op) { CASE_FOR_OP(Add); CASE_FOR_OP(Sub); CASE_FOR_OP(And); CASE_FOR_OP(Or); CASE_FOR_OP(Xor); CASE_FOR_OP(Xchg); default: WASM_UNREACHABLE("unexpected op"); } #undef CASE_FOR_OP emitMemoryAccess(curr->bytes, curr->bytes, curr->offset); } void BinaryInstWriter::visitAtomicCmpxchg(AtomicCmpxchg* curr) { o << int8_t(BinaryConsts::AtomicPrefix); switch (curr->type.getBasic()) { case Type::i32: switch (curr->bytes) { case 1: o << int8_t(BinaryConsts::I32AtomicCmpxchg8U); break; case 2: o << int8_t(BinaryConsts::I32AtomicCmpxchg16U); break; case 4: o << int8_t(BinaryConsts::I32AtomicCmpxchg); break; default: WASM_UNREACHABLE("invalid size"); } break; case Type::i64: switch (curr->bytes) { case 1: o << int8_t(BinaryConsts::I64AtomicCmpxchg8U); break; case 2: o << int8_t(BinaryConsts::I64AtomicCmpxchg16U); break; case 4: o << int8_t(BinaryConsts::I64AtomicCmpxchg32U); break; case 8: o << int8_t(BinaryConsts::I64AtomicCmpxchg); break; default: WASM_UNREACHABLE("invalid size"); } break; default: WASM_UNREACHABLE("unexpected type"); } emitMemoryAccess(curr->bytes, curr->bytes, curr->offset); } void BinaryInstWriter::visitAtomicWait(AtomicWait* curr) { o << int8_t(BinaryConsts::AtomicPrefix); switch (curr->expectedType.getBasic()) { case Type::i32: { o << int8_t(BinaryConsts::I32AtomicWait); emitMemoryAccess(4, 4, curr->offset); break; } case Type::i64: { o << int8_t(BinaryConsts::I64AtomicWait); emitMemoryAccess(8, 8, curr->offset); break; } default: WASM_UNREACHABLE("unexpected type"); } } void BinaryInstWriter::visitAtomicNotify(AtomicNotify* curr) { o << int8_t(BinaryConsts::AtomicPrefix) << int8_t(BinaryConsts::AtomicNotify); emitMemoryAccess(4, 4, curr->offset); } void BinaryInstWriter::visitAtomicFence(AtomicFence* curr) { o << int8_t(BinaryConsts::AtomicPrefix) << int8_t(BinaryConsts::AtomicFence) << int8_t(curr->order); } void BinaryInstWriter::visitSIMDExtract(SIMDExtract* curr) { o << int8_t(BinaryConsts::SIMDPrefix); switch (curr->op) { case ExtractLaneSVecI8x16: o << U32LEB(BinaryConsts::I8x16ExtractLaneS); break; case ExtractLaneUVecI8x16: o << U32LEB(BinaryConsts::I8x16ExtractLaneU); break; case ExtractLaneSVecI16x8: o << U32LEB(BinaryConsts::I16x8ExtractLaneS); break; case ExtractLaneUVecI16x8: o << U32LEB(BinaryConsts::I16x8ExtractLaneU); break; case ExtractLaneVecI32x4: o << U32LEB(BinaryConsts::I32x4ExtractLane); break; case ExtractLaneVecI64x2: o << U32LEB(BinaryConsts::I64x2ExtractLane); break; case ExtractLaneVecF32x4: o << U32LEB(BinaryConsts::F32x4ExtractLane); break; case ExtractLaneVecF64x2: o << U32LEB(BinaryConsts::F64x2ExtractLane); break; } o << uint8_t(curr->index); } void BinaryInstWriter::visitSIMDReplace(SIMDReplace* curr) { o << int8_t(BinaryConsts::SIMDPrefix); switch (curr->op) { case ReplaceLaneVecI8x16: o << U32LEB(BinaryConsts::I8x16ReplaceLane); break; case ReplaceLaneVecI16x8: o << U32LEB(BinaryConsts::I16x8ReplaceLane); break; case ReplaceLaneVecI32x4: o << U32LEB(BinaryConsts::I32x4ReplaceLane); break; case ReplaceLaneVecI64x2: o << U32LEB(BinaryConsts::I64x2ReplaceLane); break; case ReplaceLaneVecF32x4: o << U32LEB(BinaryConsts::F32x4ReplaceLane); break; case ReplaceLaneVecF64x2: o << U32LEB(BinaryConsts::F64x2ReplaceLane); break; } assert(curr->index < 16); o << uint8_t(curr->index); } void BinaryInstWriter::visitSIMDShuffle(SIMDShuffle* curr) { o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Shuffle); for (uint8_t m : curr->mask) { o << m; } } void BinaryInstWriter::visitSIMDTernary(SIMDTernary* curr) { o << int8_t(BinaryConsts::SIMDPrefix); switch (curr->op) { case Bitselect: o << U32LEB(BinaryConsts::V128Bitselect); break; case LaneselectI8x16: o << U32LEB(BinaryConsts::I8x16Laneselect); break; case LaneselectI16x8: o << U32LEB(BinaryConsts::I16x8Laneselect); break; case LaneselectI32x4: o << U32LEB(BinaryConsts::I32x4Laneselect); break; case LaneselectI64x2: o << U32LEB(BinaryConsts::I64x2Laneselect); break; case RelaxedFmaVecF32x4: o << U32LEB(BinaryConsts::F32x4RelaxedFma); break; case RelaxedFmsVecF32x4: o << U32LEB(BinaryConsts::F32x4RelaxedFms); break; case RelaxedFmaVecF64x2: o << U32LEB(BinaryConsts::F64x2RelaxedFma); break; case RelaxedFmsVecF64x2: o << U32LEB(BinaryConsts::F64x2RelaxedFms); break; case DotI8x16I7x16AddSToVecI32x4: o << U32LEB(BinaryConsts::I32x4DotI8x16I7x16AddS); break; case DotI8x16I7x16AddUToVecI32x4: o << U32LEB(BinaryConsts::I32x4DotI8x16I7x16AddU); break; } } void BinaryInstWriter::visitSIMDShift(SIMDShift* curr) { o << int8_t(BinaryConsts::SIMDPrefix); switch (curr->op) { case ShlVecI8x16: o << U32LEB(BinaryConsts::I8x16Shl); break; case ShrSVecI8x16: o << U32LEB(BinaryConsts::I8x16ShrS); break; case ShrUVecI8x16: o << U32LEB(BinaryConsts::I8x16ShrU); break; case ShlVecI16x8: o << U32LEB(BinaryConsts::I16x8Shl); break; case ShrSVecI16x8: o << U32LEB(BinaryConsts::I16x8ShrS); break; case ShrUVecI16x8: o << U32LEB(BinaryConsts::I16x8ShrU); break; case ShlVecI32x4: o << U32LEB(BinaryConsts::I32x4Shl); break; case ShrSVecI32x4: o << U32LEB(BinaryConsts::I32x4ShrS); break; case ShrUVecI32x4: o << U32LEB(BinaryConsts::I32x4ShrU); break; case ShlVecI64x2: o << U32LEB(BinaryConsts::I64x2Shl); break; case ShrSVecI64x2: o << U32LEB(BinaryConsts::I64x2ShrS); break; case ShrUVecI64x2: o << U32LEB(BinaryConsts::I64x2ShrU); break; } } void BinaryInstWriter::visitSIMDLoad(SIMDLoad* curr) { o << int8_t(BinaryConsts::SIMDPrefix); switch (curr->op) { case Load8SplatVec128: o << U32LEB(BinaryConsts::V128Load8Splat); break; case Load16SplatVec128: o << U32LEB(BinaryConsts::V128Load16Splat); break; case Load32SplatVec128: o << U32LEB(BinaryConsts::V128Load32Splat); break; case Load64SplatVec128: o << U32LEB(BinaryConsts::V128Load64Splat); break; case Load8x8SVec128: o << U32LEB(BinaryConsts::V128Load8x8S); break; case Load8x8UVec128: o << U32LEB(BinaryConsts::V128Load8x8U); break; case Load16x4SVec128: o << U32LEB(BinaryConsts::V128Load16x4S); break; case Load16x4UVec128: o << U32LEB(BinaryConsts::V128Load16x4U); break; case Load32x2SVec128: o << U32LEB(BinaryConsts::V128Load32x2S); break; case Load32x2UVec128: o << U32LEB(BinaryConsts::V128Load32x2U); break; case Load32ZeroVec128: o << U32LEB(BinaryConsts::V128Load32Zero); break; case Load64ZeroVec128: o << U32LEB(BinaryConsts::V128Load64Zero); break; } assert(curr->align); emitMemoryAccess(curr->align, /*(unused) bytes=*/0, curr->offset); } void BinaryInstWriter::visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { o << int8_t(BinaryConsts::SIMDPrefix); switch (curr->op) { case Load8LaneVec128: o << U32LEB(BinaryConsts::V128Load8Lane); break; case Load16LaneVec128: o << U32LEB(BinaryConsts::V128Load16Lane); break; case Load32LaneVec128: o << U32LEB(BinaryConsts::V128Load32Lane); break; case Load64LaneVec128: o << U32LEB(BinaryConsts::V128Load64Lane); break; case Store8LaneVec128: o << U32LEB(BinaryConsts::V128Store8Lane); break; case Store16LaneVec128: o << U32LEB(BinaryConsts::V128Store16Lane); break; case Store32LaneVec128: o << U32LEB(BinaryConsts::V128Store32Lane); break; case Store64LaneVec128: o << U32LEB(BinaryConsts::V128Store64Lane); break; } assert(curr->align); emitMemoryAccess(curr->align, /*(unused) bytes=*/0, curr->offset); o << curr->index; } void BinaryInstWriter::visitMemoryInit(MemoryInit* curr) { o << int8_t(BinaryConsts::MiscPrefix); o << U32LEB(BinaryConsts::MemoryInit); o << U32LEB(curr->segment) << int8_t(0); } void BinaryInstWriter::visitDataDrop(DataDrop* curr) { o << int8_t(BinaryConsts::MiscPrefix); o << U32LEB(BinaryConsts::DataDrop); o << U32LEB(curr->segment); } void BinaryInstWriter::visitMemoryCopy(MemoryCopy* curr) { o << int8_t(BinaryConsts::MiscPrefix); o << U32LEB(BinaryConsts::MemoryCopy); o << int8_t(0) << int8_t(0); } void BinaryInstWriter::visitMemoryFill(MemoryFill* curr) { o << int8_t(BinaryConsts::MiscPrefix); o << U32LEB(BinaryConsts::MemoryFill); o << int8_t(0); } void BinaryInstWriter::visitConst(Const* curr) { switch (curr->type.getBasic()) { case Type::i32: { o << int8_t(BinaryConsts::I32Const) << S32LEB(curr->value.geti32()); break; } case Type::i64: { o << int8_t(BinaryConsts::I64Const) << S64LEB(curr->value.geti64()); break; } case Type::f32: { o << int8_t(BinaryConsts::F32Const) << curr->value.reinterpreti32(); break; } case Type::f64: { o << int8_t(BinaryConsts::F64Const) << curr->value.reinterpreti64(); break; } case Type::v128: { o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Const); std::array v = curr->value.getv128(); for (size_t i = 0; i < 16; ++i) { o << uint8_t(v[i]); } break; } case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); } } void BinaryInstWriter::visitUnary(Unary* curr) { switch (curr->op) { case ClzInt32: o << int8_t(BinaryConsts::I32Clz); break; case CtzInt32: o << int8_t(BinaryConsts::I32Ctz); break; case PopcntInt32: o << int8_t(BinaryConsts::I32Popcnt); break; case EqZInt32: o << int8_t(BinaryConsts::I32EqZ); break; case ClzInt64: o << int8_t(BinaryConsts::I64Clz); break; case CtzInt64: o << int8_t(BinaryConsts::I64Ctz); break; case PopcntInt64: o << int8_t(BinaryConsts::I64Popcnt); break; case EqZInt64: o << int8_t(BinaryConsts::I64EqZ); break; case NegFloat32: o << int8_t(BinaryConsts::F32Neg); break; case AbsFloat32: o << int8_t(BinaryConsts::F32Abs); break; case CeilFloat32: o << int8_t(BinaryConsts::F32Ceil); break; case FloorFloat32: o << int8_t(BinaryConsts::F32Floor); break; case TruncFloat32: o << int8_t(BinaryConsts::F32Trunc); break; case NearestFloat32: o << int8_t(BinaryConsts::F32NearestInt); break; case SqrtFloat32: o << int8_t(BinaryConsts::F32Sqrt); break; case NegFloat64: o << int8_t(BinaryConsts::F64Neg); break; case AbsFloat64: o << int8_t(BinaryConsts::F64Abs); break; case CeilFloat64: o << int8_t(BinaryConsts::F64Ceil); break; case FloorFloat64: o << int8_t(BinaryConsts::F64Floor); break; case TruncFloat64: o << int8_t(BinaryConsts::F64Trunc); break; case NearestFloat64: o << int8_t(BinaryConsts::F64NearestInt); break; case SqrtFloat64: o << int8_t(BinaryConsts::F64Sqrt); break; case ExtendSInt32: o << int8_t(BinaryConsts::I64SExtendI32); break; case ExtendUInt32: o << int8_t(BinaryConsts::I64UExtendI32); break; case WrapInt64: o << int8_t(BinaryConsts::I32WrapI64); break; case TruncUFloat32ToInt32: o << int8_t(BinaryConsts::I32UTruncF32); break; case TruncUFloat32ToInt64: o << int8_t(BinaryConsts::I64UTruncF32); break; case TruncSFloat32ToInt32: o << int8_t(BinaryConsts::I32STruncF32); break; case TruncSFloat32ToInt64: o << int8_t(BinaryConsts::I64STruncF32); break; case TruncUFloat64ToInt32: o << int8_t(BinaryConsts::I32UTruncF64); break; case TruncUFloat64ToInt64: o << int8_t(BinaryConsts::I64UTruncF64); break; case TruncSFloat64ToInt32: o << int8_t(BinaryConsts::I32STruncF64); break; case TruncSFloat64ToInt64: o << int8_t(BinaryConsts::I64STruncF64); break; case ConvertUInt32ToFloat32: o << int8_t(BinaryConsts::F32UConvertI32); break; case ConvertUInt32ToFloat64: o << int8_t(BinaryConsts::F64UConvertI32); break; case ConvertSInt32ToFloat32: o << int8_t(BinaryConsts::F32SConvertI32); break; case ConvertSInt32ToFloat64: o << int8_t(BinaryConsts::F64SConvertI32); break; case ConvertUInt64ToFloat32: o << int8_t(BinaryConsts::F32UConvertI64); break; case ConvertUInt64ToFloat64: o << int8_t(BinaryConsts::F64UConvertI64); break; case ConvertSInt64ToFloat32: o << int8_t(BinaryConsts::F32SConvertI64); break; case ConvertSInt64ToFloat64: o << int8_t(BinaryConsts::F64SConvertI64); break; case DemoteFloat64: o << int8_t(BinaryConsts::F32DemoteI64); break; case PromoteFloat32: o << int8_t(BinaryConsts::F64PromoteF32); break; case ReinterpretFloat32: o << int8_t(BinaryConsts::I32ReinterpretF32); break; case ReinterpretFloat64: o << int8_t(BinaryConsts::I64ReinterpretF64); break; case ReinterpretInt32: o << int8_t(BinaryConsts::F32ReinterpretI32); break; case ReinterpretInt64: o << int8_t(BinaryConsts::F64ReinterpretI64); break; case ExtendS8Int32: o << int8_t(BinaryConsts::I32ExtendS8); break; case ExtendS16Int32: o << int8_t(BinaryConsts::I32ExtendS16); break; case ExtendS8Int64: o << int8_t(BinaryConsts::I64ExtendS8); break; case ExtendS16Int64: o << int8_t(BinaryConsts::I64ExtendS16); break; case ExtendS32Int64: o << int8_t(BinaryConsts::I64ExtendS32); break; case TruncSatSFloat32ToInt32: o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::I32STruncSatF32); break; case TruncSatUFloat32ToInt32: o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::I32UTruncSatF32); break; case TruncSatSFloat64ToInt32: o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::I32STruncSatF64); break; case TruncSatUFloat64ToInt32: o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::I32UTruncSatF64); break; case TruncSatSFloat32ToInt64: o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::I64STruncSatF32); break; case TruncSatUFloat32ToInt64: o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::I64UTruncSatF32); break; case TruncSatSFloat64ToInt64: o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::I64STruncSatF64); break; case TruncSatUFloat64ToInt64: o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::I64UTruncSatF64); break; case SplatVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Splat); break; case SplatVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Splat); break; case SplatVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Splat); break; case SplatVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Splat); break; case SplatVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Splat); break; case SplatVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Splat); break; case NotVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Not); break; case AnyTrueVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128AnyTrue); break; case AbsVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Abs); break; case NegVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Neg); break; case AllTrueVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16AllTrue); break; case BitmaskVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Bitmask); break; case PopcntVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Popcnt); break; case AbsVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Abs); break; case NegVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Neg); break; case AllTrueVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8AllTrue); break; case BitmaskVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Bitmask); break; case AbsVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Abs); break; case NegVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Neg); break; case AllTrueVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4AllTrue); break; case BitmaskVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Bitmask); break; case AbsVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Abs); break; case NegVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Neg); break; case AllTrueVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2AllTrue); break; case BitmaskVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Bitmask); break; case AbsVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Abs); break; case NegVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Neg); break; case SqrtVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Sqrt); break; case CeilVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Ceil); break; case FloorVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Floor); break; case TruncVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Trunc); break; case NearestVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Nearest); break; case AbsVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Abs); break; case NegVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Neg); break; case SqrtVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Sqrt); break; case CeilVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Ceil); break; case FloorVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Floor); break; case TruncVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Trunc); break; case NearestVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Nearest); break; case ExtAddPairwiseSVecI8x16ToI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtaddPairwiseI8x16S); break; case ExtAddPairwiseUVecI8x16ToI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtaddPairwiseI8x16U); break; case ExtAddPairwiseSVecI16x8ToI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtaddPairwiseI16x8S); break; case ExtAddPairwiseUVecI16x8ToI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtaddPairwiseI16x8U); break; case TruncSatSVecF32x4ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4TruncSatF32x4S); break; case TruncSatUVecF32x4ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4TruncSatF32x4U); break; case ConvertSVecI32x4ToVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4ConvertI32x4S); break; case ConvertUVecI32x4ToVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4ConvertI32x4U); break; case ExtendLowSVecI8x16ToVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtendLowI8x16S); break; case ExtendHighSVecI8x16ToVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtendHighI8x16S); break; case ExtendLowUVecI8x16ToVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtendLowI8x16U); break; case ExtendHighUVecI8x16ToVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtendHighI8x16U); break; case ExtendLowSVecI16x8ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtendLowI16x8S); break; case ExtendHighSVecI16x8ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtendHighI16x8S); break; case ExtendLowUVecI16x8ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtendLowI16x8U); break; case ExtendHighUVecI16x8ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtendHighI16x8U); break; case ExtendLowSVecI32x4ToVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2ExtendLowI32x4S); break; case ExtendHighSVecI32x4ToVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2ExtendHighI32x4S); break; case ExtendLowUVecI32x4ToVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2ExtendLowI32x4U); break; case ExtendHighUVecI32x4ToVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2ExtendHighI32x4U); break; case ConvertLowSVecI32x4ToVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2ConvertLowI32x4S); break; case ConvertLowUVecI32x4ToVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2ConvertLowI32x4U); break; case TruncSatZeroSVecF64x2ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4TruncSatF64x2SZero); break; case TruncSatZeroUVecF64x2ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4TruncSatF64x2UZero); break; case DemoteZeroVecF64x2ToVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4DemoteF64x2Zero); break; case PromoteLowVecF32x4ToVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2PromoteLowF32x4); break; case RelaxedTruncSVecF32x4ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4RelaxedTruncF32x4S); break; case RelaxedTruncUVecF32x4ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4RelaxedTruncF32x4U); break; case RelaxedTruncZeroSVecF64x2ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4RelaxedTruncF64x2SZero); break; case RelaxedTruncZeroUVecF64x2ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4RelaxedTruncF64x2UZero); break; case InvalidUnary: WASM_UNREACHABLE("invalid unary op"); } } void BinaryInstWriter::visitBinary(Binary* curr) { switch (curr->op) { case AddInt32: o << int8_t(BinaryConsts::I32Add); break; case SubInt32: o << int8_t(BinaryConsts::I32Sub); break; case MulInt32: o << int8_t(BinaryConsts::I32Mul); break; case DivSInt32: o << int8_t(BinaryConsts::I32DivS); break; case DivUInt32: o << int8_t(BinaryConsts::I32DivU); break; case RemSInt32: o << int8_t(BinaryConsts::I32RemS); break; case RemUInt32: o << int8_t(BinaryConsts::I32RemU); break; case AndInt32: o << int8_t(BinaryConsts::I32And); break; case OrInt32: o << int8_t(BinaryConsts::I32Or); break; case XorInt32: o << int8_t(BinaryConsts::I32Xor); break; case ShlInt32: o << int8_t(BinaryConsts::I32Shl); break; case ShrUInt32: o << int8_t(BinaryConsts::I32ShrU); break; case ShrSInt32: o << int8_t(BinaryConsts::I32ShrS); break; case RotLInt32: o << int8_t(BinaryConsts::I32RotL); break; case RotRInt32: o << int8_t(BinaryConsts::I32RotR); break; case EqInt32: o << int8_t(BinaryConsts::I32Eq); break; case NeInt32: o << int8_t(BinaryConsts::I32Ne); break; case LtSInt32: o << int8_t(BinaryConsts::I32LtS); break; case LtUInt32: o << int8_t(BinaryConsts::I32LtU); break; case LeSInt32: o << int8_t(BinaryConsts::I32LeS); break; case LeUInt32: o << int8_t(BinaryConsts::I32LeU); break; case GtSInt32: o << int8_t(BinaryConsts::I32GtS); break; case GtUInt32: o << int8_t(BinaryConsts::I32GtU); break; case GeSInt32: o << int8_t(BinaryConsts::I32GeS); break; case GeUInt32: o << int8_t(BinaryConsts::I32GeU); break; case AddInt64: o << int8_t(BinaryConsts::I64Add); break; case SubInt64: o << int8_t(BinaryConsts::I64Sub); break; case MulInt64: o << int8_t(BinaryConsts::I64Mul); break; case DivSInt64: o << int8_t(BinaryConsts::I64DivS); break; case DivUInt64: o << int8_t(BinaryConsts::I64DivU); break; case RemSInt64: o << int8_t(BinaryConsts::I64RemS); break; case RemUInt64: o << int8_t(BinaryConsts::I64RemU); break; case AndInt64: o << int8_t(BinaryConsts::I64And); break; case OrInt64: o << int8_t(BinaryConsts::I64Or); break; case XorInt64: o << int8_t(BinaryConsts::I64Xor); break; case ShlInt64: o << int8_t(BinaryConsts::I64Shl); break; case ShrUInt64: o << int8_t(BinaryConsts::I64ShrU); break; case ShrSInt64: o << int8_t(BinaryConsts::I64ShrS); break; case RotLInt64: o << int8_t(BinaryConsts::I64RotL); break; case RotRInt64: o << int8_t(BinaryConsts::I64RotR); break; case EqInt64: o << int8_t(BinaryConsts::I64Eq); break; case NeInt64: o << int8_t(BinaryConsts::I64Ne); break; case LtSInt64: o << int8_t(BinaryConsts::I64LtS); break; case LtUInt64: o << int8_t(BinaryConsts::I64LtU); break; case LeSInt64: o << int8_t(BinaryConsts::I64LeS); break; case LeUInt64: o << int8_t(BinaryConsts::I64LeU); break; case GtSInt64: o << int8_t(BinaryConsts::I64GtS); break; case GtUInt64: o << int8_t(BinaryConsts::I64GtU); break; case GeSInt64: o << int8_t(BinaryConsts::I64GeS); break; case GeUInt64: o << int8_t(BinaryConsts::I64GeU); break; case AddFloat32: o << int8_t(BinaryConsts::F32Add); break; case SubFloat32: o << int8_t(BinaryConsts::F32Sub); break; case MulFloat32: o << int8_t(BinaryConsts::F32Mul); break; case DivFloat32: o << int8_t(BinaryConsts::F32Div); break; case CopySignFloat32: o << int8_t(BinaryConsts::F32CopySign); break; case MinFloat32: o << int8_t(BinaryConsts::F32Min); break; case MaxFloat32: o << int8_t(BinaryConsts::F32Max); break; case EqFloat32: o << int8_t(BinaryConsts::F32Eq); break; case NeFloat32: o << int8_t(BinaryConsts::F32Ne); break; case LtFloat32: o << int8_t(BinaryConsts::F32Lt); break; case LeFloat32: o << int8_t(BinaryConsts::F32Le); break; case GtFloat32: o << int8_t(BinaryConsts::F32Gt); break; case GeFloat32: o << int8_t(BinaryConsts::F32Ge); break; case AddFloat64: o << int8_t(BinaryConsts::F64Add); break; case SubFloat64: o << int8_t(BinaryConsts::F64Sub); break; case MulFloat64: o << int8_t(BinaryConsts::F64Mul); break; case DivFloat64: o << int8_t(BinaryConsts::F64Div); break; case CopySignFloat64: o << int8_t(BinaryConsts::F64CopySign); break; case MinFloat64: o << int8_t(BinaryConsts::F64Min); break; case MaxFloat64: o << int8_t(BinaryConsts::F64Max); break; case EqFloat64: o << int8_t(BinaryConsts::F64Eq); break; case NeFloat64: o << int8_t(BinaryConsts::F64Ne); break; case LtFloat64: o << int8_t(BinaryConsts::F64Lt); break; case LeFloat64: o << int8_t(BinaryConsts::F64Le); break; case GtFloat64: o << int8_t(BinaryConsts::F64Gt); break; case GeFloat64: o << int8_t(BinaryConsts::F64Ge); break; case EqVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Eq); break; case NeVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Ne); break; case LtSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16LtS); break; case LtUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16LtU); break; case GtSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16GtS); break; case GtUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16GtU); break; case LeSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16LeS); break; case LeUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16LeU); break; case GeSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16GeS); break; case GeUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16GeU); break; case EqVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Eq); break; case NeVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Ne); break; case LtSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8LtS); break; case LtUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8LtU); break; case GtSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8GtS); break; case GtUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8GtU); break; case LeSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8LeS); break; case LeUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8LeU); break; case GeSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8GeS); break; case GeUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8GeU); break; case EqVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Eq); break; case NeVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Ne); break; case LtSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4LtS); break; case LtUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4LtU); break; case GtSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GtS); break; case GtUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GtU); break; case LeSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4LeS); break; case LeUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4LeU); break; case GeSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GeS); break; case GeUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GeU); break; case EqVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Eq); break; case NeVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Ne); break; case LtSVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2LtS); break; case GtSVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2GtS); break; case LeSVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2LeS); break; case GeSVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2GeS); break; case EqVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Eq); break; case NeVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Ne); break; case LtVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Lt); break; case GtVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Gt); break; case LeVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Le); break; case GeVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Ge); break; case EqVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Eq); break; case NeVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Ne); break; case LtVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Lt); break; case GtVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Gt); break; case LeVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Le); break; case GeVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Ge); break; case AndVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128And); break; case OrVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Or); break; case XorVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Xor); break; case AndNotVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Andnot); break; case AddVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Add); break; case AddSatSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16AddSatS); break; case AddSatUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16AddSatU); break; case SubVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Sub); break; case SubSatSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16SubSatS); break; case SubSatUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16SubSatU); break; case MinSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16MinS); break; case MinUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16MinU); break; case MaxSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16MaxS); break; case MaxUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16MaxU); break; case AvgrUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16AvgrU); break; case AddVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Add); break; case AddSatSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8AddSatS); break; case AddSatUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8AddSatU); break; case SubVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Sub); break; case SubSatSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8SubSatS); break; case SubSatUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8SubSatU); break; case MulVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Mul); break; case MinSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8MinS); break; case MinUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8MinU); break; case MaxSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8MaxS); break; case MaxUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8MaxU); break; case AvgrUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8AvgrU); break; case Q15MulrSatSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Q15MulrSatS); break; case ExtMulLowSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtmulLowI8x16S); break; case ExtMulHighSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtmulHighI8x16S); break; case ExtMulLowUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtmulLowI8x16U); break; case ExtMulHighUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8ExtmulHighI8x16U); break; case AddVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Add); break; case SubVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Sub); break; case MulVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Mul); break; case MinSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4MinS); break; case MinUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4MinU); break; case MaxSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4MaxS); break; case MaxUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4MaxU); break; case DotSVecI16x8ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4DotI16x8S); break; case ExtMulLowSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtmulLowI16x8S); break; case ExtMulHighSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtmulHighI16x8S); break; case ExtMulLowUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtmulLowI16x8U); break; case ExtMulHighUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4ExtmulHighI16x8U); break; case AddVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Add); break; case SubVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Sub); break; case MulVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Mul); break; case ExtMulLowSVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2ExtmulLowI32x4S); break; case ExtMulHighSVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2ExtmulHighI32x4S); break; case ExtMulLowUVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2ExtmulLowI32x4U); break; case ExtMulHighUVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2ExtmulHighI32x4U); break; case AddVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Add); break; case SubVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Sub); break; case MulVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Mul); break; case DivVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Div); break; case MinVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Min); break; case MaxVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Max); break; case PMinVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Pmin); break; case PMaxVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Pmax); break; case AddVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Add); break; case SubVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Sub); break; case MulVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Mul); break; case DivVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Div); break; case MinVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Min); break; case MaxVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Max); break; case PMinVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Pmin); break; case PMaxVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Pmax); break; case NarrowSVecI16x8ToVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16NarrowI16x8S); break; case NarrowUVecI16x8ToVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16NarrowI16x8U); break; case NarrowSVecI32x4ToVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8NarrowI32x4S); break; case NarrowUVecI32x4ToVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8NarrowI32x4U); break; case SwizzleVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Swizzle); break; case RelaxedSwizzleVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16RelaxedSwizzle); break; case RelaxedMinVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4RelaxedMin); break; case RelaxedMaxVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4RelaxedMax); break; case RelaxedMinVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2RelaxedMin); break; case RelaxedMaxVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2RelaxedMax); break; case RelaxedQ15MulrSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8RelaxedQ15MulrS); break; case DotI8x16I7x16SToVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8DotI8x16I7x16S); break; case DotI8x16I7x16UToVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8DotI8x16I7x16U); break; case InvalidBinary: WASM_UNREACHABLE("invalid binary op"); } } void BinaryInstWriter::visitSelect(Select* curr) { if (curr->type.isRef()) { o << int8_t(BinaryConsts::SelectWithType) << U32LEB(curr->type.size()); for (size_t i = 0; i < curr->type.size(); i++) { parent.writeType(curr->type != Type::unreachable ? curr->type : Type::none); } } else { o << int8_t(BinaryConsts::Select); } } void BinaryInstWriter::visitReturn(Return* curr) { o << int8_t(BinaryConsts::Return); } void BinaryInstWriter::visitMemorySize(MemorySize* curr) { o << int8_t(BinaryConsts::MemorySize); o << U32LEB(0); // Reserved flags field } void BinaryInstWriter::visitMemoryGrow(MemoryGrow* curr) { o << int8_t(BinaryConsts::MemoryGrow); o << U32LEB(0); // Reserved flags field } void BinaryInstWriter::visitRefNull(RefNull* curr) { o << int8_t(BinaryConsts::RefNull); parent.writeHeapType(curr->type.getHeapType()); } void BinaryInstWriter::visitRefIs(RefIs* curr) { switch (curr->op) { case RefIsNull: o << int8_t(BinaryConsts::RefIsNull); break; case RefIsFunc: o << int8_t(BinaryConsts::GCPrefix) << int8_t(BinaryConsts::RefIsFunc); break; case RefIsData: o << int8_t(BinaryConsts::GCPrefix) << int8_t(BinaryConsts::RefIsData); break; case RefIsI31: o << int8_t(BinaryConsts::GCPrefix) << int8_t(BinaryConsts::RefIsI31); break; default: WASM_UNREACHABLE("unimplemented ref.is_*"); } } void BinaryInstWriter::visitRefFunc(RefFunc* curr) { o << int8_t(BinaryConsts::RefFunc) << U32LEB(parent.getFunctionIndex(curr->func)); } void BinaryInstWriter::visitRefEq(RefEq* curr) { o << int8_t(BinaryConsts::RefEq); } void BinaryInstWriter::visitTableGet(TableGet* curr) { o << int8_t(BinaryConsts::TableGet); o << U32LEB(parent.getTableIndex(curr->table)); } void BinaryInstWriter::visitTableSet(TableSet* curr) { o << int8_t(BinaryConsts::TableSet); o << U32LEB(parent.getTableIndex(curr->table)); } void BinaryInstWriter::visitTableSize(TableSize* curr) { o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::TableSize); o << U32LEB(parent.getTableIndex(curr->table)); } void BinaryInstWriter::visitTableGrow(TableGrow* curr) { o << int8_t(BinaryConsts::MiscPrefix) << U32LEB(BinaryConsts::TableGrow); o << U32LEB(parent.getTableIndex(curr->table)); } void BinaryInstWriter::visitTry(Try* curr) { breakStack.push_back(curr->name); o << int8_t(BinaryConsts::Try); emitResultType(curr->type); } void BinaryInstWriter::emitCatch(Try* curr, Index i) { if (func && !sourceMap) { parent.writeExtraDebugLocation(curr, func, i); } o << int8_t(BinaryConsts::Catch) << U32LEB(parent.getTagIndex(curr->catchTags[i])); } void BinaryInstWriter::emitCatchAll(Try* curr) { if (func && !sourceMap) { parent.writeExtraDebugLocation(curr, func, curr->catchBodies.size()); } o << int8_t(BinaryConsts::CatchAll); } void BinaryInstWriter::emitDelegate(Try* curr) { // The delegate ends the scope in effect, and pops the try's name. Note that // the getBreakIndex is intentionally after that pop, as the delegate cannot // target its own try. assert(!breakStack.empty()); breakStack.pop_back(); o << int8_t(BinaryConsts::Delegate) << U32LEB(getBreakIndex(curr->delegateTarget)); } void BinaryInstWriter::visitThrow(Throw* curr) { o << int8_t(BinaryConsts::Throw) << U32LEB(parent.getTagIndex(curr->tag)); } void BinaryInstWriter::visitRethrow(Rethrow* curr) { o << int8_t(BinaryConsts::Rethrow) << U32LEB(getBreakIndex(curr->target)); } void BinaryInstWriter::visitNop(Nop* curr) { o << int8_t(BinaryConsts::Nop); } void BinaryInstWriter::visitUnreachable(Unreachable* curr) { o << int8_t(BinaryConsts::Unreachable); } void BinaryInstWriter::visitDrop(Drop* curr) { size_t numValues = curr->value->type.size(); for (size_t i = 0; i < numValues; i++) { o << int8_t(BinaryConsts::Drop); } } void BinaryInstWriter::visitPop(Pop* curr) { // Turns into nothing in the binary format } void BinaryInstWriter::visitTupleMake(TupleMake* curr) { // Turns into nothing in the binary format } void BinaryInstWriter::visitTupleExtract(TupleExtract* curr) { size_t numVals = curr->tuple->type.size(); // Drop all values after the one we want for (size_t i = curr->index + 1; i < numVals; ++i) { o << int8_t(BinaryConsts::Drop); } // If the extracted value is the only one left, we're done if (curr->index == 0) { return; } // Otherwise, save it to a scratch local, drop the others, then retrieve it assert(scratchLocals.find(curr->type) != scratchLocals.end()); auto scratch = scratchLocals[curr->type]; o << int8_t(BinaryConsts::LocalSet) << U32LEB(scratch); for (size_t i = 0; i < curr->index; ++i) { o << int8_t(BinaryConsts::Drop); } o << int8_t(BinaryConsts::LocalGet) << U32LEB(scratch); } void BinaryInstWriter::visitI31New(I31New* curr) { o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::I31New); } void BinaryInstWriter::visitI31Get(I31Get* curr) { o << int8_t(BinaryConsts::GCPrefix) << U32LEB(curr->signed_ ? BinaryConsts::I31GetS : BinaryConsts::I31GetU); } void BinaryInstWriter::visitCallRef(CallRef* curr) { o << int8_t(curr->isReturn ? BinaryConsts::RetCallRef : BinaryConsts::CallRef); } void BinaryInstWriter::visitRefTest(RefTest* curr) { o << int8_t(BinaryConsts::GCPrefix); if (curr->rtt) { o << U32LEB(BinaryConsts::RefTest); } else { o << U32LEB(BinaryConsts::RefTestStatic); parent.writeIndexedHeapType(curr->intendedType); } } void BinaryInstWriter::visitRefCast(RefCast* curr) { o << int8_t(BinaryConsts::GCPrefix); if (curr->rtt) { o << U32LEB(BinaryConsts::RefCast); } else { if (curr->safety == RefCast::Unsafe) { o << U32LEB(BinaryConsts::RefCastNopStatic); } else { o << U32LEB(BinaryConsts::RefCastStatic); } parent.writeIndexedHeapType(curr->intendedType); } } void BinaryInstWriter::visitBrOn(BrOn* curr) { switch (curr->op) { case BrOnNull: o << int8_t(BinaryConsts::BrOnNull); break; case BrOnNonNull: o << int8_t(BinaryConsts::BrOnNonNull); break; case BrOnCast: o << int8_t(BinaryConsts::GCPrefix); if (curr->rtt) { o << U32LEB(BinaryConsts::BrOnCast); } else { o << U32LEB(BinaryConsts::BrOnCastStatic); } break; case BrOnCastFail: o << int8_t(BinaryConsts::GCPrefix); if (curr->rtt) { o << U32LEB(BinaryConsts::BrOnCastFail); } else { o << U32LEB(BinaryConsts::BrOnCastStaticFail); } break; case BrOnFunc: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnFunc); break; case BrOnNonFunc: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnNonFunc); break; case BrOnData: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnData); break; case BrOnNonData: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnNonData); break; case BrOnI31: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnI31); break; case BrOnNonI31: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::BrOnNonI31); break; default: WASM_UNREACHABLE("invalid br_on_*"); } o << U32LEB(getBreakIndex(curr->name)); if ((curr->op == BrOnCast || curr->op == BrOnCastFail) && !curr->rtt) { parent.writeIndexedHeapType(curr->intendedType); } } void BinaryInstWriter::visitRttCanon(RttCanon* curr) { o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::RttCanon); parent.writeIndexedHeapType(curr->type.getRtt().heapType); } void BinaryInstWriter::visitRttSub(RttSub* curr) { o << int8_t(BinaryConsts::GCPrefix); o << U32LEB(curr->fresh ? BinaryConsts::RttFreshSub : BinaryConsts::RttSub); parent.writeIndexedHeapType(curr->type.getRtt().heapType); } void BinaryInstWriter::visitStructNew(StructNew* curr) { o << int8_t(BinaryConsts::GCPrefix); if (curr->rtt) { if (curr->isWithDefault()) { o << U32LEB(BinaryConsts::StructNewDefaultWithRtt); } else { o << U32LEB(BinaryConsts::StructNewWithRtt); } } else { if (curr->isWithDefault()) { o << U32LEB(BinaryConsts::StructNewDefault); } else { o << U32LEB(BinaryConsts::StructNew); } } parent.writeIndexedHeapType(curr->type.getHeapType()); } void BinaryInstWriter::visitStructGet(StructGet* curr) { const auto& heapType = curr->ref->type.getHeapType(); const auto& field = heapType.getStruct().fields[curr->index]; int8_t op; if (field.type != Type::i32 || field.packedType == Field::not_packed) { op = BinaryConsts::StructGet; } else if (curr->signed_) { op = BinaryConsts::StructGetS; } else { op = BinaryConsts::StructGetU; } o << int8_t(BinaryConsts::GCPrefix) << U32LEB(op); parent.writeIndexedHeapType(heapType); o << U32LEB(curr->index); } void BinaryInstWriter::visitStructSet(StructSet* curr) { o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::StructSet); parent.writeIndexedHeapType(curr->ref->type.getHeapType()); o << U32LEB(curr->index); } void BinaryInstWriter::visitArrayNew(ArrayNew* curr) { o << int8_t(BinaryConsts::GCPrefix); if (curr->rtt) { if (curr->isWithDefault()) { o << U32LEB(BinaryConsts::ArrayNewDefaultWithRtt); } else { o << U32LEB(BinaryConsts::ArrayNewWithRtt); } } else { if (curr->isWithDefault()) { o << U32LEB(BinaryConsts::ArrayNewDefault); } else { o << U32LEB(BinaryConsts::ArrayNew); } } parent.writeIndexedHeapType(curr->type.getHeapType()); } void BinaryInstWriter::visitArrayInit(ArrayInit* curr) { o << int8_t(BinaryConsts::GCPrefix); if (curr->rtt) { o << U32LEB(BinaryConsts::ArrayInit); } else { o << U32LEB(BinaryConsts::ArrayInitStatic); } parent.writeIndexedHeapType(curr->type.getHeapType()); o << U32LEB(curr->values.size()); } void BinaryInstWriter::visitArrayGet(ArrayGet* curr) { auto heapType = curr->ref->type.getHeapType(); const auto& field = heapType.getArray().element; int8_t op; if (field.type != Type::i32 || field.packedType == Field::not_packed) { op = BinaryConsts::ArrayGet; } else if (curr->signed_) { op = BinaryConsts::ArrayGetS; } else { op = BinaryConsts::ArrayGetU; } o << int8_t(BinaryConsts::GCPrefix) << U32LEB(op); parent.writeIndexedHeapType(heapType); } void BinaryInstWriter::visitArraySet(ArraySet* curr) { o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::ArraySet); parent.writeIndexedHeapType(curr->ref->type.getHeapType()); } void BinaryInstWriter::visitArrayLen(ArrayLen* curr) { o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::ArrayLen); parent.writeIndexedHeapType(curr->ref->type.getHeapType()); } void BinaryInstWriter::visitArrayCopy(ArrayCopy* curr) { o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::ArrayCopy); parent.writeIndexedHeapType(curr->destRef->type.getHeapType()); parent.writeIndexedHeapType(curr->srcRef->type.getHeapType()); } void BinaryInstWriter::visitRefAs(RefAs* curr) { switch (curr->op) { case RefAsNonNull: o << int8_t(BinaryConsts::RefAsNonNull); break; case RefAsFunc: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::RefAsFunc); break; case RefAsData: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::RefAsData); break; case RefAsI31: o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::RefAsI31); break; default: WASM_UNREACHABLE("invalid ref.as_*"); } } void BinaryInstWriter::emitScopeEnd(Expression* curr) { assert(!breakStack.empty()); breakStack.pop_back(); o << int8_t(BinaryConsts::End); if (func && !sourceMap) { parent.writeDebugLocationEnd(curr, func); } } void BinaryInstWriter::emitFunctionEnd() { o << int8_t(BinaryConsts::End); } void BinaryInstWriter::emitUnreachable() { o << int8_t(BinaryConsts::Unreachable); } void BinaryInstWriter::mapLocalsAndEmitHeader() { assert(func && "BinaryInstWriter: function is not set"); // Map params for (Index i = 0; i < func->getNumParams(); i++) { mappedLocals[std::make_pair(i, 0)] = i; } // Normally we map all locals of the same type into a range of adjacent // addresses, which is more compact. However, if we need to keep DWARF valid, // do not do any reordering at all - instead, do a trivial mapping that // keeps everything unmoved. if (DWARF) { FindAll extracts(func->body); if (!extracts.list.empty()) { Fatal() << "DWARF + multivalue is not yet complete"; } Index varStart = func->getVarIndexBase(); Index varEnd = varStart + func->getNumVars(); o << U32LEB(func->getNumVars()); for (Index i = varStart; i < varEnd; i++) { mappedLocals[std::make_pair(i, 0)] = i; o << U32LEB(1); parent.writeType(func->getLocalType(i)); } return; } for (auto type : func->vars) { for (const auto& t : type) { noteLocalType(t); } } countScratchLocals(); std::unordered_map currLocalsByType; for (Index i = func->getVarIndexBase(); i < func->getNumLocals(); i++) { Index j = 0; for (const auto& type : func->getLocalType(i)) { auto fullIndex = std::make_pair(i, j++); Index index = func->getVarIndexBase(); for (auto& localType : localTypes) { if (type == localType) { mappedLocals[fullIndex] = index + currLocalsByType[localType]; currLocalsByType[type]++; break; } index += numLocalsByType.at(localType); } } } setScratchLocals(); o << U32LEB(numLocalsByType.size()); for (auto& localType : localTypes) { o << U32LEB(numLocalsByType.at(localType)); parent.writeType(localType); } } void BinaryInstWriter::noteLocalType(Type type) { if (!numLocalsByType.count(type)) { localTypes.push_back(type); } numLocalsByType[type]++; } void BinaryInstWriter::countScratchLocals() { // Add a scratch register in `numLocalsByType` for each type of // tuple.extract with nonzero index present. FindAll extracts(func->body); for (auto* extract : extracts.list) { if (extract->type != Type::unreachable && extract->index != 0) { scratchLocals[extract->type] = 0; } } for (auto& [type, _] : scratchLocals) { noteLocalType(type); } } void BinaryInstWriter::setScratchLocals() { Index index = func->getVarIndexBase(); for (auto& localType : localTypes) { index += numLocalsByType[localType]; if (scratchLocals.find(localType) != scratchLocals.end()) { scratchLocals[localType] = index - 1; } } } void BinaryInstWriter::emitMemoryAccess(size_t alignment, size_t bytes, uint32_t offset) { o << U32LEB(Bits::log2(alignment ? alignment : bytes)); o << U32LEB(offset); } int32_t BinaryInstWriter::getBreakIndex(Name name) { // -1 if not found if (name == DELEGATE_CALLER_TARGET) { return breakStack.size(); } for (int i = breakStack.size() - 1; i >= 0; i--) { if (breakStack[i] == name) { return breakStack.size() - 1 - i; } } WASM_UNREACHABLE("break index not found"); } void StackIRGenerator::emit(Expression* curr) { StackInst* stackInst = nullptr; if (curr->is()) { stackInst = makeStackInst(StackInst::BlockBegin, curr); } else if (curr->is()) { stackInst = makeStackInst(StackInst::IfBegin, curr); } else if (curr->is()) { stackInst = makeStackInst(StackInst::LoopBegin, curr); } else if (curr->is()) { stackInst = makeStackInst(StackInst::TryBegin, curr); } else { stackInst = makeStackInst(curr); } stackIR.push_back(stackInst); } void StackIRGenerator::emitScopeEnd(Expression* curr) { StackInst* stackInst = nullptr; if (curr->is()) { stackInst = makeStackInst(StackInst::BlockEnd, curr); } else if (curr->is()) { stackInst = makeStackInst(StackInst::IfEnd, curr); } else if (curr->is()) { stackInst = makeStackInst(StackInst::LoopEnd, curr); } else if (curr->is()) { stackInst = makeStackInst(StackInst::TryEnd, curr); } else { WASM_UNREACHABLE("unexpected expr type"); } stackIR.push_back(stackInst); } StackInst* StackIRGenerator::makeStackInst(StackInst::Op op, Expression* origin) { auto* ret = module.allocator.alloc(); ret->op = op; ret->origin = origin; auto stackType = origin->type; if (origin->is() || origin->is() || origin->is() || origin->is()) { if (stackType == Type::unreachable) { // There are no unreachable blocks, loops, or ifs. we emit extra // unreachables to fix that up, so that they are valid as having none // type. stackType = Type::none; } else if (op != StackInst::BlockEnd && op != StackInst::IfEnd && op != StackInst::LoopEnd && op != StackInst::TryEnd) { // If a concrete type is returned, we mark the end of the construct has // having that type (as it is pushed to the value stack at that point), // other parts are marked as none). stackType = Type::none; } } ret->type = stackType; return ret; } void StackIRToBinaryWriter::write() { writer.mapLocalsAndEmitHeader(); // Stack to track indices of catches within a try SmallVector catchIndexStack; for (auto* inst : *func->stackIR) { if (!inst) { continue; // a nullptr is just something we can skip } switch (inst->op) { case StackInst::TryBegin: catchIndexStack.push_back(0); [[fallthrough]]; case StackInst::Basic: case StackInst::BlockBegin: case StackInst::IfBegin: case StackInst::LoopBegin: { writer.visit(inst->origin); break; } case StackInst::TryEnd: catchIndexStack.pop_back(); [[fallthrough]]; case StackInst::BlockEnd: case StackInst::IfEnd: case StackInst::LoopEnd: { writer.emitScopeEnd(inst->origin); break; } case StackInst::IfElse: { writer.emitIfElse(inst->origin->cast()); break; } case StackInst::Catch: { writer.emitCatch(inst->origin->cast(), catchIndexStack.back()++); break; } case StackInst::CatchAll: { writer.emitCatchAll(inst->origin->cast()); break; } case StackInst::Delegate: { writer.emitDelegate(inst->origin->cast()); // Delegates end the try, like a TryEnd. catchIndexStack.pop_back(); break; } default: WASM_UNREACHABLE("unexpected op"); } } writer.emitFunctionEnd(); } } // namespace wasm binaryen-version_108/src/wasm/wasm-type.cpp000066400000000000000000003542451423707623100211520ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include #include #include #include "compiler-support.h" #include "support/hash.h" #include "support/insert_ordered.h" #include "wasm-features.h" #include "wasm-type-printing.h" #include "wasm-type.h" #define TRACE_CANONICALIZATION 0 #define TIME_CANONICALIZATION 0 #if TRACE_CANONICALIZATION || TIME_CANONICALIZATION #include #endif #if TIME_CANONICALIZATION #include #endif namespace wasm { static TypeSystem typeSystem = TypeSystem::Equirecursive; void setTypeSystem(TypeSystem system) { typeSystem = system; } TypeSystem getTypeSystem() { return typeSystem; } namespace { struct TypeInfo { using type_t = Type; // Used in assertions to ensure that temporary types don't leak into the // global store. bool isTemp = false; enum Kind { TupleKind, RefKind, RttKind, } kind; struct Ref { HeapType heapType; Nullability nullable; }; union { Tuple tuple; Ref ref; Rtt rtt; }; TypeInfo(const Tuple& tuple) : kind(TupleKind), tuple(tuple) {} TypeInfo(Tuple&& tuple) : kind(TupleKind), tuple(std::move(tuple)) {} TypeInfo(HeapType heapType, Nullability nullable) : kind(RefKind), ref{heapType, nullable} {} TypeInfo(Rtt rtt) : kind(RttKind), rtt(rtt) {} TypeInfo(const TypeInfo& other); ~TypeInfo(); constexpr bool isTuple() const { return kind == TupleKind; } constexpr bool isRef() const { return kind == RefKind; } constexpr bool isRtt() const { return kind == RttKind; } bool isNullable() const { return kind == RefKind && ref.nullable; } // If this TypeInfo represents a Type that can be represented more simply, // return that simpler Type. For example, this handles canonicalizing the // TypeInfo representing (ref null any) into the BasicType anyref. It also // handles eliminating singleton tuple types. std::optional getCanonical() const; bool operator==(const TypeInfo& other) const; bool operator!=(const TypeInfo& other) const { return !(*this == other); } }; using RecGroupInfo = std::vector; struct HeapTypeInfo { using type_t = HeapType; // Used in assertions to ensure that temporary types don't leak into the // global store. bool isTemp = false; // If `isFinalized`, then hashing and equality are performed on the finite // shape of the type definition tree rooted at the HeapTypeInfo. // Otherwise, the type definition tree is still being constructed via the // TypeBuilder interface, so hashing and equality use pointer identity. bool isFinalized = true; // In nominal or isorecursive mode, the supertype of this HeapType, if it // exists. HeapTypeInfo* supertype = nullptr; // In isorecursive mode, the recursion group of this type or null if the // recursion group is trivial (i.e. contains only this type). RecGroupInfo* recGroup = nullptr; size_t recGroupIndex = 0; enum Kind { BasicKind, SignatureKind, StructKind, ArrayKind, } kind; union { HeapType::BasicHeapType basic; Signature signature; Struct struct_; Array array; }; HeapTypeInfo(HeapType::BasicHeapType basic) : kind(BasicKind), basic(basic) {} HeapTypeInfo(Signature sig) : kind(SignatureKind), signature(sig) {} HeapTypeInfo(const Struct& struct_) : kind(StructKind), struct_(struct_) {} HeapTypeInfo(Struct&& struct_) : kind(StructKind), struct_(std::move(struct_)) {} HeapTypeInfo(Array array) : kind(ArrayKind), array(array) {} HeapTypeInfo(const HeapTypeInfo& other); ~HeapTypeInfo(); constexpr bool isSignature() const { return kind == SignatureKind; } constexpr bool isStruct() const { return kind == StructKind; } constexpr bool isArray() const { return kind == ArrayKind; } constexpr bool isData() const { return isStruct() || isArray(); } // If this HeapTypeInfo represents a HeapType that can be represented more // simply, return that simpler HeapType. This handles turning BasicKind // HeapTypes into their corresponding BasicHeapTypes. std::optional getCanonical() const; HeapTypeInfo& operator=(const HeapTypeInfo& other); bool operator==(const HeapTypeInfo& other) const; bool operator!=(const HeapTypeInfo& other) const { return !(*this == other); } }; // Helper for coinductively checking whether a pair of Types or HeapTypes are in // a subtype relation. struct SubTyper { // Set of HeapTypes we are assuming are equivalent as long as we cannot prove // otherwise. std::unordered_set> seen; bool isSubType(Type a, Type b); bool isSubType(HeapType a, HeapType b); bool isSubType(const Tuple& a, const Tuple& b); bool isSubType(const Field& a, const Field& b); bool isSubType(const Signature& a, const Signature& b); bool isSubType(const Struct& a, const Struct& b); bool isSubType(const Array& a, const Array& b); bool isSubType(const Rtt& a, const Rtt& b); }; // Helper for finding the equirecursive least upper bound of two types. struct TypeBounder { TypeBuilder builder; // The indices in `builder` at which the LUB of each pair of HeapTypes are // being constructed. std::unordered_map, size_t> indices; bool hasLeastUpperBound(Type a, Type b); Type getLeastUpperBound(Type a, Type b); HeapType getLeastUpperBound(HeapType a, HeapType b); private: // Return the LUB iff a LUB was found. The HeapType and Struct overloads are // exceptional because they are infallible; HeapType::any is an upper bound of // all HeapTypes and the empty struct is an upper bound of all struct types. // Note that these methods can return temporary types, so they should never be // used directly. std::optional lub(Type a, Type b); HeapType lub(HeapType a, HeapType b); HeapType::BasicHeapType lub(HeapType::BasicHeapType a, HeapType::BasicHeapType b); std::optional lub(const Tuple& a, const Tuple& b); std::optional lub(const Field& a, const Field& b); std::optional lub(const Signature& a, const Signature& b); Struct lub(const Struct& a, const Struct& b); std::optional lub(const Array& a, const Array& b); std::optional lub(const Rtt& a, const Rtt& b); }; // Helper for printing types. struct TypePrinter { // Whether to print explicit supertypes. bool printSupertypes; // The stream we are printing to. std::ostream& os; // The default generator state if no other generator is provided. std::optional defaultGenerator; // The function we call to get HeapType names. HeapTypeNameGenerator generator; TypePrinter(std::ostream& os, HeapTypeNameGenerator generator) : printSupertypes(getTypeSystem() != TypeSystem::Equirecursive), os(os), defaultGenerator(), generator(generator) {} TypePrinter(std::ostream& os) : TypePrinter( os, [&](HeapType type) { return defaultGenerator->getNames(type); }) { defaultGenerator = DefaultTypeNameGenerator{}; } void printHeapTypeName(HeapType type); void printSupertypeOr(std::optional super, std::string other); std::ostream& print(Type type); std::ostream& print(HeapType type); std::ostream& print(const Tuple& tuple); std::ostream& print(const Field& field); std::ostream& print(const Signature& sig, std::optional super = std::nullopt); std::ostream& print(const Struct& struct_, std::optional super = std::nullopt); std::ostream& print(const Array& array, std::optional super = std::nullopt); std::ostream& print(const Rtt& rtt); }; // Helper for hashing the shapes of TypeInfos and HeapTypeInfos. Keeps track of // previously seen HeapTypes to avoid traversing them more than once. Infos // referring to different type IDs but sharing a finite shape will compare and // hash the same. struct FiniteShapeHasher { bool topLevelOnly; size_t currDepth = 0; size_t currStep = 0; std::unordered_map seen; FiniteShapeHasher(bool topLevelOnly = false) : topLevelOnly(topLevelOnly) {} size_t hash(Type type); size_t hash(HeapType heapType); size_t hash(const TypeInfo& info); size_t hash(const HeapTypeInfo& info); size_t hash(const Tuple& tuple); size_t hash(const Field& field); size_t hash(const Signature& sig); size_t hash(const Struct& struct_); size_t hash(const Array& array); size_t hash(const Rtt& rtt); }; // Helper for comparing the shapes of TypeInfos and HeapTypeInfos for equality. // Like FiniteShapeHasher, keeps track of previously seen HeapTypes. Note that // this does not test for coinductive equality of the infinite expansion of the // type tree, but rather tests for equality of the finite shape of the graph. If // FiniteShapeEquator reports that two type shapes are equal, FiniteShapeHasher // should produce the same hash for them. struct FiniteShapeEquator { bool topLevelOnly; size_t currDepth = 0; size_t currStep = 0; std::unordered_map seenA, seenB; FiniteShapeEquator(bool topLevelOnly = false) : topLevelOnly(topLevelOnly) {} bool eq(Type a, Type b); bool eq(HeapType a, HeapType b); bool eq(const TypeInfo& a, const TypeInfo& b); bool eq(const HeapTypeInfo& a, const HeapTypeInfo& b); bool eq(const Tuple& a, const Tuple& b); bool eq(const Field& a, const Field& b); bool eq(const Signature& a, const Signature& b); bool eq(const Struct& a, const Struct& b); bool eq(const Array& a, const Array& b); bool eq(const Rtt& a, const Rtt& b); }; struct RecGroupHasher { // `group` may or may not be canonical, but any other recursion group it // reaches must be canonical. RecGroup group; RecGroupHasher(RecGroup group) : group(group) {} // Perform the hash. size_t operator()() const; // `topLevelHash` is applied to the top-level group members and observes their // structure, while `hash(HeapType)` is applied to the children of group // members and does not observe their structure. size_t topLevelHash(HeapType type) const; size_t hash(Type type) const; size_t hash(HeapType type) const; size_t hash(const TypeInfo& info) const; size_t hash(const HeapTypeInfo& info) const; size_t hash(const Tuple& tuple) const; size_t hash(const Field& field) const; size_t hash(const Signature& sig) const; size_t hash(const Struct& struct_) const; size_t hash(const Array& array) const; size_t hash(const Rtt& rtt) const; }; struct RecGroupEquator { // `newGroup` may or may not be canonical, but `otherGroup` and any other // recursion group reachable by either of them must be canonical. RecGroup newGroup, otherGroup; RecGroupEquator(RecGroup newGroup, RecGroup otherGroup) : newGroup(newGroup), otherGroup(otherGroup) {} // Perform the comparison. bool operator()() const; // `topLevelEq` is applied to the top-level group members and observes their // structure, while `eq(HeapType)` is applied to the children of group members // and does not observe their structure. bool topLevelEq(HeapType a, HeapType b) const; bool eq(Type a, Type b) const; bool eq(HeapType a, HeapType b) const; bool eq(const TypeInfo& a, const TypeInfo& b) const; bool eq(const HeapTypeInfo& a, const HeapTypeInfo& b) const; bool eq(const Tuple& a, const Tuple& b) const; bool eq(const Field& a, const Field& b) const; bool eq(const Signature& a, const Signature& b) const; bool eq(const Struct& a, const Struct& b) const; bool eq(const Array& a, const Array& b) const; bool eq(const Rtt& a, const Rtt& b) const; }; // A wrapper around a RecGroup that provides equality and hashing based on the // structure of the group such that isorecursively equivalent recursion groups // will compare equal and will have the same hash. Assumes that all recursion // groups reachable from this one have been canonicalized, except for the // wrapped group itself. struct RecGroupStructure { RecGroup group; bool operator==(const RecGroupStructure& other) const { return RecGroupEquator{group, other.group}(); } }; } // anonymous namespace } // namespace wasm namespace std { template<> class hash { public: size_t operator()(const wasm::RecGroupStructure& structure) const { return wasm::RecGroupHasher{structure.group}(); } }; } // namespace std namespace wasm { namespace { // Generic utility for traversing type graphs. The inserted roots must live as // long as the Walker because they are referenced by address. This base class // only has logic for traversing type graphs; figuring out when to stop // traversing the graph and doing useful work during the traversal is left to // subclasses. template struct TypeGraphWalkerBase { void walkRoot(Type* type); void walkRoot(HeapType* ht); // Override these in subclasses to do useful work. void preVisitType(Type* type) {} void preVisitHeapType(HeapType* ht) {} void postVisitType(Type* type) {} void postVisitHeapType(HeapType* ht) {} // This base walker does not know when to stop scanning, so at least one of // these needs to be overridden with a method that calls the base scanning // method only if some end condition isn't met. void scanType(Type* type); void scanHeapType(HeapType* ht); private: struct Task { enum Kind { PreType, PreHeapType, ScanType, ScanHeapType, PostType, PostHeapType, } kind; union { Type* type; HeapType* heapType; }; static Task preVisit(Type* type) { return Task(type, PreType); } static Task preVisit(HeapType* ht) { return Task(ht, PreHeapType); } static Task scan(Type* type) { return Task(type, ScanType); } static Task scan(HeapType* ht) { return Task(ht, ScanHeapType); } static Task postVisit(Type* type) { return Task(type, PostType); } static Task postVisit(HeapType* ht) { return Task(ht, PostHeapType); } private: Task(Type* type, Kind kind) : kind(kind), type(type) {} Task(HeapType* ht, Kind kind) : kind(kind), heapType(ht) {} }; void doWalk(); std::vector taskList; void push(Type* type); void push(HeapType* type); Self& self() { return *static_cast(this); } }; // A type graph walker base class that still does no useful work, but at least // knows to scan each HeapType only once. template struct HeapTypeGraphWalker : TypeGraphWalkerBase { // Override this. void noteHeapType(HeapType ht) {} void scanHeapType(HeapType* ht) { if (scanned.insert(*ht).second) { static_cast(this)->noteHeapType(*ht); TypeGraphWalkerBase::scanHeapType(ht); } } private: std::unordered_set scanned; }; // A type graph walker base class that still does no useful work, but at least // knows to scan each HeapType and Type only once. template struct TypeGraphWalker : TypeGraphWalkerBase { // Override these. void noteType(Type type) {} void noteHeapType(HeapType ht) {} void scanType(Type* type) { if (scannedTypes.insert(*type).second) { static_cast(this)->noteType(*type); TypeGraphWalkerBase::scanType(type); } } void scanHeapType(HeapType* ht) { if (scannedHeapTypes.insert(*ht).second) { static_cast(this)->noteHeapType(*ht); TypeGraphWalkerBase::scanHeapType(ht); } } private: std::unordered_set scannedHeapTypes; std::unordered_set scannedTypes; }; // A type graph walker that only traverses the direct HeapType children of the // root, looking through child Types. What to do with each child is left to // subclasses. template struct HeapTypeChildWalker : HeapTypeGraphWalker { // Override this. void noteChild(HeapType* child) {} void scanType(Type* type) { isTopLevel = false; HeapTypeGraphWalker::scanType(type); } void scanHeapType(HeapType* ht) { if (isTopLevel) { HeapTypeGraphWalker::scanHeapType(ht); } else { static_cast(this)->noteChild(ht); } } private: bool isTopLevel = true; }; struct HeapTypeChildCollector : HeapTypeChildWalker { std::vector children; void noteChild(HeapType* child) { children.push_back(*child); } }; } // anonymous namespace } // namespace wasm namespace std { template<> class hash { public: size_t operator()(const wasm::TypeInfo& info) const; }; template<> class hash { public: size_t operator()(const wasm::HeapTypeInfo& info) const; }; template class hash> { public: size_t operator()(const reference_wrapper& ref) const { return hash{}(ref.get()); } }; template class equal_to> { public: bool operator()(const reference_wrapper& a, const reference_wrapper& b) const { return equal_to{}(a.get(), b.get()); } }; } // namespace std namespace wasm { namespace { TypeInfo* getTypeInfo(Type type) { assert(!type.isBasic()); return (TypeInfo*)type.getID(); } HeapTypeInfo* getHeapTypeInfo(HeapType ht) { assert(!ht.isBasic()); return (HeapTypeInfo*)ht.getID(); } HeapType asHeapType(std::unique_ptr& info) { return HeapType(uintptr_t(info.get())); } Type markTemp(Type type) { if (!type.isBasic()) { getTypeInfo(type)->isTemp = true; } return type; } bool isTemp(Type type) { return !type.isBasic() && getTypeInfo(type)->isTemp; } bool isTemp(HeapType type) { return !type.isBasic() && getHeapTypeInfo(type)->isTemp; } // Given a Type that may or may not be backed by the simplest possible // representation, return the equivalent type that is definitely backed by the // simplest possible representation. Type asCanonical(Type type) { if (type.isBasic()) { return type; } else if (auto canon = getTypeInfo(type)->getCanonical()) { return *canon; } else { return type; } } // Given a HeapType that may or may not be backed by the simplest possible // representation, return the equivalent type that is definitely backed by the // simplest possible representation. HeapType asCanonical(HeapType type) { if (type.isBasic()) { return type; } else if (auto canon = getHeapTypeInfo(type)->getCanonical()) { return *canon; } else { return type; } } TypeInfo::TypeInfo(const TypeInfo& other) { kind = other.kind; switch (kind) { case TupleKind: new (&tuple) auto(other.tuple); return; case RefKind: new (&ref) auto(other.ref); return; case RttKind: new (&rtt) auto(other.rtt); return; } WASM_UNREACHABLE("unexpected kind"); } TypeInfo::~TypeInfo() { switch (kind) { case TupleKind: tuple.~Tuple(); return; case RefKind: ref.~Ref(); return; case RttKind: rtt.~Rtt(); return; } WASM_UNREACHABLE("unexpected kind"); } std::optional TypeInfo::getCanonical() const { if (isTuple()) { if (tuple.types.size() == 0) { return Type::none; } if (tuple.types.size() == 1) { return tuple.types[0]; } } if (isRef()) { HeapType basic = asCanonical(ref.heapType); if (basic.isBasic()) { if (ref.nullable) { switch (basic.getBasic()) { case HeapType::func: return Type::funcref; case HeapType::any: return Type::anyref; case HeapType::eq: return Type::eqref; case HeapType::i31: case HeapType::data: break; } } else { if (basic == HeapType::i31) { return Type::i31ref; } if (basic == HeapType::data) { return Type::dataref; } } } } return {}; } bool TypeInfo::operator==(const TypeInfo& other) const { if (kind != other.kind) { return false; } switch (kind) { case TupleKind: return tuple == other.tuple; case RefKind: return ref.nullable == other.ref.nullable && ref.heapType == other.ref.heapType; case RttKind: return rtt == other.rtt; } WASM_UNREACHABLE("unexpected kind"); } HeapTypeInfo::HeapTypeInfo(const HeapTypeInfo& other) { kind = other.kind; supertype = other.supertype; recGroup = other.recGroup; switch (kind) { case BasicKind: new (&basic) auto(other.basic); return; case SignatureKind: new (&signature) auto(other.signature); return; case StructKind: new (&struct_) auto(other.struct_); return; case ArrayKind: new (&array) auto(other.array); return; } WASM_UNREACHABLE("unexpected kind"); } HeapTypeInfo::~HeapTypeInfo() { switch (kind) { case BasicKind: return; case SignatureKind: signature.~Signature(); return; case StructKind: struct_.~Struct(); return; case ArrayKind: array.~Array(); return; } WASM_UNREACHABLE("unexpected kind"); } std::optional HeapTypeInfo::getCanonical() const { if (isFinalized && kind == BasicKind) { return basic; } return {}; } HeapTypeInfo& HeapTypeInfo::operator=(const HeapTypeInfo& other) { if (&other != this) { this->~HeapTypeInfo(); new (this) HeapTypeInfo(other); } return *this; } bool HeapTypeInfo::operator==(const HeapTypeInfo& other) const { return FiniteShapeEquator().eq(*this, other); } template struct Store { std::recursive_mutex mutex; // Track unique_ptrs for constructed types to avoid leaks. std::vector> constructedTypes; // Maps from constructed types to their canonical Type IDs. std::unordered_map, uintptr_t> typeIDs; #ifndef NDEBUG bool isGlobalStore(); #endif typename Info::type_t insert(const Info& info) { return doInsert(info); } typename Info::type_t insert(std::unique_ptr&& info) { return doInsert(info); } bool hasCanonical(const Info& info, typename Info::type_t& canonical); void clear() { typeIDs.clear(); constructedTypes.clear(); } private: template typename Info::type_t doInsert(Ref& infoRef) { const Info& info = [&]() { if constexpr (std::is_same_v) { return infoRef; } else if constexpr (std::is_same_v>) { infoRef->isTemp = false; return *infoRef; } }(); auto getPtr = [&]() -> std::unique_ptr { if constexpr (std::is_same_v) { return std::make_unique(infoRef); } else if constexpr (std::is_same_v>) { return std::move(infoRef); } }; auto insertNew = [&]() { assert((!isGlobalStore() || !info.isTemp) && "Leaking temporary type!"); auto ptr = getPtr(); TypeID id = uintptr_t(ptr.get()); assert(id > Info::type_t::_last_basic_type); typeIDs.insert({*ptr, id}); constructedTypes.emplace_back(std::move(ptr)); return typename Info::type_t(id); }; // Turn e.g. (ref null any) into anyref. if (auto canonical = info.getCanonical()) { return *canonical; } std::lock_guard lock(mutex); // Nominal HeapTypes are always unique, so don't bother deduplicating them. if constexpr (std::is_same_v) { if (typeSystem == TypeSystem::Nominal) { return insertNew(); } } // Check whether we already have a type for this structural Info. auto indexIt = typeIDs.find(std::cref(info)); if (indexIt != typeIDs.end()) { return typename Info::type_t(indexIt->second); } // We do not have a type for this Info already. Create one. return insertNew(); } }; using TypeStore = Store; using HeapTypeStore = Store; static TypeStore globalTypeStore; static HeapTypeStore globalHeapTypeStore; // Specialized to simplify programming generically over Types and HeapTypes. template struct MetaTypeInfo {}; template<> struct MetaTypeInfo { #ifndef NDEBUG constexpr static TypeStore& globalStore = globalTypeStore; #endif static TypeInfo* getInfo(Type type) { return getTypeInfo(type); } }; template<> struct MetaTypeInfo { #ifndef NDEBUG constexpr static HeapTypeStore& globalStore = globalHeapTypeStore; #endif static HeapTypeInfo* getInfo(HeapType ht) { return getHeapTypeInfo(ht); } }; #ifndef NDEBUG template bool Store::isGlobalStore() { return this == &MetaTypeInfo::globalStore; } #endif // Cache canonical nominal signature types. See comment in // `HeapType::HeapType(Signature)`. struct SignatureTypeCache { std::unordered_map cache; std::mutex mutex; HeapType getType(Signature sig) { std::lock_guard lock(mutex); // Try inserting a placeholder type, then replace it with a real type if we // don't already have a canonical type for this signature. auto [entry, inserted] = cache.insert({sig, {}}); auto& [_, type] = *entry; if (inserted) { type = globalHeapTypeStore.insert(sig); } return type; } void insertType(HeapType type) { std::lock_guard lock(mutex); cache.insert({type.getSignature(), type}); } void clear() { cache.clear(); } }; static SignatureTypeCache nominalSignatureCache; // Keep track of the constructed recursion groups. struct RecGroupStore { std::mutex mutex; // Store the structures of all rec groups created so far so we can avoid // creating duplicates. std::unordered_set canonicalGroups; // Keep the `RecGroupInfos` for the nontrivial groups stored in // `canonicalGroups` alive. std::vector> builtGroups; RecGroup insert(RecGroup group) { RecGroupStructure structure{group}; auto [it, inserted] = canonicalGroups.insert(structure); if (inserted) { return group; } else { return it->group; } } RecGroup insert(std::unique_ptr&& info) { RecGroup group{uintptr_t(info.get())}; auto canonical = insert(group); if (canonical == group) { builtGroups.emplace_back(std::move(info)); } return canonical; } // Utility for canonicalizing HeapTypes with trivial recursion groups. HeapType insert(std::unique_ptr&& info) { std::lock_guard lock(mutex); assert(!info->recGroup && "Unexpected nontrivial rec group"); auto group = asHeapType(info).getRecGroup(); auto canonical = insert(group); if (group == canonical) { globalHeapTypeStore.insert(std::move(info)); } return canonical[0]; } void clear() { canonicalGroups.clear(); builtGroups.clear(); } }; static RecGroupStore globalRecGroupStore; } // anonymous namespace void destroyAllTypesForTestingPurposesOnly() { globalTypeStore.clear(); globalHeapTypeStore.clear(); nominalSignatureCache.clear(); globalRecGroupStore.clear(); } Type::Type(std::initializer_list types) : Type(Tuple(types)) {} Type::Type(const Tuple& tuple) { #ifndef NDEBUG for (auto type : tuple.types) { assert(!isTemp(type) && "Leaking temporary type!"); } #endif new (this) Type(globalTypeStore.insert(tuple)); } Type::Type(Tuple&& tuple) { #ifndef NDEBUG for (auto type : tuple.types) { assert(!isTemp(type) && "Leaking temporary type!"); } #endif new (this) Type(globalTypeStore.insert(std::move(tuple))); } Type::Type(HeapType heapType, Nullability nullable) { assert(!isTemp(heapType) && "Leaking temporary type!"); new (this) Type(globalTypeStore.insert(TypeInfo(heapType, nullable))); } Type::Type(Rtt rtt) { assert(!isTemp(rtt.heapType) && "Leaking temporary type!"); new (this) Type(globalTypeStore.insert(rtt)); } bool Type::isTuple() const { if (isBasic()) { return false; } else { return getTypeInfo(*this)->isTuple(); } } bool Type::isRef() const { if (isBasic()) { return id >= funcref && id <= _last_basic_type; } else { return getTypeInfo(*this)->isRef(); } } bool Type::isFunction() const { if (isBasic()) { return id == funcref; } else { auto* info = getTypeInfo(*this); return info->isRef() && info->ref.heapType.isFunction(); } } bool Type::isData() const { if (isBasic()) { return id == dataref; } else { auto* info = getTypeInfo(*this); return info->isRef() && info->ref.heapType.isData(); } } bool Type::isNullable() const { if (isBasic()) { return id >= funcref && id <= eqref; // except i31ref and dataref } else { return getTypeInfo(*this)->isNullable(); } } bool Type::isNonNullable() const { if (isRef()) { return !isNullable(); } else { return false; } } bool Type::isRtt() const { if (isBasic()) { return false; } else { return getTypeInfo(*this)->isRtt(); } } bool Type::isStruct() const { return isRef() && getHeapType().isStruct(); } bool Type::isArray() const { return isRef() && getHeapType().isArray(); } bool Type::isDefaultable() const { // A variable can get a default value if its type is concrete (unreachable // and none have no values, hence no default), and if it's a reference, it // must be nullable. if (isTuple()) { for (auto t : *this) { if (!t.isDefaultable()) { return false; } } return true; } return isConcrete() && !isNonNullable() && !isRtt(); } bool Type::isDefaultableOrNonNullable() const { if (isTuple()) { for (auto t : *this) { if (!t.isDefaultableOrNonNullable()) { return false; } } return true; } return isConcrete() && !isRtt(); } Nullability Type::getNullability() const { return isNullable() ? Nullable : NonNullable; } unsigned Type::getByteSize() const { // TODO: alignment? auto getSingleByteSize = [](Type t) { switch (t.getBasic()) { case Type::i32: case Type::f32: return 4; case Type::i64: case Type::f64: return 8; case Type::v128: return 16; case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: case Type::unreachable: break; } WASM_UNREACHABLE("invalid type"); }; if (isTuple()) { unsigned size = 0; for (const auto& t : *this) { size += getSingleByteSize(t); } return size; } return getSingleByteSize(*this); } unsigned Type::hasByteSize() const { auto hasSingleByteSize = [](Type t) { return t.isNumber(); }; if (isTuple()) { for (const auto& t : *this) { if (!hasSingleByteSize(t)) { return false; } } return true; } return hasSingleByteSize(*this); } Type Type::reinterpret() const { assert(!isTuple() && "Unexpected tuple type"); switch ((*begin()).getBasic()) { case Type::i32: return f32; case Type::i64: return f64; case Type::f32: return i32; case Type::f64: return i64; default: WASM_UNREACHABLE("invalid type"); } } FeatureSet Type::getFeatures() const { auto getSingleFeatures = [](Type t) -> FeatureSet { if (t.isRef()) { // A reference type implies we need that feature. Some also require more, // such as GC or exceptions. auto heapType = t.getHeapType(); if (heapType.isStruct() || heapType.isArray()) { return FeatureSet::ReferenceTypes | FeatureSet::GC; } if (heapType.isBasic()) { switch (heapType.getBasic()) { case HeapType::BasicHeapType::eq: case HeapType::BasicHeapType::i31: case HeapType::BasicHeapType::data: return FeatureSet::ReferenceTypes | FeatureSet::GC; default: {} } } // Note: Technically typed function references also require the typed // function references feature, however, we use these types internally // regardless of the presence of features (in particular, since during // load of the wasm we don't know the features yet, so we apply the more // refined types), so we don't add that in any case here. return FeatureSet::ReferenceTypes; } else if (t.isRtt()) { return FeatureSet::ReferenceTypes | FeatureSet::GC; } TODO_SINGLE_COMPOUND(t); switch (t.getBasic()) { case Type::v128: return FeatureSet::SIMD; default: return FeatureSet::MVP; } }; if (isTuple()) { FeatureSet feats = FeatureSet::Multivalue; for (const auto& t : *this) { feats |= getSingleFeatures(t); } return feats; } return getSingleFeatures(*this); } const Tuple& Type::getTuple() const { assert(isTuple()); return getTypeInfo(*this)->tuple; } HeapType Type::getHeapType() const { if (isBasic()) { switch (getBasic()) { case Type::none: case Type::unreachable: case Type::i32: case Type::i64: case Type::f32: case Type::f64: case Type::v128: break; case Type::funcref: return HeapType::func; case Type::anyref: return HeapType::any; case Type::eqref: return HeapType::eq; case Type::i31ref: return HeapType::i31; case Type::dataref: return HeapType::data; } WASM_UNREACHABLE("Unexpected type"); } else { auto* info = getTypeInfo(*this); switch (info->kind) { case TypeInfo::TupleKind: break; case TypeInfo::RefKind: return info->ref.heapType; case TypeInfo::RttKind: return info->rtt.heapType; } WASM_UNREACHABLE("Unexpected type"); } } Rtt Type::getRtt() const { assert(isRtt()); return getTypeInfo(*this)->rtt; } Type Type::get(unsigned byteSize, bool float_) { if (byteSize < 4) { return Type::i32; } if (byteSize == 4) { return float_ ? Type::f32 : Type::i32; } if (byteSize == 8) { return float_ ? Type::f64 : Type::i64; } if (byteSize == 16) { return Type::v128; } WASM_UNREACHABLE("invalid size"); } bool Type::isSubType(Type left, Type right) { // As an optimization, in the common case do not even construct a SubTyper. if (left == right) { return true; } return SubTyper().isSubType(left, right); } std::vector Type::getHeapTypeChildren() { HeapTypeChildCollector collector; collector.walkRoot(this); return collector.children; } bool Type::hasLeastUpperBound(Type a, Type b) { return TypeBounder().hasLeastUpperBound(a, b); } Type Type::getLeastUpperBound(Type a, Type b) { return TypeBounder().getLeastUpperBound(a, b); } size_t Type::size() const { if (isTuple()) { return getTypeInfo(*this)->tuple.types.size(); } else { // TODO: unreachable is special and expands to {unreachable} currently. // see also: https://github.com/WebAssembly/binaryen/issues/3062 return size_t(id != Type::none); } } const Type& Type::Iterator::operator*() const { if (parent->isTuple()) { return getTypeInfo(*parent)->tuple.types[index]; } else { // TODO: see comment in Type::size() assert(index == 0 && parent->id != Type::none && "Index out of bounds"); return *parent; } } HeapType::HeapType(Signature sig) { assert(!isTemp(sig.params) && "Leaking temporary type!"); assert(!isTemp(sig.results) && "Leaking temporary type!"); switch (getTypeSystem()) { case TypeSystem::Nominal: // Special case the creation of signature types in nominal mode to return // a "canonical" type for the signature, which happens to be the first one // created. We depend on being able to create new function signatures in // many places, and historically they have always been structural, so // creating a copy of an existing signature did not result in any code // bloat or semantic changes. To avoid regressions or significant changes // of behavior in nominal mode, we cache the canonical heap types for each // signature to emulate structural behavior. new (this) HeapType(nominalSignatureCache.getType(sig)); return; case TypeSystem::Equirecursive: new (this) HeapType(globalHeapTypeStore.insert(sig)); return; case TypeSystem::Isorecursive: new (this) HeapType( globalRecGroupStore.insert(std::make_unique(sig))); return; } WASM_UNREACHABLE("unexpected type system"); } HeapType::HeapType(const Struct& struct_) { #ifndef NDEBUG for (const auto& field : struct_.fields) { assert(!isTemp(field.type) && "Leaking temporary type!"); } #endif switch (getTypeSystem()) { case TypeSystem::Nominal: case TypeSystem::Equirecursive: new (this) HeapType(globalHeapTypeStore.insert(struct_)); return; case TypeSystem::Isorecursive: new (this) HeapType( globalRecGroupStore.insert(std::make_unique(struct_))); return; } WASM_UNREACHABLE("unexpected type system"); } HeapType::HeapType(Struct&& struct_) { #ifndef NDEBUG for (const auto& field : struct_.fields) { assert(!isTemp(field.type) && "Leaking temporary type!"); } #endif switch (getTypeSystem()) { case TypeSystem::Nominal: case TypeSystem::Equirecursive: new (this) HeapType(globalHeapTypeStore.insert(std::move(struct_))); return; case TypeSystem::Isorecursive: new (this) HeapType(globalRecGroupStore.insert( std::make_unique(std::move(struct_)))); return; } WASM_UNREACHABLE("unexpected type system"); } HeapType::HeapType(Array array) { assert(!isTemp(array.element.type) && "Leaking temporary type!"); switch (getTypeSystem()) { case TypeSystem::Nominal: case TypeSystem::Equirecursive: new (this) HeapType(globalHeapTypeStore.insert(array)); return; case TypeSystem::Isorecursive: new (this) HeapType( globalRecGroupStore.insert(std::make_unique(array))); return; } WASM_UNREACHABLE("unexpected type system"); } bool HeapType::isFunction() const { if (isBasic()) { return id == func; } else { return getHeapTypeInfo(*this)->isSignature(); } } bool HeapType::isData() const { if (isBasic()) { return id == data; } else { return getHeapTypeInfo(*this)->isData(); } } bool HeapType::isSignature() const { if (isBasic()) { return false; } else { return getHeapTypeInfo(*this)->isSignature(); } } bool HeapType::isStruct() const { if (isBasic()) { return false; } else { return getHeapTypeInfo(*this)->isStruct(); } } bool HeapType::isArray() const { if (isBasic()) { return false; } else { return getHeapTypeInfo(*this)->isArray(); } } Signature HeapType::getSignature() const { assert(isSignature()); return getHeapTypeInfo(*this)->signature; } const Struct& HeapType::getStruct() const { assert(isStruct()); return getHeapTypeInfo(*this)->struct_; } Array HeapType::getArray() const { assert(isArray()); return getHeapTypeInfo(*this)->array; } std::optional HeapType::getSuperType() const { if (isBasic()) { return {}; } HeapTypeInfo* super = getHeapTypeInfo(*this)->supertype; if (super != nullptr) { return HeapType(uintptr_t(super)); } return {}; } size_t HeapType::getDepth() const { size_t depth = 0; std::optional super; for (auto curr = *this; (super = curr.getSuperType()); curr = *super) { ++depth; } return depth; } bool HeapType::isSubType(HeapType left, HeapType right) { // As an optimization, in the common case do not even construct a SubTyper. if (left == right) { return true; } return SubTyper().isSubType(left, right); } std::vector HeapType::getHeapTypeChildren() const { HeapTypeChildCollector collector; collector.walkRoot(const_cast(this)); return collector.children; } std::vector HeapType::getReferencedHeapTypes() const { auto types = getHeapTypeChildren(); if (auto super = getSuperType()) { types.push_back(*super); } return types; } HeapType HeapType::getLeastUpperBound(HeapType a, HeapType b) { return TypeBounder().getLeastUpperBound(a, b); } // Recursion groups with single elements are encoded as that single element's // type ID with the low bit set and other recursion groups are encoded with the // address of the vector containing their members. These encodings are disjoint // because the alignment of the vectors is greater than 1. static_assert(alignof(std::vector) > 1); RecGroup HeapType::getRecGroup() const { assert(!isBasic()); if (auto* info = getHeapTypeInfo(*this)->recGroup) { return RecGroup(uintptr_t(info)); } else { // Mark the low bit to signify that this is a trivial recursion group and // points to a heap type info rather than a vector of heap types. return RecGroup(id | 1); } } size_t HeapType::getRecGroupIndex() const { assert(!isBasic()); return getHeapTypeInfo(*this)->recGroupIndex; } HeapType RecGroup::Iterator::operator*() const { if (parent->id & 1) { // This is a trivial recursion group. Mask off the low bit to recover the // single HeapType. return {HeapType(parent->id & ~(uintptr_t)1)}; } else { return (*(std::vector*)parent->id)[index]; } } size_t RecGroup::size() const { if (id & 1) { return 1; } else { return ((std::vector*)id)->size(); } } TypeNames DefaultTypeNameGenerator::getNames(HeapType type) { auto [it, inserted] = nameCache.insert({type, {}}); if (inserted) { // Generate a new name for this type we have not previously seen. std::stringstream stream; if (type.isSignature()) { stream << "func." << funcCount++; } else if (type.isStruct()) { stream << "struct." << structCount++; } else if (type.isArray()) { stream << "array." << arrayCount++; } else { WASM_UNREACHABLE("unexpected kind"); } it->second = {stream.str(), {}}; } return it->second; } template static std::string genericToString(const T& t) { std::ostringstream ss; ss << t; return ss.str(); } std::string Type::toString() const { return genericToString(*this); } std::string HeapType::toString() const { return genericToString(*this); } std::string Tuple::toString() const { return genericToString(*this); } std::string Signature::toString() const { return genericToString(*this); } std::string Struct::toString() const { return genericToString(*this); } std::string Array::toString() const { return genericToString(*this); } std::string Rtt::toString() const { return genericToString(*this); } std::ostream& operator<<(std::ostream& os, Type type) { return TypePrinter(os).print(type); } std::ostream& operator<<(std::ostream& os, Type::Printed printed) { return TypePrinter(os, printed.generateName).print(Type(printed.typeID)); } std::ostream& operator<<(std::ostream& os, HeapType type) { return TypePrinter(os).print(type); } std::ostream& operator<<(std::ostream& os, HeapType::Printed printed) { return TypePrinter(os, printed.generateName).print(HeapType(printed.typeID)); } std::ostream& operator<<(std::ostream& os, Tuple tuple) { return TypePrinter(os).print(tuple); } std::ostream& operator<<(std::ostream& os, Signature sig) { return TypePrinter(os).print(sig); } std::ostream& operator<<(std::ostream& os, Field field) { return TypePrinter(os).print(field); } std::ostream& operator<<(std::ostream& os, Struct struct_) { return TypePrinter(os).print(struct_); } std::ostream& operator<<(std::ostream& os, Array array) { return TypePrinter(os).print(array); } std::ostream& operator<<(std::ostream& os, Rtt rtt) { return TypePrinter(os).print(rtt); } std::ostream& operator<<(std::ostream& os, TypeBuilder::ErrorReason reason) { switch (reason) { case TypeBuilder::ErrorReason::SelfSupertype: return os << "Heap type is a supertype of itself"; case TypeBuilder::ErrorReason::InvalidSupertype: return os << "Heap type has an invalid supertype"; case TypeBuilder::ErrorReason::ForwardSupertypeReference: return os << "Heap type has an undeclared supertype"; case TypeBuilder::ErrorReason::ForwardChildReference: return os << "Heap type has an undeclared child"; } WASM_UNREACHABLE("Unexpected error reason"); } unsigned Field::getByteSize() const { if (type != Type::i32) { return type.getByteSize(); } switch (packedType) { case Field::PackedType::i8: return 1; case Field::PackedType::i16: return 2; case Field::PackedType::not_packed: return 4; } WASM_UNREACHABLE("impossible packed type"); } namespace { bool SubTyper::isSubType(Type a, Type b) { if (a == b) { return true; } if (a == Type::unreachable) { return true; } if (a.isRef() && b.isRef()) { return (a.isNullable() == b.isNullable() || !a.isNullable()) && isSubType(a.getHeapType(), b.getHeapType()); } if (a.isTuple() && b.isTuple()) { return isSubType(a.getTuple(), b.getTuple()); } if (a.isRtt() && b.isRtt()) { return isSubType(a.getRtt(), b.getRtt()); } return false; } bool SubTyper::isSubType(HeapType a, HeapType b) { // See: // https://github.com/WebAssembly/function-references/blob/master/proposals/function-references/Overview.md#subtyping // https://github.com/WebAssembly/gc/blob/master/proposals/gc/MVP.md#defined-types if (a == b) { return true; } if (b.isBasic()) { switch (b.getBasic()) { case HeapType::func: return a.isSignature(); case HeapType::any: return true; case HeapType::eq: return a == HeapType::i31 || a.isData(); case HeapType::i31: return false; case HeapType::data: return a.isData(); } } if (a.isBasic()) { // Basic HeapTypes are never subtypes of compound HeapTypes. return false; } if (typeSystem == TypeSystem::Nominal || typeSystem == TypeSystem::Isorecursive) { // Subtyping must be declared in a nominal system, not derived from // structure, so we will not recurse. TODO: optimize this search with some // form of caching. HeapTypeInfo* curr = getHeapTypeInfo(a); while ((curr = curr->supertype)) { if (curr == getHeapTypeInfo(b)) { return true; } } return false; } // As we recurse, we will coinductively assume that a == b unless proven // otherwise. if (!seen.insert({a, b}).second) { // We weren't able to disprove that a == b since we last saw them, so the // relation holds coinductively. return true; } if (a.isSignature() && b.isSignature()) { return isSubType(a.getSignature(), b.getSignature()); } if (a.isArray() && b.isArray()) { return isSubType(a.getArray(), b.getArray()); } if (a.isStruct() && b.isStruct()) { return isSubType(a.getStruct(), b.getStruct()); } return false; } bool SubTyper::isSubType(const Tuple& a, const Tuple& b) { if (a.types.size() != b.types.size()) { return false; } for (size_t i = 0; i < a.types.size(); ++i) { if (!isSubType(a.types[i], b.types[i])) { return false; } } return true; } bool SubTyper::isSubType(const Field& a, const Field& b) { if (a == b) { return true; } // Immutable fields can be subtypes. return a.mutable_ == Immutable && b.mutable_ == Immutable && a.packedType == b.packedType && isSubType(a.type, b.type); } bool SubTyper::isSubType(const Signature& a, const Signature& b) { // TODO: Implement proper signature subtyping, covariant in results and // contravariant in params, once V8 implements it. // return isSubType(b.params, a.params) && isSubType(a.results, b.results); return a == b; } bool SubTyper::isSubType(const Struct& a, const Struct& b) { // There may be more fields on the left, but not fewer. if (a.fields.size() < b.fields.size()) { return false; } for (size_t i = 0; i < b.fields.size(); ++i) { if (!isSubType(a.fields[i], b.fields[i])) { return false; } } return true; } bool SubTyper::isSubType(const Array& a, const Array& b) { return isSubType(a.element, b.element); } bool SubTyper::isSubType(const Rtt& a, const Rtt& b) { // (rtt n $x) is a subtype of (rtt $x), that is, if the only difference in // information is that the left side specifies a depth while the right side // allows any depth. return a.heapType == b.heapType && a.hasDepth() && !b.hasDepth(); } bool TypeBounder::hasLeastUpperBound(Type a, Type b) { return bool(lub(a, b)); } Type TypeBounder::getLeastUpperBound(Type a, Type b) { auto tempLUB = lub(a, b); if (!tempLUB) { return Type::none; } if (!isTemp(*tempLUB)) { // The LUB is already canonical, so we're done. return *tempLUB; } // `tempLUB` is a temporary type owned by `builder`. Since TypeBuilder::build // returns HeapTypes rather than Types, create a new HeapType definition meant // only to get `tempLUB` canonicalized in a known location. The use of an // Array is arbitrary; it might as well have been a Struct. builder.grow(1); builder[builder.size() - 1] = Array(Field(*tempLUB, Mutable)); std::vector built = *builder.build(); return built.back().getArray().element.type; } HeapType TypeBounder::getLeastUpperBound(HeapType a, HeapType b) { HeapType l = lub(a, b); if (!isTemp(l)) { // The LUB is already canonical, so we're done. return l; } // Find the index corresponding to the LUB. size_t index = 0; while (l != builder[index]) { ++index; } // Canonicalize and return the LUB. return (*builder.build())[index]; } std::optional TypeBounder::lub(Type a, Type b) { if (a == b) { return a; } if (a == Type::unreachable) { return b; } if (b == Type::unreachable) { return a; } if (a.isTuple() && b.isTuple()) { auto tuple = lub(a.getTuple(), b.getTuple()); if (!tuple) { return {}; } return builder.getTempTupleType(*tuple); } else if (a.isRef() && b.isRef()) { auto nullability = (a.isNullable() || b.isNullable()) ? Nullable : NonNullable; HeapType heapType = lub(a.getHeapType(), b.getHeapType()); return builder.getTempRefType(heapType, nullability); } else if (a.isRtt() && b.isRtt()) { auto rtt = lub(a.getRtt(), b.getRtt()); if (!rtt) { return {}; } return builder.getTempRttType(*rtt); } return {}; } HeapType TypeBounder::lub(HeapType a, HeapType b) { if (a == b) { return a; } auto getBasicApproximation = [](HeapType x) { if (x.isBasic()) { return x.getBasic(); } auto* info = getHeapTypeInfo(x); switch (info->kind) { case HeapTypeInfo::BasicKind: break; case HeapTypeInfo::SignatureKind: return HeapType::func; case HeapTypeInfo::StructKind: case HeapTypeInfo::ArrayKind: return HeapType::data; } WASM_UNREACHABLE("unexpected kind"); }; auto getBasicLUB = [&]() { return lub(getBasicApproximation(a), getBasicApproximation(b)); }; if (a.isBasic() || b.isBasic()) { return getBasicLUB(); } HeapTypeInfo* infoA = getHeapTypeInfo(a); HeapTypeInfo* infoB = getHeapTypeInfo(b); if (infoA->kind != infoB->kind) { return getBasicLUB(); } if (typeSystem == TypeSystem::Nominal || typeSystem == TypeSystem::Isorecursive) { // Walk up the subtype tree to find the LUB. Ascend the tree from both `a` // and `b` in lockstep. The first type we see for a second time must be the // LUB because there are no cycles and the only way to encounter a type // twice is for it to be on the path above both `a` and `b`. std::unordered_set seen; auto* currA = infoA; auto* currB = infoB; seen.insert(currA); seen.insert(currB); while (true) { auto* nextA = currA->supertype; auto* nextB = currB->supertype; if (nextA == nullptr && nextB == nullptr) { // Did not find a LUB in the subtype tree. return getBasicLUB(); } if (nextA) { if (!seen.insert(nextA).second) { return HeapType(uintptr_t(nextA)); } currA = nextA; } if (nextB) { if (!seen.insert(nextB).second) { return HeapType(uintptr_t(nextB)); } currB = nextB; } } } // Allocate a new slot to construct the LUB of this pair if we have not // already seen it before. Canonicalize the pair to have the element with the // smaller ID first since order does not matter. auto pair = a.getID() < b.getID() ? std::make_pair(a, b) : std::make_pair(b, a); size_t index = builder.size(); auto result = indices.insert({pair, index}); if (!result.second) { // We've seen this pair before; stop recursing and do not allocate. return builder[result.first->second]; } builder.grow(1); switch (infoA->kind) { case HeapTypeInfo::BasicKind: WASM_UNREACHABLE("unexpected kind"); case HeapTypeInfo::SignatureKind: { if (auto sig = lub(infoA->signature, infoB->signature)) { return builder[index] = *sig; } else { return builder[index] = HeapType::func; } } case HeapTypeInfo::StructKind: { return builder[index] = lub(infoA->struct_, infoB->struct_); } case HeapTypeInfo::ArrayKind: { if (auto array = lub(infoA->array, infoB->array)) { return builder[index] = *array; } else { return builder[index] = HeapType::data; } } } WASM_UNREACHABLE("unexpected kind"); } HeapType::BasicHeapType TypeBounder::lub(HeapType::BasicHeapType a, HeapType::BasicHeapType b) { if (a == b) { return a; } // Canonicalize to have `x` be the lesser type. if (unsigned(a) > unsigned(b)) { std::swap(a, b); } switch (a) { case HeapType::func: case HeapType::any: return HeapType::any; case HeapType::eq: if (b == HeapType::i31 || b == HeapType::data) { return HeapType::eq; } return HeapType::any; case HeapType::i31: if (b == HeapType::data) { return HeapType::eq; } return HeapType::any; case HeapType::data: return HeapType::any; } WASM_UNREACHABLE("unexpected basic type"); } std::optional TypeBounder::lub(const Tuple& a, const Tuple& b) { if (a.types.size() != b.types.size()) { return {}; } Tuple result; result.types.resize(a.types.size()); for (size_t i = 0; i < a.types.size(); ++i) { if (auto type = lub(a.types[i], b.types[i])) { result.types[i] = *type; } else { return {}; } } return result; } std::optional TypeBounder::lub(const Field& a, const Field& b) { if (a == b) { return a; } // Mutable fields are invariant, so they would have had to be the same. if (a.mutable_ == Mutable || b.mutable_ == Mutable) { return {}; } // Packed types must match. if (a.isPacked() != b.isPacked() || (a.isPacked() && a.packedType != b.packedType)) { return {}; } // Either the packed types match or the types aren't packed. Type type; if (auto type = lub(a.type, b.type)) { Field result = a; result.type = *type; return result; } else { return {}; } } std::optional TypeBounder::lub(const Signature& a, const Signature& b) { // TODO: Implement proper signature subtyping, covariant in results and // contravariant in params, once V8 implements it. if (a != b) { return {}; } else { return a; } } Struct TypeBounder::lub(const Struct& a, const Struct& b) { Struct result; size_t numFields = std::min(a.fields.size(), b.fields.size()); for (size_t i = 0; i < numFields; ++i) { if (auto field = lub(a.fields[i], b.fields[i])) { result.fields.push_back(*field); } else { // Stop at the common prefix and ignore the rest. break; } } return result; } std::optional TypeBounder::lub(const Array& a, const Array& b) { if (auto elem = lub(a.element, b.element)) { return Array{*elem}; } else { return {}; } } std::optional TypeBounder::lub(const Rtt& a, const Rtt& b) { if (a.heapType != b.heapType) { return {}; } uint32_t depth = (a.depth == b.depth) ? a.depth : Rtt::NoDepth; return Rtt(depth, a.heapType); } void TypePrinter::printHeapTypeName(HeapType type) { if (type.isBasic()) { print(type); return; } os << '$' << generator(type).name; } void TypePrinter::printSupertypeOr(std::optional super, std::string other) { if (super) { printHeapTypeName(*super); } else { os << other; } } std::ostream& TypePrinter::print(Type type) { if (type.isBasic()) { switch (type.getBasic()) { case Type::none: return os << "none"; case Type::unreachable: return os << "unreachable"; case Type::i32: return os << "i32"; case Type::i64: return os << "i64"; case Type::f32: return os << "f32"; case Type::f64: return os << "f64"; case Type::v128: return os << "v128"; case Type::funcref: return os << "funcref"; case Type::anyref: return os << "anyref"; case Type::eqref: return os << "eqref"; case Type::i31ref: return os << "i31ref"; case Type::dataref: return os << "dataref"; } } if (isTemp(type)) { os << "(; temp ;) "; } #if TRACE_CANONICALIZATION os << "(;" << ((type.getID() >> 4) % 1000) << ";) "; #endif if (type.isTuple()) { print(type.getTuple()); } else if (type.isRef()) { os << "(ref "; if (type.isNullable()) { os << "null "; } printHeapTypeName(type.getHeapType()); os << ')'; } else if (type.isRtt()) { print(type.getRtt()); } else { WASM_UNREACHABLE("unexpected type"); } return os; } std::ostream& TypePrinter::print(HeapType type) { if (type.isBasic()) { switch (type.getBasic()) { case HeapType::func: return os << "func"; case HeapType::any: return os << "any"; case HeapType::eq: return os << "eq"; case HeapType::i31: return os << "i31"; case HeapType::data: return os << "data"; } } if (isTemp(type)) { os << "(; temp ;) "; } #if TRACE_CANONICALIZATION os << "(;" << ((type.getID() >> 4) % 1000) << ";)"; #endif if (getHeapTypeInfo(type)->kind == HeapTypeInfo::BasicKind) { os << "(; noncanonical ;) "; print(getHeapTypeInfo(type)->basic); } else if (type.isSignature()) { print(type.getSignature(), type.getSuperType()); } else if (type.isStruct()) { print(type.getStruct(), type.getSuperType()); } else if (type.isArray()) { print(type.getArray(), type.getSuperType()); } else { WASM_UNREACHABLE("unexpected type"); } return os; } std::ostream& TypePrinter::print(const Tuple& tuple) { os << '('; auto sep = ""; for (Type type : tuple.types) { os << sep; sep = " "; print(type); } return os << ')'; } std::ostream& TypePrinter::print(const Field& field) { if (field.mutable_) { os << "(mut "; } if (field.isPacked()) { auto packedType = field.packedType; if (packedType == Field::PackedType::i8) { os << "i8"; } else if (packedType == Field::PackedType::i16) { os << "i16"; } else { WASM_UNREACHABLE("unexpected packed type"); } } else { print(field.type); } if (field.mutable_) { os << ')'; } return os; } std::ostream& TypePrinter::print(const Signature& sig, std::optional super) { auto printPrefixed = [&](const char* prefix, Type type) { os << '(' << prefix; for (Type t : type) { os << ' '; print(t); } os << ')'; }; os << "(func"; if (printSupertypes) { os << "_subtype"; } if (sig.params.getID() != Type::none) { os << ' '; printPrefixed("param", sig.params); } if (sig.results.getID() != Type::none) { os << ' '; printPrefixed("result", sig.results); } if (printSupertypes) { os << ' '; printSupertypeOr(super, "func"); } return os << ')'; } std::ostream& TypePrinter::print(const Struct& struct_, std::optional super) { os << "(struct"; if (printSupertypes) { os << "_subtype"; } if (struct_.fields.size()) { os << " (field"; } for (const Field& field : struct_.fields) { os << ' '; print(field); } if (struct_.fields.size()) { os << ')'; } if (printSupertypes) { os << ' '; printSupertypeOr(super, "data"); } return os << ')'; } std::ostream& TypePrinter::print(const Array& array, std::optional super) { os << "(array"; if (printSupertypes) { os << "_subtype"; } os << ' '; print(array.element); if (printSupertypes) { os << ' '; printSupertypeOr(super, "data"); } return os << ')'; } std::ostream& TypePrinter::print(const Rtt& rtt) { os << "(rtt "; if (rtt.hasDepth()) { os << rtt.depth << ' '; } printHeapTypeName(rtt.heapType); return os << ')'; } size_t FiniteShapeHasher::hash(Type type) { size_t digest = wasm::hash(type.isBasic()); if (type.isBasic()) { rehash(digest, type.getID()); } else { hash_combine(digest, hash(*getTypeInfo(type))); } return digest; } size_t FiniteShapeHasher::hash(HeapType heapType) { size_t digest = wasm::hash(heapType.isBasic()); if (heapType.isBasic()) { rehash(digest, heapType.getID()); return digest; } if (topLevelOnly && currDepth > 0) { return digest; } auto it = seen.find(heapType); rehash(digest, it != seen.end()); if (it != seen.end()) { rehash(digest, it->second); return digest; } seen[heapType] = ++currStep; ++currDepth; hash_combine(digest, hash(*getHeapTypeInfo(heapType))); --currDepth; return digest; } size_t FiniteShapeHasher::hash(const TypeInfo& info) { size_t digest = wasm::hash(info.kind); switch (info.kind) { case TypeInfo::TupleKind: hash_combine(digest, hash(info.tuple)); return digest; case TypeInfo::RefKind: rehash(digest, info.ref.nullable); hash_combine(digest, hash(info.ref.heapType)); return digest; case TypeInfo::RttKind: hash_combine(digest, hash(info.rtt)); return digest; } WASM_UNREACHABLE("unexpected kind"); } size_t FiniteShapeHasher::hash(const HeapTypeInfo& info) { if (getTypeSystem() == TypeSystem::Nominal || getTypeSystem() == TypeSystem::Isorecursive) { return wasm::hash(uintptr_t(&info)); } // If the HeapTypeInfo is not finalized, then it is mutable and its shape // might change in the future. In that case, fall back to pointer identity to // keep the hash consistent until all the TypeBuilder's types are finalized. size_t digest = wasm::hash(info.isFinalized); if (!info.isFinalized) { rehash(digest, uintptr_t(&info)); return digest; } rehash(digest, info.kind); switch (info.kind) { case HeapTypeInfo::BasicKind: WASM_UNREACHABLE("Basic HeapTypeInfo should have been canonicalized"); case HeapTypeInfo::SignatureKind: hash_combine(digest, hash(info.signature)); return digest; case HeapTypeInfo::StructKind: hash_combine(digest, hash(info.struct_)); return digest; case HeapTypeInfo::ArrayKind: hash_combine(digest, hash(info.array)); return digest; } WASM_UNREACHABLE("unexpected kind"); } size_t FiniteShapeHasher::hash(const Tuple& tuple) { size_t digest = wasm::hash(tuple.types.size()); for (auto type : tuple.types) { hash_combine(digest, hash(type)); } return digest; } size_t FiniteShapeHasher::hash(const Field& field) { size_t digest = wasm::hash(field.packedType); rehash(digest, field.mutable_); hash_combine(digest, hash(field.type)); return digest; } size_t FiniteShapeHasher::hash(const Signature& sig) { size_t digest = hash(sig.params); hash_combine(digest, hash(sig.results)); return digest; } size_t FiniteShapeHasher::hash(const Struct& struct_) { size_t digest = wasm::hash(struct_.fields.size()); for (const auto& field : struct_.fields) { hash_combine(digest, hash(field)); } return digest; } size_t FiniteShapeHasher::hash(const Array& array) { return hash(array.element); } size_t FiniteShapeHasher::hash(const Rtt& rtt) { size_t digest = wasm::hash(rtt.depth); hash_combine(digest, hash(rtt.heapType)); return digest; } bool FiniteShapeEquator::eq(Type a, Type b) { if (a.isBasic() != b.isBasic()) { return false; } else if (a.isBasic()) { return a.getID() == b.getID(); } else { return eq(*getTypeInfo(a), *getTypeInfo(b)); } } bool FiniteShapeEquator::eq(HeapType a, HeapType b) { if (a.isBasic() != b.isBasic()) { return false; } else if (a.isBasic()) { return a.getID() == b.getID(); } if (topLevelOnly && currDepth > 0) { return true; } auto itA = seenA.find(a); auto itB = seenB.find(b); if ((itA != seenA.end()) != (itB != seenB.end())) { return false; } else if (itA != seenA.end()) { return itA->second == itB->second; } seenA[a] = seenB[b] = ++currStep; ++currDepth; bool ret = eq(*getHeapTypeInfo(a), *getHeapTypeInfo(b)); --currDepth; return ret; } bool FiniteShapeEquator::eq(const TypeInfo& a, const TypeInfo& b) { if (a.kind != b.kind) { return false; } switch (a.kind) { case TypeInfo::TupleKind: return eq(a.tuple, b.tuple); case TypeInfo::RefKind: return a.ref.nullable == b.ref.nullable && eq(a.ref.heapType, b.ref.heapType); case TypeInfo::RttKind: return eq(a.rtt, b.rtt); } WASM_UNREACHABLE("unexpected kind"); } bool FiniteShapeEquator::eq(const HeapTypeInfo& a, const HeapTypeInfo& b) { if (getTypeSystem() == TypeSystem::Nominal || getTypeSystem() == TypeSystem::Isorecursive) { return &a == &b; } if (a.isFinalized != b.isFinalized) { return false; } else if (!a.isFinalized) { // See comment on corresponding FiniteShapeHasher method. return &a == &b; } if (a.kind != b.kind) { return false; } switch (a.kind) { case HeapTypeInfo::BasicKind: WASM_UNREACHABLE("Basic HeapTypeInfo should have been canonicalized"); case HeapTypeInfo::SignatureKind: return eq(a.signature, b.signature); case HeapTypeInfo::StructKind: return eq(a.struct_, b.struct_); case HeapTypeInfo::ArrayKind: return eq(a.array, b.array); } WASM_UNREACHABLE("unexpected kind"); } bool FiniteShapeEquator::eq(const Tuple& a, const Tuple& b) { return std::equal(a.types.begin(), a.types.end(), b.types.begin(), b.types.end(), [&](const Type& x, const Type& y) { return eq(x, y); }); } bool FiniteShapeEquator::eq(const Field& a, const Field& b) { return a.packedType == b.packedType && a.mutable_ == b.mutable_ && eq(a.type, b.type); } bool FiniteShapeEquator::eq(const Signature& a, const Signature& b) { return eq(a.params, b.params) && eq(a.results, b.results); } bool FiniteShapeEquator::eq(const Struct& a, const Struct& b) { return std::equal(a.fields.begin(), a.fields.end(), b.fields.begin(), b.fields.end(), [&](const Field& x, const Field& y) { return eq(x, y); }); } bool FiniteShapeEquator::eq(const Array& a, const Array& b) { return eq(a.element, b.element); } bool FiniteShapeEquator::eq(const Rtt& a, const Rtt& b) { return a.depth == b.depth && eq(a.heapType, b.heapType); } size_t RecGroupHasher::operator()() const { size_t digest = wasm::hash(group.size()); for (auto type : group) { hash_combine(digest, topLevelHash(type)); } return digest; } size_t RecGroupHasher::topLevelHash(HeapType type) const { size_t digest = wasm::hash(type.isBasic()); if (type.isBasic()) { wasm::rehash(digest, type.getID()); } else { hash_combine(digest, hash(*getHeapTypeInfo(type))); } return digest; } size_t RecGroupHasher::hash(Type type) const { size_t digest = wasm::hash(type.isBasic()); if (type.isBasic()) { wasm::rehash(digest, type.getID()); } else { hash_combine(digest, hash(*getTypeInfo(type))); } return digest; } size_t RecGroupHasher::hash(HeapType type) const { // Do not recurse into the structure of this child type, but rather hash it as // an index into a rec group. Only take the rec group identity into account if // the child is not a member of the top-level group because in that case the // group may not be canonicalized yet. size_t digest = wasm::hash(type.isBasic()); if (type.isBasic()) { wasm::rehash(digest, type.getID()); return digest; } wasm::rehash(digest, type.getRecGroupIndex()); auto currGroup = type.getRecGroup(); if (currGroup != group) { wasm::rehash(digest, currGroup.getID()); } return digest; } size_t RecGroupHasher::hash(const TypeInfo& info) const { size_t digest = wasm::hash(info.kind); switch (info.kind) { case TypeInfo::TupleKind: hash_combine(digest, hash(info.tuple)); return digest; case TypeInfo::RefKind: rehash(digest, info.ref.nullable); hash_combine(digest, hash(info.ref.heapType)); return digest; case TypeInfo::RttKind: hash_combine(digest, hash(info.rtt)); return digest; } WASM_UNREACHABLE("unexpected kind"); } size_t RecGroupHasher::hash(const HeapTypeInfo& info) const { assert(info.isFinalized); size_t digest = wasm::hash(bool(info.supertype)); if (info.supertype) { hash_combine(digest, hash(HeapType(uintptr_t(info.supertype)))); } wasm::rehash(digest, info.kind); switch (info.kind) { case HeapTypeInfo::BasicKind: WASM_UNREACHABLE("Basic HeapTypeInfo should have been canonicalized"); case HeapTypeInfo::SignatureKind: hash_combine(digest, hash(info.signature)); return digest; case HeapTypeInfo::StructKind: hash_combine(digest, hash(info.struct_)); return digest; case HeapTypeInfo::ArrayKind: hash_combine(digest, hash(info.array)); return digest; } WASM_UNREACHABLE("unexpected kind"); } size_t RecGroupHasher::hash(const Tuple& tuple) const { size_t digest = wasm::hash(tuple.types.size()); for (auto type : tuple.types) { hash_combine(digest, hash(type)); } return digest; } size_t RecGroupHasher::hash(const Field& field) const { size_t digest = wasm::hash(field.packedType); rehash(digest, field.mutable_); hash_combine(digest, hash(field.type)); return digest; } size_t RecGroupHasher::hash(const Signature& sig) const { size_t digest = hash(sig.params); hash_combine(digest, hash(sig.results)); return digest; } size_t RecGroupHasher::hash(const Struct& struct_) const { size_t digest = wasm::hash(struct_.fields.size()); for (const auto& field : struct_.fields) { hash_combine(digest, hash(field)); } return digest; } size_t RecGroupHasher::hash(const Array& array) const { return hash(array.element); } size_t RecGroupHasher::hash(const Rtt& rtt) const { size_t digest = wasm::hash(rtt.depth); hash_combine(digest, hash(rtt.heapType)); return digest; } bool RecGroupEquator::operator()() const { if (newGroup == otherGroup) { return true; } // The rec groups are equivalent if they are piecewise equivalent. return std::equal( newGroup.begin(), newGroup.end(), otherGroup.begin(), otherGroup.end(), [&](const HeapType& a, const HeapType& b) { return topLevelEq(a, b); }); } bool RecGroupEquator::topLevelEq(HeapType a, HeapType b) const { if (a == b) { return true; } if (a.isBasic() || b.isBasic()) { return false; } return eq(*getHeapTypeInfo(a), *getHeapTypeInfo(b)); } bool RecGroupEquator::eq(Type a, Type b) const { if (a == b) { return true; } if (a.isBasic() || b.isBasic()) { return false; } return eq(*getTypeInfo(a), *getTypeInfo(b)); } bool RecGroupEquator::eq(HeapType a, HeapType b) const { // Do not recurse into the structure of children `a` and `b`, but check // whether their recursion groups and indices match. Since `newGroup` may not // be canonicalized, explicitly check whether `a` and `b` are in the // respective recursion groups of the respective top-level groups we are // comparing, in which case the structure is still equivalent. if (a.isBasic() || b.isBasic()) { return a == b; } if (a.getRecGroupIndex() != b.getRecGroupIndex()) { return false; } auto groupA = a.getRecGroup(); auto groupB = b.getRecGroup(); return groupA == groupB || (groupA == newGroup && groupB == otherGroup); } bool RecGroupEquator::eq(const TypeInfo& a, const TypeInfo& b) const { if (a.kind != b.kind) { return false; } switch (a.kind) { case TypeInfo::TupleKind: return eq(a.tuple, b.tuple); case TypeInfo::RefKind: return a.ref.nullable == b.ref.nullable && eq(a.ref.heapType, b.ref.heapType); case TypeInfo::RttKind: return eq(a.rtt, b.rtt); } WASM_UNREACHABLE("unexpected kind"); } bool RecGroupEquator::eq(const HeapTypeInfo& a, const HeapTypeInfo& b) const { if (bool(a.supertype) != bool(b.supertype)) { return false; } if (a.supertype) { HeapType superA(uintptr_t(a.supertype)); HeapType superB(uintptr_t(b.supertype)); if (!eq(superA, superB)) { return false; } } if (a.kind != b.kind) { return false; } switch (a.kind) { case HeapTypeInfo::BasicKind: WASM_UNREACHABLE("Basic HeapTypeInfo should have been canonicalized"); case HeapTypeInfo::SignatureKind: return eq(a.signature, b.signature); case HeapTypeInfo::StructKind: return eq(a.struct_, b.struct_); case HeapTypeInfo::ArrayKind: return eq(a.array, b.array); } WASM_UNREACHABLE("unexpected kind"); } bool RecGroupEquator::eq(const Tuple& a, const Tuple& b) const { return std::equal(a.types.begin(), a.types.end(), b.types.begin(), b.types.end(), [&](const Type& x, const Type& y) { return eq(x, y); }); } bool RecGroupEquator::eq(const Field& a, const Field& b) const { return a.packedType == b.packedType && a.mutable_ == b.mutable_ && eq(a.type, b.type); } bool RecGroupEquator::eq(const Signature& a, const Signature& b) const { return eq(a.params, b.params) && eq(a.results, b.results); } bool RecGroupEquator::eq(const Struct& a, const Struct& b) const { return std::equal(a.fields.begin(), a.fields.end(), b.fields.begin(), b.fields.end(), [&](const Field& x, const Field& y) { return eq(x, y); }); } bool RecGroupEquator::eq(const Array& a, const Array& b) const { return eq(a.element, b.element); } bool RecGroupEquator::eq(const Rtt& a, const Rtt& b) const { return a.depth == b.depth && eq(a.heapType, b.heapType); } template void TypeGraphWalkerBase::walkRoot(Type* type) { assert(taskList.empty()); taskList.push_back(Task::scan(type)); doWalk(); } template void TypeGraphWalkerBase::walkRoot(HeapType* ht) { assert(taskList.empty()); taskList.push_back(Task::scan(ht)); doWalk(); } template void TypeGraphWalkerBase::doWalk() { while (!taskList.empty()) { auto curr = taskList.back(); taskList.pop_back(); switch (curr.kind) { case Task::PreType: self().preVisitType(curr.type); break; case Task::PreHeapType: self().preVisitHeapType(curr.heapType); break; case Task::ScanType: taskList.push_back(Task::postVisit(curr.type)); self().scanType(curr.type); taskList.push_back(Task::preVisit(curr.type)); break; case Task::ScanHeapType: taskList.push_back(Task::postVisit(curr.heapType)); self().scanHeapType(curr.heapType); taskList.push_back(Task::preVisit(curr.heapType)); break; case Task::PostType: self().postVisitType(curr.type); break; case Task::PostHeapType: self().postVisitHeapType(curr.heapType); break; } } } template void TypeGraphWalkerBase::scanType(Type* type) { if (type->isBasic()) { return; } auto* info = getTypeInfo(*type); switch (info->kind) { case TypeInfo::TupleKind: { auto& types = info->tuple.types; for (auto it = types.rbegin(); it != types.rend(); ++it) { taskList.push_back(Task::scan(&*it)); } break; } case TypeInfo::RefKind: { taskList.push_back(Task::scan(&info->ref.heapType)); break; } case TypeInfo::RttKind: taskList.push_back(Task::scan(&info->rtt.heapType)); break; } } template void TypeGraphWalkerBase::scanHeapType(HeapType* ht) { if (ht->isBasic()) { return; } auto* info = getHeapTypeInfo(*ht); switch (info->kind) { case HeapTypeInfo::BasicKind: break; case HeapTypeInfo::SignatureKind: taskList.push_back(Task::scan(&info->signature.results)); taskList.push_back(Task::scan(&info->signature.params)); break; case HeapTypeInfo::StructKind: { auto& fields = info->struct_.fields; for (auto field = fields.rbegin(); field != fields.rend(); ++field) { taskList.push_back(Task::scan(&field->type)); } break; } case HeapTypeInfo::ArrayKind: taskList.push_back(Task::scan(&info->array.element.type)); break; } } } // anonymous namespace struct TypeBuilder::Impl { // Store of temporary Types. Types that need to be canonicalized will be // copied into the global TypeStore. TypeStore typeStore; // Store of temporary recursion groups, which will be moved to the global // collection of recursion groups as part of building. std::vector> recGroups; struct Entry { std::unique_ptr info; bool initialized = false; Entry() { // We need to eagerly allocate the HeapTypeInfo so we have a TypeID to use // to refer to it before it is initialized. Arbitrarily choose a default // value. info = std::make_unique(Signature()); set(Signature()); initialized = false; } void set(HeapTypeInfo&& hti) { hti.supertype = info->supertype; hti.recGroup = info->recGroup; *info = std::move(hti); info->isTemp = true; info->isFinalized = false; initialized = true; } HeapType get() { return HeapType(TypeID(info.get())); } }; std::vector entries; Impl(size_t n) : entries(n) {} }; TypeBuilder::TypeBuilder(size_t n) { impl = std::make_unique(n); } TypeBuilder::~TypeBuilder() = default; TypeBuilder::TypeBuilder(TypeBuilder&& other) = default; TypeBuilder& TypeBuilder::operator=(TypeBuilder&& other) = default; void TypeBuilder::grow(size_t n) { assert(size() + n > size()); impl->entries.resize(size() + n); } size_t TypeBuilder::size() { return impl->entries.size(); } void TypeBuilder::setHeapType(size_t i, HeapType::BasicHeapType basic) { assert(i < size() && "Index out of bounds"); impl->entries[i].set(basic); } void TypeBuilder::setHeapType(size_t i, Signature signature) { assert(i < size() && "index out of bounds"); impl->entries[i].set(signature); } void TypeBuilder::setHeapType(size_t i, const Struct& struct_) { assert(i < size() && "index out of bounds"); impl->entries[i].set(struct_); } void TypeBuilder::setHeapType(size_t i, Struct&& struct_) { assert(i < size() && "index out of bounds"); impl->entries[i].set(std::move(struct_)); } void TypeBuilder::setHeapType(size_t i, Array array) { assert(i < size() && "index out of bounds"); impl->entries[i].set(array); } bool TypeBuilder::isBasic(size_t i) { assert(i < size() && "index out of bounds"); return impl->entries[i].info->kind == HeapTypeInfo::BasicKind; } HeapType::BasicHeapType TypeBuilder::getBasic(size_t i) { assert(isBasic(i)); return impl->entries[i].info->basic; } HeapType TypeBuilder::getTempHeapType(size_t i) { assert(i < size() && "index out of bounds"); return impl->entries[i].get(); } Type TypeBuilder::getTempTupleType(const Tuple& tuple) { Type ret = impl->typeStore.insert(tuple); if (tuple.types.size() > 1) { return markTemp(ret); } else { // No new tuple was created, so the result might not be temporary. return ret; } } Type TypeBuilder::getTempRefType(HeapType type, Nullability nullable) { return markTemp(impl->typeStore.insert(TypeInfo(type, nullable))); } Type TypeBuilder::getTempRttType(Rtt rtt) { return markTemp(impl->typeStore.insert(rtt)); } void TypeBuilder::setSubType(size_t i, size_t j) { assert(i < size() && j < size() && "index out of bounds"); HeapTypeInfo* sub = impl->entries[i].info.get(); HeapTypeInfo* super = impl->entries[j].info.get(); sub->supertype = super; } void TypeBuilder::createRecGroup(size_t i, size_t length) { assert(i <= size() && i + length <= size() && "group out of bounds"); // Only materialize nontrivial recursion groups. if (length < 2) { return; } auto& groups = impl->recGroups; groups.emplace_back(std::make_unique()); for (; length > 0; --length) { auto& info = impl->entries[i + length - 1].info; assert(info->recGroup == nullptr && "group already assigned"); info->recGroup = groups.back().get(); } } namespace { // Helper for TypeBuilder::build() that keeps track of temporary types and // provides logic for replacing them gradually with more canonical types. struct CanonicalizationState { // The list of types being built and canonicalized. Will eventually be // returned to the TypeBuilder user. std::vector results; // The newly constructed, temporary HeapTypeInfos that still need to be // canonicalized. std::vector> newInfos; // Either the fully canonical HeapType or a new temporary HeapTypeInfo that a // previous HeapTypeInfo will be replaced with. struct Replacement : std::variant> { using Super = std::variant>; Replacement(std::unique_ptr&& info) : Super(std::move(info)) {} Replacement(HeapType type) : Super(type) {} HeapType* getHeapType() { return std::get_if(this); } std::unique_ptr* getHeapTypeInfo() { return std::get_if>(this); } HeapType getAsHeapType() { if (auto* type = getHeapType()) { return *type; } return asHeapType(*getHeapTypeInfo()); } }; using ReplacementMap = std::unordered_map; // Updates the `results` and `newInfo` lists, but does not modify any of the // infos to update HeapType use sites. void updateShallow(ReplacementMap& replacements); // Updates the HeapType use sites within `info`. void updateUses(ReplacementMap& replacements, std::unique_ptr& info); // Updates lists and uses. void update(ReplacementMap& replacements); #if TRACE_CANONICALIZATION void dump() { std::cerr << "Results:\n"; for (size_t i = 0; i < results.size(); ++i) { std::cerr << i << ": " << results[i] << "\n"; } std::cerr << "NewInfos:\n"; for (size_t i = 0; i < newInfos.size(); ++i) { std::cerr << asHeapType(newInfos[i]) << "\n"; } std::cerr << '\n'; } #endif // TRACE_CANONICALIZATION }; void CanonicalizationState::update(ReplacementMap& replacements) { if (replacements.empty()) { return; } updateShallow(replacements); for (auto& info : newInfos) { updateUses(replacements, info); } } void CanonicalizationState::updateShallow(ReplacementMap& replacements) { if (replacements.empty()) { return; } // Update the results vector. for (auto& type : results) { if (auto it = replacements.find(type); it != replacements.end()) { type = it->second.getAsHeapType(); } } // Remove replaced types from newInfos. bool needsConsolidation = false; for (auto& info : newInfos) { HeapType oldType = asHeapType(info); if (auto it = replacements.find(oldType); it != replacements.end()) { auto& replacement = it->second; if (auto* newInfo = replacement.getHeapTypeInfo()) { // Replace the old info with the new info in `newInfos`, replacing the // moved info in `replacement` with the corresponding new HeapType so we // can still perform the correct replacement in the next step. HeapType newType = asHeapType(*newInfo); info = std::move(*newInfo); replacement = {newType}; } else { // The old info is replaced, but there is no new Info to replace it, so // just delete the old info. We will remove the holes in `newInfos` // afterwards. info = nullptr; needsConsolidation = true; } } } if (needsConsolidation) { newInfos.erase(std::remove(newInfos.begin(), newInfos.end(), nullptr), newInfos.end()); } } void CanonicalizationState::updateUses(ReplacementMap& replacements, std::unique_ptr& info) { if (replacements.empty()) { return; } // Replace all old types reachable from `info`. struct ChildUpdater : HeapTypeChildWalker { ReplacementMap& replacements; ChildUpdater(ReplacementMap& replacements) : replacements(replacements) {} void noteChild(HeapType* child) { if (auto it = replacements.find(*child); it != replacements.end()) { *child = it->second.getAsHeapType(); } } }; HeapType root = asHeapType(info); ChildUpdater(replacements).walkRoot(&root); // We may need to update its supertype as well. if (info->supertype) { HeapType super(uintptr_t(info->supertype)); if (auto it = replacements.find(super); it != replacements.end()) { info->supertype = getHeapTypeInfo(it->second.getAsHeapType()); } } } // A wrapper around a HeapType that provides equality and hashing based only on // its top-level shape, up to but not including its closest HeapType // descendants. This is the shape that determines the most fine-grained initial // partitions for DFA minimization and also the shape that determines the // "alphabet" for transitioning to the child HeapTypes in the DFA view of the // type definition. struct ShallowHeapType { HeapType heapType; ShallowHeapType(HeapType heapType) : heapType(heapType) {} bool operator==(const ShallowHeapType& other) const; }; bool ShallowHeapType::operator==(const ShallowHeapType& other) const { return FiniteShapeEquator(/*topLevelOnly=*/true) .eq(this->heapType, other.heapType); } } // anonymous namespace } // namespace wasm namespace std { template<> class hash { public: size_t operator()(const wasm::ShallowHeapType& type) const { return wasm::FiniteShapeHasher(/*topLevelOnly=*/true).hash(type.heapType); } }; } // namespace std namespace wasm { namespace { // The Refined Partitions data structure used in Valmari-Lehtinen DFA // minimization. The translation from terms used in the Valmari-Lehtinen paper // to the more expanded terms used here is: // // Block => Set // elems => elements // loc => elementIndices // sidx => setIndices // first => beginnings // end => endings // mid => pivots // struct Partitions { // The number of sets. size_t sets = 0; // The partitioned elements. Elements in the same set are next to each other. // Within each set, "marked" elements come first followed by "unmarked" // elements. std::vector elements; // Maps elements to their indices in `elements`. std::vector elementIndices; // Maps elements to their sets, identified by an index. std::vector setIndices; // Maps sets to the indices of their first elements in `elements`. std::vector beginnings; // Maps sets to (one past) the indices of their ends in `elements`. std::vector endings; // Maps sets to the indices of their first unmarked elements in `elements`. std::vector pivots; Partitions() = default; // Allocate space up front so we never need to re-allocate. The actual // contents of all the vectors will need to be externally initialized, // though. Partitions(size_t size) : elements(size), elementIndices(size), setIndices(size), beginnings(size), endings(size), pivots(size) {} struct Set { using Iterator = std::vector::iterator; Partitions& partitions; size_t index; Set(Partitions& partitions, size_t index) : partitions(partitions), index(index) {} Iterator begin() { return partitions.elements.begin() + partitions.beginnings[index]; } Iterator end() { return partitions.elements.begin() + partitions.endings[index]; } size_t size() { return partitions.endings[index] - partitions.beginnings[index]; } bool hasMarks() { return partitions.pivots[index] != partitions.beginnings[index]; } // Split the set between marked and unmarked elements if there are both // marked and unmarked elements. Unmark all elements of this set regardless. // Return the index of the new partition or 0 if there was no split. size_t split(); }; Set getSet(size_t index) { return {*this, index}; } // Returns the set containing an element, which can be iterated upon. The set // may be invalidated by calls to `mark` or `Set::split`. Set getSetForElem(size_t element) { return getSet(setIndices[element]); } void mark(size_t element) { size_t index = elementIndices[element]; size_t set = setIndices[element]; size_t pivot = pivots[set]; if (index >= pivot) { // Move the pivot element into the location of the newly marked element. elements[index] = elements[pivot]; elementIndices[elements[index]] = index; // Move the newly marked element into the pivot location. elements[pivot] = element; elementIndices[element] = pivot; // Update the pivot index to mark the element. ++pivots[set]; } } }; size_t Partitions::Set::split() { size_t begin = partitions.beginnings[index]; size_t end = partitions.endings[index]; size_t pivot = partitions.pivots[index]; if (pivot == begin) { // No elements marked, so there is nothing to do. return 0; } if (pivot == end) { // All elements were marked, so just unmark them. partitions.pivots[index] = begin; return 0; } // Create a new set covering the marked region. size_t newIndex = partitions.sets++; partitions.beginnings[newIndex] = begin; partitions.pivots[newIndex] = begin; partitions.endings[newIndex] = pivot; for (size_t i = begin; i < pivot; ++i) { partitions.setIndices[partitions.elements[i]] = newIndex; } // Update the old set. The end and pivot are already correct. partitions.beginnings[index] = pivot; return newIndex; } // Uses Valmari and Lehtinen's partial DFA minimization algorithm to construct a // minimal type definition graph from an input graph. See // https://arxiv.org/pdf/0802.2826.pdf. struct ShapeCanonicalizer { // The results of shape canonicalization. CanonicalizationState::ReplacementMap replacements; ShapeCanonicalizer(std::vector& roots); private: // Maps state indices to their underlying HeapTypes and vice versa. std::vector heapTypes; std::unordered_map states; // A DFA transition into a state. struct Transition { size_t pred; size_t label; }; // The transitions arranged such that the transitions leading to state `q` are // `transitions[transitionIndices[q] : transitionIndices[q+1]]`. std::vector transitions; std::vector transitionIndices; // The state partitions. Partitions partitions; // The splitters, which are partitions of the input transitions. Partitions splitters; void initialize(std::vector& roots); void createReplacements(); // Return pointers to the non-basic HeapType children of `ht`, including // BasicKind children. std::vector getChildren(HeapType ht); #if TRACE_CANONICALIZATION void dumpPartitions() { for (size_t set = 0; set < partitions.sets; ++set) { std::cerr << "Partition " << set << '\n'; std::cerr << "begin: " << partitions.beginnings[set] << ", end: " << partitions.endings[set] << ", pivot: " << partitions.pivots[set] << '\n'; for (size_t index : partitions.getSet(set)) { assert(partitions.setIndices[index] == set); std::cerr << heapTypes[index] << '\n'; } std::cerr << '\n'; } } #endif }; ShapeCanonicalizer::ShapeCanonicalizer(std::vector& roots) { #if TRACE_CANONICALIZATION std::cerr << "Root HeapTypes:\n"; for (auto root : roots) { std::cerr << root << '\n'; } std::cerr << '\n'; #endif initialize(roots); #if TRACE_CANONICALIZATION std::cerr << "Initial partitions:\n"; dumpPartitions(); #endif // The list of splitter partitions that might be able to split states in some // state partition. Starts out containing all splitter partitions. std::vector potentialSplitters; potentialSplitters.reserve(splitters.sets); for (size_t i = 0; i < splitters.sets; ++i) { potentialSplitters.push_back(i); } while (!potentialSplitters.empty()) { size_t potentialSplitter = potentialSplitters.back(); potentialSplitters.pop_back(); // The partitions that may be able to be split. std::vector markedPartitions; // Mark states that are predecessors via this splitter partition. for (size_t transition : splitters.getSet(potentialSplitter)) { size_t state = transitions[transition].pred; auto partition = partitions.getSetForElem(state); if (!partition.hasMarks()) { markedPartitions.push_back(partition.index); } partitions.mark(state); } // Try to split each partition with marked states. for (size_t partition : markedPartitions) { size_t newPartition = partitions.getSet(partition).split(); if (!newPartition) { // There was nothing to split. continue; } // We only want to keep using the smaller of the two split partitions. if (partitions.getSet(newPartition).size() < partitions.getSet(partition).size()) { newPartition = partition; } // The splitter partitions that may need to be split to match the new // split of the state partitions. std::vector markedSplitters; // Mark transitions that lead to the newly split off states. for (size_t state : partitions.getSet(newPartition)) { for (size_t t = transitionIndices[state], end = transitionIndices[state + 1]; t < end; ++t) { auto splitter = splitters.getSetForElem(t); if (!splitter.hasMarks()) { markedSplitters.push_back(splitter.index); } splitters.mark(t); } } // Split the splitters and update `potentialSplitters`. for (size_t splitter : markedSplitters) { size_t newSplitter = splitters.getSet(splitter).split(); if (newSplitter) { potentialSplitters.push_back(newSplitter); } } } } #if TRACE_CANONICALIZATION std::cerr << "Final partitions:\n"; dumpPartitions(); #endif createReplacements(); } void ShapeCanonicalizer::initialize(std::vector& roots) { struct Initializer : HeapTypeGraphWalker { ShapeCanonicalizer& canonicalizer; // Maps shallow HeapType shapes to corresponding HeapType indices. InsertOrderedMap> initialPartitions; // Maps `dest` HeapType indices to their input transitions. std::map> transitions; size_t numTransitions = 0; Initializer(ShapeCanonicalizer& canonicalizer) : canonicalizer(canonicalizer) {} size_t getIndex(HeapType type) { // Allocate an index for the HeapType if it doesn't already have one. auto inserted = canonicalizer.states.insert({type, canonicalizer.states.size()}); if (inserted.second) { canonicalizer.heapTypes.push_back(type); } return inserted.first->second; } void noteHeapType(HeapType type) { size_t index = getIndex(type); // Allocate an initial partition for this HeapType's shallow shape if one // does not already exist, then append the HeapType to the partition. initialPartitions[ShallowHeapType(type)].push_back(index); // Traverse the non-basic children to collect graph edges, i.e. // transitions in the DFA. struct TransitionInitializer : HeapTypeChildWalker { Initializer& initializer; size_t parent; size_t label = 0; TransitionInitializer(Initializer& initializer, size_t parent) : initializer(initializer), parent(parent) {} void noteChild(HeapType* childType) { if (childType->isBasic()) { return; } // Record the transition from parent to child. size_t child = initializer.getIndex(*childType); initializer.transitions[child].push_back({parent, label++}); ++initializer.numTransitions; } }; TransitionInitializer(*this, index).walkRoot(&type); } }; Initializer initializer(*this); for (HeapType& root : roots) { initializer.walkRoot(&root); } // Now that we have initialized maps containing all the necessary data, use // them to initialize the flattened vector-based data structures that we will // use to efficiently run the minimization algorithm. // Initialize `partitions`. partitions = Partitions(heapTypes.size()); size_t elementIndex = 0; for (auto pair : initializer.initialPartitions) { size_t set = partitions.sets++; partitions.beginnings[set] = elementIndex; partitions.pivots[set] = elementIndex; for (size_t elem : pair.second) { partitions.elements[elementIndex] = elem; partitions.elementIndices[elem] = elementIndex; partitions.setIndices[elem] = set; ++elementIndex; } partitions.endings[set] = elementIndex; } // Initialize `transitions` and `transitionIndices`. transitions.reserve(initializer.numTransitions); transitionIndices.resize(heapTypes.size() + 1); for (size_t dest = 0; dest < heapTypes.size(); ++dest) { // Record the first index of transitions leading to `dest`. transitionIndices[dest] = transitions.size(); auto it = initializer.transitions.find(dest); if (it != initializer.transitions.end()) { transitions.insert( transitions.end(), it->second.begin(), it->second.end()); } } // Record one-past the end of the transitions leading to the final `dest`. transitionIndices[heapTypes.size()] = transitions.size(); // Initialize `splitters`. The initial sets are partitioned by destination // state partition and transition label. splitters = Partitions(transitions.size()); elementIndex = 0; for (size_t statePartition = 0; statePartition < partitions.sets; ++statePartition) { // The in-transitions leading to states in the current partition, organized // by transition label. std::map> currTransitions; for (size_t state : partitions.getSet(statePartition)) { for (size_t transition = transitionIndices[state], end = transitionIndices[state + 1]; transition < end; ++transition) { currTransitions[transitions[transition].label].push_back(transition); } } // Create a splitter partition for each in-transition label leading to the // current state partition. for (auto& pair : currTransitions) { size_t set = splitters.sets++; splitters.beginnings[set] = elementIndex; splitters.pivots[set] = elementIndex; for (size_t transition : pair.second) { splitters.elements[elementIndex] = transition; splitters.elementIndices[transition] = elementIndex; splitters.setIndices[transition] = set; ++elementIndex; } splitters.endings[set] = elementIndex; } } } void ShapeCanonicalizer::createReplacements() { // Create a single new HeapTypeInfo for each partition. Initialize each new // HeapTypeInfo as a copy of a representative HeapTypeInfo from its partition, // then patch all the children of the new HeapTypeInfos to refer to other new // HeapTypeInfos rather than the original HeapTypeInfos. This newly formed // graph will have a shape coinductively equivalent to the original graph's // shape, but each type definition will be minimal and distinct. // // However, for partitions that already contain globally canonical types, find // and use the corresponding HeapTypeInfo directly without copying. Since the // partitions reachable from a globally canonical type will also contain a // globally canonical type, no temporary types will end up being patched into // the globally canonical types and we can skip patching the children of those // types. for (size_t p = 0; p < partitions.sets; ++p) { auto partition = partitions.getSet(p); auto it = std::find_if(partition.begin(), partition.end(), [this](size_t i) { return !isTemp(heapTypes[i]); }); HeapType newType; auto partitionIt = partition.begin(); if (it != partition.end()) { newType = heapTypes[*it]; } else { // We do not already know about a globally canonical type for this // partition. Create a copy and a replacement that owns it. HeapType oldType = heapTypes[*partitionIt++]; const auto& representative = *getHeapTypeInfo(oldType); auto info = std::make_unique(representative); info->isTemp = true; newType = asHeapType(info); replacements.insert({oldType, std::move(info)}); } // Create replacements for all the other types in the partition. for (; partitionIt != partition.end(); ++partitionIt) { if (partitionIt != it) { replacements.insert({heapTypes[*partitionIt], newType}); } } } } // Replaces temporary types and heap types in a type definition graph with their // globally canonical versions to prevent temporary types or heap type from // leaking into the global stores. void globallyCanonicalize(CanonicalizationState& state) { // Map each temporary Type and HeapType to the locations where they will // have to be replaced with canonical Types and HeapTypes. struct Locations : TypeGraphWalker { std::unordered_map> types; std::unordered_map> heapTypes; void preVisitType(Type* type) { if (!type->isBasic()) { types[*type].insert(type); } } void preVisitHeapType(HeapType* ht) { if (!ht->isBasic()) { heapTypes[*ht].insert(ht); } } }; Locations locations; for (auto& type : state.results) { if (!type.isBasic() && getHeapTypeInfo(type)->isTemp) { locations.walkRoot(&type); } } #if TRACE_CANONICALIZATION std::cerr << "Initial Types:\n"; state.dump(); #endif // Canonicalize HeapTypes at all their use sites. HeapTypes for which there // was not already a globally canonical version are moved to the global store // to become the canonical version. These new canonical HeapTypes still // contain references to temporary Types owned by the TypeBuilder, so we must // subsequently replace those references with references to canonical Types. // // Keep a lock on the global HeapType store as long as it can reach temporary // types to ensure that no other threads observe the temporary types, for // example if another thread concurrently constructs a new HeapType with the // same shape as one being canonicalized here. This cannot happen with Types // because they are hashed in the global store by pointer identity, which has // not yet escaped the builder, rather than shape. std::lock_guard lock(globalHeapTypeStore.mutex); std::unordered_map canonicalHeapTypes; for (auto& info : state.newInfos) { HeapType original = asHeapType(info); HeapType canonical = globalHeapTypeStore.insert(std::move(info)); if (original != canonical) { canonicalHeapTypes[original] = canonical; } } for (auto& [original, canonical] : canonicalHeapTypes) { for (HeapType* use : locations.heapTypes.at(original)) { *use = canonical; } } // Canonicalize non-tuple Types (which never directly refer to other Types) // before tuple Types to avoid canonicalizing a tuple that still contains // non-canonical Types. auto canonicalizeTypes = [&](bool tuples) { for (auto& [original, uses] : locations.types) { if (original.isTuple() == tuples) { Type canonical = globalTypeStore.insert(*getTypeInfo(original)); for (Type* use : uses) { *use = canonical; } } } }; canonicalizeTypes(false); canonicalizeTypes(true); #if TRACE_CANONICALIZATION std::cerr << "Final Types:\n"; state.dump(); #endif } void canonicalizeEquirecursive(CanonicalizationState& state) { // Equirecursive types always have null supertypes and recursion groups. for (auto& info : state.newInfos) { info->recGroup = nullptr; info->supertype = nullptr; } // Canonicalize the shape of the type definition graph. ShapeCanonicalizer minimized(state.results); state.update(minimized.replacements); } std::optional validateSubtyping(const std::vector& types) { if (getTypeSystem() == TypeSystem::Equirecursive) { // Subtyping is not explicitly declared, so nothing to check. return {}; } for (size_t i = 0; i < types.size(); ++i) { HeapType type = types[i]; if (type.isBasic()) { continue; } auto* sub = getHeapTypeInfo(type); auto* super = sub->supertype; if (super == nullptr) { continue; } auto fail = [&]() { return TypeBuilder::Error{i, TypeBuilder::ErrorReason::InvalidSupertype}; }; if (sub->kind != super->kind) { return fail(); } SubTyper typer; switch (sub->kind) { case HeapTypeInfo::BasicKind: WASM_UNREACHABLE("unexpected kind"); case HeapTypeInfo::SignatureKind: if (!typer.isSubType(sub->signature, super->signature)) { return fail(); } break; case HeapTypeInfo::StructKind: if (!typer.isSubType(sub->struct_, super->struct_)) { return fail(); } break; case HeapTypeInfo::ArrayKind: if (!typer.isSubType(sub->array, super->array)) { return fail(); } break; } } return {}; } std::optional canonicalizeNominal(CanonicalizationState& state) { for (auto& info : state.newInfos) { info->recGroup = nullptr; } // Nominal types do not require separate canonicalization, so just validate // that their subtyping is correct. // Ensure there are no cycles in the subtype graph. This is the classic DFA // algorithm for detecting cycles, but in the form of a simple loop because // each node (type) has at most one child (supertype). std::unordered_set checked; for (size_t i = 0; i < state.results.size(); ++i) { HeapType type = state.results[i]; if (type.isBasic()) { continue; } std::unordered_set path; for (auto* curr = getHeapTypeInfo(type); curr != nullptr && !checked.count(curr); curr = curr->supertype) { if (!path.insert(curr).second) { return TypeBuilder::Error{i, TypeBuilder::ErrorReason::SelfSupertype}; } } // None of the types in `path` reach themselves. checked.insert(path.begin(), path.end()); } return {}; } std::optional canonicalizeIsorecursive( CanonicalizationState& state, std::vector>& recGroupInfos) { // Fill out the recursion groups. for (auto& info : state.newInfos) { if (info->recGroup != nullptr) { info->recGroupIndex = info->recGroup->size(); info->recGroup->push_back(asHeapType(info)); } } // Map rec groups to the unique pointers to their infos. std::unordered_map> groupInfoMap; for (auto& info : recGroupInfos) { RecGroup group{uintptr_t(info.get())}; groupInfoMap[group] = std::move(info); } // Check that supertypes precede their subtypes and that other child types // either precede their parents or appear later in the same recursion group. // `indexOfType` both maps types to their indices and keeps track of which // types we have seen so far. std::unordered_map indexOfType; std::vector groups; size_t groupStart = 0; // Validate the children of all types in a recursion group after all the types // have been registered in `indexOfType`. auto finishGroup = [&](size_t groupEnd) -> std::optional { for (size_t index = groupStart; index < groupEnd; ++index) { HeapType type = state.results[index]; for (HeapType child : type.getHeapTypeChildren()) { // Only basic children, globally canonical children, and children // defined in this or previous recursion groups are allowed. if (isTemp(child) && !indexOfType.count(child)) { return {{index, TypeBuilder::ErrorReason::ForwardChildReference}}; } } } groupStart = groupEnd; return {}; }; for (size_t index = 0; index < state.results.size(); ++index) { HeapType type = state.results[index]; if (type.isBasic()) { continue; } // Validate the supertype. Supertypes must precede their subtypes. if (auto super = type.getSuperType()) { if (!indexOfType.count(*super)) { return {{index, TypeBuilder::ErrorReason::ForwardSupertypeReference}}; } } // Check whether we have finished a rec group. auto newGroup = type.getRecGroup(); if (groups.empty() || groups.back() != newGroup) { if (auto error = finishGroup(index)) { return *error; } groups.push_back(newGroup); } // Register this type as seen. indexOfType.insert({type, index}); } if (auto error = finishGroup(state.results.size())) { return *error; } // Now that we know everything is valid, start canonicalizing recursion // groups. Before canonicalizing each group, update all the HeapType use sites // within it to make sure it only refers to other canonical groups or to // itself (since other groups it refers to may have been duplicates of // previously canonicalized groups and therefore would not be canonical). To // canonicalize the group, try to insert it into the global store. If that // fails, we already have an isorecursively equivalent group, so update the // replacements accordingly. CanonicalizationState::ReplacementMap replacements; { std::lock_guard lock(globalRecGroupStore.mutex); groupStart = 0; for (auto group : groups) { size_t size = group.size(); for (size_t i = 0; i < size; ++i) { state.updateUses(replacements, state.newInfos[groupStart + i]); } groupStart += size; RecGroup canonical(0); // There may or may not be a `RecGroupInfo` for this group depending on // whether it is a singleton group or not. If there is one, it is in the // `groupInfoMap`. Make the info available for the global store to take // ownership of it in case this group is made the canonical group for its // structure. if (auto it = groupInfoMap.find(group); it != groupInfoMap.end()) { canonical = globalRecGroupStore.insert(std::move(it->second)); } else { canonical = globalRecGroupStore.insert(group); } if (group != canonical) { // Replace the non-canonical types with their canonical equivalents. assert(canonical.size() == size); for (size_t i = 0; i < size; ++i) { replacements.insert({group[i], canonical[i]}); } } } } state.updateShallow(replacements); return {}; } void canonicalizeBasicTypes(CanonicalizationState& state) { // Replace heap types backed by BasicKind HeapTypeInfos with their // corresponding BasicHeapTypes. The heap types backed by BasicKind // HeapTypeInfos exist only to support building basic types in a TypeBuilder // and are never canonical. CanonicalizationState::ReplacementMap replacements; for (auto& info : state.newInfos) { if (info->kind == HeapTypeInfo::BasicKind) { replacements.insert({asHeapType(info), HeapType(info->basic)}); } // Basic supertypes should be implicit. if (info->supertype && info->supertype->kind == HeapTypeInfo::BasicKind) { info->supertype = nullptr; } } state.update(replacements); if (replacements.size()) { // Canonicalizing basic heap types may cause their parent types to become // canonicalizable as well, for example after creating `(ref null any)` we // can futher canonicalize to `anyref`. struct TypeCanonicalizer : TypeGraphWalkerBase { void scanType(Type* type) { if (type->isTuple()) { TypeGraphWalkerBase::scanType(type); } else { *type = asCanonical(*type); } } }; for (auto& info : state.newInfos) { auto root = asHeapType(info); TypeCanonicalizer{}.walkRoot(&root); } } } } // anonymous namespace TypeBuilder::BuildResult TypeBuilder::build() { size_t entryCount = impl->entries.size(); // Initialize the canonicalization state using the HeapTypeInfos from the // builder, marking entries finalized. CanonicalizationState state; state.results.reserve(entryCount); state.newInfos.reserve(entryCount); for (size_t i = 0; i < entryCount; ++i) { assert(impl->entries[i].initialized && "Cannot access uninitialized HeapType"); auto& info = impl->entries[i].info; info->isFinalized = true; state.results.push_back(asHeapType(info)); state.newInfos.emplace_back(std::move(info)); } #if TRACE_CANONICALIZATION std::cerr << "Before replacing basic heap types:\n"; state.dump(); #endif // Eagerly replace references to built basic heap types so the more // complicated canonicalization algorithms don't need to consider them. canonicalizeBasicTypes(state); #if TRACE_CANONICALIZATION std::cerr << "After replacing basic heap types:\n"; state.dump(); #endif #if TIME_CANONICALIZATION using instant_t = std::chrono::time_point; auto getMillis = [&](instant_t start, instant_t end) { return std::chrono::duration_cast(end - start) .count(); }; auto start = std::chrono::steady_clock::now(); #endif switch (typeSystem) { case TypeSystem::Equirecursive: canonicalizeEquirecursive(state); break; case TypeSystem::Nominal: if (auto error = canonicalizeNominal(state)) { return {*error}; } break; case TypeSystem::Isorecursive: if (auto error = canonicalizeIsorecursive(state, impl->recGroups)) { return {*error}; } break; } #if TIME_CANONICALIZATION auto afterStructureCanonicalization = std::chrono::steady_clock::now(); #endif globallyCanonicalize(state); #if TIME_CANONICALIZATION auto end = std::chrono::steady_clock::now(); std::cerr << "Total canonicalization time was " << getMillis(start, end) << " ms\n"; std::cerr << "Structure canonicalization took " << getMillis(start, afterStructureCanonicalization) << " ms\n"; std::cerr << "Global canonicalization took " << getMillis(afterStructureCanonicalization, end) << " ms\n"; #endif // Check that the declared supertypes are structurally valid. if (auto error = validateSubtyping(state.results)) { return {*error}; } // Note built signature types. See comment in `HeapType::HeapType(Signature)`. for (auto type : state.results) { if (type.isSignature() && (getTypeSystem() == TypeSystem::Nominal)) { nominalSignatureCache.insertType(type); } } return {state.results}; } } // namespace wasm namespace std { template<> class hash { public: size_t operator()(const wasm::TypeList& types) const { auto digest = wasm::hash(types.size()); for (auto type : types) { wasm::rehash(digest, type); } return digest; } }; template<> class hash { public: size_t operator()(const wasm::FieldList& fields) const { auto digest = wasm::hash(fields.size()); for (auto field : fields) { wasm::rehash(digest, field); } return digest; } }; size_t hash::operator()(const wasm::Type& type) const { return wasm::hash(type.getID()); } size_t hash::operator()(const wasm::Tuple& tuple) const { return wasm::hash(tuple.types); } size_t hash::operator()(const wasm::Signature& sig) const { auto digest = wasm::hash(sig.params); wasm::rehash(digest, sig.results); return digest; } size_t hash::operator()(const wasm::Field& field) const { auto digest = wasm::hash(field.type); wasm::rehash(digest, field.packedType); wasm::rehash(digest, field.mutable_); return digest; } size_t hash::operator()(const wasm::Struct& struct_) const { return wasm::hash(struct_.fields); } size_t hash::operator()(const wasm::Array& array) const { return wasm::hash(array.element); } size_t hash::operator()(const wasm::HeapType& heapType) const { return wasm::hash(heapType.getID()); } size_t hash::operator()(const wasm::RecGroup& group) const { return wasm::hash(group.getID()); } size_t hash::operator()(const wasm::Rtt& rtt) const { auto digest = wasm::hash(rtt.depth); wasm::rehash(digest, rtt.heapType); return digest; } size_t hash::operator()(const wasm::TypeInfo& info) const { auto digest = wasm::hash(info.kind); switch (info.kind) { case wasm::TypeInfo::TupleKind: wasm::rehash(digest, info.tuple); return digest; case wasm::TypeInfo::RefKind: wasm::rehash(digest, info.ref.nullable); wasm::rehash(digest, info.ref.heapType); return digest; case wasm::TypeInfo::RttKind: wasm::rehash(digest, info.rtt); return digest; } WASM_UNREACHABLE("unexpected kind"); } size_t hash::operator()(const wasm::HeapTypeInfo& info) const { return wasm::FiniteShapeHasher().hash(info); } } // namespace std binaryen-version_108/src/wasm/wasm-validator.cpp000066400000000000000000003355251423707623100221560ustar00rootroot00000000000000/* * Copyright 2017 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include "ir/eh-utils.h" #include "ir/features.h" #include "ir/global-utils.h" #include "ir/intrinsics.h" #include "ir/module-utils.h" #include "ir/stack-utils.h" #include "ir/utils.h" #include "support/colors.h" #include "wasm-validator.h" #include "wasm.h" namespace wasm { // Print anything that can be streamed to an ostream template::type>::value>::type* = nullptr> inline std::ostream& printModuleComponent(T curr, std::ostream& stream, Module& wasm) { stream << curr << std::endl; return stream; } // Extra overload for Expressions, to print their contents. inline std::ostream& printModuleComponent(Expression* curr, std::ostream& stream, Module& wasm) { if (curr) { stream << ModuleExpression(wasm, curr) << '\n'; } return stream; } // For parallel validation, we have a helper struct for coordination struct ValidationInfo { Module& wasm; bool validateWeb; bool validateGlobally; bool quiet; std::atomic valid; // a stream of error test for each function. we print in the right order at // the end, for deterministic output // note errors are rare/unexpected, so it's ok to use a slow mutex here std::mutex mutex; std::unordered_map> outputs; ValidationInfo(Module& wasm) : wasm(wasm) { valid.store(true); } std::ostringstream& getStream(Function* func) { std::unique_lock lock(mutex); auto iter = outputs.find(func); if (iter != outputs.end()) { return *(iter->second.get()); } auto& ret = outputs[func] = make_unique(); return *ret.get(); } // printing and error handling support template std::ostream& fail(S text, T curr, Function* func) { valid.store(false); auto& stream = getStream(func); if (quiet) { return stream; } auto& ret = printFailureHeader(func); ret << text << ", on \n"; return printModuleComponent(curr, ret, wasm); } std::ostream& printFailureHeader(Function* func) { auto& stream = getStream(func); if (quiet) { return stream; } Colors::red(stream); if (func) { stream << "[wasm-validator error in function "; Colors::green(stream); stream << func->name; Colors::red(stream); stream << "] "; } else { stream << "[wasm-validator error in module] "; } Colors::normal(stream); return stream; } // checking utilities template bool shouldBeTrue(bool result, T curr, const char* text, Function* func = nullptr) { if (!result) { fail("unexpected false: " + std::string(text), curr, func); return false; } return result; } template bool shouldBeFalse(bool result, T curr, const char* text, Function* func = nullptr) { if (result) { fail("unexpected true: " + std::string(text), curr, func); return false; } return result; } template bool shouldBeEqual( S left, S right, T curr, const char* text, Function* func = nullptr) { if (left != right) { std::ostringstream ss; ss << left << " != " << right << ": " << text; fail(ss.str(), curr, func); return false; } return true; } template bool shouldBeEqualOrFirstIsUnreachable( S left, S right, T curr, const char* text, Function* func = nullptr) { if (left != Type::unreachable && left != right) { std::ostringstream ss; ss << left << " != " << right << ": " << text; fail(ss.str(), curr, func); return false; } return true; } template bool shouldBeUnequal( S left, S right, T curr, const char* text, Function* func = nullptr) { if (left == right) { std::ostringstream ss; ss << left << " == " << right << ": " << text; fail(ss.str(), curr, func); return false; } return true; } void shouldBeIntOrUnreachable(Type ty, Expression* curr, const char* text, Function* func = nullptr) { switch (ty.getBasic()) { case Type::i32: case Type::i64: case Type::unreachable: { break; } default: fail(text, curr, func); } } // Type 'left' should be a subtype of 'right'. bool shouldBeSubType(Type left, Type right, Expression* curr, const char* text, Function* func = nullptr) { if (Type::isSubType(left, right)) { return true; } fail(text, curr, func); return false; } }; struct FunctionValidator : public WalkerPass> { bool isFunctionParallel() override { return true; } Pass* create() override { return new FunctionValidator(*getModule(), &info); } bool modifiesBinaryenIR() override { return false; } ValidationInfo& info; FunctionValidator(Module& wasm, ValidationInfo* info) : info(*info) { setModule(&wasm); } // Validate the entire module. void validate(PassRunner* runner) { run(runner, getModule()); } // Validate a specific expression. void validate(Expression* curr) { walk(curr); } std::unordered_map> breakTypes; std::unordered_set delegateTargetNames; std::unordered_set rethrowTargetNames; std::unordered_set returnTypes; // types used in returns // Binaryen IR requires that label names must be unique - IR generators must // ensure that std::unordered_set labelNames; void noteLabelName(Name name); public: // visitors void validatePoppyExpression(Expression* curr); static void visitPoppyExpression(FunctionValidator* self, Expression** currp) { self->validatePoppyExpression(*currp); } static void visitPreBlock(FunctionValidator* self, Expression** currp) { auto* curr = (*currp)->cast(); if (curr->name.is()) { self->breakTypes[curr->name]; } } void visitBlock(Block* curr); void validateNormalBlockElements(Block* curr); void validatePoppyBlockElements(Block* curr); static void visitPreLoop(FunctionValidator* self, Expression** currp) { auto* curr = (*currp)->cast(); if (curr->name.is()) { self->breakTypes[curr->name]; } } void visitLoop(Loop* curr); void visitIf(If* curr); static void visitPreTry(FunctionValidator* self, Expression** currp) { auto* curr = (*currp)->cast(); if (curr->name.is()) { self->delegateTargetNames.insert(curr->name); } } // We remove try's label before proceeding to verify catch bodies because the // following is a validation failure: // (try $l0 // (do ... ) // (catch $e // (try // (do ...) // (delegate $l0) ;; validation failure // ) // ) // ) // Unlike branches, if delegate's target 'catch' is located above the // delegate, it is a validation failure. static void visitPreCatch(FunctionValidator* self, Expression** currp) { auto* curr = (*currp)->cast(); if (curr->name.is()) { self->delegateTargetNames.erase(curr->name); self->rethrowTargetNames.insert(curr->name); } } // override scan to add a pre and a post check task to all nodes static void scan(FunctionValidator* self, Expression** currp) { auto* curr = *currp; // Treat 'Try' specially because we need to run visitPreCatch between the // try body and catch bodies if (curr->is()) { self->pushTask(doVisitTry, currp); auto& list = curr->cast()->catchBodies; for (int i = int(list.size()) - 1; i >= 0; i--) { self->pushTask(scan, &list[i]); } self->pushTask(visitPreCatch, currp); self->pushTask(scan, &curr->cast()->body); self->pushTask(visitPreTry, currp); return; } PostWalker::scan(self, currp); if (curr->is()) { self->pushTask(visitPreBlock, currp); } if (curr->is()) { self->pushTask(visitPreLoop, currp); } if (auto* func = self->getFunction()) { if (func->profile == IRProfile::Poppy) { self->pushTask(visitPoppyExpression, currp); } } } void noteBreak(Name name, Expression* value, Expression* curr); void noteBreak(Name name, Type valueType, Expression* curr); void visitBreak(Break* curr); void visitSwitch(Switch* curr); void visitCall(Call* curr); void visitCallIndirect(CallIndirect* curr); void visitConst(Const* curr); void visitLocalGet(LocalGet* curr); void visitLocalSet(LocalSet* curr); void visitGlobalGet(GlobalGet* curr); void visitGlobalSet(GlobalSet* curr); void visitLoad(Load* curr); void visitStore(Store* curr); void visitAtomicRMW(AtomicRMW* curr); void visitAtomicCmpxchg(AtomicCmpxchg* curr); void visitAtomicWait(AtomicWait* curr); void visitAtomicNotify(AtomicNotify* curr); void visitAtomicFence(AtomicFence* curr); void visitSIMDExtract(SIMDExtract* curr); void visitSIMDReplace(SIMDReplace* curr); void visitSIMDShuffle(SIMDShuffle* curr); void visitSIMDTernary(SIMDTernary* curr); void visitSIMDShift(SIMDShift* curr); void visitSIMDLoad(SIMDLoad* curr); void visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr); void visitMemoryInit(MemoryInit* curr); void visitDataDrop(DataDrop* curr); void visitMemoryCopy(MemoryCopy* curr); void visitMemoryFill(MemoryFill* curr); void visitBinary(Binary* curr); void visitUnary(Unary* curr); void visitSelect(Select* curr); void visitDrop(Drop* curr); void visitReturn(Return* curr); void visitMemorySize(MemorySize* curr); void visitMemoryGrow(MemoryGrow* curr); void visitRefNull(RefNull* curr); void visitRefIs(RefIs* curr); void visitRefFunc(RefFunc* curr); void visitRefEq(RefEq* curr); void visitTableGet(TableGet* curr); void visitTableSet(TableSet* curr); void visitTableSize(TableSize* curr); void visitTableGrow(TableGrow* curr); void noteDelegate(Name name, Expression* curr); void noteRethrow(Name name, Expression* curr); void visitTry(Try* curr); void visitThrow(Throw* curr); void visitRethrow(Rethrow* curr); void visitTupleMake(TupleMake* curr); void visitTupleExtract(TupleExtract* curr); void visitCallRef(CallRef* curr); void visitI31New(I31New* curr); void visitI31Get(I31Get* curr); void visitRefTest(RefTest* curr); void visitRefCast(RefCast* curr); void visitBrOn(BrOn* curr); void visitRttCanon(RttCanon* curr); void visitRttSub(RttSub* curr); void visitStructNew(StructNew* curr); void visitStructGet(StructGet* curr); void visitStructSet(StructSet* curr); void visitArrayNew(ArrayNew* curr); void visitArrayInit(ArrayInit* curr); void visitArrayGet(ArrayGet* curr); void visitArraySet(ArraySet* curr); void visitArrayLen(ArrayLen* curr); void visitArrayCopy(ArrayCopy* curr); void visitFunction(Function* curr); // helpers private: std::ostream& getStream() { return info.getStream(getFunction()); } template bool shouldBeTrue(bool result, T curr, const char* text) { return info.shouldBeTrue(result, curr, text, getFunction()); } template bool shouldBeFalse(bool result, T curr, const char* text) { return info.shouldBeFalse(result, curr, text, getFunction()); } template bool shouldBeEqual(S left, S right, T curr, const char* text) { return info.shouldBeEqual(left, right, curr, text, getFunction()); } template bool shouldBeEqualOrFirstIsUnreachable(S left, S right, T curr, const char* text) { return info.shouldBeEqualOrFirstIsUnreachable( left, right, curr, text, getFunction()); } template bool shouldBeUnequal(S left, S right, T curr, const char* text) { return info.shouldBeUnequal(left, right, curr, text, getFunction()); } void shouldBeIntOrUnreachable(Type ty, Expression* curr, const char* text) { return info.shouldBeIntOrUnreachable(ty, curr, text, getFunction()); } bool shouldBeSubType(Type left, Type right, Expression* curr, const char* text) { return info.shouldBeSubType(left, right, curr, text, getFunction()); } void validateAlignment( size_t align, Type type, Index bytes, bool isAtomic, Expression* curr); void validateMemBytes(uint8_t bytes, Type type, Expression* curr); template void validateReturnCall(T* curr) { shouldBeTrue(!curr->isReturn || getModule()->features.hasTailCall(), curr, "return_call* requires tail calls to be enabled"); } template void validateCallParamsAndResult(T* curr, HeapType sigType) { if (!shouldBeTrue( sigType.isSignature(), curr, "Heap type must be a signature type")) { return; } auto sig = sigType.getSignature(); if (!shouldBeTrue(curr->operands.size() == sig.params.size(), curr, "call* param number must match")) { return; } size_t i = 0; for (const auto& param : sig.params) { if (!shouldBeSubType(curr->operands[i]->type, param, curr, "call param types must match") && !info.quiet) { getStream() << "(on argument " << i << ")\n"; } ++i; } if (curr->isReturn) { shouldBeEqual(curr->type, Type(Type::unreachable), curr, "return_call* should have unreachable type"); shouldBeSubType( sig.results, getFunction()->getResults(), curr, "return_call* callee return type must match caller return type"); } else { shouldBeEqualOrFirstIsUnreachable( curr->type, sig.results, curr, "call* type must match callee return type"); } } Type indexType() { return getModule()->memory.indexType; } }; void FunctionValidator::noteLabelName(Name name) { if (!name.is()) { return; } auto [_, inserted] = labelNames.insert(name); shouldBeTrue( inserted, name, "names in Binaryen IR must be unique - IR generators must ensure that"); } void FunctionValidator::validatePoppyExpression(Expression* curr) { if (curr->type == Type::unreachable) { shouldBeTrue(StackUtils::mayBeUnreachable(curr), curr, "Only control flow structures and unreachable polymorphic" " instructions may be unreachable in Poppy IR"); } if (Properties::isControlFlowStructure(curr)) { // Check that control flow children (except If conditions) are blocks if (auto* if_ = curr->dynCast()) { shouldBeTrue( if_->condition->is(), curr, "Expected condition to be a Pop"); shouldBeTrue(if_->ifTrue->is(), curr, "Expected control flow child to be a block"); shouldBeTrue(!if_->ifFalse || if_->ifFalse->is(), curr, "Expected control flow child to be a block"); } else if (!curr->is()) { for (auto* child : ChildIterator(curr)) { shouldBeTrue(child->is(), curr, "Expected control flow child to be a block"); } } } else { // Check that all children are Pops for (auto* child : ChildIterator(curr)) { shouldBeTrue(child->is(), curr, "Unexpected non-Pop child"); } } } void FunctionValidator::visitBlock(Block* curr) { if (!getModule()->features.hasMultivalue()) { shouldBeTrue(!curr->type.isTuple(), curr, "Multivalue block type (multivalue is not enabled)"); } // if we are break'ed to, then the value must be right for us if (curr->name.is()) { noteLabelName(curr->name); auto iter = breakTypes.find(curr->name); assert(iter != breakTypes.end()); // we set it ourselves for (Type breakType : iter->second) { // none or unreachable means a poison value that we should ignore - if // consumed, it will error shouldBeSubType(breakType, curr->type, curr, "break type must be a subtype of the target block type"); } breakTypes.erase(iter); } switch (getFunction()->profile) { case IRProfile::Normal: validateNormalBlockElements(curr); break; case IRProfile::Poppy: validatePoppyBlockElements(curr); break; } } void FunctionValidator::validateNormalBlockElements(Block* curr) { if (curr->list.size() > 1) { for (Index i = 0; i < curr->list.size() - 1; i++) { if (!shouldBeTrue( !curr->list[i]->type.isConcrete(), curr, "non-final block elements returning a value must be drop()ed " "(binaryen's autodrop option might help you)") && !info.quiet) { getStream() << "(on index " << i << ":\n" << curr->list[i] << "\n), type: " << curr->list[i]->type << "\n"; } } } if (curr->list.size() > 0) { auto backType = curr->list.back()->type; if (!curr->type.isConcrete()) { shouldBeFalse(backType.isConcrete(), curr, "if block is not returning a value, final element should " "not flow out a value"); } else { if (backType.isConcrete()) { shouldBeSubType( backType, curr->type, curr, "block with value and last element with value must match types"); } else { shouldBeUnequal( backType, Type(Type::none), curr, "block with value must not have last element that is none"); } } } if (curr->type.isConcrete()) { shouldBeTrue( curr->list.size() > 0, curr, "block with a value must not be empty"); } } void FunctionValidator::validatePoppyBlockElements(Block* curr) { StackSignature blockSig; for (size_t i = 0; i < curr->list.size(); ++i) { Expression* expr = curr->list[i]; if (!shouldBeTrue( !expr->is(), expr, "Unexpected top-level pop in block")) { return; } StackSignature sig(expr); if (!shouldBeTrue(blockSig.composes(sig), curr, "block element has incompatible type") && !info.quiet) { getStream() << "(on index " << i << ":\n" << expr << "\n), required: " << sig.params << ", available: "; if (blockSig.kind == StackSignature::Polymorphic) { getStream() << "polymorphic, "; } getStream() << blockSig.results << "\n"; return; } blockSig += sig; } if (curr->type == Type::unreachable) { shouldBeTrue(blockSig.kind == StackSignature::Polymorphic, curr, "unreachable block should have unreachable element"); } else { if (!shouldBeTrue( StackSignature::isSubType( blockSig, StackSignature(Type::none, curr->type, StackSignature::Fixed)), curr, "block contents should satisfy block type") && !info.quiet) { getStream() << "contents: " << blockSig.results << (blockSig.kind == StackSignature::Polymorphic ? " [polymorphic]" : "") << "\n" << "expected: " << curr->type << "\n"; } } } void FunctionValidator::visitLoop(Loop* curr) { if (curr->name.is()) { noteLabelName(curr->name); auto iter = breakTypes.find(curr->name); assert(iter != breakTypes.end()); // we set it ourselves for (Type breakType : iter->second) { shouldBeEqual(breakType, Type(Type::none), curr, "breaks to a loop cannot pass a value"); } breakTypes.erase(iter); } if (curr->type == Type::none) { shouldBeFalse(curr->body->type.isConcrete(), curr, "bad body for a loop that has no value"); } // When there are multiple instructions within a loop, they are wrapped in a // Block internally, so visitBlock can take care of verification. Here we // check cases when there is only one instruction in a Loop. if (!curr->body->is()) { if (!curr->type.isConcrete()) { shouldBeFalse(curr->body->type.isConcrete(), curr, "if loop is not returning a value, final element should " "not flow out a value"); } else { shouldBeSubType(curr->body->type, curr->type, curr, "loop with value and body must match types"); } } } void FunctionValidator::visitIf(If* curr) { shouldBeTrue(curr->condition->type == Type::unreachable || curr->condition->type == Type::i32, curr, "if condition must be valid"); if (!curr->ifFalse) { shouldBeFalse(curr->ifTrue->type.isConcrete(), curr, "if without else must not return a value in body"); if (curr->condition->type != Type::unreachable) { shouldBeEqual(curr->type, Type(Type::none), curr, "if without else and reachable condition must be none"); } } else { if (curr->type != Type::unreachable) { shouldBeSubType(curr->ifTrue->type, curr->type, curr, "returning if-else's true must have right type"); shouldBeSubType(curr->ifFalse->type, curr->type, curr, "returning if-else's false must have right type"); } else { if (curr->condition->type != Type::unreachable) { shouldBeEqual(curr->ifTrue->type, Type(Type::unreachable), curr, "unreachable if-else must have unreachable true"); shouldBeEqual(curr->ifFalse->type, Type(Type::unreachable), curr, "unreachable if-else must have unreachable false"); } } if (curr->ifTrue->type.isConcrete()) { shouldBeSubType(curr->ifTrue->type, curr->type, curr, "if type must match concrete ifTrue"); } if (curr->ifFalse->type.isConcrete()) { shouldBeSubType(curr->ifFalse->type, curr->type, curr, "if type must match concrete ifFalse"); } } } void FunctionValidator::noteBreak(Name name, Expression* value, Expression* curr) { if (value) { shouldBeUnequal( value->type, Type(Type::none), curr, "breaks must have a valid value"); } noteBreak(name, value ? value->type : Type::none, curr); } void FunctionValidator::noteBreak(Name name, Type valueType, Expression* curr) { auto iter = breakTypes.find(name); if (!shouldBeTrue( iter != breakTypes.end(), curr, "all break targets must be valid")) { return; } iter->second.insert(valueType); } void FunctionValidator::visitBreak(Break* curr) { noteBreak(curr->name, curr->value, curr); if (curr->value) { shouldBeTrue(curr->value->type != Type::none, curr, "break value must not have none type"); } if (curr->condition) { shouldBeTrue(curr->condition->type == Type::unreachable || curr->condition->type == Type::i32, curr, "break condition must be i32"); } } void FunctionValidator::visitSwitch(Switch* curr) { for (auto& target : curr->targets) { noteBreak(target, curr->value, curr); } noteBreak(curr->default_, curr->value, curr); shouldBeTrue(curr->condition->type == Type::unreachable || curr->condition->type == Type::i32, curr, "br_table condition must be i32"); } void FunctionValidator::visitCall(Call* curr) { validateReturnCall(curr); if (!info.validateGlobally) { return; } auto* target = getModule()->getFunctionOrNull(curr->target); if (!shouldBeTrue(!!target, curr, "call target must exist")) { return; } validateCallParamsAndResult(curr, target->type); } void FunctionValidator::visitCallIndirect(CallIndirect* curr) { validateReturnCall(curr); shouldBeEqualOrFirstIsUnreachable(curr->target->type, Type(Type::i32), curr, "indirect call target must be an i32"); if (curr->target->type != Type::unreachable) { auto* table = getModule()->getTableOrNull(curr->table); shouldBeTrue(!!table, curr, "call-indirect table must exist"); if (table) { shouldBeTrue(table->type.isFunction(), curr, "call-indirect table must be of function type."); } } validateCallParamsAndResult(curr, curr->heapType); } void FunctionValidator::visitConst(Const* curr) { shouldBeTrue(curr->type.getFeatures() <= getModule()->features, curr, "all used features should be allowed"); } void FunctionValidator::visitLocalGet(LocalGet* curr) { shouldBeTrue(curr->type.isConcrete(), curr, "local.get must have a valid type - check what you provided " "when you constructed the node"); if (shouldBeTrue(curr->index < getFunction()->getNumLocals(), curr, "local.get index must be small enough")) { shouldBeTrue(curr->type == getFunction()->getLocalType(curr->index), curr, "local.get must have proper type"); } } void FunctionValidator::visitLocalSet(LocalSet* curr) { if (shouldBeTrue(curr->index < getFunction()->getNumLocals(), curr, "local.set index must be small enough")) { if (curr->value->type != Type::unreachable) { if (curr->type != Type::none) { // tee is ok anyhow shouldBeEqual(getFunction()->getLocalType(curr->index), curr->type, curr, "local.set type must be correct"); } shouldBeSubType(curr->value->type, getFunction()->getLocalType(curr->index), curr, "local.set's value type must be correct"); } } } void FunctionValidator::visitGlobalGet(GlobalGet* curr) { if (!info.validateGlobally) { return; } shouldBeTrue(getModule()->getGlobalOrNull(curr->name), curr, "global.get name must be valid"); } void FunctionValidator::visitGlobalSet(GlobalSet* curr) { if (!info.validateGlobally) { return; } auto* global = getModule()->getGlobalOrNull(curr->name); if (shouldBeTrue(global, curr, "global.set name must be valid (and not an import; imports " "can't be modified)")) { shouldBeTrue(global->mutable_, curr, "global.set global must be mutable"); shouldBeSubType(curr->value->type, global->type, curr, "global.set value must have right type"); } } void FunctionValidator::visitLoad(Load* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); if (curr->isAtomic) { shouldBeTrue(getModule()->features.hasAtomics(), curr, "Atomic operation (atomics are disabled)"); shouldBeTrue(curr->type == Type::i32 || curr->type == Type::i64 || curr->type == Type::unreachable, curr, "Atomic load should be i32 or i64"); } if (curr->type == Type::v128) { shouldBeTrue(getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); } validateMemBytes(curr->bytes, curr->type, curr); validateAlignment(curr->align, curr->type, curr->bytes, curr->isAtomic, curr); shouldBeEqualOrFirstIsUnreachable( curr->ptr->type, indexType(), curr, "load pointer type must match memory index type"); if (curr->isAtomic) { shouldBeFalse(curr->signed_, curr, "atomic loads must be unsigned"); shouldBeIntOrUnreachable( curr->type, curr, "atomic loads must be of integers"); } } void FunctionValidator::visitStore(Store* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); if (curr->isAtomic) { shouldBeTrue(getModule()->features.hasAtomics(), curr, "Atomic operation (atomics are disabled)"); shouldBeTrue(curr->valueType == Type::i32 || curr->valueType == Type::i64 || curr->valueType == Type::unreachable, curr, "Atomic store should be i32 or i64"); } if (curr->valueType == Type::v128) { shouldBeTrue(getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); } validateMemBytes(curr->bytes, curr->valueType, curr); validateAlignment( curr->align, curr->valueType, curr->bytes, curr->isAtomic, curr); shouldBeEqualOrFirstIsUnreachable( curr->ptr->type, indexType(), curr, "store pointer must match memory index type"); shouldBeUnequal(curr->value->type, Type(Type::none), curr, "store value type must not be none"); shouldBeEqualOrFirstIsUnreachable( curr->value->type, curr->valueType, curr, "store value type must match"); if (curr->isAtomic) { shouldBeIntOrUnreachable( curr->valueType, curr, "atomic stores must be of integers"); } } void FunctionValidator::visitAtomicRMW(AtomicRMW* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); shouldBeTrue(getModule()->features.hasAtomics(), curr, "Atomic operation (atomics are disabled)"); validateMemBytes(curr->bytes, curr->type, curr); shouldBeEqualOrFirstIsUnreachable( curr->ptr->type, indexType(), curr, "AtomicRMW pointer type must match memory index type"); shouldBeEqualOrFirstIsUnreachable(curr->type, curr->value->type, curr, "AtomicRMW result type must match operand"); shouldBeIntOrUnreachable( curr->type, curr, "Atomic operations are only valid on int types"); } void FunctionValidator::visitAtomicCmpxchg(AtomicCmpxchg* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); shouldBeTrue(getModule()->features.hasAtomics(), curr, "Atomic operation (atomics are disabled)"); validateMemBytes(curr->bytes, curr->type, curr); shouldBeEqualOrFirstIsUnreachable( curr->ptr->type, indexType(), curr, "cmpxchg pointer must match memory index type"); if (curr->expected->type != Type::unreachable && curr->replacement->type != Type::unreachable) { shouldBeEqual(curr->expected->type, curr->replacement->type, curr, "cmpxchg operand types must match"); } shouldBeEqualOrFirstIsUnreachable(curr->type, curr->expected->type, curr, "Cmpxchg result type must match expected"); shouldBeEqualOrFirstIsUnreachable( curr->type, curr->replacement->type, curr, "Cmpxchg result type must match replacement"); shouldBeIntOrUnreachable(curr->expected->type, curr, "Atomic operations are only valid on int types"); } void FunctionValidator::visitAtomicWait(AtomicWait* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); shouldBeTrue(getModule()->features.hasAtomics(), curr, "Atomic operation (atomics are disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::i32), curr, "AtomicWait must have type i32"); shouldBeEqualOrFirstIsUnreachable( curr->ptr->type, indexType(), curr, "AtomicWait pointer must match memory index type"); shouldBeIntOrUnreachable( curr->expected->type, curr, "AtomicWait expected type must be int"); shouldBeEqualOrFirstIsUnreachable( curr->expected->type, curr->expectedType, curr, "AtomicWait expected type must match operand"); shouldBeEqualOrFirstIsUnreachable(curr->timeout->type, Type(Type::i64), curr, "AtomicWait timeout type must be i64"); } void FunctionValidator::visitAtomicNotify(AtomicNotify* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); shouldBeTrue(getModule()->features.hasAtomics(), curr, "Atomic operation (atomics are disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::i32), curr, "AtomicNotify must have type i32"); shouldBeEqualOrFirstIsUnreachable( curr->ptr->type, indexType(), curr, "AtomicNotify pointer must match memory index type"); shouldBeEqualOrFirstIsUnreachable( curr->notifyCount->type, Type(Type::i32), curr, "AtomicNotify notifyCount type must be i32"); } void FunctionValidator::visitAtomicFence(AtomicFence* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); shouldBeTrue(getModule()->features.hasAtomics(), curr, "Atomic operation (atomics are disabled)"); shouldBeTrue(curr->order == 0, curr, "Currently only sequentially consistent atomics are supported, " "so AtomicFence's order should be 0"); } void FunctionValidator::visitSIMDExtract(SIMDExtract* curr) { shouldBeTrue( getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); shouldBeEqualOrFirstIsUnreachable(curr->vec->type, Type(Type::v128), curr, "extract_lane must operate on a v128"); Type lane_t = Type::none; size_t lanes = 0; switch (curr->op) { case ExtractLaneSVecI8x16: case ExtractLaneUVecI8x16: lane_t = Type::i32; lanes = 16; break; case ExtractLaneSVecI16x8: case ExtractLaneUVecI16x8: lane_t = Type::i32; lanes = 8; break; case ExtractLaneVecI32x4: lane_t = Type::i32; lanes = 4; break; case ExtractLaneVecI64x2: lane_t = Type::i64; lanes = 2; break; case ExtractLaneVecF32x4: lane_t = Type::f32; lanes = 4; break; case ExtractLaneVecF64x2: lane_t = Type::f64; lanes = 2; break; } shouldBeEqualOrFirstIsUnreachable( curr->type, lane_t, curr, "extract_lane must have same type as vector lane"); shouldBeTrue(curr->index < lanes, curr, "invalid lane index"); } void FunctionValidator::visitSIMDReplace(SIMDReplace* curr) { shouldBeTrue( getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::v128), curr, "replace_lane must have type v128"); shouldBeEqualOrFirstIsUnreachable(curr->vec->type, Type(Type::v128), curr, "replace_lane must operate on a v128"); Type lane_t = Type::none; size_t lanes = 0; switch (curr->op) { case ReplaceLaneVecI8x16: lane_t = Type::i32; lanes = 16; break; case ReplaceLaneVecI16x8: lane_t = Type::i32; lanes = 8; break; case ReplaceLaneVecI32x4: lane_t = Type::i32; lanes = 4; break; case ReplaceLaneVecI64x2: lane_t = Type::i64; lanes = 2; break; case ReplaceLaneVecF32x4: lane_t = Type::f32; lanes = 4; break; case ReplaceLaneVecF64x2: lane_t = Type::f64; lanes = 2; break; } shouldBeEqualOrFirstIsUnreachable( curr->value->type, lane_t, curr, "unexpected value type"); shouldBeTrue(curr->index < lanes, curr, "invalid lane index"); } void FunctionValidator::visitSIMDShuffle(SIMDShuffle* curr) { shouldBeTrue( getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::v128), curr, "i8x16.shuffle must have type v128"); shouldBeEqualOrFirstIsUnreachable( curr->left->type, Type(Type::v128), curr, "expected operand of type v128"); shouldBeEqualOrFirstIsUnreachable( curr->right->type, Type(Type::v128), curr, "expected operand of type v128"); for (uint8_t index : curr->mask) { shouldBeTrue(index < 32, curr, "Invalid lane index in mask"); } } void FunctionValidator::visitSIMDTernary(SIMDTernary* curr) { shouldBeTrue( getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::v128), curr, "SIMD ternary must have type v128"); shouldBeEqualOrFirstIsUnreachable( curr->a->type, Type(Type::v128), curr, "expected operand of type v128"); shouldBeEqualOrFirstIsUnreachable( curr->b->type, Type(Type::v128), curr, "expected operand of type v128"); shouldBeEqualOrFirstIsUnreachable( curr->c->type, Type(Type::v128), curr, "expected operand of type v128"); } void FunctionValidator::visitSIMDShift(SIMDShift* curr) { shouldBeTrue( getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::v128), curr, "vector shift must have type v128"); shouldBeEqualOrFirstIsUnreachable( curr->vec->type, Type(Type::v128), curr, "expected operand of type v128"); shouldBeEqualOrFirstIsUnreachable(curr->shift->type, Type(Type::i32), curr, "expected shift amount to have type i32"); } void FunctionValidator::visitSIMDLoad(SIMDLoad* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); shouldBeTrue( getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::v128), curr, "load_splat must have type v128"); shouldBeEqualOrFirstIsUnreachable( curr->ptr->type, indexType(), curr, "load_splat address must match memory index type"); Type memAlignType = Type::none; switch (curr->op) { case Load8SplatVec128: case Load16SplatVec128: case Load32SplatVec128: case Load32ZeroVec128: memAlignType = Type::i32; break; case Load64SplatVec128: case Load8x8SVec128: case Load8x8UVec128: case Load16x4SVec128: case Load16x4UVec128: case Load32x2SVec128: case Load32x2UVec128: case Load64ZeroVec128: memAlignType = Type::i64; break; } Index bytes = curr->getMemBytes(); validateAlignment(curr->align, memAlignType, bytes, /*isAtomic=*/false, curr); } void FunctionValidator::visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); shouldBeTrue( getModule()->features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)"); if (curr->isLoad()) { shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::v128), curr, "loadX_lane must have type v128"); } else { shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::none), curr, "storeX_lane must have type none"); } shouldBeEqualOrFirstIsUnreachable( curr->ptr->type, indexType(), curr, "loadX_lane or storeX_lane address must match memory index type"); shouldBeEqualOrFirstIsUnreachable( curr->vec->type, Type(Type::v128), curr, "loadX_lane or storeX_lane vector argument must have type v128"); size_t lanes; Type memAlignType = Type::none; switch (curr->op) { case Load8LaneVec128: case Store8LaneVec128: lanes = 16; memAlignType = Type::i32; break; case Load16LaneVec128: case Store16LaneVec128: lanes = 8; memAlignType = Type::i32; break; case Load32LaneVec128: case Store32LaneVec128: lanes = 4; memAlignType = Type::i32; break; case Load64LaneVec128: case Store64LaneVec128: lanes = 2; memAlignType = Type::i64; break; default: WASM_UNREACHABLE("Unexpected SIMDLoadStoreLane op"); } Index bytes = curr->getMemBytes(); validateAlignment(curr->align, memAlignType, bytes, /*isAtomic=*/false, curr); shouldBeTrue(curr->index < lanes, curr, "invalid lane index"); } void FunctionValidator::visitMemoryInit(MemoryInit* curr) { shouldBeTrue(getModule()->features.hasBulkMemory(), curr, "Bulk memory operation (bulk memory is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::none), curr, "memory.init must have type none"); shouldBeEqualOrFirstIsUnreachable( curr->dest->type, indexType(), curr, "memory.init dest must match memory index type"); shouldBeEqualOrFirstIsUnreachable(curr->offset->type, Type(Type::i32), curr, "memory.init offset must be an i32"); shouldBeEqualOrFirstIsUnreachable( curr->size->type, Type(Type::i32), curr, "memory.init size must be an i32"); if (!shouldBeTrue(getModule()->memory.exists, curr, "Memory operations require a memory")) { return; } shouldBeTrue(curr->segment < getModule()->memory.segments.size(), curr, "memory.init segment index out of bounds"); } void FunctionValidator::visitDataDrop(DataDrop* curr) { shouldBeTrue(getModule()->features.hasBulkMemory(), curr, "Bulk memory operation (bulk memory is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::none), curr, "data.drop must have type none"); if (!shouldBeTrue(getModule()->memory.exists, curr, "Memory operations require a memory")) { return; } shouldBeTrue(curr->segment < getModule()->memory.segments.size(), curr, "data.drop segment index out of bounds"); } void FunctionValidator::visitMemoryCopy(MemoryCopy* curr) { shouldBeTrue(getModule()->features.hasBulkMemory(), curr, "Bulk memory operation (bulk memory is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::none), curr, "memory.copy must have type none"); shouldBeEqualOrFirstIsUnreachable( curr->dest->type, indexType(), curr, "memory.copy dest must match memory index type"); shouldBeEqualOrFirstIsUnreachable( curr->source->type, indexType(), curr, "memory.copy source must match memory index type"); shouldBeEqualOrFirstIsUnreachable( curr->size->type, indexType(), curr, "memory.copy size must match memory index type"); shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); } void FunctionValidator::visitMemoryFill(MemoryFill* curr) { shouldBeTrue(getModule()->features.hasBulkMemory(), curr, "Bulk memory operation (bulk memory is disabled)"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::none), curr, "memory.fill must have type none"); shouldBeEqualOrFirstIsUnreachable( curr->dest->type, indexType(), curr, "memory.fill dest must match memory index type"); shouldBeEqualOrFirstIsUnreachable(curr->value->type, Type(Type::i32), curr, "memory.fill value must be an i32"); shouldBeEqualOrFirstIsUnreachable( curr->size->type, indexType(), curr, "memory.fill size must match memory index type"); shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); } void FunctionValidator::validateMemBytes(uint8_t bytes, Type type, Expression* curr) { switch (type.getBasic()) { case Type::i32: shouldBeTrue(bytes == 1 || bytes == 2 || bytes == 4, curr, "expected i32 operation to touch 1, 2, or 4 bytes"); break; case Type::i64: shouldBeTrue(bytes == 1 || bytes == 2 || bytes == 4 || bytes == 8, curr, "expected i64 operation to touch 1, 2, 4, or 8 bytes"); break; case Type::f32: shouldBeEqual( bytes, uint8_t(4), curr, "expected f32 operation to touch 4 bytes"); break; case Type::f64: shouldBeEqual( bytes, uint8_t(8), curr, "expected f64 operation to touch 8 bytes"); break; case Type::v128: shouldBeEqual( bytes, uint8_t(16), curr, "expected v128 operation to touch 16 bytes"); break; case Type::unreachable: break; case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: WASM_UNREACHABLE("unexpected type"); } } void FunctionValidator::visitBinary(Binary* curr) { if (curr->left->type != Type::unreachable && curr->right->type != Type::unreachable) { shouldBeEqual(curr->left->type, curr->right->type, curr, "binary child types must be equal"); } switch (curr->op) { case AddInt32: case SubInt32: case MulInt32: case DivSInt32: case DivUInt32: case RemSInt32: case RemUInt32: case AndInt32: case OrInt32: case XorInt32: case ShlInt32: case ShrUInt32: case ShrSInt32: case RotLInt32: case RotRInt32: case EqInt32: case NeInt32: case LtSInt32: case LtUInt32: case LeSInt32: case LeUInt32: case GtSInt32: case GtUInt32: case GeSInt32: case GeUInt32: { shouldBeEqualOrFirstIsUnreachable( curr->left->type, Type(Type::i32), curr, "i32 op"); break; } case AddInt64: case SubInt64: case MulInt64: case DivSInt64: case DivUInt64: case RemSInt64: case RemUInt64: case AndInt64: case OrInt64: case XorInt64: case ShlInt64: case ShrUInt64: case ShrSInt64: case RotLInt64: case RotRInt64: case EqInt64: case NeInt64: case LtSInt64: case LtUInt64: case LeSInt64: case LeUInt64: case GtSInt64: case GtUInt64: case GeSInt64: case GeUInt64: { shouldBeEqualOrFirstIsUnreachable( curr->left->type, Type(Type::i64), curr, "i64 op"); break; } case AddFloat32: case SubFloat32: case MulFloat32: case DivFloat32: case CopySignFloat32: case MinFloat32: case MaxFloat32: case EqFloat32: case NeFloat32: case LtFloat32: case LeFloat32: case GtFloat32: case GeFloat32: { shouldBeEqualOrFirstIsUnreachable( curr->left->type, Type(Type::f32), curr, "f32 op"); break; } case AddFloat64: case SubFloat64: case MulFloat64: case DivFloat64: case CopySignFloat64: case MinFloat64: case MaxFloat64: case EqFloat64: case NeFloat64: case LtFloat64: case LeFloat64: case GtFloat64: case GeFloat64: { shouldBeEqualOrFirstIsUnreachable( curr->left->type, Type(Type::f64), curr, "f64 op"); break; } case EqVecI8x16: case NeVecI8x16: case LtSVecI8x16: case LtUVecI8x16: case LeSVecI8x16: case LeUVecI8x16: case GtSVecI8x16: case GtUVecI8x16: case GeSVecI8x16: case GeUVecI8x16: case EqVecI16x8: case NeVecI16x8: case LtSVecI16x8: case LtUVecI16x8: case LeSVecI16x8: case LeUVecI16x8: case GtSVecI16x8: case GtUVecI16x8: case GeSVecI16x8: case GeUVecI16x8: case EqVecI32x4: case NeVecI32x4: case LtSVecI32x4: case LtUVecI32x4: case LeSVecI32x4: case LeUVecI32x4: case GtSVecI32x4: case GtUVecI32x4: case GeSVecI32x4: case GeUVecI32x4: case EqVecI64x2: case NeVecI64x2: case LtSVecI64x2: case LeSVecI64x2: case GtSVecI64x2: case GeSVecI64x2: case EqVecF32x4: case NeVecF32x4: case LtVecF32x4: case LeVecF32x4: case GtVecF32x4: case GeVecF32x4: case EqVecF64x2: case NeVecF64x2: case LtVecF64x2: case LeVecF64x2: case GtVecF64x2: case GeVecF64x2: case AndVec128: case OrVec128: case XorVec128: case AndNotVec128: case AddVecI8x16: case AddSatSVecI8x16: case AddSatUVecI8x16: case SubVecI8x16: case SubSatSVecI8x16: case SubSatUVecI8x16: case MinSVecI8x16: case MinUVecI8x16: case MaxSVecI8x16: case MaxUVecI8x16: case AvgrUVecI8x16: case Q15MulrSatSVecI16x8: case ExtMulLowSVecI16x8: case ExtMulHighSVecI16x8: case ExtMulLowUVecI16x8: case ExtMulHighUVecI16x8: case AddVecI16x8: case AddSatSVecI16x8: case AddSatUVecI16x8: case SubVecI16x8: case SubSatSVecI16x8: case SubSatUVecI16x8: case MulVecI16x8: case MinSVecI16x8: case MinUVecI16x8: case MaxSVecI16x8: case MaxUVecI16x8: case AvgrUVecI16x8: case AddVecI32x4: case SubVecI32x4: case MulVecI32x4: case MinSVecI32x4: case MinUVecI32x4: case MaxSVecI32x4: case MaxUVecI32x4: case DotSVecI16x8ToVecI32x4: case ExtMulLowSVecI32x4: case ExtMulHighSVecI32x4: case ExtMulLowUVecI32x4: case ExtMulHighUVecI32x4: case AddVecI64x2: case SubVecI64x2: case MulVecI64x2: case ExtMulLowSVecI64x2: case ExtMulHighSVecI64x2: case ExtMulLowUVecI64x2: case ExtMulHighUVecI64x2: case AddVecF32x4: case SubVecF32x4: case MulVecF32x4: case DivVecF32x4: case MinVecF32x4: case MaxVecF32x4: case PMinVecF32x4: case PMaxVecF32x4: case RelaxedMinVecF32x4: case RelaxedMaxVecF32x4: case AddVecF64x2: case SubVecF64x2: case MulVecF64x2: case DivVecF64x2: case MinVecF64x2: case MaxVecF64x2: case PMinVecF64x2: case PMaxVecF64x2: case RelaxedMinVecF64x2: case RelaxedMaxVecF64x2: case NarrowSVecI16x8ToVecI8x16: case NarrowUVecI16x8ToVecI8x16: case NarrowSVecI32x4ToVecI16x8: case NarrowUVecI32x4ToVecI16x8: case SwizzleVecI8x16: case RelaxedSwizzleVecI8x16: case RelaxedQ15MulrSVecI16x8: case DotI8x16I7x16SToVecI16x8: case DotI8x16I7x16UToVecI16x8: { shouldBeEqualOrFirstIsUnreachable( curr->left->type, Type(Type::v128), curr, "v128 op"); shouldBeEqualOrFirstIsUnreachable( curr->right->type, Type(Type::v128), curr, "v128 op"); break; } case InvalidBinary: WASM_UNREACHABLE("invliad binary op"); } shouldBeTrue(Features::get(curr->op) <= getModule()->features, curr, "all used features should be allowed"); } void FunctionValidator::visitUnary(Unary* curr) { shouldBeUnequal(curr->value->type, Type(Type::none), curr, "unaries must not receive a none as their input"); if (curr->value->type == Type::unreachable) { return; // nothing to check } switch (curr->op) { case ClzInt32: case CtzInt32: case PopcntInt32: { shouldBeEqual(curr->value->type, Type(Type::i32), curr, "i32 unary value type must be correct"); break; } case ClzInt64: case CtzInt64: case PopcntInt64: { shouldBeEqual(curr->value->type, Type(Type::i64), curr, "i64 unary value type must be correct"); break; } case NegFloat32: case AbsFloat32: case CeilFloat32: case FloorFloat32: case TruncFloat32: case NearestFloat32: case SqrtFloat32: { shouldBeEqual(curr->value->type, Type(Type::f32), curr, "f32 unary value type must be correct"); break; } case NegFloat64: case AbsFloat64: case CeilFloat64: case FloorFloat64: case TruncFloat64: case NearestFloat64: case SqrtFloat64: { shouldBeEqual(curr->value->type, Type(Type::f64), curr, "f64 unary value type must be correct"); break; } case EqZInt32: { shouldBeTrue( curr->value->type == Type::i32, curr, "i32.eqz input must be i32"); break; } case EqZInt64: { shouldBeTrue(curr->value->type == Type(Type::i64), curr, "i64.eqz input must be i64"); break; } case ExtendSInt32: case ExtendUInt32: case ExtendS8Int32: case ExtendS16Int32: { shouldBeEqual(curr->value->type, Type(Type::i32), curr, "extend type must be correct"); break; } case ExtendS8Int64: case ExtendS16Int64: case ExtendS32Int64: { shouldBeEqual(curr->value->type, Type(Type::i64), curr, "extend type must be correct"); break; } case WrapInt64: { shouldBeEqual( curr->value->type, Type(Type::i64), curr, "wrap type must be correct"); break; } case TruncSFloat32ToInt32: case TruncSFloat32ToInt64: case TruncUFloat32ToInt32: case TruncUFloat32ToInt64: { shouldBeEqual( curr->value->type, Type(Type::f32), curr, "trunc type must be correct"); break; } case TruncSatSFloat32ToInt32: case TruncSatSFloat32ToInt64: case TruncSatUFloat32ToInt32: case TruncSatUFloat32ToInt64: { shouldBeEqual( curr->value->type, Type(Type::f32), curr, "trunc type must be correct"); break; } case TruncSFloat64ToInt32: case TruncSFloat64ToInt64: case TruncUFloat64ToInt32: case TruncUFloat64ToInt64: { shouldBeEqual( curr->value->type, Type(Type::f64), curr, "trunc type must be correct"); break; } case TruncSatSFloat64ToInt32: case TruncSatSFloat64ToInt64: case TruncSatUFloat64ToInt32: case TruncSatUFloat64ToInt64: { shouldBeEqual( curr->value->type, Type(Type::f64), curr, "trunc type must be correct"); break; } case ReinterpretFloat32: { shouldBeEqual(curr->value->type, Type(Type::f32), curr, "reinterpret/f32 type must be correct"); break; } case ReinterpretFloat64: { shouldBeEqual(curr->value->type, Type(Type::f64), curr, "reinterpret/f64 type must be correct"); break; } case ConvertUInt32ToFloat32: case ConvertUInt32ToFloat64: case ConvertSInt32ToFloat32: case ConvertSInt32ToFloat64: { shouldBeEqual(curr->value->type, Type(Type::i32), curr, "convert type must be correct"); break; } case ConvertUInt64ToFloat32: case ConvertUInt64ToFloat64: case ConvertSInt64ToFloat32: case ConvertSInt64ToFloat64: { shouldBeEqual(curr->value->type, Type(Type::i64), curr, "convert type must be correct"); break; } case PromoteFloat32: { shouldBeEqual(curr->value->type, Type(Type::f32), curr, "promote type must be correct"); break; } case DemoteFloat64: { shouldBeEqual(curr->value->type, Type(Type::f64), curr, "demote type must be correct"); break; } case ReinterpretInt32: { shouldBeEqual(curr->value->type, Type(Type::i32), curr, "reinterpret/i32 type must be correct"); break; } case ReinterpretInt64: { shouldBeEqual(curr->value->type, Type(Type::i64), curr, "reinterpret/i64 type must be correct"); break; } case SplatVecI8x16: case SplatVecI16x8: case SplatVecI32x4: shouldBeEqual( curr->type, Type(Type::v128), curr, "expected splat to have v128 type"); shouldBeEqual( curr->value->type, Type(Type::i32), curr, "expected i32 splat value"); break; case SplatVecI64x2: shouldBeEqual( curr->type, Type(Type::v128), curr, "expected splat to have v128 type"); shouldBeEqual( curr->value->type, Type(Type::i64), curr, "expected i64 splat value"); break; case SplatVecF32x4: shouldBeEqual( curr->type, Type(Type::v128), curr, "expected splat to have v128 type"); shouldBeEqual( curr->value->type, Type(Type::f32), curr, "expected f32 splat value"); break; case SplatVecF64x2: shouldBeEqual( curr->type, Type(Type::v128), curr, "expected splat to have v128 type"); shouldBeEqual( curr->value->type, Type(Type::f64), curr, "expected f64 splat value"); break; case NotVec128: case PopcntVecI8x16: case AbsVecI8x16: case AbsVecI16x8: case AbsVecI32x4: case AbsVecI64x2: case NegVecI8x16: case NegVecI16x8: case NegVecI32x4: case NegVecI64x2: case AbsVecF32x4: case NegVecF32x4: case SqrtVecF32x4: case CeilVecF32x4: case FloorVecF32x4: case TruncVecF32x4: case NearestVecF32x4: case AbsVecF64x2: case NegVecF64x2: case SqrtVecF64x2: case CeilVecF64x2: case FloorVecF64x2: case TruncVecF64x2: case NearestVecF64x2: case ExtAddPairwiseSVecI8x16ToI16x8: case ExtAddPairwiseUVecI8x16ToI16x8: case ExtAddPairwiseSVecI16x8ToI32x4: case ExtAddPairwiseUVecI16x8ToI32x4: case TruncSatSVecF32x4ToVecI32x4: case TruncSatUVecF32x4ToVecI32x4: case ConvertSVecI32x4ToVecF32x4: case ConvertUVecI32x4ToVecF32x4: case ExtendLowSVecI8x16ToVecI16x8: case ExtendHighSVecI8x16ToVecI16x8: case ExtendLowUVecI8x16ToVecI16x8: case ExtendHighUVecI8x16ToVecI16x8: case ExtendLowSVecI16x8ToVecI32x4: case ExtendHighSVecI16x8ToVecI32x4: case ExtendLowUVecI16x8ToVecI32x4: case ExtendHighUVecI16x8ToVecI32x4: case ExtendLowSVecI32x4ToVecI64x2: case ExtendHighSVecI32x4ToVecI64x2: case ExtendLowUVecI32x4ToVecI64x2: case ExtendHighUVecI32x4ToVecI64x2: case ConvertLowSVecI32x4ToVecF64x2: case ConvertLowUVecI32x4ToVecF64x2: case TruncSatZeroSVecF64x2ToVecI32x4: case TruncSatZeroUVecF64x2ToVecI32x4: case DemoteZeroVecF64x2ToVecF32x4: case PromoteLowVecF32x4ToVecF64x2: case RelaxedTruncSVecF32x4ToVecI32x4: case RelaxedTruncUVecF32x4ToVecI32x4: case RelaxedTruncZeroSVecF64x2ToVecI32x4: case RelaxedTruncZeroUVecF64x2ToVecI32x4: shouldBeEqual(curr->type, Type(Type::v128), curr, "expected v128 type"); shouldBeEqual( curr->value->type, Type(Type::v128), curr, "expected v128 operand"); break; case AnyTrueVec128: case AllTrueVecI8x16: case AllTrueVecI16x8: case AllTrueVecI32x4: case AllTrueVecI64x2: case BitmaskVecI8x16: case BitmaskVecI16x8: case BitmaskVecI32x4: case BitmaskVecI64x2: shouldBeEqual(curr->type, Type(Type::i32), curr, "expected i32 type"); shouldBeEqual( curr->value->type, Type(Type::v128), curr, "expected v128 operand"); break; case InvalidUnary: WASM_UNREACHABLE("invalid unary op"); } shouldBeTrue(Features::get(curr->op) <= getModule()->features, curr, "all used features should be allowed"); } void FunctionValidator::visitSelect(Select* curr) { shouldBeUnequal( curr->ifFalse->type, Type(Type::none), curr, "select right must be valid"); shouldBeUnequal( curr->type, Type(Type::none), curr, "select type must be valid"); shouldBeTrue(curr->condition->type == Type::unreachable || curr->condition->type == Type::i32, curr, "select condition must be valid"); if (curr->ifTrue->type != Type::unreachable) { shouldBeFalse( curr->ifTrue->type.isTuple(), curr, "select value may not be a tuple"); } if (curr->ifFalse->type != Type::unreachable) { shouldBeFalse( curr->ifFalse->type.isTuple(), curr, "select value may not be a tuple"); } if (curr->type != Type::unreachable) { shouldBeTrue(Type::isSubType(curr->ifTrue->type, curr->type), curr, "select's left expression must be subtype of select's type"); shouldBeTrue(Type::isSubType(curr->ifFalse->type, curr->type), curr, "select's right expression must be subtype of select's type"); } } void FunctionValidator::visitDrop(Drop* curr) { shouldBeTrue(curr->value->type.isConcrete() || curr->value->type == Type::unreachable, curr, "can only drop a valid value"); } void FunctionValidator::visitReturn(Return* curr) { returnTypes.insert(curr->value ? curr->value->type : Type::none); } void FunctionValidator::visitMemorySize(MemorySize* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); } void FunctionValidator::visitMemoryGrow(MemoryGrow* curr) { shouldBeTrue( getModule()->memory.exists, curr, "Memory operations require a memory"); shouldBeEqualOrFirstIsUnreachable(curr->delta->type, indexType(), curr, "memory.grow must match memory index type"); } void FunctionValidator::visitRefNull(RefNull* curr) { // If we are not in a function, this is a global location like a table. We // allow RefNull there as we represent tables that way regardless of what // features are enabled. shouldBeTrue(!getFunction() || getModule()->features.hasReferenceTypes(), curr, "ref.null requires reference-types to be enabled"); shouldBeTrue( curr->type.isNullable(), curr, "ref.null types must be nullable"); } void FunctionValidator::visitRefIs(RefIs* curr) { shouldBeTrue(getModule()->features.hasReferenceTypes(), curr, "ref.is_* requires reference-types to be enabled"); shouldBeTrue(curr->value->type == Type::unreachable || curr->value->type.isRef(), curr->value, "ref.is_*'s argument should be a reference type"); } void FunctionValidator::visitRefFunc(RefFunc* curr) { // If we are not in a function, this is a global location like a table. We // allow RefFunc there as we represent tables that way regardless of what // features are enabled. shouldBeTrue(!getFunction() || getModule()->features.hasReferenceTypes(), curr, "ref.func requires reference-types to be enabled"); if (!info.validateGlobally) { return; } auto* func = getModule()->getFunctionOrNull(curr->func); shouldBeTrue(!!func, curr, "function argument of ref.func must exist"); shouldBeTrue(curr->type.isFunction(), curr, "ref.func must have a function reference type"); shouldBeTrue( !curr->type.isNullable(), curr, "ref.func must have non-nullable type"); // TODO: verify it also has a typed function references type, and the right // one, // curr->type.getHeapType().getSignature() // That is blocked on having the ability to create signature types in the C // API (for now those users create the type with funcref). This also needs to // be fixed in LegalizeJSInterface and FuncCastEmulation and other places that // update function types. // TODO: check for non-nullability } void FunctionValidator::visitRefEq(RefEq* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "ref.eq requires gc to be enabled"); shouldBeSubType(curr->left->type, Type::eqref, curr->left, "ref.eq's left argument should be a subtype of eqref"); shouldBeSubType(curr->right->type, Type::eqref, curr->right, "ref.eq's right argument should be a subtype of eqref"); } void FunctionValidator::visitTableGet(TableGet* curr) { shouldBeTrue(getModule()->features.hasReferenceTypes(), curr, "table.get requires reference types to be enabled"); shouldBeEqualOrFirstIsUnreachable( curr->index->type, Type(Type::i32), curr, "table.get index must be an i32"); auto* table = getModule()->getTableOrNull(curr->table); if (shouldBeTrue(!!table, curr, "table.get table must exist") && curr->type != Type::unreachable) { shouldBeEqual( curr->type, table->type, curr, "table.get must have same type as table."); } } void FunctionValidator::visitTableSet(TableSet* curr) { shouldBeTrue(getModule()->features.hasReferenceTypes(), curr, "table.set requires reference types to be enabled"); shouldBeEqualOrFirstIsUnreachable( curr->index->type, Type(Type::i32), curr, "table.set index must be an i32"); auto* table = getModule()->getTableOrNull(curr->table); if (shouldBeTrue(!!table, curr, "table.set table must exist") && curr->type != Type::unreachable) { shouldBeSubType(curr->value->type, table->type, curr, "table.set value must have right type"); } } void FunctionValidator::visitTableSize(TableSize* curr) { shouldBeTrue(getModule()->features.hasReferenceTypes(), curr, "table.size requires reference types to be enabled"); auto* table = getModule()->getTableOrNull(curr->table); shouldBeTrue(!!table, curr, "table.size table must exist"); } void FunctionValidator::visitTableGrow(TableGrow* curr) { shouldBeTrue(getModule()->features.hasReferenceTypes(), curr, "table.grow requires reference types to be enabled"); auto* table = getModule()->getTableOrNull(curr->table); if (shouldBeTrue(!!table, curr, "table.grow table must exist") && curr->type != Type::unreachable) { shouldBeSubType(curr->value->type, table->type, curr, "table.grow value must have right type"); shouldBeEqual(curr->delta->type, Type(Type::i32), curr, "table.grow must match table index type"); } } void FunctionValidator::noteDelegate(Name name, Expression* curr) { if (name != DELEGATE_CALLER_TARGET) { shouldBeTrue(delegateTargetNames.count(name) != 0, curr, "all delegate targets must be valid"); } } void FunctionValidator::noteRethrow(Name name, Expression* curr) { shouldBeTrue(rethrowTargetNames.count(name) != 0, curr, "all rethrow targets must be valid"); } void FunctionValidator::visitTry(Try* curr) { shouldBeTrue(getModule()->features.hasExceptionHandling(), curr, "try requires exception-handling to be enabled"); if (curr->name.is()) { noteLabelName(curr->name); } if (curr->type != Type::unreachable) { shouldBeSubType(curr->body->type, curr->type, curr->body, "try's type does not match try body's type"); for (auto catchBody : curr->catchBodies) { shouldBeSubType(catchBody->type, curr->type, catchBody, "try's type does not match catch's body type"); } } else { shouldBeEqual(curr->body->type, Type(Type::unreachable), curr, "unreachable try-catch must have unreachable try body"); for (auto catchBody : curr->catchBodies) { shouldBeEqual(catchBody->type, Type(Type::unreachable), curr, "unreachable try-catch must have unreachable catch body"); } } shouldBeTrue(curr->catchBodies.size() - curr->catchTags.size() <= 1, curr, "the number of catch blocks and tags do not match"); shouldBeFalse(curr->isCatch() && curr->isDelegate(), curr, "try cannot have both catch and delegate at the same time"); // Given a catch body, find pops corresponding to the catch auto findPops = [](Expression* expr) { SmallVector pops; SmallVector work; work.push_back(expr); while (!work.empty()) { auto* curr = work.back(); work.pop_back(); if (auto* pop = curr->dynCast()) { pops.push_back(pop); } else if (auto* try_ = curr->dynCast()) { // We don't go into inner catch bodies; pops in inner catch bodies // belong to the inner catches work.push_back(try_->body); } else { for (auto* child : ChildIterator(curr)) { work.push_back(child); } } } return pops; }; for (Index i = 0; i < curr->catchTags.size(); i++) { Name tagName = curr->catchTags[i]; auto* tag = getModule()->getTagOrNull(tagName); if (!shouldBeTrue(tag != nullptr, curr, "")) { getStream() << "tag name is invalid: " << tagName << "\n"; } auto* catchBody = curr->catchBodies[i]; SmallVector pops = findPops(catchBody); if (tag->sig.params == Type::none) { if (!shouldBeTrue(pops.empty(), curr, "")) { getStream() << "catch's tag (" << tagName << ") doesn't have any params, but there are pops"; } } else { if (shouldBeTrue(pops.size() == 1, curr, "")) { auto* pop = *pops.begin(); if (!shouldBeSubType(pop->type, tag->sig.params, curr, "")) { getStream() << "catch's tag (" << tagName << ")'s pop doesn't have the same type as the tag's params"; } if (!shouldBeTrue( EHUtils::containsValidDanglingPop(catchBody), curr, "")) { getStream() << "catch's body (" << tagName << ")'s pop's location is not valid"; } } else { getStream() << "catch's tag (" << tagName << ") has params, so there should be a single pop within " "the catch body"; } } } if (curr->hasCatchAll()) { auto* catchAllBody = curr->catchBodies.back(); shouldBeTrue(findPops(catchAllBody).empty(), curr, "catch_all's body should not have pops"); } if (curr->isDelegate()) { noteDelegate(curr->delegateTarget, curr); } rethrowTargetNames.erase(curr->name); } void FunctionValidator::visitThrow(Throw* curr) { shouldBeTrue(getModule()->features.hasExceptionHandling(), curr, "throw requires exception-handling to be enabled"); shouldBeEqual(curr->type, Type(Type::unreachable), curr, "throw's type must be unreachable"); if (!info.validateGlobally) { return; } auto* tag = getModule()->getTagOrNull(curr->tag); if (!shouldBeTrue(!!tag, curr, "throw's tag must exist")) { return; } if (!shouldBeTrue(curr->operands.size() == tag->sig.params.size(), curr, "tag's param numbers must match")) { return; } size_t i = 0; for (const auto& param : tag->sig.params) { if (!shouldBeSubType(curr->operands[i]->type, param, curr->operands[i], "tag param types must match") && !info.quiet) { getStream() << "(on argument " << i << ")\n"; } ++i; } } void FunctionValidator::visitRethrow(Rethrow* curr) { shouldBeTrue(getModule()->features.hasExceptionHandling(), curr, "rethrow requires exception-handling to be enabled"); shouldBeEqual(curr->type, Type(Type::unreachable), curr, "rethrow's type must be unreachable"); noteRethrow(curr->target, curr); } void FunctionValidator::visitTupleMake(TupleMake* curr) { shouldBeTrue(getModule()->features.hasMultivalue(), curr, "Tuples are not allowed unless multivalue is enabled"); shouldBeTrue( curr->operands.size() > 1, curr, "tuple.make must have multiple operands"); std::vector types; for (auto* op : curr->operands) { if (op->type == Type::unreachable) { shouldBeTrue( curr->type == Type::unreachable, curr, "If tuple.make has an unreachable operand, it must be unreachable"); return; } types.push_back(op->type); } shouldBeSubType(Type(types), curr->type, curr, "Type of tuple.make does not match types of its operands"); } void FunctionValidator::visitTupleExtract(TupleExtract* curr) { shouldBeTrue(getModule()->features.hasMultivalue(), curr, "Tuples are not allowed unless multivalue is enabled"); if (curr->tuple->type == Type::unreachable) { shouldBeTrue( curr->type == Type::unreachable, curr, "If tuple.extract has an unreachable operand, it must be unreachable"); } else { bool inBounds = curr->index < curr->tuple->type.size(); shouldBeTrue(inBounds, curr, "tuple.extract index out of bounds"); if (inBounds) { shouldBeSubType( curr->tuple->type[curr->index], curr->type, curr, "tuple.extract type does not match the type of the extracted element"); } } } void FunctionValidator::visitCallRef(CallRef* curr) { validateReturnCall(curr); shouldBeTrue(getModule()->features.hasTypedFunctionReferences(), curr, "call_ref requires typed-function-references to be enabled"); if (curr->target->type != Type::unreachable) { if (shouldBeTrue(curr->target->type.isFunction(), curr, "call_ref target must be a function reference")) { validateCallParamsAndResult(curr, curr->target->type.getHeapType()); } } } void FunctionValidator::visitI31New(I31New* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "i31.new requires gc to be enabled"); shouldBeSubType(curr->value->type, Type::i32, curr->value, "i31.new's argument should be i32"); } void FunctionValidator::visitI31Get(I31Get* curr) { shouldBeTrue(getModule()->features.hasGC(), curr, "i31.get_s/u requires gc to be enabled"); shouldBeSubType(curr->i31->type, Type::i31ref, curr->i31, "i31.get_s/u's argument should be i31ref"); } void FunctionValidator::visitRefTest(RefTest* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "ref.test requires gc to be enabled"); if (curr->ref->type != Type::unreachable) { shouldBeTrue( curr->ref->type.isRef(), curr, "ref.test ref must have ref type"); } if (curr->rtt) { if (curr->rtt->type != Type::unreachable) { shouldBeTrue( curr->rtt->type.isRtt(), curr, "ref.test rtt must have rtt type"); } shouldBeEqual(curr->intendedType, HeapType(), curr, "dynamic ref.test must not use intendedType field"); } else { shouldBeUnequal(curr->intendedType, HeapType(), curr, "static ref.test must set intendedType field"); shouldBeTrue( !curr->intendedType.isBasic(), curr, "ref.test must test a non-basic"); } } void FunctionValidator::visitRefCast(RefCast* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "ref.cast requires gc to be enabled"); if (curr->ref->type != Type::unreachable) { shouldBeTrue( curr->ref->type.isRef(), curr, "ref.cast ref must have ref type"); } if (curr->rtt) { if (curr->rtt->type != Type::unreachable) { shouldBeTrue( curr->rtt->type.isRtt(), curr, "ref.cast rtt must have rtt type"); } shouldBeEqual(curr->intendedType, HeapType(), curr, "dynamic ref.cast must not use intendedType field"); } else { shouldBeUnequal(curr->intendedType, HeapType(), curr, "static ref.cast must set intendedType field"); shouldBeTrue( !curr->intendedType.isBasic(), curr, "ref.cast must cast to a non-basic"); } } void FunctionValidator::visitBrOn(BrOn* curr) { shouldBeTrue(getModule()->features.hasGC(), curr, "br_on_cast requires gc to be enabled"); if (curr->ref->type != Type::unreachable) { shouldBeTrue( curr->ref->type.isRef(), curr, "br_on_cast ref must have ref type"); } if (curr->op == BrOnCast || curr->op == BrOnCastFail) { if (curr->rtt) { // Note that an unreachable rtt is not supported: the text and binary // formats do not provide the type, so if it's unreachable we should not // even create a br_on_cast in such a case, as we'd have no idea what it // casts to. shouldBeTrue( curr->rtt->type.isRtt(), curr, "br_on_cast rtt must have rtt type"); shouldBeEqual(curr->intendedType, HeapType(), curr, "dynamic br_on_cast* must not use intendedType field"); } else { shouldBeUnequal(curr->intendedType, HeapType(), curr, "static br_on_cast* must set intendedType field"); shouldBeTrue(!curr->intendedType.isBasic(), curr, "br_on_cast* must cast to a non-basic"); } } else { shouldBeTrue(curr->rtt == nullptr, curr, "non-cast BrOn must not have rtt"); shouldBeEqual(curr->intendedType, HeapType(), curr, "non-cast br_on* must not set intendedType field"); } noteBreak(curr->name, curr->getSentType(), curr); } void FunctionValidator::visitRttCanon(RttCanon* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "rtt.canon requires gc to be enabled"); shouldBeTrue(curr->type.isRtt(), curr, "rtt.canon must have RTT type"); auto rtt = curr->type.getRtt(); shouldBeEqual(rtt.depth, Index(curr->type.getHeapType().getDepth()), curr, "rtt.canon must have the depth of its heap type"); } void FunctionValidator::visitRttSub(RttSub* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "rtt.sub requires gc to be enabled"); shouldBeTrue(curr->type.isRtt(), curr, "rtt.sub must have RTT type"); if (curr->parent->type != Type::unreachable) { shouldBeTrue( curr->parent->type.isRtt(), curr, "rtt.sub parent must have RTT type"); auto parentRtt = curr->parent->type.getRtt(); auto rtt = curr->type.getRtt(); if (rtt.hasDepth() && parentRtt.hasDepth()) { shouldBeEqual(rtt.depth, parentRtt.depth + 1, curr, "rtt.canon has a depth of 1 over the parent"); } shouldBeTrue(HeapType::isSubType(rtt.heapType, parentRtt.heapType), curr, "rtt.sub parent must be a supertype"); } } void FunctionValidator::visitStructNew(StructNew* curr) { shouldBeTrue(getModule()->features.hasGC(), curr, "struct.new requires gc to be enabled"); if (curr->type == Type::unreachable) { return; } if (curr->rtt) { if (!shouldBeTrue( curr->rtt->type.isRtt(), curr, "struct.new rtt must be rtt")) { return; } } auto heapType = curr->type.getHeapType(); if (curr->rtt) { shouldBeEqual(curr->rtt->type.getHeapType(), heapType, curr, "struct.new heap type must match rtt"); } if (!shouldBeTrue( heapType.isStruct(), curr, "struct.new heap type must be struct")) { return; } const auto& fields = heapType.getStruct().fields; if (curr->isWithDefault()) { shouldBeTrue(curr->operands.empty(), curr, "struct.new_with_default should have no operands"); // All the fields must be defaultable. for (const auto& field : fields) { shouldBeTrue(field.type.isDefaultable(), field, "struct.new_with_default value type must be defaultable"); } } else { if (shouldBeEqual(curr->operands.size(), fields.size(), curr, "struct.new must have the right number of operands")) { // All the fields must have the proper type. for (Index i = 0; i < fields.size(); i++) { shouldBeSubType(curr->operands[i]->type, fields[i].type, curr, "struct.new operand must have proper type"); } } } } void FunctionValidator::visitStructGet(StructGet* curr) { shouldBeTrue(getModule()->features.hasGC(), curr, "struct.get requires gc to be enabled"); if (curr->ref->type == Type::unreachable) { return; } if (!shouldBeTrue(curr->ref->type.isStruct(), curr->ref, "struct.get ref must be a struct")) { return; } const auto& fields = curr->ref->type.getHeapType().getStruct().fields; shouldBeTrue(curr->index < fields.size(), curr, "bad struct.get field"); auto field = fields[curr->index]; // If the type is not packed, it must be marked internally as unsigned, by // convention. if (field.type != Type::i32 || field.packedType == Field::not_packed) { shouldBeFalse(curr->signed_, curr, "non-packed get cannot be signed"); } if (curr->ref->type == Type::unreachable) { return; } shouldBeEqual( curr->type, field.type, curr, "struct.get must have the proper type"); } void FunctionValidator::visitStructSet(StructSet* curr) { shouldBeTrue(getModule()->features.hasGC(), curr, "struct.set requires gc to be enabled"); if (curr->ref->type == Type::unreachable) { return; } if (!shouldBeTrue(curr->ref->type.isStruct(), curr->ref, "struct.set ref must be a struct")) { return; } if (curr->ref->type != Type::unreachable) { const auto& fields = curr->ref->type.getHeapType().getStruct().fields; shouldBeTrue(curr->index < fields.size(), curr, "bad struct.get field"); auto& field = fields[curr->index]; shouldBeSubType(curr->value->type, field.type, curr, "struct.set must have the proper type"); shouldBeEqual( field.mutable_, Mutable, curr, "struct.set field must be mutable"); } } void FunctionValidator::visitArrayNew(ArrayNew* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "array.new requires gc to be enabled"); shouldBeEqualOrFirstIsUnreachable( curr->size->type, Type(Type::i32), curr, "array.new size must be an i32"); if (curr->type == Type::unreachable) { return; } if (curr->rtt) { if (!shouldBeTrue( curr->rtt->type.isRtt(), curr, "array.new rtt must be rtt")) { return; } } auto heapType = curr->type.getHeapType(); if (curr->rtt) { shouldBeEqual(curr->rtt->type.getHeapType(), heapType, curr, "array.new heap type must match rtt"); } if (!shouldBeTrue( heapType.isArray(), curr, "array.new heap type must be array")) { return; } const auto& element = heapType.getArray().element; if (curr->isWithDefault()) { shouldBeTrue( !curr->init, curr, "array.new_with_default should have no init"); // The element must be defaultable. shouldBeTrue(element.type.isDefaultable(), element, "array.new_with_default value type must be defaultable"); } else { shouldBeTrue(!!curr->init, curr, "array.new should have an init"); // The inits must have the proper type. shouldBeSubType(curr->init->type, element.type, curr, "array.new init must have proper type"); } } void FunctionValidator::visitArrayInit(ArrayInit* curr) { shouldBeTrue(getModule()->features.hasGC(), curr, "array.init requires gc to be enabled"); if (curr->type == Type::unreachable) { return; } if (curr->rtt) { if (!shouldBeTrue( curr->rtt->type.isRtt(), curr, "array.init rtt must be rtt")) { return; } } auto heapType = curr->type.getHeapType(); if (curr->rtt) { shouldBeEqual(curr->rtt->type.getHeapType(), heapType, curr, "array.init heap type must match rtt"); } if (!shouldBeTrue( heapType.isArray(), curr, "array.init heap type must be array")) { return; } const auto& element = heapType.getArray().element; for (auto* value : curr->values) { shouldBeSubType(value->type, element.type, curr, "array.init value must have proper type"); } } void FunctionValidator::visitArrayGet(ArrayGet* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "array.get requires gc to be enabled"); shouldBeEqualOrFirstIsUnreachable( curr->index->type, Type(Type::i32), curr, "array.get index must be an i32"); if (curr->type == Type::unreachable) { return; } const auto& element = curr->ref->type.getHeapType().getArray().element; // If the type is not packed, it must be marked internally as unsigned, by // convention. if (element.type != Type::i32 || element.packedType == Field::not_packed) { shouldBeFalse(curr->signed_, curr, "non-packed get cannot be signed"); } shouldBeEqual( curr->type, element.type, curr, "array.get must have the proper type"); } void FunctionValidator::visitArraySet(ArraySet* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "array.set requires gc to be enabled"); shouldBeEqualOrFirstIsUnreachable( curr->index->type, Type(Type::i32), curr, "array.set index must be an i32"); if (curr->type == Type::unreachable) { return; } const auto& element = curr->ref->type.getHeapType().getArray().element; shouldBeSubType(curr->value->type, element.type, curr, "array.set must have the proper type"); shouldBeTrue(element.mutable_, curr, "array.set type must be mutable"); } void FunctionValidator::visitArrayLen(ArrayLen* curr) { shouldBeTrue( getModule()->features.hasGC(), curr, "array.len requires gc to be enabled"); shouldBeEqualOrFirstIsUnreachable( curr->type, Type(Type::i32), curr, "array.len result must be an i32"); } void FunctionValidator::visitArrayCopy(ArrayCopy* curr) { shouldBeTrue(getModule()->features.hasGC(), curr, "array.copy requires gc to be enabled"); shouldBeEqualOrFirstIsUnreachable(curr->srcIndex->type, Type(Type::i32), curr, "array.copy src index must be an i32"); shouldBeEqualOrFirstIsUnreachable(curr->destIndex->type, Type(Type::i32), curr, "array.copy dest index must be an i32"); if (curr->type == Type::unreachable) { return; } const auto& srcElement = curr->srcRef->type.getHeapType().getArray().element; const auto& destElement = curr->destRef->type.getHeapType().getArray().element; shouldBeSubType(srcElement.type, destElement.type, curr, "array.copy must have the proper types"); shouldBeTrue(destElement.mutable_, curr, "array.copy type must be mutable"); } void FunctionValidator::visitFunction(Function* curr) { if (curr->getResults().isTuple()) { shouldBeTrue(getModule()->features.hasMultivalue(), curr->body, "Multivalue function results (multivalue is not enabled)"); } FeatureSet features; for (const auto& param : curr->getParams()) { features |= param.getFeatures(); shouldBeTrue(param.isConcrete(), curr, "params must be concretely typed"); } for (const auto& result : curr->getResults()) { features |= result.getFeatures(); shouldBeTrue(result.isConcrete(), curr, "results must be concretely typed"); } for (const auto& var : curr->vars) { features |= var.getFeatures(); bool valid = getModule()->features.hasGCNNLocals() ? var.isDefaultableOrNonNullable() : var.isDefaultable(); shouldBeTrue(valid, var, "vars must be defaultable"); } shouldBeTrue(features <= getModule()->features, curr->name, "all used types should be allowed"); if (curr->profile == IRProfile::Poppy) { shouldBeTrue( curr->body->is(), curr->body, "Function body must be a block"); } // if function has no result, it is ignored // if body is unreachable, it might be e.g. a return shouldBeSubType(curr->body->type, curr->getResults(), curr->body, "function body type must match, if function returns"); for (Type returnType : returnTypes) { shouldBeSubType(returnType, curr->getResults(), curr->body, "function result must match, if function has returns"); } assert(breakTypes.empty()); assert(delegateTargetNames.empty()); assert(rethrowTargetNames.empty()); returnTypes.clear(); labelNames.clear(); // validate optional local names std::unordered_set seen; for (auto& pair : curr->localNames) { Name name = pair.second; shouldBeTrue(seen.insert(name).second, name, "local names must be unique"); } } static bool checkSegmentOffset(Expression* curr, Address add, Address max, FeatureSet features) { if (!Properties::isValidInConstantExpression(curr, features)) { return false; } auto* c = curr->dynCast(); if (!c) { // Unless the instruction is actually a const instruction, we don't // currently try to evaluate it. // TODO: Attempt to evaluate other expressions that might also be const // such as `global.get` or more complex instruction sequences involving // add/sub/mul/etc. return true; } uint64_t raw = c->value.getInteger(); if (raw > std::numeric_limits::max()) { return false; } if (raw + uint64_t(add) > std::numeric_limits::max()) { return false; } Address offset = raw; return offset + add <= max; } void FunctionValidator::validateAlignment( size_t align, Type type, Index bytes, bool isAtomic, Expression* curr) { if (isAtomic) { shouldBeEqual(align, (size_t)bytes, curr, "atomic accesses must have natural alignment"); return; } switch (align) { case 1: case 2: case 4: case 8: case 16: break; default: { info.fail("bad alignment: " + std::to_string(align), curr, getFunction()); break; } } shouldBeTrue(align <= bytes, curr, "alignment must not exceed natural"); TODO_SINGLE_COMPOUND(type); switch (type.getBasic()) { case Type::i32: case Type::f32: { shouldBeTrue(align <= 4, curr, "alignment must not exceed natural"); break; } case Type::i64: case Type::f64: { shouldBeTrue(align <= 8, curr, "alignment must not exceed natural"); break; } case Type::v128: case Type::unreachable: break; case Type::funcref: case Type::anyref: case Type::eqref: case Type::i31ref: case Type::dataref: case Type::none: WASM_UNREACHABLE("invalid type"); } } static void validateBinaryenIR(Module& wasm, ValidationInfo& info) { struct BinaryenIRValidator : public PostWalker> { ValidationInfo& info; std::unordered_set seen; BinaryenIRValidator(ValidationInfo& info) : info(info) {} void visitExpression(Expression* curr) { auto scope = getFunction() ? getFunction()->name : Name("(global scope)"); // check if a node type is 'stale', i.e., we forgot to finalize() the // node. auto oldType = curr->type; ReFinalizeNode().visit(curr); auto newType = curr->type; if (newType != oldType) { // We accept concrete => undefined, // e.g. // // (drop (block (result i32) (unreachable))) // // The block has an added type, not derived from the ast itself, so it // is ok for it to be either i32 or unreachable. if (!Type::isSubType(newType, oldType) && !(oldType.isConcrete() && newType == Type::unreachable)) { std::ostringstream ss; ss << "stale type found in " << scope << " on " << curr << "\n(marked as " << oldType << ", should be " << newType << ")\n"; info.fail(ss.str(), curr, getFunction()); } curr->type = oldType; } // check if a node is a duplicate - expressions must not be seen more than // once if (!seen.insert(curr).second) { std::ostringstream ss; ss << "expression seen more than once in the tree in " << scope << " on " << curr << '\n'; info.fail(ss.str(), curr, getFunction()); } } }; BinaryenIRValidator binaryenIRValidator(info); binaryenIRValidator.walkModule(&wasm); } // Main validator class static void validateImports(Module& module, ValidationInfo& info) { ModuleUtils::iterImportedFunctions(module, [&](Function* curr) { if (curr->getResults().isTuple()) { info.shouldBeTrue(module.features.hasMultivalue(), curr->name, "Imported multivalue function " "(multivalue is not enabled)"); } if (info.validateWeb) { for (const auto& param : curr->getParams()) { info.shouldBeUnequal(param, Type(Type::i64), curr->name, "Imported function must not have i64 parameters"); } for (const auto& result : curr->getResults()) { info.shouldBeUnequal(result, Type(Type::i64), curr->name, "Imported function must not have i64 results"); } } if (Intrinsics(module).isCallWithoutEffects(curr)) { auto lastParam = curr->getParams(); if (lastParam.isTuple()) { lastParam = lastParam.getTuple().types.back(); } info.shouldBeTrue(lastParam.isFunction(), curr->name, "call.if.used's last param must be a function"); } }); ModuleUtils::iterImportedGlobals(module, [&](Global* curr) { if (!module.features.hasMutableGlobals()) { info.shouldBeFalse( curr->mutable_, curr->name, "Imported global cannot be mutable"); } info.shouldBeFalse( curr->type.isTuple(), curr->name, "Imported global cannot be tuple"); }); } static void validateExports(Module& module, ValidationInfo& info) { for (auto& curr : module.exports) { if (curr->kind == ExternalKind::Function) { if (info.validateWeb) { Function* f = module.getFunction(curr->value); for (const auto& param : f->getParams()) { info.shouldBeUnequal( param, Type(Type::i64), f->name, "Exported function must not have i64 parameters"); } for (const auto& result : f->getResults()) { info.shouldBeUnequal(result, Type(Type::i64), f->name, "Exported function must not have i64 results"); } } } else if (curr->kind == ExternalKind::Global) { if (Global* g = module.getGlobalOrNull(curr->value)) { if (!module.features.hasMutableGlobals()) { info.shouldBeFalse( g->mutable_, g->name, "Exported global cannot be mutable"); } info.shouldBeFalse( g->type.isTuple(), g->name, "Exported global cannot be tuple"); } } } std::unordered_set exportNames; for (auto& exp : module.exports) { Name name = exp->value; if (exp->kind == ExternalKind::Function) { info.shouldBeTrue(module.getFunctionOrNull(name), name, "module function exports must be found"); } else if (exp->kind == ExternalKind::Global) { info.shouldBeTrue(module.getGlobalOrNull(name), name, "module global exports must be found"); } else if (exp->kind == ExternalKind::Table) { info.shouldBeTrue(module.getTableOrNull(name), name, "module table exports must be found"); } else if (exp->kind == ExternalKind::Memory) { info.shouldBeTrue(name == Name("0") || name == module.memory.name, name, "module memory exports must be found"); } else if (exp->kind == ExternalKind::Tag) { info.shouldBeTrue( module.getTagOrNull(name), name, "module tag exports must be found"); } else { WASM_UNREACHABLE("invalid ExternalKind"); } Name exportName = exp->name; info.shouldBeFalse(exportNames.count(exportName) > 0, exportName, "module exports must be unique"); exportNames.insert(exportName); } } static void validateGlobals(Module& module, ValidationInfo& info) { ModuleUtils::iterDefinedGlobals(module, [&](Global* curr) { info.shouldBeTrue(curr->type.getFeatures() <= module.features, curr->name, "all used types should be allowed"); info.shouldBeTrue( curr->init != nullptr, curr->name, "global init must be non-null"); assert(curr->init); info.shouldBeTrue( GlobalUtils::canInitializeGlobal(curr->init, module.features), curr->name, "global init must be valid"); if (!info.shouldBeSubType(curr->init->type, curr->type, curr->init, "global init must have correct type") && !info.quiet) { info.getStream(nullptr) << "(on global " << curr->name << ")\n"; } FunctionValidator(module, &info).validate(curr->init); }); } static void validateMemory(Module& module, ValidationInfo& info) { auto& curr = module.memory; info.shouldBeFalse( curr.initial > curr.max, "memory", "memory max >= initial"); if (curr.is64()) { info.shouldBeTrue(module.features.hasMemory64(), "memory", "memory is 64-bit, but memory64 is disabled"); } else { info.shouldBeTrue(curr.initial <= Memory::kMaxSize32, "memory", "initial memory must be <= 4GB"); info.shouldBeTrue(!curr.hasMax() || curr.max <= Memory::kMaxSize32, "memory", "max memory must be <= 4GB, or unlimited"); } info.shouldBeTrue(!curr.shared || curr.hasMax(), "memory", "shared memory must have max size"); if (curr.shared) { info.shouldBeTrue(module.features.hasAtomics(), "memory", "memory is shared, but atomics are disabled"); } for (auto& segment : curr.segments) { auto size = segment.data.size(); if (segment.isPassive) { info.shouldBeTrue(module.features.hasBulkMemory(), segment.offset, "nonzero segment flags (bulk memory is disabled)"); info.shouldBeEqual(segment.offset, (Expression*)nullptr, segment.offset, "passive segment should not have an offset"); } else { if (curr.is64()) { if (!info.shouldBeEqual(segment.offset->type, Type(Type::i64), segment.offset, "segment offset should be i64")) { continue; } } else { if (!info.shouldBeEqual(segment.offset->type, Type(Type::i32), segment.offset, "segment offset should be i32")) { continue; } } info.shouldBeTrue(checkSegmentOffset(segment.offset, segment.data.size(), curr.initial * Memory::kPageSize, module.features), segment.offset, "memory segment offset should be reasonable"); if (segment.offset->is()) { auto start = segment.offset->cast()->value.getUnsigned(); auto end = start + size; info.shouldBeTrue(end <= curr.initial * Memory::kPageSize, segment.data.size(), "segment size should fit in memory (end)"); } FunctionValidator(module, &info).validate(segment.offset); } // If the memory is imported we don't actually know its initial size. // Specifically wasm dll's import a zero sized memory which is perfectly // valid. if (!curr.imported()) { info.shouldBeTrue(size <= curr.initial * Memory::kPageSize, segment.data.size(), "segment size should fit in memory (initial)"); } } } static void validateTables(Module& module, ValidationInfo& info) { FunctionValidator validator(module, &info); if (!module.features.hasReferenceTypes()) { info.shouldBeTrue(module.tables.size() <= 1, "table", "Only 1 table definition allowed in MVP (requires " "--enable-reference-types)"); if (!module.tables.empty()) { auto& table = module.tables.front(); info.shouldBeTrue(table->type == Type::funcref, "table", "Only funcref is valid for table type (when reference " "types are disabled)"); for (auto& segment : module.elementSegments) { info.shouldBeTrue(segment->table == table->name, "elem", "all element segments should refer to a single table " "in MVP."); for (auto* expr : segment->data) { info.shouldBeTrue( expr->is(), expr, "all table elements must be non-null funcrefs in MVP."); validator.validate(expr); } } } } for (auto& table : module.tables) { info.shouldBeTrue(table->initial <= table->max, "table", "size minimum must not be greater than maximum"); info.shouldBeTrue( table->type.isNullable(), "table", "Non-nullable reference types are not yet supported for tables"); if (!module.features.hasGC()) { info.shouldBeTrue(table->type.isFunction() || table->type == Type::anyref, "table", "Only function reference types or anyref are valid " "for table type (when GC is disabled)"); } if (!module.features.hasTypedFunctionReferences()) { info.shouldBeTrue(table->type == Type::funcref || table->type == Type::anyref, "table", "Only funcref and anyref are valid for table type " "(when typed-function references are disabled)"); } } for (auto& segment : module.elementSegments) { // Since element segment items need to be constant expressions, that leaves // us with ref.null, ref.func and global.get. The GC proposal adds rtt.canon // and rtt.sub to the list, but Binaryen doesn't consider RTTs as reference- // types yet. As a result, the only possible type for element segments will // be function references. info.shouldBeTrue(segment->type.isFunction(), "elem", "element segment type must be of function type."); info.shouldBeTrue( segment->type.isNullable(), "elem", "Non-nullable reference types are not yet supported for tables"); if (segment->table.is()) { auto table = module.getTableOrNull(segment->table); info.shouldBeTrue(table != nullptr, "elem", "element segment must have a valid table name"); info.shouldBeTrue(!!segment->offset, "elem", "table segment offset should have an offset"); info.shouldBeEqual(segment->offset->type, Type(Type::i32), segment->offset, "element segment offset should be i32"); info.shouldBeTrue(checkSegmentOffset(segment->offset, segment->data.size(), table->initial * Table::kPageSize, module.features), segment->offset, "table segment offset should be reasonable"); if (module.features.hasTypedFunctionReferences()) { info.shouldBeTrue( Type::isSubType(segment->type, table->type), "elem", "element segment type must be a subtype of the table type"); } else { info.shouldBeEqual( segment->type, table->type, "elem", "element segment type must be the same as the table type"); } validator.validate(segment->offset); } else { info.shouldBeTrue(!segment->offset, "elem", "non-table segment offset should have no offset"); } // Avoid double checking items if (module.features.hasReferenceTypes()) { for (auto* expr : segment->data) { if (auto* globalExpr = expr->dynCast()) { auto* global = module.getGlobal(globalExpr->name); info.shouldBeFalse( global->mutable_, expr, "expected a constant expression"); } else { info.shouldBeTrue(expr->is() || expr->is() || expr->is(), expr, "element segment items must be one of global.get, " "ref.func, ref.null func"); } info.shouldBeSubType(expr->type, segment->type, expr, "element segment item expressions must return a " "subtype of the segment type"); validator.validate(expr); } } } } static void validateTags(Module& module, ValidationInfo& info) { if (!module.tags.empty()) { info.shouldBeTrue(module.features.hasExceptionHandling(), module.tags[0]->name, "Module has tags (exception-handling is disabled)"); } for (auto& curr : module.tags) { info.shouldBeEqual(curr->sig.results, Type(Type::none), curr->name, "Tag type's result type should be none"); if (curr->sig.params.isTuple()) { info.shouldBeTrue(module.features.hasMultivalue(), curr->name, "Multivalue tag type (multivalue is not enabled)"); } for (const auto& param : curr->sig.params) { info.shouldBeTrue(param.isConcrete(), curr->name, "Values in a tag should have concrete types"); } } } static void validateModule(Module& module, ValidationInfo& info) { // start if (module.start.is()) { auto func = module.getFunctionOrNull(module.start); if (info.shouldBeTrue( func != nullptr, module.start, "start must be found")) { info.shouldBeTrue(func->getParams() == Type::none, module.start, "start must have 0 params"); info.shouldBeTrue(func->getResults() == Type::none, module.start, "start must not return a value"); } } } static void validateFeatures(Module& module, ValidationInfo& info) { if (module.features.hasGC()) { info.shouldBeTrue(module.features.hasReferenceTypes(), module.features, "--enable-gc requires --enable-reference-types"); } } // TODO: If we want the validator to be part of libwasm rather than libpasses, // then Using PassRunner::getPassDebug causes a circular dependence. We should // fix that, perhaps by moving some of the pass infrastructure into libsupport. bool WasmValidator::validate(Module& module, Flags flags) { ValidationInfo info(module); info.validateWeb = (flags & Web) != 0; info.validateGlobally = (flags & Globally) != 0; info.quiet = (flags & Quiet) != 0; // parallel wasm logic validation PassRunner runner(&module); FunctionValidator(module, &info).validate(&runner); // validate globally if (info.validateGlobally) { validateImports(module, info); validateExports(module, info); validateGlobals(module, info); validateMemory(module, info); validateTables(module, info); validateTags(module, info); validateModule(module, info); validateFeatures(module, info); } // validate additional internal IR details when in pass-debug mode if (PassRunner::getPassDebug()) { validateBinaryenIR(module, info); } // print all the data if (!info.valid.load() && !info.quiet) { for (auto& func : module.functions) { std::cerr << info.getStream(func.get()).str(); } std::cerr << info.getStream(nullptr).str(); } return info.valid.load(); } } // namespace wasm binaryen-version_108/src/wasm/wasm.cpp000066400000000000000000001132361423707623100201640ustar00rootroot00000000000000/* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "wasm.h" #include "ir/branch-utils.h" #include "wasm-traversal.h" namespace wasm { // shared constants Name WASM("wasm"); Name RETURN_FLOW("*return:)*"); Name NONCONSTANT_FLOW("*nonconstant:)*"); namespace BinaryConsts { namespace UserSections { const char* Name = "name"; const char* SourceMapUrl = "sourceMappingURL"; const char* Dylink = "dylink"; const char* Dylink0 = "dylink.0"; const char* Linking = "linking"; const char* Producers = "producers"; const char* TargetFeatures = "target_features"; const char* AtomicsFeature = "atomics"; const char* BulkMemoryFeature = "bulk-memory"; const char* ExceptionHandlingFeature = "exception-handling"; const char* MutableGlobalsFeature = "mutable-globals"; const char* TruncSatFeature = "nontrapping-fptoint"; const char* SignExtFeature = "sign-ext"; const char* SIMD128Feature = "simd128"; const char* TailCallFeature = "tail-call"; const char* ReferenceTypesFeature = "reference-types"; const char* MultivalueFeature = "multivalue"; const char* GCFeature = "gc"; const char* Memory64Feature = "memory64"; const char* TypedFunctionReferencesFeature = "typed-function-references"; const char* RelaxedSIMDFeature = "relaxed-simd"; const char* ExtendedConstFeature = "extended-const"; } // namespace UserSections } // namespace BinaryConsts Name MEMORY_BASE("__memory_base"); Name TABLE_BASE("__table_base"); Name STACK_POINTER("__stack_pointer"); Name GET_TEMP_RET0("getTempRet0"); Name SET_TEMP_RET0("setTempRet0"); Name NEW_SIZE("newSize"); Name MODULE("module"); Name START("start"); Name GLOBAL("global"); Name FUNC("func"); Name PARAM("param"); Name RESULT("result"); Name MEMORY("memory"); Name DATA("data"); Name PASSIVE("passive"); Name EXPORT("export"); Name IMPORT("import"); Name TABLE("table"); Name ELEM("elem"); Name DECLARE("declare"); Name OFFSET("offset"); Name ITEM("item"); Name LOCAL("local"); Name TYPE("type"); Name REF("ref"); Name NULL_("null"); Name CALL("call"); Name CALL_INDIRECT("call_indirect"); Name BLOCK("block"); Name BR_IF("br_if"); Name THEN("then"); Name ELSE("else"); Name _NAN("NaN"); Name _INFINITY("Infinity"); Name NEG_INFINITY("-infinity"); Name NEG_NAN("-nan"); Name CASE("case"); Name BR("br"); Name FUNCREF("funcref"); Name FAKE_RETURN("__binaryen_fake_return"); Name DELEGATE_CALLER_TARGET("__binaryen_delegate_caller_target"); Name MUT("mut"); Name SPECTEST("spectest"); Name PRINT("print"); Name EXIT("exit"); Name SHARED("shared"); Name TAG("tag"); // Expressions void Expression::dump() { std::cout << *this << '\n'; } const char* getExpressionName(Expression* curr) { switch (curr->_id) { #define DELEGATE(CLASS_TO_VISIT) \ case Expression::Id::CLASS_TO_VISIT##Id: \ return #CLASS_TO_VISIT; #include "wasm-delegations.def" default: WASM_UNREACHABLE("invalid id"); } } Literal getLiteralFromConstExpression(Expression* curr) { // TODO: Do we need this function given that Properties::getLiteral // (currently) does the same? assert(Properties::isConstantExpression(curr)); return Properties::getLiteral(curr); } Literals getLiteralsFromConstExpression(Expression* curr) { // TODO: Do we need this function given that Properties::getLiterals // (currently) does the same? if (auto* t = curr->dynCast()) { Literals values; for (auto* operand : t->operands) { values.push_back(getLiteralFromConstExpression(operand)); } return values; } else { return {getLiteralFromConstExpression(curr)}; } } // a block is unreachable if one of its elements is unreachable, // and there are no branches to it static void handleUnreachable(Block* block, Block::Breakability breakability = Block::Unknown) { if (block->type == Type::unreachable) { return; // nothing to do } if (block->list.size() == 0) { return; // nothing to do } // if we are concrete, stop - even an unreachable child // won't change that (since we have a break with a value, // or the final child flows out a value) if (block->type.isConcrete()) { return; } // look for an unreachable child for (auto* child : block->list) { if (child->type == Type::unreachable) { // there is an unreachable child, so we are unreachable, unless we have a // break if (breakability == Block::Unknown) { breakability = BranchUtils::BranchSeeker::has(block, block->name) ? Block::HasBreak : Block::NoBreak; } if (breakability == Block::NoBreak) { block->type = Type::unreachable; } return; } } } void Block::finalize() { if (list.size() == 0) { type = Type::none; return; } // The default type is what is at the end. Next we need to see if breaks and/ // or unreachabitily change that. type = list.back()->type; if (!name.is()) { // Nothing branches here, so this is easy. handleUnreachable(this, NoBreak); return; } // The default type is according to the value that flows out. BranchUtils::BranchSeeker seeker(this->name); Expression* temp = this; seeker.walk(temp); if (seeker.found) { // Calculate the supertype of the branch types and the flowed-out type. If // there is no supertype among the available types, assume the current type // is already correct. TODO: calculate proper LUBs to compute a new correct // type in this situation. seeker.types.insert(type); type = Type::getLeastUpperBound(seeker.types); } else { // There are no branches, so this block may be unreachable. handleUnreachable(this, NoBreak); } } void Block::finalize(Type type_) { type = type_; if (type == Type::none && list.size() > 0) { handleUnreachable(this); } } void Block::finalize(Type type_, Breakability breakability) { type = type_; if (type == Type::none && list.size() > 0) { handleUnreachable(this, breakability); } } void If::finalize(Type type_) { type = type_; if (type == Type::none && (condition->type == Type::unreachable || (ifFalse && ifTrue->type == Type::unreachable && ifFalse->type == Type::unreachable))) { type = Type::unreachable; } } void If::finalize() { type = ifFalse ? Type::getLeastUpperBound(ifTrue->type, ifFalse->type) : Type::none; // if the arms return a value, leave it even if the condition // is unreachable, we still mark ourselves as having that type, e.g. // (if (result i32) // (unreachable) // (i32.const 10) // (i32.const 20) // ) // otherwise, if the condition is unreachable, so is the if if (type == Type::none && condition->type == Type::unreachable) { type = Type::unreachable; } } void Loop::finalize(Type type_) { type = type_; if (type == Type::none && body->type == Type::unreachable) { type = Type::unreachable; } } void Loop::finalize() { type = body->type; } void Break::finalize() { if (condition) { if (condition->type == Type::unreachable) { type = Type::unreachable; } else if (value) { type = value->type; } else { type = Type::none; } } else { type = Type::unreachable; } } void Switch::finalize() { type = Type::unreachable; } // Sets the type to unreachable if there is an unreachable operand. Returns true // if so. template bool handleUnreachableOperands(T* curr) { for (auto* child : curr->operands) { if (child->type == Type::unreachable) { curr->type = Type::unreachable; return true; } } return false; } void Call::finalize() { handleUnreachableOperands(this); if (isReturn) { type = Type::unreachable; } } void CallIndirect::finalize() { type = heapType.getSignature().results; handleUnreachableOperands(this); if (isReturn) { type = Type::unreachable; } if (target->type == Type::unreachable) { type = Type::unreachable; } } bool LocalSet::isTee() const { return type != Type::none; } // Changes to local.tee. The type of the local should be given. void LocalSet::makeTee(Type type_) { type = type_; finalize(); // type may need to be unreachable } // Changes to local.set. void LocalSet::makeSet() { type = Type::none; finalize(); // type may need to be unreachable } void LocalSet::finalize() { if (value->type == Type::unreachable) { type = Type::unreachable; } } void GlobalSet::finalize() { if (value->type == Type::unreachable) { type = Type::unreachable; } } void Load::finalize() { if (ptr->type == Type::unreachable) { type = Type::unreachable; } } void Store::finalize() { assert(valueType != Type::none); // must be set if (ptr->type == Type::unreachable || value->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::none; } } void AtomicRMW::finalize() { if (ptr->type == Type::unreachable || value->type == Type::unreachable) { type = Type::unreachable; } } void AtomicCmpxchg::finalize() { if (ptr->type == Type::unreachable || expected->type == Type::unreachable || replacement->type == Type::unreachable) { type = Type::unreachable; } } void AtomicWait::finalize() { type = Type::i32; if (ptr->type == Type::unreachable || expected->type == Type::unreachable || timeout->type == Type::unreachable) { type = Type::unreachable; } } void AtomicNotify::finalize() { type = Type::i32; if (ptr->type == Type::unreachable || notifyCount->type == Type::unreachable) { type = Type::unreachable; } } void AtomicFence::finalize() { type = Type::none; } void SIMDExtract::finalize() { assert(vec); switch (op) { case ExtractLaneSVecI8x16: case ExtractLaneUVecI8x16: case ExtractLaneSVecI16x8: case ExtractLaneUVecI16x8: case ExtractLaneVecI32x4: type = Type::i32; break; case ExtractLaneVecI64x2: type = Type::i64; break; case ExtractLaneVecF32x4: type = Type::f32; break; case ExtractLaneVecF64x2: type = Type::f64; break; default: WASM_UNREACHABLE("unexpected op"); } if (vec->type == Type::unreachable) { type = Type::unreachable; } } void SIMDReplace::finalize() { assert(vec && value); type = Type::v128; if (vec->type == Type::unreachable || value->type == Type::unreachable) { type = Type::unreachable; } } void SIMDShuffle::finalize() { assert(left && right); type = Type::v128; if (left->type == Type::unreachable || right->type == Type::unreachable) { type = Type::unreachable; } } void SIMDTernary::finalize() { assert(a && b && c); type = Type::v128; if (a->type == Type::unreachable || b->type == Type::unreachable || c->type == Type::unreachable) { type = Type::unreachable; } } void MemoryInit::finalize() { assert(dest && offset && size); type = Type::none; if (dest->type == Type::unreachable || offset->type == Type::unreachable || size->type == Type::unreachable) { type = Type::unreachable; } } void DataDrop::finalize() { type = Type::none; } void MemoryCopy::finalize() { assert(dest && source && size); type = Type::none; if (dest->type == Type::unreachable || source->type == Type::unreachable || size->type == Type::unreachable) { type = Type::unreachable; } } void MemoryFill::finalize() { assert(dest && value && size); type = Type::none; if (dest->type == Type::unreachable || value->type == Type::unreachable || size->type == Type::unreachable) { type = Type::unreachable; } } void SIMDShift::finalize() { assert(vec && shift); type = Type::v128; if (vec->type == Type::unreachable || shift->type == Type::unreachable) { type = Type::unreachable; } } void SIMDLoad::finalize() { assert(ptr); type = Type::v128; if (ptr->type == Type::unreachable) { type = Type::unreachable; } } Index SIMDLoad::getMemBytes() { switch (op) { case Load8SplatVec128: return 1; case Load16SplatVec128: return 2; case Load32SplatVec128: case Load32ZeroVec128: return 4; case Load64SplatVec128: case Load8x8SVec128: case Load8x8UVec128: case Load16x4SVec128: case Load16x4UVec128: case Load32x2SVec128: case Load32x2UVec128: case Load64ZeroVec128: return 8; } WASM_UNREACHABLE("unexpected op"); } void SIMDLoadStoreLane::finalize() { assert(ptr && vec); type = isLoad() ? Type::v128 : Type::none; if (ptr->type == Type::unreachable || vec->type == Type::unreachable) { type = Type::unreachable; } } Index SIMDLoadStoreLane::getMemBytes() { switch (op) { case Load8LaneVec128: case Store8LaneVec128: return 1; case Load16LaneVec128: case Store16LaneVec128: return 2; case Load32LaneVec128: case Store32LaneVec128: return 4; case Load64LaneVec128: case Store64LaneVec128: return 8; } WASM_UNREACHABLE("unexpected op"); } bool SIMDLoadStoreLane::isStore() { switch (op) { case Store8LaneVec128: case Store16LaneVec128: case Store32LaneVec128: case Store64LaneVec128: return true; case Load16LaneVec128: case Load32LaneVec128: case Load64LaneVec128: case Load8LaneVec128: return false; } WASM_UNREACHABLE("unexpected op"); } Const* Const::set(Literal value_) { value = value_; type = value.type; return this; } void Const::finalize() { type = value.type; } bool Unary::isRelational() { return op == EqZInt32 || op == EqZInt64; } void Unary::finalize() { if (value->type == Type::unreachable) { type = Type::unreachable; return; } switch (op) { case ClzInt32: case CtzInt32: case PopcntInt32: case NegFloat32: case AbsFloat32: case CeilFloat32: case FloorFloat32: case TruncFloat32: case NearestFloat32: case SqrtFloat32: case ClzInt64: case CtzInt64: case PopcntInt64: case NegFloat64: case AbsFloat64: case CeilFloat64: case FloorFloat64: case TruncFloat64: case NearestFloat64: case SqrtFloat64: type = value->type; break; case EqZInt32: case EqZInt64: type = Type::i32; break; case ExtendS8Int32: case ExtendS16Int32: type = Type::i32; break; case ExtendSInt32: case ExtendUInt32: case ExtendS8Int64: case ExtendS16Int64: case ExtendS32Int64: type = Type::i64; break; case WrapInt64: type = Type::i32; break; case PromoteFloat32: type = Type::f64; break; case DemoteFloat64: type = Type::f32; break; case TruncSFloat32ToInt32: case TruncUFloat32ToInt32: case TruncSFloat64ToInt32: case TruncUFloat64ToInt32: case TruncSatSFloat32ToInt32: case TruncSatUFloat32ToInt32: case TruncSatSFloat64ToInt32: case TruncSatUFloat64ToInt32: case ReinterpretFloat32: type = Type::i32; break; case TruncSFloat32ToInt64: case TruncUFloat32ToInt64: case TruncSFloat64ToInt64: case TruncUFloat64ToInt64: case TruncSatSFloat32ToInt64: case TruncSatUFloat32ToInt64: case TruncSatSFloat64ToInt64: case TruncSatUFloat64ToInt64: case ReinterpretFloat64: type = Type::i64; break; case ReinterpretInt32: case ConvertSInt32ToFloat32: case ConvertUInt32ToFloat32: case ConvertSInt64ToFloat32: case ConvertUInt64ToFloat32: type = Type::f32; break; case ReinterpretInt64: case ConvertSInt32ToFloat64: case ConvertUInt32ToFloat64: case ConvertSInt64ToFloat64: case ConvertUInt64ToFloat64: type = Type::f64; break; case SplatVecI8x16: case SplatVecI16x8: case SplatVecI32x4: case SplatVecI64x2: case SplatVecF32x4: case SplatVecF64x2: case NotVec128: case AbsVecI8x16: case AbsVecI16x8: case AbsVecI32x4: case AbsVecI64x2: case PopcntVecI8x16: case NegVecI8x16: case NegVecI16x8: case NegVecI32x4: case NegVecI64x2: case AbsVecF32x4: case NegVecF32x4: case SqrtVecF32x4: case CeilVecF32x4: case FloorVecF32x4: case TruncVecF32x4: case NearestVecF32x4: case AbsVecF64x2: case NegVecF64x2: case SqrtVecF64x2: case CeilVecF64x2: case FloorVecF64x2: case TruncVecF64x2: case NearestVecF64x2: case ExtAddPairwiseSVecI8x16ToI16x8: case ExtAddPairwiseUVecI8x16ToI16x8: case ExtAddPairwiseSVecI16x8ToI32x4: case ExtAddPairwiseUVecI16x8ToI32x4: case TruncSatSVecF32x4ToVecI32x4: case TruncSatUVecF32x4ToVecI32x4: case ConvertSVecI32x4ToVecF32x4: case ConvertUVecI32x4ToVecF32x4: case ExtendLowSVecI8x16ToVecI16x8: case ExtendHighSVecI8x16ToVecI16x8: case ExtendLowUVecI8x16ToVecI16x8: case ExtendHighUVecI8x16ToVecI16x8: case ExtendLowSVecI16x8ToVecI32x4: case ExtendHighSVecI16x8ToVecI32x4: case ExtendLowUVecI16x8ToVecI32x4: case ExtendHighUVecI16x8ToVecI32x4: case ExtendLowSVecI32x4ToVecI64x2: case ExtendHighSVecI32x4ToVecI64x2: case ExtendLowUVecI32x4ToVecI64x2: case ExtendHighUVecI32x4ToVecI64x2: case ConvertLowSVecI32x4ToVecF64x2: case ConvertLowUVecI32x4ToVecF64x2: case TruncSatZeroSVecF64x2ToVecI32x4: case TruncSatZeroUVecF64x2ToVecI32x4: case DemoteZeroVecF64x2ToVecF32x4: case PromoteLowVecF32x4ToVecF64x2: case RelaxedTruncSVecF32x4ToVecI32x4: case RelaxedTruncUVecF32x4ToVecI32x4: case RelaxedTruncZeroSVecF64x2ToVecI32x4: case RelaxedTruncZeroUVecF64x2ToVecI32x4: type = Type::v128; break; case AnyTrueVec128: case AllTrueVecI8x16: case AllTrueVecI16x8: case AllTrueVecI32x4: case AllTrueVecI64x2: case BitmaskVecI8x16: case BitmaskVecI16x8: case BitmaskVecI32x4: case BitmaskVecI64x2: type = Type::i32; break; case InvalidUnary: WASM_UNREACHABLE("invalid unary op"); } } bool Binary::isRelational() { switch (op) { case EqInt32: case NeInt32: case LtSInt32: case LtUInt32: case LeSInt32: case LeUInt32: case GtSInt32: case GtUInt32: case GeSInt32: case GeUInt32: case EqInt64: case NeInt64: case LtSInt64: case LtUInt64: case LeSInt64: case LeUInt64: case GtSInt64: case GtUInt64: case GeSInt64: case GeUInt64: case EqFloat32: case NeFloat32: case LtFloat32: case LeFloat32: case GtFloat32: case GeFloat32: case EqFloat64: case NeFloat64: case LtFloat64: case LeFloat64: case GtFloat64: case GeFloat64: return true; default: return false; } } void Binary::finalize() { assert(left && right); if (left->type == Type::unreachable || right->type == Type::unreachable) { type = Type::unreachable; } else if (isRelational()) { type = Type::i32; } else { type = left->type; } } void Select::finalize(Type type_) { type = type_; } void Select::finalize() { assert(ifTrue && ifFalse); if (ifTrue->type == Type::unreachable || ifFalse->type == Type::unreachable || condition->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::getLeastUpperBound(ifTrue->type, ifFalse->type); } } void Drop::finalize() { if (value->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::none; } } void MemorySize::make64() { type = ptrType = Type::i64; } void MemorySize::finalize() { type = ptrType; } void MemoryGrow::make64() { type = ptrType = Type::i64; } void MemoryGrow::finalize() { if (delta->type == Type::unreachable) { type = Type::unreachable; } else { type = ptrType; } } void RefNull::finalize(HeapType heapType) { type = Type(heapType, Nullable); } void RefNull::finalize(Type type_) { type = type_; } void RefNull::finalize() {} void RefIs::finalize() { if (value->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::i32; } } void RefFunc::finalize() { // No-op. We assume that the full proper typed function type has been applied // previously. } void RefFunc::finalize(Type type_) { type = type_; } void RefEq::finalize() { if (left->type == Type::unreachable || right->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::i32; } } void TableGet::finalize() { if (index->type == Type::unreachable) { type = Type::unreachable; } // Otherwise, the type should have been set already. } void TableSet::finalize() { if (index->type == Type::unreachable || value->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::none; } } void TableSize::finalize() { // Nothing to do - the type must have been set already during construction. } void TableGrow::finalize() { if (delta->type == Type::unreachable || value->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::i32; } } void Try::finalize() { // If none of the component bodies' type is a supertype of the others, assume // the current type is already correct. TODO: Calculate a proper LUB. std::unordered_set types{body->type}; types.reserve(catchBodies.size()); for (auto catchBody : catchBodies) { types.insert(catchBody->type); } type = Type::getLeastUpperBound(types); } void Try::finalize(Type type_) { type = type_; bool allUnreachable = body->type == Type::unreachable; for (auto catchBody : catchBodies) { allUnreachable &= catchBody->type == Type::unreachable; } if (type == Type::none && allUnreachable) { type = Type::unreachable; } } void Throw::finalize() { type = Type::unreachable; } void Rethrow::finalize() { type = Type::unreachable; } void TupleMake::finalize() { std::vector types; types.reserve(operands.size()); for (auto* op : operands) { if (op->type == Type::unreachable) { type = Type::unreachable; return; } types.push_back(op->type); } type = Type(types); } void TupleExtract::finalize() { if (tuple->type == Type::unreachable) { type = Type::unreachable; } else { assert(index < tuple->type.size()); type = tuple->type[index]; } } void I31New::finalize() { if (value->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::i31ref; } } void I31Get::finalize() { if (i31->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::i32; } } void CallRef::finalize() { handleUnreachableOperands(this); if (isReturn) { type = Type::unreachable; } if (target->type == Type::unreachable) { type = Type::unreachable; } } void CallRef::finalize(Type type_) { type = type_; finalize(); } void RefTest::finalize() { if (ref->type == Type::unreachable || (rtt && rtt->type == Type::unreachable)) { type = Type::unreachable; } else { type = Type::i32; } } HeapType RefTest::getIntendedType() { return rtt ? rtt->type.getHeapType() : intendedType; } void RefCast::finalize() { if (ref->type == Type::unreachable || (rtt && rtt->type == Type::unreachable)) { type = Type::unreachable; } else { // The output of ref.cast may be null if the input is null (in that case the // null is passed through). type = Type(getIntendedType(), ref->type.getNullability()); } } HeapType RefCast::getIntendedType() { return rtt ? rtt->type.getHeapType() : intendedType; } void BrOn::finalize() { if (ref->type == Type::unreachable || (rtt && rtt->type == Type::unreachable)) { type = Type::unreachable; return; } switch (op) { case BrOnNull: // If we do not branch, we flow out the existing value as non-null. type = Type(ref->type.getHeapType(), NonNullable); break; case BrOnNonNull: // If we do not branch, we flow out nothing (the spec could also have had // us flow out the null, but it does not). type = Type::none; break; case BrOnCast: case BrOnFunc: case BrOnData: case BrOnI31: // If we do not branch, we return the input in this case. type = ref->type; break; case BrOnCastFail: // If we do not branch, the cast worked, and we have something of the cast // type. type = Type(getIntendedType(), NonNullable); break; case BrOnNonFunc: type = Type(HeapType::func, NonNullable); break; case BrOnNonData: type = Type(HeapType::data, NonNullable); break; case BrOnNonI31: type = Type(HeapType::i31, NonNullable); break; default: WASM_UNREACHABLE("invalid br_on_*"); } } HeapType BrOn::getIntendedType() { assert(op == BrOnCast || op == BrOnCastFail); return rtt ? rtt->type.getHeapType() : intendedType; } Type BrOn::getSentType() { switch (op) { case BrOnNull: // BrOnNull does not send a value on the branch. return Type::none; case BrOnNonNull: // If the input is unreachable, the branch is not taken, and there is no // valid type we can report as being sent. Report it as unreachable. if (ref->type == Type::unreachable) { return Type::unreachable; } // BrOnNonNull sends the non-nullable type on the branch. return Type(ref->type.getHeapType(), NonNullable); case BrOnCast: if (ref->type == Type::unreachable) { return Type::unreachable; } return Type(getIntendedType(), NonNullable); case BrOnFunc: return Type::funcref; case BrOnData: return Type::dataref; case BrOnI31: return Type::i31ref; case BrOnCastFail: case BrOnNonFunc: case BrOnNonData: case BrOnNonI31: return ref->type; default: WASM_UNREACHABLE("invalid br_on_*"); } } void RttCanon::finalize() { // Nothing to do - the type must have been set already during construction. } void RttSub::finalize() { if (parent->type == Type::unreachable) { type = Type::unreachable; } // Else nothing to do - the type must have been set already during // construction. } void StructNew::finalize() { if (rtt && rtt->type == Type::unreachable) { type = Type::unreachable; return; } if (handleUnreachableOperands(this)) { return; } // A dynamic StructNew infers the type from the rtt. A static one has the type // already in the type field. if (rtt) { type = Type(rtt->type.getHeapType(), NonNullable); } } void StructGet::finalize() { if (ref->type == Type::unreachable) { type = Type::unreachable; } else { type = ref->type.getHeapType().getStruct().fields[index].type; } } void StructSet::finalize() { if (ref->type == Type::unreachable || value->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::none; } } void ArrayNew::finalize() { if ((rtt && rtt->type == Type::unreachable) || size->type == Type::unreachable || (init && init->type == Type::unreachable)) { type = Type::unreachable; return; } // A dynamic ArrayNew infers the type from the rtt. A static one has the type // already in the type field. if (rtt) { type = Type(rtt->type.getHeapType(), NonNullable); } } void ArrayInit::finalize() { if (rtt && rtt->type == Type::unreachable) { type = Type::unreachable; return; } for (auto* value : values) { if (value->type == Type::unreachable) { type = Type::unreachable; return; } } // A dynamic ArrayInit infers the type from the rtt. A static one has the type // already in the type field. if (rtt) { type = Type(rtt->type.getHeapType(), NonNullable); } } void ArrayGet::finalize() { if (ref->type == Type::unreachable || index->type == Type::unreachable) { type = Type::unreachable; } else { type = ref->type.getHeapType().getArray().element.type; } } void ArraySet::finalize() { if (ref->type == Type::unreachable || index->type == Type::unreachable || value->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::none; } } void ArrayLen::finalize() { if (ref->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::i32; } } void ArrayCopy::finalize() { if (srcRef->type == Type::unreachable || srcIndex->type == Type::unreachable || destRef->type == Type::unreachable || destIndex->type == Type::unreachable || length->type == Type::unreachable) { type = Type::unreachable; } else { type = Type::none; } } void RefAs::finalize() { if (value->type == Type::unreachable) { type = Type::unreachable; return; } switch (op) { case RefAsNonNull: type = Type(value->type.getHeapType(), NonNullable); break; case RefAsFunc: type = Type(HeapType::func, NonNullable); break; case RefAsData: type = Type::dataref; break; case RefAsI31: type = Type::i31ref; break; default: WASM_UNREACHABLE("invalid ref.as_*"); } } size_t Function::getNumParams() { return getParams().size(); } size_t Function::getNumVars() { return vars.size(); } size_t Function::getNumLocals() { return getParams().size() + vars.size(); } bool Function::isParam(Index index) { size_t size = getParams().size(); assert(index < size + vars.size()); return index < size; } bool Function::isVar(Index index) { auto base = getVarIndexBase(); assert(index < base + vars.size()); return index >= base; } bool Function::hasLocalName(Index index) const { return localNames.find(index) != localNames.end(); } Name Function::getLocalName(Index index) { return localNames.at(index); } void Function::setLocalName(Index index, Name name) { assert(index < getNumLocals()); localNames[index] = name; } Name Function::getLocalNameOrDefault(Index index) { auto nameIt = localNames.find(index); if (nameIt != localNames.end()) { return nameIt->second; } // this is an unnamed local return Name(); } Name Function::getLocalNameOrGeneric(Index index) { auto nameIt = localNames.find(index); if (nameIt != localNames.end()) { return nameIt->second; } return Name::fromInt(index); } Index Function::getLocalIndex(Name name) { auto iter = localIndices.find(name); if (iter == localIndices.end()) { Fatal() << "Function::getLocalIndex: " << name << " does not exist"; } return iter->second; } Index Function::getVarIndexBase() { return getParams().size(); } Type Function::getLocalType(Index index) { auto numParams = getParams().size(); if (index < numParams) { return getParams()[index]; } else if (isVar(index)) { return vars[index - numParams]; } else { WASM_UNREACHABLE("invalid local index"); } } void Function::clearNames() { localNames.clear(); } void Function::clearDebugInfo() { localIndices.clear(); debugLocations.clear(); prologLocation.clear(); epilogLocation.clear(); } template typename Map::mapped_type& getModuleElement(Map& m, Name name, const std::string& funcName) { auto iter = m.find(name); if (iter == m.end()) { Fatal() << "Module::" << funcName << ": " << name << " does not exist"; } return iter->second; } Export* Module::getExport(Name name) { return getModuleElement(exportsMap, name, "getExport"); } Function* Module::getFunction(Name name) { return getModuleElement(functionsMap, name, "getFunction"); } Table* Module::getTable(Name name) { return getModuleElement(tablesMap, name, "getTable"); } ElementSegment* Module::getElementSegment(Name name) { return getModuleElement(elementSegmentsMap, name, "getElementSegment"); } Global* Module::getGlobal(Name name) { return getModuleElement(globalsMap, name, "getGlobal"); } Tag* Module::getTag(Name name) { return getModuleElement(tagsMap, name, "getTag"); } template typename Map::mapped_type getModuleElementOrNull(Map& m, Name name) { auto iter = m.find(name); if (iter == m.end()) { return nullptr; } return iter->second; } Export* Module::getExportOrNull(Name name) { return getModuleElementOrNull(exportsMap, name); } Function* Module::getFunctionOrNull(Name name) { return getModuleElementOrNull(functionsMap, name); } Table* Module::getTableOrNull(Name name) { return getModuleElementOrNull(tablesMap, name); } ElementSegment* Module::getElementSegmentOrNull(Name name) { return getModuleElementOrNull(elementSegmentsMap, name); } Global* Module::getGlobalOrNull(Name name) { return getModuleElementOrNull(globalsMap, name); } Tag* Module::getTagOrNull(Name name) { return getModuleElementOrNull(tagsMap, name); } // TODO(@warchant): refactor all usages to use variant with unique_ptr template Elem* addModuleElement(Vector& v, Map& m, Elem* curr, std::string funcName) { if (!curr->name.is()) { Fatal() << "Module::" << funcName << ": empty name"; } if (getModuleElementOrNull(m, curr->name)) { Fatal() << "Module::" << funcName << ": " << curr->name << " already exists"; } v.push_back(std::unique_ptr(curr)); m[curr->name] = curr; return curr; } template Elem* addModuleElement(Vector& v, Map& m, std::unique_ptr curr, std::string funcName) { if (!curr->name.is()) { Fatal() << "Module::" << funcName << ": empty name"; } if (getModuleElementOrNull(m, curr->name)) { Fatal() << "Module::" << funcName << ": " << curr->name << " already exists"; } auto* ret = m[curr->name] = curr.get(); v.push_back(std::move(curr)); return ret; } Export* Module::addExport(Export* curr) { return addModuleElement(exports, exportsMap, curr, "addExport"); } Function* Module::addFunction(Function* curr) { return addModuleElement(functions, functionsMap, curr, "addFunction"); } Global* Module::addGlobal(Global* curr) { return addModuleElement(globals, globalsMap, curr, "addGlobal"); } Tag* Module::addTag(Tag* curr) { return addModuleElement(tags, tagsMap, curr, "addTag"); } Export* Module::addExport(std::unique_ptr&& curr) { return addModuleElement(exports, exportsMap, std::move(curr), "addExport"); } Function* Module::addFunction(std::unique_ptr&& curr) { return addModuleElement( functions, functionsMap, std::move(curr), "addFunction"); } Table* Module::addTable(std::unique_ptr
&& curr) { return addModuleElement(tables, tablesMap, std::move(curr), "addTable"); } ElementSegment* Module::addElementSegment(std::unique_ptr&& curr) { return addModuleElement( elementSegments, elementSegmentsMap, std::move(curr), "addElementSegment"); } Global* Module::addGlobal(std::unique_ptr&& curr) { return addModuleElement(globals, globalsMap, std::move(curr), "addGlobal"); } Tag* Module::addTag(std::unique_ptr&& curr) { return addModuleElement(tags, tagsMap, std::move(curr), "addTag"); } void Module::addStart(const Name& s) { start = s; } template void removeModuleElement(Vector& v, Map& m, Name name) { m.erase(name); for (size_t i = 0; i < v.size(); i++) { if (v[i]->name == name) { v.erase(v.begin() + i); break; } } } void Module::removeExport(Name name) { removeModuleElement(exports, exportsMap, name); } void Module::removeFunction(Name name) { removeModuleElement(functions, functionsMap, name); } void Module::removeTable(Name name) { removeModuleElement(tables, tablesMap, name); } void Module::removeElementSegment(Name name) { removeModuleElement(elementSegments, elementSegmentsMap, name); } void Module::removeGlobal(Name name) { removeModuleElement(globals, globalsMap, name); } void Module::removeTag(Name name) { removeModuleElement(tags, tagsMap, name); } template void removeModuleElements(Vector& v, Map& m, std::function pred) { for (auto it = m.begin(); it != m.end();) { if (pred(it->second)) { it = m.erase(it); } else { it++; } } v.erase( std::remove_if(v.begin(), v.end(), [&](auto& e) { return pred(e.get()); }), v.end()); } void Module::removeExports(std::function pred) { removeModuleElements(exports, exportsMap, pred); } void Module::removeFunctions(std::function pred) { removeModuleElements(functions, functionsMap, pred); } void Module::removeTables(std::function pred) { removeModuleElements(tables, tablesMap, pred); } void Module::removeElementSegments(std::function pred) { removeModuleElements(elementSegments, elementSegmentsMap, pred); } void Module::removeGlobals(std::function pred) { removeModuleElements(globals, globalsMap, pred); } void Module::removeTags(std::function pred) { removeModuleElements(tags, tagsMap, pred); } void Module::updateMaps() { functionsMap.clear(); for (auto& curr : functions) { functionsMap[curr->name] = curr.get(); } exportsMap.clear(); for (auto& curr : exports) { exportsMap[curr->name] = curr.get(); } tablesMap.clear(); for (auto& curr : tables) { tablesMap[curr->name] = curr.get(); } elementSegmentsMap.clear(); for (auto& curr : elementSegments) { elementSegmentsMap[curr->name] = curr.get(); } globalsMap.clear(); for (auto& curr : globals) { globalsMap[curr->name] = curr.get(); } tagsMap.clear(); for (auto& curr : tags) { tagsMap[curr->name] = curr.get(); } } void Module::clearDebugInfo() { debugInfoFileNames.clear(); } } // namespace wasm binaryen-version_108/src/wasm2js.h000066400000000000000000003205061423707623100173010ustar00rootroot00000000000000/* * Copyright 2015 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // WebAssembly-to-JS code translator. Converts wasm functions into // valid JavaScript (with a somewhat asm.js-ish flavor). // #ifndef wasm_wasm2js_h #define wasm_wasm2js_h #include #include #include "abi/js.h" #include "asm_v_wasm.h" #include "asmjs/asmangle.h" #include "asmjs/shared-constants.h" #include "emscripten-optimizer/optimizer.h" #include "ir/branch-utils.h" #include "ir/effects.h" #include "ir/element-utils.h" #include "ir/find_all.h" #include "ir/import-utils.h" #include "ir/load-utils.h" #include "ir/module-utils.h" #include "ir/names.h" #include "ir/table-utils.h" #include "ir/utils.h" #include "mixed_arena.h" #include "passes/passes.h" #include "support/base64.h" #include "support/file.h" #include "wasm-builder.h" #include "wasm-io.h" #include "wasm-validator.h" #include "wasm.h" namespace wasm { using namespace cashew; // Appends extra to block, flattening out if extra is a block as well void flattenAppend(Ref ast, Ref extra) { int index; if (ast[0] == BLOCK || ast[0] == TOPLEVEL) { index = 1; } else if (ast[0] == DEFUN) { index = 3; } else { abort(); } if (extra->isArray() && extra[0] == BLOCK) { for (size_t i = 0; i < extra[1]->size(); i++) { ast[index]->push_back(extra[1][i]); } } else { ast[index]->push_back(extra); } } // Appends extra to a chain of sequence elements void sequenceAppend(Ref& ast, Ref extra) { if (!ast.get()) { ast = extra; return; } ast = ValueBuilder::makeSeq(ast, extra); } bool isTableExported(Module& wasm) { if (wasm.tables.empty() || wasm.tables[0]->imported()) { return false; } for (auto& ex : wasm.exports) { if (ex->kind == ExternalKind::Table && ex->value == wasm.tables[0]->name) { return true; } } return false; } bool hasActiveSegments(Module& wasm) { for (Index i = 0; i < wasm.memory.segments.size(); i++) { if (!wasm.memory.segments[i].isPassive) { return true; } } return false; } bool needsBufferView(Module& wasm) { if (!wasm.memory.exists) { return false; } // If there are any active segments, initActiveSegments needs access // to bufferView. if (hasActiveSegments(wasm)) { return true; } // The special support functions are emitted as part of the JS glue, if we // need them. bool need = false; ModuleUtils::iterImportedFunctions(wasm, [&](Function* import) { if (ABI::wasm2js::isHelper(import->base)) { need = true; } }); return need; } IString stringToIString(std::string str) { return IString(str.c_str(), false); } // Used when taking a wasm name and generating a JS identifier. Each scope here // is used to ensure that all names have a unique name but the same wasm name // within a scope always resolves to the same symbol. // // Export: Export names // Top: The main scope which contains functions and globals // Local: Local variables in a function. // Label: Label identifiers in a function enum class NameScope { Export, Top, Local, Label, Max, }; // // Wasm2JSBuilder - converts a WebAssembly module's functions into JS // // Wasm-to-JS is tricky because wasm doesn't distinguish // statements and expressions, or in other words, things like `break` and `if` // can show up in places where JS can't handle them, like inside an a loop's // condition check. For that reason we use flat IR here. // We do optimize it later, to allow some nesting, but we avoid // non-JS-compatible nesting like block return values control flow in an if // condition, etc. // class Wasm2JSBuilder { public: struct Flags { // see wasm2js.cpp for details bool debug = false; bool pedantic = false; bool allowAsserts = false; bool emscripten = false; bool deterministic = false; std::string symbolsFile; }; Wasm2JSBuilder(Flags f, PassOptions options_) : flags(f), options(options_) { // We don't try to model wasm's trapping precisely - if we did, each load // and store would need to do a check. Given that, we can just ignore // implicit traps like those when optimizing. (When not optimizing, it's // nice to see codegen that matches wasm more precisely.) if (options.optimizeLevel > 0) { options.ignoreImplicitTraps = true; } } Ref processWasm(Module* wasm, Name funcName = ASM_FUNC); Ref processFunction(Module* wasm, Function* func, bool standalone = false); Ref processStandaloneFunction(Module* wasm, Function* func) { return processFunction(wasm, func, true); } // The second pass on an expression: process it fully, generating // JS Ref processFunctionBody(Module* m, Function* func, bool standalone); // Get a temp var. IString getTemp(Type type, Function* func) { IString ret; TODO_SINGLE_COMPOUND(type); if (frees[type.getBasic()].size() > 0) { ret = frees[type.getBasic()].back(); frees[type.getBasic()].pop_back(); } else { size_t index = temps[type.getBasic()]++; ret = IString((std::string("wasm2js_") + type.toString() + "$" + std::to_string(index)) .c_str(), false); } if (func->localIndices.find(ret) == func->localIndices.end()) { Builder::addVar(func, ret, type); } return ret; } // Free a temp var. void freeTemp(Type type, IString temp) { TODO_SINGLE_COMPOUND(type); frees[type.getBasic()].push_back(temp); } // Generates a mangled name from `name` within the specified scope. // // The goal of this function is to ensure that all identifiers in JS ar // unique. Otherwise there can be clashes with locals and functions and cause // unwanted name shadowing. // // The returned string from this function is constant for a particular `name` // within a `scope`. Or in other words, the same `name` and `scope` pair will // always return the same result. If `scope` changes, however, the return // value may differ even if the same `name` is passed in. IString fromName(Name name, NameScope scope) { // TODO: checking names do not collide after mangling // First up check our cached of mangled names to avoid doing extra work // below auto& map = wasmNameToMangledName[(int)scope]; auto it = map.find(name.c_str()); if (it != map.end()) { return it->second; } // The mangled names in our scope. auto& scopeMangledNames = mangledNames[(int)scope]; // In some cases (see below) we need to also check the Top scope. auto& topMangledNames = mangledNames[int(NameScope::Top)]; // This is the first time we've seen the `name` and `scope` pair. Generate a // globally unique name based on `name` and then register that in our cache // and return it. // // Identifiers here generated are of the form `${name}_${n}` where `_${n}` // is omitted if `n==0` and otherwise `n` is just looped over to find the // next unused identifier. IString ret; for (int i = 0;; i++) { std::ostringstream out; out << name.c_str(); if (i > 0) { out << "_" << i; } auto mangled = asmangle(out.str()); ret = stringToIString(mangled); if (scopeMangledNames.count(ret)) { // When export names collide things may be confusing, as this is // observable externally by the person using the JS. Report a warning. if (scope == NameScope::Export) { std::cerr << "wasm2js: warning: export names colliding: " << mangled << '\n'; } continue; } // The Local scope is special: a Local name must not collide with a Top // name, as they are in a single namespace in JS and can conflict: // // function foo(bar) { // var bar = 0; // } // function bar() { .. if (scope == NameScope::Local && topMangledNames.count(ret)) { continue; } // We found a good name, use it. scopeMangledNames.insert(ret); map[name.c_str()] = ret; return ret; } } private: Flags flags; PassOptions options; // How many temp vars we need std::vector temps; // type => num temps // Which are currently free to use std::vector> frees; // type => list of free names // Mangled names cache by interned names. // Utilizes the usually reused underlying cstring's pointer as the key. std::unordered_map wasmNameToMangledName[(int)NameScope::Max]; // Set of all mangled names in each scope. std::unordered_set mangledNames[(int)NameScope::Max]; // If a function is callable from outside, we'll need to cast the inputs // and our return value. Otherwise, internally, casts are only needed // on operations. std::unordered_set functionsCallableFromOutside; void addBasics(Ref ast, Module* wasm); void addFunctionImport(Ref ast, Function* import); void addGlobalImport(Ref ast, Global* import); void addTable(Ref ast, Module* wasm); void addStart(Ref ast, Module* wasm); void addExports(Ref ast, Module* wasm); void addGlobal(Ref ast, Global* global); void addMemoryFuncs(Ref ast, Module* wasm); void addMemoryGrowFunc(Ref ast, Module* wasm); Wasm2JSBuilder() = delete; Wasm2JSBuilder(const Wasm2JSBuilder&) = delete; Wasm2JSBuilder& operator=(const Wasm2JSBuilder&) = delete; }; Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) { // Scan the wasm for important things. for (auto& exp : wasm->exports) { if (exp->kind == ExternalKind::Function) { functionsCallableFromOutside.insert(exp->value); } } ElementUtils::iterAllElementFunctionNames( wasm, [&](Name name) { functionsCallableFromOutside.insert(name); }); // Ensure the scratch memory helpers. // If later on they aren't needed, we'll clean them up. ABI::wasm2js::ensureHelpers(wasm); // Process the code, and optimize if relevant. // First, do the lowering to a JS-friendly subset. { PassRunner runner(wasm, options); runner.add(make_unique()); // TODO: only legalize if necessary - emscripten would already do so, and // likely other toolchains. but spec test suite needs that. runner.add("legalize-js-interface"); // Before lowering non-JS operations we can optimize some instructions which // may simplify next passes if (options.optimizeLevel > 0) { runner.add("optimize-for-js"); } // First up remove as many non-JS operations we can, including things like // 64-bit integer multiplication/division, `f32.nearest` instructions, etc. // This may inject intrinsics which use i64 so it needs to be run before the // i64-to-i32 lowering pass. runner.add("remove-non-js-ops"); // Currently the i64-to-32 lowering pass requires that `flatten` be run // before it to produce correct code. For some more details about this see // #1480 runner.add("flatten"); runner.add("i64-to-i32-lowering"); runner.add("alignment-lowering"); // Next, optimize that as best we can. This should not generate // non-JS-friendly things. if (options.optimizeLevel > 0) { // It is especially import to propagate constants after the lowering. // However, this can be a slow operation, especially after flattening; // some local simplification helps. if (options.optimizeLevel >= 3 || options.shrinkLevel >= 1) { runner.add("simplify-locals-nonesting"); runner.add("precompute-propagate"); // Avoiding reinterpretation is helped by propagation. We also run // it later down as default optimizations help as well. runner.add("avoid-reinterprets"); } runner.addDefaultOptimizationPasses(); runner.add("avoid-reinterprets"); } // Finally, get the code into the flat form we need for wasm2js itself, and // optimize that a little in a way that keeps that property. runner.add("flatten"); // Regardless of optimization level, run some simple optimizations to undo // some of the effects of flattening. runner.add("simplify-locals-notee-nostructure"); // Some operations can be very slow if we didn't run full optimizations // earlier, so don't run them automatically. if (options.optimizeLevel > 0) { runner.add("remove-unused-names"); runner.add("merge-blocks"); runner.add("reorder-locals"); runner.add("coalesce-locals"); } runner.add("reorder-locals"); runner.add("vacuum"); runner.add("remove-unused-module-elements"); // DCE at the end to make sure all IR nodes have valid types for conversion // to JS, and not unreachable. runner.add("dce"); runner.setDebug(flags.debug); runner.run(); } if (flags.symbolsFile.size() > 0) { Output out(flags.symbolsFile, wasm::Flags::Text); Index i = 0; for (auto& func : wasm->functions) { out.getStream() << i++ << ':' << func->name.str << '\n'; } } #ifndef NDEBUG if (!WasmValidator().validate(*wasm)) { std::cout << *wasm << '\n'; Fatal() << "error in validating wasm2js output"; } #endif Ref ret = ValueBuilder::makeToplevel(); Ref asmFunc = ValueBuilder::makeFunction(funcName); ret[1]->push_back(asmFunc); ValueBuilder::appendArgumentToFunction(asmFunc, ENV); // add memory import if (wasm->memory.exists) { if (wasm->memory.imported()) { // find memory and buffer in imports Ref theVar = ValueBuilder::makeVar(); asmFunc[3]->push_back(theVar); ValueBuilder::appendToVar( theVar, "memory", ValueBuilder::makeDot(ValueBuilder::makeName(ENV), ValueBuilder::makeName(wasm->memory.base))); // Assign `buffer = memory.buffer` Ref buf = ValueBuilder::makeVar(); asmFunc[3]->push_back(buf); ValueBuilder::appendToVar( buf, BUFFER, ValueBuilder::makeDot(ValueBuilder::makeName("memory"), ValueBuilder::makeName("buffer"))); // If memory is growable, override the imported memory's grow method to // ensure so that when grow is called from the output it works as expected if (wasm->memory.max > wasm->memory.initial) { asmFunc[3]->push_back( ValueBuilder::makeStatement(ValueBuilder::makeBinary( ValueBuilder::makeDot(ValueBuilder::makeName("memory"), ValueBuilder::makeName("grow")), SET, ValueBuilder::makeName(WASM_MEMORY_GROW)))); } } else { Ref theVar = ValueBuilder::makeVar(); asmFunc[3]->push_back(theVar); ValueBuilder::appendToVar( theVar, BUFFER, ValueBuilder::makeNew(ValueBuilder::makeCall( ValueBuilder::makeName("ArrayBuffer"), ValueBuilder::makeInt(Address::address32_t(wasm->memory.initial.addr * Memory::kPageSize))))); } } // add imported tables ModuleUtils::iterImportedTables(*wasm, [&](Table* table) { Ref theVar = ValueBuilder::makeVar(); asmFunc[3]->push_back(theVar); ValueBuilder::appendToVar( theVar, FUNCTION_TABLE, ValueBuilder::makeDot(ValueBuilder::makeName(ENV), table->base)); }); // create heaps, etc addBasics(asmFunc[3], wasm); ModuleUtils::iterImportedFunctions( *wasm, [&](Function* import) { addFunctionImport(asmFunc[3], import); }); ModuleUtils::iterImportedGlobals( *wasm, [&](Global* import) { addGlobalImport(asmFunc[3], import); }); // Note the names of functions. We need to do this here as when generating // mangled local names we need them not to conflict with these (see fromName) // so we can't wait until we parse each function to note its name. for (auto& f : wasm->functions) { fromName(f->name, NameScope::Top); } // globals bool generateFetchHighBits = false; ModuleUtils::iterDefinedGlobals(*wasm, [&](Global* global) { addGlobal(asmFunc[3], global); if (flags.allowAsserts && global->name == INT64_TO_32_HIGH_BITS) { generateFetchHighBits = true; } }); if (flags.emscripten) { asmFunc[3]->push_back( ValueBuilder::makeName("// EMSCRIPTEN_START_FUNCS\n")); } // functions ModuleUtils::iterDefinedFunctions(*wasm, [&](Function* func) { asmFunc[3]->push_back(processFunction(wasm, func)); }); if (generateFetchHighBits) { Builder builder(*wasm); asmFunc[3]->push_back( processFunction(wasm, wasm->addFunction(builder.makeFunction( WASM_FETCH_HIGH_BITS, Signature(Type::none, Type::i32), {}, builder.makeReturn(builder.makeGlobalGet( INT64_TO_32_HIGH_BITS, Type::i32)))))); auto e = new Export(); e->name = WASM_FETCH_HIGH_BITS; e->value = WASM_FETCH_HIGH_BITS; e->kind = ExternalKind::Function; wasm->addExport(e); } if (flags.emscripten) { asmFunc[3]->push_back(ValueBuilder::makeName("// EMSCRIPTEN_END_FUNCS\n")); } if (needsBufferView(*wasm)) { asmFunc[3]->push_back( ValueBuilder::makeBinary(ValueBuilder::makeName("bufferView"), SET, ValueBuilder::makeName(HEAPU8))); } if (hasActiveSegments(*wasm)) { asmFunc[3]->push_back( ValueBuilder::makeCall(ValueBuilder::makeName("initActiveSegments"), ValueBuilder::makeName(ENV))); } addTable(asmFunc[3], wasm); addStart(asmFunc[3], wasm); addExports(asmFunc[3], wasm); return ret; } void Wasm2JSBuilder::addBasics(Ref ast, Module* wasm) { if (wasm->memory.exists) { // heaps, var HEAP8 = new global.Int8Array(buffer); etc auto addHeap = [&](IString name, IString view) { Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); ValueBuilder::appendToVar(theVar, name, ValueBuilder::makeNew(ValueBuilder::makeCall( view, ValueBuilder::makeName(BUFFER)))); }; addHeap(HEAP8, INT8ARRAY); addHeap(HEAP16, INT16ARRAY); addHeap(HEAP32, INT32ARRAY); addHeap(HEAPU8, UINT8ARRAY); addHeap(HEAPU16, UINT16ARRAY); addHeap(HEAPU32, UINT32ARRAY); addHeap(HEAPF32, FLOAT32ARRAY); addHeap(HEAPF64, FLOAT64ARRAY); } // core asm.js imports auto addMath = [&](IString name, IString base) { Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); ValueBuilder::appendToVar( theVar, name, ValueBuilder::makeDot(ValueBuilder::makeName(MATH), base)); }; addMath(MATH_IMUL, IMUL); addMath(MATH_FROUND, FROUND); addMath(MATH_ABS, ABS); addMath(MATH_CLZ32, CLZ32); addMath(MATH_MIN, MIN); addMath(MATH_MAX, MAX); addMath(MATH_FLOOR, FLOOR); addMath(MATH_CEIL, CEIL); addMath(MATH_TRUNC, TRUNC); addMath(MATH_SQRT, SQRT); // abort function Ref abortVar = ValueBuilder::makeVar(); ast->push_back(abortVar); ValueBuilder::appendToVar( abortVar, "abort", ValueBuilder::makeDot(ValueBuilder::makeName(ENV), ABORT_FUNC)); // TODO: this shouldn't be needed once we stop generating literal asm.js code // NaN and Infinity variables Ref nanVar = ValueBuilder::makeVar(); ast->push_back(nanVar); ValueBuilder::appendToVar(nanVar, "nan", ValueBuilder::makeName("NaN")); Ref infinityVar = ValueBuilder::makeVar(); ast->push_back(infinityVar); ValueBuilder::appendToVar( infinityVar, "infinity", ValueBuilder::makeName("Infinity")); } void Wasm2JSBuilder::addFunctionImport(Ref ast, Function* import) { // The scratch memory helpers are emitted in the glue, see code and comments // below. if (ABI::wasm2js::isHelper(import->base)) { return; } Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); // TODO: handle nested module imports Ref module = ValueBuilder::makeName(ENV); ValueBuilder::appendToVar( theVar, fromName(import->name, NameScope::Top), ValueBuilder::makeDot(module, fromName(import->base, NameScope::Top))); } void Wasm2JSBuilder::addGlobalImport(Ref ast, Global* import) { Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); // TODO: handle nested module imports Ref module = ValueBuilder::makeName(ENV); Ref value = ValueBuilder::makeDot(module, fromName(import->base, NameScope::Top)); if (import->type == Type::i32) { value = makeJsCoercion(value, JS_INT); } ValueBuilder::appendToVar( theVar, fromName(import->name, NameScope::Top), value); } void Wasm2JSBuilder::addTable(Ref ast, Module* wasm) { if (wasm->tables.size() == 0) { return; } bool perElementInit = false; // Emit a simple flat table as a JS array literal. Otherwise, // emit assignments separately for each index. Ref theArray = ValueBuilder::makeArray(); for (auto& table : wasm->tables) { if (!table->type.isFunction()) { Fatal() << "wasm2js doesn't support non-function tables\n"; } if (!table->imported()) { TableUtils::FlatTable flat(*wasm, *table); if (flat.valid) { Name null("null"); for (auto& name : flat.names) { if (name.is()) { name = fromName(name, NameScope::Top); } else { name = null; } ValueBuilder::appendToArray(theArray, ValueBuilder::makeName(name)); } } else { perElementInit = true; Ref initial = ValueBuilder::makeInt(Address::address32_t(table->initial.addr)); theArray = ValueBuilder::makeNew( ValueBuilder::makeCall(IString("Array"), initial)); } } else { perElementInit = true; } if (isTableExported(*wasm)) { // If the table is exported use a fake WebAssembly.Table object // We don't handle the case where a table is both imported and exported. if (table->imported()) { Fatal() << "wasm2js doesn't support a table that is both imported and " "exported\n"; } Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); Ref table = ValueBuilder::makeCall(IString("Table"), theArray); ValueBuilder::appendToVar(theVar, FUNCTION_TABLE, table); } else if (!table->imported()) { // Otherwise if the table is internal (neither imported not exported). // Just use a plain array in this case, avoiding the Table. Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); ValueBuilder::appendToVar(theVar, FUNCTION_TABLE, theArray); } if (perElementInit) { // TODO: optimize for size ModuleUtils::iterTableSegments( *wasm, table->name, [&](ElementSegment* segment) { auto offset = segment->offset; ElementUtils::iterElementSegmentFunctionNames( segment, [&](Name entry, Index i) { Ref index; if (auto* c = offset->dynCast()) { index = ValueBuilder::makeInt(c->value.geti32() + i); } else if (auto* get = offset->dynCast()) { index = ValueBuilder::makeBinary( ValueBuilder::makeName( stringToIString(asmangle(get->name.str))), PLUS, ValueBuilder::makeNum(i)); } else { WASM_UNREACHABLE("unexpected expr type"); } ast->push_back( ValueBuilder::makeStatement(ValueBuilder::makeBinary( ValueBuilder::makeSub(ValueBuilder::makeName(FUNCTION_TABLE), index), SET, ValueBuilder::makeName(fromName(entry, NameScope::Top))))); }); }); } } } void Wasm2JSBuilder::addStart(Ref ast, Module* wasm) { if (wasm->start.is()) { ast->push_back( ValueBuilder::makeCall(fromName(wasm->start, NameScope::Top))); } } void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) { Ref exports = ValueBuilder::makeObject(); for (auto& export_ : wasm->exports) { switch (export_->kind) { case ExternalKind::Function: { ValueBuilder::appendToObjectWithQuotes( exports, fromName(export_->name, NameScope::Export), ValueBuilder::makeName(fromName(export_->value, NameScope::Top))); break; } case ExternalKind::Memory: { Ref descs = ValueBuilder::makeObject(); Ref growDesc = ValueBuilder::makeObject(); ValueBuilder::appendToObjectWithQuotes( descs, IString("grow"), growDesc); if (wasm->memory.max > wasm->memory.initial) { ValueBuilder::appendToObjectWithQuotes( growDesc, IString("value"), ValueBuilder::makeName(WASM_MEMORY_GROW)); } Ref bufferDesc = ValueBuilder::makeObject(); Ref bufferGetter = ValueBuilder::makeFunction(IString("")); bufferGetter[3]->push_back( ValueBuilder::makeReturn(ValueBuilder::makeName(BUFFER))); ValueBuilder::appendToObjectWithQuotes( bufferDesc, IString("get"), bufferGetter); ValueBuilder::appendToObjectWithQuotes( descs, IString("buffer"), bufferDesc); Ref memory = ValueBuilder::makeCall( ValueBuilder::makeDot(ValueBuilder::makeName(IString("Object")), IString("create")), ValueBuilder::makeDot(ValueBuilder::makeName(IString("Object")), IString("prototype"))); ValueBuilder::appendToCall(memory, descs); ValueBuilder::appendToObjectWithQuotes( exports, fromName(export_->name, NameScope::Export), memory); break; } case ExternalKind::Table: { ValueBuilder::appendToObjectWithQuotes( exports, fromName(export_->name, NameScope::Export), ValueBuilder::makeName(FUNCTION_TABLE)); break; } case ExternalKind::Global: { Ref object = ValueBuilder::makeObject(); IString identName = fromName(export_->value, NameScope::Top); // getter { Ref block = ValueBuilder::makeBlock(); block[1]->push_back( ValueBuilder::makeReturn(ValueBuilder::makeName(identName))); ValueBuilder::appendToObjectAsGetter(object, IString("value"), block); } // setter { std::ostringstream buffer; buffer << '_' << identName.c_str(); auto setterParam = stringToIString(buffer.str()); auto block = ValueBuilder::makeBlock(); block[1]->push_back( ValueBuilder::makeBinary(ValueBuilder::makeName(identName), SET, ValueBuilder::makeName(setterParam))); ValueBuilder::appendToObjectAsSetter( object, IString("value"), setterParam, block); } ValueBuilder::appendToObjectWithQuotes( exports, fromName(export_->name, NameScope::Export), object); break; } case ExternalKind::Tag: case ExternalKind::Invalid: Fatal() << "unsupported export type: " << export_->name << "\n"; } } if (wasm->memory.exists) { addMemoryFuncs(ast, wasm); } ast->push_back( ValueBuilder::makeStatement(ValueBuilder::makeReturn(exports))); } void Wasm2JSBuilder::addGlobal(Ref ast, Global* global) { if (auto* const_ = global->init->dynCast()) { Ref theValue; TODO_SINGLE_COMPOUND(const_->type); switch (const_->type.getBasic()) { case Type::i32: { theValue = ValueBuilder::makeInt(const_->value.geti32()); break; } case Type::f32: { theValue = ValueBuilder::makeCall( MATH_FROUND, makeJsCoercion(ValueBuilder::makeDouble(const_->value.getf32()), JS_DOUBLE)); break; } case Type::f64: { theValue = makeJsCoercion( ValueBuilder::makeDouble(const_->value.getf64()), JS_DOUBLE); break; } default: { assert(false && "Top const type not supported"); } } Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); ValueBuilder::appendToVar( theVar, fromName(global->name, NameScope::Top), theValue); } else if (auto* get = global->init->dynCast()) { Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); ValueBuilder::appendToVar( theVar, fromName(global->name, NameScope::Top), ValueBuilder::makeName(fromName(get->name, NameScope::Top))); } else { assert(false && "Top init type not supported"); } } Ref Wasm2JSBuilder::processFunction(Module* m, Function* func, bool standaloneFunction) { if (standaloneFunction) { // We are only printing a function, not a whole module. Prepare it for // translation now (if there were a module, we'd have done this for all // functions in parallel, earlier). PassRunner runner(m); // We only run a subset of all passes here. TODO: create a full valid module // for each assertion body. runner.add("flatten"); runner.add("simplify-locals-notee-nostructure"); runner.add("reorder-locals"); runner.add("remove-unused-names"); runner.add("vacuum"); runner.runOnFunction(func); } // We will be symbolically referring to all variables in the function, so make // sure that everything has a name and it's unique. Names::ensureNames(func); Ref ret = ValueBuilder::makeFunction(fromName(func->name, NameScope::Top)); frees.clear(); frees.resize(std::max(Type::i32, std::max(Type::f32, Type::f64)) + 1); temps.clear(); temps.resize(std::max(Type::i32, std::max(Type::f32, Type::f64)) + 1); temps[Type::i32] = temps[Type::f32] = temps[Type::f64] = 0; // arguments bool needCoercions = options.optimizeLevel == 0 || standaloneFunction || functionsCallableFromOutside.count(func->name); for (Index i = 0; i < func->getNumParams(); i++) { IString name = fromName(func->getLocalNameOrGeneric(i), NameScope::Local); ValueBuilder::appendArgumentToFunction(ret, name); if (needCoercions) { ret[3]->push_back(ValueBuilder::makeStatement(ValueBuilder::makeBinary( ValueBuilder::makeName(name), SET, makeJsCoercion(ValueBuilder::makeName(name), wasmToJsType(func->getLocalType(i)))))); } } Ref theVar = ValueBuilder::makeVar(); size_t theVarIndex = ret[3]->size(); ret[3]->push_back(theVar); // body flattenAppend(ret, processFunctionBody(m, func, standaloneFunction)); // vars, including new temp vars for (Index i = func->getVarIndexBase(); i < func->getNumLocals(); i++) { ValueBuilder::appendToVar( theVar, fromName(func->getLocalNameOrGeneric(i), NameScope::Local), makeJsCoercedZero(wasmToJsType(func->getLocalType(i)))); } if (theVar[1]->size() == 0) { ret[3]->splice(theVarIndex, 1); } // checks: all temp vars should be free at the end assert(frees[Type::i32].size() == temps[Type::i32]); assert(frees[Type::f32].size() == temps[Type::f32]); assert(frees[Type::f64].size() == temps[Type::f64]); return ret; } Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, bool standaloneFunction) { // Switches are tricky to handle - in wasm they often come with // massively-nested "towers" of blocks, which if naively translated // to JS may exceed parse recursion limits of VMs. Therefore even when // not optimizing we work hard to emit minimal and minimally-nested // switches. // We do so by pre-scanning for br_tables and noting which of their // targets can be hoisted up into them, e.g. // // (block $a // (block $b // (block $c // (block $d // (block $e // (br_table $a $b $c $d $e (..)) // ) // ;; code X (for block $e) // ;; implicit fallthrough - can be done in the switch too // ) // ;; code Y // (br $c) ;; branch which is identical to a fallthrough // ) // ;; code Z // (br $a) ;; skip some blocks - can't do this in a switch! // ) // ;; code W // ) // // Every branch we see is a potential hazard - all targets must not // be optimized into the switch, since they must be reached normally, // unless they happen to be right after us, in which case it's just // a fallthrough anyhow. struct SwitchProcessor : public ExpressionStackWalker { // A list of expressions we don't need to emit, as we are handling them // in another way. std::set unneededExpressions; struct SwitchCase { Name target; std::vector code; SwitchCase(Name target) : target(target) {} }; // The switch cases we found that we can hoist up. std::map> hoistedSwitchCases; void visitSwitch(Switch* brTable) { Index i = expressionStack.size() - 1; assert(expressionStack[i] == brTable); // A set of names we must stop at, since we've seen branches to them. std::set namesBranchedTo; while (1) { // Stop if we are at the top level. if (i == 0) { break; } i--; auto* child = expressionStack[i + 1]; auto* curr = expressionStack[i]; // Stop if the current node is not a block with the child in the // first position, i.e., the classic switch pattern. auto* block = curr->dynCast(); if (!block || block->list[0] != child) { break; } // Ignore the case of a name-less block for simplicity (merge-blocks // would have removed it). if (!block->name.is()) { break; } // If we have already seen this block, stop here. if (unneededExpressions.count(block)) { // XXX FIXME we should probably abort the entire optimization break; } auto& list = block->list; if (child == brTable) { // Nothing more to do here (we can in fact skip any code til // the parent block). continue; } // Ok, we are a block and our child in the first position is a // block, and the neither is branched to - unless maybe the child // branches to the parent, check that. Note how we treat the // final element which may be a break that is a fallthrough. Expression* unneededBr = nullptr; for (Index j = 1; j < list.size(); j++) { auto* item = list[j]; auto newBranches = BranchUtils::getExitingBranches(item); if (auto* br = item->dynCast()) { if (j == list.size() - 1) { if (!br->condition && br->name == block->name) { // This is a natural, unnecessary-to-emit fallthrough. unneededBr = br; break; } } } namesBranchedTo.insert(newBranches.begin(), newBranches.end()); } if (namesBranchedTo.count(block->name)) { break; } // We can move code after the child (reached by branching on the // child) into the switch. auto* childBlock = child->cast(); hoistedSwitchCases[brTable].emplace_back(childBlock->name); SwitchCase& case_ = hoistedSwitchCases[brTable].back(); for (Index j = 1; j < list.size(); j++) { auto* item = list[j]; if (item != unneededBr) { case_.code.push_back(item); } } list.resize(1); // Finally, mark the block as unneeded outside the switch. unneededExpressions.insert(childBlock); } } }; struct ExpressionProcessor : public OverriddenVisitor { Wasm2JSBuilder* parent; IString result; // TODO: remove Function* func; Module* module; bool standaloneFunction; SwitchProcessor switchProcessor; ExpressionProcessor(Wasm2JSBuilder* parent, Module* m, Function* func, bool standaloneFunction) : parent(parent), func(func), module(m), standaloneFunction(standaloneFunction) {} Ref process() { switchProcessor.walk(func->body); return visit(func->body, NO_RESULT); } // A scoped temporary variable. struct ScopedTemp { Wasm2JSBuilder* parent; Type type; IString temp; // TODO: switch to indexes; avoid names bool needFree; // @param possible if provided, this is a variable we can use as our temp. // it has already been allocated in a higher scope, and we // can just assign to it as our result is going there // anyhow. ScopedTemp(Type type, Wasm2JSBuilder* parent, Function* func, IString possible = NO_RESULT) : parent(parent), type(type) { assert(possible != EXPRESSION_RESULT); if (possible == NO_RESULT) { temp = parent->getTemp(type, func); needFree = true; } else { temp = possible; needFree = false; } } ~ScopedTemp() { if (needFree) { parent->freeTemp(type, temp); } } IString getName() { return temp; } Ref getAstName() { return ValueBuilder::makeName(temp); } }; Ref visit(Expression* curr, IString nextResult) { IString old = result; result = nextResult; Ref ret = OverriddenVisitor::visit(curr); // keep it consistent for the rest of this frame, which may call visit on // multiple children result = old; return ret; } Ref visit(Expression* curr, ScopedTemp& temp) { return visit(curr, temp.temp); } Ref visitAndAssign(Expression* curr, IString result) { assert(result != NO_RESULT); Ref ret = visit(curr, result); return ValueBuilder::makeStatement( ValueBuilder::makeBinary(ValueBuilder::makeName(result), SET, ret)); } Ref visitAndAssign(Expression* curr, ScopedTemp& temp) { return visitAndAssign(curr, temp.getName()); } // Expressions with control flow turn into a block, which we must // then handle, even if we are an expression. bool isBlock(Ref ast) { return !!ast && ast->isArray() && ast[0] == BLOCK; } Ref blockify(Ref ast) { if (isBlock(ast)) { return ast; } Ref ret = ValueBuilder::makeBlock(); ret[1]->push_back(ValueBuilder::makeStatement(ast)); return ret; } // Breaks to the top of a loop should be emitted as continues, to that // loop's main label std::unordered_set continueLabels; IString fromName(Name name, NameScope scope) { return parent->fromName(name, scope); } // Visitors Ref visitBlock(Block* curr) { if (switchProcessor.unneededExpressions.count(curr)) { // We have had our tail hoisted into a switch that is nested in our // first position, so we don't need to emit that code again, or // ourselves in fact. return visit(curr->list[0], NO_RESULT); } Ref ret = ValueBuilder::makeBlock(); size_t size = curr->list.size(); for (size_t i = 0; i < size; i++) { flattenAppend( ret, ValueBuilder::makeStatement(visit(curr->list[i], NO_RESULT))); } if (curr->name.is()) { ret = ValueBuilder::makeLabel(fromName(curr->name, NameScope::Label), ret); } return ret; } Ref visitIf(If* curr) { Ref condition = visit(curr->condition, EXPRESSION_RESULT); Ref ifTrue = visit(curr->ifTrue, NO_RESULT); Ref ifFalse; if (curr->ifFalse) { ifFalse = visit(curr->ifFalse, NO_RESULT); } return ValueBuilder::makeIf(condition, ifTrue, ifFalse); // simple if } Ref visitLoop(Loop* curr) { Name asmLabel = curr->name; continueLabels.insert(asmLabel); Ref body = visit(curr->body, result); // if we can reach the end of the block, we must leave the while (1) loop if (curr->body->type != Type::unreachable) { assert(curr->body->type == Type::none); // flat IR body = blockify(body); flattenAppend( body, ValueBuilder::makeBreak(fromName(asmLabel, NameScope::Label))); } Ref ret = ValueBuilder::makeWhile(ValueBuilder::makeInt(1), body); return ValueBuilder::makeLabel(fromName(asmLabel, NameScope::Label), ret); } Ref makeBreakOrContinue(Name name) { if (continueLabels.count(name)) { return ValueBuilder::makeContinue(fromName(name, NameScope::Label)); } else { return ValueBuilder::makeBreak(fromName(name, NameScope::Label)); } } Ref visitBreak(Break* curr) { if (curr->condition) { // we need an equivalent to an if here, so use that code Break fakeBreak = *curr; fakeBreak.condition = nullptr; If fakeIf; fakeIf.condition = curr->condition; fakeIf.ifTrue = &fakeBreak; return visit(&fakeIf, result); } return makeBreakOrContinue(curr->name); } Expression* defaultBody = nullptr; // default must be last in asm.js Ref visitSwitch(Switch* curr) { // Even without optimizations, we work hard here to emit minimal and // especially minimally-nested code, since otherwise we may get block // nesting of a size that JS engines can't handle. Ref condition = visit(curr->condition, EXPRESSION_RESULT); Ref theSwitch = ValueBuilder::makeSwitch(makeJsCoercion(condition, JS_INT)); // First, group the switch targets. std::map> targetIndexes; for (size_t i = 0; i < curr->targets.size(); i++) { targetIndexes[curr->targets[i]].push_back(i); } // Emit first any hoisted groups. auto& hoistedCases = switchProcessor.hoistedSwitchCases[curr]; std::set emittedTargets; bool hoistedEndsWithUnreachable = false; for (auto& case_ : hoistedCases) { auto target = case_.target; auto& code = case_.code; emittedTargets.insert(target); if (target != curr->default_) { auto& indexes = targetIndexes[target]; for (auto i : indexes) { ValueBuilder::appendCaseToSwitch(theSwitch, ValueBuilder::makeNum(i)); } } else { ValueBuilder::appendDefaultToSwitch(theSwitch); } for (auto* c : code) { ValueBuilder::appendCodeToSwitch( theSwitch, blockify(visit(c, NO_RESULT)), false); hoistedEndsWithUnreachable = c->type == Type::unreachable; } } // After the hoisted cases, if any remain we must make sure not to // fall through into them. If no code was hoisted, this is unnecessary, // and if the hoisted code ended with an unreachable it also is not // necessary. bool stoppedFurtherFallthrough = false; auto stopFurtherFallthrough = [&]() { if (!stoppedFurtherFallthrough && !hoistedCases.empty() && !hoistedEndsWithUnreachable) { stoppedFurtherFallthrough = true; ValueBuilder::appendCodeToSwitch( theSwitch, blockify(ValueBuilder::makeBreak(IString())), false); } }; // Emit any remaining groups by just emitting branches to their code, // which will appear outside the switch. for (auto& [target, indexes] : targetIndexes) { if (emittedTargets.count(target)) { continue; } stopFurtherFallthrough(); if (target != curr->default_) { for (auto i : indexes) { ValueBuilder::appendCaseToSwitch(theSwitch, ValueBuilder::makeNum(i)); } ValueBuilder::appendCodeToSwitch( theSwitch, blockify(makeBreakOrContinue(target)), false); } else { // For the group going to the same place as the default, we can just // emit the default itself, which we do at the end. } } // TODO: if the group the default is in is not the largest, we can turn // the largest into // the default by using a local and a check on the range if (!emittedTargets.count(curr->default_)) { stopFurtherFallthrough(); ValueBuilder::appendDefaultToSwitch(theSwitch); ValueBuilder::appendCodeToSwitch( theSwitch, blockify(makeBreakOrContinue(curr->default_)), false); } return theSwitch; } Ref visitCall(Call* curr) { if (curr->isReturn) { Fatal() << "tail calls not yet supported in wasm2js"; } Ref theCall = ValueBuilder::makeCall(fromName(curr->target, NameScope::Top)); // For wasm => wasm calls, we don't need coercions. TODO: even imports // might be safe? bool needCoercions = parent->options.optimizeLevel == 0 || standaloneFunction || module->getFunction(curr->target)->imported(); for (auto operand : curr->operands) { auto value = visit(operand, EXPRESSION_RESULT); if (needCoercions) { value = makeJsCoercion(value, wasmToJsType(operand->type)); } theCall[2]->push_back(value); } if (needCoercions) { theCall = makeJsCoercion(theCall, wasmToJsType(curr->type)); } return theCall; } Ref visitCallIndirect(CallIndirect* curr) { if (curr->isReturn) { Fatal() << "tail calls not yet supported in wasm2js"; } // If the target has effects that interact with the operands, we must // reorder it to the start. bool mustReorder = false; EffectAnalyzer targetEffects(parent->options, *module, curr->target); if (targetEffects.hasAnything()) { for (auto* operand : curr->operands) { if (targetEffects.invalidates( EffectAnalyzer(parent->options, *module, operand))) { mustReorder = true; break; } } } // Ensure the function pointer is a number. In general in wasm2js we are // ok with true/false being present, as they are immediately cast to a // number anyhow on their use. However, FUNCTION_TABLE[true] is *not* the // same as FUNCTION_TABLE[1], so we must cast. This is a rare exception // because FUNCTION_TABLE is just a normal JS object, not a typed array // or a mathematical operation (all of which coerce to a number for us). auto target = visit(curr->target, EXPRESSION_RESULT); target = makeJsCoercion(target, JS_INT); if (mustReorder) { Ref ret; ScopedTemp idx(Type::i32, parent, func); std::vector temps; // TODO: utility class, with destructor? for (auto* operand : curr->operands) { temps.push_back(new ScopedTemp(operand->type, parent, func)); IString temp = temps.back()->temp; sequenceAppend(ret, visitAndAssign(operand, temp)); } sequenceAppend(ret, ValueBuilder::makeBinary( ValueBuilder::makeName(idx.getName()), SET, target)); Ref theCall = ValueBuilder::makeCall(ValueBuilder::makeSub( ValueBuilder::makeName(FUNCTION_TABLE), idx.getAstName())); for (size_t i = 0; i < temps.size(); i++) { IString temp = temps[i]->temp; auto& operand = curr->operands[i]; theCall[2]->push_back(makeJsCoercion(ValueBuilder::makeName(temp), wasmToJsType(operand->type))); } theCall = makeJsCoercion(theCall, wasmToJsType(curr->type)); sequenceAppend(ret, theCall); for (auto temp : temps) { delete temp; } return ret; } else { // Target has no side effects, emit simple code Ref theCall = ValueBuilder::makeCall(ValueBuilder::makeSub( ValueBuilder::makeName(FUNCTION_TABLE), target)); for (auto* operand : curr->operands) { theCall[2]->push_back(visit(operand, EXPRESSION_RESULT)); } theCall = makeJsCoercion(theCall, wasmToJsType(curr->type)); return theCall; } } // TODO: remove Ref makeSetVar(Expression* curr, Expression* value, Name name, NameScope scope) { return ValueBuilder::makeBinary( ValueBuilder::makeName(fromName(name, scope)), SET, visit(value, EXPRESSION_RESULT)); } Ref visitLocalGet(LocalGet* curr) { return ValueBuilder::makeName( fromName(func->getLocalNameOrGeneric(curr->index), NameScope::Local)); } Ref visitLocalSet(LocalSet* curr) { return makeSetVar(curr, curr->value, func->getLocalNameOrGeneric(curr->index), NameScope::Local); } Ref visitGlobalGet(GlobalGet* curr) { return ValueBuilder::makeName(fromName(curr->name, NameScope::Top)); } Ref visitGlobalSet(GlobalSet* curr) { return makeSetVar(curr, curr->value, curr->name, NameScope::Top); } Ref visitLoad(Load* curr) { // Unaligned loads and stores must have been fixed up already. assert(curr->align == 0 || curr->align == curr->bytes); // normal load Ref ptr = makePointer(curr->ptr, curr->offset); Ref ret; switch (curr->type.getBasic()) { case Type::i32: { switch (curr->bytes) { case 1: ret = ValueBuilder::makeSub( ValueBuilder::makeName( LoadUtils::isSignRelevant(curr) && curr->signed_ ? HEAP8 : HEAPU8), ValueBuilder::makePtrShift(ptr, 0)); break; case 2: ret = ValueBuilder::makeSub( ValueBuilder::makeName( LoadUtils::isSignRelevant(curr) && curr->signed_ ? HEAP16 : HEAPU16), ValueBuilder::makePtrShift(ptr, 1)); break; case 4: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAP32), ValueBuilder::makePtrShift(ptr, 2)); break; default: { Fatal() << "Unhandled number of bytes in i32 load: " << curr->bytes; } } break; } case Type::f32: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAPF32), ValueBuilder::makePtrShift(ptr, 2)); break; case Type::f64: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAPF64), ValueBuilder::makePtrShift(ptr, 3)); break; default: { Fatal() << "Unhandled type in load: " << curr->type; } } if (curr->isAtomic) { Ref call = ValueBuilder::makeCall( ValueBuilder::makeDot(ValueBuilder::makeName(ATOMICS), LOAD)); ValueBuilder::appendToCall(call, ret[1]); ValueBuilder::appendToCall(call, ret[2]); ret = call; } // Coercions are not actually needed, as if the user reads beyond valid // memory, it's undefined behavior anyhow, and so we don't care much about // slowness of undefined values etc. bool needCoercions = parent->options.optimizeLevel == 0 || standaloneFunction; if (needCoercions) { ret = makeJsCoercion(ret, wasmToJsType(curr->type)); } return ret; } Ref visitStore(Store* curr) { if (module->memory.initial < module->memory.max && curr->type != Type::unreachable) { // In JS, if memory grows then it is dangerous to write // HEAP[f()] = .. // or // HEAP[..] = f() // since if the call swaps HEAP (in a growth operation) then // we will not actually write to the new version (since the // semantics of JS mean we already looked at HEAP and have // decided where to assign to). if (!FindAll(curr->ptr).list.empty() || !FindAll(curr->value).list.empty() || !FindAll(curr->ptr).list.empty() || !FindAll(curr->value).list.empty() || !FindAll(curr->ptr).list.empty() || !FindAll(curr->value).list.empty()) { Ref ret; ScopedTemp ptr(Type::i32, parent, func); sequenceAppend(ret, visitAndAssign(curr->ptr, ptr)); ScopedTemp value(curr->value->type, parent, func); sequenceAppend(ret, visitAndAssign(curr->value, value)); LocalGet getPtr; getPtr.index = func->getLocalIndex(ptr.getName()); getPtr.type = Type::i32; LocalGet getValue; getValue.index = func->getLocalIndex(value.getName()); getValue.type = curr->value->type; Store fakeStore = *curr; fakeStore.ptr = &getPtr; fakeStore.value = &getValue; sequenceAppend(ret, visitStore(&fakeStore)); return ret; } } // FIXME if memory growth, store ptr cannot contain a function call // also other stores to memory, check them, all makeSub's // Unaligned loads and stores must have been fixed up already. assert(curr->align == 0 || curr->align == curr->bytes); // normal store Ref ptr = makePointer(curr->ptr, curr->offset); Ref value = visit(curr->value, EXPRESSION_RESULT); Ref ret; switch (curr->valueType.getBasic()) { case Type::i32: { switch (curr->bytes) { case 1: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAP8), ValueBuilder::makePtrShift(ptr, 0)); break; case 2: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAP16), ValueBuilder::makePtrShift(ptr, 1)); break; case 4: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAP32), ValueBuilder::makePtrShift(ptr, 2)); break; default: abort(); } break; } case Type::f32: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAPF32), ValueBuilder::makePtrShift(ptr, 2)); break; case Type::f64: ret = ValueBuilder::makeSub(ValueBuilder::makeName(HEAPF64), ValueBuilder::makePtrShift(ptr, 3)); break; default: { Fatal() << "Unhandled type in store: " << curr->valueType; } } if (curr->isAtomic) { Ref call = ValueBuilder::makeCall( ValueBuilder::makeDot(ValueBuilder::makeName(ATOMICS), STORE)); ValueBuilder::appendToCall(call, ret[1]); ValueBuilder::appendToCall(call, ret[2]); ValueBuilder::appendToCall(call, value); return call; } return ValueBuilder::makeBinary(ret, SET, value); } Ref visitDrop(Drop* curr) { return visit(curr->value, NO_RESULT); } Ref visitConst(Const* curr) { switch (curr->type.getBasic()) { case Type::i32: return ValueBuilder::makeInt(curr->value.geti32()); // An i64 argument translates to two actual arguments to asm.js // functions, so we do a bit of a hack here to get our one `Ref` to look // like two function arguments. case Type::i64: { auto lo = (unsigned)curr->value.geti64(); auto hi = (unsigned)(curr->value.geti64() >> 32); std::ostringstream out; out << lo << "," << hi; std::string os = out.str(); IString name(os.c_str(), false); return ValueBuilder::makeName(name); } case Type::f32: { Ref ret = ValueBuilder::makeCall(MATH_FROUND); Const fake; fake.value = Literal(double(curr->value.getf32())); fake.type = Type::f64; ret[2]->push_back(visitConst(&fake)); return ret; } case Type::f64: { double d = curr->value.getf64(); if (d == 0 && std::signbit(d)) { // negative zero return ValueBuilder::makeUnary( PLUS, ValueBuilder::makeUnary(MINUS, ValueBuilder::makeDouble(0))); } return ValueBuilder::makeUnary( PLUS, ValueBuilder::makeDouble(curr->value.getf64())); } default: Fatal() << "unknown const type"; } } Ref visitUnary(Unary* curr) { // normal unary switch (curr->type.getBasic()) { case Type::i32: { switch (curr->op) { case ClzInt32: { return ValueBuilder::makeCall( MATH_CLZ32, visit(curr->value, EXPRESSION_RESULT)); } case CtzInt32: case PopcntInt32: { WASM_UNREACHABLE("i32 unary should have been removed"); } case EqZInt32: { // XXX !x does change the type to bool, which is correct, but may // be slower? return ValueBuilder::makeUnary( L_NOT, visit(curr->value, EXPRESSION_RESULT)); } case ReinterpretFloat32: { ABI::wasm2js::ensureHelpers(module, ABI::wasm2js::SCRATCH_STORE_F32); ABI::wasm2js::ensureHelpers(module, ABI::wasm2js::SCRATCH_LOAD_I32); Ref store = ValueBuilder::makeCall(ABI::wasm2js::SCRATCH_STORE_F32, visit(curr->value, EXPRESSION_RESULT)); // 32-bit scratch memory uses index 2, so that it does not // conflict with indexes 0, 1 which are used for 64-bit, see // comment where |scratchBuffer| is defined. Ref load = ValueBuilder::makeCall(ABI::wasm2js::SCRATCH_LOAD_I32, ValueBuilder::makeInt(2)); return ValueBuilder::makeSeq(store, load); } // generate (~~expr), what Emscripten does case TruncSFloat32ToInt32: case TruncSFloat64ToInt32: case TruncSatSFloat32ToInt32: case TruncSatSFloat64ToInt32: { return ValueBuilder::makeUnary( B_NOT, ValueBuilder::makeUnary(B_NOT, visit(curr->value, EXPRESSION_RESULT))); } // generate (~~expr >>> 0), what Emscripten does case TruncUFloat32ToInt32: case TruncUFloat64ToInt32: case TruncSatUFloat32ToInt32: case TruncSatUFloat64ToInt32: { return ValueBuilder::makeBinary( ValueBuilder::makeUnary( B_NOT, ValueBuilder::makeUnary( B_NOT, visit(curr->value, EXPRESSION_RESULT))), TRSHIFT, ValueBuilder::makeNum(0)); } case ExtendS8Int32: { return ValueBuilder::makeBinary( ValueBuilder::makeBinary(visit(curr->value, EXPRESSION_RESULT), LSHIFT, ValueBuilder::makeNum(24)), RSHIFT, ValueBuilder::makeNum(24)); } case ExtendS16Int32: { return ValueBuilder::makeBinary( ValueBuilder::makeBinary(visit(curr->value, EXPRESSION_RESULT), LSHIFT, ValueBuilder::makeNum(16)), RSHIFT, ValueBuilder::makeNum(16)); } default: WASM_UNREACHABLE("unhandled unary"); } } case Type::f32: case Type::f64: { Ref ret; switch (curr->op) { case NegFloat32: case NegFloat64: ret = ValueBuilder::makeUnary( MINUS, visit(curr->value, EXPRESSION_RESULT)); break; case AbsFloat32: case AbsFloat64: ret = ValueBuilder::makeCall( MATH_ABS, visit(curr->value, EXPRESSION_RESULT)); break; case CeilFloat32: case CeilFloat64: ret = ValueBuilder::makeCall( MATH_CEIL, visit(curr->value, EXPRESSION_RESULT)); break; case FloorFloat32: case FloorFloat64: ret = ValueBuilder::makeCall( MATH_FLOOR, visit(curr->value, EXPRESSION_RESULT)); break; case TruncFloat32: case TruncFloat64: ret = ValueBuilder::makeCall( MATH_TRUNC, visit(curr->value, EXPRESSION_RESULT)); break; case SqrtFloat32: case SqrtFloat64: ret = ValueBuilder::makeCall( MATH_SQRT, visit(curr->value, EXPRESSION_RESULT)); break; case PromoteFloat32: return makeJsCoercion(visit(curr->value, EXPRESSION_RESULT), JS_DOUBLE); case DemoteFloat64: return makeJsCoercion(visit(curr->value, EXPRESSION_RESULT), JS_FLOAT); case ReinterpretInt32: { ABI::wasm2js::ensureHelpers(module, ABI::wasm2js::SCRATCH_STORE_I32); ABI::wasm2js::ensureHelpers(module, ABI::wasm2js::SCRATCH_LOAD_F32); // 32-bit scratch memory uses index 2, so that it does not // conflict with indexes 0, 1 which are used for 64-bit, see // comment where |scratchBuffer| is defined. Ref store = ValueBuilder::makeCall(ABI::wasm2js::SCRATCH_STORE_I32, ValueBuilder::makeNum(2), visit(curr->value, EXPRESSION_RESULT)); Ref load = ValueBuilder::makeCall(ABI::wasm2js::SCRATCH_LOAD_F32); return ValueBuilder::makeSeq(store, load); } // Coerce the integer to a float as emscripten does case ConvertSInt32ToFloat32: return makeJsCoercion( makeJsCoercion(visit(curr->value, EXPRESSION_RESULT), JS_INT), JS_FLOAT); case ConvertSInt32ToFloat64: return makeJsCoercion( makeJsCoercion(visit(curr->value, EXPRESSION_RESULT), JS_INT), JS_DOUBLE); // Generate (expr >>> 0), followed by a coercion case ConvertUInt32ToFloat32: return makeJsCoercion( ValueBuilder::makeBinary(visit(curr->value, EXPRESSION_RESULT), TRSHIFT, ValueBuilder::makeInt(0)), JS_FLOAT); case ConvertUInt32ToFloat64: return makeJsCoercion( ValueBuilder::makeBinary(visit(curr->value, EXPRESSION_RESULT), TRSHIFT, ValueBuilder::makeInt(0)), JS_DOUBLE); // TODO: more complex unary conversions case NearestFloat32: case NearestFloat64: WASM_UNREACHABLE( "operation should have been removed in previous passes"); default: WASM_UNREACHABLE("unhandled unary float operator"); } if (curr->type == Type::f32) { // doubles need much less coercing return makeJsCoercion(ret, JS_FLOAT); } return ret; } default: { Fatal() << "Unhandled type in unary: " << curr; } } } Ref visitBinary(Binary* curr) { // normal binary Ref left = visit(curr->left, EXPRESSION_RESULT); Ref right = visit(curr->right, EXPRESSION_RESULT); Ref ret; switch (curr->type.getBasic()) { case Type::i32: { switch (curr->op) { case AddInt32: ret = ValueBuilder::makeBinary(left, PLUS, right); break; case SubInt32: ret = ValueBuilder::makeBinary(left, MINUS, right); break; case MulInt32: { if (curr->type == Type::i32) { // TODO: when one operand is a small int, emit a multiply return ValueBuilder::makeCall(MATH_IMUL, left, right); } else { return ValueBuilder::makeBinary(left, MUL, right); } } case DivSInt32: ret = ValueBuilder::makeBinary(makeSigning(left, JS_SIGNED), DIV, makeSigning(right, JS_SIGNED)); break; case DivUInt32: ret = ValueBuilder::makeBinary(makeSigning(left, JS_UNSIGNED), DIV, makeSigning(right, JS_UNSIGNED)); break; case RemSInt32: ret = ValueBuilder::makeBinary(makeSigning(left, JS_SIGNED), MOD, makeSigning(right, JS_SIGNED)); break; case RemUInt32: ret = ValueBuilder::makeBinary(makeSigning(left, JS_UNSIGNED), MOD, makeSigning(right, JS_UNSIGNED)); break; case AndInt32: ret = ValueBuilder::makeBinary(left, AND, right); break; case OrInt32: ret = ValueBuilder::makeBinary(left, OR, right); break; case XorInt32: ret = ValueBuilder::makeBinary(left, XOR, right); break; case ShlInt32: ret = ValueBuilder::makeBinary(left, LSHIFT, right); break; case ShrUInt32: ret = ValueBuilder::makeBinary(left, TRSHIFT, right); break; case ShrSInt32: ret = ValueBuilder::makeBinary(left, RSHIFT, right); break; case EqInt32: { return ValueBuilder::makeBinary(makeSigning(left, JS_SIGNED), EQ, makeSigning(right, JS_SIGNED)); } case NeInt32: { return ValueBuilder::makeBinary(makeSigning(left, JS_SIGNED), NE, makeSigning(right, JS_SIGNED)); } case LtSInt32: return ValueBuilder::makeBinary(makeSigning(left, JS_SIGNED), LT, makeSigning(right, JS_SIGNED)); case LtUInt32: return ValueBuilder::makeBinary(makeSigning(left, JS_UNSIGNED), LT, makeSigning(right, JS_UNSIGNED)); case LeSInt32: return ValueBuilder::makeBinary(makeSigning(left, JS_SIGNED), LE, makeSigning(right, JS_SIGNED)); case LeUInt32: return ValueBuilder::makeBinary(makeSigning(left, JS_UNSIGNED), LE, makeSigning(right, JS_UNSIGNED)); case GtSInt32: return ValueBuilder::makeBinary(makeSigning(left, JS_SIGNED), GT, makeSigning(right, JS_SIGNED)); case GtUInt32: return ValueBuilder::makeBinary(makeSigning(left, JS_UNSIGNED), GT, makeSigning(right, JS_UNSIGNED)); case GeSInt32: return ValueBuilder::makeBinary(makeSigning(left, JS_SIGNED), GE, makeSigning(right, JS_SIGNED)); case GeUInt32: return ValueBuilder::makeBinary(makeSigning(left, JS_UNSIGNED), GE, makeSigning(right, JS_UNSIGNED)); case EqFloat32: case EqFloat64: return ValueBuilder::makeBinary(left, EQ, right); case NeFloat32: case NeFloat64: return ValueBuilder::makeBinary(left, NE, right); case GeFloat32: case GeFloat64: return ValueBuilder::makeBinary(left, GE, right); case GtFloat32: case GtFloat64: return ValueBuilder::makeBinary(left, GT, right); case LeFloat32: case LeFloat64: return ValueBuilder::makeBinary(left, LE, right); case LtFloat32: case LtFloat64: return ValueBuilder::makeBinary(left, LT, right); case RotLInt32: case RotRInt32: WASM_UNREACHABLE("should be removed already"); default: WASM_UNREACHABLE("unhandled i32 binary operator"); } break; } case Type::f32: case Type::f64: switch (curr->op) { case AddFloat32: case AddFloat64: ret = ValueBuilder::makeBinary(left, PLUS, right); break; case SubFloat32: case SubFloat64: ret = ValueBuilder::makeBinary(left, MINUS, right); break; case MulFloat32: case MulFloat64: ret = ValueBuilder::makeBinary(left, MUL, right); break; case DivFloat32: case DivFloat64: ret = ValueBuilder::makeBinary(left, DIV, right); break; case MinFloat32: case MinFloat64: ret = ValueBuilder::makeCall(MATH_MIN, left, right); break; case MaxFloat32: case MaxFloat64: ret = ValueBuilder::makeCall(MATH_MAX, left, right); break; case CopySignFloat32: case CopySignFloat64: default: Fatal() << "Unhandled binary float operator: "; } if (curr->type == Type::f32) { return makeJsCoercion(ret, JS_FLOAT); } return ret; default: Fatal() << "Unhandled type in binary: " << curr; } return makeJsCoercion(ret, wasmToJsType(curr->type)); } Ref visitSelect(Select* curr) { // If the condition has effects that interact with the operands, we must // reorder it to the start. We must also use locals if the values have // side effects, as a JS conditional does not visit both sides. bool useLocals = false; EffectAnalyzer conditionEffects( parent->options, *module, curr->condition); EffectAnalyzer ifTrueEffects(parent->options, *module, curr->ifTrue); EffectAnalyzer ifFalseEffects(parent->options, *module, curr->ifFalse); if (conditionEffects.invalidates(ifTrueEffects) || conditionEffects.invalidates(ifFalseEffects) || ifTrueEffects.hasSideEffects() || ifFalseEffects.hasSideEffects()) { useLocals = true; } if (useLocals) { ScopedTemp tempIfTrue(curr->type, parent, func), tempIfFalse(curr->type, parent, func), tempCondition(Type::i32, parent, func); Ref ifTrue = visit(curr->ifTrue, EXPRESSION_RESULT); Ref ifFalse = visit(curr->ifFalse, EXPRESSION_RESULT); Ref condition = visit(curr->condition, EXPRESSION_RESULT); return ValueBuilder::makeSeq( ValueBuilder::makeBinary(tempIfTrue.getAstName(), SET, ifTrue), ValueBuilder::makeSeq( ValueBuilder::makeBinary(tempIfFalse.getAstName(), SET, ifFalse), ValueBuilder::makeSeq( ValueBuilder::makeBinary( tempCondition.getAstName(), SET, condition), ValueBuilder::makeConditional(tempCondition.getAstName(), tempIfTrue.getAstName(), tempIfFalse.getAstName())))); } else { // Simple case without reordering. return ValueBuilder::makeConditional( visit(curr->condition, EXPRESSION_RESULT), visit(curr->ifTrue, EXPRESSION_RESULT), visit(curr->ifFalse, EXPRESSION_RESULT)); } } Ref visitReturn(Return* curr) { if (!curr->value) { return ValueBuilder::makeReturn(Ref()); } Ref val = visit(curr->value, EXPRESSION_RESULT); bool needCoercion = parent->options.optimizeLevel == 0 || standaloneFunction || parent->functionsCallableFromOutside.count(func->name); if (needCoercion) { val = makeJsCoercion(val, wasmToJsType(curr->value->type)); } return ValueBuilder::makeReturn(val); } Ref visitMemorySize(MemorySize* curr) { return ValueBuilder::makeCall(WASM_MEMORY_SIZE); } Ref visitMemoryGrow(MemoryGrow* curr) { if (module->memory.exists && module->memory.max > module->memory.initial) { return ValueBuilder::makeCall( WASM_MEMORY_GROW, makeJsCoercion(visit(curr->delta, EXPRESSION_RESULT), wasmToJsType(curr->delta->type))); } else { return ValueBuilder::makeCall(ABORT_FUNC); } } Ref visitNop(Nop* curr) { return ValueBuilder::makeToplevel(); } Ref visitUnreachable(Unreachable* curr) { return ValueBuilder::makeCall(ABORT_FUNC); } // Atomics struct HeapAndPointer { Ref heap; Ref ptr; }; HeapAndPointer getHeapAndAdjustedPointer(Index bytes, Expression* ptr, Index offset) { IString heap; Ref adjustedPtr = makePointer(ptr, offset); switch (bytes) { case 1: heap = HEAP8; break; case 2: heap = HEAP16; adjustedPtr = ValueBuilder::makePtrShift(adjustedPtr, 1); break; case 4: heap = HEAP32; adjustedPtr = ValueBuilder::makePtrShift(adjustedPtr, 2); break; default: { WASM_UNREACHABLE("unimp"); } } return {ValueBuilder::makeName(heap), adjustedPtr}; } Ref visitAtomicRMW(AtomicRMW* curr) { auto hap = getHeapAndAdjustedPointer(curr->bytes, curr->ptr, curr->offset); IString target; switch (curr->op) { case RMWAdd: target = IString("add"); break; case RMWSub: target = IString("sub"); break; case RMWAnd: target = IString("and"); break; case RMWOr: target = IString("or"); break; case RMWXor: target = IString("xor"); break; case RMWXchg: target = IString("exchange"); break; default: WASM_UNREACHABLE("unimp"); } Ref call = ValueBuilder::makeCall( ValueBuilder::makeDot(ValueBuilder::makeName(ATOMICS), target)); ValueBuilder::appendToCall(call, hap.heap); ValueBuilder::appendToCall(call, hap.ptr); ValueBuilder::appendToCall(call, visit(curr->value, EXPRESSION_RESULT)); return call; } Ref visitAtomicCmpxchg(AtomicCmpxchg* curr) { auto hap = getHeapAndAdjustedPointer(curr->bytes, curr->ptr, curr->offset); Ref expected = visit(curr->expected, EXPRESSION_RESULT); Ref replacement = visit(curr->replacement, EXPRESSION_RESULT); Ref call = ValueBuilder::makeCall(ValueBuilder::makeDot( ValueBuilder::makeName(ATOMICS), COMPARE_EXCHANGE)); ValueBuilder::appendToCall(call, hap.heap); ValueBuilder::appendToCall(call, hap.ptr); ValueBuilder::appendToCall(call, expected); ValueBuilder::appendToCall(call, replacement); return makeJsCoercion(call, wasmToJsType(curr->type)); } Ref visitAtomicWait(AtomicWait* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitAtomicNotify(AtomicNotify* curr) { Ref call = ValueBuilder::makeCall(ValueBuilder::makeDot( ValueBuilder::makeName(ATOMICS), IString("notify"))); ValueBuilder::appendToCall(call, ValueBuilder::makeName(HEAP32)); ValueBuilder::appendToCall( call, ValueBuilder::makePtrShift(makePointer(curr->ptr, curr->offset), 2)); ValueBuilder::appendToCall(call, visit(curr->notifyCount, EXPRESSION_RESULT)); return call; } Ref visitAtomicFence(AtomicFence* curr) { // Sequentially consistent fences can be lowered to no operation return ValueBuilder::makeToplevel(); } // TODOs Ref visitSIMDExtract(SIMDExtract* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitSIMDReplace(SIMDReplace* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitSIMDShuffle(SIMDShuffle* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitSIMDTernary(SIMDTernary* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitSIMDShift(SIMDShift* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitSIMDLoad(SIMDLoad* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitMemoryInit(MemoryInit* curr) { ABI::wasm2js::ensureHelpers(module, ABI::wasm2js::MEMORY_INIT); return ValueBuilder::makeCall(ABI::wasm2js::MEMORY_INIT, ValueBuilder::makeNum(curr->segment), visit(curr->dest, EXPRESSION_RESULT), visit(curr->offset, EXPRESSION_RESULT), visit(curr->size, EXPRESSION_RESULT)); } Ref visitDataDrop(DataDrop* curr) { ABI::wasm2js::ensureHelpers(module, ABI::wasm2js::DATA_DROP); return ValueBuilder::makeCall(ABI::wasm2js::DATA_DROP, ValueBuilder::makeNum(curr->segment)); } Ref visitMemoryCopy(MemoryCopy* curr) { ABI::wasm2js::ensureHelpers(module, ABI::wasm2js::MEMORY_COPY); return ValueBuilder::makeCall(ABI::wasm2js::MEMORY_COPY, visit(curr->dest, EXPRESSION_RESULT), visit(curr->source, EXPRESSION_RESULT), visit(curr->size, EXPRESSION_RESULT)); } Ref visitMemoryFill(MemoryFill* curr) { ABI::wasm2js::ensureHelpers(module, ABI::wasm2js::MEMORY_FILL); return ValueBuilder::makeCall(ABI::wasm2js::MEMORY_FILL, visit(curr->dest, EXPRESSION_RESULT), visit(curr->value, EXPRESSION_RESULT), visit(curr->size, EXPRESSION_RESULT)); } Ref visitRefNull(RefNull* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRefIs(RefIs* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRefFunc(RefFunc* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRefEq(RefEq* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitTableGet(TableGet* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitTableSet(TableSet* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitTableSize(TableSize* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitTableGrow(TableGrow* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitTry(Try* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitThrow(Throw* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRethrow(Rethrow* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitPop(Pop* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitTupleMake(TupleMake* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitTupleExtract(TupleExtract* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitI31New(I31New* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitI31Get(I31Get* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitCallRef(CallRef* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRefTest(RefTest* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRefCast(RefCast* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitBrOn(BrOn* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRttCanon(RttCanon* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRttSub(RttSub* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitStructNew(StructNew* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitStructGet(StructGet* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitStructSet(StructSet* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitArrayNew(ArrayNew* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitArrayInit(ArrayInit* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitArrayGet(ArrayGet* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitArraySet(ArraySet* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitArrayLen(ArrayLen* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitArrayCopy(ArrayCopy* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } Ref visitRefAs(RefAs* curr) { unimplemented(curr); WASM_UNREACHABLE("unimp"); } private: Ref makePointer(Expression* ptr, Address offset) { auto ret = visit(ptr, EXPRESSION_RESULT); if (offset) { ret = makeJsCoercion( ValueBuilder::makeBinary(ret, PLUS, ValueBuilder::makeNum(offset)), JS_INT); } return ret; } void unimplemented(Expression* curr) { Fatal() << "wasm2js cannot convert " << *curr; } }; return ExpressionProcessor(this, m, func, standaloneFunction).process(); } void Wasm2JSBuilder::addMemoryFuncs(Ref ast, Module* wasm) { Ref memorySizeFunc = ValueBuilder::makeFunction(WASM_MEMORY_SIZE); memorySizeFunc[3]->push_back(ValueBuilder::makeReturn( makeJsCoercion(ValueBuilder::makeBinary( ValueBuilder::makeDot(ValueBuilder::makeName(BUFFER), IString("byteLength")), DIV, ValueBuilder::makeInt(Memory::kPageSize)), JsType::JS_INT))); ast->push_back(memorySizeFunc); if (wasm->memory.max > wasm->memory.initial) { addMemoryGrowFunc(ast, wasm); } } void Wasm2JSBuilder::addMemoryGrowFunc(Ref ast, Module* wasm) { Ref memoryGrowFunc = ValueBuilder::makeFunction(WASM_MEMORY_GROW); ValueBuilder::appendArgumentToFunction(memoryGrowFunc, IString("pagesToAdd")); memoryGrowFunc[3]->push_back( ValueBuilder::makeStatement(ValueBuilder::makeBinary( ValueBuilder::makeName(IString("pagesToAdd")), SET, makeJsCoercion(ValueBuilder::makeName(IString("pagesToAdd")), JsType::JS_INT)))); Ref oldPages = ValueBuilder::makeVar(); memoryGrowFunc[3]->push_back(oldPages); ValueBuilder::appendToVar( oldPages, IString("oldPages"), makeJsCoercion(ValueBuilder::makeCall(WASM_MEMORY_SIZE), JsType::JS_INT)); Ref newPages = ValueBuilder::makeVar(); memoryGrowFunc[3]->push_back(newPages); ValueBuilder::appendToVar( newPages, IString("newPages"), makeJsCoercion( ValueBuilder::makeBinary(ValueBuilder::makeName(IString("oldPages")), PLUS, ValueBuilder::makeName(IString("pagesToAdd"))), JsType::JS_INT)); Ref block = ValueBuilder::makeBlock(); memoryGrowFunc[3]->push_back(ValueBuilder::makeIf( ValueBuilder::makeBinary( ValueBuilder::makeBinary(ValueBuilder::makeName(IString("oldPages")), LT, ValueBuilder::makeName(IString("newPages"))), IString("&&"), ValueBuilder::makeBinary(ValueBuilder::makeName(IString("newPages")), LT, ValueBuilder::makeInt(Memory::kMaxSize32))), block, NULL)); Ref newBuffer = ValueBuilder::makeVar(); ValueBuilder::appendToBlock(block, newBuffer); ValueBuilder::appendToVar( newBuffer, IString("newBuffer"), ValueBuilder::makeNew(ValueBuilder::makeCall( ARRAY_BUFFER, ValueBuilder::makeCall(MATH_IMUL, ValueBuilder::makeName(IString("newPages")), ValueBuilder::makeInt(Memory::kPageSize))))); Ref newHEAP8 = ValueBuilder::makeVar(); ValueBuilder::appendToBlock(block, newHEAP8); ValueBuilder::appendToVar(newHEAP8, IString("newHEAP8"), ValueBuilder::makeNew(ValueBuilder::makeCall( ValueBuilder::makeName(INT8ARRAY), ValueBuilder::makeName(IString("newBuffer"))))); ValueBuilder::appendToBlock( block, ValueBuilder::makeCall( ValueBuilder::makeDot(ValueBuilder::makeName(IString("newHEAP8")), IString("set")), ValueBuilder::makeName(HEAP8))); auto setHeap = [&](IString name, IString view) { ValueBuilder::appendToBlock( block, ValueBuilder::makeBinary( ValueBuilder::makeName(name), SET, ValueBuilder::makeNew(ValueBuilder::makeCall( ValueBuilder::makeName(view), ValueBuilder::makeName(IString("newBuffer")))))); }; setHeap(HEAP8, INT8ARRAY); setHeap(HEAP16, INT16ARRAY); setHeap(HEAP32, INT32ARRAY); setHeap(HEAPU8, UINT8ARRAY); setHeap(HEAPU16, UINT16ARRAY); setHeap(HEAPU32, UINT32ARRAY); setHeap(HEAPF32, FLOAT32ARRAY); setHeap(HEAPF64, FLOAT64ARRAY); ValueBuilder::appendToBlock( block, ValueBuilder::makeBinary(ValueBuilder::makeName(BUFFER), SET, ValueBuilder::makeName(IString("newBuffer")))); // apply the changes to the memory import if (wasm->memory.imported()) { ValueBuilder::appendToBlock( block, ValueBuilder::makeBinary( ValueBuilder::makeDot(ValueBuilder::makeName("memory"), ValueBuilder::makeName(BUFFER)), SET, ValueBuilder::makeName(BUFFER))); } if (needsBufferView(*wasm)) { ValueBuilder::appendToBlock( block, ValueBuilder::makeBinary(ValueBuilder::makeName("bufferView"), SET, ValueBuilder::makeName(HEAPU8))); } memoryGrowFunc[3]->push_back( ValueBuilder::makeReturn(ValueBuilder::makeName(IString("oldPages")))); ast->push_back(memoryGrowFunc); } // Wasm2JSGlue emits the core of the module - the functions etc. that would // be the asm.js function in an asm.js world. This class emits the rest of the // "glue" around that. class Wasm2JSGlue { public: Wasm2JSGlue(Module& wasm, Output& out, Wasm2JSBuilder::Flags flags, Name moduleName) : wasm(wasm), out(out), flags(flags), moduleName(moduleName) {} void emitPre(); void emitPost(); private: Module& wasm; Output& out; Wasm2JSBuilder::Flags flags; Name moduleName; void emitPreEmscripten(); void emitPreES6(); void emitPostEmscripten(); void emitPostES6(); void emitMemory(); void emitSpecialSupport(); }; void Wasm2JSGlue::emitPre() { if (flags.emscripten) { emitPreEmscripten(); } else { emitPreES6(); } if (isTableExported(wasm)) { out << "function Table(ret) {\n"; if (wasm.tables[0]->initial == wasm.tables[0]->max) { out << " // grow method not included; table is not growable\n"; } else { out << " ret.grow = function(by) {\n" << " var old = this.length;\n" << " this.length = this.length + by;\n" << " return old;\n" << " };\n"; } out << " ret.set = function(i, func) {\n" << " this[i] = func;\n" << " };\n" << " ret.get = function(i) {\n" << " return this[i];\n" << " };\n" << " return ret;\n" << "}\n\n"; } emitMemory(); emitSpecialSupport(); } void Wasm2JSGlue::emitPreEmscripten() { out << "function instantiate(asmLibraryArg) {\n"; } void Wasm2JSGlue::emitPreES6() { std::unordered_map baseModuleMap; auto noteImport = [&](Name module, Name base) { // Right now codegen requires a flat namespace going into the module, // meaning we don't support importing the same name from multiple namespaces // yet. if (baseModuleMap.count(base) && baseModuleMap[base] != module) { Fatal() << "the name " << base << " cannot be imported from " << "two different modules yet"; } baseModuleMap[base] = module; out << "import { " << asmangle(base.str) << " } from '" << module.str << "';\n"; }; ImportInfo imports(wasm); ModuleUtils::iterImportedGlobals( wasm, [&](Global* import) { noteImport(import->module, import->base); }); ModuleUtils::iterImportedTables( wasm, [&](Table* import) { noteImport(import->module, import->base); }); ModuleUtils::iterImportedFunctions(wasm, [&](Function* import) { // The special helpers are emitted in the glue, see code and comments // below. if (ABI::wasm2js::isHelper(import->base)) { return; } noteImport(import->module, import->base); }); out << '\n'; } void Wasm2JSGlue::emitPost() { if (flags.emscripten) { emitPostEmscripten(); } else { emitPostES6(); } } void Wasm2JSGlue::emitPostEmscripten() { out << " return asmFunc(asmLibraryArg);\n}\n"; } void Wasm2JSGlue::emitPostES6() { // Create an initial `ArrayBuffer` and populate it with static data. // Currently we use base64 encoding to encode static data and we decode it at // instantiation time. // // Note that the translation here expects that the lower values of this memory // can be used for conversions, so make sure there's at least one page. if (wasm.memory.exists && wasm.memory.imported()) { out << "var mem" << moduleName.str << " = new ArrayBuffer(" << wasm.memory.initial.addr * Memory::kPageSize << ");\n"; } // Actually invoke the `asmFunc` generated function, passing in all global // values followed by all imports out << "var ret" << moduleName.str << " = " << moduleName.str << "("; out << " { abort: function() { throw new Error('abort'); }"; ModuleUtils::iterImportedFunctions(wasm, [&](Function* import) { // The special helpers are emitted in the glue, see code and comments // below. if (ABI::wasm2js::isHelper(import->base)) { return; } out << ",\n " << asmangle(import->base.str); }); ModuleUtils::iterImportedMemories(wasm, [&](Memory* import) { // The special helpers are emitted in the glue, see code and comments // below. if (ABI::wasm2js::isHelper(import->base)) { return; } out << ",\n " << asmangle(import->base.str) << ": { buffer : mem" << moduleName.str << " }"; }); ModuleUtils::iterImportedTables(wasm, [&](Table* import) { // The special helpers are emitted in the glue, see code and comments // below. if (ABI::wasm2js::isHelper(import->base)) { return; } out << ",\n " << asmangle(import->base.str); }); out << "\n });\n"; if (flags.allowAsserts) { return; } // And now that we have our returned instance, export all our functions // that are hanging off it. for (auto& exp : wasm.exports) { switch (exp->kind) { case ExternalKind::Function: case ExternalKind::Global: case ExternalKind::Memory: break; // Exported globals and function tables aren't supported yet default: continue; } std::ostringstream export_name; for (auto* ptr = exp->name.str; *ptr; ptr++) { if (*ptr == '-') { export_name << '_'; } else { export_name << *ptr; } } out << "export var " << asmangle(exp->name.str) << " = ret" << moduleName.str << "." << asmangle(exp->name.str) << ";\n"; } } void Wasm2JSGlue::emitMemory() { if (needsBufferView(wasm)) { // Create a helper bufferView to access the buffer if we need one. We use it // for creating memory segments if we have any (we may not if the segments // are shipped in a side .mem file, for example), and also in bulk memory // operations. // This will get assigned during `asmFunc` (and potentially re-assigned // during __wasm_memory_grow). // TODO: We should probably just share a single HEAPU8 var. out << " var bufferView;\n"; } // If there are no memory segments, we don't need to emit any support code for // segment creation. if ((!wasm.memory.exists) || wasm.memory.segments.empty()) { return; } // If we have passive memory segments, we need to store those. for (auto& seg : wasm.memory.segments) { if (seg.isPassive) { out << " var memorySegments = {};\n"; break; } } out << R"( var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; })"; if (wasm.features.hasBulkMemory()) { // Passive segments in bulk memory are initialized into new arrays that are // passed into here, and we need to return them. out << R"( return uint8Array;)"; } out << R"( } )"; for (Index i = 0; i < wasm.memory.segments.size(); i++) { auto& seg = wasm.memory.segments[i]; if (seg.isPassive) { // Fancy passive segments are decoded into typed arrays on the side, for // later copying. out << "memorySegments[" << i << "] = base64DecodeToExistingUint8Array(new Uint8Array(" << seg.data.size() << ")" << ", 0, \"" << base64Encode(seg.data) << "\");\n"; } } if (hasActiveSegments(wasm)) { auto globalOffset = [&](const Memory::Segment& segment) { if (auto* c = segment.offset->dynCast()) { return std::to_string(c->value.getInteger()); } if (auto* get = segment.offset->dynCast()) { auto internalName = get->name; auto importedName = wasm.getGlobal(internalName)->base; return std::string("imports[") + asmangle(importedName.str) + "]"; } Fatal() << "non-constant offsets aren't supported yet\n"; }; out << "function initActiveSegments(imports) {\n"; for (Index i = 0; i < wasm.memory.segments.size(); i++) { auto& seg = wasm.memory.segments[i]; if (!seg.isPassive) { // Plain active segments are decoded directly into the main memory. out << " base64DecodeToExistingUint8Array(bufferView, " << globalOffset(seg) << ", \"" << base64Encode(seg.data) << "\");\n"; } } out << "}\n"; } } void Wasm2JSGlue::emitSpecialSupport() { // The special support functions are emitted as part of the JS glue, if we // need them. bool need = false; ModuleUtils::iterImportedFunctions(wasm, [&](Function* import) { if (ABI::wasm2js::isHelper(import->base)) { need = true; } }); if (!need) { return; } // Scratch memory uses 3 indexes, each referring to 4 bytes. Indexes 0, 1 are // used for 64-bit operations, while 2 is for 32-bit. These operations need // separate indexes because we need to handle the case where the optimizer // reorders a 32-bit reinterpret in between a 64-bit's split-out parts. // That situation can occur because the 64-bit reinterpret was split up into // pieces early, in the 64-bit lowering pass, while the 32-bit reinterprets // are lowered only at the very end, and until then the optimizer sees wasm // reinterprets which have no side effects (but they will have the side effect // of altering scratch memory). That is, conceptual code like this: // // a = reinterpret_64(b) // x = reinterpret_32(y) // // turns into // // scratch_write(b) // a_low = scratch_read(0) // a_high = scratch_read(1) // x = reinterpret_32(y) // // (Note how the single wasm instruction for a 64-bit reinterpret turns into // multiple operations. We have to do such splitting, because in JS we will // have to have separate operations to receive each 32-bit chunk anyhow. A // *32*-bit reinterpret *could* be a single function, but given we have the // separate functions anyhow for the 64-bit case, it's more compact to reuse // those.) // At this point, the scratch_* functions look like they have side effects to // the optimizer (which is true, as they modify scratch memory), but the // reinterpret_32 is still a normal wasm instruction without side effects, so // the optimizer might do this: // // scratch_write(b) // a_low = scratch_read(0) // x = reinterpret_32(y) ;; this moved one line up // a_high = scratch_read(1) // // When we do lower the reinterpret_32 into JS, we get: // // scratch_write(b) // a_low = scratch_read(0) // scratch_write(y) // x = scratch_read() // a_high = scratch_read(1) // // The second write occurs before the first's values have been read, so they // interfere. // // There isn't a problem with reordering 32-bit reinterprets with each other // as each is lowered into a pair of write+read in JS (after the wasm // optimizer runs), so they are guaranteed to be adjacent (and a JS optimizer // that runs later will handle that ok since they are calls, which can always // have side effects). out << R"( var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); )"; ModuleUtils::iterImportedFunctions(wasm, [&](Function* import) { if (import->base == ABI::wasm2js::SCRATCH_STORE_I32) { out << R"( function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } )"; } else if (import->base == ABI::wasm2js::SCRATCH_LOAD_I32) { out << R"( function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } )"; } else if (import->base == ABI::wasm2js::SCRATCH_STORE_F32) { out << R"( function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } )"; } else if (import->base == ABI::wasm2js::SCRATCH_LOAD_F32) { out << R"( function wasm2js_scratch_load_f32() { return f32ScratchView[2]; } )"; } else if (import->base == ABI::wasm2js::SCRATCH_STORE_F64) { out << R"( function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } )"; } else if (import->base == ABI::wasm2js::SCRATCH_LOAD_F64) { out << R"( function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } )"; } else if (import->base == ABI::wasm2js::MEMORY_INIT) { out << R"( function wasm2js_memory_init(segment, dest, offset, size) { // TODO: traps on invalid things bufferView.set(memorySegments[segment].subarray(offset, offset + size), dest); } )"; } else if (import->base == ABI::wasm2js::MEMORY_FILL) { out << R"( function wasm2js_memory_fill(dest, value, size) { dest = dest >>> 0; size = size >>> 0; if (dest + size > bufferView.length) throw "trap: invalid memory.fill"; bufferView.fill(value, dest, dest + size); } )"; } else if (import->base == ABI::wasm2js::MEMORY_COPY) { out << R"( function wasm2js_memory_copy(dest, source, size) { // TODO: traps on invalid things bufferView.copyWithin(dest, source, source + size); } )"; } else if (import->base == ABI::wasm2js::DATA_DROP) { out << R"( function wasm2js_data_drop(segment) { // TODO: traps on invalid things memorySegments[segment] = new Uint8Array(0); } )"; } else if (import->base == ABI::wasm2js::ATOMIC_WAIT_I32) { out << R"( function wasm2js_atomic_wait_i32(ptr, expected, timeoutLow, timeoutHigh) { var timeout = Infinity; if (timeoutHigh >= 0) { // Convert from nanoseconds to milliseconds // Taken from convertI32PairToI53 in emscripten's library_int53.js timeout = ((timeoutLow >>> 0) / 1e6) + timeoutHigh * (4294967296 / 1e6); } var view = new Int32Array(bufferView.buffer); // TODO cache var result = Atomics.wait(view, ptr >> 2, expected, timeout); if (result == 'ok') return 0; if (result == 'not-equal') return 1; if (result == 'timed-out') return 2; throw 'bad result ' + result; } )"; } else if (import->base == ABI::wasm2js::ATOMIC_RMW_I64) { out << R"( function wasm2js_atomic_rmw_i64(op, bytes, offset, ptr, valueLow, valueHigh) { // TODO: support bytes=1, 2, 4 as well as 8. var view = new BigInt64Array(bufferView.buffer); // TODO cache ptr = (ptr + offset) >> 3; var value = BigInt(valueLow >>> 0) | (BigInt(valueHigh >>> 0) << BigInt(32)); var result; switch (op) { case 0: { // Add result = Atomics.add(view, ptr, value); break; } case 1: { // Sub result = Atomics.sub(view, ptr, value); break; } case 2: { // And result = Atomics.and(view, ptr, value); break; } case 3: { // Or result = Atomics.or(view, ptr, value); break; } case 4: { // Xor result = Atomics.xor(view, ptr, value); break; } case 5: { // Xchg result = Atomics.exchange(view, ptr, value); break; } default: throw 'bad op'; } var low = Number(result & BigInt(0xffffffff)) | 0; var high = Number((result >> BigInt(32)) & BigInt(0xffffffff)) | 0; stashedBits = high; return low; } )"; } else if (import->base == ABI::wasm2js::GET_STASHED_BITS) { out << R"( var stashedBits = 0; function wasm2js_get_stashed_bits() { return stashedBits; } )"; } }); out << '\n'; } } // namespace wasm #endif // wasm_wasm2js_h binaryen-version_108/test/000077500000000000000000000000001423707623100157245ustar00rootroot00000000000000binaryen-version_108/test/__init__.py000077500000000000000000000013051423707623100200370ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright 2015 WebAssembly Community Group participants # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Empty __init__.py file: Python treats the directory as containing a package. binaryen-version_108/test/atomics-unshared.wast000066400000000000000000000002021423707623100220640ustar00rootroot00000000000000(module (memory $0 1 1) (func $foo (drop (i32.atomic.rmw.cmpxchg (i32.const 0) (i32.const 0) (i32.const 0) )) ) ) binaryen-version_108/test/atomics-unshared.wast.from-wast000066400000000000000000000002511423707623100240060ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 1 1) (func $foo (drop (i32.atomic.rmw.cmpxchg (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) ) binaryen-version_108/test/atomics-unshared.wast.fromBinary000066400000000000000000000002521423707623100242000ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 1 1) (func $foo (drop (i32.atomic.rmw.cmpxchg (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) ) binaryen-version_108/test/atomics-unshared.wast.fromBinary.noDebugInfo000066400000000000000000000002501423707623100263740ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 1 1) (func $0 (drop (i32.atomic.rmw.cmpxchg (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) ) binaryen-version_108/test/atomics.wast000066400000000000000000000054021423707623100202640ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 (shared 23 256)) (func $atomic-loadstore (type $0) (local $0 i32) (local $1 i64) (drop (i32.atomic.load8_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load16_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load offset=4 (local.get $0) ) ) (drop (i64.atomic.load8_u (local.get $0) ) ) (drop (i64.atomic.load16_u (local.get $0) ) ) (drop (i64.atomic.load32_u (local.get $0) ) ) (drop (i64.atomic.load (local.get $0) ) ) (i32.atomic.store offset=4 align=4 (local.get $0) (local.get $0) ) (i32.atomic.store8 offset=4 align=1 (local.get $0) (local.get $0) ) (i32.atomic.store16 offset=4 (local.get $0) (local.get $0) ) (i64.atomic.store offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store8 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store16 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store32 offset=4 (local.get $0) (local.get $1) ) ) (func $atomic-rmw (type $0) (local $0 i32) (local $1 i64) (drop (i32.atomic.rmw.add offset=4 (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw8.add_u offset=4 (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw16.and_u align=2 (local.get $0) (local.get $0) ) ) (drop (i64.atomic.rmw32.or_u (local.get $0) (local.get $1) ) ) (drop (i32.atomic.rmw8.xchg_u align=1 (local.get $0) (local.get $0) ) ) ) (func $atomic-cmpxchg (type $0) (local $0 i32) (local $1 i64) (drop (i32.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (local.get $0) (local.get $0) (local.get $0) ) ) (drop (i64.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (i64.atomic.rmw32.cmpxchg_u align=4 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-wait-notify (type $0) (local $0 i32) (local $1 i64) (drop (memory.atomic.wait32 (local.get $0) (local.get $0) (local.get $1) ) ) (drop (memory.atomic.wait32 offset=4 align=4 (local.get $0) (local.get $0) (local.get $1) ) ) (drop (memory.atomic.notify (local.get $0) (local.get $0) ) ) (drop (memory.atomic.notify offset=24 align=4 (local.get $0) (local.get $0) ) ) (drop (memory.atomic.wait64 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (memory.atomic.wait64 align=8 offset=16 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-fence (type $0) (atomic.fence) ) ) binaryen-version_108/test/atomics.wast.from-wast000066400000000000000000000052201423707623100222000ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 (shared 23 256)) (func $atomic-loadstore (local $0 i32) (local $1 i64) (drop (i32.atomic.load8_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load16_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load offset=4 (local.get $0) ) ) (drop (i64.atomic.load8_u (local.get $0) ) ) (drop (i64.atomic.load16_u (local.get $0) ) ) (drop (i64.atomic.load32_u (local.get $0) ) ) (drop (i64.atomic.load (local.get $0) ) ) (i32.atomic.store offset=4 (local.get $0) (local.get $0) ) (i32.atomic.store8 offset=4 (local.get $0) (local.get $0) ) (i32.atomic.store16 offset=4 (local.get $0) (local.get $0) ) (i64.atomic.store offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store8 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store16 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store32 offset=4 (local.get $0) (local.get $1) ) ) (func $atomic-rmw (local $0 i32) (local $1 i64) (drop (i32.atomic.rmw.add offset=4 (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw8.add_u offset=4 (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw16.and_u (local.get $0) (local.get $0) ) ) (drop (i64.atomic.rmw32.or_u (local.get $0) (local.get $1) ) ) (drop (i32.atomic.rmw8.xchg_u (local.get $0) (local.get $0) ) ) ) (func $atomic-cmpxchg (local $0 i32) (local $1 i64) (drop (i32.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (local.get $0) (local.get $0) (local.get $0) ) ) (drop (i64.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (i64.atomic.rmw32.cmpxchg_u (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-wait-notify (local $0 i32) (local $1 i64) (drop (memory.atomic.wait32 (local.get $0) (local.get $0) (local.get $1) ) ) (drop (memory.atomic.wait32 offset=4 (local.get $0) (local.get $0) (local.get $1) ) ) (drop (memory.atomic.notify (local.get $0) (local.get $0) ) ) (drop (memory.atomic.notify offset=24 (local.get $0) (local.get $0) ) ) (drop (memory.atomic.wait64 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (memory.atomic.wait64 offset=16 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-fence (atomic.fence) ) ) binaryen-version_108/test/atomics.wast.fromBinary000066400000000000000000000052211423707623100223720ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 (shared 23 256)) (func $atomic-loadstore (local $0 i32) (local $1 i64) (drop (i32.atomic.load8_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load16_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load offset=4 (local.get $0) ) ) (drop (i64.atomic.load8_u (local.get $0) ) ) (drop (i64.atomic.load16_u (local.get $0) ) ) (drop (i64.atomic.load32_u (local.get $0) ) ) (drop (i64.atomic.load (local.get $0) ) ) (i32.atomic.store offset=4 (local.get $0) (local.get $0) ) (i32.atomic.store8 offset=4 (local.get $0) (local.get $0) ) (i32.atomic.store16 offset=4 (local.get $0) (local.get $0) ) (i64.atomic.store offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store8 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store16 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store32 offset=4 (local.get $0) (local.get $1) ) ) (func $atomic-rmw (local $0 i32) (local $1 i64) (drop (i32.atomic.rmw.add offset=4 (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw8.add_u offset=4 (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw16.and_u (local.get $0) (local.get $0) ) ) (drop (i64.atomic.rmw32.or_u (local.get $0) (local.get $1) ) ) (drop (i32.atomic.rmw8.xchg_u (local.get $0) (local.get $0) ) ) ) (func $atomic-cmpxchg (local $0 i32) (local $1 i64) (drop (i32.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (local.get $0) (local.get $0) (local.get $0) ) ) (drop (i64.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (i64.atomic.rmw32.cmpxchg_u (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-wait-notify (local $0 i32) (local $1 i64) (drop (memory.atomic.wait32 (local.get $0) (local.get $0) (local.get $1) ) ) (drop (memory.atomic.wait32 offset=4 (local.get $0) (local.get $0) (local.get $1) ) ) (drop (memory.atomic.notify (local.get $0) (local.get $0) ) ) (drop (memory.atomic.notify offset=24 (local.get $0) (local.get $0) ) ) (drop (memory.atomic.wait64 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (memory.atomic.wait64 offset=16 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-fence (atomic.fence) ) ) binaryen-version_108/test/atomics.wast.fromBinary.noDebugInfo000066400000000000000000000051331423707623100245720ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 (shared 23 256)) (func $0 (local $0 i32) (local $1 i64) (drop (i32.atomic.load8_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load16_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load offset=4 (local.get $0) ) ) (drop (i64.atomic.load8_u (local.get $0) ) ) (drop (i64.atomic.load16_u (local.get $0) ) ) (drop (i64.atomic.load32_u (local.get $0) ) ) (drop (i64.atomic.load (local.get $0) ) ) (i32.atomic.store offset=4 (local.get $0) (local.get $0) ) (i32.atomic.store8 offset=4 (local.get $0) (local.get $0) ) (i32.atomic.store16 offset=4 (local.get $0) (local.get $0) ) (i64.atomic.store offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store8 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store16 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store32 offset=4 (local.get $0) (local.get $1) ) ) (func $1 (local $0 i32) (local $1 i64) (drop (i32.atomic.rmw.add offset=4 (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw8.add_u offset=4 (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw16.and_u (local.get $0) (local.get $0) ) ) (drop (i64.atomic.rmw32.or_u (local.get $0) (local.get $1) ) ) (drop (i32.atomic.rmw8.xchg_u (local.get $0) (local.get $0) ) ) ) (func $2 (local $0 i32) (local $1 i64) (drop (i32.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $0) (local.get $0) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (local.get $0) (local.get $0) (local.get $0) ) ) (drop (i64.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (i64.atomic.rmw32.cmpxchg_u (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $3 (local $0 i32) (local $1 i64) (drop (memory.atomic.wait32 (local.get $0) (local.get $0) (local.get $1) ) ) (drop (memory.atomic.wait32 offset=4 (local.get $0) (local.get $0) (local.get $1) ) ) (drop (memory.atomic.notify (local.get $0) (local.get $0) ) ) (drop (memory.atomic.notify offset=24 (local.get $0) (local.get $0) ) ) (drop (memory.atomic.wait64 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (memory.atomic.wait64 offset=16 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $4 (atomic.fence) ) ) binaryen-version_108/test/atomics64.wast000066400000000000000000000055121423707623100204400ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 (shared i64 23 256)) (func $atomic-loadstore (type $0) (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.load8_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load16_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load offset=4 (local.get $0) ) ) (drop (i64.atomic.load8_u (local.get $0) ) ) (drop (i64.atomic.load16_u (local.get $0) ) ) (drop (i64.atomic.load32_u (local.get $0) ) ) (drop (i64.atomic.load (local.get $0) ) ) (i32.atomic.store offset=4 align=4 (local.get $0) (local.get $2) ) (i32.atomic.store8 offset=4 align=1 (local.get $0) (local.get $2) ) (i32.atomic.store16 offset=4 (local.get $0) (local.get $2) ) (i64.atomic.store offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store8 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store16 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store32 offset=4 (local.get $0) (local.get $1) ) ) (func $atomic-rmw (type $0) (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.rmw.add offset=4 (local.get $0) (local.get $2) ) ) (drop (i32.atomic.rmw8.add_u offset=4 (local.get $0) (local.get $2) ) ) (drop (i32.atomic.rmw16.and_u align=2 (local.get $0) (local.get $2) ) ) (drop (i64.atomic.rmw32.or_u (local.get $0) (local.get $1) ) ) (drop (i32.atomic.rmw8.xchg_u align=1 (local.get $0) (local.get $2) ) ) ) (func $atomic-cmpxchg (type $0) (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $2) (local.get $2) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (local.get $0) (local.get $2) (local.get $2) ) ) (drop (i64.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (i64.atomic.rmw32.cmpxchg_u align=4 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-wait-notify (type $0) (local $0 i64) (local $1 i64) (local $2 i32) (drop (memory.atomic.wait32 (local.get $0) (local.get $2) (local.get $1) ) ) (drop (memory.atomic.wait32 offset=4 align=4 (local.get $0) (local.get $2) (local.get $1) ) ) (drop (memory.atomic.notify (local.get $0) (local.get $2) ) ) (drop (memory.atomic.notify offset=24 align=4 (local.get $0) (local.get $2) ) ) (drop (memory.atomic.wait64 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (memory.atomic.wait64 align=8 offset=16 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-fence (type $0) (atomic.fence) ) ) binaryen-version_108/test/atomics64.wast.from-wast000066400000000000000000000053301423707623100223540ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 (shared i64 23 256)) (func $atomic-loadstore (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.load8_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load16_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load offset=4 (local.get $0) ) ) (drop (i64.atomic.load8_u (local.get $0) ) ) (drop (i64.atomic.load16_u (local.get $0) ) ) (drop (i64.atomic.load32_u (local.get $0) ) ) (drop (i64.atomic.load (local.get $0) ) ) (i32.atomic.store offset=4 (local.get $0) (local.get $2) ) (i32.atomic.store8 offset=4 (local.get $0) (local.get $2) ) (i32.atomic.store16 offset=4 (local.get $0) (local.get $2) ) (i64.atomic.store offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store8 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store16 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store32 offset=4 (local.get $0) (local.get $1) ) ) (func $atomic-rmw (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.rmw.add offset=4 (local.get $0) (local.get $2) ) ) (drop (i32.atomic.rmw8.add_u offset=4 (local.get $0) (local.get $2) ) ) (drop (i32.atomic.rmw16.and_u (local.get $0) (local.get $2) ) ) (drop (i64.atomic.rmw32.or_u (local.get $0) (local.get $1) ) ) (drop (i32.atomic.rmw8.xchg_u (local.get $0) (local.get $2) ) ) ) (func $atomic-cmpxchg (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $2) (local.get $2) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (local.get $0) (local.get $2) (local.get $2) ) ) (drop (i64.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (i64.atomic.rmw32.cmpxchg_u (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-wait-notify (local $0 i64) (local $1 i64) (local $2 i32) (drop (memory.atomic.wait32 (local.get $0) (local.get $2) (local.get $1) ) ) (drop (memory.atomic.wait32 offset=4 (local.get $0) (local.get $2) (local.get $1) ) ) (drop (memory.atomic.notify (local.get $0) (local.get $2) ) ) (drop (memory.atomic.notify offset=24 (local.get $0) (local.get $2) ) ) (drop (memory.atomic.wait64 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (memory.atomic.wait64 offset=16 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-fence (atomic.fence) ) ) binaryen-version_108/test/atomics64.wast.fromBinary000066400000000000000000000053311423707623100225460ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 (shared i64 23 256)) (func $atomic-loadstore (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.load8_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load16_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load offset=4 (local.get $0) ) ) (drop (i64.atomic.load8_u (local.get $0) ) ) (drop (i64.atomic.load16_u (local.get $0) ) ) (drop (i64.atomic.load32_u (local.get $0) ) ) (drop (i64.atomic.load (local.get $0) ) ) (i32.atomic.store offset=4 (local.get $0) (local.get $2) ) (i32.atomic.store8 offset=4 (local.get $0) (local.get $2) ) (i32.atomic.store16 offset=4 (local.get $0) (local.get $2) ) (i64.atomic.store offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store8 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store16 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store32 offset=4 (local.get $0) (local.get $1) ) ) (func $atomic-rmw (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.rmw.add offset=4 (local.get $0) (local.get $2) ) ) (drop (i32.atomic.rmw8.add_u offset=4 (local.get $0) (local.get $2) ) ) (drop (i32.atomic.rmw16.and_u (local.get $0) (local.get $2) ) ) (drop (i64.atomic.rmw32.or_u (local.get $0) (local.get $1) ) ) (drop (i32.atomic.rmw8.xchg_u (local.get $0) (local.get $2) ) ) ) (func $atomic-cmpxchg (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $2) (local.get $2) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (local.get $0) (local.get $2) (local.get $2) ) ) (drop (i64.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (i64.atomic.rmw32.cmpxchg_u (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-wait-notify (local $0 i64) (local $1 i64) (local $2 i32) (drop (memory.atomic.wait32 (local.get $0) (local.get $2) (local.get $1) ) ) (drop (memory.atomic.wait32 offset=4 (local.get $0) (local.get $2) (local.get $1) ) ) (drop (memory.atomic.notify (local.get $0) (local.get $2) ) ) (drop (memory.atomic.notify offset=24 (local.get $0) (local.get $2) ) ) (drop (memory.atomic.wait64 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (memory.atomic.wait64 offset=16 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $atomic-fence (atomic.fence) ) ) binaryen-version_108/test/atomics64.wast.fromBinary.noDebugInfo000066400000000000000000000052431423707623100247460ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 (shared i64 23 256)) (func $0 (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.load8_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load16_u offset=4 (local.get $0) ) ) (drop (i32.atomic.load offset=4 (local.get $0) ) ) (drop (i64.atomic.load8_u (local.get $0) ) ) (drop (i64.atomic.load16_u (local.get $0) ) ) (drop (i64.atomic.load32_u (local.get $0) ) ) (drop (i64.atomic.load (local.get $0) ) ) (i32.atomic.store offset=4 (local.get $0) (local.get $2) ) (i32.atomic.store8 offset=4 (local.get $0) (local.get $2) ) (i32.atomic.store16 offset=4 (local.get $0) (local.get $2) ) (i64.atomic.store offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store8 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store16 offset=4 (local.get $0) (local.get $1) ) (i64.atomic.store32 offset=4 (local.get $0) (local.get $1) ) ) (func $1 (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.rmw.add offset=4 (local.get $0) (local.get $2) ) ) (drop (i32.atomic.rmw8.add_u offset=4 (local.get $0) (local.get $2) ) ) (drop (i32.atomic.rmw16.and_u (local.get $0) (local.get $2) ) ) (drop (i64.atomic.rmw32.or_u (local.get $0) (local.get $1) ) ) (drop (i32.atomic.rmw8.xchg_u (local.get $0) (local.get $2) ) ) ) (func $2 (local $0 i64) (local $1 i64) (local $2 i32) (drop (i32.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $2) (local.get $2) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (local.get $0) (local.get $2) (local.get $2) ) ) (drop (i64.atomic.rmw.cmpxchg offset=4 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (i64.atomic.rmw32.cmpxchg_u (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $3 (local $0 i64) (local $1 i64) (local $2 i32) (drop (memory.atomic.wait32 (local.get $0) (local.get $2) (local.get $1) ) ) (drop (memory.atomic.wait32 offset=4 (local.get $0) (local.get $2) (local.get $1) ) ) (drop (memory.atomic.notify (local.get $0) (local.get $2) ) ) (drop (memory.atomic.notify offset=24 (local.get $0) (local.get $2) ) ) (drop (memory.atomic.wait64 (local.get $0) (local.get $1) (local.get $1) ) ) (drop (memory.atomic.wait64 offset=16 (local.get $0) (local.get $1) (local.get $1) ) ) ) (func $4 (atomic.fence) ) ) binaryen-version_108/test/bigswitch.cpp000066400000000000000000014420751423707623100204300ustar00rootroot00000000000000#include "SDL/SDL_opengl.h" #include #include #include // clang-format off const char *WWWGLEnumToString(GLenum e) { switch(e) { case 0x0000 /* GL_POINTS */: return "GL_POINTS (0x0000)"; case 0x00000001 /* GL_CURRENT_BIT */: return "GL_LINES/GL_CURRENT_BIT/GL_CLIENT_PIXEL_STORE_BIT (0x00000001)"; case 0x0002 /* GL_LINE_LOOP */: return "GL_LINE_LOOP/GL_POINT_BIT/GL_CLIENT_VERTEX_ARRAY_BIT (0x0002)"; case 0x0003 /* GL_LINE_STRIP */: return "GL_LINE_STRIP (0x0003)"; case 0x00000004 /* GL_LINE_BIT */: return "GL_TRIANGLES/GL_LINE_BIT (0x00000004)"; case 0x0005 /* GL_TRIANGLE_STRIP */: return "GL_TRIANGLE_STRIP (0x0005)"; case 0x0006 /* GL_TRIANGLE_FAN */: return "GL_TRIANGLE_FAN (0x0006)"; case 0x0007 /* GL_QUADS */: return "GL_QUADS (0x0007)"; case 0x0008 /* GL_QUAD_STRIP */: return "GL_QUAD_STRIP/GL_POLYGON_BIT (0x0008)"; case 0x0009 /* GL_POLYGON */: return "GL_POLYGON (0x0009)"; case 0x00000010 /* GL_POLYGON_STIPPLE_BIT */: return "GL_POLYGON_STIPPLE_BIT (0x00000010)"; case 0x00000020 /* GL_PIXEL_MODE_BIT */: return "GL_PIXEL_MODE_BIT (0x00000020)"; case 0x00000040 /* GL_LIGHTING_BIT */: return "GL_LIGHTING_BIT (0x00000040)"; case 0x00000080 /* GL_FOG_BIT */: return "GL_FOG_BIT (0x00000080)"; case 0x00000100 /* GL_DEPTH_BUFFER_BIT */: return "GL_DEPTH_BUFFER_BIT/GL_ACCUM (0x00000100)"; case 0x0101 /* GL_LOAD */: return "GL_LOAD (0x0101)"; case 0x0102 /* GL_RETURN */: return "GL_RETURN (0x0102)"; case 0x0103 /* GL_MULT */: return "GL_MULT (0x0103)"; case 0x0104 /* GL_ADD */: return "GL_ADD (0x0104)"; case 0x0200 /* GL_NEVER */: return "GL_NEVER/GL_ACCUM_BUFFER_BIT (0x0200)"; case 0x0201 /* GL_LESS */: return "GL_LESS (0x0201)"; case 0x0202 /* GL_EQUAL */: return "GL_EQUAL (0x0202)"; case 0x0203 /* GL_LEQUAL */: return "GL_LEQUAL (0x0203)"; case 0x0204 /* GL_GREATER */: return "GL_GREATER (0x0204)"; case 0x0205 /* GL_NOTEQUAL */: return "GL_NOTEQUAL (0x0205)"; case 0x0206 /* GL_GEQUAL */: return "GL_GEQUAL (0x0206)"; case 0x0207 /* GL_ALWAYS */: return "GL_ALWAYS (0x0207)"; case 0x0300 /* GL_SRC_COLOR */: return "GL_SRC_COLOR (0x0300)"; case 0x0301 /* GL_ONE_MINUS_SRC_COLOR */: return "GL_ONE_MINUS_SRC_COLOR (0x0301)"; case 0x0302 /* GL_SRC_ALPHA */: return "GL_SRC_ALPHA (0x0302)"; case 0x0303 /* GL_ONE_MINUS_SRC_ALPHA */: return "GL_ONE_MINUS_SRC_ALPHA (0x0303)"; case 0x0304 /* GL_DST_ALPHA */: return "GL_DST_ALPHA (0x0304)"; case 0x0305 /* GL_ONE_MINUS_DST_ALPHA */: return "GL_ONE_MINUS_DST_ALPHA (0x0305)"; case 0x0306 /* GL_DST_COLOR */: return "GL_DST_COLOR (0x0306)"; case 0x0307 /* GL_ONE_MINUS_DST_COLOR */: return "GL_ONE_MINUS_DST_COLOR (0x0307)"; case 0x0308 /* GL_SRC_ALPHA_SATURATE */: return "GL_SRC_ALPHA_SATURATE (0x0308)"; case 0x00000400 /* GL_STENCIL_BUFFER_BIT */: return "GL_STENCIL_BUFFER_BIT/GL_FRONT_LEFT (0x00000400)"; case 0x0401 /* GL_FRONT_RIGHT */: return "GL_FRONT_RIGHT (0x0401)"; case 0x0402 /* GL_BACK_LEFT */: return "GL_BACK_LEFT (0x0402)"; case 0x0403 /* GL_BACK_RIGHT */: return "GL_BACK_RIGHT (0x0403)"; case 0x0404 /* GL_FRONT */: return "GL_FRONT (0x0404)"; case 0x0405 /* GL_BACK */: return "GL_BACK (0x0405)"; case 0x0406 /* GL_LEFT */: return "GL_LEFT (0x0406)"; case 0x0407 /* GL_RIGHT */: return "GL_RIGHT (0x0407)"; case 0x0408 /* GL_FRONT_AND_BACK */: return "GL_FRONT_AND_BACK (0x0408)"; case 0x0409 /* GL_AUX0 */: return "GL_AUX0 (0x0409)"; case 0x040A /* GL_AUX1 */: return "GL_AUX1 (0x040A)"; case 0x040B /* GL_AUX2 */: return "GL_AUX2 (0x040B)"; case 0x040C /* GL_AUX3 */: return "GL_AUX3 (0x040C)"; case 0x0500 /* GL_INVALID_ENUM */: return "GL_INVALID_ENUM (0x0500)"; case 0x0501 /* GL_INVALID_VALUE */: return "GL_INVALID_VALUE (0x0501)"; case 0x0502 /* GL_INVALID_OPERATION */: return "GL_INVALID_OPERATION (0x0502)"; case 0x0503 /* GL_STACK_OVERFLOW */: return "GL_STACK_OVERFLOW (0x0503)"; case 0x0504 /* GL_STACK_UNDERFLOW */: return "GL_STACK_UNDERFLOW (0x0504)"; case 0x0505 /* GL_OUT_OF_MEMORY */: return "GL_OUT_OF_MEMORY (0x0505)"; case 0x0600 /* GL_2D */: return "GL_2D (0x0600)"; case 0x0601 /* GL_3D */: return "GL_3D (0x0601)"; case 0x0602 /* GL_3D_COLOR */: return "GL_3D_COLOR (0x0602)"; case 0x0603 /* GL_3D_COLOR_TEXTURE */: return "GL_3D_COLOR_TEXTURE (0x0603)"; case 0x0604 /* GL_4D_COLOR_TEXTURE */: return "GL_4D_COLOR_TEXTURE (0x0604)"; case 0x0700 /* GL_PASS_THROUGH_TOKEN */: return "GL_PASS_THROUGH_TOKEN (0x0700)"; case 0x0701 /* GL_POINT_TOKEN */: return "GL_POINT_TOKEN (0x0701)"; case 0x0702 /* GL_LINE_TOKEN */: return "GL_LINE_TOKEN (0x0702)"; case 0x0703 /* GL_POLYGON_TOKEN */: return "GL_POLYGON_TOKEN (0x0703)"; case 0x0704 /* GL_BITMAP_TOKEN */: return "GL_BITMAP_TOKEN (0x0704)"; case 0x0705 /* GL_DRAW_PIXEL_TOKEN */: return "GL_DRAW_PIXEL_TOKEN (0x0705)"; case 0x0706 /* GL_COPY_PIXEL_TOKEN */: return "GL_COPY_PIXEL_TOKEN (0x0706)"; case 0x0707 /* GL_LINE_RESET_TOKEN */: return "GL_LINE_RESET_TOKEN (0x0707)"; case 0x0800 /* GL_EXP */: return "GL_EXP/GL_VIEWPORT_BIT (0x0800)"; case 0x0801 /* GL_EXP2 */: return "GL_EXP2 (0x0801)"; case 0x0900 /* GL_CW */: return "GL_CW (0x0900)"; case 0x0901 /* GL_CCW */: return "GL_CCW (0x0901)"; case 0x0A00 /* GL_COEFF */: return "GL_COEFF (0x0A00)"; case 0x0A01 /* GL_ORDER */: return "GL_ORDER (0x0A01)"; case 0x0A02 /* GL_DOMAIN */: return "GL_DOMAIN (0x0A02)"; case 0x0B00 /* GL_CURRENT_COLOR */: return "GL_CURRENT_COLOR (0x0B00)"; case 0x0B01 /* GL_CURRENT_INDEX */: return "GL_CURRENT_INDEX (0x0B01)"; case 0x0B02 /* GL_CURRENT_NORMAL */: return "GL_CURRENT_NORMAL (0x0B02)"; case 0x0B03 /* GL_CURRENT_TEXTURE_COORDS */: return "GL_CURRENT_TEXTURE_COORDS (0x0B03)"; case 0x0B04 /* GL_CURRENT_RASTER_COLOR */: return "GL_CURRENT_RASTER_COLOR (0x0B04)"; case 0x0B05 /* GL_CURRENT_RASTER_INDEX */: return "GL_CURRENT_RASTER_INDEX (0x0B05)"; case 0x0B06 /* GL_CURRENT_RASTER_TEXTURE_COORDS */: return "GL_CURRENT_RASTER_TEXTURE_COORDS (0x0B06)"; case 0x0B07 /* GL_CURRENT_RASTER_POSITION */: return "GL_CURRENT_RASTER_POSITION (0x0B07)"; case 0x0B08 /* GL_CURRENT_RASTER_POSITION_VALID */: return "GL_CURRENT_RASTER_POSITION_VALID (0x0B08)"; case 0x0B09 /* GL_CURRENT_RASTER_DISTANCE */: return "GL_CURRENT_RASTER_DISTANCE (0x0B09)"; case 0x0B10 /* GL_POINT_SMOOTH */: return "GL_POINT_SMOOTH (0x0B10)"; case 0x0B11 /* GL_POINT_SIZE */: return "GL_POINT_SIZE (0x0B11)"; case 0x0B20 /* GL_LINE_SMOOTH */: return "GL_LINE_SMOOTH (0x0B20)"; case 0x0B21 /* GL_LINE_WIDTH */: return "GL_LINE_WIDTH (0x0B21)"; case 0x0B24 /* GL_LINE_STIPPLE */: return "GL_LINE_STIPPLE (0x0B24)"; case 0x0B25 /* GL_LINE_STIPPLE_PATTERN */: return "GL_LINE_STIPPLE_PATTERN (0x0B25)"; case 0x0B26 /* GL_LINE_STIPPLE_REPEAT */: return "GL_LINE_STIPPLE_REPEAT (0x0B26)"; case 0x0B30 /* GL_LIST_MODE */: return "GL_LIST_MODE (0x0B30)"; case 0x0B31 /* GL_MAX_LIST_NESTING */: return "GL_MAX_LIST_NESTING (0x0B31)"; case 0x0B32 /* GL_LIST_BASE */: return "GL_LIST_BASE (0x0B32)"; case 0x0B33 /* GL_LIST_INDEX */: return "GL_LIST_INDEX (0x0B33)"; case 0x0B40 /* GL_POLYGON_MODE */: return "GL_POLYGON_MODE (0x0B40)"; case 0x0B41 /* GL_POLYGON_SMOOTH */: return "GL_POLYGON_SMOOTH (0x0B41)"; case 0x0B42 /* GL_POLYGON_STIPPLE */: return "GL_POLYGON_STIPPLE (0x0B42)"; case 0x0B43 /* GL_EDGE_FLAG */: return "GL_EDGE_FLAG (0x0B43)"; case 0x0B44 /* GL_CULL_FACE */: return "GL_CULL_FACE (0x0B44)"; case 0x0B45 /* GL_CULL_FACE_MODE */: return "GL_CULL_FACE_MODE (0x0B45)"; case 0x0B46 /* GL_FRONT_FACE */: return "GL_FRONT_FACE (0x0B46)"; case 0x0B50 /* GL_LIGHTING */: return "GL_LIGHTING (0x0B50)"; case 0x0B51 /* GL_LIGHT_MODEL_LOCAL_VIEWER */: return "GL_LIGHT_MODEL_LOCAL_VIEWER (0x0B51)"; case 0x0B52 /* GL_LIGHT_MODEL_TWO_SIDE */: return "GL_LIGHT_MODEL_TWO_SIDE (0x0B52)"; case 0x0B53 /* GL_LIGHT_MODEL_AMBIENT */: return "GL_LIGHT_MODEL_AMBIENT (0x0B53)"; case 0x0B54 /* GL_SHADE_MODEL */: return "GL_SHADE_MODEL (0x0B54)"; case 0x0B55 /* GL_COLOR_MATERIAL_FACE */: return "GL_COLOR_MATERIAL_FACE (0x0B55)"; case 0x0B56 /* GL_COLOR_MATERIAL_PARAMETER */: return "GL_COLOR_MATERIAL_PARAMETER (0x0B56)"; case 0x0B57 /* GL_COLOR_MATERIAL */: return "GL_COLOR_MATERIAL (0x0B57)"; case 0x0B60 /* GL_FOG */: return "GL_FOG (0x0B60)"; case 0x0B61 /* GL_FOG_INDEX */: return "GL_FOG_INDEX (0x0B61)"; case 0x0B62 /* GL_FOG_DENSITY */: return "GL_FOG_DENSITY (0x0B62)"; case 0x0B63 /* GL_FOG_START */: return "GL_FOG_START (0x0B63)"; case 0x0B64 /* GL_FOG_END */: return "GL_FOG_END (0x0B64)"; case 0x0B65 /* GL_FOG_MODE */: return "GL_FOG_MODE (0x0B65)"; case 0x0B66 /* GL_FOG_COLOR */: return "GL_FOG_COLOR (0x0B66)"; case 0x0B70 /* GL_DEPTH_RANGE */: return "GL_DEPTH_RANGE (0x0B70)"; case 0x0B71 /* GL_DEPTH_TEST */: return "GL_DEPTH_TEST (0x0B71)"; case 0x0B72 /* GL_DEPTH_WRITEMASK */: return "GL_DEPTH_WRITEMASK (0x0B72)"; case 0x0B73 /* GL_DEPTH_CLEAR_VALUE */: return "GL_DEPTH_CLEAR_VALUE (0x0B73)"; case 0x0B74 /* GL_DEPTH_FUNC */: return "GL_DEPTH_FUNC (0x0B74)"; case 0x0B80 /* GL_ACCUM_CLEAR_VALUE */: return "GL_ACCUM_CLEAR_VALUE (0x0B80)"; case 0x0B90 /* GL_STENCIL_TEST */: return "GL_STENCIL_TEST (0x0B90)"; case 0x0B91 /* GL_STENCIL_CLEAR_VALUE */: return "GL_STENCIL_CLEAR_VALUE (0x0B91)"; case 0x0B92 /* GL_STENCIL_FUNC */: return "GL_STENCIL_FUNC (0x0B92)"; case 0x0B93 /* GL_STENCIL_VALUE_MASK */: return "GL_STENCIL_VALUE_MASK (0x0B93)"; case 0x0B94 /* GL_STENCIL_FAIL */: return "GL_STENCIL_FAIL (0x0B94)"; case 0x0B95 /* GL_STENCIL_PASS_DEPTH_FAIL */: return "GL_STENCIL_PASS_DEPTH_FAIL (0x0B95)"; case 0x0B96 /* GL_STENCIL_PASS_DEPTH_PASS */: return "GL_STENCIL_PASS_DEPTH_PASS (0x0B96)"; case 0x0B97 /* GL_STENCIL_REF */: return "GL_STENCIL_REF (0x0B97)"; case 0x0B98 /* GL_STENCIL_WRITEMASK */: return "GL_STENCIL_WRITEMASK (0x0B98)"; case 0x0BA0 /* GL_MATRIX_MODE */: return "GL_MATRIX_MODE (0x0BA0)"; case 0x0BA1 /* GL_NORMALIZE */: return "GL_NORMALIZE (0x0BA1)"; case 0x0BA2 /* GL_VIEWPORT */: return "GL_VIEWPORT (0x0BA2)"; case 0x0BA3 /* GL_MODELVIEW_STACK_DEPTH */: return "GL_MODELVIEW_STACK_DEPTH (0x0BA3)"; case 0x0BA4 /* GL_PROJECTION_STACK_DEPTH */: return "GL_PROJECTION_STACK_DEPTH (0x0BA4)"; case 0x0BA5 /* GL_TEXTURE_STACK_DEPTH */: return "GL_TEXTURE_STACK_DEPTH (0x0BA5)"; case 0x0BA6 /* GL_MODELVIEW_MATRIX */: return "GL_MODELVIEW_MATRIX (0x0BA6)"; case 0x0BA7 /* GL_PROJECTION_MATRIX */: return "GL_PROJECTION_MATRIX (0x0BA7)"; case 0x0BA8 /* GL_TEXTURE_MATRIX */: return "GL_TEXTURE_MATRIX (0x0BA8)"; case 0x0BB0 /* GL_ATTRIB_STACK_DEPTH */: return "GL_ATTRIB_STACK_DEPTH (0x0BB0)"; case 0x0BB1 /* GL_CLIENT_ATTRIB_STACK_DEPTH */: return "GL_CLIENT_ATTRIB_STACK_DEPTH (0x0BB1)"; case 0x0BC0 /* GL_ALPHA_TEST */: return "GL_ALPHA_TEST (0x0BC0)"; case 0x0BC1 /* GL_ALPHA_TEST_FUNC */: return "GL_ALPHA_TEST_FUNC (0x0BC1)"; case 0x0BC2 /* GL_ALPHA_TEST_REF */: return "GL_ALPHA_TEST_REF (0x0BC2)"; case 0x0BD0 /* GL_DITHER */: return "GL_DITHER (0x0BD0)"; case 0x0BE0 /* GL_BLEND_DST */: return "GL_BLEND_DST (0x0BE0)"; case 0x0BE1 /* GL_BLEND_SRC */: return "GL_BLEND_SRC (0x0BE1)"; case 0x0BE2 /* GL_BLEND */: return "GL_BLEND (0x0BE2)"; case 0x0BF0 /* GL_LOGIC_OP_MODE */: return "GL_LOGIC_OP_MODE (0x0BF0)"; case 0x0BF1 /* GL_LOGIC_OP */: return "GL_LOGIC_OP/GL_INDEX_LOGIC_OP (0x0BF1)"; //case 0x0BF1 /* GL_INDEX_LOGIC_OP */: return "GL_INDEX_LOGIC_OP (0x0BF1)"; case 0x0BF2 /* GL_COLOR_LOGIC_OP */: return "GL_COLOR_LOGIC_OP (0x0BF2)"; case 0x0C00 /* GL_AUX_BUFFERS */: return "GL_AUX_BUFFERS (0x0C00)"; case 0x0C01 /* GL_DRAW_BUFFER */: return "GL_DRAW_BUFFER (0x0C01)"; case 0x0C02 /* GL_READ_BUFFER */: return "GL_READ_BUFFER (0x0C02)"; case 0x0C10 /* GL_SCISSOR_BOX */: return "GL_SCISSOR_BOX (0x0C10)"; case 0x0C11 /* GL_SCISSOR_TEST */: return "GL_SCISSOR_TEST (0x0C11)"; case 0x0C20 /* GL_INDEX_CLEAR_VALUE */: return "GL_INDEX_CLEAR_VALUE (0x0C20)"; case 0x0C21 /* GL_INDEX_WRITEMASK */: return "GL_INDEX_WRITEMASK (0x0C21)"; case 0x0C22 /* GL_COLOR_CLEAR_VALUE */: return "GL_COLOR_CLEAR_VALUE (0x0C22)"; case 0x0C23 /* GL_COLOR_WRITEMASK */: return "GL_COLOR_WRITEMASK (0x0C23)"; case 0x0C30 /* GL_INDEX_MODE */: return "GL_INDEX_MODE (0x0C30)"; case 0x0C31 /* GL_RGBA_MODE */: return "GL_RGBA_MODE (0x0C31)"; case 0x0C32 /* GL_DOUBLEBUFFER */: return "GL_DOUBLEBUFFER (0x0C32)"; case 0x0C33 /* GL_STEREO */: return "GL_STEREO (0x0C33)"; case 0x0C40 /* GL_RENDER_MODE */: return "GL_RENDER_MODE (0x0C40)"; case 0x0C50 /* GL_PERSPECTIVE_CORRECTION_HINT */: return "GL_PERSPECTIVE_CORRECTION_HINT (0x0C50)"; case 0x0C51 /* GL_POINT_SMOOTH_HINT */: return "GL_POINT_SMOOTH_HINT (0x0C51)"; case 0x0C52 /* GL_LINE_SMOOTH_HINT */: return "GL_LINE_SMOOTH_HINT (0x0C52)"; case 0x0C53 /* GL_POLYGON_SMOOTH_HINT */: return "GL_POLYGON_SMOOTH_HINT (0x0C53)"; case 0x0C54 /* GL_FOG_HINT */: return "GL_FOG_HINT (0x0C54)"; case 0x0C60 /* GL_TEXTURE_GEN_S */: return "GL_TEXTURE_GEN_S (0x0C60)"; case 0x0C61 /* GL_TEXTURE_GEN_T */: return "GL_TEXTURE_GEN_T (0x0C61)"; case 0x0C62 /* GL_TEXTURE_GEN_R */: return "GL_TEXTURE_GEN_R (0x0C62)"; case 0x0C63 /* GL_TEXTURE_GEN_Q */: return "GL_TEXTURE_GEN_Q (0x0C63)"; case 0x0C70 /* GL_PIXEL_MAP_I_TO_I */: return "GL_PIXEL_MAP_I_TO_I (0x0C70)"; case 0x0C71 /* GL_PIXEL_MAP_S_TO_S */: return "GL_PIXEL_MAP_S_TO_S (0x0C71)"; case 0x0C72 /* GL_PIXEL_MAP_I_TO_R */: return "GL_PIXEL_MAP_I_TO_R (0x0C72)"; case 0x0C73 /* GL_PIXEL_MAP_I_TO_G */: return "GL_PIXEL_MAP_I_TO_G (0x0C73)"; case 0x0C74 /* GL_PIXEL_MAP_I_TO_B */: return "GL_PIXEL_MAP_I_TO_B (0x0C74)"; case 0x0C75 /* GL_PIXEL_MAP_I_TO_A */: return "GL_PIXEL_MAP_I_TO_A (0x0C75)"; case 0x0C76 /* GL_PIXEL_MAP_R_TO_R */: return "GL_PIXEL_MAP_R_TO_R (0x0C76)"; case 0x0C77 /* GL_PIXEL_MAP_G_TO_G */: return "GL_PIXEL_MAP_G_TO_G (0x0C77)"; case 0x0C78 /* GL_PIXEL_MAP_B_TO_B */: return "GL_PIXEL_MAP_B_TO_B (0x0C78)"; case 0x0C79 /* GL_PIXEL_MAP_A_TO_A */: return "GL_PIXEL_MAP_A_TO_A (0x0C79)"; case 0x0CB0 /* GL_PIXEL_MAP_I_TO_I_SIZE */: return "GL_PIXEL_MAP_I_TO_I_SIZE (0x0CB0)"; case 0x0CB1 /* GL_PIXEL_MAP_S_TO_S_SIZE */: return "GL_PIXEL_MAP_S_TO_S_SIZE (0x0CB1)"; case 0x0CB2 /* GL_PIXEL_MAP_I_TO_R_SIZE */: return "GL_PIXEL_MAP_I_TO_R_SIZE (0x0CB2)"; case 0x0CB3 /* GL_PIXEL_MAP_I_TO_G_SIZE */: return "GL_PIXEL_MAP_I_TO_G_SIZE (0x0CB3)"; case 0x0CB4 /* GL_PIXEL_MAP_I_TO_B_SIZE */: return "GL_PIXEL_MAP_I_TO_B_SIZE (0x0CB4)"; case 0x0CB5 /* GL_PIXEL_MAP_I_TO_A_SIZE */: return "GL_PIXEL_MAP_I_TO_A_SIZE (0x0CB5)"; case 0x0CB6 /* GL_PIXEL_MAP_R_TO_R_SIZE */: return "GL_PIXEL_MAP_R_TO_R_SIZE (0x0CB6)"; case 0x0CB7 /* GL_PIXEL_MAP_G_TO_G_SIZE */: return "GL_PIXEL_MAP_G_TO_G_SIZE (0x0CB7)"; case 0x0CB8 /* GL_PIXEL_MAP_B_TO_B_SIZE */: return "GL_PIXEL_MAP_B_TO_B_SIZE (0x0CB8)"; case 0x0CB9 /* GL_PIXEL_MAP_A_TO_A_SIZE */: return "GL_PIXEL_MAP_A_TO_A_SIZE (0x0CB9)"; case 0x0CF0 /* GL_UNPACK_SWAP_BYTES */: return "GL_UNPACK_SWAP_BYTES (0x0CF0)"; case 0x0CF1 /* GL_UNPACK_LSB_FIRST */: return "GL_UNPACK_LSB_FIRST (0x0CF1)"; case 0x0CF2 /* GL_UNPACK_ROW_LENGTH */: return "GL_UNPACK_ROW_LENGTH (0x0CF2)"; case 0x0CF3 /* GL_UNPACK_SKIP_ROWS */: return "GL_UNPACK_SKIP_ROWS (0x0CF3)"; case 0x0CF4 /* GL_UNPACK_SKIP_PIXELS */: return "GL_UNPACK_SKIP_PIXELS (0x0CF4)"; case 0x0CF5 /* GL_UNPACK_ALIGNMENT */: return "GL_UNPACK_ALIGNMENT (0x0CF5)"; case 0x0D00 /* GL_PACK_SWAP_BYTES */: return "GL_PACK_SWAP_BYTES (0x0D00)"; case 0x0D01 /* GL_PACK_LSB_FIRST */: return "GL_PACK_LSB_FIRST (0x0D01)"; case 0x0D02 /* GL_PACK_ROW_LENGTH */: return "GL_PACK_ROW_LENGTH (0x0D02)"; case 0x0D03 /* GL_PACK_SKIP_ROWS */: return "GL_PACK_SKIP_ROWS (0x0D03)"; case 0x0D04 /* GL_PACK_SKIP_PIXELS */: return "GL_PACK_SKIP_PIXELS (0x0D04)"; case 0x0D05 /* GL_PACK_ALIGNMENT */: return "GL_PACK_ALIGNMENT (0x0D05)"; case 0x0D10 /* GL_MAP_COLOR */: return "GL_MAP_COLOR (0x0D10)"; case 0x0D11 /* GL_MAP_STENCIL */: return "GL_MAP_STENCIL (0x0D11)"; case 0x0D12 /* GL_INDEX_SHIFT */: return "GL_INDEX_SHIFT (0x0D12)"; case 0x0D13 /* GL_INDEX_OFFSET */: return "GL_INDEX_OFFSET (0x0D13)"; case 0x0D14 /* GL_RED_SCALE */: return "GL_RED_SCALE (0x0D14)"; case 0x0D15 /* GL_RED_BIAS */: return "GL_RED_BIAS (0x0D15)"; case 0x0D16 /* GL_ZOOM_X */: return "GL_ZOOM_X (0x0D16)"; case 0x0D17 /* GL_ZOOM_Y */: return "GL_ZOOM_Y (0x0D17)"; case 0x0D18 /* GL_GREEN_SCALE */: return "GL_GREEN_SCALE (0x0D18)"; case 0x0D19 /* GL_GREEN_BIAS */: return "GL_GREEN_BIAS (0x0D19)"; case 0x0D1A /* GL_BLUE_SCALE */: return "GL_BLUE_SCALE (0x0D1A)"; case 0x0D1B /* GL_BLUE_BIAS */: return "GL_BLUE_BIAS (0x0D1B)"; case 0x0D1C /* GL_ALPHA_SCALE */: return "GL_ALPHA_SCALE (0x0D1C)"; case 0x0D1D /* GL_ALPHA_BIAS */: return "GL_ALPHA_BIAS (0x0D1D)"; case 0x0D1E /* GL_DEPTH_SCALE */: return "GL_DEPTH_SCALE (0x0D1E)"; case 0x0D1F /* GL_DEPTH_BIAS */: return "GL_DEPTH_BIAS (0x0D1F)"; case 0x0D30 /* GL_MAX_EVAL_ORDER */: return "GL_MAX_EVAL_ORDER (0x0D30)"; case 0x0D31 /* GL_MAX_LIGHTS */: return "GL_MAX_LIGHTS (0x0D31)"; case 0x0D32 /* GL_MAX_CLIP_PLANES */: return "GL_MAX_CLIP_PLANES (0x0D32)"; case 0x0D33 /* GL_MAX_TEXTURE_SIZE */: return "GL_MAX_TEXTURE_SIZE (0x0D33)"; case 0x0D34 /* GL_MAX_PIXEL_MAP_TABLE */: return "GL_MAX_PIXEL_MAP_TABLE (0x0D34)"; case 0x0D35 /* GL_MAX_ATTRIB_STACK_DEPTH */: return "GL_MAX_ATTRIB_STACK_DEPTH (0x0D35)"; case 0x0D36 /* GL_MAX_MODELVIEW_STACK_DEPTH */: return "GL_MAX_MODELVIEW_STACK_DEPTH (0x0D36)"; case 0x0D37 /* GL_MAX_NAME_STACK_DEPTH */: return "GL_MAX_NAME_STACK_DEPTH (0x0D37)"; case 0x0D38 /* GL_MAX_PROJECTION_STACK_DEPTH */: return "GL_MAX_PROJECTION_STACK_DEPTH (0x0D38)"; case 0x0D39 /* GL_MAX_TEXTURE_STACK_DEPTH */: return "GL_MAX_TEXTURE_STACK_DEPTH (0x0D39)"; case 0x0D3A /* GL_MAX_VIEWPORT_DIMS */: return "GL_MAX_VIEWPORT_DIMS (0x0D3A)"; case 0x0D3B /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */: return "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH (0x0D3B)"; case 0x0D50 /* GL_SUBPIXEL_BITS */: return "GL_SUBPIXEL_BITS (0x0D50)"; case 0x0D51 /* GL_INDEX_BITS */: return "GL_INDEX_BITS (0x0D51)"; case 0x0D52 /* GL_RED_BITS */: return "GL_RED_BITS (0x0D52)"; case 0x0D53 /* GL_GREEN_BITS */: return "GL_GREEN_BITS (0x0D53)"; case 0x0D54 /* GL_BLUE_BITS */: return "GL_BLUE_BITS (0x0D54)"; case 0x0D55 /* GL_ALPHA_BITS */: return "GL_ALPHA_BITS (0x0D55)"; case 0x0D56 /* GL_DEPTH_BITS */: return "GL_DEPTH_BITS (0x0D56)"; case 0x0D57 /* GL_STENCIL_BITS */: return "GL_STENCIL_BITS (0x0D57)"; case 0x0D58 /* GL_ACCUM_RED_BITS */: return "GL_ACCUM_RED_BITS (0x0D58)"; case 0x0D59 /* GL_ACCUM_GREEN_BITS */: return "GL_ACCUM_GREEN_BITS (0x0D59)"; case 0x0D5A /* GL_ACCUM_BLUE_BITS */: return "GL_ACCUM_BLUE_BITS (0x0D5A)"; case 0x0D5B /* GL_ACCUM_ALPHA_BITS */: return "GL_ACCUM_ALPHA_BITS (0x0D5B)"; case 0x0D70 /* GL_NAME_STACK_DEPTH */: return "GL_NAME_STACK_DEPTH (0x0D70)"; case 0x0D80 /* GL_AUTO_NORMAL */: return "GL_AUTO_NORMAL (0x0D80)"; case 0x0D90 /* GL_MAP1_COLOR_4 */: return "GL_MAP1_COLOR_4 (0x0D90)"; case 0x0D91 /* GL_MAP1_INDEX */: return "GL_MAP1_INDEX (0x0D91)"; case 0x0D92 /* GL_MAP1_NORMAL */: return "GL_MAP1_NORMAL (0x0D92)"; case 0x0D93 /* GL_MAP1_TEXTURE_COORD_1 */: return "GL_MAP1_TEXTURE_COORD_1 (0x0D93)"; case 0x0D94 /* GL_MAP1_TEXTURE_COORD_2 */: return "GL_MAP1_TEXTURE_COORD_2 (0x0D94)"; case 0x0D95 /* GL_MAP1_TEXTURE_COORD_3 */: return "GL_MAP1_TEXTURE_COORD_3 (0x0D95)"; case 0x0D96 /* GL_MAP1_TEXTURE_COORD_4 */: return "GL_MAP1_TEXTURE_COORD_4 (0x0D96)"; case 0x0D97 /* GL_MAP1_VERTEX_3 */: return "GL_MAP1_VERTEX_3 (0x0D97)"; case 0x0D98 /* GL_MAP1_VERTEX_4 */: return "GL_MAP1_VERTEX_4 (0x0D98)"; case 0x0DB0 /* GL_MAP2_COLOR_4 */: return "GL_MAP2_COLOR_4 (0x0DB0)"; case 0x0DB1 /* GL_MAP2_INDEX */: return "GL_MAP2_INDEX (0x0DB1)"; case 0x0DB2 /* GL_MAP2_NORMAL */: return "GL_MAP2_NORMAL (0x0DB2)"; case 0x0DB3 /* GL_MAP2_TEXTURE_COORD_1 */: return "GL_MAP2_TEXTURE_COORD_1 (0x0DB3)"; case 0x0DB4 /* GL_MAP2_TEXTURE_COORD_2 */: return "GL_MAP2_TEXTURE_COORD_2 (0x0DB4)"; case 0x0DB5 /* GL_MAP2_TEXTURE_COORD_3 */: return "GL_MAP2_TEXTURE_COORD_3 (0x0DB5)"; case 0x0DB6 /* GL_MAP2_TEXTURE_COORD_4 */: return "GL_MAP2_TEXTURE_COORD_4 (0x0DB6)"; case 0x0DB7 /* GL_MAP2_VERTEX_3 */: return "GL_MAP2_VERTEX_3 (0x0DB7)"; case 0x0DB8 /* GL_MAP2_VERTEX_4 */: return "GL_MAP2_VERTEX_4 (0x0DB8)"; case 0x0DD0 /* GL_MAP1_GRID_DOMAIN */: return "GL_MAP1_GRID_DOMAIN (0x0DD0)"; case 0x0DD1 /* GL_MAP1_GRID_SEGMENTS */: return "GL_MAP1_GRID_SEGMENTS (0x0DD1)"; case 0x0DD2 /* GL_MAP2_GRID_DOMAIN */: return "GL_MAP2_GRID_DOMAIN (0x0DD2)"; case 0x0DD3 /* GL_MAP2_GRID_SEGMENTS */: return "GL_MAP2_GRID_SEGMENTS (0x0DD3)"; case 0x0DE0 /* GL_TEXTURE_1D */: return "GL_TEXTURE_1D (0x0DE0)"; case 0x0DE1 /* GL_TEXTURE_2D */: return "GL_TEXTURE_2D (0x0DE1)"; case 0x0DF0 /* GL_FEEDBACK_BUFFER_POINTER */: return "GL_FEEDBACK_BUFFER_POINTER (0x0DF0)"; case 0x0DF1 /* GL_FEEDBACK_BUFFER_SIZE */: return "GL_FEEDBACK_BUFFER_SIZE (0x0DF1)"; case 0x0DF2 /* GL_FEEDBACK_BUFFER_TYPE */: return "GL_FEEDBACK_BUFFER_TYPE (0x0DF2)"; case 0x0DF3 /* GL_SELECTION_BUFFER_POINTER */: return "GL_SELECTION_BUFFER_POINTER (0x0DF3)"; case 0x0DF4 /* GL_SELECTION_BUFFER_SIZE */: return "GL_SELECTION_BUFFER_SIZE (0x0DF4)"; case 0x1000 /* GL_TEXTURE_WIDTH */: return "GL_TEXTURE_WIDTH/GL_TRANSFORM_BIT (0x1000)"; case 0x1001 /* GL_TEXTURE_HEIGHT */: return "GL_TEXTURE_HEIGHT (0x1001)"; //case 0x1003 /* GL_TEXTURE_COMPONENTS */: return "GL_TEXTURE_COMPONENTS (0x1003)"; case 0x1003 /* GL_TEXTURE_INTERNAL_FORMAT */: return "GL_TEXTURE_INTERNAL_FORMAT/GL_TEXTURE_COMPONENTS (0x1003)"; case 0x1004 /* GL_TEXTURE_BORDER_COLOR */: return "GL_TEXTURE_BORDER_COLOR (0x1004)"; case 0x1005 /* GL_TEXTURE_BORDER */: return "GL_TEXTURE_BORDER (0x1005)"; case 0x1100 /* GL_DONT_CARE */: return "GL_DONT_CARE (0x1100)"; case 0x1101 /* GL_FASTEST */: return "GL_FASTEST (0x1101)"; case 0x1102 /* GL_NICEST */: return "GL_NICEST (0x1102)"; case 0x1200 /* GL_AMBIENT */: return "GL_AMBIENT (0x1200)"; case 0x1201 /* GL_DIFFUSE */: return "GL_DIFFUSE (0x1201)"; case 0x1202 /* GL_SPECULAR */: return "GL_SPECULAR (0x1202)"; case 0x1203 /* GL_POSITION */: return "GL_POSITION (0x1203)"; case 0x1204 /* GL_SPOT_DIRECTION */: return "GL_SPOT_DIRECTION (0x1204)"; case 0x1205 /* GL_SPOT_EXPONENT */: return "GL_SPOT_EXPONENT (0x1205)"; case 0x1206 /* GL_SPOT_CUTOFF */: return "GL_SPOT_CUTOFF (0x1206)"; case 0x1207 /* GL_CONSTANT_ATTENUATION */: return "GL_CONSTANT_ATTENUATION (0x1207)"; case 0x1208 /* GL_LINEAR_ATTENUATION */: return "GL_LINEAR_ATTENUATION (0x1208)"; case 0x1209 /* GL_QUADRATIC_ATTENUATION */: return "GL_QUADRATIC_ATTENUATION (0x1209)"; case 0x1300 /* GL_COMPILE */: return "GL_COMPILE (0x1300)"; case 0x1301 /* GL_COMPILE_AND_EXECUTE */: return "GL_COMPILE_AND_EXECUTE (0x1301)"; case 0x1400 /* GL_BYTE */: return "GL_BYTE (0x1400)"; case 0x1401 /* GL_UNSIGNED_BYTE */: return "GL_UNSIGNED_BYTE (0x1401)"; case 0x1402 /* GL_SHORT */: return "GL_SHORT (0x1402)"; case 0x1403 /* GL_UNSIGNED_SHORT */: return "GL_UNSIGNED_SHORT (0x1403)"; case 0x1404 /* GL_INT */: return "GL_INT (0x1404)"; case 0x1405 /* GL_UNSIGNED_INT */: return "GL_UNSIGNED_INT (0x1405)"; case 0x1406 /* GL_FLOAT */: return "GL_FLOAT (0x1406)"; case 0x1407 /* GL_2_BYTES */: return "GL_2_BYTES (0x1407)"; case 0x1408 /* GL_3_BYTES */: return "GL_3_BYTES (0x1408)"; case 0x1409 /* GL_4_BYTES */: return "GL_4_BYTES (0x1409)"; case 0x140A /* GL_DOUBLE */: return "GL_DOUBLE (0x140A)"; case 0x1500 /* GL_CLEAR */: return "GL_CLEAR (0x1500)"; case 0x1501 /* GL_AND */: return "GL_AND (0x1501)"; case 0x1502 /* GL_AND_REVERSE */: return "GL_AND_REVERSE (0x1502)"; case 0x1503 /* GL_COPY */: return "GL_COPY (0x1503)"; case 0x1504 /* GL_AND_INVERTED */: return "GL_AND_INVERTED (0x1504)"; case 0x1505 /* GL_NOOP */: return "GL_NOOP (0x1505)"; case 0x1506 /* GL_XOR */: return "GL_XOR (0x1506)"; case 0x1507 /* GL_OR */: return "GL_OR (0x1507)"; case 0x1508 /* GL_NOR */: return "GL_NOR (0x1508)"; case 0x1509 /* GL_EQUIV */: return "GL_EQUIV (0x1509)"; case 0x150A /* GL_INVERT */: return "GL_INVERT (0x150A)"; case 0x150B /* GL_OR_REVERSE */: return "GL_OR_REVERSE (0x150B)"; case 0x150C /* GL_COPY_INVERTED */: return "GL_COPY_INVERTED (0x150C)"; case 0x150D /* GL_OR_INVERTED */: return "GL_OR_INVERTED (0x150D)"; case 0x150E /* GL_NAND */: return "GL_NAND (0x150E)"; case 0x150F /* GL_SET */: return "GL_SET (0x150F)"; case 0x1600 /* GL_EMISSION */: return "GL_EMISSION (0x1600)"; case 0x1601 /* GL_SHININESS */: return "GL_SHININESS (0x1601)"; case 0x1602 /* GL_AMBIENT_AND_DIFFUSE */: return "GL_AMBIENT_AND_DIFFUSE (0x1602)"; case 0x1603 /* GL_COLOR_INDEXES */: return "GL_COLOR_INDEXES (0x1603)"; case 0x1700 /* GL_MODELVIEW */: return "GL_MODELVIEW (0x1700)"; case 0x1701 /* GL_PROJECTION */: return "GL_PROJECTION (0x1701)"; case 0x1702 /* GL_TEXTURE */: return "GL_TEXTURE (0x1702)"; case 0x1800 /* GL_COLOR */: return "GL_COLOR (0x1800)"; case 0x1801 /* GL_DEPTH */: return "GL_DEPTH (0x1801)"; case 0x1802 /* GL_STENCIL */: return "GL_STENCIL (0x1802)"; case 0x1900 /* GL_COLOR_INDEX */: return "GL_COLOR_INDEX (0x1900)"; case 0x1901 /* GL_STENCIL_INDEX */: return "GL_STENCIL_INDEX (0x1901)"; case 0x1902 /* GL_DEPTH_COMPONENT */: return "GL_DEPTH_COMPONENT (0x1902)"; case 0x1903 /* GL_RED */: return "GL_RED (0x1903)"; case 0x1904 /* GL_GREEN */: return "GL_GREEN (0x1904)"; case 0x1905 /* GL_BLUE */: return "GL_BLUE (0x1905)"; case 0x1906 /* GL_ALPHA */: return "GL_ALPHA (0x1906)"; case 0x1907 /* GL_RGB */: return "GL_RGB (0x1907)"; case 0x1908 /* GL_RGBA */: return "GL_RGBA (0x1908)"; case 0x1909 /* GL_LUMINANCE */: return "GL_LUMINANCE (0x1909)"; case 0x190A /* GL_LUMINANCE_ALPHA */: return "GL_LUMINANCE_ALPHA (0x190A)"; case 0x1A00 /* GL_BITMAP */: return "GL_BITMAP (0x1A00)"; case 0x1B00 /* GL_POINT */: return "GL_POINT (0x1B00)"; case 0x1B01 /* GL_LINE */: return "GL_LINE (0x1B01)"; case 0x1B02 /* GL_FILL */: return "GL_FILL (0x1B02)"; case 0x1C00 /* GL_RENDER */: return "GL_RENDER (0x1C00)"; case 0x1C01 /* GL_FEEDBACK */: return "GL_FEEDBACK (0x1C01)"; case 0x1C02 /* GL_SELECT */: return "GL_SELECT (0x1C02)"; case 0x1D00 /* GL_FLAT */: return "GL_FLAT (0x1D00)"; case 0x1D01 /* GL_SMOOTH */: return "GL_SMOOTH (0x1D01)"; case 0x1E00 /* GL_KEEP */: return "GL_KEEP (0x1E00)"; case 0x1E01 /* GL_REPLACE */: return "GL_REPLACE (0x1E01)"; case 0x1E02 /* GL_INCR */: return "GL_INCR (0x1E02)"; case 0x1E03 /* GL_DECR */: return "GL_DECR (0x1E03)"; case 0x1F00 /* GL_VENDOR */: return "GL_VENDOR (0x1F00)"; case 0x1F01 /* GL_RENDERER */: return "GL_RENDERER (0x1F01)"; case 0x1F02 /* GL_VERSION */: return "GL_VERSION (0x1F02)"; case 0x1F03 /* GL_EXTENSIONS */: return "GL_EXTENSIONS (0x1F03)"; case 0x2000 /* GL_S */: return "GL_S/GL_ENABLE_BIT (0x2000)"; case 0x2001 /* GL_T */: return "GL_T (0x2001)"; case 0x2002 /* GL_R */: return "GL_R (0x2002)"; case 0x2003 /* GL_Q */: return "GL_Q (0x2003)"; case 0x2100 /* GL_MODULATE */: return "GL_MODULATE (0x2100)"; case 0x2101 /* GL_DECAL */: return "GL_DECAL (0x2101)"; case 0x2200 /* GL_TEXTURE_ENV_MODE */: return "GL_TEXTURE_ENV_MODE (0x2200)"; case 0x2201 /* GL_TEXTURE_ENV_COLOR */: return "GL_TEXTURE_ENV_COLOR (0x2201)"; case 0x2300 /* GL_TEXTURE_ENV */: return "GL_TEXTURE_ENV (0x2300)"; case 0x2400 /* GL_EYE_LINEAR */: return "GL_EYE_LINEAR (0x2400)"; case 0x2401 /* GL_OBJECT_LINEAR */: return "GL_OBJECT_LINEAR (0x2401)"; case 0x2402 /* GL_SPHERE_MAP */: return "GL_SPHERE_MAP (0x2402)"; case 0x2500 /* GL_TEXTURE_GEN_MODE */: return "GL_TEXTURE_GEN_MODE (0x2500)"; case 0x2501 /* GL_OBJECT_PLANE */: return "GL_OBJECT_PLANE (0x2501)"; case 0x2502 /* GL_EYE_PLANE */: return "GL_EYE_PLANE (0x2502)"; case 0x2600 /* GL_NEAREST */: return "GL_NEAREST (0x2600)"; case 0x2601 /* GL_LINEAR */: return "GL_LINEAR (0x2601)"; case 0x2700 /* GL_NEAREST_MIPMAP_NEAREST */: return "GL_NEAREST_MIPMAP_NEAREST (0x2700)"; case 0x2701 /* GL_LINEAR_MIPMAP_NEAREST */: return "GL_LINEAR_MIPMAP_NEAREST (0x2701)"; case 0x2702 /* GL_NEAREST_MIPMAP_LINEAR */: return "GL_NEAREST_MIPMAP_LINEAR (0x2702)"; case 0x2703 /* GL_LINEAR_MIPMAP_LINEAR */: return "GL_LINEAR_MIPMAP_LINEAR (0x2703)"; case 0x2800 /* GL_TEXTURE_MAG_FILTER */: return "GL_TEXTURE_MAG_FILTER (0x2800)"; case 0x2801 /* GL_TEXTURE_MIN_FILTER */: return "GL_TEXTURE_MIN_FILTER (0x2801)"; case 0x2802 /* GL_TEXTURE_WRAP_S */: return "GL_TEXTURE_WRAP_S (0x2802)"; case 0x2803 /* GL_TEXTURE_WRAP_T */: return "GL_TEXTURE_WRAP_T (0x2803)"; case 0x2900 /* GL_CLAMP */: return "GL_CLAMP (0x2900)"; case 0x2901 /* GL_REPEAT */: return "GL_REPEAT (0x2901)"; case 0x2A00 /* GL_POLYGON_OFFSET_UNITS */: return "GL_POLYGON_OFFSET_UNITS (0x2A00)"; case 0x2A01 /* GL_POLYGON_OFFSET_POINT */: return "GL_POLYGON_OFFSET_POINT (0x2A01)"; case 0x2A02 /* GL_POLYGON_OFFSET_LINE */: return "GL_POLYGON_OFFSET_LINE (0x2A02)"; case 0x2A10 /* GL_R3_G3_B2 */: return "GL_R3_G3_B2 (0x2A10)"; case 0x2A20 /* GL_V2F */: return "GL_V2F (0x2A20)"; case 0x2A21 /* GL_V3F */: return "GL_V3F (0x2A21)"; case 0x2A22 /* GL_C4UB_V2F */: return "GL_C4UB_V2F (0x2A22)"; case 0x2A23 /* GL_C4UB_V3F */: return "GL_C4UB_V3F (0x2A23)"; case 0x2A24 /* GL_C3F_V3F */: return "GL_C3F_V3F (0x2A24)"; case 0x2A25 /* GL_N3F_V3F */: return "GL_N3F_V3F (0x2A25)"; case 0x2A26 /* GL_C4F_N3F_V3F */: return "GL_C4F_N3F_V3F (0x2A26)"; case 0x2A27 /* GL_T2F_V3F */: return "GL_T2F_V3F (0x2A27)"; case 0x2A28 /* GL_T4F_V4F */: return "GL_T4F_V4F (0x2A28)"; case 0x2A29 /* GL_T2F_C4UB_V3F */: return "GL_T2F_C4UB_V3F (0x2A29)"; case 0x2A2A /* GL_T2F_C3F_V3F */: return "GL_T2F_C3F_V3F (0x2A2A)"; case 0x2A2B /* GL_T2F_N3F_V3F */: return "GL_T2F_N3F_V3F (0x2A2B)"; case 0x2A2C /* GL_T2F_C4F_N3F_V3F */: return "GL_T2F_C4F_N3F_V3F (0x2A2C)"; case 0x2A2D /* GL_T4F_C4F_N3F_V4F */: return "GL_T4F_C4F_N3F_V4F (0x2A2D)"; case 0x3000 /* GL_CLIP_PLANE0 */: return "GL_CLIP_PLANE0 (0x3000)"; case 0x3001 /* GL_CLIP_PLANE1 */: return "GL_CLIP_PLANE1 (0x3001)"; case 0x3002 /* GL_CLIP_PLANE2 */: return "GL_CLIP_PLANE2 (0x3002)"; case 0x3003 /* GL_CLIP_PLANE3 */: return "GL_CLIP_PLANE3 (0x3003)"; case 0x3004 /* GL_CLIP_PLANE4 */: return "GL_CLIP_PLANE4 (0x3004)"; case 0x3005 /* GL_CLIP_PLANE5 */: return "GL_CLIP_PLANE5 (0x3005)"; case 0x4000 /* GL_LIGHT0 */: return "GL_LIGHT0/GL_COLOR_BUFFER_BIT (0x4000)"; case 0x4001 /* GL_LIGHT1 */: return "GL_LIGHT1 (0x4001)"; case 0x4002 /* GL_LIGHT2 */: return "GL_LIGHT2 (0x4002)"; case 0x4003 /* GL_LIGHT3 */: return "GL_LIGHT3 (0x4003)"; case 0x4004 /* GL_LIGHT4 */: return "GL_LIGHT4 (0x4004)"; case 0x4005 /* GL_LIGHT5 */: return "GL_LIGHT5 (0x4005)"; case 0x4006 /* GL_LIGHT6 */: return "GL_LIGHT6 (0x4006)"; case 0x4007 /* GL_LIGHT7 */: return "GL_LIGHT7 (0x4007)"; case 0x00008000 /* GL_HINT_BIT */: return "GL_HINT_BIT (0x00008000)"; case 0x8037 /* GL_POLYGON_OFFSET_FILL */: return "GL_POLYGON_OFFSET_FILL (0x8037)"; case 0x8038 /* GL_POLYGON_OFFSET_FACTOR */: return "GL_POLYGON_OFFSET_FACTOR (0x8038)"; case 0x803B /* GL_ALPHA4 */: return "GL_ALPHA4 (0x803B)"; case 0x803C /* GL_ALPHA8 */: return "GL_ALPHA8 (0x803C)"; case 0x803D /* GL_ALPHA12 */: return "GL_ALPHA12 (0x803D)"; case 0x803E /* GL_ALPHA16 */: return "GL_ALPHA16 (0x803E)"; case 0x803F /* GL_LUMINANCE4 */: return "GL_LUMINANCE4 (0x803F)"; case 0x8040 /* GL_LUMINANCE8 */: return "GL_LUMINANCE8 (0x8040)"; case 0x8041 /* GL_LUMINANCE12 */: return "GL_LUMINANCE12 (0x8041)"; case 0x8042 /* GL_LUMINANCE16 */: return "GL_LUMINANCE16 (0x8042)"; case 0x8043 /* GL_LUMINANCE4_ALPHA4 */: return "GL_LUMINANCE4_ALPHA4 (0x8043)"; case 0x8044 /* GL_LUMINANCE6_ALPHA2 */: return "GL_LUMINANCE6_ALPHA2 (0x8044)"; case 0x8045 /* GL_LUMINANCE8_ALPHA8 */: return "GL_LUMINANCE8_ALPHA8 (0x8045)"; case 0x8046 /* GL_LUMINANCE12_ALPHA4 */: return "GL_LUMINANCE12_ALPHA4 (0x8046)"; case 0x8047 /* GL_LUMINANCE12_ALPHA12 */: return "GL_LUMINANCE12_ALPHA12 (0x8047)"; case 0x8048 /* GL_LUMINANCE16_ALPHA16 */: return "GL_LUMINANCE16_ALPHA16 (0x8048)"; case 0x8049 /* GL_INTENSITY */: return "GL_INTENSITY (0x8049)"; case 0x804A /* GL_INTENSITY4 */: return "GL_INTENSITY4 (0x804A)"; case 0x804B /* GL_INTENSITY8 */: return "GL_INTENSITY8 (0x804B)"; case 0x804C /* GL_INTENSITY12 */: return "GL_INTENSITY12 (0x804C)"; case 0x804D /* GL_INTENSITY16 */: return "GL_INTENSITY16 (0x804D)"; case 0x804F /* GL_RGB4 */: return "GL_RGB4 (0x804F)"; case 0x8050 /* GL_RGB5 */: return "GL_RGB5 (0x8050)"; case 0x8051 /* GL_RGB8 */: return "GL_RGB8 (0x8051)"; case 0x8052 /* GL_RGB10 */: return "GL_RGB10 (0x8052)"; case 0x8053 /* GL_RGB12 */: return "GL_RGB12 (0x8053)"; case 0x8054 /* GL_RGB16 */: return "GL_RGB16 (0x8054)"; case 0x8055 /* GL_RGBA2 */: return "GL_RGBA2 (0x8055)"; case 0x8056 /* GL_RGBA4 */: return "GL_RGBA4 (0x8056)"; case 0x8057 /* GL_RGB5_A1 */: return "GL_RGB5_A1 (0x8057)"; case 0x8058 /* GL_RGBA8 */: return "GL_RGBA8 (0x8058)"; case 0x8059 /* GL_RGB10_A2 */: return "GL_RGB10_A2 (0x8059)"; case 0x805A /* GL_RGBA12 */: return "GL_RGBA12 (0x805A)"; case 0x805B /* GL_RGBA16 */: return "GL_RGBA16 (0x805B)"; case 0x805C /* GL_TEXTURE_RED_SIZE */: return "GL_TEXTURE_RED_SIZE (0x805C)"; case 0x805D /* GL_TEXTURE_GREEN_SIZE */: return "GL_TEXTURE_GREEN_SIZE (0x805D)"; case 0x805E /* GL_TEXTURE_BLUE_SIZE */: return "GL_TEXTURE_BLUE_SIZE (0x805E)"; case 0x805F /* GL_TEXTURE_ALPHA_SIZE */: return "GL_TEXTURE_ALPHA_SIZE (0x805F)"; case 0x8060 /* GL_TEXTURE_LUMINANCE_SIZE */: return "GL_TEXTURE_LUMINANCE_SIZE (0x8060)"; case 0x8061 /* GL_TEXTURE_INTENSITY_SIZE */: return "GL_TEXTURE_INTENSITY_SIZE (0x8061)"; case 0x8063 /* GL_PROXY_TEXTURE_1D */: return "GL_PROXY_TEXTURE_1D (0x8063)"; case 0x8064 /* GL_PROXY_TEXTURE_2D */: return "GL_PROXY_TEXTURE_2D (0x8064)"; case 0x8066 /* GL_TEXTURE_PRIORITY */: return "GL_TEXTURE_PRIORITY (0x8066)"; case 0x8067 /* GL_TEXTURE_RESIDENT */: return "GL_TEXTURE_RESIDENT (0x8067)"; case 0x8068 /* GL_TEXTURE_BINDING_1D */: return "GL_TEXTURE_BINDING_1D (0x8068)"; case 0x8069 /* GL_TEXTURE_BINDING_2D */: return "GL_TEXTURE_BINDING_2D (0x8069)"; case 0x8074 /* GL_VERTEX_ARRAY */: return "GL_VERTEX_ARRAY (0x8074)"; case 0x8075 /* GL_NORMAL_ARRAY */: return "GL_NORMAL_ARRAY (0x8075)"; case 0x8076 /* GL_COLOR_ARRAY */: return "GL_COLOR_ARRAY (0x8076)"; case 0x8077 /* GL_INDEX_ARRAY */: return "GL_INDEX_ARRAY (0x8077)"; case 0x8078 /* GL_TEXTURE_COORD_ARRAY */: return "GL_TEXTURE_COORD_ARRAY (0x8078)"; case 0x8079 /* GL_EDGE_FLAG_ARRAY */: return "GL_EDGE_FLAG_ARRAY (0x8079)"; case 0x807A /* GL_VERTEX_ARRAY_SIZE */: return "GL_VERTEX_ARRAY_SIZE (0x807A)"; case 0x807B /* GL_VERTEX_ARRAY_TYPE */: return "GL_VERTEX_ARRAY_TYPE (0x807B)"; case 0x807C /* GL_VERTEX_ARRAY_STRIDE */: return "GL_VERTEX_ARRAY_STRIDE (0x807C)"; case 0x807E /* GL_NORMAL_ARRAY_TYPE */: return "GL_NORMAL_ARRAY_TYPE (0x807E)"; case 0x807F /* GL_NORMAL_ARRAY_STRIDE */: return "GL_NORMAL_ARRAY_STRIDE (0x807F)"; case 0x8081 /* GL_COLOR_ARRAY_SIZE */: return "GL_COLOR_ARRAY_SIZE (0x8081)"; case 0x8082 /* GL_COLOR_ARRAY_TYPE */: return "GL_COLOR_ARRAY_TYPE (0x8082)"; case 0x8083 /* GL_COLOR_ARRAY_STRIDE */: return "GL_COLOR_ARRAY_STRIDE (0x8083)"; case 0x8085 /* GL_INDEX_ARRAY_TYPE */: return "GL_INDEX_ARRAY_TYPE (0x8085)"; case 0x8086 /* GL_INDEX_ARRAY_STRIDE */: return "GL_INDEX_ARRAY_STRIDE (0x8086)"; case 0x8088 /* GL_TEXTURE_COORD_ARRAY_SIZE */: return "GL_TEXTURE_COORD_ARRAY_SIZE (0x8088)"; case 0x8089 /* GL_TEXTURE_COORD_ARRAY_TYPE */: return "GL_TEXTURE_COORD_ARRAY_TYPE (0x8089)"; case 0x808A /* GL_TEXTURE_COORD_ARRAY_STRIDE */: return "GL_TEXTURE_COORD_ARRAY_STRIDE (0x808A)"; case 0x808C /* GL_EDGE_FLAG_ARRAY_STRIDE */: return "GL_EDGE_FLAG_ARRAY_STRIDE (0x808C)"; case 0x808E /* GL_VERTEX_ARRAY_POINTER */: return "GL_VERTEX_ARRAY_POINTER (0x808E)"; case 0x808F /* GL_NORMAL_ARRAY_POINTER */: return "GL_NORMAL_ARRAY_POINTER (0x808F)"; case 0x8090 /* GL_COLOR_ARRAY_POINTER */: return "GL_COLOR_ARRAY_POINTER (0x8090)"; case 0x8091 /* GL_INDEX_ARRAY_POINTER */: return "GL_INDEX_ARRAY_POINTER (0x8091)"; case 0x8092 /* GL_TEXTURE_COORD_ARRAY_POINTER */: return "GL_TEXTURE_COORD_ARRAY_POINTER (0x8092)"; case 0x8093 /* GL_EDGE_FLAG_ARRAY_POINTER */: return "GL_EDGE_FLAG_ARRAY_POINTER (0x8093)"; case 0x80E2 /* GL_COLOR_INDEX1_EXT */: return "GL_COLOR_INDEX1_EXT (0x80E2)"; case 0x80E3 /* GL_COLOR_INDEX2_EXT */: return "GL_COLOR_INDEX2_EXT (0x80E3)"; case 0x80E4 /* GL_COLOR_INDEX4_EXT */: return "GL_COLOR_INDEX4_EXT (0x80E4)"; case 0x80E5 /* GL_COLOR_INDEX8_EXT */: return "GL_COLOR_INDEX8_EXT (0x80E5)"; case 0x80E6 /* GL_COLOR_INDEX12_EXT */: return "GL_COLOR_INDEX12_EXT (0x80E6)"; case 0x80E7 /* GL_COLOR_INDEX16_EXT */: return "GL_COLOR_INDEX16_EXT (0x80E7)"; case 0x00010000 /* GL_EVAL_BIT */: return "GL_EVAL_BIT (0x00010000)"; case 0x00020000 /* GL_LIST_BIT */: return "GL_LIST_BIT (0x00020000)"; case 0x00040000 /* GL_TEXTURE_BIT */: return "GL_TEXTURE_BIT (0x00040000)"; case 0x00080000 /* GL_SCISSOR_BIT */: return "GL_SCISSOR_BIT (0x00080000)"; case 0x000fffff /* GL_ALL_ATTRIB_BITS */: return "GL_ALL_ATTRIB_BITS (0x000fffff)"; case 0xffffffff /* GL_CLIENT_ALL_ATTRIB_BITS */: return "GL_CLIENT_ALL_ATTRIB_BITS (0xffffffff)"; //case 0x0B12 /* GL_SMOOTH_POINT_SIZE_RANGE */: return "GL_SMOOTH_POINT_SIZE_RANGE (0x0B12)"; case 0x0B12 /* GL_POINT_SIZE_RANGE */: return "GL_POINT_SIZE_RANGE/GL_SMOOTH_POINT_SIZE_RANGE (0x0B12)"; //case 0x0B13 /* GL_SMOOTH_POINT_SIZE_GRANULARITY */: return "GL_SMOOTH_POINT_SIZE_GRANULARITY (0x0B13)"; case 0x0B13 /* GL_POINT_SIZE_GRANULARITY */: return "GL_POINT_SIZE_GRANULARITY/GL_SMOOTH_POINT_SIZE_GRANULARITY (0x0B13)"; case 0x0B22 /* GL_LINE_WIDTH_RANGE */: return "GL_LINE_WIDTH_RANGE/GL_SMOOTH_LINE_WIDTH_RANGE (0x0B22)"; //case 0x0B22 /* GL_SMOOTH_LINE_WIDTH_RANGE */: return "GL_SMOOTH_LINE_WIDTH_RANGE (0x0B22)"; //case 0x0B23 /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */: return "GL_SMOOTH_LINE_WIDTH_GRANULARITY (0x0B23)"; case 0x0B23 /* GL_LINE_WIDTH_GRANULARITY */: return "GL_LINE_WIDTH_GRANULARITY/GL_SMOOTH_LINE_WIDTH_GRANULARITY (0x0B23)"; case 0x8032 /* GL_UNSIGNED_BYTE_3_3_2 */: return "GL_UNSIGNED_BYTE_3_3_2 (0x8032)"; case 0x8033 /* GL_UNSIGNED_SHORT_4_4_4_4 */: return "GL_UNSIGNED_SHORT_4_4_4_4 (0x8033)"; case 0x8034 /* GL_UNSIGNED_SHORT_5_5_5_1 */: return "GL_UNSIGNED_SHORT_5_5_5_1 (0x8034)"; case 0x8035 /* GL_UNSIGNED_INT_8_8_8_8 */: return "GL_UNSIGNED_INT_8_8_8_8 (0x8035)"; case 0x8036 /* GL_UNSIGNED_INT_10_10_10_2 */: return "GL_UNSIGNED_INT_10_10_10_2 (0x8036)"; case 0x803A /* GL_RESCALE_NORMAL */: return "GL_RESCALE_NORMAL (0x803A)"; case 0x806A /* GL_TEXTURE_BINDING_3D */: return "GL_TEXTURE_BINDING_3D (0x806A)"; case 0x806B /* GL_PACK_SKIP_IMAGES */: return "GL_PACK_SKIP_IMAGES (0x806B)"; case 0x806C /* GL_PACK_IMAGE_HEIGHT */: return "GL_PACK_IMAGE_HEIGHT (0x806C)"; case 0x806D /* GL_UNPACK_SKIP_IMAGES */: return "GL_UNPACK_SKIP_IMAGES (0x806D)"; case 0x806E /* GL_UNPACK_IMAGE_HEIGHT */: return "GL_UNPACK_IMAGE_HEIGHT (0x806E)"; case 0x806F /* GL_TEXTURE_3D */: return "GL_TEXTURE_3D (0x806F)"; case 0x8070 /* GL_PROXY_TEXTURE_3D */: return "GL_PROXY_TEXTURE_3D (0x8070)"; case 0x8071 /* GL_TEXTURE_DEPTH */: return "GL_TEXTURE_DEPTH (0x8071)"; case 0x8072 /* GL_TEXTURE_WRAP_R */: return "GL_TEXTURE_WRAP_R (0x8072)"; case 0x8073 /* GL_MAX_3D_TEXTURE_SIZE */: return "GL_MAX_3D_TEXTURE_SIZE (0x8073)"; case 0x80E0 /* GL_BGR */: return "GL_BGR (0x80E0)"; case 0x80E1 /* GL_BGRA */: return "GL_BGRA (0x80E1)"; case 0x80E8 /* GL_MAX_ELEMENTS_VERTICES */: return "GL_MAX_ELEMENTS_VERTICES (0x80E8)"; case 0x80E9 /* GL_MAX_ELEMENTS_INDICES */: return "GL_MAX_ELEMENTS_INDICES (0x80E9)"; case 0x812F /* GL_CLAMP_TO_EDGE */: return "GL_CLAMP_TO_EDGE (0x812F)"; case 0x813A /* GL_TEXTURE_MIN_LOD */: return "GL_TEXTURE_MIN_LOD (0x813A)"; case 0x813B /* GL_TEXTURE_MAX_LOD */: return "GL_TEXTURE_MAX_LOD (0x813B)"; case 0x813C /* GL_TEXTURE_BASE_LEVEL */: return "GL_TEXTURE_BASE_LEVEL (0x813C)"; case 0x813D /* GL_TEXTURE_MAX_LEVEL */: return "GL_TEXTURE_MAX_LEVEL (0x813D)"; case 0x81F8 /* GL_LIGHT_MODEL_COLOR_CONTROL */: return "GL_LIGHT_MODEL_COLOR_CONTROL (0x81F8)"; case 0x81F9 /* GL_SINGLE_COLOR */: return "GL_SINGLE_COLOR (0x81F9)"; case 0x81FA /* GL_SEPARATE_SPECULAR_COLOR */: return "GL_SEPARATE_SPECULAR_COLOR (0x81FA)"; case 0x8362 /* GL_UNSIGNED_BYTE_2_3_3_REV */: return "GL_UNSIGNED_BYTE_2_3_3_REV (0x8362)"; case 0x8363 /* GL_UNSIGNED_SHORT_5_6_5 */: return "GL_UNSIGNED_SHORT_5_6_5 (0x8363)"; case 0x8364 /* GL_UNSIGNED_SHORT_5_6_5_REV */: return "GL_UNSIGNED_SHORT_5_6_5_REV (0x8364)"; case 0x8365 /* GL_UNSIGNED_SHORT_4_4_4_4_REV */: return "GL_UNSIGNED_SHORT_4_4_4_4_REV (0x8365)"; case 0x8366 /* GL_UNSIGNED_SHORT_1_5_5_5_REV */: return "GL_UNSIGNED_SHORT_1_5_5_5_REV (0x8366)"; case 0x8367 /* GL_UNSIGNED_INT_8_8_8_8_REV */: return "GL_UNSIGNED_INT_8_8_8_8_REV (0x8367)"; case 0x8368 /* GL_UNSIGNED_INT_2_10_10_10_REV */: return "GL_UNSIGNED_INT_2_10_10_10_REV (0x8368)"; case 0x846D /* GL_ALIASED_POINT_SIZE_RANGE */: return "GL_ALIASED_POINT_SIZE_RANGE (0x846D)"; case 0x846E /* GL_ALIASED_LINE_WIDTH_RANGE */: return "GL_ALIASED_LINE_WIDTH_RANGE (0x846E)"; case 0x809D /* GL_MULTISAMPLE */: return "GL_MULTISAMPLE (0x809D)"; case 0x809E /* GL_SAMPLE_ALPHA_TO_COVERAGE */: return "GL_SAMPLE_ALPHA_TO_COVERAGE (0x809E)"; case 0x809F /* GL_SAMPLE_ALPHA_TO_ONE */: return "GL_SAMPLE_ALPHA_TO_ONE (0x809F)"; case 0x80A0 /* GL_SAMPLE_COVERAGE */: return "GL_SAMPLE_COVERAGE (0x80A0)"; case 0x80A8 /* GL_SAMPLE_BUFFERS */: return "GL_SAMPLE_BUFFERS (0x80A8)"; case 0x80A9 /* GL_SAMPLES */: return "GL_SAMPLES (0x80A9)"; case 0x80AA /* GL_SAMPLE_COVERAGE_VALUE */: return "GL_SAMPLE_COVERAGE_VALUE (0x80AA)"; case 0x80AB /* GL_SAMPLE_COVERAGE_INVERT */: return "GL_SAMPLE_COVERAGE_INVERT (0x80AB)"; case 0x812D /* GL_CLAMP_TO_BORDER */: return "GL_CLAMP_TO_BORDER (0x812D)"; case 0x84C0 /* GL_TEXTURE0 */: return "GL_TEXTURE0 (0x84C0)"; case 0x84C1 /* GL_TEXTURE1 */: return "GL_TEXTURE1 (0x84C1)"; case 0x84C2 /* GL_TEXTURE2 */: return "GL_TEXTURE2 (0x84C2)"; case 0x84C3 /* GL_TEXTURE3 */: return "GL_TEXTURE3 (0x84C3)"; case 0x84C4 /* GL_TEXTURE4 */: return "GL_TEXTURE4 (0x84C4)"; case 0x84C5 /* GL_TEXTURE5 */: return "GL_TEXTURE5 (0x84C5)"; case 0x84C6 /* GL_TEXTURE6 */: return "GL_TEXTURE6 (0x84C6)"; case 0x84C7 /* GL_TEXTURE7 */: return "GL_TEXTURE7 (0x84C7)"; case 0x84C8 /* GL_TEXTURE8 */: return "GL_TEXTURE8 (0x84C8)"; case 0x84C9 /* GL_TEXTURE9 */: return "GL_TEXTURE9 (0x84C9)"; case 0x84CA /* GL_TEXTURE10 */: return "GL_TEXTURE10 (0x84CA)"; case 0x84CB /* GL_TEXTURE11 */: return "GL_TEXTURE11 (0x84CB)"; case 0x84CC /* GL_TEXTURE12 */: return "GL_TEXTURE12 (0x84CC)"; case 0x84CD /* GL_TEXTURE13 */: return "GL_TEXTURE13 (0x84CD)"; case 0x84CE /* GL_TEXTURE14 */: return "GL_TEXTURE14 (0x84CE)"; case 0x84CF /* GL_TEXTURE15 */: return "GL_TEXTURE15 (0x84CF)"; case 0x84D0 /* GL_TEXTURE16 */: return "GL_TEXTURE16 (0x84D0)"; case 0x84D1 /* GL_TEXTURE17 */: return "GL_TEXTURE17 (0x84D1)"; case 0x84D2 /* GL_TEXTURE18 */: return "GL_TEXTURE18 (0x84D2)"; case 0x84D3 /* GL_TEXTURE19 */: return "GL_TEXTURE19 (0x84D3)"; case 0x84D4 /* GL_TEXTURE20 */: return "GL_TEXTURE20 (0x84D4)"; case 0x84D5 /* GL_TEXTURE21 */: return "GL_TEXTURE21 (0x84D5)"; case 0x84D6 /* GL_TEXTURE22 */: return "GL_TEXTURE22 (0x84D6)"; case 0x84D7 /* GL_TEXTURE23 */: return "GL_TEXTURE23 (0x84D7)"; case 0x84D8 /* GL_TEXTURE24 */: return "GL_TEXTURE24 (0x84D8)"; case 0x84D9 /* GL_TEXTURE25 */: return "GL_TEXTURE25 (0x84D9)"; case 0x84DA /* GL_TEXTURE26 */: return "GL_TEXTURE26 (0x84DA)"; case 0x84DB /* GL_TEXTURE27 */: return "GL_TEXTURE27 (0x84DB)"; case 0x84DC /* GL_TEXTURE28 */: return "GL_TEXTURE28 (0x84DC)"; case 0x84DD /* GL_TEXTURE29 */: return "GL_TEXTURE29 (0x84DD)"; case 0x84DE /* GL_TEXTURE30 */: return "GL_TEXTURE30 (0x84DE)"; case 0x84DF /* GL_TEXTURE31 */: return "GL_TEXTURE31 (0x84DF)"; case 0x84E0 /* GL_ACTIVE_TEXTURE */: return "GL_ACTIVE_TEXTURE (0x84E0)"; case 0x84E1 /* GL_CLIENT_ACTIVE_TEXTURE */: return "GL_CLIENT_ACTIVE_TEXTURE (0x84E1)"; case 0x84E2 /* GL_MAX_TEXTURE_UNITS */: return "GL_MAX_TEXTURE_UNITS (0x84E2)"; case 0x84E3 /* GL_TRANSPOSE_MODELVIEW_MATRIX */: return "GL_TRANSPOSE_MODELVIEW_MATRIX (0x84E3)"; case 0x84E4 /* GL_TRANSPOSE_PROJECTION_MATRIX */: return "GL_TRANSPOSE_PROJECTION_MATRIX (0x84E4)"; case 0x84E5 /* GL_TRANSPOSE_TEXTURE_MATRIX */: return "GL_TRANSPOSE_TEXTURE_MATRIX (0x84E5)"; case 0x84E6 /* GL_TRANSPOSE_COLOR_MATRIX */: return "GL_TRANSPOSE_COLOR_MATRIX (0x84E6)"; case 0x84E7 /* GL_SUBTRACT */: return "GL_SUBTRACT (0x84E7)"; case 0x84E9 /* GL_COMPRESSED_ALPHA */: return "GL_COMPRESSED_ALPHA (0x84E9)"; case 0x84EA /* GL_COMPRESSED_LUMINANCE */: return "GL_COMPRESSED_LUMINANCE (0x84EA)"; case 0x84EB /* GL_COMPRESSED_LUMINANCE_ALPHA */: return "GL_COMPRESSED_LUMINANCE_ALPHA (0x84EB)"; case 0x84EC /* GL_COMPRESSED_INTENSITY */: return "GL_COMPRESSED_INTENSITY (0x84EC)"; case 0x84ED /* GL_COMPRESSED_RGB */: return "GL_COMPRESSED_RGB (0x84ED)"; case 0x84EE /* GL_COMPRESSED_RGBA */: return "GL_COMPRESSED_RGBA (0x84EE)"; case 0x84EF /* GL_TEXTURE_COMPRESSION_HINT */: return "GL_TEXTURE_COMPRESSION_HINT (0x84EF)"; case 0x8511 /* GL_NORMAL_MAP */: return "GL_NORMAL_MAP (0x8511)"; case 0x8512 /* GL_REFLECTION_MAP */: return "GL_REFLECTION_MAP (0x8512)"; case 0x8513 /* GL_TEXTURE_CUBE_MAP */: return "GL_TEXTURE_CUBE_MAP (0x8513)"; case 0x8514 /* GL_TEXTURE_BINDING_CUBE_MAP */: return "GL_TEXTURE_BINDING_CUBE_MAP (0x8514)"; case 0x8515 /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X (0x8515)"; case 0x8516 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X (0x8516)"; case 0x8517 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y (0x8517)"; case 0x8518 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y (0x8518)"; case 0x8519 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z (0x8519)"; case 0x851A /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z (0x851A)"; case 0x851B /* GL_PROXY_TEXTURE_CUBE_MAP */: return "GL_PROXY_TEXTURE_CUBE_MAP (0x851B)"; case 0x851C /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */: return "GL_MAX_CUBE_MAP_TEXTURE_SIZE (0x851C)"; case 0x8570 /* GL_COMBINE */: return "GL_COMBINE (0x8570)"; case 0x8571 /* GL_COMBINE_RGB */: return "GL_COMBINE_RGB (0x8571)"; case 0x8572 /* GL_COMBINE_ALPHA */: return "GL_COMBINE_ALPHA (0x8572)"; case 0x8573 /* GL_RGB_SCALE */: return "GL_RGB_SCALE (0x8573)"; case 0x8574 /* GL_ADD_SIGNED */: return "GL_ADD_SIGNED (0x8574)"; case 0x8575 /* GL_INTERPOLATE */: return "GL_INTERPOLATE (0x8575)"; case 0x8576 /* GL_CONSTANT */: return "GL_CONSTANT (0x8576)"; case 0x8577 /* GL_PRIMARY_COLOR */: return "GL_PRIMARY_COLOR (0x8577)"; case 0x8578 /* GL_PREVIOUS */: return "GL_PREVIOUS (0x8578)"; case 0x8580 /* GL_SOURCE0_RGB */: return "GL_SOURCE0_RGB (0x8580)"; case 0x8581 /* GL_SOURCE1_RGB */: return "GL_SOURCE1_RGB (0x8581)"; case 0x8582 /* GL_SOURCE2_RGB */: return "GL_SOURCE2_RGB (0x8582)"; case 0x8588 /* GL_SOURCE0_ALPHA */: return "GL_SOURCE0_ALPHA (0x8588)"; case 0x8589 /* GL_SOURCE1_ALPHA */: return "GL_SOURCE1_ALPHA (0x8589)"; case 0x858A /* GL_SOURCE2_ALPHA */: return "GL_SOURCE2_ALPHA (0x858A)"; case 0x8590 /* GL_OPERAND0_RGB */: return "GL_OPERAND0_RGB (0x8590)"; case 0x8591 /* GL_OPERAND1_RGB */: return "GL_OPERAND1_RGB (0x8591)"; case 0x8592 /* GL_OPERAND2_RGB */: return "GL_OPERAND2_RGB (0x8592)"; case 0x8598 /* GL_OPERAND0_ALPHA */: return "GL_OPERAND0_ALPHA (0x8598)"; case 0x8599 /* GL_OPERAND1_ALPHA */: return "GL_OPERAND1_ALPHA (0x8599)"; case 0x859A /* GL_OPERAND2_ALPHA */: return "GL_OPERAND2_ALPHA (0x859A)"; case 0x86A0 /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */: return "GL_TEXTURE_COMPRESSED_IMAGE_SIZE (0x86A0)"; case 0x86A1 /* GL_TEXTURE_COMPRESSED */: return "GL_TEXTURE_COMPRESSED (0x86A1)"; case 0x86A2 /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */: return "GL_NUM_COMPRESSED_TEXTURE_FORMATS (0x86A2)"; case 0x86A3 /* GL_COMPRESSED_TEXTURE_FORMATS */: return "GL_COMPRESSED_TEXTURE_FORMATS (0x86A3)"; case 0x86AE /* GL_DOT3_RGB */: return "GL_DOT3_RGB (0x86AE)"; case 0x86AF /* GL_DOT3_RGBA */: return "GL_DOT3_RGBA (0x86AF)"; case 0x20000000 /* GL_MULTISAMPLE_BIT */: return "GL_MULTISAMPLE_BIT (0x20000000)"; case 0x80C8 /* GL_BLEND_DST_RGB */: return "GL_BLEND_DST_RGB (0x80C8)"; case 0x80C9 /* GL_BLEND_SRC_RGB */: return "GL_BLEND_SRC_RGB (0x80C9)"; case 0x80CA /* GL_BLEND_DST_ALPHA */: return "GL_BLEND_DST_ALPHA (0x80CA)"; case 0x80CB /* GL_BLEND_SRC_ALPHA */: return "GL_BLEND_SRC_ALPHA (0x80CB)"; case 0x8126 /* GL_POINT_SIZE_MIN */: return "GL_POINT_SIZE_MIN (0x8126)"; case 0x8127 /* GL_POINT_SIZE_MAX */: return "GL_POINT_SIZE_MAX (0x8127)"; case 0x8128 /* GL_POINT_FADE_THRESHOLD_SIZE */: return "GL_POINT_FADE_THRESHOLD_SIZE (0x8128)"; case 0x8129 /* GL_POINT_DISTANCE_ATTENUATION */: return "GL_POINT_DISTANCE_ATTENUATION (0x8129)"; case 0x8191 /* GL_GENERATE_MIPMAP */: return "GL_GENERATE_MIPMAP (0x8191)"; case 0x8192 /* GL_GENERATE_MIPMAP_HINT */: return "GL_GENERATE_MIPMAP_HINT (0x8192)"; case 0x81A5 /* GL_DEPTH_COMPONENT16 */: return "GL_DEPTH_COMPONENT16 (0x81A5)"; case 0x81A6 /* GL_DEPTH_COMPONENT24 */: return "GL_DEPTH_COMPONENT24 (0x81A6)"; case 0x81A7 /* GL_DEPTH_COMPONENT32 */: return "GL_DEPTH_COMPONENT32 (0x81A7)"; case 0x8370 /* GL_MIRRORED_REPEAT */: return "GL_MIRRORED_REPEAT (0x8370)"; case 0x8450 /* GL_FOG_COORDINATE_SOURCE */: return "GL_FOG_COORDINATE_SOURCE (0x8450)"; case 0x8451 /* GL_FOG_COORDINATE */: return "GL_FOG_COORDINATE (0x8451)"; case 0x8452 /* GL_FRAGMENT_DEPTH */: return "GL_FRAGMENT_DEPTH (0x8452)"; case 0x8453 /* GL_CURRENT_FOG_COORDINATE */: return "GL_CURRENT_FOG_COORDINATE (0x8453)"; case 0x8454 /* GL_FOG_COORDINATE_ARRAY_TYPE */: return "GL_FOG_COORDINATE_ARRAY_TYPE (0x8454)"; case 0x8455 /* GL_FOG_COORDINATE_ARRAY_STRIDE */: return "GL_FOG_COORDINATE_ARRAY_STRIDE (0x8455)"; case 0x8456 /* GL_FOG_COORDINATE_ARRAY_POINTER */: return "GL_FOG_COORDINATE_ARRAY_POINTER (0x8456)"; case 0x8457 /* GL_FOG_COORDINATE_ARRAY */: return "GL_FOG_COORDINATE_ARRAY (0x8457)"; case 0x8458 /* GL_COLOR_SUM */: return "GL_COLOR_SUM (0x8458)"; case 0x8459 /* GL_CURRENT_SECONDARY_COLOR */: return "GL_CURRENT_SECONDARY_COLOR (0x8459)"; case 0x845A /* GL_SECONDARY_COLOR_ARRAY_SIZE */: return "GL_SECONDARY_COLOR_ARRAY_SIZE (0x845A)"; case 0x845B /* GL_SECONDARY_COLOR_ARRAY_TYPE */: return "GL_SECONDARY_COLOR_ARRAY_TYPE (0x845B)"; case 0x845C /* GL_SECONDARY_COLOR_ARRAY_STRIDE */: return "GL_SECONDARY_COLOR_ARRAY_STRIDE (0x845C)"; case 0x845D /* GL_SECONDARY_COLOR_ARRAY_POINTER */: return "GL_SECONDARY_COLOR_ARRAY_POINTER (0x845D)"; case 0x845E /* GL_SECONDARY_COLOR_ARRAY */: return "GL_SECONDARY_COLOR_ARRAY (0x845E)"; case 0x84FD /* GL_MAX_TEXTURE_LOD_BIAS */: return "GL_MAX_TEXTURE_LOD_BIAS (0x84FD)"; case 0x8500 /* GL_TEXTURE_FILTER_CONTROL */: return "GL_TEXTURE_FILTER_CONTROL (0x8500)"; case 0x8501 /* GL_TEXTURE_LOD_BIAS */: return "GL_TEXTURE_LOD_BIAS (0x8501)"; case 0x8507 /* GL_INCR_WRAP */: return "GL_INCR_WRAP (0x8507)"; case 0x8508 /* GL_DECR_WRAP */: return "GL_DECR_WRAP (0x8508)"; case 0x884A /* GL_TEXTURE_DEPTH_SIZE */: return "GL_TEXTURE_DEPTH_SIZE (0x884A)"; case 0x884B /* GL_DEPTH_TEXTURE_MODE */: return "GL_DEPTH_TEXTURE_MODE (0x884B)"; case 0x884C /* GL_TEXTURE_COMPARE_MODE */: return "GL_TEXTURE_COMPARE_MODE (0x884C)"; case 0x884D /* GL_TEXTURE_COMPARE_FUNC */: return "GL_TEXTURE_COMPARE_FUNC (0x884D)"; case 0x884E /* GL_COMPARE_R_TO_TEXTURE */: return "GL_COMPARE_R_TO_TEXTURE (0x884E)"; /* ----------------------------- GL_VERSION_1_5 ---------------------------- */ case 0x8764 /* GL_BUFFER_SIZE */: return "GL_BUFFER_SIZE (0x8764)"; case 0x8765 /* GL_BUFFER_USAGE */: return "GL_BUFFER_USAGE (0x8765)"; case 0x8864 /* GL_QUERY_COUNTER_BITS */: return "GL_QUERY_COUNTER_BITS (0x8864)"; case 0x8865 /* GL_CURRENT_QUERY */: return "GL_CURRENT_QUERY (0x8865)"; case 0x8866 /* GL_QUERY_RESULT */: return "GL_QUERY_RESULT (0x8866)"; case 0x8867 /* GL_QUERY_RESULT_AVAILABLE */: return "GL_QUERY_RESULT_AVAILABLE (0x8867)"; case 0x8892 /* GL_ARRAY_BUFFER */: return "GL_ARRAY_BUFFER (0x8892)"; case 0x8893 /* GL_ELEMENT_ARRAY_BUFFER */: return "GL_ELEMENT_ARRAY_BUFFER (0x8893)"; case 0x8894 /* GL_ARRAY_BUFFER_BINDING */: return "GL_ARRAY_BUFFER_BINDING (0x8894)"; case 0x8895 /* GL_ELEMENT_ARRAY_BUFFER_BINDING */: return "GL_ELEMENT_ARRAY_BUFFER_BINDING (0x8895)"; case 0x8896 /* GL_VERTEX_ARRAY_BUFFER_BINDING */: return "GL_VERTEX_ARRAY_BUFFER_BINDING (0x8896)"; case 0x8897 /* GL_NORMAL_ARRAY_BUFFER_BINDING */: return "GL_NORMAL_ARRAY_BUFFER_BINDING (0x8897)"; case 0x8898 /* GL_COLOR_ARRAY_BUFFER_BINDING */: return "GL_COLOR_ARRAY_BUFFER_BINDING (0x8898)"; case 0x8899 /* GL_INDEX_ARRAY_BUFFER_BINDING */: return "GL_INDEX_ARRAY_BUFFER_BINDING (0x8899)"; case 0x889A /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */: return "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING (0x889A)"; case 0x889B /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */: return "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING (0x889B)"; case 0x889C /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */: return "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING (0x889C)"; case 0x889D /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */: return "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING (0x889D)"; case 0x889E /* GL_WEIGHT_ARRAY_BUFFER_BINDING */: return "GL_WEIGHT_ARRAY_BUFFER_BINDING (0x889E)"; case 0x889F /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */: return "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING (0x889F)"; case 0x88B8 /* GL_READ_ONLY */: return "GL_READ_ONLY (0x88B8)"; case 0x88B9 /* GL_WRITE_ONLY */: return "GL_WRITE_ONLY (0x88B9)"; case 0x88BA /* GL_READ_WRITE */: return "GL_READ_WRITE (0x88BA)"; case 0x88BB /* GL_BUFFER_ACCESS */: return "GL_BUFFER_ACCESS (0x88BB)"; case 0x88BC /* GL_BUFFER_MAPPED */: return "GL_BUFFER_MAPPED (0x88BC)"; case 0x88BD /* GL_BUFFER_MAP_POINTER */: return "GL_BUFFER_MAP_POINTER (0x88BD)"; case 0x88E0 /* GL_STREAM_DRAW */: return "GL_STREAM_DRAW (0x88E0)"; case 0x88E1 /* GL_STREAM_READ */: return "GL_STREAM_READ (0x88E1)"; case 0x88E2 /* GL_STREAM_COPY */: return "GL_STREAM_COPY (0x88E2)"; case 0x88E4 /* GL_STATIC_DRAW */: return "GL_STATIC_DRAW (0x88E4)"; case 0x88E5 /* GL_STATIC_READ */: return "GL_STATIC_READ (0x88E5)"; case 0x88E6 /* GL_STATIC_COPY */: return "GL_STATIC_COPY (0x88E6)"; case 0x88E8 /* GL_DYNAMIC_DRAW */: return "GL_DYNAMIC_DRAW (0x88E8)"; case 0x88E9 /* GL_DYNAMIC_READ */: return "GL_DYNAMIC_READ (0x88E9)"; case 0x88EA /* GL_DYNAMIC_COPY */: return "GL_DYNAMIC_COPY (0x88EA)"; case 0x8914 /* GL_SAMPLES_PASSED */: return "GL_SAMPLES_PASSED (0x8914)"; /* ----------------------------- GL_VERSION_2_0 ---------------------------- */ case 0x8622 /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */: return "GL_VERTEX_ATTRIB_ARRAY_ENABLED (0x8622)"; case 0x8623 /* GL_VERTEX_ATTRIB_ARRAY_SIZE */: return "GL_VERTEX_ATTRIB_ARRAY_SIZE (0x8623)"; case 0x8624 /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */: return "GL_VERTEX_ATTRIB_ARRAY_STRIDE (0x8624)"; case 0x8625 /* GL_VERTEX_ATTRIB_ARRAY_TYPE */: return "GL_VERTEX_ATTRIB_ARRAY_TYPE (0x8625)"; case 0x8626 /* GL_CURRENT_VERTEX_ATTRIB */: return "GL_CURRENT_VERTEX_ATTRIB (0x8626)"; //case 0x8642 /* GL_VERTEX_PROGRAM_POINT_SIZE */: return "GL_VERTEX_PROGRAM_POINT_SIZE (0x8642)"; case 0x8643 /* GL_VERTEX_PROGRAM_TWO_SIDE */: return "GL_VERTEX_PROGRAM_TWO_SIDE (0x8643)"; case 0x8645 /* GL_VERTEX_ATTRIB_ARRAY_POINTER */: return "GL_VERTEX_ATTRIB_ARRAY_POINTER (0x8645)"; case 0x8800 /* GL_STENCIL_BACK_FUNC */: return "GL_STENCIL_BACK_FUNC (0x8800)"; case 0x8801 /* GL_STENCIL_BACK_FAIL */: return "GL_STENCIL_BACK_FAIL (0x8801)"; case 0x8802 /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */: return "GL_STENCIL_BACK_PASS_DEPTH_FAIL (0x8802)"; case 0x8803 /* GL_STENCIL_BACK_PASS_DEPTH_PASS */: return "GL_STENCIL_BACK_PASS_DEPTH_PASS (0x8803)"; case 0x8824 /* GL_MAX_DRAW_BUFFERS */: return "GL_MAX_DRAW_BUFFERS (0x8824)"; case 0x8825 /* GL_DRAW_BUFFER0 */: return "GL_DRAW_BUFFER0 (0x8825)"; case 0x8826 /* GL_DRAW_BUFFER1 */: return "GL_DRAW_BUFFER1 (0x8826)"; case 0x8827 /* GL_DRAW_BUFFER2 */: return "GL_DRAW_BUFFER2 (0x8827)"; case 0x8828 /* GL_DRAW_BUFFER3 */: return "GL_DRAW_BUFFER3 (0x8828)"; case 0x8829 /* GL_DRAW_BUFFER4 */: return "GL_DRAW_BUFFER4 (0x8829)"; case 0x882A /* GL_DRAW_BUFFER5 */: return "GL_DRAW_BUFFER5 (0x882A)"; case 0x882B /* GL_DRAW_BUFFER6 */: return "GL_DRAW_BUFFER6 (0x882B)"; case 0x882C /* GL_DRAW_BUFFER7 */: return "GL_DRAW_BUFFER7 (0x882C)"; case 0x882D /* GL_DRAW_BUFFER8 */: return "GL_DRAW_BUFFER8 (0x882D)"; case 0x882E /* GL_DRAW_BUFFER9 */: return "GL_DRAW_BUFFER9 (0x882E)"; case 0x882F /* GL_DRAW_BUFFER10 */: return "GL_DRAW_BUFFER10 (0x882F)"; case 0x8830 /* GL_DRAW_BUFFER11 */: return "GL_DRAW_BUFFER11 (0x8830)"; case 0x8831 /* GL_DRAW_BUFFER12 */: return "GL_DRAW_BUFFER12 (0x8831)"; case 0x8832 /* GL_DRAW_BUFFER13 */: return "GL_DRAW_BUFFER13 (0x8832)"; case 0x8833 /* GL_DRAW_BUFFER14 */: return "GL_DRAW_BUFFER14 (0x8833)"; case 0x8834 /* GL_DRAW_BUFFER15 */: return "GL_DRAW_BUFFER15 (0x8834)"; case 0x883D /* GL_BLEND_EQUATION_ALPHA */: return "GL_BLEND_EQUATION_ALPHA (0x883D)"; case 0x8861 /* GL_POINT_SPRITE */: return "GL_POINT_SPRITE (0x8861)"; case 0x8862 /* GL_COORD_REPLACE */: return "GL_COORD_REPLACE (0x8862)"; case 0x8869 /* GL_MAX_VERTEX_ATTRIBS */: return "GL_MAX_VERTEX_ATTRIBS (0x8869)"; case 0x886A /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */: return "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED (0x886A)"; case 0x8871 /* GL_MAX_TEXTURE_COORDS */: return "GL_MAX_TEXTURE_COORDS (0x8871)"; case 0x8872 /* GL_MAX_TEXTURE_IMAGE_UNITS */: return "GL_MAX_TEXTURE_IMAGE_UNITS (0x8872)"; case 0x8B30 /* GL_FRAGMENT_SHADER */: return "GL_FRAGMENT_SHADER (0x8B30)"; case 0x8B31 /* GL_VERTEX_SHADER */: return "GL_VERTEX_SHADER (0x8B31)"; case 0x8B49 /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */: return "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS (0x8B49)"; case 0x8B4A /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */: return "GL_MAX_VERTEX_UNIFORM_COMPONENTS (0x8B4A)"; case 0x8B4B /* GL_MAX_VARYING_FLOATS */: return "GL_MAX_VARYING_FLOATS (0x8B4B)"; case 0x8B4C /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */: return "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS (0x8B4C)"; case 0x8B4D /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */: return "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS (0x8B4D)"; case 0x8B4F /* GL_SHADER_TYPE */: return "GL_SHADER_TYPE (0x8B4F)"; case 0x8B50 /* GL_FLOAT_VEC2 */: return "GL_FLOAT_VEC2 (0x8B50)"; case 0x8B51 /* GL_FLOAT_VEC3 */: return "GL_FLOAT_VEC3 (0x8B51)"; case 0x8B52 /* GL_FLOAT_VEC4 */: return "GL_FLOAT_VEC4 (0x8B52)"; case 0x8B53 /* GL_INT_VEC2 */: return "GL_INT_VEC2 (0x8B53)"; case 0x8B54 /* GL_INT_VEC3 */: return "GL_INT_VEC3 (0x8B54)"; case 0x8B55 /* GL_INT_VEC4 */: return "GL_INT_VEC4 (0x8B55)"; case 0x8B56 /* GL_BOOL */: return "GL_BOOL (0x8B56)"; case 0x8B57 /* GL_BOOL_VEC2 */: return "GL_BOOL_VEC2 (0x8B57)"; case 0x8B58 /* GL_BOOL_VEC3 */: return "GL_BOOL_VEC3 (0x8B58)"; case 0x8B59 /* GL_BOOL_VEC4 */: return "GL_BOOL_VEC4 (0x8B59)"; case 0x8B5A /* GL_FLOAT_MAT2 */: return "GL_FLOAT_MAT2 (0x8B5A)"; case 0x8B5B /* GL_FLOAT_MAT3 */: return "GL_FLOAT_MAT3 (0x8B5B)"; case 0x8B5C /* GL_FLOAT_MAT4 */: return "GL_FLOAT_MAT4 (0x8B5C)"; case 0x8B5D /* GL_SAMPLER_1D */: return "GL_SAMPLER_1D (0x8B5D)"; case 0x8B5E /* GL_SAMPLER_2D */: return "GL_SAMPLER_2D (0x8B5E)"; case 0x8B5F /* GL_SAMPLER_3D */: return "GL_SAMPLER_3D (0x8B5F)"; case 0x8B60 /* GL_SAMPLER_CUBE */: return "GL_SAMPLER_CUBE (0x8B60)"; case 0x8B61 /* GL_SAMPLER_1D_SHADOW */: return "GL_SAMPLER_1D_SHADOW (0x8B61)"; case 0x8B62 /* GL_SAMPLER_2D_SHADOW */: return "GL_SAMPLER_2D_SHADOW (0x8B62)"; case 0x8B80 /* GL_DELETE_STATUS */: return "GL_DELETE_STATUS (0x8B80)"; case 0x8B81 /* GL_COMPILE_STATUS */: return "GL_COMPILE_STATUS (0x8B81)"; case 0x8B82 /* GL_LINK_STATUS */: return "GL_LINK_STATUS (0x8B82)"; case 0x8B83 /* GL_VALIDATE_STATUS */: return "GL_VALIDATE_STATUS (0x8B83)"; case 0x8B84 /* GL_INFO_LOG_LENGTH */: return "GL_INFO_LOG_LENGTH (0x8B84)"; case 0x8B85 /* GL_ATTACHED_SHADERS */: return "GL_ATTACHED_SHADERS (0x8B85)"; case 0x8B86 /* GL_ACTIVE_UNIFORMS */: return "GL_ACTIVE_UNIFORMS (0x8B86)"; case 0x8B87 /* GL_ACTIVE_UNIFORM_MAX_LENGTH */: return "GL_ACTIVE_UNIFORM_MAX_LENGTH (0x8B87)"; case 0x8B88 /* GL_SHADER_SOURCE_LENGTH */: return "GL_SHADER_SOURCE_LENGTH (0x8B88)"; case 0x8B89 /* GL_ACTIVE_ATTRIBUTES */: return "GL_ACTIVE_ATTRIBUTES (0x8B89)"; case 0x8B8A /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */: return "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH (0x8B8A)"; case 0x8B8B /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */: return "GL_FRAGMENT_SHADER_DERIVATIVE_HINT (0x8B8B)"; case 0x8B8C /* GL_SHADING_LANGUAGE_VERSION */: return "GL_SHADING_LANGUAGE_VERSION (0x8B8C)"; case 0x8B8D /* GL_CURRENT_PROGRAM */: return "GL_CURRENT_PROGRAM (0x8B8D)"; case 0x8CA0 /* GL_POINT_SPRITE_COORD_ORIGIN */: return "GL_POINT_SPRITE_COORD_ORIGIN (0x8CA0)"; case 0x8CA1 /* GL_LOWER_LEFT */: return "GL_LOWER_LEFT (0x8CA1)"; case 0x8CA2 /* GL_UPPER_LEFT */: return "GL_UPPER_LEFT (0x8CA2)"; case 0x8CA3 /* GL_STENCIL_BACK_REF */: return "GL_STENCIL_BACK_REF (0x8CA3)"; case 0x8CA4 /* GL_STENCIL_BACK_VALUE_MASK */: return "GL_STENCIL_BACK_VALUE_MASK (0x8CA4)"; case 0x8CA5 /* GL_STENCIL_BACK_WRITEMASK */: return "GL_STENCIL_BACK_WRITEMASK (0x8CA5)"; /* ----------------------------- GL_VERSION_2_1 ---------------------------- */ case 0x845F /* GL_CURRENT_RASTER_SECONDARY_COLOR */: return "GL_CURRENT_RASTER_SECONDARY_COLOR (0x845F)"; case 0x88EB /* GL_PIXEL_PACK_BUFFER */: return "GL_PIXEL_PACK_BUFFER (0x88EB)"; case 0x88EC /* GL_PIXEL_UNPACK_BUFFER */: return "GL_PIXEL_UNPACK_BUFFER (0x88EC)"; case 0x88ED /* GL_PIXEL_PACK_BUFFER_BINDING */: return "GL_PIXEL_PACK_BUFFER_BINDING (0x88ED)"; case 0x88EF /* GL_PIXEL_UNPACK_BUFFER_BINDING */: return "GL_PIXEL_UNPACK_BUFFER_BINDING (0x88EF)"; case 0x8B65 /* GL_FLOAT_MAT2x3 */: return "GL_FLOAT_MAT2x3 (0x8B65)"; case 0x8B66 /* GL_FLOAT_MAT2x4 */: return "GL_FLOAT_MAT2x4 (0x8B66)"; case 0x8B67 /* GL_FLOAT_MAT3x2 */: return "GL_FLOAT_MAT3x2 (0x8B67)"; case 0x8B68 /* GL_FLOAT_MAT3x4 */: return "GL_FLOAT_MAT3x4 (0x8B68)"; case 0x8B69 /* GL_FLOAT_MAT4x2 */: return "GL_FLOAT_MAT4x2 (0x8B69)"; case 0x8B6A /* GL_FLOAT_MAT4x3 */: return "GL_FLOAT_MAT4x3 (0x8B6A)"; case 0x8C40 /* GL_SRGB */: return "GL_SRGB (0x8C40)"; case 0x8C41 /* GL_SRGB8 */: return "GL_SRGB8 (0x8C41)"; case 0x8C42 /* GL_SRGB_ALPHA */: return "GL_SRGB_ALPHA (0x8C42)"; case 0x8C43 /* GL_SRGB8_ALPHA8 */: return "GL_SRGB8_ALPHA8 (0x8C43)"; case 0x8C44 /* GL_SLUMINANCE_ALPHA */: return "GL_SLUMINANCE_ALPHA (0x8C44)"; case 0x8C45 /* GL_SLUMINANCE8_ALPHA8 */: return "GL_SLUMINANCE8_ALPHA8 (0x8C45)"; case 0x8C46 /* GL_SLUMINANCE */: return "GL_SLUMINANCE (0x8C46)"; case 0x8C47 /* GL_SLUMINANCE8 */: return "GL_SLUMINANCE8 (0x8C47)"; case 0x8C48 /* GL_COMPRESSED_SRGB */: return "GL_COMPRESSED_SRGB (0x8C48)"; case 0x8C49 /* GL_COMPRESSED_SRGB_ALPHA */: return "GL_COMPRESSED_SRGB_ALPHA (0x8C49)"; case 0x8C4A /* GL_COMPRESSED_SLUMINANCE */: return "GL_COMPRESSED_SLUMINANCE (0x8C4A)"; case 0x8C4B /* GL_COMPRESSED_SLUMINANCE_ALPHA */: return "GL_COMPRESSED_SLUMINANCE_ALPHA (0x8C4B)"; /* ----------------------------- GL_VERSION_3_0 ---------------------------- */ //case 0x0001 /* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */: return "GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT (0x0001)"; case 0x821B /* GL_MAJOR_VERSION */: return "GL_MAJOR_VERSION (0x821B)"; case 0x821C /* GL_MINOR_VERSION */: return "GL_MINOR_VERSION (0x821C)"; case 0x821D /* GL_NUM_EXTENSIONS */: return "GL_NUM_EXTENSIONS (0x821D)"; case 0x821E /* GL_CONTEXT_FLAGS */: return "GL_CONTEXT_FLAGS (0x821E)"; case 0x8223 /* GL_DEPTH_BUFFER */: return "GL_DEPTH_BUFFER (0x8223)"; case 0x8224 /* GL_STENCIL_BUFFER */: return "GL_STENCIL_BUFFER (0x8224)"; case 0x8225 /* GL_COMPRESSED_RED */: return "GL_COMPRESSED_RED (0x8225)"; case 0x8226 /* GL_COMPRESSED_RG */: return "GL_COMPRESSED_RG (0x8226)"; case 0x8814 /* GL_RGBA32F */: return "GL_RGBA32F (0x8814)"; //case 0x8814 /* GL_RGBA_FLOAT32_APPLE */: return "GL_RGBA_FLOAT32_APPLE (0x8814)"; //case 0x8814 /* GL_RGBA32F_ARB */: return "GL_RGBA32F_ARB (0x8814)"; case 0x8815 /* GL_RGB32F */: return "GL_RGB32F (0x8815)"; case 0x881A /* GL_RGBA16F */: return "GL_RGBA16F (0x881A)"; case 0x881B /* GL_RGB16F */: return "GL_RGB16F (0x881B)"; case 0x88FD /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */: return "GL_VERTEX_ATTRIB_ARRAY_INTEGER (0x88FD)"; case 0x88FF /* GL_MAX_ARRAY_TEXTURE_LAYERS */: return "GL_MAX_ARRAY_TEXTURE_LAYERS (0x88FF)"; case 0x8904 /* GL_MIN_PROGRAM_TEXEL_OFFSET */: return "GL_MIN_PROGRAM_TEXEL_OFFSET (0x8904)"; case 0x8905 /* GL_MAX_PROGRAM_TEXEL_OFFSET */: return "GL_MAX_PROGRAM_TEXEL_OFFSET (0x8905)"; case 0x891A /* GL_CLAMP_VERTEX_COLOR */: return "GL_CLAMP_VERTEX_COLOR (0x891A)"; case 0x891B /* GL_CLAMP_FRAGMENT_COLOR */: return "GL_CLAMP_FRAGMENT_COLOR (0x891B)"; case 0x891C /* GL_CLAMP_READ_COLOR */: return "GL_CLAMP_READ_COLOR (0x891C)"; case 0x891D /* GL_FIXED_ONLY */: return "GL_FIXED_ONLY (0x891D)"; case 0x8C10 /* GL_TEXTURE_RED_TYPE */: return "GL_TEXTURE_RED_TYPE (0x8C10)"; case 0x8C11 /* GL_TEXTURE_GREEN_TYPE */: return "GL_TEXTURE_GREEN_TYPE (0x8C11)"; case 0x8C12 /* GL_TEXTURE_BLUE_TYPE */: return "GL_TEXTURE_BLUE_TYPE (0x8C12)"; case 0x8C13 /* GL_TEXTURE_ALPHA_TYPE */: return "GL_TEXTURE_ALPHA_TYPE (0x8C13)"; case 0x8C14 /* GL_TEXTURE_LUMINANCE_TYPE */: return "GL_TEXTURE_LUMINANCE_TYPE (0x8C14)"; case 0x8C15 /* GL_TEXTURE_INTENSITY_TYPE */: return "GL_TEXTURE_INTENSITY_TYPE (0x8C15)"; case 0x8C16 /* GL_TEXTURE_DEPTH_TYPE */: return "GL_TEXTURE_DEPTH_TYPE (0x8C16)"; case 0x8C18 /* GL_TEXTURE_1D_ARRAY */: return "GL_TEXTURE_1D_ARRAY (0x8C18)"; case 0x8C19 /* GL_PROXY_TEXTURE_1D_ARRAY */: return "GL_PROXY_TEXTURE_1D_ARRAY (0x8C19)"; case 0x8C1A /* GL_TEXTURE_2D_ARRAY */: return "GL_TEXTURE_2D_ARRAY (0x8C1A)"; case 0x8C1B /* GL_PROXY_TEXTURE_2D_ARRAY */: return "GL_PROXY_TEXTURE_2D_ARRAY (0x8C1B)"; case 0x8C1C /* GL_TEXTURE_BINDING_1D_ARRAY */: return "GL_TEXTURE_BINDING_1D_ARRAY (0x8C1C)"; case 0x8C1D /* GL_TEXTURE_BINDING_2D_ARRAY */: return "GL_TEXTURE_BINDING_2D_ARRAY (0x8C1D)"; case 0x8C3A /* GL_R11F_G11F_B10F */: return "GL_R11F_G11F_B10F (0x8C3A)"; case 0x8C3B /* GL_UNSIGNED_INT_10F_11F_11F_REV */: return "GL_UNSIGNED_INT_10F_11F_11F_REV (0x8C3B)"; case 0x8C3D /* GL_RGB9_E5 */: return "GL_RGB9_E5 (0x8C3D)"; case 0x8C3E /* GL_UNSIGNED_INT_5_9_9_9_REV */: return "GL_UNSIGNED_INT_5_9_9_9_REV (0x8C3E)"; case 0x8C3F /* GL_TEXTURE_SHARED_SIZE */: return "GL_TEXTURE_SHARED_SIZE (0x8C3F)"; case 0x8C76 /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */: return "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH (0x8C76)"; case 0x8C7F /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */: return "GL_TRANSFORM_FEEDBACK_BUFFER_MODE (0x8C7F)"; case 0x8C80 /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS (0x8C80)"; case 0x8C83 /* GL_TRANSFORM_FEEDBACK_VARYINGS */: return "GL_TRANSFORM_FEEDBACK_VARYINGS (0x8C83)"; case 0x8C84 /* GL_TRANSFORM_FEEDBACK_BUFFER_START */: return "GL_TRANSFORM_FEEDBACK_BUFFER_START (0x8C84)"; case 0x8C85 /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */: return "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE (0x8C85)"; case 0x8C87 /* GL_PRIMITIVES_GENERATED */: return "GL_PRIMITIVES_GENERATED (0x8C87)"; case 0x8C88 /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */: return "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN (0x8C88)"; case 0x8C89 /* GL_RASTERIZER_DISCARD */: return "GL_RASTERIZER_DISCARD (0x8C89)"; case 0x8C8A /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */: return "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS (0x8C8A)"; case 0x8C8B /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS (0x8C8B)"; case 0x8C8C /* GL_INTERLEAVED_ATTRIBS */: return "GL_INTERLEAVED_ATTRIBS (0x8C8C)"; case 0x8C8D /* GL_SEPARATE_ATTRIBS */: return "GL_SEPARATE_ATTRIBS (0x8C8D)"; case 0x8C8E /* GL_TRANSFORM_FEEDBACK_BUFFER */: return "GL_TRANSFORM_FEEDBACK_BUFFER (0x8C8E)"; case 0x8C8F /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */: return "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING (0x8C8F)"; case 0x8D70 /* GL_RGBA32UI */: return "GL_RGBA32UI (0x8D70)"; case 0x8D71 /* GL_RGB32UI */: return "GL_RGB32UI (0x8D71)"; case 0x8D76 /* GL_RGBA16UI */: return "GL_RGBA16UI (0x8D76)"; case 0x8D77 /* GL_RGB16UI */: return "GL_RGB16UI (0x8D77)"; case 0x8D7C /* GL_RGBA8UI */: return "GL_RGBA8UI (0x8D7C)"; case 0x8D7D /* GL_RGB8UI */: return "GL_RGB8UI (0x8D7D)"; case 0x8D82 /* GL_RGBA32I */: return "GL_RGBA32I (0x8D82)"; case 0x8D83 /* GL_RGB32I */: return "GL_RGB32I (0x8D83)"; case 0x8D88 /* GL_RGBA16I */: return "GL_RGBA16I (0x8D88)"; case 0x8D89 /* GL_RGB16I */: return "GL_RGB16I (0x8D89)"; case 0x8D8E /* GL_RGBA8I */: return "GL_RGBA8I (0x8D8E)"; case 0x8D8F /* GL_RGB8I */: return "GL_RGB8I (0x8D8F)"; case 0x8D94 /* GL_RED_INTEGER */: return "GL_RED_INTEGER (0x8D94)"; case 0x8D95 /* GL_GREEN_INTEGER */: return "GL_GREEN_INTEGER (0x8D95)"; case 0x8D96 /* GL_BLUE_INTEGER */: return "GL_BLUE_INTEGER (0x8D96)"; case 0x8D97 /* GL_ALPHA_INTEGER */: return "GL_ALPHA_INTEGER (0x8D97)"; case 0x8D98 /* GL_RGB_INTEGER */: return "GL_RGB_INTEGER (0x8D98)"; case 0x8D99 /* GL_RGBA_INTEGER */: return "GL_RGBA_INTEGER (0x8D99)"; case 0x8D9A /* GL_BGR_INTEGER */: return "GL_BGR_INTEGER (0x8D9A)"; case 0x8D9B /* GL_BGRA_INTEGER */: return "GL_BGRA_INTEGER (0x8D9B)"; case 0x8DC0 /* GL_SAMPLER_1D_ARRAY */: return "GL_SAMPLER_1D_ARRAY (0x8DC0)"; case 0x8DC1 /* GL_SAMPLER_2D_ARRAY */: return "GL_SAMPLER_2D_ARRAY (0x8DC1)"; case 0x8DC3 /* GL_SAMPLER_1D_ARRAY_SHADOW */: return "GL_SAMPLER_1D_ARRAY_SHADOW (0x8DC3)"; case 0x8DC4 /* GL_SAMPLER_2D_ARRAY_SHADOW */: return "GL_SAMPLER_2D_ARRAY_SHADOW (0x8DC4)"; case 0x8DC5 /* GL_SAMPLER_CUBE_SHADOW */: return "GL_SAMPLER_CUBE_SHADOW (0x8DC5)"; case 0x8DC6 /* GL_UNSIGNED_INT_VEC2 */: return "GL_UNSIGNED_INT_VEC2 (0x8DC6)"; case 0x8DC7 /* GL_UNSIGNED_INT_VEC3 */: return "GL_UNSIGNED_INT_VEC3 (0x8DC7)"; case 0x8DC8 /* GL_UNSIGNED_INT_VEC4 */: return "GL_UNSIGNED_INT_VEC4 (0x8DC8)"; case 0x8DC9 /* GL_INT_SAMPLER_1D */: return "GL_INT_SAMPLER_1D (0x8DC9)"; case 0x8DCA /* GL_INT_SAMPLER_2D */: return "GL_INT_SAMPLER_2D (0x8DCA)"; case 0x8DCB /* GL_INT_SAMPLER_3D */: return "GL_INT_SAMPLER_3D (0x8DCB)"; case 0x8DCC /* GL_INT_SAMPLER_CUBE */: return "GL_INT_SAMPLER_CUBE (0x8DCC)"; case 0x8DCE /* GL_INT_SAMPLER_1D_ARRAY */: return "GL_INT_SAMPLER_1D_ARRAY (0x8DCE)"; case 0x8DCF /* GL_INT_SAMPLER_2D_ARRAY */: return "GL_INT_SAMPLER_2D_ARRAY (0x8DCF)"; case 0x8DD1 /* GL_UNSIGNED_INT_SAMPLER_1D */: return "GL_UNSIGNED_INT_SAMPLER_1D (0x8DD1)"; case 0x8DD2 /* GL_UNSIGNED_INT_SAMPLER_2D */: return "GL_UNSIGNED_INT_SAMPLER_2D (0x8DD2)"; case 0x8DD3 /* GL_UNSIGNED_INT_SAMPLER_3D */: return "GL_UNSIGNED_INT_SAMPLER_3D (0x8DD3)"; case 0x8DD4 /* GL_UNSIGNED_INT_SAMPLER_CUBE */: return "GL_UNSIGNED_INT_SAMPLER_CUBE (0x8DD4)"; case 0x8DD6 /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */: return "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY (0x8DD6)"; case 0x8DD7 /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */: return "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY (0x8DD7)"; case 0x8E13 /* GL_QUERY_WAIT */: return "GL_QUERY_WAIT (0x8E13)"; case 0x8E14 /* GL_QUERY_NO_WAIT */: return "GL_QUERY_NO_WAIT (0x8E14)"; case 0x8E15 /* GL_QUERY_BY_REGION_WAIT */: return "GL_QUERY_BY_REGION_WAIT (0x8E15)"; case 0x8E16 /* GL_QUERY_BY_REGION_NO_WAIT */: return "GL_QUERY_BY_REGION_NO_WAIT (0x8E16)"; /* ----------------------------- GL_VERSION_3_1 ---------------------------- */ case 0x84F5 /* GL_TEXTURE_RECTANGLE */: return "GL_TEXTURE_RECTANGLE (0x84F5)"; case 0x84F6 /* GL_TEXTURE_BINDING_RECTANGLE */: return "GL_TEXTURE_BINDING_RECTANGLE (0x84F6)"; case 0x84F7 /* GL_PROXY_TEXTURE_RECTANGLE */: return "GL_PROXY_TEXTURE_RECTANGLE (0x84F7)"; case 0x84F8 /* GL_MAX_RECTANGLE_TEXTURE_SIZE */: return "GL_MAX_RECTANGLE_TEXTURE_SIZE (0x84F8)"; case 0x8B63 /* GL_SAMPLER_2D_RECT */: return "GL_SAMPLER_2D_RECT (0x8B63)"; case 0x8B64 /* GL_SAMPLER_2D_RECT_SHADOW */: return "GL_SAMPLER_2D_RECT_SHADOW (0x8B64)"; case 0x8C2A /* GL_TEXTURE_BUFFER */: return "GL_TEXTURE_BUFFER (0x8C2A)"; case 0x8C2B /* GL_MAX_TEXTURE_BUFFER_SIZE */: return "GL_MAX_TEXTURE_BUFFER_SIZE (0x8C2B)"; case 0x8C2C /* GL_TEXTURE_BINDING_BUFFER */: return "GL_TEXTURE_BINDING_BUFFER (0x8C2C)"; case 0x8C2D /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */: return "GL_TEXTURE_BUFFER_DATA_STORE_BINDING (0x8C2D)"; case 0x8C2E /* GL_TEXTURE_BUFFER_FORMAT */: return "GL_TEXTURE_BUFFER_FORMAT (0x8C2E)"; case 0x8DC2 /* GL_SAMPLER_BUFFER */: return "GL_SAMPLER_BUFFER (0x8DC2)"; case 0x8DCD /* GL_INT_SAMPLER_2D_RECT */: return "GL_INT_SAMPLER_2D_RECT (0x8DCD)"; case 0x8DD0 /* GL_INT_SAMPLER_BUFFER */: return "GL_INT_SAMPLER_BUFFER (0x8DD0)"; case 0x8DD5 /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */: return "GL_UNSIGNED_INT_SAMPLER_2D_RECT (0x8DD5)"; case 0x8DD8 /* GL_UNSIGNED_INT_SAMPLER_BUFFER */: return "GL_UNSIGNED_INT_SAMPLER_BUFFER (0x8DD8)"; case 0x8F90 /* GL_RED_SNORM */: return "GL_RED_SNORM (0x8F90)"; case 0x8F91 /* GL_RG_SNORM */: return "GL_RG_SNORM (0x8F91)"; case 0x8F92 /* GL_RGB_SNORM */: return "GL_RGB_SNORM (0x8F92)"; case 0x8F93 /* GL_RGBA_SNORM */: return "GL_RGBA_SNORM (0x8F93)"; case 0x8F94 /* GL_R8_SNORM */: return "GL_R8_SNORM (0x8F94)"; case 0x8F95 /* GL_RG8_SNORM */: return "GL_RG8_SNORM (0x8F95)"; case 0x8F96 /* GL_RGB8_SNORM */: return "GL_RGB8_SNORM (0x8F96)"; case 0x8F97 /* GL_RGBA8_SNORM */: return "GL_RGBA8_SNORM (0x8F97)"; case 0x8F98 /* GL_R16_SNORM */: return "GL_R16_SNORM (0x8F98)"; case 0x8F99 /* GL_RG16_SNORM */: return "GL_RG16_SNORM (0x8F99)"; case 0x8F9A /* GL_RGB16_SNORM */: return "GL_RGB16_SNORM (0x8F9A)"; case 0x8F9B /* GL_RGBA16_SNORM */: return "GL_RGBA16_SNORM (0x8F9B)"; case 0x8F9C /* GL_SIGNED_NORMALIZED */: return "GL_SIGNED_NORMALIZED (0x8F9C)"; case 0x8F9D /* GL_PRIMITIVE_RESTART */: return "GL_PRIMITIVE_RESTART (0x8F9D)"; case 0x8F9E /* GL_PRIMITIVE_RESTART_INDEX */: return "GL_PRIMITIVE_RESTART_INDEX (0x8F9E)"; case 0x911F /* GL_BUFFER_ACCESS_FLAGS */: return "GL_BUFFER_ACCESS_FLAGS (0x911F)"; case 0x9120 /* GL_BUFFER_MAP_LENGTH */: return "GL_BUFFER_MAP_LENGTH (0x9120)"; case 0x9121 /* GL_BUFFER_MAP_OFFSET */: return "GL_BUFFER_MAP_OFFSET (0x9121)"; /* ----------------------------- GL_VERSION_3_2 ---------------------------- */ //case 0x00000001 /* GL_CONTEXT_CORE_PROFILE_BIT */: return "GL_CONTEXT_CORE_PROFILE_BIT (0x00000001)"; //case 0x00000002 /* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT */: return "GL_CONTEXT_COMPATIBILITY_PROFILE_BIT (0x00000002)"; case 0x000A /* GL_LINES_ADJACENCY */: return "GL_LINES_ADJACENCY (0x000A)"; case 0x000B /* GL_LINE_STRIP_ADJACENCY */: return "GL_LINE_STRIP_ADJACENCY (0x000B)"; case 0x000C /* GL_TRIANGLES_ADJACENCY */: return "GL_TRIANGLES_ADJACENCY (0x000C)"; case 0x000D /* GL_TRIANGLE_STRIP_ADJACENCY */: return "GL_TRIANGLE_STRIP_ADJACENCY (0x000D)"; case 0x8642 /* GL_PROGRAM_POINT_SIZE */: return "GL_PROGRAM_POINT_SIZE (0x8642)"; //case 0x8642 /* GL_PROGRAM_POINT_SIZE_ARB */: return "GL_PROGRAM_POINT_SIZE_ARB (0x8642)"; case 0x8916 /* GL_GEOMETRY_VERTICES_OUT */: return "GL_GEOMETRY_VERTICES_OUT (0x8916)"; case 0x8917 /* GL_GEOMETRY_INPUT_TYPE */: return "GL_GEOMETRY_INPUT_TYPE (0x8917)"; case 0x8918 /* GL_GEOMETRY_OUTPUT_TYPE */: return "GL_GEOMETRY_OUTPUT_TYPE (0x8918)"; case 0x8C29 /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */: return "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS (0x8C29)"; case 0x8DA7 /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */: return "GL_FRAMEBUFFER_ATTACHMENT_LAYERED (0x8DA7)"; case 0x8DA8 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS (0x8DA8)"; case 0x8DD9 /* GL_GEOMETRY_SHADER */: return "GL_GEOMETRY_SHADER (0x8DD9)"; case 0x8DDF /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */: return "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS (0x8DDF)"; case 0x8DE0 /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */: return "GL_MAX_GEOMETRY_OUTPUT_VERTICES (0x8DE0)"; case 0x8DE1 /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */: return "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS (0x8DE1)"; case 0x9122 /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */: return "GL_MAX_VERTEX_OUTPUT_COMPONENTS (0x9122)"; case 0x9123 /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */: return "GL_MAX_GEOMETRY_INPUT_COMPONENTS (0x9123)"; case 0x9124 /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */: return "GL_MAX_GEOMETRY_OUTPUT_COMPONENTS (0x9124)"; case 0x9125 /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */: return "GL_MAX_FRAGMENT_INPUT_COMPONENTS (0x9125)"; case 0x9126 /* GL_CONTEXT_PROFILE_MASK */: return "GL_CONTEXT_PROFILE_MASK (0x9126)"; /* ----------------------------- GL_VERSION_3_3 ---------------------------- */ case 0x88FE /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR */: return "GL_VERTEX_ATTRIB_ARRAY_DIVISOR (0x88FE)"; case 0x8E42 /* GL_TEXTURE_SWIZZLE_R */: return "GL_TEXTURE_SWIZZLE_R (0x8E42)"; case 0x8E43 /* GL_TEXTURE_SWIZZLE_G */: return "GL_TEXTURE_SWIZZLE_G (0x8E43)"; case 0x8E44 /* GL_TEXTURE_SWIZZLE_B */: return "GL_TEXTURE_SWIZZLE_B (0x8E44)"; case 0x8E45 /* GL_TEXTURE_SWIZZLE_A */: return "GL_TEXTURE_SWIZZLE_A (0x8E45)"; case 0x8E46 /* GL_TEXTURE_SWIZZLE_RGBA */: return "GL_TEXTURE_SWIZZLE_RGBA (0x8E46)"; case 0x906F /* GL_RGB10_A2UI */: return "GL_RGB10_A2UI (0x906F)"; /* ----------------------------- GL_VERSION_4_0 ---------------------------- */ case 0x887F /* GL_GEOMETRY_SHADER_INVOCATIONS */: return "GL_GEOMETRY_SHADER_INVOCATIONS (0x887F)"; case 0x8C36 /* GL_SAMPLE_SHADING */: return "GL_SAMPLE_SHADING (0x8C36)"; case 0x8C37 /* GL_MIN_SAMPLE_SHADING_VALUE */: return "GL_MIN_SAMPLE_SHADING_VALUE (0x8C37)"; case 0x8E5A /* GL_MAX_GEOMETRY_SHADER_INVOCATIONS */: return "GL_MAX_GEOMETRY_SHADER_INVOCATIONS (0x8E5A)"; case 0x8E5B /* GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */: return "GL_MIN_FRAGMENT_INTERPOLATION_OFFSET (0x8E5B)"; case 0x8E5C /* GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */: return "GL_MAX_FRAGMENT_INTERPOLATION_OFFSET (0x8E5C)"; case 0x8E5D /* GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */: return "GL_FRAGMENT_INTERPOLATION_OFFSET_BITS (0x8E5D)"; case 0x8E5E /* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET */: return "GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET (0x8E5E)"; case 0x8E5F /* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET (0x8E5F)"; case 0x8F9F /* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS (0x8F9F)"; case 0x9009 /* GL_TEXTURE_CUBE_MAP_ARRAY */: return "GL_TEXTURE_CUBE_MAP_ARRAY (0x9009)"; case 0x900A /* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY */: return "GL_TEXTURE_BINDING_CUBE_MAP_ARRAY (0x900A)"; case 0x900B /* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY */: return "GL_PROXY_TEXTURE_CUBE_MAP_ARRAY (0x900B)"; case 0x900C /* GL_SAMPLER_CUBE_MAP_ARRAY */: return "GL_SAMPLER_CUBE_MAP_ARRAY (0x900C)"; case 0x900D /* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW */: return "GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW (0x900D)"; case 0x900E /* GL_INT_SAMPLER_CUBE_MAP_ARRAY */: return "GL_INT_SAMPLER_CUBE_MAP_ARRAY (0x900E)"; case 0x900F /* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY */: return "GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY (0x900F)"; /* ----------------------------- GL_VERSION_4_2 ---------------------------- */ case 0x8E8C /* GL_COMPRESSED_RGBA_BPTC_UNORM */: return "GL_COMPRESSED_RGBA_BPTC_UNORM (0x8E8C)"; case 0x8E8D /* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM */: return "GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM (0x8E8D)"; case 0x8E8E /* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT */: return "GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT (0x8E8E)"; case 0x8E8F /* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT */: return "GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT (0x8E8F)"; /* ----------------------------- GL_VERSION_4_3 ---------------------------- */ case 0x82E9 /* GL_NUM_SHADING_LANGUAGE_VERSIONS */: return "GL_NUM_SHADING_LANGUAGE_VERSIONS (0x82E9)"; case 0x874E /* GL_VERTEX_ATTRIB_ARRAY_LONG */: return "GL_VERTEX_ATTRIB_ARRAY_LONG (0x874E)"; /* -------------------------- GL_3DFX_multisample -------------------------- */ case 0x86B2 /* GL_MULTISAMPLE_3DFX */: return "GL_MULTISAMPLE_3DFX (0x86B2)"; case 0x86B3 /* GL_SAMPLE_BUFFERS_3DFX */: return "GL_SAMPLE_BUFFERS_3DFX (0x86B3)"; case 0x86B4 /* GL_SAMPLES_3DFX */: return "GL_SAMPLES_3DFX (0x86B4)"; //case 0x20000000 /* GL_MULTISAMPLE_BIT_3DFX */: return "GL_MULTISAMPLE_BIT_3DFX (0x20000000)"; /* ---------------------------- GL_3DFX_tbuffer ---------------------------- */ /* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */ case 0x86B0 /* GL_COMPRESSED_RGB_FXT1_3DFX */: return "GL_COMPRESSED_RGB_FXT1_3DFX (0x86B0)"; case 0x86B1 /* GL_COMPRESSED_RGBA_FXT1_3DFX */: return "GL_COMPRESSED_RGBA_FXT1_3DFX (0x86B1)"; /* ----------------------- GL_AMD_blend_minmax_factor ---------------------- */ case 0x901C /* GL_FACTOR_MIN_AMD */: return "GL_FACTOR_MIN_AMD (0x901C)"; case 0x901D /* GL_FACTOR_MAX_AMD */: return "GL_FACTOR_MAX_AMD (0x901D)"; /* ----------------------- GL_AMD_conservative_depth ----------------------- */ /* -------------------------- GL_AMD_debug_output -------------------------- */ case 0x9143 /* GL_MAX_DEBUG_MESSAGE_LENGTH_AMD */: return "GL_MAX_DEBUG_MESSAGE_LENGTH_AMD (0x9143)"; case 0x9144 /* GL_MAX_DEBUG_LOGGED_MESSAGES_AMD */: return "GL_MAX_DEBUG_LOGGED_MESSAGES_AMD (0x9144)"; case 0x9145 /* GL_DEBUG_LOGGED_MESSAGES_AMD */: return "GL_DEBUG_LOGGED_MESSAGES_AMD (0x9145)"; case 0x9146 /* GL_DEBUG_SEVERITY_HIGH_AMD */: return "GL_DEBUG_SEVERITY_HIGH_AMD (0x9146)"; case 0x9147 /* GL_DEBUG_SEVERITY_MEDIUM_AMD */: return "GL_DEBUG_SEVERITY_MEDIUM_AMD (0x9147)"; case 0x9148 /* GL_DEBUG_SEVERITY_LOW_AMD */: return "GL_DEBUG_SEVERITY_LOW_AMD (0x9148)"; case 0x9149 /* GL_DEBUG_CATEGORY_API_ERROR_AMD */: return "GL_DEBUG_CATEGORY_API_ERROR_AMD (0x9149)"; case 0x914A /* GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD */: return "GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD (0x914A)"; case 0x914B /* GL_DEBUG_CATEGORY_DEPRECATION_AMD */: return "GL_DEBUG_CATEGORY_DEPRECATION_AMD (0x914B)"; case 0x914C /* GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD */: return "GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD (0x914C)"; case 0x914D /* GL_DEBUG_CATEGORY_PERFORMANCE_AMD */: return "GL_DEBUG_CATEGORY_PERFORMANCE_AMD (0x914D)"; case 0x914E /* GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD */: return "GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD (0x914E)"; case 0x914F /* GL_DEBUG_CATEGORY_APPLICATION_AMD */: return "GL_DEBUG_CATEGORY_APPLICATION_AMD (0x914F)"; case 0x9150 /* GL_DEBUG_CATEGORY_OTHER_AMD */: return "GL_DEBUG_CATEGORY_OTHER_AMD (0x9150)"; /* ---------------------- GL_AMD_depth_clamp_separate ---------------------- */ case 0x901E /* GL_DEPTH_CLAMP_NEAR_AMD */: return "GL_DEPTH_CLAMP_NEAR_AMD (0x901E)"; case 0x901F /* GL_DEPTH_CLAMP_FAR_AMD */: return "GL_DEPTH_CLAMP_FAR_AMD (0x901F)"; /* ----------------------- GL_AMD_draw_buffers_blend ----------------------- */ /* ----------------------- GL_AMD_multi_draw_indirect ---------------------- */ /* ------------------------- GL_AMD_name_gen_delete ------------------------ */ case 0x9151 /* GL_DATA_BUFFER_AMD */: return "GL_DATA_BUFFER_AMD (0x9151)"; case 0x9152 /* GL_PERFORMANCE_MONITOR_AMD */: return "GL_PERFORMANCE_MONITOR_AMD (0x9152)"; case 0x9153 /* GL_QUERY_OBJECT_AMD */: return "GL_QUERY_OBJECT_AMD (0x9153)"; case 0x9154 /* GL_VERTEX_ARRAY_OBJECT_AMD */: return "GL_VERTEX_ARRAY_OBJECT_AMD (0x9154)"; case 0x9155 /* GL_SAMPLER_OBJECT_AMD */: return "GL_SAMPLER_OBJECT_AMD (0x9155)"; /* ----------------------- GL_AMD_performance_monitor ---------------------- */ case 0x8BC0 /* GL_COUNTER_TYPE_AMD */: return "GL_COUNTER_TYPE_AMD (0x8BC0)"; case 0x8BC1 /* GL_COUNTER_RANGE_AMD */: return "GL_COUNTER_RANGE_AMD (0x8BC1)"; case 0x8BC2 /* GL_UNSIGNED_INT64_AMD */: return "GL_UNSIGNED_INT64_AMD (0x8BC2)"; case 0x8BC3 /* GL_PERCENTAGE_AMD */: return "GL_PERCENTAGE_AMD (0x8BC3)"; case 0x8BC4 /* GL_PERFMON_RESULT_AVAILABLE_AMD */: return "GL_PERFMON_RESULT_AVAILABLE_AMD (0x8BC4)"; case 0x8BC5 /* GL_PERFMON_RESULT_SIZE_AMD */: return "GL_PERFMON_RESULT_SIZE_AMD (0x8BC5)"; case 0x8BC6 /* GL_PERFMON_RESULT_AMD */: return "GL_PERFMON_RESULT_AMD (0x8BC6)";/* -------------------------- GL_AMD_pinned_memory ------------------------- */ case 0x9160 /* GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD */: return "GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD (0x9160)"; /* ----------------------- GL_AMD_query_buffer_object ---------------------- */ case 0x9192 /* GL_QUERY_BUFFER_AMD */: return "GL_QUERY_BUFFER_AMD (0x9192)"; case 0x9193 /* GL_QUERY_BUFFER_BINDING_AMD */: return "GL_QUERY_BUFFER_BINDING_AMD (0x9193)"; case 0x9194 /* GL_QUERY_RESULT_NO_WAIT_AMD */: return "GL_QUERY_RESULT_NO_WAIT_AMD (0x9194)"; /* ------------------------ GL_AMD_sample_positions ------------------------ */ case 0x883F /* GL_SUBSAMPLE_DISTANCE_AMD */: return "GL_SUBSAMPLE_DISTANCE_AMD (0x883F)";/* ------------------ GL_AMD_seamless_cubemap_per_texture ------------------ */ case 0x884F /* GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB */: return "GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB (0x884F)"; /* ---------------------- GL_AMD_shader_stencil_export --------------------- */ /* ------------------- GL_AMD_stencil_operation_extended ------------------- */ case 0x874A /* GL_SET_AMD */: return "GL_SET_AMD (0x874A)"; case 0x874B /* GL_REPLACE_VALUE_AMD */: return "GL_REPLACE_VALUE_AMD (0x874B)"; case 0x874C /* GL_STENCIL_OP_VALUE_AMD */: return "GL_STENCIL_OP_VALUE_AMD (0x874C)"; case 0x874D /* GL_STENCIL_BACK_OP_VALUE_AMD */: return "GL_STENCIL_BACK_OP_VALUE_AMD (0x874D)";/* ------------------------ GL_AMD_texture_texture4 ------------------------ */ /* --------------- GL_AMD_transform_feedback3_lines_triangles -------------- */ /* ----------------------- GL_AMD_vertex_shader_layer ---------------------- */ /* -------------------- GL_AMD_vertex_shader_tessellator ------------------- */ case 0x9001 /* GL_SAMPLER_BUFFER_AMD */: return "GL_SAMPLER_BUFFER_AMD (0x9001)"; case 0x9002 /* GL_INT_SAMPLER_BUFFER_AMD */: return "GL_INT_SAMPLER_BUFFER_AMD (0x9002)"; case 0x9003 /* GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD */: return "GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD (0x9003)"; case 0x9004 /* GL_TESSELLATION_MODE_AMD */: return "GL_TESSELLATION_MODE_AMD (0x9004)"; case 0x9005 /* GL_TESSELLATION_FACTOR_AMD */: return "GL_TESSELLATION_FACTOR_AMD (0x9005)"; case 0x9006 /* GL_DISCRETE_AMD */: return "GL_DISCRETE_AMD (0x9006)"; case 0x9007 /* GL_CONTINUOUS_AMD */: return "GL_CONTINUOUS_AMD (0x9007)"; /* ------------------ GL_AMD_vertex_shader_viewport_index ------------------ */ /* ----------------------- GL_APPLE_aux_depth_stencil ---------------------- */ case 0x8A14 /* GL_AUX_DEPTH_STENCIL_APPLE */: return "GL_AUX_DEPTH_STENCIL_APPLE (0x8A14)"; /* ------------------------ GL_APPLE_client_storage ------------------------ */ case 0x85B2 /* GL_UNPACK_CLIENT_STORAGE_APPLE */: return "GL_UNPACK_CLIENT_STORAGE_APPLE (0x85B2)"; /* ------------------------- GL_APPLE_element_array ------------------------ */ case 0x8A0C /* GL_ELEMENT_ARRAY_APPLE */: return "GL_ELEMENT_ARRAY_APPLE (0x8A0C)"; case 0x8A0D /* GL_ELEMENT_ARRAY_TYPE_APPLE */: return "GL_ELEMENT_ARRAY_TYPE_APPLE (0x8A0D)"; case 0x8A0E /* GL_ELEMENT_ARRAY_POINTER_APPLE */: return "GL_ELEMENT_ARRAY_POINTER_APPLE (0x8A0E)"; /* ----------------------------- GL_APPLE_fence ---------------------------- */ case 0x8A0A /* GL_DRAW_PIXELS_APPLE */: return "GL_DRAW_PIXELS_APPLE (0x8A0A)"; case 0x8A0B /* GL_FENCE_APPLE */: return "GL_FENCE_APPLE (0x8A0B)"; /* ------------------------- GL_APPLE_float_pixels ------------------------- */ //case 0x140B /* GL_HALF_APPLE */: return "GL_HALF_APPLE (0x140B)"; //case 0x8815 /* GL_RGB_FLOAT32_APPLE */: return "GL_RGB_FLOAT32_APPLE (0x8815)"; case 0x8816 /* GL_ALPHA_FLOAT32_APPLE */: return "GL_ALPHA_FLOAT32_APPLE (0x8816)"; case 0x8817 /* GL_INTENSITY_FLOAT32_APPLE */: return "GL_INTENSITY_FLOAT32_APPLE (0x8817)"; case 0x8818 /* GL_LUMINANCE_FLOAT32_APPLE */: return "GL_LUMINANCE_FLOAT32_APPLE (0x8818)"; case 0x8819 /* GL_LUMINANCE_ALPHA_FLOAT32_APPLE */: return "GL_LUMINANCE_ALPHA_FLOAT32_APPLE (0x8819)"; //case 0x881A /* GL_RGBA_FLOAT16_APPLE */: return "GL_RGBA_FLOAT16_APPLE (0x881A)"; //case 0x881B /* GL_RGB_FLOAT16_APPLE */: return "GL_RGB_FLOAT16_APPLE (0x881B)"; case 0x881C /* GL_ALPHA_FLOAT16_APPLE */: return "GL_ALPHA_FLOAT16_APPLE (0x881C)"; case 0x881D /* GL_INTENSITY_FLOAT16_APPLE */: return "GL_INTENSITY_FLOAT16_APPLE (0x881D)"; case 0x881E /* GL_LUMINANCE_FLOAT16_APPLE */: return "GL_LUMINANCE_FLOAT16_APPLE (0x881E)"; case 0x881F /* GL_LUMINANCE_ALPHA_FLOAT16_APPLE */: return "GL_LUMINANCE_ALPHA_FLOAT16_APPLE (0x881F)"; case 0x8A0F /* GL_COLOR_FLOAT_APPLE */: return "GL_COLOR_FLOAT_APPLE (0x8A0F)"; /* ---------------------- GL_APPLE_flush_buffer_range ---------------------- */ case 0x8A12 /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */: return "GL_BUFFER_SERIALIZED_MODIFY_APPLE (0x8A12)"; case 0x8A13 /* GL_BUFFER_FLUSHING_UNMAP_APPLE */: return "GL_BUFFER_FLUSHING_UNMAP_APPLE (0x8A13)"; /* ----------------------- GL_APPLE_object_purgeable ----------------------- */ case 0x85B3 /* GL_BUFFER_OBJECT_APPLE */: return "GL_BUFFER_OBJECT_APPLE (0x85B3)"; case 0x8A19 /* GL_RELEASED_APPLE */: return "GL_RELEASED_APPLE (0x8A19)"; case 0x8A1A /* GL_VOLATILE_APPLE */: return "GL_VOLATILE_APPLE (0x8A1A)"; case 0x8A1B /* GL_RETAINED_APPLE */: return "GL_RETAINED_APPLE (0x8A1B)"; case 0x8A1C /* GL_UNDEFINED_APPLE */: return "GL_UNDEFINED_APPLE (0x8A1C)"; case 0x8A1D /* GL_PURGEABLE_APPLE */: return "GL_PURGEABLE_APPLE (0x8A1D)"; /* ------------------------- GL_APPLE_pixel_buffer ------------------------- */ case 0x8A10 /* GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE */: return "GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE (0x8A10)"; /* ---------------------------- GL_APPLE_rgb_422 --------------------------- */ case 0x85BA /* GL_UNSIGNED_SHORT_8_8_APPLE */: return "GL_UNSIGNED_SHORT_8_8_APPLE (0x85BA)"; case 0x85BB /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */: return "GL_UNSIGNED_SHORT_8_8_REV_APPLE (0x85BB)"; case 0x8A1F /* GL_RGB_422_APPLE */: return "GL_RGB_422_APPLE (0x8A1F)"; /* --------------------------- GL_APPLE_row_bytes -------------------------- */ case 0x8A15 /* GL_PACK_ROW_BYTES_APPLE */: return "GL_PACK_ROW_BYTES_APPLE (0x8A15)"; case 0x8A16 /* GL_UNPACK_ROW_BYTES_APPLE */: return "GL_UNPACK_ROW_BYTES_APPLE (0x8A16)"; /* ------------------------ GL_APPLE_specular_vector ----------------------- */ case 0x85B0 /* GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE */: return "GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE (0x85B0)"; /* ------------------------- GL_APPLE_texture_range ------------------------ */ case 0x85B7 /* GL_TEXTURE_RANGE_LENGTH_APPLE */: return "GL_TEXTURE_RANGE_LENGTH_APPLE (0x85B7)"; case 0x85B8 /* GL_TEXTURE_RANGE_POINTER_APPLE */: return "GL_TEXTURE_RANGE_POINTER_APPLE (0x85B8)"; case 0x85BC /* GL_TEXTURE_STORAGE_HINT_APPLE */: return "GL_TEXTURE_STORAGE_HINT_APPLE (0x85BC)"; case 0x85BD /* GL_STORAGE_PRIVATE_APPLE */: return "GL_STORAGE_PRIVATE_APPLE (0x85BD)"; //case 0x85BE /* GL_STORAGE_CACHED_APPLE */: return "GL_STORAGE_CACHED_APPLE (0x85BE)"; //case 0x85BF /* GL_STORAGE_SHARED_APPLE */: return "GL_STORAGE_SHARED_APPLE (0x85BF)"; /* ------------------------ GL_APPLE_transform_hint ------------------------ */ case 0x85B1 /* GL_TRANSFORM_HINT_APPLE */: return "GL_TRANSFORM_HINT_APPLE (0x85B1)"; /* ---------------------- GL_APPLE_vertex_array_object --------------------- */ case 0x85B5 /* GL_VERTEX_ARRAY_BINDING_APPLE */: return "GL_VERTEX_ARRAY_BINDING_APPLE (0x85B5)"; /* ---------------------- GL_APPLE_vertex_array_range ---------------------- */ case 0x851D /* GL_VERTEX_ARRAY_RANGE_APPLE */: return "GL_VERTEX_ARRAY_RANGE_APPLE (0x851D)"; case 0x851E /* GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE */: return "GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE (0x851E)"; case 0x851F /* GL_VERTEX_ARRAY_STORAGE_HINT_APPLE */: return "GL_VERTEX_ARRAY_STORAGE_HINT_APPLE (0x851F)"; case 0x8520 /* GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE */: return "GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE (0x8520)"; case 0x8521 /* GL_VERTEX_ARRAY_RANGE_POINTER_APPLE */: return "GL_VERTEX_ARRAY_RANGE_POINTER_APPLE (0x8521)"; case 0x85B4 /* GL_STORAGE_CLIENT_APPLE */: return "GL_STORAGE_CLIENT_APPLE (0x85B4)"; case 0x85BE /* GL_STORAGE_CACHED_APPLE */: return "GL_STORAGE_CACHED_APPLE (0x85BE)"; case 0x85BF /* GL_STORAGE_SHARED_APPLE */: return "GL_STORAGE_SHARED_APPLE (0x85BF)"; /* ------------------- GL_APPLE_vertex_program_evaluators ------------------ */ case 0x8A00 /* GL_VERTEX_ATTRIB_MAP1_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_APPLE (0x8A00)"; case 0x8A01 /* GL_VERTEX_ATTRIB_MAP2_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_APPLE (0x8A01)"; case 0x8A02 /* GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE (0x8A02)"; case 0x8A03 /* GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE (0x8A03)"; case 0x8A04 /* GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE (0x8A04)"; case 0x8A05 /* GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE */: return "GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE (0x8A05)"; case 0x8A06 /* GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE (0x8A06)"; case 0x8A07 /* GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE (0x8A07)"; case 0x8A08 /* GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE (0x8A08)"; case 0x8A09 /* GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE */: return "GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE (0x8A09)"; /* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */ case 0x85B9 /* GL_YCBCR_422_APPLE */: return "GL_YCBCR_422_APPLE (0x85B9)"; /* ------------------------ GL_ARB_ES2_compatibility ----------------------- */ case 0x140C /* GL_FIXED */: return "GL_FIXED (0x140C)"; case 0x8B9A /* GL_IMPLEMENTATION_COLOR_READ_TYPE */: return "GL_IMPLEMENTATION_COLOR_READ_TYPE (0x8B9A)"; case 0x8B9B /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */: return "GL_IMPLEMENTATION_COLOR_READ_FORMAT (0x8B9B)"; case 0x8D62 /* GL_RGB565 */: return "GL_RGB565 (0x8D62)"; case 0x8DF0 /* GL_LOW_FLOAT */: return "GL_LOW_FLOAT (0x8DF0)"; case 0x8DF1 /* GL_MEDIUM_FLOAT */: return "GL_MEDIUM_FLOAT (0x8DF1)"; case 0x8DF2 /* GL_HIGH_FLOAT */: return "GL_HIGH_FLOAT (0x8DF2)"; case 0x8DF3 /* GL_LOW_INT */: return "GL_LOW_INT (0x8DF3)"; case 0x8DF4 /* GL_MEDIUM_INT */: return "GL_MEDIUM_INT (0x8DF4)"; case 0x8DF5 /* GL_HIGH_INT */: return "GL_HIGH_INT (0x8DF5)"; case 0x8DF8 /* GL_SHADER_BINARY_FORMATS */: return "GL_SHADER_BINARY_FORMATS (0x8DF8)"; case 0x8DF9 /* GL_NUM_SHADER_BINARY_FORMATS */: return "GL_NUM_SHADER_BINARY_FORMATS (0x8DF9)"; case 0x8DFA /* GL_SHADER_COMPILER */: return "GL_SHADER_COMPILER (0x8DFA)"; case 0x8DFB /* GL_MAX_VERTEX_UNIFORM_VECTORS */: return "GL_MAX_VERTEX_UNIFORM_VECTORS (0x8DFB)"; case 0x8DFC /* GL_MAX_VARYING_VECTORS */: return "GL_MAX_VARYING_VECTORS (0x8DFC)"; case 0x8DFD /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */: return "GL_MAX_FRAGMENT_UNIFORM_VECTORS (0x8DFD)"; /* ------------------------ GL_ARB_ES3_compatibility ----------------------- */ case 0x8D69 /* GL_PRIMITIVE_RESTART_FIXED_INDEX */: return "GL_PRIMITIVE_RESTART_FIXED_INDEX (0x8D69)"; case 0x8D6A /* GL_ANY_SAMPLES_PASSED_CONSERVATIVE */: return "GL_ANY_SAMPLES_PASSED_CONSERVATIVE (0x8D6A)"; case 0x8D6B /* GL_MAX_ELEMENT_INDEX */: return "GL_MAX_ELEMENT_INDEX (0x8D6B)"; case 0x9270 /* GL_COMPRESSED_R11_EAC */: return "GL_COMPRESSED_R11_EAC (0x9270)"; case 0x9271 /* GL_COMPRESSED_SIGNED_R11_EAC */: return "GL_COMPRESSED_SIGNED_R11_EAC (0x9271)"; case 0x9272 /* GL_COMPRESSED_RG11_EAC */: return "GL_COMPRESSED_RG11_EAC (0x9272)"; case 0x9273 /* GL_COMPRESSED_SIGNED_RG11_EAC */: return "GL_COMPRESSED_SIGNED_RG11_EAC (0x9273)"; case 0x9274 /* GL_COMPRESSED_RGB8_ETC2 */: return "GL_COMPRESSED_RGB8_ETC2 (0x9274)"; case 0x9275 /* GL_COMPRESSED_SRGB8_ETC2 */: return "GL_COMPRESSED_SRGB8_ETC2 (0x9275)"; case 0x9276 /* GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 */: return "GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 (0x9276)"; case 0x9277 /* GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 */: return "GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 (0x9277)"; case 0x9278 /* GL_COMPRESSED_RGBA8_ETC2_EAC */: return "GL_COMPRESSED_RGBA8_ETC2_EAC (0x9278)"; case 0x9279 /* GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC */: return "GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC (0x9279)"; /* ------------------------ GL_ARB_arrays_of_arrays ------------------------ */ /* -------------------------- GL_ARB_base_instance ------------------------- */ /* ----------------------- GL_ARB_blend_func_extended ---------------------- */ case 0x88F9 /* GL_SRC1_COLOR */: return "GL_SRC1_COLOR (0x88F9)"; case 0x88FA /* GL_ONE_MINUS_SRC1_COLOR */: return "GL_ONE_MINUS_SRC1_COLOR (0x88FA)"; case 0x88FB /* GL_ONE_MINUS_SRC1_ALPHA */: return "GL_ONE_MINUS_SRC1_ALPHA (0x88FB)"; case 0x88FC /* GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */: return "GL_MAX_DUAL_SOURCE_DRAW_BUFFERS (0x88FC)"; /* ---------------------------- GL_ARB_cl_event ---------------------------- */ case 0x8240 /* GL_SYNC_CL_EVENT_ARB */: return "GL_SYNC_CL_EVENT_ARB (0x8240)"; case 0x8241 /* GL_SYNC_CL_EVENT_COMPLETE_ARB */: return "GL_SYNC_CL_EVENT_COMPLETE_ARB (0x8241)"; /* ----------------------- GL_ARB_clear_buffer_object ---------------------- */ /* ----------------------- GL_ARB_color_buffer_float ----------------------- */ case 0x8820 /* GL_RGBA_FLOAT_MODE_ARB */: return "GL_RGBA_FLOAT_MODE_ARB (0x8820)"; //case 0x891A /* GL_CLAMP_VERTEX_COLOR_ARB */: return "GL_CLAMP_VERTEX_COLOR_ARB (0x891A)"; //case 0x891B /* GL_CLAMP_FRAGMENT_COLOR_ARB */: return "GL_CLAMP_FRAGMENT_COLOR_ARB (0x891B)"; //case 0x891C /* GL_CLAMP_READ_COLOR_ARB */: return "GL_CLAMP_READ_COLOR_ARB (0x891C)"; //case 0x891D /* GL_FIXED_ONLY_ARB */: return "GL_FIXED_ONLY_ARB (0x891D)"; /* -------------------------- GL_ARB_compatibility ------------------------- */ /* ---------------- GL_ARB_compressed_texture_pixel_storage ---------------- */ case 0x9127 /* GL_UNPACK_COMPRESSED_BLOCK_WIDTH */: return "GL_UNPACK_COMPRESSED_BLOCK_WIDTH (0x9127)"; case 0x9128 /* GL_UNPACK_COMPRESSED_BLOCK_HEIGHT */: return "GL_UNPACK_COMPRESSED_BLOCK_HEIGHT (0x9128)"; case 0x9129 /* GL_UNPACK_COMPRESSED_BLOCK_DEPTH */: return "GL_UNPACK_COMPRESSED_BLOCK_DEPTH (0x9129)"; case 0x912A /* GL_UNPACK_COMPRESSED_BLOCK_SIZE */: return "GL_UNPACK_COMPRESSED_BLOCK_SIZE (0x912A)"; case 0x912B /* GL_PACK_COMPRESSED_BLOCK_WIDTH */: return "GL_PACK_COMPRESSED_BLOCK_WIDTH (0x912B)"; case 0x912C /* GL_PACK_COMPRESSED_BLOCK_HEIGHT */: return "GL_PACK_COMPRESSED_BLOCK_HEIGHT (0x912C)"; case 0x912D /* GL_PACK_COMPRESSED_BLOCK_DEPTH */: return "GL_PACK_COMPRESSED_BLOCK_DEPTH (0x912D)"; case 0x912E /* GL_PACK_COMPRESSED_BLOCK_SIZE */: return "GL_PACK_COMPRESSED_BLOCK_SIZE (0x912E)"; /* ------------------------- GL_ARB_compute_shader ------------------------- */ //case 0x00000020 /* GL_COMPUTE_SHADER_BIT */: return "GL_COMPUTE_SHADER_BIT (0x00000020)"; case 0x8262 /* GL_MAX_COMPUTE_SHARED_MEMORY_SIZE */: return "GL_MAX_COMPUTE_SHARED_MEMORY_SIZE (0x8262)"; case 0x8263 /* GL_MAX_COMPUTE_UNIFORM_COMPONENTS */: return "GL_MAX_COMPUTE_UNIFORM_COMPONENTS (0x8263)"; case 0x8264 /* GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS (0x8264)"; case 0x8265 /* GL_MAX_COMPUTE_ATOMIC_COUNTERS */: return "GL_MAX_COMPUTE_ATOMIC_COUNTERS (0x8265)"; case 0x8266 /* GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS (0x8266)"; case 0x8267 /* GL_COMPUTE_WORK_GROUP_SIZE */: return "GL_COMPUTE_WORK_GROUP_SIZE (0x8267)"; case 0x90EB /* GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS */: return "GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS (0x90EB)"; case 0x90EC /* GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER (0x90EC)"; case 0x90ED /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER (0x90ED)"; case 0x90EE /* GL_DISPATCH_INDIRECT_BUFFER */: return "GL_DISPATCH_INDIRECT_BUFFER (0x90EE)"; case 0x90EF /* GL_DISPATCH_INDIRECT_BUFFER_BINDING */: return "GL_DISPATCH_INDIRECT_BUFFER_BINDING (0x90EF)"; case 0x91B9 /* GL_COMPUTE_SHADER */: return "GL_COMPUTE_SHADER (0x91B9)"; case 0x91BB /* GL_MAX_COMPUTE_UNIFORM_BLOCKS */: return "GL_MAX_COMPUTE_UNIFORM_BLOCKS (0x91BB)"; case 0x91BC /* GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS */: return "GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS (0x91BC)"; case 0x91BD /* GL_MAX_COMPUTE_IMAGE_UNIFORMS */: return "GL_MAX_COMPUTE_IMAGE_UNIFORMS (0x91BD)"; case 0x91BE /* GL_MAX_COMPUTE_WORK_GROUP_COUNT */: return "GL_MAX_COMPUTE_WORK_GROUP_COUNT (0x91BE)"; case 0x91BF /* GL_MAX_COMPUTE_WORK_GROUP_SIZE */: return "GL_MAX_COMPUTE_WORK_GROUP_SIZE (0x91BF)"; /* ----------------------- GL_ARB_conservative_depth ----------------------- */ /* --------------------------- GL_ARB_copy_buffer -------------------------- */ case 0x8F36 /* GL_COPY_READ_BUFFER */: return "GL_COPY_READ_BUFFER (0x8F36)"; case 0x8F37 /* GL_COPY_WRITE_BUFFER */: return "GL_COPY_WRITE_BUFFER (0x8F37)";/* --------------------------- GL_ARB_copy_image --------------------------- */ /* -------------------------- GL_ARB_debug_output -------------------------- */ case 0x8242 /* GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB */: return "GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB (0x8242)"; case 0x8243 /* GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB */: return "GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB (0x8243)"; case 0x8244 /* GL_DEBUG_CALLBACK_FUNCTION_ARB */: return "GL_DEBUG_CALLBACK_FUNCTION_ARB (0x8244)"; case 0x8245 /* GL_DEBUG_CALLBACK_USER_PARAM_ARB */: return "GL_DEBUG_CALLBACK_USER_PARAM_ARB (0x8245)"; case 0x8246 /* GL_DEBUG_SOURCE_API_ARB */: return "GL_DEBUG_SOURCE_API_ARB (0x8246)"; case 0x8247 /* GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB */: return "GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB (0x8247)"; case 0x8248 /* GL_DEBUG_SOURCE_SHADER_COMPILER_ARB */: return "GL_DEBUG_SOURCE_SHADER_COMPILER_ARB (0x8248)"; case 0x8249 /* GL_DEBUG_SOURCE_THIRD_PARTY_ARB */: return "GL_DEBUG_SOURCE_THIRD_PARTY_ARB (0x8249)"; case 0x824A /* GL_DEBUG_SOURCE_APPLICATION_ARB */: return "GL_DEBUG_SOURCE_APPLICATION_ARB (0x824A)"; case 0x824B /* GL_DEBUG_SOURCE_OTHER_ARB */: return "GL_DEBUG_SOURCE_OTHER_ARB (0x824B)"; case 0x824C /* GL_DEBUG_TYPE_ERROR_ARB */: return "GL_DEBUG_TYPE_ERROR_ARB (0x824C)"; case 0x824D /* GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB */: return "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB (0x824D)"; case 0x824E /* GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB */: return "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB (0x824E)"; case 0x824F /* GL_DEBUG_TYPE_PORTABILITY_ARB */: return "GL_DEBUG_TYPE_PORTABILITY_ARB (0x824F)"; case 0x8250 /* GL_DEBUG_TYPE_PERFORMANCE_ARB */: return "GL_DEBUG_TYPE_PERFORMANCE_ARB (0x8250)"; case 0x8251 /* GL_DEBUG_TYPE_OTHER_ARB */: return "GL_DEBUG_TYPE_OTHER_ARB (0x8251)"; //case 0x9143 /* GL_MAX_DEBUG_MESSAGE_LENGTH_ARB */: return "GL_MAX_DEBUG_MESSAGE_LENGTH_ARB (0x9143)"; //case 0x9144 /* GL_MAX_DEBUG_LOGGED_MESSAGES_ARB */: return "GL_MAX_DEBUG_LOGGED_MESSAGES_ARB (0x9144)"; //case 0x9145 /* GL_DEBUG_LOGGED_MESSAGES_ARB */: return "GL_DEBUG_LOGGED_MESSAGES_ARB (0x9145)"; //case 0x9146 /* GL_DEBUG_SEVERITY_HIGH_ARB */: return "GL_DEBUG_SEVERITY_HIGH_ARB (0x9146)"; //case 0x9147 /* GL_DEBUG_SEVERITY_MEDIUM_ARB */: return "GL_DEBUG_SEVERITY_MEDIUM_ARB (0x9147)"; //case 0x9148 /* GL_DEBUG_SEVERITY_LOW_ARB */: return "GL_DEBUG_SEVERITY_LOW_ARB (0x9148)"; /* ----------------------- GL_ARB_depth_buffer_float ----------------------- */ case 0x8CAC /* GL_DEPTH_COMPONENT32F */: return "GL_DEPTH_COMPONENT32F (0x8CAC)"; case 0x8CAD /* GL_DEPTH32F_STENCIL8 */: return "GL_DEPTH32F_STENCIL8 (0x8CAD)"; case 0x8DAD /* GL_FLOAT_32_UNSIGNED_INT_24_8_REV */: return "GL_FLOAT_32_UNSIGNED_INT_24_8_REV (0x8DAD)"; /* --------------------------- GL_ARB_depth_clamp -------------------------- */ case 0x864F /* GL_DEPTH_CLAMP */: return "GL_DEPTH_CLAMP (0x864F)"; /* -------------------------- GL_ARB_depth_texture ------------------------- */ //case 0x81A5 /* GL_DEPTH_COMPONENT16_ARB */: return "GL_DEPTH_COMPONENT16_ARB (0x81A5)"; //case 0x81A6 /* GL_DEPTH_COMPONENT24_ARB */: return "GL_DEPTH_COMPONENT24_ARB (0x81A6)"; //case 0x81A7 /* GL_DEPTH_COMPONENT32_ARB */: return "GL_DEPTH_COMPONENT32_ARB (0x81A7)"; //case 0x884A /* GL_TEXTURE_DEPTH_SIZE_ARB */: return "GL_TEXTURE_DEPTH_SIZE_ARB (0x884A)"; //case 0x884B /* GL_DEPTH_TEXTURE_MODE_ARB */: return "GL_DEPTH_TEXTURE_MODE_ARB (0x884B)"; /* -------------------------- GL_ARB_draw_buffers -------------------------- */ //case 0x8824 /* GL_MAX_DRAW_BUFFERS_ARB */: return "GL_MAX_DRAW_BUFFERS_ARB (0x8824)"; //case 0x8825 /* GL_DRAW_BUFFER0_ARB */: return "GL_DRAW_BUFFER0_ARB (0x8825)"; //case 0x8826 /* GL_DRAW_BUFFER1_ARB */: return "GL_DRAW_BUFFER1_ARB (0x8826)"; //case 0x8827 /* GL_DRAW_BUFFER2_ARB */: return "GL_DRAW_BUFFER2_ARB (0x8827)"; //case 0x8828 /* GL_DRAW_BUFFER3_ARB */: return "GL_DRAW_BUFFER3_ARB (0x8828)"; //case 0x8829 /* GL_DRAW_BUFFER4_ARB */: return "GL_DRAW_BUFFER4_ARB (0x8829)"; //case 0x882A /* GL_DRAW_BUFFER5_ARB */: return "GL_DRAW_BUFFER5_ARB (0x882A)"; //case 0x882B /* GL_DRAW_BUFFER6_ARB */: return "GL_DRAW_BUFFER6_ARB (0x882B)"; //case 0x882C /* GL_DRAW_BUFFER7_ARB */: return "GL_DRAW_BUFFER7_ARB (0x882C)"; //case 0x882D /* GL_DRAW_BUFFER8_ARB */: return "GL_DRAW_BUFFER8_ARB (0x882D)"; //case 0x882E /* GL_DRAW_BUFFER9_ARB */: return "GL_DRAW_BUFFER9_ARB (0x882E)"; //case 0x882F /* GL_DRAW_BUFFER10_ARB */: return "GL_DRAW_BUFFER10_ARB (0x882F)"; //case 0x8830 /* GL_DRAW_BUFFER11_ARB */: return "GL_DRAW_BUFFER11_ARB (0x8830)"; //case 0x8831 /* GL_DRAW_BUFFER12_ARB */: return "GL_DRAW_BUFFER12_ARB (0x8831)"; //case 0x8832 /* GL_DRAW_BUFFER13_ARB */: return "GL_DRAW_BUFFER13_ARB (0x8832)"; //case 0x8833 /* GL_DRAW_BUFFER14_ARB */: return "GL_DRAW_BUFFER14_ARB (0x8833)"; //case 0x8834 /* GL_DRAW_BUFFER15_ARB */: return "GL_DRAW_BUFFER15_ARB (0x8834)"; /* ----------------------- GL_ARB_draw_buffers_blend ----------------------- */ /* -------------------- GL_ARB_draw_elements_base_vertex ------------------- */ /* -------------------------- GL_ARB_draw_indirect ------------------------- */ case 0x8F3F /* GL_DRAW_INDIRECT_BUFFER */: return "GL_DRAW_INDIRECT_BUFFER (0x8F3F)"; case 0x8F43 /* GL_DRAW_INDIRECT_BUFFER_BINDING */: return "GL_DRAW_INDIRECT_BUFFER_BINDING (0x8F43)"; /* ------------------------- GL_ARB_draw_instanced ------------------------- */ /* -------------------- GL_ARB_explicit_attrib_location -------------------- */ /* -------------------- GL_ARB_explicit_uniform_location ------------------- */ case 0x826E /* GL_MAX_UNIFORM_LOCATIONS */: return "GL_MAX_UNIFORM_LOCATIONS (0x826E)"; /* ------------------- GL_ARB_fragment_coord_conventions ------------------- */ /* --------------------- GL_ARB_fragment_layer_viewport -------------------- */ /* ------------------------ GL_ARB_fragment_program ------------------------ */ case 0x8804 /* GL_FRAGMENT_PROGRAM_ARB */: return "GL_FRAGMENT_PROGRAM_ARB (0x8804)"; case 0x8807 /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */: return "GL_PROGRAM_TEX_INDIRECTIONS_ARB (0x8807)"; case 0x880A /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */: return "GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB (0x880A)"; case 0x880D /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */: return "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB (0x880D)"; case 0x8810 /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */: return "GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB (0x8810)"; //case 0x8871 /* GL_MAX_TEXTURE_COORDS_ARB */: return "GL_MAX_TEXTURE_COORDS_ARB (0x8871)"; //case 0x8872 /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */: return "GL_MAX_TEXTURE_IMAGE_UNITS_ARB (0x8872)"; /* --------------------- GL_ARB_fragment_program_shadow -------------------- */ /* ------------------------- GL_ARB_fragment_shader ------------------------ */ //case 0x8B30 /* GL_FRAGMENT_SHADER_ARB */: return "GL_FRAGMENT_SHADER_ARB (0x8B30)"; //case 0x8B49 /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */: return "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB (0x8B49)"; //case 0x8B8B /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB */: return "GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB (0x8B8B)"; /* ------------------- GL_ARB_framebuffer_no_attachments ------------------- */ case 0x9310 /* GL_FRAMEBUFFER_DEFAULT_WIDTH */: return "GL_FRAMEBUFFER_DEFAULT_WIDTH (0x9310)"; case 0x9311 /* GL_FRAMEBUFFER_DEFAULT_HEIGHT */: return "GL_FRAMEBUFFER_DEFAULT_HEIGHT (0x9311)"; case 0x9312 /* GL_FRAMEBUFFER_DEFAULT_LAYERS */: return "GL_FRAMEBUFFER_DEFAULT_LAYERS (0x9312)"; case 0x9313 /* GL_FRAMEBUFFER_DEFAULT_SAMPLES */: return "GL_FRAMEBUFFER_DEFAULT_SAMPLES (0x9313)"; case 0x9314 /* GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS */: return "GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS (0x9314)"; case 0x9315 /* GL_MAX_FRAMEBUFFER_WIDTH */: return "GL_MAX_FRAMEBUFFER_WIDTH (0x9315)"; case 0x9316 /* GL_MAX_FRAMEBUFFER_HEIGHT */: return "GL_MAX_FRAMEBUFFER_HEIGHT (0x9316)"; case 0x9317 /* GL_MAX_FRAMEBUFFER_LAYERS */: return "GL_MAX_FRAMEBUFFER_LAYERS (0x9317)"; case 0x9318 /* GL_MAX_FRAMEBUFFER_SAMPLES */: return "GL_MAX_FRAMEBUFFER_SAMPLES (0x9318)"; /* ----------------------- GL_ARB_framebuffer_object ----------------------- */ case 0x0506 /* GL_INVALID_FRAMEBUFFER_OPERATION */: return "GL_INVALID_FRAMEBUFFER_OPERATION (0x0506)"; case 0x8210 /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */: return "GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING (0x8210)"; case 0x8211 /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */: return "GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE (0x8211)"; case 0x8212 /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE (0x8212)"; case 0x8213 /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE (0x8213)"; case 0x8214 /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE (0x8214)"; case 0x8215 /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE (0x8215)"; case 0x8216 /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE (0x8216)"; case 0x8217 /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */: return "GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE (0x8217)"; case 0x8218 /* GL_FRAMEBUFFER_DEFAULT */: return "GL_FRAMEBUFFER_DEFAULT (0x8218)"; case 0x8219 /* GL_FRAMEBUFFER_UNDEFINED */: return "GL_FRAMEBUFFER_UNDEFINED (0x8219)"; case 0x821A /* GL_DEPTH_STENCIL_ATTACHMENT */: return "GL_DEPTH_STENCIL_ATTACHMENT (0x821A)"; case 0x8222 /* GL_INDEX */: return "GL_INDEX (0x8222)"; case 0x84E8 /* GL_MAX_RENDERBUFFER_SIZE */: return "GL_MAX_RENDERBUFFER_SIZE (0x84E8)"; case 0x84F9 /* GL_DEPTH_STENCIL */: return "GL_DEPTH_STENCIL (0x84F9)"; case 0x84FA /* GL_UNSIGNED_INT_24_8 */: return "GL_UNSIGNED_INT_24_8 (0x84FA)"; case 0x88F0 /* GL_DEPTH24_STENCIL8 */: return "GL_DEPTH24_STENCIL8 (0x88F0)"; case 0x88F1 /* GL_TEXTURE_STENCIL_SIZE */: return "GL_TEXTURE_STENCIL_SIZE (0x88F1)"; case 0x8C17 /* GL_UNSIGNED_NORMALIZED */: return "GL_UNSIGNED_NORMALIZED (0x8C17)"; //case 0x8C40 /* GL_SRGB */: return "GL_SRGB (0x8C40)"; //case 0x8CA6 /* GL_DRAW_FRAMEBUFFER_BINDING */: return "GL_DRAW_FRAMEBUFFER_BINDING (0x8CA6)"; case 0x8CA6 /* GL_FRAMEBUFFER_BINDING */: return "GL_FRAMEBUFFER_BINDING (0x8CA6)"; case 0x8CA7 /* GL_RENDERBUFFER_BINDING */: return "GL_RENDERBUFFER_BINDING (0x8CA7)"; case 0x8CA8 /* GL_READ_FRAMEBUFFER */: return "GL_READ_FRAMEBUFFER (0x8CA8)"; case 0x8CA9 /* GL_DRAW_FRAMEBUFFER */: return "GL_DRAW_FRAMEBUFFER (0x8CA9)"; case 0x8CAA /* GL_READ_FRAMEBUFFER_BINDING */: return "GL_READ_FRAMEBUFFER_BINDING (0x8CAA)"; case 0x8CAB /* GL_RENDERBUFFER_SAMPLES */: return "GL_RENDERBUFFER_SAMPLES (0x8CAB)"; case 0x8CD0 /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE (0x8CD0)"; case 0x8CD1 /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME (0x8CD1)"; case 0x8CD2 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL (0x8CD2)"; case 0x8CD3 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE (0x8CD3)"; case 0x8CD4 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER (0x8CD4)"; case 0x8CD5 /* GL_FRAMEBUFFER_COMPLETE */: return "GL_FRAMEBUFFER_COMPLETE (0x8CD5)"; case 0x8CD6 /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */: return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT (0x8CD6)"; case 0x8CD7 /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */: return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT (0x8CD7)"; case 0x8CDB /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */: return "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER (0x8CDB)"; case 0x8CDC /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */: return "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER (0x8CDC)"; case 0x8CDD /* GL_FRAMEBUFFER_UNSUPPORTED */: return "GL_FRAMEBUFFER_UNSUPPORTED (0x8CDD)"; case 0x8CDF /* GL_MAX_COLOR_ATTACHMENTS */: return "GL_MAX_COLOR_ATTACHMENTS (0x8CDF)"; case 0x8CE0 /* GL_COLOR_ATTACHMENT0 */: return "GL_COLOR_ATTACHMENT0 (0x8CE0)"; case 0x8CE1 /* GL_COLOR_ATTACHMENT1 */: return "GL_COLOR_ATTACHMENT1 (0x8CE1)"; case 0x8CE2 /* GL_COLOR_ATTACHMENT2 */: return "GL_COLOR_ATTACHMENT2 (0x8CE2)"; case 0x8CE3 /* GL_COLOR_ATTACHMENT3 */: return "GL_COLOR_ATTACHMENT3 (0x8CE3)"; case 0x8CE4 /* GL_COLOR_ATTACHMENT4 */: return "GL_COLOR_ATTACHMENT4 (0x8CE4)"; case 0x8CE5 /* GL_COLOR_ATTACHMENT5 */: return "GL_COLOR_ATTACHMENT5 (0x8CE5)"; case 0x8CE6 /* GL_COLOR_ATTACHMENT6 */: return "GL_COLOR_ATTACHMENT6 (0x8CE6)"; case 0x8CE7 /* GL_COLOR_ATTACHMENT7 */: return "GL_COLOR_ATTACHMENT7 (0x8CE7)"; case 0x8CE8 /* GL_COLOR_ATTACHMENT8 */: return "GL_COLOR_ATTACHMENT8 (0x8CE8)"; case 0x8CE9 /* GL_COLOR_ATTACHMENT9 */: return "GL_COLOR_ATTACHMENT9 (0x8CE9)"; case 0x8CEA /* GL_COLOR_ATTACHMENT10 */: return "GL_COLOR_ATTACHMENT10 (0x8CEA)"; case 0x8CEB /* GL_COLOR_ATTACHMENT11 */: return "GL_COLOR_ATTACHMENT11 (0x8CEB)"; case 0x8CEC /* GL_COLOR_ATTACHMENT12 */: return "GL_COLOR_ATTACHMENT12 (0x8CEC)"; case 0x8CED /* GL_COLOR_ATTACHMENT13 */: return "GL_COLOR_ATTACHMENT13 (0x8CED)"; case 0x8CEE /* GL_COLOR_ATTACHMENT14 */: return "GL_COLOR_ATTACHMENT14 (0x8CEE)"; case 0x8CEF /* GL_COLOR_ATTACHMENT15 */: return "GL_COLOR_ATTACHMENT15 (0x8CEF)"; case 0x8D00 /* GL_DEPTH_ATTACHMENT */: return "GL_DEPTH_ATTACHMENT (0x8D00)"; case 0x8D20 /* GL_STENCIL_ATTACHMENT */: return "GL_STENCIL_ATTACHMENT (0x8D20)"; case 0x8D40 /* GL_FRAMEBUFFER */: return "GL_FRAMEBUFFER (0x8D40)"; case 0x8D41 /* GL_RENDERBUFFER */: return "GL_RENDERBUFFER (0x8D41)"; case 0x8D42 /* GL_RENDERBUFFER_WIDTH */: return "GL_RENDERBUFFER_WIDTH (0x8D42)"; case 0x8D43 /* GL_RENDERBUFFER_HEIGHT */: return "GL_RENDERBUFFER_HEIGHT (0x8D43)"; case 0x8D44 /* GL_RENDERBUFFER_INTERNAL_FORMAT */: return "GL_RENDERBUFFER_INTERNAL_FORMAT (0x8D44)"; case 0x8D46 /* GL_STENCIL_INDEX1 */: return "GL_STENCIL_INDEX1 (0x8D46)"; case 0x8D47 /* GL_STENCIL_INDEX4 */: return "GL_STENCIL_INDEX4 (0x8D47)"; case 0x8D48 /* GL_STENCIL_INDEX8 */: return "GL_STENCIL_INDEX8 (0x8D48)"; case 0x8D49 /* GL_STENCIL_INDEX16 */: return "GL_STENCIL_INDEX16 (0x8D49)"; case 0x8D50 /* GL_RENDERBUFFER_RED_SIZE */: return "GL_RENDERBUFFER_RED_SIZE (0x8D50)"; case 0x8D51 /* GL_RENDERBUFFER_GREEN_SIZE */: return "GL_RENDERBUFFER_GREEN_SIZE (0x8D51)"; case 0x8D52 /* GL_RENDERBUFFER_BLUE_SIZE */: return "GL_RENDERBUFFER_BLUE_SIZE (0x8D52)"; case 0x8D53 /* GL_RENDERBUFFER_ALPHA_SIZE */: return "GL_RENDERBUFFER_ALPHA_SIZE (0x8D53)"; case 0x8D54 /* GL_RENDERBUFFER_DEPTH_SIZE */: return "GL_RENDERBUFFER_DEPTH_SIZE (0x8D54)"; case 0x8D55 /* GL_RENDERBUFFER_STENCIL_SIZE */: return "GL_RENDERBUFFER_STENCIL_SIZE (0x8D55)"; case 0x8D56 /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */: return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE (0x8D56)"; case 0x8D57 /* GL_MAX_SAMPLES */: return "GL_MAX_SAMPLES (0x8D57)"; /* ------------------------ GL_ARB_framebuffer_sRGB ------------------------ */ case 0x8DB9 /* GL_FRAMEBUFFER_SRGB */: return "GL_FRAMEBUFFER_SRGB (0x8DB9)"; /* ------------------------ GL_ARB_geometry_shader4 ------------------------ */ //case 0xA /* GL_LINES_ADJACENCY_ARB */: return "GL_LINES_ADJACENCY_ARB (0xA)"; //case 0xB /* GL_LINE_STRIP_ADJACENCY_ARB */: return "GL_LINE_STRIP_ADJACENCY_ARB (0xB)"; //case 0xC /* GL_TRIANGLES_ADJACENCY_ARB */: return "GL_TRIANGLES_ADJACENCY_ARB (0xC)"; //case 0xD /* GL_TRIANGLE_STRIP_ADJACENCY_ARB */: return "GL_TRIANGLE_STRIP_ADJACENCY_ARB (0xD)"; //case 0x8C29 /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB */: return "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB (0x8C29)"; //case 0x8CD4 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER (0x8CD4)"; //case 0x8DA7 /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB */: return "GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB (0x8DA7)"; //case 0x8DA8 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB (0x8DA8)"; case 0x8DA9 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB (0x8DA9)"; //case 0x8DD9 /* GL_GEOMETRY_SHADER_ARB */: return "GL_GEOMETRY_SHADER_ARB (0x8DD9)"; case 0x8DDA /* GL_GEOMETRY_VERTICES_OUT_ARB */: return "GL_GEOMETRY_VERTICES_OUT_ARB (0x8DDA)"; case 0x8DDB /* GL_GEOMETRY_INPUT_TYPE_ARB */: return "GL_GEOMETRY_INPUT_TYPE_ARB (0x8DDB)"; case 0x8DDC /* GL_GEOMETRY_OUTPUT_TYPE_ARB */: return "GL_GEOMETRY_OUTPUT_TYPE_ARB (0x8DDC)"; case 0x8DDD /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */: return "GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB (0x8DDD)"; case 0x8DDE /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */: return "GL_MAX_VERTEX_VARYING_COMPONENTS_ARB (0x8DDE)"; //case 0x8DDF /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB */: return "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB (0x8DDF)"; //case 0x8DE0 /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB */: return "GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB (0x8DE0)"; //case 0x8DE1 /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB */: return "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB (0x8DE1)"; /* ----------------------- GL_ARB_get_program_binary ----------------------- */ case 0x8257 /* GL_PROGRAM_BINARY_RETRIEVABLE_HINT */: return "GL_PROGRAM_BINARY_RETRIEVABLE_HINT (0x8257)"; case 0x8741 /* GL_PROGRAM_BINARY_LENGTH */: return "GL_PROGRAM_BINARY_LENGTH (0x8741)"; case 0x87FE /* GL_NUM_PROGRAM_BINARY_FORMATS */: return "GL_NUM_PROGRAM_BINARY_FORMATS (0x87FE)"; case 0x87FF /* GL_PROGRAM_BINARY_FORMATS */: return "GL_PROGRAM_BINARY_FORMATS (0x87FF)"; /* --------------------------- GL_ARB_gpu_shader5 -------------------------- */ //case 0x887F /* GL_GEOMETRY_SHADER_INVOCATIONS */: return "GL_GEOMETRY_SHADER_INVOCATIONS (0x887F)"; //case 0x8E5A /* GL_MAX_GEOMETRY_SHADER_INVOCATIONS */: return "GL_MAX_GEOMETRY_SHADER_INVOCATIONS (0x8E5A)"; //case 0x8E5B /* GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */: return "GL_MIN_FRAGMENT_INTERPOLATION_OFFSET (0x8E5B)"; //case 0x8E5C /* GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */: return "GL_MAX_FRAGMENT_INTERPOLATION_OFFSET (0x8E5C)"; //case 0x8E5D /* GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */: return "GL_FRAGMENT_INTERPOLATION_OFFSET_BITS (0x8E5D)"; case 0x8E71 /* GL_MAX_VERTEX_STREAMS */: return "GL_MAX_VERTEX_STREAMS (0x8E71)"; /* ------------------------- GL_ARB_gpu_shader_fp64 ------------------------ */ case 0x8F46 /* GL_DOUBLE_MAT2 */: return "GL_DOUBLE_MAT2 (0x8F46)"; case 0x8F47 /* GL_DOUBLE_MAT3 */: return "GL_DOUBLE_MAT3 (0x8F47)"; case 0x8F48 /* GL_DOUBLE_MAT4 */: return "GL_DOUBLE_MAT4 (0x8F48)"; case 0x8F49 /* GL_DOUBLE_MAT2x3 */: return "GL_DOUBLE_MAT2x3 (0x8F49)"; case 0x8F4A /* GL_DOUBLE_MAT2x4 */: return "GL_DOUBLE_MAT2x4 (0x8F4A)"; case 0x8F4B /* GL_DOUBLE_MAT3x2 */: return "GL_DOUBLE_MAT3x2 (0x8F4B)"; case 0x8F4C /* GL_DOUBLE_MAT3x4 */: return "GL_DOUBLE_MAT3x4 (0x8F4C)"; case 0x8F4D /* GL_DOUBLE_MAT4x2 */: return "GL_DOUBLE_MAT4x2 (0x8F4D)"; case 0x8F4E /* GL_DOUBLE_MAT4x3 */: return "GL_DOUBLE_MAT4x3 (0x8F4E)"; case 0x8FFC /* GL_DOUBLE_VEC2 */: return "GL_DOUBLE_VEC2 (0x8FFC)"; case 0x8FFD /* GL_DOUBLE_VEC3 */: return "GL_DOUBLE_VEC3 (0x8FFD)"; case 0x8FFE /* GL_DOUBLE_VEC4 */: return "GL_DOUBLE_VEC4 (0x8FFE)"; /* ------------------------ GL_ARB_half_float_pixel ------------------------ */ //case 0x140B /* GL_HALF_FLOAT_ARB */: return "GL_HALF_FLOAT_ARB (0x140B)"; /* ------------------------ GL_ARB_half_float_vertex ----------------------- */ case 0x140B /* GL_HALF_FLOAT */: return "GL_HALF_FLOAT (0x140B)"; /* ----------------------------- GL_ARB_imaging ---------------------------- */ case 0x8001 /* GL_CONSTANT_COLOR */: return "GL_CONSTANT_COLOR (0x8001)"; case 0x8002 /* GL_ONE_MINUS_CONSTANT_COLOR */: return "GL_ONE_MINUS_CONSTANT_COLOR (0x8002)"; case 0x8003 /* GL_CONSTANT_ALPHA */: return "GL_CONSTANT_ALPHA (0x8003)"; case 0x8004 /* GL_ONE_MINUS_CONSTANT_ALPHA */: return "GL_ONE_MINUS_CONSTANT_ALPHA (0x8004)"; case 0x8005 /* GL_BLEND_COLOR */: return "GL_BLEND_COLOR (0x8005)"; case 0x8006 /* GL_FUNC_ADD */: return "GL_FUNC_ADD (0x8006)"; case 0x8007 /* GL_MIN */: return "GL_MIN (0x8007)"; case 0x8008 /* GL_MAX */: return "GL_MAX (0x8008)"; case 0x8009 /* GL_BLEND_EQUATION */: return "GL_BLEND_EQUATION (0x8009)"; case 0x800A /* GL_FUNC_SUBTRACT */: return "GL_FUNC_SUBTRACT (0x800A)"; case 0x800B /* GL_FUNC_REVERSE_SUBTRACT */: return "GL_FUNC_REVERSE_SUBTRACT (0x800B)"; case 0x8010 /* GL_CONVOLUTION_1D */: return "GL_CONVOLUTION_1D (0x8010)"; case 0x8011 /* GL_CONVOLUTION_2D */: return "GL_CONVOLUTION_2D (0x8011)"; case 0x8012 /* GL_SEPARABLE_2D */: return "GL_SEPARABLE_2D (0x8012)"; case 0x8013 /* GL_CONVOLUTION_BORDER_MODE */: return "GL_CONVOLUTION_BORDER_MODE (0x8013)"; case 0x8014 /* GL_CONVOLUTION_FILTER_SCALE */: return "GL_CONVOLUTION_FILTER_SCALE (0x8014)"; case 0x8015 /* GL_CONVOLUTION_FILTER_BIAS */: return "GL_CONVOLUTION_FILTER_BIAS (0x8015)"; case 0x8016 /* GL_REDUCE */: return "GL_REDUCE (0x8016)"; case 0x8017 /* GL_CONVOLUTION_FORMAT */: return "GL_CONVOLUTION_FORMAT (0x8017)"; case 0x8018 /* GL_CONVOLUTION_WIDTH */: return "GL_CONVOLUTION_WIDTH (0x8018)"; case 0x8019 /* GL_CONVOLUTION_HEIGHT */: return "GL_CONVOLUTION_HEIGHT (0x8019)"; case 0x801A /* GL_MAX_CONVOLUTION_WIDTH */: return "GL_MAX_CONVOLUTION_WIDTH (0x801A)"; case 0x801B /* GL_MAX_CONVOLUTION_HEIGHT */: return "GL_MAX_CONVOLUTION_HEIGHT (0x801B)"; case 0x801C /* GL_POST_CONVOLUTION_RED_SCALE */: return "GL_POST_CONVOLUTION_RED_SCALE (0x801C)"; case 0x801D /* GL_POST_CONVOLUTION_GREEN_SCALE */: return "GL_POST_CONVOLUTION_GREEN_SCALE (0x801D)"; case 0x801E /* GL_POST_CONVOLUTION_BLUE_SCALE */: return "GL_POST_CONVOLUTION_BLUE_SCALE (0x801E)"; case 0x801F /* GL_POST_CONVOLUTION_ALPHA_SCALE */: return "GL_POST_CONVOLUTION_ALPHA_SCALE (0x801F)"; case 0x8020 /* GL_POST_CONVOLUTION_RED_BIAS */: return "GL_POST_CONVOLUTION_RED_BIAS (0x8020)"; case 0x8021 /* GL_POST_CONVOLUTION_GREEN_BIAS */: return "GL_POST_CONVOLUTION_GREEN_BIAS (0x8021)"; case 0x8022 /* GL_POST_CONVOLUTION_BLUE_BIAS */: return "GL_POST_CONVOLUTION_BLUE_BIAS (0x8022)"; case 0x8023 /* GL_POST_CONVOLUTION_ALPHA_BIAS */: return "GL_POST_CONVOLUTION_ALPHA_BIAS (0x8023)"; case 0x8024 /* GL_HISTOGRAM */: return "GL_HISTOGRAM (0x8024)"; case 0x8025 /* GL_PROXY_HISTOGRAM */: return "GL_PROXY_HISTOGRAM (0x8025)"; case 0x8026 /* GL_HISTOGRAM_WIDTH */: return "GL_HISTOGRAM_WIDTH (0x8026)"; case 0x8027 /* GL_HISTOGRAM_FORMAT */: return "GL_HISTOGRAM_FORMAT (0x8027)"; case 0x8028 /* GL_HISTOGRAM_RED_SIZE */: return "GL_HISTOGRAM_RED_SIZE (0x8028)"; case 0x8029 /* GL_HISTOGRAM_GREEN_SIZE */: return "GL_HISTOGRAM_GREEN_SIZE (0x8029)"; case 0x802A /* GL_HISTOGRAM_BLUE_SIZE */: return "GL_HISTOGRAM_BLUE_SIZE (0x802A)"; case 0x802B /* GL_HISTOGRAM_ALPHA_SIZE */: return "GL_HISTOGRAM_ALPHA_SIZE (0x802B)"; case 0x802C /* GL_HISTOGRAM_LUMINANCE_SIZE */: return "GL_HISTOGRAM_LUMINANCE_SIZE (0x802C)"; case 0x802D /* GL_HISTOGRAM_SINK */: return "GL_HISTOGRAM_SINK (0x802D)"; case 0x802E /* GL_MINMAX */: return "GL_MINMAX (0x802E)"; case 0x802F /* GL_MINMAX_FORMAT */: return "GL_MINMAX_FORMAT (0x802F)"; case 0x8030 /* GL_MINMAX_SINK */: return "GL_MINMAX_SINK (0x8030)"; case 0x8031 /* GL_TABLE_TOO_LARGE */: return "GL_TABLE_TOO_LARGE (0x8031)"; case 0x80B1 /* GL_COLOR_MATRIX */: return "GL_COLOR_MATRIX (0x80B1)"; case 0x80B2 /* GL_COLOR_MATRIX_STACK_DEPTH */: return "GL_COLOR_MATRIX_STACK_DEPTH (0x80B2)"; case 0x80B3 /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */: return "GL_MAX_COLOR_MATRIX_STACK_DEPTH (0x80B3)"; case 0x80B4 /* GL_POST_COLOR_MATRIX_RED_SCALE */: return "GL_POST_COLOR_MATRIX_RED_SCALE (0x80B4)"; case 0x80B5 /* GL_POST_COLOR_MATRIX_GREEN_SCALE */: return "GL_POST_COLOR_MATRIX_GREEN_SCALE (0x80B5)"; case 0x80B6 /* GL_POST_COLOR_MATRIX_BLUE_SCALE */: return "GL_POST_COLOR_MATRIX_BLUE_SCALE (0x80B6)"; case 0x80B7 /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */: return "GL_POST_COLOR_MATRIX_ALPHA_SCALE (0x80B7)"; case 0x80B8 /* GL_POST_COLOR_MATRIX_RED_BIAS */: return "GL_POST_COLOR_MATRIX_RED_BIAS (0x80B8)"; case 0x80B9 /* GL_POST_COLOR_MATRIX_GREEN_BIAS */: return "GL_POST_COLOR_MATRIX_GREEN_BIAS (0x80B9)"; case 0x80BA /* GL_POST_COLOR_MATRIX_BLUE_BIAS */: return "GL_POST_COLOR_MATRIX_BLUE_BIAS (0x80BA)"; case 0x80BB /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */: return "GL_POST_COLOR_MATRIX_ALPHA_BIAS (0x80BB)"; case 0x80D0 /* GL_COLOR_TABLE */: return "GL_COLOR_TABLE (0x80D0)"; case 0x80D1 /* GL_POST_CONVOLUTION_COLOR_TABLE */: return "GL_POST_CONVOLUTION_COLOR_TABLE (0x80D1)"; case 0x80D2 /* GL_POST_COLOR_MATRIX_COLOR_TABLE */: return "GL_POST_COLOR_MATRIX_COLOR_TABLE (0x80D2)"; case 0x80D3 /* GL_PROXY_COLOR_TABLE */: return "GL_PROXY_COLOR_TABLE (0x80D3)"; case 0x80D4 /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */: return "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE (0x80D4)"; case 0x80D5 /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */: return "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE (0x80D5)"; case 0x80D6 /* GL_COLOR_TABLE_SCALE */: return "GL_COLOR_TABLE_SCALE (0x80D6)"; case 0x80D7 /* GL_COLOR_TABLE_BIAS */: return "GL_COLOR_TABLE_BIAS (0x80D7)"; case 0x80D8 /* GL_COLOR_TABLE_FORMAT */: return "GL_COLOR_TABLE_FORMAT (0x80D8)"; case 0x80D9 /* GL_COLOR_TABLE_WIDTH */: return "GL_COLOR_TABLE_WIDTH (0x80D9)"; case 0x80DA /* GL_COLOR_TABLE_RED_SIZE */: return "GL_COLOR_TABLE_RED_SIZE (0x80DA)"; case 0x80DB /* GL_COLOR_TABLE_GREEN_SIZE */: return "GL_COLOR_TABLE_GREEN_SIZE (0x80DB)"; case 0x80DC /* GL_COLOR_TABLE_BLUE_SIZE */: return "GL_COLOR_TABLE_BLUE_SIZE (0x80DC)"; case 0x80DD /* GL_COLOR_TABLE_ALPHA_SIZE */: return "GL_COLOR_TABLE_ALPHA_SIZE (0x80DD)"; case 0x80DE /* GL_COLOR_TABLE_LUMINANCE_SIZE */: return "GL_COLOR_TABLE_LUMINANCE_SIZE (0x80DE)"; case 0x80DF /* GL_COLOR_TABLE_INTENSITY_SIZE */: return "GL_COLOR_TABLE_INTENSITY_SIZE (0x80DF)"; case 0x8150 /* GL_IGNORE_BORDER */: return "GL_IGNORE_BORDER (0x8150)"; case 0x8151 /* GL_CONSTANT_BORDER */: return "GL_CONSTANT_BORDER (0x8151)"; case 0x8152 /* GL_WRAP_BORDER */: return "GL_WRAP_BORDER (0x8152)"; case 0x8153 /* GL_REPLICATE_BORDER */: return "GL_REPLICATE_BORDER (0x8153)"; case 0x8154 /* GL_CONVOLUTION_BORDER_COLOR */: return "GL_CONVOLUTION_BORDER_COLOR (0x8154)"; /* ------------------------ GL_ARB_instanced_arrays ------------------------ */ //case 0x88FE /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB (0x88FE)"; /* ---------------------- GL_ARB_internalformat_query ---------------------- */ case 0x9380 /* GL_NUM_SAMPLE_COUNTS */: return "GL_NUM_SAMPLE_COUNTS (0x9380)";/* ---------------------- GL_ARB_internalformat_query2 --------------------- */ //case 0x0DE0 /* GL_TEXTURE_1D */: return "GL_TEXTURE_1D (0x0DE0)"; //case 0x0DE1 /* GL_TEXTURE_2D */: return "GL_TEXTURE_2D (0x0DE1)"; //case 0x806F /* GL_TEXTURE_3D */: return "GL_TEXTURE_3D (0x806F)"; //case 0x80A9 /* GL_SAMPLES */: return "GL_SAMPLES (0x80A9)"; case 0x826F /* GL_INTERNALFORMAT_SUPPORTED */: return "GL_INTERNALFORMAT_SUPPORTED (0x826F)"; case 0x8270 /* GL_INTERNALFORMAT_PREFERRED */: return "GL_INTERNALFORMAT_PREFERRED (0x8270)"; case 0x8271 /* GL_INTERNALFORMAT_RED_SIZE */: return "GL_INTERNALFORMAT_RED_SIZE (0x8271)"; case 0x8272 /* GL_INTERNALFORMAT_GREEN_SIZE */: return "GL_INTERNALFORMAT_GREEN_SIZE (0x8272)"; case 0x8273 /* GL_INTERNALFORMAT_BLUE_SIZE */: return "GL_INTERNALFORMAT_BLUE_SIZE (0x8273)"; case 0x8274 /* GL_INTERNALFORMAT_ALPHA_SIZE */: return "GL_INTERNALFORMAT_ALPHA_SIZE (0x8274)"; case 0x8275 /* GL_INTERNALFORMAT_DEPTH_SIZE */: return "GL_INTERNALFORMAT_DEPTH_SIZE (0x8275)"; case 0x8276 /* GL_INTERNALFORMAT_STENCIL_SIZE */: return "GL_INTERNALFORMAT_STENCIL_SIZE (0x8276)"; case 0x8277 /* GL_INTERNALFORMAT_SHARED_SIZE */: return "GL_INTERNALFORMAT_SHARED_SIZE (0x8277)"; case 0x8278 /* GL_INTERNALFORMAT_RED_TYPE */: return "GL_INTERNALFORMAT_RED_TYPE (0x8278)"; case 0x8279 /* GL_INTERNALFORMAT_GREEN_TYPE */: return "GL_INTERNALFORMAT_GREEN_TYPE (0x8279)"; case 0x827A /* GL_INTERNALFORMAT_BLUE_TYPE */: return "GL_INTERNALFORMAT_BLUE_TYPE (0x827A)"; case 0x827B /* GL_INTERNALFORMAT_ALPHA_TYPE */: return "GL_INTERNALFORMAT_ALPHA_TYPE (0x827B)"; case 0x827C /* GL_INTERNALFORMAT_DEPTH_TYPE */: return "GL_INTERNALFORMAT_DEPTH_TYPE (0x827C)"; case 0x827D /* GL_INTERNALFORMAT_STENCIL_TYPE */: return "GL_INTERNALFORMAT_STENCIL_TYPE (0x827D)"; case 0x827E /* GL_MAX_WIDTH */: return "GL_MAX_WIDTH (0x827E)"; case 0x827F /* GL_MAX_HEIGHT */: return "GL_MAX_HEIGHT (0x827F)"; case 0x8280 /* GL_MAX_DEPTH */: return "GL_MAX_DEPTH (0x8280)"; case 0x8281 /* GL_MAX_LAYERS */: return "GL_MAX_LAYERS (0x8281)"; case 0x8282 /* GL_MAX_COMBINED_DIMENSIONS */: return "GL_MAX_COMBINED_DIMENSIONS (0x8282)"; case 0x8283 /* GL_COLOR_COMPONENTS */: return "GL_COLOR_COMPONENTS (0x8283)"; case 0x8284 /* GL_DEPTH_COMPONENTS */: return "GL_DEPTH_COMPONENTS (0x8284)"; case 0x8285 /* GL_STENCIL_COMPONENTS */: return "GL_STENCIL_COMPONENTS (0x8285)"; case 0x8286 /* GL_COLOR_RENDERABLE */: return "GL_COLOR_RENDERABLE (0x8286)"; case 0x8287 /* GL_DEPTH_RENDERABLE */: return "GL_DEPTH_RENDERABLE (0x8287)"; case 0x8288 /* GL_STENCIL_RENDERABLE */: return "GL_STENCIL_RENDERABLE (0x8288)"; case 0x8289 /* GL_FRAMEBUFFER_RENDERABLE */: return "GL_FRAMEBUFFER_RENDERABLE (0x8289)"; case 0x828A /* GL_FRAMEBUFFER_RENDERABLE_LAYERED */: return "GL_FRAMEBUFFER_RENDERABLE_LAYERED (0x828A)"; case 0x828B /* GL_FRAMEBUFFER_BLEND */: return "GL_FRAMEBUFFER_BLEND (0x828B)"; case 0x828C /* GL_READ_PIXELS */: return "GL_READ_PIXELS (0x828C)"; case 0x828D /* GL_READ_PIXELS_FORMAT */: return "GL_READ_PIXELS_FORMAT (0x828D)"; case 0x828E /* GL_READ_PIXELS_TYPE */: return "GL_READ_PIXELS_TYPE (0x828E)"; case 0x828F /* GL_TEXTURE_IMAGE_FORMAT */: return "GL_TEXTURE_IMAGE_FORMAT (0x828F)"; case 0x8290 /* GL_TEXTURE_IMAGE_TYPE */: return "GL_TEXTURE_IMAGE_TYPE (0x8290)"; case 0x8291 /* GL_GET_TEXTURE_IMAGE_FORMAT */: return "GL_GET_TEXTURE_IMAGE_FORMAT (0x8291)"; case 0x8292 /* GL_GET_TEXTURE_IMAGE_TYPE */: return "GL_GET_TEXTURE_IMAGE_TYPE (0x8292)"; case 0x8293 /* GL_MIPMAP */: return "GL_MIPMAP (0x8293)"; case 0x8294 /* GL_MANUAL_GENERATE_MIPMAP */: return "GL_MANUAL_GENERATE_MIPMAP (0x8294)"; case 0x8295 /* GL_AUTO_GENERATE_MIPMAP */: return "GL_AUTO_GENERATE_MIPMAP (0x8295)"; case 0x8296 /* GL_COLOR_ENCODING */: return "GL_COLOR_ENCODING (0x8296)"; case 0x8297 /* GL_SRGB_READ */: return "GL_SRGB_READ (0x8297)"; case 0x8298 /* GL_SRGB_WRITE */: return "GL_SRGB_WRITE (0x8298)"; case 0x8299 /* GL_SRGB_DECODE_ARB */: return "GL_SRGB_DECODE_ARB (0x8299)"; case 0x829A /* GL_FILTER */: return "GL_FILTER (0x829A)"; case 0x829B /* GL_VERTEX_TEXTURE */: return "GL_VERTEX_TEXTURE (0x829B)"; case 0x829C /* GL_TESS_CONTROL_TEXTURE */: return "GL_TESS_CONTROL_TEXTURE (0x829C)"; case 0x829D /* GL_TESS_EVALUATION_TEXTURE */: return "GL_TESS_EVALUATION_TEXTURE (0x829D)"; case 0x829E /* GL_GEOMETRY_TEXTURE */: return "GL_GEOMETRY_TEXTURE (0x829E)"; case 0x829F /* GL_FRAGMENT_TEXTURE */: return "GL_FRAGMENT_TEXTURE (0x829F)"; case 0x82A0 /* GL_COMPUTE_TEXTURE */: return "GL_COMPUTE_TEXTURE (0x82A0)"; case 0x82A1 /* GL_TEXTURE_SHADOW */: return "GL_TEXTURE_SHADOW (0x82A1)"; case 0x82A2 /* GL_TEXTURE_GATHER */: return "GL_TEXTURE_GATHER (0x82A2)"; case 0x82A3 /* GL_TEXTURE_GATHER_SHADOW */: return "GL_TEXTURE_GATHER_SHADOW (0x82A3)"; case 0x82A4 /* GL_SHADER_IMAGE_LOAD */: return "GL_SHADER_IMAGE_LOAD (0x82A4)"; case 0x82A5 /* GL_SHADER_IMAGE_STORE */: return "GL_SHADER_IMAGE_STORE (0x82A5)"; case 0x82A6 /* GL_SHADER_IMAGE_ATOMIC */: return "GL_SHADER_IMAGE_ATOMIC (0x82A6)"; case 0x82A7 /* GL_IMAGE_TEXEL_SIZE */: return "GL_IMAGE_TEXEL_SIZE (0x82A7)"; case 0x82A8 /* GL_IMAGE_COMPATIBILITY_CLASS */: return "GL_IMAGE_COMPATIBILITY_CLASS (0x82A8)"; case 0x82A9 /* GL_IMAGE_PIXEL_FORMAT */: return "GL_IMAGE_PIXEL_FORMAT (0x82A9)"; case 0x82AA /* GL_IMAGE_PIXEL_TYPE */: return "GL_IMAGE_PIXEL_TYPE (0x82AA)"; case 0x82AC /* GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST */: return "GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST (0x82AC)"; case 0x82AD /* GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST */: return "GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST (0x82AD)"; case 0x82AE /* GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE */: return "GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE (0x82AE)"; case 0x82AF /* GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE */: return "GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE (0x82AF)"; case 0x82B1 /* GL_TEXTURE_COMPRESSED_BLOCK_WIDTH */: return "GL_TEXTURE_COMPRESSED_BLOCK_WIDTH (0x82B1)"; case 0x82B2 /* GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT */: return "GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT (0x82B2)"; case 0x82B3 /* GL_TEXTURE_COMPRESSED_BLOCK_SIZE */: return "GL_TEXTURE_COMPRESSED_BLOCK_SIZE (0x82B3)"; case 0x82B4 /* GL_CLEAR_BUFFER */: return "GL_CLEAR_BUFFER (0x82B4)"; case 0x82B5 /* GL_TEXTURE_VIEW */: return "GL_TEXTURE_VIEW (0x82B5)"; case 0x82B6 /* GL_VIEW_COMPATIBILITY_CLASS */: return "GL_VIEW_COMPATIBILITY_CLASS (0x82B6)"; case 0x82B7 /* GL_FULL_SUPPORT */: return "GL_FULL_SUPPORT (0x82B7)"; case 0x82B8 /* GL_CAVEAT_SUPPORT */: return "GL_CAVEAT_SUPPORT (0x82B8)"; case 0x82B9 /* GL_IMAGE_CLASS_4_X_32 */: return "GL_IMAGE_CLASS_4_X_32 (0x82B9)"; case 0x82BA /* GL_IMAGE_CLASS_2_X_32 */: return "GL_IMAGE_CLASS_2_X_32 (0x82BA)"; case 0x82BB /* GL_IMAGE_CLASS_1_X_32 */: return "GL_IMAGE_CLASS_1_X_32 (0x82BB)"; case 0x82BC /* GL_IMAGE_CLASS_4_X_16 */: return "GL_IMAGE_CLASS_4_X_16 (0x82BC)"; case 0x82BD /* GL_IMAGE_CLASS_2_X_16 */: return "GL_IMAGE_CLASS_2_X_16 (0x82BD)"; case 0x82BE /* GL_IMAGE_CLASS_1_X_16 */: return "GL_IMAGE_CLASS_1_X_16 (0x82BE)"; case 0x82BF /* GL_IMAGE_CLASS_4_X_8 */: return "GL_IMAGE_CLASS_4_X_8 (0x82BF)"; case 0x82C0 /* GL_IMAGE_CLASS_2_X_8 */: return "GL_IMAGE_CLASS_2_X_8 (0x82C0)"; case 0x82C1 /* GL_IMAGE_CLASS_1_X_8 */: return "GL_IMAGE_CLASS_1_X_8 (0x82C1)"; case 0x82C2 /* GL_IMAGE_CLASS_11_11_10 */: return "GL_IMAGE_CLASS_11_11_10 (0x82C2)"; case 0x82C3 /* GL_IMAGE_CLASS_10_10_10_2 */: return "GL_IMAGE_CLASS_10_10_10_2 (0x82C3)"; case 0x82C4 /* GL_VIEW_CLASS_128_BITS */: return "GL_VIEW_CLASS_128_BITS (0x82C4)"; case 0x82C5 /* GL_VIEW_CLASS_96_BITS */: return "GL_VIEW_CLASS_96_BITS (0x82C5)"; case 0x82C6 /* GL_VIEW_CLASS_64_BITS */: return "GL_VIEW_CLASS_64_BITS (0x82C6)"; case 0x82C7 /* GL_VIEW_CLASS_48_BITS */: return "GL_VIEW_CLASS_48_BITS (0x82C7)"; case 0x82C8 /* GL_VIEW_CLASS_32_BITS */: return "GL_VIEW_CLASS_32_BITS (0x82C8)"; case 0x82C9 /* GL_VIEW_CLASS_24_BITS */: return "GL_VIEW_CLASS_24_BITS (0x82C9)"; case 0x82CA /* GL_VIEW_CLASS_16_BITS */: return "GL_VIEW_CLASS_16_BITS (0x82CA)"; case 0x82CB /* GL_VIEW_CLASS_8_BITS */: return "GL_VIEW_CLASS_8_BITS (0x82CB)"; case 0x82CC /* GL_VIEW_CLASS_S3TC_DXT1_RGB */: return "GL_VIEW_CLASS_S3TC_DXT1_RGB (0x82CC)"; case 0x82CD /* GL_VIEW_CLASS_S3TC_DXT1_RGBA */: return "GL_VIEW_CLASS_S3TC_DXT1_RGBA (0x82CD)"; case 0x82CE /* GL_VIEW_CLASS_S3TC_DXT3_RGBA */: return "GL_VIEW_CLASS_S3TC_DXT3_RGBA (0x82CE)"; case 0x82CF /* GL_VIEW_CLASS_S3TC_DXT5_RGBA */: return "GL_VIEW_CLASS_S3TC_DXT5_RGBA (0x82CF)"; case 0x82D0 /* GL_VIEW_CLASS_RGTC1_RED */: return "GL_VIEW_CLASS_RGTC1_RED (0x82D0)"; case 0x82D1 /* GL_VIEW_CLASS_RGTC2_RG */: return "GL_VIEW_CLASS_RGTC2_RG (0x82D1)"; case 0x82D2 /* GL_VIEW_CLASS_BPTC_UNORM */: return "GL_VIEW_CLASS_BPTC_UNORM (0x82D2)"; case 0x82D3 /* GL_VIEW_CLASS_BPTC_FLOAT */: return "GL_VIEW_CLASS_BPTC_FLOAT (0x82D3)"; //case 0x84F5 /* GL_TEXTURE_RECTANGLE */: return "GL_TEXTURE_RECTANGLE (0x84F5)"; //case 0x8C18 /* GL_TEXTURE_1D_ARRAY */: return "GL_TEXTURE_1D_ARRAY (0x8C18)"; //case 0x8C1A /* GL_TEXTURE_2D_ARRAY */: return "GL_TEXTURE_2D_ARRAY (0x8C1A)"; //case 0x8C2A /* GL_TEXTURE_BUFFER */: return "GL_TEXTURE_BUFFER (0x8C2A)"; //case 0x8D41 /* GL_RENDERBUFFER */: return "GL_RENDERBUFFER (0x8D41)"; //case 0x9009 /* GL_TEXTURE_CUBE_MAP_ARRAY */: return "GL_TEXTURE_CUBE_MAP_ARRAY (0x9009)"; case 0x9100 /* GL_TEXTURE_2D_MULTISAMPLE */: return "GL_TEXTURE_2D_MULTISAMPLE (0x9100)"; case 0x9102 /* GL_TEXTURE_2D_MULTISAMPLE_ARRAY */: return "GL_TEXTURE_2D_MULTISAMPLE_ARRAY (0x9102)"; //case 0x9380 /* GL_NUM_SAMPLE_COUNTS */: return "GL_NUM_SAMPLE_COUNTS (0x9380)"; /* ----------------------- GL_ARB_invalidate_subdata ----------------------- */ /* ---------------------- GL_ARB_map_buffer_alignment ---------------------- */ case 0x90BC /* GL_MIN_MAP_BUFFER_ALIGNMENT */: return "GL_MIN_MAP_BUFFER_ALIGNMENT (0x90BC)"; /* ------------------------ GL_ARB_map_buffer_range ------------------------ */ //case 0x0001 /* GL_MAP_READ_BIT */: return "GL_MAP_READ_BIT (0x0001)"; //case 0x0002 /* GL_MAP_WRITE_BIT */: return "GL_MAP_WRITE_BIT (0x0002)"; //case 0x0004 /* GL_MAP_INVALIDATE_RANGE_BIT */: return "GL_MAP_INVALIDATE_RANGE_BIT (0x0004)"; //case 0x0008 /* GL_MAP_INVALIDATE_BUFFER_BIT */: return "GL_MAP_INVALIDATE_BUFFER_BIT (0x0008)"; //case 0x0010 /* GL_MAP_FLUSH_EXPLICIT_BIT */: return "GL_MAP_FLUSH_EXPLICIT_BIT (0x0010)"; //case 0x0020 /* GL_MAP_UNSYNCHRONIZED_BIT */: return "GL_MAP_UNSYNCHRONIZED_BIT (0x0020)"; /* ------------------------- GL_ARB_matrix_palette ------------------------- */ case 0x8840 /* GL_MATRIX_PALETTE_ARB */: return "GL_MATRIX_PALETTE_ARB (0x8840)"; case 0x8841 /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */: return "GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB (0x8841)"; case 0x8842 /* GL_MAX_PALETTE_MATRICES_ARB */: return "GL_MAX_PALETTE_MATRICES_ARB (0x8842)"; case 0x8843 /* GL_CURRENT_PALETTE_MATRIX_ARB */: return "GL_CURRENT_PALETTE_MATRIX_ARB (0x8843)"; case 0x8844 /* GL_MATRIX_INDEX_ARRAY_ARB */: return "GL_MATRIX_INDEX_ARRAY_ARB (0x8844)"; case 0x8845 /* GL_CURRENT_MATRIX_INDEX_ARB */: return "GL_CURRENT_MATRIX_INDEX_ARB (0x8845)"; case 0x8846 /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */: return "GL_MATRIX_INDEX_ARRAY_SIZE_ARB (0x8846)"; case 0x8847 /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */: return "GL_MATRIX_INDEX_ARRAY_TYPE_ARB (0x8847)"; case 0x8848 /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */: return "GL_MATRIX_INDEX_ARRAY_STRIDE_ARB (0x8848)"; case 0x8849 /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */: return "GL_MATRIX_INDEX_ARRAY_POINTER_ARB (0x8849)"; /* ----------------------- GL_ARB_multi_draw_indirect ---------------------- */ /* --------------------------- GL_ARB_multisample -------------------------- */ //case 0x809D /* GL_MULTISAMPLE_ARB */: return "GL_MULTISAMPLE_ARB (0x809D)"; //case 0x809E /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */: return "GL_SAMPLE_ALPHA_TO_COVERAGE_ARB (0x809E)"; //case 0x809F /* GL_SAMPLE_ALPHA_TO_ONE_ARB */: return "GL_SAMPLE_ALPHA_TO_ONE_ARB (0x809F)"; //case 0x80A0 /* GL_SAMPLE_COVERAGE_ARB */: return "GL_SAMPLE_COVERAGE_ARB (0x80A0)"; //case 0x80A8 /* GL_SAMPLE_BUFFERS_ARB */: return "GL_SAMPLE_BUFFERS_ARB (0x80A8)"; //case 0x80A9 /* GL_SAMPLES_ARB */: return "GL_SAMPLES_ARB (0x80A9)"; //case 0x80AA /* GL_SAMPLE_COVERAGE_VALUE_ARB */: return "GL_SAMPLE_COVERAGE_VALUE_ARB (0x80AA)"; //case 0x80AB /* GL_SAMPLE_COVERAGE_INVERT_ARB */: return "GL_SAMPLE_COVERAGE_INVERT_ARB (0x80AB)"; //case 0x20000000 /* GL_MULTISAMPLE_BIT_ARB */: return "GL_MULTISAMPLE_BIT_ARB (0x20000000)";/* -------------------------- GL_ARB_multitexture -------------------------- */ //case 0x84C0 /* GL_TEXTURE0_ARB */: return "GL_TEXTURE0_ARB (0x84C0)"; //case 0x84C1 /* GL_TEXTURE1_ARB */: return "GL_TEXTURE1_ARB (0x84C1)"; //case 0x84C2 /* GL_TEXTURE2_ARB */: return "GL_TEXTURE2_ARB (0x84C2)"; //case 0x84C3 /* GL_TEXTURE3_ARB */: return "GL_TEXTURE3_ARB (0x84C3)"; //case 0x84C4 /* GL_TEXTURE4_ARB */: return "GL_TEXTURE4_ARB (0x84C4)"; //case 0x84C5 /* GL_TEXTURE5_ARB */: return "GL_TEXTURE5_ARB (0x84C5)"; //case 0x84C6 /* GL_TEXTURE6_ARB */: return "GL_TEXTURE6_ARB (0x84C6)"; //case 0x84C7 /* GL_TEXTURE7_ARB */: return "GL_TEXTURE7_ARB (0x84C7)"; //case 0x84C8 /* GL_TEXTURE8_ARB */: return "GL_TEXTURE8_ARB (0x84C8)"; //case 0x84C9 /* GL_TEXTURE9_ARB */: return "GL_TEXTURE9_ARB (0x84C9)"; //case 0x84CA /* GL_TEXTURE10_ARB */: return "GL_TEXTURE10_ARB (0x84CA)"; //case 0x84CB /* GL_TEXTURE11_ARB */: return "GL_TEXTURE11_ARB (0x84CB)"; //case 0x84CC /* GL_TEXTURE12_ARB */: return "GL_TEXTURE12_ARB (0x84CC)"; //case 0x84CD /* GL_TEXTURE13_ARB */: return "GL_TEXTURE13_ARB (0x84CD)"; //case 0x84CE /* GL_TEXTURE14_ARB */: return "GL_TEXTURE14_ARB (0x84CE)"; //case 0x84CF /* GL_TEXTURE15_ARB */: return "GL_TEXTURE15_ARB (0x84CF)"; //case 0x84D0 /* GL_TEXTURE16_ARB */: return "GL_TEXTURE16_ARB (0x84D0)"; //case 0x84D1 /* GL_TEXTURE17_ARB */: return "GL_TEXTURE17_ARB (0x84D1)"; //case 0x84D2 /* GL_TEXTURE18_ARB */: return "GL_TEXTURE18_ARB (0x84D2)"; //case 0x84D3 /* GL_TEXTURE19_ARB */: return "GL_TEXTURE19_ARB (0x84D3)"; //case 0x84D4 /* GL_TEXTURE20_ARB */: return "GL_TEXTURE20_ARB (0x84D4)"; //case 0x84D5 /* GL_TEXTURE21_ARB */: return "GL_TEXTURE21_ARB (0x84D5)"; //case 0x84D6 /* GL_TEXTURE22_ARB */: return "GL_TEXTURE22_ARB (0x84D6)"; //case 0x84D7 /* GL_TEXTURE23_ARB */: return "GL_TEXTURE23_ARB (0x84D7)"; //case 0x84D8 /* GL_TEXTURE24_ARB */: return "GL_TEXTURE24_ARB (0x84D8)"; //case 0x84D9 /* GL_TEXTURE25_ARB */: return "GL_TEXTURE25_ARB (0x84D9)"; //case 0x84DA /* GL_TEXTURE26_ARB */: return "GL_TEXTURE26_ARB (0x84DA)"; //case 0x84DB /* GL_TEXTURE27_ARB */: return "GL_TEXTURE27_ARB (0x84DB)"; //case 0x84DC /* GL_TEXTURE28_ARB */: return "GL_TEXTURE28_ARB (0x84DC)"; //case 0x84DD /* GL_TEXTURE29_ARB */: return "GL_TEXTURE29_ARB (0x84DD)"; //case 0x84DE /* GL_TEXTURE30_ARB */: return "GL_TEXTURE30_ARB (0x84DE)"; //case 0x84DF /* GL_TEXTURE31_ARB */: return "GL_TEXTURE31_ARB (0x84DF)"; //case 0x84E0 /* GL_ACTIVE_TEXTURE_ARB */: return "GL_ACTIVE_TEXTURE_ARB (0x84E0)"; //case 0x84E1 /* GL_CLIENT_ACTIVE_TEXTURE_ARB */: return "GL_CLIENT_ACTIVE_TEXTURE_ARB (0x84E1)"; //case 0x84E2 /* GL_MAX_TEXTURE_UNITS_ARB */: return "GL_MAX_TEXTURE_UNITS_ARB (0x84E2)"; /* ------------------------- GL_ARB_occlusion_query ------------------------ */ //case 0x8864 /* GL_QUERY_COUNTER_BITS_ARB */: return "GL_QUERY_COUNTER_BITS_ARB (0x8864)"; //case 0x8865 /* GL_CURRENT_QUERY_ARB */: return "GL_CURRENT_QUERY_ARB (0x8865)"; //case 0x8866 /* GL_QUERY_RESULT_ARB */: return "GL_QUERY_RESULT_ARB (0x8866)"; //case 0x8867 /* GL_QUERY_RESULT_AVAILABLE_ARB */: return "GL_QUERY_RESULT_AVAILABLE_ARB (0x8867)"; //case 0x8914 /* GL_SAMPLES_PASSED_ARB */: return "GL_SAMPLES_PASSED_ARB (0x8914)"; /* ------------------------ GL_ARB_occlusion_query2 ------------------------ */ case 0x8C2F /* GL_ANY_SAMPLES_PASSED */: return "GL_ANY_SAMPLES_PASSED (0x8C2F)"; /* ----------------------- GL_ARB_pixel_buffer_object ---------------------- */ //case 0x88EB /* GL_PIXEL_PACK_BUFFER_ARB */: return "GL_PIXEL_PACK_BUFFER_ARB (0x88EB)"; //case 0x88EC /* GL_PIXEL_UNPACK_BUFFER_ARB */: return "GL_PIXEL_UNPACK_BUFFER_ARB (0x88EC)"; //case 0x88ED /* GL_PIXEL_PACK_BUFFER_BINDING_ARB */: return "GL_PIXEL_PACK_BUFFER_BINDING_ARB (0x88ED)"; //case 0x88EF /* GL_PIXEL_UNPACK_BUFFER_BINDING_ARB */: return "GL_PIXEL_UNPACK_BUFFER_BINDING_ARB (0x88EF)"; /* ------------------------ GL_ARB_point_parameters ------------------------ */ //case 0x8126 /* GL_POINT_SIZE_MIN_ARB */: return "GL_POINT_SIZE_MIN_ARB (0x8126)"; //case 0x8127 /* GL_POINT_SIZE_MAX_ARB */: return "GL_POINT_SIZE_MAX_ARB (0x8127)"; //case 0x8128 /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */: return "GL_POINT_FADE_THRESHOLD_SIZE_ARB (0x8128)"; //case 0x8129 /* GL_POINT_DISTANCE_ATTENUATION_ARB */: return "GL_POINT_DISTANCE_ATTENUATION_ARB (0x8129)"; /* -------------------------- GL_ARB_point_sprite -------------------------- */ //case 0x8861 /* GL_POINT_SPRITE_ARB */: return "GL_POINT_SPRITE_ARB (0x8861)"; //case 0x8862 /* GL_COORD_REPLACE_ARB */: return "GL_COORD_REPLACE_ARB (0x8862)"; /* --------------------- GL_ARB_program_interface_query -------------------- */ case 0x92E1 /* GL_UNIFORM */: return "GL_UNIFORM (0x92E1)"; case 0x92E2 /* GL_UNIFORM_BLOCK */: return "GL_UNIFORM_BLOCK (0x92E2)"; case 0x92E3 /* GL_PROGRAM_INPUT */: return "GL_PROGRAM_INPUT (0x92E3)"; case 0x92E4 /* GL_PROGRAM_OUTPUT */: return "GL_PROGRAM_OUTPUT (0x92E4)"; case 0x92E5 /* GL_BUFFER_VARIABLE */: return "GL_BUFFER_VARIABLE (0x92E5)"; case 0x92E6 /* GL_SHADER_STORAGE_BLOCK */: return "GL_SHADER_STORAGE_BLOCK (0x92E6)"; case 0x92E7 /* GL_IS_PER_PATCH */: return "GL_IS_PER_PATCH (0x92E7)"; case 0x92E8 /* GL_VERTEX_SUBROUTINE */: return "GL_VERTEX_SUBROUTINE (0x92E8)"; case 0x92E9 /* GL_TESS_CONTROL_SUBROUTINE */: return "GL_TESS_CONTROL_SUBROUTINE (0x92E9)"; case 0x92EA /* GL_TESS_EVALUATION_SUBROUTINE */: return "GL_TESS_EVALUATION_SUBROUTINE (0x92EA)"; case 0x92EB /* GL_GEOMETRY_SUBROUTINE */: return "GL_GEOMETRY_SUBROUTINE (0x92EB)"; case 0x92EC /* GL_FRAGMENT_SUBROUTINE */: return "GL_FRAGMENT_SUBROUTINE (0x92EC)"; case 0x92ED /* GL_COMPUTE_SUBROUTINE */: return "GL_COMPUTE_SUBROUTINE (0x92ED)"; case 0x92EE /* GL_VERTEX_SUBROUTINE_UNIFORM */: return "GL_VERTEX_SUBROUTINE_UNIFORM (0x92EE)"; case 0x92EF /* GL_TESS_CONTROL_SUBROUTINE_UNIFORM */: return "GL_TESS_CONTROL_SUBROUTINE_UNIFORM (0x92EF)"; case 0x92F0 /* GL_TESS_EVALUATION_SUBROUTINE_UNIFORM */: return "GL_TESS_EVALUATION_SUBROUTINE_UNIFORM (0x92F0)"; case 0x92F1 /* GL_GEOMETRY_SUBROUTINE_UNIFORM */: return "GL_GEOMETRY_SUBROUTINE_UNIFORM (0x92F1)"; case 0x92F2 /* GL_FRAGMENT_SUBROUTINE_UNIFORM */: return "GL_FRAGMENT_SUBROUTINE_UNIFORM (0x92F2)"; case 0x92F3 /* GL_COMPUTE_SUBROUTINE_UNIFORM */: return "GL_COMPUTE_SUBROUTINE_UNIFORM (0x92F3)"; case 0x92F4 /* GL_TRANSFORM_FEEDBACK_VARYING */: return "GL_TRANSFORM_FEEDBACK_VARYING (0x92F4)"; case 0x92F5 /* GL_ACTIVE_RESOURCES */: return "GL_ACTIVE_RESOURCES (0x92F5)"; case 0x92F6 /* GL_MAX_NAME_LENGTH */: return "GL_MAX_NAME_LENGTH (0x92F6)"; case 0x92F7 /* GL_MAX_NUM_ACTIVE_VARIABLES */: return "GL_MAX_NUM_ACTIVE_VARIABLES (0x92F7)"; case 0x92F8 /* GL_MAX_NUM_COMPATIBLE_SUBROUTINES */: return "GL_MAX_NUM_COMPATIBLE_SUBROUTINES (0x92F8)"; case 0x92F9 /* GL_NAME_LENGTH */: return "GL_NAME_LENGTH (0x92F9)"; case 0x92FA /* GL_TYPE */: return "GL_TYPE (0x92FA)"; case 0x92FB /* GL_ARRAY_SIZE */: return "GL_ARRAY_SIZE (0x92FB)"; case 0x92FC /* GL_OFFSET */: return "GL_OFFSET (0x92FC)"; case 0x92FD /* GL_BLOCK_INDEX */: return "GL_BLOCK_INDEX (0x92FD)"; case 0x92FE /* GL_ARRAY_STRIDE */: return "GL_ARRAY_STRIDE (0x92FE)"; case 0x92FF /* GL_MATRIX_STRIDE */: return "GL_MATRIX_STRIDE (0x92FF)"; case 0x9300 /* GL_IS_ROW_MAJOR */: return "GL_IS_ROW_MAJOR (0x9300)"; case 0x9301 /* GL_ATOMIC_COUNTER_BUFFER_INDEX */: return "GL_ATOMIC_COUNTER_BUFFER_INDEX (0x9301)"; case 0x9302 /* GL_BUFFER_BINDING */: return "GL_BUFFER_BINDING (0x9302)"; case 0x9303 /* GL_BUFFER_DATA_SIZE */: return "GL_BUFFER_DATA_SIZE (0x9303)"; case 0x9304 /* GL_NUM_ACTIVE_VARIABLES */: return "GL_NUM_ACTIVE_VARIABLES (0x9304)"; case 0x9305 /* GL_ACTIVE_VARIABLES */: return "GL_ACTIVE_VARIABLES (0x9305)"; case 0x9306 /* GL_REFERENCED_BY_VERTEX_SHADER */: return "GL_REFERENCED_BY_VERTEX_SHADER (0x9306)"; case 0x9307 /* GL_REFERENCED_BY_TESS_CONTROL_SHADER */: return "GL_REFERENCED_BY_TESS_CONTROL_SHADER (0x9307)"; case 0x9308 /* GL_REFERENCED_BY_TESS_EVALUATION_SHADER */: return "GL_REFERENCED_BY_TESS_EVALUATION_SHADER (0x9308)"; case 0x9309 /* GL_REFERENCED_BY_GEOMETRY_SHADER */: return "GL_REFERENCED_BY_GEOMETRY_SHADER (0x9309)"; case 0x930A /* GL_REFERENCED_BY_FRAGMENT_SHADER */: return "GL_REFERENCED_BY_FRAGMENT_SHADER (0x930A)"; case 0x930B /* GL_REFERENCED_BY_COMPUTE_SHADER */: return "GL_REFERENCED_BY_COMPUTE_SHADER (0x930B)"; case 0x930C /* GL_TOP_LEVEL_ARRAY_SIZE */: return "GL_TOP_LEVEL_ARRAY_SIZE (0x930C)"; case 0x930D /* GL_TOP_LEVEL_ARRAY_STRIDE */: return "GL_TOP_LEVEL_ARRAY_STRIDE (0x930D)"; case 0x930E /* GL_LOCATION */: return "GL_LOCATION (0x930E)"; case 0x930F /* GL_LOCATION_INDEX */: return "GL_LOCATION_INDEX (0x930F)";/* ------------------------ GL_ARB_provoking_vertex ------------------------ */ case 0x8E4C /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */: return "GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION (0x8E4C)"; case 0x8E4D /* GL_FIRST_VERTEX_CONVENTION */: return "GL_FIRST_VERTEX_CONVENTION (0x8E4D)"; case 0x8E4E /* GL_LAST_VERTEX_CONVENTION */: return "GL_LAST_VERTEX_CONVENTION (0x8E4E)"; case 0x8E4F /* GL_PROVOKING_VERTEX */: return "GL_PROVOKING_VERTEX (0x8E4F)";/* ------------------ GL_ARB_robust_buffer_access_behavior ----------------- */ /* --------------------------- GL_ARB_robustness --------------------------- */ //case 0x00000004 /* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB */: return "GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB (0x00000004)"; case 0x8252 /* GL_LOSE_CONTEXT_ON_RESET_ARB */: return "GL_LOSE_CONTEXT_ON_RESET_ARB (0x8252)"; case 0x8253 /* GL_GUILTY_CONTEXT_RESET_ARB */: return "GL_GUILTY_CONTEXT_RESET_ARB (0x8253)"; case 0x8254 /* GL_INNOCENT_CONTEXT_RESET_ARB */: return "GL_INNOCENT_CONTEXT_RESET_ARB (0x8254)"; case 0x8255 /* GL_UNKNOWN_CONTEXT_RESET_ARB */: return "GL_UNKNOWN_CONTEXT_RESET_ARB (0x8255)"; case 0x8256 /* GL_RESET_NOTIFICATION_STRATEGY_ARB */: return "GL_RESET_NOTIFICATION_STRATEGY_ARB (0x8256)"; case 0x8261 /* GL_NO_RESET_NOTIFICATION_ARB */: return "GL_NO_RESET_NOTIFICATION_ARB (0x8261)"; /* ---------------- GL_ARB_robustness_application_isolation ---------------- */ /* ---------------- GL_ARB_robustness_share_group_isolation ---------------- */ /* ------------------------- GL_ARB_sample_shading ------------------------- */ //case 0x8C36 /* GL_SAMPLE_SHADING_ARB */: return "GL_SAMPLE_SHADING_ARB (0x8C36)"; //case 0x8C37 /* GL_MIN_SAMPLE_SHADING_VALUE_ARB */: return "GL_MIN_SAMPLE_SHADING_VALUE_ARB (0x8C37)"; /* ------------------------- GL_ARB_sampler_objects ------------------------ */ case 0x8919 /* GL_SAMPLER_BINDING */: return "GL_SAMPLER_BINDING (0x8919)"; /* ------------------------ GL_ARB_seamless_cube_map ----------------------- */ //case 0x884F /* GL_TEXTURE_CUBE_MAP_SEAMLESS */: return "GL_TEXTURE_CUBE_MAP_SEAMLESS (0x884F)"; /* --------------------- GL_ARB_separate_shader_objects -------------------- */ //case 0x00000001 /* GL_VERTEX_SHADER_BIT */: return "GL_VERTEX_SHADER_BIT (0x00000001)"; //case 0x00000002 /* GL_FRAGMENT_SHADER_BIT */: return "GL_FRAGMENT_SHADER_BIT (0x00000002)"; //case 0x00000004 /* GL_GEOMETRY_SHADER_BIT */: return "GL_GEOMETRY_SHADER_BIT (0x00000004)"; //case 0x00000008 /* GL_TESS_CONTROL_SHADER_BIT */: return "GL_TESS_CONTROL_SHADER_BIT (0x00000008)"; //case 0x00000010 /* GL_TESS_EVALUATION_SHADER_BIT */: return "GL_TESS_EVALUATION_SHADER_BIT (0x00000010)"; case 0x8258 /* GL_PROGRAM_SEPARABLE */: return "GL_PROGRAM_SEPARABLE (0x8258)"; case 0x8259 /* GL_ACTIVE_PROGRAM */: return "GL_ACTIVE_PROGRAM (0x8259)"; case 0x825A /* GL_PROGRAM_PIPELINE_BINDING */: return "GL_PROGRAM_PIPELINE_BINDING (0x825A)"; //case 0xFFFFFFFF /* GL_ALL_SHADER_BITS */: return "GL_ALL_SHADER_BITS (0xFFFFFFFF)"; /* --------------------- GL_ARB_shader_atomic_counters --------------------- */ case 0x92C0 /* GL_ATOMIC_COUNTER_BUFFER */: return "GL_ATOMIC_COUNTER_BUFFER (0x92C0)"; case 0x92C1 /* GL_ATOMIC_COUNTER_BUFFER_BINDING */: return "GL_ATOMIC_COUNTER_BUFFER_BINDING (0x92C1)"; case 0x92C2 /* GL_ATOMIC_COUNTER_BUFFER_START */: return "GL_ATOMIC_COUNTER_BUFFER_START (0x92C2)"; case 0x92C3 /* GL_ATOMIC_COUNTER_BUFFER_SIZE */: return "GL_ATOMIC_COUNTER_BUFFER_SIZE (0x92C3)"; case 0x92C4 /* GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE */: return "GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE (0x92C4)"; case 0x92C5 /* GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS */: return "GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS (0x92C5)"; case 0x92C6 /* GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES */: return "GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES (0x92C6)"; case 0x92C7 /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER (0x92C7)"; case 0x92C8 /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER (0x92C8)"; case 0x92C9 /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER (0x92C9)"; case 0x92CA /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER (0x92CA)"; case 0x92CB /* GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER */: return "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER (0x92CB)"; case 0x92CC /* GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS (0x92CC)"; case 0x92CD /* GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS (0x92CD)"; case 0x92CE /* GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS (0x92CE)"; case 0x92CF /* GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS (0x92CF)"; case 0x92D0 /* GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS (0x92D0)"; case 0x92D1 /* GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS */: return "GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS (0x92D1)"; case 0x92D2 /* GL_MAX_VERTEX_ATOMIC_COUNTERS */: return "GL_MAX_VERTEX_ATOMIC_COUNTERS (0x92D2)"; case 0x92D3 /* GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS */: return "GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS (0x92D3)"; case 0x92D4 /* GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS */: return "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS (0x92D4)"; case 0x92D5 /* GL_MAX_GEOMETRY_ATOMIC_COUNTERS */: return "GL_MAX_GEOMETRY_ATOMIC_COUNTERS (0x92D5)"; case 0x92D6 /* GL_MAX_FRAGMENT_ATOMIC_COUNTERS */: return "GL_MAX_FRAGMENT_ATOMIC_COUNTERS (0x92D6)"; case 0x92D7 /* GL_MAX_COMBINED_ATOMIC_COUNTERS */: return "GL_MAX_COMBINED_ATOMIC_COUNTERS (0x92D7)"; case 0x92D8 /* GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE */: return "GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE (0x92D8)"; case 0x92D9 /* GL_ACTIVE_ATOMIC_COUNTER_BUFFERS */: return "GL_ACTIVE_ATOMIC_COUNTER_BUFFERS (0x92D9)"; case 0x92DA /* GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX */: return "GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX (0x92DA)"; case 0x92DB /* GL_UNSIGNED_INT_ATOMIC_COUNTER */: return "GL_UNSIGNED_INT_ATOMIC_COUNTER (0x92DB)"; case 0x92DC /* GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS */: return "GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS (0x92DC)";/* ----------------------- GL_ARB_shader_bit_encoding ---------------------- */ /* --------------------- GL_ARB_shader_image_load_store -------------------- */ //case 0x00000001 /* GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT */: return "GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT (0x00000001)"; //case 0x00000002 /* GL_ELEMENT_ARRAY_BARRIER_BIT */: return "GL_ELEMENT_ARRAY_BARRIER_BIT (0x00000002)"; //case 0x00000004 /* GL_UNIFORM_BARRIER_BIT */: return "GL_UNIFORM_BARRIER_BIT (0x00000004)"; //case 0x00000008 /* GL_TEXTURE_FETCH_BARRIER_BIT */: return "GL_TEXTURE_FETCH_BARRIER_BIT (0x00000008)"; //case 0x00000020 /* GL_SHADER_IMAGE_ACCESS_BARRIER_BIT */: return "GL_SHADER_IMAGE_ACCESS_BARRIER_BIT (0x00000020)"; //case 0x00000040 /* GL_COMMAND_BARRIER_BIT */: return "GL_COMMAND_BARRIER_BIT (0x00000040)"; //case 0x00000080 /* GL_PIXEL_BUFFER_BARRIER_BIT */: return "GL_PIXEL_BUFFER_BARRIER_BIT (0x00000080)"; //case 0x00000100 /* GL_TEXTURE_UPDATE_BARRIER_BIT */: return "GL_TEXTURE_UPDATE_BARRIER_BIT (0x00000100)"; //case 0x00000200 /* GL_BUFFER_UPDATE_BARRIER_BIT */: return "GL_BUFFER_UPDATE_BARRIER_BIT (0x00000200)"; //case 0x00000400 /* GL_FRAMEBUFFER_BARRIER_BIT */: return "GL_FRAMEBUFFER_BARRIER_BIT (0x00000400)"; //case 0x00000800 /* GL_TRANSFORM_FEEDBACK_BARRIER_BIT */: return "GL_TRANSFORM_FEEDBACK_BARRIER_BIT (0x00000800)"; //case 0x00001000 /* GL_ATOMIC_COUNTER_BARRIER_BIT */: return "GL_ATOMIC_COUNTER_BARRIER_BIT (0x00001000)"; case 0x8F38 /* GL_MAX_IMAGE_UNITS */: return "GL_MAX_IMAGE_UNITS (0x8F38)"; case 0x8F39 /* GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */: return "GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS (0x8F39)"; case 0x8F3A /* GL_IMAGE_BINDING_NAME */: return "GL_IMAGE_BINDING_NAME (0x8F3A)"; case 0x8F3B /* GL_IMAGE_BINDING_LEVEL */: return "GL_IMAGE_BINDING_LEVEL (0x8F3B)"; case 0x8F3C /* GL_IMAGE_BINDING_LAYERED */: return "GL_IMAGE_BINDING_LAYERED (0x8F3C)"; case 0x8F3D /* GL_IMAGE_BINDING_LAYER */: return "GL_IMAGE_BINDING_LAYER (0x8F3D)"; case 0x8F3E /* GL_IMAGE_BINDING_ACCESS */: return "GL_IMAGE_BINDING_ACCESS (0x8F3E)"; case 0x904C /* GL_IMAGE_1D */: return "GL_IMAGE_1D (0x904C)"; case 0x904D /* GL_IMAGE_2D */: return "GL_IMAGE_2D (0x904D)"; case 0x904E /* GL_IMAGE_3D */: return "GL_IMAGE_3D (0x904E)"; case 0x904F /* GL_IMAGE_2D_RECT */: return "GL_IMAGE_2D_RECT (0x904F)"; case 0x9050 /* GL_IMAGE_CUBE */: return "GL_IMAGE_CUBE (0x9050)"; case 0x9051 /* GL_IMAGE_BUFFER */: return "GL_IMAGE_BUFFER (0x9051)"; case 0x9052 /* GL_IMAGE_1D_ARRAY */: return "GL_IMAGE_1D_ARRAY (0x9052)"; case 0x9053 /* GL_IMAGE_2D_ARRAY */: return "GL_IMAGE_2D_ARRAY (0x9053)"; case 0x9054 /* GL_IMAGE_CUBE_MAP_ARRAY */: return "GL_IMAGE_CUBE_MAP_ARRAY (0x9054)"; case 0x9055 /* GL_IMAGE_2D_MULTISAMPLE */: return "GL_IMAGE_2D_MULTISAMPLE (0x9055)"; case 0x9056 /* GL_IMAGE_2D_MULTISAMPLE_ARRAY */: return "GL_IMAGE_2D_MULTISAMPLE_ARRAY (0x9056)"; case 0x9057 /* GL_INT_IMAGE_1D */: return "GL_INT_IMAGE_1D (0x9057)"; case 0x9058 /* GL_INT_IMAGE_2D */: return "GL_INT_IMAGE_2D (0x9058)"; case 0x9059 /* GL_INT_IMAGE_3D */: return "GL_INT_IMAGE_3D (0x9059)"; case 0x905A /* GL_INT_IMAGE_2D_RECT */: return "GL_INT_IMAGE_2D_RECT (0x905A)"; case 0x905B /* GL_INT_IMAGE_CUBE */: return "GL_INT_IMAGE_CUBE (0x905B)"; case 0x905C /* GL_INT_IMAGE_BUFFER */: return "GL_INT_IMAGE_BUFFER (0x905C)"; case 0x905D /* GL_INT_IMAGE_1D_ARRAY */: return "GL_INT_IMAGE_1D_ARRAY (0x905D)"; case 0x905E /* GL_INT_IMAGE_2D_ARRAY */: return "GL_INT_IMAGE_2D_ARRAY (0x905E)"; case 0x905F /* GL_INT_IMAGE_CUBE_MAP_ARRAY */: return "GL_INT_IMAGE_CUBE_MAP_ARRAY (0x905F)"; case 0x9060 /* GL_INT_IMAGE_2D_MULTISAMPLE */: return "GL_INT_IMAGE_2D_MULTISAMPLE (0x9060)"; case 0x9061 /* GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY */: return "GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY (0x9061)"; case 0x9062 /* GL_UNSIGNED_INT_IMAGE_1D */: return "GL_UNSIGNED_INT_IMAGE_1D (0x9062)"; case 0x9063 /* GL_UNSIGNED_INT_IMAGE_2D */: return "GL_UNSIGNED_INT_IMAGE_2D (0x9063)"; case 0x9064 /* GL_UNSIGNED_INT_IMAGE_3D */: return "GL_UNSIGNED_INT_IMAGE_3D (0x9064)"; case 0x9065 /* GL_UNSIGNED_INT_IMAGE_2D_RECT */: return "GL_UNSIGNED_INT_IMAGE_2D_RECT (0x9065)"; case 0x9066 /* GL_UNSIGNED_INT_IMAGE_CUBE */: return "GL_UNSIGNED_INT_IMAGE_CUBE (0x9066)"; case 0x9067 /* GL_UNSIGNED_INT_IMAGE_BUFFER */: return "GL_UNSIGNED_INT_IMAGE_BUFFER (0x9067)"; case 0x9068 /* GL_UNSIGNED_INT_IMAGE_1D_ARRAY */: return "GL_UNSIGNED_INT_IMAGE_1D_ARRAY (0x9068)"; case 0x9069 /* GL_UNSIGNED_INT_IMAGE_2D_ARRAY */: return "GL_UNSIGNED_INT_IMAGE_2D_ARRAY (0x9069)"; case 0x906A /* GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY */: return "GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY (0x906A)"; case 0x906B /* GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE */: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE (0x906B)"; case 0x906C /* GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY */: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY (0x906C)"; case 0x906D /* GL_MAX_IMAGE_SAMPLES */: return "GL_MAX_IMAGE_SAMPLES (0x906D)"; case 0x906E /* GL_IMAGE_BINDING_FORMAT */: return "GL_IMAGE_BINDING_FORMAT (0x906E)"; case 0x90C7 /* GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */: return "GL_IMAGE_FORMAT_COMPATIBILITY_TYPE (0x90C7)"; case 0x90C8 /* GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE */: return "GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE (0x90C8)"; case 0x90C9 /* GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS */: return "GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS (0x90C9)"; case 0x90CA /* GL_MAX_VERTEX_IMAGE_UNIFORMS */: return "GL_MAX_VERTEX_IMAGE_UNIFORMS (0x90CA)"; case 0x90CB /* GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS */: return "GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS (0x90CB)"; case 0x90CC /* GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS */: return "GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS (0x90CC)"; case 0x90CD /* GL_MAX_GEOMETRY_IMAGE_UNIFORMS */: return "GL_MAX_GEOMETRY_IMAGE_UNIFORMS (0x90CD)"; case 0x90CE /* GL_MAX_FRAGMENT_IMAGE_UNIFORMS */: return "GL_MAX_FRAGMENT_IMAGE_UNIFORMS (0x90CE)"; case 0x90CF /* GL_MAX_COMBINED_IMAGE_UNIFORMS */: return "GL_MAX_COMBINED_IMAGE_UNIFORMS (0x90CF)"; //case 0xFFFFFFFF /* GL_ALL_BARRIER_BITS */: return "GL_ALL_BARRIER_BITS (0xFFFFFFFF)"; /* ------------------------ GL_ARB_shader_image_size ----------------------- */ /* ------------------------- GL_ARB_shader_objects ------------------------- */ case 0x8B40 /* GL_PROGRAM_OBJECT_ARB */: return "GL_PROGRAM_OBJECT_ARB (0x8B40)"; case 0x8B48 /* GL_SHADER_OBJECT_ARB */: return "GL_SHADER_OBJECT_ARB (0x8B48)"; case 0x8B4E /* GL_OBJECT_TYPE_ARB */: return "GL_OBJECT_TYPE_ARB (0x8B4E)"; //case 0x8B4F /* GL_OBJECT_SUBTYPE_ARB */: return "GL_OBJECT_SUBTYPE_ARB (0x8B4F)"; //case 0x8B50 /* GL_FLOAT_VEC2_ARB */: return "GL_FLOAT_VEC2_ARB (0x8B50)"; //case 0x8B51 /* GL_FLOAT_VEC3_ARB */: return "GL_FLOAT_VEC3_ARB (0x8B51)"; //case 0x8B52 /* GL_FLOAT_VEC4_ARB */: return "GL_FLOAT_VEC4_ARB (0x8B52)"; //case 0x8B53 /* GL_INT_VEC2_ARB */: return "GL_INT_VEC2_ARB (0x8B53)"; //case 0x8B54 /* GL_INT_VEC3_ARB */: return "GL_INT_VEC3_ARB (0x8B54)"; //case 0x8B55 /* GL_INT_VEC4_ARB */: return "GL_INT_VEC4_ARB (0x8B55)"; //case 0x8B56 /* GL_BOOL_ARB */: return "GL_BOOL_ARB (0x8B56)"; //case 0x8B57 /* GL_BOOL_VEC2_ARB */: return "GL_BOOL_VEC2_ARB (0x8B57)"; //case 0x8B58 /* GL_BOOL_VEC3_ARB */: return "GL_BOOL_VEC3_ARB (0x8B58)"; //case 0x8B59 /* GL_BOOL_VEC4_ARB */: return "GL_BOOL_VEC4_ARB (0x8B59)"; //case 0x8B5A /* GL_FLOAT_MAT2_ARB */: return "GL_FLOAT_MAT2_ARB (0x8B5A)"; //case 0x8B5B /* GL_FLOAT_MAT3_ARB */: return "GL_FLOAT_MAT3_ARB (0x8B5B)"; //case 0x8B5C /* GL_FLOAT_MAT4_ARB */: return "GL_FLOAT_MAT4_ARB (0x8B5C)"; //case 0x8B5D /* GL_SAMPLER_1D_ARB */: return "GL_SAMPLER_1D_ARB (0x8B5D)"; //case 0x8B5E /* GL_SAMPLER_2D_ARB */: return "GL_SAMPLER_2D_ARB (0x8B5E)"; //case 0x8B5F /* GL_SAMPLER_3D_ARB */: return "GL_SAMPLER_3D_ARB (0x8B5F)"; //case 0x8B60 /* GL_SAMPLER_CUBE_ARB */: return "GL_SAMPLER_CUBE_ARB (0x8B60)"; //case 0x8B61 /* GL_SAMPLER_1D_SHADOW_ARB */: return "GL_SAMPLER_1D_SHADOW_ARB (0x8B61)"; //case 0x8B62 /* GL_SAMPLER_2D_SHADOW_ARB */: return "GL_SAMPLER_2D_SHADOW_ARB (0x8B62)"; //case 0x8B63 /* GL_SAMPLER_2D_RECT_ARB */: return "GL_SAMPLER_2D_RECT_ARB (0x8B63)"; //case 0x8B64 /* GL_SAMPLER_2D_RECT_SHADOW_ARB */: return "GL_SAMPLER_2D_RECT_SHADOW_ARB (0x8B64)"; //case 0x8B80 /* GL_OBJECT_DELETE_STATUS_ARB */: return "GL_OBJECT_DELETE_STATUS_ARB (0x8B80)"; //case 0x8B81 /* GL_OBJECT_COMPILE_STATUS_ARB */: return "GL_OBJECT_COMPILE_STATUS_ARB (0x8B81)"; //case 0x8B82 /* GL_OBJECT_LINK_STATUS_ARB */: return "GL_OBJECT_LINK_STATUS_ARB (0x8B82)"; //case 0x8B83 /* GL_OBJECT_VALIDATE_STATUS_ARB */: return "GL_OBJECT_VALIDATE_STATUS_ARB (0x8B83)"; //case 0x8B84 /* GL_OBJECT_INFO_LOG_LENGTH_ARB */: return "GL_OBJECT_INFO_LOG_LENGTH_ARB (0x8B84)"; //case 0x8B85 /* GL_OBJECT_ATTACHED_OBJECTS_ARB */: return "GL_OBJECT_ATTACHED_OBJECTS_ARB (0x8B85)"; //case 0x8B86 /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */: return "GL_OBJECT_ACTIVE_UNIFORMS_ARB (0x8B86)"; //case 0x8B87 /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */: return "GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB (0x8B87)"; //case 0x8B88 /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */: return "GL_OBJECT_SHADER_SOURCE_LENGTH_ARB (0x8B88)"; /* ------------------------ GL_ARB_shader_precision ------------------------ */ /* ---------------------- GL_ARB_shader_stencil_export --------------------- */ /* ------------------ GL_ARB_shader_storage_buffer_object ------------------ */ //case 0x2000 /* GL_SHADER_STORAGE_BARRIER_BIT */: return "GL_SHADER_STORAGE_BARRIER_BIT (0x2000)"; //case 0x8F39 /* GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES */: return "GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES (0x8F39)"; case 0x90D2 /* GL_SHADER_STORAGE_BUFFER */: return "GL_SHADER_STORAGE_BUFFER (0x90D2)"; case 0x90D3 /* GL_SHADER_STORAGE_BUFFER_BINDING */: return "GL_SHADER_STORAGE_BUFFER_BINDING (0x90D3)"; case 0x90D4 /* GL_SHADER_STORAGE_BUFFER_START */: return "GL_SHADER_STORAGE_BUFFER_START (0x90D4)"; case 0x90D5 /* GL_SHADER_STORAGE_BUFFER_SIZE */: return "GL_SHADER_STORAGE_BUFFER_SIZE (0x90D5)"; case 0x90D6 /* GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS */: return "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS (0x90D6)"; case 0x90D7 /* GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS */: return "GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS (0x90D7)"; case 0x90D8 /* GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS */: return "GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS (0x90D8)"; case 0x90D9 /* GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS */: return "GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS (0x90D9)"; case 0x90DA /* GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS */: return "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS (0x90DA)"; case 0x90DB /* GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS */: return "GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS (0x90DB)"; case 0x90DC /* GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS */: return "GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS (0x90DC)"; case 0x90DD /* GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS */: return "GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS (0x90DD)"; case 0x90DE /* GL_MAX_SHADER_STORAGE_BLOCK_SIZE */: return "GL_MAX_SHADER_STORAGE_BLOCK_SIZE (0x90DE)"; case 0x90DF /* GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT */: return "GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT (0x90DF)";/* ------------------------ GL_ARB_shader_subroutine ----------------------- */ case 0x8DE5 /* GL_ACTIVE_SUBROUTINES */: return "GL_ACTIVE_SUBROUTINES (0x8DE5)"; case 0x8DE6 /* GL_ACTIVE_SUBROUTINE_UNIFORMS */: return "GL_ACTIVE_SUBROUTINE_UNIFORMS (0x8DE6)"; case 0x8DE7 /* GL_MAX_SUBROUTINES */: return "GL_MAX_SUBROUTINES (0x8DE7)"; case 0x8DE8 /* GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */: return "GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS (0x8DE8)"; case 0x8E47 /* GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */: return "GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS (0x8E47)"; case 0x8E48 /* GL_ACTIVE_SUBROUTINE_MAX_LENGTH */: return "GL_ACTIVE_SUBROUTINE_MAX_LENGTH (0x8E48)"; case 0x8E49 /* GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */: return "GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH (0x8E49)"; case 0x8E4A /* GL_NUM_COMPATIBLE_SUBROUTINES */: return "GL_NUM_COMPATIBLE_SUBROUTINES (0x8E4A)"; case 0x8E4B /* GL_COMPATIBLE_SUBROUTINES */: return "GL_COMPATIBLE_SUBROUTINES (0x8E4B)"; /* ----------------------- GL_ARB_shader_texture_lod ----------------------- */ /* ---------------------- GL_ARB_shading_language_100 ---------------------- */ //case 0x8B8C /* GL_SHADING_LANGUAGE_VERSION_ARB */: return "GL_SHADING_LANGUAGE_VERSION_ARB (0x8B8C)"; /* -------------------- GL_ARB_shading_language_420pack -------------------- */ /* -------------------- GL_ARB_shading_language_include -------------------- */ case 0x8DAE /* GL_SHADER_INCLUDE_ARB */: return "GL_SHADER_INCLUDE_ARB (0x8DAE)"; case 0x8DE9 /* GL_NAMED_STRING_LENGTH_ARB */: return "GL_NAMED_STRING_LENGTH_ARB (0x8DE9)"; case 0x8DEA /* GL_NAMED_STRING_TYPE_ARB */: return "GL_NAMED_STRING_TYPE_ARB (0x8DEA)";/* -------------------- GL_ARB_shading_language_packing -------------------- */ /* ----------------------------- GL_ARB_shadow ----------------------------- */ //case 0x884C /* GL_TEXTURE_COMPARE_MODE_ARB */: return "GL_TEXTURE_COMPARE_MODE_ARB (0x884C)"; //case 0x884D /* GL_TEXTURE_COMPARE_FUNC_ARB */: return "GL_TEXTURE_COMPARE_FUNC_ARB (0x884D)"; //case 0x884E /* GL_COMPARE_R_TO_TEXTURE_ARB */: return "GL_COMPARE_R_TO_TEXTURE_ARB (0x884E)"; /* ------------------------- GL_ARB_shadow_ambient ------------------------- */ case 0x80BF /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */: return "GL_TEXTURE_COMPARE_FAIL_VALUE_ARB (0x80BF)"; /* ------------------------ GL_ARB_stencil_texturing ----------------------- */ case 0x90EA /* GL_DEPTH_STENCIL_TEXTURE_MODE */: return "GL_DEPTH_STENCIL_TEXTURE_MODE (0x90EA)"; /* ------------------------------ GL_ARB_sync ------------------------------ */ //case 0x00000001 /* GL_SYNC_FLUSH_COMMANDS_BIT */: return "GL_SYNC_FLUSH_COMMANDS_BIT (0x00000001)"; case 0x9111 /* GL_MAX_SERVER_WAIT_TIMEOUT */: return "GL_MAX_SERVER_WAIT_TIMEOUT (0x9111)"; case 0x9112 /* GL_OBJECT_TYPE */: return "GL_OBJECT_TYPE (0x9112)"; case 0x9113 /* GL_SYNC_CONDITION */: return "GL_SYNC_CONDITION (0x9113)"; case 0x9114 /* GL_SYNC_STATUS */: return "GL_SYNC_STATUS (0x9114)"; case 0x9115 /* GL_SYNC_FLAGS */: return "GL_SYNC_FLAGS (0x9115)"; case 0x9116 /* GL_SYNC_FENCE */: return "GL_SYNC_FENCE (0x9116)"; case 0x9117 /* GL_SYNC_GPU_COMMANDS_COMPLETE */: return "GL_SYNC_GPU_COMMANDS_COMPLETE (0x9117)"; case 0x9118 /* GL_UNSIGNALED */: return "GL_UNSIGNALED (0x9118)"; case 0x9119 /* GL_SIGNALED */: return "GL_SIGNALED (0x9119)"; case 0x911A /* GL_ALREADY_SIGNALED */: return "GL_ALREADY_SIGNALED (0x911A)"; case 0x911B /* GL_TIMEOUT_EXPIRED */: return "GL_TIMEOUT_EXPIRED (0x911B)"; case 0x911C /* GL_CONDITION_SATISFIED */: return "GL_CONDITION_SATISFIED (0x911C)"; case 0x911D /* GL_WAIT_FAILED */: return "GL_WAIT_FAILED (0x911D)"; //case 0xFFFFFFFFFFFFFFFF /* GL_TIMEOUT_IGNORED */: return "GL_TIMEOUT_IGNORED (0xFFFFFFFFFFFFFFFF)"; /* ----------------------- GL_ARB_tessellation_shader ---------------------- */ case 0xE /* GL_PATCHES */: return "GL_PATCHES (0xE)"; case 0x84F0 /* GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER (0x84F0)"; case 0x84F1 /* GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER (0x84F1)"; case 0x886C /* GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */: return "GL_MAX_TESS_CONTROL_INPUT_COMPONENTS (0x886C)"; case 0x886D /* GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */: return "GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS (0x886D)"; case 0x8E1E /* GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS (0x8E1E)"; case 0x8E1F /* GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS (0x8E1F)"; case 0x8E72 /* GL_PATCH_VERTICES */: return "GL_PATCH_VERTICES (0x8E72)"; case 0x8E73 /* GL_PATCH_DEFAULT_INNER_LEVEL */: return "GL_PATCH_DEFAULT_INNER_LEVEL (0x8E73)"; case 0x8E74 /* GL_PATCH_DEFAULT_OUTER_LEVEL */: return "GL_PATCH_DEFAULT_OUTER_LEVEL (0x8E74)"; case 0x8E75 /* GL_TESS_CONTROL_OUTPUT_VERTICES */: return "GL_TESS_CONTROL_OUTPUT_VERTICES (0x8E75)"; case 0x8E76 /* GL_TESS_GEN_MODE */: return "GL_TESS_GEN_MODE (0x8E76)"; case 0x8E77 /* GL_TESS_GEN_SPACING */: return "GL_TESS_GEN_SPACING (0x8E77)"; case 0x8E78 /* GL_TESS_GEN_VERTEX_ORDER */: return "GL_TESS_GEN_VERTEX_ORDER (0x8E78)"; case 0x8E79 /* GL_TESS_GEN_POINT_MODE */: return "GL_TESS_GEN_POINT_MODE (0x8E79)"; case 0x8E7A /* GL_ISOLINES */: return "GL_ISOLINES (0x8E7A)"; case 0x8E7B /* GL_FRACTIONAL_ODD */: return "GL_FRACTIONAL_ODD (0x8E7B)"; case 0x8E7C /* GL_FRACTIONAL_EVEN */: return "GL_FRACTIONAL_EVEN (0x8E7C)"; case 0x8E7D /* GL_MAX_PATCH_VERTICES */: return "GL_MAX_PATCH_VERTICES (0x8E7D)"; case 0x8E7E /* GL_MAX_TESS_GEN_LEVEL */: return "GL_MAX_TESS_GEN_LEVEL (0x8E7E)"; case 0x8E7F /* GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */: return "GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS (0x8E7F)"; case 0x8E80 /* GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */: return "GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS (0x8E80)"; case 0x8E81 /* GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */: return "GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS (0x8E81)"; case 0x8E82 /* GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */: return "GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS (0x8E82)"; case 0x8E83 /* GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */: return "GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS (0x8E83)"; case 0x8E84 /* GL_MAX_TESS_PATCH_COMPONENTS */: return "GL_MAX_TESS_PATCH_COMPONENTS (0x8E84)"; case 0x8E85 /* GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */: return "GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS (0x8E85)"; case 0x8E86 /* GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */: return "GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS (0x8E86)"; case 0x8E87 /* GL_TESS_EVALUATION_SHADER */: return "GL_TESS_EVALUATION_SHADER (0x8E87)"; case 0x8E88 /* GL_TESS_CONTROL_SHADER */: return "GL_TESS_CONTROL_SHADER (0x8E88)"; case 0x8E89 /* GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */: return "GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS (0x8E89)"; case 0x8E8A /* GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */: return "GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS (0x8E8A)"; /* ---------------------- GL_ARB_texture_border_clamp ---------------------- */ //case 0x812D /* GL_CLAMP_TO_BORDER_ARB */: return "GL_CLAMP_TO_BORDER_ARB (0x812D)"; /* ---------------------- GL_ARB_texture_buffer_object --------------------- */ //case 0x8C2A /* GL_TEXTURE_BUFFER_ARB */: return "GL_TEXTURE_BUFFER_ARB (0x8C2A)"; //case 0x8C2B /* GL_MAX_TEXTURE_BUFFER_SIZE_ARB */: return "GL_MAX_TEXTURE_BUFFER_SIZE_ARB (0x8C2B)"; //case 0x8C2C /* GL_TEXTURE_BINDING_BUFFER_ARB */: return "GL_TEXTURE_BINDING_BUFFER_ARB (0x8C2C)"; //case 0x8C2D /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB */: return "GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB (0x8C2D)"; //case 0x8C2E /* GL_TEXTURE_BUFFER_FORMAT_ARB */: return "GL_TEXTURE_BUFFER_FORMAT_ARB (0x8C2E)";/* ------------------- GL_ARB_texture_buffer_object_rgb32 ------------------ */ /* ---------------------- GL_ARB_texture_buffer_range ---------------------- */ case 0x919D /* GL_TEXTURE_BUFFER_OFFSET */: return "GL_TEXTURE_BUFFER_OFFSET (0x919D)"; case 0x919E /* GL_TEXTURE_BUFFER_SIZE */: return "GL_TEXTURE_BUFFER_SIZE (0x919E)"; case 0x919F /* GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT */: return "GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT (0x919F)"; /* ----------------------- GL_ARB_texture_compression ---------------------- */ //case 0x84E9 /* GL_COMPRESSED_ALPHA_ARB */: return "GL_COMPRESSED_ALPHA_ARB (0x84E9)"; //case 0x84EA /* GL_COMPRESSED_LUMINANCE_ARB */: return "GL_COMPRESSED_LUMINANCE_ARB (0x84EA)"; //case 0x84EB /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */: return "GL_COMPRESSED_LUMINANCE_ALPHA_ARB (0x84EB)"; //case 0x84EC /* GL_COMPRESSED_INTENSITY_ARB */: return "GL_COMPRESSED_INTENSITY_ARB (0x84EC)"; //case 0x84ED /* GL_COMPRESSED_RGB_ARB */: return "GL_COMPRESSED_RGB_ARB (0x84ED)"; //case 0x84EE /* GL_COMPRESSED_RGBA_ARB */: return "GL_COMPRESSED_RGBA_ARB (0x84EE)"; //case 0x84EF /* GL_TEXTURE_COMPRESSION_HINT_ARB */: return "GL_TEXTURE_COMPRESSION_HINT_ARB (0x84EF)"; //case 0x86A0 /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */: return "GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB (0x86A0)"; //case 0x86A1 /* GL_TEXTURE_COMPRESSED_ARB */: return "GL_TEXTURE_COMPRESSED_ARB (0x86A1)"; //case 0x86A2 /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */: return "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB (0x86A2)"; //case 0x86A3 /* GL_COMPRESSED_TEXTURE_FORMATS_ARB */: return "GL_COMPRESSED_TEXTURE_FORMATS_ARB (0x86A3)"; /* -------------------- GL_ARB_texture_compression_bptc -------------------- */ //case 0x8E8C /* GL_COMPRESSED_RGBA_BPTC_UNORM_ARB */: return "GL_COMPRESSED_RGBA_BPTC_UNORM_ARB (0x8E8C)"; //case 0x8E8D /* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB */: return "GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB (0x8E8D)"; //case 0x8E8E /* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB */: return "GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB (0x8E8E)"; //case 0x8E8F /* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB */: return "GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB (0x8E8F)"; /* -------------------- GL_ARB_texture_compression_rgtc -------------------- */ case 0x8DBB /* GL_COMPRESSED_RED_RGTC1 */: return "GL_COMPRESSED_RED_RGTC1 (0x8DBB)"; case 0x8DBC /* GL_COMPRESSED_SIGNED_RED_RGTC1 */: return "GL_COMPRESSED_SIGNED_RED_RGTC1 (0x8DBC)"; case 0x8DBD /* GL_COMPRESSED_RG_RGTC2 */: return "GL_COMPRESSED_RG_RGTC2 (0x8DBD)"; case 0x8DBE /* GL_COMPRESSED_SIGNED_RG_RGTC2 */: return "GL_COMPRESSED_SIGNED_RG_RGTC2 (0x8DBE)"; /* ------------------------ GL_ARB_texture_cube_map ------------------------ */ //case 0x8511 /* GL_NORMAL_MAP_ARB */: return "GL_NORMAL_MAP_ARB (0x8511)"; //case 0x8512 /* GL_REFLECTION_MAP_ARB */: return "GL_REFLECTION_MAP_ARB (0x8512)"; //case 0x8513 /* GL_TEXTURE_CUBE_MAP_ARB */: return "GL_TEXTURE_CUBE_MAP_ARB (0x8513)"; //case 0x8514 /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */: return "GL_TEXTURE_BINDING_CUBE_MAP_ARB (0x8514)"; //case 0x8515 /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB (0x8515)"; //case 0x8516 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB (0x8516)"; //case 0x8517 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB (0x8517)"; //case 0x8518 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB (0x8518)"; //case 0x8519 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB (0x8519)"; //case 0x851A /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB (0x851A)"; //case 0x851B /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */: return "GL_PROXY_TEXTURE_CUBE_MAP_ARB (0x851B)"; //case 0x851C /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */: return "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB (0x851C)"; /* --------------------- GL_ARB_texture_cube_map_array --------------------- */ //case 0x9009 /* GL_TEXTURE_CUBE_MAP_ARRAY_ARB */: return "GL_TEXTURE_CUBE_MAP_ARRAY_ARB (0x9009)"; //case 0x900A /* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB */: return "GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB (0x900A)"; //case 0x900B /* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB */: return "GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB (0x900B)"; //case 0x900C /* GL_SAMPLER_CUBE_MAP_ARRAY_ARB */: return "GL_SAMPLER_CUBE_MAP_ARRAY_ARB (0x900C)"; //case 0x900D /* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB */: return "GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB (0x900D)"; //case 0x900E /* GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB */: return "GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB (0x900E)"; //case 0x900F /* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB */: return "GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB (0x900F)"; /* ------------------------- GL_ARB_texture_env_add ------------------------ */ /* ----------------------- GL_ARB_texture_env_combine ---------------------- */ //case 0x84E7 /* GL_SUBTRACT_ARB */: return "GL_SUBTRACT_ARB (0x84E7)"; //case 0x8570 /* GL_COMBINE_ARB */: return "GL_COMBINE_ARB (0x8570)"; //case 0x8571 /* GL_COMBINE_RGB_ARB */: return "GL_COMBINE_RGB_ARB (0x8571)"; //case 0x8572 /* GL_COMBINE_ALPHA_ARB */: return "GL_COMBINE_ALPHA_ARB (0x8572)"; //case 0x8573 /* GL_RGB_SCALE_ARB */: return "GL_RGB_SCALE_ARB (0x8573)"; //case 0x8574 /* GL_ADD_SIGNED_ARB */: return "GL_ADD_SIGNED_ARB (0x8574)"; //case 0x8575 /* GL_INTERPOLATE_ARB */: return "GL_INTERPOLATE_ARB (0x8575)"; //case 0x8576 /* GL_CONSTANT_ARB */: return "GL_CONSTANT_ARB (0x8576)"; //case 0x8577 /* GL_PRIMARY_COLOR_ARB */: return "GL_PRIMARY_COLOR_ARB (0x8577)"; //case 0x8578 /* GL_PREVIOUS_ARB */: return "GL_PREVIOUS_ARB (0x8578)"; //case 0x8580 /* GL_SOURCE0_RGB_ARB */: return "GL_SOURCE0_RGB_ARB (0x8580)"; //case 0x8581 /* GL_SOURCE1_RGB_ARB */: return "GL_SOURCE1_RGB_ARB (0x8581)"; //case 0x8582 /* GL_SOURCE2_RGB_ARB */: return "GL_SOURCE2_RGB_ARB (0x8582)"; //case 0x8588 /* GL_SOURCE0_ALPHA_ARB */: return "GL_SOURCE0_ALPHA_ARB (0x8588)"; //case 0x8589 /* GL_SOURCE1_ALPHA_ARB */: return "GL_SOURCE1_ALPHA_ARB (0x8589)"; //case 0x858A /* GL_SOURCE2_ALPHA_ARB */: return "GL_SOURCE2_ALPHA_ARB (0x858A)"; //case 0x8590 /* GL_OPERAND0_RGB_ARB */: return "GL_OPERAND0_RGB_ARB (0x8590)"; //case 0x8591 /* GL_OPERAND1_RGB_ARB */: return "GL_OPERAND1_RGB_ARB (0x8591)"; //case 0x8592 /* GL_OPERAND2_RGB_ARB */: return "GL_OPERAND2_RGB_ARB (0x8592)"; //case 0x8598 /* GL_OPERAND0_ALPHA_ARB */: return "GL_OPERAND0_ALPHA_ARB (0x8598)"; //case 0x8599 /* GL_OPERAND1_ALPHA_ARB */: return "GL_OPERAND1_ALPHA_ARB (0x8599)"; //case 0x859A /* GL_OPERAND2_ALPHA_ARB */: return "GL_OPERAND2_ALPHA_ARB (0x859A)"; /* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */ /* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */ //case 0x86AE /* GL_DOT3_RGB_ARB */: return "GL_DOT3_RGB_ARB (0x86AE)"; //case 0x86AF /* GL_DOT3_RGBA_ARB */: return "GL_DOT3_RGBA_ARB (0x86AF)"; /* -------------------------- GL_ARB_texture_float ------------------------- */ //case 0x8815 /* GL_RGB32F_ARB */: return "GL_RGB32F_ARB (0x8815)"; //case 0x8816 /* GL_ALPHA32F_ARB */: return "GL_ALPHA32F_ARB (0x8816)"; //case 0x8817 /* GL_INTENSITY32F_ARB */: return "GL_INTENSITY32F_ARB (0x8817)"; //case 0x8818 /* GL_LUMINANCE32F_ARB */: return "GL_LUMINANCE32F_ARB (0x8818)"; //case 0x8819 /* GL_LUMINANCE_ALPHA32F_ARB */: return "GL_LUMINANCE_ALPHA32F_ARB (0x8819)"; //case 0x881A /* GL_RGBA16F_ARB */: return "GL_RGBA16F_ARB (0x881A)"; //case 0x881B /* GL_RGB16F_ARB */: return "GL_RGB16F_ARB (0x881B)"; //case 0x881C /* GL_ALPHA16F_ARB */: return "GL_ALPHA16F_ARB (0x881C)"; //case 0x881D /* GL_INTENSITY16F_ARB */: return "GL_INTENSITY16F_ARB (0x881D)"; //case 0x881E /* GL_LUMINANCE16F_ARB */: return "GL_LUMINANCE16F_ARB (0x881E)"; //case 0x881F /* GL_LUMINANCE_ALPHA16F_ARB */: return "GL_LUMINANCE_ALPHA16F_ARB (0x881F)"; //case 0x8C10 /* GL_TEXTURE_RED_TYPE_ARB */: return "GL_TEXTURE_RED_TYPE_ARB (0x8C10)"; //case 0x8C11 /* GL_TEXTURE_GREEN_TYPE_ARB */: return "GL_TEXTURE_GREEN_TYPE_ARB (0x8C11)"; //case 0x8C12 /* GL_TEXTURE_BLUE_TYPE_ARB */: return "GL_TEXTURE_BLUE_TYPE_ARB (0x8C12)"; //case 0x8C13 /* GL_TEXTURE_ALPHA_TYPE_ARB */: return "GL_TEXTURE_ALPHA_TYPE_ARB (0x8C13)"; //case 0x8C14 /* GL_TEXTURE_LUMINANCE_TYPE_ARB */: return "GL_TEXTURE_LUMINANCE_TYPE_ARB (0x8C14)"; //case 0x8C15 /* GL_TEXTURE_INTENSITY_TYPE_ARB */: return "GL_TEXTURE_INTENSITY_TYPE_ARB (0x8C15)"; //case 0x8C16 /* GL_TEXTURE_DEPTH_TYPE_ARB */: return "GL_TEXTURE_DEPTH_TYPE_ARB (0x8C16)"; //case 0x8C17 /* GL_UNSIGNED_NORMALIZED_ARB */: return "GL_UNSIGNED_NORMALIZED_ARB (0x8C17)"; /* ------------------------- GL_ARB_texture_gather ------------------------- */ //case 0x8E5E /* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB */: return "GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB (0x8E5E)"; //case 0x8E5F /* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB (0x8E5F)"; //case 0x8F9F /* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB (0x8F9F)"; /* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */ //case 0x8370 /* GL_MIRRORED_REPEAT_ARB */: return "GL_MIRRORED_REPEAT_ARB (0x8370)"; /* ----------------------- GL_ARB_texture_multisample ---------------------- */ case 0x8E50 /* GL_SAMPLE_POSITION */: return "GL_SAMPLE_POSITION (0x8E50)"; case 0x8E51 /* GL_SAMPLE_MASK */: return "GL_SAMPLE_MASK (0x8E51)"; case 0x8E52 /* GL_SAMPLE_MASK_VALUE */: return "GL_SAMPLE_MASK_VALUE (0x8E52)"; case 0x8E59 /* GL_MAX_SAMPLE_MASK_WORDS */: return "GL_MAX_SAMPLE_MASK_WORDS (0x8E59)"; //case 0x9100 /* GL_TEXTURE_2D_MULTISAMPLE */: return "GL_TEXTURE_2D_MULTISAMPLE (0x9100)"; case 0x9101 /* GL_PROXY_TEXTURE_2D_MULTISAMPLE */: return "GL_PROXY_TEXTURE_2D_MULTISAMPLE (0x9101)"; //case 0x9102 /* GL_TEXTURE_2D_MULTISAMPLE_ARRAY */: return "GL_TEXTURE_2D_MULTISAMPLE_ARRAY (0x9102)"; case 0x9103 /* GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */: return "GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY (0x9103)"; case 0x9104 /* GL_TEXTURE_BINDING_2D_MULTISAMPLE */: return "GL_TEXTURE_BINDING_2D_MULTISAMPLE (0x9104)"; case 0x9105 /* GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */: return "GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY (0x9105)"; case 0x9106 /* GL_TEXTURE_SAMPLES */: return "GL_TEXTURE_SAMPLES (0x9106)"; case 0x9107 /* GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */: return "GL_TEXTURE_FIXED_SAMPLE_LOCATIONS (0x9107)"; case 0x9108 /* GL_SAMPLER_2D_MULTISAMPLE */: return "GL_SAMPLER_2D_MULTISAMPLE (0x9108)"; case 0x9109 /* GL_INT_SAMPLER_2D_MULTISAMPLE */: return "GL_INT_SAMPLER_2D_MULTISAMPLE (0x9109)"; case 0x910A /* GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */: return "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE (0x910A)"; case 0x910B /* GL_SAMPLER_2D_MULTISAMPLE_ARRAY */: return "GL_SAMPLER_2D_MULTISAMPLE_ARRAY (0x910B)"; case 0x910C /* GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */: return "GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY (0x910C)"; case 0x910D /* GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */: return "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY (0x910D)"; case 0x910E /* GL_MAX_COLOR_TEXTURE_SAMPLES */: return "GL_MAX_COLOR_TEXTURE_SAMPLES (0x910E)"; case 0x910F /* GL_MAX_DEPTH_TEXTURE_SAMPLES */: return "GL_MAX_DEPTH_TEXTURE_SAMPLES (0x910F)"; case 0x9110 /* GL_MAX_INTEGER_SAMPLES */: return "GL_MAX_INTEGER_SAMPLES (0x9110)"; /* -------------------- GL_ARB_texture_non_power_of_two -------------------- */ /* ---------------------- GL_ARB_texture_query_levels ---------------------- */ /* ------------------------ GL_ARB_texture_query_lod ----------------------- */ /* ------------------------ GL_ARB_texture_rectangle ----------------------- */ //case 0x84F5 /* GL_TEXTURE_RECTANGLE_ARB */: return "GL_TEXTURE_RECTANGLE_ARB (0x84F5)"; //case 0x84F6 /* GL_TEXTURE_BINDING_RECTANGLE_ARB */: return "GL_TEXTURE_BINDING_RECTANGLE_ARB (0x84F6)"; //case 0x84F7 /* GL_PROXY_TEXTURE_RECTANGLE_ARB */: return "GL_PROXY_TEXTURE_RECTANGLE_ARB (0x84F7)"; //case 0x84F8 /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */: return "GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB (0x84F8)"; //case 0x8B63 /* GL_SAMPLER_2D_RECT_ARB */: return "GL_SAMPLER_2D_RECT_ARB (0x8B63)"; //case 0x8B64 /* GL_SAMPLER_2D_RECT_SHADOW_ARB */: return "GL_SAMPLER_2D_RECT_SHADOW_ARB (0x8B64)"; /* --------------------------- GL_ARB_texture_rg --------------------------- */ //case 0x8225 /* GL_COMPRESSED_RED */: return "GL_COMPRESSED_RED (0x8225)"; //case 0x8226 /* GL_COMPRESSED_RG */: return "GL_COMPRESSED_RG (0x8226)"; case 0x8227 /* GL_RG */: return "GL_RG (0x8227)"; case 0x8228 /* GL_RG_INTEGER */: return "GL_RG_INTEGER (0x8228)"; case 0x8229 /* GL_R8 */: return "GL_R8 (0x8229)"; case 0x822A /* GL_R16 */: return "GL_R16 (0x822A)"; case 0x822B /* GL_RG8 */: return "GL_RG8 (0x822B)"; case 0x822C /* GL_RG16 */: return "GL_RG16 (0x822C)"; case 0x822D /* GL_R16F */: return "GL_R16F (0x822D)"; case 0x822E /* GL_R32F */: return "GL_R32F (0x822E)"; case 0x822F /* GL_RG16F */: return "GL_RG16F (0x822F)"; case 0x8230 /* GL_RG32F */: return "GL_RG32F (0x8230)"; case 0x8231 /* GL_R8I */: return "GL_R8I (0x8231)"; case 0x8232 /* GL_R8UI */: return "GL_R8UI (0x8232)"; case 0x8233 /* GL_R16I */: return "GL_R16I (0x8233)"; case 0x8234 /* GL_R16UI */: return "GL_R16UI (0x8234)"; case 0x8235 /* GL_R32I */: return "GL_R32I (0x8235)"; case 0x8236 /* GL_R32UI */: return "GL_R32UI (0x8236)"; case 0x8237 /* GL_RG8I */: return "GL_RG8I (0x8237)"; case 0x8238 /* GL_RG8UI */: return "GL_RG8UI (0x8238)"; case 0x8239 /* GL_RG16I */: return "GL_RG16I (0x8239)"; case 0x823A /* GL_RG16UI */: return "GL_RG16UI (0x823A)"; case 0x823B /* GL_RG32I */: return "GL_RG32I (0x823B)"; case 0x823C /* GL_RG32UI */: return "GL_RG32UI (0x823C)"; /* ----------------------- GL_ARB_texture_rgb10_a2ui ----------------------- */ //case 0x906F /* GL_RGB10_A2UI */: return "GL_RGB10_A2UI (0x906F)"; /* ------------------------- GL_ARB_texture_storage ------------------------ */ case 0x912F /* GL_TEXTURE_IMMUTABLE_FORMAT */: return "GL_TEXTURE_IMMUTABLE_FORMAT (0x912F)";/* ------------------- GL_ARB_texture_storage_multisample ------------------ */ /* ------------------------- GL_ARB_texture_swizzle ------------------------ */ //case 0x8E42 /* GL_TEXTURE_SWIZZLE_R */: return "GL_TEXTURE_SWIZZLE_R (0x8E42)"; //case 0x8E43 /* GL_TEXTURE_SWIZZLE_G */: return "GL_TEXTURE_SWIZZLE_G (0x8E43)"; //case 0x8E44 /* GL_TEXTURE_SWIZZLE_B */: return "GL_TEXTURE_SWIZZLE_B (0x8E44)"; //case 0x8E45 /* GL_TEXTURE_SWIZZLE_A */: return "GL_TEXTURE_SWIZZLE_A (0x8E45)"; //case 0x8E46 /* GL_TEXTURE_SWIZZLE_RGBA */: return "GL_TEXTURE_SWIZZLE_RGBA (0x8E46)"; /* -------------------------- GL_ARB_texture_view -------------------------- */ case 0x82DB /* GL_TEXTURE_VIEW_MIN_LEVEL */: return "GL_TEXTURE_VIEW_MIN_LEVEL (0x82DB)"; case 0x82DC /* GL_TEXTURE_VIEW_NUM_LEVELS */: return "GL_TEXTURE_VIEW_NUM_LEVELS (0x82DC)"; case 0x82DD /* GL_TEXTURE_VIEW_MIN_LAYER */: return "GL_TEXTURE_VIEW_MIN_LAYER (0x82DD)"; case 0x82DE /* GL_TEXTURE_VIEW_NUM_LAYERS */: return "GL_TEXTURE_VIEW_NUM_LAYERS (0x82DE)"; case 0x82DF /* GL_TEXTURE_IMMUTABLE_LEVELS */: return "GL_TEXTURE_IMMUTABLE_LEVELS (0x82DF)";/* --------------------------- GL_ARB_timer_query -------------------------- */ case 0x88BF /* GL_TIME_ELAPSED */: return "GL_TIME_ELAPSED (0x88BF)"; case 0x8E28 /* GL_TIMESTAMP */: return "GL_TIMESTAMP (0x8E28)"; /* ----------------------- GL_ARB_transform_feedback2 ---------------------- */ case 0x8E22 /* GL_TRANSFORM_FEEDBACK */: return "GL_TRANSFORM_FEEDBACK (0x8E22)"; case 0x8E23 /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */: return "GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED (0x8E23)"; case 0x8E24 /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */: return "GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE (0x8E24)"; case 0x8E25 /* GL_TRANSFORM_FEEDBACK_BINDING */: return "GL_TRANSFORM_FEEDBACK_BINDING (0x8E25)"; /* ----------------------- GL_ARB_transform_feedback3 ---------------------- */ case 0x8E70 /* GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */: return "GL_MAX_TRANSFORM_FEEDBACK_BUFFERS (0x8E70)"; //case 0x8E71 /* GL_MAX_VERTEX_STREAMS */: return "GL_MAX_VERTEX_STREAMS (0x8E71)"; /* ------------------ GL_ARB_transform_feedback_instanced ------------------ */ /* ------------------------ GL_ARB_transpose_matrix ------------------------ */ //case 0x84E3 /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */: return "GL_TRANSPOSE_MODELVIEW_MATRIX_ARB (0x84E3)"; //case 0x84E4 /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */: return "GL_TRANSPOSE_PROJECTION_MATRIX_ARB (0x84E4)"; //case 0x84E5 /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */: return "GL_TRANSPOSE_TEXTURE_MATRIX_ARB (0x84E5)"; //case 0x84E6 /* GL_TRANSPOSE_COLOR_MATRIX_ARB */: return "GL_TRANSPOSE_COLOR_MATRIX_ARB (0x84E6)"; /* ---------------------- GL_ARB_uniform_buffer_object --------------------- */ case 0x8A11 /* GL_UNIFORM_BUFFER */: return "GL_UNIFORM_BUFFER (0x8A11)"; case 0x8A28 /* GL_UNIFORM_BUFFER_BINDING */: return "GL_UNIFORM_BUFFER_BINDING (0x8A28)"; case 0x8A29 /* GL_UNIFORM_BUFFER_START */: return "GL_UNIFORM_BUFFER_START (0x8A29)"; case 0x8A2A /* GL_UNIFORM_BUFFER_SIZE */: return "GL_UNIFORM_BUFFER_SIZE (0x8A2A)"; case 0x8A2B /* GL_MAX_VERTEX_UNIFORM_BLOCKS */: return "GL_MAX_VERTEX_UNIFORM_BLOCKS (0x8A2B)"; case 0x8A2C /* GL_MAX_GEOMETRY_UNIFORM_BLOCKS */: return "GL_MAX_GEOMETRY_UNIFORM_BLOCKS (0x8A2C)"; case 0x8A2D /* GL_MAX_FRAGMENT_UNIFORM_BLOCKS */: return "GL_MAX_FRAGMENT_UNIFORM_BLOCKS (0x8A2D)"; case 0x8A2E /* GL_MAX_COMBINED_UNIFORM_BLOCKS */: return "GL_MAX_COMBINED_UNIFORM_BLOCKS (0x8A2E)"; case 0x8A2F /* GL_MAX_UNIFORM_BUFFER_BINDINGS */: return "GL_MAX_UNIFORM_BUFFER_BINDINGS (0x8A2F)"; case 0x8A30 /* GL_MAX_UNIFORM_BLOCK_SIZE */: return "GL_MAX_UNIFORM_BLOCK_SIZE (0x8A30)"; case 0x8A31 /* GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS (0x8A31)"; case 0x8A32 /* GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS (0x8A32)"; case 0x8A33 /* GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */: return "GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS (0x8A33)"; case 0x8A34 /* GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */: return "GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT (0x8A34)"; case 0x8A35 /* GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */: return "GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH (0x8A35)"; case 0x8A36 /* GL_ACTIVE_UNIFORM_BLOCKS */: return "GL_ACTIVE_UNIFORM_BLOCKS (0x8A36)"; case 0x8A37 /* GL_UNIFORM_TYPE */: return "GL_UNIFORM_TYPE (0x8A37)"; case 0x8A38 /* GL_UNIFORM_SIZE */: return "GL_UNIFORM_SIZE (0x8A38)"; case 0x8A39 /* GL_UNIFORM_NAME_LENGTH */: return "GL_UNIFORM_NAME_LENGTH (0x8A39)"; case 0x8A3A /* GL_UNIFORM_BLOCK_INDEX */: return "GL_UNIFORM_BLOCK_INDEX (0x8A3A)"; case 0x8A3B /* GL_UNIFORM_OFFSET */: return "GL_UNIFORM_OFFSET (0x8A3B)"; case 0x8A3C /* GL_UNIFORM_ARRAY_STRIDE */: return "GL_UNIFORM_ARRAY_STRIDE (0x8A3C)"; case 0x8A3D /* GL_UNIFORM_MATRIX_STRIDE */: return "GL_UNIFORM_MATRIX_STRIDE (0x8A3D)"; case 0x8A3E /* GL_UNIFORM_IS_ROW_MAJOR */: return "GL_UNIFORM_IS_ROW_MAJOR (0x8A3E)"; case 0x8A3F /* GL_UNIFORM_BLOCK_BINDING */: return "GL_UNIFORM_BLOCK_BINDING (0x8A3F)"; case 0x8A40 /* GL_UNIFORM_BLOCK_DATA_SIZE */: return "GL_UNIFORM_BLOCK_DATA_SIZE (0x8A40)"; case 0x8A41 /* GL_UNIFORM_BLOCK_NAME_LENGTH */: return "GL_UNIFORM_BLOCK_NAME_LENGTH (0x8A41)"; case 0x8A42 /* GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */: return "GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS (0x8A42)"; case 0x8A43 /* GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */: return "GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES (0x8A43)"; case 0x8A44 /* GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER (0x8A44)"; case 0x8A45 /* GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER (0x8A45)"; case 0x8A46 /* GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */: return "GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER (0x8A46)"; //case 0xFFFFFFFF /* GL_INVALID_INDEX */: return "GL_INVALID_INDEX (0xFFFFFFFF)"; /* ------------------------ GL_ARB_vertex_array_bgra ----------------------- */ //case 0x80E1 /* GL_BGRA */: return "GL_BGRA (0x80E1)"; /* ----------------------- GL_ARB_vertex_array_object ---------------------- */ //case 0x85B5 /* GL_VERTEX_ARRAY_BINDING */: return "GL_VERTEX_ARRAY_BINDING (0x85B5)"; /* ----------------------- GL_ARB_vertex_attrib_64bit ---------------------- */ //case 0x8F46 /* GL_DOUBLE_MAT2 */: return "GL_DOUBLE_MAT2 (0x8F46)"; //case 0x8F47 /* GL_DOUBLE_MAT3 */: return "GL_DOUBLE_MAT3 (0x8F47)"; //case 0x8F48 /* GL_DOUBLE_MAT4 */: return "GL_DOUBLE_MAT4 (0x8F48)"; //case 0x8FFC /* GL_DOUBLE_VEC2 */: return "GL_DOUBLE_VEC2 (0x8FFC)"; //case 0x8FFD /* GL_DOUBLE_VEC3 */: return "GL_DOUBLE_VEC3 (0x8FFD)"; //case 0x8FFE /* GL_DOUBLE_VEC4 */: return "GL_DOUBLE_VEC4 (0x8FFE)"; /* ---------------------- GL_ARB_vertex_attrib_binding --------------------- */ case 0x82D4 /* GL_VERTEX_ATTRIB_BINDING */: return "GL_VERTEX_ATTRIB_BINDING (0x82D4)"; case 0x82D5 /* GL_VERTEX_ATTRIB_RELATIVE_OFFSET */: return "GL_VERTEX_ATTRIB_RELATIVE_OFFSET (0x82D5)"; case 0x82D6 /* GL_VERTEX_BINDING_DIVISOR */: return "GL_VERTEX_BINDING_DIVISOR (0x82D6)"; case 0x82D7 /* GL_VERTEX_BINDING_OFFSET */: return "GL_VERTEX_BINDING_OFFSET (0x82D7)"; case 0x82D8 /* GL_VERTEX_BINDING_STRIDE */: return "GL_VERTEX_BINDING_STRIDE (0x82D8)"; case 0x82D9 /* GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET */: return "GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET (0x82D9)"; case 0x82DA /* GL_MAX_VERTEX_ATTRIB_BINDINGS */: return "GL_MAX_VERTEX_ATTRIB_BINDINGS (0x82DA)";/* -------------------------- GL_ARB_vertex_blend -------------------------- */ //case 0x1700 /* GL_MODELVIEW0_ARB */: return "GL_MODELVIEW0_ARB (0x1700)"; case 0x850A /* GL_MODELVIEW1_ARB */: return "GL_MODELVIEW1_ARB (0x850A)"; case 0x86A4 /* GL_MAX_VERTEX_UNITS_ARB */: return "GL_MAX_VERTEX_UNITS_ARB (0x86A4)"; case 0x86A5 /* GL_ACTIVE_VERTEX_UNITS_ARB */: return "GL_ACTIVE_VERTEX_UNITS_ARB (0x86A5)"; case 0x86A6 /* GL_WEIGHT_SUM_UNITY_ARB */: return "GL_WEIGHT_SUM_UNITY_ARB (0x86A6)"; case 0x86A7 /* GL_VERTEX_BLEND_ARB */: return "GL_VERTEX_BLEND_ARB (0x86A7)"; case 0x86A8 /* GL_CURRENT_WEIGHT_ARB */: return "GL_CURRENT_WEIGHT_ARB (0x86A8)"; case 0x86A9 /* GL_WEIGHT_ARRAY_TYPE_ARB */: return "GL_WEIGHT_ARRAY_TYPE_ARB (0x86A9)"; case 0x86AA /* GL_WEIGHT_ARRAY_STRIDE_ARB */: return "GL_WEIGHT_ARRAY_STRIDE_ARB (0x86AA)"; case 0x86AB /* GL_WEIGHT_ARRAY_SIZE_ARB */: return "GL_WEIGHT_ARRAY_SIZE_ARB (0x86AB)"; case 0x86AC /* GL_WEIGHT_ARRAY_POINTER_ARB */: return "GL_WEIGHT_ARRAY_POINTER_ARB (0x86AC)"; case 0x86AD /* GL_WEIGHT_ARRAY_ARB */: return "GL_WEIGHT_ARRAY_ARB (0x86AD)"; case 0x8722 /* GL_MODELVIEW2_ARB */: return "GL_MODELVIEW2_ARB (0x8722)"; case 0x8723 /* GL_MODELVIEW3_ARB */: return "GL_MODELVIEW3_ARB (0x8723)"; case 0x8724 /* GL_MODELVIEW4_ARB */: return "GL_MODELVIEW4_ARB (0x8724)"; case 0x8725 /* GL_MODELVIEW5_ARB */: return "GL_MODELVIEW5_ARB (0x8725)"; case 0x8726 /* GL_MODELVIEW6_ARB */: return "GL_MODELVIEW6_ARB (0x8726)"; case 0x8727 /* GL_MODELVIEW7_ARB */: return "GL_MODELVIEW7_ARB (0x8727)"; case 0x8728 /* GL_MODELVIEW8_ARB */: return "GL_MODELVIEW8_ARB (0x8728)"; case 0x8729 /* GL_MODELVIEW9_ARB */: return "GL_MODELVIEW9_ARB (0x8729)"; case 0x872A /* GL_MODELVIEW10_ARB */: return "GL_MODELVIEW10_ARB (0x872A)"; case 0x872B /* GL_MODELVIEW11_ARB */: return "GL_MODELVIEW11_ARB (0x872B)"; case 0x872C /* GL_MODELVIEW12_ARB */: return "GL_MODELVIEW12_ARB (0x872C)"; case 0x872D /* GL_MODELVIEW13_ARB */: return "GL_MODELVIEW13_ARB (0x872D)"; case 0x872E /* GL_MODELVIEW14_ARB */: return "GL_MODELVIEW14_ARB (0x872E)"; case 0x872F /* GL_MODELVIEW15_ARB */: return "GL_MODELVIEW15_ARB (0x872F)"; case 0x8730 /* GL_MODELVIEW16_ARB */: return "GL_MODELVIEW16_ARB (0x8730)"; case 0x8731 /* GL_MODELVIEW17_ARB */: return "GL_MODELVIEW17_ARB (0x8731)"; case 0x8732 /* GL_MODELVIEW18_ARB */: return "GL_MODELVIEW18_ARB (0x8732)"; case 0x8733 /* GL_MODELVIEW19_ARB */: return "GL_MODELVIEW19_ARB (0x8733)"; case 0x8734 /* GL_MODELVIEW20_ARB */: return "GL_MODELVIEW20_ARB (0x8734)"; case 0x8735 /* GL_MODELVIEW21_ARB */: return "GL_MODELVIEW21_ARB (0x8735)"; case 0x8736 /* GL_MODELVIEW22_ARB */: return "GL_MODELVIEW22_ARB (0x8736)"; case 0x8737 /* GL_MODELVIEW23_ARB */: return "GL_MODELVIEW23_ARB (0x8737)"; case 0x8738 /* GL_MODELVIEW24_ARB */: return "GL_MODELVIEW24_ARB (0x8738)"; case 0x8739 /* GL_MODELVIEW25_ARB */: return "GL_MODELVIEW25_ARB (0x8739)"; case 0x873A /* GL_MODELVIEW26_ARB */: return "GL_MODELVIEW26_ARB (0x873A)"; case 0x873B /* GL_MODELVIEW27_ARB */: return "GL_MODELVIEW27_ARB (0x873B)"; case 0x873C /* GL_MODELVIEW28_ARB */: return "GL_MODELVIEW28_ARB (0x873C)"; case 0x873D /* GL_MODELVIEW29_ARB */: return "GL_MODELVIEW29_ARB (0x873D)"; case 0x873E /* GL_MODELVIEW30_ARB */: return "GL_MODELVIEW30_ARB (0x873E)"; case 0x873F /* GL_MODELVIEW31_ARB */: return "GL_MODELVIEW31_ARB (0x873F)"; /* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */ //case 0x8764 /* GL_BUFFER_SIZE_ARB */: return "GL_BUFFER_SIZE_ARB (0x8764)"; //case 0x8765 /* GL_BUFFER_USAGE_ARB */: return "GL_BUFFER_USAGE_ARB (0x8765)"; //case 0x8892 /* GL_ARRAY_BUFFER_ARB */: return "GL_ARRAY_BUFFER_ARB (0x8892)"; //case 0x8893 /* GL_ELEMENT_ARRAY_BUFFER_ARB */: return "GL_ELEMENT_ARRAY_BUFFER_ARB (0x8893)"; //case 0x8894 /* GL_ARRAY_BUFFER_BINDING_ARB */: return "GL_ARRAY_BUFFER_BINDING_ARB (0x8894)"; //case 0x8895 /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */: return "GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB (0x8895)"; //case 0x8896 /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */: return "GL_VERTEX_ARRAY_BUFFER_BINDING_ARB (0x8896)"; //case 0x8897 /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */: return "GL_NORMAL_ARRAY_BUFFER_BINDING_ARB (0x8897)"; //case 0x8898 /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */: return "GL_COLOR_ARRAY_BUFFER_BINDING_ARB (0x8898)"; //case 0x8899 /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */: return "GL_INDEX_ARRAY_BUFFER_BINDING_ARB (0x8899)"; //case 0x889A /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */: return "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB (0x889A)"; //case 0x889B /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */: return "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB (0x889B)"; //case 0x889C /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */: return "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB (0x889C)"; //case 0x889D /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */: return "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB (0x889D)"; //case 0x889E /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */: return "GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB (0x889E)"; //case 0x889F /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB (0x889F)"; //case 0x88B8 /* GL_READ_ONLY_ARB */: return "GL_READ_ONLY_ARB (0x88B8)"; //case 0x88B9 /* GL_WRITE_ONLY_ARB */: return "GL_WRITE_ONLY_ARB (0x88B9)"; //case 0x88BA /* GL_READ_WRITE_ARB */: return "GL_READ_WRITE_ARB (0x88BA)"; //case 0x88BB /* GL_BUFFER_ACCESS_ARB */: return "GL_BUFFER_ACCESS_ARB (0x88BB)"; //case 0x88BC /* GL_BUFFER_MAPPED_ARB */: return "GL_BUFFER_MAPPED_ARB (0x88BC)"; //case 0x88BD /* GL_BUFFER_MAP_POINTER_ARB */: return "GL_BUFFER_MAP_POINTER_ARB (0x88BD)"; //case 0x88E0 /* GL_STREAM_DRAW_ARB */: return "GL_STREAM_DRAW_ARB (0x88E0)"; //case 0x88E1 /* GL_STREAM_READ_ARB */: return "GL_STREAM_READ_ARB (0x88E1)"; //case 0x88E2 /* GL_STREAM_COPY_ARB */: return "GL_STREAM_COPY_ARB (0x88E2)"; //case 0x88E4 /* GL_STATIC_DRAW_ARB */: return "GL_STATIC_DRAW_ARB (0x88E4)"; //case 0x88E5 /* GL_STATIC_READ_ARB */: return "GL_STATIC_READ_ARB (0x88E5)"; //case 0x88E6 /* GL_STATIC_COPY_ARB */: return "GL_STATIC_COPY_ARB (0x88E6)"; //case 0x88E8 /* GL_DYNAMIC_DRAW_ARB */: return "GL_DYNAMIC_DRAW_ARB (0x88E8)"; //case 0x88E9 /* GL_DYNAMIC_READ_ARB */: return "GL_DYNAMIC_READ_ARB (0x88E9)"; //case 0x88EA /* GL_DYNAMIC_COPY_ARB */: return "GL_DYNAMIC_COPY_ARB (0x88EA)"; /* ------------------------- GL_ARB_vertex_program ------------------------- */ //case 0x8458 /* GL_COLOR_SUM_ARB */: return "GL_COLOR_SUM_ARB (0x8458)"; case 0x8620 /* GL_VERTEX_PROGRAM_ARB */: return "GL_VERTEX_PROGRAM_ARB (0x8620)"; //case 0x8622 /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB (0x8622)"; //case 0x8623 /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB (0x8623)"; //case 0x8624 /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB (0x8624)"; //case 0x8625 /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB (0x8625)"; //case 0x8626 /* GL_CURRENT_VERTEX_ATTRIB_ARB */: return "GL_CURRENT_VERTEX_ATTRIB_ARB (0x8626)"; case 0x8627 /* GL_PROGRAM_LENGTH_ARB */: return "GL_PROGRAM_LENGTH_ARB (0x8627)"; case 0x8628 /* GL_PROGRAM_STRING_ARB */: return "GL_PROGRAM_STRING_ARB (0x8628)"; case 0x862E /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */: return "GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB (0x862E)"; case 0x862F /* GL_MAX_PROGRAM_MATRICES_ARB */: return "GL_MAX_PROGRAM_MATRICES_ARB (0x862F)"; case 0x8640 /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */: return "GL_CURRENT_MATRIX_STACK_DEPTH_ARB (0x8640)"; case 0x8641 /* GL_CURRENT_MATRIX_ARB */: return "GL_CURRENT_MATRIX_ARB (0x8641)"; //case 0x8642 /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */: return "GL_VERTEX_PROGRAM_POINT_SIZE_ARB (0x8642)"; //case 0x8643 /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */: return "GL_VERTEX_PROGRAM_TWO_SIDE_ARB (0x8643)"; //case 0x8645 /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB (0x8645)"; case 0x864B /* GL_PROGRAM_ERROR_POSITION_ARB */: return "GL_PROGRAM_ERROR_POSITION_ARB (0x864B)"; case 0x8677 /* GL_PROGRAM_BINDING_ARB */: return "GL_PROGRAM_BINDING_ARB (0x8677)"; //case 0x8869 /* GL_MAX_VERTEX_ATTRIBS_ARB */: return "GL_MAX_VERTEX_ATTRIBS_ARB (0x8869)"; //case 0x886A /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */: return "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB (0x886A)"; case 0x8874 /* GL_PROGRAM_ERROR_STRING_ARB */: return "GL_PROGRAM_ERROR_STRING_ARB (0x8874)"; case 0x8875 /* GL_PROGRAM_FORMAT_ASCII_ARB */: return "GL_PROGRAM_FORMAT_ASCII_ARB (0x8875)"; case 0x8876 /* GL_PROGRAM_FORMAT_ARB */: return "GL_PROGRAM_FORMAT_ARB (0x8876)"; case 0x88A4 /* GL_PROGRAM_TEMPORARIES_ARB */: return "GL_PROGRAM_TEMPORARIES_ARB (0x88A4)"; case 0x88A5 /* GL_MAX_PROGRAM_TEMPORARIES_ARB */: return "GL_MAX_PROGRAM_TEMPORARIES_ARB (0x88A5)"; case 0x88A6 /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */: return "GL_PROGRAM_NATIVE_TEMPORARIES_ARB (0x88A6)"; case 0x88A7 /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */: return "GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB (0x88A7)"; case 0x88A8 /* GL_PROGRAM_PARAMETERS_ARB */: return "GL_PROGRAM_PARAMETERS_ARB (0x88A8)"; case 0x88A9 /* GL_MAX_PROGRAM_PARAMETERS_ARB */: return "GL_MAX_PROGRAM_PARAMETERS_ARB (0x88A9)"; case 0x88AA /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */: return "GL_PROGRAM_NATIVE_PARAMETERS_ARB (0x88AA)"; case 0x88AB /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */: return "GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB (0x88AB)"; case 0x88AC /* GL_PROGRAM_ATTRIBS_ARB */: return "GL_PROGRAM_ATTRIBS_ARB (0x88AC)"; case 0x88AD /* GL_MAX_PROGRAM_ATTRIBS_ARB */: return "GL_MAX_PROGRAM_ATTRIBS_ARB (0x88AD)"; case 0x88AE /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */: return "GL_PROGRAM_NATIVE_ATTRIBS_ARB (0x88AE)"; case 0x88AF /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */: return "GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB (0x88AF)"; case 0x88B0 /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */: return "GL_PROGRAM_ADDRESS_REGISTERS_ARB (0x88B0)"; case 0x88B1 /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */: return "GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB (0x88B1)"; case 0x88B2 /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */: return "GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB (0x88B2)"; case 0x88B3 /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */: return "GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB (0x88B3)"; case 0x88B4 /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */: return "GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB (0x88B4)"; case 0x88B5 /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */: return "GL_MAX_PROGRAM_ENV_PARAMETERS_ARB (0x88B5)"; case 0x88B6 /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */: return "GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB (0x88B6)"; case 0x88B7 /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */: return "GL_TRANSPOSE_CURRENT_MATRIX_ARB (0x88B7)"; case 0x88C0 /* GL_MATRIX0_ARB */: return "GL_MATRIX0_ARB (0x88C0)"; case 0x88C1 /* GL_MATRIX1_ARB */: return "GL_MATRIX1_ARB (0x88C1)"; case 0x88C2 /* GL_MATRIX2_ARB */: return "GL_MATRIX2_ARB (0x88C2)"; case 0x88C3 /* GL_MATRIX3_ARB */: return "GL_MATRIX3_ARB (0x88C3)"; case 0x88C4 /* GL_MATRIX4_ARB */: return "GL_MATRIX4_ARB (0x88C4)"; case 0x88C5 /* GL_MATRIX5_ARB */: return "GL_MATRIX5_ARB (0x88C5)"; case 0x88C6 /* GL_MATRIX6_ARB */: return "GL_MATRIX6_ARB (0x88C6)"; case 0x88C7 /* GL_MATRIX7_ARB */: return "GL_MATRIX7_ARB (0x88C7)"; case 0x88C8 /* GL_MATRIX8_ARB */: return "GL_MATRIX8_ARB (0x88C8)"; case 0x88C9 /* GL_MATRIX9_ARB */: return "GL_MATRIX9_ARB (0x88C9)"; case 0x88CA /* GL_MATRIX10_ARB */: return "GL_MATRIX10_ARB (0x88CA)"; case 0x88CB /* GL_MATRIX11_ARB */: return "GL_MATRIX11_ARB (0x88CB)"; case 0x88CC /* GL_MATRIX12_ARB */: return "GL_MATRIX12_ARB (0x88CC)"; case 0x88CD /* GL_MATRIX13_ARB */: return "GL_MATRIX13_ARB (0x88CD)"; case 0x88CE /* GL_MATRIX14_ARB */: return "GL_MATRIX14_ARB (0x88CE)"; case 0x88CF /* GL_MATRIX15_ARB */: return "GL_MATRIX15_ARB (0x88CF)"; case 0x88D0 /* GL_MATRIX16_ARB */: return "GL_MATRIX16_ARB (0x88D0)"; case 0x88D1 /* GL_MATRIX17_ARB */: return "GL_MATRIX17_ARB (0x88D1)"; case 0x88D2 /* GL_MATRIX18_ARB */: return "GL_MATRIX18_ARB (0x88D2)"; case 0x88D3 /* GL_MATRIX19_ARB */: return "GL_MATRIX19_ARB (0x88D3)"; case 0x88D4 /* GL_MATRIX20_ARB */: return "GL_MATRIX20_ARB (0x88D4)"; case 0x88D5 /* GL_MATRIX21_ARB */: return "GL_MATRIX21_ARB (0x88D5)"; case 0x88D6 /* GL_MATRIX22_ARB */: return "GL_MATRIX22_ARB (0x88D6)"; case 0x88D7 /* GL_MATRIX23_ARB */: return "GL_MATRIX23_ARB (0x88D7)"; case 0x88D8 /* GL_MATRIX24_ARB */: return "GL_MATRIX24_ARB (0x88D8)"; case 0x88D9 /* GL_MATRIX25_ARB */: return "GL_MATRIX25_ARB (0x88D9)"; case 0x88DA /* GL_MATRIX26_ARB */: return "GL_MATRIX26_ARB (0x88DA)"; case 0x88DB /* GL_MATRIX27_ARB */: return "GL_MATRIX27_ARB (0x88DB)"; case 0x88DC /* GL_MATRIX28_ARB */: return "GL_MATRIX28_ARB (0x88DC)"; case 0x88DD /* GL_MATRIX29_ARB */: return "GL_MATRIX29_ARB (0x88DD)"; case 0x88DE /* GL_MATRIX30_ARB */: return "GL_MATRIX30_ARB (0x88DE)"; case 0x88DF /* GL_MATRIX31_ARB */: return "GL_MATRIX31_ARB (0x88DF)"; /* -------------------------- GL_ARB_vertex_shader ------------------------- */ //case 0x8B31 /* GL_VERTEX_SHADER_ARB */: return "GL_VERTEX_SHADER_ARB (0x8B31)"; //case 0x8B4A /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */: return "GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB (0x8B4A)"; //case 0x8B4B /* GL_MAX_VARYING_FLOATS_ARB */: return "GL_MAX_VARYING_FLOATS_ARB (0x8B4B)"; //case 0x8B4C /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */: return "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB (0x8B4C)"; //case 0x8B4D /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */: return "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB (0x8B4D)"; //case 0x8B89 /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */: return "GL_OBJECT_ACTIVE_ATTRIBUTES_ARB (0x8B89)"; //case 0x8B8A /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */: return "GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB (0x8B8A)"; /* ------------------- GL_ARB_vertex_type_2_10_10_10_rev ------------------- */ //case 0x8368 /* GL_UNSIGNED_INT_2_10_10_10_REV */: return "GL_UNSIGNED_INT_2_10_10_10_REV (0x8368)"; case 0x8D9F /* GL_INT_2_10_10_10_REV */: return "GL_INT_2_10_10_10_REV (0x8D9F)"; /* ------------------------- GL_ARB_viewport_array ------------------------- */ //case 0x0B70 /* GL_DEPTH_RANGE */: return "GL_DEPTH_RANGE (0x0B70)"; //case 0x0BA2 /* GL_VIEWPORT */: return "GL_VIEWPORT (0x0BA2)"; //case 0x0C10 /* GL_SCISSOR_BOX */: return "GL_SCISSOR_BOX (0x0C10)"; //case 0x0C11 /* GL_SCISSOR_TEST */: return "GL_SCISSOR_TEST (0x0C11)"; case 0x825B /* GL_MAX_VIEWPORTS */: return "GL_MAX_VIEWPORTS (0x825B)"; case 0x825C /* GL_VIEWPORT_SUBPIXEL_BITS */: return "GL_VIEWPORT_SUBPIXEL_BITS (0x825C)"; case 0x825D /* GL_VIEWPORT_BOUNDS_RANGE */: return "GL_VIEWPORT_BOUNDS_RANGE (0x825D)"; case 0x825E /* GL_LAYER_PROVOKING_VERTEX */: return "GL_LAYER_PROVOKING_VERTEX (0x825E)"; case 0x825F /* GL_VIEWPORT_INDEX_PROVOKING_VERTEX */: return "GL_VIEWPORT_INDEX_PROVOKING_VERTEX (0x825F)"; case 0x8260 /* GL_UNDEFINED_VERTEX */: return "GL_UNDEFINED_VERTEX (0x8260)"; //case 0x8E4D /* GL_FIRST_VERTEX_CONVENTION */: return "GL_FIRST_VERTEX_CONVENTION (0x8E4D)"; //case 0x8E4E /* GL_LAST_VERTEX_CONVENTION */: return "GL_LAST_VERTEX_CONVENTION (0x8E4E)"; //case 0x8E4F /* GL_PROVOKING_VERTEX */: return "GL_PROVOKING_VERTEX (0x8E4F)"; /* --------------------------- GL_ARB_window_pos --------------------------- */ /* ------------------------- GL_ATIX_point_sprites ------------------------- */ case 0x60B0 /* GL_TEXTURE_POINT_MODE_ATIX */: return "GL_TEXTURE_POINT_MODE_ATIX (0x60B0)"; case 0x60B1 /* GL_TEXTURE_POINT_ONE_COORD_ATIX */: return "GL_TEXTURE_POINT_ONE_COORD_ATIX (0x60B1)"; case 0x60B2 /* GL_TEXTURE_POINT_SPRITE_ATIX */: return "GL_TEXTURE_POINT_SPRITE_ATIX (0x60B2)"; case 0x60B3 /* GL_POINT_SPRITE_CULL_MODE_ATIX */: return "GL_POINT_SPRITE_CULL_MODE_ATIX (0x60B3)"; case 0x60B4 /* GL_POINT_SPRITE_CULL_CENTER_ATIX */: return "GL_POINT_SPRITE_CULL_CENTER_ATIX (0x60B4)"; case 0x60B5 /* GL_POINT_SPRITE_CULL_CLIP_ATIX */: return "GL_POINT_SPRITE_CULL_CLIP_ATIX (0x60B5)"; /* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */ case 0x8744 /* GL_MODULATE_ADD_ATIX */: return "GL_MODULATE_ADD_ATIX (0x8744)"; case 0x8745 /* GL_MODULATE_SIGNED_ADD_ATIX */: return "GL_MODULATE_SIGNED_ADD_ATIX (0x8745)"; case 0x8746 /* GL_MODULATE_SUBTRACT_ATIX */: return "GL_MODULATE_SUBTRACT_ATIX (0x8746)"; /* ----------------------- GL_ATIX_texture_env_route ----------------------- */ case 0x8747 /* GL_SECONDARY_COLOR_ATIX */: return "GL_SECONDARY_COLOR_ATIX (0x8747)"; case 0x8748 /* GL_TEXTURE_OUTPUT_RGB_ATIX */: return "GL_TEXTURE_OUTPUT_RGB_ATIX (0x8748)"; case 0x8749 /* GL_TEXTURE_OUTPUT_ALPHA_ATIX */: return "GL_TEXTURE_OUTPUT_ALPHA_ATIX (0x8749)"; /* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */ case 0x610E /* GL_OUTPUT_POINT_SIZE_ATIX */: return "GL_OUTPUT_POINT_SIZE_ATIX (0x610E)"; /* -------------------------- GL_ATI_draw_buffers -------------------------- */ //case 0x8824 /* GL_MAX_DRAW_BUFFERS_ATI */: return "GL_MAX_DRAW_BUFFERS_ATI (0x8824)"; //case 0x8825 /* GL_DRAW_BUFFER0_ATI */: return "GL_DRAW_BUFFER0_ATI (0x8825)"; //case 0x8826 /* GL_DRAW_BUFFER1_ATI */: return "GL_DRAW_BUFFER1_ATI (0x8826)"; //case 0x8827 /* GL_DRAW_BUFFER2_ATI */: return "GL_DRAW_BUFFER2_ATI (0x8827)"; //case 0x8828 /* GL_DRAW_BUFFER3_ATI */: return "GL_DRAW_BUFFER3_ATI (0x8828)"; //case 0x8829 /* GL_DRAW_BUFFER4_ATI */: return "GL_DRAW_BUFFER4_ATI (0x8829)"; //case 0x882A /* GL_DRAW_BUFFER5_ATI */: return "GL_DRAW_BUFFER5_ATI (0x882A)"; //case 0x882B /* GL_DRAW_BUFFER6_ATI */: return "GL_DRAW_BUFFER6_ATI (0x882B)"; //case 0x882C /* GL_DRAW_BUFFER7_ATI */: return "GL_DRAW_BUFFER7_ATI (0x882C)"; //case 0x882D /* GL_DRAW_BUFFER8_ATI */: return "GL_DRAW_BUFFER8_ATI (0x882D)"; //case 0x882E /* GL_DRAW_BUFFER9_ATI */: return "GL_DRAW_BUFFER9_ATI (0x882E)"; //case 0x882F /* GL_DRAW_BUFFER10_ATI */: return "GL_DRAW_BUFFER10_ATI (0x882F)"; //case 0x8830 /* GL_DRAW_BUFFER11_ATI */: return "GL_DRAW_BUFFER11_ATI (0x8830)"; //case 0x8831 /* GL_DRAW_BUFFER12_ATI */: return "GL_DRAW_BUFFER12_ATI (0x8831)"; //case 0x8832 /* GL_DRAW_BUFFER13_ATI */: return "GL_DRAW_BUFFER13_ATI (0x8832)"; //case 0x8833 /* GL_DRAW_BUFFER14_ATI */: return "GL_DRAW_BUFFER14_ATI (0x8833)"; //case 0x8834 /* GL_DRAW_BUFFER15_ATI */: return "GL_DRAW_BUFFER15_ATI (0x8834)";/* -------------------------- GL_ATI_element_array ------------------------- */ case 0x8768 /* GL_ELEMENT_ARRAY_ATI */: return "GL_ELEMENT_ARRAY_ATI (0x8768)"; case 0x8769 /* GL_ELEMENT_ARRAY_TYPE_ATI */: return "GL_ELEMENT_ARRAY_TYPE_ATI (0x8769)"; case 0x876A /* GL_ELEMENT_ARRAY_POINTER_ATI */: return "GL_ELEMENT_ARRAY_POINTER_ATI (0x876A)"; /* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */ case 0x8775 /* GL_BUMP_ROT_MATRIX_ATI */: return "GL_BUMP_ROT_MATRIX_ATI (0x8775)"; case 0x8776 /* GL_BUMP_ROT_MATRIX_SIZE_ATI */: return "GL_BUMP_ROT_MATRIX_SIZE_ATI (0x8776)"; case 0x8777 /* GL_BUMP_NUM_TEX_UNITS_ATI */: return "GL_BUMP_NUM_TEX_UNITS_ATI (0x8777)"; case 0x8778 /* GL_BUMP_TEX_UNITS_ATI */: return "GL_BUMP_TEX_UNITS_ATI (0x8778)"; case 0x8779 /* GL_DUDV_ATI */: return "GL_DUDV_ATI (0x8779)"; case 0x877A /* GL_DU8DV8_ATI */: return "GL_DU8DV8_ATI (0x877A)"; case 0x877B /* GL_BUMP_ENVMAP_ATI */: return "GL_BUMP_ENVMAP_ATI (0x877B)"; case 0x877C /* GL_BUMP_TARGET_ATI */: return "GL_BUMP_TARGET_ATI (0x877C)"; /* ------------------------- GL_ATI_fragment_shader ------------------------ */ //case 0x00000001 /* GL_RED_BIT_ATI */: return "GL_RED_BIT_ATI (0x00000001)"; //case 0x00000001 /* GL_2X_BIT_ATI */: return "GL_2X_BIT_ATI (0x00000001)"; //case 0x00000002 /* GL_4X_BIT_ATI */: return "GL_4X_BIT_ATI (0x00000002)"; //case 0x00000002 /* GL_GREEN_BIT_ATI */: return "GL_GREEN_BIT_ATI (0x00000002)"; //case 0x00000002 /* GL_COMP_BIT_ATI */: return "GL_COMP_BIT_ATI (0x00000002)"; //case 0x00000004 /* GL_BLUE_BIT_ATI */: return "GL_BLUE_BIT_ATI (0x00000004)"; //case 0x00000004 /* GL_8X_BIT_ATI */: return "GL_8X_BIT_ATI (0x00000004)"; //case 0x00000004 /* GL_NEGATE_BIT_ATI */: return "GL_NEGATE_BIT_ATI (0x00000004)"; //case 0x00000008 /* GL_BIAS_BIT_ATI */: return "GL_BIAS_BIT_ATI (0x00000008)"; //case 0x00000008 /* GL_HALF_BIT_ATI */: return "GL_HALF_BIT_ATI (0x00000008)"; //case 0x00000010 /* GL_QUARTER_BIT_ATI */: return "GL_QUARTER_BIT_ATI (0x00000010)"; //case 0x00000020 /* GL_EIGHTH_BIT_ATI */: return "GL_EIGHTH_BIT_ATI (0x00000020)"; //case 0x00000040 /* GL_SATURATE_BIT_ATI */: return "GL_SATURATE_BIT_ATI (0x00000040)"; case 0x8920 /* GL_FRAGMENT_SHADER_ATI */: return "GL_FRAGMENT_SHADER_ATI (0x8920)"; case 0x8921 /* GL_REG_0_ATI */: return "GL_REG_0_ATI (0x8921)"; case 0x8922 /* GL_REG_1_ATI */: return "GL_REG_1_ATI (0x8922)"; case 0x8923 /* GL_REG_2_ATI */: return "GL_REG_2_ATI (0x8923)"; case 0x8924 /* GL_REG_3_ATI */: return "GL_REG_3_ATI (0x8924)"; case 0x8925 /* GL_REG_4_ATI */: return "GL_REG_4_ATI (0x8925)"; case 0x8926 /* GL_REG_5_ATI */: return "GL_REG_5_ATI (0x8926)"; case 0x8941 /* GL_CON_0_ATI */: return "GL_CON_0_ATI (0x8941)"; case 0x8942 /* GL_CON_1_ATI */: return "GL_CON_1_ATI (0x8942)"; case 0x8943 /* GL_CON_2_ATI */: return "GL_CON_2_ATI (0x8943)"; case 0x8944 /* GL_CON_3_ATI */: return "GL_CON_3_ATI (0x8944)"; case 0x8945 /* GL_CON_4_ATI */: return "GL_CON_4_ATI (0x8945)"; case 0x8946 /* GL_CON_5_ATI */: return "GL_CON_5_ATI (0x8946)"; case 0x8947 /* GL_CON_6_ATI */: return "GL_CON_6_ATI (0x8947)"; case 0x8948 /* GL_CON_7_ATI */: return "GL_CON_7_ATI (0x8948)"; case 0x8961 /* GL_MOV_ATI */: return "GL_MOV_ATI (0x8961)"; case 0x8963 /* GL_ADD_ATI */: return "GL_ADD_ATI (0x8963)"; case 0x8964 /* GL_MUL_ATI */: return "GL_MUL_ATI (0x8964)"; case 0x8965 /* GL_SUB_ATI */: return "GL_SUB_ATI (0x8965)"; case 0x8966 /* GL_DOT3_ATI */: return "GL_DOT3_ATI (0x8966)"; case 0x8967 /* GL_DOT4_ATI */: return "GL_DOT4_ATI (0x8967)"; case 0x8968 /* GL_MAD_ATI */: return "GL_MAD_ATI (0x8968)"; case 0x8969 /* GL_LERP_ATI */: return "GL_LERP_ATI (0x8969)"; case 0x896A /* GL_CND_ATI */: return "GL_CND_ATI (0x896A)"; case 0x896B /* GL_CND0_ATI */: return "GL_CND0_ATI (0x896B)"; case 0x896C /* GL_DOT2_ADD_ATI */: return "GL_DOT2_ADD_ATI (0x896C)"; case 0x896D /* GL_SECONDARY_INTERPOLATOR_ATI */: return "GL_SECONDARY_INTERPOLATOR_ATI (0x896D)"; case 0x896E /* GL_NUM_FRAGMENT_REGISTERS_ATI */: return "GL_NUM_FRAGMENT_REGISTERS_ATI (0x896E)"; case 0x896F /* GL_NUM_FRAGMENT_CONSTANTS_ATI */: return "GL_NUM_FRAGMENT_CONSTANTS_ATI (0x896F)"; case 0x8970 /* GL_NUM_PASSES_ATI */: return "GL_NUM_PASSES_ATI (0x8970)"; case 0x8973 /* GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI */: return "GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI (0x8973)"; case 0x8974 /* GL_NUM_LOOPBACK_COMPONENTS_ATI */: return "GL_NUM_LOOPBACK_COMPONENTS_ATI (0x8974)"; case 0x8975 /* GL_COLOR_ALPHA_PAIRING_ATI */: return "GL_COLOR_ALPHA_PAIRING_ATI (0x8975)"; case 0x8976 /* GL_SWIZZLE_STR_ATI */: return "GL_SWIZZLE_STR_ATI (0x8976)"; case 0x8977 /* GL_SWIZZLE_STQ_ATI */: return "GL_SWIZZLE_STQ_ATI (0x8977)"; case 0x8978 /* GL_SWIZZLE_STR_DR_ATI */: return "GL_SWIZZLE_STR_DR_ATI (0x8978)"; case 0x8979 /* GL_SWIZZLE_STQ_DQ_ATI */: return "GL_SWIZZLE_STQ_DQ_ATI (0x8979)"; case 0x897A /* GL_SWIZZLE_STRQ_ATI */: return "GL_SWIZZLE_STRQ_ATI (0x897A)"; case 0x897B /* GL_SWIZZLE_STRQ_DQ_ATI */: return "GL_SWIZZLE_STRQ_DQ_ATI (0x897B)"; /* ------------------------ GL_ATI_map_object_buffer ----------------------- */ /* ----------------------------- GL_ATI_meminfo ---------------------------- */ case 0x87FB /* GL_VBO_FREE_MEMORY_ATI */: return "GL_VBO_FREE_MEMORY_ATI (0x87FB)"; case 0x87FC /* GL_TEXTURE_FREE_MEMORY_ATI */: return "GL_TEXTURE_FREE_MEMORY_ATI (0x87FC)"; case 0x87FD /* GL_RENDERBUFFER_FREE_MEMORY_ATI */: return "GL_RENDERBUFFER_FREE_MEMORY_ATI (0x87FD)"; /* -------------------------- GL_ATI_pn_triangles -------------------------- */ case 0x87F0 /* GL_PN_TRIANGLES_ATI */: return "GL_PN_TRIANGLES_ATI (0x87F0)"; case 0x87F1 /* GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI */: return "GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI (0x87F1)"; case 0x87F2 /* GL_PN_TRIANGLES_POINT_MODE_ATI */: return "GL_PN_TRIANGLES_POINT_MODE_ATI (0x87F2)"; case 0x87F3 /* GL_PN_TRIANGLES_NORMAL_MODE_ATI */: return "GL_PN_TRIANGLES_NORMAL_MODE_ATI (0x87F3)"; case 0x87F4 /* GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI */: return "GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI (0x87F4)"; case 0x87F5 /* GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI */: return "GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI (0x87F5)"; case 0x87F6 /* GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI */: return "GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI (0x87F6)"; case 0x87F7 /* GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI */: return "GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI (0x87F7)"; case 0x87F8 /* GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI */: return "GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI (0x87F8)"; /* ------------------------ GL_ATI_separate_stencil ------------------------ */ //case 0x8800 /* GL_STENCIL_BACK_FUNC_ATI */: return "GL_STENCIL_BACK_FUNC_ATI (0x8800)"; //case 0x8801 /* GL_STENCIL_BACK_FAIL_ATI */: return "GL_STENCIL_BACK_FAIL_ATI (0x8801)"; //case 0x8802 /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */: return "GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI (0x8802)"; //case 0x8803 /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */: return "GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI (0x8803)"; /* ----------------------- GL_ATI_shader_texture_lod ----------------------- */ /* ---------------------- GL_ATI_text_fragment_shader ---------------------- */ case 0x8200 /* GL_TEXT_FRAGMENT_SHADER_ATI */: return "GL_TEXT_FRAGMENT_SHADER_ATI (0x8200)"; /* --------------------- GL_ATI_texture_compression_3dc -------------------- */ case 0x8837 /* GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI */: return "GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI (0x8837)"; /* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */ //case 0x8744 /* GL_MODULATE_ADD_ATI */: return "GL_MODULATE_ADD_ATI (0x8744)"; //case 0x8745 /* GL_MODULATE_SIGNED_ADD_ATI */: return "GL_MODULATE_SIGNED_ADD_ATI (0x8745)"; //case 0x8746 /* GL_MODULATE_SUBTRACT_ATI */: return "GL_MODULATE_SUBTRACT_ATI (0x8746)"; /* -------------------------- GL_ATI_texture_float ------------------------- */ //case 0x8814 /* GL_RGBA_FLOAT32_ATI */: return "GL_RGBA_FLOAT32_ATI (0x8814)"; //case 0x8815 /* GL_RGB_FLOAT32_ATI */: return "GL_RGB_FLOAT32_ATI (0x8815)"; //case 0x8816 /* GL_ALPHA_FLOAT32_ATI */: return "GL_ALPHA_FLOAT32_ATI (0x8816)"; //case 0x8817 /* GL_INTENSITY_FLOAT32_ATI */: return "GL_INTENSITY_FLOAT32_ATI (0x8817)"; //case 0x8818 /* GL_LUMINANCE_FLOAT32_ATI */: return "GL_LUMINANCE_FLOAT32_ATI (0x8818)"; //case 0x8819 /* GL_LUMINANCE_ALPHA_FLOAT32_ATI */: return "GL_LUMINANCE_ALPHA_FLOAT32_ATI (0x8819)"; //case 0x881A /* GL_RGBA_FLOAT16_ATI */: return "GL_RGBA_FLOAT16_ATI (0x881A)"; //case 0x881B /* GL_RGB_FLOAT16_ATI */: return "GL_RGB_FLOAT16_ATI (0x881B)"; //case 0x881C /* GL_ALPHA_FLOAT16_ATI */: return "GL_ALPHA_FLOAT16_ATI (0x881C)"; //case 0x881D /* GL_INTENSITY_FLOAT16_ATI */: return "GL_INTENSITY_FLOAT16_ATI (0x881D)"; //case 0x881E /* GL_LUMINANCE_FLOAT16_ATI */: return "GL_LUMINANCE_FLOAT16_ATI (0x881E)"; //case 0x881F /* GL_LUMINANCE_ALPHA_FLOAT16_ATI */: return "GL_LUMINANCE_ALPHA_FLOAT16_ATI (0x881F)"; /* ----------------------- GL_ATI_texture_mirror_once ---------------------- */ case 0x8742 /* GL_MIRROR_CLAMP_ATI */: return "GL_MIRROR_CLAMP_ATI (0x8742)"; case 0x8743 /* GL_MIRROR_CLAMP_TO_EDGE_ATI */: return "GL_MIRROR_CLAMP_TO_EDGE_ATI (0x8743)"; /* ----------------------- GL_ATI_vertex_array_object ---------------------- */ case 0x8760 /* GL_STATIC_ATI */: return "GL_STATIC_ATI (0x8760)"; case 0x8761 /* GL_DYNAMIC_ATI */: return "GL_DYNAMIC_ATI (0x8761)"; case 0x8762 /* GL_PRESERVE_ATI */: return "GL_PRESERVE_ATI (0x8762)"; case 0x8763 /* GL_DISCARD_ATI */: return "GL_DISCARD_ATI (0x8763)"; //case 0x8764 /* GL_OBJECT_BUFFER_SIZE_ATI */: return "GL_OBJECT_BUFFER_SIZE_ATI (0x8764)"; //case 0x8765 /* GL_OBJECT_BUFFER_USAGE_ATI */: return "GL_OBJECT_BUFFER_USAGE_ATI (0x8765)"; case 0x8766 /* GL_ARRAY_OBJECT_BUFFER_ATI */: return "GL_ARRAY_OBJECT_BUFFER_ATI (0x8766)"; case 0x8767 /* GL_ARRAY_OBJECT_OFFSET_ATI */: return "GL_ARRAY_OBJECT_OFFSET_ATI (0x8767)"; /* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */ /* ------------------------- GL_ATI_vertex_streams ------------------------- */ case 0x876B /* GL_MAX_VERTEX_STREAMS_ATI */: return "GL_MAX_VERTEX_STREAMS_ATI (0x876B)"; case 0x876C /* GL_VERTEX_SOURCE_ATI */: return "GL_VERTEX_SOURCE_ATI (0x876C)"; case 0x876D /* GL_VERTEX_STREAM0_ATI */: return "GL_VERTEX_STREAM0_ATI (0x876D)"; case 0x876E /* GL_VERTEX_STREAM1_ATI */: return "GL_VERTEX_STREAM1_ATI (0x876E)"; case 0x876F /* GL_VERTEX_STREAM2_ATI */: return "GL_VERTEX_STREAM2_ATI (0x876F)"; case 0x8770 /* GL_VERTEX_STREAM3_ATI */: return "GL_VERTEX_STREAM3_ATI (0x8770)"; case 0x8771 /* GL_VERTEX_STREAM4_ATI */: return "GL_VERTEX_STREAM4_ATI (0x8771)"; case 0x8772 /* GL_VERTEX_STREAM5_ATI */: return "GL_VERTEX_STREAM5_ATI (0x8772)"; case 0x8773 /* GL_VERTEX_STREAM6_ATI */: return "GL_VERTEX_STREAM6_ATI (0x8773)"; case 0x8774 /* GL_VERTEX_STREAM7_ATI */: return "GL_VERTEX_STREAM7_ATI (0x8774)"; /* --------------------------- GL_EXT_422_pixels --------------------------- */ case 0x80CC /* GL_422_EXT */: return "GL_422_EXT (0x80CC)"; case 0x80CD /* GL_422_REV_EXT */: return "GL_422_REV_EXT (0x80CD)"; case 0x80CE /* GL_422_AVERAGE_EXT */: return "GL_422_AVERAGE_EXT (0x80CE)"; case 0x80CF /* GL_422_REV_AVERAGE_EXT */: return "GL_422_REV_AVERAGE_EXT (0x80CF)"; /* ---------------------------- GL_EXT_Cg_shader --------------------------- */ case 0x890E /* GL_CG_VERTEX_SHADER_EXT */: return "GL_CG_VERTEX_SHADER_EXT (0x890E)"; case 0x890F /* GL_CG_FRAGMENT_SHADER_EXT */: return "GL_CG_FRAGMENT_SHADER_EXT (0x890F)"; /* ------------------------------ GL_EXT_abgr ------------------------------ */ //case 0x8000 /* GL_ABGR_EXT */: return "GL_ABGR_EXT (0x8000)"; /* ------------------------------ GL_EXT_bgra ------------------------------ */ //case 0x80E0 /* GL_BGR_EXT */: return "GL_BGR_EXT (0x80E0)"; //case 0x80E1 /* GL_BGRA_EXT */: return "GL_BGRA_EXT (0x80E1)"; /* ------------------------ GL_EXT_bindable_uniform ------------------------ */ case 0x8DE2 /* GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT */: return "GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT (0x8DE2)"; case 0x8DE3 /* GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT */: return "GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT (0x8DE3)"; case 0x8DE4 /* GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT */: return "GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT (0x8DE4)"; case 0x8DED /* GL_MAX_BINDABLE_UNIFORM_SIZE_EXT */: return "GL_MAX_BINDABLE_UNIFORM_SIZE_EXT (0x8DED)"; case 0x8DEE /* GL_UNIFORM_BUFFER_EXT */: return "GL_UNIFORM_BUFFER_EXT (0x8DEE)"; case 0x8DEF /* GL_UNIFORM_BUFFER_BINDING_EXT */: return "GL_UNIFORM_BUFFER_BINDING_EXT (0x8DEF)"; /* --------------------------- GL_EXT_blend_color -------------------------- */ //case 0x8001 /* GL_CONSTANT_COLOR_EXT */: return "GL_CONSTANT_COLOR_EXT (0x8001)"; //case 0x8002 /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */: return "GL_ONE_MINUS_CONSTANT_COLOR_EXT (0x8002)"; //case 0x8003 /* GL_CONSTANT_ALPHA_EXT */: return "GL_CONSTANT_ALPHA_EXT (0x8003)"; //case 0x8004 /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */: return "GL_ONE_MINUS_CONSTANT_ALPHA_EXT (0x8004)"; //case 0x8005 /* GL_BLEND_COLOR_EXT */: return "GL_BLEND_COLOR_EXT (0x8005)";/* --------------------- GL_EXT_blend_equation_separate -------------------- */ //case 0x8009 /* GL_BLEND_EQUATION_RGB_EXT */: return "GL_BLEND_EQUATION_RGB_EXT (0x8009)"; //case 0x883D /* GL_BLEND_EQUATION_ALPHA_EXT */: return "GL_BLEND_EQUATION_ALPHA_EXT (0x883D)";/* ----------------------- GL_EXT_blend_func_separate ---------------------- */ //case 0x80C8 /* GL_BLEND_DST_RGB_EXT */: return "GL_BLEND_DST_RGB_EXT (0x80C8)"; //case 0x80C9 /* GL_BLEND_SRC_RGB_EXT */: return "GL_BLEND_SRC_RGB_EXT (0x80C9)"; //case 0x80CA /* GL_BLEND_DST_ALPHA_EXT */: return "GL_BLEND_DST_ALPHA_EXT (0x80CA)"; //case 0x80CB /* GL_BLEND_SRC_ALPHA_EXT */: return "GL_BLEND_SRC_ALPHA_EXT (0x80CB)";/* ------------------------- GL_EXT_blend_logic_op ------------------------- */ /* -------------------------- GL_EXT_blend_minmax -------------------------- */ //case 0x8006 /* GL_FUNC_ADD_EXT */: return "GL_FUNC_ADD_EXT (0x8006)"; //case 0x8007 /* GL_MIN_EXT */: return "GL_MIN_EXT (0x8007)"; //case 0x8008 /* GL_MAX_EXT */: return "GL_MAX_EXT (0x8008)"; //case 0x8009 /* GL_BLEND_EQUATION_EXT */: return "GL_BLEND_EQUATION_EXT (0x8009)";/* ------------------------- GL_EXT_blend_subtract ------------------------- */ //case 0x800A /* GL_FUNC_SUBTRACT_EXT */: return "GL_FUNC_SUBTRACT_EXT (0x800A)"; //case 0x800B /* GL_FUNC_REVERSE_SUBTRACT_EXT */: return "GL_FUNC_REVERSE_SUBTRACT_EXT (0x800B)"; /* ------------------------ GL_EXT_clip_volume_hint ------------------------ */ case 0x80F0 /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */: return "GL_CLIP_VOLUME_CLIPPING_HINT_EXT (0x80F0)"; /* ------------------------------ GL_EXT_cmyka ----------------------------- */ case 0x800C /* GL_CMYK_EXT */: return "GL_CMYK_EXT (0x800C)"; case 0x800D /* GL_CMYKA_EXT */: return "GL_CMYKA_EXT (0x800D)"; case 0x800E /* GL_PACK_CMYK_HINT_EXT */: return "GL_PACK_CMYK_HINT_EXT (0x800E)"; case 0x800F /* GL_UNPACK_CMYK_HINT_EXT */: return "GL_UNPACK_CMYK_HINT_EXT (0x800F)"; /* ------------------------- GL_EXT_color_subtable ------------------------- */ /* ---------------------- GL_EXT_compiled_vertex_array --------------------- */ case 0x81A8 /* GL_ARRAY_ELEMENT_LOCK_FIRST_EXT */: return "GL_ARRAY_ELEMENT_LOCK_FIRST_EXT (0x81A8)"; case 0x81A9 /* GL_ARRAY_ELEMENT_LOCK_COUNT_EXT */: return "GL_ARRAY_ELEMENT_LOCK_COUNT_EXT (0x81A9)"; /* --------------------------- GL_EXT_convolution -------------------------- */ //case 0x8010 /* GL_CONVOLUTION_1D_EXT */: return "GL_CONVOLUTION_1D_EXT (0x8010)"; //case 0x8011 /* GL_CONVOLUTION_2D_EXT */: return "GL_CONVOLUTION_2D_EXT (0x8011)"; //case 0x8012 /* GL_SEPARABLE_2D_EXT */: return "GL_SEPARABLE_2D_EXT (0x8012)"; //case 0x8013 /* GL_CONVOLUTION_BORDER_MODE_EXT */: return "GL_CONVOLUTION_BORDER_MODE_EXT (0x8013)"; //case 0x8014 /* GL_CONVOLUTION_FILTER_SCALE_EXT */: return "GL_CONVOLUTION_FILTER_SCALE_EXT (0x8014)"; //case 0x8015 /* GL_CONVOLUTION_FILTER_BIAS_EXT */: return "GL_CONVOLUTION_FILTER_BIAS_EXT (0x8015)"; //case 0x8016 /* GL_REDUCE_EXT */: return "GL_REDUCE_EXT (0x8016)"; //case 0x8017 /* GL_CONVOLUTION_FORMAT_EXT */: return "GL_CONVOLUTION_FORMAT_EXT (0x8017)"; //case 0x8018 /* GL_CONVOLUTION_WIDTH_EXT */: return "GL_CONVOLUTION_WIDTH_EXT (0x8018)"; //case 0x8019 /* GL_CONVOLUTION_HEIGHT_EXT */: return "GL_CONVOLUTION_HEIGHT_EXT (0x8019)"; //case 0x801A /* GL_MAX_CONVOLUTION_WIDTH_EXT */: return "GL_MAX_CONVOLUTION_WIDTH_EXT (0x801A)"; //case 0x801B /* GL_MAX_CONVOLUTION_HEIGHT_EXT */: return "GL_MAX_CONVOLUTION_HEIGHT_EXT (0x801B)"; //case 0x801C /* GL_POST_CONVOLUTION_RED_SCALE_EXT */: return "GL_POST_CONVOLUTION_RED_SCALE_EXT (0x801C)"; //case 0x801D /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */: return "GL_POST_CONVOLUTION_GREEN_SCALE_EXT (0x801D)"; //case 0x801E /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */: return "GL_POST_CONVOLUTION_BLUE_SCALE_EXT (0x801E)"; //case 0x801F /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */: return "GL_POST_CONVOLUTION_ALPHA_SCALE_EXT (0x801F)"; //case 0x8020 /* GL_POST_CONVOLUTION_RED_BIAS_EXT */: return "GL_POST_CONVOLUTION_RED_BIAS_EXT (0x8020)"; //case 0x8021 /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */: return "GL_POST_CONVOLUTION_GREEN_BIAS_EXT (0x8021)"; //case 0x8022 /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */: return "GL_POST_CONVOLUTION_BLUE_BIAS_EXT (0x8022)"; //case 0x8023 /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */: return "GL_POST_CONVOLUTION_ALPHA_BIAS_EXT (0x8023)"; /* ------------------------ GL_EXT_coordinate_frame ------------------------ */ case 0x8439 /* GL_TANGENT_ARRAY_EXT */: return "GL_TANGENT_ARRAY_EXT (0x8439)"; case 0x843A /* GL_BINORMAL_ARRAY_EXT */: return "GL_BINORMAL_ARRAY_EXT (0x843A)"; case 0x843B /* GL_CURRENT_TANGENT_EXT */: return "GL_CURRENT_TANGENT_EXT (0x843B)"; case 0x843C /* GL_CURRENT_BINORMAL_EXT */: return "GL_CURRENT_BINORMAL_EXT (0x843C)"; case 0x843E /* GL_TANGENT_ARRAY_TYPE_EXT */: return "GL_TANGENT_ARRAY_TYPE_EXT (0x843E)"; case 0x843F /* GL_TANGENT_ARRAY_STRIDE_EXT */: return "GL_TANGENT_ARRAY_STRIDE_EXT (0x843F)"; case 0x8440 /* GL_BINORMAL_ARRAY_TYPE_EXT */: return "GL_BINORMAL_ARRAY_TYPE_EXT (0x8440)"; case 0x8441 /* GL_BINORMAL_ARRAY_STRIDE_EXT */: return "GL_BINORMAL_ARRAY_STRIDE_EXT (0x8441)"; case 0x8442 /* GL_TANGENT_ARRAY_POINTER_EXT */: return "GL_TANGENT_ARRAY_POINTER_EXT (0x8442)"; case 0x8443 /* GL_BINORMAL_ARRAY_POINTER_EXT */: return "GL_BINORMAL_ARRAY_POINTER_EXT (0x8443)"; case 0x8444 /* GL_MAP1_TANGENT_EXT */: return "GL_MAP1_TANGENT_EXT (0x8444)"; case 0x8445 /* GL_MAP2_TANGENT_EXT */: return "GL_MAP2_TANGENT_EXT (0x8445)"; case 0x8446 /* GL_MAP1_BINORMAL_EXT */: return "GL_MAP1_BINORMAL_EXT (0x8446)"; case 0x8447 /* GL_MAP2_BINORMAL_EXT */: return "GL_MAP2_BINORMAL_EXT (0x8447)"; /* -------------------------- GL_EXT_copy_texture -------------------------- */ /* --------------------------- GL_EXT_cull_vertex -------------------------- */ case 0x81AA /* GL_CULL_VERTEX_EXT */: return "GL_CULL_VERTEX_EXT (0x81AA)"; case 0x81AB /* GL_CULL_VERTEX_EYE_POSITION_EXT */: return "GL_CULL_VERTEX_EYE_POSITION_EXT (0x81AB)"; case 0x81AC /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */: return "GL_CULL_VERTEX_OBJECT_POSITION_EXT (0x81AC)"; /* -------------------------- GL_EXT_debug_marker -------------------------- */ /* ------------------------ GL_EXT_depth_bounds_test ----------------------- */ case 0x8890 /* GL_DEPTH_BOUNDS_TEST_EXT */: return "GL_DEPTH_BOUNDS_TEST_EXT (0x8890)"; case 0x8891 /* GL_DEPTH_BOUNDS_EXT */: return "GL_DEPTH_BOUNDS_EXT (0x8891)";/* ----------------------- GL_EXT_direct_state_access ---------------------- */ case 0x8E2D /* GL_PROGRAM_MATRIX_EXT */: return "GL_PROGRAM_MATRIX_EXT (0x8E2D)"; case 0x8E2E /* GL_TRANSPOSE_PROGRAM_MATRIX_EXT */: return "GL_TRANSPOSE_PROGRAM_MATRIX_EXT (0x8E2E)"; case 0x8E2F /* GL_PROGRAM_MATRIX_STACK_DEPTH_EXT */: return "GL_PROGRAM_MATRIX_STACK_DEPTH_EXT (0x8E2F)"; /* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ /* ------------------------- GL_EXT_draw_instanced ------------------------- */ /* ----------------------- GL_EXT_draw_range_elements ---------------------- */ //case 0x80E8 /* GL_MAX_ELEMENTS_VERTICES_EXT */: return "GL_MAX_ELEMENTS_VERTICES_EXT (0x80E8)"; //case 0x80E9 /* GL_MAX_ELEMENTS_INDICES_EXT */: return "GL_MAX_ELEMENTS_INDICES_EXT (0x80E9)";/* ---------------------------- GL_EXT_fog_coord --------------------------- */ //case 0x8450 /* GL_FOG_COORDINATE_SOURCE_EXT */: return "GL_FOG_COORDINATE_SOURCE_EXT (0x8450)"; //case 0x8451 /* GL_FOG_COORDINATE_EXT */: return "GL_FOG_COORDINATE_EXT (0x8451)"; //case 0x8452 /* GL_FRAGMENT_DEPTH_EXT */: return "GL_FRAGMENT_DEPTH_EXT (0x8452)"; //case 0x8453 /* GL_CURRENT_FOG_COORDINATE_EXT */: return "GL_CURRENT_FOG_COORDINATE_EXT (0x8453)"; //case 0x8454 /* GL_FOG_COORDINATE_ARRAY_TYPE_EXT */: return "GL_FOG_COORDINATE_ARRAY_TYPE_EXT (0x8454)"; //case 0x8455 /* GL_FOG_COORDINATE_ARRAY_STRIDE_EXT */: return "GL_FOG_COORDINATE_ARRAY_STRIDE_EXT (0x8455)"; //case 0x8456 /* GL_FOG_COORDINATE_ARRAY_POINTER_EXT */: return "GL_FOG_COORDINATE_ARRAY_POINTER_EXT (0x8456)"; //case 0x8457 /* GL_FOG_COORDINATE_ARRAY_EXT */: return "GL_FOG_COORDINATE_ARRAY_EXT (0x8457)"; /* ------------------------ GL_EXT_fragment_lighting ----------------------- */ case 0x8400 /* GL_FRAGMENT_LIGHTING_EXT */: return "GL_FRAGMENT_LIGHTING_EXT (0x8400)"; case 0x8401 /* GL_FRAGMENT_COLOR_MATERIAL_EXT */: return "GL_FRAGMENT_COLOR_MATERIAL_EXT (0x8401)"; case 0x8402 /* GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT */: return "GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT (0x8402)"; case 0x8403 /* GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT */: return "GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT (0x8403)"; case 0x8404 /* GL_MAX_FRAGMENT_LIGHTS_EXT */: return "GL_MAX_FRAGMENT_LIGHTS_EXT (0x8404)"; case 0x8405 /* GL_MAX_ACTIVE_LIGHTS_EXT */: return "GL_MAX_ACTIVE_LIGHTS_EXT (0x8405)"; case 0x8406 /* GL_CURRENT_RASTER_NORMAL_EXT */: return "GL_CURRENT_RASTER_NORMAL_EXT (0x8406)"; case 0x8407 /* GL_LIGHT_ENV_MODE_EXT */: return "GL_LIGHT_ENV_MODE_EXT (0x8407)"; case 0x8408 /* GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT */: return "GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT (0x8408)"; case 0x8409 /* GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT */: return "GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT (0x8409)"; case 0x840A /* GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT */: return "GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT (0x840A)"; case 0x840B /* GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT */: return "GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT (0x840B)"; case 0x840C /* GL_FRAGMENT_LIGHT0_EXT */: return "GL_FRAGMENT_LIGHT0_EXT (0x840C)"; case 0x8413 /* GL_FRAGMENT_LIGHT7_EXT */: return "GL_FRAGMENT_LIGHT7_EXT (0x8413)"; /* ------------------------ GL_EXT_framebuffer_blit ------------------------ */ //case 0x8CA6 /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */: return "GL_DRAW_FRAMEBUFFER_BINDING_EXT (0x8CA6)"; //case 0x8CA8 /* GL_READ_FRAMEBUFFER_EXT */: return "GL_READ_FRAMEBUFFER_EXT (0x8CA8)"; //case 0x8CA9 /* GL_DRAW_FRAMEBUFFER_EXT */: return "GL_DRAW_FRAMEBUFFER_EXT (0x8CA9)"; //case 0x8CAA /* GL_READ_FRAMEBUFFER_BINDING_EXT */: return "GL_READ_FRAMEBUFFER_BINDING_EXT (0x8CAA)";/* --------------------- GL_EXT_framebuffer_multisample -------------------- */ //case 0x8CAB /* GL_RENDERBUFFER_SAMPLES_EXT */: return "GL_RENDERBUFFER_SAMPLES_EXT (0x8CAB)"; //case 0x8D56 /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT (0x8D56)"; //case 0x8D57 /* GL_MAX_SAMPLES_EXT */: return "GL_MAX_SAMPLES_EXT (0x8D57)";/* --------------- GL_EXT_framebuffer_multisample_blit_scaled -------------- */ case 0x90BA /* GL_SCALED_RESOLVE_FASTEST_EXT */: return "GL_SCALED_RESOLVE_FASTEST_EXT (0x90BA)"; case 0x90BB /* GL_SCALED_RESOLVE_NICEST_EXT */: return "GL_SCALED_RESOLVE_NICEST_EXT (0x90BB)"; /* ----------------------- GL_EXT_framebuffer_object ----------------------- */ //case 0x0506 /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */: return "GL_INVALID_FRAMEBUFFER_OPERATION_EXT (0x0506)"; //case 0x84E8 /* GL_MAX_RENDERBUFFER_SIZE_EXT */: return "GL_MAX_RENDERBUFFER_SIZE_EXT (0x84E8)"; //case 0x8CA6 /* GL_FRAMEBUFFER_BINDING_EXT */: return "GL_FRAMEBUFFER_BINDING_EXT (0x8CA6)"; //case 0x8CA7 /* GL_RENDERBUFFER_BINDING_EXT */: return "GL_RENDERBUFFER_BINDING_EXT (0x8CA7)"; //case 0x8CD0 /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT (0x8CD0)"; //case 0x8CD1 /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT (0x8CD1)"; //case 0x8CD2 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT (0x8CD2)"; //case 0x8CD3 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT (0x8CD3)"; //case 0x8CD4 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT (0x8CD4)"; //case 0x8CD5 /* GL_FRAMEBUFFER_COMPLETE_EXT */: return "GL_FRAMEBUFFER_COMPLETE_EXT (0x8CD5)"; //case 0x8CD6 /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT (0x8CD6)"; //case 0x8CD7 /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT (0x8CD7)"; case 0x8CD9 /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT (0x8CD9)"; case 0x8CDA /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT (0x8CDA)"; //case 0x8CDB /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT (0x8CDB)"; //case 0x8CDC /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT (0x8CDC)"; //case 0x8CDD /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */: return "GL_FRAMEBUFFER_UNSUPPORTED_EXT (0x8CDD)"; //case 0x8CDF /* GL_MAX_COLOR_ATTACHMENTS_EXT */: return "GL_MAX_COLOR_ATTACHMENTS_EXT (0x8CDF)"; //case 0x8CE0 /* GL_COLOR_ATTACHMENT0_EXT */: return "GL_COLOR_ATTACHMENT0_EXT (0x8CE0)"; //case 0x8CE1 /* GL_COLOR_ATTACHMENT1_EXT */: return "GL_COLOR_ATTACHMENT1_EXT (0x8CE1)"; //case 0x8CE2 /* GL_COLOR_ATTACHMENT2_EXT */: return "GL_COLOR_ATTACHMENT2_EXT (0x8CE2)"; //case 0x8CE3 /* GL_COLOR_ATTACHMENT3_EXT */: return "GL_COLOR_ATTACHMENT3_EXT (0x8CE3)"; //case 0x8CE4 /* GL_COLOR_ATTACHMENT4_EXT */: return "GL_COLOR_ATTACHMENT4_EXT (0x8CE4)"; //case 0x8CE5 /* GL_COLOR_ATTACHMENT5_EXT */: return "GL_COLOR_ATTACHMENT5_EXT (0x8CE5)"; //case 0x8CE6 /* GL_COLOR_ATTACHMENT6_EXT */: return "GL_COLOR_ATTACHMENT6_EXT (0x8CE6)"; //case 0x8CE7 /* GL_COLOR_ATTACHMENT7_EXT */: return "GL_COLOR_ATTACHMENT7_EXT (0x8CE7)"; //case 0x8CE8 /* GL_COLOR_ATTACHMENT8_EXT */: return "GL_COLOR_ATTACHMENT8_EXT (0x8CE8)"; //case 0x8CE9 /* GL_COLOR_ATTACHMENT9_EXT */: return "GL_COLOR_ATTACHMENT9_EXT (0x8CE9)"; //case 0x8CEA /* GL_COLOR_ATTACHMENT10_EXT */: return "GL_COLOR_ATTACHMENT10_EXT (0x8CEA)"; //case 0x8CEB /* GL_COLOR_ATTACHMENT11_EXT */: return "GL_COLOR_ATTACHMENT11_EXT (0x8CEB)"; //case 0x8CEC /* GL_COLOR_ATTACHMENT12_EXT */: return "GL_COLOR_ATTACHMENT12_EXT (0x8CEC)"; //case 0x8CED /* GL_COLOR_ATTACHMENT13_EXT */: return "GL_COLOR_ATTACHMENT13_EXT (0x8CED)"; //case 0x8CEE /* GL_COLOR_ATTACHMENT14_EXT */: return "GL_COLOR_ATTACHMENT14_EXT (0x8CEE)"; //case 0x8CEF /* GL_COLOR_ATTACHMENT15_EXT */: return "GL_COLOR_ATTACHMENT15_EXT (0x8CEF)"; //case 0x8D00 /* GL_DEPTH_ATTACHMENT_EXT */: return "GL_DEPTH_ATTACHMENT_EXT (0x8D00)"; //case 0x8D20 /* GL_STENCIL_ATTACHMENT_EXT */: return "GL_STENCIL_ATTACHMENT_EXT (0x8D20)"; //case 0x8D40 /* GL_FRAMEBUFFER_EXT */: return "GL_FRAMEBUFFER_EXT (0x8D40)"; //case 0x8D41 /* GL_RENDERBUFFER_EXT */: return "GL_RENDERBUFFER_EXT (0x8D41)"; //case 0x8D42 /* GL_RENDERBUFFER_WIDTH_EXT */: return "GL_RENDERBUFFER_WIDTH_EXT (0x8D42)"; //case 0x8D43 /* GL_RENDERBUFFER_HEIGHT_EXT */: return "GL_RENDERBUFFER_HEIGHT_EXT (0x8D43)"; //case 0x8D44 /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */: return "GL_RENDERBUFFER_INTERNAL_FORMAT_EXT (0x8D44)"; //case 0x8D46 /* GL_STENCIL_INDEX1_EXT */: return "GL_STENCIL_INDEX1_EXT (0x8D46)"; //case 0x8D47 /* GL_STENCIL_INDEX4_EXT */: return "GL_STENCIL_INDEX4_EXT (0x8D47)"; //case 0x8D48 /* GL_STENCIL_INDEX8_EXT */: return "GL_STENCIL_INDEX8_EXT (0x8D48)"; //case 0x8D49 /* GL_STENCIL_INDEX16_EXT */: return "GL_STENCIL_INDEX16_EXT (0x8D49)"; //case 0x8D50 /* GL_RENDERBUFFER_RED_SIZE_EXT */: return "GL_RENDERBUFFER_RED_SIZE_EXT (0x8D50)"; //case 0x8D51 /* GL_RENDERBUFFER_GREEN_SIZE_EXT */: return "GL_RENDERBUFFER_GREEN_SIZE_EXT (0x8D51)"; //case 0x8D52 /* GL_RENDERBUFFER_BLUE_SIZE_EXT */: return "GL_RENDERBUFFER_BLUE_SIZE_EXT (0x8D52)"; //case 0x8D53 /* GL_RENDERBUFFER_ALPHA_SIZE_EXT */: return "GL_RENDERBUFFER_ALPHA_SIZE_EXT (0x8D53)"; //case 0x8D54 /* GL_RENDERBUFFER_DEPTH_SIZE_EXT */: return "GL_RENDERBUFFER_DEPTH_SIZE_EXT (0x8D54)"; //case 0x8D55 /* GL_RENDERBUFFER_STENCIL_SIZE_EXT */: return "GL_RENDERBUFFER_STENCIL_SIZE_EXT (0x8D55)"; /* ------------------------ GL_EXT_framebuffer_sRGB ------------------------ */ //case 0x8DB9 /* GL_FRAMEBUFFER_SRGB_EXT */: return "GL_FRAMEBUFFER_SRGB_EXT (0x8DB9)"; case 0x8DBA /* GL_FRAMEBUFFER_SRGB_CAPABLE_EXT */: return "GL_FRAMEBUFFER_SRGB_CAPABLE_EXT (0x8DBA)"; /* ------------------------ GL_EXT_geometry_shader4 ------------------------ */ //case 0xA /* GL_LINES_ADJACENCY_EXT */: return "GL_LINES_ADJACENCY_EXT (0xA)"; //case 0xB /* GL_LINE_STRIP_ADJACENCY_EXT */: return "GL_LINE_STRIP_ADJACENCY_EXT (0xB)"; //case 0xC /* GL_TRIANGLES_ADJACENCY_EXT */: return "GL_TRIANGLES_ADJACENCY_EXT (0xC)"; //case 0xD /* GL_TRIANGLE_STRIP_ADJACENCY_EXT */: return "GL_TRIANGLE_STRIP_ADJACENCY_EXT (0xD)"; //case 0x8642 /* GL_PROGRAM_POINT_SIZE_EXT */: return "GL_PROGRAM_POINT_SIZE_EXT (0x8642)"; //case 0x8B4B /* GL_MAX_VARYING_COMPONENTS_EXT */: return "GL_MAX_VARYING_COMPONENTS_EXT (0x8B4B)"; //case 0x8C29 /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */: return "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT (0x8C29)"; //case 0x8CD4 /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT (0x8CD4)"; //case 0x8DA7 /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */: return "GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT (0x8DA7)"; //case 0x8DA8 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT (0x8DA8)"; //case 0x8DA9 /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT (0x8DA9)"; //case 0x8DD9 /* GL_GEOMETRY_SHADER_EXT */: return "GL_GEOMETRY_SHADER_EXT (0x8DD9)"; //case 0x8DDA /* GL_GEOMETRY_VERTICES_OUT_EXT */: return "GL_GEOMETRY_VERTICES_OUT_EXT (0x8DDA)"; //case 0x8DDB /* GL_GEOMETRY_INPUT_TYPE_EXT */: return "GL_GEOMETRY_INPUT_TYPE_EXT (0x8DDB)"; //case 0x8DDC /* GL_GEOMETRY_OUTPUT_TYPE_EXT */: return "GL_GEOMETRY_OUTPUT_TYPE_EXT (0x8DDC)"; //case 0x8DDD /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT */: return "GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT (0x8DDD)"; //case 0x8DDE /* GL_MAX_VERTEX_VARYING_COMPONENTS_EXT */: return "GL_MAX_VERTEX_VARYING_COMPONENTS_EXT (0x8DDE)"; //case 0x8DDF /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT */: return "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT (0x8DDF)"; //case 0x8DE0 /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT */: return "GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT (0x8DE0)"; //case 0x8DE1 /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT */: return "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT (0x8DE1)"; /* --------------------- GL_EXT_gpu_program_parameters --------------------- */ /* --------------------------- GL_EXT_gpu_shader4 -------------------------- */ //case 0x88FD /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT */: return "GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT (0x88FD)"; //case 0x8DC0 /* GL_SAMPLER_1D_ARRAY_EXT */: return "GL_SAMPLER_1D_ARRAY_EXT (0x8DC0)"; //case 0x8DC1 /* GL_SAMPLER_2D_ARRAY_EXT */: return "GL_SAMPLER_2D_ARRAY_EXT (0x8DC1)"; //case 0x8DC2 /* GL_SAMPLER_BUFFER_EXT */: return "GL_SAMPLER_BUFFER_EXT (0x8DC2)"; //case 0x8DC3 /* GL_SAMPLER_1D_ARRAY_SHADOW_EXT */: return "GL_SAMPLER_1D_ARRAY_SHADOW_EXT (0x8DC3)"; //case 0x8DC4 /* GL_SAMPLER_2D_ARRAY_SHADOW_EXT */: return "GL_SAMPLER_2D_ARRAY_SHADOW_EXT (0x8DC4)"; //case 0x8DC5 /* GL_SAMPLER_CUBE_SHADOW_EXT */: return "GL_SAMPLER_CUBE_SHADOW_EXT (0x8DC5)"; //case 0x8DC6 /* GL_UNSIGNED_INT_VEC2_EXT */: return "GL_UNSIGNED_INT_VEC2_EXT (0x8DC6)"; //case 0x8DC7 /* GL_UNSIGNED_INT_VEC3_EXT */: return "GL_UNSIGNED_INT_VEC3_EXT (0x8DC7)"; //case 0x8DC8 /* GL_UNSIGNED_INT_VEC4_EXT */: return "GL_UNSIGNED_INT_VEC4_EXT (0x8DC8)"; //case 0x8DC9 /* GL_INT_SAMPLER_1D_EXT */: return "GL_INT_SAMPLER_1D_EXT (0x8DC9)"; //case 0x8DCA /* GL_INT_SAMPLER_2D_EXT */: return "GL_INT_SAMPLER_2D_EXT (0x8DCA)"; //case 0x8DCB /* GL_INT_SAMPLER_3D_EXT */: return "GL_INT_SAMPLER_3D_EXT (0x8DCB)"; //case 0x8DCC /* GL_INT_SAMPLER_CUBE_EXT */: return "GL_INT_SAMPLER_CUBE_EXT (0x8DCC)"; //case 0x8DCD /* GL_INT_SAMPLER_2D_RECT_EXT */: return "GL_INT_SAMPLER_2D_RECT_EXT (0x8DCD)"; //case 0x8DCE /* GL_INT_SAMPLER_1D_ARRAY_EXT */: return "GL_INT_SAMPLER_1D_ARRAY_EXT (0x8DCE)"; //case 0x8DCF /* GL_INT_SAMPLER_2D_ARRAY_EXT */: return "GL_INT_SAMPLER_2D_ARRAY_EXT (0x8DCF)"; //case 0x8DD0 /* GL_INT_SAMPLER_BUFFER_EXT */: return "GL_INT_SAMPLER_BUFFER_EXT (0x8DD0)"; //case 0x8DD1 /* GL_UNSIGNED_INT_SAMPLER_1D_EXT */: return "GL_UNSIGNED_INT_SAMPLER_1D_EXT (0x8DD1)"; //case 0x8DD2 /* GL_UNSIGNED_INT_SAMPLER_2D_EXT */: return "GL_UNSIGNED_INT_SAMPLER_2D_EXT (0x8DD2)"; //case 0x8DD3 /* GL_UNSIGNED_INT_SAMPLER_3D_EXT */: return "GL_UNSIGNED_INT_SAMPLER_3D_EXT (0x8DD3)"; //case 0x8DD4 /* GL_UNSIGNED_INT_SAMPLER_CUBE_EXT */: return "GL_UNSIGNED_INT_SAMPLER_CUBE_EXT (0x8DD4)"; //case 0x8DD5 /* GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT */: return "GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT (0x8DD5)"; //case 0x8DD6 /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT */: return "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT (0x8DD6)"; //case 0x8DD7 /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT */: return "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT (0x8DD7)"; //case 0x8DD8 /* GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT */: return "GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT (0x8DD8)"; /* ---------------------------- GL_EXT_histogram --------------------------- */ //case 0x8024 /* GL_HISTOGRAM_EXT */: return "GL_HISTOGRAM_EXT (0x8024)"; //case 0x8025 /* GL_PROXY_HISTOGRAM_EXT */: return "GL_PROXY_HISTOGRAM_EXT (0x8025)"; //case 0x8026 /* GL_HISTOGRAM_WIDTH_EXT */: return "GL_HISTOGRAM_WIDTH_EXT (0x8026)"; //case 0x8027 /* GL_HISTOGRAM_FORMAT_EXT */: return "GL_HISTOGRAM_FORMAT_EXT (0x8027)"; //case 0x8028 /* GL_HISTOGRAM_RED_SIZE_EXT */: return "GL_HISTOGRAM_RED_SIZE_EXT (0x8028)"; //case 0x8029 /* GL_HISTOGRAM_GREEN_SIZE_EXT */: return "GL_HISTOGRAM_GREEN_SIZE_EXT (0x8029)"; //case 0x802A /* GL_HISTOGRAM_BLUE_SIZE_EXT */: return "GL_HISTOGRAM_BLUE_SIZE_EXT (0x802A)"; //case 0x802B /* GL_HISTOGRAM_ALPHA_SIZE_EXT */: return "GL_HISTOGRAM_ALPHA_SIZE_EXT (0x802B)"; //case 0x802C /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */: return "GL_HISTOGRAM_LUMINANCE_SIZE_EXT (0x802C)"; //case 0x802D /* GL_HISTOGRAM_SINK_EXT */: return "GL_HISTOGRAM_SINK_EXT (0x802D)"; //case 0x802E /* GL_MINMAX_EXT */: return "GL_MINMAX_EXT (0x802E)"; //case 0x802F /* GL_MINMAX_FORMAT_EXT */: return "GL_MINMAX_FORMAT_EXT (0x802F)"; //case 0x8030 /* GL_MINMAX_SINK_EXT */: return "GL_MINMAX_SINK_EXT (0x8030)"; /* ----------------------- GL_EXT_index_array_formats ---------------------- */ /* --------------------------- GL_EXT_index_func --------------------------- */ /* ------------------------- GL_EXT_index_material ------------------------- */ /* -------------------------- GL_EXT_index_texture ------------------------- */ /* -------------------------- GL_EXT_light_texture ------------------------- */ case 0x8349 /* GL_FRAGMENT_MATERIAL_EXT */: return "GL_FRAGMENT_MATERIAL_EXT (0x8349)"; case 0x834A /* GL_FRAGMENT_NORMAL_EXT */: return "GL_FRAGMENT_NORMAL_EXT (0x834A)"; case 0x834C /* GL_FRAGMENT_COLOR_EXT */: return "GL_FRAGMENT_COLOR_EXT (0x834C)"; case 0x834D /* GL_ATTENUATION_EXT */: return "GL_ATTENUATION_EXT (0x834D)"; case 0x834E /* GL_SHADOW_ATTENUATION_EXT */: return "GL_SHADOW_ATTENUATION_EXT (0x834E)"; case 0x834F /* GL_TEXTURE_APPLICATION_MODE_EXT */: return "GL_TEXTURE_APPLICATION_MODE_EXT (0x834F)"; case 0x8350 /* GL_TEXTURE_LIGHT_EXT */: return "GL_TEXTURE_LIGHT_EXT (0x8350)"; case 0x8351 /* GL_TEXTURE_MATERIAL_FACE_EXT */: return "GL_TEXTURE_MATERIAL_FACE_EXT (0x8351)"; case 0x8352 /* GL_TEXTURE_MATERIAL_PARAMETER_EXT */: return "GL_TEXTURE_MATERIAL_PARAMETER_EXT (0x8352)"; /* ------------------------- GL_EXT_misc_attribute ------------------------- */ /* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */ /* --------------------------- GL_EXT_multisample -------------------------- */ //case 0x809D /* GL_MULTISAMPLE_EXT */: return "GL_MULTISAMPLE_EXT (0x809D)"; //case 0x809E /* GL_SAMPLE_ALPHA_TO_MASK_EXT */: return "GL_SAMPLE_ALPHA_TO_MASK_EXT (0x809E)"; //case 0x809F /* GL_SAMPLE_ALPHA_TO_ONE_EXT */: return "GL_SAMPLE_ALPHA_TO_ONE_EXT (0x809F)"; //case 0x80A0 /* GL_SAMPLE_MASK_EXT */: return "GL_SAMPLE_MASK_EXT (0x80A0)"; case 0x80A1 /* GL_1PASS_EXT */: return "GL_1PASS_EXT (0x80A1)"; case 0x80A2 /* GL_2PASS_0_EXT */: return "GL_2PASS_0_EXT (0x80A2)"; case 0x80A3 /* GL_2PASS_1_EXT */: return "GL_2PASS_1_EXT (0x80A3)"; case 0x80A4 /* GL_4PASS_0_EXT */: return "GL_4PASS_0_EXT (0x80A4)"; case 0x80A5 /* GL_4PASS_1_EXT */: return "GL_4PASS_1_EXT (0x80A5)"; case 0x80A6 /* GL_4PASS_2_EXT */: return "GL_4PASS_2_EXT (0x80A6)"; case 0x80A7 /* GL_4PASS_3_EXT */: return "GL_4PASS_3_EXT (0x80A7)"; //case 0x80A8 /* GL_SAMPLE_BUFFERS_EXT */: return "GL_SAMPLE_BUFFERS_EXT (0x80A8)"; //case 0x80A9 /* GL_SAMPLES_EXT */: return "GL_SAMPLES_EXT (0x80A9)"; //case 0x80AA /* GL_SAMPLE_MASK_VALUE_EXT */: return "GL_SAMPLE_MASK_VALUE_EXT (0x80AA)"; //case 0x80AB /* GL_SAMPLE_MASK_INVERT_EXT */: return "GL_SAMPLE_MASK_INVERT_EXT (0x80AB)"; case 0x80AC /* GL_SAMPLE_PATTERN_EXT */: return "GL_SAMPLE_PATTERN_EXT (0x80AC)"; //case 0x20000000 /* GL_MULTISAMPLE_BIT_EXT */: return "GL_MULTISAMPLE_BIT_EXT (0x20000000)"; /* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */ //case 0x84F9 /* GL_DEPTH_STENCIL_EXT */: return "GL_DEPTH_STENCIL_EXT (0x84F9)"; //case 0x84FA /* GL_UNSIGNED_INT_24_8_EXT */: return "GL_UNSIGNED_INT_24_8_EXT (0x84FA)"; //case 0x88F0 /* GL_DEPTH24_STENCIL8_EXT */: return "GL_DEPTH24_STENCIL8_EXT (0x88F0)"; //case 0x88F1 /* GL_TEXTURE_STENCIL_SIZE_EXT */: return "GL_TEXTURE_STENCIL_SIZE_EXT (0x88F1)"; /* -------------------------- GL_EXT_packed_float -------------------------- */ //case 0x8C3A /* GL_R11F_G11F_B10F_EXT */: return "GL_R11F_G11F_B10F_EXT (0x8C3A)"; //case 0x8C3B /* GL_UNSIGNED_INT_10F_11F_11F_REV_EXT */: return "GL_UNSIGNED_INT_10F_11F_11F_REV_EXT (0x8C3B)"; case 0x8C3C /* GL_RGBA_SIGNED_COMPONENTS_EXT */: return "GL_RGBA_SIGNED_COMPONENTS_EXT (0x8C3C)"; /* -------------------------- GL_EXT_packed_pixels ------------------------- */ ///case 0x8032 /* GL_UNSIGNED_BYTE_3_3_2_EXT */: return "GL_UNSIGNED_BYTE_3_3_2_EXT (0x8032)"; //case 0x8033 /* GL_UNSIGNED_SHORT_4_4_4_4_EXT */: return "GL_UNSIGNED_SHORT_4_4_4_4_EXT (0x8033)"; //case 0x8034 /* GL_UNSIGNED_SHORT_5_5_5_1_EXT */: return "GL_UNSIGNED_SHORT_5_5_5_1_EXT (0x8034)"; //case 0x8035 /* GL_UNSIGNED_INT_8_8_8_8_EXT */: return "GL_UNSIGNED_INT_8_8_8_8_EXT (0x8035)"; //case 0x8036 /* GL_UNSIGNED_INT_10_10_10_2_EXT */: return "GL_UNSIGNED_INT_10_10_10_2_EXT (0x8036)"; /* ------------------------ GL_EXT_paletted_texture ------------------------ */ //case 0x0DE0 /* GL_TEXTURE_1D */: return "GL_TEXTURE_1D (0x0DE0)"; //case 0x0DE1 /* GL_TEXTURE_2D */: return "GL_TEXTURE_2D (0x0DE1)"; //case 0x8063 /* GL_PROXY_TEXTURE_1D */: return "GL_PROXY_TEXTURE_1D (0x8063)"; //case 0x8064 /* GL_PROXY_TEXTURE_2D */: return "GL_PROXY_TEXTURE_2D (0x8064)"; //case 0x80D8 /* GL_COLOR_TABLE_FORMAT_EXT */: return "GL_COLOR_TABLE_FORMAT_EXT (0x80D8)"; //case 0x80D9 /* GL_COLOR_TABLE_WIDTH_EXT */: return "GL_COLOR_TABLE_WIDTH_EXT (0x80D9)"; //case 0x80DA /* GL_COLOR_TABLE_RED_SIZE_EXT */: return "GL_COLOR_TABLE_RED_SIZE_EXT (0x80DA)"; //case 0x80DB /* GL_COLOR_TABLE_GREEN_SIZE_EXT */: return "GL_COLOR_TABLE_GREEN_SIZE_EXT (0x80DB)"; //case 0x80DC /* GL_COLOR_TABLE_BLUE_SIZE_EXT */: return "GL_COLOR_TABLE_BLUE_SIZE_EXT (0x80DC)"; //case 0x80DD /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */: return "GL_COLOR_TABLE_ALPHA_SIZE_EXT (0x80DD)"; //case 0x80DE /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */: return "GL_COLOR_TABLE_LUMINANCE_SIZE_EXT (0x80DE)"; //case 0x80DF /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */: return "GL_COLOR_TABLE_INTENSITY_SIZE_EXT (0x80DF)"; //case 0x80E2 /* GL_COLOR_INDEX1_EXT */: return "GL_COLOR_INDEX1_EXT (0x80E2)"; //case 0x80E3 /* GL_COLOR_INDEX2_EXT */: return "GL_COLOR_INDEX2_EXT (0x80E3)"; //case 0x80E4 /* GL_COLOR_INDEX4_EXT */: return "GL_COLOR_INDEX4_EXT (0x80E4)"; //case 0x80E5 /* GL_COLOR_INDEX8_EXT */: return "GL_COLOR_INDEX8_EXT (0x80E5)"; //case 0x80E6 /* GL_COLOR_INDEX12_EXT */: return "GL_COLOR_INDEX12_EXT (0x80E6)"; //case 0x80E7 /* GL_COLOR_INDEX16_EXT */: return "GL_COLOR_INDEX16_EXT (0x80E7)"; case 0x80ED /* GL_TEXTURE_INDEX_SIZE_EXT */: return "GL_TEXTURE_INDEX_SIZE_EXT (0x80ED)"; //case 0x8513 /* GL_TEXTURE_CUBE_MAP_ARB */: return "GL_TEXTURE_CUBE_MAP_ARB (0x8513)"; //case 0x851B /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */: return "GL_PROXY_TEXTURE_CUBE_MAP_ARB (0x851B)"; /* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */ //case 0x88EB /* GL_PIXEL_PACK_BUFFER_EXT */: return "GL_PIXEL_PACK_BUFFER_EXT (0x88EB)"; //case 0x88EC /* GL_PIXEL_UNPACK_BUFFER_EXT */: return "GL_PIXEL_UNPACK_BUFFER_EXT (0x88EC)"; //case 0x88ED /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */: return "GL_PIXEL_PACK_BUFFER_BINDING_EXT (0x88ED)"; //case 0x88EF /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */: return "GL_PIXEL_UNPACK_BUFFER_BINDING_EXT (0x88EF)"; /* ------------------------- GL_EXT_pixel_transform ------------------------ */ case 0x8330 /* GL_PIXEL_TRANSFORM_2D_EXT */: return "GL_PIXEL_TRANSFORM_2D_EXT (0x8330)"; case 0x8331 /* GL_PIXEL_MAG_FILTER_EXT */: return "GL_PIXEL_MAG_FILTER_EXT (0x8331)"; case 0x8332 /* GL_PIXEL_MIN_FILTER_EXT */: return "GL_PIXEL_MIN_FILTER_EXT (0x8332)"; case 0x8333 /* GL_PIXEL_CUBIC_WEIGHT_EXT */: return "GL_PIXEL_CUBIC_WEIGHT_EXT (0x8333)"; case 0x8334 /* GL_CUBIC_EXT */: return "GL_CUBIC_EXT (0x8334)"; case 0x8335 /* GL_AVERAGE_EXT */: return "GL_AVERAGE_EXT (0x8335)"; case 0x8336 /* GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT */: return "GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT (0x8336)"; case 0x8337 /* GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT */: return "GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT (0x8337)"; case 0x8338 /* GL_PIXEL_TRANSFORM_2D_MATRIX_EXT */: return "GL_PIXEL_TRANSFORM_2D_MATRIX_EXT (0x8338)";/* ------------------- GL_EXT_pixel_transform_color_table ------------------ */ /* ------------------------ GL_EXT_point_parameters ------------------------ */ //case 0x8126 /* GL_POINT_SIZE_MIN_EXT */: return "GL_POINT_SIZE_MIN_EXT (0x8126)"; //case 0x8127 /* GL_POINT_SIZE_MAX_EXT */: return "GL_POINT_SIZE_MAX_EXT (0x8127)"; //case 0x8128 /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */: return "GL_POINT_FADE_THRESHOLD_SIZE_EXT (0x8128)"; //case 0x8129 /* GL_DISTANCE_ATTENUATION_EXT */: return "GL_DISTANCE_ATTENUATION_EXT (0x8129)"; /* ------------------------- GL_EXT_polygon_offset ------------------------- */ //case 0x8037 /* GL_POLYGON_OFFSET_EXT */: return "GL_POLYGON_OFFSET_EXT (0x8037)"; //case 0x8038 /* GL_POLYGON_OFFSET_FACTOR_EXT */: return "GL_POLYGON_OFFSET_FACTOR_EXT (0x8038)"; case 0x8039 /* GL_POLYGON_OFFSET_BIAS_EXT */: return "GL_POLYGON_OFFSET_BIAS_EXT (0x8039)";/* ------------------------ GL_EXT_provoking_vertex ------------------------ */ //case 0x8E4C /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */: return "GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT (0x8E4C)"; //case 0x8E4D /* GL_FIRST_VERTEX_CONVENTION_EXT */: return "GL_FIRST_VERTEX_CONVENTION_EXT (0x8E4D)"; //case 0x8E4E /* GL_LAST_VERTEX_CONVENTION_EXT */: return "GL_LAST_VERTEX_CONVENTION_EXT (0x8E4E)"; //case 0x8E4F /* GL_PROVOKING_VERTEX_EXT */: return "GL_PROVOKING_VERTEX_EXT (0x8E4F)";/* ------------------------- GL_EXT_rescale_normal ------------------------- */ //case 0x803A /* GL_RESCALE_NORMAL_EXT */: return "GL_RESCALE_NORMAL_EXT (0x803A)"; /* -------------------------- GL_EXT_scene_marker -------------------------- */ /* ------------------------- GL_EXT_secondary_color ------------------------ */ //case 0x8458 /* GL_COLOR_SUM_EXT */: return "GL_COLOR_SUM_EXT (0x8458)"; //case 0x8459 /* GL_CURRENT_SECONDARY_COLOR_EXT */: return "GL_CURRENT_SECONDARY_COLOR_EXT (0x8459)"; //case 0x845A /* GL_SECONDARY_COLOR_ARRAY_SIZE_EXT */: return "GL_SECONDARY_COLOR_ARRAY_SIZE_EXT (0x845A)"; //case 0x845B /* GL_SECONDARY_COLOR_ARRAY_TYPE_EXT */: return "GL_SECONDARY_COLOR_ARRAY_TYPE_EXT (0x845B)"; //case 0x845C /* GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT */: return "GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT (0x845C)"; //case 0x845D /* GL_SECONDARY_COLOR_ARRAY_POINTER_EXT */: return "GL_SECONDARY_COLOR_ARRAY_POINTER_EXT (0x845D)"; //case 0x845E /* GL_SECONDARY_COLOR_ARRAY_EXT */: return "GL_SECONDARY_COLOR_ARRAY_EXT (0x845E)"; /* --------------------- GL_EXT_separate_shader_objects -------------------- */ //case 0x8B8D /* GL_ACTIVE_PROGRAM_EXT */: return "GL_ACTIVE_PROGRAM_EXT (0x8B8D)"; /* --------------------- GL_EXT_separate_specular_color -------------------- */ //case 0x81F8 /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */: return "GL_LIGHT_MODEL_COLOR_CONTROL_EXT (0x81F8)"; //case 0x81F9 /* GL_SINGLE_COLOR_EXT */: return "GL_SINGLE_COLOR_EXT (0x81F9)"; //case 0x81FA /* GL_SEPARATE_SPECULAR_COLOR_EXT */: return "GL_SEPARATE_SPECULAR_COLOR_EXT (0x81FA)"; /* --------------------- GL_EXT_shader_image_load_store -------------------- */ //case 0x00000001 /* GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT */: return "GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT (0x00000001)"; //case 0x00000002 /* GL_ELEMENT_ARRAY_BARRIER_BIT_EXT */: return "GL_ELEMENT_ARRAY_BARRIER_BIT_EXT (0x00000002)"; //case 0x00000004 /* GL_UNIFORM_BARRIER_BIT_EXT */: return "GL_UNIFORM_BARRIER_BIT_EXT (0x00000004)"; //case 0x00000008 /* GL_TEXTURE_FETCH_BARRIER_BIT_EXT */: return "GL_TEXTURE_FETCH_BARRIER_BIT_EXT (0x00000008)"; //case 0x00000020 /* GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT */: return "GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT (0x00000020)"; //case 0x00000040 /* GL_COMMAND_BARRIER_BIT_EXT */: return "GL_COMMAND_BARRIER_BIT_EXT (0x00000040)"; //case 0x00000080 /* GL_PIXEL_BUFFER_BARRIER_BIT_EXT */: return "GL_PIXEL_BUFFER_BARRIER_BIT_EXT (0x00000080)"; //case 0x00000100 /* GL_TEXTURE_UPDATE_BARRIER_BIT_EXT */: return "GL_TEXTURE_UPDATE_BARRIER_BIT_EXT (0x00000100)"; //case 0x00000200 /* GL_BUFFER_UPDATE_BARRIER_BIT_EXT */: return "GL_BUFFER_UPDATE_BARRIER_BIT_EXT (0x00000200)"; //case 0x00000400 /* GL_FRAMEBUFFER_BARRIER_BIT_EXT */: return "GL_FRAMEBUFFER_BARRIER_BIT_EXT (0x00000400)"; //case 0x00000800 /* GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT */: return "GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT (0x00000800)"; //case 0x00001000 /* GL_ATOMIC_COUNTER_BARRIER_BIT_EXT */: return "GL_ATOMIC_COUNTER_BARRIER_BIT_EXT (0x00001000)"; //case 0x8F38 /* GL_MAX_IMAGE_UNITS_EXT */: return "GL_MAX_IMAGE_UNITS_EXT (0x8F38)"; //case 0x8F39 /* GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT */: return "GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT (0x8F39)"; //case 0x8F3A /* GL_IMAGE_BINDING_NAME_EXT */: return "GL_IMAGE_BINDING_NAME_EXT (0x8F3A)"; //case 0x8F3B /* GL_IMAGE_BINDING_LEVEL_EXT */: return "GL_IMAGE_BINDING_LEVEL_EXT (0x8F3B)"; //case 0x8F3C /* GL_IMAGE_BINDING_LAYERED_EXT */: return "GL_IMAGE_BINDING_LAYERED_EXT (0x8F3C)"; //case 0x8F3D /* GL_IMAGE_BINDING_LAYER_EXT */: return "GL_IMAGE_BINDING_LAYER_EXT (0x8F3D)"; //case 0x8F3E /* GL_IMAGE_BINDING_ACCESS_EXT */: return "GL_IMAGE_BINDING_ACCESS_EXT (0x8F3E)"; //case 0x904C /* GL_IMAGE_1D_EXT */: return "GL_IMAGE_1D_EXT (0x904C)"; //case 0x904D /* GL_IMAGE_2D_EXT */: return "GL_IMAGE_2D_EXT (0x904D)"; //case 0x904E /* GL_IMAGE_3D_EXT */: return "GL_IMAGE_3D_EXT (0x904E)"; //case 0x904F /* GL_IMAGE_2D_RECT_EXT */: return "GL_IMAGE_2D_RECT_EXT (0x904F)"; //case 0x9050 /* GL_IMAGE_CUBE_EXT */: return "GL_IMAGE_CUBE_EXT (0x9050)"; //case 0x9051 /* GL_IMAGE_BUFFER_EXT */: return "GL_IMAGE_BUFFER_EXT (0x9051)"; //case 0x9052 /* GL_IMAGE_1D_ARRAY_EXT */: return "GL_IMAGE_1D_ARRAY_EXT (0x9052)"; //case 0x9053 /* GL_IMAGE_2D_ARRAY_EXT */: return "GL_IMAGE_2D_ARRAY_EXT (0x9053)"; //case 0x9054 /* GL_IMAGE_CUBE_MAP_ARRAY_EXT */: return "GL_IMAGE_CUBE_MAP_ARRAY_EXT (0x9054)"; //case 0x9055 /* GL_IMAGE_2D_MULTISAMPLE_EXT */: return "GL_IMAGE_2D_MULTISAMPLE_EXT (0x9055)"; //case 0x9056 /* GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT */: return "GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT (0x9056)"; //case 0x9057 /* GL_INT_IMAGE_1D_EXT */: return "GL_INT_IMAGE_1D_EXT (0x9057)"; //case 0x9058 /* GL_INT_IMAGE_2D_EXT */: return "GL_INT_IMAGE_2D_EXT (0x9058)"; //case 0x9059 /* GL_INT_IMAGE_3D_EXT */: return "GL_INT_IMAGE_3D_EXT (0x9059)"; //case 0x905A /* GL_INT_IMAGE_2D_RECT_EXT */: return "GL_INT_IMAGE_2D_RECT_EXT (0x905A)"; //case 0x905B /* GL_INT_IMAGE_CUBE_EXT */: return "GL_INT_IMAGE_CUBE_EXT (0x905B)"; //case 0x905C /* GL_INT_IMAGE_BUFFER_EXT */: return "GL_INT_IMAGE_BUFFER_EXT (0x905C)"; //case 0x905D /* GL_INT_IMAGE_1D_ARRAY_EXT */: return "GL_INT_IMAGE_1D_ARRAY_EXT (0x905D)"; //case 0x905E /* GL_INT_IMAGE_2D_ARRAY_EXT */: return "GL_INT_IMAGE_2D_ARRAY_EXT (0x905E)"; //case 0x905F /* GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT */: return "GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT (0x905F)"; //case 0x9060 /* GL_INT_IMAGE_2D_MULTISAMPLE_EXT */: return "GL_INT_IMAGE_2D_MULTISAMPLE_EXT (0x9060)"; //case 0x9061 /* GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT */: return "GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT (0x9061)"; //case 0x9062 /* GL_UNSIGNED_INT_IMAGE_1D_EXT */: return "GL_UNSIGNED_INT_IMAGE_1D_EXT (0x9062)"; //case 0x9063 /* GL_UNSIGNED_INT_IMAGE_2D_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_EXT (0x9063)"; //case 0x9064 /* GL_UNSIGNED_INT_IMAGE_3D_EXT */: return "GL_UNSIGNED_INT_IMAGE_3D_EXT (0x9064)"; //case 0x9065 /* GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT (0x9065)"; //case 0x9066 /* GL_UNSIGNED_INT_IMAGE_CUBE_EXT */: return "GL_UNSIGNED_INT_IMAGE_CUBE_EXT (0x9066)"; //case 0x9067 /* GL_UNSIGNED_INT_IMAGE_BUFFER_EXT */: return "GL_UNSIGNED_INT_IMAGE_BUFFER_EXT (0x9067)"; //case 0x9068 /* GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT */: return "GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT (0x9068)"; //case 0x9069 /* GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT (0x9069)"; ///case 0x906A /* GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT */: return "GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT (0x906A)"; //case 0x906B /* GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT (0x906B)"; //case 0x906C /* GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT */: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT (0x906C)"; //case 0x906D /* GL_MAX_IMAGE_SAMPLES_EXT */: return "GL_MAX_IMAGE_SAMPLES_EXT (0x906D)"; //case 0x906E /* GL_IMAGE_BINDING_FORMAT_EXT */: return "GL_IMAGE_BINDING_FORMAT_EXT (0x906E)"; //case 0xFFFFFFFF /* GL_ALL_BARRIER_BITS_EXT */: return "GL_ALL_BARRIER_BITS_EXT (0xFFFFFFFF)"; /* -------------------------- GL_EXT_shadow_funcs -------------------------- */ /* --------------------- GL_EXT_shared_texture_palette --------------------- */ case 0x81FB /* GL_SHARED_TEXTURE_PALETTE_EXT */: return "GL_SHARED_TEXTURE_PALETTE_EXT (0x81FB)"; /* ------------------------ GL_EXT_stencil_clear_tag ----------------------- */ case 0x88F2 /* GL_STENCIL_TAG_BITS_EXT */: return "GL_STENCIL_TAG_BITS_EXT (0x88F2)"; case 0x88F3 /* GL_STENCIL_CLEAR_TAG_VALUE_EXT */: return "GL_STENCIL_CLEAR_TAG_VALUE_EXT (0x88F3)"; /* ------------------------ GL_EXT_stencil_two_side ------------------------ */ case 0x8910 /* GL_STENCIL_TEST_TWO_SIDE_EXT */: return "GL_STENCIL_TEST_TWO_SIDE_EXT (0x8910)"; case 0x8911 /* GL_ACTIVE_STENCIL_FACE_EXT */: return "GL_ACTIVE_STENCIL_FACE_EXT (0x8911)";/* -------------------------- GL_EXT_stencil_wrap -------------------------- */ //case 0x8507 /* GL_INCR_WRAP_EXT */: return "GL_INCR_WRAP_EXT (0x8507)"; //case 0x8508 /* GL_DECR_WRAP_EXT */: return "GL_DECR_WRAP_EXT (0x8508)"; /* --------------------------- GL_EXT_subtexture --------------------------- */ /* ----------------------------- GL_EXT_texture ---------------------------- */ //case 0x803B /* GL_ALPHA4_EXT */: return "GL_ALPHA4_EXT (0x803B)"; //case 0x803C /* GL_ALPHA8_EXT */: return "GL_ALPHA8_EXT (0x803C)"; //case 0x803D /* GL_ALPHA12_EXT */: return "GL_ALPHA12_EXT (0x803D)"; //case 0x803E /* GL_ALPHA16_EXT */: return "GL_ALPHA16_EXT (0x803E)"; //case 0x803F /* GL_LUMINANCE4_EXT */: return "GL_LUMINANCE4_EXT (0x803F)"; //case 0x8040 /* GL_LUMINANCE8_EXT */: return "GL_LUMINANCE8_EXT (0x8040)"; //case 0x8041 /* GL_LUMINANCE12_EXT */: return "GL_LUMINANCE12_EXT (0x8041)"; //case 0x8042 /* GL_LUMINANCE16_EXT */: return "GL_LUMINANCE16_EXT (0x8042)"; //case 0x8043 /* GL_LUMINANCE4_ALPHA4_EXT */: return "GL_LUMINANCE4_ALPHA4_EXT (0x8043)"; //case 0x8044 /* GL_LUMINANCE6_ALPHA2_EXT */: return "GL_LUMINANCE6_ALPHA2_EXT (0x8044)"; //case 0x8045 /* GL_LUMINANCE8_ALPHA8_EXT */: return "GL_LUMINANCE8_ALPHA8_EXT (0x8045)"; //case 0x8046 /* GL_LUMINANCE12_ALPHA4_EXT */: return "GL_LUMINANCE12_ALPHA4_EXT (0x8046)"; //case 0x8047 /* GL_LUMINANCE12_ALPHA12_EXT */: return "GL_LUMINANCE12_ALPHA12_EXT (0x8047)"; //case 0x8048 /* GL_LUMINANCE16_ALPHA16_EXT */: return "GL_LUMINANCE16_ALPHA16_EXT (0x8048)"; //case 0x8049 /* GL_INTENSITY_EXT */: return "GL_INTENSITY_EXT (0x8049)"; //case 0x804A /* GL_INTENSITY4_EXT */: return "GL_INTENSITY4_EXT (0x804A)"; //case 0x804B /* GL_INTENSITY8_EXT */: return "GL_INTENSITY8_EXT (0x804B)"; //case 0x804C /* GL_INTENSITY12_EXT */: return "GL_INTENSITY12_EXT (0x804C)"; //case 0x804D /* GL_INTENSITY16_EXT */: return "GL_INTENSITY16_EXT (0x804D)"; case 0x804E /* GL_RGB2_EXT */: return "GL_RGB2_EXT (0x804E)"; //case 0x804F /* GL_RGB4_EXT */: return "GL_RGB4_EXT (0x804F)"; //case 0x8050 /* GL_RGB5_EXT */: return "GL_RGB5_EXT (0x8050)"; //case 0x8051 /* GL_RGB8_EXT */: return "GL_RGB8_EXT (0x8051)"; //case 0x8052 /* GL_RGB10_EXT */: return "GL_RGB10_EXT (0x8052)"; //case 0x8053 /* GL_RGB12_EXT */: return "GL_RGB12_EXT (0x8053)"; //case 0x8054 /* GL_RGB16_EXT */: return "GL_RGB16_EXT (0x8054)"; //case 0x8055 /* GL_RGBA2_EXT */: return "GL_RGBA2_EXT (0x8055)"; //case 0x8056 /* GL_RGBA4_EXT */: return "GL_RGBA4_EXT (0x8056)"; //case 0x8057 /* GL_RGB5_A1_EXT */: return "GL_RGB5_A1_EXT (0x8057)"; //case 0x8058 /* GL_RGBA8_EXT */: return "GL_RGBA8_EXT (0x8058)"; //case 0x8059 /* GL_RGB10_A2_EXT */: return "GL_RGB10_A2_EXT (0x8059)"; //case 0x805A /* GL_RGBA12_EXT */: return "GL_RGBA12_EXT (0x805A)"; //case 0x805B /* GL_RGBA16_EXT */: return "GL_RGBA16_EXT (0x805B)"; //case 0x805C /* GL_TEXTURE_RED_SIZE_EXT */: return "GL_TEXTURE_RED_SIZE_EXT (0x805C)"; //case 0x805D /* GL_TEXTURE_GREEN_SIZE_EXT */: return "GL_TEXTURE_GREEN_SIZE_EXT (0x805D)"; //case 0x805E /* GL_TEXTURE_BLUE_SIZE_EXT */: return "GL_TEXTURE_BLUE_SIZE_EXT (0x805E)"; //case 0x805F /* GL_TEXTURE_ALPHA_SIZE_EXT */: return "GL_TEXTURE_ALPHA_SIZE_EXT (0x805F)"; //case 0x8060 /* GL_TEXTURE_LUMINANCE_SIZE_EXT */: return "GL_TEXTURE_LUMINANCE_SIZE_EXT (0x8060)"; //case 0x8061 /* GL_TEXTURE_INTENSITY_SIZE_EXT */: return "GL_TEXTURE_INTENSITY_SIZE_EXT (0x8061)"; case 0x8062 /* GL_REPLACE_EXT */: return "GL_REPLACE_EXT (0x8062)"; //case 0x8063 /* GL_PROXY_TEXTURE_1D_EXT */: return "GL_PROXY_TEXTURE_1D_EXT (0x8063)"; //case 0x8064 /* GL_PROXY_TEXTURE_2D_EXT */: return "GL_PROXY_TEXTURE_2D_EXT (0x8064)"; /* ---------------------------- GL_EXT_texture3D --------------------------- */ //case 0x806B /* GL_PACK_SKIP_IMAGES_EXT */: return "GL_PACK_SKIP_IMAGES_EXT (0x806B)"; //case 0x806C /* GL_PACK_IMAGE_HEIGHT_EXT */: return "GL_PACK_IMAGE_HEIGHT_EXT (0x806C)"; //case 0x806D /* GL_UNPACK_SKIP_IMAGES_EXT */: return "GL_UNPACK_SKIP_IMAGES_EXT (0x806D)"; //case 0x806E /* GL_UNPACK_IMAGE_HEIGHT_EXT */: return "GL_UNPACK_IMAGE_HEIGHT_EXT (0x806E)"; //case 0x806F /* GL_TEXTURE_3D_EXT */: return "GL_TEXTURE_3D_EXT (0x806F)"; //case 0x8070 /* GL_PROXY_TEXTURE_3D_EXT */: return "GL_PROXY_TEXTURE_3D_EXT (0x8070)"; //case 0x8071 /* GL_TEXTURE_DEPTH_EXT */: return "GL_TEXTURE_DEPTH_EXT (0x8071)"; //case 0x8072 /* GL_TEXTURE_WRAP_R_EXT */: return "GL_TEXTURE_WRAP_R_EXT (0x8072)"; //case 0x8073 /* GL_MAX_3D_TEXTURE_SIZE_EXT */: return "GL_MAX_3D_TEXTURE_SIZE_EXT (0x8073)";/* -------------------------- GL_EXT_texture_array ------------------------- */ //case 0x884E /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */: return "GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT (0x884E)"; //case 0x88FF /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */: return "GL_MAX_ARRAY_TEXTURE_LAYERS_EXT (0x88FF)"; //case 0x8C18 /* GL_TEXTURE_1D_ARRAY_EXT */: return "GL_TEXTURE_1D_ARRAY_EXT (0x8C18)"; //case 0x8C19 /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */: return "GL_PROXY_TEXTURE_1D_ARRAY_EXT (0x8C19)"; //case 0x8C1A /* GL_TEXTURE_2D_ARRAY_EXT */: return "GL_TEXTURE_2D_ARRAY_EXT (0x8C1A)"; //case 0x8C1B /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */: return "GL_PROXY_TEXTURE_2D_ARRAY_EXT (0x8C1B)"; //case 0x8C1C /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */: return "GL_TEXTURE_BINDING_1D_ARRAY_EXT (0x8C1C)"; //case 0x8C1D /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */: return "GL_TEXTURE_BINDING_2D_ARRAY_EXT (0x8C1D)";/* ---------------------- GL_EXT_texture_buffer_object --------------------- */ //case 0x8C2A /* GL_TEXTURE_BUFFER_EXT */: return "GL_TEXTURE_BUFFER_EXT (0x8C2A)"; //case 0x8C2B /* GL_MAX_TEXTURE_BUFFER_SIZE_EXT */: return "GL_MAX_TEXTURE_BUFFER_SIZE_EXT (0x8C2B)"; //case 0x8C2C /* GL_TEXTURE_BINDING_BUFFER_EXT */: return "GL_TEXTURE_BINDING_BUFFER_EXT (0x8C2C)"; //case 0x8C2D /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT */: return "GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT (0x8C2D)"; //case 0x8C2E /* GL_TEXTURE_BUFFER_FORMAT_EXT */: return "GL_TEXTURE_BUFFER_FORMAT_EXT (0x8C2E)";/* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */ /* -------------------- GL_EXT_texture_compression_latc -------------------- */ case 0x8C70 /* GL_COMPRESSED_LUMINANCE_LATC1_EXT */: return "GL_COMPRESSED_LUMINANCE_LATC1_EXT (0x8C70)"; case 0x8C71 /* GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT */: return "GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT (0x8C71)"; case 0x8C72 /* GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT */: return "GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT (0x8C72)"; case 0x8C73 /* GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT */: return "GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT (0x8C73)"; /* -------------------- GL_EXT_texture_compression_rgtc -------------------- */ //case 0x8DBB /* GL_COMPRESSED_RED_RGTC1_EXT */: return "GL_COMPRESSED_RED_RGTC1_EXT (0x8DBB)"; //case 0x8DBC /* GL_COMPRESSED_SIGNED_RED_RGTC1_EXT */: return "GL_COMPRESSED_SIGNED_RED_RGTC1_EXT (0x8DBC)"; //case 0x8DBD /* GL_COMPRESSED_RED_GREEN_RGTC2_EXT */: return "GL_COMPRESSED_RED_GREEN_RGTC2_EXT (0x8DBD)"; //case 0x8DBE /* GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT */: return "GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT (0x8DBE)"; /* -------------------- GL_EXT_texture_compression_s3tc -------------------- */ case 0x83F0 /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */: return "GL_COMPRESSED_RGB_S3TC_DXT1_EXT (0x83F0)"; case 0x83F1 /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */: return "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT (0x83F1)"; case 0x83F2 /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */: return "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT (0x83F2)"; case 0x83F3 /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */: return "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT (0x83F3)"; /* ------------------------ GL_EXT_texture_cube_map ------------------------ */ //case 0x8511 /* GL_NORMAL_MAP_EXT */: return "GL_NORMAL_MAP_EXT (0x8511)"; //case 0x8512 /* GL_REFLECTION_MAP_EXT */: return "GL_REFLECTION_MAP_EXT (0x8512)"; //case 0x8513 /* GL_TEXTURE_CUBE_MAP_EXT */: return "GL_TEXTURE_CUBE_MAP_EXT (0x8513)"; //case 0x8514 /* GL_TEXTURE_BINDING_CUBE_MAP_EXT */: return "GL_TEXTURE_BINDING_CUBE_MAP_EXT (0x8514)"; //case 0x8515 /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT (0x8515)"; //case 0x8516 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT (0x8516)"; //case 0x8517 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT (0x8517)"; //case 0x8518 /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT (0x8518)"; //case 0x8519 /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT */: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT (0x8519)"; //case 0x851A /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT */: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT (0x851A)"; //case 0x851B /* GL_PROXY_TEXTURE_CUBE_MAP_EXT */: return "GL_PROXY_TEXTURE_CUBE_MAP_EXT (0x851B)"; //case 0x851C /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT */: return "GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT (0x851C)"; /* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */ //case 0x812F /* GL_CLAMP_TO_EDGE_EXT */: return "GL_CLAMP_TO_EDGE_EXT (0x812F)"; /* --------------------------- GL_EXT_texture_env -------------------------- */ /* ------------------------- GL_EXT_texture_env_add ------------------------ */ /* ----------------------- GL_EXT_texture_env_combine ---------------------- */ //case 0x8570 /* GL_COMBINE_EXT */: return "GL_COMBINE_EXT (0x8570)"; //case 0x8571 /* GL_COMBINE_RGB_EXT */: return "GL_COMBINE_RGB_EXT (0x8571)"; //case 0x8572 /* GL_COMBINE_ALPHA_EXT */: return "GL_COMBINE_ALPHA_EXT (0x8572)"; //case 0x8573 /* GL_RGB_SCALE_EXT */: return "GL_RGB_SCALE_EXT (0x8573)"; //case 0x8574 /* GL_ADD_SIGNED_EXT */: return "GL_ADD_SIGNED_EXT (0x8574)"; ///case 0x8575 /* GL_INTERPOLATE_EXT */: return "GL_INTERPOLATE_EXT (0x8575)"; //case 0x8576 /* GL_CONSTANT_EXT */: return "GL_CONSTANT_EXT (0x8576)"; //case 0x8577 /* GL_PRIMARY_COLOR_EXT */: return "GL_PRIMARY_COLOR_EXT (0x8577)"; //case 0x8578 /* GL_PREVIOUS_EXT */: return "GL_PREVIOUS_EXT (0x8578)"; //case 0x8580 /* GL_SOURCE0_RGB_EXT */: return "GL_SOURCE0_RGB_EXT (0x8580)"; //case 0x8581 /* GL_SOURCE1_RGB_EXT */: return "GL_SOURCE1_RGB_EXT (0x8581)"; //case 0x8582 /* GL_SOURCE2_RGB_EXT */: return "GL_SOURCE2_RGB_EXT (0x8582)"; //case 0x8588 /* GL_SOURCE0_ALPHA_EXT */: return "GL_SOURCE0_ALPHA_EXT (0x8588)"; //case 0x8589 /* GL_SOURCE1_ALPHA_EXT */: return "GL_SOURCE1_ALPHA_EXT (0x8589)"; //case 0x858A /* GL_SOURCE2_ALPHA_EXT */: return "GL_SOURCE2_ALPHA_EXT (0x858A)"; //case 0x8590 /* GL_OPERAND0_RGB_EXT */: return "GL_OPERAND0_RGB_EXT (0x8590)"; //case 0x8591 /* GL_OPERAND1_RGB_EXT */: return "GL_OPERAND1_RGB_EXT (0x8591)"; //case 0x8592 /* GL_OPERAND2_RGB_EXT */: return "GL_OPERAND2_RGB_EXT (0x8592)"; //case 0x8598 /* GL_OPERAND0_ALPHA_EXT */: return "GL_OPERAND0_ALPHA_EXT (0x8598)"; //case 0x8599 /* GL_OPERAND1_ALPHA_EXT */: return "GL_OPERAND1_ALPHA_EXT (0x8599)"; //case 0x859A /* GL_OPERAND2_ALPHA_EXT */: return "GL_OPERAND2_ALPHA_EXT (0x859A)"; /* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */ case 0x8740 /* GL_DOT3_RGB_EXT */: return "GL_DOT3_RGB_EXT (0x8740)"; //case 0x8741 /* GL_DOT3_RGBA_EXT */: return "GL_DOT3_RGBA_EXT (0x8741)"; /* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */ case 0x84FE /* GL_TEXTURE_MAX_ANISOTROPY_EXT */: return "GL_TEXTURE_MAX_ANISOTROPY_EXT (0x84FE)"; case 0x84FF /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */: return "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT (0x84FF)"; /* ------------------------- GL_EXT_texture_integer ------------------------ */ //case 0x8D70 /* GL_RGBA32UI_EXT */: return "GL_RGBA32UI_EXT (0x8D70)"; //case 0x8D71 /* GL_RGB32UI_EXT */: return "GL_RGB32UI_EXT (0x8D71)"; case 0x8D72 /* GL_ALPHA32UI_EXT */: return "GL_ALPHA32UI_EXT (0x8D72)"; case 0x8D73 /* GL_INTENSITY32UI_EXT */: return "GL_INTENSITY32UI_EXT (0x8D73)"; case 0x8D74 /* GL_LUMINANCE32UI_EXT */: return "GL_LUMINANCE32UI_EXT (0x8D74)"; case 0x8D75 /* GL_LUMINANCE_ALPHA32UI_EXT */: return "GL_LUMINANCE_ALPHA32UI_EXT (0x8D75)"; //case 0x8D76 /* GL_RGBA16UI_EXT */: return "GL_RGBA16UI_EXT (0x8D76)"; //case 0x8D77 /* GL_RGB16UI_EXT */: return "GL_RGB16UI_EXT (0x8D77)"; case 0x8D78 /* GL_ALPHA16UI_EXT */: return "GL_ALPHA16UI_EXT (0x8D78)"; case 0x8D79 /* GL_INTENSITY16UI_EXT */: return "GL_INTENSITY16UI_EXT (0x8D79)"; case 0x8D7A /* GL_LUMINANCE16UI_EXT */: return "GL_LUMINANCE16UI_EXT (0x8D7A)"; case 0x8D7B /* GL_LUMINANCE_ALPHA16UI_EXT */: return "GL_LUMINANCE_ALPHA16UI_EXT (0x8D7B)"; //case 0x8D7C /* GL_RGBA8UI_EXT */: return "GL_RGBA8UI_EXT (0x8D7C)"; //case 0x8D7D /* GL_RGB8UI_EXT */: return "GL_RGB8UI_EXT (0x8D7D)"; case 0x8D7E /* GL_ALPHA8UI_EXT */: return "GL_ALPHA8UI_EXT (0x8D7E)"; case 0x8D7F /* GL_INTENSITY8UI_EXT */: return "GL_INTENSITY8UI_EXT (0x8D7F)"; case 0x8D80 /* GL_LUMINANCE8UI_EXT */: return "GL_LUMINANCE8UI_EXT (0x8D80)"; case 0x8D81 /* GL_LUMINANCE_ALPHA8UI_EXT */: return "GL_LUMINANCE_ALPHA8UI_EXT (0x8D81)"; //case 0x8D82 /* GL_RGBA32I_EXT */: return "GL_RGBA32I_EXT (0x8D82)"; //case 0x8D83 /* GL_RGB32I_EXT */: return "GL_RGB32I_EXT (0x8D83)"; case 0x8D84 /* GL_ALPHA32I_EXT */: return "GL_ALPHA32I_EXT (0x8D84)"; case 0x8D85 /* GL_INTENSITY32I_EXT */: return "GL_INTENSITY32I_EXT (0x8D85)"; case 0x8D86 /* GL_LUMINANCE32I_EXT */: return "GL_LUMINANCE32I_EXT (0x8D86)"; case 0x8D87 /* GL_LUMINANCE_ALPHA32I_EXT */: return "GL_LUMINANCE_ALPHA32I_EXT (0x8D87)"; //case 0x8D88 /* GL_RGBA16I_EXT */: return "GL_RGBA16I_EXT (0x8D88)"; //case 0x8D89 /* GL_RGB16I_EXT */: return "GL_RGB16I_EXT (0x8D89)"; case 0x8D8A /* GL_ALPHA16I_EXT */: return "GL_ALPHA16I_EXT (0x8D8A)"; case 0x8D8B /* GL_INTENSITY16I_EXT */: return "GL_INTENSITY16I_EXT (0x8D8B)"; case 0x8D8C /* GL_LUMINANCE16I_EXT */: return "GL_LUMINANCE16I_EXT (0x8D8C)"; case 0x8D8D /* GL_LUMINANCE_ALPHA16I_EXT */: return "GL_LUMINANCE_ALPHA16I_EXT (0x8D8D)"; //case 0x8D8E /* GL_RGBA8I_EXT */: return "GL_RGBA8I_EXT (0x8D8E)"; //case 0x8D8F /* GL_RGB8I_EXT */: return "GL_RGB8I_EXT (0x8D8F)"; case 0x8D90 /* GL_ALPHA8I_EXT */: return "GL_ALPHA8I_EXT (0x8D90)"; case 0x8D91 /* GL_INTENSITY8I_EXT */: return "GL_INTENSITY8I_EXT (0x8D91)"; case 0x8D92 /* GL_LUMINANCE8I_EXT */: return "GL_LUMINANCE8I_EXT (0x8D92)"; case 0x8D93 /* GL_LUMINANCE_ALPHA8I_EXT */: return "GL_LUMINANCE_ALPHA8I_EXT (0x8D93)"; //case 0x8D94 /* GL_RED_INTEGER_EXT */: return "GL_RED_INTEGER_EXT (0x8D94)"; //case 0x8D95 /* GL_GREEN_INTEGER_EXT */: return "GL_GREEN_INTEGER_EXT (0x8D95)"; //case 0x8D96 /* GL_BLUE_INTEGER_EXT */: return "GL_BLUE_INTEGER_EXT (0x8D96)"; //case 0x8D97 /* GL_ALPHA_INTEGER_EXT */: return "GL_ALPHA_INTEGER_EXT (0x8D97)"; //case 0x8D98 /* GL_RGB_INTEGER_EXT */: return "GL_RGB_INTEGER_EXT (0x8D98)"; //case 0x8D99 /* GL_RGBA_INTEGER_EXT */: return "GL_RGBA_INTEGER_EXT (0x8D99)"; //case 0x8D9A /* GL_BGR_INTEGER_EXT */: return "GL_BGR_INTEGER_EXT (0x8D9A)"; //case 0x8D9B /* GL_BGRA_INTEGER_EXT */: return "GL_BGRA_INTEGER_EXT (0x8D9B)"; case 0x8D9C /* GL_LUMINANCE_INTEGER_EXT */: return "GL_LUMINANCE_INTEGER_EXT (0x8D9C)"; case 0x8D9D /* GL_LUMINANCE_ALPHA_INTEGER_EXT */: return "GL_LUMINANCE_ALPHA_INTEGER_EXT (0x8D9D)"; case 0x8D9E /* GL_RGBA_INTEGER_MODE_EXT */: return "GL_RGBA_INTEGER_MODE_EXT (0x8D9E)";/* ------------------------ GL_EXT_texture_lod_bias ------------------------ */ //case 0x84FD /* GL_MAX_TEXTURE_LOD_BIAS_EXT */: return "GL_MAX_TEXTURE_LOD_BIAS_EXT (0x84FD)"; //case 0x8500 /* GL_TEXTURE_FILTER_CONTROL_EXT */: return "GL_TEXTURE_FILTER_CONTROL_EXT (0x8500)"; //case 0x8501 /* GL_TEXTURE_LOD_BIAS_EXT */: return "GL_TEXTURE_LOD_BIAS_EXT (0x8501)"; /* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */ //case 0x8742 /* GL_MIRROR_CLAMP_EXT */: return "GL_MIRROR_CLAMP_EXT (0x8742)"; //case 0x8743 /* GL_MIRROR_CLAMP_TO_EDGE_EXT */: return "GL_MIRROR_CLAMP_TO_EDGE_EXT (0x8743)"; case 0x8912 /* GL_MIRROR_CLAMP_TO_BORDER_EXT */: return "GL_MIRROR_CLAMP_TO_BORDER_EXT (0x8912)"; /* ------------------------- GL_EXT_texture_object ------------------------- */ //case 0x8066 /* GL_TEXTURE_PRIORITY_EXT */: return "GL_TEXTURE_PRIORITY_EXT (0x8066)"; //case 0x8067 /* GL_TEXTURE_RESIDENT_EXT */: return "GL_TEXTURE_RESIDENT_EXT (0x8067)"; //case 0x8068 /* GL_TEXTURE_1D_BINDING_EXT */: return "GL_TEXTURE_1D_BINDING_EXT (0x8068)"; //case 0x8069 /* GL_TEXTURE_2D_BINDING_EXT */: return "GL_TEXTURE_2D_BINDING_EXT (0x8069)"; //case 0x806A /* GL_TEXTURE_3D_BINDING_EXT */: return "GL_TEXTURE_3D_BINDING_EXT (0x806A)";/* --------------------- GL_EXT_texture_perturb_normal --------------------- */ case 0x85AE /* GL_PERTURB_EXT */: return "GL_PERTURB_EXT (0x85AE)"; case 0x85AF /* GL_TEXTURE_NORMAL_EXT */: return "GL_TEXTURE_NORMAL_EXT (0x85AF)";/* ------------------------ GL_EXT_texture_rectangle ----------------------- */ //case 0x84F5 /* GL_TEXTURE_RECTANGLE_EXT */: return "GL_TEXTURE_RECTANGLE_EXT (0x84F5)"; //case 0x84F6 /* GL_TEXTURE_BINDING_RECTANGLE_EXT */: return "GL_TEXTURE_BINDING_RECTANGLE_EXT (0x84F6)"; //case 0x84F7 /* GL_PROXY_TEXTURE_RECTANGLE_EXT */: return "GL_PROXY_TEXTURE_RECTANGLE_EXT (0x84F7)"; //case 0x84F8 /* GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT */: return "GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT (0x84F8)"; /* -------------------------- GL_EXT_texture_sRGB -------------------------- */ //case 0x8C40 /* GL_SRGB_EXT */: return "GL_SRGB_EXT (0x8C40)"; //case 0x8C41 /* GL_SRGB8_EXT */: return "GL_SRGB8_EXT (0x8C41)"; //case 0x8C42 /* GL_SRGB_ALPHA_EXT */: return "GL_SRGB_ALPHA_EXT (0x8C42)"; //case 0x8C43 /* GL_SRGB8_ALPHA8_EXT */: return "GL_SRGB8_ALPHA8_EXT (0x8C43)"; //case 0x8C44 /* GL_SLUMINANCE_ALPHA_EXT */: return "GL_SLUMINANCE_ALPHA_EXT (0x8C44)"; //case 0x8C45 /* GL_SLUMINANCE8_ALPHA8_EXT */: return "GL_SLUMINANCE8_ALPHA8_EXT (0x8C45)"; //case 0x8C46 /* GL_SLUMINANCE_EXT */: return "GL_SLUMINANCE_EXT (0x8C46)"; //case 0x8C47 /* GL_SLUMINANCE8_EXT */: return "GL_SLUMINANCE8_EXT (0x8C47)"; //case 0x8C48 /* GL_COMPRESSED_SRGB_EXT */: return "GL_COMPRESSED_SRGB_EXT (0x8C48)"; //case 0x8C49 /* GL_COMPRESSED_SRGB_ALPHA_EXT */: return "GL_COMPRESSED_SRGB_ALPHA_EXT (0x8C49)"; //case 0x8C4A /* GL_COMPRESSED_SLUMINANCE_EXT */: return "GL_COMPRESSED_SLUMINANCE_EXT (0x8C4A)"; //case 0x8C4B /* GL_COMPRESSED_SLUMINANCE_ALPHA_EXT */: return "GL_COMPRESSED_SLUMINANCE_ALPHA_EXT (0x8C4B)"; case 0x8C4C /* GL_COMPRESSED_SRGB_S3TC_DXT1_EXT */: return "GL_COMPRESSED_SRGB_S3TC_DXT1_EXT (0x8C4C)"; case 0x8C4D /* GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT */: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT (0x8C4D)"; case 0x8C4E /* GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT */: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT (0x8C4E)"; case 0x8C4F /* GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT */: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT (0x8C4F)"; /* ----------------------- GL_EXT_texture_sRGB_decode ---------------------- */ case 0x8A48 /* GL_TEXTURE_SRGB_DECODE_EXT */: return "GL_TEXTURE_SRGB_DECODE_EXT (0x8A48)"; case 0x8A49 /* GL_DECODE_EXT */: return "GL_DECODE_EXT (0x8A49)"; case 0x8A4A /* GL_SKIP_DECODE_EXT */: return "GL_SKIP_DECODE_EXT (0x8A4A)"; /* --------------------- GL_EXT_texture_shared_exponent -------------------- */ //case 0x8C3D /* GL_RGB9_E5_EXT */: return "GL_RGB9_E5_EXT (0x8C3D)"; //case 0x8C3E /* GL_UNSIGNED_INT_5_9_9_9_REV_EXT */: return "GL_UNSIGNED_INT_5_9_9_9_REV_EXT (0x8C3E)"; //case 0x8C3F /* GL_TEXTURE_SHARED_SIZE_EXT */: return "GL_TEXTURE_SHARED_SIZE_EXT (0x8C3F)"; /* -------------------------- GL_EXT_texture_snorm ------------------------- */ //case 0x8F90 /* GL_RED_SNORM */: return "GL_RED_SNORM (0x8F90)"; //case 0x8F91 /* GL_RG_SNORM */: return "GL_RG_SNORM (0x8F91)"; //case 0x8F92 /* GL_RGB_SNORM */: return "GL_RGB_SNORM (0x8F92)"; //case 0x8F93 /* GL_RGBA_SNORM */: return "GL_RGBA_SNORM (0x8F93)"; //case 0x8F94 /* GL_R8_SNORM */: return "GL_R8_SNORM (0x8F94)"; //case 0x8F95 /* GL_RG8_SNORM */: return "GL_RG8_SNORM (0x8F95)"; //case 0x8F96 /* GL_RGB8_SNORM */: return "GL_RGB8_SNORM (0x8F96)"; //case 0x8F97 /* GL_RGBA8_SNORM */: return "GL_RGBA8_SNORM (0x8F97)"; //case 0x8F98 /* GL_R16_SNORM */: return "GL_R16_SNORM (0x8F98)"; //case 0x8F99 /* GL_RG16_SNORM */: return "GL_RG16_SNORM (0x8F99)"; //case 0x8F9A /* GL_RGB16_SNORM */: return "GL_RGB16_SNORM (0x8F9A)"; //case 0x8F9B /* GL_RGBA16_SNORM */: return "GL_RGBA16_SNORM (0x8F9B)"; //case 0x8F9C /* GL_SIGNED_NORMALIZED */: return "GL_SIGNED_NORMALIZED (0x8F9C)"; case 0x9010 /* GL_ALPHA_SNORM */: return "GL_ALPHA_SNORM (0x9010)"; case 0x9011 /* GL_LUMINANCE_SNORM */: return "GL_LUMINANCE_SNORM (0x9011)"; case 0x9012 /* GL_LUMINANCE_ALPHA_SNORM */: return "GL_LUMINANCE_ALPHA_SNORM (0x9012)"; case 0x9013 /* GL_INTENSITY_SNORM */: return "GL_INTENSITY_SNORM (0x9013)"; case 0x9014 /* GL_ALPHA8_SNORM */: return "GL_ALPHA8_SNORM (0x9014)"; case 0x9015 /* GL_LUMINANCE8_SNORM */: return "GL_LUMINANCE8_SNORM (0x9015)"; case 0x9016 /* GL_LUMINANCE8_ALPHA8_SNORM */: return "GL_LUMINANCE8_ALPHA8_SNORM (0x9016)"; case 0x9017 /* GL_INTENSITY8_SNORM */: return "GL_INTENSITY8_SNORM (0x9017)"; case 0x9018 /* GL_ALPHA16_SNORM */: return "GL_ALPHA16_SNORM (0x9018)"; case 0x9019 /* GL_LUMINANCE16_SNORM */: return "GL_LUMINANCE16_SNORM (0x9019)"; case 0x901A /* GL_LUMINANCE16_ALPHA16_SNORM */: return "GL_LUMINANCE16_ALPHA16_SNORM (0x901A)"; case 0x901B /* GL_INTENSITY16_SNORM */: return "GL_INTENSITY16_SNORM (0x901B)"; /* ------------------------- GL_EXT_texture_swizzle ------------------------ */ //case 0x8E42 /* GL_TEXTURE_SWIZZLE_R_EXT */: return "GL_TEXTURE_SWIZZLE_R_EXT (0x8E42)"; //case 0x8E43 /* GL_TEXTURE_SWIZZLE_G_EXT */: return "GL_TEXTURE_SWIZZLE_G_EXT (0x8E43)"; //case 0x8E44 /* GL_TEXTURE_SWIZZLE_B_EXT */: return "GL_TEXTURE_SWIZZLE_B_EXT (0x8E44)"; //case 0x8E45 /* GL_TEXTURE_SWIZZLE_A_EXT */: return "GL_TEXTURE_SWIZZLE_A_EXT (0x8E45)"; //case 0x8E46 /* GL_TEXTURE_SWIZZLE_RGBA_EXT */: return "GL_TEXTURE_SWIZZLE_RGBA_EXT (0x8E46)"; /* --------------------------- GL_EXT_timer_query -------------------------- */ //case 0x88BF /* GL_TIME_ELAPSED_EXT */: return "GL_TIME_ELAPSED_EXT (0x88BF)"; /* ----------------------- GL_EXT_transform_feedback ----------------------- */ //case 0x8C76 /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT */: return "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT (0x8C76)"; //case 0x8C7F /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT (0x8C7F)"; ///case 0x8C80 /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT (0x8C80)"; //case 0x8C83 /* GL_TRANSFORM_FEEDBACK_VARYINGS_EXT */: return "GL_TRANSFORM_FEEDBACK_VARYINGS_EXT (0x8C83)"; //case 0x8C84 /* GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT (0x8C84)"; //case 0x8C85 /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT (0x8C85)"; //case 0x8C87 /* GL_PRIMITIVES_GENERATED_EXT */: return "GL_PRIMITIVES_GENERATED_EXT (0x8C87)"; //case 0x8C88 /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT */: return "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT (0x8C88)"; //case 0x8C89 /* GL_RASTERIZER_DISCARD_EXT */: return "GL_RASTERIZER_DISCARD_EXT (0x8C89)"; //case 0x8C8A /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT */: return "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT (0x8C8A)"; //case 0x8C8B /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT (0x8C8B)"; //case 0x8C8C /* GL_INTERLEAVED_ATTRIBS_EXT */: return "GL_INTERLEAVED_ATTRIBS_EXT (0x8C8C)"; //case 0x8C8D /* GL_SEPARATE_ATTRIBS_EXT */: return "GL_SEPARATE_ATTRIBS_EXT (0x8C8D)"; //case 0x8C8E /* GL_TRANSFORM_FEEDBACK_BUFFER_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_EXT (0x8C8E)"; //case 0x8C8F /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT */: return "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT (0x8C8F)"; /* -------------------------- GL_EXT_vertex_array -------------------------- */ //case 0x140A /* GL_DOUBLE_EXT */: return "GL_DOUBLE_EXT (0x140A)"; //case 0x8074 /* GL_VERTEX_ARRAY_EXT */: return "GL_VERTEX_ARRAY_EXT (0x8074)"; //case 0x8075 /* GL_NORMAL_ARRAY_EXT */: return "GL_NORMAL_ARRAY_EXT (0x8075)"; //case 0x8076 /* GL_COLOR_ARRAY_EXT */: return "GL_COLOR_ARRAY_EXT (0x8076)"; //case 0x8077 /* GL_INDEX_ARRAY_EXT */: return "GL_INDEX_ARRAY_EXT (0x8077)"; //case 0x8078 /* GL_TEXTURE_COORD_ARRAY_EXT */: return "GL_TEXTURE_COORD_ARRAY_EXT (0x8078)"; //case 0x8079 /* GL_EDGE_FLAG_ARRAY_EXT */: return "GL_EDGE_FLAG_ARRAY_EXT (0x8079)"; //case 0x807A /* GL_VERTEX_ARRAY_SIZE_EXT */: return "GL_VERTEX_ARRAY_SIZE_EXT (0x807A)"; //case 0x807B /* GL_VERTEX_ARRAY_TYPE_EXT */: return "GL_VERTEX_ARRAY_TYPE_EXT (0x807B)"; //case 0x807C /* GL_VERTEX_ARRAY_STRIDE_EXT */: return "GL_VERTEX_ARRAY_STRIDE_EXT (0x807C)"; case 0x807D /* GL_VERTEX_ARRAY_COUNT_EXT */: return "GL_VERTEX_ARRAY_COUNT_EXT (0x807D)"; //case 0x807E /* GL_NORMAL_ARRAY_TYPE_EXT */: return "GL_NORMAL_ARRAY_TYPE_EXT (0x807E)"; //case 0x807F /* GL_NORMAL_ARRAY_STRIDE_EXT */: return "GL_NORMAL_ARRAY_STRIDE_EXT (0x807F)"; case 0x8080 /* GL_NORMAL_ARRAY_COUNT_EXT */: return "GL_NORMAL_ARRAY_COUNT_EXT (0x8080)"; //case 0x8081 /* GL_COLOR_ARRAY_SIZE_EXT */: return "GL_COLOR_ARRAY_SIZE_EXT (0x8081)"; //case 0x8082 /* GL_COLOR_ARRAY_TYPE_EXT */: return "GL_COLOR_ARRAY_TYPE_EXT (0x8082)"; //case 0x8083 /* GL_COLOR_ARRAY_STRIDE_EXT */: return "GL_COLOR_ARRAY_STRIDE_EXT (0x8083)"; case 0x8084 /* GL_COLOR_ARRAY_COUNT_EXT */: return "GL_COLOR_ARRAY_COUNT_EXT (0x8084)"; //case 0x8085 /* GL_INDEX_ARRAY_TYPE_EXT */: return "GL_INDEX_ARRAY_TYPE_EXT (0x8085)"; //case 0x8086 /* GL_INDEX_ARRAY_STRIDE_EXT */: return "GL_INDEX_ARRAY_STRIDE_EXT (0x8086)"; case 0x8087 /* GL_INDEX_ARRAY_COUNT_EXT */: return "GL_INDEX_ARRAY_COUNT_EXT (0x8087)"; //case 0x8088 /* GL_TEXTURE_COORD_ARRAY_SIZE_EXT */: return "GL_TEXTURE_COORD_ARRAY_SIZE_EXT (0x8088)"; //case 0x8089 /* GL_TEXTURE_COORD_ARRAY_TYPE_EXT */: return "GL_TEXTURE_COORD_ARRAY_TYPE_EXT (0x8089)"; //case 0x808A /* GL_TEXTURE_COORD_ARRAY_STRIDE_EXT */: return "GL_TEXTURE_COORD_ARRAY_STRIDE_EXT (0x808A)"; case 0x808B /* GL_TEXTURE_COORD_ARRAY_COUNT_EXT */: return "GL_TEXTURE_COORD_ARRAY_COUNT_EXT (0x808B)"; //case 0x808C /* GL_EDGE_FLAG_ARRAY_STRIDE_EXT */: return "GL_EDGE_FLAG_ARRAY_STRIDE_EXT (0x808C)"; case 0x808D /* GL_EDGE_FLAG_ARRAY_COUNT_EXT */: return "GL_EDGE_FLAG_ARRAY_COUNT_EXT (0x808D)"; //case 0x808E /* GL_VERTEX_ARRAY_POINTER_EXT */: return "GL_VERTEX_ARRAY_POINTER_EXT (0x808E)"; //case 0x808F /* GL_NORMAL_ARRAY_POINTER_EXT */: return "GL_NORMAL_ARRAY_POINTER_EXT (0x808F)"; //case 0x8090 /* GL_COLOR_ARRAY_POINTER_EXT */: return "GL_COLOR_ARRAY_POINTER_EXT (0x8090)"; ///case 0x8091 /* GL_INDEX_ARRAY_POINTER_EXT */: return "GL_INDEX_ARRAY_POINTER_EXT (0x8091)"; ///case 0x8092 /* GL_TEXTURE_COORD_ARRAY_POINTER_EXT */: return "GL_TEXTURE_COORD_ARRAY_POINTER_EXT (0x8092)"; //case 0x8093 /* GL_EDGE_FLAG_ARRAY_POINTER_EXT */: return "GL_EDGE_FLAG_ARRAY_POINTER_EXT (0x8093)"; /* ------------------------ GL_EXT_vertex_array_bgra ----------------------- */ //case 0x80E1 /* GL_BGRA */: return "GL_BGRA (0x80E1)"; /* ----------------------- GL_EXT_vertex_attrib_64bit ---------------------- */ //case 0x8F46 /* GL_DOUBLE_MAT2_EXT */: return "GL_DOUBLE_MAT2_EXT (0x8F46)"; //case 0x8F47 /* GL_DOUBLE_MAT3_EXT */: return "GL_DOUBLE_MAT3_EXT (0x8F47)"; //case 0x8F48 /* GL_DOUBLE_MAT4_EXT */: return "GL_DOUBLE_MAT4_EXT (0x8F48)"; //case 0x8F49 /* GL_DOUBLE_MAT2x3_EXT */: return "GL_DOUBLE_MAT2x3_EXT (0x8F49)"; //case 0x8F4A /* GL_DOUBLE_MAT2x4_EXT */: return "GL_DOUBLE_MAT2x4_EXT (0x8F4A)"; //case 0x8F4B /* GL_DOUBLE_MAT3x2_EXT */: return "GL_DOUBLE_MAT3x2_EXT (0x8F4B)"; //case 0x8F4C /* GL_DOUBLE_MAT3x4_EXT */: return "GL_DOUBLE_MAT3x4_EXT (0x8F4C)"; //case 0x8F4D /* GL_DOUBLE_MAT4x2_EXT */: return "GL_DOUBLE_MAT4x2_EXT (0x8F4D)"; //case 0x8F4E /* GL_DOUBLE_MAT4x3_EXT */: return "GL_DOUBLE_MAT4x3_EXT (0x8F4E)"; //case 0x8FFC /* GL_DOUBLE_VEC2_EXT */: return "GL_DOUBLE_VEC2_EXT (0x8FFC)"; //case 0x8FFD /* GL_DOUBLE_VEC3_EXT */: return "GL_DOUBLE_VEC3_EXT (0x8FFD)"; //case 0x8FFE /* GL_DOUBLE_VEC4_EXT */: return "GL_DOUBLE_VEC4_EXT (0x8FFE)";/* -------------------------- GL_EXT_vertex_shader ------------------------- */ case 0x8780 /* GL_VERTEX_SHADER_EXT */: return "GL_VERTEX_SHADER_EXT (0x8780)"; case 0x8781 /* GL_VERTEX_SHADER_BINDING_EXT */: return "GL_VERTEX_SHADER_BINDING_EXT (0x8781)"; case 0x8782 /* GL_OP_INDEX_EXT */: return "GL_OP_INDEX_EXT (0x8782)"; case 0x8783 /* GL_OP_NEGATE_EXT */: return "GL_OP_NEGATE_EXT (0x8783)"; case 0x8784 /* GL_OP_DOT3_EXT */: return "GL_OP_DOT3_EXT (0x8784)"; case 0x8785 /* GL_OP_DOT4_EXT */: return "GL_OP_DOT4_EXT (0x8785)"; case 0x8786 /* GL_OP_MUL_EXT */: return "GL_OP_MUL_EXT (0x8786)"; case 0x8787 /* GL_OP_ADD_EXT */: return "GL_OP_ADD_EXT (0x8787)"; case 0x8788 /* GL_OP_MADD_EXT */: return "GL_OP_MADD_EXT (0x8788)"; case 0x8789 /* GL_OP_FRAC_EXT */: return "GL_OP_FRAC_EXT (0x8789)"; case 0x878A /* GL_OP_MAX_EXT */: return "GL_OP_MAX_EXT (0x878A)"; case 0x878B /* GL_OP_MIN_EXT */: return "GL_OP_MIN_EXT (0x878B)"; case 0x878C /* GL_OP_SET_GE_EXT */: return "GL_OP_SET_GE_EXT (0x878C)"; case 0x878D /* GL_OP_SET_LT_EXT */: return "GL_OP_SET_LT_EXT (0x878D)"; case 0x878E /* GL_OP_CLAMP_EXT */: return "GL_OP_CLAMP_EXT (0x878E)"; case 0x878F /* GL_OP_FLOOR_EXT */: return "GL_OP_FLOOR_EXT (0x878F)"; case 0x8790 /* GL_OP_ROUND_EXT */: return "GL_OP_ROUND_EXT (0x8790)"; case 0x8791 /* GL_OP_EXP_BASE_2_EXT */: return "GL_OP_EXP_BASE_2_EXT (0x8791)"; case 0x8792 /* GL_OP_LOG_BASE_2_EXT */: return "GL_OP_LOG_BASE_2_EXT (0x8792)"; case 0x8793 /* GL_OP_POWER_EXT */: return "GL_OP_POWER_EXT (0x8793)"; case 0x8794 /* GL_OP_RECIP_EXT */: return "GL_OP_RECIP_EXT (0x8794)"; case 0x8795 /* GL_OP_RECIP_SQRT_EXT */: return "GL_OP_RECIP_SQRT_EXT (0x8795)"; case 0x8796 /* GL_OP_SUB_EXT */: return "GL_OP_SUB_EXT (0x8796)"; case 0x8797 /* GL_OP_CROSS_PRODUCT_EXT */: return "GL_OP_CROSS_PRODUCT_EXT (0x8797)"; case 0x8798 /* GL_OP_MULTIPLY_MATRIX_EXT */: return "GL_OP_MULTIPLY_MATRIX_EXT (0x8798)"; case 0x8799 /* GL_OP_MOV_EXT */: return "GL_OP_MOV_EXT (0x8799)"; case 0x879A /* GL_OUTPUT_VERTEX_EXT */: return "GL_OUTPUT_VERTEX_EXT (0x879A)"; case 0x879B /* GL_OUTPUT_COLOR0_EXT */: return "GL_OUTPUT_COLOR0_EXT (0x879B)"; case 0x879C /* GL_OUTPUT_COLOR1_EXT */: return "GL_OUTPUT_COLOR1_EXT (0x879C)"; case 0x879D /* GL_OUTPUT_TEXTURE_COORD0_EXT */: return "GL_OUTPUT_TEXTURE_COORD0_EXT (0x879D)"; case 0x879E /* GL_OUTPUT_TEXTURE_COORD1_EXT */: return "GL_OUTPUT_TEXTURE_COORD1_EXT (0x879E)"; case 0x879F /* GL_OUTPUT_TEXTURE_COORD2_EXT */: return "GL_OUTPUT_TEXTURE_COORD2_EXT (0x879F)"; case 0x87A0 /* GL_OUTPUT_TEXTURE_COORD3_EXT */: return "GL_OUTPUT_TEXTURE_COORD3_EXT (0x87A0)"; case 0x87A1 /* GL_OUTPUT_TEXTURE_COORD4_EXT */: return "GL_OUTPUT_TEXTURE_COORD4_EXT (0x87A1)"; case 0x87A2 /* GL_OUTPUT_TEXTURE_COORD5_EXT */: return "GL_OUTPUT_TEXTURE_COORD5_EXT (0x87A2)"; case 0x87A3 /* GL_OUTPUT_TEXTURE_COORD6_EXT */: return "GL_OUTPUT_TEXTURE_COORD6_EXT (0x87A3)"; case 0x87A4 /* GL_OUTPUT_TEXTURE_COORD7_EXT */: return "GL_OUTPUT_TEXTURE_COORD7_EXT (0x87A4)"; case 0x87A5 /* GL_OUTPUT_TEXTURE_COORD8_EXT */: return "GL_OUTPUT_TEXTURE_COORD8_EXT (0x87A5)"; case 0x87A6 /* GL_OUTPUT_TEXTURE_COORD9_EXT */: return "GL_OUTPUT_TEXTURE_COORD9_EXT (0x87A6)"; case 0x87A7 /* GL_OUTPUT_TEXTURE_COORD10_EXT */: return "GL_OUTPUT_TEXTURE_COORD10_EXT (0x87A7)"; case 0x87A8 /* GL_OUTPUT_TEXTURE_COORD11_EXT */: return "GL_OUTPUT_TEXTURE_COORD11_EXT (0x87A8)"; case 0x87A9 /* GL_OUTPUT_TEXTURE_COORD12_EXT */: return "GL_OUTPUT_TEXTURE_COORD12_EXT (0x87A9)"; case 0x87AA /* GL_OUTPUT_TEXTURE_COORD13_EXT */: return "GL_OUTPUT_TEXTURE_COORD13_EXT (0x87AA)"; case 0x87AB /* GL_OUTPUT_TEXTURE_COORD14_EXT */: return "GL_OUTPUT_TEXTURE_COORD14_EXT (0x87AB)"; case 0x87AC /* GL_OUTPUT_TEXTURE_COORD15_EXT */: return "GL_OUTPUT_TEXTURE_COORD15_EXT (0x87AC)"; case 0x87AD /* GL_OUTPUT_TEXTURE_COORD16_EXT */: return "GL_OUTPUT_TEXTURE_COORD16_EXT (0x87AD)"; case 0x87AE /* GL_OUTPUT_TEXTURE_COORD17_EXT */: return "GL_OUTPUT_TEXTURE_COORD17_EXT (0x87AE)"; case 0x87AF /* GL_OUTPUT_TEXTURE_COORD18_EXT */: return "GL_OUTPUT_TEXTURE_COORD18_EXT (0x87AF)"; case 0x87B0 /* GL_OUTPUT_TEXTURE_COORD19_EXT */: return "GL_OUTPUT_TEXTURE_COORD19_EXT (0x87B0)"; case 0x87B1 /* GL_OUTPUT_TEXTURE_COORD20_EXT */: return "GL_OUTPUT_TEXTURE_COORD20_EXT (0x87B1)"; case 0x87B2 /* GL_OUTPUT_TEXTURE_COORD21_EXT */: return "GL_OUTPUT_TEXTURE_COORD21_EXT (0x87B2)"; case 0x87B3 /* GL_OUTPUT_TEXTURE_COORD22_EXT */: return "GL_OUTPUT_TEXTURE_COORD22_EXT (0x87B3)"; case 0x87B4 /* GL_OUTPUT_TEXTURE_COORD23_EXT */: return "GL_OUTPUT_TEXTURE_COORD23_EXT (0x87B4)"; case 0x87B5 /* GL_OUTPUT_TEXTURE_COORD24_EXT */: return "GL_OUTPUT_TEXTURE_COORD24_EXT (0x87B5)"; case 0x87B6 /* GL_OUTPUT_TEXTURE_COORD25_EXT */: return "GL_OUTPUT_TEXTURE_COORD25_EXT (0x87B6)"; case 0x87B7 /* GL_OUTPUT_TEXTURE_COORD26_EXT */: return "GL_OUTPUT_TEXTURE_COORD26_EXT (0x87B7)"; case 0x87B8 /* GL_OUTPUT_TEXTURE_COORD27_EXT */: return "GL_OUTPUT_TEXTURE_COORD27_EXT (0x87B8)"; case 0x87B9 /* GL_OUTPUT_TEXTURE_COORD28_EXT */: return "GL_OUTPUT_TEXTURE_COORD28_EXT (0x87B9)"; case 0x87BA /* GL_OUTPUT_TEXTURE_COORD29_EXT */: return "GL_OUTPUT_TEXTURE_COORD29_EXT (0x87BA)"; case 0x87BB /* GL_OUTPUT_TEXTURE_COORD30_EXT */: return "GL_OUTPUT_TEXTURE_COORD30_EXT (0x87BB)"; case 0x87BC /* GL_OUTPUT_TEXTURE_COORD31_EXT */: return "GL_OUTPUT_TEXTURE_COORD31_EXT (0x87BC)"; case 0x87BD /* GL_OUTPUT_FOG_EXT */: return "GL_OUTPUT_FOG_EXT (0x87BD)"; case 0x87BE /* GL_SCALAR_EXT */: return "GL_SCALAR_EXT (0x87BE)"; case 0x87BF /* GL_VECTOR_EXT */: return "GL_VECTOR_EXT (0x87BF)"; case 0x87C0 /* GL_MATRIX_EXT */: return "GL_MATRIX_EXT (0x87C0)"; case 0x87C1 /* GL_VARIANT_EXT */: return "GL_VARIANT_EXT (0x87C1)"; case 0x87C2 /* GL_INVARIANT_EXT */: return "GL_INVARIANT_EXT (0x87C2)"; case 0x87C3 /* GL_LOCAL_CONSTANT_EXT */: return "GL_LOCAL_CONSTANT_EXT (0x87C3)"; case 0x87C4 /* GL_LOCAL_EXT */: return "GL_LOCAL_EXT (0x87C4)"; case 0x87C6 /* GL_MAX_VERTEX_SHADER_VARIANTS_EXT */: return "GL_MAX_VERTEX_SHADER_VARIANTS_EXT (0x87C6)"; case 0x87C7 /* GL_MAX_VERTEX_SHADER_INVARIANTS_EXT */: return "GL_MAX_VERTEX_SHADER_INVARIANTS_EXT (0x87C7)"; case 0x87C8 /* GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT */: return "GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT (0x87C8)"; case 0x87C9 /* GL_MAX_VERTEX_SHADER_LOCALS_EXT */: return "GL_MAX_VERTEX_SHADER_LOCALS_EXT (0x87C9)"; case 0x87CB /* GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT */: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT (0x87CB)"; case 0x87CC /* GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT */: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT (0x87CC)"; case 0x87CD /* GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT */: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT (0x87CD)"; case 0x87CE /* GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT */: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT (0x87CE)"; case 0x87D0 /* GL_VERTEX_SHADER_VARIANTS_EXT */: return "GL_VERTEX_SHADER_VARIANTS_EXT (0x87D0)"; case 0x87D1 /* GL_VERTEX_SHADER_INVARIANTS_EXT */: return "GL_VERTEX_SHADER_INVARIANTS_EXT (0x87D1)"; case 0x87D2 /* GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT */: return "GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT (0x87D2)"; case 0x87D3 /* GL_VERTEX_SHADER_LOCALS_EXT */: return "GL_VERTEX_SHADER_LOCALS_EXT (0x87D3)"; case 0x87D4 /* GL_VERTEX_SHADER_OPTIMIZED_EXT */: return "GL_VERTEX_SHADER_OPTIMIZED_EXT (0x87D4)"; case 0x87D5 /* GL_X_EXT */: return "GL_X_EXT (0x87D5)"; case 0x87D6 /* GL_Y_EXT */: return "GL_Y_EXT (0x87D6)"; case 0x87D7 /* GL_Z_EXT */: return "GL_Z_EXT (0x87D7)"; case 0x87D8 /* GL_W_EXT */: return "GL_W_EXT (0x87D8)"; case 0x87D9 /* GL_NEGATIVE_X_EXT */: return "GL_NEGATIVE_X_EXT (0x87D9)"; case 0x87DA /* GL_NEGATIVE_Y_EXT */: return "GL_NEGATIVE_Y_EXT (0x87DA)"; case 0x87DB /* GL_NEGATIVE_Z_EXT */: return "GL_NEGATIVE_Z_EXT (0x87DB)"; case 0x87DC /* GL_NEGATIVE_W_EXT */: return "GL_NEGATIVE_W_EXT (0x87DC)"; case 0x87DD /* GL_ZERO_EXT */: return "GL_ZERO_EXT (0x87DD)"; case 0x87DE /* GL_ONE_EXT */: return "GL_ONE_EXT (0x87DE)"; case 0x87DF /* GL_NEGATIVE_ONE_EXT */: return "GL_NEGATIVE_ONE_EXT (0x87DF)"; case 0x87E0 /* GL_NORMALIZED_RANGE_EXT */: return "GL_NORMALIZED_RANGE_EXT (0x87E0)"; case 0x87E1 /* GL_FULL_RANGE_EXT */: return "GL_FULL_RANGE_EXT (0x87E1)"; case 0x87E2 /* GL_CURRENT_VERTEX_EXT */: return "GL_CURRENT_VERTEX_EXT (0x87E2)"; case 0x87E3 /* GL_MVP_MATRIX_EXT */: return "GL_MVP_MATRIX_EXT (0x87E3)"; case 0x87E4 /* GL_VARIANT_VALUE_EXT */: return "GL_VARIANT_VALUE_EXT (0x87E4)"; case 0x87E5 /* GL_VARIANT_DATATYPE_EXT */: return "GL_VARIANT_DATATYPE_EXT (0x87E5)"; case 0x87E6 /* GL_VARIANT_ARRAY_STRIDE_EXT */: return "GL_VARIANT_ARRAY_STRIDE_EXT (0x87E6)"; case 0x87E7 /* GL_VARIANT_ARRAY_TYPE_EXT */: return "GL_VARIANT_ARRAY_TYPE_EXT (0x87E7)"; case 0x87E8 /* GL_VARIANT_ARRAY_EXT */: return "GL_VARIANT_ARRAY_EXT (0x87E8)"; case 0x87E9 /* GL_VARIANT_ARRAY_POINTER_EXT */: return "GL_VARIANT_ARRAY_POINTER_EXT (0x87E9)"; case 0x87EA /* GL_INVARIANT_VALUE_EXT */: return "GL_INVARIANT_VALUE_EXT (0x87EA)"; case 0x87EB /* GL_INVARIANT_DATATYPE_EXT */: return "GL_INVARIANT_DATATYPE_EXT (0x87EB)"; case 0x87EC /* GL_LOCAL_CONSTANT_VALUE_EXT */: return "GL_LOCAL_CONSTANT_VALUE_EXT (0x87EC)"; case 0x87ED /* GL_LOCAL_CONSTANT_DATATYPE_EXT */: return "GL_LOCAL_CONSTANT_DATATYPE_EXT (0x87ED)"; /* ------------------------ GL_EXT_vertex_weighting ------------------------ */ //case 0x0BA3 /* GL_MODELVIEW0_STACK_DEPTH_EXT */: return "GL_MODELVIEW0_STACK_DEPTH_EXT (0x0BA3)"; //case 0x0BA6 /* GL_MODELVIEW0_MATRIX_EXT */: return "GL_MODELVIEW0_MATRIX_EXT (0x0BA6)"; //case 0x1700 /* GL_MODELVIEW0_EXT */: return "GL_MODELVIEW0_EXT (0x1700)"; case 0x8502 /* GL_MODELVIEW1_STACK_DEPTH_EXT */: return "GL_MODELVIEW1_STACK_DEPTH_EXT (0x8502)"; case 0x8506 /* GL_MODELVIEW1_MATRIX_EXT */: return "GL_MODELVIEW1_MATRIX_EXT (0x8506)"; case 0x8509 /* GL_VERTEX_WEIGHTING_EXT */: return "GL_VERTEX_WEIGHTING_EXT (0x8509)"; //case 0x850A /* GL_MODELVIEW1_EXT */: return "GL_MODELVIEW1_EXT (0x850A)"; case 0x850B /* GL_CURRENT_VERTEX_WEIGHT_EXT */: return "GL_CURRENT_VERTEX_WEIGHT_EXT (0x850B)"; case 0x850C /* GL_VERTEX_WEIGHT_ARRAY_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_EXT (0x850C)"; case 0x850D /* GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT (0x850D)"; case 0x850E /* GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT (0x850E)"; case 0x850F /* GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT (0x850F)"; case 0x8510 /* GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT */: return "GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT (0x8510)"; /* ------------------------- GL_EXT_x11_sync_object ------------------------ */ case 0x90E1 /* GL_SYNC_X11_FENCE_EXT */: return "GL_SYNC_X11_FENCE_EXT (0x90E1)";/* ---------------------- GL_GREMEDY_frame_terminator ---------------------- */ /* ------------------------ GL_GREMEDY_string_marker ----------------------- */ /* --------------------- GL_HP_convolution_border_modes -------------------- */ /* ------------------------- GL_HP_image_transform ------------------------- */ /* -------------------------- GL_HP_occlusion_test ------------------------- */ case 0x8165 /* GL_OCCLUSION_TEST_HP */: return "GL_OCCLUSION_TEST_HP (0x8165)"; case 0x8166 /* GL_OCCLUSION_TEST_RESULT_HP */: return "GL_OCCLUSION_TEST_RESULT_HP (0x8166)"; /* ------------------------- GL_HP_texture_lighting ------------------------ */ /* --------------------------- GL_IBM_cull_vertex -------------------------- */ /* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */ /* ------------------------- GL_IBM_rasterpos_clip ------------------------- */ /* --------------------------- GL_IBM_static_data -------------------------- */ /* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */ //case 0x8370 /* GL_MIRRORED_REPEAT_IBM */: return "GL_MIRRORED_REPEAT_IBM (0x8370)"; /* ----------------------- GL_IBM_vertex_array_lists ----------------------- */ /* -------------------------- GL_INGR_color_clamp -------------------------- */ case 0x8560 /* GL_RED_MIN_CLAMP_INGR */: return "GL_RED_MIN_CLAMP_INGR (0x8560)"; case 0x8561 /* GL_GREEN_MIN_CLAMP_INGR */: return "GL_GREEN_MIN_CLAMP_INGR (0x8561)"; case 0x8562 /* GL_BLUE_MIN_CLAMP_INGR */: return "GL_BLUE_MIN_CLAMP_INGR (0x8562)"; case 0x8563 /* GL_ALPHA_MIN_CLAMP_INGR */: return "GL_ALPHA_MIN_CLAMP_INGR (0x8563)"; case 0x8564 /* GL_RED_MAX_CLAMP_INGR */: return "GL_RED_MAX_CLAMP_INGR (0x8564)"; case 0x8565 /* GL_GREEN_MAX_CLAMP_INGR */: return "GL_GREEN_MAX_CLAMP_INGR (0x8565)"; case 0x8566 /* GL_BLUE_MAX_CLAMP_INGR */: return "GL_BLUE_MAX_CLAMP_INGR (0x8566)"; case 0x8567 /* GL_ALPHA_MAX_CLAMP_INGR */: return "GL_ALPHA_MAX_CLAMP_INGR (0x8567)"; /* ------------------------- GL_INGR_interlace_read ------------------------ */ case 0x8568 /* GL_INTERLACE_READ_INGR */: return "GL_INTERLACE_READ_INGR (0x8568)"; /* ------------------------ GL_INTEL_parallel_arrays ----------------------- */ case 0x83F4 /* GL_PARALLEL_ARRAYS_INTEL */: return "GL_PARALLEL_ARRAYS_INTEL (0x83F4)"; case 0x83F5 /* GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL */: return "GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL (0x83F5)"; case 0x83F6 /* GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL */: return "GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL (0x83F6)"; case 0x83F7 /* GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL */: return "GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL (0x83F7)"; case 0x83F8 /* GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL */: return "GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL (0x83F8)"; /* ------------------------ GL_INTEL_texture_scissor ----------------------- */ /* ------------------------------ GL_KHR_debug ----------------------------- */ //case 0x00000002 /* GL_CONTEXT_FLAG_DEBUG_BIT */: return "GL_CONTEXT_FLAG_DEBUG_BIT (0x00000002)"; //case 0x0503 /* GL_STACK_OVERFLOW */: return "GL_STACK_OVERFLOW (0x0503)"; //case 0x0504 /* GL_STACK_UNDERFLOW */: return "GL_STACK_UNDERFLOW (0x0504)"; //case 0x8242 /* GL_DEBUG_OUTPUT_SYNCHRONOUS */: return "GL_DEBUG_OUTPUT_SYNCHRONOUS (0x8242)"; //case 0x8243 /* GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH */: return "GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH (0x8243)"; //case 0x8244 /* GL_DEBUG_CALLBACK_FUNCTION */: return "GL_DEBUG_CALLBACK_FUNCTION (0x8244)"; //case 0x8245 /* GL_DEBUG_CALLBACK_USER_PARAM */: return "GL_DEBUG_CALLBACK_USER_PARAM (0x8245)"; //case 0x8246 /* GL_DEBUG_SOURCE_API */: return "GL_DEBUG_SOURCE_API (0x8246)"; //case 0x8247 /* GL_DEBUG_SOURCE_WINDOW_SYSTEM */: return "GL_DEBUG_SOURCE_WINDOW_SYSTEM (0x8247)"; //case 0x8248 /* GL_DEBUG_SOURCE_SHADER_COMPILER */: return "GL_DEBUG_SOURCE_SHADER_COMPILER (0x8248)"; //case 0x8249 /* GL_DEBUG_SOURCE_THIRD_PARTY */: return "GL_DEBUG_SOURCE_THIRD_PARTY (0x8249)"; //case 0x824A /* GL_DEBUG_SOURCE_APPLICATION */: return "GL_DEBUG_SOURCE_APPLICATION (0x824A)"; //case 0x824B /* GL_DEBUG_SOURCE_OTHER */: return "GL_DEBUG_SOURCE_OTHER (0x824B)"; //case 0x824C /* GL_DEBUG_TYPE_ERROR */: return "GL_DEBUG_TYPE_ERROR (0x824C)"; //case 0x824D /* GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR */: return "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR (0x824D)"; //case 0x824E /* GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR */: return "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR (0x824E)"; //case 0x824F /* GL_DEBUG_TYPE_PORTABILITY */: return "GL_DEBUG_TYPE_PORTABILITY (0x824F)"; //case 0x8250 /* GL_DEBUG_TYPE_PERFORMANCE */: return "GL_DEBUG_TYPE_PERFORMANCE (0x8250)"; //case 0x8251 /* GL_DEBUG_TYPE_OTHER */: return "GL_DEBUG_TYPE_OTHER (0x8251)"; case 0x8268 /* GL_DEBUG_TYPE_MARKER */: return "GL_DEBUG_TYPE_MARKER (0x8268)"; case 0x8269 /* GL_DEBUG_TYPE_PUSH_GROUP */: return "GL_DEBUG_TYPE_PUSH_GROUP (0x8269)"; case 0x826A /* GL_DEBUG_TYPE_POP_GROUP */: return "GL_DEBUG_TYPE_POP_GROUP (0x826A)"; case 0x826B /* GL_DEBUG_SEVERITY_NOTIFICATION */: return "GL_DEBUG_SEVERITY_NOTIFICATION (0x826B)"; case 0x826C /* GL_MAX_DEBUG_GROUP_STACK_DEPTH */: return "GL_MAX_DEBUG_GROUP_STACK_DEPTH (0x826C)"; case 0x826D /* GL_DEBUG_GROUP_STACK_DEPTH */: return "GL_DEBUG_GROUP_STACK_DEPTH (0x826D)"; case 0x82E0 /* GL_BUFFER */: return "GL_BUFFER (0x82E0)"; case 0x82E1 /* GL_SHADER */: return "GL_SHADER (0x82E1)"; case 0x82E2 /* GL_PROGRAM */: return "GL_PROGRAM (0x82E2)"; case 0x82E3 /* GL_QUERY */: return "GL_QUERY (0x82E3)"; case 0x82E4 /* GL_PROGRAM_PIPELINE */: return "GL_PROGRAM_PIPELINE (0x82E4)"; case 0x82E6 /* GL_SAMPLER */: return "GL_SAMPLER (0x82E6)"; case 0x82E7 /* GL_DISPLAY_LIST */: return "GL_DISPLAY_LIST (0x82E7)"; case 0x82E8 /* GL_MAX_LABEL_LENGTH */: return "GL_MAX_LABEL_LENGTH (0x82E8)"; //case 0x9143 /* GL_MAX_DEBUG_MESSAGE_LENGTH */: return "GL_MAX_DEBUG_MESSAGE_LENGTH (0x9143)"; //case 0x9144 /* GL_MAX_DEBUG_LOGGED_MESSAGES */: return "GL_MAX_DEBUG_LOGGED_MESSAGES (0x9144)"; //case 0x9145 /* GL_DEBUG_LOGGED_MESSAGES */: return "GL_DEBUG_LOGGED_MESSAGES (0x9145)"; //case 0x9146 /* GL_DEBUG_SEVERITY_HIGH */: return "GL_DEBUG_SEVERITY_HIGH (0x9146)"; //case 0x9147 /* GL_DEBUG_SEVERITY_MEDIUM */: return "GL_DEBUG_SEVERITY_MEDIUM (0x9147)"; //case 0x9148 /* GL_DEBUG_SEVERITY_LOW */: return "GL_DEBUG_SEVERITY_LOW (0x9148)"; case 0x92E0 /* GL_DEBUG_OUTPUT */: return "GL_DEBUG_OUTPUT (0x92E0)";/* ------------------ GL_KHR_texture_compression_astc_ldr ------------------ */ case 0x93B0 /* GL_COMPRESSED_RGBA_ASTC_4x4_KHR */: return "GL_COMPRESSED_RGBA_ASTC_4x4_KHR (0x93B0)"; case 0x93B1 /* GL_COMPRESSED_RGBA_ASTC_5x4_KHR */: return "GL_COMPRESSED_RGBA_ASTC_5x4_KHR (0x93B1)"; case 0x93B2 /* GL_COMPRESSED_RGBA_ASTC_5x5_KHR */: return "GL_COMPRESSED_RGBA_ASTC_5x5_KHR (0x93B2)"; case 0x93B3 /* GL_COMPRESSED_RGBA_ASTC_6x5_KHR */: return "GL_COMPRESSED_RGBA_ASTC_6x5_KHR (0x93B3)"; case 0x93B4 /* GL_COMPRESSED_RGBA_ASTC_6x6_KHR */: return "GL_COMPRESSED_RGBA_ASTC_6x6_KHR (0x93B4)"; case 0x93B5 /* GL_COMPRESSED_RGBA_ASTC_8x5_KHR */: return "GL_COMPRESSED_RGBA_ASTC_8x5_KHR (0x93B5)"; case 0x93B6 /* GL_COMPRESSED_RGBA_ASTC_8x6_KHR */: return "GL_COMPRESSED_RGBA_ASTC_8x6_KHR (0x93B6)"; case 0x93B7 /* GL_COMPRESSED_RGBA_ASTC_8x8_KHR */: return "GL_COMPRESSED_RGBA_ASTC_8x8_KHR (0x93B7)"; case 0x93B8 /* GL_COMPRESSED_RGBA_ASTC_10x5_KHR */: return "GL_COMPRESSED_RGBA_ASTC_10x5_KHR (0x93B8)"; case 0x93B9 /* GL_COMPRESSED_RGBA_ASTC_10x6_KHR */: return "GL_COMPRESSED_RGBA_ASTC_10x6_KHR (0x93B9)"; case 0x93BA /* GL_COMPRESSED_RGBA_ASTC_10x8_KHR */: return "GL_COMPRESSED_RGBA_ASTC_10x8_KHR (0x93BA)"; case 0x93BB /* GL_COMPRESSED_RGBA_ASTC_10x10_KHR */: return "GL_COMPRESSED_RGBA_ASTC_10x10_KHR (0x93BB)"; case 0x93BC /* GL_COMPRESSED_RGBA_ASTC_12x10_KHR */: return "GL_COMPRESSED_RGBA_ASTC_12x10_KHR (0x93BC)"; case 0x93BD /* GL_COMPRESSED_RGBA_ASTC_12x12_KHR */: return "GL_COMPRESSED_RGBA_ASTC_12x12_KHR (0x93BD)"; case 0x93D0 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR (0x93D0)"; case 0x93D1 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR (0x93D1)"; case 0x93D2 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR (0x93D2)"; case 0x93D3 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR (0x93D3)"; case 0x93D4 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR (0x93D4)"; case 0x93D5 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR (0x93D5)"; case 0x93D6 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR (0x93D6)"; case 0x93D7 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR (0x93D7)"; case 0x93D8 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR (0x93D8)"; case 0x93D9 /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR (0x93D9)"; case 0x93DA /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR (0x93DA)"; case 0x93DB /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR (0x93DB)"; case 0x93DC /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR (0x93DC)"; case 0x93DD /* GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR */: return "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR (0x93DD)"; /* -------------------------- GL_KTX_buffer_region ------------------------- */ //case 0x0 /* GL_KTX_FRONT_REGION */: return "GL_KTX_FRONT_REGION (0x0)"; //case 0x1 /* GL_KTX_BACK_REGION */: return "GL_KTX_BACK_REGION (0x1)"; //case 0x2 /* GL_KTX_Z_REGION */: return "GL_KTX_Z_REGION (0x2)"; //case 0x3 /* GL_KTX_STENCIL_REGION */: return "GL_KTX_STENCIL_REGION (0x3)"; /* ------------------------- GL_MESAX_texture_stack ------------------------ */ case 0x8759 /* GL_TEXTURE_1D_STACK_MESAX */: return "GL_TEXTURE_1D_STACK_MESAX (0x8759)"; case 0x875A /* GL_TEXTURE_2D_STACK_MESAX */: return "GL_TEXTURE_2D_STACK_MESAX (0x875A)"; case 0x875B /* GL_PROXY_TEXTURE_1D_STACK_MESAX */: return "GL_PROXY_TEXTURE_1D_STACK_MESAX (0x875B)"; case 0x875C /* GL_PROXY_TEXTURE_2D_STACK_MESAX */: return "GL_PROXY_TEXTURE_2D_STACK_MESAX (0x875C)"; case 0x875D /* GL_TEXTURE_1D_STACK_BINDING_MESAX */: return "GL_TEXTURE_1D_STACK_BINDING_MESAX (0x875D)"; case 0x875E /* GL_TEXTURE_2D_STACK_BINDING_MESAX */: return "GL_TEXTURE_2D_STACK_BINDING_MESAX (0x875E)"; /* -------------------------- GL_MESA_pack_invert -------------------------- */ case 0x8758 /* GL_PACK_INVERT_MESA */: return "GL_PACK_INVERT_MESA (0x8758)"; /* ------------------------- GL_MESA_resize_buffers ------------------------ */ /* --------------------------- GL_MESA_window_pos -------------------------- */ /* ------------------------- GL_MESA_ycbcr_texture ------------------------- */ //case 0x85BA /* GL_UNSIGNED_SHORT_8_8_MESA */: return "GL_UNSIGNED_SHORT_8_8_MESA (0x85BA)"; //case 0x85BB /* GL_UNSIGNED_SHORT_8_8_REV_MESA */: return "GL_UNSIGNED_SHORT_8_8_REV_MESA (0x85BB)"; case 0x8757 /* GL_YCBCR_MESA */: return "GL_YCBCR_MESA (0x8757)"; /* ------------------------- GL_NVX_gpu_memory_info ------------------------ */ case 0x9047 /* GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX */: return "GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX (0x9047)"; case 0x9048 /* GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX */: return "GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX (0x9048)"; case 0x9049 /* GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX */: return "GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX (0x9049)"; case 0x904A /* GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX */: return "GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX (0x904A)"; case 0x904B /* GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX */: return "GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX (0x904B)"; /* ------------------------- GL_NV_bindless_texture ------------------------ */ /* --------------------------- GL_NV_blend_square -------------------------- */ /* ------------------------ GL_NV_conditional_render ----------------------- */ //case 0x8E13 /* GL_QUERY_WAIT_NV */: return "GL_QUERY_WAIT_NV (0x8E13)"; //case 0x8E14 /* GL_QUERY_NO_WAIT_NV */: return "GL_QUERY_NO_WAIT_NV (0x8E14)"; //case 0x8E15 /* GL_QUERY_BY_REGION_WAIT_NV */: return "GL_QUERY_BY_REGION_WAIT_NV (0x8E15)"; //case 0x8E16 /* GL_QUERY_BY_REGION_NO_WAIT_NV */: return "GL_QUERY_BY_REGION_NO_WAIT_NV (0x8E16)"; /* ----------------------- GL_NV_copy_depth_to_color ----------------------- */ case 0x886E /* GL_DEPTH_STENCIL_TO_RGBA_NV */: return "GL_DEPTH_STENCIL_TO_RGBA_NV (0x886E)"; case 0x886F /* GL_DEPTH_STENCIL_TO_BGRA_NV */: return "GL_DEPTH_STENCIL_TO_BGRA_NV (0x886F)"; /* ---------------------------- GL_NV_copy_image --------------------------- */ /* ------------------------ GL_NV_depth_buffer_float ----------------------- */ case 0x8DAB /* GL_DEPTH_COMPONENT32F_NV */: return "GL_DEPTH_COMPONENT32F_NV (0x8DAB)"; case 0x8DAC /* GL_DEPTH32F_STENCIL8_NV */: return "GL_DEPTH32F_STENCIL8_NV (0x8DAC)"; //case 0x8DAD /* GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV */: return "GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV (0x8DAD)"; case 0x8DAF /* GL_DEPTH_BUFFER_FLOAT_MODE_NV */: return "GL_DEPTH_BUFFER_FLOAT_MODE_NV (0x8DAF)"; /* --------------------------- GL_NV_depth_clamp --------------------------- */ //case 0x864F /* GL_DEPTH_CLAMP_NV */: return "GL_DEPTH_CLAMP_NV (0x864F)"; /* ---------------------- GL_NV_depth_range_unclamped ---------------------- */ //case 0x8864 /* GL_SAMPLE_COUNT_BITS_NV */: return "GL_SAMPLE_COUNT_BITS_NV (0x8864)"; //case 0x8865 /* GL_CURRENT_SAMPLE_COUNT_QUERY_NV */: return "GL_CURRENT_SAMPLE_COUNT_QUERY_NV (0x8865)"; //case 0x8866 /* GL_QUERY_RESULT_NV */: return "GL_QUERY_RESULT_NV (0x8866)"; //case 0x8867 /* GL_QUERY_RESULT_AVAILABLE_NV */: return "GL_QUERY_RESULT_AVAILABLE_NV (0x8867)"; //case 0x8914 /* GL_SAMPLE_COUNT_NV */: return "GL_SAMPLE_COUNT_NV (0x8914)"; /* ---------------------------- GL_NV_evaluators --------------------------- */ case 0x86C0 /* GL_EVAL_2D_NV */: return "GL_EVAL_2D_NV (0x86C0)"; case 0x86C1 /* GL_EVAL_TRIANGULAR_2D_NV */: return "GL_EVAL_TRIANGULAR_2D_NV (0x86C1)"; case 0x86C2 /* GL_MAP_TESSELLATION_NV */: return "GL_MAP_TESSELLATION_NV (0x86C2)"; case 0x86C3 /* GL_MAP_ATTRIB_U_ORDER_NV */: return "GL_MAP_ATTRIB_U_ORDER_NV (0x86C3)"; case 0x86C4 /* GL_MAP_ATTRIB_V_ORDER_NV */: return "GL_MAP_ATTRIB_V_ORDER_NV (0x86C4)"; case 0x86C5 /* GL_EVAL_FRACTIONAL_TESSELLATION_NV */: return "GL_EVAL_FRACTIONAL_TESSELLATION_NV (0x86C5)"; case 0x86C6 /* GL_EVAL_VERTEX_ATTRIB0_NV */: return "GL_EVAL_VERTEX_ATTRIB0_NV (0x86C6)"; case 0x86C7 /* GL_EVAL_VERTEX_ATTRIB1_NV */: return "GL_EVAL_VERTEX_ATTRIB1_NV (0x86C7)"; case 0x86C8 /* GL_EVAL_VERTEX_ATTRIB2_NV */: return "GL_EVAL_VERTEX_ATTRIB2_NV (0x86C8)"; case 0x86C9 /* GL_EVAL_VERTEX_ATTRIB3_NV */: return "GL_EVAL_VERTEX_ATTRIB3_NV (0x86C9)"; case 0x86CA /* GL_EVAL_VERTEX_ATTRIB4_NV */: return "GL_EVAL_VERTEX_ATTRIB4_NV (0x86CA)"; case 0x86CB /* GL_EVAL_VERTEX_ATTRIB5_NV */: return "GL_EVAL_VERTEX_ATTRIB5_NV (0x86CB)"; case 0x86CC /* GL_EVAL_VERTEX_ATTRIB6_NV */: return "GL_EVAL_VERTEX_ATTRIB6_NV (0x86CC)"; case 0x86CD /* GL_EVAL_VERTEX_ATTRIB7_NV */: return "GL_EVAL_VERTEX_ATTRIB7_NV (0x86CD)"; case 0x86CE /* GL_EVAL_VERTEX_ATTRIB8_NV */: return "GL_EVAL_VERTEX_ATTRIB8_NV (0x86CE)"; case 0x86CF /* GL_EVAL_VERTEX_ATTRIB9_NV */: return "GL_EVAL_VERTEX_ATTRIB9_NV (0x86CF)"; case 0x86D0 /* GL_EVAL_VERTEX_ATTRIB10_NV */: return "GL_EVAL_VERTEX_ATTRIB10_NV (0x86D0)"; case 0x86D1 /* GL_EVAL_VERTEX_ATTRIB11_NV */: return "GL_EVAL_VERTEX_ATTRIB11_NV (0x86D1)"; case 0x86D2 /* GL_EVAL_VERTEX_ATTRIB12_NV */: return "GL_EVAL_VERTEX_ATTRIB12_NV (0x86D2)"; case 0x86D3 /* GL_EVAL_VERTEX_ATTRIB13_NV */: return "GL_EVAL_VERTEX_ATTRIB13_NV (0x86D3)"; case 0x86D4 /* GL_EVAL_VERTEX_ATTRIB14_NV */: return "GL_EVAL_VERTEX_ATTRIB14_NV (0x86D4)"; case 0x86D5 /* GL_EVAL_VERTEX_ATTRIB15_NV */: return "GL_EVAL_VERTEX_ATTRIB15_NV (0x86D5)"; case 0x86D6 /* GL_MAX_MAP_TESSELLATION_NV */: return "GL_MAX_MAP_TESSELLATION_NV (0x86D6)"; case 0x86D7 /* GL_MAX_RATIONAL_EVAL_ORDER_NV */: return "GL_MAX_RATIONAL_EVAL_ORDER_NV (0x86D7)"; /* ----------------------- GL_NV_explicit_multisample ---------------------- */ //case 0x8E50 /* GL_SAMPLE_POSITION_NV */: return "GL_SAMPLE_POSITION_NV (0x8E50)"; //case 0x8E51 /* GL_SAMPLE_MASK_NV */: return "GL_SAMPLE_MASK_NV (0x8E51)"; //case 0x8E52 /* GL_SAMPLE_MASK_VALUE_NV */: return "GL_SAMPLE_MASK_VALUE_NV (0x8E52)"; case 0x8E53 /* GL_TEXTURE_BINDING_RENDERBUFFER_NV */: return "GL_TEXTURE_BINDING_RENDERBUFFER_NV (0x8E53)"; case 0x8E54 /* GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV */: return "GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV (0x8E54)"; case 0x8E55 /* GL_TEXTURE_RENDERBUFFER_NV */: return "GL_TEXTURE_RENDERBUFFER_NV (0x8E55)"; case 0x8E56 /* GL_SAMPLER_RENDERBUFFER_NV */: return "GL_SAMPLER_RENDERBUFFER_NV (0x8E56)"; case 0x8E57 /* GL_INT_SAMPLER_RENDERBUFFER_NV */: return "GL_INT_SAMPLER_RENDERBUFFER_NV (0x8E57)"; case 0x8E58 /* GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV */: return "GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV (0x8E58)"; //case 0x8E59 /* GL_MAX_SAMPLE_MASK_WORDS_NV */: return "GL_MAX_SAMPLE_MASK_WORDS_NV (0x8E59)"; /* ------------------------------ GL_NV_fence ------------------------------ */ case 0x84F2 /* GL_ALL_COMPLETED_NV */: return "GL_ALL_COMPLETED_NV (0x84F2)"; case 0x84F3 /* GL_FENCE_STATUS_NV */: return "GL_FENCE_STATUS_NV (0x84F3)"; case 0x84F4 /* GL_FENCE_CONDITION_NV */: return "GL_FENCE_CONDITION_NV (0x84F4)"; /* --------------------------- GL_NV_float_buffer -------------------------- */ case 0x8880 /* GL_FLOAT_R_NV */: return "GL_FLOAT_R_NV (0x8880)"; case 0x8881 /* GL_FLOAT_RG_NV */: return "GL_FLOAT_RG_NV (0x8881)"; case 0x8882 /* GL_FLOAT_RGB_NV */: return "GL_FLOAT_RGB_NV (0x8882)"; case 0x8883 /* GL_FLOAT_RGBA_NV */: return "GL_FLOAT_RGBA_NV (0x8883)"; case 0x8884 /* GL_FLOAT_R16_NV */: return "GL_FLOAT_R16_NV (0x8884)"; case 0x8885 /* GL_FLOAT_R32_NV */: return "GL_FLOAT_R32_NV (0x8885)"; case 0x8886 /* GL_FLOAT_RG16_NV */: return "GL_FLOAT_RG16_NV (0x8886)"; case 0x8887 /* GL_FLOAT_RG32_NV */: return "GL_FLOAT_RG32_NV (0x8887)"; case 0x8888 /* GL_FLOAT_RGB16_NV */: return "GL_FLOAT_RGB16_NV (0x8888)"; case 0x8889 /* GL_FLOAT_RGB32_NV */: return "GL_FLOAT_RGB32_NV (0x8889)"; case 0x888A /* GL_FLOAT_RGBA16_NV */: return "GL_FLOAT_RGBA16_NV (0x888A)"; case 0x888B /* GL_FLOAT_RGBA32_NV */: return "GL_FLOAT_RGBA32_NV (0x888B)"; case 0x888C /* GL_TEXTURE_FLOAT_COMPONENTS_NV */: return "GL_TEXTURE_FLOAT_COMPONENTS_NV (0x888C)"; case 0x888D /* GL_FLOAT_CLEAR_COLOR_VALUE_NV */: return "GL_FLOAT_CLEAR_COLOR_VALUE_NV (0x888D)"; case 0x888E /* GL_FLOAT_RGBA_MODE_NV */: return "GL_FLOAT_RGBA_MODE_NV (0x888E)"; /* --------------------------- GL_NV_fog_distance -------------------------- */ case 0x855A /* GL_FOG_DISTANCE_MODE_NV */: return "GL_FOG_DISTANCE_MODE_NV (0x855A)"; case 0x855B /* GL_EYE_RADIAL_NV */: return "GL_EYE_RADIAL_NV (0x855B)"; case 0x855C /* GL_EYE_PLANE_ABSOLUTE_NV */: return "GL_EYE_PLANE_ABSOLUTE_NV (0x855C)"; /* ------------------------- GL_NV_fragment_program ------------------------ */ case 0x8868 /* GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV */: return "GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV (0x8868)"; case 0x8870 /* GL_FRAGMENT_PROGRAM_NV */: return "GL_FRAGMENT_PROGRAM_NV (0x8870)"; //case 0x8871 /* GL_MAX_TEXTURE_COORDS_NV */: return "GL_MAX_TEXTURE_COORDS_NV (0x8871)"; //case 0x8872 /* GL_MAX_TEXTURE_IMAGE_UNITS_NV */: return "GL_MAX_TEXTURE_IMAGE_UNITS_NV (0x8872)"; case 0x8873 /* GL_FRAGMENT_PROGRAM_BINDING_NV */: return "GL_FRAGMENT_PROGRAM_BINDING_NV (0x8873)"; //case 0x8874 /* GL_PROGRAM_ERROR_STRING_NV */: return "GL_PROGRAM_ERROR_STRING_NV (0x8874)";/* ------------------------ GL_NV_fragment_program2 ------------------------ */ case 0x88F5 /* GL_MAX_PROGRAM_CALL_DEPTH_NV */: return "GL_MAX_PROGRAM_CALL_DEPTH_NV (0x88F5)"; case 0x88F6 /* GL_MAX_PROGRAM_IF_DEPTH_NV */: return "GL_MAX_PROGRAM_IF_DEPTH_NV (0x88F6)"; case 0x88F7 /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */: return "GL_MAX_PROGRAM_LOOP_DEPTH_NV (0x88F7)"; case 0x88F8 /* GL_MAX_PROGRAM_LOOP_COUNT_NV */: return "GL_MAX_PROGRAM_LOOP_COUNT_NV (0x88F8)"; /* ------------------------ GL_NV_fragment_program4 ------------------------ */ /* --------------------- GL_NV_fragment_program_option --------------------- */ /* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */ //case 0x8CAB /* GL_RENDERBUFFER_COVERAGE_SAMPLES_NV */: return "GL_RENDERBUFFER_COVERAGE_SAMPLES_NV (0x8CAB)"; case 0x8E10 /* GL_RENDERBUFFER_COLOR_SAMPLES_NV */: return "GL_RENDERBUFFER_COLOR_SAMPLES_NV (0x8E10)"; case 0x8E11 /* GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV */: return "GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV (0x8E11)"; case 0x8E12 /* GL_MULTISAMPLE_COVERAGE_MODES_NV */: return "GL_MULTISAMPLE_COVERAGE_MODES_NV (0x8E12)";/* ------------------------ GL_NV_geometry_program4 ------------------------ */ case 0x8C26 /* GL_GEOMETRY_PROGRAM_NV */: return "GL_GEOMETRY_PROGRAM_NV (0x8C26)"; case 0x8C27 /* GL_MAX_PROGRAM_OUTPUT_VERTICES_NV */: return "GL_MAX_PROGRAM_OUTPUT_VERTICES_NV (0x8C27)"; case 0x8C28 /* GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV */: return "GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV (0x8C28)";/* ------------------------- GL_NV_geometry_shader4 ------------------------ */ /* --------------------------- GL_NV_gpu_program4 -------------------------- */ //case 0x8904 /* GL_MIN_PROGRAM_TEXEL_OFFSET_NV */: return "GL_MIN_PROGRAM_TEXEL_OFFSET_NV (0x8904)"; //case 0x8905 /* GL_MAX_PROGRAM_TEXEL_OFFSET_NV */: return "GL_MAX_PROGRAM_TEXEL_OFFSET_NV (0x8905)"; case 0x8906 /* GL_PROGRAM_ATTRIB_COMPONENTS_NV */: return "GL_PROGRAM_ATTRIB_COMPONENTS_NV (0x8906)"; case 0x8907 /* GL_PROGRAM_RESULT_COMPONENTS_NV */: return "GL_PROGRAM_RESULT_COMPONENTS_NV (0x8907)"; case 0x8908 /* GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV */: return "GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV (0x8908)"; case 0x8909 /* GL_MAX_PROGRAM_RESULT_COMPONENTS_NV */: return "GL_MAX_PROGRAM_RESULT_COMPONENTS_NV (0x8909)"; case 0x8DA5 /* GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV */: return "GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV (0x8DA5)"; case 0x8DA6 /* GL_MAX_PROGRAM_GENERIC_RESULTS_NV */: return "GL_MAX_PROGRAM_GENERIC_RESULTS_NV (0x8DA6)"; /* --------------------------- GL_NV_gpu_program5 -------------------------- */ //case 0x8E5A /* GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV */: return "GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV (0x8E5A)"; //case 0x8E5B /* GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV */: return "GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV (0x8E5B)"; //case 0x8E5C /* GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV */: return "GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV (0x8E5C)"; //case 0x8E5D /* GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV */: return "GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV (0x8E5D)"; //case 0x8E5E /* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV */: return "GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV (0x8E5E)"; //case 0x8E5F /* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV */: return "GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV (0x8E5F)"; /* ------------------------- GL_NV_gpu_program_fp64 ------------------------ */ /* --------------------------- GL_NV_gpu_shader5 --------------------------- */ case 0x140E /* GL_INT64_NV */: return "GL_INT64_NV (0x140E)"; case 0x140F /* GL_UNSIGNED_INT64_NV */: return "GL_UNSIGNED_INT64_NV (0x140F)"; case 0x8FE0 /* GL_INT8_NV */: return "GL_INT8_NV (0x8FE0)"; case 0x8FE1 /* GL_INT8_VEC2_NV */: return "GL_INT8_VEC2_NV (0x8FE1)"; case 0x8FE2 /* GL_INT8_VEC3_NV */: return "GL_INT8_VEC3_NV (0x8FE2)"; case 0x8FE3 /* GL_INT8_VEC4_NV */: return "GL_INT8_VEC4_NV (0x8FE3)"; case 0x8FE4 /* GL_INT16_NV */: return "GL_INT16_NV (0x8FE4)"; case 0x8FE5 /* GL_INT16_VEC2_NV */: return "GL_INT16_VEC2_NV (0x8FE5)"; case 0x8FE6 /* GL_INT16_VEC3_NV */: return "GL_INT16_VEC3_NV (0x8FE6)"; case 0x8FE7 /* GL_INT16_VEC4_NV */: return "GL_INT16_VEC4_NV (0x8FE7)"; case 0x8FE9 /* GL_INT64_VEC2_NV */: return "GL_INT64_VEC2_NV (0x8FE9)"; case 0x8FEA /* GL_INT64_VEC3_NV */: return "GL_INT64_VEC3_NV (0x8FEA)"; case 0x8FEB /* GL_INT64_VEC4_NV */: return "GL_INT64_VEC4_NV (0x8FEB)"; case 0x8FEC /* GL_UNSIGNED_INT8_NV */: return "GL_UNSIGNED_INT8_NV (0x8FEC)"; case 0x8FED /* GL_UNSIGNED_INT8_VEC2_NV */: return "GL_UNSIGNED_INT8_VEC2_NV (0x8FED)"; case 0x8FEE /* GL_UNSIGNED_INT8_VEC3_NV */: return "GL_UNSIGNED_INT8_VEC3_NV (0x8FEE)"; case 0x8FEF /* GL_UNSIGNED_INT8_VEC4_NV */: return "GL_UNSIGNED_INT8_VEC4_NV (0x8FEF)"; case 0x8FF0 /* GL_UNSIGNED_INT16_NV */: return "GL_UNSIGNED_INT16_NV (0x8FF0)"; case 0x8FF1 /* GL_UNSIGNED_INT16_VEC2_NV */: return "GL_UNSIGNED_INT16_VEC2_NV (0x8FF1)"; case 0x8FF2 /* GL_UNSIGNED_INT16_VEC3_NV */: return "GL_UNSIGNED_INT16_VEC3_NV (0x8FF2)"; case 0x8FF3 /* GL_UNSIGNED_INT16_VEC4_NV */: return "GL_UNSIGNED_INT16_VEC4_NV (0x8FF3)"; case 0x8FF5 /* GL_UNSIGNED_INT64_VEC2_NV */: return "GL_UNSIGNED_INT64_VEC2_NV (0x8FF5)"; case 0x8FF6 /* GL_UNSIGNED_INT64_VEC3_NV */: return "GL_UNSIGNED_INT64_VEC3_NV (0x8FF6)"; case 0x8FF7 /* GL_UNSIGNED_INT64_VEC4_NV */: return "GL_UNSIGNED_INT64_VEC4_NV (0x8FF7)"; case 0x8FF8 /* GL_FLOAT16_NV */: return "GL_FLOAT16_NV (0x8FF8)"; case 0x8FF9 /* GL_FLOAT16_VEC2_NV */: return "GL_FLOAT16_VEC2_NV (0x8FF9)"; case 0x8FFA /* GL_FLOAT16_VEC3_NV */: return "GL_FLOAT16_VEC3_NV (0x8FFA)"; case 0x8FFB /* GL_FLOAT16_VEC4_NV */: return "GL_FLOAT16_VEC4_NV (0x8FFB)"; /* ---------------------------- GL_NV_half_float --------------------------- */ //case 0x140B /* GL_HALF_FLOAT_NV */: return "GL_HALF_FLOAT_NV (0x140B)"; /* ------------------------ GL_NV_light_max_exponent ----------------------- */ case 0x8504 /* GL_MAX_SHININESS_NV */: return "GL_MAX_SHININESS_NV (0x8504)"; case 0x8505 /* GL_MAX_SPOT_EXPONENT_NV */: return "GL_MAX_SPOT_EXPONENT_NV (0x8505)"; /* ----------------------- GL_NV_multisample_coverage ---------------------- */ //case 0x80A9 /* GL_COVERAGE_SAMPLES_NV */: return "GL_COVERAGE_SAMPLES_NV (0x80A9)"; case 0x8E20 /* GL_COLOR_SAMPLES_NV */: return "GL_COLOR_SAMPLES_NV (0x8E20)"; /* --------------------- GL_NV_multisample_filter_hint --------------------- */ case 0x8534 /* GL_MULTISAMPLE_FILTER_HINT_NV */: return "GL_MULTISAMPLE_FILTER_HINT_NV (0x8534)"; /* ------------------------- GL_NV_occlusion_query ------------------------- */ //case 0x8864 /* GL_PIXEL_COUNTER_BITS_NV */: return "GL_PIXEL_COUNTER_BITS_NV (0x8864)"; //case 0x8865 /* GL_CURRENT_OCCLUSION_QUERY_ID_NV */: return "GL_CURRENT_OCCLUSION_QUERY_ID_NV (0x8865)"; //case 0x8866 /* GL_PIXEL_COUNT_NV */: return "GL_PIXEL_COUNT_NV (0x8866)"; //case 0x8867 /* GL_PIXEL_COUNT_AVAILABLE_NV */: return "GL_PIXEL_COUNT_AVAILABLE_NV (0x8867)"; /* ----------------------- GL_NV_packed_depth_stencil ---------------------- */ //case 0x84F9 /* GL_DEPTH_STENCIL_NV */: return "GL_DEPTH_STENCIL_NV (0x84F9)"; //case 0x84FA /* GL_UNSIGNED_INT_24_8_NV */: return "GL_UNSIGNED_INT_24_8_NV (0x84FA)"; /* --------------------- GL_NV_parameter_buffer_object --------------------- */ case 0x8DA0 /* GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV */: return "GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV (0x8DA0)"; case 0x8DA1 /* GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV */: return "GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV (0x8DA1)"; case 0x8DA2 /* GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV (0x8DA2)"; case 0x8DA3 /* GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV (0x8DA3)"; case 0x8DA4 /* GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV (0x8DA4)"; /* --------------------- GL_NV_parameter_buffer_object2 -------------------- */ /* -------------------------- GL_NV_path_rendering ------------------------- */ //case 0x00 /* GL_CLOSE_PATH_NV */: return "GL_CLOSE_PATH_NV (0x00)"; //case 0x01 /* GL_BOLD_BIT_NV */: return "GL_BOLD_BIT_NV (0x01)"; //case 0x01 /* GL_GLYPH_WIDTH_BIT_NV */: return "GL_GLYPH_WIDTH_BIT_NV (0x01)"; //case 0x02 /* GL_GLYPH_HEIGHT_BIT_NV */: return "GL_GLYPH_HEIGHT_BIT_NV (0x02)"; //case 0x02 /* GL_ITALIC_BIT_NV */: return "GL_ITALIC_BIT_NV (0x02)"; //case 0x02 /* GL_MOVE_TO_NV */: return "GL_MOVE_TO_NV (0x02)"; //case 0x03 /* GL_RELATIVE_MOVE_TO_NV */: return "GL_RELATIVE_MOVE_TO_NV (0x03)"; //case 0x04 /* GL_LINE_TO_NV */: return "GL_LINE_TO_NV (0x04)"; //case 0x04 /* GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV */: return "GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV (0x04)"; //case 0x05 /* GL_RELATIVE_LINE_TO_NV */: return "GL_RELATIVE_LINE_TO_NV (0x05)"; //case 0x06 /* GL_HORIZONTAL_LINE_TO_NV */: return "GL_HORIZONTAL_LINE_TO_NV (0x06)"; //case 0x07 /* GL_RELATIVE_HORIZONTAL_LINE_TO_NV */: return "GL_RELATIVE_HORIZONTAL_LINE_TO_NV (0x07)"; //case 0x08 /* GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV */: return "GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV (0x08)"; //case 0x08 /* GL_VERTICAL_LINE_TO_NV */: return "GL_VERTICAL_LINE_TO_NV (0x08)"; //case 0x09 /* GL_RELATIVE_VERTICAL_LINE_TO_NV */: return "GL_RELATIVE_VERTICAL_LINE_TO_NV (0x09)"; //case 0x0A /* GL_QUADRATIC_CURVE_TO_NV */: return "GL_QUADRATIC_CURVE_TO_NV (0x0A)"; //case 0x0B /* GL_RELATIVE_QUADRATIC_CURVE_TO_NV */: return "GL_RELATIVE_QUADRATIC_CURVE_TO_NV (0x0B)"; //case 0x0C /* GL_CUBIC_CURVE_TO_NV */: return "GL_CUBIC_CURVE_TO_NV (0x0C)"; //case 0x0D /* GL_RELATIVE_CUBIC_CURVE_TO_NV */: return "GL_RELATIVE_CUBIC_CURVE_TO_NV (0x0D)"; //case 0x0E /* GL_SMOOTH_QUADRATIC_CURVE_TO_NV */: return "GL_SMOOTH_QUADRATIC_CURVE_TO_NV (0x0E)"; case 0x0F /* GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV */: return "GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV (0x0F)"; //case 0x10 /* GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV */: return "GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV (0x10)"; //case 0x10 /* GL_SMOOTH_CUBIC_CURVE_TO_NV */: return "GL_SMOOTH_CUBIC_CURVE_TO_NV (0x10)"; case 0x11 /* GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV */: return "GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV (0x11)"; case 0x12 /* GL_SMALL_CCW_ARC_TO_NV */: return "GL_SMALL_CCW_ARC_TO_NV (0x12)"; case 0x13 /* GL_RELATIVE_SMALL_CCW_ARC_TO_NV */: return "GL_RELATIVE_SMALL_CCW_ARC_TO_NV (0x13)"; case 0x14 /* GL_SMALL_CW_ARC_TO_NV */: return "GL_SMALL_CW_ARC_TO_NV (0x14)"; case 0x15 /* GL_RELATIVE_SMALL_CW_ARC_TO_NV */: return "GL_RELATIVE_SMALL_CW_ARC_TO_NV (0x15)"; case 0x16 /* GL_LARGE_CCW_ARC_TO_NV */: return "GL_LARGE_CCW_ARC_TO_NV (0x16)"; case 0x17 /* GL_RELATIVE_LARGE_CCW_ARC_TO_NV */: return "GL_RELATIVE_LARGE_CCW_ARC_TO_NV (0x17)"; case 0x18 /* GL_LARGE_CW_ARC_TO_NV */: return "GL_LARGE_CW_ARC_TO_NV (0x18)"; case 0x19 /* GL_RELATIVE_LARGE_CW_ARC_TO_NV */: return "GL_RELATIVE_LARGE_CW_ARC_TO_NV (0x19)"; //case 0x20 /* GL_GLYPH_VERTICAL_BEARING_X_BIT_NV */: return "GL_GLYPH_VERTICAL_BEARING_X_BIT_NV (0x20)"; //case 0x40 /* GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV */: return "GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV (0x40)"; //case 0x80 /* GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV */: return "GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV (0x80)"; case 0xF0 /* GL_RESTART_PATH_NV */: return "GL_RESTART_PATH_NV (0xF0)"; case 0xF2 /* GL_DUP_FIRST_CUBIC_CURVE_TO_NV */: return "GL_DUP_FIRST_CUBIC_CURVE_TO_NV (0xF2)"; case 0xF4 /* GL_DUP_LAST_CUBIC_CURVE_TO_NV */: return "GL_DUP_LAST_CUBIC_CURVE_TO_NV (0xF4)"; case 0xF6 /* GL_RECT_NV */: return "GL_RECT_NV (0xF6)"; case 0xF8 /* GL_CIRCULAR_CCW_ARC_TO_NV */: return "GL_CIRCULAR_CCW_ARC_TO_NV (0xF8)"; case 0xFA /* GL_CIRCULAR_CW_ARC_TO_NV */: return "GL_CIRCULAR_CW_ARC_TO_NV (0xFA)"; case 0xFC /* GL_CIRCULAR_TANGENT_ARC_TO_NV */: return "GL_CIRCULAR_TANGENT_ARC_TO_NV (0xFC)"; case 0xFE /* GL_ARC_TO_NV */: return "GL_ARC_TO_NV (0xFE)"; case 0xFF /* GL_RELATIVE_ARC_TO_NV */: return "GL_RELATIVE_ARC_TO_NV (0xFF)"; //case 0x100 /* GL_GLYPH_HAS_KERNING_BIT_NV */: return "GL_GLYPH_HAS_KERNING_BIT_NV (0x100)"; case 0x852C /* GL_PRIMARY_COLOR_NV */: return "GL_PRIMARY_COLOR_NV (0x852C)"; case 0x852D /* GL_SECONDARY_COLOR_NV */: return "GL_SECONDARY_COLOR_NV (0x852D)"; //case 0x8577 /* GL_PRIMARY_COLOR */: return "GL_PRIMARY_COLOR (0x8577)"; case 0x9070 /* GL_PATH_FORMAT_SVG_NV */: return "GL_PATH_FORMAT_SVG_NV (0x9070)"; case 0x9071 /* GL_PATH_FORMAT_PS_NV */: return "GL_PATH_FORMAT_PS_NV (0x9071)"; case 0x9072 /* GL_STANDARD_FONT_NAME_NV */: return "GL_STANDARD_FONT_NAME_NV (0x9072)"; case 0x9073 /* GL_SYSTEM_FONT_NAME_NV */: return "GL_SYSTEM_FONT_NAME_NV (0x9073)"; case 0x9074 /* GL_FILE_NAME_NV */: return "GL_FILE_NAME_NV (0x9074)"; case 0x9075 /* GL_PATH_STROKE_WIDTH_NV */: return "GL_PATH_STROKE_WIDTH_NV (0x9075)"; case 0x9076 /* GL_PATH_END_CAPS_NV */: return "GL_PATH_END_CAPS_NV (0x9076)"; case 0x9077 /* GL_PATH_INITIAL_END_CAP_NV */: return "GL_PATH_INITIAL_END_CAP_NV (0x9077)"; case 0x9078 /* GL_PATH_TERMINAL_END_CAP_NV */: return "GL_PATH_TERMINAL_END_CAP_NV (0x9078)"; case 0x9079 /* GL_PATH_JOIN_STYLE_NV */: return "GL_PATH_JOIN_STYLE_NV (0x9079)"; case 0x907A /* GL_PATH_MITER_LIMIT_NV */: return "GL_PATH_MITER_LIMIT_NV (0x907A)"; case 0x907B /* GL_PATH_DASH_CAPS_NV */: return "GL_PATH_DASH_CAPS_NV (0x907B)"; case 0x907C /* GL_PATH_INITIAL_DASH_CAP_NV */: return "GL_PATH_INITIAL_DASH_CAP_NV (0x907C)"; case 0x907D /* GL_PATH_TERMINAL_DASH_CAP_NV */: return "GL_PATH_TERMINAL_DASH_CAP_NV (0x907D)"; case 0x907E /* GL_PATH_DASH_OFFSET_NV */: return "GL_PATH_DASH_OFFSET_NV (0x907E)"; case 0x907F /* GL_PATH_CLIENT_LENGTH_NV */: return "GL_PATH_CLIENT_LENGTH_NV (0x907F)"; case 0x9080 /* GL_PATH_FILL_MODE_NV */: return "GL_PATH_FILL_MODE_NV (0x9080)"; case 0x9081 /* GL_PATH_FILL_MASK_NV */: return "GL_PATH_FILL_MASK_NV (0x9081)"; case 0x9082 /* GL_PATH_FILL_COVER_MODE_NV */: return "GL_PATH_FILL_COVER_MODE_NV (0x9082)"; case 0x9083 /* GL_PATH_STROKE_COVER_MODE_NV */: return "GL_PATH_STROKE_COVER_MODE_NV (0x9083)"; case 0x9084 /* GL_PATH_STROKE_MASK_NV */: return "GL_PATH_STROKE_MASK_NV (0x9084)"; case 0x9088 /* GL_COUNT_UP_NV */: return "GL_COUNT_UP_NV (0x9088)"; case 0x9089 /* GL_COUNT_DOWN_NV */: return "GL_COUNT_DOWN_NV (0x9089)"; case 0x908A /* GL_PATH_OBJECT_BOUNDING_BOX_NV */: return "GL_PATH_OBJECT_BOUNDING_BOX_NV (0x908A)"; case 0x908B /* GL_CONVEX_HULL_NV */: return "GL_CONVEX_HULL_NV (0x908B)"; case 0x908D /* GL_BOUNDING_BOX_NV */: return "GL_BOUNDING_BOX_NV (0x908D)"; case 0x908E /* GL_TRANSLATE_X_NV */: return "GL_TRANSLATE_X_NV (0x908E)"; case 0x908F /* GL_TRANSLATE_Y_NV */: return "GL_TRANSLATE_Y_NV (0x908F)"; case 0x9090 /* GL_TRANSLATE_2D_NV */: return "GL_TRANSLATE_2D_NV (0x9090)"; case 0x9091 /* GL_TRANSLATE_3D_NV */: return "GL_TRANSLATE_3D_NV (0x9091)"; case 0x9092 /* GL_AFFINE_2D_NV */: return "GL_AFFINE_2D_NV (0x9092)"; case 0x9094 /* GL_AFFINE_3D_NV */: return "GL_AFFINE_3D_NV (0x9094)"; case 0x9096 /* GL_TRANSPOSE_AFFINE_2D_NV */: return "GL_TRANSPOSE_AFFINE_2D_NV (0x9096)"; case 0x9098 /* GL_TRANSPOSE_AFFINE_3D_NV */: return "GL_TRANSPOSE_AFFINE_3D_NV (0x9098)"; case 0x909A /* GL_UTF8_NV */: return "GL_UTF8_NV (0x909A)"; case 0x909B /* GL_UTF16_NV */: return "GL_UTF16_NV (0x909B)"; case 0x909C /* GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV */: return "GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV (0x909C)"; case 0x909D /* GL_PATH_COMMAND_COUNT_NV */: return "GL_PATH_COMMAND_COUNT_NV (0x909D)"; case 0x909E /* GL_PATH_COORD_COUNT_NV */: return "GL_PATH_COORD_COUNT_NV (0x909E)"; case 0x909F /* GL_PATH_DASH_ARRAY_COUNT_NV */: return "GL_PATH_DASH_ARRAY_COUNT_NV (0x909F)"; case 0x90A0 /* GL_PATH_COMPUTED_LENGTH_NV */: return "GL_PATH_COMPUTED_LENGTH_NV (0x90A0)"; case 0x90A1 /* GL_PATH_FILL_BOUNDING_BOX_NV */: return "GL_PATH_FILL_BOUNDING_BOX_NV (0x90A1)"; case 0x90A2 /* GL_PATH_STROKE_BOUNDING_BOX_NV */: return "GL_PATH_STROKE_BOUNDING_BOX_NV (0x90A2)"; case 0x90A3 /* GL_SQUARE_NV */: return "GL_SQUARE_NV (0x90A3)"; case 0x90A4 /* GL_ROUND_NV */: return "GL_ROUND_NV (0x90A4)"; case 0x90A5 /* GL_TRIANGULAR_NV */: return "GL_TRIANGULAR_NV (0x90A5)"; case 0x90A6 /* GL_BEVEL_NV */: return "GL_BEVEL_NV (0x90A6)"; case 0x90A7 /* GL_MITER_REVERT_NV */: return "GL_MITER_REVERT_NV (0x90A7)"; case 0x90A8 /* GL_MITER_TRUNCATE_NV */: return "GL_MITER_TRUNCATE_NV (0x90A8)"; case 0x90A9 /* GL_SKIP_MISSING_GLYPH_NV */: return "GL_SKIP_MISSING_GLYPH_NV (0x90A9)"; case 0x90AA /* GL_USE_MISSING_GLYPH_NV */: return "GL_USE_MISSING_GLYPH_NV (0x90AA)"; case 0x90AB /* GL_PATH_ERROR_POSITION_NV */: return "GL_PATH_ERROR_POSITION_NV (0x90AB)"; case 0x90AC /* GL_PATH_FOG_GEN_MODE_NV */: return "GL_PATH_FOG_GEN_MODE_NV (0x90AC)"; case 0x90AD /* GL_ACCUM_ADJACENT_PAIRS_NV */: return "GL_ACCUM_ADJACENT_PAIRS_NV (0x90AD)"; case 0x90AE /* GL_ADJACENT_PAIRS_NV */: return "GL_ADJACENT_PAIRS_NV (0x90AE)"; case 0x90AF /* GL_FIRST_TO_REST_NV */: return "GL_FIRST_TO_REST_NV (0x90AF)"; case 0x90B0 /* GL_PATH_GEN_MODE_NV */: return "GL_PATH_GEN_MODE_NV (0x90B0)"; case 0x90B1 /* GL_PATH_GEN_COEFF_NV */: return "GL_PATH_GEN_COEFF_NV (0x90B1)"; case 0x90B2 /* GL_PATH_GEN_COLOR_FORMAT_NV */: return "GL_PATH_GEN_COLOR_FORMAT_NV (0x90B2)"; case 0x90B3 /* GL_PATH_GEN_COMPONENTS_NV */: return "GL_PATH_GEN_COMPONENTS_NV (0x90B3)"; case 0x90B4 /* GL_PATH_DASH_OFFSET_RESET_NV */: return "GL_PATH_DASH_OFFSET_RESET_NV (0x90B4)"; case 0x90B5 /* GL_MOVE_TO_RESETS_NV */: return "GL_MOVE_TO_RESETS_NV (0x90B5)"; case 0x90B6 /* GL_MOVE_TO_CONTINUES_NV */: return "GL_MOVE_TO_CONTINUES_NV (0x90B6)"; case 0x90B7 /* GL_PATH_STENCIL_FUNC_NV */: return "GL_PATH_STENCIL_FUNC_NV (0x90B7)"; case 0x90B8 /* GL_PATH_STENCIL_REF_NV */: return "GL_PATH_STENCIL_REF_NV (0x90B8)"; case 0x90B9 /* GL_PATH_STENCIL_VALUE_MASK_NV */: return "GL_PATH_STENCIL_VALUE_MASK_NV (0x90B9)"; case 0x90BD /* GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV */: return "GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV (0x90BD)"; case 0x90BE /* GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV */: return "GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV (0x90BE)"; case 0x90BF /* GL_PATH_COVER_DEPTH_FUNC_NV */: return "GL_PATH_COVER_DEPTH_FUNC_NV (0x90BF)"; //case 0x00010000 /* GL_FONT_X_MIN_BOUNDS_BIT_NV */: return "GL_FONT_X_MIN_BOUNDS_BIT_NV (0x00010000)"; //case 0x00020000 /* GL_FONT_Y_MIN_BOUNDS_BIT_NV */: return "GL_FONT_Y_MIN_BOUNDS_BIT_NV (0x00020000)"; //case 0x00040000 /* GL_FONT_X_MAX_BOUNDS_BIT_NV */: return "GL_FONT_X_MAX_BOUNDS_BIT_NV (0x00040000)"; //case 0x00080000 /* GL_FONT_Y_MAX_BOUNDS_BIT_NV */: return "GL_FONT_Y_MAX_BOUNDS_BIT_NV (0x00080000)"; case 0x00100000 /* GL_FONT_UNITS_PER_EM_BIT_NV */: return "GL_FONT_UNITS_PER_EM_BIT_NV (0x00100000)"; case 0x00200000 /* GL_FONT_ASCENDER_BIT_NV */: return "GL_FONT_ASCENDER_BIT_NV (0x00200000)"; case 0x00400000 /* GL_FONT_DESCENDER_BIT_NV */: return "GL_FONT_DESCENDER_BIT_NV (0x00400000)"; case 0x00800000 /* GL_FONT_HEIGHT_BIT_NV */: return "GL_FONT_HEIGHT_BIT_NV (0x00800000)"; case 0x01000000 /* GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV */: return "GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV (0x01000000)"; case 0x02000000 /* GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV */: return "GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV (0x02000000)"; case 0x04000000 /* GL_FONT_UNDERLINE_POSITION_BIT_NV */: return "GL_FONT_UNDERLINE_POSITION_BIT_NV (0x04000000)"; case 0x08000000 /* GL_FONT_UNDERLINE_THICKNESS_BIT_NV */: return "GL_FONT_UNDERLINE_THICKNESS_BIT_NV (0x08000000)"; case 0x10000000 /* GL_FONT_HAS_KERNING_BIT_NV */: return "GL_FONT_HAS_KERNING_BIT_NV (0x10000000)"; /* ------------------------- GL_NV_pixel_data_range ------------------------ */ case 0x8878 /* GL_WRITE_PIXEL_DATA_RANGE_NV */: return "GL_WRITE_PIXEL_DATA_RANGE_NV (0x8878)"; case 0x8879 /* GL_READ_PIXEL_DATA_RANGE_NV */: return "GL_READ_PIXEL_DATA_RANGE_NV (0x8879)"; case 0x887A /* GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV */: return "GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV (0x887A)"; case 0x887B /* GL_READ_PIXEL_DATA_RANGE_LENGTH_NV */: return "GL_READ_PIXEL_DATA_RANGE_LENGTH_NV (0x887B)"; case 0x887C /* GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV */: return "GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV (0x887C)"; case 0x887D /* GL_READ_PIXEL_DATA_RANGE_POINTER_NV */: return "GL_READ_PIXEL_DATA_RANGE_POINTER_NV (0x887D)"; /* --------------------------- GL_NV_point_sprite -------------------------- */ //case 0x8861 /* GL_POINT_SPRITE_NV */: return "GL_POINT_SPRITE_NV (0x8861)"; //case 0x8862 /* GL_COORD_REPLACE_NV */: return "GL_COORD_REPLACE_NV (0x8862)"; case 0x8863 /* GL_POINT_SPRITE_R_MODE_NV */: return "GL_POINT_SPRITE_R_MODE_NV (0x8863)"; /* -------------------------- GL_NV_present_video -------------------------- */ case 0x8E26 /* GL_FRAME_NV */: return "GL_FRAME_NV (0x8E26)"; case 0x8E27 /* GL_FIELDS_NV */: return "GL_FIELDS_NV (0x8E27)"; //case 0x8E28 /* GL_CURRENT_TIME_NV */: return "GL_CURRENT_TIME_NV (0x8E28)"; case 0x8E29 /* GL_NUM_FILL_STREAMS_NV */: return "GL_NUM_FILL_STREAMS_NV (0x8E29)"; case 0x8E2A /* GL_PRESENT_TIME_NV */: return "GL_PRESENT_TIME_NV (0x8E2A)"; case 0x8E2B /* GL_PRESENT_DURATION_NV */: return "GL_PRESENT_DURATION_NV (0x8E2B)";/* ------------------------ GL_NV_primitive_restart ------------------------ */ case 0x8558 /* GL_PRIMITIVE_RESTART_NV */: return "GL_PRIMITIVE_RESTART_NV (0x8558)"; case 0x8559 /* GL_PRIMITIVE_RESTART_INDEX_NV */: return "GL_PRIMITIVE_RESTART_INDEX_NV (0x8559)"; /* ------------------------ GL_NV_register_combiners ----------------------- */ case 0x8522 /* GL_REGISTER_COMBINERS_NV */: return "GL_REGISTER_COMBINERS_NV (0x8522)"; case 0x8523 /* GL_VARIABLE_A_NV */: return "GL_VARIABLE_A_NV (0x8523)"; case 0x8524 /* GL_VARIABLE_B_NV */: return "GL_VARIABLE_B_NV (0x8524)"; case 0x8525 /* GL_VARIABLE_C_NV */: return "GL_VARIABLE_C_NV (0x8525)"; case 0x8526 /* GL_VARIABLE_D_NV */: return "GL_VARIABLE_D_NV (0x8526)"; case 0x8527 /* GL_VARIABLE_E_NV */: return "GL_VARIABLE_E_NV (0x8527)"; case 0x8528 /* GL_VARIABLE_F_NV */: return "GL_VARIABLE_F_NV (0x8528)"; case 0x8529 /* GL_VARIABLE_G_NV */: return "GL_VARIABLE_G_NV (0x8529)"; case 0x852A /* GL_CONSTANT_COLOR0_NV */: return "GL_CONSTANT_COLOR0_NV (0x852A)"; case 0x852B /* GL_CONSTANT_COLOR1_NV */: return "GL_CONSTANT_COLOR1_NV (0x852B)"; //case 0x852C /* GL_PRIMARY_COLOR_NV */: return "GL_PRIMARY_COLOR_NV (0x852C)"; //case 0x852D /* GL_SECONDARY_COLOR_NV */: return "GL_SECONDARY_COLOR_NV (0x852D)"; case 0x852E /* GL_SPARE0_NV */: return "GL_SPARE0_NV (0x852E)"; case 0x852F /* GL_SPARE1_NV */: return "GL_SPARE1_NV (0x852F)"; case 0x8530 /* GL_DISCARD_NV */: return "GL_DISCARD_NV (0x8530)"; case 0x8531 /* GL_E_TIMES_F_NV */: return "GL_E_TIMES_F_NV (0x8531)"; case 0x8532 /* GL_SPARE0_PLUS_SECONDARY_COLOR_NV */: return "GL_SPARE0_PLUS_SECONDARY_COLOR_NV (0x8532)"; case 0x8536 /* GL_UNSIGNED_IDENTITY_NV */: return "GL_UNSIGNED_IDENTITY_NV (0x8536)"; case 0x8537 /* GL_UNSIGNED_INVERT_NV */: return "GL_UNSIGNED_INVERT_NV (0x8537)"; case 0x8538 /* GL_EXPAND_NORMAL_NV */: return "GL_EXPAND_NORMAL_NV (0x8538)"; case 0x8539 /* GL_EXPAND_NEGATE_NV */: return "GL_EXPAND_NEGATE_NV (0x8539)"; case 0x853A /* GL_HALF_BIAS_NORMAL_NV */: return "GL_HALF_BIAS_NORMAL_NV (0x853A)"; case 0x853B /* GL_HALF_BIAS_NEGATE_NV */: return "GL_HALF_BIAS_NEGATE_NV (0x853B)"; case 0x853C /* GL_SIGNED_IDENTITY_NV */: return "GL_SIGNED_IDENTITY_NV (0x853C)"; case 0x853D /* GL_SIGNED_NEGATE_NV */: return "GL_SIGNED_NEGATE_NV (0x853D)"; case 0x853E /* GL_SCALE_BY_TWO_NV */: return "GL_SCALE_BY_TWO_NV (0x853E)"; case 0x853F /* GL_SCALE_BY_FOUR_NV */: return "GL_SCALE_BY_FOUR_NV (0x853F)"; case 0x8540 /* GL_SCALE_BY_ONE_HALF_NV */: return "GL_SCALE_BY_ONE_HALF_NV (0x8540)"; case 0x8541 /* GL_BIAS_BY_NEGATIVE_ONE_HALF_NV */: return "GL_BIAS_BY_NEGATIVE_ONE_HALF_NV (0x8541)"; case 0x8542 /* GL_COMBINER_INPUT_NV */: return "GL_COMBINER_INPUT_NV (0x8542)"; case 0x8543 /* GL_COMBINER_MAPPING_NV */: return "GL_COMBINER_MAPPING_NV (0x8543)"; case 0x8544 /* GL_COMBINER_COMPONENT_USAGE_NV */: return "GL_COMBINER_COMPONENT_USAGE_NV (0x8544)"; case 0x8545 /* GL_COMBINER_AB_DOT_PRODUCT_NV */: return "GL_COMBINER_AB_DOT_PRODUCT_NV (0x8545)"; case 0x8546 /* GL_COMBINER_CD_DOT_PRODUCT_NV */: return "GL_COMBINER_CD_DOT_PRODUCT_NV (0x8546)"; case 0x8547 /* GL_COMBINER_MUX_SUM_NV */: return "GL_COMBINER_MUX_SUM_NV (0x8547)"; case 0x8548 /* GL_COMBINER_SCALE_NV */: return "GL_COMBINER_SCALE_NV (0x8548)"; case 0x8549 /* GL_COMBINER_BIAS_NV */: return "GL_COMBINER_BIAS_NV (0x8549)"; case 0x854A /* GL_COMBINER_AB_OUTPUT_NV */: return "GL_COMBINER_AB_OUTPUT_NV (0x854A)"; case 0x854B /* GL_COMBINER_CD_OUTPUT_NV */: return "GL_COMBINER_CD_OUTPUT_NV (0x854B)"; case 0x854C /* GL_COMBINER_SUM_OUTPUT_NV */: return "GL_COMBINER_SUM_OUTPUT_NV (0x854C)"; case 0x854D /* GL_MAX_GENERAL_COMBINERS_NV */: return "GL_MAX_GENERAL_COMBINERS_NV (0x854D)"; case 0x854E /* GL_NUM_GENERAL_COMBINERS_NV */: return "GL_NUM_GENERAL_COMBINERS_NV (0x854E)"; case 0x854F /* GL_COLOR_SUM_CLAMP_NV */: return "GL_COLOR_SUM_CLAMP_NV (0x854F)"; case 0x8550 /* GL_COMBINER0_NV */: return "GL_COMBINER0_NV (0x8550)"; case 0x8551 /* GL_COMBINER1_NV */: return "GL_COMBINER1_NV (0x8551)"; case 0x8552 /* GL_COMBINER2_NV */: return "GL_COMBINER2_NV (0x8552)"; case 0x8553 /* GL_COMBINER3_NV */: return "GL_COMBINER3_NV (0x8553)"; case 0x8554 /* GL_COMBINER4_NV */: return "GL_COMBINER4_NV (0x8554)"; case 0x8555 /* GL_COMBINER5_NV */: return "GL_COMBINER5_NV (0x8555)"; case 0x8556 /* GL_COMBINER6_NV */: return "GL_COMBINER6_NV (0x8556)"; case 0x8557 /* GL_COMBINER7_NV */: return "GL_COMBINER7_NV (0x8557)"; /* ----------------------- GL_NV_register_combiners2 ----------------------- */ case 0x8535 /* GL_PER_STAGE_CONSTANTS_NV */: return "GL_PER_STAGE_CONSTANTS_NV (0x8535)"; /* ----------------------- GL_NV_shader_atomic_float ----------------------- */ /* ------------------------ GL_NV_shader_buffer_load ----------------------- */ case 0x8F1D /* GL_BUFFER_GPU_ADDRESS_NV */: return "GL_BUFFER_GPU_ADDRESS_NV (0x8F1D)"; case 0x8F34 /* GL_GPU_ADDRESS_NV */: return "GL_GPU_ADDRESS_NV (0x8F34)"; case 0x8F35 /* GL_MAX_SHADER_BUFFER_ADDRESS_NV */: return "GL_MAX_SHADER_BUFFER_ADDRESS_NV (0x8F35)"; /* ---------------------- GL_NV_tessellation_program5 ---------------------- */ case 0x86D8 /* GL_MAX_PROGRAM_PATCH_ATTRIBS_NV */: return "GL_MAX_PROGRAM_PATCH_ATTRIBS_NV (0x86D8)"; case 0x891E /* GL_TESS_CONTROL_PROGRAM_NV */: return "GL_TESS_CONTROL_PROGRAM_NV (0x891E)"; case 0x891F /* GL_TESS_EVALUATION_PROGRAM_NV */: return "GL_TESS_EVALUATION_PROGRAM_NV (0x891F)"; case 0x8C74 /* GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV (0x8C74)"; case 0x8C75 /* GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV */: return "GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV (0x8C75)"; /* -------------------------- GL_NV_texgen_emboss -------------------------- */ case 0x855D /* GL_EMBOSS_LIGHT_NV */: return "GL_EMBOSS_LIGHT_NV (0x855D)"; case 0x855E /* GL_EMBOSS_CONSTANT_NV */: return "GL_EMBOSS_CONSTANT_NV (0x855E)"; case 0x855F /* GL_EMBOSS_MAP_NV */: return "GL_EMBOSS_MAP_NV (0x855F)"; /* ------------------------ GL_NV_texgen_reflection ------------------------ */ //case 0x8511 /* GL_NORMAL_MAP_NV */: return "GL_NORMAL_MAP_NV (0x8511)"; //case 0x8512 /* GL_REFLECTION_MAP_NV */: return "GL_REFLECTION_MAP_NV (0x8512)"; /* ------------------------- GL_NV_texture_barrier ------------------------- */ /* --------------------- GL_NV_texture_compression_vtc --------------------- */ /* ----------------------- GL_NV_texture_env_combine4 ---------------------- */ case 0x8503 /* GL_COMBINE4_NV */: return "GL_COMBINE4_NV (0x8503)"; case 0x8583 /* GL_SOURCE3_RGB_NV */: return "GL_SOURCE3_RGB_NV (0x8583)"; case 0x858B /* GL_SOURCE3_ALPHA_NV */: return "GL_SOURCE3_ALPHA_NV (0x858B)"; case 0x8593 /* GL_OPERAND3_RGB_NV */: return "GL_OPERAND3_RGB_NV (0x8593)"; case 0x859B /* GL_OPERAND3_ALPHA_NV */: return "GL_OPERAND3_ALPHA_NV (0x859B)"; /* ---------------------- GL_NV_texture_expand_normal ---------------------- */ case 0x888F /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */: return "GL_TEXTURE_UNSIGNED_REMAP_MODE_NV (0x888F)"; /* ----------------------- GL_NV_texture_multisample ----------------------- */ case 0x9045 /* GL_TEXTURE_COVERAGE_SAMPLES_NV */: return "GL_TEXTURE_COVERAGE_SAMPLES_NV (0x9045)"; case 0x9046 /* GL_TEXTURE_COLOR_SAMPLES_NV */: return "GL_TEXTURE_COLOR_SAMPLES_NV (0x9046)";/* ------------------------ GL_NV_texture_rectangle ------------------------ */ //case 0x84F5 /* GL_TEXTURE_RECTANGLE_NV */: return "GL_TEXTURE_RECTANGLE_NV (0x84F5)"; //case 0x84F6 /* GL_TEXTURE_BINDING_RECTANGLE_NV */: return "GL_TEXTURE_BINDING_RECTANGLE_NV (0x84F6)"; //case 0x84F7 /* GL_PROXY_TEXTURE_RECTANGLE_NV */: return "GL_PROXY_TEXTURE_RECTANGLE_NV (0x84F7)"; //case 0x84F8 /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */: return "GL_MAX_RECTANGLE_TEXTURE_SIZE_NV (0x84F8)"; /* -------------------------- GL_NV_texture_shader ------------------------- */ case 0x864C /* GL_OFFSET_TEXTURE_RECTANGLE_NV */: return "GL_OFFSET_TEXTURE_RECTANGLE_NV (0x864C)"; case 0x864D /* GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV */: return "GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV (0x864D)"; case 0x864E /* GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV */: return "GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV (0x864E)"; case 0x86D9 /* GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV */: return "GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV (0x86D9)"; case 0x86DA /* GL_UNSIGNED_INT_S8_S8_8_8_NV */: return "GL_UNSIGNED_INT_S8_S8_8_8_NV (0x86DA)"; case 0x86DB /* GL_UNSIGNED_INT_8_8_S8_S8_REV_NV */: return "GL_UNSIGNED_INT_8_8_S8_S8_REV_NV (0x86DB)"; case 0x86DC /* GL_DSDT_MAG_INTENSITY_NV */: return "GL_DSDT_MAG_INTENSITY_NV (0x86DC)"; case 0x86DD /* GL_SHADER_CONSISTENT_NV */: return "GL_SHADER_CONSISTENT_NV (0x86DD)"; case 0x86DE /* GL_TEXTURE_SHADER_NV */: return "GL_TEXTURE_SHADER_NV (0x86DE)"; case 0x86DF /* GL_SHADER_OPERATION_NV */: return "GL_SHADER_OPERATION_NV (0x86DF)"; case 0x86E0 /* GL_CULL_MODES_NV */: return "GL_CULL_MODES_NV (0x86E0)"; case 0x86E1 /* GL_OFFSET_TEXTURE_2D_MATRIX_NV */: return "GL_OFFSET_TEXTURE_2D_MATRIX_NV (0x86E1)"; //case 0x86E1 /* GL_OFFSET_TEXTURE_MATRIX_NV */: return "GL_OFFSET_TEXTURE_MATRIX_NV (0x86E1)"; case 0x86E2 /* GL_OFFSET_TEXTURE_2D_SCALE_NV */: return "GL_OFFSET_TEXTURE_2D_SCALE_NV (0x86E2)"; //case 0x86E2 /* GL_OFFSET_TEXTURE_SCALE_NV */: return "GL_OFFSET_TEXTURE_SCALE_NV (0x86E2)"; case 0x86E3 /* GL_OFFSET_TEXTURE_BIAS_NV */: return "GL_OFFSET_TEXTURE_BIAS_NV (0x86E3)"; //case 0x86E3 /* GL_OFFSET_TEXTURE_2D_BIAS_NV */: return "GL_OFFSET_TEXTURE_2D_BIAS_NV (0x86E3)"; case 0x86E4 /* GL_PREVIOUS_TEXTURE_INPUT_NV */: return "GL_PREVIOUS_TEXTURE_INPUT_NV (0x86E4)"; case 0x86E5 /* GL_CONST_EYE_NV */: return "GL_CONST_EYE_NV (0x86E5)"; case 0x86E6 /* GL_PASS_THROUGH_NV */: return "GL_PASS_THROUGH_NV (0x86E6)"; case 0x86E7 /* GL_CULL_FRAGMENT_NV */: return "GL_CULL_FRAGMENT_NV (0x86E7)"; case 0x86E8 /* GL_OFFSET_TEXTURE_2D_NV */: return "GL_OFFSET_TEXTURE_2D_NV (0x86E8)"; case 0x86E9 /* GL_DEPENDENT_AR_TEXTURE_2D_NV */: return "GL_DEPENDENT_AR_TEXTURE_2D_NV (0x86E9)"; case 0x86EA /* GL_DEPENDENT_GB_TEXTURE_2D_NV */: return "GL_DEPENDENT_GB_TEXTURE_2D_NV (0x86EA)"; case 0x86EC /* GL_DOT_PRODUCT_NV */: return "GL_DOT_PRODUCT_NV (0x86EC)"; case 0x86ED /* GL_DOT_PRODUCT_DEPTH_REPLACE_NV */: return "GL_DOT_PRODUCT_DEPTH_REPLACE_NV (0x86ED)"; case 0x86EE /* GL_DOT_PRODUCT_TEXTURE_2D_NV */: return "GL_DOT_PRODUCT_TEXTURE_2D_NV (0x86EE)"; case 0x86F0 /* GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV */: return "GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV (0x86F0)"; case 0x86F1 /* GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV */: return "GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV (0x86F1)"; case 0x86F2 /* GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV */: return "GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV (0x86F2)"; case 0x86F3 /* GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV */: return "GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV (0x86F3)"; case 0x86F4 /* GL_HILO_NV */: return "GL_HILO_NV (0x86F4)"; case 0x86F5 /* GL_DSDT_NV */: return "GL_DSDT_NV (0x86F5)"; case 0x86F6 /* GL_DSDT_MAG_NV */: return "GL_DSDT_MAG_NV (0x86F6)"; case 0x86F7 /* GL_DSDT_MAG_VIB_NV */: return "GL_DSDT_MAG_VIB_NV (0x86F7)"; case 0x86F8 /* GL_HILO16_NV */: return "GL_HILO16_NV (0x86F8)"; case 0x86F9 /* GL_SIGNED_HILO_NV */: return "GL_SIGNED_HILO_NV (0x86F9)"; case 0x86FA /* GL_SIGNED_HILO16_NV */: return "GL_SIGNED_HILO16_NV (0x86FA)"; case 0x86FB /* GL_SIGNED_RGBA_NV */: return "GL_SIGNED_RGBA_NV (0x86FB)"; case 0x86FC /* GL_SIGNED_RGBA8_NV */: return "GL_SIGNED_RGBA8_NV (0x86FC)"; case 0x86FE /* GL_SIGNED_RGB_NV */: return "GL_SIGNED_RGB_NV (0x86FE)"; case 0x86FF /* GL_SIGNED_RGB8_NV */: return "GL_SIGNED_RGB8_NV (0x86FF)"; case 0x8701 /* GL_SIGNED_LUMINANCE_NV */: return "GL_SIGNED_LUMINANCE_NV (0x8701)"; case 0x8702 /* GL_SIGNED_LUMINANCE8_NV */: return "GL_SIGNED_LUMINANCE8_NV (0x8702)"; case 0x8703 /* GL_SIGNED_LUMINANCE_ALPHA_NV */: return "GL_SIGNED_LUMINANCE_ALPHA_NV (0x8703)"; case 0x8704 /* GL_SIGNED_LUMINANCE8_ALPHA8_NV */: return "GL_SIGNED_LUMINANCE8_ALPHA8_NV (0x8704)"; case 0x8705 /* GL_SIGNED_ALPHA_NV */: return "GL_SIGNED_ALPHA_NV (0x8705)"; case 0x8706 /* GL_SIGNED_ALPHA8_NV */: return "GL_SIGNED_ALPHA8_NV (0x8706)"; case 0x8707 /* GL_SIGNED_INTENSITY_NV */: return "GL_SIGNED_INTENSITY_NV (0x8707)"; case 0x8708 /* GL_SIGNED_INTENSITY8_NV */: return "GL_SIGNED_INTENSITY8_NV (0x8708)"; case 0x8709 /* GL_DSDT8_NV */: return "GL_DSDT8_NV (0x8709)"; case 0x870A /* GL_DSDT8_MAG8_NV */: return "GL_DSDT8_MAG8_NV (0x870A)"; case 0x870B /* GL_DSDT8_MAG8_INTENSITY8_NV */: return "GL_DSDT8_MAG8_INTENSITY8_NV (0x870B)"; case 0x870C /* GL_SIGNED_RGB_UNSIGNED_ALPHA_NV */: return "GL_SIGNED_RGB_UNSIGNED_ALPHA_NV (0x870C)"; case 0x870D /* GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV */: return "GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV (0x870D)"; case 0x870E /* GL_HI_SCALE_NV */: return "GL_HI_SCALE_NV (0x870E)"; case 0x870F /* GL_LO_SCALE_NV */: return "GL_LO_SCALE_NV (0x870F)"; case 0x8710 /* GL_DS_SCALE_NV */: return "GL_DS_SCALE_NV (0x8710)"; case 0x8711 /* GL_DT_SCALE_NV */: return "GL_DT_SCALE_NV (0x8711)"; case 0x8712 /* GL_MAGNITUDE_SCALE_NV */: return "GL_MAGNITUDE_SCALE_NV (0x8712)"; case 0x8713 /* GL_VIBRANCE_SCALE_NV */: return "GL_VIBRANCE_SCALE_NV (0x8713)"; case 0x8714 /* GL_HI_BIAS_NV */: return "GL_HI_BIAS_NV (0x8714)"; case 0x8715 /* GL_LO_BIAS_NV */: return "GL_LO_BIAS_NV (0x8715)"; case 0x8716 /* GL_DS_BIAS_NV */: return "GL_DS_BIAS_NV (0x8716)"; case 0x8717 /* GL_DT_BIAS_NV */: return "GL_DT_BIAS_NV (0x8717)"; case 0x8718 /* GL_MAGNITUDE_BIAS_NV */: return "GL_MAGNITUDE_BIAS_NV (0x8718)"; case 0x8719 /* GL_VIBRANCE_BIAS_NV */: return "GL_VIBRANCE_BIAS_NV (0x8719)"; case 0x871A /* GL_TEXTURE_BORDER_VALUES_NV */: return "GL_TEXTURE_BORDER_VALUES_NV (0x871A)"; case 0x871B /* GL_TEXTURE_HI_SIZE_NV */: return "GL_TEXTURE_HI_SIZE_NV (0x871B)"; case 0x871C /* GL_TEXTURE_LO_SIZE_NV */: return "GL_TEXTURE_LO_SIZE_NV (0x871C)"; case 0x871D /* GL_TEXTURE_DS_SIZE_NV */: return "GL_TEXTURE_DS_SIZE_NV (0x871D)"; case 0x871E /* GL_TEXTURE_DT_SIZE_NV */: return "GL_TEXTURE_DT_SIZE_NV (0x871E)"; case 0x871F /* GL_TEXTURE_MAG_SIZE_NV */: return "GL_TEXTURE_MAG_SIZE_NV (0x871F)"; /* ------------------------- GL_NV_texture_shader2 ------------------------- */ //case 0x86DA /* GL_UNSIGNED_INT_S8_S8_8_8_NV */: return "GL_UNSIGNED_INT_S8_S8_8_8_NV (0x86DA)"; //case 0x86DB /* GL_UNSIGNED_INT_8_8_S8_S8_REV_NV */: return "GL_UNSIGNED_INT_8_8_S8_S8_REV_NV (0x86DB)"; //case 0x86DC /* GL_DSDT_MAG_INTENSITY_NV */: return "GL_DSDT_MAG_INTENSITY_NV (0x86DC)"; case 0x86EF /* GL_DOT_PRODUCT_TEXTURE_3D_NV */: return "GL_DOT_PRODUCT_TEXTURE_3D_NV (0x86EF)"; //case 0x86F4 /* GL_HILO_NV */: return "GL_HILO_NV (0x86F4)"; //case 0x86F5 /* GL_DSDT_NV */: return "GL_DSDT_NV (0x86F5)"; //case 0x86F6 /* GL_DSDT_MAG_NV */: return "GL_DSDT_MAG_NV (0x86F6)"; //case 0x86F7 /* GL_DSDT_MAG_VIB_NV */: return "GL_DSDT_MAG_VIB_NV (0x86F7)"; //case 0x86F8 /* GL_HILO16_NV */: return "GL_HILO16_NV (0x86F8)"; //case 0x86F9 /* GL_SIGNED_HILO_NV */: return "GL_SIGNED_HILO_NV (0x86F9)"; //case 0x86FA /* GL_SIGNED_HILO16_NV */: return "GL_SIGNED_HILO16_NV (0x86FA)"; //case 0x86FB /* GL_SIGNED_RGBA_NV */: return "GL_SIGNED_RGBA_NV (0x86FB)"; //case 0x86FC /* GL_SIGNED_RGBA8_NV */: return "GL_SIGNED_RGBA8_NV (0x86FC)"; //case 0x86FE /* GL_SIGNED_RGB_NV */: return "GL_SIGNED_RGB_NV (0x86FE)"; //case 0x86FF /* GL_SIGNED_RGB8_NV */: return "GL_SIGNED_RGB8_NV (0x86FF)"; //case 0x8701 /* GL_SIGNED_LUMINANCE_NV */: return "GL_SIGNED_LUMINANCE_NV (0x8701)"; //case 0x8702 /* GL_SIGNED_LUMINANCE8_NV */: return "GL_SIGNED_LUMINANCE8_NV (0x8702)"; //case 0x8703 /* GL_SIGNED_LUMINANCE_ALPHA_NV */: return "GL_SIGNED_LUMINANCE_ALPHA_NV (0x8703)"; //case 0x8704 /* GL_SIGNED_LUMINANCE8_ALPHA8_NV */: return "GL_SIGNED_LUMINANCE8_ALPHA8_NV (0x8704)"; //case 0x8705 /* GL_SIGNED_ALPHA_NV */: return "GL_SIGNED_ALPHA_NV (0x8705)"; //case 0x8706 /* GL_SIGNED_ALPHA8_NV */: return "GL_SIGNED_ALPHA8_NV (0x8706)"; //case 0x8707 /* GL_SIGNED_INTENSITY_NV */: return "GL_SIGNED_INTENSITY_NV (0x8707)"; //case 0x8708 /* GL_SIGNED_INTENSITY8_NV */: return "GL_SIGNED_INTENSITY8_NV (0x8708)"; //case 0x8709 /* GL_DSDT8_NV */: return "GL_DSDT8_NV (0x8709)"; //case 0x870A /* GL_DSDT8_MAG8_NV */: return "GL_DSDT8_MAG8_NV (0x870A)"; //case 0x870B /* GL_DSDT8_MAG8_INTENSITY8_NV */: return "GL_DSDT8_MAG8_INTENSITY8_NV (0x870B)"; //case 0x870C /* GL_SIGNED_RGB_UNSIGNED_ALPHA_NV */: return "GL_SIGNED_RGB_UNSIGNED_ALPHA_NV (0x870C)"; //case 0x870D /* GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV */: return "GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV (0x870D)"; /* ------------------------- GL_NV_texture_shader3 ------------------------- */ case 0x8850 /* GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV */: return "GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV (0x8850)"; case 0x8851 /* GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV */: return "GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV (0x8851)"; case 0x8852 /* GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV */: return "GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV (0x8852)"; case 0x8853 /* GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV */: return "GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV (0x8853)"; case 0x8854 /* GL_OFFSET_HILO_TEXTURE_2D_NV */: return "GL_OFFSET_HILO_TEXTURE_2D_NV (0x8854)"; case 0x8855 /* GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV */: return "GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV (0x8855)"; case 0x8856 /* GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV */: return "GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV (0x8856)"; case 0x8857 /* GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV */: return "GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV (0x8857)"; case 0x8858 /* GL_DEPENDENT_HILO_TEXTURE_2D_NV */: return "GL_DEPENDENT_HILO_TEXTURE_2D_NV (0x8858)"; case 0x8859 /* GL_DEPENDENT_RGB_TEXTURE_3D_NV */: return "GL_DEPENDENT_RGB_TEXTURE_3D_NV (0x8859)"; case 0x885A /* GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV */: return "GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV (0x885A)"; case 0x885B /* GL_DOT_PRODUCT_PASS_THROUGH_NV */: return "GL_DOT_PRODUCT_PASS_THROUGH_NV (0x885B)"; case 0x885C /* GL_DOT_PRODUCT_TEXTURE_1D_NV */: return "GL_DOT_PRODUCT_TEXTURE_1D_NV (0x885C)"; case 0x885D /* GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV */: return "GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV (0x885D)"; case 0x885E /* GL_HILO8_NV */: return "GL_HILO8_NV (0x885E)"; case 0x885F /* GL_SIGNED_HILO8_NV */: return "GL_SIGNED_HILO8_NV (0x885F)"; case 0x8860 /* GL_FORCE_BLUE_TO_ONE_NV */: return "GL_FORCE_BLUE_TO_ONE_NV (0x8860)"; /* ------------------------ GL_NV_transform_feedback ----------------------- */ case 0x8C77 /* GL_BACK_PRIMARY_COLOR_NV */: return "GL_BACK_PRIMARY_COLOR_NV (0x8C77)"; case 0x8C78 /* GL_BACK_SECONDARY_COLOR_NV */: return "GL_BACK_SECONDARY_COLOR_NV (0x8C78)"; case 0x8C79 /* GL_TEXTURE_COORD_NV */: return "GL_TEXTURE_COORD_NV (0x8C79)"; case 0x8C7A /* GL_CLIP_DISTANCE_NV */: return "GL_CLIP_DISTANCE_NV (0x8C7A)"; case 0x8C7B /* GL_VERTEX_ID_NV */: return "GL_VERTEX_ID_NV (0x8C7B)"; case 0x8C7C /* GL_PRIMITIVE_ID_NV */: return "GL_PRIMITIVE_ID_NV (0x8C7C)"; case 0x8C7D /* GL_GENERIC_ATTRIB_NV */: return "GL_GENERIC_ATTRIB_NV (0x8C7D)"; case 0x8C7E /* GL_TRANSFORM_FEEDBACK_ATTRIBS_NV */: return "GL_TRANSFORM_FEEDBACK_ATTRIBS_NV (0x8C7E)"; //case 0x8C7F /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV (0x8C7F)"; //case 0x8C80 /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV (0x8C80)"; case 0x8C81 /* GL_ACTIVE_VARYINGS_NV */: return "GL_ACTIVE_VARYINGS_NV (0x8C81)"; case 0x8C82 /* GL_ACTIVE_VARYING_MAX_LENGTH_NV */: return "GL_ACTIVE_VARYING_MAX_LENGTH_NV (0x8C82)"; //case 0x8C83 /* GL_TRANSFORM_FEEDBACK_VARYINGS_NV */: return "GL_TRANSFORM_FEEDBACK_VARYINGS_NV (0x8C83)"; //case 0x8C84 /* GL_TRANSFORM_FEEDBACK_BUFFER_START_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_START_NV (0x8C84)"; //case 0x8C85 /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV (0x8C85)"; case 0x8C86 /* GL_TRANSFORM_FEEDBACK_RECORD_NV */: return "GL_TRANSFORM_FEEDBACK_RECORD_NV (0x8C86)"; //case 0x8C87 /* GL_PRIMITIVES_GENERATED_NV */: return "GL_PRIMITIVES_GENERATED_NV (0x8C87)"; //case 0x8C88 /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV */: return "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV (0x8C88)"; //case 0x8C89 /* GL_RASTERIZER_DISCARD_NV */: return "GL_RASTERIZER_DISCARD_NV (0x8C89)"; //case 0x8C8A /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV */: return "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV (0x8C8A)"; //case 0x8C8B /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV */: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV (0x8C8B)"; //case 0x8C8C /* GL_INTERLEAVED_ATTRIBS_NV */: return "GL_INTERLEAVED_ATTRIBS_NV (0x8C8C)"; //case 0x8C8D /* GL_SEPARATE_ATTRIBS_NV */: return "GL_SEPARATE_ATTRIBS_NV (0x8C8D)"; //case 0x8C8E /* GL_TRANSFORM_FEEDBACK_BUFFER_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_NV (0x8C8E)"; //case 0x8C8F /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV (0x8C8F)";/* ----------------------- GL_NV_transform_feedback2 ----------------------- */ //case 0x8E22 /* GL_TRANSFORM_FEEDBACK_NV */: return "GL_TRANSFORM_FEEDBACK_NV (0x8E22)"; //case 0x8E23 /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV (0x8E23)"; //case 0x8E24 /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV */: return "GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV (0x8E24)"; //case 0x8E25 /* GL_TRANSFORM_FEEDBACK_BINDING_NV */: return "GL_TRANSFORM_FEEDBACK_BINDING_NV (0x8E25)"; /* -------------------------- GL_NV_vdpau_interop -------------------------- */ case 0x86EB /* GL_SURFACE_STATE_NV */: return "GL_SURFACE_STATE_NV (0x86EB)"; case 0x86FD /* GL_SURFACE_REGISTERED_NV */: return "GL_SURFACE_REGISTERED_NV (0x86FD)"; case 0x8700 /* GL_SURFACE_MAPPED_NV */: return "GL_SURFACE_MAPPED_NV (0x8700)"; case 0x88BE /* GL_WRITE_DISCARD_NV */: return "GL_WRITE_DISCARD_NV (0x88BE)";/* ------------------------ GL_NV_vertex_array_range ----------------------- */ //case 0x851D /* GL_VERTEX_ARRAY_RANGE_NV */: return "GL_VERTEX_ARRAY_RANGE_NV (0x851D)"; //case 0x851E /* GL_VERTEX_ARRAY_RANGE_LENGTH_NV */: return "GL_VERTEX_ARRAY_RANGE_LENGTH_NV (0x851E)"; //case 0x851F /* GL_VERTEX_ARRAY_RANGE_VALID_NV */: return "GL_VERTEX_ARRAY_RANGE_VALID_NV (0x851F)"; //case 0x8520 /* GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV */: return "GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV (0x8520)"; //case 0x8521 /* GL_VERTEX_ARRAY_RANGE_POINTER_NV */: return "GL_VERTEX_ARRAY_RANGE_POINTER_NV (0x8521)"; /* ----------------------- GL_NV_vertex_array_range2 ----------------------- */ case 0x8533 /* GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV */: return "GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV (0x8533)"; /* ------------------- GL_NV_vertex_attrib_integer_64bit ------------------- */ //case 0x140E /* GL_INT64_NV */: return "GL_INT64_NV (0x140E)"; //case 0x140F /* GL_UNSIGNED_INT64_NV */: return "GL_UNSIGNED_INT64_NV (0x140F)"; /* ------------------- GL_NV_vertex_buffer_unified_memory ------------------ */ case 0x8F1E /* GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV */: return "GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV (0x8F1E)"; case 0x8F1F /* GL_ELEMENT_ARRAY_UNIFIED_NV */: return "GL_ELEMENT_ARRAY_UNIFIED_NV (0x8F1F)"; case 0x8F20 /* GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV */: return "GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV (0x8F20)"; case 0x8F21 /* GL_VERTEX_ARRAY_ADDRESS_NV */: return "GL_VERTEX_ARRAY_ADDRESS_NV (0x8F21)"; case 0x8F22 /* GL_NORMAL_ARRAY_ADDRESS_NV */: return "GL_NORMAL_ARRAY_ADDRESS_NV (0x8F22)"; case 0x8F23 /* GL_COLOR_ARRAY_ADDRESS_NV */: return "GL_COLOR_ARRAY_ADDRESS_NV (0x8F23)"; case 0x8F24 /* GL_INDEX_ARRAY_ADDRESS_NV */: return "GL_INDEX_ARRAY_ADDRESS_NV (0x8F24)"; case 0x8F25 /* GL_TEXTURE_COORD_ARRAY_ADDRESS_NV */: return "GL_TEXTURE_COORD_ARRAY_ADDRESS_NV (0x8F25)"; case 0x8F26 /* GL_EDGE_FLAG_ARRAY_ADDRESS_NV */: return "GL_EDGE_FLAG_ARRAY_ADDRESS_NV (0x8F26)"; case 0x8F27 /* GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV */: return "GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV (0x8F27)"; case 0x8F28 /* GL_FOG_COORD_ARRAY_ADDRESS_NV */: return "GL_FOG_COORD_ARRAY_ADDRESS_NV (0x8F28)"; case 0x8F29 /* GL_ELEMENT_ARRAY_ADDRESS_NV */: return "GL_ELEMENT_ARRAY_ADDRESS_NV (0x8F29)"; case 0x8F2A /* GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV */: return "GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV (0x8F2A)"; case 0x8F2B /* GL_VERTEX_ARRAY_LENGTH_NV */: return "GL_VERTEX_ARRAY_LENGTH_NV (0x8F2B)"; case 0x8F2C /* GL_NORMAL_ARRAY_LENGTH_NV */: return "GL_NORMAL_ARRAY_LENGTH_NV (0x8F2C)"; case 0x8F2D /* GL_COLOR_ARRAY_LENGTH_NV */: return "GL_COLOR_ARRAY_LENGTH_NV (0x8F2D)"; case 0x8F2E /* GL_INDEX_ARRAY_LENGTH_NV */: return "GL_INDEX_ARRAY_LENGTH_NV (0x8F2E)"; case 0x8F2F /* GL_TEXTURE_COORD_ARRAY_LENGTH_NV */: return "GL_TEXTURE_COORD_ARRAY_LENGTH_NV (0x8F2F)"; case 0x8F30 /* GL_EDGE_FLAG_ARRAY_LENGTH_NV */: return "GL_EDGE_FLAG_ARRAY_LENGTH_NV (0x8F30)"; case 0x8F31 /* GL_SECONDARY_COLOR_ARRAY_LENGTH_NV */: return "GL_SECONDARY_COLOR_ARRAY_LENGTH_NV (0x8F31)"; case 0x8F32 /* GL_FOG_COORD_ARRAY_LENGTH_NV */: return "GL_FOG_COORD_ARRAY_LENGTH_NV (0x8F32)"; case 0x8F33 /* GL_ELEMENT_ARRAY_LENGTH_NV */: return "GL_ELEMENT_ARRAY_LENGTH_NV (0x8F33)"; case 0x8F40 /* GL_DRAW_INDIRECT_UNIFIED_NV */: return "GL_DRAW_INDIRECT_UNIFIED_NV (0x8F40)"; case 0x8F41 /* GL_DRAW_INDIRECT_ADDRESS_NV */: return "GL_DRAW_INDIRECT_ADDRESS_NV (0x8F41)"; case 0x8F42 /* GL_DRAW_INDIRECT_LENGTH_NV */: return "GL_DRAW_INDIRECT_LENGTH_NV (0x8F42)"; /* -------------------------- GL_NV_vertex_program ------------------------- */ //case 0x8620 /* GL_VERTEX_PROGRAM_NV */: return "GL_VERTEX_PROGRAM_NV (0x8620)"; case 0x8621 /* GL_VERTEX_STATE_PROGRAM_NV */: return "GL_VERTEX_STATE_PROGRAM_NV (0x8621)"; //case 0x8623 /* GL_ATTRIB_ARRAY_SIZE_NV */: return "GL_ATTRIB_ARRAY_SIZE_NV (0x8623)"; //case 0x8624 /* GL_ATTRIB_ARRAY_STRIDE_NV */: return "GL_ATTRIB_ARRAY_STRIDE_NV (0x8624)"; //case 0x8625 /* GL_ATTRIB_ARRAY_TYPE_NV */: return "GL_ATTRIB_ARRAY_TYPE_NV (0x8625)"; //case 0x8626 /* GL_CURRENT_ATTRIB_NV */: return "GL_CURRENT_ATTRIB_NV (0x8626)"; //case 0x8627 /* GL_PROGRAM_LENGTH_NV */: return "GL_PROGRAM_LENGTH_NV (0x8627)"; //case 0x8628 /* GL_PROGRAM_STRING_NV */: return "GL_PROGRAM_STRING_NV (0x8628)"; case 0x8629 /* GL_MODELVIEW_PROJECTION_NV */: return "GL_MODELVIEW_PROJECTION_NV (0x8629)"; case 0x862A /* GL_IDENTITY_NV */: return "GL_IDENTITY_NV (0x862A)"; case 0x862B /* GL_INVERSE_NV */: return "GL_INVERSE_NV (0x862B)"; case 0x862C /* GL_TRANSPOSE_NV */: return "GL_TRANSPOSE_NV (0x862C)"; case 0x862D /* GL_INVERSE_TRANSPOSE_NV */: return "GL_INVERSE_TRANSPOSE_NV (0x862D)"; //case 0x862E /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */: return "GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV (0x862E)"; //case 0x862F /* GL_MAX_TRACK_MATRICES_NV */: return "GL_MAX_TRACK_MATRICES_NV (0x862F)"; case 0x8630 /* GL_MATRIX0_NV */: return "GL_MATRIX0_NV (0x8630)"; case 0x8631 /* GL_MATRIX1_NV */: return "GL_MATRIX1_NV (0x8631)"; case 0x8632 /* GL_MATRIX2_NV */: return "GL_MATRIX2_NV (0x8632)"; case 0x8633 /* GL_MATRIX3_NV */: return "GL_MATRIX3_NV (0x8633)"; case 0x8634 /* GL_MATRIX4_NV */: return "GL_MATRIX4_NV (0x8634)"; case 0x8635 /* GL_MATRIX5_NV */: return "GL_MATRIX5_NV (0x8635)"; case 0x8636 /* GL_MATRIX6_NV */: return "GL_MATRIX6_NV (0x8636)"; case 0x8637 /* GL_MATRIX7_NV */: return "GL_MATRIX7_NV (0x8637)"; //case 0x8640 /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */: return "GL_CURRENT_MATRIX_STACK_DEPTH_NV (0x8640)"; //case 0x8641 /* GL_CURRENT_MATRIX_NV */: return "GL_CURRENT_MATRIX_NV (0x8641)"; //case 0x8642 /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */: return "GL_VERTEX_PROGRAM_POINT_SIZE_NV (0x8642)"; //case 0x8643 /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */: return "GL_VERTEX_PROGRAM_TWO_SIDE_NV (0x8643)"; case 0x8644 /* GL_PROGRAM_PARAMETER_NV */: return "GL_PROGRAM_PARAMETER_NV (0x8644)"; //case 0x8645 /* GL_ATTRIB_ARRAY_POINTER_NV */: return "GL_ATTRIB_ARRAY_POINTER_NV (0x8645)"; case 0x8646 /* GL_PROGRAM_TARGET_NV */: return "GL_PROGRAM_TARGET_NV (0x8646)"; case 0x8647 /* GL_PROGRAM_RESIDENT_NV */: return "GL_PROGRAM_RESIDENT_NV (0x8647)"; case 0x8648 /* GL_TRACK_MATRIX_NV */: return "GL_TRACK_MATRIX_NV (0x8648)"; case 0x8649 /* GL_TRACK_MATRIX_TRANSFORM_NV */: return "GL_TRACK_MATRIX_TRANSFORM_NV (0x8649)"; case 0x864A /* GL_VERTEX_PROGRAM_BINDING_NV */: return "GL_VERTEX_PROGRAM_BINDING_NV (0x864A)"; //case 0x864B /* GL_PROGRAM_ERROR_POSITION_NV */: return "GL_PROGRAM_ERROR_POSITION_NV (0x864B)"; case 0x8650 /* GL_VERTEX_ATTRIB_ARRAY0_NV */: return "GL_VERTEX_ATTRIB_ARRAY0_NV (0x8650)"; case 0x8651 /* GL_VERTEX_ATTRIB_ARRAY1_NV */: return "GL_VERTEX_ATTRIB_ARRAY1_NV (0x8651)"; case 0x8652 /* GL_VERTEX_ATTRIB_ARRAY2_NV */: return "GL_VERTEX_ATTRIB_ARRAY2_NV (0x8652)"; case 0x8653 /* GL_VERTEX_ATTRIB_ARRAY3_NV */: return "GL_VERTEX_ATTRIB_ARRAY3_NV (0x8653)"; case 0x8654 /* GL_VERTEX_ATTRIB_ARRAY4_NV */: return "GL_VERTEX_ATTRIB_ARRAY4_NV (0x8654)"; case 0x8655 /* GL_VERTEX_ATTRIB_ARRAY5_NV */: return "GL_VERTEX_ATTRIB_ARRAY5_NV (0x8655)"; case 0x8656 /* GL_VERTEX_ATTRIB_ARRAY6_NV */: return "GL_VERTEX_ATTRIB_ARRAY6_NV (0x8656)"; case 0x8657 /* GL_VERTEX_ATTRIB_ARRAY7_NV */: return "GL_VERTEX_ATTRIB_ARRAY7_NV (0x8657)"; case 0x8658 /* GL_VERTEX_ATTRIB_ARRAY8_NV */: return "GL_VERTEX_ATTRIB_ARRAY8_NV (0x8658)"; case 0x8659 /* GL_VERTEX_ATTRIB_ARRAY9_NV */: return "GL_VERTEX_ATTRIB_ARRAY9_NV (0x8659)"; case 0x865A /* GL_VERTEX_ATTRIB_ARRAY10_NV */: return "GL_VERTEX_ATTRIB_ARRAY10_NV (0x865A)"; case 0x865B /* GL_VERTEX_ATTRIB_ARRAY11_NV */: return "GL_VERTEX_ATTRIB_ARRAY11_NV (0x865B)"; case 0x865C /* GL_VERTEX_ATTRIB_ARRAY12_NV */: return "GL_VERTEX_ATTRIB_ARRAY12_NV (0x865C)"; case 0x865D /* GL_VERTEX_ATTRIB_ARRAY13_NV */: return "GL_VERTEX_ATTRIB_ARRAY13_NV (0x865D)"; case 0x865E /* GL_VERTEX_ATTRIB_ARRAY14_NV */: return "GL_VERTEX_ATTRIB_ARRAY14_NV (0x865E)"; case 0x865F /* GL_VERTEX_ATTRIB_ARRAY15_NV */: return "GL_VERTEX_ATTRIB_ARRAY15_NV (0x865F)"; case 0x8660 /* GL_MAP1_VERTEX_ATTRIB0_4_NV */: return "GL_MAP1_VERTEX_ATTRIB0_4_NV (0x8660)"; case 0x8661 /* GL_MAP1_VERTEX_ATTRIB1_4_NV */: return "GL_MAP1_VERTEX_ATTRIB1_4_NV (0x8661)"; case 0x8662 /* GL_MAP1_VERTEX_ATTRIB2_4_NV */: return "GL_MAP1_VERTEX_ATTRIB2_4_NV (0x8662)"; case 0x8663 /* GL_MAP1_VERTEX_ATTRIB3_4_NV */: return "GL_MAP1_VERTEX_ATTRIB3_4_NV (0x8663)"; case 0x8664 /* GL_MAP1_VERTEX_ATTRIB4_4_NV */: return "GL_MAP1_VERTEX_ATTRIB4_4_NV (0x8664)"; case 0x8665 /* GL_MAP1_VERTEX_ATTRIB5_4_NV */: return "GL_MAP1_VERTEX_ATTRIB5_4_NV (0x8665)"; case 0x8666 /* GL_MAP1_VERTEX_ATTRIB6_4_NV */: return "GL_MAP1_VERTEX_ATTRIB6_4_NV (0x8666)"; case 0x8667 /* GL_MAP1_VERTEX_ATTRIB7_4_NV */: return "GL_MAP1_VERTEX_ATTRIB7_4_NV (0x8667)"; case 0x8668 /* GL_MAP1_VERTEX_ATTRIB8_4_NV */: return "GL_MAP1_VERTEX_ATTRIB8_4_NV (0x8668)"; case 0x8669 /* GL_MAP1_VERTEX_ATTRIB9_4_NV */: return "GL_MAP1_VERTEX_ATTRIB9_4_NV (0x8669)"; case 0x866A /* GL_MAP1_VERTEX_ATTRIB10_4_NV */: return "GL_MAP1_VERTEX_ATTRIB10_4_NV (0x866A)"; case 0x866B /* GL_MAP1_VERTEX_ATTRIB11_4_NV */: return "GL_MAP1_VERTEX_ATTRIB11_4_NV (0x866B)"; case 0x866C /* GL_MAP1_VERTEX_ATTRIB12_4_NV */: return "GL_MAP1_VERTEX_ATTRIB12_4_NV (0x866C)"; case 0x866D /* GL_MAP1_VERTEX_ATTRIB13_4_NV */: return "GL_MAP1_VERTEX_ATTRIB13_4_NV (0x866D)"; case 0x866E /* GL_MAP1_VERTEX_ATTRIB14_4_NV */: return "GL_MAP1_VERTEX_ATTRIB14_4_NV (0x866E)"; case 0x866F /* GL_MAP1_VERTEX_ATTRIB15_4_NV */: return "GL_MAP1_VERTEX_ATTRIB15_4_NV (0x866F)"; case 0x8670 /* GL_MAP2_VERTEX_ATTRIB0_4_NV */: return "GL_MAP2_VERTEX_ATTRIB0_4_NV (0x8670)"; case 0x8671 /* GL_MAP2_VERTEX_ATTRIB1_4_NV */: return "GL_MAP2_VERTEX_ATTRIB1_4_NV (0x8671)"; case 0x8672 /* GL_MAP2_VERTEX_ATTRIB2_4_NV */: return "GL_MAP2_VERTEX_ATTRIB2_4_NV (0x8672)"; case 0x8673 /* GL_MAP2_VERTEX_ATTRIB3_4_NV */: return "GL_MAP2_VERTEX_ATTRIB3_4_NV (0x8673)"; case 0x8674 /* GL_MAP2_VERTEX_ATTRIB4_4_NV */: return "GL_MAP2_VERTEX_ATTRIB4_4_NV (0x8674)"; case 0x8675 /* GL_MAP2_VERTEX_ATTRIB5_4_NV */: return "GL_MAP2_VERTEX_ATTRIB5_4_NV (0x8675)"; case 0x8676 /* GL_MAP2_VERTEX_ATTRIB6_4_NV */: return "GL_MAP2_VERTEX_ATTRIB6_4_NV (0x8676)"; //case 0x8677 /* GL_MAP2_VERTEX_ATTRIB7_4_NV */: return "GL_MAP2_VERTEX_ATTRIB7_4_NV (0x8677)"; case 0x8678 /* GL_MAP2_VERTEX_ATTRIB8_4_NV */: return "GL_MAP2_VERTEX_ATTRIB8_4_NV (0x8678)"; case 0x8679 /* GL_MAP2_VERTEX_ATTRIB9_4_NV */: return "GL_MAP2_VERTEX_ATTRIB9_4_NV (0x8679)"; case 0x867A /* GL_MAP2_VERTEX_ATTRIB10_4_NV */: return "GL_MAP2_VERTEX_ATTRIB10_4_NV (0x867A)"; case 0x867B /* GL_MAP2_VERTEX_ATTRIB11_4_NV */: return "GL_MAP2_VERTEX_ATTRIB11_4_NV (0x867B)"; case 0x867C /* GL_MAP2_VERTEX_ATTRIB12_4_NV */: return "GL_MAP2_VERTEX_ATTRIB12_4_NV (0x867C)"; case 0x867D /* GL_MAP2_VERTEX_ATTRIB13_4_NV */: return "GL_MAP2_VERTEX_ATTRIB13_4_NV (0x867D)"; case 0x867E /* GL_MAP2_VERTEX_ATTRIB14_4_NV */: return "GL_MAP2_VERTEX_ATTRIB14_4_NV (0x867E)"; case 0x867F /* GL_MAP2_VERTEX_ATTRIB15_4_NV */: return "GL_MAP2_VERTEX_ATTRIB15_4_NV (0x867F)"; /* ------------------------ GL_NV_vertex_program1_1 ------------------------ */ /* ------------------------- GL_NV_vertex_program2 ------------------------- */ /* ---------------------- GL_NV_vertex_program2_option --------------------- */ //case 0x88F5 /* GL_MAX_PROGRAM_CALL_DEPTH_NV */: return "GL_MAX_PROGRAM_CALL_DEPTH_NV (0x88F5)"; /* ------------------------- GL_NV_vertex_program3 ------------------------- */ /* ------------------------- GL_NV_vertex_program4 ------------------------- */ //case 0x88FD /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV */: return "GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV (0x88FD)"; /* -------------------------- GL_NV_video_capture -------------------------- */ case 0x9020 /* GL_VIDEO_BUFFER_NV */: return "GL_VIDEO_BUFFER_NV (0x9020)"; case 0x9021 /* GL_VIDEO_BUFFER_BINDING_NV */: return "GL_VIDEO_BUFFER_BINDING_NV (0x9021)"; case 0x9022 /* GL_FIELD_UPPER_NV */: return "GL_FIELD_UPPER_NV (0x9022)"; case 0x9023 /* GL_FIELD_LOWER_NV */: return "GL_FIELD_LOWER_NV (0x9023)"; case 0x9024 /* GL_NUM_VIDEO_CAPTURE_STREAMS_NV */: return "GL_NUM_VIDEO_CAPTURE_STREAMS_NV (0x9024)"; case 0x9025 /* GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV */: return "GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV (0x9025)"; case 0x9026 /* GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV */: return "GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV (0x9026)"; case 0x9027 /* GL_LAST_VIDEO_CAPTURE_STATUS_NV */: return "GL_LAST_VIDEO_CAPTURE_STATUS_NV (0x9027)"; case 0x9028 /* GL_VIDEO_BUFFER_PITCH_NV */: return "GL_VIDEO_BUFFER_PITCH_NV (0x9028)"; case 0x9029 /* GL_VIDEO_COLOR_CONVERSION_MATRIX_NV */: return "GL_VIDEO_COLOR_CONVERSION_MATRIX_NV (0x9029)"; case 0x902A /* GL_VIDEO_COLOR_CONVERSION_MAX_NV */: return "GL_VIDEO_COLOR_CONVERSION_MAX_NV (0x902A)"; case 0x902B /* GL_VIDEO_COLOR_CONVERSION_MIN_NV */: return "GL_VIDEO_COLOR_CONVERSION_MIN_NV (0x902B)"; case 0x902C /* GL_VIDEO_COLOR_CONVERSION_OFFSET_NV */: return "GL_VIDEO_COLOR_CONVERSION_OFFSET_NV (0x902C)"; case 0x902D /* GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV */: return "GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV (0x902D)"; case 0x902E /* GL_PARTIAL_SUCCESS_NV */: return "GL_PARTIAL_SUCCESS_NV (0x902E)"; case 0x902F /* GL_SUCCESS_NV */: return "GL_SUCCESS_NV (0x902F)"; case 0x9030 /* GL_FAILURE_NV */: return "GL_FAILURE_NV (0x9030)"; case 0x9031 /* GL_YCBYCR8_422_NV */: return "GL_YCBYCR8_422_NV (0x9031)"; case 0x9032 /* GL_YCBAYCR8A_4224_NV */: return "GL_YCBAYCR8A_4224_NV (0x9032)"; case 0x9033 /* GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV */: return "GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV (0x9033)"; case 0x9034 /* GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV */: return "GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV (0x9034)"; case 0x9035 /* GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV */: return "GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV (0x9035)"; case 0x9036 /* GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV */: return "GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV (0x9036)"; case 0x9037 /* GL_Z4Y12Z4CB12Z4CR12_444_NV */: return "GL_Z4Y12Z4CB12Z4CR12_444_NV (0x9037)"; case 0x9038 /* GL_VIDEO_CAPTURE_FRAME_WIDTH_NV */: return "GL_VIDEO_CAPTURE_FRAME_WIDTH_NV (0x9038)"; case 0x9039 /* GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV */: return "GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV (0x9039)"; case 0x903A /* GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV */: return "GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV (0x903A)"; case 0x903B /* GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV */: return "GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV (0x903B)"; case 0x903C /* GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV */: return "GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV (0x903C)"; /* ------------------------ GL_OES_byte_coordinates ------------------------ */ //case 0x1400 /* GL_BYTE */: return "GL_BYTE (0x1400)"; /* ------------------- GL_OES_compressed_paletted_texture ------------------ */ case 0x8B90 /* GL_PALETTE4_RGB8_OES */: return "GL_PALETTE4_RGB8_OES (0x8B90)"; case 0x8B91 /* GL_PALETTE4_RGBA8_OES */: return "GL_PALETTE4_RGBA8_OES (0x8B91)"; case 0x8B92 /* GL_PALETTE4_R5_G6_B5_OES */: return "GL_PALETTE4_R5_G6_B5_OES (0x8B92)"; case 0x8B93 /* GL_PALETTE4_RGBA4_OES */: return "GL_PALETTE4_RGBA4_OES (0x8B93)"; case 0x8B94 /* GL_PALETTE4_RGB5_A1_OES */: return "GL_PALETTE4_RGB5_A1_OES (0x8B94)"; case 0x8B95 /* GL_PALETTE8_RGB8_OES */: return "GL_PALETTE8_RGB8_OES (0x8B95)"; case 0x8B96 /* GL_PALETTE8_RGBA8_OES */: return "GL_PALETTE8_RGBA8_OES (0x8B96)"; case 0x8B97 /* GL_PALETTE8_R5_G6_B5_OES */: return "GL_PALETTE8_R5_G6_B5_OES (0x8B97)"; case 0x8B98 /* GL_PALETTE8_RGBA4_OES */: return "GL_PALETTE8_RGBA4_OES (0x8B98)"; case 0x8B99 /* GL_PALETTE8_RGB5_A1_OES */: return "GL_PALETTE8_RGB5_A1_OES (0x8B99)"; /* --------------------------- GL_OES_read_format -------------------------- */ //case 0x8B9A /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */: return "GL_IMPLEMENTATION_COLOR_READ_TYPE_OES (0x8B9A)"; //case 0x8B9B /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */: return "GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES (0x8B9B)"; /* ------------------------ GL_OES_single_precision ------------------------ */ /* ---------------------------- GL_OML_interlace --------------------------- */ case 0x8980 /* GL_INTERLACE_OML */: return "GL_INTERLACE_OML (0x8980)"; case 0x8981 /* GL_INTERLACE_READ_OML */: return "GL_INTERLACE_READ_OML (0x8981)"; /* ---------------------------- GL_OML_resample ---------------------------- */ case 0x8984 /* GL_PACK_RESAMPLE_OML */: return "GL_PACK_RESAMPLE_OML (0x8984)"; case 0x8985 /* GL_UNPACK_RESAMPLE_OML */: return "GL_UNPACK_RESAMPLE_OML (0x8985)"; case 0x8986 /* GL_RESAMPLE_REPLICATE_OML */: return "GL_RESAMPLE_REPLICATE_OML (0x8986)"; case 0x8987 /* GL_RESAMPLE_ZERO_FILL_OML */: return "GL_RESAMPLE_ZERO_FILL_OML (0x8987)"; case 0x8988 /* GL_RESAMPLE_AVERAGE_OML */: return "GL_RESAMPLE_AVERAGE_OML (0x8988)"; case 0x8989 /* GL_RESAMPLE_DECIMATE_OML */: return "GL_RESAMPLE_DECIMATE_OML (0x8989)"; /* ---------------------------- GL_OML_subsample --------------------------- */ case 0x8982 /* GL_FORMAT_SUBSAMPLE_24_24_OML */: return "GL_FORMAT_SUBSAMPLE_24_24_OML (0x8982)"; case 0x8983 /* GL_FORMAT_SUBSAMPLE_244_244_OML */: return "GL_FORMAT_SUBSAMPLE_244_244_OML (0x8983)"; /* --------------------------- GL_PGI_misc_hints --------------------------- *//* -------------------------- GL_PGI_vertex_hints -------------------------- */ //case 0x00000004 /* GL_VERTEX23_BIT_PGI */: return "GL_VERTEX23_BIT_PGI (0x00000004)"; //case 0x00000008 /* GL_VERTEX4_BIT_PGI */: return "GL_VERTEX4_BIT_PGI (0x00000008)"; //case 0x00010000 /* GL_COLOR3_BIT_PGI */: return "GL_COLOR3_BIT_PGI (0x00010000)"; //case 0x00020000 /* GL_COLOR4_BIT_PGI */: return "GL_COLOR4_BIT_PGI (0x00020000)"; //case 0x00040000 /* GL_EDGEFLAG_BIT_PGI */: return "GL_EDGEFLAG_BIT_PGI (0x00040000)"; //case 0x00080000 /* GL_INDEX_BIT_PGI */: return "GL_INDEX_BIT_PGI (0x00080000)"; //case 0x00100000 /* GL_MAT_AMBIENT_BIT_PGI */: return "GL_MAT_AMBIENT_BIT_PGI (0x00100000)"; //case 0x00200000 /* GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI */: return "GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI (0x00200000)"; //case 0x00400000 /* GL_MAT_DIFFUSE_BIT_PGI */: return "GL_MAT_DIFFUSE_BIT_PGI (0x00400000)"; //case 0x00800000 /* GL_MAT_EMISSION_BIT_PGI */: return "GL_MAT_EMISSION_BIT_PGI (0x00800000)"; //case 0x01000000 /* GL_MAT_COLOR_INDEXES_BIT_PGI */: return "GL_MAT_COLOR_INDEXES_BIT_PGI (0x01000000)"; //case 0x02000000 /* GL_MAT_SHININESS_BIT_PGI */: return "GL_MAT_SHININESS_BIT_PGI (0x02000000)"; //case 0x04000000 /* GL_MAT_SPECULAR_BIT_PGI */: return "GL_MAT_SPECULAR_BIT_PGI (0x04000000)"; //case 0x08000000 /* GL_NORMAL_BIT_PGI */: return "GL_NORMAL_BIT_PGI (0x08000000)"; //case 0x10000000 /* GL_TEXCOORD1_BIT_PGI */: return "GL_TEXCOORD1_BIT_PGI (0x10000000)"; //case 0x20000000 /* GL_TEXCOORD2_BIT_PGI */: return "GL_TEXCOORD2_BIT_PGI (0x20000000)"; case 0x40000000 /* GL_TEXCOORD3_BIT_PGI */: return "GL_TEXCOORD3_BIT_PGI (0x40000000)"; case 0x80000000 /* GL_TEXCOORD4_BIT_PGI */: return "GL_TEXCOORD4_BIT_PGI (0x80000000)"; /* ------------------------- GL_REGAL_error_string ------------------------- */ /* ------------------------ GL_REGAL_extension_query ----------------------- */ /* ------------------------------ GL_REGAL_log ----------------------------- */ case 0x9319 /* GL_LOG_ERROR_REGAL */: return "GL_LOG_ERROR_REGAL (0x9319)"; case 0x931A /* GL_LOG_WARNING_REGAL */: return "GL_LOG_WARNING_REGAL (0x931A)"; case 0x931B /* GL_LOG_INFO_REGAL */: return "GL_LOG_INFO_REGAL (0x931B)"; case 0x931C /* GL_LOG_APP_REGAL */: return "GL_LOG_APP_REGAL (0x931C)"; case 0x931D /* GL_LOG_DRIVER_REGAL */: return "GL_LOG_DRIVER_REGAL (0x931D)"; case 0x931E /* GL_LOG_INTERNAL_REGAL */: return "GL_LOG_INTERNAL_REGAL (0x931E)"; case 0x931F /* GL_LOG_DEBUG_REGAL */: return "GL_LOG_DEBUG_REGAL (0x931F)"; case 0x9320 /* GL_LOG_STATUS_REGAL */: return "GL_LOG_STATUS_REGAL (0x9320)"; case 0x9321 /* GL_LOG_HTTP_REGAL */: return "GL_LOG_HTTP_REGAL (0x9321)"; /* ----------------------- GL_REND_screen_coordinates ---------------------- */ case 0x8490 /* GL_SCREEN_COORDINATES_REND */: return "GL_SCREEN_COORDINATES_REND (0x8490)"; case 0x8491 /* GL_INVERTED_SCREEN_W_REND */: return "GL_INVERTED_SCREEN_W_REND (0x8491)"; /* ------------------------------- GL_S3_s3tc ------------------------------ */ case 0x83A0 /* GL_RGB_S3TC */: return "GL_RGB_S3TC (0x83A0)"; case 0x83A1 /* GL_RGB4_S3TC */: return "GL_RGB4_S3TC (0x83A1)"; case 0x83A2 /* GL_RGBA_S3TC */: return "GL_RGBA_S3TC (0x83A2)"; case 0x83A3 /* GL_RGBA4_S3TC */: return "GL_RGBA4_S3TC (0x83A3)"; case 0x83A4 /* GL_RGBA_DXT5_S3TC */: return "GL_RGBA_DXT5_S3TC (0x83A4)"; case 0x83A5 /* GL_RGBA4_DXT5_S3TC */: return "GL_RGBA4_DXT5_S3TC (0x83A5)"; /* -------------------------- GL_SGIS_color_range -------------------------- */ case 0x85A5 /* GL_EXTENDED_RANGE_SGIS */: return "GL_EXTENDED_RANGE_SGIS (0x85A5)"; case 0x85A6 /* GL_MIN_RED_SGIS */: return "GL_MIN_RED_SGIS (0x85A6)"; case 0x85A7 /* GL_MAX_RED_SGIS */: return "GL_MAX_RED_SGIS (0x85A7)"; case 0x85A8 /* GL_MIN_GREEN_SGIS */: return "GL_MIN_GREEN_SGIS (0x85A8)"; case 0x85A9 /* GL_MAX_GREEN_SGIS */: return "GL_MAX_GREEN_SGIS (0x85A9)"; case 0x85AA /* GL_MIN_BLUE_SGIS */: return "GL_MIN_BLUE_SGIS (0x85AA)"; case 0x85AB /* GL_MAX_BLUE_SGIS */: return "GL_MAX_BLUE_SGIS (0x85AB)"; case 0x85AC /* GL_MIN_ALPHA_SGIS */: return "GL_MIN_ALPHA_SGIS (0x85AC)"; case 0x85AD /* GL_MAX_ALPHA_SGIS */: return "GL_MAX_ALPHA_SGIS (0x85AD)"; /* ------------------------- GL_SGIS_detail_texture ------------------------ */ /* -------------------------- GL_SGIS_fog_function ------------------------- */ /* ------------------------ GL_SGIS_generate_mipmap ------------------------ */ //case 0x8191 /* GL_GENERATE_MIPMAP_SGIS */: return "GL_GENERATE_MIPMAP_SGIS (0x8191)"; //case 0x8192 /* GL_GENERATE_MIPMAP_HINT_SGIS */: return "GL_GENERATE_MIPMAP_HINT_SGIS (0x8192)"; /* -------------------------- GL_SGIS_multisample -------------------------- */ //case 0x809D /* GL_MULTISAMPLE_SGIS */: return "GL_MULTISAMPLE_SGIS (0x809D)"; //case 0x809E /* GL_SAMPLE_ALPHA_TO_MASK_SGIS */: return "GL_SAMPLE_ALPHA_TO_MASK_SGIS (0x809E)"; //case 0x809F /* GL_SAMPLE_ALPHA_TO_ONE_SGIS */: return "GL_SAMPLE_ALPHA_TO_ONE_SGIS (0x809F)"; //case 0x80A0 /* GL_SAMPLE_MASK_SGIS */: return "GL_SAMPLE_MASK_SGIS (0x80A0)"; //case 0x80A1 /* GL_1PASS_SGIS */: return "GL_1PASS_SGIS (0x80A1)"; //case 0x80A2 /* GL_2PASS_0_SGIS */: return "GL_2PASS_0_SGIS (0x80A2)"; //case 0x80A3 /* GL_2PASS_1_SGIS */: return "GL_2PASS_1_SGIS (0x80A3)"; //case 0x80A4 /* GL_4PASS_0_SGIS */: return "GL_4PASS_0_SGIS (0x80A4)"; //case 0x80A5 /* GL_4PASS_1_SGIS */: return "GL_4PASS_1_SGIS (0x80A5)"; //case 0x80A6 /* GL_4PASS_2_SGIS */: return "GL_4PASS_2_SGIS (0x80A6)"; //case 0x80A7 /* GL_4PASS_3_SGIS */: return "GL_4PASS_3_SGIS (0x80A7)"; //case 0x80A8 /* GL_SAMPLE_BUFFERS_SGIS */: return "GL_SAMPLE_BUFFERS_SGIS (0x80A8)"; //case 0x80A9 /* GL_SAMPLES_SGIS */: return "GL_SAMPLES_SGIS (0x80A9)"; //case 0x80AA /* GL_SAMPLE_MASK_VALUE_SGIS */: return "GL_SAMPLE_MASK_VALUE_SGIS (0x80AA)"; //case 0x80AB /* GL_SAMPLE_MASK_INVERT_SGIS */: return "GL_SAMPLE_MASK_INVERT_SGIS (0x80AB)"; //case 0x80AC /* GL_SAMPLE_PATTERN_SGIS */: return "GL_SAMPLE_PATTERN_SGIS (0x80AC)"; /* ------------------------- GL_SGIS_pixel_texture ------------------------- */ /* ----------------------- GL_SGIS_point_line_texgen ----------------------- */ case 0x81F0 /* GL_EYE_DISTANCE_TO_POINT_SGIS */: return "GL_EYE_DISTANCE_TO_POINT_SGIS (0x81F0)"; case 0x81F1 /* GL_OBJECT_DISTANCE_TO_POINT_SGIS */: return "GL_OBJECT_DISTANCE_TO_POINT_SGIS (0x81F1)"; case 0x81F2 /* GL_EYE_DISTANCE_TO_LINE_SGIS */: return "GL_EYE_DISTANCE_TO_LINE_SGIS (0x81F2)"; case 0x81F3 /* GL_OBJECT_DISTANCE_TO_LINE_SGIS */: return "GL_OBJECT_DISTANCE_TO_LINE_SGIS (0x81F3)"; case 0x81F4 /* GL_EYE_POINT_SGIS */: return "GL_EYE_POINT_SGIS (0x81F4)"; case 0x81F5 /* GL_OBJECT_POINT_SGIS */: return "GL_OBJECT_POINT_SGIS (0x81F5)"; case 0x81F6 /* GL_EYE_LINE_SGIS */: return "GL_EYE_LINE_SGIS (0x81F6)"; case 0x81F7 /* GL_OBJECT_LINE_SGIS */: return "GL_OBJECT_LINE_SGIS (0x81F7)"; /* ------------------------ GL_SGIS_sharpen_texture ------------------------ */ /* --------------------------- GL_SGIS_texture4D --------------------------- */ /* ---------------------- GL_SGIS_texture_border_clamp --------------------- */ //case 0x812D /* GL_CLAMP_TO_BORDER_SGIS */: return "GL_CLAMP_TO_BORDER_SGIS (0x812D)"; /* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */ //case 0x812F /* GL_CLAMP_TO_EDGE_SGIS */: return "GL_CLAMP_TO_EDGE_SGIS (0x812F)"; /* ------------------------ GL_SGIS_texture_filter4 ------------------------ */ /* -------------------------- GL_SGIS_texture_lod -------------------------- */ //case 0x813A /* GL_TEXTURE_MIN_LOD_SGIS */: return "GL_TEXTURE_MIN_LOD_SGIS (0x813A)"; //case 0x813B /* GL_TEXTURE_MAX_LOD_SGIS */: return "GL_TEXTURE_MAX_LOD_SGIS (0x813B)"; //case 0x813C /* GL_TEXTURE_BASE_LEVEL_SGIS */: return "GL_TEXTURE_BASE_LEVEL_SGIS (0x813C)"; //case 0x813D /* GL_TEXTURE_MAX_LEVEL_SGIS */: return "GL_TEXTURE_MAX_LEVEL_SGIS (0x813D)"; /* ------------------------- GL_SGIS_texture_select ------------------------ */ /* ----------------------------- GL_SGIX_async ----------------------------- */ case 0x8329 /* GL_ASYNC_MARKER_SGIX */: return "GL_ASYNC_MARKER_SGIX (0x8329)"; /* ------------------------ GL_SGIX_async_histogram ------------------------ */ case 0x832C /* GL_ASYNC_HISTOGRAM_SGIX */: return "GL_ASYNC_HISTOGRAM_SGIX (0x832C)"; case 0x832D /* GL_MAX_ASYNC_HISTOGRAM_SGIX */: return "GL_MAX_ASYNC_HISTOGRAM_SGIX (0x832D)"; /* -------------------------- GL_SGIX_async_pixel -------------------------- */ case 0x835C /* GL_ASYNC_TEX_IMAGE_SGIX */: return "GL_ASYNC_TEX_IMAGE_SGIX (0x835C)"; case 0x835D /* GL_ASYNC_DRAW_PIXELS_SGIX */: return "GL_ASYNC_DRAW_PIXELS_SGIX (0x835D)"; case 0x835E /* GL_ASYNC_READ_PIXELS_SGIX */: return "GL_ASYNC_READ_PIXELS_SGIX (0x835E)"; case 0x835F /* GL_MAX_ASYNC_TEX_IMAGE_SGIX */: return "GL_MAX_ASYNC_TEX_IMAGE_SGIX (0x835F)"; case 0x8360 /* GL_MAX_ASYNC_DRAW_PIXELS_SGIX */: return "GL_MAX_ASYNC_DRAW_PIXELS_SGIX (0x8360)"; case 0x8361 /* GL_MAX_ASYNC_READ_PIXELS_SGIX */: return "GL_MAX_ASYNC_READ_PIXELS_SGIX (0x8361)"; /* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */ case 0x8320 /* GL_ALPHA_MIN_SGIX */: return "GL_ALPHA_MIN_SGIX (0x8320)"; case 0x8321 /* GL_ALPHA_MAX_SGIX */: return "GL_ALPHA_MAX_SGIX (0x8321)"; /* ---------------------------- GL_SGIX_clipmap ---------------------------- */ /* ---------------------- GL_SGIX_convolution_accuracy --------------------- */ case 0x8316 /* GL_CONVOLUTION_HINT_SGIX */: return "GL_CONVOLUTION_HINT_SGIX (0x8316)"; /* ------------------------- GL_SGIX_depth_texture ------------------------- */ //case 0x81A5 /* GL_DEPTH_COMPONENT16_SGIX */: return "GL_DEPTH_COMPONENT16_SGIX (0x81A5)"; //case 0x81A6 /* GL_DEPTH_COMPONENT24_SGIX */: return "GL_DEPTH_COMPONENT24_SGIX (0x81A6)"; //case 0x81A7 /* GL_DEPTH_COMPONENT32_SGIX */: return "GL_DEPTH_COMPONENT32_SGIX (0x81A7)"; /* -------------------------- GL_SGIX_flush_raster ------------------------- */ /* --------------------------- GL_SGIX_fog_offset -------------------------- */ case 0x8198 /* GL_FOG_OFFSET_SGIX */: return "GL_FOG_OFFSET_SGIX (0x8198)"; case 0x8199 /* GL_FOG_OFFSET_VALUE_SGIX */: return "GL_FOG_OFFSET_VALUE_SGIX (0x8199)"; /* -------------------------- GL_SGIX_fog_texture -------------------------- */ /* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */ /* --------------------------- GL_SGIX_framezoom --------------------------- */ /* --------------------------- GL_SGIX_interlace --------------------------- */ case 0x8094 /* GL_INTERLACE_SGIX */: return "GL_INTERLACE_SGIX (0x8094)"; /* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */ /* ------------------------- GL_SGIX_list_priority ------------------------- */ /* ------------------------- GL_SGIX_pixel_texture ------------------------- */ /* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */ /* ------------------------ GL_SGIX_reference_plane ------------------------ */ /* ---------------------------- GL_SGIX_resample --------------------------- */ case 0x842E /* GL_PACK_RESAMPLE_SGIX */: return "GL_PACK_RESAMPLE_SGIX (0x842E)"; case 0x842F /* GL_UNPACK_RESAMPLE_SGIX */: return "GL_UNPACK_RESAMPLE_SGIX (0x842F)"; case 0x8430 /* GL_RESAMPLE_DECIMATE_SGIX */: return "GL_RESAMPLE_DECIMATE_SGIX (0x8430)"; case 0x8433 /* GL_RESAMPLE_REPLICATE_SGIX */: return "GL_RESAMPLE_REPLICATE_SGIX (0x8433)"; case 0x8434 /* GL_RESAMPLE_ZERO_FILL_SGIX */: return "GL_RESAMPLE_ZERO_FILL_SGIX (0x8434)"; /* ----------------------------- GL_SGIX_shadow ---------------------------- */ case 0x819A /* GL_TEXTURE_COMPARE_SGIX */: return "GL_TEXTURE_COMPARE_SGIX (0x819A)"; case 0x819B /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */: return "GL_TEXTURE_COMPARE_OPERATOR_SGIX (0x819B)"; case 0x819C /* GL_TEXTURE_LEQUAL_R_SGIX */: return "GL_TEXTURE_LEQUAL_R_SGIX (0x819C)"; case 0x819D /* GL_TEXTURE_GEQUAL_R_SGIX */: return "GL_TEXTURE_GEQUAL_R_SGIX (0x819D)"; /* ------------------------- GL_SGIX_shadow_ambient ------------------------ */ //case 0x80BF /* GL_SHADOW_AMBIENT_SGIX */: return "GL_SHADOW_AMBIENT_SGIX (0x80BF)"; /* ----------------------------- GL_SGIX_sprite ---------------------------- */ /* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */ /* ------------------------ GL_SGIX_texture_add_env ------------------------ */ /* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */ case 0x8369 /* GL_TEXTURE_MAX_CLAMP_S_SGIX */: return "GL_TEXTURE_MAX_CLAMP_S_SGIX (0x8369)"; case 0x836A /* GL_TEXTURE_MAX_CLAMP_T_SGIX */: return "GL_TEXTURE_MAX_CLAMP_T_SGIX (0x836A)"; case 0x836B /* GL_TEXTURE_MAX_CLAMP_R_SGIX */: return "GL_TEXTURE_MAX_CLAMP_R_SGIX (0x836B)"; /* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */ /* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */ case 0x812E /* GL_TEXTURE_MULTI_BUFFER_HINT_SGIX */: return "GL_TEXTURE_MULTI_BUFFER_HINT_SGIX (0x812E)"; /* ------------------------- GL_SGIX_texture_range ------------------------- */ case 0x85E0 /* GL_RGB_SIGNED_SGIX */: return "GL_RGB_SIGNED_SGIX (0x85E0)"; case 0x85E1 /* GL_RGBA_SIGNED_SGIX */: return "GL_RGBA_SIGNED_SGIX (0x85E1)"; case 0x85E2 /* GL_ALPHA_SIGNED_SGIX */: return "GL_ALPHA_SIGNED_SGIX (0x85E2)"; case 0x85E3 /* GL_LUMINANCE_SIGNED_SGIX */: return "GL_LUMINANCE_SIGNED_SGIX (0x85E3)"; case 0x85E4 /* GL_INTENSITY_SIGNED_SGIX */: return "GL_INTENSITY_SIGNED_SGIX (0x85E4)"; case 0x85E5 /* GL_LUMINANCE_ALPHA_SIGNED_SGIX */: return "GL_LUMINANCE_ALPHA_SIGNED_SGIX (0x85E5)"; case 0x85E6 /* GL_RGB16_SIGNED_SGIX */: return "GL_RGB16_SIGNED_SGIX (0x85E6)"; case 0x85E7 /* GL_RGBA16_SIGNED_SGIX */: return "GL_RGBA16_SIGNED_SGIX (0x85E7)"; case 0x85E8 /* GL_ALPHA16_SIGNED_SGIX */: return "GL_ALPHA16_SIGNED_SGIX (0x85E8)"; case 0x85E9 /* GL_LUMINANCE16_SIGNED_SGIX */: return "GL_LUMINANCE16_SIGNED_SGIX (0x85E9)"; case 0x85EA /* GL_INTENSITY16_SIGNED_SGIX */: return "GL_INTENSITY16_SIGNED_SGIX (0x85EA)"; case 0x85EB /* GL_LUMINANCE16_ALPHA16_SIGNED_SGIX */: return "GL_LUMINANCE16_ALPHA16_SIGNED_SGIX (0x85EB)"; case 0x85EC /* GL_RGB_EXTENDED_RANGE_SGIX */: return "GL_RGB_EXTENDED_RANGE_SGIX (0x85EC)"; case 0x85ED /* GL_RGBA_EXTENDED_RANGE_SGIX */: return "GL_RGBA_EXTENDED_RANGE_SGIX (0x85ED)"; case 0x85EE /* GL_ALPHA_EXTENDED_RANGE_SGIX */: return "GL_ALPHA_EXTENDED_RANGE_SGIX (0x85EE)"; case 0x85EF /* GL_LUMINANCE_EXTENDED_RANGE_SGIX */: return "GL_LUMINANCE_EXTENDED_RANGE_SGIX (0x85EF)"; case 0x85F0 /* GL_INTENSITY_EXTENDED_RANGE_SGIX */: return "GL_INTENSITY_EXTENDED_RANGE_SGIX (0x85F0)"; case 0x85F1 /* GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX */: return "GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX (0x85F1)"; case 0x85F2 /* GL_RGB16_EXTENDED_RANGE_SGIX */: return "GL_RGB16_EXTENDED_RANGE_SGIX (0x85F2)"; case 0x85F3 /* GL_RGBA16_EXTENDED_RANGE_SGIX */: return "GL_RGBA16_EXTENDED_RANGE_SGIX (0x85F3)"; case 0x85F4 /* GL_ALPHA16_EXTENDED_RANGE_SGIX */: return "GL_ALPHA16_EXTENDED_RANGE_SGIX (0x85F4)"; case 0x85F5 /* GL_LUMINANCE16_EXTENDED_RANGE_SGIX */: return "GL_LUMINANCE16_EXTENDED_RANGE_SGIX (0x85F5)"; case 0x85F6 /* GL_INTENSITY16_EXTENDED_RANGE_SGIX */: return "GL_INTENSITY16_EXTENDED_RANGE_SGIX (0x85F6)"; case 0x85F7 /* GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX */: return "GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX (0x85F7)"; case 0x85F8 /* GL_MIN_LUMINANCE_SGIS */: return "GL_MIN_LUMINANCE_SGIS (0x85F8)"; case 0x85F9 /* GL_MAX_LUMINANCE_SGIS */: return "GL_MAX_LUMINANCE_SGIS (0x85F9)"; case 0x85FA /* GL_MIN_INTENSITY_SGIS */: return "GL_MIN_INTENSITY_SGIS (0x85FA)"; case 0x85FB /* GL_MAX_INTENSITY_SGIS */: return "GL_MAX_INTENSITY_SGIS (0x85FB)"; /* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */ case 0x8179 /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */: return "GL_POST_TEXTURE_FILTER_BIAS_SGIX (0x8179)"; case 0x817A /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */: return "GL_POST_TEXTURE_FILTER_SCALE_SGIX (0x817A)"; case 0x817B /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */: return "GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX (0x817B)"; case 0x817C /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */: return "GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX (0x817C)"; /* ------------------------- GL_SGIX_vertex_preclip ------------------------ */ case 0x83EE /* GL_VERTEX_PRECLIP_SGIX */: return "GL_VERTEX_PRECLIP_SGIX (0x83EE)"; case 0x83EF /* GL_VERTEX_PRECLIP_HINT_SGIX */: return "GL_VERTEX_PRECLIP_HINT_SGIX (0x83EF)"; /* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */ //case 0x83EE /* GL_VERTEX_PRECLIP_SGIX */: return "GL_VERTEX_PRECLIP_SGIX (0x83EE)"; //case 0x83EF /* GL_VERTEX_PRECLIP_HINT_SGIX */: return "GL_VERTEX_PRECLIP_HINT_SGIX (0x83EF)"; /* ----------------------------- GL_SGIX_ycrcb ----------------------------- */ /* -------------------------- GL_SGI_color_matrix -------------------------- */ //case 0x80B1 /* GL_COLOR_MATRIX_SGI */: return "GL_COLOR_MATRIX_SGI (0x80B1)"; //case 0x80B2 /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */: return "GL_COLOR_MATRIX_STACK_DEPTH_SGI (0x80B2)"; //case 0x80B3 /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */: return "GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI (0x80B3)"; //case 0x80B4 /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */: return "GL_POST_COLOR_MATRIX_RED_SCALE_SGI (0x80B4)"; //case 0x80B5 /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */: return "GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI (0x80B5)"; //case 0x80B6 /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */: return "GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI (0x80B6)"; //case 0x80B7 /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */: return "GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI (0x80B7)"; //case 0x80B8 /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */: return "GL_POST_COLOR_MATRIX_RED_BIAS_SGI (0x80B8)"; //case 0x80B9 /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */: return "GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI (0x80B9)"; //case 0x80BA /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */: return "GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI (0x80BA)"; //case 0x80BB /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */: return "GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI (0x80BB)"; /* --------------------------- GL_SGI_color_table -------------------------- */ //case 0x80D0 /* GL_COLOR_TABLE_SGI */: return "GL_COLOR_TABLE_SGI (0x80D0)"; //case 0x80D1 /* GL_POST_CONVOLUTION_COLOR_TABLE_SGI */: return "GL_POST_CONVOLUTION_COLOR_TABLE_SGI (0x80D1)"; //case 0x80D2 /* GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI */: return "GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI (0x80D2)"; //case 0x80D3 /* GL_PROXY_COLOR_TABLE_SGI */: return "GL_PROXY_COLOR_TABLE_SGI (0x80D3)"; //case 0x80D4 /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI */: return "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI (0x80D4)"; //case 0x80D5 /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI */: return "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI (0x80D5)"; //case 0x80D6 /* GL_COLOR_TABLE_SCALE_SGI */: return "GL_COLOR_TABLE_SCALE_SGI (0x80D6)"; //case 0x80D7 /* GL_COLOR_TABLE_BIAS_SGI */: return "GL_COLOR_TABLE_BIAS_SGI (0x80D7)"; //case 0x80D8 /* GL_COLOR_TABLE_FORMAT_SGI */: return "GL_COLOR_TABLE_FORMAT_SGI (0x80D8)"; //case 0x80D9 /* GL_COLOR_TABLE_WIDTH_SGI */: return "GL_COLOR_TABLE_WIDTH_SGI (0x80D9)"; //case 0x80DA /* GL_COLOR_TABLE_RED_SIZE_SGI */: return "GL_COLOR_TABLE_RED_SIZE_SGI (0x80DA)"; //case 0x80DB /* GL_COLOR_TABLE_GREEN_SIZE_SGI */: return "GL_COLOR_TABLE_GREEN_SIZE_SGI (0x80DB)"; //case 0x80DC /* GL_COLOR_TABLE_BLUE_SIZE_SGI */: return "GL_COLOR_TABLE_BLUE_SIZE_SGI (0x80DC)"; //case 0x80DD /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */: return "GL_COLOR_TABLE_ALPHA_SIZE_SGI (0x80DD)"; //case 0x80DE /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */: return "GL_COLOR_TABLE_LUMINANCE_SIZE_SGI (0x80DE)"; //case 0x80DF /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */: return "GL_COLOR_TABLE_INTENSITY_SIZE_SGI (0x80DF)"; /* ----------------------- GL_SGI_texture_color_table ---------------------- */ case 0x80BC /* GL_TEXTURE_COLOR_TABLE_SGI */: return "GL_TEXTURE_COLOR_TABLE_SGI (0x80BC)"; case 0x80BD /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */: return "GL_PROXY_TEXTURE_COLOR_TABLE_SGI (0x80BD)"; /* ------------------------- GL_SUNX_constant_data ------------------------- */ case 0x81D5 /* GL_UNPACK_CONSTANT_DATA_SUNX */: return "GL_UNPACK_CONSTANT_DATA_SUNX (0x81D5)"; case 0x81D6 /* GL_TEXTURE_CONSTANT_DATA_SUNX */: return "GL_TEXTURE_CONSTANT_DATA_SUNX (0x81D6)";/* -------------------- GL_SUN_convolution_border_modes -------------------- */ case 0x81D4 /* GL_WRAP_BORDER_SUN */: return "GL_WRAP_BORDER_SUN (0x81D4)"; /* -------------------------- GL_SUN_global_alpha -------------------------- */ case 0x81D9 /* GL_GLOBAL_ALPHA_SUN */: return "GL_GLOBAL_ALPHA_SUN (0x81D9)"; case 0x81DA /* GL_GLOBAL_ALPHA_FACTOR_SUN */: return "GL_GLOBAL_ALPHA_FACTOR_SUN (0x81DA)"; /* --------------------------- GL_SUN_mesh_array --------------------------- */ case 0x8614 /* GL_QUAD_MESH_SUN */: return "GL_QUAD_MESH_SUN (0x8614)"; case 0x8615 /* GL_TRIANGLE_MESH_SUN */: return "GL_TRIANGLE_MESH_SUN (0x8615)"; /* ------------------------ GL_SUN_read_video_pixels ----------------------- */ /* --------------------------- GL_SUN_slice_accum -------------------------- */ case 0x85CC /* GL_SLICE_ACCUM_SUN */: return "GL_SLICE_ACCUM_SUN (0x85CC)"; /* -------------------------- GL_SUN_triangle_list ------------------------- */ //case 0x01 /* GL_RESTART_SUN */: return "GL_RESTART_SUN (0x01)"; //case 0x02 /* GL_REPLACE_MIDDLE_SUN */: return "GL_REPLACE_MIDDLE_SUN (0x02)"; //case 0x03 /* GL_REPLACE_OLDEST_SUN */: return "GL_REPLACE_OLDEST_SUN (0x03)"; case 0x81D7 /* GL_TRIANGLE_LIST_SUN */: return "GL_TRIANGLE_LIST_SUN (0x81D7)"; case 0x81D8 /* GL_REPLACEMENT_CODE_SUN */: return "GL_REPLACEMENT_CODE_SUN (0x81D8)"; case 0x85C0 /* GL_REPLACEMENT_CODE_ARRAY_SUN */: return "GL_REPLACEMENT_CODE_ARRAY_SUN (0x85C0)"; case 0x85C1 /* GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN */: return "GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN (0x85C1)"; case 0x85C2 /* GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN */: return "GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN (0x85C2)"; case 0x85C3 /* GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN */: return "GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN (0x85C3)"; case 0x85C4 /* GL_R1UI_V3F_SUN */: return "GL_R1UI_V3F_SUN (0x85C4)"; case 0x85C5 /* GL_R1UI_C4UB_V3F_SUN */: return "GL_R1UI_C4UB_V3F_SUN (0x85C5)"; case 0x85C6 /* GL_R1UI_C3F_V3F_SUN */: return "GL_R1UI_C3F_V3F_SUN (0x85C6)"; case 0x85C7 /* GL_R1UI_N3F_V3F_SUN */: return "GL_R1UI_N3F_V3F_SUN (0x85C7)"; case 0x85C8 /* GL_R1UI_C4F_N3F_V3F_SUN */: return "GL_R1UI_C4F_N3F_V3F_SUN (0x85C8)"; case 0x85C9 /* GL_R1UI_T2F_V3F_SUN */: return "GL_R1UI_T2F_V3F_SUN (0x85C9)"; case 0x85CA /* GL_R1UI_T2F_N3F_V3F_SUN */: return "GL_R1UI_T2F_N3F_V3F_SUN (0x85CA)"; case 0x85CB /* GL_R1UI_T2F_C4F_N3F_V3F_SUN */: return "GL_R1UI_T2F_C4F_N3F_V3F_SUN (0x85CB)"; /* ----------------------------- GL_SUN_vertex ----------------------------- */ /* -------------------------- GL_WIN_phong_shading ------------------------- */ case 0x80EA /* GL_PHONG_WIN */: return "GL_PHONG_WIN (0x80EA)"; case 0x80EB /* GL_PHONG_HINT_WIN */: return "GL_PHONG_HINT_WIN (0x80EB)"; /* -------------------------- GL_WIN_specular_fog -------------------------- */ case 0x80EC /* GL_FOG_SPECULAR_TEXTURE_WIN */: return "GL_FOG_SPECULAR_TEXTURE_WIN (0x80EC)"; default: { return "what?"; } } // ~switch } // ~WWWGLEnumToString int main() { volatile int i; i = 34962; printf("%d: %s\n", i, WWWGLEnumToString(i)); i = 26214; printf("%d: %s\n", i, WWWGLEnumToString(i)); i = 35040; printf("%d: %s\n", i, WWWGLEnumToString(i)); i = 3060; printf("%d: %s\n", i, WWWGLEnumToString(i)); } binaryen-version_108/test/bigswitch.txt000066400000000000000000000001311423707623100204430ustar00rootroot0000000000000034962: GL_ARRAY_BUFFER (0x8892) 26214: what? 35040: GL_STREAM_DRAW (0x88E0) 3060: what? binaryen-version_108/test/binaryen.js/000077500000000000000000000000001423707623100201465ustar00rootroot00000000000000binaryen-version_108/test/binaryen.js/atomics.js000066400000000000000000000033021423707623100221410ustar00rootroot00000000000000var wast = ` (module (memory $0 (shared 1 1)) ) `; var module = binaryen.parseText(wast); // i32/i64.atomic.load/store module.addFunction("main", binaryen.none, binaryen.none, [], module.block("", [ // i32 module.i32.atomic.store(0, module.i32.const(0), module.i32.atomic.load(0, module.i32.const(0) ) ), // i32 as u8 module.i32.atomic.store8(0, module.i32.const(0), module.i32.atomic.load8_u(0, module.i32.const(0) ) ), // i32 as u16 module.i32.atomic.store16(0, module.i32.const(0), module.i32.atomic.load16_u(0, module.i32.const(0) ) ), // i64 module.i64.atomic.store(0, module.i32.const(0), module.i64.atomic.load(0, module.i32.const(0) ) ), // i64 as u8 module.i64.atomic.store8(0, module.i32.const(0), module.i64.atomic.load8_u(0, module.i32.const(0) ) ), // i64 as u16 module.i64.atomic.store16(0, module.i32.const(0), module.i64.atomic.load16_u(0, module.i32.const(0) ) ), // i64 as u32 module.i64.atomic.store32(0, module.i32.const(0), module.i64.atomic.load32_u(0, module.i32.const(0) ) ), // wait and notify module.drop( module.memory.atomic.wait32( module.i32.const(0), module.i32.const(0), module.i64.const(0) ) ), module.drop( module.memory.atomic.wait64( module.i32.const(0), module.i64.const(0), module.i64.const(0) ) ), module.drop( module.memory.atomic.notify( module.i32.const(0), module.i32.const(0) ) ), // fence module.atomic.fence() ])); module.setFeatures(binaryen.Features.Atomics); assert(module.validate()); console.log(module.emitText()); binaryen-version_108/test/binaryen.js/atomics.js.txt000066400000000000000000000017271423707623100227700ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 (shared 1 1)) (func $main (i32.atomic.store (i32.const 0) (i32.atomic.load (i32.const 0) ) ) (i32.atomic.store8 (i32.const 0) (i32.atomic.load8_u (i32.const 0) ) ) (i32.atomic.store16 (i32.const 0) (i32.atomic.load16_u (i32.const 0) ) ) (i64.atomic.store (i32.const 0) (i64.atomic.load (i32.const 0) ) ) (i64.atomic.store8 (i32.const 0) (i64.atomic.load8_u (i32.const 0) ) ) (i64.atomic.store16 (i32.const 0) (i64.atomic.load16_u (i32.const 0) ) ) (i64.atomic.store32 (i32.const 0) (i64.atomic.load32_u (i32.const 0) ) ) (drop (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const 0) ) ) (drop (memory.atomic.wait64 (i32.const 0) (i64.const 0) (i64.const 0) ) ) (drop (memory.atomic.notify (i32.const 0) (i32.const 0) ) ) (atomic.fence) ) ) binaryen-version_108/test/binaryen.js/copy-expression.js000066400000000000000000000020501423707623100236500ustar00rootroot00000000000000var module = new binaryen.Module(); // Create an expression and copy it var original = module.block(null, [ module.if( module.local.get(0, binaryen.i32), module.i32.const(1), module.i32.const(2) ) ], binaryen.i32); var copy = module.copyExpression(original); // Check that the expression incl. sub-expressions are copies assert(original !== copy); var originalInfo = binaryen.getExpressionInfo(original); assert(originalInfo.children.length === 1); var copyInfo = binaryen.getExpressionInfo(copy); assert(originalInfo.children.length === copyInfo.children.length); assert(originalInfo.children[0] !== copyInfo.children[0]); var originalIfInfo = binaryen.getExpressionInfo(originalInfo.children[0]); var copyIfInfo = binaryen.getExpressionInfo(copyInfo.children[0]); assert(originalIfInfo.condition !== copyIfInfo.condition); assert(originalIfInfo.ifTrue !== copyIfInfo.ifTrue); assert(originalIfInfo.ifFalse !== copyIfInfo.ifFalse); // Check that both are otherwise identical assert(binaryen.emitText(original) === binaryen.emitText(copy)); binaryen-version_108/test/binaryen.js/copy-expression.js.txt000066400000000000000000000000001423707623100244570ustar00rootroot00000000000000binaryen-version_108/test/binaryen.js/custom-section.js000066400000000000000000000002361423707623100234610ustar00rootroot00000000000000var module = new binaryen.Module(); module.addCustomSection("hello", [119, 111, 114, 108, 100]); assert(module.validate()); console.log(module.emitText()); binaryen-version_108/test/binaryen.js/custom-section.js.txt000066400000000000000000000001011423707623100242660ustar00rootroot00000000000000(module ;; custom section "hello", size 5, contents: "world" ) binaryen-version_108/test/binaryen.js/debug-info.js000066400000000000000000000021711423707623100225240ustar00rootroot00000000000000var wast = ` (module (type $v (func)) (memory $0 0) (export "test" (func $test)) (func $test (; 0 ;) (type $v)) ) `; // Use defaults (should not emit debug info) console.log("=== default ==="); console.log("debugInfo=" + binaryen.getDebugInfo()); var module = binaryen.parseText(wast); var binary = module.emitBinary(); module.dispose(); module = binaryen.readBinary(binary); console.log(module.emitText()); assert(module.validate()); module.dispose(); // With debug info console.log("=== with debug info ==="); binaryen.setDebugInfo(true); console.log("debugInfo=" + binaryen.getDebugInfo()); module = binaryen.parseText(wast); binary = module.emitBinary(); module.dispose(); module = binaryen.readBinary(binary); console.log(module.emitText()); assert(module.validate()); module.dispose(); // Without debug info console.log("=== without debug info ==="); binaryen.setDebugInfo(false); console.log("debugInfo=" + binaryen.getDebugInfo()); module = binaryen.parseText(wast); binary = module.emitBinary(); module.dispose(); module = binaryen.readBinary(binary); console.log(module.emitText()); assert(module.validate()); module.dispose(); binaryen-version_108/test/binaryen.js/debug-info.js.txt000066400000000000000000000006421423707623100233430ustar00rootroot00000000000000=== default === debugInfo=false (module (type $none_=>_none (func)) (memory $0 0) (export "test" (func $0)) (func $0 (nop) ) ) === with debug info === debugInfo=true (module (type $v (func)) (memory $0 0) (export "test" (func $test)) (func $test (nop) ) ) === without debug info === debugInfo=false (module (type $none_=>_none (func)) (memory $0 0) (export "test" (func $0)) (func $0 (nop) ) ) binaryen-version_108/test/binaryen.js/debug-names.js000066400000000000000000000020051423707623100226700ustar00rootroot00000000000000var wast = ` (module $hel (memory $lo 0 0) (table $wor 0 0 funcref) (global $ld i32 (i32.const 0)) (func $of (param $wasm i32) (local $!#$%&'*+-./:<=>?@\\^_\`|~ f64) ) ) `; console.log("=== input wast ===" + wast); var module = binaryen.parseText(wast); console.log("=== parsed wast ===\n" + module.emitText()); var func = binaryen.Function(module.getFunction("of")); assert(func.numLocals === 2); assert(func.hasLocalName(0) === true); assert(func.getLocalName(0) === "wasm"); assert(func.hasLocalName(1) === true); assert(func.getLocalName(1) === "!#$%&'*+-./:<=>?@\\^_\`|~"); assert(func.hasLocalName(2) === false); func.setLocalName(0, "js"); assert(func.getLocalName(0) === "js"); binaryen.setDebugInfo(true); var module2 = binaryen.readBinary(module.emitBinary()); module.dispose(); console.log("=== roundtripped ===\n" + module2.emitText()); var module3 = binaryen.readBinary(module2.emitBinary()); module2.dispose(); console.log("=== roundtripped again ===\n" + module3.emitText()); module3.dispose(); binaryen-version_108/test/binaryen.js/debug-names.js.txt000066400000000000000000000015631423707623100235160ustar00rootroot00000000000000=== input wast === (module $hel (memory $lo 0 0) (table $wor 0 0 funcref) (global $ld i32 (i32.const 0)) (func $of (param $wasm i32) (local $!#$%&'*+-./:<=>?@\^_`|~ f64) ) ) === parsed wast === (module $hel (type $i32_=>_none (func (param i32))) (global $ld i32 (i32.const 0)) (memory $lo 0 0) (table $wor 0 0 funcref) (func $of (param $wasm i32) (local $!#$%&'*+-./:<=>?@\^_`|~ f64) (nop) ) ) === roundtripped === (module $hel (type $i32_=>_none (func (param i32))) (global $ld i32 (i32.const 0)) (memory $lo 0 0) (table $wor 0 0 funcref) (func $of (param $js i32) (local $!#$%&'*+-./:<=>?@\5c^_`|~ f64) (nop) ) ) === roundtripped again === (module $hel (type $i32_=>_none (func (param i32))) (global $ld i32 (i32.const 0)) (memory $lo 0 0) (table $wor 0 0 funcref) (func $of (param $js i32) (local $!#$%&'*+-./:<=>?@\5c^_`|~ f64) (nop) ) ) binaryen-version_108/test/binaryen.js/emit_asmjs.js000066400000000000000000000004311423707623100226350ustar00rootroot00000000000000var module = new binaryen.Module(); module.addFunction("main", binaryen.i32, binaryen.i32, [], module.local.get(0, binaryen.i32)); module.addFunctionExport("main", "main"); assert(module.validate()); // should validate before calling emitAsmjs console.log(module.emitAsmjs()); binaryen-version_108/test/binaryen.js/emit_asmjs.js.txt000066400000000000000000000011101423707623100234460ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function main($0) { $0 = $0 | 0; return $0 | 0; } return { "main": main }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var main = retasmFunc.main; binaryen-version_108/test/binaryen.js/exception-handling.js000066400000000000000000000035031423707623100242650ustar00rootroot00000000000000function cleanInfo(info) { var ret = {}; for (var x in info) { // Filter out address pointers and only print meaningful info if (x == 'id' || x == 'type' || x == 'name' || x == 'tag' || x == 'target' || x == 'hasCatchAll' || x == 'delegateTarget' || x == 'isDelegate') { ret[x] = info[x]; } } return ret; } function stringify(expr) { return JSON.stringify(cleanInfo(binaryen.getExpressionInfo(expr))); } var module = new binaryen.Module(); module.setFeatures(binaryen.Features.ReferenceTypes | binaryen.Features.ExceptionHandling); module.addTag("e", binaryen.i32, binaryen.none); // (try $l0 // (do // (throw $e (i32.const 0)) // ) // (catch // (drop (pop i32)) // (rethrow $l0) // ) // ) var throw_ = module.throw("e", [module.i32.const(0)]); var rethrow = module.rethrow("l0"); var try_catch = module.try( "l0", throw_, ["e"], [ module.block(null, [ module.drop(module.i32.pop()), rethrow ], binaryen.none ) ], '' ); // (try $try_outer // (do // (try // (do // (throw $a-tag (i32.const 0)) // ) // (delegate $try_outer) // ) // ) // (catch_all) // ) var try_delegate = module.try( 'try_outer', module.try( '', throw_, [], [], 'try_outer' ), [], [module.nop()], '' ); var body = module.block('', [try_catch, try_delegate]) var func = module.addFunction("test", binaryen.none, binaryen.none, [], body); console.log(module.emitText()); assert(module.validate()); console.log("getExpressionInfo(throw) = " + stringify(throw_)); console.log("getExpressionInfo(rethrow) = " + stringify(rethrow)); console.log("getExpressionInfo(try_catch) = " + stringify(try_catch)); console.log("getExpressionInfo(try_delegate) = " + stringify(try_delegate)); binaryen-version_108/test/binaryen.js/exception-handling.js.txt000066400000000000000000000014031423707623100251000ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (tag $e (param i32)) (func $test (try $l0 (do (throw $e (i32.const 0) ) ) (catch $e (drop (pop i32) ) (rethrow $l0) ) ) (try $try_outer (do (try (do (throw $e (i32.const 0) ) ) (delegate $try_outer) ) ) (catch_all (nop) ) ) ) ) getExpressionInfo(throw) = {"id":50,"type":1,"tag":"e"} getExpressionInfo(rethrow) = {"id":51,"type":1,"target":"l0"} getExpressionInfo(try_catch) = {"id":49,"type":1,"name":"l0","hasCatchAll":0,"delegateTarget":"","isDelegate":0} getExpressionInfo(try_delegate) = {"id":49,"type":0,"name":"try_outer","hasCatchAll":1,"delegateTarget":"","isDelegate":0} binaryen-version_108/test/binaryen.js/expressionrunner.js000066400000000000000000000120431423707623100241350ustar00rootroot00000000000000var Flags = binaryen.ExpressionRunner.Flags; console.log("// ExpressionRunner.Flags.Default = " + Flags.Default); console.log("// ExpressionRunner.Flags.PreserveSideeffects = " + Flags.PreserveSideeffects); console.log("// ExpressionRunner.Flags.TraverseCalls = " + Flags.TraverseCalls); function assertDeepEqual(x, y) { if (typeof x === "object") { for (let i in x) assertDeepEqual(x[i], y[i]); for (let i in y) assertDeepEqual(x[i], y[i]); } else { assert(x === y); } } var module = new binaryen.Module(); module.addGlobal("aGlobal", binaryen.i32, true, module.i32.const(0)); // Should evaluate down to a constant var runner = new binaryen.ExpressionRunner(module); var expr = runner.runAndDispose( module.i32.add( module.i32.const(1), module.i32.const(2) ) ); assertDeepEqual( binaryen.getExpressionInfo(expr), { id: binaryen.ExpressionIds.Const, type: binaryen.i32, value: 3 } ); // Should traverse control structures runner = new binaryen.ExpressionRunner(module); expr = runner.runAndDispose( module.i32.add( module.i32.const(1), module.if( module.i32.const(0), module.i32.const(0), module.i32.const(3) ) ), ); assertDeepEqual( binaryen.getExpressionInfo(expr), { id: binaryen.ExpressionIds.Const, type: binaryen.i32, value: 4 } ); // Should be unable to evaluate a local if not explicitly specified runner = new binaryen.ExpressionRunner(module); expr = runner.runAndDispose( module.i32.add( module.local.get(0, binaryen.i32), module.i32.const(1) ) ); assert(expr === 0); // Should handle traps properly runner = new binaryen.ExpressionRunner(module); expr = runner.runAndDispose( module.unreachable() ); assert(expr === 0); // Should ignore `local.tee` side-effects if just evaluating the expression runner = new binaryen.ExpressionRunner(module); expr = runner.runAndDispose( module.i32.add( module.local.tee(0, module.i32.const(4), binaryen.i32), module.i32.const(1) ) ); assertDeepEqual( binaryen.getExpressionInfo(expr), { id: binaryen.ExpressionIds.Const, type: binaryen.i32, value: 5 } ); // Should preserve any side-effects if explicitly requested runner = new binaryen.ExpressionRunner(module, Flags.PreserveSideeffects); expr = runner.runAndDispose( module.i32.add( module.local.tee(0, module.i32.const(4), binaryen.i32), module.i32.const(1) ) ); assert(expr === 0); // Should work with temporary values if just evaluating the expression runner = new binaryen.ExpressionRunner(module); expr = runner.runAndDispose( module.i32.add( module.block(null, [ module.local.set(0, module.i32.const(2)), module.local.get(0, binaryen.i32) ], binaryen.i32), module.block(null, [ module.global.set("aGlobal", module.i32.const(4)), module.global.get("aGlobal", binaryen.i32) ], binaryen.i32) ) ); assertDeepEqual( binaryen.getExpressionInfo(expr), { id: binaryen.ExpressionIds.Const, type: binaryen.i32, value: 6 } ); // Should pick up explicitly preset values runner = new binaryen.ExpressionRunner(module, Flags.PreserveSideeffects); assert(runner.setLocalValue(0, module.i32.const(3))); assert(runner.setGlobalValue("aGlobal", module.i32.const(4))); expr = runner.runAndDispose( module.i32.add( module.local.get(0, binaryen.i32), module.global.get("aGlobal", binaryen.i32) ) ); assertDeepEqual( binaryen.getExpressionInfo(expr), { id: binaryen.ExpressionIds.Const, type: binaryen.i32, value: 7 } ); // Should traverse into (simple) functions if requested runner = new binaryen.ExpressionRunner(module, Flags.TraverseCalls); module.addFunction("add", binaryen.createType([ binaryen.i32, binaryen.i32 ]), binaryen.i32, [], module.block(null, [ module.i32.add( module.local.get(0, binaryen.i32), module.local.get(1, binaryen.i32) ) ], binaryen.i32) ); assert(runner.setLocalValue(0, module.i32.const(1))); expr = runner.runAndDispose( module.i32.add( module.i32.add( module.local.get(0, binaryen.i32), module.call("add", [ module.i32.const(2), module.i32.const(4) ], binaryen.i32) ), module.local.get(0, binaryen.i32) ) ); assertDeepEqual( binaryen.getExpressionInfo(expr), { id: binaryen.ExpressionIds.Const, type: binaryen.i32, value: 8 } ); // Should not attempt to traverse into functions if not explicitly set runner = new binaryen.ExpressionRunner(module); expr = runner.runAndDispose( module.i32.add( module.i32.const(1), module.call("add", [ module.i32.const(3), module.i32.const(4) ], binaryen.i32) ) ); assert(expr === 0); // Should stop on maxDepth runner = new binaryen.ExpressionRunner(module, Flags.Default, 1); expr = runner.runAndDispose( module.block(null, [ module.i32.const(1), ], binaryen.i32) ); assert(expr === 0); // Should not loop infinitely runner = new binaryen.ExpressionRunner(module, Flags.Default, 50, 3); expr = runner.runAndDispose( module.loop("theLoop", module.br("theLoop") ) ); assert(expr === 0); module.dispose(); binaryen-version_108/test/binaryen.js/expressionrunner.js.txt000066400000000000000000000002041423707623100247470ustar00rootroot00000000000000// ExpressionRunner.Flags.Default = 0 // ExpressionRunner.Flags.PreserveSideeffects = 1 // ExpressionRunner.Flags.TraverseCalls = 2 binaryen-version_108/test/binaryen.js/expressions.js000066400000000000000000001576041423707623100231030ustar00rootroot00000000000000function assertDeepEqual(x, y) { if (typeof x === "object") { for (let i in x) assertDeepEqual(x[i], y[i]); for (let i in y) assertDeepEqual(x[i], y[i]); } else { assert(x === y); } } console.log("# Expression"); (function testWrapper() { var theExpression = binaryen.Block(42); // works without new assert(theExpression instanceof binaryen.Block); assert(theExpression instanceof binaryen.Expression); assert(theExpression.constructor === binaryen.Block); assert(typeof binaryen.Block.getId === "function"); // proto assert(typeof binaryen.Block.getName === "function"); // own assert(typeof theExpression.getId === "function"); // proto assert(typeof theExpression.getName === "function"); // own assert((theExpression | 0) === 42); // via valueOf })(); console.log("# Block"); (function testBlock() { const module = new binaryen.Module(); const theBlock = binaryen.Block(module.block(null, [])); assert(theBlock instanceof binaryen.Block); assert(theBlock instanceof binaryen.Expression); assert(theBlock.id === binaryen.BlockId); assert(theBlock.name === null); assert(theBlock.type === binaryen.none); theBlock.name ="theName"; assert(theBlock.name === "theName"); theBlock.type = binaryen.i32; assert(theBlock.type === binaryen.i32); assert(theBlock.numChildren === 0); assertDeepEqual(theBlock.children, []); assertDeepEqual(theBlock.getChildren(), []); var child1 = module.i32.const(1); theBlock.appendChild(child1); assert(theBlock.numChildren === 1); assert(theBlock.getChildAt(0) === child1); var child2 = module.i32.const(2); theBlock.insertChildAt(1, child2); assert(theBlock.numChildren === 2); assert(theBlock.getChildAt(0) === child1); assert(theBlock.getChildAt(1) === child2); var child0 = module.i32.const(0); theBlock.insertChildAt(0, child0); assert(theBlock.numChildren === 3); assert(theBlock.getChildAt(0) === child0); assert(theBlock.getChildAt(1) === child1); assert(theBlock.getChildAt(2) === child2); var newChild1 = module.i32.const(11); theBlock.setChildAt(1, newChild1); assert(theBlock.numChildren === 3); assert(theBlock.getChildAt(0) === child0); assert(theBlock.getChildAt(1) === newChild1); assert(theBlock.getChildAt(2) === child2); theBlock.removeChildAt(1); assert(theBlock.numChildren === 2); assert(theBlock.getChildAt(0) === child0); assert(theBlock.getChildAt(1) === child2); theBlock.removeChildAt(1); assert(theBlock.numChildren === 1); assert(theBlock.getChildAt(0) === child0); theBlock.finalize(); console.log(theBlock.toText()); assert( theBlock.toText() == "(block $theName (result i32)\n (i32.const 0)\n)\n" ); theBlock.removeChildAt(0); assert(theBlock.numChildren === 0); module.dispose(); })(); console.log("# If"); (function testIf() { const module = new binaryen.Module(); var condition = module.i32.const(1); var ifTrue = module.i32.const(2); var ifFalse = module.i32.const(3); const theIf = binaryen.If(module.if(condition, ifTrue, ifFalse)); assert(theIf instanceof binaryen.If); assert(theIf instanceof binaryen.Expression); assert(theIf.id === binaryen.IfId); assert(theIf.condition === condition); assert(theIf.ifTrue === ifTrue); assert(theIf.ifFalse === ifFalse); assert(theIf.type == binaryen.i32); theIf.condition = condition = module.i32.const(4); assert(theIf.condition === condition); theIf.ifTrue = ifTrue = module.i32.const(5); assert(theIf.ifTrue === ifTrue); theIf.ifFalse = ifFalse = module.i32.const(6); assert(theIf.ifFalse === ifFalse); theIf.finalize(); console.log(theIf.toText()); assert( theIf.toText() == "(if (result i32)\n (i32.const 4)\n (i32.const 5)\n (i32.const 6)\n)\n" ); theIf.ifFalse = null; assert(!theIf.ifFalse); console.log(theIf.toText()); assert( theIf.toText() == "(if (result i32)\n (i32.const 4)\n (i32.const 5)\n)\n" ); module.dispose(); })(); console.log("# Loop"); (function testLoop() { const module = new binaryen.Module(); var name = null; var body = module.i32.const(1); const theLoop = binaryen.Loop(module.loop(name, body)); assert(theLoop instanceof binaryen.Loop); assert(theLoop instanceof binaryen.Expression); assert(theLoop.id === binaryen.LoopId); assert(theLoop.name === name); assert(theLoop.body === body); assert(theLoop.type === binaryen.i32); theLoop.name = name = "theName"; assert(theLoop.name === name); theLoop.body = body = module.drop(body); assert(theLoop.body === body); theLoop.finalize(); assert(theLoop.type === binaryen.none); console.log(theLoop.toText()); assert( theLoop.toText() == "(loop $theName\n (drop\n (i32.const 1)\n )\n)\n" ); module.dispose(); })(); console.log("# Break"); (function testBreak() { const module = new binaryen.Module(); var name = "theName"; var condition = module.i32.const(1); var value = module.i32.const(2); const theBreak = binaryen.Break(module.br(name, condition, value)); assert(theBreak instanceof binaryen.Break); assert(theBreak instanceof binaryen.Expression); assert(theBreak.name === name); assert(theBreak.condition === condition); assert(theBreak.value === value); assert(theBreak.type === binaryen.i32); theBreak.name = name = "theNewName"; assert(theBreak.name === "theNewName"); theBreak.condition = condition = module.i32.const(3); assert(theBreak.condition === condition); theBreak.value = value = module.i32.const(4); assert(theBreak.value === value); theBreak.finalize(); console.log(theBreak.toText()); assert( theBreak.toText() == "(br_if $theNewName\n (i32.const 4)\n (i32.const 3)\n)\n" ); module.dispose(); })(); console.log("# Switch"); (function testSwitch() { const module = new binaryen.Module(); var names = ["a", "b"]; var defaultName = "c"; var condition = module.i32.const(1); var value = module.i32.const(2); const theSwitch = binaryen.Switch(module.switch(names, defaultName, condition, value)); assert(theSwitch instanceof binaryen.Switch); assert(theSwitch instanceof binaryen.Expression); assert(theSwitch.numNames === 2); assertDeepEqual(theSwitch.names, names); assert(theSwitch.defaultName === defaultName); assert(theSwitch.condition === condition); assert(theSwitch.value === value); assert(theSwitch.type === binaryen.unreachable); names = [ "1", // set "2", //set "3" // append ] theSwitch.setNames(names); assertDeepEqual(theSwitch.names, names); theSwitch.names = names = [ "x", // set // remove // remove ]; assertDeepEqual(theSwitch.names, names); assertDeepEqual(theSwitch.getNames(), names); theSwitch.insertNameAt(1, "y"); theSwitch.condition = condition = module.i32.const(3); assert(theSwitch.condition === condition); theSwitch.value = value = module.i32.const(4); assert(theSwitch.value === value); theSwitch.finalize(); console.log(theSwitch.toText()); assert( theSwitch.toText() == "(br_table $x $y $c\n (i32.const 4)\n (i32.const 3)\n)\n" ); module.dispose(); })(); console.log("# Call"); (function testCall() { const module = new binaryen.Module(); var target = "foo"; var operands = [ module.i32.const(1), module.i32.const(2) ]; const theCall = binaryen.Call(module.call(target, operands, binaryen.i32)); assert(theCall instanceof binaryen.Call); assert(theCall instanceof binaryen.Expression); assert(theCall.target === target); assertDeepEqual(theCall.operands, operands); assertDeepEqual(theCall.getOperands(), operands); assert(theCall.return === false); assert(theCall.type === binaryen.i32); theCall.target = "bar"; assert(theCall.target === "bar"); theCall.operands = operands = [ module.i32.const(3), // set module.i32.const(4), // set module.i32.const(5) // append ]; assertDeepEqual(theCall.operands, operands); operands = [ module.i32.const(6) // set // remove // remove ]; theCall.setOperands(operands); assertDeepEqual(theCall.operands, operands); theCall.insertOperandAt(0, module.i32.const(7)); theCall.return = true; assert(theCall.return === true); theCall.finalize(); assert(theCall.type === binaryen.unreachable); // finalized tail call theCall.return = false; theCall.type = binaryen.i32; theCall.finalize(); assert(theCall.type === binaryen.i32); // finalized call console.log(theCall.toText()); assert( theCall.toText() == "(call $bar\n (i32.const 7)\n (i32.const 6)\n)\n" ); module.dispose(); })(); console.log("# CallIndirect"); (function testCallIndirect() { const module = new binaryen.Module(); var table = "0"; var target = module.i32.const(42); var params = binaryen.none; var results = binaryen.none; var operands = [ module.i32.const(1), module.i32.const(2) ]; const theCallIndirect = binaryen.CallIndirect(module.call_indirect(table, target, operands, params, results)); assert(theCallIndirect instanceof binaryen.CallIndirect); assert(theCallIndirect instanceof binaryen.Expression); assert(theCallIndirect.table === table); assert(theCallIndirect.target === target); assertDeepEqual(theCallIndirect.operands, operands); assert(theCallIndirect.params === params); assert(theCallIndirect.results === results); assert(theCallIndirect.return === false); assert(theCallIndirect.type === theCallIndirect.results); theCallIndirect.target = target = module.i32.const(9000); assert(theCallIndirect.target === target); theCallIndirect.operands = operands = [ module.i32.const(3), // set module.i32.const(4), // set module.i32.const(5) // append ]; assertDeepEqual(theCallIndirect.operands, operands); operands = [ module.i32.const(6) // set // remove // remove ]; theCallIndirect.setOperands(operands); assertDeepEqual(theCallIndirect.operands, operands); assertDeepEqual(theCallIndirect.getOperands(), operands); theCallIndirect.insertOperandAt(0, module.i32.const(7)); theCallIndirect.return = true; assert(theCallIndirect.return === true); theCallIndirect.params = params = binaryen.createType([ binaryen.i32, binaryen.i32 ]); assert(theCallIndirect.params === params); theCallIndirect.results = results = binaryen.i32; assert(theCallIndirect.results === results); theCallIndirect.finalize(); assert(theCallIndirect.type === binaryen.unreachable); // finalized tail call theCallIndirect.return = false; theCallIndirect.finalize(); assert(theCallIndirect.type === results); // finalized call console.log(theCallIndirect.toText()); assert( theCallIndirect.toText() == "(call_indirect $0 (type $i32_i32_=>_i32)\n (i32.const 7)\n (i32.const 6)\n (i32.const 9000)\n)\n" ); module.dispose(); })(); console.log("# LocalGet"); (function testLocalGet() { const module = new binaryen.Module(); var index = 1; var type = binaryen.i32; const theLocalGet = binaryen.LocalGet(module.local.get(index, type)); assert(theLocalGet instanceof binaryen.LocalGet); assert(theLocalGet instanceof binaryen.Expression); assert(theLocalGet.index === index); assert(theLocalGet.type === type); theLocalGet.index = index = 2; assert(theLocalGet.index === index); theLocalGet.type = type = binaryen.f64; assert(theLocalGet.type === type); theLocalGet.finalize(); console.log(theLocalGet.toText()); assert( theLocalGet.toText() == "(local.get $2)\n" ); module.dispose(); })(); console.log("# LocalSet"); (function testLocalSet() { const module = new binaryen.Module(); var index = 1; var value = module.i32.const(1); const theLocalSet = binaryen.LocalSet(module.local.set(index, value)); assert(theLocalSet instanceof binaryen.LocalSet); assert(theLocalSet instanceof binaryen.Expression); assert(theLocalSet.index === index); assert(theLocalSet.value === value); assert(theLocalSet.tee === false); assert(theLocalSet.type == binaryen.none); theLocalSet.index = index = 2; assert(theLocalSet.index === index); theLocalSet.value = value = module.i32.const(3); assert(theLocalSet.value === value); theLocalSet.type = binaryen.i32; assert(theLocalSet.type === binaryen.i32); assert(theLocalSet.tee === true); theLocalSet.type = binaryen.none; theLocalSet.finalize(); console.log(theLocalSet.toText()); assert( theLocalSet.toText() == "(local.set $2\n (i32.const 3)\n)\n" ); module.dispose(); })(); console.log("# GlobalGet"); (function testGlobalGet() { const module = new binaryen.Module(); var name = "a"; var type = binaryen.i32; const theGlobalGet = binaryen.GlobalGet(module.global.get(name, type)); assert(theGlobalGet instanceof binaryen.GlobalGet); assert(theGlobalGet instanceof binaryen.Expression); assert(theGlobalGet.name === name); assert(theGlobalGet.type === type); theGlobalGet.name = name = "b"; assert(theGlobalGet.name === name); theGlobalGet.type = type = binaryen.f64; assert(theGlobalGet.type === type); theGlobalGet.finalize(); console.log(theGlobalGet.toText()); assert( theGlobalGet.toText() == "(global.get $b)\n" ); module.dispose(); })(); console.log("# GlobalSet"); (function testGlobalSet() { const module = new binaryen.Module(); var name = "a"; var value = module.i32.const(1); const theGlobalSet = binaryen.GlobalSet(module.global.set(name, value)); assert(theGlobalSet instanceof binaryen.GlobalSet); assert(theGlobalSet instanceof binaryen.Expression); assert(theGlobalSet.name === name); assert(theGlobalSet.value === value); assert(theGlobalSet.type == binaryen.none); theGlobalSet.name = name = "b"; assert(theGlobalSet.name === name); theGlobalSet.value = value = module.f64.const(3); assert(theGlobalSet.value === value); theGlobalSet.finalize(); console.log(theGlobalSet.toText()); assert( theGlobalSet.toText() == "(global.set $b\n (f64.const 3)\n)\n" ); module.dispose(); })(); console.log("# MemorySize"); (function testMemorySize() { const module = new binaryen.Module(); var type = binaryen.i32; const theMemorySize = binaryen.MemorySize(module.memory.size()); assert(theMemorySize instanceof binaryen.MemorySize); assert(theMemorySize instanceof binaryen.Expression); assert(theMemorySize.type === type); theMemorySize.type = type = binaryen.f64; assert(theMemorySize.type === type); theMemorySize.finalize(); assert(theMemorySize.type === binaryen.i32); console.log(theMemorySize.toText()); assert( theMemorySize.toText() == "(memory.size)\n" ); module.dispose(); })(); console.log("# MemoryGrow"); (function testMemoryGrow() { const module = new binaryen.Module(); var type = binaryen.i32; var delta = module.i32.const(1); const theMemoryGrow = binaryen.MemoryGrow(module.memory.grow(delta)); assert(theMemoryGrow instanceof binaryen.MemoryGrow); assert(theMemoryGrow instanceof binaryen.Expression); assert(theMemoryGrow.delta === delta); assert(theMemoryGrow.type === type); theMemoryGrow.delta = delta = module.i32.const(2); assert(theMemoryGrow.delta === delta); theMemoryGrow.type = type = binaryen.f64; assert(theMemoryGrow.type === type); theMemoryGrow.finalize(); assert(theMemoryGrow.type === binaryen.i32); console.log(theMemoryGrow.toText()); assert( theMemoryGrow.toText() == "(memory.grow\n (i32.const 2)\n)\n" ); module.dispose(); })(); console.log("# Load"); (function testLoad() { const module = new binaryen.Module(); var offset = 16; var align = 2; var ptr = module.i32.const(64); const theLoad = binaryen.Load(module.i32.load(offset, align, ptr)); assert(theLoad instanceof binaryen.Load); assert(theLoad instanceof binaryen.Expression); assert(theLoad.offset === offset); assert(theLoad.align === align); assert(theLoad.ptr === ptr); assert(theLoad.bytes === 4); assert(theLoad.signed === true); assert(theLoad.atomic === false); assert(theLoad.type == binaryen.i32); theLoad.offset = offset = 32; assert(theLoad.offset === offset); theLoad.align = align = 4; assert(theLoad.align === align); theLoad.ptr = ptr = module.i32.const(128); assert(theLoad.ptr === ptr); theLoad.type = binaryen.i64; assert(theLoad.type === binaryen.i64); theLoad.signed = false; assert(theLoad.signed === false); theLoad.bytes = 8; assert(theLoad.bytes === 8); theLoad.atomic = true; assert(theLoad.atomic === true); theLoad.finalize(); assert(theLoad.align === 4); console.log(theLoad.toText()); assert( theLoad.toText() == "(i64.atomic.load offset=32 align=4\n (i32.const 128)\n)\n" ); module.dispose(); })(); console.log("# Store"); (function testStore() { const module = new binaryen.Module(); var offset = 16; var align = 2; var ptr = module.i32.const(64); var value = module.i32.const(1); const theStore = binaryen.Store(module.i32.store(offset, align, ptr, value)); assert(theStore instanceof binaryen.Store); assert(theStore instanceof binaryen.Expression); assert(theStore.offset === offset); assert(theStore.align === align); assert(theStore.ptr === ptr); assert(theStore.value === value); assert(theStore.bytes === 4); assert(theStore.atomic === false); assert(theStore.valueType === binaryen.i32); assert(theStore.type === binaryen.none); theStore.offset = offset = 32; assert(theStore.offset === offset); theStore.align = align = 4; assert(theStore.align === align); theStore.ptr = ptr = module.i32.const(128); assert(theStore.ptr === ptr); theStore.value = value = module.i32.const(2); assert(theStore.value === value); theStore.signed = false; assert(theStore.signed === false); theStore.valueType = binaryen.i64; assert(theStore.valueType === binaryen.i64); theStore.bytes = 8; assert(theStore.bytes === 8); theStore.atomic = true; assert(theStore.atomic === true); theStore.finalize(); assert(theStore.align === 4); console.log(theStore.toText()); assert( theStore.toText() == "(i64.atomic.store offset=32 align=4\n (i32.const 128)\n (i32.const 2)\n)\n" ); module.dispose(); })(); console.log("# Const"); (function testConst() { const module = new binaryen.Module(); const theConst = binaryen.Const(module.i32.const(1)); assert(theConst instanceof binaryen.Const); assert(theConst instanceof binaryen.Expression); assert(theConst.valueI32 === 1); theConst.valueI32 = 2; assert(theConst.valueI32 === 2); assert(theConst.type === binaryen.i32); theConst.valueI64Low = 3; assert(theConst.valueI64Low === 3); theConst.valueI64High = 4; assert(theConst.valueI64High === 4); theConst.finalize(); assert(theConst.type == binaryen.i64); theConst.valueF32 = 5; assert(theConst.valueF32 === 5); theConst.finalize(); assert(theConst.type === binaryen.f32); theConst.valueF64 = 6; assert(theConst.valueF64 === 6); theConst.finalize(); assert(theConst.type === binaryen.f64); theConst.valueV128 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; assertDeepEqual(theConst.valueV128, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]); theConst.finalize(); assert(theConst.type === binaryen.v128); console.log(theConst.toText()); assert( theConst.toText() == "(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)\n" ); module.dispose(); })(); console.log("# Unary"); (function testUnary() { const module = new binaryen.Module(); var op = binaryen.Operations.EqZInt32; var value = module.i32.const(1); const theUnary = binaryen.Unary(module.i32.eqz(value)); assert(theUnary instanceof binaryen.Unary); assert(theUnary instanceof binaryen.Expression); assert(theUnary.op === op); assert(theUnary.value === value); assert(theUnary.type === binaryen.i32); theUnary.op = op = binaryen.Operations.EqZInt64; assert(theUnary.op === op); theUnary.value = value = module.i64.const(2); assert(theUnary.value === value); theUnary.type = binaryen.f32; theUnary.finalize(); assert(theUnary.type === binaryen.i32); console.log(theUnary.toText()); assert( theUnary.toText() == "(i64.eqz\n (i64.const 2)\n)\n" ); module.dispose(); })(); console.log("# Binary"); (function testBinary() { const module = new binaryen.Module(); var op = binaryen.Operations.AddInt32; var left = module.i32.const(1); var right = module.i32.const(2); const theBinary = binaryen.Binary(module.i32.add(left, right)); assert(theBinary instanceof binaryen.Binary); assert(theBinary instanceof binaryen.Expression); assert(theBinary.op === op); assert(theBinary.left === left); assert(theBinary.right === right); assert(theBinary.type === binaryen.i32); theBinary.op = op = binaryen.Operations.AddInt64; assert(theBinary.op === op); theBinary.left = left = module.i64.const(3); assert(theBinary.left === left); theBinary.right = right = module.i64.const(4); assert(theBinary.right === right); theBinary.type = binaryen.f32; theBinary.finalize(); assert(theBinary.type === binaryen.i64); console.log(theBinary.toText()); assert( theBinary.toText() == "(i64.add\n (i64.const 3)\n (i64.const 4)\n)\n" ); module.dispose(); })(); console.log("# Select"); (function testSelect() { const module = new binaryen.Module(); var condition = module.i32.const(1); var ifTrue = module.i32.const(2); var ifFalse = module.i32.const(3); const theSelect = binaryen.Select(module.select(condition, ifTrue, ifFalse)); assert(theSelect.ifTrue === ifTrue); assert(theSelect instanceof binaryen.Select); assert(theSelect instanceof binaryen.Expression); assert(theSelect.condition === condition); assert(theSelect.ifTrue === ifTrue); assert(theSelect.ifFalse === ifFalse); assert(theSelect.type === binaryen.i32); theSelect.condition = condition = module.i32.const(4); assert(theSelect.condition === condition); theSelect.ifTrue = ifTrue = module.i64.const(5); assert(theSelect.ifTrue === ifTrue); theSelect.ifFalse = ifFalse = module.i64.const(6); assert(theSelect.ifFalse === ifFalse); theSelect.finalize(); assert(theSelect.type === binaryen.i64); console.log(theSelect.toText()); assert( theSelect.toText() == "(select\n (i64.const 5)\n (i64.const 6)\n (i32.const 4)\n)\n" ); module.dispose(); })(); console.log("# Drop"); (function testDrop() { const module = new binaryen.Module(); var value = module.i32.const(1); const theDrop = binaryen.Drop(module.drop(value)); assert(theDrop instanceof binaryen.Drop); assert(theDrop instanceof binaryen.Expression); assert(theDrop.value === value); assert(theDrop.type === binaryen.none); theDrop.value = value = module.i32.const(2); assert(theDrop.value === value); theDrop.finalize(); assert(theDrop.type === binaryen.none); console.log(theDrop.toText()); assert( theDrop.toText() == "(drop\n (i32.const 2)\n)\n" ); module.dispose(); })(); console.log("# Return"); (function testReturn() { const module = new binaryen.Module(); var value = module.i32.const(1); const theReturn = binaryen.Return(module.return(value)); assert(theReturn instanceof binaryen.Return); assert(theReturn instanceof binaryen.Expression); assert(theReturn.value === value); assert(theReturn.type === binaryen.unreachable); theReturn.value = value = module.i32.const(2); assert(theReturn.value === value); theReturn.finalize(); assert(theReturn.type === binaryen.unreachable); console.log(theReturn.toText()); assert( theReturn.toText() == "(return\n (i32.const 2)\n)\n" ); module.dispose(); })(); console.log("# AtomicRMW"); (function testAtomicRMW() { const module = new binaryen.Module(); var op = binaryen.Operations.AtomicRMWAdd; var offset = 8; var ptr = module.i32.const(2); var value = module.i32.const(3); const theAtomicRMW = binaryen.AtomicRMW(module.i32.atomic.rmw.add(offset, ptr, value)); assert(theAtomicRMW instanceof binaryen.AtomicRMW); assert(theAtomicRMW instanceof binaryen.Expression); assert(theAtomicRMW.op === op); assert(theAtomicRMW.bytes === 4); assert(theAtomicRMW.offset === offset); assert(theAtomicRMW.ptr === ptr); assert(theAtomicRMW.value === value); assert(theAtomicRMW.type === binaryen.i32); theAtomicRMW.op = op = binaryen.Operations.AtomicRMWSub; assert(theAtomicRMW.op === op); theAtomicRMW.bytes = 2; assert(theAtomicRMW.bytes === 2); theAtomicRMW.offset = offset = 16; assert(theAtomicRMW.offset === offset); theAtomicRMW.ptr = ptr = module.i32.const(4); assert(theAtomicRMW.ptr === ptr); theAtomicRMW.value = value = module.i64.const(5); assert(theAtomicRMW.value === value); theAtomicRMW.type = binaryen.i64; theAtomicRMW.finalize(); assert(theAtomicRMW.type === binaryen.i64); console.log(theAtomicRMW.toText()); assert( theAtomicRMW.toText() == "(i64.atomic.rmw16.sub_u offset=16\n (i32.const 4)\n (i64.const 5)\n)\n" ); module.dispose(); })(); console.log("# AtomicCmpxchg"); (function testAtomicCmpxchg() { const module = new binaryen.Module(); var offset = 8; var ptr = module.i32.const(2); var expected = module.i32.const(3); var replacement = module.i32.const(4); const theAtomicCmpxchg = binaryen.AtomicCmpxchg(module.i32.atomic.rmw.cmpxchg(offset, ptr, expected, replacement)); assert(theAtomicCmpxchg instanceof binaryen.AtomicCmpxchg); assert(theAtomicCmpxchg instanceof binaryen.Expression); assert(theAtomicCmpxchg.bytes === 4); assert(theAtomicCmpxchg.offset === offset); assert(theAtomicCmpxchg.ptr === ptr); assert(theAtomicCmpxchg.expected === expected); assert(theAtomicCmpxchg.replacement === replacement); assert(theAtomicCmpxchg.type === binaryen.i32); theAtomicCmpxchg.bytes = 2; assert(theAtomicCmpxchg.bytes === 2); theAtomicCmpxchg.offset = offset = 16; assert(theAtomicCmpxchg.offset === offset); theAtomicCmpxchg.ptr = ptr = module.i32.const(5); assert(theAtomicCmpxchg.ptr === ptr); theAtomicCmpxchg.expected = expected = module.i64.const(6); assert(theAtomicCmpxchg.expected === expected); theAtomicCmpxchg.replacement = replacement = module.i64.const(7); assert(theAtomicCmpxchg.replacement === replacement); theAtomicCmpxchg.type = binaryen.i64; theAtomicCmpxchg.finalize(); assert(theAtomicCmpxchg.type === binaryen.i64); console.log(theAtomicCmpxchg.toText()); assert( theAtomicCmpxchg.toText() == "(i64.atomic.rmw16.cmpxchg_u offset=16\n (i32.const 5)\n (i64.const 6)\n (i64.const 7)\n)\n" ); module.dispose(); })(); console.log("# AtomicWait"); (function testAtomicWait() { const module = new binaryen.Module(); var ptr = module.i32.const(2); var expected = module.i32.const(3); var timeout = module.i64.const(4); const theAtomicWait = binaryen.AtomicWait(module.memory.atomic.wait32(ptr, expected, timeout)); assert(theAtomicWait instanceof binaryen.AtomicWait); assert(theAtomicWait instanceof binaryen.Expression); assert(theAtomicWait.ptr === ptr); assert(theAtomicWait.expected === expected); assert(theAtomicWait.expectedType === binaryen.i32); assert(theAtomicWait.timeout === timeout); assert(theAtomicWait.type === binaryen.i32); theAtomicWait.ptr = ptr = module.i32.const(5); assert(theAtomicWait.ptr === ptr); theAtomicWait.expected = expected = module.i32.const(6); assert(theAtomicWait.expected === expected); theAtomicWait.expectedType = binaryen.i64; assert(theAtomicWait.expectedType === binaryen.i64); theAtomicWait.timeout = timeout = module.i64.const(7); assert(theAtomicWait.timeout === timeout); theAtomicWait.type = binaryen.f64; theAtomicWait.finalize(); assert(theAtomicWait.type === binaryen.i32); console.log(theAtomicWait.toText()); assert( theAtomicWait.toText() == "(memory.atomic.wait64\n (i32.const 5)\n (i32.const 6)\n (i64.const 7)\n)\n" ); module.dispose(); })(); console.log("# AtomicNotify"); (function testAtomicNotify() { const module = new binaryen.Module(); var ptr = module.i32.const(1); var notifyCount = module.i32.const(2); const theAtomicNotify = binaryen.AtomicNotify(module.memory.atomic.notify(ptr, notifyCount)); assert(theAtomicNotify instanceof binaryen.AtomicNotify); assert(theAtomicNotify instanceof binaryen.Expression); assert(theAtomicNotify.ptr === ptr); assert(theAtomicNotify.notifyCount === notifyCount); assert(theAtomicNotify.type === binaryen.i32); theAtomicNotify.ptr = ptr = module.i32.const(3); assert(theAtomicNotify.ptr === ptr); theAtomicNotify.notifyCount = notifyCount = module.i32.const(4); assert(theAtomicNotify.notifyCount === notifyCount); theAtomicNotify.type = binaryen.f64; theAtomicNotify.finalize(); assert(theAtomicNotify.type === binaryen.i32); console.log(theAtomicNotify.toText()); assert( theAtomicNotify.toText() == "(memory.atomic.notify\n (i32.const 3)\n (i32.const 4)\n)\n" ); module.dispose(); })(); console.log("# AtomicFence"); (function testAtomicFence() { const module = new binaryen.Module(); const theAtomicFence = binaryen.AtomicFence(module.atomic.fence()); assert(theAtomicFence instanceof binaryen.AtomicFence); assert(theAtomicFence instanceof binaryen.Expression); assert(theAtomicFence.order === 0); // reserved, not yet used assert(theAtomicFence.type === binaryen.none); theAtomicFence.order = 1; assert(theAtomicFence.order === 1); theAtomicFence.type = binaryen.f64; theAtomicFence.finalize(); assert(theAtomicFence.type === binaryen.none); console.log(theAtomicFence.toText()); assert( theAtomicFence.toText() == "(atomic.fence)\n" ); module.dispose(); })(); console.log("# SIMDExtract"); (function testSIMDExtract() { const module = new binaryen.Module(); var op = binaryen.Operations.ExtractLaneSVecI8x16; var vec = module.v128.const([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]); var index = 0; const theSIMDExtract = binaryen.SIMDExtract(module.i8x16.extract_lane_s(vec, index)); assert(theSIMDExtract instanceof binaryen.SIMDExtract); assert(theSIMDExtract instanceof binaryen.Expression); assert(theSIMDExtract.op === op); assert(theSIMDExtract.vec === vec); assert(theSIMDExtract.index === index); assert(theSIMDExtract.type === binaryen.i32); theSIMDExtract.op = op = binaryen.Operations.ExtractLaneSVecI16x8; assert(theSIMDExtract.op === op); theSIMDExtract.vec = vec = module.v128.const([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]); assert(theSIMDExtract.vec === vec); theSIMDExtract.index = index = 1; assert(theSIMDExtract.index === index); theSIMDExtract.type = binaryen.f64; theSIMDExtract.finalize(); assert(theSIMDExtract.type === binaryen.i32); console.log(theSIMDExtract.toText()); assert( theSIMDExtract.toText() == "(i16x8.extract_lane_s 1\n (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)\n)\n" ); module.dispose(); })(); console.log("# SIMDReplace"); (function testSIMDReplace() { const module = new binaryen.Module(); var op = binaryen.Operations.ReplaceLaneVecI8x16; var vec = module.v128.const([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]); var index = 0; var value = module.i32.const(1); const theSIMDReplace = binaryen.SIMDReplace(module.i8x16.replace_lane(vec, index, value)); assert(theSIMDReplace instanceof binaryen.SIMDReplace); assert(theSIMDReplace instanceof binaryen.Expression); assert(theSIMDReplace.op === op); assert(theSIMDReplace.vec === vec); assert(theSIMDReplace.index === index); assert(theSIMDReplace.value === value); assert(theSIMDReplace.type === binaryen.v128); theSIMDReplace.op = op = binaryen.Operations.ReplaceLaneVecI16x8; assert(theSIMDReplace.op === op); theSIMDReplace.vec = vec = module.v128.const([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]); assert(theSIMDReplace.vec === vec); theSIMDReplace.index = index = 1; assert(theSIMDReplace.index === index); theSIMDReplace.value = value = module.i32.const(2); assert(theSIMDReplace.value === value); theSIMDReplace.type = binaryen.f64; theSIMDReplace.finalize(); assert(theSIMDReplace.type === binaryen.v128); console.log(theSIMDReplace.toText()); assert( theSIMDReplace.toText() == "(i16x8.replace_lane 1\n (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)\n (i32.const 2)\n)\n" ); module.dispose(); })(); console.log("# SIMDShuffle"); (function testSIMDShuffle() { const module = new binaryen.Module(); var left = module.v128.const([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]); var right = module.v128.const([2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]); var mask = [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]; const theSIMDShuffle = binaryen.SIMDShuffle(module.i8x16.shuffle(left, right, mask)); assert(theSIMDShuffle instanceof binaryen.SIMDShuffle); assert(theSIMDShuffle instanceof binaryen.Expression); assert(theSIMDShuffle.left === left); assert(theSIMDShuffle.right === right); assertDeepEqual(theSIMDShuffle.mask, mask); assert(theSIMDShuffle.type === binaryen.v128); theSIMDShuffle.left = left = module.v128.const([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]); assert(theSIMDShuffle.left === left); theSIMDShuffle.right = right = module.v128.const([2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]); assert(theSIMDShuffle.right === right); theSIMDShuffle.mask = mask = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]; assertDeepEqual(theSIMDShuffle.mask, mask); theSIMDShuffle.type = binaryen.f64; theSIMDShuffle.finalize(); assert(theSIMDShuffle.type === binaryen.v128); console.log(theSIMDShuffle.toText()); assert( theSIMDShuffle.toText() == "(i8x16.shuffle 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)\n (v128.const i32x4 0x02020202 0x02020202 0x02020202 0x02020202)\n)\n" ); module.dispose(); })(); console.log("# SIMDTernary"); (function testSIMDTernary() { const module = new binaryen.Module(); var op = binaryen.Operations.BitselectVec128; var a = module.v128.const([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]); var b = module.v128.const([2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]); var c = module.v128.const([3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]); const theSIMDTernary = binaryen.SIMDTernary(module.v128.bitselect(a, b, c)); assert(theSIMDTernary instanceof binaryen.SIMDTernary); assert(theSIMDTernary instanceof binaryen.Expression); assert(theSIMDTernary.op === op); assert(theSIMDTernary.a === a); assert(theSIMDTernary.b === b); assert(theSIMDTernary.c === c); assert(theSIMDTernary.type === binaryen.v128); console.log(theSIMDTernary.toText() + "\n"); assert( theSIMDTernary.toText() == "(v128.bitselect\n (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)\n (v128.const i32x4 0x05040302 0x09080706 0x0d0c0b0a 0x11100f0e)\n (v128.const i32x4 0x06050403 0x0a090807 0x0e0d0c0b 0x1211100f)\n)\n" ); module.dispose(); })(); console.log("# SIMDShift"); (function testSIMDShift() { const module = new binaryen.Module(); var op = binaryen.Operations.BitselectVec128; var vec = module.v128.const([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]); var shift = module.i32.const(1); const theSIMDShift = binaryen.SIMDShift(module.i8x16.shl(vec, shift)); assert(theSIMDShift instanceof binaryen.SIMDShift); assert(theSIMDShift instanceof binaryen.Expression); assert(theSIMDShift.op === op); assert(theSIMDShift.vec === vec); assert(theSIMDShift.shift === shift); assert(theSIMDShift.type === binaryen.v128); theSIMDShift.op = op = binaryen.Operations.ShrSVecI8x16; assert(theSIMDShift.op === op); theSIMDShift.vec = vec = module.v128.const([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]); assert(theSIMDShift.vec === vec); theSIMDShift.shift = shift = module.i32.const(2); assert(theSIMDShift.shift === shift); theSIMDShift.type = binaryen.f64; theSIMDShift.finalize(); assert(theSIMDShift.type === binaryen.v128); console.log(theSIMDShift.toText()); assert( theSIMDShift.toText() == "(i8x16.shr_s\n (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)\n (i32.const 2)\n)\n" ); module.dispose(); })(); console.log("# SIMDLoad"); (function testSIMDLoad() { const module = new binaryen.Module(); var op = binaryen.Operations.Load8x8SVec128; var offset = 16; var align = 2; var ptr = module.i32.const(1); const theSIMDLoad = binaryen.SIMDLoad(module.v128.load8x8_s(offset, align, ptr)); assert(theSIMDLoad instanceof binaryen.SIMDLoad); assert(theSIMDLoad instanceof binaryen.Expression); assert(theSIMDLoad.offset === offset); assert(theSIMDLoad.align === align); assert(theSIMDLoad.ptr === ptr); assert(theSIMDLoad.type === binaryen.v128); theSIMDLoad.op = op = binaryen.Operations.Load8SplatVec128; assert(theSIMDLoad.op === op); theSIMDLoad.offset = offset = 32; assert(theSIMDLoad.offset === offset); theSIMDLoad.align = align = 4; assert(theSIMDLoad.align === align); theSIMDLoad.ptr = ptr = module.i32.const(2); assert(theSIMDLoad.ptr === ptr); theSIMDLoad.type = binaryen.f64; theSIMDLoad.finalize(); assert(theSIMDLoad.type === binaryen.v128); console.log(theSIMDLoad.toText()); assert( theSIMDLoad.toText() == "(v128.load8_splat offset=32 align=4\n (i32.const 2)\n)\n" ); module.dispose(); })(); console.log("# SIMDLoadStoreLane"); (function testSIMDLoadStoreLane() { const module = new binaryen.Module(); var op = binaryen.Operations.Load8LaneVec128; var offset = 16; var index = 1; var align = 1; var ptr = module.i32.const(1); var vec = module.v128.const([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]); const theSIMDLoadStoreLane = binaryen.SIMDLoadStoreLane(module.v128.load8_lane(offset, align, index, ptr, vec)); assert(theSIMDLoadStoreLane instanceof binaryen.SIMDLoadStoreLane); assert(theSIMDLoadStoreLane instanceof binaryen.Expression); assert(theSIMDLoadStoreLane.op === op); assert(theSIMDLoadStoreLane.offset === offset); assert(theSIMDLoadStoreLane.align === align); assert(theSIMDLoadStoreLane.index === index); assert(theSIMDLoadStoreLane.ptr === ptr); assert(theSIMDLoadStoreLane.vec === vec); assert(theSIMDLoadStoreLane.type === binaryen.v128); assert(theSIMDLoadStoreLane.store === false); theSIMDLoadStoreLane.op = op = binaryen.Operations.Load16LaneVec128; assert(theSIMDLoadStoreLane.op === op); theSIMDLoadStoreLane.offset = offset = 32; assert(theSIMDLoadStoreLane.offset === offset); theSIMDLoadStoreLane.align = align = 2; assert(theSIMDLoadStoreLane.align === align); theSIMDLoadStoreLane.index = index = 2; assert(theSIMDLoadStoreLane.index === index); theSIMDLoadStoreLane.ptr = ptr = module.i32.const(2); assert(theSIMDLoadStoreLane.ptr === ptr); theSIMDLoadStoreLane.vec = vec = module.v128.const([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]); assert(theSIMDLoadStoreLane.vec === vec); theSIMDLoadStoreLane.type = binaryen.f64; theSIMDLoadStoreLane.finalize(); assert(theSIMDLoadStoreLane.type === binaryen.v128); console.log(theSIMDLoadStoreLane.toText()); assert( theSIMDLoadStoreLane.toText() == "(v128.load16_lane offset=32 2\n (i32.const 2)\n (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)\n)\n" ); theSIMDLoadStoreLane.op = op = binaryen.Operations.Store16LaneVec128; assert(theSIMDLoadStoreLane.op === op); theSIMDLoadStoreLane.type = binaryen.f64; assert(theSIMDLoadStoreLane.store === true); theSIMDLoadStoreLane.finalize(); assert(theSIMDLoadStoreLane.type === binaryen.none); console.log(theSIMDLoadStoreLane.toText()); assert( theSIMDLoadStoreLane.toText() == "(v128.store16_lane offset=32 2\n (i32.const 2)\n (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)\n)\n" ); module.dispose(); })(); console.log("# MemoryInit"); (function testMemoryInit() { const module = new binaryen.Module(); var segment = 1; var dest = module.i32.const(2); var offset = module.i32.const(3); var size = module.i32.const(4); const theMemoryInit = binaryen.MemoryInit(module.memory.init(segment, dest, offset, size)); assert(theMemoryInit instanceof binaryen.MemoryInit); assert(theMemoryInit instanceof binaryen.Expression); assert(theMemoryInit.segment === segment); assert(theMemoryInit.dest === dest); assert(theMemoryInit.offset === offset); assert(theMemoryInit.size === size); assert(theMemoryInit.type === binaryen.none); theMemoryInit.segment = segment = 5; assert(theMemoryInit.segment === 5); theMemoryInit.dest = dest = module.i32.const(6); assert(theMemoryInit.dest === dest); theMemoryInit.offset = offset = module.i32.const(7); assert(theMemoryInit.offset === offset); theMemoryInit.size = size = module.i32.const(8); assert(theMemoryInit.size === size); theMemoryInit.type = binaryen.f64; theMemoryInit.finalize(); assert(theMemoryInit.type === binaryen.none); console.log(theMemoryInit.toText()); assert( theMemoryInit.toText() == "(memory.init 5\n (i32.const 6)\n (i32.const 7)\n (i32.const 8)\n)\n" ); module.dispose(); })(); console.log("# DataDrop"); (function testDataDrop() { const module = new binaryen.Module(); var segment = 1; const theDataDrop = binaryen.DataDrop(module.data.drop(segment)); assert(theDataDrop instanceof binaryen.DataDrop); assert(theDataDrop instanceof binaryen.Expression); assert(theDataDrop.segment === segment); assert(theDataDrop.type === binaryen.none); theDataDrop.segment = segment = 2; assert(theDataDrop.segment === 2); theDataDrop.type = binaryen.f64; theDataDrop.finalize(); assert(theDataDrop.type === binaryen.none); console.log(theDataDrop.toText()); assert( theDataDrop.toText() == "(data.drop 2)\n" ); module.dispose(); })(); console.log("# MemoryCopy"); (function testMemoryCopy() { const module = new binaryen.Module(); var dest = module.i32.const(1); var source = module.i32.const(2); var size = module.i32.const(3); const theMemoryCopy = binaryen.MemoryCopy(module.memory.copy(dest, source, size)); assert(theMemoryCopy instanceof binaryen.MemoryCopy); assert(theMemoryCopy instanceof binaryen.Expression); assert(theMemoryCopy.dest === dest); assert(theMemoryCopy.source === source); assert(theMemoryCopy.size === size); assert(theMemoryCopy.type === binaryen.none); theMemoryCopy.dest = dest = module.i32.const(4); assert(theMemoryCopy.dest === dest); theMemoryCopy.source = source = module.i32.const(5); assert(theMemoryCopy.source === source); theMemoryCopy.size = size = module.i32.const(6); assert(theMemoryCopy.size === size); theMemoryCopy.type = binaryen.f64; theMemoryCopy.finalize(); assert(theMemoryCopy.type === binaryen.none); console.log(theMemoryCopy.toText()); assert( theMemoryCopy.toText() == "(memory.copy\n (i32.const 4)\n (i32.const 5)\n (i32.const 6)\n)\n" ); module.dispose(); })(); console.log("# MemoryFill"); (function testMemoryFill() { const module = new binaryen.Module(); var dest = module.i32.const(1); var value = module.i32.const(2); var size = module.i32.const(3); const theMemoryFill = binaryen.MemoryFill(module.memory.fill(dest, value, size)); assert(theMemoryFill instanceof binaryen.MemoryFill); assert(theMemoryFill instanceof binaryen.Expression); assert(theMemoryFill.dest === dest); assert(theMemoryFill.value === value); assert(theMemoryFill.size === size); assert(theMemoryFill.type === binaryen.none); theMemoryFill.dest = dest = module.i32.const(4); assert(theMemoryFill.dest === dest); theMemoryFill.value = value = module.i32.const(5); assert(theMemoryFill.value === value); theMemoryFill.size = size = module.i32.const(6); assert(theMemoryFill.size === size); theMemoryFill.type = binaryen.f64; theMemoryFill.finalize(); assert(theMemoryFill.type === binaryen.none); console.log(theMemoryFill.toText()); assert( theMemoryFill.toText() == "(memory.fill\n (i32.const 4)\n (i32.const 5)\n (i32.const 6)\n)\n" ); module.dispose(); })(); console.log("# RefIs"); (function testRefIs() { const module = new binaryen.Module(); var op = binaryen.Operations.RefIsNull; var value = module.local.get(1, binaryen.externref); const theRefIs = binaryen.RefIs(module.ref.is_null(value)); assert(theRefIs instanceof binaryen.RefIs); assert(theRefIs instanceof binaryen.Expression); assert(theRefIs.op === op); assert(theRefIs.value === value); assert(theRefIs.type === binaryen.i32); theRefIs.op = op = binaryen.Operations.RefIsFunc; assert(theRefIs.op === op); theRefIs.op = op = binaryen.Operations.RefIsNull; theRefIs.value = value = module.local.get(2, binaryen.externref); assert(theRefIs.value === value); theRefIs.type = binaryen.f64; theRefIs.finalize(); assert(theRefIs.type === binaryen.i32); console.log(theRefIs.toText()); assert( theRefIs.toText() == "(ref.is_null\n (local.get $2)\n)\n" ); assert( binaryen.RefIs(module.ref.is_func(value)).toText() == "(ref.is_func\n (local.get $2)\n)\n" ); assert( binaryen.RefIs(module.ref.is_data(value)).toText() == "(ref.is_data\n (local.get $2)\n)\n" ); assert( binaryen.RefIs(module.ref.is_i31(value)).toText() == "(ref.is_i31\n (local.get $2)\n)\n" ); module.dispose(); })(); console.log("# RefAs"); (function testRefAs() { const module = new binaryen.Module(); var op = binaryen.Operations.RefAsNonNull; var value = module.local.get(1, binaryen.anyref); const theRefAs = binaryen.RefAs(module.ref.as_non_null(value)); assert(theRefAs instanceof binaryen.RefAs); assert(theRefAs instanceof binaryen.Expression); assert(theRefAs.op === op); assert(theRefAs.value === value); assert(theRefAs.type !== binaryen.i32); // TODO: === (ref any) theRefAs.op = op = binaryen.Operations.RefAsFunc; assert(theRefAs.op === op); theRefAs.op = op = binaryen.Operations.RefAsNull; theRefAs.value = value = module.local.get(2, binaryen.anyref); assert(theRefAs.value === value); theRefAs.type = binaryen.f64; theRefAs.finalize(); assert(theRefAs.type !== binaryen.f64); // TODO: === (ref any) console.log(theRefAs.toText()); assert( theRefAs.toText() == "(ref.as_non_null\n (local.get $2)\n)\n" ); assert( binaryen.RefAs(module.ref.as_func(value)).toText() == "(ref.as_func\n (local.get $2)\n)\n" ); assert( binaryen.RefAs(module.ref.as_data(value)).toText() == "(ref.as_data\n (local.get $2)\n)\n" ); assert( binaryen.RefAs(module.ref.as_i31(value)).toText() == "(ref.as_i31\n (local.get $2)\n)\n" ); module.dispose(); })(); console.log("# RefFunc"); (function testRefFunc() { const module = new binaryen.Module(); var func = "a"; const theRefFunc = binaryen.RefFunc(module.ref.func(func, binaryen.funcref)); assert(theRefFunc instanceof binaryen.RefFunc); assert(theRefFunc instanceof binaryen.Expression); assert(theRefFunc.func === func); // TODO: check the type. the type is (ref func), that is, a non-nullable func, // which differs from funcref. we don't have the ability to create such // a type in the C/JS APIs yet. theRefFunc.func = func = "b"; assert(theRefFunc.func === func); theRefFunc.type = binaryen.f64; theRefFunc.finalize(); // TODO The type is a subtype of funcref, but we can't check that in the JS // API atm. console.log(theRefFunc.toText()); assert( theRefFunc.toText() == "(ref.func $b)\n" ); module.dispose(); })(); console.log("# RefEq"); (function testRefEq() { const module = new binaryen.Module(); var left = module.local.get(0, binaryen.eqref); var right = module.local.get(1, binaryen.eqref); const theRefEq = binaryen.RefEq(module.ref.eq(left, right)); assert(theRefEq instanceof binaryen.RefEq); assert(theRefEq instanceof binaryen.Expression); assert(theRefEq.left === left); assert(theRefEq.right === right); assert(theRefEq.type === binaryen.i32); theRefEq.left = left = module.local.get(2, binaryen.eqref); assert(theRefEq.left === left); theRefEq.right = right = module.local.get(3, binaryen.eqref); assert(theRefEq.right === right); theRefEq.type = binaryen.f64; theRefEq.finalize(); assert(theRefEq.type === binaryen.i32); console.log(theRefEq.toText()); assert( theRefEq.toText() == "(ref.eq\n (local.get $2)\n (local.get $3)\n)\n" ); module.dispose(); })(); console.log("# Try"); (function testTry() { const module = new binaryen.Module(); module.addTag("tag1", 0, binaryen.none, binaryen.none); module.addTag("tag2", 0, binaryen.none, binaryen.none); module.addTag("tag3", 0, binaryen.none, binaryen.none); var body = module.i32.const(1); var catchBodies = [ module.i32.const(2), module.i32.const(3) ]; const theTry = binaryen.Try(module.try('', body, ["tag1"], catchBodies, '')); assert(theTry instanceof binaryen.Try); assert(theTry instanceof binaryen.Expression); assert(theTry.body === body); assertDeepEqual(theTry.catchBodies, catchBodies); assert(theTry.type === binaryen.i32); assert(theTry.getNumCatchTags() == 1); assert(theTry.getNumCatchBodies() == 2); assert(theTry.hasCatchAll() == 1); console.log(theTry.toText()); theTry.body = body = module.i32.const(4); assert(theTry.body === body); catchBodies = [ module.i32.const(5) // set //remove ]; theTry.setCatchBodies(catchBodies); assertDeepEqual(theTry.catchBodies, catchBodies); assertDeepEqual(theTry.getCatchBodies(), catchBodies); console.log(theTry.toText()); theTry.insertCatchTagAt(1, "tag2"); theTry.insertCatchBodyAt(0, module.i32.const(6)); assert(theTry.getNumCatchTags() == 2); assert(theTry.getNumCatchBodies() == 2); assert(theTry.hasCatchAll() == 0); console.log(theTry.toText()); assert(theTry.removeCatchTagAt(1) == "tag2"); theTry.removeCatchBodyAt(1); assert(theTry.getNumCatchTags() == 1); assert(theTry.getNumCatchBodies() == 1); console.log(theTry.toText()); theTry.appendCatchTag("tag3"); theTry.appendCatchBody(module.drop(module.i32.const(7))); assert(theTry.getCatchTagAt(0) == "tag1"); assert(theTry.getCatchTagAt(1) == "tag3"); theTry.setCatchTags(["tag2", "tag3"]); assertDeepEqual(theTry.getCatchTags(), ["tag2", "tag3"]); theTry.setCatchBodies([module.i32.const(8), module.i32.const(9)]); assert(theTry.getCatchTagAt(0) == "tag2"); assert(theTry.getCatchTagAt(1) == "tag3"); theTry.setCatchTagAt(1, "tag1"); theTry.setCatchBodyAt(1, module.i32.const(10)); assert(theTry.getCatchTagAt(1) == "tag1"); console.log(theTry.toText()); theTry.type = binaryen.f64; theTry.finalize(); assert(theTry.type === binaryen.i32); console.log(theTry.toText()); const tryDelegate = binaryen.Try(module.try('', body, [], [], "try_blah")); assert(tryDelegate.isDelegate() == 1); assert(tryDelegate.getDelegateTarget() == "try_blah"); tryDelegate.setDelegateTarget("try_outer"); assert(tryDelegate.getDelegateTarget() == "try_outer"); console.log(tryDelegate.toText()); module.dispose(); })(); console.log("# Throw"); (function testThrow() { const module = new binaryen.Module(); var tag = "foo"; var operands = [ module.i32.const(1), module.i32.const(2) ]; const theThrow = binaryen.Throw(module.throw(tag, operands)); assert(theThrow instanceof binaryen.Throw); assert(theThrow instanceof binaryen.Expression); assert(theThrow.tag === tag); assertDeepEqual(theThrow.operands, operands); assert(theThrow.type === binaryen.unreachable); theThrow.tag = "bar"; assert(theThrow.tag === "bar"); theThrow.operands = operands = [ module.i32.const(3), // set module.i32.const(4), // set module.i32.const(5) // append ]; assertDeepEqual(theThrow.operands, operands); assertDeepEqual(theThrow.getOperands(), operands); operands = [ module.i32.const(6) // set // remove // remove ]; theThrow.setOperands(operands); assertDeepEqual(theThrow.operands, operands); theThrow.insertOperandAt(1, module.i32.const(7)); theThrow.type = binaryen.f64; theThrow.finalize(); assert(theThrow.type === binaryen.unreachable); console.log(theThrow.toText()); assert( theThrow.toText() == "(throw $bar\n (i32.const 6)\n (i32.const 7)\n)\n" ); module.dispose(); })(); console.log("# Rethrow"); (function testRethrow() { const module = new binaryen.Module(); const theRethrow = binaryen.Rethrow(module.rethrow("l0")); assert(theRethrow instanceof binaryen.Rethrow); assert(theRethrow instanceof binaryen.Expression); assert(theRethrow.target === "l0"); assert(theRethrow.type === binaryen.unreachable); theRethrow.target = "l1"; assert(theRethrow.target === "l1"); theRethrow.type = binaryen.f64; theRethrow.finalize(); assert(theRethrow.type === binaryen.unreachable); console.log(theRethrow.toText()); assert( theRethrow.toText() == "(rethrow $l1)\n" ); module.dispose(); })(); console.log("# TupleMake"); (function testTupleMake() { const module = new binaryen.Module(); var operands = [ module.i32.const(1), module.i32.const(2) ]; var type = binaryen.createType([ binaryen.i32, binaryen.i32 ]); const theTupleMake = binaryen.TupleMake(module.tuple.make(operands)); assert(theTupleMake instanceof binaryen.TupleMake); assert(theTupleMake instanceof binaryen.Expression); assertDeepEqual(theTupleMake.operands, operands); assert(theTupleMake.type === type); theTupleMake.operands = operands = [ module.i32.const(3), // set module.i32.const(4), // set module.i32.const(5) // append ]; assertDeepEqual(theTupleMake.operands, operands); operands = [ module.i32.const(6) // set // remove // remove ]; theTupleMake.setOperands(operands); assertDeepEqual(theTupleMake.operands, operands); assertDeepEqual(theTupleMake.getOperands(), operands); theTupleMake.insertOperandAt(1, module.i32.const(7)); theTupleMake.type = binaryen.f64; theTupleMake.finalize(); assert(theTupleMake.type === type); console.log(theTupleMake.toText()); assert( theTupleMake.toText() == "(tuple.make\n (i32.const 6)\n (i32.const 7)\n)\n" ); module.dispose(); })(); console.log("# TupleExtract"); (function testTupleExtract() { const module = new binaryen.Module(); var tuple = module.tuple.make([ module.i32.const(1), module.i32.const(2) ]); var index = 1; const theTupleExtract = binaryen.TupleExtract(module.tuple.extract(tuple, index)); assert(theTupleExtract instanceof binaryen.TupleExtract); assert(theTupleExtract instanceof binaryen.Expression); assert(theTupleExtract.tuple === tuple); assert(theTupleExtract.index === index); assert(theTupleExtract.type === binaryen.i32); theTupleExtract.tuple = tuple = module.tuple.make([ module.f64.const(3), module.f64.const(4) ]); assert(theTupleExtract.tuple === tuple); theTupleExtract.index = index = 0; assert(theTupleExtract.index === index); theTupleExtract.type = binaryen.i32; theTupleExtract.finalize(); assert(theTupleExtract.type === binaryen.f64); console.log(theTupleExtract.toText()); assert( theTupleExtract.toText() == "(tuple.extract 0\n (tuple.make\n (f64.const 3)\n (f64.const 4)\n )\n)\n" ); module.dispose(); })(); console.log("# I31New"); (function testI31New() { const module = new binaryen.Module(); var value = module.local.get(1, binaryen.i32); const theI31New = binaryen.I31New(module.i31.new(value)); assert(theI31New instanceof binaryen.I31New); assert(theI31New instanceof binaryen.Expression); assert(theI31New.value === value); assert(theI31New.type === binaryen.i31ref); theI31New.value = value = module.local.get(2, binaryen.i32); assert(theI31New.value === value); theI31New.type = binaryen.f64; theI31New.finalize(); assert(theI31New.type === binaryen.i31ref); console.log(theI31New.toText()); assert( theI31New.toText() == "(i31.new\n (local.get $2)\n)\n" ); module.dispose(); })(); console.log("# I31Get"); (function testI31Get() { const module = new binaryen.Module(); var i31 = module.local.get(1, binaryen.i31ref); const theI31Get = binaryen.I31Get(module.i31.get_s(i31)); assert(theI31Get instanceof binaryen.I31Get); assert(theI31Get instanceof binaryen.Expression); assert(theI31Get.i31 === i31); assert(theI31Get.signed === true); assert(theI31Get.type === binaryen.i32); theI31Get.i31 = i31 = module.local.get(2, binaryen.i31ref); assert(theI31Get.i31 === i31); theI31Get.signed = false; assert(theI31Get.signed === false); theI31Get.type = binaryen.f64; theI31Get.finalize(); assert(theI31Get.type === binaryen.i32); console.log(theI31Get.toText()); assert( theI31Get.toText() == "(i31.get_u\n (local.get $2)\n)\n" ); module.dispose(); })(); binaryen-version_108/test/binaryen.js/expressions.js.txt000066400000000000000000000075741423707623100237210ustar00rootroot00000000000000# Expression # Block (block $theName (result i32) (i32.const 0) ) # If (if (result i32) (i32.const 4) (i32.const 5) (i32.const 6) ) (if (result i32) (i32.const 4) (i32.const 5) ) # Loop (loop $theName (drop (i32.const 1) ) ) # Break (br_if $theNewName (i32.const 4) (i32.const 3) ) # Switch (br_table $x $y $c (i32.const 4) (i32.const 3) ) # Call (call $bar (i32.const 7) (i32.const 6) ) # CallIndirect (call_indirect $0 (type $i32_i32_=>_i32) (i32.const 7) (i32.const 6) (i32.const 9000) ) # LocalGet (local.get $2) # LocalSet (local.set $2 (i32.const 3) ) # GlobalGet (global.get $b) # GlobalSet (global.set $b (f64.const 3) ) # MemorySize (memory.size) # MemoryGrow (memory.grow (i32.const 2) ) # Load (i64.atomic.load offset=32 align=4 (i32.const 128) ) # Store (i64.atomic.store offset=32 align=4 (i32.const 128) (i32.const 2) ) # Const (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) # Unary (i64.eqz (i64.const 2) ) # Binary (i64.add (i64.const 3) (i64.const 4) ) # Select (select (i64.const 5) (i64.const 6) (i32.const 4) ) # Drop (drop (i32.const 2) ) # Return (return (i32.const 2) ) # AtomicRMW (i64.atomic.rmw16.sub_u offset=16 (i32.const 4) (i64.const 5) ) # AtomicCmpxchg (i64.atomic.rmw16.cmpxchg_u offset=16 (i32.const 5) (i64.const 6) (i64.const 7) ) # AtomicWait (memory.atomic.wait64 (i32.const 5) (i32.const 6) (i64.const 7) ) # AtomicNotify (memory.atomic.notify (i32.const 3) (i32.const 4) ) # AtomicFence (atomic.fence) # SIMDExtract (i16x8.extract_lane_s 1 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101) ) # SIMDReplace (i16x8.replace_lane 1 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101) (i32.const 2) ) # SIMDShuffle (i8x16.shuffle 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101) (v128.const i32x4 0x02020202 0x02020202 0x02020202 0x02020202) ) # SIMDTernary (v128.bitselect (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x05040302 0x09080706 0x0d0c0b0a 0x11100f0e) (v128.const i32x4 0x06050403 0x0a090807 0x0e0d0c0b 0x1211100f) ) # SIMDShift (i8x16.shr_s (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101) (i32.const 2) ) # SIMDLoad (v128.load8_splat offset=32 align=4 (i32.const 2) ) # SIMDLoadStoreLane (v128.load16_lane offset=32 2 (i32.const 2) (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101) ) (v128.store16_lane offset=32 2 (i32.const 2) (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101) ) # MemoryInit (memory.init 5 (i32.const 6) (i32.const 7) (i32.const 8) ) # DataDrop (data.drop 2) # MemoryCopy (memory.copy (i32.const 4) (i32.const 5) (i32.const 6) ) # MemoryFill (memory.fill (i32.const 4) (i32.const 5) (i32.const 6) ) # RefIs (ref.is_null (local.get $2) ) # RefAs (ref.as_non_null (local.get $2) ) # RefFunc (ref.func $b) # RefEq (ref.eq (local.get $2) (local.get $3) ) # Try (try (result i32) (do (i32.const 1) ) (catch $tag1 (i32.const 2) ) (catch_all (i32.const 3) ) ) (try (result i32) (do (i32.const 4) ) (catch $tag1 (i32.const 5) ) ) (try (result i32) (do (i32.const 4) ) (catch $tag1 (i32.const 6) ) (catch $tag2 (i32.const 5) ) ) (try (result i32) (do (i32.const 4) ) (catch $tag1 (i32.const 6) ) ) (try (result i32) (do (i32.const 4) ) (catch $tag2 (i32.const 8) ) (catch $tag1 (i32.const 10) ) ) (try (result i32) (do (i32.const 4) ) (catch $tag2 (i32.const 8) ) (catch $tag1 (i32.const 10) ) ) (try (result i32) (do (i32.const 4) ) (delegate $try_outer) ) # Throw (throw $bar (i32.const 6) (i32.const 7) ) # Rethrow (rethrow $l1) # TupleMake (tuple.make (i32.const 6) (i32.const 7) ) # TupleExtract (tuple.extract 0 (tuple.make (f64.const 3) (f64.const 4) ) ) # I31New (i31.new (local.get $2) ) # I31Get (i31.get_u (local.get $2) ) binaryen-version_108/test/binaryen.js/fast-math.js000066400000000000000000000001721423707623100223700ustar00rootroot00000000000000console.log("// fastMath=" + binaryen.getFastMath()); binaryen.setFastMath(true); assert(binaryen.getFastMath() == true); binaryen-version_108/test/binaryen.js/fast-math.js.txt000066400000000000000000000000221423707623100232000ustar00rootroot00000000000000// fastMath=false binaryen-version_108/test/binaryen.js/functions.js000066400000000000000000000041021423707623100225110ustar00rootroot00000000000000function cleanInfo(info) { var ret = {}; for (var x in info) { if (x !== 'name' && x !== 'body' && x !== 'type') { ret[x] = info[x]; } } return ret; } var module = new binaryen.Module(); var func = module.addFunction("a-function", binaryen.none, binaryen.i32, [], module.i32.add( module.i32.const(1), module.i32.const(2) ) ); console.log("GetFunction is equal: " + (func === module.getFunction("a-function"))); module.runPassesOnFunction(func, ["precompute"]); var funcInfo = binaryen.getFunctionInfo(func); console.log("getFunctionInfo=" + JSON.stringify(cleanInfo(funcInfo))); var expInfo = binaryen.getExpressionInfo(funcInfo.body); console.log("getExpressionInfo(body)=" + JSON.stringify(cleanInfo(expInfo))); console.log(binaryen.emitText(funcInfo.body)); module.removeFunction("a-function"); assert(module.validate()); console.log(module.emitText()); // Test wrapper func = module.addFunction("b-function", binaryen.createType([binaryen.i32, binaryen.i32]), binaryen.i32, [ binaryen.i32, binaryen.f64 ], module.local.tee(2, module.i32.add( module.local.get(0, binaryen.i32), module.local.get(1, binaryen.i32) ), binaryen.i32 ) ); binaryen.Function.setLocalName(func, 0, "a"); binaryen.Function.setLocalName(func, 1, "b"); binaryen.Function.setLocalName(func, 2, "ret"); binaryen.Function.setLocalName(func, 3, "unused"); var theFunc = binaryen.Function(func); assert(theFunc.name === "b-function"); assert(theFunc.params === binaryen.createType([binaryen.i32, binaryen.i32])); assert(theFunc.results === binaryen.i32); assert(theFunc.numVars === 2); assert(theFunc.getVar(0) === binaryen.i32); assert(theFunc.getVar(1) === binaryen.f64); assert(theFunc.numLocals === 4); assert(theFunc.getLocalName(0) === "a"); assert(theFunc.getLocalName(1) === "b"); assert(theFunc.getLocalName(2) === "ret"); assert(theFunc.getLocalName(3) === "unused"); theFunc.setLocalName(2, "res"); assert(theFunc.getLocalName(2) === "res"); assert((theFunc | 0) === func); assert(module.validate()); console.log(module.emitText()); module.dispose(); binaryen-version_108/test/binaryen.js/functions.js.txt000066400000000000000000000006501423707623100233330ustar00rootroot00000000000000GetFunction is equal: true getFunctionInfo={"module":"","base":"","params":0,"results":2,"vars":[]} getExpressionInfo(body)={"id":14,"value":3} (i32.const 3) (module ) (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (func $b-function (param $a i32) (param $b i32) (result i32) (local $res i32) (local $unused f64) (local.tee $res (i32.add (local.get $a) (local.get $b) ) ) ) ) binaryen-version_108/test/binaryen.js/global.js000066400000000000000000000023021423707623100217410ustar00rootroot00000000000000function cleanInfo(info) { var ret = {}; for (var x in info) { if (x !== 'name' && x !== 'body' && x !== 'type' && x !== 'init') { ret[x] = info[x]; } } return ret; } var module = new binaryen.Module(); module.setFeatures(binaryen.Features.MVP | binaryen.Features.MutableGlobals); var initExpr = module.i32.const(1); var global = module.addGlobal("a-global", binaryen.i32, false, initExpr); console.log("GetGlobal is equal: " + (global === module.getGlobal("a-global"))); var globalInfo = binaryen.getGlobalInfo(global); console.log("getGlobalInfo=" + JSON.stringify(cleanInfo(globalInfo))); var initExpInfo = binaryen.getExpressionInfo(globalInfo.init); console.log("getExpressionInfo(init)=" + JSON.stringify(cleanInfo(initExpInfo))); console.log(binaryen.emitText(globalInfo.init)); module.addGlobalExport("a-global", "a-global-exp"); module.addGlobalImport("a-global-imp", "module", "base", binaryen.i32, false); module.addGlobalImport("a-mut-global-imp", "module", "base", binaryen.i32, true); assert(module.validate()); console.log(module.emitText()); module.removeGlobal("a-global"); module.removeExport("a-global-exp"); assert(module.validate()); console.log(module.emitText()); binaryen-version_108/test/binaryen.js/global.js.txt000066400000000000000000000007321423707623100225640ustar00rootroot00000000000000GetGlobal is equal: true getGlobalInfo={"module":"","base":"","mutable":false} getExpressionInfo(init)={"id":14,"value":1} (i32.const 1) (module (import "module" "base" (global $a-global-imp i32)) (import "module" "base" (global $a-mut-global-imp (mut i32))) (global $a-global i32 (i32.const 1)) (export "a-global-exp" (global $a-global)) ) (module (import "module" "base" (global $a-global-imp i32)) (import "module" "base" (global $a-mut-global-imp (mut i32))) ) binaryen-version_108/test/binaryen.js/hello-world.js000066400000000000000000000031331423707623100227340ustar00rootroot00000000000000// "hello world" type example: create a function that adds two i32s and // returns the result // Create a module to work on var module = new binaryen.Module(); // Start to create the function, starting with the contents: Get the 0 and // 1 arguments, and add them, then return them var left = module.local.get(0, binaryen.i32); var right = module.local.get(1, binaryen.i32); var add = module.i32.add(left, right); var ret = module.return(add); // Create the add function // Note: no additional local variables (that's the []) var ii = binaryen.createType([binaryen.i32, binaryen.i32]) module.addFunction('adder', ii, binaryen.i32, [], ret); // Export the function, so we can call it later (for simplicity we // export it as the same name as it has internally) module.addFunctionExport('adder', 'adder'); // Print out the text console.log(module.emitText()); // Optimize the module! This removes the 'return', since the // output of the add can just fall through module.optimize(); // Print out the optimized module's text console.log('optimized:\n\n' + module.emitText()); // Get the binary in typed array form var binary = module.emitBinary(); console.log('binary size: ' + binary.length); console.log(); assert(module.validate()); // We don't need the Binaryen module anymore, so we can tell it to // clean itself up module.dispose(); // Compile the binary and create an instance var wasm = new WebAssembly.Instance(new WebAssembly.Module(binary), {}) console.log("exports: " + Object.keys(wasm.exports).sort().join(",")); console.log(); // Call the code! console.log('an addition: ' + wasm.exports.adder(40, 2)); binaryen-version_108/test/binaryen.js/hello-world.js.txt000066400000000000000000000010161423707623100235500ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (export "adder" (func $adder)) (func $adder (param $0 i32) (param $1 i32) (result i32) (return (i32.add (local.get $0) (local.get $1) ) ) ) ) optimized: (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (export "adder" (func $adder)) (func $adder (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) binary size: 43 exports: adder an addition: 42 binaryen-version_108/test/binaryen.js/inlining-options.js000066400000000000000000000013231423707623100240030ustar00rootroot00000000000000console.log("// alwaysInlineMaxSize=" + binaryen.getAlwaysInlineMaxSize()); binaryen.setAlwaysInlineMaxSize(11); assert(binaryen.getAlwaysInlineMaxSize() == 11); console.log("// flexibleInlineMaxSize=" + binaryen.getFlexibleInlineMaxSize()); binaryen.setFlexibleInlineMaxSize(22); assert(binaryen.getFlexibleInlineMaxSize() == 22); console.log("// oneCallerInlineMaxSize=" + binaryen.getOneCallerInlineMaxSize()); binaryen.setOneCallerInlineMaxSize(33); assert(binaryen.getOneCallerInlineMaxSize() == 33); console.log("// allowInliningFunctionsWithLoops=" + binaryen.getAllowInliningFunctionsWithLoops()); binaryen.setAllowInliningFunctionsWithLoops(true); assert(binaryen.getAllowInliningFunctionsWithLoops() == true); binaryen-version_108/test/binaryen.js/inlining-options.js.txt000066400000000000000000000001731423707623100246230ustar00rootroot00000000000000// alwaysInlineMaxSize=2 // flexibleInlineMaxSize=20 // oneCallerInlineMaxSize=-1 // allowInliningFunctionsWithLoops=false binaryen-version_108/test/binaryen.js/kitchen-sink.js000066400000000000000000001554051423707623100231050ustar00rootroot00000000000000// kitchen sink, tests the full API function cleanInfo(info) { var ret = {}; for (var x in info) { if (x !== 'value') { ret[x] = info[x]; } } return ret; } var module; // helpers var v128_bytes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; function makeInt32(x) { return module.i32.const(x); } function makeFloat32(x) { return module.f32.const(x); } function makeInt64(l, h) { return module.i64.const(l, h); } function makeFloat64(x) { return module.f64.const(x); } function makeVec128(i8s) { return module.v128.const(i8s) } function makeSomething() { return makeInt32(1337); } function makeDroppedInt32(x) { return module.drop(module.i32.const(x)); } // tests function test_types() { console.log(" // BinaryenTypeNone: " + binaryen.none); console.log(" //", binaryen.expandType(binaryen.none).join(",")); console.log(" // BinaryenTypeUnreachable: " + binaryen.unreachable); console.log(" //", binaryen.expandType(binaryen.unreachable).join(",")); console.log(" // BinaryenTypeInt32: " + binaryen.i32); console.log(" //", binaryen.expandType(binaryen.i32).join(",")); console.log(" // BinaryenTypeInt64: " + binaryen.i64); console.log(" //", binaryen.expandType(binaryen.i64).join(",")); console.log(" // BinaryenTypeFloat32: " + binaryen.f32); console.log(" //", binaryen.expandType(binaryen.f32).join(",")); console.log(" // BinaryenTypeFloat64: " + binaryen.f64); console.log(" //", binaryen.expandType(binaryen.f64).join(",")); console.log(" // BinaryenTypeVec128: " + binaryen.v128); console.log(" //", binaryen.expandType(binaryen.v128).join(",")); console.log(" // BinaryenTypeFuncref: " + binaryen.funcref); console.log(" //", binaryen.expandType(binaryen.funcref).join(",")); console.log(" // BinaryenTypeExternref: " + binaryen.externref); console.log(" //", binaryen.expandType(binaryen.externref).join(",")); console.log(" // BinaryenTypeAnyref: " + binaryen.anyref); console.log(" //", binaryen.expandType(binaryen.anyref).join(",")); console.log(" // BinaryenTypeEqref: " + binaryen.eqref); console.log(" //", binaryen.expandType(binaryen.eqref).join(",")); console.log(" // BinaryenTypeI31ref: " + binaryen.i31ref); console.log(" //", binaryen.expandType(binaryen.i31ref).join(",")); console.log(" // BinaryenTypeDataref: " + binaryen.dataref); console.log(" //", binaryen.expandType(binaryen.dataref).join(",")); console.log(" // BinaryenTypeAuto: " + binaryen.auto); var i32_pair = binaryen.createType([binaryen.i32, binaryen.i32]); console.log(" //", binaryen.expandType(i32_pair).join(",")); var duplicate_pair = binaryen.createType([binaryen.i32, binaryen.i32]); console.log(" //", binaryen.expandType(duplicate_pair).join(",")); assert(i32_pair == duplicate_pair); var f32_pair = binaryen.createType([binaryen.f32, binaryen.f32]); console.log(" //", binaryen.expandType(f32_pair).join(",")); } function test_features() { console.log("Features.MVP: " + binaryen.Features.MVP); console.log("Features.Atomics: " + binaryen.Features.Atomics); console.log("Features.BulkMemory: " + binaryen.Features.BulkMemory); console.log("Features.MutableGlobals: " + binaryen.Features.MutableGlobals); console.log("Features.NontrappingFPToInt: " + binaryen.Features.NontrappingFPToInt); console.log("Features.SignExt: " + binaryen.Features.SignExt); console.log("Features.SIMD128: " + binaryen.Features.SIMD128); console.log("Features.ExceptionHandling: " + binaryen.Features.ExceptionHandling); console.log("Features.TailCall: " + binaryen.Features.TailCall); console.log("Features.ReferenceTypes: " + binaryen.Features.ReferenceTypes); console.log("Features.Multivalue: " + binaryen.Features.Multivalue); console.log("Features.GC: " + binaryen.Features.GC); console.log("Features.Memory64: " + binaryen.Features.Memory64); console.log("Features.TypedFunctionReferences: " + binaryen.Features.TypedFunctionReferences); console.log("Features.RelaxedSIMD: " + binaryen.Features.RelaxedSIMD); console.log("Features.ExtendedConst: " + binaryen.Features.ExtendedConst); console.log("Features.All: " + binaryen.Features.All); } function test_ids() { console.log("InvalidId: " + binaryen.InvalidId); console.log("BlockId: " + binaryen.BlockId); console.log("IfId: " + binaryen.IfId); console.log("LoopId: " + binaryen.LoopId); console.log("BreakId: " + binaryen.BreakId); console.log("SwitchId: " + binaryen.SwitchId); console.log("CallId: " + binaryen.CallId); console.log("CallIndirectId: " + binaryen.CallIndirectId); console.log("LocalGetId: " + binaryen.LocalGetId); console.log("LocalSetId: " + binaryen.LocalSetId); console.log("GlobalGetId: " + binaryen.GlobalGetId); console.log("GlobalSetId: " + binaryen.GlobalSetId); console.log("LoadId: " + binaryen.LoadId); console.log("StoreId: " + binaryen.StoreId); console.log("ConstId: " + binaryen.ConstId); console.log("UnaryId: " + binaryen.UnaryId); console.log("BinaryId: " + binaryen.BinaryId); console.log("SelectId: " + binaryen.SelectId); console.log("DropId: " + binaryen.DropId); console.log("ReturnId: " + binaryen.ReturnId); console.log("MemorySizeId: " + binaryen.MemorySizeId); console.log("MemoryGrowId: " + binaryen.MemoryGrowId); console.log("NopId: " + binaryen.NopId); console.log("UnreachableId: " + binaryen.UnreachableId); console.log("AtomicCmpxchgId: " + binaryen.AtomicCmpxchgId); console.log("AtomicRMWId: " + binaryen.AtomicRMWId); console.log("AtomicWaitId: " + binaryen.AtomicWaitId); console.log("AtomicNotifyId: " + binaryen.AtomicNotifyId); console.log("SIMDExtractId: " + binaryen.SIMDExtractId); console.log("SIMDReplaceId: " + binaryen.SIMDReplaceId); console.log("SIMDShuffleId: " + binaryen.SIMDShuffleId); console.log("SIMDTernaryId: " + binaryen.SIMDTernaryId); console.log("SIMDShiftId: " + binaryen.SIMDShiftId); console.log("SIMDLoadId: " + binaryen.SIMDLoadId); console.log("SIMDLoadStoreLaneId: " + binaryen.SIMDLoadStoreLaneId); console.log("MemoryInitId: " + binaryen.MemoryInitId); console.log("DataDropId: " + binaryen.DataDropId); console.log("MemoryCopyId: " + binaryen.MemoryCopyId); console.log("MemoryFillId: " + binaryen.MemoryFillId); console.log("PopId: " + binaryen.PopId); console.log("RefNullId: " + binaryen.RefNullId); console.log("RefIsId: " + binaryen.RefIsId); console.log("RefFuncId: " + binaryen.RefFuncId); console.log("RefEqId: " + binaryen.RefEqId); console.log("TableGetId: " + binaryen.TableGetId); console.log("TableSetId: " + binaryen.TableSetId); console.log("TableSizeId: " + binaryen.TableSizeId); console.log("TableGrowId: " + binaryen.TableGrowId); console.log("TryId: " + binaryen.TryId); console.log("ThrowId: " + binaryen.ThrowId); console.log("RethrowId: " + binaryen.RethrowId); console.log("TupleMakeId: " + binaryen.TupleMakeId); console.log("TupleExtractId: " + binaryen.TupleExtractId); console.log("I31NewId: " + binaryen.I31NewId); console.log("I31GetId: " + binaryen.I31GetId); console.log("CallRefId: " + binaryen.CallRefId); console.log("RefTestId: " + binaryen.RefTestId); console.log("RefCastId: " + binaryen.RefCastId); console.log("BrOnId: " + binaryen.BrOnId); console.log("RttCanonId: " + binaryen.RttCanonId); console.log("RttSubId: " + binaryen.RttSubId); console.log("StructNewId: " + binaryen.StructNewId); console.log("StructGetId: " + binaryen.StructGetId); console.log("StructSetId: " + binaryen.StructSetId); console.log("ArrayNewId: " + binaryen.ArrayNewId); console.log("ArrayInitId: " + binaryen.ArrayInitId); console.log("ArrayGetId: " + binaryen.ArrayGetId); console.log("ArraySetId: " + binaryen.ArraySetId); console.log("ArrayLenId: " + binaryen.ArrayLenId); } function test_core() { // Module creation module = new binaryen.Module(); // Create a tag var tag = module.addTag("a-tag", binaryen.i32, binaryen.none); // Literals and consts var constI32 = module.i32.const(1), constI64 = module.i64.const(2), constF32 = module.f32.const(3.14), constF64 = module.f64.const(2.1828), constF32Bits = module.f32.const_bits(0xffff1234), constF64Bits = module.f64.const_bits(0x5678abcd, 0xffff1234); var iIfF = binaryen.createType([binaryen.i32, binaryen.i64, binaryen.f32, binaryen.f64]) var temp1 = makeInt32(1), temp2 = makeInt32(2), temp3 = makeInt32(3), temp4 = makeInt32(4), temp5 = makeInt32(5), temp6 = makeInt32(0), temp7 = makeInt32(1), temp8 = makeInt32(0), temp9 = makeInt32(1), temp10 = makeInt32(1), temp11 = makeInt32(3), temp12 = makeInt32(5), temp13 = makeInt32(10), temp14 = makeInt32(11), temp15 = makeInt32(110), temp16 = makeInt64(111); var valueList = [ // Unary module.i32.clz(module.i32.const(-10)), module.i64.ctz(module.i64.const(-22, -1)), module.i32.popcnt(module.i32.const(-10)), module.f32.neg(module.f32.const(-33.612)), module.f64.abs(module.f64.const(-9005.841)), module.f32.ceil(module.f32.const(-33.612)), module.f64.floor(module.f64.const(-9005.841)), module.f32.trunc(module.f32.const(-33.612)), module.f32.nearest(module.f32.const(-33.612)), module.f64.sqrt(module.f64.const(-9005.841)), module.i32.eqz(module.i32.const(-10)), module.i64.extend_s(module.i32.const(-10)), module.i64.extend_u(module.i32.const(-10)), module.i32.wrap(module.i64.const(-22, -1)), module.i32.trunc_s.f32(module.f32.const(-33.612)), module.i64.trunc_s.f32(module.f32.const(-33.612)), module.i32.trunc_u.f32(module.f32.const(-33.612)), module.i64.trunc_u.f32(module.f32.const(-33.612)), module.i32.trunc_s.f64(module.f64.const(-9005.841)), module.i64.trunc_s.f64(module.f64.const(-9005.841)), module.i32.trunc_u.f64(module.f64.const(-9005.841)), module.i64.trunc_u.f64(module.f64.const(-9005.841)), module.i32.trunc_s_sat.f32(module.f32.const(-33.612)), module.i64.trunc_s_sat.f32(module.f32.const(-33.612)), module.i32.trunc_u_sat.f32(module.f32.const(-33.612)), module.i64.trunc_u_sat.f32(module.f32.const(-33.612)), module.i32.trunc_s_sat.f64(module.f64.const(-9005.841)), module.i64.trunc_s_sat.f64(module.f64.const(-9005.841)), module.i32.trunc_u_sat.f64(module.f64.const(-9005.841)), module.i64.trunc_u_sat.f64(module.f64.const(-9005.841)), module.i32.reinterpret(module.f32.const(-33.612)), module.i64.reinterpret(module.f64.const(-9005.841)), module.f32.convert_s.i32(module.i32.const(-10)), module.f64.convert_s.i32(module.i32.const(-10)), module.f32.convert_u.i32(module.i32.const(-10)), module.f64.convert_u.i32(module.i32.const(-10)), module.f32.convert_s.i64(module.i64.const(-22, -1)), module.f64.convert_s.i64(module.i64.const(-22, -1)), module.f32.convert_u.i64(module.i64.const(-22, -1)), module.f64.convert_u.i64(module.i64.const(-22, -1)), module.f64.promote(module.f32.const(-33.612)), module.f32.demote(module.f64.const(-9005.841)), module.f32.reinterpret(module.i32.const(-10)), module.f64.reinterpret(module.i64.const(-22, -1)), module.i8x16.splat(module.i32.const(42)), module.i16x8.splat(module.i32.const(42)), module.i32x4.splat(module.i32.const(42)), module.i64x2.splat(module.i64.const(123, 456)), module.f32x4.splat(module.f32.const(42.0)), module.f64x2.splat(module.f64.const(42.0)), module.v128.not(module.v128.const(v128_bytes)), module.v128.any_true(module.v128.const(v128_bytes)), module.i8x16.popcnt(module.v128.const(v128_bytes)), module.i8x16.abs(module.v128.const(v128_bytes)), module.i8x16.neg(module.v128.const(v128_bytes)), module.i8x16.all_true(module.v128.const(v128_bytes)), module.i8x16.bitmask(module.v128.const(v128_bytes)), module.i16x8.abs(module.v128.const(v128_bytes)), module.i16x8.neg(module.v128.const(v128_bytes)), module.i16x8.all_true(module.v128.const(v128_bytes)), module.i16x8.bitmask(module.v128.const(v128_bytes)), module.i16x8.extadd_pairwise_i8x16_s(module.v128.const(v128_bytes)), module.i16x8.extadd_pairwise_i8x16_u(module.v128.const(v128_bytes)), module.i32x4.abs(module.v128.const(v128_bytes)), module.i32x4.neg(module.v128.const(v128_bytes)), module.i32x4.all_true(module.v128.const(v128_bytes)), module.i32x4.bitmask(module.v128.const(v128_bytes)), module.i32x4.extadd_pairwise_i16x8_s(module.v128.const(v128_bytes)), module.i32x4.extadd_pairwise_i16x8_u(module.v128.const(v128_bytes)), module.i64x2.abs(module.v128.const(v128_bytes)), module.i64x2.neg(module.v128.const(v128_bytes)), module.i64x2.all_true(module.v128.const(v128_bytes)), module.i64x2.bitmask(module.v128.const(v128_bytes)), module.f32x4.abs(module.v128.const(v128_bytes)), module.f32x4.neg(module.v128.const(v128_bytes)), module.f32x4.sqrt(module.v128.const(v128_bytes)), module.f64x2.abs(module.v128.const(v128_bytes)), module.f64x2.neg(module.v128.const(v128_bytes)), module.f64x2.sqrt(module.v128.const(v128_bytes)), module.f64x2.convert_low_i32x4_s(module.v128.const(v128_bytes)), module.f64x2.convert_low_i32x4_u(module.v128.const(v128_bytes)), module.f64x2.promote_low_f32x4(module.v128.const(v128_bytes)), module.i32x4.trunc_sat_f32x4_s(module.v128.const(v128_bytes)), module.i32x4.trunc_sat_f32x4_u(module.v128.const(v128_bytes)), module.f32x4.convert_i32x4_s(module.v128.const(v128_bytes)), module.f32x4.convert_i32x4_u(module.v128.const(v128_bytes)), module.f32x4.demote_f64x2_zero(module.v128.const(v128_bytes)), module.i16x8.extend_low_i8x16_s(module.v128.const(v128_bytes)), module.i16x8.extend_high_i8x16_s(module.v128.const(v128_bytes)), module.i16x8.extend_low_i8x16_u(module.v128.const(v128_bytes)), module.i16x8.extend_high_i8x16_u(module.v128.const(v128_bytes)), module.i32x4.extend_low_i16x8_s(module.v128.const(v128_bytes)), module.i32x4.extend_high_i16x8_s(module.v128.const(v128_bytes)), module.i32x4.extend_low_i16x8_u(module.v128.const(v128_bytes)), module.i32x4.extend_high_i16x8_u(module.v128.const(v128_bytes)), module.i32x4.trunc_sat_f64x2_s_zero(module.v128.const(v128_bytes)), module.i32x4.trunc_sat_f64x2_u_zero(module.v128.const(v128_bytes)), module.i64x2.extend_low_i32x4_s(module.v128.const(v128_bytes)), module.i64x2.extend_high_i32x4_s(module.v128.const(v128_bytes)), module.i64x2.extend_low_i32x4_u(module.v128.const(v128_bytes)), module.i64x2.extend_high_i32x4_u(module.v128.const(v128_bytes)), // Binary module.i32.add(module.i32.const(-10), module.i32.const(-11)), module.f64.sub(module.f64.const(-9005.841), module.f64.const(-9007.333)), module.i32.div_s(module.i32.const(-10), module.i32.const(-11)), module.i64.div_u(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.i64.rem_s(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.i32.rem_u(module.i32.const(-10), module.i32.const(-11)), module.i32.and(module.i32.const(-10), module.i32.const(-11)), module.i64.or(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.i32.xor(module.i32.const(-10), module.i32.const(-11)), module.i64.shl(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.i64.shr_u(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.i32.shr_s(module.i32.const(-10), module.i32.const(-11)), module.i32.rotl(module.i32.const(-10), module.i32.const(-11)), module.i64.rotr(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.f32.div(module.f32.const(-33.612), module.f32.const(-62.5)), module.f64.copysign(module.f64.const(-9005.841), module.f64.const(-9007.333)), module.f32.min(module.f32.const(-33.612), module.f32.const(-62.5)), module.f64.max(module.f64.const(-9005.841), module.f64.const(-9007.333)), module.i32.eq(module.i32.const(-10), module.i32.const(-11)), module.f32.ne(module.f32.const(-33.612), module.f32.const(-62.5)), module.i32.lt_s(module.i32.const(-10), module.i32.const(-11)), module.i64.lt_u(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.i64.le_s(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.i32.le_u(module.i32.const(-10), module.i32.const(-11)), module.i64.gt_s(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.i32.gt_u(module.i32.const(-10), module.i32.const(-11)), module.i32.ge_s(module.i32.const(-10), module.i32.const(-11)), module.i64.ge_u(module.i64.const(-22, 0), module.i64.const(-23, 0)), module.f32.lt(module.f32.const(-33.612), module.f32.const(-62.5)), module.f64.le(module.f64.const(-9005.841), module.f64.const(-9007.333)), module.f64.gt(module.f64.const(-9005.841), module.f64.const(-9007.333)), module.f32.ge(module.f32.const(-33.612), module.f32.const(-62.5)), module.i8x16.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.lt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.lt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.gt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.gt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.le_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.le_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.ge_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.ge_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.lt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.lt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.gt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.gt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.le_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.le_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.ge_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.ge_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.lt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.lt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.gt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.gt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.le_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.le_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.ge_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.ge_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.lt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.gt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.le_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.ge_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.lt(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.gt(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.le(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.ge(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.lt(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.gt(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.le(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.ge(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.v128.and(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.v128.or(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.v128.xor(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.v128.andnot(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.add_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.add_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.sub_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.sub_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.min_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.min_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.max_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.max_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.avgr_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.add_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.add_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.sub_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.sub_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.min_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.min_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.max_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.max_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.avgr_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.q15mulr_sat_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.extmul_low_i8x16_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.extmul_high_i8x16_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.extmul_low_i8x16_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.extmul_high_i8x16_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.min_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.min_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.max_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.max_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.dot_i16x8_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.extmul_low_i16x8_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.extmul_high_i16x8_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.extmul_low_i16x8_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i32x4.extmul_high_i16x8_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.extmul_low_i32x4_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.extmul_high_i32x4_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.extmul_low_i32x4_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i64x2.extmul_high_i32x4_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.div(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.min(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.max(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.pmin(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.pmax(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.ceil(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.floor(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.trunc(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f32x4.nearest(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.div(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.min(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.max(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.pmin(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.pmax(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.ceil(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.floor(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.trunc(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.f64x2.nearest(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.narrow_i16x8_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.narrow_i16x8_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.narrow_i32x4_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i16x8.narrow_i32x4_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), module.i8x16.swizzle(module.v128.const(v128_bytes), module.v128.const(v128_bytes)), // SIMD lane manipulation module.i8x16.extract_lane_s(module.v128.const(v128_bytes), 1), module.i8x16.extract_lane_u(module.v128.const(v128_bytes), 1), module.i16x8.extract_lane_s(module.v128.const(v128_bytes), 1), module.i16x8.extract_lane_u(module.v128.const(v128_bytes), 1), module.i32x4.extract_lane(module.v128.const(v128_bytes), 1), module.i64x2.extract_lane(module.v128.const(v128_bytes), 1), module.f32x4.extract_lane(module.v128.const(v128_bytes), 1), module.f64x2.extract_lane(module.v128.const(v128_bytes), 1), module.i16x8.replace_lane(module.v128.const(v128_bytes), 1, module.i32.const(42)), module.i8x16.replace_lane(module.v128.const(v128_bytes), 1, module.i32.const(42)), module.i32x4.replace_lane(module.v128.const(v128_bytes), 1, module.i32.const(42)), module.i64x2.replace_lane(module.v128.const(v128_bytes), 1, module.i64.const(42, 43)), module.f32x4.replace_lane(module.v128.const(v128_bytes), 1, module.f32.const(42)), module.f64x2.replace_lane(module.v128.const(v128_bytes), 1, module.f64.const(42)), // SIMD shift module.i8x16.shl(module.v128.const(v128_bytes), module.i32.const(1)), module.i8x16.shr_s(module.v128.const(v128_bytes), module.i32.const(1)), module.i8x16.shr_u(module.v128.const(v128_bytes), module.i32.const(1)), module.i16x8.shl(module.v128.const(v128_bytes), module.i32.const(1)), module.i16x8.shr_s(module.v128.const(v128_bytes), module.i32.const(1)), module.i16x8.shr_u(module.v128.const(v128_bytes), module.i32.const(1)), module.i32x4.shl(module.v128.const(v128_bytes), module.i32.const(1)), module.i32x4.shr_s(module.v128.const(v128_bytes), module.i32.const(1)), module.i32x4.shr_u(module.v128.const(v128_bytes), module.i32.const(1)), module.i64x2.shl(module.v128.const(v128_bytes), module.i32.const(1)), module.i64x2.shr_s(module.v128.const(v128_bytes), module.i32.const(1)), module.i64x2.shr_u(module.v128.const(v128_bytes), module.i32.const(1)), // SIMD load module.v128.load8_splat(0, 1, module.i32.const(128)), module.v128.load16_splat(16, 1, module.i32.const(128)), module.v128.load32_splat(16, 4, module.i32.const(128)), module.v128.load64_splat(0, 4, module.i32.const(128)), module.v128.load8x8_s(0, 8, module.i32.const(128)), module.v128.load8x8_u(0, 8, module.i32.const(128)), module.v128.load16x4_s(0, 8, module.i32.const(128)), module.v128.load16x4_u(0, 8, module.i32.const(128)), module.v128.load32x2_s(0, 8, module.i32.const(128)), module.v128.load32x2_u(0, 8, module.i32.const(128)), module.v128.load32_zero(0, 4, module.i32.const(128)), module.v128.load64_zero(0, 8, module.i32.const(128)), // SIMD load/store lane module.v128.load8_lane(0, 1, 0, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.load8_lane(1, 1, 15, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.load16_lane(0, 2, 0, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.load16_lane(2, 1, 7, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.load32_lane(0, 4, 0, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.load32_lane(4, 2, 3, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.load64_lane(0, 8, 0, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.load64_lane(8, 4, 1, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.store8_lane(0, 1, 0, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.store8_lane(1, 1, 15, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.store16_lane(0, 2, 0, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.store16_lane(2, 1, 7, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.store32_lane(0, 4, 0, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.store32_lane(4, 2, 3, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.store64_lane(0, 8, 0, module.i32.const(128), module.v128.const(v128_bytes)), module.v128.store64_lane(8, 4, 1, module.i32.const(128), module.v128.const(v128_bytes)), // Other SIMD module.i8x16.shuffle(module.v128.const(v128_bytes), module.v128.const(v128_bytes), v128_bytes), module.v128.bitselect(module.v128.const(v128_bytes), module.v128.const(v128_bytes), module.v128.const(v128_bytes)), // Bulk memory module.memory.init(0, makeInt32(1024), makeInt32(0), makeInt32(12)), module.data.drop(0), module.memory.copy(makeInt32(2048), makeInt32(1024), makeInt32(12)), module.memory.fill(makeInt32(0), makeInt32(42), makeInt32(1024)), // All the rest module.block('', []), // block with no name module.if(temp1, temp2, temp3), module.if(temp4, temp5), module.loop("in", makeInt32(0)), module.loop(null, makeInt32(0)), module.break("the-value", temp6, temp7), module.break("the-nothing", makeInt32(2)), module.break("the-value", null, makeInt32(3)), module.break("the-nothing"), module.switch([ "the-value" ], "the-value", temp8, temp9), module.switch([ "the-nothing" ], "the-nothing", makeInt32(2)), module.i32.eqz( // check the output type of the call node module.call("kitchen()sinker", [ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ], binaryen.i32) ), module.i32.eqz( // check the output type of the call node module.i32.trunc_s.f32( module.call("an-imported", [ makeInt32(13), makeFloat64(3.7) ], binaryen.f32) ) ), module.i32.eqz( // check the output type of the call node module.call_indirect("t0", makeInt32(2449), [ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ], iIfF, binaryen.i32) ), module.drop(module.local.get(0, binaryen.i32)), module.local.set(0, makeInt32(101)), module.drop(module.local.tee(0, makeInt32(102), binaryen.i32)), module.i32.load(0, 0, makeInt32(1)), module.i64.load16_s(2, 1, makeInt32(8)), module.f32.load(0, 0, makeInt32(2)), module.f64.load(2, 8, makeInt32(9)), module.i32.store(0, 0, temp13, temp14), module.i64.store(2, 4, temp15, temp16), module.select(temp10, temp11, temp12), module.return(makeInt32(1337)), // Tail Call module.return_call("kitchen()sinker", [ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ], binaryen.i32), module.return_call_indirect("t0", makeInt32(2449), [ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ], iIfF, binaryen.i32), // Reference types module.ref.is_null(module.ref.null(binaryen.externref)), module.ref.is_null(module.ref.null(binaryen.funcref)), module.ref.is_null(module.ref.func("kitchen()sinker", binaryen.funcref)), module.select(temp10, module.ref.null(binaryen.funcref), module.ref.func("kitchen()sinker", binaryen.funcref), binaryen.funcref), // GC module.ref.eq(module.ref.null(binaryen.eqref), module.ref.null(binaryen.eqref)), // Exception handling module.try( '', module.throw("a-tag", [module.i32.const(0)]), ["a-tag"], [module.drop(module.i32.pop())], '' ), // Atomics module.i32.atomic.store(0, module.i32.const(0), module.i32.atomic.load(0, module.i32.const(0) ) ), module.drop( module.memory.atomic.wait32( module.i32.const(0), module.i32.const(0), module.i64.const(0) ) ), module.drop( module.memory.atomic.notify( module.i32.const(0), module.i32.const(0) ) ), module.atomic.fence(), // Tuples module.tuple.make( [ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ] ), module.tuple.extract( module.tuple.make( [ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ] ), 2 ), // Pop module.i32.pop(), module.i64.pop(), module.f32.pop(), module.f64.pop(), module.v128.pop(), module.funcref.pop(), module.externref.pop(), module.anyref.pop(), module.eqref.pop(), module.i31ref.pop(), module.dataref.pop(), // Memory module.memory.size(), module.memory.grow(makeInt32(0)), // GC module.i31.new( module.i32.const(0) ), module.i31.get_s( module.i31.new( module.i32.const(1) ) ), module.i31.get_u( module.i31.new( module.i32.const(2) ) ), // Other module.nop(), module.unreachable(), ]; // Test expression utility console.log("getExpressionInfo=" + JSON.stringify(cleanInfo(binaryen.getExpressionInfo(valueList[3])))); console.log(binaryen.emitText(valueList[3])); // test printing a standalone expression console.log("getExpressionInfo(i32.const)=" + JSON.stringify(binaryen.getExpressionInfo(module.i32.const(5)))); console.log("getExpressionInfo(i64.const)=" + JSON.stringify(binaryen.getExpressionInfo(module.i64.const(6, 7)))); console.log("getExpressionInfo(f32.const)=" + JSON.stringify(binaryen.getExpressionInfo(module.f32.const(8.5)))); console.log("getExpressionInfo(f64.const)=" + JSON.stringify(binaryen.getExpressionInfo(module.f64.const(9.5)))); var elements = binaryen.getExpressionInfo( module.tuple.make([ makeInt32(13), makeInt64(37, 0), makeFloat32(1.3), makeFloat64(3.7) ]) ).operands; for (var i = 0; i < elements.length; i++) { console.log("getExpressionInfo(tuple[" + i + "])=" + JSON.stringify(binaryen.getExpressionInfo(elements[i]))); } // Make the main body of the function. and one block with a return value, one without var value = module.block("the-value", valueList); var droppedValue = module.drop(value); var nothing = module.block("the-nothing", [ droppedValue ]); var body = module.block("the-body", [ nothing, makeInt32(42) ]); // Create the function var sinker = module.addFunction("kitchen()sinker", iIfF, binaryen.i32, [ binaryen.i32 ], body); // Create a global var initExpr = module.i32.const(1); var global = module.addGlobal("a-global", binaryen.i32, false, initExpr) // Imports var iF = binaryen.createType([binaryen.i32, binaryen.f64]); module.addFunctionImport("an-imported", "module", "base", iF, binaryen.f32); module.addGlobalImport("a-global-imp", "module", "base", binaryen.i32, false); module.addGlobalImport("a-mut-global-imp", "module", "base", binaryen.i32, true); module.addTagImport("a-tag-imp", "module", "base", binaryen.i32, binaryen.none); // Exports module.addFunctionExport("kitchen()sinker", "kitchen_sinker"); module.addGlobalExport("a-global", "a-global-exp"); module.addTagExport("a-tag", "a-tag-exp"); // Tables module.addTable("t1", 0, 2); var tablePtr = module.getTable("t1"); assert(tablePtr !== 0); assert(tablePtr === module.getTableByIndex(0)); var table = binaryen.getTableInfo(tablePtr); assert(table.name === "t1"); assert(table.module === ""); assert(table.base === ""); assert(table.initial === 0); assert(table.max === 2); module.removeTable("t1"); assert(module.getNumTables() === 0); module.addTable("t0", 1, 0xffffffff); module.addActiveElementSegment("t0", "e0", [ binaryen.getFunctionInfo(sinker).name ]); assert(module.getNumTables() === 1); assert(module.getNumElementSegments() === 1); // Memory. One per module module.setMemory(1, 256, "mem", [ { passive: false, offset: module.i32.const(10), data: "hello, world".split('').map(function(x) { return x.charCodeAt(0) }) }, { passive: true, offset: null, data: "I am passive".split('').map(function(x) { return x.charCodeAt(0) }) } ], true); // Start function. One per module var starter = module.addFunction("starter", binaryen.none, binaryen.none, [], module.nop()); module.setStart(starter); // A bunch of our code needs drop, auto-add it module.autoDrop(); var features = binaryen.Features.All; module.setFeatures(features); assert(module.getFeatures() == features); console.log(module.emitText()); // Verify it validates assert(module.validate()); // Print it out console.log(module.emitText()); // Clean up the module, which owns all the objects we created above module.dispose(); } function makeCallCheck(x) { return module.call("check", [ makeInt32(x) ], binaryen.None); } function test_relooper() { module = new binaryen.Module(); var localTypes = [ binaryen.i32 ]; module.addFunctionImport("check", "module", "check", binaryen.i32, binaryen.none); { // trivial: just one block var relooper = new binaryen.Relooper(module); var block = relooper.addBlock(makeCallCheck(1337)); var body = relooper.renderAndDispose(block, 0, module); module.addFunction("just-one-block", binaryen.none, binaryen.none, localTypes, body); } { // two blocks var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); relooper.addBranch(block0, block1); // no condition, no code on branch var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("two-blocks", binaryen.none, binaryen.none, localTypes, body); } { // two blocks with code between them var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); relooper.addBranch(block0, block1, null, makeDroppedInt32(77)); // code on branch var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("two-blocks-plus-code", binaryen.none, binaryen.none, localTypes, body); } { // two blocks in a loop var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); relooper.addBranch(block0, block1, null, null); relooper.addBranch(block1, block0, null, null); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("loop", binaryen.none, binaryen.none, localTypes, body); } { // two blocks in a loop with codes var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); relooper.addBranch(block0, block1, null, makeDroppedInt32(33)); relooper.addBranch(block1, block0, null, makeDroppedInt32(-66)); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("loop-plus-code", binaryen.none, binaryen.none, localTypes, body); } { // split var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); relooper.addBranch(block0, block1, makeInt32(55), null); relooper.addBranch(block0, block2, null, null); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("split", binaryen.none, binaryen.none, localTypes, body); } { // split + code var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); var temp = makeDroppedInt32(10); relooper.addBranch(block0, block1, makeInt32(55), temp); relooper.addBranch(block0, block2, null, makeDroppedInt32(20)); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("split-plus-code", binaryen.none, binaryen.none, localTypes, body); } { // if var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); relooper.addBranch(block0, block1, makeInt32(55), null); relooper.addBranch(block0, block2, null, null); relooper.addBranch(block1, block2, null, null); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("if", binaryen.none, binaryen.none, localTypes, body); } { // if + code var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); temp = makeDroppedInt32(-1); relooper.addBranch(block0, block1, makeInt32(55), temp); relooper.addBranch(block0, block2, null, makeDroppedInt32(-2)); relooper.addBranch(block1, block2, null, makeDroppedInt32(-3)); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("if-plus-code", binaryen.none, binaryen.none, localTypes, body); } { // if-else var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); var block3 = relooper.addBlock(makeCallCheck(3)); relooper.addBranch(block0, block1, makeInt32(55), null); relooper.addBranch(block0, block2, null, null); relooper.addBranch(block1, block3, null, null); relooper.addBranch(block2, block3, null, null); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("if-else", binaryen.none, binaryen.none, localTypes, body); } { // loop+tail var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); relooper.addBranch(block0, block1, null, null); relooper.addBranch(block1, block0, makeInt32(10), null); relooper.addBranch(block1, block2, null, null); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("loop-tail", binaryen.none, binaryen.none, localTypes, body); } { // nontrivial loop + phi to head var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); var block3 = relooper.addBlock(makeCallCheck(3)); var block4 = relooper.addBlock(makeCallCheck(4)); var block5 = relooper.addBlock(makeCallCheck(5)); var block6 = relooper.addBlock(makeCallCheck(6)); relooper.addBranch(block0, block1, null, makeDroppedInt32(10)); relooper.addBranch(block1, block2, makeInt32(-2), null); relooper.addBranch(block1, block6, null, makeDroppedInt32(20)); relooper.addBranch(block2, block3, makeInt32(-6), null); relooper.addBranch(block2, block1, null, makeDroppedInt32(30)); relooper.addBranch(block3, block4, makeInt32(-10), null); relooper.addBranch(block3, block5, null, null); relooper.addBranch(block4, block5, null, null); relooper.addBranch(block5, block6, null, makeDroppedInt32(40)); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("nontrivial-loop-plus-phi-to-head", binaryen.none, binaryen.none, localTypes, body); } { // switch var relooper = new binaryen.Relooper(module); temp = makeInt32(-99); var block0 = relooper.addBlockWithSwitch(makeCallCheck(0), temp); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); var block3 = relooper.addBlock(makeCallCheck(3)); relooper.addBranchForSwitch(block0, block1, [ 2, 5 ]); relooper.addBranchForSwitch(block0, block2, [4], makeDroppedInt32(55)); relooper.addBranchForSwitch(block0, block3, [], null); var body = relooper.renderAndDispose(block0, 0, module); module.addFunction("switch", binaryen.none, binaryen.none, localTypes, body); } { // duff's device var relooper = new binaryen.Relooper(module); var block0 = relooper.addBlock(makeCallCheck(0)); var block1 = relooper.addBlock(makeCallCheck(1)); var block2 = relooper.addBlock(makeCallCheck(2)); relooper.addBranch(block0, block1, makeInt32(10), null); relooper.addBranch(block0, block2, null, null); relooper.addBranch(block1, block2, null, null); relooper.addBranch(block2, block1, null, null); var body = relooper.renderAndDispose(block0, 3, module); // use $3 as the helper var module.addFunction("duffs-device", binaryen.none, binaryen.none, [ binaryen.i32, binaryen.i32, binaryen.i64, binaryen.i32, binaryen.f32, binaryen.f64, binaryen.i32 ], body); } { // return in a block var relooper = new binaryen.Relooper(module); var list = module.block("the-list", [ makeCallCheck(42), module.return(makeInt32(1337)) ]); var block = relooper.addBlock(list); var body = relooper.renderAndDispose(block, 0, module); module.addFunction("return", binaryen.none, binaryen.i32, localTypes, body); } console.log("raw:"); console.log(module.emitText()); assert(module.validate()); module.runPasses(["precompute"]); assert(module.validate()); module.optimize(); assert(module.validate()); console.log("optimized:"); console.log(module.emitText()); module.dispose(); } function test_binaries() { var buffer, size; { // create a module and write it to binary module = new binaryen.Module(); module.setFeatures(binaryen.Features.All); var ii = binaryen.createType([binaryen.i32, binaryen.i32]); var x = module.local.get(0, binaryen.i32), y = module.local.get(1, binaryen.i32); var add = module.i32.add(x, y); var adder = module.addFunction("adder", ii, binaryen.i32, [], add); var initExpr = module.i32.const(3); var global = module.addGlobal("a-global", binaryen.i32, false, initExpr) var tag = module.addTag("a-tag", binaryen.createType([binaryen.i32, binaryen.i32]), binaryen.none); binaryen.setDebugInfo(true); // include names section buffer = module.emitBinary(); binaryen.setDebugInfo(false); size = buffer.length; // write out the module module.dispose(); } assert(size > 0); assert(size < 512); // this is a tiny module // read the module from the binary module = binaryen.readBinary(buffer); module.setFeatures(binaryen.Features.All); // validate, print, and free assert(module.validate()); console.log("module loaded from binary form:"); console.log(module.emitText()); module.dispose(); } function test_interpret() { // create a simple module with a start method that prints a number, and interpret it, printing that number. module = new binaryen.Module(); module.addFunctionImport("print-i32", "spectest", "print", binaryen.i32, binaryen.none); var call = module.call("print-i32", [ makeInt32(1234) ], binaryen.None); var starter = module.addFunction("starter", binaryen.none, binaryen.none, [], call); module.setStart(starter); console.log(module.emitText()); assert(module.validate()); module.interpret(); module.dispose(); } function test_nonvalid() { // create a module that fails to validate module = new binaryen.Module(); var func = module.addFunction("func", binaryen.none, binaryen.none, [ binaryen.i32 ], module.local.set(0, makeInt64(1234, 0)) // wrong type! ); console.log(module.emitText()); console.log("validation: " + module.validate()); module.dispose(); } function test_parsing() { var text; // create a module and write it to text module = new binaryen.Module(); module.setFeatures(binaryen.Features.All); var ii = binaryen.createType([binaryen.i32, binaryen.i32]); var x = module.local.get(0, binaryen.i32), y = module.local.get(1, binaryen.i32); var add = module.i32.add(x, y); var adder = module.addFunction("adder", ii, binaryen.i32, [], add); var initExpr = module.i32.const(3); var global = module.addGlobal("a-global", binaryen.i32, false, initExpr) var tag = module.addTag("a-tag", binaryen.i32, binaryen.none); text = module.emitText(); module.dispose(); module = null; console.log('test_parsing text:\n' + text); text = text.replace('adder', 'ADD_ER'); var module2 = binaryen.parseText(text); module2.setFeatures(binaryen.Features.All); assert(module2.validate()); console.log("module loaded from text form:"); console.log(module2.emitText()); module2.dispose(); } function test_internals() { console.log('sizeof Literal: ' + binaryen['_BinaryenSizeofLiteral']()); } function test_for_each() { module = new binaryen.Module(); var funcNames = [ "fn0", "fn1", "fn2" ]; var fns = [ module.addFunction(funcNames[0], binaryen.none, binaryen.none, [], module.nop()), module.addFunction(funcNames[1], binaryen.none, binaryen.none, [], module.nop()), module.addFunction(funcNames[2], binaryen.none, binaryen.none, [], module.nop()) ]; var i; for (i = 0; i < module.getNumFunctions(); i++) { assert(module.getFunctionByIndex(i) === fns[i]); } var exps = [ module.addFunctionExport(funcNames[0], "export0"), module.addFunctionExport(funcNames[1], "export1"), module.addFunctionExport(funcNames[2], "export2") ]; for (i = 0; i < module.getNumExports(); i++) { assert(module.getExportByIndex(i) === exps[i]); } var expected_offsets = [10, 125]; var expected_data = ["hello, world", "segment data 2"]; var expected_passive = [false, false]; var glos = [ module.addGlobal("a-global", binaryen.i32, false, module.i32.const(expected_offsets[1])), module.addGlobal("a-global2", binaryen.i32, false, module.i32.const(2)), module.addGlobal("a-global3", binaryen.i32, false, module.i32.const(3)) ]; for (i = 0; i < module.getNumGlobals(); i++) { assert(module.getGlobalByIndex(i) === glos[i]); } module.setMemory(1, 256, "mem", [ { passive: expected_passive[0], offset: module.i32.const(expected_offsets[0]), data: expected_data[0].split('').map(function(x) { return x.charCodeAt(0) }) }, { passive: expected_passive[1], offset: module.global.get("a-global"), data: expected_data[1].split('').map(function(x) { return x.charCodeAt(0) }) } ], false); for (i = 0; i < module.getNumMemorySegments(); i++) { var segment = module.getMemorySegmentInfoByIndex(i); assert(expected_offsets[i] === segment.offset); var data8 = new Uint8Array(segment.data); var str = String.fromCharCode.apply(null, data8); assert(expected_data[i] === str); assert(expected_passive[i] === segment.passive); } module.addTable("t0", 1, 0xffffffff); var ftable = module.getTable("t0"); var constExprRef = module.i32.const(0); module.addActiveElementSegment("t0", "e0", funcNames, constExprRef); var tableInfo = binaryen.getTableInfo(ftable); assert("" === tableInfo.module); assert("" === tableInfo.base); var segments = module.getTableSegments(ftable); assert(1 === segments.length); var elemSegment = binaryen.getElementSegmentInfo(segments[0]); assert(constExprRef === elemSegment.offset); assert(3 === elemSegment.data.length); for (i = 0; i < elemSegment.data.length; i++) { assert(funcNames[i] === elemSegment.data[i]); } console.log(module.emitText()); module.dispose(); } function test_expression_info() { module = new binaryen.Module(); // Issue #2392 console.log("getExpressionInfo(memory.grow)=" + JSON.stringify(binaryen.getExpressionInfo(module.memory.grow(1)))); // Issue #2396 console.log("getExpressionInfo(switch)=" + JSON.stringify(binaryen.getExpressionInfo(module.switch([ "label" ], "label", 0)))); module.dispose(); } test_types(); test_features(); test_ids(); test_core(); test_relooper(); test_binaries(); test_interpret(); test_nonvalid(); test_parsing(); test_internals(); test_for_each(); test_expression_info(); binaryen-version_108/test/binaryen.js/kitchen-sink.js.txt000066400000000000000000003367561423707623100237350ustar00rootroot00000000000000 // BinaryenTypeNone: 0 // // BinaryenTypeUnreachable: 1 // 1 // BinaryenTypeInt32: 2 // 2 // BinaryenTypeInt64: 3 // 3 // BinaryenTypeFloat32: 4 // 4 // BinaryenTypeFloat64: 5 // 5 // BinaryenTypeVec128: 6 // 6 // BinaryenTypeFuncref: 7 // 7 // BinaryenTypeExternref: 8 // 8 // BinaryenTypeAnyref: 8 // 8 // BinaryenTypeEqref: 9 // 9 // BinaryenTypeI31ref: 10 // 10 // BinaryenTypeDataref: 11 // 11 // BinaryenTypeAuto: -1 // 2,2 // 2,2 // 4,4 Features.MVP: 0 Features.Atomics: 1 Features.BulkMemory: 16 Features.MutableGlobals: 2 Features.NontrappingFPToInt: 4 Features.SignExt: 32 Features.SIMD128: 8 Features.ExceptionHandling: 64 Features.TailCall: 128 Features.ReferenceTypes: 256 Features.Multivalue: 512 Features.GC: 1024 Features.Memory64: 2048 Features.TypedFunctionReferences: 4096 Features.RelaxedSIMD: 16384 Features.ExtendedConst: 32768 Features.All: 57343 InvalidId: 0 BlockId: 1 IfId: 2 LoopId: 3 BreakId: 4 SwitchId: 5 CallId: 6 CallIndirectId: 7 LocalGetId: 8 LocalSetId: 9 GlobalGetId: 10 GlobalSetId: 11 LoadId: 12 StoreId: 13 ConstId: 14 UnaryId: 15 BinaryId: 16 SelectId: 17 DropId: 18 ReturnId: 19 MemorySizeId: 20 MemoryGrowId: 21 NopId: 22 UnreachableId: 23 AtomicCmpxchgId: 25 AtomicRMWId: 24 AtomicWaitId: 26 AtomicNotifyId: 27 SIMDExtractId: 29 SIMDReplaceId: 30 SIMDShuffleId: 31 SIMDTernaryId: 32 SIMDShiftId: 33 SIMDLoadId: 34 SIMDLoadStoreLaneId: 35 MemoryInitId: 36 DataDropId: 37 MemoryCopyId: 38 MemoryFillId: 39 PopId: 40 RefNullId: 41 RefIsId: 42 RefFuncId: 43 RefEqId: 44 TableGetId: 45 TableSetId: 46 TableSizeId: 47 TableGrowId: 48 TryId: 49 ThrowId: 50 RethrowId: 51 TupleMakeId: 52 TupleExtractId: 53 I31NewId: 54 I31GetId: 55 CallRefId: 56 RefTestId: 57 RefCastId: 58 BrOnId: 59 RttCanonId: 60 RttSubId: 61 StructNewId: 62 StructGetId: 63 StructSetId: 64 ArrayNewId: 65 ArrayInitId: 66 ArrayGetId: 67 ArraySetId: 68 ArrayLenId: 69 getExpressionInfo={"id":15,"type":4,"op":6} (f32.neg (f32.const -33.61199951171875) ) getExpressionInfo(i32.const)={"id":14,"type":2,"value":5} getExpressionInfo(i64.const)={"id":14,"type":3,"value":{"low":6,"high":7}} getExpressionInfo(f32.const)={"id":14,"type":4,"value":8.5} getExpressionInfo(f64.const)={"id":14,"type":5,"value":9.5} getExpressionInfo(tuple[0])={"id":14,"type":2,"value":13} getExpressionInfo(tuple[1])={"id":14,"type":3,"value":{"low":37,"high":0}} getExpressionInfo(tuple[2])={"id":14,"type":4,"value":1.2999999523162842} getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} (module (type $i32_i64_f32_f64_=>_i32 (func (param i32 i64 f32 f64) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_f64_=>_f32 (func (param i32 f64) (result f32))) (type $none_=>_none (func)) (import "module" "base" (global $a-global-imp i32)) (import "module" "base" (global $a-mut-global-imp (mut i32))) (import "module" "base" (func $an-imported (param i32 f64) (result f32))) (import "module" "base" (tag $a-tag-imp (param i32))) (global $a-global i32 (i32.const 1)) (memory $0 (shared 1 256)) (data (i32.const 10) "hello, world") (data "I am passive") (table $t0 1 funcref) (elem $e0 (i32.const 0) "$kitchen()sinker") (tag $a-tag (param i32)) (export "kitchen_sinker" (func "$kitchen()sinker")) (export "a-global-exp" (global $a-global)) (export "a-tag-exp" (tag $a-tag)) (export "mem" (memory $0)) (start $starter) (func "$kitchen()sinker" (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32) (local $4 i32) (block $the-body (result i32) (block $the-nothing (drop (block $the-value (result i32) (drop (i32.clz (i32.const -10) ) ) (drop (i64.ctz (i64.const -22) ) ) (drop (i32.popcnt (i32.const -10) ) ) (drop (f32.neg (f32.const -33.61199951171875) ) ) (drop (f64.abs (f64.const -9005.841) ) ) (drop (f32.ceil (f32.const -33.61199951171875) ) ) (drop (f64.floor (f64.const -9005.841) ) ) (drop (f32.trunc (f32.const -33.61199951171875) ) ) (drop (f32.nearest (f32.const -33.61199951171875) ) ) (drop (f64.sqrt (f64.const -9005.841) ) ) (drop (i32.eqz (i32.const -10) ) ) (drop (i64.extend_i32_s (i32.const -10) ) ) (drop (i64.extend_i32_u (i32.const -10) ) ) (drop (i32.wrap_i64 (i64.const -22) ) ) (drop (i32.trunc_f32_s (f32.const -33.61199951171875) ) ) (drop (i64.trunc_f32_s (f32.const -33.61199951171875) ) ) (drop (i32.trunc_f32_u (f32.const -33.61199951171875) ) ) (drop (i64.trunc_f32_u (f32.const -33.61199951171875) ) ) (drop (i32.trunc_f64_s (f64.const -9005.841) ) ) (drop (i64.trunc_f64_s (f64.const -9005.841) ) ) (drop (i32.trunc_f64_u (f64.const -9005.841) ) ) (drop (i64.trunc_f64_u (f64.const -9005.841) ) ) (drop (i32.trunc_sat_f32_s (f32.const -33.61199951171875) ) ) (drop (i64.trunc_sat_f32_s (f32.const -33.61199951171875) ) ) (drop (i32.trunc_sat_f32_u (f32.const -33.61199951171875) ) ) (drop (i64.trunc_sat_f32_u (f32.const -33.61199951171875) ) ) (drop (i32.trunc_sat_f64_s (f64.const -9005.841) ) ) (drop (i64.trunc_sat_f64_s (f64.const -9005.841) ) ) (drop (i32.trunc_sat_f64_u (f64.const -9005.841) ) ) (drop (i64.trunc_sat_f64_u (f64.const -9005.841) ) ) (drop (i32.reinterpret_f32 (f32.const -33.61199951171875) ) ) (drop (i64.reinterpret_f64 (f64.const -9005.841) ) ) (drop (f32.convert_i32_s (i32.const -10) ) ) (drop (f64.convert_i32_s (i32.const -10) ) ) (drop (f32.convert_i32_u (i32.const -10) ) ) (drop (f64.convert_i32_u (i32.const -10) ) ) (drop (f32.convert_i64_s (i64.const -22) ) ) (drop (f64.convert_i64_s (i64.const -22) ) ) (drop (f32.convert_i64_u (i64.const -22) ) ) (drop (f64.convert_i64_u (i64.const -22) ) ) (drop (f64.promote_f32 (f32.const -33.61199951171875) ) ) (drop (f32.demote_f64 (f64.const -9005.841) ) ) (drop (f32.reinterpret_i32 (i32.const -10) ) ) (drop (f64.reinterpret_i64 (i64.const -22) ) ) (drop (i8x16.splat (i32.const 42) ) ) (drop (i16x8.splat (i32.const 42) ) ) (drop (i32x4.splat (i32.const 42) ) ) (drop (i64x2.splat (i64.const 1958505087099) ) ) (drop (f32x4.splat (f32.const 42) ) ) (drop (f64x2.splat (f64.const 42) ) ) (drop (v128.not (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.any_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.popcnt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extadd_pairwise_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extadd_pairwise_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extadd_pairwise_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extadd_pairwise_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.sqrt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.sqrt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.convert_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.convert_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.promote_low_f32x4 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.convert_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.convert_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.demote_f64x2_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_low_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_high_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_low_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_high_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_low_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_high_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_low_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_high_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f64x2_s_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f64x2_u_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_high_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_high_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32.add (i32.const -10) (i32.const -11) ) ) (drop (f64.sub (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (i32.div_s (i32.const -10) (i32.const -11) ) ) (drop (i64.div_u (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i64.rem_s (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.rem_u (i32.const -10) (i32.const -11) ) ) (drop (i32.and (i32.const -10) (i32.const -11) ) ) (drop (i64.or (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.xor (i32.const -10) (i32.const -11) ) ) (drop (i64.shl (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i64.shr_u (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.shr_s (i32.const -10) (i32.const -11) ) ) (drop (i32.rotl (i32.const -10) (i32.const -11) ) ) (drop (i64.rotr (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (f32.div (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.copysign (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f32.min (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.max (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (i32.eq (i32.const -10) (i32.const -11) ) ) (drop (f32.ne (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (i32.lt_s (i32.const -10) (i32.const -11) ) ) (drop (i64.lt_u (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i64.le_s (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.le_u (i32.const -10) (i32.const -11) ) ) (drop (i64.gt_s (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.gt_u (i32.const -10) (i32.const -11) ) ) (drop (i32.ge_s (i32.const -10) (i32.const -11) ) ) (drop (i64.ge_u (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (f32.lt (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.le (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f64.gt (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f32.ge (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (i8x16.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.lt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.gt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.le (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ge (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.lt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.gt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.le (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ge (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.and (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.or (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.xor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.andnot (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.avgr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.avgr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.q15mulr_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_low_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_high_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_low_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_high_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.dot_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_low_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_high_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_low_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_high_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_high_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_high_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.div (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.min (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.max (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.pmin (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.pmax (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ceil (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.floor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.trunc (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.nearest (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.div (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.min (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.max (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.pmin (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.pmax (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ceil (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.floor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.trunc (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.nearest (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.narrow_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.narrow_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.narrow_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.narrow_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.swizzle (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.extract_lane_s 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.extract_lane_u 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extract_lane_s 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extract_lane_u 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extract_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extract_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.extract_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.extract_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i8x16.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i32x4.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i64x2.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i64.const 184683593770) ) ) (drop (f32x4.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (f32.const 42) ) ) (drop (f64x2.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (f64.const 42) ) ) (drop (i8x16.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i8x16.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i8x16.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (v128.load8_splat (i32.const 128) ) ) (drop (v128.load16_splat offset=16 align=1 (i32.const 128) ) ) (drop (v128.load32_splat offset=16 (i32.const 128) ) ) (drop (v128.load64_splat align=4 (i32.const 128) ) ) (drop (v128.load8x8_s (i32.const 128) ) ) (drop (v128.load8x8_u (i32.const 128) ) ) (drop (v128.load16x4_s (i32.const 128) ) ) (drop (v128.load16x4_u (i32.const 128) ) ) (drop (v128.load32x2_s (i32.const 128) ) ) (drop (v128.load32x2_u (i32.const 128) ) ) (drop (v128.load32_zero (i32.const 128) ) ) (drop (v128.load64_zero (i32.const 128) ) ) (drop (v128.load8_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load8_lane offset=1 15 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load16_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load16_lane offset=2 align=1 7 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load32_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load32_lane offset=4 align=2 3 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load64_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load64_lane offset=8 align=4 1 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (v128.store8_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store8_lane offset=1 15 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store16_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store16_lane offset=2 align=1 7 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store32_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store32_lane offset=4 align=2 3 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store64_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store64_lane offset=8 align=4 1 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (drop (i8x16.shuffle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.bitselect (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (memory.init 0 (i32.const 1024) (i32.const 0) (i32.const 12) ) (data.drop 0) (memory.copy (i32.const 2048) (i32.const 1024) (i32.const 12) ) (memory.fill (i32.const 0) (i32.const 42) (i32.const 1024) ) (block ) (if (i32.const 1) (drop (i32.const 2) ) (drop (i32.const 3) ) ) (if (i32.const 4) (drop (i32.const 5) ) ) (drop (loop $in (result i32) (i32.const 0) ) ) (drop (loop (result i32) (i32.const 0) ) ) (drop (br_if $the-value (i32.const 1) (i32.const 0) ) ) (br_if $the-nothing (i32.const 2) ) (br $the-value (i32.const 3) ) (br $the-nothing) (br_table $the-value $the-value (i32.const 1) (i32.const 0) ) (br_table $the-nothing $the-nothing (i32.const 2) ) (drop (i32.eqz (call "$kitchen()sinker" (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) ) (drop (i32.eqz (i32.trunc_f32_s (call $an-imported (i32.const 13) (f64.const 3.7) ) ) ) ) (drop (i32.eqz (call_indirect $t0 (type $i32_i64_f32_f64_=>_i32) (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) (i32.const 2449) ) ) ) (drop (local.get $0) ) (local.set $0 (i32.const 101) ) (drop (local.tee $0 (i32.const 102) ) ) (drop (i32.load (i32.const 1) ) ) (drop (i64.load16_s offset=2 align=1 (i32.const 8) ) ) (drop (f32.load (i32.const 2) ) ) (drop (f64.load offset=2 (i32.const 9) ) ) (i32.store (i32.const 10) (i32.const 11) ) (i64.store offset=2 align=4 (i32.const 110) (i64.const 111) ) (drop (select (i32.const 3) (i32.const 5) (i32.const 1) ) ) (return (i32.const 1337) ) (return_call "$kitchen()sinker" (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) (return_call_indirect $t0 (type $i32_i64_f32_f64_=>_i32) (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) (i32.const 2449) ) (drop (ref.is_null (ref.null any) ) ) (drop (ref.is_null (ref.null func) ) ) (drop (ref.is_null (ref.func "$kitchen()sinker") ) ) (drop (select (result funcref) (ref.null func) (ref.func "$kitchen()sinker") (i32.const 1) ) ) (drop (ref.eq (ref.null eq) (ref.null eq) ) ) (try (do (throw $a-tag (i32.const 0) ) ) (catch $a-tag (drop (pop i32) ) ) ) (i32.atomic.store (i32.const 0) (i32.atomic.load (i32.const 0) ) ) (drop (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const 0) ) ) (drop (memory.atomic.notify (i32.const 0) (i32.const 0) ) ) (atomic.fence) (drop (tuple.make (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) (drop (tuple.extract 2 (tuple.make (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) ) (drop (pop i32) ) (drop (pop i64) ) (drop (pop f32) ) (drop (pop f64) ) (drop (pop v128) ) (drop (pop funcref) ) (drop (pop anyref) ) (drop (pop anyref) ) (drop (pop eqref) ) (drop (pop i31ref) ) (drop (pop dataref) ) (drop (memory.size) ) (drop (memory.grow (i32.const 0) ) ) (drop (i31.new (i32.const 0) ) ) (drop (i31.get_s (i31.new (i32.const 1) ) ) ) (drop (i31.get_u (i31.new (i32.const 2) ) ) ) (nop) (unreachable) ) ) ) (i32.const 42) ) ) (func $starter (nop) ) ) (module (type $i32_i64_f32_f64_=>_i32 (func (param i32 i64 f32 f64) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_f64_=>_f32 (func (param i32 f64) (result f32))) (type $none_=>_none (func)) (import "module" "base" (global $a-global-imp i32)) (import "module" "base" (global $a-mut-global-imp (mut i32))) (import "module" "base" (func $an-imported (param i32 f64) (result f32))) (import "module" "base" (tag $a-tag-imp (param i32))) (global $a-global i32 (i32.const 1)) (memory $0 (shared 1 256)) (data (i32.const 10) "hello, world") (data "I am passive") (table $t0 1 funcref) (elem $e0 (i32.const 0) "$kitchen()sinker") (tag $a-tag (param i32)) (export "kitchen_sinker" (func "$kitchen()sinker")) (export "a-global-exp" (global $a-global)) (export "a-tag-exp" (tag $a-tag)) (export "mem" (memory $0)) (start $starter) (func "$kitchen()sinker" (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32) (local $4 i32) (block $the-body (result i32) (block $the-nothing (drop (block $the-value (result i32) (drop (i32.clz (i32.const -10) ) ) (drop (i64.ctz (i64.const -22) ) ) (drop (i32.popcnt (i32.const -10) ) ) (drop (f32.neg (f32.const -33.61199951171875) ) ) (drop (f64.abs (f64.const -9005.841) ) ) (drop (f32.ceil (f32.const -33.61199951171875) ) ) (drop (f64.floor (f64.const -9005.841) ) ) (drop (f32.trunc (f32.const -33.61199951171875) ) ) (drop (f32.nearest (f32.const -33.61199951171875) ) ) (drop (f64.sqrt (f64.const -9005.841) ) ) (drop (i32.eqz (i32.const -10) ) ) (drop (i64.extend_i32_s (i32.const -10) ) ) (drop (i64.extend_i32_u (i32.const -10) ) ) (drop (i32.wrap_i64 (i64.const -22) ) ) (drop (i32.trunc_f32_s (f32.const -33.61199951171875) ) ) (drop (i64.trunc_f32_s (f32.const -33.61199951171875) ) ) (drop (i32.trunc_f32_u (f32.const -33.61199951171875) ) ) (drop (i64.trunc_f32_u (f32.const -33.61199951171875) ) ) (drop (i32.trunc_f64_s (f64.const -9005.841) ) ) (drop (i64.trunc_f64_s (f64.const -9005.841) ) ) (drop (i32.trunc_f64_u (f64.const -9005.841) ) ) (drop (i64.trunc_f64_u (f64.const -9005.841) ) ) (drop (i32.trunc_sat_f32_s (f32.const -33.61199951171875) ) ) (drop (i64.trunc_sat_f32_s (f32.const -33.61199951171875) ) ) (drop (i32.trunc_sat_f32_u (f32.const -33.61199951171875) ) ) (drop (i64.trunc_sat_f32_u (f32.const -33.61199951171875) ) ) (drop (i32.trunc_sat_f64_s (f64.const -9005.841) ) ) (drop (i64.trunc_sat_f64_s (f64.const -9005.841) ) ) (drop (i32.trunc_sat_f64_u (f64.const -9005.841) ) ) (drop (i64.trunc_sat_f64_u (f64.const -9005.841) ) ) (drop (i32.reinterpret_f32 (f32.const -33.61199951171875) ) ) (drop (i64.reinterpret_f64 (f64.const -9005.841) ) ) (drop (f32.convert_i32_s (i32.const -10) ) ) (drop (f64.convert_i32_s (i32.const -10) ) ) (drop (f32.convert_i32_u (i32.const -10) ) ) (drop (f64.convert_i32_u (i32.const -10) ) ) (drop (f32.convert_i64_s (i64.const -22) ) ) (drop (f64.convert_i64_s (i64.const -22) ) ) (drop (f32.convert_i64_u (i64.const -22) ) ) (drop (f64.convert_i64_u (i64.const -22) ) ) (drop (f64.promote_f32 (f32.const -33.61199951171875) ) ) (drop (f32.demote_f64 (f64.const -9005.841) ) ) (drop (f32.reinterpret_i32 (i32.const -10) ) ) (drop (f64.reinterpret_i64 (i64.const -22) ) ) (drop (i8x16.splat (i32.const 42) ) ) (drop (i16x8.splat (i32.const 42) ) ) (drop (i32x4.splat (i32.const 42) ) ) (drop (i64x2.splat (i64.const 1958505087099) ) ) (drop (f32x4.splat (f32.const 42) ) ) (drop (f64x2.splat (f64.const 42) ) ) (drop (v128.not (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.any_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.popcnt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extadd_pairwise_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extadd_pairwise_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extadd_pairwise_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extadd_pairwise_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.sqrt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.sqrt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.convert_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.convert_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.promote_low_f32x4 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.convert_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.convert_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.demote_f64x2_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_low_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_high_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_low_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_high_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_low_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_high_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_low_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_high_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f64x2_s_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f64x2_u_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_high_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_high_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32.add (i32.const -10) (i32.const -11) ) ) (drop (f64.sub (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (i32.div_s (i32.const -10) (i32.const -11) ) ) (drop (i64.div_u (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i64.rem_s (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.rem_u (i32.const -10) (i32.const -11) ) ) (drop (i32.and (i32.const -10) (i32.const -11) ) ) (drop (i64.or (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.xor (i32.const -10) (i32.const -11) ) ) (drop (i64.shl (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i64.shr_u (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.shr_s (i32.const -10) (i32.const -11) ) ) (drop (i32.rotl (i32.const -10) (i32.const -11) ) ) (drop (i64.rotr (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (f32.div (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.copysign (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f32.min (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.max (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (i32.eq (i32.const -10) (i32.const -11) ) ) (drop (f32.ne (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (i32.lt_s (i32.const -10) (i32.const -11) ) ) (drop (i64.lt_u (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i64.le_s (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.le_u (i32.const -10) (i32.const -11) ) ) (drop (i64.gt_s (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (i32.gt_u (i32.const -10) (i32.const -11) ) ) (drop (i32.ge_s (i32.const -10) (i32.const -11) ) ) (drop (i64.ge_u (i64.const 4294967274) (i64.const 4294967273) ) ) (drop (f32.lt (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.le (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f64.gt (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f32.ge (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (i8x16.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.lt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.gt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.le (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ge (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.lt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.gt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.le (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ge (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.and (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.or (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.xor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.andnot (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.avgr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.avgr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.q15mulr_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_low_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_high_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_low_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_high_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.dot_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_low_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_high_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_low_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_high_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_high_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_high_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.div (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.min (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.max (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.pmin (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.pmax (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ceil (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.floor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.trunc (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.nearest (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.div (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.min (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.max (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.pmin (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.pmax (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ceil (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.floor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.trunc (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.nearest (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.narrow_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.narrow_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.narrow_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.narrow_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.swizzle (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.extract_lane_s 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.extract_lane_u 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extract_lane_s 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extract_lane_u 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extract_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extract_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.extract_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.extract_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i8x16.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i32x4.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i64x2.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i64.const 184683593770) ) ) (drop (f32x4.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (f32.const 42) ) ) (drop (f64x2.replace_lane 1 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (f64.const 42) ) ) (drop (i8x16.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i8x16.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i8x16.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (v128.load8_splat (i32.const 128) ) ) (drop (v128.load16_splat offset=16 align=1 (i32.const 128) ) ) (drop (v128.load32_splat offset=16 (i32.const 128) ) ) (drop (v128.load64_splat align=4 (i32.const 128) ) ) (drop (v128.load8x8_s (i32.const 128) ) ) (drop (v128.load8x8_u (i32.const 128) ) ) (drop (v128.load16x4_s (i32.const 128) ) ) (drop (v128.load16x4_u (i32.const 128) ) ) (drop (v128.load32x2_s (i32.const 128) ) ) (drop (v128.load32x2_u (i32.const 128) ) ) (drop (v128.load32_zero (i32.const 128) ) ) (drop (v128.load64_zero (i32.const 128) ) ) (drop (v128.load8_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load8_lane offset=1 15 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load16_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load16_lane offset=2 align=1 7 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load32_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load32_lane offset=4 align=2 3 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load64_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load64_lane offset=8 align=4 1 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (v128.store8_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store8_lane offset=1 15 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store16_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store16_lane offset=2 align=1 7 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store32_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store32_lane offset=4 align=2 3 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store64_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store64_lane offset=8 align=4 1 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (drop (i8x16.shuffle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.bitselect (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (memory.init 0 (i32.const 1024) (i32.const 0) (i32.const 12) ) (data.drop 0) (memory.copy (i32.const 2048) (i32.const 1024) (i32.const 12) ) (memory.fill (i32.const 0) (i32.const 42) (i32.const 1024) ) (block ) (if (i32.const 1) (drop (i32.const 2) ) (drop (i32.const 3) ) ) (if (i32.const 4) (drop (i32.const 5) ) ) (drop (loop $in (result i32) (i32.const 0) ) ) (drop (loop (result i32) (i32.const 0) ) ) (drop (br_if $the-value (i32.const 1) (i32.const 0) ) ) (br_if $the-nothing (i32.const 2) ) (br $the-value (i32.const 3) ) (br $the-nothing) (br_table $the-value $the-value (i32.const 1) (i32.const 0) ) (br_table $the-nothing $the-nothing (i32.const 2) ) (drop (i32.eqz (call "$kitchen()sinker" (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) ) (drop (i32.eqz (i32.trunc_f32_s (call $an-imported (i32.const 13) (f64.const 3.7) ) ) ) ) (drop (i32.eqz (call_indirect $t0 (type $i32_i64_f32_f64_=>_i32) (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) (i32.const 2449) ) ) ) (drop (local.get $0) ) (local.set $0 (i32.const 101) ) (drop (local.tee $0 (i32.const 102) ) ) (drop (i32.load (i32.const 1) ) ) (drop (i64.load16_s offset=2 align=1 (i32.const 8) ) ) (drop (f32.load (i32.const 2) ) ) (drop (f64.load offset=2 (i32.const 9) ) ) (i32.store (i32.const 10) (i32.const 11) ) (i64.store offset=2 align=4 (i32.const 110) (i64.const 111) ) (drop (select (i32.const 3) (i32.const 5) (i32.const 1) ) ) (return (i32.const 1337) ) (return_call "$kitchen()sinker" (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) (return_call_indirect $t0 (type $i32_i64_f32_f64_=>_i32) (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) (i32.const 2449) ) (drop (ref.is_null (ref.null any) ) ) (drop (ref.is_null (ref.null func) ) ) (drop (ref.is_null (ref.func "$kitchen()sinker") ) ) (drop (select (result funcref) (ref.null func) (ref.func "$kitchen()sinker") (i32.const 1) ) ) (drop (ref.eq (ref.null eq) (ref.null eq) ) ) (try (do (throw $a-tag (i32.const 0) ) ) (catch $a-tag (drop (pop i32) ) ) ) (i32.atomic.store (i32.const 0) (i32.atomic.load (i32.const 0) ) ) (drop (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const 0) ) ) (drop (memory.atomic.notify (i32.const 0) (i32.const 0) ) ) (atomic.fence) (drop (tuple.make (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) (drop (tuple.extract 2 (tuple.make (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) ) (drop (pop i32) ) (drop (pop i64) ) (drop (pop f32) ) (drop (pop f64) ) (drop (pop v128) ) (drop (pop funcref) ) (drop (pop anyref) ) (drop (pop anyref) ) (drop (pop eqref) ) (drop (pop i31ref) ) (drop (pop dataref) ) (drop (memory.size) ) (drop (memory.grow (i32.const 0) ) ) (drop (i31.new (i32.const 0) ) ) (drop (i31.get_s (i31.new (i32.const 1) ) ) ) (drop (i31.get_u (i31.new (i32.const 2) ) ) ) (nop) (unreachable) ) ) ) (i32.const 42) ) ) (func $starter (nop) ) ) raw: (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (import "module" "check" (func $check (param i32))) (func $just-one-block (local $0 i32) (call $check (i32.const 1337) ) ) (func $two-blocks (local $0 i32) (block (call $check (i32.const 0) ) (call $check (i32.const 1) ) ) ) (func $two-blocks-plus-code (local $0 i32) (block (block (call $check (i32.const 0) ) (drop (i32.const 77) ) ) (call $check (i32.const 1) ) ) ) (func $loop (local $0 i32) (loop $shape$0$continue (block (call $check (i32.const 0) ) (call $check (i32.const 1) ) ) (block (br $shape$0$continue) ) ) ) (func $loop-plus-code (local $0 i32) (loop $shape$0$continue (block (block (call $check (i32.const 0) ) (drop (i32.const 33) ) ) (call $check (i32.const 1) ) ) (block (drop (i32.const -66) ) (br $shape$0$continue) ) ) ) (func $split (local $0 i32) (call $check (i32.const 0) ) (if (i32.const 55) (block (call $check (i32.const 1) ) ) (block (call $check (i32.const 2) ) ) ) ) (func $split-plus-code (local $0 i32) (call $check (i32.const 0) ) (if (i32.const 55) (block (drop (i32.const 10) ) (block (call $check (i32.const 1) ) ) ) (block (drop (i32.const 20) ) (block (call $check (i32.const 2) ) ) ) ) ) (func $if (local $0 i32) (block $block$3$break (call $check (i32.const 0) ) (if (i32.const 55) (block (call $check (i32.const 1) ) (block (br $block$3$break) ) ) (br $block$3$break) ) ) (block (call $check (i32.const 2) ) ) ) (func $if-plus-code (local $0 i32) (block $block$3$break (call $check (i32.const 0) ) (if (i32.const 55) (block (drop (i32.const -1) ) (block (call $check (i32.const 1) ) (block (drop (i32.const -3) ) (br $block$3$break) ) ) ) (block (drop (i32.const -2) ) (br $block$3$break) ) ) ) (block (call $check (i32.const 2) ) ) ) (func $if-else (local $0 i32) (block $block$4$break (call $check (i32.const 0) ) (if (i32.const 55) (block (call $check (i32.const 1) ) (block (br $block$4$break) ) ) (block (call $check (i32.const 2) ) (block (br $block$4$break) ) ) ) ) (block (call $check (i32.const 3) ) ) ) (func $loop-tail (local $0 i32) (block $block$3$break (loop $shape$0$continue (block (call $check (i32.const 0) ) (call $check (i32.const 1) ) ) (if (i32.const 10) (br $shape$0$continue) (br $block$3$break) ) ) ) (block (call $check (i32.const 2) ) ) ) (func $nontrivial-loop-plus-phi-to-head (local $0 i32) (block $block$2$break (call $check (i32.const 0) ) (block (drop (i32.const 10) ) (br $block$2$break) ) ) (block (block $block$7$break (block $block$4$break (loop $shape$1$continue (block $block$3$break (call $check (i32.const 1) ) (if (i32.const -2) (br $block$3$break) (block (drop (i32.const 20) ) (br $block$7$break) ) ) ) (block (call $check (i32.const 2) ) (if (i32.const -6) (br $block$4$break) (block (drop (i32.const 30) ) (br $shape$1$continue) ) ) ) ) ) (block (block $block$6$break (call $check (i32.const 3) ) (if (i32.const -10) (block (call $check (i32.const 4) ) (block (br $block$6$break) ) ) (br $block$6$break) ) ) (block (call $check (i32.const 5) ) (block (drop (i32.const 40) ) (br $block$7$break) ) ) ) ) (block (call $check (i32.const 6) ) ) ) ) (func $switch (local $0 i32) (call $check (i32.const 0) ) (block $switch$1$leave (block $switch$1$default (block $switch$1$case$3 (block $switch$1$case$2 (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default (i32.const -99) ) ) (block (block (call $check (i32.const 1) ) ) ) (br $switch$1$leave) ) (block (drop (i32.const 55) ) (block (call $check (i32.const 2) ) ) ) (br $switch$1$leave) ) (block (block (call $check (i32.const 3) ) ) ) (br $switch$1$leave) ) ) (func $duffs-device (local $0 i32) (local $1 i32) (local $2 i64) (local $3 i32) (local $4 f32) (local $5 f64) (local $6 i32) (block (block $block$3$break (block $block$2$break (call $check (i32.const 0) ) (if (i32.const 10) (block (local.set $3 (i32.const 2) ) (br $block$2$break) ) (block (local.set $3 (i32.const 3) ) (br $block$3$break) ) ) ) ) ) (loop $shape$1$continue (if (i32.eq (local.get $3) (i32.const 2) ) (block (local.set $3 (i32.const 0) ) (call $check (i32.const 1) ) (block (local.set $3 (i32.const 3) ) (br $shape$1$continue) ) ) (if (i32.eq (local.get $3) (i32.const 3) ) (block (local.set $3 (i32.const 0) ) (call $check (i32.const 2) ) (block (local.set $3 (i32.const 2) ) (br $shape$1$continue) ) ) ) ) ) ) (func $return (result i32) (local $0 i32) (block (call $check (i32.const 42) ) (return (i32.const 1337) ) ) ) ) optimized: (module ) module loaded from binary form: (module (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (global $a-global i32 (i32.const 3)) (tag $tag$0 (param i32 i32)) (func $adder (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) (module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "spectest" "print" (func $print-i32 (param i32))) (start $starter) (func $starter (call $print-i32 (i32.const 1234) ) ) ) 1234 : i32 (module (type $none_=>_none (func)) (func $func (local $0 i32) (local.set $0 (i64.const 1234) ) ) ) [wasm-validator error in function func] local.set's value type must be correct, on (local.set $0 (i64.const 1234) ) validation: 0 test_parsing text: (module (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (global $a-global i32 (i32.const 3)) (tag $a-tag (param i32)) (func $adder (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) module loaded from text form: (module (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (global $a-global i32 (i32.const 3)) (tag $a-tag (param i32)) (func $ADD_ER (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) sizeof Literal: 24 (module (type $none_=>_none (func)) (global $a-global i32 (i32.const 125)) (global $a-global2 i32 (i32.const 2)) (global $a-global3 i32 (i32.const 3)) (memory $0 1 256) (data (i32.const 10) "hello, world") (data (global.get $a-global) "segment data 2") (table $t0 1 funcref) (elem $e0 (i32.const 0) $fn0 $fn1 $fn2) (export "export0" (func $fn0)) (export "export1" (func $fn1)) (export "export2" (func $fn2)) (export "mem" (memory $0)) (func $fn0 (nop) ) (func $fn1 (nop) ) (func $fn2 (nop) ) ) getExpressionInfo(memory.grow)={"id":21,"type":2,"delta":1} getExpressionInfo(switch)={"id":5,"type":1,"names":["label"],"defaultName":"label","condition":0,"value":0} binaryen-version_108/test/binaryen.js/low-memory-unused.js000066400000000000000000000014611423707623100241160ustar00rootroot00000000000000var wast = ` (module (memory $0 1) (export "test" (func $test)) (func $test (param $0 i32) (result i32) (i32.load (i32.add (local.get $0) (i32.const 128) ) ) ) ) `; console.log("=== input wast ===" + wast); var module = binaryen.parseText(wast); console.log("=== unoptimized ==="); assert(module.validate()); console.log(module.emitText()); console.log("=== optimized, lowMemoryUnused=" + binaryen.getLowMemoryUnused() + " ==="); module.optimize(); assert(module.validate()); console.log(module.emitText()); binaryen.setLowMemoryUnused(true); assert(binaryen.getLowMemoryUnused()); console.log(); console.log("=== optimized, lowMemoryUnused=" + binaryen.getLowMemoryUnused() + " ==="); module.optimize(); assert(module.validate()); console.log(module.emitText()); module.dispose(); binaryen-version_108/test/binaryen.js/low-memory-unused.js.txt000066400000000000000000000017261423707623100247400ustar00rootroot00000000000000=== input wast === (module (memory $0 1) (export "test" (func $test)) (func $test (param $0 i32) (result i32) (i32.load (i32.add (local.get $0) (i32.const 128) ) ) ) ) === unoptimized === (module (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 1) (export "test" (func $test)) (func $test (param $0 i32) (result i32) (i32.load (i32.add (local.get $0) (i32.const 128) ) ) ) ) === optimized, lowMemoryUnused=false === (module (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 1) (export "test" (func $test)) (func $test (; has Stack IR ;) (param $0 i32) (result i32) (i32.load (i32.add (local.get $0) (i32.const 128) ) ) ) ) === optimized, lowMemoryUnused=true === (module (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 1) (export "test" (func $test)) (func $test (; has Stack IR ;) (param $0 i32) (result i32) (i32.load offset=128 (local.get $0) ) ) ) binaryen-version_108/test/binaryen.js/optimize-levels.js000066400000000000000000000026141423707623100236370ustar00rootroot00000000000000var wast = ` (module (type $i (func (param i32) (result i32))) (memory $0 0) (export "test" (func $test)) (func $test (; 0 ;) (type $i) (param $0 i32) (result i32) (block (result i32) (if (result i32) (local.get $0) (local.get $0) (i32.const 0) ) ) ) ) `; console.log("=== input wast ===" + wast); function printOptions() { console.log("optimizeLevel=" + binaryen.getOptimizeLevel()); console.log("shrinkLevel=" + binaryen.getShrinkLevel()); } // Use defaults (should be equal to -Os below) var module = binaryen.parseText(wast); console.log("=== unoptimized ==="); assert(module.validate()); console.log(module.emitText()); module.optimize(); console.log("=== optimized using defaults ==="); printOptions(); assert(module.validate()); console.log(module.emitText()); module.dispose(); // Use -O0 (should remove the block) module = binaryen.parseText(wast); binaryen.setOptimizeLevel(0); binaryen.setShrinkLevel(0); module.optimize(); console.log("=== optimized with -O0 ==="); printOptions(); assert(module.validate()); console.log(module.emitText()); module.dispose(); // Use -Os (should remove the block and convert to a select) module = binaryen.parseText(wast); binaryen.setOptimizeLevel(2); binaryen.setShrinkLevel(1); module.optimize(); console.log("=== optimized with -Os ==="); printOptions(); assert(module.validate()); console.log(module.emitText()); module.dispose(); binaryen-version_108/test/binaryen.js/optimize-levels.js.txt000066400000000000000000000022761423707623100244610ustar00rootroot00000000000000=== input wast === (module (type $i (func (param i32) (result i32))) (memory $0 0) (export "test" (func $test)) (func $test (; 0 ;) (type $i) (param $0 i32) (result i32) (block (result i32) (if (result i32) (local.get $0) (local.get $0) (i32.const 0) ) ) ) ) === unoptimized === (module (type $i (func (param i32) (result i32))) (memory $0 0) (export "test" (func $test)) (func $test (param $0 i32) (result i32) (block $block (result i32) (if (result i32) (local.get $0) (local.get $0) (i32.const 0) ) ) ) ) === optimized using defaults === optimizeLevel=2 shrinkLevel=1 (module (type $i (func (param i32) (result i32))) (export "test" (func $test)) (func $test (; has Stack IR ;) (param $0 i32) (result i32) (local.get $0) ) ) === optimized with -O0 === optimizeLevel=0 shrinkLevel=0 (module (type $i (func (param i32) (result i32))) (export "test" (func $test)) (func $test (param $0 i32) (result i32) (local.get $0) ) ) === optimized with -Os === optimizeLevel=2 shrinkLevel=1 (module (type $i (func (param i32) (result i32))) (export "test" (func $test)) (func $test (; has Stack IR ;) (param $0 i32) (result i32) (local.get $0) ) ) binaryen-version_108/test/binaryen.js/pass-arguments.js000066400000000000000000000007041423707623100234560ustar00rootroot00000000000000assert(binaryen.getPassArgument("theKey") === null); binaryen.setPassArgument("theKey", "theValue"); assert(binaryen.getPassArgument("theKey") === "theValue"); binaryen.setPassArgument("theKey", null); assert(binaryen.getPassArgument("theKey") === null); binaryen.setPassArgument("theKey", "theValue2"); assert(binaryen.getPassArgument("theKey") === "theValue2"); binaryen.clearPassArguments(); assert(binaryen.getPassArgument("theKey") === null); binaryen-version_108/test/binaryen.js/pass-arguments.js.txt000066400000000000000000000000001423707623100242610ustar00rootroot00000000000000binaryen-version_108/test/binaryen.js/reloc.js000066400000000000000000000013301423707623100216050ustar00rootroot00000000000000var module = new binaryen.Module(); // memory with offset module.addGlobalImport("memory_base", "env", "memory_base", binaryen.i32, false); module.setMemory(1, -1, null, [ { offset: module.global.get("memory_base", binaryen.i32), data: "data data".split('').map(function(x) { return x.charCodeAt(0) }) } ]); // table with offset var func = module.addFunction("func", binaryen.none, binaryen.none, [], module.nop()); module.addGlobalImport("table_base", "env", "table_base", binaryen.i32, false); module.addTable("0", 1, -1, binaryen.funcref); module.addActiveElementSegment("0", "0", [ "func", "func" ], module.global.get("table_base", binaryen.i32)); assert(module.validate()); console.log(module.emitText()); binaryen-version_108/test/binaryen.js/reloc.js.txt000066400000000000000000000004611423707623100224270ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "memory_base" (global $memory_base i32)) (import "env" "table_base" (global $table_base i32)) (memory $0 1) (data (global.get $memory_base) "data data") (table $0 1 funcref) (elem $0 (global.get $table_base) $func $func) (func $func (nop) ) ) binaryen-version_108/test/binaryen.js/sideffects.js000066400000000000000000000063751423707623100226360ustar00rootroot00000000000000console.log("SideEffects.None=" + binaryen.SideEffects.None); console.log("SideEffects.Branches=" + binaryen.SideEffects.Branches); console.log("SideEffects.Calls=" + binaryen.SideEffects.Calls); console.log("SideEffects.ReadsLocal=" + binaryen.SideEffects.ReadsLocal); console.log("SideEffects.WritesLocal=" + binaryen.SideEffects.WritesLocal); console.log("SideEffects.ReadsGlobal=" + binaryen.SideEffects.ReadsGlobal); console.log("SideEffects.WritesGlobal=" + binaryen.SideEffects.WritesGlobal); console.log("SideEffects.ReadsMemory=" + binaryen.SideEffects.ReadsMemory); console.log("SideEffects.WritesMemory=" + binaryen.SideEffects.WritesMemory); console.log("SideEffects.ReadsTable=" + binaryen.SideEffects.ReadsTable); console.log("SideEffects.WritesTable=" + binaryen.SideEffects.WritesTable); console.log("SideEffects.ImplicitTrap=" + binaryen.SideEffects.ImplicitTrap); console.log("SideEffects.IsAtomic=" + binaryen.SideEffects.IsAtomic); console.log("SideEffects.Throws=" + binaryen.SideEffects.Throws); console.log("SideEffects.DanglingPop=" + binaryen.SideEffects.DanglingPop); console.log("SideEffects.TrapsNeverHappen=" + binaryen.SideEffects.TrapsNeverHappen); console.log("SideEffects.Any=" + binaryen.SideEffects.Any); var module = new binaryen.Module(); assert( binaryen.getSideEffects( module.i32.const(1), module ) == binaryen.SideEffects.None ); assert( binaryen.getSideEffects( module.br("test"), module ) == binaryen.SideEffects.Branches ); assert( binaryen.getSideEffects( module.call("test", [], binaryen.i32), module ) == binaryen.SideEffects.Calls ); assert( binaryen.getSideEffects( module.local.get("test", binaryen.i32), module ) == binaryen.SideEffects.ReadsLocal ); assert( binaryen.getSideEffects( module.local.set("test", module.i32.const(1) ), module ) == binaryen.SideEffects.WritesLocal ); // Add a global for the test, as computing side effects will look for it. module.addGlobal('test', binaryen.i32, true, module.i32.const(42)); assert( binaryen.getSideEffects( module.global.get("test", binaryen.i32), module ) == binaryen.SideEffects.ReadsGlobal ); assert( binaryen.getSideEffects( module.global.set("test", module.i32.const(1)), module ) == binaryen.SideEffects.WritesGlobal ); assert( binaryen.getSideEffects( module.i32.load(0, 0, module.i32.const(0) ), module ) == binaryen.SideEffects.ReadsMemory | binaryen.SideEffects.ImplicitTrap ); assert( binaryen.getSideEffects( module.i32.store(0, 0, module.i32.const(0), module.i32.const(1) ), module ) == binaryen.SideEffects.WritesMemory | binaryen.SideEffects.ImplicitTrap ); assert( binaryen.getSideEffects( module.i32.div_s( module.i32.const(1), module.i32.const(0) ), module ) == binaryen.SideEffects.ImplicitTrap ); // If exception handling feature is enabled, calls can throw module.setFeatures(binaryen.Features.All); assert( binaryen.getSideEffects( module.call("test", [], binaryen.i32), module ) == binaryen.SideEffects.Calls | binaryen.SideEffects.Throws ); assert( binaryen.getSideEffects( module.drop(module.i32.pop()), module ) == binaryen.SideEffects.DanglingPop ); binaryen-version_108/test/binaryen.js/sideffects.js.txt000066400000000000000000000006751423707623100234510ustar00rootroot00000000000000SideEffects.None=0 SideEffects.Branches=1 SideEffects.Calls=2 SideEffects.ReadsLocal=4 SideEffects.WritesLocal=8 SideEffects.ReadsGlobal=16 SideEffects.WritesGlobal=32 SideEffects.ReadsMemory=64 SideEffects.WritesMemory=128 SideEffects.ReadsTable=256 SideEffects.WritesTable=512 SideEffects.ImplicitTrap=1024 SideEffects.IsAtomic=2048 SideEffects.Throws=4096 SideEffects.DanglingPop=8192 SideEffects.TrapsNeverHappen=16384 SideEffects.Any=32767 binaryen-version_108/test/binaryen.js/sieve.js000066400000000000000000000040621423707623100216210ustar00rootroot00000000000000// Create a module to work on var module = new binaryen.Module(); // Set a memory of initially one page, maximum 100 pages module.setMemory(1, 100); var body = module.block( null, [ // if the current memory size is too small, grow it module.if( module.i32.lt_u( module.i32.mul( module.memory.size(), module.i32.const(65536) ), module.local.get(0, binaryen.i32) ), module.drop( module.memory.grow( module.i32.sub( module.i32.div_u( module.i32.add( module.local.get(0, binaryen.i32), module.i32.const(65535) ), module.i32.const(65536) ), module.memory.size() ) ) ) ), // first, clear memory module.local.set(1, module.i32.const(0)), module.loop('clear', module.block(null, [ module.i32.store8(0, 1, module.local.get(1, binaryen.i32), module.i32.const(0) ), module.local.set(1, module.i32.add( module.local.get(1, binaryen.i32), module.i32.const(1) )), module.br_if('clear', module.i32.eq( module.local.get(1, binaryen.i32), module.local.get(0, binaryen.i32) )) ])), // perform the sieve TODO // calculate how many primes there are module.return(module.local.get(0, binaryen.i32)) ], binaryen.none ); // Create the add function // Note: no additional local variables (that's the []) module.addFunction('sieve', binaryen.i32, binaryen.i32, [binaryen.i32], body); // Export the function, so we can call it later (for simplicity we // export it as the same name as it has internally) module.addFunctionExport('sieve', 'sieve'); if (!module.validate()) throw 'did not validate :('; // Print out the text console.log(module.emitText()); // Optimize the module! This removes the 'return', since the // output of the add can just fall through module.optimize(); // Print out the optimized module's text console.log('optimized:\n\n' + module.emitText()); binaryen-version_108/test/binaryen.js/sieve.js.txt000066400000000000000000000030131423707623100224320ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 1 100) (export "sieve" (func $sieve)) (func $sieve (param $0 i32) (result i32) (local $1 i32) (if (i32.lt_u (i32.mul (memory.size) (i32.const 65536) ) (local.get $0) ) (drop (memory.grow (i32.sub (i32.div_u (i32.add (local.get $0) (i32.const 65535) ) (i32.const 65536) ) (memory.size) ) ) ) ) (local.set $1 (i32.const 0) ) (loop $clear (i32.store8 (local.get $1) (i32.const 0) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (br_if $clear (i32.eq (local.get $1) (local.get $0) ) ) ) (return (local.get $0) ) ) ) optimized: (module (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 1 100) (export "sieve" (func $sieve)) (func $sieve (; has Stack IR ;) (param $0 i32) (result i32) (local $1 i32) (if (i32.lt_u (i32.shl (memory.size) (i32.const 16) ) (local.get $0) ) (drop (memory.grow (i32.sub (i32.shr_u (i32.add (local.get $0) (i32.const 65535) ) (i32.const 16) ) (memory.size) ) ) ) ) (loop $clear (i32.store8 (local.get $1) (i32.const 0) ) (br_if $clear (i32.eq (local.tee $1 (i32.add (local.get $1) (i32.const 1) ) ) (local.get $0) ) ) ) (local.get $0) ) ) binaryen-version_108/test/binaryen.js/simd.js000066400000000000000000000003701423707623100214400ustar00rootroot00000000000000var module = new binaryen.Module(); var expr = module.v128.const([1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0]); var info = binaryen.getExpressionInfo(expr); console.log("v128.const i8x16 0x" + info.value.map(b => b.toString(16)).join(" 0x")); binaryen-version_108/test/binaryen.js/simd.js.txt000066400000000000000000000001211423707623100222500ustar00rootroot00000000000000v128.const i8x16 0x1 0x0 0x0 0x0 0x2 0x0 0x0 0x0 0x3 0x0 0x0 0x0 0x4 0x0 0x0 0x0 binaryen-version_108/test/binaryen.js/sourcemap.js000066400000000000000000000017731423707623100225120ustar00rootroot00000000000000var module = new binaryen.Module(); var fileIndex = module.addDebugInfoFileName("module.c"); console.log(module.getDebugInfoFileName(fileIndex)); console.log(); var expr = module.i32.const(1); var body = module.block("", [ expr ], binaryen.i32); var func = module.addFunction("main", binaryen.none, binaryen.i32, [], body); module.setDebugLocation(func, expr, fileIndex, 1, 2); module.setDebugLocation(func, body, fileIndex, 0, 3); var output = module.emitBinary("module.wasm.map"); assert(module.validate()); function dumpBinary(buffer) { var hex = [], o, b, h; for (var i = 0; i < buffer.length; ++i) { o = i.toString(16); while (o.length < 3) o = "0" + o; if ((i & 15) === 0) hex.push((i ? "\n" : "") + o + ":"); if ((b = buffer[i]) >= 0x21 && b <= 0x7e) h = String.fromCharCode(b) + ' '; else if ((h = b.toString(16)).length < 2) h = "0" + h; hex.push(h); } console.log(hex.join(" ")); } dumpBinary(output.binary); console.log(); console.log(output.sourceMap); binaryen-version_108/test/binaryen.js/sourcemap.js.txt000066400000000000000000000004371423707623100233240ustar00rootroot00000000000000module.c 000: 00 a s m 01 00 00 00 01 05 01 ` 00 01 7f 03 010: 02 01 00 0a 06 01 04 00 A 01 0b 00 ! 10 s o 020: u r c e M a p p i n g U R L 0f m 030: o d u l e . w a s m . m a p {"version":3,"sources":["module.c"],"names":[],"mappings":"wBAAE"} binaryen-version_108/test/binaryen.js/stackir.js000066400000000000000000000011271423707623100221450ustar00rootroot00000000000000var wast = ` (module (type $i (func (param i32) (result i32))) (memory $0 0) (export "test" (func $test)) (func $test (; 0 ;) (type $i) (param $0 i32) (result i32) (block (result i32) (block (result i32) (if (result i32) (local.get $0) (local.get $0) (i32.const 0) ) ) ) ) ) `; console.log("=== input wast ===" + wast); var module = binaryen.parseText(wast); assert(module.validate()); console.log("=== default ==="); console.log(module.emitStackIR()); console.log("=== optimize ==="); // should omit the second block console.log(module.emitStackIR(true)); binaryen-version_108/test/binaryen.js/stackir.js.txt000066400000000000000000000015021423707623100227600ustar00rootroot00000000000000=== input wast === (module (type $i (func (param i32) (result i32))) (memory $0 0) (export "test" (func $test)) (func $test (; 0 ;) (type $i) (param $0 i32) (result i32) (block (result i32) (block (result i32) (if (result i32) (local.get $0) (local.get $0) (i32.const 0) ) ) ) ) ) === default === (module (type $i (func (param i32) (result i32))) (memory $0 0) (export "test" (func $test)) (func $test (param $0 i32) (result i32) block $block0 (result i32) local.get $0 if (result i32) local.get $0 else i32.const 0 end end ) ) === optimize === (module (type $i (func (param i32) (result i32))) (memory $0 0) (export "test" (func $test)) (func $test (param $0 i32) (result i32) local.get $0 if (result i32) local.get $0 else i32.const 0 end ) ) binaryen-version_108/test/binaryen.js/tag.js000066400000000000000000000016251423707623100212630ustar00rootroot00000000000000function cleanInfo(info) { var ret = {}; for (var x in info) { ret[x] = info[x]; } return ret; } var module = new binaryen.Module(); module.setFeatures(binaryen.Features.ReferenceTypes | binaryen.Features.ExceptionHandling | binaryen.Features.Multivalue); var pairType = binaryen.createType([binaryen.i32, binaryen.f32]); var tag = module.addTag("a-tag", binaryen.i32, binaryen.none); console.log("GetTag is equal: " + (tag === module.getTag("a-tag"))); var tagInfo = binaryen.getTagInfo(tag); console.log("getTagInfo=" + JSON.stringify(cleanInfo(tagInfo))); module.addTagExport("a-tag", "a-tag-exp"); module.addTagImport("a-tag-imp", "module", "base", pairType, binaryen.none); assert(module.validate()); console.log(module.emitText()); module.removeExport("a-tag-exp"); module.removeTag("a-tag"); assert(module.validate()); console.log(module.emitText()); binaryen-version_108/test/binaryen.js/tag.js.txt000066400000000000000000000006601423707623100220770ustar00rootroot00000000000000GetTag is equal: true getTagInfo={"name":"a-tag","module":"","base":"","params":2,"results":0} (module (type $i32_=>_none (func (param i32))) (type $i32_f32_=>_none (func (param i32 f32))) (import "module" "base" (tag $a-tag-imp (param i32 f32))) (tag $a-tag (param i32)) (export "a-tag-exp" (tag $a-tag)) ) (module (type $i32_f32_=>_none (func (param i32 f32))) (import "module" "base" (tag $a-tag-imp (param i32 f32))) ) binaryen-version_108/test/binaryen.js/tail_calls.js000066400000000000000000000012521423707623100226130ustar00rootroot00000000000000var module = new binaryen.Module(); module.setFeatures(binaryen.Features.TailCall); module.addTableImport("0", "env", "table"); var foo = module.addFunction( "foo", binaryen.none, binaryen.none, [], module.return_call("foo", [], binaryen.none, binaryen.none) ); var bar = module.addFunction( "bar", binaryen.none, binaryen.none, [], module.return_call_indirect( "0", module.i32.const(0), [], binaryen.none, binaryen.none ) ); assert(module.validate()); console.log( binaryen.getExpressionInfo(binaryen.getFunctionInfo(foo).body).isReturn ); console.log( binaryen.getExpressionInfo(binaryen.getFunctionInfo(bar).body).isReturn ); binaryen-version_108/test/binaryen.js/tail_calls.js.txt000066400000000000000000000000121423707623100234220ustar00rootroot00000000000000true true binaryen-version_108/test/binaryen.js/validation_errors.js000066400000000000000000000011161423707623100242310ustar00rootroot00000000000000(function() { var mod = new binaryen.Module(); var func = mod.addFunction("test", binaryen.none, binaryen.none, [], mod.block("", [ mod.drop( mod.global.get("missing", binaryen.i32) ) ]) ); mod.addExport("test", func); console.log(mod.validate()) })(); (function() { var mod = new binaryen.Module(); var func = mod.addFunction("test", binaryen.none, binaryen.none, [], mod.block("", [ mod.drop( mod.local.get(0, binaryen.i32) ) ]) ); mod.addFunctionExport("test", "test", func); console.log(mod.validate()) })(); binaryen-version_108/test/binaryen.js/validation_errors.js.txt000066400000000000000000000003521423707623100250500ustar00rootroot00000000000000[wasm-validator error in function test] unexpected false: global.get name must be valid, on (global.get $missing) 0 [wasm-validator error in function test] unexpected false: local.get index must be small enough, on (local.get $0) 0 binaryen-version_108/test/binaryen.js/zero-filled-memory.js000066400000000000000000000014101423707623100242220ustar00rootroot00000000000000var wast = String.raw` (module (import "env" "memory" (memory $0 1)) (data (i32.const 1024) "\00\00\00\00") (export "memory" (memory $0)) ) `; console.log("=== input wast ===" + wast); var module = binaryen.parseText(wast); console.log("=== unoptimized ==="); assert(module.validate()); console.log(module.emitText()); console.log("=== optimized, zeroFilledMemory=" + binaryen.getZeroFilledMemory() + " ==="); module.optimize(); assert(module.validate()); console.log(module.emitText()); binaryen.setZeroFilledMemory(true); assert(binaryen.getZeroFilledMemory()); console.log(); console.log("=== optimized, zeroFilledMemory=" + binaryen.getZeroFilledMemory() + " ==="); module.optimize(); assert(module.validate()); console.log(module.emitText()); module.dispose(); binaryen-version_108/test/binaryen.js/zero-filled-memory.js.txt000066400000000000000000000010671423707623100250500ustar00rootroot00000000000000=== input wast === (module (import "env" "memory" (memory $0 1)) (data (i32.const 1024) "\00\00\00\00") (export "memory" (memory $0)) ) === unoptimized === (module (import "env" "memory" (memory $0 1)) (data (i32.const 1024) "\00\00\00\00") (export "memory" (memory $0)) ) === optimized, zeroFilledMemory=false === (module (import "env" "memory" (memory $0 1)) (data (i32.const 1024) "\00\00\00\00") (export "memory" (memory $0)) ) === optimized, zeroFilledMemory=true === (module (import "env" "memory" (memory $0 1)) (export "memory" (memory $0)) ) binaryen-version_108/test/br_to_exit.wasm000066400000000000000000000000321423707623100207460ustar00rootroot00000000000000asm`  binaryen-version_108/test/br_to_exit.wasm.fromBinary000066400000000000000000000001341423707623100230600ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $0 (block $label$0 (br $label$0) ) ) ) binaryen-version_108/test/br_to_try.wasm000066400000000000000000000000511423707623100206140ustar00rootroot00000000000000asm``   @  binaryen-version_108/test/br_to_try.wasm.fromBinary000066400000000000000000000003711423707623100227300ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (tag $tag$0 (param i32)) (func $0 (try $label$3 (do (block $label$1 (br $label$1) ) ) (catch $tag$0 (drop (pop i32) ) ) ) ) ) binaryen-version_108/test/break-to-return.wasm000066400000000000000000000000631423707623100216350ustar00rootroot00000000000000asm`€€add  j binaryen-version_108/test/break-to-return.wasm.fromBinary000066400000000000000000000004411423707623100237440ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (memory $0 256 256) (export "add" (func $0)) (func $0 (param $0 i32) (param $1 i32) (result i32) (block $label$0 (result i32) (br $label$0 (i32.add (local.get $0) (local.get $1) ) ) ) ) ) binaryen-version_108/test/break-within-catch.wasm000066400000000000000000000000521423707623100222560ustar00rootroot00000000000000asm``   @ binaryen-version_108/test/break-within-catch.wasm.fromBinary000066400000000000000000000004111423707623100243640ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (tag $tag$0 (param i32)) (func $0 (block $label$2 (try $label$3 (do (nop) ) (catch $tag$0 (drop (pop i32) ) (br $label$2) ) ) ) ) ) binaryen-version_108/test/calls.cpp000066400000000000000000000006421423707623100175300ustar00rootroot00000000000000#include extern "C" { int inner(int x) { return x * x + 2; } int EMSCRIPTEN_KEEPALIVE simple(int x) { return inner(x); } int EMSCRIPTEN_KEEPALIVE fibo(int x) { if (x == 0 || x == 1) return 1; return fibo(x - 1) + fibo(x - 2); } int EMSCRIPTEN_KEEPALIVE run_script() { emscripten_run_script("Module.print('hello from called script')"); return emscripten_run_script_int("1+2+3+4-1"); } } binaryen-version_108/test/calls.emcc000066400000000000000000000000271423707623100176520ustar00rootroot00000000000000["-s", "ASSERTIONS=0"] binaryen-version_108/test/calls.post.js000066400000000000000000000006441423707623100203500ustar00rootroot00000000000000 function test(name) { Module.print(name); function doTest(x) { Module.print(' ' + [x] + ' ==> ' + Module['_' + name](x)); } doTest(1); doTest(2); doTest(3); doTest(4); doTest(7); } test('simple'); test('fibo'); Module.print('run_script'); Module.print(Module['_run_script']()); Module.print('too many/few arguments'); Module.print(Module['_simple']()); Module.print(Module['_simple'](10, 20)); binaryen-version_108/test/calls.txt000066400000000000000000000002671423707623100175700ustar00rootroot00000000000000simple 1 ==> 3 2 ==> 6 3 ==> 11 4 ==> 18 7 ==> 51 fibo 1 ==> 1 2 ==> 2 3 ==> 3 4 ==> 5 7 ==> 21 run_script hello from called script 9 too many/few arguments 2 102 binaryen-version_108/test/complexBinaryNames.wasm000066400000000000000000000001111423707623100224060ustar00rootroot00000000000000asm` $zoo (.bar)   name foo (.bar)1binaryen-version_108/test/complexBinaryNames.wasm.fromBinary000066400000000000000000000002261423707623100245240ustar00rootroot00000000000000(module (type $none_=>_none (func)) (export "$zoo (.bar)" (func $1)) (func $foo\20\28.bar\29 (nop) ) (func $1 (call $foo\20\28.bar\29) ) ) binaryen-version_108/test/complexTextNames.wast000066400000000000000000000001251423707623100221220ustar00rootroot00000000000000(module (func $foo\20\28.bar\29) (func "$zoo (.bar)" (call $foo\20\28.bar\29)) ) binaryen-version_108/test/complexTextNames.wast.from-wast000066400000000000000000000002251423707623100240410ustar00rootroot00000000000000(module (type $none_=>_none (func)) (export "$zoo (.bar)" (func $1)) (func $foo\20\28.bar\29 (nop) ) (func $1 (call $foo\20\28.bar\29) ) ) binaryen-version_108/test/complexTextNames.wast.fromBinary000066400000000000000000000002261423707623100242330ustar00rootroot00000000000000(module (type $none_=>_none (func)) (export "$zoo (.bar)" (func $1)) (func $foo\20\28.bar\29 (nop) ) (func $1 (call $foo\20\28.bar\29) ) ) binaryen-version_108/test/complexTextNames.wast.fromBinary.noDebugInfo000066400000000000000000000001701423707623100264270ustar00rootroot00000000000000(module (type $none_=>_none (func)) (export "$zoo (.bar)" (func $1)) (func $0 (nop) ) (func $1 (call $0) ) ) binaryen-version_108/test/consume-stacky.wasm000066400000000000000000000000501423707623100215550ustar00rootroot00000000000000asm`  AAA6 binaryen-version_108/test/consume-stacky.wasm.fromBinary000066400000000000000000000003311423707623100236660ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (memory $0 1 1) (func $0 (result i32) (local $0 i32) (local.set $0 (i32.const 1) ) (i32.store (i32.const 2) (i32.const 3) ) (local.get $0) ) ) binaryen-version_108/test/control_flow.cpp000066400000000000000000000041101423707623100211330ustar00rootroot00000000000000#include #include #include extern "C" { int EMSCRIPTEN_KEEPALIVE check_if(int x) { if (x < 10) x++; return x; } int EMSCRIPTEN_KEEPALIVE check_loop(int x) { while (x < 100) x *= 2; return x; } int EMSCRIPTEN_KEEPALIVE check_loop_break(int x) { while (x < 100) { x *= 2; if (x > 30) break; x++; } return x; } int EMSCRIPTEN_KEEPALIVE check_loop_continue(int x) { while (x < 100) { x *= 2; if (x > 30) continue; x++; } return x; } int EMSCRIPTEN_KEEPALIVE check_do_loop(int x) { do { x *= 2; if (x > 1000) break; x--; if (x > 30) continue; x++; } while (x < 100); return x; } int EMSCRIPTEN_KEEPALIVE check_do_once(int x) { do { x *= 2; if (x > 1000) break; x--; if (x > 30) continue; x++; } while (0); return x; } int EMSCRIPTEN_KEEPALIVE check_while_forever(int x) { while (1) { x *= 2; if (x > 1000) break; x--; if (x > 30) continue; x++; } return x; } int EMSCRIPTEN_KEEPALIVE check_switch(int x) { switch (x) { case 1: return 10; case 3: return 20; case 5: return 30; case 10: return 40; case 11: return 50; default: return 60; } return 70; } int EMSCRIPTEN_KEEPALIVE check_switch_nodefault(int x) { switch (x) { case 1: return 10; case 3: return 20; case 5: return 30; case 10: return 40; case 11: return 50; } return 70; } int EMSCRIPTEN_KEEPALIVE check_switch_rdefault(int x) { switch (x) { default: return -60; case 1: return 10; case 3: return 20; case 5: return 30; case 10: return 40; case 11: return 50; } return 70; } int EMSCRIPTEN_KEEPALIVE check_switch_fallthrough(int x) { switch (x) { case 1: return 10; case 2: case 3: x++; case 5: return x; case 10: return 40; case 11: return 50; default: return 60; } return 70; } } binaryen-version_108/test/control_flow.emcc000066400000000000000000000000271423707623100212630ustar00rootroot00000000000000["-s", "ASSERTIONS=0"] binaryen-version_108/test/control_flow.post.js000066400000000000000000000006771423707623100217670ustar00rootroot00000000000000 function test(name) { Module.print(name); function doTest(x) { Module.print(' ' + [x] + ' ==> ' + Module['_check_' + name](x)); } doTest(1); doTest(2); doTest(3); doTest(4); doTest(11); doTest(90); } test('if'); test('loop'); test('loop_break'); test('loop_continue'); test('do_loop'); test('do_once'); test('while_forever'); test('switch'); test('switch_nodefault'); test('switch_rdefault'); test('switch_fallthrough'); binaryen-version_108/test/control_flow.txt000066400000000000000000000015771423707623100212060ustar00rootroot00000000000000if 1 ==> 2 2 ==> 3 3 ==> 4 4 ==> 5 11 ==> 11 90 ==> 90 loop 1 ==> 128 2 ==> 128 3 ==> 192 4 ==> 128 11 ==> 176 90 ==> 180 loop_break 1 ==> 62 2 ==> 46 3 ==> 62 4 ==> 38 11 ==> 46 90 ==> 180 loop_continue 1 ==> 124 2 ==> 184 3 ==> 124 4 ==> 152 11 ==> 184 90 ==> 180 do_loop 1 ==> 121 2 ==> 121 3 ==> 185 4 ==> 121 11 ==> 169 90 ==> 179 do_once 1 ==> 2 2 ==> 4 3 ==> 6 4 ==> 8 11 ==> 22 90 ==> 179 while_forever 1 ==> 1922 2 ==> 1922 3 ==> 1474 4 ==> 1922 11 ==> 1346 90 ==> 1426 switch 1 ==> 10 2 ==> 60 3 ==> 20 4 ==> 60 11 ==> 50 90 ==> 60 switch_nodefault 1 ==> 10 2 ==> 70 3 ==> 20 4 ==> 70 11 ==> 50 90 ==> 70 switch_rdefault 1 ==> 10 2 ==> -60 3 ==> 20 4 ==> -60 11 ==> 50 90 ==> -60 switch_fallthrough 1 ==> 10 2 ==> 3 3 ==> 4 4 ==> 60 11 ==> 50 90 ==> 60 binaryen-version_108/test/crash/000077500000000000000000000000001423707623100170245ustar00rootroot00000000000000binaryen-version_108/test/crash/expression-past-end-of-input.wasm000066400000000000000000000012361423707623100253660ustar00rootroot00000000000000asm2 `}``~|`}~~|`}}~`~``}}`|| p6Aÿd A¨üÑ| ~B€€€€€€€€€ }C€Í |D à A 2func_0func_2_invokerhangLimitInitialized A  Ê "@#E@C|qÿ #Ak$ }CR *@#E@D`@ #Ak$ |Dð? &~}|@#E@  #Ak$ D úï@ 7CTA2ABÿÿB€|A€€€€xA¬C€VAKARBÈ B@ ~}|@#E@  #Ak$ @#E@B #Ak$ BšŒÁ£"@#E@C|qÿ #Ak$ @  E@@ E~ @@ E ! E@Aƒ@#E@€Ak$ Aÿÿ3 a| D A  binaryen-version_108/test/crash/outside.wasm000066400000000000000000000002671423707623100213760ustar00rootroot00000000000000asm`p€ €  A€€€€ memoryc A  Q I# #Ck"$#A"$ A6 ("# #Ck"$#Ak"$ A6A6 ($  ./czeerp.exeA binaryen-version_108/test/crash/use_var_outside_func.wasm000066400000000000000000000015471423707623100241370ustar00rootroot00000000000000asm  A (@  AAâþþrÿ€Ž žA@A A  A $@@@ AF  AF  AF @@@ AF  AF  +@@@ AF  AF  AF AF $@@@ AF  AF  AF $@@@ AF  AF  AF $@@@ AF  AF  AF $@@@ AF  AF  A F $@@@ '@@@A AF  AF  A F )@@@  AF  AF  AF AÐ 5@@@Aè AF  AF  AAF  AF AÐ +@@@A AF  AF  AF  AF AF 9@@@A AF A AF A AF  PF  AF  AF $@@@ AG  AF  AF $@@@ F  F  F $@@@]F AF AF $@@@ AF  AF  AF $@@@ AF  AF  AF 'è@AF AF AF 2@@@ AF  A AF AF  AF  binaryen-version_108/test/ctor-eval/000077500000000000000000000000001423707623100176205ustar00rootroot00000000000000binaryen-version_108/test/ctor-eval/bad-indirect-call.wast000066400000000000000000000006221423707623100237560ustar00rootroot00000000000000(module (type $v (func)) (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (table 1 1 funcref) (elem (i32.const 0) $call-indirect) (export "test1" $test1) (func $test1 (call_indirect (type $v) (i32.const 1)) ;; unsafe to call, out of range (i32.store8 (i32.const 20) (i32.const 120)) ) (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67)) ) ) binaryen-version_108/test/ctor-eval/bad-indirect-call.wast.ctors000066400000000000000000000000061423707623100251030ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/bad-indirect-call.wast.out000066400000000000000000000006121423707623100245630ustar00rootroot00000000000000(module (type $v (func)) (memory $0 256 256) (data (i32.const 10) "waka waka waka waka waka") (table $0 1 1 funcref) (elem (i32.const 0) $call-indirect) (export "test1" (func $test1)) (func $test1 (call_indirect $0 (type $v) (i32.const 1) ) (i32.store8 (i32.const 20) (i32.const 120) ) ) (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67) ) ) ) binaryen-version_108/test/ctor-eval/bad-indirect-call2.wast000066400000000000000000000006771423707623100240520ustar00rootroot00000000000000(module (type $v (func)) (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (import "env" "_abort" (func $_abort)) (table 2 2 funcref) (elem (i32.const 0) $_abort $call-indirect) (export "test1" $test1) (func $test1 (call_indirect (type $v) (i32.const 0)) ;; unsafe to call, imported (i32.store8 (i32.const 20) (i32.const 120)) ) (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67)) ) ) binaryen-version_108/test/ctor-eval/bad-indirect-call2.wast.ctors000066400000000000000000000000061423707623100251650ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/bad-indirect-call2.wast.out000066400000000000000000000006721423707623100246530ustar00rootroot00000000000000(module (type $v (func)) (import "env" "_abort" (func $_abort)) (memory $0 256 256) (data (i32.const 10) "waka waka waka waka waka") (table $0 2 2 funcref) (elem (i32.const 0) $_abort $call-indirect) (export "test1" (func $test1)) (func $test1 (call_indirect $0 (type $v) (i32.const 0) ) (i32.store8 (i32.const 20) (i32.const 120) ) ) (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67) ) ) ) binaryen-version_108/test/ctor-eval/bad-indirect-call3.wast000066400000000000000000000007041423707623100240420ustar00rootroot00000000000000(module (type $funcref_=>_none (func (param funcref))) (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (table funcref (elem $callee)) (export "sig_mismatch" (func $sig_mismatch)) (func $callee (param $0 externref) (i32.store8 (i32.const 40) (i32.const 67)) ) (func $sig_mismatch (call_indirect (type $funcref_=>_none) ;; unsafe to call, signature mismatch (ref.null func) (i32.const 0) ) ) ) binaryen-version_108/test/ctor-eval/bad-indirect-call3.wast.ctors000066400000000000000000000000151423707623100251660ustar00rootroot00000000000000sig_mismatch binaryen-version_108/test/ctor-eval/bad-indirect-call3.wast.out000066400000000000000000000007661423707623100246600ustar00rootroot00000000000000(module (type $anyref_=>_none (func (param anyref))) (type $none_=>_none (func)) (type $funcref_=>_none (func (param funcref))) (memory $0 256 256) (data (i32.const 10) "waka waka waka waka waka") (table $0 1 1 funcref) (elem (i32.const 0) $callee) (export "sig_mismatch" (func $sig_mismatch)) (func $callee (param $0 anyref) (i32.store8 (i32.const 40) (i32.const 67) ) ) (func $sig_mismatch (call_indirect $0 (type $funcref_=>_none) (ref.null func) (i32.const 0) ) ) ) binaryen-version_108/test/ctor-eval/basics-flatten.wast000066400000000000000000000023441423707623100234220ustar00rootroot00000000000000(module (type $v (func)) (memory 256 256) ;; test flattening of multiple segments (data (i32.const 10) "waka ") (data (i32.const 15) "waka") ;; skip a byte here (data (i32.const 20) "waka waka waka") (table 1 1 funcref) (elem (i32.const 0) $call-indirect) (export "test1" $test1) (export "test2" $test2) (export "test3" $test3) (func $test1 (drop (i32.const 0)) ;; no work at all, really (call $safe-to-call) ;; safe to call (call_indirect (type $v) (i32.const 0)) ;; safe to call ) (func $test2 (drop (i32.load (i32.const 12))) ;; a safe load (drop (i32.load16_s (i32.const 12))) (drop (i32.load8_s (i32.const 12))) (drop (i32.load16_u (i32.const 12))) (drop (i32.load8_u (i32.const 12))) ) (func $test3 (i32.store (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory (i32.store16 (i32.const 20) (i32.const 31353)) (i32.store8 (i32.const 23) (i32.const 120)) ) (func $safe-to-call (drop (i32.const 1)) (i32.store8 (i32.const 10) (i32.const 110)) ;; safe write too (lowest possible) (i32.store8 (i32.const 33) (i32.const 109)) ;; safe write too (highest possible) ) (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67)) ) ) binaryen-version_108/test/ctor-eval/basics-flatten.wast.ctors000066400000000000000000000000221423707623100245420ustar00rootroot00000000000000test1,test2,test3 binaryen-version_108/test/ctor-eval/basics-flatten.wast.out000066400000000000000000000003151423707623100242240ustar00rootroot00000000000000(module (type $v (func)) (memory $0 256 256) (data (i32.const 10) "nas\00\00\00aka\00yzkx waka wakm\00\00\00\00\00\00C") (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67) ) ) ) binaryen-version_108/test/ctor-eval/basics.wast000066400000000000000000000021611423707623100217640ustar00rootroot00000000000000(module (type $v (func)) (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (table 1 1 funcref) (elem (i32.const 0) $call-indirect) (export "test1" $test1) (export "test2" $test2) (export "test3" $test3) (func $test1 (drop (i32.const 0)) ;; no work at all, really (call $safe-to-call) ;; safe to call (call_indirect (type $v) (i32.const 0)) ;; safe to call ) (func $test2 (drop (i32.load (i32.const 12))) ;; a safe load (drop (i32.load16_s (i32.const 12))) (drop (i32.load8_s (i32.const 12))) (drop (i32.load16_u (i32.const 12))) (drop (i32.load8_u (i32.const 12))) ) (func $test3 (i32.store (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory (i32.store16 (i32.const 20) (i32.const 31353)) (i32.store8 (i32.const 23) (i32.const 120)) ) (func $safe-to-call (drop (i32.const 1)) (i32.store8 (i32.const 10) (i32.const 110)) ;; safe write too (lowest possible) (i32.store8 (i32.const 33) (i32.const 109)) ;; safe write too (highest possible) ) (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67)) ) ) binaryen-version_108/test/ctor-eval/basics.wast.ctors000066400000000000000000000000221423707623100231070ustar00rootroot00000000000000test1,test2,test3 binaryen-version_108/test/ctor-eval/basics.wast.out000066400000000000000000000003131423707623100225670ustar00rootroot00000000000000(module (type $v (func)) (memory $0 256 256) (data (i32.const 10) "nas\00\00\00aka yzkx waka wakm\00\00\00\00\00\00C") (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67) ) ) ) binaryen-version_108/test/ctor-eval/gc-2.wast000066400000000000000000000025661423707623100212610ustar00rootroot00000000000000(module (type $struct (struct_subtype (field i32) data)) (import "import" "import" (func $import (param anyref))) ;; This struct is created in an immutable global, but it has the wrong type. ;; We will create a new defining global for it that has the proper type, and ;; read from it here. (This is necessary as when the global is used elsewhere ;; we want to get the right type from the global.get.) (global $global1 (ref any) (struct.new $struct (i32.const 1337) ) ) ;; Test reordering of globals. This global will be written a value that is ;; actually defined after it. To handle that, we must create it earlier than ;; this global. (global $global2 (mut (ref null $struct)) (ref.null $struct) ) ;; This global is perfect to be a defining global (immutable, right type), but ;; because of an earlier use, we will end up defining it earlier on, and ;; reading it here. (global $global3 (ref $struct) (struct.new $struct (i32.const 9999) ) ) (func "test1" (global.set $global2 (global.get $global3) ) ) (func "keepalive" (result i32) (select (struct.get $struct 0 (ref.cast_static $struct (global.get $global1) ) ) (struct.get $struct 0 (global.get $global2) ) (struct.get $struct 0 (global.get $global3) ) ) ) ) binaryen-version_108/test/ctor-eval/gc-2.wast.ctors000066400000000000000000000000061423707623100223750ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/gc-2.wast.out000066400000000000000000000013411423707623100220550ustar00rootroot00000000000000(module (type $struct (struct (field i32))) (type $none_=>_i32 (func (result i32))) (global $ctor-eval$global (ref $struct) (struct.new $struct (i32.const 1337) )) (global $global1 (ref any) (global.get $ctor-eval$global)) (global $ctor-eval$global_0 (ref $struct) (struct.new $struct (i32.const 9999) )) (global $global2 (mut (ref null $struct)) (global.get $ctor-eval$global_0)) (global $global3 (ref $struct) (global.get $ctor-eval$global_0)) (export "keepalive" (func $1)) (func $1 (result i32) (select (struct.get $struct 0 (ref.cast_static $struct (global.get $global1) ) ) (struct.get $struct 0 (global.get $global2) ) (struct.get $struct 0 (global.get $global3) ) ) ) ) binaryen-version_108/test/ctor-eval/gc-array.wast000066400000000000000000000014661423707623100222340ustar00rootroot00000000000000(module (type $array (array (mut i32))) (import "import" "import" (func $import (param anyref))) ;; This global will remain as it is. (global $global1 (ref $array) (array.init_static $array (i32.const 10) (i32.const 20) (i32.const 30) (i32.const 40) ) ) (global $global2 (ref $array) (array.init_static $array (i32.const 42) ;; This location will be written with a new value, 1337 (i32.const 0) ) ) (func "test1" (array.set $array (global.get $global2) (i32.const 1) (i32.const 1337) ) ) (func "keepalive" (result i32) (i32.add (array.get $array (global.get $global1) (i32.const 0) ) (array.get $array (global.get $global2) (i32.const 0) ) ) ) ) binaryen-version_108/test/ctor-eval/gc-array.wast.ctors000066400000000000000000000000061423707623100233520ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/gc-array.wast.out000066400000000000000000000010131423707623100230260ustar00rootroot00000000000000(module (type $array (array (mut i32))) (type $none_=>_i32 (func (result i32))) (global $global1 (ref $array) (array.init_static $array (i32.const 10) (i32.const 20) (i32.const 30) (i32.const 40) )) (global $global2 (ref $array) (array.init_static $array (i32.const 42) (i32.const 1337) )) (export "keepalive" (func $1)) (func $1 (result i32) (i32.add (array.get $array (global.get $global1) (i32.const 0) ) (array.get $array (global.get $global2) (i32.const 0) ) ) ) ) binaryen-version_108/test/ctor-eval/gc.wast000066400000000000000000000034541423707623100211170ustar00rootroot00000000000000(module (type $struct (struct_subtype (field i32) data)) (import "import" "import" (func $import (param anyref))) ;; Create a GC object in a global. We can keep the struct.new here even after ;; evalling (we should not create an extra, unneeded global, and read from ;; that). (global $global1 (ref $struct) (struct.new $struct (i32.const 1337) ) ) ;; After evalling we should see this refer to a struct with contents 42, and ;; not 41, which is overridden, see "test1". We also should not see any code ;; that creates an object with 41, as that is no longer live. ;; ;; Note that we will not simply do a struct.new in this global, as it is ;; mutable, and we only use immutable globals as defining globals for values, ;; so a new (immutable) global will appear, and we will read from it. (global $global2 (mut (ref null $struct)) (ref.null $struct)) (func "test1" ;; Leave the first local as null, which we should handle properly (we will ;; end up emitting nothing and still using the default null value). (local $temp1 (ref null $struct)) (local $temp2 (ref null $struct)) (global.set $global2 (struct.new $struct (i32.const 41) ) ) (global.set $global2 (struct.new $struct (i32.const 42) ) ) ;; Write a value to this local. A struct with value 99 will be created in a ;; global, and referred to here. (local.set $temp2 (struct.new $struct (i32.const 99) ) ) ;; Stop evalling here at the import. (call $import (local.get $temp1)) (call $import (local.get $temp2)) ) (func "keepalive" (result i32) (i32.add (struct.get $struct 0 (global.get $global1) ) (struct.get $struct 0 (global.get $global2) ) ) ) ) binaryen-version_108/test/ctor-eval/gc.wast.ctors000066400000000000000000000000061423707623100222360ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/gc.wast.out000066400000000000000000000016471423707623100217270ustar00rootroot00000000000000(module (type $struct (struct (field i32))) (type $anyref_=>_none (func (param anyref))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (import "import" "import" (func $import (param anyref))) (global $global1 (ref $struct) (struct.new $struct (i32.const 1337) )) (global $ctor-eval$global (ref $struct) (struct.new $struct (i32.const 42) )) (global $global2 (mut (ref null $struct)) (global.get $ctor-eval$global)) (global $ctor-eval$global_0 (ref $struct) (struct.new $struct (i32.const 99) )) (export "test1" (func $0_0)) (export "keepalive" (func $1)) (func $1 (result i32) (i32.add (struct.get $struct 0 (global.get $global1) ) (struct.get $struct 0 (global.get $global2) ) ) ) (func $0_0 (local $0 (ref null $struct)) (local.set $0 (global.get $ctor-eval$global_0) ) (call $import (ref.null $struct) ) (call $import (local.get $0) ) ) ) binaryen-version_108/test/ctor-eval/global-get-init.wast000066400000000000000000000004421423707623100234760ustar00rootroot00000000000000(module (import "import" "global" (global $imported i32)) (func $test1 (export "test1") ;; This should be safe to eval in theory, but the imported global stops us, ;; so this function will not be optimized out. ;; TODO: perhaps if we never use that global that is ok? ) ) binaryen-version_108/test/ctor-eval/global-get-init.wast.ctors000066400000000000000000000000061423707623100246230ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/global-get-init.wast.out000066400000000000000000000001401423707623100242770ustar00rootroot00000000000000(module (type $none_=>_none (func)) (export "test1" (func $test1)) (func $test1 (nop) ) ) binaryen-version_108/test/ctor-eval/globals.wast000066400000000000000000000007001423707623100221400ustar00rootroot00000000000000(module (global $g1 (mut i32) (i32.const 10)) (global $g2 (mut i32) (i32.const 20)) (func $test1 (export "test1") (global.set $g1 (i32.const 30)) (global.set $g2 (i32.const 40)) (global.set $g1 (i32.const 50)) ;; this overrides the previous 30 ) (func $keepalive (export "keepalive") (result i32) ;; Keep the globals alive so we can see their values. (i32.add (global.get $g1) (global.get $g2) ) ) ) binaryen-version_108/test/ctor-eval/globals.wast.ctors000066400000000000000000000000061423707623100232700ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/globals.wast.out000066400000000000000000000004021423707623100227450ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (global $g1 (mut i32) (i32.const 50)) (global $g2 (mut i32) (i32.const 40)) (export "keepalive" (func $keepalive)) (func $keepalive (result i32) (i32.add (global.get $g1) (global.get $g2) ) ) ) binaryen-version_108/test/ctor-eval/ignore-external-input-gc.wast000066400000000000000000000013601423707623100253470ustar00rootroot00000000000000(module (global $global1 (mut i32) (i32.const 10)) (global $global2 (mut i32) (i32.const 20)) (func "test1" (param $any (ref null any)) ;; This is ok to call: when ignoring external input we assume 0 for the ;; parameters, and this parameter is nullable. (drop (local.get $any) ) (global.set $global1 (i32.const 11) ) ) (func "test2" (param $any (ref any)) ;; This is *not* ok to call: when ignoring external input we assume 0 for ;; the parameters, and this parameter is not nullable. (drop (local.get $any) ) (global.set $global2 (i32.const 22) ) ) (func "keepalive" (result i32) (i32.add (global.get $global1) (global.get $global2) ) ) ) binaryen-version_108/test/ctor-eval/ignore-external-input-gc.wast.ctors000066400000000000000000000000141423707623100264730ustar00rootroot00000000000000test1,test2 binaryen-version_108/test/ctor-eval/ignore-external-input-gc.wast.out000066400000000000000000000006461423707623100261630ustar00rootroot00000000000000(module (type $ref|any|_=>_none (func (param (ref any)))) (type $none_=>_i32 (func (result i32))) (global $global1 (mut i32) (i32.const 11)) (global $global2 (mut i32) (i32.const 20)) (export "test2" (func $1)) (export "keepalive" (func $2)) (func $1 (param $any (ref any)) (global.set $global2 (i32.const 22) ) ) (func $2 (result i32) (i32.add (global.get $global1) (global.get $global2) ) ) ) binaryen-version_108/test/ctor-eval/ignore-external-input.wast000066400000000000000000000042661423707623100247700ustar00rootroot00000000000000(module (import "wasi_snapshot_preview1" "environ_sizes_get" (func $wasi_environ_sizes_get (param i32 i32) (result i32))) (import "wasi_snapshot_preview1" "environ_get" (func $wasi_environ_get (param i32 i32) (result i32))) (import "wasi_snapshot_preview1" "args_sizes_get" (func $wasi_args_sizes_get (param i32 i32) (result i32))) (import "wasi_snapshot_preview1" "args_get" (func $wasi_args_get (param i32 i32) (result i32))) (import "wasi_snapshot_preview1" "something_else" (func $wasi_something_else (result i32))) (memory 256 256) (data (i32.const 0) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") ;; the final 4 'a's will remain (func "test1" ;; This is ok to call: when ignoring external input we assume there is no ;; environment to read. (i32.store (i32.const 0) ;; the result (0) will be written to address 0 (call $wasi_environ_sizes_get (i32.const 4) ;; count (0) will be written to address 4 (i32.const 0) ) ) (i32.store (i32.const 8) ;; the result (0) will be written to address 8 (call $wasi_environ_get (i32.const 0) (i32.const 0) ) ) ) (func "test2" ;; This is also ok to call: when ignoring external input we assume there are ;; not args passed to main. (i32.store (i32.const 12) ;; the result (0) will be written to address 12 (call $wasi_args_sizes_get (i32.const 16) ;; argc (0) will be written to address 16 (i32.const 0) ) ) (i32.store (i32.const 20) ;; the result (0) will be written to address 20 (call $wasi_args_get (i32.const 0) (i32.const 0) ) ) ) (func "test2b" (param $x i32) ;; This is also ok to call: when ignoring external input we assume the ;; args are zeros. (i32.store (i32.const 24) ;; the result (0) will be written to address 24 (local.get $x) ) ) (func "test3" ;; This is *not* ok to call, and we will *not* reach the final store after ;; this call. This function will not be evalled and will remain in the ;; output. (drop (call $wasi_something_else) ) (i32.store (i32.const 28) (i32.const 100) ) ) ) binaryen-version_108/test/ctor-eval/ignore-external-input.wast.ctors000066400000000000000000000000311423707623100261030ustar00rootroot00000000000000test1,test2,test2b,test3 binaryen-version_108/test/ctor-eval/ignore-external-input.wast.out000066400000000000000000000005521423707623100255700ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (import "wasi_snapshot_preview1" "something_else" (func $wasi_something_else (result i32))) (memory $0 256 256) (data (i32.const 28) "aaaa") (export "test3" (func $3)) (func $3 (drop (call $wasi_something_else) ) (i32.store (i32.const 28) (i32.const 100) ) ) ) binaryen-version_108/test/ctor-eval/imported-global-2.wast000066400000000000000000000007751423707623100237510ustar00rootroot00000000000000(module (memory 256 256) ;; imports must not be used (import "env" "imported" (global $imported i32)) (func "test1" (result i32) (local $temp i32) ;; this errors, and we never get to evalling the store after it (local.set $temp (global.get $imported) ) (i32.store8 (i32.const 13) (i32.const 115) ) (local.get $temp) ) (func "keepalive" (result i32) (drop (i32.load (i32.const 13) ) ) (global.get $imported) ) ) binaryen-version_108/test/ctor-eval/imported-global-2.wast.ctors000066400000000000000000000000061423707623100250650ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/imported-global-2.wast.out000066400000000000000000000007041423707623100245470ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (import "env" "imported" (global $imported i32)) (memory $0 256 256) (export "test1" (func $0)) (export "keepalive" (func $1)) (func $0 (result i32) (local $temp i32) (local.set $temp (global.get $imported) ) (i32.store8 (i32.const 13) (i32.const 115) ) (local.get $temp) ) (func $1 (result i32) (drop (i32.load (i32.const 13) ) ) (global.get $imported) ) ) binaryen-version_108/test/ctor-eval/imported-global.wast000066400000000000000000000005451423707623100236050ustar00rootroot00000000000000(module (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") ;; imports must not be used (import "env" "tempDoublePtr" (global $tempDoublePtr i32)) (export "test1" $test1) (global $mine (mut i32) (global.get $tempDoublePtr)) ;; BAD, if used (func $test1 (i32.store8 (i32.const 13) (i32.const 115)) ;; we never get here. ) ) binaryen-version_108/test/ctor-eval/imported-global.wast.ctors000066400000000000000000000000061423707623100247260ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/imported-global.wast.out000066400000000000000000000003261423707623100244100ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 256 256) (data (i32.const 10) "waka waka waka waka waka") (export "test1" (func $test1)) (func $test1 (i32.store8 (i32.const 13) (i32.const 115) ) ) ) binaryen-version_108/test/ctor-eval/indirect-call3.wast000066400000000000000000000006631423707623100233220ustar00rootroot00000000000000(module (type $v (func)) (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (import "env" "_abort" (func $_abort)) (table 2 2 funcref) (elem (i32.const 0) $_abort $call-indirect) (export "test1" $test1) (func $test1 (call_indirect (type $v) (i32.const 1)) ;; safe to call (i32.store8 (i32.const 20) (i32.const 120)) ) (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67)) ) ) binaryen-version_108/test/ctor-eval/indirect-call3.wast.ctors000066400000000000000000000000061423707623100244420ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/indirect-call3.wast.out000066400000000000000000000003551423707623100241260ustar00rootroot00000000000000(module (type $v (func)) (import "env" "_abort" (func $_abort)) (memory $0 256 256) (data (i32.const 10) "waka waka xaka waka waka\00\00\00\00\00\00C") (func $call-indirect (i32.store8 (i32.const 40) (i32.const 67) ) ) ) binaryen-version_108/test/ctor-eval/just_some.wast000066400000000000000000000010301423707623100225220ustar00rootroot00000000000000(module (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (export "test1" $test1) (export "test2" $test2) (export "test3" $test3) (func $test1 (i32.store8 (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory ) (func $test2 (unreachable) (i32.store8 (i32.const 13) (i32.const 114)) ;; a safe store, should alter memory, but we trapped already ) (func $test3 (i32.store8 (i32.const 13) (i32.const 113)) ;; a safe store, should alter memory, but we trapped already ) ) binaryen-version_108/test/ctor-eval/just_some.wast.ctors000066400000000000000000000000221423707623100236530ustar00rootroot00000000000000test1,test2,test3 binaryen-version_108/test/ctor-eval/just_some.wast.out000066400000000000000000000004271423707623100233410ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 256 256) (data (i32.const 10) "wasa waka waka waka waka") (export "test2" (func $test2)) (export "test3" (func $test3)) (func $test2 (unreachable) ) (func $test3 (i32.store8 (i32.const 13) (i32.const 113) ) ) ) binaryen-version_108/test/ctor-eval/memory-init.wast000066400000000000000000000010161423707623100227670ustar00rootroot00000000000000(module (memory $0 1) (data (i32.const 0) "__________") (data (i32.const 20) "__________") (func "test1" ;; A store that can be evalled. (i32.store8 (i32.const 4) (i32.const 100) ) ;; A memory init cannot be evalled since ctor-eval flattens memory segments ;; atm. We lose the identity of them as a result as they are all merged ;; into a single big segment. We could fix that eventually. (memory.init 1 (i32.const 0) (i32.const 0) (i32.const 1) ) ) ) binaryen-version_108/test/ctor-eval/memory-init.wast.ctors000066400000000000000000000000061423707623100241160ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/memory-init.wast.out000066400000000000000000000004441423707623100236010ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 1) (data (i32.const 0) "__________") (data (i32.const 20) "__________") (export "test1" (func $0)) (func $0 (i32.store8 (i32.const 4) (i32.const 100) ) (memory.init 1 (i32.const 0) (i32.const 0) (i32.const 1) ) ) ) binaryen-version_108/test/ctor-eval/overlapping-segments.wast000066400000000000000000000010601423707623100246660ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (table $0 46 funcref) (elem $0 (i32.const 9) $1) (elem $1 (i32.const 9) $0) (export "test1" (func $2)) (func $0 (result i32) (unreachable) ) (func $1 (result i32) (i32.const 65) ) (func $2 (drop (call_indirect (type $none_=>_i32) ;; Calling the item at index $9 should call $0, which appears in the ;; last of the overlapping segments. That function traps, which stops ;; us from evalling anything here. (i32.const 9) ) ) ) ) binaryen-version_108/test/ctor-eval/overlapping-segments.wast.ctors000066400000000000000000000000061423707623100260160ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/overlapping-segments.wast.out000066400000000000000000000005511423707623100255000ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (table $0 46 funcref) (elem $0 (i32.const 9) $1) (elem $1 (i32.const 9) $0) (export "test1" (func $2)) (func $0 (result i32) (unreachable) ) (func $1 (result i32) (i32.const 65) ) (func $2 (drop (call_indirect $0 (type $none_=>_i32) (i32.const 9) ) ) ) ) binaryen-version_108/test/ctor-eval/params.wast000066400000000000000000000003151423707623100220020ustar00rootroot00000000000000(module (func "test1" (param $x i32) ;; The presence of params stops us from evalling this function, at least ;; not with --ignore-external-input (see ignore-external-input.wast) (nop) ) ) binaryen-version_108/test/ctor-eval/params.wast.ctors000066400000000000000000000000061423707623100231300ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/params.wast.out000066400000000000000000000001621423707623100226100ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (export "test1" (func $0)) (func $0 (param $x i32) (nop) ) ) binaryen-version_108/test/ctor-eval/partial-locals-tee.wast000066400000000000000000000020131423707623100241760ustar00rootroot00000000000000(module (import "import" "import" (func $import (param i32 i32))) (memory 256 256) (data (i32.const 10) "_________________") (export "test1" $test1) (func $test1 (local $temp i32) ;; Increment $temp from 0 to 1, which we can eval. (local.set $temp (i32.add (local.get $temp) (i32.const 1) ) ) ;; A safe store that will be evalled and alter memory. (i32.store8 (i32.const 12) (i32.const 115)) ;; A call to an import, which prevents evalling. We will stop here. The ;; 'tee' instruction should *not* have any effect, that is, we should not ;; partially eval this line in the block - we should eval none of it. ;; TODO: We should support such partial line evalling, with more careful ;; management of locals. (call $import (local.get $temp) ;; The value sent here should be '1'. (local.tee $temp (i32.const 50) ) ) ;; A safe store that we never reach (i32.store8 (i32.const 13) (i32.const 115)) ) ) binaryen-version_108/test/ctor-eval/partial-locals-tee.wast.ctors000066400000000000000000000000061423707623100253270ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/partial-locals-tee.wast.out000066400000000000000000000005651423707623100250160ustar00rootroot00000000000000(module (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (import "import" "import" (func $import (param i32 i32))) (memory $0 256 256) (data (i32.const 10) "__s______________") (export "test1" (func $test1_0)) (func $test1_0 (call $import (i32.const 1) (i32.const 50) ) (i32.store8 (i32.const 13) (i32.const 115) ) ) ) binaryen-version_108/test/ctor-eval/partial-locals.wast000066400000000000000000000017321423707623100234320ustar00rootroot00000000000000(module (import "import" "import" (func $import)) (memory 256 256) (data (i32.const 10) "_________________") (export "test1" $test1) (global $sp (mut i32) (i32.const 100)) (func $test1 (local $temp-sp i32) ;; Save and bump the stack pointer. (local.set $temp-sp (global.get $sp) ) (global.set $sp (i32.add (global.get $sp) (i32.const 4) ) ) ;; A safe store, should alter memory (i32.store8 (i32.const 12) (i32.const 115)) ;; A call to an import, which prevents evalling. We will stop here. After ;; optimization we'll serialize the value of $temp-sp so that when the ;; code is run later it runs properly. ;; ;; (Also, the global $sp will contain 104, the value after the bump.) (call $import) ;; A safe store that we never reach (i32.store8 (i32.const 13) (i32.const 115)) ;; Restore the stack pointer. (global.set $sp (local.get $temp-sp) ) ) ) binaryen-version_108/test/ctor-eval/partial-locals.wast.ctors000066400000000000000000000000061423707623100245540ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/partial-locals.wast.out000066400000000000000000000006271423707623100242420ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "import" "import" (func $import)) (global $sp (mut i32) (i32.const 104)) (memory $0 256 256) (data (i32.const 10) "__s______________") (export "test1" (func $test1_0)) (func $test1_0 (local $0 i32) (local.set $0 (i32.const 100) ) (call $import) (i32.store8 (i32.const 13) (i32.const 115) ) (global.set $sp (local.get $0) ) ) ) binaryen-version_108/test/ctor-eval/partial-return.wast000066400000000000000000000015131423707623100234710ustar00rootroot00000000000000(module (import "import" "import" (func $import)) (memory 256 256) (data (i32.const 10) "_________________") (export "test1" $test1) (export "memory" (memory $0)) (func $test1 ;; A safe store, should alter memory (i32.store8 (i32.const 12) (i32.const 115)) ;; Load the value we just saved, and return because of its value. (This way ;; we could not see the return must execute without ctor-eval. At least, not ;; without store-load forwarding.) (if (i32.load8_u (i32.const 12) ) (return) ) ;; This is unsafe to call, and would stop evalling here. But we exit due to ;; the return before anyhow, so it doesn't matter. (call $import) ;; A safe store that we never reach because of the return before us. (i32.store8 (i32.const 13) (i32.const 115)) ) ) binaryen-version_108/test/ctor-eval/partial-return.wast.ctors000066400000000000000000000000061423707623100246160ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/partial-return.wast.out000066400000000000000000000001511423707623100242740ustar00rootroot00000000000000(module (memory $0 256 256) (data (i32.const 10) "__s______________") (export "memory" (memory $0)) ) binaryen-version_108/test/ctor-eval/partial.wast000066400000000000000000000017011423707623100221530ustar00rootroot00000000000000(module (import "import" "import" (func $import)) (memory 256 256) (data (i32.const 10) "_________________") (export "test1" $test1) ;; Use the function in an additional export. We should still get the same ;; results if we call this one, so it should point to identical contents as ;; earlier (export "keepalive" $test1) (func $test1 ;; A safe store, should alter memory (i32.store8 (i32.const 12) (i32.const 115)) ;; A call to an import, which prevents evalling. (call $import) ;; Another safe store, but the import call before us will stop our evalling. ;; As a result we will only partially eval this function, applying only ;; the first store. ;; ;; After optimization, the test1 export will point to a function that does ;; not have the first store anymore. It will contain just the call to the ;; import and then this second store. (i32.store8 (i32.const 13) (i32.const 114)) ) ) binaryen-version_108/test/ctor-eval/partial.wast.ctors000066400000000000000000000000061423707623100233010ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/partial.wast.out000066400000000000000000000007031423707623100227620ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "import" "import" (func $import)) (memory $0 256 256) (data (i32.const 10) "__s______________") (export "test1" (func $test1_0)) (export "keepalive" (func $test1)) (func $test1 (i32.store8 (i32.const 12) (i32.const 115) ) (call $import) (i32.store8 (i32.const 13) (i32.const 114) ) ) (func $test1_0 (call $import) (i32.store8 (i32.const 13) (i32.const 114) ) ) ) binaryen-version_108/test/ctor-eval/results.wast000066400000000000000000000046771423707623100222370ustar00rootroot00000000000000(module (import "import" "import" (func $import)) (global $global1 (mut i32) (i32.const 1)) (global $global2 (mut i32) (i32.const 2)) (global $global3 (mut i32) (i32.const 3)) (global $global4 (mut i32) (i32.const 4)) (global $global5 (mut i32) (i32.const 5)) (func $test1 (export "test1") ;; This function can be evalled. But in this test we keep this export, ;; so we should still see an export, but the export should do nothing since ;; the code has already run. ;; ;; In comparison, test3 below, with a result, will still contain a ;; (constant) result in the remaining export once we can handle results. (global.set $global1 (i32.const 11) ) ) (func $test2 (export "test2") ;; As the above function, but the export is *not* kept. (global.set $global2 (i32.const 12) ) ) (func $test3 (export "test3") (result i32) ;; The global.set can be evalled. We must then keep returning the 42. (global.set $global3 (i32.const 13) ) (i32.const 42) ) (func $test4 (export "test4") (result i32) ;; Similar to the above, but not in a toplevel block format that we can ;; eval one item at a time. We will eval this entire function at once, and ;; we should succeed. After that we should keep returning the constant 55 (if (result i32) (i32.const 1) (block (result i32) (global.set $global4 (i32.const 14) ) (i32.const 55) ) (i32.const 99) ) ) (func $test5 (export "test5") (result i32) ;; Tests partial evalling with a return value at the end. We never reach ;; that return value, but we should eval the global.set. (global.set $global5 (i32.const 15) ) (call $import) (i32.const 100) ) (func "keepalive" (result i32) ;; Keep everything alive to see the changes. ;; These should call the original $test1, not the one that is nopped out ;; after evalling. (call $test1) (call $test2) (drop (call $test3) ) (drop (call $test4) ) (drop (call $test5) ) ;; Keeping these alive should show the changes to the globals (that should ;; contain 11, 12, and 3). (i32.add (i32.add (global.get $global1) (global.get $global2) ) (i32.add (global.get $global3) (i32.add (global.get $global4) (global.get $global5) ) ) ) ) ) binaryen-version_108/test/ctor-eval/results.wast.ctors000066400000000000000000000000361423707623100233510ustar00rootroot00000000000000test1,test2,test3,test4,test5 binaryen-version_108/test/ctor-eval/results.wast.out000066400000000000000000000025471423707623100230370ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (import "import" "import" (func $import)) (global $global1 (mut i32) (i32.const 11)) (global $global2 (mut i32) (i32.const 12)) (global $global3 (mut i32) (i32.const 13)) (global $global4 (mut i32) (i32.const 14)) (global $global5 (mut i32) (i32.const 15)) (export "test1" (func $test1_0)) (export "test3" (func $test3_0)) (export "test5" (func $test5_0)) (export "keepalive" (func $5)) (func $test1 (global.set $global1 (i32.const 11) ) ) (func $test2 (global.set $global2 (i32.const 12) ) ) (func $test3 (result i32) (global.set $global3 (i32.const 13) ) (i32.const 42) ) (func $test4 (result i32) (global.set $global4 (i32.const 14) ) (i32.const 55) ) (func $test5 (result i32) (global.set $global5 (i32.const 15) ) (call $import) (i32.const 100) ) (func $5 (result i32) (call $test1) (call $test2) (drop (call $test3) ) (drop (call $test4) ) (drop (call $test5) ) (i32.add (i32.add (global.get $global1) (global.get $global2) ) (i32.add (global.get $global3) (i32.add (global.get $global4) (global.get $global5) ) ) ) ) (func $test1_0 (nop) ) (func $test3_0 (result i32) (i32.const 42) ) (func $test5_0 (result i32) (call $import) (i32.const 100) ) ) binaryen-version_108/test/ctor-eval/unsafe_call.wast000066400000000000000000000006171423707623100230000ustar00rootroot00000000000000(module (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (export "test1" $test1) (func $test1 (call $unsafe-to-call) ;; unsafe to call (i32.store (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory (i32.store16 (i32.const 20) (i32.const 31353)) (i32.store8 (i32.const 23) (i32.const 120)) ) (func $unsafe-to-call (unreachable) ) ) binaryen-version_108/test/ctor-eval/unsafe_call.wast.ctors000066400000000000000000000000061423707623100241210ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/unsafe_call.wast.out000066400000000000000000000006111423707623100236000ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 256 256) (data (i32.const 10) "waka waka waka waka waka") (export "test1" (func $test1)) (func $test1 (call $unsafe-to-call) (i32.store (i32.const 12) (i32.const 115) ) (i32.store16 (i32.const 20) (i32.const 31353) ) (i32.store8 (i32.const 23) (i32.const 120) ) ) (func $unsafe-to-call (unreachable) ) ) binaryen-version_108/test/ctor-eval/unsafe_store.wast000066400000000000000000000003041423707623100232120ustar00rootroot00000000000000(module (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (export "test1" $test1) (func $test1 (i32.store8 (i32.const 9) (i32.const 109)) ;; before first segment ) ) binaryen-version_108/test/ctor-eval/unsafe_store.wast.ctors000066400000000000000000000000061423707623100243420ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/unsafe_store.wast.out000066400000000000000000000000121423707623100240140ustar00rootroot00000000000000(module ) binaryen-version_108/test/ctor-eval/unsafe_store2.wast000066400000000000000000000003031423707623100232730ustar00rootroot00000000000000(module (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (export "test1" $test1) (func $test1 (i32.store8 (i32.const 34) (i32.const 109)) ;; after last segment ) ) binaryen-version_108/test/ctor-eval/unsafe_store2.wast.ctors000066400000000000000000000000061423707623100244240ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/unsafe_store2.wast.out000066400000000000000000000000121423707623100240760ustar00rootroot00000000000000(module ) binaryen-version_108/test/ctor-eval/unsafe_store3.wast000066400000000000000000000003301423707623100232740ustar00rootroot00000000000000(module (memory 256 256) (data (i32.const 10) "waka waka waka waka waka") (export "test1" $test1) (func $test1 (i32.store16 (i32.const 33) (i32.const 109)) ;; after last segment due to size of type ) ) binaryen-version_108/test/ctor-eval/unsafe_store3.wast.ctors000066400000000000000000000000061423707623100244250ustar00rootroot00000000000000test1 binaryen-version_108/test/ctor-eval/unsafe_store3.wast.out000066400000000000000000000000121423707623100240770ustar00rootroot00000000000000(module ) binaryen-version_108/test/duplicate_types.wast000066400000000000000000000005321423707623100220220ustar00rootroot00000000000000(module ;; tests duplicate types are named properly (type (func)) (type (func)) (type (func)) (type (func (param i32))) (type $0 (func (param i32))) (type (func (param i32))) (type $b (func (param i32) (result f32))) (type (func (param i32) (result f32))) (func $f0 (param i32)) (func $f1 (param i32) (result i32) (i32.const 0) ) ) binaryen-version_108/test/duplicate_types.wast.from-wast000066400000000000000000000002731423707623100237420ustar00rootroot00000000000000(module (type $0 (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (func $f0 (param $0 i32) (nop) ) (func $f1 (param $0 i32) (result i32) (i32.const 0) ) ) binaryen-version_108/test/duplicate_types.wast.fromBinary000066400000000000000000000002741423707623100241340ustar00rootroot00000000000000(module (type $0 (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (func $f0 (param $0 i32) (nop) ) (func $f1 (param $0 i32) (result i32) (i32.const 0) ) ) binaryen-version_108/test/duplicate_types.wast.fromBinary.noDebugInfo000066400000000000000000000003041423707623100263240ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (func $0 (param $0 i32) (nop) ) (func $1 (param $0 i32) (result i32) (i32.const 0) ) ) binaryen-version_108/test/duplicated_names.wasm000066400000000000000000000001001423707623100221050ustar00rootroot00000000000000asm` A A A namefoofoofoobinaryen-version_108/test/duplicated_names.wasm.fromBinary000066400000000000000000000002741423707623100242300ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (func $foo (result i32) (i32.const 0) ) (func $foo.1 (result i32) (i32.const 1) ) (func $foo.2 (result i32) (i32.const 2) ) ) binaryen-version_108/test/duplicated_names_collision.wasm000066400000000000000000000001021423707623100241620ustar00rootroot00000000000000asm` A A A namefoofoofoo.1binaryen-version_108/test/duplicated_names_collision.wasm.fromBinary000066400000000000000000000002761423707623100263050ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (func $foo (result i32) (i32.const 0) ) (func $foo.1 (result i32) (i32.const 1) ) (func $foo.1.1 (result i32) (i32.const 2) ) ) binaryen-version_108/test/dylib.wasm000066400000000000000000000006611423707623100177230ustar00rootroot00000000000000asm````Œenv g$waka_mineenv g$waka_othersenvfp$_Z16waka_func_theirsi$iienvfp$_Z14waka_func_minei$iienv __memory_baseenvmemoryA A A A A A v__wasm_apply_relocs_Z14waka_func_minei__original_main waka_minemain __dso_handle__post_instantiate H  Aj #(#(##jjj #(#(##jjj $$$$ # * dylinkbinaryen-version_108/test/dylib.wasm.fromBinary000066400000000000000000000040061423707623100220270ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 0)) (data (global.get $gimport$0) "*\00\00\00") (import "env" "__memory_base" (global $gimport$0 i32)) (import "env" "g$waka_mine" (func $fimport$0 (result i32))) (import "env" "g$waka_others" (func $fimport$1 (result i32))) (import "env" "fp$_Z16waka_func_theirsi$ii" (func $fimport$2 (result i32))) (import "env" "fp$_Z14waka_func_minei$ii" (func $fimport$3 (result i32))) (global $global$0 (mut i32) (i32.const 0)) (global $global$1 (mut i32) (i32.const 0)) (global $global$2 (mut i32) (i32.const 0)) (global $global$3 (mut i32) (i32.const 0)) (global $global$4 i32 (i32.const 0)) (global $global$5 i32 (i32.const 0)) (export "__wasm_apply_relocs" (func $0)) (export "_Z14waka_func_minei" (func $1)) (export "__original_main" (func $2)) (export "waka_mine" (global $global$4)) (export "main" (func $3)) (export "__dso_handle" (global $global$5)) (export "__post_instantiate" (func $4)) (func $0 (nop) ) (func $1 (param $0 i32) (result i32) (i32.add (local.get $0) (i32.const 1) ) ) (func $2 (result i32) (i32.add (i32.load (global.get $global$3) ) (i32.add (i32.load (global.get $global$2) ) (i32.add (global.get $global$0) (global.get $global$1) ) ) ) ) (func $3 (param $0 i32) (param $1 i32) (result i32) (i32.add (i32.load (global.get $global$3) ) (i32.add (i32.load (global.get $global$2) ) (i32.add (global.get $global$0) (global.get $global$1) ) ) ) ) (func $4 (global.set $global$2 (call $fimport$0) ) (global.set $global$3 (call $fimport$1) ) (global.set $global$0 (call $fimport$2) ) (global.set $global$1 (call $fimport$3) ) ) ;; dylink section ;; memorysize: 4 ;; memoryalignment: 2 ;; tablesize: 0 ;; tablealignment: 0 ) binaryen-version_108/test/elided-br.wasm000066400000000000000000000000411423707623100204370ustar00rootroot00000000000000asm`  @@  binaryen-version_108/test/elided-br.wasm.fromBinary000066400000000000000000000001341423707623100225510ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $0 (block $label$1 (unreachable) ) ) ) binaryen-version_108/test/empty_imported_table.wast000066400000000000000000000001071423707623100230320ustar00rootroot00000000000000(module (import "env" "table" (table 0 0 funcref)) (memory $0 0) ) binaryen-version_108/test/empty_imported_table.wast.from-wast000066400000000000000000000001201423707623100247430ustar00rootroot00000000000000(module (import "env" "table" (table $timport$0 0 0 funcref)) (memory $0 0) ) binaryen-version_108/test/empty_imported_table.wast.fromBinary000066400000000000000000000001211423707623100251350ustar00rootroot00000000000000(module (import "env" "table" (table $timport$0 0 0 funcref)) (memory $0 0) ) binaryen-version_108/test/empty_imported_table.wast.fromBinary.noDebugInfo000066400000000000000000000001211423707623100273330ustar00rootroot00000000000000(module (import "env" "table" (table $timport$0 0 0 funcref)) (memory $0 0) ) binaryen-version_108/test/empty_table.wast000066400000000000000000000000601423707623100211250ustar00rootroot00000000000000(module (table 0 0 funcref) (memory $0 0) ) binaryen-version_108/test/empty_table.wast.from-wast000066400000000000000000000000611423707623100230440ustar00rootroot00000000000000(module (memory $0 0) (table $0 0 0 funcref) ) binaryen-version_108/test/empty_table.wast.fromBinary000066400000000000000000000000621423707623100232360ustar00rootroot00000000000000(module (memory $0 0) (table $0 0 0 funcref) ) binaryen-version_108/test/empty_table.wast.fromBinary.noDebugInfo000066400000000000000000000000621423707623100254340ustar00rootroot00000000000000(module (memory $0 0) (table $0 0 0 funcref) ) binaryen-version_108/test/example/000077500000000000000000000000001423707623100173575ustar00rootroot00000000000000binaryen-version_108/test/example/c-api-hello-world.c000066400000000000000000000021431423707623100227420ustar00rootroot00000000000000#include // "hello world" type example: create a function that adds two i32s and returns // the result int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // Create a function type for i32 (i32, i32) BinaryenType ii[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenType params = BinaryenTypeCreate(ii, 2); BinaryenType results = BinaryenTypeInt32(); // Get the 0 and 1 arguments, and add them BinaryenExpressionRef x = BinaryenLocalGet(module, 0, BinaryenTypeInt32()), y = BinaryenLocalGet(module, 1, BinaryenTypeInt32()); BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y); // Create the add function // Note: no additional local variables // Note: no basic blocks here, we are an AST. The function body is just an // expression node. BinaryenFunctionRef adder = BinaryenAddFunction(module, "adder", params, results, NULL, 0, add); // Print it out BinaryenModulePrint(module); // Clean up the module, which owns all the objects we created above BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/c-api-hello-world.txt000066400000000000000000000002651423707623100233420ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (func $adder (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) binaryen-version_108/test/example/c-api-kitchen-sink.c000066400000000000000000002173471423707623100231170ustar00rootroot00000000000000// We always need asserts here #ifdef NDEBUG #undef NDEBUG #endif #include #include #include #include #include // kitchen sink, tests the full API // helpers static const uint8_t v128_bytes[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; BinaryenExpressionRef makeUnary(BinaryenModuleRef module, BinaryenOp op, BinaryenType inputType) { if (inputType == BinaryenTypeInt32()) return BinaryenUnary( module, op, BinaryenConst(module, BinaryenLiteralInt32(-10))); if (inputType == BinaryenTypeInt64()) return BinaryenUnary( module, op, BinaryenConst(module, BinaryenLiteralInt64(-22))); if (inputType == BinaryenTypeFloat32()) return BinaryenUnary( module, op, BinaryenConst(module, BinaryenLiteralFloat32(-33.612f))); if (inputType == BinaryenTypeFloat64()) return BinaryenUnary( module, op, BinaryenConst(module, BinaryenLiteralFloat64(-9005.841))); if (inputType == BinaryenTypeVec128()) return BinaryenUnary( module, op, BinaryenConst(module, BinaryenLiteralVec128(v128_bytes))); abort(); } BinaryenExpressionRef makeBinary(BinaryenModuleRef module, BinaryenOp op, BinaryenType type) { if (type == BinaryenTypeInt32()) { // use temp vars to ensure optimization doesn't change the order of // operation in our trace recording BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralInt32(-11)); return BinaryenBinary( module, op, BinaryenConst(module, BinaryenLiteralInt32(-10)), temp); } if (type == BinaryenTypeInt64()) { BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralInt64(-23)); return BinaryenBinary( module, op, BinaryenConst(module, BinaryenLiteralInt64(-22)), temp); } if (type == BinaryenTypeFloat32()) { BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralFloat32(-62.5f)); return BinaryenBinary( module, op, BinaryenConst(module, BinaryenLiteralFloat32(-33.612f)), temp); } if (type == BinaryenTypeFloat64()) { BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralFloat64(-9007.333)); return BinaryenBinary( module, op, BinaryenConst(module, BinaryenLiteralFloat64(-9005.841)), temp); } if (type == BinaryenTypeVec128()) { BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralVec128(v128_bytes)); return BinaryenBinary( module, op, BinaryenConst(module, BinaryenLiteralVec128(v128_bytes)), temp); } abort(); } BinaryenExpressionRef makeInt32(BinaryenModuleRef module, int x) { return BinaryenConst(module, BinaryenLiteralInt32(x)); } BinaryenExpressionRef makeFloat32(BinaryenModuleRef module, float x) { return BinaryenConst(module, BinaryenLiteralFloat32(x)); } BinaryenExpressionRef makeInt64(BinaryenModuleRef module, int64_t x) { return BinaryenConst(module, BinaryenLiteralInt64(x)); } BinaryenExpressionRef makeFloat64(BinaryenModuleRef module, double x) { return BinaryenConst(module, BinaryenLiteralFloat64(x)); } BinaryenExpressionRef makeVec128(BinaryenModuleRef module, uint8_t const* bytes) { return BinaryenConst(module, BinaryenLiteralVec128(bytes)); } BinaryenExpressionRef makeSomething(BinaryenModuleRef module) { return makeInt32(module, 1337); } BinaryenExpressionRef makeDroppedInt32(BinaryenModuleRef module, int x) { return BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(x))); } BinaryenExpressionRef makeSIMDExtract(BinaryenModuleRef module, BinaryenOp op) { return BinaryenSIMDExtract(module, op, makeVec128(module, v128_bytes), 0); } BinaryenExpressionRef makeSIMDReplace(BinaryenModuleRef module, BinaryenOp op, BinaryenType type) { BinaryenExpressionRef val; if (type == BinaryenTypeInt32()) { val = makeInt32(module, 42); } if (type == BinaryenTypeInt64()) { val = makeInt64(module, 42); } if (type == BinaryenTypeFloat32()) { val = makeFloat32(module, 42.); } if (type == BinaryenTypeFloat64()) { val = makeFloat64(module, 42.); } if (!val) { abort(); } return BinaryenSIMDReplace( module, op, makeVec128(module, v128_bytes), 0, val); } BinaryenExpressionRef makeSIMDShuffle(BinaryenModuleRef module) { BinaryenExpressionRef left = makeVec128(module, v128_bytes); BinaryenExpressionRef right = makeVec128(module, v128_bytes); return BinaryenSIMDShuffle(module, left, right, (uint8_t[16]){}); } BinaryenExpressionRef makeSIMDTernary(BinaryenModuleRef module, BinaryenOp op) { BinaryenExpressionRef a = makeVec128(module, v128_bytes); BinaryenExpressionRef b = makeVec128(module, v128_bytes); BinaryenExpressionRef c = makeVec128(module, v128_bytes); return BinaryenSIMDTernary(module, op, a, b, c); } BinaryenExpressionRef makeSIMDShift(BinaryenModuleRef module, BinaryenOp op) { BinaryenExpressionRef vec = makeVec128(module, v128_bytes); return BinaryenSIMDShift(module, op, vec, makeInt32(module, 1)); } BinaryenExpressionRef makeMemoryInit(BinaryenModuleRef module) { BinaryenExpressionRef dest = makeInt32(module, 1024); BinaryenExpressionRef offset = makeInt32(module, 0); BinaryenExpressionRef size = makeInt32(module, 12); return BinaryenMemoryInit(module, 0, dest, offset, size); }; BinaryenExpressionRef makeDataDrop(BinaryenModuleRef module) { return BinaryenDataDrop(module, 0); }; BinaryenExpressionRef makeMemoryCopy(BinaryenModuleRef module) { BinaryenExpressionRef dest = makeInt32(module, 2048); BinaryenExpressionRef source = makeInt32(module, 1024); BinaryenExpressionRef size = makeInt32(module, 12); return BinaryenMemoryCopy(module, dest, source, size); }; BinaryenExpressionRef makeMemoryFill(BinaryenModuleRef module) { BinaryenExpressionRef dest = makeInt32(module, 0); BinaryenExpressionRef value = makeInt32(module, 42); BinaryenExpressionRef size = makeInt32(module, 1024); return BinaryenMemoryFill(module, dest, value, size); }; // tests void test_types() { BinaryenType valueType = 0xdeadbeef; BinaryenType none = BinaryenTypeNone(); printf(" // BinaryenTypeNone: %d\n", none); assert(BinaryenTypeArity(none) == 0); BinaryenTypeExpand(none, &valueType); assert(valueType == 0xdeadbeef); BinaryenType unreachable = BinaryenTypeUnreachable(); printf(" // BinaryenTypeUnreachable: %d\n", unreachable); assert(BinaryenTypeArity(unreachable) == 1); BinaryenTypeExpand(unreachable, &valueType); assert(valueType == unreachable); BinaryenType i32 = BinaryenTypeInt32(); printf(" // BinaryenTypeInt32: %d\n", i32); assert(BinaryenTypeArity(i32) == 1); BinaryenTypeExpand(i32, &valueType); assert(valueType == i32); BinaryenType i64 = BinaryenTypeInt64(); printf(" // BinaryenTypeInt64: %d\n", i64); assert(BinaryenTypeArity(i64) == 1); BinaryenTypeExpand(i64, &valueType); assert(valueType == i64); BinaryenType f32 = BinaryenTypeFloat32(); printf(" // BinaryenTypeFloat32: %d\n", f32); assert(BinaryenTypeArity(f32) == 1); BinaryenTypeExpand(f32, &valueType); assert(valueType == f32); BinaryenType f64 = BinaryenTypeFloat64(); printf(" // BinaryenTypeFloat64: %d\n", f64); assert(BinaryenTypeArity(f64) == 1); BinaryenTypeExpand(f64, &valueType); assert(valueType == f64); BinaryenType v128 = BinaryenTypeVec128(); printf(" // BinaryenTypeVec128: %d\n", v128); assert(BinaryenTypeArity(v128) == 1); BinaryenTypeExpand(v128, &valueType); assert(valueType == v128); BinaryenType funcref = BinaryenTypeFuncref(); printf(" // BinaryenTypeFuncref: %d\n", funcref); assert(BinaryenTypeArity(funcref) == 1); BinaryenTypeExpand(funcref, &valueType); assert(valueType == funcref); BinaryenType externref = BinaryenTypeExternref(); printf(" // BinaryenTypeExternref: %d\n", externref); assert(BinaryenTypeArity(externref) == 1); BinaryenTypeExpand(externref, &valueType); assert(valueType == externref); BinaryenType anyref = BinaryenTypeAnyref(); printf(" // BinaryenTypeAnyref: %d\n", anyref); assert(BinaryenTypeArity(anyref) == 1); BinaryenTypeExpand(anyref, &valueType); assert(valueType == anyref); BinaryenType eqref = BinaryenTypeEqref(); printf(" // BinaryenTypeEqref: %d\n", eqref); assert(BinaryenTypeArity(eqref) == 1); BinaryenTypeExpand(eqref, &valueType); assert(valueType == eqref); BinaryenType i31ref = BinaryenTypeI31ref(); printf(" // BinaryenTypeI31ref: %d\n", i31ref); assert(BinaryenTypeArity(i31ref) == 1); BinaryenTypeExpand(i31ref, &valueType); assert(valueType == i31ref); BinaryenType dataref = BinaryenTypeDataref(); printf(" // BinaryenTypeDataref: %d\n", dataref); assert(BinaryenTypeArity(dataref) == 1); BinaryenTypeExpand(dataref, &valueType); assert(valueType == dataref); printf(" // BinaryenTypeAuto: %d\n", BinaryenTypeAuto()); BinaryenType pair[] = {i32, i32}; BinaryenType i32_pair = BinaryenTypeCreate(pair, 2); assert(BinaryenTypeArity(i32_pair) == 2); pair[0] = pair[1] = none; BinaryenTypeExpand(i32_pair, pair); assert(pair[0] == i32 && pair[1] == i32); BinaryenType duplicate_pair = BinaryenTypeCreate(pair, 2); assert(duplicate_pair == i32_pair); pair[0] = pair[1] = f32; BinaryenType float_pair = BinaryenTypeCreate(pair, 2); assert(float_pair != i32_pair); } void test_features() { printf("BinaryenFeatureMVP: %d\n", BinaryenFeatureMVP()); printf("BinaryenFeatureAtomics: %d\n", BinaryenFeatureAtomics()); printf("BinaryenFeatureBulkMemory: %d\n", BinaryenFeatureBulkMemory()); printf("BinaryenFeatureMutableGlobals: %d\n", BinaryenFeatureMutableGlobals()); printf("BinaryenFeatureNontrappingFPToInt: %d\n", BinaryenFeatureNontrappingFPToInt()); printf("BinaryenFeatureSignExt: %d\n", BinaryenFeatureSignExt()); printf("BinaryenFeatureSIMD128: %d\n", BinaryenFeatureSIMD128()); printf("BinaryenFeatureExceptionHandling: %d\n", BinaryenFeatureExceptionHandling()); printf("BinaryenFeatureTailCall: %d\n", BinaryenFeatureTailCall()); printf("BinaryenFeatureReferenceTypes: %d\n", BinaryenFeatureReferenceTypes()); printf("BinaryenFeatureMultivalue: %d\n", BinaryenFeatureMultivalue()); printf("BinaryenFeatureGC: %d\n", BinaryenFeatureGC()); printf("BinaryenFeatureMemory64: %d\n", BinaryenFeatureMemory64()); printf("BinaryenFeatureTypedFunctionReferences: %d\n", BinaryenFeatureTypedFunctionReferences()); printf("BinaryenFeatureRelaxedSIMD: %d\n", BinaryenFeatureRelaxedSIMD()); printf("BinaryenFeatureExtendedConst: %d\n", BinaryenFeatureExtendedConst()); printf("BinaryenFeatureAll: %d\n", BinaryenFeatureAll()); } void test_core() { // Module creation BinaryenModuleRef module = BinaryenModuleCreate(); // Literals and consts BinaryenExpressionRef constI32 = BinaryenConst(module, BinaryenLiteralInt32(1)), constI64 = BinaryenConst(module, BinaryenLiteralInt64(2)), constF32 = BinaryenConst(module, BinaryenLiteralFloat32(3.14f)), constF64 = BinaryenConst(module, BinaryenLiteralFloat64(2.1828)), constF32Bits = BinaryenConst(module, BinaryenLiteralFloat32Bits(0xffff1234)), constF64Bits = BinaryenConst(module, BinaryenLiteralFloat64Bits(0xffff12345678abcdLL)), constV128 = BinaryenConst(module, BinaryenLiteralVec128(v128_bytes)); const char* switchValueNames[] = {"the-value"}; const char* switchBodyNames[] = {"the-nothing"}; BinaryenExpressionRef callOperands2[] = {makeInt32(module, 13), makeFloat64(module, 3.7)}; BinaryenExpressionRef callOperands4[] = {makeInt32(module, 13), makeInt64(module, 37), makeFloat32(module, 1.3f), makeFloat64(module, 3.7)}; BinaryenExpressionRef callOperands4b[] = {makeInt32(module, 13), makeInt64(module, 37), makeFloat32(module, 1.3f), makeFloat64(module, 3.7)}; BinaryenExpressionRef tupleElements4a[] = {makeInt32(module, 13), makeInt64(module, 37), makeFloat32(module, 1.3f), makeFloat64(module, 3.7)}; BinaryenExpressionRef tupleElements4b[] = {makeInt32(module, 13), makeInt64(module, 37), makeFloat32(module, 1.3f), makeFloat64(module, 3.7)}; BinaryenType iIfF_[4] = {BinaryenTypeInt32(), BinaryenTypeInt64(), BinaryenTypeFloat32(), BinaryenTypeFloat64()}; BinaryenType iIfF = BinaryenTypeCreate(iIfF_, 4); BinaryenExpressionRef temp1 = makeInt32(module, 1), temp2 = makeInt32(module, 2), temp3 = makeInt32(module, 3), temp4 = makeInt32(module, 4), temp5 = makeInt32(module, 5), temp6 = makeInt32(module, 0), temp7 = makeInt32(module, 1), temp8 = makeInt32(module, 0), temp9 = makeInt32(module, 1), temp10 = makeInt32(module, 1), temp11 = makeInt32(module, 3), temp12 = makeInt32(module, 5), temp13 = makeInt32(module, 10), temp14 = makeInt32(module, 11), temp15 = makeInt32(module, 110), temp16 = makeInt64(module, 111); BinaryenExpressionRef externrefExpr = BinaryenRefNull(module, BinaryenTypeExternref()); BinaryenExpressionRef funcrefExpr = BinaryenRefNull(module, BinaryenTypeFuncref()); funcrefExpr = BinaryenRefFunc(module, "kitchen()sinker", BinaryenTypeFuncref()); BinaryenExpressionRef i31refExpr = BinaryenI31New(module, makeInt32(module, 1)); // Tags BinaryenAddTag(module, "a-tag", BinaryenTypeInt32(), BinaryenTypeNone()); BinaryenAddTable(module, "tab", 0, 100, BinaryenTypeFuncref()); // Exception handling // (try // (do // (throw $a-tag (i32.const 0)) // ) // (catch $a-tag // (drop (i32 pop)) // ) // (catch_all) // ) BinaryenExpressionRef tryBody = BinaryenThrow( module, "a-tag", (BinaryenExpressionRef[]){makeInt32(module, 0)}, 1); BinaryenExpressionRef catchBody = BinaryenDrop(module, BinaryenPop(module, BinaryenTypeInt32())); BinaryenExpressionRef catchAllBody = BinaryenNop(module); const char* catchTags[] = {"a-tag"}; BinaryenExpressionRef catchBodies[] = {catchBody, catchAllBody}; const char* emptyCatchTags[] = {}; BinaryenExpressionRef emptyCatchBodies[] = {}; BinaryenExpressionRef nopCatchBody[] = {BinaryenNop(module)}; BinaryenType i32 = BinaryenTypeInt32(); BinaryenType i64 = BinaryenTypeInt64(); BinaryenType f32 = BinaryenTypeFloat32(); BinaryenType f64 = BinaryenTypeFloat64(); BinaryenType v128 = BinaryenTypeVec128(); BinaryenExpressionRef valueList[] = { // Unary makeUnary(module, BinaryenClzInt32(), i32), makeUnary(module, BinaryenCtzInt64(), i64), makeUnary(module, BinaryenPopcntInt32(), i32), makeUnary(module, BinaryenNegFloat32(), f32), makeUnary(module, BinaryenAbsFloat64(), f64), makeUnary(module, BinaryenCeilFloat32(), f32), makeUnary(module, BinaryenFloorFloat64(), f64), makeUnary(module, BinaryenTruncFloat32(), f32), makeUnary(module, BinaryenNearestFloat32(), f32), makeUnary(module, BinaryenSqrtFloat64(), f64), makeUnary(module, BinaryenEqZInt32(), i32), makeUnary(module, BinaryenExtendSInt32(), i32), makeUnary(module, BinaryenExtendUInt32(), i32), makeUnary(module, BinaryenWrapInt64(), i64), makeUnary(module, BinaryenTruncSFloat32ToInt32(), f32), makeUnary(module, BinaryenTruncSFloat32ToInt64(), f32), makeUnary(module, BinaryenTruncUFloat32ToInt32(), f32), makeUnary(module, BinaryenTruncUFloat32ToInt64(), f32), makeUnary(module, BinaryenTruncSFloat64ToInt32(), f64), makeUnary(module, BinaryenTruncSFloat64ToInt64(), f64), makeUnary(module, BinaryenTruncUFloat64ToInt32(), f64), makeUnary(module, BinaryenTruncUFloat64ToInt64(), f64), makeUnary(module, BinaryenTruncSatSFloat32ToInt32(), f32), makeUnary(module, BinaryenTruncSatSFloat32ToInt64(), f32), makeUnary(module, BinaryenTruncSatUFloat32ToInt32(), f32), makeUnary(module, BinaryenTruncSatUFloat32ToInt64(), f32), makeUnary(module, BinaryenTruncSatSFloat64ToInt32(), f64), makeUnary(module, BinaryenTruncSatSFloat64ToInt64(), f64), makeUnary(module, BinaryenTruncSatUFloat64ToInt32(), f64), makeUnary(module, BinaryenTruncSatUFloat64ToInt64(), f64), makeUnary(module, BinaryenReinterpretFloat32(), f32), makeUnary(module, BinaryenReinterpretFloat64(), f64), makeUnary(module, BinaryenConvertSInt32ToFloat32(), i32), makeUnary(module, BinaryenConvertSInt32ToFloat64(), i32), makeUnary(module, BinaryenConvertUInt32ToFloat32(), i32), makeUnary(module, BinaryenConvertUInt32ToFloat64(), i32), makeUnary(module, BinaryenConvertSInt64ToFloat32(), i64), makeUnary(module, BinaryenConvertSInt64ToFloat64(), i64), makeUnary(module, BinaryenConvertUInt64ToFloat32(), i64), makeUnary(module, BinaryenConvertUInt64ToFloat64(), i64), makeUnary(module, BinaryenPromoteFloat32(), f32), makeUnary(module, BinaryenDemoteFloat64(), f64), makeUnary(module, BinaryenReinterpretInt32(), i32), makeUnary(module, BinaryenReinterpretInt64(), i64), makeUnary(module, BinaryenSplatVecI8x16(), i32), makeUnary(module, BinaryenSplatVecI16x8(), i32), makeUnary(module, BinaryenSplatVecI32x4(), i32), makeUnary(module, BinaryenSplatVecI64x2(), i64), makeUnary(module, BinaryenSplatVecF32x4(), f32), makeUnary(module, BinaryenSplatVecF64x2(), f64), makeUnary(module, BinaryenNotVec128(), v128), makeUnary(module, BinaryenAnyTrueVec128(), v128), makeUnary(module, BinaryenPopcntVecI8x16(), v128), makeUnary(module, BinaryenAbsVecI8x16(), v128), makeUnary(module, BinaryenNegVecI8x16(), v128), makeUnary(module, BinaryenAllTrueVecI8x16(), v128), makeUnary(module, BinaryenBitmaskVecI8x16(), v128), makeUnary(module, BinaryenAbsVecI16x8(), v128), makeUnary(module, BinaryenNegVecI16x8(), v128), makeUnary(module, BinaryenAllTrueVecI16x8(), v128), makeUnary(module, BinaryenBitmaskVecI16x8(), v128), makeUnary(module, BinaryenAbsVecI32x4(), v128), makeUnary(module, BinaryenNegVecI32x4(), v128), makeUnary(module, BinaryenAllTrueVecI32x4(), v128), makeUnary(module, BinaryenBitmaskVecI32x4(), v128), makeUnary(module, BinaryenAbsVecI64x2(), v128), makeUnary(module, BinaryenNegVecI64x2(), v128), makeUnary(module, BinaryenAllTrueVecI64x2(), v128), makeUnary(module, BinaryenBitmaskVecI64x2(), v128), makeUnary(module, BinaryenAbsVecF32x4(), v128), makeUnary(module, BinaryenNegVecF32x4(), v128), makeUnary(module, BinaryenSqrtVecF32x4(), v128), makeUnary(module, BinaryenAbsVecF64x2(), v128), makeUnary(module, BinaryenNegVecF64x2(), v128), makeUnary(module, BinaryenSqrtVecF64x2(), v128), makeUnary(module, BinaryenTruncSatSVecF32x4ToVecI32x4(), v128), makeUnary(module, BinaryenTruncSatUVecF32x4ToVecI32x4(), v128), makeUnary(module, BinaryenConvertSVecI32x4ToVecF32x4(), v128), makeUnary(module, BinaryenConvertUVecI32x4ToVecF32x4(), v128), makeUnary(module, BinaryenExtendLowSVecI8x16ToVecI16x8(), v128), makeUnary(module, BinaryenExtendHighSVecI8x16ToVecI16x8(), v128), makeUnary(module, BinaryenExtendLowUVecI8x16ToVecI16x8(), v128), makeUnary(module, BinaryenExtendHighUVecI8x16ToVecI16x8(), v128), makeUnary(module, BinaryenExtendLowSVecI16x8ToVecI32x4(), v128), makeUnary(module, BinaryenExtendHighSVecI16x8ToVecI32x4(), v128), makeUnary(module, BinaryenExtendLowUVecI16x8ToVecI32x4(), v128), makeUnary(module, BinaryenExtendHighUVecI16x8ToVecI32x4(), v128), makeUnary(module, BinaryenExtendLowSVecI32x4ToVecI64x2(), v128), makeUnary(module, BinaryenExtendHighSVecI32x4ToVecI64x2(), v128), makeUnary(module, BinaryenExtendLowUVecI32x4ToVecI64x2(), v128), makeUnary(module, BinaryenExtendHighUVecI32x4ToVecI64x2(), v128), makeUnary(module, BinaryenConvertLowSVecI32x4ToVecF64x2(), v128), makeUnary(module, BinaryenConvertLowUVecI32x4ToVecF64x2(), v128), makeUnary(module, BinaryenTruncSatZeroSVecF64x2ToVecI32x4(), v128), makeUnary(module, BinaryenTruncSatZeroUVecF64x2ToVecI32x4(), v128), makeUnary(module, BinaryenDemoteZeroVecF64x2ToVecF32x4(), v128), makeUnary(module, BinaryenPromoteLowVecF32x4ToVecF64x2(), v128), // Binary makeBinary(module, BinaryenAddInt32(), i32), makeBinary(module, BinaryenSubFloat64(), f64), makeBinary(module, BinaryenDivSInt32(), i32), makeBinary(module, BinaryenDivUInt64(), i64), makeBinary(module, BinaryenRemSInt64(), i64), makeBinary(module, BinaryenRemUInt32(), i32), makeBinary(module, BinaryenAndInt32(), i32), makeBinary(module, BinaryenOrInt64(), i64), makeBinary(module, BinaryenXorInt32(), i32), makeBinary(module, BinaryenShlInt64(), i64), makeBinary(module, BinaryenShrUInt64(), i64), makeBinary(module, BinaryenShrSInt32(), i32), makeBinary(module, BinaryenRotLInt32(), i32), makeBinary(module, BinaryenRotRInt64(), i64), makeBinary(module, BinaryenDivFloat32(), f32), makeBinary(module, BinaryenCopySignFloat64(), f64), makeBinary(module, BinaryenMinFloat32(), f32), makeBinary(module, BinaryenMaxFloat64(), f64), makeBinary(module, BinaryenEqInt32(), i32), makeBinary(module, BinaryenNeFloat32(), f32), makeBinary(module, BinaryenLtSInt32(), i32), makeBinary(module, BinaryenLtUInt64(), i64), makeBinary(module, BinaryenLeSInt64(), i64), makeBinary(module, BinaryenLeUInt32(), i32), makeBinary(module, BinaryenGtSInt64(), i64), makeBinary(module, BinaryenGtUInt32(), i32), makeBinary(module, BinaryenGeSInt32(), i32), makeBinary(module, BinaryenGeUInt64(), i64), makeBinary(module, BinaryenLtFloat32(), f32), makeBinary(module, BinaryenLeFloat64(), f64), makeBinary(module, BinaryenGtFloat64(), f64), makeBinary(module, BinaryenGeFloat32(), f32), makeBinary(module, BinaryenEqVecI8x16(), v128), makeBinary(module, BinaryenNeVecI8x16(), v128), makeBinary(module, BinaryenLtSVecI8x16(), v128), makeBinary(module, BinaryenLtUVecI8x16(), v128), makeBinary(module, BinaryenGtSVecI8x16(), v128), makeBinary(module, BinaryenGtUVecI8x16(), v128), makeBinary(module, BinaryenLeSVecI8x16(), v128), makeBinary(module, BinaryenLeUVecI8x16(), v128), makeBinary(module, BinaryenGeSVecI8x16(), v128), makeBinary(module, BinaryenGeUVecI8x16(), v128), makeBinary(module, BinaryenEqVecI16x8(), v128), makeBinary(module, BinaryenNeVecI16x8(), v128), makeBinary(module, BinaryenLtSVecI16x8(), v128), makeBinary(module, BinaryenLtUVecI16x8(), v128), makeBinary(module, BinaryenGtSVecI16x8(), v128), makeBinary(module, BinaryenGtUVecI16x8(), v128), makeBinary(module, BinaryenLeSVecI16x8(), v128), makeBinary(module, BinaryenLeUVecI16x8(), v128), makeBinary(module, BinaryenGeSVecI16x8(), v128), makeBinary(module, BinaryenGeUVecI16x8(), v128), makeBinary(module, BinaryenEqVecI32x4(), v128), makeBinary(module, BinaryenNeVecI32x4(), v128), makeBinary(module, BinaryenLtSVecI32x4(), v128), makeBinary(module, BinaryenLtUVecI32x4(), v128), makeBinary(module, BinaryenGtSVecI32x4(), v128), makeBinary(module, BinaryenGtUVecI32x4(), v128), makeBinary(module, BinaryenLeSVecI32x4(), v128), makeBinary(module, BinaryenLeUVecI32x4(), v128), makeBinary(module, BinaryenGeSVecI32x4(), v128), makeBinary(module, BinaryenGeUVecI32x4(), v128), makeBinary(module, BinaryenEqVecI64x2(), v128), makeBinary(module, BinaryenNeVecI64x2(), v128), makeBinary(module, BinaryenLtSVecI64x2(), v128), makeBinary(module, BinaryenGtSVecI64x2(), v128), makeBinary(module, BinaryenLeSVecI64x2(), v128), makeBinary(module, BinaryenGeSVecI64x2(), v128), makeBinary(module, BinaryenEqVecF32x4(), v128), makeBinary(module, BinaryenNeVecF32x4(), v128), makeBinary(module, BinaryenLtVecF32x4(), v128), makeBinary(module, BinaryenGtVecF32x4(), v128), makeBinary(module, BinaryenLeVecF32x4(), v128), makeBinary(module, BinaryenGeVecF32x4(), v128), makeBinary(module, BinaryenEqVecF64x2(), v128), makeBinary(module, BinaryenNeVecF64x2(), v128), makeBinary(module, BinaryenLtVecF64x2(), v128), makeBinary(module, BinaryenGtVecF64x2(), v128), makeBinary(module, BinaryenLeVecF64x2(), v128), makeBinary(module, BinaryenGeVecF64x2(), v128), makeBinary(module, BinaryenAndVec128(), v128), makeBinary(module, BinaryenOrVec128(), v128), makeBinary(module, BinaryenXorVec128(), v128), makeBinary(module, BinaryenAndNotVec128(), v128), makeBinary(module, BinaryenAddVecI8x16(), v128), makeBinary(module, BinaryenAddSatSVecI8x16(), v128), makeBinary(module, BinaryenAddSatUVecI8x16(), v128), makeBinary(module, BinaryenSubVecI8x16(), v128), makeBinary(module, BinaryenSubSatSVecI8x16(), v128), makeBinary(module, BinaryenSubSatUVecI8x16(), v128), makeBinary(module, BinaryenMinSVecI8x16(), v128), makeBinary(module, BinaryenMinUVecI8x16(), v128), makeBinary(module, BinaryenMaxSVecI8x16(), v128), makeBinary(module, BinaryenMaxUVecI8x16(), v128), makeBinary(module, BinaryenAvgrUVecI8x16(), v128), makeBinary(module, BinaryenAddVecI16x8(), v128), makeBinary(module, BinaryenAddSatSVecI16x8(), v128), makeBinary(module, BinaryenAddSatUVecI16x8(), v128), makeBinary(module, BinaryenSubVecI16x8(), v128), makeBinary(module, BinaryenSubSatSVecI16x8(), v128), makeBinary(module, BinaryenSubSatUVecI16x8(), v128), makeBinary(module, BinaryenMulVecI16x8(), v128), makeBinary(module, BinaryenMinSVecI16x8(), v128), makeBinary(module, BinaryenMinUVecI16x8(), v128), makeBinary(module, BinaryenMaxSVecI16x8(), v128), makeBinary(module, BinaryenMaxUVecI16x8(), v128), makeBinary(module, BinaryenAvgrUVecI16x8(), v128), makeBinary(module, BinaryenQ15MulrSatSVecI16x8(), v128), makeBinary(module, BinaryenExtMulLowSVecI16x8(), v128), makeBinary(module, BinaryenExtMulHighSVecI16x8(), v128), makeBinary(module, BinaryenExtMulLowUVecI16x8(), v128), makeBinary(module, BinaryenExtMulHighUVecI16x8(), v128), makeBinary(module, BinaryenAddVecI32x4(), v128), makeBinary(module, BinaryenSubVecI32x4(), v128), makeBinary(module, BinaryenMulVecI32x4(), v128), makeBinary(module, BinaryenAddVecI64x2(), v128), makeBinary(module, BinaryenSubVecI64x2(), v128), makeBinary(module, BinaryenMulVecI64x2(), v128), makeBinary(module, BinaryenExtMulLowSVecI64x2(), v128), makeBinary(module, BinaryenExtMulHighSVecI64x2(), v128), makeBinary(module, BinaryenExtMulLowUVecI64x2(), v128), makeBinary(module, BinaryenExtMulHighUVecI64x2(), v128), makeBinary(module, BinaryenAddVecF32x4(), v128), makeBinary(module, BinaryenSubVecF32x4(), v128), makeBinary(module, BinaryenMulVecF32x4(), v128), makeBinary(module, BinaryenMinSVecI32x4(), v128), makeBinary(module, BinaryenMinUVecI32x4(), v128), makeBinary(module, BinaryenMaxSVecI32x4(), v128), makeBinary(module, BinaryenMaxUVecI32x4(), v128), makeBinary(module, BinaryenDotSVecI16x8ToVecI32x4(), v128), makeBinary(module, BinaryenExtMulLowSVecI32x4(), v128), makeBinary(module, BinaryenExtMulHighSVecI32x4(), v128), makeBinary(module, BinaryenExtMulLowUVecI32x4(), v128), makeBinary(module, BinaryenExtMulHighUVecI32x4(), v128), makeBinary(module, BinaryenDivVecF32x4(), v128), makeBinary(module, BinaryenMinVecF32x4(), v128), makeBinary(module, BinaryenMaxVecF32x4(), v128), makeBinary(module, BinaryenPMinVecF32x4(), v128), makeBinary(module, BinaryenPMaxVecF32x4(), v128), makeUnary(module, BinaryenCeilVecF32x4(), v128), makeUnary(module, BinaryenFloorVecF32x4(), v128), makeUnary(module, BinaryenTruncVecF32x4(), v128), makeUnary(module, BinaryenNearestVecF32x4(), v128), makeBinary(module, BinaryenAddVecF64x2(), v128), makeBinary(module, BinaryenSubVecF64x2(), v128), makeBinary(module, BinaryenMulVecF64x2(), v128), makeBinary(module, BinaryenDivVecF64x2(), v128), makeBinary(module, BinaryenMinVecF64x2(), v128), makeBinary(module, BinaryenMaxVecF64x2(), v128), makeBinary(module, BinaryenPMinVecF64x2(), v128), makeBinary(module, BinaryenPMaxVecF64x2(), v128), makeUnary(module, BinaryenCeilVecF64x2(), v128), makeUnary(module, BinaryenFloorVecF64x2(), v128), makeUnary(module, BinaryenTruncVecF64x2(), v128), makeUnary(module, BinaryenNearestVecF64x2(), v128), makeUnary(module, BinaryenExtAddPairwiseSVecI8x16ToI16x8(), v128), makeUnary(module, BinaryenExtAddPairwiseUVecI8x16ToI16x8(), v128), makeUnary(module, BinaryenExtAddPairwiseSVecI16x8ToI32x4(), v128), makeUnary(module, BinaryenExtAddPairwiseUVecI16x8ToI32x4(), v128), makeBinary(module, BinaryenNarrowSVecI16x8ToVecI8x16(), v128), makeBinary(module, BinaryenNarrowUVecI16x8ToVecI8x16(), v128), makeBinary(module, BinaryenNarrowSVecI32x4ToVecI16x8(), v128), makeBinary(module, BinaryenNarrowUVecI32x4ToVecI16x8(), v128), makeBinary(module, BinaryenSwizzleVecI8x16(), v128), // SIMD lane manipulation makeSIMDExtract(module, BinaryenExtractLaneSVecI8x16()), makeSIMDExtract(module, BinaryenExtractLaneUVecI8x16()), makeSIMDExtract(module, BinaryenExtractLaneSVecI16x8()), makeSIMDExtract(module, BinaryenExtractLaneUVecI16x8()), makeSIMDExtract(module, BinaryenExtractLaneVecI32x4()), makeSIMDExtract(module, BinaryenExtractLaneVecI64x2()), makeSIMDExtract(module, BinaryenExtractLaneVecF32x4()), makeSIMDExtract(module, BinaryenExtractLaneVecF64x2()), makeSIMDReplace(module, BinaryenReplaceLaneVecI8x16(), i32), makeSIMDReplace(module, BinaryenReplaceLaneVecI16x8(), i32), makeSIMDReplace(module, BinaryenReplaceLaneVecI32x4(), i32), makeSIMDReplace(module, BinaryenReplaceLaneVecI64x2(), i64), makeSIMDReplace(module, BinaryenReplaceLaneVecF32x4(), f32), makeSIMDReplace(module, BinaryenReplaceLaneVecF64x2(), f64), // SIMD shift makeSIMDShift(module, BinaryenShlVecI8x16()), makeSIMDShift(module, BinaryenShrSVecI8x16()), makeSIMDShift(module, BinaryenShrUVecI8x16()), makeSIMDShift(module, BinaryenShlVecI16x8()), makeSIMDShift(module, BinaryenShrSVecI16x8()), makeSIMDShift(module, BinaryenShrUVecI16x8()), makeSIMDShift(module, BinaryenShlVecI32x4()), makeSIMDShift(module, BinaryenShrSVecI32x4()), makeSIMDShift(module, BinaryenShrUVecI32x4()), makeSIMDShift(module, BinaryenShlVecI64x2()), makeSIMDShift(module, BinaryenShrSVecI64x2()), makeSIMDShift(module, BinaryenShrUVecI64x2()), // SIMD load BinaryenSIMDLoad( module, BinaryenLoad8SplatVec128(), 0, 1, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad16SplatVec128(), 16, 1, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad32SplatVec128(), 16, 4, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad64SplatVec128(), 0, 4, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad8x8SVec128(), 0, 8, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad8x8UVec128(), 0, 8, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad16x4SVec128(), 0, 8, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad16x4UVec128(), 0, 8, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad32x2SVec128(), 0, 8, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad32x2UVec128(), 0, 8, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad32ZeroVec128(), 0, 4, makeInt32(module, 128)), BinaryenSIMDLoad( module, BinaryenLoad64ZeroVec128(), 0, 8, makeInt32(module, 128)), // SIMD load/store lane BinaryenSIMDLoadStoreLane(module, BinaryenLoad8LaneVec128(), 0, 1, 0, makeInt32(module, 128), makeVec128(module, v128_bytes)), BinaryenSIMDLoadStoreLane(module, BinaryenLoad16LaneVec128(), 0, 2, 0, makeInt32(module, 128), makeVec128(module, v128_bytes)), BinaryenSIMDLoadStoreLane(module, BinaryenLoad32LaneVec128(), 0, 4, 0, makeInt32(module, 128), makeVec128(module, v128_bytes)), BinaryenSIMDLoadStoreLane(module, BinaryenLoad64LaneVec128(), 0, 8, 0, makeInt32(module, 128), makeVec128(module, v128_bytes)), BinaryenSIMDLoadStoreLane(module, BinaryenStore8LaneVec128(), 0, 1, 0, makeInt32(module, 128), makeVec128(module, v128_bytes)), BinaryenSIMDLoadStoreLane(module, BinaryenStore16LaneVec128(), 0, 2, 0, makeInt32(module, 128), makeVec128(module, v128_bytes)), BinaryenSIMDLoadStoreLane(module, BinaryenStore32LaneVec128(), 0, 4, 0, makeInt32(module, 128), makeVec128(module, v128_bytes)), BinaryenSIMDLoadStoreLane(module, BinaryenStore64LaneVec128(), 0, 8, 0, makeInt32(module, 128), makeVec128(module, v128_bytes)), // Other SIMD makeSIMDShuffle(module), makeSIMDTernary(module, BinaryenBitselectVec128()), // Bulk memory makeMemoryInit(module), makeDataDrop(module), makeMemoryCopy(module), makeMemoryFill(module), // All the rest BinaryenBlock(module, NULL, NULL, 0, -1), // block with no name and no type BinaryenIf(module, temp1, temp2, temp3), BinaryenIf(module, temp4, temp5, NULL), BinaryenLoop(module, "in", makeInt32(module, 0)), BinaryenLoop(module, NULL, makeInt32(module, 0)), BinaryenBreak(module, "the-value", temp6, temp7), BinaryenBreak(module, "the-nothing", makeInt32(module, 2), NULL), BinaryenBreak(module, "the-value", NULL, makeInt32(module, 3)), BinaryenBreak(module, "the-nothing", NULL, NULL), BinaryenSwitch(module, switchValueNames, 1, "the-value", temp8, temp9), BinaryenSwitch( module, switchBodyNames, 1, "the-nothing", makeInt32(module, 2), NULL), BinaryenUnary( module, BinaryenEqZInt32(), // check the output type of the call node BinaryenCall( module, "kitchen()sinker", callOperands4, 4, BinaryenTypeInt32())), BinaryenUnary(module, BinaryenEqZInt32(), // check the output type of the call node BinaryenUnary(module, BinaryenTruncSFloat32ToInt32(), BinaryenCall(module, "an-imported", callOperands2, 2, BinaryenTypeFloat32()))), BinaryenUnary(module, BinaryenEqZInt32(), // check the output type of the call node BinaryenCallIndirect(module, "tab", makeInt32(module, 2449), callOperands4b, 4, iIfF, BinaryenTypeInt32())), BinaryenDrop(module, BinaryenLocalGet(module, 0, BinaryenTypeInt32())), BinaryenLocalSet(module, 0, makeInt32(module, 101)), BinaryenDrop( module, BinaryenLocalTee(module, 0, makeInt32(module, 102), BinaryenTypeInt32())), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), makeInt32(module, 1)), BinaryenLoad(module, 2, 1, 2, 1, BinaryenTypeInt64(), makeInt32(module, 8)), BinaryenLoad( module, 4, 0, 0, 0, BinaryenTypeFloat32(), makeInt32(module, 2)), BinaryenLoad( module, 8, 0, 2, 8, BinaryenTypeFloat64(), makeInt32(module, 9)), BinaryenStore(module, 4, 0, 0, temp13, temp14, BinaryenTypeInt32()), BinaryenStore(module, 8, 2, 4, temp15, temp16, BinaryenTypeInt64()), BinaryenSelect(module, temp10, temp11, temp12, BinaryenTypeAuto()), BinaryenReturn(module, makeInt32(module, 1337)), // Tail call BinaryenReturnCall( module, "kitchen()sinker", callOperands4, 4, BinaryenTypeInt32()), BinaryenReturnCallIndirect(module, "tab", makeInt32(module, 2449), callOperands4b, 4, iIfF, BinaryenTypeInt32()), // Reference types BinaryenRefIs(module, BinaryenRefIsNull(), externrefExpr), BinaryenRefIs(module, BinaryenRefIsNull(), funcrefExpr), BinaryenSelect( module, temp10, BinaryenRefNull(module, BinaryenTypeFuncref()), BinaryenRefFunc(module, "kitchen()sinker", BinaryenTypeFuncref()), BinaryenTypeFuncref()), // GC BinaryenRefEq(module, BinaryenRefNull(module, BinaryenTypeEqref()), BinaryenRefNull(module, BinaryenTypeEqref())), BinaryenRefIs(module, BinaryenRefIsFunc(), BinaryenRefNull(module, BinaryenTypeAnyref())), BinaryenRefIs(module, BinaryenRefIsData(), BinaryenRefNull(module, BinaryenTypeAnyref())), BinaryenRefIs(module, BinaryenRefIsI31(), BinaryenRefNull(module, BinaryenTypeAnyref())), BinaryenRefAs(module, BinaryenRefAsNonNull(), BinaryenRefNull(module, BinaryenTypeAnyref())), BinaryenRefAs(module, BinaryenRefAsFunc(), BinaryenRefNull(module, BinaryenTypeAnyref())), BinaryenRefAs(module, BinaryenRefAsData(), BinaryenRefNull(module, BinaryenTypeAnyref())), BinaryenRefAs(module, BinaryenRefAsI31(), BinaryenRefNull(module, BinaryenTypeAnyref())), // Exception handling BinaryenTry(module, NULL, tryBody, catchTags, 1, catchBodies, 2, NULL), // (try $try_outer // (do // (try // (do // (throw $a-tag (i32.const 0)) // ) // (delegate $try_outer) // ) // ) // (catch_all) // ) BinaryenTry(module, "try_outer", BinaryenTry(module, NULL, tryBody, emptyCatchTags, 0, emptyCatchBodies, 0, "try_outer"), emptyCatchTags, 0, nopCatchBody, 1, NULL), // Atomics BinaryenAtomicStore( module, 4, 0, temp6, BinaryenAtomicLoad(module, 4, 0, BinaryenTypeInt32(), temp6), BinaryenTypeInt32()), BinaryenDrop( module, BinaryenAtomicWait(module, temp6, temp6, temp16, BinaryenTypeInt32())), BinaryenDrop(module, BinaryenAtomicNotify(module, temp6, temp6)), BinaryenAtomicFence(module), // Tuples BinaryenTupleMake(module, tupleElements4a, 4), BinaryenTupleExtract( module, BinaryenTupleMake(module, tupleElements4b, 4), 2), // Pop BinaryenPop(module, BinaryenTypeInt32()), BinaryenPop(module, BinaryenTypeInt64()), BinaryenPop(module, BinaryenTypeFloat32()), BinaryenPop(module, BinaryenTypeFloat64()), BinaryenPop(module, BinaryenTypeFuncref()), BinaryenPop(module, BinaryenTypeExternref()), BinaryenPop(module, iIfF), // Memory BinaryenMemorySize(module), BinaryenMemoryGrow(module, makeInt32(module, 0)), // GC BinaryenI31New(module, makeInt32(module, 0)), BinaryenI31Get(module, i31refExpr, 1), BinaryenI31Get(module, BinaryenI31New(module, makeInt32(module, 2)), 0), // Other BinaryenNop(module), BinaryenUnreachable(module), }; BinaryenExpressionPrint( valueList[3]); // test printing a standalone expression // Make the main body of the function. and one block with a return value, one // without BinaryenExpressionRef value = BinaryenBlock(module, "the-value", valueList, sizeof(valueList) / sizeof(BinaryenExpressionRef), BinaryenTypeAuto()); BinaryenExpressionRef droppedValue = BinaryenDrop(module, value); BinaryenExpressionRef nothing = BinaryenBlock(module, "the-nothing", &droppedValue, 1, -1); BinaryenExpressionRef bodyList[] = {nothing, makeInt32(module, 42)}; BinaryenExpressionRef body = BinaryenBlock(module, "the-body", bodyList, 2, BinaryenTypeAuto()); // Create the function BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeExternref()}; BinaryenFunctionRef sinker = BinaryenAddFunction( module, "kitchen()sinker", iIfF, BinaryenTypeInt32(), localTypes, 2, body); // Globals BinaryenAddGlobal( module, "a-global", BinaryenTypeInt32(), 0, makeInt32(module, 7)); BinaryenAddGlobal(module, "a-mutable-global", BinaryenTypeFloat32(), 1, makeFloat32(module, 7.5)); // Imports BinaryenType iF_[2] = {BinaryenTypeInt32(), BinaryenTypeFloat64()}; BinaryenType iF = BinaryenTypeCreate(iF_, 2); BinaryenAddFunctionImport( module, "an-imported", "module", "base", iF, BinaryenTypeFloat32()); // Exports BinaryenAddFunctionExport(module, "kitchen()sinker", "kitchen_sinker"); // Function table. One per module const char* funcNames[] = {BinaryenFunctionGetName(sinker)}; BinaryenAddTable(module, "0", 1, 1, BinaryenTypeFuncref()); BinaryenAddActiveElementSegment( module, "0", "0", funcNames, 1, BinaryenConst(module, BinaryenLiteralInt32(0))); BinaryenAddPassiveElementSegment(module, "passive", funcNames, 1); BinaryenAddPassiveElementSegment(module, "p2", funcNames, 1); BinaryenRemoveElementSegment(module, "p2"); BinaryenExpressionRef funcrefExpr1 = BinaryenRefFunc(module, "kitchen()sinker", BinaryenTypeFuncref()); BinaryenExpressionPrint(BinaryenTableSet( module, "0", BinaryenConst(module, BinaryenLiteralInt32(0)), funcrefExpr1)); BinaryenExpressionRef funcrefExpr2 = BinaryenTableGet(module, "0", BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenTypeFuncref()); BinaryenExpressionPrint(funcrefExpr2); BinaryenExpressionRef tablesize = BinaryenTableSize(module, "0"); BinaryenExpressionPrint(tablesize); const char* table = BinaryenTableSizeGetTable(tablesize); BinaryenTableSizeSetTable(tablesize, table); BinaryenExpressionRef valueExpr = BinaryenRefNull(module, BinaryenTypeFuncref()); BinaryenExpressionRef sizeExpr = makeInt32(module, 0); BinaryenExpressionRef growExpr = BinaryenTableGrow(module, "0", valueExpr, sizeExpr); BinaryenExpressionPrint(growExpr); // Memory. One per module const char* segments[] = {"hello, world", "I am passive"}; bool segmentPassive[] = {false, true}; BinaryenExpressionRef segmentOffsets[] = { BinaryenConst(module, BinaryenLiteralInt32(10)), NULL}; BinaryenIndex segmentSizes[] = {12, 12}; BinaryenSetMemory(module, 1, 256, "mem", segments, segmentPassive, segmentOffsets, segmentSizes, 2, 1); // Start function. One per module BinaryenFunctionRef starter = BinaryenAddFunction(module, "starter", BinaryenTypeNone(), BinaryenTypeNone(), NULL, 0, BinaryenNop(module)); BinaryenSetStart(module, starter); // A bunch of our code needs drop(), auto-add it BinaryenModuleAutoDrop(module); BinaryenFeatures features = BinaryenFeatureAll(); BinaryenModuleSetFeatures(module, features); assert(BinaryenModuleGetFeatures(module) == features); // Print it out BinaryenModulePrint(module); // Verify it validates assert(BinaryenModuleValidate(module)); // Clean up the module, which owns all the objects we created above BinaryenModuleDispose(module); } void test_unreachable() { BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenExpressionRef body = BinaryenCallIndirect(module, "invalid-table", BinaryenUnreachable(module), NULL, 0, BinaryenTypeNone(), BinaryenTypeInt64()); BinaryenFunctionRef fn = BinaryenAddFunction(module, "unreachable-fn", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, body); assert(BinaryenModuleValidate(module)); BinaryenModulePrint(module); BinaryenModuleDispose(module); } BinaryenExpressionRef makeCallCheck(BinaryenModuleRef module, int x) { BinaryenExpressionRef callOperands[] = {makeInt32(module, x)}; return BinaryenCall(module, "check", callOperands, 1, BinaryenTypeNone()); } void test_relooper() { BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenType localTypes[] = {BinaryenTypeInt32()}; BinaryenAddFunctionImport(module, "check", "module", "check", BinaryenTypeInt32(), BinaryenTypeNone()); { // trivial: just one block RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block = RelooperAddBlock(relooper, makeCallCheck(module, 1337)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "just-one-block", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // two blocks RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperAddBranch( block0, block1, NULL, NULL); // no condition, no code on branch BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "two-blocks", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // two blocks with code between them RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperAddBranch( block0, block1, NULL, makeDroppedInt32(module, 77)); // code on branch BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "two-blocks-plus-code", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // two blocks in a loop RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperAddBranch(block0, block1, NULL, NULL); RelooperAddBranch(block1, block0, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // two blocks in a loop with codes RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperAddBranch(block0, block1, NULL, makeDroppedInt32(module, 33)); RelooperAddBranch(block1, block0, NULL, makeDroppedInt32(module, -66)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop-plus-code", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // split RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); RelooperAddBranch(block0, block2, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "split", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // split + code RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); BinaryenExpressionRef temp = makeDroppedInt32(module, 10); RelooperAddBranch(block0, block1, makeInt32(module, 55), temp); RelooperAddBranch(block0, block2, NULL, makeDroppedInt32(module, 20)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "split-plus-code", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // if RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); RelooperAddBranch(block0, block2, NULL, NULL); RelooperAddBranch(block1, block2, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "if", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // if + code RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); BinaryenExpressionRef temp = makeDroppedInt32(module, -1); RelooperAddBranch(block0, block1, makeInt32(module, 55), temp); RelooperAddBranch(block0, block2, NULL, makeDroppedInt32(module, -2)); RelooperAddBranch(block1, block2, NULL, makeDroppedInt32(module, -3)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "if-plus-code", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // if-else RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); RelooperAddBranch(block0, block1, makeInt32(module, 55), NULL); RelooperAddBranch(block0, block2, NULL, NULL); RelooperAddBranch(block1, block3, NULL, NULL); RelooperAddBranch(block2, block3, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "if-else", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // loop+tail RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperAddBranch(block0, block1, NULL, NULL); RelooperAddBranch(block1, block0, makeInt32(module, 10), NULL); RelooperAddBranch(block1, block2, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop-tail", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // nontrivial loop + phi to head RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); RelooperBlockRef block4 = RelooperAddBlock(relooper, makeCallCheck(module, 4)); RelooperBlockRef block5 = RelooperAddBlock(relooper, makeCallCheck(module, 5)); RelooperBlockRef block6 = RelooperAddBlock(relooper, makeCallCheck(module, 6)); RelooperAddBranch(block0, block1, NULL, makeDroppedInt32(module, 10)); RelooperAddBranch(block1, block2, makeInt32(module, -2), NULL); RelooperAddBranch(block1, block6, NULL, makeDroppedInt32(module, 20)); RelooperAddBranch(block2, block3, makeInt32(module, -6), NULL); RelooperAddBranch(block2, block1, NULL, makeDroppedInt32(module, 30)); RelooperAddBranch(block3, block4, makeInt32(module, -10), NULL); RelooperAddBranch(block3, block5, NULL, NULL); RelooperAddBranch(block4, block5, NULL, NULL); RelooperAddBranch(block5, block6, NULL, makeDroppedInt32(module, 40)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "nontrivial-loop-plus-phi-to-head", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // switch RelooperRef relooper = RelooperCreate(module); BinaryenExpressionRef temp = makeInt32(module, -99); RelooperBlockRef block0 = RelooperAddBlockWithSwitch(relooper, makeCallCheck(module, 0), temp); // TODO: this example is not very good, the blocks should end in a |return| // as otherwise they // fall through to each other. A relooper block should end in // something that stops control flow, if it doesn't have branches // going out RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperBlockRef block3 = RelooperAddBlock(relooper, makeCallCheck(module, 3)); BinaryenIndex to_block1[] = {2, 5}; RelooperAddBranchForSwitch(block0, block1, to_block1, 2, NULL); BinaryenIndex to_block2[] = {4}; RelooperAddBranchForSwitch( block0, block2, to_block2, 1, makeDroppedInt32(module, 55)); RelooperAddBranchForSwitch(block0, block3, NULL, 0, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "switch", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, body); } { // duff's device RelooperRef relooper = RelooperCreate(module); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); RelooperAddBranch(block0, block1, makeInt32(module, 10), NULL); RelooperAddBranch(block0, block2, NULL, NULL); RelooperAddBranch(block1, block2, NULL, NULL); RelooperAddBranch(block2, block1, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 3); // use $3 as the helper var BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64(), BinaryenTypeInt32(), BinaryenTypeFloat32(), BinaryenTypeFloat64(), BinaryenTypeInt32()}; BinaryenFunctionRef sinker = BinaryenAddFunction(module, "duffs-device", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, sizeof(localTypes) / sizeof(BinaryenType), body); } { // return in a block RelooperRef relooper = RelooperCreate(module); BinaryenExpressionRef listList[] = { makeCallCheck(module, 42), BinaryenReturn(module, makeInt32(module, 1337))}; BinaryenExpressionRef list = BinaryenBlock(module, "the-list", listList, 2, -1); RelooperBlockRef block = RelooperAddBlock(relooper, list); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block, 0); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "return", BinaryenTypeNone(), BinaryenTypeInt32(), localTypes, 1, body); } printf("raw:\n"); BinaryenModulePrint(module); assert(BinaryenModuleValidate(module)); BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); printf("optimized:\n"); BinaryenModulePrint(module); BinaryenModuleDispose(module); } void test_binaries() { char buffer[1024]; size_t size; { // create a module and write it to binary BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenType ii_[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenType ii = BinaryenTypeCreate(ii_, 2); BinaryenExpressionRef x = BinaryenLocalGet(module, 0, BinaryenTypeInt32()), y = BinaryenLocalGet(module, 1, BinaryenTypeInt32()); BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y); BinaryenFunctionRef adder = BinaryenAddFunction( module, "adder", ii, BinaryenTypeInt32(), NULL, 0, add); BinaryenSetDebugInfo(1); // include names section size = BinaryenModuleWrite(module, buffer, 1024); // write out the module BinaryenSetDebugInfo(0); BinaryenModuleDispose(module); } assert(size > 0); assert(size < 512); // this is a tiny module // read the module from the binary BinaryenModuleRef module = BinaryenModuleRead(buffer, size); // validate, print, and free assert(BinaryenModuleValidate(module)); printf("module loaded from binary form:\n"); BinaryenModulePrint(module); // write the s-expr representation of the module. BinaryenModuleWriteText(module, buffer, 1024); printf("module s-expr printed (in memory):\n%s\n", buffer); // writ the s-expr representation to a pointer which is managed by the // caller char* text = BinaryenModuleAllocateAndWriteText(module); printf("module s-expr printed (in memory, caller-owned):\n%s\n", text); free(text); BinaryenModuleDispose(module); } void test_interpret() { // create a simple module with a start method that prints a number, and // interpret it, printing that number. BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenType iparams[2] = {BinaryenTypeInt32()}; BinaryenAddFunctionImport(module, "print-i32", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); BinaryenExpressionRef callOperands[] = {makeInt32(module, 1234)}; BinaryenExpressionRef call = BinaryenCall(module, "print-i32", callOperands, 1, BinaryenTypeNone()); BinaryenFunctionRef starter = BinaryenAddFunction( module, "starter", BinaryenTypeNone(), BinaryenTypeNone(), NULL, 0, call); BinaryenSetStart(module, starter); BinaryenModulePrint(module); assert(BinaryenModuleValidate(module)); BinaryenModuleInterpret(module); BinaryenModuleDispose(module); } void test_nonvalid() { // create a module that fails to validate { BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenType localTypes[] = {BinaryenTypeInt32()}; BinaryenFunctionRef func = BinaryenAddFunction( module, "func", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 1, BinaryenLocalSet(module, 0, makeInt64(module, 1234)) // wrong type! ); BinaryenModulePrint(module); printf("validation: %d\n", BinaryenModuleValidate(module)); BinaryenModuleDispose(module); } } void test_color_status() { int i; // save old state const int old_state = BinaryenAreColorsEnabled(); // Check that we can set the state to both {0, 1} for (i = 0; i <= 1; i++) { BinaryenSetColorsEnabled(i); assert(BinaryenAreColorsEnabled() == i); } BinaryenSetColorsEnabled(old_state); } void test_for_each() { BinaryenIndex i; BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenFunctionRef fns[3] = {}; fns[0] = BinaryenAddFunction(module, "fn0", BinaryenTypeNone(), BinaryenTypeNone(), NULL, 0, BinaryenNop(module)); fns[1] = BinaryenAddFunction(module, "fn1", BinaryenTypeNone(), BinaryenTypeNone(), NULL, 0, BinaryenNop(module)); fns[2] = BinaryenAddFunction(module, "fn2", BinaryenTypeNone(), BinaryenTypeNone(), NULL, 0, BinaryenNop(module)); { for (i = 0; i < BinaryenGetNumFunctions(module); i++) { assert(BinaryenGetFunctionByIndex(module, i) == fns[i]); } BinaryenExportRef exps[3] = {0}; exps[0] = BinaryenAddFunctionExport(module, "fn0", "export0"); exps[1] = BinaryenAddFunctionExport(module, "fn1", "export1"); exps[2] = BinaryenAddFunctionExport(module, "fn2", "export2"); for (i = 0; i < BinaryenGetNumExports(module); i++) { assert(BinaryenGetExportByIndex(module, i) == exps[i]); } const char* segments[] = {"hello, world", "segment data 2"}; const uint32_t expected_offsets[] = {10, 125}; bool segmentPassive[] = {false, false}; BinaryenIndex segmentSizes[] = {12, 14}; BinaryenExpressionRef segmentOffsets[] = { BinaryenConst(module, BinaryenLiteralInt32(expected_offsets[0])), BinaryenGlobalGet(module, "a-global", BinaryenTypeInt32())}; BinaryenSetMemory(module, 1, 256, "mem", segments, segmentPassive, segmentOffsets, segmentSizes, 2, 0); BinaryenAddGlobal(module, "a-global", BinaryenTypeInt32(), 0, makeInt32(module, expected_offsets[1])); for (i = 0; i < BinaryenGetNumMemorySegments(module); i++) { char out[15] = {}; assert(BinaryenGetMemorySegmentByteOffset(module, i) == expected_offsets[i]); assert(BinaryenGetMemorySegmentByteLength(module, i) == segmentSizes[i]); BinaryenCopyMemorySegmentData(module, i, out); assert(0 == strcmp(segments[i], out)); } } { const char* funcNames[] = {BinaryenFunctionGetName(fns[0]), BinaryenFunctionGetName(fns[1]), BinaryenFunctionGetName(fns[2])}; BinaryenExpressionRef constExprRef = BinaryenConst(module, BinaryenLiteralInt32(0)); BinaryenAddTable(module, "0", 1, 1, BinaryenTypeFuncref()); BinaryenAddActiveElementSegment( module, "0", "0", funcNames, 3, constExprRef); assert(1 == BinaryenGetNumElementSegments(module)); BinaryenElementSegmentRef segment = BinaryenGetElementSegmentByIndex(module, 0); assert(constExprRef == BinaryenElementSegmentGetOffset(segment)); for (i = 0; i != BinaryenElementSegmentGetLength(segment); ++i) { const char* str = BinaryenElementSegmentGetData(segment, i); assert(0 == strcmp(funcNames[i], str)); } } BinaryenModulePrint(module); BinaryenModuleDispose(module); } void test_func_opt() { BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenType ii_[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenType ii = BinaryenTypeCreate(ii_, 2); BinaryenExpressionRef x = BinaryenConst(module, BinaryenLiteralInt32(1)), y = BinaryenConst(module, BinaryenLiteralInt32(3)); BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y); BinaryenFunctionRef adder = BinaryenAddFunction( module, "adder", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, add); puts("module with a function to optimize:"); BinaryenModulePrint(module); assert(BinaryenModuleValidate(module)); BinaryenFunctionOptimize(adder, module); assert(BinaryenModuleValidate(module)); puts("optimized:"); BinaryenModulePrint(module); BinaryenModuleDispose(module); } int main() { test_types(); test_features(); test_core(); test_unreachable(); test_relooper(); test_binaries(); test_interpret(); test_nonvalid(); test_color_status(); test_for_each(); test_func_opt(); return 0; } binaryen-version_108/test/example/c-api-kitchen-sink.txt000066400000000000000000001653411423707623100235100ustar00rootroot00000000000000 // BinaryenTypeNone: 0 // BinaryenTypeUnreachable: 1 // BinaryenTypeInt32: 2 // BinaryenTypeInt64: 3 // BinaryenTypeFloat32: 4 // BinaryenTypeFloat64: 5 // BinaryenTypeVec128: 6 // BinaryenTypeFuncref: 7 // BinaryenTypeExternref: 8 // BinaryenTypeAnyref: 8 // BinaryenTypeEqref: 9 // BinaryenTypeI31ref: 10 // BinaryenTypeDataref: 11 // BinaryenTypeAuto: -1 BinaryenFeatureMVP: 0 BinaryenFeatureAtomics: 1 BinaryenFeatureBulkMemory: 16 BinaryenFeatureMutableGlobals: 2 BinaryenFeatureNontrappingFPToInt: 4 BinaryenFeatureSignExt: 32 BinaryenFeatureSIMD128: 8 BinaryenFeatureExceptionHandling: 64 BinaryenFeatureTailCall: 128 BinaryenFeatureReferenceTypes: 256 BinaryenFeatureMultivalue: 512 BinaryenFeatureGC: 1024 BinaryenFeatureMemory64: 2048 BinaryenFeatureTypedFunctionReferences: 4096 BinaryenFeatureRelaxedSIMD: 16384 BinaryenFeatureExtendedConst: 32768 BinaryenFeatureAll: 57343 (f32.neg (f32.const -33.61199951171875) ) (table.set $0 (i32.const 0) (ref.func "$kitchen()sinker") ) (table.get $0 (i32.const 0) ) (table.size $0) (table.grow $0 (ref.null func) (i32.const 0) ) (module (type $i32_i64_f32_f64_=>_i32 (func (param i32 i64 f32 f64) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_f64_=>_f32 (func (param i32 f64) (result f32))) (type $none_=>_none (func)) (import "module" "base" (func $an-imported (param i32 f64) (result f32))) (global $a-global i32 (i32.const 7)) (global $a-mutable-global (mut f32) (f32.const 7.5)) (memory $0 (shared 1 256)) (data (i32.const 10) "hello, world") (data "I am passive") (table $tab 0 100 funcref) (table $0 1 1 funcref) (elem $0 (table $0) (i32.const 0) func "$kitchen()sinker") (elem $passive func "$kitchen()sinker") (tag $a-tag (param i32)) (export "kitchen_sinker" (func "$kitchen()sinker")) (export "mem" (memory $0)) (start $starter) (func "$kitchen()sinker" (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32) (local $4 i32) (local $5 anyref) (block $the-body (result i32) (block $the-nothing (drop (block $the-value (result i32) (drop (i32.clz (i32.const -10) ) ) (drop (i64.ctz (i64.const -22) ) ) (drop (i32.popcnt (i32.const -10) ) ) (drop (f32.neg (f32.const -33.61199951171875) ) ) (drop (f64.abs (f64.const -9005.841) ) ) (drop (f32.ceil (f32.const -33.61199951171875) ) ) (drop (f64.floor (f64.const -9005.841) ) ) (drop (f32.trunc (f32.const -33.61199951171875) ) ) (drop (f32.nearest (f32.const -33.61199951171875) ) ) (drop (f64.sqrt (f64.const -9005.841) ) ) (drop (i32.eqz (i32.const -10) ) ) (drop (i64.extend_i32_s (i32.const -10) ) ) (drop (i64.extend_i32_u (i32.const -10) ) ) (drop (i32.wrap_i64 (i64.const -22) ) ) (drop (i32.trunc_f32_s (f32.const -33.61199951171875) ) ) (drop (i64.trunc_f32_s (f32.const -33.61199951171875) ) ) (drop (i32.trunc_f32_u (f32.const -33.61199951171875) ) ) (drop (i64.trunc_f32_u (f32.const -33.61199951171875) ) ) (drop (i32.trunc_f64_s (f64.const -9005.841) ) ) (drop (i64.trunc_f64_s (f64.const -9005.841) ) ) (drop (i32.trunc_f64_u (f64.const -9005.841) ) ) (drop (i64.trunc_f64_u (f64.const -9005.841) ) ) (drop (i32.trunc_sat_f32_s (f32.const -33.61199951171875) ) ) (drop (i64.trunc_sat_f32_s (f32.const -33.61199951171875) ) ) (drop (i32.trunc_sat_f32_u (f32.const -33.61199951171875) ) ) (drop (i64.trunc_sat_f32_u (f32.const -33.61199951171875) ) ) (drop (i32.trunc_sat_f64_s (f64.const -9005.841) ) ) (drop (i64.trunc_sat_f64_s (f64.const -9005.841) ) ) (drop (i32.trunc_sat_f64_u (f64.const -9005.841) ) ) (drop (i64.trunc_sat_f64_u (f64.const -9005.841) ) ) (drop (i32.reinterpret_f32 (f32.const -33.61199951171875) ) ) (drop (i64.reinterpret_f64 (f64.const -9005.841) ) ) (drop (f32.convert_i32_s (i32.const -10) ) ) (drop (f64.convert_i32_s (i32.const -10) ) ) (drop (f32.convert_i32_u (i32.const -10) ) ) (drop (f64.convert_i32_u (i32.const -10) ) ) (drop (f32.convert_i64_s (i64.const -22) ) ) (drop (f64.convert_i64_s (i64.const -22) ) ) (drop (f32.convert_i64_u (i64.const -22) ) ) (drop (f64.convert_i64_u (i64.const -22) ) ) (drop (f64.promote_f32 (f32.const -33.61199951171875) ) ) (drop (f32.demote_f64 (f64.const -9005.841) ) ) (drop (f32.reinterpret_i32 (i32.const -10) ) ) (drop (f64.reinterpret_i64 (i64.const -22) ) ) (drop (i8x16.splat (i32.const -10) ) ) (drop (i16x8.splat (i32.const -10) ) ) (drop (i32x4.splat (i32.const -10) ) ) (drop (i64x2.splat (i64.const -22) ) ) (drop (f32x4.splat (f32.const -33.61199951171875) ) ) (drop (f64x2.splat (f64.const -9005.841) ) ) (drop (v128.not (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.any_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.popcnt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.all_true (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.bitmask (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.sqrt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.neg (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.sqrt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.convert_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.convert_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_low_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_high_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_low_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extend_high_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_low_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_high_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_low_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extend_high_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_high_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extend_high_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.convert_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.convert_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f64x2_s_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.trunc_sat_f64x2_u_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.demote_f64x2_zero (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.promote_low_f32x4 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32.add (i32.const -10) (i32.const -11) ) ) (drop (f64.sub (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (i32.div_s (i32.const -10) (i32.const -11) ) ) (drop (i64.div_u (i64.const -22) (i64.const -23) ) ) (drop (i64.rem_s (i64.const -22) (i64.const -23) ) ) (drop (i32.rem_u (i32.const -10) (i32.const -11) ) ) (drop (i32.and (i32.const -10) (i32.const -11) ) ) (drop (i64.or (i64.const -22) (i64.const -23) ) ) (drop (i32.xor (i32.const -10) (i32.const -11) ) ) (drop (i64.shl (i64.const -22) (i64.const -23) ) ) (drop (i64.shr_u (i64.const -22) (i64.const -23) ) ) (drop (i32.shr_s (i32.const -10) (i32.const -11) ) ) (drop (i32.rotl (i32.const -10) (i32.const -11) ) ) (drop (i64.rotr (i64.const -22) (i64.const -23) ) ) (drop (f32.div (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.copysign (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f32.min (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.max (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (i32.eq (i32.const -10) (i32.const -11) ) ) (drop (f32.ne (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (i32.lt_s (i32.const -10) (i32.const -11) ) ) (drop (i64.lt_u (i64.const -22) (i64.const -23) ) ) (drop (i64.le_s (i64.const -22) (i64.const -23) ) ) (drop (i32.le_u (i32.const -10) (i32.const -11) ) ) (drop (i64.gt_s (i64.const -22) (i64.const -23) ) ) (drop (i32.gt_u (i32.const -10) (i32.const -11) ) ) (drop (i32.ge_s (i32.const -10) (i32.const -11) ) ) (drop (i64.ge_u (i64.const -22) (i64.const -23) ) ) (drop (f32.lt (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (f64.le (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f64.gt (f64.const -9005.841) (f64.const -9007.333) ) ) (drop (f32.ge (f32.const -33.61199951171875) (f32.const -62.5) ) ) (drop (i8x16.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.lt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.gt_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.le_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.ge_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.lt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.gt_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.le_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.ge_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.lt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.gt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.le (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ge (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.eq (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ne (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.lt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.gt (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.le (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ge (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.and (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.or (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.xor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.andnot (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.add_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.sub_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.avgr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.add_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.sub_sat_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.avgr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.q15mulr_sat_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_low_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_high_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_low_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extmul_high_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_low_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_high_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_low_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extmul_high_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.min_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.min_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.max_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.max_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.dot_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_low_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_high_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_low_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extmul_high_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.div (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.min (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.max (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.pmin (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.pmax (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.ceil (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.floor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.trunc (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.nearest (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.add (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.sub (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.mul (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.div (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.min (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.max (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.pmin (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.pmax (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.ceil (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.floor (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.trunc (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.nearest (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extadd_pairwise_i8x16_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extadd_pairwise_i8x16_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extadd_pairwise_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extadd_pairwise_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.narrow_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.narrow_i16x8_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.narrow_i32x4_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.narrow_i32x4_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.swizzle (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.extract_lane_s 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.extract_lane_u 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extract_lane_s 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i16x8.extract_lane_u 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i32x4.extract_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i64x2.extract_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f32x4.extract_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (f64x2.extract_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (i8x16.replace_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i16x8.replace_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i32x4.replace_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 42) ) ) (drop (i64x2.replace_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i64.const 42) ) ) (drop (f32x4.replace_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (f32.const 42) ) ) (drop (f64x2.replace_lane 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (f64.const 42) ) ) (drop (i8x16.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i8x16.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i8x16.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i16x8.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i32x4.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shl (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shr_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (i64x2.shr_u (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (i32.const 1) ) ) (drop (v128.load8_splat (i32.const 128) ) ) (drop (v128.load16_splat offset=16 align=1 (i32.const 128) ) ) (drop (v128.load32_splat offset=16 (i32.const 128) ) ) (drop (v128.load64_splat align=4 (i32.const 128) ) ) (drop (v128.load8x8_s (i32.const 128) ) ) (drop (v128.load8x8_u (i32.const 128) ) ) (drop (v128.load16x4_s (i32.const 128) ) ) (drop (v128.load16x4_u (i32.const 128) ) ) (drop (v128.load32x2_s (i32.const 128) ) ) (drop (v128.load32x2_u (i32.const 128) ) ) (drop (v128.load32_zero (i32.const 128) ) ) (drop (v128.load64_zero (i32.const 128) ) ) (drop (v128.load8_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load16_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load32_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.load64_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (v128.store8_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store16_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store32_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.store64_lane 0 (i32.const 128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (drop (i8x16.shuffle 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (drop (v128.bitselect (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (memory.init 0 (i32.const 1024) (i32.const 0) (i32.const 12) ) (data.drop 0) (memory.copy (i32.const 2048) (i32.const 1024) (i32.const 12) ) (memory.fill (i32.const 0) (i32.const 42) (i32.const 1024) ) (block ) (if (i32.const 1) (drop (i32.const 2) ) (drop (i32.const 3) ) ) (if (i32.const 4) (drop (i32.const 5) ) ) (drop (loop $in (result i32) (i32.const 0) ) ) (drop (loop (result i32) (i32.const 0) ) ) (drop (br_if $the-value (i32.const 1) (i32.const 0) ) ) (br_if $the-nothing (i32.const 2) ) (br $the-value (i32.const 3) ) (br $the-nothing) (br_table $the-value $the-value (i32.const 1) (i32.const 0) ) (br_table $the-nothing $the-nothing (i32.const 2) ) (drop (i32.eqz (call "$kitchen()sinker" (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) ) (drop (i32.eqz (i32.trunc_f32_s (call $an-imported (i32.const 13) (f64.const 3.7) ) ) ) ) (drop (i32.eqz (call_indirect $tab (type $i32_i64_f32_f64_=>_i32) (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) (i32.const 2449) ) ) ) (drop (local.get $0) ) (local.set $0 (i32.const 101) ) (drop (local.tee $0 (i32.const 102) ) ) (drop (i32.load (i32.const 1) ) ) (drop (i64.load16_s offset=2 align=1 (i32.const 8) ) ) (drop (f32.load (i32.const 2) ) ) (drop (f64.load offset=2 (i32.const 9) ) ) (i32.store (i32.const 10) (i32.const 11) ) (i64.store offset=2 align=4 (i32.const 110) (i64.const 111) ) (drop (select (i32.const 3) (i32.const 5) (i32.const 1) ) ) (return (i32.const 1337) ) (return_call "$kitchen()sinker" (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) (return_call_indirect $tab (type $i32_i64_f32_f64_=>_i32) (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) (i32.const 2449) ) (drop (ref.is_null (ref.null any) ) ) (drop (ref.is_null (ref.func "$kitchen()sinker") ) ) (drop (select (result funcref) (ref.null func) (ref.func "$kitchen()sinker") (i32.const 1) ) ) (drop (ref.eq (ref.null eq) (ref.null eq) ) ) (drop (ref.is_func (ref.null any) ) ) (drop (ref.is_data (ref.null any) ) ) (drop (ref.is_i31 (ref.null any) ) ) (drop (ref.as_non_null (ref.null any) ) ) (drop (ref.as_func (ref.null any) ) ) (drop (ref.as_data (ref.null any) ) ) (drop (ref.as_i31 (ref.null any) ) ) (try (do (throw $a-tag (i32.const 0) ) ) (catch $a-tag (drop (pop i32) ) ) (catch_all (nop) ) ) (try $try_outer (do (try (do (throw $a-tag (i32.const 0) ) ) (delegate $try_outer) ) ) (catch_all (nop) ) ) (i32.atomic.store (i32.const 0) (i32.atomic.load (i32.const 0) ) ) (drop (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const 111) ) ) (drop (memory.atomic.notify (i32.const 0) (i32.const 0) ) ) (atomic.fence) (drop (tuple.make (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) (drop (tuple.extract 2 (tuple.make (i32.const 13) (i64.const 37) (f32.const 1.2999999523162842) (f64.const 3.7) ) ) ) (drop (pop i32) ) (drop (pop i64) ) (drop (pop f32) ) (drop (pop f64) ) (drop (pop funcref) ) (drop (pop anyref) ) (drop (pop i32 i64 f32 f64) ) (drop (memory.size) ) (drop (memory.grow (i32.const 0) ) ) (drop (i31.new (i32.const 0) ) ) (drop (i31.get_s (i31.new (i32.const 1) ) ) ) (drop (i31.get_u (i31.new (i32.const 2) ) ) ) (nop) (unreachable) ) ) ) (i32.const 42) ) ) (func $starter (nop) ) ) (module (type $none_=>_i32 (func (result i32))) (type $none_=>_i64 (func (result i64))) (func $unreachable-fn (result i32) (call_indirect (type $none_=>_i64) (unreachable) ) ) ) raw: (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (import "module" "check" (func $check (param i32))) (func $just-one-block (local $0 i32) (call $check (i32.const 1337) ) ) (func $two-blocks (local $0 i32) (block (call $check (i32.const 0) ) (call $check (i32.const 1) ) ) ) (func $two-blocks-plus-code (local $0 i32) (block (block (call $check (i32.const 0) ) (drop (i32.const 77) ) ) (call $check (i32.const 1) ) ) ) (func $loop (local $0 i32) (loop $shape$0$continue (block (call $check (i32.const 0) ) (call $check (i32.const 1) ) ) (block (br $shape$0$continue) ) ) ) (func $loop-plus-code (local $0 i32) (loop $shape$0$continue (block (block (call $check (i32.const 0) ) (drop (i32.const 33) ) ) (call $check (i32.const 1) ) ) (block (drop (i32.const -66) ) (br $shape$0$continue) ) ) ) (func $split (local $0 i32) (call $check (i32.const 0) ) (if (i32.const 55) (block (call $check (i32.const 1) ) ) (block (call $check (i32.const 2) ) ) ) ) (func $split-plus-code (local $0 i32) (call $check (i32.const 0) ) (if (i32.const 55) (block (drop (i32.const 10) ) (block (call $check (i32.const 1) ) ) ) (block (drop (i32.const 20) ) (block (call $check (i32.const 2) ) ) ) ) ) (func $if (local $0 i32) (block $block$3$break (call $check (i32.const 0) ) (if (i32.const 55) (block (call $check (i32.const 1) ) (block (br $block$3$break) ) ) (br $block$3$break) ) ) (block (call $check (i32.const 2) ) ) ) (func $if-plus-code (local $0 i32) (block $block$3$break (call $check (i32.const 0) ) (if (i32.const 55) (block (drop (i32.const -1) ) (block (call $check (i32.const 1) ) (block (drop (i32.const -3) ) (br $block$3$break) ) ) ) (block (drop (i32.const -2) ) (br $block$3$break) ) ) ) (block (call $check (i32.const 2) ) ) ) (func $if-else (local $0 i32) (block $block$4$break (call $check (i32.const 0) ) (if (i32.const 55) (block (call $check (i32.const 1) ) (block (br $block$4$break) ) ) (block (call $check (i32.const 2) ) (block (br $block$4$break) ) ) ) ) (block (call $check (i32.const 3) ) ) ) (func $loop-tail (local $0 i32) (block $block$3$break (loop $shape$0$continue (block (call $check (i32.const 0) ) (call $check (i32.const 1) ) ) (if (i32.const 10) (br $shape$0$continue) (br $block$3$break) ) ) ) (block (call $check (i32.const 2) ) ) ) (func $nontrivial-loop-plus-phi-to-head (local $0 i32) (block $block$2$break (call $check (i32.const 0) ) (block (drop (i32.const 10) ) (br $block$2$break) ) ) (block (block $block$7$break (block $block$4$break (loop $shape$1$continue (block $block$3$break (call $check (i32.const 1) ) (if (i32.const -2) (br $block$3$break) (block (drop (i32.const 20) ) (br $block$7$break) ) ) ) (block (call $check (i32.const 2) ) (if (i32.const -6) (br $block$4$break) (block (drop (i32.const 30) ) (br $shape$1$continue) ) ) ) ) ) (block (block $block$6$break (call $check (i32.const 3) ) (if (i32.const -10) (block (call $check (i32.const 4) ) (block (br $block$6$break) ) ) (br $block$6$break) ) ) (block (call $check (i32.const 5) ) (block (drop (i32.const 40) ) (br $block$7$break) ) ) ) ) (block (call $check (i32.const 6) ) ) ) ) (func $switch (local $0 i32) (call $check (i32.const 0) ) (block $switch$1$leave (block $switch$1$default (block $switch$1$case$3 (block $switch$1$case$2 (br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default (i32.const -99) ) ) (block (block (call $check (i32.const 1) ) ) ) (br $switch$1$leave) ) (block (drop (i32.const 55) ) (block (call $check (i32.const 2) ) ) ) (br $switch$1$leave) ) (block (block (call $check (i32.const 3) ) ) ) (br $switch$1$leave) ) ) (func $duffs-device (local $0 i32) (local $1 i32) (local $2 i64) (local $3 i32) (local $4 f32) (local $5 f64) (local $6 i32) (block (block $block$3$break (block $block$2$break (call $check (i32.const 0) ) (if (i32.const 10) (block (local.set $3 (i32.const 2) ) (br $block$2$break) ) (block (local.set $3 (i32.const 3) ) (br $block$3$break) ) ) ) ) ) (loop $shape$1$continue (if (i32.eq (local.get $3) (i32.const 2) ) (block (local.set $3 (i32.const 0) ) (call $check (i32.const 1) ) (block (local.set $3 (i32.const 3) ) (br $shape$1$continue) ) ) (if (i32.eq (local.get $3) (i32.const 3) ) (block (local.set $3 (i32.const 0) ) (call $check (i32.const 2) ) (block (local.set $3 (i32.const 2) ) (br $shape$1$continue) ) ) ) ) ) ) (func $return (result i32) (local $0 i32) (block (call $check (i32.const 42) ) (return (i32.const 1337) ) ) ) ) optimized: (module ) module loaded from binary form: (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (func $adder (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) module s-expr printed (in memory): (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (func $adder (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) module s-expr printed (in memory, caller-owned): (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (func $adder (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) (module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "spectest" "print" (func $print-i32 (param i32))) (start $starter) (func $starter (call $print-i32 (i32.const 1234) ) ) ) 1234 : i32 (module (type $none_=>_none (func)) (func $func (local $0 i32) (local.set $0 (i64.const 1234) ) ) ) validation: 0 (module (type $none_=>_none (func)) (global $a-global i32 (i32.const 125)) (memory $0 1 256) (data (i32.const 10) "hello, world") (data (global.get $a-global) "segment data 2") (table $0 1 1 funcref) (elem $0 (i32.const 0) $fn0 $fn1 $fn2) (export "export0" (func $fn0)) (export "export1" (func $fn1)) (export "export2" (func $fn2)) (export "mem" (memory $0)) (func $fn0 (nop) ) (func $fn1 (nop) ) (func $fn2 (nop) ) ) module with a function to optimize: (module (type $none_=>_i32 (func (result i32))) (func $adder (result i32) (i32.add (i32.const 1) (i32.const 3) ) ) ) optimized: (module (type $none_=>_i32 (func (result i32))) (func $adder (result i32) (i32.const 4) ) ) binaryen-version_108/test/example/c-api-multiple-tables.c000066400000000000000000000077671423707623100236360ustar00rootroot00000000000000#include #include #include // "hello world" type example: create a function that adds two i32s and returns // the result int main() { BinaryenModuleRef module = BinaryenModuleCreate(); BinaryenModuleSetFeatures(module, BinaryenFeatureReferenceTypes()); // Create a function type for i32 (i32, i32) BinaryenType ii[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenType params = BinaryenTypeCreate(ii, 2); BinaryenType results = BinaryenTypeInt32(); assert(BinaryenGetNumTables(module) == 0); { // Get the 0 and 1 arguments, and add them BinaryenExpressionRef x = BinaryenLocalGet(module, 0, BinaryenTypeInt32()), y = BinaryenLocalGet(module, 1, BinaryenTypeInt32()); BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y); // Create the add function // Note: no additional local variables // Note: no basic blocks here, we are an AST. The function body is just an // expression node. BinaryenFunctionRef adder = BinaryenAddFunction(module, "adder", params, results, NULL, 0, add); const char* funcNames[] = {"adder"}; BinaryenAddTable(module, "tab", 1, 1, BinaryenTypeFuncref()); assert(BinaryenGetTable(module, "tab") != NULL); BinaryenAddActiveElementSegment( module, "tab", "0", funcNames, 1, BinaryenConst(module, BinaryenLiteralInt32(0))); BinaryenAddTable(module, "t2", 1, 1, BinaryenTypeFuncref()); BinaryenAddActiveElementSegment( module, "t2", "1", funcNames, 1, BinaryenConst(module, BinaryenLiteralInt32(0))); BinaryenAddPassiveElementSegment(module, "passive", funcNames, 1); assert(NULL != BinaryenGetElementSegmentByIndex(module, 2)); assert(1 == BinaryenElementSegmentIsPassive( BinaryenGetElementSegment(module, "passive"))); BinaryenTableRef t2 = BinaryenGetTableByIndex(module, 1); assert(t2 != NULL); BinaryenElementSegmentRef elem1 = BinaryenGetElementSegment(module, "1"); assert(elem1 != NULL); assert(strcmp(BinaryenElementSegmentGetName(elem1), "1") == 0); assert(strcmp(BinaryenElementSegmentGetTable(elem1), "t2") == 0); assert(BinaryenElementSegmentGetLength(elem1) == 1); assert(strcmp(BinaryenElementSegmentGetData(elem1, 0), funcNames[0]) == 0); assert(strcmp(BinaryenTableGetName(t2), "t2") == 0); BinaryenTableSetName(t2, "table2"); BinaryenModuleUpdateMaps(module); assert(strcmp(BinaryenTableGetName(t2), "table2") == 0); BinaryenElementSegmentSetTable(elem1, "table2"); assert(strcmp(BinaryenElementSegmentGetTable(elem1), "table2") == 0); assert(BinaryenTableGetInitial(t2) == 1); BinaryenTableSetInitial(t2, 2); assert(BinaryenTableGetInitial(t2) == 2); assert(BinaryenTableHasMax(t2) == 1); assert(BinaryenTableGetMax(t2) == 1); BinaryenTableSetMax(t2, 2); assert(BinaryenTableGetMax(t2) == 2); assert(strcmp(BinaryenTableImportGetModule(t2), "") == 0); assert(strcmp(BinaryenTableImportGetBase(t2), "") == 0); assert(BinaryenGetNumTables(module) == 2); } { // Get the 0 and 1 arguments, and add them BinaryenExpressionRef operands[] = { BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenLocalGet(module, 1, BinaryenTypeInt32())}; BinaryenExpressionRef add_indirect = BinaryenCallIndirect(module, "tab", BinaryenConst(module, BinaryenLiteralInt32(0)), operands, 2, params, results); BinaryenCallIndirectSetTable(add_indirect, "t2"); BinaryenFunctionRef call_adder_indirectly = BinaryenAddFunction( module, "call_adder_indirect", params, results, NULL, 0, add_indirect); } // Print it out BinaryenModulePrint(module); // Clean up the module, which owns all the objects we created above BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/c-api-multiple-tables.txt000066400000000000000000000010371423707623100242130ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (table $tab 1 1 funcref) (table $table2 2 2 funcref) (elem $0 (table $tab) (i32.const 0) func $adder) (elem $1 (table $table2) (i32.const 0) func $adder) (elem $passive func $adder) (func $adder (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) (func $call_adder_indirect (param $0 i32) (param $1 i32) (result i32) (call_indirect $t2 (type $i32_i32_=>_i32) (local.get $0) (local.get $1) (i32.const 0) ) ) ) binaryen-version_108/test/example/c-api-relooper-unreachable-if.cpp000066400000000000000000001316361423707623100255560ustar00rootroot00000000000000// beginning a Binaryen API trace #include "binaryen-c.h" #include #include #include int main() { std::map expressions; std::map functions; std::map relooperBlocks; BinaryenModuleRef the_module = NULL; RelooperRef the_relooper = NULL; the_module = BinaryenModuleCreate(); expressions[size_t(NULL)] = BinaryenExpressionRef(NULL); BinaryenModuleAutoDrop(the_module); { const char* segments[] = {0}; bool segmentPassive[] = {false}; BinaryenExpressionRef segmentOffsets[] = {0}; BinaryenIndex segmentSizes[] = {0}; BinaryenSetMemory(the_module, 256, 256, "memory", segments, segmentPassive, segmentOffsets, segmentSizes, 0, 0); } the_relooper = RelooperCreate(the_module); expressions[1] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[2] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[3] = BinaryenStore( the_module, 4, 0, 0, expressions[2], expressions[1], BinaryenTypeInt32()); expressions[4] = BinaryenReturn(the_module, expressions[0]); { BinaryenExpressionRef children[] = {expressions[3], expressions[4]}; expressions[5] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[5]); expressions[6] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[7] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[6]); expressions[8] = BinaryenLocalSet(the_module, 0, expressions[7]); relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[8]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); expressions[9] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 1); { BinaryenType varTypes[] = { BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[0] = BinaryenAddFunction(the_module, "tinycore::eh_personality", BinaryenTypeNone(), BinaryenTypeNone(), varTypes, 3, expressions[9]); } BinaryenAddFunctionExport( the_module, "tinycore::eh_personality", "tinycore::eh_personality"); the_relooper = RelooperCreate(the_module); expressions[10] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[12] = BinaryenStore( the_module, 4, 0, 0, expressions[11], expressions[10], BinaryenTypeInt32()); expressions[13] = BinaryenReturn(the_module, expressions[0]); { BinaryenExpressionRef children[] = {expressions[12], expressions[13]}; expressions[14] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[14]); expressions[15] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[16] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[15]); expressions[17] = BinaryenLocalSet(the_module, 0, expressions[16]); relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[17]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); expressions[18] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 1); { BinaryenType varTypes[] = { BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[1] = BinaryenAddFunction(the_module, "tinycore::eh_unwind_resume", BinaryenTypeNone(), BinaryenTypeNone(), varTypes, 3, expressions[18]); } BinaryenAddFunctionExport( the_module, "tinycore::eh_unwind_resume", "tinycore::eh_unwind_resume"); the_relooper = RelooperCreate(the_module); { BinaryenExpressionRef children[] = {0}; expressions[19] = BinaryenBlock(the_module, "bb0", children, 0, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[19]); { BinaryenExpressionRef children[] = {0}; expressions[20] = BinaryenBlock(the_module, "bb1", children, 0, BinaryenTypeAuto()); } relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[20]); RelooperAddBranch( relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[1], expressions[0], expressions[0]); expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[22] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[21]); expressions[23] = BinaryenLocalSet(the_module, 0, expressions[22]); relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[23]); RelooperAddBranch( relooperBlocks[2], relooperBlocks[0], expressions[0], expressions[0]); expressions[24] = RelooperRenderAndDispose(the_relooper, relooperBlocks[2], 1); { BinaryenType varTypes[] = { BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[2] = BinaryenAddFunction(the_module, "tinycore::panic_fmt", BinaryenTypeNone(), BinaryenTypeNone(), varTypes, 3, expressions[24]); } BinaryenAddFunctionExport( the_module, "tinycore::panic_fmt", "tinycore::panic_fmt"); the_relooper = RelooperCreate(the_module); expressions[25] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[26] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[27] = BinaryenStore( the_module, 4, 0, 0, expressions[26], expressions[25], BinaryenTypeInt32()); expressions[28] = BinaryenReturn(the_module, expressions[0]); { BinaryenExpressionRef children[] = {expressions[27], expressions[28]}; expressions[29] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[29]); expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[31] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[30]); expressions[32] = BinaryenLocalSet(the_module, 0, expressions[31]); relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[32]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); expressions[33] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 1); { BinaryenType varTypes[] = { BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[3] = BinaryenAddFunction(the_module, "tinycore::rust_eh_register_frames", BinaryenTypeNone(), BinaryenTypeNone(), varTypes, 3, expressions[33]); } BinaryenAddFunctionExport(the_module, "tinycore::rust_eh_register_frames", "tinycore::rust_eh_register_frames"); the_relooper = RelooperCreate(the_module); expressions[34] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[35] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[36] = BinaryenStore( the_module, 4, 0, 0, expressions[35], expressions[34], BinaryenTypeInt32()); expressions[37] = BinaryenReturn(the_module, expressions[0]); { BinaryenExpressionRef children[] = {expressions[36], expressions[37]}; expressions[38] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[38]); expressions[39] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[40] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[39]); expressions[41] = BinaryenLocalSet(the_module, 0, expressions[40]); relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[41]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); expressions[42] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 1); { BinaryenType varTypes[] = { BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[4] = BinaryenAddFunction(the_module, "tinycore::rust_eh_unregister_frames", BinaryenTypeNone(), BinaryenTypeNone(), varTypes, 3, expressions[42]); } BinaryenAddFunctionExport(the_module, "tinycore::rust_eh_unregister_frames", "tinycore::rust_eh_unregister_frames"); the_relooper = RelooperCreate(the_module); expressions[43] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[44] = BinaryenLocalSet(the_module, 1, expressions[43]); expressions[45] = BinaryenLocalGet(the_module, 1, BinaryenTypeInt32()); expressions[46] = BinaryenLocalSet(the_module, 2, expressions[45]); BinaryenAddFunctionImport(the_module, "print_i32", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); expressions[47] = BinaryenLocalGet(the_module, 2, BinaryenTypeInt32()); { BinaryenExpressionRef operands[] = {expressions[47]}; expressions[48] = BinaryenCall(the_module, "print_i32", operands, 1, BinaryenTypeNone()); } { BinaryenExpressionRef children[] = { expressions[44], expressions[46], expressions[48]}; expressions[49] = BinaryenBlock(the_module, "bb0", children, 3, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[49]); expressions[50] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[51] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[52] = BinaryenStore( the_module, 4, 0, 0, expressions[51], expressions[50], BinaryenTypeInt32()); expressions[53] = BinaryenReturn(the_module, expressions[0]); { BinaryenExpressionRef children[] = {expressions[52], expressions[53]}; expressions[54] = BinaryenBlock(the_module, "bb1", children, 2, BinaryenTypeAuto()); } relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[54]); RelooperAddBranch( relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); expressions[55] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[56] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[55]); expressions[57] = BinaryenLocalSet(the_module, 3, expressions[56]); relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[57]); RelooperAddBranch( relooperBlocks[2], relooperBlocks[0], expressions[0], expressions[0]); expressions[58] = RelooperRenderAndDispose(the_relooper, relooperBlocks[2], 4); { BinaryenType varTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[5] = BinaryenAddFunction(the_module, "wasm::print_i32", BinaryenTypeInt32(), BinaryenTypeNone(), varTypes, 5, expressions[58]); } BinaryenAddFunctionExport(the_module, "wasm::print_i32", "wasm::print_i32"); the_relooper = RelooperCreate(the_module); expressions[59] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); expressions[60] = BinaryenLocalSet(the_module, 0, expressions[59]); expressions[61] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[62] = BinaryenLocalSet(the_module, 2, expressions[61]); expressions[63] = BinaryenLocalGet(the_module, 2, BinaryenTypeInt32()); expressions[64] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); expressions[65] = BinaryenUnary(the_module, 22, expressions[63]); expressions[66] = BinaryenUnary(the_module, 22, expressions[64]); expressions[67] = BinaryenBinary(the_module, 25, expressions[65], expressions[66]); expressions[68] = BinaryenLocalSet(the_module, 8, expressions[67]); expressions[69] = BinaryenLocalGet(the_module, 8, BinaryenTypeInt64()); expressions[70] = BinaryenUnary(the_module, 24, expressions[69]); expressions[71] = BinaryenConst(the_module, BinaryenLiteralInt64(32)); expressions[72] = BinaryenLocalGet(the_module, 8, BinaryenTypeInt64()); expressions[73] = BinaryenBinary(the_module, 36, expressions[72], expressions[71]); expressions[74] = BinaryenUnary(the_module, 24, expressions[73]); expressions[75] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[76] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[75]); expressions[77] = BinaryenConst(the_module, BinaryenLiteralInt32(128)); expressions[78] = BinaryenBinary(the_module, 1, expressions[76], expressions[77]); expressions[79] = BinaryenLocalTee(the_module, 3, expressions[78], BinaryenTypeInt32()); expressions[80] = BinaryenStore( the_module, 4, 0, 0, expressions[75], expressions[79], BinaryenTypeInt32()); expressions[81] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[82] = BinaryenStore( the_module, 4, 0, 0, expressions[81], expressions[70], BinaryenTypeInt32()); expressions[83] = BinaryenStore( the_module, 4, 4, 0, expressions[81], expressions[74], BinaryenTypeInt32()); { BinaryenExpressionRef children[] = {expressions[60], expressions[62], expressions[68], expressions[80], expressions[82], expressions[83]}; expressions[84] = BinaryenBlock(the_module, "bb0", children, 6, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[84]); expressions[85] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[86] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[85]); expressions[87] = BinaryenLocalSet(the_module, 1, expressions[86]); expressions[88] = BinaryenLocalGet(the_module, 1, BinaryenTypeInt32()); expressions[89] = BinaryenLocalSet(the_module, 4, expressions[88]); expressions[90] = BinaryenLocalGet(the_module, 4, BinaryenTypeInt32()); expressions[91] = BinaryenLocalSet(the_module, 5, expressions[90]); expressions[92] = BinaryenLocalGet(the_module, 6, BinaryenTypeInt32()); expressions[93] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[94] = BinaryenStore( the_module, 4, 0, 0, expressions[93], expressions[92], BinaryenTypeInt32()); expressions[95] = BinaryenLocalGet(the_module, 5, BinaryenTypeInt32()); expressions[96] = BinaryenReturn(the_module, expressions[95]); { BinaryenExpressionRef children[] = {expressions[87], expressions[89], expressions[91], expressions[94], expressions[96]}; expressions[97] = BinaryenBlock(the_module, "bb1", children, 5, BinaryenTypeAuto()); } relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[97]); expressions[98] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[99] = BinaryenLoad(the_module, 4, 0, 8, 0, BinaryenTypeInt32(), expressions[98]); RelooperAddBranch( relooperBlocks[0], relooperBlocks[1], expressions[99], expressions[0]); expressions[100] = BinaryenUnreachable(the_module); relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[100]); RelooperAddBranch( relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); expressions[101] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[102] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[101]); expressions[103] = BinaryenLocalSet(the_module, 6, expressions[102]); relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[103]); RelooperAddBranch( relooperBlocks[3], relooperBlocks[0], expressions[0], expressions[0]); expressions[104] = RelooperRenderAndDispose(the_relooper, relooperBlocks[3], 7); { BinaryenType varTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[6] = BinaryenAddFunction(the_module, "real_main", BinaryenTypeNone(), BinaryenTypeInt32(), varTypes, 9, expressions[104]); } BinaryenAddFunctionExport(the_module, "real_main", "real_main"); the_relooper = RelooperCreate(the_module); expressions[105] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[106] = BinaryenLocalSet(the_module, 2, expressions[105]); { BinaryenExpressionRef operands[] = {0}; expressions[107] = BinaryenCall(the_module, "real_main", operands, 0, BinaryenTypeInt32()); } expressions[108] = BinaryenLocalSet(the_module, 4, expressions[107]); { BinaryenExpressionRef children[] = {expressions[106], expressions[108]}; expressions[109] = BinaryenBlock(the_module, "bb0", children, 2, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[109]); expressions[110] = BinaryenLocalGet(the_module, 4, BinaryenTypeInt32()); expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); expressions[112] = BinaryenUnary(the_module, 22, expressions[110]); expressions[113] = BinaryenUnary(the_module, 22, expressions[111]); expressions[114] = BinaryenBinary(the_module, 25, expressions[112], expressions[113]); expressions[115] = BinaryenLocalSet(the_module, 11, expressions[114]); expressions[116] = BinaryenLocalGet(the_module, 11, BinaryenTypeInt64()); expressions[117] = BinaryenUnary(the_module, 24, expressions[116]); expressions[118] = BinaryenConst(the_module, BinaryenLiteralInt64(32)); expressions[119] = BinaryenLocalGet(the_module, 11, BinaryenTypeInt64()); expressions[120] = BinaryenBinary(the_module, 36, expressions[119], expressions[118]); expressions[121] = BinaryenUnary(the_module, 24, expressions[120]); expressions[122] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[123] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[122]); expressions[124] = BinaryenConst(the_module, BinaryenLiteralInt32(128)); expressions[125] = BinaryenBinary(the_module, 1, expressions[123], expressions[124]); expressions[126] = BinaryenLocalTee(the_module, 5, expressions[125], BinaryenTypeInt32()); expressions[127] = BinaryenStore(the_module, 4, 0, 0, expressions[122], expressions[126], BinaryenTypeInt32()); expressions[128] = BinaryenLocalGet(the_module, 5, BinaryenTypeInt32()); expressions[129] = BinaryenStore(the_module, 4, 0, 0, expressions[128], expressions[117], BinaryenTypeInt32()); expressions[130] = BinaryenStore(the_module, 4, 4, 0, expressions[128], expressions[121], BinaryenTypeInt32()); { BinaryenExpressionRef children[] = { expressions[115], expressions[127], expressions[129], expressions[130]}; expressions[131] = BinaryenBlock(the_module, "bb1", children, 4, BinaryenTypeAuto()); } relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[131]); expressions[132] = BinaryenLocalGet(the_module, 5, BinaryenTypeInt32()); expressions[133] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[132]); expressions[134] = BinaryenLocalSet(the_module, 3, expressions[133]); expressions[135] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[136] = BinaryenLocalSet(the_module, 6, expressions[135]); expressions[137] = BinaryenLocalGet(the_module, 6, BinaryenTypeInt32()); { BinaryenExpressionRef operands[] = {expressions[137]}; expressions[138] = BinaryenCall( the_module, "wasm::print_i32", operands, 1, BinaryenTypeNone()); } { BinaryenExpressionRef children[] = { expressions[134], expressions[136], expressions[138]}; expressions[139] = BinaryenBlock(the_module, "bb2", children, 3, BinaryenTypeAuto()); } relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[139]); expressions[140] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[141] = BinaryenLocalSet(the_module, 7, expressions[140]); expressions[142] = BinaryenLocalGet(the_module, 7, BinaryenTypeInt32()); expressions[143] = BinaryenLocalSet(the_module, 8, expressions[142]); expressions[144] = BinaryenLocalGet(the_module, 9, BinaryenTypeInt32()); expressions[145] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[146] = BinaryenStore(the_module, 4, 0, 0, expressions[145], expressions[144], BinaryenTypeInt32()); expressions[147] = BinaryenLocalGet(the_module, 8, BinaryenTypeInt32()); expressions[148] = BinaryenReturn(the_module, expressions[147]); { BinaryenExpressionRef children[] = { expressions[141], expressions[143], expressions[146], expressions[148]}; expressions[149] = BinaryenBlock(the_module, "bb3", children, 4, BinaryenTypeAuto()); } relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[149]); RelooperAddBranch( relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); expressions[150] = BinaryenLocalGet(the_module, 5, BinaryenTypeInt32()); expressions[151] = BinaryenLoad(the_module, 4, 0, 8, 0, BinaryenTypeInt32(), expressions[150]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[2], expressions[151], expressions[0]); expressions[152] = BinaryenUnreachable(the_module); relooperBlocks[4] = RelooperAddBlock(the_relooper, expressions[152]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[4], expressions[0], expressions[0]); RelooperAddBranch( relooperBlocks[2], relooperBlocks[3], expressions[0], expressions[0]); expressions[153] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[154] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[153]); expressions[155] = BinaryenLocalSet(the_module, 9, expressions[154]); relooperBlocks[5] = RelooperAddBlock(the_relooper, expressions[155]); RelooperAddBranch( relooperBlocks[5], relooperBlocks[0], expressions[0], expressions[0]); expressions[156] = RelooperRenderAndDispose(the_relooper, relooperBlocks[5], 10); { BinaryenType varTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; BinaryenType ii_[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenType ii = BinaryenTypeCreate(ii_, 2); functions[7] = BinaryenAddFunction(the_module, "main", ii, BinaryenTypeInt32(), varTypes, 10, expressions[156]); } BinaryenAddFunctionExport(the_module, "main", "main"); { const char* segments[] = {0}; BinaryenExpressionRef segmentOffsets[] = {0}; bool segmentPassive[] = {false}; BinaryenIndex segmentSizes[] = {0}; BinaryenSetMemory(the_module, 1, 1, NULL, segments, segmentPassive, segmentOffsets, segmentSizes, 0, 0); } expressions[157] = BinaryenConst(the_module, BinaryenLiteralInt32(65535)); expressions[158] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[159] = BinaryenStore(the_module, 4, 0, 0, expressions[158], expressions[157], BinaryenTypeInt32()); expressions[160] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[161] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { BinaryenExpressionRef operands[] = {expressions[160], expressions[161]}; expressions[162] = BinaryenCall(the_module, "main", operands, 2, BinaryenTypeInt32()); } expressions[163] = BinaryenDrop(the_module, expressions[162]); { BinaryenExpressionRef children[] = {expressions[159], expressions[163]}; expressions[164] = BinaryenBlock(the_module, NULL, children, 2, BinaryenTypeAuto()); } BinaryenAddFunctionExport(the_module, "__wasm_start", "rust_entry"); { BinaryenType varTypes[] = {BinaryenTypeNone()}; functions[8] = BinaryenAddFunction(the_module, "__wasm_start", BinaryenTypeNone(), BinaryenTypeNone(), varTypes, 0, expressions[164]); } BinaryenSetStart(the_module, functions[8]); the_relooper = RelooperCreate(the_module); expressions[165] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[166] = BinaryenLocalSet(the_module, 2, expressions[165]); expressions[167] = BinaryenLocalGet(the_module, 1, BinaryenTypeInt32()); expressions[168] = BinaryenLocalSet(the_module, 3, expressions[167]); expressions[169] = BinaryenLocalGet(the_module, 2, BinaryenTypeInt32()); expressions[170] = BinaryenLocalSet(the_module, 4, expressions[169]); expressions[171] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[172] = BinaryenLocalSet(the_module, 5, expressions[171]); expressions[173] = BinaryenLocalGet(the_module, 4, BinaryenTypeInt32()); expressions[174] = BinaryenLocalGet(the_module, 5, BinaryenTypeInt32()); expressions[175] = BinaryenUnary(the_module, 22, expressions[173]); expressions[176] = BinaryenUnary(the_module, 22, expressions[174]); expressions[177] = BinaryenBinary(the_module, 25, expressions[175], expressions[176]); expressions[178] = BinaryenLocalSet(the_module, 10, expressions[177]); expressions[179] = BinaryenLocalGet(the_module, 10, BinaryenTypeInt64()); expressions[180] = BinaryenUnary(the_module, 24, expressions[179]); expressions[181] = BinaryenConst(the_module, BinaryenLiteralInt64(32)); expressions[182] = BinaryenLocalGet(the_module, 10, BinaryenTypeInt64()); expressions[183] = BinaryenBinary(the_module, 36, expressions[182], expressions[181]); expressions[184] = BinaryenUnary(the_module, 24, expressions[183]); expressions[185] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[186] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[185]); expressions[187] = BinaryenConst(the_module, BinaryenLiteralInt32(128)); expressions[188] = BinaryenBinary(the_module, 1, expressions[186], expressions[187]); expressions[189] = BinaryenLocalTee(the_module, 6, expressions[188], BinaryenTypeInt32()); expressions[190] = BinaryenStore(the_module, 4, 0, 0, expressions[185], expressions[189], BinaryenTypeInt32()); expressions[191] = BinaryenLocalGet(the_module, 6, BinaryenTypeInt32()); expressions[192] = BinaryenStore(the_module, 4, 0, 0, expressions[191], expressions[180], BinaryenTypeInt32()); expressions[193] = BinaryenStore(the_module, 4, 4, 0, expressions[191], expressions[184], BinaryenTypeInt32()); { BinaryenExpressionRef children[] = {expressions[166], expressions[168], expressions[170], expressions[172], expressions[178], expressions[190], expressions[192], expressions[193]}; expressions[194] = BinaryenBlock(the_module, "bb0", children, 8, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[194]); expressions[195] = BinaryenLocalGet(the_module, 6, BinaryenTypeInt32()); expressions[196] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[195]); expressions[197] = BinaryenLocalSet(the_module, 7, expressions[196]); expressions[198] = BinaryenLocalGet(the_module, 8, BinaryenTypeInt32()); expressions[199] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[200] = BinaryenStore(the_module, 4, 0, 0, expressions[199], expressions[198], BinaryenTypeInt32()); expressions[201] = BinaryenLocalGet(the_module, 7, BinaryenTypeInt32()); expressions[202] = BinaryenReturn(the_module, expressions[201]); { BinaryenExpressionRef children[] = { expressions[197], expressions[200], expressions[202]}; expressions[203] = BinaryenBlock(the_module, "bb1", children, 3, BinaryenTypeAuto()); } relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[203]); expressions[204] = BinaryenLocalGet(the_module, 6, BinaryenTypeInt32()); expressions[205] = BinaryenLoad(the_module, 4, 0, 8, 0, BinaryenTypeInt32(), expressions[204]); RelooperAddBranch( relooperBlocks[0], relooperBlocks[1], expressions[205], expressions[0]); expressions[206] = BinaryenUnreachable(the_module); relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[206]); RelooperAddBranch( relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); expressions[207] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[208] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[207]); expressions[209] = BinaryenLocalSet(the_module, 8, expressions[208]); relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[209]); RelooperAddBranch( relooperBlocks[3], relooperBlocks[0], expressions[0], expressions[0]); expressions[210] = RelooperRenderAndDispose(the_relooper, relooperBlocks[3], 9); { BinaryenType varTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; BinaryenType ii_[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenType ii = BinaryenTypeCreate(ii_, 2); functions[9] = BinaryenAddFunction(the_module, "_isize_as_tinycore::Add_::add", ii, BinaryenTypeInt32(), varTypes, 9, expressions[210]); } BinaryenAddFunctionExport(the_module, "_isize_as_tinycore::Add_::add", "_isize_as_tinycore::Add_::add"); the_relooper = RelooperCreate(the_module); expressions[211] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[212] = BinaryenLocalSet(the_module, 1, expressions[211]); expressions[213] = BinaryenLocalGet(the_module, 1, BinaryenTypeInt32()); expressions[214] = BinaryenLocalSet(the_module, 2, expressions[213]); expressions[215] = BinaryenLocalGet(the_module, 2, BinaryenTypeInt32()); expressions[216] = BinaryenUnary(the_module, 20, expressions[215]); expressions[217] = BinaryenLocalSet(the_module, 3, expressions[216]); expressions[218] = BinaryenLocalGet(the_module, 4, BinaryenTypeInt32()); expressions[219] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[220] = BinaryenStore(the_module, 4, 0, 0, expressions[219], expressions[218], BinaryenTypeInt32()); expressions[221] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[222] = BinaryenReturn(the_module, expressions[221]); { BinaryenExpressionRef children[] = {expressions[212], expressions[214], expressions[217], expressions[220], expressions[222]}; expressions[223] = BinaryenBlock(the_module, "bb0", children, 5, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[223]); expressions[224] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[225] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[224]); expressions[226] = BinaryenLocalSet(the_module, 4, expressions[225]); relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[226]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); expressions[227] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 5); { BinaryenType varTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[10] = BinaryenAddFunction(the_module, "_bool_as_tinycore::Not_::not", BinaryenTypeInt32(), BinaryenTypeInt32(), varTypes, 6, expressions[227]); } BinaryenAddFunctionExport( the_module, "_bool_as_tinycore::Not_::not", "_bool_as_tinycore::Not_::not"); the_relooper = RelooperCreate(the_module); expressions[228] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[229] = BinaryenLocalSet(the_module, 2, expressions[228]); expressions[230] = BinaryenLocalGet(the_module, 1, BinaryenTypeInt32()); expressions[231] = BinaryenLocalSet(the_module, 3, expressions[230]); expressions[232] = BinaryenLocalGet(the_module, 2, BinaryenTypeInt32()); expressions[233] = BinaryenLocalSet(the_module, 4, expressions[232]); expressions[234] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt32()); expressions[235] = BinaryenLocalSet(the_module, 5, expressions[234]); expressions[236] = BinaryenLocalGet(the_module, 4, BinaryenTypeInt32()); expressions[237] = BinaryenLocalGet(the_module, 5, BinaryenTypeInt32()); expressions[238] = BinaryenBinary(the_module, 15, expressions[236], expressions[237]); expressions[239] = BinaryenLocalSet(the_module, 6, expressions[238]); expressions[240] = BinaryenLocalGet(the_module, 7, BinaryenTypeInt32()); expressions[241] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[242] = BinaryenStore(the_module, 4, 0, 0, expressions[241], expressions[240], BinaryenTypeInt32()); expressions[243] = BinaryenLocalGet(the_module, 6, BinaryenTypeInt32()); expressions[244] = BinaryenReturn(the_module, expressions[243]); { BinaryenExpressionRef children[] = {expressions[229], expressions[231], expressions[233], expressions[235], expressions[239], expressions[242], expressions[244]}; expressions[245] = BinaryenBlock(the_module, "bb0", children, 7, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[245]); expressions[246] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[247] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[246]); expressions[248] = BinaryenLocalSet(the_module, 7, expressions[247]); relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[248]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); expressions[249] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 8); { BinaryenType varTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; BinaryenType ii_[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenType ii = BinaryenTypeCreate(ii_, 2); functions[11] = BinaryenAddFunction(the_module, "_i16_as_tinycore::PartialEq_::eq", ii, BinaryenTypeInt32(), varTypes, 8, expressions[249]); } BinaryenAddFunctionExport(the_module, "_i16_as_tinycore::PartialEq_::eq", "_i16_as_tinycore::PartialEq_::eq"); the_relooper = RelooperCreate(the_module); expressions[250] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt64()); expressions[251] = BinaryenLocalSet(the_module, 2, expressions[250]); expressions[252] = BinaryenLocalGet(the_module, 1, BinaryenTypeInt64()); expressions[253] = BinaryenLocalSet(the_module, 3, expressions[252]); expressions[254] = BinaryenLocalGet(the_module, 2, BinaryenTypeInt64()); expressions[255] = BinaryenLocalSet(the_module, 4, expressions[254]); expressions[256] = BinaryenLocalGet(the_module, 3, BinaryenTypeInt64()); expressions[257] = BinaryenLocalSet(the_module, 5, expressions[256]); expressions[258] = BinaryenLocalGet(the_module, 4, BinaryenTypeInt64()); expressions[259] = BinaryenLocalGet(the_module, 5, BinaryenTypeInt64()); expressions[260] = BinaryenBinary(the_module, 40, expressions[258], expressions[259]); expressions[261] = BinaryenLocalSet(the_module, 6, expressions[260]); expressions[262] = BinaryenLocalGet(the_module, 7, BinaryenTypeInt64()); expressions[263] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[264] = BinaryenStore(the_module, 4, 0, 0, expressions[263], expressions[262], BinaryenTypeInt64()); expressions[265] = BinaryenLocalGet(the_module, 6, BinaryenTypeInt32()); expressions[266] = BinaryenReturn(the_module, expressions[265]); { BinaryenExpressionRef children[] = {expressions[251], expressions[253], expressions[255], expressions[257], expressions[261], expressions[264], expressions[266]}; expressions[267] = BinaryenBlock(the_module, "bb0", children, 7, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[267]); expressions[268] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[269] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt64(), expressions[268]); expressions[270] = BinaryenLocalSet(the_module, 7, expressions[269]); relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[270]); RelooperAddBranch( relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); expressions[271] = RelooperRenderAndDispose(the_relooper, relooperBlocks[1], 8); { BinaryenType varTypes[] = {BinaryenTypeInt64(), BinaryenTypeInt64(), BinaryenTypeInt64(), BinaryenTypeInt64(), BinaryenTypeInt32(), BinaryenTypeInt64(), BinaryenTypeInt32(), BinaryenTypeInt64()}; BinaryenType ii_[2] = {BinaryenTypeInt64(), BinaryenTypeInt64()}; BinaryenType ii = BinaryenTypeCreate(ii_, 2); functions[12] = BinaryenAddFunction(the_module, "_i64_as_tinycore::PartialEq_::eq", ii, BinaryenTypeInt32(), varTypes, 8, expressions[271]); } BinaryenAddFunctionExport(the_module, "_i64_as_tinycore::PartialEq_::eq", "_i64_as_tinycore::PartialEq_::eq"); assert(BinaryenModuleValidate(the_module)); BinaryenModuleDispose(the_module); expressions.clear(); functions.clear(); relooperBlocks.clear(); } binaryen-version_108/test/example/c-api-relooper-unreachable-if.txt000066400000000000000000000000001423707623100255670ustar00rootroot00000000000000binaryen-version_108/test/example/c-api-unused-mem.cpp000066400000000000000000000115421423707623100231340ustar00rootroot00000000000000// beginning a Binaryen API trace #include "binaryen-c.h" #include #include #include #include int main() { std::map expressions; std::map functions; std::map relooperBlocks; BinaryenModuleRef the_module = NULL; RelooperRef the_relooper = NULL; the_module = BinaryenModuleCreate(); expressions[size_t(NULL)] = BinaryenExpressionRef(NULL); BinaryenModuleAutoDrop(the_module); { const char* segments[] = {0}; bool segmentPassive[] = {false}; BinaryenExpressionRef segmentOffsets[] = {0}; BinaryenIndex segmentSizes[] = {0}; BinaryenSetMemory(the_module, 256, 256, "memory", segments, segmentPassive, segmentOffsets, segmentSizes, 0, 0); } the_relooper = RelooperCreate(the_module); { BinaryenExpressionRef children[] = {0}; expressions[1] = BinaryenBlock(the_module, "bb0", children, 0, BinaryenTypeAuto()); } relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[1]); expressions[2] = BinaryenLocalGet(the_module, 0, BinaryenTypeInt32()); expressions[3] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[4] = BinaryenStore( the_module, 4, 0, 0, expressions[3], expressions[2], BinaryenTypeInt32()); expressions[5] = BinaryenReturn(the_module, expressions[0]); { BinaryenExpressionRef children[] = {expressions[4], expressions[5]}; expressions[6] = BinaryenBlock(the_module, "bb1", children, 2, BinaryenTypeAuto()); } relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[6]); RelooperAddBranch( relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); expressions[7] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[8] = BinaryenLoad(the_module, 4, 0, 0, 0, BinaryenTypeInt32(), expressions[7]); expressions[9] = BinaryenLocalSet(the_module, 0, expressions[8]); relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[9]); RelooperAddBranch( relooperBlocks[2], relooperBlocks[0], expressions[0], expressions[0]); expressions[10] = RelooperRenderAndDispose(the_relooper, relooperBlocks[2], 1); { BinaryenType varTypes[] = { BinaryenTypeInt32(), BinaryenTypeInt32(), BinaryenTypeInt64()}; functions[0] = BinaryenAddFunction(the_module, "main", BinaryenTypeNone(), BinaryenTypeNone(), varTypes, 3, expressions[10]); } BinaryenAddFunctionExport(the_module, "main", "main"); { const char* segments[] = {0}; bool segmentPassive[] = {false}; BinaryenExpressionRef segmentOffsets[] = {0}; BinaryenIndex segmentSizes[] = {0}; BinaryenSetMemory(the_module, 1024, 1024, NULL, segments, segmentPassive, segmentOffsets, segmentSizes, 0, 0); } expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(65535)); expressions[12] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); expressions[13] = BinaryenStore( the_module, 4, 0, 0, expressions[12], expressions[11], BinaryenTypeInt32()); { BinaryenExpressionRef operands[] = {0}; expressions[14] = BinaryenCall(the_module, "main", operands, 0, BinaryenTypeNone()); } { BinaryenExpressionRef children[] = {expressions[13], expressions[14]}; expressions[15] = BinaryenBlock(the_module, NULL, children, 2, BinaryenTypeAuto()); } BinaryenAddFunctionExport(the_module, "__wasm_start", "rust_entry"); { BinaryenType varTypes[] = {BinaryenTypeNone()}; functions[1] = BinaryenAddFunction(the_module, "__wasm_start", BinaryenTypeNone(), BinaryenTypeNone(), varTypes, 0, expressions[15]); } assert(BinaryenModuleValidate(the_module)); BinaryenModulePrint(the_module); // check that binary read-write works { char buffer[1024]; BinaryenSetDebugInfo(1); size_t size = BinaryenModuleWrite(the_module, buffer, 1024); printf("%d\n", size); BinaryenModuleRef copy = BinaryenModuleRead(buffer, size); BinaryenModulePrint(copy); BinaryenModuleDispose(copy); } BinaryenModuleDispose(the_module); return 0; } binaryen-version_108/test/example/c-api-unused-mem.txt000066400000000000000000000021761423707623100231740ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 1024 1024) (export "memory" (memory $0)) (export "main" (func $main)) (export "rust_entry" (func $__wasm_start)) (func $main (local $0 i32) (local $1 i32) (local $2 i64) (block $block$2$break (local.set $0 (i32.load (i32.const 0) ) ) (block (br $block$2$break) ) ) (block (block (i32.store (i32.const 0) (local.get $0) ) (return) ) ) ) (func $__wasm_start (i32.store (i32.const 0) (i32.const 65535) ) (call $main) ) ) 145 (module (type $none_=>_none (func)) (memory $0 1024 1024) (export "memory" (memory $0)) (export "main" (func $main)) (export "rust_entry" (func $__wasm_start)) (func $main (local $0 i32) (local $1 i32) (local $2 i64) (block $label$1 (local.set $0 (i32.load (i32.const 0) ) ) (block $label$2 (br $label$1) ) ) (block $label$3 (block $label$4 (i32.store (i32.const 0) (local.get $0) ) (return) ) (unreachable) ) ) (func $__wasm_start (i32.store (i32.const 0) (i32.const 65535) ) (call $main) ) ) binaryen-version_108/test/example/cpp-threads.cpp000066400000000000000000000031671423707623100223040ustar00rootroot00000000000000// test multiple uses of the threadPool #include #include #include #include #include int NUM_THREADS = 33; void worker() { BinaryenModuleRef module = BinaryenModuleCreate(); // Create a function type for i32 (i32, i32) BinaryenType ii_[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenType ii = BinaryenTypeCreate(ii_, 2); // Get the 0 and 1 arguments, and add them BinaryenExpressionRef x = BinaryenLocalGet(module, 0, BinaryenTypeInt32()), y = BinaryenLocalGet(module, 1, BinaryenTypeInt32()); BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y); BinaryenExpressionRef ret = BinaryenReturn(module, add); // Create the add function // Note: no additional local variables // Note: no basic blocks here, we are an AST. The function body is just an // expression node. BinaryenFunctionRef adder = BinaryenAddFunction(module, "adder", ii, BinaryenTypeInt32(), NULL, 0, ret); // validate it assert(BinaryenModuleValidate(module)); // optimize it BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // Clean up the module, which owns all the objects we created above BinaryenModuleDispose(module); } int main() { std::vector threads; std::cout << "create threads...\n"; for (int i = 0; i < NUM_THREADS; i++) { threads.emplace_back(worker); } std::cout << "threads running in parallel...\n"; std::cout << "waiting for threads to join...\n"; for (auto& thread : threads) { thread.join(); } std::cout << "all done.\n"; return 0; } binaryen-version_108/test/example/cpp-threads.txt000066400000000000000000000001321423707623100223260ustar00rootroot00000000000000create threads... threads running in parallel... waiting for threads to join... all done. binaryen-version_108/test/example/cpp-unit.cpp000066400000000000000000000511421423707623100216250ustar00rootroot00000000000000// test multiple uses of the threadPool #include #include #include #include #include #include #include using namespace wasm; using namespace Bits; #define RESET "\x1b[0m" #define FG_BLACK "\x1b[30m" #define FG_RED "\x1b[31m" #define FG_GREEN "\x1b[32m" #define FG_YELLOW "\x1b[33m" #define BG_BLACK "\x1b[40m" #define BG_RED "\x1b[41m" static int failsCount = 0; template void assert_equal_(T a, U b, int line, const char* file) { if (a != b) { std::cerr << '\n' << BG_RED FG_BLACK << "î‚° ASSERTION ERROR " << ++failsCount << " " << RESET FG_RED << "î‚°\n" << FG_RED << " Actual: " << a << '\n' << FG_GREEN << " Expected: " << b << "\n\n" << FG_YELLOW << " Line: " << line << '\n' << FG_YELLOW << " File: " << file << '\n' << RESET << std::endl; std::cout << "actual: " << a << ", expected: " << b << ", line " << line << ", file " << file << std::endl; } } #define assert_equal(a, b) assert_equal_((a), (b), __LINE__, __FILE__) void test_bits() { Const c0, c1; Binary b; b.left = &c0; b.right = &c1; // --- // // i32 // // --- // c0.type = Type::i32; c1.type = Type::i32; b.type = Type::i32; c0.value = Literal(int32_t(0)); assert_equal(getMaxBits(&c0), 0); c0.value = Literal(int32_t(1)); assert_equal(getMaxBits(&c0), 1); c0.value = Literal(int32_t(2)); assert_equal(getMaxBits(&c0), 2); c0.value = Literal(int32_t(0x80000)); assert_equal(getMaxBits(&c0), 20); c0.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&c0), 32); b.op = AddInt32; c0.value = Literal(int32_t(0xFFFF)); c1.value = Literal(int32_t(0x11)); assert_equal(getMaxBits(&b), 17); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(2)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&b), 32); b.op = SubInt32; c0.value = Literal(int32_t(0xFFFF)); c1.value = Literal(int32_t(0x11)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(2)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(2)); c1.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(1)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(0x7FFFFFF0)); c1.value = Literal(int32_t(0x7FFFFFFF)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(1)); c1.value = Literal(int32_t(1)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(0x7FFFFFFF)); assert_equal(getMaxBits(&b), 32); b.op = MulInt32; c0.value = Literal(int32_t(0xFFFF)); c1.value = Literal(int32_t(0x11)); assert_equal(getMaxBits(&b), 21); c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(1)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(int32_t(1)); c1.value = Literal(int32_t(0)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(int32_t(3)); c1.value = Literal(int32_t(3)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int32_t(2)); c1.value = Literal(int32_t(-2)); assert_equal(getMaxBits(&b), 32); b.op = DivSInt32; c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int32_t(1)); c1.value = Literal(int32_t(2)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int32_t(0xFF)); c1.value = Literal(int32_t(0xFF)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(1)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(2)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(0x7FFFFFFF)); c1.value = Literal(int32_t(3)); assert_equal(getMaxBits(&b), 30); c0.value = Literal(int32_t(0x0000FFFF)); c1.value = Literal(int32_t(0xFF)); assert_equal(getMaxBits(&b), 9); c0.value = Literal(int32_t(0x00001000)); c1.value = Literal(int32_t(0x00000FFF)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int32_t(0x80000000)); c1.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(2)); c1.value = Literal(int32_t(-2)); assert_equal(getMaxBits(&b), 32); b.op = DivUInt32; c0.value = Literal(uint32_t(0)); c1.value = Literal(uint32_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(uint32_t(1)); c1.value = Literal(uint32_t(2)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(uint32_t(0xFF)); c1.value = Literal(uint32_t(0xFF)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(uint32_t(-1)); c1.value = Literal(uint32_t(1)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(uint32_t(-1)); c1.value = Literal(uint32_t(2)); assert_equal(getMaxBits(&b), 31); c0.value = Literal(uint32_t(0x7FFFFFFF)); c1.value = Literal(uint32_t(3)); assert_equal(getMaxBits(&b), 30); c0.value = Literal(int32_t(0x0000FFFF)); c1.value = Literal(int32_t(0xFF)); assert_equal(getMaxBits(&b), 9); c0.value = Literal(int32_t(0x00001000)); c1.value = Literal(int32_t(0x00000FFF)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(uint32_t(0x80000000)); c1.value = Literal(uint32_t(-1)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(uint32_t(2)); c1.value = Literal(uint32_t(-2)); assert_equal(getMaxBits(&b), 0); b.op = RemSInt32; c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int32_t(1)); c1.value = Literal(int32_t(2)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(2)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(3)); c1.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int32_t(0x7FFFFFFF)); c1.value = Literal(int32_t(0x7FFFFFFF)); assert_equal(getMaxBits(&b), 31); b.op = RemUInt32; c0.value = Literal(uint32_t(0)); c1.value = Literal(uint32_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(uint32_t(0)); c1.value = Literal(uint32_t(-1)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(uint32_t(1)); c1.value = Literal(uint32_t(2)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(uint32_t(-1)); c1.value = Literal(uint32_t(2)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(uint32_t(3)); c1.value = Literal(uint32_t(-1)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(uint32_t(0x7FFFFFFF)); c1.value = Literal(uint32_t(0x7FFFFFFF)); assert_equal(getMaxBits(&b), 31); b.op = AndInt32; c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int32_t(0xF)); c1.value = Literal(int32_t(0)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int32_t(3)); c1.value = Literal(int32_t(3)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(3)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int32_t(3)); c1.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&b), 2); b.op = OrInt32; c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(0xF)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int32_t(0xF)); c1.value = Literal(int32_t(0)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int32_t(3)); c1.value = Literal(int32_t(3)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(3)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(3)); c1.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&b), 32); b.op = XorInt32; c0.value = Literal(int32_t(0)); c1.value = Literal(int32_t(0xF)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int32_t(0xF)); c1.value = Literal(int32_t(0)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int32_t(3)); c1.value = Literal(int32_t(3)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int32_t(-1)); c1.value = Literal(int32_t(3)); assert_equal(getMaxBits(&b), 32); c0.value = Literal(int32_t(3)); c1.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&b), 32); // --- // // i64 // // --- // c0.type = Type::i64; c1.type = Type::i64; b.type = Type::i64; c0.value = Literal(int64_t(0)); assert_equal(getMaxBits(&c0), 0); c0.value = Literal(int64_t(1)); assert_equal(getMaxBits(&c0), 1); c0.value = Literal(int64_t(2)); assert_equal(getMaxBits(&c0), 2); c0.value = Literal(int64_t(0x80000)); assert_equal(getMaxBits(&c0), 20); c0.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&c0), 64); b.op = AddInt64; c0.value = Literal(int64_t(0xFFFF)); c1.value = Literal(int64_t(0x11)); assert_equal(getMaxBits(&b), 17); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(2)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&b), 64); b.op = SubInt64; c0.value = Literal(int64_t(0xFFFF)); c1.value = Literal(int64_t(0x11)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(2)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(2)); c1.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(1)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(0x7FFFFFFFFFFFFFF0)); c1.value = Literal(int64_t(0x7FFFFFFFFFFFFFFF)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(1)); c1.value = Literal(int64_t(1)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(0x7FFFFFFFFFFFFFFF)); assert_equal(getMaxBits(&b), 64); b.op = MulInt64; c0.value = Literal(int64_t(0xFFFF)); c1.value = Literal(int64_t(0x11)); assert_equal(getMaxBits(&b), 21); c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(1)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(int64_t(1)); c1.value = Literal(int64_t(0)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(int64_t(3)); c1.value = Literal(int64_t(3)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int64_t(2)); c1.value = Literal(int64_t(-2)); assert_equal(getMaxBits(&b), 64); b.op = DivSInt64; c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int64_t(1)); c1.value = Literal(int64_t(2)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int64_t(0xFF)); c1.value = Literal(int64_t(0xFF)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(1)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(2)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(0x7FFFFFFFFFFFFFFF)); c1.value = Literal(int64_t(3)); assert_equal(getMaxBits(&b), 62); c0.value = Literal(int64_t(0x8000000000000000)); c1.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(2)); c1.value = Literal(int64_t(-2)); assert_equal(getMaxBits(&b), 64); b.op = DivUInt64; c0.value = Literal(uint64_t(0)); c1.value = Literal(uint64_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(uint64_t(1)); c1.value = Literal(uint64_t(2)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(uint64_t(0xFF)); c1.value = Literal(uint64_t(0xFF)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(uint64_t(-1)); c1.value = Literal(uint64_t(1)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(uint64_t(-1)); c1.value = Literal(uint64_t(2)); assert_equal(getMaxBits(&b), 63); c0.value = Literal(uint64_t(0x7FFFFFFFFFFFFFFF)); c1.value = Literal(uint64_t(3)); assert_equal(getMaxBits(&b), 62); c0.value = Literal(uint64_t(0x8000000000000000)); c1.value = Literal(uint64_t(-1)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(uint64_t(2)); c1.value = Literal(uint64_t(-2)); assert_equal(getMaxBits(&b), 0); b.op = RemSInt64; c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int64_t(1)); c1.value = Literal(int64_t(2)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(2)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(3)); c1.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int64_t(0x7FFFFFFFFFFFFFFF)); c1.value = Literal(int64_t(0x7FFFFFFFFFFFFFFF)); assert_equal(getMaxBits(&b), 63); b.op = RemUInt64; c0.value = Literal(uint64_t(0)); c1.value = Literal(uint64_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(uint64_t(0)); c1.value = Literal(uint64_t(-1)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(uint64_t(1)); c1.value = Literal(uint64_t(2)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(uint64_t(-1)); c1.value = Literal(uint64_t(2)); assert_equal(getMaxBits(&b), 1); c0.value = Literal(uint64_t(3)); c1.value = Literal(uint64_t(-1)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(uint64_t(0x7FFFFFFFFFFFFFFF)); c1.value = Literal(uint64_t(0x7FFFFFFFFFFFFFFF)); assert_equal(getMaxBits(&b), 63); b.op = AndInt64; c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(0xF)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int64_t(0xF)); c1.value = Literal(int64_t(0)); assert_equal(getMaxBits(&b), 0); c0.value = Literal(int64_t(3)); c1.value = Literal(int64_t(3)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(3)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int64_t(3)); c1.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&b), 2); b.op = OrInt64; c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(0xF)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int64_t(0xF)); c1.value = Literal(int64_t(0)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int64_t(3)); c1.value = Literal(int64_t(3)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(3)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(3)); c1.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&b), 64); b.op = XorInt64; c0.value = Literal(int64_t(0)); c1.value = Literal(int64_t(0xF)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int64_t(0xF)); c1.value = Literal(int64_t(0)); assert_equal(getMaxBits(&b), 4); c0.value = Literal(int64_t(3)); c1.value = Literal(int64_t(3)); assert_equal(getMaxBits(&b), 2); c0.value = Literal(int64_t(-1)); c1.value = Literal(int64_t(3)); assert_equal(getMaxBits(&b), 64); c0.value = Literal(int64_t(3)); c1.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&b), 64); Unary u; c0.type = Type::i32; u.value = &c0; u.type = Type::i64; u.op = ExtendUInt32; c0.value = Literal(int32_t(0)); assert_equal(getMaxBits(&u), 0); c0.value = Literal(int32_t(1)); assert_equal(getMaxBits(&u), 1); c0.value = Literal(int32_t(0xF)); assert_equal(getMaxBits(&u), 4); c0.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&u), 32); u.op = ExtendSInt32; c0.value = Literal(int32_t(0)); assert_equal(getMaxBits(&u), 0); c0.value = Literal(int32_t(1)); assert_equal(getMaxBits(&u), 1); c0.value = Literal(int32_t(0xF)); assert_equal(getMaxBits(&u), 4); c0.value = Literal(int32_t(0x7FFFFFFF)); assert_equal(getMaxBits(&u), 31); c0.value = Literal(int32_t(0x80000000)); assert_equal(getMaxBits(&u), 64); c0.value = Literal(int32_t(-1)); assert_equal(getMaxBits(&u), 64); u.type = Type::i32; c0.type = Type::i64; u.op = WrapInt64; c0.value = Literal(int64_t(0)); assert_equal(getMaxBits(&u), 0); c0.value = Literal(int64_t(0x7FFFFFFF)); assert_equal(getMaxBits(&u), 31); c0.value = Literal(int64_t(0xFFFFFFFF)); assert_equal(getMaxBits(&u), 32); c0.value = Literal(int64_t(0xFFFFFFFFFF)); assert_equal(getMaxBits(&u), 32); c0.value = Literal(int64_t(-1)); assert_equal(getMaxBits(&u), 32); u.type = Type::i32; c0.type = Type::i32; u.op = ExtendS8Int32; c0.value = Literal(int8_t(0)); assert_equal(getMaxBits(&u), 0); c0.value = Literal(int8_t(127)); assert_equal(getMaxBits(&u), 7); c0.value = Literal(int8_t(128)); assert_equal(getMaxBits(&u), 32); u.op = ExtendS16Int32; c0.value = Literal(int16_t(0)); assert_equal(getMaxBits(&u), 0); c0.value = Literal(int16_t(0x7FFF)); assert_equal(getMaxBits(&u), 15); c0.value = Literal(int16_t(0x8000)); assert_equal(getMaxBits(&u), 32); u.type = Type::i64; c0.type = Type::i32; u.op = ExtendS8Int64; c0.value = Literal(int8_t(0)); assert_equal(getMaxBits(&u), 0); c0.value = Literal(int8_t(127)); assert_equal(getMaxBits(&u), 7); c0.value = Literal(int8_t(128)); assert_equal(getMaxBits(&u), 64); u.op = ExtendS16Int64; c0.value = Literal(int16_t(0)); assert_equal(getMaxBits(&u), 0); c0.value = Literal(int16_t(0x7FFF)); assert_equal(getMaxBits(&u), 15); c0.value = Literal(int16_t(0x8000)); assert_equal(getMaxBits(&u), 64); u.type = Type::i64; c0.type = Type::i64; u.op = ExtendS32Int64; c0.value = Literal(int64_t(0)); assert_equal(getMaxBits(&u), 0); c0.value = Literal(int64_t(0x7FFFFFFFLL)); assert_equal(getMaxBits(&u), 31); c0.value = Literal(int64_t(0xFFFFFFFFLL)); assert_equal(getMaxBits(&u), 64); c0.value = Literal(int64_t(-1LL)); assert_equal(getMaxBits(&u), 64); } void test_cost() { // Some optimizations assume that the cost of a get is zero, e.g. local-cse. LocalGet get; assert_equal(CostAnalyzer(&get).cost, 0); } void test_effects() { PassOptions options; Module module; // Unreachables trap. Unreachable unreachable; assert_equal(EffectAnalyzer(options, module, &unreachable).trap, true); // Nops... do not. Nop nop; assert_equal(EffectAnalyzer(options, module, &nop).trap, false); // ArrayCopy can trap, reads arrays, and writes arrays (but not structs). { ArrayCopy arrayCopy(module.allocator); EffectAnalyzer effects(options, module); effects.visit(&arrayCopy); assert_equal(effects.trap, true); assert_equal(effects.readsArray, true); assert_equal(effects.writesArray, true); assert_equal(effects.readsMutableStruct, false); assert_equal(effects.writesStruct, false); } } void test_literals() { // The i31 heap type may or may not be basic, depending on if it is nullable. // Verify we handle both code paths. { Literal x(Type(HeapType::i31, Nullable)); std::cout << x << '\n'; } { Literal x(Type(HeapType::i31, NonNullable)); std::cout << x << '\n'; } } void test_field() { // Simple types assert_equal(Field(Type::i32, Immutable).getByteSize(), 4); assert_equal(Field(Type::i64, Immutable).getByteSize(), 8); // Packed types assert_equal(Field(Field::PackedType::i8, Immutable).getByteSize(), 1); assert_equal(Field(Field::PackedType::i16, Immutable).getByteSize(), 2); assert_equal(Field(Field::PackedType::not_packed, Immutable).getByteSize(), 4); } void test_queue() { { UniqueDeferredQueue queue; queue.push(1); queue.push(2); queue.push(3); queue.push(2); // first in was 1 assert_equal(queue.pop(), 1); // next in was 2, but it was added later, so we defer to then, and get the 3 assert_equal(queue.pop(), 3); assert_equal(queue.pop(), 2); assert_equal(queue.empty(), true); } { UniqueDeferredQueue queue; queue.push(1); queue.push(2); assert_equal(queue.pop(), 1); // clearing clears the queue queue.clear(); assert_equal(queue.empty(), true); } { UniqueNonrepeatingDeferredQueue queue; queue.push(1); assert_equal(queue.pop(), 1); queue.push(1); // We never repeat values in this queue, so the last push of 1 is ignored. assert_equal(queue.empty(), true); // But new values work. queue.push(2); assert_equal(queue.pop(), 2); } } int main() { test_bits(); test_cost(); test_effects(); test_literals(); test_field(); test_queue(); if (failsCount > 0) { abort(); } else { std::cout << "Success" << std::endl; } return 0; } binaryen-version_108/test/example/cpp-unit.txt000066400000000000000000000000341423707623100216540ustar00rootroot00000000000000i31ref(0) i31ref(0) Success binaryen-version_108/test/example/domtree.cpp000066400000000000000000000074741423707623100215360ustar00rootroot00000000000000#include #include #include #include using namespace wasm; struct BasicBlock { std::vector in; void addPred(BasicBlock* pred) { in.push_back(pred); } }; struct CFG : public std::vector> { BasicBlock* add() { emplace_back(std::make_unique()); return back().get(); } void connect(BasicBlock* pred, BasicBlock* succ) { succ->addPred(pred); } }; int main() { // An empty CFG. { CFG cfg; DomTree domTree(cfg); assert(domTree.iDoms.empty()); } // An CFG with just an entry. { CFG cfg; cfg.add(); DomTree domTree(cfg); assert(domTree.iDoms.size() == 1); assert(domTree.iDoms[0] == Index(-1)); // the entry has no parent. } // entry -> a. { CFG cfg; auto* entry = cfg.add(); auto* a = cfg.add(); cfg.connect(entry, a); DomTree domTree(cfg); assert(domTree.iDoms.size() == 2); assert(domTree.iDoms[0] == Index(-1)); assert(domTree.iDoms[1] == 0); // a is dominated by the entry. } // entry and a non-connected (unreachable) block. { CFG cfg; auto* entry = cfg.add(); auto* a = cfg.add(); DomTree domTree(cfg); assert(domTree.iDoms.size() == 2); assert(domTree.iDoms[0] == Index(-1)); assert(domTree.iDoms[1] == Index(-1)); // unreachables have no parent. } // entry -> a -> b -> c. { CFG cfg; auto* entry = cfg.add(); auto* a = cfg.add(); auto* b = cfg.add(); auto* c = cfg.add(); cfg.connect(entry, a); cfg.connect(a, b); cfg.connect(b, c); DomTree domTree(cfg); assert(domTree.iDoms.size() == 4); assert(domTree.iDoms[0] == Index(-1)); assert(domTree.iDoms[1] == 0); assert(domTree.iDoms[2] == 1); assert(domTree.iDoms[3] == 2); } // An if: // b // / \ // entry -> a d // \ / // c { CFG cfg; auto* entry = cfg.add(); auto* a = cfg.add(); auto* b = cfg.add(); auto* c = cfg.add(); auto* d = cfg.add(); cfg.connect(entry, a); cfg.connect(a, b); cfg.connect(a, c); cfg.connect(b, d); cfg.connect(c, d); DomTree domTree(cfg); assert(domTree.iDoms.size() == 5); assert(domTree.iDoms[0] == Index(-1)); assert(domTree.iDoms[1] == 0); // a assert(domTree.iDoms[2] == 1); // b assert(domTree.iDoms[3] == 1); // c assert(domTree.iDoms[4] == 1); // d is also dominated by a. } // A loop: // // entry -> a -> b -> c -> d // ^ | // | | // \---------/ { CFG cfg; auto* entry = cfg.add(); auto* a = cfg.add(); auto* b = cfg.add(); auto* c = cfg.add(); auto* d = cfg.add(); cfg.connect(entry, a); cfg.connect(a, b); cfg.connect(b, c); cfg.connect(c, d); cfg.connect(d, b); DomTree domTree(cfg); assert(domTree.iDoms.size() == 5); assert(domTree.iDoms[0] == Index(-1)); assert(domTree.iDoms[1] == 0); // a assert(domTree.iDoms[2] == 1); // b, the loop entry, is dominated by a assert(domTree.iDoms[3] == 2); // c, the loop "middle", is dominated by b assert(domTree.iDoms[4] == 3); // d, the loop "end", is dominated by c } // Subsequent blocks after an unreachable one. // // entry a -> b // // (a is unreachable, and b is reached by a, but in unreachable code) { CFG cfg; auto* entry = cfg.add(); auto* a = cfg.add(); auto* b = cfg.add(); cfg.connect(a, b); DomTree domTree(cfg); assert(domTree.iDoms.size() == 3); assert(domTree.iDoms[0] == Index(-1)); assert(domTree.iDoms[1] == Index(-1)); // a assert(domTree.iDoms[2] == Index(-1)); // b } std::cout << "success.\n"; } binaryen-version_108/test/example/domtree.txt000066400000000000000000000000111423707623100215470ustar00rootroot00000000000000success. binaryen-version_108/test/example/hash.cpp000066400000000000000000000103371423707623100210120ustar00rootroot00000000000000#include #include #include using namespace wasm; #define assertEqual(left, right) \ assert(ExpressionAnalyzer::hash(&left) == ExpressionAnalyzer::hash(&right)); #define assertNotEqual(left, right) \ assert(ExpressionAnalyzer::hash(&left) != ExpressionAnalyzer::hash(&right)); #define assertShallowEqual(left, right) \ assert(ExpressionAnalyzer::shallowHash(&left) == \ ExpressionAnalyzer::shallowHash(&right)); #define assertShallowNotEqual(left, right) \ assert(ExpressionAnalyzer::shallowHash(&left) != \ ExpressionAnalyzer::shallowHash(&right)); int main() { { Const x, y; x.set(Literal(int32_t(10))); y.set(Literal(int32_t(10))); assertEqual(x, y); } { // The value matters (with extremely high probability...) Const x, y; x.set(Literal(int32_t(10))); y.set(Literal(int32_t(11))); assertNotEqual(x, y); } { // The type matters. Const x, y; x.set(Literal(int32_t(10))); y.set(Literal(int64_t(10))); assertNotEqual(x, y); } { // Nested identical child. Drop dx, dy; Const x, y; x.set(Literal(int32_t(10))); y.set(Literal(int32_t(10))); dx.value = &x; dy.value = &y; assertEqual(dx, dy); } { // Nested identical child, checked shallowly. Drop dx, dy; Const x, y; x.set(Literal(int32_t(10))); y.set(Literal(int32_t(10))); dx.value = &x; dy.value = &y; assertShallowEqual(dx, dy); } { // Nested different child. Drop dx, dy; Const x, y; x.set(Literal(int32_t(10))); y.set(Literal(int32_t(11))); dx.value = &x; dy.value = &y; assertNotEqual(dx, dy); } { // Nested different child, checked shallowly (so we ignore the difference, // and return equal). Drop dx, dy; Const x, y; x.set(Literal(int32_t(10))); y.set(Literal(int32_t(11))); dx.value = &x; dy.value = &y; assertShallowEqual(dx, dy); } MixedArena arena; { // Blocks Block x(arena); Block y(arena); assertEqual(x, y); } { // Blocks with contents. Block x(arena); Block y(arena); Nop n; y.list.push_back(&n); assertNotEqual(x, y); } { // Blocks with names. Block x(arena); x.name = "foo"; Block y(arena); y.name = "foo"; assertEqual(x, y); } { // Different block names hash equally - we ignore internal name differences // intentionally. Block x(arena); x.name = "foo"; Block y(arena); y.name = "bar"; assertEqual(x, y); } { // Different br names are checked relatively as well. Break x; x.name = "foo"; Break y; y.name = "bar"; Block z(arena); z.name = "foo"; z.list.push_back(&x); Block w(arena); w.name = "bar"; w.list.push_back(&y); Block outer1(arena); outer1.name = "outer1"; outer1.list.push_back(&z); Block outer2(arena); outer2.name = "outer2"; outer2.list.push_back(&w); assertEqual(outer1, outer2); } { // But referring to different relative names leads to a difference. Break x; x.name = "outer1"; // instead of x, go to the outer label this time Break y; y.name = "bar"; Block z(arena); z.name = "foo"; z.list.push_back(&x); Block w(arena); w.name = "bar"; w.list.push_back(&y); Block outer1(arena); outer1.name = "outer1"; outer1.list.push_back(&z); Block outer2(arena); outer2.name = "outer2"; outer2.list.push_back(&w); assertNotEqual(outer1, outer2); } { // Indexes. LocalGet x, y; x.index = 10; y.index = 10; assertEqual(x, y); } { // Indexes. LocalGet x, y; x.index = 10; y.index = 11; assertNotEqual(x, y); } { // It is ok to hash something that refers to an unknown name, like a break // without the outside context that it branches to. And different names // should have different hashes. Break x; x.name = "foo"; Break y; y.name = "bar"; assertNotEqual(x, y); } std::cout << "success.\n"; } binaryen-version_108/test/example/hash.txt000066400000000000000000000000111423707623100210330ustar00rootroot00000000000000success. binaryen-version_108/test/example/local-graph.cpp000066400000000000000000000070311423707623100222550ustar00rootroot00000000000000#include #include #include #include using namespace wasm; int main() { Module wasm; Builder builder(wasm); { Function foo; foo.type = Signature(Type::none, Type::none); foo.vars = {Type::i32}; auto* get1 = builder.makeLocalGet(0, Type::i32); auto* get2 = builder.makeLocalGet(0, Type::i32); foo.body = builder.makeBlock({ builder.makeLocalSet(0, builder.makeConst(Literal(int32_t(0)))), // two equivalent gets, as both are preceded by the same single set builder.makeDrop(get1), builder.makeDrop(get2), }); LocalGraph graph(&foo); assert(graph.equivalent(get1, get2)); } { Function foo; foo.type = Signature(Type::none, Type::none); foo.vars = {Type::i32}; auto* get1 = builder.makeLocalGet(0, Type::i32); auto* get2 = builder.makeLocalGet(0, Type::i32); foo.body = builder.makeBlock({ // two non-equivalent gets, as there is a set in between them builder.makeDrop(get1), builder.makeLocalSet(0, builder.makeConst(Literal(int32_t(0)))), builder.makeDrop(get2), }); LocalGraph graph(&foo); assert(!graph.equivalent(get1, get2)); } { Function foo; foo.type = Signature({Type::i32}, Type::none); auto* get1 = builder.makeLocalGet(0, Type::i32); auto* get2 = builder.makeLocalGet(0, Type::i32); foo.body = builder.makeBlock({ // two equivalent gets of the same parameter builder.makeDrop(get1), builder.makeDrop(get2), }); LocalGraph graph(&foo); assert(graph.equivalent(get1, get2)); } { Function foo; foo.type = Signature({Type::i32}, Type::none); auto* get1 = builder.makeLocalGet(0, Type::i32); auto* get2 = builder.makeLocalGet(0, Type::i32); foo.body = builder.makeBlock({ // two non-equivalent gets of the same parameter, as there is a set builder.makeDrop(get1), builder.makeLocalSet(0, builder.makeConst(Literal(int32_t(0)))), builder.makeDrop(get2), }); LocalGraph graph(&foo); assert(!graph.equivalent(get1, get2)); } { Function foo; foo.type = Signature({Type::i32, Type::i32}, Type::none); auto* get1 = builder.makeLocalGet(0, Type::i32); auto* get2 = builder.makeLocalGet(1, Type::i32); foo.body = builder.makeBlock({ // two non-equivalent gets as they are of different parameters builder.makeDrop(get1), builder.makeDrop(get2), }); LocalGraph graph(&foo); assert(!graph.equivalent(get1, get2)); } { Function foo; foo.type = Signature(Type::none, Type::none); foo.vars = {Type::i32, Type::i32}; auto* get1 = builder.makeLocalGet(0, Type::i32); auto* get2 = builder.makeLocalGet(1, Type::i32); foo.body = builder.makeBlock({ // two equivalent gets, even though they have a different index, as both // use the zero initialized value builder.makeDrop(get1), builder.makeDrop(get2), }); LocalGraph graph(&foo); assert(graph.equivalent(get1, get2)); } { Function foo; foo.type = Signature(Type::none, Type::none); foo.vars = {Type::i32, Type::f64}; auto* get1 = builder.makeLocalGet(0, Type::i32); auto* get2 = builder.makeLocalGet(1, Type::f64); foo.body = builder.makeBlock({ // two non-equivalent gets as their zero-init value is different builder.makeDrop(get1), builder.makeDrop(get2), }); LocalGraph graph(&foo); assert(!graph.equivalent(get1, get2)); } std::cout << "Success." << std::endl; return 0; } binaryen-version_108/test/example/local-graph.txt000066400000000000000000000000111423707623100223010ustar00rootroot00000000000000Success. binaryen-version_108/test/example/match.cpp000066400000000000000000000412431423707623100211630ustar00rootroot00000000000000#include #include #include "literal.h" #include "wasm-builder.h" #include using namespace wasm; using namespace wasm::Match; Module module; Builder builder(module); void test_internal_any() { std::cout << "Testing Internal::Any\n"; assert(Internal::Any(nullptr).matches(0)); assert(Internal::Any(nullptr).matches(1)); assert(Internal::Any(nullptr).matches(-1)); assert(Internal::Any(nullptr).matches(42LL)); assert(Internal::Any(nullptr).matches(4.2f)); assert(Internal::Any(nullptr).matches(0)); assert(Internal::Any(nullptr).matches(1)); assert(Internal::Any(nullptr).matches(-1)); assert(Internal::Any(nullptr).matches(42LL)); assert(Internal::Any(nullptr).matches(4.2f)); assert(Internal::Any(nullptr).matches(0)); assert(Internal::Any(nullptr).matches(1)); assert(Internal::Any(nullptr).matches(-1)); assert(Internal::Any(nullptr).matches(42LL)); assert(Internal::Any(nullptr).matches(4.2f)); assert(Internal::Any(nullptr).matches(0)); assert(Internal::Any(nullptr).matches(1)); assert(Internal::Any(nullptr).matches(-1)); assert(Internal::Any(nullptr).matches(42LL)); assert(Internal::Any(nullptr).matches(4.2f)); // Working as intended: cannot convert `const char [6]' to double // assert(Internal::Any(nullptr).matches("hello")); { int32_t val = 0xffffffff; assert(Internal::Any(&val).matches(0)); assert(val == 0); assert(Internal::Any(&val).matches(1)); assert(val == 1); assert(Internal::Any(&val).matches(-1)); assert(val == -1); assert(Internal::Any(&val).matches(42LL)); assert(val == 42); assert(Internal::Any(&val).matches(4.2f)); assert(val == 4); } { Expression* expr = nullptr; Nop* nop = nullptr; Expression* builtExpr = builder.makeNop(); Nop* builtNop = builder.makeNop(); AtomicFence* builtFence = builder.makeAtomicFence(); assert(Internal::Any(&expr).matches(builtExpr)); assert(expr == builtExpr); assert(Internal::Any(&expr).matches(builtNop)); assert(expr == builtNop); assert(Internal::Any(&expr).matches(builtFence)); assert(expr == builtFence); assert(Internal::Any(&nop).matches(builtExpr)); assert(nop == builtExpr); assert(Internal::Any(&nop).matches(builtNop)); assert(nop == builtNop); // Does NOT match sibling expression types. Bound variable unchanged. assert(!Internal::Any(&nop).matches(builtFence)); assert(nop == builtNop); // Working as intended: invalid conversion from Expression** to Nop** // assert(Internal::Any(&expr).matches(builtExpr)); } } void test_internal_exact() { std::cout << "Testing Internal::Exact\n"; assert(Internal::Exact(nullptr, 0).matches(0)); assert(Internal::Exact(nullptr, 1).matches(1)); assert(Internal::Exact(nullptr, -1).matches(-1)); assert(Internal::Exact(nullptr, 42).matches(42LL)); assert(Internal::Exact(nullptr, 4).matches(4.2f)); assert(!Internal::Exact(nullptr, 1).matches(0)); assert(!Internal::Exact(nullptr, -1).matches(1)); assert(!Internal::Exact(nullptr, 42).matches(-1)); assert(!Internal::Exact(nullptr, 4).matches(42LL)); assert(!Internal::Exact(nullptr, 0).matches(4.2f)); { Expression* expr = nullptr; Nop* nop = nullptr; Nop* builtNop = builder.makeNop(); Expression* builtExpr = builtNop; assert(!Internal::Exact(&expr, expr).matches(builtExpr)); assert(Internal::Exact(&expr, builtExpr).matches(builtExpr)); assert(expr == builtExpr); assert(!Internal::Exact(&nop, nop).matches(builtNop)); assert(Internal::Exact(&nop, builtNop).matches(builtNop)); assert(nop == builtNop); nop = nullptr; assert(Internal::Exact(&nop, builtNop).matches(builtExpr)); assert(nop == builtNop); } } void test_internal_literal() { std::cout << "Testing Internal::{Bool,I32,I64,Int,F32,F64,Float}Lit\n"; Literal i32Zero(int32_t(0)); Literal i32One(int32_t(1)); Literal i32Two(int32_t(2)); Literal f32Zero(float(0)); Literal f32One(float(1)); Literal i64Zero(int64_t(0)); Literal i64One(int64_t(1)); Literal f64Zero(double(0)); Literal f64One(double(1)); auto anyBool = Internal::BoolLit(nullptr, Internal::Any(nullptr)); assert(anyBool.matches(i32Zero)); assert(anyBool.matches(i32One)); assert(!anyBool.matches(i32Two)); assert(!anyBool.matches(f32Zero)); assert(!anyBool.matches(f32One)); assert(!anyBool.matches(i64Zero)); assert(!anyBool.matches(i64One)); assert(!anyBool.matches(f64Zero)); assert(!anyBool.matches(f64One)); auto anyi32 = Internal::I32Lit(nullptr, Internal::Any(nullptr)); assert(anyi32.matches(i32Zero)); assert(anyi32.matches(i32One)); assert(!anyi32.matches(f32Zero)); assert(!anyi32.matches(f32One)); assert(!anyi32.matches(i64Zero)); assert(!anyi32.matches(i64One)); assert(!anyi32.matches(f64Zero)); assert(!anyi32.matches(f64One)); auto onei32 = Internal::I32Lit(nullptr, Internal::Exact(nullptr, 1)); assert(!onei32.matches(i32Zero)); assert(onei32.matches(i32One)); assert(!onei32.matches(f32Zero)); assert(!onei32.matches(f32One)); assert(!onei32.matches(i64Zero)); assert(!onei32.matches(i64One)); assert(!onei32.matches(f64Zero)); assert(!onei32.matches(f64One)); auto anyi64 = Internal::I64Lit(nullptr, Internal::Any(nullptr)); assert(!anyi64.matches(i32Zero)); assert(!anyi64.matches(i32One)); assert(!anyi64.matches(f32Zero)); assert(!anyi64.matches(f32One)); assert(anyi64.matches(i64Zero)); assert(anyi64.matches(i64One)); assert(!anyi64.matches(f64Zero)); assert(!anyi64.matches(f64One)); auto onei64 = Internal::I64Lit(nullptr, Internal::Exact(nullptr, 1)); assert(!onei64.matches(i32Zero)); assert(!onei64.matches(i32One)); assert(!onei64.matches(f32Zero)); assert(!onei64.matches(f32One)); assert(!onei64.matches(i64Zero)); assert(onei64.matches(i64One)); assert(!onei64.matches(f64Zero)); assert(!onei64.matches(f64One)); auto anyint = Internal::IntLit(nullptr, Internal::Any(nullptr)); assert(anyint.matches(i32Zero)); assert(anyint.matches(i32One)); assert(!anyint.matches(f32Zero)); assert(!anyint.matches(f32One)); assert(anyint.matches(i64Zero)); assert(anyint.matches(i64One)); assert(!anyint.matches(f64Zero)); assert(!anyint.matches(f64One)); auto oneint = Internal::IntLit(nullptr, Internal::Exact(nullptr, 1)); assert(!oneint.matches(i32Zero)); assert(oneint.matches(i32One)); assert(!oneint.matches(f32Zero)); assert(!oneint.matches(f32One)); assert(!oneint.matches(i64Zero)); assert(oneint.matches(i64One)); assert(!oneint.matches(f64Zero)); assert(!oneint.matches(f64One)); auto anyf32 = Internal::F32Lit(nullptr, Internal::Any(nullptr)); assert(!anyf32.matches(i32Zero)); assert(!anyf32.matches(i32One)); assert(anyf32.matches(f32Zero)); assert(anyf32.matches(f32One)); assert(!anyf32.matches(i64Zero)); assert(!anyf32.matches(i64One)); assert(!anyf32.matches(f64Zero)); assert(!anyf32.matches(f64One)); auto onef32 = Internal::F32Lit(nullptr, Internal::Exact(nullptr, 1)); assert(!onef32.matches(i32Zero)); assert(!onef32.matches(i32One)); assert(!onef32.matches(f32Zero)); assert(onef32.matches(f32One)); assert(!onef32.matches(i64Zero)); assert(!onef32.matches(i64One)); assert(!onef32.matches(f64Zero)); assert(!onef32.matches(f64One)); auto anyf64 = Internal::F64Lit(nullptr, Internal::Any(nullptr)); assert(!anyf64.matches(i32Zero)); assert(!anyf64.matches(i32One)); assert(!anyf64.matches(f32Zero)); assert(!anyf64.matches(f32One)); assert(!anyf64.matches(i64Zero)); assert(!anyf64.matches(i64One)); assert(anyf64.matches(f64Zero)); assert(anyf64.matches(f64One)); auto onef64 = Internal::F64Lit(nullptr, Internal::Exact(nullptr, 1)); assert(!onef64.matches(i32Zero)); assert(!onef64.matches(i32One)); assert(!onef64.matches(f32Zero)); assert(!onef64.matches(f32One)); assert(!onef64.matches(i64Zero)); assert(!onef64.matches(i64One)); assert(!onef64.matches(f64Zero)); assert(onef64.matches(f64One)); auto anyfp = Internal::FloatLit(nullptr, Internal::Any(nullptr)); assert(!anyfp.matches(i32Zero)); assert(!anyfp.matches(i32One)); assert(anyfp.matches(f32Zero)); assert(anyfp.matches(f32One)); assert(!anyfp.matches(i64Zero)); assert(!anyfp.matches(i64One)); assert(anyfp.matches(f64Zero)); assert(anyfp.matches(f64One)); auto onefp = Internal::FloatLit(nullptr, Internal::Exact(nullptr, 1)); assert(!onefp.matches(i32Zero)); assert(!onefp.matches(i32One)); assert(!onefp.matches(f32Zero)); assert(onefp.matches(f32One)); assert(!onefp.matches(i64Zero)); assert(!onefp.matches(i64One)); assert(!onefp.matches(f64Zero)); assert(onefp.matches(f64One)); auto number = Internal::NumberLit(nullptr, 1); assert(!number.matches(i32Zero)); assert(number.matches(i32One)); assert(!number.matches(f32Zero)); assert(number.matches(f32One)); assert(!number.matches(i64Zero)); assert(number.matches(i64One)); assert(!number.matches(f64Zero)); assert(number.matches(f64One)); int64_t x = 0; Literal xLit; Literal imatched(int32_t(42)); assert(Internal::IntLit(&xLit, Internal::Any(&x)).matches(imatched)); assert(xLit == imatched); assert(x == 42); double f = 0; Literal fLit; Literal fmatched(double(42)); assert(Internal::FloatLit(&fLit, Internal::Any(&f)).matches(fmatched)); assert(fLit == fmatched); assert(f == 42.0); Literal numLit; Literal numMatched(1.0f); assert(Internal::NumberLit(&numLit, 1).matches(numMatched)); assert(numLit == numMatched); } void test_internal_const() { std::cout << "Testing Internal::ConstantMatcher\n"; Const* c = builder.makeConst(Literal(int32_t(42))); Expression* constExpr = builder.makeConst(Literal(int32_t(43))); Expression* nop = builder.makeNop(); Const* extractedConst = nullptr; Literal extractedLit; int32_t extractedInt = 0; auto matcher = Internal::ConstMatcher( &extractedConst, Internal::I32Lit(&extractedLit, Internal::Any(&extractedInt))); assert(matcher.matches(c)); assert(extractedConst == c); assert(extractedLit == Literal(int32_t(42))); assert(extractedInt == 42); assert(matcher.matches(constExpr)); assert(extractedConst == constExpr); assert(extractedLit == Literal(int32_t(43))); assert(extractedInt == 43); assert(!matcher.matches(nop)); } void test_internal_unary() { Expression* eqz32 = builder.makeUnary(EqZInt32, builder.makeConst(Literal(int32_t(0)))); Expression* eqz64 = builder.makeUnary(EqZInt64, builder.makeConst(Literal(int64_t(0)))); Expression* clz = builder.makeUnary(ClzInt32, builder.makeConst(Literal(int32_t(0)))); Expression* nop = builder.makeNop(); std::cout << "Testing Internal::UnaryMatcher\n"; Unary* out = nullptr; UnaryOp op; auto unMatcher = Internal::UnaryMatcher( &out, Internal::Any(&op), Internal::Any(nullptr)); assert(unMatcher.matches(eqz32)); assert(out == eqz32); assert(op == EqZInt32); assert(unMatcher.matches(eqz64)); assert(out == eqz64); assert(op == EqZInt64); assert(unMatcher.matches(clz)); assert(out == clz); assert(op == ClzInt32); assert(!unMatcher.matches(nop)); assert(matches(clz, unary(any()))); assert(matches(eqz64, unary(&out, any()))); assert(out == eqz64); assert(matches(eqz32, unary(&op, any()))); assert(op == EqZInt32); std::cout << "Testing Internal::UnaryOpMatcher\n"; out = nullptr; auto eqz32Matcher = Internal::UnaryOpMatcher( &out, EqZInt32, Internal::Any(nullptr)); assert(eqz32Matcher.matches(eqz32)); assert(out == eqz32); assert(!eqz32Matcher.matches(eqz64)); assert(!eqz32Matcher.matches(clz)); assert(!eqz32Matcher.matches(nop)); std::cout << "Testing Internal::AbstractUnaryOpMatcher\n"; out = nullptr; auto eqzMatcher = Internal::AbstractUnaryOpMatcher( &out, Abstract::EqZ, Internal::Any(nullptr)); assert(eqzMatcher.matches(eqz32)); assert(out == eqz32); assert(eqzMatcher.matches(eqz64)); assert(out == eqz64); assert(!eqzMatcher.matches(clz)); assert(!eqzMatcher.matches(nop)); } void test_internal_binary() { Expression* eq32 = builder.makeBinary(EqInt32, builder.makeConst(Literal(int32_t(0))), builder.makeConst(Literal(int32_t(0)))); Expression* eq64 = builder.makeBinary(EqInt64, builder.makeConst(Literal(int64_t(0))), builder.makeConst(Literal(int64_t(0)))); Expression* add = builder.makeBinary(AddInt32, builder.makeConst(Literal(int32_t(0))), builder.makeConst(Literal(int32_t(0)))); Expression* nop = builder.makeNop(); std::cout << "Testing Internal::BinaryMatcher\n"; Binary* out = nullptr; BinaryOp op; auto binMatcher = Internal::BinaryMatcher(&out, Internal::Any(&op), Internal::Any(nullptr), Internal::Any(nullptr)); assert(binMatcher.matches(eq32)); assert(out == eq32); assert(op == EqInt32); assert(binMatcher.matches(eq64)); assert(out == eq64); assert(op == EqInt64); assert(binMatcher.matches(add)); assert(out == add); assert(op == AddInt32); assert(!binMatcher.matches(nop)); assert(matches(add, binary(any(), any()))); assert(matches(eq64, binary(&out, any(), any()))); assert(out == eq64); assert(matches(eq32, binary(&op, any(), any()))); assert(op == EqInt32); std::cout << "Testing Internal::BinaryOpMatcher\n"; out = nullptr; auto eq32Matcher = Internal::BinaryOpMatcher(&out, EqInt32, Internal::Any(nullptr), Internal::Any(nullptr)); assert(eq32Matcher.matches(eq32)); assert(out == eq32); assert(!eq32Matcher.matches(eq64)); assert(!eq32Matcher.matches(add)); assert(!eq32Matcher.matches(nop)); std::cout << "Testing Internal::AbstractBinaryOpMatcher\n"; out = nullptr; auto eqMatcher = Internal::AbstractBinaryOpMatcher(&out, Abstract::Eq, Internal::Any(nullptr), Internal::Any(nullptr)); assert(eqMatcher.matches(eq32)); assert(out == eq32); assert(eqMatcher.matches(eq64)); assert(out == eq64); assert(!eqMatcher.matches(add)); assert(!eqMatcher.matches(nop)); } void test_internal_select() { std::cout << "Testing Internal::SelectMatcher\n"; auto zero = [&]() { return builder.makeConst(Literal(int32_t(0))); }; auto one = [&]() { return builder.makeConst(Literal(int32_t(1))); }; auto constMatcher = [](int32_t c) { return Internal::ConstMatcher( nullptr, Internal::I32Lit(nullptr, Internal::Exact(nullptr, c))); }; // NB: `makeSelect` takes the condition first for some reason Expression* leftOne = builder.makeSelect(zero(), one(), zero()); Expression* rightOne = builder.makeSelect(zero(), zero(), one()); Expression* condOne = builder.makeSelect(one(), zero(), zero()); Select* out = nullptr; auto zeroesMatcher = Internal::SelectMatcher( &out, constMatcher(0), constMatcher(0), constMatcher(0)); assert(!zeroesMatcher.matches(leftOne)); assert(!zeroesMatcher.matches(rightOne)); assert(!zeroesMatcher.matches(condOne)); auto leftMatcher = Internal::SelectMatcher( &out, constMatcher(1), constMatcher(0), constMatcher(0)); assert(leftMatcher.matches(leftOne)); assert(out == leftOne); assert(!leftMatcher.matches(rightOne)); assert(!leftMatcher.matches(condOne)); auto rightMatcher = Internal::SelectMatcher( &out, constMatcher(0), constMatcher(1), constMatcher(0)); assert(!rightMatcher.matches(leftOne)); assert(rightMatcher.matches(rightOne)); assert(out == rightOne); assert(!rightMatcher.matches(condOne)); auto condMatcher = Internal::SelectMatcher( &out, constMatcher(0), constMatcher(0), constMatcher(1)); assert(!condMatcher.matches(leftOne)); assert(!condMatcher.matches(rightOne)); assert(condMatcher.matches(condOne)); assert(out == condOne); } int main() { test_internal_any(); test_internal_exact(); test_internal_literal(); test_internal_const(); test_internal_unary(); test_internal_binary(); test_internal_select(); } binaryen-version_108/test/example/match.txt000066400000000000000000000005731423707623100212210ustar00rootroot00000000000000Testing Internal::Any Testing Internal::Exact Testing Internal::{Bool,I32,I64,Int,F32,F64,Float}Lit Testing Internal::ConstantMatcher Testing Internal::UnaryMatcher Testing Internal::UnaryOpMatcher Testing Internal::AbstractUnaryOpMatcher Testing Internal::BinaryMatcher Testing Internal::BinaryOpMatcher Testing Internal::AbstractBinaryOpMatcher Testing Internal::SelectMatcher binaryen-version_108/test/example/module-splitting.cpp000066400000000000000000000252601423707623100233700ustar00rootroot00000000000000#include #include #include "ir/module-splitting.h" #include "ir/stack-utils.h" #include "wasm-features.h" #include "wasm-s-parser.h" #include "wasm-validator.h" #include "wasm.h" using namespace wasm; std::unique_ptr parse(char* module) { auto wasm = std::make_unique(); wasm->features = FeatureSet::All; try { SExpressionParser parser(module); Element& root = *parser.root; SExpressionWasmBuilder builder(*wasm, *root[0], IRProfile::Normal); } catch (ParseException& p) { p.dump(std::cerr); Fatal() << "error in parsing wasm text"; } return wasm; } void do_test(const std::set& keptFuncs, std::string&& module) { WasmValidator validator; bool valid; auto primary = parse(&module.front()); valid = validator.validate(*primary); assert(valid && "before invalid!"); std::cout << "Before:\n"; std::cout << *primary.get(); std::cout << "Keeping: "; if (keptFuncs.size()) { auto it = keptFuncs.begin(); std::cout << *it++; while (it != keptFuncs.end()) { std::cout << ", " << *it++; } } else { std::cout << ""; } std::cout << "\n"; ModuleSplitting::Config config; config.primaryFuncs = keptFuncs; config.newExportPrefix = "%"; auto secondary = splitFunctions(*primary, config).secondary; std::cout << "After:\n"; std::cout << *primary.get(); std::cout << "Secondary:\n"; std::cout << *secondary.get(); std::cout << "\n\n"; valid = validator.validate(*primary); assert(valid && "after invalid!"); valid = validator.validate(*secondary); assert(valid && "secondary invalid!"); } void test_minimized_exports(); int main() { // Trivial module do_test({}, "(module)"); // Global stuff do_test({}, R"( (module (memory $mem (shared 3 42)) (table $tab 3 42 funcref) (global $glob (mut i32) (i32.const 7)) (tag $e (param i32)) ))"); // Imported global stuff do_test({}, R"( (module (import "env" "mem" (memory $mem (shared 3 42))) (import "env" "tab" (table $tab 3 42 funcref)) (import "env" "glob" (global $glob (mut i32))) (import "env" "e" (tag $e (param i32))) ))"); // Exported global stuff do_test({}, R"( (module (memory $mem (shared 3 42)) (table $tab 3 42 funcref) (global $glob (mut i32) (i32.const 7)) (tag $e (param i32)) (export "mem" (memory $mem)) (export "tab" (table $tab)) (export "glob" (global $glob)) (export "e" (tag $e)) ))"); // Non-deferred function do_test({"foo"}, R"( (module (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Non-deferred exported function do_test({"foo"}, R"( (module (export "foo" (func $foo)) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Non-deferred function in table do_test({"foo"}, R"( (module (table $table 1 funcref) (elem (i32.const 0) $foo) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Non-deferred function in table multiple times do_test({"foo"}, R"( (module (table $table 2 funcref) (elem (i32.const 0) $foo $foo) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Non-deferred function in table at non-const offset do_test({"foo"}, R"( (module (import "env" "base" (global $base i32)) (table $table 1 funcref) (elem (global.get $base) $foo) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Non-deferred function in table at non-const offset multiple times do_test({"foo"}, R"( (module (import "env" "base" (global $base i32)) (table $table 2 funcref) (elem (global.get $base) $foo $foo) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Non-deferred imported function do_test({"foo"}, R"( (module (import "env" "foo" (func $foo (param i32) (result i32))) ))"); // Non-deferred exported imported function in table at a weird offset do_test({"foo"}, R"( (module (import "env" "foo" (func $foo (param i32) (result i32))) (table $table 1000 funcref) (elem (i32.const 42) $foo) (export "foo" (func $foo)) ))"); // Non-deferred exported imported function in table at a non-const offset do_test({"foo"}, R"( (module (import "env" "base" (global $base i32)) (import "env" "foo" (func $foo (param i32) (result i32))) (table $table 1000 funcref) (elem (global.get $base) $foo) (export "foo" (func $foo)) ))"); // Deferred function do_test({}, R"( (module (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Deferred exported function do_test({}, R"( (module (export "foo" (func $foo)) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Deferred function in table do_test({}, R"( (module (table $table 1 funcref) (elem (i32.const 0) $foo) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Deferred function in table multiple times do_test({}, R"( (module (table $table 2 funcref) (elem (i32.const 0) $foo $foo) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Deferred exported function in table at a weird offset do_test({}, R"( (module (table $table 1000 funcref) (elem (i32.const 42) $foo) (export "foo" (func $foo)) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Deferred exported function in table at a non-const offset do_test({}, R"( (module (import "env" "base" (global $base i32)) (table $table 1000 funcref) (elem (global.get $base) $foo) (export "foo" (func $foo)) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Deferred exported function in table at a non-const offset multiple times do_test({}, R"( (module (import "env" "base" (global $base i32)) (table $table 1000 funcref) (elem (global.get $base) $foo $foo) (export "foo" (func $foo)) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Deferred exported function in table at an offset from a non-const base do_test({"null"}, R"( (module (import "env" "base" (global $base i32)) (table $table 1000 funcref) (elem (global.get $base) $null $foo) (export "foo" (func $foo)) (func $null) (func $foo (param i32) (result i32) (local.get 0) ) ))"); // Non-deferred function calling non-deferred function do_test({"foo", "bar"}, R"( (module (func $foo (call $bar) ) (func $bar (nop) ) ))"); // Deferred function calling non-deferred function do_test({"bar"}, R"( (module (func $foo (call $bar) ) (func $bar (nop) ) ))"); // Non-deferred function calling deferred function do_test({"foo"}, R"( (module (func $foo (call $bar) ) (func $bar (nop) ) ))"); // Deferred function calling deferred function do_test({}, R"( (module (func $foo (call $bar) ) (func $bar (nop) ) ))"); // Deferred function calling non-deferred function with clashing export name do_test({"foo"}, R"( (module (export "%foo" (func $bar)) (func $foo (nop) ) (func $bar (call $foo) ) ))"); // Mixed table 1 do_test({"bar", "quux"}, R"( (module (table $table 4 funcref) (elem (i32.const 0) $foo $bar $baz $quux) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $quux (nop) ) ))"); // Mixed table 1 with non-const offset do_test({"bar", "quux"}, R"( (module (import "env" "base" (global $base i32)) (table $table 4 funcref) (elem (global.get $base) $foo $bar $baz $quux) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $quux (nop) ) ))"); // Mixed table 2 do_test({"baz"}, R"( (module (table $table 4 funcref) (elem (i32.const 0) $foo $bar $baz $quux) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $quux (nop) ) ))"); // Mixed table 2 with non-const offset do_test({"baz"}, R"( (module (import "env" "base" (global $base i32)) (table $table 4 funcref) (elem (global.get $base) $foo $bar $baz $quux) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $quux (nop) ) ))"); // `foo` is exported both because it is called by `bar` and because it is in a // table gap do_test({"foo"}, R"( (module (import "env" "base" (global $base i32)) (table $table 2 funcref) (elem (global.get $base) $foo $bar) (func $foo (nop) ) (func $bar (call $foo) ) ))"); // Mutual recursion with table growth do_test({"foo"}, R"( (module (table $table 1 1 funcref) (elem (i32.const 0) $foo) (func $foo (param i32) (result i32) (call $bar (i32.const 0)) ) (func $bar (param i32) (result i32) (call $foo (i32.const 1)) ) ))"); // Multiple exports of a secondary function do_test({}, R"( (module (export "foo1" (func $foo)) (export "foo2" (func $foo)) (func $foo) ))"); test_minimized_exports(); } void test_minimized_exports() { Module primary; primary.features = FeatureSet::All; std::set keep; Expression* callBody = nullptr; Builder builder(primary); auto funcType = Signature(Type::none, Type::none); for (size_t i = 0; i < 10; ++i) { Name name = std::to_string(i); primary.addFunction( Builder::makeFunction(name, funcType, {}, builder.makeNop())); keep.insert(name); callBody = builder.blockify(callBody, builder.makeCall(name, {}, Type::none)); if (i == 3) { primary.addExport( Builder::makeExport("already_exported", name, ExternalKind::Function)); } if (i == 7) { primary.addExport( Builder::makeExport("%b", name, ExternalKind::Function)); } } primary.addFunction(Builder::makeFunction("call", funcType, {}, callBody)); ModuleSplitting::Config config; config.primaryFuncs = std::move(keep); config.newExportPrefix = "%"; config.minimizeNewExportNames = true; auto secondary = splitFunctions(primary, config).secondary; std::cout << "Minimized names primary:\n"; std::cout << primary << "\n"; std::cout << "Minimized names secondary:\n"; std::cout << *secondary << "\n"; } binaryen-version_108/test/example/module-splitting.txt000066400000000000000000000550761423707623100234350ustar00rootroot00000000000000Before: (module ) Keeping: After: (module ) Secondary: (module ) Before: (module (type $i32_=>_none (func (param i32))) (global $glob (mut i32) (i32.const 7)) (memory $mem (shared 3 42)) (table $tab 3 42 funcref) (tag $e (param i32)) ) Keeping: After: (module (type $i32_=>_none (func (param i32))) (global $glob (mut i32) (i32.const 7)) (memory $mem (shared 3 42)) (table $tab 3 42 funcref) (tag $e (param i32)) (export "%memory" (memory $mem)) (export "%table" (table $tab)) (export "%global" (global $glob)) (export "%tag" (tag $e)) ) Secondary: (module (type $i32_=>_none (func (param i32))) (import "primary" "%memory" (memory $mem (shared 3 42))) (import "primary" "%table" (table $tab 3 42 funcref)) (import "primary" "%global" (global $glob (mut i32))) (import "primary" "%tag" (tag $e (param i32))) ) Before: (module (type $i32_=>_none (func (param i32))) (import "env" "mem" (memory $mem (shared 3 42))) (import "env" "tab" (table $tab 3 42 funcref)) (import "env" "glob" (global $glob (mut i32))) (import "env" "e" (tag $e (param i32))) ) Keeping: After: (module (type $i32_=>_none (func (param i32))) (import "env" "mem" (memory $mem (shared 3 42))) (import "env" "tab" (table $tab 3 42 funcref)) (import "env" "glob" (global $glob (mut i32))) (import "env" "e" (tag $e (param i32))) (export "%memory" (memory $mem)) (export "%table" (table $tab)) (export "%global" (global $glob)) (export "%tag" (tag $e)) ) Secondary: (module (type $i32_=>_none (func (param i32))) (import "primary" "%memory" (memory $mem (shared 3 42))) (import "primary" "%table" (table $tab 3 42 funcref)) (import "primary" "%global" (global $glob (mut i32))) (import "primary" "%tag" (tag $e (param i32))) ) Before: (module (type $i32_=>_none (func (param i32))) (global $glob (mut i32) (i32.const 7)) (memory $mem (shared 3 42)) (table $tab 3 42 funcref) (tag $e (param i32)) (export "mem" (memory $mem)) (export "tab" (table $tab)) (export "glob" (global $glob)) (export "e" (tag $e)) ) Keeping: After: (module (type $i32_=>_none (func (param i32))) (global $glob (mut i32) (i32.const 7)) (memory $mem (shared 3 42)) (table $tab 3 42 funcref) (tag $e (param i32)) (export "mem" (memory $mem)) (export "tab" (table $tab)) (export "glob" (global $glob)) (export "e" (tag $e)) ) Secondary: (module (type $i32_=>_none (func (param i32))) (import "primary" "mem" (memory $mem (shared 3 42))) (import "primary" "tab" (table $tab 3 42 funcref)) (import "primary" "glob" (global $glob (mut i32))) (import "primary" "e" (tag $e (param i32))) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Secondary: (module ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (export "foo" (func $foo)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (export "foo" (func $foo)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Secondary: (module ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 1 funcref) (elem (i32.const 0) $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 1 funcref) (elem (i32.const 0) $foo) (export "%table" (table $table)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Secondary: (module (import "primary" "%table" (table $table 1 funcref)) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 2 funcref) (elem (i32.const 0) $foo $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 2 funcref) (elem (i32.const 0) $foo $foo) (export "%table" (table $table)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Secondary: (module (import "primary" "%table" (table $table 2 funcref)) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (table $table 1 funcref) (elem (global.get $base) $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (table $table 1 funcref) (elem (global.get $base) $foo) (export "%table" (table $table)) (export "%global" (global $base)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Secondary: (module (import "primary" "%table" (table $table 1 funcref)) (import "primary" "%global" (global $base i32)) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (table $table 2 funcref) (elem (global.get $base) $foo $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (table $table 2 funcref) (elem (global.get $base) $foo $foo) (export "%table" (table $table)) (export "%global" (global $base)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Secondary: (module (import "primary" "%table" (table $table 2 funcref)) (import "primary" "%global" (global $base i32)) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "foo" (func $foo (param i32) (result i32))) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "foo" (func $foo (param i32) (result i32))) ) Secondary: (module ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "foo" (func $foo (param i32) (result i32))) (table $table 1000 funcref) (elem (i32.const 42) $foo) (export "foo" (func $foo)) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "foo" (func $foo (param i32) (result i32))) (table $table 1000 funcref) (elem (i32.const 42) $foo) (export "foo" (func $foo)) (export "%table" (table $table)) ) Secondary: (module (import "primary" "%table" (table $table 1000 funcref)) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (import "env" "foo" (func $foo (param i32) (result i32))) (table $table 1000 funcref) (elem (global.get $base) $foo) (export "foo" (func $foo)) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (import "env" "foo" (func $foo (param i32) (result i32))) (table $table 1000 funcref) (elem (global.get $base) $foo) (export "foo" (func $foo)) (export "%table" (table $table)) (export "%global" (global $base)) ) Secondary: (module (import "primary" "%table" (table $table 1000 funcref)) (import "primary" "%global" (global $base i32)) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: After: (module ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (export "foo" (func $foo)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) (table $0 1 funcref) (elem (i32.const 0) $placeholder_0) (export "foo" (func $foo)) (export "%table" (table $0)) (func $foo (param $0 i32) (result i32) (call_indirect $0 (type $i32_=>_i32) (local.get $0) (i32.const 0) ) ) ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "primary" "%table" (table $0 1 funcref)) (elem (i32.const 0) $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 1 funcref) (elem (i32.const 0) $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) (table $table 1 funcref) (elem (i32.const 0) $placeholder_0) (export "%table" (table $table)) ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "primary" "%table" (table $table 1 funcref)) (elem (i32.const 0) $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 2 funcref) (elem (i32.const 0) $foo $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) (import "placeholder" "1" (func $placeholder_1 (param i32) (result i32))) (table $table 2 funcref) (elem (i32.const 0) $placeholder_0 $placeholder_1) (export "%table" (table $table)) ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "primary" "%table" (table $table 2 funcref)) (elem (i32.const 0) $foo $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 1000 funcref) (elem (i32.const 42) $foo) (export "foo" (func $foo)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "placeholder" "42" (func $placeholder_42 (param i32) (result i32))) (table $table 1000 funcref) (elem (i32.const 42) $placeholder_42) (export "foo" (func $foo)) (export "%table" (table $table)) (func $foo (param $0 i32) (result i32) (call_indirect $table (type $i32_=>_i32) (local.get $0) (i32.const 42) ) ) ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "primary" "%table" (table $table 1000 funcref)) (elem (i32.const 42) $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (table $table 1000 funcref) (elem (global.get $base) $foo) (export "foo" (func $foo)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) (table $table 1000 funcref) (elem (global.get $base) $placeholder_0) (export "foo" (func $foo)) (export "%table" (table $table)) (export "%global" (global $base)) (func $foo (param $0 i32) (result i32) (call_indirect $table (type $i32_=>_i32) (local.get $0) (global.get $base) ) ) ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "primary" "%table" (table $table 1000 funcref)) (import "primary" "%global" (global $base i32)) (elem (global.get $base) $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (table $table 1000 funcref) (elem (global.get $base) $foo $foo) (export "foo" (func $foo)) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) (import "placeholder" "1" (func $placeholder_1 (param i32) (result i32))) (table $table 1000 funcref) (elem (global.get $base) $placeholder_0 $placeholder_1) (export "foo" (func $foo)) (export "%table" (table $table)) (export "%global" (global $base)) (func $foo (param $0 i32) (result i32) (call_indirect $table (type $i32_=>_i32) (local.get $0) (global.get $base) ) ) ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "primary" "%table" (table $table 1000 funcref)) (import "primary" "%global" (global $base i32)) (elem (global.get $base) $foo $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Before: (module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "base" (global $base i32)) (table $table 1000 funcref) (elem (global.get $base) $null $foo) (export "foo" (func $foo)) (func $null (nop) ) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Keeping: null After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (import "env" "base" (global $base i32)) (import "placeholder" "1" (func $placeholder_1 (param i32) (result i32))) (table $table 1000 funcref) (elem (global.get $base) $null $placeholder_1) (export "foo" (func $foo)) (export "%null" (func $null)) (export "%table" (table $table)) (export "%global" (global $base)) (func $null (nop) ) (func $foo (param $0 i32) (result i32) (call_indirect $table (type $i32_=>_i32) (local.get $0) (i32.add (global.get $base) (i32.const 1) ) ) ) ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (import "primary" "%table" (table $table 1000 funcref)) (import "primary" "%global" (global $base i32)) (import "primary" "%null" (func $null)) (elem (global.get $base) $null $foo) (func $foo (param $0 i32) (result i32) (local.get $0) ) ) Before: (module (type $none_=>_none (func)) (func $foo (call $bar) ) (func $bar (nop) ) ) Keeping: bar, foo After: (module (type $none_=>_none (func)) (func $foo (call $bar) ) (func $bar (nop) ) ) Secondary: (module ) Before: (module (type $none_=>_none (func)) (func $foo (call $bar) ) (func $bar (nop) ) ) Keeping: bar After: (module (type $none_=>_none (func)) (export "%bar" (func $bar)) (func $bar (nop) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%bar" (func $bar)) (func $foo (call $bar) ) ) Before: (module (type $none_=>_none (func)) (func $foo (call $bar) ) (func $bar (nop) ) ) Keeping: foo After: (module (type $none_=>_none (func)) (import "placeholder" "0" (func $placeholder_0)) (table $0 1 funcref) (elem (i32.const 0) $placeholder_0) (export "%table" (table $0)) (func $foo (call_indirect $0 (type $none_=>_none) (i32.const 0) ) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%table" (table $0 1 funcref)) (elem (i32.const 0) $bar) (func $bar (nop) ) ) Before: (module (type $none_=>_none (func)) (func $foo (call $bar) ) (func $bar (nop) ) ) Keeping: After: (module ) Secondary: (module (type $none_=>_none (func)) (func $bar (nop) ) (func $foo (call $bar) ) ) Before: (module (type $none_=>_none (func)) (export "%foo" (func $bar)) (func $foo (nop) ) (func $bar (call $foo) ) ) Keeping: foo After: (module (type $none_=>_none (func)) (import "placeholder" "0" (func $placeholder_0)) (table $0 1 funcref) (elem (i32.const 0) $placeholder_0) (export "%foo" (func $bar)) (export "%foo_0" (func $foo)) (export "%table" (table $0)) (func $foo (nop) ) (func $bar (call_indirect $0 (type $none_=>_none) (i32.const 0) ) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%table" (table $0 1 funcref)) (import "primary" "%foo_0" (func $foo)) (elem (i32.const 0) $bar) (func $bar (call $foo) ) ) Before: (module (type $none_=>_none (func)) (table $table 4 funcref) (elem (i32.const 0) $foo $bar $baz $quux) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $quux (nop) ) ) Keeping: bar, quux After: (module (type $none_=>_none (func)) (import "placeholder" "0" (func $placeholder_0)) (import "placeholder" "2" (func $placeholder_2)) (table $table 4 funcref) (elem (i32.const 0) $placeholder_0 $bar $placeholder_2 $quux) (export "%table" (table $table)) (func $bar (nop) ) (func $quux (nop) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%table" (table $table 4 funcref)) (elem $0 (i32.const 0) $foo) (elem $1 (i32.const 2) $baz) (func $baz (nop) ) (func $foo (nop) ) ) Before: (module (type $none_=>_none (func)) (import "env" "base" (global $base i32)) (table $table 4 funcref) (elem (global.get $base) $foo $bar $baz $quux) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $quux (nop) ) ) Keeping: bar, quux After: (module (type $none_=>_none (func)) (import "env" "base" (global $base i32)) (import "placeholder" "0" (func $placeholder_0)) (import "placeholder" "2" (func $placeholder_2)) (table $table 4 funcref) (elem (global.get $base) $placeholder_0 $bar $placeholder_2 $quux) (export "%bar" (func $bar)) (export "%table" (table $table)) (export "%global" (global $base)) (func $bar (nop) ) (func $quux (nop) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%table" (table $table 4 funcref)) (import "primary" "%global" (global $base i32)) (import "primary" "%bar" (func $bar)) (elem (global.get $base) $foo $bar $baz) (func $baz (nop) ) (func $foo (nop) ) ) Before: (module (type $none_=>_none (func)) (table $table 4 funcref) (elem (i32.const 0) $foo $bar $baz $quux) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $quux (nop) ) ) Keeping: baz After: (module (type $none_=>_none (func)) (import "placeholder" "0" (func $placeholder_0)) (import "placeholder" "1" (func $placeholder_1)) (import "placeholder" "3" (func $placeholder_3)) (table $table 4 funcref) (elem (i32.const 0) $placeholder_0 $placeholder_1 $baz $placeholder_3) (export "%table" (table $table)) (func $baz (nop) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%table" (table $table 4 funcref)) (elem $0 (i32.const 0) $foo $bar) (elem $1 (i32.const 3) $quux) (func $bar (nop) ) (func $foo (nop) ) (func $quux (nop) ) ) Before: (module (type $none_=>_none (func)) (import "env" "base" (global $base i32)) (table $table 4 funcref) (elem (global.get $base) $foo $bar $baz $quux) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $quux (nop) ) ) Keeping: baz After: (module (type $none_=>_none (func)) (import "env" "base" (global $base i32)) (import "placeholder" "0" (func $placeholder_0)) (import "placeholder" "1" (func $placeholder_1)) (import "placeholder" "3" (func $placeholder_3)) (table $table 4 funcref) (elem (global.get $base) $placeholder_0 $placeholder_1 $baz $placeholder_3) (export "%baz" (func $baz)) (export "%table" (table $table)) (export "%global" (global $base)) (func $baz (nop) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%table" (table $table 4 funcref)) (import "primary" "%global" (global $base i32)) (import "primary" "%baz" (func $baz)) (elem (global.get $base) $foo $bar $baz $quux) (func $bar (nop) ) (func $foo (nop) ) (func $quux (nop) ) ) Before: (module (type $none_=>_none (func)) (import "env" "base" (global $base i32)) (table $table 2 funcref) (elem (global.get $base) $foo $bar) (func $foo (nop) ) (func $bar (call $foo) ) ) Keeping: foo After: (module (type $none_=>_none (func)) (import "env" "base" (global $base i32)) (import "placeholder" "1" (func $placeholder_1)) (table $table 2 funcref) (elem (global.get $base) $foo $placeholder_1) (export "%foo" (func $foo)) (export "%table" (table $table)) (export "%global" (global $base)) (func $foo (nop) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%table" (table $table 2 funcref)) (import "primary" "%global" (global $base i32)) (import "primary" "%foo" (func $foo)) (elem (global.get $base) $foo $bar) (func $bar (call $foo) ) ) Before: (module (type $i32_=>_i32 (func (param i32) (result i32))) (table $table 1 1 funcref) (elem (i32.const 0) $foo) (func $foo (param $0 i32) (result i32) (call $bar (i32.const 0) ) ) (func $bar (param $0 i32) (result i32) (call $foo (i32.const 1) ) ) ) Keeping: foo After: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "placeholder" "1" (func $placeholder_1 (param i32) (result i32))) (table $table 2 2 funcref) (elem (i32.const 0) $foo $placeholder_1) (export "%foo" (func $foo)) (export "%table" (table $table)) (func $foo (param $0 i32) (result i32) (call_indirect $table (type $i32_=>_i32) (i32.const 0) (i32.const 1) ) ) ) Secondary: (module (type $i32_=>_i32 (func (param i32) (result i32))) (import "primary" "%table" (table $table 2 2 funcref)) (import "primary" "%foo" (func $foo (param i32) (result i32))) (elem (i32.const 1) $bar) (func $bar (param $0 i32) (result i32) (call $foo (i32.const 1) ) ) ) Before: (module (type $none_=>_none (func)) (export "foo1" (func $foo)) (export "foo2" (func $foo)) (func $foo (nop) ) ) Keeping: After: (module (type $none_=>_none (func)) (import "placeholder" "0" (func $placeholder_0)) (table $0 1 funcref) (elem (i32.const 0) $placeholder_0) (export "foo1" (func $foo)) (export "foo2" (func $foo)) (export "%table" (table $0)) (func $foo (call_indirect $0 (type $none_=>_none) (i32.const 0) ) ) ) Secondary: (module (type $none_=>_none (func)) (import "primary" "%table" (table $0 1 funcref)) (elem (i32.const 0) $foo) (func $foo (nop) ) ) Minimized names primary: (module (type $none_=>_none (func)) (export "already_exported" (func $3)) (export "%b" (func $7)) (export "%a" (func $0)) (export "%c" (func $1)) (export "%d" (func $2)) (export "%e" (func $4)) (export "%f" (func $5)) (export "%g" (func $6)) (export "%h" (func $8)) (export "%i" (func $9)) (func $0 (nop) ) (func $1 (nop) ) (func $2 (nop) ) (func $3 (nop) ) (func $4 (nop) ) (func $5 (nop) ) (func $6 (nop) ) (func $7 (nop) ) (func $8 (nop) ) (func $9 (nop) ) ) Minimized names secondary: (module (type $none_=>_none (func)) (import "primary" "%a" (func $0)) (import "primary" "%c" (func $1)) (import "primary" "%d" (func $2)) (import "primary" "already_exported" (func $3)) (import "primary" "%e" (func $4)) (import "primary" "%f" (func $5)) (import "primary" "%g" (func $6)) (import "primary" "%b" (func $7)) (import "primary" "%h" (func $8)) (import "primary" "%i" (func $9)) (func $call (call $0) (call $1) (call $2) (call $3) (call $4) (call $5) (call $6) (call $7) (call $8) (call $9) ) ) binaryen-version_108/test/example/relooper-fuzz.c000066400000000000000000000263361423707623100223600ustar00rootroot00000000000000 #include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenEqInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 27)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, and add 8 since // that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeAuto()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(2))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(3))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(4))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b5; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(5))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b5 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b6; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(6))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b6 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b7; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(7))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b7 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b8; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(8))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b8 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperAddBranch( b0, b5, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(2))), BinaryenConst(module, BinaryenLiteralInt32(0))), NULL); RelooperAddBranch(b0, b8, NULL, NULL); RelooperAddBranch(b1, b5, NULL, NULL); RelooperAddBranch(b2, b5, NULL, NULL); RelooperAddBranch( b3, b5, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(2))), BinaryenConst(module, BinaryenLiteralInt32(0))), NULL); RelooperAddBranch(b3, b8, NULL, NULL); RelooperAddBranch( b4, b4, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(3))), BinaryenConst(module, BinaryenLiteralInt32(0))), NULL); RelooperAddBranch( b4, b5, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(3))), BinaryenConst(module, BinaryenLiteralInt32(1))), NULL); RelooperAddBranch(b4, b2, NULL, NULL); RelooperAddBranch( b5, b4, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(2))), BinaryenConst(module, BinaryenLiteralInt32(0))), NULL); RelooperAddBranch(b5, b5, NULL, NULL); RelooperAddBranch(b6, b6, NULL, NULL); RelooperAddBranch(b7, b8, NULL, NULL); RelooperAddBranch(b8, b4, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); int decisions[] = {89, 12, 78, 149, 118, 179, 127, 80, 21, 34, 119, 98, 38, 29, 36, 147, 13, 55, 166, 16, 143, 52, 130, 150, 176, 91, 34}; int numDecisions = sizeof(decisions) / sizeof(int); BinaryenExpressionRef full[numDecisions + 1]; // write out all the decisions, // then the body of the function { int i; for (i = 0; i < numDecisions; i++) { full[i] = BinaryenStore(module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), BinaryenTypeInt32()); } } full[numDecisions] = body; BinaryenExpressionRef all = BinaryenBlock(module, NULL, full, numDecisions + 1, BinaryenTypeAuto()); BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; // state, free-for-label BinaryenFunctionRef theMain = BinaryenAddFunction( module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, all); BinaryenSetStart(module, theMain); // import BinaryenType iparams[] = {BinaryenTypeInt32()}; BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); assert(BinaryenModuleValidate(module)); BinaryenModulePrint(module); BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-fuzz.txt000066400000000000000000000171221423707623100227460ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.eq (i32.load (i32.const 4) ) (i32.const 108) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (i32.store (i32.const 8) (i32.const 89) ) (i32.store (i32.const 12) (i32.const 12) ) (i32.store (i32.const 16) (i32.const 78) ) (i32.store (i32.const 20) (i32.const 149) ) (i32.store (i32.const 24) (i32.const 118) ) (i32.store (i32.const 28) (i32.const 179) ) (i32.store (i32.const 32) (i32.const 127) ) (i32.store (i32.const 36) (i32.const 80) ) (i32.store (i32.const 40) (i32.const 21) ) (i32.store (i32.const 44) (i32.const 34) ) (i32.store (i32.const 48) (i32.const 119) ) (i32.store (i32.const 52) (i32.const 98) ) (i32.store (i32.const 56) (i32.const 38) ) (i32.store (i32.const 60) (i32.const 29) ) (i32.store (i32.const 64) (i32.const 36) ) (i32.store (i32.const 68) (i32.const 147) ) (i32.store (i32.const 72) (i32.const 13) ) (i32.store (i32.const 76) (i32.const 55) ) (i32.store (i32.const 80) (i32.const 166) ) (i32.store (i32.const 84) (i32.const 16) ) (i32.store (i32.const 88) (i32.const 143) ) (i32.store (i32.const 92) (i32.const 52) ) (i32.store (i32.const 96) (i32.const 130) ) (i32.store (i32.const 100) (i32.const 150) ) (i32.store (i32.const 104) (i32.const 176) ) (i32.store (i32.const 108) (i32.const 91) ) (i32.store (i32.const 112) (i32.const 34) ) (block (block (block $block$6$break (block $block$5$break (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (if (i32.eq (i32.rem_u (local.get $0) (i32.const 2) ) (i32.const 0) ) (block (local.set $1 (i32.const 6) ) (br $block$6$break) ) (block (block (call $print (i32.const 8) ) (local.set $0 (call $check) ) ) (block (br $block$5$break) ) ) ) ) ) ) (loop $shape$3$continue (block $block$5$break0 (if (i32.eq (local.get $1) (i32.const 6) ) (block (local.set $1 (i32.const 0) ) (block (call $print (i32.const 5) ) (local.set $0 (call $check) ) ) (if (i32.eq (i32.rem_u (local.get $0) (i32.const 2) ) (i32.const 0) ) (br $shape$3$continue) (block (local.set $1 (i32.const 6) ) (br $shape$3$continue) ) ) ) ) ) (block (block $block$3$break (block (call $print (i32.const 4) ) (local.set $0 (call $check) ) ) (if (i32.eq (i32.rem_u (local.get $0) (i32.const 3) ) (i32.const 0) ) (br $shape$3$continue) (if (i32.eq (i32.rem_u (local.get $0) (i32.const 3) ) (i32.const 1) ) (block (local.set $1 (i32.const 6) ) (br $shape$3$continue) ) (br $block$3$break) ) ) ) (block (block (call $print (i32.const 2) ) (local.set $0 (call $check) ) ) (block (local.set $1 (i32.const 6) ) (br $shape$3$continue) ) ) ) ) ) ) ) (module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (; has Stack IR ;) (result i32) (if (i32.eq (i32.load (i32.const 4) ) (i32.const 108) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (; has Stack IR ;) (local $0 i32) (local $1 i32) (i32.store (i32.const 8) (i32.const 89) ) (i32.store (i32.const 12) (i32.const 12) ) (i32.store (i32.const 16) (i32.const 78) ) (i32.store (i32.const 20) (i32.const 149) ) (i32.store (i32.const 24) (i32.const 118) ) (i32.store (i32.const 28) (i32.const 179) ) (i32.store (i32.const 32) (i32.const 127) ) (i32.store (i32.const 36) (i32.const 80) ) (i32.store (i32.const 40) (i32.const 21) ) (i32.store (i32.const 44) (i32.const 34) ) (i32.store (i32.const 48) (i32.const 119) ) (i32.store (i32.const 52) (i32.const 98) ) (i32.store (i32.const 56) (i32.const 38) ) (i32.store (i32.const 60) (i32.const 29) ) (i32.store (i32.const 64) (i32.const 36) ) (i32.store (i32.const 68) (i32.const 147) ) (i32.store (i32.const 72) (i32.const 13) ) (i32.store (i32.const 76) (i32.const 55) ) (i32.store (i32.const 80) (i32.const 166) ) (i32.store (i32.const 84) (i32.const 16) ) (i32.store (i32.const 88) (i32.const 143) ) (i32.store (i32.const 92) (i32.const 52) ) (i32.store (i32.const 96) (i32.const 130) ) (i32.store (i32.const 100) (i32.const 150) ) (i32.store (i32.const 104) (i32.const 176) ) (i32.store (i32.const 108) (i32.const 91) ) (i32.store (i32.const 112) (i32.const 34) ) (call $print (i32.const 0) ) (if (i32.and (call $check) (i32.const 1) ) (block (call $print (i32.const 8) ) (drop (call $check) ) ) (local.set $0 (i32.const 6) ) ) (loop $shape$3$continue (if (i32.eq (local.get $0) (i32.const 6) ) (block (local.set $0 (i32.const 0) ) (call $print (i32.const 5) ) (br_if $shape$3$continue (i32.eqz (i32.and (call $check) (i32.const 1) ) ) ) (local.set $0 (i32.const 6) ) (br $shape$3$continue) ) ) (call $print (i32.const 4) ) (br_if $shape$3$continue (i32.eqz (i32.rem_u (local.tee $1 (call $check) ) (i32.const 3) ) ) ) (if (i32.eq (i32.rem_u (local.get $1) (i32.const 3) ) (i32.const 1) ) (block (local.set $0 (i32.const 6) ) (br $shape$3$continue) ) (block (call $print (i32.const 2) ) (drop (call $check) ) (local.set $0 (i32.const 6) ) (br $shape$3$continue) ) ) ) ) ) binaryen-version_108/test/example/relooper-fuzz1.c000066400000000000000000000257661423707623100224470ustar00rootroot00000000000000#include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenEqInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 30)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeAuto()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(2))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(3))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(4))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b5; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(5))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b5 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b6; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(6))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b6 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b7; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(7))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b7 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b8; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(8))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b8 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperBlockRef b9; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(9))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b9 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeAuto())); } RelooperAddBranch( b0, b2, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(0))), NULL); RelooperAddBranch( b0, b7, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(2))), NULL); RelooperAddBranch(b0, b3, NULL, NULL); RelooperAddBranch( b2, b3, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(2))), BinaryenConst(module, BinaryenLiteralInt32(0))), NULL); RelooperAddBranch(b2, b9, NULL, NULL); RelooperAddBranch(b3, b3, NULL, NULL); RelooperAddBranch( b7, b2, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(3))), BinaryenConst(module, BinaryenLiteralInt32(0))), NULL); RelooperAddBranch(b7, b9, NULL, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); int decisions[] = {67, 131, 49, 36, 112, 161, 62, 166, 16, 88, 176, 152, 161, 194, 117, 180, 60, 166, 55, 183, 150, 73, 196, 143, 76, 182, 97, 140, 126, 3}; int numDecisions = sizeof(decisions) / sizeof(int); // write out all the decisions, then the body of the function BinaryenExpressionRef full[numDecisions + 1]; { int i; for (i = 0; i < numDecisions; i++) { full[i] = BinaryenStore(module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), BinaryenTypeInt32()); } } full[numDecisions] = body; BinaryenExpressionRef all = BinaryenBlock(module, NULL, full, numDecisions + 1, BinaryenTypeAuto()); // locals: state, free-for-label BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenFunctionRef theMain = BinaryenAddFunction( module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, all); BinaryenSetStart(module, theMain); // import BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); assert(BinaryenModuleValidate(module)); BinaryenModulePrint(module); BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-fuzz1.txt000066400000000000000000000160201423707623100230230ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.eq (i32.load (i32.const 4) ) (i32.const 120) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (i32.store (i32.const 8) (i32.const 67) ) (i32.store (i32.const 12) (i32.const 131) ) (i32.store (i32.const 16) (i32.const 49) ) (i32.store (i32.const 20) (i32.const 36) ) (i32.store (i32.const 24) (i32.const 112) ) (i32.store (i32.const 28) (i32.const 161) ) (i32.store (i32.const 32) (i32.const 62) ) (i32.store (i32.const 36) (i32.const 166) ) (i32.store (i32.const 40) (i32.const 16) ) (i32.store (i32.const 44) (i32.const 88) ) (i32.store (i32.const 48) (i32.const 176) ) (i32.store (i32.const 52) (i32.const 152) ) (i32.store (i32.const 56) (i32.const 161) ) (i32.store (i32.const 60) (i32.const 194) ) (i32.store (i32.const 64) (i32.const 117) ) (i32.store (i32.const 68) (i32.const 180) ) (i32.store (i32.const 72) (i32.const 60) ) (i32.store (i32.const 76) (i32.const 166) ) (i32.store (i32.const 80) (i32.const 55) ) (i32.store (i32.const 84) (i32.const 183) ) (i32.store (i32.const 88) (i32.const 150) ) (i32.store (i32.const 92) (i32.const 73) ) (i32.store (i32.const 96) (i32.const 196) ) (i32.store (i32.const 100) (i32.const 143) ) (i32.store (i32.const 104) (i32.const 76) ) (i32.store (i32.const 108) (i32.const 182) ) (i32.store (i32.const 112) (i32.const 97) ) (i32.store (i32.const 116) (i32.const 140) ) (i32.store (i32.const 120) (i32.const 126) ) (i32.store (i32.const 124) (i32.const 3) ) (block (block $block$10$break (block $block$4$break (block $block$3$break (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (if (i32.eq (i32.rem_u (local.get $0) (i32.const 4) ) (i32.const 0) ) (br $block$3$break) (if (i32.eq (i32.rem_u (local.get $0) (i32.const 4) ) (i32.const 2) ) (block (block (call $print (i32.const 7) ) (local.set $0 (call $check) ) ) (if (i32.eq (i32.rem_u (local.get $0) (i32.const 3) ) (i32.const 0) ) (br $block$3$break) (br $block$10$break) ) ) (br $block$4$break) ) ) ) (block (block (call $print (i32.const 2) ) (local.set $0 (call $check) ) ) (if (i32.eq (i32.rem_u (local.get $0) (i32.const 2) ) (i32.const 0) ) (br $block$4$break) (br $block$10$break) ) ) ) (loop $shape$6$continue (block (call $print (i32.const 3) ) (local.set $0 (call $check) ) ) (block (br $shape$6$continue) ) ) ) (block (block (call $print (i32.const 9) ) (local.set $0 (call $check) ) ) ) ) ) ) (module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (; has Stack IR ;) (result i32) (if (i32.eq (i32.load (i32.const 4) ) (i32.const 120) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (; has Stack IR ;) (local $0 i32) (i32.store (i32.const 8) (i32.const 67) ) (i32.store (i32.const 12) (i32.const 131) ) (i32.store (i32.const 16) (i32.const 49) ) (i32.store (i32.const 20) (i32.const 36) ) (i32.store (i32.const 24) (i32.const 112) ) (i32.store (i32.const 28) (i32.const 161) ) (i32.store (i32.const 32) (i32.const 62) ) (i32.store (i32.const 36) (i32.const 166) ) (i32.store (i32.const 40) (i32.const 16) ) (i32.store (i32.const 44) (i32.const 88) ) (i32.store (i32.const 48) (i32.const 176) ) (i32.store (i32.const 52) (i32.const 152) ) (i32.store (i32.const 56) (i32.const 161) ) (i32.store (i32.const 60) (i32.const 194) ) (i32.store (i32.const 64) (i32.const 117) ) (i32.store (i32.const 68) (i32.const 180) ) (i32.store (i32.const 72) (i32.const 60) ) (i32.store (i32.const 76) (i32.const 166) ) (i32.store (i32.const 80) (i32.const 55) ) (i32.store (i32.const 84) (i32.const 183) ) (i32.store (i32.const 88) (i32.const 150) ) (i32.store (i32.const 92) (i32.const 73) ) (i32.store (i32.const 96) (i32.const 196) ) (i32.store (i32.const 100) (i32.const 143) ) (i32.store (i32.const 104) (i32.const 76) ) (i32.store (i32.const 108) (i32.const 182) ) (i32.store (i32.const 112) (i32.const 97) ) (i32.store (i32.const 116) (i32.const 140) ) (i32.store (i32.const 120) (i32.const 126) ) (i32.store (i32.const 124) (i32.const 3) ) (call $print (i32.const 0) ) (block $block$10$break (block $block$4$break (if (i32.and (local.tee $0 (call $check) ) (i32.const 3) ) (if (i32.eq (i32.and (local.get $0) (i32.const 3) ) (i32.const 2) ) (block (call $print (i32.const 7) ) (br_if $block$10$break (i32.rem_u (call $check) (i32.const 3) ) ) ) (br $block$4$break) ) ) (call $print (i32.const 2) ) (br_if $block$10$break (i32.and (call $check) (i32.const 1) ) ) ) (loop $shape$6$continue (call $print (i32.const 3) ) (drop (call $check) ) (br $shape$6$continue) ) ) (call $print (i32.const 9) ) (drop (call $check) ) ) ) binaryen-version_108/test/example/relooper-fuzz2.c000066400000000000000000000463701423707623100224420ustar00rootroot00000000000000#include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenGeUInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 27)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeInt32()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(2)))); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(1)))); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(4))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b5; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b5 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(1)))); } RelooperBlockRef b6; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(6))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b6 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(3)))); } RelooperBlockRef b7; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b7 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b8; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b8 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperAddBranch( b0, b1, NULL, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 4))), BinaryenTypeInt32())); RelooperAddBranch( b1, b1, NULL, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 4))), BinaryenTypeInt32())); { BinaryenIndex values[] = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86}; RelooperAddBranchForSwitch( b2, b7, values, sizeof(values) / sizeof(BinaryenIndex), BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 6))), BinaryenTypeInt32())); } RelooperAddBranchForSwitch( b2, b4, NULL, 0, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 4))), BinaryenTypeInt32())); RelooperAddBranchForSwitch( b3, b6, NULL, 0, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 5))), BinaryenTypeInt32())); RelooperAddBranch( b4, b7, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(2))), BinaryenConst(module, BinaryenLiteralInt32(0))), BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 5))), BinaryenTypeInt32())); RelooperAddBranch( b4, b3, NULL, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 3))), BinaryenTypeInt32())); RelooperAddBranchForSwitch( b5, b1, NULL, 0, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 4))), BinaryenTypeInt32())); { BinaryenIndex values[] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108}; RelooperAddBranchForSwitch( b6, b1, values, sizeof(values) / sizeof(BinaryenIndex), BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 2))), BinaryenTypeInt32())); } { BinaryenIndex values[] = { 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124, 127, 130, 133, 136, 139, 142, 145, 148, 151, 154, 157, 160}; RelooperAddBranchForSwitch( b6, b7, values, sizeof(values) / sizeof(BinaryenIndex), BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 3))), BinaryenTypeInt32())); } RelooperAddBranchForSwitch( b6, b2, NULL, 0, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 3))), BinaryenTypeInt32())); RelooperAddBranch( b7, b5, BinaryenBinary( module, BinaryenEqInt32(), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(2))), BinaryenConst(module, BinaryenLiteralInt32(0))), BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 1))), BinaryenTypeInt32())); RelooperAddBranch( b7, b1, NULL, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 4))), BinaryenTypeInt32())); RelooperAddBranch( b8, b8, NULL, BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary( module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 2))), BinaryenTypeInt32())); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); int decisions[] = {5, 111, 119, 17, 179, 41, 32, 3, 171, 126, 13, 95, 70, 91, 9, 140, 99, 161, 38, 87, 153, 117, 140, 11, 157, 48, 4}; int numDecisions = sizeof(decisions) / sizeof(int); // write out all the decisions, then the body of the function BinaryenExpressionRef full[numDecisions + 1]; { int i; for (i = 0; i < numDecisions; i++) { full[i] = BinaryenStore(module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), BinaryenTypeInt32()); } } full[numDecisions] = body; BinaryenExpressionRef all = BinaryenBlock(module, NULL, full, numDecisions + 1, BinaryenTypeNone()); // locals: state, free-for-label BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenFunctionRef theMain = BinaryenAddFunction( module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, all); BinaryenSetStart(module, theMain); // import BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); // optionally, optimize if (0) BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // write it out BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-fuzz2.txt000066400000000000000000000053641423707623100230350ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.ge_u (i32.load (i32.const 4) ) (i32.const 108) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (i32.store (i32.const 8) (i32.const 5) ) (i32.store (i32.const 12) (i32.const 111) ) (i32.store (i32.const 16) (i32.const 119) ) (i32.store (i32.const 20) (i32.const 17) ) (i32.store (i32.const 24) (i32.const 179) ) (i32.store (i32.const 28) (i32.const 41) ) (i32.store (i32.const 32) (i32.const 32) ) (i32.store (i32.const 36) (i32.const 3) ) (i32.store (i32.const 40) (i32.const 171) ) (i32.store (i32.const 44) (i32.const 126) ) (i32.store (i32.const 48) (i32.const 13) ) (i32.store (i32.const 52) (i32.const 95) ) (i32.store (i32.const 56) (i32.const 70) ) (i32.store (i32.const 60) (i32.const 91) ) (i32.store (i32.const 64) (i32.const 9) ) (i32.store (i32.const 68) (i32.const 140) ) (i32.store (i32.const 72) (i32.const 99) ) (i32.store (i32.const 76) (i32.const 161) ) (i32.store (i32.const 80) (i32.const 38) ) (i32.store (i32.const 84) (i32.const 87) ) (i32.store (i32.const 88) (i32.const 153) ) (i32.store (i32.const 92) (i32.const 117) ) (i32.store (i32.const 96) (i32.const 140) ) (i32.store (i32.const 100) (i32.const 11) ) (i32.store (i32.const 104) (i32.const 157) ) (i32.store (i32.const 108) (i32.const 48) ) (i32.store (i32.const 112) (i32.const 4) ) (block (block $block$2$break (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (block (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 16) ) ) (br $block$2$break) ) ) (loop $shape$1$continue (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (block (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 16) ) ) (br $shape$1$continue) ) ) ) ) ) binaryen-version_108/test/example/relooper-merge1.c000066400000000000000000000164571423707623100225450ustar00rootroot00000000000000#include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenGeUInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 12)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeInt32()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(1)))); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } // Separate branch for each. // In this testcase, target blocks have identical contents (print 1), // and branches have no phi codes, and no loops. { BinaryenIndex indexes[] = {1, 4, 9}; RelooperAddBranchForSwitch(b0, b1, indexes, 3, NULL); } { BinaryenIndex indexes[] = {3, 6}; RelooperAddBranchForSwitch(b0, b2, indexes, 2, NULL); } { BinaryenIndex indexes[] = {5, 25, 125}; RelooperAddBranchForSwitch(b0, b3, indexes, 3, NULL); } RelooperAddBranchForSwitch(b0, b4, NULL, 0, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); // locals: state, free-for-label BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, body); BinaryenSetStart(module, theMain); // import BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); // optionally, optimize if (0) BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // write it out BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-merge1.txt000066400000000000000000000016351423707623100231320ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.ge_u (i32.load (i32.const 4) ) (i32.const 48) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (block (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) ) binaryen-version_108/test/example/relooper-merge2.c000066400000000000000000000171001423707623100225300ustar00rootroot00000000000000#include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenGeUInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 12)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeInt32()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(1)))); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } // Separate branch for each. // In this testcase, target blocks have identical contents (print 1), // and branches have identical phis. { BinaryenIndex indexes[] = {1, 4, 9}; RelooperAddBranchForSwitch( b0, b1, indexes, 3, BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(4)))); } { BinaryenIndex indexes[] = {3, 6}; RelooperAddBranchForSwitch( b0, b2, indexes, 2, BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(4)))); } { BinaryenIndex indexes[] = {5, 25, 125}; RelooperAddBranchForSwitch( b0, b3, indexes, 3, BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(4)))); } RelooperAddBranchForSwitch(b0, b4, NULL, 0, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); // locals: state, free-for-label BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, body); BinaryenSetStart(module, theMain); // import BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); // optionally, optimize if (0) BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // write it out BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-merge2.txt000066400000000000000000000102231423707623100231240ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.ge_u (i32.load (i32.const 4) ) (i32.const 48) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (block $switch$1$leave (block $switch$1$default (block $switch$1$case$4 (block $switch$1$case$3 (block $switch$1$case$2 (br_table $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$case$4 $switch$1$case$3 $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$default $switch$1$case$4 $switch$1$default (i32.rem_u (local.get $0) (i32.const 1) ) ) ) (block (drop (i32.const 4) ) (block (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (drop (i32.const 4) ) (block (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (drop (i32.const 4) ) (block (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (block (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) ) ) binaryen-version_108/test/example/relooper-merge3.c000066400000000000000000000163451423707623100225430ustar00rootroot00000000000000#include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenGeUInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 12)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeInt32()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(1)))); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(2))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(3))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } // Separate branch for each. // In this testcase, two blocks out of 4 can be merged. { BinaryenIndex indexes[] = {1, 4, 9}; RelooperAddBranchForSwitch(b0, b1, indexes, 3, NULL); } { BinaryenIndex indexes[] = {3, 6}; RelooperAddBranchForSwitch(b0, b2, indexes, 2, NULL); } { BinaryenIndex indexes[] = {5}; RelooperAddBranchForSwitch(b0, b3, indexes, 1, NULL); } RelooperAddBranchForSwitch(b0, b4, NULL, 0, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); // locals: state, free-for-label BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, body); BinaryenSetStart(module, theMain); // import BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); // optionally, optimize if (0) BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // write it out BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-merge3.txt000066400000000000000000000033631423707623100231340ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.ge_u (i32.load (i32.const 4) ) (i32.const 48) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (block $switch$1$leave (block $switch$1$default (block $switch$1$case$4 (block $switch$1$case$2 (br_table $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default (i32.rem_u (local.get $0) (i32.const 1) ) ) ) (block (block (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (block (block (call $print (i32.const 2) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (block (block (call $print (i32.const 3) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) ) ) binaryen-version_108/test/example/relooper-merge4.c000066400000000000000000000163451423707623100225440ustar00rootroot00000000000000#include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenGeUInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 12)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeInt32()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(1)))); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(2))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(3))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } // Separate branch for each. // In this testcase, two blocks out of 4 can be merged. { BinaryenIndex indexes[] = {1, 4, 9}; RelooperAddBranchForSwitch(b0, b4, indexes, 3, NULL); } { BinaryenIndex indexes[] = {3, 6}; RelooperAddBranchForSwitch(b0, b2, indexes, 2, NULL); } { BinaryenIndex indexes[] = {5}; RelooperAddBranchForSwitch(b0, b3, indexes, 1, NULL); } RelooperAddBranchForSwitch(b0, b1, NULL, 0, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); // locals: state, free-for-label BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, body); BinaryenSetStart(module, theMain); // import BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); // optionally, optimize if (0) BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // write it out BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-merge4.txt000066400000000000000000000033651423707623100231370ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.ge_u (i32.load (i32.const 4) ) (i32.const 48) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (block $switch$1$leave (block $switch$1$case$4 (block $switch$1$default (block $switch$1$case$5 (br_table $switch$1$default $switch$1$case$5 $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$case$4 $switch$1$default $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$default (i32.rem_u (local.get $0) (i32.const 1) ) ) ) (block (block (block (call $print (i32.const 3) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (block (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (block (block (call $print (i32.const 2) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) ) ) binaryen-version_108/test/example/relooper-merge5.c000066400000000000000000000163451423707623100225450ustar00rootroot00000000000000#include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenGeUInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 12)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeInt32()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(1)))); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(2))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(3))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } // Separate branch for each. // In this testcase, two blocks out of 4 can be merged. RelooperAddBranchForSwitch(b0, b1, NULL, 0, NULL); { BinaryenIndex indexes[] = {1, 4, 9}; RelooperAddBranchForSwitch(b0, b4, indexes, 3, NULL); } { BinaryenIndex indexes[] = {3, 6}; RelooperAddBranchForSwitch(b0, b2, indexes, 2, NULL); } { BinaryenIndex indexes[] = {5}; RelooperAddBranchForSwitch(b0, b3, indexes, 1, NULL); } BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); // locals: state, free-for-label BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, body); BinaryenSetStart(module, theMain); // import BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); // optionally, optimize if (0) BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // write it out BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-merge5.txt000066400000000000000000000033651423707623100231400ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.ge_u (i32.load (i32.const 4) ) (i32.const 48) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (block $switch$1$leave (block $switch$1$case$4 (block $switch$1$case$5 (block $switch$1$default (br_table $switch$1$default $switch$1$case$5 $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$case$4 $switch$1$default $switch$1$default $switch$1$default $switch$1$case$5 $switch$1$default (i32.rem_u (local.get $0) (i32.const 1) ) ) ) (block (block (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (block (block (call $print (i32.const 3) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) (block (block (block (call $print (i32.const 2) ) (local.set $0 (call $check) ) ) ) ) (br $switch$1$leave) ) ) ) binaryen-version_108/test/example/relooper-merge6.c000066400000000000000000000164431423707623100225450ustar00rootroot00000000000000#include #include #include "binaryen-c.h" // globals: address 4 is index // decisions are at address 8+ int main() { BinaryenModuleRef module = BinaryenModuleCreate(); // check() // if the end, halt BinaryenExpressionRef halter = BinaryenIf( module, BinaryenBinary( module, BinaryenGeUInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4 * 12)) // jumps of 4 bytes ), BinaryenUnreachable(module), NULL); // increment index BinaryenExpressionRef incer = BinaryenStore( module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(4)), BinaryenBinary(module, BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenTypeInt32()); // optionally, print the return value BinaryenExpressionRef args[] = {BinaryenBinary( module, BinaryenSubInt32(), BinaryenConst(module, BinaryenLiteralInt32(0)), BinaryenLoad( module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))))}; BinaryenExpressionRef debugger; if (1) debugger = BinaryenCall(module, "print", args, 1, BinaryenTypeNone()); else debugger = BinaryenNop(module); // return the decision. need to subtract 4 that we just added, // and add 8 since that's where we start, so overall offset 4 BinaryenExpressionRef returner = BinaryenLoad(module, 4, 0, 4, 0, BinaryenTypeInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenTypeInt32(), BinaryenConst(module, BinaryenLiteralInt32(4)))); BinaryenExpressionRef checkBodyList[] = {halter, incer, debugger, returner}; BinaryenExpressionRef checkBody = BinaryenBlock(module, NULL, checkBodyList, sizeof(checkBodyList) / sizeof(BinaryenExpressionRef), BinaryenTypeInt32()); BinaryenAddFunction(module, "check", BinaryenTypeNone(), BinaryenTypeInt32(), NULL, 0, checkBody); // contents of main() begin here RelooperRef relooper = RelooperCreate(module); RelooperBlockRef b0; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(0))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b0 = RelooperAddBlockWithSwitch( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone()), BinaryenBinary(module, BinaryenRemUInt32(), BinaryenLocalGet(module, 0, BinaryenTypeInt32()), BinaryenConst(module, BinaryenLiteralInt32(1)))); } RelooperBlockRef b1; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b1 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b2; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b2 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b3; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b3 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } RelooperBlockRef b4; { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(1))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenLocalSet( module, 0, BinaryenCall(module, "check", NULL, 0, BinaryenTypeInt32()))}; b4 = RelooperAddBlock( relooper, BinaryenBlock(module, NULL, list, 2, BinaryenTypeNone())); } // Separate branch for each. // In this testcase, we can merge multiple consecutive blocks with phis. RelooperAddBranch( b0, b1, NULL, BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(10)))); RelooperAddBranch( b1, b2, NULL, BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(11)))); RelooperAddBranch(b2, b3, NULL, NULL); RelooperAddBranch( b3, b4, NULL, BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(12)))); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, b0, 1); // locals: state, free-for-label BinaryenType localTypes[] = {BinaryenTypeInt32(), BinaryenTypeInt32()}; BinaryenFunctionRef theMain = BinaryenAddFunction(module, "main", BinaryenTypeNone(), BinaryenTypeNone(), localTypes, 2, body); BinaryenSetStart(module, theMain); // import BinaryenAddFunctionImport(module, "print", "spectest", "print", BinaryenTypeInt32(), BinaryenTypeNone()); // memory BinaryenSetMemory(module, 1, 1, "mem", NULL, NULL, NULL, NULL, 0, 0); // optionally, optimize if (0) BinaryenModuleOptimize(module); assert(BinaryenModuleValidate(module)); // write it out BinaryenModulePrint(module); BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-merge6.txt000066400000000000000000000030611423707623100231320ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "spectest" "print" (func $print (param i32))) (memory $0 1 1) (export "mem" (memory $0)) (start $main) (func $check (result i32) (if (i32.ge_u (i32.load (i32.const 4) ) (i32.const 48) ) (unreachable) ) (i32.store (i32.const 4) (i32.add (i32.load (i32.const 4) ) (i32.const 4) ) ) (call $print (i32.sub (i32.const 0) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) ) (i32.load offset=4 (i32.load (i32.const 4) ) ) ) (func $main (local $0 i32) (local $1 i32) (block (block (block (block (block (block (block (call $print (i32.const 0) ) (local.set $0 (call $check) ) ) (drop (i32.const 10) ) ) (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) (drop (i32.const 11) ) ) (block (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) (drop (i32.const 12) ) ) (block (call $print (i32.const 1) ) (local.set $0 (call $check) ) ) ) ) ) binaryen-version_108/test/example/relooper-merge7.c000066400000000000000000000026051423707623100225410ustar00rootroot00000000000000 #include #include #include "binaryen-c.h" int main() { BinaryenModuleRef module = BinaryenModuleCreate(); RelooperRef relooper = RelooperCreate(module); // Create the basic blocks RelooperBlockRef b[4]; int hasTerminator[4] = {0, 0, 0, 1}; int numBlocks = sizeof(b) / sizeof(RelooperBlockRef); assert(sizeof(hasTerminator) / sizeof(int) == numBlocks); int i; for (i = 0; i < numBlocks; i++) { BinaryenExpressionRef args[] = { BinaryenConst(module, BinaryenLiteralInt32(i))}; BinaryenExpressionRef list[] = { BinaryenCall(module, "print", args, 1, BinaryenTypeNone()), BinaryenReturn(module, NULL) // relevant only if hasTerminator[i] }; b[i] = RelooperAddBlock( relooper, BinaryenBlock( module, NULL, list, 1 + hasTerminator[i], BinaryenTypeNone())); } // Create the branches. // In this testcase, only b[2] and b[3] can be merged. RelooperAddBranch(b[0], b[1], NULL, NULL); RelooperAddBranch( b[0], b[2], BinaryenConst(module, BinaryenLiteralInt32(-10)), NULL); RelooperAddBranch(b[1], b[0], NULL, NULL); RelooperAddBranch(b[2], b[3], NULL, NULL); BinaryenExpressionRef all = RelooperRenderAndDispose(relooper, b[0], 1); // Print it out BinaryenExpressionPrint(all); // Clean up the module, which owns all the objects we created above BinaryenModuleDispose(module); return 0; } binaryen-version_108/test/example/relooper-merge7.txt000066400000000000000000000007111423707623100231320ustar00rootroot00000000000000(block (block $block$3$break (loop $shape$0$continue (block $block$2$break (call $print (i32.const 0) ) (if (i32.const -10) (br $block$3$break) (br $block$2$break) ) ) (block (call $print (i32.const 1) ) (block (br $shape$0$continue) ) ) ) ) (block (block (call $print (i32.const 2) ) (block (call $print (i32.const 3) ) (return) ) ) ) ) binaryen-version_108/test/example/small_set.cpp000066400000000000000000000116711423707623100220540ustar00rootroot00000000000000#include #include #include #include #include "support/small_set.h" using namespace wasm; template void assertContents(T& t, const std::vector& expectedContents) { assert(t.size() == expectedContents.size()); for (auto item : expectedContents) { assert(t.count(item) == 1); } // Also test this using an iterator and a const iterator to also get // coverage there. for (auto& item : t) { assert(std::find(expectedContents.begin(), expectedContents.end(), item) != expectedContents.end()); } for (const auto& item : t) { assert(std::find(expectedContents.begin(), expectedContents.end(), item) != expectedContents.end()); } } template void testAPI() { { T t; // build up with no duplicates assert(t.empty()); assert(t.size() == 0); t.insert(1); assertContents(t, {1}); assert(!t.empty()); assert(t.size() == 1); t.insert(2); assertContents(t, {1, 2}); assert(!t.empty()); assert(t.size() == 2); t.insert(3); assertContents(t, {1, 2, 3}); assert(!t.empty()); // unwind assert(t.size() == 3); t.erase(3); assertContents(t, {1, 2}); assert(t.size() == 2); t.erase(2); assertContents(t, {1}); assert(t.size() == 1); t.erase(1); assertContents(t, {}); assert(t.size() == 0); assert(t.empty()); } { T t; // build up with duplicates t.insert(1); t.insert(2); t.insert(2); t.insert(3); assertContents(t, {1, 2, 3}); assert(t.size() == 3); // unwind by erasing (in the opposite direction from before) assert(t.count(1) == 1); assert(t.count(2) == 1); assert(t.count(3) == 1); assert(t.count(1337) == 0); t.erase(1); assert(t.count(1) == 0); assert(t.size() == 2); assert(t.count(2) == 1); t.erase(2); assert(t.count(2) == 0); assert(t.size() == 1); assert(t.count(3) == 1); t.erase(3); assert(t.count(1) == 0); assert(t.count(2) == 0); assert(t.count(3) == 0); assert(t.count(1337) == 0); assert(t.size() == 0); } { T t; // build up t.insert(1); t.insert(2); t.insert(3); // unwind by clearing t.clear(); assert(t.size() == 0); assert(t.empty()); } { T t, u; // comparisons assert(t == u); t.insert(1); assert(t != u); u.insert(1); assert(t == u); u.erase(1); assert(t != u); u.insert(2); assert(t != u); } { T t, u; // comparisons should ignore the order of insertion t.insert(1); t.insert(2); u.insert(2); u.insert(1); assert(t == u); } { T t, u; // comparisons should ignore the mode: in a SmallSet<1>, a set of size 1 // can be either fixed - if we just grew it to size 1 - or flexible - if we // grew it enough to be flexible, then shrank it back (as it only becomes // fixed at size 0). t.insert(1); u.insert(1); u.insert(2); // one extra item in u assert(t != u); assert(u != t); // remove the extra item u.erase(2); assert(t == u); assert(u == t); } { T t, u; // as above, but for size 2, and don't erase the last item added t.insert(1); t.insert(2); u.insert(3); u.insert(2); u.insert(1); // one extra item in u assert(t != u); assert(u != t); // remove the extra item u.erase(3); assert(t == u); assert(u == t); } } template void testInternals() { { T s; // Start out using fixed storage. assert(s.TEST_ONLY_NEVER_USE_usingFixed()); // Adding one item still keeps us using fixed storage, as that is the exact // amount we have in fact. s.insert(0); assert(s.TEST_ONLY_NEVER_USE_usingFixed()); // Adding one more item forces us to use flexible storage. s.insert(1); assert(!s.TEST_ONLY_NEVER_USE_usingFixed()); // Removing an item returns us to size 1, *but we keep using flexible // storage*. We do not ping-pong between flexible and fixed; once flexible, // we stay that way. s.erase(0); assert(!s.TEST_ONLY_NEVER_USE_usingFixed()); // However, removing all items does return us to using fixed storage, should // we ever insert again. s.erase(1); assert(s.empty()); assert(s.TEST_ONLY_NEVER_USE_usingFixed()); // And once more we can add an additional item while remaining fixed. s.insert(10); assert(s.TEST_ONLY_NEVER_USE_usingFixed()); } } int main() { testAPI>(); testAPI>(); testAPI>(); testAPI>(); testAPI>(); testAPI>(); testAPI>(); testAPI>(); testAPI>(); testAPI>(); testInternals>(); testInternals>(); std::cout << "ok.\n"; } binaryen-version_108/test/example/small_set.txt000066400000000000000000000000041423707623100220750ustar00rootroot00000000000000ok. binaryen-version_108/test/example/small_vector.cpp000066400000000000000000000027561423707623100225670ustar00rootroot00000000000000#include #include #include "support/small_vector.h" using namespace wasm; template void test(size_t N) { { T t; // build up assert(t.empty()); assert(t.size() == 0); t.push_back(1); assert(!t.empty()); assert(t.size() == 1); t.push_back(2); assert(!t.empty()); assert(t.size() == 2); t.push_back(3); assert(!t.empty()); // unwind assert(t.size() == 3); assert(t.back() == 3); t.pop_back(); assert(t.size() == 2); assert(t.back() == 2); t.pop_back(); assert(t.size() == 1); assert(t.back() == 1); t.pop_back(); assert(t.size() == 0); assert(t.empty()); } { T t; // build up t.push_back(1); t.push_back(2); t.push_back(3); // unwind t.clear(); assert(t.size() == 0); assert(t.empty()); } { T t, u; assert(t == u); t.push_back(1); assert(t != u); u.push_back(1); assert(t == u); u.pop_back(); assert(t != u); u.push_back(2); assert(t != u); } { // Test reserve/capacity. T t; // Capacity begins at the size of the fixed storage. assert(t.capacity() == N); // Reserving more increases the capacity (but how much is impl-defined). t.reserve(t.capacity() + 100); assert(t.capacity() >= N + 100); } } int main() { test>(0); test>(1); test>(2); test>(10); std::cout << "ok.\n"; } binaryen-version_108/test/example/small_vector.txt000066400000000000000000000000041423707623100226040ustar00rootroot00000000000000ok. binaryen-version_108/test/example/space.cpp000066400000000000000000000063501423707623100211620ustar00rootroot00000000000000#include #include #include using namespace wasm; using Span = DisjointSpans::Span; int main() { // No spans { DisjointSpans root; // Nothing in root assert(!root.checkOverlap(Span{0, 100})); } // One span { DisjointSpans root; root.add(Span{0, 100}); // It is there assert(root.checkOverlap(Span{0, 100})); } { DisjointSpans root; root.add(Span{40, 60}); // Exact match assert(root.checkOverlap(Span{40, 60})); // No overlap assert(!root.checkOverlap(Span{20, 30})); // Touching, but no overlap assert(!root.checkOverlap(Span{20, 40})); // Overlap assert(root.checkOverlap(Span{20, 41})); assert(root.checkOverlap(Span{40, 41})); // Internal assert(root.checkOverlap(Span{45, 50})); // Touches other side assert(root.checkOverlap(Span{45, 60})); // Overlaps on other side assert(root.checkOverlap(Span{45, 70})); // Just inside. assert(root.checkOverlap(Span{59, 60})); // Just outside assert(!root.checkOverlap(Span{60, 61})); // Totally outside assert(!root.checkOverlap(Span{70, 80})); } // Two spans, different subtrees { DisjointSpans root; root.add(Span{30, 40}); root.add(Span{60, 70}); assert(!root.checkOverlap(Span{10, 20})); assert(!root.checkOverlap(Span{10, 30})); assert(root.checkOverlap(Span{10, 40})); assert(root.checkOverlap(Span{35, 40})); assert(!root.checkOverlap(Span{40, 60})); assert(!root.checkOverlap(Span{45, 55})); assert(root.checkOverlap(Span{50, 61})); assert(root.checkOverlap(Span{50, 100})); assert(root.checkOverlap(Span{60, 70})); assert(root.checkOverlap(Span{60, 61})); assert(!root.checkOverlap(Span{70, 80})); assert(!root.checkOverlap(Span{70, 100})); } // Two spans, same subtree { DisjointSpans root; root.add(Span{30, 40}); root.add(Span{40, 45}); assert(!root.checkOverlap(Span{10, 20})); assert(!root.checkOverlap(Span{10, 30})); assert(root.checkOverlap(Span{10, 40})); assert(root.checkOverlap(Span{35, 40})); assert(root.checkOverlap(Span{40, 41})); assert(root.checkOverlap(Span{35, 45})); assert(!root.checkOverlap(Span{45, 100})); } // "Pixels" { const int N = 40; for (int i = 0; i < N; i++) { DisjointSpans root; for (int j = 0; j < N; j++) { // add all pixels but the i-th if (j != i) { root.add(Span{j, j + 1}); } } for (int j = 0; j < N; j++) { if (j != i) { assert(root.checkOverlap(Span{j, j + 1})); } else { assert(!root.checkOverlap(Span{j, j + 1})); } } assert(root.checkOverlap(Span{10, N + 10})); assert(!root.checkOverlap(Span{N + 10, N + 20})); } } // Large numbers. { DisjointSpans root; assert(!root.checkOverlap(Span{2948, 2949})); root.add(Span{2948, 2949}); assert(root.checkOverlap(Span{2948, 2949})); assert(root.checkOverlap(Span{2940, 2949})); assert(root.checkOverlap(Span{2948, 2959})); assert(root.checkOverlap(Span{0, 18766})); assert(!root.checkOverlap(Span{2000, 2001})); assert(!root.checkOverlap(Span{3000, 3001})); } std::cout << "success.\n"; } binaryen-version_108/test/example/space.txt000066400000000000000000000000111423707623100212030ustar00rootroot00000000000000success. binaryen-version_108/test/example/sparse_square_matrix.cpp000066400000000000000000000031221423707623100243220ustar00rootroot00000000000000#include #include "support/sparse_square_matrix.h" int main() { sparse_square_matrix m; // New matrix should initialize to 0x0 size. assert(m.width() == 0); // Recreating should resize the matrix. m.recreate(100); assert(m.width() == 100); // Small matrices should use dense storage. assert(m.usingDenseStorage()); // Setting and getting element values in dense storage should work. for (int y = 0; y < 100; ++y) for (int x = 0; x < 100; ++x) m.set(y, x, y * 100 + x); for (int y = 0; y < 100; ++y) for (int x = 0; x < 100; ++x) assert(m.get(y, x) == y * 100 + x); // Recreating should clear the matrix elements to zero, // even if recreating to same size as before. assert(m.width() == 100); m.recreate(100); for (int y = 0; y < 100; ++y) for (int x = 0; x < 100; ++x) assert(m.get(y, x) == 0); // Large matrices should use sparse storage. m.recreate(m.DenseLimit); assert(!m.usingDenseStorage()); // Setting and getting element values in sparse storage should work. for (int y = 0; y < m.DenseLimit; y += 128) for (int x = 0; x < m.DenseLimit; x += 128) m.set(y, x, y * m.DenseLimit + x); for (int y = 0; y < m.DenseLimit; y += 128) for (int x = 0; x < m.DenseLimit; x += 128) assert(m.get(y, x) == y * m.DenseLimit + x); // Recreating matrix in sparse mode should reset values in sparse // storage to zero. m.recreate(m.DenseLimit + 1); for (int y = 0; y < m.width(); y += 128) for (int x = 0; x < m.width(); x += 128) assert(m.get(y, x) == 0); std::cout << "ok.\n"; } binaryen-version_108/test/example/sparse_square_matrix.txt000066400000000000000000000000041423707623100243530ustar00rootroot00000000000000ok. binaryen-version_108/test/example/stack-utils.cpp000066400000000000000000000546051423707623100223400ustar00rootroot00000000000000#include #include #include "ir/stack-utils.h" #include "literal.h" #include "mixed_arena.h" #include "wasm-builder.h" #include "wasm-type.h" #include "wasm.h" using namespace wasm; Module module; Builder builder(module); void test_remove_nops() { std::cout << ";; Test removeNops\n"; auto* block = builder.makeBlock( { builder.makeNop(), builder.makeConst(Literal(int32_t(0))), builder.makeNop(), builder.makeConst(Literal(int64_t(0))), builder.makeNop(), builder.makeNop(), }, {Type::i32, Type::i64}); std::cout << *block << '\n'; StackUtils::removeNops(block); std::cout << *block << '\n'; } void test_stack_signatures() { std::cout << ";; Test stack signatures\n"; // Typed block auto* block = builder.makeBlock({builder.makeUnreachable()}, Type::f32); assert(StackSignature(block) == (StackSignature{Type::none, Type::f32, StackSignature::Fixed})); // Unreachable block auto* unreachable = builder.makeBlock({builder.makeUnreachable()}, Type::unreachable); assert(StackSignature(unreachable) == (StackSignature{Type::none, Type::none, StackSignature::Polymorphic})); { // Typed loop auto* loop = builder.makeLoop("loop", unreachable, Type::f32); assert(StackSignature(loop) == (StackSignature{Type::none, Type::f32, StackSignature::Fixed})); } { // Unreachable loop auto* loop = builder.makeLoop("loop", unreachable, Type::unreachable); assert( StackSignature(loop) == (StackSignature{Type::none, Type::none, StackSignature::Polymorphic})); } { // If (no else) auto* if_ = builder.makeIf( builder.makePop(Type::i32), unreachable, nullptr, Type::none); assert(StackSignature(if_) == (StackSignature{Type::i32, Type::none, StackSignature::Fixed})); } { // If (with else) auto* if_ = builder.makeIf(builder.makePop(Type::i32), block, block, Type::f32); assert(StackSignature(if_) == (StackSignature{Type::i32, Type::f32, StackSignature::Fixed})); } { // Call auto* call = builder.makeCall("foo", {builder.makePop(Type::i32), builder.makePop(Type::f32)}, {Type::i64, Type::f64}); assert(StackSignature(call) == (StackSignature{{Type::i32, Type::f32}, {Type::i64, Type::f64}, StackSignature::Fixed})); } { // Return Call auto* call = builder.makeCall("bar", {builder.makePop(Type::i32), builder.makePop(Type::f32)}, Type::unreachable, StackSignature::Polymorphic); assert(StackSignature(call) == (StackSignature{ {Type::i32, Type::f32}, Type::none, StackSignature::Polymorphic})); } { // Return auto* ret = builder.makeReturn(builder.makePop(Type::i32)); assert( StackSignature(ret) == (StackSignature{Type::i32, Type::none, StackSignature::Polymorphic})); } { // Multivalue return auto* ret = builder.makeReturn(builder.makePop({Type::i32, Type::f32})); assert(StackSignature(ret) == (StackSignature{ {Type::i32, Type::f32}, Type::none, StackSignature::Polymorphic})); } } void test_signature_composition() { std::cout << ";; Test stack signature composition\n"; // No unreachables { StackSignature a{Type::none, {Type::f32, Type::i32}, StackSignature::Fixed}; StackSignature b{{Type::f32, Type::i32}, Type::none, StackSignature::Fixed}; assert(a.composes(b)); assert(a + b == (StackSignature{Type::none, Type::none, StackSignature::Fixed})); } { StackSignature a{Type::none, Type::i32, StackSignature::Fixed}; StackSignature b{{Type::f32, Type::i32}, Type::none, StackSignature::Fixed}; assert(a.composes(b)); assert(a + b == StackSignature(Type::f32, Type::none, StackSignature::Fixed)); } { StackSignature a{Type::none, {Type::f32, Type::i32}, StackSignature::Fixed}; StackSignature b{Type::i32, Type::none, StackSignature::Fixed}; assert(a.composes(b)); assert(a + b == (StackSignature{Type::none, Type::f32, StackSignature::Fixed})); } { StackSignature a{Type::none, Type::f32, StackSignature::Fixed}; StackSignature b{{Type::f32, Type::i32}, Type::none, StackSignature::Fixed}; assert(!a.composes(b)); } { StackSignature a{Type::none, {Type::f32, Type::i32}, StackSignature::Fixed}; StackSignature b{Type::f32, Type::none, StackSignature::Fixed}; assert(!a.composes(b)); } // First unreachable { StackSignature a{ Type::none, {Type::f32, Type::i32}, StackSignature::Polymorphic}; StackSignature b{{Type::f32, Type::i32}, Type::none, StackSignature::Fixed}; assert(a.composes(b)); assert(a + b == (StackSignature{ Type::none, Type::none, StackSignature::Polymorphic})); } { StackSignature a{Type::none, Type::i32, StackSignature::Polymorphic}; StackSignature b{{Type::f32, Type::i32}, Type::none, StackSignature::Fixed}; assert(a.composes(b)); assert(a + b == StackSignature(Type::none, Type::none, StackSignature::Polymorphic)); } { StackSignature a{ Type::none, {Type::f32, Type::i32}, StackSignature::Polymorphic}; StackSignature b{Type::i32, Type::none, StackSignature::Fixed}; assert(a.composes(b)); assert(a + b == (StackSignature{ Type::none, Type::f32, StackSignature::Polymorphic})); } { StackSignature a{Type::none, Type::f32, StackSignature::Polymorphic}; StackSignature b{{Type::f32, Type::i32}, Type::none, StackSignature::Fixed}; assert(!a.composes(b)); } { StackSignature a{ Type::none, {Type::f32, Type::i32}, StackSignature::Polymorphic}; StackSignature b{Type::f32, Type::none, StackSignature::Fixed}; assert(!a.composes(b)); } // Second unreachable { StackSignature a{Type::none, {Type::f32, Type::i32}, StackSignature::Fixed}; StackSignature b{ {Type::f32, Type::i32}, Type::none, StackSignature::Polymorphic}; assert(a.composes(b)); assert(a + b == (StackSignature{ Type::none, Type::none, StackSignature::Polymorphic})); } { StackSignature a{Type::none, Type::i32, StackSignature::Fixed}; StackSignature b{ {Type::f32, Type::i32}, Type::none, StackSignature::Polymorphic}; assert(a.composes(b)); assert(a + b == StackSignature(Type::f32, Type::none, StackSignature::Polymorphic)); } { StackSignature a{Type::none, {Type::f32, Type::i32}, StackSignature::Fixed}; StackSignature b{Type::i32, Type::none, StackSignature::Polymorphic}; assert(a.composes(b)); assert(a + b == (StackSignature{ Type::none, Type::none, StackSignature::Polymorphic})); } { StackSignature a{Type::none, Type::f32, StackSignature::Fixed}; StackSignature b{ {Type::f32, Type::i32}, Type::none, StackSignature::Polymorphic}; assert(!a.composes(b)); } { StackSignature a{Type::none, {Type::f32, Type::i32}, StackSignature::Fixed}; StackSignature b{Type::f32, Type::none, StackSignature::Polymorphic}; assert(!a.composes(b)); } // Both unreachable { StackSignature a{ Type::none, {Type::f32, Type::i32}, StackSignature::Polymorphic}; StackSignature b{ {Type::f32, Type::i32}, Type::none, StackSignature::Polymorphic}; assert(a.composes(b)); assert(a + b == (StackSignature{ Type::none, Type::none, StackSignature::Polymorphic})); } { StackSignature a{Type::none, Type::i32, StackSignature::Polymorphic}; StackSignature b{ {Type::f32, Type::i32}, Type::none, StackSignature::Polymorphic}; assert(a.composes(b)); assert(a + b == StackSignature(Type::none, Type::none, StackSignature::Polymorphic)); } { StackSignature a{ Type::none, {Type::f32, Type::i32}, StackSignature::Polymorphic}; StackSignature b{Type::i32, Type::none, StackSignature::Polymorphic}; assert(a.composes(b)); assert(a + b == (StackSignature{ Type::none, Type::none, StackSignature::Polymorphic})); } { StackSignature a{Type::none, Type::f32, StackSignature::Polymorphic}; StackSignature b{ {Type::f32, Type::i32}, Type::none, StackSignature::Polymorphic}; assert(!a.composes(b)); } { StackSignature a{ Type::none, {Type::f32, Type::i32}, StackSignature::Polymorphic}; StackSignature b{Type::f32, Type::none, StackSignature::Polymorphic}; assert(!a.composes(b)); } } void test_signature_subtype() { std::cout << ";; Test stack signature subtyping\n"; // Differences in unreachability only { StackSignature a(Type::none, Type::none, StackSignature::Polymorphic); StackSignature b(Type::none, Type::none, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); assert(!StackSignature::isSubType(b, a)); } // Covariance of results { StackSignature a(Type::none, Type::funcref, StackSignature::Fixed); StackSignature b(Type::none, Type::anyref, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); assert(!StackSignature::isSubType(b, a)); } // Contravariance of params { StackSignature a(Type::anyref, Type::none, StackSignature::Fixed); StackSignature b(Type::funcref, Type::none, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); assert(!StackSignature::isSubType(b, a)); } // First not unreachable { StackSignature a(Type::i32, Type::f32, StackSignature::Fixed); StackSignature b(Type::i32, Type::f32, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Fixed); StackSignature b( {Type::i64, Type::i32}, {Type::i64, Type::f32}, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Fixed); StackSignature b({Type::i64, Type::i32}, {Type::i64, Type::i64, Type::f32}, StackSignature::Fixed); assert(!StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Fixed); StackSignature b( {Type::i64, Type::i32}, {Type::f64, Type::f32}, StackSignature::Fixed); assert(!StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Fixed); StackSignature b(Type::none, Type::f32, StackSignature::Fixed); assert(!StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Fixed); StackSignature b(Type::i32, Type::none, StackSignature::Fixed); assert(!StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Fixed); StackSignature b(Type::f32, Type::i32, StackSignature::Fixed); assert(!StackSignature::isSubType(a, b)); } // First unreachable { StackSignature a(Type::i32, Type::f32, StackSignature::Polymorphic); StackSignature b(Type::i32, Type::f32, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Polymorphic); StackSignature b( {Type::i64, Type::i32}, {Type::i64, Type::f32}, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Polymorphic); StackSignature b({Type::i64, Type::i32}, {Type::i64, Type::i64, Type::f32}, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Polymorphic); StackSignature b( {Type::i64, Type::i32}, {Type::f64, Type::f32}, StackSignature::Fixed); assert(StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Polymorphic); StackSignature b(Type::none, Type::f32, StackSignature::Fixed); assert(!StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Polymorphic); StackSignature b(Type::i32, Type::none, StackSignature::Fixed); assert(!StackSignature::isSubType(a, b)); } { StackSignature a(Type::i32, Type::f32, StackSignature::Polymorphic); StackSignature b(Type::f32, Type::i32, StackSignature::Fixed); assert(!StackSignature::isSubType(a, b)); } } void test_signature_lub() { std::cout << ";; Test stack signature lub\n"; { StackSignature a{Type::none, Type::none, StackSignature::Fixed}; StackSignature b{Type::none, Type::none, StackSignature::Fixed}; assert(StackSignature::haveLeastUpperBound(a, b)); assert(StackSignature::getLeastUpperBound(a, b) == (StackSignature{Type::none, Type::none, StackSignature::Fixed})); } { StackSignature a{Type::none, Type::none, StackSignature::Polymorphic}; StackSignature b{Type::none, Type::none, StackSignature::Fixed}; assert(StackSignature::haveLeastUpperBound(a, b)); assert(StackSignature::getLeastUpperBound(a, b) == (StackSignature{Type::none, Type::none, StackSignature::Fixed})); } { StackSignature a{Type::none, Type::none, StackSignature::Fixed}; StackSignature b{Type::none, Type::none, StackSignature::Polymorphic}; assert(StackSignature::haveLeastUpperBound(a, b)); assert(StackSignature::getLeastUpperBound(a, b) == (StackSignature{Type::none, Type::none, StackSignature::Fixed})); } { StackSignature a{Type::i32, Type::none, StackSignature::Polymorphic}; StackSignature b{Type::none, Type::i32, StackSignature::Polymorphic}; assert(StackSignature::haveLeastUpperBound(a, b)); assert(StackSignature::getLeastUpperBound(a, b) == (StackSignature{Type::i32, Type::i32, StackSignature::Polymorphic})); } { StackSignature a{Type::none, Type::i32, StackSignature::Polymorphic}; StackSignature b{Type::i32, Type::none, StackSignature::Polymorphic}; assert(StackSignature::haveLeastUpperBound(a, b)); assert(StackSignature::getLeastUpperBound(a, b) == (StackSignature{Type::i32, Type::i32, StackSignature::Polymorphic})); } { StackSignature a{Type::none, Type::anyref, StackSignature::Polymorphic}; StackSignature b{Type::none, Type::funcref, StackSignature::Polymorphic}; assert(StackSignature::haveLeastUpperBound(a, b)); assert( StackSignature::getLeastUpperBound(a, b) == (StackSignature{Type::none, Type::anyref, StackSignature::Polymorphic})); } { StackSignature a{Type::anyref, Type::none, StackSignature::Polymorphic}; StackSignature b{Type::funcref, Type::none, StackSignature::Polymorphic}; // assert(StackSignature::haveLeastUpperBound(a, b)); // assert(StackSignature::getLeastUpperBound(a, b) == // (StackSignature{Type::funcref, Type::none, // StackSignature::Polymorphic})); } { StackSignature a{ {Type::i32, Type::funcref}, Type::funcref, StackSignature::Polymorphic}; StackSignature b{ Type::funcref, {Type::f32, Type::anyref}, StackSignature::Polymorphic}; assert(StackSignature::haveLeastUpperBound(a, b)); assert(StackSignature::getLeastUpperBound(a, b) == (StackSignature{{Type::i32, Type::funcref}, {Type::f32, Type::anyref}, StackSignature::Polymorphic})); } // No LUB { StackSignature a(Type::none, Type::i32, StackSignature::Fixed); StackSignature b(Type::none, Type::f32, StackSignature::Fixed); assert(!StackSignature::haveLeastUpperBound(a, b)); } { StackSignature a(Type::none, Type::i32, StackSignature::Polymorphic); StackSignature b(Type::none, Type::f32, StackSignature::Polymorphic); assert(!StackSignature::haveLeastUpperBound(a, b)); } { StackSignature a(Type::i32, Type::none, StackSignature::Fixed); StackSignature b(Type::f32, Type::none, StackSignature::Fixed); // assert(!StackSignature::haveLeastUpperBound(a, b)); } { StackSignature a(Type::i32, Type::none, StackSignature::Polymorphic); StackSignature b(Type::f32, Type::none, StackSignature::Polymorphic); // assert(!StackSignature::haveLeastUpperBound(a, b)); } { StackSignature a(Type::none, Type::none, StackSignature::Fixed); StackSignature b(Type::none, Type::i32, StackSignature::Polymorphic); assert(!StackSignature::haveLeastUpperBound(a, b)); } { StackSignature a(Type::none, Type::none, StackSignature::Fixed); StackSignature b(Type::i32, Type::none, StackSignature::Polymorphic); assert(!StackSignature::haveLeastUpperBound(a, b)); } { StackSignature a{Type::none, Type::i32, StackSignature::Fixed}; StackSignature b{Type::i32, Type::none, StackSignature::Fixed}; assert(!StackSignature::haveLeastUpperBound(a, b)); } { StackSignature a{Type::none, Type::i32, StackSignature::Polymorphic}; StackSignature b{Type::i32, Type::none, StackSignature::Fixed}; assert(!StackSignature::haveLeastUpperBound(a, b)); } { StackSignature a{Type::none, Type::i32, StackSignature::Fixed}; StackSignature b{Type::i32, Type::none, StackSignature::Polymorphic}; assert(!StackSignature::haveLeastUpperBound(a, b)); } } void test_stack_flow() { std::cout << ";; Test stack flow\n"; { // Simple case: // foo // │i32 // bar // │f32 // end auto* foo = builder.makeCall("foo", {}, Type::i32); auto* bar = builder.makeCall("bar", {builder.makePop(Type::i32)}, Type::f32); auto* block = builder.makeBlock({foo, bar}, Type::f32); StackFlow flow(block); auto fooSrcs = flow.srcs.find(foo); assert(fooSrcs != flow.srcs.end()); assert(fooSrcs->second.size() == 0); auto fooDests = flow.dests.find(foo); assert(fooDests != flow.dests.end()); assert(fooDests->second.size() == 1); assert(fooDests->second[0] == (StackFlow::Location{bar, 0, Type::i32, false})); auto barSrcs = flow.srcs.find(bar); assert(barSrcs != flow.dests.end()); assert(barSrcs->second.size() == 1); assert(barSrcs->second[0] == (StackFlow::Location{foo, 0, Type::i32, false})); auto barDests = flow.dests.find(bar); assert(barDests != flow.dests.end()); assert(barDests->second.size() == 1); assert(barDests->second[0] == (StackFlow::Location{block, 0, Type::f32, false})); auto blockSrcs = flow.srcs.find(block); assert(blockSrcs != flow.srcs.end()); assert(blockSrcs->second.size() == 1); assert(blockSrcs->second[0] == (StackFlow::Location{bar, 0, Type::f32, false})); } { // Interesting case: // foo // ├─────┬─────┠// │i32 │f32 │i64 // │ │ bar // │ │ │f64 // │ baz╶───┘ // │ ├─────┠// ╵ ╵i64 │f32 // ret╶─────────┘ // â•· â•· â•· // │i64 │f64 │i32 // │ quux╶──┘ // end auto* foo = builder.makeCall("foo", {}, {Type::i32, Type::f32, Type::i64}); auto* bar = builder.makeCall("bar", {builder.makePop(Type::i64)}, Type::f64); auto* baz = builder.makeCall("baz", {builder.makePop(Type::f32), builder.makePop(Type::f64)}, {Type::i64, Type::f32}); auto* ret = builder.makeReturn(builder.makePop(Type::f32)); auto* quux = builder.makeCall("quux", {builder.makePop(Type::f64), builder.makePop(Type::i32)}, Type::none); auto* block = builder.makeBlock({foo, bar, baz, ret, quux}, Type::i64); StackFlow flow(block); assert(flow.srcs.find(foo)->second.size() == 0); const auto& fooDests = flow.dests[foo]; assert(fooDests.size() == 3); assert(fooDests[0] == (StackFlow::Location{ret, 0, Type::i32, true})); assert(fooDests[1] == (StackFlow::Location{baz, 0, Type::f32, false})); assert(fooDests[2] == (StackFlow::Location{bar, 0, Type::i64, false})); const auto& barSrcs = flow.srcs[bar]; assert(barSrcs.size() == 1); assert(barSrcs[0] == (StackFlow::Location{foo, 2, Type::i64, false})); const auto& barDests = flow.dests[bar]; assert(barDests.size() == 1); assert(barDests[0] == (StackFlow::Location{baz, 1, Type::f64, false})); const auto& bazSrcs = flow.srcs[baz]; assert(bazSrcs.size() == 2); assert(bazSrcs[0] == (StackFlow::Location{foo, 1, Type::f32, false})); assert(bazSrcs[1] == (StackFlow::Location{bar, 0, Type::f64, false})); const auto& bazDests = flow.dests[baz]; assert(bazDests.size() == 2); assert(bazDests[0] == (StackFlow::Location{ret, 1, Type::i64, true})); assert(bazDests[1] == (StackFlow::Location{ret, 2, Type::f32, false})); const auto& retSrcs = flow.srcs[ret]; assert(retSrcs.size() == 3); assert(retSrcs[0] == (StackFlow::Location{foo, 0, Type::i32, false})); assert(retSrcs[1] == (StackFlow::Location{baz, 0, Type::i64, false})); assert(retSrcs[2] == (StackFlow::Location{baz, 1, Type::f32, false})); const auto& retDests = flow.dests[ret]; assert(retDests.size() == 3); assert(retDests[0] == (StackFlow::Location{block, 0, Type::i64, false})); assert(retDests[1] == (StackFlow::Location{quux, 0, Type::f64, false})); assert(retDests[2] == (StackFlow::Location{quux, 1, Type::i32, false})); const auto& quuxSrcs = flow.srcs[quux]; assert(quuxSrcs.size() == 2); assert(quuxSrcs[0] == (StackFlow::Location{ret, 1, Type::f64, true})); assert(quuxSrcs[1] == (StackFlow::Location{ret, 2, Type::i32, true})); const auto& quuxDests = flow.dests[quux]; assert(quuxDests.size() == 0); const auto& blockSrcs = flow.srcs[block]; assert(blockSrcs.size() == 1); assert(blockSrcs[0] == (StackFlow::Location{ret, 0, Type::i64, true})); assert(flow.getSignature(foo) == StackSignature(foo)); assert(flow.getSignature(bar) == StackSignature(bar)); assert(flow.getSignature(baz) == StackSignature(baz)); assert(flow.getSignature(ret) == (StackSignature{{Type::i32, Type::i64, Type::f32}, {Type::i64, Type::f64, Type::i32}, StackSignature::Polymorphic})); assert(flow.getSignature(quux) == StackSignature(quux)); } } int main() { test_remove_nops(); test_stack_signatures(); test_signature_composition(); test_signature_subtype(); test_signature_lub(); test_stack_flow(); } binaryen-version_108/test/example/stack-utils.txt000066400000000000000000000004551423707623100223670ustar00rootroot00000000000000;; Test removeNops (block (result i32 i64) (nop) (i32.const 0) (nop) (i64.const 0) (nop) (nop) ) (block (result i32 i64) (i32.const 0) (i64.const 0) ) ;; Test stack signatures ;; Test stack signature composition ;; Test stack signature subtyping ;; Test stack signature lub ;; Test stack flow binaryen-version_108/test/example/type-builder-nominal.cpp000066400000000000000000000405471423707623100241350ustar00rootroot00000000000000#include #include #include "wasm-type-printing.h" #include "wasm-type.h" using namespace wasm; // Construct Signature, Struct, and Array heap types using undefined types. void test_builder() { std::cout << ";; Test TypeBuilder\n"; // (type $sig (func (param (ref $struct)) (result (ref $array) i32))) // (type $struct (struct (field (ref null $array) (mut rtt 0 $array)))) // (type $array (array (mut anyref))) TypeBuilder builder; assert(builder.size() == 0); builder.grow(3); assert(builder.size() == 3); Type refSig = builder.getTempRefType(builder[0], NonNullable); Type refStruct = builder.getTempRefType(builder[1], NonNullable); Type refArray = builder.getTempRefType(builder[2], NonNullable); Type refNullArray = builder.getTempRefType(builder[2], Nullable); Type rttArray = builder.getTempRttType(Rtt(0, builder[2])); Type refNullAny(HeapType::any, Nullable); Signature sig(refStruct, builder.getTempTupleType({refArray, Type::i32})); Struct struct_({Field(refNullArray, Immutable), Field(rttArray, Mutable)}); Array array(Field(refNullAny, Mutable)); { IndexedTypeNameGenerator print(builder); std::cout << "Before setting heap types:\n"; std::cout << "$sig => " << print(builder[0]) << "\n"; std::cout << "$struct => " << print(builder[1]) << "\n"; std::cout << "$array => " << print(builder[2]) << "\n"; std::cout << "(ref $sig) => " << print(refSig) << "\n"; std::cout << "(ref $struct) => " << print(refStruct) << "\n"; std::cout << "(ref $array) => " << print(refArray) << "\n"; std::cout << "(ref null $array) => " << print(refNullArray) << "\n"; std::cout << "(rtt 0 $array) => " << print(rttArray) << "\n\n"; } builder[0] = sig; builder[1] = struct_; builder[2] = array; { IndexedTypeNameGenerator print(builder); std::cout << "After setting heap types:\n"; std::cout << "$sig => " << print(builder[0]) << "\n"; std::cout << "$struct => " << print(builder[1]) << "\n"; std::cout << "$array => " << print(builder[2]) << "\n"; std::cout << "(ref $sig) => " << print(refSig) << "\n"; std::cout << "(ref $struct) => " << print(refStruct) << "\n"; std::cout << "(ref $array) => " << print(refArray) << "\n"; std::cout << "(ref null $array) => " << print(refNullArray) << "\n"; std::cout << "(rtt 0 $array) => " << print(rttArray) << "\n\n"; } std::vector built = *builder.build(); Type newRefSig = Type(built[0], NonNullable); Type newRefStruct = Type(built[1], NonNullable); Type newRefArray = Type(built[2], NonNullable); Type newRefNullArray = Type(built[2], Nullable); Type newRttArray = Type(Rtt(0, built[2])); { IndexedTypeNameGenerator print(built); std::cout << "After building types:\n"; std::cout << "$sig => " << print(built[0]) << "\n"; std::cout << "$struct => " << print(built[1]) << "\n"; std::cout << "$array => " << print(built[2]) << "\n"; std::cout << "(ref $sig) => " << print(newRefSig) << "\n"; std::cout << "(ref $struct) => " << print(newRefStruct) << "\n"; std::cout << "(ref $array) => " << print(newRefArray) << "\n"; std::cout << "(ref null $array) => " << print(newRefNullArray) << "\n"; std::cout << "(rtt 0 $array) => " << print(newRttArray) << "\n\n"; } } // Check that the builder works when there are duplicate definitions void test_canonicalization() { std::cout << ";; Test canonicalization\n"; // (type $struct (struct (field (ref null $sig) (ref null $sig)))) // (type $sig (func)) HeapType sig = Signature(Type::none, Type::none); HeapType struct_ = Struct({Field(Type(sig, Nullable), Immutable), Field(Type(sig, Nullable), Immutable)}); TypeBuilder builder(4); Type tempSigRef1 = builder.getTempRefType(builder[2], Nullable); Type tempSigRef2 = builder.getTempRefType(builder[3], Nullable); assert(tempSigRef1 != tempSigRef2); assert(tempSigRef1 != Type(sig, Nullable)); assert(tempSigRef2 != Type(sig, Nullable)); builder[0] = Struct({Field(tempSigRef1, Immutable), Field(tempSigRef1, Immutable)}); builder[1] = Struct({Field(tempSigRef2, Immutable), Field(tempSigRef2, Immutable)}); builder[2] = Signature(Type::none, Type::none); builder[3] = Signature(Type::none, Type::none); std::vector built = *builder.build(); assert(built[0] != struct_); assert(built[1] != struct_); assert(built[0] != built[1]); assert(built[2] != sig); assert(built[3] != sig); assert(built[2] != built[3]); } // Check that defined basic HeapTypes are handled correctly. void test_basic() { std::cout << ";; Test basic\n"; TypeBuilder builder(6); Type anyref = builder.getTempRefType(builder[4], Nullable); Type i31ref = builder.getTempRefType(builder[5], NonNullable); builder[0] = Signature(Type::anyref, Type::i31ref); builder[1] = Signature(anyref, Type::i31ref); builder[2] = Signature(Type::anyref, i31ref); builder[3] = Signature(anyref, i31ref); builder[4] = HeapType::any; builder[5] = HeapType::i31; std::vector built = *builder.build(); assert(built[0].getSignature() == Signature(Type::anyref, Type::i31ref)); assert(built[1].getSignature() == built[0].getSignature()); assert(built[2].getSignature() == built[1].getSignature()); assert(built[3].getSignature() == built[2].getSignature()); assert(built[4] == HeapType::any); assert(built[5] == HeapType::i31); } // Check that signatures created with TypeBuilders are properly recorded as // canonical. void test_signatures(bool warm) { std::cout << ";; Test canonical signatures\n"; TypeBuilder builder(2); Type tempRef = builder.getTempRefType(builder[0], Nullable); builder[0] = Signature(Type::i31ref, Type::anyref); builder[1] = Signature(tempRef, tempRef); std::vector built = *builder.build(); HeapType small = Signature(Type::i31ref, Type::anyref); HeapType big = Signature(Type(Signature(Type::i31ref, Type::anyref), Nullable), Type(Signature(Type::i31ref, Type::anyref), Nullable)); if (warm) { assert(built[0] != small); assert(built[1] != big); } else { assert(built[0] == small); assert(built[1] == big); } } void test_recursive() { std::cout << ";; Test recursive types\n"; { // Trivial recursion std::vector built; { TypeBuilder builder(1); Type temp = builder.getTempRefType(builder[0], Nullable); builder[0] = Signature(Type::none, temp); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n\n"; assert(built[0] == built[0].getSignature().results.getHeapType()); assert(Type(built[0], Nullable) == built[0].getSignature().results); } { // Mutual recursion std::vector built; { TypeBuilder builder(2); Type temp0 = builder.getTempRefType(builder[0], Nullable); Type temp1 = builder.getTempRefType(builder[1], Nullable); builder[0] = Signature(Type::none, temp1); builder[1] = Signature(Type::none, temp0); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n\n"; assert(built[0].getSignature().results.getHeapType() == built[1]); assert(built[1].getSignature().results.getHeapType() == built[0]); assert(built[0] != built[1]); } { // A longer chain of recursion std::vector built; { TypeBuilder builder(5); Type temp0 = builder.getTempRefType(builder[0], Nullable); Type temp1 = builder.getTempRefType(builder[1], Nullable); Type temp2 = builder.getTempRefType(builder[2], Nullable); Type temp3 = builder.getTempRefType(builder[3], Nullable); Type temp4 = builder.getTempRefType(builder[4], Nullable); builder[0] = Signature(Type::none, temp1); builder[1] = Signature(Type::none, temp2); builder[2] = Signature(Type::none, temp3); builder[3] = Signature(Type::none, temp4); builder[4] = Signature(Type::none, temp0); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n"; std::cout << print(built[2]) << "\n"; std::cout << print(built[3]) << "\n"; std::cout << print(built[4]) << "\n\n"; assert(built[0].getSignature().results.getHeapType() == built[1]); assert(built[1].getSignature().results.getHeapType() == built[2]); assert(built[2].getSignature().results.getHeapType() == built[3]); assert(built[3].getSignature().results.getHeapType() == built[4]); assert(built[4].getSignature().results.getHeapType() == built[0]); assert(built[0] != built[1]); assert(built[0] != built[2]); assert(built[0] != built[3]); assert(built[0] != built[4]); assert(built[1] != built[2]); assert(built[1] != built[3]); assert(built[1] != built[4]); assert(built[2] != built[3]); assert(built[2] != built[4]); assert(built[3] != built[4]); } { // Check canonicalization for non-recursive parents and children of // recursive HeapTypes. std::vector built; { TypeBuilder builder(6); Type temp0 = builder.getTempRefType(builder[0], Nullable); Type temp1 = builder.getTempRefType(builder[1], Nullable); Type temp2 = builder.getTempRefType(builder[2], Nullable); Type temp3 = builder.getTempRefType(builder[3], Nullable); Type tuple0_2 = builder.getTempTupleType({temp0, temp2}); Type tuple1_3 = builder.getTempTupleType({temp1, temp3}); builder[0] = Signature(Type::none, tuple0_2); builder[1] = Signature(Type::none, tuple1_3); builder[2] = Signature(); builder[3] = Signature(); builder[4] = Signature(Type::none, temp0); builder[5] = Signature(Type::none, temp1); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n"; std::cout << print(built[2]) << "\n"; std::cout << print(built[3]) << "\n"; std::cout << print(built[4]) << "\n"; std::cout << print(built[5]) << "\n\n"; assert(built[0] != built[1]); assert(built[2] != built[3]); assert(built[4] != built[5]); assert(built[4].getSignature().results.getHeapType() == built[0]); assert(built[5].getSignature().results.getHeapType() == built[1]); assert(built[0].getSignature().results == Type({Type(built[0], Nullable), Type(built[2], Nullable)})); assert(built[1].getSignature().results == Type({Type(built[1], Nullable), Type(built[3], Nullable)})); } { // Folded and unfolded std::vector built; { TypeBuilder builder(2); Type temp0 = builder.getTempRefType(builder[0], Nullable); builder[0] = Signature(Type::none, temp0); builder[1] = Signature(Type::none, temp0); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n\n"; assert(built[0].getSignature().results.getHeapType() == built[0]); assert(built[1].getSignature().results.getHeapType() == built[0]); assert(built[0] != built[1]); } } void test_subtypes() { std::cout << ";; Test subtyping\n"; auto LUB = [&](HeapType a, HeapType b) { Type refA = Type(a, Nullable); Type refB = Type(b, Nullable); Type lubAB = Type::getLeastUpperBound(refA, refB); Type lubBA = Type::getLeastUpperBound(refB, refA); assert(lubAB == lubBA); assert(lubAB != Type::none); HeapType lub = lubAB.getHeapType(); assert(Type::hasLeastUpperBound(refA, refB)); assert(Type::hasLeastUpperBound(refB, refA)); assert(Type::isSubType(refA, lubAB)); assert(Type::isSubType(refB, lubAB)); assert(HeapType::isSubType(a, lub)); assert(HeapType::isSubType(b, lub)); assert(lub == a || !HeapType::isSubType(lub, a)); assert(lub == b || !HeapType::isSubType(lub, b)); return lub; }; { // Basic Types for (auto other : {HeapType::func, HeapType::any, HeapType::eq, HeapType::i31, HeapType::data}) { assert(LUB(HeapType::any, other) == HeapType::any); } assert(LUB(HeapType::eq, HeapType::func) == HeapType::any); assert(LUB(HeapType::i31, HeapType::data) == HeapType::eq); } { // Identity std::vector built; { TypeBuilder builder(3); builder[0] = Signature(Type::none, Type::none); builder[1] = Struct{}; builder[2] = Array(Field(Type::i32, Mutable)); built = *builder.build(); } assert(LUB(built[0], built[0]) == built[0]); assert(LUB(built[1], built[1]) == built[1]); assert(LUB(built[2], built[2]) == built[2]); } { // No subtype declarations mean no subtypes std::vector built; { TypeBuilder builder(5); Type structRef0 = builder.getTempRefType(builder[0], Nullable); Type structRef1 = builder.getTempRefType(builder[1], Nullable); builder[0] = Struct{}; builder[1] = Struct{}; builder[2] = Signature(Type::none, Type::anyref); builder[3] = Signature(Type::none, structRef0); builder[4] = Signature(Type::none, structRef1); built = *builder.build(); } assert(LUB(built[0], built[1]) == HeapType::data); assert(LUB(built[2], built[3]) == HeapType::func); assert(LUB(built[2], built[4]) == HeapType::func); } { // Subtype declarations, but still no subtypes std::vector built; { TypeBuilder builder(3); builder[0].subTypeOf(builder[1]); builder[0] = Struct{}; builder[1] = Struct{}; builder[2] = Struct{}; built = *builder.build(); } assert(LUB(built[0], built[2]) == HeapType::data); } { // Subtyping of identical types std::vector built; { TypeBuilder builder(6); builder[0].subTypeOf(builder[1]); builder[2].subTypeOf(builder[3]); builder[4].subTypeOf(builder[5]); builder[0] = Struct({Field(Type::i32, Mutable), Field(Type::anyref, Mutable)}); builder[1] = Struct({Field(Type::i32, Mutable), Field(Type::anyref, Mutable)}); builder[2] = Signature(Type::i32, Type::anyref); builder[3] = Signature(Type::i32, Type::anyref); builder[4] = Array(Field(Type::i32, Mutable)); builder[5] = Array(Field(Type::i32, Mutable)); built = *builder.build(); } assert(LUB(built[0], built[1]) == built[1]); assert(LUB(built[2], built[3]) == built[3]); assert(LUB(built[4], built[5]) == built[5]); } { // Width subtyping std::vector built; { TypeBuilder builder(2); builder[0] = Struct({Field(Type::i32, Immutable)}); builder[1] = Struct({Field(Type::i32, Immutable), Field(Type::i32, Immutable)}); builder[1].subTypeOf(builder[0]); built = *builder.build(); } assert(LUB(built[1], built[0]) == built[0]); } { // Depth subtyping std::vector built; { TypeBuilder builder(2); builder[0] = Struct({Field(Type::anyref, Immutable)}); builder[1] = Struct({Field(Type::funcref, Immutable)}); builder[1].subTypeOf(builder[0]); built = *builder.build(); } assert(LUB(built[1], built[0]) == built[0]); } { // Mutually recursive subtyping std::vector built; { TypeBuilder builder(4); Type a = builder.getTempRefType(builder[0], Nullable); Type b = builder.getTempRefType(builder[1], Nullable); Type c = builder.getTempRefType(builder[2], Nullable); Type d = builder.getTempRefType(builder[3], Nullable); builder[1].subTypeOf(builder[0]); builder[3].subTypeOf(builder[2]); builder[0] = Struct({Field(c, Immutable)}); builder[1] = Struct({Field(d, Immutable)}); builder[2] = Struct({Field(a, Immutable)}); builder[3] = Struct({Field(b, Immutable)}); built = *builder.build(); } assert(LUB(built[0], built[1]) == built[0]); assert(LUB(built[2], built[3]) == built[2]); } } int main() { wasm::setTypeSystem(TypeSystem::Nominal); // Run the tests twice to ensure things still work when the global stores are // already populated. for (size_t i = 0; i < 2; ++i) { test_builder(); test_canonicalization(); test_basic(); test_signatures(i == 1); test_recursive(); test_subtypes(); } } binaryen-version_108/test/example/type-builder-nominal.txt000066400000000000000000000075501423707623100241670ustar00rootroot00000000000000;; Test TypeBuilder Before setting heap types: $sig => (; temp ;) (func_subtype func) $struct => (; temp ;) (func_subtype func) $array => (; temp ;) (func_subtype func) (ref $sig) => (; temp ;) (ref $0) (ref $struct) => (; temp ;) (ref $1) (ref $array) => (; temp ;) (ref $2) (ref null $array) => (; temp ;) (ref null $2) (rtt 0 $array) => (; temp ;) (rtt 0 $2) After setting heap types: $sig => (; temp ;) (func_subtype (param (; temp ;) (ref $1)) (result (; temp ;) (ref $2) i32) func) $struct => (; temp ;) (struct_subtype (field (; temp ;) (ref null $2) (mut (; temp ;) (rtt 0 $2))) data) $array => (; temp ;) (array_subtype (mut anyref) data) (ref $sig) => (; temp ;) (ref $0) (ref $struct) => (; temp ;) (ref $1) (ref $array) => (; temp ;) (ref $2) (ref null $array) => (; temp ;) (ref null $2) (rtt 0 $array) => (; temp ;) (rtt 0 $2) After building types: $sig => (func_subtype (param (ref $1)) (result (ref $2) i32) func) $struct => (struct_subtype (field (ref null $2) (mut (rtt 0 $2))) data) $array => (array_subtype (mut anyref) data) (ref $sig) => (ref $0) (ref $struct) => (ref $1) (ref $array) => (ref $2) (ref null $array) => (ref null $2) (rtt 0 $array) => (rtt 0 $2) ;; Test canonicalization ;; Test basic ;; Test canonical signatures ;; Test recursive types (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $1)) func) (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $1)) func) (func_subtype (result (ref null $2)) func) (func_subtype (result (ref null $3)) func) (func_subtype (result (ref null $4)) func) (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $0) (ref null $2)) func) (func_subtype (result (ref null $1) (ref null $3)) func) (func_subtype func) (func_subtype func) (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $1)) func) (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $0)) func) ;; Test subtyping ;; Test TypeBuilder Before setting heap types: $sig => (; temp ;) (func_subtype func) $struct => (; temp ;) (func_subtype func) $array => (; temp ;) (func_subtype func) (ref $sig) => (; temp ;) (ref $0) (ref $struct) => (; temp ;) (ref $1) (ref $array) => (; temp ;) (ref $2) (ref null $array) => (; temp ;) (ref null $2) (rtt 0 $array) => (; temp ;) (rtt 0 $2) After setting heap types: $sig => (; temp ;) (func_subtype (param (; temp ;) (ref $1)) (result (; temp ;) (ref $2) i32) func) $struct => (; temp ;) (struct_subtype (field (; temp ;) (ref null $2) (mut (; temp ;) (rtt 0 $2))) data) $array => (; temp ;) (array_subtype (mut anyref) data) (ref $sig) => (; temp ;) (ref $0) (ref $struct) => (; temp ;) (ref $1) (ref $array) => (; temp ;) (ref $2) (ref null $array) => (; temp ;) (ref null $2) (rtt 0 $array) => (; temp ;) (rtt 0 $2) After building types: $sig => (func_subtype (param (ref $1)) (result (ref $2) i32) func) $struct => (struct_subtype (field (ref null $2) (mut (rtt 0 $2))) data) $array => (array_subtype (mut anyref) data) (ref $sig) => (ref $0) (ref $struct) => (ref $1) (ref $array) => (ref $2) (ref null $array) => (ref null $2) (rtt 0 $array) => (rtt 0 $2) ;; Test canonicalization ;; Test basic ;; Test canonical signatures ;; Test recursive types (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $1)) func) (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $1)) func) (func_subtype (result (ref null $2)) func) (func_subtype (result (ref null $3)) func) (func_subtype (result (ref null $4)) func) (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $0) (ref null $2)) func) (func_subtype (result (ref null $1) (ref null $3)) func) (func_subtype func) (func_subtype func) (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $1)) func) (func_subtype (result (ref null $0)) func) (func_subtype (result (ref null $0)) func) ;; Test subtyping binaryen-version_108/test/example/type-builder.cpp000066400000000000000000000347421423707623100225020ustar00rootroot00000000000000#include #include #include "wasm-type-printing.h" #include "wasm-type.h" using namespace wasm; // Check that the builder works when there are duplicate definitions void test_canonicalization() { std::cout << ";; Test canonicalization\n"; // (type $struct (struct (field (ref null $sig) (ref null $sig)))) // (type $sig (func)) HeapType sig = Signature(Type::none, Type::none); HeapType struct_ = Struct({Field(Type(sig, Nullable), Immutable), Field(Type(sig, Nullable), Immutable)}); TypeBuilder builder(4); Type tempSigRef1 = builder.getTempRefType(builder[2], Nullable); Type tempSigRef2 = builder.getTempRefType(builder[3], Nullable); assert(tempSigRef1 != tempSigRef2); assert(tempSigRef1 != Type(sig, Nullable)); assert(tempSigRef2 != Type(sig, Nullable)); builder[0] = Struct({Field(tempSigRef1, Immutable), Field(tempSigRef1, Immutable)}); builder[1] = Struct({Field(tempSigRef2, Immutable), Field(tempSigRef2, Immutable)}); builder[2] = Signature(Type::none, Type::none); builder[3] = Signature(Type::none, Type::none); std::vector built = *builder.build(); assert(built[0] == struct_); assert(built[1] == struct_); assert(built[2] == sig); assert(built[3] == sig); } // Check that defined basic HeapTypes are handled correctly. void test_basic() { std::cout << ";; Test basic\n"; TypeBuilder builder(6); Type anyref = builder.getTempRefType(builder[4], Nullable); Type i31ref = builder.getTempRefType(builder[5], NonNullable); builder[0] = Signature(Type::anyref, Type::i31ref); builder[1] = Signature(anyref, Type::i31ref); builder[2] = Signature(Type::anyref, i31ref); builder[3] = Signature(anyref, i31ref); builder[4] = HeapType::any; builder[5] = HeapType::i31; std::vector built = *builder.build(); assert(built[0] == Signature(Type::anyref, Type::i31ref)); assert(built[1] == built[0]); assert(built[2] == built[1]); assert(built[3] == built[2]); assert(built[4] == HeapType::any); assert(built[5] == HeapType::i31); } void test_recursive() { std::cout << ";; Test recursive types\n"; { // Trivial recursion std::vector built; { TypeBuilder builder(1); Type temp = builder.getTempRefType(builder[0], Nullable); builder[0] = Signature(Type::none, temp); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n\n"; assert(built[0] == built[0].getSignature().results.getHeapType()); assert(Type(built[0], Nullable) == built[0].getSignature().results); } { // Mutual recursion std::vector built; { TypeBuilder builder(2); Type temp0 = builder.getTempRefType(builder[0], Nullable); Type temp1 = builder.getTempRefType(builder[1], Nullable); builder[0] = Signature(Type::none, temp1); builder[1] = Signature(Type::none, temp0); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n\n"; assert(built[0].getSignature().results.getHeapType() == built[1]); assert(built[1].getSignature().results.getHeapType() == built[0]); assert(built[0] == built[1]); } { // A longer chain of recursion std::vector built; { TypeBuilder builder(5); Type temp0 = builder.getTempRefType(builder[0], Nullable); Type temp1 = builder.getTempRefType(builder[1], Nullable); Type temp2 = builder.getTempRefType(builder[2], Nullable); Type temp3 = builder.getTempRefType(builder[3], Nullable); Type temp4 = builder.getTempRefType(builder[4], Nullable); builder[0] = Signature(Type::none, temp1); builder[1] = Signature(Type::none, temp2); builder[2] = Signature(Type::none, temp3); builder[3] = Signature(Type::none, temp4); builder[4] = Signature(Type::none, temp0); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n"; std::cout << print(built[2]) << "\n"; std::cout << print(built[3]) << "\n"; std::cout << print(built[4]) << "\n\n"; assert(built[0].getSignature().results.getHeapType() == built[1]); assert(built[1].getSignature().results.getHeapType() == built[2]); assert(built[2].getSignature().results.getHeapType() == built[3]); assert(built[3].getSignature().results.getHeapType() == built[4]); assert(built[4].getSignature().results.getHeapType() == built[0]); assert(built[0] == built[1]); assert(built[1] == built[2]); assert(built[2] == built[3]); assert(built[3] == built[4]); } { // Check canonicalization for non-recursive parents and children of // recursive HeapTypes. std::vector built; { TypeBuilder builder(6); Type temp0 = builder.getTempRefType(builder[0], Nullable); Type temp1 = builder.getTempRefType(builder[1], Nullable); Type temp2 = builder.getTempRefType(builder[2], Nullable); Type temp3 = builder.getTempRefType(builder[3], Nullable); Type tuple0_2 = builder.getTempTupleType({temp0, temp2}); Type tuple1_3 = builder.getTempTupleType({temp1, temp3}); builder[0] = Signature(Type::none, tuple0_2); builder[1] = Signature(Type::none, tuple1_3); builder[2] = Signature(); builder[3] = Signature(); builder[4] = Signature(Type::none, temp0); builder[5] = Signature(Type::none, temp1); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n"; std::cout << print(built[2]) << "\n"; std::cout << print(built[3]) << "\n"; std::cout << print(built[4]) << "\n"; std::cout << print(built[5]) << "\n\n"; assert(built[0] == built[1]); assert(built[2] == built[3]); assert(built[4] == built[5]); assert(built[4].getSignature().results.getHeapType() == built[0]); assert(built[5].getSignature().results.getHeapType() == built[1]); assert(built[0].getSignature().results == Type({Type(built[0], Nullable), Type(built[2], Nullable)})); assert(built[1].getSignature().results == Type({Type(built[1], Nullable), Type(built[3], Nullable)})); } { // Folded and unfolded std::vector built; { TypeBuilder builder(2); Type temp0 = builder.getTempRefType(builder[0], Nullable); builder[0] = Signature(Type::none, temp0); builder[1] = Signature(Type::none, temp0); built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n\n"; assert(built[0].getSignature().results.getHeapType() == built[0]); assert(built[1].getSignature().results.getHeapType() == built[0]); assert(built[0] == built[1]); } { // Including a basic heap type std::vector built; { TypeBuilder builder(3); Type temp0 = builder.getTempRefType(builder[0], Nullable); Type anyref = builder.getTempRefType(builder[2], Nullable); builder[0] = Signature(anyref, temp0); builder[1] = Signature(anyref, temp0); builder[2] = HeapType::any; built = *builder.build(); } IndexedTypeNameGenerator print(built); std::cout << print(built[0]) << "\n"; std::cout << print(built[1]) << "\n\n"; assert(built[0].getSignature().results.getHeapType() == built[0]); assert(built[1].getSignature().results.getHeapType() == built[0]); assert(built[0].getSignature().params == Type::anyref); assert(built[1].getSignature().params == Type::anyref); assert(built[0] == built[1]); assert(built[2] == HeapType::any); } } void test_lub() { std::cout << ";; Test LUBs\n"; auto LUB = [&](Type a, Type b) { Type lubAB = Type::getLeastUpperBound(a, b); Type lubBA = Type::getLeastUpperBound(b, a); assert(lubAB == lubBA); if (lubAB == Type::none) { assert(!Type::hasLeastUpperBound(a, b)); assert(!Type::hasLeastUpperBound(b, a)); } else { assert(Type::hasLeastUpperBound(a, b)); assert(Type::hasLeastUpperBound(b, a)); assert(Type::isSubType(a, lubAB)); assert(Type::isSubType(b, lubAB)); } return lubAB; }; { // Basic Types for (auto other : {Type::funcref, Type::anyref, Type::eqref, Type::i31ref, Type::dataref}) { assert(LUB(Type::anyref, other) == Type::anyref); } assert(LUB(Type::eqref, Type::funcref) == Type::anyref); assert(LUB(Type::i31ref, Type::dataref) == Type(HeapType::eq, NonNullable)); } { // Nullable and non-nullable references Type nullable(HeapType::any, Nullable); Type nonNullable(HeapType::any, NonNullable); assert(LUB(nullable, nullable) == nullable); assert(LUB(nullable, nonNullable) == nullable); assert(LUB(nonNullable, nonNullable) == nonNullable); } { // Funcref with specific signature assert(LUB(Type::funcref, Type(Signature(), Nullable)) == Type::funcref); } { // Incompatible signatures Type a(Signature(Type::none, Type::anyref), Nullable); Type b(Signature(Type::anyref, Type::none), Nullable); assert(LUB(a, b) == Type::funcref); } { // Signatures incompatible in tuple size Type a(Signature(Type::none, {Type::anyref, Type::anyref}), Nullable); Type b(Signature(Type::none, {Type::anyref, Type::anyref, Type::anyref}), Nullable); assert(LUB(a, b) == Type::funcref); } // { // // Covariance of function results // Type a(Signature(Type::none, {Type::eqref, Type::funcref}), Nullable); // Type b(Signature(Type::none, {Type::funcref, Type::eqref}), Nullable); // assert(LUB(a, b) == Type(Signature(Type::none, {Type::anyref, // Type::anyref}), Nullable)); // } // TODO: Test contravariance in function parameters once that is supported. // { // // Nested signatures // Type baseA(Signature(Type::none, Type::eqref), Nullable); // Type baseB(Signature(Type::none, Type::funcref), Nullable); // Type a(Signature(Type::none, baseA), Nullable); // Type b(Signature(Type::none, baseB), Nullable); // Type baseLub(Signature(Type::none, Type::anyref), Nullable); // Type lub(Signature(Type::none, baseLub), Nullable); // assert(LUB(a, b) == lub); // } // TODO: Test recursive signatures once signature subtyping is supported. { // Mutable fields are invariant Type a(Array(Field(Type::eqref, Mutable)), Nullable); Type b(Array(Field(Type::funcref, Mutable)), Nullable); assert(LUB(a, b) == Type(HeapType::data, Nullable)); } { // Immutable fields are covariant Type a(Array(Field(Type::eqref, Immutable)), Nullable); Type b(Array(Field(Type::funcref, Immutable)), Nullable); Type lub(Array(Field(Type::anyref, Immutable)), Nullable); assert(LUB(a, b) == lub); } { // Depth subtyping Type a(Struct({Field(Type::eqref, Immutable)}), Nullable); Type b(Struct({Field(Type::funcref, Immutable)}), Nullable); Type lub(Struct({Field(Type::anyref, Immutable)}), Nullable); assert(LUB(a, b) == lub); } { // Width subtyping Type a(Struct({Field(Type::i32, Immutable)}), Nullable); Type b(Struct({Field(Type::i32, Immutable), Field(Type::i32, Immutable)}), Nullable); assert(LUB(a, b) == a); } { // Width subtyping with different suffixes Type a(Struct({Field(Type::i32, Immutable), Field(Type::i64, Immutable)}), Nullable); Type b(Struct({Field(Type::i32, Immutable), Field(Type::f32, Immutable)}), Nullable); Type lub(Struct({Field(Type::i32, Immutable)}), Nullable); assert(LUB(a, b) == lub); } { // Width and depth subtyping with different suffixes Type a(Struct({Field(Type::eqref, Immutable), Field(Type::i64, Immutable)}), Nullable); Type b( Struct({Field(Type::funcref, Immutable), Field(Type::f32, Immutable)}), Nullable); Type lub(Struct({Field(Type::anyref, Immutable)}), Nullable); assert(LUB(a, b) == lub); } { // No common prefix Type a( Struct({Field(Type::i32, Immutable), Field(Type::anyref, Immutable)}), Nullable); Type b( Struct({Field(Type::f32, Immutable), Field(Type::anyref, Immutable)}), Nullable); Type lub(Struct(), Nullable); assert(LUB(a, b) == lub); } { // Nested structs Type innerA(Struct({Field(Type::eqref, Immutable)}), Nullable); Type innerB(Struct({Field(Type::funcref, Immutable)}), Nullable); Type innerLub(Struct({Field(Type::anyref, Immutable)}), Nullable); Type a(Struct({Field(innerA, Immutable)}), Nullable); Type b(Struct({Field(innerB, Immutable)}), Nullable); Type lub(Struct({Field(innerLub, Immutable)}), Nullable); assert(LUB(a, b) == lub); } { // Recursive structs TypeBuilder builder(2); Type tempA = builder.getTempRefType(builder[0], Nullable); Type tempB = builder.getTempRefType(builder[1], Nullable); builder[0] = Struct({Field(tempB, Immutable), Field(Type::eqref, Immutable)}); builder[1] = Struct({Field(tempA, Immutable), Field(Type::funcref, Immutable)}); auto built = *builder.build(); Type a(built[0], Nullable); Type b(built[1], Nullable); TypeBuilder lubBuilder(1); Type tempLub = builder.getTempRefType(lubBuilder[0], Nullable); lubBuilder[0] = Struct({Field(tempLub, Immutable), Field(Type::anyref, Immutable)}); built = *lubBuilder.build(); Type lub(built[0], Nullable); assert(LUB(a, b) == lub); } { // Incompatible Rtts Type a{Rtt(HeapType::eq)}; Type b{Rtt(HeapType::func)}; assert(LUB(a, b) == Type::none); } { // Rtts with matching depth Type a(Rtt(42, HeapType::any)); assert(LUB(a, a) == a); } { // Rtts with mismatched depth Type a(Rtt(42, HeapType::any)); Type b(Rtt(50, HeapType::any)); Type lub{Rtt(HeapType::any)}; assert(LUB(a, b) == lub); } { // Rtts with and without depth Type a(Rtt(42, HeapType::any)); Type b{Rtt(HeapType::any)}; assert(LUB(a, b) == b); } { // Rtts without depth Type a{Rtt(HeapType::any)}; assert(LUB(a, a) == a); } } int main() { // Run the tests twice to ensure things still work when the global stores are // already populated. for (size_t i = 0; i < 2; ++i) { test_canonicalization(); test_basic(); test_recursive(); test_lub(); } } binaryen-version_108/test/example/type-builder.txt000066400000000000000000000023641423707623100225320ustar00rootroot00000000000000;; Test canonicalization ;; Test basic ;; Test recursive types (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0) (ref null $2))) (func (result (ref null $0) (ref null $2))) (func) (func) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (param anyref) (result (ref null $0))) (func (param anyref) (result (ref null $0))) ;; Test LUBs ;; Test canonicalization ;; Test basic ;; Test recursive types (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0) (ref null $2))) (func (result (ref null $0) (ref null $2))) (func) (func) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (result (ref null $0))) (func (param anyref) (result (ref null $0))) (func (param anyref) (result (ref null $0))) ;; Test LUBs binaryen-version_108/test/example/typeinfo.cpp000066400000000000000000000301511423707623100217200ustar00rootroot00000000000000#include #include #include "wasm-type.h" using namespace wasm; void test_compound() { { HeapType func(HeapType::func); assert(Type(func, Nullable).getID() == Type::funcref); assert(Type(func, NonNullable).getID() == Type(func, NonNullable).getID()); assert(Type(func, NonNullable).getID() != Type(func, Nullable).getID()); HeapType sameFunc(HeapType::func); assert(Type(func, NonNullable).getID() == Type(sameFunc, NonNullable).getID()); HeapType any(HeapType::any); assert(Type(any, Nullable).getID() == Type::anyref); assert(Type(any, NonNullable).getID() == Type(any, NonNullable).getID()); assert(Type(any, NonNullable).getID() != Type(any, Nullable).getID()); HeapType sameAny(HeapType::any); assert(Type(any, NonNullable).getID() == Type(sameAny, NonNullable).getID()); HeapType eq(HeapType::eq); // assert(Type(eq, Nullable).getID() == Type::eqref); assert(Type(eq, NonNullable).getID() == Type(eq, NonNullable).getID()); assert(Type(eq, NonNullable).getID() != Type(eq, Nullable).getID()); HeapType sameEq(HeapType::eq); assert(Type(eq, NonNullable).getID() == Type(sameEq, NonNullable).getID()); HeapType i31(HeapType::i31); // assert(Type(i31, NonNullable).getID() == Type::i31ref); assert(Type(i31, NonNullable).getID() == Type(i31, NonNullable).getID()); assert(Type(i31, NonNullable).getID() != Type(i31, Nullable).getID()); HeapType sameI31(HeapType::i31); assert(Type(i31, NonNullable).getID() == Type(sameI31, NonNullable).getID()); } { Signature signature(Type::i32, Type::none); assert(Type(signature, NonNullable).getID() == Type(signature, NonNullable).getID()); assert(Type(signature, NonNullable).getID() != Type(signature, Nullable).getID()); Signature sameSignature(Type::i32, Type::none); assert(Type(signature, NonNullable).getID() == Type(sameSignature, NonNullable).getID()); Signature otherSignature(Type::f64, Type::none); assert(Type(signature, NonNullable).getID() != Type(otherSignature, NonNullable).getID()); } { Struct struct_{}; assert(Type(struct_, NonNullable).getID() == Type(struct_, NonNullable).getID()); assert(Type(struct_, NonNullable).getID() != Type(struct_, Nullable).getID()); Struct sameStruct{}; assert(Type(struct_, NonNullable).getID() == Type(sameStruct, NonNullable).getID()); Struct otherStruct({{Type::i32, Immutable}}); assert(Type(struct_, NonNullable).getID() != Type(otherStruct, NonNullable).getID()); } { Array array({Type::i32, Immutable}); assert(Type(array, NonNullable).getID() == Type(array, NonNullable).getID()); assert(Type(array, NonNullable).getID() != Type(array, Nullable).getID()); Array sameArray({Type::i32, Immutable}); assert(Type(array, NonNullable).getID() == Type(sameArray, NonNullable).getID()); Array otherArray({Type::f64, Mutable}); assert(Type(array, NonNullable).getID() != Type(otherArray, NonNullable).getID()); } { Tuple singleTuple({Type::i32}); assert(Type(singleTuple).getID() == Type::i32); Tuple tuple({Type::i32, Type::f64}); assert(Type(tuple).getID() == Type(tuple).getID()); Tuple sameTuple({Type::i32, Type::f64}); assert(Type(tuple).getID() == Type(sameTuple).getID()); Tuple otherTuple({Type::f64, Type::anyref}); assert(Type(tuple).getID() != Type(otherTuple).getID()); } { Rtt rtt(0, HeapType::func); assert(Type(rtt).getID() == Type(rtt).getID()); Rtt sameRtt(0, HeapType::func); assert(rtt == sameRtt); assert(Type(rtt).getID() == Type(sameRtt).getID()); Rtt otherDepthRtt(1, HeapType::func); assert(rtt != otherDepthRtt); assert(Type(rtt).getID() != Type(otherDepthRtt).getID()); Rtt otherHeapTypeRtt(0, HeapType::any); assert(rtt != otherHeapTypeRtt); assert(Type(rtt).getID() != Type(otherHeapTypeRtt).getID()); Rtt structRtt(0, Struct{}); assert(Type(structRtt).getID() == Type(structRtt).getID()); Rtt sameStructRtt(0, Struct{}); assert(structRtt == sameStructRtt); assert(Type(structRtt).getID() == Type(sameStructRtt).getID()); Rtt otherStructRtt(0, Struct({{Type::i32, Immutable}})); assert(structRtt != otherStructRtt); assert(Type(structRtt).getID() != Type(otherStructRtt).getID()); } } void test_printing() { { std::cout << ";; Heap types\n"; std::cout << HeapType(HeapType::func) << "\n"; std::cout << Type(HeapType::func, Nullable) << "\n"; std::cout << Type(HeapType::func, NonNullable) << "\n"; std::cout << HeapType(HeapType::any) << "\n"; std::cout << Type(HeapType::any, Nullable) << "\n"; std::cout << Type(HeapType::any, NonNullable) << "\n"; std::cout << HeapType(HeapType::eq) << "\n"; std::cout << Type(HeapType::eq, Nullable) << "\n"; std::cout << Type(HeapType::eq, NonNullable) << "\n"; std::cout << HeapType(HeapType::i31) << "\n"; std::cout << Type(HeapType::i31, Nullable) << "\n"; std::cout << Type(HeapType::i31, NonNullable) << "\n"; std::cout << Signature(Type::none, Type::none) << "\n"; std::cout << HeapType(Struct{}) << "\n"; std::cout << HeapType(Array({Type::i32, Immutable})) << "\n"; } { std::cout << "\n;; Signature\n"; Signature emptySignature(Type::none, Type::none); std::cout << emptySignature << "\n"; std::cout << Type(emptySignature, NonNullable) << "\n"; std::cout << Type(emptySignature, Nullable) << "\n"; Signature signature(Type::i32, Type::f64); std::cout << signature << "\n"; std::cout << Type(signature, NonNullable) << "\n"; std::cout << Type(signature, Nullable) << "\n"; } { std::cout << "\n;; Struct\n"; Struct emptyStruct{}; std::cout << emptyStruct << "\n"; std::cout << Type(emptyStruct, NonNullable) << "\n"; std::cout << Type(emptyStruct, Nullable) << "\n"; Struct struct_({ {Type::i32, Immutable}, {Type::i64, Immutable}, {Type::f32, Mutable}, {Type::f64, Mutable}, {Type::anyref, Immutable}, }); std::cout << struct_ << "\n"; std::cout << Type(struct_, NonNullable) << "\n"; std::cout << Type(struct_, Nullable) << "\n"; } { std::cout << "\n;; Array\n"; Array array({Type::i32, Immutable}); std::cout << array << "\n"; std::cout << Type(array, NonNullable) << "\n"; std::cout << Type(array, Nullable) << "\n"; Array arrayMut({Type::anyref, Mutable}); std::cout << arrayMut << "\n"; std::cout << Type(arrayMut, NonNullable) << "\n"; std::cout << Type(arrayMut, Nullable) << "\n"; } { std::cout << "\n;; Tuple\n"; Tuple emptyTuple{}; std::cout << emptyTuple << "\n"; std::cout << Type(emptyTuple) << "\n"; Tuple tuple({ Type::i32, Type::f64, Type::anyref, }); std::cout << tuple << "\n"; std::cout << Type(tuple) << "\n"; } { std::cout << "\n;; Rtt\n"; std::cout << Rtt(0, HeapType::func) << "\n"; std::cout << Type(Rtt(0, HeapType::func)) << "\n"; std::cout << Rtt(2, HeapType::any) << "\n"; std::cout << Type(Rtt(2, HeapType::any)) << "\n"; std::cout << Rtt(3, HeapType::eq) << "\n"; std::cout << Type(Rtt(3, HeapType::eq)) << "\n"; std::cout << Rtt(4, HeapType::i31) << "\n"; std::cout << Type(Rtt(4, HeapType::i31)) << "\n"; Rtt signatureRtt(6, Signature(Type::none, Type::none)); std::cout << signatureRtt << "\n"; std::cout << Type(signatureRtt) << "\n"; Rtt structRtt(7, Struct{}); std::cout << structRtt << "\n"; std::cout << Type(structRtt) << "\n"; Rtt arrayRtt(8, Array({Type::i32, Immutable})); std::cout << arrayRtt << "\n"; std::cout << Type(arrayRtt) << "\n"; } { std::cout << "\n;; Signature of references (param/result)\n"; Signature signature(Type(Struct{}, Nullable), Type(Array({Type::i32, Mutable}), NonNullable)); std::cout << signature << "\n"; } { std::cout << "\n;; Signature of references (params/results)\n"; Signature signature(Type({ Type(Struct{}, Nullable), Type(Array({Type::i32, Mutable}), NonNullable), }), Type({ Type(Struct{}, NonNullable), Type(Array({Type::i32, Immutable}), Nullable), })); std::cout << signature << "\n"; } { std::cout << "\n;; Struct of references\n"; Struct structOfSignature({ {Type(Signature(Type::none, Type::none), NonNullable), Immutable}, {Type(Signature(Type::none, Type::none), NonNullable), Mutable}, {Type(Signature(Type::none, Type::none), Nullable), Immutable}, {Type(Signature(Type::none, Type::none), Nullable), Mutable}, }); std::cout << structOfSignature << "\n"; std::cout << Type(structOfSignature, NonNullable) << "\n"; std::cout << Type(structOfSignature, Nullable) << "\n"; Struct structOfStruct({ {Type(Struct{}, NonNullable), Immutable}, {Type(Struct{}, NonNullable), Mutable}, {Type(Struct{}, Nullable), Immutable}, {Type(Struct{}, Nullable), Mutable}, }); std::cout << structOfStruct << "\n"; std::cout << Type(structOfStruct, NonNullable) << "\n"; std::cout << Type(structOfStruct, Nullable) << "\n"; Struct structOfArray({ {Type(Array({Type::i32, Immutable}), NonNullable), Immutable}, {Type(Array({Type::i32, Immutable}), NonNullable), Mutable}, {Type(Array({Type::i32, Immutable}), Nullable), Immutable}, {Type(Array({Type::i32, Immutable}), Nullable), Mutable}, }); std::cout << structOfArray << "\n"; std::cout << Type(structOfArray, NonNullable) << "\n"; std::cout << Type(structOfArray, Nullable) << "\n"; Struct structOfEverything({ {Type::i32, Mutable}, {Type(Signature(Type::none, Type::none), Nullable), Mutable}, {Type(Struct{}, Nullable), Mutable}, {Type(Array({Type::i32, Mutable}), Nullable), Mutable}, }); std::cout << structOfEverything << "\n"; std::cout << Type(structOfEverything, NonNullable) << "\n"; std::cout << Type(structOfEverything, Nullable) << "\n"; } { std::cout << "\n;; Array of references\n"; Array arrayOfSignature( {Type(Signature(Type::none, Type::none), Nullable), Immutable}); std::cout << arrayOfSignature << "\n"; std::cout << Type(arrayOfSignature, NonNullable) << "\n"; std::cout << Type(arrayOfSignature, Nullable) << "\n"; Array arrayOfStruct({Type(Struct{}, Nullable), Mutable}); std::cout << arrayOfStruct << "\n"; std::cout << Type(arrayOfStruct, NonNullable) << "\n"; std::cout << Type(arrayOfStruct, Nullable) << "\n"; Array arrayOfArray( {Type(Array({Type::i32, Immutable}), Nullable), Immutable}); std::cout << arrayOfArray << "\n"; std::cout << Type(arrayOfArray, NonNullable) << "\n"; std::cout << Type(arrayOfArray, Nullable) << "\n"; } { std::cout << "\n;; Tuple of references\n"; Tuple tuple({ Type(Signature(Type::none, Type::none), NonNullable), Type(Signature(Type::none, Type::none), Nullable), Type(Struct{}, NonNullable), Type(Struct{}, Nullable), Type(Array({Type::i32, Immutable}), NonNullable), Type(Array({Type::i32, Immutable}), Nullable), }); std::cout << tuple << "\n"; std::cout << Type(tuple) << "\n"; } { std::cout << "\n;; Recursive (not really)\n"; Signature signatureSignature(Type::none, Type::none); signatureSignature.params = Type(signatureSignature, NonNullable); // ^ copies std::cout << signatureSignature << "\n"; std::cout << Type(signatureSignature, NonNullable) << "\n"; Signature signatureArraySignature(Type::none, Type::none); signatureArraySignature.params = Type(Array({Type(signatureArraySignature, NonNullable), Immutable}), NonNullable); // ^ copies std::cout << signatureArraySignature << "\n"; std::cout << Type(signatureArraySignature, NonNullable) << "\n"; } } int main() { test_compound(); test_printing(); } binaryen-version_108/test/example/typeinfo.txt000066400000000000000000000041551423707623100217620ustar00rootroot00000000000000;; Heap types func funcref (ref func) any anyref (ref any) eq eqref (ref eq) i31 (ref null i31) i31ref (func) (struct) (array i32) ;; Signature (func) (ref $func.0) (ref null $func.0) (func (param i32) (result f64)) (ref $func.0) (ref null $func.0) ;; Struct (struct) (ref $struct.0) (ref null $struct.0) (struct (field i32 i64 (mut f32) (mut f64) anyref)) (ref $struct.0) (ref null $struct.0) ;; Array (array i32) (ref $array.0) (ref null $array.0) (array (mut anyref)) (ref $array.0) (ref null $array.0) ;; Tuple () none (i32 f64 anyref) (i32 f64 anyref) ;; Rtt (rtt 0 func) (rtt 0 func) (rtt 2 any) (rtt 2 any) (rtt 3 eq) (rtt 3 eq) (rtt 4 i31) (rtt 4 i31) (rtt 6 $func.0) (rtt 6 $func.0) (rtt 7 $struct.0) (rtt 7 $struct.0) (rtt 8 $array.0) (rtt 8 $array.0) ;; Signature of references (param/result) (func (param (ref null $struct.0)) (result (ref $array.0))) ;; Signature of references (params/results) (func (param (ref null $struct.0) (ref $array.0)) (result (ref $struct.0) (ref null $array.1))) ;; Struct of references (struct (field (ref $func.0) (mut (ref $func.0)) (ref null $func.0) (mut (ref null $func.0)))) (ref $struct.0) (ref null $struct.0) (struct (field (ref $struct.0) (mut (ref $struct.0)) (ref null $struct.0) (mut (ref null $struct.0)))) (ref $struct.0) (ref null $struct.0) (struct (field (ref $array.0) (mut (ref $array.0)) (ref null $array.0) (mut (ref null $array.0)))) (ref $struct.0) (ref null $struct.0) (struct (field (mut i32) (mut (ref null $func.0)) (mut (ref null $struct.0)) (mut (ref null $array.0)))) (ref $struct.0) (ref null $struct.0) ;; Array of references (array (ref null $func.0)) (ref $array.0) (ref null $array.0) (array (mut (ref null $struct.0))) (ref $array.0) (ref null $array.0) (array (ref null $array.0)) (ref $array.0) (ref null $array.0) ;; Tuple of references ((ref $func.0) (ref null $func.0) (ref $struct.0) (ref null $struct.0) (ref $array.0) (ref null $array.0)) ((ref $func.0) (ref null $func.0) (ref $struct.0) (ref null $struct.0) (ref $array.0) (ref null $array.0)) ;; Recursive (not really) (func (param (ref $func.0))) (ref $func.0) (func (param (ref $array.0))) (ref $func.0) binaryen-version_108/test/exception-handling.wast000066400000000000000000000142611423707623100224100ustar00rootroot00000000000000(module (tag $e-i32 (param i32)) (tag $e-i64 (param i64)) (tag $e-i32-i64 (param i32 i64)) (tag $e-anyref (param anyref)) (tag $e-empty) (func $foo) (func $bar) (func $eh-test (local $x (i32 i64)) ;; Simple try-catch (try (do (throw $e-i32 (i32.const 0)) ) (catch $e-i32 (drop (pop i32)) ) ) ;; try-catch with multivalue tag (try (do (throw $e-i32-i64 (i32.const 0) (i64.const 0)) ) (catch $e-i32-i64 (local.set $x (pop i32 i64)) (drop (tuple.extract 0 (local.get $x) ) ) ) ) ;; Try with a block label (try $l1 (do (br $l1) ) (catch $e-i32 (drop (pop i32)) (br $l1) ) ) ;; Empty try body (try (do) (catch $e-i32 (drop (pop i32)) ) ) ;; Multiple instructions within try and catch bodies (try (do (call $foo) (call $bar) ) (catch $e-i32 (drop (pop i32)) (call $foo) (call $bar) ) ) ;; Multiple catch clauses (try (do (throw $e-i32 (i32.const 0)) ) (catch $e-i32 (drop (pop i32)) ) (catch $e-i64 (drop (pop i64)) ) ) ;; Single catch-all clause (try (do (throw $e-i32 (i32.const 0)) ) (catch_all) ) ;; catch and catch-all clauses together (try (do (throw $e-i32 (i32.const 0)) ) (catch $e-i32 (drop (pop i32)) ) (catch $e-i64 (drop (pop i64)) ) (catch_all (call $foo) (call $bar) ) ) ;; nested try-catch (try (do (try (do (throw $e-i32 (i32.const 0)) ) (catch $e-i32 (drop (pop i32)) ) (catch_all) ) ) (catch $e-i32 (drop (pop i32)) ) (catch_all (try (do (throw $e-i32 (i32.const 0)) ) (catch $e-i32 (drop (pop i32)) ) (catch_all) ) ) ) ;; try without catch or delegate (try (do (throw $e-i32 (i32.const 0)) ) ) ) (func $delegate-test ;; Inner delegates target an outer catch (try $l0 (do (try (do (call $foo) ) (delegate $l0) ;; by label ) (try (do (call $foo) ) (delegate 0) ;; by depth ) ) (catch_all) ) ;; When there are both a branch and a delegate that target the same try ;; label. Because binaryen only allows blocks and loops to be targetted by ;; branches, we wrap the try with a block and make branches that block ;; instead, resulting in the br and delegate target different labels in the ;; output. (try $l0 (do (try (do (br_if $l0 (i32.const 1)) ) (delegate $l0) ;; by label ) (try (do (br_if $l0 (i32.const 1)) ) (delegate 0) ;; by depth ) ) (catch_all) ) ;; The inner delegate targets the outer delegate, which in turn targets the ;; caller. (try $l0 (do (try (do (call $foo) ) (delegate $l0) ) ) (delegate 0) ) ;; 'catch' body can be empty when the tag's type is none. (try (do) (catch $e-empty) ) ) (func $rethrow-test ;; Simple try-catch-rethrow (try $l0 (do (call $foo) ) (catch $e-i32 (drop (pop i32)) (rethrow $l0) ;; by label ) (catch_all (rethrow 0) ;; by depth ) ) ;; When there are both a branch and a rethrow that target the same try ;; label. Because binaryen only allows blocks and loops to be targetted by ;; branches, we wrap the try with a block and make branches that block ;; instead, resulting in the br and rethrow target different labels in the ;; output. (try $l0 (do (call $foo) ) (catch $e-i32 (drop (pop i32)) (rethrow $l0) ) (catch_all (br $l0) ) ) ;; One more level deep (try $l0 (do (call $foo) ) (catch_all (try (do (call $foo) ) (catch $e-i32 (drop (pop i32)) (rethrow $l0) ;; by label ) (catch_all (rethrow 1) ;; by depth ) ) ) ) ;; Interleaving block (try $l0 (do (call $foo) ) (catch_all (try (do (call $foo) ) (catch $e-i32 (drop (pop i32)) (block $b0 (rethrow $l0) ;; by label ) ) (catch_all (block $b1 (rethrow 2) ;; by depth ) ) ) ) ) ;; Within nested try, but rather in 'try' part and not 'catch' (try $l0 (do (call $foo) ) (catch_all (try (do (rethrow $l0) ;; by label ) (catch_all) ) ) ) (try $l0 (do (call $foo) ) (catch_all (try (do (rethrow 1) ;; by depth ) (catch_all) ) ) ) ) (func $pop-test (try (do) (catch $e-i32 (throw $e-i32 (if (result i32) ;; pop is within an if condition, so this is OK. (pop i32) (i32.const 0) (i32.const 3) ) ) ) ) (try (do) (catch $e-anyref (drop (pop funcref) ;; pop can be subtype ) ) ) ) (func $catchless-try-with-inner-delegate (try $label$0 (do (try (do (throw $e-i32 (i32.const 0) ) ) (delegate $label$0) ) ) ) ) ) binaryen-version_108/test/exception-handling.wast.from-wast000066400000000000000000000110761423707623100243270ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i64_=>_none (func (param i64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $anyref_=>_none (func (param anyref))) (tag $e-i32 (param i32)) (tag $e-i64 (param i64)) (tag $e-i32-i64 (param i32 i64)) (tag $e-anyref (param anyref)) (tag $e-empty (param)) (func $foo (nop) ) (func $bar (nop) ) (func $eh-test (local $x (i32 i64)) (try $try (do (throw $e-i32 (i32.const 0) ) ) (catch $e-i32 (drop (pop i32) ) ) ) (try $try0 (do (throw $e-i32-i64 (i32.const 0) (i64.const 0) ) ) (catch $e-i32-i64 (local.set $x (pop i32 i64) ) (drop (tuple.extract 0 (local.get $x) ) ) ) ) (block $l11 (try $l1 (do (br $l11) ) (catch $e-i32 (drop (pop i32) ) (br $l11) ) ) ) (try $try2 (do (nop) ) (catch $e-i32 (drop (pop i32) ) ) ) (try $try3 (do (call $foo) (call $bar) ) (catch $e-i32 (drop (pop i32) ) (call $foo) (call $bar) ) ) (try $try4 (do (throw $e-i32 (i32.const 0) ) ) (catch $e-i32 (drop (pop i32) ) ) (catch $e-i64 (drop (pop i64) ) ) ) (try $try5 (do (throw $e-i32 (i32.const 0) ) ) (catch_all (nop) ) ) (try $try6 (do (throw $e-i32 (i32.const 0) ) ) (catch $e-i32 (drop (pop i32) ) ) (catch $e-i64 (drop (pop i64) ) ) (catch_all (call $foo) (call $bar) ) ) (try $try7 (do (try $try8 (do (throw $e-i32 (i32.const 0) ) ) (catch $e-i32 (drop (pop i32) ) ) (catch_all (nop) ) ) ) (catch $e-i32 (drop (pop i32) ) ) (catch_all (try $try9 (do (throw $e-i32 (i32.const 0) ) ) (catch $e-i32 (drop (pop i32) ) ) (catch_all (nop) ) ) ) ) (try $try10 (do (throw $e-i32 (i32.const 0) ) ) ) ) (func $delegate-test (try $l0 (do (try $try (do (call $foo) ) (delegate $l0) ) (try $try11 (do (call $foo) ) (delegate $l0) ) ) (catch_all (nop) ) ) (block $l015 (try $l012 (do (try $try13 (do (br_if $l015 (i32.const 1) ) ) (delegate $l012) ) (try $try14 (do (br_if $l015 (i32.const 1) ) ) (delegate $l012) ) ) (catch_all (nop) ) ) ) (try $l016 (do (try $try17 (do (call $foo) ) (delegate $l016) ) ) (delegate 0) ) (try $try18 (do (nop) ) (catch $e-empty (nop) ) ) ) (func $rethrow-test (try $l0 (do (call $foo) ) (catch $e-i32 (drop (pop i32) ) (rethrow $l0) ) (catch_all (rethrow $l0) ) ) (block $l020 (try $l019 (do (call $foo) ) (catch $e-i32 (drop (pop i32) ) (rethrow $l019) ) (catch_all (br $l020) ) ) ) (try $l021 (do (call $foo) ) (catch_all (try $try (do (call $foo) ) (catch $e-i32 (drop (pop i32) ) (rethrow $l021) ) (catch_all (rethrow $l021) ) ) ) ) (try $l022 (do (call $foo) ) (catch_all (try $try23 (do (call $foo) ) (catch $e-i32 (drop (pop i32) ) (block $b0 (rethrow $l022) ) ) (catch_all (block $b1 (rethrow $l022) ) ) ) ) ) (try $l024 (do (call $foo) ) (catch_all (try $try25 (do (rethrow $l024) ) (catch_all (nop) ) ) ) ) (try $l026 (do (call $foo) ) (catch_all (try $try27 (do (rethrow $l026) ) (catch_all (nop) ) ) ) ) ) (func $pop-test (try $try (do (nop) ) (catch $e-i32 (throw $e-i32 (if (result i32) (pop i32) (i32.const 0) (i32.const 3) ) ) ) ) (try $try28 (do (nop) ) (catch $e-anyref (drop (pop funcref) ) ) ) ) (func $catchless-try-with-inner-delegate (try $label$0 (do (try $try (do (throw $e-i32 (i32.const 0) ) ) (delegate $label$0) ) ) ) ) ) binaryen-version_108/test/exception-handling.wast.fromBinary000066400000000000000000000124321423707623100245150ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i64_=>_none (func (param i64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $anyref_=>_none (func (param anyref))) (tag $tag$0 (param i32)) (tag $tag$1 (param i64)) (tag $tag$2 (param i32 i64)) (tag $tag$3 (param anyref)) (tag $tag$4 (param)) (func $foo (nop) ) (func $bar (nop) ) (func $eh-test (local $x i32) (local $1 i64) (local $2 (i32 i64)) (local $3 i32) (local $4 i32) (try $label$3 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) ) (try $label$6 (do (throw $tag$2 (i32.const 0) (i64.const 0) ) ) (catch $tag$2 (local.set $2 (pop i32 i64) ) (local.set $x (block (result i32) (local.set $3 (tuple.extract 0 (local.get $2) ) ) (local.set $1 (tuple.extract 1 (local.get $2) ) ) (local.get $3) ) ) (drop (block (result i32) (local.set $4 (local.get $x) ) (drop (local.get $1) ) (local.get $4) ) ) ) ) (block $label$7 (try $label$10 (do (br $label$7) ) (catch $tag$0 (drop (pop i32) ) (br $label$7) ) ) ) (try $label$13 (do (nop) ) (catch $tag$0 (drop (pop i32) ) ) ) (try $label$16 (do (call $foo) (call $bar) ) (catch $tag$0 (drop (pop i32) ) (call $foo) (call $bar) ) ) (try $label$19 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch $tag$1 (drop (pop i64) ) ) ) (try $label$22 (do (throw $tag$0 (i32.const 0) ) ) (catch_all (nop) ) ) (try $label$25 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch $tag$1 (drop (pop i64) ) ) (catch_all (call $foo) (call $bar) ) ) (try $label$34 (do (try $label$29 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch_all (nop) ) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch_all (try $label$33 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch_all (nop) ) ) ) ) (try $label$37 (do (throw $tag$0 (i32.const 0) ) ) ) ) (func $delegate-test (try $label$9 (do (block $label$1 (try $label$4 (do (call $foo) ) (delegate $label$9) ) (try $label$7 (do (call $foo) ) (delegate $label$9) ) ) ) (catch_all (nop) ) ) (block $label$10 (try $label$19 (do (block $label$11 (try $label$14 (do (br_if $label$10 (i32.const 1) ) ) (delegate $label$19) ) (try $label$17 (do (br_if $label$10 (i32.const 1) ) ) (delegate $label$19) ) ) ) (catch_all (nop) ) ) ) (try $label$25 (do (block $label$20 (try $label$23 (do (call $foo) ) (delegate $label$25) ) ) ) (delegate 0) ) (try $label$28 (do (nop) ) (catch $tag$4 (nop) ) ) ) (func $rethrow-test (try $label$3 (do (call $foo) ) (catch $tag$0 (drop (pop i32) ) (rethrow $label$3) ) (catch_all (rethrow $label$3) ) ) (block $label$4 (try $label$7 (do (call $foo) ) (catch $tag$0 (drop (pop i32) ) (rethrow $label$7) ) (catch_all (br $label$4) ) ) ) (try $label$13 (do (call $foo) ) (catch_all (try $label$12 (do (call $foo) ) (catch $tag$0 (drop (pop i32) ) (rethrow $label$13) ) (catch_all (rethrow $label$13) ) ) ) ) (try $label$20 (do (call $foo) ) (catch_all (try $label$19 (do (call $foo) ) (catch $tag$0 (drop (pop i32) ) (block $label$18 (rethrow $label$20) ) ) (catch_all (rethrow $label$20) ) ) ) ) (try $label$26 (do (call $foo) ) (catch_all (try $label$25 (do (rethrow $label$26) ) (catch_all (nop) ) ) ) ) (try $label$32 (do (call $foo) ) (catch_all (try $label$31 (do (rethrow $label$32) ) (catch_all (nop) ) ) ) ) ) (func $pop-test (try $label$5 (do (nop) ) (catch $tag$0 (throw $tag$0 (if (result i32) (pop i32) (i32.const 0) (i32.const 3) ) ) ) ) (try $label$8 (do (nop) ) (catch $tag$3 (drop (pop anyref) ) ) ) ) (func $catchless-try-with-inner-delegate (try $label$6 (do (block $label$1 (try $label$4 (do (throw $tag$0 (i32.const 0) ) ) (delegate $label$6) ) ) ) ) ) ) binaryen-version_108/test/exception-handling.wast.fromBinary.noDebugInfo000066400000000000000000000122601423707623100267120ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i64_=>_none (func (param i64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $anyref_=>_none (func (param anyref))) (tag $tag$0 (param i32)) (tag $tag$1 (param i64)) (tag $tag$2 (param i32 i64)) (tag $tag$3 (param anyref)) (tag $tag$4 (param)) (func $0 (nop) ) (func $1 (nop) ) (func $2 (local $0 i32) (local $1 i64) (local $2 (i32 i64)) (local $3 i32) (local $4 i32) (try $label$3 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) ) (try $label$6 (do (throw $tag$2 (i32.const 0) (i64.const 0) ) ) (catch $tag$2 (local.set $2 (pop i32 i64) ) (local.set $0 (block (result i32) (local.set $3 (tuple.extract 0 (local.get $2) ) ) (local.set $1 (tuple.extract 1 (local.get $2) ) ) (local.get $3) ) ) (drop (block (result i32) (local.set $4 (local.get $0) ) (drop (local.get $1) ) (local.get $4) ) ) ) ) (block $label$7 (try $label$10 (do (br $label$7) ) (catch $tag$0 (drop (pop i32) ) (br $label$7) ) ) ) (try $label$13 (do (nop) ) (catch $tag$0 (drop (pop i32) ) ) ) (try $label$16 (do (call $0) (call $1) ) (catch $tag$0 (drop (pop i32) ) (call $0) (call $1) ) ) (try $label$19 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch $tag$1 (drop (pop i64) ) ) ) (try $label$22 (do (throw $tag$0 (i32.const 0) ) ) (catch_all (nop) ) ) (try $label$25 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch $tag$1 (drop (pop i64) ) ) (catch_all (call $0) (call $1) ) ) (try $label$34 (do (try $label$29 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch_all (nop) ) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch_all (try $label$33 (do (throw $tag$0 (i32.const 0) ) ) (catch $tag$0 (drop (pop i32) ) ) (catch_all (nop) ) ) ) ) (try $label$37 (do (throw $tag$0 (i32.const 0) ) ) ) ) (func $3 (try $label$9 (do (block $label$1 (try $label$4 (do (call $0) ) (delegate $label$9) ) (try $label$7 (do (call $0) ) (delegate $label$9) ) ) ) (catch_all (nop) ) ) (block $label$10 (try $label$19 (do (block $label$11 (try $label$14 (do (br_if $label$10 (i32.const 1) ) ) (delegate $label$19) ) (try $label$17 (do (br_if $label$10 (i32.const 1) ) ) (delegate $label$19) ) ) ) (catch_all (nop) ) ) ) (try $label$25 (do (block $label$20 (try $label$23 (do (call $0) ) (delegate $label$25) ) ) ) (delegate 0) ) (try $label$28 (do (nop) ) (catch $tag$4 (nop) ) ) ) (func $4 (try $label$3 (do (call $0) ) (catch $tag$0 (drop (pop i32) ) (rethrow $label$3) ) (catch_all (rethrow $label$3) ) ) (block $label$4 (try $label$7 (do (call $0) ) (catch $tag$0 (drop (pop i32) ) (rethrow $label$7) ) (catch_all (br $label$4) ) ) ) (try $label$13 (do (call $0) ) (catch_all (try $label$12 (do (call $0) ) (catch $tag$0 (drop (pop i32) ) (rethrow $label$13) ) (catch_all (rethrow $label$13) ) ) ) ) (try $label$20 (do (call $0) ) (catch_all (try $label$19 (do (call $0) ) (catch $tag$0 (drop (pop i32) ) (block $label$18 (rethrow $label$20) ) ) (catch_all (rethrow $label$20) ) ) ) ) (try $label$26 (do (call $0) ) (catch_all (try $label$25 (do (rethrow $label$26) ) (catch_all (nop) ) ) ) ) (try $label$32 (do (call $0) ) (catch_all (try $label$31 (do (rethrow $label$32) ) (catch_all (nop) ) ) ) ) ) (func $5 (try $label$5 (do (nop) ) (catch $tag$0 (throw $tag$0 (if (result i32) (pop i32) (i32.const 0) (i32.const 3) ) ) ) ) (try $label$8 (do (nop) ) (catch $tag$3 (drop (pop anyref) ) ) ) ) (func $6 (try $label$6 (do (block $label$1 (try $label$4 (do (throw $tag$0 (i32.const 0) ) ) (delegate $label$6) ) ) ) ) ) ) binaryen-version_108/test/export-import.wast000066400000000000000000000002611423707623100214540ustar00rootroot00000000000000(module (type $v (func)) (import "env" "test1" (func $test1)) (import "env" "test2" (global $test2 i32)) (export "test1" (func $test1)) (export "test2" (global $test2)) ) binaryen-version_108/test/export-import.wast.from-wast000066400000000000000000000002601423707623100233710ustar00rootroot00000000000000(module (type $v (func)) (import "env" "test2" (global $test2 i32)) (import "env" "test1" (func $test1)) (export "test1" (func $test1)) (export "test2" (global $test2)) ) binaryen-version_108/test/export-import.wast.fromBinary000066400000000000000000000002611423707623100235630ustar00rootroot00000000000000(module (type $v (func)) (import "env" "test2" (global $test2 i32)) (import "env" "test1" (func $test1)) (export "test1" (func $test1)) (export "test2" (global $test2)) ) binaryen-version_108/test/export-import.wast.fromBinary.noDebugInfo000066400000000000000000000003141423707623100257600ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "test2" (global $gimport$0 i32)) (import "env" "test1" (func $fimport$0)) (export "test1" (func $fimport$0)) (export "test2" (global $gimport$0)) ) binaryen-version_108/test/extended-names.wast000066400000000000000000000001701423707623100215230ustar00rootroot00000000000000(module $foo (table $t1 1 funcref) (memory $m1 1 1) (data $mydata (i32.const 0) "a") (data $passive_data "b") ) binaryen-version_108/test/extended-names.wast.from-wast000066400000000000000000000001641423707623100234440ustar00rootroot00000000000000(module $foo (memory $m1 1 1) (data $mydata (i32.const 0) "a") (data $passive_data "b") (table $t1 1 funcref) ) binaryen-version_108/test/extended-names.wast.fromBinary000066400000000000000000000001651423707623100236360ustar00rootroot00000000000000(module $foo (memory $m1 1 1) (data $mydata (i32.const 0) "a") (data $passive_data "b") (table $t1 1 funcref) ) binaryen-version_108/test/extended-names.wast.fromBinary.noDebugInfo000066400000000000000000000001301423707623100260240ustar00rootroot00000000000000(module (memory $0 1 1) (data (i32.const 0) "a") (data "b") (table $0 1 funcref) ) binaryen-version_108/test/externref.wast.from-wast000066400000000000000000000007431423707623100225500ustar00rootroot00000000000000(module (type $externref_=>_externref (func (param externref) (result externref))) (import "env" "test2" (global $test2 externref)) (import "env" "test1" (func $test1 (param externref) (result externref))) (memory $0 1 1) (export "test1" (func $test1)) (export "test2" (global $test2)) (func $externref_test (; 1 ;) (param $0 externref) (result externref) (local $1 externref) (local.set $1 (call $test1 (local.get $0) ) ) (return (local.get $1) ) ) ) binaryen-version_108/test/externref.wast.fromBinary000066400000000000000000000007541423707623100227430ustar00rootroot00000000000000(module (type $externref_=>_externref (func (param externref) (result externref))) (import "env" "test2" (global $gimport$1 externref)) (import "env" "test1" (func $test1 (param externref) (result externref))) (memory $0 1 1) (export "test1" (func $test1)) (export "test2" (global $gimport$1)) (func $externref_test (; 1 ;) (param $0 externref) (result externref) (local $1 externref) (local.set $1 (call $test1 (local.get $0) ) ) (return (local.get $1) ) ) ) binaryen-version_108/test/externref.wast.fromBinary.noDebugInfo000066400000000000000000000007531423707623100251400ustar00rootroot00000000000000(module (type $externref_=>_externref (func (param externref) (result externref))) (import "env" "test2" (global $gimport$1 externref)) (import "env" "test1" (func $fimport$0 (param externref) (result externref))) (memory $0 1 1) (export "test1" (func $fimport$0)) (export "test2" (global $gimport$1)) (func $0 (; 1 ;) (param $0 externref) (result externref) (local $1 externref) (local.set $1 (call $fimport$0 (local.get $0) ) ) (return (local.get $1) ) ) ) binaryen-version_108/test/fannkuch.args000066400000000000000000000000061423707623100203730ustar00rootroot00000000000000["5"] binaryen-version_108/test/fannkuch.cpp000066400000000000000000000056531423707623100202360ustar00rootroot00000000000000/* * The Computer Language Benchmarks Game * http://shootout.alioth.debian.org/ * * Contributed by Eckehard Berns * Based on code by Heiner Marxen * and the ATS version by Hongwei Xi * * Modified for emscripten by azakai */ #include #include struct worker_args { int i, n; struct worker_args* next; }; int fannkuch_worker(void* _arg) { struct worker_args* args = (worker_args*)_arg; int *perm1, *count, *perm; int maxflips, flips, i, n, r, j, k, tmp; maxflips = 0; n = args->n; perm1 = (int*)malloc(n * sizeof(int)); perm = (int*)malloc(n * sizeof(int)); count = (int*)malloc(n * sizeof(int)); for (i = 0; i < n; i++) perm1[i] = i; perm1[args->i] = n - 1; perm1[n - 1] = args->i; r = n; for (;;) { for (; r > 1; r--) count[r - 1] = r; if (perm1[0] != 0 && perm1[n - 1] != n - 1) { for (i = 0; i < n; i++) perm[i] = perm1[i]; flips = 0; k = perm[0]; do { for (i = 1, j = k - 1; i < j; i++, j--) { tmp = perm[i]; perm[i] = perm[j]; perm[j] = tmp; } flips++; tmp = perm[k]; perm[k] = k; k = tmp; } while (k); if (maxflips < flips) maxflips = flips; } for (;;) { if (r >= n - 1) { free(perm1); free(perm); free(count); return maxflips; } { int p0 = perm1[0]; for (i = 0; i < r; i++) perm1[i] = perm1[i + 1]; perm1[i] = p0; } if (--count[r] > 0) break; r++; } } } static int fannkuch(int n) { struct worker_args *args, *targs; int showmax = 30; int *perm1, *count, i, r, maxflips, flips; args = NULL; for (i = 0; i < n - 1; i++) { targs = (worker_args*)malloc(sizeof(struct worker_args)); targs->i = i; targs->n = n; targs->next = args; args = targs; } perm1 = (int*)malloc(n * sizeof(int)); count = (int*)malloc(n * sizeof(int)); for (i = 0; i < n; i++) perm1[i] = i; r = n; for (;;) { if (showmax) { for (i = 0; i < n; i++) printf("%d", perm1[i] + 1); printf("\n"); showmax--; } else goto cleanup; for (; r > 1; r--) count[r - 1] = r; for (;;) { if (r == n) goto cleanup; { int p0 = perm1[0]; for (i = 0; i < r; i++) perm1[i] = perm1[i + 1]; perm1[i] = p0; } if (--count[r] > 0) break; r++; } } cleanup: free(perm1); free(count); maxflips = 0; while (args != NULL) { flips = (int)fannkuch_worker(args); if (maxflips < flips) maxflips = flips; targs = args; args = args->next; free(targs); } return maxflips; } int main(int argc, char** argv) { int n = argc > 1 ? atoi(argv[1]) : 0; if (n < 1) { printf("Wrong argument.\n"); return 1; } printf("Pfannkuchen(%d) = %d.\n", n, fannkuch(n)); return 0; } binaryen-version_108/test/fannkuch.txt000066400000000000000000000003101423707623100202540ustar00rootroot0000000000000012345 21345 23145 32145 31245 13245 23415 32415 34215 43215 42315 24315 34125 43125 41325 14325 13425 31425 41235 14235 12435 21435 24135 42135 23451 32451 34251 43251 42351 24351 Pfannkuchen(5) = 7. binaryen-version_108/test/fasta.args000066400000000000000000000000071423707623100176750ustar00rootroot00000000000000["10"] binaryen-version_108/test/fasta.cpp000066400000000000000000000104211423707623100175240ustar00rootroot00000000000000/* The Computer Language Benchmarks Game http://shootout.alioth.debian.org/ contributed by Andrew Moon */ #include #include #include // limit output, so we do not benchmark speed of printing void puts_limited(char* x) { static int left = 550; int len = strlen(x); if (len <= left) { puts(x); left -= len; return; } if (left > 0) { x[left] = '\0'; puts(x); x[left] = 'z'; left = 0; } } struct Random { enum { IM = 139968, IA = 3877, IC = 29573 }; Random() : last(42) {} float get(float max = 1.0f) { last = (last * IA + IC) % IM; return max * last / IM; } protected: unsigned int last; } rng; struct IUB { int c; double p; unsigned int pi; }; struct Cumulative { enum { slots = 512, }; Cumulative(IUB* start) { double p = 0; for (IUB* iter = start; iter->c; ++iter) { p += iter->p; iter->p = p < 1.0 ? p : 1.0; iter->pi = (unsigned int)(iter->p * slots); } for (unsigned int i = 0; i <= slots; i++) { while (i > start->pi && start->pi != 0) { ++start; } table[i] = start; } } const char operator[](float pct) const { IUB* iter = table[(unsigned int)(pct * slots)]; while (iter->p < pct) ++iter; return iter->c; } protected: IUB* table[slots + 1]; }; static const size_t lineLength = 60; struct LineBuffer { LineBuffer() : lastN(0) {} LineBuffer& genrand(Cumulative& table, size_t N) { // assert(N <= lineLength); for (size_t i = 0; i < N; i++) buffer[i] = table[rng.get()]; buffer[N] = '\n'; buffer[N + 1] = '\0'; lastN = N + 1; return *this; } void writeline() { puts_limited(buffer); } protected: char buffer[lineLength + 2]; size_t lastN; }; struct RotatingString { RotatingString(const char* in) : pos(0) { size = strlen(in); buffer = new char[size + lineLength]; memcpy(buffer, in, size); memcpy(buffer + size, in, lineLength); } ~RotatingString() { delete[] buffer; } void write(size_t bytes) { char* temp = new char[bytes + 2]; memcpy(temp, buffer + pos, bytes); temp[bytes] = '\n'; temp[bytes] = '\0'; puts_limited(temp); delete temp; pos += bytes; if (pos > size) pos -= size; } protected: char* buffer; size_t size, pos; }; template void makeFasta(const char* id, const char* desc, size_t N, Output& output) { while (N) { const size_t bytes = N < lineLength ? N : lineLength; output.writeline(bytes); N -= bytes; } } struct Repeater { Repeater(const char* alu) : rot(alu) {} void writeline(size_t bytes) { rot.write(bytes); } void run(const char* id, const char* desc, size_t N) { makeFasta(id, desc, N, *this); } protected: RotatingString rot; }; struct Randomized { Randomized(IUB* start) : table(start) {} void writeline(size_t bytes) { line.genrand(table, bytes).writeline(); } void run(const char* id, const char* desc, size_t N) { makeFasta(id, desc, N, *this); } protected: Cumulative table; LineBuffer line; }; IUB iub[] = { {'a', 0.27, 0}, {'c', 0.12, 0}, {'g', 0.12, 0}, {'t', 0.27, 0}, {'B', 0.02, 0}, {'D', 0.02, 0}, {'H', 0.02, 0}, {'K', 0.02, 0}, {'M', 0.02, 0}, {'N', 0.02, 0}, {'R', 0.02, 0}, {'S', 0.02, 0}, {'V', 0.02, 0}, {'W', 0.02, 0}, {'Y', 0.02, 0}, {0, 0, 0}, }; IUB homosapiens[] = { {'a', 0.3029549426680, 0}, {'c', 0.1979883004921, 0}, {'g', 0.1975473066391, 0}, {'t', 0.3015094502008, 0}, {0, 0, 0}, }; static const char alu[] = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG" "GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA" "GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA" "AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT" "CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC" "CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG" "CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"; int main(int argc, const char* argv[]) { const size_t n = (argc > 1) ? atoi(argv[1]) : 512; Repeater(alu).run("ONE", "Homo sapiens alu", n * 2); Randomized(iub).run("TWO", "IUB ambiguity codes", n * 3); Randomized(homosapiens).run("THREE", "Homo sapiens frequency", n * 5); return 0; } binaryen-version_108/test/fasta.txt000066400000000000000000000001511423707623100175600ustar00rootroot00000000000000GGCCGGGCGCGGTGGCTCAC cttBtatcatatgctaKggNcataaaSatg taaatcttgtgcttcgttagaagtctcgactacgtgtagcctagtgtttg binaryen-version_108/test/fib-dbg.wasm000066400000000000000000000016211423707623100201070ustar00rootroot00000000000000asm–€€€`````Ò€€ envDYNAMICTOP_PTRenv tempDoublePtrenvABORTenvSTACKTOPenv STACK_MAXenvgbenvfbglobalNaN|globalInfinity|envmemory€€envtablepenv memoryBaseenv tableBaseˆ€€€Ž€€# # # # # # # A A A A |# |# A A A A |D A A A |D A |D ߀€€setThrew runPostSetsestablishStackSpace stackSave stackRestore_fib stackAlloc €€€ Þ€€¡€€€@#!# j$#AjApq$  …€€€# †€€€ $ €€€@ $ $ ’€€€#AF@ $ $ ꀀ€ @#! AJ! @A!A!A!A!  @@  j! Aj! F! @ !  ! ! ! !   …€€€  €nameØ€€€ stackAlloc stackSave stackRestoreestablishStackSpacesetThrew_fib runPostSets´€€€sourceMappingURL"http://localhost:8000/fib.wasm.mapbinaryen-version_108/test/fib-dbg.wasm.fromBinary000066400000000000000000000116101423707623100222150ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "env" "memory" (memory $mimport$0 256 256)) (import "env" "table" (table $timport$0 0 0 funcref)) (import "env" "DYNAMICTOP_PTR" (global $gimport$0 i32)) (import "env" "tempDoublePtr" (global $gimport$1 i32)) (import "env" "ABORT" (global $gimport$2 i32)) (import "env" "STACKTOP" (global $gimport$3 i32)) (import "env" "STACK_MAX" (global $gimport$4 i32)) (import "env" "gb" (global $gimport$5 i32)) (import "env" "fb" (global $gimport$6 i32)) (import "global" "NaN" (global $gimport$7 f64)) (import "global" "Infinity" (global $gimport$8 f64)) (import "env" "memoryBase" (global $gimport$9 i32)) (import "env" "tableBase" (global $gimport$10 i32)) (global $global$0 (mut i32) (global.get $gimport$0)) (global $global$1 (mut i32) (global.get $gimport$1)) (global $global$2 (mut i32) (global.get $gimport$2)) (global $global$3 (mut i32) (global.get $gimport$3)) (global $global$4 (mut i32) (global.get $gimport$4)) (global $global$5 (mut i32) (global.get $gimport$5)) (global $global$6 (mut i32) (global.get $gimport$6)) (global $global$7 (mut i32) (i32.const 0)) (global $global$8 (mut i32) (i32.const 0)) (global $global$9 (mut i32) (i32.const 0)) (global $global$10 (mut i32) (i32.const 0)) (global $global$11 (mut f64) (global.get $gimport$7)) (global $global$12 (mut f64) (global.get $gimport$8)) (global $global$13 (mut i32) (i32.const 0)) (global $global$14 (mut i32) (i32.const 0)) (global $global$15 (mut i32) (i32.const 0)) (global $global$16 (mut i32) (i32.const 0)) (global $global$17 (mut f64) (f64.const 0)) (global $global$18 (mut i32) (i32.const 0)) (global $global$19 (mut i32) (i32.const 0)) (global $global$20 (mut i32) (i32.const 0)) (global $global$21 (mut f64) (f64.const 0)) (global $global$22 (mut i32) (i32.const 0)) (global $global$23 (mut f64) (f64.const 0)) (export "setThrew" (func $setThrew)) (export "runPostSets" (func $runPostSets)) (export "establishStackSpace" (func $establishStackSpace)) (export "stackSave" (func $stackSave)) (export "stackRestore" (func $stackRestore)) (export "_fib" (func $_fib)) (export "stackAlloc" (func $stackAlloc)) (func $stackAlloc (param $0 i32) (result i32) (local $1 i32) (block $label$1 (local.set $1 (global.get $global$3) ) (global.set $global$3 (i32.add (global.get $global$3) (local.get $0) ) ) (global.set $global$3 (i32.and (i32.add (global.get $global$3) (i32.const 15) ) (i32.const -16) ) ) (return (local.get $1) ) ) ) (func $stackSave (result i32) (return (global.get $global$3) ) ) (func $stackRestore (param $0 i32) (global.set $global$3 (local.get $0) ) ) (func $establishStackSpace (param $0 i32) (param $1 i32) (block $label$1 (global.set $global$3 (local.get $0) ) (global.set $global$4 (local.get $1) ) ) ) (func $setThrew (param $0 i32) (param $1 i32) (if (i32.eq (global.get $global$7) (i32.const 0) ) (block (global.set $global$7 (local.get $0) ) (global.set $global$8 (local.get $1) ) ) ) ) (func $_fib (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (block $label$1 (local.set $11 (global.get $global$3) ) ;;@ fib.c:3:0 (local.set $6 (i32.gt_s (local.get $0) (i32.const 0) ) ) (if (local.get $6) (block (local.set $1 (i32.const 0) ) (local.set $5 (i32.const 1) ) (local.set $8 (i32.const 0) ) ) (block (local.set $4 (i32.const 1) ) ;;@ fib.c:8:0 (return (local.get $4) ) ) ) (loop $label$4 (block $label$5 ;;@ fib.c:4:0 (local.set $3 (i32.add (local.get $5) (local.get $1) ) ) ;;@ fib.c:3:0 (local.set $9 (i32.add (local.get $8) (i32.const 1) ) ) (local.set $7 (i32.eq (local.get $9) (local.get $0) ) ) (if (local.get $7) (block (local.set $4 (local.get $3) ) (br $label$5) ) (block (local.set $2 (local.get $5) ) (local.set $5 (local.get $3) ) (local.set $8 (local.get $9) ) (local.set $1 (local.get $2) ) ) ) (br $label$4) ) ) ;;@ fib.c:8:0 (return (local.get $4) ) ) ) (func $runPostSets (local $0 i32) (nop) ) ;; custom section "sourceMappingURL", size 35, contents: "\"http://localhost:8000/fib.wasm.map" ) binaryen-version_108/test/fib-dbg.wasm.map000066400000000000000000000001341423707623100206610ustar00rootroot00000000000000{"version":3,"sources":["fib.c"],"names":[],"mappings":"moBAEA,4BAKA,QAJA,OADA,OAAA,uCAKA"} binaryen-version_108/test/float_ops.cpp000066400000000000000000000035771423707623100204320ustar00rootroot00000000000000#include #include #include extern "C" { // unary double EMSCRIPTEN_KEEPALIVE dneg(double x) { return -x; } double EMSCRIPTEN_KEEPALIVE dfloor(double x) { return floor(x); } // binary double EMSCRIPTEN_KEEPALIVE dadd(double x, double y) { return x + y; } double EMSCRIPTEN_KEEPALIVE dsub(double x, double y) { return x - y; } double EMSCRIPTEN_KEEPALIVE dmul(double x, double y) { return x * y; } double EMSCRIPTEN_KEEPALIVE ddiv(double x, double y) { return x / y; } double EMSCRIPTEN_KEEPALIVE dcopysign(double x, double y) { return std::copysign(x, y); } double EMSCRIPTEN_KEEPALIVE dmin(double x, double y) { return std::min(x, y); } double EMSCRIPTEN_KEEPALIVE dmax(double x, double y) { return std::max(x, y); } // comparisons int EMSCRIPTEN_KEEPALIVE deq(double x, double y) { return x == y; } int EMSCRIPTEN_KEEPALIVE dne(double x, double y) { return x != y; } int EMSCRIPTEN_KEEPALIVE dlt(double x, double y) { return x < y; } int EMSCRIPTEN_KEEPALIVE dle(double x, double y) { return x <= y; } int EMSCRIPTEN_KEEPALIVE dgt(double x, double y) { return x > y; } int EMSCRIPTEN_KEEPALIVE dge(double x, double y) { return x >= y; } double EMSCRIPTEN_KEEPALIVE int_to_double(int x) { double d = x; return d + 1.23; } double EMSCRIPTEN_KEEPALIVE uint_to_double(unsigned x) { double d = x; return d + 1.23; } int EMSCRIPTEN_KEEPALIVE double_to_int(double d) { d += 1.23; int x = d; return x; } int EMSCRIPTEN_KEEPALIVE double_to_uint(double d) { d += 1.23; unsigned x = d; return x; } float EMSCRIPTEN_KEEPALIVE int_to_float(int x) { float d = x; return d + 1.23; } float EMSCRIPTEN_KEEPALIVE uint_to_float(unsigned x) { float d = x; return d + 1.23; } int EMSCRIPTEN_KEEPALIVE float_to_int(float d) { d += 1.23; int x = d; return x; } int EMSCRIPTEN_KEEPALIVE float_to_uint(float d) { d += 1.23; unsigned x = d; return x; } } binaryen-version_108/test/float_ops.emcc000066400000000000000000000000271423707623100205420ustar00rootroot00000000000000["-s", "ASSERTIONS=0"] binaryen-version_108/test/float_ops.post.js000066400000000000000000000033661423707623100212440ustar00rootroot00000000000000 // unary function testUnary(name) { Module.print(name); function doTest(x) { Module.print(' ' + [x] + ' ==> ' + Module['_' + name](x)); } doTest(0); doTest(1); doTest(-1); doTest(0.5); doTest(-0.5); doTest(1.4); doTest(-1.4); doTest(1.6); doTest(-1.6); doTest(5.1); doTest(5.3); doTest(5.7); doTest(5.9); doTest(-1 | 0); doTest((-1 | 0) + 1); doTest((-1 | 0) - 1); doTest((-1 >>> 0) + 1); doTest((-1 >>> 0) - 1); doTest((-1 | 0) + 2); doTest((-1 | 0) - 2); doTest((-1 >>> 0) + 2); doTest((-1 >>> 0) - 2); } testUnary('dfloor'); // binary function testBinary(name) { Module.print(name); function doTest(x, y) { Module.print(' ' + [x, y] + ' ==> ' + Module['_' + name](x, y)); } doTest(0, 0); doTest(0, 1); doTest(1, 0); doTest(1, 1); doTest(5, 6); doTest(6, 5); doTest(101, -12); doTest(-12, 101); doTest(-1, 5); doTest(5, -1); doTest(-1, -1); doTest(0.12, 0.12); doTest(0.812, 1); doTest(1.821, 0); doTest(1, 1.212); doTest(5.543, 6); doTest(6, 5.121); doTest(101.001, -12); doTest(-12.001, 101); doTest(-1, 5.123); doTest(5, -1.123); doTest(-1, -1.123); } testBinary('dadd'); testBinary('dsub'); testBinary('dmul'); testBinary('ddiv'); //testBinary('dcopysign'); // TODO this uses tempDoublePtr, a global, which is not yet functional testBinary('dmin'); testBinary('dmax'); // comparisons testBinary('deq'); testBinary('dne'); testBinary('dlt'); testBinary('dle'); testBinary('dgt'); testBinary('dge'); // conversions testUnary('int_to_double'); testUnary('uint_to_double'); testUnary('double_to_int'); testUnary('double_to_uint'); testUnary('int_to_float'); testUnary('uint_to_float'); testUnary('float_to_int'); testUnary('float_to_uint'); Module.print('done.'); binaryen-version_108/test/float_ops.txt000066400000000000000000000201421423707623100204520ustar00rootroot00000000000000dfloor 0 ==> 0 1 ==> 1 -1 ==> -1 0.5 ==> 0 -0.5 ==> -1 1.4 ==> 1 -1.4 ==> -2 1.6 ==> 1 -1.6 ==> -2 5.1 ==> 5 5.3 ==> 5 5.7 ==> 5 5.9 ==> 5 -1 ==> -1 0 ==> 0 -2 ==> -2 4294967296 ==> 4294967296 4294967294 ==> 4294967294 1 ==> 1 -3 ==> -3 4294967297 ==> 4294967297 4294967293 ==> 4294967293 dadd 0,0 ==> 0 0,1 ==> 1 1,0 ==> 1 1,1 ==> 2 5,6 ==> 11 6,5 ==> 11 101,-12 ==> 89 -12,101 ==> 89 -1,5 ==> 4 5,-1 ==> 4 -1,-1 ==> -2 0.12,0.12 ==> 0.24 0.812,1 ==> 1.812 1.821,0 ==> 1.821 1,1.212 ==> 2.2119999999999997 5.543,6 ==> 11.543 6,5.121 ==> 11.121 101.001,-12 ==> 89.001 -12.001,101 ==> 88.999 -1,5.123 ==> 4.123 5,-1.123 ==> 3.877 -1,-1.123 ==> -2.123 dsub 0,0 ==> 0 0,1 ==> -1 1,0 ==> 1 1,1 ==> 0 5,6 ==> -1 6,5 ==> 1 101,-12 ==> 113 -12,101 ==> -113 -1,5 ==> -6 5,-1 ==> 6 -1,-1 ==> 0 0.12,0.12 ==> 0 0.812,1 ==> -0.18799999999999994 1.821,0 ==> 1.821 1,1.212 ==> -0.21199999999999997 5.543,6 ==> -0.45699999999999985 6,5.121 ==> 0.8789999999999996 101.001,-12 ==> 113.001 -12.001,101 ==> -113.001 -1,5.123 ==> -6.123 5,-1.123 ==> 6.123 -1,-1.123 ==> 0.123 dmul 0,0 ==> 0 0,1 ==> 0 1,0 ==> 0 1,1 ==> 1 5,6 ==> 30 6,5 ==> 30 101,-12 ==> -1212 -12,101 ==> -1212 -1,5 ==> -5 5,-1 ==> -5 -1,-1 ==> 1 0.12,0.12 ==> 0.0144 0.812,1 ==> 0.812 1.821,0 ==> 0 1,1.212 ==> 1.212 5.543,6 ==> 33.258 6,5.121 ==> 30.726000000000003 101.001,-12 ==> -1212.0120000000002 -12.001,101 ==> -1212.1009999999999 -1,5.123 ==> -5.123 5,-1.123 ==> -5.615 -1,-1.123 ==> 1.123 ddiv 0,0 ==> NaN 0,1 ==> 0 1,0 ==> Infinity 1,1 ==> 1 5,6 ==> 0.8333333333333334 6,5 ==> 1.2 101,-12 ==> -8.416666666666666 -12,101 ==> -0.1188118811881188 -1,5 ==> -0.2 5,-1 ==> -5 -1,-1 ==> 1 0.12,0.12 ==> 1 0.812,1 ==> 0.812 1.821,0 ==> Infinity 1,1.212 ==> 0.8250825082508251 5.543,6 ==> 0.9238333333333334 6,5.121 ==> 1.1716461628588166 101.001,-12 ==> -8.41675 -12.001,101 ==> -0.11882178217821782 -1,5.123 ==> -0.19519812609798945 5,-1.123 ==> -4.452359750667854 -1,-1.123 ==> 0.8904719501335708 dmin 0,0 ==> 0 0,1 ==> 0 1,0 ==> 0 1,1 ==> 1 5,6 ==> 5 6,5 ==> 5 101,-12 ==> -12 -12,101 ==> -12 -1,5 ==> -1 5,-1 ==> -1 -1,-1 ==> -1 0.12,0.12 ==> 0.12 0.812,1 ==> 0.812 1.821,0 ==> 0 1,1.212 ==> 1 5.543,6 ==> 5.543 6,5.121 ==> 5.121 101.001,-12 ==> -12 -12.001,101 ==> -12.001 -1,5.123 ==> -1 5,-1.123 ==> -1.123 -1,-1.123 ==> -1.123 dmax 0,0 ==> 0 0,1 ==> 1 1,0 ==> 1 1,1 ==> 1 5,6 ==> 6 6,5 ==> 6 101,-12 ==> 101 -12,101 ==> 101 -1,5 ==> 5 5,-1 ==> 5 -1,-1 ==> -1 0.12,0.12 ==> 0.12 0.812,1 ==> 1 1.821,0 ==> 1.821 1,1.212 ==> 1.212 5.543,6 ==> 6 6,5.121 ==> 6 101.001,-12 ==> 101.001 -12.001,101 ==> 101 -1,5.123 ==> 5.123 5,-1.123 ==> 5 -1,-1.123 ==> -1 deq 0,0 ==> 1 0,1 ==> 0 1,0 ==> 0 1,1 ==> 1 5,6 ==> 0 6,5 ==> 0 101,-12 ==> 0 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> 0 -1,-1 ==> 1 0.12,0.12 ==> 1 0.812,1 ==> 0 1.821,0 ==> 0 1,1.212 ==> 0 5.543,6 ==> 0 6,5.121 ==> 0 101.001,-12 ==> 0 -12.001,101 ==> 0 -1,5.123 ==> 0 5,-1.123 ==> 0 -1,-1.123 ==> 0 dne 0,0 ==> 0 0,1 ==> 1 1,0 ==> 1 1,1 ==> 0 5,6 ==> 1 6,5 ==> 1 101,-12 ==> 1 -12,101 ==> 1 -1,5 ==> 1 5,-1 ==> 1 -1,-1 ==> 0 0.12,0.12 ==> 0 0.812,1 ==> 1 1.821,0 ==> 1 1,1.212 ==> 1 5.543,6 ==> 1 6,5.121 ==> 1 101.001,-12 ==> 1 -12.001,101 ==> 1 -1,5.123 ==> 1 5,-1.123 ==> 1 -1,-1.123 ==> 1 dlt 0,0 ==> 0 0,1 ==> 1 1,0 ==> 0 1,1 ==> 0 5,6 ==> 1 6,5 ==> 0 101,-12 ==> 0 -12,101 ==> 1 -1,5 ==> 1 5,-1 ==> 0 -1,-1 ==> 0 0.12,0.12 ==> 0 0.812,1 ==> 1 1.821,0 ==> 0 1,1.212 ==> 1 5.543,6 ==> 1 6,5.121 ==> 0 101.001,-12 ==> 0 -12.001,101 ==> 1 -1,5.123 ==> 1 5,-1.123 ==> 0 -1,-1.123 ==> 0 dle 0,0 ==> 1 0,1 ==> 1 1,0 ==> 0 1,1 ==> 1 5,6 ==> 1 6,5 ==> 0 101,-12 ==> 0 -12,101 ==> 1 -1,5 ==> 1 5,-1 ==> 0 -1,-1 ==> 1 0.12,0.12 ==> 1 0.812,1 ==> 1 1.821,0 ==> 0 1,1.212 ==> 1 5.543,6 ==> 1 6,5.121 ==> 0 101.001,-12 ==> 0 -12.001,101 ==> 1 -1,5.123 ==> 1 5,-1.123 ==> 0 -1,-1.123 ==> 0 dgt 0,0 ==> 0 0,1 ==> 0 1,0 ==> 1 1,1 ==> 0 5,6 ==> 0 6,5 ==> 1 101,-12 ==> 1 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> 1 -1,-1 ==> 0 0.12,0.12 ==> 0 0.812,1 ==> 0 1.821,0 ==> 1 1,1.212 ==> 0 5.543,6 ==> 0 6,5.121 ==> 1 101.001,-12 ==> 1 -12.001,101 ==> 0 -1,5.123 ==> 0 5,-1.123 ==> 1 -1,-1.123 ==> 1 dge 0,0 ==> 1 0,1 ==> 0 1,0 ==> 1 1,1 ==> 1 5,6 ==> 0 6,5 ==> 1 101,-12 ==> 1 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> 1 -1,-1 ==> 1 0.12,0.12 ==> 1 0.812,1 ==> 0 1.821,0 ==> 1 1,1.212 ==> 0 5.543,6 ==> 0 6,5.121 ==> 1 101.001,-12 ==> 1 -12.001,101 ==> 0 -1,5.123 ==> 0 5,-1.123 ==> 1 -1,-1.123 ==> 1 int_to_double 0 ==> 1.23 1 ==> 2.23 -1 ==> 0.22999999999999998 0.5 ==> 1.23 -0.5 ==> 1.23 1.4 ==> 2.23 -1.4 ==> 0.22999999999999998 1.6 ==> 2.23 -1.6 ==> 0.22999999999999998 5.1 ==> 6.23 5.3 ==> 6.23 5.7 ==> 6.23 5.9 ==> 6.23 -1 ==> 0.22999999999999998 0 ==> 1.23 -2 ==> -0.77 4294967296 ==> 1.23 4294967294 ==> -0.77 1 ==> 2.23 -3 ==> -1.77 4294967297 ==> 2.23 4294967293 ==> -1.77 uint_to_double 0 ==> 1.23 1 ==> 2.23 -1 ==> 4294967296.23 0.5 ==> 1.23 -0.5 ==> 1.23 1.4 ==> 2.23 -1.4 ==> 4294967296.23 1.6 ==> 2.23 -1.6 ==> 4294967296.23 5.1 ==> 6.23 5.3 ==> 6.23 5.7 ==> 6.23 5.9 ==> 6.23 -1 ==> 4294967296.23 0 ==> 1.23 -2 ==> 4294967295.23 4294967296 ==> 1.23 4294967294 ==> 4294967295.23 1 ==> 2.23 -3 ==> 4294967294.23 4294967297 ==> 2.23 4294967293 ==> 4294967294.23 double_to_int 0 ==> 1 1 ==> 2 -1 ==> 0 0.5 ==> 1 -0.5 ==> 0 1.4 ==> 2 -1.4 ==> 0 1.6 ==> 2 -1.6 ==> 0 5.1 ==> 6 5.3 ==> 6 5.7 ==> 6 5.9 ==> 7 -1 ==> 0 0 ==> 1 -2 ==> 0 4294967296 ==> 1 4294967294 ==> -1 1 ==> 2 -3 ==> -1 4294967297 ==> 2 4294967293 ==> -2 double_to_uint 0 ==> 1 1 ==> 2 -1 ==> 0 0.5 ==> 1 -0.5 ==> 0 1.4 ==> 2 -1.4 ==> 0 1.6 ==> 2 -1.6 ==> 0 5.1 ==> 6 5.3 ==> 6 5.7 ==> 6 5.9 ==> 7 -1 ==> 0 0 ==> 1 -2 ==> 0 4294967296 ==> 1 4294967294 ==> -1 1 ==> 2 -3 ==> -1 4294967297 ==> 2 4294967293 ==> -2 int_to_float 0 ==> 1.2300000190734863 1 ==> 2.2300000190734863 -1 ==> 0.23000000417232513 0.5 ==> 1.2300000190734863 -0.5 ==> 1.2300000190734863 1.4 ==> 2.2300000190734863 -1.4 ==> 0.23000000417232513 1.6 ==> 2.2300000190734863 -1.6 ==> 0.23000000417232513 5.1 ==> 6.230000019073486 5.3 ==> 6.230000019073486 5.7 ==> 6.230000019073486 5.9 ==> 6.230000019073486 -1 ==> 0.23000000417232513 0 ==> 1.2300000190734863 -2 ==> -0.7699999809265137 4294967296 ==> 1.2300000190734863 4294967294 ==> -0.7699999809265137 1 ==> 2.2300000190734863 -3 ==> -1.7699999809265137 4294967297 ==> 2.2300000190734863 4294967293 ==> -1.7699999809265137 uint_to_float 0 ==> 1.2300000190734863 1 ==> 2.2300000190734863 -1 ==> 4294967296 0.5 ==> 1.2300000190734863 -0.5 ==> 1.2300000190734863 1.4 ==> 2.2300000190734863 -1.4 ==> 4294967296 1.6 ==> 2.2300000190734863 -1.6 ==> 4294967296 5.1 ==> 6.230000019073486 5.3 ==> 6.230000019073486 5.7 ==> 6.230000019073486 5.9 ==> 6.230000019073486 -1 ==> 4294967296 0 ==> 1.2300000190734863 -2 ==> 4294967296 4294967296 ==> 1.2300000190734863 4294967294 ==> 4294967296 1 ==> 2.2300000190734863 -3 ==> 4294967296 4294967297 ==> 2.2300000190734863 4294967293 ==> 4294967296 float_to_int 0 ==> 1 1 ==> 2 -1 ==> 0 0.5 ==> 1 -0.5 ==> 0 1.4 ==> 2 -1.4 ==> 0 1.6 ==> 2 -1.6 ==> 0 5.1 ==> 6 5.3 ==> 6 5.7 ==> 6 5.9 ==> 7 -1 ==> 0 0 ==> 1 -2 ==> 0 4294967296 ==> 0 4294967294 ==> 0 1 ==> 2 -3 ==> -1 4294967297 ==> 0 4294967293 ==> 0 float_to_uint 0 ==> 1 1 ==> 2 -1 ==> 0 0.5 ==> 1 -0.5 ==> 0 1.4 ==> 2 -1.4 ==> 0 1.6 ==> 2 -1.6 ==> 0 5.1 ==> 6 5.3 ==> 6 5.7 ==> 6 5.9 ==> 7 -1 ==> 0 0 ==> 1 -2 ==> 0 4294967296 ==> 0 4294967294 ==> 0 1 ==> 2 -3 ==> -1 4294967297 ==> 0 4294967293 ==> 0 done. binaryen-version_108/test/fn_prolog_epilog.debugInfo.wasm000066400000000000000000000000421423707623100240360ustar00rootroot00000000000000asm`  @@  binaryen-version_108/test/fn_prolog_epilog.debugInfo.wasm.fromBinary000066400000000000000000000003421423707623100261500ustar00rootroot00000000000000(module (type $none_=>_none (func)) ;;@ src.cpp:1:1 (func $0 (nop) ;;@ src.cpp:2:1 (block $label$1 ;;@ src.cpp:2:2 (block $label$2 (br $label$2) ) ) ;;@ src.cpp:3:1 (return) ;;@ src.cpp:3:2 ) ) binaryen-version_108/test/fn_prolog_epilog.debugInfo.wasm.map000066400000000000000000000001251423707623100246140ustar00rootroot00000000000000{"version":3,"sources":["src.cpp"],"names":[],"mappings":"sBAAC,EACA,EAAC,MACD,CAAC"}binaryen-version_108/test/fn_prolog_epilog.debugInfo.wast000066400000000000000000000003201423707623100240440ustar00rootroot00000000000000(module ;;@ src.cpp:1:1 (func (nop) ;;@ src.cpp:2:1 (block $l0 ;;@ src.cpp:2:2 (block $l1 (br $l1) ) ) ;;@ src.cpp:3:1 (return) ;;@ src.cpp:3:2 ) ) binaryen-version_108/test/fn_prolog_epilog.debugInfo.wast.from-wast000066400000000000000000000003221423707623100257640ustar00rootroot00000000000000(module (type $none_=>_none (func)) ;;@ src.cpp:1:1 (func $0 (nop) ;;@ src.cpp:2:1 (block $l0 ;;@ src.cpp:2:2 (block $l1 (br $l1) ) ) ;;@ src.cpp:3:1 (return) ;;@ src.cpp:3:2 ) ) binaryen-version_108/test/fn_prolog_epilog.debugInfo.wast.fromBinary000066400000000000000000000002101423707623100261510ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $0 (nop) (block $label$1 (block $label$2 (br $label$2) ) ) (return) ) ) binaryen-version_108/test/fn_prolog_epilog.debugInfo.wast.fromBinary.noDebugInfo000066400000000000000000000002101423707623100303470ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $0 (nop) (block $label$1 (block $label$2 (br $label$2) ) ) (return) ) ) binaryen-version_108/test/gc.wast000066400000000000000000000065361423707623100172270ustar00rootroot00000000000000;; A preliminary test for prototype GC types and instructions. ;; TODO: Move subtype tests from reference-types.wast here? ;; TODO: The test assumes that `(i31.new (i32.const N))` is a valid constant ;; initializer for i31ref types globals, which isn't yet specified. (module ;; Test global initializer expressions (global $global_anyref (mut anyref) (ref.null any)) (global $global_eqref (mut eqref) (ref.null eq)) (global $global_i31ref (mut i31ref) (i31.new (i32.const 0))) ;; Test subtype relationship in global initializer expressions (global $global_anyref2 (mut anyref) (ref.null eq)) (global $global_anyref3 (mut anyref) (i31.new (i32.const 0))) (global $global_eqref2 (mut eqref) (i31.new (i32.const 0))) (func $test (param $local_i31ref i31ref) (param $local_dataref dataref) (local $local_i32 i32) (local $local_anyref anyref) (local $local_eqref eqref) ;; Test types for local.get/set (local.set $local_anyref (local.get $local_anyref)) (local.set $local_anyref (global.get $global_anyref)) (local.set $local_anyref (ref.null any)) (local.set $local_eqref (local.get $local_eqref)) (local.set $local_eqref (global.get $global_eqref)) (local.set $local_eqref (ref.null eq)) (local.set $local_i31ref (local.get $local_i31ref)) (local.set $local_i31ref (global.get $global_i31ref)) (local.set $local_i31ref (i31.new (i32.const 0))) ;; Test subtype relationship for local.set (local.set $local_anyref (local.get $local_eqref)) (local.set $local_anyref (global.get $global_eqref)) (local.set $local_anyref (ref.null eq)) (local.set $local_anyref (local.get $local_i31ref)) (local.set $local_anyref (global.get $global_i31ref)) (local.set $local_anyref (i31.new (i32.const 0))) (local.set $local_eqref (local.get $local_i31ref)) (local.set $local_eqref (global.get $global_i31ref)) (local.set $local_eqref (i31.new (i32.const 0))) ;; Test types for global.get/set (global.set $global_anyref (local.get $local_anyref)) (global.set $global_anyref (global.get $global_anyref)) (global.set $global_anyref (ref.null any)) (global.set $global_eqref (local.get $local_eqref)) (global.set $global_eqref (global.get $global_eqref)) (global.set $global_eqref (ref.null eq)) (global.set $global_i31ref (local.get $local_i31ref)) (global.set $global_i31ref (global.get $global_i31ref)) (global.set $global_i31ref (i31.new (i32.const 0))) ;; Test subtype relationship for global.set (global.set $global_anyref (local.get $local_eqref)) (global.set $global_anyref (global.get $global_eqref)) (global.set $global_anyref (ref.null eq)) (global.set $global_anyref (local.get $local_i31ref)) (global.set $global_anyref (global.get $global_i31ref)) (global.set $global_anyref (i31.new (i32.const 0))) (global.set $global_eqref (local.get $local_i31ref)) (global.set $global_eqref (global.get $global_i31ref)) (global.set $global_eqref (i31.new (i32.const 0))) ;; Test i31.get_s/u (local.set $local_i32 (i31.get_s (local.get $local_i31ref))) (local.set $local_i32 (i31.get_u (local.get $local_i31ref))) ) (func $test-variants (param $local_i31refnull (ref null i31)) (param $local_i31refnonnull (ref i31)) (param $local_datarefnull (ref null data)) (param $local_datarefnonnull (ref data)) ) ) binaryen-version_108/test/gc.wast.from-wast000066400000000000000000000062141423707623100211360ustar00rootroot00000000000000(module (type $i31ref_dataref_=>_none (func (param i31ref dataref))) (type $ref?|i31|_i31ref_ref?|data|_dataref_=>_none (func (param (ref null i31) i31ref (ref null data) dataref))) (global $global_anyref (mut anyref) (ref.null any)) (global $global_eqref (mut eqref) (ref.null eq)) (global $global_i31ref (mut i31ref) (i31.new (i32.const 0) )) (global $global_anyref2 (mut anyref) (ref.null eq)) (global $global_anyref3 (mut anyref) (i31.new (i32.const 0) )) (global $global_eqref2 (mut eqref) (i31.new (i32.const 0) )) (func $test (param $local_i31ref i31ref) (param $local_dataref dataref) (local $local_i32 i32) (local $local_anyref anyref) (local $local_eqref eqref) (local.set $local_anyref (local.get $local_anyref) ) (local.set $local_anyref (global.get $global_anyref) ) (local.set $local_anyref (ref.null any) ) (local.set $local_eqref (local.get $local_eqref) ) (local.set $local_eqref (global.get $global_eqref) ) (local.set $local_eqref (ref.null eq) ) (local.set $local_i31ref (local.get $local_i31ref) ) (local.set $local_i31ref (global.get $global_i31ref) ) (local.set $local_i31ref (i31.new (i32.const 0) ) ) (local.set $local_anyref (local.get $local_eqref) ) (local.set $local_anyref (global.get $global_eqref) ) (local.set $local_anyref (ref.null eq) ) (local.set $local_anyref (local.get $local_i31ref) ) (local.set $local_anyref (global.get $global_i31ref) ) (local.set $local_anyref (i31.new (i32.const 0) ) ) (local.set $local_eqref (local.get $local_i31ref) ) (local.set $local_eqref (global.get $global_i31ref) ) (local.set $local_eqref (i31.new (i32.const 0) ) ) (global.set $global_anyref (local.get $local_anyref) ) (global.set $global_anyref (global.get $global_anyref) ) (global.set $global_anyref (ref.null any) ) (global.set $global_eqref (local.get $local_eqref) ) (global.set $global_eqref (global.get $global_eqref) ) (global.set $global_eqref (ref.null eq) ) (global.set $global_i31ref (local.get $local_i31ref) ) (global.set $global_i31ref (global.get $global_i31ref) ) (global.set $global_i31ref (i31.new (i32.const 0) ) ) (global.set $global_anyref (local.get $local_eqref) ) (global.set $global_anyref (global.get $global_eqref) ) (global.set $global_anyref (ref.null eq) ) (global.set $global_anyref (local.get $local_i31ref) ) (global.set $global_anyref (global.get $global_i31ref) ) (global.set $global_anyref (i31.new (i32.const 0) ) ) (global.set $global_eqref (local.get $local_i31ref) ) (global.set $global_eqref (global.get $global_i31ref) ) (global.set $global_eqref (i31.new (i32.const 0) ) ) (local.set $local_i32 (i31.get_s (local.get $local_i31ref) ) ) (local.set $local_i32 (i31.get_u (local.get $local_i31ref) ) ) ) (func $test-variants (param $local_i31refnull (ref null i31)) (param $local_i31refnonnull i31ref) (param $local_datarefnull (ref null data)) (param $local_datarefnonnull dataref) (nop) ) ) binaryen-version_108/test/gc.wast.fromBinary000066400000000000000000000062151423707623100213300ustar00rootroot00000000000000(module (type $i31ref_dataref_=>_none (func (param i31ref dataref))) (type $ref?|i31|_i31ref_ref?|data|_dataref_=>_none (func (param (ref null i31) i31ref (ref null data) dataref))) (global $global_anyref (mut anyref) (ref.null any)) (global $global_eqref (mut eqref) (ref.null eq)) (global $global_i31ref (mut i31ref) (i31.new (i32.const 0) )) (global $global_anyref2 (mut anyref) (ref.null eq)) (global $global_anyref3 (mut anyref) (i31.new (i32.const 0) )) (global $global_eqref2 (mut eqref) (i31.new (i32.const 0) )) (func $test (param $local_i31ref i31ref) (param $local_dataref dataref) (local $local_i32 i32) (local $local_anyref anyref) (local $local_eqref eqref) (local.set $local_anyref (local.get $local_anyref) ) (local.set $local_anyref (global.get $global_anyref) ) (local.set $local_anyref (ref.null any) ) (local.set $local_eqref (local.get $local_eqref) ) (local.set $local_eqref (global.get $global_eqref) ) (local.set $local_eqref (ref.null eq) ) (local.set $local_i31ref (local.get $local_i31ref) ) (local.set $local_i31ref (global.get $global_i31ref) ) (local.set $local_i31ref (i31.new (i32.const 0) ) ) (local.set $local_anyref (local.get $local_eqref) ) (local.set $local_anyref (global.get $global_eqref) ) (local.set $local_anyref (ref.null eq) ) (local.set $local_anyref (local.get $local_i31ref) ) (local.set $local_anyref (global.get $global_i31ref) ) (local.set $local_anyref (i31.new (i32.const 0) ) ) (local.set $local_eqref (local.get $local_i31ref) ) (local.set $local_eqref (global.get $global_i31ref) ) (local.set $local_eqref (i31.new (i32.const 0) ) ) (global.set $global_anyref (local.get $local_anyref) ) (global.set $global_anyref (global.get $global_anyref) ) (global.set $global_anyref (ref.null any) ) (global.set $global_eqref (local.get $local_eqref) ) (global.set $global_eqref (global.get $global_eqref) ) (global.set $global_eqref (ref.null eq) ) (global.set $global_i31ref (local.get $local_i31ref) ) (global.set $global_i31ref (global.get $global_i31ref) ) (global.set $global_i31ref (i31.new (i32.const 0) ) ) (global.set $global_anyref (local.get $local_eqref) ) (global.set $global_anyref (global.get $global_eqref) ) (global.set $global_anyref (ref.null eq) ) (global.set $global_anyref (local.get $local_i31ref) ) (global.set $global_anyref (global.get $global_i31ref) ) (global.set $global_anyref (i31.new (i32.const 0) ) ) (global.set $global_eqref (local.get $local_i31ref) ) (global.set $global_eqref (global.get $global_i31ref) ) (global.set $global_eqref (i31.new (i32.const 0) ) ) (local.set $local_i32 (i31.get_s (local.get $local_i31ref) ) ) (local.set $local_i32 (i31.get_u (local.get $local_i31ref) ) ) ) (func $test-variants (param $local_i31refnull (ref null i31)) (param $local_i31refnonnull i31ref) (param $local_datarefnull (ref null data)) (param $local_datarefnonnull dataref) (nop) ) ) binaryen-version_108/test/gc.wast.fromBinary.noDebugInfo000066400000000000000000000047651423707623100235360ustar00rootroot00000000000000(module (type $i31ref_dataref_=>_none (func (param i31ref dataref))) (type $ref?|i31|_i31ref_ref?|data|_dataref_=>_none (func (param (ref null i31) i31ref (ref null data) dataref))) (global $global$0 (mut anyref) (ref.null any)) (global $global$1 (mut eqref) (ref.null eq)) (global $global$2 (mut i31ref) (i31.new (i32.const 0) )) (global $global$3 (mut anyref) (ref.null eq)) (global $global$4 (mut anyref) (i31.new (i32.const 0) )) (global $global$5 (mut eqref) (i31.new (i32.const 0) )) (func $0 (param $0 i31ref) (param $1 dataref) (local $2 i32) (local $3 anyref) (local $4 eqref) (local.set $3 (local.get $3) ) (local.set $3 (global.get $global$0) ) (local.set $3 (ref.null any) ) (local.set $4 (local.get $4) ) (local.set $4 (global.get $global$1) ) (local.set $4 (ref.null eq) ) (local.set $0 (local.get $0) ) (local.set $0 (global.get $global$2) ) (local.set $0 (i31.new (i32.const 0) ) ) (local.set $3 (local.get $4) ) (local.set $3 (global.get $global$1) ) (local.set $3 (ref.null eq) ) (local.set $3 (local.get $0) ) (local.set $3 (global.get $global$2) ) (local.set $3 (i31.new (i32.const 0) ) ) (local.set $4 (local.get $0) ) (local.set $4 (global.get $global$2) ) (local.set $4 (i31.new (i32.const 0) ) ) (global.set $global$0 (local.get $3) ) (global.set $global$0 (global.get $global$0) ) (global.set $global$0 (ref.null any) ) (global.set $global$1 (local.get $4) ) (global.set $global$1 (global.get $global$1) ) (global.set $global$1 (ref.null eq) ) (global.set $global$2 (local.get $0) ) (global.set $global$2 (global.get $global$2) ) (global.set $global$2 (i31.new (i32.const 0) ) ) (global.set $global$0 (local.get $4) ) (global.set $global$0 (global.get $global$1) ) (global.set $global$0 (ref.null eq) ) (global.set $global$0 (local.get $0) ) (global.set $global$0 (global.get $global$2) ) (global.set $global$0 (i31.new (i32.const 0) ) ) (global.set $global$1 (local.get $0) ) (global.set $global$1 (global.get $global$2) ) (global.set $global$1 (i31.new (i32.const 0) ) ) (local.set $2 (i31.get_s (local.get $0) ) ) (local.set $2 (i31.get_u (local.get $0) ) ) ) (func $1 (param $0 (ref null i31)) (param $1 i31ref) (param $2 (ref null data)) (param $3 dataref) (nop) ) ) binaryen-version_108/test/grow_memory.cpp000066400000000000000000000005411423707623100207760ustar00rootroot00000000000000#include #include #include volatile int writeOnly; int main() { EM_ASM({ assert(HEAPU8.length == = 16 * 1024 * 1024); }); for (int i = 0; i < 20; i++) { printf("alloc 1MB: %d\n", i); writeOnly = (int)malloc(1024 * 1024); } EM_ASM({ assert(HEAPU8.length > 16 * 1024 * 1024); }); printf("ok.\n"); } binaryen-version_108/test/grow_memory.emcc000066400000000000000000000000401423707623100211150ustar00rootroot00000000000000["-s", "ALLOW_MEMORY_GROWTH=1"] binaryen-version_108/test/grow_memory.txt000066400000000000000000000004231423707623100210320ustar00rootroot00000000000000alloc 1MB: 0 alloc 1MB: 1 alloc 1MB: 2 alloc 1MB: 3 alloc 1MB: 4 alloc 1MB: 5 alloc 1MB: 6 alloc 1MB: 7 alloc 1MB: 8 alloc 1MB: 9 alloc 1MB: 10 alloc 1MB: 11 alloc 1MB: 12 alloc 1MB: 13 alloc 1MB: 14 alloc 1MB: 15 alloc 1MB: 16 alloc 1MB: 17 alloc 1MB: 18 alloc 1MB: 19 ok. binaryen-version_108/test/grow_memory.wast000066400000000000000000000005401423707623100211710ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (type $1 (func (result i32))) (memory $0 1) (export "memory" (memory $0)) (export "grow" (func $0)) (export "current" (func $1)) (func $0 (; 0 ;) (type $0) (param $var$0 i32) (result i32) (memory.grow (local.get $var$0) ) ) (func $1 (; 1 ;) (type $1) (result i32) (memory.size) ) ) binaryen-version_108/test/grow_memory.wast.from-wast000066400000000000000000000004731423707623100231140ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (type $1 (func (result i32))) (memory $0 1) (export "memory" (memory $0)) (export "grow" (func $0)) (export "current" (func $1)) (func $0 (param $var$0 i32) (result i32) (memory.grow (local.get $var$0) ) ) (func $1 (result i32) (memory.size) ) ) binaryen-version_108/test/grow_memory.wast.fromBinary000066400000000000000000000004741423707623100233060ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (type $1 (func (result i32))) (memory $0 1) (export "memory" (memory $0)) (export "grow" (func $0)) (export "current" (func $1)) (func $0 (param $var$0 i32) (result i32) (memory.grow (local.get $var$0) ) ) (func $1 (result i32) (memory.size) ) ) binaryen-version_108/test/grow_memory.wast.fromBinary.noDebugInfo000066400000000000000000000005071423707623100255010ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (memory $0 1) (export "memory" (memory $0)) (export "grow" (func $0)) (export "current" (func $1)) (func $0 (param $0 i32) (result i32) (memory.grow (local.get $0) ) ) (func $1 (result i32) (memory.size) ) ) binaryen-version_108/test/gtest/000077500000000000000000000000001423707623100170525ustar00rootroot00000000000000binaryen-version_108/test/gtest/CMakeLists.txt000066400000000000000000000003561423707623100216160ustar00rootroot00000000000000include_directories(../../third_party/googletest/googletest/include) set(unittest_SOURCES type-builder.cpp ) binaryen_add_executable(binaryen-unittests "${unittest_SOURCES}") target_link_libraries(binaryen-unittests gtest gtest_main) binaryen-version_108/test/gtest/type-builder.cpp000066400000000000000000000360331423707623100221700ustar00rootroot00000000000000#include "type-test.h" #include "wasm-type-printing.h" #include "wasm-type.h" #include "gtest/gtest.h" using namespace wasm; TEST_F(TypeTest, TypeBuilderGrowth) { TypeBuilder builder; EXPECT_EQ(builder.size(), 0u); builder.grow(3); EXPECT_EQ(builder.size(), 3u); } TEST_F(TypeTest, TypeIterator) { Type none = Type::none; Type i32 = Type::i32; Type i64 = Type::i64; Type f32 = Type::f32; Type f64 = Type::f64; Type tuple = Tuple{i32, i64, f32, f64}; EXPECT_EQ(none.size(), 0u); EXPECT_EQ(none.begin(), none.end()); EXPECT_EQ(none.end() - none.begin(), 0u); EXPECT_EQ(none.begin() + 0, none.end()); EXPECT_EQ(i32.size(), 1u); EXPECT_NE(i32.begin(), i32.end()); EXPECT_EQ(i32.end() - i32.begin(), 1u); EXPECT_EQ(*i32.begin(), i32); EXPECT_EQ(i32[0], i32); EXPECT_EQ(i32.begin() + 1, i32.end()); EXPECT_EQ(i32.end() - 1, i32.begin()); auto preInc = i32.begin(); EXPECT_EQ(++preInc, i32.end()); EXPECT_EQ(preInc, i32.end()); auto postInc = i32.begin(); EXPECT_EQ(postInc++, i32.begin()); EXPECT_EQ(postInc, i32.end()); auto preDec = i32.end(); EXPECT_EQ(--preDec, i32.begin()); EXPECT_EQ(preDec, i32.begin()); auto postDec = i32.end(); EXPECT_EQ(postDec--, i32.end()); EXPECT_EQ(postDec, i32.begin()); EXPECT_EQ(tuple.size(), 4u); EXPECT_NE(tuple.begin(), tuple.end()); EXPECT_EQ(tuple.end() - tuple.begin(), 4u); EXPECT_EQ(*tuple.begin(), i32); EXPECT_EQ(*(tuple.begin() + 1), i64); EXPECT_EQ(*(tuple.begin() + 2), f32); EXPECT_EQ(*(tuple.begin() + 3), f64); EXPECT_EQ(tuple[0], i32); EXPECT_EQ(tuple[1], i64); EXPECT_EQ(tuple[2], f32); EXPECT_EQ(tuple[3], f64); auto reverse = tuple.rbegin(); EXPECT_EQ(*reverse++, f64); EXPECT_EQ(*reverse++, f32); EXPECT_EQ(*reverse++, i64); EXPECT_EQ(*reverse++, i32); EXPECT_EQ(reverse, tuple.rend()); } TEST_F(TypeTest, IndexedTypePrinter) { TypeBuilder builder(4); builder.createRecGroup(0, 4); Type refStructA = builder.getTempRefType(builder[0], Nullable); Type refStructB = builder.getTempRefType(builder[1], Nullable); Type refArrayA = builder.getTempRefType(builder[2], Nullable); Type refArrayB = builder.getTempRefType(builder[3], Nullable); builder[0] = Struct({Field(refArrayB, Immutable)}); builder[1] = Struct({Field(refStructA, Immutable)}); builder[2] = Array(Field(refStructB, Immutable)); builder[3] = Array(Field(refArrayA, Immutable)); auto result = builder.build(); ASSERT_TRUE(result); auto built = *result; std::vector structs{built[0], built[1]}; std::vector arrays{built[2], built[3]}; // Check that IndexedTypePrinters configured with fallbacks work correctly. using ArrayPrinter = IndexedTypeNameGenerator; ArrayPrinter printArrays(arrays, "array"); using StructPrinter = IndexedTypeNameGenerator; StructPrinter print(structs, printArrays, "struct"); std::stringstream stream; stream << print(built[0]); EXPECT_EQ(stream.str(), "(struct_subtype (field (ref null $array1)) data)"); stream.str(""); stream << print(built[1]); EXPECT_EQ(stream.str(), "(struct_subtype (field (ref null $struct0)) data)"); stream.str(""); stream << print(built[2]); EXPECT_EQ(stream.str(), "(array_subtype (ref null $struct1) data)"); stream.str(""); stream << print(built[3]); EXPECT_EQ(stream.str(), "(array_subtype (ref null $array0) data)"); } TEST_F(EquirecursiveTest, Basics) { // (type $sig (func (param (ref $struct)) (result (ref $array) i32))) // (type $struct (struct (field (ref null $array) (mut rtt 0 $array)))) // (type $array (array (mut anyref))) TypeBuilder builder(3); ASSERT_EQ(builder.size(), size_t{3}); Type refSig = builder.getTempRefType(builder[0], NonNullable); Type refStruct = builder.getTempRefType(builder[1], NonNullable); Type refArray = builder.getTempRefType(builder[2], NonNullable); Type refNullArray = builder.getTempRefType(builder[2], Nullable); Type rttArray = builder.getTempRttType(Rtt(0, builder[2])); Type refNullAny(HeapType::any, Nullable); Signature sig(refStruct, builder.getTempTupleType({refArray, Type::i32})); Struct struct_({Field(refNullArray, Immutable), Field(rttArray, Mutable)}); Array array(Field(refNullAny, Mutable)); builder[0] = sig; builder[1] = struct_; builder[2] = array; auto result = builder.build(); ASSERT_TRUE(result); std::vector built = *result; ASSERT_EQ(built.size(), size_t{3}); // The built types should have the correct kinds. ASSERT_TRUE(built[0].isSignature()); ASSERT_TRUE(built[1].isStruct()); ASSERT_TRUE(built[2].isArray()); // The built types should have the correct structure. Type newRefSig = Type(built[0], NonNullable); Type newRefStruct = Type(built[1], NonNullable); Type newRefArray = Type(built[2], NonNullable); Type newRefNullArray = Type(built[2], Nullable); Type newRttArray = Type(Rtt(0, built[2])); EXPECT_EQ(built[0].getSignature(), Signature(newRefStruct, {newRefArray, Type::i32})); EXPECT_EQ( built[1].getStruct(), Struct({Field(newRefNullArray, Immutable), Field(newRttArray, Mutable)})); EXPECT_EQ(built[2].getArray(), Array(Field(refNullAny, Mutable))); // The built types should be different from the temporary types. EXPECT_NE(newRefSig, refSig); EXPECT_NE(newRefStruct, refStruct); EXPECT_NE(newRefArray, refArray); EXPECT_NE(newRefNullArray, refNullArray); EXPECT_NE(newRttArray, rttArray); } static void testDirectSelfSupertype() { // Type is directly a supertype of itself. TypeBuilder builder(1); builder[0] = Struct{}; builder[0].subTypeOf(builder[0]); auto result = builder.build(); EXPECT_FALSE(result); const auto* error = result.getError(); ASSERT_TRUE(error); if (getTypeSystem() == TypeSystem::Nominal) { EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::SelfSupertype); } else if (getTypeSystem() == TypeSystem::Isorecursive) { EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::ForwardSupertypeReference); } EXPECT_EQ(error->index, 0u); } TEST_F(NominalTest, DirectSelfSupertype) { testDirectSelfSupertype(); } TEST_F(IsorecursiveTest, DirectSelfSupertype) { testDirectSelfSupertype(); } static void testIndirectSelfSupertype() { // Type is indirectly a supertype of itself. TypeBuilder builder(2); builder.createRecGroup(0, 2); builder[0] = Struct{}; builder[1] = Struct{}; builder[0].subTypeOf(builder[1]); builder[1].subTypeOf(builder[0]); auto result = builder.build(); EXPECT_FALSE(result); const auto* error = result.getError(); ASSERT_TRUE(error); if (getTypeSystem() == TypeSystem::Nominal) { EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::SelfSupertype); } else if (getTypeSystem() == TypeSystem::Isorecursive) { EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::ForwardSupertypeReference); } else { WASM_UNREACHABLE("unexpected type system"); } EXPECT_EQ(error->index, 0u); } TEST_F(NominalTest, IndirectSelfSupertype) { testIndirectSelfSupertype(); } TEST_F(IsorecursiveTest, IndirectSelfSupertype) { testIndirectSelfSupertype(); } static void testInvalidSupertype() { TypeBuilder builder(2); builder.createRecGroup(0, 2); builder[0] = Struct({Field(Type::i32, Immutable)}); builder[1] = Struct{}; builder[1].subTypeOf(builder[0]); auto result = builder.build(); EXPECT_FALSE(result); const auto* error = result.getError(); ASSERT_TRUE(error); EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::InvalidSupertype); EXPECT_EQ(error->index, 1u); } TEST_F(NominalTest, InvalidSupertype) { testInvalidSupertype(); } TEST_F(IsorecursiveTest, InvalidSupertype) { testInvalidSupertype(); } TEST_F(IsorecursiveTest, ForwardReferencedChild) { TypeBuilder builder(3); builder.createRecGroup(0, 2); Type refA1 = builder.getTempRefType(builder[1], Nullable); Type refB0 = builder.getTempRefType(builder[2], Nullable); // Forward reference to same group is ok. builder[0] = Struct({Field(refA1, Mutable)}); // Forward reference to different group is not ok. builder[1] = Struct({Field(refB0, Mutable)}); builder[2] = Struct{}; auto result = builder.build(); EXPECT_FALSE(result); const auto* error = result.getError(); ASSERT_TRUE(error); EXPECT_EQ(error->reason, TypeBuilder::ErrorReason::ForwardChildReference); EXPECT_EQ(error->index, 1u); } TEST_F(IsorecursiveTest, RecGroupIndices) { TypeBuilder builder(5); builder.createRecGroup(0, 2); builder[0] = Struct{}; builder[1] = Struct{}; builder.createRecGroup(2, 3); builder[2] = Struct{}; builder[3] = Struct{}; builder[4] = Struct{}; auto result = builder.build(); ASSERT_TRUE(result); auto built = *result; EXPECT_EQ(built[0].getRecGroup(), built[1].getRecGroup()); EXPECT_EQ(built[0].getRecGroupIndex(), 0u); EXPECT_EQ(built[1].getRecGroupIndex(), 1u); EXPECT_EQ(built[2].getRecGroup(), built[3].getRecGroup()); EXPECT_EQ(built[3].getRecGroup(), built[4].getRecGroup()); EXPECT_EQ(built[2].getRecGroupIndex(), 0u); EXPECT_EQ(built[3].getRecGroupIndex(), 1u); EXPECT_EQ(built[4].getRecGroupIndex(), 2u); } TEST_F(IsorecursiveTest, CanonicalizeGroups) { // Trivial types in the same group are not equivalent. TypeBuilder builderA(2); builderA.createRecGroup(0, 2); builderA[0] = Struct{}; builderA[1] = Struct{}; auto resultA = builderA.build(); ASSERT_TRUE(resultA); auto builtA = *resultA; EXPECT_NE(builtA[0], builtA[1]); // But if they are in their own separate groups, they are equivalent. TypeBuilder builderB(2); builderB[0] = Struct{}; builderB[1] = Struct{}; auto resultB = builderB.build(); ASSERT_TRUE(resultB); auto builtB = *resultB; EXPECT_EQ(builtB[0], builtB[1]); EXPECT_NE(builtB[0], builtA[0]); EXPECT_NE(builtB[0], builtA[1]); // If we build the same groups again, we should get the same results. TypeBuilder builderA2(4); builderA2.createRecGroup(0, 2); builderA2.createRecGroup(2, 2); builderA2[0] = Struct{}; builderA2[1] = Struct{}; builderA2[2] = Struct{}; builderA2[3] = Struct{}; auto resultA2 = builderA2.build(); ASSERT_TRUE(resultA2); auto builtA2 = *resultA2; EXPECT_EQ(builtA2[0], builtA[0]); EXPECT_EQ(builtA2[1], builtA[1]); EXPECT_EQ(builtA2[2], builtA[0]); EXPECT_EQ(builtA2[3], builtA[1]); TypeBuilder builderB2(1); builderB2[0] = Struct{}; auto resultB2 = builderB2.build(); ASSERT_TRUE(resultB2); auto builtB2 = *resultB2; EXPECT_EQ(builtB2[0], builtB[0]); } TEST_F(IsorecursiveTest, CanonicalizeUses) { TypeBuilder builder(8); builder[0] = makeStruct(builder, {}); builder[1] = makeStruct(builder, {}); builder[2] = makeStruct(builder, {0}); builder[3] = makeStruct(builder, {1}); builder[4] = makeStruct(builder, {0, 2}); builder[5] = makeStruct(builder, {1, 3}); builder[6] = makeStruct(builder, {2, 4}); builder[7] = makeStruct(builder, {3, 5}); auto result = builder.build(); ASSERT_TRUE(result); auto built = *result; EXPECT_EQ(built[0], built[1]); EXPECT_EQ(built[2], built[3]); EXPECT_EQ(built[4], built[5]); EXPECT_EQ(built[6], built[7]); EXPECT_NE(built[0], built[2]); EXPECT_NE(built[0], built[4]); EXPECT_NE(built[0], built[6]); EXPECT_NE(built[2], built[4]); EXPECT_NE(built[2], built[6]); EXPECT_NE(built[4], built[6]); } TEST_F(IsorecursiveTest, DISABLED_CanonicalizeSelfReferences) { TypeBuilder builder(5); // Single self-reference builder[0] = makeStruct(builder, {0}); builder[1] = makeStruct(builder, {1}); // Single other reference builder[2] = makeStruct(builder, {0}); // Other reference followed by self-reference builder[3] = makeStruct(builder, {2, 3}); // Self-reference followed by other reference builder[4] = makeStruct(builder, {4, 2}); auto result = builder.build(); ASSERT_TRUE(result); auto built = *result; EXPECT_EQ(built[0], built[1]); EXPECT_NE(built[0], built[2]); EXPECT_NE(built[0], built[3]); EXPECT_NE(built[0], built[4]); EXPECT_NE(built[2], built[3]); EXPECT_NE(built[2], built[4]); EXPECT_NE(built[3], built[4]); } TEST_F(IsorecursiveTest, CanonicalizeSupertypes) { TypeBuilder builder(6); builder[0] = Struct{}; builder[1] = Struct{}; // Type with a supertype builder[2] = Struct{}; builder[2].subTypeOf(builder[0]); // Type with the same supertype after canonicalization. builder[3] = Struct{}; builder[3].subTypeOf(builder[1]); // Type with a different supertype builder[4] = Struct{}; builder[4].subTypeOf(builder[2]); // Type with no supertype builder[5] = Struct{}; auto result = builder.build(); ASSERT_TRUE(result); auto built = *result; EXPECT_EQ(built[2], built[3]); EXPECT_NE(built[3], built[4]); EXPECT_NE(built[3], built[5]); EXPECT_NE(built[4], built[5]); } TEST_F(IsorecursiveTest, HeapTypeConstructors) { HeapType sig(Signature(Type::i32, Type::i32)); HeapType struct_(Struct({Field(Type(sig, Nullable), Mutable)})); HeapType array(Field(Type(struct_, Nullable), Mutable)); TypeBuilder builder(3); builder[0] = Signature(Type::i32, Type::i32); Type sigRef = builder.getTempRefType(builder[0], Nullable); builder[1] = Struct({Field(sigRef, Mutable)}); Type structRef = builder.getTempRefType(builder[1], Nullable); builder[2] = Array(Field(structRef, Mutable)); auto result = builder.build(); ASSERT_TRUE(result); auto built = *result; EXPECT_EQ(built[0], sig); EXPECT_EQ(built[1], struct_); EXPECT_EQ(built[2], array); HeapType sig2(Signature(Type::i32, Type::i32)); HeapType struct2(Struct({Field(Type(sig, Nullable), Mutable)})); HeapType array2(Field(Type(struct_, Nullable), Mutable)); EXPECT_EQ(sig, sig2); EXPECT_EQ(struct_, struct2); EXPECT_EQ(array, array2); } TEST_F(IsorecursiveTest, CanonicalizeTypesBeforeSubtyping) { TypeBuilder builder(6); // A rec group builder.createRecGroup(0, 2); builder[0] = Struct{}; builder[1] = Struct{}; builder[1].subTypeOf(builder[0]); // The same rec group again builder.createRecGroup(2, 2); builder[2] = Struct{}; builder[3] = Struct{}; builder[3].subTypeOf(builder[2]); // This subtyping only validates if the previous two groups are deduplicated // before checking subtype validity. builder[4] = Struct({Field(builder.getTempRefType(builder[0], Nullable), Immutable)}); builder[5] = Struct({Field(builder.getTempRefType(builder[3], Nullable), Immutable)}); builder[5].subTypeOf(builder[4]); auto result = builder.build(); EXPECT_TRUE(result); } static void testCanonicalizeBasicTypes() { TypeBuilder builder(5); Type anyref = builder.getTempRefType(builder[0], Nullable); Type anyrefs = builder.getTempTupleType({anyref, anyref}); builder[0] = HeapType::any; builder[1] = Struct({Field(anyref, Immutable)}); builder[2] = Struct({Field(Type::anyref, Immutable)}); builder[3] = Signature(anyrefs, Type::none); builder[4] = Signature({Type::anyref, Type::anyref}, Type::none); auto result = builder.build(); ASSERT_TRUE(result); auto built = *result; EXPECT_EQ(built[1], built[2]); EXPECT_EQ(built[3], built[4]); } TEST_F(EquirecursiveTest, CanonicalizeBasicTypes) { testCanonicalizeBasicTypes(); } TEST_F(IsorecursiveTest, CanonicalizeBasicTypes) { testCanonicalizeBasicTypes(); } binaryen-version_108/test/gtest/type-test.h000066400000000000000000000023321423707623100211610ustar00rootroot00000000000000#include "wasm-type.h" #include "gtest/gtest.h" #ifndef wasm_test_gtest_type_test_h #define wasm_test_gtest_type_test_h // Helper test fixture for managing the global type system state. template class TypeSystemTest : public ::testing::Test { wasm::TypeSystem originalSystem; protected: void SetUp() override { originalSystem = wasm::getTypeSystem(); wasm::setTypeSystem(system); } void TearDown() override { wasm::destroyAllTypesForTestingPurposesOnly(); wasm::setTypeSystem(originalSystem); } // Utilities wasm::Struct makeStruct(wasm::TypeBuilder& builder, std::initializer_list indices) { using namespace wasm; FieldList fields; for (auto index : indices) { Type ref = builder.getTempRefType(builder[index], Nullable); fields.emplace_back(ref, Mutable); } return Struct(std::move(fields)); } }; using TypeTest = TypeSystemTest; using EquirecursiveTest = TypeSystemTest; using NominalTest = TypeSystemTest; using IsorecursiveTest = TypeSystemTest; #endif // wasm_test_gtest_type_test_h binaryen-version_108/test/heap-types.wast000066400000000000000000000245151423707623100207120ustar00rootroot00000000000000;; Test that we can roundtrip struct and array types (module ;; Structs (type $struct.A (struct i32 (field f32) (field $named f64) )) ;; identical to $struct.A, so will be canonicalized with it, but field names ;; are different (type $struct.A.prime (struct i32 (field f32) (field $othername f64) )) (type $struct.B (struct (field i8) (field (mut i16)) (field (ref $struct.A)) (field (mut (ref $struct.A))) )) (type $struct.C (struct (field $named-mut (mut f32)) )) ;; Arrays (type $vector (array (mut f64))) (type $matrix (array (mut (ref null $vector)))) (type $bytes (array (mut i8))) (type $words (array (mut i32))) ;; RTT (type $parent (struct)) (type $child (struct i32)) (type $grandchild (struct i32 i64)) (global $rttparent (rtt 0 $parent) (rtt.canon $parent)) (global $rttchild (rtt 1 $child) (rtt.sub $child (global.get $rttparent))) (global $rttgrandchild (rtt 2 $grandchild) (rtt.sub $grandchild (global.get $rttchild))) (global $rttfreshgrandchild (rtt 2 $grandchild) (rtt.fresh_sub $grandchild (global.get $rttchild))) (type $nested-child-struct (struct (field (mut (ref $child))))) (type $nested-child-array (array (mut (ref $child)))) (global $struct.new-in-global (ref $struct.A) (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (func $structs (param $x (ref $struct.A)) (result (ref $struct.B)) (local $tA (ref null $struct.A)) (local $tB (ref null $struct.B)) (local $tc (ref null $struct.C)) (local $tv (ref null $vector)) (local $tm (ref null $matrix)) (drop (local.get $x) ) (drop (struct.get $struct.A 0 (local.get $x)) ) (drop (struct.get $struct.A 1 (local.get $x)) ) (drop (struct.get $struct.A 2 (local.get $x)) ) (drop (struct.get $struct.A $named (local.get $x)) ) (drop (struct.get $struct.A.prime $othername (ref.null $struct.A.prime)) ) (drop (struct.get_u $struct.B 0 (local.get $tB)) ) (drop (struct.get_s $struct.B 0 (local.get $tB)) ) ;; immutable fields allow subtyping. (drop (struct.get $child 0 (ref.null $grandchild)) ) (drop (ref.null $struct.A) ) (drop (block (result (ref null $struct.A)) (local.get $x) ) ) (drop (if (result (ref null $struct.A)) (i32.const 1) (local.get $x) (local.get $x) ) ) (drop (loop (result (ref null $struct.A)) (local.get $x) ) ) (drop (select (result (ref null $struct.A)) (local.get $x) (local.get $x) (i32.const 1) ) ) (struct.set $struct.C 0 (ref.null $struct.C) (f32.const 100) ) ;; values may be subtypes (struct.set $nested-child-struct 0 (ref.null $nested-child-struct) (ref.as_non_null (ref.null $grandchild) ) ) (drop (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (drop (struct.new_with_rtt $struct.A (i32.const 1) (f32.const 2.345) (f64.const 3.14159) (rtt.canon $struct.A) ) ) (unreachable) ) (func $arrays (param $x (ref $vector)) (result (ref $matrix)) (local $tv (ref null $vector)) (local $tm (ref null $matrix)) (local $tb (ref null $bytes)) (local $tw (ref null $words)) (drop (array.new_with_rtt $vector (f64.const 3.14159) (i32.const 3) (rtt.canon $vector) ) ) (drop (array.new_default_with_rtt $matrix (i32.const 10) (rtt.canon $matrix) ) ) (drop (array.get $vector (local.get $x) (i32.const 2) ) ) (array.set $vector (local.get $x) (i32.const 2) (f64.const 2.18281828) ) ;; values may be subtypes (array.set $nested-child-array (ref.null $nested-child-array) (i32.const 3) (ref.as_non_null (ref.null $grandchild) ) ) (drop (array.len $vector (local.get $x) ) ) (drop (array.get $words (local.get $tw) (i32.const 1) ) ) (drop (array.get_u $bytes (local.get $tb) (i32.const 2) ) ) (drop (array.get_s $bytes (local.get $tb) (i32.const 3) ) ) (unreachable) ) ;; RTT types as parameters (func $rtt-param-with-depth (param $rtt (rtt 1 $parent))) (func $rtt-param-without-depth (param $rtt (rtt $parent))) (func $rtt-operations (local $temp.A (ref null $struct.A)) (local $temp.B (ref null $struct.B)) (drop (ref.test (ref.null $struct.A) (rtt.canon $struct.B)) ) (drop (ref.cast (ref.null $struct.A) (rtt.canon $struct.B)) ) (drop (block $out (result (ref $struct.B)) ;; set the value to a local with type $struct.A, showing that the value ;; flowing out has the right type (local.set $temp.A (br_on_cast $out (ref.null $struct.A) (rtt.canon $struct.B)) ) ;; an untaken br_on_cast, with unreachable rtt - so we cannot use the ;; RTT in binaryen IR to find the cast type. (br_on_cast $out (ref.null $struct.A) (unreachable)) (unreachable) ) ) (drop (block $out2 (result (ref null $struct.A)) ;; set the value to a local with type $struct.A, showing that the value ;; flowing out has the right type (local.set $temp.B (br_on_cast_fail $out2 (ref.null $struct.A) (rtt.canon $struct.B)) ) (ref.null $struct.A) ) ) ) (func $ref.is_X (param $x anyref) (if (ref.is_func (local.get $x)) (unreachable)) (if (ref.is_data (local.get $x)) (unreachable)) (if (ref.is_i31 (local.get $x)) (unreachable)) ) (func $ref.as_X (param $x anyref) (drop (ref.as_non_null (local.get $x))) (drop (ref.as_func (local.get $x))) (drop (ref.as_data (local.get $x))) (drop (ref.as_i31 (local.get $x))) ) (func $br_on_X (param $x anyref) (local $y anyref) (local $z (ref null any)) (local $temp-func (ref null func)) (local $temp-data (ref null data)) (local $temp-i31 (ref null i31)) (block $null (local.set $z (br_on_null $null (local.get $x)) ) ) (drop (block $func (result funcref) (local.set $y (br_on_func $func (local.get $x)) ) (ref.null func) ) ) (drop (block $data (result (ref null data)) (local.set $y (br_on_data $data (local.get $x)) ) (ref.null data) ) ) (drop (block $i31 (result (ref null i31)) (local.set $y (br_on_i31 $i31 (local.get $x)) ) (ref.null i31) ) ) (drop (block $non-null (result (ref any)) (br_on_non_null $non-null (local.get $x)) (unreachable) ) ) (drop (block $non-func (result anyref) (local.set $temp-func (br_on_non_func $non-func (local.get $x)) ) (ref.null any) ) ) (drop (block $non-data (result anyref) (local.set $temp-data (br_on_non_data $non-data (local.get $x)) ) (ref.null any) ) ) (drop (block $non-i31 (result anyref) (local.set $temp-i31 (br_on_non_i31 $non-i31 (local.get $x)) ) (ref.null any) ) ) ) (func $unreachables-1 (drop (struct.get $struct.C 0 (unreachable)) ) ) (func $unreachables-2 (struct.set $struct.C 0 (ref.null $struct.C) (unreachable)) ) (func $unreachables-3 (struct.set $struct.C 0 (unreachable) (unreachable)) ) (func $unreachables-4 (struct.set $struct.C 0 (unreachable) (f32.const 1)) ) (func $unreachables-array-1 (array.get $vector (unreachable) (i32.const 2) ) ) (func $unreachables-array-2 (array.get $vector (ref.null $vector) (unreachable) ) ) (func $unreachables-array-3 (array.set $vector (unreachable) (i32.const 2) (f64.const 2.18281828) ) ) (func $unreachables-array-4 (array.set $vector (ref.null $vector) (unreachable) (f64.const 2.18281828) ) ) (func $unreachables-array-5 (array.set $vector (ref.null $vector) (i32.const 2) (unreachable) ) ) (func $unreachables-array-6 (drop (array.len $vector (unreachable) ) ) ) (func $unreachables-7 (drop (struct.new_default_with_rtt $struct.A (unreachable) ) ) ) (func $array-copy (param $x (ref $vector)) (param $y (ref null $vector)) (array.copy $vector $vector (local.get $x) (i32.const 11) (local.get $y) (i32.const 42) (i32.const 1337) ) ) (func $array-init (result (ref $vector)) (array.init $vector (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) (rtt.canon $vector) ) ) (func $array-init-packed (result (ref $bytes)) (array.init $bytes (i32.const 4) (i32.const 2) (i32.const 1) (rtt.canon $bytes) ) ) (func $static-operations (local $temp.A (ref null $struct.A)) (local $temp.B (ref null $struct.B)) (drop (ref.test_static $struct.B (ref.null $struct.A)) ) (drop (ref.cast_static $struct.B (ref.null $struct.A)) ) (drop (block $out-B (result (ref $struct.B)) (local.set $temp.A (br_on_cast_static $out-B $struct.B (ref.null $struct.A)) ) (unreachable) ) ) (drop (block $out-A (result (ref null $struct.A)) (local.set $temp.B (br_on_cast_static_fail $out-A $struct.B (ref.null $struct.A)) ) (unreachable) ) ) ) (func $static-constructions (drop (struct.new_default $struct.A) ) (drop (struct.new $struct.A (i32.const 1) (f32.const 2.345) (f64.const 3.14159) ) ) (drop (array.new $vector (f64.const 3.14159) (i32.const 3) ) ) (drop (array.new_default $matrix (i32.const 10) ) ) (drop (array.init_static $vector (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) ) ) ) ) binaryen-version_108/test/heap-types.wast.from-wast000066400000000000000000000236411423707623100226270ustar00rootroot00000000000000(module (type $struct.A (struct (field i32) (field f32) (field $named f64))) (type $struct.B (struct (field i8) (field (mut i16)) (field (ref $struct.A)) (field (mut (ref $struct.A))))) (type $vector (array (mut f64))) (type $none_=>_none (func)) (type $grandchild (struct (field i32) (field i64))) (type $matrix (array (mut (ref null $vector)))) (type $struct.C (struct (field $named-mut (mut f32)))) (type $parent (struct )) (type $child (struct (field i32))) (type $bytes (array (mut i8))) (type $anyref_=>_none (func (param anyref))) (type $nested-child-struct (struct (field (mut (ref $child))))) (type $ref|$struct.A|_=>_ref|$struct.B| (func (param (ref $struct.A)) (result (ref $struct.B)))) (type $ref|$vector|_=>_ref|$matrix| (func (param (ref $vector)) (result (ref $matrix)))) (type $words (array (mut i32))) (type $nested-child-array (array (mut (ref $child)))) (type $rtt_1_$parent_=>_none (func (param (rtt 1 $parent)))) (type $rtt_$parent_=>_none (func (param (rtt $parent)))) (type $ref|$vector|_ref?|$vector|_=>_none (func (param (ref $vector) (ref null $vector)))) (type $none_=>_ref|$vector| (func (result (ref $vector)))) (type $none_=>_ref|$bytes| (func (result (ref $bytes)))) (global $rttparent (rtt 0 $parent) (rtt.canon $parent)) (global $rttchild (rtt 1 $child) (rtt.sub $child (global.get $rttparent) )) (global $rttgrandchild (rtt 2 $grandchild) (rtt.sub $grandchild (global.get $rttchild) )) (global $rttfreshgrandchild (rtt 2 $grandchild) (rtt.fresh_sub $grandchild (global.get $rttchild) )) (global $struct.new-in-global (ref $struct.A) (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) )) (func $structs (param $x (ref $struct.A)) (result (ref $struct.B)) (local $tA (ref null $struct.A)) (local $tB (ref null $struct.B)) (local $tc (ref null $struct.C)) (local $tv (ref null $vector)) (local $tm (ref null $matrix)) (drop (local.get $x) ) (drop (struct.get $struct.A 0 (local.get $x) ) ) (drop (struct.get $struct.A 1 (local.get $x) ) ) (drop (struct.get $struct.A $named (local.get $x) ) ) (drop (struct.get $struct.A $named (local.get $x) ) ) (drop (struct.get $struct.A $named (ref.null $struct.A) ) ) (drop (struct.get_u $struct.B 0 (local.get $tB) ) ) (drop (struct.get_s $struct.B 0 (local.get $tB) ) ) (drop (struct.get $grandchild 0 (ref.null $grandchild) ) ) (drop (ref.null $struct.A) ) (drop (block $block (result (ref null $struct.A)) (local.get $x) ) ) (drop (if (result (ref null $struct.A)) (i32.const 1) (local.get $x) (local.get $x) ) ) (drop (loop $loop-in (result (ref null $struct.A)) (local.get $x) ) ) (drop (select (result (ref null $struct.A)) (local.get $x) (local.get $x) (i32.const 1) ) ) (struct.set $struct.C $named-mut (ref.null $struct.C) (f32.const 100) ) (struct.set $nested-child-struct 0 (ref.null $nested-child-struct) (ref.as_non_null (ref.null $grandchild) ) ) (drop (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (drop (struct.new_with_rtt $struct.A (i32.const 1) (f32.const 2.3450000286102295) (f64.const 3.14159) (rtt.canon $struct.A) ) ) (unreachable) ) (func $arrays (param $x (ref $vector)) (result (ref $matrix)) (local $tv (ref null $vector)) (local $tm (ref null $matrix)) (local $tb (ref null $bytes)) (local $tw (ref null $words)) (drop (array.new_with_rtt $vector (f64.const 3.14159) (i32.const 3) (rtt.canon $vector) ) ) (drop (array.new_default_with_rtt $matrix (i32.const 10) (rtt.canon $matrix) ) ) (drop (array.get $vector (local.get $x) (i32.const 2) ) ) (array.set $vector (local.get $x) (i32.const 2) (f64.const 2.18281828) ) (array.set $nested-child-array (ref.null $nested-child-array) (i32.const 3) (ref.as_non_null (ref.null $grandchild) ) ) (drop (array.len $vector (local.get $x) ) ) (drop (array.get $words (local.get $tw) (i32.const 1) ) ) (drop (array.get_u $bytes (local.get $tb) (i32.const 2) ) ) (drop (array.get_s $bytes (local.get $tb) (i32.const 3) ) ) (unreachable) ) (func $rtt-param-with-depth (param $rtt (rtt 1 $parent)) (nop) ) (func $rtt-param-without-depth (param $rtt (rtt $parent)) (nop) ) (func $rtt-operations (local $temp.A (ref null $struct.A)) (local $temp.B (ref null $struct.B)) (drop (ref.test (ref.null $struct.A) (rtt.canon $struct.B) ) ) (drop (ref.cast (ref.null $struct.A) (rtt.canon $struct.B) ) ) (drop (block $out (result (ref $struct.B)) (local.set $temp.A (br_on_cast $out (ref.null $struct.A) (rtt.canon $struct.B) ) ) (block (drop (ref.null $struct.A) ) (unreachable) ) (unreachable) ) ) (drop (block $out2 (result (ref null $struct.A)) (local.set $temp.B (br_on_cast_fail $out2 (ref.null $struct.A) (rtt.canon $struct.B) ) ) (ref.null $struct.A) ) ) ) (func $ref.is_X (param $x anyref) (if (ref.is_func (local.get $x) ) (unreachable) ) (if (ref.is_data (local.get $x) ) (unreachable) ) (if (ref.is_i31 (local.get $x) ) (unreachable) ) ) (func $ref.as_X (param $x anyref) (drop (ref.as_non_null (local.get $x) ) ) (drop (ref.as_func (local.get $x) ) ) (drop (ref.as_data (local.get $x) ) ) (drop (ref.as_i31 (local.get $x) ) ) ) (func $br_on_X (param $x anyref) (local $y anyref) (local $z anyref) (local $temp-func funcref) (local $temp-data (ref null data)) (local $temp-i31 (ref null i31)) (block $null (local.set $z (br_on_null $null (local.get $x) ) ) ) (drop (block $func (result funcref) (local.set $y (br_on_func $func (local.get $x) ) ) (ref.null func) ) ) (drop (block $data (result (ref null data)) (local.set $y (br_on_data $data (local.get $x) ) ) (ref.null data) ) ) (drop (block $i31 (result (ref null i31)) (local.set $y (br_on_i31 $i31 (local.get $x) ) ) (ref.null i31) ) ) (drop (block $non-null (result (ref any)) (br_on_non_null $non-null (local.get $x) ) (unreachable) ) ) (drop (block $non-func (result anyref) (local.set $temp-func (br_on_non_func $non-func (local.get $x) ) ) (ref.null any) ) ) (drop (block $non-data (result anyref) (local.set $temp-data (br_on_non_data $non-data (local.get $x) ) ) (ref.null any) ) ) (drop (block $non-i31 (result anyref) (local.set $temp-i31 (br_on_non_i31 $non-i31 (local.get $x) ) ) (ref.null any) ) ) ) (func $unreachables-1 (drop (block ;; (replaces something unreachable we can't emit) (drop (unreachable) ) ) ) ) (func $unreachables-2 (struct.set $struct.C $named-mut (ref.null $struct.C) (unreachable) ) ) (func $unreachables-3 (block ;; (replaces something unreachable we can't emit) (drop (unreachable) ) (drop (unreachable) ) ) ) (func $unreachables-4 (block ;; (replaces something unreachable we can't emit) (drop (unreachable) ) (drop (f32.const 1) ) ) ) (func $unreachables-array-1 (block ;; (replaces something unreachable we can't emit) (drop (unreachable) ) (drop (i32.const 2) ) ) ) (func $unreachables-array-2 (array.get $vector (ref.null $vector) (unreachable) ) ) (func $unreachables-array-3 (block ;; (replaces something unreachable we can't emit) (drop (unreachable) ) (drop (i32.const 2) ) (drop (f64.const 2.18281828) ) ) ) (func $unreachables-array-4 (array.set $vector (ref.null $vector) (unreachable) (f64.const 2.18281828) ) ) (func $unreachables-array-5 (array.set $vector (ref.null $vector) (i32.const 2) (unreachable) ) ) (func $unreachables-array-6 (drop (block (unreachable) ) ) ) (func $unreachables-7 (drop (block ;; (replaces something unreachable we can't emit) (drop (unreachable) ) ) ) ) (func $array-copy (param $x (ref $vector)) (param $y (ref null $vector)) (array.copy $vector $vector (local.get $x) (i32.const 11) (local.get $y) (i32.const 42) (i32.const 1337) ) ) (func $array-init (result (ref $vector)) (array.init $vector (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) (rtt.canon $vector) ) ) (func $array-init-packed (result (ref $bytes)) (array.init $bytes (i32.const 4) (i32.const 2) (i32.const 1) (rtt.canon $bytes) ) ) (func $static-operations (local $temp.A (ref null $struct.A)) (local $temp.B (ref null $struct.B)) (drop (ref.test_static $struct.B (ref.null $struct.A) ) ) (drop (ref.cast_static $struct.B (ref.null $struct.A) ) ) (drop (block $out-B (result (ref $struct.B)) (local.set $temp.A (br_on_cast_static $out-B $struct.B (ref.null $struct.A) ) ) (unreachable) ) ) (drop (block $out-A (result (ref null $struct.A)) (local.set $temp.B (br_on_cast_static_fail $out-A $struct.B (ref.null $struct.A) ) ) (unreachable) ) ) ) (func $static-constructions (drop (struct.new_default $struct.A) ) (drop (struct.new $struct.A (i32.const 1) (f32.const 2.3450000286102295) (f64.const 3.14159) ) ) (drop (array.new $vector (f64.const 3.14159) (i32.const 3) ) ) (drop (array.new_default $matrix (i32.const 10) ) ) (drop (array.init_static $vector (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) ) ) ) ) binaryen-version_108/test/heap-types.wast.fromBinary000066400000000000000000000222571423707623100230220ustar00rootroot00000000000000(module (type $struct.A (struct (field i32) (field f32) (field $named f64))) (type $struct.B (struct (field i8) (field (mut i16)) (field (ref $struct.A)) (field (mut (ref $struct.A))))) (type $vector (array (mut f64))) (type $none_=>_none (func)) (type $grandchild (struct (field i32) (field i64))) (type $matrix (array (mut (ref null $vector)))) (type $struct.C (struct (field $named-mut (mut f32)))) (type $parent (struct )) (type $child (struct (field i32))) (type $bytes (array (mut i8))) (type $anyref_=>_none (func (param anyref))) (type $nested-child-struct (struct (field (mut (ref $child))))) (type $ref|$struct.A|_=>_ref|$struct.B| (func (param (ref $struct.A)) (result (ref $struct.B)))) (type $ref|$vector|_=>_ref|$matrix| (func (param (ref $vector)) (result (ref $matrix)))) (type $words (array (mut i32))) (type $nested-child-array (array (mut (ref $child)))) (type $rtt_1_$parent_=>_none (func (param (rtt 1 $parent)))) (type $rtt_$parent_=>_none (func (param (rtt $parent)))) (type $ref|$vector|_ref?|$vector|_=>_none (func (param (ref $vector) (ref null $vector)))) (type $none_=>_ref|$vector| (func (result (ref $vector)))) (type $none_=>_ref|$bytes| (func (result (ref $bytes)))) (global $rttparent (rtt 0 $parent) (rtt.canon $parent)) (global $rttchild (rtt 1 $child) (rtt.sub $child (global.get $rttparent) )) (global $rttgrandchild (rtt 2 $grandchild) (rtt.sub $grandchild (global.get $rttchild) )) (global $rttfreshgrandchild (rtt 2 $grandchild) (rtt.fresh_sub $grandchild (global.get $rttchild) )) (global $struct.new-in-global (ref $struct.A) (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) )) (func $structs (param $x (ref $struct.A)) (result (ref $struct.B)) (local $tA (ref null $struct.A)) (local $tB (ref null $struct.B)) (local $tc (ref null $struct.C)) (local $tv (ref null $vector)) (local $tm (ref null $matrix)) (drop (local.get $x) ) (drop (struct.get $struct.A 0 (local.get $x) ) ) (drop (struct.get $struct.A 1 (local.get $x) ) ) (drop (struct.get $struct.A $named (local.get $x) ) ) (drop (struct.get $struct.A $named (local.get $x) ) ) (drop (struct.get $struct.A $named (ref.null $struct.A) ) ) (drop (struct.get_u $struct.B 0 (local.get $tB) ) ) (drop (struct.get_s $struct.B 0 (local.get $tB) ) ) (drop (struct.get $grandchild 0 (ref.null $grandchild) ) ) (drop (ref.null $struct.A) ) (drop (block $label$1 (result (ref null $struct.A)) (local.get $x) ) ) (drop (if (result (ref null $struct.A)) (i32.const 1) (local.get $x) (local.get $x) ) ) (drop (loop $label$4 (result (ref null $struct.A)) (local.get $x) ) ) (drop (select (result (ref null $struct.A)) (local.get $x) (local.get $x) (i32.const 1) ) ) (struct.set $struct.C $named-mut (ref.null $struct.C) (f32.const 100) ) (struct.set $nested-child-struct 0 (ref.null $nested-child-struct) (ref.as_non_null (ref.null $grandchild) ) ) (drop (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (drop (struct.new_with_rtt $struct.A (i32.const 1) (f32.const 2.3450000286102295) (f64.const 3.14159) (rtt.canon $struct.A) ) ) (unreachable) ) (func $arrays (param $x (ref $vector)) (result (ref $matrix)) (local $tv (ref null $vector)) (local $tm (ref null $matrix)) (local $tb (ref null $bytes)) (local $tw (ref null $words)) (drop (array.new_with_rtt $vector (f64.const 3.14159) (i32.const 3) (rtt.canon $vector) ) ) (drop (array.new_default_with_rtt $matrix (i32.const 10) (rtt.canon $matrix) ) ) (drop (array.get $vector (local.get $x) (i32.const 2) ) ) (array.set $vector (local.get $x) (i32.const 2) (f64.const 2.18281828) ) (array.set $nested-child-array (ref.null $nested-child-array) (i32.const 3) (ref.as_non_null (ref.null $grandchild) ) ) (drop (array.len $vector (local.get $x) ) ) (drop (array.get $words (local.get $tw) (i32.const 1) ) ) (drop (array.get_u $bytes (local.get $tb) (i32.const 2) ) ) (drop (array.get_s $bytes (local.get $tb) (i32.const 3) ) ) (unreachable) ) (func $rtt-param-with-depth (param $rtt (rtt 1 $parent)) (nop) ) (func $rtt-param-without-depth (param $rtt (rtt $parent)) (nop) ) (func $rtt-operations (local $temp.A (ref null $struct.A)) (local $temp.B (ref null $struct.B)) (drop (ref.test (ref.null $struct.A) (rtt.canon $struct.B) ) ) (drop (ref.cast (ref.null $struct.A) (rtt.canon $struct.B) ) ) (drop (block $label$1 (result (ref $struct.B)) (local.set $temp.A (br_on_cast $label$1 (ref.null $struct.A) (rtt.canon $struct.B) ) ) (block $label$2 (drop (ref.null $struct.A) ) (unreachable) ) ) ) (drop (block $label$3 (result (ref null $struct.A)) (local.set $temp.B (br_on_cast_fail $label$3 (ref.null $struct.A) (rtt.canon $struct.B) ) ) (ref.null $struct.A) ) ) ) (func $ref.is_X (param $x anyref) (if (ref.is_func (local.get $x) ) (unreachable) ) (if (ref.is_data (local.get $x) ) (unreachable) ) (if (ref.is_i31 (local.get $x) ) (unreachable) ) ) (func $ref.as_X (param $x anyref) (drop (ref.as_non_null (local.get $x) ) ) (drop (ref.as_func (local.get $x) ) ) (drop (ref.as_data (local.get $x) ) ) (drop (ref.as_i31 (local.get $x) ) ) ) (func $br_on_X (param $x anyref) (local $y anyref) (local $z anyref) (local $temp-func funcref) (local $temp-data (ref null data)) (local $temp-i31 (ref null i31)) (block $label$1 (local.set $z (br_on_null $label$1 (local.get $x) ) ) ) (drop (block $label$2 (result funcref) (local.set $y (br_on_func $label$2 (local.get $x) ) ) (ref.null func) ) ) (drop (block $label$3 (result (ref null data)) (local.set $y (br_on_data $label$3 (local.get $x) ) ) (ref.null data) ) ) (drop (block $label$4 (result (ref null i31)) (local.set $y (br_on_i31 $label$4 (local.get $x) ) ) (ref.null i31) ) ) (drop (block $label$5 (result (ref any)) (br_on_non_null $label$5 (local.get $x) ) (unreachable) ) ) (drop (block $label$6 (result anyref) (local.set $temp-func (br_on_non_func $label$6 (local.get $x) ) ) (ref.null any) ) ) (drop (block $label$7 (result anyref) (local.set $temp-data (br_on_non_data $label$7 (local.get $x) ) ) (ref.null any) ) ) (drop (block $label$8 (result anyref) (local.set $temp-i31 (br_on_non_i31 $label$8 (local.get $x) ) ) (ref.null any) ) ) ) (func $unreachables-1 (unreachable) ) (func $unreachables-2 (drop (ref.null $struct.C) ) (unreachable) ) (func $unreachables-3 (unreachable) ) (func $unreachables-4 (unreachable) ) (func $unreachables-array-1 (unreachable) ) (func $unreachables-array-2 (drop (ref.null $vector) ) (unreachable) ) (func $unreachables-array-3 (unreachable) ) (func $unreachables-array-4 (drop (ref.null $vector) ) (unreachable) ) (func $unreachables-array-5 (drop (ref.null $vector) ) (drop (i32.const 2) ) (unreachable) ) (func $unreachables-array-6 (unreachable) ) (func $unreachables-7 (unreachable) ) (func $array-copy (param $x (ref $vector)) (param $y (ref null $vector)) (array.copy $vector $vector (local.get $x) (i32.const 11) (local.get $y) (i32.const 42) (i32.const 1337) ) ) (func $array-init (result (ref $vector)) (array.init $vector (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) (rtt.canon $vector) ) ) (func $array-init-packed (result (ref $bytes)) (array.init $bytes (i32.const 4) (i32.const 2) (i32.const 1) (rtt.canon $bytes) ) ) (func $static-operations (local $temp.A (ref null $struct.A)) (local $temp.B (ref null $struct.B)) (drop (ref.test_static $struct.B (ref.null $struct.A) ) ) (drop (ref.cast_static $struct.B (ref.null $struct.A) ) ) (drop (block $label$1 (result (ref $struct.B)) (local.set $temp.A (br_on_cast_static $label$1 $struct.B (ref.null $struct.A) ) ) (unreachable) ) ) (drop (block $label$2 (result (ref null $struct.A)) (local.set $temp.B (br_on_cast_static_fail $label$2 $struct.B (ref.null $struct.A) ) ) (unreachable) ) ) ) (func $static-constructions (drop (struct.new_default $struct.A) ) (drop (struct.new $struct.A (i32.const 1) (f32.const 2.3450000286102295) (f64.const 3.14159) ) ) (drop (array.new $vector (f64.const 3.14159) (i32.const 3) ) ) (drop (array.new_default $matrix (i32.const 10) ) ) (drop (array.init_static $vector (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) ) ) ) ) binaryen-version_108/test/heap-types.wast.fromBinary.noDebugInfo000066400000000000000000000236771423707623100252270ustar00rootroot00000000000000(module (type ${i32_f32_f64} (struct (field i32) (field f32) (field f64))) (type ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|} (struct (field i8) (field (mut i16)) (field (ref ${i32_f32_f64})) (field (mut (ref ${i32_f32_f64}))))) (type $[mut:f64] (array (mut f64))) (type $none_=>_none (func)) (type ${i32_i64} (struct (field i32) (field i64))) (type $[mut:ref?|[mut:f64]|] (array (mut (ref null $[mut:f64])))) (type ${mut:f32} (struct (field (mut f32)))) (type ${} (struct )) (type ${i32} (struct (field i32))) (type $[mut:i8] (array (mut i8))) (type $anyref_=>_none (func (param anyref))) (type ${mut:ref|{i32}|} (struct (field (mut (ref ${i32}))))) (type $ref|{i32_f32_f64}|_=>_ref|{i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|}| (func (param (ref ${i32_f32_f64})) (result (ref ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|})))) (type $ref|[mut:f64]|_=>_ref|[mut:ref?|[mut:f64]|]| (func (param (ref $[mut:f64])) (result (ref $[mut:ref?|[mut:f64]|])))) (type $[mut:i32] (array (mut i32))) (type $[mut:ref|{i32}|] (array (mut (ref ${i32})))) (type $rtt_1_{}_=>_none (func (param (rtt 1 ${})))) (type $rtt_{}_=>_none (func (param (rtt ${})))) (type $ref|[mut:f64]|_ref?|[mut:f64]|_=>_none (func (param (ref $[mut:f64]) (ref null $[mut:f64])))) (type $none_=>_ref|[mut:f64]| (func (result (ref $[mut:f64])))) (type $none_=>_ref|[mut:i8]| (func (result (ref $[mut:i8])))) (global $global$0 (rtt 0 ${}) (rtt.canon ${})) (global $global$1 (rtt 1 ${i32}) (rtt.sub ${i32} (global.get $global$0) )) (global $global$2 (rtt 2 ${i32_i64}) (rtt.sub ${i32_i64} (global.get $global$1) )) (global $global$3 (rtt 2 ${i32_i64}) (rtt.fresh_sub ${i32_i64} (global.get $global$1) )) (global $global$4 (ref ${i32_f32_f64}) (struct.new_default_with_rtt ${i32_f32_f64} (rtt.canon ${i32_f32_f64}) )) (func $0 (param $0 (ref ${i32_f32_f64})) (result (ref ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|})) (local $1 (ref null ${i32_f32_f64})) (local $2 (ref null ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|})) (local $3 (ref null ${mut:f32})) (local $4 (ref null $[mut:f64])) (local $5 (ref null $[mut:ref?|[mut:f64]|])) (drop (local.get $0) ) (drop (struct.get ${i32_f32_f64} 0 (local.get $0) ) ) (drop (struct.get ${i32_f32_f64} 1 (local.get $0) ) ) (drop (struct.get ${i32_f32_f64} 2 (local.get $0) ) ) (drop (struct.get ${i32_f32_f64} 2 (local.get $0) ) ) (drop (struct.get ${i32_f32_f64} 2 (ref.null ${i32_f32_f64}) ) ) (drop (struct.get_u ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|} 0 (local.get $2) ) ) (drop (struct.get_s ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|} 0 (local.get $2) ) ) (drop (struct.get ${i32_i64} 0 (ref.null ${i32_i64}) ) ) (drop (ref.null ${i32_f32_f64}) ) (drop (block $label$1 (result (ref null ${i32_f32_f64})) (local.get $0) ) ) (drop (if (result (ref null ${i32_f32_f64})) (i32.const 1) (local.get $0) (local.get $0) ) ) (drop (loop $label$4 (result (ref null ${i32_f32_f64})) (local.get $0) ) ) (drop (select (result (ref null ${i32_f32_f64})) (local.get $0) (local.get $0) (i32.const 1) ) ) (struct.set ${mut:f32} 0 (ref.null ${mut:f32}) (f32.const 100) ) (struct.set ${mut:ref|{i32}|} 0 (ref.null ${mut:ref|{i32}|}) (ref.as_non_null (ref.null ${i32_i64}) ) ) (drop (struct.new_default_with_rtt ${i32_f32_f64} (rtt.canon ${i32_f32_f64}) ) ) (drop (struct.new_with_rtt ${i32_f32_f64} (i32.const 1) (f32.const 2.3450000286102295) (f64.const 3.14159) (rtt.canon ${i32_f32_f64}) ) ) (unreachable) ) (func $1 (param $0 (ref $[mut:f64])) (result (ref $[mut:ref?|[mut:f64]|])) (local $1 (ref null $[mut:f64])) (local $2 (ref null $[mut:ref?|[mut:f64]|])) (local $3 (ref null $[mut:i8])) (local $4 (ref null $[mut:i32])) (drop (array.new_with_rtt $[mut:f64] (f64.const 3.14159) (i32.const 3) (rtt.canon $[mut:f64]) ) ) (drop (array.new_default_with_rtt $[mut:ref?|[mut:f64]|] (i32.const 10) (rtt.canon $[mut:ref?|[mut:f64]|]) ) ) (drop (array.get $[mut:f64] (local.get $0) (i32.const 2) ) ) (array.set $[mut:f64] (local.get $0) (i32.const 2) (f64.const 2.18281828) ) (array.set $[mut:ref|{i32}|] (ref.null $[mut:ref|{i32}|]) (i32.const 3) (ref.as_non_null (ref.null ${i32_i64}) ) ) (drop (array.len $[mut:f64] (local.get $0) ) ) (drop (array.get $[mut:i32] (local.get $4) (i32.const 1) ) ) (drop (array.get_u $[mut:i8] (local.get $3) (i32.const 2) ) ) (drop (array.get_s $[mut:i8] (local.get $3) (i32.const 3) ) ) (unreachable) ) (func $2 (param $0 (rtt 1 ${})) (nop) ) (func $3 (param $0 (rtt ${})) (nop) ) (func $4 (local $0 (ref null ${i32_f32_f64})) (local $1 (ref null ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|})) (drop (ref.test (ref.null ${i32_f32_f64}) (rtt.canon ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|}) ) ) (drop (ref.cast (ref.null ${i32_f32_f64}) (rtt.canon ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|}) ) ) (drop (block $label$1 (result (ref ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|})) (local.set $0 (br_on_cast $label$1 (ref.null ${i32_f32_f64}) (rtt.canon ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|}) ) ) (block $label$2 (drop (ref.null ${i32_f32_f64}) ) (unreachable) ) ) ) (drop (block $label$3 (result (ref null ${i32_f32_f64})) (local.set $1 (br_on_cast_fail $label$3 (ref.null ${i32_f32_f64}) (rtt.canon ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|}) ) ) (ref.null ${i32_f32_f64}) ) ) ) (func $5 (param $0 anyref) (if (ref.is_func (local.get $0) ) (unreachable) ) (if (ref.is_data (local.get $0) ) (unreachable) ) (if (ref.is_i31 (local.get $0) ) (unreachable) ) ) (func $6 (param $0 anyref) (drop (ref.as_non_null (local.get $0) ) ) (drop (ref.as_func (local.get $0) ) ) (drop (ref.as_data (local.get $0) ) ) (drop (ref.as_i31 (local.get $0) ) ) ) (func $7 (param $0 anyref) (local $1 anyref) (local $2 anyref) (local $3 funcref) (local $4 (ref null data)) (local $5 (ref null i31)) (block $label$1 (local.set $2 (br_on_null $label$1 (local.get $0) ) ) ) (drop (block $label$2 (result funcref) (local.set $1 (br_on_func $label$2 (local.get $0) ) ) (ref.null func) ) ) (drop (block $label$3 (result (ref null data)) (local.set $1 (br_on_data $label$3 (local.get $0) ) ) (ref.null data) ) ) (drop (block $label$4 (result (ref null i31)) (local.set $1 (br_on_i31 $label$4 (local.get $0) ) ) (ref.null i31) ) ) (drop (block $label$5 (result (ref any)) (br_on_non_null $label$5 (local.get $0) ) (unreachable) ) ) (drop (block $label$6 (result anyref) (local.set $3 (br_on_non_func $label$6 (local.get $0) ) ) (ref.null any) ) ) (drop (block $label$7 (result anyref) (local.set $4 (br_on_non_data $label$7 (local.get $0) ) ) (ref.null any) ) ) (drop (block $label$8 (result anyref) (local.set $5 (br_on_non_i31 $label$8 (local.get $0) ) ) (ref.null any) ) ) ) (func $8 (unreachable) ) (func $9 (drop (ref.null ${mut:f32}) ) (unreachable) ) (func $10 (unreachable) ) (func $11 (unreachable) ) (func $12 (unreachable) ) (func $13 (drop (ref.null $[mut:f64]) ) (unreachable) ) (func $14 (unreachable) ) (func $15 (drop (ref.null $[mut:f64]) ) (unreachable) ) (func $16 (drop (ref.null $[mut:f64]) ) (drop (i32.const 2) ) (unreachable) ) (func $17 (unreachable) ) (func $18 (unreachable) ) (func $19 (param $0 (ref $[mut:f64])) (param $1 (ref null $[mut:f64])) (array.copy $[mut:f64] $[mut:f64] (local.get $0) (i32.const 11) (local.get $1) (i32.const 42) (i32.const 1337) ) ) (func $20 (result (ref $[mut:f64])) (array.init $[mut:f64] (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) (rtt.canon $[mut:f64]) ) ) (func $21 (result (ref $[mut:i8])) (array.init $[mut:i8] (i32.const 4) (i32.const 2) (i32.const 1) (rtt.canon $[mut:i8]) ) ) (func $22 (local $0 (ref null ${i32_f32_f64})) (local $1 (ref null ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|})) (drop (ref.test_static ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|} (ref.null ${i32_f32_f64}) ) ) (drop (ref.cast_static ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|} (ref.null ${i32_f32_f64}) ) ) (drop (block $label$1 (result (ref ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|})) (local.set $0 (br_on_cast_static $label$1 ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|} (ref.null ${i32_f32_f64}) ) ) (unreachable) ) ) (drop (block $label$2 (result (ref null ${i32_f32_f64})) (local.set $1 (br_on_cast_static_fail $label$2 ${i8_mut:i16_ref|{i32_f32_f64}|_mut:ref|{i32_f32_f64}|} (ref.null ${i32_f32_f64}) ) ) (unreachable) ) ) ) (func $23 (drop (struct.new_default ${i32_f32_f64}) ) (drop (struct.new ${i32_f32_f64} (i32.const 1) (f32.const 2.3450000286102295) (f64.const 3.14159) ) ) (drop (array.new $[mut:f64] (f64.const 3.14159) (i32.const 3) ) ) (drop (array.new_default $[mut:ref?|[mut:f64]|] (i32.const 10) ) ) (drop (array.init_static $[mut:f64] (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) ) ) ) ) binaryen-version_108/test/hello_libcxx.cpp000066400000000000000000000001351423707623100211030ustar00rootroot00000000000000#include int main() { std::cout << "hello, world!" << std::endl; return 0; } binaryen-version_108/test/hello_libcxx.txt000066400000000000000000000000171423707623100211370ustar00rootroot00000000000000hello, world! binaryen-version_108/test/hello_world.c000066400000000000000000000001141423707623100203760ustar00rootroot00000000000000#include int main() { printf("hello, world!\n"); return 0; } binaryen-version_108/test/hello_world.txt000066400000000000000000000000171423707623100207750ustar00rootroot00000000000000hello, world! binaryen-version_108/test/hello_world.wast.from-wast000066400000000000000000000003541423707623100230560ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (memory $0 256 256) (export "add" (func $add)) (func $add (; 0 ;) (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) ) binaryen-version_108/test/hello_world.wast.fromBinary000066400000000000000000000003551423707623100232500ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (memory $0 256 256) (export "add" (func $add)) (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) binaryen-version_108/test/hello_world.wast.fromBinary.noDebugInfo000066400000000000000000000003511423707623100254420ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (memory $0 256 256) (export "add" (func $0)) (func $0 (; 0 ;) (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (local.get $1) ) ) ) binaryen-version_108/test/hello_world.wat000066400000000000000000000003441423707623100207540ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (memory $0 256 256) (export "add" (func $add)) (func $add (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) ) binaryen-version_108/test/imported_memory.wast000066400000000000000000000001511423707623100220340ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256 256)) (import "env" "table" (table 256 256 funcref)) ) binaryen-version_108/test/imported_memory.wast.from-wast000066400000000000000000000001621423707623100237540ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256 256)) (import "env" "table" (table $timport$0 256 256 funcref)) ) binaryen-version_108/test/imported_memory.wast.fromBinary000066400000000000000000000001631423707623100241460ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256 256)) (import "env" "table" (table $timport$0 256 256 funcref)) ) binaryen-version_108/test/imported_memory.wast.fromBinary.noDebugInfo000066400000000000000000000001731423707623100263450ustar00rootroot00000000000000(module (import "env" "memory" (memory $mimport$0 256 256)) (import "env" "table" (table $timport$0 256 256 funcref)) ) binaryen-version_108/test/imported_memory_growth.wast000066400000000000000000000001411423707623100234250ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256)) (import "env" "table" (table 256 funcref)) ) binaryen-version_108/test/imported_memory_growth.wast.from-wast000066400000000000000000000001521423707623100253450ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256)) (import "env" "table" (table $timport$0 256 funcref)) ) binaryen-version_108/test/imported_memory_growth.wast.fromBinary000066400000000000000000000001531423707623100255370ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256)) (import "env" "table" (table $timport$0 256 funcref)) ) binaryen-version_108/test/imported_memory_growth.wast.fromBinary.noDebugInfo000066400000000000000000000001631423707623100277360ustar00rootroot00000000000000(module (import "env" "memory" (memory $mimport$0 256)) (import "env" "table" (table $timport$0 256 funcref)) ) binaryen-version_108/test/int_ops.c000066400000000000000000000031411423707623100175420ustar00rootroot00000000000000#include // unary int EMSCRIPTEN_KEEPALIVE clz(int x) { return __builtin_clz(x); } // binary int EMSCRIPTEN_KEEPALIVE add(int x, int y) { return x + y; } int EMSCRIPTEN_KEEPALIVE sub(int x, int y) { return x - y; } int EMSCRIPTEN_KEEPALIVE mul(int x, int y) { return x * y; } int EMSCRIPTEN_KEEPALIVE sdiv(int x, int y) { return x / y; } unsigned EMSCRIPTEN_KEEPALIVE udiv(unsigned x, unsigned y) { return x / y; } int EMSCRIPTEN_KEEPALIVE srem(int x, int y) { return x % y; } unsigned EMSCRIPTEN_KEEPALIVE urem(unsigned x, unsigned y) { return x % y; } int EMSCRIPTEN_KEEPALIVE and (int x, int y) { return x & y; } int EMSCRIPTEN_KEEPALIVE or (int x, int y) { return x | y; } int EMSCRIPTEN_KEEPALIVE xor (int x, int y) { return x ^ y; } int EMSCRIPTEN_KEEPALIVE shl(int x, int y) { return x << y; } int EMSCRIPTEN_KEEPALIVE sshr(int x, int y) { return x >> y; } unsigned EMSCRIPTEN_KEEPALIVE ushr(unsigned x, unsigned y) { return x >> y; } // comparisons int EMSCRIPTEN_KEEPALIVE eq(int x, int y) { return x == y; } int EMSCRIPTEN_KEEPALIVE ne(int x, int y) { return x != y; } int EMSCRIPTEN_KEEPALIVE lts(int x, int y) { return x < y; } int EMSCRIPTEN_KEEPALIVE ltu(unsigned x, unsigned y) { return x < y; } int EMSCRIPTEN_KEEPALIVE les(int x, int y) { return x <= y; } int EMSCRIPTEN_KEEPALIVE leu(unsigned x, unsigned y) { return x <= y; } int EMSCRIPTEN_KEEPALIVE gts(int x, int y) { return x > y; } int EMSCRIPTEN_KEEPALIVE gtu(unsigned x, unsigned y) { return x > y; } int EMSCRIPTEN_KEEPALIVE ges(int x, int y) { return x >= y; } int EMSCRIPTEN_KEEPALIVE geu(unsigned x, unsigned y) { return x >= y; } binaryen-version_108/test/int_ops.emcc000066400000000000000000000000271423707623100202270ustar00rootroot00000000000000["-s", "ASSERTIONS=0"] binaryen-version_108/test/int_ops.post.js000066400000000000000000000022021423707623100207150ustar00rootroot00000000000000 // unary Module.print('clz'); Module.print(Module._clz(1)); Module.print(Module._clz(-1)); Module.print(Module._clz(8)); // binary function testBinary(name, noSecondZero, noSecondBig) { Module.print(name); function doTest(x, y) { Module.print(' ' + [x, y] + ' ==> ' + Module['_' + name](x, y)); } if (!noSecondZero) doTest(0, 0); doTest(0, 1); if (!noSecondZero) doTest(1, 0); doTest(1, 1); doTest(5, 6); doTest(6, 5); if (!noSecondBig) doTest(101, -12); if (!noSecondBig) doTest(-12, 101); doTest(-1, 5); if (!noSecondBig) doTest(5, -1); if (!noSecondBig) doTest(-1, -1); } testBinary('add'); testBinary('sub'); testBinary('mul'); testBinary('sdiv', true); testBinary('udiv', true); testBinary('srem', true); testBinary('urem', true); testBinary('and'); testBinary('or'); testBinary('xor'); testBinary('shl', false, true); testBinary('sshr', false, true); testBinary('ushr', false, true); // comparisons testBinary('eq'); testBinary('ne'); testBinary('lts'); testBinary('ltu'); testBinary('les'); testBinary('leu'); testBinary('gts'); testBinary('gtu'); testBinary('ges'); testBinary('geu'); Module.print('done.'); binaryen-version_108/test/int_ops.txt000066400000000000000000000062431423707623100201450ustar00rootroot00000000000000clz 31 0 28 add 0,0 ==> 0 0,1 ==> 1 1,0 ==> 1 1,1 ==> 2 5,6 ==> 11 6,5 ==> 11 101,-12 ==> 89 -12,101 ==> 89 -1,5 ==> 4 5,-1 ==> 4 -1,-1 ==> -2 sub 0,0 ==> 0 0,1 ==> -1 1,0 ==> 1 1,1 ==> 0 5,6 ==> -1 6,5 ==> 1 101,-12 ==> 113 -12,101 ==> -113 -1,5 ==> -6 5,-1 ==> 6 -1,-1 ==> 0 mul 0,0 ==> 0 0,1 ==> 0 1,0 ==> 0 1,1 ==> 1 5,6 ==> 30 6,5 ==> 30 101,-12 ==> -1212 -12,101 ==> -1212 -1,5 ==> -5 5,-1 ==> -5 -1,-1 ==> 1 sdiv 0,1 ==> 0 1,1 ==> 1 5,6 ==> 0 6,5 ==> 1 101,-12 ==> -8 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> -5 -1,-1 ==> 1 udiv 0,1 ==> 0 1,1 ==> 1 5,6 ==> 0 6,5 ==> 1 101,-12 ==> 0 -12,101 ==> 42524428 -1,5 ==> 858993459 5,-1 ==> 0 -1,-1 ==> 1 srem 0,1 ==> 0 1,1 ==> 0 5,6 ==> 5 6,5 ==> 1 101,-12 ==> 5 -12,101 ==> -12 -1,5 ==> -1 5,-1 ==> 0 -1,-1 ==> 0 urem 0,1 ==> 0 1,1 ==> 0 5,6 ==> 5 6,5 ==> 1 101,-12 ==> 101 -12,101 ==> 56 -1,5 ==> 0 5,-1 ==> 5 -1,-1 ==> 0 and 0,0 ==> 0 0,1 ==> 0 1,0 ==> 0 1,1 ==> 1 5,6 ==> 4 6,5 ==> 4 101,-12 ==> 100 -12,101 ==> 100 -1,5 ==> 5 5,-1 ==> 5 -1,-1 ==> -1 or 0,0 ==> 0 0,1 ==> 1 1,0 ==> 1 1,1 ==> 1 5,6 ==> 7 6,5 ==> 7 101,-12 ==> -11 -12,101 ==> -11 -1,5 ==> -1 5,-1 ==> -1 -1,-1 ==> -1 xor 0,0 ==> 0 0,1 ==> 1 1,0 ==> 1 1,1 ==> 0 5,6 ==> 3 6,5 ==> 3 101,-12 ==> -111 -12,101 ==> -111 -1,5 ==> -6 5,-1 ==> -6 -1,-1 ==> 0 shl 0,0 ==> 0 0,1 ==> 0 1,0 ==> 1 1,1 ==> 2 5,6 ==> 320 6,5 ==> 192 -1,5 ==> -32 sshr 0,0 ==> 0 0,1 ==> 0 1,0 ==> 1 1,1 ==> 0 5,6 ==> 0 6,5 ==> 0 -1,5 ==> -1 ushr 0,0 ==> 0 0,1 ==> 0 1,0 ==> 1 1,1 ==> 0 5,6 ==> 0 6,5 ==> 0 -1,5 ==> 134217727 eq 0,0 ==> 1 0,1 ==> 0 1,0 ==> 0 1,1 ==> 1 5,6 ==> 0 6,5 ==> 0 101,-12 ==> 0 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> 0 -1,-1 ==> 1 ne 0,0 ==> 0 0,1 ==> 1 1,0 ==> 1 1,1 ==> 0 5,6 ==> 1 6,5 ==> 1 101,-12 ==> 1 -12,101 ==> 1 -1,5 ==> 1 5,-1 ==> 1 -1,-1 ==> 0 lts 0,0 ==> 0 0,1 ==> 1 1,0 ==> 0 1,1 ==> 0 5,6 ==> 1 6,5 ==> 0 101,-12 ==> 0 -12,101 ==> 1 -1,5 ==> 1 5,-1 ==> 0 -1,-1 ==> 0 ltu 0,0 ==> 0 0,1 ==> 1 1,0 ==> 0 1,1 ==> 0 5,6 ==> 1 6,5 ==> 0 101,-12 ==> 1 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> 1 -1,-1 ==> 0 les 0,0 ==> 1 0,1 ==> 1 1,0 ==> 0 1,1 ==> 1 5,6 ==> 1 6,5 ==> 0 101,-12 ==> 0 -12,101 ==> 1 -1,5 ==> 1 5,-1 ==> 0 -1,-1 ==> 1 leu 0,0 ==> 1 0,1 ==> 1 1,0 ==> 0 1,1 ==> 1 5,6 ==> 1 6,5 ==> 0 101,-12 ==> 1 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> 1 -1,-1 ==> 1 gts 0,0 ==> 0 0,1 ==> 0 1,0 ==> 1 1,1 ==> 0 5,6 ==> 0 6,5 ==> 1 101,-12 ==> 1 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> 1 -1,-1 ==> 0 gtu 0,0 ==> 0 0,1 ==> 0 1,0 ==> 1 1,1 ==> 0 5,6 ==> 0 6,5 ==> 1 101,-12 ==> 0 -12,101 ==> 1 -1,5 ==> 1 5,-1 ==> 0 -1,-1 ==> 0 ges 0,0 ==> 1 0,1 ==> 0 1,0 ==> 1 1,1 ==> 1 5,6 ==> 0 6,5 ==> 1 101,-12 ==> 1 -12,101 ==> 0 -1,5 ==> 0 5,-1 ==> 1 -1,-1 ==> 1 geu 0,0 ==> 1 0,1 ==> 0 1,0 ==> 1 1,1 ==> 1 5,6 ==> 0 6,5 ==> 1 101,-12 ==> 0 -12,101 ==> 1 -1,5 ==> 1 5,-1 ==> 0 -1,-1 ==> 1 done. binaryen-version_108/test/kitchen_sink.wast000066400000000000000000000262661423707623100213110ustar00rootroot00000000000000(module (type $0 (func (result i32))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (func $kitchensink (type $0) (result i32) (block $block0 (result i32) (drop (i32.add (i32.const 10) (i32.const 10) ) ) (drop (i32.sub (i32.const 10) (i32.const 10) ) ) (drop (i32.mul (i32.const 10) (i32.const 10) ) ) (drop (i32.div_s (i32.const 10) (i32.const 10) ) ) (drop (i32.div_u (i32.const 10) (i32.const 10) ) ) (drop (i32.rem_s (i32.const 10) (i32.const 10) ) ) (drop (i32.rem_u (i32.const 10) (i32.const 10) ) ) (drop (i32.and (i32.const 10) (i32.const 10) ) ) (drop (i32.or (i32.const 10) (i32.const 10) ) ) (drop (i32.xor (i32.const 10) (i32.const 10) ) ) (drop (i32.shl (i32.const 10) (i32.const 10) ) ) (drop (i32.shr_u (i32.const 10) (i32.const 10) ) ) (drop (i32.shr_s (i32.const 10) (i32.const 10) ) ) (drop (i32.eq (i32.const 10) (i32.const 10) ) ) (drop (i32.ne (i32.const 10) (i32.const 10) ) ) (drop (i32.lt_s (i32.const 10) (i32.const 10) ) ) (drop (i32.le_s (i32.const 10) (i32.const 10) ) ) (drop (i32.lt_u (i32.const 10) (i32.const 10) ) ) (drop (i32.le_u (i32.const 10) (i32.const 10) ) ) (drop (i32.gt_s (i32.const 10) (i32.const 10) ) ) (drop (i32.ge_s (i32.const 10) (i32.const 10) ) ) (drop (i32.gt_u (i32.const 10) (i32.const 10) ) ) (drop (i32.ge_u (i32.const 10) (i32.const 10) ) ) (drop (i32.clz (i32.const 10) ) ) (drop (i32.ctz (i32.const 10) ) ) (drop (i32.popcnt (i32.const 10) ) ) (drop (i64.add (i64.const 100) (i64.const 100) ) ) (drop (i64.sub (i64.const 100) (i64.const 100) ) ) (drop (i64.mul (i64.const 100) (i64.const 100) ) ) (drop (i64.div_s (i64.const 100) (i64.const 100) ) ) (drop (i64.div_u (i64.const 100) (i64.const 100) ) ) (drop (i64.rem_s (i64.const 100) (i64.const 100) ) ) (drop (i64.rem_u (i64.const 100) (i64.const 100) ) ) (drop (i64.and (i64.const 100) (i64.const 100) ) ) (drop (i64.or (i64.const 100) (i64.const 100) ) ) (drop (i64.xor (i64.const 100) (i64.const 100) ) ) (drop (i64.shl (i64.const 100) (i64.const 100) ) ) (drop (i64.shr_u (i64.const 100) (i64.const 100) ) ) (drop (i64.shr_s (i64.const 100) (i64.const 100) ) ) (drop (i64.eq (i64.const 100) (i64.const 100) ) ) (drop (i64.ne (i64.const 100) (i64.const 100) ) ) (drop (i64.lt_s (i64.const 100) (i64.const 100) ) ) (drop (i64.le_s (i64.const 100) (i64.const 100) ) ) (drop (i64.lt_u (i64.const 100) (i64.const 100) ) ) (drop (i64.le_u (i64.const 100) (i64.const 100) ) ) (drop (i64.gt_s (i64.const 100) (i64.const 100) ) ) (drop (i64.ge_s (i64.const 100) (i64.const 100) ) ) (drop (i64.gt_u (i64.const 100) (i64.const 100) ) ) (drop (i64.ge_u (i64.const 100) (i64.const 100) ) ) (drop (i64.clz (i64.const 100) ) ) (drop (i64.ctz (i64.const 100) ) ) (drop (i64.popcnt (i64.const 100) ) ) (drop (f32.add (f32.const 10) (f32.const 10) ) ) (drop (f32.sub (f32.const 10) (f32.const 10) ) ) (drop (f32.mul (f32.const 10) (f32.const 10) ) ) (drop (f32.div (f32.const 10) (f32.const 10) ) ) (drop (f32.min (f32.const 10) (f32.const 10) ) ) (drop (f32.max (f32.const 10) (f32.const 10) ) ) (drop (f32.abs (f32.const 10) ) ) (drop (f32.neg (f32.const 10) ) ) (drop (f32.copysign (f32.const 10) (f32.const 10) ) ) (drop (f32.ceil (f32.const 10) ) ) (drop (f32.floor (f32.const 10) ) ) (drop (f32.trunc (f32.const 10) ) ) (drop (f32.nearest (f32.const 10) ) ) (drop (f32.sqrt (f32.const 10) ) ) (drop (f32.eq (f32.const 10) (f32.const 10) ) ) (drop (f32.ne (f32.const 10) (f32.const 10) ) ) (drop (f32.lt (f32.const 10) (f32.const 10) ) ) (drop (f32.le (f32.const 10) (f32.const 10) ) ) (drop (f32.gt (f32.const 10) (f32.const 10) ) ) (drop (f32.ge (f32.const 10) (f32.const 10) ) ) (drop (f64.add (f64.const 10) (f64.const 10) ) ) (drop (f64.sub (f64.const 10) (f64.const 10) ) ) (drop (f64.mul (f64.const 10) (f64.const 10) ) ) (drop (f64.div (f64.const 10) (f64.const 10) ) ) (drop (f64.min (f64.const 10) (f64.const 10) ) ) (drop (f64.max (f64.const 10) (f64.const 10) ) ) (drop (f64.abs (f64.const 10) ) ) (drop (f64.neg (f64.const 10) ) ) (drop (f64.copysign (f64.const 10) (f64.const 10) ) ) (drop (f64.ceil (f64.const 10) ) ) (drop (f64.floor (f64.const 10) ) ) (drop (f64.trunc (f64.const 10) ) ) (drop (f64.nearest (f64.const 10) ) ) (drop (f64.sqrt (f64.const 10) ) ) (drop (f64.eq (f64.const 10) (f64.const 10) ) ) (drop (f64.ne (f64.const 10) (f64.const 10) ) ) (drop (f64.lt (f64.const 10) (f64.const 10) ) ) (drop (f64.le (f64.const 10) (f64.const 10) ) ) (drop (f64.gt (f64.const 10) (f64.const 10) ) ) (drop (f64.ge (f64.const 10) (f64.const 10) ) ) (drop (i32.trunc_f32_s (f32.const 10) ) ) (drop (i32.trunc_f64_s (f64.const 10) ) ) (drop (i32.trunc_f32_u (f32.const 10) ) ) (drop (i32.trunc_f64_u (f64.const 10) ) ) (drop (i32.trunc_sat_f32_s (f32.const 10) ) ) (drop (i32.trunc_sat_f32_u (f32.const 10) ) ) (drop (i32.trunc_sat_f64_s (f64.const 10) ) ) (drop (i32.trunc_sat_f64_u (f64.const 10) ) ) (drop (i32.wrap_i64 (i64.const 100) ) ) (drop (i64.trunc_f32_s (f32.const 10) ) ) (drop (i64.trunc_f64_s (f64.const 10) ) ) (drop (i64.trunc_f32_u (f32.const 10) ) ) (drop (i64.trunc_f64_u (f64.const 10) ) ) (drop (i64.trunc_sat_f32_s (f32.const 10) ) ) (drop (i64.trunc_sat_f32_u (f32.const 10) ) ) (drop (i64.trunc_sat_f64_s (f64.const 10) ) ) (drop (i64.trunc_sat_f64_u (f64.const 10) ) ) (drop (i64.extend_i32_s (i32.const 10) ) ) (drop (i64.extend_i32_u (i32.const 10) ) ) (drop (f32.convert_i32_s (i32.const 10) ) ) (drop (f32.convert_i32_u (i32.const 10) ) ) (drop (f32.convert_i64_s (i64.const 100) ) ) (drop (f32.convert_i64_u (i64.const 100) ) ) (drop (f32.demote_f64 (f64.const 10) ) ) (drop (f32.reinterpret_i32 (i32.const 10) ) ) (drop (f64.convert_i32_s (i32.const 10) ) ) (drop (f64.convert_i32_u (i32.const 10) ) ) (drop (f64.convert_i64_s (i64.const 100) ) ) (drop (f64.convert_i64_u (i64.const 100) ) ) (drop (f64.promote_f32 (f32.const 10) ) ) (drop (f64.reinterpret_i64 (i64.const 100) ) ) (drop (i32.reinterpret_f32 (f32.const 10) ) ) (drop (i64.reinterpret_f64 (f64.const 10) ) ) (i32.const 0) ) ) ) binaryen-version_108/test/kitchen_sink.wast.from-wast000066400000000000000000000207611423707623100232210ustar00rootroot00000000000000(module (type $0 (func (result i32))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (func $kitchensink (result i32) (block $block0 (result i32) (drop (i32.add (i32.const 10) (i32.const 10) ) ) (drop (i32.sub (i32.const 10) (i32.const 10) ) ) (drop (i32.mul (i32.const 10) (i32.const 10) ) ) (drop (i32.div_s (i32.const 10) (i32.const 10) ) ) (drop (i32.div_u (i32.const 10) (i32.const 10) ) ) (drop (i32.rem_s (i32.const 10) (i32.const 10) ) ) (drop (i32.rem_u (i32.const 10) (i32.const 10) ) ) (drop (i32.and (i32.const 10) (i32.const 10) ) ) (drop (i32.or (i32.const 10) (i32.const 10) ) ) (drop (i32.xor (i32.const 10) (i32.const 10) ) ) (drop (i32.shl (i32.const 10) (i32.const 10) ) ) (drop (i32.shr_u (i32.const 10) (i32.const 10) ) ) (drop (i32.shr_s (i32.const 10) (i32.const 10) ) ) (drop (i32.eq (i32.const 10) (i32.const 10) ) ) (drop (i32.ne (i32.const 10) (i32.const 10) ) ) (drop (i32.lt_s (i32.const 10) (i32.const 10) ) ) (drop (i32.le_s (i32.const 10) (i32.const 10) ) ) (drop (i32.lt_u (i32.const 10) (i32.const 10) ) ) (drop (i32.le_u (i32.const 10) (i32.const 10) ) ) (drop (i32.gt_s (i32.const 10) (i32.const 10) ) ) (drop (i32.ge_s (i32.const 10) (i32.const 10) ) ) (drop (i32.gt_u (i32.const 10) (i32.const 10) ) ) (drop (i32.ge_u (i32.const 10) (i32.const 10) ) ) (drop (i32.clz (i32.const 10) ) ) (drop (i32.ctz (i32.const 10) ) ) (drop (i32.popcnt (i32.const 10) ) ) (drop (i64.add (i64.const 100) (i64.const 100) ) ) (drop (i64.sub (i64.const 100) (i64.const 100) ) ) (drop (i64.mul (i64.const 100) (i64.const 100) ) ) (drop (i64.div_s (i64.const 100) (i64.const 100) ) ) (drop (i64.div_u (i64.const 100) (i64.const 100) ) ) (drop (i64.rem_s (i64.const 100) (i64.const 100) ) ) (drop (i64.rem_u (i64.const 100) (i64.const 100) ) ) (drop (i64.and (i64.const 100) (i64.const 100) ) ) (drop (i64.or (i64.const 100) (i64.const 100) ) ) (drop (i64.xor (i64.const 100) (i64.const 100) ) ) (drop (i64.shl (i64.const 100) (i64.const 100) ) ) (drop (i64.shr_u (i64.const 100) (i64.const 100) ) ) (drop (i64.shr_s (i64.const 100) (i64.const 100) ) ) (drop (i64.eq (i64.const 100) (i64.const 100) ) ) (drop (i64.ne (i64.const 100) (i64.const 100) ) ) (drop (i64.lt_s (i64.const 100) (i64.const 100) ) ) (drop (i64.le_s (i64.const 100) (i64.const 100) ) ) (drop (i64.lt_u (i64.const 100) (i64.const 100) ) ) (drop (i64.le_u (i64.const 100) (i64.const 100) ) ) (drop (i64.gt_s (i64.const 100) (i64.const 100) ) ) (drop (i64.ge_s (i64.const 100) (i64.const 100) ) ) (drop (i64.gt_u (i64.const 100) (i64.const 100) ) ) (drop (i64.ge_u (i64.const 100) (i64.const 100) ) ) (drop (i64.clz (i64.const 100) ) ) (drop (i64.ctz (i64.const 100) ) ) (drop (i64.popcnt (i64.const 100) ) ) (drop (f32.add (f32.const 10) (f32.const 10) ) ) (drop (f32.sub (f32.const 10) (f32.const 10) ) ) (drop (f32.mul (f32.const 10) (f32.const 10) ) ) (drop (f32.div (f32.const 10) (f32.const 10) ) ) (drop (f32.min (f32.const 10) (f32.const 10) ) ) (drop (f32.max (f32.const 10) (f32.const 10) ) ) (drop (f32.abs (f32.const 10) ) ) (drop (f32.neg (f32.const 10) ) ) (drop (f32.copysign (f32.const 10) (f32.const 10) ) ) (drop (f32.ceil (f32.const 10) ) ) (drop (f32.floor (f32.const 10) ) ) (drop (f32.trunc (f32.const 10) ) ) (drop (f32.nearest (f32.const 10) ) ) (drop (f32.sqrt (f32.const 10) ) ) (drop (f32.eq (f32.const 10) (f32.const 10) ) ) (drop (f32.ne (f32.const 10) (f32.const 10) ) ) (drop (f32.lt (f32.const 10) (f32.const 10) ) ) (drop (f32.le (f32.const 10) (f32.const 10) ) ) (drop (f32.gt (f32.const 10) (f32.const 10) ) ) (drop (f32.ge (f32.const 10) (f32.const 10) ) ) (drop (f64.add (f64.const 10) (f64.const 10) ) ) (drop (f64.sub (f64.const 10) (f64.const 10) ) ) (drop (f64.mul (f64.const 10) (f64.const 10) ) ) (drop (f64.div (f64.const 10) (f64.const 10) ) ) (drop (f64.min (f64.const 10) (f64.const 10) ) ) (drop (f64.max (f64.const 10) (f64.const 10) ) ) (drop (f64.abs (f64.const 10) ) ) (drop (f64.neg (f64.const 10) ) ) (drop (f64.copysign (f64.const 10) (f64.const 10) ) ) (drop (f64.ceil (f64.const 10) ) ) (drop (f64.floor (f64.const 10) ) ) (drop (f64.trunc (f64.const 10) ) ) (drop (f64.nearest (f64.const 10) ) ) (drop (f64.sqrt (f64.const 10) ) ) (drop (f64.eq (f64.const 10) (f64.const 10) ) ) (drop (f64.ne (f64.const 10) (f64.const 10) ) ) (drop (f64.lt (f64.const 10) (f64.const 10) ) ) (drop (f64.le (f64.const 10) (f64.const 10) ) ) (drop (f64.gt (f64.const 10) (f64.const 10) ) ) (drop (f64.ge (f64.const 10) (f64.const 10) ) ) (drop (i32.trunc_f32_s (f32.const 10) ) ) (drop (i32.trunc_f64_s (f64.const 10) ) ) (drop (i32.trunc_f32_u (f32.const 10) ) ) (drop (i32.trunc_f64_u (f64.const 10) ) ) (drop (i32.trunc_sat_f32_s (f32.const 10) ) ) (drop (i32.trunc_sat_f32_u (f32.const 10) ) ) (drop (i32.trunc_sat_f64_s (f64.const 10) ) ) (drop (i32.trunc_sat_f64_u (f64.const 10) ) ) (drop (i32.wrap_i64 (i64.const 100) ) ) (drop (i64.trunc_f32_s (f32.const 10) ) ) (drop (i64.trunc_f64_s (f64.const 10) ) ) (drop (i64.trunc_f32_u (f32.const 10) ) ) (drop (i64.trunc_f64_u (f64.const 10) ) ) (drop (i64.trunc_sat_f32_s (f32.const 10) ) ) (drop (i64.trunc_sat_f32_u (f32.const 10) ) ) (drop (i64.trunc_sat_f64_s (f64.const 10) ) ) (drop (i64.trunc_sat_f64_u (f64.const 10) ) ) (drop (i64.extend_i32_s (i32.const 10) ) ) (drop (i64.extend_i32_u (i32.const 10) ) ) (drop (f32.convert_i32_s (i32.const 10) ) ) (drop (f32.convert_i32_u (i32.const 10) ) ) (drop (f32.convert_i64_s (i64.const 100) ) ) (drop (f32.convert_i64_u (i64.const 100) ) ) (drop (f32.demote_f64 (f64.const 10) ) ) (drop (f32.reinterpret_i32 (i32.const 10) ) ) (drop (f64.convert_i32_s (i32.const 10) ) ) (drop (f64.convert_i32_u (i32.const 10) ) ) (drop (f64.convert_i64_s (i64.const 100) ) ) (drop (f64.convert_i64_u (i64.const 100) ) ) (drop (f64.promote_f32 (f32.const 10) ) ) (drop (f64.reinterpret_i64 (i64.const 100) ) ) (drop (i32.reinterpret_f32 (f32.const 10) ) ) (drop (i64.reinterpret_f64 (f64.const 10) ) ) (i32.const 0) ) ) ) binaryen-version_108/test/kitchen_sink.wast.fromBinary000066400000000000000000000174261423707623100234160ustar00rootroot00000000000000(module (type $0 (func (result i32))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (func $kitchensink (result i32) (drop (i32.add (i32.const 10) (i32.const 10) ) ) (drop (i32.sub (i32.const 10) (i32.const 10) ) ) (drop (i32.mul (i32.const 10) (i32.const 10) ) ) (drop (i32.div_s (i32.const 10) (i32.const 10) ) ) (drop (i32.div_u (i32.const 10) (i32.const 10) ) ) (drop (i32.rem_s (i32.const 10) (i32.const 10) ) ) (drop (i32.rem_u (i32.const 10) (i32.const 10) ) ) (drop (i32.and (i32.const 10) (i32.const 10) ) ) (drop (i32.or (i32.const 10) (i32.const 10) ) ) (drop (i32.xor (i32.const 10) (i32.const 10) ) ) (drop (i32.shl (i32.const 10) (i32.const 10) ) ) (drop (i32.shr_u (i32.const 10) (i32.const 10) ) ) (drop (i32.shr_s (i32.const 10) (i32.const 10) ) ) (drop (i32.eq (i32.const 10) (i32.const 10) ) ) (drop (i32.ne (i32.const 10) (i32.const 10) ) ) (drop (i32.lt_s (i32.const 10) (i32.const 10) ) ) (drop (i32.le_s (i32.const 10) (i32.const 10) ) ) (drop (i32.lt_u (i32.const 10) (i32.const 10) ) ) (drop (i32.le_u (i32.const 10) (i32.const 10) ) ) (drop (i32.gt_s (i32.const 10) (i32.const 10) ) ) (drop (i32.ge_s (i32.const 10) (i32.const 10) ) ) (drop (i32.gt_u (i32.const 10) (i32.const 10) ) ) (drop (i32.ge_u (i32.const 10) (i32.const 10) ) ) (drop (i32.clz (i32.const 10) ) ) (drop (i32.ctz (i32.const 10) ) ) (drop (i32.popcnt (i32.const 10) ) ) (drop (i64.add (i64.const 100) (i64.const 100) ) ) (drop (i64.sub (i64.const 100) (i64.const 100) ) ) (drop (i64.mul (i64.const 100) (i64.const 100) ) ) (drop (i64.div_s (i64.const 100) (i64.const 100) ) ) (drop (i64.div_u (i64.const 100) (i64.const 100) ) ) (drop (i64.rem_s (i64.const 100) (i64.const 100) ) ) (drop (i64.rem_u (i64.const 100) (i64.const 100) ) ) (drop (i64.and (i64.const 100) (i64.const 100) ) ) (drop (i64.or (i64.const 100) (i64.const 100) ) ) (drop (i64.xor (i64.const 100) (i64.const 100) ) ) (drop (i64.shl (i64.const 100) (i64.const 100) ) ) (drop (i64.shr_u (i64.const 100) (i64.const 100) ) ) (drop (i64.shr_s (i64.const 100) (i64.const 100) ) ) (drop (i64.eq (i64.const 100) (i64.const 100) ) ) (drop (i64.ne (i64.const 100) (i64.const 100) ) ) (drop (i64.lt_s (i64.const 100) (i64.const 100) ) ) (drop (i64.le_s (i64.const 100) (i64.const 100) ) ) (drop (i64.lt_u (i64.const 100) (i64.const 100) ) ) (drop (i64.le_u (i64.const 100) (i64.const 100) ) ) (drop (i64.gt_s (i64.const 100) (i64.const 100) ) ) (drop (i64.ge_s (i64.const 100) (i64.const 100) ) ) (drop (i64.gt_u (i64.const 100) (i64.const 100) ) ) (drop (i64.ge_u (i64.const 100) (i64.const 100) ) ) (drop (i64.clz (i64.const 100) ) ) (drop (i64.ctz (i64.const 100) ) ) (drop (i64.popcnt (i64.const 100) ) ) (drop (f32.add (f32.const 10) (f32.const 10) ) ) (drop (f32.sub (f32.const 10) (f32.const 10) ) ) (drop (f32.mul (f32.const 10) (f32.const 10) ) ) (drop (f32.div (f32.const 10) (f32.const 10) ) ) (drop (f32.min (f32.const 10) (f32.const 10) ) ) (drop (f32.max (f32.const 10) (f32.const 10) ) ) (drop (f32.abs (f32.const 10) ) ) (drop (f32.neg (f32.const 10) ) ) (drop (f32.copysign (f32.const 10) (f32.const 10) ) ) (drop (f32.ceil (f32.const 10) ) ) (drop (f32.floor (f32.const 10) ) ) (drop (f32.trunc (f32.const 10) ) ) (drop (f32.nearest (f32.const 10) ) ) (drop (f32.sqrt (f32.const 10) ) ) (drop (f32.eq (f32.const 10) (f32.const 10) ) ) (drop (f32.ne (f32.const 10) (f32.const 10) ) ) (drop (f32.lt (f32.const 10) (f32.const 10) ) ) (drop (f32.le (f32.const 10) (f32.const 10) ) ) (drop (f32.gt (f32.const 10) (f32.const 10) ) ) (drop (f32.ge (f32.const 10) (f32.const 10) ) ) (drop (f64.add (f64.const 10) (f64.const 10) ) ) (drop (f64.sub (f64.const 10) (f64.const 10) ) ) (drop (f64.mul (f64.const 10) (f64.const 10) ) ) (drop (f64.div (f64.const 10) (f64.const 10) ) ) (drop (f64.min (f64.const 10) (f64.const 10) ) ) (drop (f64.max (f64.const 10) (f64.const 10) ) ) (drop (f64.abs (f64.const 10) ) ) (drop (f64.neg (f64.const 10) ) ) (drop (f64.copysign (f64.const 10) (f64.const 10) ) ) (drop (f64.ceil (f64.const 10) ) ) (drop (f64.floor (f64.const 10) ) ) (drop (f64.trunc (f64.const 10) ) ) (drop (f64.nearest (f64.const 10) ) ) (drop (f64.sqrt (f64.const 10) ) ) (drop (f64.eq (f64.const 10) (f64.const 10) ) ) (drop (f64.ne (f64.const 10) (f64.const 10) ) ) (drop (f64.lt (f64.const 10) (f64.const 10) ) ) (drop (f64.le (f64.const 10) (f64.const 10) ) ) (drop (f64.gt (f64.const 10) (f64.const 10) ) ) (drop (f64.ge (f64.const 10) (f64.const 10) ) ) (drop (i32.trunc_f32_s (f32.const 10) ) ) (drop (i32.trunc_f64_s (f64.const 10) ) ) (drop (i32.trunc_f32_u (f32.const 10) ) ) (drop (i32.trunc_f64_u (f64.const 10) ) ) (drop (i32.trunc_sat_f32_s (f32.const 10) ) ) (drop (i32.trunc_sat_f32_u (f32.const 10) ) ) (drop (i32.trunc_sat_f64_s (f64.const 10) ) ) (drop (i32.trunc_sat_f64_u (f64.const 10) ) ) (drop (i32.wrap_i64 (i64.const 100) ) ) (drop (i64.trunc_f32_s (f32.const 10) ) ) (drop (i64.trunc_f64_s (f64.const 10) ) ) (drop (i64.trunc_f32_u (f32.const 10) ) ) (drop (i64.trunc_f64_u (f64.const 10) ) ) (drop (i64.trunc_sat_f32_s (f32.const 10) ) ) (drop (i64.trunc_sat_f32_u (f32.const 10) ) ) (drop (i64.trunc_sat_f64_s (f64.const 10) ) ) (drop (i64.trunc_sat_f64_u (f64.const 10) ) ) (drop (i64.extend_i32_s (i32.const 10) ) ) (drop (i64.extend_i32_u (i32.const 10) ) ) (drop (f32.convert_i32_s (i32.const 10) ) ) (drop (f32.convert_i32_u (i32.const 10) ) ) (drop (f32.convert_i64_s (i64.const 100) ) ) (drop (f32.convert_i64_u (i64.const 100) ) ) (drop (f32.demote_f64 (f64.const 10) ) ) (drop (f32.reinterpret_i32 (i32.const 10) ) ) (drop (f64.convert_i32_s (i32.const 10) ) ) (drop (f64.convert_i32_u (i32.const 10) ) ) (drop (f64.convert_i64_s (i64.const 100) ) ) (drop (f64.convert_i64_u (i64.const 100) ) ) (drop (f64.promote_f32 (f32.const 10) ) ) (drop (f64.reinterpret_i64 (i64.const 100) ) ) (drop (i32.reinterpret_f32 (f32.const 10) ) ) (drop (i64.reinterpret_f64 (f64.const 10) ) ) (i32.const 0) ) ) binaryen-version_108/test/kitchen_sink.wast.fromBinary.noDebugInfo000066400000000000000000000174261423707623100256140ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (func $0 (result i32) (drop (i32.add (i32.const 10) (i32.const 10) ) ) (drop (i32.sub (i32.const 10) (i32.const 10) ) ) (drop (i32.mul (i32.const 10) (i32.const 10) ) ) (drop (i32.div_s (i32.const 10) (i32.const 10) ) ) (drop (i32.div_u (i32.const 10) (i32.const 10) ) ) (drop (i32.rem_s (i32.const 10) (i32.const 10) ) ) (drop (i32.rem_u (i32.const 10) (i32.const 10) ) ) (drop (i32.and (i32.const 10) (i32.const 10) ) ) (drop (i32.or (i32.const 10) (i32.const 10) ) ) (drop (i32.xor (i32.const 10) (i32.const 10) ) ) (drop (i32.shl (i32.const 10) (i32.const 10) ) ) (drop (i32.shr_u (i32.const 10) (i32.const 10) ) ) (drop (i32.shr_s (i32.const 10) (i32.const 10) ) ) (drop (i32.eq (i32.const 10) (i32.const 10) ) ) (drop (i32.ne (i32.const 10) (i32.const 10) ) ) (drop (i32.lt_s (i32.const 10) (i32.const 10) ) ) (drop (i32.le_s (i32.const 10) (i32.const 10) ) ) (drop (i32.lt_u (i32.const 10) (i32.const 10) ) ) (drop (i32.le_u (i32.const 10) (i32.const 10) ) ) (drop (i32.gt_s (i32.const 10) (i32.const 10) ) ) (drop (i32.ge_s (i32.const 10) (i32.const 10) ) ) (drop (i32.gt_u (i32.const 10) (i32.const 10) ) ) (drop (i32.ge_u (i32.const 10) (i32.const 10) ) ) (drop (i32.clz (i32.const 10) ) ) (drop (i32.ctz (i32.const 10) ) ) (drop (i32.popcnt (i32.const 10) ) ) (drop (i64.add (i64.const 100) (i64.const 100) ) ) (drop (i64.sub (i64.const 100) (i64.const 100) ) ) (drop (i64.mul (i64.const 100) (i64.const 100) ) ) (drop (i64.div_s (i64.const 100) (i64.const 100) ) ) (drop (i64.div_u (i64.const 100) (i64.const 100) ) ) (drop (i64.rem_s (i64.const 100) (i64.const 100) ) ) (drop (i64.rem_u (i64.const 100) (i64.const 100) ) ) (drop (i64.and (i64.const 100) (i64.const 100) ) ) (drop (i64.or (i64.const 100) (i64.const 100) ) ) (drop (i64.xor (i64.const 100) (i64.const 100) ) ) (drop (i64.shl (i64.const 100) (i64.const 100) ) ) (drop (i64.shr_u (i64.const 100) (i64.const 100) ) ) (drop (i64.shr_s (i64.const 100) (i64.const 100) ) ) (drop (i64.eq (i64.const 100) (i64.const 100) ) ) (drop (i64.ne (i64.const 100) (i64.const 100) ) ) (drop (i64.lt_s (i64.const 100) (i64.const 100) ) ) (drop (i64.le_s (i64.const 100) (i64.const 100) ) ) (drop (i64.lt_u (i64.const 100) (i64.const 100) ) ) (drop (i64.le_u (i64.const 100) (i64.const 100) ) ) (drop (i64.gt_s (i64.const 100) (i64.const 100) ) ) (drop (i64.ge_s (i64.const 100) (i64.const 100) ) ) (drop (i64.gt_u (i64.const 100) (i64.const 100) ) ) (drop (i64.ge_u (i64.const 100) (i64.const 100) ) ) (drop (i64.clz (i64.const 100) ) ) (drop (i64.ctz (i64.const 100) ) ) (drop (i64.popcnt (i64.const 100) ) ) (drop (f32.add (f32.const 10) (f32.const 10) ) ) (drop (f32.sub (f32.const 10) (f32.const 10) ) ) (drop (f32.mul (f32.const 10) (f32.const 10) ) ) (drop (f32.div (f32.const 10) (f32.const 10) ) ) (drop (f32.min (f32.const 10) (f32.const 10) ) ) (drop (f32.max (f32.const 10) (f32.const 10) ) ) (drop (f32.abs (f32.const 10) ) ) (drop (f32.neg (f32.const 10) ) ) (drop (f32.copysign (f32.const 10) (f32.const 10) ) ) (drop (f32.ceil (f32.const 10) ) ) (drop (f32.floor (f32.const 10) ) ) (drop (f32.trunc (f32.const 10) ) ) (drop (f32.nearest (f32.const 10) ) ) (drop (f32.sqrt (f32.const 10) ) ) (drop (f32.eq (f32.const 10) (f32.const 10) ) ) (drop (f32.ne (f32.const 10) (f32.const 10) ) ) (drop (f32.lt (f32.const 10) (f32.const 10) ) ) (drop (f32.le (f32.const 10) (f32.const 10) ) ) (drop (f32.gt (f32.const 10) (f32.const 10) ) ) (drop (f32.ge (f32.const 10) (f32.const 10) ) ) (drop (f64.add (f64.const 10) (f64.const 10) ) ) (drop (f64.sub (f64.const 10) (f64.const 10) ) ) (drop (f64.mul (f64.const 10) (f64.const 10) ) ) (drop (f64.div (f64.const 10) (f64.const 10) ) ) (drop (f64.min (f64.const 10) (f64.const 10) ) ) (drop (f64.max (f64.const 10) (f64.const 10) ) ) (drop (f64.abs (f64.const 10) ) ) (drop (f64.neg (f64.const 10) ) ) (drop (f64.copysign (f64.const 10) (f64.const 10) ) ) (drop (f64.ceil (f64.const 10) ) ) (drop (f64.floor (f64.const 10) ) ) (drop (f64.trunc (f64.const 10) ) ) (drop (f64.nearest (f64.const 10) ) ) (drop (f64.sqrt (f64.const 10) ) ) (drop (f64.eq (f64.const 10) (f64.const 10) ) ) (drop (f64.ne (f64.const 10) (f64.const 10) ) ) (drop (f64.lt (f64.const 10) (f64.const 10) ) ) (drop (f64.le (f64.const 10) (f64.const 10) ) ) (drop (f64.gt (f64.const 10) (f64.const 10) ) ) (drop (f64.ge (f64.const 10) (f64.const 10) ) ) (drop (i32.trunc_f32_s (f32.const 10) ) ) (drop (i32.trunc_f64_s (f64.const 10) ) ) (drop (i32.trunc_f32_u (f32.const 10) ) ) (drop (i32.trunc_f64_u (f64.const 10) ) ) (drop (i32.trunc_sat_f32_s (f32.const 10) ) ) (drop (i32.trunc_sat_f32_u (f32.const 10) ) ) (drop (i32.trunc_sat_f64_s (f64.const 10) ) ) (drop (i32.trunc_sat_f64_u (f64.const 10) ) ) (drop (i32.wrap_i64 (i64.const 100) ) ) (drop (i64.trunc_f32_s (f32.const 10) ) ) (drop (i64.trunc_f64_s (f64.const 10) ) ) (drop (i64.trunc_f32_u (f32.const 10) ) ) (drop (i64.trunc_f64_u (f64.const 10) ) ) (drop (i64.trunc_sat_f32_s (f32.const 10) ) ) (drop (i64.trunc_sat_f32_u (f32.const 10) ) ) (drop (i64.trunc_sat_f64_s (f64.const 10) ) ) (drop (i64.trunc_sat_f64_u (f64.const 10) ) ) (drop (i64.extend_i32_s (i32.const 10) ) ) (drop (i64.extend_i32_u (i32.const 10) ) ) (drop (f32.convert_i32_s (i32.const 10) ) ) (drop (f32.convert_i32_u (i32.const 10) ) ) (drop (f32.convert_i64_s (i64.const 100) ) ) (drop (f32.convert_i64_u (i64.const 100) ) ) (drop (f32.demote_f64 (f64.const 10) ) ) (drop (f32.reinterpret_i32 (i32.const 10) ) ) (drop (f64.convert_i32_s (i32.const 10) ) ) (drop (f64.convert_i32_u (i32.const 10) ) ) (drop (f64.convert_i64_s (i64.const 100) ) ) (drop (f64.convert_i64_u (i64.const 100) ) ) (drop (f64.promote_f32 (f32.const 10) ) ) (drop (f64.reinterpret_i64 (i64.const 100) ) ) (drop (i32.reinterpret_f32 (f32.const 10) ) ) (drop (i64.reinterpret_f64 (f64.const 10) ) ) (i32.const 0) ) ) binaryen-version_108/test/let.txt000066400000000000000000000020011423707623100172420ustar00rootroot00000000000000;; source code for let.wasm, which was created by wasp (module (type $vector (array (mut f64))) (func $main (local $x i32) (local $y i32) (drop (local.get $x)) ;; 0 is the index appearing in the binary ;; first let (array.new_with_rtt $vector (f64.const 3.14159) (i32.const 1) (rtt.canon $vector) ) (let (local $v (ref $vector)) (drop (local.get $v)) ;; 0 (drop (local.get $x)) ;; 1 ;; another one, nested (array.new_with_rtt $vector (f64.const 1234) (i32.const 2) (rtt.canon $vector) ) (let (local $w (ref $vector)) (drop (local.get $v)) ;; 1 (drop (local.get $w)) ;; 0 (drop (local.get $x)) ;; 2 ) ) ;; another one, later (array.new_with_rtt $vector (f64.const 2.1828) (i32.const 3) (rtt.canon $vector) ) (let (local $v (ref $vector)) (drop (local.get $v)) ;; 0 (drop (local.get $x)) ;; 1 ) (drop (local.get $x)) ;; 0 ) ) binaryen-version_108/test/let.wasm000066400000000000000000000002001423707623100173710ustar00rootroot00000000000000asm^|` ig Dn†ðù! @Aû0û@k  DH“@Aû0û@k    DŸ«­Ø_v@Aû0û@k    binaryen-version_108/test/let.wasm.fromBinary000066400000000000000000000022521423707623100215110ustar00rootroot00000000000000(module (type $[mut:f64] (array (mut f64))) (type $none_=>_none (func)) (func $0 (local $0 i32) (local $1 i32) (local $2 (ref null $[mut:f64])) (local $3 (ref null $[mut:f64])) (local $4 (ref null $[mut:f64])) (drop (local.get $0) ) (block (local.set $2 (array.new_with_rtt $[mut:f64] (f64.const 3.14159) (i32.const 1) (rtt.canon $[mut:f64]) ) ) (block (drop (ref.as_non_null (local.get $2) ) ) (drop (local.get $0) ) (block (local.set $3 (array.new_with_rtt $[mut:f64] (f64.const 1234) (i32.const 2) (rtt.canon $[mut:f64]) ) ) (block (drop (ref.as_non_null (local.get $2) ) ) (drop (ref.as_non_null (local.get $3) ) ) (drop (local.get $0) ) ) ) ) ) (block (local.set $4 (array.new_with_rtt $[mut:f64] (f64.const 2.1828) (i32.const 3) (rtt.canon $[mut:f64]) ) ) (block (drop (ref.as_non_null (local.get $4) ) ) (drop (local.get $0) ) ) ) (drop (local.get $0) ) ) ) binaryen-version_108/test/linker/000077500000000000000000000000001423707623100172105ustar00rootroot00000000000000binaryen-version_108/test/linker/archive/000077500000000000000000000000001423707623100206315ustar00rootroot00000000000000binaryen-version_108/test/linker/archive/barlong.a000066400000000000000000000010141423707623100224130ustar00rootroot00000000000000! // 32 ` bar_with_very_long_filename.s/ /0 0 0 0 644 363 ` .text .file "src/work/binaryen/test/linker/archive/bar.c" .section .text.bar,"ax",@progbits .hidden bar .globl bar .type bar,@function bar: # @bar # BB#0: # %entry return .endfunc .Lfunc_end0: .size bar, .Lfunc_end0-bar .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" binaryen-version_108/test/linker/archive/foobar.a000066400000000000000000000032701423707623100222450ustar00rootroot00000000000000! quux.s/ 0 0 0 644 345 ` .text .file "test/linker/quux.c" .section .text.quux,"ax",@progbits .hidden quux .globl quux .type quux,@function quux: # @quux # BB#0: # %entry return .endfunc .Lfunc_end0: .size quux, .Lfunc_end0-quux .ident "clang version 3.9.0 (trunk 268553) (llvm/trunk 268561)" foo.s/ 0 0 0 644 407 ` .text .file "src/work/binaryen/test/linker/foo.c" .section .text.foo,"ax",@progbits .hidden foo .globl foo .type foo,@function foo: # @foo .result i32 .local i32 # BB#0: # %entry i32.const $0=, 43 return $0 .endfunc .Lfunc_end0: .size foo, .Lfunc_end0-foo .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" bar.s/ 0 0 0 644 361 ` .text .file "test/linker/bar.c" .section .text.bar,"ax",@progbits .hidden bar .globl bar .type bar,@function bar: # @bar # BB#0: # %entry call quux@FUNCTION return .endfunc .Lfunc_end0: .size bar, .Lfunc_end0-bar .ident "clang version 3.9.0 (trunk 268553) (llvm/trunk 268561)" baz.s/ 0 0 0 644 355 ` .text .file "src/work/binaryen/test/linker/baz.c" .section .text.baz,"ax",@progbits .hidden baz .globl baz .type baz,@function baz: # @baz # BB#0: # %entry return .endfunc .Lfunc_end0: .size baz, .Lfunc_end0-baz .ident "clang version 3.9.0 (trunk 267883) (llvm/trunk 267901)" binaryen-version_108/test/linker/bar.c000066400000000000000000000000441423707623100201160ustar00rootroot00000000000000void quux(); void bar() { quux(); } binaryen-version_108/test/linker/baz.c000066400000000000000000000000161423707623100201250ustar00rootroot00000000000000void baz() {} binaryen-version_108/test/linker/foo.c000066400000000000000000000000311423707623100201310ustar00rootroot00000000000000int foo() { return 43; } binaryen-version_108/test/linker/main.c000066400000000000000000000001101423707623100202700ustar00rootroot00000000000000int foo() { return 42; } void bar(); int main() { foo(); bar(); } binaryen-version_108/test/linker/quux.c000066400000000000000000000000171423707623100203540ustar00rootroot00000000000000void quux() {} binaryen-version_108/test/lit/000077500000000000000000000000001423707623100165145ustar00rootroot00000000000000binaryen-version_108/test/lit/CMakeLists.txt000066400000000000000000000000711423707623100212520ustar00rootroot00000000000000configure_file(lit.site.cfg.py.in lit.site.cfg.py @ONLY) binaryen-version_108/test/lit/binary/000077500000000000000000000000001423707623100200005ustar00rootroot00000000000000binaryen-version_108/test/lit/binary/bad-ref-as.test000066400000000000000000000002701423707623100226010ustar00rootroot00000000000000;; Test that we error properly on a file with a ref.as of a non-ref type. ;; RUN: not wasm-opt %s.wasm 2>&1 | filecheck %s ;; CHECK: parse exception: bad input type for ref.as: i32 binaryen-version_108/test/lit/binary/bad-ref-as.test.wasm000066400000000000000000000000351423707623100235460ustar00rootroot00000000000000asm` A ûX binaryen-version_108/test/lit/binary/dylink.test000066400000000000000000000010041423707623100221660ustar00rootroot00000000000000# Verify that extra bytes in the dylink section are preserved. # # `dylink.test.wasm` was generated using emscripten to build a side # module with two TLS exports (which adds extra information to the # dylink section) using: # `emcc -s USE_PTHREAD -s SIDE_MODULE side.c` # # side.c: # _Thread_local int foo = 10; # _Thread_local int bar = 11; # # and then removing all sections except the dylink.0 section using: # `llvm-objcopy --only-section=dylink.0` RUN: wasm-opt -O1 %s.wasm -o %t.o RUN: cmp %s.wasm %t.o binaryen-version_108/test/lit/binary/dylink.test.wasm000077500000000000000000000000501423707623100231370ustar00rootroot00000000000000asmdylink.0 foo€bar€binaryen-version_108/test/lit/binary/empty-param-name.test000066400000000000000000000007041423707623100240540ustar00rootroot00000000000000;; Test that we show a warning on an empty local name, and do not crash. ;; ;; The binary contains this, processed by wabt with debug names: ;; ;; (module ;; (func $foo (import "imports" "foo") (param i32))) ;; ;; Wabt emits a name for that parameter, but it is the empty string. See ;; https://github.com/WebAssembly/wabt/issues/1799 ;; RUN: wasm-opt %s.wasm 2>&1 | filecheck %s ;; CHECK: warning: empty local name at index 0 in function foo binaryen-version_108/test/lit/binary/empty-param-name.test.wasm000066400000000000000000000000661423707623100250230ustar00rootroot00000000000000asm`importsfoonamefoobinaryen-version_108/test/lit/binary/prototype-nominal-format.test000066400000000000000000000023451423707623100256730ustar00rootroot00000000000000;; Test the we can properly parse the prototype nominal binary format that we no ;; longer emit. ;; RUN: wasm-dis %s.wasm -all | filecheck %s ;; CHECK: (module ;; CHECK-NEXT: (type $super-struct (struct (field i32))) ;; CHECK-NEXT: (type $sub-struct (struct (field i32) (field i64))) ;; CHECK-NEXT: (type $none_=>_ref|$super-struct| (func (result (ref $super-struct)))) ;; CHECK-NEXT: (type $none_=>_ref|$sub-struct| (func (result (ref $sub-struct)))) ;; CHECK-NEXT: (type $none_=>_ref|$super-array| (func (result (ref $super-array)))) ;; CHECK-NEXT: (type $none_=>_ref|$sub-array| (func (result (ref $sub-array)))) ;; CHECK-NEXT: (type $super-array (array (ref $super-struct))) ;; CHECK-NEXT: (type $sub-array (array (ref $sub-struct))) ;; CHECK-NEXT: (func $make-super-struct (result (ref $super-struct)) ;; CHECK-NEXT: (call $make-sub-struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (func $make-sub-struct (result (ref $sub-struct)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (func $make-super-array (result (ref $super-array)) ;; CHECK-NEXT: (call $make-sub-array) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (func $make-sub-array (result (ref $sub-array)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/binary/prototype-nominal-format.test.wasm000066400000000000000000000003231423707623100266330ustar00rootroot00000000000000asm'__~`k`k`k`k^k^k     ƒnameGmake-super-structmake-sub-structmake-super-arraymake-sub-array3 sub-array super-array sub-struct super-structbinaryen-version_108/test/lit/binary/stacky-eh.test000066400000000000000000000035161423707623100225760ustar00rootroot00000000000000# Verify stacky EH binary can be parsed correctly. # # stacky-eh.test.wasm contains below: # try # nop # catch 0 # tag type i32 # i32.const 3 # local.set 1 # local.set 2 # # (This binary was generated by # 'wasm-opt --optimize-level=3 --generate-stack-ir -optimize-stack-ir') # # This code is 'stacky' in Binaryen parlance. In the binary reader, Binaryen has # a special routine of creating a block and a local.get/local.set to read stacky # code into Binaryen AST. So if we don't do any post-fixup, the 'catch' block # becomes: # (catch $e-i32 # (local.set 2 # (block (result i32) # (local.set $new # (pop i32) # ) # (local.set 1 # (i32.const 3) # ) # (local.get $new) # ) # ) # ) # Here the 'block' and `local $new' are newly created to read the stacky code. # But now the 'pop' ends up nested within the 'block', which is invalid. This # test tests if this invalid code is correctly fixed up in the binary reader. # The fixup will hoist the 'pop' and create another local to store it right # after 'catch'. RUN: wasm-opt -all %s.wasm --print | filecheck %s # CHECK: (func $0 # CHECK-NEXT: (local $0 i32) # CHECK-NEXT: (local $1 i32) # CHECK-NEXT: (local $2 i32) # CHECK-NEXT: (local $3 i32) # CHECK-NEXT: (local $4 i32) # CHECK-NEXT: (try $label$3 # CHECK-NEXT: (do # CHECK-NEXT: (nop) # CHECK-NEXT: ) # CHECK-NEXT: (catch $tag$0 # CHECK-NEXT: (local.set $4 # CHECK-NEXT: (pop i32) # CHECK-NEXT: ) # CHECK-NEXT: (local.set $2 # CHECK-NEXT: (block (result i32) # CHECK-NEXT: (local.set $3 # CHECK-NEXT: (local.get $4) # CHECK-NEXT: ) # CHECK-NEXT: (local.set $1 # CHECK-NEXT: (i32.const 3) # CHECK-NEXT: ) # CHECK-NEXT: (local.get $3) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: ) binaryen-version_108/test/lit/binary/stacky-eh.test.wasm000066400000000000000000000000571423707623100235410ustar00rootroot00000000000000asm``  @A!! binaryen-version_108/test/lit/binary/stacky-nn-tuple.test000066400000000000000000000065041423707623100237440ustar00rootroot00000000000000# Verify stacky non-nullable tuples binary can be parsed correctly. The wasm # contains code that uses pops to get a tuple and store it in a local, then # reads those values. The file contains this: # # (module # (type $A (struct (field (mut i32)))) # (type $B (struct (field (mut i32)) (field (mut i32)))) # (tag $tag$0 (param (ref $A) (ref $B))) # (func $foo # (local $temp ((ref null $A) (ref null $B))) # (try $label$3 # (do # (nop) # ) # (catch $tag$0 # (local.set $temp # (pop (ref $A) (ref $B)) # ) # (drop # (ref.as_non_null # (tuple.extract 0 # (local.get $temp) # ) # ) # ) # (drop # (ref.as_non_null # (tuple.extract 1 # (local.get $temp) # ) # ) # ) # (unreachable) # ) # ) # ) # ) RUN: wasm-opt -all --enable-gc-nn-locals %s.wasm -all --print # CHECK: (module # CHECK-NEXT: (type ${mut:i32} (struct (field (mut i32)))) # CHECK-NEXT: (type ${mut:i32_mut:i32} (struct (field (mut i32)) (field (mut i32)))) # CHECK-NEXT: (type $ref|{mut:i32}|_ref|{mut:i32_mut:i32}|_=>_none (func (param (ref ${mut:i32}) (ref ${mut:i32_mut:i32})))) # CHECK-NEXT: (type $none_=>_none (func)) # CHECK-NEXT: (tag $tag$0 (param (ref ${mut:i32}) (ref ${mut:i32_mut:i32}))) # CHECK-NEXT: (func $0 # CHECK-NEXT: (local $0 (ref null ${mut:i32})) # CHECK-NEXT: (local $1 (ref null ${mut:i32_mut:i32})) # CHECK-NEXT: (local $2 (ref null ${mut:i32_mut:i32})) # CHECK-NEXT: (local $3 ((ref ${mut:i32}) (ref ${mut:i32_mut:i32}))) # CHECK-NEXT: (local $4 (ref ${mut:i32})) # CHECK-NEXT: (local $5 (ref null ${mut:i32})) # CHECK-NEXT: (local $6 (ref null ${mut:i32})) # CHECK-NEXT: (try $label$3 # CHECK-NEXT: (do # CHECK-NEXT: (nop) # CHECK-NEXT: ) # CHECK-NEXT: (catch $tag$0 # CHECK-NEXT: (local.set $3 # CHECK-NEXT: (pop (ref ${mut:i32}) (ref ${mut:i32_mut:i32})) # CHECK-NEXT: ) # CHECK-NEXT: (local.set $0 # CHECK-NEXT: (block (result (ref ${mut:i32})) # CHECK-NEXT: (local.set $4 # CHECK-NEXT: (tuple.extract 0 # CHECK-NEXT: (local.get $3) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: (local.set $1 # CHECK-NEXT: (tuple.extract 1 # CHECK-NEXT: (local.get $3) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: (local.get $4) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: (drop # CHECK-NEXT: (ref.as_non_null # CHECK-NEXT: (block (result (ref null ${mut:i32})) # CHECK-NEXT: (local.set $5 # CHECK-NEXT: (local.get $0) # CHECK-NEXT: ) # CHECK-NEXT: (drop # CHECK-NEXT: (local.get $1) # CHECK-NEXT: ) # CHECK-NEXT: (local.get $5) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: (drop # CHECK-NEXT: (block (result (ref null ${mut:i32})) # CHECK-NEXT: (local.set $6 # CHECK-NEXT: (local.get $0) # CHECK-NEXT: ) # CHECK-NEXT: (local.set $2 # CHECK-NEXT: (local.get $1) # CHECK-NEXT: ) # CHECK-NEXT: (local.get $6) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: (drop # CHECK-NEXT: (ref.as_non_null # CHECK-NEXT: (local.get $2) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: (unreachable) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: ) # CHECK-NEXT: binaryen-version_108/test/lit/binary/stacky-nn-tuple.test.wasm000066400000000000000000000001211423707623100246770ustar00rootroot00000000000000asm__`kk`  '%ll@!! Ó ! Ó binaryen-version_108/test/lit/exec/000077500000000000000000000000001423707623100174405ustar00rootroot00000000000000binaryen-version_108/test/lit/exec/delegate-vacuum.wast000066400000000000000000000030341423707623100234100ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. ;; RUN: wasm-opt %s --vacuum --fuzz-exec -all -q -o /dev/null 2>&1 | filecheck %s ;; Test the effect of vaccum on delegation. The delegate target must not ;; "escape" the current function scope and affect anything external, that is, ;; it must be cleared on function exit. (module (tag $tag$0 (param i32)) ;; CHECK: [fuzz-exec] calling export-1 ;; CHECK-NEXT: [exception thrown: tag$0 0] (func "export-1" (try (do (try (do (throw $tag$0 (i32.const 0) ) ) ;; A delegation that leads to the caller. This sets the delegate field on ;; this function scope. (delegate 1) ) ) (catch_all (nop) ) ) ) ;; CHECK: [fuzz-exec] calling export-2 ;; CHECK-NEXT: [trap unreachable] (func "export-2" (call $inner) (unreachable) ) (func $inner ;; This inner function must not notice the delegate field that was set by ;; the call to the previous export (if it does notice it, it would delegate ;; to the caller or something else invalid, and the execution results would ;; differ, causing fuzz-exec to fail). (try (do (throw $tag$0 (i32.const 0) ) ) (catch_all (nop) ) ) ) ) ;; CHECK: [fuzz-exec] calling export-1 ;; CHECK-NEXT: [exception thrown: tag$0 0] ;; CHECK: [fuzz-exec] calling export-2 ;; CHECK-NEXT: [trap unreachable] ;; CHECK-NEXT: [fuzz-exec] comparing export-1 ;; CHECK-NEXT: [fuzz-exec] comparing export-2 binaryen-version_108/test/lit/exec/eh.wast000066400000000000000000000027761423707623100207500ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. ;; RUN: wasm-opt %s -all --fuzz-exec -q -o /dev/null 2>&1 | filecheck %s (module (tag $e-i32 (param i32)) ;; CHECK: [fuzz-exec] calling throw ;; CHECK-NEXT: [exception thrown: e-i32 1] (func "throw" (throw $e-i32 (i32.const 1)) ) ;; CHECK: [fuzz-exec] calling try-catch (func "try-catch" (try (do (throw $e-i32 (i32.const 2)) ) (catch $e-i32 (drop (pop i32)) ) ) ) ;; CHECK: [fuzz-exec] calling catchless-try ;; CHECK-NEXT: [exception thrown: e-i32 3] (func "catchless-try" (try (do (throw $e-i32 (i32.const 3)) ) ) ) ;; CHECK: [fuzz-exec] calling try-delegate ;; CHECK-NEXT: [exception thrown: e-i32 4] (func "try-delegate" (try $l0 (do (try (do (throw $e-i32 (i32.const 4)) ) (delegate $l0) ) ) ) ) ) ;; CHECK: [fuzz-exec] calling throw ;; CHECK-NEXT: [exception thrown: e-i32 1] ;; CHECK: [fuzz-exec] calling try-catch ;; CHECK: [fuzz-exec] calling catchless-try ;; CHECK-NEXT: [exception thrown: e-i32 3] ;; CHECK: [fuzz-exec] calling try-delegate ;; CHECK-NEXT: [exception thrown: e-i32 4] ;; CHECK-NEXT: [fuzz-exec] comparing catchless-try ;; CHECK-NEXT: [fuzz-exec] comparing throw ;; CHECK-NEXT: [fuzz-exec] comparing try-catch ;; CHECK-NEXT: [fuzz-exec] comparing try-delegate binaryen-version_108/test/lit/exec/non-nullable.wast000066400000000000000000000010301423707623100227200ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. ;; RUN: wasm-opt %s -all --fuzz-exec -q -o /dev/null 2>&1 | filecheck %s (module ;; CHECK: [fuzz-exec] calling get-ref ;; CHECK-NEXT: [trap fuzzer can only send defaultable parameters to exports] (func "get-ref" (param $0 (ref any)) (nop) ) ) ;; CHECK: [fuzz-exec] calling get-ref ;; CHECK-NEXT: [trap fuzzer can only send defaultable parameters to exports] ;; CHECK-NEXT: [fuzz-exec] comparing get-ref binaryen-version_108/test/lit/exec/rtts.wast000066400000000000000000000101141423707623100213310ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. ;; Check that allocation and casting instructions with and without RTTs can be ;; mixed correctly. ;; RUN: wasm-opt %s -all --fuzz-exec-before -q --structural -o /dev/null 2>&1 \ ;; RUN: | filecheck %s --check-prefix=EQREC ;; RUN: wasm-opt %s -all --fuzz-exec-before -q --nominal -o /dev/null 2>&1 \ ;; RUN: | filecheck %s --check-prefix=NOMNL (module (type $struct (struct_subtype i32 data)) (type $sub-struct (struct_subtype i32 i32 $struct)) (import "fuzzing-support" "log-i32" (func $log (param i32))) (global $sub-rtt (rtt 1 $sub-struct) (rtt.sub $sub-struct (rtt.canon $struct) ) ) (func $make-sub-struct-canon (result (ref $struct)) (struct.new_default_with_rtt $sub-struct (rtt.canon $sub-struct) ) ) (func $make-sub-struct-sub (result (ref $struct)) (struct.new_default_with_rtt $sub-struct (global.get $sub-rtt) ) ) (func $make-sub-struct-static (result (ref $struct)) (struct.new_default $sub-struct) ) ;; EQREC: [fuzz-exec] calling canon-canon ;; EQREC-NEXT: [LoggingExternalInterface logging 1] ;; NOMNL: [fuzz-exec] calling canon-canon ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "canon-canon" (call $log (ref.test (call $make-sub-struct-canon) (rtt.canon $sub-struct) ) ) ) ;; EQREC: [fuzz-exec] calling canon-sub ;; EQREC-NEXT: [LoggingExternalInterface logging 0] ;; NOMNL: [fuzz-exec] calling canon-sub ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "canon-sub" (call $log (ref.test (call $make-sub-struct-canon) (global.get $sub-rtt) ) ) ) ;; EQREC: [fuzz-exec] calling canon-static ;; EQREC-NEXT: [LoggingExternalInterface logging 1] ;; NOMNL: [fuzz-exec] calling canon-static ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "canon-static" (call $log (ref.test_static $sub-struct (call $make-sub-struct-canon) ) ) ) ;; EQREC: [fuzz-exec] calling sub-canon ;; EQREC-NEXT: [LoggingExternalInterface logging 0] ;; NOMNL: [fuzz-exec] calling sub-canon ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "sub-canon" (call $log (ref.test (call $make-sub-struct-sub) (rtt.canon $sub-struct) ) ) ) ;; EQREC: [fuzz-exec] calling sub-sub ;; EQREC-NEXT: [LoggingExternalInterface logging 1] ;; NOMNL: [fuzz-exec] calling sub-sub ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "sub-sub" (call $log (ref.test (call $make-sub-struct-sub) (global.get $sub-rtt) ) ) ) ;; EQREC: [fuzz-exec] calling sub-static ;; EQREC-NEXT: [LoggingExternalInterface logging 0] ;; NOMNL: [fuzz-exec] calling sub-static ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "sub-static" (call $log (ref.test_static $sub-struct (call $make-sub-struct-sub) ) ) ) ;; EQREC: [fuzz-exec] calling static-canon ;; EQREC-NEXT: [LoggingExternalInterface logging 1] ;; NOMNL: [fuzz-exec] calling static-canon ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "static-canon" (call $log (ref.test (call $make-sub-struct-static) (rtt.canon $sub-struct) ) ) ) ;; EQREC: [fuzz-exec] calling static-sub ;; EQREC-NEXT: [LoggingExternalInterface logging 0] ;; NOMNL: [fuzz-exec] calling static-sub ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "static-sub" (call $log (ref.test (call $make-sub-struct-static) (global.get $sub-rtt) ) ) ) ;; EQREC: [fuzz-exec] calling static-static ;; EQREC-NEXT: [LoggingExternalInterface logging 1] ;; NOMNL: [fuzz-exec] calling static-static ;; NOMNL-NEXT: [LoggingExternalInterface logging 1] (func "static-static" (call $log (ref.test_static $sub-struct (call $make-sub-struct-static) ) ) ) ) binaryen-version_108/test/lit/exec/trap.wast000066400000000000000000000040011423707623100213010ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. ;; RUN: wasm-opt %s --vacuum --fuzz-exec -q -o /dev/null 2>&1 | filecheck %s ;; RUN: wasm-opt %s --ignore-implicit-traps --vacuum --fuzz-exec -q -o /dev/null 2>&1 | filecheck %s --check-prefix=IIT ;; RUN: wasm-opt %s --traps-never-happen --vacuum --fuzz-exec -q -o /dev/null 2>&1 | filecheck %s --check-prefix=TNH (module ;; CHECK: [fuzz-exec] calling trap ;; CHECK-NEXT: [trap unreachable] ;; IIT: [fuzz-exec] calling trap ;; IIT-NEXT: [trap unreachable] ;; TNH: [fuzz-exec] calling trap ;; TNH-NEXT: [trap unreachable] (func "trap" (unreachable) ) (memory 1 1) ;; CHECK: [fuzz-exec] calling load-trap ;; CHECK-NEXT: [trap highest > memory: 65536 > 65532] ;; IIT: [fuzz-exec] calling load-trap ;; IIT-NEXT: [trap highest > memory: 65536 > 65532] ;; TNH: [fuzz-exec] calling load-trap ;; TNH-NEXT: [trap highest > memory: 65536 > 65532] (func "load-trap" ;; This load traps, so this cannot be removed. But if either of ;; --ignore-implicit-traps or --traps-never-happen is set, this load is ;; assumed not to trap and we end up optimizing this out with --vacuum, ;; causes the trap behavior to change. This should not result in [fuzz-exec] ;; comparison failure. (drop (i32.load (i32.const 65536)) ) ) ) ;; CHECK: [fuzz-exec] calling trap ;; CHECK-NEXT: [trap unreachable] ;; CHECK: [fuzz-exec] calling load-trap ;; CHECK-NEXT: [trap highest > memory: 65536 > 65532] ;; CHECK-NEXT: [fuzz-exec] comparing load-trap ;; CHECK-NEXT: [fuzz-exec] comparing trap ;; IIT: [fuzz-exec] calling trap ;; IIT-NEXT: [trap unreachable] ;; IIT: [fuzz-exec] calling load-trap ;; IIT-NEXT: [fuzz-exec] comparing load-trap ;; IIT-NEXT: [fuzz-exec] comparing trap ;; TNH: [fuzz-exec] calling trap ;; TNH: [fuzz-exec] calling load-trap ;; TNH-NEXT: [fuzz-exec] comparing load-trap ;; TNH-NEXT: [fuzz-exec] comparing trap binaryen-version_108/test/lit/forward-declared-types.wast000066400000000000000000000015711423707623100237670ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; Test that types can be used before they are defined ;; RUN: wasm-opt %s -all -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $func (func)) ;; CHECK: (type $struct (struct (field (ref $array)) (field (ref null $func)))) ;; NOMNL: (type $func (func_subtype func)) ;; NOMNL: (type $struct (struct_subtype (field (ref $array)) (field (ref null $func)) data)) (type $struct (struct (field (ref $array)) (field (ref null $func)) )) ;; CHECK: (type $array (array (rtt 2 $func))) ;; NOMNL: (type $array (array_subtype (rtt 2 $func) data)) (type $array (array (field (rtt 2 $func)))) (type $func (func)) (func (result (ref null $struct)) (unreachable) ) ) binaryen-version_108/test/lit/fuzz-types/000077500000000000000000000000001423707623100206545ustar00rootroot00000000000000binaryen-version_108/test/lit/fuzz-types/isorecursive.test000066400000000000000000000023321423707623100242770ustar00rootroot00000000000000;; RUN: wasm-fuzz-types --hybrid -v --seed=0 | filecheck %s ;; CHECK: (rec ;; CHECK-NEXT: (type $0 (struct_subtype data)) ;; CHECK-NEXT: (type $1 (func_subtype (param i31ref) (result dataref) func)) ;; CHECK-NEXT: (type $2 (array_subtype i32 data)) ;; CHECK-NEXT: (type $3 (array_subtype i32 $2)) ;; CHECK-NEXT: (type $4 (array_subtype i32 $2)) ;; CHECK-NEXT: (type $5 (array_subtype i32 $3)) ;; CHECK-NEXT: (type $6 (array_subtype i32 $3)) ;; CHECK-NEXT: (type $7 (struct_subtype $0)) ;; CHECK-NEXT: (type $8 (struct_subtype $0)) ;; CHECK-NEXT: (type $9 (array_subtype i32 $6)) ;; CHECK-NEXT: (type $10 (struct_subtype $0)) ;; CHECK-NEXT: (type $11 (array_subtype i32 $2)) ;; CHECK-NEXT: (type $12 (struct_subtype $0)) ;; CHECK-NEXT: (type $13 (array_subtype i32 $6)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rec ;; CHECK-NEXT: (type $14 (struct_subtype $10)) ;; CHECK-NEXT: (type $15 (func_subtype (param i31ref) (result dataref) $1)) ;; CHECK-NEXT: (type $16 (array_subtype i32 $2)) ;; CHECK-NEXT: (type $17 (struct_subtype $14)) ;; CHECK-NEXT: (type $18 (struct_subtype (field (mut funcref) (mut (ref null $7)) funcref) $12)) ;; CHECK-NEXT: (type $19 (func_subtype (param i31ref) (result dataref) $15)) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/fuzz-types/nominal.test000066400000000000000000000035261423707623100232200ustar00rootroot00000000000000;; RUN: wasm-fuzz-types --nominal -v --seed=0 | filecheck %s ;; CHECK: (type $0 (struct_subtype (field (ref null $9) (ref $5)) data)) ;; CHECK-NEXT: (type $1 (func_subtype (param (rtt 0 $8)) func)) ;; CHECK-NEXT: (type $2 (struct_subtype (field (mut (rtt $19)) (ref $4)) data)) ;; CHECK-NEXT: (type $3 (struct_subtype (field (mut (rtt $19)) (ref $4) i64 (mut (ref null $2)) (mut i64)) $2)) ;; CHECK-NEXT: (type $4 (struct_subtype (field (mut (rtt $19)) (ref $4) (mut (ref $13))) $2)) ;; CHECK-NEXT: (type $5 (struct_subtype (field (mut (rtt $19)) (ref $4) i64 (mut (ref null $2)) (mut i64)) $3)) ;; CHECK-NEXT: (type $6 (struct_subtype (field (mut (rtt $19)) (ref $4) i64 (mut (ref null $2)) (mut i64)) $3)) ;; CHECK-NEXT: (type $7 (struct_subtype (field (ref null $9) (ref $5) eqref (mut (ref null $3)) (mut (rtt $18)) dataref) $0)) ;; CHECK-NEXT: (type $8 (struct_subtype (field (ref $9) (ref $5) (rtt 2 $1) (mut (rtt $17)) (mut (rtt i31)) (rtt $8)) $0)) ;; CHECK-NEXT: (type $9 (struct_subtype (field (mut (rtt $19)) (ref $4) i64 (mut (ref null $2)) (mut i64) (rtt 2 $15)) $6)) ;; CHECK-NEXT: (type $10 (struct_subtype (field (ref null $9) (ref $5)) $0)) ;; CHECK-NEXT: (type $11 (struct_subtype (field (mut (rtt $19)) (ref $4)) $2)) ;; CHECK-NEXT: (type $12 (struct_subtype (field (ref null $9) (ref $5)) $0)) ;; CHECK-NEXT: (type $13 (struct_subtype (field (mut (rtt $19)) (ref $4) i64 (mut (ref null $2)) (mut i64)) $6)) ;; CHECK-NEXT: (type $14 (struct_subtype (field (ref null $9) (ref $5)) $10)) ;; CHECK-NEXT: (type $15 (func_subtype (param (rtt 0 $8)) $1)) ;; CHECK-NEXT: (type $16 (struct_subtype (field (mut (rtt $19)) (ref $4) v128) $2)) ;; CHECK-NEXT: (type $17 (struct_subtype (field (ref null $9) (ref $5)) $14)) ;; CHECK-NEXT: (type $18 (struct_subtype (field (ref null $9) (ref $5)) $12)) ;; CHECK-NEXT: (type $19 (func_subtype (param (rtt 0 $8)) $15)) binaryen-version_108/test/lit/fuzz-types/structural.test000066400000000000000000000024201423707623100237630ustar00rootroot00000000000000;; RUN: wasm-fuzz-types --structural -v --seed=0 | filecheck %s ;; CHECK: (type $0 (struct (field (ref null $9) (ref $3)))) ;; CHECK-NEXT: (type $1 (func (param (rtt 0 $8)))) ;; CHECK-NEXT: (type $2 (struct (field (mut (rtt $1)) (ref $4)))) ;; CHECK-NEXT: (type $3 (struct (field (mut (rtt $1)) (ref $4) i64 (mut (ref null $2)) (mut i64)))) ;; CHECK-NEXT: (type $4 (struct (field (mut (rtt $1)) (ref $4) (mut (ref $3))))) ;; CHECK-NEXT: (type $5 identical to $3) ;; CHECK-NEXT: (type $6 identical to $3) ;; CHECK-NEXT: (type $7 (struct (field (ref null $9) (ref $3) eqref (mut (ref null $3)) (mut (rtt $0)) dataref))) ;; CHECK-NEXT: (type $8 (struct (field (ref $9) (ref $3) (rtt 2 $1) (mut (rtt $0)) (mut (rtt i31)) (rtt $8)))) ;; CHECK-NEXT: (type $9 (struct (field (mut (rtt $1)) (ref $4) i64 (mut (ref null $2)) (mut i64) (rtt 2 $1)))) ;; CHECK-NEXT: (type $10 identical to $0) ;; CHECK-NEXT: (type $11 identical to $2) ;; CHECK-NEXT: (type $12 identical to $0) ;; CHECK-NEXT: (type $13 identical to $3) ;; CHECK-NEXT: (type $14 identical to $0) ;; CHECK-NEXT: (type $15 identical to $1) ;; CHECK-NEXT: (type $16 (struct (field (mut (rtt $1)) (ref $4) v128))) ;; CHECK-NEXT: (type $17 identical to $0) ;; CHECK-NEXT: (type $18 identical to $0) ;; CHECK-NEXT: (type $19 identical to $1) binaryen-version_108/test/lit/gc-eh.wast000066400000000000000000000027271423707623100204070ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; Check that pops of GC types work correctly. ;; RUN: wasm-opt -all %s -S -o - | filecheck %s ;; RUN: wasm-opt -all --nominal %s -S -o - | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $A (struct (field (mut i32)))) ;; NOMNL: (type $A (struct_subtype (field (mut i32)) data)) (type $A (struct (field (mut i32)) )) ;; CHECK: (tag $tagA (param (ref $A))) ;; NOMNL: (tag $tagA (param (ref $A))) (tag $tagA (param (ref $A))) ;; CHECK: (func $foo (result (ref null $A)) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tagA ;; CHECK-NEXT: (return ;; CHECK-NEXT: (pop (ref $A)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; NOMNL: (func $foo (type $none_=>_ref?|$A|) (result (ref null $A)) ;; NOMNL-NEXT: (try $try ;; NOMNL-NEXT: (do ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (catch $tagA ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (pop (ref $A)) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $A) ;; NOMNL-NEXT: ) (func $foo (result (ref null $A)) (try (do (nop) ) (catch $tagA (return (pop (ref $A)) ) ) ) (ref.null $A) ) ) binaryen-version_108/test/lit/gc-read-write-effects.wast000066400000000000000000000034071423707623100234670ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; Check that writing a struct field is not reordered with reading the same ;; struct field. ;; RUN: wasm-opt -all --simplify-locals %s -S -o - | filecheck %s ;; RUN: wasm-opt -all --simplify-locals %s --nominal -S -o - | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $A (struct (field (mut i32)))) ;; NOMNL: (type $A (struct_subtype (field (mut i32)) data)) (type $A (struct (field (mut i32)) )) ;; Check that this: ;; ;; y = a.0 ;; a.0 = 10 ;; return y ;; ;; Is not turned into this: ;; ;; a.0 = 10 ;; return a.0 ;; ;; CHECK: (func $test (param $x (ref null $A)) (result i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (struct.get $A 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $A 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; NOMNL: (func $test (type $ref?|$A|_=>_i32) (param $x (ref null $A)) (result i32) ;; NOMNL-NEXT: (local $y i32) ;; NOMNL-NEXT: (local.set $y ;; NOMNL-NEXT: (struct.get $A 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.set $A 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 10) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) (func $test (export "test") (param $x (ref null $A)) (result i32) (local $y i32) (local.set $y (struct.get $A 0 (local.get $x) ) ) (struct.set $A 0 (local.get $x) (i32.const 10) ) (local.get $y) ) ) binaryen-version_108/test/lit/heap-types.wast000066400000000000000000000103371423707623100214770ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; Check that heap types are emitted properly in the binary format. This file ;; contains small modules that each use a single instruction with a heap type. ;; If we forgot to update collectHeapTypes then we would not write out their ;; type, and hit an error during --roundtrip. ;; RUN: foreach %s %t wasm-opt -all --roundtrip -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt -all --roundtrip -S --nominal -o - | filecheck %s --check-prefix NOMNL (module ;; CHECK: (type $struct.A (struct (field i32))) ;; NOMNL: (type $struct.A (struct_subtype (field i32) data)) (type $struct.A (struct i32)) ;; NOMNL: (type $struct.B (struct_subtype (field i32) data)) (type $struct.B (struct i32)) ;; CHECK: (func $test ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.test_static $struct.A ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $test (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.test_static $struct.B ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $test (drop (ref.test_static $struct.B (ref.null $struct.A)) ) ) ) (module ;; CHECK: (type $struct.A (struct (field i32))) ;; NOMNL: (type $struct.A (struct_subtype (field i32) data)) (type $struct.A (struct i32)) ;; NOMNL: (type $struct.B (struct_subtype (field i32) data)) (type $struct.B (struct i32)) ;; CHECK: (func $test ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $struct.A ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $test (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $struct.B ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $test (drop (ref.cast_static $struct.B (ref.null $struct.A)) ) ) ) (module ;; CHECK: (type $struct.A (struct (field i32))) ;; NOMNL: (type $struct.A (struct_subtype (field i32) data)) (type $struct.A (struct i32)) ;; CHECK: (func $test ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $test (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.new_default $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $test (drop (struct.new_default $struct.A) ) ) ) (module ;; CHECK: (type $vector (array (mut f64))) ;; NOMNL: (type $vector (array_subtype (mut f64) data)) (type $vector (array (mut f64))) ;; CHECK: (func $test ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (array.new $vector ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $test (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (array.new $vector ;; NOMNL-NEXT: (f64.const 3.14159) ;; NOMNL-NEXT: (i32.const 3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $test (drop (array.new $vector (f64.const 3.14159) (i32.const 3) ) ) ) ) (module ;; CHECK: (type $vector (array (mut f64))) ;; NOMNL: (type $vector (array_subtype (mut f64) data)) (type $vector (array (mut f64))) ;; CHECK: (func $test ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (array.init_static $vector ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: (f64.const 4) ;; CHECK-NEXT: (f64.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $test (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (array.init_static $vector ;; NOMNL-NEXT: (f64.const 1) ;; NOMNL-NEXT: (f64.const 2) ;; NOMNL-NEXT: (f64.const 4) ;; NOMNL-NEXT: (f64.const 8) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $test (drop (array.init_static $vector (f64.const 1) (f64.const 2) (f64.const 4) (f64.const 8) ) ) ) ) binaryen-version_108/test/lit/help/000077500000000000000000000000001423707623100174445ustar00rootroot00000000000000binaryen-version_108/test/lit/help/wasm-as.test000066400000000000000000000150151423707623100217170ustar00rootroot00000000000000;; RUN: wasm-as --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-as INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: Assemble a .wat (WebAssembly text format) into a .wasm (WebAssembly binary ;; CHECK-NEXT: format) ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-as options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --output,-o Output file (stdout if not specified) ;; CHECK-NEXT: ;; CHECK-NEXT: --validate,-v Control validation of the output module ;; CHECK-NEXT: ;; CHECK-NEXT: --debuginfo,-g Emit names section and debug info ;; CHECK-NEXT: ;; CHECK-NEXT: --source-map,-sm Emit source map to the specified file ;; CHECK-NEXT: ;; CHECK-NEXT: --source-map-url,-su Use specified string as source map URL ;; CHECK-NEXT: ;; CHECK-NEXT: --symbolmap,-s Emit a symbol map (indexes => names) ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial ;; CHECK-NEXT: warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing ;; CHECK-NEXT: purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are ;; CHECK-NEXT: correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization ;; CHECK-NEXT: passes being run. Must be in the form ;; CHECK-NEXT: KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to be ;; CHECK-NEXT: parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to be ;; CHECK-NEXT: parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to be ;; CHECK-NEXT: parsed using the isorecursive hybrid type ;; CHECK-NEXT: system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-ctor-eval.test000066400000000000000000000155311423707623100232130ustar00rootroot00000000000000;; RUN: wasm-ctor-eval --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-ctor-eval INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: Execute code at compile time ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-ctor-eval options: ;; CHECK-NEXT: ----------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --output,-o Output file (stdout if not specified) ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-text,-S Emit text instead of binary for the ;; CHECK-NEXT: output file ;; CHECK-NEXT: ;; CHECK-NEXT: --debuginfo,-g Emit names section and debug info ;; CHECK-NEXT: ;; CHECK-NEXT: --ctors,-c Comma-separated list of global ;; CHECK-NEXT: constructor functions to evaluate ;; CHECK-NEXT: ;; CHECK-NEXT: --kept-exports,-ke Comma-separated list of ctors whose ;; CHECK-NEXT: exports we keep around even if we eval ;; CHECK-NEXT: those ctors ;; CHECK-NEXT: ;; CHECK-NEXT: --ignore-external-input,-ipi Assumes no env vars are to be read, stdin ;; CHECK-NEXT: is empty, etc. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial ;; CHECK-NEXT: warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing ;; CHECK-NEXT: purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are ;; CHECK-NEXT: correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization ;; CHECK-NEXT: passes being run. Must be in the form ;; CHECK-NEXT: KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to be ;; CHECK-NEXT: parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to be ;; CHECK-NEXT: parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to be ;; CHECK-NEXT: parsed using the isorecursive hybrid type ;; CHECK-NEXT: system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-dis.test000066400000000000000000000143011423707623100220700ustar00rootroot00000000000000;; RUN: wasm-dis --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-dis INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: Un-assemble a .wasm (WebAssembly binary format) into a .wat (WebAssembly text ;; CHECK-NEXT: format) ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-dis options: ;; CHECK-NEXT: ----------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --output,-o Output file (stdout if not specified) ;; CHECK-NEXT: ;; CHECK-NEXT: --source-map,-sm Consume source map from the specified ;; CHECK-NEXT: file to add location information ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial ;; CHECK-NEXT: warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing ;; CHECK-NEXT: purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are ;; CHECK-NEXT: correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization ;; CHECK-NEXT: passes being run. Must be in the form ;; CHECK-NEXT: KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to be ;; CHECK-NEXT: parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to be ;; CHECK-NEXT: parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to be ;; CHECK-NEXT: parsed using the isorecursive hybrid type ;; CHECK-NEXT: system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-emscripten-finalize.test000066400000000000000000000224031423707623100252630ustar00rootroot00000000000000;; RUN: wasm-emscripten-finalize --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-emscripten-finalize INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: Performs Emscripten-specific transforms on .wasm files ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-emscripten-finalize options: ;; CHECK-NEXT: --------------------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --output,-o Output file ;; CHECK-NEXT: ;; CHECK-NEXT: --debuginfo,-g Emit names section in wasm binary (or ;; CHECK-NEXT: full debuginfo in wast) ;; CHECK-NEXT: ;; CHECK-NEXT: --dwarf Update DWARF debug info ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-text,-S Emit text instead of binary for the ;; CHECK-NEXT: output file. In this mode if no output ;; CHECK-NEXT: file is specified, we write to stdout. ;; CHECK-NEXT: ;; CHECK-NEXT: --no-emit-metadata,-n Skip the writing to emscripten metadata ;; CHECK-NEXT: JSON to stdout. ;; CHECK-NEXT: ;; CHECK-NEXT: --global-base The address at which static globals were ;; CHECK-NEXT: placed ;; CHECK-NEXT: ;; CHECK-NEXT: --side-module Input is an emscripten side module ;; CHECK-NEXT: ;; CHECK-NEXT: --input-source-map,-ism Consume source map from the specified ;; CHECK-NEXT: file ;; CHECK-NEXT: ;; CHECK-NEXT: --no-legalize-javascript-ffi,-nj Do not fully legalize (i64->i32, ;; CHECK-NEXT: f32->f64) the imports and exports for ;; CHECK-NEXT: interfacing with JS ;; CHECK-NEXT: ;; CHECK-NEXT: --bigint,-bi Assume JS will use wasm/JS BigInt ;; CHECK-NEXT: integration, so wasm i64s will turn into ;; CHECK-NEXT: JS BigInts, and there is no need for any ;; CHECK-NEXT: legalization at all (not even minimal ;; CHECK-NEXT: legalization of dynCalls) ;; CHECK-NEXT: ;; CHECK-NEXT: --output-source-map,-osm Emit source map to the specified file ;; CHECK-NEXT: ;; CHECK-NEXT: --output-source-map-url,-osu Emit specified string as source map URL ;; CHECK-NEXT: ;; CHECK-NEXT: --separate-data-segments Separate data segments to a file ;; CHECK-NEXT: ;; CHECK-NEXT: --check-stack-overflow Check for stack overflows every time the ;; CHECK-NEXT: stack is extended ;; CHECK-NEXT: ;; CHECK-NEXT: --standalone-wasm Emit a wasm file that does not depend on ;; CHECK-NEXT: JS, as much as possible, using wasi and ;; CHECK-NEXT: other standard conventions etc. where ;; CHECK-NEXT: possible ;; CHECK-NEXT: ;; CHECK-NEXT: --minimize-wasm-changes Modify the wasm as little as possible. ;; CHECK-NEXT: This is useful during development as we ;; CHECK-NEXT: reduce the number of changes to the wasm, ;; CHECK-NEXT: as it lets emscripten control how much ;; CHECK-NEXT: modifications to do. ;; CHECK-NEXT: ;; CHECK-NEXT: --no-dyncalls ;; CHECK-NEXT: ;; CHECK-NEXT: --dyncalls-i64 ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial ;; CHECK-NEXT: warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing ;; CHECK-NEXT: purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are ;; CHECK-NEXT: correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization ;; CHECK-NEXT: passes being run. Must be in the form ;; CHECK-NEXT: KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to be ;; CHECK-NEXT: parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to be ;; CHECK-NEXT: parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to be ;; CHECK-NEXT: parsed using the isorecursive hybrid type ;; CHECK-NEXT: system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-fuzz-types.test000066400000000000000000000023121423707623100234500ustar00rootroot00000000000000;; RUN: wasm-fuzz-types --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-fuzz-types ;; CHECK-NEXT: ;; CHECK-NEXT: Fuzz type construction, canonicalization, and operations ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-fuzz-types options: ;; CHECK-NEXT: ------------------------ ;; CHECK-NEXT: ;; CHECK-NEXT: --seed Run a single workload generated by the given seed ;; CHECK-NEXT: ;; CHECK-NEXT: --verbose,-v Print extra information ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Use the nominal type system (default) ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Use the equirecursive type system ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Use the isorecursive hybrid type system ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-metadce.test000066400000000000000000000211761423707623100227230ustar00rootroot00000000000000;; RUN: wasm-metadce --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-metadce INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: This tool performs dead code elimination (DCE) on a larger space that the wasm ;; CHECK-NEXT: module is just a part of. For example, if you have JS and wasm that are ;; CHECK-NEXT: connected, this can DCE the combined graph. By doing so, it is able to eliminate ;; CHECK-NEXT: wasm module exports, which otherwise regular optimizations cannot. ;; CHECK-NEXT: ;; CHECK-NEXT: This tool receives a representation of the reachability graph that the wasm ;; CHECK-NEXT: module resides in, which contains abstract nodes and connections showing what ;; CHECK-NEXT: they reach. Some of those nodes can represent the wasm module's imports and ;; CHECK-NEXT: exports. The tool then completes the graph by adding the internal parts of the ;; CHECK-NEXT: module, and does DCE on the entire thing. ;; CHECK-NEXT: ;; CHECK-NEXT: This tool will output a wasm module with dead code eliminated, and metadata ;; CHECK-NEXT: describing the things in the rest of the graph that can be eliminated as well. ;; CHECK-NEXT: ;; CHECK-NEXT: The graph description file should represent the graph in the following JSON-like ;; CHECK-NEXT: notation (note, this is not true JSON, things like comments, escaping, ;; CHECK-NEXT: single-quotes, etc. are not supported): ;; CHECK-NEXT: ;; CHECK-NEXT: [ ;; CHECK-NEXT: { ;; CHECK-NEXT: "name": "entity1", ;; CHECK-NEXT: "reaches": ["entity2, "entity3"], ;; CHECK-NEXT: "root": true ;; CHECK-NEXT: }, ;; CHECK-NEXT: { ;; CHECK-NEXT: "name": "entity2", ;; CHECK-NEXT: "reaches": ["entity1, "entity4"] ;; CHECK-NEXT: }, ;; CHECK-NEXT: { ;; CHECK-NEXT: "name": "entity3", ;; CHECK-NEXT: "reaches": ["entity1"], ;; CHECK-NEXT: "export": "export1" ;; CHECK-NEXT: }, ;; CHECK-NEXT: { ;; CHECK-NEXT: "name": "entity4", ;; CHECK-NEXT: "import": ["module", "import1"] ;; CHECK-NEXT: }, ;; CHECK-NEXT: ] ;; CHECK-NEXT: ;; CHECK-NEXT: Each entity has a name and an optional list of the other entities it reaches. It ;; CHECK-NEXT: can also be marked as a root, export (with the export string), or import (with ;; CHECK-NEXT: the module and import strings). DCE then computes what is reachable from the ;; CHECK-NEXT: roots. ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-opt options: ;; CHECK-NEXT: ----------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --output,-o Output file (stdout if not specified) ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-text,-S Emit text instead of binary for the ;; CHECK-NEXT: output file ;; CHECK-NEXT: ;; CHECK-NEXT: --debuginfo,-g Emit names section and debug info ;; CHECK-NEXT: ;; CHECK-NEXT: --graph-file,-f Filename of the graph description file ;; CHECK-NEXT: ;; CHECK-NEXT: --dump,-d Dump the combined graph file (useful for ;; CHECK-NEXT: debugging) ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial ;; CHECK-NEXT: warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing ;; CHECK-NEXT: purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are ;; CHECK-NEXT: correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization ;; CHECK-NEXT: passes being run. Must be in the form ;; CHECK-NEXT: KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to be ;; CHECK-NEXT: parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to be ;; CHECK-NEXT: parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to be ;; CHECK-NEXT: parsed using the isorecursive hybrid type ;; CHECK-NEXT: system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-opt.test000066400000000000000000001153301423707623100221170ustar00rootroot00000000000000;; RUN: wasm-opt --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-opt INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: Read, write, and optimize files ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-opt options: ;; CHECK-NEXT: ----------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --output,-o Output file (stdout if not ;; CHECK-NEXT: specified) ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-text,-S Emit text instead of binary for ;; CHECK-NEXT: the output file ;; CHECK-NEXT: ;; CHECK-NEXT: --converge,-c Run passes to convergence, ;; CHECK-NEXT: continuing while binary size ;; CHECK-NEXT: decreases ;; CHECK-NEXT: ;; CHECK-NEXT: --fuzz-exec-before,-feh Execute functions before ;; CHECK-NEXT: optimization, helping fuzzing ;; CHECK-NEXT: find bugs ;; CHECK-NEXT: ;; CHECK-NEXT: --fuzz-exec,-fe Execute functions before and ;; CHECK-NEXT: after optimization, helping ;; CHECK-NEXT: fuzzing find bugs ;; CHECK-NEXT: ;; CHECK-NEXT: --extra-fuzz-command,-efc An extra command to run on the ;; CHECK-NEXT: output before and after ;; CHECK-NEXT: optimizing. The output is ;; CHECK-NEXT: compared between the two, and an ;; CHECK-NEXT: error occurs if they are not ;; CHECK-NEXT: equal ;; CHECK-NEXT: ;; CHECK-NEXT: --translate-to-fuzz,-ttf Translate the input into a valid ;; CHECK-NEXT: wasm module *somehow*, useful ;; CHECK-NEXT: for fuzzing ;; CHECK-NEXT: ;; CHECK-NEXT: --initial-fuzz,-if Initial wasm content in ;; CHECK-NEXT: translate-to-fuzz (-ttf) mode ;; CHECK-NEXT: ;; CHECK-NEXT: --fuzz-passes,-fp Pick a random set of passes to ;; CHECK-NEXT: run, useful for fuzzing. this ;; CHECK-NEXT: depends on translate-to-fuzz (it ;; CHECK-NEXT: picks the passes from the input) ;; CHECK-NEXT: ;; CHECK-NEXT: --no-fuzz-memory don't emit memory ops when ;; CHECK-NEXT: fuzzing ;; CHECK-NEXT: ;; CHECK-NEXT: --no-fuzz-oob don't emit out-of-bounds ;; CHECK-NEXT: loads/stores/indirect calls when ;; CHECK-NEXT: fuzzing ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-js-wrapper,-ejw Emit a JavaScript wrapper file ;; CHECK-NEXT: that can run the wasm with some ;; CHECK-NEXT: test values, useful for fuzzing ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-spec-wrapper,-esw Emit a wasm spec interpreter ;; CHECK-NEXT: wrapper file that can run the ;; CHECK-NEXT: wasm with some test values, ;; CHECK-NEXT: useful for fuzzing ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-wasm2c-wrapper,-esw Emit a C wrapper file that can ;; CHECK-NEXT: run the wasm after it is ;; CHECK-NEXT: compiled with wasm2c, useful for ;; CHECK-NEXT: fuzzing ;; CHECK-NEXT: ;; CHECK-NEXT: --input-source-map,-ism Consume source map from the ;; CHECK-NEXT: specified file ;; CHECK-NEXT: ;; CHECK-NEXT: --output-source-map,-osm Emit source map to the specified ;; CHECK-NEXT: file ;; CHECK-NEXT: ;; CHECK-NEXT: --output-source-map-url,-osu Emit specified string as source ;; CHECK-NEXT: map URL ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Optimization passes: ;; CHECK-NEXT: -------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --alignment-lowering lower unaligned loads and stores ;; CHECK-NEXT: to smaller aligned ones ;; CHECK-NEXT: ;; CHECK-NEXT: --asyncify async/await style transform, ;; CHECK-NEXT: allowing pausing and resuming ;; CHECK-NEXT: ;; CHECK-NEXT: --avoid-reinterprets Tries to avoid reinterpret ;; CHECK-NEXT: operations via more loads ;; CHECK-NEXT: ;; CHECK-NEXT: --cfp propagate constant struct field ;; CHECK-NEXT: values ;; CHECK-NEXT: ;; CHECK-NEXT: --coalesce-locals reduce # of locals by coalescing ;; CHECK-NEXT: ;; CHECK-NEXT: --coalesce-locals-learning reduce # of locals by coalescing ;; CHECK-NEXT: and learning ;; CHECK-NEXT: ;; CHECK-NEXT: --code-folding fold code, merging duplicates ;; CHECK-NEXT: ;; CHECK-NEXT: --code-pushing push code forward, potentially ;; CHECK-NEXT: making it not always execute ;; CHECK-NEXT: ;; CHECK-NEXT: --const-hoisting hoist repeated constants to a ;; CHECK-NEXT: local ;; CHECK-NEXT: ;; CHECK-NEXT: --dae removes arguments to calls in an ;; CHECK-NEXT: lto-like manner ;; CHECK-NEXT: ;; CHECK-NEXT: --dae-optimizing removes arguments to calls in an ;; CHECK-NEXT: lto-like manner, and optimizes ;; CHECK-NEXT: where we removed ;; CHECK-NEXT: ;; CHECK-NEXT: --dce removes unreachable code ;; CHECK-NEXT: ;; CHECK-NEXT: --dealign forces all loads and stores to ;; CHECK-NEXT: have alignment 1 ;; CHECK-NEXT: ;; CHECK-NEXT: --denan instrument the wasm to convert ;; CHECK-NEXT: NaNs into 0 at runtime ;; CHECK-NEXT: ;; CHECK-NEXT: --dfo optimizes using the DataFlow SSA ;; CHECK-NEXT: IR ;; CHECK-NEXT: ;; CHECK-NEXT: --directize turns indirect calls into direct ;; CHECK-NEXT: ones ;; CHECK-NEXT: ;; CHECK-NEXT: --duplicate-function-elimination removes duplicate functions ;; CHECK-NEXT: ;; CHECK-NEXT: --duplicate-import-elimination removes duplicate imports ;; CHECK-NEXT: ;; CHECK-NEXT: --dwarfdump dump DWARF debug info sections ;; CHECK-NEXT: from the read binary ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-target-features emit the target features section ;; CHECK-NEXT: in the output ;; CHECK-NEXT: ;; CHECK-NEXT: --extract-function leaves just one function (useful ;; CHECK-NEXT: for debugging) ;; CHECK-NEXT: ;; CHECK-NEXT: --extract-function-index leaves just one function ;; CHECK-NEXT: selected by index ;; CHECK-NEXT: ;; CHECK-NEXT: --flatten flattens out code, removing ;; CHECK-NEXT: nesting ;; CHECK-NEXT: ;; CHECK-NEXT: --fpcast-emu emulates function pointer casts, ;; CHECK-NEXT: allowing incorrect indirect ;; CHECK-NEXT: calls to (sometimes) work ;; CHECK-NEXT: ;; CHECK-NEXT: --func-metrics reports function metrics ;; CHECK-NEXT: ;; CHECK-NEXT: --generate-dyncalls generate dynCall fuctions used ;; CHECK-NEXT: by emscripten ABI ;; CHECK-NEXT: ;; CHECK-NEXT: --generate-i64-dyncalls generate dynCall functions used ;; CHECK-NEXT: by emscripten ABI, but only for ;; CHECK-NEXT: functions with i64 in their ;; CHECK-NEXT: signature (which cannot be ;; CHECK-NEXT: invoked via the wasm table ;; CHECK-NEXT: without JavaScript BigInt ;; CHECK-NEXT: support). ;; CHECK-NEXT: ;; CHECK-NEXT: --generate-stack-ir generate Stack IR ;; CHECK-NEXT: ;; CHECK-NEXT: --global-refining refine the types of globals ;; CHECK-NEXT: ;; CHECK-NEXT: --gto globally optimize GC types ;; CHECK-NEXT: ;; CHECK-NEXT: --heap2local replace GC allocations with ;; CHECK-NEXT: locals ;; CHECK-NEXT: ;; CHECK-NEXT: --i64-to-i32-lowering lower all uses of i64s to use ;; CHECK-NEXT: i32s instead ;; CHECK-NEXT: ;; CHECK-NEXT: --inline-main inline __original_main into main ;; CHECK-NEXT: ;; CHECK-NEXT: --inlining inline functions (you probably ;; CHECK-NEXT: want inlining-optimizing) ;; CHECK-NEXT: ;; CHECK-NEXT: --inlining-optimizing inline functions and optimizes ;; CHECK-NEXT: where we inlined ;; CHECK-NEXT: ;; CHECK-NEXT: --instrument-locals instrument the build with code ;; CHECK-NEXT: to intercept all loads and ;; CHECK-NEXT: stores ;; CHECK-NEXT: ;; CHECK-NEXT: --instrument-memory instrument the build with code ;; CHECK-NEXT: to intercept all loads and ;; CHECK-NEXT: stores ;; CHECK-NEXT: ;; CHECK-NEXT: --intrinsic-lowering lower away binaryen intrinsics ;; CHECK-NEXT: ;; CHECK-NEXT: --legalize-js-interface legalizes i64 types on the ;; CHECK-NEXT: import/export boundary ;; CHECK-NEXT: ;; CHECK-NEXT: --legalize-js-interface-minimally legalizes i64 types on the ;; CHECK-NEXT: import/export boundary in a ;; CHECK-NEXT: minimal manner, only on things ;; CHECK-NEXT: only JS will call ;; CHECK-NEXT: ;; CHECK-NEXT: --licm loop invariant code motion ;; CHECK-NEXT: ;; CHECK-NEXT: --limit-segments attempt to merge segments to fit ;; CHECK-NEXT: within web limits ;; CHECK-NEXT: ;; CHECK-NEXT: --local-cse common subexpression elimination ;; CHECK-NEXT: inside basic blocks ;; CHECK-NEXT: ;; CHECK-NEXT: --local-subtyping apply more specific subtypes to ;; CHECK-NEXT: locals where possible ;; CHECK-NEXT: ;; CHECK-NEXT: --log-execution instrument the build with ;; CHECK-NEXT: logging of where execution goes ;; CHECK-NEXT: ;; CHECK-NEXT: --memory-packing packs memory into separate ;; CHECK-NEXT: segments, skipping zeros ;; CHECK-NEXT: ;; CHECK-NEXT: --memory64-lowering lower loads and stores to a ;; CHECK-NEXT: 64-bit memory to instead use a ;; CHECK-NEXT: 32-bit one ;; CHECK-NEXT: ;; CHECK-NEXT: --merge-blocks merges blocks to their parents ;; CHECK-NEXT: ;; CHECK-NEXT: --merge-locals merges locals when beneficial ;; CHECK-NEXT: ;; CHECK-NEXT: --merge-similar-functions merges similar functions when ;; CHECK-NEXT: benefical ;; CHECK-NEXT: ;; CHECK-NEXT: --metrics reports metrics ;; CHECK-NEXT: ;; CHECK-NEXT: --minify-imports minifies import names (only ;; CHECK-NEXT: those, and not export names), ;; CHECK-NEXT: and emits a mapping to the ;; CHECK-NEXT: minified ones ;; CHECK-NEXT: ;; CHECK-NEXT: --minify-imports-and-exports minifies both import and export ;; CHECK-NEXT: names, and emits a mapping to ;; CHECK-NEXT: the minified ones ;; CHECK-NEXT: ;; CHECK-NEXT: --minify-imports-and-exports-and-modules minifies both import and export ;; CHECK-NEXT: names, and emits a mapping to ;; CHECK-NEXT: the minified ones, and minifies ;; CHECK-NEXT: the modules as well ;; CHECK-NEXT: ;; CHECK-NEXT: --mod-asyncify-always-and-only-unwind apply the assumption that ;; CHECK-NEXT: asyncify imports always unwind, ;; CHECK-NEXT: and we never rewind ;; CHECK-NEXT: ;; CHECK-NEXT: --mod-asyncify-never-unwind apply the assumption that ;; CHECK-NEXT: asyncify never unwinds ;; CHECK-NEXT: ;; CHECK-NEXT: --name-types (re)name all heap types ;; CHECK-NEXT: ;; CHECK-NEXT: --nm name list ;; CHECK-NEXT: ;; CHECK-NEXT: --once-reduction reduces calls to code that only ;; CHECK-NEXT: runs once ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-added-constants optimizes added constants into ;; CHECK-NEXT: load/store offsets ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-added-constants-propagate optimizes added constants into ;; CHECK-NEXT: load/store offsets, propagating ;; CHECK-NEXT: them across locals too ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-for-js early optimize of the ;; CHECK-NEXT: instruction combinations for js ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-instructions optimizes instruction ;; CHECK-NEXT: combinations ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-stack-ir optimize Stack IR ;; CHECK-NEXT: ;; CHECK-NEXT: --pick-load-signs pick load signs based on their ;; CHECK-NEXT: uses ;; CHECK-NEXT: ;; CHECK-NEXT: --poppify Tranform Binaryen IR into Poppy ;; CHECK-NEXT: IR ;; CHECK-NEXT: ;; CHECK-NEXT: --post-emscripten miscellaneous optimizations for ;; CHECK-NEXT: Emscripten-generated code ;; CHECK-NEXT: ;; CHECK-NEXT: --precompute computes compile-time ;; CHECK-NEXT: evaluatable expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --precompute-propagate computes compile-time ;; CHECK-NEXT: evaluatable expressions and ;; CHECK-NEXT: propagates them through locals ;; CHECK-NEXT: ;; CHECK-NEXT: --print print in s-expression format ;; CHECK-NEXT: ;; CHECK-NEXT: --print-call-graph print call graph ;; CHECK-NEXT: ;; CHECK-NEXT: --print-features print options for enabled ;; CHECK-NEXT: features ;; CHECK-NEXT: ;; CHECK-NEXT: --print-full print in full s-expression ;; CHECK-NEXT: format ;; CHECK-NEXT: ;; CHECK-NEXT: --print-function-map print a map of function indexes ;; CHECK-NEXT: to names ;; CHECK-NEXT: ;; CHECK-NEXT: --print-minified print in minified s-expression ;; CHECK-NEXT: format ;; CHECK-NEXT: ;; CHECK-NEXT: --print-stack-ir print out Stack IR (useful for ;; CHECK-NEXT: internal debugging) ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-imports removes imports and replaces ;; CHECK-NEXT: them with nops ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-memory removes memory segments ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-non-js-ops removes operations incompatible ;; CHECK-NEXT: with js ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-unused-brs removes breaks from locations ;; CHECK-NEXT: that are not needed ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-unused-module-elements removes unused module elements ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-unused-names removes names from locations ;; CHECK-NEXT: that are never branched to ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-unused-nonfunction-module-elements removes unused module elements ;; CHECK-NEXT: that are not functions ;; CHECK-NEXT: ;; CHECK-NEXT: --reorder-functions sorts functions by access ;; CHECK-NEXT: frequency ;; CHECK-NEXT: ;; CHECK-NEXT: --reorder-locals sorts locals by access frequency ;; CHECK-NEXT: ;; CHECK-NEXT: --rereloop re-optimize control flow using ;; CHECK-NEXT: the relooper algorithm ;; CHECK-NEXT: ;; CHECK-NEXT: --roundtrip write the module to binary, then ;; CHECK-NEXT: read it ;; CHECK-NEXT: ;; CHECK-NEXT: --rse remove redundant local.sets ;; CHECK-NEXT: ;; CHECK-NEXT: --safe-heap instrument loads and stores to ;; CHECK-NEXT: check for invalid behavior ;; CHECK-NEXT: ;; CHECK-NEXT: --set-globals sets specified globals to ;; CHECK-NEXT: specified values ;; CHECK-NEXT: ;; CHECK-NEXT: --signature-pruning remove params from function ;; CHECK-NEXT: signature types where possible ;; CHECK-NEXT: ;; CHECK-NEXT: --signature-refining apply more specific subtypes to ;; CHECK-NEXT: signature types where possible ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-globals miscellaneous globals-related ;; CHECK-NEXT: optimizations ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-globals-optimizing miscellaneous globals-related ;; CHECK-NEXT: optimizations, and optimizes ;; CHECK-NEXT: where we replaced global.gets ;; CHECK-NEXT: with constants ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals miscellaneous locals-related ;; CHECK-NEXT: optimizations ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals-nonesting miscellaneous locals-related ;; CHECK-NEXT: optimizations (no nesting at ;; CHECK-NEXT: all; preserves flatness) ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals-nostructure miscellaneous locals-related ;; CHECK-NEXT: optimizations (no structure) ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals-notee miscellaneous locals-related ;; CHECK-NEXT: optimizations (no tees) ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals-notee-nostructure miscellaneous locals-related ;; CHECK-NEXT: optimizations (no tees or ;; CHECK-NEXT: structure) ;; CHECK-NEXT: ;; CHECK-NEXT: --souperify emit Souper IR in text form ;; CHECK-NEXT: ;; CHECK-NEXT: --souperify-single-use emit Souper IR in text form ;; CHECK-NEXT: (single-use nodes only) ;; CHECK-NEXT: ;; CHECK-NEXT: --ssa ssa-ify variables so that they ;; CHECK-NEXT: have a single assignment ;; CHECK-NEXT: ;; CHECK-NEXT: --ssa-nomerge ssa-ify variables so that they ;; CHECK-NEXT: have a single assignment, ;; CHECK-NEXT: ignoring merges ;; CHECK-NEXT: ;; CHECK-NEXT: --stack-check enforce limits on llvm's ;; CHECK-NEXT: __stack_pointer global ;; CHECK-NEXT: ;; CHECK-NEXT: --strip deprecated; same as strip-debug ;; CHECK-NEXT: ;; CHECK-NEXT: --strip-debug strip debug info (including the ;; CHECK-NEXT: names section) ;; CHECK-NEXT: ;; CHECK-NEXT: --strip-dwarf strip dwarf debug info ;; CHECK-NEXT: ;; CHECK-NEXT: --strip-producers strip the wasm producers section ;; CHECK-NEXT: ;; CHECK-NEXT: --strip-target-features strip the wasm target features ;; CHECK-NEXT: section ;; CHECK-NEXT: ;; CHECK-NEXT: --stub-unsupported-js stub out unsupported JS ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --symbolmap (alias for print-function-map) ;; CHECK-NEXT: ;; CHECK-NEXT: --trap-mode-clamp replace trapping operations with ;; CHECK-NEXT: clamping semantics ;; CHECK-NEXT: ;; CHECK-NEXT: --trap-mode-js replace trapping operations with ;; CHECK-NEXT: js semantics ;; CHECK-NEXT: ;; CHECK-NEXT: --type-refining apply more specific subtypes to ;; CHECK-NEXT: type fields where possible ;; CHECK-NEXT: ;; CHECK-NEXT: --untee removes local.tees, replacing ;; CHECK-NEXT: them with sets and gets ;; CHECK-NEXT: ;; CHECK-NEXT: --vacuum removes obviously unneeded code ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Optimization options: ;; CHECK-NEXT: --------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: -O execute default optimization ;; CHECK-NEXT: passes (equivalent to -Os) ;; CHECK-NEXT: ;; CHECK-NEXT: -O0 execute no optimization passes ;; CHECK-NEXT: ;; CHECK-NEXT: -O1 execute -O1 optimization passes ;; CHECK-NEXT: (quick&useful opts, useful for ;; CHECK-NEXT: iteration builds) ;; CHECK-NEXT: ;; CHECK-NEXT: -O2 execute -O2 optimization passes ;; CHECK-NEXT: (most opts, generally gets most ;; CHECK-NEXT: perf) ;; CHECK-NEXT: ;; CHECK-NEXT: -O3 execute -O3 optimization passes ;; CHECK-NEXT: (spends potentially a lot of ;; CHECK-NEXT: time optimizing) ;; CHECK-NEXT: ;; CHECK-NEXT: -O4 execute -O4 optimization passes ;; CHECK-NEXT: (also flatten the IR, which can ;; CHECK-NEXT: take a lot more time and memory, ;; CHECK-NEXT: but is useful on more nested / ;; CHECK-NEXT: complex / less-optimized input) ;; CHECK-NEXT: ;; CHECK-NEXT: -Os execute default optimization ;; CHECK-NEXT: passes, focusing on code size ;; CHECK-NEXT: ;; CHECK-NEXT: -Oz execute default optimization ;; CHECK-NEXT: passes, super-focusing on code ;; CHECK-NEXT: size ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-level,-ol How much to focus on optimizing ;; CHECK-NEXT: code ;; CHECK-NEXT: ;; CHECK-NEXT: --shrink-level,-s How much to focus on shrinking ;; CHECK-NEXT: code size ;; CHECK-NEXT: ;; CHECK-NEXT: --debuginfo,-g Emit names section in wasm ;; CHECK-NEXT: binary (or full debuginfo in ;; CHECK-NEXT: wast) ;; CHECK-NEXT: ;; CHECK-NEXT: --always-inline-max-function-size,-aimfs Max size of functions that are ;; CHECK-NEXT: always inlined (default 2, which ;; CHECK-NEXT: is safe for use with -Os builds) ;; CHECK-NEXT: ;; CHECK-NEXT: --flexible-inline-max-function-size,-fimfs Max size of functions that are ;; CHECK-NEXT: inlined when lightweight (no ;; CHECK-NEXT: loops or function calls) when ;; CHECK-NEXT: optimizing aggressively for ;; CHECK-NEXT: speed (-O3). Default: 20 ;; CHECK-NEXT: ;; CHECK-NEXT: --one-caller-inline-max-function-size,-ocimfs Max size of functions that are ;; CHECK-NEXT: inlined when there is only one ;; CHECK-NEXT: caller (default -1, which means ;; CHECK-NEXT: all such functions are inlined) ;; CHECK-NEXT: ;; CHECK-NEXT: --inline-functions-with-loops,-ifwl Allow inlining functions with ;; CHECK-NEXT: loops ;; CHECK-NEXT: ;; CHECK-NEXT: --partial-inlining-ifs,-pii Number of ifs allowed in partial ;; CHECK-NEXT: inlining (zero means partial ;; CHECK-NEXT: inlining is disabled) (default: ;; CHECK-NEXT: 0) ;; CHECK-NEXT: ;; CHECK-NEXT: --ignore-implicit-traps,-iit Optimize under the helpful ;; CHECK-NEXT: assumption that no surprising ;; CHECK-NEXT: traps occur (from load, div/mod, ;; CHECK-NEXT: etc.) ;; CHECK-NEXT: ;; CHECK-NEXT: --traps-never-happen,-tnh Optimize under the helpful ;; CHECK-NEXT: assumption that no trap is ;; CHECK-NEXT: reached at runtime (from load, ;; CHECK-NEXT: div/mod, etc.) ;; CHECK-NEXT: ;; CHECK-NEXT: --low-memory-unused,-lmu Optimize under the helpful ;; CHECK-NEXT: assumption that the low 1K of ;; CHECK-NEXT: memory is not used by the ;; CHECK-NEXT: application ;; CHECK-NEXT: ;; CHECK-NEXT: --fast-math,-ffm Optimize floats without handling ;; CHECK-NEXT: corner cases of NaNs and ;; CHECK-NEXT: rounding ;; CHECK-NEXT: ;; CHECK-NEXT: --zero-filled-memory,-uim Assume that an imported memory ;; CHECK-NEXT: will be zero-initialized ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does ;; CHECK-NEXT: nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and ;; CHECK-NEXT: hide trivial warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for ;; CHECK-NEXT: testing purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and ;; CHECK-NEXT: types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function ;; CHECK-NEXT: references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const ;; CHECK-NEXT: expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const ;; CHECK-NEXT: expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes ;; CHECK-NEXT: inputs are correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to ;; CHECK-NEXT: optimization passes being run. ;; CHECK-NEXT: Must be in the form KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to ;; CHECK-NEXT: be parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to ;; CHECK-NEXT: be parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the ;; CHECK-NEXT: default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to ;; CHECK-NEXT: be parsed using the isorecursive ;; CHECK-NEXT: hybrid type system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and ;; CHECK-NEXT: exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to ;; CHECK-NEXT: stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-reduce.test000066400000000000000000000210751423707623100225660ustar00rootroot00000000000000;; RUN: wasm-reduce --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-reduce INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: Reduce a wasm file to a smaller one that has the same behavior on a given ;; CHECK-NEXT: command ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-reduce options: ;; CHECK-NEXT: -------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --command,-cmd The command to run on the test, that we ;; CHECK-NEXT: want to reduce while keeping the ;; CHECK-NEXT: command's output identical. We look at ;; CHECK-NEXT: the command's return code and stdout here ;; CHECK-NEXT: (TODO: stderr), and we reduce while ;; CHECK-NEXT: keeping those unchanged. ;; CHECK-NEXT: ;; CHECK-NEXT: --test,-t Test file (this will be written to to ;; CHECK-NEXT: test, the given command should read it ;; CHECK-NEXT: when we call it) ;; CHECK-NEXT: ;; CHECK-NEXT: --working,-w Working file (this will contain the ;; CHECK-NEXT: current good state while doing temporary ;; CHECK-NEXT: computations, and will contain the final ;; CHECK-NEXT: best result at the end) ;; CHECK-NEXT: ;; CHECK-NEXT: --binaries,-b binaryen binaries location (bin/ ;; CHECK-NEXT: directory) ;; CHECK-NEXT: ;; CHECK-NEXT: --text,-S Emit intermediate files as text, instead ;; CHECK-NEXT: of binary (also make sure the test and ;; CHECK-NEXT: working files have a .wat or .wast ;; CHECK-NEXT: suffix) ;; CHECK-NEXT: ;; CHECK-NEXT: --denan Avoid nans when reducing ;; CHECK-NEXT: ;; CHECK-NEXT: --verbose,-v Verbose output mode ;; CHECK-NEXT: ;; CHECK-NEXT: --debugInfo,-g Keep debug info in binaries ;; CHECK-NEXT: ;; CHECK-NEXT: --force,-f Force the reduction attempt, ignoring ;; CHECK-NEXT: problems that imply it is unlikely to ;; CHECK-NEXT: succeed ;; CHECK-NEXT: ;; CHECK-NEXT: --timeout,-to A timeout to apply to each execution of ;; CHECK-NEXT: the command, in seconds (default: 2) ;; CHECK-NEXT: ;; CHECK-NEXT: --extra-flags,-ef Extra commandline flags to pass to ;; CHECK-NEXT: wasm-opt while reducing. (default: ;; CHECK-NEXT: --enable-all) ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial ;; CHECK-NEXT: warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing ;; CHECK-NEXT: purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are ;; CHECK-NEXT: correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization ;; CHECK-NEXT: passes being run. Must be in the form ;; CHECK-NEXT: KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to be ;; CHECK-NEXT: parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to be ;; CHECK-NEXT: parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to be ;; CHECK-NEXT: parsed using the isorecursive hybrid type ;; CHECK-NEXT: system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-shell.test000066400000000000000000000016461423707623100224300ustar00rootroot00000000000000;; RUN: wasm-shell --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-shell INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: Execute .wast files ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-shell options: ;; CHECK-NEXT: ------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --entry,-e Call the entry point after parsing the module ;; CHECK-NEXT: ;; CHECK-NEXT: --skip,-s Skip input on certain lines (comma-separated-list) ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm-split.test000066400000000000000000000317411423707623100224530ustar00rootroot00000000000000;; RUN: wasm-split --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm-split INFILES ;; CHECK-NEXT: ;; CHECK-NEXT: Split a module into a primary module and a secondary module, or instrument a ;; CHECK-NEXT: module to gather a profile that can inform future splitting, or manage such ;; CHECK-NEXT: profiles. Options that are only accepted in particular modes are marked with the ;; CHECK-NEXT: accepted "[]" in their descriptions. ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm-split options: ;; CHECK-NEXT: ------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --split Split an input module into two output ;; CHECK-NEXT: modules. The default mode. ;; CHECK-NEXT: ;; CHECK-NEXT: --instrument Instrument an input module to allow it to ;; CHECK-NEXT: generate a profile that can be used to ;; CHECK-NEXT: guide splitting. ;; CHECK-NEXT: ;; CHECK-NEXT: --merge-profiles Merge multiple profiles for the same ;; CHECK-NEXT: module into a single profile. ;; CHECK-NEXT: ;; CHECK-NEXT: --profile [split] The profile to use to guide ;; CHECK-NEXT: splitting. ;; CHECK-NEXT: ;; CHECK-NEXT: --keep-funcs [split] Comma-separated list of functions ;; CHECK-NEXT: to keep in the primary module. The rest ;; CHECK-NEXT: will be split out. Cannot be used with ;; CHECK-NEXT: --profile or --split-funcs. You can also ;; CHECK-NEXT: pass a file with one function per line by ;; CHECK-NEXT: passing @filename. ;; CHECK-NEXT: ;; CHECK-NEXT: --split-funcs [split] Comma-separated list of functions ;; CHECK-NEXT: to split out to the secondary module. The ;; CHECK-NEXT: rest will be kept. Cannot be used with ;; CHECK-NEXT: --profile or --keep-funcs. You can also ;; CHECK-NEXT: pass a file with one function per line by ;; CHECK-NEXT: passing @filename. ;; CHECK-NEXT: ;; CHECK-NEXT: --primary-output,-o1 [split] Output file for the primary ;; CHECK-NEXT: module. ;; CHECK-NEXT: ;; CHECK-NEXT: --secondary-output,-o2 [split] Output file for the secondary ;; CHECK-NEXT: module. ;; CHECK-NEXT: ;; CHECK-NEXT: --symbolmap [split] Write a symbol map file for each ;; CHECK-NEXT: of the output modules. ;; CHECK-NEXT: ;; CHECK-NEXT: --placeholdermap [split] Write a file mapping placeholder ;; CHECK-NEXT: indices to the function names. ;; CHECK-NEXT: ;; CHECK-NEXT: --import-namespace [split] The namespace from which to ;; CHECK-NEXT: import objects from the primary module ;; CHECK-NEXT: into the secondary module. ;; CHECK-NEXT: ;; CHECK-NEXT: --placeholder-namespace [split] The namespace from which to ;; CHECK-NEXT: import placeholder functions into the ;; CHECK-NEXT: primary module. ;; CHECK-NEXT: ;; CHECK-NEXT: --asyncify [split] Transform the module to support ;; CHECK-NEXT: unwinding the stack from placeholder ;; CHECK-NEXT: functions and rewinding it once the ;; CHECK-NEXT: secondary module has been loaded. ;; CHECK-NEXT: ;; CHECK-NEXT: --export-prefix [split] An identifying prefix to prepend ;; CHECK-NEXT: to new export names created by module ;; CHECK-NEXT: splitting. ;; CHECK-NEXT: ;; CHECK-NEXT: --profile-export [instrument] The export name of the ;; CHECK-NEXT: function the embedder calls to write the ;; CHECK-NEXT: profile into memory. Defaults to ;; CHECK-NEXT: `__write_profile`. ;; CHECK-NEXT: ;; CHECK-NEXT: --in-memory [instrument] Store profile information in ;; CHECK-NEXT: memory (starting at address 0 and taking ;; CHECK-NEXT: one byte per function) rather than ;; CHECK-NEXT: globals (the default) so that it can be ;; CHECK-NEXT: shared between multiple threads. Users ;; CHECK-NEXT: are responsible for ensuring that the ;; CHECK-NEXT: module does not use the initial memory ;; CHECK-NEXT: region for anything else. ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-module-names [split, instrument] Emit module names, ;; CHECK-NEXT: even if not emitting the rest of the ;; CHECK-NEXT: names section. Can help differentiate the ;; CHECK-NEXT: modules in stack traces. This option will ;; CHECK-NEXT: be removed once simpler ways of naming ;; CHECK-NEXT: modules are widely available. See ;; CHECK-NEXT: https://bugs.chromium.org/p/v8/issues/detail?id=11808. ;; CHECK-NEXT: ;; CHECK-NEXT: --initial-table [split, instrument] A hack to ensure the ;; CHECK-NEXT: split and instrumented modules have the ;; CHECK-NEXT: same table size when using Emscripten's ;; CHECK-NEXT: SPLIT_MODULE mode with dynamic linking. ;; CHECK-NEXT: TODO: Figure out a more elegant solution ;; CHECK-NEXT: for that use case and remove this. ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-text,-S [split, instrument] Emit text instead of ;; CHECK-NEXT: binary for the output file or files. ;; CHECK-NEXT: ;; CHECK-NEXT: --debuginfo,-g [split, instrument] Emit names section in ;; CHECK-NEXT: wasm binary (or full debuginfo in wast) ;; CHECK-NEXT: ;; CHECK-NEXT: --output,-o [instrument, merge-profiles] Output file. ;; CHECK-NEXT: ;; CHECK-NEXT: --verbose,-v Verbose output mode. Prints the functions ;; CHECK-NEXT: that will be kept and split out when ;; CHECK-NEXT: splitting a module. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial ;; CHECK-NEXT: warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing ;; CHECK-NEXT: purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are ;; CHECK-NEXT: correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization ;; CHECK-NEXT: passes being run. Must be in the form ;; CHECK-NEXT: KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to be ;; CHECK-NEXT: parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to be ;; CHECK-NEXT: parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to be ;; CHECK-NEXT: parsed using the isorecursive hybrid type ;; CHECK-NEXT: system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/help/wasm2js.test000066400000000000000000001104171423707623100217370ustar00rootroot00000000000000;; RUN: wasm2js --help | filecheck %s ;; CHECK: ================================================================================ ;; CHECK-NEXT: wasm2js INFILE ;; CHECK-NEXT: ;; CHECK-NEXT: Transform .wasm/.wat files to asm.js ;; CHECK-NEXT: ================================================================================ ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: wasm2js options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --output,-o Output file (stdout if not ;; CHECK-NEXT: specified) ;; CHECK-NEXT: ;; CHECK-NEXT: --allow-asserts Allow compilation of .wast ;; CHECK-NEXT: testing asserts ;; CHECK-NEXT: ;; CHECK-NEXT: --pedantic Emulate WebAssembly trapping ;; CHECK-NEXT: behavior ;; CHECK-NEXT: ;; CHECK-NEXT: --emscripten Emulate the glue in ;; CHECK-NEXT: emscripten-compatible form (and ;; CHECK-NEXT: not ES6 module form) ;; CHECK-NEXT: ;; CHECK-NEXT: --deterministic Replace WebAssembly trapping ;; CHECK-NEXT: behavior deterministically (the ;; CHECK-NEXT: default is to not care about ;; CHECK-NEXT: what would trap in wasm, like a ;; CHECK-NEXT: load out of bounds or integer ;; CHECK-NEXT: divide by zero; with this flag, ;; CHECK-NEXT: we try to be deterministic at ;; CHECK-NEXT: least in what happens, which ;; CHECK-NEXT: might or might not be to trap ;; CHECK-NEXT: like wasm, but at least should ;; CHECK-NEXT: not vary) ;; CHECK-NEXT: ;; CHECK-NEXT: --symbols-file Emit a symbols file that maps ;; CHECK-NEXT: function indexes to their ;; CHECK-NEXT: original names ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Optimization passes: ;; CHECK-NEXT: -------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --alignment-lowering lower unaligned loads and stores ;; CHECK-NEXT: to smaller aligned ones ;; CHECK-NEXT: ;; CHECK-NEXT: --asyncify async/await style transform, ;; CHECK-NEXT: allowing pausing and resuming ;; CHECK-NEXT: ;; CHECK-NEXT: --avoid-reinterprets Tries to avoid reinterpret ;; CHECK-NEXT: operations via more loads ;; CHECK-NEXT: ;; CHECK-NEXT: --cfp propagate constant struct field ;; CHECK-NEXT: values ;; CHECK-NEXT: ;; CHECK-NEXT: --coalesce-locals reduce # of locals by coalescing ;; CHECK-NEXT: ;; CHECK-NEXT: --coalesce-locals-learning reduce # of locals by coalescing ;; CHECK-NEXT: and learning ;; CHECK-NEXT: ;; CHECK-NEXT: --code-folding fold code, merging duplicates ;; CHECK-NEXT: ;; CHECK-NEXT: --code-pushing push code forward, potentially ;; CHECK-NEXT: making it not always execute ;; CHECK-NEXT: ;; CHECK-NEXT: --const-hoisting hoist repeated constants to a ;; CHECK-NEXT: local ;; CHECK-NEXT: ;; CHECK-NEXT: --dae removes arguments to calls in an ;; CHECK-NEXT: lto-like manner ;; CHECK-NEXT: ;; CHECK-NEXT: --dae-optimizing removes arguments to calls in an ;; CHECK-NEXT: lto-like manner, and optimizes ;; CHECK-NEXT: where we removed ;; CHECK-NEXT: ;; CHECK-NEXT: --dce removes unreachable code ;; CHECK-NEXT: ;; CHECK-NEXT: --dealign forces all loads and stores to ;; CHECK-NEXT: have alignment 1 ;; CHECK-NEXT: ;; CHECK-NEXT: --denan instrument the wasm to convert ;; CHECK-NEXT: NaNs into 0 at runtime ;; CHECK-NEXT: ;; CHECK-NEXT: --dfo optimizes using the DataFlow SSA ;; CHECK-NEXT: IR ;; CHECK-NEXT: ;; CHECK-NEXT: --directize turns indirect calls into direct ;; CHECK-NEXT: ones ;; CHECK-NEXT: ;; CHECK-NEXT: --duplicate-function-elimination removes duplicate functions ;; CHECK-NEXT: ;; CHECK-NEXT: --duplicate-import-elimination removes duplicate imports ;; CHECK-NEXT: ;; CHECK-NEXT: --dwarfdump dump DWARF debug info sections ;; CHECK-NEXT: from the read binary ;; CHECK-NEXT: ;; CHECK-NEXT: --emit-target-features emit the target features section ;; CHECK-NEXT: in the output ;; CHECK-NEXT: ;; CHECK-NEXT: --extract-function leaves just one function (useful ;; CHECK-NEXT: for debugging) ;; CHECK-NEXT: ;; CHECK-NEXT: --extract-function-index leaves just one function ;; CHECK-NEXT: selected by index ;; CHECK-NEXT: ;; CHECK-NEXT: --flatten flattens out code, removing ;; CHECK-NEXT: nesting ;; CHECK-NEXT: ;; CHECK-NEXT: --fpcast-emu emulates function pointer casts, ;; CHECK-NEXT: allowing incorrect indirect ;; CHECK-NEXT: calls to (sometimes) work ;; CHECK-NEXT: ;; CHECK-NEXT: --func-metrics reports function metrics ;; CHECK-NEXT: ;; CHECK-NEXT: --generate-dyncalls generate dynCall fuctions used ;; CHECK-NEXT: by emscripten ABI ;; CHECK-NEXT: ;; CHECK-NEXT: --generate-i64-dyncalls generate dynCall functions used ;; CHECK-NEXT: by emscripten ABI, but only for ;; CHECK-NEXT: functions with i64 in their ;; CHECK-NEXT: signature (which cannot be ;; CHECK-NEXT: invoked via the wasm table ;; CHECK-NEXT: without JavaScript BigInt ;; CHECK-NEXT: support). ;; CHECK-NEXT: ;; CHECK-NEXT: --generate-stack-ir generate Stack IR ;; CHECK-NEXT: ;; CHECK-NEXT: --global-refining refine the types of globals ;; CHECK-NEXT: ;; CHECK-NEXT: --gto globally optimize GC types ;; CHECK-NEXT: ;; CHECK-NEXT: --heap2local replace GC allocations with ;; CHECK-NEXT: locals ;; CHECK-NEXT: ;; CHECK-NEXT: --i64-to-i32-lowering lower all uses of i64s to use ;; CHECK-NEXT: i32s instead ;; CHECK-NEXT: ;; CHECK-NEXT: --inline-main inline __original_main into main ;; CHECK-NEXT: ;; CHECK-NEXT: --inlining inline functions (you probably ;; CHECK-NEXT: want inlining-optimizing) ;; CHECK-NEXT: ;; CHECK-NEXT: --inlining-optimizing inline functions and optimizes ;; CHECK-NEXT: where we inlined ;; CHECK-NEXT: ;; CHECK-NEXT: --instrument-locals instrument the build with code ;; CHECK-NEXT: to intercept all loads and ;; CHECK-NEXT: stores ;; CHECK-NEXT: ;; CHECK-NEXT: --instrument-memory instrument the build with code ;; CHECK-NEXT: to intercept all loads and ;; CHECK-NEXT: stores ;; CHECK-NEXT: ;; CHECK-NEXT: --intrinsic-lowering lower away binaryen intrinsics ;; CHECK-NEXT: ;; CHECK-NEXT: --legalize-js-interface legalizes i64 types on the ;; CHECK-NEXT: import/export boundary ;; CHECK-NEXT: ;; CHECK-NEXT: --legalize-js-interface-minimally legalizes i64 types on the ;; CHECK-NEXT: import/export boundary in a ;; CHECK-NEXT: minimal manner, only on things ;; CHECK-NEXT: only JS will call ;; CHECK-NEXT: ;; CHECK-NEXT: --licm loop invariant code motion ;; CHECK-NEXT: ;; CHECK-NEXT: --limit-segments attempt to merge segments to fit ;; CHECK-NEXT: within web limits ;; CHECK-NEXT: ;; CHECK-NEXT: --local-cse common subexpression elimination ;; CHECK-NEXT: inside basic blocks ;; CHECK-NEXT: ;; CHECK-NEXT: --local-subtyping apply more specific subtypes to ;; CHECK-NEXT: locals where possible ;; CHECK-NEXT: ;; CHECK-NEXT: --log-execution instrument the build with ;; CHECK-NEXT: logging of where execution goes ;; CHECK-NEXT: ;; CHECK-NEXT: --memory-packing packs memory into separate ;; CHECK-NEXT: segments, skipping zeros ;; CHECK-NEXT: ;; CHECK-NEXT: --memory64-lowering lower loads and stores to a ;; CHECK-NEXT: 64-bit memory to instead use a ;; CHECK-NEXT: 32-bit one ;; CHECK-NEXT: ;; CHECK-NEXT: --merge-blocks merges blocks to their parents ;; CHECK-NEXT: ;; CHECK-NEXT: --merge-locals merges locals when beneficial ;; CHECK-NEXT: ;; CHECK-NEXT: --merge-similar-functions merges similar functions when ;; CHECK-NEXT: benefical ;; CHECK-NEXT: ;; CHECK-NEXT: --metrics reports metrics ;; CHECK-NEXT: ;; CHECK-NEXT: --minify-imports minifies import names (only ;; CHECK-NEXT: those, and not export names), ;; CHECK-NEXT: and emits a mapping to the ;; CHECK-NEXT: minified ones ;; CHECK-NEXT: ;; CHECK-NEXT: --minify-imports-and-exports minifies both import and export ;; CHECK-NEXT: names, and emits a mapping to ;; CHECK-NEXT: the minified ones ;; CHECK-NEXT: ;; CHECK-NEXT: --minify-imports-and-exports-and-modules minifies both import and export ;; CHECK-NEXT: names, and emits a mapping to ;; CHECK-NEXT: the minified ones, and minifies ;; CHECK-NEXT: the modules as well ;; CHECK-NEXT: ;; CHECK-NEXT: --mod-asyncify-always-and-only-unwind apply the assumption that ;; CHECK-NEXT: asyncify imports always unwind, ;; CHECK-NEXT: and we never rewind ;; CHECK-NEXT: ;; CHECK-NEXT: --mod-asyncify-never-unwind apply the assumption that ;; CHECK-NEXT: asyncify never unwinds ;; CHECK-NEXT: ;; CHECK-NEXT: --name-types (re)name all heap types ;; CHECK-NEXT: ;; CHECK-NEXT: --nm name list ;; CHECK-NEXT: ;; CHECK-NEXT: --once-reduction reduces calls to code that only ;; CHECK-NEXT: runs once ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-added-constants optimizes added constants into ;; CHECK-NEXT: load/store offsets ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-added-constants-propagate optimizes added constants into ;; CHECK-NEXT: load/store offsets, propagating ;; CHECK-NEXT: them across locals too ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-for-js early optimize of the ;; CHECK-NEXT: instruction combinations for js ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-instructions optimizes instruction ;; CHECK-NEXT: combinations ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-stack-ir optimize Stack IR ;; CHECK-NEXT: ;; CHECK-NEXT: --pick-load-signs pick load signs based on their ;; CHECK-NEXT: uses ;; CHECK-NEXT: ;; CHECK-NEXT: --poppify Tranform Binaryen IR into Poppy ;; CHECK-NEXT: IR ;; CHECK-NEXT: ;; CHECK-NEXT: --post-emscripten miscellaneous optimizations for ;; CHECK-NEXT: Emscripten-generated code ;; CHECK-NEXT: ;; CHECK-NEXT: --precompute computes compile-time ;; CHECK-NEXT: evaluatable expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --precompute-propagate computes compile-time ;; CHECK-NEXT: evaluatable expressions and ;; CHECK-NEXT: propagates them through locals ;; CHECK-NEXT: ;; CHECK-NEXT: --print print in s-expression format ;; CHECK-NEXT: ;; CHECK-NEXT: --print-call-graph print call graph ;; CHECK-NEXT: ;; CHECK-NEXT: --print-features print options for enabled ;; CHECK-NEXT: features ;; CHECK-NEXT: ;; CHECK-NEXT: --print-full print in full s-expression ;; CHECK-NEXT: format ;; CHECK-NEXT: ;; CHECK-NEXT: --print-function-map print a map of function indexes ;; CHECK-NEXT: to names ;; CHECK-NEXT: ;; CHECK-NEXT: --print-minified print in minified s-expression ;; CHECK-NEXT: format ;; CHECK-NEXT: ;; CHECK-NEXT: --print-stack-ir print out Stack IR (useful for ;; CHECK-NEXT: internal debugging) ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-imports removes imports and replaces ;; CHECK-NEXT: them with nops ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-memory removes memory segments ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-non-js-ops removes operations incompatible ;; CHECK-NEXT: with js ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-unused-brs removes breaks from locations ;; CHECK-NEXT: that are not needed ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-unused-module-elements removes unused module elements ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-unused-names removes names from locations ;; CHECK-NEXT: that are never branched to ;; CHECK-NEXT: ;; CHECK-NEXT: --remove-unused-nonfunction-module-elements removes unused module elements ;; CHECK-NEXT: that are not functions ;; CHECK-NEXT: ;; CHECK-NEXT: --reorder-functions sorts functions by access ;; CHECK-NEXT: frequency ;; CHECK-NEXT: ;; CHECK-NEXT: --reorder-locals sorts locals by access frequency ;; CHECK-NEXT: ;; CHECK-NEXT: --rereloop re-optimize control flow using ;; CHECK-NEXT: the relooper algorithm ;; CHECK-NEXT: ;; CHECK-NEXT: --roundtrip write the module to binary, then ;; CHECK-NEXT: read it ;; CHECK-NEXT: ;; CHECK-NEXT: --rse remove redundant local.sets ;; CHECK-NEXT: ;; CHECK-NEXT: --safe-heap instrument loads and stores to ;; CHECK-NEXT: check for invalid behavior ;; CHECK-NEXT: ;; CHECK-NEXT: --set-globals sets specified globals to ;; CHECK-NEXT: specified values ;; CHECK-NEXT: ;; CHECK-NEXT: --signature-pruning remove params from function ;; CHECK-NEXT: signature types where possible ;; CHECK-NEXT: ;; CHECK-NEXT: --signature-refining apply more specific subtypes to ;; CHECK-NEXT: signature types where possible ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-globals miscellaneous globals-related ;; CHECK-NEXT: optimizations ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-globals-optimizing miscellaneous globals-related ;; CHECK-NEXT: optimizations, and optimizes ;; CHECK-NEXT: where we replaced global.gets ;; CHECK-NEXT: with constants ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals miscellaneous locals-related ;; CHECK-NEXT: optimizations ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals-nonesting miscellaneous locals-related ;; CHECK-NEXT: optimizations (no nesting at ;; CHECK-NEXT: all; preserves flatness) ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals-nostructure miscellaneous locals-related ;; CHECK-NEXT: optimizations (no structure) ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals-notee miscellaneous locals-related ;; CHECK-NEXT: optimizations (no tees) ;; CHECK-NEXT: ;; CHECK-NEXT: --simplify-locals-notee-nostructure miscellaneous locals-related ;; CHECK-NEXT: optimizations (no tees or ;; CHECK-NEXT: structure) ;; CHECK-NEXT: ;; CHECK-NEXT: --souperify emit Souper IR in text form ;; CHECK-NEXT: ;; CHECK-NEXT: --souperify-single-use emit Souper IR in text form ;; CHECK-NEXT: (single-use nodes only) ;; CHECK-NEXT: ;; CHECK-NEXT: --ssa ssa-ify variables so that they ;; CHECK-NEXT: have a single assignment ;; CHECK-NEXT: ;; CHECK-NEXT: --ssa-nomerge ssa-ify variables so that they ;; CHECK-NEXT: have a single assignment, ;; CHECK-NEXT: ignoring merges ;; CHECK-NEXT: ;; CHECK-NEXT: --stack-check enforce limits on llvm's ;; CHECK-NEXT: __stack_pointer global ;; CHECK-NEXT: ;; CHECK-NEXT: --strip deprecated; same as strip-debug ;; CHECK-NEXT: ;; CHECK-NEXT: --strip-debug strip debug info (including the ;; CHECK-NEXT: names section) ;; CHECK-NEXT: ;; CHECK-NEXT: --strip-dwarf strip dwarf debug info ;; CHECK-NEXT: ;; CHECK-NEXT: --strip-producers strip the wasm producers section ;; CHECK-NEXT: ;; CHECK-NEXT: --strip-target-features strip the wasm target features ;; CHECK-NEXT: section ;; CHECK-NEXT: ;; CHECK-NEXT: --stub-unsupported-js stub out unsupported JS ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --symbolmap (alias for print-function-map) ;; CHECK-NEXT: ;; CHECK-NEXT: --trap-mode-clamp replace trapping operations with ;; CHECK-NEXT: clamping semantics ;; CHECK-NEXT: ;; CHECK-NEXT: --trap-mode-js replace trapping operations with ;; CHECK-NEXT: js semantics ;; CHECK-NEXT: ;; CHECK-NEXT: --type-refining apply more specific subtypes to ;; CHECK-NEXT: type fields where possible ;; CHECK-NEXT: ;; CHECK-NEXT: --untee removes local.tees, replacing ;; CHECK-NEXT: them with sets and gets ;; CHECK-NEXT: ;; CHECK-NEXT: --vacuum removes obviously unneeded code ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Optimization options: ;; CHECK-NEXT: --------------------- ;; CHECK-NEXT: ;; CHECK-NEXT: -O execute default optimization ;; CHECK-NEXT: passes (equivalent to -Os) ;; CHECK-NEXT: ;; CHECK-NEXT: -O0 execute no optimization passes ;; CHECK-NEXT: ;; CHECK-NEXT: -O1 execute -O1 optimization passes ;; CHECK-NEXT: (quick&useful opts, useful for ;; CHECK-NEXT: iteration builds) ;; CHECK-NEXT: ;; CHECK-NEXT: -O2 execute -O2 optimization passes ;; CHECK-NEXT: (most opts, generally gets most ;; CHECK-NEXT: perf) ;; CHECK-NEXT: ;; CHECK-NEXT: -O3 execute -O3 optimization passes ;; CHECK-NEXT: (spends potentially a lot of ;; CHECK-NEXT: time optimizing) ;; CHECK-NEXT: ;; CHECK-NEXT: -O4 execute -O4 optimization passes ;; CHECK-NEXT: (also flatten the IR, which can ;; CHECK-NEXT: take a lot more time and memory, ;; CHECK-NEXT: but is useful on more nested / ;; CHECK-NEXT: complex / less-optimized input) ;; CHECK-NEXT: ;; CHECK-NEXT: -Os execute default optimization ;; CHECK-NEXT: passes, focusing on code size ;; CHECK-NEXT: ;; CHECK-NEXT: -Oz execute default optimization ;; CHECK-NEXT: passes, super-focusing on code ;; CHECK-NEXT: size ;; CHECK-NEXT: ;; CHECK-NEXT: --optimize-level,-ol How much to focus on optimizing ;; CHECK-NEXT: code ;; CHECK-NEXT: ;; CHECK-NEXT: --shrink-level,-s How much to focus on shrinking ;; CHECK-NEXT: code size ;; CHECK-NEXT: ;; CHECK-NEXT: --debuginfo,-g Emit names section in wasm ;; CHECK-NEXT: binary (or full debuginfo in ;; CHECK-NEXT: wast) ;; CHECK-NEXT: ;; CHECK-NEXT: --always-inline-max-function-size,-aimfs Max size of functions that are ;; CHECK-NEXT: always inlined (default 2, which ;; CHECK-NEXT: is safe for use with -Os builds) ;; CHECK-NEXT: ;; CHECK-NEXT: --flexible-inline-max-function-size,-fimfs Max size of functions that are ;; CHECK-NEXT: inlined when lightweight (no ;; CHECK-NEXT: loops or function calls) when ;; CHECK-NEXT: optimizing aggressively for ;; CHECK-NEXT: speed (-O3). Default: 20 ;; CHECK-NEXT: ;; CHECK-NEXT: --one-caller-inline-max-function-size,-ocimfs Max size of functions that are ;; CHECK-NEXT: inlined when there is only one ;; CHECK-NEXT: caller (default -1, which means ;; CHECK-NEXT: all such functions are inlined) ;; CHECK-NEXT: ;; CHECK-NEXT: --inline-functions-with-loops,-ifwl Allow inlining functions with ;; CHECK-NEXT: loops ;; CHECK-NEXT: ;; CHECK-NEXT: --partial-inlining-ifs,-pii Number of ifs allowed in partial ;; CHECK-NEXT: inlining (zero means partial ;; CHECK-NEXT: inlining is disabled) (default: ;; CHECK-NEXT: 0) ;; CHECK-NEXT: ;; CHECK-NEXT: --ignore-implicit-traps,-iit Optimize under the helpful ;; CHECK-NEXT: assumption that no surprising ;; CHECK-NEXT: traps occur (from load, div/mod, ;; CHECK-NEXT: etc.) ;; CHECK-NEXT: ;; CHECK-NEXT: --traps-never-happen,-tnh Optimize under the helpful ;; CHECK-NEXT: assumption that no trap is ;; CHECK-NEXT: reached at runtime (from load, ;; CHECK-NEXT: div/mod, etc.) ;; CHECK-NEXT: ;; CHECK-NEXT: --low-memory-unused,-lmu Optimize under the helpful ;; CHECK-NEXT: assumption that the low 1K of ;; CHECK-NEXT: memory is not used by the ;; CHECK-NEXT: application ;; CHECK-NEXT: ;; CHECK-NEXT: --fast-math,-ffm Optimize floats without handling ;; CHECK-NEXT: corner cases of NaNs and ;; CHECK-NEXT: rounding ;; CHECK-NEXT: ;; CHECK-NEXT: --zero-filled-memory,-uim Assume that an imported memory ;; CHECK-NEXT: will be zero-initialized ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: Tool options: ;; CHECK-NEXT: ------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features ;; CHECK-NEXT: ;; CHECK-NEXT: --all-features,-all Enable all features ;; CHECK-NEXT: ;; CHECK-NEXT: --detect-features (deprecated - this flag does ;; CHECK-NEXT: nothing) ;; CHECK-NEXT: ;; CHECK-NEXT: --quiet,-q Emit less verbose output and ;; CHECK-NEXT: hide trivial warnings. ;; CHECK-NEXT: ;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for ;; CHECK-NEXT: testing purposes. ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-sign-ext Disable sign extension ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-threads Enable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-threads Disable atomic operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-simd Enable SIMD operations and types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-simd Disable SIMD operations and ;; CHECK-NEXT: types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-exception-handling Enable exception handling ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-exception-handling Disable exception handling ;; CHECK-NEXT: operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-tail-call Enable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-tail-call Disable tail call operations ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-reference-types Enable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-reference-types Disable reference types ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-multivalue Enable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-multivalue Disable multivalue functions ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc Enable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc Disable garbage collection ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-memory64 Enable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-memory64 Disable memory64 ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-typed-function-references Enable typed function references ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-typed-function-references Disable typed function ;; CHECK-NEXT: references ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD ;; CHECK-NEXT: ;; CHECK-NEXT: --enable-extended-const Enable extended const ;; CHECK-NEXT: expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --disable-extended-const Disable extended const ;; CHECK-NEXT: expressions ;; CHECK-NEXT: ;; CHECK-NEXT: --no-validation,-n Disables validation, assumes ;; CHECK-NEXT: inputs are correct ;; CHECK-NEXT: ;; CHECK-NEXT: --pass-arg,-pa An argument passed along to ;; CHECK-NEXT: optimization passes being run. ;; CHECK-NEXT: Must be in the form KEY@VALUE ;; CHECK-NEXT: ;; CHECK-NEXT: --nominal Force all GC type definitions to ;; CHECK-NEXT: be parsed as nominal. ;; CHECK-NEXT: ;; CHECK-NEXT: --structural Force all GC type definitions to ;; CHECK-NEXT: be parsed as structural (i.e. ;; CHECK-NEXT: equirecursive). This is the ;; CHECK-NEXT: default. ;; CHECK-NEXT: ;; CHECK-NEXT: --hybrid Force all GC type definitions to ;; CHECK-NEXT: be parsed using the isorecursive ;; CHECK-NEXT: hybrid type system. ;; CHECK-NEXT: ;; CHECK-NEXT: ;; CHECK-NEXT: General options: ;; CHECK-NEXT: ---------------- ;; CHECK-NEXT: ;; CHECK-NEXT: --version Output version information and ;; CHECK-NEXT: exit ;; CHECK-NEXT: ;; CHECK-NEXT: --help,-h Show this help message and exit ;; CHECK-NEXT: ;; CHECK-NEXT: --debug,-d Print debug information to ;; CHECK-NEXT: stderr ;; CHECK-NEXT: binaryen-version_108/test/lit/isorecursive-good.wast000066400000000000000000000031721423707623100230670ustar00rootroot00000000000000;; TODO: Autogenerate these checks! The current script cannot handle `rec`. ;; RUN: wasm-opt %s -all --hybrid -S -o - | filecheck %s --check-prefix HYBRID ;; RUN: wasm-opt %s -all --hybrid --roundtrip -S -o - | filecheck %s --check-prefix HYBRID ;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s --check-prefix NOMINAL (module ;; HYBRID: (rec ;; HYBRID-NEXT: (type $super-struct (struct_subtype (field i32) data)) ;; HYBRID-NEXT: (type $sub-struct (struct_subtype (field i32) (field i64) $super-struct)) ;; HYBRID-NEXT: ) ;; HYBRID: (rec ;; HYBRID-NEXT: (type $super-array (array_subtype (ref $super-struct) data)) ;; HYBRID-NEXT: (type $sub-array (array_subtype (ref $sub-struct) $super-array)) ;; HYBRID-NEXT: ) ;; NOMINAL-NOT: rec ;; NOMINAL: (type $super-struct (struct_subtype (field i32) data)) ;; NOMINAL-NEXT: (type $sub-struct (struct_subtype (field i32) (field i64) $super-struct)) ;; NOMINAL: (type $super-array (array_subtype (ref $super-struct) data)) ;; NOMINAL-NEXT: (type $sub-array (array_subtype (ref $sub-struct) $super-array)) (rec (type $super-struct (struct i32)) (type $sub-struct (struct_subtype i32 i64 $super-struct)) ) (rec (type $super-array (array (ref $super-struct))) (type $sub-array (array_subtype (ref $sub-struct) $super-array)) ) (func $make-super-struct (result (ref $super-struct)) (call $make-sub-struct) ) (func $make-sub-struct (result (ref $sub-struct)) (unreachable) ) (func $make-super-array (result (ref $super-array)) (call $make-sub-array) ) (func $make-sub-array (result (ref $sub-array)) (unreachable) ) ) binaryen-version_108/test/lit/isorecursive-output-ordering.wast000066400000000000000000000060011423707623100253000ustar00rootroot00000000000000;; TODO: Autogenerate these checks! The current script cannot handle `rec`. ;; RUN: foreach %s %t wasm-opt -all --hybrid -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt -all --hybrid --roundtrip -S -o - | filecheck %s (module ;; Test that we order groups by average uses. ;; CHECK: (rec ;; CHECK-NEXT: (type $unused-6 (struct_subtype data)) ;; CHECK-NEXT: (type $used-a-bit (struct_subtype data)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rec ;; CHECK-NEXT: (type $unused-1 (struct_subtype data)) ;; CHECK-NEXT: (type $unused-2 (struct_subtype data)) ;; CHECK-NEXT: (type $unused-3 (struct_subtype data)) ;; CHECK-NEXT: (type $unused-4 (struct_subtype data)) ;; CHECK-NEXT: (type $used-a-lot (struct_subtype data)) ;; CHECK-NEXT: (type $unused-5 (struct_subtype data)) ;; CHECK-NEXT: ) (rec (type $unused-1 (struct_subtype data)) (type $unused-2 (struct_subtype data)) (type $unused-3 (struct_subtype data)) (type $unused-4 (struct_subtype data)) (type $used-a-lot (struct_subtype data)) (type $unused-5 (struct_subtype data)) ) (rec (type $unused-6 (struct_subtype data)) (type $used-a-bit (struct_subtype data)) ) (func $use (param (ref $used-a-lot) (ref $used-a-lot) (ref $used-a-lot) (ref $used-a-lot) (ref $used-a-lot) (ref $used-a-lot)) (result (ref $used-a-bit) (ref $used-a-bit) (ref $used-a-bit) (ref $used-a-bit)) (unreachable) ) ) (module ;; Test that we respect dependencies between groups before considering counts. ;; CHECK: (rec ;; CHECK-NEXT: (type $leaf (struct_subtype data)) ;; CHECK-NEXT: (type $unused (struct_subtype data)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rec ;; CHECK-NEXT: (type $shrub (struct_subtype $leaf)) ;; CHECK-NEXT: (type $used-a-ton (struct_subtype data)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rec ;; CHECK-NEXT: (type $twig (struct_subtype data)) ;; CHECK-NEXT: (type $used-a-bit (struct_subtype (field (ref $leaf)) data)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rec ;; CHECK-NEXT: (type $root (struct_subtype data)) ;; CHECK-NEXT: (type $used-a-lot (struct_subtype $twig)) ;; CHECK-NEXT: ) (rec (type $leaf (struct_subtype data)) (type $unused (struct_subtype data)) ) (rec (type $twig (struct_subtype data)) (type $used-a-bit (struct_subtype (ref $leaf) data)) ) (rec (type $shrub (struct_subtype $leaf)) (type $used-a-ton (struct_subtype data)) ) (rec (type $root (struct_subtype data)) (type $used-a-lot (struct_subtype $twig)) ) (func $use (param (ref $used-a-lot) (ref $used-a-lot) (ref $used-a-lot) (ref $used-a-lot) (ref $used-a-lot) (ref $used-a-lot)) (result (ref $used-a-bit) (ref $used-a-bit) (ref $used-a-bit)) (local (ref null $used-a-ton) (ref null $used-a-ton) (ref null $used-a-ton) (ref null $used-a-ton) (ref null $used-a-ton) (ref null $used-a-ton) (ref null $used-a-ton)) (unreachable) ) ) (module ;; Test that basic heap type children do not trigger assertions. (rec (type $contains-basic (struct_subtype (ref any) data)) ) (func $use (param (ref $contains-basic)) (unreachable) ) ) binaryen-version_108/test/lit/isorecursive-singleton-group.wast000066400000000000000000000011201423707623100252620ustar00rootroot00000000000000;; TODO: Autogenerate these checks! The current script cannot handle `rec`. ;; RUN: wasm-opt %s -all --hybrid -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --hybrid --roundtrip -S -o - | filecheck %s ;; Check that everything works correctly when a recursion group has only a ;; single member. The rec group is implicit, so does not need to be printed. (module ;; CHECK-NOT: rec ;; CHECK: (type $singleton (struct_subtype data)) (rec (type $singleton (struct_subtype data)) ) ;; Use the type so it appears in the output. (global $g (ref null $singleton) (ref.null $singleton)) ) binaryen-version_108/test/lit/isorecursive-whole-group.wast000066400000000000000000000011431423707623100244030ustar00rootroot00000000000000;; TODO: Autogenerate these checks! The current script cannot handle `rec`. ;; RUN: wasm-opt %s -all --hybrid -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --hybrid --roundtrip -S -o - | filecheck %s ;; Check that unused types are still included in the output when they are part ;; of a recursion group with used types. (module ;; CHECK: (rec ;; CHECK-NEXT: (type $used (struct_subtype data)) ;; CHECK-NEXT: (type $unused (struct_subtype data)) ;; CHECK-NEXT: ) (rec (type $used (struct_subtype data)) (type $unused (struct_subtype data)) ) (global $g (ref null $used) (ref.null $used)) ) binaryen-version_108/test/lit/lit.cfg.py000066400000000000000000000017001423707623100204120ustar00rootroot00000000000000import os import lit.formats config.name = "Binaryen lit tests" config.test_format = lit.formats.ShTest() config.suffixes = ['.wat', '.wast', '.test'] config.test_source_root = os.path.dirname(__file__) config.test_exec_root = os.path.join(config.binaryen_build_root, 'test') config.environment = dict(os.environ) # Replace all Binaryen tools with their absolute paths bin_dir = os.path.join(config.binaryen_build_root, 'bin') assert(os.path.isdir(bin_dir)) for tool_file in os.listdir(bin_dir): tool_path = config.binaryen_build_root + '/bin/' + tool_file tool = tool_file[:-4] if tool_file.endswith('.exe') else tool_file config.substitutions.append((tool, tool_path)) # Also make the `not` and `foreach` commands available for tool in ('not', 'foreach'): tool_file = config.binaryen_src_root + '/scripts/' + tool + '.py' python = sys.executable.replace('\\', '/') config.substitutions.append((tool, python + ' ' + tool_file)) binaryen-version_108/test/lit/lit.site.cfg.py.in000066400000000000000000000003311423707623100217610ustar00rootroot00000000000000import os config.binaryen_src_root = r'@CMAKE_SOURCE_DIR@' config.binaryen_build_root = r'@CMAKE_BINARY_DIR@' lit_config.load_config( config, os.path.join(config.binaryen_src_root, 'test', 'lit', 'lit.cfg.py')) binaryen-version_108/test/lit/lub-bug-3843.wast000066400000000000000000000037411423707623100213550ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --precompute -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --precompute --nominal -S -o - | filecheck %s --check-prefix NOMNL ;; Regression test for a bug (#3843) in which the LUB calculation done during ;; the refinalization of the select incorrectly produced a new type rather than ;; returning (ref null $A). (module ;; CHECK: (type $A (struct (field (ref null $C)))) ;; NOMNL: (type $A (struct_subtype (field (ref null $C)) data)) (type $A (struct (field (ref null $C)))) ;; CHECK: (type $B (struct (field (ref null $D)))) ;; NOMNL: (type $B (struct_subtype (field (ref null $D)) $A)) (type $B (struct_subtype (field (ref null $D)) $A)) ;; CHECK: (type $D (struct (field (mut (ref $A))) (field (mut (ref $A))))) ;; NOMNL: (type $C (struct_subtype (field (mut (ref $A))) data)) ;; NOMNL: (type $D (struct_subtype (field (mut (ref $A))) (field (mut (ref $A))) $C)) (type $D (struct_subtype (field (mut (ref $A))) (field (mut (ref $A))) $C)) ;; CHECK: (type $C (struct (field (mut (ref $A))))) (type $C (struct (field (mut (ref $A))))) ;; CHECK: (func $foo (param $a (ref null $A)) (result (ref null $A)) ;; CHECK-NEXT: (select (result (ref null $A)) ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $foo (type $ref?|$A|_=>_ref?|$A|) (param $a (ref null $A)) (result (ref null $A)) ;; NOMNL-NEXT: (select (result (ref null $A)) ;; NOMNL-NEXT: (local.get $a) ;; NOMNL-NEXT: (ref.null $B) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $foo (param $a (ref null $A)) (result (ref null $A)) ;; the select should have type $A (select (result (ref null $A)) ;; one arm has type $A (local.get $a) ;; one arm has type $B (a subtype of $A) (ref.null $B) (i32.const 0) ) ) ) binaryen-version_108/test/lit/memory64-limits.wast000066400000000000000000000002731423707623100223770ustar00rootroot00000000000000;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s (module (memory $0 i64 1 4294967296) ) ;; CHECK: (module ;; CHECK-NEXT: (memory $0 i64 1 4294967296) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/nominal-bad.wast000066400000000000000000000013671423707623100216040ustar00rootroot00000000000000;; RUN: not wasm-opt %s -all --nominal -S -o - 2>&1 | filecheck %s ;; CHECK: [wasm-validator error in function make-super-struct] function body type must match ;; CHECK: [wasm-validator error in function make-super-array] function body type must match (module (type $sub-struct (struct i32 i64)) (type $super-struct (struct i32)) (type $sub-array (array (ref $sub-struct))) (type $super-array (array (ref $super-struct))) (func $make-sub-struct (result (ref $sub-struct)) (unreachable) ) (func $make-super-struct (result (ref $super-struct)) (call $make-sub-struct) ) (func $make-sub-array (result (ref $sub-array)) (unreachable) ) (func $make-super-array (result (ref $super-array)) (call $make-sub-array) ) ) binaryen-version_108/test/lit/nominal-chain.wast000066400000000000000000000023141423707623100221310ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --nominal --roundtrip -S -o - | filecheck %s ;; Check that intermediate types in subtype chains are also included in the ;; output module, even if there are no other references to those intermediate ;; types. (module ;; CHECK: (type $root (struct_subtype data)) ;; CHECK: (type $trunk (struct_subtype (field i32) $root)) ;; CHECK: (type $branch (struct_subtype (field i32) (field i64) $trunk)) ;; CHECK: (type $twig (struct_subtype (field i32) (field i64) (field f32) $branch)) ;; CHECK: (type $leaf (struct_subtype (field i32) (field i64) (field f32) (field f64) $twig)) (type $leaf (struct_subtype i32 i64 f32 f64 $twig)) (type $twig (struct_subtype i32 i64 f32 $branch)) (type $branch (struct_subtype i32 i64 $trunk)) (type $trunk (struct_subtype i32 $root)) (type $root (struct)) ;; CHECK: (func $make-root (type $none_=>_ref?|$root|) (result (ref null $root)) ;; CHECK-NEXT: (ref.null $leaf) ;; CHECK-NEXT: ) (func $make-root (result (ref null $root)) (ref.null $leaf) ) ) binaryen-version_108/test/lit/nominal-func.wast000066400000000000000000000014641423707623100220070ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --nominal --roundtrip -S -o - | filecheck %s (module ;; This will be the "canonical" function type rather than $foo_t (type $bad_t (func)) ;; CHECK: (type $foo_t (func_subtype func)) (type $foo_t (func)) ;; CHECK: (func $foo (type $foo_t) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (type $foo_t) (unreachable) ) ;; $foo needs to be assigned type foo_t rather than bad_t for this to validate. ;; CHECK: (func $make-ref (type $none_=>_ref|$foo_t|) (result (ref $foo_t)) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) (func $make-ref (result (ref $foo_t)) (ref.func $foo) ) ) binaryen-version_108/test/lit/nominal-good.wast000066400000000000000000000056551423707623100220120ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s --check-prefix NOMINAL ;; RUN: wasm-opt %s -all --nominal --roundtrip -S -o - | filecheck %s --check-prefix NOMINAL ;; RUN: wasm-opt %s -all -S -o - | filecheck %s --check-prefix EQUIREC ;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s --check-prefix EQUIREC ;; RUN: wasm-opt %s -all --structural -S -o - | filecheck %s --check-prefix EQUIREC ;; RUN: wasm-opt %s -all --structural --roundtrip -S -o - | filecheck %s --check-prefix EQUIREC (module ;; NOMINAL: (type $super-struct (struct_subtype (field i32) data)) ;; EQUIREC: (type $super-struct (struct (field i32))) (type $super-struct (struct i32)) ;; NOMINAL: (type $sub-struct (struct_subtype (field i32) (field i64) $super-struct)) ;; EQUIREC: (type $sub-struct (struct (field i32) (field i64))) (type $sub-struct (struct_subtype i32 i64 $super-struct)) ;; NOMINAL: (type $super-array (array_subtype (ref $super-struct) data)) ;; EQUIREC: (type $super-array (array (ref $super-struct))) (type $super-array (array (ref $super-struct))) ;; NOMINAL: (type $sub-array (array_subtype (ref $sub-struct) $super-array)) ;; EQUIREC: (type $sub-array (array (ref $sub-struct))) (type $sub-array (array_subtype (ref $sub-struct) $super-array)) ;; TODO: signature types as well, once functions store their HeapTypes. ;; NOMINAL: (func $make-super-struct (type $none_=>_ref|$super-struct|) (result (ref $super-struct)) ;; NOMINAL-NEXT: (call $make-sub-struct) ;; NOMINAL-NEXT: ) ;; EQUIREC: (func $make-super-struct (result (ref $super-struct)) ;; EQUIREC-NEXT: (call $make-sub-struct) ;; EQUIREC-NEXT: ) (func $make-super-struct (result (ref $super-struct)) (call $make-sub-struct) ) ;; NOMINAL: (func $make-sub-struct (type $none_=>_ref|$sub-struct|) (result (ref $sub-struct)) ;; NOMINAL-NEXT: (unreachable) ;; NOMINAL-NEXT: ) ;; EQUIREC: (func $make-sub-struct (result (ref $sub-struct)) ;; EQUIREC-NEXT: (unreachable) ;; EQUIREC-NEXT: ) (func $make-sub-struct (result (ref $sub-struct)) (unreachable) ) ;; NOMINAL: (func $make-super-array (type $none_=>_ref|$super-array|) (result (ref $super-array)) ;; NOMINAL-NEXT: (call $make-sub-array) ;; NOMINAL-NEXT: ) ;; EQUIREC: (func $make-super-array (result (ref $super-array)) ;; EQUIREC-NEXT: (call $make-sub-array) ;; EQUIREC-NEXT: ) (func $make-super-array (result (ref $super-array)) (call $make-sub-array) ) ;; NOMINAL: (func $make-sub-array (type $none_=>_ref|$sub-array|) (result (ref $sub-array)) ;; NOMINAL-NEXT: (unreachable) ;; NOMINAL-NEXT: ) ;; EQUIREC: (func $make-sub-array (result (ref $sub-array)) ;; EQUIREC-NEXT: (unreachable) ;; EQUIREC-NEXT: ) (func $make-sub-array (result (ref $sub-array)) (unreachable) ) ) binaryen-version_108/test/lit/nominal-named-field.wast000066400000000000000000000015521423707623100232170ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; Regression test for a bug in which field names were not printed in nominal mode. ;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --nominal --roundtrip -S -o - | filecheck %s (module ;; CHECK: (type $struct (struct_subtype (field (mut i32)) (field f32) (field $named f64) data)) (type $struct (struct (field (mut i32)) (field f32) (field $named f64) )) ;; CHECK: (func $foo (type $ref|$struct|_=>_none) (param $0 (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct $named ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (param (ref $struct)) (drop (struct.get $struct $named (local.get 0) ) ) ) ) binaryen-version_108/test/lit/nominal-to-isorecursive.wast000066400000000000000000000022651423707623100242160ustar00rootroot00000000000000;; TODO: Autogenerate these checks! The current script cannot handle `rec`. ;; RUN: wasm-as %s -all --nominal -g -o %t.wasm ;; RUN: wasm-dis %t.wasm -all --hybrid -o - | filecheck %s ;; Check that the nominal binary format is parseable as isorecursive with a ;; single recursion group. ;; CHECK: (module ;; CHECK-NEXT: (rec ;; CHECK-NEXT: (type $make-super-t (func_subtype (result (ref $super)) func)) ;; CHECK-NEXT: (type $make-sub-t (func_subtype (result (ref $sub)) func)) ;; CHECK-NEXT: (type $super (struct_subtype (field i32) data)) ;; CHECK-NEXT: (type $sub (struct_subtype (field i32) $super)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (func $make-super (type $make-super-t) (result (ref $super)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (func $make-sub (type $make-sub-t) (result (ref $sub)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module (type $super (struct i32)) (type $sub (struct_subtype i32 $super)) (type $make-super-t (func (result (ref $super)))) (type $make-sub-t (func (result (ref $sub)))) (func $make-super (type $make-super-t) (unreachable) ) (func $make-sub (type $make-sub-t) (unreachable) ) ) binaryen-version_108/test/lit/parse-bad-nominal-types.wast000066400000000000000000000026651423707623100240600ustar00rootroot00000000000000;; Test that incorrect nominal types result in the expected parse errors ;; RUN: foreach %s %t not wasm-opt -all 2>&1 | filecheck %s ;; CHECK: [parse exception: unknown supertype (at 2:35)] (module (type $bad-func (func) (extends $bad)) ) ;; CHECK: [parse exception: unknown supertype (at 2:39)] (module (type $bad-struct (struct) (extends $bad)) ) ;; CHECK: [parse exception: unknown supertype (at 2:41)] (module (type $bad-array (array i32) (extends $bad)) ) ;; CHECK: [parse exception: unknown supertype (at 2:33)] (module (type $bad-func (func_subtype $bad)) ) ;; CHECK: [parse exception: unknown supertype (at 2:37)] (module (type $bad-struct (struct_subtype $bad)) ) ;; CHECK: [parse exception: unknown supertype (at 2:39)] (module (type $bad-array (array_subtype i32 $bad)) ) ;; CHECK: [parse exception: unknown supertype (at 2:32)] (module (type $bad-func (func_subtype any)) ) ;; CHECK: [parse exception: unknown supertype (at 2:36)] (module (type $bad-struct (struct_subtype any)) ) ;; CHECK: [parse exception: unknown supertype (at 2:38)] (module (type $bad-array (array_subtype i32 any)) ) ;; CHECK: [parse exception: unknown supertype (at 2:32)] (module (type $bad-func (func_subtype data)) ) ;; CHECK: [parse exception: unknown supertype (at 2:36)] (module (type $bad-struct (struct_subtype func)) ) ;; CHECK: [parse exception: unknown supertype (at 2:38)] (module (type $bad-array (array_subtype i32 func)) ) binaryen-version_108/test/lit/parse-bad-supertype.wast000066400000000000000000000004551423707623100233140ustar00rootroot00000000000000;; Test that an invalid supertype results in a useful error message ;; RUN: not wasm-opt %s -all --nominal 2>&1 | filecheck %s ;; CHECK: Fatal: Invalid type: Heap type has an invalid supertype at type $sub (module (type $super (struct_subtype i32 data)) (type $sub (struct_subtype i64 $super)) )binaryen-version_108/test/lit/parse-bad-tuple-extract-index.wast000066400000000000000000000004331423707623100251560ustar00rootroot00000000000000;; Test that out-of-bounds tuple.extract indices produce parse errors. ;; RUN: not wasm-opt %s 2>&1 | filecheck %s ;; CHECK: [parse exception: Bad index on tuple.extract (at 9:17)] (module (func (tuple.extract 2 (tuple.make (i32.const 0) (i64.const 1) ) ) ) ) binaryen-version_108/test/lit/parse-error.wast000066400000000000000000000002551423707623100216570ustar00rootroot00000000000000;; Test that parse errors have helpful messages ;; RUN: not wasm-opt %s 2>&1 | filecheck %s ;; CHECK: [parse exception: abc (at 8:4)] (module (func $foo (abc) ) ) binaryen-version_108/test/lit/parse-nominal-types-extends.wast000066400000000000000000000042011423707623100247700ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; Test that new-style nominal types are parsed correctly. ;; TODO: Remove --nominal below once nominal types are parsed as nominal by default. ;; RUN: foreach %s %t wasm-opt --nominal -all -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt --nominal -all --roundtrip -S -o - | filecheck %s ;; void function type (module ;; CHECK: (type $super (func_subtype func)) ;; CHECK: (type $sub (func_subtype $super)) (type $sub (func) (extends $super)) (type $super (func)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) ;; function type with params and results (module ;; CHECK: (type $super (func_subtype (param i32) (result i32) func)) ;; CHECK: (type $sub (func_subtype (param i32) (result i32) $super)) (type $sub (func (param i32) (result i32)) (extends $super)) (type $super (func (param i32) (result i32))) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) ;; empty struct type (module ;; CHECK: (type $super (struct_subtype data)) ;; CHECK: (type $sub (struct_subtype $super)) (type $sub (struct) (extends $super)) (type $super (struct)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) ;; struct type with fields (module ;; CHECK: (type $super (struct_subtype (field i32) (field i64) data)) ;; CHECK: (type $sub (struct_subtype (field i32) (field i64) $super)) (type $sub (struct i32 (field i64)) (extends $super)) (type $super (struct (field i32) i64)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) ;; array type (module ;; CHECK: (type $super (array_subtype i8 data)) ;; CHECK: (type $sub (array_subtype i8 $super)) (type $sub (array i8) (extends $super)) (type $super (array i8)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) binaryen-version_108/test/lit/parse-nominal-types.wast000066400000000000000000000042701423707623100233260ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; Test that new-style nominal types are parsed correctly. ;; TODO: Remove --nominal below once nominal types are parsed as nominal by default. ;; RUN: foreach %s %t wasm-opt --nominal -all -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt --nominal -all --roundtrip -S -o - | filecheck %s ;; void function type (module ;; CHECK: (type $super (func_subtype func)) ;; CHECK: (type $sub (func_subtype $super)) (type $sub (func_subtype $super)) (type $super (func_subtype func)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) ;; function type with params and results (module ;; CHECK: (type $super (func_subtype (param i32) (result i32) func)) ;; CHECK: (type $sub (func_subtype (param i32) (result i32) $super)) (type $sub (func_subtype (param i32) (result i32) $super)) (type $super (func_subtype (param i32) (result i32) func)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) ;; empty struct type (module ;; CHECK: (type $super (struct_subtype data)) ;; CHECK: (type $sub (struct_subtype $super)) (type $sub (struct_subtype $super)) (type $super (struct_subtype data)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) ;; struct type with fields (module ;; CHECK: (type $super (struct_subtype (field i32) (field i64) data)) ;; CHECK: (type $sub (struct_subtype (field i32) (field i64) $super)) (type $sub (struct_subtype i32 (field i64) $super)) (type $super (struct_subtype (field i32) i64 data)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) ;; array type (module ;; CHECK: (type $super (array_subtype i8 data)) ;; CHECK: (type $sub (array_subtype i8 $super)) (type $sub (array_subtype i8 $super)) (type $super (array_subtype i8 data)) ;; CHECK: (global $g (ref null $super) (ref.null $sub)) (global $g (ref null $super) (ref.null $sub)) ) binaryen-version_108/test/lit/passes/000077500000000000000000000000001423707623100200125ustar00rootroot00000000000000binaryen-version_108/test/lit/passes/O.wast000066400000000000000000000067331423707623100211210ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt -O -S -o - | filecheck %s (module ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i64_=>_none (func (param i64))) ;; CHECK: (export "ret" (func $ret)) ;; CHECK: (export "waka" (func $if-0-unreachable-to-none)) ;; CHECK: (export "many-selects" (func $many-selects)) ;; CHECK: (export "end-if-else" (func $end-if-else)) ;; CHECK: (export "end-if-else-call" (func $end-if-else-call)) ;; CHECK: (func $ret (; has Stack IR ;) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $ret) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $ret) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 999) ;; CHECK-NEXT: ) (func $ret (export "ret") (result i32) (block $out (result i32) (drop (call $ret)) (if (call $ret) (return (return (i32.const 1) ) ) ) (drop (br_if $out (i32.const 999) (i32.const 1))) (unreachable) ) ) ;; CHECK: (func $if-0-unreachable-to-none (; has Stack IR ;) (param $0 i64) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $if-0-unreachable-to-none (export "waka") (param $var$0 i64) (local $var$1 i64) (local $var$2 i64) (block $label$1 (if (i32.const 0) (br $label$1) (unreachable) ) ) ) ;; CHECK: (func $many-selects (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const -1073741824) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1073741823) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1073741823) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -1073741824) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $many-selects (export "many-selects") (param $0 i32) (result i32) (if (i32.lt_s (local.get $0) (i32.const -1073741824) ) (local.set $0 (i32.const -1073741824) ) (if (i32.gt_s (local.get $0) (i32.const 1073741823) ) (local.set $0 (i32.const 1073741823) ) ) ) (local.get $0) ) ;; CHECK: (func $end-if-else (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $end-if-else (export "end-if-else") (param $x i32) (result i32) (if (local.get $x) (local.set $x (i32.const 1) ) ) (local.get $x) ) ;; CHECK: (func $end-if-else-call (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (call $ret) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $end-if-else-call (export "end-if-else-call") (param $x i32) (result i32) (if (local.get $x) (local.set $x (call $ret) ) ) (local.get $x) ) ) binaryen-version_108/test/lit/passes/O1.wast000066400000000000000000000017261423707623100211770ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt -O1 -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (memory $0 1 1) (memory $0 1 1) (global $global$0 (mut i32) (i32.const 10)) (func "foo" (result i32) (i32.load offset=4 align=1 (i32.and (block $label$1 (result i32) (global.set $global$0 (i32.const 0) ) (i32.const -64) ) (i32.const 15) ) ) ) (func $signed-overflow (param $0 f32) (result i32) (i32.sub (i32.const 268435456) (i32.const -2147483648) ) ) ) ;; CHECK: (export "foo" (func $0)) ;; CHECK: (func $0 (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) O3_inline-functions-with-loops_flexible-inline-max-function-size=30.wast000066400000000000000000000112531423707623100355310ustar00rootroot00000000000000binaryen-version_108/test/lit/passes;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt -O3 --inline-functions-with-loops --flexible-inline-max-function-size=30 -S -o - | filecheck %s (module ;; CHECK: (type $t0 (func (param i32) (result i32))) (type $t0 (func (param i32) (result i32))) ;; CHECK: (memory $memory 0) ;; CHECK: (export "fib" (func $fib)) ;; CHECK: (export "looped" (func $looped)) ;; CHECK: (export "t0" (func $looped)) ;; CHECK: (export "t1" (func $t1)) ;; CHECK: (export "t2" (func $t2)) ;; CHECK: (export "t3" (func $t3)) ;; CHECK: (export "memory" (memory $memory)) ;; CHECK: (func $fib (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (call $fib ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $fib ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fib (export "fib") (type $t0) (param $p0 i32) (result i32) (if $I0 (i32.le_s (local.get $p0) (i32.const 2) ) (then (return (local.get $p0) ) ) ) (i32.add (call $fib (i32.sub (local.get $p0) (i32.const 1) ) ) (call $fib (i32.sub (local.get $p0) (i32.const 2) ) ) ) ) ;; CHECK: (func $looped (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (loop $L0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $L0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $looped (export "looped") (type $t0) (param $p0 i32) (result i32) (loop $L0 (if $I1 (i32.ge_s (local.get $p0) (i32.const 0) ) (then (local.set $p0 (i32.sub (local.get $p0) (i32.const 1) ) ) (br $L0) ) ) ) (local.get $p0) ) (func $t0 (export "t0") (type $t0) (param $p0 i32) (result i32) (call $looped (local.get $p0) ) ) ;; CHECK: (func $t1 (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $L0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $L0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $t1 (export "t1") (type $t0) (param $p0 i32) (result i32) (call $looped (i32.add (local.get $p0) (i32.const 1) ) ) ) ;; CHECK: (func $t2 (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (call $fib ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $t2 (export "t2") (type $t0) (param $p0 i32) (result i32) (call $fib (local.get $p0) ) ) ;; CHECK: (func $t3 (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (call $fib ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $t3 (export "t3") (type $t0) (param $p0 i32) (result i32) (call $fib (i32.add (local.get $p0) (i32.const 1) ) ) ) (memory $memory (export "memory") 0) ) binaryen-version_108/test/lit/passes/O3_inlining.wast000066400000000000000000000032101423707623100230560ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt -O3 --inlining -S -o - | filecheck %s (module (global $global$0 (mut f64) (f64.const -32768)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (global $global$1 (mut i32) (i32.const 100)) (global $global$1 (mut i32) (i32.const 100)) ;; CHECK: (memory $0 1 1) (memory $0 1 1) ;; CHECK: (export "func_217" (func $1)) (export "func_217" (func $1)) (func $0 (if (global.get $global$1) (unreachable) ) (global.set $global$1 (i32.const 0) ) (block $label$2 (global.set $global$0 (block $label$3 (result f64) (br_if $label$2 (if (result i32) (i32.load16_u offset=3 (i32.const 0) ) (i32.const 1) (i32.const 0) ) ) (unreachable) ) ) ) ) ;; CHECK: (func $1 (param $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $1 (param $var$0 i32) (drop (call $2 (f32.const 1) (i32.const 1) (i32.const 0) ) ) ) (func $2 (param $var$0 f32) (param $var$1 i32) (param $var$2 i32) (result i32) (call $0) (i32.const 0) ) ) binaryen-version_108/test/lit/passes/O4_disable-bulk-memory.wast000066400000000000000000002152251423707623100251270ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt -O4 --disable-bulk-memory -S -o - | filecheck %s (module ;; CHECK: (type $0 (func)) (type $0 (func)) (global $global$0 (mut i32) (i32.const 10)) ;; CHECK: (export "func_59_invoker" (func $0)) (export "func_59_invoker" (func $0)) ;; CHECK: (func $0 (; has Stack IR ;) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $0 (; 0 ;) (type $0) (if (block $label$1 (result i32) (global.set $global$0 (i32.const 0) ) (i32.const 127) ) (unreachable) ) (global.set $global$0 (i32.const -1) ) (if (global.get $global$0) (unreachable) ) (unreachable) ) ) ;; AssemblyScript n-body benchmark (module ;; CHECK: (type $0 (func)) (type $0 (func)) (type $1 (func (param i32 i32) (result i32))) (type $2 (func (param i32 f64 f64 f64) (result i32))) ;; CHECK: (type $3 (func (param i32) (result i32))) (type $3 (func (param i32) (result i32))) (type $4 (func (result i32))) (type $5 (func (param i32 f64 f64 f64 f64 f64 f64 f64) (result i32))) (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i32))) ;; CHECK: (type $11 (func (param i32))) ;; CHECK: (type $f64_f64_f64_f64_f64_f64_f64_=>_i32 (func (param f64 f64 f64 f64 f64 f64 f64) (result i32))) ;; CHECK: (type $8 (func (result f64))) (type $8 (func (result f64))) (type $9 (func (param i32 f64))) (type $10 (func (param i32) (result f64))) (type $11 (func (param i32))) ;; CHECK: (import "env" "memory" (memory $1 1)) (import "env" "memory" (memory $1 1)) (data (i32.const 8) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") (data (i32.const 40) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) ;; CHECK: (data (i32.const 8) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") ;; CHECK: (data (i32.const 40) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") ;; CHECK: (global $global$0 (mut i32) (i32.const 0)) ;; CHECK: (global $global$1 (mut i32) (i32.const 0)) ;; CHECK: (global $global$5 (mut i32) (i32.const 0)) ;; CHECK: (table $0 1 funcref) (table $0 1 funcref) (elem (i32.const 0) $null) (global $global$0 (mut i32) (i32.const 0)) (global $global$1 (mut i32) (i32.const 0)) (global $global$2 f64 (f64.const 3.141592653589793)) (global $global$3 f64 (f64.const 39.47841760435743)) (global $global$4 f64 (f64.const 365.24)) (global $global$5 (mut i32) (i32.const 0)) (global $global$6 i32 (i32.const 100)) ;; CHECK: (elem (i32.const 0) $null) ;; CHECK: (export "memory" (memory $0)) (export "memory" (memory $0)) ;; CHECK: (export "table" (table $0)) (export "table" (table $0)) ;; CHECK: (export "init" (func $assembly/index/init)) (export "init" (func $assembly/index/init)) ;; CHECK: (export "step" (func $assembly/index/step)) (export "step" (func $assembly/index/step)) ;; CHECK: (export "bench" (func $assembly/index/bench)) (export "bench" (func $assembly/index/bench)) ;; CHECK: (export "getBody" (func $assembly/index/getBody)) (export "getBody" (func $assembly/index/getBody)) ;; CHECK: (start $start) (start $start) (func $start:~lib/allocator/arena (; 1 ;) (type $0) (global.set $global$0 (i32.and (i32.add (global.get $global$6) (i32.const 7) ) (i32.xor (i32.const 7) (i32.const -1) ) ) ) (global.set $global$1 (global.get $global$0) ) ) (func $start:assembly/index (; 2 ;) (type $0) (call $start:~lib/allocator/arena) ) (func $~lib/array/Array#__unchecked_get (; 3 ;) (type $1) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local.set $2 (i32.load (local.get $0) ) ) (local.set $3 (local.get $1) ) (local.set $4 (i32.const 0) ) (i32.load offset=8 (i32.add (i32.add (local.get $2) (i32.shl (local.get $3) (i32.const 2) ) ) (local.get $4) ) ) ) (func $~lib/array/Array#__get (; 4 ;) (type $1) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $2 (i32.load (local.get $0) ) ) (if (result i32) (i32.lt_u (local.get $1) (i32.shr_u (i32.load (local.get $2) ) (i32.const 2) ) ) (block (result i32) (local.set $3 (local.get $2) ) (local.set $4 (local.get $1) ) (local.set $5 (i32.const 0) ) (i32.load offset=8 (i32.add (i32.add (local.get $3) (i32.shl (local.get $4) (i32.const 2) ) ) (local.get $5) ) ) ) (unreachable) ) ) (func $assembly/index/Body#offsetMomentum (; 5 ;) (type $2) (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f64) (result i32) (f64.store offset=24 (local.get $0) (f64.div (f64.neg (local.get $1) ) (global.get $global$3) ) ) (f64.store offset=32 (local.get $0) (f64.div (f64.neg (local.get $2) ) (global.get $global$3) ) ) (f64.store offset=40 (local.get $0) (f64.div (f64.neg (local.get $3) ) (global.get $global$3) ) ) (local.get $0) ) ;; CHECK: (func $~lib/allocator/arena/__memory_allocate (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1073741824) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (global.get $global$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (memory.grow ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -65536) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (memory.grow ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global$1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $~lib/allocator/arena/__memory_allocate (; 6 ;) (type $3) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (if (i32.gt_u (local.get $0) (i32.const 1073741824) ) (unreachable) ) (local.set $1 (global.get $global$1) ) (local.set $4 (i32.and (i32.add (i32.add (local.get $1) (select (local.tee $2 (local.get $0) ) (local.tee $3 (i32.const 1) ) (i32.gt_u (local.get $2) (local.get $3) ) ) ) (i32.const 7) ) (i32.xor (i32.const 7) (i32.const -1) ) ) ) (local.set $5 (memory.size) ) (if (i32.gt_u (local.get $4) (i32.shl (local.get $5) (i32.const 16) ) ) (block (local.set $2 (i32.shr_u (i32.and (i32.add (i32.sub (local.get $4) (local.get $1) ) (i32.const 65535) ) (i32.xor (i32.const 65535) (i32.const -1) ) ) (i32.const 16) ) ) (local.set $3 (select (local.tee $3 (local.get $5) ) (local.tee $6 (local.get $2) ) (i32.gt_s (local.get $3) (local.get $6) ) ) ) (if (i32.lt_s (memory.grow (local.get $3) ) (i32.const 0) ) (if (i32.lt_s (memory.grow (local.get $2) ) (i32.const 0) ) (unreachable) ) ) ) ) (global.set $global$1 (local.get $4) ) (local.get $1) ) (func $~lib/memory/memory.allocate (; 7 ;) (type $3) (param $0 i32) (result i32) (return (call $~lib/allocator/arena/__memory_allocate (local.get $0) ) ) ) (func $assembly/index/NBodySystem#constructor (; 8 ;) (type $1) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 f64) (local $6 f64) (local $7 f64) (local $8 f64) (local.set $5 (f64.const 0) ) (local.set $6 (f64.const 0) ) (local.set $7 (f64.const 0) ) (local.set $3 (block $label$1 (result i32) (local.set $2 (local.get $1) ) (i32.load offset=4 (local.get $2) ) ) ) (block $label$2 (local.set $2 (i32.const 0) ) (loop $label$3 (br_if $label$2 (i32.eqz (i32.lt_s (local.get $2) (local.get $3) ) ) ) (block $label$4 (local.set $4 (call $~lib/array/Array#__unchecked_get (local.get $1) (local.get $2) ) ) (local.set $8 (f64.load offset=48 (local.get $4) ) ) (local.set $5 (f64.add (local.get $5) (f64.mul (f64.load offset=24 (local.get $4) ) (local.get $8) ) ) ) (local.set $6 (f64.add (local.get $6) (f64.mul (f64.load offset=32 (local.get $4) ) (local.get $8) ) ) ) (local.set $7 (f64.add (local.get $7) (f64.mul (f64.load offset=40 (local.get $4) ) (local.get $8) ) ) ) ) (local.set $2 (i32.add (local.get $2) (i32.const 1) ) ) (br $label$3) ) ) (drop (call $assembly/index/Body#offsetMomentum (call $~lib/array/Array#__get (local.get $1) (i32.const 0) ) (local.get $5) (local.get $6) (local.get $7) ) ) (if (i32.eqz (local.get $0) ) (local.set $0 (call $~lib/memory/memory.allocate (i32.const 4) ) ) ) (i32.store (local.get $0) (local.get $1) ) (local.get $0) ) ;; CHECK: (func $assembly/index/Body#constructor (; has Stack IR ;) (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 f64) (param $5 f64) (param $6 f64) (result i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (call $~lib/allocator/arena/__memory_allocate ;; CHECK-NEXT: (i32.const 56) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=16 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=24 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=32 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=40 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=48 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) (func $assembly/index/Body#constructor (; 9 ;) (type $5) (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 f64) (param $5 f64) (param $6 f64) (param $7 f64) (result i32) (if (i32.eqz (local.get $0) ) (local.set $0 (call $~lib/memory/memory.allocate (i32.const 56) ) ) ) (f64.store (local.get $0) (local.get $1) ) (f64.store offset=8 (local.get $0) (local.get $2) ) (f64.store offset=16 (local.get $0) (local.get $3) ) (f64.store offset=24 (local.get $0) (local.get $4) ) (f64.store offset=32 (local.get $0) (local.get $5) ) (f64.store offset=40 (local.get $0) (local.get $6) ) (f64.store offset=48 (local.get $0) (local.get $7) ) (local.get $0) ) (func $assembly/index/Sun (; 10 ;) (type $4) (result i32) (call $assembly/index/Body#constructor (i32.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (global.get $global$3) ) ) (func $assembly/index/Jupiter (; 11 ;) (type $4) (result i32) (call $assembly/index/Body#constructor (i32.const 0) (f64.const 4.841431442464721) (f64.const -1.1603200440274284) (f64.const -0.10362204447112311) (f64.mul (f64.const 0.001660076642744037) (global.get $global$4) ) (f64.mul (f64.const 0.007699011184197404) (global.get $global$4) ) (f64.mul (f64.const -6.90460016972063e-05) (global.get $global$4) ) (f64.mul (f64.const 9.547919384243266e-04) (global.get $global$3) ) ) ) (func $assembly/index/Saturn (; 12 ;) (type $4) (result i32) (call $assembly/index/Body#constructor (i32.const 0) (f64.const 8.34336671824458) (f64.const 4.124798564124305) (f64.const -0.4035234171143214) (f64.mul (f64.const -0.002767425107268624) (global.get $global$4) ) (f64.mul (f64.const 0.004998528012349172) (global.get $global$4) ) (f64.mul (f64.const 2.3041729757376393e-05) (global.get $global$4) ) (f64.mul (f64.const 2.858859806661308e-04) (global.get $global$3) ) ) ) (func $assembly/index/Uranus (; 13 ;) (type $4) (result i32) (call $assembly/index/Body#constructor (i32.const 0) (f64.const 12.894369562139131) (f64.const -15.111151401698631) (f64.const -0.22330757889265573) (f64.mul (f64.const 0.002964601375647616) (global.get $global$4) ) (f64.mul (f64.const 2.3784717395948095e-03) (global.get $global$4) ) (f64.mul (f64.const -2.9658956854023756e-05) (global.get $global$4) ) (f64.mul (f64.const 4.366244043351563e-05) (global.get $global$3) ) ) ) (func $assembly/index/Neptune (; 14 ;) (type $4) (result i32) (call $assembly/index/Body#constructor (i32.const 0) (f64.const 15.379697114850917) (f64.const -25.919314609987964) (f64.const 0.17925877295037118) (f64.mul (f64.const 2.6806777249038932e-03) (global.get $global$4) ) (f64.mul (f64.const 0.001628241700382423) (global.get $global$4) ) (f64.mul (f64.const -9.515922545197159e-05) (global.get $global$4) ) (f64.mul (f64.const 5.1513890204661145e-05) (global.get $global$3) ) ) ) (func $~lib/internal/arraybuffer/computeSize (; 15 ;) (type $3) (param $0 i32) (result i32) (i32.shl (i32.const 1) (i32.sub (i32.const 32) (i32.clz (i32.sub (i32.add (local.get $0) (i32.const 8) ) (i32.const 1) ) ) ) ) ) (func $~lib/internal/arraybuffer/allocateUnsafe (; 16 ;) (type $3) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (if (i32.eqz (i32.le_u (local.get $0) (i32.const 1073741816) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 40) (i32.const 26) (i32.const 2) ) (unreachable) ) ) (local.set $1 (block $label$2 (result i32) (local.set $2 (call $~lib/internal/arraybuffer/computeSize (local.get $0) ) ) (br $label$2 (call $~lib/allocator/arena/__memory_allocate (local.get $2) ) ) ) ) (i32.store (local.get $1) (local.get $0) ) (local.get $1) ) (func $~lib/internal/memory/memset (; 17 ;) (type $7) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i64) (if (i32.eqz (local.get $2) ) (return) ) (i32.store8 (local.get $0) (local.get $1) ) (i32.store8 (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 1) ) (local.get $1) ) (if (i32.le_u (local.get $2) (i32.const 2) ) (return) ) (i32.store8 (i32.add (local.get $0) (i32.const 1) ) (local.get $1) ) (i32.store8 (i32.add (local.get $0) (i32.const 2) ) (local.get $1) ) (i32.store8 (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 2) ) (local.get $1) ) (i32.store8 (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 3) ) (local.get $1) ) (if (i32.le_u (local.get $2) (i32.const 6) ) (return) ) (i32.store8 (i32.add (local.get $0) (i32.const 3) ) (local.get $1) ) (i32.store8 (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 4) ) (local.get $1) ) (if (i32.le_u (local.get $2) (i32.const 8) ) (return) ) (local.set $3 (i32.and (i32.sub (i32.const 0) (local.get $0) ) (i32.const 3) ) ) (local.set $0 (i32.add (local.get $0) (local.get $3) ) ) (local.set $2 (i32.sub (local.get $2) (local.get $3) ) ) (local.set $2 (i32.and (local.get $2) (i32.const -4) ) ) (local.set $4 (i32.mul (i32.div_u (i32.const -1) (i32.const 255) ) (i32.and (local.get $1) (i32.const 255) ) ) ) (i32.store (local.get $0) (local.get $4) ) (i32.store (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 4) ) (local.get $4) ) (if (i32.le_u (local.get $2) (i32.const 8) ) (return) ) (i32.store (i32.add (local.get $0) (i32.const 4) ) (local.get $4) ) (i32.store (i32.add (local.get $0) (i32.const 8) ) (local.get $4) ) (i32.store (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 12) ) (local.get $4) ) (i32.store (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 8) ) (local.get $4) ) (if (i32.le_u (local.get $2) (i32.const 24) ) (return) ) (i32.store (i32.add (local.get $0) (i32.const 12) ) (local.get $4) ) (i32.store (i32.add (local.get $0) (i32.const 16) ) (local.get $4) ) (i32.store (i32.add (local.get $0) (i32.const 20) ) (local.get $4) ) (i32.store (i32.add (local.get $0) (i32.const 24) ) (local.get $4) ) (i32.store (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 28) ) (local.get $4) ) (i32.store (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 24) ) (local.get $4) ) (i32.store (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 20) ) (local.get $4) ) (i32.store (i32.sub (i32.add (local.get $0) (local.get $2) ) (i32.const 16) ) (local.get $4) ) (local.set $3 (i32.add (i32.const 24) (i32.and (local.get $0) (i32.const 4) ) ) ) (local.set $0 (i32.add (local.get $0) (local.get $3) ) ) (local.set $2 (i32.sub (local.get $2) (local.get $3) ) ) (local.set $5 (i64.or (i64.extend_i32_u (local.get $4) ) (i64.shl (i64.extend_i32_u (local.get $4) ) (i64.const 32) ) ) ) (block $label$7 (loop $label$8 (if (i32.ge_u (local.get $2) (i32.const 32) ) (block (block $label$10 (i64.store (local.get $0) (local.get $5) ) (i64.store (i32.add (local.get $0) (i32.const 8) ) (local.get $5) ) (i64.store (i32.add (local.get $0) (i32.const 16) ) (local.get $5) ) (i64.store (i32.add (local.get $0) (i32.const 24) ) (local.get $5) ) (local.set $2 (i32.sub (local.get $2) (i32.const 32) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 32) ) ) ) (br $label$8) ) ) ) ) ) (func $~lib/array/Array#constructor (; 18 ;) (type $1) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (if (i32.gt_u (local.get $1) (i32.const 268435454) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 8) (i32.const 45) (i32.const 39) ) (unreachable) ) ) (local.set $2 (i32.shl (local.get $1) (i32.const 2) ) ) (local.set $3 (call $~lib/internal/arraybuffer/allocateUnsafe (local.get $2) ) ) (i32.store (block $label$2 (result i32) (if (i32.eqz (local.get $0) ) (local.set $0 (call $~lib/memory/memory.allocate (i32.const 8) ) ) ) (i32.store (local.get $0) (i32.const 0) ) (i32.store offset=4 (local.get $0) (i32.const 0) ) (local.get $0) ) (local.get $3) ) (i32.store offset=4 (local.get $0) (local.get $1) ) (block $label$4 (local.set $4 (i32.add (local.get $3) (i32.const 8) ) ) (local.set $5 (i32.const 0) ) (local.set $6 (local.get $2) ) (call $~lib/internal/memory/memset (local.get $4) (local.get $5) (local.get $6) ) ) (local.get $0) ) (func $~lib/array/Array#__unchecked_set (; 19 ;) (type $7) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local.set $3 (i32.load (local.get $0) ) ) (local.set $4 (local.get $1) ) (local.set $5 (local.get $2) ) (local.set $6 (i32.const 0) ) (i32.store offset=8 (i32.add (i32.add (local.get $3) (i32.shl (local.get $4) (i32.const 2) ) ) (local.get $6) ) (local.get $5) ) ) ;; CHECK: (func $assembly/index/init (; has Stack IR ;) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 f64) ;; CHECK-NEXT: (local $5 f64) ;; CHECK-NEXT: (local $6 f64) ;; CHECK-NEXT: (local $7 f64) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (call $~lib/allocator/arena/__memory_allocate ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (call $~lib/allocator/arena/__memory_allocate ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__inlined_func$~lib/internal/memory/memset ;; CHECK-NEXT: (br_if $__inlined_func$~lib/internal/memory/memset ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__inlined_func$~lib/internal/memory/memset ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $label$8 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $assembly/index/Body#constructor ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (f64.const 39.47841760435743) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $assembly/index/Body#constructor ;; CHECK-NEXT: (f64.const 4.841431442464721) ;; CHECK-NEXT: (f64.const -1.1603200440274284) ;; CHECK-NEXT: (f64.const -0.10362204447112311) ;; CHECK-NEXT: (f64.const 0.606326392995832) ;; CHECK-NEXT: (f64.const 2.81198684491626) ;; CHECK-NEXT: (f64.const -0.02521836165988763) ;; CHECK-NEXT: (f64.const 0.03769367487038949) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $assembly/index/Body#constructor ;; CHECK-NEXT: (f64.const 8.34336671824458) ;; CHECK-NEXT: (f64.const 4.124798564124305) ;; CHECK-NEXT: (f64.const -0.4035234171143214) ;; CHECK-NEXT: (f64.const -1.0107743461787924) ;; CHECK-NEXT: (f64.const 1.8256623712304119) ;; CHECK-NEXT: (f64.const 0.008415761376584154) ;; CHECK-NEXT: (f64.const 0.011286326131968767) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $assembly/index/Body#constructor ;; CHECK-NEXT: (f64.const 12.894369562139131) ;; CHECK-NEXT: (f64.const -15.111151401698631) ;; CHECK-NEXT: (f64.const -0.22330757889265573) ;; CHECK-NEXT: (f64.const 1.0827910064415354) ;; CHECK-NEXT: (f64.const 0.8687130181696082) ;; CHECK-NEXT: (f64.const -0.010832637401363636) ;; CHECK-NEXT: (f64.const 1.7237240570597112e-03) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $assembly/index/Body#constructor ;; CHECK-NEXT: (f64.const 15.379697114850917) ;; CHECK-NEXT: (f64.const -25.919314609987964) ;; CHECK-NEXT: (f64.const 0.17925877295037118) ;; CHECK-NEXT: (f64.const 0.979090732243898) ;; CHECK-NEXT: (f64.const 0.5946989986476762) ;; CHECK-NEXT: (f64.const -0.034755955504078104) ;; CHECK-NEXT: (f64.const 2.0336868699246304e-03) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $label$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f64.load offset=48 ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.load offset=24 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.load offset=32 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.load offset=40 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=24 ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (f64.const -39.47841760435743) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=32 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (f64.const -39.47841760435743) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=40 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (f64.const -39.47841760435743) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (call $~lib/allocator/arena/__memory_allocate ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global$5 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $assembly/index/init (; 20 ;) (type $0) (local $0 i32) (global.set $global$5 (call $assembly/index/NBodySystem#constructor (i32.const 0) (block $label$1 (result i32) (local.set $0 (call $~lib/array/Array#constructor (i32.const 0) (i32.const 5) ) ) (call $~lib/array/Array#__unchecked_set (local.get $0) (i32.const 0) (call $assembly/index/Sun) ) (call $~lib/array/Array#__unchecked_set (local.get $0) (i32.const 1) (call $assembly/index/Jupiter) ) (call $~lib/array/Array#__unchecked_set (local.get $0) (i32.const 2) (call $assembly/index/Saturn) ) (call $~lib/array/Array#__unchecked_set (local.get $0) (i32.const 3) (call $assembly/index/Uranus) ) (call $~lib/array/Array#__unchecked_set (local.get $0) (i32.const 4) (call $assembly/index/Neptune) ) (local.get $0) ) ) ) ) ;; CHECK: (func $assembly/index/NBodySystem#advance (; has Stack IR ;) (param $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 f64) ;; CHECK-NEXT: (local $5 f64) ;; CHECK-NEXT: (local $6 f64) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 f64) ;; CHECK-NEXT: (local $9 f64) ;; CHECK-NEXT: (local $10 f64) ;; CHECK-NEXT: (local $11 f64) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 f64) ;; CHECK-NEXT: (local $15 f64) ;; CHECK-NEXT: (local $16 f64) ;; CHECK-NEXT: (local $17 f64) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $label$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (f64.load offset=8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (f64.load offset=16 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f64.load offset=24 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (f64.load offset=32 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (f64.load offset=40 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (f64.load offset=48 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $label$6 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (f64.const 0.01) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (f64.load offset=8 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (f64.load offset=16 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.sqrt ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.load offset=48 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=24 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.load offset=24 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=32 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.load offset=32 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=40 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.load offset=40 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=24 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=32 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=40 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (f64.const 0.01) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.load offset=8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (f64.const 0.01) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=16 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.load offset=16 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (f64.const 0.01) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $assembly/index/NBodySystem#advance (; 21 ;) (type $9) (param $0 i32) (param $1 f64) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 f64) (local $9 f64) (local $10 f64) (local $11 f64) (local $12 f64) (local $13 f64) (local $14 f64) (local $15 f64) (local $16 f64) (local $17 f64) (local $18 f64) (local $19 f64) (local $20 f64) (local $21 f64) (local $22 f64) (local.set $2 (i32.load (local.get $0) ) ) (local.set $4 (block $label$1 (result i32) (local.set $3 (local.get $2) ) (i32.load offset=4 (local.get $3) ) ) ) (block $label$2 (local.set $3 (i32.const 0) ) (loop $label$3 (br_if $label$2 (i32.eqz (i32.lt_u (local.get $3) (local.get $4) ) ) ) (block $label$4 (local.set $5 (call $~lib/array/Array#__unchecked_get (local.get $2) (local.get $3) ) ) (local.set $8 (f64.load (local.get $5) ) ) (local.set $9 (f64.load offset=8 (local.get $5) ) ) (local.set $10 (f64.load offset=16 (local.get $5) ) ) (local.set $11 (f64.load offset=24 (local.get $5) ) ) (local.set $12 (f64.load offset=32 (local.get $5) ) ) (local.set $13 (f64.load offset=40 (local.get $5) ) ) (local.set $14 (f64.load offset=48 (local.get $5) ) ) (block $label$5 (local.set $6 (i32.add (local.get $3) (i32.const 1) ) ) (loop $label$6 (br_if $label$5 (i32.eqz (i32.lt_u (local.get $6) (local.get $4) ) ) ) (block $label$7 (local.set $7 (call $~lib/array/Array#__unchecked_get (local.get $2) (local.get $6) ) ) (local.set $15 (f64.sub (local.get $8) (f64.load (local.get $7) ) ) ) (local.set $16 (f64.sub (local.get $9) (f64.load offset=8 (local.get $7) ) ) ) (local.set $17 (f64.sub (local.get $10) (f64.load offset=16 (local.get $7) ) ) ) (local.set $18 (f64.add (f64.add (f64.mul (local.get $15) (local.get $15) ) (f64.mul (local.get $16) (local.get $16) ) ) (f64.mul (local.get $17) (local.get $17) ) ) ) (local.set $19 (block $label$8 (result f64) (local.set $19 (local.get $18) ) (f64.sqrt (local.get $19) ) ) ) (local.set $20 (f64.div (local.get $1) (f64.mul (local.get $18) (local.get $19) ) ) ) (local.set $21 (f64.mul (local.get $14) (local.get $20) ) ) (local.set $22 (f64.mul (f64.load offset=48 (local.get $7) ) (local.get $20) ) ) (local.set $11 (f64.sub (local.get $11) (f64.mul (local.get $15) (local.get $22) ) ) ) (local.set $12 (f64.sub (local.get $12) (f64.mul (local.get $16) (local.get $22) ) ) ) (local.set $13 (f64.sub (local.get $13) (f64.mul (local.get $17) (local.get $22) ) ) ) (f64.store offset=24 (local.get $7) (f64.add (f64.load offset=24 (local.get $7) ) (f64.mul (local.get $15) (local.get $21) ) ) ) (f64.store offset=32 (local.get $7) (f64.add (f64.load offset=32 (local.get $7) ) (f64.mul (local.get $16) (local.get $21) ) ) ) (f64.store offset=40 (local.get $7) (f64.add (f64.load offset=40 (local.get $7) ) (f64.mul (local.get $17) (local.get $21) ) ) ) ) (local.set $6 (i32.add (local.get $6) (i32.const 1) ) ) (br $label$6) ) ) (f64.store offset=24 (local.get $5) (local.get $11) ) (f64.store offset=32 (local.get $5) (local.get $12) ) (f64.store offset=40 (local.get $5) (local.get $13) ) (f64.store (local.get $5) (f64.add (f64.load (local.get $5) ) (f64.mul (local.get $1) (local.get $11) ) ) ) (f64.store offset=8 (local.get $5) (f64.add (f64.load offset=8 (local.get $5) ) (f64.mul (local.get $1) (local.get $12) ) ) ) (f64.store offset=16 (local.get $5) (f64.add (f64.load offset=16 (local.get $5) ) (f64.mul (local.get $1) (local.get $13) ) ) ) ) (local.set $3 (i32.add (local.get $3) (i32.const 1) ) ) (br $label$3) ) ) ) (func $assembly/index/NBodySystem#energy (; 22 ;) (type $10) (param $0 i32) (result f64) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 f64) (local $8 f64) (local $9 f64) (local $10 f64) (local $11 f64) (local $12 f64) (local $13 f64) (local $14 f64) (local $15 f64) (local $16 f64) (local $17 f64) (local $18 f64) (local.set $7 (f64.const 0) ) (local.set $1 (i32.load (local.get $0) ) ) (block $label$1 (block $label$2 (local.set $2 (i32.const 0) ) (local.set $3 (block $label$3 (result i32) (local.set $3 (local.get $1) ) (i32.load offset=4 (local.get $3) ) ) ) ) (loop $label$4 (br_if $label$1 (i32.eqz (i32.lt_u (local.get $2) (local.get $3) ) ) ) (block $label$5 (local.set $4 (call $~lib/array/Array#__unchecked_get (local.get $1) (local.get $2) ) ) (local.set $8 (f64.load (local.get $4) ) ) (local.set $9 (f64.load offset=8 (local.get $4) ) ) (local.set $10 (f64.load offset=16 (local.get $4) ) ) (local.set $11 (f64.load offset=24 (local.get $4) ) ) (local.set $12 (f64.load offset=32 (local.get $4) ) ) (local.set $13 (f64.load offset=40 (local.get $4) ) ) (local.set $14 (f64.load offset=48 (local.get $4) ) ) (local.set $7 (f64.add (local.get $7) (f64.mul (f64.mul (f64.const 0.5) (local.get $14) ) (f64.add (f64.add (f64.mul (local.get $11) (local.get $11) ) (f64.mul (local.get $12) (local.get $12) ) ) (f64.mul (local.get $13) (local.get $13) ) ) ) ) ) (block $label$6 (local.set $5 (i32.add (local.get $2) (i32.const 1) ) ) (loop $label$7 (br_if $label$6 (i32.eqz (i32.lt_u (local.get $5) (local.get $3) ) ) ) (block $label$8 (local.set $6 (call $~lib/array/Array#__unchecked_get (local.get $1) (local.get $5) ) ) (local.set $15 (f64.sub (local.get $8) (f64.load (local.get $6) ) ) ) (local.set $16 (f64.sub (local.get $9) (f64.load offset=8 (local.get $6) ) ) ) (local.set $17 (f64.sub (local.get $10) (f64.load offset=16 (local.get $6) ) ) ) (local.set $18 (block $label$9 (result f64) (local.set $18 (f64.add (f64.add (f64.mul (local.get $15) (local.get $15) ) (f64.mul (local.get $16) (local.get $16) ) ) (f64.mul (local.get $17) (local.get $17) ) ) ) (f64.sqrt (local.get $18) ) ) ) (local.set $7 (f64.sub (local.get $7) (f64.div (f64.mul (local.get $14) (f64.load offset=48 (local.get $6) ) ) (local.get $18) ) ) ) ) (local.set $5 (i32.add (local.get $5) (i32.const 1) ) ) (br $label$7) ) ) ) (local.set $2 (i32.add (local.get $2) (i32.const 1) ) ) (br $label$4) ) ) (local.get $7) ) ;; CHECK: (func $assembly/index/step (; has Stack IR ;) (result f64) ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 f64) ;; CHECK-NEXT: (local $7 f64) ;; CHECK-NEXT: (local $8 f64) ;; CHECK-NEXT: (local $9 f64) ;; CHECK-NEXT: (local $10 f64) ;; CHECK-NEXT: (call $assembly/index/NBodySystem#advance ;; CHECK-NEXT: (global.get $global$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $global$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $label$4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (f64.load offset=8 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (f64.load offset=16 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (f64.load offset=48 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 0.5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (f64.load offset=24 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (f64.load offset=32 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (f64.load offset=40 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $label$7 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (f64.load offset=48 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.sqrt ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (f64.load offset=8 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (f64.load offset=16 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $assembly/index/step (; 23 ;) (type $8) (result f64) (call $assembly/index/NBodySystem#advance (global.get $global$5) (f64.const 0.01) ) (call $assembly/index/NBodySystem#energy (global.get $global$5) ) ) ;; CHECK: (func $assembly/index/bench (; has Stack IR ;) (param $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (loop $label$2 ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $assembly/index/NBodySystem#advance ;; CHECK-NEXT: (global.get $global$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $assembly/index/bench (; 24 ;) (type $11) (param $0 i32) (local $1 i32) (block $label$1 (local.set $1 (i32.const 0) ) (loop $label$2 (br_if $label$1 (i32.eqz (i32.lt_u (local.get $1) (local.get $0) ) ) ) (call $assembly/index/NBodySystem#advance (global.get $global$5) (f64.const 0.01) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (br $label$2) ) ) ) ;; CHECK: (func $assembly/index/getBody (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $global$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $assembly/index/getBody (; 25 ;) (type $3) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local.set $1 (i32.load (global.get $global$5) ) ) (if (result i32) (i32.lt_u (local.get $0) (block $label$1 (result i32) (local.set $2 (local.get $1) ) (i32.load offset=4 (local.get $2) ) ) ) (call $~lib/array/Array#__get (local.get $1) (local.get $0) ) (i32.const 0) ) ) ;; CHECK: (func $start (; has Stack IR ;) ;; CHECK-NEXT: (global.set $global$0 ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global$1 ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $start (; 26 ;) (type $0) (call $start:assembly/index) ) ;; CHECK: (func $null (; has Stack IR ;) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $null (; 27 ;) (type $0) ) ) binaryen-version_108/test/lit/passes/O_fast-math.wast000066400000000000000000000065441423707623100230650ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt -O --fast-math -S -o - | filecheck %s ;; with fast-math we can optimize some of these patterns (module (func "div" (result f32) (f32.div (f32.const -nan:0x23017a) (f32.const 1) ) ) (func "mul1" (result f32) (f32.mul (f32.const -nan:0x34546d) (f32.const 1) ) ) (func "mul2" (result f32) (f32.mul (f32.const 1) (f32.const -nan:0x34546d) ) ) (func "add1" (result f32) (f32.add (f32.const -nan:0x34546d) (f32.const -0) ) ) (func "add2" (result f32) (f32.add (f32.const -0) (f32.const -nan:0x34546d) ) ) (func "add3" (result f32) (f32.add (f32.const -nan:0x34546d) (f32.const 0) ) ) (func "add4" (result f32) (f32.add (f32.const 0) (f32.const -nan:0x34546d) ) ) (func "sub1" (result f32) (f32.sub (f32.const -nan:0x34546d) (f32.const 0) ) ) (func "sub2" (result f32) (f32.sub (f32.const -nan:0x34546d) (f32.const -0) ) ) (func "mul_neg_one1" (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const -1) ) ) (func "mul_neg_one2" (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const -1) ) ) (func "abs_sub_zero1" (param $x f32) (result f32) ;; abs(0 - x) ==> abs(x) (f32.abs (f32.sub (f32.const 0) (local.get $x) ) ) ) (func "abs_sub_zero2" (param $x f64) (result f64) ;; abs(0 - x) ==> abs(x) (f64.abs (f64.sub (f64.const 0) (local.get $x) ) ) ) ) ;; CHECK: (type $none_=>_f32 (func (result f32))) ;; CHECK: (type $f32_=>_f32 (func (param f32) (result f32))) ;; CHECK: (type $f64_=>_f64 (func (param f64) (result f64))) ;; CHECK: (export "div" (func $0)) ;; CHECK: (export "mul1" (func $1)) ;; CHECK: (export "mul2" (func $2)) ;; CHECK: (export "add1" (func $1)) ;; CHECK: (export "add2" (func $2)) ;; CHECK: (export "add3" (func $2)) ;; CHECK: (export "add4" (func $2)) ;; CHECK: (export "sub1" (func $1)) ;; CHECK: (export "sub2" (func $2)) ;; CHECK: (export "mul_neg_one1" (func $9)) ;; CHECK: (export "mul_neg_one2" (func $10)) ;; CHECK: (export "abs_sub_zero1" (func $11)) ;; CHECK: (export "abs_sub_zero2" (func $12)) ;; CHECK: (func $0 (; has Stack IR ;) (result f32) ;; CHECK-NEXT: (f32.const -nan:0x23017a) ;; CHECK-NEXT: ) ;; CHECK: (func $1 (; has Stack IR ;) (result f32) ;; CHECK-NEXT: (f32.const -nan:0x34546d) ;; CHECK-NEXT: ) ;; CHECK: (func $2 (; has Stack IR ;) (result f32) ;; CHECK-NEXT: (f32.const nan:0x400000) ;; CHECK-NEXT: ) ;; CHECK: (func $9 (; has Stack IR ;) (param $0 f32) (result f32) ;; CHECK-NEXT: (f32.neg ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $10 (; has Stack IR ;) (param $0 f64) (result f64) ;; CHECK-NEXT: (f64.neg ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $11 (; has Stack IR ;) (param $0 f32) (result f32) ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $12 (; has Stack IR ;) (param $0 f64) (result f64) ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/Oz.wast000066400000000000000000000172741423707623100213150ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt -Oz --all-features -S -o - | filecheck %s (module (memory 100 100) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) ;; CHECK: (type $none_=>_v128 (func (result v128))) ;; CHECK: (memory $0 100 100) ;; CHECK: (export "localcse" (func $basics)) ;; CHECK: (export "localcse-2" (func $8)) ;; CHECK: (export "propagate-sign-for-mul-i32-lhs-const-pot" (func $9)) ;; CHECK: (export "propagate-sign-for-mul-i32-smin" (func $10)) ;; CHECK: (export "eliminate-redundant-checks-1" (func $11)) ;; CHECK: (export "eliminate-redundant-checks-1a" (func $11)) ;; CHECK: (export "eliminate-redundant-checks-2" (func $12)) ;; CHECK: (export "eliminate-redundant-checks-2a" (func $12)) ;; CHECK: (export "eliminate-redundant-checks-skip-1" (func $13)) ;; CHECK: (export "eliminate-redundant-checks-skip-2" (func $14)) ;; CHECK: (export "precompute-simd" (func $precompute-simd)) ;; CHECK: (func $basics (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $basics (export "localcse") (param $x i32) ($param $y i32) (result i32) ;; -O3 does localcse (local $x2 i32) (local $y2 i32) (local.set $x2 (i32.add (local.get $x) (local.get $y)) ) (local.set $y2 (i32.add (local.get $x) (local.get $y)) ) (i32.add (local.get $x2) (local.get $y2)) ) ;; CHECK: (func $8 (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -75) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $8 (export "localcse-2") (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (result i32) (block $label$0 (result i32) (i32.store (local.tee $var$2 (i32.add (local.get $var$1) (i32.const 4) ) ) (i32.and (i32.load (local.get $var$2) ) (i32.xor (local.tee $var$2 (i32.const 74) ) (i32.const -1) ) ) ) (i32.store (local.tee $var$1 (i32.add (local.get $var$1) (i32.const 4) ) ) (i32.or (i32.load (local.get $var$1) ) (i32.and (local.get $var$2) (i32.const 8) ) ) ) (i32.const 0) ) ) ;; CHECK: (func $9 (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $9 (export "propagate-sign-for-mul-i32-lhs-const-pot") (param $0 i32) (result i32) (i32.mul (i32.const 4) (i32.sub (i32.const 0) (local.get $0) ) ) ) ;; CHECK: (func $10 (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $10 (export "propagate-sign-for-mul-i32-smin") (param $0 i32) (result i32) (i32.mul (i32.sub (i32.const 0) (local.get $0) ) (i32.const 0x80000000) ) ) ;; CHECK: (func $11 (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $11 (export "eliminate-redundant-checks-1") (param $0 i32) (result i32) (if (local.get $0) (if (local.get $0) (return (local.get $0)) ) ) (i32.const 0) ) (func $11a (export "eliminate-redundant-checks-1a") (param $0 i32) (result i32) (if (select (local.get $0) (i32.const 0) (local.get $0) ) (return (local.get $0)) ) (i32.const 0) ) ;; CHECK: (func $12 (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $12 (export "eliminate-redundant-checks-2") (param $0 i32) (param $1 i32) (result i32) (if (local.tee $1 (local.get $0)) (if (local.get $1) (return (local.get $1)) ) ) (i32.const 0) ) (func $12a (export "eliminate-redundant-checks-2a") (param $0 i32) (param $1 i32) (result i32) (if (select (local.tee $1 (local.get $0)) (i32.const 0) (local.get $1) ) (return (local.get $1)) ) (i32.const 0) ) ;; CHECK: (func $13 (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $13 (export "eliminate-redundant-checks-skip-1") (param $0 i32) (param $1 i32) (result i32) (if (select (local.get $1) (i32.const 0) (local.tee $1 (local.get $0)) ) (return (local.get $1)) ) (i32.const 0) ) ;; CHECK: (func $14 (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $14 (export "eliminate-redundant-checks-skip-2") (param $0 i32) (param $1 i32) (result i32) (if (select (i32.const 0) (local.get $1) (local.tee $1 (local.get $0)) ) (return (local.get $1)) ) (i32.const 0) ) ;; CHECK: (func $precompute-simd (; has Stack IR ;) (result v128) ;; CHECK-NEXT: (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) ;; CHECK-NEXT: ) (func $precompute-simd (export "precompute-simd") (result v128) (i32x4.splat (i32.const 0) ) ) ) binaryen-version_108/test/lit/passes/alignment-lowering.wast000066400000000000000000001743541423707623100245320ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --alignment-lowering -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (memory $0 1 1) (memory $0 1 1) ;; CHECK: (func $func_4 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=101 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=102 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=103 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u offset=100 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=102 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=100 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=101 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=102 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=103 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=100 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=102 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_4 (drop (i32.load (i32.const 4))) (drop (i32.load align=1 (i32.const 4))) (drop (i32.load align=2 (i32.const 4))) (drop (i32.load align=4 (i32.const 4))) (drop (i32.load offset=100 (i32.const 4))) (drop (i32.load offset=100 align=1 (i32.const 4))) (drop (i32.load offset=100 align=2 (i32.const 4))) (drop (i32.load offset=100 align=4 (i32.const 4))) (drop (i32.load offset=100 align=1 (unreachable))) (i32.store (i32.const 4) (i32.const 8)) (i32.store align=1 (i32.const 4) (i32.const 8)) (i32.store align=2 (i32.const 4) (i32.const 8)) (i32.store align=4 (i32.const 4) (i32.const 8)) (i32.store offset=100 (i32.const 4) (i32.const 8)) (i32.store offset=100 align=1 (i32.const 4) (i32.const 8)) (i32.store offset=100 align=2 (i32.const 4) (i32.const 8)) (i32.store offset=100 align=4 (i32.const 4) (i32.const 8)) (i32.store offset=100 align=1 (unreachable) (i32.const 8)) (i32.store offset=100 align=1 (i32.const 4) (unreachable)) ) ;; CHECK: (func $func_2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_u offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=101 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_u offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=100 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=101 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_2 (drop (i32.load16_u (i32.const 4))) (drop (i32.load16_u align=1 (i32.const 4))) (drop (i32.load16_u align=2 (i32.const 4))) (drop (i32.load16_u offset=100 (i32.const 4))) (drop (i32.load16_u offset=100 align=1 (i32.const 4))) (drop (i32.load16_u offset=100 align=2 (i32.const 4))) (drop (i32.load16_u offset=100 align=1 (unreachable))) (i32.store16 (i32.const 4) (i32.const 8)) (i32.store16 align=1 (i32.const 4) (i32.const 8)) (i32.store16 align=2 (i32.const 4) (i32.const 8)) (i32.store16 offset=100 (i32.const 4) (i32.const 8)) (i32.store16 offset=100 align=1 (i32.const 4) (i32.const 8)) (i32.store16 offset=100 align=2 (i32.const 4) (i32.const 8)) (i32.store16 offset=100 align=1 (unreachable) (i32.const 8)) (i32.store16 offset=100 align=1 (i32.const 4) (unreachable)) ) ;; CHECK: (func $func_1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_1 (drop (i32.load8_u (i32.const 4))) (drop (i32.load8_u align=1 (i32.const 4))) (drop (i32.load8_u offset=100 (i32.const 4))) (drop (i32.load8_u offset=100 align=1 (i32.const 4))) (drop (i32.load8_u offset=100 align=1 (unreachable))) (i32.store8 (i32.const 4) (i32.const 8)) (i32.store8 align=1 (i32.const 4) (i32.const 8)) (i32.store8 offset=100 (i32.const 4) (i32.const 8)) (i32.store8 offset=100 align=1 (i32.const 4) (i32.const 8)) (i32.store8 offset=100 align=1 (unreachable) (i32.const 8)) (i32.store8 offset=100 align=1 (i32.const 4) (unreachable)) ) ;; CHECK: (func $func_signed ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=101 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s offset=100 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_signed (drop (i32.load16_s (i32.const 4))) (drop (i32.load16_s align=1 (i32.const 4))) (drop (i32.load16_s align=2 (i32.const 4))) (drop (i32.load16_s offset=100 (i32.const 4))) (drop (i32.load16_s offset=100 align=1 (i32.const 4))) (drop (i32.load16_s offset=100 align=2 (i32.const 4))) (drop (i32.load16_s offset=100 align=1 (unreachable))) ) ;; CHECK: (func $i64-load ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=7 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=8 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=9 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=10 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_s ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_s ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $i64-load (drop (i64.load align=1 (i32.const 12))) (drop (i64.load align=2 (i32.const 16))) (drop (i64.load align=4 (i32.const 20))) (drop (i64.load align=1 offset=3 (i32.const 20))) (drop (i64.load16_s align=1 (i32.const 28))) (drop (i64.load32_s align=1 (i32.const 32))) (drop (i64.load16_u align=1 (i32.const 40))) (drop (i64.load32_u align=1 (i32.const 44))) ) ;; CHECK: (func $f32-load ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $f32-load (drop (f32.load align=1 (i32.const 12))) (drop (f32.load align=2 (i32.const 16))) (drop (f32.load align=1 offset=3 (i32.const 20))) ) ;; CHECK: (func $f64-load ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=7 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=8 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=9 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=10 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $f64-load (drop (f64.load align=1 (i32.const 12))) (drop (f64.load align=2 (i32.const 16))) (drop (f64.load align=4 (i32.const 20))) (drop (f64.load align=1 offset=3 (i32.const 20))) ) ;; CHECK: (func $i64-store ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i64) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (local $20 i32) ;; CHECK-NEXT: (local $21 i32) ;; CHECK-NEXT: (local $22 i32) ;; CHECK-NEXT: (local $23 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=7 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=6 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i64.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.const 400) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=7 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=8 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=9 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=10 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $21 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const 600) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $22 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $23 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const 700) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $i64-store (i64.store align=1 (i32.const 12) (i64.const 100)) (i64.store align=2 (i32.const 16) (i64.const 200)) (i64.store align=4 (i32.const 20) (i64.const 300)) (i64.store align=1 offset=3 (i32.const 24) (i64.const 400)) (i64.store16 align=1 (i32.const 20) (i64.const 600)) (i64.store32 align=1 (i32.const 20) (i64.const 700)) ) ;; CHECK: (func $f32-store ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 400) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $f32-store (f32.store align=1 (i32.const 12) (f32.const 100)) (f32.store align=2 (i32.const 16) (f32.const 200)) (f32.store align=1 offset=3 (i32.const 24) (f32.const 400)) ) ;; CHECK: (func $f64-store ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i64) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=7 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=6 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 400) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=7 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=8 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=9 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=10 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $f64-store (f64.store align=1 (i32.const 12) (f64.const 100)) (f64.store align=2 (i32.const 16) (f64.const 200)) (f64.store align=4 (i32.const 20) (f64.const 300)) (f64.store align=1 offset=3 (i32.const 24) (f64.const 400)) ) ) binaryen-version_108/test/lit/passes/alignment-lowering64.wast000066400000000000000000001744061423707623100247020ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --alignment-lowering --enable-memory64 -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (memory $0 i64 1 1) (memory $0 i64 1 1) ;; CHECK: (func $func_4 ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i64) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=101 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=102 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=103 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u offset=100 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=102 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=100 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=101 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=102 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=103 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=100 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=102 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_4 (drop (i32.load (i64.const 4))) (drop (i32.load align=1 (i64.const 4))) (drop (i32.load align=2 (i64.const 4))) (drop (i32.load align=4 (i64.const 4))) (drop (i32.load offset=100 (i64.const 4))) (drop (i32.load offset=100 align=1 (i64.const 4))) (drop (i32.load offset=100 align=2 (i64.const 4))) (drop (i32.load offset=100 align=4 (i64.const 4))) (drop (i32.load offset=100 align=1 (unreachable))) (i32.store (i64.const 4) (i32.const 8)) (i32.store align=1 (i64.const 4) (i32.const 8)) (i32.store align=2 (i64.const 4) (i32.const 8)) (i32.store align=4 (i64.const 4) (i32.const 8)) (i32.store offset=100 (i64.const 4) (i32.const 8)) (i32.store offset=100 align=1 (i64.const 4) (i32.const 8)) (i32.store offset=100 align=2 (i64.const 4) (i32.const 8)) (i32.store offset=100 align=4 (i64.const 4) (i32.const 8)) (i32.store offset=100 align=1 (unreachable) (i32.const 8)) (i32.store offset=100 align=1 (i64.const 4) (unreachable)) ) ;; CHECK: (func $func_2 ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_u offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=101 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_u offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=100 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=101 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_2 (drop (i32.load16_u (i64.const 4))) (drop (i32.load16_u align=1 (i64.const 4))) (drop (i32.load16_u align=2 (i64.const 4))) (drop (i32.load16_u offset=100 (i64.const 4))) (drop (i32.load16_u offset=100 align=1 (i64.const 4))) (drop (i32.load16_u offset=100 align=2 (i64.const 4))) (drop (i32.load16_u offset=100 align=1 (unreachable))) (i32.store16 (i64.const 4) (i32.const 8)) (i32.store16 align=1 (i64.const 4) (i32.const 8)) (i32.store16 align=2 (i64.const 4) (i32.const 8)) (i32.store16 offset=100 (i64.const 4) (i32.const 8)) (i32.store16 offset=100 align=1 (i64.const 4) (i32.const 8)) (i32.store16 offset=100 align=2 (i64.const 4) (i32.const 8)) (i32.store16 offset=100 align=1 (unreachable) (i32.const 8)) (i32.store16 offset=100 align=1 (i64.const 4) (unreachable)) ) ;; CHECK: (func $func_1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_1 (drop (i32.load8_u (i64.const 4))) (drop (i32.load8_u align=1 (i64.const 4))) (drop (i32.load8_u offset=100 (i64.const 4))) (drop (i32.load8_u offset=100 align=1 (i64.const 4))) (drop (i32.load8_u offset=100 align=1 (unreachable))) (i32.store8 (i64.const 4) (i32.const 8)) (i32.store8 align=1 (i64.const 4) (i32.const 8)) (i32.store8 offset=100 (i64.const 4) (i32.const 8)) (i32.store8 offset=100 align=1 (i64.const 4) (i32.const 8)) (i32.store8 offset=100 align=1 (unreachable) (i32.const 8)) (i32.store8 offset=100 align=1 (i64.const 4) (unreachable)) ) ;; CHECK: (func $func_signed ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=100 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=101 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s offset=100 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_signed (drop (i32.load16_s (i64.const 4))) (drop (i32.load16_s align=1 (i64.const 4))) (drop (i32.load16_s align=2 (i64.const 4))) (drop (i32.load16_s offset=100 (i64.const 4))) (drop (i32.load16_s offset=100 align=1 (i64.const 4))) (drop (i32.load16_s offset=100 align=2 (i64.const 4))) (drop (i32.load16_s offset=100 align=1 (unreachable))) ) ;; CHECK: (func $i64-load ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i64) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i64) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i64) ;; CHECK-NEXT: (local $12 i64) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=7 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=8 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=9 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=10 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_s ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i64.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_s ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i64.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i64.const 44) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $i64-load (drop (i64.load align=1 (i64.const 12))) (drop (i64.load align=2 (i64.const 16))) (drop (i64.load align=4 (i64.const 20))) (drop (i64.load align=1 offset=3 (i64.const 20))) (drop (i64.load16_s align=1 (i64.const 28))) (drop (i64.load32_s align=1 (i64.const 32))) (drop (i64.load16_u align=1 (i64.const 40))) (drop (i64.load32_u align=1 (i64.const 44))) ) ;; CHECK: (func $f32-load ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $f32-load (drop (f32.load align=1 (i64.const 12))) (drop (f32.load align=2 (i64.const 16))) (drop (f32.load align=1 offset=3 (i64.const 20))) ) ;; CHECK: (func $f64-load ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i64) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i64) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=7 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load16_u offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u offset=6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=3 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=4 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=5 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=6 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u offset=7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=8 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=9 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load8_u offset=10 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $f64-load (drop (f64.load align=1 (i64.const 12))) (drop (f64.load align=2 (i64.const 16))) (drop (f64.load align=4 (i64.const 20))) (drop (f64.load align=1 offset=3 (i64.const 20))) ) ;; CHECK: (func $i64-store ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i64) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i64) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i64) ;; CHECK-NEXT: (local $15 i64) ;; CHECK-NEXT: (local $16 i64) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i64) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (local $20 i64) ;; CHECK-NEXT: (local $21 i32) ;; CHECK-NEXT: (local $22 i64) ;; CHECK-NEXT: (local $23 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=7 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=6 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i64.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i64.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.const 400) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=7 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=8 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=9 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=10 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $21 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const 600) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $22 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $23 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const 700) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $i64-store (i64.store align=1 (i64.const 12) (i64.const 100)) (i64.store align=2 (i64.const 16) (i64.const 200)) (i64.store align=4 (i64.const 20) (i64.const 300)) (i64.store align=1 offset=3 (i64.const 24) (i64.const 400)) (i64.store16 align=1 (i64.const 20) (i64.const 600)) (i64.store32 align=1 (i64.const 20) (i64.const 700)) ) ;; CHECK: (func $f32-store ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i64.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 400) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $f32-store (f32.store align=1 (i64.const 12) (f32.const 100)) (f32.store align=2 (i64.const 16) (f32.const 200)) (f32.store align=1 offset=3 (i64.const 24) (f32.const 400)) ) ;; CHECK: (func $f64-store ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i64) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i64) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i64) ;; CHECK-NEXT: (local $15 i64) ;; CHECK-NEXT: (local $16 i64) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i64) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=7 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=6 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i64.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 400) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=4 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=5 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=6 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=7 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=8 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=9 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=10 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $f64-store (f64.store align=1 (i64.const 12) (f64.const 100)) (f64.store align=2 (i64.const 16) (f64.const 200)) (f64.store align=4 (i64.const 20) (f64.const 300)) (f64.store align=1 offset=3 (i64.const 24) (f64.const 400)) ) ) binaryen-version_108/test/lit/passes/asyncify.wast000066400000000000000000001251511423707623100225440ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify -S -o - | filecheck %s (module ;; CHECK: (type $f (func (param i32))) (type $f (func (param i32))) (memory 1 2) ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (param i32))) (import "env" "import2" (func $import2 (param i32))) (table funcref (elem $liveness2 $liveness2)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (table $0 2 2 funcref) ;; CHECK: (elem (i32.const 0) $liveness2 $liveness2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $liveness1 (param $live0 i32) (param $dead0 i32) ;; CHECK-NEXT: (local $live1 i32) ;; CHECK-NEXT: (local $dead1 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $live0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $live1 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $dead1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $liveness1 (param $live0 i32) (param $dead0 i32) (local $live1 i32) (local $dead1 i32) (drop (local.get $dead0)) (drop (local.get $dead1)) (call $import) (drop (local.get $live0)) (drop (local.get $live1)) ) ;; CHECK: (func $liveness2 (param $live0 i32) (param $dead0 i32) ;; CHECK-NEXT: (local $live1 i32) ;; CHECK-NEXT: (local $dead1 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $live0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $live1 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $dead1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $liveness2 (param $live0 i32) (param $dead0 i32) (local $live1 i32) (local $dead1 i32) (drop (local.get $dead0)) (drop (local.get $dead1)) (call $import) (drop (local.get $live0)) (drop (local.get $live1)) ) ;; CHECK: (func $liveness3 (param $live0 i32) (param $dead0 i32) ;; CHECK-NEXT: (local $live1 i32) ;; CHECK-NEXT: (local $dead1 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $live0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $live1 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $liveness3 (param $live0 i32) (param $dead0 i32) (local $live1 i32) (local $dead1 i32) (call $import) (drop (local.get $live0)) (call $import) (drop (local.get $live1)) ) ;; CHECK: (func $liveness4 (param $live0 i32) (param $dead0 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $live0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $liveness4 (param $live0 i32) (param $dead0 i32) (if (i32.const 0) (call $import) ) (drop (local.get $live0)) ) ;; CHECK: (func $liveness5 (param $dead0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $dead0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $liveness5 (param $dead0 i32) (drop (local.get $dead0)) (if (i32.const 0) (call $import) ;; live before and after call, but not during ) (local.set $dead0 (i32.const 1)) (drop (local.get $dead0)) ) ;; CHECK: (func $liveness-call-kills (param $live i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $live) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $liveness-call-kills (param $live i32) (call $import2 (local.get $live)) ) ;; CHECK: (func $liveness-indirect-kills (param $live0 i32) (param $live1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call_indirect (type $f) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $liveness-indirect-kills (param $live0 i32) (param $live1 i32) (call_indirect (type $f) (local.get $live0) (local.get $live1)) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_enable-multivalue.wast000066400000000000000000002616041423707623100262430ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --enable-multivalue -S -o - | filecheck %s ;; Pre-existing imports that the pass turns into the implementations. (module (memory 1 2) (import "asyncify" "start_unwind" (func $asyncify_start_unwind (param i32))) (import "asyncify" "stop_unwind" (func $asyncify_stop_unwind)) (import "asyncify" "start_rewind" (func $asyncify_start_rewind (param i32))) (import "asyncify" "stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (global $sleeping (mut i32) (i32.const 0)) (global $sleeping (mut i32) (i32.const 0)) ;; do a sleep operation: start a sleep if running, or resume after a sleep ;; if we just rewound. ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $do_sleep ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (global.get $sleeping) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (global.set $sleeping ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $asyncify_start_unwind ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (global.set $sleeping ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $asyncify_stop_rewind) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $do_sleep (if (i32.eqz (global.get $sleeping)) (block (global.set $sleeping (i32.const 1)) ;; we should set up the data at address 4 around here (call $asyncify_start_unwind (i32.const 4)) ) (block (global.set $sleeping (i32.const 0)) (call $asyncify_stop_rewind) ) ) ) ;; a function that does some work and has a sleep (async pause/resume) in the middle ;; CHECK: (func $work ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $do_sleep) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $work (call $stuff) ;; do some work (call $do_sleep) ;; take a break (call $stuff) ;; do some more work ) ;; CHECK: (func $stuff ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $stuff) ;; the first event called from the main event loop: just call into $work ;; CHECK: (func $first_event ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $work) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $first_event (call $work) ;; work will sleep, so we exit through here while it is paused ) ;; the second event called from the main event loop: to resume $work, ;; stop the unwind, then prepare a rewind, and initiate it by doing ;; the call to rewind the call stack back up to where it was ;; CHECK: (func $second_event ;; CHECK-NEXT: (call $asyncify_stop_unwind) ;; CHECK-NEXT: (call $asyncify_start_rewind ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $work) ;; CHECK-NEXT: ) (func $second_event (call $asyncify_stop_unwind) (call $asyncify_start_rewind (i32.const 4)) (call $work) ) ;; a function that can't do a sleep ;; CHECK: (func $never_sleep ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: ) (func $never_sleep (call $stuff) (call $stuff) (call $stuff) ) ) ;; Calls to imports that will call into asyncify themselves. ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $none_=>_i32_i64 (func (result i32 i64))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (result i32))) (import "env" "import2" (func $import2 (result i32))) ;; CHECK: (import "env" "import3" (func $import3 (param i32))) (import "env" "import3" (func $import3 (param i32))) ;; CHECK: (import "env" "import-mv" (func $import-mv (result i32 i64))) (import "env" "import-mv" (func $import-mv (result i32 i64))) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-import2 (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2 (result i32) (local $temp i32) (local.set $temp (call $import2)) (return (local.get $temp)) ) ;; CHECK: (func $calls-import2-drop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-drop (drop (call $import2)) ) ;; CHECK: (func $calls-nothing ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-nothing (drop (i32.eqz (i32.const 17))) ) ;; CHECK: (func $many-locals (param $x i32) (result i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $z (f32 i64)) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $many-locals (param $x i32) (result i32) (local $y i32) (local $z (f32 i64)) (loop $l (local.set $x (i32.add (local.get $y) (i32.const 1)) ) (local.set $y (i32.div_s (local.get $x) (i32.const 3)) ) (br_if $l (local.get $y)) ) (call $import) (return (local.get $y)) ) ;; CHECK: (func $calls-import2-if (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-import2-if (param $x i32) (if (local.get $x) (call $import) ) ) ;; CHECK: (func $calls-import2-if-else (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) (call $import3 (i32.const 1)) (call $import3 (i32.const 2)) ) ) ;; CHECK: (func $calls-import2-if-else-oneside (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside (param $x i32) (result i32) (if (local.get $x) (return (i32.const 1)) (call $import3 (i32.const 2)) ) (return (i32.const 3)) ) ;; CHECK: (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) (if (local.get $x) (call $import3 (i32.const 1)) (return (i32.const 2)) ) (return (i32.const 3)) ) ;; CHECK: (func $calls-mv ;; CHECK-NEXT: (local $x (i32 i64)) ;; CHECK-NEXT: (local $1 (i32 i64)) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 (i32 i64)) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.load offset=4 align=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (call $import-mv) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store offset=4 align=4 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (tuple.extract 1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-mv (local $x (i32 i64)) (local.set $x (call $import-mv)) ) ;; CHECK: (func $calls-loop (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-loop (param $x i32) (loop $l (call $import3 (i32.const 1)) (local.set $x (i32.add (local.get $x) (i32.const 1)) ) (br_if $l (local.get $x) ) ) ) ;; CHECK: (func $calls-loop2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-loop2 (loop $l (br_if $l (call $import2) ) ) ) ;; CHECK: (func $calls-mix ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-mix (call $boring) (call $import) (call $boring) (call $import) ) ;; CHECK: (func $boring ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $boring) ;; CHECK: (func $calls-mix-deep ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring-deep) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import-deep) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-mix-deep (call $boring-deep) (call $import-deep) (call $boring) (call $import) ) ;; CHECK: (func $boring-deep ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) (func $boring-deep (call $boring) ) ;; CHECK: (func $import-deep ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $import-deep (call $import) ) ) ;; empty module, in particular with no memory ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) (module ) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 1) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast000066400000000000000000000375521423707623100315540ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --mod-asyncify-always-and-only-unwind -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (result i32))) (import "env" "import2" (func $import2 (result i32))) ;; CHECK: (import "env" "import3" (func $import3 (param i32))) (import "env" "import3" (func $import3 (param i32))) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-import2 (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2 (result i32) (local $temp i32) (local.set $temp (call $import2)) (return (local.get $temp)) ) ;; CHECK: (func $calls-import2-drop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-drop (drop (call $import2)) ) ;; CHECK: (func $calls-nothing ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-nothing (drop (i32.eqz (i32.const 17))) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast000066400000000000000000000105301423707623100320150ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --mod-asyncify-always-and-only-unwind -O -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) (import "env" "import2" (func $import2 (result i32))) (import "env" "import3" (func $import3 (param i32))) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "calls-import" (func $calls-import)) (export "calls-import" (func $calls-import)) ;; CHECK: (export "calls-import2" (func $calls-import)) (export "calls-import2" (func $calls-import)) ;; CHECK: (export "calls-import2-drop" (func $calls-import)) (export "calls-import2-drop" (func $calls-import)) ;; CHECK: (export "calls-nothing" (func $calls-import)) (export "calls-nothing" (func $calls-import)) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import (; has Stack IR ;) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) (func $calls-import2 (result i32) (local $temp i32) (local.set $temp (call $import2)) (return (local.get $temp)) ) (func $calls-import2-drop (drop (call $import2)) ) (func $calls-nothing (drop (i32.eqz (i32.const 17))) ) ) ;; CHECK: (func $asyncify_start_unwind (; has Stack IR ;) (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind (; has Stack IR ;) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (; has Stack IR ;) (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (; has Stack IR ;) (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_mod-asyncify-never-unwind.wast000066400000000000000000000407341423707623100276500ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --mod-asyncify-never-unwind -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (result i32))) (import "env" "import2" (func $import2 (result i32))) ;; CHECK: (import "env" "import3" (func $import3 (param i32))) (import "env" "import3" (func $import3 (param i32))) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-import2 (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2 (result i32) (local $temp i32) (local.set $temp (call $import2)) (return (local.get $temp)) ) ;; CHECK: (func $calls-import2-drop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-drop (drop (call $import2)) ) ;; CHECK: (func $calls-nothing ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-nothing (drop (i32.eqz (i32.const 17))) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast000066400000000000000000000115511423707623100301210ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --mod-asyncify-never-unwind -O -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) (import "env" "import2" (func $import2 (result i32))) (import "env" "import3" (func $import3 (param i32))) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "calls-import" (func $calls-import)) (export "calls-import" (func $calls-import)) ;; CHECK: (export "calls-import2" (func $calls-import)) (export "calls-import2" (func $calls-import)) ;; CHECK: (export "calls-import2-drop" (func $calls-import)) (export "calls-import2-drop" (func $calls-import)) ;; CHECK: (export "calls-nothing" (func $calls-import)) (export "calls-nothing" (func $calls-import)) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import (; has Stack IR ;) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) (func $calls-import2 (result i32) (local $temp i32) (local.set $temp (call $import2)) (return (local.get $temp)) ) (func $calls-import2-drop (drop (call $import2)) ) (func $calls-nothing (drop (i32.eqz (i32.const 17))) ) ) ;; CHECK: (func $asyncify_start_unwind (; has Stack IR ;) (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind (; has Stack IR ;) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (; has Stack IR ;) (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (; has Stack IR ;) (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_optimize-level=1.wast000066400000000000000000001454211423707623100257510ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --optimize-level=1 -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (result i32))) (import "env" "import2" (func $import2 (result i32))) ;; CHECK: (import "env" "import3" (func $import3 (param i32))) (import "env" "import3" (func $import3 (param i32))) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-import2 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2 (result i32) (local $temp i32) (local.set $temp (call $import2)) (return (local.get $temp)) ) ;; CHECK: (func $calls-import2-drop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-drop (drop (call $import2)) ) ;; CHECK: (func $calls-nothing ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-nothing (drop (i32.eqz (i32.const 17))) ) ;; CHECK: (func $many-locals (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $many-locals (param $x i32) (result i32) (local $y i32) (loop $l (local.set $x (i32.add (local.get $y) (i32.const 1)) ) (local.set $y (i32.div_s (local.get $x) (i32.const 3)) ) (br_if $l (local.get $y)) ) (call $import) (return (local.get $y)) ) ;; CHECK: (func $calls-import2-if (param $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if (param $x i32) (if (local.get $x) (call $import) ) ) ;; CHECK: (func $calls-import2-if-else (param $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) (call $import3 (i32.const 1)) (call $import3 (i32.const 2)) ) ) ;; CHECK: (func $calls-import2-if-else-oneside (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside (param $x i32) (result i32) (if (local.get $x) (return (i32.const 1)) (call $import3 (i32.const 2)) ) (return (i32.const 3)) ) ;; CHECK: (func $calls-import2-if-else-oneside2 (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) (if (local.get $x) (call $import3 (i32.const 1)) (return (i32.const 2)) ) (return (i32.const 3)) ) ;; CHECK: (func $calls-loop (param $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-loop (param $x i32) (loop $l (call $import3 (i32.const 1)) (local.set $x (i32.add (local.get $x) (i32.const 1)) ) (br_if $l (local.get $x) ) ) ) ;; CHECK: (func $calls-loop2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-loop2 (loop $l (br_if $l (call $import2) ) ) ) ;; CHECK: (func $calls-mix ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-mix (call $boring) (call $import) (call $boring) (call $import) ) ;; CHECK: (func $boring ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $boring) ;; CHECK: (func $calls-mix-deep ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring-deep) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import-deep) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-mix-deep (call $boring-deep) (call $import-deep) (call $boring) (call $import) ) ;; CHECK: (func $boring-deep ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) (func $boring-deep (call $boring) ) ;; CHECK: (func $import-deep ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $import-deep (call $import) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast000066400000000000000000000134541423707623100304340ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-addlist@foo -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $foo ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (block $__asyncify_unwind ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo ;; doesn't look like it needs instrumentation, but in add list (call $nothing) ) ;; CHECK: (func $bar ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: ) (func $bar ;; doesn't look like it needs instrumentation, and not in add list (call $nothing) ) ;; CHECK: (func $nothing ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nothing ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast000066400000000000000000000162261423707623100370750ustar00rootroot00000000000000binaryen-version_108/test/lit/passes;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-addlist@foo --pass-arg=asyncify-ignore-indirect -S -o - | filecheck %s (module ;; CHECK: (type $t (func)) (type $t (func)) (memory 1 2) (table 1 funcref) (elem (i32.const 0)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (table $0 1 funcref) ;; CHECK: (elem (i32.const 0)) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $foo ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call_indirect (type $t) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo ;; doesn't look like it needs instrumentation, but in add list (call $nothing) (call_indirect (type $t) (i32.const 0)) ) ;; CHECK: (func $bar ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (call_indirect (type $t) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar ;; doesn't look like it needs instrumentation, and not in add list (call $nothing) (call_indirect (type $t) (i32.const 0)) ) ;; CHECK: (func $nothing ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nothing ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast000066400000000000000000000167741423707623100361000ustar00rootroot00000000000000binaryen-version_108/test/lit/passes;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-asserts --pass-arg=asyncify-onlylist@waka -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $f (func)) (type $f (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (result i32))) (import "env" "import2" (func $import2 (result i32))) ;; CHECK: (import "env" "import3" (func $import3 (param i32))) (import "env" "import3" (func $import3 (param i32))) (table funcref (elem $calls-import2-drop $calls-import2-drop)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (table $0 2 2 funcref) ;; CHECK: (elem (i32.const 0) $calls-import2-drop $calls-import2-drop) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-import2-drop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-drop (drop (call $import2)) ) ;; CHECK: (func $returns (result i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $returns (result i32) (local $x i32) (local.set $x (call $import2)) (local.get $x) ) ;; CHECK: (func $calls-indirect (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call_indirect (type $f) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-indirect (param $x i32) (call_indirect (type $f) (local.get $x) ) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast000066400000000000000000000223431423707623100315160ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-blacklist@foo,bar -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $foo ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) (func $foo (call $import) ) ;; CHECK: (func $bar ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) (func $bar (call $import) ) ;; CHECK: (func $baz ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $baz (call $import) ) ;; CHECK: (func $other1 ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $other1 (call $foo) ) ;; CHECK: (func $other2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $baz) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $other2 (call $baz) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast000066400000000000000000000226101423707623100311540ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-ignore-imports -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $f (func)) (type $f (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (result i32))) (import "env" "import2" (func $import2 (result i32))) ;; CHECK: (import "env" "import3" (func $import3 (param i32))) (import "env" "import3" (func $import3 (param i32))) (table funcref (elem $calls-import2-drop $calls-import2-drop)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (table $0 2 2 funcref) ;; CHECK: (elem (i32.const 0) $calls-import2-drop $calls-import2-drop) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-import2-drop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-drop (drop (call $import2)) ) ;; CHECK: (func $calls-import2-if-else (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) (call $import3 (i32.const 1)) (call $import3 (i32.const 2)) ) ) ;; CHECK: (func $calls-indirect (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call_indirect (type $f) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-indirect (param $x i32) (call_indirect (type $f) (local.get $x) ) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast000066400000000000000000000446441423707623100312730ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-ignore-indirect -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $f (func)) (type $f (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (result i32))) (import "env" "import2" (func $import2 (result i32))) ;; CHECK: (import "env" "import3" (func $import3 (param i32))) (import "env" "import3" (func $import3 (param i32))) (table funcref (elem $calls-import2-drop $calls-import2-drop)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (table $0 2 2 funcref) ;; CHECK: (elem (i32.const 0) $calls-import2-drop $calls-import2-drop) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-import2-drop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-drop (drop (call $import2)) ) ;; CHECK: (func $calls-import2-if-else (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) (call $import3 (i32.const 1)) (call $import3 (i32.const 2)) ) ) ;; CHECK: (func $calls-indirect (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_indirect (type $f) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-indirect (param $x i32) (call_indirect (type $f) (local.get $x) ) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast000066400000000000000000001657231423707623100342120ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-imports@env.import,env.import2 -S -o - | filecheck %s ;; Pre-existing imports that the pass turns into the implementations. (module (memory 1 2) (import "asyncify" "start_unwind" (func $asyncify_start_unwind (param i32))) (import "asyncify" "start_rewind" (func $asyncify_start_rewind (param i32))) (import "asyncify" "stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (global $sleeping (mut i32) (i32.const 0)) (global $sleeping (mut i32) (i32.const 0)) ;; do a sleep operation: start a sleep if running, or resume after a sleep ;; if we just rewound. ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $do_sleep ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (global.get $sleeping) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (global.set $sleeping ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $asyncify_start_unwind ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (global.set $sleeping ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $asyncify_stop_rewind) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $do_sleep (if (i32.eqz (global.get $sleeping)) (block (global.set $sleeping (i32.const 1)) ;; we should set up the data at address 4 around here (call $asyncify_start_unwind (i32.const 4)) ) (block (global.set $sleeping (i32.const 0)) (call $asyncify_stop_rewind) ) ) ) ;; a function that does some work and has a sleep (async pause/resume) in the middle ;; CHECK: (func $work ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $do_sleep) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $work (call $stuff) ;; do some work (call $do_sleep) ;; take a break (call $stuff) ;; do some more work ) ;; CHECK: (func $stuff ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $stuff) ;; the first event called from the main event loop: just call into $work ;; CHECK: (func $first_event ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $work) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $first_event (call $work) ;; work will sleep, so we exit through here while it is paused ) ;; the second event called from the main event loop: to resume $work, ;; initiate a rewind, and then do the call to start things back up ;; CHECK: (func $second_event ;; CHECK-NEXT: (call $asyncify_start_rewind ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $work) ;; CHECK-NEXT: ) (func $second_event (call $asyncify_start_rewind (i32.const 4)) (call $work) ) ;; a function that can't do a sleep ;; CHECK: (func $never_sleep ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: (call $stuff) ;; CHECK-NEXT: ) (func $never_sleep (call $stuff) (call $stuff) (call $stuff) ) ) ;; Calls to imports that will call into asyncify themselves. ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (import "env" "import2" (func $import2 (result i32))) (import "env" "import2" (func $import2 (result i32))) ;; CHECK: (import "env" "import3" (func $import3 (param i32))) (import "env" "import3" (func $import3 (param i32))) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-import2 (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $calls-import2 (result i32) (local $temp i32) (local.set $temp (call $import2)) (return (local.get $temp)) ) ;; CHECK: (func $calls-import2-drop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-drop (drop (call $import2)) ) ;; CHECK: (func $calls-nothing ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-nothing (drop (i32.eqz (i32.const 17))) ) ;; CHECK: (func $many-locals (param $x i32) (result i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $many-locals (param $x i32) (result i32) (local $y i32) (loop $l (local.set $x (i32.add (local.get $y) (i32.const 1)) ) (local.set $y (i32.div_s (local.get $x) (i32.const 3)) ) (br_if $l (local.get $y)) ) (call $import) (return (local.get $y)) ) ;; CHECK: (func $calls-import2-if (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-import2-if (param $x i32) (if (local.get $x) (call $import) ) ) ;; CHECK: (func $calls-import2-if-else (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) (call $import3 (i32.const 1)) (call $import3 (i32.const 2)) ) ) ;; CHECK: (func $calls-import2-if-else-oneside (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside (param $x i32) (result i32) (if (local.get $x) (return (i32.const 1)) (call $import3 (i32.const 2)) ) (return (i32.const 3)) ) ;; CHECK: (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) (if (local.get $x) (call $import3 (i32.const 1)) (return (i32.const 2)) ) (return (i32.const 3)) ) ;; CHECK: (func $calls-loop (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-loop (param $x i32) (loop $l (call $import3 (i32.const 1)) (local.set $x (i32.add (local.get $x) (i32.const 1)) ) (br_if $l (local.get $x) ) ) ) ;; CHECK: (func $calls-loop2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-loop2 (loop $l (br_if $l (call $import2) ) ) ) ;; CHECK: (func $calls-mix ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-mix (call $boring) (call $import) (call $boring) (call $import) ) ;; CHECK: (func $boring ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $boring) ;; CHECK: (func $calls-mix-deep ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring-deep) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import-deep) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-mix-deep (call $boring-deep) (call $import-deep) (call $boring) (call $import) ) ;; CHECK: (func $boring-deep ;; CHECK-NEXT: (call $boring) ;; CHECK-NEXT: ) (func $boring-deep (call $boring) ) ;; CHECK: (func $import-deep ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $import-deep (call $import) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast000066400000000000000000000224631423707623100314260ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-onlylist@foo,bar -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $foo ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (call $import) ) ;; CHECK: (func $bar ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $bar (call $import) ) ;; CHECK: (func $baz ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) (func $baz (call $import) ) ;; CHECK: (func $other1 ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $other1 (call $foo) ;; even though we call foo, we are not in the only list, so do not instrument us ) ;; CHECK: (func $other2 ;; CHECK-NEXT: (call $baz) ;; CHECK-NEXT: ) (func $other2 (call $baz) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_pass-arg=asyncify-side-module.wast000066400000000000000000000063321423707623100304100ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --enable-mutable-globals --asyncify --pass-arg=asyncify-relocatable -S -o - | filecheck %s (module ) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "__asyncify_state" (global $__asyncify_state (mut i32))) ;; CHECK: (import "env" "__asyncify_data" (global $__asyncify_data (mut i32))) ;; CHECK: (memory $0 1 1) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast000066400000000000000000000276251423707623100276560ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-verbose -S -o - | filecheck %s (module (memory 1 2) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "import" (func $import)) (import "env" "import" (func $import)) ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0)) ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 2) ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state)) ;; CHECK: (func $calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-import (call $import) ) ;; CHECK: (func $calls-calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $calls-import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-calls-import (call $calls-import) ) ;; CHECK: (func $calls-calls-calls-import ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $calls-calls-import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__asyncify_unwind ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $calls-calls-calls-import (call $calls-calls-import) ) ;; CHECK: (func $nothing ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nothing (nop) ) ) ;; CHECK: (func $asyncify_start_unwind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_unwind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_start_rewind (param $0 i32) ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__asyncify_data ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_stop_rewind ;; CHECK-NEXT: (global.set $__asyncify_state ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $asyncify_get_state (result i32) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/avoid-reinterprets.wast000066400000000000000000000157221423707623100245470ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --avoid-reinterprets -S -o - | filecheck %s (module (memory 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_f32 (func (result f32))) ;; CHECK: (memory $0 1) ;; CHECK: (func $simple ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $simple (drop (f32.reinterpret_i32 (i32.load (i32.const 1024)))) (drop (i32.reinterpret_f32 (f32.load (i32.const 1024)))) (drop (f64.reinterpret_i64 (i64.load (i32.const 1024)))) (drop (i64.reinterpret_f64 (f64.load (i32.const 1024)))) ) ;; CHECK: (func $one ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $one (local $x i32) (local.set $x (i32.load (i32.const 1024))) (drop (f32.reinterpret_i32 (local.get $x))) ) ;; CHECK: (func $one-b ;; CHECK-NEXT: (local $x f32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result f32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $one-b (local $x f32) (local.set $x (f32.load (i32.const 1024))) (drop (i32.reinterpret_f32 (local.get $x))) ) ;; CHECK: (func $both ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $both (local $x i32) (local.set $x (i32.load (i32.const 1024))) (drop (f32.reinterpret_i32 (local.get $x))) (drop (f32.reinterpret_i32 (local.get $x))) ) ;; CHECK: (func $half ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $half (local $x i32) (local.set $x (i32.load (i32.const 1024))) (drop (local.get $x)) (drop (f32.reinterpret_i32 (local.get $x))) ) ;; CHECK: (func $copy ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $copy (local $x i32) (local $y i32) (local.set $x (i32.load (i32.const 1024))) (local.set $y (local.get $x)) (drop (f32.reinterpret_i32 (local.get $y))) ) ;; CHECK: (func $partial1 (result f32) ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $partial1 (result f32) (f32.reinterpret_i32 (i32.load16_u (i32.const 3) ) ) ) ;; CHECK: (func $partial2 (result f32) ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $partial2 (result f32) (f32.reinterpret_i32 (i32.load8_u (i32.const 3) ) ) ) ;; CHECK: (func $nofallthrough ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nofallthrough (local $x i32) (local.set $x (i32.load (i32.const 1024) ) ) (drop (f32.reinterpret_i32 (block (result i32) (nop) ;; this would be removed by other opts, but in general, we can't ;; just look at the fallthrough, as we can't just remove code here (local.get $x) ) ) ) ) ) binaryen-version_108/test/lit/passes/avoid-reinterprets64.wast000066400000000000000000000157541423707623100247260ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --avoid-reinterprets --enable-memory64 -S -o - | filecheck %s (module (memory i64 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_f32 (func (result f32))) ;; CHECK: (memory $0 i64 1) ;; CHECK: (func $simple ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $simple (drop (f32.reinterpret_i32 (i32.load (i64.const 1024)))) (drop (i32.reinterpret_f32 (f32.load (i64.const 1024)))) (drop (f64.reinterpret_i64 (i64.load (i64.const 1024)))) (drop (i64.reinterpret_f64 (f64.load (i64.const 1024)))) ) ;; CHECK: (func $one ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $one (local $x i32) (local.set $x (i32.load (i64.const 1024))) (drop (f32.reinterpret_i32 (local.get $x))) ) ;; CHECK: (func $one-b ;; CHECK-NEXT: (local $x f32) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result f32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $one-b (local $x f32) (local.set $x (f32.load (i64.const 1024))) (drop (i32.reinterpret_f32 (local.get $x))) ) ;; CHECK: (func $both ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $both (local $x i32) (local.set $x (i32.load (i64.const 1024))) (drop (f32.reinterpret_i32 (local.get $x))) (drop (f32.reinterpret_i32 (local.get $x))) ) ;; CHECK: (func $half ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $half (local $x i32) (local.set $x (i32.load (i64.const 1024))) (drop (local.get $x)) (drop (f32.reinterpret_i32 (local.get $x))) ) ;; CHECK: (func $copy ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $copy (local $x i32) (local $y i32) (local.set $x (i32.load (i64.const 1024))) (local.set $y (local.get $x)) (drop (f32.reinterpret_i32 (local.get $y))) ) ;; CHECK: (func $partial1 (result f32) ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $partial1 (result f32) (f32.reinterpret_i32 (i32.load16_u (i64.const 3) ) ) ) ;; CHECK: (func $partial2 (result f32) ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $partial2 (result f32) (f32.reinterpret_i32 (i32.load8_u (i64.const 3) ) ) ) ;; CHECK: (func $nofallthrough ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i64.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nofallthrough (local $x i32) (local.set $x (i32.load (i64.const 1024) ) ) (drop (f32.reinterpret_i32 (block (result i32) (nop) ;; this would be removed by other opts, but in general, we can't ;; just look at the fallthrough, as we can't just remove code here (local.get $x) ) ) ) ) ) binaryen-version_108/test/lit/passes/catch-pop-fixup-eh.wast000066400000000000000000000250651423707623100243230ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; We run wasm-opt with --no-validation because functions in this file contain ;; 'pop's in invalid positions and the objective of this test is to fix them. ;; But wasm-opt runs validation after reading functions, so we need to disable ;; it to proceed. ;; RUN: wasm-opt %s --catch-pop-fixup --no-validation -all -S -o - | filecheck %s (module ;; CHECK: (type $struct.A (struct (field i32))) ;; CHECK: (tag $e-i32 (param i32)) (tag $e-i32 (param i32)) ;; CHECK: (tag $e-i32-f32 (param i32 f32)) (tag $e-i32-f32 (param i32 f32)) (type $struct.A (struct i32)) ;; CHECK: (tag $e-struct.A (param (ref $struct.A))) (tag $e-struct.A (param (ref $struct.A))) ;; CHECK: (func $pop-within-block1 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (throw $e-i32 ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-block1 (try (do) (catch $e-i32 (throw $e-i32 ;; The pop is within a block, so it will be handled (block (result i32) (pop i32) ) ) ) ) ) ;; CHECK: (func $pop-within-block2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (throw $e-i32 ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (block $block0 (result i32) ;; CHECK-NEXT: (block $block1 (result i32) ;; CHECK-NEXT: (block $block2 (result i32) ;; CHECK-NEXT: (block $block3 (result i32) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-block2 (try (do) (catch $e-i32 (throw $e-i32 ;; More nesting of blocks can be handled too (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (pop i32) ) ) ) ) ) ) ) ) ) ;; CHECK: (func $pop-within-block3 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $l0 (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $l0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-block3 (result i32) (try (result i32) (do (i32.const 0) ) (catch $e-i32 ;; This block cannot be deleted when written back because there is a ;; branch targeting this block. So the pop inside will be handled. (block $l0 (result i32) (drop (pop i32) ) (br $l0 (i32.const 0) ) ) ) ) ) ;; CHECK: (func $helper ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper) ;; CHECK: (func $pop-within-implicit-block1 ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-implicit-block1 (try (do) (catch $e-i32 ;; Because this catch contains multiple instructions, an implicit ;; block will be created within the catch when parsed. But that block ;; will be deleted when written back, so this pop is not considered ;; nested in a block. (drop (pop i32) ) (call $helper) ) ) ) ;; CHECK: (func $pop-within-implicit-block2 ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-implicit-block2 (try (do) (catch $e-i32 ;; In this case we explicitly wrap the pop with a 'block', but this ;; block doesn't have any targeting branches, it will be also deleted ;; when written back to binary. So this pop is fine and not considered ;; nested in a block. (block (drop (pop i32) ) (call $helper) ) ) ) ) ;; CHECK: (func $pop-within-try (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (try $try4 (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-try (result i32) (try (result i32) (do (i32.const 0) ) (catch $e-i32 ;; The pop is wihtin a try, so it will be handled (try (result i32) (do (pop i32) ) (catch_all (i32.const 0) ) ) ) ) ) ;; CHECK: (func $pop-within-if-condition (result i32) ;; CHECK-NEXT: (try $try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-if-condition (result i32) (try (result i32) (do (i32.const 0) ) (catch $e-i32 ;; The pop is wihtin an if condition, which is considered not nested. ;; This will be not handled. (if (result i32) (pop i32) (then (i32.const 1)) (else (i32.const 0)) ) ) ) ) ;; CHECK: (func $pop-within-block-within-if-condition ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $l0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-block-within-if-condition (try (do) (catch $e-i32 ;; This block cannot be removed because there is a branch targeting ;; this. This pop should be handled because the whole 'if' is nested ;; within the block. (block $l0 (drop (if (result i32) (pop i32) (then (i32.const 1)) (else (i32.const 0)) ) ) (br $l0) ) ) ) ) ;; CHECK: (func $pop-tuple-within-block ;; CHECK-NEXT: (local $x (i32 f32)) ;; CHECK-NEXT: (local $1 (i32 f32)) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32-f32 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (pop i32 f32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (throw $e-i32 ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-tuple-within-block (local $x (i32 f32)) (try (do) (catch $e-i32-f32 (throw $e-i32 ;; This tests a pop taking a tuple type. (block (result i32) (local.set $x (pop i32 f32)) (i32.const 0) ) ) ) ) ) ;; CHECK: (func $pop-non-defaultable-type-within-block ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-struct.A ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop (ref $struct.A)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (throw $e-struct.A ;; CHECK-NEXT: (block $block (result (ref $struct.A)) ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-non-defaultable-type-within-block (try (do) (catch $e-struct.A (throw $e-struct.A ;; The pop is within a block, so it will be handled. But because this ;; pop is of non-defaultable type, we have to fix it up using ;; TypeUpdating::handleNonDefaultableLocals: the new local created is ;; converted to (ref null $struct.A) type and we read the local using ;; 'ref.as_non_null'. (block (result (ref $struct.A)) (pop (ref $struct.A)) ) ) ) ) ) ) binaryen-version_108/test/lit/passes/cfp.wast000066400000000000000000001633241423707623100214730ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --nominal --remove-unused-names --cfp -all -S -o - | filecheck %s ;; (remove-unused-names is added to test fallthrough values without a block ;; name getting in the way) (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype (field i32) data)) (type $struct (struct i32)) ;; CHECK: (func $impossible-get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $impossible-get (drop ;; This type is never created, so a get is impossible, and we will trap ;; anyhow. So we can turn this into an unreachable (plus a drop of the ;; reference). (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field i64) data)) (type $struct (struct i64)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default_with_rtt $struct ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test ;; The only place this type is created is with a default value, and so we ;; can optimize the later get into a constant (plus a drop of the ref). ;; ;; (Note that the allocated reference is dropped here, so it is not actually ;; used anywhere, but this pass does not attempt to trace the paths of ;; references escaping and being stored etc. - it just thinks at the type ;; level.) (drop (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field f32) data)) (type $struct (struct f32)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test ;; The only place this type is created is with a constant value, and so we ;; can optimize the later get into a constant (plus a drop of the ref). (drop (struct.new_with_rtt $struct (f32.const 42) (rtt.canon $struct) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field f32) data)) (type $struct (struct f32)) ;; CHECK: (type $f32_=>_none (func_subtype (param f32) func)) ;; CHECK: (func $test (type $f32_=>_none) (param $f f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (param $f f32) ;; The value given is not a constant, and so we cannot optimize. (drop (struct.new_with_rtt $struct (local.get $f) (rtt.canon $struct) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Create in one function, get in another. The 10 should be forwarded to the ;; get. (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype (field i32) data)) (type $struct (struct i32)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.const 10) (rtt.canon $struct) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; As before, but with the order of functions reversed to check for any ordering ;; issues. (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype (field i32) data)) (type $struct (struct i32)) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.const 10) (rtt.canon $struct) ) ) ) ) ;; Different values assigned in the same function, in different struct.news, ;; so we cannot optimize the struct.get away. (module ;; CHECK: (type $struct (struct_subtype (field f32) data)) (type $struct (struct f32)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (f32.const 1337) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new_with_rtt $struct (f32.const 42) (rtt.canon $struct) ) ) (drop (struct.new_with_rtt $struct (f32.const 1337) (rtt.canon $struct) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Different values assigned in different functions, and one is a struct.set. (module ;; CHECK: (type $struct (struct_subtype (field (mut f32)) data)) (type $struct (struct (mut f32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (f32.const 42) (rtt.canon $struct) ) ) ) ;; CHECK: (func $set (type $none_=>_none) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (f32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $set (struct.set $struct 0 (ref.null $struct) (f32.const 1337) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; As the last testcase, but the values happen to coincide, so we can optimize ;; the get into a constant. (module ;; CHECK: (type $struct (struct_subtype (field (mut f32)) data)) (type $struct (struct (mut f32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (f32.const 42) (rtt.canon $struct) ) ) ) ;; CHECK: (func $set (type $none_=>_none) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $set (struct.set $struct 0 (ref.null $struct) (f32.const 42) ;; The last testcase had 1337 here. ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Check that we look into the fallthrough value that is assigned. (module ;; CHECK: (type $struct (struct_subtype (field (mut f32)) data)) (type $struct (struct (mut f32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $i32_=>_none (func_subtype (param i32) func)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (block (result f32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct ;; Fall though a 42 via a block. (block (result f32) (nop) (f32.const 42) ) (rtt.canon $struct) ) ) ) ;; CHECK: (func $set (type $i32_=>_none) (param $x i32) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (if (result f32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $set (param $x i32) (struct.set $struct 0 (ref.null $struct) ;; Fall though a 42 via an if. (if (result f32) (local.get $x) (unreachable) (f32.const 42) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Test a function reference instead of a number. (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype (field funcref) data)) (type $struct (struct funcref)) ;; CHECK: (elem declare func $test) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (ref.func $test) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $none_=>_none)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.func $test) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new_with_rtt $struct (ref.func $test) (rtt.canon $struct) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Test for unreachable creations, sets, and gets. (module (type $struct (struct (mut i32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new_with_rtt $struct (i32.const 10) (unreachable) ) ) (drop (struct.get $struct 0 (unreachable) ) ) (struct.set $struct 0 (unreachable) (i32.const 20) ) ) ) ;; Subtyping: Create a supertype and get a subtype. As we never create a ;; subtype, the get must trap anyhow (the reference it receives can ;; only be null in this closed world). (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype (field i32) data)) (type $struct (struct i32)) ;; CHECK: (type $substruct (struct_subtype (field i32) $struct)) (type $substruct (struct_subtype i32 $struct)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.const 10) (rtt.canon $struct) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $substruct 0 (ref.null $substruct) ) ) ) ) ;; As above, but in addition to a new of $struct also add a set. The set could ;; in principle be relevant for the get as far as this pass knows, and so we ;; will optimize the result to the only possible value. (In practice, though, ;; it will trap anyhow.) (module ;; CHECK: (type $struct (struct_subtype (field (mut i32)) data)) (type $struct (struct (mut i32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $substruct (struct_subtype (field (mut i32)) $struct)) (type $substruct (struct_subtype (mut i32) $struct)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.const 10) (rtt.canon $struct) ) ) (struct.set $struct 0 (ref.null $struct) (i32.const 10) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $substruct 0 (ref.null $substruct) ) ) ) ) ;; Subtyping: Create a subtype and get a supertype. The get must receive a ;; reference to the subtype (we never create a supertype) and so we ;; can optimize. (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype (field i32) data)) ;; CHECK: (type $substruct (struct_subtype (field i32) (field f64) $struct)) (type $substruct (struct_subtype i32 f64 $struct)) (type $struct (struct i32)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $substruct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (rtt.canon $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $substruct (i32.const 10) (f64.const 3.14159) (rtt.canon $substruct) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Subtyping: Create both a subtype and a supertype, with identical constants ;; for the shared field, and get the supertype. (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype (field i32) data)) (type $struct (struct i32)) ;; CHECK: (type $substruct (struct_subtype (field i32) (field f64) $struct)) (type $substruct (struct_subtype i32 f64 $struct)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $substruct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (rtt.canon $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.const 10) (rtt.canon $struct) ) ) (drop (struct.new_with_rtt $substruct (i32.const 10) (f64.const 3.14159) (rtt.canon $substruct) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Subtyping: Create both a subtype and a supertype, with different constants ;; for the shared field, preventing optimization, as a get of the ;; supertype may receive an instance of the subtype. (module ;; CHECK: (type $struct (struct_subtype (field i32) data)) (type $struct (struct i32)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $substruct (struct_subtype (field i32) (field f64) $struct)) (type $substruct (struct_subtype i32 f64 $struct)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $substruct ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (rtt.canon $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.const 10) (rtt.canon $struct) ) ) (drop (struct.new_with_rtt $substruct (i32.const 20) (f64.const 3.14159) (rtt.canon $substruct) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Subtyping: Create both a subtype and a supertype, with different constants ;; for the shared field, but get from the subtype. The field is ;; shared between the types, but we only create the substruct with ;; one value, so we can optimize. (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype (field i32) data)) ;; CHECK: (type $substruct (struct_subtype (field i32) (field f64) $struct)) (type $substruct (struct_subtype i32 f64 $struct)) (type $struct (struct i32)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $substruct ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (rtt.canon $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.const 10) (rtt.canon $struct) ) ) (drop (struct.new_with_rtt $substruct (i32.const 20) (f64.const 3.14159) (rtt.canon $substruct) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $substruct 0 (ref.null $substruct) ) ) ) ) ;; As above, but add a set of $struct. The set prevents the optimization. (module ;; CHECK: (type $struct (struct_subtype (field (mut i32)) data)) (type $struct (struct (mut i32))) ;; CHECK: (type $substruct (struct_subtype (field (mut i32)) (field f64) $struct)) (type $substruct (struct_subtype (mut i32) f64 $struct)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $substruct ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (rtt.canon $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.const 10) (rtt.canon $struct) ) ) (struct.set $struct 0 (ref.null $struct) (i32.const 10) ) (drop (struct.new_with_rtt $substruct (i32.const 20) (f64.const 3.14159) (rtt.canon $substruct) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $substruct 0 ;; CHECK-NEXT: (ref.null $substruct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $substruct 0 (ref.null $substruct) ) ) ) ) ;; Multi-level subtyping, check that we propagate not just to the immediate ;; supertype but all the way as needed. (module ;; CHECK: (type $struct1 (struct_subtype (field i32) data)) ;; CHECK: (type $struct2 (struct_subtype (field i32) (field f64) $struct1)) ;; CHECK: (type $struct3 (struct_subtype (field i32) (field f64) (field anyref) $struct2)) (type $struct3 (struct_subtype i32 f64 anyref $struct2)) (type $struct2 (struct_subtype i32 f64 $struct1)) (type $struct1 (struct i32)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct3 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: (rtt.canon $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct3 (i32.const 20) (f64.const 3.14159) (ref.null any) (rtt.canon $struct3) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get ;; Get field 0 from the $struct1. This can be optimized to a constant ;; since we only ever created an instance of struct3 with a constant there. (drop (struct.get $struct1 0 (ref.null $struct1) ) ) ;; Get both fields of $struct2. (drop (struct.get $struct2 0 (ref.null $struct2) ) ) (drop (struct.get $struct2 1 (ref.null $struct2) ) ) ;; Get all 3 fields of $struct3 (drop (struct.get $struct3 0 (ref.null $struct3) ) ) (drop (struct.get $struct3 1 (ref.null $struct3) ) ) (drop (struct.get $struct3 2 (ref.null $struct3) ) ) ) ) ;; Multi-level subtyping with conflicts. The even-numbered fields will get ;; different values in the sub-most type. Create the top and bottom types, but ;; not the middle one. (module ;; CHECK: (type $struct1 (struct_subtype (field i32) (field i32) data)) ;; CHECK: (type $struct2 (struct_subtype (field i32) (field i32) (field f64) (field f64) $struct1)) ;; CHECK: (type $struct3 (struct_subtype (field i32) (field i32) (field f64) (field f64) (field anyref) (field anyref) $struct2)) (type $struct3 (struct_subtype i32 i32 f64 f64 anyref anyref $struct2)) (type $struct1 (struct i32 i32)) (type $struct2 (struct_subtype i32 i32 f64 f64 $struct1)) ;; CHECK: (type $anyref_=>_none (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $create (type $anyref_=>_none) (param $any anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct1 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (rtt.canon $struct1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct3 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 999) ;; CHECK-NEXT: (f64.const 2.71828) ;; CHECK-NEXT: (f64.const 9.9999999) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: (local.get $any) ;; CHECK-NEXT: (rtt.canon $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (param $any anyref) (drop (struct.new_with_rtt $struct1 (i32.const 10) (i32.const 20) (rtt.canon $struct1) ) ) (drop (struct.new_with_rtt $struct3 (i32.const 10) (i32.const 999) ;; use a different value here (f64.const 2.71828) (f64.const 9.9999999) (ref.null any) (local.get $any) ;; use a non-constant value here, which can never be ;; optimized. (rtt.canon $struct3) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct1 1 ;; CHECK-NEXT: (ref.null $struct1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 2.71828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 9.9999999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 2.71828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 9.9999999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct3 5 ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get ;; Get all the fields of all the structs. (drop (struct.get $struct1 0 (ref.null $struct1) ) ) (drop (struct.get $struct1 1 (ref.null $struct1) ) ) (drop (struct.get $struct2 0 (ref.null $struct2) ) ) (drop (struct.get $struct2 1 (ref.null $struct2) ) ) (drop (struct.get $struct2 2 (ref.null $struct2) ) ) (drop (struct.get $struct2 3 (ref.null $struct2) ) ) (drop (struct.get $struct3 0 (ref.null $struct3) ) ) (drop (struct.get $struct3 1 (ref.null $struct3) ) ) (drop (struct.get $struct3 2 (ref.null $struct3) ) ) (drop (struct.get $struct3 3 (ref.null $struct3) ) ) (drop (struct.get $struct3 4 (ref.null $struct3) ) ) (drop (struct.get $struct3 5 (ref.null $struct3) ) ) ) ) ;; Multi-level subtyping with a different value in the middle of the chain. We ;; can only optimize $struct3. (module ;; CHECK: (type $struct1 (struct_subtype (field (mut i32)) data)) (type $struct1 (struct (mut i32))) ;; CHECK: (type $struct2 (struct_subtype (field (mut i32)) (field f64) $struct1)) (type $struct2 (struct_subtype (mut i32) f64 $struct1)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct3 (struct_subtype (field (mut i32)) (field f64) (field anyref) $struct2)) (type $struct3 (struct_subtype (mut i32) f64 anyref $struct2)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct1 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct2 ;; CHECK-NEXT: (i32.const 9999) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (rtt.canon $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct3 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: (rtt.canon $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct1 (i32.const 10) (rtt.canon $struct1) ) ) (drop (struct.new_with_rtt $struct2 (i32.const 9999) ;; use a different value here (f64.const 0) (rtt.canon $struct2) ) ) (drop (struct.new_with_rtt $struct3 (i32.const 10) (f64.const 0) (ref.null any) (rtt.canon $struct3) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct1 0 ;; CHECK-NEXT: (ref.null $struct1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct2 0 ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get ;; Get field 0 in all the types. (drop (struct.get $struct1 0 (ref.null $struct1) ) ) (drop (struct.get $struct2 0 (ref.null $struct2) ) ) (drop (struct.get $struct3 0 (ref.null $struct3) ) ) ) ) ;; As above, but add not just a new of the middle class with a different value ;; but also a set. That prevents all optimizations. (module ;; CHECK: (type $struct1 (struct_subtype (field (mut i32)) data)) ;; CHECK: (type $struct2 (struct_subtype (field (mut i32)) (field f64) $struct1)) (type $struct2 (struct_subtype (mut i32) f64 $struct1)) (type $struct1 (struct (mut i32))) ;; CHECK: (type $struct3 (struct_subtype (field (mut i32)) (field f64) (field anyref) $struct2)) (type $struct3 (struct_subtype (mut i32) f64 anyref $struct2)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct1 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $struct1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct2 ;; CHECK-NEXT: (i32.const 9999) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (rtt.canon $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct2 0 ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: (i32.const 9999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct3 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: (rtt.canon $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct1 (i32.const 10) (rtt.canon $struct1) ) ) (drop (struct.new_with_rtt $struct2 (i32.const 9999) ;; use a different value here (f64.const 0) (rtt.canon $struct2) ) ) (struct.set $struct2 0 (ref.null $struct2) (i32.const 9999) ;; use a different value here (f64.const 0) ) (drop (struct.new_with_rtt $struct3 (i32.const 10) (f64.const 0) (ref.null any) (rtt.canon $struct3) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct1 0 ;; CHECK-NEXT: (ref.null $struct1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct2 0 ;; CHECK-NEXT: (ref.null $struct2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct3 0 ;; CHECK-NEXT: (ref.null $struct3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get ;; Get field 0 in all the types. (drop (struct.get $struct1 0 (ref.null $struct1) ) ) (drop (struct.get $struct2 0 (ref.null $struct2) ) ) (drop (struct.get $struct3 0 (ref.null $struct3) ) ) ) ) ;; Test for a struct with multiple fields, some of which are constant and hence ;; optimizable, and some not. Also test that some have the same type. (module ;; CHECK: (type $struct (struct_subtype (field i32) (field f64) (field i32) (field f64) (field i32) data)) (type $struct (struct i32 f64 i32 f64 i32)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (f64.const 2.71828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $struct (i32.eqz (i32.const 10)) ;; not a constant (as far as this pass knows) (f64.const 3.14159) (i32.const 20) (f64.abs (f64.const 2.71828)) ;; not a constant (i32.const 30) (rtt.canon $struct) ) ) ) ;; CHECK: (func $get (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 3 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (drop (struct.get $struct 0 (ref.null $struct) ) ) (drop (struct.get $struct 1 (ref.null $struct) ) ) (drop (struct.get $struct 2 (ref.null $struct) ) ) (drop (struct.get $struct 3 (ref.null $struct) ) ) (drop (struct.get $struct 4 (ref.null $struct) ) ) ;; Also test for multiple gets of the same field. (drop (struct.get $struct 4 (ref.null $struct) ) ) ) ) ;; Never create A, but have a set to its field. A subtype B has no creates nor ;; sets, and the final subtype C has a create and a get. The set to A should ;; apply to it, preventing optimization. (module ;; CHECK: (type $A (struct_subtype (field (mut i32)) data)) ;; CHECK: (type $B (struct_subtype (field (mut i32)) $A)) ;; CHECK: (type $C (struct_subtype (field (mut i32)) $B)) (type $C (struct_subtype (mut i32) $B)) (type $A (struct (mut i32))) (type $B (struct_subtype (mut i32) $A)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $ref|$A|_=>_none (func_subtype (param (ref $A)) func)) ;; CHECK: (type $ref|$C|_=>_none (func_subtype (param (ref $C)) func)) ;; CHECK: (func $create (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $C ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (rtt.canon $C) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $create (drop (struct.new_with_rtt $C (i32.const 10) (rtt.canon $C) ) ) ) ;; CHECK: (func $set (type $ref|$A|_=>_none) (param $a (ref $A)) ;; CHECK-NEXT: (struct.set $A 0 ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $set (param $a (ref $A)) (struct.set $A 0 (local.get $a) (i32.const 20) ) ) ;; CHECK: (func $get (type $ref|$C|_=>_none) (param $c (ref $C)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $C 0 ;; CHECK-NEXT: (local.get $c) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $get (param $c (ref $C)) (drop (struct.get $C 0 (local.get $c) ) ) ) ) ;; Copies of a field to itself can be ignored. As a result, we can optimize both ;; of the gets here. (module ;; CHECK: (type $struct (struct_subtype (field (mut i32)) data)) (type $struct (struct (mut i32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default_with_rtt $struct ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ;; This copy does not actually introduce any new possible values, and so it ;; remains true that the only possible value is the default. (struct.set $struct 0 (ref.null $struct) (struct.get $struct 0 (ref.null $struct) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) ;; Test of a near-copy, of a similar looking field (same index, and same field ;; type) but in a different struct. (module ;; CHECK: (type $struct (struct_subtype (field (mut f32)) (field (mut i32)) data)) (type $struct (struct (mut f32) (mut i32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $other (struct_subtype (field (mut f64)) (field (mut i32)) data)) (type $other (struct (mut f64) (mut i32))) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default_with_rtt $struct ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 1 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $other) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 1 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ;; As this is not a copy, we cannot optimize struct.1's get lower down. (struct.set $struct 1 (ref.null $struct) (struct.get $other 1 (ref.null $other) ) ) (drop (struct.get $struct 1 (ref.null $struct) ) ) ) ) ;; Test of a near-copy, of a different index. (module ;; CHECK: (type $struct (struct_subtype (field (mut i32)) (field (mut i32)) data)) (type $struct (struct (mut i32) (mut i32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default_with_rtt $struct ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ;; As this is not a copy, we cannot optimize struct.0's get lower down. (struct.set $struct 0 (ref.null $struct) (struct.get $struct 1 (ref.null $struct) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field i32) data)) (type $struct (struct i32)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $global i32 (i32.const 42)) (global $global i32 (i32.const 42)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test ;; An immutable global is the only thing written to this field, so we can ;; propagate the value to the struct.get and replace it with a global.get. (drop (struct.new $struct (global.get $global) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field i32) data)) (type $struct (struct i32)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $global (mut i32) (i32.const 42)) (global $global (mut i32) (i32.const 42)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test ;; As above, but the global is *not* immutable, so we cannot optimize. (drop (struct.new $struct (global.get $global) ) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field (mut i32)) data)) (type $struct (struct (mut i32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $global i32 (i32.const 42)) (global $global i32 (i32.const 42)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new $struct (global.get $global) ) ) ;; As above, but there is another set of the field. It is the same, though, ;; so that is fine. Also, the struct's field is now mutable as well to allow ;; that, and that also does not prevent optimization. (struct.set $struct 0 (ref.null $struct) (global.get $global) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field (mut i32)) data)) (type $struct (struct (mut i32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $global i32 (i32.const 42)) (global $global i32 (i32.const 42)) ;; CHECK: (global $global-2 i32 (i32.const 1337)) (global $global-2 i32 (i32.const 1337)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (global.get $global-2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new $struct (global.get $global) ) ) ;; As above, but set a different global, which prevents optimization. (struct.set $struct 0 (ref.null $struct) (global.get $global-2) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field (mut i32)) data)) (type $struct (struct (mut i32))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $global i32 (i32.const 42)) (global $global i32 (i32.const 42)) ;; CHECK: (global $global-2 i32 (i32.const 1337)) (global $global-2 i32 (i32.const 1337)) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (struct.new $struct (global.get $global) ) ) ;; As above, but set a constant, which means we are mixing constants with ;; globals, which prevents the optimization. (struct.set $struct 0 (ref.null $struct) (i32.const 1337) ) (drop (struct.get $struct 0 (ref.null $struct) ) ) ) ) (module ;; Test a global type other than i32. Arrays of structs are a realistic case ;; as they are used to implement itables. ;; CHECK: (type $vtable (struct_subtype (field funcref) data)) (type $vtable (struct funcref)) ;; CHECK: (type $itable (array_subtype (ref $vtable) data)) (type $itable (array (ref $vtable))) ;; CHECK: (type $object (struct_subtype (field $itable (ref $itable)) data)) (type $object (struct (field $itable (ref $itable)))) ;; CHECK: (type $none_=>_funcref (func_subtype (result funcref) func)) ;; CHECK: (global $global (ref $itable) (array.init_static $itable ;; CHECK-NEXT: (struct.new $vtable ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.new $vtable ;; CHECK-NEXT: (ref.func $test) ;; CHECK-NEXT: ) ;; CHECK-NEXT: )) (global $global (ref $itable) (array.init_static $itable (struct.new $vtable (ref.null func) ) (struct.new $vtable (ref.func $test) ) )) ;; CHECK: (func $test (type $none_=>_funcref) (result funcref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $object ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $vtable 0 ;; CHECK-NEXT: (array.get $itable ;; CHECK-NEXT: (block (result (ref $itable)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $object) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (result funcref) (drop (struct.new $object (global.get $global) ) ) ;; Realistic usage of an itable: read an item from it, then a func from ;; that, and return the value (all verifying that the types are correct ;; after optimization). Note how after optimization everything is lined up ;; so that precompute-propagate can infer from the global.get the specific ;; object the array.get is on, allowing us to emit a constant value for the ;; outer struct.get in principle. (struct.get $vtable 0 (array.get $itable (struct.get $object $itable (ref.null $object) ) (i32.const 1) ) ) ) ) binaryen-version_108/test/lit/passes/coalesce-locals-eh.wast000066400000000000000000000022411423707623100243340ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --coalesce-locals -all -S -o - | filecheck %s (module ;; CHECK: (tag $e (param)) ;; CHECK: (func $bar (result i32) ;; CHECK-NEXT: (i32.const 1984) ;; CHECK-NEXT: ) (func $bar (result i32) (i32.const 1984) ) (tag $e) ;; CHECK: (func $bug-cfg-traversal (param $0 i32) (result i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $bar) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $bug-cfg-traversal (param $0 i32) (result i32) (local $x i32) ;; This is a regrssion test case for a bug in cfg-traversal for EH. ;; See https://github.com/WebAssembly/binaryen/pull/3594 (try (do (local.set $x ;; the call may or may not throw, so we may reach the get of $x (call $bar) ) ) (catch_all (unreachable) ) ) (local.get $x) ) ) binaryen-version_108/test/lit/passes/coalesce-locals-gc-nn.wast000066400000000000000000000056301423707623100247470ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --coalesce-locals -all --enable-gc-nn-locals -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (func $nn-locals (param $0 (ref any)) ;; CHECK-NEXT: (local $1 ((ref any) (ref any))) ;; CHECK-NEXT: (local $2 ((ref any) (ref any))) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $nn-locals ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $nn-locals ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $nn-locals ;; CHECK-NEXT: (tuple.extract 1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $nn-locals ;; CHECK-NEXT: (tuple.extract 1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nn-locals (param $any (ref any)) ;; When computing interferences, coalesce locals should not error on tuples ;; that contain non-nullable locals. (local $x ((ref any) (ref any))) (local $y ((ref any) (ref any))) ;; Set values into the tuple locals and use them. ;; Note that while the values are the same, we do not optimize them because ;; of current limitations on tuple handling in this pass, so we are mainly ;; testing for not crashing here. (local.set $x (tuple.make (local.get $any) (local.get $any) ) ) (local.set $y (tuple.make (local.get $any) (local.get $any) ) ) (call $nn-locals (tuple.extract 0 (local.get $x) ) ) (call $nn-locals (tuple.extract 0 (local.get $y) ) ) (call $nn-locals (tuple.extract 1 (local.get $x) ) ) (call $nn-locals (tuple.extract 1 (local.get $y) ) ) ) ;; CHECK: (func $unreachable-get-of-non-nullable ;; CHECK-NEXT: (local $0 (ref any)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref any)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-get-of-non-nullable ;; One local is unused entirely, the other is used but only in unreachable ;; code. It does not really matter what we do here (coalesce, or not), but we ;; should emit valid IR. Normally we would apply a constant to replace the ;; local.get, however, the types here are non-nullable, so we must do ;; something else. (local $unused (ref any)) (local $used-in-unreachable (ref any)) (unreachable) (drop (local.get $used-in-unreachable) ) ) ) binaryen-version_108/test/lit/passes/coalesce-locals-gc.wast000066400000000000000000000040541423707623100243350ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --coalesce-locals -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (type $array (array (mut i8))) (type $array (array (mut i8))) ;; CHECK: (global $global (ref null $array) (ref.null $array)) (global $global (ref null $array) (ref.null $array)) ;; CHECK: (func $test-dead-get-non-nullable (param $0 dataref) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result dataref) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test-dead-get-non-nullable (param $func (ref data)) (unreachable) (drop ;; A useless get (that does not read from any set, or from the inputs to the ;; function). Normally we replace such gets with nops as best we can, but in ;; this case the type is non-nullable, so we must leave it alone. (local.get $func) ) ) ;; CHECK: (func $br_on_null (param $0 (ref null $array)) (result (ref null $array)) ;; CHECK-NEXT: (block $label$1 (result (ref null $array)) ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (br $label$1 ;; CHECK-NEXT: (br_on_null $label$2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on_null (param $ref (ref null $array)) (result (ref null $array)) (local $1 (ref null $array)) (block $label$1 (result (ref null $array)) (block $label$2 (br $label$1 ;; Test that we properly model the basic block connections around a ;; BrOnNull. There should be a branch to $label$2, and also a fallthrough. ;; As a result, the local.set below is reachable, and should not be ;; eliminated (turned into a drop). (br_on_null $label$2 (local.get $ref) ) ) ) (local.set $1 (global.get $global) ) (local.get $1) ) ) ) binaryen-version_108/test/lit/passes/coalesce-locals-learning.wast000066400000000000000000001211001423707623100255330ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --coalesce-locals-learning -S -o - | filecheck %s (module (memory 10) ;; CHECK: (type $2 (func)) ;; CHECK: (type $FUNCSIG$iii (func (param i32 i32) (result i32))) ;; CHECK: (type $3 (func (param i32 f32))) ;; CHECK: (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $2 (func)) (type $3 (func (param i32 f32))) ;; CHECK: (type $4 (func (param i32))) (type $4 (func (param i32))) (import $_emscripten_autodebug_i32 "env" "_emscripten_autodebug_i32" (param i32 i32) (result i32)) ;; CHECK: (import "env" "_emscripten_autodebug_i32" (func $_emscripten_autodebug_i32 (param i32 i32) (result i32))) ;; CHECK: (memory $0 10) ;; CHECK: (func $nothing-to-do ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nothing-to-do (type $2) (local $x i32) (nop) ) ;; CHECK: (func $merge ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $merge (type $2) (local $x i32) (local $y i32) (nop) ) ;; CHECK: (func $leave-type ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $leave-type (type $2) (local $x i32) (local $y f32) (nop) ) ;; CHECK: (func $leave-interfere ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $leave-interfere (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (local.set $y (i32.const 1) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $almost-interfere ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $almost-interfere (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (drop (local.get $x) ) (local.set $y (i32.const 0) ) (drop (local.get $y) ) ) ;; CHECK: (func $redundant-copy ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $redundant-copy (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (local.set $y (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $ineffective-store ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ineffective-store (type $2) (local $x i32) (local.set $x (i32.const 0) ) (local.set $x (i32.const 0) ) (drop (local.get $x) ) ) ;; CHECK: (func $block ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block (type $2) (local $x i32) (block $block0 (local.set $x (i32.const 0) ) ) (drop (local.get $x) ) ) ;; CHECK: (func $see-both-sides ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $see-both-sides (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (block $block0 (local.set $y (i32.const 1) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $see-br-and-ignore-dead ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (br $block) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $see-br-and-ignore-dead (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (block $block (br $block) (local.set $y (i32.const 0) ) (drop (local.get $y) ) (local.set $x (i32.const -1) ) ) (drop (local.get $x) ) ) ;; CHECK: (func $see-block-body ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $block) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $see-block-body (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (block $block (local.set $y (i32.const 1) ) (drop (local.get $y) ) (br $block) ) (drop (local.get $x) ) ) ;; CHECK: (func $zero-init ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-init (type $2) (local $x i32) (local $y i32) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $multi ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multi (type $2) (local $x i32) (local $y i32) (local $z i32) (drop (local.get $y) ) (drop (local.get $z) ) ) ;; CHECK: (func $if-else ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $if-else-parallel ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-parallel (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 (local.set $x (i32.const 0) ) (drop (local.get $x) ) ) (block $block3 (local.set $y (i32.const 1) ) (drop (local.get $y) ) ) ) ) ;; CHECK: (func $if-else-after ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-after (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (local.set $x (i32.const 0) ) (local.set $y (i32.const 1) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $if-else-through ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-through (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (local.set $y (i32.const 1) ) (if (i32.const 0) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $if-through ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-through (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (local.set $y (i32.const 1) ) (if (i32.const 0) (drop (i32.const 1) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $if-through2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-through2 (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (if (i32.const 0) (local.set $y (i32.const 1) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $if-through3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-through3 (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 1) ) (if (i32.const 0) (block $block1 (drop (local.get $x) ) (drop (local.get $y) ) ) ) ) ;; CHECK: (func $if2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if2 (type $2) (local $x i32) (local $y i32) (if (local.tee $x (i32.const 1) ) (block $block1 (drop (local.get $x) ) (drop (local.get $y) ) ) ) ) ;; CHECK: (func $if3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if3 (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 (local.set $x (i32.const 0) ) (drop (local.get $x) ) ) ) (drop (local.get $y) ) ) ;; CHECK: (func $if4 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if4 (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 (local.set $x (i32.const 0) ) (drop (local.get $x) ) (local.set $y (i32.const 1) ) ) ) (drop (local.get $y) ) ) ;; CHECK: (func $if5 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if5 (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 (drop (local.get $x) ) (local.set $y (i32.const 1) ) ) ) (drop (local.get $y) ) ) ;; CHECK: (func $loop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (loop $in ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop (type $2) (local $x i32) (local $y i32) (block $out (loop $in (drop (local.get $x) ) (local.set $x (i32.const 0) ) (drop (local.get $y) ) (br $in) ) ) ) ;; CHECK: (func $interfere-in-dead ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (br $block) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $interfere-in-dead (type $2) (local $x i32) (local $y i32) (block $block (br $block) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $interfere-in-dead2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $interfere-in-dead2 (type $2) (local $x i32) (local $y i32) (block $block (unreachable) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $interfere-in-dead3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $interfere-in-dead3 (type $2) (local $x i32) (local $y i32) (block $block (return) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $params (param $0 i32) (param $1 f32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $params (type $3) (param $p i32) (param $q f32) (local $x i32) (local $y i32) (local $z i32) (local $w i32) (drop (local.get $y) ) (drop (local.get $z) ) (drop (local.get $w) ) ) ;; CHECK: (func $interfere-in-dead4 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $interfere-in-dead4 (type $2) (local $x i32) (local $y i32) (block $block (br_if $block (i32.const 0) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $switch ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $switch$def ;; CHECK-NEXT: (block $switch-case$1 ;; CHECK-NEXT: (block $switch-case$2 ;; CHECK-NEXT: (br_table $switch-case$1 $switch-case$2 $switch-case$1 $switch-case$1 $switch$def ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $switch (type $2) (local $x i32) (local $y i32) (local $z i32) (local $w i32) (block $switch$def (block $switch-case$1 (block $switch-case$2 (br_table $switch-case$1 $switch-case$2 $switch-case$1 $switch-case$1 $switch$def (i32.const 100) ) (drop (local.get $x) ) ) (drop (local.get $y) ) ) (drop (local.get $z) ) ) (drop (local.get $w) ) ) ;; CHECK: (func $greedy-can-be-happy ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 101) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block5 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 103) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (block $block8 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 105) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block10 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 106) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 107) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (block $block13 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 108) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 109) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block15 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 110) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 111) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $greedy-can-be-happy (type $2) (local $x1 i32) (local $x2 i32) (local $x3 i32) (local $y1 i32) (local $y2 i32) (local $y3 i32) (if (i32.const 0) (if (i32.const 1) (if (i32.const 2) (block $block3 (local.set $x1 (i32.const 100) ) (local.set $y2 (i32.const 101) ) (drop (local.get $x1) ) (drop (local.get $y2) ) ) (block $block5 (local.set $x1 (i32.const 102) ) (local.set $y3 (i32.const 103) ) (drop (local.get $x1) ) (drop (local.get $y3) ) ) ) (if (i32.const 3) (block $block8 (local.set $x2 (i32.const 104) ) (local.set $y1 (i32.const 105) ) (drop (local.get $x2) ) (drop (local.get $y1) ) ) (block $block10 (local.set $x2 (i32.const 106) ) (local.set $y3 (i32.const 107) ) (drop (local.get $x2) ) (drop (local.get $y3) ) ) ) ) (if (i32.const 4) (block $block13 (local.set $x3 (i32.const 108) ) (local.set $y1 (i32.const 109) ) (drop (local.get $x3) ) (drop (local.get $y1) ) ) (block $block15 (local.set $x3 (i32.const 110) ) (local.set $y2 (i32.const 111) ) (drop (local.get $x3) ) (drop (local.get $y2) ) ) ) ) ) ;; CHECK: (func $greedy-can-be-sad ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 101) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block5 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 103) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (block $block8 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 105) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block10 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 106) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 107) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (block $block13 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 108) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 109) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block15 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 110) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 111) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $greedy-can-be-sad (type $2) (local $x1 i32) (local $y1 i32) (local $x2 i32) (local $y2 i32) (local $x3 i32) (local $y3 i32) (if (i32.const 0) (if (i32.const 1) (if (i32.const 2) (block $block3 (local.set $x1 (i32.const 100) ) (local.set $y2 (i32.const 101) ) (drop (local.get $x1) ) (drop (local.get $y2) ) ) (block $block5 (local.set $x1 (i32.const 102) ) (local.set $y3 (i32.const 103) ) (drop (local.get $x1) ) (drop (local.get $y3) ) ) ) (if (i32.const 3) (block $block8 (local.set $x2 (i32.const 104) ) (local.set $y1 (i32.const 105) ) (drop (local.get $x2) ) (drop (local.get $y1) ) ) (block $block10 (local.set $x2 (i32.const 106) ) (local.set $y3 (i32.const 107) ) (drop (local.get $x2) ) (drop (local.get $y3) ) ) ) ) (if (i32.const 4) (block $block13 (local.set $x3 (i32.const 108) ) (local.set $y1 (i32.const 109) ) (drop (local.get $x3) ) (drop (local.get $y1) ) ) (block $block15 (local.set $x3 (i32.const 110) ) (local.set $y2 (i32.const 111) ) (drop (local.get $x3) ) (drop (local.get $y2) ) ) ) ) ) ;; CHECK: (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4096) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block2 ;; CHECK-NEXT: (block $while-out$0 ;; CHECK-NEXT: (loop $while-in$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $while-out$2 ;; CHECK-NEXT: (loop $while-in$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block7 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $while-out$4 ;; CHECK-NEXT: (loop $while-in$5 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out$4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block9 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_memcpy (type $FUNCSIG$iiii) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) (local $i4 i32) (if (i32.ge_s (local.get $i3) (i32.const 4096) ) (drop (local.get $i1) ) ) (local.set $i4 (local.get $i1) ) (if (i32.eq (i32.and (local.get $i1) (i32.const 3) ) (i32.and (local.get $i2) (i32.const 3) ) ) (block $block2 (block $while-out$0 (loop $while-in$1 (if (i32.eqz (i32.and (local.get $i1) (i32.const 3) ) ) (br $while-out$0) ) (block $block4 (if (i32.eqz (local.get $i3) ) (return (local.get $i4) ) ) (i32.store8 (local.get $i1) (i32.load8_s (local.get $i2) ) ) (local.set $i1 (i32.add (local.get $i1) (i32.const 1) ) ) (local.set $i2 (i32.add (local.get $i2) (i32.const 1) ) ) (local.set $i3 (i32.sub (local.get $i3) (i32.const 1) ) ) ) (br $while-in$1) ) ) (block $while-out$2 (loop $while-in$3 (if (i32.eqz (i32.ge_s (local.get $i3) (i32.const 4) ) ) (br $while-out$2) ) (block $block7 (i32.store (local.get $i1) (i32.load (local.get $i2) ) ) (local.set $i1 (i32.add (local.get $i1) (i32.const 4) ) ) (local.set $i2 (i32.add (local.get $i2) (i32.const 4) ) ) (local.set $i3 (i32.sub (local.get $i3) (i32.const 4) ) ) ) (br $while-in$3) ) ) ) ) (block $while-out$4 (loop $while-in$5 (if (i32.eqz (i32.gt_s (local.get $i3) (i32.const 0) ) ) (br $while-out$4) ) (block $block9 (i32.store8 (local.get $i1) (i32.load8_s (local.get $i2) ) ) (local.set $i1 (i32.add (local.get $i1) (i32.const 1) ) ) (local.set $i2 (i32.add (local.get $i2) (i32.const 1) ) ) (local.set $i3 (i32.sub (local.get $i3) (i32.const 1) ) ) ) (br $while-in$5) ) ) (return (local.get $i4) ) ) ;; CHECK: (func $this-is-effective-i-tell-you (param $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $this-is-effective-i-tell-you (type $4) (param $x i32) (if (i32.const -1) (block $block1 (if (i32.const 0) (nop) ) (local.set $x (i32.const 1) ) ) (nop) ) (drop (local.get $x) ) ) ) binaryen-version_108/test/lit/passes/coalesce-locals.wast000066400000000000000000002204541423707623100237520ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --coalesce-locals -S -o - | filecheck %s (module (memory 10) ;; CHECK: (type $2 (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $4 (func (param i32))) ;; CHECK: (type $FUNCSIG$iii (func (param i32 i32) (result i32))) ;; CHECK: (type $f64_i32_=>_i64 (func (param f64 i32) (result i64))) ;; CHECK: (type $3 (func (param i32 f32))) ;; CHECK: (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $2 (func)) (type $3 (func (param i32 f32))) (type $4 (func (param i32))) (import $_emscripten_autodebug_i32 "env" "_emscripten_autodebug_i32" (param i32 i32) (result i32)) (import $get "env" "get" (result i32)) (import $set "env" "set" (param i32)) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (type $none_=>_f64 (func (result f64))) ;; CHECK: (import "env" "_emscripten_autodebug_i32" (func $_emscripten_autodebug_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "get" (func $get (result i32))) ;; CHECK: (import "env" "set" (func $set (param i32))) ;; CHECK: (memory $0 10) ;; CHECK: (func $nothing-to-do ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nothing-to-do (type $2) (local $x i32) (nop) ) ;; CHECK: (func $merge ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $merge (type $2) (local $x i32) (local $y i32) (nop) ) ;; CHECK: (func $leave-type ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $leave-type (type $2) (local $x i32) (local $y f32) (nop) ) ;; CHECK: (func $leave-interfere ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $leave-interfere (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (local.set $y (i32.const 1) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $almost-interfere ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $almost-interfere (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (drop (local.get $x) ) (local.set $y (i32.const 0) ) (drop (local.get $y) ) ) ;; CHECK: (func $redundant-copy ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $redundant-copy (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (local.set $y (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $ineffective-store ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ineffective-store (type $2) (local $x i32) (local.set $x (i32.const 0) ) (local.set $x (i32.const 0) ) (drop (local.get $x) ) ) ;; CHECK: (func $block ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block (type $2) (local $x i32) (block $block0 (local.set $x (i32.const 0) ) ) (drop (local.get $x) ) ) ;; CHECK: (func $see-both-sides ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $see-both-sides (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (block $block0 (local.set $y (i32.const 1) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $see-br-and-ignore-dead ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (br $block) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $see-br-and-ignore-dead (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (block $block (br $block) (local.set $y (i32.const 0) ) (drop (local.get $y) ) (local.set $x (i32.const -1) ) ) (drop (local.get $x) ) ) ;; CHECK: (func $see-block-body ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $block) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $see-block-body (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (block $block (local.set $y (i32.const 1) ) (drop (local.get $y) ) (br $block) ) (drop (local.get $x) ) ) ;; CHECK: (func $zero-init ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-init (type $2) (local $x i32) (local $y i32) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $multi ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multi (type $2) (local $x i32) (local $y i32) (local $z i32) (drop (local.get $y) ) (drop (local.get $z) ) ) ;; CHECK: (func $if-else ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $if-else-parallel ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-parallel (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 (local.set $x (i32.const 0) ) (drop (local.get $x) ) ) (block $block3 (local.set $y (i32.const 1) ) (drop (local.get $y) ) ) ) ) ;; CHECK: (func $if-else-after ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-after (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (local.set $x (i32.const 0) ) (local.set $y (i32.const 1) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $if-else-through ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-through (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (local.set $y (i32.const 1) ) (if (i32.const 0) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $if-through ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-through (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (local.set $y (i32.const 1) ) (if (i32.const 0) (drop (i32.const 1) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $if-through2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-through2 (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 0) ) (if (i32.const 0) (local.set $y (i32.const 1) ) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $if-through3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-through3 (type $2) (local $x i32) (local $y i32) (local.set $x (i32.const 1) ) (if (i32.const 0) (block $block1 (drop (local.get $x) ) (drop (local.get $y) ) ) ) ) ;; CHECK: (func $if2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if2 (type $2) (local $x i32) (local $y i32) (if (local.tee $x (i32.const 1) ) (block $block1 (drop (local.get $x) ) (drop (local.get $y) ) ) ) ) ;; CHECK: (func $if3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if3 (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 (local.set $x (i32.const 0) ) (drop (local.get $x) ) ) ) (drop (local.get $y) ) ) ;; CHECK: (func $if4 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if4 (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 (local.set $x (i32.const 0) ) (drop (local.get $x) ) (local.set $y (i32.const 1) ) ) ) (drop (local.get $y) ) ) ;; CHECK: (func $if5 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if5 (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 ;; These locals can be coalesced together: $x's live range ends here, ;; and $y's begins right after it, so they do not have an overlap with ;; a different value. (drop (local.get $x) ) (local.set $y (i32.const 1) ) ) ) (drop (local.get $y) ) ) ;; CHECK: (func $if5-flip ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if5-flip (type $2) (local $x i32) (local $y i32) (if (i32.const 0) (block $block1 ;; As above, but flipping these two instructions causes a conflict. (local.set $y (i32.const 1) ) (drop (local.get $x) ) ) ) (drop (local.get $y) ) ) ;; CHECK: (func $loop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (loop $in ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop (type $2) (local $x i32) (local $y i32) (loop $in (drop (local.get $x) ) (local.set $x (i32.const 0) ) (drop (local.get $y) ) (br $in) ) ) ;; CHECK: (func $interfere-in-dead ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (br $block) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $interfere-in-dead (type $2) (local $x i32) (local $y i32) (block $block (br $block) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $interfere-in-dead2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $interfere-in-dead2 (type $2) (local $x i32) (local $y i32) (block $block (unreachable) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $interfere-in-dead3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $interfere-in-dead3 (type $2) (local $x i32) (local $y i32) (block $block (return) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $params (param $0 i32) (param $1 f32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $params (type $3) (param $p i32) (param $q f32) (local $x i32) (local $y i32) (local $z i32) (local $w i32) (drop (local.get $y) ) (drop (local.get $z) ) (drop (local.get $w) ) ) ;; CHECK: (func $interfere-in-dead4 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $interfere-in-dead4 (type $2) (local $x i32) (local $y i32) (block $block (br_if $block (i32.const 0) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ) ;; CHECK: (func $switch ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $switch$def ;; CHECK-NEXT: (block $switch-case$1 ;; CHECK-NEXT: (block $switch-case$2 ;; CHECK-NEXT: (br_table $switch-case$1 $switch-case$2 $switch-case$1 $switch-case$1 $switch$def ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $switch (type $2) (local $x i32) (local $y i32) (local $z i32) (local $w i32) (block $switch$def (block $switch-case$1 (block $switch-case$2 (br_table $switch-case$1 $switch-case$2 $switch-case$1 $switch-case$1 $switch$def (i32.const 100) ) (drop (local.get $x) ) ) (drop (local.get $y) ) ) (drop (local.get $z) ) ) (drop (local.get $w) ) ) ;; CHECK: (func $greedy-can-be-happy ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 101) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block5 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 103) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (block $block8 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 105) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block10 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 106) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 107) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (block $block13 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 108) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 109) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block15 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 110) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 111) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $greedy-can-be-happy (type $2) (local $x1 i32) (local $x2 i32) (local $x3 i32) (local $y1 i32) (local $y2 i32) (local $y3 i32) (if (i32.const 0) (if (i32.const 1) (if (i32.const 2) (block $block3 (local.set $x1 (i32.const 100) ) (local.set $y2 (i32.const 101) ) (drop (local.get $x1) ) (drop (local.get $y2) ) ) (block $block5 (local.set $x1 (i32.const 102) ) (local.set $y3 (i32.const 103) ) (drop (local.get $x1) ) (drop (local.get $y3) ) ) ) (if (i32.const 3) (block $block8 (local.set $x2 (i32.const 104) ) (local.set $y1 (i32.const 105) ) (drop (local.get $x2) ) (drop (local.get $y1) ) ) (block $block10 (local.set $x2 (i32.const 106) ) (local.set $y3 (i32.const 107) ) (drop (local.get $x2) ) (drop (local.get $y3) ) ) ) ) (if (i32.const 4) (block $block13 (local.set $x3 (i32.const 108) ) (local.set $y1 (i32.const 109) ) (drop (local.get $x3) ) (drop (local.get $y1) ) ) (block $block15 (local.set $x3 (i32.const 110) ) (local.set $y2 (i32.const 111) ) (drop (local.get $x3) ) (drop (local.get $y2) ) ) ) ) ) ;; CHECK: (func $greedy-can-be-sad ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 101) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block5 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 103) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (block $block8 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 105) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block10 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 106) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 107) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (block $block13 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 108) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 109) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block15 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 110) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 111) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $greedy-can-be-sad (type $2) (local $x1 i32) (local $y1 i32) (local $x2 i32) (local $y2 i32) (local $x3 i32) (local $y3 i32) (if (i32.const 0) (if (i32.const 1) (if (i32.const 2) (block $block3 (local.set $x1 (i32.const 100) ) (local.set $y2 (i32.const 101) ) (drop (local.get $x1) ) (drop (local.get $y2) ) ) (block $block5 (local.set $x1 (i32.const 102) ) (local.set $y3 (i32.const 103) ) (drop (local.get $x1) ) (drop (local.get $y3) ) ) ) (if (i32.const 3) (block $block8 (local.set $x2 (i32.const 104) ) (local.set $y1 (i32.const 105) ) (drop (local.get $x2) ) (drop (local.get $y1) ) ) (block $block10 (local.set $x2 (i32.const 106) ) (local.set $y3 (i32.const 107) ) (drop (local.get $x2) ) (drop (local.get $y3) ) ) ) ) (if (i32.const 4) (block $block13 (local.set $x3 (i32.const 108) ) (local.set $y1 (i32.const 109) ) (drop (local.get $x3) ) (drop (local.get $y1) ) ) (block $block15 (local.set $x3 (i32.const 110) ) (local.set $y2 (i32.const 111) ) (drop (local.get $x3) ) (drop (local.get $y2) ) ) ) ) ) ;; CHECK: (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4096) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block2 ;; CHECK-NEXT: (block $while-out$0 ;; CHECK-NEXT: (loop $while-in$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $while-out$2 ;; CHECK-NEXT: (loop $while-in$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block7 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $while-out$4 ;; CHECK-NEXT: (loop $while-in$5 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out$4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block9 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_memcpy (type $FUNCSIG$iiii) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) (local $i4 i32) (if (i32.ge_s (local.get $i3) (i32.const 4096) ) (drop (local.get $i1) ) ) (local.set $i4 (local.get $i1) ) (if (i32.eq (i32.and (local.get $i1) (i32.const 3) ) (i32.and (local.get $i2) (i32.const 3) ) ) (block $block2 (block $while-out$0 (loop $while-in$1 (if (i32.eqz (i32.and (local.get $i1) (i32.const 3) ) ) (br $while-out$0) ) (block $block4 (if (i32.eqz (local.get $i3) ) (return (local.get $i4) ) ) (i32.store8 (local.get $i1) (i32.load8_s (local.get $i2) ) ) (local.set $i1 (i32.add (local.get $i1) (i32.const 1) ) ) (local.set $i2 (i32.add (local.get $i2) (i32.const 1) ) ) (local.set $i3 (i32.sub (local.get $i3) (i32.const 1) ) ) ) (br $while-in$1) ) ) (block $while-out$2 (loop $while-in$3 (if (i32.eqz (i32.ge_s (local.get $i3) (i32.const 4) ) ) (br $while-out$2) ) (block $block7 (i32.store (local.get $i1) (i32.load (local.get $i2) ) ) (local.set $i1 (i32.add (local.get $i1) (i32.const 4) ) ) (local.set $i2 (i32.add (local.get $i2) (i32.const 4) ) ) (local.set $i3 (i32.sub (local.get $i3) (i32.const 4) ) ) ) (br $while-in$3) ) ) ) ) (block $while-out$4 (loop $while-in$5 (if (i32.eqz (i32.gt_s (local.get $i3) (i32.const 0) ) ) (br $while-out$4) ) (block $block9 (i32.store8 (local.get $i1) (i32.load8_s (local.get $i2) ) ) (local.set $i1 (i32.add (local.get $i1) (i32.const 1) ) ) (local.set $i2 (i32.add (local.get $i2) (i32.const 1) ) ) (local.set $i3 (i32.sub (local.get $i3) (i32.const 1) ) ) ) (br $while-in$5) ) ) (return (local.get $i4) ) ) ;; CHECK: (func $this-is-effective-i-tell-you (param $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $this-is-effective-i-tell-you (type $4) (param $x i32) (if (i32.const -1) (block $block1 (if (i32.const 0) (nop) ) (local.set $x (i32.const 1) ) ) (nop) ) (drop (local.get $x) ) ) ;; CHECK: (func $prefer-remove-copies1 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $prefer-remove-copies1 (type $2) (local $y i32) (local $z i32) (local $x i32) (local.set $x (i32.const 0) ) (local.set $y (local.get $x) ) (local.set $z (i32.const 1) ) (drop (local.get $y) ) (drop (local.get $z) ) ) ;; CHECK: (func $prefer-remove-copies2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $prefer-remove-copies2 (type $2) (local $y i32) (local $z i32) (local $x i32) (local.set $x (i32.const 0) ) (local.set $z (local.get $x) ) (local.set $y (i32.const 1) ) (drop (local.get $y) ) (drop (local.get $z) ) ) ;; CHECK: (func $in-unreachable ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $x ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $y ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $z ;; CHECK-NEXT: (br $z) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $z14 ;; CHECK-NEXT: (br_table $z14 $z14 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable (local $a i32) (block $x (return) (local.set $a (i32.const 1)) (drop (local.get $a)) (local.set $a (local.get $a)) ) (block $y (unreachable) (local.set $a (i32.const 1)) (drop (local.get $a)) (local.set $a (local.get $a)) ) (block $z (br $z) (local.set $a (i32.const 1)) (drop (local.get $a)) (local.set $a (local.get $a)) ) (block $z (br_table $z $z (i32.const 100) ) (local.set $a (i32.const 1)) (drop (local.get $a)) (local.set $a (local.get $a)) ) ) ;; CHECK: (func $nop-in-unreachable ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nop-in-unreachable (local $x i32) (block (unreachable) (i32.store (local.get $x) (local.tee $x (i32.const 0)) ) ) ) ;; CHECK: (func $loop-backedge ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (loop $while-in7 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $set ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $get) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br $while-in7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-backedge (local $0 i32) ;; loop phi (local $1 i32) ;; value for next loop iteration (local $2 i32) ;; a local that might be merged with with $1, perhaps making us prefer it to removing a backedge copy (local.set $0 (i32.const 2) ) (block $out (loop $while-in7 (local.set $2 (i32.const 0)) ;; 2 interferes with 0 (call $set (local.get $2)) (local.set $1 (i32.add (local.get $0) (i32.const 1) ) ) (if (call $get) (local.set $2 (local.get $1)) ;; copy for 1/2 ) (br_if $out (local.get $2)) (local.set $1 (i32.const 100)) (local.set $0 (local.get $1)) ;; copy for 1/0, with extra weight should win the tie (br $while-in7) ) ) ) ;; CHECK: (func $if-copy1 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (loop $top ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $top) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-copy1 (local $x i32) (local $y i32) (loop $top (local.set $x (if (result i32) (i32.const 1) (local.get $x) (local.get $y) ) ) (drop (local.get $x)) (drop (local.get $y)) (br $top) ) ) ;; CHECK: (func $if-copy2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (loop $top ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $top) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-copy2 (local $x i32) (local $y i32) (loop $top (local.set $x (if (result i32) (i32.const 1) (local.get $y) (local.get $x) ) ) (drop (local.get $x)) (drop (local.get $y)) (br $top) ) ) ;; CHECK: (func $if-copy3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (loop $top ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $top) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-copy3 (local $x i32) (local $y i32) (loop $top (local.set $x (if (result i32) (i32.const 1) (unreachable) (local.get $x) ) ) (drop (local.get $x)) (drop (local.get $y)) (br $top) ) ) ;; CHECK: (func $if-copy4 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (loop $top ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $top) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-copy4 (local $x i32) (local $y i32) (loop $top (local.set $x (if (result i32) (i32.const 1) (unreachable) (local.get $y) ) ) (drop (local.get $x)) (drop (local.get $y)) (br $top) ) ) ;; CHECK: (func $if-copy-tee ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (loop $top ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $top) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-copy-tee (local $x i32) (local $y i32) (loop $top (drop (local.tee $x (if (result i32) (i32.const 1) (local.get $x) (i32.const 2) ) ) ) (drop (local.get $x)) (drop (local.get $y)) (br $top) ) ) ;; CHECK: (func $tee_br (param $0 i32) (result i32) ;; CHECK-NEXT: (block $b ;; CHECK-NEXT: (return ;; CHECK-NEXT: (br $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $tee_br (param $x i32) (result i32) (block $b (return (local.tee $x (br $b) ) ) ) (i32.const 1) ) ;; CHECK: (func $unused-tee-with-child-if-no-else (param $0 i32) ;; CHECK-NEXT: (loop $label$0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (br $label$0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unused-tee-with-child-if-no-else (param $0 i32) (loop $label$0 (drop (local.tee $0 (if (br $label$0) (nop) ) ) ) ) ) ;; CHECK: (func $tee_if_with_unreachable_else (param $0 f64) (param $1 i32) (result i64) ;; CHECK-NEXT: (call $tee_if_with_unreachable_else ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.lt ;; CHECK-NEXT: (f64.const -128) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $tee_if_with_unreachable_else (param $0 f64) (param $1 i32) (result i64) (call $tee_if_with_unreachable_else (local.tee $0 (if (result f64) (local.get $1) (local.get $0) (unreachable) ) ) (f64.lt (f64.const -128) (local.get $0) ) ) ) ;; CHECK: (func $tee_if_with_unreachable_true (param $0 f64) (param $1 i32) (result i64) ;; CHECK-NEXT: (call $tee_if_with_unreachable_else ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.lt ;; CHECK-NEXT: (f64.const -128) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $tee_if_with_unreachable_true (param $0 f64) (param $1 i32) (result i64) (call $tee_if_with_unreachable_else (local.tee $0 (if (result f64) (local.get $1) (unreachable) (local.get $0) ) ) (f64.lt (f64.const -128) (local.get $0) ) ) ) ;; CHECK: (func $pick ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $pick (local $x i32) (local $y i32) (local.set $x (local.get $y)) (if (i32.const 1) (local.set $x (i32.const 1)) ) (local.set $x (local.get $y)) (local.set $x (local.get $y)) ) ;; CHECK: (func $pick-2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $pick-2 (local $x i32) (local $y i32) (local.set $y (local.get $x)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $y (local.get $x)) ) ;; CHECK: (func $many ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $many (local $x i32) (local $y i32) (local $z i32) (local $w i32) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $z (i32.const 2)) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $z (i32.const 2)) (local.set $x (local.get $w)) ) ;; CHECK: (func $loop-copies (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-copies (param $x i32) (param $y i32) (loop $loop (local.set $x (local.get $y)) (local.set $y (local.get $x)) (br_if $loop (local.get $x)) ) ) ;; CHECK: (func $proper-type (result f64) ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $proper-type (result f64) (local $var$0 i32) (local $var$2 f64) (local.set $var$0 (select (i32.const 0) (i32.const 1) (local.get $var$0) ) ) (local.tee $var$2 ;; the locals will be reordered, this should be the f64 (local.get $var$2) ) ) ;; CHECK: (func $reuse-param (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $reuse-param (param $x i32) (param $y i32) (result i32) (local $temp i32) (i32.add (local.tee $temp (i32.xor (i32.shr_s (i32.shl (local.get $x) ;; $x and $temp do not interfere (i32.const 16) ) (i32.const 16) ) (i32.shr_s (i32.shl (local.get $y) (i32.const 16) ) (i32.const 16) ) ) ) (local.get $temp) ) ) ;; CHECK: (func $copies-do-not-interfere (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $copies-do-not-interfere (result i32) (local $0 i32) (local $1 i32) (local.set $0 (i32.const 100) ) ;; The two locals are copies, and so they do not interfere, even though ;; their live ranges overlap and there is a set of one of them in that ;; overlap. We can coalesce them together to a single local. (local.set $1 (local.get $0) ) (drop (local.get $0) ) (local.get $1) ) ;; CHECK: (func $tee-copies-do-not-interfere (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $tee-copies-do-not-interfere (result i32) (local $0 i32) (local $1 i32) ;; Similar to the above, but now the copying is done using a tee. (local.set $1 (local.tee $0 (i32.const 100) ) ) (drop (local.get $0) ) (local.get $1) ) ;; CHECK: (func $multiple-tee-copies-do-not-interfere (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $multiple-tee-copies-do-not-interfere (result i32) (local $0 i32) (local $1 i32) (local $2 i32) ;; Similar to the above, but a chain of 3 items. (local.set $2 (local.tee $1 (local.tee $0 (i32.const 100) ) ) ) (drop (local.get $0) ) (drop (local.get $1) ) (local.get $2) ) ;; CHECK: (func $copies-and-then-interfere (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $copies-and-then-interfere (result i32) (local $0 i32) (local $1 i32) (local.set $0 (i32.const 100) ) (local.set $1 (local.get $0) ) (drop (local.get $0) ) (drop (local.get $1) ) ;; The copy before this set should not confuse us - this set causes a ;; divergence on the overlapping live ranges, and we cannot coalesce these ;; two locals. (local.set $1 (i32.const 123) ) (drop (local.get $0) ) (local.get $1) ) ;; CHECK: (func $copies-and-then-set-without-interfering (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $copies-and-then-set-without-interfering (result i32) (local $0 i32) (local $1 i32) (local.set $0 (i32.const 100) ) (local.set $1 (local.get $0) ) (drop (local.get $0) ) (drop (local.get $1) ) ;; Similar to the above, but now $0's live range has ended (there is no get ;; of it at the point of this set), and so there is no interference, and ;; these locals can be coalesced. (local.set $1 (i32.const 123) ) (local.get $1) ) ;; CHECK: (func $copy-third-party (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $copy-third-party (result i32) (local $0 i32) (local $1 i32) (local $2 i32) ;; $2 begins with a value, which is copied to $0 and $1. None of these ;; interfere and they can all be coalesced. (local.set $2 (i32.const 100) ) (local.set $1 (local.get $2) ) (local.set $0 (local.get $2) ) (drop (local.get $0) ) (drop (local.get $1) ) (local.get $2) ) ;; CHECK: (func $ineffective-set (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) (func $ineffective-set (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local.set $0 ;; This set of $2 is ineffective in that there are no gets of $2, but the ;; value does flow through to the outer set, and we must notice that. In ;; particular, we must see that $0 and $1 conflict, and cannot be coalesced ;; together ($1 is alive from the zero init to the very end, and so $0's ;; set means it diverges). (local.tee $2 (i32.const 100) ) ) (drop (local.get $0) ) (local.get $1) ) ;; CHECK: (func $inter-block-copy (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) (func $inter-block-copy (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local.set $0 (i32.const 100) ) (local.set $1 (local.get $0) ) (local.set $2 (local.get $0) ) ;; At this point $1 is equal to $2, as they are both copies of $0. Then the ;; if assigns one of them to $3, which means that $3 is also equal to them ;; all. However, we only analyze copied values *inside* blocks, which means ;; that in each of the if arms we see that $3 is assigned either the value ;; of $1 or $2, but we don't know that those values are both equal to $0. As ;; a result, we will infer that $3 interfers with $0, as their live ranges ;; overlap and $3 is assigned a value that looks different than $0. This ;; will prevent $3 being coalesced with all the others. (However, see the ;; next testcase for more on this.) (if (local.get $0) (local.set $3 (local.get $1) ) (local.set $3 (local.get $2) ) ) (drop (local.get $0) ) (drop (local.get $1) ) (drop (local.get $2) ) (local.get $3) ) ;; CHECK: (func $inter-block-copy-second-pass (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $inter-block-copy-second-pass (result i32) (local $0 i32) (local $1 i32) ;; This function contains the output of the previous testcase ;; $inter-block-copy, and shows what running a second pass results in. After ;; the first pass we have coalesced the original $0, $1, and $2 into a single ;; local ($0), and renamed the original $3 into $1. At this point the ;; algorithm can see that $0 and $1 do not interfere: there are no copies in ;; the middle, and in both if arms when we assign a value to $1 it is the ;; value already in $0, and there is no other assignment of either one that ;; appears in their overlapping live ranges, so they will be coalesced into ;; a single local. (local.set $0 (i32.const 100) ) (nop) (nop) (if (local.get $0) (local.set $1 (local.get $0) ) (local.set $1 (local.get $0) ) ) (drop (local.get $0) ) (drop (local.get $0) ) (drop (local.get $0) ) (local.get $1) ) ;; CHECK: (func $equal-constants-zeroinit ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $equal-constants-zeroinit (local $x i32) (local $y i32) ;; $x and $y both have the zero init value, which is identical, and they do ;; not interfere. (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $equal-constants ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $equal-constants (local $x i32) (local $y i32) ;; $x is written the same value as $y, so they do not interfere. (local.set $x (i32.const 0) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $different-constants ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $different-constants (local $x i32) (local $y i32) ;; $x is written a different value, so they do interfere. (local.set $x (i32.const 1) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $equal-constants-nonzero ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $equal-constants-nonzero (local $x i32) (local $y i32) (local.set $x (i32.const 42) ) (local.set $y (i32.const 42) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ;; CHECK: (func $different-constants-nonzero ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $different-constants-nonzero (local $x i32) (local $y i32) (local.set $x (i32.const 42) ) (local.set $y (i32.const 1337) ) (drop (local.get $x) ) (drop (local.get $y) ) ) ) binaryen-version_108/test/lit/passes/code-folding-eh.wast000066400000000000000000000076211423707623100236440ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-names --code-folding -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (tag $e-i32 (param i32)) (tag $e-i32 (param i32)) ;; CHECK: (func $pop-test ;; CHECK-NEXT: (block $folding-inner0 ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 111) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 222) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 333) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $pop-test (try (do (try (do) (catch $e-i32 ;; Expressions containing a pop should NOT be taken out and folded. (drop (pop i32)) (drop (i32.const 111)) (drop (i32.const 222)) (drop (i32.const 333)) (unreachable) ) ) ) (catch $e-i32 (drop (pop i32)) (drop (i32.const 111)) (drop (i32.const 222)) (drop (i32.const 333)) (unreachable) ) ) ) ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo) ;; CHECK: (func $try-call-optimize-terminating-tails (result i32) ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $try-call-optimize-terminating-tails (result i32) (try (do ;; Expressions that can throw should NOT be taken out of 'try' scope. (call $foo) (call $foo) (call $foo) (call $foo) (return (i32.const 0)) ) (catch_all (call $foo) (call $foo) (call $foo) (call $foo) (return (i32.const 0)) ) ) (i32.const 0) ) ;; CHECK: (func $try-call-optimize-expression-tails ;; CHECK-NEXT: (block $x ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (br $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (br $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-call-optimize-expression-tails (block $x (try (do ;; Expressions that can throw should NOT be taken out of 'try' scope. (call $foo) (call $foo) (call $foo) (br $x) ) (catch_all (call $foo) (call $foo) (call $foo) (br $x) ) ) (unreachable) ) ) ) binaryen-version_108/test/lit/passes/code-folding_enable-threads.wast000066400000000000000000000241621423707623100262070ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --code-folding --enable-threads -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_f32 (func (result f32))) ;; CHECK: (type $13 (func (param f32))) (type $13 (func (param f32))) (table 282 282 funcref) ;; CHECK: (memory $0 1 1) (memory $0 1 1) ;; CHECK: (table $0 282 282 funcref) ;; CHECK: (func $0 ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (call_indirect (type $13) ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (br $label$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 105) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (block $label$1 (if (i32.const 1) (block $label$3 (call_indirect (type $13) (block $label$4 (result f32) ;; but this type may change dangerously (nop) ;; fold this (br $label$3) ) (i32.const 105) ) (nop) ;; with this ) ) ) ) ;; CHECK: (func $negative-zero (result f32) ;; CHECK-NEXT: (if (result f32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $label$0 (result f32) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$1 (result f32) ;; CHECK-NEXT: (f32.const -0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $negative-zero (result f32) (if (result f32) (i32.const 0) (block $label$0 (result f32) (f32.const 0) ) (block $label$1 (result f32) (f32.const -0) ) ) ) ;; CHECK: (func $negative-zero-b (result f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$0 (result f32) ;; CHECK-NEXT: (f32.const -0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $negative-zero-b (result f32) (if (result f32) (i32.const 0) (block $label$0 (result f32) (f32.const -0) ) (block $label$1 (result f32) (f32.const -0) ) ) ) ;; CHECK: (func $negative-zero-c (result f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$0 (result f32) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $negative-zero-c (result f32) (if (result f32) (i32.const 0) (block $label$0 (result f32) (f32.const 0) ) (block $label$1 (result f32) (f32.const 0) ) ) ) ;; CHECK: (func $break-target-outside-of-return-merged-code ;; CHECK-NEXT: (block $label$A ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (block $label$B ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br_table $label$A $label$B ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block2 ;; CHECK-NEXT: (block $label$C ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br_table $label$A $label$C ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $break-target-outside-of-return-merged-code (block $label$A (if (unreachable) (block (block (block $label$B (if (unreachable) (br_table $label$A $label$B (unreachable) ) ) ) (return) ) ) (block (block $label$C (if (unreachable) (br_table $label$A $label$C ;; this all looks mergeable, but $label$A is outside (unreachable) ) ) ) (return) ) ) ) ) ;; CHECK: (func $break-target-inside-all-good ;; CHECK-NEXT: (block $folding-inner0 ;; CHECK-NEXT: (block $label$A ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (block $block4 ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block6 ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$B ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br_table $label$B $label$B ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) (func $break-target-inside-all-good (block $label$A (if (unreachable) (block (block (block $label$B (if (unreachable) (br_table $label$B $label$B (unreachable) ) ) ) (return) ) ) (block (block $label$C (if (unreachable) (br_table $label$C $label$C ;; this all looks mergeable, and is, B ~~ C (unreachable) ) ) ) (return) ) ) ) ) ;; CHECK: (func $leave-inner-block-type ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $leave-inner-block-type (block $label$1 (drop (block $label$2 (result i32) ;; leave this alone (otherwise, if we make it unreachable, we need to do more updating) (br_if $label$2 (unreachable) (unreachable) ) (drop (i32.const 1) ) (br $label$1) ) ) (drop (i32.const 1) ) ) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (memory $0 (shared 1 1)) (memory $0 (shared 1 1)) ;; CHECK: (export "func_2224" (func $0)) (export "func_2224" (func $0)) ;; CHECK: (func $0 (result i32) ;; CHECK-NEXT: (local $var$0 i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.load offset=22 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.atomic.load offset=22 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (result i32) (local $var$0 i32) (if (result i32) (i32.const 0) (i32.load offset=22 (local.get $var$0) ) (i32.atomic.load offset=22 (local.get $var$0) ) ) ) ) (module ;; CHECK: (type $0 (func)) (type $0 (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (global $global$0 (mut i32) (i32.const 10)) (global $global$0 (mut i32) (i32.const 10)) ;; CHECK: (func $determinism ;; CHECK-NEXT: (block $folding-inner0 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global$0 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $determinism (; 0 ;) (type $0) (block $label$1 (br_if $label$1 (i32.const 1) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (unreachable) ) (block $label$2 (br_if $label$2 (i32.const 0) ) (if (global.get $global$0) (block (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (unreachable) ) ) (unreachable) ) (if (global.get $global$0) (block (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (unreachable) ) ) (unreachable) ) ;; CHECK: (func $careful-of-the-switch (param $0 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (block $label$5 ;; CHECK-NEXT: (block $label$7 ;; CHECK-NEXT: (br_table $label$3 $label$7 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$8 ;; CHECK-NEXT: (br_table $label$3 $label$8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $careful-of-the-switch (param $0 i32) (block $label$1 (block $label$3 (block $label$5 (block $label$7 ;; this is block is equal to $label$8 when accounting for the internal 7/8 difference (br_table $label$3 $label$7 ;; the reference to $label$3 must remain valid, cannot hoist out of it! (i32.const 0) ) ) (br $label$1) ) (block $label$8 (br_table $label$3 $label$8 (i32.const 0) ) ) (br $label$1) ) (unreachable) ) ) ) binaryen-version_108/test/lit/passes/code-pushing-eh.wast000066400000000000000000000205401423707623100236720ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --code-pushing -all -S -o - | filecheck %s ;; The tests in this file test EffectAnalyzer, which is used by CodePushing. (module ;; CHECK: (tag $e (param i32)) (tag $e (param i32)) ;; CHECK: (func $cannot-push-past-call ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $cannot-push-past-call) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $cannot-push-past-call (local $x i32) (block $out ;; This local.set cannot be pushed down, because the call below can throw (local.set $x (i32.const 1)) (call $cannot-push-past-call) (drop (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $cannot-push-past-throw ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $cannot-push-past-throw (local $x i32) (block $out ;; This local.set cannot be pushed down, because there is 'throw' below (local.set $x (i32.const 1)) (throw $e (i32.const 0)) (drop (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $can-push-past-try ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $can-push-past-try (local $x i32) (block $out ;; This local.set can be pushed down, because the 'throw' below is going ;; to be caught by the inner catch_all (local.set $x (i32.const 1)) (try (do (throw $e (i32.const 0)) ) (catch_all) ) (drop (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo) ;; CHECK: (func $cannot-push-past-try ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $cannot-push-past-try (local $x i32) (block $out ;; This local.set cannot be pushed down, because the exception thrown by ;; 'call $foo' below may not be caught by 'catch $e' (local.set $x (i32.const 1)) (try (do (call $foo) ) (catch $e (drop (pop i32)) ) ) (drop (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $cannot-push-past-rethrow-within-catch ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (rethrow $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $cannot-push-past-rethrow-within-catch (local $x i32) (block $out ;; This local.set cannot be pushed down, because there is 'rethrow' within ;; the inner catch_all (local.set $x (i32.const 1)) (try $l0 (do (throw $e (i32.const 0)) ) (catch_all (rethrow $l0) ) ) (drop (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $can-push-past-try-delegate ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (try $l ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $can-push-past-try-delegate (local $x i32) (block $out ;; This local.set can be pushed down, because the 'throw' below is going ;; to be caught by the catch_all (local.set $x (i32.const 1)) (try $l (do (try (do (throw $e (i32.const 0)) ) (delegate $l) ) ) (catch_all) ) (drop (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $cannot-push-past-try-delegate ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (try $l ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $cannot-push-past-try-delegate (local $x i32) (block $out ;; This local.set cannot be pushed down, because the 'delegate' bypasses ;; the catch_all, making the whole 'try' throwable. (local.set $x (i32.const 1)) (try $l (do (try (do (throw $e (i32.const 0)) ) (delegate 2) ) ) (catch_all) ) (drop (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ) binaryen-version_108/test/lit/passes/code-pushing_ignore-implicit-traps.wast000066400000000000000000000452071423707623100276110ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --code-pushing --ignore-implicit-traps -S -o - | filecheck %s (module (memory 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (memory $0 1) ;; CHECK: (func $push1 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $push1 (local $x i32) (block $out (local.set $x (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $push2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $push2 (local $x i32) (local $y i32) (block $out (local.set $x (i32.const 1)) (local.set $y (i32.const 3)) (br_if $out (i32.const 2)) (drop (local.get $x)) (drop (local.get $y)) ) ) ;; CHECK: (func $push1-twice ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $push1-twice (local $x i32) (block $out (local.set $x (i32.const 1)) (br_if $out (i32.const 2)) (br_if $out (i32.const 3)) (drop (local.get $x)) ) ) ;; CHECK: (func $push1-twiceb ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $push1-twiceb (local $x i32) (block $out (local.set $x (i32.const 1)) (br_if $out (i32.const 2)) (nop) (br_if $out (i32.const 3)) (drop (local.get $x)) ) ) ;; CHECK: (func $push2-twice ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $push2-twice (local $x i32) (local $y i32) (block $out (local.set $x (i32.const 1)) (local.set $y (i32.const 3)) (br_if $out (i32.const 2)) (br_if $out (i32.const 2)) (drop (local.get $x)) (drop (local.get $y)) ) ) ;; CHECK: (func $ignore-last ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ignore-last (local $x i32) (block $out (local.set $x (i32.const 1)) (br_if $out (i32.const 2)) ) ) ;; CHECK: (func $ignore-last2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ignore-last2 (local $x i32) (block $out (local.set $x (i32.const 1)) (nop) (nop) (br_if $out (i32.const 2)) ) ) ;; CHECK: (func $push-if ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $push-if (local $x i32) (block $out (local.set $x (i32.const 1)) (if (i32.const 2) (nop)) (drop (local.get $x)) ) ) ;; CHECK: (func $push-dropped (result i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $push-dropped (result i32) (local $x i32) (block $out (result i32) (local.set $x (i32.const 1)) (drop (br_if $out (i32.const 2) (i32.const 3))) (drop (local.get $x)) (i32.const 4) ) ) ;; CHECK: (func $push-past-stuff ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (call $push-past-stuff) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $push-past-stuff (local $x i32) (block $out (local.set $x (i32.const 1)) (call $push-past-stuff) (drop (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $fail-then-push ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fail-then-push (local $x i32) (local $y i32) (block $out (local.set $x (i32.const 1)) (drop (local.get $x)) (br_if $out (i32.const 2)) (local.set $y (i32.const 1)) (br_if $out (i32.const 3)) (drop (local.get $x)) (drop (local.get $y)) ) ) ;; and now for stuff that should *not* be pushed ;; CHECK: (func $used ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $used (local $x i32) (block $out (local.set $x (i32.const 1)) (br_if $out (local.get $x)) (drop (local.get $x)) ) ) ;; CHECK: (func $not-sfa ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $not-sfa (local $x i32) (local.set $x (i32.const 1)) (block $out (local.set $x (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $not-sfa2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $not-sfa2 (local $x i32) (drop (local.get $x)) (block $out (local.set $x (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $used-out ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $used-out (local $x i32) (block $out (local.set $x (i32.const 1)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) (drop (local.get $x)) ) ;; CHECK: (func $value-might-interfere ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $value-might-interfere ;; but doesn't (local $x i32) (block $out (local.set $x (i32.load (i32.const 0))) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $value-interferes ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $value-interferes (local $x i32) (block $out (local.set $x (i32.load (i32.const 0))) (i32.store (i32.const 1) (i32.const 3)) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $value-interferes-accumulation ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $value-interferes-accumulation (local $x i32) (block $out (local.set $x (i32.load (i32.const 0))) (nop) (i32.store (i32.const 1) (i32.const 3)) (nop) (br_if $out (i32.const 2)) (drop (local.get $x)) ) ) ;; CHECK: (func $value-interferes-in-pushpoint ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $value-interferes) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $value-interferes-in-pushpoint (local $x i32) (block $out (local.set $x (i32.load (i32.const 0))) (if (i32.const 1) (call $value-interferes) ) (drop (local.get $x)) ) ) ;; CHECK: (func $values-might-interfere ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $push-dropped) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (call $push-dropped) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $values-might-interfere ;; they don't, as we keep the order - but here their side effects prevent pushing (local $x i32) (local $y i32) (block $out (local.set $x (call $push-dropped)) (local.set $y (call $push-dropped)) (br_if $out (i32.const 2)) (drop (local.get $x)) (drop (local.get $y)) ) ) ;; CHECK: (func $unpushed-interferes ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $push-dropped) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (call $push-dropped) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unpushed-interferes (local $x i32) (local $y i32) (block $out (local.set $x (call $push-dropped)) (local.set $y (call $push-dropped)) (br_if $out (i32.const 2)) (drop (local.get $x)) (drop (local.get $y)) ) (drop (local.get $y)) ;; $y can't be pushed, so x can't be ) ;; CHECK: (func $unpushed-ignorable ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unpushed-ignorable (local $x i32) (local $y i32) (block $out (local.set $x (i32.const 1)) (local.set $y (i32.const 3)) (br_if $out (i32.const 2)) (drop (local.get $x)) (drop (local.get $y)) ) (drop (local.get $x)) ;; $x can't be pushed, but y doesn't care ) ;; CHECK: (func $unpushed-ignorable-side-effect ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $push-dropped) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unpushed-ignorable-side-effect (local $x i32) (local $y i32) (block $out (local.set $x (call $push-dropped)) ;; $x can't be pushed, but y doesn't care (local.set $y (i32.const 3)) (br_if $out (i32.const 2)) (drop (local.get $x)) (drop (local.get $y)) ) ) ;; CHECK: (func $unpushed-side-effect-into-drop ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $push-dropped) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unpushed-side-effect-into-drop (local $x i32) (block $out (local.set $x (call $push-dropped)) (br_if $out (i32.const 1)) (drop (local.get $x)) ) ) ;; CHECK: (func $unpushed-side-effect-into-if ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $push-dropped) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unpushed-side-effect-into-if (local $x i32) (block $out (local.set $x (call $push-dropped)) (br_if $out (i32.const 1)) (if (local.get $x) (nop) ) ) ) ) binaryen-version_108/test/lit/passes/const-hoisting.wast000066400000000000000000000575501423707623100236760ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --const-hoisting -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $10-of-each ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1048575) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const -8193) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const -1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const -1048577) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8191) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $10-of-each (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes (drop (i32.const 0)) ;; 1 byte (drop (i32.const 63)) ;; 1 byte (drop (i32.const 64)) ;; 2 bytes (drop (i32.const 8191)) ;; 2 bytes (drop (i32.const 8192)) ;; 3 bytes (drop (i32.const 1048575)) ;; 3 bytes (drop (i32.const 1048576)) ;; 4 bytes (drop (i32.const -64)) ;; 1 byte (drop (i32.const -65)) ;; 2 bytes (drop (i32.const -8192)) ;; 2 bytes (drop (i32.const -8193)) ;; 3 bytes (drop (i32.const -1048576)) ;; 3 bytes (drop (i32.const -1048577)) ;; 4 bytes ) ;; CHECK: (func $floats-10-times ;; CHECK-NEXT: (local $0 f32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $floats-10-times (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes (drop (f32.const 0)) ;; 4 bytes (drop (f64.const 0)) ;; 8 bytes ) ;; CHECK: (func $too-few ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $too-few (drop (i32.const 8192)) ;; 3 bytes, need 6 appearances (drop (i32.const 8192)) (drop (i32.const 8192)) (drop (i32.const 8192)) (drop (i32.const 8192)) ) ;; CHECK: (func $just-enough ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $just-enough (drop (i32.const 8192)) ;; 3 bytes, need 6 appearances (drop (i32.const 8192)) (drop (i32.const 8192)) (drop (i32.const 8192)) (drop (i32.const 8192)) (drop (i32.const 8192)) ) ;; CHECK: (func $too-few-b ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $too-few-b (drop (i32.const 1048576)) ;; 4 bytes, need 4 appearances (drop (i32.const 1048576)) (drop (i32.const 1048576)) ) ;; CHECK: (func $enough-b ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $enough-b (drop (i32.const 1048576)) ;; 4 bytes, need 4 appearances (drop (i32.const 1048576)) (drop (i32.const 1048576)) (drop (i32.const 1048576)) ) ;; CHECK: (func $too-few-c ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $too-few-c (drop (f32.const 0)) ;; 4 bytes, need 4 appearances (drop (f32.const 0)) (drop (f32.const 0)) ) ;; CHECK: (func $enough-c ;; CHECK-NEXT: (local $0 f32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $enough-c (drop (f32.const 0)) ;; 4 bytes, need 4 appearances (drop (f32.const 0)) (drop (f32.const 0)) (drop (f32.const 0)) ) ;; CHECK: (func $too-few-d ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $too-few-d (drop (f64.const 0)) ;; 8 bytes, need 2 appearances ) ;; CHECK: (func $enough-d ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $enough-d (drop (f64.const 0)) ;; 4 bytes, need 4 appearances (drop (f64.const 0)) ) ) binaryen-version_108/test/lit/passes/dae-gc-refine-params.wast000066400000000000000000000515151423707623100245700ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --dae -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --dae --nominal -S -o - | filecheck %s --check-prefix NOMNL (module ;; CHECK: (type ${i32} (struct (field i32))) ;; NOMNL: (type ${} (struct_subtype data)) ;; NOMNL: (type ${i32} (struct_subtype (field i32) ${})) (type ${i32} (struct_subtype (field i32) ${})) ;; CHECK: (type ${} (struct )) (type ${} (struct)) ;; CHECK: (type ${i32_i64} (struct (field i32) (field i64))) ;; NOMNL: (type ${i32_i64} (struct_subtype (field i32) (field i64) ${i32})) (type ${i32_i64} (struct_subtype (field i32) (field i64) ${i32})) ;; CHECK: (type ${i32_f32} (struct (field i32) (field f32))) ;; CHECK: (type ${f64} (struct (field f64))) ;; NOMNL: (type ${i32_f32} (struct_subtype (field i32) (field f32) ${i32})) ;; NOMNL: (type ${f64} (struct_subtype (field f64) ${})) (type ${f64} (struct_subtype (field f64) ${})) (type ${i32_f32} (struct_subtype (field i32) (field f32) ${i32})) ;; CHECK: (func $call-various-params-no ;; CHECK-NEXT: (call $various-params-no ;; CHECK-NEXT: (call $get_{}) ;; CHECK-NEXT: (call $get_{i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $various-params-no ;; CHECK-NEXT: (call $get_{i32}) ;; CHECK-NEXT: (call $get_{f64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-various-params-no (type $none_=>_none) ;; NOMNL-NEXT: (call $various-params-no ;; NOMNL-NEXT: (call $get_{}) ;; NOMNL-NEXT: (call $get_{i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $various-params-no ;; NOMNL-NEXT: (call $get_{i32}) ;; NOMNL-NEXT: (call $get_{f64}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-various-params-no ;; The first argument gets {} and {i32}; the second {i32} and {f64}; none of ;; those pairs can be optimized. Note that we do not pass in all nulls, as ;; all nulls are identical and we could do other optimization work due to ;; that. (call $various-params-no (call $get_{}) (call $get_{i32}) ) (call $various-params-no (call $get_{i32}) (call $get_{f64}) ) ) ;; This function is called in ways that do not allow us to alter the types of ;; its parameters (see last function). ;; CHECK: (func $various-params-no (param $x (ref null ${})) (param $y (ref null ${})) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $various-params-no (type $ref?|${}|_ref?|${}|_=>_none) (param $x (ref null ${})) (param $y (ref null ${})) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $various-params-no (param $x (ref null ${})) (param $y (ref null ${})) ;; "Use" the locals to avoid other optimizations kicking in. (drop (local.get $x)) (drop (local.get $y)) ) ;; CHECK: (func $get_{} (result (ref null ${})) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $get_{} (type $none_=>_ref?|${}|) (result (ref null ${})) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $get_{} (result (ref null ${})) (unreachable) ) ;; CHECK: (func $get_{i32} (result (ref null ${i32})) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $get_{i32} (type $none_=>_ref?|${i32}|) (result (ref null ${i32})) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $get_{i32} (result (ref null ${i32})) (unreachable) ) ;; CHECK: (func $get_{f64} (result (ref null ${f64})) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $get_{f64} (type $none_=>_ref?|${f64}|) (result (ref null ${f64})) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $get_{f64} (result (ref null ${f64})) (unreachable) ) ;; CHECK: (func $call-various-params-yes ;; CHECK-NEXT: (call $various-params-yes ;; CHECK-NEXT: (call $get_null_{i32}) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (call $get_null_{i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $various-params-yes ;; CHECK-NEXT: (call $get_null_{i32}) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $get_null_{i32_i64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-various-params-yes (type $none_=>_none) ;; NOMNL-NEXT: (call $various-params-yes ;; NOMNL-NEXT: (call $get_null_{i32}) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: (call $get_null_{i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $various-params-yes ;; NOMNL-NEXT: (call $get_null_{i32}) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (call $get_null_{i32_i64}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-various-params-yes ;; The first argument gets {i32} and {i32}; the second {i32} and {i32_i64}; ;; both of those pairs can be optimized to {i32}. ;; There is also an i32 in the middle, which should not confuse us. (call $various-params-yes (call $get_null_{i32}) (i32.const 0) (call $get_null_{i32}) ) (call $various-params-yes (call $get_null_{i32}) (i32.const 1) (call $get_null_{i32_i64}) ) ) ;; This function is called in ways that *do* allow us to alter the types of ;; its parameters (see last function). ;; CHECK: (func $various-params-yes (param $x (ref null ${i32})) (param $i i32) (param $y (ref null ${i32})) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $various-params-yes (type $ref?|${i32}|_i32_ref?|${i32}|_=>_none) (param $x (ref null ${i32})) (param $i i32) (param $y (ref null ${i32})) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $i) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $various-params-yes (param $x (ref null ${})) (param $i i32) (param $y (ref null ${})) ;; "Use" the locals to avoid other optimizations kicking in. (drop (local.get $x)) (drop (local.get $i)) (drop (local.get $y)) ) ;; CHECK: (func $call-various-params-set ;; CHECK-NEXT: (call $various-params-set ;; CHECK-NEXT: (call $get_null_{i32}) ;; CHECK-NEXT: (call $get_null_{i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $various-params-set ;; CHECK-NEXT: (call $get_null_{i32}) ;; CHECK-NEXT: (call $get_null_{i32_i64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-various-params-set (type $none_=>_none) ;; NOMNL-NEXT: (call $various-params-set ;; NOMNL-NEXT: (call $get_null_{i32}) ;; NOMNL-NEXT: (call $get_null_{i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $various-params-set ;; NOMNL-NEXT: (call $get_null_{i32}) ;; NOMNL-NEXT: (call $get_null_{i32_i64}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-various-params-set ;; The first argument gets {i32} and {i32}; the second {i32} and {i32_i64; ;; both of those pairs can be optimized to {i32} (call $various-params-set (call $get_null_{i32}) (call $get_null_{i32}) ) (call $various-params-set (call $get_null_{i32}) (call $get_null_{i32_i64}) ) ) ;; This function is called in ways that *do* allow us to alter the types of ;; its parameters (see last function), however, we reuse the parameters by ;; writing to them, which causes problems in one case. ;; CHECK: (func $various-params-set (param $x (ref null ${i32})) (param $y (ref null ${i32})) ;; CHECK-NEXT: (local $2 (ref null ${})) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (ref.null ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (call $get_null_{i32_i64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $various-params-set (type $ref?|${i32}|_ref?|${i32}|_=>_none) (param $x (ref null ${i32})) (param $y (ref null ${i32})) ;; NOMNL-NEXT: (local $2 (ref null ${})) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (ref.null ${}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $y ;; NOMNL-NEXT: (call $get_null_{i32_i64}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $various-params-set (param $x (ref null ${})) (param $y (ref null ${})) ;; "Use" the locals to avoid other optimizations kicking in. (drop (local.get $x)) (drop (local.get $y)) ;; Write to $x a value that will not fit in the refined type, which will ;; force us to do a fixup: the param will get the new type, and a new local ;; will stay at the old type, and we will use that local throughout the ;; function. (local.set $x (ref.null ${})) (drop (local.get $x) ) ;; Write to $y in a way that does not cause any issue, and we should not do ;; any fixup while we refine the type. (local.set $y (call $get_null_{i32_i64})) (drop (local.get $y) ) ) ;; CHECK: (func $call-various-params-tee ;; CHECK-NEXT: (call $various-params-tee ;; CHECK-NEXT: (call $get_null_{i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-various-params-tee (type $none_=>_none) ;; NOMNL-NEXT: (call $various-params-tee ;; NOMNL-NEXT: (call $get_null_{i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-various-params-tee ;; The argument gets {i32}, which allows us to refine. (call $various-params-tee (call $get_null_{i32}) ) ) ;; CHECK: (func $various-params-tee (param $x (ref null ${i32})) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block (result (ref null ${i32})) ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (call $get_null_{i32_i64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $various-params-tee (type $ref?|${i32}|_=>_none) (param $x (ref null ${i32})) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block $block (result (ref null ${i32})) ;; NOMNL-NEXT: (local.tee $x ;; NOMNL-NEXT: (call $get_null_{i32_i64}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $various-params-tee (param $x (ref null ${})) ;; "Use" the locals to avoid other optimizations kicking in. (drop (local.get $x)) ;; Write to $x in a way that allows us to make the type more specific. We ;; must also update the type of the tee (if we do not, a validation error ;; would occur), and that will also cause the block's type to update as well. (drop (block (result (ref null ${})) (local.tee $x (call $get_null_{i32_i64})) ) ) ) ;; CHECK: (func $call-various-params-null ;; CHECK-NEXT: (call $various-params-null ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null ${i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $get_null_{i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $various-params-null ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null ${i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null ${i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-various-params-null (type $none_=>_none) ;; NOMNL-NEXT: (call $various-params-null ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.null ${i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $get_null_{i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $various-params-null ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.null ${i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.null ${i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-various-params-null ;; The first argument gets non-null values, allowing us to refine it. The ;; second gets only one. (call $various-params-null (ref.as_non_null (ref.null ${i32})) (call $get_null_{i32}) ) (call $various-params-null (ref.as_non_null (ref.null ${i32})) (ref.as_non_null (ref.null ${i32})) ) ) ;; This function is called in ways that allow us to make the first parameter ;; non-nullable. ;; CHECK: (func $various-params-null (param $x (ref ${i32})) (param $y (ref null ${i32})) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $various-params-null (type $ref|${i32}|_ref?|${i32}|_=>_none) (param $x (ref ${i32})) (param $y (ref null ${i32})) ;; NOMNL-NEXT: (local $temp i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (local.get $temp) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $various-params-null (param $x (ref null ${})) (param $y (ref null ${})) (local $temp i32) ;; "Use" the locals to avoid other optimizations kicking in. (drop (local.get $x)) (drop (local.get $y)) ;; Use a local in this function as well, which should be ignored by this pass ;; (when we scan and update all local.gets and sets, we should only do so on ;; parameters, and not vars - and we can crash if we scan/update things we ;; should not). (local.set $temp (local.get $temp)) ) ;; CHECK: (func $call-various-params-middle ;; CHECK-NEXT: (call $various-params-middle ;; CHECK-NEXT: (call $get_null_{i32_i64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $various-params-middle ;; CHECK-NEXT: (call $get_null_{i32_f32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-various-params-middle (type $none_=>_none) ;; NOMNL-NEXT: (call $various-params-middle ;; NOMNL-NEXT: (call $get_null_{i32_i64}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $various-params-middle ;; NOMNL-NEXT: (call $get_null_{i32_f32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-various-params-middle ;; The argument gets {i32_i64} and {i32_f32}. This allows us to refine from ;; {} to {i32}, a type "in the middle". (call $various-params-middle (call $get_null_{i32_i64}) ) (call $various-params-middle (call $get_null_{i32_f32}) ) ) ;; CHECK: (func $various-params-middle (param $x (ref null ${i32})) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $various-params-middle (type $ref?|${i32}|_=>_none) (param $x (ref null ${i32})) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $various-params-middle (param $x (ref null ${})) ;; "Use" the local to avoid other optimizations kicking in. (drop (local.get $x)) ) ;; CHECK: (func $unused-and-refinable ;; CHECK-NEXT: (local $0 (ref null data)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $unused-and-refinable (type $none_=>_none) ;; NOMNL-NEXT: (local $0 (ref null data)) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $unused-and-refinable (param $0 dataref) ;; This function does not use $0. It is called with ${}, so it is also ;; a parameter whose type we can refine. Do not do both operations: instead, ;; just remove it because it is ignored, without altering the type (handling ;; both operations would introduce some corner cases, and it just isn't worth ;; handling them if the param is completely unused anyhow). We should see in ;; the test output that the local $0 (the unused param) becomes a local ;; because it is unused, and that local does *not* have its type refined to ;; ${} (it will however be changed to be nullable, which it must be as a ;; local). ) ;; CHECK: (func $call-unused-and-refinable ;; CHECK-NEXT: (call $unused-and-refinable) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-unused-and-refinable (type $none_=>_none) ;; NOMNL-NEXT: (call $unused-and-refinable) ;; NOMNL-NEXT: ) (func $call-unused-and-refinable (call $unused-and-refinable (struct.new_default ${}) ) ) ;; CHECK: (func $non-nullable-fixup (param $0 (ref ${})) ;; CHECK-NEXT: (local $1 (ref null data)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $non-nullable-fixup (type $ref|${}|_=>_none) (param $0 (ref ${})) ;; NOMNL-NEXT: (local $1 (ref null data)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $non-nullable-fixup (param $0 dataref) ;; Use the param to avoid other opts removing it, and to force us to do a ;; fixup when we refine the param's type. When doing so, we must handle the ;; fact that the new local's type is non-nullable. (local.set $0 (local.get $0) ) ) ;; CHECK: (func $call-non-nullable-fixup ;; CHECK-NEXT: (call $non-nullable-fixup ;; CHECK-NEXT: (struct.new_default ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-non-nullable-fixup (type $none_=>_none) ;; NOMNL-NEXT: (call $non-nullable-fixup ;; NOMNL-NEXT: (struct.new_default ${}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-non-nullable-fixup (call $non-nullable-fixup (struct.new_default ${}) ) ) ;; CHECK: (func $call-update-null ;; CHECK-NEXT: (call $update-null ;; CHECK-NEXT: (ref.null ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $update-null ;; CHECK-NEXT: (struct.new_default ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-update-null (type $none_=>_none) ;; NOMNL-NEXT: (call $update-null ;; NOMNL-NEXT: (ref.null ${}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $update-null ;; NOMNL-NEXT: (struct.new_default ${}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-update-null ;; Call a function with one of the parameters a null of a type that we can ;; update in order to get a better LUB. (call $update-null (ref.null any) ) (call $update-null (struct.new_default ${}) ) ) ;; CHECK: (func $update-null (param $x (ref null ${})) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $update-null (type $ref?|${}|_=>_none) (param $x (ref null ${})) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $update-null (param $x (ref null any)) ;; "Use" the param to avoid other optimizations kicking in. We should only ;; see the type of the param refined to a null ${} after updating the null ;; in the caller. (drop (local.get $x)) ) ;; CHECK: (func $get_null_{i32} (result (ref null ${i32})) ;; CHECK-NEXT: (ref.null ${i32}) ;; CHECK-NEXT: ) ;; NOMNL: (func $get_null_{i32} (type $none_=>_ref?|${i32}|) (result (ref null ${i32})) ;; NOMNL-NEXT: (ref.null ${i32}) ;; NOMNL-NEXT: ) (func $get_null_{i32} (result (ref null ${i32})) ;; Helper function that returns a null value of ${i32}. We use this instead of ;; a direct ref.null because those can be rewritten by LUBFinder. (ref.null ${i32}) ) ;; CHECK: (func $get_null_{i32_i64} (result (ref null ${i32_i64})) ;; CHECK-NEXT: (ref.null ${i32_i64}) ;; CHECK-NEXT: ) ;; NOMNL: (func $get_null_{i32_i64} (type $none_=>_ref?|${i32_i64}|) (result (ref null ${i32_i64})) ;; NOMNL-NEXT: (ref.null ${i32_i64}) ;; NOMNL-NEXT: ) (func $get_null_{i32_i64} (result (ref null ${i32_i64})) (ref.null ${i32_i64}) ) ;; CHECK: (func $get_null_{i32_f32} (result (ref null ${i32_f32})) ;; CHECK-NEXT: (ref.null ${i32_f32}) ;; CHECK-NEXT: ) ;; NOMNL: (func $get_null_{i32_f32} (type $none_=>_ref?|${i32_f32}|) (result (ref null ${i32_f32})) ;; NOMNL-NEXT: (ref.null ${i32_f32}) ;; NOMNL-NEXT: ) (func $get_null_{i32_f32} (result (ref null ${i32_f32})) (ref.null ${i32_f32}) ) ) binaryen-version_108/test/lit/passes/dae-gc-refine-return.wast000066400000000000000000000616301423707623100246230ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --dae -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --dae --nominal -S -o - | filecheck %s --check-prefix NOMNL (module ;; CHECK: (type $return_{} (func (result (ref ${})))) ;; NOMNL: (type $return_{} (func_subtype (result (ref ${})) func)) (type $return_{} (func (result (ref ${})))) ;; CHECK: (type ${i32} (struct (field i32))) ;; CHECK: (type ${i32_i64} (struct (field i32) (field i64))) ;; CHECK: (type ${i32_f32} (struct (field i32) (field f32))) ;; NOMNL: (type ${} (struct_subtype data)) ;; NOMNL: (type ${i32} (struct_subtype (field i32) ${})) ;; NOMNL: (type ${i32_i64} (struct_subtype (field i32) (field i64) ${i32})) ;; NOMNL: (type ${i32_f32} (struct_subtype (field i32) (field f32) ${i32})) (type ${i32_f32} (struct_subtype (field i32) (field f32) ${i32})) (type ${i32_i64} (struct_subtype (field i32) (field i64) ${i32})) (type ${i32} (struct_subtype (field i32) ${})) ;; CHECK: (type ${} (struct )) (type ${} (struct)) (table 1 1 funcref) ;; We cannot refine the return type if nothing is actually returned. ;; CHECK: (func $refine-return-no-return (result anyref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-no-return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-no-return (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-no-return) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $refine-return-no-return (result anyref) ;; Call this function, so that we attempt to optimize it. Note that we do not ;; just drop the result, as that would cause the drop optimizations to kick ;; in. (local $temp anyref) (local.set $temp (call $refine-return-no-return)) (unreachable) ) ;; We cannot refine the return type if it is already the best it can be. ;; CHECK: (func $refine-return-no-refining (result anyref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-no-refining) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $any) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-no-refining (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local $any anyref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-no-refining) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $any) ;; NOMNL-NEXT: ) (func $refine-return-no-refining (result anyref) (local $temp anyref) (local $any anyref) (local.set $temp (call $refine-return-no-refining)) (local.get $any) ) ;; Refine the return type based on the value flowing out. ;; CHECK: (func $refine-return-flow (result funcref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $func funcref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-flow) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-flow (type $none_=>_funcref) (result funcref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local $func funcref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-flow) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) (func $refine-return-flow (result anyref) (local $temp anyref) (local $func funcref) (local.set $temp (call $refine-return-flow)) (local.get $func) ) ;; CHECK: (func $call-refine-return-flow (result funcref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $call-refine-return-flow) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result funcref) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $refine-return-flow) ;; CHECK-NEXT: (call $refine-return-flow) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-refine-return-flow (type $none_=>_funcref) (result funcref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $call-refine-return-flow) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if (result funcref) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (call $refine-return-flow) ;; NOMNL-NEXT: (call $refine-return-flow) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-refine-return-flow (result anyref) (local $temp anyref) (local.set $temp (call $call-refine-return-flow)) ;; After refining the return value of the above function, refinalize will ;; update types here, which will lead to updating the if, and then the entire ;; function's return value. (if (result anyref) (i32.const 1) (call $refine-return-flow) (call $refine-return-flow) ) ) ;; Refine the return type based on a return. ;; CHECK: (func $refine-return-return (result funcref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $func funcref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-return (type $none_=>_funcref) (result funcref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local $func funcref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-return) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $refine-return-return (result anyref) (local $temp anyref) (local $func funcref) (local.set $temp (call $refine-return-return)) (return (local.get $func)) ) ;; Refine the return type based on multiple values. ;; CHECK: (func $refine-return-many (result funcref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $func funcref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-many) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-many (type $none_=>_funcref) (result funcref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local $func funcref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-many) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) (func $refine-return-many (result anyref) (local $temp anyref) (local $func funcref) (local.set $temp (call $refine-return-many)) (if (i32.const 1) (return (local.get $func)) ) (if (i32.const 2) (return (local.get $func)) ) (local.get $func) ) ;; CHECK: (func $refine-return-many-blocked (result anyref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $func funcref) ;; CHECK-NEXT: (local $data (ref null data)) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-many-blocked) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-many-blocked (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local $func funcref) ;; NOMNL-NEXT: (local $data (ref null data)) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-many-blocked) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) (func $refine-return-many-blocked (result anyref) (local $temp anyref) (local $func funcref) (local $data (ref null data)) (local.set $temp (call $refine-return-many-blocked)) (if (i32.const 1) (return (local.get $func)) ) (if (i32.const 2) ;; The refined return value is blocked by this return. (return (local.get $data)) ) (local.get $func) ) ;; CHECK: (func $refine-return-many-blocked-2 (result anyref) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $func funcref) ;; CHECK-NEXT: (local $data (ref null data)) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-many-blocked-2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-many-blocked-2 (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local $func funcref) ;; NOMNL-NEXT: (local $data (ref null data)) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-many-blocked-2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) (func $refine-return-many-blocked-2 (result anyref) (local $temp anyref) (local $func funcref) (local $data (ref null data)) (local.set $temp (call $refine-return-many-blocked-2)) (if (i32.const 1) (return (local.get $func)) ) (if (i32.const 2) (return (local.get $func)) ) ;; The refined return value is blocked by this value. (local.get $data) ) ;; CHECK: (func $refine-return-many-middle (result (ref null ${i32})) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local ${i32_i64} (ref null ${i32_i64})) ;; CHECK-NEXT: (local ${i32_f32} (ref null ${i32_f32})) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $refine-return-many-middle) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get ${i32_i64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get ${i32_f32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-many-middle (type $none_=>_ref?|${i32}|) (result (ref null ${i32})) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local ${i32_i64} (ref null ${i32_i64})) ;; NOMNL-NEXT: (local ${i32_f32} (ref null ${i32_f32})) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (call $refine-return-many-middle) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get ${i32_i64}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get ${i32_f32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $refine-return-many-middle (result anyref) (local $temp anyref) (local ${i32_i64} (ref null ${i32_i64})) (local ${i32_f32} (ref null ${i32_f32})) (local.set $temp (call $refine-return-many-middle)) ;; Return two different struct types, with an LUB that is not equal to either ;; of them. (if (i32.const 1) (return (local.get ${i32_i64})) ) (return (local.get ${i32_f32})) ) ;; We can refine the return types of tuples. ;; CHECK: (func $refine-return-tuple (result funcref i32) ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (local $func funcref) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (call $refine-return-tuple) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $refine-return-tuple (type $none_=>_funcref_i32) (result funcref i32) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (local $func funcref) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (tuple.extract 0 ;; NOMNL-NEXT: (call $refine-return-tuple) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (tuple.make ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $refine-return-tuple (result anyref i32) (local $temp anyref) (local $func funcref) (local.set $temp (tuple.extract 0 (call $refine-return-tuple) ) ) (tuple.make (local.get $func) (i32.const 1) ) ) ;; This function does a return call of the one after it. The one after it ;; returns a ref.func of this one. They both begin by returning a funcref; ;; after refining the return type of the second function, it will have a more ;; specific type (which is ok as subtyping is allowed with tail calls). ;; CHECK: (func $do-return-call (result funcref) ;; CHECK-NEXT: (return_call $return-ref-func) ;; CHECK-NEXT: ) ;; NOMNL: (func $do-return-call (type $none_=>_funcref) (result funcref) ;; NOMNL-NEXT: (return_call $return-ref-func) ;; NOMNL-NEXT: ) (func $do-return-call (result funcref) (return_call $return-ref-func) ) ;; CHECK: (func $return-ref-func (result (ref $none_=>_funcref)) ;; CHECK-NEXT: (ref.func $do-return-call) ;; CHECK-NEXT: ) ;; NOMNL: (func $return-ref-func (type $none_=>_ref|none_->_funcref|) (result (ref $none_=>_funcref)) ;; NOMNL-NEXT: (ref.func $do-return-call) ;; NOMNL-NEXT: ) (func $return-ref-func (result funcref) (ref.func $do-return-call) ) ;; Show that we can optimize the return type of a function that does a tail ;; call. ;; CHECK: (func $tail-callee (result (ref ${})) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-callee (type $return_{}) (result (ref ${})) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $tail-callee (result (ref ${})) (unreachable) ) ;; CHECK: (func $tail-caller-yes (result (ref ${})) ;; CHECK-NEXT: (return_call $tail-callee) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-caller-yes (type $return_{}) (result (ref ${})) ;; NOMNL-NEXT: (return_call $tail-callee) ;; NOMNL-NEXT: ) (func $tail-caller-yes (result anyref) ;; This function's return type can be refined because of this call, whose ;; target's return type is more specific than anyref. (return_call $tail-callee) ) ;; CHECK: (func $tail-caller-no (result anyref) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return_call $tail-callee) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-caller-no (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $any anyref) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return_call $tail-callee) ;; NOMNL-NEXT: ) (func $tail-caller-no (result anyref) (local $any anyref) ;; This function's return type cannot be refined because of another return ;; whose type prevents it. (if (i32.const 1) (return (local.get $any)) ) (return_call $tail-callee) ) ;; CHECK: (func $tail-call-caller ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-caller-yes) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-caller-no) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-call-caller (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $tail-caller-yes) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $tail-caller-no) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-call-caller ;; Call the functions to cause optimization to happen. (drop (call $tail-caller-yes) ) (drop (call $tail-caller-no) ) ) ;; As above, but with an indirect tail call. ;; CHECK: (func $tail-callee-indirect (result (ref ${})) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-callee-indirect (type $return_{}) (result (ref ${})) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $tail-callee-indirect (result (ref ${})) (unreachable) ) ;; CHECK: (func $tail-caller-indirect-yes (result (ref ${})) ;; CHECK-NEXT: (return_call_indirect $0 (type $return_{}) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-caller-indirect-yes (type $return_{}) (result (ref ${})) ;; NOMNL-NEXT: (return_call_indirect $0 (type $return_{}) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-caller-indirect-yes (result anyref) (return_call_indirect (type $return_{}) (i32.const 0)) ) ;; CHECK: (func $tail-caller-indirect-no (result anyref) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return_call_indirect $0 (type $return_{}) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-caller-indirect-no (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $any anyref) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return_call_indirect $0 (type $return_{}) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-caller-indirect-no (result anyref) (local $any anyref) (if (i32.const 1) (return (local.get $any)) ) (return_call_indirect (type $return_{}) (i32.const 0)) ) ;; CHECK: (func $tail-call-caller-indirect ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-caller-indirect-yes) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-caller-indirect-no) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-call-caller-indirect (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $tail-caller-indirect-yes) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $tail-caller-indirect-no) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-call-caller-indirect (drop (call $tail-caller-indirect-yes) ) (drop (call $tail-caller-indirect-no) ) ) ;; As above, but with a tail call by function reference. ;; CHECK: (func $tail-callee-call_ref (result (ref ${})) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-callee-call_ref (type $return_{}) (result (ref ${})) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $tail-callee-call_ref (result (ref ${})) (unreachable) ) ;; CHECK: (func $tail-caller-call_ref-yes (result (ref ${})) ;; CHECK-NEXT: (local $return_{} (ref null $return_{})) ;; CHECK-NEXT: (return_call_ref ;; CHECK-NEXT: (local.get $return_{}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-caller-call_ref-yes (type $return_{}) (result (ref ${})) ;; NOMNL-NEXT: (local $return_{} (ref null $return_{})) ;; NOMNL-NEXT: (return_call_ref ;; NOMNL-NEXT: (local.get $return_{}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-caller-call_ref-yes (result anyref) (local $return_{} (ref null $return_{})) (return_call_ref (local.get $return_{})) ) ;; CHECK: (func $tail-caller-call_ref-no (result anyref) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (local $return_{} (ref null $return_{})) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return_call_ref ;; CHECK-NEXT: (local.get $return_{}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-caller-call_ref-no (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $any anyref) ;; NOMNL-NEXT: (local $return_{} (ref null $return_{})) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return_call_ref ;; NOMNL-NEXT: (local.get $return_{}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tail-caller-call_ref-no (result anyref) (local $any anyref) (local $return_{} (ref null $return_{})) (if (i32.const 1) (return (local.get $any)) ) (return_call_ref (local.get $return_{})) ) ;; CHECK: (func $tail-caller-call_ref-unreachable ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-caller-call_ref-unreachable (type $none_=>_none) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $tail-caller-call_ref-unreachable (result anyref) ;; An unreachable means there is no function signature to even look at. We ;; should not hit an assertion on such things. (return_call_ref (unreachable)) ) ;; CHECK: (func $tail-call-caller-call_ref ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-caller-call_ref-yes) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-caller-call_ref-no) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $tail-caller-call_ref-unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $tail-call-caller-call_ref (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $tail-caller-call_ref-yes) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $tail-caller-call_ref-no) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $tail-caller-call_ref-unreachable) ;; NOMNL-NEXT: ) (func $tail-call-caller-call_ref (drop (call $tail-caller-call_ref-yes) ) (drop (call $tail-caller-call_ref-no) ) (drop (call $tail-caller-call_ref-unreachable) ) ) ;; CHECK: (func $update-null (param $x i32) (param $y i32) (result (ref null ${i32})) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (struct.new_default ${i32_f32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (ref.null ${i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (struct.new_default ${i32_i64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $update-null (type $i32_i32_=>_ref?|${i32}|) (param $x i32) (param $y i32) (result (ref null ${i32})) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (struct.new_default ${i32_f32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (ref.null ${i32}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (struct.new_default ${i32_i64}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $update-null (param $x i32) (param $y i32) (result anyref) ;; Of the three returns here, the null can be updated, and the LUB is ;; determined by the other two, and is their shared parent ${}. (if (local.get $x) (if (local.get $y) (return (struct.new ${i32_f32})) (return (ref.null any)) ) (return (struct.new ${i32_i64})) ) ) ;; CHECK: (func $call-update-null (result anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $update-null ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $update-null ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-update-null (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $update-null ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $update-null ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-update-null (result anyref) ;; Call $update-null so it gets optimized. (Call it with various values so ;; that other opts do not inline the constants.) (drop ($call $update-null (i32.const 0) (i32.const 1) ) ) ($call $update-null (i32.const 1) (i32.const 0) ) ) ) binaryen-version_108/test/lit/passes/dae-gc.wast000066400000000000000000000156401423707623100220400ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: foreach %s %t wasm-opt -all --dae -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt -all --dae --nominal -S -o - | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type ${} (struct )) ;; NOMNL: (type ${} (struct_subtype data)) (type ${} (struct)) ;; CHECK: (func $foo ;; CHECK-NEXT: (call $bar) ;; CHECK-NEXT: ) ;; NOMNL: (func $foo (type $none_=>_none) ;; NOMNL-NEXT: (call $bar) ;; NOMNL-NEXT: ) (func $foo (call $bar (i31.new (i32.const 1) ) ) ) ;; CHECK: (func $bar ;; CHECK-NEXT: (local $0 (ref null i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i31.new ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $bar (type $none_=>_none) ;; NOMNL-NEXT: (local $0 (ref null i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.tee $0 ;; NOMNL-NEXT: (i31.new ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.tee $0 ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $bar (param $0 i31ref) (drop ;; after the parameter is removed, we create a nullable local to replace it, ;; and must update the tee's type accordingly to avoid a validation error, ;; and also add a ref.as_non_null so that the outside still receives the ;; same type as before (local.tee $0 (i31.new (i32.const 2) ) ) ) ;; test for an unreachable tee, whose type must be unreachable even after ;; the change (the tee would need to be dropped if it were not unreachable, ;; so the correctness in this case is visible in the output) (local.tee $0 (unreachable) ) ) ;; a function that gets an rtt that is never used. we cannot create a local for ;; that parameter, as it is not defaultable, so do not remove the parameter. ;; CHECK: (func $get-rtt (param $0 (rtt ${})) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $get-rtt (type $rtt_${}_=>_none) (param $0 (rtt ${})) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $get-rtt (param $0 (rtt ${})) (nop) ) ;; CHECK: (func $send-rtt ;; CHECK-NEXT: (call $get-rtt ;; CHECK-NEXT: (rtt.canon ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $send-rtt (type $none_=>_none) ;; NOMNL-NEXT: (call $get-rtt ;; NOMNL-NEXT: (rtt.canon ${}) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $send-rtt (call $get-rtt (rtt.canon ${}) ) ) ) ;; Test ref.func and ref.null optimization of constant parameter values. (module ;; CHECK: (func $foo (param $0 (ref $none_=>_none)) ;; CHECK-NEXT: (local $1 (ref null $none_=>_none)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.func $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $foo (type $ref|none_->_none|_=>_none) (param $0 (ref $none_=>_none)) ;; NOMNL-NEXT: (local $1 (ref null $none_=>_none)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (ref.func $a) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $foo (param $x (ref func)) (param $y (ref func)) ;; "Use" the params to avoid other optimizations kicking in. (drop (local.get $x)) (drop (local.get $y)) ) ;; CHECK: (func $call-foo ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (ref.func $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (ref.func $c) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-foo (type $none_=>_none) ;; NOMNL-NEXT: (call $foo ;; NOMNL-NEXT: (ref.func $b) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $foo ;; NOMNL-NEXT: (ref.func $c) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-foo ;; Call $foo with a constant function in the first param, which we ;; can optimize, but different ones in the second. (call $foo (ref.func $a) (ref.func $b) ) (call $foo (ref.func $a) (ref.func $c) ) ) ;; CHECK: (func $bar (param $0 (ref null $none_=>_none)) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $bar (type $ref?|none_->_none|_=>_none) (param $0 (ref null $none_=>_none)) ;; NOMNL-NEXT: (local $1 anyref) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (ref.null func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $bar (param $x (ref null any)) (param $y (ref null any)) ;; "Use" the params to avoid other optimizations kicking in. (drop (local.get $x)) (drop (local.get $y)) ) ;; CHECK: (func $call-bar ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (ref.null $none_=>_none) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (ref.func $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $call-bar (type $none_=>_none) ;; NOMNL-NEXT: (call $bar ;; NOMNL-NEXT: (ref.null $none_=>_none) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $bar ;; NOMNL-NEXT: (ref.func $a) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $call-bar ;; Call with nulls. Mixing nulls is fine as they all have the same value, and ;; we can optimize. However, mixing a null with a reference stops us in the ;; second param. (call $bar (ref.null func) (ref.null func) ) (call $bar (ref.null any) (ref.func $a) ) ) ;; Helper functions so we have something to take the reference of. ;; CHECK: (func $a ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $a (type $none_=>_none) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $a) ;; CHECK: (func $b ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $b (type $none_=>_none) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $b) ;; CHECK: (func $c ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $c (type $none_=>_none) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $c) ) binaryen-version_108/test/lit/passes/dae-optimizing.wast000066400000000000000000000057241423707623100236420ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --dae-optimizing -S -o - | filecheck %s (module (type $0 (func (param f32) (result f32))) (type $1 (func (param f64 f32 f32 f64 f32 i64 f64) (result i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $none_=>_f32 (func (result f32))) ;; CHECK: (type $2 (func (param f64 f32 f32 f64 f32 i32 i32 f64) (result i32))) (type $2 (func (param f64 f32 f32 f64 f32 i32 i32 f64) (result i32))) ;; CHECK: (global $global$0 (mut i32) (i32.const 10)) (global $global$0 (mut i32) (i32.const 10)) ;; CHECK: (func $0 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result f32) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 33554432) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $label$2 (result f32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -11) ;; CHECK-NEXT: ) (func $0 (; 0 ;) (type $1) (param $0 f64) (param $1 f32) (param $2 f32) (param $3 f64) (param $4 f32) (param $5 i64) (param $6 f64) (result i32) (local $7 i32) (local $8 i32) (if (local.tee $7 (i32.const 33554432) ) (drop (loop $label$2 (result f32) (if (global.get $global$0) (return (local.get $7) ) ) (local.set $8 (block $label$4 (result i32) (drop (local.tee $7 (local.get $8) ) ) (i32.const 0) ) ) (br_if $label$2 (local.get $7) ) (f32.const 1) ) ) (drop (call $1 (f32.const 1) ) ) ) (i32.const -11) ) ;; CHECK: (func $1 (result f32) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) (func $1 (; 1 ;) (type $0) (param $0 f32) (result f32) (f32.const 0) ) ;; CHECK: (func $2 (param $0 f64) (param $1 f32) (param $2 f32) (param $3 f64) (param $4 f32) (param $5 i32) (param $6 i32) (param $7 f64) (result i32) ;; CHECK-NEXT: (call $0) ;; CHECK-NEXT: ) (func $2 (; 2 ;) (type $2) (param $0 f64) (param $1 f32) (param $2 f32) (param $3 f64) (param $4 f32) (param $5 i32) (param $6 i32) (param $7 f64) (result i32) (call $0 (f64.const 1) (f32.const 1) (f32.const 1) (f64.const 1) (f32.const 1) (i64.const 1) (f64.const 1) ) ) ) binaryen-version_108/test/lit/passes/dae_all-features.wast000066400000000000000000000400361423707623100241120ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --dae --all-features -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $f64_=>_none (func (param f64))) ;; CHECK: (table $0 2 2 funcref) ;; CHECK: (elem (i32.const 0) $a9 $c8) ;; CHECK: (export "a8" (func $a8)) (export "a8" (func $a8)) (table 2 2 funcref) (elem (i32.const 0) $a9 $c8) ;; CHECK: (func $a ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $a (param $x i32)) ;; CHECK: (func $b ;; CHECK-NEXT: (call $a) ;; CHECK-NEXT: ) (func $b (call $a (i32.const 1)) ;; best case scenario ) ;; CHECK: (func $a1 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $a1 (param $x i32) (unreachable) ) ;; CHECK: (func $b1 ;; CHECK-NEXT: (call $a1) ;; CHECK-NEXT: ) (func $b1 (call $a1 (i32.const 2)) ;; same value in both, so works ) ;; CHECK: (func $b11 ;; CHECK-NEXT: (call $a1) ;; CHECK-NEXT: ) (func $b11 (call $a1 (i32.const 2)) ) ;; CHECK: (func $a2 (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a2 (param $x i32) (drop (local.get $x)) ) ;; CHECK: (func $b2 ;; CHECK-NEXT: (call $a2 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b2 (call $a2 (i32.const 3)) ;; different value! ) ;; CHECK: (func $b22 ;; CHECK-NEXT: (call $a2 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b22 (call $a2 (i32.const 4)) ) ;; CHECK: (func $a3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a3 (param $x i32) (drop (i32.const -1)) ;; diff value, but at least unused, so no need to send ) ;; CHECK: (func $b3 ;; CHECK-NEXT: (call $a3) ;; CHECK-NEXT: ) (func $b3 (call $a3 (i32.const 3)) ) ;; CHECK: (func $b33 ;; CHECK-NEXT: (call $a3) ;; CHECK-NEXT: ) (func $b33 (call $a3 (i32.const 4)) ) ;; CHECK: (func $a4 (param $x i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $a4 (param $x i32) ;; diff value, but with effects ) ;; CHECK: (func $b4 ;; CHECK-NEXT: (call $a4 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b4 (call $a4 (unreachable)) ) ;; CHECK: (func $b43 ;; CHECK-NEXT: (call $a4 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b43 (call $a4 (i32.const 4)) ) ;; CHECK: (func $a5 ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a5 (param $x i32) (param $y f64) ;; optimize two (drop (local.get $x)) (drop (local.get $y)) ) ;; CHECK: (func $b5 ;; CHECK-NEXT: (call $a5) ;; CHECK-NEXT: ) (func $b5 (call $a5 (i32.const 1) (f64.const 3.14159)) ) ;; CHECK: (func $a6 (param $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a6 (param $x i32) (param $y f64) ;; optimize just one (drop (local.get $x)) (drop (local.get $y)) ) ;; CHECK: (func $b6 ;; CHECK-NEXT: (call $a6 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b6 (call $a6 (unreachable) (f64.const 3.14159)) ) ;; CHECK: (func $a7 (param $0 f64) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a7 (param $x i32) (param $y f64) ;; optimize just the other one (drop (local.get $x)) (drop (local.get $y)) ) ;; CHECK: (func $b7 ;; CHECK-NEXT: (call $a7 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b7 (call $a7 (i32.const 1) (unreachable)) ) ;; CHECK: (func $a8 (param $x i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $a8 (param $x i32)) ;; exported, do not optimize ;; CHECK: (func $b8 ;; CHECK-NEXT: (call $a8 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b8 (call $a8 (i32.const 1)) ) ;; CHECK: (func $a9 (param $x i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $a9 (param $x i32)) ;; tabled, do not optimize ;; CHECK: (func $b9 ;; CHECK-NEXT: (call $a9 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b9 (call $a9 (i32.const 1)) ) ;; CHECK: (func $a10 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $a10) ;; CHECK-NEXT: (call $a10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a10 (param $x i32) ;; recursion (call $a10 (i32.const 1)) (call $a10 (i32.const 1)) ) ;; CHECK: (func $a11 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (call $a11) ;; CHECK-NEXT: (call $a11) ;; CHECK-NEXT: ) (func $a11 (param $x i32) ;; partially successful recursion (call $a11 (i32.const 1)) (call $a11 (i32.const 2)) ) ;; CHECK: (func $a12 (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $a12 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $a12 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a12 (param $x i32) ;; unsuccessful recursion (drop (local.get $x)) (call $a12 (i32.const 1)) (call $a12 (i32.const 2)) ) ;; return values ;; CHECK: (func $c1 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (call $c2) ;; CHECK-NEXT: (call $c3) ;; CHECK-NEXT: (call $c3) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $c4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $c4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $c5 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $c6) ;; CHECK-NEXT: (call $c7) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $c8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $c1 (local $x i32) (drop (call $c2)) (drop (call $c3)) (drop (call $c3)) (drop (call $c4)) (local.set $x (call $c4)) (drop (call $c5 (unreachable))) (drop (call $c6)) (drop (call $c7)) (drop (call $c8)) ) ;; CHECK: (func $c2 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $c2 (result i32) (i32.const 1) ) ;; CHECK: (func $c3 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $c3 (result i32) (i32.const 2) ) ;; CHECK: (func $c4 (result i32) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) (func $c4 (result i32) (i32.const 3) ) ;; CHECK: (func $c5 (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $c5 (param $x i32) (result i32) (local.get $x) ) ;; CHECK: (func $c6 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $c6 (result i32) (unreachable) ) ;; CHECK: (func $c7 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) (func $c7 (result i32) (return (i32.const 4)) ) ;; CHECK: (func $c8 (result i32) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) (func $c8 (result i32) (i32.const 5) ) ) (module ;; both operations at once: remove params and return value (func "a" (drop (call $b (i32.const 1) ) ) ) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (export "a" (func $0)) ;; CHECK: (func $0 ;; CHECK-NEXT: (call $b) ;; CHECK-NEXT: ) ;; CHECK: (func $b ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b (param $x i32) (result i32) (local.get $x) ) ) (module ;; tail calls inhibit dropped result removal ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (func $foo (param $x i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (return_call $bar) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) (func $foo (param $x i32) (result i32) (drop (return_call $bar (i32.const 0) ) ) (i32.const 42) ) ;; CHECK: (func $bar (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) (func $bar (param $x i32) (result i32) (i32.const 7) ) ) (module ;; indirect tail calls inhibit dropped result removal ;; CHECK: (type $T (func (result i32))) (type $T (func (result i32))) (table 1 1 funcref) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (table $0 1 1 funcref) ;; CHECK: (func $foo (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (return_call_indirect $0 (type $T) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (param $x i32) (result i32) (drop (return_call_indirect (type $T) (i32.const 0) ) ) ) ;; CHECK: (func $bar ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (drop (call $foo (i32.const 42) ) ) ) ) (module ;; CHECK: (type $funcref_i32_f64_=>_i64 (func (param funcref i32 f64) (result i64))) ;; CHECK: (type $f32_=>_funcref (func (param f32) (result funcref))) ;; CHECK: (elem declare func $0) ;; CHECK: (export "export" (func $1)) ;; CHECK: (func $0 (param $0 funcref) (param $1 i32) (param $2 f64) (result i64) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $0 (param $0 funcref) (param $1 i32) (param $2 f64) (result i64) (nop) (unreachable) ) (func "export" (param $0 f32) (result funcref) ;; a ref.func should prevent us from changing the type of a function, as it ;; may escape (ref.func $0) ) ) ;; CHECK: (func $1 (param $0 f32) (result funcref) ;; CHECK-NEXT: (ref.func $0) ;; CHECK-NEXT: ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i64 (func (param i64))) (type $i64 (func (param i64))) ;; CHECK: (global $global$0 (ref $i64) (ref.func $0)) (global $global$0 (ref $i64) (ref.func $0)) ;; CHECK: (export "even" (func $1)) (export "even" (func $1)) ;; the argument to this function cannot be removed due to the ref.func of it ;; in a global ;; CHECK: (func $0 (param $0 i64) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $0 (param $0 i64) (unreachable) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $1 (call_ref (i64.const 0) (global.get $global$0) ) ) ;; CHECK: (func $2 ;; CHECK-NEXT: (call $0 ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $2 (call $0 (i64.const 0) ) ) ) (module ;; a removable non-nullable parameter ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $0 ;; CHECK-NEXT: (local $0 (ref null i31)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $0 (param $x i31ref) (nop) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (call $0) ;; CHECK-NEXT: ) (func $1 (call $0 (i31.new (i32.const 0)) ) ) ) ;; Arguments that read an immutable global can be optimized, as that is a ;; constant value. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (global $immut i32 (i32.const 42)) (global $immut i32 (i32.const 42)) ;; CHECK: (global $immut2 i32 (i32.const 43)) (global $immut2 i32 (i32.const 43)) ;; CHECK: (global $mut (mut i32) (i32.const 1337)) (global $mut (mut i32) (i32.const 1337)) ;; CHECK: (func $foo (param $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (global.get $immut) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (param $x i32) (param $y i32) ;; "Use" the params to avoid other optimizations kicking in. (drop (local.get $x)) (drop (local.get $y)) ) ;; CHECK: (func $foo-caller ;; CHECK-NEXT: (global.set $mut ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (global.get $mut) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $mut ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (global.get $mut) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo-caller ;; Note how the mutable param has a different value in each call, which shows ;; the reason that we cannot optimize in this case. But we can optimize the ;; immutable param. (global.set $mut (i32.const 1)) (call $foo (global.get $immut) (global.get $mut) ) (global.set $mut (i32.const 2)) (call $foo (global.get $immut) (global.get $mut) ) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (drop (local.get $x)) (drop (local.get $y)) ) ;; CHECK: (func $bar-caller ;; CHECK-NEXT: (global.set $mut ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (global.get $immut) ;; CHECK-NEXT: (global.get $immut) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $mut ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (global.get $mut) ;; CHECK-NEXT: (global.get $immut2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar-caller ;; Corner cases of mixing mutable with immutable and mixing two immutables. (global.set $mut (i32.const 1)) (call $bar (global.get $immut) (global.get $immut) ) (global.set $mut (i32.const 2)) (call $bar (global.get $mut) (global.get $immut2) ) ) ) binaryen-version_108/test/lit/passes/dae_tnh.wast000066400000000000000000000020311423707623100223100ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --dae --all-features -tnh -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $ref?|$struct|_=>_none (func (param (ref null $struct)))) ;; CHECK: (type $struct (struct (field i32))) (type $struct (struct_subtype (field i32) data)) ;; CHECK: (func $target ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target (param $x i32) (nop) ) ;; CHECK: (func $caller (param $ref (ref null $struct)) ;; CHECK-NEXT: (call $target) ;; CHECK-NEXT: ) (func $caller (param $ref (ref null $struct)) (call $target ;; This might trap in theory, but in traps-never-happen mode which is ;; enabled here, we can ignore and remove such side effects, allowing us ;; to optimize away this parameter which is never used. (struct.get $struct 0 (local.get $ref) ) ) ) ) binaryen-version_108/test/lit/passes/dce-eh.wast000066400000000000000000000053111423707623100220370ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --dce -all -S -o - | filecheck %s ;; If either try body or catch body is reachable, the whole try construct is ;; reachable (module ;; CHECK: (tag $e (param)) ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo) (tag $e) ;; CHECK: (func $try_unreachable ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $try_unreachable (try (do (unreachable) ) (catch_all) ) (call $foo) ;; shouldn't be dce'd ) ;; CHECK: (func $catch_unreachable ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $catch_unreachable (try (do) (catch_all (unreachable) ) ) (call $foo) ;; shouldn't be dce'd ) ;; CHECK: (func $both_unreachable ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $both_unreachable (try (do (unreachable) ) (catch_all (unreachable) ) ) (call $foo) ;; should be dce'd ) ;; CHECK: (func $throw ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (throw $e) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $throw ;; All these wrapping expressions before 'throw' will be dce'd (drop (block $label$0 (result externref) (if (i32.clz (block $label$1 (result i32) (throw $e) ) ) (nop) ) (ref.null extern) ) ) ) ;; CHECK: (func $rethrow ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rethrow $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $rethrow (try $l0 (do) (catch $e (drop ;; This i32.add will be dce'd (i32.add (i32.const 0) (rethrow $l0) ) ) ) ) ) ) binaryen-version_108/test/lit/passes/dce_all-features.wast000066400000000000000000001004161423707623100241130ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --dce --all-features -S -o - | filecheck %s (module (memory 10) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $1 (func)) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) (type $1 (func)) (table 1 1 funcref) (elem (i32.const 0) $call-me) ;; CHECK: (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) ;; CHECK: (type $f32_i64_=>_none (func (param f32 i64))) ;; CHECK: (type $f32_i64_=>_i32 (func (param f32 i64) (result i32))) ;; CHECK: (global $x (mut i32) (i32.const 0)) (global $x (mut i32) (i32.const 0)) ;; CHECK: (memory $0 10) ;; CHECK: (table $0 1 1 funcref) ;; CHECK: (elem (i32.const 0) $call-me) ;; CHECK: (func $call-me (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $call-me (type $ii) (param $0 i32) (param $1 i32) (nop) ) ;; CHECK: (func $code-to-kill ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $out3 ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out4 ;; CHECK-NEXT: (br_table $out4 $out4 $out4 $out4 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out5 ;; CHECK-NEXT: (br_if $out5 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out16 ;; CHECK-NEXT: (block $in ;; CHECK-NEXT: (br_if $out16 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block11 ;; CHECK-NEXT: (block $out18 ;; CHECK-NEXT: (block $in19 ;; CHECK-NEXT: (br_if $in19 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out20 ;; CHECK-NEXT: (block $in21 ;; CHECK-NEXT: (br_table $out20 $in21 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out22 ;; CHECK-NEXT: (block $in23 ;; CHECK-NEXT: (br_table $in23 $out22 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block13 ;; CHECK-NEXT: (block $out25 ;; CHECK-NEXT: (block $in26 ;; CHECK-NEXT: (br_table $in26 $in26 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block15 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out29 ;; CHECK-NEXT: (loop $in30 ;; CHECK-NEXT: (br_if $out29 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block20 ;; CHECK-NEXT: (loop $in32 ;; CHECK-NEXT: (br_if $in32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 456) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 139) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 246) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 33) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 55) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 66) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 77) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 88) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 99) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 456) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 101) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $code-to-kill (type $1) (local $x i32) (block $out (br $out) (drop (i32.const 0) ) (if (i32.const 1) (drop (i32.const 2) ) ) (br_table $out $out $out $out (i32.const 3) ) (call $code-to-kill) ) (if (i32.const 0) (block $out (unreachable) (drop (i32.const 0) ) ) ) (if (i32.const 0) (block $out (return) (drop (i32.const 0) ) ) ) (block $out (br_table $out $out $out $out (i32.const 4) ) (drop (i32.const 0) ) ) (block $out (br_if $out (i32.const 3) ) (drop (i32.const 0) ) ) (if (i32.const 0) (block $block4 (if (i32.const 0) (block $out (unreachable) (drop (i32.const 0) ) ) (block $out (unreachable) (drop (i32.const 0) ) ) ) (drop (i32.const 0) ) ) ) (if (i32.const 0) (drop (block $out (result i32) (br $out (unreachable) ) (drop (i32.const 0) ) (unreachable) ) ) ) (if (i32.const 0) (drop (block $out (result i32) (br_if $out (unreachable) (i32.const 0) ) (drop (i32.const 0) ) (unreachable) ) ) ) (if (i32.const 0) (drop (block $out (result i32) (br_if $out (unreachable) (unreachable) ) (drop (i32.const 0) ) (unreachable) ) ) ) (block $out (block $in (br_if $out (i32.const 1) ) ) (unreachable) ) (if (i32.const 0) (block $block11 (block $out (block $in (br_if $in (i32.const 1) ) ) (unreachable) ) (drop (i32.const 10) ) ) ) (block $out (block $in (br_table $out $in (i32.const 1) ) ) (unreachable) ) (block $out (block $in (br_table $in $out (i32.const 1) ) ) (unreachable) ) (if (i32.const 0) (block $block13 (block $out (block $in (br_table $in $in (i32.const 1) ) ) (unreachable) ) (drop (i32.const 10) ) ) ) (if (i32.const 0) (block $block15 (drop (i32.const 10) ) (drop (i32.const 42) ) (unreachable) (return (unreachable) ) (unreachable) (return) ) ) (if (i32.const 0) (loop $loop-in18 (unreachable) ) ) (block $out (loop $in (br_if $out (i32.const 1) ) (unreachable) ) ) (if (i32.const 0) (block $block20 (loop $in (br_if $in (i32.const 1) ) (unreachable) ) (drop (i32.const 10) ) ) ) (if (i32.const 1) (call $call-me (i32.const 123) (unreachable) ) ) (if (i32.const 2) (call $call-me (unreachable) (i32.const 0) ) ) (if (i32.const 3) (call $call-me (unreachable) (unreachable) ) ) (if (i32.const -1) (call_indirect (type $ii) (i32.const 123) (i32.const 456) (unreachable) ) ) (if (i32.const -2) (call_indirect (type $ii) (i32.const 139) (unreachable) (i32.const 0) ) ) (if (i32.const -3) (call_indirect (type $ii) (i32.const 246) (unreachable) (unreachable) ) ) (if (i32.const -4) (call_indirect (type $ii) (unreachable) (unreachable) (unreachable) ) ) (if (i32.const 11) (local.set $x (unreachable) ) ) (if (i32.const 22) (drop (i32.load (unreachable) ) ) ) (if (i32.const 33) (i32.store (i32.const 0) (unreachable) ) ) (if (i32.const 44) (i32.store (unreachable) (i32.const 0) ) ) (if (i32.const 55) (i32.store (unreachable) (unreachable) ) ) (if (i32.const 66) (drop (i32.eqz (unreachable) ) ) ) (if (i32.const 77) (drop (i32.add (unreachable) (i32.const 0) ) ) ) (if (i32.const 88) (drop (i32.add (i32.const 0) (unreachable) ) ) ) (if (i32.const 99) (i32.add (unreachable) (unreachable) ) ) (if (i32.const 100) (drop (select (i32.const 123) (i32.const 456) (unreachable) ) ) ) (if (i32.const 101) (drop (select (i32.const 123) (unreachable) (i32.const 456) ) ) ) (if (i32.const 102) (drop (select (unreachable) (i32.const 123) (i32.const 456) ) ) ) (drop (i32.const 1337) ) ) ;; CHECK: (func $killer ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $killer (type $1) (unreachable) (drop (i32.const 1000) ) ) ;; CHECK: (func $target ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $target (type $1) (drop (i32.const 2000) ) ) ;; CHECK: (func $typed-block-none-then-unreachable (result i32) ;; CHECK-NEXT: (block $top-typed ;; CHECK-NEXT: (block $switch$0 ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $typed-block-none-then-unreachable (result i32) (block $top-typed (result i32) (block $switch$0 ;; this looks like it can be broken to, so it gets type 'none' (return (i32.const 0) ) (br $switch$0) ;; this is not reachable, so dce cleans it up, changing $switch$0's type ) (return ;; and this is cleaned up as well, leaving $top-typed in need of a type change (i32.const 1) ) ) ) ;; CHECK: (func $typed-block-remove-br-changes-type (param $$$0 i32) (result i32) ;; CHECK-NEXT: (block $switch$7 ;; CHECK-NEXT: (block $switch-default$10 ;; CHECK-NEXT: (block $switch-case$9 ;; CHECK-NEXT: (block $switch-case$8 ;; CHECK-NEXT: (br_table $switch-case$9 $switch-case$8 $switch-default$10 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $$$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $$$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $typed-block-remove-br-changes-type (param $$$0 i32) (result i32) (block $switch$7 (block $switch-default$10 (block $switch-case$9 (block $switch-case$8 (br_table $switch-case$9 $switch-case$8 $switch-default$10 (i32.const -1) ) ) ) (return (local.get $$$0) ) (br $switch$7) ) (return (local.get $$$0) ) ) (return (i32.const 0) ) ) ;; CHECK: (func $global ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $global (unreachable) (drop (global.get $x)) (global.set $x (i32.const 1)) ) ;; CHECK: (func $ret (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ret (result i32) (return (i32.const 0) ) (nop) (i32.const 0) ) ;; CHECK: (func $unreachable-br (result i32) ;; CHECK-NEXT: (block $out (result i32) ;; CHECK-NEXT: (br $out ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-br (result i32) (block $out (result i32) (br $out (br $out (i32.const 0)) ) ) ) ;; CHECK: (func $unreachable-br-loop (result i32) ;; CHECK-NEXT: (loop $out ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-br-loop (result i32) (loop $out (br $out) ) ) ;; CHECK: (func $unreachable-block-ends-switch (result i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-block-ends-switch (result i32) (block $label$0 (result i32) (block $label$3 (nop) (br_table $label$3 (unreachable) ) (unreachable) ) (i32.const 19) ) ) ;; CHECK: (func $unreachable-block-ends-br_if (result i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-block-ends-br_if (result i32) (block $label$0 (result i32) (block $label$2 (nop) (br_if $label$2 (unreachable) ) (unreachable) ) (i32.const 19) ) ) ;; CHECK: (func $unreachable-brs-3 (result i32) ;; CHECK-NEXT: (block $label$0 (result i32) ;; CHECK-NEXT: (br $label$0 ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-brs-3 (result i32) (block $label$0 (result i32) (br $label$0 (memory.grow (br $label$0 (i32.const 18) ) ) ) (i32.const 21) ) ) ;; CHECK: (func $unreachable-brs-4 (param $var$0 i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-brs-4 (param $var$0 i32) (result i32) (i32.add (i32.const 1) (block $label$0 (result i32) (br $label$0 (block $label$1 (result i32) ;; this block is declared i32, but we can see it is unreachable (drop (br_if $label$0 (i32.const 4104) (unreachable) ) ) (i32.const 4) ) ) (i32.const 16) ) ) ) ;; CHECK: (func $call-unreach (param $var$0 i64) (param $var$1 i64) (result i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (if (result i64) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$0 (result i64) ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block (result i64) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-unreach (param $var$0 i64) (param $var$1 i64) (result i64) (local $2 i64) (if (result i64) (i64.eqz (local.get $var$0) ) (block $label$0 (result i64) (local.get $var$1) ) (block $label$1 (result i64) (call $call-unreach (i64.sub (local.get $var$0) (i64.const 1) ) (i64.mul (block (result i64) (local.set $2 (local.get $var$0) ) (nop) (local.get $2) ) (unreachable) ) ) ) ) ) ;; CHECK: (func $br-gone-means-block-type-changes-then-refinalize-at-end-is-too-late (param $var$0 i32) (result i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br-gone-means-block-type-changes-then-refinalize-at-end-is-too-late (param $var$0 i32) (result i32) (block $label$0 (result i32) (br $label$0 (block (result i32) (nop) (drop (br_if $label$0 (unreachable) (local.get $var$0) ) ) (i32.const 4) ) ) ) ) ;; CHECK: (func $br-with-unreachable-value-should-not-give-a-block-a-value (param $var$0 i32) (result i32) ;; CHECK-NEXT: (block $label$0 (result i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $label$0 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br-with-unreachable-value-should-not-give-a-block-a-value (param $var$0 i32) (result i32) (block $label$0 (result i32) (br $label$0 (block (result i32) ;; turns into unreachable when refinalized (drop (br_if $label$0 (i32.const 8) (local.get $var$0) ) ) (unreachable) ) ) (i32.const 16) ) ) ;; CHECK: (func $replace-br-value-of-i32-with-unreachable (result i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $replace-br-value-of-i32-with-unreachable (result i32) (block $label$0 (result i32) (br $label$0 (block $label$1 (result i32) (nop) (unreachable) ) ) ) ) ;; CHECK: (func $shorten-block-requires-sync-refinalize (param $var$0 i32) (param $var$1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $shorten-block-requires-sync-refinalize (param $var$0 i32) (param $var$1 i32) (block $label$0 (unreachable) (if (unreachable) (br_if $label$0 (local.get $var$1) ) ) ) ) ;; CHECK: (func $block-with-type-but-is-unreachable (param $var$0 i32) (result i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block-with-type-but-is-unreachable (param $var$0 i32) (result i32) (block $label$0 (result i32) (br $label$0 (block $block (result i32) (nop) (unreachable) ) ) ) ) ;; CHECK: (func $if-with-type-but-is-unreachable (param $var$0 i32) (result i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-with-type-but-is-unreachable (param $var$0 i32) (result i32) (block $label$0 (result i32) (br $label$0 (if (result i32) (local.get $var$0) (unreachable) (unreachable) ) ) ) ) ;; CHECK: (func $unreachable-loop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $unreachable-loop (loop $label$2 (unreachable) (br $label$2) ) ) ;; CHECK: (func $br-block-from-unary (result i32) ;; CHECK-NEXT: (block $label$6 (result i32) ;; CHECK-NEXT: (block $label$7 ;; CHECK-NEXT: (br $label$6 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br-block-from-unary (result i32) (block $label$6 (result i32) (i32.ctz (block $label$7 (result i32) (br $label$6 (i32.const 8) ) ) ) ) ) ;; CHECK: (func $replace-unary-with-br-child ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $label$6 (result i32) ;; CHECK-NEXT: (br $label$6 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $replace-unary-with-br-child (drop (block $label$6 (result i32) (i32.ctz (br $label$6 (i32.const 8) ) ) ) ) ) ;; CHECK: (func $br_if-unreach-then-br_if-normal ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_if-unreach-then-br_if-normal (block $out (nop) (br_if $out (unreachable) ) (br_if $out (i32.const 1) ) ) ) ;; CHECK: (func $replace-with-unreachable-affects-parent (param $var$0 f32) (param $var$1 i64) ;; CHECK-NEXT: (block $top ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $replace-with-unreachable-affects-parent ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (i64.const -15917430362925035) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $replace-with-unreachable-affects-parent (param $var$0 f32) (param $var$1 i64) (block $top (drop (f32.load offset=4 (i64.ne (i64.const 0) (if (result i64) (block (result i32) (call $replace-with-unreachable-affects-parent (f32.const 1) (i64.const -15917430362925035) ) (i32.const 1) ) (unreachable) (unreachable) ) ) ) ) (nop) ;; this is not reachable due to the above code, so we replace it with unreachable. type should go to parent ) ) ;; CHECK: (func $replace-block-changes-later-when-if-goes ;; CHECK-NEXT: (block $top ;; CHECK-NEXT: (global.set $x ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $inner ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (i64.const -15917430362925035) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $replace-block-changes-later-when-if-goes (block $top ;; and so should this (global.set $x (i32.const 0) ) (drop (f32.load offset=4 (i64.ne (block $inner (result i64) ;; this becomes unreachable (drop (call $helper (f32.const 1) (i64.const -15917430362925035) ) ) (unreachable) ) (i64.const 0) ) ) ) (if (i32.load16_s offset=22 align=1 (i32.const 0) ) (br $top) ;; this keeps the block none after the inner block gets unreachable. but it will vanish into unreachable itself (unreachable) ) ) ) ;; CHECK: (func $helper (param $var$0 f32) (param $var$1 i64) (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $helper (param $var$0 f32) (param $var$1 i64) (result i32) (i32.const 0) ) ) ;; if goes to unreachable, need to propagate that up to the global.set (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $global (mut f64) (f64.const 0)) (global $global (mut f64) (f64.const 0)) ;; CHECK: (func $0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (global.set $global (if (result f64) (i32.const 0) (unreachable) (unreachable) ) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $0 ;; CHECK-NEXT: (local $local f64) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (local $local f64) (local.set $local (if (result f64) (i32.const 0) (unreachable) (unreachable) ) ) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $unnecessary-concrete-block (result i32) ;; CHECK-NEXT: (block $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unnecessary-concrete-block (result i32) (block $foo (result i32) ;; unnecessary type (nop) (unreachable) ) ) ;; CHECK: (func $necessary-concrete-block (result i32) ;; CHECK-NEXT: (block $foo (result i32) ;; CHECK-NEXT: (br $foo ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $necessary-concrete-block (result i32) (block $foo (result i32) (br $foo (i32.const 1)) (unreachable) ) ) ;; CHECK: (func $unnecessary-concrete-if (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unnecessary-concrete-if (result i32) (if (result i32) ;; unnecessary type (i32.const 0) (return (i32.const 1)) (unreachable) ) ) ;; CHECK: (func $unnecessary-concrete-try (result i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unnecessary-concrete-try (result i32) (try (result i32) (do (unreachable) ) (catch_all (unreachable) ) ) ) ;; CHECK: (func $note-loss-of-if-children ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $note-loss-of-if-children (block $label$1 (if ;; begins unreachable - type never changes - but after the condition ;; becomes unreachable, it will lose the children, which means no more ;; br to the outer block, changing that type. (block $label$2 (result i32) (nop) (unreachable) ) (unreachable) (br $label$1) ) ) ) ;; CHECK: (func $note-loss-of-non-control-flow-children ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $note-loss-of-non-control-flow-children (block $out (drop (i32.add (block (result i32) (nop) (unreachable) ) (br $out) ;; when this is removed as dead, the block becomes unreachable ) ) ) ) ) (module ;; CHECK: (type $none_=>_ref|any| (func (result (ref any)))) ;; CHECK: (func $foo (result (ref any)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (result (ref any)) (block $label$1 (result (ref any)) ;; this break has an unreachable input, and so it does not have a heap type ;; there, and no heap type to send on the branch. this tests we do not hit ;; the assertion in getHeapType() if we call that. (br_on_non_null $label$1 (block (result anyref) (unreachable) ) ) (unreachable) ) ) ) binaryen-version_108/test/lit/passes/dce_vacuum_remove-unused-names.wast000066400000000000000000000037211423707623100270070ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --dce --vacuum --remove-unused-names -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $f32_f32_=>_f32 (func (param f32 f32) (result f32))) ;; CHECK: (type $i64_=>_i64 (func (param i64) (result i64))) ;; CHECK: (func $__Z12serveroptionPc (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $__Z12serveroptionPc (result i32) (block $switch$0 (return (i32.const 0) ) (br $switch$0) ) (return (i32.const 0) ) ) ;; CHECK: (func $drop-unreachable (param $var$0 f32) (param $var$1 f32) (result f32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $drop-unreachable (param $var$0 f32) (param $var$1 f32) (result f32) (block $label$0 (result f32) (loop $label$2 (drop (unreachable) ) (unreachable) ) (local.get $var$1) ) ) ;; CHECK: (func $set-unreachable (param $var$0 i64) (result i64) ;; CHECK-NEXT: (local $var$1 i64) ;; CHECK-NEXT: (local $var$2 i64) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $set-unreachable (param $var$0 i64) (result i64) (local $var$1 i64) (local $var$2 i64) (block $label$0 (result i64) (block $label$1 (loop $label$2 (if (i64.eq (local.get $var$1) (i64.const 0) ) (unreachable) (local.set $var$2 (i64.mul (unreachable) (local.get $var$2) ) ) ) (br $label$2) ) ) (local.get $var$2) ) ) ) binaryen-version_108/test/lit/passes/dealign.wast000066400000000000000000000026501423707623100223200ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --dealign -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (memory $0 1 1) (memory $0 1 1) ;; CHECK: (func $test ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (i32.load (i32.const 4))) (drop (i32.load align=1 (i32.const 8))) (drop (i32.load align=2 (i32.const 12))) (i32.store (i32.const 16) (i32.const 28)) (i32.store align=1 (i32.const 20) (i32.const 32)) (i32.store align=2 (i32.const 24) (i32.const 36)) ) ) binaryen-version_108/test/lit/passes/dealign64.wast000066400000000000000000000027021423707623100224700ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --dealign --enable-memory64 -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (memory $0 i64 1 1) (memory $0 i64 1 1) ;; CHECK: (func $test ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (i64.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (i64.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (i64.const 20) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (i64.const 24) ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (drop (i32.load (i64.const 4))) (drop (i32.load align=1 (i64.const 8))) (drop (i32.load align=2 (i64.const 12))) (i32.store (i64.const 16) (i32.const 28)) (i32.store align=1 (i64.const 20) (i32.const 32)) (i32.store align=2 (i64.const 24) (i32.const 36)) ) ) binaryen-version_108/test/lit/passes/denan.wast000066400000000000000000000174751423707623100220150ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --denan -S -o - | filecheck %s (module ;; CHECK: (type $f32_=>_f32 (func (param f32) (result f32))) ;; CHECK: (type $f64_=>_f64 (func (param f64) (result f64))) ;; CHECK: (type $i32_f32_i64_f64_=>_none (func (param i32 f32 i64 f64))) ;; CHECK: (type $f32_f64_=>_none (func (param f32 f64))) ;; CHECK: (global $global$1 (mut f32) (f32.const 0)) (global $global$1 (mut f32) (f32.const nan)) ;; CHECK: (global $global$2 (mut f32) (f32.const 12.34000015258789)) (global $global$2 (mut f32) (f32.const 12.34)) ;; CHECK: (func $foo32 (param $x f32) (result f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $deNan32 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $deNan32 ;; CHECK-NEXT: (call $foo32 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo32 (param $x f32) (result f32) (call $foo32 (local.get $x)) ) ;; CHECK: (func $foo64 (param $x f64) (result f64) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $deNan64 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $deNan64 ;; CHECK-NEXT: (call $foo64 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo64 (param $x f64) (result f64) (call $foo64 (local.get $x)) ) ;; CHECK: (func $various (param $x i32) (param $y f32) (param $z i64) (param $w f64) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (call $deNan32 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (call $deNan64 ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $various (param $x i32) (param $y f32) (param $z i64) (param $w f64) ) ;; CHECK: (func $ignore-local.get (param $f f32) (param $d f64) ;; CHECK-NEXT: (local.set $f ;; CHECK-NEXT: (call $deNan32 ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $d ;; CHECK-NEXT: (call $deNan64 ;; CHECK-NEXT: (local.get $d) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $d) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $f ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $d ;; CHECK-NEXT: (local.get $d) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $d) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $deNan32 ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $deNan64 ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (local.get $d) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $f ;; CHECK-NEXT: (call $deNan32 ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $d ;; CHECK-NEXT: (call $deNan64 ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (local.get $d) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $d) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ignore-local.get (param $f f32) (param $d f64) (drop (local.get $f)) (drop (local.get $d)) (local.set $f (local.get $f)) (local.set $d (local.get $d)) (drop (local.get $f)) (drop (local.get $d)) (drop (f32.abs (local.get $f))) (drop (f64.abs (local.get $d))) (local.set $f (f32.abs (local.get $f))) (local.set $d (f64.abs (local.get $d))) (drop (local.get $f)) (drop (local.get $d)) ) ;; CHECK: (func $tees (param $x f32) (result f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $deNan32 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $tees (param $x f32) (result f32) (local.tee $x (local.tee $x (local.tee $x (local.tee $x (local.get $x)))))) ;; CHECK: (func $select (param $x f32) (result f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $deNan32 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select (param $x f32) (result f32) (select (local.get $x) (local.get $x) (i32.const 1))) ) ;; existing names should not be a problem ;; CHECK: (func $deNan32 (param $0 f32) (result f32) ;; CHECK-NEXT: (if (result f32) ;; CHECK-NEXT: (f32.eq ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $deNan64 (param $0 f64) (result f64) ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (f64.eq ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $f32_=>_f32 (func (param f32) (result f32))) ;; CHECK: (type $f64_=>_f64 (func (param f64) (result f64))) ;; CHECK: (func $deNan32 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $deNan32) ;; CHECK: (func $deNan64 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $deNan64) ;; CHECK: (func $foo32 (param $x f32) (result f32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $deNan32_0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $deNan32_0 ;; CHECK-NEXT: (call $foo32 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo32 (param $x f32) (result f32) (call $foo32 (local.get $x)) ) ;; CHECK: (func $foo64 (param $x f64) (result f64) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $deNan64_0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $deNan64_0 ;; CHECK-NEXT: (call $foo64 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo64 (param $x f64) (result f64) (call $foo64 (local.get $x)) ) ) ;; CHECK: (func $deNan32_0 (param $0 f32) (result f32) ;; CHECK-NEXT: (if (result f32) ;; CHECK-NEXT: (f32.eq ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $deNan64_0 (param $0 f64) (result f64) ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (f64.eq ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/directize_all-features.wast000066400000000000000000000564571423707623100253610ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --directize --all-features -S -o - | filecheck %s (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (elem (i32.const 1) $foo) ;; CHECK: (elem (i32.const 1) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) ;; helper function (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 1) ) ) ) (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) ;; CHECK: (table $1 5 5 funcref) (table $1 5 5 funcref) (elem (table $0) (i32.const 1) func $dummy) (elem (table $1) (i32.const 1) func $f) ;; CHECK: (elem $0 (table $0) (i32.const 1) func $dummy) ;; CHECK: (elem $1 (table $1) (i32.const 1) func $f) ;; CHECK: (func $dummy (param $0 i32) (result i32) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $dummy (param i32) (result i32) (local.get 0) ) ;; CHECK: (func $f (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $f (param i32) (param i32) (unreachable) ) ;; CHECK: (func $g (param $x i32) (param $y i32) ;; CHECK-NEXT: (call $f ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $g (param $x i32) (param $y i32) (call_indirect $1 (type $ii) (local.get $x) (local.get $y) (i32.const 1) ) ) ) ;; at table edges (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) ;; CHECK: (table $1 5 5 funcref) (table $1 5 5 funcref) (elem (table $1) (i32.const 4) func $foo) ;; CHECK: (elem (table $1) (i32.const 4) func $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect $1 (type $ii) (local.get $x) (local.get $y) (i32.const 4) ) ) ) (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (elem (i32.const 0) $foo) ;; CHECK: (elem (i32.const 0) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 0) ) ) ) (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) ;; CHECK: (table $1 5 5 funcref) (table $1 5 5 funcref) (elem (i32.const 0) $foo $foo $foo $foo $foo) (elem (table $1) (i32.const 0) func $foo $foo $foo $foo $foo) ;; CHECK: (elem $0 (table $0) (i32.const 0) func $foo $foo $foo $foo $foo) ;; CHECK: (elem $1 (table $1) (i32.const 0) func $foo $foo $foo $foo $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect $1 (type $ii) (local.get $x) (local.get $y) (i32.const 2) ) ) ) ;; imported table (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (import "env" "table" (table $table 5 5 funcref)) (import "env" "table" (table $table 5 5 funcref)) (elem (i32.const 1) $foo) ;; CHECK: (elem (i32.const 1) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (call_indirect $table (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 1) ) ) ) ;; exported table (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) ;; CHECK: (elem (i32.const 1) $foo) ;; CHECK: (export "tab" (table $0)) (export "tab" (table $0)) (elem (i32.const 1) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 1) ) ) ) ;; non-constant table offset (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (global $g (mut i32) (i32.const 1)) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (global $g (mut i32) (i32.const 1)) (elem (global.get $g) $foo) ;; CHECK: (elem (global.get $g) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 1) ) ) ) (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (global $g (mut i32) (i32.const 1)) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) ;; CHECK: (table $1 5 5 funcref) (table $1 5 5 funcref) (global $g (mut i32) (i32.const 1)) (elem (table $1) (global.get $g) func $foo) ;; CHECK: (elem (table $1) (global.get $g) func $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (call_indirect $1 (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect $1 (type $ii) (local.get $x) (local.get $y) (i32.const 1) ) ) ) ;; non-constant call index (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (elem (i32.const 1) $foo) ;; CHECK: (elem (i32.const 1) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (param $z i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (local.get $z) ) ) ) ;; bad index (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (elem (i32.const 1) $foo) ;; CHECK: (elem (i32.const 1) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 5) ) ) ) ;; missing index (module ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (elem (i32.const 1) $foo) ;; CHECK: (elem (i32.const 1) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 2) ) ) ) ;; bad type (module ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (elem (i32.const 1) $foo) ;; CHECK: (elem (i32.const 1) $foo) ;; CHECK: (func $foo (param $0 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 1) ) ) ) ;; no table (module ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (func $foo (param $0 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (unreachable) ) ) ;; change types (module (type (func)) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (table $0 8 8 funcref) (table $0 8 8 funcref) ;; CHECK: (func $0 ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (block ;; the type of this block will change (nop) (call_indirect (type 0) (i32.const 15) ) ) ) ) (module ;; indirect tail call ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (elem (i32.const 1) $foo) ;; CHECK: (elem (i32.const 1) $foo) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $bar (param $x i32) (param $y i32) ;; CHECK-NEXT: (return_call $foo ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x i32) (param $y i32) (return_call_indirect (type $ii) (local.get $x) (local.get $y) (i32.const 1) ) ) ) (module ;; CHECK: (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) ;; CHECK: (table $0 5 5 funcref) (table $0 5 5 funcref) (elem (i32.const 1) $foo1 $foo2) ;; CHECK: (elem (i32.const 1) $foo1 $foo2) ;; CHECK: (func $foo1 (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo1 (param i32) (param i32) (unreachable) ) ;; CHECK: (func $foo2 (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo2 (param i32) (param i32) (unreachable) ) ;; CHECK: (func $select (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (call $foo1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo2 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select (param $x i32) (param $y i32) (param $z i32) ;; Test we can optimize a call_indirect whose index is a select between two ;; constants. We can emit an if and two direct calls for that. (call_indirect (type $ii) (local.get $x) (local.get $y) (select (i32.const 1) (i32.const 2) (local.get $z) ) ) ) ;; CHECK: (func $select-bad-1 (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-bad-1 (param $x i32) (param $y i32) (param $z i32) ;; As above but one select arm is not constant. (call_indirect (type $ii) (local.get $x) (local.get $y) (select (local.get $z) (i32.const 2) (local.get $z) ) ) ) ;; CHECK: (func $select-bad-2 (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-bad-2 (param $x i32) (param $y i32) (param $z i32) ;; As above but the other select arm is not constant. (call_indirect (type $ii) (local.get $x) (local.get $y) (select (i32.const 2) (local.get $z) (local.get $z) ) ) ) ;; CHECK: (func $select-out-of-range (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo2 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-out-of-range (param $x i32) (param $y i32) (param $z i32) ;; Both are constants, but one is out of range for the table, and there is no ;; valid function to call there; emit an unreachable. (call_indirect (type $ii) (local.get $x) (local.get $y) (select (i32.const 99999) (i32.const 2) (local.get $z) ) ) ) ;; CHECK: (func $select-both-out-of-range (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-both-out-of-range (param $x i32) (param $y i32) (param $z i32) ;; Both are constants, and both are out of range for the table. (call_indirect (type $ii) (local.get $x) (local.get $y) (select (i32.const 99999) (i32.const -1) (local.get $z) ) ) ) ;; CHECK: (func $select-unreachable-operand (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-unreachable-operand (param $x i32) (param $y i32) (param $z i32) ;; One operand is unreachable. (call_indirect (type $ii) (local.get $x) (local.get $y) (select (unreachable) (i32.const 2) (local.get $z) ) ) ) ;; CHECK: (func $select-unreachable-condition (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-unreachable-condition (param $x i32) (param $y i32) (param $z i32) ;; The condition is unreachable. We should not even create any vars here, and ;; just not do anything. (call_indirect (type $ii) (local.get $x) (local.get $y) (select (i32.const 1) (i32.const 2) (unreachable) ) ) ) ) (module ;; CHECK: (type $F (func (param (ref func)))) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (table $0 15 15 funcref) (table $0 15 15 funcref) (type $F (func (param (ref func)))) (elem (i32.const 10) $foo-ref $foo-ref) ;; CHECK: (elem (i32.const 10) $foo-ref $foo-ref) ;; CHECK: (elem declare func $select-non-nullable) ;; CHECK: (func $foo-ref (param $0 (ref func)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo-ref (param (ref func)) ;; helper function (unreachable) ) ;; CHECK: (func $select-non-nullable (param $x i32) ;; CHECK-NEXT: (local $1 (ref null $i32_=>_none)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.func $select-non-nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (call $foo-ref ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo-ref ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-non-nullable (param $x i32) ;; Test we can handle a non-nullable value when optimizing a select, during ;; which we place values in locals. (call_indirect (type $F) (ref.func $select-non-nullable) (select (i32.const 10) (i32.const 11) (local.get $x) ) ) ) ;; CHECK: (func $select-non-nullable-unreachable-condition ;; CHECK-NEXT: (call_indirect $0 (type $F) ;; CHECK-NEXT: (ref.func $select-non-nullable) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-non-nullable-unreachable-condition ;; Test we ignore an unreachable condition and don't make any changes at all ;; to the code (in particular, we shouldn't add any vars). (call_indirect (type $F) (ref.func $select-non-nullable) (select (i32.const 10) (i32.const 11) (unreachable) ) ) ) ;; CHECK: (func $select-non-nullable-unreachable-arg (param $x i32) ;; CHECK-NEXT: (call_indirect $0 (type $F) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-non-nullable-unreachable-arg (param $x i32) ;; Test we ignore an unreachable argument and don't make any changes at all ;; to the code (in particular, we shouldn't add any vars). (call_indirect (type $F) (unreachable) (select (i32.const 10) (i32.const 11) (local.get $x) ) ) ) ) ;; A table.set prevents optimization. (module ;; CHECK: (type $v (func)) (type $v (func)) ;; CHECK: (table $has-set 5 5 funcref) (table $has-set 5 5 funcref) ;; CHECK: (table $no-set 5 5 funcref) (table $no-set 5 5 funcref) ;; CHECK: (elem $0 (table $has-set) (i32.const 1) func $foo) (elem $0 (table $has-set) (i32.const 1) $foo) ;; CHECK: (elem $1 (table $no-set) (i32.const 1) func $foo) (elem $1 (table $no-set) (i32.const 1) $foo) ;; CHECK: (func $foo ;; CHECK-NEXT: (table.set $has-set ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo ;; Technically this set writes the same value as is already there, but the ;; analysis will give up on optimizing when it sees any set to a table. (table.set $has-set (i32.const 1) (ref.func $foo) ) ) ;; CHECK: (func $bar ;; CHECK-NEXT: (call_indirect $has-set (type $v) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $bar ;; We can't optimize this one, but we can the one after it. (call_indirect $has-set (type $v) (i32.const 1) ) (call_indirect $no-set (type $v) (i32.const 1) ) ) ) binaryen-version_108/test/lit/passes/extract-function.wast000066400000000000000000000042121423707623100242060ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --extract-function=foo -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt --extract-function --pass-arg=extract-function@foo -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt --extract-function-index=0 -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt --extract-function-index --pass-arg=extract-function-index@0 -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "bar" (func $bar)) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (func $foo ;; CHECK-NEXT: (call $bar) ;; CHECK-NEXT: ) (func $foo (call $bar) ) (func $bar (call $foo) ) (func $other (drop (i32.const 1)) ) ) (module ;; Use another function in the table, but the table is not used in the ;; extracted function (table $t 10 funcref) (elem $0 (table $t) (i32.const 0) func $other) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "other" (func $other)) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (nop) ) (func $other (drop (i32.const 1)) ) ) (module ;; Use another function in the table, and the table *is* used. As a result, ;; the table and its elements will remain. The called function, $other, will ;; remain as an import that is placed in the table. ;; CHECK: (type $none (func)) (type $none (func)) ;; CHECK: (import "env" "other" (func $other)) ;; CHECK: (table $t 10 funcref) (table $t 10 funcref) ;; CHECK: (elem $0 (i32.const 0) $other) (elem $0 (table $t) (i32.const 0) func $other) ;; Test that an existing export does not cause us to crash. ;; CHECK: (export "foo" (func $foo)) (export "foo" (func $foo)) ;; CHECK: (func $foo ;; CHECK-NEXT: (call_indirect (type $none) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (call_indirect (type $none) (i32.const 10)) ) (func $other (drop (i32.const 1)) ) ) binaryen-version_108/test/lit/passes/flatten-eh.wast000066400000000000000000000134671423707623100227540ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --flatten -S -o - | filecheck %s (module ;; CHECK: (tag $e-i32 (param i32)) (tag $e-i32 (param i32)) ;; CHECK: (tag $e-f32 (param f32)) (tag $e-f32 (param f32)) ;; CHECK: (func $try_catch ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e-i32 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-f32 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (pop f32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try_catch (local $x i32) ;; Basic try-catch test (try (do (throw $e-i32 (i32.const 0)) ) (catch $e-i32 (drop (pop i32) ) ) (catch $e-f32 (drop (pop f32) ) ) ) ) ;; CHECK: (func $try_catch_pop_fixup ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $l0 ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $l0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try_catch_pop_fixup ;; After --flatten, a block is created within the 'catch', which makes the ;; pop's location invalid. This tests whether it is fixed up correctly after ;; --flatten. (block $l0 (try (do) (catch $e-i32 (drop (pop i32) ) (br $l0) ) ) ) ) ;; CHECK: (func $try_catch_return_value (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try_catch_return_value (result i32) (try (result i32) (do (i32.const 0) ) (catch $e-i32 (pop i32) ) ) ) ;; CHECK: (func $try_unreachable (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try_unreachable (result i32) (try (result i32) (do (unreachable) ) (catch $e-i32 (pop i32) ) ) ) ;; CHECK: (func $catch_unreachable (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $catch_unreachable (result i32) (try (result i32) (do (i32.const 3) ) (catch $e-i32 (drop (pop i32) ) (unreachable) ) ) ) ) binaryen-version_108/test/lit/passes/flatten.wast000066400000000000000000000013761423707623100223560ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --flatten -S -o - | filecheck %s (module ;; CHECK: (type $simplefunc (func)) (type $simplefunc (func)) ;; CHECK: (func $0 (param $0 (ref $simplefunc)) (result (ref $simplefunc)) ;; CHECK-NEXT: (local $1 (ref null $simplefunc)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (param $0 (ref $simplefunc)) (result (ref $simplefunc)) ;; a local.get of a non-nullable param is ok, and does not need to be ;; modified (local.get $0) ) ) binaryen-version_108/test/lit/passes/flatten_all-features.wast000066400000000000000000002602061423707623100250210ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --flatten --all-features -S -o - | filecheck %s (module ;; CHECK: (type $2 (func (result i32))) ;; CHECK: (type $1 (func)) ;; CHECK: (type $ii (func (param i32 i32))) (type $ii (func (param i32 i32))) (type $1 (func)) (type $2 (func (result i32))) ;; CHECK: (type $3 (func (param i32) (result i32))) (type $3 (func (param i32) (result i32))) ;; CHECK: (type $none_=>_f32 (func (result f32))) ;; CHECK: (type $4 (func (param i64 i64) (result i64))) (type $4 (func (param i64 i64) (result i64))) ;; CHECK: (type $none_=>_anyref (func (result anyref))) ;; CHECK: (global $x (mut i32) (i32.const 0)) (global $x (mut i32) (i32.const 0)) (table 1 1 funcref) (elem (i32.const 0) $call-me) ;; CHECK: (memory $0 10) (memory $0 10) ;; CHECK: (table $0 1 1 funcref) ;; CHECK: (elem (i32.const 0) $call-me) ;; CHECK: (func $a1 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a1 (drop (i32.add (i32.const 0) (i32.const 1))) ) ;; CHECK: (func $a2 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a2 (result i32) (i32.add (i32.const 0) (i32.const 1)) ) ;; CHECK: (func $a3 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a3 (result i32) (i32.add (i32.const 0) (block (result i32) (i32.const 1) ) ) ) ;; CHECK: (func $a4 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a4 (drop (i32.add (i32.const 0) (block (result i32) (i32.const 1) ) ) ) ) ;; CHECK: (func $a5 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a5 (result i32) (i32.add (block (result i32) (i32.const 0) ) (block (result i32) (i32.const 1) ) ) ) ;; CHECK: (func $a6 (result i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a6 (result i32) (local $x i32) (i32.add (block (result i32) (local.tee $x (i32.const 0) ) ) (block (result i32) (local.tee $x (i32.const 1) ) ) ) ) ;; CHECK: (func $a7 (result i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (block $block2 ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a7 (result i32) (local $x i32) (block (result i32) (i32.add (block (result i32) (local.tee $x (i32.const 0) ) ) (block (result i32) (local.tee $x (i32.const 1) ) ) ) ) ) ;; CHECK: (func $a8 (result i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block $outer ;; CHECK-NEXT: (block $inner ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $inner) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $outer) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block4 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $outer) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a8 (result i32) (local $x i32) (block $outer (result i32) (block $inner (result i32) (i32.add (block (result i32) (br $inner (i32.const -1) ) (br $outer (i32.const 0) ) (i32.const 1) ) (block (result i32) (br $outer (i32.const 2) ) (local.tee $x (i32.const 3) ) ) ) ) ) ) ;; CHECK: (func $a9 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (loop $outer ;; CHECK-NEXT: (loop $inner ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br_if $outer ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a9 (result i32) (loop $outer (result i32) (loop $inner (result i32) (br_if $outer (i32.const -1)) (i32.add (i32.const 0) (i32.const 1) ) ) ) ) ;; CHECK: (func $a10 (result i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block $outer ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $outer ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $outer ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $outer ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $outer ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $outer) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a10 (result i32) (local $x i32) (block $outer (result i32) (drop (br_if $outer (i32.const 0) (i32.const 1))) (drop (br_if $outer (local.tee $x (i32.const 2)) (i32.const 3))) (drop (br_if $outer (i32.const 4) (local.tee $x (i32.const 5)))) (drop (br_if $outer (local.tee $x (i32.const 6)) (local.tee $x (i32.const 7)))) (br $outer (i32.const 8)) ) ) ;; CHECK: (func $a11 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a11 (if (i32.const 0) (drop (i32.const 1)) ) ) ;; CHECK: (func $a12 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a12 (result i32) (if (result i32) (i32.const 0) (i32.const 1) (i32.const 2) ) ) ;; CHECK: (func $a13 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (block $x ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $x ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a13 (result i32) (block $x i32 (if i32 (br_table $x (i32.const 2) (i32.const 0)) (i32.const 0) (i32.const 1) ) ) ) ;; CHECK: (func $a14 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $block ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a14 (result i32) (block i32 (select (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) ) ) ) ;; CHECK: (func $a15 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f32) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 53) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $a15 (if (i32.load16_u (i32.const 53) ) (unreachable) (drop (block $label$3 (result f32) (unreachable) ) ) ) ) ;; CHECK: (func $a16 (result i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a16 (result i32) (local $x i32) (block $label$1 (result i32) (drop (br_if $label$1 (local.tee $x ;; set here, then it is undone later, but this value is used, not the contents of $x! (i32.const 1) ) (i32.eqz ;; 0 into 1, so take the br_if (block $label$2 (result i32) (local.set $x (i32.const 0) ;; undo the above tee ) (i32.const 0) ) ) ) ) (i32.const 0) ) ) ;; CHECK: (func $a17 (result f32) ;; CHECK-NEXT: (local $var$0 f32) ;; CHECK-NEXT: (local $1 f32) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local $3 f32) ;; CHECK-NEXT: (local $4 f32) ;; CHECK-NEXT: (local $5 f32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$0 ;; CHECK-NEXT: (f32.const -137438953472) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (f32.max ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a17 (result f32) (local $var$0 f32) (f32.max (local.get $var$0) (select (local.tee $var$0 (f32.const -137438953472) ) (local.get $var$0) (i32.const 0) ) ) ) ;; CHECK: (func $a18 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a18 (result i32) (block $label$1 (result i32) (i32.load16_s (drop ;; an unreachable drop. one we move its contents outside, it should stay unreachable (br_if $label$1 (i32.const 1) (unreachable) ) ) ) ) ) ;; CHECK: (func $a19 (result f32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (f32.const 4289944320) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $a19 (result f32) (block $label$0 (block $label$1 (drop (select (unreachable) ;; move this out, so it happens before the return (return (f32.const 4289944320) ) (i32.const 65535) ) ) ) ) ) ;; CHECK: (func $call-me (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $call-me (param $0 i32) (param $1 i32) (nop) ) ;; CHECK: (func $code-to-kill ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $out $out $out $out ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call $code-to-kill) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out1 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out3 ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out4 ;; CHECK-NEXT: (br_table $out4 $out4 $out4 $out4 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out5 ;; CHECK-NEXT: (br_if $out5 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out8 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out9 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out11 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out13 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out15 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out16 ;; CHECK-NEXT: (block $in ;; CHECK-NEXT: (br_if $out16 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block11 ;; CHECK-NEXT: (block $out18 ;; CHECK-NEXT: (block $in19 ;; CHECK-NEXT: (br_if $in19 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out20 ;; CHECK-NEXT: (block $in21 ;; CHECK-NEXT: (br_table $out20 $in21 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out22 ;; CHECK-NEXT: (block $in23 ;; CHECK-NEXT: (br_table $in23 $out22 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block13 ;; CHECK-NEXT: (block $out25 ;; CHECK-NEXT: (block $in26 ;; CHECK-NEXT: (br_table $in26 $in26 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block15 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (loop $loop-in18 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out29 ;; CHECK-NEXT: (loop $in30 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br_if $out29 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block20 ;; CHECK-NEXT: (loop $in32 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br_if $in32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call $call-me ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call $call-me ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call $call-me ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: (i32.const 456) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (i32.const 139) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (i32.const 246) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 33) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 55) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 66) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 77) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 88) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 99) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: (i32.const 456) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 101) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 456) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: (i32.const 456) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $code-to-kill (local $x i32) (block $out (br $out) (drop (i32.const 0) ) (if (i32.const 1) (drop (i32.const 2) ) ) (br_table $out $out $out $out (i32.const 3) ) (call $code-to-kill) ) (if (i32.const 0) (block $out1 (unreachable) (drop (i32.const 0) ) ) ) (if (i32.const 0) (block $out3 (return) (drop (i32.const 0) ) ) ) (block $out4 (br_table $out4 $out4 $out4 $out4 (i32.const 4) ) (drop (i32.const 0) ) ) (block $out5 (br_if $out5 (i32.const 3) ) (drop (i32.const 0) ) ) (if (i32.const 0) (block $block4 (if (i32.const 0) (block $out8 (unreachable) (drop (i32.const 0) ) ) (block $out9 (unreachable) (drop (i32.const 0) ) ) ) (drop (i32.const 0) ) ) ) (if (i32.const 0) (drop (block $out11 (result i32) (br $out11 (unreachable) ) (drop (i32.const 0) ) (unreachable) ) ) ) (if (i32.const 0) (drop (block $out13 (result i32) (br_if $out13 (unreachable) (i32.const 0) ) (drop (i32.const 0) ) (unreachable) ) ) ) (if (i32.const 0) (drop (block $out15 (result i32) (br_if $out15 (unreachable) (unreachable) ) (drop (i32.const 0) ) (unreachable) ) ) ) (block $out16 (block $in (br_if $out16 (i32.const 1) ) ) (unreachable) ) (if (i32.const 0) (block $block11 (block $out18 (block $in19 (br_if $in19 (i32.const 1) ) ) (unreachable) ) (drop (i32.const 10) ) ) ) (block $out20 (block $in21 (br_table $out20 $in21 (i32.const 1) ) ) (unreachable) ) (block $out22 (block $in23 (br_table $in23 $out22 (i32.const 1) ) ) (unreachable) ) (if (i32.const 0) (block $block13 (block $out25 (block $in26 (br_table $in26 $in26 (i32.const 1) ) ) (unreachable) ) (drop (i32.const 10) ) ) ) (if (i32.const 0) (block $block15 (drop (i32.const 10) ) (drop (i32.const 42) ) (unreachable) (return (unreachable) ) (unreachable) (return) ) ) (if (i32.const 0) (loop $loop-in18 (unreachable) ) ) (block $out29 (loop $in30 (br_if $out29 (i32.const 1) ) (unreachable) ) ) (if (i32.const 0) (block $block20 (loop $in32 (br_if $in32 (i32.const 1) ) (unreachable) ) (drop (i32.const 10) ) ) ) (if (i32.const 1) (call $call-me (i32.const 123) (unreachable) ) ) (if (i32.const 2) (call $call-me (unreachable) (i32.const 0) ) ) (if (i32.const 3) (call $call-me (unreachable) (unreachable) ) ) (if (i32.const -1) (call_indirect (type $ii) (i32.const 123) (i32.const 456) (unreachable) ) ) (if (i32.const -2) (call_indirect (type $ii) (i32.const 139) (unreachable) (i32.const 0) ) ) (if (i32.const -3) (call_indirect (type $ii) (i32.const 246) (unreachable) (unreachable) ) ) (if (i32.const -4) (call_indirect (type $ii) (unreachable) (unreachable) (unreachable) ) ) (if (i32.const 11) (local.set $x (unreachable) ) ) (if (i32.const 22) (drop (i32.load (unreachable) ) ) ) (if (i32.const 33) (i32.store (i32.const 0) (unreachable) ) ) (if (i32.const 44) (i32.store (unreachable) (i32.const 0) ) ) (if (i32.const 55) (i32.store (unreachable) (unreachable) ) ) (if (i32.const 66) (drop (i32.eqz (unreachable) ) ) ) (if (i32.const 77) (drop (i32.add (unreachable) (i32.const 0) ) ) ) (if (i32.const 88) (drop (i32.add (i32.const 0) (unreachable) ) ) ) (if (i32.const 99) (i32.add (unreachable) (unreachable) ) ) (if (i32.const 100) (drop (select (i32.const 123) (i32.const 456) (unreachable) ) ) ) (if (i32.const 101) (drop (select (i32.const 123) (unreachable) (i32.const 456) ) ) ) (if (i32.const 102) (drop (select (unreachable) (i32.const 123) (i32.const 456) ) ) ) (drop (i32.const 1337) ) ) ;; CHECK: (func $killer ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $killer (type $1) (unreachable) (drop (i32.const 1000) ) ) ;; CHECK: (func $target ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $target (type $1) (drop (i32.const 2000) ) ) ;; CHECK: (func $typed-block-none-then-unreachable (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $top-typed ;; CHECK-NEXT: (block $switch$0 ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br $switch$0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $typed-block-none-then-unreachable (type $2) (result i32) (block $top-typed (result i32) (block $switch$0 (return (i32.const 0) ) (br $switch$0) ) (return (i32.const 1) ) ) ) ;; CHECK: (func $typed-block-remove-br-changes-type (param $$$0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $switch$7 ;; CHECK-NEXT: (block $switch-default$10 ;; CHECK-NEXT: (block $switch-case$9 ;; CHECK-NEXT: (block $switch-case$8 ;; CHECK-NEXT: (br_table $switch-case$9 $switch-case$8 $switch-default$10 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $$$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br $switch$7) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $$$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $typed-block-remove-br-changes-type (type $3) (param $$$0 i32) (result i32) (block $switch$7 (block $switch-default$10 (block $switch-case$9 (block $switch-case$8 (br_table $switch-case$9 $switch-case$8 $switch-default$10 (i32.const -1) ) ) ) (return (local.get $$$0) ) (br $switch$7) ) (return (local.get $$$0) ) ) (return (i32.const 0) ) ) ;; CHECK: (func $global ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (global.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $global (type $1) (unreachable) (drop (global.get $x) ) (global.set $x (i32.const 1) ) ) ;; CHECK: (func $ret (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ret (type $2) (result i32) (return (i32.const 0) ) (nop) (i32.const 0) ) ;; CHECK: (func $unreachable-br (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-br (type $2) (result i32) (block $out (result i32) (br $out (br $out (i32.const 0) ) ) ) ) ;; CHECK: (func $unreachable-br-loop (result i32) ;; CHECK-NEXT: (loop $out ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $unreachable-br-loop (type $2) (result i32) (loop $out (br $out) ) ) ;; CHECK: (func $unreachable-block-ends-switch (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br_table $label$3 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-block-ends-switch (type $2) (result i32) (block $label$0 (result i32) (block $label$3 (nop) (br_table $label$3 (unreachable) ) (unreachable) ) (i32.const 19) ) ) ;; CHECK: (func $unreachable-block-ends-br_if (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-block-ends-br_if (result i32) (block $label$0 (result i32) (block $label$2 (nop) (br_if $label$2 (unreachable) ) (unreachable) ) (i32.const 19) ) ) ;; CHECK: (func $unreachable-brs-3 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$0) ;; CHECK-NEXT: (memory.grow ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-brs-3 (result i32) (block $label$0 (result i32) (br $label$0 (memory.grow (br $label$0 (i32.const 18) ) ) ) (i32.const 21) ) ) ;; CHECK: (func $unreachable-brs-4 (param $var$0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 4104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$0 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable-brs-4 (param $var$0 i32) (result i32) (i32.add (i32.const 1) (block $label$0 (result i32) (br $label$0 (block $label$1 (result i32) (drop (br_if $label$0 (i32.const 4104) (unreachable) ) ) (i32.const 4) ) ) (i32.const 16) ) ) ) ;; CHECK: (func $call-unreach (param $var$0 i64) (param $var$1 i64) (result i64) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i64) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i64) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i64) ;; CHECK-NEXT: (local $12 i64) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i64) ;; CHECK-NEXT: (local $15 i64) ;; CHECK-NEXT: (local $16 i64) ;; CHECK-NEXT: (local $17 i64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i64.mul ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $call-unreach ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-unreach (param $var$0 i64) (param $var$1 i64) (result i64) (local $2 i64) (if (result i64) (i64.eqz (local.get $var$0) ) (block $label$0 (result i64) (local.get $var$1) ) (block $label$1 (result i64) (call $call-unreach (i64.sub (local.get $var$0) (i64.const 1) ) (i64.mul (block $block (result i64) (local.set $2 (local.get $var$0) ) (nop) (local.get $2) ) (unreachable) ) ) ) ) ) ;; flatten-specific ;; CHECK: (func $test-flatten ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (local $20 i32) ;; CHECK-NEXT: (local $21 i32) ;; CHECK-NEXT: (local $22 i32) ;; CHECK-NEXT: (local $23 i32) ;; CHECK-NEXT: (local $24 i32) ;; CHECK-NEXT: (local $25 i32) ;; CHECK-NEXT: (local $26 i32) ;; CHECK-NEXT: (local $27 i32) ;; CHECK-NEXT: (local $28 i32) ;; CHECK-NEXT: (local $29 i32) ;; CHECK-NEXT: (local $30 i32) ;; CHECK-NEXT: (local $31 i32) ;; CHECK-NEXT: (local $32 i32) ;; CHECK-NEXT: (local $33 i32) ;; CHECK-NEXT: (local $34 i32) ;; CHECK-NEXT: (local $35 i32) ;; CHECK-NEXT: (local $36 i32) ;; CHECK-NEXT: (local $37 i32) ;; CHECK-NEXT: (local $38 i32) ;; CHECK-NEXT: (local $39 i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br_table $out $out $out $out ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $in ;; CHECK-NEXT: (block $switch-in ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $in $switch-in $in ;; CHECK-NEXT: (i32.const 777) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $in) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loop-in ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $21 ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $22 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (local.set $23 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $23 ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $24 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $25 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (local.set $26 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $26 ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $27 ;; CHECK-NEXT: (local.get $26) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: (local.set $28 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $28 ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $29 ;; CHECK-NEXT: (local.get $28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $30 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (local.set $31 ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $31 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $32 ;; CHECK-NEXT: (local.get $31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $32) ;; CHECK-NEXT: (local.set $35 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (local.set $33 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $33 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $34 ;; CHECK-NEXT: (local.get $33) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $35 ;; CHECK-NEXT: (local.get $34) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $36 ;; CHECK-NEXT: (local.get $35) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $36) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $temp ;; CHECK-NEXT: (local.set $37 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $temp ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $38 ;; CHECK-NEXT: (local.get $37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $37 ;; CHECK-NEXT: (local.get $38) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $39 ;; CHECK-NEXT: (local.get $37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $39) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test-flatten (block $out (drop (i32.add (i32.const 1) (i32.const 2))) (drop (i32.add (i32.const 1) (br $out))) (drop (i32.add (br $out) (i32.const 1))) (drop (i32.add (i32.const 1) (br_table $out $out $out $out (i32.const 3)))) (drop (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (i32.const 3)) (i32.const 4) ) )) (drop (i32.add (i32.const 1) (block $in (result i32) (drop (block $switch-in (result i32) (br_table $in $switch-in $in (i32.const 2) (i32.const 777)) ) ) (br $in (i32.const 3)) (i32.const 4) ) )) (drop (i32.add (i32.const 1) (loop (result i32) (i32.const 5) ) )) (drop (i32.add (i32.const 1) (if (result i32) (i32.const 6) (i32.const 7) (i32.const 8) ) )) (drop (select (i32.const 9) (i32.const 10) (i32.const 11) ) ) (drop (select (br $out) (i32.const 10) (i32.const 11) ) ) (drop (select (i32.const 9) (br $out) (i32.const 11) ) ) (drop (select (i32.const 9) (i32.const 10) (br $out) ) ) (drop (select (if (result i32) (i32.const 11) (i32.const 12) (i32.const 13) ) (i32.const 9) (i32.const 10) ) ) (drop (select (i32.const 9) (if (result i32) (i32.const 11) (i32.const 12) (i32.const 13) ) (i32.const 10) ) ) (drop (select (i32.const 9) (i32.const 10) (if (result i32) (i32.const 11) (i32.const 12) (i32.const 13) ) ) ) (drop (select (if (result i32) (i32.const 11) (i32.const 12) (i32.const 13) ) (i32.const 14) (if (result i32) (i32.const 15) (i32.const 16) (i32.const 17) ) ) ) (drop (i32.add (i32.const 1) (return))) (drop (i32.add (i32.const 1) (unreachable))) (drop (if (result i32) (if (result i32) (i32.const 5) (i32.const 6) (i32.const 7) ) (i32.const 8) (if (result i32) (i32.const 9) (i32.const 10) (i32.const 11) ) ) ) (drop (block $temp (result i32) (br_if $temp (i32.const 1) (i32.const 2) ) ) ) ) ) ;; CHECK: (func $flatten-return-value (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $flatten-return-value (result i32) (drop (i32.add (i32.const 1) (return (i32.const 2)))) (i32.const 3) ) ;; CHECK: (func $unbug ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $432 i32) ;; CHECK-NEXT: (local $430 i32) ;; CHECK-NEXT: (local $431 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $433 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (local $20 i32) ;; CHECK-NEXT: (local $21 i32) ;; CHECK-NEXT: (local $22 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (block $block44 ;; CHECK-NEXT: (block $label$78 ;; CHECK-NEXT: (local.set $430 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $430) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $432 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block45 ;; CHECK-NEXT: (block $label$79 ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.load16_u offset=2 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $431 ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (local.get $431) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $432 ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $433 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (local.get $432) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (local.get $433) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $21 ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $22 ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unbug (local $12 i32) (local $432 i32) (local $430 i32) (local $431 i32) (local $9 i32) (local $5 i32) (local $433 i32) (drop (block (result i32) (if (i32.eq (local.get $12) (i32.const 65535) ) (block (block $label$78 (local.set $430 (i32.const 0) ) ) (local.set $432 (local.get $430) ) ) (block (block $label$79 (local.set $431 (i32.lt_u (local.get $9) (i32.load16_u offset=2 (i32.add (local.get $5) (i32.mul (local.get $12) (i32.const 12) ) ) ) ) ) ) (local.set $432 (local.get $431) ) ) ) (local.set $433 (i32.const 1) ) (i32.xor (local.get $432) (local.get $433) ) ) ) ) ;; CHECK: (func $outer-block-typed (param $var$0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $outer-block-typed (type $3) (param $var$0 i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block $label$0 (result i32) (i32.const 16) ) ) ) ) ;; CHECK: (func $nested-br_if-with-value (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-br_if-with-value (result i32) (local $0 i32) (block $label$0 (result i32) (drop (br_if $label$0 (i32.const 0) (block (result i32) (local.get $0) ) ) ) (i32.const 1) ) ) ;; CHECK: (func $switch-unreachable ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (br_table $label$3 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $switch-unreachable (block $label$3 (br_table $label$3 (unreachable) ) ) ) ;; CHECK: (func $br_if_order (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block $outer ;; CHECK-NEXT: (block $inner ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $outer ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const -16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (call $br_if_order ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $inner ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_if_order (param $x i32) (result i32) (block $outer (result i32) (block $inner (result i32) (br_if $inner (br_if $outer (i32.const 0) (i32.const 1) ) (call $br_if_order (block (result i32) (i32.const -16) ) ) ) ) ) ) ;; CHECK: (func $tees (param $x i32) (param $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $tees (param $x i32) (param $y i32) (drop (local.tee $x (i32.const 1))) (drop (local.tee $x (unreachable))) (drop (local.tee $y (local.tee $x (i32.const 2)))) ) ;; CHECK: (func $return (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $return (param $x i32) (result i32) (return (i32.sub (i32.const 1) (i32.const 2))) ) ;; subtypes ;; br_if leaves a value on the stack if not taken, which later can be the last ;; element of the enclosing innermost block and flow out. So in case br_if ;; targets an outer branch whose return type is a supertype of the br_if's ;; value type, we need the value to be set into two locals: one with the outer ;; block's type, and one with its value type. ;; CHECK: (func $subtype (result anyref) ;; CHECK-NEXT: (local $0 anyref) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (local $2 anyref) ;; CHECK-NEXT: (local $3 anyref) ;; CHECK-NEXT: (local $4 anyref) ;; CHECK-NEXT: (local $5 anyref) ;; CHECK-NEXT: (local $6 anyref) ;; CHECK-NEXT: (block $label0 ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subtype (result anyref) (local $0 externref) (block $label0 (result anyref) (block (result externref) (local.tee $0 (br_if $label0 (ref.null extern) (i32.const 0) ) ) ) ) ) ) (module ;; CHECK: (type $i64_f32_=>_none (func (param i64 f32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (export "test" (func $1)) ;; CHECK: (func $0 (param $0 i64) (param $1 f32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $0 (param $0 i64) (param $1 f32) (nop) ) (func "test" (result i32) (call $0 (unreachable) ;; the unreachable should be handled properly, and not be ;; reordered with the return (return (i32.const -111) ) ) ) ) ;; non-nullable temp vars we add must be handled properly, as non-nullable ;; locals are not allowed ;; CHECK: (func $1 (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const -111) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $0 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (module ;; CHECK: (type $none_=>_none (func)) (type $none_=>_none (func)) ;; CHECK: (type $none_=>_funcref (func (result funcref))) ;; CHECK: (func $0 (result funcref) ;; CHECK-NEXT: (local $0 (ref null $none_=>_none)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $none_=>_none) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (result funcref) (ref.as_non_null (ref.null $none_=>_none) ) ) ) binaryen-version_108/test/lit/passes/flatten_dfo_O3_enable-threads.wast000066400000000000000000000127241423707623100265040ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --flatten --dfo -O3 --enable-threads -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (type $i64_i32_=>_f64 (func (param i64 i32) (result f64))) ;; CHECK: (type $f64_=>_f64 (func (param f64) (result f64))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (memory $0 (shared 1 1)) (memory $0 (shared 1 1)) (func "one" (loop $label$2 (br_if $label$2 (block $label$3 (result i32) (drop (br_if $label$3 (i32.const 0) (i32.load (i32.const 3060) ) ) ) (i32.const 0) ) ) ) (unreachable) ) (func "two" (param $var$0 i32) (param $var$1 i32) (result i32) (nop) (nop) (nop) (nop) (nop) (if (i32.const 0) (i32.store8 (i32.const 8) (block $label$2 (result i32) (drop (br_if $label$2 (i32.const 1) (i32.const 0) ) ) (if (i32.const 0) (drop (br_if $label$2 (i32.const 1) (i32.const 1) ) ) ) (block $label$4 (br_if $label$4 (i32.const 0) ) (br_if $label$4 (i32.const 0) ) (drop (br_if $label$2 (i32.const 1) (i32.const 0) ) ) ) (i32.const 6704) ) ) ) (nop) (i32.const 0) ) (func "use-var" (param $var$0 i64) (param $var$1 i32) (result f64) (local $var$2 i32) (block $label$1 (br_table $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 (i32.wrap_i64 (if (result i64) (i32.const 0) (i64.const 1) (if (result i64) (if (result i32) (i32.const 0) (unreachable) (block $label$6 (result i32) (block $label$7 (loop $label$8 (br_if $label$8 (br_if $label$6 (local.tee $var$2 (block $label$9 (result i32) (local.get $var$1) ) ) (i32.const 0) ) ) (loop $label$10 (if (i32.const 0) (local.set $var$2 (local.get $var$1) ) ) ) (drop (i32.eqz (local.get $var$2) ) ) ) ) (unreachable) ) ) (unreachable) (i64.const 1) ) ) ) ) ) (unreachable) ) (func "bad1" (local $var$2 i32) (local $var$4 i32) (block $label$1 (loop $label$2 (local.set $var$4 (if (result i32) (i32.const 0) (block (result i32) (local.set $var$4 (local.tee $var$2 (i32.xor (i32.const 0) (i32.const -1) ) ) ) (i32.const 0) ) (block (result i32) (local.set $var$4 (local.tee $var$2 (i32.xor (i32.const 0) (i32.const -1) ) ) ) (i32.const 0) ) ) ) (i32.store (i32.const 1) (i32.shl (local.get $var$2) (i32.const 14) ) ) ) ) ) (func "only-dfo" (param $var$0 f64) (result f64) (local $var$1 i32) (local $var$2 i32) (loop $label$1 (if (local.tee $var$1 (local.tee $var$2 (local.get $var$1) ) ) (if (local.get $var$2) (i64.atomic.store32 offset=3 (i32.and (local.get $var$1) ;; only dfo can figure out that this is 0 (i32.const 15) ) (i64.const -32768) ) ) ) (br $label$1) ) ) (func "dfo-tee-get" (result i32) (local $0 i32) (if (result i32) (local.tee $0 (i32.const 1) ) (loop $label$2 (result i32) (select (i32.const 1) (i32.const -1709605511) (local.get $0) ) ) (unreachable) ) ) ) ;; CHECK: (export "one" (func $0)) ;; CHECK: (export "two" (func $1)) ;; CHECK: (export "use-var" (func $2)) ;; CHECK: (export "bad1" (func $3)) ;; CHECK: (export "only-dfo" (func $4)) ;; CHECK: (export "dfo-tee-get" (func $5)) ;; CHECK: (func $0 (; has Stack IR ;) ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (br_if $label$3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 3060) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK: (func $1 (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK: (func $2 (; has Stack IR ;) (param $0 i64) (param $1 i32) (result f64) ;; CHECK-NEXT: (loop $label$8 ;; CHECK-NEXT: (br_if $label$8 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK: (func $3 (; has Stack IR ;) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const -16384) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $4 (; has Stack IR ;) (param $0 f64) (result f64) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (loop $label$1 ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $5 (; has Stack IR ;) (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/flatten_i64-to-i32-lowering.wast000066400000000000000000000504241423707623100256750ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --flatten --i64-to-i32-lowering -S -o - | filecheck %s (module (memory 1 1) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $none_=>_i64 (func (result i64))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "func" (func $import (result i64))) (import "env" "func" (func $import (result i64))) ;; CHECK: (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $defined (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $0$hi i32) ;; CHECK-NEXT: (local $i64toi32_i32$0 i32) ;; CHECK-NEXT: (local $i64toi32_i32$1 i32) ;; CHECK-NEXT: (local $i64toi32_i32$2 i32) ;; CHECK-NEXT: (local $i64toi32_i32$3 i32) ;; CHECK-NEXT: (local $i64toi32_i32$4 i32) ;; CHECK-NEXT: (local $i64toi32_i32$5 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$2 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$3 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: (local.get $i64toi32_i32$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $i64toi32_i32$4) ;; CHECK-NEXT: (local.get $i64toi32_i32$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $i64toi32_i32$5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i64toi32_i32$4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $i64toi32_i32$2 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$5 ;; CHECK-NEXT: (local.get $0$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $i64toi32_i32$HIGH_BITS ;; CHECK-NEXT: (local.get $i64toi32_i32$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $defined (result i64) (i64.add (i64.const 1) (i64.const 2)) ) ;; CHECK: (func $unreachable-select-i64 (result i32) ;; CHECK-NEXT: (local $i64toi32_i32$0 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $unreachable-select-i64 (result i64) (select (i64.const 1) (unreachable) (i32.const 2) ) ) ;; CHECK: (func $unreachable-select-i64-b (result i32) ;; CHECK-NEXT: (local $i64toi32_i32$0 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $unreachable-select-i64-b (result i64) (select (unreachable) (i64.const 3) (i32.const 4) ) ) ;; CHECK: (func $unreachable-select-i64-c (result i32) ;; CHECK-NEXT: (local $i64toi32_i32$0 i32) ;; CHECK-NEXT: (local $i64toi32_i32$1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $unreachable-select-i64-c (result i64) (select (i64.const 5) (i64.const 6) (unreachable) ) ) ;; CHECK: (func $mem ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $0$hi i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $1$hi i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $2$hi i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $3$hi i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $4$hi i32) ;; CHECK-NEXT: (local $i64toi32_i32$0 i32) ;; CHECK-NEXT: (local $i64toi32_i32$1 i32) ;; CHECK-NEXT: (local $i64toi32_i32$2 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (local.get $0$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (local.get $1$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.load align=2 ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.load offset=4 align=2 ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (local.get $2$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.load offset=4 align=1 ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (local.get $3$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $i64toi32_i32$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (local.get $4$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=2 ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 align=2 ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 align=1 ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: (local.get $i64toi32_i32$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $mem (drop (i64.load align=8 (i32.const 0))) (drop (i64.load align=4 (i32.const 0))) (drop (i64.load align=2 (i32.const 0))) (drop (i64.load align=1 (i32.const 0))) (drop (i64.load (i32.const 0))) (i64.store align=8 (i32.const 0) (i64.const 1)) (i64.store align=4 (i32.const 0) (i64.const 2)) (i64.store align=2 (i32.const 0) (i64.const 3)) (i64.store align=1 (i32.const 0) (i64.const 4)) (i64.store (i32.const 0) (i64.const 5)) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (global $f (mut i32) (i32.const -1412567121)) (global $f (mut i64) (i64.const 0x12345678ABCDEFAF)) ;; CHECK: (global $g (mut i32) (global.get $f)) (global $g (mut i64) (global.get $f)) ;; CHECK: (global $f$hi (mut i32) (i32.const 305419896)) ;; CHECK: (global $g$hi (mut i32) (global.get $f$hi)) ;; CHECK: (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0)) ;; CHECK: (export "exp" (func $1)) ;; CHECK: (export "unreach" (func $2)) ;; CHECK: (func $call (param $0 i32) (param $0$hi i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $call (param i64)) (func "exp" (call $call (global.get $f)) (global.set $f (i64.const 0x1122334455667788)) ) (func "unreach" (global.set $f (block $label$1 (result i64) (unreachable) ) ) ) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $0$hi i32) ;; CHECK-NEXT: (local $i64toi32_i32$0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (global.get $f$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $call ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (local.get $0$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $f ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 287454020) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1432778632) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $f$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $0$hi i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $1$hi i32) ;; CHECK-NEXT: (local $i64toi32_i32$0 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (local.get $0$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $f ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (local.get $1$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $f$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $f (mut i32) (i32.const -1412567121)) (global $f (mut i64) (i64.const 0x12345678ABCDEFAF)) ;; CHECK: (global $g (mut i32) (global.get $f)) (global $g (mut i64) (global.get $f)) ;; CHECK: (global $f$hi (mut i32) (i32.const 305419896)) ;; CHECK: (global $g$hi (mut i32) (global.get $f$hi)) ;; CHECK: (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0)) ;; CHECK: (export "exp" (func $1)) ;; CHECK: (func $call (param $0 i32) (param $0$hi i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $call (param i64)) (func "exp" (call $call (global.get $f)) (global.set $f (i64.const 0x1122334455667788)) ) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $0$hi i32) ;; CHECK-NEXT: (local $i64toi32_i32$0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (global.get $f$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $f) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $call ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (local.get $0$hi) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $f ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $i64toi32_i32$0 ;; CHECK-NEXT: (i32.const 287454020) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1432778632) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $f$hi ;; CHECK-NEXT: (local.get $i64toi32_i32$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module (type $i64_f64_i32_=>_none (func (param i64 f64 i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0)) ;; CHECK: (table $0 37 funcref) (table $0 37 funcref) ;; CHECK: (func $0 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -32768) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $0 (call_indirect (type $i64_f64_i32_=>_none) (unreachable) (f64.const 1) (i32.const -32768) (i32.const 20) ) ) ) binaryen-version_108/test/lit/passes/flatten_rereloop.wast000066400000000000000000001336601423707623100242670ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --flatten --rereloop -S -o - | filecheck %s (module (memory 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $none_=>_f64 (func (result f64))) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $i32_=>_f32 (func (param i32) (result f32))) ;; CHECK: (type $none_=>_f32 (func (result f32))) ;; CHECK: (global $global (mut i32) (i32.const 0)) (global $global (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1) ;; CHECK: (func $0 (result f64) ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.const -nan:0xfffffd63e4e5a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (result f64) (if (i32.const 0) (loop $label$2 (unreachable) ) ) (f64.const -nan:0xfffffd63e4e5a) ) ;; CHECK: (func $1 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$6$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $switch$1$leave ;; CHECK-NEXT: (block $switch$1$default ;; CHECK-NEXT: (block $switch$1$case$4 ;; CHECK-NEXT: (br_table $switch$1$case$4 $switch$1$case$4 $switch$1$default ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$6$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $switch$6$leave ;; CHECK-NEXT: (block $switch$6$default ;; CHECK-NEXT: (block $switch$6$case$3 ;; CHECK-NEXT: (br_table $switch$6$case$3 $switch$6$default ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $1 (result i32) (block $label$8 (block $label$9 (block $label$16 (block $label$18 (block $label$19 (br_table $label$18 $label$16 $label$19 (i32.const 0) ) ) (br_table $label$9 $label$8 (i32.const 1) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (i32.const 2) ) ;; CHECK: (func $skip-empty ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $skip-empty (block $a1 (block $a2 (block $a3 (block $a4 (br $a4) ) (br $a3) ) (br $a2) ) (br $a1) ) ) ;; CHECK: (func $skip-empty-2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block$5$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$5$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$4$break ;; CHECK-NEXT: (call $skip-empty) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$4$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (call $skip-empty) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $skip-empty-2 (block $a1 (block $a2 (block $a3 (block $a4 (br $a4) ) (call $skip-empty) (br $a3) ) (call $skip-empty) (br $a2) ) (br $a1) ) ) ;; CHECK: (func $skip-empty-3 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block$5$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$5$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$4$break ;; CHECK-NEXT: (call $skip-empty) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$4$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (call $skip-empty) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $skip-empty-3 (block $a1 (block $a2 (block $a3 (block $a4 (nop) (br $a4) (nop) ) (nop) (call $skip-empty) (nop) (br $a3) ) (nop) (call $skip-empty) (nop) (br $a2) ) (br $a1) ) ) ;; CHECK: (func $skip-empty-4 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $skip-empty-4 (param $x i32) (block $a1 (block $a2 (block $a3 (block $a4 (br_table $a1 $a2 $a3 $a4 $a1 $a2 $a3 $a4 (local.get $x)) ) (br $a3) ) (br $a2) ) (br $a1) ) ) ;; CHECK: (func $skipping (param $0 i32) (result f32) ;; CHECK-NEXT: (local $1 f32) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local $3 f32) ;; CHECK-NEXT: (local $4 f32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $skipping (param $0 i32) (result f32) (if (i32.const 0) (unreachable) ) ;; branches joining here lead to skip opportunities (loop $label$2 (result f32) (f32.const 1) ) ) ;; CHECK: (func $merging ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $merging (if (i32.const 0) (return) ;; no else, but the else ends up with a return too, and we can merge them ) ) ;; CHECK: (func $unswitch ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unswitch (block $label$1 (br_table $label$1 $label$1 (i32.const 0) ) ) ) ;; CHECK: (func $skip-only-empty ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block$3$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$3$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $block$3$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $skip-only-empty (if (i32.const 1) (global.set $global (i32.const 0) ) ) ) ;; CHECK: (func $skip-only-one-branch-out (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $skip-only-one-branch-out (result i32) (block $label$1 (nop) ) (if (i32.const 1) (unreachable) ;; blocks a path through ) (i32.const 0) ) ;; CHECK: (func $multipass-for-skips (result f32) ;; CHECK-NEXT: (local $0 f32) ;; CHECK-NEXT: (local $1 f32) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local $3 f32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (block $block$7$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f32.const 9223372036854775808) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$7$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.const 65505) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$7$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multipass-for-skips (result f32) (if (result f32) (i32.const 0) (block (result f32) (block $label$2 (br_if $label$2 (i32.const 536870912) ) ) (f32.const 9223372036854775808) ) (f32.const 65505) ) ) ;; CHECK: (func $branch-merge-vs-replace ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $branch-merge-vs-replace (if (i32.const 0) (unreachable) ) ) ;; CHECK: (func $unswitch-amount ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -23) ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$6$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $switch$4$leave ;; CHECK-NEXT: (block $switch$4$default ;; CHECK-NEXT: (block $switch$4$case$2 ;; CHECK-NEXT: (br_table $switch$4$case$2 $switch$4$default ;; CHECK-NEXT: (i32.const 44064) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$6$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unswitch-amount (block $label$1 (if (i32.const -23) (nop) (block (block $label$4 (br_table $label$1 $label$4 (i32.const 44064) ) ) (unreachable) ) ) ) ) ) ;; manual TODO: merge branches, all the parts (module ;; CHECK: (type $3 (func (param i32))) ;; CHECK: (type $0 (func)) (type $0 (func)) ;; CHECK: (type $2 (func (param i32) (result i32))) ;; CHECK: (type $1 (func (result i32))) (type $1 (func (result i32))) (type $2 (func (param i32) (result i32))) (type $3 (func (param i32))) ;; CHECK: (func $trivial ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) (func $trivial (; 0 ;) (type $0) (nop) ) ;; CHECK: (func $trivial2 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $trivial) ;; CHECK-NEXT: (call $trivial) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $trivial2 (; 1 ;) (type $0) (block (call $trivial) (nop) (call $trivial) (nop) ) (nop) ) ;; CHECK: (func $return-void ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) (func $return-void (; 2 ;) (type $0) (return) (unreachable) ) ;; CHECK: (func $return-val (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $return-val (; 3 ;) (type $1) (result i32) (return (i32.const 1) ) (unreachable) ) ;; CHECK: (func $ifs (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ifs (; 4 ;) (type $2) (param $x i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (block (block (local.set $1 (local.get $x) ) (if (local.get $1) (block (block (local.set $2 (local.get $x) ) (if (local.get $2) (block (return (i32.const 2) ) (unreachable) ) (block (return (i32.const 3) ) (unreachable) ) ) ) (unreachable) ) ) ) (nop) (block (local.set $3 (local.get $x) ) (if (local.get $3) (block (return (i32.const 4) ) (unreachable) ) ) ) (nop) (return (i32.const 5) ) (unreachable) ) (local.set $5 (local.get $4) ) (return (local.get $5) ) ) ;; CHECK: (func $loops (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block $block$21$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (loop $shape$2$continue ;; CHECK-NEXT: (call $trivial) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $shape$2$continue) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $block$21$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$24$break ;; CHECK-NEXT: (loop $shape$4$continue ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $trivial) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (br $shape$4$continue) ;; CHECK-NEXT: (br $block$24$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (loop $shape$6$continue ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $trivial) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (br $shape$6$continue) ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loops (; 5 ;) (type $3) (param $x i32) (local $1 i32) (local $2 i32) (local $3 i32) (block (block (local.set $1 (local.get $x) ) (if (local.get $1) (block (loop $top (block (call $trivial) (nop) (br $top) (unreachable) ) (unreachable) ) (unreachable) ) ) ) (nop) (loop $top2 (block (call $trivial) (nop) (local.set $2 (local.get $x) ) (br_if $top2 (local.get $2) ) (nop) ) (nop) ) (nop) (loop $top3 (block (call $trivial) (nop) (block (local.set $3 (local.get $x) ) (if (local.get $3) (block (br $top3) (unreachable) ) ) ) (nop) ) (nop) ) (nop) ) (nop) ) ;; CHECK: (func $br-out (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (call $br-out ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br-out (; 6 ;) (type $3) (param $x i32) (block $out (call $br-out (i32.const 5) ) (nop) (br $out) (unreachable) ) (nop) ) ;; CHECK: (func $unreachable (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block $block$4$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (br $block$4$break) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (call $unreachable ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $unreachable ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $unreachable ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable (; 7 ;) (type $3) (param $x i32) (local $1 i32) (local $2 i32) (block (block (local.set $1 (local.get $x) ) (if (local.get $1) (block (block (local.set $2 (local.get $x) ) (if (local.get $2) (block (block $block (call $unreachable (i32.const 1) ) (nop) (unreachable) (unreachable) (call $unreachable (i32.const 2) ) (nop) ) (unreachable) ) (block (block $block4 (call $unreachable (i32.const 3) ) (nop) (return) (unreachable) (call $unreachable (i32.const 4) ) (nop) ) (unreachable) ) ) ) (unreachable) ) ) ) (nop) (block $out (call $unreachable (i32.const 5) ) (nop) (br $out) (unreachable) (call $unreachable (i32.const 6) ) (nop) ) (nop) ) (nop) ) ;; CHECK: (func $empty-blocks (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $block$2$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $empty-blocks (; 8 ;) (type $3) (param $x i32) (block (block $block ) (nop) (block $block5 ) (nop) ) (nop) ) ;; CHECK: (func $before-and-after (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (block $block$4$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (br $block$4$break) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$4$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$8$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$8$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$10$break ;; CHECK-NEXT: (loop $shape$4$continue ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (br $shape$4$continue) ;; CHECK-NEXT: (br $block$10$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$11$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$11$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $block$11$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$15$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$15$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$15$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$21$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$21$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $block$21$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$28$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$28$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$30$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$30$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $before-and-after ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $before-and-after (; 9 ;) (type $3) (param $x i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (block (call $before-and-after (i32.const 1) ) (nop) (block $block (call $before-and-after (i32.const 2) ) (nop) ) (nop) (call $before-and-after (i32.const 3) ) (nop) (block $out (call $before-and-after (i32.const 4) ) (nop) (local.set $1 (local.get $x) ) (br_if $out (local.get $1) ) (nop) (call $before-and-after (i32.const 5) ) (nop) ) (nop) (call $before-and-after (i32.const 6) ) (nop) (loop $loop-in (nop) ) (nop) (call $before-and-after (i32.const 7) ) (nop) (loop $top (nop) ) (nop) (call $before-and-after (i32.const 8) ) (nop) (loop $top2 (block (call $before-and-after (i32.const 9) ) (nop) (local.set $2 (local.get $x) ) (br_if $top2 (local.get $2) ) (nop) (call $before-and-after (i32.const 10) ) (nop) ) (nop) ) (nop) (call $before-and-after (i32.const 11) ) (nop) (block (local.set $3 (local.get $x) ) (if (local.get $3) (block (call $before-and-after (i32.const 12) ) (nop) ) ) ) (nop) (call $before-and-after (i32.const 13) ) (nop) (block (local.set $4 (local.get $x) ) (if (local.get $4) (block (call $before-and-after (i32.const 14) ) (nop) ) (block (call $before-and-after (i32.const 15) ) (nop) ) ) ) (nop) (block (local.set $5 (local.get $x) ) (if (local.get $5) (block (block $block8 (call $before-and-after (i32.const 16) ) (nop) ) (nop) ) ) ) (nop) (call $before-and-after (i32.const 17) ) (nop) (block $block9 (call $before-and-after (i32.const 18) ) (nop) (block $block10 (call $before-and-after (i32.const 19) ) (nop) ) (nop) (call $before-and-after (i32.const 20) ) (nop) ) (nop) (call $before-and-after (i32.const 21) ) (nop) (block $block11 (block $block12 (call $before-and-after (i32.const 22) ) (nop) ) (nop) ) (nop) (call $before-and-after (i32.const 23) ) (nop) (block $no1 (block $no2 (call $before-and-after (i32.const 24) ) (nop) ) (nop) ) (nop) (call $before-and-after (i32.const 25) ) (nop) ) (nop) ) ;; CHECK: (func $switch (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block $block$3$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$3$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block$9$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $switch ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $switch$3$leave ;; CHECK-NEXT: (block $switch$3$default ;; CHECK-NEXT: (block $switch$3$case$9 ;; CHECK-NEXT: (br_table $switch$3$case$9 $switch$3$case$9 $switch$3$case$9 $switch$3$default ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$9$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $switch ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$9$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $switch ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $switch (; 10 ;) (type $3) (param $x i32) (local $1 i32) (local $2 i32) (block $out (block $a (local.set $1 (local.get $x) ) (br_table $a $a (local.get $1) ) (unreachable) ) (nop) (call $switch (i32.const 1) ) (nop) (block $b (block $c (local.set $2 (local.get $x) ) (br_table $b $b $b $c (local.get $2) ) (unreachable) ) (nop) (call $switch (i32.const 2) ) (nop) ) (nop) (call $switch (i32.const 3) ) (nop) ) (nop) ) ;; CHECK: (func $no-return ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $block$6$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$6$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$6$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $no-return (; 11 ;) (type $0) (if (i32.const 1) (block (drop (i32.const 2) ) (nop) ) (block (drop (i32.const 3) ) (nop) ) ) (nop) ) ;; CHECK: (func $if-br-wat (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block $block$3$break ;; CHECK-NEXT: (block $block$4$break ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $if-br-wat ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $if-br-wat ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$4$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (br $block$3$break) ;; CHECK-NEXT: (br $block$4$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $if-br-wat ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $block$3$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $if-br-wat ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-br-wat (; 12 ;) (type $3) (param $x i32) (local $1 i32) (local $2 i32) (block (call $if-br-wat (i32.const 0) ) (nop) (block $label$2 (block (local.set $1 (local.get $x) ) (if (local.get $1) (block (call $if-br-wat (i32.const 1) ) (nop) ) (block (block (local.set $2 (local.get $x) ) (if (local.get $2) (block (br $label$2) (unreachable) ) ) ) (nop) ) ) ) (nop) (call $if-br-wat (i32.const 2) ) (nop) ) (nop) (call $if-br-wat (i32.const 3) ) (nop) ) (nop) ) ;; CHECK: (func $switcher-to-nowhere (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $switch$1$leave ;; CHECK-NEXT: (block $switch$1$default ;; CHECK-NEXT: (block $switch$1$case$4 ;; CHECK-NEXT: (block $switch$1$case$5 ;; CHECK-NEXT: (br_table $switch$1$case$5 $switch$1$case$4 $switch$1$default ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $switcher-to-nowhere (; 13 ;) (type $2) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (block (block $switch (block $switch-case0 (block $switch-case (local.set $1 (local.get $0) ) (br_table $switch-case $switch-case0 $switch (local.get $1) ) (unreachable) ) (nop) (return (i32.const 1) ) (unreachable) ) (nop) (return (i32.const 2) ) (unreachable) ) (nop) (return (i32.const 3) ) (unreachable) ) (local.set $3 (local.get $2) ) (return (local.get $3) ) ) ) binaryen-version_108/test/lit/passes/flatten_simplify-locals-nonesting_dfo_O3.wast000066400000000000000000000071201423707623100307310ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --flatten --simplify-locals-nonesting --dfo -O3 -S -o - | filecheck %s (module (memory 1) (func "if-select" (local $var$0 i32) (nop) (drop (if (result i32) (select (i32.const 65473) (i32.const 1) (local.get $var$0) ) (i32.const -2405046) (i32.const 1) ) ) ) (func "unreachable-body-update-zext" (result f64) (if (i32.eqz (i32.const 0) ) (unreachable) ) (f64.const -9223372036854775808) ) (func "ssa-const" (param $var$0 i32) (param $var$1 f64) (param $var$2 f64) (result i32) (block $label$1 (result i32) (block $label$2 (if (i32.const 1) (block (drop (loop $label$5 (result i64) (if (result i64) (i32.const 0) (i64.load offset=22 (i32.and (br_if $label$1 (i32.const 0) (i32.const 0) ) (i32.const 15) ) (i64.const 1) ) (i64.const 1) ) ) ) ) ) (unreachable) ) ) ) (func "if-nothing" (param $var$0 i64) (local $var$1 i32) (local $var$2 i32) (block $label$1 (loop $label$2 (block $label$3 (block $label$4 (br_if $label$3 (i32.eqz (if (result i32) (i32.const 0) (i32.const 0) (local.get $var$2) ) ) ) (unreachable) ) (unreachable) ) ) (unreachable) ) ) (func "only-dfo" (param $var$0 f64) (result i32) (local $var$1 i32) (local $var$2 i32) (local $var$3 i32) (local $var$4 i32) (loop $label$1 (local.set $var$3 (local.tee $var$1 (local.tee $var$2 (local.get $var$1) ) ) ) (if (i32.eqz (local.get $var$4) ) (block (local.set $var$4 (select (local.get $var$3) (i32.const -2147483648) (local.get $var$2) ) ) (br $label$1) ) ) ) (i32.const -2766) ) ) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_f64 (func (result f64))) ;; CHECK: (type $i32_f64_f64_=>_i32 (func (param i32 f64 f64) (result i32))) ;; CHECK: (type $i64_=>_none (func (param i64))) ;; CHECK: (type $f64_=>_i32 (func (param f64) (result i32))) ;; CHECK: (export "if-select" (func $0)) ;; CHECK: (export "unreachable-body-update-zext" (func $1)) ;; CHECK: (export "ssa-const" (func $2)) ;; CHECK: (export "if-nothing" (func $3)) ;; CHECK: (export "only-dfo" (func $4)) ;; CHECK: (func $0 (; has Stack IR ;) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK: (func $1 (; has Stack IR ;) (result f64) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK: (func $2 (; has Stack IR ;) (param $0 i32) (param $1 f64) (param $2 f64) (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK: (func $3 (; has Stack IR ;) (param $0 i64) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK: (func $4 (; has Stack IR ;) (param $0 f64) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (loop $label$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2766) ;; CHECK-NEXT: ) flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast000066400000000000000000003750501423707623100366070ustar00rootroot00000000000000binaryen-version_108/test/lit/passes;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --flatten --simplify-locals-nonesting --souperify-single-use --enable-threads -S -o - | filecheck %s (module ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (type $none_=>_f64 (func (result f64))) ;; CHECK: (type $i64_i64_i64_=>_i32 (func (param i64 i64 i64) (result i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) ;; CHECK: (type $i64_i64_i64_=>_i64 (func (param i64 i64 i64) (result i64))) ;; CHECK: (type $i64_i64_i32_f32_=>_none (func (param i64 i64 i32 f32))) ;; CHECK: (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) ;; CHECK: (memory $0 (shared 1 1)) (memory $0 (shared 1 1)) ;; Figure 1a from the Souper paper https://arxiv.org/pdf/1711.04422.pdf ;; CHECK: (export "replaced-print-internal" (func $55)) ;; CHECK: (func $figure-1a (param $a i64) (param $x i64) (param $y i64) (result i32) ;; CHECK-NEXT: (local $i i32) ;; CHECK-NEXT: (local $j i32) ;; CHECK-NEXT: (local $r i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $figure-1a (param $a i64) (param $x i64) (param $y i64) (result i32) (local $i i32) (local $j i32) (local $r i32) (local.set $i (i64.eq (local.get $a) (local.get $x) ) ) (local.set $j (i64.ne (local.get $a) (local.get $y) ) ) (local.set $r (i32.and (local.get $i) (local.get $j) ) ) (return (local.get $r)) ) ;; Figure 1b, with a potential path condition ;; CHECK: (func $figure-1b (param $a i64) (param $x i64) (param $y i64) (result i32) ;; CHECK-NEXT: (local $i i32) ;; CHECK-NEXT: (local $j i32) ;; CHECK-NEXT: (local $r i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i64) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $figure-1b (param $a i64) (param $x i64) (param $y i64) (result i32) (local $i i32) (local $j i32) (local $r i32) (if (i64.lt_s (local.get $x) (local.get $y) ) (block (local.set $i (i64.eq (local.get $a) (local.get $x) ) ) (local.set $j (i64.ne (local.get $a) (local.get $y) ) ) (local.set $r (i32.and (local.get $i) (local.get $j) ) ) (return (local.get $r)) ) (unreachable) ) ) ;; Figure 3, simplified to an if ;; CHECK: (func $figure-3-if (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $figure-3-if (param $x i32) (result i32) (if (i32.and (local.get $x) (i32.const 1) ) (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) (return (i32.and (local.get $x) (i32.const 1) ) ) ) ;; flipping of greater than/or equals ops, which are not in Souper IR ;; CHECK: (func $flips ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $flips (local $x i32) (local $y i32) (local.set $x (i32.ge_s (local.get $x) (local.get $y))) (local.set $x (i32.ge_u (local.get $x) (local.get $y))) (local.set $x (i32.gt_s (local.get $x) (local.get $y))) (local.set $x (i32.gt_u (local.get $x) (local.get $y))) ) ;; CHECK: (func $various-conditions-1 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $various-conditions-1 (param $x i32) (if (local.get $x) (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) ) ) ;; CHECK: (func $various-conditions-2 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $various-conditions-2 (param $x i32) (if (i32.lt_s (local.get $x) (i32.const 0) ) (local.set $x (i32.sub (local.get $x) (i32.const 2) ) ) ) ) ;; CHECK: (func $various-conditions-3 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $various-conditions-3 (param $x i32) (if (i32.reinterpret_f32 (f32.const 0)) (local.set $x (i32.sub (local.get $x) (i32.const 4) ) ) ) ) ;; CHECK: (func $various-conditions-4 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $various-conditions-4 (param $x i32) (if (unreachable) (local.set $x (i32.add (local.get $x) (i32.const 3) ) ) ) ) ;; CHECK: (func $unaries (param $x i32) (param $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.popcnt ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unaries (param $x i32) (param $y i32) (if (i32.eqz (local.get $x) ) (local.set $x (i32.add (i32.ctz (local.get $y) ) (i32.sub (i32.clz (local.get $x) ) (i32.popcnt (local.get $y) ) ) ) ) ) ) ;; CHECK: (func $unary-condition (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unary-condition (param $x i32) (if (i32.ctz (i32.gt_u (local.get $x) (i32.const 1) ) ) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) ) ;; CHECK: (func $unary-condition-2 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unary-condition-2 (param $x i32) (if (i32.eqz (i32.gt_u (local.get $x) (i32.const 1) ) ) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) ) ;; CHECK: (func $if-else-cond (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-cond (param $x i32) (result i32) (if (i32.lt_s (local.get $x) (i32.const 1) ) (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) (return (i32.and (local.get $x) (i32.const 1) ) ) ) ;; CHECK: (func $trivial-ret (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $trivial-ret (result i32) (i32.add (i32.const 0) (i32.const 1) ) ) ;; CHECK: (func $trivial-const (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $trivial-const (result i32) (i32.const 0) ) ;; CHECK: (func $trivial-const-block (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $trivial-const-block (result i32) (nop) (i32.const 0) ) ;; CHECK: (func $bad-phi-value (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bad-phi-value (result i32) (if (result i32) (if (result i32) (i32.const 1) (i32.load (i32.const 0) ) (i32.const 0) ) (i32.const 0) (i32.const 1) ) ) ;; CHECK: (func $bad-phi-value-2 (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bad-phi-value-2 (param $x i32) (result i32) (if (if (result i32) (i32.const 1) (i32.load (i32.const 0) ) (i32.const 0) ) (local.set $x (i32.const 1)) (local.set $x (i32.const 2)) ) (local.get $x) ) ;; CHECK: (func $select (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $select (param $x i32) (result i32) (return (select (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) ;; CHECK: (func $select-2 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $select-2 (param $x i32) (param $y i32) (result i32) (return (select (i32.add (local.get $x) (local.get $y) ) (i32.add (local.get $x) (i32.const 1) ) (i32.add (i32.const 2) (local.get $y) ) ) ) ) ;; CHECK: (func $block-phi-1 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block-phi-1 (param $x i32) (param $y i32) (result i32) (block $out (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) (br_if $out (local.get $y)) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) (i32.add (local.get $x) (i32.const 3) ) ) ;; CHECK: (func $block-phi-2 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block-phi-2 (param $x i32) (param $y i32) (result i32) (block $out (local.set $x (i32.const 1) ) (br_if $out (local.get $y)) (local.set $x (i32.const 2) ) ) (i32.add (local.get $x) (i32.const 3) ) ) ;; CHECK: (func $zero_init-phi-bad_type (result f64) ;; CHECK-NEXT: (local $x f64) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero_init-phi-bad_type (result f64) (local $x f64) (if (i32.const 0) (local.set $x (f64.const 1) ) ) (local.get $x) ) ;; CHECK: (func $phi-bad-type (result f64) ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $phi-bad-type (result f64) (block $label$1 (result f64) (if (result f64) (i32.const 0) (f64.const 0) (f64.const 1) ) ) ) ;; CHECK: (func $phi-one-side-i1 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $i i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $i ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $i ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $phi-one-side-i1 (param $x i32) (param $y i32) (result i32) (local $i i32) (if (i32.le_s (local.get $x) (local.get $y) ) (local.set $i (i32.eq (local.get $x) (local.get $y) ) ) (local.set $i (i32.add (local.get $x) (local.get $y) ) ) ) (local.get $i) ) ;; CHECK: (func $call (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $call) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $call) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $call) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $call (result i32) (return (i32.mul (i32.add (call $call) (call $call) ) (i32.add (i32.const 10) (call $call) ) ) ) ) ;; CHECK: (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32) (if (local.get $x) (block (local.set $x (i32.const 1) ) (return (local.get $x)) ) (local.set $x (i32.const 2) ) ) ;; no phi here! (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32) (if (local.get $x) (block (local.set $x (i32.const 1) ) (unreachable) ) (local.set $x (i32.const 2) ) ) ;; no phi here! (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-3 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-3 (param $x i32) (param $y i32) (result i32) (block $out (if (local.get $x) (block (local.set $x (i32.const 1) ) (br $out) ) (local.set $x (i32.const 2) ) ) ;; no phi here! (return (local.get $x) ) ) (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-4 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $out $out $out ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-4 (param $x i32) (param $y i32) (result i32) (block $out (if (local.get $x) (block (local.set $x (i32.const 1) ) (br_table $out $out $out (i32.const 1)) ) (local.set $x (i32.const 2) ) ) ;; no phi here! (return (local.get $x) ) ) (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-br_if (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-br_if (param $x i32) (param $y i32) (result i32) (block $out (if (local.get $x) (block (local.set $x (i32.const 1) ) (br_if $out (local.get $x) ) ) (local.set $x (i32.const 2) ) ) ;; there *IS* a phi here since it was a br_if (return (local.get $x) ) ) (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-big (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -8531) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$3) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -8531) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$2) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const -8531) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-big (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (block $label$1 (block $label$2 (block $label$3 (if (local.get $2) (if (local.get $0) (block (local.set $1 (i32.const -8531) ) (br $label$3) ) (block (local.set $1 (i32.const -8531) ) (br $label$1) ) ) ) (br $label$2) ) (drop (i32.load (i32.const 0) ) ) (br $label$1) ) (i32.store16 (i32.const 1) (local.get $1) ) (unreachable) ) (i32.store16 (i32.const 0) (i32.const -8531) ) ) ;; CHECK: (func $in-unreachable-operations (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $in-unreachable-operations (param $x i32) (param $y i32) (result i32) (block (unreachable) (if (local.get $x) (local.set $x (i32.const 1) ) (local.set $x (i32.const 2) ) ) (return (local.get $x) ) ) ) ;; CHECK: (func $merge-with-one-less (param $var$0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (block $label$5 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $label$5 $label$4 $label$3 $label$2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$0 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $merge-with-one-less (param $var$0 i32) (result i32) (block $label$1 (block $label$2 (block $label$3 (block $label$4 (block $label$5 (br_table $label$5 $label$4 $label$3 $label$2 (i32.load (i32.const 1) ) ) ) (unreachable) ) (br $label$1) ) (f64.store (i32.load (local.tee $var$0 (i32.const 8) ) ) (f64.const 0) ) (br $label$1) ) (unreachable) ) (i32.store (local.get $var$0) (i32.const 16) ) (i32.const 1) ) ;; CHECK: (func $deep (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (local $20 i32) ;; CHECK-NEXT: (local $21 i32) ;; CHECK-NEXT: (local $22 i32) ;; CHECK-NEXT: (local $23 i32) ;; CHECK-NEXT: (local $24 i32) ;; CHECK-NEXT: (local $25 i32) ;; CHECK-NEXT: (local $26 i32) ;; CHECK-NEXT: (local $27 i32) ;; CHECK-NEXT: (local $28 i32) ;; CHECK-NEXT: (local $29 i32) ;; CHECK-NEXT: (local $30 i32) ;; CHECK-NEXT: (local $31 i32) ;; CHECK-NEXT: (local $32 i32) ;; CHECK-NEXT: (local $33 i32) ;; CHECK-NEXT: (local $34 i32) ;; CHECK-NEXT: (local $35 i32) ;; CHECK-NEXT: (local $36 i32) ;; CHECK-NEXT: (local $37 i32) ;; CHECK-NEXT: (local $38 i32) ;; CHECK-NEXT: (local $39 i32) ;; CHECK-NEXT: (local $40 i32) ;; CHECK-NEXT: (local $41 i32) ;; CHECK-NEXT: (local $42 i32) ;; CHECK-NEXT: (local $43 i32) ;; CHECK-NEXT: (local $44 i32) ;; CHECK-NEXT: (local $45 i32) ;; CHECK-NEXT: (local $46 i32) ;; CHECK-NEXT: (local $47 i32) ;; CHECK-NEXT: (local $48 i32) ;; CHECK-NEXT: (local $49 i32) ;; CHECK-NEXT: (local $50 i32) ;; CHECK-NEXT: (local $51 i32) ;; CHECK-NEXT: (local $52 i32) ;; CHECK-NEXT: (local $53 i32) ;; CHECK-NEXT: (local $54 i32) ;; CHECK-NEXT: (local $55 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $deep (param $x i32) (result i32) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.get $x) ) ;; CHECK: (func $two-pcs (param $x i64) (param $y i64) (param $t i64) (result i64) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i64) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i64) ;; CHECK-NEXT: (local $12 i64) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i64) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i64) ;; CHECK-NEXT: (local $17 i64) ;; CHECK-NEXT: (local $18 i64) ;; CHECK-NEXT: (local $19 i64) ;; CHECK-NEXT: (local $20 i64) ;; CHECK-NEXT: (local $21 i64) ;; CHECK-NEXT: (local $22 i64) ;; CHECK-NEXT: (local $23 i64) ;; CHECK-NEXT: (local $24 i64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (i64.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (i64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (i64.div_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $two-pcs (param $x i64) (param $y i64) (param $t i64) (result i64) (if (i64.lt_s (local.get $x) (local.get $y) ) (if (i64.eqz (local.get $x) ) (local.set $t (i64.add (local.get $x) (local.get $y) ) ) (local.set $t (i64.sub (local.get $x) (local.get $y) ) ) ) (if (i64.eqz (local.get $y) ) (local.set $t (i64.mul (local.get $x) (local.get $y) ) ) (local.set $t (i64.div_s (local.get $x) (local.get $y) ) ) ) ) (return (local.get $t)) ) ;; CHECK: (func $loop-1 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-1 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy ) ;; neither needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-2 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-2 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (i32.add (local.get $y) (i32.const 4))) ) ;; neither needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-3 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-3 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (i32.add (local.get $y) (i32.const 4))) (br_if $loopy (local.get $y)) ) ;; both needed (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-4 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-4 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (br_if $loopy (local.get $y)) ) ;; only x needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-5 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-5 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (i32.const 2)) ;; same value (br_if $loopy (local.get $y)) ) ;; only x needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-6 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-6 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (local.get $y)) ;; same value (br_if $loopy (local.get $y)) ) ;; only x needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-7 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-7 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (i32.const 5)) ;; different! (br_if $loopy (local.get $y)) ) ;; y changed but we don't need a phi for it (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-8 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $z i32) ;; CHECK-NEXT: (local $w i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-8 (param $x i32) (param $y i32) (result i32) (local $z i32) (local $w i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $z (local.get $x)) (local.set $w (local.get $y)) (local.set $x (i32.const 1)) ;; same! (local.set $y (i32.const 4)) ;; different! (br_if $loopy (local.get $y)) ) ;; x is always 3, and y needs a phi. ;; each is also copied to another local, which we need ;; to handle properly (return (i32.mul (i32.add (local.get $x) (local.get $y) ) (i32.sub (local.get $z) (local.get $w) ) ) ) ) ;; CHECK: (func $loop-9 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-9 (param $x i32) (param $y i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $t (local.get $x)) (local.set $x (local.get $y)) (local.set $y (local.get $t)) (br_if $loopy (local.get $t)) ) ;; x and y swapped, so both need phis (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-10 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-10 (param $x i32) (param $y i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 1)) (loop $loopy ;; we swap the values. but we need a deeper analysis to figure that out... (local.set $t (local.get $x)) (local.set $x (local.get $y)) (local.set $y (local.get $t)) (br_if $loopy (local.get $t)) ) ;; x and y swapped, but the same constant was swapped (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-multicond-1 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-multicond-1 (param $x i32) (param $y i32) (param $z i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (local.set $z (i32.const 3)) (loop $loopy (local.set $x (i32.const 4)) (br_if $loopy (local.get $t)) (local.set $y (i32.const 5)) (br_if $loopy (local.get $t)) (local.set $z (i32.const 6)) ) (return (select (local.get $x) (local.get $y) (local.get $z))) ) ;; CHECK: (func $loop-multicond-2 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-multicond-2 (param $x i32) (param $y i32) (param $z i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (local.set $z (i32.const 3)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 4))) (br_if $loopy (local.get $t)) (local.set $y (i32.add (local.get $y) (i32.const 5))) (br_if $loopy (local.get $t)) (local.set $z (i32.add (local.get $z) (i32.const 6))) ) (return (select (local.get $x) (local.get $y) (local.get $z))) ) ;; CHECK: (func $loop-block-1 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $loopy) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-block-1 (param $x i32) (param $y i32) (param $z i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (local.set $z (i32.const 3)) (loop $loopy (block $out (local.set $x (i32.add (local.get $x) (i32.const 4))) (br_if $out (local.get $t)) (local.set $y (i32.add (local.get $y) (i32.const 5))) (br_if $out (local.get $t)) (local.set $z (i32.add (local.get $z) (i32.const 6))) (br $loopy) ) ) (return (select (local.get $x) (local.get $y) (local.get $z))) ) ;; CHECK: (func $loop-block-2 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $loopy) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-block-2 (param $x i32) (param $y i32) (param $z i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (local.set $z (i32.const 3)) (block $out (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 4))) (br_if $out (local.get $t)) (local.set $y (i32.add (local.get $y) (i32.const 5))) (br_if $out (local.get $t)) (local.set $z (i32.add (local.get $z) (i32.const 6))) (br $loopy) ) ) (return (select (local.get $x) (local.get $y) (local.get $z))) ) ;; CHECK: (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 f64) ;; CHECK-NEXT: (local $9 f64) ;; CHECK-NEXT: (local $10 f64) ;; CHECK-NEXT: (local $11 f64) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (loop $label$2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (local.get $var$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32) (if (local.get $var$2) (drop (loop $label$2 (result f64) (if (block $label$3 (result i32) (if (i32.const 0) (unreachable) ) (nop) (i32.const 0) ) (unreachable) ) (br_if $label$2 (local.get $var$2) ) (f64.const 0) ) ) ) ) ;; CHECK: (func $loop-unreachable ;; CHECK-NEXT: (local $var$0 i32) ;; CHECK-NEXT: (local $var$1 f64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 f64) ;; CHECK-NEXT: (local $12 f64) ;; CHECK-NEXT: (local $13 f64) ;; CHECK-NEXT: (loop $label$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (loop $label$6 ;; CHECK-NEXT: (block $label$7 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$7 ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$7 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $label$6 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $loop-unreachable (local $var$0 i32) (local $var$1 f64) (loop $label$1 (local.set $var$1 (block $label$2 (result f64) (block $label$3 (local.set $var$0 (block $label$4 (result i32) (if (i32.const 1337) (unreachable) ) (local.get $var$0) ) ) (loop $label$6 (br_if $label$6 (block $label$7 (result i32) (drop (br_if $label$7 (local.get $var$0) (i32.const 65535) ) ) (drop (br_if $label$7 (local.get $var$0) (i32.const 0) ) ) (unreachable) ) ) ) ) (local.get $var$1) ) ) (br $label$1) ) ) ;; CHECK: (func $phi-value-turns-bad (result f64) ;; CHECK-NEXT: (local $var$0 i32) ;; CHECK-NEXT: (local $var$1 i32) ;; CHECK-NEXT: (local $var$2 f32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 f32) ;; CHECK-NEXT: (local $13 f32) ;; CHECK-NEXT: (local $14 f32) ;; CHECK-NEXT: (local $15 f32) ;; CHECK-NEXT: (local $16 f64) ;; CHECK-NEXT: (local $17 f64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$0 ;; CHECK-NEXT: (i32.atomic.rmw16.sub_u offset=22 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (loop $label$3 ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$4 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $phi-value-turns-bad (result f64) (local $var$0 i32) (local $var$1 i32) (local $var$2 f32) (local.set $var$2 (if (result f32) (local.tee $var$0 (i32.atomic.rmw16.sub_u offset=22 (i32.const 0) (i32.const 0) ) ) (unreachable) (block (result f32) (if (loop $label$3 (result i32) (block $label$4 (result i32) (i32.clz (br_if $label$4 (local.get $var$0) (i32.const 1) ) ) ) ) (nop) ) (f32.const 1) ) ) ) (unreachable) ) ;; CHECK: (func $multi-use (param $x i32) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multi-use (param $x i32) (result i32) (local $temp i32) (local.set $temp (i32.add (local.get $x) (i32.const 1))) (i32.add (local.get $temp) (local.get $temp)) ) ;; CHECK: (func $multi-use-2 (param $x i32) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multi-use-2 (param $x i32) (result i32) (local $temp i32) (local.set $temp (i32.add (local.get $x) (i32.const 1))) (local.set $x (i32.mul (local.get $temp) (i32.const 2))) (i32.sub (local.get $x) (local.get $temp)) ) ;; CHECK: (func $many-single-uses-with-param (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $many-single-uses-with-param (param $x i32) (result i32) (return (i32.eqz (i32.add (i32.mul (i32.const 10) (local.get $x) ) (i32.sub (i32.ctz (local.get $x) ) (i32.const 20) ) ) ) ) ) (func "replaced-print-internal" (param $var$0 i32) (local $var$1 i32) (local $var$2 i32) (local $var$3 i32) (if (local.tee $var$0 (i32.add (local.get $var$0) (i32.const -7) ) ) (block $label$2 (block $label$3 (local.set $var$1 (local.get $var$0) ) (br_if $label$3 (local.tee $var$3 (i32.const 12) ) ) (unreachable) ) (br_if $label$2 (i32.eqz (local.get $var$1) ) ) (if (i32.ne (i32.load (i32.const 0) ) (local.get $var$0) ) (unreachable) ) (unreachable) ) ) ) ;; CHECK: (func $55 (param $var$0 i32) ;; CHECK-NEXT: (local $var$1 i32) ;; CHECK-NEXT: (local $var$2 i32) ;; CHECK-NEXT: (local $var$3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (i32.const -7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$3 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $multiple-uses-to-non-expression (param $x i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multiple-uses-to-non-expression (param $x i32) (local $temp i32) (local.set $x (i32.add (local.get $x) (i32.const 10) ) ) (i32.store (i32.const 1) (local.get $x) ;; x+10 has two uses! ) (i32.store (i32.const 2) (i32.add (local.get $x) (i32.const 20) ) ) ) ;; CHECK: (func $nested-phi-forwarding (param $var$0 i32) (result i32) ;; CHECK-NEXT: (local $var$1 i32) ;; CHECK-NEXT: (local $var$2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (loop $label$3 ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (block $label$5 ;; CHECK-NEXT: (block $label$6 ;; CHECK-NEXT: (block $label$7 ;; CHECK-NEXT: (block $label$8 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$4) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $label$3 ;; CHECK-NEXT: (local.get $var$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$9 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$9 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store offset=176 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $var$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-phi-forwarding (param $var$0 i32) (result i32) (local $var$1 i32) (local $var$2 i32) (block $label$1 (block $label$2 (loop $label$3 (block $label$4 (block $label$5 (block $label$6 (block $label$7 (block $label$8 (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4 (local.get $var$0) ) ) (local.set $var$1 (i32.const 1) ) ) (br $label$4) ) (unreachable) ) (br $label$1) ) (br_if $label$3 (local.tee $var$2 (i32.const 1) ) ) ) ) (block $label$9 (br_if $label$9 (i32.or (i32.const 1) (local.get $var$1) ) ) ) (unreachable) ) (i32.store offset=176 (i32.const 0) (local.get $var$2) ) (i32.const 0) ) ;; CHECK: (func $zext-numGets (param $var$0 i32) (param $var$1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const -16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zext-numGets (param $var$0 i32) (param $var$1 i32) (if (i32.ctz (block $label$1 (result i32) (drop (br_if $label$1 (i32.const 1) (i32.load (i32.const -8) ) ) ) (i32.eqz (i32.load (i32.const -16) ) ) ) ) (unreachable) ) ) ;; CHECK: (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const -16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32) (local $temp i32) (if (i32.ctz (block $label$1 (result i32) (drop (br_if $label$1 (i32.const 1) (i32.load (i32.const -8) ) ) ) (local.set $temp (i32.eqz (i32.load (i32.const -16) ) ) ) (drop (local.get $temp) ) (local.get $temp) ) ) (unreachable) ) ) ;; CHECK: (func $flipped-needs-right-origin (param $var$0 i32) (result i32) ;; CHECK-NEXT: (local $var$1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $flipped-needs-right-origin (param $var$0 i32) (result i32) (local $var$1 i32) (block $label$1 (br_if $label$1 (i32.load (i32.const 1) ) ) (local.set $var$1 (i32.const 2) ) ) (if (i32.gt_s (i32.const 3) (i32.add (local.get $var$1) (i32.const 4) ) ) (unreachable) ) (i32.const 5) ) ;; CHECK: (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) (i32.store (local.tee $var$1 (i32.gt_u (local.get $var$1) (i32.const 1) ) ) (i32.const 2) ) (i32.store offset=8 (i32.const 3) (i32.sub (i32.const 4) (local.get $var$1) ) ) (unreachable) ) ;; CHECK: (func $loop-of-set-connections (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (loop $label$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $loop-of-set-connections (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) (loop $label$1 (if (i32.const 0) (block (local.set $var$2 (i32.add (i32.const 0) (i32.const 1) ) ) (br $label$1) ) ) (local.set $var$3 (local.get $var$2) ) (local.set $var$2 (local.get $var$3) ) (br $label$1) ) ) ;; CHECK: (func $conditions-in-conditions (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) ;; CHECK-NEXT: (local $var$3 i32) ;; CHECK-NEXT: (local $var$4 i32) ;; CHECK-NEXT: (local $var$5 i32) ;; CHECK-NEXT: (local $var$6 i32) ;; CHECK-NEXT: (local $var$7 i32) ;; CHECK-NEXT: (local $var$8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (loop $label$2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $var$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (local.set $var$3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $var$3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $conditions-in-conditions (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) (local $var$3 i32) (local $var$4 i32) (local $var$5 i32) (local $var$6 i32) (local $var$7 i32) (local $var$8 i32) (local.set $var$1 (i32.const 1) ) (if (i32.const 0) (loop $label$2 (if (local.get $var$1) (nop) ) (local.set $var$1 (i32.sub (i32.const 0) (local.tee $var$3 (i32.const 1) ) ) ) (br_if $label$2 (i32.const 0) ) ) ) (if (local.get $var$1) (local.set $var$3 (i32.const 1) ) ) (i32.store (i32.const 8) (i32.add (local.get $var$3) (i32.const 16) ) ) (i32.store (i32.const 8) (i32.const 64) ) (unreachable) ) ) binaryen-version_108/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast000066400000000000000000004011511423707623100346050ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --flatten --simplify-locals-nonesting --souperify --enable-threads -S -o - | filecheck %s (module ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (type $none_=>_f64 (func (result f64))) ;; CHECK: (type $i64_i64_i64_=>_i32 (func (param i64 i64 i64) (result i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) ;; CHECK: (type $i64_i64_i64_=>_i64 (func (param i64 i64 i64) (result i64))) ;; CHECK: (type $i64_i64_i32_f32_=>_none (func (param i64 i64 i32 f32))) ;; CHECK: (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) ;; CHECK: (memory $0 (shared 1 1)) (memory $0 (shared 1 1)) ;; Figure 1a from the Souper paper https://arxiv.org/pdf/1711.04422.pdf ;; CHECK: (export "replaced-print-internal" (func $56)) ;; CHECK: (func $figure-1a (param $a i64) (param $x i64) (param $y i64) (result i32) ;; CHECK-NEXT: (local $i i32) ;; CHECK-NEXT: (local $j i32) ;; CHECK-NEXT: (local $r i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $figure-1a (param $a i64) (param $x i64) (param $y i64) (result i32) (local $i i32) (local $j i32) (local $r i32) (local.set $i (i64.eq (local.get $a) (local.get $x) ) ) (local.set $j (i64.ne (local.get $a) (local.get $y) ) ) (local.set $r (i32.and (local.get $i) (local.get $j) ) ) (return (local.get $r)) ) ;; Figure 1b, with a potential path condition ;; CHECK: (func $figure-1b (param $a i64) (param $x i64) (param $y i64) (result i32) ;; CHECK-NEXT: (local $i i32) ;; CHECK-NEXT: (local $j i32) ;; CHECK-NEXT: (local $r i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i64) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i64) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $figure-1b (param $a i64) (param $x i64) (param $y i64) (result i32) (local $i i32) (local $j i32) (local $r i32) (if (i64.lt_s (local.get $x) (local.get $y) ) (block (local.set $i (i64.eq (local.get $a) (local.get $x) ) ) (local.set $j (i64.ne (local.get $a) (local.get $y) ) ) (local.set $r (i32.and (local.get $i) (local.get $j) ) ) (return (local.get $r)) ) (unreachable) ) ) ;; Figure 3, simplified to an if ;; CHECK: (func $figure-3-if (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $figure-3-if (param $x i32) (result i32) (if (i32.and (local.get $x) (i32.const 1) ) (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) (return (i32.and (local.get $x) (i32.const 1) ) ) ) ;; CHECK: (func $send-i32 (param $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $send-i32 (param i32)) ;; flipping of greater than/or equals ops, which are not in Souper IR ;; CHECK: (func $flips ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $z i64) ;; CHECK-NEXT: (local $w i64) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i64) ;; CHECK-NEXT: (local $17 i64) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (local $19 i64) ;; CHECK-NEXT: (local $20 i64) ;; CHECK-NEXT: (local $21 i32) ;; CHECK-NEXT: (local $22 i64) ;; CHECK-NEXT: (local $23 i64) ;; CHECK-NEXT: (local $24 i32) ;; CHECK-NEXT: (local $25 i64) ;; CHECK-NEXT: (local $26 i64) ;; CHECK-NEXT: (local $27 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i64.ge_s ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $send-i32 ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $21 ;; CHECK-NEXT: (i64.ge_u ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $send-i32 ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $24 ;; CHECK-NEXT: (i64.gt_s ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $send-i32 ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $27 ;; CHECK-NEXT: (i64.gt_u ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $send-i32 ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $flips (local $x i32) (local $y i32) (local $z i64) (local $w i64) (local.set $x (i32.ge_s (local.get $x) (local.get $y))) (local.set $x (i32.ge_u (local.get $x) (local.get $y))) (local.set $x (i32.gt_s (local.get $x) (local.get $y))) (local.set $x (i32.gt_u (local.get $x) (local.get $y))) (call $send-i32 (i64.ge_s (local.get $z) (local.get $w))) (call $send-i32 (i64.ge_u (local.get $z) (local.get $w))) (call $send-i32 (i64.gt_s (local.get $z) (local.get $w))) (call $send-i32 (i64.gt_u (local.get $z) (local.get $w))) ) ;; CHECK: (func $various-conditions-1 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $various-conditions-1 (param $x i32) (if (local.get $x) (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) ) ) ;; CHECK: (func $various-conditions-2 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $various-conditions-2 (param $x i32) (if (i32.lt_s (local.get $x) (i32.const 0) ) (local.set $x (i32.sub (local.get $x) (i32.const 2) ) ) ) ) ;; CHECK: (func $various-conditions-3 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $various-conditions-3 (param $x i32) (if (i32.reinterpret_f32 (f32.const 0)) (local.set $x (i32.sub (local.get $x) (i32.const 4) ) ) ) ) ;; CHECK: (func $various-conditions-4 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $various-conditions-4 (param $x i32) (if (unreachable) (local.set $x (i32.add (local.get $x) (i32.const 3) ) ) ) ) ;; CHECK: (func $unaries (param $x i32) (param $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.popcnt ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unaries (param $x i32) (param $y i32) (if (i32.eqz (local.get $x) ) (local.set $x (i32.add (i32.ctz (local.get $y) ) (i32.sub (i32.clz (local.get $x) ) (i32.popcnt (local.get $y) ) ) ) ) ) ) ;; CHECK: (func $unary-condition (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unary-condition (param $x i32) (if (i32.ctz (i32.gt_u (local.get $x) (i32.const 1) ) ) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) ) ;; CHECK: (func $unary-condition-2 (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unary-condition-2 (param $x i32) (if (i32.eqz (i32.gt_u (local.get $x) (i32.const 1) ) ) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) ) ;; CHECK: (func $if-else-cond (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-cond (param $x i32) (result i32) (if (i32.lt_s (local.get $x) (i32.const 1) ) (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) (return (i32.and (local.get $x) (i32.const 1) ) ) ) ;; CHECK: (func $trivial-ret (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $trivial-ret (result i32) (i32.add (i32.const 0) (i32.const 1) ) ) ;; CHECK: (func $trivial-const (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $trivial-const (result i32) (i32.const 0) ) ;; CHECK: (func $trivial-const-block (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $trivial-const-block (result i32) (nop) (i32.const 0) ) ;; CHECK: (func $bad-phi-value (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bad-phi-value (result i32) (if (result i32) (if (result i32) (i32.const 1) (i32.load (i32.const 0) ) (i32.const 0) ) (i32.const 0) (i32.const 1) ) ) ;; CHECK: (func $bad-phi-value-2 (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bad-phi-value-2 (param $x i32) (result i32) (if (if (result i32) (i32.const 1) (i32.load (i32.const 0) ) (i32.const 0) ) (local.set $x (i32.const 1)) (local.set $x (i32.const 2)) ) (local.get $x) ) ;; CHECK: (func $select (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $select (param $x i32) (result i32) (return (select (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) ;; CHECK: (func $select-2 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $select-2 (param $x i32) (param $y i32) (result i32) (return (select (i32.add (local.get $x) (local.get $y) ) (i32.add (local.get $x) (i32.const 1) ) (i32.add (i32.const 2) (local.get $y) ) ) ) ) ;; CHECK: (func $block-phi-1 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block-phi-1 (param $x i32) (param $y i32) (result i32) (block $out (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) (br_if $out (local.get $y)) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) ) (i32.add (local.get $x) (i32.const 3) ) ) ;; CHECK: (func $block-phi-2 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block-phi-2 (param $x i32) (param $y i32) (result i32) (block $out (local.set $x (i32.const 1) ) (br_if $out (local.get $y)) (local.set $x (i32.const 2) ) ) (i32.add (local.get $x) (i32.const 3) ) ) ;; CHECK: (func $zero_init-phi-bad_type (result f64) ;; CHECK-NEXT: (local $x f64) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero_init-phi-bad_type (result f64) (local $x f64) (if (i32.const 0) (local.set $x (f64.const 1) ) ) (local.get $x) ) ;; CHECK: (func $phi-bad-type (result f64) ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $phi-bad-type (result f64) (block $label$1 (result f64) (if (result f64) (i32.const 0) (f64.const 0) (f64.const 1) ) ) ) ;; CHECK: (func $phi-one-side-i1 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $i i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $i ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $i ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $phi-one-side-i1 (param $x i32) (param $y i32) (result i32) (local $i i32) (if (i32.le_s (local.get $x) (local.get $y) ) (local.set $i (i32.eq (local.get $x) (local.get $y) ) ) (local.set $i (i32.add (local.get $x) (local.get $y) ) ) ) (local.get $i) ) ;; CHECK: (func $call (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $call) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $call) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $call) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $call (result i32) (return (i32.mul (i32.add (call $call) (call $call) ) (i32.add (i32.const 10) (call $call) ) ) ) ) ;; CHECK: (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32) (if (local.get $x) (block (local.set $x (i32.const 1) ) (return (local.get $x)) ) (local.set $x (i32.const 2) ) ) ;; no phi here! (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32) (if (local.get $x) (block (local.set $x (i32.const 1) ) (unreachable) ) (local.set $x (i32.const 2) ) ) ;; no phi here! (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-3 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-3 (param $x i32) (param $y i32) (result i32) (block $out (if (local.get $x) (block (local.set $x (i32.const 1) ) (br $out) ) (local.set $x (i32.const 2) ) ) ;; no phi here! (return (local.get $x) ) ) (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-4 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $out $out $out ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-4 (param $x i32) (param $y i32) (result i32) (block $out (if (local.get $x) (block (local.set $x (i32.const 1) ) (br_table $out $out $out (i32.const 1)) ) (local.set $x (i32.const 2) ) ) ;; no phi here! (return (local.get $x) ) ) (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-br_if (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-br_if (param $x i32) (param $y i32) (result i32) (block $out (if (local.get $x) (block (local.set $x (i32.const 1) ) (br_if $out (local.get $x) ) ) (local.set $x (i32.const 2) ) ) ;; there *IS* a phi here since it was a br_if (return (local.get $x) ) ) (return (local.get $x) ) ) ;; CHECK: (func $in-unreachable-big (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -8531) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$3) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -8531) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$2) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const -8531) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $in-unreachable-big (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (block $label$1 (block $label$2 (block $label$3 (if (local.get $2) (if (local.get $0) (block (local.set $1 (i32.const -8531) ) (br $label$3) ) (block (local.set $1 (i32.const -8531) ) (br $label$1) ) ) ) (br $label$2) ) (drop (i32.load (i32.const 0) ) ) (br $label$1) ) (i32.store16 (i32.const 1) (local.get $1) ) (unreachable) ) (i32.store16 (i32.const 0) (i32.const -8531) ) ) ;; CHECK: (func $in-unreachable-operations (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $in-unreachable-operations (param $x i32) (param $y i32) (result i32) (block (unreachable) (if (local.get $x) (local.set $x (i32.const 1) ) (local.set $x (i32.const 2) ) ) (return (local.get $x) ) ) ) ;; CHECK: (func $merge-with-one-less (param $var$0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (block $label$5 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $label$5 $label$4 $label$3 $label$2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$0 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $merge-with-one-less (param $var$0 i32) (result i32) (block $label$1 (block $label$2 (block $label$3 (block $label$4 (block $label$5 (br_table $label$5 $label$4 $label$3 $label$2 (i32.load (i32.const 1) ) ) ) (unreachable) ) (br $label$1) ) (f64.store (i32.load (local.tee $var$0 (i32.const 8) ) ) (f64.const 0) ) (br $label$1) ) (unreachable) ) (i32.store (local.get $var$0) (i32.const 16) ) (i32.const 1) ) ;; CHECK: (func $deep (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (local $20 i32) ;; CHECK-NEXT: (local $21 i32) ;; CHECK-NEXT: (local $22 i32) ;; CHECK-NEXT: (local $23 i32) ;; CHECK-NEXT: (local $24 i32) ;; CHECK-NEXT: (local $25 i32) ;; CHECK-NEXT: (local $26 i32) ;; CHECK-NEXT: (local $27 i32) ;; CHECK-NEXT: (local $28 i32) ;; CHECK-NEXT: (local $29 i32) ;; CHECK-NEXT: (local $30 i32) ;; CHECK-NEXT: (local $31 i32) ;; CHECK-NEXT: (local $32 i32) ;; CHECK-NEXT: (local $33 i32) ;; CHECK-NEXT: (local $34 i32) ;; CHECK-NEXT: (local $35 i32) ;; CHECK-NEXT: (local $36 i32) ;; CHECK-NEXT: (local $37 i32) ;; CHECK-NEXT: (local $38 i32) ;; CHECK-NEXT: (local $39 i32) ;; CHECK-NEXT: (local $40 i32) ;; CHECK-NEXT: (local $41 i32) ;; CHECK-NEXT: (local $42 i32) ;; CHECK-NEXT: (local $43 i32) ;; CHECK-NEXT: (local $44 i32) ;; CHECK-NEXT: (local $45 i32) ;; CHECK-NEXT: (local $46 i32) ;; CHECK-NEXT: (local $47 i32) ;; CHECK-NEXT: (local $48 i32) ;; CHECK-NEXT: (local $49 i32) ;; CHECK-NEXT: (local $50 i32) ;; CHECK-NEXT: (local $51 i32) ;; CHECK-NEXT: (local $52 i32) ;; CHECK-NEXT: (local $53 i32) ;; CHECK-NEXT: (local $54 i32) ;; CHECK-NEXT: (local $55 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $deep (param $x i32) (result i32) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.set $x (i32.xor (local.get $x) (i32.const 1234))) (local.set $x (i32.mul (local.get $x) (i32.const 1234))) (local.get $x) ) ;; CHECK: (func $two-pcs (param $x i64) (param $y i64) (param $t i64) (result i64) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (local $4 i64) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i64) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i64) ;; CHECK-NEXT: (local $9 i64) ;; CHECK-NEXT: (local $10 i64) ;; CHECK-NEXT: (local $11 i64) ;; CHECK-NEXT: (local $12 i64) ;; CHECK-NEXT: (local $13 i64) ;; CHECK-NEXT: (local $14 i64) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i64) ;; CHECK-NEXT: (local $17 i64) ;; CHECK-NEXT: (local $18 i64) ;; CHECK-NEXT: (local $19 i64) ;; CHECK-NEXT: (local $20 i64) ;; CHECK-NEXT: (local $21 i64) ;; CHECK-NEXT: (local $22 i64) ;; CHECK-NEXT: (local $23 i64) ;; CHECK-NEXT: (local $24 i64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (i64.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (i64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (i64.div_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $two-pcs (param $x i64) (param $y i64) (param $t i64) (result i64) (if (i64.lt_s (local.get $x) (local.get $y) ) (if (i64.eqz (local.get $x) ) (local.set $t (i64.add (local.get $x) (local.get $y) ) ) (local.set $t (i64.sub (local.get $x) (local.get $y) ) ) ) (if (i64.eqz (local.get $y) ) (local.set $t (i64.mul (local.get $x) (local.get $y) ) ) (local.set $t (i64.div_s (local.get $x) (local.get $y) ) ) ) ) (return (local.get $t)) ) ;; CHECK: (func $loop-1 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-1 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy ) ;; neither needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-2 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-2 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (i32.add (local.get $y) (i32.const 4))) ) ;; neither needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-3 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-3 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (i32.add (local.get $y) (i32.const 4))) (br_if $loopy (local.get $y)) ) ;; both needed (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-4 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-4 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (br_if $loopy (local.get $y)) ) ;; only x needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-5 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-5 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (i32.const 2)) ;; same value (br_if $loopy (local.get $y)) ) ;; only x needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-6 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-6 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (local.get $y)) ;; same value (br_if $loopy (local.get $y)) ) ;; only x needed a phi (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-7 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-7 (param $x i32) (param $y i32) (result i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 3))) (local.set $y (i32.const 5)) ;; different! (br_if $loopy (local.get $y)) ) ;; y changed but we don't need a phi for it (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-8 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $z i32) ;; CHECK-NEXT: (local $w i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-8 (param $x i32) (param $y i32) (result i32) (local $z i32) (local $w i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $z (local.get $x)) (local.set $w (local.get $y)) (local.set $x (i32.const 1)) ;; same! (local.set $y (i32.const 4)) ;; different! (br_if $loopy (local.get $y)) ) ;; x is always 3, and y needs a phi. ;; each is also copied to another local, which we need ;; to handle properly (return (i32.mul (i32.add (local.get $x) (local.get $y) ) (i32.sub (local.get $z) (local.get $w) ) ) ) ) ;; CHECK: (func $loop-9 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-9 (param $x i32) (param $y i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (loop $loopy (local.set $t (local.get $x)) (local.set $x (local.get $y)) (local.set $y (local.get $t)) (br_if $loopy (local.get $t)) ) ;; x and y swapped, so both need phis (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-10 (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $t ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-10 (param $x i32) (param $y i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 1)) (loop $loopy ;; we swap the values. but we need a deeper analysis to figure that out... (local.set $t (local.get $x)) (local.set $x (local.get $y)) (local.set $y (local.get $t)) (br_if $loopy (local.get $t)) ) ;; x and y swapped, but the same constant was swapped (return (i32.add (local.get $x) (local.get $y))) ) ;; CHECK: (func $loop-multicond-1 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-multicond-1 (param $x i32) (param $y i32) (param $z i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (local.set $z (i32.const 3)) (loop $loopy (local.set $x (i32.const 4)) (br_if $loopy (local.get $t)) (local.set $y (i32.const 5)) (br_if $loopy (local.get $t)) (local.set $z (i32.const 6)) ) (return (select (local.get $x) (local.get $y) (local.get $z))) ) ;; CHECK: (func $loop-multicond-2 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loopy ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-multicond-2 (param $x i32) (param $y i32) (param $z i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (local.set $z (i32.const 3)) (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 4))) (br_if $loopy (local.get $t)) (local.set $y (i32.add (local.get $y) (i32.const 5))) (br_if $loopy (local.get $t)) (local.set $z (i32.add (local.get $z) (i32.const 6))) ) (return (select (local.get $x) (local.get $y) (local.get $z))) ) ;; CHECK: (func $loop-block-1 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $loopy) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-block-1 (param $x i32) (param $y i32) (param $z i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (local.set $z (i32.const 3)) (loop $loopy (block $out (local.set $x (i32.add (local.get $x) (i32.const 4))) (br_if $out (local.get $t)) (local.set $y (i32.add (local.get $y) (i32.const 5))) (br_if $out (local.get $t)) (local.set $z (i32.add (local.get $z) (i32.const 6))) (br $loopy) ) ) (return (select (local.get $x) (local.get $y) (local.get $z))) ) ;; CHECK: (func $loop-block-2 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (local $t i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (loop $loopy ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $loopy) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loop-block-2 (param $x i32) (param $y i32) (param $z i32) (result i32) (local $t i32) (local.set $x (i32.const 1)) (local.set $y (i32.const 2)) (local.set $z (i32.const 3)) (block $out (loop $loopy (local.set $x (i32.add (local.get $x) (i32.const 4))) (br_if $out (local.get $t)) (local.set $y (i32.add (local.get $y) (i32.const 5))) (br_if $out (local.get $t)) (local.set $z (i32.add (local.get $z) (i32.const 6))) (br $loopy) ) ) (return (select (local.get $x) (local.get $y) (local.get $z))) ) ;; CHECK: (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 f64) ;; CHECK-NEXT: (local $9 f64) ;; CHECK-NEXT: (local $10 f64) ;; CHECK-NEXT: (local $11 f64) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$2) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (loop $label$2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (local.get $var$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32) (if (local.get $var$2) (drop (loop $label$2 (result f64) (if (block $label$3 (result i32) (if (i32.const 0) (unreachable) ) (nop) (i32.const 0) ) (unreachable) ) (br_if $label$2 (local.get $var$2) ) (f64.const 0) ) ) ) ) ;; CHECK: (func $loop-unreachable ;; CHECK-NEXT: (local $var$0 i32) ;; CHECK-NEXT: (local $var$1 f64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 f64) ;; CHECK-NEXT: (local $12 f64) ;; CHECK-NEXT: (local $13 f64) ;; CHECK-NEXT: (loop $label$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (loop $label$6 ;; CHECK-NEXT: (block $label$7 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$7 ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$7 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $label$6 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $loop-unreachable (local $var$0 i32) (local $var$1 f64) (loop $label$1 (local.set $var$1 (block $label$2 (result f64) (block $label$3 (local.set $var$0 (block $label$4 (result i32) (if (i32.const 1337) (unreachable) ) (local.get $var$0) ) ) (loop $label$6 (br_if $label$6 (block $label$7 (result i32) (drop (br_if $label$7 (local.get $var$0) (i32.const 65535) ) ) (drop (br_if $label$7 (local.get $var$0) (i32.const 0) ) ) (unreachable) ) ) ) ) (local.get $var$1) ) ) (br $label$1) ) ) ;; CHECK: (func $phi-value-turns-bad (result f64) ;; CHECK-NEXT: (local $var$0 i32) ;; CHECK-NEXT: (local $var$1 i32) ;; CHECK-NEXT: (local $var$2 f32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 f32) ;; CHECK-NEXT: (local $13 f32) ;; CHECK-NEXT: (local $14 f32) ;; CHECK-NEXT: (local $15 f32) ;; CHECK-NEXT: (local $16 f64) ;; CHECK-NEXT: (local $17 f64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$0 ;; CHECK-NEXT: (i32.atomic.rmw16.sub_u offset=22 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (loop $label$3 ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$4 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $phi-value-turns-bad (result f64) (local $var$0 i32) (local $var$1 i32) (local $var$2 f32) (local.set $var$2 (if (result f32) (local.tee $var$0 (i32.atomic.rmw16.sub_u offset=22 (i32.const 0) (i32.const 0) ) ) (unreachable) (block (result f32) (if (loop $label$3 (result i32) (block $label$4 (result i32) (i32.clz (br_if $label$4 (local.get $var$0) (i32.const 1) ) ) ) ) (nop) ) (f32.const 1) ) ) ) (unreachable) ) ;; CHECK: (func $multi-use (param $x i32) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multi-use (param $x i32) (result i32) (local $temp i32) (local.set $temp (i32.add (local.get $x) (i32.const 1))) (i32.add (local.get $temp) (local.get $temp)) ) ;; CHECK: (func $multi-use-2 (param $x i32) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multi-use-2 (param $x i32) (result i32) (local $temp i32) (local.set $temp (i32.add (local.get $x) (i32.const 1))) (local.set $x (i32.mul (local.get $temp) (i32.const 2))) (i32.sub (local.get $x) (local.get $temp)) ) ;; CHECK: (func $many-single-uses-with-param (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $many-single-uses-with-param (param $x i32) (result i32) (return (i32.eqz (i32.add (i32.mul (i32.const 10) (local.get $x) ) (i32.sub (i32.ctz (local.get $x) ) (i32.const 20) ) ) ) ) ) (func "replaced-print-internal" (param $var$0 i32) (local $var$1 i32) (local $var$2 i32) (local $var$3 i32) (if (local.tee $var$0 (i32.add (local.get $var$0) (i32.const -7) ) ) (block $label$2 (block $label$3 (local.set $var$1 (local.get $var$0) ) (br_if $label$3 (local.tee $var$3 (i32.const 12) ) ) (unreachable) ) (br_if $label$2 (i32.eqz (local.get $var$1) ) ) (if (i32.ne (i32.load (i32.const 0) ) (local.get $var$0) ) (unreachable) ) (unreachable) ) ) ) ;; CHECK: (func $56 (param $var$0 i32) ;; CHECK-NEXT: (local $var$1 i32) ;; CHECK-NEXT: (local $var$2 i32) ;; CHECK-NEXT: (local $var$3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (i32.const -7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$3 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $multiple-uses-to-non-expression (param $x i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multiple-uses-to-non-expression (param $x i32) (local $temp i32) (local.set $x (i32.add (local.get $x) (i32.const 10) ) ) (i32.store (i32.const 1) (local.get $x) ;; x+10 has two uses! ) (i32.store (i32.const 2) (i32.add (local.get $x) (i32.const 20) ) ) ) ;; CHECK: (func $nested-phi-forwarding (param $var$0 i32) (result i32) ;; CHECK-NEXT: (local $var$1 i32) ;; CHECK-NEXT: (local $var$2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block $label$2 ;; CHECK-NEXT: (loop $label$3 ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (block $label$5 ;; CHECK-NEXT: (block $label$6 ;; CHECK-NEXT: (block $label$7 ;; CHECK-NEXT: (block $label$8 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4 ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$4) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $label$3 ;; CHECK-NEXT: (local.get $var$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$9 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$9 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store offset=176 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $var$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-phi-forwarding (param $var$0 i32) (result i32) (local $var$1 i32) (local $var$2 i32) (block $label$1 (block $label$2 (loop $label$3 (block $label$4 (block $label$5 (block $label$6 (block $label$7 (block $label$8 (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4 (local.get $var$0) ) ) (local.set $var$1 (i32.const 1) ) ) (br $label$4) ) (unreachable) ) (br $label$1) ) (br_if $label$3 (local.tee $var$2 (i32.const 1) ) ) ) ) (block $label$9 (br_if $label$9 (i32.or (i32.const 1) (local.get $var$1) ) ) ) (unreachable) ) (i32.store offset=176 (i32.const 0) (local.get $var$2) ) (i32.const 0) ) ;; CHECK: (func $zext-numGets (param $var$0 i32) (param $var$1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const -16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zext-numGets (param $var$0 i32) (param $var$1 i32) (if (i32.ctz (block $label$1 (result i32) (drop (br_if $label$1 (i32.const 1) (i32.load (i32.const -8) ) ) ) (i32.eqz (i32.load (i32.const -16) ) ) ) ) (unreachable) ) ) ;; CHECK: (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const -16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32) (local $temp i32) (if (i32.ctz (block $label$1 (result i32) (drop (br_if $label$1 (i32.const 1) (i32.load (i32.const -8) ) ) ) (local.set $temp (i32.eqz (i32.load (i32.const -16) ) ) ) (drop (local.get $temp) ) (local.get $temp) ) ) (unreachable) ) ) ;; CHECK: (func $flipped-needs-right-origin (param $var$0 i32) (result i32) ;; CHECK-NEXT: (local $var$1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $flipped-needs-right-origin (param $var$0 i32) (result i32) (local $var$1 i32) (block $label$1 (br_if $label$1 (i32.load (i32.const 1) ) ) (local.set $var$1 (i32.const 2) ) ) (if (i32.gt_s (i32.const 3) (i32.add (local.get $var$1) (i32.const 4) ) ) (unreachable) ) (i32.const 5) ) ;; CHECK: (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) (i32.store (local.tee $var$1 (i32.gt_u (local.get $var$1) (i32.const 1) ) ) (i32.const 2) ) (i32.store offset=8 (i32.const 3) (i32.sub (i32.const 4) (local.get $var$1) ) ) (unreachable) ) ;; CHECK: (func $loop-of-set-connections (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (loop $label$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br $label$1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $loop-of-set-connections (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) (loop $label$1 (if (i32.const 0) (block (local.set $var$2 (i32.add (i32.const 0) (i32.const 1) ) ) (br $label$1) ) ) (local.set $var$3 (local.get $var$2) ) (local.set $var$2 (local.get $var$3) ) (br $label$1) ) ) ;; CHECK: (func $conditions-in-conditions (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) ;; CHECK-NEXT: (local $var$3 i32) ;; CHECK-NEXT: (local $var$4 i32) ;; CHECK-NEXT: (local $var$5 i32) ;; CHECK-NEXT: (local $var$6 i32) ;; CHECK-NEXT: (local $var$7 i32) ;; CHECK-NEXT: (local $var$8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (loop $label$2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $var$3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $var$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (local.set $var$3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $var$3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $conditions-in-conditions (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32) (local $var$3 i32) (local $var$4 i32) (local $var$5 i32) (local $var$6 i32) (local $var$7 i32) (local $var$8 i32) (local.set $var$1 (i32.const 1) ) (if (i32.const 0) (loop $label$2 (if (local.get $var$1) (nop) ) (local.set $var$1 (i32.sub (i32.const 0) (local.tee $var$3 (i32.const 1) ) ) ) (br_if $label$2 (i32.const 0) ) ) ) (if (local.get $var$1) (local.set $var$3 (i32.const 1) ) ) (i32.store (i32.const 8) (i32.add (local.get $var$3) (i32.const 16) ) ) (i32.store (i32.const 8) (i32.const 64) ) (unreachable) ) ) binaryen-version_108/test/lit/passes/fpcast-emu.wast000066400000000000000000000363501423707623100227650ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --fpcast-emu -S -o - | filecheck %s (module ;; CHECK: (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64 (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64))) ;; CHECK: (type $i32_i64_f32_f64_=>_f32 (func (param i32 i64 f32 f64) (result f32))) ;; CHECK: (type $vijfd (func (param i32 i64 f32 f64))) (type $vijfd (func (param i32) (param i64) (param f32) (param f64))) ;; CHECK: (type $jii (func (param i32 i32) (result i64))) (type $jii (func (param i32) (param i32) (result i64))) ;; CHECK: (type $fjj (func (param i64 i64) (result f32))) (type $fjj (func (param i64) (param i64) (result f32))) ;; CHECK: (type $dff (func (param f32 f32) (result f64))) (type $dff (func (param f32) (param f32) (result f64))) ;; CHECK: (type $idd (func (param f64 f64) (result i32))) (type $idd (func (param f64) (param f64) (result i32))) ;; CHECK: (import "env" "imported_func" (func $imported-func (param i32 i64 f32 f64) (result f32))) (import "env" "imported_func" (func $imported-func (param i32 i64 f32 f64) (result f32))) (table 10 10 funcref) (elem (i32.const 0) $a $b $c $d $e $e $imported-func) ;; CHECK: (table $0 10 10 funcref) ;; CHECK: (elem (i32.const 0) $byn$fpcast-emu$a $byn$fpcast-emu$b $byn$fpcast-emu$c $byn$fpcast-emu$d $byn$fpcast-emu$e $byn$fpcast-emu$e $byn$fpcast-emu$imported-func) ;; CHECK: (func $a (param $x i32) (param $y i64) (param $z f32) (param $w f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a (param $x i32) (param $y i64) (param $z f32) (param $w f64) (call_indirect (type $vijfd) (i32.const 1) (i64.const 2) (f32.const 3) (f64.const 4) (i32.const 1337) ) ) ;; CHECK: (func $b (param $x i32) (param $y i32) (result i64) ;; CHECK-NEXT: (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b (param $x i32) (param $y i32) (result i64) (call_indirect (type $jii) (i32.const 1) (i32.const 2) (i32.const 1337) ) ) ;; CHECK: (func $c (param $x i64) (param $y i64) (result f32) ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $c (param $x i64) (param $y i64) (result f32) (call_indirect (type $fjj) (i64.const 1) (i64.const 2) (i32.const 1337) ) ) ;; CHECK: (func $d (param $x f32) (param $y f32) (result f64) ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $d (param $x f32) (param $y f32) (result f64) (call_indirect (type $dff) (f32.const 1) (f32.const 2) (i32.const 1337) ) ) ;; CHECK: (func $e (param $x f64) (param $y f64) (result i32) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64) ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $e (param $x f64) (param $y f64) (result i32) (call_indirect (type $idd) (f64.const 1) (f64.const 2) (i32.const 1337) ) ) ) ;; CHECK: (func $byn$fpcast-emu$a (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64) ;; CHECK-NEXT: (call $a ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK: (func $byn$fpcast-emu$b (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64) ;; CHECK-NEXT: (call $b ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn$fpcast-emu$c (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (call $c ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn$fpcast-emu$d (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64) ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (call $d ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn$fpcast-emu$e (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (call $e ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn$fpcast-emu$imported-func (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64) ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (call $imported-func ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module (type $0 (func (param i64))) ;; CHECK: (type $1 (func (param f32) (result i64))) (type $1 (func (param f32) (result i64))) ;; CHECK: (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64 (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64))) ;; CHECK: (global $global$0 (mut i32) (i32.const 10)) (global $global$0 (mut i32) (i32.const 10)) (table 42 42 funcref) ;; CHECK: (table $0 42 42 funcref) ;; CHECK: (export "func_106" (func $0)) (export "func_106" (func $0)) ;; CHECK: (func $0 (param $0 f32) (result i64) ;; CHECK-NEXT: (block $label$1 (result i64) ;; CHECK-NEXT: (loop $label$2 ;; CHECK-NEXT: (global.set $global$0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64) ;; CHECK-NEXT: (br $label$1 ;; CHECK-NEXT: (i64.const 4294967295) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (; 0 ;) (type $1) (param $0 f32) (result i64) (block $label$1 (result i64) (loop $label$2 (global.set $global$0 (i32.const 0) ) (call_indirect (type $0) (br $label$1 (i64.const 4294967295) ) (i32.const 18) ) ) ) ) ) (module (table 42 42 funcref) (elem (i32.const 0) $a $b) ;; CHECK: (type $f32_=>_none (func (param f32))) ;; CHECK: (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64 (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64))) ;; CHECK: (type $f64_=>_none (func (param f64))) ;; CHECK: (table $0 42 42 funcref) ;; CHECK: (elem (i32.const 0) $byn$fpcast-emu$a $byn$fpcast-emu$b) ;; CHECK: (export "dynCall_vf" (func $dynCall_vf)) (export "dynCall_vf" (func $dynCall_vf)) ;; CHECK: (export "dynCall_vd" (func $min_vd)) (export "dynCall_vd" (func $min_vd)) ;; CHECK: (func $a (param $0 f32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $a (param $0 f32)) ;; CHECK: (func $b (param $0 f64) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $b (param $0 f64)) ;; CHECK: (func $dynCall_vf (param $0 f32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $dynCall_vf (param $0 f32)) ;; CHECK: (func $min_vd (param $0 f32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $min_vd (param $0 f32)) ) ;; CHECK: (func $byn$fpcast-emu$a (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64) ;; CHECK-NEXT: (call $a ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK: (func $byn$fpcast-emu$b (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64) ;; CHECK-NEXT: (call $b ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/generate-dyncalls_all-features.wast000066400000000000000000000066111423707623100267630ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --generate-dyncalls --all-features -S -o - | filecheck %s (module ;; CHECK: (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_i64 (func (param i32) (result i64))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32))) (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32))) ;; CHECK: (table $0 2 2 funcref) ;; CHECK: (elem (i32.const 0) $f1 $f2) ;; CHECK: (export "dynCall_i" (func $dynCall_i)) ;; CHECK: (export "dynCall_ji" (func $dynCall_ji)) ;; CHECK: (export "dynCall_vii" (func $dynCall_vii)) ;; CHECK: (func $f1 (result i32) ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) (func $f1 (result i32) (i32.const 1024) ) ;; CHECK: (func $f2 (param $0 i32) (result i64) ;; CHECK-NEXT: (i64.const 42) ;; CHECK-NEXT: ) (func $f2 (param i32) (result i64) (i64.const 42) ) (table 2 2 funcref) (elem (i32.const 0) $f1 $f2) ) ;; CHECK: (func $dynCall_i (param $fptr i32) (result i32) ;; CHECK-NEXT: (call_indirect $0 (type $none_=>_i32) ;; CHECK-NEXT: (local.get $fptr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $dynCall_ji (param $fptr i32) (param $0 i32) (result i64) ;; CHECK-NEXT: (call_indirect $0 (type $i32_=>_i64) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $fptr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $dynCall_vii (param $fptr i32) (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (call_indirect $0 (type $i32_i32_=>_none) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $fptr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module ;; CHECK: (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (import "env" "table" (table $timport$0 1 1 funcref)) (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32))) ;; CHECK: (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32))) (import "env" "table" (table 1 1 funcref)) (elem (i32.const 0) $f) ;; CHECK: (elem (i32.const 0) $f) ;; CHECK: (export "dynCall_i" (func $dynCall_i)) ;; CHECK: (export "dynCall_vii" (func $dynCall_vii)) ;; CHECK: (func $f (result i32) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) (func $f (result i32) (i32.const 42) ) ) ;; CHECK: (func $dynCall_i (param $fptr i32) (result i32) ;; CHECK-NEXT: (call_indirect $timport$0 (type $none_=>_i32) ;; CHECK-NEXT: (local.get $fptr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $dynCall_vii (param $fptr i32) (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (call_indirect $timport$0 (type $i32_i32_=>_none) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $fptr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/generate-i64-dyncalls.wast000066400000000000000000000022461423707623100247170ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --generate-i64-dyncalls -S -o - | filecheck %s (module ;; CHECK: (type $i32_=>_i64 (func (param i32) (result i64))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) ;; CHECK: (table $0 2 2 funcref) ;; CHECK: (elem (i32.const 0) $f1 $f2) ;; CHECK: (export "dynCall_ji" (func $dynCall_ji)) ;; CHECK: (func $f1 (result i32) ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) (func $f1 (result i32) (i32.const 1024) ) ;; CHECK: (func $f2 (param $0 i32) (result i64) ;; CHECK-NEXT: (i64.const 42) ;; CHECK-NEXT: ) (func $f2 (param i32) (result i64) (i64.const 42) ) (table 2 2 funcref) (elem (i32.const 0) $f1 $f2) ) ;; CHECK: (func $dynCall_ji (param $fptr i32) (param $0 i32) (result i64) ;; CHECK-NEXT: (call_indirect (type $i32_=>_i64) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $fptr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/global-refining.wast000066400000000000000000000101121423707623100237440ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --nominal --global-refining -all -S -o - | filecheck %s (module ;; Globals with no assignments aside from their initial values. The first is ;; a null, so we have nothing concrete to improve with (though we could use ;; the type of the null perhaps, TODO). The second is a ref.func which lets ;; us refine. ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $func-null-init (mut anyref) (ref.null func)) (global $func-null-init (mut anyref) (ref.null func)) ;; CHECK: (global $func-func-init (mut (ref $none_=>_none)) (ref.func $foo)) (global $func-func-init (mut anyref) (ref.func $foo)) ;; CHECK: (func $foo (type $none_=>_none) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo) ) (module ;; Globals with later assignments of null. The global with a function in its ;; init will update the null to allow it to refine. ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $func-null-init (mut anyref) (ref.null func)) (global $func-null-init (mut anyref) (ref.null func)) ;; CHECK: (global $func-func-init (mut (ref null $none_=>_none)) (ref.func $foo)) (global $func-func-init (mut anyref) (ref.func $foo)) ;; CHECK: (func $foo (type $none_=>_none) ;; CHECK-NEXT: (global.set $func-null-init ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $func-func-init ;; CHECK-NEXT: (ref.null $none_=>_none) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (global.set $func-null-init (ref.null any)) (global.set $func-func-init (ref.null any)) ) ) (module ;; Globals with later assignments of something non-null. Both can be refined, ;; and the one with a non-null initial value can even become non-nullable. ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $func-null-init (mut (ref null $none_=>_none)) (ref.null $none_=>_none)) (global $func-null-init (mut anyref) (ref.null func)) ;; CHECK: (global $func-func-init (mut (ref $none_=>_none)) (ref.func $foo)) (global $func-func-init (mut anyref) (ref.func $foo)) ;; CHECK: (elem declare func $foo) ;; CHECK: (func $foo (type $none_=>_none) ;; CHECK-NEXT: (global.set $func-null-init ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $func-func-init ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (global.set $func-null-init (ref.func $foo)) (global.set $func-func-init (ref.func $foo)) ) ) (module ;; A global with multiple later assignments. The refined type is more ;; specific than the original, but less than each of the non-null values. ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $i32_=>_none (func_subtype (param i32) func)) ;; CHECK: (global $global (mut funcref) (ref.null func)) (global $global (mut anyref) (ref.null any)) ;; CHECK: (elem declare func $bar $foo) ;; CHECK: (func $foo (type $none_=>_none) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (ref.func $bar) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (global.set $global (ref.func $foo)) (global.set $global (ref.func $bar)) (global.set $global (ref.null func)) ;; These nulls will be updated. (global.set $global (ref.null eq)) (global.set $global (ref.null data)) ) ;; CHECK: (func $bar (type $i32_=>_none) (param $x i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $bar (param $x i32) ;; A function with a different signature, whose reference is also assigned ;; to the global. ) ) binaryen-version_108/test/lit/passes/gto-mutability.wast000066400000000000000000000411471423707623100236730ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --nominal --gto -all -S -o - | filecheck %s ;; (remove-unused-names is added to test fallthrough values without a block ;; name getting in the way) (module ;; The struct here has three fields, and the second of them has no struct.set ;; which means we can make it immutable. ;; CHECK: (type $struct (struct_subtype (field (mut funcref)) (field funcref) (field (mut funcref)) data)) (type $struct (struct (field (mut funcref)) (field (mut funcref)) (field (mut funcref)))) ;; CHECK: (type $two-params (func_subtype (param (ref $struct) (ref $struct)) func)) (type $two-params (func (param (ref $struct)) (param (ref $struct)))) ;; Test that we update tag types properly. (table 0 funcref) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (type $none_=>_ref?|$struct| (func_subtype (result (ref null $struct)) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (table $0 0 funcref) ;; CHECK: (elem declare func $func-two-params) ;; CHECK: (tag $tag (param (ref $struct))) (tag $tag (param (ref $struct))) ;; CHECK: (func $func (type $ref|$struct|_=>_none) (param $x (ref $struct)) ;; CHECK-NEXT: (local $temp (ref null $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $struct)) (local $temp (ref null $struct)) ;; The presence of a struct.new does not prevent this optimization: we just ;; care about writes using struct.set. (drop (struct.new $struct (ref.null func) (ref.null func) (ref.null func) ) ) (struct.set $struct 0 (local.get $x) (ref.null func) ) (struct.set $struct 2 (local.get $x) (ref.null func) ) ;; Test that local types remain valid after our work (otherwise, we'd get a ;; validation error). (local.set $temp (local.get $x) ) ;; Test that struct.get types remain valid after our work. (drop (struct.get $struct 0 (local.get $x) ) ) (drop (struct.get $struct 1 (local.get $x) ) ) ) ;; CHECK: (func $foo (type $none_=>_ref?|$struct|) (result (ref null $struct)) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tag ;; CHECK-NEXT: (return ;; CHECK-NEXT: (pop (ref $struct)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) (func $foo (result (ref null $struct)) ;; Use a tag so that we test proper updating of its type after making ;; changes. (try (do (nop) ) (catch $tag (return (pop (ref $struct)) ) ) ) (ref.null $struct) ) ;; CHECK: (func $func-two-params (type $two-params) (param $x (ref $struct)) (param $y (ref $struct)) ;; CHECK-NEXT: (local $z (ref null $two-params)) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (ref.func $func-two-params) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_indirect $0 (type $two-params) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func-two-params (param $x (ref $struct)) (param $y (ref $struct)) ;; This function has two params, which means a tuple type is used for its ;; signature, which we must also update. To verify the update is correct, ;; assign it to a local. (local $z (ref null $two-params)) (local.set $z (ref.func $func-two-params) ) ;; Also check that a call_indirect still validates after the rewriting. (call_indirect (type $two-params) (local.get $x) (local.get $y) (i32.const 0) ) ) ;; CHECK: (func $field-keepalive (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 2 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $field-keepalive ;; --gto will remove fields that are not read from, so add reads to any ;; that don't already have them. (drop (struct.get $struct 2 (ref.null $struct))) ) ) (module ;; Test recursion between structs where we only modify one. Specifically $B ;; has no writes to either of its fields. ;; CHECK: (type $A (struct_subtype (field (mut (ref null $B))) (field (mut i32)) data)) (type $A (struct (field (mut (ref null $B))) (field (mut i32)) )) ;; CHECK: (type $B (struct_subtype (field (ref null $A)) (field f64) data)) (type $B (struct (field (mut (ref null $A))) (field (mut f64)) )) ;; CHECK: (type $ref|$A|_=>_none (func_subtype (param (ref $A)) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $ref|$A|_=>_none) (param $x (ref $A)) ;; CHECK-NEXT: (struct.set $A 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $A 1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $A)) (struct.set $A 0 (local.get $x) (ref.null $B) ) (struct.set $A 1 (local.get $x) (i32.const 20) ) ) ;; CHECK: (func $field-keepalive (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $A 0 ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $A 1 ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $B 0 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $B 1 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $field-keepalive (drop (struct.get $A 0 (ref.null $A))) (drop (struct.get $A 1 (ref.null $A))) (drop (struct.get $B 0 (ref.null $B))) (drop (struct.get $B 1 (ref.null $B))) ) ) (module ;; As before, but flipped so that $A's fields can become immutable. ;; CHECK: (type $B (struct_subtype (field (mut (ref null $A))) (field (mut f64)) data)) (type $B (struct (field (mut (ref null $A))) (field (mut f64)) )) ;; CHECK: (type $A (struct_subtype (field (ref null $B)) (field i32) data)) (type $A (struct (field (mut (ref null $B))) (field (mut i32)) )) ;; CHECK: (type $ref|$B|_=>_none (func_subtype (param (ref $B)) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $ref|$B|_=>_none) (param $x (ref $B)) ;; CHECK-NEXT: (struct.set $B 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $B 1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $B)) (struct.set $B 0 (local.get $x) (ref.null $A) ) (struct.set $B 1 (local.get $x) (f64.const 3.14159) ) ) ;; CHECK: (func $field-keepalive (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $A 0 ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $A 1 ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $B 0 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $B 1 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $field-keepalive (drop (struct.get $A 0 (ref.null $A))) (drop (struct.get $A 1 (ref.null $A))) (drop (struct.get $B 0 (ref.null $B))) (drop (struct.get $B 1 (ref.null $B))) ) ) (module ;; As before, but now one field in each can become immutable. ;; CHECK: (type $B (struct_subtype (field (ref null $A)) (field (mut f64)) data)) (type $B (struct (field (mut (ref null $A))) (field (mut f64)) )) ;; CHECK: (type $A (struct_subtype (field (mut (ref null $B))) (field i32) data)) (type $A (struct (field (mut (ref null $B))) (field (mut i32)) )) ;; CHECK: (type $ref|$A|_ref|$B|_=>_none (func_subtype (param (ref $A) (ref $B)) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $ref|$A|_ref|$B|_=>_none) (param $x (ref $A)) (param $y (ref $B)) ;; CHECK-NEXT: (struct.set $A 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $B 1 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $A)) (param $y (ref $B)) (struct.set $A 0 (local.get $x) (ref.null $B) ) (struct.set $B 1 (local.get $y) (f64.const 3.14159) ) ) ;; CHECK: (func $field-keepalive (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $A 0 ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $A 1 ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $B 0 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $B 1 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $field-keepalive (drop (struct.get $A 0 (ref.null $A))) (drop (struct.get $A 1 (ref.null $A))) (drop (struct.get $B 0 (ref.null $B))) (drop (struct.get $B 1 (ref.null $B))) ) ) (module ;; Field #0 is already immutable. ;; Field #1 is mutable and can become so. ;; Field #2 is mutable and must remain so. ;; CHECK: (type $struct (struct_subtype (field i32) (field i32) (field (mut i32)) data)) (type $struct (struct (field i32) (field (mut i32)) (field (mut i32)))) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $ref|$struct|_=>_none) (param $x (ref $struct)) ;; CHECK-NEXT: (struct.set $struct 2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $struct)) (struct.set $struct 2 (local.get $x) (i32.const 1) ) ) ;; CHECK: (func $field-keepalive (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 1 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 2 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $field-keepalive (drop (struct.get $struct 0 (ref.null $struct))) (drop (struct.get $struct 1 (ref.null $struct))) (drop (struct.get $struct 2 (ref.null $struct))) ) ) (module ;; Subtyping. Without a write in either supertype or subtype, we can ;; optimize the field to be immutable. ;; CHECK: (type $super (struct_subtype (field i32) data)) (type $super (struct (field (mut i32)))) ;; CHECK: (type $sub (struct_subtype (field i32) $super)) (type $sub (struct_subtype (field (mut i32)) $super)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $super ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $sub ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func ;; The presence of struct.new do not prevent us optimizing (drop (struct.new $super (i32.const 1) ) ) (drop (struct.new $sub (i32.const 1) ) ) ) ;; CHECK: (func $field-keepalive (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $super 0 ;; CHECK-NEXT: (ref.null $super) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $sub 0 ;; CHECK-NEXT: (ref.null $sub) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $field-keepalive (drop (struct.get $super 0 (ref.null $super))) (drop (struct.get $sub 0 (ref.null $sub))) ) ) (module ;; As above, but add a write in the super, which prevents optimization. ;; CHECK: (type $super (struct_subtype (field (mut i32)) data)) (type $super (struct (field (mut i32)))) ;; CHECK: (type $sub (struct_subtype (field (mut i32)) $super)) (type $sub (struct_subtype (field (mut i32)) $super)) ;; CHECK: (type $ref|$super|_=>_none (func_subtype (param (ref $super)) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $ref|$super|_=>_none) (param $x (ref $super)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $super ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $sub ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $super 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $super)) ;; The presence of struct.new do not prevent us optimizing (drop (struct.new $super (i32.const 1) ) ) (drop (struct.new $sub (i32.const 1) ) ) (struct.set $super 0 (local.get $x) (i32.const 2) ) ) ;; CHECK: (func $field-keepalive (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $super 0 ;; CHECK-NEXT: (ref.null $super) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $sub 0 ;; CHECK-NEXT: (ref.null $sub) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $field-keepalive (drop (struct.get $super 0 (ref.null $super))) (drop (struct.get $sub 0 (ref.null $sub))) ) ) (module ;; As above, but add a write in the sub, which prevents optimization. ;; CHECK: (type $super (struct_subtype (field (mut i32)) data)) (type $super (struct (field (mut i32)))) ;; CHECK: (type $sub (struct_subtype (field (mut i32)) $super)) (type $sub (struct_subtype (field (mut i32)) $super)) ;; CHECK: (type $ref|$sub|_=>_none (func_subtype (param (ref $sub)) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $ref|$sub|_=>_none) (param $x (ref $sub)) ;; CHECK-NEXT: (struct.set $sub 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $sub)) (struct.set $sub 0 (local.get $x) (i32.const 2) ) ) ;; CHECK: (func $field-keepalive (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $super 0 ;; CHECK-NEXT: (ref.null $super) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $sub 0 ;; CHECK-NEXT: (ref.null $sub) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $field-keepalive (drop (struct.get $super 0 (ref.null $super))) (drop (struct.get $sub 0 (ref.null $sub))) ) ) binaryen-version_108/test/lit/passes/gto-removals.wast000066400000000000000000000615651423707623100233460ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --nominal --gto -all -S -o - | filecheck %s ;; (remove-unused-names is added to test fallthrough values without a block ;; name getting in the way) (module ;; A struct with a field that is never read or written, so it can be ;; removed. ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype (field (mut funcref)) data)) ;; CHECK: (func $func (type $ref|$struct|_=>_none) (param $x (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (param $x (ref $struct)) ) ) (module ;; A write does not keep a field from being removed. ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype (field (mut funcref)) data)) ;; CHECK: (func $func (type $ref|$struct|_=>_none) (param $x (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $struct)) ;; The fields of this set will be dropped, as we do not need to perform ;; the write. (struct.set $struct 0 (local.get $x) (ref.null func) ) ) ) (module ;; A new does not keep a field from being removed. ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype (field (mut funcref)) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (func $func (type $ref|$struct|_=>_none) (param $x (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $struct)) ;; The fields in this new will be removed. (drop (struct.new $struct (ref.null func) ) ) ) ) (module ;; A new_default does not keep a field from being removed. ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype (field (mut funcref)) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (func $func (type $ref|$struct|_=>_none) (param $x (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $struct)) ;; The fields in this new will be removed. (drop (struct.new_default $struct ) ) ) ) (module ;; A read *does* keep a field from being removed. ;; CHECK: (type $struct (struct_subtype (field funcref) data)) (type $struct (struct_subtype (field (mut funcref)) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (func $func (type $ref|$struct|_=>_none) (param $x (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $struct)) (drop (struct.get $struct 0 (local.get $x) ) ) ) ) (module ;; Different struct types with different situations: some fields are read, ;; some written, and some both. (Note that this also tests the interaction ;; of removing with the immutability inference that --gto does.) ;; A struct with all fields marked mutable. ;; CHECK: (type $mut-struct (struct_subtype (field $r i32) (field $rw (mut i32)) (field $r-2 i32) (field $rw-2 (mut i32)) data)) (type $mut-struct (struct_subtype (field $r (mut i32)) (field $w (mut i32)) (field $rw (mut i32)) (field $r-2 (mut i32)) (field $w-2 (mut i32)) (field $rw-2 (mut i32)) data)) ;; A similar struct but with all fields marked immutable, and the only ;; writes are from during creation (so all fields are at least writeable). ;; CHECK: (type $imm-struct (struct_subtype (field $rw i32) (field $rw-2 i32) data)) (type $imm-struct (struct_subtype (field $w i32) (field $rw i32) (field $w-2 i32) (field $rw-2 i32) data)) ;; CHECK: (type $ref|$mut-struct|_=>_none (func_subtype (param (ref $mut-struct)) func)) ;; CHECK: (type $ref|$imm-struct|_=>_none (func_subtype (param (ref $imm-struct)) func)) ;; CHECK: (func $func-mut (type $ref|$mut-struct|_=>_none) (param $x (ref $mut-struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $mut-struct $r ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $mut-struct $rw ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $mut-struct $rw ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $mut-struct $r-2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $mut-struct $rw-2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $mut-struct $rw-2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func-mut (param $x (ref $mut-struct)) ;; $r is only read (drop (struct.get $mut-struct $r (local.get $x) ) ) ;; $w is only written (struct.set $mut-struct $w (local.get $x) (i32.const 0) ) ;; $rw is both (struct.set $mut-struct $rw (local.get $x) (i32.const 1) ) (drop (struct.get $mut-struct $rw (local.get $x) ) ) ;; The same, for the $*-2 fields (drop (struct.get $mut-struct $r-2 (local.get $x) ) ) (struct.set $mut-struct $w-2 (local.get $x) (i32.const 2) ) (struct.set $mut-struct $rw-2 (local.get $x) (i32.const 3) ) (drop (struct.get $mut-struct $rw-2 (local.get $x) ) ) ) ;; CHECK: (func $func-imm (type $ref|$imm-struct|_=>_none) (param $x (ref $imm-struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $imm-struct ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $imm-struct $rw ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $imm-struct $rw-2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func-imm (param $x (ref $imm-struct)) ;; create an instance (drop (struct.new $imm-struct (i32.const 0) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ;; $rw and $rw-2 are also read (drop (struct.get $imm-struct $rw (local.get $x) ) ) (drop (struct.get $imm-struct $rw-2 (local.get $x) ) ) ) ) (module ;; A vtable-like structure created in a global location. Only some of the ;; fields are accessed. ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $vtable (struct_subtype (field $v1 funcref) (field $v2 funcref) data)) (type $vtable (struct_subtype (field $v0 funcref) (field $v1 funcref) (field $v2 funcref) (field $v3 funcref) (field $v4 funcref) data)) ;; CHECK: (global $vtable (ref $vtable) (struct.new $vtable ;; CHECK-NEXT: (ref.func $func-1) ;; CHECK-NEXT: (ref.func $func-2) ;; CHECK-NEXT: )) (global $vtable (ref $vtable) (struct.new $vtable (ref.func $func-0) (ref.func $func-1) (ref.func $func-2) (ref.func $func-3) (ref.func $func-4) )) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $vtable $v1 ;; CHECK-NEXT: (global.get $vtable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $vtable $v2 ;; CHECK-NEXT: (global.get $vtable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test ;; To differ from previous tests, do not read the very first field. (drop (struct.get $vtable 1 (global.get $vtable) ) ) ;; To differ from previous tests, do reads in two adjacent fields. (drop (struct.get $vtable 2 (global.get $vtable) ) ) ;; To differ from previous tests, do not read the very last field, and the ;; one before it. ) ;; CHECK: (func $func-0 (type $none_=>_none) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-0) ;; CHECK: (func $func-1 (type $none_=>_none) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-1) ;; CHECK: (func $func-2 (type $none_=>_none) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-2) ;; CHECK: (func $func-3 (type $none_=>_none) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-3) ;; CHECK: (func $func-4 (type $none_=>_none) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-4) ) (module ;; Similar to the above, but with different types in each field, to verify ;; that we emit valid code and are not confused by the names being right ;; by coincidence. ;; CHECK: (type $vtable (struct_subtype (field $v1 i64) (field $v2 f32) data)) (type $vtable (struct_subtype (field $v0 i32) (field $v1 i64) (field $v2 f32) (field $v3 f64) (field $v4 anyref) data)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (global $vtable (ref $vtable) (struct.new $vtable ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (f32.const 2.200000047683716) ;; CHECK-NEXT: )) (global $vtable (ref $vtable) (struct.new $vtable (i32.const 0) (i64.const 1) (f32.const 2.2) (f64.const 3.3) (ref.null data) )) ;; CHECK: (func $test (type $none_=>_none) ;; CHECK-NEXT: (local $i64 i64) ;; CHECK-NEXT: (local $f32 f32) ;; CHECK-NEXT: (local.set $i64 ;; CHECK-NEXT: (struct.get $vtable $v1 ;; CHECK-NEXT: (global.get $vtable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $f32 ;; CHECK-NEXT: (struct.get $vtable $v2 ;; CHECK-NEXT: (global.get $vtable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (local $i64 i64) (local $f32 f32) (local.set $i64 (struct.get $vtable 1 (global.get $vtable) ) ) (local.set $f32 (struct.get $vtable 2 (global.get $vtable) ) ) ) ) (module ;; A new with side effects ;; CHECK: (type $struct (struct_subtype (field i32) (field (rtt $struct)) data)) (type $struct (struct i32 f64 (ref any) (rtt $struct))) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $ref|any|_=>_none (func_subtype (param (ref any)) func)) ;; CHECK: (type $i32_=>_i32 (func_subtype (param i32) (result i32) func)) ;; CHECK: (type $i32_=>_f64 (func_subtype (param i32) (result f64) func)) ;; CHECK: (type $i32_=>_ref|any| (func_subtype (param i32) (result (ref any)) func)) ;; CHECK: (global $imm-i32 i32 (i32.const 1234)) (global $imm-i32 i32 (i32.const 1234)) ;; CHECK: (global $mut-i32 (mut i32) (i32.const 5678)) (global $mut-i32 (mut i32) (i32.const 5678)) ;; CHECK: (func $gets (type $ref|any|_=>_none) (param $x (ref any)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 1 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $gets (param $x (ref any)) ;; Gets to keep certain fields alive. (drop (struct.get $struct 0 (ref.null $struct) ) ) (drop (struct.get $struct 3 (ref.null $struct) ) ) ) ;; CHECK: (func $new-side-effect (type $none_=>_none) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $struct)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $helper0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $helper1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (call $helper2 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $new-side-effect ;; The 2nd&3rd fields here will be removed, since those fields have no ;; reads. They has side effects, though, so the operands will be saved in ;; locals. Note that we can't save the rtt.canon in locals, but it has ;; no effects, and we leave such arguments as they are. ;; Note also that one of the fields is non-nullable, and we need to use a ;; nullable local for it. (drop (struct.new $struct (call $helper0 (i32.const 0)) (call $helper1 (i32.const 1)) (call $helper2 (i32.const 2)) (rtt.canon $struct) ) ) ) ;; CHECK: (func $new-side-effect-global-imm (type $none_=>_none) ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $struct)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $helper1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $helper2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (global.get $imm-i32) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $new-side-effect-global-imm ;; As above, the 2nd&3rd fields here will be removed. The first field does ;; a global.get, which has effects, but those effects do not interact with ;; anything else (since it is an immutable global), so we do not need a ;; local for it. (drop (struct.new $struct (global.get $imm-i32) (call $helper1 (i32.const 0)) (call $helper2 (i32.const 1)) (rtt.canon $struct) ) ) ) ;; CHECK: (func $new-side-effect-global-mut (type $none_=>_none) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $struct)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (global.get $mut-i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $helper1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (call $helper2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $new-side-effect-global-mut ;; As above, but the global is mutable, so we will use a local: the calls ;; might alter that global, in theory. (drop (struct.new $struct (global.get $mut-i32) (call $helper1 (i32.const 0)) (call $helper2 (i32.const 1)) (rtt.canon $struct) ) ) ) ;; CHECK: (func $new-unreachable (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper2 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $new-unreachable ;; Another case with side effects. We stop at the unreachable param before ;; it, however. (drop (struct.new $struct (i32.const 2) (unreachable) (call $helper2 (i32.const 3)) (rtt.canon $struct) ) ) ) ;; CHECK: (func $new-side-effect-in-kept (type $ref|any|_=>_none) (param $any (ref any)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (call $helper0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $new-side-effect-in-kept (param $any (ref any)) ;; Side effects appear in fields that we do *not* remove. In that case, ;; we do not need to use locals. (drop (struct.new $struct (call $helper0 (i32.const 0)) (f64.const 3.14159) (local.get $any) (rtt.canon $struct) ) ) ) ;; CHECK: (func $helper0 (type $i32_=>_i32) (param $x i32) (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $helper0 (param $x i32) (result i32) (unreachable) ) ;; CHECK: (func $helper1 (type $i32_=>_f64) (param $x i32) (result f64) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $helper1 (param $x i32) (result f64) (unreachable) ) ;; CHECK: (func $helper2 (type $i32_=>_ref|any|) (param $x i32) (result (ref any)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $helper2 (param $x i32) (result (ref any)) (unreachable) ) ) ;; We can remove fields from the end if they are only used in subtypes, because ;; the subtypes can always add fields at the end (and only at the end). (module ;; CHECK: (type $parent (struct_subtype (field i32) (field i64) data)) ;; CHECK: (type $child (struct_subtype (field i32) (field i64) (field f32) (field f64) (field anyref) $parent)) (type $child (struct_subtype (field i32) (field i64) (field f32) (field f64) (field anyref) $parent)) (type $parent (struct_subtype (field i32) (field i64) (field f32) (field f64) data)) ;; CHECK: (type $ref|$parent|_ref|$child|_=>_none (func_subtype (param (ref $parent) (ref $child)) func)) ;; CHECK: (func $func (type $ref|$parent|_ref|$child|_=>_none) (param $x (ref $parent)) (param $y (ref $child)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $parent 1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child 0 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child 2 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child 3 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child 4 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $parent)) (param $y (ref $child)) ;; The parent has fields 0, 1, 2, 3 and the child adds 4. ;; Use fields only 1 in the parent, and all the rest in the child. We can ;; only remove from the end in the child, which means we can remove 2 and 3 ;; in the parent, but not 0. (drop (struct.get $parent 1 (local.get $x))) (drop (struct.get $child 0 (local.get $y))) (drop (struct.get $child 2 (local.get $y))) (drop (struct.get $child 3 (local.get $y))) (drop (struct.get $child 4 (local.get $y))) ) ) (module ;; CHECK: (type $parent (struct_subtype (field i32) (field i64) (field (mut f32)) data)) ;; CHECK: (type $child (struct_subtype (field i32) (field i64) (field (mut f32)) (field f64) (field anyref) $parent)) (type $child (struct_subtype (field (mut i32)) (field (mut i64)) (field (mut f32)) (field (mut f64)) (field (mut anyref)) $parent)) (type $parent (struct_subtype (field (mut i32)) (field (mut i64)) (field (mut f32)) (field (mut f64)) data)) ;; CHECK: (type $ref|$parent|_ref|$child|_=>_none (func_subtype (param (ref $parent) (ref $child)) func)) ;; CHECK: (func $func (type $ref|$parent|_ref|$child|_=>_none) (param $x (ref $parent)) (param $y (ref $child)) ;; CHECK-NEXT: (struct.set $parent 2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $parent 1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child 0 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child 2 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child 3 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child 4 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $x (ref $parent)) (param $y (ref $child)) ;; As above, but add a write in the parent of field 2. That prevents us from ;; removing it from the parent. (struct.set $parent 2 (local.get $x) (f32.const 0)) (drop (struct.get $parent 1 (local.get $x))) (drop (struct.get $child 0 (local.get $y))) (drop (struct.get $child 2 (local.get $y))) (drop (struct.get $child 3 (local.get $y))) (drop (struct.get $child 4 (local.get $y))) ) ) ;; A parent with two children, and there are only reads of the parent. Those ;; reads might be of data of either child, of course (as a refernce to the ;; parent might point to them), so we cannot optimize here. (module ;; CHECK: (type $parent (struct_subtype (field i32) data)) (type $parent (struct_subtype (field i32) data)) ;; CHECK: (type $ref|$parent|_ref|$child1|_ref|$child2|_=>_none (func_subtype (param (ref $parent) (ref $child1) (ref $child2)) func)) ;; CHECK: (type $child1 (struct_subtype (field i32) $parent)) (type $child1 (struct_subtype (field i32) $parent)) ;; CHECK: (type $child2 (struct_subtype (field i32) $parent)) (type $child2 (struct_subtype (field i32) $parent)) ;; CHECK: (func $func (type $ref|$parent|_ref|$child1|_ref|$child2|_=>_none) (param $parent (ref $parent)) (param $child1 (ref $child1)) (param $child2 (ref $child2)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $parent 0 ;; CHECK-NEXT: (local.get $parent) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $parent (ref $parent)) (param $child1 (ref $child1)) (param $child2 (ref $child2)) (drop (struct.get $parent 0 (local.get $parent))) ) ) ;; As above, but now the read is just of one child. We can remove the field ;; from the parent and the other child. (module ;; CHECK: (type $parent (struct_subtype data)) ;; CHECK: (type $child1 (struct_subtype (field i32) $parent)) (type $child1 (struct_subtype (field i32) $parent)) (type $parent (struct_subtype (field i32) data)) ;; CHECK: (type $ref|$parent|_ref|$child1|_ref|$child2|_=>_none (func_subtype (param (ref $parent) (ref $child1) (ref $child2)) func)) ;; CHECK: (type $child2 (struct_subtype $parent)) (type $child2 (struct_subtype (field i32) $parent)) ;; CHECK: (func $func (type $ref|$parent|_ref|$child1|_ref|$child2|_=>_none) (param $parent (ref $parent)) (param $child1 (ref $child1)) (param $child2 (ref $child2)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $child1 0 ;; CHECK-NEXT: (local.get $child1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (param $parent (ref $parent)) (param $child1 (ref $child1)) (param $child2 (ref $child2)) (drop (struct.get $child1 0 (local.get $child1))) ) ) binaryen-version_108/test/lit/passes/gto_and_cfp_in_O.wast000066400000000000000000000026151423707623100241250ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt -O -all --nominal -S -o - | filecheck %s ;; Test that -O, with nominal typing + GC enabled, will run global type ;; optimization in conjunction with constant field propagation etc. (module (type $struct (struct_subtype (field (mut funcref)) (field (mut i32)) data)) (global $glob (ref $struct) (struct.new $struct (ref.func $by-ref) (i32.const 100) )) (func $by-ref ;; This function is kept alive by the reference in $glob. After we remove ;; the field that the funcref is written to, we remove the funcref, which ;; means this function can be removed. ;; ;; Once it is removed, this write no longer exists, and does not hamper ;; constant field propagation from inferring the value of the i32 field. (struct.set $struct 1 (global.get $glob) (i32.const 200) ) ) ;; CHECK: (type $none_=>_i32 (func_subtype (result i32) func)) ;; CHECK: (export "main" (func $main)) ;; CHECK: (func $main (type $none_=>_i32) (; has Stack IR ;) (result i32) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) (func $main (export "main") (result i32) ;; After all the above optimizations, we can infer that $main should simply ;; return 100. (struct.get $struct 1 (global.get $glob) ) ) ) binaryen-version_108/test/lit/passes/heap2local.wast000066400000000000000000003024561423707623100227360ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; (remove-unused-names allows the pass to see that blocks flow values) ;; RUN: wasm-opt %s -all --remove-unused-names --heap2local -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --remove-unused-names --heap2local --nominal -S -o - | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $struct.A (struct (field (mut i32)) (field (mut f64)))) ;; NOMNL: (type $struct.A (struct_subtype (field (mut i32)) (field (mut f64)) data)) (type $struct.A (struct (field (mut i32)) (field (mut f64)))) ;; CHECK: (type $struct.recursive (struct (field (mut (ref null $struct.recursive))))) ;; CHECK: (type $struct.nonnullable (struct (field (ref $struct.A)))) ;; CHECK: (type $struct.packed (struct (field (mut i8)))) ;; NOMNL: (type $struct.recursive (struct_subtype (field (mut (ref null $struct.recursive))) data)) ;; NOMNL: (type $struct.nonnullable (struct_subtype (field (ref $struct.A)) data)) ;; NOMNL: (type $struct.packed (struct_subtype (field (mut i8)) data)) (type $struct.packed (struct (field (mut i8)))) ;; CHECK: (type $struct.nondefaultable (struct (field (rtt $struct.A)))) ;; NOMNL: (type $struct.nondefaultable (struct_subtype (field (rtt $struct.A)) data)) (type $struct.nondefaultable (struct (field (rtt $struct.A)))) (type $struct.recursive (struct (field (mut (ref null $struct.recursive))))) (type $struct.nonnullable (struct (field (ref $struct.A)))) ;; CHECK: (func $simple ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $simple (type $none_=>_none) ;; NOMNL-NEXT: (local $0 i32) ;; NOMNL-NEXT: (local $1 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $simple ;; Other passes can remove such a trivial case of an unused allocation, but ;; we still optimize it. (drop (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) ;; CHECK: (func $to-local ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $to-local (type $none_=>_none) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $to-local (local $ref (ref null $struct.A)) ;; While set to a local, this allocation has no get/set operations. Other ;; optimizations can remove it, but so can we, turning the set into a ;; drop (and adding some unnecessary code to allocate the values, which we ;; depend on other passes to remove). (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) ;; CHECK: (func $one-get ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $one-get (type $none_=>_none) ;; NOMNL-NEXT: (local $0 i32) ;; NOMNL-NEXT: (local $1 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $one-get ;; An allocation followed by an immediate get of a field. This is a non- ;; escaping allocation, with a use, so we can optimize it out. The ;; allocation is dropped (letting later opts remove it), and the ;; allocation's data is moved to locals: we write the initial value to the ;; locals, and we read from the locals instead of the struct.get. (drop (struct.get $struct.A 0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) ) ;; CHECK: (func $one-get-b ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $one-get-b (type $none_=>_none) ;; NOMNL-NEXT: (local $0 i32) ;; NOMNL-NEXT: (local $1 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $one-get-b ;; Similar to the above, but using a different field index. (drop (struct.get $struct.A 1 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) ) ;; CHECK: (func $one-set ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $one-set (type $none_=>_none) ;; NOMNL-NEXT: (local $0 i32) ;; NOMNL-NEXT: (local $1 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $one-set ;; A simple optimizable allocation only used in one set. (struct.set $struct.A 0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) (i32.const 1) ) ) ;; CHECK: (func $packed ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get_u $struct.packed 0 ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.packed ;; CHECK-NEXT: (rtt.canon $struct.packed) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $packed (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.get_u $struct.packed 0 ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.packed ;; NOMNL-NEXT: (rtt.canon $struct.packed) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $packed ;; We do not optimize packed structs yet. (drop (struct.get $struct.packed 0 (struct.new_default_with_rtt $struct.packed (rtt.canon $struct.packed) ) ) ) ) ;; CHECK: (func $with-init-values ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $with-init-values (type $none_=>_none) ;; NOMNL-NEXT: (local $0 i32) ;; NOMNL-NEXT: (local $1 f64) ;; NOMNL-NEXT: (local $2 i32) ;; NOMNL-NEXT: (local $3 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (f64.const 3.14159) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (local.get $3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $with-init-values ;; When we get values to initialize the struct with, assign them to the ;; proper locals. (drop (struct.get $struct.A 0 (struct.new_with_rtt $struct.A (i32.const 2) (f64.const 3.14159) (rtt.canon $struct.A) ) ) ) ) ;; CHECK: (func $ignore-unreachable ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ignore-unreachable (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block ;; (replaces something unreachable we can't emit) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block ;; (replaces something unreachable we can't emit) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ignore-unreachable ;; An unreachable allocation is not worth trying to process; DCE should ;; remove it. (drop (struct.get $struct.A 0 (struct.new_with_rtt $struct.A (i32.const 2) (unreachable) (rtt.canon $struct.A) ) ) ) ) ;; CHECK: (func $nondefaultable ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct.nondefaultable 0 ;; CHECK-NEXT: (struct.new_with_rtt $struct.nondefaultable ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: (rtt.canon $struct.nondefaultable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $nondefaultable (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.get $struct.nondefaultable 0 ;; NOMNL-NEXT: (struct.new_with_rtt $struct.nondefaultable ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: (rtt.canon $struct.nondefaultable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $nondefaultable ;; We do not optimize structs with nondefaultable types that we cannot ;; handle, like rtts. (drop (struct.get $struct.nondefaultable 0 (struct.new_with_rtt $struct.nondefaultable (rtt.canon $struct.A) (rtt.canon $struct.nondefaultable) ) ) ) ) ;; CHECK: (func $simple-one-local-set ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $simple-one-local-set (type $none_=>_none) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $simple-one-local-set (local $ref (ref null $struct.A)) ;; A simple optimizable allocation only used in one set, and also stored ;; to a local. The local.set should not prevent our optimization, and the ;; local.set can be turned into a drop. (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (struct.set $struct.A 0 (local.get $ref) (i32.const 1) ) ) ;; CHECK: (func $simple-one-local-get (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $simple-one-local-get (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $simple-one-local-get (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; A simple optimizable allocation only used in one get, via a local. (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $send-ref (param $0 (ref null $struct.A)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $send-ref (type $ref?|$struct.A|_=>_none) (param $0 (ref null $struct.A)) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $send-ref (param (ref null $struct.A)) ) ;; CHECK: (func $safe-to-drop (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $safe-to-drop (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $safe-to-drop (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; An extra drop does not let the allocation escape. (drop (local.get $ref) ) (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $escape-via-call (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $send-ref ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $escape-via-call (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $ref ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $send-ref ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $escape-via-call (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; The allocation escapes into a call. (call $send-ref (local.get $ref) ) (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $safe-to-drop-multiflow (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $safe-to-drop-multiflow (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $safe-to-drop-multiflow (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; An extra drop + multiple flows through things do not stop us. (drop (block (result (ref null $struct.A)) (block (result (ref null $struct.A)) (loop (result (ref null $struct.A)) (local.get $ref) ) ) ) ) (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $escape-after-multiflow (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $send-ref ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $escape-after-multiflow (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $ref ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $send-ref ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $escape-after-multiflow (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; An escape after multiple flows. (call $send-ref (block (result (ref null $struct.A)) (block (result (ref null $struct.A)) (loop (result (ref null $struct.A)) (local.get $ref) ) ) ) ) (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $non-exclusive-set (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (select (result (ref $struct.A)) ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $non-exclusive-set (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $ref ;; NOMNL-NEXT: (select (result (ref $struct.A)) ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $non-exclusive-set (result f64) (local $ref (ref null $struct.A)) ;; A set that receives two different allocations, and so we should not try ;; to optimize it. (local.set $ref (select (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) (i32.const 1) ) ) (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $local-copies (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $local-copies (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $local-copies (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; Copying our allocation through locals does not bother us. (local.set $ref (local.get $ref) ) (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $local-copies-2 ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $ref-2 (ref null $struct.A)) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $local-copies-2 (type $none_=>_none) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $ref-2 (ref null $struct.A)) ;; NOMNL-NEXT: (local $2 i32) ;; NOMNL-NEXT: (local $3 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $local-copies-2 (local $ref (ref null $struct.A)) (local $ref-2 (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; Copying our allocation through locals does not bother us, even if it's ;; another local. (local.set $ref-2 (local.get $ref) ) (drop (struct.get $struct.A 0 (local.get $ref) ) ) (drop (struct.get $struct.A 1 (local.get $ref-2) ) ) ) ;; CHECK: (func $local-copies-conditional (param $x i32) (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $local-copies-conditional (type $i32_=>_f64) (param $x i32) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $2 i32) ;; NOMNL-NEXT: (local $3 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $local-copies-conditional (param $x i32) (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; Possibly copying our allocation through locals does not bother us. Note ;; that as a result of this the final local.get has two sets that send it ;; values, but we know they are both the same allocation. (if (local.get $x) (local.set $ref (local.get $ref) ) ) (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $block-value (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (call $send-ref ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $block-value (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (call $send-ref ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $block-value (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; Returning our allocation from a block does not bother us. (struct.get $struct.A 1 (block (result (ref null $struct.A)) ;; This call in the block should not bother us either. (call $send-ref (ref.null $struct.A) ) (local.get $ref) ) ) ) ;; CHECK: (func $non-exclusive-get (param $x i32) (result f64) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $non-exclusive-get (type $i32_=>_f64) (param $x i32) (result f64) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $ref ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (local.set $ref ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $non-exclusive-get (param $x i32) (result f64) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (if (local.get $x) (local.set $ref (ref.null $struct.A) ) ) ;; A get that receives two different allocations, and so we should not try ;; to optimize it. (struct.get $struct.A 1 (local.get $ref) ) ) ;; CHECK: (func $tee (result i32) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; NOMNL: (func $tee (type $none_=>_i32) (result i32) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) (func $tee (result i32) (local $ref (ref null $struct.A)) (struct.get $struct.A 0 ;; A tee flows out the value, and we can optimize this allocation. (local.tee $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) ) ;; CHECK: (func $tee-set ;; CHECK-NEXT: (local $ref (ref null $struct.recursive)) ;; CHECK-NEXT: (local $1 (ref null $struct.recursive)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.recursive)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $tee-set (type $none_=>_none) ;; NOMNL-NEXT: (local $ref (ref null $struct.recursive)) ;; NOMNL-NEXT: (local $1 (ref null $struct.recursive)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.recursive)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (ref.null $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (ref.null $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $tee-set (local $ref (ref null $struct.recursive)) ;; As above, but with a set, and also a recursive type. (struct.set $struct.recursive 0 (local.tee $ref (struct.new_default_with_rtt $struct.recursive (rtt.canon $struct.recursive) ) ) (ref.null $struct.recursive) ) ) ;; CHECK: (func $set-value ;; CHECK-NEXT: (local $ref (ref null $struct.recursive)) ;; CHECK-NEXT: (struct.set $struct.recursive 0 ;; CHECK-NEXT: (ref.null $struct.recursive) ;; CHECK-NEXT: (local.tee $ref ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.recursive ;; CHECK-NEXT: (rtt.canon $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $set-value (type $none_=>_none) ;; NOMNL-NEXT: (local $ref (ref null $struct.recursive)) ;; NOMNL-NEXT: (struct.set $struct.recursive 0 ;; NOMNL-NEXT: (ref.null $struct.recursive) ;; NOMNL-NEXT: (local.tee $ref ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.recursive ;; NOMNL-NEXT: (rtt.canon $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $set-value (local $ref (ref null $struct.recursive)) (struct.set $struct.recursive 0 (ref.null $struct.recursive) ;; As above, but operands reversed: the allocation is now the value, not ;; the reference, and so it escapes. (local.tee $ref (struct.new_default_with_rtt $struct.recursive (rtt.canon $struct.recursive) ) ) ) ) ;; CHECK: (func $initialize-with-reference ;; CHECK-NEXT: (local $0 (ref null $struct.recursive)) ;; CHECK-NEXT: (local $1 (ref null $struct.recursive)) ;; CHECK-NEXT: (local $2 (ref null $struct.recursive)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.recursive)) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.recursive ;; CHECK-NEXT: (rtt.canon $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.recursive)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.recursive) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $initialize-with-reference (type $none_=>_none) ;; NOMNL-NEXT: (local $0 (ref null $struct.recursive)) ;; NOMNL-NEXT: (local $1 (ref null $struct.recursive)) ;; NOMNL-NEXT: (local $2 (ref null $struct.recursive)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.recursive)) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.recursive ;; NOMNL-NEXT: (rtt.canon $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.recursive)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.recursive) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $initialize-with-reference (local $0 (ref null $struct.recursive)) (local.set $0 ;; The outer allocation can be optimized, as it does not escape. (struct.new_with_rtt $struct.recursive ;; The inner allocation should not prevent the outer one from being ;; optimized through some form of confusion. ;; After the outer one is optimized, the inner one can be optimized in ;; principle, as it can be seen to no longer escape. However, we depend ;; on other optimizations to actually remove the outer allocation (like ;; vacuum), and so it cannot be optimized. If we ran vaccum, and then ;; additional iterations, this might be handled. (struct.new_default_with_rtt $struct.recursive (rtt.canon $struct.recursive) ) (rtt.canon $struct.recursive) ) ) (drop (struct.get $struct.recursive 0 (local.get $0) ) ) ) ;; CHECK: (func $escape-flow-out (result anyref) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (struct.set $struct.A 0 ;; CHECK-NEXT: (local.tee $ref ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; NOMNL: (func $escape-flow-out (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (struct.set $struct.A 0 ;; NOMNL-NEXT: (local.tee $ref ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) (func $escape-flow-out (result anyref) (local $ref (ref null $struct.A)) (struct.set $struct.A 0 (local.tee $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (i32.const 1) ) ;; The allocation escapes out to the caller by flowing out. (local.get $ref) ) ;; CHECK: (func $escape-return (result anyref) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (struct.set $struct.A 0 ;; CHECK-NEXT: (local.tee $ref ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $escape-return (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (struct.set $struct.A 0 ;; NOMNL-NEXT: (local.tee $ref ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $escape-return (result anyref) (local $ref (ref null $struct.A)) (struct.set $struct.A 0 (local.tee $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (i32.const 1) ) ;; The allocation escapes out to the caller by a return. (return (local.get $ref) ) ) ;; CHECK: (func $non-nullable (param $a (ref $struct.A)) ;; CHECK-NEXT: (local $1 (ref null $struct.A)) ;; CHECK-NEXT: (local $2 (ref null $struct.A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $struct.A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.nonnullable)) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.nonnullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.nonnullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $non-nullable (type $ref|$struct.A|_=>_none) (param $a (ref $struct.A)) ;; NOMNL-NEXT: (local $1 (ref null $struct.A)) ;; NOMNL-NEXT: (local $2 (ref null $struct.A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $struct.A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.nonnullable)) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (local.get $a) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.nonnullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.nonnullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $non-nullable (param $a (ref $struct.A)) (drop ;; An optimizable case where the type is non-nullable, which requires ;; special handling in locals. (struct.get $struct.nonnullable 0 (struct.new_with_rtt $struct.nonnullable (local.get $a) (rtt.canon $struct.nonnullable) ) ) ) ) ;; CHECK: (func $before-loop-use-multi (param $x i32) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 f64) ;; CHECK-NEXT: (loop $outer ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (f64.const 2.1828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (f64.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $inner ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $inner ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $outer) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $before-loop-use-multi (type $i32_=>_none) (param $x i32) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $2 i32) ;; NOMNL-NEXT: (local $3 f64) ;; NOMNL-NEXT: (local $4 i32) ;; NOMNL-NEXT: (local $5 f64) ;; NOMNL-NEXT: (loop $outer ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $4 ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $5 ;; NOMNL-NEXT: (f64.const 2.1828) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (local.get $4) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (local.get $5) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (f64.const 42) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (loop $inner ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (i32.add ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br_if $inner ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br $outer) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $before-loop-use-multi (param $x i32) (local $ref (ref null $struct.A)) ;; Allocate in a loop, and use that allocation multiple times in that loop ;; in various ways inside. (loop $outer (local.set $ref (struct.new_with_rtt $struct.A (i32.const 2) (f64.const 2.1828) (rtt.canon $struct.A) ) ) (drop (struct.get $struct.A 0 (local.get $ref) ) ) (if (local.get $x) (drop (struct.get $struct.A 1 (local.get $ref) ) ) (struct.set $struct.A 1 (local.get $ref) (f64.const 42) ) ) (loop $inner (struct.set $struct.A 0 (local.get $ref) (i32.add (struct.get $struct.A 0 (local.get $ref) ) (i32.const 1) ) ) (br_if $inner (local.get $x) ) ) (if (local.get $x) (drop (struct.get $struct.A 0 (local.get $ref) ) ) (drop (struct.get $struct.A 1 (local.get $ref) ) ) ) (br $outer) ) ) ;; CHECK: (func $multi-separate ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $multi-separate (type $none_=>_none) ;; NOMNL-NEXT: (local $0 i32) ;; NOMNL-NEXT: (local $1 f64) ;; NOMNL-NEXT: (local $2 i32) ;; NOMNL-NEXT: (local $3 f64) ;; NOMNL-NEXT: (local $4 i32) ;; NOMNL-NEXT: (local $5 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $4 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $5 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $5) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $multi-separate ;; Multiple independent things we can optimize. (drop (struct.get $struct.A 0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) (drop (struct.get $struct.A 0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) (drop (struct.get $struct.A 1 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) ) ;; CHECK: (func $multi-separate-same-local-index ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $multi-separate-same-local-index (type $none_=>_none) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (local $3 i32) ;; NOMNL-NEXT: (local $4 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $4 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $multi-separate-same-local-index (local $ref (ref null $struct.A)) ;; Multiple independent things we can optimize that use the same local ;; index, but they do not conflict in their live ranges. (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (drop (struct.get $struct.A 0 (local.get $ref) ) ) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (drop (struct.get $struct.A 0 (local.get $ref) ) ) ) ;; CHECK: (func $multi-separate-different-local-index-overlapping-lifetimes ;; CHECK-NEXT: (local $ref1 (ref null $struct.A)) ;; CHECK-NEXT: (local $ref2 (ref null $struct.A)) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $multi-separate-different-local-index-overlapping-lifetimes (type $none_=>_none) ;; NOMNL-NEXT: (local $ref1 (ref null $struct.A)) ;; NOMNL-NEXT: (local $ref2 (ref null $struct.A)) ;; NOMNL-NEXT: (local $2 i32) ;; NOMNL-NEXT: (local $3 f64) ;; NOMNL-NEXT: (local $4 i32) ;; NOMNL-NEXT: (local $5 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $4 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $5 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $4) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $multi-separate-different-local-index-overlapping-lifetimes (local $ref1 (ref null $struct.A)) (local $ref2 (ref null $struct.A)) ;; Multiple independent things we can optimize that use different local ;; indexes, but whose lifetimes overlap. We should not be confused by that. (local.set $ref1 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (local.set $ref2 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (drop (struct.get $struct.A 0 (local.get $ref1) ) ) (drop (struct.get $struct.A 0 (local.get $ref2) ) ) ) ;; CHECK: (func $get-through-block (result f64) ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (block $block (result (ref null $struct.A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $get-through-block (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $0 (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (block $block (result (ref null $struct.A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $get-through-block (result f64) (local $0 (ref null $struct.A)) (local.set $0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (struct.get $struct.A 1 (block $block (result (ref null $struct.A)) (drop ;; A branch to the block. This ensures its name is not removable. And ;; it indicates that the block does not have a single value that ;; flows out, which means we do not have exclusive use of the ;; allocation on this path, and must give up. (br_if $block (ref.null $struct.A) (i32.const 0) ) ) (local.get $0) ) ) ) ;; CHECK: (func $branch-to-block (result f64) ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (block $block (result (ref null $struct.A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $branch-to-block (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $0 (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (block $block (result (ref null $struct.A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $branch-to-block (result f64) (local $0 (ref null $struct.A)) (local.set $0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (struct.get $struct.A 1 (block $block (result (ref null $struct.A)) (drop ;; A branch to the block of our allocation. However, there is also ;; a fallthrough value as well, so we must give up. (br_if $block (local.get $0) (i32.const 0) ) ) (ref.null $struct.A) ) ) ) ;; CHECK: (func $branch-to-block-no-fallthrough (result f64) ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block (result (ref null $struct.A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (f64.const 2.1828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $branch-to-block-no-fallthrough (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $0 (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block $block (result (ref null $struct.A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (f64.const 2.1828) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $branch-to-block-no-fallthrough (result f64) (local $0 (ref null $struct.A)) (local.set $0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (struct.get $struct.A 1 (block $block (result (ref null $struct.A)) (drop ;; A branch to the block of our allocation. In this case there is no ;; other value reaching the block, and so our branch is the sole value ;; which means there is no mixing, and we can optimize this. (br_if $block (local.get $0) (i32.const 0) ) ) (return (f64.const 2.1828)) ) ) ) ;; CHECK: (func $two-branches (result f64) ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (block $block (result (ref null $struct.A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (f64.const 2.1828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $two-branches (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $0 (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (block $block (result (ref null $struct.A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (f64.const 2.1828) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $two-branches (result f64) (local $0 (ref null $struct.A)) (local.set $0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (struct.get $struct.A 1 (block $block (result (ref null $struct.A)) (drop ;; A branch to the block of our allocation. (br_if $block (local.get $0) (i32.const 0) ) ) (drop ;; Another branch, causing mixing that prevents optimizations. (br_if $block (ref.null $struct.A) (i32.const 0) ) ) (return (f64.const 2.1828)) ) ) ) ;; CHECK: (func $two-branches-b (result f64) ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (block $block (result (ref null $struct.A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (f64.const 2.1828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $two-branches-b (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $0 (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (block $block (result (ref null $struct.A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (f64.const 2.1828) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $two-branches-b (result f64) (local $0 (ref null $struct.A)) (local.set $0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (struct.get $struct.A 1 (block $block (result (ref null $struct.A)) (drop (br_if $block (local.get $0) (i32.const 0) ) ) (drop ;; As in $two-branches, but the value here is our allocation, the same ;; as in the first branch above us. We do not yet optimize such merges ;; of our allocation, but we could in the future. (br_if $block (local.get $0) (i32.const 0) ) ) (return (f64.const 2.1828)) ) ) ) ;; CHECK: (func $br_if_flow (result f64) ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (struct.new_default_with_rtt $struct.A ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 ;; CHECK-NEXT: (block $block (result (ref null $struct.A)) ;; CHECK-NEXT: (call $send-ref ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (f64.const 2.1828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $br_if_flow (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $0 (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct.A ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct.A 1 ;; NOMNL-NEXT: (block $block (result (ref null $struct.A)) ;; NOMNL-NEXT: (call $send-ref ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (f64.const 2.1828) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $br_if_flow (result f64) (local $0 (ref null $struct.A)) (local.set $0 (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (struct.get $struct.A 1 (block $block (result (ref null $struct.A)) ;; If it were not for the call here then we would be able to optimize ;; the allocation in this function. (The branch with the allocation is ;; ok, but the br_if also flows the value into a call, that escapes it.) (call $send-ref (br_if $block (local.get $0) (i32.const 0) ) ) (return (f64.const 2.1828)) ) ) ) ;; CHECK: (func $ref-as-non-null ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-as-non-null (type $none_=>_none) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.null any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-as-non-null (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) (struct.set $struct.A 0 ;; We can see that the input to this RefAsNonNull is always non-null, as ;; it is our allocation, and so it does not prevent us from optimizing ;; here. (ref.as_non_null (local.get $ref) ) (i32.const 1) ) ;; Another RefAsNonNull, to check we do not modify irrelevant ones. (drop (ref.as_non_null (ref.null any) ) ) ) ;; CHECK: (func $ref-as-non-null-through-local (result i32) ;; CHECK-NEXT: (local $ref (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-as-non-null-through-local (type $none_=>_i32) (result i32) ;; NOMNL-NEXT: (local $ref (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-as-non-null-through-local (result i32) (local $ref (ref null $struct.A)) (local.set $ref (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ;; Copy the allocation through a ref.as_non_null. This must not trap: it may ;; trap if we leave the ref.as_non_null there and also we do not assign ;; anything to the local (if we skip assignments to the local when we ;; optimize). To avoid that, we should remove the ref.as_non_null, which is ;; safe since we know our allocation is passed into it, which is not null, ;; and will not trap. (local.set $ref (ref.as_non_null (local.get $ref) ) ) (struct.get $struct.A 0 (local.get $ref) ) ) ;; CHECK: (func $br_if-allocation (result f64) ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block (result (ref null $struct.A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f64.const 13.37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (f64.const 2.1828) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; NOMNL: (func $br_if-allocation (type $none_=>_f64) (result f64) ;; NOMNL-NEXT: (local $0 (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (local $3 i32) ;; NOMNL-NEXT: (local $4 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block $block (result (ref null $struct.A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_if $block ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $3 ;; NOMNL-NEXT: (i32.const 42) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $4 ;; NOMNL-NEXT: (f64.const 13.37) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (local.get $3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (local.get $4) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (return ;; NOMNL-NEXT: (f64.const 2.1828) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) (func $br_if-allocation (result f64) (local $0 (ref null $struct.A)) (struct.get $struct.A 1 (block $block (result (ref null $struct.A)) (drop ;; Our allocation flows into a br_if, which therefore has non-nullable ;; type, which we must update after optimizing. (br_if $block (struct.new_with_rtt $struct.A (i32.const 42) (f64.const 13.37) (rtt.canon $struct.A) ) (i32.const 0) ) ) (return (f64.const 2.1828)) ) ) ) ;; CHECK: (func $simple-no-rtt ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $simple-no-rtt (type $none_=>_none) ;; NOMNL-NEXT: (local $0 i32) ;; NOMNL-NEXT: (local $1 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $simple-no-rtt (drop ;; This allocation has no rtt, so we have nothing to drop from it when ;; we optimize. (struct.new_default $struct.A) ) ) ;; CHECK: (func $pass-through-loop ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (loop $loop (result (ref null $struct.A)) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $pass-through-loop (type $none_=>_none) ;; NOMNL-NEXT: (local $0 (ref null $struct.A)) ;; NOMNL-NEXT: (local $1 i32) ;; NOMNL-NEXT: (local $2 f64) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (loop $loop (result (ref null $struct.A)) ;; NOMNL-NEXT: (br_if $loop ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result (ref null $struct.A)) ;; NOMNL-NEXT: (local.set $1 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (f64.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $struct.A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $pass-through-loop (local $0 (ref null $struct.A)) ;; The allocation pass through a loop, which should change type to be ;; nullable. (drop (loop $loop (result (ref $struct.A)) ;; Include a branch to the loop, so that the testcase does not become ;; trivial (remove-unused-names will turn a loop with no name into a ;; block). (br_if $loop (i32.const 0)) ;; The allocation that will be turned into locals. (struct.new_default_with_rtt $struct.A (rtt.canon $struct.A) ) ) ) ) ) binaryen-version_108/test/lit/passes/inline-main.wast000066400000000000000000000074461423707623100231250ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --inline-main -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (export "main" (func $main)) (export "main" (func $main)) ;; CHECK: (func $__original_main (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $__original_main (result i32) (i32.const 0) ) ;; CHECK: (func $main (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (block $__inlined_func$__original_main (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (export "main" (func $main)) (export "main" (func $main)) ;; CHECK: (func $__original_main (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $__original_main (result i32) (i32.const 0) ) ;; CHECK: (func $main (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $main (param $0 i32) (param $1 i32) (result i32) (i32.const 0) ) ) (module ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (export "main" (func $main)) (export "main" (func $main)) ;; CHECK: (func $main (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $main (param $0 i32) (param $1 i32) (result i32) (i32.const 0) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (export "main" (func $main)) (export "main" (func $main)) ;; CHECK: (func $__original_main (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $__original_main (result i32) (i32.const 0) ) ;; CHECK: (func $main (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $__original_main) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $__original_main) ;; CHECK-NEXT: ) (func $main (param $0 i32) (param $1 i32) (result i32) (drop (call $__original_main)) (call $__original_main) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (func $__original_main (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $__original_main (result i32) (i32.const 0) ) ) (module ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (import "env" "main" (func $main (param i32 i32) (result i32))) (import "env" "main" (func $main (param i32 i32) (result i32))) ;; CHECK: (export "main" (func $main)) (export "main" (func $main)) ;; CHECK: (func $__original_main (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $__original_main (result i32) (i32.const 0) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (import "env" "original_main" (func $__original_main (result i32))) (import "env" "original_main" (func $__original_main (result i32))) ;; CHECK: (export "main" (func $main)) (export "main" (func $main)) ;; CHECK: (func $main (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (call $__original_main) ;; CHECK-NEXT: ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) binaryen-version_108/test/lit/passes/inlining-eh.wast000066400000000000000000000076121423707623100231210ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --inlining -all -S -o - | filecheck %s (module ;; --------------------------------------------------------------------------- ;; CHECK: (import "a" "b" (func $foo (result i32))) (import "a" "b" (func $foo (result i32))) ;; CHECK: (tag $tag$0 (param i32)) (tag $tag$0 (param i32)) (func $callee-with-label (try $label (do) (catch $tag$0 (drop (pop i32) ) ) ) ) ;; Properly ensure unique try labels after an inlining ;; CHECK: (func $caller-with-label (param $x i32) ;; CHECK-NEXT: (loop $label ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$callee-with-label ;; CHECK-NEXT: (try $label0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tag$0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller-with-label (param $x i32) (loop $label ;; The same label as the try that will be inlined into here (call $callee-with-label) (br_if $label (call $foo) ) ) ) ;; --------------------------------------------------------------------------- ;; CHECK: (func $callee-with-try-delegate ;; CHECK-NEXT: (try $label$3 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $callee-with-try-delegate (try $label$3 (do) (delegate 0) ) ) ;; For now, do not inline a try-delegate ;; CHECK: (func $caller ;; CHECK-NEXT: (call $callee-with-try-delegate) ;; CHECK-NEXT: ) (func $caller (call $callee-with-try-delegate) ) ;; --------------------------------------------------------------------------- (func $callee-a (result i32) (i32.const 42) ) ;; Properly support inlining into a function with a try-delegate ;; CHECK: (func $caller-with-try-delegate (result i32) ;; CHECK-NEXT: (try $label$3 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$callee-a (result i32) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller-with-try-delegate (result i32) (try $label$3 (do) (delegate 0) ) (call $callee-a) ) ;; --------------------------------------------------------------------------- (func $callee-b (param i32)) ;; CHECK: (func $caller-with-pop ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tag$0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$callee-b ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller-with-pop (try (do) (catch $tag$0 ;; After this $callee-b is inlined, there will be additional 'block's ;; surrouding this 'pop', which makes its location invalid. We fix it by ;; creating a new local to set the result of 'pop' and later use ;; local.get to get the value within the inlined function body. (call $callee-b (pop i32) ) ) ) ) ) binaryen-version_108/test/lit/passes/inlining-gc.wast000066400000000000000000000031061423707623100231100ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --inlining --enable-gc-nn-locals -all -S -o - | filecheck %s (module ;; CHECK: (func $caller-nullable ;; CHECK-NEXT: (local $0 funcref) ;; CHECK-NEXT: (block $__inlined_func$target-nullable ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller-nullable ;; Call a function with a nullable local. After the inlining there will ;; be a new local in this function for the use of the inlined code, and also ;; we assign the null value to that local in the inlined block (which does ;; not matter much here, but in general if we had a loop that the inlined ;; block was inside of, that would be important to get the right behavior). (call $target-nullable) ) (func $target-nullable (local $1 (ref null func)) ) ;; CHECK: (func $caller-non-nullable ;; CHECK-NEXT: (local $0 (ref func)) ;; CHECK-NEXT: (block $__inlined_func$target-non-nullable ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller-non-nullable ;; Call a function with a non-nullable local. After the inlining there will ;; be a new local in this function for the use of the inlined code. We do not ;; need to zero it out (such locals cannot be used before being set anyhow, so ;; no zero is needed; and we cannot set a zero anyhow as none exists for the ;; type). (call $target-non-nullable) ) (func $target-non-nullable (local $1 (ref func)) ) ) binaryen-version_108/test/lit/passes/inlining-optimizing.wast000066400000000000000000000023221423707623100247070ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --inlining-optimizing -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) ;; CHECK: (func $0 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $0 (nop) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $1 ;; $0 will be inlined into here. We will then optimize this function - but ;; we do so *without* optimizing $0 (as inlining-optimizing only optimizes ;; where it inlines, for efficiency). As part of the optimiziations, we will ;; try to precompute the cast here, which will try to look up $0. We should ;; not hit an assertion, rather we should skip precomputing it, the same as if ;; we were optimizing $1 before $0 were added to the module. (In fact, we will ;; be able to see that the cast cannot succeed, and will optimize it into an ;; unreachable.) (call $0) (drop (call_ref (ref.cast (ref.func $0) (rtt.canon $none_=>_i32) ) ) ) ) ) binaryen-version_108/test/lit/passes/inlining-optimizing_enable-threads.wast000066400000000000000000000132331423707623100276500ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --inlining-optimizing --enable-threads -S -o - | filecheck %s (module (table 1 1 funcref) (elem (i32.const 0) $tabled) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (table $0 1 1 funcref) ;; CHECK: (elem (i32.const 0) $tabled) ;; CHECK: (export "user" (func $user)) ;; CHECK: (export "exported" (func $exported)) ;; CHECK: (export "exported_small" (func $exported_small)) ;; CHECK: (func $user ;; CHECK-NEXT: (call $exported) ;; CHECK-NEXT: (call $tabled) ;; CHECK-NEXT: (call $multi) ;; CHECK-NEXT: (call $multi) ;; CHECK-NEXT: ) (func $user (export "user") (local $x i32) (local $y f64) (call $exported) (call $exported_small) (call $tabled) (call $tabled_small) (call $multi) (call $multi) (call $multi_small) (call $multi_small) (call $ok) (drop (call $int)) (drop (call $double)) (local.set $x (call $int2)) (local.set $y (call $double2)) (call $with-local) (call $with-local2) (drop (call $return)) (call $multipass) (call $param (f32.const 12.34) (i64.const 890005350012)) ) ;; CHECK: (func $exported ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $exported (export "exported") (nop) (nop) ) ;; CHECK: (func $exported_small ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $exported_small (export "exported_small") (nop) ) ;; CHECK: (func $recursive ;; CHECK-NEXT: (call $recursive) ;; CHECK-NEXT: ) (func $recursive (call $recursive) ) ;; CHECK: (func $tabled ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $tabled (nop) (nop) ) (func $tabled_small (nop) ) ;; CHECK: (func $cycle1 ;; CHECK-NEXT: (call $cycle1) ;; CHECK-NEXT: ) (func $cycle1 (call $cycle2) ) (func $cycle2 (call $cycle1) ) ;; CHECK: (func $multi ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $multi (nop) (nop) ) (func $multi_small (nop) ) (func $ok (drop (i32.const 1)) ) (func $int (result i32) (i32.const 2) ) (func $double (result f64) (f64.const 3.14159) ) (func $int2 (result i32) (i32.const 112) ) (func $double2 (result f64) (f64.const 113.14159) ) (func $with-local (local $x f32) (local.set $x (f32.const 2.141828)) ) (func $with-local2 (local $y i64) (local.set $y (i64.const 4)) ) (func $return (result i32) (return (i32.const 5)) ) (func $multipass (call $multipass2) ) (func $multipass2 (drop (i32.const 6)) ) (func $param (param $x f32) (param $y i64) (local $z f32) (drop (local.get $x)) (drop (local.get $y)) (drop (local.get $z)) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (func $main (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $main (result i32) (call $func_51) (i32.const 0) ) (func $func_51 (unreachable) ;; void function but having unreachable body, when inlined, type must be fixed ) ) (module ;; CHECK: (type $none_=>_i64 (func (result i64))) ;; CHECK: (memory $0 (shared 1 1)) (memory $0 (shared 1 1)) (func $0 (result i32) (i32.atomic.store16 (i32.const 0) (i32.const 0) ) (i32.const 1) ) ;; CHECK: (func $1 (result i64) ;; CHECK-NEXT: (i32.atomic.store16 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) (func $1 (result i64) (drop (call $0) ) (i64.const 0) ) ) ;; potential infinite recursion (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $main ;; CHECK-NEXT: (call $one) ;; CHECK-NEXT: (call $one) ;; CHECK-NEXT: ) (func $main (call $one) (call $one) ) ;; CHECK: (func $one ;; CHECK-NEXT: (call $one) ;; CHECK-NEXT: ) (func $one (call $one) ) ) ;; potential infinite cycling recursion (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $main ;; CHECK-NEXT: (call $two) ;; CHECK-NEXT: (call $two) ;; CHECK-NEXT: ) (func $main (call $one) (call $one) ) (func $one (call $two) ) ;; CHECK: (func $two ;; CHECK-NEXT: (call $two) ;; CHECK-NEXT: ) (func $two (call $one) ) ) ;; make sure to dce, as we may be combining unreachable code with others (module ;; CHECK: (type $0 (func)) (type $0 (func)) (type $1 (func (param i32 i32) (result i32))) (table 89 89 funcref) ;; CHECK: (memory $0 17) (memory $0 17) ;; CHECK: (table $0 89 89 funcref) ;; CHECK: (start $1) (start $1) (func $0 (; 0 ;) (type $1) (param $0 i32) (param $1 i32) (result i32) (i32.store (i32.const 4) (local.tee $0 (i32.const 0) ) ) (i32.store (i32.add (local.get $0) (i32.const 56) ) (i32.const 0) ) (i64.store (i32.const 49) (i64.load (i32.const 24) ) ) (unreachable) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 56) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.const 49) ;; CHECK-NEXT: (i64.load ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $1 (; 1 ;) (type $0) (drop (call $0 (i32.const 0) (i32.const 0) ) ) ) ) binaryen-version_108/test/lit/passes/inlining-optimizing_optimize-level=3.wast000066400000000000000000040776721423707623100301440ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --inlining-optimizing --optimize-level=3 -S -o - | filecheck %s ;; similar to test/emcc_hello_world.fromasm.clamp ;; (module ;; CHECK: (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) ;; CHECK: (type $FUNCSIG$vi (func (param i32))) ;; CHECK: (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$vi (func (param i32))) ;; CHECK: (type $FUNCSIG$iii (func (param i32 i32) (result i32))) ;; CHECK: (type $FUNCSIG$i (func (result i32))) ;; CHECK: (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) ;; CHECK: (type $FUNCSIG$vii (func (param i32 i32))) ;; CHECK: (type $FUNCSIG$v (func)) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$vii (func (param i32 i32))) ;; CHECK: (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) ;; CHECK: (type $f64_i32_=>_f64 (func (param f64 i32) (result f64))) ;; CHECK: (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) ;; CHECK: (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32))) ;; CHECK: (import "env" "memory" (memory $0 256 256)) (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) ;; CHECK: (data (i32.const 1024) "emcc_hello_world.asm.js") ;; CHECK: (import "env" "table" (table $timport$0 18 18 funcref)) (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) ;; CHECK: (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) ;; CHECK: (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) (import "env" "abort" (func $abort)) ;; CHECK: (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32)) (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) ;; CHECK: (import "env" "tableBase" (global $tableBase i32)) (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) ;; CHECK: (import "env" "abort" (func $abort)) (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) ;; CHECK: (import "env" "nullFunc_ii" (func $nullFunc_ii (param i32))) (import "env" "___lock" (func $___lock (param i32))) ;; CHECK: (import "env" "nullFunc_iiii" (func $nullFunc_iiii (param i32))) (import "env" "_pthread_self" (func $_pthread_self (result i32))) ;; CHECK: (import "env" "nullFunc_vi" (func $nullFunc_vi (param i32))) (import "env" "_abort" (func $_abort)) ;; CHECK: (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) ;; CHECK: (import "env" "___lock" (func $___lock (param i32))) (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) ;; CHECK: (import "env" "_pthread_self" (func $_pthread_self (result i32))) (import "env" "_time" (func $_time (param i32) (result i32))) ;; CHECK: (import "env" "_abort" (func $_abort)) (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) ;; CHECK: (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) ;; CHECK: (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) (import "env" "___unlock" (func $___unlock (param i32))) ;; CHECK: (import "env" "_time" (func $_time (param i32) (result i32))) (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) ;; CHECK: (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) ;; CHECK: (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) ;; CHECK: (import "env" "___unlock" (func $___unlock (param i32))) (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) ;; CHECK: (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) (import "env" "memory" (memory $0 256 256)) ;; CHECK: (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) (import "env" "table" (table 18 18 funcref)) ;; CHECK: (import "env" "_sysconf" (func $_sysconf (param i32) (result i32))) (import "env" "memoryBase" (global $memoryBase i32)) ;; CHECK: (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) (import "env" "tableBase" (global $tableBase i32)) ;; CHECK: (global $STACKTOP (mut i32) (global.get $STACKTOP$asm2wasm$import)) (global $STACKTOP (mut i32) (global.get $STACKTOP$asm2wasm$import)) ;; CHECK: (global $STACK_MAX (mut i32) (global.get $STACK_MAX$asm2wasm$import)) (global $STACK_MAX (mut i32) (global.get $STACK_MAX$asm2wasm$import)) ;; CHECK: (global $tempDoublePtr (mut i32) (global.get $tempDoublePtr$asm2wasm$import)) (global $tempDoublePtr (mut i32) (global.get $tempDoublePtr$asm2wasm$import)) ;; CHECK: (global $__THREW__ (mut i32) (i32.const 0)) (global $__THREW__ (mut i32) (i32.const 0)) ;; CHECK: (global $threwValue (mut i32) (i32.const 0)) (global $threwValue (mut i32) (i32.const 0)) ;; CHECK: (global $tempRet0 (mut i32) (i32.const 0)) (global $tempRet0 (mut i32) (i32.const 0)) (elem (global.get $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) (data (i32.const 1024) "emcc_hello_world.asm.js") ;; CHECK: (elem (global.get $tableBase) $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) ;; CHECK: (export "_i64Subtract" (func $_i64Subtract)) (export "_i64Subtract" (func $_i64Subtract)) ;; CHECK: (export "_free" (func $_free)) (export "_free" (func $_free)) ;; CHECK: (export "_main" (func $_main)) (export "_main" (func $_main)) ;; CHECK: (export "_i64Add" (func $_i64Add)) (export "_i64Add" (func $_i64Add)) ;; CHECK: (export "_memset" (func $_memset)) (export "_memset" (func $_memset)) ;; CHECK: (export "_malloc" (func $_malloc)) (export "_malloc" (func $_malloc)) ;; CHECK: (export "_memcpy" (func $_memcpy)) (export "_memcpy" (func $_memcpy)) ;; CHECK: (export "_bitshift64Lshr" (func $_bitshift64Lshr)) (export "_bitshift64Lshr" (func $_bitshift64Lshr)) ;; CHECK: (export "_fflush" (func $_fflush)) (export "_fflush" (func $_fflush)) ;; CHECK: (export "___errno_location" (func $___errno_location)) (export "___errno_location" (func $___errno_location)) ;; CHECK: (export "_bitshift64Shl" (func $_bitshift64Shl)) (export "_bitshift64Shl" (func $_bitshift64Shl)) ;; CHECK: (export "runPostSets" (func $runPostSets)) (export "runPostSets" (func $runPostSets)) ;; CHECK: (export "stackAlloc" (func $stackAlloc)) (export "stackAlloc" (func $stackAlloc)) ;; CHECK: (export "stackSave" (func $stackSave)) (export "stackSave" (func $stackSave)) ;; CHECK: (export "stackRestore" (func $stackRestore)) (export "stackRestore" (func $stackRestore)) ;; CHECK: (export "establishStackSpace" (func $establishStackSpace)) (export "establishStackSpace" (func $establishStackSpace)) ;; CHECK: (export "setThrew" (func $setThrew)) (export "setThrew" (func $setThrew)) ;; CHECK: (export "setTempRet0" (func $setTempRet0)) (export "setTempRet0" (func $setTempRet0)) ;; CHECK: (export "getTempRet0" (func $getTempRet0)) (export "getTempRet0" (func $getTempRet0)) ;; CHECK: (export "dynCall_ii" (func $dynCall_ii)) (export "dynCall_ii" (func $dynCall_ii)) ;; CHECK: (export "dynCall_iiii" (func $dynCall_iiii)) (export "dynCall_iiii" (func $dynCall_iiii)) ;; CHECK: (export "dynCall_vi" (func $dynCall_vi)) (export "dynCall_vi" (func $dynCall_vi)) ;; CHECK: (export "___udivmoddi4" (func $___udivmoddi4)) (export "___udivmoddi4" (func $___udivmoddi4)) ;; CHECK: (func $stackAlloc (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) (func $stackAlloc (param $0 i32) (result i32) (local $1 i32) (local.set $1 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (local.get $0) ) ) (global.set $STACKTOP (i32.and (i32.add (global.get $STACKTOP) (i32.const 15) ) (i32.const -16) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (local.get $1) ) ;; CHECK: (func $stackSave (result i32) ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) (func $stackSave (result i32) (global.get $STACKTOP) ) ;; CHECK: (func $stackRestore (param $0 i32) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $stackRestore (param $0 i32) (global.set $STACKTOP (local.get $0) ) ) ;; CHECK: (func $establishStackSpace (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACK_MAX ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $establishStackSpace (param $0 i32) (param $1 i32) (global.set $STACKTOP (local.get $0) ) (global.set $STACK_MAX (local.get $1) ) ) ;; CHECK: (func $setThrew (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__THREW__) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (global.set $__THREW__ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $threwValue ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $setThrew (param $0 i32) (param $1 i32) (if (i32.eqz (global.get $__THREW__) ) (block (global.set $__THREW__ (local.get $0) ) (global.set $threwValue (local.get $1) ) ) ) ) ;; CHECK: (func $setTempRet0 (param $0 i32) ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $setTempRet0 (param $0 i32) (global.set $tempRet0 (local.get $0) ) ) ;; CHECK: (func $getTempRet0 (result i32) ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) (func $getTempRet0 (result i32) (global.get $tempRet0) ) ;; CHECK: (func $_main (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 224) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 120) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 136) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 80) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $do-in ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-in ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (call $_printf_core ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 672) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=76 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (i32.load8_s offset=74 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const -33) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $_printf_core ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 672) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 80) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $13 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 80) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (call $_printf_core ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 672) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=36 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $_main (result i32) (local $0 i32) (local.set $0 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 16) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (drop (call $_printf (i32.const 672) (local.get $0) ) ) (global.set $STACKTOP (local.get $0) ) (i32.const 0) ) ;; CHECK: (func $_frexp (param $0 f64) (param $1 i32) (result f64) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (global.get $tempDoublePtr) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $switch ;; CHECK-NEXT: (block $switch-default ;; CHECK-NEXT: (block $switch-case0 ;; CHECK-NEXT: (block $switch-case ;; CHECK-NEXT: (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (call $_bitshift64Lshr ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (global.get $tempDoublePtr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (global.get $tempDoublePtr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 52) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2047) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $_frexp ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.const 18446744073709551615) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $switch) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $switch) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const -1022) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $tempDoublePtr) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (global.get $tempDoublePtr) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const -2146435073) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1071644672) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (global.get $tempDoublePtr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $_frexp (param $0 f64) (param $1 i32) (result f64) (local $2 i32) (local $3 i32) (local $4 i32) (f64.store (global.get $tempDoublePtr) (local.get $0) ) (block $switch (block $switch-default (block $switch-case0 (block $switch-case (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default (local.tee $3 (i32.and (local.tee $3 (call $_bitshift64Lshr (local.tee $2 (i32.load (global.get $tempDoublePtr) ) ) (local.tee $4 (i32.load offset=4 (global.get $tempDoublePtr) ) ) (i32.const 52) ) ) (i32.const 2047) ) ) ) ) (i32.store (local.get $1) (local.tee $2 (if (result i32) (f64.ne (local.get $0) (f64.const 0) ) (block (result i32) (local.set $0 (call $_frexp (f64.mul (local.get $0) (f64.const 18446744073709551615) ) (local.get $1) ) ) (i32.add (i32.load (local.get $1) ) (i32.const -64) ) ) (i32.const 0) ) ) ) (br $switch) ) (br $switch) ) (i32.store (local.get $1) (i32.add (local.get $3) (i32.const -1022) ) ) (i32.store (global.get $tempDoublePtr) (local.get $2) ) (i32.store offset=4 (global.get $tempDoublePtr) (i32.or (i32.and (local.get $4) (i32.const -2146435073) ) (i32.const 1071644672) ) ) (local.set $0 (f64.load (global.get $tempDoublePtr) ) ) ) (local.get $0) ) (func $_strerror (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local.set $1 (i32.const 0) ) (block $__rjto$1 (block $__rjti$1 (block $__rjti$0 (loop $while-in (br_if $__rjti$0 (i32.eq (i32.load8_u offset=687 (local.get $1) ) (local.get $0) ) ) (br_if $while-in (i32.ne (local.tee $1 (i32.add (local.get $1) (i32.const 1) ) ) (i32.const 87) ) ) (local.set $1 (i32.const 87) ) (br $__rjti$1) ) ) (br_if $__rjti$1 (local.get $1) ) (local.set $0 (i32.const 775) ) (br $__rjto$1) ) (local.set $0 (i32.const 775) ) (loop $while-in1 (loop $while-in3 (local.set $2 (i32.add (local.get $0) (i32.const 1) ) ) (if (i32.load8_s (local.get $0) ) (block (local.set $0 (local.get $2) ) (br $while-in3) ) (local.set $0 (local.get $2) ) ) ) (br_if $while-in1 (local.tee $1 (i32.add (local.get $1) (i32.const -1) ) ) ) ) ) (local.get $0) ) ;; CHECK: (func $___errno_location (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=60 ;; CHECK-NEXT: (call $_pthread_self) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 60) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $___errno_location (result i32) (if (result i32) (i32.load (i32.const 16) ) (i32.load offset=60 (call $_pthread_self) ) (i32.const 60) ) ) ;; CHECK: (func $___stdio_close (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=60 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $___syscall_ret ;; CHECK-NEXT: (call $___syscall6 ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $___stdio_close (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local.set $1 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 16) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (i32.store (local.tee $2 (local.get $1) ) (i32.load offset=60 (local.get $0) ) ) (local.set $0 (call $___syscall_ret (call $___syscall6 (i32.const 6) (local.get $2) ) ) ) (global.set $STACKTOP (local.get $1) ) (local.get $0) ) ;; CHECK: (func $___stdout_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (i32.const 80) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=36 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.load offset=60 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 21505) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $___syscall54 ;; CHECK-NEXT: (i32.const 54) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=75 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $___stdio_write ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $___stdout_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $4 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 80) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (local.set $3 (local.get $4) ) (local.set $5 (i32.add (local.get $4) (i32.const 12) ) ) (i32.store offset=36 (local.get $0) (i32.const 4) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 64) ) ) (block (i32.store (local.get $3) (i32.load offset=60 (local.get $0) ) ) (i32.store offset=4 (local.get $3) (i32.const 21505) ) (i32.store offset=8 (local.get $3) (local.get $5) ) (if (call $___syscall54 (i32.const 54) (local.get $3) ) (i32.store8 offset=75 (local.get $0) (i32.const -1) ) ) ) ) (local.set $0 (call $___stdio_write (local.get $0) (local.get $1) (local.get $2) ) ) (global.set $STACKTOP (local.get $4) ) (local.get $0) ) ;; CHECK: (func $___stdio_seek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=60 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (call $___syscall_ret ;; CHECK-NEXT: (call $___syscall140 ;; CHECK-NEXT: (i32.const 140) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $___stdio_seek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local.set $4 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 32) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (i32.store (local.tee $3 (local.get $4) ) (i32.load offset=60 (local.get $0) ) ) (i32.store offset=4 (local.get $3) (i32.const 0) ) (i32.store offset=8 (local.get $3) (local.get $1) ) (i32.store offset=12 (local.get $3) (local.tee $0 (i32.add (local.get $4) (i32.const 20) ) ) ) (i32.store offset=16 (local.get $3) (local.get $2) ) (local.set $0 (if (result i32) (i32.lt_s (call $___syscall_ret (call $___syscall140 (i32.const 140) (local.get $3) ) ) (i32.const 0) ) (block (result i32) (i32.store (local.get $0) (i32.const -1) ) (i32.const -1) ) (i32.load (local.get $0) ) ) ) (global.set $STACKTOP (local.get $4) ) (local.get $0) ) ;; CHECK: (func $_fflush (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $do-once (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.load offset=76 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once ;; CHECK-NEXT: (call $___fflush_unlocked ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (call $___fflush_unlocked ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_fflush ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $___lock ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=76 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.load offset=20 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=28 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $___fflush_unlocked ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=56 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $___unlock ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $_fflush (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (block $do-once (if (local.get $0) (block (if (i32.le_s (i32.load offset=76 (local.get $0) ) (i32.const -1) ) (block (local.set $0 (call $___fflush_unlocked (local.get $0) ) ) (br $do-once) ) ) (local.set $2 (i32.eqz (call $___lockfile (local.get $0) ) ) ) (local.set $1 (call $___fflush_unlocked (local.get $0) ) ) (local.set $0 (if (result i32) (local.get $2) (local.get $1) (block (result i32) (call $___unlockfile (local.get $0) ) (local.get $1) ) ) ) ) (block (local.set $0 (if (result i32) (i32.load (i32.const 12) ) (call $_fflush (i32.load (i32.const 12) ) ) (i32.const 0) ) ) (call $___lock (i32.const 44) ) (if (local.tee $1 (i32.load (i32.const 40) ) ) (loop $while-in (local.set $2 (if (result i32) (i32.gt_s (i32.load offset=76 (local.get $1) ) (i32.const -1) ) (call $___lockfile (local.get $1) ) (i32.const 0) ) ) (if (i32.gt_u (i32.load offset=20 (local.get $1) ) (i32.load offset=28 (local.get $1) ) ) (local.set $0 (i32.or (call $___fflush_unlocked (local.get $1) ) (local.get $0) ) ) ) (if (local.get $2) (call $___unlockfile (local.get $1) ) ) (br_if $while-in (local.tee $1 (i32.load offset=56 (local.get $1) ) ) ) ) ) (call $___unlock (i32.const 44) ) ) ) ) (local.get $0) ) (func $_printf (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local.set $2 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 16) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (i32.store (local.tee $3 (local.get $2) ) (local.get $1) ) (local.set $0 (call $_vfprintf (i32.load (i32.const 8) ) (local.get $0) (local.get $3) ) ) (global.set $STACKTOP (local.get $2) ) (local.get $0) ) (func $___lockfile (param $0 i32) (result i32) (i32.const 0) ) (func $___unlockfile (param $0 i32) (nop) ) ;; CHECK: (func $___stdio_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 60) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$1 ;; CHECK-NEXT: (block $__rjti$1 ;; CHECK-NEXT: (block $__rjti$0 ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (call $_pthread_cleanup_push ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $___syscall_ret ;; CHECK-NEXT: (call $___syscall146 ;; CHECK-NEXT: (i32.const 146) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pthread_cleanup_pop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block14 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $___syscall_ret ;; CHECK-NEXT: (call $___syscall146 ;; CHECK-NEXT: (i32.const 146) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$0 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$1 ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block16 (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block17 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block19 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=48 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) (func $___stdio_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local.set $8 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 48) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (local.set $9 (i32.add (local.get $8) (i32.const 16) ) ) (local.set $10 (local.get $8) ) (i32.store (local.tee $4 (i32.add (local.get $8) (i32.const 32) ) ) (local.tee $3 (i32.load (local.tee $6 (i32.add (local.get $0) (i32.const 28) ) ) ) ) ) (i32.store offset=4 (local.get $4) (local.tee $3 (i32.sub (i32.load (local.tee $11 (i32.add (local.get $0) (i32.const 20) ) ) ) (local.get $3) ) ) ) (i32.store offset=8 (local.get $4) (local.get $1) ) (i32.store offset=12 (local.get $4) (local.get $2) ) (local.set $13 (i32.add (local.get $0) (i32.const 60) ) ) (local.set $14 (i32.add (local.get $0) (i32.const 44) ) ) (local.set $1 (local.get $4) ) (local.set $4 (i32.const 2) ) (local.set $12 (i32.add (local.get $3) (local.get $2) ) ) (block $__rjto$1 (block $__rjti$1 (block $__rjti$0 (loop $while-in (if (i32.load (i32.const 16) ) (block (call $_pthread_cleanup_push (i32.const 5) (local.get $0) ) (i32.store (local.get $10) (i32.load (local.get $13) ) ) (i32.store offset=4 (local.get $10) (local.get $1) ) (i32.store offset=8 (local.get $10) (local.get $4) ) (local.set $3 (call $___syscall_ret (call $___syscall146 (i32.const 146) (local.get $10) ) ) ) (call $_pthread_cleanup_pop (i32.const 0) ) ) (block (i32.store (local.get $9) (i32.load (local.get $13) ) ) (i32.store offset=4 (local.get $9) (local.get $1) ) (i32.store offset=8 (local.get $9) (local.get $4) ) (local.set $3 (call $___syscall_ret (call $___syscall146 (i32.const 146) (local.get $9) ) ) ) ) ) (br_if $__rjti$0 (i32.eq (local.get $12) (local.get $3) ) ) (br_if $__rjti$1 (i32.lt_s (local.get $3) (i32.const 0) ) ) (local.set $5 (if (result i32) (i32.gt_u (local.get $3) (local.tee $5 (i32.load offset=4 (local.get $1) ) ) ) (block (result i32) (i32.store (local.get $6) (local.tee $7 (i32.load (local.get $14) ) ) ) (i32.store (local.get $11) (local.get $7) ) (local.set $7 (i32.load offset=12 (local.get $1) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 8) ) ) (local.set $4 (i32.add (local.get $4) (i32.const -1) ) ) (i32.sub (local.get $3) (local.get $5) ) ) (block (result i32) (if (i32.eq (local.get $4) (i32.const 2) ) (block (i32.store (local.get $6) (i32.add (i32.load (local.get $6) ) (local.get $3) ) ) (local.set $7 (local.get $5) ) (local.set $4 (i32.const 2) ) ) (local.set $7 (local.get $5) ) ) (local.get $3) ) ) ) (i32.store (local.get $1) (i32.add (i32.load (local.get $1) ) (local.get $5) ) ) (i32.store offset=4 (local.get $1) (i32.sub (local.get $7) (local.get $5) ) ) (local.set $12 (i32.sub (local.get $12) (local.get $3) ) ) (br $while-in) ) ) (i32.store offset=16 (local.get $0) (i32.add (local.tee $1 (i32.load (local.get $14) ) ) (i32.load offset=48 (local.get $0) ) ) ) (i32.store (local.get $6) (local.get $1) ) (i32.store (local.get $11) (local.get $1) ) (br $__rjto$1) ) (i32.store offset=16 (local.get $0) (i32.const 0) ) (i32.store (local.get $6) (i32.const 0) ) (i32.store (local.get $11) (i32.const 0) ) (i32.store (local.get $0) (i32.or (i32.load (local.get $0) ) (i32.const 32) ) ) (local.set $2 (if (result i32) (i32.eq (local.get $4) (i32.const 2) ) (i32.const 0) (i32.sub (local.get $2) (i32.load offset=4 (local.get $1) ) ) ) ) ) (global.set $STACKTOP (local.get $8) ) (local.get $2) ) (func $_vfprintf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local.set $4 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 224) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (local.set $5 (i32.add (local.get $4) (i32.const 120) ) ) (local.set $7 (local.get $4) ) (local.set $6 (i32.add (local.get $4) (i32.const 136) ) ) (local.set $9 (i32.add (local.tee $3 (local.tee $8 (i32.add (local.get $4) (i32.const 80) ) ) ) (i32.const 40) ) ) (loop $do-in (i32.store (local.get $3) (i32.const 0) ) (br_if $do-in (i32.lt_s (local.tee $3 (i32.add (local.get $3) (i32.const 4) ) ) (local.get $9) ) ) ) (i32.store (local.get $5) (i32.load (local.get $2) ) ) (local.set $0 (if (result i32) (i32.lt_s (call $_printf_core (i32.const 0) (local.get $1) (local.get $5) (local.get $7) (local.get $8) ) (i32.const 0) ) (i32.const -1) (block (result i32) (local.set $14 (if (result i32) (i32.gt_s (i32.load offset=76 (local.get $0) ) (i32.const -1) ) (call $___lockfile (local.get $0) ) (i32.const 0) ) ) (local.set $10 (i32.load (local.get $0) ) ) (if (i32.lt_s (i32.load8_s offset=74 (local.get $0) ) (i32.const 1) ) (i32.store (local.get $0) (i32.and (local.get $10) (i32.const -33) ) ) ) (if (i32.load (local.tee $11 (i32.add (local.get $0) (i32.const 48) ) ) ) (local.set $1 (call $_printf_core (local.get $0) (local.get $1) (local.get $5) (local.get $7) (local.get $8) ) ) (block (local.set $13 (i32.load (local.tee $12 (i32.add (local.get $0) (i32.const 44) ) ) ) ) (i32.store (local.get $12) (local.get $6) ) (i32.store (local.tee $9 (i32.add (local.get $0) (i32.const 28) ) ) (local.get $6) ) (i32.store (local.tee $3 (i32.add (local.get $0) (i32.const 20) ) ) (local.get $6) ) (i32.store (local.get $11) (i32.const 80) ) (i32.store (local.tee $2 (i32.add (local.get $0) (i32.const 16) ) ) (i32.add (local.get $6) (i32.const 80) ) ) (local.set $1 (call $_printf_core (local.get $0) (local.get $1) (local.get $5) (local.get $7) (local.get $8) ) ) (if (local.get $13) (block (drop (call_indirect (type $FUNCSIG$iiii) (local.get $0) (i32.const 0) (i32.const 0) (i32.add (i32.and (i32.load offset=36 (local.get $0) ) (i32.const 7) ) (i32.const 2) ) ) ) (local.set $1 (select (local.get $1) (i32.const -1) (i32.load (local.get $3) ) ) ) (i32.store (local.get $12) (local.get $13) ) (i32.store (local.get $11) (i32.const 0) ) (i32.store (local.get $2) (i32.const 0) ) (i32.store (local.get $9) (i32.const 0) ) (i32.store (local.get $3) (i32.const 0) ) ) ) ) ) (i32.store (local.get $0) (i32.or (local.tee $2 (i32.load (local.get $0) ) ) (i32.and (local.get $10) (i32.const 32) ) ) ) (if (local.get $14) (call $___unlockfile (local.get $0) ) ) (select (i32.const -1) (local.get $1) (i32.and (local.get $2) (i32.const 32) ) ) ) ) ) (global.set $STACKTOP (local.get $4) ) (local.get $0) ) ;; CHECK: (func $___fwritex (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (block $label$break$L5 ;; CHECK-NEXT: (block $__rjti$0 ;; CHECK-NEXT: (br_if $__rjti$0 ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 74) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=28 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load offset=44 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.load offset=48 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=36 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (i32.load8_s offset=75 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$break$L10 (result i32) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $label$break$L10 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$break$L5 ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=36 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $_memcpy ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) (func $___fwritex (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (block $label$break$L5 (block $__rjti$0 (br_if $__rjti$0 (local.tee $3 (i32.load (local.tee $4 (i32.add (local.get $2) (i32.const 16) ) ) ) ) ) (if (call $___towrite (local.get $2) ) (local.set $3 (i32.const 0) ) (block (local.set $3 (i32.load (local.get $4) ) ) (br $__rjti$0) ) ) (br $label$break$L5) ) (if (i32.lt_u (i32.sub (local.get $3) (local.tee $4 (i32.load (local.tee $5 (i32.add (local.get $2) (i32.const 20) ) ) ) ) ) (local.get $1) ) (block (local.set $3 (call_indirect (type $FUNCSIG$iiii) (local.get $2) (local.get $0) (local.get $1) (i32.add (i32.and (i32.load offset=36 (local.get $2) ) (i32.const 7) ) (i32.const 2) ) ) ) (br $label$break$L5) ) ) (local.set $2 (block $label$break$L10 (result i32) (if (result i32) (i32.gt_s (i32.load8_s offset=75 (local.get $2) ) (i32.const -1) ) (block (result i32) (local.set $3 (local.get $1) ) (loop $while-in (drop (br_if $label$break$L10 (i32.const 0) (i32.eqz (local.get $3) ) ) ) (if (i32.ne (i32.load8_s (i32.add (local.get $0) (local.tee $6 (i32.add (local.get $3) (i32.const -1) ) ) ) ) (i32.const 10) ) (block (local.set $3 (local.get $6) ) (br $while-in) ) ) ) (br_if $label$break$L5 (i32.lt_u (call_indirect (type $FUNCSIG$iiii) (local.get $2) (local.get $0) (local.get $3) (i32.add (i32.and (i32.load offset=36 (local.get $2) ) (i32.const 7) ) (i32.const 2) ) ) (local.get $3) ) ) (local.set $4 (i32.load (local.get $5) ) ) (local.set $1 (i32.sub (local.get $1) (local.get $3) ) ) (local.set $0 (i32.add (local.get $0) (local.get $3) ) ) (local.get $3) ) (i32.const 0) ) ) ) (drop (call $_memcpy (local.get $4) (local.get $0) (local.get $1) ) ) (i32.store (local.get $5) (i32.add (i32.load (local.get $5) ) (local.get $1) ) ) (local.set $3 (i32.add (local.get $2) (local.get $1) ) ) ) (local.get $3) ) (func $___towrite (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local.set $1 (i32.load8_s (local.tee $2 (i32.add (local.get $0) (i32.const 74) ) ) ) ) (i32.store8 (local.get $2) (i32.or (i32.add (local.get $1) (i32.const 255) ) (local.get $1) ) ) (local.tee $0 (if (result i32) (i32.and (local.tee $1 (i32.load (local.get $0) ) ) (i32.const 8) ) (block (result i32) (i32.store (local.get $0) (i32.or (local.get $1) (i32.const 32) ) ) (i32.const -1) ) (block (result i32) (i32.store offset=8 (local.get $0) (i32.const 0) ) (i32.store offset=4 (local.get $0) (i32.const 0) ) (i32.store offset=28 (local.get $0) (local.tee $1 (i32.load offset=44 (local.get $0) ) ) ) (i32.store offset=20 (local.get $0) (local.get $1) ) (i32.store offset=16 (local.get $0) (i32.add (local.get $1) (i32.load offset=48 (local.get $0) ) ) ) (i32.const 0) ) ) ) ) (func $_wcrtomb (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $do-once (result i32) (if (result i32) (local.get $0) (block (result i32) (if (i32.lt_u (local.get $1) (i32.const 128) ) (block (i32.store8 (local.get $0) (local.get $1) ) (br $do-once (i32.const 1) ) ) ) (if (i32.lt_u (local.get $1) (i32.const 2048) ) (block (i32.store8 (local.get $0) (i32.or (i32.shr_u (local.get $1) (i32.const 6) ) (i32.const 192) ) ) (i32.store8 offset=1 (local.get $0) (i32.or (i32.and (local.get $1) (i32.const 63) ) (i32.const 128) ) ) (br $do-once (i32.const 2) ) ) ) (if (i32.or (i32.lt_u (local.get $1) (i32.const 55296) ) (i32.eq (i32.and (local.get $1) (i32.const -8192) ) (i32.const 57344) ) ) (block (i32.store8 (local.get $0) (i32.or (i32.shr_u (local.get $1) (i32.const 12) ) (i32.const 224) ) ) (i32.store8 offset=1 (local.get $0) (i32.or (i32.and (i32.shr_u (local.get $1) (i32.const 6) ) (i32.const 63) ) (i32.const 128) ) ) (i32.store8 offset=2 (local.get $0) (i32.or (i32.and (local.get $1) (i32.const 63) ) (i32.const 128) ) ) (br $do-once (i32.const 3) ) ) ) (if (result i32) (i32.lt_u (i32.add (local.get $1) (i32.const -65536) ) (i32.const 1048576) ) (block (result i32) (i32.store8 (local.get $0) (i32.or (i32.shr_u (local.get $1) (i32.const 18) ) (i32.const 240) ) ) (i32.store8 offset=1 (local.get $0) (i32.or (i32.and (i32.shr_u (local.get $1) (i32.const 12) ) (i32.const 63) ) (i32.const 128) ) ) (i32.store8 offset=2 (local.get $0) (i32.or (i32.and (i32.shr_u (local.get $1) (i32.const 6) ) (i32.const 63) ) (i32.const 128) ) ) (i32.store8 offset=3 (local.get $0) (i32.or (i32.and (local.get $1) (i32.const 63) ) (i32.const 128) ) ) (i32.const 4) ) (block (result i32) (i32.store (call $___errno_location) (i32.const 84) ) (i32.const -1) ) ) ) (i32.const 1) ) ) ) ;; CHECK: (func $_wctomb (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (block $do-once (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 2048) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 57344) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 55296) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 224) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 65536) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 240) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (call $___errno_location) ;; CHECK-NEXT: (i32.const 84) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_wctomb (param $0 i32) (param $1 i32) (result i32) (if (result i32) (local.get $0) (call $_wcrtomb (local.get $0) (local.get $1) (i32.const 0) ) (i32.const 0) ) ) (func $_memchr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $5 (i32.and (local.get $1) (i32.const 255) ) ) (block $label$break$L8 (block $__rjti$2 (if (i32.and (local.tee $4 (i32.ne (local.get $2) (i32.const 0) ) ) (i32.ne (i32.and (local.get $0) (i32.const 3) ) (i32.const 0) ) ) (block (local.set $4 (i32.and (local.get $1) (i32.const 255) ) ) (local.set $3 (local.get $2) ) (local.set $2 (local.get $0) ) (loop $while-in (br_if $__rjti$2 (i32.eq (i32.load8_u (local.get $2) ) (i32.and (local.get $4) (i32.const 255) ) ) ) (br_if $while-in (i32.and (local.tee $0 (i32.ne (local.tee $3 (i32.add (local.get $3) (i32.const -1) ) ) (i32.const 0) ) ) (i32.ne (i32.and (local.tee $2 (i32.add (local.get $2) (i32.const 1) ) ) (i32.const 3) ) (i32.const 0) ) ) ) ) ) (block (local.set $3 (local.get $2) ) (local.set $2 (local.get $0) ) (local.set $0 (local.get $4) ) ) ) (br_if $__rjti$2 (local.get $0) ) (local.set $0 (i32.const 0) ) (br $label$break$L8) ) (local.set $0 (local.get $3) ) (if (i32.ne (i32.load8_u (local.get $2) ) (local.tee $1 (i32.and (local.get $1) (i32.const 255) ) ) ) (block (local.set $3 (i32.mul (local.get $5) (i32.const 16843009) ) ) (block $__rjto$0 (block $__rjti$0 (br_if $__rjti$0 (i32.le_u (local.get $0) (i32.const 3) ) ) (loop $while-in3 (if (i32.eqz (i32.and (i32.xor (i32.and (local.tee $4 (i32.xor (i32.load (local.get $2) ) (local.get $3) ) ) (i32.const -2139062144) ) (i32.const -2139062144) ) (i32.add (local.get $4) (i32.const -16843009) ) ) ) (block (local.set $2 (i32.add (local.get $2) (i32.const 4) ) ) (br_if $while-in3 (i32.gt_u (local.tee $0 (i32.add (local.get $0) (i32.const -4) ) ) (i32.const 3) ) ) (br $__rjti$0) ) ) ) (br $__rjto$0) ) (if (i32.eqz (local.get $0) ) (block (local.set $0 (i32.const 0) ) (br $label$break$L8) ) ) ) (loop $while-in5 (br_if $label$break$L8 (i32.eq (i32.load8_u (local.get $2) ) (i32.and (local.get $1) (i32.const 255) ) ) ) (local.set $2 (i32.add (local.get $2) (i32.const 1) ) ) (br_if $while-in5 (local.tee $0 (i32.add (local.get $0) (i32.const -1) ) ) ) (local.set $0 (i32.const 0) ) ) ) ) ) (select (local.get $2) (i32.const 0) (local.get $0) ) ) ;; CHECK: (func $___syscall_ret (param $0 i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -4096) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (call $___errno_location) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $___syscall_ret (param $0 i32) (result i32) (if (result i32) (i32.gt_u (local.get $0) (i32.const -4096) ) (block (result i32) (i32.store (call $___errno_location) (i32.sub (i32.const 0) (local.get $0) ) ) (i32.const -1) ) (local.get $0) ) ) ;; CHECK: (func $___fflush_unlocked (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (block $__rjto$0 (result i32) ;; CHECK-NEXT: (block $__rjti$0 ;; CHECK-NEXT: (br_if $__rjti$0 ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=36 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$0 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=40 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $___fflush_unlocked (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local.tee $0 (block $__rjto$0 (result i32) (block $__rjti$0 (br_if $__rjti$0 (i32.le_u (i32.load (local.tee $1 (i32.add (local.get $0) (i32.const 20) ) ) ) (i32.load (local.tee $2 (i32.add (local.get $0) (i32.const 28) ) ) ) ) ) (drop (call_indirect (type $FUNCSIG$iiii) (local.get $0) (i32.const 0) (i32.const 0) (i32.add (i32.and (i32.load offset=36 (local.get $0) ) (i32.const 7) ) (i32.const 2) ) ) ) (br_if $__rjti$0 (i32.load (local.get $1) ) ) (br $__rjto$0 (i32.const -1) ) ) (if (i32.lt_u (local.tee $4 (i32.load (local.tee $3 (i32.add (local.get $0) (i32.const 4) ) ) ) ) (local.tee $6 (i32.load (local.tee $5 (i32.add (local.get $0) (i32.const 8) ) ) ) ) ) (drop (call_indirect (type $FUNCSIG$iiii) (local.get $0) (i32.sub (local.get $4) (local.get $6) ) (i32.const 1) (i32.add (i32.and (i32.load offset=40 (local.get $0) ) (i32.const 7) ) (i32.const 2) ) ) ) ) (i32.store offset=16 (local.get $0) (i32.const 0) ) (i32.store (local.get $2) (i32.const 0) ) (i32.store (local.get $1) (i32.const 0) ) (i32.store (local.get $5) (i32.const 0) ) (i32.store (local.get $3) (i32.const 0) ) (i32.const 0) ) ) ) ;; CHECK: (func $_cleanup (param $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=68 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_cleanup (param $0 i32) (if (i32.eqz (i32.load offset=68 (local.get $0) ) ) (call $___unlockfile (local.get $0) ) ) ) (func $f64-to-int (param $0 f64) (result i32) (if (result i32) (f64.ne (local.get $0) (local.get $0) ) (i32.const -2147483648) (if (result i32) (f64.ge (local.get $0) (f64.const 2147483648) ) (i32.const -2147483648) (if (result i32) (f64.le (local.get $0) (f64.const -2147483649) ) (i32.const -2147483648) (i32.trunc_f64_s (local.get $0) ) ) ) ) ) (func $i32s-div (param $0 i32) (param $1 i32) (result i32) (if (result i32) (local.get $1) (if (result i32) (i32.and (i32.eq (local.get $0) (i32.const -2147483648) ) (i32.eq (local.get $1) (i32.const -1) ) ) (i32.const 0) (i32.div_s (local.get $0) (local.get $1) ) ) (i32.const 0) ) ) (func $i32u-rem (param $0 i32) (param $1 i32) (result i32) (if (result i32) (local.get $1) (i32.rem_u (local.get $0) (local.get $1) ) (i32.const 0) ) ) (func $i32u-div (param $0 i32) (param $1 i32) (result i32) (if (result i32) (local.get $1) (i32.div_u (local.get $0) (local.get $1) ) (i32.const 0) ) ) ;; CHECK: (func $_printf_core (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 f64) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (local $19 i32) ;; CHECK-NEXT: (local $20 i32) ;; CHECK-NEXT: (local $21 i32) ;; CHECK-NEXT: (local $22 i32) ;; CHECK-NEXT: (local $23 i32) ;; CHECK-NEXT: (local $24 i32) ;; CHECK-NEXT: (local $25 f64) ;; CHECK-NEXT: (local $26 i32) ;; CHECK-NEXT: (local $27 i32) ;; CHECK-NEXT: (local $28 i32) ;; CHECK-NEXT: (local $29 i32) ;; CHECK-NEXT: (local $30 i32) ;; CHECK-NEXT: (local $31 i32) ;; CHECK-NEXT: (local $32 i32) ;; CHECK-NEXT: (local $33 i32) ;; CHECK-NEXT: (local $34 i32) ;; CHECK-NEXT: (local $35 i32) ;; CHECK-NEXT: (local $36 i32) ;; CHECK-NEXT: (local $37 i32) ;; CHECK-NEXT: (local $38 i32) ;; CHECK-NEXT: (local $39 i32) ;; CHECK-NEXT: (local $40 i32) ;; CHECK-NEXT: (local $41 i32) ;; CHECK-NEXT: (local $42 i32) ;; CHECK-NEXT: (local $43 i32) ;; CHECK-NEXT: (local $44 i32) ;; CHECK-NEXT: (local $45 i32) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $21 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $33 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.const 528) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $29 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $23 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.const 536) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $36 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 39) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $39 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $37 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $24 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.const 576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $38 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $40 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: (local.tee $22 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.const 588) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $41 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $42 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $44 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $43 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 288) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $27 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $32 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$break$L343 ;; CHECK-NEXT: (block $__rjti$9 ;; CHECK-NEXT: (loop $label$continue$L1 ;; CHECK-NEXT: (block $label$break$L1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (call $___errno_location) ;; CHECK-NEXT: (i32.const 75) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$9 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$break$L12 ;; CHECK-NEXT: (block $__rjti$1 ;; CHECK-NEXT: (loop $label$continue$L9 ;; CHECK-NEXT: (block $label$break$L9 ;; CHECK-NEXT: (block $switch-default ;; CHECK-NEXT: (block $switch-case0 ;; CHECK-NEXT: (block $switch-case ;; CHECK-NEXT: (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (br_if $label$break$L12 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load8_s offset=1 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_s offset=2 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$break$L25 (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in4 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 75913) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L25 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in4 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once5 (result i32) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (block $__rjto$0 (result i32) ;; CHECK-NEXT: (block $__rjti$0 ;; CHECK-NEXT: (br_if $__rjti$0 ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$0 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load8_s offset=2 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once5 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in8 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 46) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$break$L46 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L46 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in11 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $label$break$L46 ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_s offset=3 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L46 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in13 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 57) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $15 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 58) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3611) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$2 ;; CHECK-NEXT: (block $__rjti$2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pop_arg_336 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const -65537) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $15 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (block $__rjto$8 (result i32) ;; CHECK-NEXT: (block $__rjti$8 ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (block $__rjti$7 (result i32) ;; CHECK-NEXT: (block $__rjti$6 ;; CHECK-NEXT: (block $__rjti$5 ;; CHECK-NEXT: (block $__rjti$4 ;; CHECK-NEXT: (block $__rjti$3 ;; CHECK-NEXT: (block $switch-default120 ;; CHECK-NEXT: (block $switch-case42 ;; CHECK-NEXT: (block $switch-case41 ;; CHECK-NEXT: (block $switch-case40 ;; CHECK-NEXT: (block $switch-case39 ;; CHECK-NEXT: (block $switch-case38 ;; CHECK-NEXT: (block $switch-case37 ;; CHECK-NEXT: (block $switch-case36 ;; CHECK-NEXT: (block $switch-case34 ;; CHECK-NEXT: (block $switch-case33 ;; CHECK-NEXT: (block $switch-case29 ;; CHECK-NEXT: (block $switch-case28 ;; CHECK-NEXT: (block $switch-case27 ;; CHECK-NEXT: (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $15 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -33) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $switch-default26 ;; CHECK-NEXT: (block $switch-case25 ;; CHECK-NEXT: (block $switch-case24 ;; CHECK-NEXT: (block $switch-case23 ;; CHECK-NEXT: (block $switch-case22 ;; CHECK-NEXT: (block $switch-case21 ;; CHECK-NEXT: (block $switch-case20 ;; CHECK-NEXT: (block $switch-case19 ;; CHECK-NEXT: (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.const 120) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in32 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in32 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (call $_bitshift64Lshr ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 2048) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4092) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 4093) ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $36) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $36) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$8 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (call $___errno_location) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$1 ;; CHECK-NEXT: (block $__rjti$10 ;; CHECK-NEXT: (loop $while-in2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.load8_u offset=687 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br_if $while-in2 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 87) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 87) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$10 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 775) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 775) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in1 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (loop $while-in3 (result i32) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in1 ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4101) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $37) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $39) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (local.get $37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$7 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (global.get $tempDoublePtr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $30 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $28 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f64.neg ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4108) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 2048) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $28 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4111) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $28 ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 4114) ;; CHECK-NEXT: (i32.const 4109) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (global.get $tempDoublePtr) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2146435072) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2146435072) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once49 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (local.tee $25 ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (call $_frexp ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $26 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 97) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $30) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $30) ;; CHECK-NEXT: (local.tee $17 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f64.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in54 ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in54 ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (f64.neg ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (f64.neg ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $28) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (call $_fmt_u ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $38) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $38) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in56 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (f64.ge ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.const 2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (f64.le ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.const -2147483649) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: (i32.trunc_f64_s ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4075) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.convert_i32_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (f64.eq ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 46) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in56 ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $40) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $41) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 65536) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once49 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: (f64.const 268435456) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $43) ;; CHECK-NEXT: (local.get $44) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in60 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (f64.ge ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.const 2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (f64.le ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.const -2147483649) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: (i32.trunc_f64_s ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in60 ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (local.tee $14 ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (f64.convert_i32_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 1e9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in62 ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 29) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 29) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once63 ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in66 ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $20 ;; CHECK-NEXT: (call $_bitshift64Shl ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (call $___uremdi3 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.tee $20 ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1000000000) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (call $___udivdi3 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (i32.const 1000000000) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in66 ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once63 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in68 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in68) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in62 ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $31 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $26) ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (loop $while-in70 (result i32) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once71 ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $34 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const 1000000000) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in74 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $34) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in74 ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once71 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in70) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once75 ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once75 ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in78 ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in78 ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $26) ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $31 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $34 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $26) ;; CHECK-NEXT: (i32.const 103) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 9216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in80 ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in80 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4092) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $26 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once81 ;; CHECK-NEXT: (local.set $35 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (local.tee $45 ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const 0.5) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 1.5) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $26) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (local.get $45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $25 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (f64.const 9007199254740994) ;; CHECK-NEXT: (f64.const 9007199254740992) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $35) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $28) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $25 ;; CHECK-NEXT: (f64.neg ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f64.neg ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once81 ;; CHECK-NEXT: (f64.eq ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 999999999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in86 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in86 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 999999999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once81 ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in88 ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in88 ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $35 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (loop $while-in90 (result i32) ;; CHECK-NEXT: (block $while-out89 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $26 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out89 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $26 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in90) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $34) ;; CHECK-NEXT: (block $do-once91 (result i32) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const -5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $19 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $do-once91 ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (local.tee $17 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $26) ;; CHECK-NEXT: (block $do-once93 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $15 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once93) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once93) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in96 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in96 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $28) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $19 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $31 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (call $_fmt_u ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $35) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in98 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in98 ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $15 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $30) ;; CHECK-NEXT: (local.get $28) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 65536) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $31) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in102 ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $_fmt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once103 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br_if $do-once103 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $32) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br_if $do-once103 ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in106 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in106 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (i32.const 4143) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in110 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (call $_fmt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in112 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in112 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in110) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once99 ;; CHECK-NEXT: (local.set $20 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $26) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in114 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (call $_fmt_u ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $32) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once115 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once115 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once115 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (i32.const 4143) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br_if $do-once115 ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in118 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in118 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in114 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once99 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $28) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $30) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 4135) ;; CHECK-NEXT: (i32.const 4139) ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 4127) ;; CHECK-NEXT: (i32.const 4131) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$8 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (loop $while-in123 (result i32) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4075) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in123 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (call $_bitshift64Lshr ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (call $_fmt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$break$L8 ;; CHECK-NEXT: (block $__rjti$29 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in12 ;; CHECK-NEXT: (br_if $__rjti$29 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in12 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$29 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__rjto$013 ;; CHECK-NEXT: (block $__rjti$014 ;; CHECK-NEXT: (br_if $__rjti$014 ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in315 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2139062144) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2139062144) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 16843009) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in315 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$014) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$013) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (loop $while-in5 (result i32) ;; CHECK-NEXT: (br_if $label$break$L8 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in5 ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $15 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$8 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in125 ;; CHECK-NEXT: (block $while-out124 ;; CHECK-NEXT: (br_if $while-out124 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-out124 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (call $_wctomb ;; CHECK-NEXT: (local.get $33) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in125 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in127 (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__rjti$7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__rjti$7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (call $_wctomb ;; CHECK-NEXT: (local.get $33) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $33) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in127 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const -65537) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 65536) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$continue$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L343) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in130 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $_pop_arg_336 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in130 ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L343) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in132 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $18 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L343) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in132 ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) (func $_printf_core (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 f64) (local $16 i32) (local $17 i32) (local $18 i32) (local $19 i32) (local $20 i32) (local $21 i32) (local $22 i32) (local $23 f64) (local $24 i32) (local $25 i32) (local $26 i32) (local $27 i32) (local $28 i32) (local $29 i32) (local $30 i32) (local $31 i32) (local $32 i32) (local $33 i32) (local $34 i32) (local $35 i32) (local $36 i32) (local $37 i32) (local $38 i32) (local $39 i32) (local $40 i32) (local $41 i32) (local $42 i32) (local $43 i32) (local $44 i32) (local $45 i32) (local $46 i32) (local $47 i32) (local $48 i32) (local $49 i32) (local $50 i32) (local $51 i32) (local.set $25 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 624) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (local.set $20 (i32.add (local.get $25) (i32.const 16) ) ) (local.set $19 (local.get $25) ) (local.set $36 (i32.add (local.get $25) (i32.const 528) ) ) (local.set $29 (i32.ne (local.get $0) (i32.const 0) ) ) (local.set $39 (local.tee $26 (i32.add (local.tee $5 (i32.add (local.get $25) (i32.const 536) ) ) (i32.const 40) ) ) ) (local.set $40 (i32.add (local.get $5) (i32.const 39) ) ) (local.set $44 (i32.add (local.tee $41 (i32.add (local.get $25) (i32.const 8) ) ) (i32.const 4) ) ) (local.set $34 (i32.add (local.tee $5 (i32.add (local.get $25) (i32.const 576) ) ) (i32.const 12) ) ) (local.set $42 (i32.add (local.get $5) (i32.const 11) ) ) (local.set $45 (i32.sub (local.tee $28 (local.get $34) ) (local.tee $37 (local.tee $22 (i32.add (local.get $25) (i32.const 588) ) ) ) ) ) (local.set $46 (i32.sub (i32.const -2) (local.get $37) ) ) (local.set $47 (i32.add (local.get $28) (i32.const 2) ) ) (local.set $49 (i32.add (local.tee $48 (i32.add (local.get $25) (i32.const 24) ) ) (i32.const 288) ) ) (local.set $43 (local.tee $30 (i32.add (local.get $22) (i32.const 9) ) ) ) (local.set $35 (i32.add (local.get $22) (i32.const 8) ) ) (local.set $16 (i32.const 0) ) (local.set $5 (local.get $1) ) (local.set $10 (i32.const 0) ) (local.set $1 (i32.const 0) ) (block $label$break$L343 (block $__rjti$9 (loop $label$continue$L1 (block $label$break$L1 (if (i32.gt_s (local.get $16) (i32.const -1) ) (local.set $16 (if (result i32) (i32.gt_s (local.get $10) (i32.sub (i32.const 2147483647) (local.get $16) ) ) (block (result i32) (i32.store (call $___errno_location) (i32.const 75) ) (i32.const -1) ) (i32.add (local.get $10) (local.get $16) ) ) ) ) (br_if $__rjti$9 (i32.eqz (local.tee $7 (i32.load8_s (local.get $5) ) ) ) ) (local.set $10 (local.get $5) ) (block $label$break$L12 (block $__rjti$1 (loop $label$continue$L9 (block $label$break$L9 (block $switch-default (block $switch-case0 (block $switch-case (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default (i32.shr_s (i32.shl (local.get $7) (i32.const 24) ) (i32.const 24) ) ) ) (local.set $6 (local.get $10) ) (br $__rjti$1) ) (local.set $6 (local.get $10) ) (br $label$break$L9) ) (local.set $7 (i32.load8_s (local.tee $10 (i32.add (local.get $10) (i32.const 1) ) ) ) ) (br $label$continue$L9) ) ) (br $label$break$L12) ) (loop $while-in (br_if $label$break$L12 (i32.ne (i32.load8_s offset=1 (local.get $6) ) (i32.const 37) ) ) (local.set $10 (i32.add (local.get $10) (i32.const 1) ) ) (br_if $while-in (i32.eq (i32.load8_s (local.tee $6 (i32.add (local.get $6) (i32.const 2) ) ) ) (i32.const 37) ) ) ) ) (local.set $7 (i32.sub (local.get $10) (local.get $5) ) ) (if (local.get $29) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $5) (local.get $7) (local.get $0) ) ) ) ) (if (i32.ne (local.get $10) (local.get $5) ) (block (local.set $5 (local.get $6) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) ) (local.set $8 (if (result i32) (i32.lt_u (local.tee $8 (i32.add (local.tee $11 (i32.load8_s (local.tee $10 (i32.add (local.get $6) (i32.const 1) ) ) ) ) (i32.const -48) ) ) (i32.const 10) ) (block (result i32) (local.set $6 (i32.load8_s (local.tee $10 (select (i32.add (local.get $6) (i32.const 3) ) (local.get $10) (local.tee $11 (i32.eq (i32.load8_s offset=2 (local.get $6) ) (i32.const 36) ) ) ) ) ) ) (local.set $17 (select (local.get $8) (i32.const -1) (local.get $11) ) ) (select (i32.const 1) (local.get $1) (local.get $11) ) ) (block (result i32) (local.set $6 (local.get $11) ) (local.set $17 (i32.const -1) ) (local.get $1) ) ) ) (block $label$break$L25 (if (i32.eq (i32.and (local.tee $11 (i32.shr_s (i32.shl (local.get $6) (i32.const 24) ) (i32.const 24) ) ) (i32.const -32) ) (i32.const 32) ) (block (local.set $1 (local.get $6) ) (local.set $6 (local.get $11) ) (local.set $11 (i32.const 0) ) (loop $while-in4 (if (i32.eqz (i32.and (i32.shl (i32.const 1) (i32.add (local.get $6) (i32.const -32) ) ) (i32.const 75913) ) ) (block (local.set $6 (local.get $1) ) (local.set $1 (local.get $11) ) (br $label$break$L25) ) ) (local.set $11 (i32.or (i32.shl (i32.const 1) (i32.add (i32.shr_s (i32.shl (local.get $1) (i32.const 24) ) (i32.const 24) ) (i32.const -32) ) ) (local.get $11) ) ) (br_if $while-in4 (i32.eq (i32.and (local.tee $6 (local.tee $1 (i32.load8_s (local.tee $10 (i32.add (local.get $10) (i32.const 1) ) ) ) ) ) (i32.const -32) ) (i32.const 32) ) ) (local.set $6 (local.get $1) ) (local.set $1 (local.get $11) ) ) ) (local.set $1 (i32.const 0) ) ) ) (block $do-once5 (if (i32.eq (i32.and (local.get $6) (i32.const 255) ) (i32.const 42) ) (block (local.set $10 (block $__rjto$0 (result i32) (block $__rjti$0 (br_if $__rjti$0 (i32.ge_u (local.tee $11 (i32.add (i32.load8_s (local.tee $6 (i32.add (local.get $10) (i32.const 1) ) ) ) (i32.const -48) ) ) (i32.const 10) ) ) (br_if $__rjti$0 (i32.ne (i32.load8_s offset=2 (local.get $10) ) (i32.const 36) ) ) (i32.store (i32.add (local.get $4) (i32.shl (local.get $11) (i32.const 2) ) ) (i32.const 10) ) (drop (i32.load offset=4 (local.tee $6 (i32.add (local.get $3) (i32.shl (i32.add (i32.load8_s (local.get $6) ) (i32.const -48) ) (i32.const 3) ) ) ) ) ) (local.set $8 (i32.const 1) ) (local.set $14 (i32.load (local.get $6) ) ) (br $__rjto$0 (i32.add (local.get $10) (i32.const 3) ) ) ) (if (local.get $8) (block (local.set $16 (i32.const -1) ) (br $label$break$L1) ) ) (if (i32.eqz (local.get $29) ) (block (local.set $11 (local.get $1) ) (local.set $10 (local.get $6) ) (local.set $1 (i32.const 0) ) (local.set $14 (i32.const 0) ) (br $do-once5) ) ) (local.set $14 (i32.load (local.tee $10 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $10) (i32.const 4) ) ) (local.set $8 (i32.const 0) ) (local.get $6) ) ) (local.set $11 (if (result i32) (i32.lt_s (local.get $14) (i32.const 0) ) (block (result i32) (local.set $14 (i32.sub (i32.const 0) (local.get $14) ) ) (i32.or (local.get $1) (i32.const 8192) ) ) (local.get $1) ) ) (local.set $1 (local.get $8) ) ) (if (i32.lt_u (local.tee $6 (i32.add (i32.shr_s (i32.shl (local.get $6) (i32.const 24) ) (i32.const 24) ) (i32.const -48) ) ) (i32.const 10) ) (block (local.set $11 (i32.const 0) ) (loop $while-in8 (local.set $6 (i32.add (i32.mul (local.get $11) (i32.const 10) ) (local.get $6) ) ) (if (i32.lt_u (local.tee $9 (i32.add (i32.load8_s (local.tee $10 (i32.add (local.get $10) (i32.const 1) ) ) ) (i32.const -48) ) ) (i32.const 10) ) (block (local.set $11 (local.get $6) ) (local.set $6 (local.get $9) ) (br $while-in8) ) ) ) (if (i32.lt_s (local.get $6) (i32.const 0) ) (block (local.set $16 (i32.const -1) ) (br $label$break$L1) ) (block (local.set $11 (local.get $1) ) (local.set $1 (local.get $8) ) (local.set $14 (local.get $6) ) ) ) ) (block (local.set $11 (local.get $1) ) (local.set $1 (local.get $8) ) (local.set $14 (i32.const 0) ) ) ) ) ) (local.set $6 (block $label$break$L46 (result i32) (if (result i32) (i32.eq (i32.load8_s (local.get $10) ) (i32.const 46) ) (block (result i32) (if (i32.ne (local.tee $8 (i32.load8_s (local.tee $6 (i32.add (local.get $10) (i32.const 1) ) ) ) ) (i32.const 42) ) (block (if (i32.lt_u (local.tee $9 (i32.add (local.get $8) (i32.const -48) ) ) (i32.const 10) ) (block (local.set $10 (local.get $6) ) (local.set $8 (i32.const 0) ) (local.set $6 (local.get $9) ) ) (block (local.set $10 (local.get $6) ) (br $label$break$L46 (i32.const 0) ) ) ) (loop $while-in11 (drop (br_if $label$break$L46 (local.tee $6 (i32.add (i32.mul (local.get $8) (i32.const 10) ) (local.get $6) ) ) (i32.ge_u (local.tee $9 (i32.add (i32.load8_s (local.tee $10 (i32.add (local.get $10) (i32.const 1) ) ) ) (i32.const -48) ) ) (i32.const 10) ) ) ) (local.set $8 (local.get $6) ) (local.set $6 (local.get $9) ) (br $while-in11) ) ) ) (if (i32.lt_u (local.tee $8 (i32.add (i32.load8_s (local.tee $6 (i32.add (local.get $10) (i32.const 2) ) ) ) (i32.const -48) ) ) (i32.const 10) ) (if (i32.eq (i32.load8_s offset=3 (local.get $10) ) (i32.const 36) ) (block (i32.store (i32.add (local.get $4) (i32.shl (local.get $8) (i32.const 2) ) ) (i32.const 10) ) (drop (i32.load offset=4 (local.tee $6 (i32.add (local.get $3) (i32.shl (i32.add (i32.load8_s (local.get $6) ) (i32.const -48) ) (i32.const 3) ) ) ) ) ) (local.set $10 (i32.add (local.get $10) (i32.const 4) ) ) (br $label$break$L46 (i32.load (local.get $6) ) ) ) ) ) (if (local.get $1) (block (local.set $16 (i32.const -1) ) (br $label$break$L1) ) ) (if (result i32) (local.get $29) (block (result i32) (local.set $8 (i32.load (local.tee $10 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $10) (i32.const 4) ) ) (local.set $10 (local.get $6) ) (local.get $8) ) (block (result i32) (local.set $10 (local.get $6) ) (i32.const 0) ) ) ) (i32.const -1) ) ) ) (local.set $8 (local.get $10) ) (local.set $9 (i32.const 0) ) (loop $while-in13 (if (i32.gt_u (local.tee $12 (i32.add (i32.load8_s (local.get $8) ) (i32.const -65) ) ) (i32.const 57) ) (block (local.set $16 (i32.const -1) ) (br $label$break$L1) ) ) (local.set $10 (i32.add (local.get $8) (i32.const 1) ) ) (if (i32.lt_u (i32.add (local.tee $12 (i32.and (local.tee $13 (i32.load8_s (i32.add (i32.add (i32.mul (local.get $9) (i32.const 58) ) (i32.const 3611) ) (local.get $12) ) ) ) (i32.const 255) ) ) (i32.const -1) ) (i32.const 8) ) (block (local.set $8 (local.get $10) ) (local.set $9 (local.get $12) ) (br $while-in13) ) (local.set $18 (local.get $8) ) ) ) (if (i32.eqz (i32.and (local.get $13) (i32.const 255) ) ) (block (local.set $16 (i32.const -1) ) (br $label$break$L1) ) ) (local.set $8 (i32.gt_s (local.get $17) (i32.const -1) ) ) (block $__rjto$2 (block $__rjti$2 (if (i32.eq (i32.and (local.get $13) (i32.const 255) ) (i32.const 19) ) (if (local.get $8) (block (local.set $16 (i32.const -1) ) (br $label$break$L1) ) (br $__rjti$2) ) (block (if (local.get $8) (block (i32.store (i32.add (local.get $4) (i32.shl (local.get $17) (i32.const 2) ) ) (local.get $12) ) (local.set $13 (i32.load offset=4 (local.tee $12 (i32.add (local.get $3) (i32.shl (local.get $17) (i32.const 3) ) ) ) ) ) (i32.store (local.tee $8 (local.get $19) ) (i32.load (local.get $12) ) ) (i32.store offset=4 (local.get $8) (local.get $13) ) (br $__rjti$2) ) ) (if (i32.eqz (local.get $29) ) (block (local.set $16 (i32.const 0) ) (br $label$break$L1) ) ) (call $_pop_arg_336 (local.get $19) (local.get $12) (local.get $2) ) ) ) (br $__rjto$2) ) (if (i32.eqz (local.get $29) ) (block (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) ) ) (local.set $11 (select (local.tee $8 (i32.and (local.get $11) (i32.const -65537) ) ) (local.get $11) (i32.and (local.get $11) (i32.const 8192) ) ) ) (local.set $5 (block $__rjto$8 (result i32) (block $__rjti$8 (block $__rjti$7 (block $__rjti$6 (block $__rjti$5 (block $__rjti$4 (block $__rjti$3 (block $switch-default120 (block $switch-case42 (block $switch-case41 (block $switch-case40 (block $switch-case39 (block $switch-case38 (block $switch-case37 (block $switch-case36 (block $switch-case34 (block $switch-case33 (block $switch-case29 (block $switch-case28 (block $switch-case27 (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 (i32.sub (local.tee $18 (select (i32.and (local.tee $12 (i32.load8_s (local.get $18) ) ) (i32.const -33) ) (local.get $12) (i32.and (i32.ne (local.get $9) (i32.const 0) ) (i32.eq (i32.and (local.get $12) (i32.const 15) ) (i32.const 3) ) ) ) ) (i32.const 65) ) ) ) (block $switch-default26 (block $switch-case25 (block $switch-case24 (block $switch-case23 (block $switch-case22 (block $switch-case21 (block $switch-case20 (block $switch-case19 (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 (local.get $9) ) ) (i32.store (i32.load (local.get $19) ) (local.get $16) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (i32.store (i32.load (local.get $19) ) (local.get $16) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (i32.store (local.tee $5 (i32.load (local.get $19) ) ) (local.get $16) ) (i32.store offset=4 (local.get $5) (i32.shr_s (i32.shl (i32.lt_s (local.get $16) (i32.const 0) ) (i32.const 31) ) (i32.const 31) ) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (i32.store16 (i32.load (local.get $19) ) (local.get $16) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (i32.store8 (i32.load (local.get $19) ) (local.get $16) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (i32.store (i32.load (local.get $19) ) (local.get $16) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (i32.store (local.tee $5 (i32.load (local.get $19) ) ) (local.get $16) ) (i32.store offset=4 (local.get $5) (i32.shr_s (i32.shl (i32.lt_s (local.get $16) (i32.const 0) ) (i32.const 31) ) (i32.const 31) ) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (local.set $7 (i32.or (local.get $11) (i32.const 8) ) ) (local.set $6 (select (local.get $6) (i32.const 8) (i32.gt_u (local.get $6) (i32.const 8) ) ) ) (local.set $18 (i32.const 120) ) (br $__rjti$3) ) (local.set $7 (local.get $11) ) (br $__rjti$3) ) (if (i32.and (i32.eqz (local.tee $7 (i32.load (local.tee $5 (local.get $19) ) ) ) ) (i32.eqz (local.tee $8 (i32.load offset=4 (local.get $5) ) ) ) ) (local.set $8 (local.get $26) ) (block (local.set $5 (local.get $7) ) (local.set $7 (local.get $8) ) (local.set $8 (local.get $26) ) (loop $while-in32 (i32.store8 (local.tee $8 (i32.add (local.get $8) (i32.const -1) ) ) (i32.or (i32.and (local.get $5) (i32.const 7) ) (i32.const 48) ) ) (br_if $while-in32 (i32.eqz (i32.and (i32.eqz (local.tee $5 (call $_bitshift64Lshr (local.get $5) (local.get $7) (i32.const 3) ) ) ) (i32.eqz (local.tee $7 (global.get $tempRet0) ) ) ) ) ) ) ) ) (local.set $5 (if (result i32) (i32.and (local.get $11) (i32.const 8) ) (block (result i32) (local.set $7 (local.get $11) ) (local.set $6 (select (local.tee $11 (i32.add (i32.sub (local.get $39) (local.get $8) ) (i32.const 1) ) ) (local.get $6) (i32.lt_s (local.get $6) (local.get $11) ) ) ) (local.get $8) ) (block (result i32) (local.set $7 (local.get $11) ) (local.get $8) ) ) ) (local.set $8 (i32.const 0) ) (local.set $9 (i32.const 4091) ) (br $__rjti$8) ) (local.set $5 (i32.load (local.tee $7 (local.get $19) ) ) ) (if (i32.lt_s (local.tee $7 (i32.load offset=4 (local.get $7) ) ) (i32.const 0) ) (block (i32.store (local.tee $8 (local.get $19) ) (local.tee $5 (call $_i64Subtract (i32.const 0) (i32.const 0) (local.get $5) (local.get $7) ) ) ) (i32.store offset=4 (local.get $8) (local.tee $7 (global.get $tempRet0) ) ) (local.set $8 (i32.const 1) ) (local.set $9 (i32.const 4091) ) (br $__rjti$4) ) ) (local.set $9 (if (result i32) (i32.and (local.get $11) (i32.const 2048) ) (block (result i32) (local.set $8 (i32.const 1) ) (i32.const 4092) ) (block (result i32) (local.set $8 (local.tee $9 (i32.and (local.get $11) (i32.const 1) ) ) ) (select (i32.const 4093) (i32.const 4091) (local.get $9) ) ) ) ) (br $__rjti$4) ) (local.set $5 (i32.load (local.tee $7 (local.get $19) ) ) ) (local.set $7 (i32.load offset=4 (local.get $7) ) ) (local.set $8 (i32.const 0) ) (local.set $9 (i32.const 4091) ) (br $__rjti$4) ) (drop (i32.load offset=4 (local.tee $5 (local.get $19) ) ) ) (i32.store8 (local.get $40) (i32.load (local.get $5) ) ) (local.set $7 (local.get $40) ) (local.set $11 (local.get $8) ) (local.set $12 (i32.const 1) ) (local.set $8 (i32.const 0) ) (local.set $9 (i32.const 4091) ) (br $__rjto$8 (local.get $26) ) ) (local.set $5 (call $_strerror (i32.load (call $___errno_location) ) ) ) (br $__rjti$5) ) (local.set $5 (select (local.tee $5 (i32.load (local.get $19) ) ) (i32.const 4101) (local.get $5) ) ) (br $__rjti$5) ) (drop (i32.load offset=4 (local.tee $5 (local.get $19) ) ) ) (i32.store (local.get $41) (i32.load (local.get $5) ) ) (i32.store (local.get $44) (i32.const 0) ) (i32.store (local.get $19) (local.get $41) ) (local.set $8 (i32.const -1) ) (br $__rjti$6) ) (if (local.get $6) (block (local.set $8 (local.get $6) ) (br $__rjti$6) ) (block (call $_pad (local.get $0) (i32.const 32) (local.get $14) (i32.const 0) (local.get $11) ) (local.set $7 (i32.const 0) ) (br $__rjti$7) ) ) ) (local.set $15 (f64.load (local.get $19) ) ) (i32.store (local.get $20) (i32.const 0) ) (f64.store (global.get $tempDoublePtr) (local.get $15) ) (drop (i32.load (global.get $tempDoublePtr) ) ) (local.set $31 (if (result i32) (i32.lt_s (i32.load offset=4 (global.get $tempDoublePtr) ) (i32.const 0) ) (block (result i32) (local.set $27 (i32.const 1) ) (local.set $15 (f64.neg (local.get $15) ) ) (i32.const 4108) ) (if (result i32) (i32.and (local.get $11) (i32.const 2048) ) (block (result i32) (local.set $27 (i32.const 1) ) (i32.const 4111) ) (block (result i32) (local.set $27 (local.tee $5 (i32.and (local.get $11) (i32.const 1) ) ) ) (select (i32.const 4114) (i32.const 4109) (local.get $5) ) ) ) ) ) (f64.store (global.get $tempDoublePtr) (local.get $15) ) (drop (i32.load (global.get $tempDoublePtr) ) ) (local.set $7 (block $do-once49 (result i32) (if (result i32) (i32.or (i32.lt_u (local.tee $5 (i32.and (i32.load offset=4 (global.get $tempDoublePtr) ) (i32.const 2146435072) ) ) (i32.const 2146435072) ) (i32.and (i32.eq (local.get $5) (i32.const 2146435072) ) (i32.const 0) ) ) (block (result i32) (if (local.tee $5 (f64.ne (local.tee $23 (f64.mul (call $_frexp (local.get $15) (local.tee $5 (local.get $20) ) ) (f64.const 2) ) ) (f64.const 0) ) ) (i32.store (local.get $20) (i32.add (i32.load (local.get $20) ) (i32.const -1) ) ) ) (if (i32.eq (local.tee $24 (i32.or (local.get $18) (i32.const 32) ) ) (i32.const 97) ) (block (local.set $9 (select (i32.add (local.get $31) (i32.const 9) ) (local.get $31) (local.tee $13 (i32.and (local.get $18) (i32.const 32) ) ) ) ) (local.set $15 (if (result f64) (i32.or (i32.gt_u (local.get $6) (i32.const 11) ) (i32.eqz (local.tee $5 (i32.sub (i32.const 12) (local.get $6) ) ) ) ) (local.get $23) (block (result f64) (local.set $15 (f64.const 8) ) (loop $while-in54 (local.set $15 (f64.mul (local.get $15) (f64.const 16) ) ) (br_if $while-in54 (local.tee $5 (i32.add (local.get $5) (i32.const -1) ) ) ) ) (if (result f64) (i32.eq (i32.load8_s (local.get $9) ) (i32.const 45) ) (f64.neg (f64.add (local.get $15) (f64.sub (f64.neg (local.get $23) ) (local.get $15) ) ) ) (f64.sub (f64.add (local.get $23) (local.get $15) ) (local.get $15) ) ) ) ) ) (if (i32.eq (local.tee $5 (call $_fmt_u (local.tee $5 (select (i32.sub (i32.const 0) (local.tee $7 (i32.load (local.get $20) ) ) ) (local.get $7) (i32.lt_s (local.get $7) (i32.const 0) ) ) ) (i32.shr_s (i32.shl (i32.lt_s (local.get $5) (i32.const 0) ) (i32.const 31) ) (i32.const 31) ) (local.get $34) ) ) (local.get $34) ) (block (i32.store8 (local.get $42) (i32.const 48) ) (local.set $5 (local.get $42) ) ) ) (local.set $12 (i32.or (local.get $27) (i32.const 2) ) ) (i32.store8 (i32.add (local.get $5) (i32.const -1) ) (i32.add (i32.and (i32.shr_s (local.get $7) (i32.const 31) ) (i32.const 2) ) (i32.const 43) ) ) (i32.store8 (local.tee $8 (i32.add (local.get $5) (i32.const -2) ) ) (i32.add (local.get $18) (i32.const 15) ) ) (local.set $18 (i32.lt_s (local.get $6) (i32.const 1) ) ) (local.set $17 (i32.eqz (i32.and (local.get $11) (i32.const 8) ) ) ) (local.set $5 (local.get $22) ) (loop $while-in56 (i32.store8 (local.get $5) (i32.or (i32.load8_u (i32.add (local.tee $7 (call $f64-to-int (local.get $15) ) ) (i32.const 4075) ) ) (local.get $13) ) ) (local.set $15 (f64.mul (f64.sub (local.get $15) (f64.convert_i32_s (local.get $7) ) ) (f64.const 16) ) ) (local.set $5 (block $do-once57 (result i32) (if (result i32) (i32.eq (i32.sub (local.tee $7 (i32.add (local.get $5) (i32.const 1) ) ) (local.get $37) ) (i32.const 1) ) (block (result i32) (drop (br_if $do-once57 (local.get $7) (i32.and (local.get $17) (i32.and (local.get $18) (f64.eq (local.get $15) (f64.const 0) ) ) ) ) ) (i32.store8 (local.get $7) (i32.const 46) ) (i32.add (local.get $5) (i32.const 2) ) ) (local.get $7) ) ) ) (br_if $while-in56 (f64.ne (local.get $15) (f64.const 0) ) ) ) (call $_pad (local.get $0) (i32.const 32) (local.get $14) (local.tee $7 (i32.add (local.tee $6 (select (i32.sub (i32.add (local.get $47) (local.get $6) ) (local.get $8) ) (i32.add (i32.sub (local.get $45) (local.get $8) ) (local.get $5) ) (i32.and (i32.ne (local.get $6) (i32.const 0) ) (i32.lt_s (i32.add (local.get $46) (local.get $5) ) (local.get $6) ) ) ) ) (local.get $12) ) ) (local.get $11) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $9) (local.get $12) (local.get $0) ) ) ) (call $_pad (local.get $0) (i32.const 48) (local.get $14) (local.get $7) (i32.xor (local.get $11) (i32.const 65536) ) ) (local.set $5 (i32.sub (local.get $5) (local.get $37) ) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $22) (local.get $5) (local.get $0) ) ) ) (call $_pad (local.get $0) (i32.const 48) (i32.sub (local.get $6) (i32.add (local.get $5) (local.tee $5 (i32.sub (local.get $28) (local.get $8) ) ) ) ) (i32.const 0) (i32.const 0) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $8) (local.get $5) (local.get $0) ) ) ) (call $_pad (local.get $0) (i32.const 32) (local.get $14) (local.get $7) (i32.xor (local.get $11) (i32.const 8192) ) ) (br $do-once49 (select (local.get $14) (local.get $7) (i32.lt_s (local.get $7) (local.get $14) ) ) ) ) ) (local.set $15 (if (result f64) (local.get $5) (block (result f64) (i32.store (local.get $20) (local.tee $5 (i32.add (i32.load (local.get $20) ) (i32.const -28) ) ) ) (f64.mul (local.get $23) (f64.const 268435456) ) ) (block (result f64) (local.set $5 (i32.load (local.get $20) ) ) (local.get $23) ) ) ) (local.set $7 (local.tee $8 (select (local.get $48) (local.get $49) (i32.lt_s (local.get $5) (i32.const 0) ) ) ) ) (loop $while-in60 (i32.store (local.get $7) (local.tee $5 (call $f64-to-int (local.get $15) ) ) ) (local.set $7 (i32.add (local.get $7) (i32.const 4) ) ) (br_if $while-in60 (f64.ne (local.tee $15 (f64.mul (f64.sub (local.get $15) (f64.convert_i32_u (local.get $5) ) ) (f64.const 1e9) ) ) (f64.const 0) ) ) ) (if (i32.gt_s (local.tee $9 (i32.load (local.get $20) ) ) (i32.const 0) ) (block (local.set $5 (local.get $8) ) (loop $while-in62 (local.set $13 (select (i32.const 29) (local.get $9) (i32.gt_s (local.get $9) (i32.const 29) ) ) ) (block $do-once63 (if (i32.ge_u (local.tee $9 (i32.add (local.get $7) (i32.const -4) ) ) (local.get $5) ) (block (local.set $12 (i32.const 0) ) (loop $while-in66 (i32.store (local.get $9) (call $___uremdi3 (local.tee $12 (call $_i64Add (call $_bitshift64Shl (i32.load (local.get $9) ) (i32.const 0) (local.get $13) ) (global.get $tempRet0) (local.get $12) (i32.const 0) ) ) (local.tee $17 (global.get $tempRet0) ) (i32.const 1000000000) (i32.const 0) ) ) (local.set $12 (call $___udivdi3 (local.get $12) (local.get $17) (i32.const 1000000000) (i32.const 0) ) ) (br_if $while-in66 (i32.ge_u (local.tee $9 (i32.add (local.get $9) (i32.const -4) ) ) (local.get $5) ) ) ) (br_if $do-once63 (i32.eqz (local.get $12) ) ) (i32.store (local.tee $5 (i32.add (local.get $5) (i32.const -4) ) ) (local.get $12) ) ) ) ) (loop $while-in68 (if (i32.gt_u (local.get $7) (local.get $5) ) (if (i32.eqz (i32.load (local.tee $9 (i32.add (local.get $7) (i32.const -4) ) ) ) ) (block (local.set $7 (local.get $9) ) (br $while-in68) ) ) ) ) (i32.store (local.get $20) (local.tee $9 (i32.sub (i32.load (local.get $20) ) (local.get $13) ) ) ) (br_if $while-in62 (i32.gt_s (local.get $9) (i32.const 0) ) ) ) ) (local.set $5 (local.get $8) ) ) (local.set $17 (select (i32.const 6) (local.get $6) (i32.lt_s (local.get $6) (i32.const 0) ) ) ) (if (i32.lt_s (local.get $9) (i32.const 0) ) (block (local.set $21 (i32.add (call $i32s-div (i32.add (local.get $17) (i32.const 25) ) (i32.const 9) ) (i32.const 1) ) ) (local.set $32 (i32.eq (local.get $24) (i32.const 102) ) ) (local.set $6 (local.get $5) ) (local.set $5 (local.get $7) ) (loop $while-in70 (local.set $13 (select (i32.const 9) (local.tee $7 (i32.sub (i32.const 0) (local.get $9) ) ) (i32.gt_s (local.get $7) (i32.const 9) ) ) ) (block $do-once71 (if (i32.lt_u (local.get $6) (local.get $5) ) (block (local.set $12 (i32.add (i32.shl (i32.const 1) (local.get $13) ) (i32.const -1) ) ) (local.set $38 (i32.shr_u (i32.const 1000000000) (local.get $13) ) ) (local.set $9 (i32.const 0) ) (local.set $7 (local.get $6) ) (loop $while-in74 (i32.store (local.get $7) (i32.add (i32.shr_u (local.tee $33 (i32.load (local.get $7) ) ) (local.get $13) ) (local.get $9) ) ) (local.set $9 (i32.mul (i32.and (local.get $33) (local.get $12) ) (local.get $38) ) ) (br_if $while-in74 (i32.lt_u (local.tee $7 (i32.add (local.get $7) (i32.const 4) ) ) (local.get $5) ) ) ) (local.set $7 (select (local.get $6) (i32.add (local.get $6) (i32.const 4) ) (i32.load (local.get $6) ) ) ) (br_if $do-once71 (i32.eqz (local.get $9) ) ) (i32.store (local.get $5) (local.get $9) ) (local.set $5 (i32.add (local.get $5) (i32.const 4) ) ) ) (local.set $7 (select (local.get $6) (i32.add (local.get $6) (i32.const 4) ) (i32.load (local.get $6) ) ) ) ) ) (local.set $12 (select (i32.add (local.tee $6 (select (local.get $8) (local.get $7) (local.get $32) ) ) (i32.shl (local.get $21) (i32.const 2) ) ) (local.get $5) (i32.gt_s (i32.shr_s (i32.sub (local.get $5) (local.get $6) ) (i32.const 2) ) (local.get $21) ) ) ) (i32.store (local.get $20) (local.tee $9 (i32.add (i32.load (local.get $20) ) (local.get $13) ) ) ) (if (i32.lt_s (local.get $9) (i32.const 0) ) (block (local.set $6 (local.get $7) ) (local.set $5 (local.get $12) ) (br $while-in70) ) (block (local.set $5 (local.get $7) ) (local.set $9 (local.get $12) ) ) ) ) ) (local.set $9 (local.get $7) ) ) (local.set $21 (local.get $8) ) (block $do-once75 (if (i32.lt_u (local.get $5) (local.get $9) ) (block (local.set $7 (i32.mul (i32.shr_s (i32.sub (local.get $21) (local.get $5) ) (i32.const 2) ) (i32.const 9) ) ) (br_if $do-once75 (i32.lt_u (local.tee $12 (i32.load (local.get $5) ) ) (i32.const 10) ) ) (local.set $6 (i32.const 10) ) (loop $while-in78 (local.set $7 (i32.add (local.get $7) (i32.const 1) ) ) (br_if $while-in78 (i32.ge_u (local.get $12) (local.tee $6 (i32.mul (local.get $6) (i32.const 10) ) ) ) ) ) ) (local.set $7 (i32.const 0) ) ) ) (local.set $5 (if (result i32) (i32.lt_s (local.tee $6 (i32.add (i32.sub (local.get $17) (select (local.get $7) (i32.const 0) (i32.ne (local.get $24) (i32.const 102) ) ) ) (i32.shr_s (i32.shl (i32.and (local.tee $32 (i32.ne (local.get $17) (i32.const 0) ) ) (local.tee $38 (i32.eq (local.get $24) (i32.const 103) ) ) ) (i32.const 31) ) (i32.const 31) ) ) ) (i32.add (i32.mul (i32.shr_s (i32.sub (local.get $9) (local.get $21) ) (i32.const 2) ) (i32.const 9) ) (i32.const -9) ) ) (block (result i32) (local.set $13 (call $i32s-div (local.tee $6 (i32.add (local.get $6) (i32.const 9216) ) ) (i32.const 9) ) ) (if (i32.lt_s (local.tee $6 (i32.add (if (result i32) (local.tee $12 (i32.const 9) ) (i32.rem_s (local.get $6) (local.get $12) ) (i32.const 0) ) (i32.const 1) ) ) (i32.const 9) ) (block (local.set $12 (i32.const 10) ) (loop $while-in80 (local.set $12 (i32.mul (local.get $12) (i32.const 10) ) ) (br_if $while-in80 (i32.ne (local.tee $6 (i32.add (local.get $6) (i32.const 1) ) ) (i32.const 9) ) ) ) ) (local.set $12 (i32.const 10) ) ) (local.set $13 (call $i32u-rem (local.tee $24 (i32.load (local.tee $6 (i32.add (i32.add (local.get $8) (i32.shl (local.get $13) (i32.const 2) ) ) (i32.const -4092) ) ) ) ) (local.get $12) ) ) (block $do-once81 (if (i32.eqz (i32.and (local.tee $33 (i32.eq (i32.add (local.get $6) (i32.const 4) ) (local.get $9) ) ) (i32.eqz (local.get $13) ) ) ) (block (local.set $50 (call $i32u-div (local.get $24) (local.get $12) ) ) (local.set $15 (if (result f64) (i32.lt_u (local.get $13) (local.tee $51 (call $i32s-div (local.get $12) (i32.const 2) ) ) ) (f64.const 0.5) (select (f64.const 1) (f64.const 1.5) (i32.and (local.get $33) (i32.eq (local.get $13) (local.get $51) ) ) ) ) ) (local.set $23 (select (f64.const 9007199254740994) (f64.const 9007199254740992) (i32.and (local.get $50) (i32.const 1) ) ) ) (block $do-once83 (if (local.get $27) (block (br_if $do-once83 (i32.ne (i32.load8_s (local.get $31) ) (i32.const 45) ) ) (local.set $23 (f64.neg (local.get $23) ) ) (local.set $15 (f64.neg (local.get $15) ) ) ) ) ) (i32.store (local.get $6) (local.tee $13 (i32.sub (local.get $24) (local.get $13) ) ) ) (br_if $do-once81 (f64.eq (f64.add (local.get $23) (local.get $15) ) (local.get $23) ) ) (i32.store (local.get $6) (local.tee $7 (i32.add (local.get $13) (local.get $12) ) ) ) (if (i32.gt_u (local.get $7) (i32.const 999999999) ) (loop $while-in86 (i32.store (local.get $6) (i32.const 0) ) (if (i32.lt_u (local.tee $6 (i32.add (local.get $6) (i32.const -4) ) ) (local.get $5) ) (i32.store (local.tee $5 (i32.add (local.get $5) (i32.const -4) ) ) (i32.const 0) ) ) (i32.store (local.get $6) (local.tee $7 (i32.add (i32.load (local.get $6) ) (i32.const 1) ) ) ) (br_if $while-in86 (i32.gt_u (local.get $7) (i32.const 999999999) ) ) ) ) (local.set $7 (i32.mul (i32.shr_s (i32.sub (local.get $21) (local.get $5) ) (i32.const 2) ) (i32.const 9) ) ) (br_if $do-once81 (i32.lt_u (local.tee $13 (i32.load (local.get $5) ) ) (i32.const 10) ) ) (local.set $12 (i32.const 10) ) (loop $while-in88 (local.set $7 (i32.add (local.get $7) (i32.const 1) ) ) (br_if $while-in88 (i32.ge_u (local.get $13) (local.tee $12 (i32.mul (local.get $12) (i32.const 10) ) ) ) ) ) ) ) ) (local.set $12 (local.get $5) ) (local.set $13 (local.get $7) ) (select (local.tee $5 (i32.add (local.get $6) (i32.const 4) ) ) (local.get $9) (i32.gt_u (local.get $9) (local.get $5) ) ) ) (block (result i32) (local.set $12 (local.get $5) ) (local.set $13 (local.get $7) ) (local.get $9) ) ) ) (local.set $33 (i32.sub (i32.const 0) (local.get $13) ) ) (loop $while-in90 (block $while-out89 (if (i32.le_u (local.get $5) (local.get $12) ) (block (local.set $24 (i32.const 0) ) (local.set $9 (local.get $5) ) (br $while-out89) ) ) (if (i32.load (local.tee $7 (i32.add (local.get $5) (i32.const -4) ) ) ) (block (local.set $24 (i32.const 1) ) (local.set $9 (local.get $5) ) ) (block (local.set $5 (local.get $7) ) (br $while-in90) ) ) ) ) (call $_pad (local.get $0) (i32.const 32) (local.get $14) (local.tee $13 (i32.add (i32.add (i32.add (i32.add (local.get $27) (i32.const 1) ) (local.tee $5 (block $do-once91 (result i32) (if (result i32) (local.get $38) (block (result i32) (local.set $7 (if (result i32) (i32.and (i32.gt_s (local.tee $5 (i32.add (i32.xor (local.get $32) (i32.const 1) ) (local.get $17) ) ) (local.get $13) ) (i32.gt_s (local.get $13) (i32.const -5) ) ) (block (result i32) (local.set $17 (i32.sub (i32.add (local.get $5) (i32.const -1) ) (local.get $13) ) ) (i32.add (local.get $18) (i32.const -1) ) ) (block (result i32) (local.set $17 (i32.add (local.get $5) (i32.const -1) ) ) (i32.add (local.get $18) (i32.const -2) ) ) ) ) (if (local.tee $5 (i32.and (local.get $11) (i32.const 8) ) ) (block (local.set $21 (local.get $5) ) (br $do-once91 (local.get $17) ) ) ) (block $do-once93 (if (local.get $24) (block (if (i32.eqz (local.tee $18 (i32.load (i32.add (local.get $9) (i32.const -4) ) ) ) ) (block (local.set $5 (i32.const 9) ) (br $do-once93) ) ) (if (call $i32u-rem (local.get $18) (i32.const 10) ) (block (local.set $5 (i32.const 0) ) (br $do-once93) ) (block (local.set $6 (i32.const 10) ) (local.set $5 (i32.const 0) ) ) ) (loop $while-in96 (local.set $5 (i32.add (local.get $5) (i32.const 1) ) ) (br_if $while-in96 (i32.eqz (call $i32u-rem (local.get $18) (local.tee $6 (i32.mul (local.get $6) (i32.const 10) ) ) ) ) ) ) ) (local.set $5 (i32.const 9) ) ) ) (local.set $6 (i32.add (i32.mul (i32.shr_s (i32.sub (local.get $9) (local.get $21) ) (i32.const 2) ) (i32.const 9) ) (i32.const -9) ) ) (if (result i32) (i32.eq (i32.or (local.get $7) (i32.const 32) ) (i32.const 102) ) (block (result i32) (local.set $21 (i32.const 0) ) (select (local.get $17) (local.tee $5 (select (i32.const 0) (local.tee $5 (i32.sub (local.get $6) (local.get $5) ) ) (i32.lt_s (local.get $5) (i32.const 0) ) ) ) (i32.lt_s (local.get $17) (local.get $5) ) ) ) (block (result i32) (local.set $21 (i32.const 0) ) (select (local.get $17) (local.tee $5 (select (i32.const 0) (local.tee $5 (i32.sub (i32.add (local.get $6) (local.get $13) ) (local.get $5) ) ) (i32.lt_s (local.get $5) (i32.const 0) ) ) ) (i32.lt_s (local.get $17) (local.get $5) ) ) ) ) ) (block (result i32) (local.set $21 (i32.and (local.get $11) (i32.const 8) ) ) (local.set $7 (local.get $18) ) (local.get $17) ) ) ) ) ) (i32.ne (local.tee $32 (i32.or (local.get $5) (local.get $21) ) ) (i32.const 0) ) ) (if (result i32) (local.tee $17 (i32.eq (i32.or (local.get $7) (i32.const 32) ) (i32.const 102) ) ) (block (result i32) (local.set $18 (i32.const 0) ) (select (local.get $13) (i32.const 0) (i32.gt_s (local.get $13) (i32.const 0) ) ) ) (block (result i32) (if (i32.lt_s (i32.sub (local.get $28) (local.tee $6 (call $_fmt_u (local.tee $6 (select (local.get $33) (local.get $13) (i32.lt_s (local.get $13) (i32.const 0) ) ) ) (i32.shr_s (i32.shl (i32.lt_s (local.get $6) (i32.const 0) ) (i32.const 31) ) (i32.const 31) ) (local.get $34) ) ) ) (i32.const 2) ) (loop $while-in98 (i32.store8 (local.tee $6 (i32.add (local.get $6) (i32.const -1) ) ) (i32.const 48) ) (br_if $while-in98 (i32.lt_s (i32.sub (local.get $28) (local.get $6) ) (i32.const 2) ) ) ) ) (i32.store8 (i32.add (local.get $6) (i32.const -1) ) (i32.add (i32.and (i32.shr_s (local.get $13) (i32.const 31) ) (i32.const 2) ) (i32.const 43) ) ) (i32.store8 (local.tee $6 (i32.add (local.get $6) (i32.const -2) ) ) (local.get $7) ) (local.set $18 (local.get $6) ) (i32.sub (local.get $28) (local.get $6) ) ) ) ) ) (local.get $11) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $31) (local.get $27) (local.get $0) ) ) ) (call $_pad (local.get $0) (i32.const 48) (local.get $14) (local.get $13) (i32.xor (local.get $11) (i32.const 65536) ) ) (block $do-once99 (if (local.get $17) (block (local.set $6 (local.tee $12 (select (local.get $8) (local.get $12) (i32.gt_u (local.get $12) (local.get $8) ) ) ) ) (loop $while-in102 (local.set $7 (call $_fmt_u (i32.load (local.get $6) ) (i32.const 0) (local.get $30) ) ) (block $do-once103 (if (i32.eq (local.get $6) (local.get $12) ) (block (br_if $do-once103 (i32.ne (local.get $7) (local.get $30) ) ) (i32.store8 (local.get $35) (i32.const 48) ) (local.set $7 (local.get $35) ) ) (block (br_if $do-once103 (i32.le_u (local.get $7) (local.get $22) ) ) (loop $while-in106 (i32.store8 (local.tee $7 (i32.add (local.get $7) (i32.const -1) ) ) (i32.const 48) ) (br_if $while-in106 (i32.gt_u (local.get $7) (local.get $22) ) ) ) ) ) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $7) (i32.sub (local.get $43) (local.get $7) ) (local.get $0) ) ) ) (if (i32.le_u (local.tee $7 (i32.add (local.get $6) (i32.const 4) ) ) (local.get $8) ) (block (local.set $6 (local.get $7) ) (br $while-in102) ) ) ) (block $do-once107 (if (local.get $32) (block (br_if $do-once107 (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (i32.const 4143) (i32.const 1) (local.get $0) ) ) ) ) ) (if (i32.and (i32.gt_s (local.get $5) (i32.const 0) ) (i32.lt_u (local.get $7) (local.get $9) ) ) (loop $while-in110 (if (i32.gt_u (local.tee $6 (call $_fmt_u (i32.load (local.get $7) ) (i32.const 0) (local.get $30) ) ) (local.get $22) ) (loop $while-in112 (i32.store8 (local.tee $6 (i32.add (local.get $6) (i32.const -1) ) ) (i32.const 48) ) (br_if $while-in112 (i32.gt_u (local.get $6) (local.get $22) ) ) ) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $6) (select (i32.const 9) (local.get $5) (i32.gt_s (local.get $5) (i32.const 9) ) ) (local.get $0) ) ) ) (local.set $6 (i32.add (local.get $5) (i32.const -9) ) ) (if (i32.and (i32.gt_s (local.get $5) (i32.const 9) ) (i32.lt_u (local.tee $7 (i32.add (local.get $7) (i32.const 4) ) ) (local.get $9) ) ) (block (local.set $5 (local.get $6) ) (br $while-in110) ) (local.set $5 (local.get $6) ) ) ) ) (call $_pad (local.get $0) (i32.const 48) (i32.add (local.get $5) (i32.const 9) ) (i32.const 9) (i32.const 0) ) ) (block (local.set $9 (select (local.get $9) (i32.add (local.get $12) (i32.const 4) ) (local.get $24) ) ) (if (i32.gt_s (local.get $5) (i32.const -1) ) (block (local.set $17 (i32.eqz (local.get $21) ) ) (local.set $6 (local.get $12) ) (local.set $7 (local.get $5) ) (loop $while-in114 (if (i32.eq (local.tee $5 (call $_fmt_u (i32.load (local.get $6) ) (i32.const 0) (local.get $30) ) ) (local.get $30) ) (block (i32.store8 (local.get $35) (i32.const 48) ) (local.set $5 (local.get $35) ) ) ) (block $do-once115 (if (i32.eq (local.get $6) (local.get $12) ) (block (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $5) (i32.const 1) (local.get $0) ) ) ) (local.set $5 (i32.add (local.get $5) (i32.const 1) ) ) (br_if $do-once115 (i32.and (local.get $17) (i32.lt_s (local.get $7) (i32.const 1) ) ) ) (br_if $do-once115 (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (i32.const 4143) (i32.const 1) (local.get $0) ) ) ) (block (br_if $do-once115 (i32.le_u (local.get $5) (local.get $22) ) ) (loop $while-in118 (i32.store8 (local.tee $5 (i32.add (local.get $5) (i32.const -1) ) ) (i32.const 48) ) (br_if $while-in118 (i32.gt_u (local.get $5) (local.get $22) ) ) ) ) ) ) (local.set $8 (i32.sub (local.get $43) (local.get $5) ) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $5) (select (local.get $8) (local.get $7) (i32.gt_s (local.get $7) (local.get $8) ) ) (local.get $0) ) ) ) (br_if $while-in114 (i32.and (i32.lt_u (local.tee $6 (i32.add (local.get $6) (i32.const 4) ) ) (local.get $9) ) (i32.gt_s (local.tee $7 (i32.sub (local.get $7) (local.get $8) ) ) (i32.const -1) ) ) ) (local.set $5 (local.get $7) ) ) ) ) (call $_pad (local.get $0) (i32.const 48) (i32.add (local.get $5) (i32.const 18) ) (i32.const 18) (i32.const 0) ) (br_if $do-once99 (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $18) (i32.sub (local.get $28) (local.get $18) ) (local.get $0) ) ) ) ) ) (call $_pad (local.get $0) (i32.const 32) (local.get $14) (local.get $13) (i32.xor (local.get $11) (i32.const 8192) ) ) (select (local.get $14) (local.get $13) (i32.lt_s (local.get $13) (local.get $14) ) ) ) (block (result i32) (call $_pad (local.get $0) (i32.const 32) (local.get $14) (local.tee $7 (i32.add (local.tee $9 (select (i32.const 0) (local.get $27) (local.tee $6 (i32.or (f64.ne (local.get $15) (local.get $15) ) (i32.const 0) ) ) ) ) (i32.const 3) ) ) (local.get $8) ) (if (i32.eqz (i32.and (local.tee $5 (i32.load (local.get $0) ) ) (i32.const 32) ) ) (block (drop (call $___fwritex (local.get $31) (local.get $9) (local.get $0) ) ) (local.set $5 (i32.load (local.get $0) ) ) ) ) (local.set $6 (select (select (i32.const 4135) (i32.const 4139) (local.tee $8 (i32.ne (i32.and (local.get $18) (i32.const 32) ) (i32.const 0) ) ) ) (select (i32.const 4127) (i32.const 4131) (local.get $8) ) (local.get $6) ) ) (if (i32.eqz (i32.and (local.get $5) (i32.const 32) ) ) (drop (call $___fwritex (local.get $6) (i32.const 3) (local.get $0) ) ) ) (call $_pad (local.get $0) (i32.const 32) (local.get $14) (local.get $7) (i32.xor (local.get $11) (i32.const 8192) ) ) (select (local.get $14) (local.get $7) (i32.lt_s (local.get $7) (local.get $14) ) ) ) ) ) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $7) ) (br $label$continue$L1) ) (local.set $7 (local.get $5) ) (local.set $12 (local.get $6) ) (local.set $8 (i32.const 0) ) (local.set $9 (i32.const 4091) ) (br $__rjto$8 (local.get $26) ) ) (local.set $9 (i32.and (local.get $18) (i32.const 32) ) ) (if (i32.and (i32.eqz (local.tee $8 (i32.load (local.tee $5 (local.get $19) ) ) ) ) (i32.eqz (local.tee $11 (i32.load offset=4 (local.get $5) ) ) ) ) (block (local.set $5 (local.get $26) ) (local.set $8 (i32.const 0) ) (local.set $9 (i32.const 4091) ) (br $__rjti$8) ) (block (local.set $5 (local.get $8) ) (local.set $8 (local.get $26) ) (loop $while-in123 (i32.store8 (local.tee $8 (i32.add (local.get $8) (i32.const -1) ) ) (i32.or (i32.load8_u (i32.add (i32.and (local.get $5) (i32.const 15) ) (i32.const 4075) ) ) (local.get $9) ) ) (br_if $while-in123 (i32.eqz (i32.and (i32.eqz (local.tee $5 (call $_bitshift64Lshr (local.get $5) (local.get $11) (i32.const 4) ) ) ) (i32.eqz (local.tee $11 (global.get $tempRet0) ) ) ) ) ) (local.set $5 (local.get $8) ) ) (local.set $8 (if (result i32) (i32.or (i32.eqz (i32.and (local.get $7) (i32.const 8) ) ) (i32.and (i32.eqz (i32.load (local.tee $11 (local.get $19) ) ) ) (i32.eqz (i32.load offset=4 (local.get $11) ) ) ) ) (block (result i32) (local.set $9 (i32.const 4091) ) (i32.const 0) ) (block (result i32) (local.set $9 (i32.add (i32.shr_s (local.get $18) (i32.const 4) ) (i32.const 4091) ) ) (i32.const 2) ) ) ) (br $__rjti$8) ) ) ) (local.set $5 (call $_fmt_u (local.get $5) (local.get $7) (local.get $26) ) ) (local.set $7 (local.get $11) ) (br $__rjti$8) ) (local.set $18 (i32.eqz (local.tee $13 (call $_memchr (local.get $5) (i32.const 0) (local.get $6) ) ) ) ) (local.set $7 (local.get $5) ) (local.set $11 (local.get $8) ) (local.set $12 (select (local.get $6) (i32.sub (local.get $13) (local.get $5) ) (local.get $18) ) ) (local.set $8 (i32.const 0) ) (local.set $9 (i32.const 4091) ) (br $__rjto$8 (select (i32.add (local.get $5) (local.get $6) ) (local.get $13) (local.get $18) ) ) ) (local.set $5 (i32.const 0) ) (local.set $7 (i32.const 0) ) (local.set $6 (i32.load (local.get $19) ) ) (loop $while-in125 (block $while-out124 (br_if $while-out124 (i32.eqz (local.tee $9 (i32.load (local.get $6) ) ) ) ) (br_if $while-out124 (i32.or (i32.lt_s (local.tee $7 (call $_wctomb (local.get $36) (local.get $9) ) ) (i32.const 0) ) (i32.gt_u (local.get $7) (i32.sub (local.get $8) (local.get $5) ) ) ) ) (local.set $6 (i32.add (local.get $6) (i32.const 4) ) ) (br_if $while-in125 (i32.gt_u (local.get $8) (local.tee $5 (i32.add (local.get $7) (local.get $5) ) ) ) ) ) ) (if (i32.lt_s (local.get $7) (i32.const 0) ) (block (local.set $16 (i32.const -1) ) (br $label$break$L1) ) ) (call $_pad (local.get $0) (i32.const 32) (local.get $14) (local.get $5) (local.get $11) ) (if (local.get $5) (block (local.set $6 (i32.const 0) ) (local.set $7 (i32.load (local.get $19) ) ) (loop $while-in127 (if (i32.eqz (local.tee $8 (i32.load (local.get $7) ) ) ) (block (local.set $7 (local.get $5) ) (br $__rjti$7) ) ) (if (i32.gt_s (local.tee $6 (i32.add (local.tee $8 (call $_wctomb (local.get $36) (local.get $8) ) ) (local.get $6) ) ) (local.get $5) ) (block (local.set $7 (local.get $5) ) (br $__rjti$7) ) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $36) (local.get $8) (local.get $0) ) ) ) (local.set $7 (i32.add (local.get $7) (i32.const 4) ) ) (br_if $while-in127 (i32.lt_u (local.get $6) (local.get $5) ) ) (local.set $7 (local.get $5) ) ) ) (local.set $7 (i32.const 0) ) ) ) (call $_pad (local.get $0) (i32.const 32) (local.get $14) (local.get $7) (i32.xor (local.get $11) (i32.const 8192) ) ) (local.set $5 (local.get $10) ) (local.set $10 (select (local.get $14) (local.get $7) (i32.gt_s (local.get $14) (local.get $7) ) ) ) (br $label$continue$L1) ) (local.set $11 (select (i32.and (local.get $7) (i32.const -65537) ) (local.get $7) (i32.gt_s (local.get $6) (i32.const -1) ) ) ) (local.set $12 (if (result i32) (i32.or (local.get $6) (local.tee $12 (i32.or (i32.ne (i32.load (local.tee $7 (local.get $19) ) ) (i32.const 0) ) (i32.ne (i32.load offset=4 (local.get $7) ) (i32.const 0) ) ) ) ) (block (result i32) (local.set $7 (local.get $5) ) (select (local.get $6) (local.tee $5 (i32.add (i32.xor (i32.and (local.get $12) (i32.const 1) ) (i32.const 1) ) (i32.sub (local.get $39) (local.get $5) ) ) ) (i32.gt_s (local.get $6) (local.get $5) ) ) ) (block (result i32) (local.set $7 (local.get $26) ) (i32.const 0) ) ) ) (local.get $26) ) ) (call $_pad (local.get $0) (i32.const 32) (local.tee $6 (select (local.tee $5 (i32.add (local.get $8) (local.tee $12 (select (local.tee $13 (i32.sub (local.get $5) (local.get $7) ) ) (local.get $12) (i32.lt_s (local.get $12) (local.get $13) ) ) ) ) ) (local.get $14) (i32.lt_s (local.get $14) (local.get $5) ) ) ) (local.get $5) (local.get $11) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $9) (local.get $8) (local.get $0) ) ) ) (call $_pad (local.get $0) (i32.const 48) (local.get $6) (local.get $5) (i32.xor (local.get $11) (i32.const 65536) ) ) (call $_pad (local.get $0) (i32.const 48) (local.get $12) (local.get $13) (i32.const 0) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 32) ) ) (drop (call $___fwritex (local.get $7) (local.get $13) (local.get $0) ) ) ) (call $_pad (local.get $0) (i32.const 32) (local.get $6) (local.get $5) (i32.xor (local.get $11) (i32.const 8192) ) ) (local.set $5 (local.get $10) ) (local.set $10 (local.get $6) ) (br $label$continue$L1) ) ) (br $label$break$L343) ) (if (i32.eqz (local.get $0) ) (if (local.get $1) (block (local.set $0 (i32.const 1) ) (loop $while-in130 (if (local.tee $1 (i32.load (i32.add (local.get $4) (i32.shl (local.get $0) (i32.const 2) ) ) ) ) (block (call $_pop_arg_336 (i32.add (local.get $3) (i32.shl (local.get $0) (i32.const 3) ) ) (local.get $1) (local.get $2) ) (br_if $while-in130 (i32.lt_s (local.tee $0 (i32.add (local.get $0) (i32.const 1) ) ) (i32.const 10) ) ) (local.set $16 (i32.const 1) ) (br $label$break$L343) ) ) ) (if (i32.lt_s (local.get $0) (i32.const 10) ) (loop $while-in132 (if (i32.load (i32.add (local.get $4) (i32.shl (local.get $0) (i32.const 2) ) ) ) (block (local.set $16 (i32.const -1) ) (br $label$break$L343) ) ) (br_if $while-in132 (i32.lt_s (local.tee $0 (i32.add (local.get $0) (i32.const 1) ) ) (i32.const 10) ) ) (local.set $16 (i32.const 1) ) ) (local.set $16 (i32.const 1) ) ) ) (local.set $16 (i32.const 0) ) ) ) ) (global.set $STACKTOP (local.get $25) ) (local.get $16) ) ;; CHECK: (func $_pop_arg_336 (param $0 i32) (param $1 i32) (param $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 f64) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block $label$break$L1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $switch-default ;; CHECK-NEXT: (block $switch-case9 ;; CHECK-NEXT: (block $switch-case8 ;; CHECK-NEXT: (block $switch-case7 ;; CHECK-NEXT: (block $switch-case6 ;; CHECK-NEXT: (block $switch-case5 ;; CHECK-NEXT: (block $switch-case4 ;; CHECK-NEXT: (block $switch-case3 ;; CHECK-NEXT: (block $switch-case2 ;; CHECK-NEXT: (block $switch-case1 ;; CHECK-NEXT: (block $switch-case ;; CHECK-NEXT: (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_pop_arg_336 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f64) (local $5 i32) (block $label$break$L1 (if (i32.le_u (local.get $1) (i32.const 20) ) (block $switch-default (block $switch-case9 (block $switch-case8 (block $switch-case7 (block $switch-case6 (block $switch-case5 (block $switch-case4 (block $switch-case3 (block $switch-case2 (block $switch-case1 (block $switch-case (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default (i32.sub (local.get $1) (i32.const 9) ) ) ) (local.set $3 (i32.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 4) ) ) (i32.store (local.get $0) (local.get $3) ) (br $label$break$L1) ) (local.set $1 (i32.load (local.tee $3 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $3) (i32.const 4) ) ) (i32.store (local.get $0) (local.get $1) ) (i32.store offset=4 (local.get $0) (i32.shr_s (i32.shl (i32.lt_s (local.get $1) (i32.const 0) ) (i32.const 31) ) (i32.const 31) ) ) (br $label$break$L1) ) (local.set $3 (i32.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 4) ) ) (i32.store (local.get $0) (local.get $3) ) (i32.store offset=4 (local.get $0) (i32.const 0) ) (br $label$break$L1) ) (local.set $5 (i32.load (local.tee $3 (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 7) ) (i32.const -8) ) ) ) ) ) (local.set $3 (i32.load offset=4 (local.get $3) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 8) ) ) (i32.store (local.get $0) (local.get $5) ) (i32.store offset=4 (local.get $0) (local.get $3) ) (br $label$break$L1) ) (local.set $3 (i32.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 4) ) ) (i32.store (local.get $0) (local.tee $1 (i32.shr_s (i32.shl (i32.and (local.get $3) (i32.const 65535) ) (i32.const 16) ) (i32.const 16) ) ) ) (i32.store offset=4 (local.get $0) (i32.shr_s (i32.shl (i32.lt_s (local.get $1) (i32.const 0) ) (i32.const 31) ) (i32.const 31) ) ) (br $label$break$L1) ) (local.set $3 (i32.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 4) ) ) (i32.store (local.get $0) (i32.and (local.get $3) (i32.const 65535) ) ) (i32.store offset=4 (local.get $0) (i32.const 0) ) (br $label$break$L1) ) (local.set $3 (i32.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 4) ) ) (i32.store (local.get $0) (local.tee $1 (i32.shr_s (i32.shl (i32.and (local.get $3) (i32.const 255) ) (i32.const 24) ) (i32.const 24) ) ) ) (i32.store offset=4 (local.get $0) (i32.shr_s (i32.shl (i32.lt_s (local.get $1) (i32.const 0) ) (i32.const 31) ) (i32.const 31) ) ) (br $label$break$L1) ) (local.set $3 (i32.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 3) ) (i32.const -4) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 4) ) ) (i32.store (local.get $0) (i32.and (local.get $3) (i32.const 255) ) ) (i32.store offset=4 (local.get $0) (i32.const 0) ) (br $label$break$L1) ) (local.set $4 (f64.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 7) ) (i32.const -8) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 8) ) ) (f64.store (local.get $0) (local.get $4) ) (br $label$break$L1) ) (local.set $4 (f64.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) (i32.const 7) ) (i32.const -8) ) ) ) ) (i32.store (local.get $2) (i32.add (local.get $1) (i32.const 8) ) ) (f64.store (local.get $0) (local.get $4) ) ) ) ) ) ;; CHECK: (func $_fmt_u (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $___uremdi3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $___udivdi3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (loop $while-in1 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) (func $_fmt_u (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (if (i32.or (i32.gt_u (local.get $1) (i32.const 0) ) (i32.and (i32.eqz (local.get $1) ) (i32.gt_u (local.get $0) (i32.const -1) ) ) ) (loop $while-in (i32.store8 (local.tee $2 (i32.add (local.get $2) (i32.const -1) ) ) (i32.or (local.tee $3 (call $___uremdi3 (local.get $0) (local.get $1) (i32.const 10) (i32.const 0) ) ) (i32.const 48) ) ) (local.set $3 (call $___udivdi3 (local.get $0) (local.get $1) (i32.const 10) (i32.const 0) ) ) (local.set $4 (global.get $tempRet0) ) (if (i32.or (i32.gt_u (local.get $1) (i32.const 9) ) (i32.and (i32.eq (local.get $1) (i32.const 9) ) (i32.gt_u (local.get $0) (i32.const -1) ) ) ) (block (local.set $0 (local.get $3) ) (local.set $1 (local.get $4) ) (br $while-in) ) (local.set $0 (local.get $3) ) ) ) ) (if (local.get $0) (loop $while-in1 (i32.store8 (local.tee $2 (i32.add (local.get $2) (i32.const -1) ) ) (i32.or (call $i32u-rem (local.get $0) (i32.const 10) ) (i32.const 48) ) ) (local.set $1 (call $i32u-div (local.get $0) (i32.const 10) ) ) (if (i32.ge_u (local.get $0) (i32.const 10) ) (block (local.set $0 (local.get $1) ) (br $while-in1) ) ) ) ) (local.get $2) ) ;; CHECK: (func $_pad (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 73728) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $_memset ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block271 ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (block $block273 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const -256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_pad (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local.set $7 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 256) ) ) (if (i32.ge_s (global.get $STACKTOP) (global.get $STACK_MAX) ) (call $abort) ) (local.set $6 (local.get $7) ) (block $do-once (if (i32.and (i32.gt_s (local.get $2) (local.get $3) ) (i32.eqz (i32.and (local.get $4) (i32.const 73728) ) ) ) (block (drop (call $_memset (local.get $6) (local.get $1) (select (i32.const 256) (local.tee $5 (i32.sub (local.get $2) (local.get $3) ) ) (i32.gt_u (local.get $5) (i32.const 256) ) ) ) ) (local.set $4 (i32.eqz (i32.and (local.tee $1 (i32.load (local.get $0) ) ) (i32.const 32) ) ) ) (if (i32.gt_u (local.get $5) (i32.const 255) ) (block (loop $while-in (if (local.get $4) (block (drop (call $___fwritex (local.get $6) (i32.const 256) (local.get $0) ) ) (local.set $1 (i32.load (local.get $0) ) ) ) ) (local.set $4 (i32.eqz (i32.and (local.get $1) (i32.const 32) ) ) ) (br_if $while-in (i32.gt_u (local.tee $5 (i32.add (local.get $5) (i32.const -256) ) ) (i32.const 255) ) ) ) (br_if $do-once (i32.eqz (local.get $4) ) ) (local.set $5 (i32.and (i32.sub (local.get $2) (local.get $3) ) (i32.const 255) ) ) ) (br_if $do-once (i32.eqz (local.get $4) ) ) ) (drop (call $___fwritex (local.get $6) (local.get $5) (local.get $0) ) ) ) ) ) (global.set $STACKTOP (local.get $7) ) ) ;; CHECK: (func $_malloc (param $0 i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (local $16 i32) ;; CHECK-NEXT: (local $17 i32) ;; CHECK-NEXT: (local $18 i32) ;; CHECK-NEXT: (block $folding-inner0 ;; CHECK-NEXT: (block $do-once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 245) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $13 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block275 ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block277 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block280 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block282 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (block $block284 ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block286 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block287 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block290 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (block $block292 ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block295 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block296 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block298 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=480 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (block $while-out ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=16 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=20 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block301 ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load offset=24 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block305 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block308 ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in7 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block310 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block312 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block314 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block315 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block319 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once8 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (block $block321 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=28 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block323 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block325 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block326 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once8 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=16 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block332 ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=20 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block335 ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block337 ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block338 ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block340 ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block343 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block344 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -65) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block346 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $18 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block348 ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 16777215) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1048320) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 245760) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$3 ;; CHECK-NEXT: (block $__rjti$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=480 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block352 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in14 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block355 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block356 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load offset=20 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (block $block358 ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block359 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block360 ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block362 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block364 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load offset=480 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (block $block366 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in16 ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load offset=16 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block368 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in16 ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load offset=20 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block371 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $12 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.load offset=24 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once17 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block375 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block378 ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in20 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block380 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block382 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block384 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block385 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block389 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once21 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (block $block391 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=28 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block393 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block395 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block396 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once21 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=16 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block402 ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=20 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block405 ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once25 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block407 ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block408 ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block410 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block413 ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block414 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16777215) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1048320) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 245760) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=28 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block418 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$1 ;; CHECK-NEXT: (block $__rjti$1 ;; CHECK-NEXT: (loop $while-in28 ;; CHECK-NEXT: (br_if $__rjti$1 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block420 ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block422 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block424 ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block426 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block428 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block429 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $folding-inner0 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (call $_sysconf ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block432 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 656) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 652) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 660) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 664) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 668) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 620) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 648) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (call $_time ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1431655768) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 656) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 47) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 616) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 608) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$13 ;; CHECK-NEXT: (block $__rjti$13 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 620) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block437 ;; CHECK-NEXT: (block $label$break$L279 ;; CHECK-NEXT: (block $__rjti$5 ;; CHECK-NEXT: (block $__rjti$4 ;; CHECK-NEXT: (br_if $__rjti$4 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in34 ;; CHECK-NEXT: (block $while-out33 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block440 ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-out33) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in34 ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (call $_sbrk ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$13 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block443 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L279) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (call $_sbrk ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block445 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 652) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 608) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block448 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 616) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$break$L279 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$13 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (call $_sbrk ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L279) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 656) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (call $_sbrk ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block453 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $_sbrk ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L279) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block455 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 620) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 620) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (call $_sbrk ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (call $_sbrk ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__rjti$13 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 608) ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 608) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 612) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 612) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once40 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $6 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block460 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$10 ;; CHECK-NEXT: (block $__rjti$10 ;; CHECK-NEXT: (loop $while-in45 ;; CHECK-NEXT: (br_if $__rjti$10 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in45 ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block463 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 204) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 664) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block465 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$11 ;; CHECK-NEXT: (block $__rjti$11 ;; CHECK-NEXT: (loop $while-in47 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block467 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in47 ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block469 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $9 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once48 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block471 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block472 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block474 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block476 (result i32) ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$break$L331 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block478 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once51 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block480 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once51 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block483 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L331) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once53 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block485 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block488 ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once53) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block489 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load offset=24 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once55 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block491 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block494 ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once55) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in58 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block496 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in58) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block498 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in58) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block500 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block501 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block505 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$break$L331 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once59 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=28 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block507 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once59 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L331) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block508 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$break$L331 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block514 ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$break$L331 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block516 ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block518 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once63 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block520 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block522 ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block523 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (block $do-once65 (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block525 (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $do-once65 ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 16777215) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1048320) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 245760) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=28 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block527 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$7 ;; CHECK-NEXT: (block $__rjti$7 ;; CHECK-NEXT: (loop $while-in68 ;; CHECK-NEXT: (br_if $__rjti$7 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block529 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in68) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block531 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block533 ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in70 ;; CHECK-NEXT: (block $while-out69 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-out69 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in70) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const -47) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const -40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 204) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 664) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 628) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 632) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 636) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 628) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 636) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 632) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in72 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in72 ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block536 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block538 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block541 ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block542 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16777215) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1048320) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 245760) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=28 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block546 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$9 ;; CHECK-NEXT: (block $__rjti$9 ;; CHECK-NEXT: (loop $while-in74 ;; CHECK-NEXT: (br_if $__rjti$9 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block548 ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in74) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block550 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block552 ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block553 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 628) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 636) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 212) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 208) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in43 ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in43 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const -40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 204) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 664) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $folding-inner0 ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (call $___errno_location) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_malloc (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (local $18 i32) (block $folding-inner0 (block $do-once (if (i32.lt_u (local.get $0) (i32.const 245) ) (block (if (i32.and (local.tee $5 (i32.shr_u (local.tee $11 (i32.load (i32.const 176) ) ) (local.tee $13 (i32.shr_u (local.tee $4 (select (i32.const 16) (i32.and (i32.add (local.get $0) (i32.const 11) ) (i32.const -8) ) (i32.lt_u (local.get $0) (i32.const 11) ) ) ) (i32.const 3) ) ) ) ) (i32.const 3) ) (block (local.set $10 (i32.load (local.tee $1 (i32.add (local.tee $7 (i32.load (local.tee $3 (i32.add (local.tee $2 (i32.add (i32.shl (local.tee $4 (i32.add (i32.xor (i32.and (local.get $5) (i32.const 1) ) (i32.const 1) ) (local.get $13) ) ) (i32.const 3) ) (i32.const 216) ) ) (i32.const 8) ) ) ) ) (i32.const 8) ) ) ) ) (if (i32.eq (local.get $2) (local.get $10) ) (i32.store (i32.const 176) (i32.and (local.get $11) (i32.xor (i32.shl (i32.const 1) (local.get $4) ) (i32.const -1) ) ) ) (block (if (i32.lt_u (local.get $10) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $0 (i32.add (local.get $10) (i32.const 12) ) ) ) (local.get $7) ) (block (i32.store (local.get $0) (local.get $2) ) (i32.store (local.get $3) (local.get $10) ) ) (call $_abort) ) ) ) (i32.store offset=4 (local.get $7) (i32.or (local.tee $0 (i32.shl (local.get $4) (i32.const 3) ) ) (i32.const 3) ) ) (i32.store (local.tee $0 (i32.add (i32.add (local.get $7) (local.get $0) ) (i32.const 4) ) ) (i32.or (i32.load (local.get $0) ) (i32.const 1) ) ) (return (local.get $1) ) ) ) (if (i32.gt_u (local.get $4) (local.tee $0 (i32.load (i32.const 184) ) ) ) (block (if (local.get $5) (block (local.set $10 (i32.and (i32.shr_u (local.tee $3 (i32.add (i32.and (local.tee $3 (i32.and (i32.shl (local.get $5) (local.get $13) ) (i32.or (local.tee $3 (i32.shl (i32.const 2) (local.get $13) ) ) (i32.sub (i32.const 0) (local.get $3) ) ) ) ) (i32.sub (i32.const 0) (local.get $3) ) ) (i32.const -1) ) ) (i32.const 12) ) (i32.const 16) ) ) (local.set $9 (i32.load (local.tee $7 (i32.add (local.tee $12 (i32.load (local.tee $3 (i32.add (local.tee $10 (i32.add (i32.shl (local.tee $5 (i32.add (i32.or (i32.or (i32.or (i32.or (local.tee $3 (i32.and (i32.shr_u (local.tee $7 (i32.shr_u (local.get $3) (local.get $10) ) ) (i32.const 5) ) (i32.const 8) ) ) (local.get $10) ) (local.tee $3 (i32.and (i32.shr_u (local.tee $7 (i32.shr_u (local.get $7) (local.get $3) ) ) (i32.const 2) ) (i32.const 4) ) ) ) (local.tee $3 (i32.and (i32.shr_u (local.tee $7 (i32.shr_u (local.get $7) (local.get $3) ) ) (i32.const 1) ) (i32.const 2) ) ) ) (local.tee $3 (i32.and (i32.shr_u (local.tee $7 (i32.shr_u (local.get $7) (local.get $3) ) ) (i32.const 1) ) (i32.const 1) ) ) ) (i32.shr_u (local.get $7) (local.get $3) ) ) ) (i32.const 3) ) (i32.const 216) ) ) (i32.const 8) ) ) ) ) (i32.const 8) ) ) ) ) (if (i32.eq (local.get $10) (local.get $9) ) (block (i32.store (i32.const 176) (i32.and (local.get $11) (i32.xor (i32.shl (i32.const 1) (local.get $5) ) (i32.const -1) ) ) ) (local.set $8 (local.get $0) ) ) (block (if (i32.lt_u (local.get $9) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $0 (i32.add (local.get $9) (i32.const 12) ) ) ) (local.get $12) ) (block (i32.store (local.get $0) (local.get $10) ) (i32.store (local.get $3) (local.get $9) ) (local.set $8 (i32.load (i32.const 184) ) ) ) (call $_abort) ) ) ) (i32.store offset=4 (local.get $12) (i32.or (local.get $4) (i32.const 3) ) ) (i32.store offset=4 (local.tee $10 (i32.add (local.get $12) (local.get $4) ) ) (i32.or (local.tee $5 (i32.sub (i32.shl (local.get $5) (i32.const 3) ) (local.get $4) ) ) (i32.const 1) ) ) (i32.store (i32.add (local.get $10) (local.get $5) ) (local.get $5) ) (if (local.get $8) (block (local.set $12 (i32.load (i32.const 196) ) ) (local.set $4 (i32.add (i32.shl (local.tee $0 (i32.shr_u (local.get $8) (i32.const 3) ) ) (i32.const 3) ) (i32.const 216) ) ) (if (i32.and (local.tee $3 (i32.load (i32.const 176) ) ) (local.tee $0 (i32.shl (i32.const 1) (local.get $0) ) ) ) (if (i32.lt_u (local.tee $0 (i32.load (local.tee $3 (i32.add (local.get $4) (i32.const 8) ) ) ) ) (i32.load (i32.const 192) ) ) (call $_abort) (block (local.set $2 (local.get $3) ) (local.set $1 (local.get $0) ) ) ) (block (i32.store (i32.const 176) (i32.or (local.get $3) (local.get $0) ) ) (local.set $2 (i32.add (local.get $4) (i32.const 8) ) ) (local.set $1 (local.get $4) ) ) ) (i32.store (local.get $2) (local.get $12) ) (i32.store offset=12 (local.get $1) (local.get $12) ) (i32.store offset=8 (local.get $12) (local.get $1) ) (i32.store offset=12 (local.get $12) (local.get $4) ) ) ) (i32.store (i32.const 184) (local.get $5) ) (i32.store (i32.const 196) (local.get $10) ) (return (local.get $7) ) ) ) (if (local.tee $0 (i32.load (i32.const 180) ) ) (block (local.set $2 (i32.and (i32.shr_u (local.tee $0 (i32.add (i32.and (local.get $0) (i32.sub (i32.const 0) (local.get $0) ) ) (i32.const -1) ) ) (i32.const 12) ) (i32.const 16) ) ) (local.set $7 (i32.sub (i32.and (i32.load offset=4 (local.tee $0 (i32.load offset=480 (i32.shl (i32.add (i32.or (i32.or (i32.or (i32.or (local.tee $0 (i32.and (i32.shr_u (local.tee $1 (i32.shr_u (local.get $0) (local.get $2) ) ) (i32.const 5) ) (i32.const 8) ) ) (local.get $2) ) (local.tee $0 (i32.and (i32.shr_u (local.tee $1 (i32.shr_u (local.get $1) (local.get $0) ) ) (i32.const 2) ) (i32.const 4) ) ) ) (local.tee $0 (i32.and (i32.shr_u (local.tee $1 (i32.shr_u (local.get $1) (local.get $0) ) ) (i32.const 1) ) (i32.const 2) ) ) ) (local.tee $0 (i32.and (i32.shr_u (local.tee $1 (i32.shr_u (local.get $1) (local.get $0) ) ) (i32.const 1) ) (i32.const 1) ) ) ) (i32.shr_u (local.get $1) (local.get $0) ) ) (i32.const 2) ) ) ) ) (i32.const -8) ) (local.get $4) ) ) (local.set $1 (local.get $0) ) (local.set $2 (local.get $0) ) (loop $while-in (block $while-out (if (i32.eqz (local.tee $0 (i32.load offset=16 (local.get $1) ) ) ) (if (i32.eqz (local.tee $0 (i32.load offset=20 (local.get $1) ) ) ) (block (local.set $10 (local.get $7) ) (local.set $5 (local.get $2) ) (br $while-out) ) ) ) (local.set $10 (i32.lt_u (local.tee $1 (i32.sub (i32.and (i32.load offset=4 (local.get $0) ) (i32.const -8) ) (local.get $4) ) ) (local.get $7) ) ) (local.set $7 (select (local.get $1) (local.get $7) (local.get $10) ) ) (local.set $1 (local.get $0) ) (local.set $2 (select (local.get $0) (local.get $2) (local.get $10) ) ) (br $while-in) ) ) (if (i32.lt_u (local.get $5) (local.tee $12 (i32.load (i32.const 192) ) ) ) (call $_abort) ) (if (i32.ge_u (local.get $5) (local.tee $11 (i32.add (local.get $5) (local.get $4) ) ) ) (call $_abort) ) (local.set $8 (i32.load offset=24 (local.get $5) ) ) (block $do-once4 (if (i32.eq (local.tee $0 (i32.load offset=12 (local.get $5) ) ) (local.get $5) ) (block (if (i32.eqz (local.tee $1 (i32.load (local.tee $0 (i32.add (local.get $5) (i32.const 20) ) ) ) ) ) (if (i32.eqz (local.tee $1 (i32.load (local.tee $0 (i32.add (local.get $5) (i32.const 16) ) ) ) ) ) (block (local.set $9 (i32.const 0) ) (br $do-once4) ) ) ) (loop $while-in7 (if (local.tee $2 (i32.load (local.tee $7 (i32.add (local.get $1) (i32.const 20) ) ) ) ) (block (local.set $1 (local.get $2) ) (local.set $0 (local.get $7) ) (br $while-in7) ) ) (if (local.tee $2 (i32.load (local.tee $7 (i32.add (local.get $1) (i32.const 16) ) ) ) ) (block (local.set $1 (local.get $2) ) (local.set $0 (local.get $7) ) (br $while-in7) ) ) ) (if (i32.lt_u (local.get $0) (local.get $12) ) (call $_abort) (block (i32.store (local.get $0) (i32.const 0) ) (local.set $9 (local.get $1) ) ) ) ) (block (if (i32.lt_u (local.tee $7 (i32.load offset=8 (local.get $5) ) ) (local.get $12) ) (call $_abort) ) (if (i32.ne (i32.load (local.tee $2 (i32.add (local.get $7) (i32.const 12) ) ) ) (local.get $5) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $1 (i32.add (local.get $0) (i32.const 8) ) ) ) (local.get $5) ) (block (i32.store (local.get $2) (local.get $0) ) (i32.store (local.get $1) (local.get $7) ) (local.set $9 (local.get $0) ) ) (call $_abort) ) ) ) ) (block $do-once8 (if (local.get $8) (block (if (i32.eq (local.get $5) (i32.load (local.tee $0 (i32.add (i32.shl (local.tee $1 (i32.load offset=28 (local.get $5) ) ) (i32.const 2) ) (i32.const 480) ) ) ) ) (block (i32.store (local.get $0) (local.get $9) ) (if (i32.eqz (local.get $9) ) (block (i32.store (i32.const 180) (i32.and (i32.load (i32.const 180) ) (i32.xor (i32.shl (i32.const 1) (local.get $1) ) (i32.const -1) ) ) ) (br $do-once8) ) ) ) (block (if (i32.lt_u (local.get $8) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $0 (i32.add (local.get $8) (i32.const 16) ) ) ) (local.get $5) ) (i32.store (local.get $0) (local.get $9) ) (i32.store offset=20 (local.get $8) (local.get $9) ) ) (br_if $do-once8 (i32.eqz (local.get $9) ) ) ) ) (if (i32.lt_u (local.get $9) (local.tee $0 (i32.load (i32.const 192) ) ) ) (call $_abort) ) (i32.store offset=24 (local.get $9) (local.get $8) ) (if (local.tee $1 (i32.load offset=16 (local.get $5) ) ) (if (i32.lt_u (local.get $1) (local.get $0) ) (call $_abort) (block (i32.store offset=16 (local.get $9) (local.get $1) ) (i32.store offset=24 (local.get $1) (local.get $9) ) ) ) ) (if (local.tee $0 (i32.load offset=20 (local.get $5) ) ) (if (i32.lt_u (local.get $0) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store offset=20 (local.get $9) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $9) ) ) ) ) ) ) ) (if (i32.lt_u (local.get $10) (i32.const 16) ) (block (i32.store offset=4 (local.get $5) (i32.or (local.tee $0 (i32.add (local.get $10) (local.get $4) ) ) (i32.const 3) ) ) (i32.store (local.tee $0 (i32.add (i32.add (local.get $5) (local.get $0) ) (i32.const 4) ) ) (i32.or (i32.load (local.get $0) ) (i32.const 1) ) ) ) (block (i32.store offset=4 (local.get $5) (i32.or (local.get $4) (i32.const 3) ) ) (i32.store offset=4 (local.get $11) (i32.or (local.get $10) (i32.const 1) ) ) (i32.store (i32.add (local.get $11) (local.get $10) ) (local.get $10) ) (if (local.tee $0 (i32.load (i32.const 184) ) ) (block (local.set $4 (i32.load (i32.const 196) ) ) (local.set $2 (i32.add (i32.shl (local.tee $0 (i32.shr_u (local.get $0) (i32.const 3) ) ) (i32.const 3) ) (i32.const 216) ) ) (if (i32.and (local.tee $1 (i32.load (i32.const 176) ) ) (local.tee $0 (i32.shl (i32.const 1) (local.get $0) ) ) ) (if (i32.lt_u (local.tee $0 (i32.load (local.tee $1 (i32.add (local.get $2) (i32.const 8) ) ) ) ) (i32.load (i32.const 192) ) ) (call $_abort) (block (local.set $6 (local.get $1) ) (local.set $3 (local.get $0) ) ) ) (block (i32.store (i32.const 176) (i32.or (local.get $1) (local.get $0) ) ) (local.set $6 (i32.add (local.get $2) (i32.const 8) ) ) (local.set $3 (local.get $2) ) ) ) (i32.store (local.get $6) (local.get $4) ) (i32.store offset=12 (local.get $3) (local.get $4) ) (i32.store offset=8 (local.get $4) (local.get $3) ) (i32.store offset=12 (local.get $4) (local.get $2) ) ) ) (i32.store (i32.const 184) (local.get $10) ) (i32.store (i32.const 196) (local.get $11) ) ) ) (return (i32.add (local.get $5) (i32.const 8) ) ) ) (local.set $0 (local.get $4) ) ) ) (local.set $0 (local.get $4) ) ) ) (if (i32.gt_u (local.get $0) (i32.const -65) ) (local.set $0 (i32.const -1) ) (block (local.set $2 (i32.and (local.tee $0 (i32.add (local.get $0) (i32.const 11) ) ) (i32.const -8) ) ) (if (local.tee $18 (i32.load (i32.const 180) ) ) (block (local.set $14 (if (result i32) (local.tee $0 (i32.shr_u (local.get $0) (i32.const 8) ) ) (if (result i32) (i32.gt_u (local.get $2) (i32.const 16777215) ) (i32.const 31) (i32.or (i32.and (i32.shr_u (local.get $2) (i32.add (local.tee $0 (i32.add (i32.sub (i32.const 14) (i32.or (i32.or (local.tee $0 (i32.and (i32.shr_u (i32.add (local.tee $1 (i32.shl (local.get $0) (local.tee $3 (i32.and (i32.shr_u (i32.add (local.get $0) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) (local.get $3) ) (local.tee $0 (i32.and (i32.shr_u (i32.add (local.tee $1 (i32.shl (local.get $1) (local.get $0) ) ) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) ) (i32.shr_u (i32.shl (local.get $1) (local.get $0) ) (i32.const 15) ) ) ) (i32.const 7) ) ) (i32.const 1) ) (i32.shl (local.get $0) (i32.const 1) ) ) ) (i32.const 0) ) ) (local.set $3 (i32.sub (i32.const 0) (local.get $2) ) ) (block $__rjto$3 (block $__rjti$3 (if (local.tee $0 (i32.load offset=480 (i32.shl (local.get $14) (i32.const 2) ) ) ) (block (local.set $6 (i32.const 0) ) (local.set $8 (i32.shl (local.get $2) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $14) (i32.const 1) ) ) (i32.eq (local.get $14) (i32.const 31) ) ) ) ) (local.set $1 (i32.const 0) ) (loop $while-in14 (if (i32.lt_u (local.tee $4 (i32.sub (local.tee $9 (i32.and (i32.load offset=4 (local.get $0) ) (i32.const -8) ) ) (local.get $2) ) ) (local.get $3) ) (if (i32.eq (local.get $9) (local.get $2) ) (block (local.set $1 (local.get $4) ) (local.set $3 (local.get $0) ) (br $__rjti$3) ) (block (local.set $3 (local.get $4) ) (local.set $1 (local.get $0) ) ) ) ) (local.set $0 (select (local.get $6) (local.tee $4 (i32.load offset=20 (local.get $0) ) ) (i32.or (i32.eqz (local.get $4) ) (i32.eq (local.get $4) (local.tee $9 (i32.load (i32.add (i32.add (local.get $0) (i32.const 16) ) (i32.shl (i32.shr_u (local.get $8) (i32.const 31) ) (i32.const 2) ) ) ) ) ) ) ) ) (local.set $4 (i32.shl (local.get $8) (i32.xor (local.tee $6 (i32.eqz (local.get $9) ) ) (i32.const 1) ) ) ) (if (local.get $6) (block (local.set $4 (local.get $0) ) (local.set $0 (local.get $1) ) ) (block (local.set $6 (local.get $0) ) (local.set $8 (local.get $4) ) (local.set $0 (local.get $9) ) (br $while-in14) ) ) ) ) (block (local.set $4 (i32.const 0) ) (local.set $0 (i32.const 0) ) ) ) (if (i32.and (i32.eqz (local.get $4) ) (i32.eqz (local.get $0) ) ) (block (if (i32.eqz (local.tee $1 (i32.and (local.get $18) (i32.or (local.tee $1 (i32.shl (i32.const 2) (local.get $14) ) ) (i32.sub (i32.const 0) (local.get $1) ) ) ) ) ) (block (local.set $0 (local.get $2) ) (br $do-once) ) ) (local.set $9 (i32.and (i32.shr_u (local.tee $1 (i32.add (i32.and (local.get $1) (i32.sub (i32.const 0) (local.get $1) ) ) (i32.const -1) ) ) (i32.const 12) ) (i32.const 16) ) ) (local.set $4 (i32.load offset=480 (i32.shl (i32.add (i32.or (i32.or (i32.or (i32.or (local.tee $1 (i32.and (i32.shr_u (local.tee $4 (i32.shr_u (local.get $1) (local.get $9) ) ) (i32.const 5) ) (i32.const 8) ) ) (local.get $9) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $4 (i32.shr_u (local.get $4) (local.get $1) ) ) (i32.const 2) ) (i32.const 4) ) ) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $4 (i32.shr_u (local.get $4) (local.get $1) ) ) (i32.const 1) ) (i32.const 2) ) ) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $4 (i32.shr_u (local.get $4) (local.get $1) ) ) (i32.const 1) ) (i32.const 1) ) ) ) (i32.shr_u (local.get $4) (local.get $1) ) ) (i32.const 2) ) ) ) ) ) (if (local.get $4) (block (local.set $1 (local.get $3) ) (local.set $3 (local.get $4) ) (br $__rjti$3) ) (local.set $4 (local.get $0) ) ) (br $__rjto$3) ) (loop $while-in16 (local.set $9 (i32.lt_u (local.tee $4 (i32.sub (i32.and (i32.load offset=4 (local.get $3) ) (i32.const -8) ) (local.get $2) ) ) (local.get $1) ) ) (local.set $1 (select (local.get $4) (local.get $1) (local.get $9) ) ) (local.set $0 (select (local.get $3) (local.get $0) (local.get $9) ) ) (if (local.tee $4 (i32.load offset=16 (local.get $3) ) ) (block (local.set $3 (local.get $4) ) (br $while-in16) ) ) (br_if $while-in16 (local.tee $3 (i32.load offset=20 (local.get $3) ) ) ) (local.set $3 (local.get $1) ) (local.set $4 (local.get $0) ) ) ) (if (local.get $4) (if (i32.lt_u (local.get $3) (i32.sub (i32.load (i32.const 184) ) (local.get $2) ) ) (block (if (i32.lt_u (local.get $4) (local.tee $12 (i32.load (i32.const 192) ) ) ) (call $_abort) ) (if (i32.ge_u (local.get $4) (local.tee $6 (i32.add (local.get $4) (local.get $2) ) ) ) (call $_abort) ) (local.set $9 (i32.load offset=24 (local.get $4) ) ) (block $do-once17 (if (i32.eq (local.tee $0 (i32.load offset=12 (local.get $4) ) ) (local.get $4) ) (block (if (i32.eqz (local.tee $1 (i32.load (local.tee $0 (i32.add (local.get $4) (i32.const 20) ) ) ) ) ) (if (i32.eqz (local.tee $1 (i32.load (local.tee $0 (i32.add (local.get $4) (i32.const 16) ) ) ) ) ) (block (local.set $11 (i32.const 0) ) (br $do-once17) ) ) ) (loop $while-in20 (if (local.tee $7 (i32.load (local.tee $10 (i32.add (local.get $1) (i32.const 20) ) ) ) ) (block (local.set $1 (local.get $7) ) (local.set $0 (local.get $10) ) (br $while-in20) ) ) (if (local.tee $7 (i32.load (local.tee $10 (i32.add (local.get $1) (i32.const 16) ) ) ) ) (block (local.set $1 (local.get $7) ) (local.set $0 (local.get $10) ) (br $while-in20) ) ) ) (if (i32.lt_u (local.get $0) (local.get $12) ) (call $_abort) (block (i32.store (local.get $0) (i32.const 0) ) (local.set $11 (local.get $1) ) ) ) ) (block (if (i32.lt_u (local.tee $10 (i32.load offset=8 (local.get $4) ) ) (local.get $12) ) (call $_abort) ) (if (i32.ne (i32.load (local.tee $7 (i32.add (local.get $10) (i32.const 12) ) ) ) (local.get $4) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $1 (i32.add (local.get $0) (i32.const 8) ) ) ) (local.get $4) ) (block (i32.store (local.get $7) (local.get $0) ) (i32.store (local.get $1) (local.get $10) ) (local.set $11 (local.get $0) ) ) (call $_abort) ) ) ) ) (block $do-once21 (if (local.get $9) (block (if (i32.eq (local.get $4) (i32.load (local.tee $0 (i32.add (i32.shl (local.tee $1 (i32.load offset=28 (local.get $4) ) ) (i32.const 2) ) (i32.const 480) ) ) ) ) (block (i32.store (local.get $0) (local.get $11) ) (if (i32.eqz (local.get $11) ) (block (i32.store (i32.const 180) (i32.and (i32.load (i32.const 180) ) (i32.xor (i32.shl (i32.const 1) (local.get $1) ) (i32.const -1) ) ) ) (br $do-once21) ) ) ) (block (if (i32.lt_u (local.get $9) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $0 (i32.add (local.get $9) (i32.const 16) ) ) ) (local.get $4) ) (i32.store (local.get $0) (local.get $11) ) (i32.store offset=20 (local.get $9) (local.get $11) ) ) (br_if $do-once21 (i32.eqz (local.get $11) ) ) ) ) (if (i32.lt_u (local.get $11) (local.tee $0 (i32.load (i32.const 192) ) ) ) (call $_abort) ) (i32.store offset=24 (local.get $11) (local.get $9) ) (if (local.tee $1 (i32.load offset=16 (local.get $4) ) ) (if (i32.lt_u (local.get $1) (local.get $0) ) (call $_abort) (block (i32.store offset=16 (local.get $11) (local.get $1) ) (i32.store offset=24 (local.get $1) (local.get $11) ) ) ) ) (if (local.tee $0 (i32.load offset=20 (local.get $4) ) ) (if (i32.lt_u (local.get $0) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store offset=20 (local.get $11) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $11) ) ) ) ) ) ) ) (block $do-once25 (if (i32.lt_u (local.get $3) (i32.const 16) ) (block (i32.store offset=4 (local.get $4) (i32.or (local.tee $0 (i32.add (local.get $3) (local.get $2) ) ) (i32.const 3) ) ) (i32.store (local.tee $0 (i32.add (i32.add (local.get $4) (local.get $0) ) (i32.const 4) ) ) (i32.or (i32.load (local.get $0) ) (i32.const 1) ) ) ) (block (i32.store offset=4 (local.get $4) (i32.or (local.get $2) (i32.const 3) ) ) (i32.store offset=4 (local.get $6) (i32.or (local.get $3) (i32.const 1) ) ) (i32.store (i32.add (local.get $6) (local.get $3) ) (local.get $3) ) (local.set $0 (i32.shr_u (local.get $3) (i32.const 3) ) ) (if (i32.lt_u (local.get $3) (i32.const 256) ) (block (local.set $3 (i32.add (i32.shl (local.get $0) (i32.const 3) ) (i32.const 216) ) ) (if (i32.and (local.tee $1 (i32.load (i32.const 176) ) ) (local.tee $0 (i32.shl (i32.const 1) (local.get $0) ) ) ) (if (i32.lt_u (local.tee $0 (i32.load (local.tee $1 (i32.add (local.get $3) (i32.const 8) ) ) ) ) (i32.load (i32.const 192) ) ) (call $_abort) (block (local.set $13 (local.get $1) ) (local.set $5 (local.get $0) ) ) ) (block (i32.store (i32.const 176) (i32.or (local.get $1) (local.get $0) ) ) (local.set $13 (i32.add (local.get $3) (i32.const 8) ) ) (local.set $5 (local.get $3) ) ) ) (i32.store (local.get $13) (local.get $6) ) (i32.store offset=12 (local.get $5) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $5) ) (i32.store offset=12 (local.get $6) (local.get $3) ) (br $do-once25) ) ) (local.set $2 (i32.add (i32.shl (local.tee $7 (if (result i32) (local.tee $0 (i32.shr_u (local.get $3) (i32.const 8) ) ) (if (result i32) (i32.gt_u (local.get $3) (i32.const 16777215) ) (i32.const 31) (i32.or (i32.and (i32.shr_u (local.get $3) (i32.add (local.tee $0 (i32.add (i32.sub (i32.const 14) (i32.or (i32.or (local.tee $0 (i32.and (i32.shr_u (i32.add (local.tee $1 (i32.shl (local.get $0) (local.tee $2 (i32.and (i32.shr_u (i32.add (local.get $0) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) (local.get $2) ) (local.tee $0 (i32.and (i32.shr_u (i32.add (local.tee $1 (i32.shl (local.get $1) (local.get $0) ) ) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) ) (i32.shr_u (i32.shl (local.get $1) (local.get $0) ) (i32.const 15) ) ) ) (i32.const 7) ) ) (i32.const 1) ) (i32.shl (local.get $0) (i32.const 1) ) ) ) (i32.const 0) ) ) (i32.const 2) ) (i32.const 480) ) ) (i32.store offset=28 (local.get $6) (local.get $7) ) (i32.store offset=4 (local.tee $0 (i32.add (local.get $6) (i32.const 16) ) ) (i32.const 0) ) (i32.store (local.get $0) (i32.const 0) ) (if (i32.eqz (i32.and (local.tee $1 (i32.load (i32.const 180) ) ) (local.tee $0 (i32.shl (i32.const 1) (local.get $7) ) ) ) ) (block (i32.store (i32.const 180) (i32.or (local.get $1) (local.get $0) ) ) (i32.store (local.get $2) (local.get $6) ) (i32.store offset=24 (local.get $6) (local.get $2) ) (i32.store offset=12 (local.get $6) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $6) ) (br $do-once25) ) ) (local.set $7 (i32.shl (local.get $3) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $7) (i32.const 1) ) ) (i32.eq (local.get $7) (i32.const 31) ) ) ) ) (local.set $0 (i32.load (local.get $2) ) ) (block $__rjto$1 (block $__rjti$1 (loop $while-in28 (br_if $__rjti$1 (i32.eq (i32.and (i32.load offset=4 (local.get $0) ) (i32.const -8) ) (local.get $3) ) ) (local.set $2 (i32.shl (local.get $7) (i32.const 1) ) ) (if (local.tee $1 (i32.load (local.tee $7 (i32.add (i32.add (local.get $0) (i32.const 16) ) (i32.shl (i32.shr_u (local.get $7) (i32.const 31) ) (i32.const 2) ) ) ) ) ) (block (local.set $7 (local.get $2) ) (local.set $0 (local.get $1) ) (br $while-in28) ) ) ) (if (i32.lt_u (local.get $7) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store (local.get $7) (local.get $6) ) (i32.store offset=24 (local.get $6) (local.get $0) ) (i32.store offset=12 (local.get $6) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $6) ) (br $do-once25) ) ) (br $__rjto$1) ) (if (i32.and (i32.ge_u (local.tee $2 (i32.load (local.tee $3 (i32.add (local.get $0) (i32.const 8) ) ) ) ) (local.tee $1 (i32.load (i32.const 192) ) ) ) (i32.ge_u (local.get $0) (local.get $1) ) ) (block (i32.store offset=12 (local.get $2) (local.get $6) ) (i32.store (local.get $3) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $2) ) (i32.store offset=12 (local.get $6) (local.get $0) ) (i32.store offset=24 (local.get $6) (i32.const 0) ) ) (call $_abort) ) ) ) ) ) (return (i32.add (local.get $4) (i32.const 8) ) ) ) (local.set $0 (local.get $2) ) ) (local.set $0 (local.get $2) ) ) ) (local.set $0 (local.get $2) ) ) ) ) ) ) (if (i32.ge_u (local.tee $1 (i32.load (i32.const 184) ) ) (local.get $0) ) (block (local.set $2 (i32.load (i32.const 196) ) ) (if (i32.gt_u (local.tee $3 (i32.sub (local.get $1) (local.get $0) ) ) (i32.const 15) ) (block (i32.store (i32.const 196) (local.tee $1 (i32.add (local.get $2) (local.get $0) ) ) ) (i32.store (i32.const 184) (local.get $3) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $3) (i32.const 1) ) ) (i32.store (i32.add (local.get $1) (local.get $3) ) (local.get $3) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $0) (i32.const 3) ) ) ) (block (i32.store (i32.const 184) (i32.const 0) ) (i32.store (i32.const 196) (i32.const 0) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $1) (i32.const 3) ) ) (i32.store (local.tee $0 (i32.add (i32.add (local.get $2) (local.get $1) ) (i32.const 4) ) ) (i32.or (i32.load (local.get $0) ) (i32.const 1) ) ) ) ) (return (i32.add (local.get $2) (i32.const 8) ) ) ) ) (br_if $folding-inner0 (i32.gt_u (local.tee $1 (i32.load (i32.const 188) ) ) (local.get $0) ) ) (if (i32.eqz (i32.load (i32.const 648) ) ) (if (i32.and (i32.add (local.tee $1 (call $_sysconf (i32.const 30) ) ) (i32.const -1) ) (local.get $1) ) (call $_abort) (block (i32.store (i32.const 656) (local.get $1) ) (i32.store (i32.const 652) (local.get $1) ) (i32.store (i32.const 660) (i32.const -1) ) (i32.store (i32.const 664) (i32.const -1) ) (i32.store (i32.const 668) (i32.const 0) ) (i32.store (i32.const 620) (i32.const 0) ) (i32.store (i32.const 648) (i32.xor (i32.and (call $_time (i32.const 0) ) (i32.const -16) ) (i32.const 1431655768) ) ) ) ) ) (if (i32.le_u (local.tee $5 (i32.and (local.tee $6 (i32.add (local.tee $1 (i32.load (i32.const 656) ) ) (local.tee $8 (i32.add (local.get $0) (i32.const 47) ) ) ) ) (local.tee $9 (i32.sub (i32.const 0) (local.get $1) ) ) ) ) (local.get $0) ) (return (i32.const 0) ) ) (if (local.tee $2 (i32.load (i32.const 616) ) ) (if (i32.or (i32.le_u (local.tee $1 (i32.add (local.tee $3 (i32.load (i32.const 608) ) ) (local.get $5) ) ) (local.get $3) ) (i32.gt_u (local.get $1) (local.get $2) ) ) (return (i32.const 0) ) ) ) (local.set $11 (i32.add (local.get $0) (i32.const 48) ) ) (block $__rjto$13 (block $__rjti$13 (if (i32.eqz (i32.and (i32.load (i32.const 620) ) (i32.const 4) ) ) (block (block $label$break$L279 (block $__rjti$5 (block $__rjti$4 (br_if $__rjti$4 (i32.eqz (local.tee $4 (i32.load (i32.const 200) ) ) ) ) (local.set $1 (i32.const 624) ) (loop $while-in34 (block $while-out33 (if (i32.le_u (local.tee $3 (i32.load (local.get $1) ) ) (local.get $4) ) (if (i32.gt_u (i32.add (local.get $3) (i32.load (local.tee $2 (i32.add (local.get $1) (i32.const 4) ) ) ) ) (local.get $4) ) (block (local.set $4 (local.get $1) ) (br $while-out33) ) ) ) (br_if $while-in34 (local.tee $1 (i32.load offset=8 (local.get $1) ) ) ) (br $__rjti$4) ) ) (if (i32.lt_u (local.tee $3 (i32.and (i32.sub (local.get $6) (i32.load (i32.const 188) ) ) (local.get $9) ) ) (i32.const 2147483647) ) (if (i32.eq (local.tee $1 (call $_sbrk (local.get $3) ) ) (i32.add (i32.load (local.get $4) ) (i32.load (local.get $2) ) ) ) (br_if $__rjti$13 (i32.ne (local.get $1) (i32.const -1) ) ) (block (local.set $2 (local.get $1) ) (br $__rjti$5) ) ) ) (br $label$break$L279) ) (if (i32.ne (local.tee $1 (call $_sbrk (i32.const 0) ) ) (i32.const -1) ) (block (local.set $3 (if (result i32) (i32.and (local.tee $2 (i32.add (local.tee $4 (i32.load (i32.const 652) ) ) (i32.const -1) ) ) (local.tee $3 (local.get $1) ) ) (i32.add (i32.sub (local.get $5) (local.get $3) ) (i32.and (i32.add (local.get $2) (local.get $3) ) (i32.sub (i32.const 0) (local.get $4) ) ) ) (local.get $5) ) ) (local.set $9 (i32.add (local.tee $4 (i32.load (i32.const 608) ) ) (local.get $3) ) ) (if (i32.and (i32.gt_u (local.get $3) (local.get $0) ) (i32.lt_u (local.get $3) (i32.const 2147483647) ) ) (block (if (local.tee $2 (i32.load (i32.const 616) ) ) (br_if $label$break$L279 (i32.or (i32.le_u (local.get $9) (local.get $4) ) (i32.gt_u (local.get $9) (local.get $2) ) ) ) ) (br_if $__rjti$13 (i32.eq (local.tee $2 (call $_sbrk (local.get $3) ) ) (local.get $1) ) ) (br $__rjti$5) ) ) ) ) (br $label$break$L279) ) (local.set $1 (local.get $3) ) (local.set $4 (i32.sub (i32.const 0) (local.get $1) ) ) (if (i32.and (i32.gt_u (local.get $11) (local.get $1) ) (i32.and (i32.lt_u (local.get $1) (i32.const 2147483647) ) (i32.ne (local.get $2) (i32.const -1) ) ) ) (if (i32.lt_u (local.tee $3 (i32.and (i32.add (i32.sub (local.get $8) (local.get $1) ) (local.tee $3 (i32.load (i32.const 656) ) ) ) (i32.sub (i32.const 0) (local.get $3) ) ) ) (i32.const 2147483647) ) (if (i32.eq (call $_sbrk (local.get $3) ) (i32.const -1) ) (block (drop (call $_sbrk (local.get $4) ) ) (br $label$break$L279) ) (local.set $3 (i32.add (local.get $3) (local.get $1) ) ) ) (local.set $3 (local.get $1) ) ) (local.set $3 (local.get $1) ) ) (if (i32.ne (local.get $2) (i32.const -1) ) (block (local.set $1 (local.get $2) ) (br $__rjti$13) ) ) ) (i32.store (i32.const 620) (i32.or (i32.load (i32.const 620) ) (i32.const 4) ) ) ) ) (if (i32.lt_u (local.get $5) (i32.const 2147483647) ) (if (i32.and (i32.lt_u (local.tee $1 (call $_sbrk (local.get $5) ) ) (local.tee $3 (call $_sbrk (i32.const 0) ) ) ) (i32.and (i32.ne (local.get $1) (i32.const -1) ) (i32.ne (local.get $3) (i32.const -1) ) ) ) (br_if $__rjti$13 (i32.gt_u (local.tee $3 (i32.sub (local.get $3) (local.get $1) ) ) (i32.add (local.get $0) (i32.const 40) ) ) ) ) ) (br $__rjto$13) ) (i32.store (i32.const 608) (local.tee $2 (i32.add (i32.load (i32.const 608) ) (local.get $3) ) ) ) (if (i32.gt_u (local.get $2) (i32.load (i32.const 612) ) ) (i32.store (i32.const 612) (local.get $2) ) ) (block $do-once40 (if (local.tee $6 (i32.load (i32.const 200) ) ) (block (local.set $2 (i32.const 624) ) (block $__rjto$10 (block $__rjti$10 (loop $while-in45 (br_if $__rjti$10 (i32.eq (local.get $1) (i32.add (local.tee $11 (i32.load (local.get $2) ) ) (local.tee $5 (i32.load (local.tee $4 (i32.add (local.get $2) (i32.const 4) ) ) ) ) ) ) ) (br_if $while-in45 (local.tee $2 (i32.load offset=8 (local.get $2) ) ) ) ) (br $__rjto$10) ) (if (i32.eqz (i32.and (i32.load offset=12 (local.get $2) ) (i32.const 8) ) ) (if (i32.and (i32.lt_u (local.get $6) (local.get $1) ) (i32.ge_u (local.get $6) (local.get $11) ) ) (block (i32.store (local.get $4) (i32.add (local.get $5) (local.get $3) ) ) (local.set $2 (i32.add (local.get $6) (local.tee $1 (select (i32.and (i32.sub (i32.const 0) (local.tee $1 (i32.add (local.get $6) (i32.const 8) ) ) ) (i32.const 7) ) (i32.const 0) (i32.and (local.get $1) (i32.const 7) ) ) ) ) ) (local.set $1 (i32.add (i32.sub (local.get $3) (local.get $1) ) (i32.load (i32.const 188) ) ) ) (i32.store (i32.const 200) (local.get $2) ) (i32.store (i32.const 188) (local.get $1) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store offset=4 (i32.add (local.get $2) (local.get $1) ) (i32.const 40) ) (i32.store (i32.const 204) (i32.load (i32.const 664) ) ) (br $do-once40) ) ) ) ) (if (i32.lt_u (local.get $1) (local.tee $4 (i32.load (i32.const 192) ) ) ) (block (i32.store (i32.const 192) (local.get $1) ) (local.set $4 (local.get $1) ) ) ) (local.set $11 (i32.add (local.get $1) (local.get $3) ) ) (local.set $2 (i32.const 624) ) (block $__rjto$11 (block $__rjti$11 (loop $while-in47 (if (i32.eq (i32.load (local.get $2) ) (local.get $11) ) (block (local.set $5 (local.get $2) ) (br $__rjti$11) ) ) (br_if $while-in47 (local.tee $2 (i32.load offset=8 (local.get $2) ) ) ) (local.set $4 (i32.const 624) ) ) (br $__rjto$11) ) (if (i32.and (i32.load offset=12 (local.get $2) ) (i32.const 8) ) (local.set $4 (i32.const 624) ) (block (i32.store (local.get $5) (local.get $1) ) (i32.store (local.tee $2 (i32.add (local.get $2) (i32.const 4) ) ) (i32.add (i32.load (local.get $2) ) (local.get $3) ) ) (local.set $8 (i32.add (local.tee $9 (i32.add (local.get $1) (select (i32.and (i32.sub (i32.const 0) (local.tee $1 (i32.add (local.get $1) (i32.const 8) ) ) ) (i32.const 7) ) (i32.const 0) (i32.and (local.get $1) (i32.const 7) ) ) ) ) (local.get $0) ) ) (local.set $7 (i32.sub (i32.sub (local.tee $5 (i32.add (local.get $11) (select (i32.and (i32.sub (i32.const 0) (local.tee $1 (i32.add (local.get $11) (i32.const 8) ) ) ) (i32.const 7) ) (i32.const 0) (i32.and (local.get $1) (i32.const 7) ) ) ) ) (local.get $9) ) (local.get $0) ) ) (i32.store offset=4 (local.get $9) (i32.or (local.get $0) (i32.const 3) ) ) (block $do-once48 (if (i32.eq (local.get $5) (local.get $6) ) (block (i32.store (i32.const 188) (local.tee $0 (i32.add (i32.load (i32.const 188) ) (local.get $7) ) ) ) (i32.store (i32.const 200) (local.get $8) ) (i32.store offset=4 (local.get $8) (i32.or (local.get $0) (i32.const 1) ) ) ) (block (if (i32.eq (local.get $5) (i32.load (i32.const 196) ) ) (block (i32.store (i32.const 184) (local.tee $0 (i32.add (i32.load (i32.const 184) ) (local.get $7) ) ) ) (i32.store (i32.const 196) (local.get $8) ) (i32.store offset=4 (local.get $8) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store (i32.add (local.get $8) (local.get $0) ) (local.get $0) ) (br $do-once48) ) ) (i32.store (local.tee $0 (i32.add (local.tee $0 (if (result i32) (i32.eq (i32.and (local.tee $0 (i32.load offset=4 (local.get $5) ) ) (i32.const 3) ) (i32.const 1) ) (block (result i32) (local.set $11 (i32.and (local.get $0) (i32.const -8) ) ) (local.set $1 (i32.shr_u (local.get $0) (i32.const 3) ) ) (block $label$break$L331 (if (i32.lt_u (local.get $0) (i32.const 256) ) (block (local.set $2 (i32.load offset=12 (local.get $5) ) ) (block $do-once51 (if (i32.ne (local.tee $3 (i32.load offset=8 (local.get $5) ) ) (local.tee $0 (i32.add (i32.shl (local.get $1) (i32.const 3) ) (i32.const 216) ) ) ) (block (if (i32.lt_u (local.get $3) (local.get $4) ) (call $_abort) ) (br_if $do-once51 (i32.eq (i32.load offset=12 (local.get $3) ) (local.get $5) ) ) (call $_abort) ) ) ) (if (i32.eq (local.get $2) (local.get $3) ) (block (i32.store (i32.const 176) (i32.and (i32.load (i32.const 176) ) (i32.xor (i32.shl (i32.const 1) (local.get $1) ) (i32.const -1) ) ) ) (br $label$break$L331) ) ) (block $do-once53 (if (i32.eq (local.get $2) (local.get $0) ) (local.set $15 (i32.add (local.get $2) (i32.const 8) ) ) (block (if (i32.lt_u (local.get $2) (local.get $4) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $0 (i32.add (local.get $2) (i32.const 8) ) ) ) (local.get $5) ) (block (local.set $15 (local.get $0) ) (br $do-once53) ) ) (call $_abort) ) ) ) (i32.store offset=12 (local.get $3) (local.get $2) ) (i32.store (local.get $15) (local.get $3) ) ) (block (local.set $6 (i32.load offset=24 (local.get $5) ) ) (block $do-once55 (if (i32.eq (local.tee $0 (i32.load offset=12 (local.get $5) ) ) (local.get $5) ) (block (if (i32.eqz (local.tee $1 (i32.load (local.tee $0 (i32.add (local.tee $3 (i32.add (local.get $5) (i32.const 16) ) ) (i32.const 4) ) ) ) ) ) (if (local.tee $1 (i32.load (local.get $3) ) ) (local.set $0 (local.get $3) ) (block (local.set $12 (i32.const 0) ) (br $do-once55) ) ) ) (loop $while-in58 (if (local.tee $3 (i32.load (local.tee $2 (i32.add (local.get $1) (i32.const 20) ) ) ) ) (block (local.set $1 (local.get $3) ) (local.set $0 (local.get $2) ) (br $while-in58) ) ) (if (local.tee $3 (i32.load (local.tee $2 (i32.add (local.get $1) (i32.const 16) ) ) ) ) (block (local.set $1 (local.get $3) ) (local.set $0 (local.get $2) ) (br $while-in58) ) ) ) (if (i32.lt_u (local.get $0) (local.get $4) ) (call $_abort) (block (i32.store (local.get $0) (i32.const 0) ) (local.set $12 (local.get $1) ) ) ) ) (block (if (i32.lt_u (local.tee $2 (i32.load offset=8 (local.get $5) ) ) (local.get $4) ) (call $_abort) ) (if (i32.ne (i32.load (local.tee $3 (i32.add (local.get $2) (i32.const 12) ) ) ) (local.get $5) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $1 (i32.add (local.get $0) (i32.const 8) ) ) ) (local.get $5) ) (block (i32.store (local.get $3) (local.get $0) ) (i32.store (local.get $1) (local.get $2) ) (local.set $12 (local.get $0) ) ) (call $_abort) ) ) ) ) (br_if $label$break$L331 (i32.eqz (local.get $6) ) ) (block $do-once59 (if (i32.eq (local.get $5) (i32.load (local.tee $0 (i32.add (i32.shl (local.tee $1 (i32.load offset=28 (local.get $5) ) ) (i32.const 2) ) (i32.const 480) ) ) ) ) (block (i32.store (local.get $0) (local.get $12) ) (br_if $do-once59 (local.get $12) ) (i32.store (i32.const 180) (i32.and (i32.load (i32.const 180) ) (i32.xor (i32.shl (i32.const 1) (local.get $1) ) (i32.const -1) ) ) ) (br $label$break$L331) ) (block (if (i32.lt_u (local.get $6) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $0 (i32.add (local.get $6) (i32.const 16) ) ) ) (local.get $5) ) (i32.store (local.get $0) (local.get $12) ) (i32.store offset=20 (local.get $6) (local.get $12) ) ) (br_if $label$break$L331 (i32.eqz (local.get $12) ) ) ) ) ) (if (i32.lt_u (local.get $12) (local.tee $1 (i32.load (i32.const 192) ) ) ) (call $_abort) ) (i32.store offset=24 (local.get $12) (local.get $6) ) (if (local.tee $3 (i32.load (local.tee $0 (i32.add (local.get $5) (i32.const 16) ) ) ) ) (if (i32.lt_u (local.get $3) (local.get $1) ) (call $_abort) (block (i32.store offset=16 (local.get $12) (local.get $3) ) (i32.store offset=24 (local.get $3) (local.get $12) ) ) ) ) (br_if $label$break$L331 (i32.eqz (local.tee $0 (i32.load offset=4 (local.get $0) ) ) ) ) (if (i32.lt_u (local.get $0) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store offset=20 (local.get $12) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $12) ) ) ) ) ) ) (local.set $7 (i32.add (local.get $11) (local.get $7) ) ) (i32.add (local.get $5) (local.get $11) ) ) (local.get $5) ) ) (i32.const 4) ) ) (i32.and (i32.load (local.get $0) ) (i32.const -2) ) ) (i32.store offset=4 (local.get $8) (i32.or (local.get $7) (i32.const 1) ) ) (i32.store (i32.add (local.get $8) (local.get $7) ) (local.get $7) ) (local.set $0 (i32.shr_u (local.get $7) (i32.const 3) ) ) (if (i32.lt_u (local.get $7) (i32.const 256) ) (block (local.set $3 (i32.add (i32.shl (local.get $0) (i32.const 3) ) (i32.const 216) ) ) (block $do-once63 (if (i32.and (local.tee $1 (i32.load (i32.const 176) ) ) (local.tee $0 (i32.shl (i32.const 1) (local.get $0) ) ) ) (block (if (i32.ge_u (local.tee $0 (i32.load (local.tee $1 (i32.add (local.get $3) (i32.const 8) ) ) ) ) (i32.load (i32.const 192) ) ) (block (local.set $16 (local.get $1) ) (local.set $10 (local.get $0) ) (br $do-once63) ) ) (call $_abort) ) (block (i32.store (i32.const 176) (i32.or (local.get $1) (local.get $0) ) ) (local.set $16 (i32.add (local.get $3) (i32.const 8) ) ) (local.set $10 (local.get $3) ) ) ) ) (i32.store (local.get $16) (local.get $8) ) (i32.store offset=12 (local.get $10) (local.get $8) ) (i32.store offset=8 (local.get $8) (local.get $10) ) (i32.store offset=12 (local.get $8) (local.get $3) ) (br $do-once48) ) ) (local.set $3 (i32.add (i32.shl (local.tee $2 (block $do-once65 (result i32) (if (result i32) (local.tee $0 (i32.shr_u (local.get $7) (i32.const 8) ) ) (block (result i32) (drop (br_if $do-once65 (i32.const 31) (i32.gt_u (local.get $7) (i32.const 16777215) ) ) ) (i32.or (i32.and (i32.shr_u (local.get $7) (i32.add (local.tee $0 (i32.add (i32.sub (i32.const 14) (i32.or (i32.or (local.tee $0 (i32.and (i32.shr_u (i32.add (local.tee $1 (i32.shl (local.get $0) (local.tee $3 (i32.and (i32.shr_u (i32.add (local.get $0) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) (local.get $3) ) (local.tee $0 (i32.and (i32.shr_u (i32.add (local.tee $1 (i32.shl (local.get $1) (local.get $0) ) ) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) ) (i32.shr_u (i32.shl (local.get $1) (local.get $0) ) (i32.const 15) ) ) ) (i32.const 7) ) ) (i32.const 1) ) (i32.shl (local.get $0) (i32.const 1) ) ) ) (i32.const 0) ) ) ) (i32.const 2) ) (i32.const 480) ) ) (i32.store offset=28 (local.get $8) (local.get $2) ) (i32.store offset=4 (local.tee $0 (i32.add (local.get $8) (i32.const 16) ) ) (i32.const 0) ) (i32.store (local.get $0) (i32.const 0) ) (if (i32.eqz (i32.and (local.tee $1 (i32.load (i32.const 180) ) ) (local.tee $0 (i32.shl (i32.const 1) (local.get $2) ) ) ) ) (block (i32.store (i32.const 180) (i32.or (local.get $1) (local.get $0) ) ) (i32.store (local.get $3) (local.get $8) ) (i32.store offset=24 (local.get $8) (local.get $3) ) (i32.store offset=12 (local.get $8) (local.get $8) ) (i32.store offset=8 (local.get $8) (local.get $8) ) (br $do-once48) ) ) (local.set $2 (i32.shl (local.get $7) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $2) (i32.const 1) ) ) (i32.eq (local.get $2) (i32.const 31) ) ) ) ) (local.set $0 (i32.load (local.get $3) ) ) (block $__rjto$7 (block $__rjti$7 (loop $while-in68 (br_if $__rjti$7 (i32.eq (i32.and (i32.load offset=4 (local.get $0) ) (i32.const -8) ) (local.get $7) ) ) (local.set $3 (i32.shl (local.get $2) (i32.const 1) ) ) (if (local.tee $1 (i32.load (local.tee $2 (i32.add (i32.add (local.get $0) (i32.const 16) ) (i32.shl (i32.shr_u (local.get $2) (i32.const 31) ) (i32.const 2) ) ) ) ) ) (block (local.set $2 (local.get $3) ) (local.set $0 (local.get $1) ) (br $while-in68) ) ) ) (if (i32.lt_u (local.get $2) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store (local.get $2) (local.get $8) ) (i32.store offset=24 (local.get $8) (local.get $0) ) (i32.store offset=12 (local.get $8) (local.get $8) ) (i32.store offset=8 (local.get $8) (local.get $8) ) (br $do-once48) ) ) (br $__rjto$7) ) (if (i32.and (i32.ge_u (local.tee $2 (i32.load (local.tee $3 (i32.add (local.get $0) (i32.const 8) ) ) ) ) (local.tee $1 (i32.load (i32.const 192) ) ) ) (i32.ge_u (local.get $0) (local.get $1) ) ) (block (i32.store offset=12 (local.get $2) (local.get $8) ) (i32.store (local.get $3) (local.get $8) ) (i32.store offset=8 (local.get $8) (local.get $2) ) (i32.store offset=12 (local.get $8) (local.get $0) ) (i32.store offset=24 (local.get $8) (i32.const 0) ) ) (call $_abort) ) ) ) ) ) (return (i32.add (local.get $9) (i32.const 8) ) ) ) ) ) (loop $while-in70 (block $while-out69 (if (i32.le_u (local.tee $2 (i32.load (local.get $4) ) ) (local.get $6) ) (br_if $while-out69 (i32.gt_u (local.tee $2 (i32.add (local.get $2) (i32.load offset=4 (local.get $4) ) ) ) (local.get $6) ) ) ) (local.set $4 (i32.load offset=8 (local.get $4) ) ) (br $while-in70) ) ) (local.set $10 (i32.add (local.tee $4 (i32.add (local.get $2) (i32.const -47) ) ) (i32.const 8) ) ) (local.set $12 (i32.add (local.tee $11 (select (local.get $6) (local.tee $4 (i32.add (local.get $4) (select (i32.and (i32.sub (i32.const 0) (local.get $10) ) (i32.const 7) ) (i32.const 0) (i32.and (local.get $10) (i32.const 7) ) ) ) ) (i32.lt_u (local.get $4) (local.tee $10 (i32.add (local.get $6) (i32.const 16) ) ) ) ) ) (i32.const 8) ) ) (i32.store (i32.const 200) (local.tee $5 (i32.add (local.get $1) (local.tee $4 (select (i32.and (i32.sub (i32.const 0) (local.tee $4 (i32.add (local.get $1) (i32.const 8) ) ) ) (i32.const 7) ) (i32.const 0) (i32.and (local.get $4) (i32.const 7) ) ) ) ) ) ) (i32.store (i32.const 188) (local.tee $4 (i32.sub (i32.add (local.get $3) (i32.const -40) ) (local.get $4) ) ) ) (i32.store offset=4 (local.get $5) (i32.or (local.get $4) (i32.const 1) ) ) (i32.store offset=4 (i32.add (local.get $5) (local.get $4) ) (i32.const 40) ) (i32.store (i32.const 204) (i32.load (i32.const 664) ) ) (i32.store (local.tee $4 (i32.add (local.get $11) (i32.const 4) ) ) (i32.const 27) ) (i32.store (local.get $12) (i32.load (i32.const 624) ) ) (i32.store offset=4 (local.get $12) (i32.load (i32.const 628) ) ) (i32.store offset=8 (local.get $12) (i32.load (i32.const 632) ) ) (i32.store offset=12 (local.get $12) (i32.load (i32.const 636) ) ) (i32.store (i32.const 624) (local.get $1) ) (i32.store (i32.const 628) (local.get $3) ) (i32.store (i32.const 636) (i32.const 0) ) (i32.store (i32.const 632) (local.get $12) ) (local.set $1 (i32.add (local.get $11) (i32.const 24) ) ) (loop $while-in72 (i32.store (local.tee $1 (i32.add (local.get $1) (i32.const 4) ) ) (i32.const 7) ) (br_if $while-in72 (i32.lt_u (i32.add (local.get $1) (i32.const 4) ) (local.get $2) ) ) ) (if (i32.ne (local.get $11) (local.get $6) ) (block (i32.store (local.get $4) (i32.and (i32.load (local.get $4) ) (i32.const -2) ) ) (i32.store offset=4 (local.get $6) (i32.or (local.tee $5 (i32.sub (local.get $11) (local.get $6) ) ) (i32.const 1) ) ) (i32.store (local.get $11) (local.get $5) ) (local.set $1 (i32.shr_u (local.get $5) (i32.const 3) ) ) (if (i32.lt_u (local.get $5) (i32.const 256) ) (block (local.set $2 (i32.add (i32.shl (local.get $1) (i32.const 3) ) (i32.const 216) ) ) (if (i32.and (local.tee $3 (i32.load (i32.const 176) ) ) (local.tee $1 (i32.shl (i32.const 1) (local.get $1) ) ) ) (if (i32.lt_u (local.tee $1 (i32.load (local.tee $3 (i32.add (local.get $2) (i32.const 8) ) ) ) ) (i32.load (i32.const 192) ) ) (call $_abort) (block (local.set $17 (local.get $3) ) (local.set $7 (local.get $1) ) ) ) (block (i32.store (i32.const 176) (i32.or (local.get $3) (local.get $1) ) ) (local.set $17 (i32.add (local.get $2) (i32.const 8) ) ) (local.set $7 (local.get $2) ) ) ) (i32.store (local.get $17) (local.get $6) ) (i32.store offset=12 (local.get $7) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $7) ) (i32.store offset=12 (local.get $6) (local.get $2) ) (br $do-once40) ) ) (local.set $2 (i32.add (i32.shl (local.tee $4 (if (result i32) (local.tee $1 (i32.shr_u (local.get $5) (i32.const 8) ) ) (if (result i32) (i32.gt_u (local.get $5) (i32.const 16777215) ) (i32.const 31) (i32.or (i32.and (i32.shr_u (local.get $5) (i32.add (local.tee $1 (i32.add (i32.sub (i32.const 14) (i32.or (i32.or (local.tee $1 (i32.and (i32.shr_u (i32.add (local.tee $3 (i32.shl (local.get $1) (local.tee $2 (i32.and (i32.shr_u (i32.add (local.get $1) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) (local.get $2) ) (local.tee $1 (i32.and (i32.shr_u (i32.add (local.tee $3 (i32.shl (local.get $3) (local.get $1) ) ) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) ) (i32.shr_u (i32.shl (local.get $3) (local.get $1) ) (i32.const 15) ) ) ) (i32.const 7) ) ) (i32.const 1) ) (i32.shl (local.get $1) (i32.const 1) ) ) ) (i32.const 0) ) ) (i32.const 2) ) (i32.const 480) ) ) (i32.store offset=28 (local.get $6) (local.get $4) ) (i32.store offset=20 (local.get $6) (i32.const 0) ) (i32.store (local.get $10) (i32.const 0) ) (if (i32.eqz (i32.and (local.tee $3 (i32.load (i32.const 180) ) ) (local.tee $1 (i32.shl (i32.const 1) (local.get $4) ) ) ) ) (block (i32.store (i32.const 180) (i32.or (local.get $3) (local.get $1) ) ) (i32.store (local.get $2) (local.get $6) ) (i32.store offset=24 (local.get $6) (local.get $2) ) (i32.store offset=12 (local.get $6) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $6) ) (br $do-once40) ) ) (local.set $4 (i32.shl (local.get $5) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $4) (i32.const 1) ) ) (i32.eq (local.get $4) (i32.const 31) ) ) ) ) (local.set $1 (i32.load (local.get $2) ) ) (block $__rjto$9 (block $__rjti$9 (loop $while-in74 (br_if $__rjti$9 (i32.eq (i32.and (i32.load offset=4 (local.get $1) ) (i32.const -8) ) (local.get $5) ) ) (local.set $2 (i32.shl (local.get $4) (i32.const 1) ) ) (if (local.tee $3 (i32.load (local.tee $4 (i32.add (i32.add (local.get $1) (i32.const 16) ) (i32.shl (i32.shr_u (local.get $4) (i32.const 31) ) (i32.const 2) ) ) ) ) ) (block (local.set $4 (local.get $2) ) (local.set $1 (local.get $3) ) (br $while-in74) ) ) ) (if (i32.lt_u (local.get $4) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store (local.get $4) (local.get $6) ) (i32.store offset=24 (local.get $6) (local.get $1) ) (i32.store offset=12 (local.get $6) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $6) ) (br $do-once40) ) ) (br $__rjto$9) ) (if (i32.and (i32.ge_u (local.tee $4 (i32.load (local.tee $2 (i32.add (local.get $1) (i32.const 8) ) ) ) ) (local.tee $3 (i32.load (i32.const 192) ) ) ) (i32.ge_u (local.get $1) (local.get $3) ) ) (block (i32.store offset=12 (local.get $4) (local.get $6) ) (i32.store (local.get $2) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $4) ) (i32.store offset=12 (local.get $6) (local.get $1) ) (i32.store offset=24 (local.get $6) (i32.const 0) ) ) (call $_abort) ) ) ) ) ) (block (if (i32.or (i32.eqz (local.tee $2 (i32.load (i32.const 192) ) ) ) (i32.lt_u (local.get $1) (local.get $2) ) ) (i32.store (i32.const 192) (local.get $1) ) ) (i32.store (i32.const 624) (local.get $1) ) (i32.store (i32.const 628) (local.get $3) ) (i32.store (i32.const 636) (i32.const 0) ) (i32.store (i32.const 212) (i32.load (i32.const 648) ) ) (i32.store (i32.const 208) (i32.const -1) ) (local.set $2 (i32.const 0) ) (loop $while-in43 (i32.store offset=12 (local.tee $4 (i32.add (i32.shl (local.get $2) (i32.const 3) ) (i32.const 216) ) ) (local.get $4) ) (i32.store offset=8 (local.get $4) (local.get $4) ) (br_if $while-in43 (i32.ne (local.tee $2 (i32.add (local.get $2) (i32.const 1) ) ) (i32.const 32) ) ) ) (i32.store (i32.const 200) (local.tee $2 (i32.add (local.get $1) (local.tee $1 (select (i32.and (i32.sub (i32.const 0) (local.tee $1 (i32.add (local.get $1) (i32.const 8) ) ) ) (i32.const 7) ) (i32.const 0) (i32.and (local.get $1) (i32.const 7) ) ) ) ) ) ) (i32.store (i32.const 188) (local.tee $1 (i32.sub (i32.add (local.get $3) (i32.const -40) ) (local.get $1) ) ) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store offset=4 (i32.add (local.get $2) (local.get $1) ) (i32.const 40) ) (i32.store (i32.const 204) (i32.load (i32.const 664) ) ) ) ) ) (br_if $folding-inner0 (i32.gt_u (local.tee $1 (i32.load (i32.const 188) ) ) (local.get $0) ) ) ) (i32.store (call $___errno_location) (i32.const 12) ) (return (i32.const 0) ) ) (i32.store (i32.const 188) (local.tee $3 (i32.sub (local.get $1) (local.get $0) ) ) ) (i32.store (i32.const 200) (local.tee $1 (i32.add (local.tee $2 (i32.load (i32.const 200) ) ) (local.get $0) ) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $3) (i32.const 1) ) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $0) (i32.const 3) ) ) (i32.add (local.get $2) (i32.const 8) ) ) ;; CHECK: (func $_free (param $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (local $10 i32) ;; CHECK-NEXT: (local $11 i32) ;; CHECK-NEXT: (local $12 i32) ;; CHECK-NEXT: (local $13 i32) ;; CHECK-NEXT: (local $14 i32) ;; CHECK-NEXT: (local $15 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $11 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block558 ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block562 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block564 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block566 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block568 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block572 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block574 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.load offset=24 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block578 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block581 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block583 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block585 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block587 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block588 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $10 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block592 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (block $block594 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load offset=28 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block596 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block598 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block599 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block603 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block607 ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block610 ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block611 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block612 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block616 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block617 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block619 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block622 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block624 ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block626 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block630 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block632 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block635 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load offset=24 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once6 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block637 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block640 ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in9 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block642 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block644 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block646 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block647 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load offset=8 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block651 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (block $block653 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load offset=28 ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block655 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block657 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block658 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once4 ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block664 ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block667 ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block669 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block671 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block674 ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block675 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $13 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 16777215) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1048320) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 245760) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=28 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=16 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once12 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block679 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__rjto$1 ;; CHECK-NEXT: (block $__rjti$1 ;; CHECK-NEXT: (loop $while-in15 ;; CHECK-NEXT: (br_if $__rjti$1 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block681 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: (block $block683 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $do-once12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjto$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block685 ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block686 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 208) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 208) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 632) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in17 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in17 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 208) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_free (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (if (i32.eqz (local.get $0) ) (return) ) (if (i32.lt_u (local.tee $1 (i32.add (local.get $0) (i32.const -8) ) ) (local.tee $11 (i32.load (i32.const 192) ) ) ) (call $_abort) ) (if (i32.eq (local.tee $5 (i32.and (local.tee $7 (i32.load (i32.add (local.get $0) (i32.const -4) ) ) ) (i32.const 3) ) ) (i32.const 1) ) (call $_abort) ) (local.set $8 (i32.add (local.get $1) (local.tee $0 (i32.and (local.get $7) (i32.const -8) ) ) ) ) (block $do-once (if (i32.and (local.get $7) (i32.const 1) ) (block (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) ) (block (local.set $7 (i32.load (local.get $1) ) ) (if (i32.eqz (local.get $5) ) (return) ) (if (i32.lt_u (local.tee $1 (i32.add (local.get $1) (i32.sub (i32.const 0) (local.get $7) ) ) ) (local.get $11) ) (call $_abort) ) (local.set $0 (i32.add (local.get $7) (local.get $0) ) ) (if (i32.eq (local.get $1) (i32.load (i32.const 196) ) ) (block (if (i32.ne (i32.and (local.tee $3 (i32.load (local.tee $2 (i32.add (local.get $8) (i32.const 4) ) ) ) ) (i32.const 3) ) (i32.const 3) ) (block (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) (br $do-once) ) ) (i32.store (i32.const 184) (local.get $0) ) (i32.store (local.get $2) (i32.and (local.get $3) (i32.const -2) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store (i32.add (local.get $1) (local.get $0) ) (local.get $0) ) (return) ) ) (local.set $5 (i32.shr_u (local.get $7) (i32.const 3) ) ) (if (i32.lt_u (local.get $7) (i32.const 256) ) (block (local.set $6 (i32.load offset=12 (local.get $1) ) ) (if (i32.ne (local.tee $2 (i32.load offset=8 (local.get $1) ) ) (local.tee $3 (i32.add (i32.shl (local.get $5) (i32.const 3) ) (i32.const 216) ) ) ) (block (if (i32.lt_u (local.get $2) (local.get $11) ) (call $_abort) ) (if (i32.ne (i32.load offset=12 (local.get $2) ) (local.get $1) ) (call $_abort) ) ) ) (if (i32.eq (local.get $6) (local.get $2) ) (block (i32.store (i32.const 176) (i32.and (i32.load (i32.const 176) ) (i32.xor (i32.shl (i32.const 1) (local.get $5) ) (i32.const -1) ) ) ) (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) (br $do-once) ) ) (if (i32.eq (local.get $6) (local.get $3) ) (local.set $4 (i32.add (local.get $6) (i32.const 8) ) ) (block (if (i32.lt_u (local.get $6) (local.get $11) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $3 (i32.add (local.get $6) (i32.const 8) ) ) ) (local.get $1) ) (local.set $4 (local.get $3) ) (call $_abort) ) ) ) (i32.store offset=12 (local.get $2) (local.get $6) ) (i32.store (local.get $4) (local.get $2) ) (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) (br $do-once) ) ) (local.set $12 (i32.load offset=24 (local.get $1) ) ) (block $do-once0 (if (i32.eq (local.tee $4 (i32.load offset=12 (local.get $1) ) ) (local.get $1) ) (block (if (i32.eqz (local.tee $5 (i32.load (local.tee $4 (i32.add (local.tee $7 (i32.add (local.get $1) (i32.const 16) ) ) (i32.const 4) ) ) ) ) ) (if (local.tee $5 (i32.load (local.get $7) ) ) (local.set $4 (local.get $7) ) (block (local.set $6 (i32.const 0) ) (br $do-once0) ) ) ) (loop $while-in (if (local.tee $7 (i32.load (local.tee $10 (i32.add (local.get $5) (i32.const 20) ) ) ) ) (block (local.set $5 (local.get $7) ) (local.set $4 (local.get $10) ) (br $while-in) ) ) (if (local.tee $7 (i32.load (local.tee $10 (i32.add (local.get $5) (i32.const 16) ) ) ) ) (block (local.set $5 (local.get $7) ) (local.set $4 (local.get $10) ) (br $while-in) ) ) ) (if (i32.lt_u (local.get $4) (local.get $11) ) (call $_abort) (block (i32.store (local.get $4) (i32.const 0) ) (local.set $6 (local.get $5) ) ) ) ) (block (if (i32.lt_u (local.tee $10 (i32.load offset=8 (local.get $1) ) ) (local.get $11) ) (call $_abort) ) (if (i32.ne (i32.load (local.tee $7 (i32.add (local.get $10) (i32.const 12) ) ) ) (local.get $1) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $5 (i32.add (local.get $4) (i32.const 8) ) ) ) (local.get $1) ) (block (i32.store (local.get $7) (local.get $4) ) (i32.store (local.get $5) (local.get $10) ) (local.set $6 (local.get $4) ) ) (call $_abort) ) ) ) ) (if (local.get $12) (block (if (i32.eq (local.get $1) (i32.load (local.tee $4 (i32.add (i32.shl (local.tee $5 (i32.load offset=28 (local.get $1) ) ) (i32.const 2) ) (i32.const 480) ) ) ) ) (block (i32.store (local.get $4) (local.get $6) ) (if (i32.eqz (local.get $6) ) (block (i32.store (i32.const 180) (i32.and (i32.load (i32.const 180) ) (i32.xor (i32.shl (i32.const 1) (local.get $5) ) (i32.const -1) ) ) ) (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) (br $do-once) ) ) ) (block (if (i32.lt_u (local.get $12) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $4 (i32.add (local.get $12) (i32.const 16) ) ) ) (local.get $1) ) (i32.store (local.get $4) (local.get $6) ) (i32.store offset=20 (local.get $12) (local.get $6) ) ) (if (i32.eqz (local.get $6) ) (block (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) (br $do-once) ) ) ) ) (if (i32.lt_u (local.get $6) (local.tee $5 (i32.load (i32.const 192) ) ) ) (call $_abort) ) (i32.store offset=24 (local.get $6) (local.get $12) ) (if (local.tee $7 (i32.load (local.tee $4 (i32.add (local.get $1) (i32.const 16) ) ) ) ) (if (i32.lt_u (local.get $7) (local.get $5) ) (call $_abort) (block (i32.store offset=16 (local.get $6) (local.get $7) ) (i32.store offset=24 (local.get $7) (local.get $6) ) ) ) ) (if (local.tee $4 (i32.load offset=4 (local.get $4) ) ) (if (i32.lt_u (local.get $4) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store offset=20 (local.get $6) (local.get $4) ) (i32.store offset=24 (local.get $4) (local.get $6) ) (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) ) ) (block (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) ) ) ) (block (local.set $2 (local.get $1) ) (local.set $3 (local.get $0) ) ) ) ) ) ) (if (i32.ge_u (local.get $2) (local.get $8) ) (call $_abort) ) (if (i32.eqz (i32.and (local.tee $1 (i32.load (local.tee $0 (i32.add (local.get $8) (i32.const 4) ) ) ) ) (i32.const 1) ) ) (call $_abort) ) (if (i32.and (local.get $1) (i32.const 2) ) (block (i32.store (local.get $0) (i32.and (local.get $1) (i32.const -2) ) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $3) (i32.const 1) ) ) (i32.store (i32.add (local.get $2) (local.get $3) ) (local.get $3) ) ) (block (if (i32.eq (local.get $8) (i32.load (i32.const 200) ) ) (block (i32.store (i32.const 188) (local.tee $0 (i32.add (i32.load (i32.const 188) ) (local.get $3) ) ) ) (i32.store (i32.const 200) (local.get $2) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $0) (i32.const 1) ) ) (if (i32.ne (local.get $2) (i32.load (i32.const 196) ) ) (return) ) (i32.store (i32.const 196) (i32.const 0) ) (i32.store (i32.const 184) (i32.const 0) ) (return) ) ) (if (i32.eq (local.get $8) (i32.load (i32.const 196) ) ) (block (i32.store (i32.const 184) (local.tee $0 (i32.add (i32.load (i32.const 184) ) (local.get $3) ) ) ) (i32.store (i32.const 196) (local.get $2) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store (i32.add (local.get $2) (local.get $0) ) (local.get $0) ) (return) ) ) (local.set $5 (i32.add (i32.and (local.get $1) (i32.const -8) ) (local.get $3) ) ) (local.set $3 (i32.shr_u (local.get $1) (i32.const 3) ) ) (block $do-once4 (if (i32.lt_u (local.get $1) (i32.const 256) ) (block (local.set $4 (i32.load offset=12 (local.get $8) ) ) (if (i32.ne (local.tee $1 (i32.load offset=8 (local.get $8) ) ) (local.tee $0 (i32.add (i32.shl (local.get $3) (i32.const 3) ) (i32.const 216) ) ) ) (block (if (i32.lt_u (local.get $1) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.ne (i32.load offset=12 (local.get $1) ) (local.get $8) ) (call $_abort) ) ) ) (if (i32.eq (local.get $4) (local.get $1) ) (block (i32.store (i32.const 176) (i32.and (i32.load (i32.const 176) ) (i32.xor (i32.shl (i32.const 1) (local.get $3) ) (i32.const -1) ) ) ) (br $do-once4) ) ) (if (i32.eq (local.get $4) (local.get $0) ) (local.set $14 (i32.add (local.get $4) (i32.const 8) ) ) (block (if (i32.lt_u (local.get $4) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $0 (i32.add (local.get $4) (i32.const 8) ) ) ) (local.get $8) ) (local.set $14 (local.get $0) ) (call $_abort) ) ) ) (i32.store offset=12 (local.get $1) (local.get $4) ) (i32.store (local.get $14) (local.get $1) ) ) (block (local.set $6 (i32.load offset=24 (local.get $8) ) ) (block $do-once6 (if (i32.eq (local.tee $0 (i32.load offset=12 (local.get $8) ) ) (local.get $8) ) (block (if (i32.eqz (local.tee $3 (i32.load (local.tee $0 (i32.add (local.tee $1 (i32.add (local.get $8) (i32.const 16) ) ) (i32.const 4) ) ) ) ) ) (if (local.tee $3 (i32.load (local.get $1) ) ) (local.set $0 (local.get $1) ) (block (local.set $9 (i32.const 0) ) (br $do-once6) ) ) ) (loop $while-in9 (if (local.tee $1 (i32.load (local.tee $4 (i32.add (local.get $3) (i32.const 20) ) ) ) ) (block (local.set $3 (local.get $1) ) (local.set $0 (local.get $4) ) (br $while-in9) ) ) (if (local.tee $1 (i32.load (local.tee $4 (i32.add (local.get $3) (i32.const 16) ) ) ) ) (block (local.set $3 (local.get $1) ) (local.set $0 (local.get $4) ) (br $while-in9) ) ) ) (if (i32.lt_u (local.get $0) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store (local.get $0) (i32.const 0) ) (local.set $9 (local.get $3) ) ) ) ) (block (if (i32.lt_u (local.tee $4 (i32.load offset=8 (local.get $8) ) ) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.ne (i32.load (local.tee $1 (i32.add (local.get $4) (i32.const 12) ) ) ) (local.get $8) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $3 (i32.add (local.get $0) (i32.const 8) ) ) ) (local.get $8) ) (block (i32.store (local.get $1) (local.get $0) ) (i32.store (local.get $3) (local.get $4) ) (local.set $9 (local.get $0) ) ) (call $_abort) ) ) ) ) (if (local.get $6) (block (if (i32.eq (local.get $8) (i32.load (local.tee $0 (i32.add (i32.shl (local.tee $3 (i32.load offset=28 (local.get $8) ) ) (i32.const 2) ) (i32.const 480) ) ) ) ) (block (i32.store (local.get $0) (local.get $9) ) (if (i32.eqz (local.get $9) ) (block (i32.store (i32.const 180) (i32.and (i32.load (i32.const 180) ) (i32.xor (i32.shl (i32.const 1) (local.get $3) ) (i32.const -1) ) ) ) (br $do-once4) ) ) ) (block (if (i32.lt_u (local.get $6) (i32.load (i32.const 192) ) ) (call $_abort) ) (if (i32.eq (i32.load (local.tee $0 (i32.add (local.get $6) (i32.const 16) ) ) ) (local.get $8) ) (i32.store (local.get $0) (local.get $9) ) (i32.store offset=20 (local.get $6) (local.get $9) ) ) (br_if $do-once4 (i32.eqz (local.get $9) ) ) ) ) (if (i32.lt_u (local.get $9) (local.tee $3 (i32.load (i32.const 192) ) ) ) (call $_abort) ) (i32.store offset=24 (local.get $9) (local.get $6) ) (if (local.tee $1 (i32.load (local.tee $0 (i32.add (local.get $8) (i32.const 16) ) ) ) ) (if (i32.lt_u (local.get $1) (local.get $3) ) (call $_abort) (block (i32.store offset=16 (local.get $9) (local.get $1) ) (i32.store offset=24 (local.get $1) (local.get $9) ) ) ) ) (if (local.tee $0 (i32.load offset=4 (local.get $0) ) ) (if (i32.lt_u (local.get $0) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store offset=20 (local.get $9) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $9) ) ) ) ) ) ) ) ) ) (i32.store offset=4 (local.get $2) (i32.or (local.get $5) (i32.const 1) ) ) (i32.store (i32.add (local.get $2) (local.get $5) ) (local.get $5) ) (if (i32.eq (local.get $2) (i32.load (i32.const 196) ) ) (block (i32.store (i32.const 184) (local.get $5) ) (return) ) (local.set $3 (local.get $5) ) ) ) ) (local.set $0 (i32.shr_u (local.get $3) (i32.const 3) ) ) (if (i32.lt_u (local.get $3) (i32.const 256) ) (block (local.set $1 (i32.add (i32.shl (local.get $0) (i32.const 3) ) (i32.const 216) ) ) (if (i32.and (local.tee $3 (i32.load (i32.const 176) ) ) (local.tee $0 (i32.shl (i32.const 1) (local.get $0) ) ) ) (if (i32.lt_u (local.tee $0 (i32.load (local.tee $3 (i32.add (local.get $1) (i32.const 8) ) ) ) ) (i32.load (i32.const 192) ) ) (call $_abort) (block (local.set $15 (local.get $3) ) (local.set $13 (local.get $0) ) ) ) (block (i32.store (i32.const 176) (i32.or (local.get $3) (local.get $0) ) ) (local.set $15 (i32.add (local.get $1) (i32.const 8) ) ) (local.set $13 (local.get $1) ) ) ) (i32.store (local.get $15) (local.get $2) ) (i32.store offset=12 (local.get $13) (local.get $2) ) (i32.store offset=8 (local.get $2) (local.get $13) ) (i32.store offset=12 (local.get $2) (local.get $1) ) (return) ) ) (local.set $4 (i32.add (i32.shl (local.tee $5 (if (result i32) (local.tee $0 (i32.shr_u (local.get $3) (i32.const 8) ) ) (if (result i32) (i32.gt_u (local.get $3) (i32.const 16777215) ) (i32.const 31) (i32.or (i32.and (i32.shr_u (local.get $3) (i32.add (local.tee $0 (i32.add (i32.sub (i32.const 14) (i32.or (i32.or (local.tee $0 (i32.and (i32.shr_u (i32.add (local.tee $1 (i32.shl (local.get $0) (local.tee $4 (i32.and (i32.shr_u (i32.add (local.get $0) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) (local.get $4) ) (local.tee $0 (i32.and (i32.shr_u (i32.add (local.tee $1 (i32.shl (local.get $1) (local.get $0) ) ) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) ) (i32.shr_u (i32.shl (local.get $1) (local.get $0) ) (i32.const 15) ) ) ) (i32.const 7) ) ) (i32.const 1) ) (i32.shl (local.get $0) (i32.const 1) ) ) ) (i32.const 0) ) ) (i32.const 2) ) (i32.const 480) ) ) (i32.store offset=28 (local.get $2) (local.get $5) ) (i32.store offset=20 (local.get $2) (i32.const 0) ) (i32.store offset=16 (local.get $2) (i32.const 0) ) (block $do-once12 (if (i32.and (local.tee $1 (i32.load (i32.const 180) ) ) (local.tee $0 (i32.shl (i32.const 1) (local.get $5) ) ) ) (block (local.set $5 (i32.shl (local.get $3) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $5) (i32.const 1) ) ) (i32.eq (local.get $5) (i32.const 31) ) ) ) ) (local.set $0 (i32.load (local.get $4) ) ) (block $__rjto$1 (block $__rjti$1 (loop $while-in15 (br_if $__rjti$1 (i32.eq (i32.and (i32.load offset=4 (local.get $0) ) (i32.const -8) ) (local.get $3) ) ) (local.set $4 (i32.shl (local.get $5) (i32.const 1) ) ) (if (local.tee $1 (i32.load (local.tee $5 (i32.add (i32.add (local.get $0) (i32.const 16) ) (i32.shl (i32.shr_u (local.get $5) (i32.const 31) ) (i32.const 2) ) ) ) ) ) (block (local.set $5 (local.get $4) ) (local.set $0 (local.get $1) ) (br $while-in15) ) ) ) (if (i32.lt_u (local.get $5) (i32.load (i32.const 192) ) ) (call $_abort) (block (i32.store (local.get $5) (local.get $2) ) (i32.store offset=24 (local.get $2) (local.get $0) ) (i32.store offset=12 (local.get $2) (local.get $2) ) (i32.store offset=8 (local.get $2) (local.get $2) ) (br $do-once12) ) ) (br $__rjto$1) ) (if (i32.and (i32.ge_u (local.tee $4 (i32.load (local.tee $1 (i32.add (local.get $0) (i32.const 8) ) ) ) ) (local.tee $3 (i32.load (i32.const 192) ) ) ) (i32.ge_u (local.get $0) (local.get $3) ) ) (block (i32.store offset=12 (local.get $4) (local.get $2) ) (i32.store (local.get $1) (local.get $2) ) (i32.store offset=8 (local.get $2) (local.get $4) ) (i32.store offset=12 (local.get $2) (local.get $0) ) (i32.store offset=24 (local.get $2) (i32.const 0) ) ) (call $_abort) ) ) ) (block (i32.store (i32.const 180) (i32.or (local.get $1) (local.get $0) ) ) (i32.store (local.get $4) (local.get $2) ) (i32.store offset=24 (local.get $2) (local.get $4) ) (i32.store offset=12 (local.get $2) (local.get $2) ) (i32.store offset=8 (local.get $2) (local.get $2) ) ) ) ) (i32.store (i32.const 208) (local.tee $0 (i32.add (i32.load (i32.const 208) ) (i32.const -1) ) ) ) (if (local.get $0) (return) (local.set $0 (i32.const 632) ) ) (loop $while-in17 (local.set $0 (i32.add (local.tee $3 (i32.load (local.get $0) ) ) (i32.const 8) ) ) (br_if $while-in17 (local.get $3) ) ) (i32.store (i32.const 208) (i32.const -1) ) ) ;; CHECK: (func $runPostSets ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $runPostSets (nop) ) ;; CHECK: (func $_i64Subtract (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_i64Subtract (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (global.set $tempRet0 (i32.sub (i32.sub (local.get $1) (local.get $3) ) (i32.gt_u (local.get $2) (local.get $0) ) ) ) (i32.sub (local.get $0) (local.get $2) ) ) ;; CHECK: (func $_i64Add (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) (func $_i64Add (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (global.set $tempRet0 (i32.add (i32.add (local.get $1) (local.get $3) ) (i32.lt_u (local.tee $4 (i32.add (local.get $0) (local.get $2) ) ) (local.get $0) ) ) ) (local.get $4) ) ;; CHECK: (func $_memset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block689 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block691 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block693 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block695 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_memset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $4 (i32.add (local.get $0) (local.get $2) ) ) (if (i32.ge_s (local.get $2) (i32.const 20) ) (block (local.set $1 (i32.and (local.get $1) (i32.const 255) ) ) (if (local.tee $3 (i32.and (local.get $0) (i32.const 3) ) ) (block (local.set $3 (i32.sub (i32.add (local.get $0) (i32.const 4) ) (local.get $3) ) ) (loop $while-in (if (i32.lt_s (local.get $0) (local.get $3) ) (block (i32.store8 (local.get $0) (local.get $1) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (br $while-in) ) ) ) ) ) (local.set $3 (i32.or (i32.or (i32.or (local.get $1) (i32.shl (local.get $1) (i32.const 8) ) ) (i32.shl (local.get $1) (i32.const 16) ) ) (i32.shl (local.get $1) (i32.const 24) ) ) ) (local.set $5 (i32.and (local.get $4) (i32.const -4) ) ) (loop $while-in1 (if (i32.lt_s (local.get $0) (local.get $5) ) (block (i32.store (local.get $0) (local.get $3) ) (local.set $0 (i32.add (local.get $0) (i32.const 4) ) ) (br $while-in1) ) ) ) ) ) (loop $while-in3 (if (i32.lt_s (local.get $0) (local.get $4) ) (block (i32.store8 (local.get $0) (local.get $1) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (br $while-in3) ) ) ) (i32.sub (local.get $0) (local.get $2) ) ) ;; CHECK: (func $_bitshift64Lshr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $_bitshift64Lshr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (if (i32.lt_s (local.get $2) (i32.const 32) ) (block (global.set $tempRet0 (i32.shr_u (local.get $1) (local.get $2) ) ) (return (i32.or (i32.shr_u (local.get $0) (local.get $2) ) (i32.shl (i32.and (local.get $1) (i32.sub (i32.shl (i32.const 1) (local.get $2) ) (i32.const 1) ) ) (i32.sub (i32.const 32) (local.get $2) ) ) ) ) ) ) (global.set $tempRet0 (i32.const 0) ) (i32.shr_u (local.get $1) (i32.sub (local.get $2) (i32.const 32) ) ) ) ;; CHECK: (func $_bitshift64Shl (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $_bitshift64Shl (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (if (i32.lt_s (local.get $2) (i32.const 32) ) (block (global.set $tempRet0 (i32.or (i32.shl (local.get $1) (local.get $2) ) (i32.shr_u (i32.and (local.get $0) (i32.shl (i32.sub (i32.shl (i32.const 1) (local.get $2) ) (i32.const 1) ) (i32.sub (i32.const 32) (local.get $2) ) ) ) (i32.sub (i32.const 32) (local.get $2) ) ) ) ) (return (i32.shl (local.get $0) (local.get $2) ) ) ) ) (global.set $tempRet0 (i32.shl (local.get $0) (i32.sub (local.get $2) (i32.const 32) ) ) ) (i32.const 0) ) ;; CHECK: (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4096) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (call $_emscripten_memcpy_big ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block698 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block701 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block703 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.ge_s (local.get $2) (i32.const 4096) ) (return (call $_emscripten_memcpy_big (local.get $0) (local.get $1) (local.get $2) ) ) ) (local.set $3 (local.get $0) ) (if (i32.eq (i32.and (local.get $0) (i32.const 3) ) (i32.and (local.get $1) (i32.const 3) ) ) (block (loop $while-in (if (i32.and (local.get $0) (i32.const 3) ) (block (if (i32.eqz (local.get $2) ) (return (local.get $3) ) ) (i32.store8 (local.get $0) (i32.load8_s (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 1) ) ) (br $while-in) ) ) ) (loop $while-in1 (if (i32.ge_s (local.get $2) (i32.const 4) ) (block (i32.store (local.get $0) (i32.load (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 4) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 4) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 4) ) ) (br $while-in1) ) ) ) ) ) (loop $while-in3 (if (i32.gt_s (local.get $2) (i32.const 0) ) (block (i32.store8 (local.get $0) (i32.load8_s (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 1) ) ) (br $while-in3) ) ) ) (local.get $3) ) ;; CHECK: (func $___udivdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) ;; CHECK-NEXT: (call $___udivmoddi4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $___udivdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call $___udivmoddi4 (local.get $0) (local.get $1) (local.get $2) (local.get $3) (i32.const 0) ) ) ;; CHECK: (func $___uremdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___udivmoddi4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $STACKTOP ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.load offset=4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $___uremdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local.set $4 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 16) ) ) (drop (call $___udivmoddi4 (local.get $0) (local.get $1) (local.get $2) (local.get $3) (local.tee $0 (local.get $4) ) ) ) (global.set $STACKTOP (local.get $4) ) (global.set $tempRet0 (i32.load offset=4 (local.get $0) ) ) (i32.load (local.get $0) ) ) ;; CHECK: (func $___udivmoddi4 (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) ;; CHECK-NEXT: (local $x64 i64) ;; CHECK-NEXT: (local $y64 i64) ;; CHECK-NEXT: (local.set $x64 ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (local.get $xl) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (local.get $xh) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y64 ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (local.get $yl) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (local.get $yh) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $r) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (local.get $r) ;; CHECK-NEXT: (i64.rem_u ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: (local.get $y64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x64 ;; CHECK-NEXT: (i64.div_u ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: (local.get $y64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $___udivmoddi4 (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) (local $x64 i64) (local $y64 i64) (local.set $x64 (i64.or (i64.extend_i32_u (local.get $xl) ) (i64.shl (i64.extend_i32_u (local.get $xh) ) (i64.const 32) ) ) ) (local.set $y64 (i64.or (i64.extend_i32_u (local.get $yl) ) (i64.shl (i64.extend_i32_u (local.get $yh) ) (i64.const 32) ) ) ) (if (local.get $r) (i64.store (local.get $r) (i64.rem_u (local.get $x64) (local.get $y64) ) ) ) (local.set $x64 (i64.div_u (local.get $x64) (local.get $y64) ) ) (global.set $tempRet0 (i32.wrap_i64 (i64.shr_u (local.get $x64) (i64.const 32) ) ) ) (i32.wrap_i64 (local.get $x64) ) ) ;; CHECK: (func $dynCall_ii (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$ii) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $dynCall_ii (param $0 i32) (param $1 i32) (result i32) (call_indirect (type $FUNCSIG$ii) (local.get $1) (i32.and (local.get $0) (i32.const 1) ) ) ) ;; CHECK: (func $dynCall_iiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $dynCall_iiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call_indirect (type $FUNCSIG$iiii) (local.get $1) (local.get $2) (local.get $3) (i32.add (i32.and (local.get $0) (i32.const 7) ) (i32.const 2) ) ) ) ;; CHECK: (func $dynCall_vi (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$vi) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $dynCall_vi (param $0 i32) (param $1 i32) (call_indirect (type $FUNCSIG$vi) (local.get $1) (i32.add (i32.and (local.get $0) (i32.const 7) ) (i32.const 10) ) ) ) ;; CHECK: (func $b0 (param $0 i32) (result i32) ;; CHECK-NEXT: (call $nullFunc_ii ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $b0 (param $0 i32) (result i32) (call $nullFunc_ii (i32.const 0) ) (i32.const 0) ) ;; CHECK: (func $b1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (call $nullFunc_iiii ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $b1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (call $nullFunc_iiii (i32.const 1) ) (i32.const 0) ) ;; CHECK: (func $b2 (param $0 i32) ;; CHECK-NEXT: (call $nullFunc_vi ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b2 (param $0 i32) (call $nullFunc_vi (i32.const 2) ) ) ) binaryen-version_108/test/lit/passes/inlining_all-features.wast000066400000000000000000000153371423707623100251760ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --inlining --all-features -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt --inlining --all-features --nominal -S -o - | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_funcref (func (result funcref))) ;; CHECK: (elem declare func $foo) ;; CHECK: (export "ref_func_test" (func $ref_func_test)) ;; NOMNL: (type $none_=>_none (func_subtype func)) ;; NOMNL: (type $none_=>_funcref (func_subtype (result funcref) func)) ;; NOMNL: (elem declare func $foo) ;; NOMNL: (export "ref_func_test" (func $ref_func_test)) (export "ref_func_test" (func $ref_func_test)) ;; $foo should not be removed after being inlined, because there is 'ref.func' ;; instruction that refers to it ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $foo (type $none_=>_none) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $foo) ;; CHECK: (func $ref_func_test (result funcref) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref_func_test (type $none_=>_funcref) (result funcref) ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (block $__inlined_func$foo ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.func $foo) ;; NOMNL-NEXT: ) (func $ref_func_test (result funcref) (call $foo) (ref.func $foo) ) ) (module ;; a function reference in a global's init should be noticed, and prevent us ;; from removing an inlined function ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (global $global$0 (mut funcref) (ref.func $0)) ;; NOMNL: (type $none_=>_i32 (func_subtype (result i32) func)) ;; NOMNL: (global $global$0 (mut funcref) (ref.func $0)) (global $global$0 (mut funcref) (ref.func $0)) ;; CHECK: (func $0 (result i32) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; NOMNL: (func $0 (type $none_=>_i32) (result i32) ;; NOMNL-NEXT: (i32.const 1337) ;; NOMNL-NEXT: ) (func $0 (result i32) (i32.const 1337) ) ;; CHECK: (func $1 (result i32) ;; CHECK-NEXT: (block $__inlined_func$0 (result i32) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $1 (type $none_=>_i32) (result i32) ;; NOMNL-NEXT: (block $__inlined_func$0 (result i32) ;; NOMNL-NEXT: (i32.const 1337) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $1 (result i32) (call $0) ) ) (module ;; a function reference in the start should be noticed, and prevent us ;; from removing an inlined function ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (start $0) ;; NOMNL: (type $none_=>_none (func_subtype func)) ;; NOMNL: (start $0) (start $0) ;; CHECK: (func $0 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $0 (type $none_=>_none) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $0 (nop) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (block $__inlined_func$0 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $1 (type $none_=>_none) ;; NOMNL-NEXT: (block $__inlined_func$0 ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $1 (call $0) ) ) ;; inline a return_call_ref (module ;; CHECK: (type $none_=>_none (func)) ;; NOMNL: (type $none_=>_none (func_subtype func)) (type $none_=>_none (func)) ;; CHECK: (export "func_36_invoker" (func $1)) ;; NOMNL: (export "func_36_invoker" (func $1)) (export "func_36_invoker" (func $1)) (func $0 (return_call_ref (ref.null $none_=>_none) ) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (block $__inlined_func$0 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.null $none_=>_none) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $1 (type $none_=>_none) ;; NOMNL-NEXT: (block $__inlined_func$0 ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (call_ref ;; NOMNL-NEXT: (ref.null $none_=>_none) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br $__inlined_func$0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br $__inlined_func$0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $1 (call $0) ) ) ;; handle non-nullable parameter types (which turn into local types after ;; inlining) (module (func $0 (param $non-null (ref func)) (result (ref func)) (local.get $non-null) ) ;; CHECK: (type $none_=>_ref|func| (func (result (ref func)))) ;; CHECK: (elem declare func $1) ;; CHECK: (func $1 (result (ref func)) ;; CHECK-NEXT: (local $0 funcref) ;; CHECK-NEXT: (block $__inlined_func$0 (result (ref func)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.func $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (type $none_=>_ref|func| (func_subtype (result (ref func)) func)) ;; NOMNL: (elem declare func $1) ;; NOMNL: (func $1 (type $none_=>_ref|func|) (result (ref func)) ;; NOMNL-NEXT: (local $0 funcref) ;; NOMNL-NEXT: (block $__inlined_func$0 (result (ref func)) ;; NOMNL-NEXT: (local.set $0 ;; NOMNL-NEXT: (ref.func $1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $1 (result (ref func)) (call $0 (ref.func $1) ) ) ) ;; never inline an rtt parameter, as those cannot be handled as locals (module ;; CHECK: (type $struct (struct )) ;; NOMNL: (type $struct (struct_subtype data)) (type $struct (struct)) ;; CHECK: (type $rtt_$struct_=>_none (func (param (rtt $struct)))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $0 (param $rtt (rtt $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (type $rtt_$struct_=>_none (func_subtype (param (rtt $struct)) func)) ;; NOMNL: (type $none_=>_none (func_subtype func)) ;; NOMNL: (func $0 (type $rtt_$struct_=>_none) (param $rtt (rtt $struct)) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $0 (param $rtt (rtt $struct)) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (call $0 ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $1 (type $none_=>_none) ;; NOMNL-NEXT: (call $0 ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $1 (call $0 (rtt.canon $struct) ) ) ) binaryen-version_108/test/lit/passes/inlining_enable-tail-call.wast000066400000000000000000000447001423707623100256740ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --inlining --enable-tail-call -S -o - | filecheck %s (module (table 1 1 funcref) (elem (i32.const 0) $tabled) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (table $0 1 1 funcref) ;; CHECK: (elem (i32.const 0) $tabled) ;; CHECK: (export "user" (func $user)) ;; CHECK: (export "exported" (func $exported)) ;; CHECK: (func $user ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y f64) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (local $4 f32) ;; CHECK-NEXT: (local $5 i64) ;; CHECK-NEXT: (local $6 f32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$exported ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$tabled ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$multi ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$multi0 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$ok ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$int (result i32) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (block $__inlined_func$double (result f64) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$int2 (result i32) ;; CHECK-NEXT: (i32.const 112) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (block $__inlined_func$double2 (result f64) ;; CHECK-NEXT: (f64.const 113.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$with-local ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f32.const 2.1418280601501465) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$with-local2 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$return (result i32) ;; CHECK-NEXT: (br $__inlined_func$return ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$multipass ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$multipass2 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$param ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f32.const 12.34000015258789) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i64.const 890005350012) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $user (export "user") (local $x i32) (local $y f64) (call $exported) (call $tabled) (call $multi) (call $multi) (call $ok) (drop (call $int)) (drop (call $double)) (local.set $x (call $int2)) (local.set $y (call $double2)) (call $with-local) (call $with-local2) (drop (call $return)) (call $multipass) (call $param (f32.const 12.34) (i64.const 890005350012)) ) ;; CHECK: (func $exported ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $exported (export "exported") (nop) ) ;; CHECK: (func $recursive ;; CHECK-NEXT: (call $recursive) ;; CHECK-NEXT: ) (func $recursive (call $recursive) ) ;; CHECK: (func $tabled ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $tabled (nop) ) ;; CHECK: (func $cycle1 ;; CHECK-NEXT: (block $__inlined_func$cycle2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $cycle1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $cycle1 (call $cycle2) ) (func $cycle2 (call $cycle1) ) (func $multi (nop) ) (func $ok (drop (i32.const 1)) ) (func $int (result i32) (i32.const 2) ) (func $double (result f64) (f64.const 3.14159) ) (func $int2 (result i32) (i32.const 112) ) (func $double2 (result f64) (f64.const 113.14159) ) (func $with-local (local $x f32) (local.set $x (f32.const 2.141828)) ) (func $with-local2 (local $y i64) (local.set $y (i64.const 4)) ) (func $return (result i32) (return (i32.const 5)) ) (func $multipass (call $multipass2) ) (func $multipass2 (drop (i32.const 6)) ) (func $param (param $x f32) (param $y i64) (local $z f32) (drop (local.get $x)) (drop (local.get $y)) (drop (local.get $z)) ) ) (module ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (func $child (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) (func $child (param i32) (result i32) (i32.const 1234) ) ;; CHECK: (func $parent (result i32) ;; CHECK-NEXT: (call $child ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $parent (result i32) (call $child (unreachable) ;; call is not performed, no sense to inline ) ) ) (module ;; CHECK: (type $f32_i32_=>_i32 (func (param f32 i32) (result i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $hangLimit (mut i32) (i32.const 25)) (global $hangLimit (mut i32) (i32.const 25)) ;; CHECK: (memory $0 1 1) (memory $0 1 1) ;; CHECK: (export "hangLimitInitializer" (func $hangLimitInitializer)) (export "hangLimitInitializer" (func $hangLimitInitializer)) (func $func_3 (result i32) (local $0 i32) (select (local.get $0) ;; we depend on the zero-init value here, so it must be set when inlining! (local.tee $0 (i32.const -1) ) (i32.const 1) ) ) ;; CHECK: (func $func_4 (param $0 f32) (param $1 i32) (result i32) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (local $4 f32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 f64) ;; CHECK-NEXT: (local $8 i32) ;; CHECK-NEXT: (loop $label$0 (result i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $hangLimit) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 54) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $hangLimit ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (global.get $hangLimit) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$func_3 (result i32) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func_4 (param $0 f32) (param $1 i32) (result i32) (local $2 i64) (local $3 f64) (local $4 f32) (local $5 i32) (local $6 i32) (local $7 f64) (loop $label$0 (result i32) (block (if (i32.eqz (global.get $hangLimit) ) (return (i32.const 54) ) ) (global.set $hangLimit (i32.sub (global.get $hangLimit) (i32.const 1) ) ) ) (i32.eqz (if (result i32) (i32.const 1) (if (result i32) (i32.eqz (call $func_3) ) (br $label$0) (i32.const 0) ) (unreachable) ) ) ) ) ;; CHECK: (func $hangLimitInitializer ;; CHECK-NEXT: (global.set $hangLimit ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $hangLimitInitializer (global.set $hangLimit (i32.const 25) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $T (func (param i32))) (type $T (func (param i32))) (table 10 funcref) ;; CHECK: (table $0 10 funcref) ;; CHECK: (func $0 ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (call_indirect (type $T) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (call $1) ) (func $1 (call_indirect (type $T) (if (result i32) ;; if copy must preserve the forced type (i32.const 0) (unreachable) (unreachable) ) (i32.const 1) ) ) ) (module (func $0 (block $label$1 ;; copy this name (br_table $label$1 $label$1 (i32.const 0) ) ) ) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $1 ;; CHECK-NEXT: (block $__inlined_func$0 ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (br_table $label$1 $label$1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $1 (call $0) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (func $0 (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (block $__inlined_func$1 (result i32) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (result i32) (return_call $1) ) (func $1 (result i32) (i32.const 42) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $0 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (return_call $1 (i32.const 42) ) ) (func $1 (param i32) (drop (local.get 0) ) ) ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (func $0 (result i32) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (block $__inlined_func$1 (result i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (result i32) (return_call $1 (i32.const 42) ) ) (func $1 (param i32) (result i32) (local.get 0) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$1 (result i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (br $__inlined_func$1 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$2 (result i32) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (drop (call $1) ) ) (func $1 (result i32) (return_call $2) ) (func $2 (result i32) (i32.const 42) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $0 ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$2 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (call $1) ) (func $1 (return_call $2 (i32.const 42) ) ) (func $2 (param i32) (drop (local.get 0) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $T (func (param i32) (result i32))) (type $T (func (param i32) (result i32))) (table 10 funcref) ;; CHECK: (table $0 10 funcref) ;; CHECK: (func $0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$1 (result i32) ;; CHECK-NEXT: (br $__inlined_func$1 ;; CHECK-NEXT: (call_indirect (type $T) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (drop (call $1) ) ) (func $1 (result i32) (return_call_indirect (type $T) (i32.const 42) (i32.const 0) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $T (func (param i32))) (type $T (func (param i32))) (table 10 funcref) ;; CHECK: (table $0 10 funcref) ;; CHECK: (func $0 ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call_indirect (type $T) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (call $1) ) (func $1 (return_call_indirect (type $T) (i32.const 42) (i32.const 0) ) ) ) (module ;; CHECK: (type $6 (func)) (type $6 (func)) ;; CHECK: (global $global$0 (mut i32) (i32.const 10)) ;; CHECK: (memory $0 1 1) (memory $0 1 1) (global $global$0 (mut i32) (i32.const 10)) ;; CHECK: (export "func_102_invoker" (func $19)) (export "func_102_invoker" (func $19)) (func $2 (; 2 ;) (type $6) (if (global.get $global$0) (return) ) (global.set $global$0 (i32.const 1) ) ) (func $13 (; 13 ;) (type $6) (if (global.get $global$0) (unreachable) ) (return_call $2) ) ;; CHECK: (func $19 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$13 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: (br $__inlined_func$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global$0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $19 (; 19 ;) (type $6) (call $13) (unreachable) ) ) (module ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (export "is_even" (func $is_even)) (export "is_even" (func $is_even)) ;; CHECK: (func $is_even (param $i i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (block $__inlined_func$is_odd (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (return_call $is_even ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $is_even (param $i i32) (result i32) (if (result i32) (i32.eqz (local.get $i)) (i32.const 1) (return_call $is_odd (i32.sub (local.get $i) (i32.const 1) ) ) ) ) (func $is_odd (param $i i32) (result i32) (if (result i32) (i32.eqz (local.get $i)) (i32.const 0) (return_call $is_even (i32.sub (local.get $i) (i32.const 1) ) ) ) ) ) binaryen-version_108/test/lit/passes/inlining_memory64.wat000066400000000000000000000023201423707623100240750ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --inlining --enable-memory64 -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_i64 (func (result i64))) ;; CHECK: (memory $0 i64 256 256) (memory $0 i64 256 256) ;; CHECK: (func $call-size (result i64) ;; CHECK-NEXT: (block $__inlined_func$size (result i64) ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-size (result i64) (call $size) ) (func $size (result i64) ;; Upon inlining this code is copied, and as the memory is 64-bit the copied ;; instruction must remain 64-bit (and not have the default 32-bit size). If ;; we get that wrong then validation would fail here. (memory.size) ) ;; CHECK: (func $call-grow (result i64) ;; CHECK-NEXT: (block $__inlined_func$grow (result i64) ;; CHECK-NEXT: (memory.grow ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-grow (result i64) ;; As above, but for grow instead of size. (call $grow) ) (func $grow (result i64) (memory.grow (i64.const 1) ) ) ) binaryen-version_108/test/lit/passes/inlining_optimize-level=3.wast000066400000000000000000000341411423707623100257310ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --inlining --optimize-level=3 -S -o - | filecheck %s (module ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (table $0 1 1 funcref) ;; CHECK: (elem (i32.const 0) $no-loops-but-one-use-but-tabled) ;; CHECK: (export "yes" (func $yes)) (export "yes" (func $yes)) ;; CHECK: (export "no-loops-but-one-use-but-exported" (func $no-loops-but-one-use-but-exported)) (export "no-loops-but-one-use-but-exported" (func $no-loops-but-one-use-but-exported)) (table 1 1 funcref) (elem (i32.const 0) $no-loops-but-one-use-but-tabled) ;; CHECK: (export "A" (func $recursive-inlining-1)) ;; CHECK: (export "B" (func $recursive-inlining-2)) ;; CHECK: (export "BA" (func $b-recursive-inlining-1)) ;; CHECK: (export "BB" (func $b-recursive-inlining-2)) ;; CHECK: (func $yes (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $yes (result i32) ;; inlinable: small, lightweight, even with multi uses and a global use, ok when opt-level=3 (i32.const 1) ) (func $yes-big-but-single-use (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (i32.const 1) ) (func $no-calls (result i32) (call $yes) ) (func $yes-calls-but-one-use (result i32) (call $yes) ) (func $no-loops (result i32) (loop (result i32) (i32.const 1) ) ) (func $yes-loops-but-one-use (result i32) (loop (result i32) (i32.const 1) ) ) ;; CHECK: (func $no-loops-but-one-use-but-exported (result i32) ;; CHECK-NEXT: (loop $loop-in (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $no-loops-but-one-use-but-exported (result i32) (loop (result i32) (i32.const 1) ) ) ;; CHECK: (func $no-loops-but-one-use-but-tabled (result i32) ;; CHECK-NEXT: (loop $loop-in (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $no-loops-but-one-use-but-tabled (result i32) (loop (result i32) (i32.const 1) ) ) ;; CHECK: (func $intoHere ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$yes (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$yes-big-but-single-use (result i32) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$no-calls (result i32) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$yes0 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$no-calls1 (result i32) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$yes2 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$yes-calls-but-one-use (result i32) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$yes3 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$no-loops (result i32) ;; CHECK-NEXT: (loop $loop-in (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$no-loops0 (result i32) ;; CHECK-NEXT: (loop $loop-in1 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$yes-loops-but-one-use (result i32) ;; CHECK-NEXT: (loop $loop-in2 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$no-loops-but-one-use-but-exported (result i32) ;; CHECK-NEXT: (loop $loop-in3 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$no-loops-but-one-use-but-tabled (result i32) ;; CHECK-NEXT: (loop $loop-in4 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $intoHere (drop (call $yes)) (drop (call $yes-big-but-single-use)) (drop (call $no-calls)) (drop (call $no-calls)) (drop (call $yes-calls-but-one-use)) (drop (call $no-loops)) (drop (call $no-loops)) (drop (call $yes-loops-but-one-use)) (drop (call $no-loops-but-one-use-but-exported)) (drop (call $no-loops-but-one-use-but-tabled)) ) ;; Two functions that call each other. (Exported, so that they are not removed ;; after inlining.) We should only perform a limited amount of inlining here - ;; a little might help, but like loop unrolling it loses its benefit quickly. ;; Specifically here we will see the infinite recursion after one inlining, ;; and stop (since we do not inline a method into itself). ;; CHECK: (func $recursive-inlining-1 (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $__inlined_func$recursive-inlining-2 (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (call $recursive-inlining-1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $recursive-inlining-1 (export "A") (param $x i32) (result i32) (call $recursive-inlining-2 (local.get $x) ) ) ;; CHECK: (func $recursive-inlining-2 (param $x i32) (result i32) ;; CHECK-NEXT: (call $recursive-inlining-1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $recursive-inlining-2 (export "B") (param $x i32) (result i32) (call $recursive-inlining-1 (local.get $x) ) ) ;; As above, but both call the second. The first will inline the second ;; several times before hitting the limit (of around 5). ;; CHECK: (func $b-recursive-inlining-1 (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (block $__inlined_func$b-recursive-inlining-2 (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$b-recursive-inlining-20 (result i32) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$b-recursive-inlining-21 (result i32) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$b-recursive-inlining-22 (result i32) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (block $__inlined_func$b-recursive-inlining-23 (result i32) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $b-recursive-inlining-2 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b-recursive-inlining-1 (export "BA") (param $x i32) (result i32) (call $b-recursive-inlining-2 (local.get $x) ) ) ;; CHECK: (func $b-recursive-inlining-2 (param $x i32) (result i32) ;; CHECK-NEXT: (call $b-recursive-inlining-2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b-recursive-inlining-2 (export "BB") (param $x i32) (result i32) (call $b-recursive-inlining-2 (local.get $x) ) ) ;; Verify that we can do a large number (larger than the limit of ~5 we just ;; saw for recursion) of calls into a single function, if we can do it all in ;; a single iteration (which is the usual case, and the case here). ;; CHECK: (func $call-many-getters ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter2 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter3 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter4 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter5 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter6 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter7 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$getter8 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-many-getters (call $getter) (call $getter) (call $getter) (call $getter) (call $getter) (call $getter) (call $getter) (call $getter) (call $getter) (call $getter) ) (func $getter (drop (i32.const 1)) ) ) (module (func $bar (drop (block $__inlined_func$bar (result i32) (return) ;; After inlining, this return will be replaced with a br to a ;; new block. That block's name must not collide with the name ;; of the outer block here, which has been chosen so as to ;; potentially collide. If it collides, we will fail to validate ;; as the new outer block will have type none. ) ) ) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $foo ;; CHECK-NEXT: (block $__inlined_func$bar_0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $__inlined_func$bar (result i32) ;; CHECK-NEXT: (br $__inlined_func$bar_0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (call $bar) ) ) binaryen-version_108/test/lit/passes/inlining_splitting.wast000066400000000000000000001370311423707623100246230ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --inlining --optimize-level=3 --partial-inlining-ifs=4 --all-features -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $anyref_=>_anyref (func (param anyref) (result anyref))) ;; CHECK: (type $anyref_=>_none (func (param anyref))) ;; CHECK: (type $struct (struct )) (type $struct (struct)) ;; CHECK: (type $i32_rtt_$struct_=>_none (func (param i32 (rtt $struct)))) ;; CHECK: (type $i64_i32_f64_=>_none (func (param i64 i32 f64))) ;; CHECK: (import "out" "func" (func $import)) (import "out" "func" (func $import)) ;; CHECK: (global $glob i32 (i32.const 1)) (global $glob i32 (i32.const 1)) ;; CHECK: (start $start-used-globally) (start $start-used-globally) ;; Pattern A: functions beginning with ;; ;; if (simple) return; (func $maybe-work-hard (param $x i32) ;; A function that does a quick check before any heavy work. We can outline ;; the heavy work, so that the condition can be inlined. ;; ;; This function (and others lower down that we also optimize) will vanish ;; in the output. Part of it will be inlined into its caller, below, and ;; the rest will be outlined into a new function with suffix "outlined". (if (local.get $x) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-maybe-work-hard ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$maybe-work-hard ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$maybe-work-hard0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$maybe-work-hard1 ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-maybe-work-hard ;; Call the above function to verify that we can in fact inline it after ;; splitting. We should see each of these three calls replaced by inlined ;; code performing the if from $maybe-work-hard, and depending on that ;; result they each call the outlined code that must *not* be inlined. ;; ;; Note that we must call more than once, otherwise given a single use we ;; will always inline the entire thing. (call $maybe-work-hard (i32.const 1)) (call $maybe-work-hard (i32.const 2)) (call $maybe-work-hard (i32.const 3)) ) (func $just-if (param $x i32) ;; As above, but all we have is an if. (if (local.get $x) (loop $l (call $import) (br_if $l (local.get $x) ) ) ) ) ;; CHECK: (func $call-just-if ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$just-if ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (call $byn-split-outlined-B$just-if ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$just-if0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (call $byn-split-outlined-B$just-if ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-just-if (call $just-if (i32.const 1)) (call $just-if (i32.const 2)) ) ;; CHECK: (func $br-to-toplevel (param $x i32) ;; CHECK-NEXT: (block $toplevel ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (br $toplevel) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br-to-toplevel (param $x i32) (block $toplevel (if (local.get $x) (block (if (local.get $x) ;; A br to the toplevel block prevents us from outlining this code, ;; as we can't outline a br without its target. (br $toplevel) (call $import) ) ) ) ) ) ;; CHECK: (func $call-br-to-toplevel ;; CHECK-NEXT: (call $br-to-toplevel ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $br-to-toplevel ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-br-to-toplevel (call $br-to-toplevel (i32.const 1)) (call $br-to-toplevel (i32.const 2)) ) ;; CHECK: (func $nondefaultable-param (param $x i32) (param $y (rtt $struct)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nondefaultable-param (param $x i32) (param $y (rtt $struct)) ;; The RTT param here prevents us from even being inlined, even with ;; splitting. (if (local.get $x) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-nondefaultable-param ;; CHECK-NEXT: (call $nondefaultable-param ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-nondefaultable-param (call $nondefaultable-param (i32.const 0) (rtt.canon $struct)) ) (func $many-params (param $x i64) (param $y i32) (param $z f64) ;; Test that we can optimize this function even though it has multiple ;; parameters, and it is not the very first one that we use in the ;; condition. (if (local.get $y) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-many-params ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 f64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$many-params ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$many-params ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$many-params0 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$many-params ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-many-params ;; Call the above function to verify that we can in fact inline it after ;; splitting. We should see each of these three calls replaced by inlined ;; code performing the if from $maybe-work-hard, and depending on that ;; result they each call the outlined code that must *not* be inlined. (call $many-params (i64.const 0) (i32.const 1) (f64.const 3.14159)) (call $many-params (i64.const 0) (i32.const 1) (f64.const 3.14159)) ) (func $condition-eqz (param $x i32) (if ;; More work in the condition, but work that we still consider worth ;; optimizing: a unary op. (i32.eqz (local.get $x) ) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-condition-eqz ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$condition-eqz ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$condition-eqz0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-condition-eqz (call $condition-eqz (i32.const 0)) (call $condition-eqz (i32.const 1)) ) (func $condition-global (if ;; A global read, also worth splitting. (global.get $glob) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-condition-global ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$condition-global ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$condition-global0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-condition-global (call $condition-global) (call $condition-global) ) (func $condition-ref.is (param $x anyref) (if ;; A ref.is operation. (ref.is_null (local.get $x) ) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-condition-ref.is ;; CHECK-NEXT: (local $0 anyref) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$condition-ref.is ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-ref.is ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$condition-ref.is0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-ref.is ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-condition-ref.is (call $condition-ref.is (ref.null any)) (call $condition-ref.is (ref.null any)) ) ;; CHECK: (func $condition-disallow-binary (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $condition-disallow-binary (param $x i32) (if ;; Work we do *not* allow (at least for now), a binary. (i32.add (local.get $x) (local.get $x) ) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-condition-disallow-binary ;; CHECK-NEXT: (call $condition-disallow-binary ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $condition-disallow-binary ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-condition-disallow-binary (call $condition-disallow-binary (i32.const 0)) (call $condition-disallow-binary (i32.const 1)) ) ;; CHECK: (func $condition-disallow-unreachable (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $condition-disallow-unreachable (param $x i32) (if ;; Work we do *not* allow (at least for now), an unreachable. (i32.eqz (unreachable) ) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-condition-disallow-unreachable ;; CHECK-NEXT: (call $condition-disallow-unreachable ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $condition-disallow-unreachable ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-condition-disallow-unreachable (call $condition-disallow-unreachable (i32.const 0)) (call $condition-disallow-unreachable (i32.const 1)) ) ;; CHECK: (func $start-used-globally ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $start-used-globally ;; This is optimizable even though it is the start function, that is is, ;; having global uses of a function are not a problem for partial inlining ;; (since we do not modify this function - we create new split pieces of ;; it). (if (global.get $glob) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-start-used-globally ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$start-used-globally ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$start-used-globally) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$start-used-globally0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$start-used-globally) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-start-used-globally (call $start-used-globally) (call $start-used-globally) ) (func $inlineable ;; This looks optimizable, but it is also inlineable - so we do not need to ;; split it. It will just be inlined directly, without any $outlined part ;; that is split out. (if (global.get $glob) (return) ) ) ;; CHECK: (func $call-inlineable ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$inlineable ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: (br $__inlined_func$inlineable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$inlineable0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: (br $__inlined_func$inlineable0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-inlineable (call $inlineable) (call $inlineable) ) ;; CHECK: (func $if-not-first (param $x i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-not-first (param $x i32) ;; Except for the initial nop, we should outline this. As the if is not ;; first any more, we ignore it. (nop) (if (local.get $x) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-if-not-first ;; CHECK-NEXT: (call $if-not-first ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $if-not-first ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-if-not-first (call $if-not-first (i32.const 0)) (call $if-not-first (i32.const 1)) ) ;; CHECK: (func $if-else (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else (param $x i32) ;; An else in the if prevents us from recognizing the pattern we want. (if (local.get $x) (return) (nop) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-if-else ;; CHECK-NEXT: (call $if-else ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $if-else ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-if-else (call $if-else (i32.const 0)) (call $if-else (i32.const 1)) ) ;; CHECK: (func $if-non-return (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-non-return (param $x i32) ;; Something other than a return in the if body prevents us from outlining. (if (local.get $x) (unreachable) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-if-non-return ;; CHECK-NEXT: (call $if-non-return ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $if-non-return ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-if-non-return (call $if-non-return (i32.const 0)) (call $if-non-return (i32.const 1)) ) (func $colliding-name (param $x i32) ;; When we outline this, the name should not collide with that of the ;; function after us. (if (local.get $x) (return) ) (loop $l (call $import) (br $l) ) ) ;; CHECK: (func $call-colliding-name ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$colliding-name ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$colliding-name_0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$colliding-name0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$colliding-name_0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-colliding-name (call $colliding-name (i32.const 0)) (call $colliding-name (i32.const 1)) ) ;; CHECK: (func $byn-split-outlined-A$colliding-name ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $byn-split-outlined-A$colliding-name ;; This function's name might collide with the split function we create for ;; the above function; the split function's name must be fixed up. ) ;; Pattern B: functions containing ;; ;; if (simple1) heavy-work-that-is-unreachable; ;; if (simple..) heavy-work-that-is-unreachable; ;; simplek (func $error-if-null (param $x anyref) (result anyref) ;; A "as non null" function: If the input is null, issue an error somehow ;; (here, by calling an import, but could also be a throwing of an ;; exception). If not null, return the value. (if (ref.is_null (local.get $x) ) (block (call $import) (unreachable) ) ) (local.get $x) ) ;; CHECK: (func $call-error-if-null ;; CHECK-NEXT: (local $0 anyref) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$error-if-null (result anyref) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$error-if-null ;; CHECK-NEXT: (call $byn-split-outlined-B$error-if-null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$error-if-null0 (result anyref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$error-if-null0 ;; CHECK-NEXT: (call $byn-split-outlined-B$error-if-null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-error-if-null (drop (call $error-if-null (ref.null any))) (drop (call $error-if-null (ref.null any))) ) ;; CHECK: (func $too-many (param $x anyref) (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) (func $too-many (param $x anyref) (result anyref) (if (ref.is_null (local.get $x) ) (block (call $import) (unreachable) ) ) (nop) ;; An extra operation here prevents us from identifying the pattern. (local.get $x) ) ;; CHECK: (func $call-too-many ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $too-many ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $too-many ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-too-many (drop (call $too-many (ref.null any))) (drop (call $too-many (ref.null any))) ) ;; CHECK: (func $tail-not-simple (param $x anyref) (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $tail-not-simple (param $x anyref) (result anyref) (if (ref.is_null (local.get $x) ) (block (call $import) (unreachable) ) ) (unreachable) ;; This prevents us from optimizing ) ;; CHECK: (func $call-tail-not-simple ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-not-simple ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $tail-not-simple ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-tail-not-simple (drop (call $tail-not-simple (ref.null any))) (drop (call $tail-not-simple (ref.null any))) ) (func $reachable-if-body (param $x anyref) (result anyref) (if (ref.is_null (local.get $x) ) ;; It is ok if the body is not unreachable (so long as it contains no ;; returns). We will optimize this, and just do a call to the outlined ;; code, without a return of a value here. (call $import) ) (local.get $x) ) ;; CHECK: (func $call-reachable-if-body ;; CHECK-NEXT: (local $0 anyref) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (local $2 anyref) ;; CHECK-NEXT: (local $3 anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$reachable-if-body (result anyref) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-B$reachable-if-body ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$reachable-if-body0 (result anyref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-B$reachable-if-body0 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-reachable-if-body ;; Note that the above contains ;; ;; (block $__inlined_func$byn-split-outlined-B$reachable-if-body ;; ;; which indicates that we've inlined the outlined function. That seems odd, ;; but it is the result of the if's body being just a call. When we outline, ;; we end up with a function that all it does is make that call - which is ;; worth inlining in the normal way (to avoid two calls). As a result of all ;; that, we end up inlining *all* of $reachable-if-body, just by a ;; roundabout way (split, outline, then inline). While this seems odd, each ;; step along the way makes sense, and the result is a good one (might be a ;; little hard to see before opts remove the extra block cruft etc.). ;; ;; We could avoid this if we detected that the if body is just a call, and ;; not done any outlining - just done that call. That would be more ;; efficient, but it would make the code more complicated, and the result is ;; the same. (drop (call $reachable-if-body (ref.null any))) (drop (call $reachable-if-body (ref.null any))) ) ;; CHECK: (func $reachable-if-body-return (param $x anyref) (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) (func $reachable-if-body-return (param $x anyref) (result anyref) (if (ref.is_null (local.get $x) ) (if (i32.const 1) ;; The return here prevents the optimization. (return (local.get $x) ) (call $import) ) ) (local.get $x) ) ;; CHECK: (func $call-reachable-if-body-return ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $reachable-if-body-return ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $reachable-if-body-return ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-reachable-if-body-return (drop (call $reachable-if-body-return (ref.null any))) (drop (call $reachable-if-body-return (ref.null any))) ) (func $unreachable-if-body-no-result (param $x anyref) (if (ref.is_null (local.get $x) ) ;; The if body is unreachable, but the function has no returned value. ;; When we outline this code, we should not try to return a value. (block (call $import) (unreachable) ) ) ) ;; CHECK: (func $call-unreachable-if-body-no-result ;; CHECK-NEXT: (local $0 anyref) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$unreachable-if-body-no-result ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-B$unreachable-if-body-no-result ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$unreachable-if-body-no-result0 ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-B$unreachable-if-body-no-result ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-unreachable-if-body-no-result (call $unreachable-if-body-no-result (ref.null any)) (call $unreachable-if-body-no-result (ref.null any)) ) (func $multi-if (param $x anyref) (result anyref) (if (ref.is_null (local.get $x) ) (call $import) ) ;; A second if. We can outline both if bodies. (if (ref.is_func (local.get $x) ) (loop $x (call $import) (br_if $x (global.get $glob) ) ) ) (local.get $x) ) ;; CHECK: (func $call-multi-if ;; CHECK-NEXT: (local $0 anyref) ;; CHECK-NEXT: (local $1 anyref) ;; CHECK-NEXT: (local $2 anyref) ;; CHECK-NEXT: (local $3 anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$multi-if (result anyref) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-B$multi-if ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_func ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-B$multi-if_0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-B$multi-if0 (result anyref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-B$multi-if0 ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_func ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-B$multi-if_0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-multi-if (drop (call $multi-if (ref.null any))) (drop (call $multi-if (ref.null func))) ) ;; CHECK: (func $too-many-ifs (param $x anyref) (result anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) (func $too-many-ifs (param $x anyref) (result anyref) ;; 5 ifs, which is too many. (if (ref.is_null (local.get $x) ) (call $import) ) (if (ref.is_null (local.get $x) ) (call $import) ) (if (ref.is_null (local.get $x) ) (call $import) ) (if (ref.is_null (local.get $x) ) (call $import) ) (if (ref.is_null (local.get $x) ) (call $import) ) (local.get $x) ) ;; CHECK: (func $call-too-many-ifs ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $too-many-ifs ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $too-many-ifs ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-too-many-ifs (drop (call $too-many-ifs (ref.null any))) (drop (call $too-many-ifs (ref.null func))) ) ) ;; CHECK: (func $byn-split-outlined-A$maybe-work-hard (param $x i32) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-B$just-if (param $x i32) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br_if $l ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-A$many-params (param $x i64) (param $y i32) (param $z f64) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-A$condition-eqz (param $x i32) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-A$condition-global ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-A$condition-ref.is (param $x anyref) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-A$start-used-globally ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-A$colliding-name_0 (param $x i32) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-B$error-if-null (param $x anyref) (result anyref) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-B$unreachable-if-body-no-result (param $x anyref) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-B$multi-if_0 (param $x anyref) ;; CHECK-NEXT: (loop $x ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (br_if $x ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module ;; CHECK: (type $none_=>_none (func)) (type $none_=>_none (func)) ;; CHECK: (global $global$0 (mut i32) (i32.const 10)) (global $global$0 (mut i32) (i32.const 10)) ;; CHECK: (export "0" (func $0)) (export "0" (func $0)) ;; CHECK: (export "1" (func $1)) (export "1" (func $1)) ;; CHECK: (func $0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$10 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 ;; A function that is a good candidate to partially inline. (if (global.get $global$0) (return) ) (call $1) (call $1) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-A$0 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$00 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$10 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$01 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $1 ;; This and the previous function are mutually recursive. As a result, we ;; can keep partially inlining between them, creating new functions as we ;; go, even though that is not very useful. (call $0) ) ;; Add a lot more functions, so the # of functions is high which would ;; otherwise limit the # of iterations that we run. ;; CHECK: (func $2 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $2 (nop) ) ;; CHECK: (func $3 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $3 (nop) ) ;; CHECK: (func $4 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $4 (nop) ) ;; CHECK: (func $5 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $5 (nop) ) ;; CHECK: (func $6 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $6 (nop) ) ;; CHECK: (func $7 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $7 (nop) ) ;; CHECK: (func $8 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $8 (nop) ) ;; CHECK: (func $9 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $9 (nop) ) ;; CHECK: (func $10 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $10 (nop) ) ;; CHECK: (func $11 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $11 (nop) ) ;; CHECK: (func $12 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $12 (nop) ) ;; CHECK: (func $13 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $13 (nop) ) ;; CHECK: (func $14 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $14 (nop) ) ;; CHECK: (func $15 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $15 (nop) ) ;; CHECK: (func $16 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $16 (nop) ) ;; CHECK: (func $17 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $17 (nop) ) ;; CHECK: (func $18 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $18 (nop) ) ) ;; CHECK: (func $byn-split-outlined-A$0 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$0_0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$10 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$00 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$0_0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-A$0_0 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$0_1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$10 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$00 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $byn-split-outlined-A$0_1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn-split-outlined-A$0_1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$10 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (call $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/instrument-locals-eh.wast000066400000000000000000000013461423707623100247730ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --instrument-locals -all -S -o - | filecheck %s (module ;; CHECK: (tag $e (param i32)) (tag $e (param i32)) ;; CHECK: (func $test ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (local $x i32) (try (do) (catch $e ;; Pop instructions should not be instrumented (local.set $x (pop i32)) ) ) ) ) instrument-locals_all-features_disable-typed-function-references.wast000066400000000000000000000233761423707623100355450ustar00rootroot00000000000000binaryen-version_108/test/lit/passes;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --instrument-locals --all-features --disable-typed-function-references -S -o - | filecheck %s (module ;; CHECK: (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) ;; CHECK: (type $i32_i32_i64_=>_i64 (func (param i32 i32 i64) (result i64))) ;; CHECK: (type $i32_i32_f32_=>_f32 (func (param i32 i32 f32) (result f32))) ;; CHECK: (type $i32_i32_f64_=>_f64 (func (param i32 i32 f64) (result f64))) ;; CHECK: (type $i32_i32_funcref_=>_funcref (func (param i32 i32 funcref) (result funcref))) ;; CHECK: (type $i32_i32_anyref_=>_anyref (func (param i32 i32 anyref) (result anyref))) ;; CHECK: (type $i32_i32_eqref_=>_eqref (func (param i32 i32 eqref) (result eqref))) ;; CHECK: (type $i32_i32_i31ref_=>_i31ref (func (param i32 i32 i31ref) (result i31ref))) ;; CHECK: (type $i32_i32_dataref_=>_dataref (func (param i32 i32 dataref) (result dataref))) ;; CHECK: (type $i32_i32_v128_=>_v128 (func (param i32 i32 v128) (result v128))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "get_i32" (func $get_i32 (param i32 i32 i32) (result i32))) ;; CHECK: (import "env" "get_i64" (func $get_i64 (param i32 i32 i64) (result i64))) ;; CHECK: (import "env" "get_f32" (func $get_f32 (param i32 i32 f32) (result f32))) ;; CHECK: (import "env" "get_f64" (func $get_f64 (param i32 i32 f64) (result f64))) ;; CHECK: (import "env" "set_i32" (func $set_i32 (param i32 i32 i32) (result i32))) ;; CHECK: (import "env" "set_i64" (func $set_i64 (param i32 i32 i64) (result i64))) ;; CHECK: (import "env" "set_f32" (func $set_f32 (param i32 i32 f32) (result f32))) ;; CHECK: (import "env" "set_f64" (func $set_f64 (param i32 i32 f64) (result f64))) ;; CHECK: (import "env" "get_funcref" (func $get_funcref (param i32 i32 funcref) (result funcref))) ;; CHECK: (import "env" "set_funcref" (func $set_funcref (param i32 i32 funcref) (result funcref))) ;; CHECK: (import "env" "get_anyref" (func $get_anyref (param i32 i32 anyref) (result anyref))) ;; CHECK: (import "env" "set_anyref" (func $set_anyref (param i32 i32 anyref) (result anyref))) ;; CHECK: (import "env" "get_eqref" (func $get_eqref (param i32 i32 eqref) (result eqref))) ;; CHECK: (import "env" "set_eqref" (func $set_eqref (param i32 i32 eqref) (result eqref))) ;; CHECK: (import "env" "get_i31ref" (func $get_i31ref (param i32 i32 i31ref) (result i31ref))) ;; CHECK: (import "env" "set_i31ref" (func $set_i31ref (param i32 i32 i31ref) (result i31ref))) ;; CHECK: (import "env" "get_dataref" (func $get_dataref (param i32 i32 dataref) (result dataref))) ;; CHECK: (import "env" "set_dataref" (func $set_dataref (param i32 i32 dataref) (result dataref))) ;; CHECK: (import "env" "get_v128" (func $get_v128 (param i32 i32 v128) (result v128))) ;; CHECK: (import "env" "set_v128" (func $set_v128 (param i32 i32 v128) (result v128))) ;; CHECK: (elem declare func $test) ;; CHECK: (func $test ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i64) ;; CHECK-NEXT: (local $z f32) ;; CHECK-NEXT: (local $w f64) ;; CHECK-NEXT: (local $F funcref) ;; CHECK-NEXT: (local $X anyref) ;; CHECK-NEXT: (local $S v128) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_i32 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_f32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_f64 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_funcref ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (local.get $F) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_anyref ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (local.get $X) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_i32 ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_f32 ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_f64 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_funcref ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (local.get $F) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_anyref ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (local.get $X) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $set_i32 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (call $set_f32 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (f32.const 3.2100000381469727) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (call $set_f64 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (f64.const 4.321) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $F ;; CHECK-NEXT: (ref.func $test) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $X ;; CHECK-NEXT: (call $set_anyref ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (call $get_anyref ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (local.get $X) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (call $set_i32 ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i64.const 22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (call $set_f32 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (f32.const 33.209999084472656) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (call $set_f64 ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (f64.const 44.321) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $F ;; CHECK-NEXT: (call $set_funcref ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (call $get_funcref ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (local.get $F) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $X ;; CHECK-NEXT: (call $set_anyref ;; CHECK-NEXT: (i32.const 21) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (call $get_anyref ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (local.get $X) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $get_v128 ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (local.get $S) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $S ;; CHECK-NEXT: (call $set_v128 ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (v128.const i32x4 0x00000000 0x00000001 0x00000002 0x00000003) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (local $x i32) (local $y i64) (local $z f32) (local $w f64) (local $F funcref) (local $X externref) (local $S v128) (drop (local.get $x)) (drop (local.get $y)) (drop (local.get $z)) (drop (local.get $w)) (drop (local.get $F)) (drop (local.get $X)) (drop (local.get $x)) (drop (local.get $y)) (drop (local.get $z)) (drop (local.get $w)) (drop (local.get $F)) (drop (local.get $X)) (local.set $x (i32.const 1)) (local.set $y (i64.const 2)) (local.set $z (f32.const 3.21)) (local.set $w (f64.const 4.321)) (local.set $F (ref.func $test)) (local.set $X (local.get $X)) (local.set $x (i32.const 11)) (local.set $y (i64.const 22)) (local.set $z (f32.const 33.21)) (local.set $w (f64.const 44.321)) (local.set $F (local.get $F)) (local.set $X (local.get $X)) ;; Add new instructions here so expected output doesn't change too much, it ;; depends on order of instructions in this file. (drop (local.get $S)) (local.set $S (v128.const i32x4 0x00000000 0x00000001 0x00000002 0x00000003)) ) ) binaryen-version_108/test/lit/passes/instrument-memory-gc.wast000066400000000000000000000274221423707623100250260ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --instrument-memory -all -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt --instrument-memory --nominal -all -S -o - | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) ;; CHECK: (type $i32_f32_=>_f32 (func (param i32 f32) (result f32))) ;; CHECK: (type $i32_f64_=>_f64 (func (param i32 f64) (result f64))) ;; CHECK: (type $struct (struct (field (mut i32)) (field f32) (field $named f64))) ;; NOMNL: (type $i32_i32_=>_i32 (func_subtype (param i32 i32) (result i32) func)) ;; NOMNL: (type $i32_i64_=>_i64 (func_subtype (param i32 i64) (result i64) func)) ;; NOMNL: (type $i32_f32_=>_f32 (func_subtype (param i32 f32) (result f32) func)) ;; NOMNL: (type $i32_f64_=>_f64 (func_subtype (param i32 f64) (result f64) func)) ;; NOMNL: (type $struct (struct_subtype (field (mut i32)) (field f32) (field $named f64) data)) (type $struct (struct (field (mut i32)) (field f32) (field $named f64) )) ;; CHECK: (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) ;; CHECK: (type $ref|$struct|_=>_none (func (param (ref $struct)))) ;; CHECK: (type $ref|$array|_=>_none (func (param (ref $array)))) ;; CHECK: (type $array (array (mut f64))) ;; NOMNL: (type $i32_i32_i32_i32_=>_i32 (func_subtype (param i32 i32 i32 i32) (result i32) func)) ;; NOMNL: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; NOMNL: (type $ref|$array|_=>_none (func_subtype (param (ref $array)) func)) ;; NOMNL: (type $array (array_subtype (mut f64) data)) (type $array (array (mut f64))) ;; CHECK: (import "env" "load_ptr" (func $load_ptr (param i32 i32 i32 i32) (result i32))) ;; CHECK: (import "env" "load_val_i32" (func $load_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "load_val_i64" (func $load_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "load_val_f32" (func $load_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "load_val_f64" (func $load_val_f64 (param i32 f64) (result f64))) ;; CHECK: (import "env" "store_ptr" (func $store_ptr (param i32 i32 i32 i32) (result i32))) ;; CHECK: (import "env" "store_val_i32" (func $store_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "store_val_i64" (func $store_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "store_val_f32" (func $store_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "store_val_f64" (func $store_val_f64 (param i32 f64) (result f64))) ;; CHECK: (import "env" "struct_get_val_i32" (func $struct_get_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "struct_get_val_i64" (func $struct_get_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "struct_get_val_f32" (func $struct_get_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "struct_get_val_f64" (func $struct_get_val_f64 (param i32 f64) (result f64))) ;; CHECK: (import "env" "struct_set_val_i32" (func $struct_set_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "struct_set_val_i64" (func $struct_set_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "struct_set_val_f32" (func $struct_set_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "struct_set_val_f64" (func $struct_set_val_f64 (param i32 f64) (result f64))) ;; CHECK: (import "env" "array_get_val_i32" (func $array_get_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "array_get_val_i64" (func $array_get_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "array_get_val_f32" (func $array_get_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "array_get_val_f64" (func $array_get_val_f64 (param i32 f64) (result f64))) ;; CHECK: (import "env" "array_set_val_i32" (func $array_set_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "array_set_val_i64" (func $array_set_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "array_set_val_f32" (func $array_set_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "array_set_val_f64" (func $array_set_val_f64 (param i32 f64) (result f64))) ;; CHECK: (import "env" "array_get_index" (func $array_get_index (param i32 i32) (result i32))) ;; CHECK: (import "env" "array_set_index" (func $array_set_index (param i32 i32) (result i32))) ;; CHECK: (func $structs (param $x (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $struct_get_val_i32 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $struct_get_val_f32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (struct.get $struct 1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $struct_get_val_f64 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (struct.get $struct $named ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (call $struct_set_val_i32 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (import "env" "load_ptr" (func $load_ptr (param i32 i32 i32 i32) (result i32))) ;; NOMNL: (import "env" "load_val_i32" (func $load_val_i32 (param i32 i32) (result i32))) ;; NOMNL: (import "env" "load_val_i64" (func $load_val_i64 (param i32 i64) (result i64))) ;; NOMNL: (import "env" "load_val_f32" (func $load_val_f32 (param i32 f32) (result f32))) ;; NOMNL: (import "env" "load_val_f64" (func $load_val_f64 (param i32 f64) (result f64))) ;; NOMNL: (import "env" "store_ptr" (func $store_ptr (param i32 i32 i32 i32) (result i32))) ;; NOMNL: (import "env" "store_val_i32" (func $store_val_i32 (param i32 i32) (result i32))) ;; NOMNL: (import "env" "store_val_i64" (func $store_val_i64 (param i32 i64) (result i64))) ;; NOMNL: (import "env" "store_val_f32" (func $store_val_f32 (param i32 f32) (result f32))) ;; NOMNL: (import "env" "store_val_f64" (func $store_val_f64 (param i32 f64) (result f64))) ;; NOMNL: (import "env" "struct_get_val_i32" (func $struct_get_val_i32 (param i32 i32) (result i32))) ;; NOMNL: (import "env" "struct_get_val_i64" (func $struct_get_val_i64 (param i32 i64) (result i64))) ;; NOMNL: (import "env" "struct_get_val_f32" (func $struct_get_val_f32 (param i32 f32) (result f32))) ;; NOMNL: (import "env" "struct_get_val_f64" (func $struct_get_val_f64 (param i32 f64) (result f64))) ;; NOMNL: (import "env" "struct_set_val_i32" (func $struct_set_val_i32 (param i32 i32) (result i32))) ;; NOMNL: (import "env" "struct_set_val_i64" (func $struct_set_val_i64 (param i32 i64) (result i64))) ;; NOMNL: (import "env" "struct_set_val_f32" (func $struct_set_val_f32 (param i32 f32) (result f32))) ;; NOMNL: (import "env" "struct_set_val_f64" (func $struct_set_val_f64 (param i32 f64) (result f64))) ;; NOMNL: (import "env" "array_get_val_i32" (func $array_get_val_i32 (param i32 i32) (result i32))) ;; NOMNL: (import "env" "array_get_val_i64" (func $array_get_val_i64 (param i32 i64) (result i64))) ;; NOMNL: (import "env" "array_get_val_f32" (func $array_get_val_f32 (param i32 f32) (result f32))) ;; NOMNL: (import "env" "array_get_val_f64" (func $array_get_val_f64 (param i32 f64) (result f64))) ;; NOMNL: (import "env" "array_set_val_i32" (func $array_set_val_i32 (param i32 i32) (result i32))) ;; NOMNL: (import "env" "array_set_val_i64" (func $array_set_val_i64 (param i32 i64) (result i64))) ;; NOMNL: (import "env" "array_set_val_f32" (func $array_set_val_f32 (param i32 f32) (result f32))) ;; NOMNL: (import "env" "array_set_val_f64" (func $array_set_val_f64 (param i32 f64) (result f64))) ;; NOMNL: (import "env" "array_get_index" (func $array_get_index (param i32 i32) (result i32))) ;; NOMNL: (import "env" "array_set_index" (func $array_set_index (param i32 i32) (result i32))) ;; NOMNL: (func $structs (type $ref|$struct|_=>_none) (param $x (ref $struct)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $struct_get_val_i32 ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $struct_get_val_f32 ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (struct.get $struct 1 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $struct_get_val_f64 ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: (struct.get $struct $named ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.set $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (call $struct_set_val_i32 ;; NOMNL-NEXT: (i32.const 3) ;; NOMNL-NEXT: (i32.const 42) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $structs (param $x (ref $struct)) (drop (struct.get $struct 0 (local.get $x)) ) (drop (struct.get $struct 1 (local.get $x)) ) (drop (struct.get $struct 2 (local.get $x)) ) (struct.set $struct 0 (local.get $x) (i32.const 42)) ) ;; CHECK: (func $arrays (param $x (ref $array)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $array_get_val_f64 ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (array.get $array ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (call $array_get_index ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (array.set $array ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (call $array_set_index ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $array_set_val_f64 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $arrays (type $ref|$array|_=>_none) (param $x (ref $array)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $array_get_val_f64 ;; NOMNL-NEXT: (i32.const 5) ;; NOMNL-NEXT: (array.get $array ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (call $array_get_index ;; NOMNL-NEXT: (i32.const 4) ;; NOMNL-NEXT: (i32.const 10) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (array.set $array ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (call $array_set_index ;; NOMNL-NEXT: (i32.const 6) ;; NOMNL-NEXT: (i32.const 42) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $array_set_val_f64 ;; NOMNL-NEXT: (i32.const 7) ;; NOMNL-NEXT: (f64.const 3.14159) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $arrays (param $x (ref $array)) (drop (array.get $array (local.get $x) (i32.const 10)) ) (array.set $array (local.get $x) (i32.const 42) (f64.const 3.14159)) ) ) binaryen-version_108/test/lit/passes/instrument-memory.wast000066400000000000000000000536071423707623100244430ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --instrument-memory -S -o - | filecheck %s (module (memory 256 256) ;; CHECK: (type $1 (func)) (type $1 (func)) ;; CHECK: (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) ;; CHECK: (type $i32_f32_=>_f32 (func (param i32 f32) (result f32))) ;; CHECK: (type $i32_f64_=>_f64 (func (param i32 f64) (result f64))) ;; CHECK: (import "env" "load_ptr" (func $load_ptr (param i32 i32 i32 i32) (result i32))) ;; CHECK: (import "env" "load_val_i32" (func $load_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "load_val_i64" (func $load_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "load_val_f32" (func $load_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "load_val_f64" (func $load_val_f64 (param i32 f64) (result f64))) ;; CHECK: (import "env" "store_ptr" (func $store_ptr (param i32 i32 i32 i32) (result i32))) ;; CHECK: (import "env" "store_val_i32" (func $store_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "store_val_i64" (func $store_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "store_val_f32" (func $store_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "store_val_f64" (func $store_val_f64 (param i32 f64) (result f64))) ;; CHECK: (memory $0 256 256) ;; CHECK: (func $A ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i64.load8_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i64.load8_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.load16_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i64.load16_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i64.load32_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i64.load32_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (i64.load ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_f32 ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_f64 ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: (i32.load8_s offset=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: (i32.load16_s offset=3 align=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: (i32.load16_u offset=4 align=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: (i32.load offset=5 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i64.load8_s offset=6 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 21) ;; CHECK-NEXT: (i64.load8_u offset=7 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 21) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: (i64.load16_s offset=8 align=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: (i64.load16_u offset=9 align=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: (i64.load32_s offset=10 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i64.load32_u offset=11 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 26) ;; CHECK-NEXT: (i64.load offset=12 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 26) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_f32 ;; CHECK-NEXT: (i32.const 27) ;; CHECK-NEXT: (f32.load offset=13 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 27) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_f64 ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: (f64.load offset=14 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $A (type $1) (drop (i32.load8_s (i32.const 0))) (drop (i32.load8_u (i32.const 0))) (drop (i32.load16_s (i32.const 0))) (drop (i32.load16_u (i32.const 0))) (drop (i32.load (i32.const 0))) (drop (i64.load8_s (i32.const 0))) (drop (i64.load8_u (i32.const 0))) (drop (i64.load16_s (i32.const 0))) (drop (i64.load16_u (i32.const 0))) (drop (i64.load32_s (i32.const 0))) (drop (i64.load32_u (i32.const 0))) (drop (i64.load (i32.const 0))) (drop (f32.load (i32.const 0))) (drop (f64.load (i32.const 0))) (drop (i32.load8_s align=1 offset=1 (i32.const 0))) (drop (i32.load8_u align=1 offset=2 (i32.const 0))) (drop (i32.load16_s align=1 offset=3 (i32.const 0))) (drop (i32.load16_u align=1 offset=4 (i32.const 0))) (drop (i32.load align=2 offset=5 (i32.const 0))) (drop (i64.load8_s align=1 offset=6 (i32.const 0))) (drop (i64.load8_u align=1 offset=7 (i32.const 0))) (drop (i64.load16_s align=1 offset=8 (i32.const 0))) (drop (i64.load16_u align=1 offset=9 (i32.const 0))) (drop (i64.load32_s align=2 offset=10 (i32.const 0))) (drop (i64.load32_u align=2 offset=11 (i32.const 0))) (drop (i64.load align=2 offset=12 (i32.const 0))) (drop (f32.load align=2 offset=13 (i32.const 0))) (drop (f64.load align=2 offset=14 (i32.const 0))) ) ;; CHECK: (func $B ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 29) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 29) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store8 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store16 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 33) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 33) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store32 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: (i64.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 35) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 35) ;; CHECK-NEXT: (i64.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.store ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_f32 ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: (f32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_f64 ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: (f64.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 38) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 38) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 align=1 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 39) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 39) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=3 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store8 offset=4 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 41) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 41) ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store16 offset=5 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store32 offset=6 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: (i64.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store offset=7 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: (i64.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.store offset=8 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_f32 ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: (f32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=9 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 46) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_f64 ;; CHECK-NEXT: (i32.const 46) ;; CHECK-NEXT: (f64.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $B (type $1) (i32.store8 (i32.const 0) (i32.const 1)) (i32.store16 (i32.const 0) (i32.const 2)) (i32.store (i32.const 0) (i32.const 3)) (i64.store8 (i32.const 0) (i64.const 4)) (i64.store16 (i32.const 0) (i64.const 5)) (i64.store32 (i32.const 0) (i64.const 6)) (i64.store (i32.const 0) (i64.const 7)) (f32.store (i32.const 0) (f32.const 8)) (f64.store (i32.const 0) (f64.const 9)) (i32.store8 align=1 offset=1 (i32.const 0) (i32.const 1)) (i32.store16 align=1 offset=2 (i32.const 0) (i32.const 2)) (i32.store align=2 offset=3 (i32.const 0) (i32.const 3)) (i64.store8 align=1 offset=4 (i32.const 0) (i64.const 4)) (i64.store16 align=2 offset=5 (i32.const 0) (i64.const 5)) (i64.store32 align=2 offset=6 (i32.const 0) (i64.const 6)) (i64.store align=2 offset=7 (i32.const 0) (i64.const 7)) (f32.store align=2 offset=8 (i32.const 0) (f32.const 8)) (f64.store align=2 offset=9 (i32.const 0) (f64.const 9)) ) ) binaryen-version_108/test/lit/passes/instrument-memory64.wast000066400000000000000000000536411423707623100246130ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --instrument-memory --enable-memory64 -S -o - | filecheck %s (module (memory i64 256 256) ;; CHECK: (type $1 (func)) (type $1 (func)) ;; CHECK: (type $i32_i32_i64_i64_=>_i64 (func (param i32 i32 i64 i64) (result i64))) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) ;; CHECK: (type $i32_f32_=>_f32 (func (param i32 f32) (result f32))) ;; CHECK: (type $i32_f64_=>_f64 (func (param i32 f64) (result f64))) ;; CHECK: (import "env" "load_ptr" (func $load_ptr (param i32 i32 i64 i64) (result i64))) ;; CHECK: (import "env" "load_val_i32" (func $load_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "load_val_i64" (func $load_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "load_val_f32" (func $load_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "load_val_f64" (func $load_val_f64 (param i32 f64) (result f64))) ;; CHECK: (import "env" "store_ptr" (func $store_ptr (param i32 i32 i64 i64) (result i64))) ;; CHECK: (import "env" "store_val_i32" (func $store_val_i32 (param i32 i32) (result i32))) ;; CHECK: (import "env" "store_val_i64" (func $store_val_i64 (param i32 i64) (result i64))) ;; CHECK: (import "env" "store_val_f32" (func $store_val_f32 (param i32 f32) (result f32))) ;; CHECK: (import "env" "store_val_f64" (func $store_val_f64 (param i32 f64) (result f64))) ;; CHECK: (memory $0 i64 256 256) ;; CHECK: (func $A ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i64.load8_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i64.load8_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.load16_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i64.load16_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i64.load32_s ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i64.load32_u ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (i64.load ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_f32 ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_f64 ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: (i32.load8_s offset=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (i32.load8_u offset=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: (i32.load16_s offset=3 align=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: (i32.load16_u offset=4 align=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i32 ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: (i32.load offset=5 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i64.load8_s offset=6 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 6) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 21) ;; CHECK-NEXT: (i64.load8_u offset=7 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 21) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 7) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: (i64.load16_s offset=8 align=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 8) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: (i64.load16_u offset=9 align=1 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 9) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: (i64.load32_s offset=10 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 10) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i64.load32_u offset=11 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 11) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_i64 ;; CHECK-NEXT: (i32.const 26) ;; CHECK-NEXT: (i64.load offset=12 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 26) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 12) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_f32 ;; CHECK-NEXT: (i32.const 27) ;; CHECK-NEXT: (f32.load offset=13 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 27) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 13) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $load_val_f64 ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: (f64.load offset=14 align=2 ;; CHECK-NEXT: (call $load_ptr ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 14) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $A (type $1) (drop (i32.load8_s (i64.const 0))) (drop (i32.load8_u (i64.const 0))) (drop (i32.load16_s (i64.const 0))) (drop (i32.load16_u (i64.const 0))) (drop (i32.load (i64.const 0))) (drop (i64.load8_s (i64.const 0))) (drop (i64.load8_u (i64.const 0))) (drop (i64.load16_s (i64.const 0))) (drop (i64.load16_u (i64.const 0))) (drop (i64.load32_s (i64.const 0))) (drop (i64.load32_u (i64.const 0))) (drop (i64.load (i64.const 0))) (drop (f32.load (i64.const 0))) (drop (f64.load (i64.const 0))) (drop (i32.load8_s align=1 offset=1 (i64.const 0))) (drop (i32.load8_u align=1 offset=2 (i64.const 0))) (drop (i32.load16_s align=1 offset=3 (i64.const 0))) (drop (i32.load16_u align=1 offset=4 (i64.const 0))) (drop (i32.load align=2 offset=5 (i64.const 0))) (drop (i64.load8_s align=1 offset=6 (i64.const 0))) (drop (i64.load8_u align=1 offset=7 (i64.const 0))) (drop (i64.load16_s align=1 offset=8 (i64.const 0))) (drop (i64.load16_u align=1 offset=9 (i64.const 0))) (drop (i64.load32_s align=2 offset=10 (i64.const 0))) (drop (i64.load32_u align=2 offset=11 (i64.const 0))) (drop (i64.load align=2 offset=12 (i64.const 0))) (drop (f32.load align=2 offset=13 (i64.const 0))) (drop (f64.load align=2 offset=14 (i64.const 0))) ) ;; CHECK: (func $B ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 29) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 29) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store8 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store16 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 33) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 33) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store32 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: (i64.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 35) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 35) ;; CHECK-NEXT: (i64.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.store ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_f32 ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: (f32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_f64 ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: (f64.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 offset=1 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 38) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 38) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 offset=2 align=1 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 39) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 39) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=3 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i32 ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store8 offset=4 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 41) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 41) ;; CHECK-NEXT: (i64.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store16 offset=5 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store32 offset=6 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 6) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: (i64.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store offset=7 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 7) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_i64 ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: (i64.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.store offset=8 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 8) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_f32 ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: (f32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store offset=9 align=2 ;; CHECK-NEXT: (call $store_ptr ;; CHECK-NEXT: (i32.const 46) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 9) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $store_val_f64 ;; CHECK-NEXT: (i32.const 46) ;; CHECK-NEXT: (f64.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $B (type $1) (i32.store8 (i64.const 0) (i32.const 1)) (i32.store16 (i64.const 0) (i32.const 2)) (i32.store (i64.const 0) (i32.const 3)) (i64.store8 (i64.const 0) (i64.const 4)) (i64.store16 (i64.const 0) (i64.const 5)) (i64.store32 (i64.const 0) (i64.const 6)) (i64.store (i64.const 0) (i64.const 7)) (f32.store (i64.const 0) (f32.const 8)) (f64.store (i64.const 0) (f64.const 9)) (i32.store8 align=1 offset=1 (i64.const 0) (i32.const 1)) (i32.store16 align=1 offset=2 (i64.const 0) (i32.const 2)) (i32.store align=2 offset=3 (i64.const 0) (i32.const 3)) (i64.store8 align=1 offset=4 (i64.const 0) (i64.const 4)) (i64.store16 align=2 offset=5 (i64.const 0) (i64.const 5)) (i64.store32 align=2 offset=6 (i64.const 0) (i64.const 6)) (i64.store align=2 offset=7 (i64.const 0) (i64.const 7)) (f32.store align=2 offset=8 (i64.const 0) (f32.const 8)) (f64.store align=2 offset=9 (i64.const 0) (f64.const 9)) ) ) binaryen-version_108/test/lit/passes/intrinsic-lowering.wast000066400000000000000000000037121423707623100245430ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --intrinsic-lowering -all -S -o - | filecheck %s (module ;; CHECK: (type $none (func)) (type $none (func)) ;; call.without.effects with no params. ;; CHECK: (import "binaryen-intrinsics" "call.without.effects" (func $cwe-v (param funcref) (result i32))) (import "binaryen-intrinsics" "call.without.effects" (func $cwe-v (param funcref) (result i32))) ;; call.without.effects with some params. ;; CHECK: (import "binaryen-intrinsics" "call.without.effects" (func $cwe-dif (param f64 i32 funcref) (result f32))) (import "binaryen-intrinsics" "call.without.effects" (func $cwe-dif (param f64) (param i32) (param funcref) (result f32))) ;; call.without.effects with no result. ;; CHECK: (import "binaryen-intrinsics" "call.without.effects" (func $cwe-n (param funcref))) (import "binaryen-intrinsics" "call.without.effects" (func $cwe-n (param funcref))) ;; CHECK: (func $test (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $test) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $dif ;; CHECK-NEXT: (f64.const 3.14159) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.null $none) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $test (result i32) ;; These will be lowered into calls. (drop (call $cwe-v (ref.func $test))) (drop (call $cwe-dif (f64.const 3.14159) (i32.const 42) (ref.func $dif))) ;; The last must be a call_ref, as we don't see a constant ref.func (call $cwe-n (ref.null $none) ) (i32.const 1) ) ;; CHECK: (func $dif (param $0 f64) (param $1 i32) (result f32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $dif (param f64) (param i32) (result f32) ;; Helper function for the above. (unreachable) ) ) binaryen-version_108/test/lit/passes/local-cse.wast000066400000000000000000000257571423707623100225740ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --local-cse -S -o - | filecheck %s (module (memory 100 100) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $none_=>_i64 (func (result i64))) ;; CHECK: (memory $0 100 100) ;; CHECK: (func $basics ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $basics) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $basics (local $x i32) (local $y i32) ;; These two adds can be optimized. (drop (i32.add (i32.const 1) (i32.const 2)) ) (drop (i32.add (i32.const 1) (i32.const 2)) ) (if (i32.const 0) (nop)) ;; This add is after an if, which means we are no longer in the same basic ;; block - which means we cannot optimize it with the previous identical ;; adds. (drop (i32.add (i32.const 1) (i32.const 2)) ) ;; More adds with different contents than the previous, but all three are ;; identical. (drop (i32.add (local.get $x) (local.get $y)) ) (drop (i32.add (local.get $x) (local.get $y)) ) (drop (i32.add (local.get $x) (local.get $y)) ) ;; Calls have side effects, but that is not a problem for these adds which ;; only use locals, so we can optimize the add after the call. (call $basics) (drop (i32.add (local.get $x) (local.get $y)) ) ;; Modify $x, which means we cannot optimize the add after the set. (local.set $x (i32.const 100)) (drop (i32.add (local.get $x) (local.get $y)) ) ) ;; CHECK: (func $recursive1 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $recursive1 (local $x i32) (local $y i32) ;; The first two dropped things are identical and can be optimized. (drop (i32.add (i32.const 1) (i32.add (i32.const 2) (i32.const 3) ) ) ) (drop (i32.add (i32.const 1) (i32.add (i32.const 2) (i32.const 3) ) ) ) ;; The last thing here appears inside the previous pattern, and can still ;; be optimized, with another local. (drop (i32.add (i32.const 2) (i32.const 3) ) ) ) ;; CHECK: (func $recursive2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $recursive2 (local $x i32) (local $y i32) ;; As before, but the order is different, with the sub-pattern in the ;; middle. (drop (i32.add (i32.const 1) (i32.add (i32.const 2) (i32.const 3) ) ) ) (drop (i32.add (i32.const 2) (i32.const 3) ) ) (drop (i32.add (i32.const 1) (i32.add (i32.const 2) (i32.const 3) ) ) ) ) ;; CHECK: (func $self ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $self (local $x i32) (local $y i32) ;; As before, with just the large pattern and the sub pattern, but no ;; repeats of the large pattern. (drop (i32.add (i32.add (i32.const 2) (i32.const 3) ) (i32.add (i32.const 2) (i32.const 3) ) ) ) (drop (i32.add (i32.const 2) (i32.const 3) ) ) ) ;; CHECK: (func $loads ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $loads ;; The possible trap on loads does not prevent optimization, since if we ;; trap then it doesn't matter that we replaced the later expression. (drop (i32.load (i32.const 10)) ) (drop (i32.load (i32.const 10)) ) ) ;; CHECK: (func $calls (param $x i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $calls ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $calls ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) (func $calls (param $x i32) (result i32) ;; The side effects of calls prevent optimization. (drop (call $calls (i32.const 10)) ) (drop (call $calls (i32.const 10)) ) (i32.const 10) ) ;; CHECK: (func $many-sets (result i64) ;; CHECK-NEXT: (local $temp i64) ;; CHECK-NEXT: (local $1 i64) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i64.add ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (i64.const 9999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) (func $many-sets (result i64) (local $temp i64) ;; Assign to $temp three times here. We can optimize the add regardless of ;; that, and should not be confused by the sets themselves having effects ;; that are in conflict (the value is what matters). (local.set $temp (i64.add (i64.const 1) (i64.const 2) ) ) (local.set $temp (i64.const 9999) ) (local.set $temp (i64.add (i64.const 1) (i64.const 2) ) ) (local.get $temp) ) ;; CHECK: (func $switch-children (param $x i32) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (block $label$1 (result i32) ;; CHECK-NEXT: (br_table $label$1 $label$1 ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $switch-children (param $x i32) (result i32) (block $label$1 (result i32) ;; We can optimize the two children of this switch. This test verifies ;; that we do so properly and do not hit an assertion involving the ;; ordering of the switch's children, which was incorrect in the past. (br_table $label$1 $label$1 (i32.and (local.get $x) (i32.const 3) ) (i32.and (local.get $x) (i32.const 3) ) ) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $glob (mut i32) (i32.const 1)) (global $glob (mut i32) (i32.const 1)) ;; CHECK: (global $other-glob (mut i32) (i32.const 1)) (global $other-glob (mut i32) (i32.const 1)) ;; CHECK: (func $global ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $other-glob ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $glob ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $global ;; We should optimize redundant global.get operations. (drop (global.get $glob)) (drop (global.get $glob)) ;; We can do it past a write to another global (global.set $other-glob (i32.const 100)) (drop (global.get $glob)) ;; But we can't do it past a write to our global. (global.set $glob (i32.const 200)) (drop (global.get $glob)) ) ) binaryen-version_108/test/lit/passes/local-cse_all-features.wast000066400000000000000000000224401423707623100252220ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --local-cse --all-features -S -o - | filecheck %s (module ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (elem declare func $calls $ref.func) ;; CHECK: (func $calls (param $x i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (ref.func $calls) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (ref.func $calls) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) (func $calls (param $x i32) (result i32) ;; The side effects of calls prevent optimization. (drop (call_ref (i32.const 10) (ref.func $calls)) ) (drop (call_ref (i32.const 10) (ref.func $calls)) ) (i32.const 20) ) ;; CHECK: (func $ref.func ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $ref.func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $ref.func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ref.func ;; RefFunc and other constants should be ignored - don't undo the effects ;; of constant propagation. (drop (ref.func $ref.func) ) (drop (ref.func $ref.func) ) ) ) (module ;; CHECK: (type $A (struct (field i32))) (type $A (struct (field i32))) ;; CHECK: (type $B (array (mut i32))) (type $B (array (mut i32))) ;; CHECK: (type $ref|$A|_=>_none (func (param (ref $A)))) ;; CHECK: (type $ref?|$A|_=>_none (func (param (ref null $A)))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $ref?|$B|_ref|$A|_=>_none (func (param (ref null $B) (ref $A)))) ;; CHECK: (func $struct-gets-nullable (param $ref (ref null $A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (struct.get $A 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $struct-gets-nullable (param $ref (ref null $A)) ;; Repeated loads from a struct can be optimized, even with a nullable ;; reference: if we trap, it does not matter that we replaced the later ;; expressions). (drop (struct.get $A 0 (local.get $ref) ) ) (drop (struct.get $A 0 (local.get $ref) ) ) (drop (struct.get $A 0 (local.get $ref) ) ) ) ;; CHECK: (func $struct-gets (param $ref (ref $A)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (struct.get $A 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $struct-gets (param $ref (ref $A)) ;; Repeated loads from a struct can be optimized. ;; ;; A potential trap would not stop us (see previous testcase), but here ;; there is also no trap possible anyhow, and we should optimize. (drop (struct.get $A 0 (local.get $ref) ) ) (drop (struct.get $A 0 (local.get $ref) ) ) (drop (struct.get $A 0 (local.get $ref) ) ) ) ;; CHECK: (func $non-nullable-value (param $ref (ref $A)) ;; CHECK-NEXT: (local $1 (ref null $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (select (result (ref $A)) ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $non-nullable-value (param $ref (ref $A)) ;; The value that is repeated is non-nullable, which we must do some fixups ;; for after creating a local of that type. (drop (select (result (ref $A)) (local.get $ref) (local.get $ref) (i32.const 1) ) ) (drop (select (result (ref $A)) (local.get $ref) (local.get $ref) (i32.const 1) ) ) ) ;; CHECK: (func $creations ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $A ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (rtt.canon $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_with_rtt $A ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (rtt.canon $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (array.new_with_rtt $B ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (rtt.canon $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (array.new_with_rtt $B ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (rtt.canon $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $creations ;; Allocating GC data has no side effects, but each allocation is unique ;; and so we cannot replace separate allocations with a single one. (drop (struct.new_with_rtt $A (i32.const 1) (rtt.canon $A) ) ) (drop (struct.new_with_rtt $A (i32.const 1) (rtt.canon $A) ) ) (drop (array.new_with_rtt $B (i32.const 1) (i32.const 1) (rtt.canon $B) ) ) (drop (array.new_with_rtt $B (i32.const 1) (i32.const 1) (rtt.canon $B) ) ) ) ;; CHECK: (func $structs-and-arrays-do-not-alias (param $array (ref null $B)) (param $struct (ref $A)) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (array.set $B ;; CHECK-NEXT: (local.get $array) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (struct.get $A 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (array.set $B ;; CHECK-NEXT: (local.get $array) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (array.set $B ;; CHECK-NEXT: (local.get $array) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $structs-and-arrays-do-not-alias (param $array (ref null $B)) (param $struct (ref $A)) ;; ArraySets to consecutive elements, using some fixed StructGet value. This ;; common pattern in j2cl can be optimized, as structs and arrays do not ;; alias. (array.set $B (local.get $array) (i32.const 0) (struct.get $A 0 (local.get $struct) ) ) (array.set $B (local.get $array) (i32.const 1) (struct.get $A 0 (local.get $struct) ) ) (array.set $B (local.get $array) (i32.const 2) (struct.get $A 0 (local.get $struct) ) ) ) ) (module ;; Real-world testcase from AssemblyScript, containing multiple nested things ;; that can be optimized. The inputs to the add (the xors) are identical, and ;; we can avoid repeating them. ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (func $div16_internal (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $div16_internal (param $0 i32) (param $1 i32) (result i32) (i32.add (i32.xor (i32.shr_s (i32.shl (local.get $0) (i32.const 16) ) (i32.const 16) ) (i32.shr_s (i32.shl (local.get $1) (i32.const 16) ) (i32.const 16) ) ) (i32.xor (i32.shr_s (i32.shl (local.get $0) (i32.const 16) ) (i32.const 16) ) (i32.shr_s (i32.shl (local.get $1) (i32.const 16) ) (i32.const 16) ) ) ) ) ) binaryen-version_108/test/lit/passes/local-subtyping-nn.wast000066400000000000000000000063201423707623100244400ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --local-subtyping -all --enable-gc-nn-locals -S -o - \ ;; RUN: | filecheck %s ;; RUN: wasm-opt %s --local-subtyping -all --enable-gc-nn-locals --nominal -S -o - \ ;; RUN: | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $struct (struct )) ;; NOMNL: (type $struct (struct_subtype data)) (type $struct (struct)) ;; CHECK: (import "out" "i32" (func $i32 (result i32))) ;; NOMNL: (import "out" "i32" (func $i32 (result i32))) (import "out" "i32" (func $i32 (result i32))) ;; CHECK: (func $non-nullable ;; CHECK-NEXT: (local $x (ref $struct)) ;; CHECK-NEXT: (local $y (ref $none_=>_i32)) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $non-nullable (type $none_=>_none) ;; NOMNL-NEXT: (local $x (ref $struct)) ;; NOMNL-NEXT: (local $y (ref $none_=>_i32)) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.null $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $y ;; NOMNL-NEXT: (ref.func $i32) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $non-nullable (local $x (ref null $struct)) (local $y anyref) ;; x is assigned a value that is non-nullable. (local.set $x (ref.as_non_null (ref.null $struct)) ) ;; y is assigned a value that is non-nullable, and also allows a more ;; specific heap type. (local.set $y (ref.func $i32) ) ;; Verify that the presence of a get does not alter things. (drop (local.get $x) ) ) ;; CHECK: (func $uses-default (param $i i32) ;; CHECK-NEXT: (local $x (ref null $struct)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $uses-default (type $i32_=>_none) (param $i i32) ;; NOMNL-NEXT: (local $x (ref null $struct)) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $i) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.null $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $uses-default (param $i i32) (local $x (ref null any)) (if (local.get $i) ;; The only set to this local uses a non-nullable type. (local.set $x (ref.as_non_null (ref.null $struct)) ) ) (drop ;; This get may use the null value, so we can refine the heap type but not ;; alter nullability. (local.get $x) ) ) ) binaryen-version_108/test/lit/passes/local-subtyping.wast000066400000000000000000000257441423707623100240420ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --local-subtyping -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (type ${} (struct )) (type ${} (struct_subtype data)) ;; CHECK: (type ${i32} (struct (field i32))) (type ${i32} (struct_subtype (field i32) data)) ;; CHECK: (import "out" "i32" (func $i32 (result i32))) (import "out" "i32" (func $i32 (result i32))) ;; CHECK: (import "out" "i64" (func $i64 (result i64))) (import "out" "i64" (func $i64 (result i64))) ;; Refinalization can find a more specific type, where the declared type was ;; not the optimal LUB. ;; CHECK: (func $refinalize (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref func)) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: (ref.func $i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block (result (ref func)) ;; CHECK-NEXT: (br $block ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.func $i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $refinalize (param $x i32) (drop (if (result anyref) (local.get $x) (ref.func $i32) (ref.func $i64) ) ) (drop (block $block (result anyref) (br $block (ref.func $i32) ) (ref.func $i64) ) ) ) ;; A simple case where a local has a single assignment that we can use as a ;; more specific type. A similar thing with a parameter, however, is not a ;; thing we can optimize. Also, ignore a local with zero assignments. ;; CHECK: (func $simple-local-but-not-param (param $x anyref) ;; CHECK-NEXT: (local $y (ref null $none_=>_i32)) ;; CHECK-NEXT: (local $unused anyref) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $simple-local-but-not-param (param $x anyref) (local $y anyref) (local $unused anyref) (local.set $x (ref.func $i32) ) (local.set $y (ref.func $i32) ) ) ;; CHECK: (func $locals-with-multiple-assignments ;; CHECK-NEXT: (local $x funcref) ;; CHECK-NEXT: (local $y (ref null $none_=>_i32)) ;; CHECK-NEXT: (local $z (ref null $none_=>_i64)) ;; CHECK-NEXT: (local $w funcref) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.func $i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (ref.func $i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (ref.func $i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (ref.func $i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $locals-with-multiple-assignments (local $x anyref) (local $y anyref) (local $z anyref) (local $w funcref) ;; x is assigned two different types with a new LUB possible (local.set $x (ref.func $i32) ) (local.set $x (ref.func $i64) ) ;; y and z are assigned the same more specific type twice (local.set $y (ref.func $i32) ) (local.set $y (ref.func $i32) ) (local.set $z (ref.func $i64) ) (local.set $z (ref.func $i64) ) ;; w is assigned two different types *without* a new LUB possible, as it ;; already had the optimal LUB (local.set $w (ref.func $i32) ) (local.set $w (ref.func $i64) ) ) ;; In some cases multiple iterations are necessary, as one inferred new type ;; applies to a get which then allows another inference. ;; CHECK: (func $multiple-iterations ;; CHECK-NEXT: (local $x (ref null $none_=>_i32)) ;; CHECK-NEXT: (local $y (ref null $none_=>_i32)) ;; CHECK-NEXT: (local $z (ref null $none_=>_i32)) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multiple-iterations (local $x anyref) (local $y anyref) (local $z anyref) (local.set $x (ref.func $i32) ) (local.set $y (local.get $x) ) (local.set $z (local.get $y) ) ) ;; Sometimes a refinalize is necessary in between the iterations. ;; CHECK: (func $multiple-iterations-refinalize (param $i i32) ;; CHECK-NEXT: (local $x (ref null $none_=>_i32)) ;; CHECK-NEXT: (local $y (ref null $none_=>_i64)) ;; CHECK-NEXT: (local $z funcref) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (ref.func $i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (select (result funcref) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multiple-iterations-refinalize (param $i i32) (local $x anyref) (local $y anyref) (local $z anyref) (local.set $x (ref.func $i32) ) (local.set $y (ref.func $i64) ) (local.set $z (select (local.get $x) (local.get $y) (local.get $i) ) ) ) ;; CHECK: (func $nondefaultable ;; CHECK-NEXT: (local $x (anyref anyref)) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: (ref.func $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nondefaultable (local $x (anyref anyref)) ;; This tuple is assigned non-nullable values, which means the subtype is ;; nondefaultable, and we must not apply it. (local.set $x (tuple.make (ref.func $i32) (ref.func $i32) ) ) ) ;; CHECK: (func $uses-default (param $i i32) ;; CHECK-NEXT: (local $x (ref null $i32_=>_none)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.func $uses-default) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $uses-default (param $i i32) (local $x anyref) (if (local.get $i) ;; The only set to this local uses a more specific type than anyref. (local.set $x (ref.func $uses-default)) ) (drop ;; This get may use the default value, but it is ok to have a null of a ;; more refined type in the local. (local.get $x) ) ) ;; CHECK: (func $unreachables (result funcref) ;; CHECK-NEXT: (local $temp (ref null $none_=>_funcref)) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (ref.func $unreachables) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block (result (ref null $none_=>_funcref)) ;; CHECK-NEXT: (local.tee $temp ;; CHECK-NEXT: (ref.func $unreachables) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) (func $unreachables (result funcref) (local $temp funcref) ;; Set a value that allows us to refine the local's type. (local.set $temp (ref.func $unreachables) ) (unreachable) ;; A tee that is not reachable. We must still update its type, and the ;; parents. (drop (block (result funcref) (local.tee $temp (ref.func $unreachables) ) ) ) ;; A get that is not reachable. We must still update its type. (local.get $temp) ) ;; CHECK: (func $incompatible-sets (result i32) ;; CHECK-NEXT: (local $temp (ref null $none_=>_i32)) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (ref.func $incompatible-sets) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $temp ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $temp ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $incompatible-sets (result i32) (local $temp funcref) ;; Set a value that allows us to specialize the local type. (local.set $temp (ref.func $incompatible-sets) ) ;; Make all code unreachable from here. (unreachable) ;; In unreachable code, assign values that are not compatible with the more ;; specific type we will optimize to. Those cannot be left as they are, and ;; will be fixed up so that they validate. (All we need is validation, as ;; their contents do not matter, given they are not reached.) (drop (local.tee $temp (ref.null func) ) ) (local.set $temp (ref.null func) ) (unreachable) ) ;; CHECK: (func $update-nulls ;; CHECK-NEXT: (local $x (ref null ${})) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.null ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.null ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (struct.new_default ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.null ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.null ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.null ${}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.null ${i32}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $update-nulls (local $x anyref) (local.set $x (ref.null any)) (local.set $x (ref.null eq)) ;; All the nulls can be changed into other nulls here, for the new LUB, ;; which will be ${} (local.set $x (struct.new ${})) (local.set $x (ref.null data)) ;; Note that this func null is even of a type that is incompatible with the ;; new lub (func vs data). Still, we can just update it along with the ;; others. (local.set $x (ref.null func)) ;; This null is equal to the LUB we'll find, and will not change. (local.set $x (ref.null ${})) ;; This null is more specific than the LUB we'll find, and will not change, ;; as there is no point to making something less specific in type. (local.set $x (ref.null ${i32})) ) ) binaryen-version_108/test/lit/passes/memory-packing_all-features.wast000066400000000000000000002231411423707623100263030ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --memory-packing --all-features -S -o - | filecheck %s (module ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32)) ;; CHECK: (memory $0 2048 2048) (memory $0 2048 2048) (import "env" "memoryBase" (global $memoryBase i32)) ;; nothing ) (module ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32)) ;; CHECK: (memory $0 2048 2048) (memory $0 2048 2048) (import "env" "memoryBase" (global $memoryBase i32)) (data (i32.const 4066) "") ;; empty ) (module ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32)) ;; CHECK: (memory $0 2048 2048) (memory $0 2048 2048) (import "env" "memoryBase" (global $memoryBase i32)) (data (global.get $memoryBase) "waka this cannot be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we don't know where it will go") ) ;; CHECK: (data (global.get $memoryBase) "waka this cannot be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we don\'t know where it will go") (module (memory 1 1) (data (i32.const 1024) "waka this CAN be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we DO know where it will go") (data (i32.const 2000) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeros before") (data (i32.const 3000) "zeros after\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 4000) "zeros\00in\00the\00middle\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00nice skip here\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00another\00but no") ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (memory $0 1 1) ;; CHECK: (data (i32.const 1024) "waka this CAN be optimized") ;; CHECK: (data (i32.const 1107) "we DO know where it will go") ;; CHECK: (data (i32.const 2057) "zeros before") ;; CHECK: (data (i32.const 3000) "zeros after") ;; CHECK: (data (i32.const 4000) "zeros\00in\00the\00middle") ;; CHECK: (data (i32.const 4035) "nice skip here") ;; CHECK: (data (i32.const 4066) "another\00but no") ;; CHECK: (func $nonzero-size-init-of-active-will-trap ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nonzero-size-init-of-active-will-trap (memory.init 0 (i32.const 42) (i32.const 0) (i32.const 13) ) (data.drop 0) ) ;; CHECK: (func $nonzero-offset-init-of-active-will-trap ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nonzero-offset-init-of-active-will-trap (memory.init 0 (i32.const 42) (i32.const 13) (i32.const 0) ) (data.drop 0) ) ;; CHECK: (func $zero-offset-size-init-of-active-may-trap ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $zero-offset-size-init-of-active-may-trap (memory.init 0 (i32.const 42) (i32.const 0) (i32.const 0) ) (data.drop 0) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_0 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0)) ;; CHECK: (memory $0 2048 2048) (memory $0 2048 2048) (data "not referenced, delete me") ;; 0 ;; CHECK: (data "zeroes at start") ;; CHECK: (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes at start") (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes at start") ;; 1 ;; CHECK: (data "\00\00\00few zeroes at start") ;; CHECK: (data "zeroes at end") ;; CHECK: (data "zeroes at end\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; CHECK: (data "few zeroes at end\00\00\00") ;; CHECK: (data "zeroes") ;; CHECK: (data "in middle") ;; CHECK: (data "zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00in middle") ;; CHECK: (data "few zeroes\00\00\00in middle") ;; CHECK: (data "multiple") ;; CHECK: (data "spans") ;; CHECK: (data "of zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "no zeroes") ;; CHECK: (func $zeroes-at-start ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 0 ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zeroes-at-start (memory.init 1 (i32.const 0) (i32.const 0) (i32.const 45) ) (data.drop 1) ) ;; the not-split tests have too many memory.init and data.drop instructions for splitting to be worth it (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes at start") ;; 2 ;; CHECK: (func $zeroes-at-start-not-split ;; CHECK-NEXT: (memory.init 1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 1) ;; CHECK-NEXT: ) (func $zeroes-at-start-not-split (memory.init 2 (i32.const 0) (i32.const 0) (i32.const 45) ) (memory.init 2 (i32.const 0) (i32.const 0) (i32.const 45) ) (memory.init 2 (i32.const 0) (i32.const 0) (i32.const 45) ) (memory.init 2 (i32.const 0) (i32.const 0) (i32.const 45) ) (data.drop 2) ) (data "\00\00\00few zeroes at start") ;; 3 ;; CHECK: (func $few-zeroes-at-start ;; CHECK-NEXT: (memory.init 2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 2) ;; CHECK-NEXT: ) (func $few-zeroes-at-start (memory.init 3 (i32.const 0) (i32.const 0) (i32.const 22) ) (data.drop 3) ) (data "zeroes at end\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 4 ;; CHECK: (func $zeroes-at-end ;; CHECK-NEXT: (block ;; CHECK-NEXT: (memory.init 3 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 3) ;; CHECK-NEXT: ) (func $zeroes-at-end (memory.init 4 (i32.const 0) (i32.const 0) (i32.const 43) ) (data.drop 4) ) (data "zeroes at end\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 5 ;; CHECK: (func $zeroes-at-end-not-split ;; CHECK-NEXT: (memory.init 4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 4) ;; CHECK-NEXT: ) (func $zeroes-at-end-not-split (memory.init 5 (i32.const 0) (i32.const 0) (i32.const 43) ) (memory.init 5 (i32.const 0) (i32.const 0) (i32.const 43) ) (memory.init 5 (i32.const 0) (i32.const 0) (i32.const 43) ) (memory.init 5 (i32.const 0) (i32.const 0) (i32.const 43) ) (data.drop 5) ) (data "few zeroes at end\00\00\00") ;; 6 ;; CHECK: (func $few-zeroes-at-end ;; CHECK-NEXT: (memory.init 5 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 5) ;; CHECK-NEXT: ) (func $few-zeroes-at-end (memory.init 6 (i32.const 0) (i32.const 0) (i32.const 20) ) (data.drop 6) ) (data "zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00in middle") ;; 7 ;; CHECK: (func $zeroes-in-middle ;; CHECK-NEXT: (block ;; CHECK-NEXT: (memory.init 6 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 7 ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (data.drop 6) ;; CHECK-NEXT: (data.drop 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zeroes-in-middle (memory.init 7 (i32.const 0) (i32.const 0) (i32.const 45) ) (data.drop 7) ) (data "zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00in middle") ;; 8 ;; CHECK: (func $zeroes-in-middle-not-split ;; CHECK-NEXT: (memory.init 8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 35) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 8) ;; CHECK-NEXT: ) (func $zeroes-in-middle-not-split (memory.init 8 (i32.const 0) (i32.const 0) (i32.const 35) ) (memory.init 8 (i32.const 0) (i32.const 0) (i32.const 45) ) (data.drop 8) ) (data "few zeroes\00\00\00in middle") ;; 9 ;; CHECK: (func $few-zeroes-in-middle ;; CHECK-NEXT: (memory.init 9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 9) ;; CHECK-NEXT: ) (func $few-zeroes-in-middle (memory.init 9 (i32.const 0) (i32.const 0) (i32.const 22) ) (data.drop 9) ) (data "multiple\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00spans\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00of zeroes") ;; 10 ;; CHECK: (func $multiple-spans-of-zeroes ;; CHECK-NEXT: (block ;; CHECK-NEXT: (memory.init 10 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 11 ;; CHECK-NEXT: (i32.const 38) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 12 ;; CHECK-NEXT: (i32.const 73) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (data.drop 10) ;; CHECK-NEXT: (data.drop 11) ;; CHECK-NEXT: (data.drop 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $multiple-spans-of-zeroes (memory.init 10 (i32.const 0) (i32.const 0) (i32.const 82) ) (data.drop 10) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 11 ;; CHECK: (func $even-more-zeroes ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 13 ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 14 ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 68) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 15 ;; CHECK-NEXT: (i32.const 98) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 13) ;; CHECK-NEXT: (data.drop 14) ;; CHECK-NEXT: (data.drop 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $even-more-zeroes (memory.init 11 (i32.const 0) (i32.const 0) (i32.const 134) ) (data.drop 11) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 12 ;; CHECK: (func $only-zeroes ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $only-zeroes (memory.init 12 (i32.const 0) (i32.const 0) (i32.const 30) ) (data.drop 12) ) (data "no zeroes") ;; 13 ;; CHECK: (func $no-zeroes ;; CHECK-NEXT: (memory.init 16 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 16) ;; CHECK-NEXT: ) (func $no-zeroes (memory.init 13 (i32.const 0) (i32.const 0) (i32.const 9) ) (data.drop 13) ) (data "") ;; 14 ;; CHECK: (func $empty ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $empty (memory.init 14 (i32.const 13) (i32.const 0) (i32.const 0) ) (data.drop 14) ) (data "only dropped") ;; 15 ;; CHECK: (func $only-dropped ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $only-dropped (data.drop 15) (data.drop 15) ) (data "\00\00\00\00\00") ;; 16 ;; CHECK: (func $only-dropped-zeroes ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $only-dropped-zeroes (data.drop 16) (data.drop 16) ) (data "") ;; not referenced (data "\00\00\00\00\00") ;; not referenced ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "param" (global $param i32)) ;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_0 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_2 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_3 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_4 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_5 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_6 (mut i32) (i32.const 0)) ;; CHECK: (memory $0 2048 2048) (memory $0 2048 2048) (import "env" "param" (global $param i32)) ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 0 ;; CHECK: (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (data "even") ;; CHECK: (data "more") ;; CHECK: (data "zeroes") ;; CHECK: (func $nonconst-dest ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (global.get $param) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 68) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 98) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 0) ;; CHECK-NEXT: (data.drop 1) ;; CHECK-NEXT: (data.drop 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nonconst-dest (memory.init 0 (global.get $param) (i32.const 0) (i32.const 134) ) (data.drop 0) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 1 ;; CHECK: (func $nonconst-offset ;; CHECK-NEXT: (memory.init 3 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $param) ;; CHECK-NEXT: (i32.const 134) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 3) ;; CHECK-NEXT: ) (func $nonconst-offset (memory.init 1 (i32.const 0) (global.get $param) (i32.const 134) ) (data.drop 1) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 2 ;; CHECK: (func $nonconst-size ;; CHECK-NEXT: (memory.init 4 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (global.get $param) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 4) ;; CHECK-NEXT: ) (func $nonconst-size (memory.init 2 (i32.const 0) (i32.const 0) (global.get $param) ) (data.drop 2) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 3 ;; CHECK: (func $partial-skip-start ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 5 ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 6 ;; CHECK-NEXT: (i32.const 54) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 58) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 7 ;; CHECK-NEXT: (i32.const 88) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 94) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 5) ;; CHECK-NEXT: (data.drop 6) ;; CHECK-NEXT: (data.drop 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $partial-skip-start (memory.init 3 (i32.const 0) (i32.const 10) (i32.const 124) ) (data.drop 3) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 4 ;; CHECK: (func $full-skip-start ;; CHECK-NEXT: (block ;; CHECK-NEXT: (memory.init 8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 9 ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 10 ;; CHECK-NEXT: (i32.const 66) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 72) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (data.drop 8) ;; CHECK-NEXT: (data.drop 9) ;; CHECK-NEXT: (data.drop 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $full-skip-start (memory.init 4 (i32.const 0) (i32.const 32) (i32.const 102) ) (data.drop 4) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 5 ;; CHECK: (func $partial-skip-end ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 11 ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 12 ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 68) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 13 ;; CHECK-NEXT: (i32.const 98) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 11) ;; CHECK-NEXT: (data.drop 12) ;; CHECK-NEXT: (data.drop 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $partial-skip-end (memory.init 5 (i32.const 0) (i32.const 0) (i32.const 124) ) (data.drop 5) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 6 ;; CHECK: (func $full-skip-end ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 14 ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 15 ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 68) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 16 ;; CHECK-NEXT: (i32.const 98) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 14) ;; CHECK-NEXT: (data.drop 15) ;; CHECK-NEXT: (data.drop 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $full-skip-end (memory.init 6 (i32.const 0) (i32.const 0) (i32.const 102) ) (data.drop 6) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 7 ;; CHECK: (func $slice-zeroes ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_3) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 17) ;; CHECK-NEXT: (data.drop 18) ;; CHECK-NEXT: (data.drop 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $slice-zeroes (memory.init 7 (i32.const 0) (i32.const 35) (i32.const 10) ) (data.drop 7) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 8 ;; CHECK: (func $slice-nonzeroes ;; CHECK-NEXT: (memory.init 20 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (data.drop 20) ;; CHECK-NEXT: (data.drop 21) ;; CHECK-NEXT: (data.drop 22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $slice-nonzeroes (memory.init 8 (i32.const 0) (i32.const 31) (i32.const 2) ) (data.drop 8) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 9 ;; CHECK: (func $zero-size ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_4 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 23) ;; CHECK-NEXT: (data.drop 24) ;; CHECK-NEXT: (data.drop 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-size (memory.init 9 (i32.const 13) (i32.const 40) (i32.const 0) ) (data.drop 9) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 10 ;; CHECK: (func $zero-size-undropped ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-size-undropped (memory.init 10 (i32.const 13) (i32.const 40) (i32.const 0) ) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 11 ;; CHECK: (func $out-of-bounds-offset ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 135) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $out-of-bounds-offset (memory.init 11 (i32.const 0) (i32.const 135) (i32.const 1) ) (data.drop 11) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 12 ;; CHECK: (func $zero-size-out-of-bounds-offset ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 135) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $zero-size-out-of-bounds-offset (memory.init 12 (i32.const 0) (i32.const 135) (i32.const 0) ) (data.drop 12) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 13 ;; CHECK: (func $out-of-bounds-size ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 135) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $out-of-bounds-size (memory.init 13 (i32.const 0) (i32.const 0) (i32.const 135) ) (data.drop 13) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 14 ;; CHECK: (func $zero-size-at-bounds-offset ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_6 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 29) ;; CHECK-NEXT: (data.drop 30) ;; CHECK-NEXT: (data.drop 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-size-at-bounds-offset (memory.init 14 (i32.const 0) (i32.const 134) (i32.const 0) ) (data.drop 14) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_0 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0)) ;; CHECK: (global $__mem_segment_drop_state_2 (mut i32) (i32.const 0)) ;; CHECK: (memory $0 2048 2048) (memory $0 2048 2048) (data "hi\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00hi") ;; 0 ;; CHECK: (data "hi") ;; CHECK: (data "even") ;; CHECK: (data "hi") ;; CHECK: (data "hi") ;; CHECK: (data "even") ;; CHECK: (data "hi") ;; CHECK: (data "even") ;; CHECK: (data "hi") ;; CHECK: (data "even") ;; CHECK: (data "hi") ;; CHECK: (func $zero-length-init-zeroes ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 0) ;; CHECK-NEXT: (data.drop 1) ;; CHECK-NEXT: (data.drop 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-length-init-zeroes (memory.init 0 (i32.const 13) (i32.const 10) (i32.const 0) ) (data.drop 0) ) (data "hi\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00hi") ;; 1 ;; CHECK: (func $zero-length-init-nonzeroes ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 3) ;; CHECK-NEXT: (data.drop 4) ;; CHECK-NEXT: (data.drop 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-length-init-nonzeroes (memory.init 1 (i32.const 13) (i32.const 33) (i32.const 0) ) (data.drop 1) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00hi") ;; 2 ;; CHECK: (func $zero-length-init-zeroes-2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 6) ;; CHECK-NEXT: (data.drop 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-length-init-zeroes-2 (memory.init 2 (i32.const 13) (i32.const 10) (i32.const 0) ) (data.drop 2) ) (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00hi") ;; 3 ;; CHECK: (func $zero-length-init-nonzeroes-2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (memory.size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (data.drop 8) ;; CHECK-NEXT: (data.drop 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-length-init-nonzeroes-2 (memory.init 3 (i32.const 13) (i32.const 31) (i32.const 0) ) (data.drop 3) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (memory $0 2048 2048) (memory $0 2048 2048) (data "a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a") ;; 64 ranges of zeroes ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (data "a") ;; CHECK: (func $init-lots ;; CHECK-NEXT: (block ;; CHECK-NEXT: (memory.init 0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 1 ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 2 ;; CHECK-NEXT: (i32.const 62) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 3 ;; CHECK-NEXT: (i32.const 93) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 94) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 4 ;; CHECK-NEXT: (i32.const 124) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 125) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 5 ;; CHECK-NEXT: (i32.const 155) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 156) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 6 ;; CHECK-NEXT: (i32.const 186) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 187) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 7 ;; CHECK-NEXT: (i32.const 217) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 218) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 8 ;; CHECK-NEXT: (i32.const 248) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 249) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 9 ;; CHECK-NEXT: (i32.const 279) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 280) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 10 ;; CHECK-NEXT: (i32.const 310) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 311) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 11 ;; CHECK-NEXT: (i32.const 341) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 342) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 12 ;; CHECK-NEXT: (i32.const 372) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 373) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 13 ;; CHECK-NEXT: (i32.const 403) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 404) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 14 ;; CHECK-NEXT: (i32.const 434) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 435) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 15 ;; CHECK-NEXT: (i32.const 465) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 466) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 16 ;; CHECK-NEXT: (i32.const 496) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 497) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 17 ;; CHECK-NEXT: (i32.const 527) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 528) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 18 ;; CHECK-NEXT: (i32.const 558) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 559) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 19 ;; CHECK-NEXT: (i32.const 589) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 590) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 20 ;; CHECK-NEXT: (i32.const 620) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 621) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 21 ;; CHECK-NEXT: (i32.const 651) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 652) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 22 ;; CHECK-NEXT: (i32.const 682) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 683) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 23 ;; CHECK-NEXT: (i32.const 713) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 714) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 24 ;; CHECK-NEXT: (i32.const 744) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 745) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 25 ;; CHECK-NEXT: (i32.const 775) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 776) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 26 ;; CHECK-NEXT: (i32.const 806) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 807) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 27 ;; CHECK-NEXT: (i32.const 837) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 838) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 28 ;; CHECK-NEXT: (i32.const 868) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 869) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 29 ;; CHECK-NEXT: (i32.const 899) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 900) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 30 ;; CHECK-NEXT: (i32.const 930) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 931) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 31 ;; CHECK-NEXT: (i32.const 961) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 962) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 32 ;; CHECK-NEXT: (i32.const 992) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 993) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 33 ;; CHECK-NEXT: (i32.const 1023) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 34 ;; CHECK-NEXT: (i32.const 1054) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1055) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 35 ;; CHECK-NEXT: (i32.const 1085) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1086) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 36 ;; CHECK-NEXT: (i32.const 1116) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1117) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 37 ;; CHECK-NEXT: (i32.const 1147) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1148) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 38 ;; CHECK-NEXT: (i32.const 1178) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1179) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 39 ;; CHECK-NEXT: (i32.const 1209) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1210) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 40 ;; CHECK-NEXT: (i32.const 1240) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1241) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 41 ;; CHECK-NEXT: (i32.const 1271) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1272) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 42 ;; CHECK-NEXT: (i32.const 1302) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1303) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 43 ;; CHECK-NEXT: (i32.const 1333) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 1334) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (data.drop 0) ;; CHECK-NEXT: (data.drop 1) ;; CHECK-NEXT: (data.drop 2) ;; CHECK-NEXT: (data.drop 3) ;; CHECK-NEXT: (data.drop 4) ;; CHECK-NEXT: (data.drop 5) ;; CHECK-NEXT: (data.drop 6) ;; CHECK-NEXT: (data.drop 7) ;; CHECK-NEXT: (data.drop 8) ;; CHECK-NEXT: (data.drop 9) ;; CHECK-NEXT: (data.drop 10) ;; CHECK-NEXT: (data.drop 11) ;; CHECK-NEXT: (data.drop 12) ;; CHECK-NEXT: (data.drop 13) ;; CHECK-NEXT: (data.drop 14) ;; CHECK-NEXT: (data.drop 15) ;; CHECK-NEXT: (data.drop 16) ;; CHECK-NEXT: (data.drop 17) ;; CHECK-NEXT: (data.drop 18) ;; CHECK-NEXT: (data.drop 19) ;; CHECK-NEXT: (data.drop 20) ;; CHECK-NEXT: (data.drop 21) ;; CHECK-NEXT: (data.drop 22) ;; CHECK-NEXT: (data.drop 23) ;; CHECK-NEXT: (data.drop 24) ;; CHECK-NEXT: (data.drop 25) ;; CHECK-NEXT: (data.drop 26) ;; CHECK-NEXT: (data.drop 27) ;; CHECK-NEXT: (data.drop 28) ;; CHECK-NEXT: (data.drop 29) ;; CHECK-NEXT: (data.drop 30) ;; CHECK-NEXT: (data.drop 31) ;; CHECK-NEXT: (data.drop 32) ;; CHECK-NEXT: (data.drop 33) ;; CHECK-NEXT: (data.drop 34) ;; CHECK-NEXT: (data.drop 35) ;; CHECK-NEXT: (data.drop 36) ;; CHECK-NEXT: (data.drop 37) ;; CHECK-NEXT: (data.drop 38) ;; CHECK-NEXT: (data.drop 39) ;; CHECK-NEXT: (data.drop 40) ;; CHECK-NEXT: (data.drop 41) ;; CHECK-NEXT: (data.drop 42) ;; CHECK-NEXT: (data.drop 43) ;; CHECK-NEXT: (data.drop 44) ;; CHECK-NEXT: (data.drop 45) ;; CHECK-NEXT: (data.drop 46) ;; CHECK-NEXT: (data.drop 47) ;; CHECK-NEXT: (data.drop 48) ;; CHECK-NEXT: (data.drop 49) ;; CHECK-NEXT: (data.drop 50) ;; CHECK-NEXT: (data.drop 51) ;; CHECK-NEXT: (data.drop 52) ;; CHECK-NEXT: (data.drop 53) ;; CHECK-NEXT: (data.drop 54) ;; CHECK-NEXT: (data.drop 55) ;; CHECK-NEXT: (data.drop 56) ;; CHECK-NEXT: (data.drop 57) ;; CHECK-NEXT: (data.drop 58) ;; CHECK-NEXT: (data.drop 59) ;; CHECK-NEXT: (data.drop 60) ;; CHECK-NEXT: (data.drop 61) ;; CHECK-NEXT: (data.drop 62) ;; CHECK-NEXT: (data.drop 63) ;; CHECK-NEXT: (data.drop 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $init-lots (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 1345) ) (data.drop 0) ) ) (module ;; CHECK: (memory $0 1 1) (memory $0 1 1) (data (i32.const 1024) "x") (data (i32.const 1024) "\00") ;; this tramples the "x", and so must be kept. ) ;; CHECK: (data (i32.const 1024) "x") ;; CHECK: (data (i32.const 1024) "\00") (module ;; CHECK: (memory $0 1 1) (memory $0 1 1) (data (i32.const 1024) "x") (data (i32.const 1025) "\00") ) ;; CHECK: (data (i32.const 1024) "x") (module ;; CHECK: (memory $0 1 1) (memory $0 1 1) (data (i32.const 1024) "x") (data (i32.const 1023) "\00") ) ;; CHECK: (data (i32.const 1024) "x") (module ;; CHECK: (memory $0 1 1) (memory $0 1 1) (data (i32.const 1024) "x") (data (i32.const 1024) "\00") ;; when we see one bad thing, we give up (data (i32.const 4096) "\00") ) ;; CHECK: (data (i32.const 1024) "x") ;; CHECK: (data (i32.const 1024) "\00") ;; CHECK: (data (i32.const 4096) "\00") (module ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32)) ;; CHECK: (memory $0 1 1) (memory $0 1 1) (import "env" "memoryBase" (global $memoryBase i32)) (data (i32.const 1024) "x") (data (global.get $memoryBase) "\00") ;; this could trample, or not ) ;; CHECK: (data (i32.const 1024) "x") ;; CHECK: (data (global.get $memoryBase) "\00") (module ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32)) ;; CHECK: (memory $0 1 1) (memory $0 1 1) (import "env" "memoryBase" (global $memoryBase i32)) (data (i32.const 1024) "\00") ;; this could trample, or not (data (global.get $memoryBase) "x") ) ;; CHECK: (data (i32.const 1024) "\00") ;; CHECK: (data (global.get $memoryBase) "x") (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 1) (memory $0 1 1) (data "skipped\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00included") ;; CHECK: (data "skipped") ;; CHECK: (data "included") ;; CHECK: (export "func_54" (func $0)) (export "func_54" (func $0)) ;; CHECK: (func $0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.init 1 ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (memory.init 0 (i32.const 0) (i32.const 7) (i32.const 38) ) ) ) (module ;; we can't optimize on an imported memory without zeroFilledMemory being set. ;; CHECK: (import "env" "memory" (memory $0 1 1)) (import "env" "memory" (memory $0 1 1)) (data (i32.const 1024) "x") (data (i32.const 2048) "\00") ) ;; CHECK: (data (i32.const 1024) "x") ;; CHECK: (data (i32.const 2048) "\00") (module ;; we can when not imported ;; CHECK: (memory $0 1 1) (memory $0 1 1) (data (i32.const 1024) "x") (data (i32.const 2048) "\00") ) ;; CHECK: (data (i32.const 1024) "x") (module ;; Regression test for a bug where referrers were accidentally associated with ;; the wrong segments in the presence of unreferenced segments. ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (memory $0 (shared 1 1)) (memory $0 (shared 1 1)) (data (i32.const 0) "") ;; CHECK: (data "foo") (data "foo") ;; CHECK: (func $0 ;; CHECK-NEXT: (memory.init 0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (memory.init 1 (i32.const 0) (i32.const 1) (i32.const 1) ) ) ) binaryen-version_108/test/lit/passes/memory-packing_zero-filled-memory.wast000066400000000000000000000007341423707623100274420ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: wasm-opt %s --memory-packing -all --zero-filled-memory -S -o - | filecheck %s (module ;; we can optimize on an imported memory with zeroFilledMemory being set. ;; CHECK: (import "env" "memory" (memory $0 1 1)) (import "env" "memory" (memory $0 1 1)) (data (i32.const 1024) "x") (data (i32.const 1023) "\00") ) ;; CHECK: (data (i32.const 1024) "x") binaryen-version_108/test/lit/passes/merge-blocks.wast000066400000000000000000000254551423707623100232770ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-names --merge-blocks -all -S -o - \ ;; RUN: | filecheck %s ;; ;; --remove-unused-names lets --merge-blocks assume blocks without names have no ;; branch targets. (module (type $anyref_=>_none (func (param anyref))) ;; CHECK: (type $struct (struct (field (mut i32)))) (type $struct (struct (field (mut i32)))) ;; CHECK: (type $array (array (mut i32))) (type $array (array (mut i32))) ;; CHECK: (func $br_on_to_drop ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $label$1 (result (ref null i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_on_i31 $label$1 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on_to_drop (nop) ;; ensure a block at the function level (drop (block $label$1 (result (ref null i31)) ;; this block type must stay, we ;; cannot remove it due to the br_on (drop (br_on_i31 $label$1 (ref.null any) ) ) (ref.null i31) ;; this must not end up dropped ) ) ) ;; CHECK: (func $struct.set ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $struct.set (block (nop) (struct.set $struct 0 (block (result (ref null $struct)) (drop (i32.const 1234)) (ref.null $struct) ) (i32.const 5) ) (nop) ) ) ;; CHECK: (func $struct.get ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $struct.get (block (nop) (drop (struct.get $struct 0 (block (result (ref null $struct)) (drop (i32.const 1234)) (ref.null $struct) ) ) ) (nop) ) ) ;; CHECK: (func $array.set (param $foo (ref $array)) ;; CHECK-NEXT: (local $bar (ref null $array)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (array.set $array ;; CHECK-NEXT: (local.tee $bar ;; CHECK-NEXT: (local.get $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $array.set (param $foo (ref $array)) (local $bar (ref null $array)) (array.set $array (block $block (result (ref null $array)) (nop) (nop) (nop) ;; Side effects in the first item on the array.set do not prevent moving ;; the nops outside. (local.tee $bar (local.get $foo) ) ) (i32.const 0) (i32.const 37) ) ) ;; CHECK: (func $array.set-no-1 (param $foo (ref $array)) ;; CHECK-NEXT: (local $bar i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (array.set $array ;; CHECK-NEXT: (local.get $foo) ;; CHECK-NEXT: (local.tee $bar ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $array.set-no-1 (param $foo (ref $array)) (local $bar i32) (array.set $array (local.get $foo) (block $block (result i32) (nop) (nop) (nop) ;; Side effects in the second item do prevent optimizations, currently. (local.tee $bar (i32.const 0) ) ) (i32.const 37) ) ) ;; CHECK: (func $array.set-no-2 (param $foo (ref $array)) ;; CHECK-NEXT: (local $bar i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (array.set $array ;; CHECK-NEXT: (local.get $foo) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.tee $bar ;; CHECK-NEXT: (i32.const 37) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $array.set-no-2 (param $foo (ref $array)) (local $bar i32) (array.set $array (local.get $foo) (i32.const 0) (block $block (result i32) (nop) (nop) (nop) ;; Side effects in the third item do prevent optimizations, currently. (local.tee $bar (i32.const 37) ) ) ) ) ;; CHECK: (func $if-condition (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-condition (result i32) ;; Content can be moved out of an if condition, but not anywhere else. (if (result i32) (block (result i32) (drop (i32.const 0)) (i32.const 1) ) (block (result i32) (drop (i32.const 2)) (i32.const 3) ) (block (result i32) (drop (i32.const 4)) (i32.const 5) ) ) ) ;; CHECK: (func $subsequent-children (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $subsequent-children ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subsequent-children (param $x i32) (param $y i32) (param $z i32) (result i32) ;; Both of the calls to helper can be moved outside. Those calls remain in ;; order after doing so, so there is no problem, and none of them are moved ;; across anything with side effects. This leaves only consts in the call to ;; $subsequent-children. (call $subsequent-children (block (result i32) (drop (call $helper (i32.const 0))) (i32.const 1) ) (i32.const 2) (block (result i32) (drop (call $helper (i32.const 3))) (i32.const 4) ) ) ) ;; CHECK: (func $subsequent-children-1 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $subsequent-children-1 ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subsequent-children-1 (param $x i32) (param $y i32) (param $z i32) (result i32) (call $subsequent-children-1 (block (result i32) (drop (call $helper (i32.const 0))) (call $helper (i32.const 1)) ;; Compared to before, this is now a call, so ;; it has side effects, and the call with arg ;; 3 cannot be moved past it. ) (i32.const 2) (block (result i32) (drop (call $helper (i32.const 3))) (i32.const 4) ) ) ) ;; CHECK: (func $subsequent-children-2 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $subsequent-children-2 ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subsequent-children-2 (param $x i32) (param $y i32) (param $z i32) (result i32) (call $subsequent-children-2 (block (result i32) (drop (call $helper (i32.const 0))) (call $helper (i32.const 1)) ) ;; Similar to the above, but with the main call's last two arguments flipped. ;; This should not have an effect on the output: we still can't pull out the ;; call with arg 3. (block (result i32) (drop (call $helper (i32.const 3))) (i32.const 4) ) (i32.const 2) ) ) ;; CHECK: (func $subsequent-children-3 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $subsequent-children-3 ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subsequent-children-3 (param $x i32) (param $y i32) (param $z i32) (result i32) (call $subsequent-children-3 (block (result i32) (drop (i32.const 0)) ;; Similar to the above, but this is just a const now ;; and not a call. We still can't pull out the call ;; with arg 3, due to the call with arg 1. (call $helper (i32.const 1)) ) (block (result i32) (drop (call $helper (i32.const 3))) (i32.const 4) ) (i32.const 2) ) ) ;; CHECK: (func $subsequent-children-4 (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $subsequent-children-4 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subsequent-children-4 (param $x i32) (param $y i32) (param $z i32) (result i32) (call $subsequent-children-4 (block (result i32) (drop (i32.const 0)) ;; Similar to the above, but remove the call on arg 1 as well. Now we *can* ;; pull out the call with arg 3. (i32.const 1) ) (block (result i32) (drop (call $helper (i32.const 3))) (i32.const 4) ) (i32.const 2) ) ) ;; CHECK: (func $helper (param $x i32) (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $helper (param $x i32) (result i32) (unreachable) ) ) binaryen-version_108/test/lit/passes/merge-similar-functions.wast000066400000000000000000000347641423707623100254730ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --enable-reference-types --enable-typed-function-references --merge-similar-functions -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (func $big-const-42 (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$big-const-42 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $big-const-42 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (i32.const 42) ) ;; same as $big-const-42, but the set of $big-const-* derives {42, 42, 43} params ;; CHECK: (func $big-const-42-1 (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$big-const-42 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $big-const-42-1 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (i32.const 42) ) ;; CHECK: (func $big-const-43 (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$big-const-42 ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $big-const-43 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (i32.const 43) ) ;; CHECK: (func $small-const-44 (result i32) ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: ) (func $small-const-44 (result i32) (i32.const 44) ) ;; CHECK: (func $small-const-45 (result i32) ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) (func $small-const-45 (result i32) (i32.const 45) ) ) ;; offset locals for extra params ;; CHECK: (func $byn$mgfn-shared$big-const-42 (param $0 i32) (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (module ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) ;; CHECK: (func $take-param-and-local-0 (param $0 i32) (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$take-param-and-local-0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $take-param-and-local-0 (param $0 i32) (result i32) (local $1 i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (i32.add (i32.add (i32.const 42) (local.get $0)) (local.get $1)) ) ;; CHECK: (func $take-param-and-local-1 (param $0 i32) (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$take-param-and-local-0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $take-param-and-local-1 (param $0 i32) (result i32) (local $1 i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (i32.add (i32.add (i32.const 43) (local.get $0)) (local.get $1)) ) ) ;; different callees ;; CHECK: (func $byn$mgfn-shared$take-param-and-local-0 (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (type $ref|none_->_i32|_=>_i32 (func (param (ref $none_=>_i32)) (result i32))) ;; CHECK: (type $ref|i32_->_i32|_i32_=>_i32 (func (param (ref $i32_=>_i32) i32) (result i32))) ;; CHECK: (elem declare func $callee-0 $callee-1 $callee-2 $callee-take-arg-0 $callee-take-arg-1) ;; CHECK: (func $callee-0 (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $callee-0 (result i32) (i32.const 0)) ;; CHECK: (func $callee-1 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $callee-1 (result i32) (i32.const 1)) ;; CHECK: (func $callee-2 (result i32) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) (func $callee-2 (result i32) (i32.const 2)) ;; CHECK: (func $callee-take-arg-0 (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $callee-take-arg-0 (param i32) (result i32) (i32.const 0)) ;; CHECK: (func $callee-take-arg-1 (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $callee-take-arg-1 (param i32) (result i32) (i32.const 1)) ;; CHECK: (func $callee-take-arg-2 (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) (func $callee-take-arg-2 (param i32) (result i32) (i32.const 2)) ;; CHECK: (func $yes-call-callee-0 (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$yes-call-callee-0 ;; CHECK-NEXT: (ref.func $callee-0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $yes-call-callee-0 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $callee-0) ) ;; CHECK: (func $yes-call-callee-1 (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$yes-call-callee-0 ;; CHECK-NEXT: (ref.func $callee-1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $yes-call-callee-1 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $callee-1) ) ;; CHECK: (func $yes-call-callee-2 (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$yes-call-callee-0 ;; CHECK-NEXT: (ref.func $callee-2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $yes-call-callee-2 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $callee-2) ) ;; CHECK: (func $yes-call-callee-take-arg-0 (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$yes-call-callee-take-arg-0 ;; CHECK-NEXT: (ref.func $callee-take-arg-0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $yes-call-callee-take-arg-0 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $callee-take-arg-0 (i32.const 0)) ) ;; CHECK: (func $yes-call-callee-take-arg-1 (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$yes-call-callee-take-arg-0 ;; CHECK-NEXT: (ref.func $callee-take-arg-1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $yes-call-callee-take-arg-1 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $callee-take-arg-1 (i32.const 1)) ) ;; NOTE: calls with different argument expressions are not mergeable ;; CHECK: (func $no-call-callee-take-arg-0 (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $callee-take-arg-0 ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $no-call-callee-take-arg-0 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $callee-take-arg-0 (block (result i32) (drop (i32.const 0)) (i32.const 0) ) ) ) ;; CHECK: (func $no-call-callee-take-arg-1 (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $callee-take-arg-1 ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $no-call-callee-take-arg-1 (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $callee-take-arg-1 (block (result i32) (drop (i32.const 0)) (drop (i32.const 0)) (i32.const 0) ) ) ) ) ;; CHECK: (func $byn$mgfn-shared$yes-call-callee-0 (param $0 (ref $none_=>_i32)) (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK: (func $byn$mgfn-shared$yes-call-callee-take-arg-0 (param $0 (ref $i32_=>_i32)) (param $1 i32) (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (func $use-42-twice (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$use-42-twice ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $use-42-twice (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (i32.add (i32.const 42) (i32.const 42) ) ) ;; CHECK: (func $use-43-twice (result i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$use-42-twice ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $use-43-twice (result i32) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (i32.add (i32.const 43) (i32.const 43) ) ) ) ;; CHECK: (func $byn$mgfn-shared$use-42-twice (param $0 i32) (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) ;; CHECK: (func $yes-offset-local-indices-1 (param $a i32) (param $b i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$yes-offset-local-indices-1 ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $yes-offset-local-indices-1 (param $a i32) (param $b i32) (local $x i32) (local $y i32) (drop (local.get $a)) (drop (local.get $b)) (drop (local.get $x)) (drop (local.get $y)) (drop (local.tee $x (local.get $x))) (drop (local.tee $y (local.get $y))) (drop (local.tee $a (local.get $a))) (drop (local.tee $b (local.get $b))) (drop (i32.const 1)) ) ;; CHECK: (func $yes-offset-local-indices-2 (param $a i32) (param $b i32) ;; CHECK-NEXT: (call $byn$mgfn-shared$yes-offset-local-indices-1 ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $yes-offset-local-indices-2 (param $a i32) (param $b i32) (local $x i32) (local $y i32) (drop (local.get $a)) (drop (local.get $b)) (drop (local.get $x)) (drop (local.get $y)) (drop (local.tee $x (local.get $x))) (drop (local.tee $y (local.get $y))) (drop (local.tee $a (local.get $a))) (drop (local.tee $b (local.get $b))) (drop (i32.const 2)) ) ) ;; CHECK: (func $byn$mgfn-shared$yes-offset-local-indices-1 (param $0 i32) (param $1 i32) (param $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/merge-similar-functions_all-features.wast000066400000000000000000000050771423707623100301320ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: foreach %s %t wasm-opt --all-features --merge-similar-functions -S -o - | filecheck %s (module ;; CHECK: (type $[i8] (array i8)) (type $[i8] (array i8)) ;; CHECK: (func $take-ref-null-data (param $0 (ref null data)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $take-ref-null-data (param (ref null data)) (unreachable) ) ;; CHECK: (func $take-ref-eq (param $0 (ref eq)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $take-ref-eq (param (ref eq)) (unreachable) ) ;; NOTE: When type A is a subtype of type B and type C, ;; and func X takes a type B arg, and func Y takes a type C arg. ;; Then both func X and Y are callable with a type A arg. ;; But in general, type B and C don't have a common subtype, so ;; we can't merge call instructions of func X and Y. ;; CHECK: (func $no-call-subtyping-same-operand-0 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $take-ref-null-data ;; CHECK-NEXT: (array.init_static $[i8]) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $no-call-subtyping-same-operand-0 (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $take-ref-null-data (array.init_static $[i8]) ) ) ;; CHECK: (func $no-call-subtyping-same-operand-1 ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $take-ref-eq ;; CHECK-NEXT: (array.init_static $[i8]) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $no-call-subtyping-same-operand-1 (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $take-ref-eq (array.init_static $[i8]) ) ) ) binaryen-version_108/test/lit/passes/merge-similar-functions_types.wast000066400000000000000000000162031423707623100267030ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --merge-similar-functions -all -S -o - \ ;; RUN: | filecheck %s ;; RUN: foreach %s %t wasm-opt --merge-similar-functions -all --nominal -S -o - \ ;; RUN: | filecheck %s --check-prefix=NOMNL ;; Calls to functions $2 and $3 are the only differences between the contents ;; of $0 and $1, so we want to merge them and pass ref.funcs of $2 and $3. ;; However, their nominal types differ, so in nominal typing we cannot do so. (module ;; CHECK: (type $type$0 (func)) ;; NOMNL: (type $type$0 (func_subtype func)) (type $type$0 (func_subtype func)) ;; NOMNL: (type $type$1 (func_subtype func)) (type $type$1 (func_subtype func)) ;; NOMNL: (type $type$2 (func_subtype func)) (type $type$2 (func_subtype func)) (type $type$3 (func_subtype (param f32) (result f32) func)) (type $type$4 (func_subtype (param f64) (result f64) func)) ;; CHECK: (type $ref|$type$0|_=>_none (func (param (ref $type$0)))) ;; CHECK: (elem declare func $2 $3) ;; CHECK: (func $0 ;; CHECK-NEXT: (call $byn$mgfn-shared$0 ;; CHECK-NEXT: (ref.func $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $0 (type $type$0) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (call $2) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $0 (type $type$0) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $2) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (call $byn$mgfn-shared$0 ;; CHECK-NEXT: (ref.func $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $1 (type $type$0) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (call $3) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $1 (type $type$0) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $3) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) ) ;; CHECK: (func $2 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $2 (type $type$1) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 17) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $2 (type $type$1) (drop (i32.const 17) ) ) ;; CHECK: (func $3 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $3 (type $type$2) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 999) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $3 (type $type$2) (drop (i32.const 999) ) ) ) ;; CHECK: (func $byn$mgfn-shared$0 (param $0 (ref $type$0)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (module ;; As above, but now the nominal types do match, so we can optimize in all ;; modes. ;; CHECK: (type $type$0 (func)) ;; NOMNL: (type $type$1 (func_subtype func)) ;; NOMNL: (type $type$0 (func_subtype func)) (type $type$0 (func_subtype func)) (type $type$1 (func_subtype func)) (type $type$3 (func_subtype (param f32) (result f32) func)) (type $type$4 (func_subtype (param f64) (result f64) func)) ;; CHECK: (type $ref|$type$0|_=>_none (func (param (ref $type$0)))) ;; CHECK: (global $global$0 (mut i32) (i32.const 10)) ;; NOMNL: (type $ref|$type$1|_=>_none (func_subtype (param (ref $type$1)) func)) ;; NOMNL: (global $global$0 (mut i32) (i32.const 10)) (global $global$0 (mut i32) (i32.const 10)) ;; CHECK: (memory $0 (shared 16 17)) ;; NOMNL: (memory $0 (shared 16 17)) (memory $0 (shared 16 17)) ;; CHECK: (elem declare func $2 $3) ;; CHECK: (func $0 ;; CHECK-NEXT: (call $byn$mgfn-shared$0 ;; CHECK-NEXT: (ref.func $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (elem declare func $2 $3) ;; NOMNL: (func $0 (type $type$0) ;; NOMNL-NEXT: (call $byn$mgfn-shared$0 ;; NOMNL-NEXT: (ref.func $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $0 (type $type$0) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $2) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) ) ;; CHECK: (func $1 ;; CHECK-NEXT: (call $byn$mgfn-shared$0 ;; CHECK-NEXT: (ref.func $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $1 (type $type$0) ;; NOMNL-NEXT: (call $byn$mgfn-shared$0 ;; NOMNL-NEXT: (ref.func $3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $1 (type $type$0) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (call $3) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) ) ;; CHECK: (func $2 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $2 (type $type$1) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 17) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $2 (type $type$1) (drop (i32.const 17) ) ) ;; CHECK: (func $3 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 999) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $3 (type $type$1) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 999) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $3 (type $type$1) (drop (i32.const 999) ) ) ) ;; CHECK: (func $byn$mgfn-shared$0 (param $0 (ref $type$0)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $byn$mgfn-shared$0 (type $ref|$type$1|_=>_none) (param $0 (ref $type$1)) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (call_ref ;; NOMNL-NEXT: (local.get $0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) binaryen-version_108/test/lit/passes/name-types.wast000066400000000000000000000024631423707623100230010ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: wasm-opt %s -all --name-types -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --name-types --nominal -S -o - | filecheck %s --check-prefix=NOMNL (module ;; An obnoxious name that will be renamed. (type $obnoxious-super-long-type-name_____________________________1 (struct)) ;; A reasonable name that will be kept. ;; CHECK: (type $type$0 (func (param (ref $type$1) (ref $reasonable-name)))) ;; CHECK: (type $type$1 (struct )) ;; CHECK: (type $reasonable-name (struct (field i32))) ;; NOMNL: (type $type$0 (func_subtype (param (ref $type$1) (ref $reasonable-name)) func)) ;; NOMNL: (type $type$1 (struct_subtype data)) ;; NOMNL: (type $reasonable-name (struct_subtype (field i32) data)) (type $reasonable-name (struct (field i32))) ;; CHECK: (func $foo (param $x (ref $type$1)) (param $y (ref $reasonable-name)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $foo (type $type$0) (param $x (ref $type$1)) (param $y (ref $reasonable-name)) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $foo ;; Use the types to keep them alive. (param $x (ref $obnoxious-super-long-type-name_____________________________1)) (param $y (ref $reasonable-name)) ) ) binaryen-version_108/test/lit/passes/once-reduction.wast000066400000000000000000000772011423707623100236370ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --once-reduction -all -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once ;; A minimal "once" function. (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller ;; Call a once function more than once, in a way that we can optimize: the ;; first dominates the second. The second call will become a nop. (call $once) (call $once) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ;; Add some more content in the function. (drop (i32.const 100)) ) ;; CHECK: (func $caller-if-1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller-if-1 ;; Add more calls, and ones that are conditional. (if (i32.const 1) (block (call $once) (call $once) (call $once) (call $once) ) ) (call $once) (call $once) ) ;; CHECK: (func $caller-if-2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller-if-2 ;; Call in both arms. As we only handle dominance, and not merges, the first ;; call after the if is *not* optimized. (if (i32.const 1) (call $once) (block (call $once) (call $once) ) ) (call $once) (call $once) ) ;; CHECK: (func $caller-loop-1 ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller-loop-1 ;; Add calls in a loop. (loop $loop (if (i32.const 1) (call $once) ) (call $once) (call $once) (br_if $loop (i32.const 1)) ) (call $once) (call $once) ) ;; CHECK: (func $caller-loop-2 ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller-loop-2 ;; Add a single conditional call in a loop. (loop $loop (if (i32.const 1) (call $once) ) (br_if $loop (i32.const 1)) ) (call $once) (call $once) ) ;; CHECK: (func $caller-single ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller-single ;; A short function with a single call. (call $once) ) ;; CHECK: (func $caller-empty ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller-empty ;; A tiny function with nothing at all, just to verify we do not crash on ;; such things. ) ) ;; Corner case: Initial value is not zero. We can still optimize this here, ;; though in fact the function will never execute the payload call of foo(), ;; which in theory we could further optimize. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "foo" (func $foo)) (import "env" "foo" (func $foo)) ;; CHECK: (global $once (mut i32) (i32.const 42)) (global $once (mut i32) (i32.const 42)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) (call $foo) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: function is not quite once, there is code before the if, so no ;; optimization will happen. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "foo" (func $foo)) (import "env" "foo" (func $foo)) ;; CHECK: (global $once (mut i32) (i32.const 42)) (global $once (mut i32) (i32.const 42)) ;; CHECK: (func $once ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $once (nop) (if (global.get $once) (return) ) (global.set $once (i32.const 1)) (call $foo) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: a nop after the if. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "foo" (func $foo)) (import "env" "foo" (func $foo)) ;; CHECK: (global $once (mut i32) (i32.const 42)) (global $once (mut i32) (i32.const 42)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (nop) (global.set $once (i32.const 1)) (call $foo) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: The if has an else. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "foo" (func $foo)) (import "env" "foo" (func $foo)) ;; CHECK: (global $once (mut i32) (i32.const 42)) (global $once (mut i32) (i32.const 42)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) (call $foo) ) (global.set $once (i32.const 1)) (call $foo) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: different global names in the get and set (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once1 (mut i32) (i32.const 0)) (global $once1 (mut i32) (i32.const 0)) ;; CHECK: (global $once2 (mut i32) (i32.const 0)) (global $once2 (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once1) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once1) (return) ) (global.set $once2 (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: The global is written a zero. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 0)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: The global is written a zero elsewhere. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) (global.set $once (i32.const 0)) ) ) ;; Corner case: The global is written a non-zero value elsewhere. This is ok to ;; optimize, and in fact we can write a value different than 1 both there and ;; in the "once" function, and we can still optimize. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 42)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) (global.set $once (i32.const 1337)) ) ;; CHECK: (func $caller-2 ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller-2 ;; Reverse order of the above. (global.set $once (i32.const 1337)) (call $once) (call $once) ) ) ;; It is ok to call the "once" function inside itself - as that call appears ;; behind a set of the global, the call is redundant and we optimize it away. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) (call $once) ) ) ;; Corner case: Non-integer global, which we ignore. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut f64) (f64.const 0)) (global $once (mut f64) (f64.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.trunc_f64_s ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if ;; We must cast this to an integer for the wasm to validate. (i32.trunc_f64_s (global.get $once) ) (return) ) (global.set $once (f64.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: Non-constant initial value. This is fine, as the initial value ;; does not matter (if it is zero, then this is a "classic" "once" global; if ;; not then it will never be written to, and the "once" function will never run ;; at all, which is fine too) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "glob" (global $import i32)) (import "env" "glob" (global $import i32)) ;; CHECK: (global $once (mut i32) (global.get $import)) (global $once (mut i32) (global.get $import)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: Non-constant later value. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.eqz (i32.eqz (i32.const 1)))) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: "Once" function has a param. (module ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (param $x i32) (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $once (i32.const 1)) (call $once (i32.const 1)) ) ) ;; Corner case: "Once" function has a result. (module ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) (func $once (result i32) (if (global.get $once) (return (i32.const 2)) ) (global.set $once (i32.const 1)) (i32.const 3) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (drop (call $once)) (drop (call $once)) ) ) ;; Corner case: "Once" function body is not a block. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (loop $loop (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: Once body is too short. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: Additional reads of the global. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) (drop (global.get $once)) ) ) ;; Corner case: Additional reads of the global in the "once" func. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) (drop (global.get $once)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: Optimization opportunties in unreachable code (which we can ;; ignore, but should not error on). (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) (unreachable) (call $once) (call $once) ) ) ;; Add a very long chain of control flow. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $caller (if (i32.const 1) (call $once) ) (if (i32.const 1) (call $once) ) (if (i32.const 1) (call $once) ) (call $once) (if (i32.const 1) (call $once) ) (call $once) (if (i32.const 1) (nop) (nop) ) (call $once) (if (i32.const 1) (nop) (call $once) ) (call $once) (if (i32.const 1) (call $once) ) (call $once) (if (i32.const 1) (nop) (call $once) ) (call $once) (if (i32.const 1) (call $once) ) (call $once) (if (i32.const 1) (call $once) ) (call $once) (call $once) ) ) ;; A test with a try-catch. This verifies that we emit their contents properly ;; in reverse postorder and do not hit any assertions. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (global $once (mut i32) (i32.const 0)) ;; CHECK: (tag $tag (param i32)) (tag $tag (param i32)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $try-catch ;; CHECK-NEXT: (try $label$5 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tag ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-catch (try $label$5 (do (if (i32.const 1) (call $once) ) ) (catch $tag (drop (pop i32) ) ) ) ) ) (module ;; Test a module with more than one global that we can optimize, and more than ;; one that we cannot. ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once1 (mut i32) (i32.const 0)) (global $once1 (mut i32) (i32.const 0)) ;; CHECK: (global $many1 (mut i32) (i32.const 0)) (global $many1 (mut i32) (i32.const 0)) ;; CHECK: (global $once2 (mut i32) (i32.const 0)) (global $once2 (mut i32) (i32.const 0)) ;; CHECK: (global $many2 (mut i32) (i32.const 0)) (global $many2 (mut i32) (i32.const 0)) ;; CHECK: (func $once1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once1) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $many1) ;; CHECK-NEXT: (call $once2) ;; CHECK-NEXT: (call $many2) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $many1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $many2) ;; CHECK-NEXT: ) (func $once1 (if (global.get $once1) (return) ) (global.set $once1 (i32.const 1)) (call $once1) (call $many1) (call $once2) (call $many2) (call $once1) (call $many1) (call $once2) (call $many2) ) ;; CHECK: (func $many1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $many1) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $many1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $many2) ;; CHECK-NEXT: (call $once1) ;; CHECK-NEXT: (call $many1) ;; CHECK-NEXT: (call $once2) ;; CHECK-NEXT: (call $many2) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $many1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $many1 (if (global.get $many1) (return) ) (global.set $many1 (i32.const 0)) ;; prevent this global being "once" (call $many2) (call $once1) (call $many1) (call $once2) (call $many2) (call $once1) (call $many1) (call $once2) ) ;; CHECK: (func $once2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once2) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once2 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $many2) ;; CHECK-NEXT: (call $once1) ;; CHECK-NEXT: (call $many1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $many2) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $many1) ;; CHECK-NEXT: ) (func $once2 (if (global.get $once2) (return) ) (global.set $once2 (i32.const 2)) (call $once2) (call $many2) (call $once1) (call $many1) (call $once2) (call $many2) (call $once1) (call $many1) ) ;; CHECK: (func $many2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $many2) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $many1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $many1) ;; CHECK-NEXT: (call $once2) ;; CHECK-NEXT: (call $many2) ;; CHECK-NEXT: (call $once1) ;; CHECK-NEXT: (call $many1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $many2) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $many2 (if (global.get $many2) (return) ) (global.set $many1 (i32.const 0)) (call $many1) (call $once2) (call $many2) (call $once1) (call $many1) (call $once2) (call $many2) (call $once1) ) ) ;; Test for propagation of information about called functions: if A->B->C->D ;; and D calls some "once" functions, then A can infer that it's call to B does ;; so. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $A ;; CHECK-NEXT: (call $B) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $A ;; We can infer that calling B calls C and then D, and D calls this "once" ;; function, so we can remove the call after it (call $B) (call $once) ) ;; CHECK: (func $B ;; CHECK-NEXT: (call $C) ;; CHECK-NEXT: ) (func $B (call $C) ) ;; CHECK: (func $C ;; CHECK-NEXT: (call $D) ;; CHECK-NEXT: ) (func $C (call $D) ) ;; CHECK: (func $D ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $D (call $once) (call $once) ) ;; CHECK: (func $bad-A ;; CHECK-NEXT: (call $bad-B) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $bad-A ;; Call a function that does *not* do anything useful. We should not remove ;; the second call here. (call $bad-B) (call $once) ) ;; CHECK: (func $bad-B ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $bad-B ) ) ;; Corner case: Imported mutable global. We cannot optimize it, since the ;; outside may read and write it. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "glob" (global $once (mut i32))) (import "env" "glob" (global $once (mut i32))) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) ;; Corner case: Exported mutable global. We cannot optimize it, since the ;; outside may read and write it. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (export "once-global" (global $once)) (export "once-global" (global $once)) ;; CHECK: (func $once ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) (return) ) (global.set $once (i32.const 1)) ) ;; CHECK: (func $caller ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: ) (func $caller (call $once) (call $once) ) ) binaryen-version_108/test/lit/passes/opt_flatten.wast000066400000000000000000000024301423707623100232300ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; Optimize the code, flatten, and run a pass that will verify it is properly ;; flat. ;; RUN: wasm-opt %s -all -O1 --flatten --rereloop -S -o - | filecheck %s (module ;; CHECK: (export "foo" (func $foo)) (export "foo" (func $foo)) ;; CHECK: (func $foo (result funcref) ;; CHECK-NEXT: (local $0 funcref) ;; CHECK-NEXT: (local $1 (ref null $none_=>_funcref)) ;; CHECK-NEXT: (local $2 (ref null $none_=>_funcref)) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (result funcref) ;; the resulting ref.as_non_nulls here must be validated as ok in flat mode. (drop (call $foo) ) (ref.func $foo) ) ) binaryen-version_108/test/lit/passes/optimize-for-js.wast000066400000000000000000000043121423707623100237500ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-for-js -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (func $is-power-of-2_32 (param $x i32) (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $is-power-of-2_32 (param $x i32) (result i32) (i32.eq (i32.popcnt (local.get $x)) (i32.const 1) ) ) ;; CHECK: (func $is-power-of-2_expr_32 (param $x i64) (result i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $is-power-of-2_expr_32 (param $x i64) (result i32) (i32.eq (i32.popcnt (i32.wrap_i64 (local.get $x))) (i32.const 1) ) ) ;; CHECK: (func $is-power-of-2_64 (param $x i64) (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $is-power-of-2_64 (param $x i64) (result i32) (i64.eq (i64.popcnt (local.get $x)) (i64.const 1) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-atomics.wast000066400000000000000000000056311423707623100267560ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-instructions --enable-threads -S -o - | filecheck %s (module ;; CHECK: (import "env" "memory" (memory $0 (shared 256 256))) (import "env" "memory" (memory $0 (shared 256 256))) ;; CHECK: (func $x ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.atomic.load8_u ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $x (drop (i32.shr_s (i32.shl (i32.atomic.load8_u ;; can't be signed (i32.const 100) ) (i32.const 24) ) (i32.const 24) ) ) ) ;; CHECK: (func $dont_simplify_reinterpret_atomic_load_store (param $x i32) (param $y f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (i64.atomic.load ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.atomic.store ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $dont_simplify_reinterpret_atomic_load_store (param $x i32) (param $y f32) (drop (f64.reinterpret_i64 (i64.atomic.load (local.get $x)))) ;; skip (i32.atomic.store (i32.const 8) (i32.reinterpret_f32 (local.get $y))) ;; skip ) ;; CHECK: (func $combine_atomic_load_and_extends (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.atomic.load8_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.atomic.load16_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.atomic.load32_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.atomic.load8_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.atomic.load16_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_s ;; CHECK-NEXT: (i32.atomic.load ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $combine_atomic_load_and_extends (param $x i32) (drop (i64.extend_i32_u (i32.atomic.load8_u (local.get $x)))) (drop (i64.extend_i32_u (i32.atomic.load16_u (local.get $x)))) (drop (i64.extend_i32_u (i32.atomic.load (local.get $x)))) (drop (i64.extend_i32_s (i32.atomic.load8_u (local.get $x)))) (drop (i64.extend_i32_s (i32.atomic.load16_u (local.get $x)))) ;; skips (drop (i64.extend_i32_s (i32.atomic.load (local.get $x)))) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-bulk-memory.wast000066400000000000000000000370161423707623100275640ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-instructions --enable-bulk-memory --enable-simd -S -o - | filecheck %s ;; RUN: wasm-opt %s --optimize-instructions --enable-bulk-memory -S -o - | filecheck %s --check-prefix NOSIMD (module (memory 0) ;; CHECK: (func $optimize-bulk-memory-copy (param $dst i32) (param $src i32) (param $sz i32) ;; CHECK-NEXT: (memory.copy ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $sz) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.load16_u align=1 ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.load align=1 ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i64.load align=1 ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (v128.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (v128.load align=1 ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: (local.get $sz) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOSIMD: (func $optimize-bulk-memory-copy (param $dst i32) (param $src i32) (param $sz i32) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $sz) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store8 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.load8_u ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store16 align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.load16_u align=1 ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: (i32.const 3) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.load align=1 ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: (i32.const 5) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: (i32.const 6) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: (i32.const 7) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.store align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i64.load align=1 ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: (i32.const 16) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $src) ;; NOSIMD-NEXT: (local.get $sz) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.copy ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: (i32.load ;; NOSIMD-NEXT: (i32.const 3) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) (func $optimize-bulk-memory-copy (param $dst i32) (param $src i32) (param $sz i32) (memory.copy ;; skip (local.get $dst) (local.get $dst) (local.get $sz) ) (memory.copy ;; skip (local.get $dst) (local.get $src) (i32.const 0) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 1) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 2) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 3) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 4) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 5) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 6) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 7) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 8) ) (memory.copy (local.get $dst) (local.get $src) (i32.const 16) ) (memory.copy ;; skip (local.get $dst) (local.get $src) (local.get $sz) ) (memory.copy ;; skip (i32.const 0) (i32.const 0) (i32.load (i32.const 3) ;; side effect ) ) ) ;; CHECK: (func $optimize-bulk-memory-fill (param $dst i32) (param $val i32) (param $sz i32) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $val) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 257) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (v128.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 16843009) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i64.const 72340172838076673) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (v128.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (v128.store align=1 ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $val) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $sz) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (local.get $val) ;; CHECK-NEXT: (local.get $sz) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOSIMD: (func $optimize-bulk-memory-fill (param $dst i32) (param $val i32) (param $sz i32) ;; NOSIMD-NEXT: (local $3 i32) ;; NOSIMD-NEXT: (local $4 i32) ;; NOSIMD-NEXT: (local $5 i32) ;; NOSIMD-NEXT: (memory.fill ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store8 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store8 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $val) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store8 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 1) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store8 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 255) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store16 align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store16 align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 257) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store16 align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 65535) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.store align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i64.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (block ;; NOSIMD-NEXT: (i64.store align=1 ;; NOSIMD-NEXT: (local.tee $3 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.store offset=8 align=1 ;; NOSIMD-NEXT: (local.get $3) ;; NOSIMD-NEXT: (i64.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i32.store align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 16843009) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.store align=1 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i64.const 72340172838076673) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (block ;; NOSIMD-NEXT: (i64.store align=1 ;; NOSIMD-NEXT: (local.tee $4 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.const 72340172838076673) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.store offset=8 align=1 ;; NOSIMD-NEXT: (local.get $4) ;; NOSIMD-NEXT: (i64.const 72340172838076673) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (block ;; NOSIMD-NEXT: (i64.store align=1 ;; NOSIMD-NEXT: (local.tee $5 ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.const -1) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (i64.store offset=8 align=1 ;; NOSIMD-NEXT: (local.get $5) ;; NOSIMD-NEXT: (i64.const -1) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.fill ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $val) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.fill ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: (local.get $sz) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.fill ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (local.get $val) ;; NOSIMD-NEXT: (local.get $sz) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.fill ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: (i32.const 3) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.fill ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 1) ;; NOSIMD-NEXT: (i32.const 3) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.fill ;; NOSIMD-NEXT: (local.get $dst) ;; NOSIMD-NEXT: (i32.const 0) ;; NOSIMD-NEXT: (i32.const 17) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: (memory.fill ;; NOSIMD-NEXT: (unreachable) ;; NOSIMD-NEXT: (i32.const 1) ;; NOSIMD-NEXT: (i32.const 16) ;; NOSIMD-NEXT: ) ;; NOSIMD-NEXT: ) (func $optimize-bulk-memory-fill (param $dst i32) (param $val i32) (param $sz i32) (memory.fill (local.get $dst) (i32.const 0) (i32.const 0) ) (memory.fill (local.get $dst) (i32.const 0) (i32.const 1) ) (memory.fill (local.get $dst) (local.get $val) (i32.const 1) ) (memory.fill (local.get $dst) (i32.const 1) (i32.const 1) ) (memory.fill (local.get $dst) (i32.const 1023) (i32.const 1) ) (memory.fill (local.get $dst) (i32.const 0) (i32.const 2) ) (memory.fill (local.get $dst) (i32.const 1) (i32.const 2) ) (memory.fill (local.get $dst) (i32.const 255) (i32.const 2) ) (memory.fill (local.get $dst) (i32.const 0) (i32.const 4) ) (memory.fill (local.get $dst) (i32.const 0) (i32.const 8) ) (memory.fill (local.get $dst) (i32.const 0) (i32.const 16) ) (memory.fill (local.get $dst) (i32.const 1) (i32.const 4) ) (memory.fill (local.get $dst) (i32.const 1) (i32.const 8) ) (memory.fill (local.get $dst) (i32.const 1) (i32.const 16) ) (memory.fill (local.get $dst) (i32.const 1023) (i32.const 16) ) (memory.fill ;; skip (local.get $dst) (local.get $val) (i32.const 0) ) (memory.fill ;; skip (local.get $dst) (i32.const 0) (local.get $sz) ) (memory.fill ;; skip (local.get $dst) (local.get $val) (local.get $sz) ) (memory.fill ;; skip (local.get $dst) (i32.const 0) (i32.const 3) ) (memory.fill ;; skip (local.get $dst) (i32.const 1) (i32.const 3) ) (memory.fill ;; skip (local.get $dst) (i32.const 0) (i32.const 17) ) (memory.fill ;; skip (unreachable) (i32.const 1) (i32.const 16) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-call_ref-roundtrip.wast000066400000000000000000000053741423707623100311160ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: wasm-opt %s --optimize-instructions --nominal --roundtrip --all-features -S -o - | filecheck %s ;; roundtrip to see the effects on heap types in the binary format, specifically ;; regarding nominal heap types (module ;; Create multiple different signature types, all identical structurally but ;; distinct nominally. The three tables will use different ones, and the ;; emitted call_indirects should use the corresponding ones. ;; CHECK: (type $v1 (func_subtype func)) (type $v1 (func)) ;; CHECK: (type $v2 (func_subtype func)) (type $v2 (func)) ;; CHECK: (type $v3 (func_subtype func)) (type $v3 (func)) ;; CHECK: (type $i32_=>_none (func_subtype (param i32) func)) ;; CHECK: (table $table-1 10 (ref null $v1)) (table $table-1 10 (ref null $v1)) ;; CHECK: (table $table-2 10 (ref null $v2)) (table $table-2 10 (ref null $v2)) ;; CHECK: (table $table-3 10 (ref null $v3)) (table $table-3 10 (ref null $v3)) ;; CHECK: (elem $elem-1 (table $table-1) (i32.const 0) (ref null $v1) (ref.func $helper-1)) (elem $elem-1 (table $table-1) (i32.const 0) (ref null $v1) (ref.func $helper-1)) ;; CHECK: (elem $elem-2 (table $table-2) (i32.const 0) (ref null $v2) (ref.func $helper-2)) (elem $elem-2 (table $table-2) (i32.const 0) (ref null $v2) (ref.func $helper-2)) ;; CHECK: (elem $elem-3 (table $table-3) (i32.const 0) (ref null $v3) (ref.func $helper-3)) (elem $elem-3 (table $table-3) (i32.const 0) (ref null $v3) (ref.func $helper-3)) ;; CHECK: (func $helper-1 (type $v1) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper-1 (type $v1)) ;; CHECK: (func $helper-2 (type $v2) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper-2 (type $v2)) ;; CHECK: (func $helper-3 (type $v3) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper-3 (type $v3)) ;; CHECK: (func $call-table-get (type $i32_=>_none) (param $x i32) ;; CHECK-NEXT: (call_indirect $table-1 (type $v1) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_indirect $table-2 (type $v2) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_indirect $table-3 (type $v3) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-table-get (param $x i32) ;; The heap type of the call_indirects that we emit here should be the ;; identical one as on the table that they correspond to. (call_ref (table.get $table-1 (local.get $x) ) ) (call_ref (table.get $table-2 (local.get $x) ) ) (call_ref (table.get $table-3 (local.get $x) ) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-call_ref.wast000066400000000000000000000161351423707623100270670ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: wasm-opt %s --remove-unused-names --optimize-instructions --all-features -S -o - | filecheck %s ;; remove-unused-names is to allow fallthrough computations to work on blocks (module ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK: (type $none_=>_i32 (func (result i32))) (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $none_=>_none (func)) (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $data_=>_none (func (param dataref))) (type $data_=>_none (func (param (ref data)))) ;; CHECK: (table $table-1 10 (ref null $i32_i32_=>_none)) (table $table-1 10 (ref null $i32_i32_=>_none)) ;; CHECK: (elem $elem-1 (table $table-1) (i32.const 0) (ref null $i32_i32_=>_none) (ref.func $foo)) (elem $elem-1 (table $table-1) (i32.const 0) (ref null $i32_i32_=>_none) (ref.func $foo)) ;; CHECK: (elem declare func $fallthrough-no-params $fallthrough-non-nullable $return-nothing) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param i32) (param i32) (unreachable) ) ;; CHECK: (func $call_ref-to-direct (param $x i32) (param $y i32) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call_ref-to-direct (param $x i32) (param $y i32) ;; This call_ref should become a direct call. (call_ref (local.get $x) (local.get $y) (ref.func $foo) ) ) ;; CHECK: (func $fallthrough (param $x i32) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $i32_i32_=>_none)) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fallthrough (param $x i32) ;; This call_ref should become a direct call, even though it doesn't have a ;; simple ref.func as the target - we need to look into the fallthrough, and ;; handle things with locals. (call_ref ;; Write to $x before the block, and write to it in the block; we should not ;; reorder these things as the side effects could alter what value appears ;; in the get of $x. (There is a risk of reordering here if we naively moved ;; the call target (the block) to before the first parameter (the tee). ;; Instead, we append it after the second param (the get) which keeps the ;; ordering as it was.) (local.tee $x (i32.const 1) ) (local.get $x) (block (result (ref $i32_i32_=>_none)) (local.set $x (i32.const 2) ) (ref.func $foo) ) ) ) ;; CHECK: (func $fallthrough-no-params (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $none_=>_i32)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (ref.func $fallthrough-no-params) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $fallthrough-no-params) ;; CHECK-NEXT: ) (func $fallthrough-no-params (result i32) ;; A fallthrough appears here, but there are no operands so this is easier to ;; optimize: we can just drop the call_ref's target before the call. (call_ref (block (result (ref $none_=>_i32)) (nop) (ref.func $fallthrough-no-params) ) ) ) ;; CHECK: (func $fallthrough-non-nullable (param $x dataref) ;; CHECK-NEXT: (local $1 (ref null data)) ;; CHECK-NEXT: (call $fallthrough-non-nullable ;; CHECK-NEXT: (block (result dataref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $data_=>_none)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (ref.func $fallthrough-non-nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fallthrough-non-nullable (param $x (ref data)) ;; A fallthrough appears here, and in addition the last operand is non- ;; nullable, which means we must be careful when we create a temp local for ;; it: the local should be nullable, and gets of it should use a ;; ref.as_non_null so that we validate. (call_ref (local.get $x) (block (result (ref $data_=>_none)) (nop) (ref.func $fallthrough-non-nullable) ) ) ) ;; CHECK: (func $fallthrough-bad-type (result i32) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (block (result (ref $none_=>_i32)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $return-nothing) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $none_=>_i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fallthrough-bad-type (result i32) ;; A fallthrough appears here, and we cast the function type to something else ;; in a way that is bad: the actual target function has a different return ;; type than the cast type. The cast will definitely fail, and we should not ;; emit non-validating code here, which would happen if we replace the ;; call_ref that returns nothing with a call that returns an i32. In fact, we ;; end up optimizing the cast into an unreachable. (call_ref (ref.cast (ref.func $return-nothing) (rtt.canon $none_=>_i32) ) ) ) ;; Helper function for the above test. ;; CHECK: (func $return-nothing ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $return-nothing) ;; CHECK: (func $fallthrough-unreachable ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (block (result (ref $i32_i32_=>_none)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fallthrough-unreachable ;; If the call is not reached, do not optimize it. (call_ref (unreachable) (unreachable) (block (result (ref $i32_i32_=>_none)) (nop) (ref.func $foo) ) ) ) ;; CHECK: (func $ignore-unreachable ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $ignore-unreachable ;; Ignore an unreachable call_ref target entirely. (call_ref (unreachable) ) ) ;; CHECK: (func $call-table-get (param $x i32) ;; CHECK-NEXT: (call_indirect $table-1 (type $i32_i32_=>_none) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-table-get (param $x i32) (call_ref (i32.const 1) (i32.const 2) (table.get $table-1 (local.get $x) ) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-eh.wast000066400000000000000000000155771423707623100257250ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-names --optimize-instructions -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (tag $e (param i32)) ;; CHECK: (func $dummy ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $dummy) (tag $e (param i32)) ;; The following are the unit tests for Properties::getFallthrough for EH ;; instructions, which are used in one of binary optimizations in ;; OptimizeInstructions::visitBinary(). ;; When a pattern of (i32.add (expr) (expr with all 1s)) is detected and ;; 'expr' is guaranteed to take equal or less bits than the number of bits in ;; the second expression, the i32.add can be dropped and we can only leave ;; (expr). For example: ;; (i32.add (local.get $x) (i32.const 7)) can be just (local.get $x) when $x ;; is guaranteed to contain a value equal to or less than 7. ;; CHECK: (func $getFallthrough-try-no-throw ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $getFallthrough-try-no-throw (local $x i32) (local.set $x (try (result i32) (do (i32.const 1) ) (catch_all (i32.const 3) ) ) ) ;; The 'try' above is guaranteed not to throw, so we can be sure the $x ;; contains 1 at this point, which is smaller than 7 (0b111), so we know the ;; masking with 0b111 is not ncessary and we can only leave (local.set $x). (drop (i32.and (local.get $x) (i32.const 7))) ) ;; CHECK: (func $getFallthrough-try-may-throw ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (call $dummy) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $getFallthrough-try-may-throw (local $x i32) (local.set $x (try (result i32) (do (call $dummy) (i32.const 1) ) (catch_all (i32.const 3) ) ) ) ;; The 'try' body above may throw because of the call, so we are not sure ;; what $x contains at this point, so we can't remove the masking here. (drop (i32.and (local.get $x) (i32.const 7))) ) ;; CHECK: (func $getFallthrough-nested-try-0 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (call $dummy) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $getFallthrough-nested-try-0 (local $x i32) (local.set $x (try (result i32) (do (try (do (call $dummy) ) (catch $e (drop (pop i32)) ) ) (i32.const 1) ) (catch $e (drop (pop i32)) (i32.const 3) ) ) ) ;; The inner 'try' may throw and it may not be caught by both the inner and ;; outer catches, so we are not sure what $x contains at this point, which ;; prevents the masking optimization. (drop (i32.and (local.get $x) (i32.const 7))) ) ;; CHECK: (func $getFallthrough-nested-try-1 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (call $dummy) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $getFallthrough-nested-try-1 (local $x i32) (local.set $x (try (result i32) (do (try (do (call $dummy) ) (catch_all) ) (i32.const 1) ) (catch_all (i32.const 3) ) ) ) ;; The inner try may throw, but it will caught by the inner catch_all, and ;; $x will be set to 1. So we can do the masking optimization and remove ;; i32.and here. (drop (i32.and (local.get $x) (i32.const 7))) ) ;; CHECK: (func $getFallthrough-nested-try-2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (call $dummy) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $getFallthrough-nested-try-2 (local $x i32) (local.set $x (try (result i32) (do (try (do) (catch_all (call $dummy) ) ) (i32.const 3) ) (catch_all (i32.const 1) ) ) ) ;; Depending on whether (call $dummy) throws or not, we are not sure whether ;; $x will contain 1 or 3 at this point, which prevents the masking ;; optimization. (drop (i32.and (local.get $x) (i32.const 7))) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-exceptions.wast000066400000000000000000000016071423707623100274770ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-instructions --enable-reference-types \ ;; RUN: --enable-exception-handling -S -o - | filecheck %s (module ;; CHECK: (func $test ;; CHECK-NEXT: (if ;; CHECK-NEXT: (try $try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (i32.const 456) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test (if (try (result i32) (do (i32.eqz (i32.eqz (i32.const 123) ) ) ) (catch_all (i32.eqz (i32.eqz (i32.const 456) ) ) ) ) (nop) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-gc-heap.wast000066400000000000000000000476711423707623100266350ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-names --optimize-instructions -all -S -o - \ ;; RUN: | filecheck %s ;; ;; --remove-unused-names allows the optimizer to see that the blocks have no ;; breaks to them, and so they have no nonlinear control flow. (module ;; CHECK: (type $struct (struct (field (mut i32)))) (type $struct (struct (field (mut i32)))) ;; CHECK: (type $struct2 (struct (field (mut i32)) (field (mut i32)))) (type $struct2 (struct (field (mut i32)) (field (mut i32)))) ;; CHECK: (type $struct3 (struct (field (mut i32)) (field (mut i32)) (field (mut i32)))) (type $struct3 (struct (field (mut i32)) (field (mut i32)) (field (mut i32)))) ;; CHECK: (func $tee ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $tee (local $ref (ref null $struct)) ;; The set is not needed as we can apply the 20 in the new. (struct.set $struct 0 (local.tee $ref (struct.new $struct (i32.const 10) ) ) (i32.const 20) ) ) ;; CHECK: (func $side-effects-in-old-value ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper-i32 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effects-in-old-value (local $ref (ref null $struct)) (struct.set $struct 0 (local.tee $ref (struct.new $struct ;; Side effects here force us to keep the old value around. (call $helper-i32 (i32.const 0)) ) ) (i32.const 20) ) ) ;; CHECK: (func $side-effects-in-new-value ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (call $helper-i32 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effects-in-new-value (local $ref (ref null $struct)) (struct.set $struct 0 (local.tee $ref (struct.new $struct (i32.const 10) ) ) ;; Side effects here are not a problem. (call $helper-i32 (i32.const 0)) ) ) ;; CHECK: (func $many-fields ;; CHECK-NEXT: (local $ref (ref null $struct2)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct2 ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct2 ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.const 60) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $many-fields (local $ref (ref null $struct2)) ;; Set to the first field. (struct.set $struct2 0 (local.tee $ref (struct.new $struct2 (i32.const 10) (i32.const 20) ) ) (i32.const 30) ) ;; Set to the second. (struct.set $struct2 1 (local.tee $ref (struct.new $struct2 (i32.const 40) (i32.const 50) ) ) (i32.const 60) ) ) ;; CHECK: (func $side-effect-conflict ;; CHECK-NEXT: (local $ref (ref null $struct2)) ;; CHECK-NEXT: (struct.set $struct2 0 ;; CHECK-NEXT: (local.tee $ref ;; CHECK-NEXT: (struct.new $struct2 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (call $helper-i32 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper-i32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effect-conflict (local $ref (ref null $struct2)) (struct.set $struct2 0 (local.tee $ref (struct.new $struct2 (i32.const 10) ;; Side effects on the second field prevent us from moving the set's ;; value past it to replace the first field above it. (call $helper-i32 (i32.const 0)) ) ) (call $helper-i32 (i32.const 1)) ) ) ;; CHECK: (func $side-effect-ok ;; CHECK-NEXT: (local $ref (ref null $struct2)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct2 ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper-i32 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper-i32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effect-ok (local $ref (ref null $struct2)) (struct.set $struct2 0 (local.tee $ref (struct.new $struct2 ;; Side effects on the first field do not interfere. (call $helper-i32 (i32.const 0)) (i32.const 10) ) ) (call $helper-i32 (i32.const 1)) ) ) ;; CHECK: (func $optimize-subsequent ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $optimize-subsequent (local $ref (ref null $struct)) (local.set $ref (struct.new $struct (i32.const 10) ) ) ;; A set that comes right after can be optimized too. (struct.set $struct 0 (local.get $ref) (i32.const 20) ) ) ;; CHECK: (func $optimize-subsequent-bad-local ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local $other (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $other) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-subsequent-bad-local (local $ref (ref null $struct)) (local $other (ref null $struct)) (local.set $ref (struct.new $struct (i32.const 10) ) ) ;; As above, but the local.get uses a different local, so we have nothing ;; to optimize. (struct.set $struct 0 (local.get $other) (i32.const 20) ) ) ;; CHECK: (func $optimize-chain ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $optimize-chain (local $ref (ref null $struct)) (local.set $ref (struct.new $struct (i32.const 10) ) ) (struct.set $struct 0 (local.get $ref) (i32.const 20) ) ;; The value in the last item in the chain should apply. (struct.set $struct 0 (local.get $ref) (i32.const 30) ) ) ;; CHECK: (func $pattern-breaker ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pattern-breaker (local $ref (ref null $struct)) (local.set $ref (struct.new $struct (i32.const 10) ) ) ;; Anything that we don't recognize breaks the pattern. (nop) (struct.set $struct 0 (local.get $ref) (i32.const 20) ) ) ;; CHECK: (func $ref-local-write ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ref-local-write (local $ref (ref null $struct)) (local.set $ref (struct.new $struct (i32.const 10) ) ) (struct.set $struct 0 (local.get $ref) (block (result i32) ;; A write to the ref local prevents us from optimizing. (local.set $ref (ref.null $struct) ) (i32.const 20) ) ) ) ;; CHECK: (func $ref-local-write-tee ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.tee $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ref-local-write-tee (local $ref (ref null $struct)) (struct.set $struct 0 (local.tee $ref (struct.new $struct (i32.const 10) ) ) (block (result i32) ;; As above, but now in a tee. (local.set $ref (ref.null $struct) ) (i32.const 20) ) ) ) ;; CHECK: (func $other-local-write ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local $other (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $other ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $other-local-write (local $ref (ref null $struct)) (local $other (ref null $struct)) (local.set $ref (struct.new $struct (i32.const 10) ) ) (struct.set $struct 0 (local.get $ref) (block (result i32) ;; A write to another local is fine. (local.set $other (ref.null $struct) ) (i32.const 20) ) ) ) ;; CHECK: (func $ref-local-read ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ref-local-read (local $ref (ref null $struct)) (local.set $ref (struct.new $struct (i32.const 10) ) ) (struct.set $struct 0 (local.get $ref) (block (result i32) ;; A read of the ref local prevents us from optimizing. (drop (local.get $ref) ) (i32.const 20) ) ) ) ;; CHECK: (func $ref-local-read-tee ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.tee $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ref-local-read-tee (local $ref (ref null $struct)) (struct.set $struct 0 (local.tee $ref (struct.new $struct (i32.const 10) ) ) (block (result i32) ;; As above, but now in a tee. (drop (local.get $ref) ) (i32.const 20) ) ) ) ;; CHECK: (func $ref-other-read ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local $other (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $other) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $ref-other-read (local $ref (ref null $struct)) (local $other (ref null $struct)) (local.set $ref (struct.new $struct (i32.const 10) ) ) (struct.set $struct 0 (local.get $ref) (block (result i32) ;; A read of another local is fine. (drop (local.get $other) ) (i32.const 20) ) ) ) ;; CHECK: (func $tee-and-subsequent ;; CHECK-NEXT: (local $ref (ref null $struct3)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct3 ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.const 50) ;; CHECK-NEXT: (i32.const 60) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $tee-and-subsequent (local $ref (ref null $struct3)) ;; Test the common pattern of several subsequent sets, one of which is ;; using a tee. (struct.set $struct3 0 (local.tee $ref (struct.new $struct3 (i32.const 10) (i32.const 20) (i32.const 30) ) ) (i32.const 40) ) (struct.set $struct3 1 (local.get $ref) (i32.const 50) ) (struct.set $struct3 2 (local.get $ref) (i32.const 60) ) ) ;; CHECK: (func $side-effect-subsequent-ok ;; CHECK-NEXT: (local $ref (ref null $struct2)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct2 ;; CHECK-NEXT: (call $helper-i32 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper-i32 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $side-effect-subsequent-ok (local $ref (ref null $struct2)) (local.set $ref (struct.new $struct2 ;; The first field has side effects, but the second does not. (call $helper-i32 (i32.const 0)) (i32.const 10) ) ) ;; Replace the second field with something with side effects. (struct.set $struct2 1 (local.get $ref) (call $helper-i32 (i32.const 1)) ) ) ;; CHECK: (func $default ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.tee $ref ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $default (local $ref (ref null $struct)) (struct.set $struct 0 (local.tee $ref ;; Ignore a new_default for now. If the fields are defaultable then we ;; could add them, in principle, but that might increase code size. (struct.new_default $struct) ) (i32.const 20) ) ) ;; CHECK: (func $many-news ;; CHECK-NEXT: (local $ref (ref null $struct3)) ;; CHECK-NEXT: (local $ref2 (ref null $struct3)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct3 ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.const 50) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (struct.set $struct3 2 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: (i32.const 60) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct3 ;; CHECK-NEXT: (i32.const 400) ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: (i32.const 500) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct3 ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $ref2 ;; CHECK-NEXT: (struct.new $struct3 ;; CHECK-NEXT: (i32.const 400) ;; CHECK-NEXT: (i32.const 600) ;; CHECK-NEXT: (i32.const 500) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $many-news (local $ref (ref null $struct3)) (local $ref2 (ref null $struct3)) ;; Test that we optimize for multiple struct.news in the same function. (struct.set $struct3 0 (local.tee $ref (struct.new $struct3 (i32.const 10) (i32.const 20) (i32.const 30) ) ) (i32.const 40) ) (struct.set $struct3 1 (local.get $ref) (i32.const 50) ) (nop) (struct.set $struct3 2 (local.get $ref) (i32.const 60) ) (nop) (struct.set $struct3 0 (local.tee $ref (struct.new $struct3 (i32.const 100) (i32.const 200) (i32.const 300) ) ) (i32.const 400) ) (struct.set $struct3 2 (local.get $ref) (i32.const 500) ) ;; Test inside an inner block. (block $inner (struct.set $struct3 0 (local.tee $ref (struct.new $struct3 (i32.const 10) (i32.const 20) (i32.const 30) ) ) (i32.const 40) ) ;; Use a different ref local here. (struct.set $struct3 0 (local.tee $ref2 (struct.new $struct3 (i32.const 100) (i32.const 200) (i32.const 300) ) ) (i32.const 400) ) (struct.set $struct3 2 (local.get $ref2) (i32.const 500) ) (struct.set $struct3 1 (local.get $ref2) (i32.const 600) ) ) ) ;; CHECK: (func $unreachable ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.tee $ref ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable (local $ref (ref null $struct)) ;; Do not optimize unreachable code, either in the new (first pair) or the ;; set (second pair) (local.set $ref (struct.new $struct (unreachable) ) ) (struct.set $struct 0 (local.get $ref) (i32.const 10) ) (nop) (local.set $ref (struct.new $struct (i32.const 20) ) ) (struct.set $struct 0 (local.get $ref) (unreachable) ) ) ;; CHECK: (func $helper-i32 (param $x i32) (result i32) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) (func $helper-i32 (param $x i32) (result i32) (i32.const 42) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-gc-iit.wast000066400000000000000000000346231423707623100264760ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: foreach %s %t wasm-opt --optimize-instructions --ignore-implicit-traps --enable-reference-types --enable-gc -S -o - \ ;; RUN: | filecheck %s ;; RUN: foreach %s %t wasm-opt --optimize-instructions --ignore-implicit-traps --enable-reference-types --enable-gc --nominal -S -o - \ ;; RUN: | filecheck %s --check-prefix NOMNL ;; Also test trapsNeverHappen (with nominal; no need for both type system modes). ;; RUN: foreach %s %t wasm-opt --optimize-instructions --traps-never-happen --enable-reference-types --enable-gc --nominal -S -o - \ ;; RUN: | filecheck %s --check-prefix NOMNL-TNH (module ;; CHECK: (type $parent (struct (field i32))) ;; NOMNL: (type $parent (struct_subtype (field i32) data)) ;; NOMNL-TNH: (type $parent (struct_subtype (field i32) data)) (type $parent (struct (field i32))) ;; CHECK: (type $child (struct (field i32) (field f64))) ;; NOMNL: (type $child (struct_subtype (field i32) (field f64) $parent)) ;; NOMNL-TNH: (type $child (struct_subtype (field i32) (field f64) $parent)) (type $child (struct_subtype (field i32) (field f64) $parent)) ;; CHECK: (type $other (struct (field i64) (field f32))) ;; NOMNL: (type $other (struct_subtype (field i64) (field f32) data)) ;; NOMNL-TNH: (type $other (struct_subtype (field i64) (field f32) data)) (type $other (struct (field i64) (field f32))) ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $foo (type $none_=>_none) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) ;; NOMNL-TNH: (func $foo (type $none_=>_none) ;; NOMNL-TNH-NEXT: (nop) ;; NOMNL-TNH-NEXT: ) (func $foo) ;; CHECK: (func $ref-cast-iit (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other)) (param $parent-rtt (rtt $parent)) (param $child-rtt (rtt $child)) (param $other-rtt (rtt $other)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $parent)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $parent-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $parent) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $child)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $parent-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $parent) ;; CHECK-NEXT: (local.get $child-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $other)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $other-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-iit (type $ref|$parent|_ref|$child|_ref|$other|_rtt_$parent_rtt_$child_rtt_$other_=>_none) (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other)) (param $parent-rtt (rtt $parent)) (param $child-rtt (rtt $child)) (param $other-rtt (rtt $other)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $parent)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $parent-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $parent) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $child)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $parent-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $child) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $parent) ;; NOMNL-NEXT: (local.get $child-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $other)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $child) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $other-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-TNH: (func $ref-cast-iit (type $ref|$parent|_ref|$child|_ref|$other|_rtt_$parent_rtt_$child_rtt_$other_=>_none) (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other)) (param $parent-rtt (rtt $parent)) (param $child-rtt (rtt $child)) (param $other-rtt (rtt $other)) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (block (result (ref $parent)) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (local.get $parent-rtt) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (local.get $parent) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (block (result (ref $child)) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (local.get $parent-rtt) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (local.get $child) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (ref.cast ;; NOMNL-TNH-NEXT: (local.get $parent) ;; NOMNL-TNH-NEXT: (local.get $child-rtt) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (block (result (ref $other)) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (local.get $child) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (local.get $other-rtt) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (unreachable) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) (func $ref-cast-iit (param $parent (ref $parent)) (param $child (ref $child)) (param $other (ref $other)) (param $parent-rtt (rtt $parent)) (param $child-rtt (rtt $child)) (param $other-rtt (rtt $other)) ;; a cast of parent to an rtt of parent: assuming no traps as we do, we can ;; optimize this as the new type will be valid. (drop (ref.cast (local.get $parent) (local.get $parent-rtt) ) ) ;; a cast of child to a supertype: again, we replace with a valid type. (drop (ref.cast (local.get $child) (local.get $parent-rtt) ) ) ;; a cast of parent to a subtype: we cannot replace the original heap type ;; $child with one that is not equal or more specific, like $parent, so we ;; cannot optimize here. (drop (ref.cast (local.get $parent) (local.get $child-rtt) ) ) ;; a cast of child to an unrelated type: it will trap anyhow (drop (ref.cast (local.get $child) (local.get $other-rtt) ) ) ) ;; CHECK: (func $ref-cast-iit-bad (param $parent (ref $parent)) (param $parent-rtt (rtt $parent)) ;; CHECK-NEXT: (local $2 (ref null $parent)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $parent)) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block $block (result (ref $parent)) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (local.get $parent) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block0 (result (rtt $parent)) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (local.get $parent-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $parent) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.get $parent-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-iit-bad (type $ref|$parent|_rtt_$parent_=>_none) (param $parent (ref $parent)) (param $parent-rtt (rtt $parent)) ;; NOMNL-NEXT: (local $2 (ref null $parent)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $parent)) ;; NOMNL-NEXT: (local.set $2 ;; NOMNL-NEXT: (block $block (result (ref $parent)) ;; NOMNL-NEXT: (call $foo) ;; NOMNL-NEXT: (local.get $parent) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block $block0 (result (rtt $parent)) ;; NOMNL-NEXT: (call $foo) ;; NOMNL-NEXT: (local.get $parent-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $parent) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: (local.get $parent-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-TNH: (func $ref-cast-iit-bad (type $ref|$parent|_rtt_$parent_=>_none) (param $parent (ref $parent)) (param $parent-rtt (rtt $parent)) ;; NOMNL-TNH-NEXT: (local $2 (ref null $parent)) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (block (result (ref $parent)) ;; NOMNL-TNH-NEXT: (local.set $2 ;; NOMNL-TNH-NEXT: (block $block (result (ref $parent)) ;; NOMNL-TNH-NEXT: (call $foo) ;; NOMNL-TNH-NEXT: (local.get $parent) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (block $block0 (result (rtt $parent)) ;; NOMNL-TNH-NEXT: (call $foo) ;; NOMNL-TNH-NEXT: (local.get $parent-rtt) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (ref.as_non_null ;; NOMNL-TNH-NEXT: (local.get $2) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (ref.cast ;; NOMNL-TNH-NEXT: (local.get $parent) ;; NOMNL-TNH-NEXT: (unreachable) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (ref.cast ;; NOMNL-TNH-NEXT: (unreachable) ;; NOMNL-TNH-NEXT: (local.get $parent-rtt) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) (func $ref-cast-iit-bad (param $parent (ref $parent)) (param $parent-rtt (rtt $parent)) ;; optimizing this cast away requires reordering. (drop (ref.cast (block (result (ref $parent)) (call $foo) (local.get $parent) ) (block (result (rtt $parent)) (call $foo) (local.get $parent-rtt) ) ) ) ;; ignore unreachability (drop (ref.cast (local.get $parent) (unreachable) ) ) (drop (ref.cast (unreachable) (local.get $parent-rtt) ) ) ) ;; CHECK: (func $ref-eq-ref-cast (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-eq-ref-cast (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-TNH: (func $ref-eq-ref-cast (type $eqref_=>_none) (param $x eqref) ;; NOMNL-TNH-NEXT: (drop ;; NOMNL-TNH-NEXT: (i32.const 1) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) (func $ref-eq-ref-cast (param $x eqref) ;; we can look through a ref.cast if we ignore traps (drop (ref.eq (local.get $x) (ref.cast (local.get $x) (rtt.canon $parent) ) ) ) ) ;; CHECK: (func $set-of-as-non-null (param $x anyref) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $set-of-as-non-null (type $anyref_=>_none) (param $x anyref) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-TNH: (func $set-of-as-non-null (type $anyref_=>_none) (param $x anyref) ;; NOMNL-TNH-NEXT: (local.set $x ;; NOMNL-TNH-NEXT: (local.get $x) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) (func $set-of-as-non-null (param $x anyref) ;; As we ignore such traps, we can remove the ref.as here. (local.set $x (ref.as_non_null (local.get $x) ) ) ) ) (module ;; CHECK: (type $B (struct (field (ref null $A)))) ;; CHECK: (type $A (struct )) ;; NOMNL: (type $A (struct_subtype data)) ;; NOMNL-TNH: (type $A (struct_subtype data)) (type $A (struct_subtype data)) ;; NOMNL: (type $B (struct_subtype (field (ref null $A)) $A)) ;; NOMNL-TNH: (type $B (struct_subtype (field (ref null $A)) $A)) (type $B (struct_subtype (field (ref null $A)) $A)) ;; NOMNL: (type $C (struct_subtype (field (ref null $D)) $B)) ;; NOMNL-TNH: (type $C (struct_subtype (field (ref null $D)) $B)) (type $C (struct_subtype (field (ref null $D)) $B)) ;; NOMNL: (type $D (struct_subtype $A)) ;; NOMNL-TNH: (type $D (struct_subtype $A)) (type $D (struct_subtype $A)) ;; CHECK: (func $test (param $C (ref $B)) (result anyref) ;; CHECK-NEXT: (struct.get $B 0 ;; CHECK-NEXT: (local.get $C) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $test (type $ref|$C|_=>_anyref) (param $C (ref $C)) (result anyref) ;; NOMNL-NEXT: (struct.get $C 0 ;; NOMNL-NEXT: (local.get $C) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-TNH: (func $test (type $ref|$C|_=>_anyref) (param $C (ref $C)) (result anyref) ;; NOMNL-TNH-NEXT: (struct.get $C 0 ;; NOMNL-TNH-NEXT: (local.get $C) ;; NOMNL-TNH-NEXT: ) ;; NOMNL-TNH-NEXT: ) (func $test (param $C (ref $C)) (result anyref) (struct.get $B 0 (ref.cast_static $B ;; Try to cast a $C to its parent, $B. That always ;; works, so the cast can be removed. ;; Then once the cast is removed, the outer struct.get ;; will have a reference with a different type, ;; making it a (struct.get $C ..) instead of $B. ;; But $B and $C have different types on field 0, and ;; so the struct.get must be refinalized so the node ;; has the expected type. (local.get $C) ) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-gc-tnh-nn.wast000066400000000000000000000021731423707623100271060ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-instructions --traps-never-happen --enable-gc-nn-locals -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (func $set-of-as-non-null ;; CHECK-NEXT: (local $x anyref) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $set-of-as-non-null (local $x anyref) ;; As we ignore such traps, we can in principle remove the ref.as here. ;; However, as we allow non-nullable locals, we should not do that - if we ;; did it it might prevent specializing the local type later. (local.set $x (ref.as_non_null (local.get $x) ) ) ;; The same for a tee. (drop (local.tee $x (ref.as_non_null (local.get $x) ) ) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-gc.wast000066400000000000000000002462411423707623100257140ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-names --optimize-instructions --enable-reference-types --enable-gc -S -o - \ ;; RUN: | filecheck %s ;; RUN: wasm-opt %s --remove-unused-names --optimize-instructions --enable-reference-types --enable-gc --nominal -S -o - \ ;; RUN: | filecheck %s --check-prefix NOMNL (module ;; CHECK: (type $struct (struct (field $i8 (mut i8)) (field $i16 (mut i16)) (field $i32 (mut i32)) (field $i64 (mut i64)))) ;; NOMNL: (type $struct (struct_subtype (field $i8 (mut i8)) (field $i16 (mut i16)) (field $i32 (mut i32)) (field $i64 (mut i64)) data)) (type $struct (struct (field $i8 (mut i8)) (field $i16 (mut i16)) (field $i32 (mut i32)) (field $i64 (mut i64)) )) ;; CHECK: (type $A (struct (field i32))) ;; NOMNL: (type $A (struct_subtype (field i32) data)) (type $A (struct (field i32))) ;; CHECK: (type $B (struct (field i32) (field i32) (field f32))) ;; CHECK: (type $array (array (mut i8))) ;; NOMNL: (type $B (struct_subtype (field i32) (field i32) (field f32) $A)) ;; NOMNL: (type $array (array_subtype (mut i8) data)) (type $array (array (mut i8))) (type $B (struct_subtype (field i32) (field i32) (field f32) $A)) ;; CHECK: (type $B-child (struct (field i32) (field i32) (field f32) (field i64))) ;; NOMNL: (type $B-child (struct_subtype (field i32) (field i32) (field f32) (field i64) $B)) (type $B-child (struct_subtype (field i32) (field i32) (field f32) (field i64) $B)) ;; CHECK: (type $empty (struct )) ;; NOMNL: (type $empty (struct_subtype data)) (type $empty (struct)) ;; CHECK: (type $C (struct (field i32) (field i32) (field f64))) ;; NOMNL: (type $C (struct_subtype (field i32) (field i32) (field f64) $A)) (type $C (struct_subtype (field i32) (field i32) (field f64) $A)) ;; CHECK: (import "env" "get-i32" (func $get-i32 (result i32))) ;; NOMNL: (import "env" "get-i32" (func $get-i32 (result i32))) (import "env" "get-i32" (func $get-i32 (result i32))) ;; These functions test if an `if` with subtyped arms is correctly folded ;; 1. if its `ifTrue` and `ifFalse` arms are identical (can fold) ;; CHECK: (func $if-arms-subtype-fold (result anyref) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; NOMNL: (func $if-arms-subtype-fold (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (ref.null any) ;; NOMNL-NEXT: ) (func $if-arms-subtype-fold (result anyref) (if (result anyref) (i32.const 0) (ref.null extern) (ref.null extern) ) ) ;; 2. if its `ifTrue` and `ifFalse` arms are not identical (cannot fold) ;; CHECK: (func $if-arms-subtype-nofold (result anyref) ;; CHECK-NEXT: (if (result anyref) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $if-arms-subtype-nofold (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (if (result anyref) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: (ref.null any) ;; NOMNL-NEXT: (ref.null func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $if-arms-subtype-nofold (result anyref) (if (result anyref) (i32.const 0) (ref.null extern) (ref.null func) ) ) ;; Stored values automatically truncate unneeded bytes. ;; CHECK: (func $store-trunc (param $x (ref null $struct)) ;; CHECK-NEXT: (struct.set $struct $i8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 35) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct $i16 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 9029) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct $i8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (call $get-i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $store-trunc (type $ref?|$struct|_=>_none) (param $x (ref null $struct)) ;; NOMNL-NEXT: (struct.set $struct $i8 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 35) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.set $struct $i16 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 9029) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.set $struct $i8 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (call $get-i32) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $store-trunc (param $x (ref null $struct)) (struct.set $struct $i8 (local.get $x) (i32.const 0x123) ;; data over 0xff is unnecessary ) (struct.set $struct $i16 (local.get $x) (i32.const 0x12345) ;; data over 0xffff is unnecessary ) (struct.set $struct $i8 (local.get $x) (i32.and ;; truncating bits using an and is unnecessary (call $get-i32) (i32.const 0xff) ) ) ) ;; Similar, but for arrays. ;; CHECK: (func $store-trunc2 (param $x (ref null $array)) ;; CHECK-NEXT: (array.set $array ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 35) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $store-trunc2 (type $ref?|$array|_=>_none) (param $x (ref null $array)) ;; NOMNL-NEXT: (array.set $array ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: (i32.const 35) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $store-trunc2 (param $x (ref null $array)) (array.set $array (local.get $x) (i32.const 0) (i32.const 0x123) ;; data over 0xff is unnecessary ) ) ;; ref.is_null is not needed on a non-nullable value, and if something is ;; a func we don't need that either etc. if we know the result ;; CHECK: (func $unneeded_is (param $struct (ref $struct)) (param $func (ref func)) (param $data dataref) (param $i31 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $unneeded_is (type $ref|$struct|_ref|func|_dataref_i31ref_=>_none) (param $struct (ref $struct)) (param $func (ref func)) (param $data dataref) (param $i31 i31ref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $unneeded_is (param $struct (ref $struct)) (param $func (ref func)) (param $data (ref data)) (param $i31 (ref i31)) (drop (ref.is_null (local.get $struct)) ) (drop (ref.is_func (local.get $func)) ) (drop (ref.is_data (local.get $data)) ) (drop (ref.is_i31 (local.get $i31)) ) ) ;; similar to $unneeded_is, but the values are nullable. we can at least ;; leave just the null check. ;; CHECK: (func $unneeded_is_null (param $struct (ref null $struct)) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $unneeded_is_null (type $ref?|$struct|_funcref_ref?|data|_ref?|i31|_=>_none) (param $struct (ref null $struct)) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (local.get $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.eqz ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.eqz ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.eqz ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $unneeded_is_null (param $struct (ref null $struct)) (param $func (ref null func)) (param $data (ref null data)) (param $i31 (ref null i31)) (drop (ref.is_null (local.get $struct)) ) (drop (ref.is_func (local.get $func)) ) (drop (ref.is_data (local.get $data)) ) (drop (ref.is_i31 (local.get $i31)) ) ) ;; similar to $unneeded_is, but the values are of mixed kind (is_func of ;; data, etc.). regardless of nullability the result here is always 0. ;; CHECK: (func $unneeded_is_bad_kinds (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $unneeded_is_bad_kinds (type $funcref_ref?|data|_ref?|i31|_=>_none) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $unneeded_is_bad_kinds (param $func (ref null func)) (param $data (ref null data)) (param $i31 (ref null i31)) (drop (ref.is_func (local.get $data)) ) (drop (ref.is_data (local.get $i31)) ) (drop (ref.is_i31 (local.get $func)) ) ;; also check non-nullable types as inputs (drop (ref.is_func (ref.as_non_null (local.get $data))) ) (drop (ref.is_data (ref.as_non_null (local.get $i31))) ) (drop (ref.is_i31 (ref.as_non_null (local.get $func))) ) ) ;; ref.as_non_null is not needed on a non-nullable value, and if something is ;; a func we don't need that either etc., and can just return the value. ;; CHECK: (func $unneeded_as (param $struct (ref $struct)) (param $func (ref func)) (param $data dataref) (param $i31 i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $unneeded_as (type $ref|$struct|_ref|func|_dataref_i31ref_=>_none) (param $struct (ref $struct)) (param $func (ref func)) (param $data dataref) (param $i31 i31ref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $unneeded_as (param $struct (ref $struct)) (param $func (ref func)) (param $data (ref data)) (param $i31 (ref i31)) (drop (ref.as_non_null (local.get $struct)) ) (drop (ref.as_func (local.get $func)) ) (drop (ref.as_data (local.get $data)) ) (drop (ref.as_i31 (local.get $i31)) ) ) ;; similar to $unneeded_as, but the values are nullable. we can turn the ;; more specific things into ref.as_non_null. ;; CHECK: (func $unneeded_as_null (param $struct (ref null $struct)) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $unneeded_as_null (type $ref?|$struct|_funcref_ref?|data|_ref?|i31|_=>_none) (param $struct (ref null $struct)) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $unneeded_as_null (param $struct (ref null $struct)) (param $func (ref null func)) (param $data (ref null data)) (param $i31 (ref null i31)) (drop (ref.as_non_null (local.get $struct)) ) (drop (ref.as_func (local.get $func)) ) (drop (ref.as_data (local.get $data)) ) (drop (ref.as_i31 (local.get $i31)) ) ) ;; similar to $unneeded_as, but the values are of mixed kind (as_func of ;; data, etc.), so we know we will trap ;; CHECK: (func $unneeded_as_bad_kinds (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref func)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result dataref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref func)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result dataref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $i31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i31ref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $unneeded_as_bad_kinds (type $funcref_ref?|data|_ref?|i31|_=>_none) (param $func funcref) (param $data (ref null data)) (param $i31 (ref null i31)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref func)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result dataref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i31ref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref func)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $data) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result dataref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $i31) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i31ref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $unneeded_as_bad_kinds (param $func (ref null func)) (param $data (ref null data)) (param $i31 (ref null i31)) (drop (ref.as_func (local.get $data)) ) (drop (ref.as_data (local.get $i31)) ) (drop (ref.as_i31 (local.get $func)) ) ;; also check non-nullable types as inputs (drop (ref.as_func (ref.as_non_null (local.get $data))) ) (drop (ref.as_data (ref.as_non_null (local.get $i31))) ) (drop (ref.as_i31 (ref.as_non_null (local.get $func))) ) ) ;; CHECK: (func $unneeded_unreachability ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.is_func ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_func ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $unneeded_unreachability (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.is_func ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_func ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $unneeded_unreachability ;; unreachable instructions can simply be ignored (drop (ref.is_func (unreachable)) ) (drop (ref.as_func (unreachable)) ) ) ;; CHECK: (func $redundant-non-null-casts (param $x (ref null $struct)) (param $y (ref null $array)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct $i8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get_u $struct $i8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (array.set $array ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (array.get_u $array ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (array.len $array ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $redundant-non-null-casts (type $ref?|$struct|_ref?|$array|_=>_none) (param $x (ref null $struct)) (param $y (ref null $array)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.set $struct $i8 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.get_u $struct $i8 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (array.set $array ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: (i32.const 3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (array.get_u $array ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: (i32.const 4) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (array.len $array ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $redundant-non-null-casts (param $x (ref null $struct)) (param $y (ref null $array)) (drop (ref.as_non_null (ref.as_non_null (ref.as_non_null (local.get $x) ) ) ) ) (struct.set $struct 0 (ref.as_non_null (local.get $x) ) (i32.const 1) ) (drop (struct.get_u $struct 0 (ref.as_non_null (local.get $x) ) ) ) (array.set $array (ref.as_non_null (local.get $y) ) (i32.const 2) (i32.const 3) ) (drop (array.get $array (ref.as_non_null (local.get $y) ) (i32.const 4) ) ) (drop (array.len $array (ref.as_non_null (local.get $y) ) ) ) ) ;; CHECK: (func $get-eqref (result eqref) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $get-eqref (type $none_=>_eqref) (result eqref) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $get-eqref (result eqref) (unreachable) ) ;; CHECK: (func $ref-eq (param $x eqref) (param $y eqref) ;; CHECK-NEXT: (local $lx eqref) ;; CHECK-NEXT: (local $ly eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $lx ;; CHECK-NEXT: (call $get-eqref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-eq (type $eqref_eqref_=>_none) (param $x eqref) (param $y eqref) ;; NOMNL-NEXT: (local $lx eqref) ;; NOMNL-NEXT: (local $ly eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $lx ;; NOMNL-NEXT: (call $get-eqref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-eq (param $x eqref) (param $y eqref) (local $lx eqref) (local $ly eqref) ;; identical parameters are equal (drop (ref.eq (local.get $x) (local.get $x) ) ) ;; different ones might not be (drop (ref.eq (local.get $x) (local.get $y) ) ) ;; identical locals are (local.set $lx (call $get-eqref) ) (drop (ref.eq (local.get $lx) (local.get $lx) ) ) ;; fallthroughs work ok (but we need --remove-unused-names so that we can ;; trivially tell that there are no breaks) (drop (ref.eq (block (result eqref) (nop) (local.get $x) ) (block (result eqref) (nop) (drop (i32.const 10) ) (nop) (local.get $x) ) ) ) ) ;; CHECK: (func $nothing ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $nothing (type $none_=>_none) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $nothing) ;; CHECK: (func $ref-eq-corner-cases (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (block (result eqref) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result eqref) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (struct.new_default_with_rtt $struct ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.new_default_with_rtt $struct ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-eq-corner-cases (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (block (result eqref) ;; NOMNL-NEXT: (call $nothing) ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (block (result eqref) ;; NOMNL-NEXT: (call $nothing) ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.new_default_with_rtt $struct ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-eq-corner-cases (param $x eqref) ;; side effects prevent optimization (drop (ref.eq (block (result eqref) (call $nothing) (local.get $x) ) (block (result eqref) (call $nothing) (local.get $x) ) ) ) ;; allocation prevents optimization (drop (ref.eq (struct.new_default_with_rtt $struct (rtt.canon $struct) ) (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ) ;; but irrelevant allocations do not prevent optimization (drop (ref.eq (block (result eqref) ;; an allocation that does not trouble us (drop (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) (local.get $x) ) (block (result eqref) (drop (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ;; add a nop to make the two inputs to ref.eq not structurally equal, ;; but in a way that does not matter (since only the value falling ;; out does) (nop) (local.get $x) ) ) ) ) ;; CHECK: (func $ref-eq-ref-cast (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-eq-ref-cast (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-eq-ref-cast (param $x eqref) ;; it is almost valid to look through a cast, except that it might trap so ;; there is a side effect (drop (ref.eq (local.get $x) (ref.cast (local.get $x) (rtt.canon $struct) ) ) ) ) ;; CHECK: (func $flip-cast-of-as-non-null (param $x anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get_u $struct $i8 ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (ref.as_func ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (ref.as_data ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (ref.as_i31 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $flip-cast-of-as-non-null (type $anyref_=>_none) (param $x anyref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.get_u $struct $i8 ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (ref.as_func ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (ref.as_data ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (ref.as_i31 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $flip-cast-of-as-non-null (param $x anyref) (drop (ref.cast ;; this can be moved through the ref.cast outward. (ref.as_non_null (local.get $x) ) (rtt.canon $struct) ) ) (drop ;; an example of how this helps: the struct.get will trap on null anyhow (struct.get_u $struct 0 (ref.cast ;; this can be moved through the ref.cast outward. (ref.as_non_null (local.get $x) ) (rtt.canon $struct) ) ) ) ;; other ref.as* operations are ignored for now (drop (ref.cast (ref.as_func (local.get $x) ) (rtt.canon $struct) ) ) (drop (ref.cast (ref.as_data (local.get $x) ) (rtt.canon $struct) ) ) (drop (ref.cast (ref.as_i31 (local.get $x) ) (rtt.canon $struct) ) ) ) ;; CHECK: (func $flip-tee-of-as-non-null (param $x anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $flip-tee-of-as-non-null (type $anyref_=>_none) (param $x anyref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.tee $x ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $flip-tee-of-as-non-null (param $x anyref) (drop (local.tee $x ;; this can be moved through the tee outward. (ref.as_non_null (local.get $x) ) ) ) ) ;; CHECK: (func $flip-tee-of-as-non-null-non-nullable (param $x (ref any)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $flip-tee-of-as-non-null-non-nullable (type $ref|any|_=>_none) (param $x (ref any)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.tee $x ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.null any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $flip-tee-of-as-non-null-non-nullable (param $x (ref any)) (drop (local.tee $x ;; this *cannnot* be moved through the tee outward, as the param is in ;; fact non-nullable, and we depend on the ref.as_non_null in order to ;; get a valid type to assign to it (ref.as_non_null (ref.null any) ) ) ) ) ;; CHECK: (func $ternary-identical-arms (param $x i32) (param $y (ref null $struct)) (param $z (ref null $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (if (result (ref null $struct)) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ternary-identical-arms (type $i32_ref?|$struct|_ref?|$struct|_=>_none) (param $x i32) (param $y (ref null $struct)) (param $z (ref null $struct)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (if (result (ref null $struct)) ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: (local.get $z) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ternary-identical-arms (param $x i32) (param $y (ref null $struct)) (param $z (ref null $struct)) (drop (if (result i32) (local.get $x) (ref.is_null (local.get $y)) (ref.is_null (local.get $z)) ) ) ) ;; CHECK: (func $select-identical-arms-but-side-effect (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (struct.get_u $struct $i8 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get_u $struct $i8 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $select-identical-arms-but-side-effect (type $ref?|$struct|_ref?|$struct|_i32_=>_none) (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (select ;; NOMNL-NEXT: (struct.get_u $struct $i8 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get_u $struct $i8 ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $z) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $select-identical-arms-but-side-effect (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) (drop (select ;; the arms are equal but have side effects (struct.get_u $struct 0 (local.get $x) ) (struct.get_u $struct 0 (local.get $y) ) (local.get $z) ) ) ) ;; CHECK: (func $ternary-identical-arms-no-side-effect (param $x (ref $struct)) (param $y (ref $struct)) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get_u $struct $i8 ;; CHECK-NEXT: (select (result (ref $struct)) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ternary-identical-arms-no-side-effect (type $ref|$struct|_ref|$struct|_i32_=>_none) (param $x (ref $struct)) (param $y (ref $struct)) (param $z i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.get_u $struct $i8 ;; NOMNL-NEXT: (select (result (ref $struct)) ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: (local.get $z) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ternary-identical-arms-no-side-effect (param $x (ref $struct)) (param $y (ref $struct)) (param $z i32) (drop (select ;; the arms are equal and as the params are non-null, there are no possible side effects (struct.get_u $struct 0 (local.get $x) ) (struct.get_u $struct 0 (local.get $y) ) (local.get $z) ) ) ) ;; CHECK: (func $if-identical-arms-with-side-effect (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get_u $struct $i8 ;; CHECK-NEXT: (if (result (ref null $struct)) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $if-identical-arms-with-side-effect (type $ref?|$struct|_ref?|$struct|_i32_=>_none) (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.get_u $struct $i8 ;; NOMNL-NEXT: (if (result (ref null $struct)) ;; NOMNL-NEXT: (local.get $z) ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $if-identical-arms-with-side-effect (param $x (ref null $struct)) (param $y (ref null $struct)) (param $z i32) (drop (if (result i32) (local.get $z) ;; the arms are equal and have side effects, but that is ok with an if ;; which only executes one side anyhow (struct.get_u $struct 0 (local.get $x) ) (struct.get_u $struct 0 (local.get $y) ) ) ) ) ;; CHECK: (func $ref-cast-squared (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-squared (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-squared (param $x eqref) ;; Identical ref.casts can be folded together. (drop (ref.cast (ref.cast (local.get $x) (rtt.canon $struct) ) (rtt.canon $struct) ) ) ) ;; CHECK: (func $ref-cast-squared-fallthrough (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-squared-fallthrough (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.tee $x ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-squared-fallthrough (param $x eqref) ;; A fallthrough in the middle does not prevent this optimization. (drop (ref.cast (local.tee $x (ref.cast (local.get $x) (rtt.canon $struct) ) ) (rtt.canon $struct) ) ) ) ;; CHECK: (func $ref-cast-cubed (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-cubed (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-cubed (param $x eqref) ;; Three and more also work. (drop (ref.cast (ref.cast (ref.cast (local.get $x) (rtt.canon $struct) ) (rtt.canon $struct) ) (rtt.canon $struct) ) ) ) ;; CHECK: (func $ref-cast-squared-different (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-squared-different (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-squared-different (param $x eqref) ;; Different casts cannot be folded. (drop (ref.cast (ref.cast (local.get $x) (rtt.canon $empty) ) (rtt.canon $struct) ) ) ) ;; CHECK: (func $ref-cast-squared-effects (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (call $get-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $get-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-squared-effects (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (call $get-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $get-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-squared-effects (param $x eqref) ;; The rtts are equal but have side effects, preventing optimization. (drop (ref.cast (ref.cast (local.get $x) (call $get-rtt) ) (call $get-rtt) ) ) ) ;; Helper function for above. ;; CHECK: (func $get-rtt (result (rtt $empty)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $get-rtt (type $none_=>_rtt_$empty) (result (rtt $empty)) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $get-rtt (result (rtt $empty)) (unreachable) ) ;; CHECK: (func $ref-eq-null (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-eq-null (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-eq-null (param $x eqref) ;; Equality to null can be done with ref.is_null. (drop (ref.eq (local.get $x) (ref.null eq) ) ) (drop (ref.eq (ref.null eq) (local.get $x) ) ) ;; Also check that we turn a comparison of two nulls into 1, using the rule ;; for comparing the same thing to itself (i.e., that we run that rule first ;; and not the check for one of them being null, which would require more ;; work afterwards). (drop (ref.eq (ref.null eq) (ref.null eq) ) ) ) ;; CHECK: (func $hoist-LUB-danger (param $x i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (struct.get $B 1 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $C 1 ;; CHECK-NEXT: (ref.null $C) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $hoist-LUB-danger (type $i32_=>_i32) (param $x i32) (result i32) ;; NOMNL-NEXT: (if (result i32) ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (struct.get $B 1 ;; NOMNL-NEXT: (ref.null $B) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $C 1 ;; NOMNL-NEXT: (ref.null $C) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $hoist-LUB-danger (param $x i32) (result i32) ;; In nominal typing, if we hoist the struct.get out of the if, then the if ;; will have a new type, $A, but $A does not have field "1" which would be an ;; error. We disallow subtyping for this reason. ;; ;; We also disallow subtyping in structural typing, even though atm there ;; might not be a concrete risk there: future instructions might introduce ;; such things, and it reduces the complexity of having differences with ;; nominal typing. (if (result i32) (local.get $x) (struct.get $B 1 (ref.null $B) ) (struct.get $C 1 (ref.null $C) ) ) ) ;; CHECK: (func $incompatible-cast-of-non-null (param $struct (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $array)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $array) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $incompatible-cast-of-non-null (type $ref|$struct|_=>_none) (param $struct (ref $struct)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $array)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $array) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $incompatible-cast-of-non-null (param $struct (ref $struct)) (drop (ref.cast (local.get $struct) (rtt.canon $array) ) ) ) ;; CHECK: (func $incompatible-cast-of-null ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $array)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $array) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $array) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (block (result (ref null $array)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $array) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $array) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $incompatible-cast-of-null (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $array)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $array) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $array) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (block (result (ref null $array)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.null $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $array) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $array) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $incompatible-cast-of-null (drop (ref.cast (ref.null $struct) (rtt.canon $array) ) ) (drop (ref.cast ;; The fallthrough is null, but the node's child's type is non-nullable, ;; so we must add a ref.as_non_null on the outside to keep the type ;; identical. (ref.as_non_null (ref.null $struct) ) (rtt.canon $array) ) ) ) ;; CHECK: (func $incompatible-cast-of-unknown (param $struct (ref null $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (rtt.canon $array) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $incompatible-cast-of-unknown (type $ref?|$struct|_=>_none) (param $struct (ref null $struct)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (local.get $struct) ;; NOMNL-NEXT: (rtt.canon $array) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $incompatible-cast-of-unknown (param $struct (ref null $struct)) (drop (ref.cast (local.get $struct) (rtt.canon $array) ) ) ) ;; CHECK: (func $incompatible-test (param $struct (ref null $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $array) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $incompatible-test (type $ref?|$struct|_=>_none) (param $struct (ref null $struct)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $array) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $incompatible-test (param $struct (ref null $struct)) (drop ;; This test will definitely fail, so we can turn it into 0. (ref.test (local.get $struct) (rtt.canon $array) ) ) ) ;; CHECK: (func $subtype-compatible (param $A (ref null $A)) (param $B (ref null $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.test ;; CHECK-NEXT: (local.get $A) ;; CHECK-NEXT: (rtt.canon $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.test ;; CHECK-NEXT: (local.get $B) ;; CHECK-NEXT: (rtt.canon $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $subtype-compatible (type $ref?|$A|_ref?|$B|_=>_none) (param $A (ref null $A)) (param $B (ref null $B)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.test ;; NOMNL-NEXT: (local.get $A) ;; NOMNL-NEXT: (rtt.canon $B) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.test ;; NOMNL-NEXT: (local.get $B) ;; NOMNL-NEXT: (rtt.canon $A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $subtype-compatible (param $A (ref null $A)) (param $B (ref null $B)) (drop ;; B is a subtype of A, so this can work. (ref.test (local.get $A) (rtt.canon $B) ) ) (drop ;; The other direction works too. (ref.test (local.get $B) (rtt.canon $A) ) ) ) ;; CHECK: (func $ref.test-unreachable (param $A (ref null $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.test ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (rtt.canon $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref.test-unreachable (type $ref?|$A|_=>_none) (param $A (ref null $A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.test ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: (rtt.canon $A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref.test-unreachable (param $A (ref null $A)) (drop ;; We should ignore unreachable ref.tests and not try to compare their ;; HeapTypes. (ref.test (unreachable) (rtt.canon $A) ) ) ) ;; CHECK: (func $consecutive-opts-with-unreachable (param $func funcref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (block (result dataref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $consecutive-opts-with-unreachable (type $funcref_=>_none) (param $func funcref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (block (result dataref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $consecutive-opts-with-unreachable (param $func funcref) (drop (ref.cast ;; Casting a funcref to data will definitely fail, so this will be ;; replaced with an unreachable. But it should be enclosed in a block of ;; the previous type, so that the outside ref.cast is not confused. This ;; is a regression test for a bug where we replace this node with an ;; unreachable one, but we left refinalize til the end of all the other ;; opts - and that meant that we got to our parent, the ref.cast, with ;; one unreachable child but before it itself was refinalized, so its ;; type was *not* unreachable yet, which meant it saw inconsistent IR ;; that then led to an assertion. (ref.as_data (local.get $func) ) (rtt.canon $struct) ) ) ) ;; CHECK: (func $ref-cast-static-null ;; CHECK-NEXT: (local $a (ref null $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $a ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-null (type $none_=>_none) ;; NOMNL-NEXT: (local $a (ref null $A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $B) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $B)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.null $A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $B) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.tee $a ;; NOMNL-NEXT: (ref.null $A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null $A) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-null (local $a (ref null $A)) ;; Casting nulls results in a null. (drop (ref.cast_static $A (ref.null $A) ) ) (drop (ref.cast_static $A (ref.null $B) ) ) (drop (ref.cast_static $B (ref.null $A) ) ) ;; A fallthrough works too. (drop (ref.cast_static $A (local.tee $a (ref.null $A) ) ) ) ) ;; CHECK: (func $ref-cast-static-impossible (param $func (ref func)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-impossible (type $ref|func|_=>_none) (param $func (ref func)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $struct)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-impossible (param $func (ref func)) ;; A func cannot be cast to a struct, so this will trap. (drop (ref.cast_static $struct (local.get $func) ) ) ) ;; CHECK: (func $ref-cast-static-general (param $a (ref null $A)) (param $b (ref null $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $a ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-general (type $ref?|$A|_ref?|$B|_=>_none) (param $a (ref null $A)) (param $b (ref null $B)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $a) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $b) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B ;; NOMNL-NEXT: (local.get $a) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.tee $a ;; NOMNL-NEXT: (local.get $a) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-general (param $a (ref null $A)) (param $b (ref null $B)) ;; In the general case, a static cast of something simply succeeds if the ;; type is a subtype. (drop (ref.cast_static $A (local.get $a) ) ) (drop (ref.cast_static $A (local.get $b) ) ) ;; This is the only one that we cannot know for sure will succeed. (drop (ref.cast_static $B (local.get $a) ) ) ;; A fallthrough works too. (drop (ref.cast_static $A (local.tee $a (local.get $a) ) ) ) ) ;; CHECK: (func $ref-cast-static-squared (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $A ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-squared (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $A ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-squared (param $x eqref) ;; Identical ref.casts can be folded together. (drop (ref.cast_static $A (ref.cast_static $A (local.get $x) ) ) ) ;; When subtypes exist, we only need the stricter one. (drop (ref.cast_static $A (ref.cast_static $B (local.get $x) ) ) ) (drop (ref.cast_static $B (ref.cast_static $A (local.get $x) ) ) ) ) ;; CHECK: (func $ref-cast-static-many (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B-child ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B-child ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B-child ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B-child ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B-child ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B-child ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-many (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B-child ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B-child ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B-child ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B-child ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B-child ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B-child ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-many (param $x eqref) ;; We should optimize a long sequence of static casts when we can. All six ;; orderings of these casts should collapse into the strictest one. (drop (ref.cast_static $A (ref.cast_static $B (ref.cast_static $B-child (local.get $x) ) ) ) ) (drop (ref.cast_static $A (ref.cast_static $B-child (ref.cast_static $B (local.get $x) ) ) ) ) (drop (ref.cast_static $B (ref.cast_static $A (ref.cast_static $B-child (local.get $x) ) ) ) ) (drop (ref.cast_static $B (ref.cast_static $B-child (ref.cast_static $A (local.get $x) ) ) ) ) (drop (ref.cast_static $B-child (ref.cast_static $A (ref.cast_static $B (local.get $x) ) ) ) ) (drop (ref.cast_static $B-child (ref.cast_static $B (ref.cast_static $A (local.get $x) ) ) ) ) ) ;; CHECK: (func $ref-cast-static-very-many (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B-child ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-very-many (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B-child ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-very-many (param $x eqref) ;; We should optimize an arbitrarily-long long sequence of static casts. (drop (ref.cast_static $A (ref.cast_static $B (ref.cast_static $B-child (ref.cast_static $A (ref.cast_static $A (ref.cast_static $B-child (ref.cast_static $B-child (ref.cast_static $B (ref.cast_static $B (ref.cast_static $B (ref.cast_static $B-child (ref.cast_static $A (local.get $x) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ;; CHECK: (func $ref-cast-static-fallthrough-remaining (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref null $B)) ;; CHECK-NEXT: (call $ref-cast-static-fallthrough-remaining ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.cast_static $B ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-fallthrough-remaining (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref null $B)) ;; NOMNL-NEXT: (call $ref-cast-static-fallthrough-remaining ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.cast_static $B ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-fallthrough-remaining (param $x eqref) (drop (ref.cast_static $A (block (result (ref null $B)) ;; Additional contents in between redundant casts must be preserved. ;; That is, when we see that the casts are redundant, by seeing that ;; the fallthrough value reaching the outer cast is already cast, we ;; can avoid a duplicate cast, but we do still need to keep any code ;; in the middle, as it may have side effects. ;; ;; In this first testcase, the outer cast is not needed as the inside ;; is already a more specific type. (call $ref-cast-static-fallthrough-remaining (local.get $x) ) (ref.cast_static $B (local.get $x) ) ) ) ) ) ;; CHECK: (func $ref-cast-static-fallthrough-remaining-child (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $B ;; CHECK-NEXT: (block (result eqref) ;; CHECK-NEXT: (call $ref-cast-static-fallthrough-remaining-child ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.cast_static $A ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-fallthrough-remaining-child (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $B ;; NOMNL-NEXT: (block (result eqref) ;; NOMNL-NEXT: (call $ref-cast-static-fallthrough-remaining-child ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.cast_static $A ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-fallthrough-remaining-child (param $x eqref) (drop ;; As above, but with $A and $B flipped. Now the inner cast is not needed. ;; However, we do not remove it, as it may be necessary for validation, ;; and we hope other opts help out here. (ref.cast_static $B (block (result (eqref)) (call $ref-cast-static-fallthrough-remaining-child (local.get $x) ) (ref.cast_static $A (local.get $x) ) ) ) ) ) ;; CHECK: (func $ref-cast-static-fallthrough-remaining-impossible (param $x (ref eq)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $array)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref eq)) ;; CHECK-NEXT: (call $ref-cast-static-fallthrough-remaining-impossible ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.cast_static $struct ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-fallthrough-remaining-impossible (type $ref|eq|_=>_none) (param $x (ref eq)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $array)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref eq)) ;; NOMNL-NEXT: (call $ref-cast-static-fallthrough-remaining-impossible ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.cast_static $struct ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-fallthrough-remaining-impossible (param $x (ref eq)) (drop ;; As above, but with an impossible cast of an array to a struct. The ;; block with the side effects and the inner cast must be kept around and ;; dropped, and then we replace the outer cast with an unreachable. (ref.cast_static $array (block (result (ref eq)) (call $ref-cast-static-fallthrough-remaining-impossible (local.get $x) ) (ref.cast_static $struct (local.get $x) ) ) ) ) ) ;; CHECK: (func $ref-cast-static-fallthrough-remaining-nonnull (param $x (ref eq)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $A ;; CHECK-NEXT: (block (result (ref eq)) ;; CHECK-NEXT: (call $ref-cast-static-fallthrough-remaining ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.cast_static $B ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-fallthrough-remaining-nonnull (type $ref|eq|_=>_none) (param $x (ref eq)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $A ;; NOMNL-NEXT: (block (result (ref eq)) ;; NOMNL-NEXT: (call $ref-cast-static-fallthrough-remaining ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.cast_static $B ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-fallthrough-remaining-nonnull (param $x (ref eq)) ;; The input is non-nullable here, and the middle block is of a simpler ;; type than either the parent or the child. This checks that we do not ;; mis-optimize this case: In general the outer cast is not needed, but ;; the middle block prevents us from seeing that (after other opts run, ;; however, we would). (drop (ref.cast_static $A (block (result (ref eq)) (call $ref-cast-static-fallthrough-remaining (local.get $x) ) (ref.cast_static $B (local.get $x) ) ) ) ) ) ;; CHECK: (func $ref-cast-static-squared-impossible (param $x eqref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast_static $struct ;; CHECK-NEXT: (ref.cast_static $array ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (ref.cast_static $array ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-cast-static-squared-impossible (type $eqref_=>_none) (param $x eqref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast_static $struct ;; NOMNL-NEXT: (ref.cast_static $array ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result (ref $struct)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (ref.cast_static $array ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-cast-static-squared-impossible (param $x eqref) ;; Impossible casts will trap unless the input is null. (drop (ref.cast_static $struct (ref.cast_static $array (local.get $x) ) ) ) (drop (ref.cast_static $struct (ref.cast_static $array (ref.as_non_null (local.get $x)) ) ) ) ) ;; CHECK: (func $ref-test-static-same-type (param $nullable (ref null $A)) (param $non-nullable (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.test_static $A ;; CHECK-NEXT: (local.get $nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $non-nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-test-static-same-type (type $ref?|$A|_ref|$A|_=>_none) (param $nullable (ref null $A)) (param $non-nullable (ref $A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.test_static $A ;; NOMNL-NEXT: (local.get $nullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $non-nullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-test-static-same-type (param $nullable (ref null $A)) (param $non-nullable (ref $A)) ;; A nullable value cannot be optimized here even though it is the same ;; type. (drop (ref.test_static $A (local.get $nullable) ) ) ;; But if it is non-nullable, it must succeed. (drop (ref.test_static $A (local.get $non-nullable) ) ) ) ;; CHECK: (func $ref-test-static-subtype (param $nullable (ref null $B)) (param $non-nullable (ref $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.test_static $A ;; CHECK-NEXT: (local.get $nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $non-nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-test-static-subtype (type $ref?|$B|_ref|$B|_=>_none) (param $nullable (ref null $B)) (param $non-nullable (ref $B)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.test_static $A ;; NOMNL-NEXT: (local.get $nullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $non-nullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-test-static-subtype (param $nullable (ref null $B)) (param $non-nullable (ref $B)) ;; As above, but the input is a subtype, so the same things happen. (drop (ref.test_static $A (local.get $nullable) ) ) (drop (ref.test_static $A (local.get $non-nullable) ) ) ) ;; CHECK: (func $ref-test-static-supertype (param $nullable (ref null $A)) (param $non-nullable (ref $A)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.test_static $B ;; CHECK-NEXT: (local.get $nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.test_static $B ;; CHECK-NEXT: (local.get $non-nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-test-static-supertype (type $ref?|$A|_ref|$A|_=>_none) (param $nullable (ref null $A)) (param $non-nullable (ref $A)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.test_static $B ;; NOMNL-NEXT: (local.get $nullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.test_static $B ;; NOMNL-NEXT: (local.get $non-nullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-test-static-supertype (param $nullable (ref null $A)) (param $non-nullable (ref $A)) ;; As above, but the input is a supertype. We can't know at compile time ;; what to do here. (drop (ref.test_static $B (local.get $nullable) ) ) (drop (ref.test_static $B (local.get $non-nullable) ) ) ) ;; CHECK: (func $ref-test-static-impossible (param $nullable (ref null $array)) (param $non-nullable (ref $array)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $non-nullable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-test-static-impossible (type $ref?|$array|_ref|$array|_=>_none) (param $nullable (ref null $array)) (param $non-nullable (ref $array)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $nullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block (result i32) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (local.get $non-nullable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-test-static-impossible (param $nullable (ref null $array)) (param $non-nullable (ref $array)) ;; Testing an impossible cast will definitely fail. (drop (ref.test_static $struct (local.get $nullable) ) ) (drop (ref.test_static $struct (local.get $non-nullable) ) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-ignore-traps.wast000066400000000000000000000521141423707623100277270ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --all-features --optimize-instructions --optimize-level=2 --ignore-implicit-traps -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (type $0 (func (param i32 i32) (result i32))) (type $0 (func (param i32 i32) (result i32))) ;; CHECK: (memory $0 0) (memory $0 0) ;; CHECK: (func $conditionals (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in6 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in6 ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 27000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $conditionals (type $0) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local.set $0 (i32.const 0) ) (loop $while-in (local.set $3 (i32.const 0) ) (loop $while-in6 (local.set $6 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $0 (if (result i32) (i32.or ;; this or is very expensive. we should compute one side, then see if we even need the other (i32.eqz (i32.rem_s (i32.add (i32.mul (local.tee $7 ;; side effect, so we can't do this one (i32.add (local.get $0) (i32.const 2) ) ) (local.get $0) ) (i32.const 17) ) (i32.const 5) ) ) (i32.eqz (i32.rem_u (i32.add (i32.mul (local.get $0) (local.get $0) ) (i32.const 11) ) (i32.const 3) ) ) ) (local.get $7) (local.get $6) ) ) (br_if $while-in6 (i32.lt_s (local.tee $3 (i32.add (local.get $3) (i32.const 1) ) ) (local.get $4) ) ) ) (br_if $while-in (i32.ne (local.tee $1 (i32.add (local.get $1) (i32.const 1) ) ) (i32.const 27000) ) ) ) (return (local.get $5) ) ) ;; CHECK: (func $side-effect (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in6 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in6 ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 27000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effect (type $0) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local.set $0 (i32.const 0) ) (loop $while-in (local.set $3 (i32.const 0) ) (loop $while-in6 (local.set $6 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $0 (if (result i32) (i32.or ;; this or is very expensive, but has a side effect on both sides (i32.eqz (i32.rem_s (i32.add (i32.mul (local.tee $7 (i32.add (local.get $0) (i32.const 0) ) ) (local.get $0) ) (i32.const 17) ) (i32.const 5) ) ) (i32.eqz (i32.rem_u (i32.add (i32.mul (local.get $0) (local.get $0) ) (unreachable) ) (i32.const 3) ) ) ) (local.get $7) (local.get $6) ) ) (br_if $while-in6 (i32.lt_s (local.tee $3 (i32.add (local.get $3) (i32.const 1) ) ) (local.get $4) ) ) ) (br_if $while-in (i32.ne (local.tee $1 (i32.add (local.get $1) (i32.const 1) ) ) (i32.const 27000) ) ) ) (return (local.get $5) ) ) ;; CHECK: (func $flip (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (local $4 i32) ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (local $6 i32) ;; CHECK-NEXT: (local $7 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in6 ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in6 ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 27000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $flip (type $0) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local.set $0 (i32.const 0) ) (loop $while-in (local.set $3 (i32.const 0) ) (loop $while-in6 (local.set $6 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $0 (if (result i32) (i32.or ;; this or is very expensive, and the first side has no side effect (i32.eqz (i32.rem_s (i32.add (i32.mul (i32.eqz (i32.add (local.get $0) (i32.const 0) ) ) (local.get $0) ) (i32.const 17) ) (i32.const 5) ) ) (i32.eqz (i32.rem_u (i32.add (i32.mul (local.get $0) (local.get $0) ) (i32.const 100) ) (i32.const 3) ) ) ) (local.get $7) (local.get $6) ) ) (br_if $while-in6 (i32.lt_s (local.tee $3 (i32.add (local.get $3) (i32.const 1) ) ) (local.get $4) ) ) ) (br_if $while-in (i32.ne (local.tee $1 (i32.add (local.get $1) (i32.const 1) ) ) (i32.const 27000) ) ) ) (return (local.get $5) ) ) ;; CHECK: (func $invalidate-conditionalizeExpensiveOnBitwise (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $invalidate-conditionalizeExpensiveOnBitwise (param $0 i32) (param $1 i32) (result i32) (if (i32.eqz (i32.and (i32.lt_s (i32.and (i32.shr_s (i32.shl (i32.add (local.get $1) ;; conflict with tee (i32.const -1) ) (i32.const 24) ) (i32.const 24) ) (i32.const 255) ) (i32.const 3) ) (i32.ne (local.tee $1 (i32.const 0) ) (i32.const 0) ) ) ) (return (local.get $0)) ) (return (local.get $1)) ) ;; CHECK: (func $invalidate-conditionalizeExpensiveOnBitwise-ok (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $invalidate-conditionalizeExpensiveOnBitwise-ok (param $0 i32) (param $1 i32) (result i32) (if (i32.eqz (i32.and (i32.lt_s (i32.and (i32.shr_s (i32.shl (i32.add (local.get $0) ;; no conflict (i32.const -1) ) (i32.const 24) ) (i32.const 24) ) (i32.const 255) ) (i32.const 3) ) (i32.ne (local.tee $1 (i32.const 0) ) (i32.const 0) ) ) ) (return (local.get $0)) ) (return (local.get $1)) ) ;; CHECK: (func $conditionalize-if-type-change (result f64) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (loop $label$1 (result f32) ;; CHECK-NEXT: (block $label$2 (result f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $label$3 (result f32) ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (f32.gt ;; CHECK-NEXT: (br_if $label$3 ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$2 ;; CHECK-NEXT: (f32.const 71) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i64.const 58) ;; CHECK-NEXT: (i64.const -982757) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.const -nan:0xfffffffffffff) ;; CHECK-NEXT: ) (func $conditionalize-if-type-change (result f64) (local $0 i32) (drop (loop $label$1 (result f32) (block $label$2 (result f32) (drop (block $label$3 (result f32) (br_if $label$1 (i32.or ;; this turns into an if, but then the if might not be unreachable (f32.gt (br_if $label$3 (f32.const 1) (local.get $0) ) (br $label$2 (f32.const 71) ) ) (i64.eqz (select (i64.const 58) (i64.const -982757) (i64.eqz (i64.const 0) ) ) ) ) ) ) ) (f32.const 1) ) ) ) (f64.const -nan:0xfffffffffffff) ) ;; CHECK: (func $optimize-bulk-memory-copy (param $dst i32) (param $src i32) (param $sz i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $sz) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $src) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-bulk-memory-copy (param $dst i32) (param $src i32) (param $sz i32) (memory.copy ;; nop (local.get $dst) (local.get $dst) (local.get $sz) ) (memory.copy ;; nop (local.get $dst) (local.get $src) (i32.const 0) ) ) ;; CHECK: (func $optimize-bulk-memory-fill (param $dst i32) (param $val i32) (param $sz i32) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $dst) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $val) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $sz) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-bulk-memory-fill (param $dst i32) (param $val i32) (param $sz i32) (memory.fill ;; drops (local.get $dst) (i32.const 0) (i32.const 0) ) (memory.fill ;; drops (local.get $dst) (local.get $val) (i32.const 0) ) (memory.fill ;; skip (i32.const 0) (i32.const 0) (local.get $sz) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-iit-eh.wast000066400000000000000000000037311423707623100264750ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --ignore-implicit-traps --optimize-instructions -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (type $struct.A (struct (field i32))) (type $struct.A (struct i32)) ;; CHECK: (global $g-struct.A (rtt $struct.A) (rtt.canon $struct.A)) ;; CHECK: (tag $e (param (ref null $struct.A))) (tag $e (param (ref null $struct.A))) (global $g-struct.A (rtt $struct.A) (rtt.canon $struct.A)) ;; CHECK: (func $ref-cast-statically-removed ;; CHECK-NEXT: (local $0 (ref null $struct.A)) ;; CHECK-NEXT: (local $1 (ref null $struct.A)) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (pop (ref null $struct.A)) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (block (result (ref null $struct.A)) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $g-struct.A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ref-cast-statically-removed (try (do) (catch $e (throw $e ;; Because --ignore-implicit-traps is given, this ref.cast is assumed ;; not to throw so this ref.cast can be statically removed. But that ;; creates a block around this, making 'pop' nested into it, which is ;; invalid. We fix this up at the end up OptimizeInstruction, ;; assigning the 'pop' to a local at the start of this 'catch' body ;; and later using 'local.get' to get it. (ref.cast (pop (ref null $struct.A)) (global.get $g-struct.A) ) ) ) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-multivalue.wast000066400000000000000000000040031423707623100274760ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-instructions --enable-multivalue -S -o - | filecheck %s (module ;; CHECK: (func $if-identical-arms-tuple (param $x i32) (result i32) ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (if (result i32 i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-identical-arms-tuple (param $x i32) (result i32) (if (result i32) (local.get $x) ;; The tuple.extract can be hoisted out. (tuple.extract 0 (tuple.make (i32.const 0) (i32.const 1) ) ) (tuple.extract 0 (tuple.make (i32.const 2) (i32.const 3) ) ) ) ) ;; CHECK: (func $select-identical-arms-tuple (param $x i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-identical-arms-tuple (param $x i32) (result i32) (select ;; The tuple.extract cannot be hoisted out, as the spec disallows a ;; select with multiple values in its arms. (tuple.extract 0 (tuple.make (i32.const 0) (i32.const 1) ) ) (tuple.extract 0 (tuple.make (i32.const 2) (i32.const 3) ) ) (local.get $x) ) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-sign-ext.wast000066400000000000000000000042511423707623100270520ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-instructions --enable-sign-ext -S -o - | filecheck %s (module ;; CHECK: (func $duplicate-elimination (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.extend8_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.extend16_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $duplicate-elimination (param $x i32) (drop (i32.extend8_s (i32.extend8_s (local.get $x)))) (drop (i32.extend16_s (i32.extend16_s (local.get $x)))) ) ;; i64(x) << 56 >> 56 ==> i64.extend8_s(x) ;; i64(x) << 48 >> 48 ==> i64.extend16_s(x) ;; i64(x) << 32 >> 32 ==> i64.extend32_s(x) ;; i64.extend_i32_s(i32.wrap_i64(x)) ==> i64.extend32_s(x) ;; CHECK: (func $i64-sign-extentions (param $x i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend8_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend16_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend32_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shr_s ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend32_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $i64-sign-extentions (param $x i64) (drop (i64.shr_s (i64.shl (local.get $x) (i64.const 56)) (i64.const 56))) (drop (i64.shr_s (i64.shl (local.get $x) (i64.const 48)) (i64.const 48))) (drop (i64.shr_s (i64.shl (local.get $x) (i64.const 32)) (i64.const 32))) (drop (i64.shr_s (i64.shl (local.get $x) (i64.const 16)) (i64.const 16))) ;; skip (drop (i64.extend_i32_s (i32.wrap_i64 (local.get $x)))) ) ) binaryen-version_108/test/lit/passes/optimize-instructions-typed-function-references.wast000066400000000000000000000014241423707623100324020ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-instructions --enable-reference-types \ ;; RUN: --enable-typed-function-references -S -o - | filecheck %s (module ;; CHECK: (type $i32-i32 (func (param i32) (result i32))) (type $i32-i32 (func (param i32) (result i32))) ;; this function has a reference parameter. we analyze parameters, and should ;; not be confused by a type that has no bit size, in particular. this test ;; just verifies that we do not crash on that. ;; CHECK: (func $call_from-param (param $f (ref null $i32-i32)) (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $call_from-param (param $f (ref null $i32-i32)) (result i32) (unreachable) ) ) binaryen-version_108/test/lit/passes/optimize-instructions.wast000066400000000000000000012346351423707623100253320ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --optimize-instructions -S -o - | filecheck %s (module (memory 0) ;; CHECK: (type $0 (func (param i32 i64))) (type $0 (func (param i32 i64))) ;; CHECK: (func $and-and (param $i1 i32) (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $and-and (param $i1 i32) (result i32) (i32.and (i32.and (local.get $i1) (i32.const 5) ) (i32.const 3) ) ) ;; CHECK: (func $or-or (param $i1 i32) (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $or-or (param $i1 i32) (result i32) (i32.or (i32.or (local.get $i1) (i32.const 1) ) (i32.const 2) ) ) ;; CHECK: (func $xor-xor (param $i1 i32) (result i32) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $xor-xor (param $i1 i32) (result i32) (i32.xor (i32.xor (local.get $i1) (i32.const -2) ) (i32.const -5) ) ) ;; CHECK: (func $mul-mul (param $i1 i32) (result i32) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: (i32.const -10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $mul-mul (param $i1 i32) (result i32) (i32.mul (i32.mul (local.get $i1) (i32.const -2) ) (i32.const 5) ) ) ;; overflow also valid ;; CHECK: (func $mul-mul-overflow (param $i1 i32) (result i32) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: (i32.const -133169153) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $mul-mul-overflow (param $i1 i32) (result i32) (i32.mul (i32.mul (local.get $i1) (i32.const 0xfffff) ) (i32.const 0x8000001) ) ) ;; CHECK: (func $if-eqz-one-arm (param $i1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-eqz-one-arm (param $i1 i32) (if (i32.eqz (local.get $i1) ) (drop (i32.const 10) ) ) ) ;; CHECK: (func $if-eqz-two-arms (param $i1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-eqz-two-arms (param $i1 i32) (if (i32.eqz (local.get $i1) ) (drop (i32.const 11) ) (drop (i32.const 12) ) ) ) ;; CHECK: (func $if-eqz-two-arms-i64 (param $i2 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $i2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-eqz-two-arms-i64 (param $i2 i64) (if (i64.eqz (local.get $i2) ) (drop (i32.const 11) ) (drop (i32.const 12) ) ) ) ;; CHECK: (func $eqz-gt_s (result i32) ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-gt_s (result i32) (i32.eqz (i32.gt_s (i32.const 1) (i32.const 2) ) ) ) ;; CHECK: (func $eqz-ge_s (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-ge_s (result i32) (i32.eqz (i32.ge_s (i32.const 1) (i32.const 2) ) ) ) ;; CHECK: (func $eqz-lt_s (result i32) ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-lt_s (result i32) (i32.eqz (i32.lt_s (i32.const 1) (i32.const 2) ) ) ) ;; CHECK: (func $eqz-le_s (result i32) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-le_s (result i32) (i32.eqz (i32.le_s (i32.const 1) (i32.const 2) ) ) ) ;; CHECK: (func $eqz-gt_u (result i32) ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-gt_u (result i32) (i32.eqz (i32.gt_u (i32.const 1) (i32.const 2) ) ) ) ;; CHECK: (func $eqz-ge_u (result i32) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-ge_u (result i32) (i32.eqz (i32.ge_u (i32.const 1) (i32.const 2) ) ) ) ;; CHECK: (func $eqz-lt_u (result i32) ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-lt_u (result i32) (i32.eqz (i32.lt_u (i32.const 1) (i32.const 2) ) ) ) ;; CHECK: (func $eqz-le_u (result i32) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-le_u (result i32) (i32.eqz (i32.le_u (i32.const 1) (i32.const 2) ) ) ) ;; CHECK: (func $eqz-gt (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (f32.gt ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-gt (result i32) (i32.eqz (f32.gt (f32.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $eqz-ge (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (f32.ge ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-ge (result i32) (i32.eqz (f32.ge (f32.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $eqz-lt (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (f32.lt ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-lt (result i32) (i32.eqz (f32.lt (f32.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $eqz-le (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (f32.le ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-le (result i32) (i32.eqz (f32.le (f32.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $eqz-gt-f64 (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (f64.gt ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-gt-f64 (result i32) (i32.eqz (f64.gt (f64.const 1) (f64.const 2) ) ) ) ;; CHECK: (func $eqz-ge-f64 (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (f64.ge ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-ge-f64 (result i32) (i32.eqz (f64.ge (f64.const 1) (f64.const 2) ) ) ) ;; CHECK: (func $eqz-lt-f64 (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (f64.lt ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-lt-f64 (result i32) (i32.eqz (f64.lt (f64.const 1) (f64.const 2) ) ) ) ;; CHECK: (func $eqz-le-f64 (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (f64.le ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-le-f64 (result i32) (i32.eqz (f64.le (f64.const 1) (f64.const 2) ) ) ) ;; CHECK: (func $eqz-eq (result i32) ;; CHECK-NEXT: (f32.ne ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-eq (result i32) (i32.eqz (f32.eq (f32.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $eqz-ne (result i32) ;; CHECK-NEXT: (f32.eq ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-ne (result i32) (i32.eqz (f32.ne (f32.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $eqz-eq-f64 (result i32) ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-eq-f64 (result i32) (i32.eqz (f64.eq (f64.const 1) (f64.const 2) ) ) ) ;; CHECK: (func $eqz-ne-f64 (result i32) ;; CHECK-NEXT: (f64.eq ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eqz-ne-f64 (result i32) (i32.eqz (f64.ne (f64.const 1) (f64.const 2) ) ) ) ;; we handle only 0 in the right position, as we assume a const is there, and ;; don't care about whether both are consts here (precompute does that, so no ;; need) ;; CHECK: (func $eq-zero-rhs (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-zero-rhs (result i32) (i32.eq (i32.const 100) (i32.const 0) ) ) ;; CHECK: (func $eq-zero-lhs (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-zero-lhs (result i32) (i32.eq (i32.const 0) (i32.const 100) ) ) ;; CHECK: (func $eq-zero-zero (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-zero-zero (result i32) (i32.eq (i32.const 0) (i32.const 0) ) ) ;; CHECK: (func $eq-zero-rhs-i64 (result i32) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-zero-rhs-i64 (result i32) (i64.eq (i64.const 100) (i64.const 0) ) ) ;; CHECK: (func $eq-zero-lhs-i64 (result i32) ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-zero-lhs-i64 (result i32) (i64.eq (i64.const 0) (i64.const 100) ) ) ;; CHECK: (func $eq-zero-zero-i64 (result i32) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-zero-zero-i64 (result i32) (i64.eq (i64.const 0) (i64.const 0) ) ) ;; CHECK: (func $if-eqz-eqz ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-eqz-eqz (if (i32.eqz (i32.eqz (i32.const 123) ) ) (nop) ) ) ;; CHECK: (func $select-eqz (param $i1 i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: (i32.const 101) ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-eqz (param $i1 i32) (result i32) (select (i32.const 101) (i32.const 102) (i32.eqz (local.get $i1) ) ) ) ;; CHECK: (func $select-eqz-noreorder (param $i1 i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $i1 ;; CHECK-NEXT: (i32.const 103) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $i1 ;; CHECK-NEXT: (i32.const 104) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-eqz-noreorder (param $i1 i32) (result i32) (select (local.tee $i1 (i32.const 103) ) ;; these conflict (local.tee $i1 (i32.const 104) ) (i32.eqz (local.get $i1) ) ) ) ;; CHECK: (func $select-eqz-eqz (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $select-eqz-eqz (result i32) (select (i32.const 0) (i32.const 1) (i32.eqz (i32.eqz (i32.const 2) ) ) ) ) ;; CHECK: (func $select-sign-32-lt (param $x i32) (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-sign-32-lt (param $x i32) (result i32) (select (i32.const -1) (i32.const 1) (i32.lt_s (local.get $x) (i32.const 0) ) ) ) ;; CHECK: (func $select-sign-32-ge (param $x i32) (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-sign-32-ge (param $x i32) (result i32) (select (i32.const 1) (i32.const -1) (i32.ge_s (local.get $x) (i32.const 0) ) ) ) ;; CHECK: (func $select-sign-64-lt (param $x i64) (result i64) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.shr_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-sign-64-lt (param $x i64) (result i64) (select (i64.const -1) (i64.const 1) (i64.lt_s (local.get $x) (i64.const 0) ) ) ) ;; CHECK: (func $select-sign-64-ge (param $x i64) (result i64) ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (i64.shr_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-sign-64-ge (param $x i64) (result i64) (select (i64.const 1) (i64.const -1) (i64.ge_s (local.get $x) (i64.const 0) ) ) ) ;; CHECK: (func $select-sign-lt-skip-1 (param $x i32) (result i64) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-sign-lt-skip-1 (param $x i32) (result i64) (select (i64.const -1) (i64.const 1) (i32.lt_s (local.get $x) (i32.const 0) ) ) ) ;; CHECK: (func $select-sign-lt-skip-2 (param $x i64) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-sign-lt-skip-2 (param $x i64) (result i32) (select (i32.const -1) (i32.const 1) (i64.lt_s (local.get $x) (i64.const 0) ) ) ) ;; CHECK: (func $select-or (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-or (param $x i32) (param $y i32) (result i32) (select (i32.const 1) (i32.eq (local.get $y) (i32.const 1337) ) (i32.and (local.get $x) (i32.const 1) ) ) ) ;; CHECK: (func $select-or-side-effects (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (call $select-or-side-effects ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (call $select-or-side-effects ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-or-side-effects (param $x i32) (param $y i32) (result i32) ;; When there are side effects, the order of the operations must remain ;; correct. (select (i32.const 1) (i32.eq (call $select-or-side-effects (local.get $x) (local.get $y) ) (i32.const 1337) ) (i32.and (call $select-or-side-effects (local.get $y) (local.get $x) ) (i32.const 1) ) ) ) ;; CHECK: (func $select-or-no-bits (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-or-no-bits (param $x i32) (param $y i32) ;; The following cannot be optimized into an "or" operation due to maxBits ;; not being known to be 1. (drop (select ;; Too many bits in ifTrue (i32.const 2) (i32.eq (local.get $y) (i32.const 1337) ) (i32.eq (local.get $x) (i32.const 42) ) ) ) (drop (select (i32.const 1) ;; Too many bits in ifFalse (local.get $y) (i32.eq (local.get $x) (i32.const 42) ) ) ) (drop (select (i32.const 1) (i32.eq (local.get $y) (i32.const 1337) ) ;; Too many bits in condition (local.get $x) ) ) ) ;; CHECK: (func $select-or-no-type (param $x i32) (param $y i64) (result i64) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-or-no-type (param $x i32) (param $y i64) (result i64) ;; An i64 result cannot be optimized into an "or" of the ifTrue and the ;; condition due to their types being different. (select (i64.const 1) (i64.and (local.get $y) (i64.const 1) ) (i32.and (local.get $x) (i32.const 1) ) ) ) ;; CHECK: (func $select-or-no-const (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-or-no-const (param $x i32) (param $y i32) (result i32) (select ;; The wrong const (should be 1). (i32.const 0) (i32.eq (local.get $y) (i32.const 1337) ) (i32.and (local.get $x) (i32.const 1) ) ) ) ;; CHECK: (func $select-and (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-and (param $x i32) (param $y i32) (result i32) (select (i32.eq (local.get $y) (i32.const 1337) ) (i32.const 0) (i32.eq (local.get $x) (i32.const 42) ) ) ) ;; CHECK: (func $select-and-no-const (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-and-no-const (param $x i32) (param $y i32) (result i32) (select (i32.eq (local.get $y) (i32.const 1337) ) ;; The wrong constant (should be 0). (i32.const 1) (i32.eq (local.get $x) (i32.const 42) ) ) ) ;; CHECK: (func $load8_s-and-255 (result i32) ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load8_s-and-255 (result i32) (i32.and (i32.load8_s (i32.const 0)) (i32.const 255)) ) ;; CHECK: (func $load8_u-and-255 (result i32) ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load8_u-and-255 (result i32) (i32.and (i32.load8_u (i32.const 1)) (i32.const 255)) ) ;; CHECK: (func $load8_s-and-254 (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 254) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load8_s-and-254 (result i32) (i32.and (i32.load8_s (i32.const 2)) (i32.const 254)) ) ;; CHECK: (func $load8_u-and-1 (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load8_u-and-1 (result i32) (i32.and (i32.load8_u (i32.const 3)) (i32.const 1)) ) ;; CHECK: (func $load16_s-and-65535 (result i32) ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load16_s-and-65535 (result i32) (i32.and (i32.load16_s (i32.const 4)) (i32.const 65535)) ) ;; CHECK: (func $load16_u-and-65535 (result i32) ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load16_u-and-65535 (result i32) (i32.and (i32.load16_u (i32.const 5)) (i32.const 65535)) ) ;; CHECK: (func $load16_s-and-65534 (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 65534) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load16_s-and-65534 (result i32) (i32.and (i32.load16_s (i32.const 6)) (i32.const 65534)) ) ;; CHECK: (func $load16_u-and-1 (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load16_u-and-1 (result i32) (i32.and (i32.load16_u (i32.const 7)) (i32.const 1)) ) ;; CHECK: (func $store8-and-255 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store8-and-255 (i32.store8 (i32.const 8) (i32.and (i32.const -1) (i32.const 255))) ) ;; CHECK: (func $store8-and-254 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: (i32.const 254) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store8-and-254 (i32.store8 (i32.const 9) (i32.and (i32.const -2) (i32.const 254))) ) ;; CHECK: (func $store16-and-65535 ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const -3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store16-and-65535 (i32.store16 (i32.const 10) (i32.and (i32.const -3) (i32.const 65535))) ) ;; CHECK: (func $store16-and-65534 ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: (i32.const 65534) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store16-and-65534 (i32.store16 (i32.const 11) (i32.and (i32.const -4) (i32.const 65534))) ) ;; CHECK: (func $store8-wrap ;; CHECK-NEXT: (i64.store8 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store8-wrap (i32.store8 (i32.const 11) (i32.wrap_i64 (i64.const 1))) ) ;; CHECK: (func $store16-wrap ;; CHECK-NEXT: (i64.store16 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store16-wrap (i32.store16 (i32.const 11) (i32.wrap_i64 (i64.const 2))) ) ;; CHECK: (func $store-wrap ;; CHECK-NEXT: (i64.store32 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-wrap (i32.store (i32.const 11) (i32.wrap_i64 (i64.const 3))) ) ;; CHECK: (func $store8-neg1 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store8-neg1 (i32.store8 (i32.const 7) (i32.const -1)) ;; 255 ) ;; CHECK: (func $store8-255 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store8-255 (i32.store8 (i32.const 8) (i32.const 255)) ) ;; CHECK: (func $store8-256 ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store8-256 (i32.store8 (i32.const 9) (i32.const 256)) ;; 0 ) ;; CHECK: (func $store16-neg1 ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store16-neg1 (i32.store16 (i32.const 13) (i32.const -1)) ;; 65535 ) ;; CHECK: (func $store16-65535 ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store16-65535 (i32.store16 (i32.const 10) (i32.const 65535)) ) ;; CHECK: (func $store16-65536 ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store16-65536 (i32.store16 (i32.const 11) (i32.const 65536)) ;; 0 ) ;; CHECK: (func $store-65536 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i32.const 65536) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-65536 (i32.store (i32.const 14) (i32.const 65536)) ) ;; CHECK: (func $store8-255-i64 ;; CHECK-NEXT: (i64.store8 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i64.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store8-255-i64 (i64.store8 (i32.const 8) (i64.const 255)) ) ;; CHECK: (func $store8-256-i64 ;; CHECK-NEXT: (i64.store8 ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store8-256-i64 (i64.store8 (i32.const 9) (i64.const 256)) ;; 0 ) ;; CHECK: (func $store16-65535-i64 ;; CHECK-NEXT: (i64.store16 ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i64.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store16-65535-i64 (i64.store16 (i32.const 10) (i64.const 65535)) ) ;; CHECK: (func $store16-65536-i64 ;; CHECK-NEXT: (i64.store16 ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store16-65536-i64 (i64.store16 (i32.const 11) (i64.const 65536)) ;; 0 ) ;; CHECK: (func $store32-4294967295 ;; CHECK-NEXT: (i64.store32 ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: (i64.const 4294967295) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store32-4294967295 (i64.store32 (i32.const 12) (i64.const 4294967295)) ) ;; CHECK: (func $store32-4294967296 ;; CHECK-NEXT: (i64.store32 ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store32-4294967296 (i64.store32 (i32.const 13) (i64.const 4294967296)) ;; 0 ) ;; CHECK: (func $store-4294967296 ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: (i64.const 4294967296) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-4294967296 (i64.store (i32.const 14) (i64.const 4294967296)) ) ;; CHECK: (func $and-neg1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $and-neg1 (drop (i32.and (i32.const 100) (i32.const -1))) (drop (i32.and (i32.const 100) (i32.const 1))) ) ;; CHECK: (func $and-pos1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 1000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 1000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.const 2000) ;; CHECK-NEXT: (i32.const 3000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $and-pos1 (drop (i32.and (i32.eqz (i32.const 1000)) (i32.const 1))) (drop (i32.and (i32.const 1) (i32.eqz (i32.const 1000)))) (drop (i32.and (i32.const 100) (i32.const 1))) (drop (i32.and (i32.lt_s (i32.const 2000) (i32.const 3000)) (i32.const 1))) ) ;; CHECK: (func $canonicalize-unreachable ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-unreachable (drop (i32.and (unreachable) (i32.const 1))) ;; ok to reorder (drop (i32.and (i32.const 1) (unreachable))) (drop (i32.div_s (unreachable) (i32.const 1))) ;; not ok (drop (i32.div_s (i32.const 1) (unreachable))) ) ;; CHECK: (func $canonicalize-consts-vars (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-consts-vars (param $x i32) (param $y i32) (drop (i32.and (i32.const 1) (i32.const 2))) (drop (i32.and (local.get $x) (i32.const 3))) (drop (i32.and (i32.const 4) (local.get $x))) (drop (i32.and (local.get $x) (local.get $y))) (drop (i32.and (local.get $y) (local.get $x))) (drop (i32.and (local.get $y) (local.tee $x (i32.const -4)))) ) ;; CHECK: (func $canonicalize-block-var (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (i32.const -5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (block $block0 (result i32) ;; CHECK-NEXT: (i32.const -6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-block-var (param $x i32) (drop (i32.and (block (result i32) (i32.const -5) ) (local.get $x) )) (drop (i32.and (local.get $x) (block (result i32) (i32.const -6) ) )) ) ;; CHECK: (func $canonicalize-block-loop ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loop-in (result i32) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (block $block2 (result i32) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loop-in1 (result i32) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (block $block4 (result i32) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loop-in3 (result i32) ;; CHECK-NEXT: (call $and-pos1) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (block $block6 (result i32) ;; CHECK-NEXT: (call $and-pos1) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loop-in5 (result i32) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (loop $loop-in7 (result i32) ;; CHECK-NEXT: (call $and-pos1) ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block8 (result i32) ;; CHECK-NEXT: (call $and-pos1) ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (block $block9 (result i32) ;; CHECK-NEXT: (call $and-pos1) ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loop-in10 (result i32) ;; CHECK-NEXT: (call $and-pos1) ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-block-loop (drop (i32.and (block (result i32) (i32.const 5) ) (loop (result i32) (i32.const 6) ) )) (drop (i32.and (loop (result i32) (i32.const 7) ) (block (result i32) (i32.const 8) ) )) (drop (i32.and (loop (result i32) (call $and-pos1) (i32.const 9) ) (block (result i32) (i32.const 10) ) )) (drop (i32.and (loop (result i32) (i32.const 11) ) (block (result i32) (call $and-pos1) (i32.const 12) ) )) (drop (i32.and (loop (result i32) (call $and-pos1) (i32.const 13) ) (block (result i32) (call $and-pos1) (i32.const 14) ) )) (drop (i32.and (block (result i32) (call $and-pos1) (i32.const 14) ) (loop (result i32) (call $and-pos1) (i32.const 13) ) )) ) ;; CHECK: (func $canonicalize-gt_s-gt-u ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: (i32.const 21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-gt_s-gt-u (drop (i32.and (i32.gt_s (i32.const 16) (i32.const 17) ) (i32.gt_u (i32.const 18) (i32.const 19) ) )) (drop (i32.and (i32.gt_u (i32.const 20) (i32.const 21) ) (i32.gt_s (i32.const 22) (i32.const 23) ) )) ) ;; CHECK: (func $canonicalize-cmp-near-zero (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-cmp-near-zero (param $x i32) ;; i32(x) > -1 ==> x >= 0 (drop (i32.gt_s (local.get $x) (i32.const -1) )) ;; i32(x) <= -1 ==> x < 0 (drop (i32.le_s (local.get $x) (i32.const -1) )) ;; -1 < i32(x) ==> x >= 0 (drop (i32.lt_s (i32.const -1) (local.get $x) )) ;; -1 >= i32(x) ==> x < 0 (drop (i32.ge_s (i32.const -1) (local.get $x) )) ;; i32(x) < 1 ==> x <= 0 (drop (i32.lt_s (local.get $x) (i32.const 1) )) ;; (signed)x >= 1 ==> x > 0 (drop (i32.ge_s (local.get $x) (i32.const 1) )) ;; u32(x) < 1 ==> x == 0 (drop (i32.lt_u (local.get $x) (i32.const 1) )) ;; u32(x) >= 1 ==> x != 0 (drop (i32.ge_u (local.get $x) (i32.const 1) )) ) ;; CHECK: (func $canonicalize-cmp-const (param $x i32) (param $fx f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.ne ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.gt ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f64.const -2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.le ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f64.const inf) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.ge ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f64.const nan:0x8000000000000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.ge ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-cmp-const (param $x i32) (param $fx f64) (drop (i32.gt_s (i32.const 1) (local.get $x) )) (drop (i32.gt_u (i32.const 0) (local.get $x) )) (drop (i32.ne (i32.const -1) (local.get $x) )) (drop (f64.ne (f64.const -1) (local.get $fx) )) (drop (f64.lt (f64.const -2) (local.get $fx) )) (drop (f64.ge (f64.const inf) (local.get $fx) )) (drop (f64.le (f64.const nan) (local.get $fx) )) ;; skip (drop (f64.ge (f64.const 1) (f64.const 2) )) ) ;; CHECK: (func $canonicalize-nested-vars (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-nested-vars (param $x i32) (param $y i32) (drop (i32.add (i32.ctz (local.get $x)) (i32.ctz (local.get $y)))) (drop (i32.add (i32.ctz (local.get $y)) (i32.ctz (local.get $x)))) ) ;; CHECK: (func $canonicalize-ctz-eqz (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $canonicalize-ctz-eqz (param $x i32) (param $y i32) (drop (i32.add (i32.ctz (local.get $x)) (i32.eqz (local.get $y)))) (drop (i32.add (i32.eqz (local.get $x)) (i32.ctz (local.get $y)))) ) ;; CHECK: (func $ne0 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $ne0 (result i32) (if (i32.ne (call $ne0) (i32.const 0)) (nop) ) (if (i32.ne (i32.const 0) (call $ne0)) (nop) ) ;; through an or (if (i32.or (i32.ne (i32.const 0) (call $ne0)) (i32.ne (i32.const 0) (call $ne0)) ) (nop) ) ;; but not an and (if (i32.and (i32.ne (i32.const 0) (call $ne0)) (i32.ne (i32.const 0) (call $ne0)) ) (nop) ) (i32.const 1) ) ;; CHECK: (func $recurse-bool ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (call $ne1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $recurse-bool (if (if (result i32) (i32.const 1) (i32.ne (call $ne0) (i32.const 0)) (i32.ne (call $ne1) (i32.const 0)) ) (nop) ) (if (block (result i32) (nop) (i32.ne (call $ne0) (i32.const 0)) ) (nop) ) ) ;; CHECK: (func $ne1 (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $ne1 (result i32) (unreachable) ) ;; CHECK: (func $store-off-2-add-consts (param $0 i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-off-2-add-consts (param $0 i32) (i32.store offset=2 (i32.add (i32.const 1) (i32.const 3) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const 3) (i32.const 1) ) (local.get $0) ) ) ;; CHECK: (func $store-off-2-add-var-const (param $0 i32) ;; CHECK-NEXT: (i32.store offset=2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-off-2-add-var-const (param $0 i32) (i32.store offset=2 (i32.add (local.get $0) (i32.const 5) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const 7) (local.get $0) ) (local.get $0) ) ) ;; CHECK: (func $store-off-2-add-var-negative-const (param $0 i32) ;; CHECK-NEXT: (i32.store offset=2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-off-2-add-var-negative-const (param $0 i32) (i32.store offset=2 (i32.add (i32.const -11) ;; do not fold this! (local.get $0) ) (local.get $0) ) (i32.store offset=2 (i32.add (local.get $0) (i32.const -13) ;; do not fold this! ) (local.get $0) ) ) ;; CHECK: (func $store-off-2-negative-const (param $0 i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=2 ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-off-2-negative-const (param $0 i32) (i32.store offset=2 (i32.add (i32.const -15) (i32.const 17) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -21) (i32.const 19) ) (local.get $0) ) ) ;; CHECK: (func $store-off-2-const (param $0 i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=2 ;; CHECK-NEXT: (i32.const -25) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-off-2-const (param $0 i32) (i32.store offset=2 (i32.const 23) (local.get $0) ) (i32.store offset=2 (i32.const -25) (local.get $0) ) ) ;; CHECK: (func $load-off-2 (param $0 i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load offset=2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $load-off-2 (param $0 i32) (result i32) (drop (i32.load offset=2 (i32.add (i32.const 2) (i32.const 4) ) ) ) (drop (i32.load offset=2 (i32.add (i32.const 4) (i32.const 2) ) ) ) (drop (i32.load offset=2 (i32.add (local.get $0) (i32.const 6) ) ) ) (drop (i32.load offset=2 (i32.const 8) ) ) (i32.load offset=2 (i32.add (i32.const 10) (local.get $0) ) ) ) ;; eq of sign-ext to const, can be a zext ;; CHECK: (func $eq-sext-24-zero (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-sext-24-zero (param $0 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 0) ) ) ;; CHECK: (func $eq-sext-16-zero (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-sext-16-zero (param $0 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 16) ) (i32.const 16) ) (i32.const 0) ) ) ;; CHECK: (func $eq-sext-5-zero (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 134217727) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-sext-5-zero (param $0 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 5) ;; weird size, but still valid ) (i32.const 5) ) (i32.const 0) ) ) ;; CHECK: (func $eq-sext-24-const (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-sext-24-const (param $0 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 100) ;; non-zero ) ) ;; CHECK: (func $eq-sext-24-big-positive-const (param $0 i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $eq-sext-24-big-positive-const (param $0 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 32767) ;; non-zero and bigger than the mask, with sign bit ) ) ;; CHECK: (func $eq-sext-24-negative-const (param $0 i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $eq-sext-24-negative-const (param $0 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const -149) ;; non-zero and bigger than the mask, without sign bit ) ) ;; eq of two sign-ext, can both be a zext ;; CHECK: (func $eq-sext-sext-24 (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-sext-sext-24 (param $0 i32) (param $1 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.shr_s (i32.shl (local.get $1) (i32.const 24) ) (i32.const 24) ) ) ) ;; CHECK: (func $eq-sext-sext-16 (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-sext-sext-16 (param $0 i32) (param $1 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 16) ) (i32.const 16) ) (i32.shr_s (i32.shl (local.get $1) (i32.const 16) ) (i32.const 16) ) ) ) ;; corner cases we should not opt ;; CHECK: (func $eq-sext-smaller-shr (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-sext-smaller-shr (param $0 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 23) ;; different shift, smaller ) (i32.const 0) ) ) ;; CHECK: (func $eq-sext-unsigned-shr (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eq-sext-unsigned-shr (param $0 i32) (result i32) (i32.eq (i32.shr_u ;; unsigned (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 0) ) ) ;; CHECK: (func $lt_s-sext-zero (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $lt_s-sext-zero (param $0 i32) (result i32) (i32.lt_s ;; non-eq (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 0) ) ) ;; CHECK: (func $if-sext-unreachable (param $0 i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 111) ;; CHECK-NEXT: (i32.const 222) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-sext-unreachable (param $0 i32) (result i32) (if (result i32) (i32.shr_s (i32.shl (unreachable) ;; ignore an unreachable value (i32.const 16) ) (i32.const 16) ) (i32.const 111) (i32.const 222) ) ) ;; CHECK: (func $sext-24-100 (result i32) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) (func $sext-24-100 (result i32) (i32.shr_s (i32.shl (i32.const 100) ;; small! (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-127 (result i32) ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) (func $sext-24-127 (result i32) (i32.shr_s (i32.shl (i32.const 127) ;; just small enough (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-128 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-128 (result i32) (i32.shr_s (i32.shl (i32.const 128) ;; just too big (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-var (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-var (param $0 i32) (result i32) (i32.shr_s (i32.shl (local.get $0) ;; who knows... (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-unreachable (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-unreachable (result i32) (i32.shr_s (i32.shl (unreachable) ;; ignore (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-div (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-div (result i32) (i32.shr_s (i32.shl (i32.div_s ;; this could be optimizable in theory, but currently we don't look into adds etc. (i32.const 1) (i32.const 2) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-and-127-128 (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-and-127-128 (result i32) (i32.shr_s (i32.shl (i32.and ;; takes the min, here it is ok (i32.const 127) (i32.const 128) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-and-128-129 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: (i32.const 129) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-and-128-129 (result i32) (i32.shr_s (i32.shl (i32.and ;; takes the min, here it is not (i32.const 128) (i32.const 129) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-xor-127-126 (result i32) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: (i32.const 126) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-xor-127-126 (result i32) (i32.shr_s (i32.shl (i32.xor ;; takes the max, here it is ok (i32.const 127) (i32.const 126) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-xor-127-128 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-xor-127-128 (result i32) (i32.shr_s (i32.shl (i32.xor ;; takes the max, here it is not (i32.const 127) (i32.const 128) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-or-127-126 (result i32) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: (i32.const 126) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-or-127-126 (result i32) (i32.shr_s (i32.shl (i32.or ;; takes the max, here it is ok (i32.const 127) (i32.const 126) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-or-127-128 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-or-127-128 (result i32) (i32.shr_s (i32.shl (i32.or ;; takes the max, here it is not (i32.const 127) (i32.const 128) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shl-32-2 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.const 26) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shl-32-2 (result i32) (i32.shr_s (i32.shl (i32.shl ;; adds, here it is too much (i32.const 32) (i32.const 2) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shl-32-1 (result i32) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shl-32-1 (result i32) (i32.shr_s (i32.shl (i32.shl ;; adds, here it is ok (i32.const 32) (i32.const 1) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shl-32-35 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.const 27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shl-32-35 (result i32) (i32.shr_s (i32.shl (i32.shl ;; adds, here it is too much and "overflows" (i32.const 32) (i32.const 35) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_u-256-1 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_u-256-1 (result i32) (i32.shr_s (i32.shl (i32.shr_u ;; subtracts, here it is still too much (i32.const 256) (i32.const 1) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_u-256-2 (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_u-256-2 (result i32) (i32.shr_s (i32.shl (i32.shr_u ;; subtracts, here it is ok (i32.const 256) (i32.const 2) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_u-128-35 (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_u-128-35 (result i32) (i32.shr_s (i32.shl (i32.shr_u ;; subtracts, here it "overflows" (i32.const 128) (i32.const 35) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_s-256-1 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_s-256-1 (result i32) (i32.shr_s (i32.shl (i32.shr_s ;; subtracts, here it is still too much (i32.const 256) (i32.const 1) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_s-256-2 (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_s-256-2 (result i32) (i32.shr_s (i32.shl (i32.shr_s ;; subtracts, here it is ok (i32.const 256) (i32.const 2) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_s-128-35 (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_s-128-35 (result i32) (i32.shr_s (i32.shl (i32.shr_s ;; subtracts, here it "overflows" (i32.const 128) (i32.const 35) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_s-neg1-32 (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_s-neg1-32 (result i32) (i32.shr_s (i32.shl (i32.shr_s ;; subtracts, here there is a sign bit, so it stays 32 bits no matter how much we shift (i32.const -1) (i32.const 32) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_s-and-masked-sign (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_s-and-masked-sign (result i32) (i32.shr_s (i32.shl (i32.shr_s ;; subtracts, here we mask out that sign bit (i32.and (i32.const -1) (i32.const 2147483647) ) (i32.const 31) ;; adjusted after we fixed shift computation to just look at lower 5 bits ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-ne (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) (func $sext-24-ne (result i32) (i32.shr_s (i32.shl (i32.ne ;; 1 bit (i32.const -1) (i32.const -1) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-le (result i32) ;; CHECK-NEXT: (f32.le ;; CHECK-NEXT: (f32.const -1) ;; CHECK-NEXT: (f32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-le (result i32) (i32.shr_s (i32.shl (f32.le (f32.const -1) (f32.const -1) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-clz (result i32) ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-clz (result i32) (i32.shr_s (i32.shl (i32.clz ;; assumed 5 bits (i32.const 0) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shl-clz (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 26) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shl-clz (result i32) (i32.shr_s (i32.shl (i32.shl (i32.clz ;; assumed 5 bits (i32.const 0) ) (i32.const 2) ;; + 2, so 7 ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shl-clz-too-big (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 27) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shl-clz-too-big (result i32) (i32.shr_s (i32.shl (i32.shl (i32.clz ;; assumed 5 bits (i32.const 0) ) (i32.const 3) ;; + 3, so 8, too much ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-wrap-clz (result i32) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.clz ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-wrap-clz (result i32) (i32.shr_s (i32.shl (i32.wrap_i64 ;; preserves 6 (i64.clz ;; assumed 6 bits (i64.const 0) ) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shl-wrap-clz (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.clz ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shl-wrap-clz (result i32) (i32.shr_s (i32.shl (i32.shl (i32.wrap_i64 ;; preserves 6 (i64.clz ;; assumed 6 bits (i64.const 0) ) ) (i32.const 1) ;; + 1, so 7 ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shl-wrap-clz-too-big (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.clz ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 26) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shl-wrap-clz-too-big (result i32) (i32.shr_s (i32.shl (i32.shl (i32.wrap_i64 ;; preserves 6 (i64.clz ;; assumed 6 bits (i64.const 0) ) ) (i32.const 2) ;; + 2, so 8, too much ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-eqz (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-eqz (result i32) (i32.shr_s (i32.shl (i32.eqz ;; 1 bit (i32.const -1) ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_u-wrap-too-big (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_u-wrap-too-big (result i32) (i32.shr_s (i32.shl (i32.shr_u (i32.wrap_i64 ;; down to 32 (i64.const -1) ;; 64 ) (i32.const 24) ;; 32 - 24 = 8 ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_u-wrap (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_u-wrap (result i32) (i32.shr_s (i32.shl (i32.shr_u (i32.wrap_i64 ;; down to 32 (i64.const -1) ;; 64 ) (i32.const 25) ;; 32 - 25 = 7, ok ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_u-wrap-extend-too-big (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_u-wrap-extend-too-big (result i32) (i32.shr_s (i32.shl (i32.shr_u (i32.wrap_i64 ;; stay 32 (i64.extend_i32_s (i32.const -1) ) ) (i32.const 24) ;; 32 - 24 = 8 ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-shr_u-wrap-extend (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-shr_u-wrap-extend (result i32) (i32.shr_s (i32.shl (i32.shr_u (i32.wrap_i64 ;; stay 32 (i64.extend_i32_s (i32.const -1) ) ) (i32.const 25) ;; 32 - 25 = 7, ok ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $sext-24-xor (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sext-24-xor (param $0 i32) (result i32) ;; fuzz testcase (i32.shr_s (i32.shl (i32.xor ;; should be 32 bits (i32.le_u ;; 1 bit (local.get $0) (i32.const 2) ) (local.get $0) ;; unknown, so 32 bits ) (i32.const 24) ) (i32.const 24) ) ) ;; CHECK: (func $linear-sums (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 26) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 66) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 34) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $linear-sums (param $0 i32) (param $1 i32) (drop (i32.add (i32.add (local.get $1) (i32.const 16) ) (i32.shl (i32.add (local.get $0) (i32.const -1) ;; -16, so cancels out! ) (i32.const 4) ) ) ) (drop (i32.add (i32.add (local.get $1) (i32.const 20) ) (i32.shl (i32.add (local.get $0) (i32.const -1) ;; -8, so sum is +12 ) (i32.const 3) ) ) ) (drop (i32.add ;; simple sum (i32.const 1) (i32.const 3) ) ) (drop (i32.add ;; nested sum (i32.add (i32.const 1) (i32.const 3) ) (i32.add (i32.const 5) (i32.const 9) ) ) ) (drop (i32.add (i32.add (i32.const 1) (i32.const 3) ) (i32.sub ;; internal sub (i32.const 5) (i32.const 3) ) ) ) (drop (i32.sub ;; external sub (i32.add (i32.const 1) (i32.const 3) ) (i32.add (i32.const 5) (i32.const 3) ) ) ) (drop (i32.sub ;; external sub (i32.add (i32.const 1) (i32.const 3) ) (i32.sub ;; and also internal sub (i32.const 5) (i32.const 3) ) ) ) (drop (i32.add (i32.add (i32.const 1) (i32.const 3) ) (i32.sub ;; negating sub (i32.const 0) (i32.const 3) ) ) ) (drop (i32.add (i32.sub (i32.const 0) (i32.sub ;; two negating subs (i32.const 0) (i32.add (i32.const 3) (i32.const 20) ) ) ) (i32.add (i32.const 1) (i32.const 2) ) ) ) (drop (i32.add (i32.add (i32.const 0) (i32.sub ;; one negating sub (i32.const 0) (i32.add (i32.const 3) (i32.const 20) ) ) ) (i32.add (i32.const 1) (i32.const 2) ) ) ) (drop (i32.add (i32.shl ;; shifted value (i32.const 1) (i32.const 3) ) (i32.add (i32.const 5) (i32.const 9) ) ) ) (drop (i32.add (i32.shl ;; shifted value (i32.const 1) (local.get $0) ;; but not by const ) (i32.add (i32.const 5) (i32.const 9) ) ) ) (drop (i32.add (i32.shl ;; shifted nested value (i32.sub (local.get $1) (i32.const 10) ) (i32.const 3) ) (i32.add (i32.const 5) (i32.const 9) ) ) ) (drop (i32.add (i32.mul ;; multiplied (i32.const 10) (i32.const 3) ) (i32.add (i32.const 5) (i32.const 9) ) ) ) (drop (i32.add (i32.mul ;; multiplied by nonconstant - can't recurse (i32.const 10) (local.get $0) ) (i32.add (i32.const 5) (i32.const 9) ) ) ) (drop (i32.add (i32.mul ;; nested mul (i32.add (i32.const 10) (local.get $0) ) (i32.const 2) ) (i32.add (i32.const 5) (i32.const 9) ) ) ) (drop (i32.add (i32.add (local.get $0) (i32.const 10) ;; cancelled out with the below ) (i32.sub (i32.const -5) (i32.const 5) ) ) ) ) ;; CHECK: (func $almost-sign-ext (param $0 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 50) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $almost-sign-ext (param $0 i32) (drop (i32.shr_s (i32.shl (i32.const 100) ;; too big, there is a sign bit, due to the extra shift (i32.const 25) ) (i32.const 24) ;; different shift, but larger, so ok to opt if we leave a shift, in theory ) ) (drop (i32.shr_s (i32.shl (i32.const 50) ;; small enough, no sign bit (i32.const 25) ) (i32.const 24) ;; different shift, but larger, so ok to opt if we leave a shift ) ) ) ;; CHECK: (func $squaring (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 203) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $squaring (param $0 i32) (param $1 i32) (drop (i32.and (i32.and (local.get $0) (i32.const 11) ) (i32.const 200) ) ) (drop (i32.and (i32.and (local.get $0) (i32.const 11) ) (local.get $0) ;; non-const, cannot optimize this! ) ) (drop (i32.and (i32.and (i32.const 11) ;; flipped order (local.get $0) ) (i32.const 200) ) ) (drop (i32.or (i32.or (local.get $0) (i32.const 11) ) (i32.const 200) ) ) (drop (i32.shl (i32.shl (local.get $0) (i32.const 11) ) (i32.const 200) ) ) (drop (i32.shr_s (i32.shr_s (local.get $0) (i32.const 11) ) (i32.const 200) ) ) (drop (i32.shr_u (i32.shr_u (local.get $0) (i32.const 11) ) (i32.const 200) ) ) (drop (i32.shr_u (i32.shr_s ;; but do not optimize a mixture or different shifts! (local.get $0) (i32.const 11) ) (i32.const 200) ) ) ) ;; CHECK: (func $sign-ext-ne (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 111) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sign-ext-ne (param $0 i32) (param $1 i32) ;; ne of sign-ext to const, can be a zext (drop (i32.ne (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 65000) ) ) (drop (i32.ne (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 64872) ;; no sign bit ) ) (drop (i32.ne (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const -149) ;; no sign bit, not all ones ) ) (drop (i32.ne (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 111) ) ) (drop (i32.ne (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.shr_s (i32.shl (local.get $1) (i32.const 24) ) (i32.const 24) ) ) ) ) ;; CHECK: (func $sign-ext-eqz (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sign-ext-eqz (param $0 i32) (param $1 i32) (drop (i32.eqz (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) ) ) ) ;; CHECK: (func $sign-ext-boolean (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sign-ext-boolean (param $0 i32) (param $1 i32) (drop (if (result i32) (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 100) (i32.const 200) ) ) ) ;; CHECK: (func $add-sub-zero (param $0 i32) (param $1 i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $add-sub-zero (param $0 i32) (param $1 i64) (drop (i32.add (local.get $0) (i32.const 0) ) ) (drop (i32.sub (local.get $0) (i32.const 0) ) ) (drop (i64.add (local.get $1) (i64.const 0) ) ) (drop (i64.sub (local.get $1) (i64.const 0) ) ) ) ;; CHECK: (func $store-signext (param $0 i32) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store16 ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $store-signext (param $0 i32) (i32.store8 (i32.const 8) (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ;; exact size we store, sign-ext of 8 bits ) (i32.const 24) ) ) (i32.store8 (i32.const 8) (i32.shr_s (i32.shl (local.get $0) (i32.const 25) ;; 7 bits. so the ext can alter a bit we store, do not optimize ) (i32.const 25) ) ) (i32.store8 (i32.const 8) (i32.shr_s (i32.shl (local.get $0) (i32.const 23) ;; 9 bits, this is good to optimize ) (i32.const 23) ) ) (i32.store16 (i32.const 8) (i32.shr_s (i32.shl (local.get $0) (i32.const 16) ;; exact size we store, sign-ext of 16 bits ) (i32.const 16) ) ) (i32.store16 (i32.const 8) (i32.shr_s (i32.shl (local.get $0) (i32.const 17) ;; 15 bits. so the ext can alter a bit we store, do not optimize ) (i32.const 17) ) ) (i32.store16 (i32.const 8) (i32.shr_s (i32.shl (local.get $0) (i32.const 14) ;; 17 bits, this is good to optimize ) (i32.const 14) ) ) (i32.store (i32.const 8) (i32.shr_s (i32.shl (local.get $0) (i32.const 16) ;; 4 bytes stored, do nothing ) (i32.const 16) ) ) (i32.store (i32.const 8) (i32.shr_s (i32.shl (local.get $0) (i32.const 8) ;; 4 bytes stored, do nothing ) (i32.const 8) ) ) ) ;; CHECK: (func $sign-ext-tee (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sign-ext-tee (param $0 i32) (param $1 i32) (drop (i32.shr_s (i32.shl (local.tee $0 (i32.const 128) ;; too big ) (i32.const 24) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (local.tee $0 (i32.const 127) ;; just right ) (i32.const 24) ) (i32.const 24) ) ) ) ;; CHECK: (func $sign-ext-load (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sign-ext-load (param $0 i32) (param $1 i32) (drop (i32.shr_s (i32.shl (i32.load8_s ;; one byte, so perfect (i32.const 256) ) (i32.const 24) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (i32.shr_u (i32.load8_s ;; one byte, but sexted to 32 (i32.const 256) ) (i32.const 1) ) (i32.const 24) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (i32.shr_u (i32.load8_u ;; one byte, but reduced to 7 (i32.const 256) ) (i32.const 1) ) (i32.const 24) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (i32.load16_s ;; two, so perfect (i32.const 256) ) (i32.const 16) ) (i32.const 16) ) ) ;; through tees, we cannot alter the load sign (drop (i32.shr_s (i32.shl (local.tee $1 (i32.load8_s (i32.const 1) ) ) (i32.const 24) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (local.tee $1 (i32.load8_u (i32.const 1) ) ) (i32.const 24) ) (i32.const 24) ) ) (drop (i32.and (local.tee $1 (i32.load8_s (i32.const 1) ) ) (i32.const 255) ) ) (drop (i32.and (local.tee $1 (i32.load8_u (i32.const 1) ) ) (i32.const 255) ) ) ) ;; CHECK: (func $mask-bits (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 254) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1279) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1290) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $mask-bits (param $0 i32) (param $1 i32) (drop (i32.and (local.tee $0 (i32.const 127) ;; 7 bits ) (i32.const 255) ;; mask 8, so we don't need this ) ) (drop (i32.and (local.tee $0 (i32.const 128) ;; 8 bits ) (i32.const 255) ;; mask 8, so we don't need this ) ) (drop (i32.and (local.tee $0 (i32.const 128) ) (i32.const 254) ;; improper mask, small ) ) (drop (i32.and (local.tee $0 (i32.const 128) ) (i32.const 1279) ;; improper mask, large ) ) (drop (i32.and (local.tee $0 (i32.const 128) ) (i32.const 1290) ;; improper mask, large ) ) (drop (i32.and (local.tee $0 (i32.const 128) ) (i32.const 4095) ;; proper mask, huge ) ) (drop (i32.and (local.tee $0 (i32.const 128) ) (i32.const 511) ;; proper mask, large ) ) (drop (i32.and (local.tee $0 (i32.const 128) ) (i32.const 127) ;; proper mask, just too small ) ) ) ;; CHECK: (func $local-info-zero-ext (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $z i32) ;; CHECK-NEXT: (local $w i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 212) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 500) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 212) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 212) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 220) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (i32.const 212) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (i32.const 1000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-info-zero-ext (param $0 i32) (param $1 i32) (local $x i32) (local $y i32) (local $z i32) (local $w i32) (local.set $x (i32.const 212) ;; mask is unneeded, we are small ) (drop (i32.and (local.get $x) (i32.const 255) ) ) (local.set $y (i32.const 500) ;; mask is needed, we are too big ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (local.set $0 (i32.const 212) ;; mask is unneeded, but we are a param, not a var, so no ) (drop (i32.and (local.get $0) (i32.const 255) ) ) (local.set $z (i32.const 212) ;; mask is unneeded, we are small ) (local.set $z (i32.const 220) ;; mask is still unneeded even with 2 uses ) (drop (i32.and (local.get $z) (i32.const 255) ) ) (local.set $w (i32.const 212) ;; mask is unneeded, we are small ) (local.set $w (i32.const 1000) ;; mask is needed, one use is too big ) (drop (i32.and (local.get $w) (i32.const 255) ) ) ) ;; CHECK: (func $local-info-sign-ext-bitsize (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $z i32) ;; CHECK-NEXT: (local $w i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (i32.const 150) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-info-sign-ext-bitsize (param $0 i32) (param $1 i32) (local $x i32) (local $y i32) (local $z i32) (local $w i32) (local.set $x (i32.const 127) ;; mask is unneeded, we are small ) (drop (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) ) (local.set $y (i32.const 128) ;; mask is needed, we are too big ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) (local.set $0 (i32.const 127) ;; mask is unneeded, but we are a param, not a var, so no ) (drop (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) ) (local.set $z (i32.const 127) ;; mask is unneeded, we are small ) (local.set $z (i32.const 100) ;; mask is still unneeded even with 2 uses ) (drop (i32.shr_s (i32.shl (local.get $z) (i32.const 24) ) (i32.const 24) ) ) (local.set $w (i32.const 127) ;; mask is unneeded, we are small ) (local.set $w (i32.const 150) ;; mask is needed, one use is too big ) (drop (i32.shr_s (i32.shl (local.get $w) (i32.const 24) ) (i32.const 24) ) ) ) ;; CHECK: (func $local-info-sign-ext-already-exted (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $z i32) ;; CHECK-NEXT: (local $w i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $w ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-info-sign-ext-already-exted (param $0 i32) (param $1 i32) (local $x i32) (local $y i32) (local $z i32) (local $w i32) (local.set $x (i32.shr_s (i32.shl (local.get $0) ;; already sign-exted here, so no need later (i32.const 24) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) ) (local.set $y (i32.shr_s (i32.shl (local.get $0) ;; already sign-exted here, but wrong bit size (i32.const 16) ) (i32.const 16) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) (local.set $0 (i32.shr_s (i32.shl (local.get $0) ;; already sign-exted here, so no need later, but we are a param (i32.const 24) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) ) (local.set $z (i32.shr_s (i32.shl (local.get $0) ;; already sign-exted here, so no need later (i32.const 24) ) (i32.const 24) ) ) (local.set $z (i32.shr_s (i32.shl (local.get $1) ;; already sign-exted here, so no need later (i32.const 24) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (local.get $z) (i32.const 24) ) (i32.const 24) ) ) (local.set $w (i32.shr_s (i32.shl (local.get $0) ;; already sign-exted here, so no need later (i32.const 24) ) (i32.const 24) ) ) (local.set $w (i32.shr_s (i32.shl (local.get $0) ;; not quite a sign-ext (i32.const 23) ) (i32.const 24) ) ) (drop (i32.shr_s (i32.shl (local.get $w) (i32.const 24) ) (i32.const 24) ) ) (drop ;; odd corner case (i32.shr_s (i32.shl (local.get $0) ;; param, so we should know nothing (i32.const 24) ) (i32.const 23) ;; different shift, smaller ) ) ) ;; CHECK: (func $signed-loads-fill-the-bits (param $$e i32) (result i32) ;; CHECK-NEXT: (local $$0 i32) ;; CHECK-NEXT: (local $$conv i32) ;; CHECK-NEXT: (local.set $$0 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $$conv ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $$0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $$e) ;; CHECK-NEXT: (local.get $$conv) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $signed-loads-fill-the-bits (param $$e i32) (result i32) (local $$0 i32) (local $$conv i32) (local.set $$0 (i32.load8_s ;; one byte, but 32 bits due to sign-extend (i32.const 1024) ) ) (local.set $$conv (i32.and (local.get $$0) (i32.const 255) ;; so we need this zexting! ) ) (return (i32.eq (local.get $$conv) (local.get $$e) ) ) ) ;; CHECK: (func $local-info-sign-ext-already-exted-by-load (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (local $z i32) ;; CHECK-NEXT: (local $w i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $z ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (i32.const 1024) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-info-sign-ext-already-exted-by-load (param $0 i32) (param $1 i32) (local $x i32) (local $y i32) (local $z i32) (local $w i32) (local.set $x (i32.load8_s (i32.const 1024)) ;; 8 bits, sign extended, no need to do it again ) (drop (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) ) (local.set $y (i32.load8_u (i32.const 1024)) ;; 8 bits, zext, so bad ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) (local.set $z (i32.load16_s (i32.const 1024)) ;; 16 bits sign-extended, wrong size ) (drop (i32.shr_s (i32.shl (local.get $z) (i32.const 24) ) (i32.const 24) ) ) ) ;; CHECK: (func $compare-load-s-sign-extend (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $compare-load-s-sign-extend (param $0 i32) (param $1 i32) (drop (i32.eq (i32.load8_s (local.get $0) ) (i32.shr_s (i32.shl (local.get $1) (i32.const 24) ) (i32.const 24) ) ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $1) (i32.const 24) ) (i32.const 24) ) (i32.load8_s (local.get $0) ;; flip order, we should canonicalize ) ) ) (drop (i32.eq (i32.load8_u ;; unsigned, bad (local.get $0) ) (i32.shr_s (i32.shl (local.get $1) (i32.const 24) ) (i32.const 24) ) ) ) (drop (i32.eq (i32.load8_s (local.get $0) ) (i32.shr_s (i32.shl (local.get $1) (i32.const 16) ;; wrong size ) (i32.const 16) ) ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $1) (i32.const 24) ) (i32.const 24) ) (i32.load8_u ;; unsigned, bad (local.get $0) ) ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $1) (i32.const 16) ;; wrong size ) (i32.const 16) ) (i32.load8_s (local.get $0) ) ) ) ) ;; CHECK: (func $unsign-diff-sizes (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (call $unsign-diff-sizes ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (call $unsign-diff-sizes ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2006) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unsign-diff-sizes (param $x i32) (param $y i32) (result i32) (i32.ne (i32.shr_s (i32.shl (call $unsign-diff-sizes (i32.const -1) (i32.const 5) ) (i32.const 24) ) (i32.const 24) ) (i32.shr_s (i32.shl (call $unsign-diff-sizes (i32.const 1) (i32.const 2006) ) (i32.const 16) ) (i32.const 16) ) ) ) ;; CHECK: (func $unsign-same-sizes (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (call $unsign-same-sizes ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (call $unsign-same-sizes ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2006) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unsign-same-sizes (param $x i32) (param $y i32) (result i32) (i32.ne (i32.shr_s (i32.shl (call $unsign-same-sizes (i32.const -1) (i32.const 5) ) (i32.const 24) ) (i32.const 24) ) (i32.shr_s (i32.shl (call $unsign-same-sizes (i32.const 1) (i32.const 2006) ) (i32.const 24) ) (i32.const 24) ) ) ) ;; CHECK: (func $fuzz-almost-sign-ext ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 2278) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_u ;; CHECK-NEXT: (i32.const 2278) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fuzz-almost-sign-ext (drop (i32.shr_s (i32.shl (i32.load16_u (i32.const 2278) ) (i32.const 17) ) (i32.const 16) ) ) (drop (i32.shr_s (i32.shl (i32.shl (i32.load16_u (i32.const 2278) ) (i32.const 1) ) (i32.const 16) ) (i32.const 16) ) ) ) ;; CHECK: (func $fuzz-comp-impossible (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 252) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fuzz-comp-impossible (param $x i32) (drop (i32.eq (i32.shr_s (i32.shl (local.get $x) (i32.const 16) ) (i32.const 16) ) (i32.const 65535) ;; impossible to be equal, the effective sign bit is set, but not the higher bits, which the sign-ext will set on the non-const value ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) (i32.const 255) ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) (i32.const 127) ;; safe ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) (i32.const 128) ;; unsafe again ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) (i32.const 4223) ;; more big bits, so sign bit though ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) (i32.const 4224) ;; more big bits ) ) (drop (i32.eq (i32.shr_s (i32.shl (local.get $x) (i32.const 24) ) (i32.const 24) ) (i32.const -4) ;; safe even with more big bits, as they are all 1s ) ) ) ;; CHECK: (func $if-parallel (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-parallel (param $0 i32) (param $1 i32) (drop (if (result i32) (local.get $0) (i32.add (local.get $1) (i32.const 1)) (i32.add (local.get $1) (i32.const 1)) ) ) (drop (if (result i32) (local.tee $0 (local.get $1)) ;; side effects! (i32.add (local.get $1) (i32.const 1)) (i32.add (local.get $1) (i32.const 1)) ) ) (drop (if (result i32) (local.get $0) (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if (i32.add (local.get $1) (unreachable)) ) ) (drop (if (result i32) (local.tee $0 (local.get $1)) ;; side effects! (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if (i32.add (local.get $1) (unreachable)) ) ) (drop (if (result i32) (unreachable) ;; !!! (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if (i32.add (local.get $1) (unreachable)) ) ) ) ;; CHECK: (func $select-parallel (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-parallel (param $0 i32) (param $1 i32) (drop (select (i32.add (local.get $1) (i32.const 1)) (i32.add (local.get $1) (i32.const 1)) (local.get $0) ) ) (drop (select (local.tee $0 (local.get $1)) ;; side effects! (local.tee $0 (local.get $1)) ;; side effects! (local.get $0) ) ) (drop (select (i32.add (local.get $1) (i32.const 1)) (i32.add (local.get $1) (i32.const 1)) (local.tee $0 (local.get $1)) ;; side effects! (but no interference with values) ) ) (drop (select (local.tee $0 (local.get $1)) ;; side effects! interference! (local.tee $0 (local.get $1)) ;; side effects! interference! (local.tee $0 (local.get $1)) ;; side effects! interference! ) ) (drop (select (local.tee $0 (local.get $1)) ;; side effects! (local.tee $0 (local.get $1)) ;; side effects! (unreachable) ;; side effects! (but no interference with values) ) ) ) ;; CHECK: (func $zero-shifts-is-not-sign-ext ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load16_s align=1 ;; CHECK-NEXT: (i32.const 790656516) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -5431187) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.load16_s align=1 ;; CHECK-NEXT: (i32.const 790656516) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -5431187) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-shifts-is-not-sign-ext (drop (i32.eq (i32.const -5431187) (i32.add (i32.const 0) (i32.shr_s (i32.shl (i32.load16_s align=1 (i32.const 790656516) ) (i32.const 0) ) (i32.const 0) ) ) ) ) (drop (i32.eq (i32.const -5431187) (i32.add (i32.const 0) (i32.shr_s (i32.shl (i32.load16_s align=1 (i32.const 790656516) ) (i32.const 1) ) (i32.const 0) ) ) ) ) ) ;; CHECK: (func $zero-ops (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load16_s align=1 ;; CHECK-NEXT: (i32.const 790656516) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-ops (result i32) (return (i32.eq (i32.const -1337) (i32.shr_u (i32.add (i32.const 0) (i32.shr_s (i32.shl (i32.load16_s align=1 (i32.const 790656516) ) (i32.const 0) ) (i32.const 0) ) ) (i32.const 0) ) ) ) ) ;; CHECK: (func $zero-ops-64 (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (i64.load16_s align=1 ;; CHECK-NEXT: (i32.const 790656516) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const -1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-ops-64 (result i32) (return (i64.eq (i64.const -1337) (i64.shr_u (i64.add (i64.const 0) (i64.shr_s (i64.shl (i64.load16_s align=1 (i32.const 790656516) ) (i64.const 0) ) (i64.const 0) ) ) (i64.const 0) ) ) ) ) ;; CHECK: (func $zero-ops-64-special (result i32) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.popcnt ;; CHECK-NEXT: (i64.const 7377) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-ops-64-special (result i32) (return (i32.wrap_i64 (i64.popcnt (i64.sub (i64.shl (i64.const 4294783828) (i64.const 17179869183) ) (i64.const -7377) ) ) ) ) ) ;; CHECK: (func $sign-ext-1-and-ne (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $sign-ext-1-and-ne) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $sign-ext-1-and-ne (result i32) (select (i32.ne (i32.const 1333788672) (i32.shr_s (i32.shl (call $sign-ext-1-and-ne) (i32.const 1) ) (i32.const 1) ) ) (i32.const 2) (i32.const 1) ) ) ;; CHECK: (func $neg-shifts-and-255 (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const -99) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $neg-shifts-and-255 (result i32) (i32.and (i32.shr_u (i32.const -99) (i32.const -32) ;; this shift does nothing ) (i32.const 255) ) ) ;; CHECK: (func $neg-shifts-and-255-b (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.const -2349025) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $neg-shifts-and-255-b (result i32) (i32.and (i32.shl (i32.const -2349025) (i32.const -32) ;; this shift does nothing ) (i32.const 255) ) ) ;; CHECK: (func $shifts-square-overflow (param $x i32) (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $shifts-square-overflow (param $x i32) (result i32) (i32.shr_u (i32.shr_u (local.get $x) (i32.const 65535) ;; 31 bits effectively ) (i32.const 32767) ;; also 31 bits, so two shifts that force the value into nothing for sure ) ) ;; CHECK: (func $shifts-square-no-overflow-small (param $x i32) (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $shifts-square-no-overflow-small (param $x i32) (result i32) (i32.shr_u (i32.shr_u (local.get $x) (i32.const 1031) ;; 7 bits effectively ) (i32.const 4098) ;; 2 bits effectively ) ) ;; CHECK: (func $shifts-square-overflow-64 (param $x i64) (result i64) ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $shifts-square-overflow-64 (param $x i64) (result i64) (i64.shr_u (i64.shr_u (local.get $x) (i64.const 65535) ;; 63 bits effectively ) (i64.const 64767) ;; also 63 bits, so two shifts that force the value into nothing for sure ) ) ;; CHECK: (func $shifts-square-no-overflow-small-64 (param $x i64) (result i64) ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $shifts-square-no-overflow-small-64 (param $x i64) (result i64) (i64.shr_u (i64.shr_u (local.get $x) (i64.const 1031) ;; 7 bits effectively ) (i64.const 4098) ;; 2 bits effectively ) ) ;; CHECK: (func $shifts-square-unreachable (param $x i32) (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 1031) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4098) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $shifts-square-unreachable (param $x i32) (result i32) (i32.shr_u (i32.shr_u (unreachable) (i32.const 1031) ;; 7 bits effectively ) (i32.const 4098) ;; 2 bits effectively ) ) ;; CHECK: (func $mix-shifts (result i32) ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 23) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $mix-shifts (result i32) (i32.shr_s (i32.shl (i32.const 23) (i32.const -61) ) (i32.const 168) ) ) ;; CHECK: (func $actually-no-shifts (result i32) ;; CHECK-NEXT: (i32.const 33) ;; CHECK-NEXT: ) (func $actually-no-shifts (result i32) (i32.add (i32.shl (i32.const 23) (i32.const 32) ;; really 0 ) (i32.const 10) ) ) ;; CHECK: (func $less-shifts-than-it-seems (param $x i32) (result i32) ;; CHECK-NEXT: (i32.const 4800) ;; CHECK-NEXT: ) (func $less-shifts-than-it-seems (param $x i32) (result i32) (i32.add (i32.shl (i32.const 200) (i32.const 36) ;; really 4 ) (i32.shl (i32.const 100) (i32.const 4) ) ) ) ;; CHECK: (func $and-popcount32 (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.popcnt ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $and-popcount32 (result i32) (i32.and (i32.popcnt (i32.const -1) ) (i32.const 31) ) ) ;; CHECK: (func $and-popcount32-big (result i32) ;; CHECK-NEXT: (i32.popcnt ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $and-popcount32-big (result i32) (i32.and (i32.popcnt (i32.const -1) ) (i32.const 63) ) ) ;; CHECK: (func $and-popcount64 (result i64) ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (i64.popcnt ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $and-popcount64 (result i64) ;; these are TODOs (i64.and (i64.popcnt (i64.const -1) ) (i64.const 63) ) ) ;; CHECK: (func $and-popcount64-big (result i64) ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (i64.popcnt ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 127) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $and-popcount64-big (result i64) (i64.and (i64.popcnt (i64.const -1) ) (i64.const 127) ) ) ;; CHECK: (func $and-popcount64-bigger (result i64) ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (i64.popcnt ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $and-popcount64-bigger (result i64) (i64.and (i64.popcnt (i64.const -1) ) (i64.const 255) ) ) ;; CHECK: (func $optimizeAddedConstants-filters-through-nonzero (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const -536870912) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31744) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimizeAddedConstants-filters-through-nonzero (result i32) (i32.sub (i32.add (i32.shl (i32.const -536870912) (i32.wrap_i64 (i64.const 0) ) ) (i32.const -32768) ) (i32.const -1024) ) ) ;; CHECK: (func $optimizeAddedConstants-filters-through-nonzero-b (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const -536870912) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31744) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimizeAddedConstants-filters-through-nonzero-b (result i32) (i32.sub (i32.add (i32.shl (i32.const -536870912) (i32.wrap_i64 (i64.const -1) ) ) (i32.const -32768) ) (i32.const -1024) ) ) ;; CHECK: (func $return-proper-value-from-shift-left-by-zero (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (loop $label$0 (result i32) ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -62) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $return-proper-value-from-shift-left-by-zero (result i32) (if (result i32) (i32.sub (i32.add (loop $label$0 (result i32) (block $label$1 (br_if $label$1 (i32.shl (i32.load (i32.const 0) ) (i32.const -31904) ;; really 0 shifts ) ) ) (i32.const -62) ) (i32.const 38) ) (i32.const -2) ) (i32.const 1) (i32.const 0) ) ) ;; CHECK: (func $de-morgan-2 (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $de-morgan-2 (param $x i32) (param $y i32) (drop (i32.and (i32.eqz (local.get $x)) (i32.eqz (local.get $y))) ) (drop (i32.or (i32.eqz (local.get $x)) (i32.eqz (local.get $y))) ) (drop (i32.xor (i32.eqz (local.get $x)) (i32.eqz (local.get $y))) ) (drop (i32.and (i32.eqz (local.get $x)) (local.get $y)) ) (drop (i32.and (local.get $x) (i32.eqz (local.get $y))) ) (drop (i32.and (i32.eqz (local.get $x)) (i32.wrap_i64 (i64.const 2))) ) (drop (i32.and (i32.wrap_i64 (i64.const 1)) (i32.eqz (local.get $y))) ) ) ;; CHECK: (func $subzero1 (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subzero1 (param $0 i32) (result i32) (i32.add (i32.sub (i32.const 1) (i32.clz (local.get $0) ) ) (i32.const 31) ) ) ;; CHECK: (func $subzero2 (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subzero2 (param $0 i32) (result i32) (i32.add (i32.const 31) (i32.sub (i32.const 1) (i32.clz (local.get $0) ) ) ) ) ;; CHECK: (func $subzero3 (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subzero3 (param $0 i32) (param $1 i32) (result i32) (i32.add (i32.sub (i32.const 0) (i32.clz (local.get $0) ) ) (local.get $1) ) ) ;; CHECK: (func $subzero4 (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.clz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $subzero4 (param $0 i32) (param $1 i32) (result i32) (i32.add (local.get $0) (i32.sub (i32.const 0) (i32.clz (local.get $1) ) ) ) ) ;; CHECK: (func $remove-signs-for-mul-i32 (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $remove-signs-for-mul-i32 (param $0 i32) (param $1 i32) (result i32) (i32.mul (i32.sub (i32.const 0) (local.get $0) ) (i32.sub (i32.const 0) (local.get $1) ) ) ) ;; CHECK: (func $remove-signs-for-mul-i64 (param $0 i64) (param $1 i64) (result i64) ;; CHECK-NEXT: (i64.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $remove-signs-for-mul-i64 (param $0 i64) (param $1 i64) (result i64) (i64.mul (i64.sub (i64.const 0) (local.get $0) ) (i64.sub (i64.const 0) (local.get $1) ) ) ) ;; CHECK: (func $propagate-sign-for-i32-lhs (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-i32-lhs (param $0 i32) (param $1 i32) (result i32) (i32.mul (i32.sub (i32.const 0) (local.get $0) ) (local.get $1) ) ) ;; CHECK: (func $propagate-sign-for-i32-rhs (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-i32-rhs (param $0 i32) (param $1 i32) (result i32) (i32.mul (local.get $0) (i32.sub (i32.const 0) (local.get $1) ) ) ) ;; CHECK: (func $propagate-sign-for-i64-lhs (param $0 i64) (param $1 i64) (result i64) ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.mul ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-i64-lhs (param $0 i64) (param $1 i64) (result i64) (i64.mul (i64.sub (i64.const 0) (local.get $0) ) (local.get $1) ) ) ;; CHECK: (func $propagate-sign-for-i64-rhs (param $0 i64) (param $1 i64) (result i64) ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.mul ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-i64-rhs (param $0 i64) (param $1 i64) (result i64) (i64.mul (local.get $0) (i64.sub (i64.const 0) (local.get $1) ) ) ) ;; CHECK: (func $propagate-sign-for-i32-rhs-side (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (call $subzero4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-i32-rhs-side (param $0 i32) (param $1 i32) (result i32) (i32.mul (call $subzero4 (local.get $0) (local.get $1) ) (i32.sub (i32.const 0) (local.get $1) ) ) ) ;; CHECK: (func $propagate-sign-for-mul-i32-lhs-const (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-mul-i32-lhs-const (param $0 i32) (result i32) (i32.mul (i32.const 3) (i32.sub (i32.const 0) (local.get $0) ) ) ) ;; CHECK: (func $propagate-sign-for-mul-i32-lhs-const-pot (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-mul-i32-lhs-const-pot (param $0 i32) (result i32) (i32.mul (i32.const 2) (i32.sub (i32.const 0) (local.get $0) ) ) ) ;; CHECK: (func $propagate-sign-for-mul-i32-rhs-const (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-mul-i32-rhs-const (param $0 i32) (result i32) (i32.mul (i32.sub (i32.const 0) (local.get $0) ) (i32.const -5) ) ) ;; CHECK: (func $propagate-sign-for-i32-both-sign-consts (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-i32-both-sign-consts (param $0 i32) (result i32) (i32.mul (i32.const -5) (i32.sub (i32.const 0) (i32.const 2) ) ) ) ;; CHECK: (func $propagate-sign-for-mul-i32-smin (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-mul-i32-smin (param $0 i32) (result i32) (i32.mul (i32.sub (i32.const 0) (local.get $0) ) (i32.const 0x80000000) ) ) ;; CHECK: (func $propagate-sign-for-mul-i32-skip-2 (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-sign-for-mul-i32-skip-2 (param $0 i32) (result i32) (i32.mul (local.get $0) (i32.sub (i32.const 0) (i32.const 3) ) ) ) ;; CHECK: (func $mul-32-power-2 (param $x i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-32-power-2 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-32-power-2 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-32-power-2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-32-power-2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-32-power-2 ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (call $mul-32-power-2 ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-32-power-2 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-32-power-2 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $mul-32-power-2 (param $x i32) (result i32) (drop (call $mul-32-power-2 (i32.mul (local.get $x) (i32.const 4) ) ) ) (drop (call $mul-32-power-2 (i32.mul (local.get $x) (i32.const 5) ) ) ) (drop (call $mul-32-power-2 (i32.mul (local.get $x) (i32.const 1) ) ) ) (drop (call $mul-32-power-2 (i32.mul (local.get $x) (i32.const 0) ) ) ) (drop (call $mul-32-power-2 (i32.mul (call $mul-32-power-2 (i32.const 123)) ;; side effects (i32.const 0) ) ) ) (drop (call $mul-32-power-2 (i32.mul (local.get $x) (i32.const 0xffffffff) ) ) ) (drop (call $mul-32-power-2 (i32.mul (local.get $x) (i32.const 0x80000000) ) ) ) (unreachable) ) ;; CHECK: (func $mul-64-power-2 (param $x i64) (result i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-64-power-2 ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-64-power-2 ;; CHECK-NEXT: (i64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-64-power-2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-64-power-2 ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-64-power-2 ;; CHECK-NEXT: (i64.mul ;; CHECK-NEXT: (call $mul-64-power-2 ;; CHECK-NEXT: (i64.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-64-power-2 ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $mul-64-power-2 ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $mul-64-power-2 (param $x i64) (result i64) (drop (call $mul-64-power-2 (i64.mul (local.get $x) (i64.const 4) ) ) ) (drop (call $mul-64-power-2 (i64.mul (local.get $x) (i64.const 5) ) ) ) (drop (call $mul-64-power-2 (i64.mul (local.get $x) (i64.const 1) ) ) ) (drop (call $mul-64-power-2 (i64.mul (local.get $x) (i64.const 0) ) ) ) (drop (call $mul-64-power-2 (i64.mul (call $mul-64-power-2 (i64.const 123)) ;; side effects (i64.const 0) ) ) ) (drop (call $mul-64-power-2 (i64.mul (local.get $x) (i64.const 0xffffffffffffffff) ) ) ) (drop (call $mul-64-power-2 (i64.mul (local.get $x) (i64.const 0x8000000000000000) ) ) ) (unreachable) ) ;; CHECK: (func $div-32-power-2 (param $x i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $div-32-power-2 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $div-32-power-2 ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $div-32-power-2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $div-32-power-2 ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $div-32-power-2 ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (call $div-32-power-2 ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $div-32-power-2 ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $div-32-power-2 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $div-32-power-2 (param $x i32) (result i32) (drop (call $div-32-power-2 (i32.div_u (local.get $x) (i32.const 4) ) ) ) (drop (call $div-32-power-2 (i32.div_u (local.get $x) (i32.const 5) ) ) ) (drop (call $div-32-power-2 (i32.div_u (local.get $x) (i32.const 1) ) ) ) (drop (call $div-32-power-2 (i32.div_u (local.get $x) (i32.const 0) ) ) ) (drop (call $div-32-power-2 (i32.div_u (call $div-32-power-2 (i32.const 123)) ;; side effects (i32.const 0) ) ) ) (drop (call $div-32-power-2 (i32.div_u (local.get $x) (i32.const 0xffffffff) ) ) ) (drop (call $div-32-power-2 (i32.div_u (local.get $x) (i32.const 0x80000000) ) ) ) (unreachable) ) ;; CHECK: (func $urem-32-power-2 (param $x i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $urem-32-power-2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $urem-32-power-2 ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $urem-32-power-2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $urem-32-power-2 ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $urem-32-power-2 ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $urem-32-power-2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $urem-32-power-2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $urem-32-power-2 (param $x i32) (result i32) (drop (call $urem-32-power-2 (i32.rem_u (local.get $x) (i32.const 4) ) ) ) (drop (call $urem-32-power-2 (i32.rem_u (local.get $x) (i32.const 5) ) ) ) (drop (call $urem-32-power-2 (i32.rem_u (local.get $x) (i32.const 1) ) ) ) (drop (call $urem-32-power-2 (i32.rem_u (local.get $x) (i32.const 0) ) ) ) (drop (call $urem-32-power-2 (i32.rem_u (local.get $x) (i32.const 0xffffffff) ) ) ) (drop (call $urem-32-power-2 (i32.rem_u (local.get $x) (i32.const 0x80000000) ) ) ) ;; (unsigned)x % 1 (drop (call $urem-32-power-2 (i32.rem_u (local.get $x) (i32.const 1) ) ) ) (unreachable) ) ;; CHECK: (func $fdiv-32-power-2 (param $x f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 0.5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const -0.5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 2.3283064365386963e-10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 5.421010862427522e-20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 8507059173023461586584365e13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 1.1754943508222875e-38) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const -8507059173023461586584365e13) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const -1.1754943508222875e-38) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 5.877471754111438e-39) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 5.877471754111438e-39) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const nan:0x400000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const inf) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f32.const -inf) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fdiv-32-power-2 (param $x f32) (drop (f32.div (local.get $x) (f32.const 2) )) (drop (f32.div (local.get $x) (f32.const -2) )) (drop (f32.div (local.get $x) (f32.const 4294967296) )) (drop (f32.div (local.get $x) (f32.const 18446744073709551616) )) (drop (f32.div (local.get $x) (f32.const 0x1p-126) )) (drop (f32.div (local.get $x) (f32.const 0x1p+126) )) (drop (f32.div (local.get $x) (f32.const -0x1p-126) )) (drop (f32.div (local.get $x) (f32.const -0x1p+126) )) (drop (f32.div (local.get $x) (f32.const 0x1p-127) ;; skip )) (drop (f32.div (local.get $x) (f32.const 0x1p-127) ;; skip )) (drop (f32.div (local.get $x) (f32.const 0) ;; skip )) (drop (f32.div (local.get $x) (f32.const nan) ;; skip )) (drop (f32.div (local.get $x) (f32.const inf) ;; skip )) (drop (f32.div (local.get $x) (f32.const -inf) ;; skip )) ) ;; CHECK: (func $fdiv-64-power-2 (param $x f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 0.5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const -0.5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 2.3283064365386963e-10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 5.421010862427522e-20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 4494232837155789769323262e283) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 2.2250738585072014e-308) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const -4494232837155789769323262e283) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const -2.2250738585072014e-308) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 1.1125369292536007e-308) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 8988465674311579538646525e283) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const nan:0x8000000000000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const inf) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (f64.const -inf) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $fdiv-64-power-2 (param $x f64) (drop (f64.div (local.get $x) (f64.const 2) )) (drop (f64.div (local.get $x) (f64.const -2) )) (drop (f64.div (local.get $x) (f64.const 4294967296) )) (drop (f64.div (local.get $x) (f64.const 18446744073709551616) )) (drop (f64.div (local.get $x) (f64.const 0x1p-1022) )) (drop (f64.div (local.get $x) (f64.const 0x1p+1022) )) (drop (f64.div (local.get $x) (f64.const -0x1p-1022) )) (drop (f64.div (local.get $x) (f64.const -0x1p+1022) )) (drop (f64.div (local.get $x) (f64.const 0x1p-1023) ;; skip )) (drop (f64.div (local.get $x) (f64.const 0x1p+1023) ;; skip )) (drop (f64.div (local.get $x) (f64.const 0) ;; skip )) (drop (f64.div (local.get $x) (f64.const nan) ;; skip )) (drop (f64.div (local.get $x) (f64.const inf) ;; skip )) (drop (f64.div (local.get $x) (f64.const -inf) ;; skip )) ) ;; CHECK: (func $srem-by-const (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.rem_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -9223372036854775808) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $srem-by-const (param $x i32) (param $y i64) ;; (signed)x % 1 (drop (i32.rem_s (local.get $x) (i32.const 1) )) (drop (i64.rem_s (local.get $y) (i64.const 1) )) ;; (signed)x % 0x80000000 -> x & 0x7FFFFFFF (drop (i32.rem_s (local.get $x) (i32.const 0x80000000) )) ;; (signed)x % 0x8000000000000000 -> x & 0x7FFFFFFFFFFFFFFF (drop (i64.rem_s (local.get $y) (i64.const 0x8000000000000000) )) ) ;; CHECK: (func $srem-by-pot-eq-ne-zero (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 9223372036854775807) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 9223372036854775807) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.rem_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $srem-by-pot-eq-ne-zero (param $x i32) (param $y i64) ;; eqz((signed)x % 4) (drop (i32.eqz (i32.rem_s (local.get $x) (i32.const 4) ) )) (drop (i64.eqz (i64.rem_s (local.get $y) (i64.const 4) ) )) ;; eqz((signed)x % -4) (drop (i32.eqz (i32.rem_s (local.get $x) (i32.const -4) ) )) (drop (i64.eqz (i64.rem_s (local.get $y) (i64.const -4) ) )) ;; (signed)x % 4 == 0 (drop (i32.eq (i32.rem_s (local.get $x) (i32.const 4) ) (i32.const 0) )) (drop (i64.eq (i64.rem_s (local.get $y) (i64.const 2) ) (i64.const 0) )) ;; (signed)x % -4 == 0 (drop (i32.eq (i32.rem_s (local.get $x) (i32.const -4) ) (i32.const 0) )) (drop (i64.eq (i64.rem_s (local.get $y) (i64.const -4) ) (i64.const 0) )) ;; (signed)x % 2 != 0 (drop (i32.ne (i32.rem_s (local.get $x) (i32.const 2) ) (i32.const 0) )) (drop (i64.ne (i64.rem_s (local.get $y) (i64.const 2) ) (i64.const 0) )) ;; (signed)x % -1 == 0 -> 0 == 0 (drop (i32.eq (i32.rem_s (local.get $x) (i32.const -1) ) (i32.const 0) )) ;; (signed)x % 0x80000000 == 0 (drop (i32.eq (i32.rem_s (local.get $x) (i32.const 0x80000000) ) (i32.const 0) )) ;; (signed)x % 0x80000000 != 0 (drop (i32.ne (i32.rem_s (local.get $x) (i32.const 0x80000000) ) (i32.const 0) )) ;; (signed)x % 0x8000000000000000 == 0 (drop (i64.eq (i64.rem_s (local.get $y) (i64.const 0x8000000000000000) ) (i64.const 0) )) ;; (signed)x % 0x8000000000000000 != 0 (drop (i64.ne (i64.rem_s (local.get $y) (i64.const 0x8000000000000000) ) (i64.const 0) )) ;; (drop (i32.eq (i32.rem_s (local.get $x) (i32.const 3) ;; skip ) (i32.const 0) )) (drop (i64.eq (i64.rem_s (local.get $y) (i64.const 3) ;; skip ) (i64.const 0) )) ) ;; CHECK: (func $orZero (param $0 i32) (result i32) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $orZero (param $0 i32) (result i32) (i32.or (local.get $0) (i32.const 0) ) ) ;; CHECK: (func $andZero (param $0 i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (call $andZero ;; CHECK-NEXT: (i32.const 1234) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $andZero (param $0 i32) (result i32) (drop (i32.and (local.get $0) (i32.const 0) ) ) (drop (i32.and (call $andZero (i32.const 1234)) ;; side effects (i32.const 0) ) ) (unreachable) ) ;; CHECK: (func $abstract-additions (param $x32 i32) (param $x64 i64) (param $y32 f32) (param $y64 f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $y32) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $y64) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $y32) ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $y64) ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $y32) ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $y64) ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $y32) ;; CHECK-NEXT: (f32.const 1.2000000476837158) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.sub ;; CHECK-NEXT: (f32.const -0) ;; CHECK-NEXT: (local.get $y32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (f64.const -0) ;; CHECK-NEXT: (local.get $y64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $x64) ;; CHECK-NEXT: (i64.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $abstract-additions (param $x32 i32) (param $x64 i64) (param $y32 f32) (param $y64 f64) (drop (i32.or (i32.const 0) (local.get $x32) ) ) (drop (i32.shl (local.get $x32) (i32.const 0) ) ) (drop (i32.shr_u (local.get $x32) (i32.const 0) ) ) (drop (i32.shr_s (local.get $x32) (i32.const 0) ) ) (drop (i64.or (i64.const 0) (local.get $x64) ) ) (drop (i64.shl (local.get $x64) (i64.const 0) ) ) (drop (i64.shr_u (local.get $x64) (i64.const 0) ) ) (drop (i64.shr_s (local.get $x64) (i64.const 0) ) ) (drop (i32.mul (local.get $x32) (i32.const 0) ) ) (drop (i64.mul (local.get $x64) (i64.const 0) ) ) (drop (f32.mul (local.get $y32) (f32.const 0) ) ) (drop (f64.mul (local.get $y64) (f64.const 0) ) ) (drop (i32.mul (local.get $x32) (i32.const 1) ) ) (drop (i64.mul (local.get $x64) (i64.const 1) ) ) (drop (f32.mul (local.get $y32) (f32.const 1) ) ) (drop (f64.mul (local.get $y64) (f64.const 1) ) ) (drop (i32.and (local.get $x32) (i32.const 0) ) ) (drop (i64.and (local.get $x64) (i64.const 0) ) ) (drop (i32.and (unreachable) (i32.const 0) ) ) (drop (i64.and (unreachable) (i64.const 0) ) ) (drop (i32.div_s (local.get $x32) (i32.const 1) ) ) (drop (i32.div_u (local.get $x32) (i32.const 1) ) ) (drop (i64.div_s (local.get $x64) (i64.const 1) ) ) (drop (i64.div_u (local.get $x64) (i64.const 1) ) ) (drop (f32.div (local.get $y32) (f32.const 1) ) ) (drop (f64.div (local.get $y64) (f64.const 1) ) ) (drop (f32.div (local.get $y32) (f32.const 1.2) ) ) (drop (i32.mul (local.get $x32) (i32.const -1) ) ) (drop (i64.mul (local.get $x64) (i64.const -1) ) ) (drop (f32.mul (local.get $y32) (f32.const -1) ) ) (drop (f64.mul (local.get $y64) (f64.const -1) ) ) (drop (i32.eq (i32.add (local.get $x32) (i32.const 10) ) (i32.const 20) ) ) (drop (i32.le_u (i32.add (local.get $x32) (i32.const 10) ) (i32.const 20) ) ) (drop (i32.eq (i32.sub (local.get $x32) (i32.const 10) ) (i32.const 20) ) ) (drop (i64.eq (i64.add (local.get $x64) (i64.const 10) ) (i64.const 20) ) ) (drop (i32.eq (i32.const 20) (i32.add (local.get $x32) (i32.const 10) ) ) ) (drop (i32.eq (i32.add (local.get $x32) (i32.const 10) ) (i32.add (local.get $x32) (i32.const 20) ) ) ) (drop (i32.eq (i32.sub (local.get $x32) (i32.const 10) ) (i32.const 20) ) ) (drop (i32.eq (i32.add (local.get $x32) (i32.const 10) ) (i32.sub (local.get $x32) (i32.const 20) ) ) ) (drop (i32.eq (i32.sub (local.get $x32) (i32.const 10) ) (i32.add (local.get $x32) (i32.const 20) ) ) ) (drop (i32.eq (i32.sub (local.get $x32) (i32.const 10) ) (i32.sub (local.get $x32) (i32.const 20) ) ) ) (drop (i64.le_s (i64.sub (local.get $x64) (i64.const 288230376151711744) ) (i64.const 9223372036854775807) ) ) ) ;; CHECK: (func $negatives-are-sometimes-better (param $x i32) (param $y i64) (param $z f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -134217728) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -1048576) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -134217728) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -17179869184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -2199023255552) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -281474976710656) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -36028797018963968) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -4611686018427387904) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.add ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (f32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $negatives-are-sometimes-better (param $x i32) (param $y i64) (param $z f32) (drop (i32.add (local.get $x) (i32.const 0x40))) (drop (i32.sub (local.get $x) (i32.const 0x40))) (drop (i32.add (local.get $x) (i32.const 0x2000))) (drop (i32.add (local.get $x) (i32.const 0x100000))) (drop (i32.add (local.get $x) (i32.const 0x8000000))) (drop (i64.add (local.get $y) (i64.const 0x40))) (drop (i64.sub (local.get $y) (i64.const 0x40))) (drop (i64.add (local.get $y) (i64.const 0x2000))) (drop (i64.add (local.get $y) (i64.const 0x100000))) (drop (i64.add (local.get $y) (i64.const 0x8000000))) (drop (i64.add (local.get $y) (i64.const 0x400000000))) (drop (i64.add (local.get $y) (i64.const 0x20000000000))) (drop (i64.add (local.get $y) (i64.const 0x1000000000000))) (drop (i64.add (local.get $y) (i64.const 0x80000000000000))) (drop (i64.add (local.get $y) (i64.const 0x4000000000000000))) (drop (f32.add (local.get $z) (f32.const 0x40))) ) ;; CHECK: (func $shift-a-zero (param $x i32) (param $y i64) (param $z f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $shift-a-zero (param $x i32) (param $y i64) (param $z f32) (drop (i32.shl (i32.const 0) (local.get $x) ) ) (drop (i32.shr_u (i32.const 0) (local.get $x) ) ) (drop (i32.shr_s (i32.const 0) (local.get $x) ) ) (drop (i64.shl (i64.const 0) (local.get $y) ) ) (drop (i32.shl (i32.const 0) (unreachable) ) ) ) ;; CHECK: (func $identical-siblings (param $x i32) (param $y i64) (param $z f64) (param $xx i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $xx) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $identical-siblings (param $x i32) (param $y i64) (param $z f64) (param $xx i32) (drop (i32.sub (local.get $x) (local.get $x) ) ) (drop (i64.sub (local.get $y) (local.get $y) ) ) (drop (f64.sub (local.get $z) (local.get $z) ) ) (drop (i32.sub (local.get $x) (local.get $xx) ) ) (drop (i32.sub (unreachable) (unreachable) ) ) (drop (i32.add (local.get $x) (local.get $x) ) ) ;; more ops (drop (i32.xor (local.get $x) (local.get $x) ) ) (drop (i32.ne (local.get $x) (local.get $x) ) ) (drop (i32.lt_s (local.get $x) (local.get $x) ) ) (drop (i32.lt_u (local.get $x) (local.get $x) ) ) (drop (i32.gt_s (local.get $x) (local.get $x) ) ) (drop (i32.gt_u (local.get $x) (local.get $x) ) ) (drop (i32.and (local.get $x) (local.get $x) ) ) (drop (i32.or (local.get $x) (local.get $x) ) ) (drop (i32.eq (local.get $x) (local.get $x) ) ) (drop (i32.le_s (local.get $x) (local.get $x) ) ) (drop (i32.le_u (local.get $x) (local.get $x) ) ) (drop (i32.ge_s (local.get $x) (local.get $x) ) ) (drop (i32.ge_u (local.get $x) (local.get $x) ) ) (drop (i64.xor (local.get $y) (local.get $y) ) ) (drop (i64.ne (local.get $y) (local.get $y) ) ) (drop (i64.lt_s (local.get $y) (local.get $y) ) ) (drop (i64.lt_u (local.get $y) (local.get $y) ) ) (drop (i64.gt_s (local.get $y) (local.get $y) ) ) (drop (i64.gt_u (local.get $y) (local.get $y) ) ) (drop (i64.and (local.get $y) (local.get $y) ) ) (drop (i64.or (local.get $y) (local.get $y) ) ) (drop (i64.eq (local.get $y) (local.get $y) ) ) (drop (i64.le_s (local.get $y) (local.get $y) ) ) (drop (i64.le_u (local.get $y) (local.get $y) ) ) (drop (i64.ge_s (local.get $y) (local.get $y) ) ) (drop (i64.ge_u (local.get $y) (local.get $y) ) ) ) ;; CHECK: (func $all_ones (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $all_ones (param $x i32) (param $y i64) (drop (i32.and (local.get $x) (i32.const -1) ) ) (drop (i32.or (local.get $x) (i32.const -1) ) ) (drop (i32.or (local.tee $x (i32.const 1337) ) (i32.const -1) ) ) (drop (i64.and (local.get $y) (i64.const -1) ) ) (drop (i64.or (local.get $y) (i64.const -1) ) ) ) ;; CHECK: (func $xor (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $xor (param $x i32) (param $y i64) (drop (i32.xor (local.get $x) (i32.const 0) ) ) ) ;; CHECK: (func $select-on-const (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.ge_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.ge_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-on-const (param $x i32) (param $y i64) (drop (select (i32.const 2) (local.get $x) (i32.const 0) ) ) (drop (select (i32.const 3) (local.get $x) (i32.const 1) ) ) (drop (select (i32.const 4) (local.tee $x (i32.const 5) ) (i32.const 0) ) ) (drop (select (local.tee $x (i32.const 6) ) (i32.const 7) (i32.const 0) ) ) (drop (select (i32.const 4) (local.tee $x (i32.const 5) ) (i32.const 1) ) ) (drop (select (local.tee $x (i32.const 6) ) (i32.const 7) (i32.const 1) ) ) (drop (select (i32.const 1) (i32.const 0) (local.get $x) ) ) (drop (select (i32.const 0) (i32.const 1) (local.get $x) ) ) (drop (select (i32.const 0) (i32.const 1) (i32.lt_s (local.get $x) (i32.const 0) ) ) ) (drop (select (i32.const 1) (i32.const 0) (i32.lt_s (local.get $x) (i32.const 0) ) ) ) (drop (select (i32.const 0) (i32.const 1) (i32.ge_s (local.get $x) (i32.const 0) ) ) ) (drop (select (i32.const 1) (i32.const 0) (i32.gt_s (local.get $x) (i32.const 0) ) ) ) (drop (select (i32.const 0) (i32.const 1) (i32.gt_s (local.get $x) (i32.const 0) ) ) ) (drop (select (i32.const 1) (i32.const 0) (i32.ge_s (local.get $x) (i32.const 0) ) ) ) (drop (select (i64.const 1) (i64.const 0) (local.get $x) ) ) (drop (select (i64.const 0) (i64.const 1) (local.get $x) ) ) (drop (select (i64.const 1) (i64.const 0) (i64.eqz (local.get $y) ) ) ) (drop (select (i64.const 0) (i64.const 1) (i64.eqz (local.get $y) ) ) ) (drop (select (i64.const 0) (i64.const 1) (i64.lt_s (local.get $y) (i64.const 0) ) ) ) (drop (select (i64.const 1) (i64.const 0) (i64.lt_s (local.get $y) (i64.const 0) ) ) ) (drop (select (i64.const 0) (i64.const 1) (i64.ge_s (local.get $y) (i64.const 0) ) ) ) (drop (select (i64.const 1) (i64.const 0) (i64.ge_s (local.get $y) (i64.const 0) ) ) ) ;; optimize boolean (drop (select (local.get $x) (i32.const 0) (i32.eqz (i32.const 0) ) ) ) (drop (select (local.get $x) (i32.const 2) (i32.eqz (i32.const 2) ) ) ) (drop (select (local.get $x) (i32.const 2) (i32.eqz (i32.eqz (local.get $x) ) ) ) ) (drop (select (local.get $y) (i64.const 0) (i64.eqz (i64.const 0) ) ) ) (drop (select (local.get $y) (i64.const 2) (i64.eqz (i64.const 2) ) ) ) ) ;; CHECK: (func $optimize-boolean (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-boolean (param $x i32) (param $y i64) ;; bool(-x) -> bool(x) (drop (select (i32.const 1) (i32.const 2) (i32.sub (i32.const 0) (local.get $x) ) ) ) ;; i32(bool(expr)) == 1 -> bool(expr) (drop (i32.eq (i32.and (local.get $x) (i32.const 1) ) (i32.const 1) )) ;; i32(bool(expr)) != 1 -> !bool(expr) (drop (i32.ne (i32.and (local.get $x) (i32.const 1) ) (i32.const 1) )) ;; i32(bool(expr)) ^ 1 -> !bool(expr) (drop (i32.xor (i32.and (local.get $x) (i32.const 1) ) (i32.const 1) )) ;; i64(bool(expr)) ^ 1 -> extend(!bool(expr)) (drop (i64.xor (i64.and (local.get $y) (i64.const 1) ) (i64.const 1) )) ;; i64(bool(expr)) != 0 -> i32(bool(expr)) (drop (i64.ne (i64.shr_u (local.get $y) (i64.const 63) ) (i64.const 0) )) ;; eqz((i32(bool(expr)) != 0) != 0) (drop (i32.eqz (i32.ne (i32.ne (i32.shr_u (local.get $x) (i32.const 31) ) (i32.const 0) ) (i32.const 0) ) )) ;; i32.eqz(wrap(i64(x))) (drop (i32.eqz (i32.wrap_i64 (i64.shr_u (local.get $y) (i64.const 63) ) ) )) ;; eqz((i64(bool(expr)) != 0) != 0) (drop (i32.eqz (i32.ne (i64.ne (i64.shr_u (local.get $y) (i64.const 63) ) (i64.const 0) ) (i32.const 0) ) )) ;; eqz((i64(bool(expr)) != 0) != 0) (drop (i32.eqz (i32.ne (i64.ne (local.get $y) (i64.const 0) ) (i32.const 0) ) )) ;; i32.eqz(wrap(i64(x))) -> skip (drop (i32.eqz (i32.wrap_i64 (local.get $y) ) )) ;; i64(bool(expr)) == 1 -> i32(bool(expr)) (drop (i64.eq (i64.and (local.get $y) (i64.const 1) ) (i64.const 1) )) ;; i64(bool(expr)) != 1 -> !i64(bool(expr)) (drop (i64.ne (i64.and (local.get $y) (i64.const 1) ) (i64.const 1) )) ;; i32(bool(expr)) & 1 -> bool(expr) (drop (i32.and (i32.and (local.get $x) (i32.const 1) ) (i32.const 1) )) ;; i32(bool(expr)) | 1 -> 1 (drop (i32.or (i32.and (local.get $x) (i32.const 1) ) (i32.const 1) )) ;; i64(bool(expr)) & 1 -> i64(bool(expr)) (drop (i64.and (i64.and (local.get $y) (i64.const 1) ) (i64.const 1) )) ;; i64(bool(expr)) | 1 -> 1 (drop (i64.or (i64.and (local.get $y) (i64.const 1) ) (i64.const 1) )) ;; i32(bool(expr)) != 0 -> i32(bool(expr)) (drop (i32.ne (i32.and (local.get $x) (i32.const 1) ) (i32.const 0) )) ;; i32(bool(expr)) != 0 -> i32(bool(expr)) (drop (i32.ne (i64.ne (local.get $y) (i64.const 0) ) (i32.const 0) )) ;; (i32(expr) != 0) != 0 -> (expr != 0) (drop (i32.ne (i32.ne (local.get $x) (i32.const 0) ) (i32.const 0) )) ;; (signed)x % 4 ? 1 : 0 (drop (if (result i32) (i32.rem_s (local.get $x) (i32.const 4) ) (i32.const 1) (i32.const 0) )) ;; (signed)x % min_s ? 1 : 0 (drop (if (result i32) (i32.rem_s (local.get $x) (i32.const 0x80000000) ) (i32.const 1) (i32.const 0) )) ) ;; CHECK: (func $optimize-bitwise-oprations (param $x i32) (param $y i32) (param $z i64) (param $w i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.rotl ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.rotl ;; CHECK-NEXT: (i64.const -2) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-bitwise-oprations (param $x i32) (param $y i32) (param $z i64) (param $w i64) ;; ~(1 << x) -> rotl(-2, x) (drop (i32.xor (i32.shl (i32.const 1) (local.get $x) ) (i32.const -1) )) (drop (i64.xor (i64.shl (i64.const 1) (local.get $z) ) (i64.const -1) )) ) ;; CHECK: (func $getFallthrough ;; CHECK-NEXT: (local $x0 i32) ;; CHECK-NEXT: (local $x1 i32) ;; CHECK-NEXT: (local $x2 i32) ;; CHECK-NEXT: (local $x3 i32) ;; CHECK-NEXT: (local $x4 i32) ;; CHECK-NEXT: (local $x5 i32) ;; CHECK-NEXT: (local $x6 i32) ;; CHECK-NEXT: (local $x7 i32) ;; CHECK-NEXT: (local.set $x0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x1 ;; CHECK-NEXT: (local.tee $x2 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x3 ;; CHECK-NEXT: (loop $loop-in (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x4 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x4) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x6 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $out (result i32) ;; CHECK-NEXT: (local.set $x7 ;; CHECK-NEXT: (br_if $out ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $getFallthrough ;; unit tests for Properties::getFallthrough (local $x0 i32) (local $x1 i32) (local $x2 i32) (local $x3 i32) (local $x4 i32) (local $x5 i32) (local $x6 i32) (local $x7 i32) ;; the trivial case (local.set $x0 (i32.const 1)) (drop (i32.and (local.get $x0) (i32.const 7))) ;; tees (local.set $x1 (local.tee $x2 (i32.const 1))) (drop (i32.and (local.get $x1) (i32.const 7))) ;; loop (local.set $x3 (loop (result i32) (i32.const 1))) (drop (i32.and (local.get $x3) (i32.const 7))) ;; if - two sides, can't (local.set $x4 (if (result i32) (i32.const 1) (i32.const 2) (i32.const 3))) (drop (i32.and (local.get $x4) (i32.const 7))) ;; if - one side, can (local.set $x5 (if (result i32) (i32.const 1) (unreachable) (i32.const 3))) (drop (i32.and (local.get $x5) (i32.const 7))) ;; if - one side, can (local.set $x6 (if (result i32) (i32.const 1) (i32.const 3) (unreachable))) (drop (i32.and (local.get $x6) (i32.const 7))) ;; br_if with value (drop (block $out (result i32) (local.set $x7 (br_if $out (i32.const 1) (i32.const 1))) (drop (i32.and (local.get $x7) (i32.const 7))) (unreachable) ) ) ) ;; CHECK: (func $tee-with-unreachable-value (result f64) ;; CHECK-NEXT: (local $var$0 i32) ;; CHECK-NEXT: (block $label$1 (result f64) ;; CHECK-NEXT: (local.tee $var$0 ;; CHECK-NEXT: (br_if $label$1 ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $tee-with-unreachable-value (result f64) (local $var$0 i32) (block $label$1 (result f64) (local.tee $var$0 (br_if $label$1 ;; the f64 does not actually flow through this, it's unreachable (and the type is wrong - but unchecked) (f64.const 1) (unreachable) ) ) ) ) ;; CHECK: (func $add-sub-zero-reorder-1 (param $temp i32) (result i32) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $temp ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $add-sub-zero-reorder-1 (param $temp i32) (result i32) (i32.add (i32.add (i32.sub (i32.const 0) ;; this zero looks like we could remove it by subtracting the get of $temp from the parent, but that would reorder it *after* the tee :( (local.get $temp) ) (local.tee $temp ;; cannot move this tee before the get (i32.const 1) ) ) (i32.const 2) ) ) ;; CHECK: (func $add-sub-zero-reorder-2 (param $temp i32) (result i32) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.tee $temp ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $add-sub-zero-reorder-2 (param $temp i32) (result i32) (i32.add (i32.add (local.tee $temp ;; in this order, the tee already comes first, so all is good for the optimization (i32.const 1) ) (i32.sub (i32.const 0) (local.get $temp) ) ) (i32.const 2) ) ) ;; CHECK: (func $const-float-zero (param $fx f32) (param $fy f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.sub ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.add ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f32.const -0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: (f64.const -0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.add ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.sub ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.add ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.sub ;; CHECK-NEXT: (f32.const -nan:0x34546d) ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $const-float-zero (param $fx f32) (param $fy f64) ;; x - 0.0 ==> x (drop (f32.sub (local.get $fx) (f32.const 0) )) (drop (f64.sub (local.get $fy) (f64.const 0) )) ;; x + (-0.0) ==> x (drop (f32.add (local.get $fx) (f32.const -0) )) (drop (f64.add (local.get $fy) (f64.const -0) )) ;; x - (-0.0) ==> x + 0.0 (drop (f32.sub (local.get $fx) (f32.const -0) ;; skip )) (drop (f64.sub (local.get $fy) (f64.const -0) ;; skip )) ;; 0.0 - x ==> 0.0 - x (drop (f32.sub (f32.const 0) (local.get $fx) ;; skip )) (drop (f64.sub (f64.const 0) (local.get $fy) ;; skip )) ;; x + 0.0 ==> x + 0.0 (drop (f32.add (local.get $fx) ;; skip (f32.const 0) )) (drop (f64.add (local.get $fy) ;; skip (f64.const 0) )) (drop (f32.sub (f32.const -nan:0x34546d) ;; skip (f32.const 0) )) ) ;; CHECK: (func $rhs-is-neg-one (param $x i32) (param $y i64) (param $fx f32) (param $fy f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ge_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_s ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.sub ;; CHECK-NEXT: (f32.const -0) ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (f64.const -0) ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $rhs-is-neg-one (param $x i32) (param $y i64) (param $fx f32) (param $fy f64) (drop (i32.sub (local.get $x) (i32.const -1) )) (drop (i64.sub (local.get $y) (i64.const -1) )) ;; (unsigned)x > -1 ==> 0 (drop (i32.gt_u (local.get $x) (i32.const -1) )) (drop (i64.gt_u (local.get $y) (i64.const -1) )) (drop (i32.gt_s (local.get $x) (i32.const -1) )) (drop (i64.gt_s (local.get $y) (i64.const -1) )) (drop (i64.extend_i32_s (i64.gt_u (i64.const 0) (i64.const -1) ) )) ;; (unsigned)x <= -1 ==> 1 (drop (i32.le_u (local.get $x) (i32.const -1) )) (drop (i64.le_u (local.get $y) (i64.const -1) )) (drop (i32.le_s (local.get $x) (i32.const -1) )) (drop (i64.le_s (local.get $y) (i64.const -1) )) ;; (unsigned)x >= -1 ==> x == -1 (drop (i32.ge_u (local.get $x) (i32.const -1) )) (drop (i64.ge_u (local.get $y) (i64.const -1) )) ;; (unsigned)x < -1 ==> x != -1 (drop (i32.lt_u (local.get $x) (i32.const -1) )) (drop (i64.lt_u (local.get $y) (i64.const -1) )) ;; x * -1 (drop (i32.mul (local.get $x) (i32.const -1) )) (drop (i64.mul (local.get $y) (i64.const -1) )) (drop (f32.mul ;; skip (local.get $fx) (f32.const -1) )) (drop (f64.mul ;; skip (local.get $fy) (f64.const -1) )) ;; (unsigned)x / -1 (drop (i32.div_u (local.get $x) (i32.const -1) )) (drop (i64.div_u (local.get $y) (i64.const -1) )) ) ;; CHECK: (func $rhs-is-const (param $x i32) (param $y i64) (param $fx f32) (param $fy f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -9223372036854775808) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.div_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 63) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 9223372036854775807) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -9223372036854775808) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const -9223372036854775808) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 9223372036854775807) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.sub ;; CHECK-NEXT: (f32.const -0) ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: (f64.const 2.1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: (f64.const -2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $fx) ;; CHECK-NEXT: (f32.const -inf) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: (f64.const -nan:0x8000000000000) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (f64.const -5) ;; CHECK-NEXT: (local.get $fy) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $rhs-is-const (param $x i32) (param $y i64) (param $fx f32) (param $fy f64) ;; signed divs ;; i32(x) / -2147483648 -> x == -2147483648 (drop (i32.div_s (local.get $x) (i32.const -2147483648) )) ;; i64(x) / -9223372036854775808 -> x == -9223372036854775808 (drop (i64.div_s (local.get $y) (i64.const -9223372036854775808) )) ;; skip (drop (i64.div_s (local.get $y) (i64.const -2147483648) )) ;; unsigned divs ;; u32(x) / -2 => x >= -2 (drop (i32.div_u (local.get $x) (i32.const -2) )) ;; u32(x) / -1 => x == -1 (drop (i32.div_u (local.get $x) (i32.const -1) )) ;; u32(x) / (i32.min + 1) (drop (i32.div_u (local.get $x) (i32.const -2147483647) )) ;; u32(x) / i32.min => x >>> 31 (drop (i32.div_u (local.get $x) (i32.const -2147483648) )) ;; u64(x) / -1 => u64(x == -1) (drop (i64.div_u (local.get $y) (i64.const -1) )) ;; u64(x) / i64.min => x >>> 63 (drop (i64.div_u (local.get $y) (i64.const -9223372036854775808) )) ;; (unsigned)x >= 0 => i32(1) (drop (i32.ge_u (local.get $x) (i32.const 0) )) (drop (i64.ge_u (local.get $y) (i64.const 0) )) ;; (unsigned)x < 0 => i32(0) (drop (i32.lt_u (local.get $x) (i32.const 0) )) (drop (i64.lt_u (local.get $y) (i64.const 0) )) ;; (unsigned)x > 0 => x != 0 (drop (i32.gt_u (local.get $x) (i32.const 0) )) (drop (i64.gt_u (local.get $y) (i64.const 0) )) ;; (unsigned)x <= 0 => x == 0 (drop (i32.le_u (local.get $x) (i32.const 0) )) (drop (i64.le_u (local.get $y) (i64.const 0) )) ;; i32(x) <= 0x7fffffff => i32(1) (drop (i32.le_s (local.get $x) (i32.const 0x7fffffff) )) ;; i64(x) <= 0x7fffffffffffffff => i32(1) (drop (i64.le_s (local.get $y) (i64.const 0x7fffffffffffffff) )) ;; i32(x) >= 0x80000000 => i32(1) (drop (i32.ge_s (local.get $x) (i32.const 0x80000000) )) ;; i64(x) >= 0x8000000000000000 => i32(1) (drop (i64.ge_s (local.get $y) (i64.const 0x8000000000000000) )) ;; i32(x) < 0x80000000 => 0 (drop (i32.lt_s (local.get $x) (i32.const 0x80000000) )) ;; i64(x) < 0x8000000000000000 => 0 (drop (i64.lt_s (local.get $y) (i64.const 0x8000000000000000) )) ;; i32(x) > 0x7fffffff => 0 (drop (i32.gt_s (local.get $x) (i32.const 0x7fffffff) )) ;; i64(x) > 0x7fffffffffffffff => 0 (drop (i64.gt_s (local.get $y) (i64.const 0x7fffffffffffffff) )) ;; i32(x) < 0x7fffffff => x != 0x7fffffff (drop (i32.lt_s (local.get $x) (i32.const 0x7fffffff) )) ;; i64(x) < 0x7fffffffffffffff => x != 0x7fffffffffffffff (drop (i64.lt_s (local.get $y) (i64.const 0x7fffffffffffffff) )) ;; i32(x) > 0x80000000 => x != 0x80000000 (drop (i32.gt_s (local.get $x) (i32.const 0x80000000) )) ;; i64(x) > 0x8000000000000000 => x != 0x8000000000000000 (drop (i64.gt_s (local.get $y) (i64.const 0x8000000000000000) )) ;; i32(x) <= 0x80000000 => x == 0x80000000 (drop (i32.le_s (local.get $x) (i32.const 0x80000000) )) ;; i64(x) <= 0x8000000000000000 => x == 0x8000000000000000 (drop (i64.le_s (local.get $y) (i64.const 0x8000000000000000) )) ;; i32(x) >= 0x7fffffff => x == 0x7fffffff (drop (i32.ge_s (local.get $x) (i32.const 0x7fffffff) )) ;; i64(x) >= 0x7fffffffffffffff => x == 0x7fffffffffffffff (drop (i64.ge_s (local.get $y) (i64.const 0x7fffffffffffffff) )) ;; -x * 1 => x * -1 (drop (f32.mul (f32.neg (local.get $fx) ) (f32.const 1) )) ;; -x * -2.1 => x * 2.1 (drop (f64.mul (f64.neg (local.get $fy) ) (f64.const -2.1) )) ;; 2 * -x => x * -2 (drop (f64.mul (f64.const 2) (f64.neg (local.get $fy) ) )) ;; -x / inf => x / -inf (drop (f32.div (f32.neg (local.get $fx) ) (f32.const inf) )) ;; -x / -0.0 => x / 0.0 (drop (f64.div (f64.neg (local.get $fy) ) (f64.const -0.0) )) ;; -x / nan => x / -nan (drop (f64.div (f64.neg (local.get $fy) ) (f64.const nan) )) ;; 5.0 / -x => -5 / x (drop (f64.div (f64.const 5) (f64.neg (local.get $fy) ) )) ) ;; CHECK: (func $lhs-is-neg-one (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $lhs-is-neg-one (param $x i32) (param $y i64) ;; -1 >> x ==> -1 (drop (i32.shr_s (i32.const -1) (local.get $x) )) (drop (i64.shr_s (i64.const -1) (local.get $y) )) ;; rotl(-1, x) ==> -1 (drop (i32.rotl (i32.const -1) (local.get $x) )) (drop (i64.rotl (i64.const -1) (local.get $y) )) ;; rotr(-1, x) ==> -1 (drop (i32.rotr (i32.const -1) (local.get $x) )) (drop (i64.rotr (i64.const -1) (local.get $y) )) ;; skip (drop (i32.shr_s (i32.const -1) (call $ne0) ;; side effect )) ;; skip (drop (i32.shr_u (i32.const -1) (local.get $x) )) ) ;; CHECK: (func $lhs-is-const (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const -2) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (i64.const -2) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $lhs-is-const (param $x i32) (param $y i64) ;; 0 - (x - 1) (drop (i32.sub (i32.const 0) (i32.sub (local.get $x) (i32.const 1) ) )) (drop (i64.sub (i64.const 0) (i64.sub (local.get $y) (i64.const 1) ) )) ;; -1 - (x + 1) (drop (i32.sub (i32.const -1) (i32.add (local.get $x) (i32.const 1) ) )) (drop (i64.sub (i64.const -1) (i64.add (local.get $y) (i64.const 1) ) )) ;; 1 - (2 - x) (drop (i32.sub (i32.const 1) (i32.sub (i32.const 2) (local.get $x) ) )) (drop (i64.sub (i64.const 1) (i64.sub (i64.const 2) (local.get $y) ) )) ;; 0 - (0x80000000 - x) (drop (i32.sub (i32.const 0) (i32.sub (i32.const 0x80000000) (local.get $x) ) )) ) ;; CHECK: (func $pre-combine-or (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pre-combine-or (param $x i32) (param $y i32) (drop (i32.or (i32.gt_s (local.get $x) (local.get $y) ) (i32.eq (local.get $y) ;; ordering should not stop us (local.get $x) ) )) (drop (i32.or (i32.eq ;; ordering should not stop us (local.get $y) (local.get $x) ) (i32.gt_s (local.get $x) (local.get $y) ) )) (drop (i32.or (i32.gt_s (local.get $x) (local.get $y) ) (i32.eq (local.get $x) (i32.const 1) ;; not equal ) )) (drop (i32.or (i32.gt_s (local.get $x) (i32.const 1) ;; not equal ) (i32.eq (local.get $x) (local.get $y) ) )) (drop (i32.or (i32.gt_s (call $ne0) ;; side effects (local.get $y) ) (i32.eq (call $ne0) (local.get $y) ) )) (drop (i32.or (i32.gt_s (local.get $y) (call $ne0) ;; side effects ) (i32.eq (local.get $y) (call $ne0) ) )) ) ;; CHECK: (func $combine-or (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $combine-or (param $x i32) (param $y i32) (drop (i32.or (i32.gt_s (local.get $x) (local.get $y) ) (i32.eq (local.get $x) (local.get $y) ) )) ;; TODO: more stuff here ) ;; CHECK: (func $select-into-arms (param $x i32) (param $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-into-arms (param $x i32) (param $y i32) (if (select (i32.eqz (i32.eqz (local.get $x))) (i32.eqz (i32.eqz (local.get $y))) (local.get $y) ) (unreachable) ) ) ;; CHECK: (func $select-with-same-arm-and-cond-32 (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-with-same-arm-and-cond-32 (param $x i32) ;; i32(x) ? i32(x) : 0 ==> x (drop (select (local.get $x) (i32.const 0) (local.get $x) )) ;; i32(x) ? 0 : i32(x) ==> {x, 0} (drop (select (i32.const 0) (local.get $x) (local.get $x) )) ;; i32(x) == 0 ? i32(x) : 0 ==> {x, 0} (drop (select (local.get $x) (i32.const 0) (i32.eqz (local.get $x)) )) ) ;; CHECK: (func $select-with-same-arm-and-cond-64 (param $x i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-with-same-arm-and-cond-64 (param $x i64) ;; i64(x) != 0 ? i64(x) : 0 ==> x (drop (select (local.get $x) (i64.const 0) (i64.ne (local.get $x) (i64.const 0) ) )) ;; i64(x) == 0 ? 0 : i64(x) ==> x (drop (select (i64.const 0) (local.get $x) (i64.eqz (local.get $x) ) )) ;; i64(x) != 0 ? 0 : i64(x) ==> 0 (drop (select (i64.const 0) (local.get $x) (i64.ne (local.get $x) (i64.const 0) ) )) ;; i64(x) == 0 ? i64(x) : 0 ==> {x, 0} (drop (select (local.get $x) (i64.const 0) (i64.eqz (local.get $x) ) )) (drop (select (local.get $x) (i64.const 0) (i64.eq (local.get $x) (i64.const 0) ) )) ) ;; CHECK: (func $select-with-same-arm-and-cond-skips (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-with-same-arm-and-cond-skips (param $x i32) (param $y i64) ;; skip not equals (drop (select (local.get $x) (i32.const 0) (i32.wrap_i64 (local.get $y)) )) (drop (select (i32.const 0) (i32.sub (i32.const 0) (local.get $x)) (local.get $x) )) ;; skip not zero (drop (select (local.get $x) (i32.const -1) (local.get $x) )) (drop (select (i32.const -1) (local.get $x) (local.get $x) )) (drop (select (i64.const -1) (local.get $y) (i64.ne (local.get $y) (i64.const 0) ) )) (drop (select (i64.const 0) (local.get $y) (i64.ne (local.get $y) (i64.const 1) ) )) ) ;; CHECK: (func $select-with-same-arm-and-cond-skips-side-effects (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (call $select-sign-64-lt ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (call $select-sign-64-lt ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: (call $select-sign-64-lt ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (call $select-sign-64-lt ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-with-same-arm-and-cond-skips-side-effects (param $x i32) (param $y i64) ;; skip with side effects (drop (select (i32.div_u (i32.const 10) (local.get $x)) (i32.const 0) (i32.div_u (i32.const 10) (local.get $x)) )) (drop (select (i32.const 0) (call $ne0) (call $ne0) )) (drop (select (call $select-sign-64-lt (local.get $y)) (i64.const 0) (i64.eqz (call $select-sign-64-lt (local.get $y)) ) )) (drop (select (i64.const 0) (call $select-sign-64-lt (local.get $y)) (i64.eqz (call $select-sign-64-lt (local.get $y)) ) )) ) ;; CHECK: (func $optimize-boolean-context (param $x i32) (param $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-boolean-context (param $x i32) (param $y i32) ;; 0 - x ==> x (if (i32.sub (i32.const 0) (local.get $x) ) (unreachable) ) (drop (select (local.get $x) (local.get $y) (i32.sub (i32.const 0) (local.get $x) ) )) ) ;; CHECK: (func $optimize-combined-by-and-equals-to-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-combined-by-and-equals-to-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; (i32(x) == 0) & (i32(y) == 0) ==> i32(x | y) == 0 (drop (i32.and (i32.eq (local.get $x) (i32.const 0)) (i32.eq (local.get $y) (i32.const 0)) )) ;; (i64(x) == 0) & (i64(y) == 0) ==> i64(x | y) == 0 (drop (i32.and (i64.eq (local.get $a) (i64.const 0)) (i64.eq (local.get $b) (i64.const 0)) )) ) ;; CHECK: (func $optimize-combined-by-or-noequal-to-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-combined-by-or-noequal-to-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; (i32(x) != 0) | (i32(y) != 0) ==> i32(x | y) != 0 (drop (i32.or (i32.ne (local.get $x) (i32.const 0)) (i32.ne (local.get $y) (i32.const 0)) )) ;; (i64(x) != 0) | (i64(y) != 0) ==> i64(x | y) != 0 (drop (i32.or (i64.ne (local.get $a) (i64.const 0)) (i64.ne (local.get $b) (i64.const 0)) )) ) ;; CHECK: (func $optimize-combined-by-or-gt-or-eq-to-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ge_s ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.ge_s ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-combined-by-or-gt-or-eq-to-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; (i32(x) >= 0) | (i32(y) >= 0) ==> i32(x & y) >= 0 (drop (i32.or (i32.ge_s (local.get $x) (i32.const 0)) (i32.ge_s (local.get $y) (i32.const 0)) )) ;; (i64(x) >= 0) | (i64(y) >= 0) ==> i64(x & y) >= 0 (drop (i32.or (i64.ge_s (local.get $a) (i64.const 0)) (i64.ge_s (local.get $b) (i64.const 0)) )) ;; skips ;; (i32(x) >= 0) | (i64(y) >= 0) ==> skip (drop (i32.or (i32.ge_s (local.get $x) (i32.const 0)) (i64.ge_s (local.get $a) (i64.const 0)) )) ) ;; CHECK: (func $optimize-combined-by-or-ne-to-minus-one (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-combined-by-or-ne-to-minus-one (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; (i32(x) != -1) | (i32(y) != -1) ==> i32(x & y) != -1 (drop (i32.or (i32.ne (local.get $x) (i32.const -1)) (i32.ne (local.get $y) (i32.const -1)) )) ;; (i64(x) != -1) | (i64(y) == -1) ==> i64(x & y) != -1 (drop (i32.or (i64.ne (local.get $a) (i64.const -1)) (i64.ne (local.get $b) (i64.const -1)) )) ;; skips ;; (i32(x) != -1) | (i64(y) != -1) ==> skip (drop (i32.or (i32.ne (local.get $x) (i32.const -1)) (i64.ne (local.get $a) (i64.const -1)) )) ) ;; CHECK: (func $optimize-combined-by-or-lessthan-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-combined-by-or-lessthan-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; (i32(x) < 0) | (i32(y) < 0) ==> i32(x | y) < 0 (drop (i32.or (i32.lt_s (local.get $x) (i32.const 0)) (i32.lt_s (local.get $y) (i32.const 0)) )) ;; (i64(x) < 0) | (i64(y) < 0) ==> i64(x | y) < 0 (drop (i32.or (i64.lt_s (local.get $a) (i64.const 0)) (i64.lt_s (local.get $b) (i64.const 0)) )) ;; skips ;; (i32(x) < 0) | (i64(a) < 0) ==> skip (drop (i32.or (i32.lt_s (local.get $x) (i32.const 0)) (i64.lt_s (local.get $a) (i64.const 0)) )) ;; (i32(x) <= 0) | (i32(y) < 0) ==> skip (drop (i32.or (i32.le_s (local.get $x) (i32.const 0)) (i32.lt_s (local.get $y) (i32.const 0)) )) ;; (i32(x) < 1) | (i32(y) < 0) ==> skip (drop (i32.or (i32.lt_s (local.get $x) (i32.const 1)) (i32.lt_s (local.get $y) (i32.const 0)) )) ) ;; CHECK: (func $optimize-combined-by-and-lessthan-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.lt_s ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-combined-by-and-lessthan-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; (i32(x) < 0) & (i32(y) < 0) ==> i32(x & y) < 0 (drop (i32.and (i32.lt_s (local.get $x) (i32.const 0)) (i32.lt_s (local.get $y) (i32.const 0)) )) ;; (i64(x) < 0) & (i64(y) < 0) ==> i64(x & y) < 0 (drop (i32.and (i64.lt_s (local.get $a) (i64.const 0)) (i64.lt_s (local.get $b) (i64.const 0)) )) ) ;; CHECK: (func $optimize-combined-by-and-greatequal-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ge_s ;; CHECK-NEXT: (i64.or ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.ge_s ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-combined-by-and-greatequal-zero (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; (i32(x) >= 0) & (i32(y) >= 0) ==> i32(x | y) >= 0 (drop (i32.and (i32.ge_s (local.get $x) (i32.const 0)) (i32.ge_s (local.get $y) (i32.const 0)) )) ;; (i64(x) >= 0) & (i64(y) >= 0) ==> i64(x | y) >= 0 (drop (i32.and (i64.ge_s (local.get $a) (i64.const 0)) (i64.ge_s (local.get $b) (i64.const 0)) )) ;; skips ;; (i32(x) >= 0) & (i64(y) >= 0) ==> skip (drop (i32.and (i32.ge_s (local.get $x) (i32.const 0)) (i64.ge_s (local.get $a) (i64.const 0)) )) ) ;; CHECK: (func $optimize-combined-by-and-equal-neg-one (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (local.get $b) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $a) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-combined-by-and-equal-neg-one (param $x i32) (param $y i32) (param $a i64) (param $b i64) ;; (i32(x) == -1) & (i32(y) == -1) ==> i32(x & y) == -1 (drop (i32.and (i32.eq (local.get $x) (i32.const -1)) (i32.eq (local.get $y) (i32.const -1)) )) ;; (i64(x) == -1) & (i64(y) == -1) ==> i64(x & y) == -1 (drop (i32.and (i64.eq (local.get $a) (i64.const -1)) (i64.eq (local.get $b) (i64.const -1)) )) ;; skips ;; (i32(x) == -1) & (i64(y) == -1) ==> skip (drop (i32.and (i32.eq (local.get $x) (i32.const -1)) (i64.eq (local.get $a) (i64.const -1)) )) ) ;; CHECK: (func $optimize-relationals (param $x i32) (param $y i32) (param $X i64) (param $Y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $X) ;; CHECK-NEXT: (local.get $Y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eq ;; CHECK-NEXT: (local.get $X) ;; CHECK-NEXT: (local.get $Y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.ne ;; CHECK-NEXT: (local.get $X) ;; CHECK-NEXT: (local.get $Y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.le_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block $block23 (result i32) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-relationals (param $x i32) (param $y i32) (param $X i64) (param $Y i64) ;; eqz(x + 0x7FFFFFFF) -> x == -2147483647 (drop (i32.eqz (i32.add (local.get $x) (i32.const 0x7FFFFFFF) ) )) ;; eqz(x + 0x80000000) -> x == -2147483648 (drop (i32.eqz (i32.add (local.get $x) (i32.const 0x80000000) ) )) ;; eqz(x + 0x80000001) -> x == 2147483647 (drop (i32.eqz (i32.add (local.get $x) (i32.const 0x80000001) ) )) ;; eqz(x - y) (drop (i32.eqz (i32.sub (local.get $x) (local.get $y) ) )) (drop (i64.eqz (i64.sub (local.get $X) (local.get $Y) ) )) ;; x - y == 0 (drop (i32.eq (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) (drop (i64.eq (i64.sub (local.get $X) (local.get $Y) ) (i64.const 0) )) ;; x - y != 0 (drop (i32.ne (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) (drop (i64.ne (i64.sub (local.get $X) (local.get $Y) ) (i64.const 0) )) ;; i32(x - y) > 0 -> x > y (drop (i32.gt_s (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) ;; i32(x - y) >= 0 -> x >= y (drop (i32.ge_s (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) ;; u32(x - y) > 0 -> x != y (drop (i32.gt_u (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) ;; u32(x - y) >= 0 -> 1 (drop (i32.ge_u (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) ;; u64(x - y) >= 0 -> i32(1) (drop (i64.ge_u (i64.sub (local.get $X) (local.get $Y) ) (i64.const 0) )) ;; i32(x - y) < 0 -> x < y (drop (i32.lt_s (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) ;; i32(x - y) <= 0 -> x <= y (drop (i32.le_s (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) ;; u32(x - y) < 0 -> 0 (drop (i32.lt_u (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) ;; u64(x - y) < 0 -> i32(0) (drop (i64.lt_u (i64.sub (local.get $X) (local.get $Y) ) (i64.const 0) )) ;; u32(x - y) <= 0 -> x == y (drop (i32.le_u (i32.sub (local.get $x) (local.get $y) ) (i32.const 0) )) ;; i32(x - 0x80000000) == 0 -> x == 0x80000000 (drop (i32.eq (i32.sub (local.get $x) (i32.const 0x80000000) ) (i32.const 0) )) ;; i32(x - 0x80000000) != 0 -> x == 0x80000000 (drop (i32.ne (i32.sub (local.get $x) (i32.const 0x80000000) ) (i32.const 0) )) ;; i32(x - { 0x80000000 }) < 0 -> skip (drop (i32.lt_s (i32.sub (local.get $x) (i32.const 0x80000000) ) (i32.const 0) )) ;; i32(x - { 0x80000000 }) >= 0 -> skip (drop (i32.ge_s (i32.sub (local.get $x) (i32.const 0x80000000) ) (i32.const 0) )) ;; i32(x - { 0x80000000 }) > 0 -> skip (drop (i32.gt_s (i32.sub (local.get $x) (block (result i32) (i32.const 0x80000000) ) ) (i32.const 0) )) ;; i32(x - { 0x80000000 }) <= 0 -> skip (drop (i32.gt_s (i32.sub (local.get $x) (block (result i32) (i32.const 0x80000000) ) ) (i32.const 0) )) ) ;; CHECK: (func $unsigned-context (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.div_s ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 9223372036854775807) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.div_s ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 9223372036854775807) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ge_s ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unsigned-context (param $x i32) (param $y i64) (drop (i32.div_s (i32.and (local.get $x) (i32.const 0x7fffffff) ) (i32.const 3) )) (drop (i32.div_s (i32.and (local.get $x) (i32.const 0x7fffffff) ) (i32.const -3) ;; skip )) (drop (i32.div_s (i32.and (local.get $x) (i32.const 0x7fffffff) ) (i32.const 0x80000000) ;; skip )) (drop (i64.div_s (i64.and (local.get $y) (i64.const 0x7fffffffffffffff) ) (i64.const 2) )) (drop (i64.div_s (i64.and (local.get $y) (i64.const 0x7fffffffffffffff) ) (i64.const -1) ;; skip )) (drop (i32.rem_s (i32.and (local.get $x) (i32.const 0x7fffffff) ) (i32.const 3) )) (drop (i32.shr_s (i32.and (local.get $x) (i32.const 0x7fffffff) ) (i32.const 7) )) (drop (i32.ge_s (i32.and (local.get $x) (i32.const 0x7fffffff) ) (i32.const 7) )) (drop (i32.ge_s (i32.and (local.get $x) (i32.const 0x7fffffff) ) (i32.const -7) ;; skip )) ) ;; CHECK: (func $optimize-float-mul-by-two (param $0 f64) (param $1 f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.add ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (call $tee-with-unreachable-value) ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.const -2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-float-mul-by-two (param $0 f64) (param $1 f32) (drop (f64.mul (local.get $0) (f64.const 2) )) (drop (f32.mul (local.get $1) (f32.const 2) )) (drop (f64.mul (call $tee-with-unreachable-value) ;; side effect (f64.const 2) )) (drop (f64.mul (f64.neg (local.get $0)) ;; complex expression (f64.const 2) )) ) ;; CHECK: (func $duplicate-elimination (param $x i32) (param $y i32) (param $z i32) (param $w f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.ceil ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.floor ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.trunc ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.nearest ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.nearest ;; CHECK-NEXT: (f64.trunc ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.trunc ;; CHECK-NEXT: (f64.nearest ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.neg ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (i32.rem_s ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.rem_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (i32.xor ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $duplicate-elimination (param $x i32) (param $y i32) (param $z i32) (param $w f64) ;; unary (drop (f64.abs (f64.abs (local.get $w)))) (drop (f64.ceil (f64.ceil (local.get $w)))) (drop (f64.floor (f64.floor (local.get $w)))) (drop (f64.trunc (f64.trunc (local.get $w)))) (drop (f64.nearest (f64.nearest (local.get $w)))) (drop (f64.nearest (f64.trunc (local.get $w)))) ;; skip (drop (f64.trunc (f64.nearest (local.get $w)))) ;; skip (drop (f64.neg (f64.neg (local.get $w)))) (drop (f64.neg (f64.neg (f64.neg (local.get $w))))) (drop (f64.neg (f64.neg (f64.neg (f64.neg (local.get $w)))))) (drop (i32.eqz (i32.eqz (local.get $x)))) ;; skip (drop (i32.eqz (i32.eqz (i32.eqz (local.get $x))))) (drop (i32.eqz (i32.eqz (i64.eqz (i64.const 1))))) (drop (i32.eqz (i32.eqz (i32.ne (local.get $x) (i32.const 2))))) (drop (i32.eqz (i32.eqz (i32.and (local.get $x) (i32.const 1) ) ) )) ;; binary ;; ((signed)x % y) % y (drop (i32.rem_s (i32.rem_s (local.get $x) (local.get $y) ) (local.get $y) )) ;; ((unsigned)x % y) % y (drop (i32.rem_u (i32.rem_u (local.get $x) (local.get $y) ) (local.get $y) )) ;; 0 - (0 - y) (drop (i32.sub (i32.const 0) (i32.sub (i32.const 0) (local.get $y) ) )) ;; x - (x - y) (drop (i32.sub (local.get $x) (i32.sub (local.get $x) (local.get $y) ) )) ;; y - (x - y) - skip (drop (i32.sub (local.get $y) (i32.sub (local.get $x) (local.get $y) ) )) ;; x ^ (x ^ y) (drop (i32.xor (local.get $x) (i32.xor (local.get $x) (local.get $y) ) )) ;; x ^ (y ^ x) (drop (i32.xor (local.get $x) (i32.xor (local.get $y) (local.get $x) ) )) ;; (x ^ y) ^ x (drop (i32.xor (i32.xor (local.get $x) (local.get $y) ) (local.get $x) )) ;; (y ^ x) ^ x (drop (i32.xor (i32.xor (local.get $y) (local.get $x) ) (local.get $x) )) ;; x ^ (x ^ x) (drop (i32.xor (local.get $x) (i32.xor (local.get $x) (local.get $x) ) )) ;; x & (x & y) (drop (i32.and (local.get $x) (i32.and (local.get $x) (local.get $y) ) )) ;; x & (y & x) (drop (i32.and (local.get $x) (i32.and (local.get $y) (local.get $x) ) )) ;; (x & y) & x (drop (i32.and (i32.and (local.get $x) (local.get $y) ) (local.get $x) )) ;; (y & x) & x (drop (i32.and (i32.and (local.get $y) (local.get $x) ) (local.get $x) )) ;; x | (x | y) (drop (i32.or (local.get $x) (i32.or (local.get $x) (local.get $y) ) )) ;; x | (y | x) (drop (i32.or (local.get $x) (i32.or (local.get $y) (local.get $x) ) )) ;; (x | y) | x (drop (i32.or (i32.or (local.get $x) (local.get $y) ) (local.get $x) )) ;; (y | x) | x (drop (i32.or (i32.or (local.get $y) (local.get $x) ) (local.get $x) )) ;; (y | x) | z - skip (drop (i32.or (i32.or (local.get $y) (local.get $x) ) (local.get $z) )) ;; (z | x) | y - skip (drop (i32.or (i32.or (local.get $z) (local.get $x) ) (local.get $y) )) ;; (SE() | x) | x (drop (i32.or (i32.or (call $ne0) ;; side effect (local.get $x) ) (local.get $x) )) ;; (x | SE()) | SE() - skip (drop (i32.or (i32.or (local.get $x) (call $ne0) ;; side effect ) (call $ne0) ;; side effect )) ;; x | (SE() | x) (drop (i32.or (local.get $x) (i32.or (local.get $x) (call $ne0) ;; side effect ) )) ;; SE() | (x | SE()) - skip (drop (i32.or (call $ne0) ;; side effect (i32.or (call $ne0) ;; side effect (local.get $x) ) )) ;; (y % x) % y - skip (drop (i32.rem_s (i32.rem_s (local.get $y) (local.get $x) ) (local.get $y) )) ;; y % (x % y) - skip (drop (i32.rem_u (local.get $y) (i32.rem_u (local.get $x) (local.get $y) ) )) ;; x | (y | x) where x and y cannot be reordered - skip (drop (i32.or (local.get $x) (i32.or (local.tee $x (i32.const 1) ) (local.get $x) ) ) ) (drop (i32.or (i32.or (local.get $x) (local.tee $x (i32.const 1) ) ) (local.get $x) ) ) ;; x ^ (y ^ x) where x and y cannot be reordered - skip (drop (i32.xor (local.get $x) (i32.xor (local.tee $x (i32.const 1) ) (local.get $x) ) ) ) (drop (i32.xor (i32.xor (local.get $x) (local.tee $x (i32.const 1) ) ) (local.get $x) ) ) ) ;; i32.wrap_i64(i64.extend_i32_s(x)) ==> x ;; i32.wrap_i64(i64.extend_i32_u(x)) ==> x ;; CHECK: (func $sign-and-zero-extention-elimination-1 (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sign-and-zero-extention-elimination-1 (param $x i32) (drop (i32.wrap_i64 (i64.extend_i32_s (local.get $x)))) (drop (i32.wrap_i64 (i64.extend_i32_u (local.get $x)))) ) ;; i64.extend_i32_u(i32.wrap_i64(x)) => x, where maxBits(x) <= 32 ;; i64.extend_i32_s(i32.wrap_i64(x)) => x, where maxBits(x) <= 31 ;; CHECK: (func $sign-and-zero-extention-elimination-2 (param $x i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 4294967295) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_s ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_s ;; CHECK-NEXT: (i32.wrap_i64 ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 4294967295) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sign-and-zero-extention-elimination-2 (param $x i64) (drop (i64.extend_i32_u (i32.wrap_i64 (i64.and (local.get $x) (i64.const 0x00000000FFFFFFFF))))) (drop (i64.extend_i32_s (i32.wrap_i64 (i64.and (local.get $x) (i64.const 0x000000007FFFFFFF))))) (drop (i64.extend_i32_u (i32.wrap_i64 (local.get $x)))) ;; skip (drop (i64.extend_i32_s (i32.wrap_i64 (local.get $x)))) ;; skip (drop (i64.extend_i32_s (i32.wrap_i64 (i64.and (local.get $x) (i64.const 0x00000000FFFFFFFF))))) ;; skip ) ;; CHECK: (func $optimize-shifts (param $x i32) (param $y i32) (param $z i64) (param $w i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shr_s ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shl ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: (i64.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.shr_u ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (i64.and ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: (i64.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-shifts (param $x i32) (param $y i32) (param $z i64) (param $w i64) ;; i32 (drop (i32.shl (local.get $x) (i32.const 32) )) (drop (i32.shr_s (local.get $x) (i32.const 32) )) (drop (i32.shr_u (local.get $x) (i32.const 64) )) (drop (i32.rotl (local.get $x) (i32.const 64) )) (drop (i32.rotr (local.get $x) (i32.const 64) )) ;; i64 (drop (i64.shl (local.get $z) (i64.const 64) )) (drop (i64.shr_s (local.get $z) (i64.const 64) )) (drop (i64.shr_u (local.get $z) (i64.const 128) )) (drop (i64.rotl (local.get $z) (i64.const 128) )) (drop (i64.rotr (local.get $z) (i64.const 128) )) ;; i32 (drop (i32.shl (local.get $x) (i32.and (local.get $y) (i32.const 31) ) )) (drop (i32.shl (local.get $x) (i32.and (local.get $y) (i32.const 63) ) )) (drop (i32.shr_s (local.get $x) (i32.and (local.get $y) (i32.const 31) ) )) (drop (i32.shr_u (local.get $x) (i32.and (local.get $y) (i32.const 31) ) )) ;; i64 (drop (i64.shl (local.get $z) (i64.and (local.get $w) (i64.const 63) ) )) (drop (i64.shl (local.get $z) (i64.and (local.get $w) (i64.const 127) ) )) (drop (i64.shr_s (local.get $z) (i64.and (local.get $w) (i64.const 63) ) )) (drop (i64.shr_u (local.get $z) (i64.and (local.get $w) (i64.const 63) ) )) ;; i32(x) >> (y & 32) -> x (drop (i32.shr_u (local.get $x) (i32.and (local.get $y) (i32.const 32) ) )) ;; i64(x) >> (y & 64) -> x (drop (i64.shr_u (local.get $z) (i64.and (local.get $w) (i64.const 128) ) )) ;; skip (drop (i64.shl (local.get $z) (i64.and (local.get $w) (i64.const 32) ) )) ;; skip (drop (i64.shr_u (local.get $z) (i64.and (local.get $w) (i64.const 31) ) )) ) ;; CHECK: (func $optimize-float-points (param $x0 f64) (param $x1 f64) (param $y0 f32) (param $y1 f32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $y1) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (f32.sub ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $y1) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.mul ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (f32.div ;; CHECK-NEXT: (f32.const 0) ;; CHECK-NEXT: (local.get $y0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.abs ;; CHECK-NEXT: (f64.div ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.add ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: (local.get $x0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $optimize-float-points (param $x0 f64) (param $x1 f64) (param $y0 f32) (param $y1 f32) ;; abs(x) * abs(x) ==> x * x (drop (f64.mul (f64.abs (local.get $x0)) (f64.abs (local.get $x0)) )) (drop (f32.mul (f32.abs (local.get $y0)) (f32.abs (local.get $y0)) )) (drop (f64.mul (f64.abs (f64.add (local.get $x0) (local.get $x1))) (f64.abs (f64.add (local.get $x0) (local.get $x1))) )) ;; abs(x) * abs(y) ==> abs(x * y) (drop (f64.mul (f64.abs (local.get $x0)) (f64.abs (local.get $x1)) )) (drop (f32.mul (f32.abs (local.get $y1)) (f32.abs (local.get $y0)) )) (drop (f64.mul (f64.abs (local.get $x0)) (f64.abs (f64.const 0)) ;; skip )) (drop (f32.mul (f32.abs (f32.const 0)) ;; skip (f32.abs (local.get $y0)) )) (drop (f64.mul (f64.abs (f64.add (local.get $x0) (local.get $x1))) (f64.abs (f64.add (local.get $x0) (local.get $x0))) )) ;; abs(-x) ==> abs(x) (drop (f64.abs (f64.neg (local.get $x0)) )) (drop (f32.abs (f32.neg (local.get $y0)) )) ;; abs(0 - x) ==> skip for non-fast math (drop (f64.abs (f64.sub (f64.const 0) (local.get $x0) ) )) (drop (f32.abs (f32.sub (f32.const 0) (local.get $y0) ) )) ;; abs(x) / abs(x) ==> x / x (drop (f64.div (f64.abs (local.get $x0)) (f64.abs (local.get $x0)) )) (drop (f32.div (f32.abs (local.get $y0)) (f32.abs (local.get $y0)) )) (drop (f64.div (f64.abs (f64.add (local.get $x0) (local.get $x1))) (f64.abs (f64.add (local.get $x0) (local.get $x1))) )) ;; abs(x) / abs(y) ==> abs(x / y) (drop (f64.div (f64.abs (local.get $x0)) (f64.abs (local.get $x1)) )) (drop (f32.div (f32.abs (local.get $y1)) (f32.abs (local.get $y0)) )) ;; abs(x * x) ==> x * x (drop (f64.abs (f64.mul (local.get $x0) (local.get $x0) ) )) (drop (f32.abs (f32.mul (local.get $y0) (local.get $y0) ) )) ;; abs(x / x) ==> x / x (drop (f64.abs (f64.div (local.get $x0) (local.get $x0) ) )) (drop (f32.abs (f32.div (local.get $y0) (local.get $y0) ) )) (drop (f64.div (f64.abs (local.get $x0)) (f64.abs (f64.const 0)) ;; skip )) (drop (f32.div (f32.abs (f32.const 0)) ;; skip (f32.abs (local.get $y0)) )) (drop (f64.div (f64.abs (f64.add (local.get $x0) (local.get $x1))) (f64.abs (f64.add (local.get $x0) (local.get $x0))) )) ) ;; CHECK: (func $ternary (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary (param $x i32) (param $y i32) (drop (select (i32.const 0) (i32.eqz (local.get $y) ) (local.get $x) ) ) (drop (select (i32.const 1) (i32.eqz (local.get $y) ) (local.get $x) ) ) (drop (select (i32.eqz (local.get $y) ) (i32.const 0) (local.get $x) ) ) (drop (select (i32.eqz (local.get $y) ) (i32.const 1) (local.get $x) ) ) ;; if works too (drop (if (result i32) (local.get $x) (i32.eqz (local.get $y) ) (i32.const 1) ) ) ) ;; CHECK: (func $ternary-i64-0 (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (if (result i64) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-i64-0 (param $x i32) (param $y i64) (drop (if (result i32) (local.get $x) (i32.const 0) (i64.eqz (local.get $y) ) ) ) ) ;; CHECK: (func $ternary-i64-1 (param $x i32) (param $y i64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (if (result i64) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-i64-1 (param $x i32) (param $y i64) (drop (if (result i32) (local.get $x) (i64.eqz (local.get $y) ) (i32.const 1) ) ) ) ;; CHECK: (func $ternary-no (param $x i32) (param $y i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-no (param $x i32) (param $y i32) (drop (select (i32.const 2) ;; only 0 and 1 work (i32.eqz (local.get $y) ) (local.get $x) ) ) ) ;; CHECK: (func $ternary-no-unreachable-1 (param $x i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-no-unreachable-1 (param $x i32) (result i32) (if (result i32) (local.get $x) ;; one arm is an eqz, the other is 0 or 1, so we can put an eqz on the ;; outside in theory, but we'd need to be careful with the unreachable ;; type here. ignore this case, as DCE is the proper optimization anyhow. (i32.eqz (unreachable) ) (i32.const 0) ) ) ;; CHECK: (func $ternary-no-unreachable-2 (param $x i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-no-unreachable-2 (param $x i32) (result i32) (if (result i32) (local.get $x) ;; as before, but flipped (i32.const 0) (i32.eqz (unreachable) ) ) ) ;; CHECK: (func $ternary-identical-arms (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms (param $x i32) (param $y i32) (param $z i32) (drop (select (i32.eqz (local.get $x)) (i32.eqz (local.get $y)) (local.get $z) ) ) ) ;; CHECK: (func $ternary-identical-arms-if (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-if (param $x i32) (param $y i32) (param $z i32) (drop (if (result i32) (local.get $z) (i32.eqz (local.get $x)) (i32.eqz (local.get $y)) ) ) ) ;; CHECK: (func $ternary-identical-arms-type-change (param $x f64) (param $y f64) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.demote_f64 ;; CHECK-NEXT: (f64.floor ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-type-change (param $x f64) (param $y f64) (param $z i32) (drop ;; the if's type begins as f32, but after moving code out it will be ;; f64 (if (result f32) (local.get $z) (f32.demote_f64 (f64.floor (local.get $x))) (f32.demote_f64 (f64.floor (local.get $y))) ) ) ) ;; CHECK: (func $ternary-identical-arms-more (param $x f32) (param $y f32) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.floor ;; CHECK-NEXT: (f32.neg ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-more (param $x f32) (param $y f32) (param $z i32) (drop (select (f32.floor (f32.neg (local.get $x))) (f32.floor (f32.neg (local.get $y))) (local.get $z) ) ) ) ;; CHECK: (func $ternary-identical-arms-morer (param $x f32) (param $y f32) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.abs ;; CHECK-NEXT: (f32.floor ;; CHECK-NEXT: (f32.neg ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-morer (param $x f32) (param $y f32) (param $z i32) (drop (select (f32.abs (f32.floor (f32.neg (local.get $x)))) (f32.abs (f32.floor (f32.neg (local.get $y)))) (local.get $z) ) ) ) ;; CHECK: (func $ternary-identical-arms-and-type-is-none (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-and-type-is-none (param $x i32) (param $y i32) (param $z i32) (if (local.get $z) (drop (i32.eqz (local.get $x))) (drop (i32.eqz (local.get $y))) ) ) ;; CHECK: (func $ternary-identical-arms-and-type-is-none-child-types-mismatch (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.const 2.34) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-and-type-is-none-child-types-mismatch (param $x i32) (param $y i32) (param $z i32) (if (local.get $z) ;; the drop cannot be hoisted out, since the children's type mismatch ;; would not allow us to give a proper type to the if. (drop (i32.const 1)) (drop (f64.const 2.34)) ) ) ;; CHECK: (func $ternary-identical-arms-but-block (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block24 (result i32) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-but-block (param $x i32) (param $y i32) (param $z i32) (drop (select ;; identical arms, but they are control flow structures (block (result i32) (i32.eqz (local.get $x)) ) (block (result i32) (i32.eqz (local.get $y)) ) (local.get $z) ) ) ) ;; CHECK: (func $ternary-identical-arms-but-binary (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-but-binary (param $x i32) (param $y i32) (param $z i32) (drop (select ;; identical arms, but they are binaries, not unaries (i32.add (local.get $x) (local.get $x) ) (i32.add (local.get $y) (local.get $y) ) (local.get $z) ) ) ) ;; CHECK: (func $ternary-identical-arms-br_if-same (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-br_if-same (param $x i32) (param $y i32) (param $z i32) (block $block (if (local.get $z) ;; two br_ifs with the same target are shallowly identical (br_if $block (local.get $x) ) (br_if $block (local.get $y) ) ) ) ) ;; CHECK: (func $ternary-identical-arms-br_if-different (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (block $block2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (br_if $block1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $block2 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-br_if-different (param $x i32) (param $y i32) (param $z i32) (block $block1 (block $block2 (if (local.get $z) ;; two br_ifs with different targets are not shallowly identical (br_if $block1 (local.get $x) ) (br_if $block2 (local.get $y) ) ) ) ) ) ;; CHECK: (func $ternary-identical-arms-return (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (return ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-return (param $x i32) (param $y i32) (param $z i32) (result i32) (block $block (if (local.get $z) (return (local.get $x) ) (return (local.get $y) ) ) ) ) ;; CHECK: (func $ternary-identical-arms-return-select (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (select ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-return-select (param $x i32) (param $y i32) (param $z i32) (result i32) (block $block ;; we cannot optimize a select currently as the return has side effects (select (return (local.get $x) ) (return (local.get $y) ) (local.get $z) ) ) ) ;; CHECK: (func $send-i32 (param $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $send-i32 (param i32)) ;; CHECK: (func $ternary-identical-arms-call (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (call $send-i32 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-call (param $x i32) (param $y i32) (param $z i32) (if (local.get $z) (call $send-i32 (local.get $x) ) (call $send-i32 (local.get $y) ) ) ) ;; CHECK: (func $if-dont-change-to-unreachable (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-dont-change-to-unreachable (param $x i32) (param $y i32) (param $z i32) (result i32) ;; if we move the returns outside, we'd become unreachable; avoid that. (if (result i32) (local.get $x) (return (local.get $y) ) (return (local.get $z) ) ) ) ;; f32.reinterpret_i32(i32.load(x)) => f32.load(x) ;; f64.reinterpret_i64(i64.load(x)) => f64.load(x) ;; i32.reinterpret_f32(f32.load(x)) => i32.load(x) ;; i64.reinterpret_f64(f64.load(x)) => i64.load(x) ;; CHECK: (func $simplify_reinterpret_and_load (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.load ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f32.reinterpret_i32 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (f64.reinterpret_i64 ;; CHECK-NEXT: (i64.load32_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $simplify_reinterpret_and_load (param $x i32) (drop (f32.reinterpret_i32 (i32.load (local.get $x)))) (drop (f64.reinterpret_i64 (i64.load (local.get $x)))) (drop (i32.reinterpret_f32 (f32.load (local.get $x)))) (drop (i64.reinterpret_f64 (f64.load (local.get $x)))) (drop (f32.reinterpret_i32 (i32.load8_s (local.get $x)))) ;; skip (drop (f64.reinterpret_i64 (i64.load32_u (local.get $x)))) ;; skip ) ;; f32.store(y, f32.reinterpret_i32(x)) => i32.store(y, x) ;; f64.store(y, f64.reinterpret_i64(x)) => i64.store(y, x) ;; i32.store(y, i32.reinterpret_f32(x)) => f32.store(y, x) ;; i64.store(y, i64.reinterpret_f64(x)) => f64.store(y, x) ;; CHECK: (func $simplify_store_and_reinterpret (param $x i32) (param $y i64) (param $z f32) (param $w f64) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.store ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: (i32.reinterpret_f32 ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.store32 ;; CHECK-NEXT: (i32.const 44) ;; CHECK-NEXT: (i64.reinterpret_f64 ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $simplify_store_and_reinterpret (param $x i32) (param $y i64) (param $z f32) (param $w f64) (f32.store (i32.const 8) (f32.reinterpret_i32 (local.get $x))) (f64.store (i32.const 16) (f64.reinterpret_i64 (local.get $y))) (i32.store (i32.const 24) (i32.reinterpret_f32 (local.get $z))) (i64.store (i32.const 32) (i64.reinterpret_f64 (local.get $w))) (i32.store8 (i32.const 40) (i32.reinterpret_f32 (local.get $z))) ;; skip (i64.store32 (i32.const 44) (i64.reinterpret_f64 (local.get $w))) ;; skip ) ;; i32.reinterpret_f32(f32.reinterpret_i32(x)) => x ;; i64.reinterpret_f64(f64.reinterpret_i64(x)) => x ;; f32.reinterpret_i32(i32.reinterpret_f32(x)) => x ;; f64.reinterpret_i64(i64.reinterpret_f64(x)) => x ;; CHECK: (func $eliminate_reinterpret_reinterpret (param $x i32) (param $y i64) (param $z f32) (param $w f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $w) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $eliminate_reinterpret_reinterpret (param $x i32) (param $y i64) (param $z f32) (param $w f64) (drop (i32.reinterpret_f32 (f32.reinterpret_i32 (local.get $x)))) (drop (i64.reinterpret_f64 (f64.reinterpret_i64 (local.get $y)))) (drop (f32.reinterpret_i32 (i32.reinterpret_f32 (local.get $z)))) (drop (f64.reinterpret_i64 (i64.reinterpret_f64 (local.get $w)))) ) ;; u64(i32.load(_8|_16)(_u|_s)(x)) => i64.load(_8|_16|_32)(_u|_s)(x) ;; except: ;; i64.extend_i32_u(i32.load8_s(x)) and ;; i64.extend_i32_u(i32.load16_s(x)) ;; CHECK: (func $combine_load_and_extend_u (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load8_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load16_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load32_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.extend_i32_u ;; CHECK-NEXT: (i32.load16_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $combine_load_and_extend_u (param $x i32) (drop (i64.extend_i32_u (i32.load8_u (local.get $x)))) (drop (i64.extend_i32_u (i32.load16_u (local.get $x)))) (drop (i64.extend_i32_u (i32.load (local.get $x)))) ;; skips (drop (i64.extend_i32_u (i32.load8_s (local.get $x)))) (drop (i64.extend_i32_u (i32.load16_s (local.get $x)))) ) ;; i64(i32.load(_8|_16)(_u|_s)(x)) => i64.load(_8|_16|_32)(_u|_s)(x) ;; CHECK: (func $combine_load_and_extend_s (param $x i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load8_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load16_u ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load8_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load16_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i64.load32_s ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $combine_load_and_extend_s (param $x i32) (drop (i64.extend_i32_s (i32.load8_u (local.get $x)))) (drop (i64.extend_i32_s (i32.load16_u (local.get $x)))) (drop (i64.extend_i32_s (i32.load8_s (local.get $x)))) (drop (i64.extend_i32_s (i32.load16_s (local.get $x)))) (drop (i64.extend_i32_s (i32.load (local.get $x)))) ) ) binaryen-version_108/test/lit/passes/poppify-globals.wast000066400000000000000000000036371423707623100240320ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; TODO: enable validation ;; RUN: wasm-opt %s --poppify --no-validation -all -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_i32_i64_f32 (func (result i32 i64 f32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $foo (mut i32) (i32.const 0)) (global $foo (mut i32) (i32.const 0)) ;; CHECK: (global $tuple$1 f64 (f64.const 0)) (global $tuple$1 f64 (f64.const 0)) ;; interfering name! (global $tuple (mut (i32 i64 f32)) (tuple.make (global.get $foo) (i64.const 1) (f32.const 2)) ) (global $other-tuple (i32 i64 f32) (global.get $tuple)) ;; CHECK: (global $tuple$2 (mut f32) (f32.const 2)) ;; CHECK: (global $tuple$1_0 (mut i64) (i64.const 1)) ;; CHECK: (global $tuple$0 (mut i32) (global.get $foo)) ;; CHECK: (global $other-tuple$2 f32 (global.get $tuple$2)) ;; CHECK: (global $other-tuple$1 i64 (global.get $tuple$1_0)) ;; CHECK: (global $other-tuple$0 i32 (global.get $tuple$0)) ;; CHECK: (func $global-get-tuple (result i32 i64 f32) ;; CHECK-NEXT: (global.get $tuple$0) ;; CHECK-NEXT: (global.get $tuple$1_0) ;; CHECK-NEXT: (global.get $tuple$2) ;; CHECK-NEXT: ) (func $global-get-tuple (result i32 i64 f32) (global.get $tuple) ) ;; CHECK: (func $global-set-tuple ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: (global.set $tuple$2 ;; CHECK-NEXT: (pop f32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $tuple$1_0 ;; CHECK-NEXT: (pop i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $tuple$0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $global-set-tuple (global.set $tuple (tuple.make (i32.const 0) (i64.const 1) (f32.const 2) ) ) ) ) binaryen-version_108/test/lit/passes/poppify.wast000066400000000000000000000245261423707623100224110ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; TODO: enable validation ;; RUN: wasm-opt %s --poppify --no-validation -all -S -o - | filecheck %s (module ;; CHECK: (tag $e (param i32)) (tag $e (param i32)) ;; CHECK: (func $id (param $x i32) (result i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) (func $id (param $x i32) (result i32) (local.get $x) ) ;; CHECK: (func $add (param $x i32) (param $y i32) (result i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $add (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) ;; CHECK: (func $expr-tree (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $expr-tree (result i32) (i32.add (i32.mul (i32.const 0) (i32.const 1) ) (i32.mul (i32.const 2) (i32.const 3) ) ) ) ;; CHECK: (func $block (result i32) ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block (result i32) (block i32 (nop) (i32.const 0) ) ) ;; CHECK: (func $nested (result i32) ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (block $block0 (result i32) ;; CHECK-NEXT: (block $block1 (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested (result i32) (block i32 (block i32 (block i32 (i32.const 0) ) ) ) ) ;; CHECK: (func $child-blocks (result i32) ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (block $block2 (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block3 (result i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $child-blocks (result i32) (block (result i32) (i32.add (block (result i32) (i32.const 0) ) (block (result i32) (i32.const 1) ) ) ) ) ;; CHECK: (func $block-br (result i32) ;; CHECK-NEXT: (block $l (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (br $l ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $block-br (result i32) (block $l i32 (nop) (br $l (i32.const 0) ) ) ) ;; CHECK: (func $loop ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $loop (loop $l (br $l) ) ) ;; CHECK: (func $if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if (if (i32.const 0) (nop) ) ) ;; CHECK: (func $if-else (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else (result i32) (if i32 (i32.const 0) (i32.const 1) (i32.const 2) ) ) ;; CHECK: (func $try-catch (result i32) ;; CHECK-NEXT: (try $try (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-catch (result i32) (try i32 (do (throw $e (i32.const 0) ) ) (catch $e (pop i32) ) (catch_all (i32.const 1) ) ) ) ;; CHECK: (func $try-delegate (result i32) ;; CHECK-NEXT: (try $l0 (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-delegate (result i32) (try $l0 i32 (do (try (do (throw $e (i32.const 0) ) ) (delegate $l0) ) ) (catch $e (pop i32) ) ) ) ;; CHECK: (func $tuple (result i32 i64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: ) (func $tuple (result i32 i64) (tuple.make (i32.const 0) (i64.const 1) ) ) ;; CHECK: (func $extract-first (result i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop f32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $extract-first (result i32) (tuple.extract 0 (tuple.make (i32.const 0) (i64.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $extract-middle (result i64) ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop f32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $extract-middle (result i64) (tuple.extract 1 (tuple.make (i32.const 0) (i64.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $extract-last (result f32) ;; CHECK-NEXT: (local $0 f32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop f32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) (func $extract-last (result f32) (tuple.extract 2 (tuple.make (i32.const 0) (i64.const 1) (f32.const 2) ) ) ) ;; CHECK: (func $drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $drop (drop (i32.const 0) ) ) ;; CHECK: (func $drop-tuple ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $drop-tuple (drop (tuple.make (i32.const 0) (i64.const 1) ) ) ) ;; CHECK: (func $local-get-tuple (result i32 i64) ;; CHECK-NEXT: (local $x (i32 i64)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) (func $local-get-tuple (result i32 i64) (local $x (i32 i64)) (local.get $x) ) ;; CHECK: (func $local-set ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-set (local $x i32) (local.set $x (i32.const 0) ) ) ;; CHECK: (func $local-set-tuple ;; CHECK-NEXT: (local $x (i32 i64)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (pop i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-set-tuple (local $x (i32 i64)) (local.set $x (tuple.make (i32.const 0) (i64.const 1) ) ) ) ;; CHECK: (func $local-tee-tuple (result i32 i64) ;; CHECK-NEXT: (local $x (i32 i64)) ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (pop i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) (func $local-tee-tuple (result i32 i64) (local $x (i32 i64)) (local.tee $x (tuple.make (i32.const 0) (i64.const 1) ) ) ) ;; CHECK: (func $break-tuple (result i32 i64) ;; CHECK-NEXT: (block $l (result i32 i64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (br $l ;; CHECK-NEXT: (pop i32 i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $break-tuple (result i32 i64) (block $l (result i32 i64) (br $l (tuple.make (i32.const 0) (i64.const 1) ) ) ) ) ;; CHECK: (func $return-tuple (result i32 i64) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (pop i32 i64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $return-tuple (result i32 i64) (return (tuple.make (i32.const 0) (i64.const 1) ) ) ) ) binaryen-version_108/test/lit/passes/precompute-gc-immutable.wast000066400000000000000000000551671423707623100254570ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: foreach %s %t wasm-opt --precompute-propagate -all --nominal -S -o - | filecheck %s (module ;; CHECK: (type $struct-imm (struct_subtype (field i32) data)) (type $struct-imm (struct_subtype i32 data)) ;; CHECK: (type $struct-mut (struct_subtype (field (mut i32)) data)) (type $struct-mut (struct_subtype (mut i32) data)) ;; CHECK: (func $propagate (type $none_=>_none) ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (local $ref-mut (ref null $struct-mut)) ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $ref-mut ;; CHECK-NEXT: (struct.new $struct-mut ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $struct-mut 0 ;; CHECK-NEXT: (local.get $ref-mut) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate (local $ref-imm (ref null $struct-imm)) (local $ref-mut (ref null $struct-mut)) ;; We can propagate from an immutable field of a struct created in this ;; function. (local.set $ref-imm (struct.new $struct-imm (i32.const 1) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ;; But the same thing on a mutable field fails. (local.set $ref-mut (struct.new $struct-mut (i32.const 1) ) ) (call $helper (struct.get $struct-mut 0 (local.get $ref-mut) ) ) ) ;; CHECK: (func $non-constant (type $i32_=>_none) (param $param i32) ;; CHECK-NEXT: (local $ref (ref null $struct-imm)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (local.get $param) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $struct-imm 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $non-constant (param $param i32) (local $ref (ref null $struct-imm)) (local.set $ref (struct.new $struct-imm ;; This value is not constant, so we have nothing to propagate. (local.get $param) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref) ) ) ) ;; CHECK: (func $unreachable (type $none_=>_none) ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (local.tee $ref-imm ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $struct-imm 0 ;; CHECK-NEXT: (local.get $ref-imm) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unreachable (local $ref-imm (ref null $struct-imm)) ;; Test we do not error on an unreachable value. (local.set $ref-imm (struct.new $struct-imm (unreachable) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ) ;; CHECK: (func $param (type $ref?|$struct-imm|_=>_none) (param $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $struct-imm 0 ;; CHECK-NEXT: (local.get $ref-imm) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $param (param $ref-imm (ref null $struct-imm)) ;; Test we ignore a param value, whose data we do not know. (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ) ;; CHECK: (func $local-null (type $none_=>_none) ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $struct-imm 0 ;; CHECK-NEXT: (ref.null $struct-imm) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-null (local $ref-imm (ref null $struct-imm)) ;; Test we ignore a local value that is null. ;; TODO: this could be precomputed to an unreachable (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ) ;; CHECK: (func $local-unknown (type $i32_=>_none) (param $x i32) ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $struct-imm 0 ;; CHECK-NEXT: (local.get $ref-imm) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-unknown (param $x i32) (local $ref-imm (ref null $struct-imm)) ;; Do not propagate if a local has more than one possible struct.new with ;; different values. (if (local.get $x) (local.set $ref-imm (struct.new $struct-imm (i32.const 1) ) ) (local.set $ref-imm (struct.new $struct-imm (i32.const 2) ) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ) ;; CHECK: (func $local-unknown-ref-same-value (type $i32_=>_none) (param $x i32) ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $struct-imm 0 ;; CHECK-NEXT: (local.get $ref-imm) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $local-unknown-ref-same-value (param $x i32) (local $ref-imm (ref null $struct-imm)) ;; As above, but the two different refs have the same value, so we can in ;; theory optimize. However, atm we do nothing here, as the analysis stops ;; when it sees it cannot propagate the local value (the ref, which has two ;; possible values). (if (local.get $x) (local.set $ref-imm (struct.new $struct-imm (i32.const 1) ) ) (local.set $ref-imm (struct.new $struct-imm (i32.const 1) ) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ) ;; CHECK: (func $propagate-multi-refs (type $i32_=>_none) (param $x i32) ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block0 ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-multi-refs (param $x i32) (local $ref-imm (ref null $struct-imm)) ;; Propagate more than once in a function, using the same local that is ;; reused. (if (local.get $x) (block (local.set $ref-imm (struct.new $struct-imm (i32.const 1) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ) (block (local.set $ref-imm (struct.new $struct-imm (i32.const 2) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ) ) ) ;; CHECK: (func $propagate-multi-values (type $i32_=>_none) (param $x i32) ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate-multi-values (param $x i32) (local $ref-imm (ref null $struct-imm)) ;; Propagate a ref's value more than once (local.set $ref-imm (struct.new $struct-imm (i32.const 1) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) (call $helper (struct.get $struct-imm 0 (local.get $ref-imm) ) ) ) ;; CHECK: (func $helper (type $i32_=>_none) (param $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param i32)) ) (module ;; One field is immutable, the other is not, so we can only propagate the ;; former. ;; CHECK: (type $struct (struct_subtype (field (mut i32)) (field i32) data)) (type $struct (struct_subtype (mut i32) i32 data)) ;; CHECK: (func $propagate (type $none_=>_none) ;; CHECK-NEXT: (local $ref (ref null $struct)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $propagate (local $ref (ref null $struct)) ;; We can propagate from an immutable field of a struct created in this ;; function. (local.set $ref (struct.new $struct (i32.const 1) (i32.const 2) ) ) (call $helper (struct.get $struct 0 (local.get $ref) ) ) (call $helper (struct.get $struct 1 (local.get $ref) ) ) ) ;; CHECK: (func $helper (type $i32_=>_none) (param $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param i32)) ) (module ;; Create an immutable vtable in an immutable field, which lets us read from ;; it. ;; CHECK: (type $object (struct_subtype (field (ref $vtable)) data)) ;; CHECK: (type $vtable (struct_subtype (field funcref) data)) (type $vtable (struct_subtype funcref data)) (type $object (struct_subtype (ref $vtable) data)) ;; CHECK: (func $nested-creations (type $none_=>_none) ;; CHECK-NEXT: (local $ref (ref null $object)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $object ;; CHECK-NEXT: (struct.new $vtable ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-creations (local $ref (ref null $object)) ;; Create an object with a reference to another object, and propagate ;; through both of them to a constant value, which saves two struct.gets. (local.set $ref (struct.new $object (struct.new $vtable (ref.func $nested-creations) ) ) ) (call $helper (struct.get $vtable 0 (struct.get $object 0 (local.get $ref) ) ) ) ) ;; CHECK: (func $helper (type $funcref_=>_none) (param $0 funcref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param funcref)) ) (module ;; As above, but make $vtable not immutable, which prevents optimization. ;; CHECK: (type $object (struct_subtype (field (ref $vtable)) data)) ;; CHECK: (type $vtable (struct_subtype (field (mut funcref)) data)) (type $vtable (struct_subtype (mut funcref) data)) (type $object (struct_subtype (ref $vtable) data)) ;; CHECK: (func $nested-creations (type $none_=>_none) ;; CHECK-NEXT: (local $ref (ref null $object)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $object ;; CHECK-NEXT: (struct.new $vtable ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $vtable 0 ;; CHECK-NEXT: (struct.get $object 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-creations (local $ref (ref null $object)) (local.set $ref (struct.new $object (struct.new $vtable (ref.func $nested-creations) ) ) ) (call $helper (struct.get $vtable 0 ;; Note that we *can* precompute the first struct.get here, but there ;; is no constant expression we can emit for it, so we do nothing. (struct.get $object 0 (local.get $ref) ) ) ) ) ;; CHECK: (func $helper (type $funcref_=>_none) (param $0 funcref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param funcref)) ) (module ;; As above, but make $object not immutable, which prevents optimization. ;; CHECK: (type $object (struct_subtype (field (mut (ref $vtable))) data)) ;; CHECK: (type $vtable (struct_subtype (field funcref) data)) (type $vtable (struct_subtype funcref data)) (type $object (struct_subtype (mut (ref $vtable)) data)) ;; CHECK: (func $nested-creations (type $none_=>_none) ;; CHECK-NEXT: (local $ref (ref null $object)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $object ;; CHECK-NEXT: (struct.new $vtable ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $vtable 0 ;; CHECK-NEXT: (struct.get $object 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-creations (local $ref (ref null $object)) (local.set $ref (struct.new $object (struct.new $vtable (ref.func $nested-creations) ) ) ) (call $helper (struct.get $vtable 0 (struct.get $object 0 (local.get $ref) ) ) ) ) ;; CHECK: (func $helper (type $funcref_=>_none) (param $0 funcref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param funcref)) ) (module ;; Create an immutable vtable in an immutable global, which we can optimize ;; with. ;; CHECK: (type $vtable (struct_subtype (field funcref) data)) (type $vtable (struct_subtype funcref data)) ;; CHECK: (type $object (struct_subtype (field (ref $vtable)) data)) (type $object (struct_subtype (ref $vtable) data)) ;; CHECK: (global $vtable (ref $vtable) (struct.new $vtable ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: )) (global $vtable (ref $vtable) (struct.new $vtable (ref.func $nested-creations) ) ) ;; CHECK: (func $nested-creations (type $none_=>_none) ;; CHECK-NEXT: (local $ref (ref null $object)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $object ;; CHECK-NEXT: (global.get $vtable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-creations (local $ref (ref null $object)) (local.set $ref (struct.new $object (global.get $vtable) ) ) (call $helper (struct.get $vtable 0 (struct.get $object 0 (local.get $ref) ) ) ) ) ;; CHECK: (func $helper (type $funcref_=>_none) (param $0 funcref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param funcref)) ) (module ;; Create an immutable vtable in an mutable global, whose mutability prevents ;; optimization. ;; CHECK: (type $vtable (struct_subtype (field funcref) data)) (type $vtable (struct_subtype funcref data)) ;; CHECK: (type $object (struct_subtype (field (ref $vtable)) data)) (type $object (struct_subtype (ref $vtable) data)) ;; CHECK: (global $vtable (mut (ref $vtable)) (struct.new $vtable ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: )) (global $vtable (mut (ref $vtable)) (struct.new $vtable (ref.func $nested-creations) ) ) ;; CHECK: (func $nested-creations (type $none_=>_none) ;; CHECK-NEXT: (local $ref (ref null $object)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $object ;; CHECK-NEXT: (global.get $vtable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (struct.get $vtable 0 ;; CHECK-NEXT: (struct.get $object 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-creations (local $ref (ref null $object)) (local.set $ref (struct.new $object (global.get $vtable) ) ) (call $helper (struct.get $vtable 0 (struct.get $object 0 (local.get $ref) ) ) ) ) ;; CHECK: (func $helper (type $funcref_=>_none) (param $0 funcref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param funcref)) ) (module ;; Create an immutable vtable in an immutable global, but using an array ;; instead of a struct. ;; CHECK: (type $object (struct_subtype (field (ref $vtable)) data)) ;; CHECK: (type $vtable (array_subtype funcref data)) (type $vtable (array_subtype funcref data)) (type $object (struct_subtype (ref $vtable) data)) ;; CHECK: (global $vtable (ref $vtable) (array.init_static $vtable ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: )) (global $vtable (ref $vtable) (array.init_static $vtable (ref.func $nested-creations) ) ) ;; CHECK: (func $nested-creations (type $i32_=>_none) (param $param i32) ;; CHECK-NEXT: (local $ref (ref null $object)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $object ;; CHECK-NEXT: (global.get $vtable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (array.get $vtable ;; CHECK-NEXT: (struct.get $object 0 ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $param) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-creations (param $param i32) (local $ref (ref null $object)) (local.set $ref (struct.new $object (global.get $vtable) ) ) (call $helper (array.get $vtable (struct.get $object 0 (local.get $ref) ) (i32.const 0) ) ) ;; The second operation here uses a param for the array index, which is not ;; constant. (call $helper (array.get $vtable (struct.get $object 0 (local.get $ref) ) (local.get $param) ) ) ) ;; CHECK: (func $helper (type $funcref_=>_none) (param $0 funcref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param funcref)) ) (module ;; A j2wasm-like itable pattern: An itable is an array of (possibly-null) ;; data that is filled with vtables of different types. On usage, we do a ;; cast of the vtable type. ;; CHECK: (type $itable (array_subtype (ref null data) data)) (type $itable (array_subtype (ref null data) data)) ;; CHECK: (type $object (struct_subtype (field (ref $itable)) data)) (type $object (struct_subtype (ref $itable) data)) ;; CHECK: (type $vtable-0 (struct_subtype (field funcref) data)) (type $vtable-0 (struct_subtype funcref data)) ;; CHECK: (type $vtable-1 (struct_subtype (field funcref) data)) (type $vtable-1 (struct_subtype funcref data)) ;; CHECK: (global $itable (ref $itable) (array.init_static $itable ;; CHECK-NEXT: (struct.new $vtable-0 ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.new $vtable-1 ;; CHECK-NEXT: (ref.func $helper) ;; CHECK-NEXT: ) ;; CHECK-NEXT: )) (global $itable (ref $itable) (array.init_static $itable (struct.new $vtable-0 (ref.func $nested-creations) ) (struct.new $vtable-1 (ref.func $helper) ) ) ) ;; CHECK: (func $nested-creations (type $none_=>_none) ;; CHECK-NEXT: (local $ref (ref null $object)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new $object ;; CHECK-NEXT: (global.get $itable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (ref.func $nested-creations) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (ref.func $helper) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-creations (local $ref (ref null $object)) (local.set $ref (struct.new $object (global.get $itable) ) ) ;; We can precompute all these operations away into the final constants. (call $helper (struct.get $vtable-0 0 (ref.cast_static $vtable-0 (array.get $itable (struct.get $object 0 (local.get $ref) ) (i32.const 0) ) ) ) ) (call $helper (struct.get $vtable-1 0 (ref.cast_static $vtable-1 (array.get $itable (struct.get $object 0 (local.get $ref) ) (i32.const 1) ) ) ) ) ) ;; CHECK: (func $helper (type $funcref_=>_none) (param $0 funcref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper (param funcref)) ) binaryen-version_108/test/lit/passes/precompute-gc.wast000066400000000000000000001302151423707623100234660ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-names --precompute-propagate --fuzz-exec -all -S -o - \ ;; RUN: | filecheck %s ;; RUN: wasm-opt %s --remove-unused-names --precompute-propagate --fuzz-exec -all --nominal -S -o - \ ;; RUN: | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $empty (struct )) ;; NOMNL: (type $empty (struct_subtype data)) (type $empty (struct)) ;; CHECK: (type $struct (struct (field (mut i32)))) ;; NOMNL: (type $struct (struct_subtype (field (mut i32)) data)) (type $struct (struct (mut i32))) ;; two incompatible struct types (type $A (struct (field (mut f32)))) ;; CHECK: (type $B (struct (field (mut f64)))) ;; NOMNL: (type $B (struct_subtype (field (mut f64)) data)) (type $B (struct (field (mut f64)))) ;; CHECK: (type $func-return-i32 (func (result i32))) ;; NOMNL: (type $func-return-i32 (func_subtype (result i32) func)) (type $func-return-i32 (func (result i32))) ;; CHECK: (import "fuzzing-support" "log-i32" (func $log (param i32))) ;; NOMNL: (import "fuzzing-support" "log-i32" (func $log (param i32))) (import "fuzzing-support" "log-i32" (func $log (param i32))) ;; CHECK: (func $test-fallthrough (result i32) ;; CHECK-NEXT: (local $x funcref) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result funcref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $test-fallthrough) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; NOMNL: (func $test-fallthrough (type $func-return-i32) (result i32) ;; NOMNL-NEXT: (local $x funcref) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (block (result funcref) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $test-fallthrough) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (ref.null func) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) (func $test-fallthrough (result i32) (local $x funcref) (local.set $x ;; the fallthrough value should be used. for that to be possible with a block ;; we need for it not to have a name, which is why --remove-unused-names is ;; run (block (result (funcref)) ;; make a call so the block is not trivially removable (drop (call $test-fallthrough) ) (ref.null func) ) ) ;; the null in the local should be propagated to here (ref.is_null (local.get $x) ) ) ;; CHECK: (func $load-from-struct ;; CHECK-NEXT: (local $x (ref null $struct)) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $load-from-struct (type $none_=>_none) ;; NOMNL-NEXT: (local $x (ref null $struct)) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (struct.new_with_rtt $struct ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (struct.new_with_rtt $struct ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.set $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 3) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $load-from-struct (local $x (ref null $struct)) (local.set $x (struct.new_with_rtt $struct (i32.const 1) (rtt.canon $struct) ) ) ;; we don't precompute these, as we don't know if the GC data was modified ;; elsewhere (we'd need immutability or escape analysis) (call $log (struct.get $struct 0 (local.get $x)) ) ;; Assign a new struct (local.set $x (struct.new_with_rtt $struct (i32.const 2) (rtt.canon $struct) ) ) (call $log (struct.get $struct 0 (local.get $x)) ) ;; Assign a new value (struct.set $struct 0 (local.get $x) (i32.const 3) ) (call $log (struct.get $struct 0 (local.get $x)) ) ) ;; CHECK: (func $load-from-struct-bad-merge (param $i i32) ;; CHECK-NEXT: (local $x (ref null $struct)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $load-from-struct-bad-merge (type $i32_=>_none) (param $i i32) ;; NOMNL-NEXT: (local $x (ref null $struct)) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $i) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (struct.new_with_rtt $struct ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (struct.new_with_rtt $struct ;; NOMNL-NEXT: (i32.const 2) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $load-from-struct-bad-merge (param $i i32) (local $x (ref null $struct)) ;; a merge of two different $x values cannot be precomputed (if (local.get $i) (local.set $x (struct.new_with_rtt $struct (i32.const 1) (rtt.canon $struct) ) ) (local.set $x (struct.new_with_rtt $struct (i32.const 2) (rtt.canon $struct) ) ) ) (call $log (struct.get $struct 0 (local.get $x)) ) ) ;; CHECK: (func $modify-gc-heap (param $x (ref null $struct)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $modify-gc-heap (type $ref?|$struct|_=>_none) (param $x (ref null $struct)) ;; NOMNL-NEXT: (struct.set $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.add ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $modify-gc-heap (param $x (ref null $struct)) (struct.set $struct 0 (local.get $x) (i32.add (struct.get $struct 0 (local.get $x) ) (i32.const 1) ) ) ) ;; --fuzz-exec verifies the output of this function, checking that the change ;; makde in modify-gc-heap is not ignored ;; CHECK: (func $load-from-struct-bad-escape ;; CHECK-NEXT: (local $x (ref null $struct)) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $modify-gc-heap ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $load-from-struct-bad-escape (type $none_=>_none) ;; NOMNL-NEXT: (local $x (ref null $struct)) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (struct.new_with_rtt $struct ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $modify-gc-heap ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $load-from-struct-bad-escape (export "test") (local $x (ref null $struct)) (local.set $x (struct.new_with_rtt $struct (i32.const 1) (rtt.canon $struct) ) ) (call $modify-gc-heap (local.get $x) ) (call $log (struct.get $struct 0 (local.get $x)) ) ) ;; CHECK: (func $load-from-struct-bad-arrive (param $x (ref null $struct)) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $load-from-struct-bad-arrive (type $ref?|$struct|_=>_none) (param $x (ref null $struct)) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $load-from-struct-bad-arrive (param $x (ref null $struct)) ;; a parameter cannot be precomputed (call $log (struct.get $struct 0 (local.get $x)) ) ) ;; CHECK: (func $ref-comparisons (param $x (ref null $struct)) (param $y (ref null $struct)) ;; CHECK-NEXT: (local $z (ref null $struct)) ;; CHECK-NEXT: (local $w (ref null $struct)) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $log ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref-comparisons (type $ref?|$struct|_ref?|$struct|_=>_none) (param $x (ref null $struct)) (param $y (ref null $struct)) ;; NOMNL-NEXT: (local $z (ref null $struct)) ;; NOMNL-NEXT: (local $w (ref null $struct)) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (ref.null $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (ref.null $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $log ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref-comparisons (param $x (ref null $struct)) (param $y (ref null $struct)) (local $z (ref null $struct)) (local $w (ref null $struct)) ;; incoming parameters are unknown (call $log (ref.eq (local.get $x) (local.get $y) ) ) (call $log (ref.eq (local.get $x) ;; locals are ref.null which are known, and will be propagated (local.get $z) ) ) (call $log (ref.eq (local.get $x) (local.get $w) ) ) ;; null-initialized locals are known and can be compared (call $log (ref.eq (local.get $z) (local.get $w) ) ) ) ;; CHECK: (func $new-ref-comparisons (result i32) ;; CHECK-NEXT: (local $x (ref null $struct)) ;; CHECK-NEXT: (local $y (ref null $struct)) ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (struct.new_with_rtt $struct ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; NOMNL: (func $new-ref-comparisons (type $func-return-i32) (result i32) ;; NOMNL-NEXT: (local $x (ref null $struct)) ;; NOMNL-NEXT: (local $y (ref null $struct)) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local.set $x ;; NOMNL-NEXT: (struct.new_with_rtt $struct ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $y ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) (func $new-ref-comparisons (result i32) (local $x (ref null $struct)) (local $y (ref null $struct)) (local $tempresult i32) (local.set $x (struct.new_with_rtt $struct (i32.const 1) (rtt.canon $struct) ) ) (local.set $y (local.get $x) ) ;; assign the result, so that propagate calculates the ref.eq. both $x and $y ;; must refer to the same data, so we can precompute a 1 here. (local.set $tempresult (ref.eq (local.get $x) (local.get $y) ) ) ;; and that 1 is propagated to here. (local.get $tempresult) ) ;; CHECK: (func $propagate-equal (result i32) ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local $tempref (ref null $empty)) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.tee $tempref ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-equal (type $func-return-i32) (result i32) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local $tempref (ref null $empty)) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.tee $tempref ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) (func $propagate-equal (result i32) (local $tempresult i32) (local $tempref (ref null $empty)) ;; assign the result, so that propagate calculates the ref.eq (local.set $tempresult (ref.eq ;; allocate one struct (local.tee $tempref (struct.new_with_rtt $empty (rtt.canon $empty) ) ) (local.get $tempref) ) ) ;; we can compute a 1 here as the ref.eq compares a struct to itself. note ;; that the ref.eq itself cannot be precomputed away (as it has side effects). (local.get $tempresult) ) ;; CHECK: (func $propagate-unequal (result i32) ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local $tempref (ref null $empty)) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-unequal (type $func-return-i32) (result i32) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local $tempref (ref null $empty)) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) (func $propagate-unequal (result i32) (local $tempresult i32) (local $tempref (ref null $empty)) ;; assign the result, so that propagate calculates the ref.eq. ;; the structs are different, so we will precompute a 0 here, and as creating ;; heap data does not have side effects, we can in fact replace the ref.eq ;; with that value (local.set $tempresult ;; allocate two different structs (ref.eq (struct.new_with_rtt $empty (rtt.canon $empty) ) (struct.new_with_rtt $empty (rtt.canon $empty) ) ) ) (local.get $tempresult) ) ;; CHECK: (func $propagate-uncertain-param (param $input (ref $empty)) (result i32) ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local $tempref (ref null $empty)) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $input) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $tempresult) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-uncertain-param (type $ref|$empty|_=>_i32) (param $input (ref $empty)) (result i32) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local $tempref (ref null $empty)) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $input) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $tempresult) ;; NOMNL-NEXT: ) (func $propagate-uncertain-param (param $input (ref $empty)) (result i32) (local $tempresult i32) (local $tempref (ref null $empty)) (local.set $tempresult ;; allocate a struct and compare it to a param, which we know nothing about, ;; so we can infer nothing here at all. (ref.eq (struct.new_with_rtt $empty (rtt.canon $empty) ) (local.get $input) ) ) (local.get $tempresult) ) ;; CHECK: (func $propagate-different-params (param $input1 (ref $empty)) (param $input2 (ref $empty)) (result i32) ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $input1) ;; CHECK-NEXT: (local.get $input2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $tempresult) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-different-params (type $ref|$empty|_ref|$empty|_=>_i32) (param $input1 (ref $empty)) (param $input2 (ref $empty)) (result i32) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $input1) ;; NOMNL-NEXT: (local.get $input2) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $tempresult) ;; NOMNL-NEXT: ) (func $propagate-different-params (param $input1 (ref $empty)) (param $input2 (ref $empty)) (result i32) (local $tempresult i32) (local.set $tempresult ;; We cannot say anything about parameters - they might alias, or not. (ref.eq (local.get $input1) (local.get $input2) ) ) (local.get $tempresult) ) ;; CHECK: (func $propagate-same-param (param $input (ref $empty)) (result i32) ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $input) ;; CHECK-NEXT: (local.get $input) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $tempresult) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-same-param (type $ref|$empty|_=>_i32) (param $input (ref $empty)) (result i32) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $input) ;; NOMNL-NEXT: (local.get $input) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $tempresult) ;; NOMNL-NEXT: ) (func $propagate-same-param (param $input (ref $empty)) (result i32) (local $tempresult i32) (local.set $tempresult ;; We could optimize this in principle, but atm do not. ;; Note that optimize-instructions can handle patterns like this. (ref.eq (local.get $input) (local.get $input) ) ) (local.get $tempresult) ) ;; CHECK: (func $propagate-uncertain-local (result i32) ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local $tempref (ref null $empty)) ;; CHECK-NEXT: (local $stashedref (ref null $empty)) ;; CHECK-NEXT: (local.set $tempref ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $stashedref ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $tempref ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: (local.get $stashedref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $tempresult) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-uncertain-local (type $func-return-i32) (result i32) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local $tempref (ref null $empty)) ;; NOMNL-NEXT: (local $stashedref (ref null $empty)) ;; NOMNL-NEXT: (local.set $tempref ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $stashedref ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $tempref ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: (local.get $stashedref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $tempresult) ;; NOMNL-NEXT: ) (func $propagate-uncertain-local (result i32) (local $tempresult i32) (local $tempref (ref null $empty)) (local $stashedref (ref null $empty)) (local.set $tempref (struct.new_with_rtt $empty (rtt.canon $empty) ) ) (local.set $stashedref (local.get $tempref) ) ;; This if makes it impossible to know what value the ref.eq later should ;; return. (if (call $helper (i32.const 0) ) (local.set $tempref (struct.new_with_rtt $empty (rtt.canon $empty) ) ) ) (local.set $tempresult (ref.eq (local.get $tempref) (local.get $stashedref) ) ) (local.get $tempresult) ) ;; CHECK: (func $propagate-uncertain-loop ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local $tempref (ref null $empty)) ;; CHECK-NEXT: (local $stashedref (ref null $empty)) ;; CHECK-NEXT: (local.set $tempref ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $stashedref ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: (local.get $stashedref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $tempref ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (local.get $tempresult) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-uncertain-loop (type $none_=>_none) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local $tempref (ref null $empty)) ;; NOMNL-NEXT: (local $stashedref (ref null $empty)) ;; NOMNL-NEXT: (local.set $tempref ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $stashedref ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (loop $loop ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: (local.get $stashedref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $tempref ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br_if $loop ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (local.get $tempresult) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $propagate-uncertain-loop (local $tempresult i32) (local $tempref (ref null $empty)) (local $stashedref (ref null $empty)) (local.set $tempref (struct.new_with_rtt $empty (rtt.canon $empty) ) ) (local.set $stashedref (local.get $tempref) ) (loop $loop ;; Each iteration in this loop may see a different struct, so we cannot ;; precompute the ref.eq here. (local.set $tempresult (ref.eq (local.get $tempref) (local.get $stashedref) ) ) (local.set $tempref (struct.new_with_rtt $empty (rtt.canon $empty) ) ) (br_if $loop (call $helper (local.get $tempresult) ) ) ) ) ;; CHECK: (func $propagate-certain-loop ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local $tempref (ref null $empty)) ;; CHECK-NEXT: (local $stashedref (ref null $empty)) ;; CHECK-NEXT: (local.set $tempref ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $stashedref ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-certain-loop (type $none_=>_none) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local $tempref (ref null $empty)) ;; NOMNL-NEXT: (local $stashedref (ref null $empty)) ;; NOMNL-NEXT: (local.set $tempref ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $stashedref ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (loop $loop ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br_if $loop ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $propagate-certain-loop (local $tempresult i32) (local $tempref (ref null $empty)) (local $stashedref (ref null $empty)) ;; As above, but remove the new in the loop, so that each loop iteration does ;; in fact have the ref locals identical, and we can precompute a 1. (local.set $tempref (struct.new_with_rtt $empty (rtt.canon $empty) ) ) (local.set $stashedref (local.get $tempref) ) (loop $loop (local.set $tempresult (ref.eq (local.get $tempref) (local.get $stashedref) ) ) (br_if $loop (call $helper (local.get $tempresult) ) ) ) ) ;; CHECK: (func $propagate-certain-loop-2 ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local $tempref (ref null $empty)) ;; CHECK-NEXT: (local $stashedref (ref null $empty)) ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (local.set $tempref ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $stashedref ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-certain-loop-2 (type $none_=>_none) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local $tempref (ref null $empty)) ;; NOMNL-NEXT: (local $stashedref (ref null $empty)) ;; NOMNL-NEXT: (loop $loop ;; NOMNL-NEXT: (local.set $tempref ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $stashedref ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br_if $loop ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $propagate-certain-loop-2 (local $tempresult i32) (local $tempref (ref null $empty)) (local $stashedref (ref null $empty)) (loop $loop ;; Another example of a loop where we can optimize. Here the new is inside ;; the loop. (local.set $tempref (struct.new_with_rtt $empty (rtt.canon $empty) ) ) (local.set $stashedref (local.get $tempref) ) (local.set $tempresult (ref.eq (local.get $tempref) (local.get $stashedref) ) ) (br_if $loop (call $helper (local.get $tempresult) ) ) ) ) ;; CHECK: (func $propagate-possibly-certain-loop ;; CHECK-NEXT: (local $tempresult i32) ;; CHECK-NEXT: (local $tempref (ref null $empty)) ;; CHECK-NEXT: (local $stashedref (ref null $empty)) ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $tempref ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $stashedref ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $tempresult ;; CHECK-NEXT: (ref.eq ;; CHECK-NEXT: (local.get $tempref) ;; CHECK-NEXT: (local.get $stashedref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (local.get $tempresult) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $propagate-possibly-certain-loop (type $none_=>_none) ;; NOMNL-NEXT: (local $tempresult i32) ;; NOMNL-NEXT: (local $tempref (ref null $empty)) ;; NOMNL-NEXT: (local $stashedref (ref null $empty)) ;; NOMNL-NEXT: (loop $loop ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $tempref ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $stashedref ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $tempresult ;; NOMNL-NEXT: (ref.eq ;; NOMNL-NEXT: (local.get $tempref) ;; NOMNL-NEXT: (local.get $stashedref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br_if $loop ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (local.get $tempresult) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $propagate-possibly-certain-loop (local $tempresult i32) (local $tempref (ref null $empty)) (local $stashedref (ref null $empty)) (loop $loop ;; As above, but move the set of $stashedref below the if. That means that ;; it must be identical to $tempref in each iteration. However, that is ;; something we cannot infer atm (while SSA could), so we do not infer ;; anything here for now. (if (call $helper (i32.const 0) ) (local.set $tempref (struct.new_with_rtt $empty (rtt.canon $empty) ) ) ) (local.set $stashedref (local.get $tempref) ) (local.set $tempresult (ref.eq (local.get $tempref) (local.get $stashedref) ) ) (br_if $loop (call $helper (local.get $tempresult) ) ) ) ) ;; CHECK: (func $helper (param $0 i32) (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $helper (type $i32_=>_i32) (param $0 i32) (result i32) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $helper (param i32) (result i32) (unreachable) ) ;; CHECK: (func $odd-cast-and-get ;; CHECK-NEXT: (local $temp (ref null $B)) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $B 0 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $odd-cast-and-get (type $none_=>_none) ;; NOMNL-NEXT: (local $temp (ref null $B)) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (ref.null $B) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.get $B 0 ;; NOMNL-NEXT: (ref.null $B) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $odd-cast-and-get (local $temp (ref null $B)) ;; Try to cast a null of A to B. While the types are incompatible, ref.cast ;; returns a null when given a null (and the null must have the type that the ;; ref.cast instruction has, that is, the value is a null of type $B). So this ;; is an odd cast that "works". (local.set $temp (ref.cast (ref.null $A) (rtt.canon $B) ) ) (drop ;; Read from the local, which precompute should set to a null with the proper ;; type. (struct.get $B 0 (local.get $temp) ) ) ) ;; CHECK: (func $odd-cast-and-get-tuple ;; CHECK-NEXT: (local $temp ((ref null $B) i32)) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $B 0 ;; CHECK-NEXT: (ref.null $B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $odd-cast-and-get-tuple (type $none_=>_none) ;; NOMNL-NEXT: (local $temp ((ref null $B) i32)) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (tuple.make ;; NOMNL-NEXT: (ref.null $B) ;; NOMNL-NEXT: (i32.const 10) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (struct.get $B 0 ;; NOMNL-NEXT: (ref.null $B) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $odd-cast-and-get-tuple (local $temp ((ref null $B) i32)) ;; As above, but with a tuple. (local.set $temp (tuple.make (ref.cast (ref.null $A) (rtt.canon $B) ) (i32.const 10) ) ) (drop (struct.get $B 0 (tuple.extract 0 (local.get $temp) ) ) ) ) ;; CHECK: (func $receive-f64 (param $0 f64) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $receive-f64 (type $f64_=>_none) (param $0 f64) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $receive-f64 (param f64) (unreachable) ) ;; CHECK: (func $odd-cast-and-get-non-null (param $temp (ref $func-return-i32)) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (ref.func $receive-f64) ;; CHECK-NEXT: (rtt.canon $func-return-i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $odd-cast-and-get-non-null (type $ref|$func-return-i32|_=>_none) (param $temp (ref $func-return-i32)) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (ref.func $receive-f64) ;; NOMNL-NEXT: (rtt.canon $func-return-i32) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call_ref ;; NOMNL-NEXT: (local.get $temp) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $odd-cast-and-get-non-null (param $temp (ref $func-return-i32)) ;; Try to cast a function to an incompatible type. (local.set $temp (ref.cast (ref.func $receive-f64) (rtt.canon $func-return-i32) ) ) (drop ;; Read from the local, checking whether precompute set a value there (it ;; should not, as the cast fails). (call_ref (local.get $temp) ) ) ) ;; Regression test checking that breaking RTTs are interpreted correctly. ;; CHECK: (func $cast-breaking-rtt ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (ref.cast ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: (call $unreachable-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $unreachable-rtt) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $cast-breaking-rtt (type $none_=>_none) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (ref.cast ;; NOMNL-NEXT: (struct.new_default $struct) ;; NOMNL-NEXT: (call $unreachable-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (call $unreachable-rtt) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $cast-breaking-rtt (drop (ref.cast (ref.cast (struct.new_default $struct) (call $unreachable-rtt) ) (call $unreachable-rtt) ) ) ) ;; CHECK: (func $unreachable-rtt (result (rtt $struct)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $unreachable-rtt (type $none_=>_rtt_$struct) (result (rtt $struct)) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $unreachable-rtt (result (rtt $struct)) (unreachable) ) ;; CHECK: (func $new_block_unreachable (result anyref) ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $new_block_unreachable (type $none_=>_anyref) (result anyref) ;; NOMNL-NEXT: (block ;; (replaces something unreachable we can't emit) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (block ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (rtt.canon $struct) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $new_block_unreachable (result anyref) (struct.new_with_rtt $struct ;; The value is a block with an unreachable. precompute will get rid of the ;; block, after which fuzz-exec should not crash - this is a regression test ;; for us being careful in how we execute an unreachable struct.new (block $label$1 (result i32) (unreachable) ) (rtt.canon $struct) ) ) ;; CHECK: (func $br_on_cast-on-creation-rtt (result (ref $empty)) ;; CHECK-NEXT: (block $label (result (ref $empty)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_on_cast $label ;; CHECK-NEXT: (struct.new_default_with_rtt $empty ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $br_on_cast-on-creation-rtt (type $none_=>_ref|$empty|) (result (ref $empty)) ;; NOMNL-NEXT: (block $label (result (ref $empty)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_on_cast $label ;; NOMNL-NEXT: (struct.new_default_with_rtt $empty ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (rtt.canon $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $br_on_cast-on-creation-rtt (result (ref $empty)) (block $label (result (ref $empty)) (drop ;; The br_on_cast will read the GC data created from struct.new, which must ;; emit it properly, including with an RTT which it will read from (since ;; this instructions uses an RTT). (br_on_cast $label (struct.new_default_with_rtt $empty (rtt.canon $empty) ) (rtt.canon $empty) ) ) (unreachable) ) ) ;; CHECK: (func $br_on_cast-on-creation-nortt (result (ref $empty)) ;; CHECK-NEXT: (block $label (result (ref $empty)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_on_cast_static $label $empty ;; CHECK-NEXT: (struct.new_default $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $br_on_cast-on-creation-nortt (type $none_=>_ref|$empty|) (result (ref $empty)) ;; NOMNL-NEXT: (block $label (result (ref $empty)) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_on_cast_static $label $empty ;; NOMNL-NEXT: (struct.new_default $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $br_on_cast-on-creation-nortt (result (ref $empty)) (block $label (result (ref $empty)) (drop ;; As above, but with no RTTs. (br_on_cast_static $label $empty (struct.new_default $empty) ) ) (unreachable) ) ) ;; CHECK: (func $ref.is_null (param $param i32) ;; CHECK-NEXT: (local $ref (ref null $empty)) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new_default $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (ref.null $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $param) ;; CHECK-NEXT: (local.set $ref ;; CHECK-NEXT: (struct.new_default $empty) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $ref.is_null (type $i32_=>_none) (param $param i32) ;; NOMNL-NEXT: (local $ref (ref null $empty)) ;; NOMNL-NEXT: (local.set $ref ;; NOMNL-NEXT: (struct.new_default $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $ref ;; NOMNL-NEXT: (ref.null $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (if ;; NOMNL-NEXT: (local.get $param) ;; NOMNL-NEXT: (local.set $ref ;; NOMNL-NEXT: (struct.new_default $empty) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (call $helper ;; NOMNL-NEXT: (ref.is_null ;; NOMNL-NEXT: (local.get $ref) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $ref.is_null (param $param i32) (local $ref (ref null $empty)) ;; Test ref.null on references, and also test that we can infer multiple ;; assignments in the same function, without confusion between them. (local.set $ref (struct.new $empty) ) (drop (call $helper ;; The reference here is definitely not null. (ref.is_null (local.get $ref) ) ) ) (local.set $ref (ref.null $empty) ) (drop (call $helper ;; The reference here is definitely null. (ref.is_null (local.get $ref) ) ) ) (if (local.get $param) (local.set $ref (struct.new $empty) ) ) (drop (call $helper ;; The reference here might be null. (ref.is_null (local.get $ref) ) ) ) ) ) binaryen-version_108/test/lit/passes/remove-unused-brs-gc.wast000066400000000000000000000137771423707623100247020ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-brs -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (type $struct (struct )) (type $struct (struct )) ;; CHECK: (func $br_on_non_data-1 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $any (result anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br $any ;; CHECK-NEXT: (ref.func $br_on_non_data-1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on_non_data-1 (drop (block $any (result anyref) (drop ;; A function is not data, and so we should branch. (br_on_non_data $any (ref.func $br_on_non_data-1) ) ) (ref.null any) ) ) ) ;; CHECK: (func $br_on_non_data-2 (param $data dataref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $any (result anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on_non_data-2 (param $data (ref data)) (drop (block $any (result anyref) (drop ;; Data is provided here, and so we will not branch. (br_on_non_data $any (local.get $data) ) ) (ref.null any) ) ) ) ;; CHECK: (func $br_on-if (param $0 dataref) ;; CHECK-NEXT: (block $label ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select (result dataref) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on-if (param $0 (ref data)) (block $label (drop ;; This br is never taken, as the input is non-nullable, so we can remove ;; it. When we do so, we replace it with the if. We should not rescan that ;; if, which has already been walked, as that would hit an assertion. ;; (br_on_null $label ;; This if can also be turned into a select, separately from the above ;; (that is not specifically intended to be tested here). (if (result (ref data)) (i32.const 0) (local.get $0) (local.get $0) ) ) ) ) ) ;; CHECK: (func $nested_br_on (result dataref) ;; CHECK-NEXT: (block $label$1 (result (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br $label$1 ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested_br_on (result dataref) (block $label$1 (result dataref) (drop ;; The inner br_on_data will become a direct br since the type proves it ;; is in fact data. That then becomes unreachable, and the parent must ;; handle that properly (do nothing without hitting an assertion). (br_on_data $label$1 (br_on_data $label$1 (struct.new_default $struct) ) ) ) (unreachable) ) ) ;; CHECK: (func $br_on_cast_static (result (ref $struct)) ;; CHECK-NEXT: (local $temp (ref null $struct)) ;; CHECK-NEXT: (block $block (result (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br $block ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on_cast_static (result (ref $struct)) (local $temp (ref null $struct)) (block $block (result (ref $struct)) (drop ;; This static cast can be computed at compile time: it will definitely be ;; taken, so we can turn it into a normal br. (br_on_cast_static $block $struct (struct.new $struct) ) ) (unreachable) ) ) ;; CHECK: (func $br_on_cast_static_no (result (ref $struct)) ;; CHECK-NEXT: (local $temp (ref null $struct)) ;; CHECK-NEXT: (block $block (result (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_on_cast_static $block $struct ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on_cast_static_no (result (ref $struct)) (local $temp (ref null $struct)) (block $block (result (ref $struct)) (drop (br_on_cast_static $block $struct ;; As above, but now the type is nullable, so we cannot infer anything. (ref.null $struct) ) ) (unreachable) ) ) ;; CHECK: (func $br_on_cast_fail_static (result (ref $struct)) ;; CHECK-NEXT: (local $temp (ref null $struct)) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on_cast_fail_static (result (ref $struct)) (local $temp (ref null $struct)) (block $block (result (ref $struct)) (drop ;; As $br_on_cast_static, but this checks for a failing cast, so we know it will ;; *not* be taken. (br_on_cast_static_fail $block $struct (struct.new $struct) ) ) (unreachable) ) ) ;; CHECK: (func $br_on_cast_dynamic (result (ref $struct)) ;; CHECK-NEXT: (local $temp (ref null $struct)) ;; CHECK-NEXT: (block $block (result (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_on_cast $block ;; CHECK-NEXT: (struct.new_default_with_rtt $struct ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rtt.canon $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $br_on_cast_dynamic (result (ref $struct)) (local $temp (ref null $struct)) (block $block (result (ref $struct)) (drop ;; This dynamic cast happens to be optimizable since we see both sides use ;; rtt.canon, but we do not inspect things that closely, and leave such ;; dynamic casts to runtime. (br_on_cast $block (struct.new_with_rtt $struct (rtt.canon $struct) ) (rtt.canon $struct) ) ) (unreachable) ) ) ) binaryen-version_108/test/lit/passes/remove-unused-brs.wast000066400000000000000000000352311423707623100243000ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-brs -all -S -o - \ ;; RUN: | filecheck %s (module ;; CHECK: (type $none_=>_i32 (func (result i32))) (type $none_=>_i32 (func (result i32))) ;; CHECK: (type $i32_=>_none (func (param i32))) (type $i32_=>_none (func (param i32))) ;; Regression test in which we need to calculate a proper LUB. ;; CHECK: (func $selectify-fresh-lub (param $x i32) (result anyref) ;; CHECK-NEXT: (select (result funcref) ;; CHECK-NEXT: (ref.null $none_=>_i32) ;; CHECK-NEXT: (ref.null $i32_=>_none) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $selectify-fresh-lub (param $x i32) (result anyref) (if (local.get $x) (return (ref.null $none_=>_i32) ) (return (ref.null $i32_=>_none) ) ) ) ;; CHECK: (func $selectify-simple (param $0 i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 97) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $selectify-simple (param $0 i32) (result i32) (if (result i32) (i32.lt_u (i32.sub (local.get $0) (i32.const 48) ) (i32.const 10) ) (i32.const 1) (i32.lt_u (i32.sub (i32.or (local.get $0) (i32.const 32) ) (i32.const 97) ) (i32.const 6) ) ) ) ;; CHECK: (func $restructure-br_if (param $x i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: (block $x (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $restructure-br_if (param $x i32) (result i32) ;; this block+br_if can be turned into an if. (block $x (result i32) (drop (br_if $x (i32.const 100) (local.get $x) ) ) (drop (i32.const 200)) (i32.const 300) ) ) ;; CHECK: (func $nothing ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nothing) ;; CHECK: (func $restructure-br_if-condition-reorderable (param $x i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: (block $x (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $restructure-br_if-condition-reorderable (param $x i32) (result i32) (block $x (result i32) (drop (br_if $x (i32.const 100) ;; the condition has side effects, but can be reordered with the value (block (result i32) (call $nothing) (local.get $x) ) ) ) (drop (i32.const 200)) (i32.const 300) ) ) ;; CHECK: (func $restructure-br_if-value-effectful (param $x i32) (result i32) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $x (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block0 (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $restructure-br_if-value-effectful (param $x i32) (result i32) (block $x (result i32) (drop (br_if $x ;; the value has side effects, but we can use a select instead ;; of an if, which keeps the value first (block (result i32) (call $nothing) (i32.const 100) ) ;; the condition has side effects too, but can be be reordered ;; to the end of the block (block (result i32) (call $nothing) (local.get $x) ) ) ) (drop (i32.const 200)) (i32.const 300) ) ) ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-1 (param $x i32) (result i32) ;; CHECK-NEXT: (block $x (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $x ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block1 (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $restructure-br_if-value-effectful-corner-case-1 (param $x i32) (result i32) (block $x (result i32) (drop (br_if $x (block (result i32) (call $nothing) (i32.const 100) ) (block (result i32) (call $nothing) (local.get $x) ) ) ) ;; the condition cannot be reordered with this (call $nothing) (i32.const 300) ) ) ;; CHECK: (func $get-i32 (result i32) ;; CHECK-NEXT: (i32.const 400) ;; CHECK-NEXT: ) (func $get-i32 (result i32) (i32.const 400) ) ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-2 (param $x i32) (result i32) ;; CHECK-NEXT: (block $x (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $x ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block2 (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $get-i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $restructure-br_if-value-effectful-corner-case-2 (param $x i32) (result i32) (block $x (result i32) (drop (br_if $x (block (result i32) (call $nothing) (i32.const 100) ) (block (result i32) (call $nothing) (local.get $x) ) ) ) (drop (i32.const 300)) ;; the condition cannot be reordered with this (call $get-i32) ) ) ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-3 (param $x i32) (result i32) ;; CHECK-NEXT: (block $x (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $x ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $restructure-br_if-value-effectful-corner-case-3 (param $x i32) (result i32) (block $x (result i32) (drop (br_if $x ;; we can't do an if because of effects here (block (result i32) (call $nothing) (i32.const 100) ) (local.get $x) ) ) ;; and we can't do a select because of effects here (call $nothing) (i32.const 100) ) ) ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-4 (param $x i32) (result i32) ;; CHECK-NEXT: (block $x (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $x ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (i32.const 100) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $get-i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $restructure-br_if-value-effectful-corner-case-4 (param $x i32) (result i32) (block $x (result i32) (drop (br_if $x ;; we can't do an if because of effects here (block (result i32) (call $nothing) (i32.const 100) ) (local.get $x) ) ) (drop (i32.const 300)) ;; and we can't do a select because of effects here (call $get-i32) ) ) ;; CHECK: (func $restructure-select-no-multivalue ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block $block (result i32 i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $restructure-br_if ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $restructure-select-no-multivalue (drop (block $block (result i32 i32) (drop (br_if $block (tuple.make (i32.const 1) ;; Add a side effect to prevent us turning $block into a ;; restructured if - instead, we will try a restructured select. ;; But, selects cannot return multiple values in the spec, so we ;; can do nothing here. (call $restructure-br_if (i32.const 2) ) ) (i32.const 3) ) ) (tuple.make (i32.const 4) (i32.const 5) ) ) ) ) ;; CHECK: (func $if-of-if ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $if-of-if) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-of-if (local $x i32) ;; The outer if has side effects in the condition while the inner one does ;; not, which means we can fold them. (if (local.tee $x (i32.const 1) ) (if (local.get $x) (call $if-of-if) ) ) ) ;; CHECK: (func $if-of-if-but-side-effects ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $if-of-if-but-side-effects) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-of-if-but-side-effects (local $x i32) ;; The inner if has side effects in the condition, which prevents this ;; optimization. (if (local.tee $x (i32.const 1) ) (if (local.tee $x (i32.const 2) ) (call $if-of-if-but-side-effects) ) ) ) ;; CHECK: (func $if-of-if-but-too-costly ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $if-of-if-but-too-costly) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-of-if-but-too-costly (local $x i32) ;; The inner if's condition has no effects, but it is very costly, so do not ;; run it unconditionally - leave this unoptimized. (if (local.tee $x (i32.const 1) ) (if (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (local.get $x) ))))))))) (call $if-of-if-but-too-costly) ) ) ) ;; CHECK: (func $if-of-if-but-inner-else ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (call $if-of-if-but-inner-else) ;; CHECK-NEXT: (call $if-of-if) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-of-if-but-inner-else (local $x i32) ;; The inner if has an else. For now, leave this unoptimized. (if (local.tee $x (i32.const 1) ) (if (local.get $x) (call $if-of-if-but-inner-else) (call $if-of-if) ) ) ) ;; CHECK: (func $if-of-if-but-outer-else ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (call $if-of-if-but-outer-else) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $if-of-if) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-of-if-but-outer-else (local $x i32) ;; The outer if has an else. For now, leave this unoptimized. (if (local.tee $x (i32.const 1) ) (if (local.get $x) (call $if-of-if-but-outer-else) ) (call $if-of-if) ) ) ) binaryen-version_108/test/lit/passes/remove-unused-module-elements-eh.wast000066400000000000000000000014101423707623100271730ustar00rootroot00000000000000;; RUN: wasm-opt %s --remove-unused-module-elements -all -S -o - | filecheck %s ;; Non-exported and unused tags can be removed (module (type $0 (func (param i32))) ;; CHECK-NOT: (tag $e-remove ;; CHECK: (tag $e-export ;; CHECK: (tag $e-throw ;; CHECK: (tag $e-catch (tag $e-remove (type $0)) ;; can be removed (tag $e-export (param i64)) ;; cannot be removed (exported) (tag $e-throw (type $0)) ;; cannot be removed (used in throw) (tag $e-catch (type $0)) ;; cannot be removed (used in catch) (export "e-export" (tag $e-export)) (import "env" "e" (tag $e-import (param i32))) (start $start) (func $start (try (do (throw $e-throw (i32.const 0)) ) (catch $e-catch (drop (pop i32)) ) ) ) ) binaryen-version_108/test/lit/passes/remove-unused-module-elements-refs.wast000066400000000000000000000211131423707623100275400ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --remove-unused-module-elements --nominal -all -S -o - | filecheck %s (module ;; CHECK: (type $A (func_subtype func)) (type $A (func)) ;; CHECK: (type $B (func_subtype func)) (type $B (func)) ;; CHECK: (elem declare func $target-A $target-B) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (func $foo (type $A) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $target-A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $target-B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (export "foo") ;; This export has two RefFuncs, and one CallRef. (drop (ref.func $target-A) ) (drop (ref.func $target-B) ) (call_ref (ref.null $A) ) ;; Verify that we do not crash on an unreachable call_ref, which has no ;; heap type for us to analyze. (call_ref (unreachable) ) ) ;; CHECK: (func $target-A (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-A (type $A) ;; This function is reachable from the export "foo": there is a RefFunc and ;; a CallRef for it there. ) (func $target-A-noref (type $A) ;; This function is not reachable. We have a CallRef of the right type, but ;; no RefFunc. ) ;; CHECK: (func $target-B (type $B) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $target-B (type $B) ;; This function is not reachable. We have a RefFunc in "foo" but no ;; suitable CallRef. ;; ;; Note that we cannot remove the function, as the RefFunc must refer to ;; something in order to validate. But we can clear out the body of this ;; function with an unreachable. ) ) ;; As above, but reverse the order inside $foo, so we see the CallRef first. (module ;; CHECK: (type $A (func_subtype func)) (type $A (func)) (type $B (func)) ;; CHECK: (elem declare func $target-A) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (func $foo (type $A) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $target-A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (export "foo") (call_ref (ref.null $A) ) (drop (ref.func $target-A) ) ) ;; CHECK: (func $target-A (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-A (type $A) ;; This function is reachable. ) (func $target-A-noref (type $A) ;; This function is not reachable. ) ) ;; As above, but interleave CallRefs with RefFuncs. (module ;; CHECK: (type $A (func_subtype func)) (type $A (func)) (type $B (func)) ;; CHECK: (elem declare func $target-A-1 $target-A-2) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (func $foo (type $A) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $target-A-1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $target-A-2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (export "foo") (call_ref (ref.null $A) ) (drop (ref.func $target-A-1) ) (call_ref (ref.null $A) ) (drop (ref.func $target-A-2) ) ) ;; CHECK: (func $target-A-1 (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-A-1 (type $A) ;; This function is reachable. ) ;; CHECK: (func $target-A-2 (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-A-2 (type $A) ;; This function is reachable. ) (func $target-A-3 (type $A) ;; This function is not reachable. ) ) ;; As above, with the order reversed inside $foo. The results should be the ;; same. (module ;; CHECK: (type $A (func_subtype func)) (type $A (func)) (type $B (func)) ;; CHECK: (elem declare func $target-A-1 $target-A-2) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (func $foo (type $A) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $target-A-1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $target-A-2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (export "foo") (drop (ref.func $target-A-1) ) (call_ref (ref.null $A) ) (drop (ref.func $target-A-2) ) (call_ref (ref.null $A) ) ) ;; CHECK: (func $target-A-1 (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-A-1 (type $A) ;; This function is reachable. ) ;; CHECK: (func $target-A-2 (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-A-2 (type $A) ;; This function is reachable. ) (func $target-A-3 (type $A) ;; This function is not reachable. ) ) ;; The call.without.effects intrinsic does a call to the reference given to it, ;; but for now other imports do not (until we add a flag for closed-world). (module ;; CHECK: (type $A (func_subtype func)) (type $A (func)) ;; CHECK: (type $funcref_=>_none (func_subtype (param funcref) func)) ;; CHECK: (import "binaryen-intrinsics" "call.without.effects" (func $call-without-effects (param funcref))) (import "binaryen-intrinsics" "call.without.effects" (func $call-without-effects (param funcref))) ;; CHECK: (import "other" "import" (func $other-import (param funcref))) (import "other" "import" (func $other-import (param funcref))) ;; CHECK: (elem declare func $target-drop $target-keep) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (func $foo (type $A) ;; CHECK-NEXT: (call $call-without-effects ;; CHECK-NEXT: (ref.func $target-keep) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $other-import ;; CHECK-NEXT: (ref.func $target-drop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (export "foo") ;; Calling the intrinsic with a reference is considered a call of the ;; reference, so we will not remove $target-keep. (call $call-without-effects (ref.func $target-keep) ) ;; The other import is not enough to keep $target-drop alive. (call $other-import (ref.func $target-drop) ) ) ;; CHECK: (func $target-keep (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-keep (type $A) ) ;; CHECK: (func $target-drop (type $A) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $target-drop (type $A) ) ) ;; As above, but now the call to the intrinsic does not let us see the exact ;; function being called. (module ;; CHECK: (type $A (func_subtype func)) (type $A (func)) ;; CHECK: (type $funcref_=>_none (func_subtype (param funcref) func)) ;; CHECK: (import "binaryen-intrinsics" "call.without.effects" (func $call-without-effects (param funcref))) (import "binaryen-intrinsics" "call.without.effects" (func $call-without-effects (param funcref))) ;; CHECK: (import "other" "import" (func $other-import (param funcref))) (import "other" "import" (func $other-import (param funcref))) ;; CHECK: (elem declare func $target-keep $target-keep-2) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (func $foo (type $A) ;; CHECK-NEXT: (call $call-without-effects ;; CHECK-NEXT: (ref.null $A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.func $target-keep) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $other-import ;; CHECK-NEXT: (ref.func $target-keep-2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (export "foo") ;; Call the intrinsic without a RefFunc. All we infer here is the type, ;; which means we must assume anything with type $A (and a reference) can be ;; called, which will keep alive both $target-keep and $target-keep-2 (call $call-without-effects (ref.null $A) ) (drop (ref.func $target-keep) ) (call $other-import (ref.func $target-keep-2) ) ) ;; CHECK: (func $target-keep (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-keep (type $A) ) ;; CHECK: (func $target-keep-2 (type $A) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $target-keep-2 (type $A) ) ) binaryen-version_108/test/lit/passes/remove-unused-names-eh.wast000066400000000000000000000032361423707623100252070ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --remove-unused-names -all -S -o - | filecheck %s (module ;; CHECK: (tag $tag$0 (param i32)) (tag $tag$0 (param i32)) ;; CHECK: (func $func0 ;; CHECK-NEXT: (try $label$9 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (try $label$8 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (rethrow $label$9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $label$8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tag$0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func0 (try $label$9 ;; needed due to a rethrow (do) (catch_all (try $label$8 ;; needed due to a delegate (do (try $label$6 ;; this one is not needed (do (rethrow $label$9) ) (delegate $label$8) ) ) (catch $tag$0 (drop (pop i32) ) ) ) ) ) ) ;; CHECK: (func $func1 ;; CHECK-NEXT: (try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func1 (try $label$3 ;; this one is not needed (do (nop) ) (delegate 0) ;; delegates to the caller ) ) ) binaryen-version_108/test/lit/passes/roundtrip-gc-types.wast000066400000000000000000000031151423707623100244710ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --roundtrip --nominal -S -o - | filecheck %s --check-prefix NOMNL ;; Regression test for an issue in which roundtripping failed to reproduce the ;; original types because type canonicalization was incorrect when the canonical ;; types already existed in the store. (module ;; CHECK: (type $A (struct (field (ref $C)))) ;; NOMNL: (type $A (struct_subtype (field (ref $C)) data)) (type $A (struct (field (ref $C)))) ;; CHECK: (type $C (struct (field (mut (ref $B))))) ;; CHECK: (type $B (func (param (ref $A)) (result (ref $B)))) ;; NOMNL: (type $C (struct_subtype (field (mut (ref $B))) data)) ;; NOMNL: (type $B (func_subtype (param (ref $A)) (result (ref $B)) func)) (type $B (func (param (ref $A)) (result (ref $B)))) (type $C (struct (field (mut (ref $B))))) ;; CHECK: (type $D (struct (field (ref $C)) (field (ref $A)))) ;; NOMNL: (type $D (struct_subtype (field (ref $C)) (field (ref $A)) $A)) (type $D (struct_subtype (field (ref $C)) (field (ref $A)) $A)) ;; CHECK: (global $g0 (rtt 0 $A) (rtt.canon $A)) ;; NOMNL: (global $g0 (rtt 0 $A) (rtt.canon $A)) (global $g0 (rtt 0 $A) (rtt.canon $A)) ;; CHECK: (global $g1 (rtt 1 $D) (rtt.sub $D ;; CHECK-NEXT: (global.get $g0) ;; CHECK-NEXT: )) ;; NOMNL: (global $g1 (rtt 1 $D) (rtt.sub $D ;; NOMNL-NEXT: (global.get $g0) ;; NOMNL-NEXT: )) (global $g1 (rtt 1 $D) (rtt.sub $D (global.get $g0) )) ) binaryen-version_108/test/lit/passes/roundtrip-gc.wast000066400000000000000000000034501423707623100233310ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --generate-stack-ir --optimize-stack-ir --roundtrip -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --generate-stack-ir --optimize-stack-ir --roundtrip --nominal -S -o - | filecheck %s --check-prefix NOMNL (module (type ${i32} (struct (field i32))) ;; CHECK: (export "export" (func $test)) ;; NOMNL: (export "export" (func $test)) (export "export" (func $test)) ;; CHECK: (func $test ;; CHECK-NEXT: (call $help ;; CHECK-NEXT: (rtt.canon $\7bi32\7d) ;; CHECK-NEXT: (block $label$1 (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $test (type $none_=>_none) ;; NOMNL-NEXT: (call $help ;; NOMNL-NEXT: (rtt.canon $\7bi32\7d) ;; NOMNL-NEXT: (block $label$1 (result i32) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (i32.const 1) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $test (call $help (rtt.canon ${i32}) ;; Stack IR optimizations can remove this block, leaving a nop in an odd ;; "stacky" location. On load, we would normally use a local to work around ;; that, creating a block to contain the rtt before us and the nop, and then ;; returning the local. But we can't use a local for an rtt, so we should not ;; optimize this sort of thing in stack IR. (block (result i32) (nop) (i32.const 1) ) ) ) ;; CHECK: (func $help (param $3 (rtt $\7bi32\7d)) (param $4 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; NOMNL: (func $help (type $rtt_$\7bi32\7d_i32_=>_none) (param $3 (rtt $\7bi32\7d)) (param $4 i32) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: ) (func $help (param $3 (rtt ${i32})) (param $4 i32) (nop) ) ) binaryen-version_108/test/lit/passes/roundtrip-table.wast000066400000000000000000000006751423707623100240350ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --roundtrip -S -o - (module (type $functype (func)) (table $0 48 funcref) ;; a type that appears in the table and nowhere else. this test checks that ;; we do not crash during the roundtrip on seeing an unexpected type that ;; collectHeapTypes() did not scan. (elem (table $0) (i32.const 0) funcref (ref.null $functype)) ) binaryen-version_108/test/lit/passes/roundtrip.wast000066400000000000000000000024431423707623100227430ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s (module ;; CHECK: (type $none (func)) (type $none (func)) ;; CHECK: (func $foo ;; CHECK-NEXT: (local $0 (funcref (ref null $none))) ;; CHECK-NEXT: (local $1 funcref) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $label$1 (result funcref (ref $none)) ;; CHECK-NEXT: (tuple.make ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result funcref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (tuple.extract 0 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (tuple.extract 1 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (drop ;; a tuple type with a non-nullable element, that must be carefully handled (block (result funcref (ref $none)) (tuple.make (ref.null func) (ref.func $foo) ) ) ) ) ) binaryen-version_108/test/lit/passes/rse-eh.wast000066400000000000000000000502041423707623100220760ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --rse -all -S -o - | filecheck %s (module ;; CHECK: (tag $e (param i32)) (tag $e (param i32)) ;; CHECK: (tag $e2 (param)) (tag $e2) ;; CHECK: (func $try1 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try1 (local $x i32) (try (do) (catch_all (local.set $x (i32.const 1)) ) ) ;; try will not throw. So this should NOT be dropped (local.set $x (i32.const 1)) ) ;; CHECK: (func $try2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try2 (local $x i32) (try (do (throw $e (i32.const 0)) (local.set $x (i32.const 1)) ) (catch_all) ) ;; local.set is after 'throw' so it will not run. This should NOT be ;; dropped. (local.set $x (i32.const 1)) ) ;; CHECK: (func $try3 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try3 (local $x i32) (try (do (throw $e (i32.const 0)) ) (catch_all (local.set $x (i32.const 1)) ) ) ;; try body will throw and catch_all contains the same local.set. This ;; should be dropped. (local.set $x (i32.const 1)) ) ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo) ;; CHECK: (func $try4 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try4 (local $x i32) (try (do (call $foo) (local.set $x (i32.const 1)) ) (catch_all) ) ;; (call $foo) may throw and the local.set may not run, so this should NOT ;; be dropped (local.set $x (i32.const 1)) ) ;; CHECK: (func $try5 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try5 (local $x i32) (try (do (local.set $x (i32.const 1)) (call $foo) ) (catch_all) ) ;; Even if (call $foo) throws, local.set runs before it, so this should be ;; dropped (local.set $x (i32.const 1)) ) ;; CHECK: (func $nested-try1 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (rethrow $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-try1 (local $x i32) (try (do (try $l0 (do (throw $e (i32.const 0)) ) (catch_all (rethrow $l0) ) ) ) (catch_all (local.set $x (i32.const 1)) ) ) ;; The exception is caught by the inner catch_all and rethrown and again ;; caught by the outer catch_all, which runs the local.set. So this should ;; be dropped. (local.set $x (i32.const 1)) ) ;; CHECK: (func $nested-try2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rethrow $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-try2 (local $x i32) (try (do (try $l0 (do (throw $e (i32.const 0)) ) (catch_all (local.set $x (i32.const 1)) (rethrow $l0) ) ) ) (catch_all) ) ;; The exception is caught by the inner catch_all, which runs the local.set, ;; so this should be dropped (local.set $x (i32.const 1)) ) ;; CHECK: (func $nested-try3 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (rethrow $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-try3 (local $x i32) (try (do (try $l0 (do (throw $e (i32.const 0)) ) (catch $e (drop (pop i32)) (local.set $x (i32.const 1)) (rethrow $l0) ) ) ) (catch_all) ) ;; Unlike nested-try2, the exception may not be caught by the inner catch, ;; so the local.set may not run. So this should NOT be dropped. (local.set $x (i32.const 1)) ) ;; CHECK: (func $nested-catch1 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e2 ;; CHECK-NEXT: (try $try0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e2 ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-catch1 (local $x i32) (try (do (throw $e (i32.const 0)) ) (catch $e (drop (pop i32)) ) (catch $e2 (try (do (throw $e (i32.const 0)) ) (catch $e (drop (pop i32)) ) (catch $e2 (local.set $x (i32.const 1)) ) ) ) ) ;; This should NOT be dropped because the exception might not be caught by ;; the inner catches, and the local.set above us may not have run, and ;; other possible code paths do not even set the local. (local.set $x (i32.const 1)) ) ;; CHECK: (func $nested-catch2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (try $try1 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-catch2 (local $x i32) (try (do (throw $e (i32.const 0)) ) (catch $e (drop (pop i32)) (local.set $x (i32.const 1)) ) (catch_all (try (do (throw $e (i32.const 0)) ) (catch $e (drop (pop i32)) (local.set $x (i32.const 1)) ) (catch_all (local.set $x (i32.const 1)) ) ) ) ) ;; This should be dropped because the exception is guaranteed to be caught ;; by one of the catches and it will set the local to 1. (local.set $x (i32.const 1)) ) ;; CHECK: (func $catchless-try ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $catchless-try (local $x i32) (try (do (call $foo) (local.set $x (i32.const 1)) ) ) ;; The only way we end up here is when (call $foo) does not throw, because ;; if (call $foo) throws, it will throw to the caller because it is within ;; a catchless try. In that case the local.set after (call $foo) would have ;; run before this, so this can be dropped. (local.set $x (i32.const 1)) ) ;; CHECK: (func $try-delegate0 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try2 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-delegate0 (local $x i32) (try $l0 (do (try (do (try (do (throw $e (i32.const 0)) ) (delegate $l0) ) ) (catch_all) ) ) (catch_all (local.set $x (i32.const 1)) ) ) ;; The innermost try has a delegate, which delegates to the outermost try's ;; catch_all, which has the same local.set. So this can be dropped. (local.set $x (i32.const 1)) ) ;; CHECK: (func $try-delegate1 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try3 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-delegate1 (local $x i32) (try $l0 (do (try (do (try (do (throw $e (i32.const 0)) ) (delegate $l0) ) ) (catch_all (local.set $x (i32.const 1)) ) ) ) (catch_all) ) ;; The middle try's catch_all has the same local.set, but it is skipped ;; because the innermost try-delegate delegates to the outer try while ;; skipping the middle try-catch_all. So this should NOT be dropped. (local.set $x (i32.const 1)) ) ;; CHECK: (func $try-delegate2 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try4 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-delegate2 (local $x i32) (try $l0 (do (try (do (try (do (throw $e (i32.const 0)) ) (delegate 2) ;; delegate to caller ) ) (catch_all (local.set $x (i32.const 1)) ) ) ) (catch_all (local.set $x (i32.const 1)) ) ) ;; The innermost try-delegate delegates to the caller, bypassing all ;; local.sets in the middle and the outermost try-catch_alls. So this should ;; NOT be dropped. (Instead this is unreachable, but that's DCE's work) (local.set $x (i32.const 1)) ) ;; CHECK: (func $try-delegate3 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $l1 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try5 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try6 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $l1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-delegate3 (local $x i32) (try $l0 (do (try (do (try $l1 (do (try (do (try (do (throw $e (i32.const 0)) ) (delegate $l1) ) ) (catch_all (local.set $x (i32.const 1)) ) ) ) (delegate $l0) ) ) (catch_all (local.set $x (i32.const 1)) ) ) ) (catch_all) ) ;; The innermost try delegates to $l1, which in turn delegates to $l0, ;; skipping all local.sets in between. So this should NOT be dropped. (local.set $x (i32.const 1)) ) ;; CHECK: (func $try-delegate4 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (try $l0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $l1 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try7 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try8 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $l1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $l0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-delegate4 (local $x i32) (try $l0 (do (try (do (try $l1 (do (try (do (try (do (throw $e (i32.const 0)) ) (delegate $l1) ) ) (catch_all) ) ) (delegate $l0) ) ) (catch_all) ) ) (catch_all (local.set $x (i32.const 1)) ) ) ;; The innermost try delegates to $l1, which in turn delgates to $l0, whose ;; catch_all runs the same local.set. So this can be dropped. (local.set $x (i32.const 1)) ) ) binaryen-version_108/test/lit/passes/rse-gc.wast000066400000000000000000000012311423707623100220670ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --rse --enable-gc-nn-locals -all -S -o - | filecheck %s (module ;; CHECK: (func $test ;; CHECK-NEXT: (local $single (ref func)) ;; CHECK-NEXT: (local $tuple ((ref any) (ref any))) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $test ;; A non-nullable local. The pass should ignore it (as we cannot optimize ;; anything here anyhow: the code must assign to the local before reading from ;; it, so no sets can be redundant in that sense). (local $single (ref func)) ;; A non-nullable tuple. (local $tuple ((ref any) (ref any))) ) ) binaryen-version_108/test/lit/passes/signature-pruning.wast000066400000000000000000000521621423707623100244010ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --nominal --signature-pruning -all -S -o - | filecheck %s (module ;; CHECK: (type $sig (func_subtype (param i32 f64) func)) (type $sig (func_subtype (param i32) (param i64) (param f32) (param f64) func)) (memory 1 1) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (memory $0 1 1) ;; CHECK: (elem declare func $foo) ;; CHECK: (func $foo (type $sig) (param $0 i32) (param $1 f64) ;; CHECK-NEXT: (local $2 f32) ;; CHECK-NEXT: (local $3 i64) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) (param $i64 i64) (param $f32 f32) (param $f64 f64) ;; Use the first and last parameter. The middle parameters will be removed ;; both from the function and from $sig, and also in the calls below. (i32.store (i32.const 0) (local.get $i32) ) (f64.store (i32.const 0) (local.get $f64) ) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (f64.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (f64.const 7) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $foo (i32.const 0) (i64.const 1) (f32.const 2) (f64.const 3) ) (call_ref (i32.const 4) (i64.const 5) (f32.const 6) (f64.const 7) (ref.func $foo) ) ) ) (module ;; CHECK: (type $sig (func_subtype (param i64 f32) func)) (type $sig (func_subtype (param i32) (param i64) (param f32) (param f64) func)) (memory 1 1) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (memory $0 1 1) ;; CHECK: (elem declare func $foo) ;; CHECK: (func $foo (type $sig) (param $0 i64) (param $1 f32) ;; CHECK-NEXT: (local $2 f64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) (param $i64 i64) (param $f32 f32) (param $f64 f64) ;; Use the middle two parameters. (i64.store (i32.const 0) (local.get $i64) ) (f32.store (i32.const 0) (local.get $f32) ) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: (f32.const 6) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $foo (i32.const 0) (i64.const 1) (f32.const 2) (f64.const 3) ) (call_ref (i32.const 4) (i64.const 5) (f32.const 6) (f64.const 7) (ref.func $foo) ) ) ) (module ;; CHECK: (type $sig (func_subtype (param i32 i64 f32) func)) (type $sig (func_subtype (param i32) (param i64) (param f32) (param f64) func)) (memory 1 1) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (memory $0 1 1) ;; CHECK: (elem declare func $foo) ;; CHECK: (func $foo (type $sig) (param $0 i32) (param $1 i64) (param $2 f32) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) (param $i64 i64) (param $f32 f32) (param $f64 f64) ;; Use the middle two parameters. (i64.store (i32.const 0) (local.get $i64) ) (f32.store (i32.const 0) (local.get $f32) ) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $caller) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: (f32.const 6) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller ;; As above, but now one of the unused parameters has a side effect which ;; prevents us from removing it (flattening the IR first would avoid this ;; limitation). We only end up removing a single unused param, the last. (call $foo (block (result i32) (call $caller) (i32.const 0) ) (i64.const 1) (f32.const 2) (f64.const 3) ) (call_ref (i32.const 4) (i64.const 5) (f32.const 6) (f64.const 7) (ref.func $foo) ) ) ) ;; As above, but with the effects on a call_ref. Once more, we can only optimize ;; away the very last param. (module ;; CHECK: (type $sig (func_subtype (param i32 i64 f32) func)) (type $sig (func_subtype (param i32) (param i64) (param f32) (param f64) func)) (memory 1 1) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (memory $0 1 1) ;; CHECK: (elem declare func $foo) ;; CHECK: (func $foo (type $sig) (param $0 i32) (param $1 i64) (param $2 f32) ;; CHECK-NEXT: (local $3 f64) ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) (param $i64 i64) (param $f32 f32) (param $f64 f64) (i64.store (i32.const 0) (local.get $i64) ) (f32.store (i32.const 0) (local.get $f32) ) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i64.const 1) ;; CHECK-NEXT: (f32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (call $caller) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.const 5) ;; CHECK-NEXT: (f32.const 6) ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $foo (i32.const 0) (i64.const 1) (f32.const 2) (f64.const 3) ) (call_ref (block (result i32) (call $caller) (i32.const 4) ) (i64.const 5) (f32.const 6) (f64.const 7) (ref.func $foo) ) ) ) (module ;; CHECK: (type $sig (func_subtype func)) (type $sig (func_subtype (param i32) (param i64) (param f32) (param f64) func)) (memory 1 1) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (memory $0 1 1) ;; CHECK: (elem declare func $foo) ;; CHECK: (func $foo (type $sig) ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (local $1 f32) ;; CHECK-NEXT: (local $2 i64) ;; CHECK-NEXT: (local $3 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) (param $i64 i64) (param $f32 f32) (param $f64 f64) ;; Use nothing at all: all params can be removed. ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $foo (i32.const 0) (i64.const 1) (f32.const 2) (f64.const 3) ) (call_ref (i32.const 4) (i64.const 5) (f32.const 6) (f64.const 7) (ref.func $foo) ) ) ) (module ;; CHECK: (type $sig (func_subtype func)) (type $sig (func_subtype (param i32) func)) (memory 1 1) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $foo (type $sig) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) ;; Use the parameters' index, but not its value. We can still remove it, ;; and the value set in the function is then set to a local and not a param, ;; which works just as well. (local.set $i32 (i32.const 1) ) (i32.store (i32.const 0) (local.get $i32) ) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) (func $caller (local $x i32) (call $foo ;; (avoid passing in a constant value to avoid other opts kicking in) (local.get $x) ) ) ) (module ;; CHECK: (type $sig (func_subtype func)) (type $sig (func_subtype (param i32) func)) (memory 1 1) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $foo (type $sig) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) ;; This function does not use the parameter. It also has no calls, but that ;; is not a problem - we can still remove the parameter. ) ) (module ;; CHECK: (type $sig (func_subtype (param i32) func)) (type $sig (func_subtype (param i32) func)) ;; As above, but now an import also uses this signature, which prevents us ;; from changing anything. ;; CHECK: (import "out" "func" (func $import (param i32))) (import "out" "func" (func $import (type $sig) (param i32))) (memory 1 1) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $foo (type $sig) (param $i32 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) ) ) (module ;; CHECK: (type $sig (func_subtype (param i32) func)) (type $sig (func_subtype (param i32) func)) (memory 1 1) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $foo (type $sig) (param $i32 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) ) ;; CHECK: (func $bar (type $sig) (param $i32 i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (type $sig) (param $i32 i32) ;; As above, but now there is a second (non-imported) function using this ;; signature, and it does use the param, so we cannot optimize. (i32.store (i32.const 0) (local.get $i32) ) ) ) (module ;; CHECK: (type $sig (func_subtype func)) (type $sig (func_subtype (param i32) func)) ;; CHECK: (type $sig2 (func_subtype (param i32) func)) (type $sig2 (func_subtype (param i32) func)) (memory 1 1) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $foo (type $sig) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) ) ;; CHECK: (func $bar (type $sig2) (param $i32 i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (type $sig2) (param $i32 i32) ;; As above, but now the second function has a different signature, so we ;; can optimize one while not modifying the other. (i32.store (i32.const 0) (local.get $i32) ) ) ) (module ;; CHECK: (type $sig (func_subtype func)) (type $sig (func_subtype (param i32) func)) (memory 1 1) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (memory $0 1 1) ;; CHECK: (elem declare func $bar $foo) ;; CHECK: (func $foo (type $sig) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) ) ;; CHECK: (func $bar (type $sig) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $bar (type $sig) (param $i32 i32) ;; As above, but the second function also does not use the parameter, and ;; has the same type. We can optimize both at once. ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $bar) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.func $bar) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $foo (i32.const 0) ) (call $bar (i32.const 1) ) (call_ref (i32.const 2) (ref.func $foo) ) (call_ref (i32.const 2) (ref.func $bar) ) ) ;; CHECK: (func $caller-2 (type $none_=>_none) ;; CHECK-NEXT: (call $bar) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller-2 ;; Also add some more calls to see they are updated too. (call $bar (i32.const 1) ) (call_ref (i32.const 2) (ref.func $foo) ) ) ) (module ;; The presence of a table prevents us from doing any optimizations. (table 1 1 anyref) ;; CHECK: (type $sig (func_subtype (param i32) func)) (type $sig (func_subtype (param i32) func)) ;; CHECK: (table $0 1 1 anyref) ;; CHECK: (func $foo (type $sig) (param $i32 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (type $sig) (param $i32 i32) ) ) ;; Exports cannot be optimized in any way: we cannot remove parameters from ;; them, and also we cannot apply constant parameter values either. (module ;; CHECK: (type $sig (func_subtype (param i32) func)) (type $sig (func_subtype (param i32) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (export "foo" (func $foo)) ;; CHECK: (export "bar" (func $bar)) ;; CHECK: (func $foo (type $sig) (param $i32 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (export "foo") (type $sig) (param $i32 i32) ) ;; CHECK: (func $bar (type $sig) (param $i32 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $bar (export "bar") (type $sig) (param $i32 i32) ) ;; CHECK: (func $call-bar (type $none_=>_none) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-bar (call $bar (i32.const 42) ) ) ) ;; Two functions with two different types have an unused parameter. After ;; removing the parameter from each, they both have no parameters. They should ;; *not* have the same type, however: the type should be different nominally ;; even though after the pruning they are identical structurally. (module ;; CHECK: (type $sig1 (func_subtype func)) (type $sig1 (func_subtype (param i32) func)) ;; CHECK: (type $sig2 (func_subtype func)) (type $sig2 (func_subtype (param f64) func)) ;; CHECK: (func $foo1 (type $sig1) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo1 (type $sig1) (param $i32 i32) ) ;; CHECK: (func $foo2 (type $sig2) ;; CHECK-NEXT: (local $0 f64) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo2 (type $sig2) (param $f64 f64) ) ) (module ;; CHECK: (type $sig-foo (func_subtype func)) (type $sig-foo (func_subtype (param i32) func)) ;; CHECK: (type $sig-bar (func_subtype (param i32) func)) (type $sig-bar (func_subtype (param i32) func)) (memory 1 1) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $foo (type $sig-foo) ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (type $sig-foo) (param $i32 i32) ;; This function is always called with the same constant, and we can ;; apply that constant here and prune the param. (i32.store (i32.const 0) (local.get $i32) ) (call $foo (i32.const 42)) (call $foo (i32.const 42)) (call $foo (i32.const 42)) ) ;; CHECK: (func $bar (type $sig-bar) (param $i32 i32) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (type $sig-bar) (param $i32 i32) ;; This function is called with various values, and cannot be optimized like ;; the previous one. (i32.store (i32.const 0) (local.get $i32) ) (call $bar (i32.const 42)) (call $bar (i32.const 43)) ) ) ;; As above, but $foo's parameter is a ref.func, which is also a constant ;; value that we can optimize in the case of $foo (but not $bar, again, as $bar ;; is not always sent a constant value). (module ;; CHECK: (type $sig-foo (func_subtype func)) (type $sig-foo (func_subtype (param funcref) func)) ;; CHECK: (type $sig-bar (func_subtype (param funcref) func)) (type $sig-bar (func_subtype (param funcref) func)) (memory 1 1) ;; CHECK: (memory $0 1 1) ;; CHECK: (elem declare func $bar $foo) ;; CHECK: (func $foo (type $sig-foo) ;; CHECK-NEXT: (local $0 funcref) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (type $sig-foo) (param $funcref funcref) (drop (local.get $funcref)) (call $foo (ref.func $foo)) (call $foo (ref.func $foo)) (call $foo (ref.func $foo)) ) ;; CHECK: (func $bar (type $sig-bar) (param $funcref funcref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $funcref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (ref.func $bar) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (type $sig-bar) (param $funcref funcref) (drop (local.get $funcref)) (call $bar (ref.func $foo)) (call $bar (ref.func $bar)) ) ) ;; As above, but the values are now ref.nulls. All nulls compare equal, so we ;; can still optimize even though the types differ. (module ;; CHECK: (type $sig-foo (func_subtype func)) (type $sig-foo (func_subtype (param anyref) func)) ;; CHECK: (type $sig-bar (func_subtype (param anyref) func)) (type $sig-bar (func_subtype (param anyref) func)) (memory 1 1) ;; CHECK: (memory $0 1 1) ;; CHECK: (elem declare func $foo) ;; CHECK: (func $foo (type $sig-foo) ;; CHECK-NEXT: (local $0 anyref) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (type $sig-foo) (param $anyref anyref) (drop (local.get $anyref)) (call $foo (ref.null any)) (call $foo (ref.null func)) ) ;; CHECK: (func $bar (type $sig-bar) (param $anyref anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $anyref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $bar ;; CHECK-NEXT: (ref.null func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (type $sig-bar) (param $anyref anyref) (drop (local.get $anyref)) ;; Mixing a null with something else prevents optimization, of course. (call $bar (ref.func $foo)) (call $bar (ref.null func)) ) ) (module ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $A (struct_subtype data)) (type $A (struct_subtype data)) ;; CHECK: (func $0 (type $none_=>_none) ;; CHECK-NEXT: (local $0 f32) ;; CHECK-NEXT: (ref.cast_static $A ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (param $0 f32) ;; $A is only used in an unreachable cast. We should not error when ;; removing the param from this function, during which we collect heap ;; types, and must find this one even though the cast is unreachable, as ;; we do need to handle it in the optimization as well as print it (note how ;; type $A is declared in the output here - it would be a bug if it were ;; not, which this is a regression test for). (ref.cast_static $A (unreachable) ) ) ) binaryen-version_108/test/lit/passes/signature-refining.wast000066400000000000000000000454371423707623100245270ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --nominal --signature-refining -all -S -o - | filecheck %s (module ;; $func is defined with an anyref parameter but always called with a $struct, ;; and we can specialize the heap type to that. That will both update the ;; heap type's definition as well as the types of the parameters as printed ;; on the function (which are derived from the heap type). ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) ;; CHECK: (type $sig (func_subtype (param (ref $struct)) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $sig) (param $x (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $func ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $func (struct.new $struct) ) ) ) (module ;; As above, but the call is via call_ref. ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) ;; CHECK: (type $sig (func_subtype (param (ref $struct)) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (elem declare func $func) ;; CHECK: (func $func (type $sig) (param $x (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: (ref.func $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call_ref (struct.new $struct) (ref.func $func) ) ) ) (module ;; A combination of call types, and the LUB is affected by all of them: one ;; call uses a nullable $struct, the other a non-nullable dataref, so the LUB ;; is a nullable dataref. ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) ;; CHECK: (type $sig (func_subtype (param (ref null data)) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (elem declare func $func) ;; CHECK: (func $func (type $sig) (param $x (ref null data)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (local $struct (ref null $struct)) ;; CHECK-NEXT: (call $func ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.as_data ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.func $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (local $struct (ref null $struct)) (call $func ;; Use a local to avoid a ref.null being updated. (local.get $struct) ) (call_ref (ref.as_data (struct.new $struct) ) (ref.func $func) ) ) ) (module ;; Multiple functions with the same heap type. Again, the LUB is in the ;; middle, this time the parent $struct and not a subtype. ;; CHECK: (type $sig (func_subtype (param (ref $struct)) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype data)) ;; CHECK: (type $struct-sub1 (struct_subtype $struct)) (type $struct-sub1 (struct_subtype $struct)) ;; CHECK: (type $struct-sub2 (struct_subtype $struct)) (type $struct-sub2 (struct_subtype $struct)) (type $struct (struct_subtype data)) ;; CHECK: (func $func-1 (type $sig) (param $x (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-1 (type $sig) (param $x anyref) ) ;; CHECK: (func $func-2 (type $sig) (param $x (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-2 (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $func-1 ;; CHECK-NEXT: (struct.new_default $struct-sub1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $func-2 ;; CHECK-NEXT: (struct.new_default $struct-sub2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $func-1 (struct.new $struct-sub1) ) (call $func-2 (struct.new $struct-sub2) ) ) ) (module ;; As above, but now only one of the functions is called. The other is still ;; updated, though, as they share a heap type. ;; CHECK: (type $sig (func_subtype (param (ref $struct)) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func-1 (type $sig) (param $x (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-1 (type $sig) (param $x anyref) ) ;; CHECK: (func $func-2 (type $sig) (param $x (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-2 (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $func-1 ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $func-1 (struct.new $struct) ) ) ) (module ;; Define a field in the struct of the signature type that will be updated, ;; to check for proper validation after the update. ;; CHECK: (type $sig (func_subtype (param (ref $struct)) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $struct (struct_subtype (field (ref $sig)) data)) (type $struct (struct_subtype (field (ref $sig)) data)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (elem declare func $func) ;; CHECK: (func $func (type $sig) (param $x (ref $struct)) ;; CHECK-NEXT: (local $temp (ref null $sig)) ;; CHECK-NEXT: (local $2 anyref) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ;; Define a local of the signature type that is updated. (local $temp (ref null $sig)) ;; Do a local.get of the param, to verify its type is valid. (drop (local.get $x) ) ;; Copy between the param and the local, to verify their types are still ;; compatible after the update. Note that we will need to add a fixup local ;; here, as $x's new type becomes too specific to be assigned the value ;; here. (local.set $x (local.get $temp) ) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $func ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (ref.func $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $func (struct.new $struct (ref.func $func) ) ) ) ) (module ;; An unreachable value does not prevent optimization: we will update the ;; param to be $struct. ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) ;; CHECK: (type $sig (func_subtype (param (ref $struct)) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (elem declare func $func) ;; CHECK: (func $func (type $sig) (param $x (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $func ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (ref.func $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $func (struct.new $struct) ) (call_ref (unreachable) (ref.func $func) ) ) ) (module ;; When we have only unreachable values, there is nothing to optimize, and we ;; should not crash. (type $struct (struct_subtype data)) ;; CHECK: (type $sig (func_subtype (param anyref) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (elem declare func $func) ;; CHECK: (func $func (type $sig) (param $x anyref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (ref.func $func) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call_ref (unreachable) (ref.func $func) ) ) ) (module ;; When we have no calls, there is nothing to optimize, and we should not ;; crash. (type $struct (struct_subtype data)) ;; CHECK: (type $sig (func_subtype (param anyref) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (func $func (type $sig) (param $x anyref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ) ) (module ;; Test multiple fields in multiple types. ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) ;; CHECK: (type $sig-1 (func_subtype (param (ref null data) anyref) func)) (type $sig-1 (func_subtype (param anyref) (param anyref) func)) ;; CHECK: (type $sig-2 (func_subtype (param anyref (ref $struct)) func)) (type $sig-2 (func_subtype (param anyref) (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (elem declare func $func-2) ;; CHECK: (func $func-1 (type $sig-1) (param $x (ref null data)) (param $y anyref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-1 (type $sig-1) (param $x anyref) (param $y anyref) ) ;; CHECK: (func $func-2 (type $sig-2) (param $x anyref) (param $y (ref $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func-2 (type $sig-2) (param $x anyref) (param $y anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (local $data (ref null data)) ;; CHECK-NEXT: (local $func funcref) ;; CHECK-NEXT: (call $func-1 ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $func-1 ;; CHECK-NEXT: (local.get $data) ;; CHECK-NEXT: (local.get $any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $func-2 ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (local.get $func) ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: (ref.func $func-2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (local $any (ref null any)) (local $data (ref null data)) (local $func (ref null func)) (call $func-1 (struct.new $struct) (local.get $data) ) (call $func-1 (local.get $data) (local.get $any) ) (call $func-2 (struct.new $struct) (struct.new $struct) ) (call_ref (local.get $func) (struct.new $struct) (ref.func $func-2) ) ) ) (module ;; The presence of a table prevents us from doing any optimizations. ;; CHECK: (type $sig (func_subtype (param anyref) func)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) (table 1 1 anyref) ;; CHECK: (table $0 1 1 anyref) ;; CHECK: (func $func (type $sig) (param $x anyref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $func ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $func (struct.new $struct) ) ) ) (module ;; Pass a null in one call to the function. The null can be updated which ;; allows us to refine (but the new type must be nullable). ;; CHECK: (type $struct (struct_subtype data)) ;; CHECK: (type $sig (func_subtype (param (ref null $struct)) func)) (type $sig (func_subtype (param anyref) func)) (type $struct (struct_subtype data)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (func $func (type $sig) (param $x (ref null $struct)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $func ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $func ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $func (struct.new $struct) ) (call $func (ref.null data) ) ) ) (module ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) ;; This signature has a single function using it, which returns a more ;; refined type, and we can refine to that. ;; CHECK: (type $sig-can-refine (func_subtype (result (ref $struct)) func)) (type $sig-can-refine (func_subtype (result anyref) func)) ;; Also a single function, but no refinement is possible. ;; CHECK: (type $sig-cannot-refine (func_subtype (result anyref) func)) (type $sig-cannot-refine (func_subtype (result anyref) func)) ;; The single function never returns, so no refinement is possible. ;; CHECK: (type $sig-unreachable (func_subtype (result anyref) func)) (type $sig-unreachable (func_subtype (result anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (elem declare func $func-can-refine) ;; CHECK: (func $func-can-refine (type $sig-can-refine) (result (ref $struct)) ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) (func $func-can-refine (type $sig-can-refine) (result anyref) (struct.new $struct) ) ;; CHECK: (func $func-cannot-refine (type $sig-cannot-refine) (result anyref) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) (func $func-cannot-refine (type $sig-cannot-refine) (result anyref) (ref.null any) ) ;; CHECK: (func $func-unreachable (type $sig-unreachable) (result anyref) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $func-unreachable (type $sig-unreachable) (result anyref) (unreachable) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref $struct)) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call $func-can-refine) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref $struct)) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (call_ref ;; CHECK-NEXT: (ref.func $func-can-refine) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller ;; Add a call to see that we update call types properly. ;; Put the call in an if so the refinalize will update the if type and get ;; printed out conveniently. (drop (if (result anyref) (i32.const 1) (call $func-can-refine) (unreachable) ) ) ;; The same with a call_ref. (drop (if (result anyref) (i32.const 1) (call_ref (ref.func $func-can-refine) ) (unreachable) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) ;; This signature has multiple functions using it, and some of them have nulls ;; which should be updated when we refine. ;; CHECK: (type $sig (func_subtype (result (ref null $struct)) func)) (type $sig (func_subtype (result anyref) func)) ;; CHECK: (func $func-1 (type $sig) (result (ref null $struct)) ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) (func $func-1 (type $sig) (result anyref) (struct.new $struct) ) ;; CHECK: (func $func-2 (type $sig) (result (ref null $struct)) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) (func $func-2 (type $sig) (result anyref) (ref.null any) ) ;; CHECK: (func $func-3 (type $sig) (result (ref null $struct)) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) (func $func-3 (type $sig) (result anyref) (ref.null eq) ) ;; CHECK: (func $func-4 (type $sig) (result (ref null $struct)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (return ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $func-4 (type $sig) (result anyref) (if (i32.const 1) (return (ref.null any) ) ) (unreachable) ) ) ;; Exports prevent optimization, so $func's type will not change here. (module ;; CHECK: (type $sig (func_subtype (param anyref) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $struct (struct_subtype data)) (type $struct (struct_subtype data)) (type $sig (func_subtype (param anyref) func)) ;; CHECK: (export "prevent-opts" (func $func)) ;; CHECK: (func $func (type $sig) (param $x anyref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $func (export "prevent-opts") (type $sig) (param $x anyref) ) ;; CHECK: (func $caller (type $none_=>_none) ;; CHECK-NEXT: (call $func ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $caller (call $func (struct.new $struct) ) ) ) (module ;; CHECK: (type $A (func_subtype (param i32) func)) (type $A (func_subtype (param i32) func)) ;; CHECK: (type $B (func_subtype (param i32) $A)) (type $B (func_subtype (param i32) $A)) ;; CHECK: (func $bar (type $B) (param $x i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $bar (type $B) (param $x i32) ;; The parameter to this function can be pruned. But while doing so we must ;; properly preserve the subtyping of $B from $A, which means we cannot just ;; remove it - we'd need to remove it from $A as well, which we don't ;; attempt to do in the pass atm. So we do not optimize here. (nop) ) ) binaryen-version_108/test/lit/passes/simplify-globals-non-init.wast000066400000000000000000000101421423707623100257160ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --simplify-globals --enable-mutable-globals -S -o - | filecheck %s ;; A global that is written its initial value in all subsequent writes can ;; remove those writes. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $global-0 i32 (i32.const 0)) (global $global-0 (mut i32) (i32.const 0)) ;; CHECK: (global $global-1 i32 (i32.const 1)) (global $global-1 (mut i32) (i32.const 1)) ;; CHECK: (func $sets ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sets ;; All these writes can be turned into drops. (global.set $global-0 (i32.const 0)) (global.set $global-0 (i32.const 0)) (global.set $global-1 (i32.const 1)) (global.set $global-1 (i32.const 1)) ) ;; CHECK: (func $gets ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $gets ;; Add gets to avoid other opts from removing the sets. (drop (global.get $global-0)) (drop (global.get $global-1)) ) ) ;; As above, but now we write other values. (module ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $global-0 (mut i32) (i32.const 0)) (global $global-0 (mut i32) (i32.const 0)) ;; CHECK: (global $global-1 (mut i32) (i32.const 1)) (global $global-1 (mut i32) (i32.const 1)) ;; CHECK: (func $sets (param $unknown i32) ;; CHECK-NEXT: (global.set $global-0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global-0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global-1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global-1 ;; CHECK-NEXT: (local.get $unknown) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sets (param $unknown i32) (global.set $global-0 (i32.const 0)) (global.set $global-0 (i32.const 1)) ;; a non-init value (global.set $global-1 (i32.const 1)) (global.set $global-1 (local.get $unknown)) ;; a totally unknown value ) ;; CHECK: (func $gets ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $global-0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $global-1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $gets (drop (global.get $global-0)) (drop (global.get $global-1)) ) ) ;; Globals without constant initial values. (module ;; An imported global. ;; CHECK: (type $i32_=>_none (func (param i32))) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (import "env" "import_global" (global $global-0 (mut i32))) (import "env" "import_global" (global $global-0 (mut i32))) ;; A global that initializes with another global. ;; CHECK: (global $global-1 (mut i32) (global.get $global-0)) (global $global-1 (mut i32) (global.get $global-0)) ;; CHECK: (func $sets (param $unknown i32) ;; CHECK-NEXT: (global.set $global-0 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global-1 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $sets (param $unknown i32) (global.set $global-0 (i32.const 0)) (global.set $global-1 (i32.const 1)) ) ;; CHECK: (func $gets ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $global-0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $global-1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $gets ;; Add gets to avoid other opts from removing the sets. (drop (global.get $global-0)) (drop (global.get $global-1)) ) ) binaryen-version_108/test/lit/passes/simplify-globals-read_only_to_write.wast000066400000000000000000000500221423707623100300540ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --simplify-globals -S -o - | filecheck %s ;; A global that is only read in order to be written is not needed. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $global i32 (i32.const 0)) (global $global (mut i32) (i32.const 0)) ;; CHECK: (func $simple ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $simple (if (global.get $global) (global.set $global (i32.const 1)) ) ) ;; CHECK: (func $more-with-no-side-effects ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $more-with-no-side-effects (if ;; Also test for other operations in the condition, with no effects. (i32.eqz (global.get $global) ) ;; Also test for other operations in the body, with no effects. (block (nop) (global.set $global (i32.const 1)) ) ) ) ;; CHECK: (func $additional-set ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $additional-set ;; An additional set does not prevent this optimization: the value written ;; will never be read in a way that matters. (global.set $global (i32.const 2)) ) ) ;; An additional read prevents the read-only-to-write optimization. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $global (mut i32) (i32.const 0)) (global $global (mut i32) (i32.const 0)) ;; CHECK: (func $additional-read ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $additional-read (if (global.get $global) (global.set $global (i32.const 1)) ) (drop (global.get $global) ) ) ) ;; We do not optimize if-elses in the read-only-to-write optimization. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $global (mut i32) (i32.const 0)) (global $global (mut i32) (i32.const 0)) ;; CHECK: (func $if-else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else (if (global.get $global) (global.set $global (i32.const 1)) (nop) ) ) ) ;; Side effects in the body prevent the read-only-to-write optimization. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $global (mut i32) (i32.const 0)) (global $global (mut i32) (i32.const 0)) ;; CHECK: (global $other (mut i32) (i32.const 0)) (global $other (mut i32) (i32.const 0)) ;; CHECK: (func $side-effects-in-body ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $other ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effects-in-body (if (global.get $global) (block (global.set $global (i32.const 1)) (global.set $other (i32.const 2)) (drop (global.get $other)) ) ) ) ) ;; Nested patterns work as well, in a single run of the pass. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $a i32 (i32.const 0)) (global $a (mut i32) (i32.const 0)) ;; CHECK: (global $b i32 (i32.const 0)) (global $b (mut i32) (i32.const 0)) ;; CHECK: (global $c i32 (i32.const 0)) (global $c (mut i32) (i32.const 0)) ;; CHECK: (func $nested ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (block $block3 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested (if (global.get $a) (block (global.set $a (i32.const 1)) (if (global.get $b) (block (if (global.get $c) (block (global.set $c (i32.const 2)) ) ) (global.set $b (i32.const 3)) ) ) ) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once i32 (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $clinit ;; A read-only-to-write that takes an entire function body, and is in the ;; form if "if already set, return; set it". In particular, the set is not ;; in the if body in this case. (if (global.get $once) (return) ) (global.set $once (i32.const 1) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $clinit ;; As above, but the optimization fails because the function body has too ;; many elements - a nop is added at the end. (if (global.get $once) (return) ) (global.set $once (i32.const 1) ) (nop) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $clinit ;; As above, but the optimization fails because the if has an else. (if (global.get $once) (return) (nop) ) (global.set $once (i32.const 1) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $clinit ;; As above, but the optimization fails because the if body is not a ;; return. (if (global.get $once) (nop) ) (global.set $once (i32.const 1) ) ) ) (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $clinit ;; As above, but the optimization fails because the if condition has effects. (if (call $foo ;; This call may have side effects and it receives the global's ;; value, which is dangerous. (global.get $once) ) (return) ) (global.set $once (i32.const 1) ) ) ;; CHECK: (func $foo (param $x i32) (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (param $x i32) (result i32) (unreachable) ) ) ;; Using the global's value in a way that can cause side effects prevents the ;; read-only-to-write optimization. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (global $global (mut i32) (i32.const 0)) (global $global (mut i32) (i32.const 0)) ;; CHECK: (global $other i32 (i32.const 0)) (global $other (mut i32) (i32.const 0)) ;; CHECK: (func $side-effects-in-condition ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effects-in-condition (if (if (result i32) (global.get $global) ;; the global's value may cause foo() to be called (call $foo) (i32.const 1) ) (global.set $global (i32.const 1)) ) ) ;; CHECK: (func $foo (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (result i32) (unreachable) ) ) ;; As above, but now the global's value is not the condition of the if, so there ;; is no problem. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (type $none_=>_i32 (func (result i32))) ;; CHECK: (global $global i32 (i32.const 0)) (global $global (mut i32) (i32.const 0)) ;; CHECK: (global $other i32 (i32.const 0)) (global $other (mut i32) (i32.const 0)) ;; CHECK: (func $side-effects-in-condition-2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effects-in-condition-2 (if (if (result i32) (call $foo) ;; these side effects are not a problem, as the global's ;; value cannot reach them. (i32.const 1) (global.get $global) ;; the global's value flows out through the if, ;; safely ) (global.set $global (i32.const 1)) ) ) ;; CHECK: (func $foo (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (result i32) (unreachable) ) ) ;; As above, but now the global's value flows into a side effect. (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $global (mut i32) (i32.const 0)) (global $global (mut i32) (i32.const 0)) ;; CHECK: (global $other i32 (i32.const 0)) (global $other (mut i32) (i32.const 0)) ;; CHECK: (func $side-effects-in-condition-3 ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $temp ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effects-in-condition-3 (local $temp i32) (if (local.tee $temp (global.get $global) ;; the global's value flows into a place that has ) ;; side effects, so it may be noticed. (global.set $global (i32.const 1)) ) ) ) ;; As above, but now the global's value flows through multiple layers of ;; things that have no side effects and are safe. (module (memory 1 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once i32 (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $side-effects-in-condition-4 ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1337) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $side-effects-in-condition-4 (local $x i32) (local $y i32) (if (i32.eqz (select (local.tee $x (i32.const 1) ) (i32.load (i32.const 2) ) (i32.add (global.get $once) (i32.const 1337) ) ) ) (global.set $once (i32.const 1) ) ) ) ) (module (memory 1 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once i32 (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $nested-pattern ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-pattern (local $x i32) (local $y i32) (if (block (result i32) ;; Another appearance of the pattern nested inside this one. This should ;; not prevent us from optimizing. (if (i32.eqz (global.get $once) ) (global.set $once (i32.const 1) ) ) (i32.eq (global.get $once) (i32.const 0) ) ) (global.set $once (i32.const 1) ) ) ) ) (module (memory 1 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $almost-nested-pattern ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $almost-nested-pattern (local $x i32) (local $y i32) (if (block (result i32) ;; This is almost the nested pattern, but not quite, as it has an ;; "else" arm. (if (i32.eqz (global.get $once) ) (global.set $once (i32.const 1) ) (nop) ;; This breaks the pattern we are looking for. ) (i32.eq (global.get $once) (i32.const 0) ) ) (global.set $once (i32.const 1) ) ) ) ) (module (memory 1 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once i32 (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $nested-pattern-thrice ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (block $block1 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-pattern-thrice (local $x i32) (local $y i32) (if (block (result i32) (if (i32.eqz (block (result i32) ;; A third nested appearance. (if (global.get $once) (global.set $once (i32.const 1) ) ) (global.get $once) ) ) (global.set $once (i32.const 1) ) ) (i32.eq (global.get $once) (i32.const 0) ) ) (global.set $once (i32.const 1) ) ) ) ) (module (memory 1 1) ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (global $once (mut i32) (i32.const 0)) (global $once (mut i32) (i32.const 0)) ;; CHECK: (memory $0 1 1) ;; CHECK: (func $nested-pattern ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (block $block (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nested-pattern (local $x i32) (local $y i32) (if (block (result i32) ;; As above, but adding a drop of another get. This is *not* the ;; pattern we are looking for, and it will prevent us from ;; optimizing as we will no longer see that the number of gets ;; matches the number of read-only-to-write patterns. In the ;; future we could do a more complex counting operation to handle ;; this too. (drop (global.get $once) ) (if (i32.eqz (global.get $once) ) (global.set $once (i32.const 1) ) ) (i32.eq (global.get $once) (i32.const 0) ) ) (global.set $once (i32.const 1) ) ) ) ) binaryen-version_108/test/lit/passes/simplify-locals-eh.wast000066400000000000000000000077261423707623100244270ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --simplify-locals -all -S -o - | filecheck %s (module ;; CHECK: (tag $e-i32 (param i32)) (tag $e-i32 (param i32)) ;; CHECK: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (param i32 i32)) ;; CHECK: (func $pop-cannot-be-sinked ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-cannot-be-sinked (local $0 i32) (try (do) (catch $e-i32 ;; This (local.set $0) of (pop i32) cannot be sunk to (local.get $0) ;; below, because the pop should follow right after 'catch'. (local.set $0 (pop i32)) (call $foo (i32.const 3) (local.get $0) ) ) ) ) ;; CHECK: (func $pop-within-catch-can-be-sinked ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: (try $try0 (result i32) ;; CHECK-NEXT: (do ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $pop-within-catch-can-be-sinked (local $0 i32) (try (do) (catch_all ;; This whole 'try' body can be sinked to eliminate local.set / ;; local.get. Even though it contains a pop, it is enclosed within ;; try-catch, so it is OK. (local.set $0 (try (result i32) (do (i32.const 0)) (catch $e-i32 (pop i32)) ) ) (call $foo (i32.const 3) (local.get $0) ) ) ) ) ;; CHECK: (func $bar (result i32) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) (func $bar (result i32) (i32.const 3)) ;; CHECK: (func $call-cannot-be-sinked-into-try ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $bar) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-cannot-be-sinked-into-try (local $0 i32) (drop ;; This local.tee should NOT be sinked into 'try' below, because it may ;; throw (local.tee $0 (call $bar)) ) (try (do (drop (local.get $0)) ) (catch $e-i32 (drop (pop i32)) ) ) ) ;; CHECK: (func $non-call-can-be-sinked-into-try ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $non-call-can-be-sinked-into-try (local $0 i32) (drop ;; This local.tee can be sinked into 'try' below, because it cannot throw (local.tee $0 (i32.const 3)) ) (try (do (drop (local.get $0)) ) (catch $e-i32 (drop (pop i32)) ) ) ) ) binaryen-version_108/test/lit/passes/simplify-locals-gc.wast000066400000000000000000000161511423707623100244140ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --simplify-locals -all -S -o - \ ;; RUN: | filecheck %s ;; RUN: wasm-opt %s --simplify-locals -all --nominal -S -o - \ ;; RUN: | filecheck %s --check-prefix=NOMNL (module ;; CHECK: (type $struct (struct (field (mut i32)))) ;; NOMNL: (type $struct (struct_subtype (field (mut i32)) data)) (type $struct (struct (field (mut i32)))) ;; CHECK: (type $struct-immutable (struct (field i32))) ;; NOMNL: (type $struct-immutable (struct_subtype (field i32) data)) (type $struct-immutable (struct (field i32))) ;; Writes to heap objects cannot be reordered with reads. ;; CHECK: (func $no-reorder-past-write (param $x (ref $struct)) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; NOMNL: (func $no-reorder-past-write (type $ref|$struct|_=>_i32) (param $x (ref $struct)) (result i32) ;; NOMNL-NEXT: (local $temp i32) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (struct.get $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.set $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 42) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $temp) ;; NOMNL-NEXT: ) (func $no-reorder-past-write (param $x (ref $struct)) (result i32) (local $temp i32) (local.set $temp (struct.get $struct 0 (local.get $x) ) ) (struct.set $struct 0 (local.get $x) (i32.const 42) ) (local.get $temp) ) ;; CHECK: (func $reorder-past-write-if-immutable (param $x (ref $struct)) (param $y (ref $struct-immutable)) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct-immutable 0 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $reorder-past-write-if-immutable (type $ref|$struct|_ref|$struct-immutable|_=>_i32) (param $x (ref $struct)) (param $y (ref $struct-immutable)) (result i32) ;; NOMNL-NEXT: (local $temp i32) ;; NOMNL-NEXT: (nop) ;; NOMNL-NEXT: (struct.set $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 42) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.get $struct-immutable 0 ;; NOMNL-NEXT: (local.get $y) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $reorder-past-write-if-immutable (param $x (ref $struct)) (param $y (ref $struct-immutable)) (result i32) (local $temp i32) (local.set $temp (struct.get $struct-immutable 0 (local.get $y) ) ) (struct.set $struct 0 (local.get $x) (i32.const 42) ) (local.get $temp) ) ;; CHECK: (func $unreachable-struct.get (param $x (ref $struct)) (param $y (ref $struct-immutable)) (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local.tee $temp ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; NOMNL: (func $unreachable-struct.get (type $ref|$struct|_ref|$struct-immutable|_=>_i32) (param $x (ref $struct)) (param $y (ref $struct-immutable)) (result i32) ;; NOMNL-NEXT: (local $temp i32) ;; NOMNL-NEXT: (local.tee $temp ;; NOMNL-NEXT: (block ;; (replaces something unreachable we can't emit) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (struct.set $struct 0 ;; NOMNL-NEXT: (local.get $x) ;; NOMNL-NEXT: (i32.const 42) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.get $temp) ;; NOMNL-NEXT: ) (func $unreachable-struct.get (param $x (ref $struct)) (param $y (ref $struct-immutable)) (result i32) (local $temp i32) ;; As above, but the get's ref is unreachable. This tests we do not hit an ;; assertion on the get's type not having a heap type (as we depend on ;; finding the heap type there in the reachable case). ;; We simply do not handle this case, leaving it for DCE. (local.set $temp (struct.get $struct-immutable 0 (unreachable) ) ) (struct.set $struct 0 (local.get $x) (i32.const 42) ) (local.get $temp) ) ;; CHECK: (func $no-block-values-if-br_on ;; CHECK-NEXT: (local $temp anyref) ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_on_null $block ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $block) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $no-block-values-if-br_on (type $none_=>_none) ;; NOMNL-NEXT: (local $temp anyref) ;; NOMNL-NEXT: (block $block ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (br_on_null $block ;; NOMNL-NEXT: (ref.null any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (ref.null any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (br $block) ;; NOMNL-NEXT: (local.set $temp ;; NOMNL-NEXT: (ref.null any) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: (drop ;; NOMNL-NEXT: (ref.as_non_null ;; NOMNL-NEXT: (local.get $temp) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $no-block-values-if-br_on (local $temp (ref null any)) (block $block (drop ;; This br_on should inhibit trying to create a block return value for ;; this block. Aside from the br_on, it looks correct, i.e., we have a ;; break with a set before it, and a set before the end of the block. Due ;; to the br_on's presence, the pass should not do anything to this ;; function. ;; ;; TODO: support br_on in this optimization eventually, but the variable ;; possible return values and sent values make that nontrivial. (br_on_null $block (ref.null any) ) ) (local.set $temp (ref.null any) ) (br $block) (local.set $temp (ref.null any) ) ) ;; Attempt to use the local that the pass will try to move to a block return ;; value, to cause the optimization to try to run. (drop (ref.as_non_null (local.get $temp) ) ) ) ) binaryen-version_108/test/lit/passes/simplify-locals-global.wast000066400000000000000000000027631423707623100252670ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --simplify-locals -S -o - | filecheck %s (module ;; CHECK: (global $imm-glob i32 (i32.const 1234)) (global $imm-glob i32 (i32.const 1234)) ;; CHECK: (global $mut-glob (mut i32) (i32.const 5678)) (global $mut-glob (mut i32) (i32.const 5678)) ;; CHECK: (func $reorder-of-immmutable-global (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $helper) ;; CHECK-NEXT: (global.get $imm-glob) ;; CHECK-NEXT: ) (func $reorder-of-immmutable-global (result i32) (local $temp i32) ;; As the global is immutable, it cannot be modified in the call, and we can ;; reorder here. (local.set $temp (global.get $imm-glob) ) (call $helper) (local.get $temp) ) ;; CHECK: (func $no-reorder-of-mutable-global (result i32) ;; CHECK-NEXT: (local $temp i32) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (global.get $mut-glob) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper) ;; CHECK-NEXT: (local.get $temp) ;; CHECK-NEXT: ) (func $no-reorder-of-mutable-global (result i32) (local $temp i32) ;; As the global is mutable, it can be modified in the call, and we cannot ;; reorder here. (local.set $temp (global.get $mut-glob) ) (call $helper) (local.get $temp) ) ;; CHECK: (func $helper ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $helper) ) binaryen-version_108/test/lit/passes/ssa-gc-nn-locals.wast000066400000000000000000000017471423707623100237640ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; -g --roundtrip are added to show that we properly handle non-nullable locals ;; through the binary format as well (-g is for the function names). ;; RUN: wasm-opt %s -all --ssa --enable-gc-nn-locals -g --roundtrip -S -o - | filecheck %s (module ;; CHECK: (func $nn-locals ;; CHECK-NEXT: (local $x (ref func)) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (ref.func $nn-locals) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $nn-locals ;; A non-nullable local (local $x (ref func)) ;; Set the local, and get it later. The SSA pass will normally handle non- ;; nullability using ref.as_non_null, but with --gc-nn-locals nothing should ;; be done. (local.set $x (ref.func $nn-locals)) (drop (local.get $x)) (drop (local.get $x)) ) ) binaryen-version_108/test/lit/passes/ssa.wast000066400000000000000000000021001423707623100214710ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s -all --ssa -S -o - | filecheck %s (module ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo) ;; CHECK: (func $bar (param $x (ref func)) ;; CHECK-NEXT: (local $1 funcref) ;; CHECK-NEXT: (local $2 funcref) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (ref.func $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (ref.func $bar) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $bar (param $x (ref func)) ;; assign a non-nullable parameter multiple times, which causes ssa to create ;; new locals so that each is assigned only once (local.set $x (ref.func $foo)) (drop (local.get $x)) (local.set $x (ref.func $bar)) (drop (local.get $x)) ) ) binaryen-version_108/test/lit/passes/stack-check-memory64.wast000066400000000000000000000054351423707623100245610ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --stack-check --enable-memory64 -S -o - | filecheck %s (module (memory i64 (data)) ;; CHECK: (type $none_=>_i64 (func (result i64))) ;; CHECK: (type $i64_i64_=>_none (func (param i64 i64))) ;; CHECK: (global $sp (mut i64) (i64.const 0)) (global $sp (mut i64) (i64.const 0)) (func "use_stack" (result i64) (global.set $sp (i64.const 42)) (global.get $sp) ) ) ;; CHECK: (global $__stack_base (mut i64) (i64.const 0)) ;; CHECK: (global $__stack_limit (mut i64) (i64.const 0)) ;; CHECK: (memory $0 i64 0 65536) ;; CHECK: (data (i64.const 0) "") ;; CHECK: (export "use_stack" (func $0)) ;; CHECK: (export "__set_stack_limits" (func $__set_stack_limits)) ;; CHECK: (func $0 (result i64) ;; CHECK-NEXT: (local $0 i64) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i64.gt_u ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i64.const 42) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__stack_base) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i64.lt_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (global.get $__stack_limit) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $sp ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $sp) ;; CHECK-NEXT: ) ;; CHECK: (func $__set_stack_limits (param $0 i64) (param $1 i64) ;; CHECK-NEXT: (global.set $__stack_base ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__stack_limit ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module ;; if the global names are taken we should not crash (memory i64 (data)) ;; CHECK: (type $i64_i64_=>_none (func (param i64 i64))) ;; CHECK: (global $sp (mut i64) (i64.const 0)) (global $sp (mut i64) (i64.const 0))) ;; CHECK: (global $__stack_base (mut i64) (i64.const 0)) (global $__stack_base (mut i64) (i64.const 0)) ;; CHECK: (global $__stack_limit (mut i64) (i64.const 0)) (global $__stack_limit (mut i64) (i64.const 0)) (export "use_stack" (func $0)) (func $0 (result i64) (unreachable) ) ) ;; CHECK: (memory $0 i64 0 65536) ;; CHECK: (data (i64.const 0) "") ;; CHECK: (export "__set_stack_limits" (func $__set_stack_limits)) ;; CHECK: (func $__set_stack_limits (param $0 i64) (param $1 i64) ;; CHECK-NEXT: (global.set $__stack_base ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $__stack_limit ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/passes/stack-ir-eh.wast000066400000000000000000000024441423707623100230250ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --generate-stack-ir --optimize-stack-ir \ ;; RUN: -all --print-stack-ir | filecheck %s (module ;; CHECK: (tag $e0 (param i32)) (tag $e0 (param i32)) ;; CHECK: (func $eh ;; CHECK-NEXT: try $l0 ;; CHECK-NEXT: i32.const 0 ;; CHECK-NEXT: throw $e0 ;; CHECK-NEXT: catch $e0 ;; CHECK-NEXT: ;; CHECK-NEXT: drop ;; CHECK-NEXT: catch_all ;; CHECK-NEXT: rethrow $l0 ;; CHECK-NEXT: end ;; CHECK-NEXT: try $l00 ;; CHECK-NEXT: try $try ;; CHECK-NEXT: i32.const 0 ;; CHECK-NEXT: throw $e0 ;; CHECK-NEXT: delegate $l00 ;; CHECK-NEXT: unreachable ;; CHECK-NEXT: catch_all ;; CHECK-NEXT: nop ;; CHECK-NEXT: end ;; CHECK-NEXT: try $l01 ;; CHECK-NEXT: nop ;; CHECK-NEXT: delegate 0 ;; CHECK-NEXT: ) (func $eh (try $l0 (do (throw $e0 (i32.const 0)) ) (catch $e0 (drop (pop i32)) ) (catch_all (rethrow $l0) ) ) (try $l0 (do (try (do (throw $e0 (i32.const 0)) ) (delegate $l0) ) ) (catch_all) ) (try $l0 (do) (delegate 0) ;; delegate to caller ) ) ) binaryen-version_108/test/lit/passes/stack-ir-roundtrip-eh.wast000066400000000000000000000031221423707623100250430ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --generate-stack-ir --roundtrip -all -S -o - | filecheck %s (module (tag $tag (param i32)) ;; CHECK: (func $delegate-child ;; CHECK-NEXT: (try $label$9 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $label$7 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tag$0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (try $label$6 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tag$0 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $delegate-child (try (do (try (do) (catch $tag (drop (pop i32) ) (try (do) ;; the binary writer must properly handle this delegate which is ;; the child of other try's, and not get confused by their ;; information on the stack (this is a regression test for us ;; properly ending the scope with a delegate and popping the ;; relevant stack). (delegate 2) ) ) ) ) (catch $tag (drop (pop i32) ) ) ) ) ) binaryen-version_108/test/lit/passes/type-refining.wast000066400000000000000000000724741423707623100235100ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: foreach %s %t wasm-opt --nominal --type-refining -all -S -o - | filecheck %s (module ;; A struct with three fields. The first will have no writes, the second one ;; write of the same type, and the last a write of a subtype, which will allow ;; us to specialize that one. ;; CHECK: (type $struct (struct_subtype (field (mut anyref)) (field (mut anyref)) (field (mut (ref $ref|$struct|_=>_none))) data)) (type $struct (struct_subtype (field (mut anyref)) (field (mut anyref)) (field (mut anyref)) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (elem declare func $work) ;; CHECK: (func $work (type $ref|$struct|_=>_none) (param $struct (ref $struct)) ;; CHECK-NEXT: (struct.set $struct 1 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (ref.null any) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 2 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (ref.func $work) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.get $struct 2 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (struct.set $struct 1 (local.get $struct) (ref.null any) ) (struct.set $struct 2 (local.get $struct) (ref.func $work) ) (drop ;; The type of this struct.get must be updated after the field's type ;; changes, or the validator will complain. (struct.get $struct 2 (local.get $struct) ) ) ) ) (module ;; A struct with a nullable field and a write of a non-nullable value. We ;; must keep the type nullable, unlike in the previous module, due to the ;; default value being null. ;; CHECK: (type $struct (struct_subtype (field (mut (ref null $ref|$struct|_=>_none))) data)) (type $struct (struct_subtype (field (mut anyref)) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (elem declare func $work) ;; CHECK: (func $work (type $ref|$struct|_=>_none) (param $struct (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (ref.func $work) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (drop (struct.new_default $struct) ) (struct.set $struct 0 (local.get $struct) (ref.func $work) ) ) ) (module ;; Multiple writes to a field, with a LUB that is not equal to any of them. ;; We can at least improve from dataref to a ref of $struct here. Note also ;; that we do so in all three types, not just the parent to which we write ;; (the children have no writes, but must still be updated). ;; CHECK: (type $struct (struct_subtype (field (mut (ref $struct))) data)) (type $struct (struct_subtype (field (mut dataref)) data)) ;; CHECK: (type $ref|$struct|_ref|$child-A|_ref|$child-B|_=>_none (func_subtype (param (ref $struct) (ref $child-A) (ref $child-B)) func)) ;; CHECK: (type $child-A (struct_subtype (field (mut (ref $struct))) $struct)) (type $child-A (struct_subtype (field (mut dataref)) $struct)) ;; CHECK: (type $child-B (struct_subtype (field (mut (ref $struct))) $struct)) (type $child-B (struct_subtype (field (mut dataref)) $struct)) ;; CHECK: (func $work (type $ref|$struct|_ref|$child-A|_ref|$child-B|_=>_none) (param $struct (ref $struct)) (param $child-A (ref $child-A)) (param $child-B (ref $child-B)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $child-A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $child-B) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (param $child-A (ref $child-A)) (param $child-B (ref $child-B)) (struct.set $struct 0 (local.get $struct) (local.get $child-A) ) (struct.set $struct 0 (local.get $struct) (local.get $child-B) ) ) ) (module ;; As above, but all writes are of $child-A, which allows more optimization ;; up to that type. ;; CHECK: (type $struct (struct_subtype (field (mut (ref $child-A))) data)) ;; CHECK: (type $child-A (struct_subtype (field (mut (ref $child-A))) $struct)) (type $child-A (struct_subtype (field (mut dataref)) $struct)) (type $struct (struct_subtype (field (mut dataref)) data)) ;; CHECK: (type $ref|$struct|_ref|$child-A|_=>_none (func_subtype (param (ref $struct) (ref $child-A)) func)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $child-B (struct_subtype (field (mut (ref $child-A))) $struct)) (type $child-B (struct_subtype (field (mut dataref)) $struct)) ;; CHECK: (func $work (type $ref|$struct|_ref|$child-A|_=>_none) (param $struct (ref $struct)) (param $child-A (ref $child-A)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $child-A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $child-A) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (param $child-A (ref $child-A)) (struct.set $struct 0 (local.get $struct) (local.get $child-A) ) (struct.set $struct 0 (local.get $struct) (local.get $child-A) ) ) ;; CHECK: (func $keepalive (type $none_=>_none) ;; CHECK-NEXT: (local $temp (ref null $child-B)) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $keepalive ;; Add a reference to $child-B just to keep it alive in the output for easier ;; comparisons to the previous testcase. Note that $child-B's field will be ;; refined, because its parent $struct forces it to be. (local $temp (ref null $child-B)) ) ) (module ;; Write to the parent a child, and to the child a parent. The write to the ;; child prevents specialization even in the parent and we only improve up to ;; $struct but not to $child. ;; CHECK: (type $struct (struct_subtype (field (mut (ref $struct))) data)) (type $struct (struct_subtype (field (mut dataref)) data)) ;; CHECK: (type $child (struct_subtype (field (mut (ref $struct))) $struct)) (type $child (struct_subtype (field (mut dataref)) $struct)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $work (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $child 0 ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (param $child (ref $child)) (struct.set $struct 0 (local.get $struct) (local.get $child) ) (struct.set $child 0 (local.get $child) (local.get $struct) ) ) ) (module ;; As above, but both writes are of $child, so we can optimize. ;; CHECK: (type $struct (struct_subtype (field (mut (ref $child))) data)) ;; CHECK: (type $child (struct_subtype (field (mut (ref $child))) $struct)) (type $child (struct_subtype (field (mut dataref)) $struct)) (type $struct (struct_subtype (field (mut dataref)) data)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $work (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $child 0 ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (param $child (ref $child)) (struct.set $struct 0 (local.get $struct) (local.get $child) ) (struct.set $child 0 (local.get $child) (local.get $child) ) ) ) (module ;; As in 2 testcases ago, write to the parent a child, and to the child a ;; parent, but now the writes happen in struct.new. Even with that precise ;; info, however, we can't make the parent field more specific than the ;; child's. ;; CHECK: (type $struct (struct_subtype (field (mut (ref $struct))) data)) (type $struct (struct_subtype (field (mut dataref)) data)) ;; CHECK: (type $child (struct_subtype (field (mut (ref $struct))) $struct)) (type $child (struct_subtype (field (mut dataref)) $struct)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $work (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $child ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (param $child (ref $child)) (drop (struct.new $struct (local.get $child) ) ) (drop (struct.new $child (local.get $struct) ) ) ) ) (module ;; Write a parent to the parent and a child to the child. We can specialize ;; each of them to contain their own type. This tests that we are aware that ;; a struct.new is of a precise type, which means that seeing a type written ;; to a parent does not limit specialization in a child. ;; ;; (Note that we can't do a similar test with struct.set, as that would ;; imply the fields are mutable, which limits optimization, see the next ;; testcase after this.) ;; CHECK: (type $struct (struct_subtype (field (ref $struct)) data)) (type $struct (struct_subtype (field dataref) data)) ;; CHECK: (type $child (struct_subtype (field (ref $child)) $struct)) (type $child (struct_subtype (field dataref) $struct)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $work (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $child ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (param $child (ref $child)) (drop (struct.new $struct (local.get $struct) ) ) (drop (struct.new $child (local.get $child) ) ) ) ) (module ;; As above, but the fields are mutable. We cannot specialize them to ;; different types in this case, and both will become $struct (still an ;; improvement!) ;; CHECK: (type $struct (struct_subtype (field (mut (ref $struct))) data)) (type $struct (struct_subtype (field (mut dataref)) data)) ;; CHECK: (type $child (struct_subtype (field (mut (ref $struct))) $struct)) (type $child (struct_subtype (field (mut dataref)) $struct)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $work (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $child ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (param $child (ref $child)) (drop (struct.new $struct (local.get $struct) ) ) (drop (struct.new $child (local.get $child) ) ) ) ) (module ;; As above, but the child also has a new field that is not in the parent. In ;; that case there is nothing stopping us from specializing that new field ;; to $child. ;; CHECK: (type $struct (struct_subtype (field (mut (ref $struct))) data)) (type $struct (struct_subtype (field (mut dataref)) data)) ;; CHECK: (type $child (struct_subtype (field (mut (ref $struct))) (field (mut (ref $child))) $struct)) (type $child (struct_subtype (field (mut dataref)) (field (mut dataref)) $struct)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $work (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $child ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (param $child (ref $child)) (drop (struct.new $struct (local.get $struct) ) ) (drop (struct.new $child (local.get $child) (local.get $child) ) ) ) ) (module ;; A copy of a field does not prevent optimization (even though it assigns ;; the old type). ;; CHECK: (type $struct (struct_subtype (field (mut (ref $struct))) data)) (type $struct (struct_subtype (field (mut dataref)) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (func $work (type $ref|$struct|_=>_none) (param $struct (ref $struct)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (struct.get $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (struct.set $struct 0 (local.get $struct) (local.get $struct) ) (struct.set $struct 0 (local.get $struct) (struct.get $struct 0 (local.get $struct) ) ) ) ) (module ;; CHECK: (type $X (struct_subtype data)) ;; CHECK: (type $Y (struct_subtype $X)) (type $Y (struct_subtype $X)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $A (struct_subtype (field (ref $Y)) data)) ;; CHECK: (type $C (struct_subtype (field (ref $Y)) $A)) (type $C (struct_subtype (field (ref $X)) $A)) ;; CHECK: (type $B (struct_subtype (field (ref $Y)) $A)) (type $B (struct_subtype (field (ref $X)) $A)) (type $A (struct_subtype (field (ref $X)) data)) (type $X (struct_subtype data)) ;; CHECK: (func $foo (type $none_=>_none) ;; CHECK-NEXT: (local $unused (ref null $C)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $B ;; CHECK-NEXT: (struct.new_default $Y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo ;; A use of type $C without ever creating an instance of it. We do still need ;; to update the type if we update the parent type, and we will in fact update ;; the parent $A's field from $X to $Y (see below), so we must do the same in ;; $C. As a result, all the fields with $X in them in all of $A, $B, $C will ;; be improved to contain $Y. (local $unused (ref null $C)) (drop (struct.new $B (struct.new $Y) ;; This value is more specific than the field, which is an ;; opportunity to subtype, which we do for $B. As $A, our ;; parent, has no writes at all, we can propagate this ;; info to there as well, which means we can perform the ;; same optimization in $A as well. ) ) ) ) (module ;; As above, but remove the struct.new to $B, which means $A, $B, $C all have ;; no writes to them. There are no optimizations to do here. ;; CHECK: (type $X (struct_subtype data)) (type $X (struct_subtype data)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $A (struct_subtype (field (ref $X)) data)) ;; CHECK: (type $C (struct_subtype (field (ref $X)) $A)) (type $C (struct_subtype (field (ref $X)) $A)) ;; CHECK: (type $B (struct_subtype (field (ref $X)) $A)) (type $B (struct_subtype (field (ref $X)) $A)) ;; CHECK: (type $Y (struct_subtype $X)) (type $Y (struct_subtype $X)) (type $A (struct_subtype (field (ref $X)) data)) ;; CHECK: (func $foo (type $none_=>_none) ;; CHECK-NEXT: (local $unused1 (ref null $C)) ;; CHECK-NEXT: (local $unused2 (ref null $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $Y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (local $unused1 (ref null $C)) (local $unused2 (ref null $B)) (drop (struct.new $Y)) ) ) (module ;; CHECK: (type $X (struct_subtype data)) (type $X (struct_subtype data)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $A (struct_subtype (field (ref $X)) data)) ;; CHECK: (type $B (struct_subtype (field (ref $Y)) $A)) (type $B (struct_subtype (field (ref $Y)) $A)) (type $A (struct_subtype (field (ref $X)) data)) ;; CHECK: (type $Y (struct_subtype $X)) (type $Y (struct_subtype $X)) ;; CHECK: (func $foo (type $none_=>_none) ;; CHECK-NEXT: (local $unused2 (ref null $B)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $A ;; CHECK-NEXT: (struct.new_default $X) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo ;; $B begins with its field of type $Y, which is more specific than the ;; field is in the supertype $A. There are no writes to $B, and so we end ;; up looking in the parent to see what to do; we should still emit a ;; reasonable type for $B, and there is no reason to make it *less* ;; specific, so leave things as they are. (local $unused2 (ref null $B)) (drop (struct.new $A (struct.new $X) ) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field (mut (ref null $struct))) data)) (type $struct (struct_subtype (field (mut (ref null data))) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (func $update-null (type $ref|$struct|_=>_none) (param $struct (ref $struct)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $update-null (param $struct (ref $struct)) (struct.set $struct 0 (local.get $struct) ;; Write a $struct to the field. (local.get $struct) ) (struct.set $struct 0 (local.get $struct) ;; This null can be updated, allowing us to refine the type of the field ;; to a null of $struct. (ref.null data) ) ) ) (module ;; As above, but now the null is in a child. The result should be the same: ;; refine the field to nullable $struct. ;; CHECK: (type $struct (struct_subtype (field (mut (ref null $struct))) data)) (type $struct (struct_subtype (field (mut (ref null data))) data)) ;; CHECK: (type $child (struct_subtype (field (mut (ref null $struct))) $struct)) (type $child (struct_subtype (field (mut (ref null data))) $struct)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $update-null (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $child 0 ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $update-null (param $struct (ref $struct)) (param $child (ref $child)) (struct.set $struct 0 (local.get $struct) (local.get $struct) ) (struct.set $child 0 (local.get $child) (ref.null data) ) ) ) (module ;; As above, but now the null is in a parent. The result should be the same. ;; CHECK: (type $struct (struct_subtype (field (mut (ref null $struct))) data)) (type $struct (struct_subtype (field (mut (ref null data))) data)) ;; CHECK: (type $child (struct_subtype (field (mut (ref null $struct))) $struct)) (type $child (struct_subtype (field (mut (ref null data))) $struct)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $update-null (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $child 0 ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $update-null (param $struct (ref $struct)) (param $child (ref $child)) (struct.set $struct 0 (local.get $struct) (ref.null data) ) (struct.set $child 0 (local.get $child) (local.get $struct) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field (mut (ref null data))) data)) (type $struct (struct_subtype (field (mut (ref null data))) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (func $work (type $ref|$struct|_=>_none) (param $struct (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) ;; The only write to this struct is of a null default value. There is ;; nothing to optimize here. (drop (struct.new_default $struct) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field (mut (ref null $struct))) data)) (type $struct (struct_subtype (field (mut (ref null data))) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (func $work (type $ref|$struct|_=>_none) (param $struct (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new_default $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) (drop (struct.new_default $struct) ) ;; Also write a $struct. The null default should not prevent us from ;; refining the field's type to $struct (but nullable). (struct.set $struct 0 (local.get $struct) (local.get $struct) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field (mut (ref null $struct))) data)) (type $struct (struct_subtype (field (mut (ref null data))) data)) ;; CHECK: (type $ref|$struct|_=>_none (func_subtype (param (ref $struct)) func)) ;; CHECK: (func $work (type $ref|$struct|_=>_none) (param $struct (ref $struct)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.set $struct 0 ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $work (param $struct (ref $struct)) ;; As before, but instead of new_default, new, and use a null in the given ;; value, which should be updated. (drop (struct.new $struct (ref.null data) ) ) (struct.set $struct 0 (local.get $struct) (local.get $struct) ) ) ) (module ;; CHECK: (type $struct (struct_subtype (field (mut (ref null $child))) (field (mut (ref null $struct))) data)) (type $struct (struct_subtype (field (mut (ref null data))) (field (mut (ref null data))) data)) ;; CHECK: (type $child (struct_subtype (field (mut (ref null $child))) (field (mut (ref null $struct))) $struct)) (type $child (struct_subtype (field (mut (ref null data))) (field (mut (ref null data))) $struct)) ;; CHECK: (type $ref|$struct|_ref|$child|_=>_none (func_subtype (param (ref $struct) (ref $child)) func)) ;; CHECK: (func $update-null (type $ref|$struct|_ref|$child|_=>_none) (param $struct (ref $struct)) (param $child (ref $child)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (local.get $child) ;; CHECK-NEXT: (ref.null $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $struct ;; CHECK-NEXT: (ref.null $child) ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $update-null (param $struct (ref $struct)) (param $child (ref $child)) ;; Update nulls in two fields that are separately optimized to separate ;; values. (drop (struct.new $struct (local.get $child) (ref.null data) ) ) (drop (struct.new $struct (ref.null data) (local.get $struct) ) ) ) ) (module ;; There are two parallel type hierarchies here: "Outer", which are objects ;; that have fields, that contain the "Inner" objects. ;; ;; Root-Outer -> Leaf1-Outer ;; -> Leaf2-Outer ;; ;; Root-Inner -> Leaf1-Inner ;; -> Leaf2-Inner ;; ;; Adding their contents, where X[Y] means X has a field of type Y: ;; ;; Root-Outer[Root-Inner] -> Leaf1-Outer[Leaf1-Inner] ;; -> Leaf2-Outer[Leaf2-Inner] ;; CHECK: (type $Root-Inner (struct_subtype data)) ;; CHECK: (type $Leaf2-Inner (struct_subtype $Root-Inner)) (type $Leaf2-Inner (struct_subtype $Root-Inner)) ;; CHECK: (type $none_=>_none (func_subtype func)) ;; CHECK: (type $Root-Outer (struct_subtype (field (ref $Leaf2-Inner)) data)) ;; CHECK: (type $Leaf1-Outer (struct_subtype (field (ref $Leaf2-Inner)) $Root-Outer)) (type $Leaf1-Outer (struct_subtype (field (ref $Leaf1-Inner)) $Root-Outer)) ;; CHECK: (type $Leaf2-Outer (struct_subtype (field (ref $Leaf2-Inner)) $Root-Outer)) (type $Leaf2-Outer (struct_subtype (field (ref $Leaf2-Inner)) $Root-Outer)) (type $Root-Outer (struct_subtype (field (ref $Root-Inner)) data)) (type $Root-Inner (struct_subtype data)) (type $Leaf1-Inner (struct_subtype (field i32) $Root-Inner)) ;; CHECK: (func $func (type $none_=>_none) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; (replaces something unreachable we can't emit) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null $Leaf1-Outer) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $Leaf2-Outer ;; CHECK-NEXT: (struct.new_default $Leaf2-Inner) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $func (drop ;; The situation here is that we have only a get for some types, and no ;; other constraints. As we ignore gets, we work under no constraints at ;; We then have to pick some type, so we pick the one used by our ;; supertype - and the supertype might have picked up a type from another ;; branch of the type tree, which is not a subtype of ours. ;; ;; In more detail, we never create an instance of $Leaf1-Outer, and we ;; only have a get of its field. This optimization ignores the get (to not ;; be limited by it). It will then optimize $Leaf1-Outer's field of ;; $Leaf1-Inner (another struct for which we have no creation, and only a ;; get) into $Leaf2-Inner, which is driven by the fact that we do have a ;; creation of $Leaf2-Inner. But then this struct.get $Leaf1-Inner on field ;; 0 is no longer valid, as we turn $Leaf1-Inner => $Leaf2-Inner, and ;; $Leaf2-Inner has no field 0. To keep the module validating, we must not ;; emit that. Instead, since there can be no instance of $Leaf1-Inner (as ;; mentioned before, it is never created, nor anything that can be cast to ;; it), we know this code is logically unreachable, and can emit an ;; unreachable here. (struct.get $Leaf1-Inner 0 (struct.get $Leaf1-Outer 0 (ref.null $Leaf1-Outer) ) ) ) (drop (struct.new $Leaf2-Outer (struct.new_default $Leaf2-Inner) ) ) ) ) binaryen-version_108/test/lit/passes/untee.wast000066400000000000000000000035201423707623100220320ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; NOTE: This test was ported using port_test.py and could be cleaned up. ;; RUN: foreach %s %t wasm-opt --untee -S -o - | filecheck %s (module ;; CHECK: (type $none_=>_none (func)) ;; CHECK: (func $tee ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (local $y f64) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (block (result f64) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $tee (local $x i32) (local $y f64) (drop (local.tee $x (i32.const 1))) (drop (local.tee $y (f64.const 2))) (local.set $x (local.tee $x (i32.const 3))) (local.set $x (local.tee $x (local.tee $x (i32.const 3)))) (drop (local.tee $x (unreachable))) ) ) binaryen-version_108/test/lit/passes/vacuum-eh.wast000066400000000000000000000110421423707623100226020ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --vacuum -all -S -o - | filecheck %s (module ;; CHECK: (tag $e (param i32)) (tag $e (param i32)) ;; CHECK: (tag $e2 (param i32)) (tag $e2 (param i32)) ;; CHECK: (func $try-test ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $try-test ;; When try body does not throw, try-body can be replaced with the try body (try (do (drop (i32.const 0)) ) (catch $e (drop (pop i32)) ) ) ) ;; CHECK: (func $inner-try-catch_all-test ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $inner-try-catch_all-test (local $0 i32) ;; The exception thrown in the inner try is caught by the inner catch_all, ;; so the outer try body does not throw and the outer try-catch can be ;; removed (try (do (try (do (throw $e (i32.const 0)) ) (catch_all (local.set $0 (i32.const 1)) ) ) ) (catch $e (drop (pop i32)) ) ) ) ;; CHECK: (func $inner-try-catch-test ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try1 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e2 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $e ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (pop i32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $inner-try-catch-test (local $0 i32) ;; The exception thrown in the inner try will not be caught by the inner ;; catch, so the outer try-catch cannot be removed (try (do (try (do (throw $e2 (i32.const 0)) ) (catch $e (drop (pop i32)) (local.set $0 (i32.const 1)) ) ) ) (catch $e (drop (pop i32)) ) ) ) ;; CHECK: (func $br-in-catch ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $br-in-catch ;; When catch body is removed, the removal of 'br' inside the catch body ;; should be propagated up to the outer block, so that its type will be ;; correctly updated to unreachable. (block $label$1 (try (do (unreachable) ) (catch $e (drop (pop i32)) (br $label$1) ) ) ) ) ;; CHECK: (func $try-delegate-outer-target ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (try $label$0 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try ;; CHECK-NEXT: (do ;; CHECK-NEXT: (try $try2 ;; CHECK-NEXT: (do ;; CHECK-NEXT: (throw $e ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (delegate $label$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $try-delegate-outer-target (local $0 i32) (try $label$0 ;; outer try (do ;; If it were not for the inner (delegate $label0), this middle try ;; cannot throw even if there is a throw in the inner try, because this ;; try has a catch_all. And Vacuum can replace the outer try-catch with ;; the try's body if the body doesn't throw. ;; ;; But because the inner try has a delegate that targets the outer try, ;; this middle try can throw, and we can't do the optimization for ;; the outer try. (try ;; middle try (do (try ;; inner try (do (throw $e (i32.const 0) ) ) (delegate $label$0) ) ) (catch_all) ) ) ) ) ) binaryen-version_108/test/lit/passes/vacuum-gc.wast000066400000000000000000000041401423707623100226000ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --vacuum -all -S -o - | filecheck %s (module (type ${} (struct)) ;; CHECK: (func $drop-ref-as (param $x anyref) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_non_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_func ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_data ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.as_i31 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $drop-ref-as (param $x anyref) ;; Without -tnh, we must assume all ref_as* can have a trap effect, and so ;; we cannot remove anything here. (drop (ref.as_non_null (local.get $x) ) ) (drop (ref.as_func (local.get $x) ) ) (drop (ref.as_data (local.get $x) ) ) (drop (ref.as_i31 (local.get $x) ) ) ) ;; CHECK: (func $vacuum-rtt-with-depth ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $vacuum-rtt-with-depth (drop (if (result (rtt 1 ${})) (i32.const 1) ;; This block's result is not used. As a consequence vacuum will try to ;; generate a replacement zero for the block's fallthrough value. An rtt ;; with depth is a problem for that, since we can't just create an ;; rtt.canon - we'd need to add some rtt.subs, and it's not clear that we'd ;; be improving code size while doing so, hence we do not allow making a ;; zero of that type. Vacuum should not error on trying to do so. And ;; the end result of this function should simply be empty, as everything ;; here can be vacuumed away. (block (result (rtt 1 ${})) (rtt.sub ${} (rtt.canon ${}) ) ) (unreachable) ) ) ) ) binaryen-version_108/test/lit/passes/vacuum-intrinsics.wast000066400000000000000000000157241423707623100244060ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --vacuum -all -S -o - | filecheck %s (module ;; CHECK: (import "binaryen-intrinsics" "call.without.effects" (func $call.without.effects (param funcref) (result i32))) (import "binaryen-intrinsics" "call.without.effects" (func $call.without.effects (param funcref) (result i32))) ;; CHECK: (import "binaryen-intrinsics" "call.without.effects" (func $call.without.effects-fj (param f32 funcref) (result i64))) (import "binaryen-intrinsics" "call.without.effects" (func $call.without.effects-fj (param f32) (param funcref) (result i64))) ;; CHECK: (import "binaryen-intrinsics" "call.without.effects" (func $call.without.effects-ref (param funcref) (result (ref any)))) (import "binaryen-intrinsics" "call.without.effects" (func $call.without.effects-ref (param funcref) (result (ref any)))) ;; CHECK: (func $used ;; CHECK-NEXT: (local $i32 i32) ;; CHECK-NEXT: (local.set $i32 ;; CHECK-NEXT: (call $call.without.effects ;; CHECK-NEXT: (ref.func $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $used (local $i32 i32) ;; The result is used (by the local.set), so we cannot do anything here. (local.set $i32 (call $call.without.effects (ref.func $i)) ) ) ;; CHECK: (func $unused ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $unused ;; The result is unused, so we can remove the call. (drop (call $call.without.effects (ref.func $i)) ) ) ;; CHECK: (func $unused-fj ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $unused-fj ;; As above, but with an extra float param and a different result type. (drop (call $call.without.effects-fj (f32.const 2.71828) (ref.func $fj)) ) ) ;; CHECK: (func $unused-fj-side-effects ;; CHECK-NEXT: (local $f32 f32) ;; CHECK-NEXT: (local.set $f32 ;; CHECK-NEXT: (f32.const 2.718280076980591) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unused-fj-side-effects (local $f32 f32) ;; As above, but side effects in the param. We must keep the params around ;; and drop them. (drop (call $call.without.effects-fj (local.tee $f32 (f32.const 2.71828) ) (ref.func $fj) ) ) ) ;; CHECK: (func $unused-unreachable ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $call.without.effects-fj ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (ref.func $fj) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unused-unreachable ;; An unused result, but the call is unreachable and so we ignore it (and ;; leave it for DCE). (drop (call $call.without.effects-fj (unreachable) (ref.func $fj)) ) ) ;; CHECK: (func $used-fallthrough ;; CHECK-NEXT: (local $i32 i32) ;; CHECK-NEXT: (local.set $i32 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (block $condition (result i32) ;; CHECK-NEXT: (call $nop) ;; CHECK-NEXT: (call $call.without.effects ;; CHECK-NEXT: (ref.func $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $ifTrue (result i32) ;; CHECK-NEXT: (call $nop) ;; CHECK-NEXT: (call $call.without.effects ;; CHECK-NEXT: (ref.func $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $ifFalse (result i32) ;; CHECK-NEXT: (call $nop) ;; CHECK-NEXT: (call $call.without.effects ;; CHECK-NEXT: (ref.func $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $used-fallthrough (local $i32 i32) (local.set $i32 (if (result i32) ;; The block falls through a value that is used as the if condition. (block $condition (result i32) ;; Add a call to $nop so that the blocks are not optimized away. (call $nop) (call $call.without.effects (ref.func $i)) ) ;; The arms fall through their blocks and also through the if, and end ;; up used by the set. (block $ifTrue (result i32) (call $nop) (call $call.without.effects (ref.func $i)) ) (block $ifFalse (result i32) (call $nop) (call $call.without.effects (ref.func $i)) ) ) ) ) ;; CHECK: (func $unused-fallthrough ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (block $condition (result i32) ;; CHECK-NEXT: (call $nop) ;; CHECK-NEXT: (call $call.without.effects ;; CHECK-NEXT: (ref.func $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $ifTrue (result i32) ;; CHECK-NEXT: (call $nop) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $ifFalse (result i32) ;; CHECK-NEXT: (call $nop) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unused-fallthrough (drop (if (result i32) (block $condition (result i32) (call $nop) (call $call.without.effects (ref.func $i)) ) ;; As above, but now there is a drop outside the if, so the arms are ;; unused and we can optimize them. (block $ifTrue (result i32) (call $nop) (call $call.without.effects (ref.func $i)) ) (block $ifFalse (result i32) (call $nop) (call $call.without.effects (ref.func $i)) ) ) ) ) ;; CHECK: (func $unused-fallthrough-bad-type ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref any)) ;; CHECK-NEXT: (call $i) ;; CHECK-NEXT: (call $call.without.effects-ref ;; CHECK-NEXT: (ref.func $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $call.without.effects-ref ;; CHECK-NEXT: (ref.func $ref) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unused-fallthrough-bad-type (drop (if (result (ref any)) (call $i) ;; As above, but the type of these unused values prevents us from ;; optimizing as we cannot create a "zero" for them. (call $call.without.effects-ref (ref.func $ref)) (call $call.without.effects-ref (ref.func $ref)) ) ) ) ;; CHECK: (func $i (result i32) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $i (result i32) ;; Helper function for the above. (unreachable) ) ;; CHECK: (func $fj (param $0 f32) (result i64) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $fj (param f32) (result i64) ;; Helper function for the above. (unreachable) ) ;; CHECK: (func $ref (result (ref any)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $ref (result (ref any)) ;; Helper function for the above. (unreachable) ) ;; CHECK: (func $nop ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $nop ;; Helper function for the above. (nop) ) ) binaryen-version_108/test/lit/passes/vacuum-tnh.wast000066400000000000000000000063021423707623100230020ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt %s --vacuum --traps-never-happen -all -S -o - | filecheck %s (module (memory 1 1) ;; CHECK: (type $struct (struct (field (mut i32)))) (type $struct (struct (field (mut i32)))) ;; CHECK: (func $drop (param $x i32) (param $y anyref) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $drop (param $x i32) (param $y anyref) ;; A load might trap, normally, but if traps never happen then we can ;; remove it. (drop (i32.load (local.get $x)) ) ;; A trap on a null value can also be ignored. (drop (ref.as_non_null (local.get $y) ) ) ;; Other ref.as* as well. (drop (ref.as_func (local.get $y) ) ) (drop (ref.as_data (local.get $y) ) ) (drop (ref.as_i31 (local.get $y) ) ) ;; Ignore unreachable code. (drop (unreachable) ) ) ;; Other side effects prevent us making any changes. ;; CHECK: (func $other-side-effects (param $x i32) (result i32) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $other-side-effects ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $other-side-effects (param $x i32) (result i32) ;; A call has all manner of other side effects. (drop (call $other-side-effects (i32.const 1)) ) ;; Add to the load an additional specific side effect, of writing to a ;; local. We can remove the load, but not the write to a local. (drop (block (result i32) (local.set $x (i32.const 2)) (i32.load (local.get $x)) ) ) (i32.const 1) ) ;; A helper function for the above, that returns nothing. ;; CHECK: (func $return-nothing ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $return-nothing) ;; CHECK: (func $partial (param $x (ref $struct)) ;; CHECK-NEXT: (local $y (ref null $struct)) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $partial (param $x (ref $struct)) (local $y (ref null $struct)) ;; The struct.get's side effect can be ignored due to tnh, and the value is ;; dropped anyhow, so we can remove it. We cannot remove the local.tee ;; inside it, however, so we must only vacuum out the struct.get and ;; nothing more. (In addition, a drop of a tee will become a set.) (drop (struct.get $struct 0 (local.tee $y (local.get $x) ) ) ) ;; Similar, but with an eqz on the outside, which can also be removed. (drop (i32.eqz (struct.get $struct 0 (local.tee $y (local.get $x) ) ) ) ) ) ;; CHECK: (func $toplevel ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $toplevel ;; A removable side effect at the top level of a function. We can turn this ;; into a nop. (unreachable) ) ) binaryen-version_108/test/lit/recursive-type-sort.wast000066400000000000000000000022011423707623100233620ustar00rootroot00000000000000;; Test that multiple recursive types are sorted and emitted properly. ;; Regression test for a bug in TypeComparator that made it fail to properly ;; implement the C++ Compare requirements. See #3648. ;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s ;; RUN: wasm-opt %s -all --roundtrip --nominal -S -o - | filecheck %s ;; Check that there's no crash. ;; CHECK: module (module (type $a (func (param (ref null $b)))) (type $b (struct (field (ref null $i)))) (type $c (struct (field (ref null $l)))) (type $d (func (param (ref null $b)))) (type $e (func (result (ref null $g)))) (type $f (func (result (ref null $c)))) (type $g (struct (field (ref null $j)))) (type $h (struct (field (ref null $k)))) (type $i (struct (field (mut (ref null $a))))) (type $j (struct (field (mut (ref null $a))) (field (mut (ref null $a))))) (type $k (struct (field (mut (ref null $a))) (field (mut (ref null $a))) (field (mut (ref null $e))))) (type $l (struct (field (mut (ref null $a))) (field (mut (ref null $d))) (field (mut (ref null $f))))) (func $foo (local $1 (ref null $h)) (local $2 (ref null $b)) (local $3 (ref null $c)) ) ) binaryen-version_108/test/lit/recursive-types.wast000066400000000000000000000027721423707623100225750ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; Test that a trivial recursive type works properly ;; RUN: wasm-opt %s -all --name-types -S -o - | filecheck %s (module (type (func (param (ref null 0)) (result (ref null 0)))) (type (func (param (ref null 1)) (result (ref null 1)))) (type (func (param (ref null 0)) (result (ref null 1)))) (type (func (param (ref null 3)) (result (ref null 4)))) (type (func (param (ref null 4)) (result (ref null 3)))) ;; CHECK: (type $type$0 (func (param (ref null $type$0)) (result (ref null $type$0)))) ;; CHECK: (func $foo (param $0 (ref null $type$0)) (result (ref null $type$0)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $foo (type 0) (unreachable) ) ;; CHECK: (func $bar (param $0 (ref null $type$0)) (result (ref null $type$0)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $bar (type 1) (unreachable) ) ;; CHECK: (func $baz (param $0 (ref null $type$0)) (result (ref null $type$0)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $baz (type 2) (unreachable) ) ;; CHECK: (func $qux (param $0 (ref null $type$0)) (result (ref null $type$0)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $qux (type 3) (unreachable) ) ;; CHECK: (func $quux (param $0 (ref null $type$0)) (result (ref null $type$0)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) (func $quux (type 4) (unreachable) ) ) binaryen-version_108/test/lit/ref-cast-nop.wast000066400000000000000000000010761423707623100217160ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt -all %s -S --roundtrip -o - | filecheck %s (module ;; CHECK: (type $struct (struct (field i32))) (type $struct (struct i32)) ;; CHECK: (func $ref.cast_nop_static (param $x (ref any)) (result (ref $struct)) ;; CHECK-NEXT: (ref.cast_nop_static $struct ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ref.cast_nop_static (param $x (ref any)) (result (ref $struct)) (ref.cast_nop_static $struct (local.get $x) ) ) ) binaryen-version_108/test/lit/relaxed-simd.wast000066400000000000000000000555061423707623100220050ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: wasm-as %s -all -g -o %t.wasm ;; RUN: wasm-dis %t.wasm -all -o %t.wast ;; RUN: wasm-as %s -all -o %t.nodebug.wasm ;; RUN: wasm-dis %t.nodebug.wasm -all -o %t.nodebug.wast ;; RUN: wasm-opt %t.wast -all -o %t.text.wast -g -S ;; RUN: cat %t.wast | filecheck %s --check-prefix=CHECK-BINARY ;; RUN: cat %t.nodebug.wast | filecheck %s --check-prefix=CHECK-NODEBUG ;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT (module (memory 1 1) ;; CHECK-BINARY: (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) ;; CHECK-BINARY: (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) ;; CHECK-BINARY: (type $v128_=>_v128 (func (param v128) (result v128))) ;; CHECK-BINARY: (memory $0 1 1) ;; CHECK-BINARY: (func $i8x16.relaxed_swizzle (param $0 v128) (param $1 v128) (result v128) ;; CHECK-BINARY-NEXT: (i8x16.relaxed_swizzle ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) ;; CHECK-TEXT: (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) ;; CHECK-TEXT: (type $v128_=>_v128 (func (param v128) (result v128))) ;; CHECK-TEXT: (memory $0 1 1) ;; CHECK-TEXT: (func $i8x16.relaxed_swizzle (param $0 v128) (param $1 v128) (result v128) ;; CHECK-TEXT-NEXT: (i8x16.relaxed_swizzle ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i8x16.relaxed_swizzle (param $0 v128) (param $1 v128) (result v128) (i8x16.relaxed_swizzle (local.get $0) (local.get $1) ) ) ;; CHECK-BINARY: (func $i32x4.relaxed_trunc_f32x4_s (param $0 v128) (result v128) ;; CHECK-BINARY-NEXT: (i32x4.relaxed_trunc_f32x4_s ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i32x4.relaxed_trunc_f32x4_s (param $0 v128) (result v128) ;; CHECK-TEXT-NEXT: (i32x4.relaxed_trunc_f32x4_s ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i32x4.relaxed_trunc_f32x4_s (param $0 v128) (result v128) (i32x4.relaxed_trunc_f32x4_s (local.get $0) ) ) ;; CHECK-BINARY: (func $i32x4.relaxed_trunc_f32x4_u (param $0 v128) (result v128) ;; CHECK-BINARY-NEXT: (i32x4.relaxed_trunc_f32x4_u ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i32x4.relaxed_trunc_f32x4_u (param $0 v128) (result v128) ;; CHECK-TEXT-NEXT: (i32x4.relaxed_trunc_f32x4_u ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i32x4.relaxed_trunc_f32x4_u (param $0 v128) (result v128) (i32x4.relaxed_trunc_f32x4_u (local.get $0) ) ) ;; CHECK-BINARY: (func $i32x4.relaxed_trunc_f64x2_s_zero (param $0 v128) (result v128) ;; CHECK-BINARY-NEXT: (i32x4.relaxed_trunc_f64x2_s_zero ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i32x4.relaxed_trunc_f64x2_s_zero (param $0 v128) (result v128) ;; CHECK-TEXT-NEXT: (i32x4.relaxed_trunc_f64x2_s_zero ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i32x4.relaxed_trunc_f64x2_s_zero (param $0 v128) (result v128) (i32x4.relaxed_trunc_f64x2_s_zero (local.get $0) ) ) ;; CHECK-BINARY: (func $i32x4.relaxed_trunc_f64x2_u_zero (param $0 v128) (result v128) ;; CHECK-BINARY-NEXT: (i32x4.relaxed_trunc_f64x2_u_zero ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i32x4.relaxed_trunc_f64x2_u_zero (param $0 v128) (result v128) ;; CHECK-TEXT-NEXT: (i32x4.relaxed_trunc_f64x2_u_zero ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i32x4.relaxed_trunc_f64x2_u_zero (param $0 v128) (result v128) (i32x4.relaxed_trunc_f64x2_u_zero (local.get $0) ) ) ;; CHECK-BINARY: (func $f32x4.relaxed_fma (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (f32x4.relaxed_fma ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $f32x4.relaxed_fma (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (f32x4.relaxed_fma ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $f32x4.relaxed_fma (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (f32x4.relaxed_fma (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $f32x4.relaxed_fms (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (f32x4.relaxed_fms ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $f32x4.relaxed_fms (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (f32x4.relaxed_fms ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $f32x4.relaxed_fms (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (f32x4.relaxed_fms (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $f64x2.relaxed_fma (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (f64x2.relaxed_fma ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $f64x2.relaxed_fma (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (f64x2.relaxed_fma ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $f64x2.relaxed_fma (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (f64x2.relaxed_fma (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $f64x2.relaxed_fms (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (f64x2.relaxed_fms ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $f64x2.relaxed_fms (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (f64x2.relaxed_fms ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $f64x2.relaxed_fms (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (f64x2.relaxed_fms (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $i8x16.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (i8x16.laneselect ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i8x16.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (i8x16.laneselect ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i8x16.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (i8x16.laneselect (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $i16x8.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (i16x8.laneselect ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i16x8.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (i16x8.laneselect ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i16x8.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (i16x8.laneselect (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $i32x4.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (i32x4.laneselect ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i32x4.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (i32x4.laneselect ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i32x4.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (i32x4.laneselect (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $i64x2.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (i64x2.laneselect ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i64x2.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (i64x2.laneselect ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i64x2.laneselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (i64x2.laneselect (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $f32x4.relaxed_min (param $0 v128) (param $1 v128) (result v128) ;; CHECK-BINARY-NEXT: (f32x4.relaxed_min ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $f32x4.relaxed_min (param $0 v128) (param $1 v128) (result v128) ;; CHECK-TEXT-NEXT: (f32x4.relaxed_min ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $f32x4.relaxed_min (param $0 v128) (param $1 v128) (result v128) (f32x4.relaxed_min (local.get $0) (local.get $1) ) ) ;; CHECK-BINARY: (func $f32x4.relaxed_max (param $0 v128) (param $1 v128) (result v128) ;; CHECK-BINARY-NEXT: (f32x4.relaxed_max ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $f32x4.relaxed_max (param $0 v128) (param $1 v128) (result v128) ;; CHECK-TEXT-NEXT: (f32x4.relaxed_max ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $f32x4.relaxed_max (param $0 v128) (param $1 v128) (result v128) (f32x4.relaxed_max (local.get $0) (local.get $1) ) ) ;; CHECK-BINARY: (func $f64x2.relaxed_min (param $0 v128) (param $1 v128) (result v128) ;; CHECK-BINARY-NEXT: (f64x2.relaxed_min ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $f64x2.relaxed_min (param $0 v128) (param $1 v128) (result v128) ;; CHECK-TEXT-NEXT: (f64x2.relaxed_min ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $f64x2.relaxed_min (param $0 v128) (param $1 v128) (result v128) (f64x2.relaxed_min (local.get $0) (local.get $1) ) ) ;; CHECK-BINARY: (func $f64x2.relaxed_max (param $0 v128) (param $1 v128) (result v128) ;; CHECK-BINARY-NEXT: (f64x2.relaxed_max ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $f64x2.relaxed_max (param $0 v128) (param $1 v128) (result v128) ;; CHECK-TEXT-NEXT: (f64x2.relaxed_max ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $f64x2.relaxed_max (param $0 v128) (param $1 v128) (result v128) (f64x2.relaxed_max (local.get $0) (local.get $1) ) ) ;; CHECK-BINARY: (func $i16x8.relaxed_q15mulr_s (param $0 v128) (param $1 v128) (result v128) ;; CHECK-BINARY-NEXT: (i16x8.relaxed_q15mulr_s ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i16x8.relaxed_q15mulr_s (param $0 v128) (param $1 v128) (result v128) ;; CHECK-TEXT-NEXT: (i16x8.relaxed_q15mulr_s ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i16x8.relaxed_q15mulr_s (param $0 v128) (param $1 v128) (result v128) (i16x8.relaxed_q15mulr_s (local.get $0) (local.get $1) ) ) ;; CHECK-BINARY: (func $i16x8.dot_i8x16_i7x16_s (param $0 v128) (param $1 v128) (result v128) ;; CHECK-BINARY-NEXT: (i16x8.dot_i8x16_i7x16_s ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i16x8.dot_i8x16_i7x16_s (param $0 v128) (param $1 v128) (result v128) ;; CHECK-TEXT-NEXT: (i16x8.dot_i8x16_i7x16_s ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i16x8.dot_i8x16_i7x16_s (param $0 v128) (param $1 v128) (result v128) (i16x8.dot_i8x16_i7x16_s (local.get $0) (local.get $1) ) ) ;; CHECK-BINARY: (func $i16x8.dot_i8x16_i7x16_u (param $0 v128) (param $1 v128) (result v128) ;; CHECK-BINARY-NEXT: (i16x8.dot_i8x16_i7x16_u ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i16x8.dot_i8x16_i7x16_u (param $0 v128) (param $1 v128) (result v128) ;; CHECK-TEXT-NEXT: (i16x8.dot_i8x16_i7x16_u ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i16x8.dot_i8x16_i7x16_u (param $0 v128) (param $1 v128) (result v128) (i16x8.dot_i8x16_i7x16_u (local.get $0) (local.get $1) ) ) ;; CHECK-BINARY: (func $i32x4.dot_i8x16_i7x16_add_s (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (i32x4.dot_i8x16_i7x16_add_s ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i32x4.dot_i8x16_i7x16_add_s (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (i32x4.dot_i8x16_i7x16_add_s ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i32x4.dot_i8x16_i7x16_add_s (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (i32x4.dot_i8x16_i7x16_add_s (local.get $0) (local.get $1) (local.get $2) ) ) ;; CHECK-BINARY: (func $i32x4.dot_i8x16_i7x16_add_u (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-BINARY-NEXT: (i32x4.dot_i8x16_i7x16_add_u ;; CHECK-BINARY-NEXT: (local.get $0) ;; CHECK-BINARY-NEXT: (local.get $1) ;; CHECK-BINARY-NEXT: (local.get $2) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $i32x4.dot_i8x16_i7x16_add_u (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-TEXT-NEXT: (i32x4.dot_i8x16_i7x16_add_u ;; CHECK-TEXT-NEXT: (local.get $0) ;; CHECK-TEXT-NEXT: (local.get $1) ;; CHECK-TEXT-NEXT: (local.get $2) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $i32x4.dot_i8x16_i7x16_add_u (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (i32x4.dot_i8x16_i7x16_add_u (local.get $0) (local.get $1) (local.get $2) ) ) ) ;; CHECK-NODEBUG: (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) ;; CHECK-NODEBUG: (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) ;; CHECK-NODEBUG: (type $v128_=>_v128 (func (param v128) (result v128))) ;; CHECK-NODEBUG: (memory $0 1 1) ;; CHECK-NODEBUG: (func $0 (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i8x16.relaxed_swizzle ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $1 (param $0 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i32x4.relaxed_trunc_f32x4_s ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $2 (param $0 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i32x4.relaxed_trunc_f32x4_u ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $3 (param $0 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i32x4.relaxed_trunc_f64x2_s_zero ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $4 (param $0 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i32x4.relaxed_trunc_f64x2_u_zero ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $5 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (f32x4.relaxed_fma ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $6 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (f32x4.relaxed_fms ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $7 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (f64x2.relaxed_fma ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $8 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (f64x2.relaxed_fms ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $9 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i8x16.laneselect ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $10 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i16x8.laneselect ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $11 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i32x4.laneselect ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $12 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i64x2.laneselect ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $13 (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (f32x4.relaxed_min ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $14 (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (f32x4.relaxed_max ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $15 (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (f64x2.relaxed_min ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $16 (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (f64x2.relaxed_max ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $17 (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i16x8.relaxed_q15mulr_s ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $18 (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i16x8.dot_i8x16_i7x16_s ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $19 (param $0 v128) (param $1 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i16x8.dot_i8x16_i7x16_u ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $20 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i32x4.dot_i8x16_i7x16_add_s ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $21 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) ;; CHECK-NODEBUG-NEXT: (i32x4.dot_i8x16_i7x16_add_u ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: (local.get $1) ;; CHECK-NODEBUG-NEXT: (local.get $2) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) binaryen-version_108/test/lit/stdin-stdout.wast000066400000000000000000000005651423707623100220630ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; RUN: wasm-opt < %s - -S -o - | filecheck %s ;; RUN: wasm-opt < %s - -g -o - | wasm-opt - -S -o - | filecheck %s ;; Test that file `-` is interpreted as stdin and stdout. (module ;; CHECK: (func $foo ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) (func $foo (nop) ) ) binaryen-version_108/test/lit/table-first-special.wast000066400000000000000000000034461423707623100232550ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: wasm-as %s -all -g -o %t.wasm ;; RUN: wasm-dis %t.wasm -all -o %t.wast ;; RUN: wasm-as %s -all -o %t.nodebug.wasm ;; RUN: wasm-dis %t.nodebug.wasm -all -o %t.nodebug.wast ;; RUN: wasm-opt %t.wast -all -o %t.text.wast -g -S ;; RUN: cat %t.wast | filecheck %s --check-prefix=CHECK-BINARY ;; RUN: cat %t.nodebug.wast | filecheck %s --check-prefix=CHECK-NODEBUG ;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT ;; The very first table has a specialized type, as does its element segment. ;; Verify that we can roundtrip that. (module ;; CHECK-BINARY: (type $vii (func (param i32 i32))) ;; CHECK-TEXT: (type $vii (func (param i32 i32))) (type $vii (func (param i32 i32))) ;; CHECK-BINARY: (table $table-1 10 10 (ref null $vii)) ;; CHECK-TEXT: (table $table-1 10 10 (ref null $vii)) (table $table-1 10 10 (ref null $vii)) ;; CHECK-BINARY: (elem $elem-1 (table $table-1) (i32.const 0) (ref null $vii)) ;; CHECK-TEXT: (elem $elem-1 (table $table-1) (i32.const 0) (ref null $vii)) (elem $elem-1 (table $table-1) (i32.const 0) (ref null $vii)) ;; CHECK-BINARY: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-BINARY-NEXT: (nop) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $foo (param $0 i32) (param $1 i32) ;; CHECK-TEXT-NEXT: (nop) ;; CHECK-TEXT-NEXT: ) (func $foo (param $0 i32) (param $1 i32) (nop) ) ) ;; CHECK-NODEBUG: (type $i32_i32_=>_none (func (param i32 i32))) ;; CHECK-NODEBUG: (table $0 10 10 (ref null $i32_i32_=>_none)) ;; CHECK-NODEBUG: (elem (table $0) (i32.const 0) (ref null $i32_i32_=>_none)) ;; CHECK-NODEBUG: (func $0 (param $0 i32) (param $1 i32) ;; CHECK-NODEBUG-NEXT: (nop) ;; CHECK-NODEBUG-NEXT: ) binaryen-version_108/test/lit/table-operations.wast000066400000000000000000000140511423707623100226650ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. ;; RUN: wasm-as %s -all -g -o %t.wasm ;; RUN: wasm-dis %t.wasm -all -o %t.wast ;; RUN: wasm-as %s -all -o %t.nodebug.wasm ;; RUN: wasm-dis %t.nodebug.wasm -all -o %t.nodebug.wast ;; RUN: wasm-opt %t.wast -all -o %t.text.wast -g -S ;; RUN: cat %t.wast | filecheck %s --check-prefix=CHECK-BINARY ;; RUN: cat %t.nodebug.wast | filecheck %s --check-prefix=CHECK-NODEBUG ;; RUN: cat %t.text.wast | filecheck %s --check-prefix=CHECK-TEXT (module ;; CHECK-BINARY: (type $none_=>_none (func)) ;; CHECK-BINARY: (type $none_=>_i32 (func (result i32))) ;; CHECK-BINARY: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK-BINARY: (table $table-1 1 1 funcref) ;; CHECK-TEXT: (type $none_=>_none (func)) ;; CHECK-TEXT: (type $none_=>_i32 (func (result i32))) ;; CHECK-TEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK-TEXT: (table $table-1 1 1 funcref) (table $table-1 funcref (elem $foo) ) ;; CHECK-BINARY: (table $table-2 3 3 funcref) ;; CHECK-TEXT: (table $table-2 3 3 funcref) (table $table-2 funcref (elem $bar $bar $bar) ) ;; CHECK-BINARY: (elem $0 (table $table-1) (i32.const 0) func $foo) ;; CHECK-BINARY: (elem $1 (table $table-2) (i32.const 0) func $bar $bar $bar) ;; CHECK-BINARY: (func $foo ;; CHECK-BINARY-NEXT: (nop) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (elem $0 (table $table-1) (i32.const 0) func $foo) ;; CHECK-TEXT: (elem $1 (table $table-2) (i32.const 0) func $bar $bar $bar) ;; CHECK-TEXT: (func $foo ;; CHECK-TEXT-NEXT: (nop) ;; CHECK-TEXT-NEXT: ) (func $foo (nop) ) ;; CHECK-BINARY: (func $bar ;; CHECK-BINARY-NEXT: (drop ;; CHECK-BINARY-NEXT: (table.get $table-1 ;; CHECK-BINARY-NEXT: (i32.const 0) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: (drop ;; CHECK-BINARY-NEXT: (table.get $table-2 ;; CHECK-BINARY-NEXT: (i32.const 100) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $bar ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (table.get $table-1 ;; CHECK-TEXT-NEXT: (i32.const 0) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (table.get $table-2 ;; CHECK-TEXT-NEXT: (i32.const 100) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $bar (drop (table.get $table-1 (i32.const 0) ) ) (drop (table.get $table-2 (i32.const 100) ) ) ) ;; CHECK-BINARY: (func $set-get ;; CHECK-BINARY-NEXT: (table.set $table-1 ;; CHECK-BINARY-NEXT: (i32.const 0) ;; CHECK-BINARY-NEXT: (ref.func $foo) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: (drop ;; CHECK-BINARY-NEXT: (table.get $table-1 ;; CHECK-BINARY-NEXT: (i32.const 0) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $set-get ;; CHECK-TEXT-NEXT: (table.set $table-1 ;; CHECK-TEXT-NEXT: (i32.const 0) ;; CHECK-TEXT-NEXT: (ref.func $foo) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (table.get $table-1 ;; CHECK-TEXT-NEXT: (i32.const 0) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $set-get (table.set $table-1 (i32.const 0) (ref.func $foo) ) (drop (table.get $table-1 (i32.const 0) ) ) ) ;; CHECK-BINARY: (func $get-table-size (result i32) ;; CHECK-BINARY-NEXT: (table.size $table-1) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $get-table-size (result i32) ;; CHECK-TEXT-NEXT: (table.size $table-1) ;; CHECK-TEXT-NEXT: ) (func $get-table-size (result i32) (table.size $table-1) ) ;; CHECK-BINARY: (func $table-grow (param $sz i32) (result i32) ;; CHECK-BINARY-NEXT: (table.grow $table-1 ;; CHECK-BINARY-NEXT: (ref.null func) ;; CHECK-BINARY-NEXT: (local.get $sz) ;; CHECK-BINARY-NEXT: ) ;; CHECK-BINARY-NEXT: ) ;; CHECK-TEXT: (func $table-grow (param $sz i32) (result i32) ;; CHECK-TEXT-NEXT: (table.grow $table-1 ;; CHECK-TEXT-NEXT: (ref.null func) ;; CHECK-TEXT-NEXT: (local.get $sz) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) (func $table-grow (param $sz i32) (result i32) (table.grow $table-1 (ref.null func) (local.get $sz)) ) ) ;; CHECK-NODEBUG: (type $none_=>_none (func)) ;; CHECK-NODEBUG: (type $none_=>_i32 (func (result i32))) ;; CHECK-NODEBUG: (type $i32_=>_i32 (func (param i32) (result i32))) ;; CHECK-NODEBUG: (table $0 1 1 funcref) ;; CHECK-NODEBUG: (table $1 3 3 funcref) ;; CHECK-NODEBUG: (elem $0 (table $0) (i32.const 0) func $0) ;; CHECK-NODEBUG: (elem $1 (table $1) (i32.const 0) func $1 $1 $1) ;; CHECK-NODEBUG: (func $0 ;; CHECK-NODEBUG-NEXT: (nop) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $1 ;; CHECK-NODEBUG-NEXT: (drop ;; CHECK-NODEBUG-NEXT: (table.get $0 ;; CHECK-NODEBUG-NEXT: (i32.const 0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: (drop ;; CHECK-NODEBUG-NEXT: (table.get $1 ;; CHECK-NODEBUG-NEXT: (i32.const 100) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $2 ;; CHECK-NODEBUG-NEXT: (table.set $0 ;; CHECK-NODEBUG-NEXT: (i32.const 0) ;; CHECK-NODEBUG-NEXT: (ref.func $0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: (drop ;; CHECK-NODEBUG-NEXT: (table.get $0 ;; CHECK-NODEBUG-NEXT: (i32.const 0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $3 (result i32) ;; CHECK-NODEBUG-NEXT: (table.size $0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG: (func $4 (param $0 i32) (result i32) ;; CHECK-NODEBUG-NEXT: (table.grow $0 ;; CHECK-NODEBUG-NEXT: (ref.null func) ;; CHECK-NODEBUG-NEXT: (local.get $0) ;; CHECK-NODEBUG-NEXT: ) ;; CHECK-NODEBUG-NEXT: ) binaryen-version_108/test/lit/tail-call.wast000066400000000000000000000063711423707623100212650ustar00rootroot00000000000000;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. ;; Check that tail calls are parsed, validated, and printed correctly ;; RUN: foreach %s %t wasm-opt -all -S -o - | filecheck %s ;; RUN: foreach %s %t wasm-opt -all -S --nominal -o - | filecheck %s --check-prefix NOMNL (module ;; CHECK: (type $void (func)) ;; NOMNL: (type $void (func_subtype func)) (type $void (func)) ;; CHECK: (table $t 1 1 funcref) ;; NOMNL: (table $t 1 1 funcref) (table $t 1 1 funcref) ;; CHECK: (elem $e (i32.const 0) $foo) ;; NOMNL: (elem $e (i32.const 0) $foo) (elem $e (i32.const 0) $foo) ;; CHECK: (func $foo ;; CHECK-NEXT: (return_call $bar) ;; CHECK-NEXT: ) ;; NOMNL: (func $foo (type $void) ;; NOMNL-NEXT: (return_call $bar) ;; NOMNL-NEXT: ) (func $foo (return_call $bar) ) ;; CHECK: (func $bar ;; CHECK-NEXT: (return_call_indirect $t (type $void) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $bar (type $void) ;; NOMNL-NEXT: (return_call_indirect $t (type $void) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $bar (return_call_indirect (type $void) (i32.const 0)) ) ) ;; Check GC types and subtyping (module ;; CHECK: (type $return-B (func (result (ref $B)))) ;; NOMNL: (type $return-B (func_subtype (result (ref $B)) func)) (type $return-B (func (result (ref $B)))) ;; CHECK: (type $return-A (func (result (ref null $A)))) ;; NOMNL: (type $return-A (func_subtype (result (ref null $A)) func)) (type $return-A (func (result (ref null $A)))) ;; CHECK: (type $A (struct (field i32))) ;; NOMNL: (type $A (struct_subtype (field i32) data)) (type $A (struct i32)) ;; CHECK: (type $B (struct (field i32) (field i32))) ;; NOMNL: (type $B (struct_subtype (field i32) (field i32) $A)) (type $B (struct_subtype i32 i32 $A)) ;; CHECK: (table $t 1 1 funcref) ;; NOMNL: (table $t 1 1 funcref) (table $t 1 1 funcref) ;; CHECK: (elem $e (i32.const 0) $callee) ;; NOMNL: (elem $e (i32.const 0) $callee) (elem $e (i32.const 0) $callee) ;; CHECK: (func $caller (result (ref null $A)) ;; CHECK-NEXT: (return_call $callee) ;; CHECK-NEXT: ) ;; NOMNL: (func $caller (type $return-A) (result (ref null $A)) ;; NOMNL-NEXT: (return_call $callee) ;; NOMNL-NEXT: ) (func $caller (type $return-A) (return_call $callee) ) ;; CHECK: (func $caller-indirect (result (ref $B)) ;; CHECK-NEXT: (return_call_indirect $t (type $return-B) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; NOMNL: (func $caller-indirect (type $return-B) (result (ref $B)) ;; NOMNL-NEXT: (return_call_indirect $t (type $return-B) ;; NOMNL-NEXT: (i32.const 0) ;; NOMNL-NEXT: ) ;; NOMNL-NEXT: ) (func $caller-indirect (type $return-B) (return_call_indirect $t (type $return-B) (i32.const 0)) ) ;; CHECK: (func $callee (result (ref $B)) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; NOMNL: (func $callee (type $return-B) (result (ref $B)) ;; NOMNL-NEXT: (unreachable) ;; NOMNL-NEXT: ) (func $callee (type $return-B) (unreachable) ) ) binaryen-version_108/test/lit/validation/000077500000000000000000000000001423707623100206465ustar00rootroot00000000000000binaryen-version_108/test/lit/validation/extended-const.wast000066400000000000000000000015031423707623100244710ustar00rootroot00000000000000;; Test that shared memory requires atomics ;; RUN: not wasm-opt %s 2>&1 | filecheck %s --check-prefix NO-EXTENDED ;; RUN: wasm-opt %s --enable-extended-const -o - -S | filecheck %s --check-prefix EXTENDED ;; NO-EXTENDED: unexpected false: global init must be valid ;; NO-EXTENDED: unexpected false: memory segment offset should be reasonable ;; EXTENDED: (import "env" "global" (global $gimport$0 i32)) ;; EXTENDED: (global $1 i32 (i32.add ;; EXTENDED: (global.get $gimport$0) ;; EXTENDED: (i32.const 42) ;; EXTENDED: )) ;; EXTENDED: (data (i32.sub ;; EXTENDED: (global.get $gimport$0) ;; EXTENDED: (i32.const 10) ;; EXTENDED: ) "hello world") (module (memory 1 1) (import "env" "global" (global i32)) (global i32 (i32.add (global.get 0) (i32.const 42))) (data (i32.sub (global.get 0) (i32.const 10)) "hello world") ) binaryen-version_108/test/lit/validation/nn-tuples.wast000066400000000000000000000006721423707623100235000ustar00rootroot00000000000000;; Test for non-nullable types in tuples ;; RUN: not wasm-opt -all %s 2>&1 | filecheck %s --check-prefix NO-NN-LOCALS ;; RUN: wasm-opt -all %s --enable-gc-nn-locals -o - -S | filecheck %s --check-prefix NN-LOCALS ;; NO-NN-LOCALS: vars must be defaultable ;; NN-LOCALS: (module ;; NN-LOCALS: (local $tuple ((ref any) (ref any))) ;; NN-LOCALS: (nop) ;; NN-LOCALS: ) (module (func $foo (local $tuple ((ref any) (ref any))) ) ) binaryen-version_108/test/lit/validation/shared-memory.wast000066400000000000000000000005151423707623100243230ustar00rootroot00000000000000;; Test that shared memory requires atomics ;; RUN: not wasm-opt %s 2>&1 | filecheck %s --check-prefix NO-ATOMICS ;; RUN: wasm-opt %s --enable-threads -o - -S | filecheck %s --check-prefix ATOMICS ;; NO-ATOMICS: memory is shared, but atomics are disabled ;; ATOMICS: (memory $0 (shared 10 20)) (module (memory (shared 10 20)) ) binaryen-version_108/test/lit/wasm-emscripten-finalize/000077500000000000000000000000001423707623100234315ustar00rootroot00000000000000binaryen-version_108/test/lit/wasm-emscripten-finalize/bigint.wat000066400000000000000000000013461423707623100254260ustar00rootroot00000000000000;; Test that the --bigint option prevents i64s from being split up ;; Run without --bigint to get a baseline ;; RUN: wasm-emscripten-finalize %s -S | filecheck %s --check-prefix MVP ;; Then run with --bigint to see the difference ;; RUN: wasm-emscripten-finalize %s -S --bigint | filecheck %s --check-prefix BIGINT ;; MVP: (export "dynCall_jj" (func $legalstub$dynCall_jj)) ;; MVP: (func $legalstub$dynCall_jj (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; BIGINT-NOT: legalstub ;; BIGINT: (export "dynCall_jj" (func $dynCall_jj)) ;; BIGINT: (func $dynCall_jj (param $fptr i32) (param $0 i64) (result i64) (module (table $0 1 1 funcref) (elem (i32.const 1) $foo) (func $foo (param i64) (result i64) (unreachable) ) ) binaryen-version_108/test/lit/wasm-emscripten-finalize/em_asm.wat000066400000000000000000000017371423707623100254170ustar00rootroot00000000000000;; Test that em_asm string are extracted correctly when the __start_em_asm ;; and __stop_em_asm globals are exported. ;; RUN: wasm-emscripten-finalize %s -S | filecheck %s ;; Check that the data segment that contains only EM_ASM strings resized to ;; zero, and that the string are extracted into the metadata. ;; CHECK: (data (i32.const 100) "normal data") ;; CHECK-NEXT: (data (i32.const 512) "") ;; CHECK-NEXT: (data (i32.const 1024) "more data") ;; CHECK: "asmConsts": { ;; CHECK-NEXT: "512": "{ console.log('JS hello'); }", ;; CHECK-NEXT: "541": "{ console.log('hello again'); }" ;; CHECK-NEXT: }, ;; Check that the exports are removed ;; CHECK-NOT: export (module (memory 1 1) (global (export "__start_em_asm") i32 (i32.const 512)) (global (export "__stop_em_asm") i32 (i32.const 573)) (data (i32.const 100) "normal data") (data (i32.const 512) "{ console.log('JS hello'); }\00{ console.log('hello again'); }\00") (data (i32.const 1024) "more data") ) binaryen-version_108/test/lit/wasm-emscripten-finalize/em_asm_partial.wat000066400000000000000000000017621423707623100271310ustar00rootroot00000000000000;; Test that em_asm string are extraced correctly when the __start_em_asm ;; and __stop_em_asm globals are exported. ;; RUN: wasm-emscripten-finalize %s -S | filecheck %s ;; Check for the case when __start_em_asm and __stop_em_asm don't define an ;; entire segment. In this case we preserve the segment but zero the data. ;; CHECK: (data (i32.const 512) "xx\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00yy") ;; CHECK: "asmConsts": { ;; CHECK-NEXT: "514": "{ console.log('JS hello'); }", ;; CHECK-NEXT: "543": "{ console.log('hello again'); }" ;; CHECK-NEXT: }, ;; Check that the exports are removed ;; CHECK-NOT: export (module (memory 1 1) (global (export "__start_em_asm") i32 (i32.const 514)) (global (export "__stop_em_asm") i32 (i32.const 575)) (data (i32.const 512) "xx{ console.log('JS hello'); }\00{ console.log('hello again'); }\00yy") ) binaryen-version_108/test/lit/wasm-emscripten-finalize/em_js.wat000066400000000000000000000023101423707623100252370ustar00rootroot00000000000000;; Test that funcions exported with __em_js are correctly removed ;; once they strings they return are extracted. ;; RUN: wasm-emscripten-finalize %s -S | filecheck %s ;; All functions should be stripped from the binary, regardless ;; of internal name ;; CHECK-NOT: (global ;; The data section that contains only em_js strings should ;; be stripped (shrunk to zero size): ;; CHECK: (data (i32.const 1024) "some JS string data\00xxx") ;; CHECK: (data (i32.const 512) "") ;; CHECK: (data (i32.const 2048) "more JS string data\00yyy") ;; CHECK: "emJsFuncs": { ;; CHECK-NEXT: "bar": "more JS string data", ;; CHECK-NEXT: "baz": "Only em_js strings here", ;; CHECK-NEXT: "foo": "some JS string data" ;; CHECK-NEXT: }, (module (memory 1 1) (data (i32.const 1024) "some JS string data\00xxx") (data (i32.const 512) "Only em_js strings here\00") (data (i32.const 2048) "more JS string data\00yyy") (export "__em_js__foo" (global $__em_js__foo)) (export "__em_js__bar" (global $bar)) (export "__em_js__baz" (global $baz)) ;; Name matches export name (global $__em_js__foo i32 (i32.const 1024)) ;; Name does not match export name (global $bar i32 (i32.const 2048)) (global $baz i32 (i32.const 512)) ) binaryen-version_108/test/lit/wasm-emscripten-finalize/passive-pic.wat000066400000000000000000000022001423707623100263630ustar00rootroot00000000000000;; Test that wasm-emscripten-finalize can locate data within passive segments ;; even when compiled with PIC, which means that segment addresses are non-constant. ;; RUN: wasm-emscripten-finalize --enable-bulk-memory %s -o out.wasm | filecheck %s ;; CHECK: "asmConsts": { ;; CHECK: "3": "hello" ;; CHECK: }, (module (import "env" "memory" (memory $memory 1 1)) (import "env" "__memory_base" (global $__memory_base i32)) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (data "xxxhello\00yyy") (global (export "__start_em_asm") i32 (i32.const 3)) (global (export "__stop_em_asm") i32 (i32.const 9)) ;; memory init function similar to those generated by wasm-ld (start $__wasm_init_memory) (func $__wasm_init_memory (memory.init 0 (i32.add (i32.const 0) (global.get $__memory_base) ) (i32.const 0) (i32.const 12) ) ) ;; EM_ASM call passing string at address 3 in the passive segment (func $foo (result i32) (call $emscripten_asm_const_int (i32.add (global.get $__memory_base) (i32.const 3) ) (i32.const 0) (i32.const 0) ) ) ) binaryen-version_108/test/lit/wasm-split/000077500000000000000000000000001423707623100206145ustar00rootroot00000000000000binaryen-version_108/test/lit/wasm-split/asyncify.wast000066400000000000000000000143061423707623100233450ustar00rootroot00000000000000;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.1.wasm -o2 %t.2.wasm --keep-funcs=foo --asyncify ;; RUN: wasm-dis %t.1.wasm | filecheck %s --check-prefix PRIMARY ;; RUN: wasm-dis %t.2.wasm | filecheck %s --check-prefix SECONDARY ;; Check that the --asyncify option instruments the primary module but not the ;; secondary module. (module (func $foo (param i32) (result i32) (call $bar (i32.const 0)) ) (func $bar (param i32) (result i32) (call $foo (i32.const 1)) ) ) ;; PRIMARY: (module ;; PRIMARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; PRIMARY-NEXT: (type $i32_=>_none (func (param i32))) ;; PRIMARY-NEXT: (type $none_=>_none (func)) ;; PRIMARY-NEXT: (type $none_=>_i32 (func (result i32))) ;; PRIMARY-NEXT: (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) ;; PRIMARY-NEXT: (global $global$0 (mut i32) (i32.const 0)) ;; PRIMARY-NEXT: (global $global$1 (mut i32) (i32.const 0)) ;; PRIMARY-NEXT: (memory $0 1 1) ;; PRIMARY-NEXT: (table $0 1 funcref) ;; PRIMARY-NEXT: (elem (i32.const 0) $placeholder_0) ;; PRIMARY-NEXT: (export "%foo" (func $foo)) ;; PRIMARY-NEXT: (export "%table" (table $0)) ;; PRIMARY-NEXT: (export "asyncify_start_unwind" (func $asyncify_start_unwind)) ;; PRIMARY-NEXT: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind)) ;; PRIMARY-NEXT: (export "asyncify_start_rewind" (func $asyncify_start_rewind)) ;; PRIMARY-NEXT: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind)) ;; PRIMARY-NEXT: (export "asyncify_get_state" (func $asyncify_get_state)) ;; PRIMARY-NEXT: (func $foo (param $0 i32) (result i32) ;; PRIMARY-NEXT: (local $1 i32) ;; PRIMARY-NEXT: (if ;; PRIMARY-NEXT: (i32.eq ;; PRIMARY-NEXT: (global.get $global$0) ;; PRIMARY-NEXT: (i32.const 2) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (block ;; PRIMARY-NEXT: (i32.store ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: (i32.sub ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.const 4) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (local.set $0 ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (local.set $1 ;; PRIMARY-NEXT: (block $label$2 (result i32) ;; PRIMARY-NEXT: (if ;; PRIMARY-NEXT: (i32.eqz ;; PRIMARY-NEXT: (select ;; PRIMARY-NEXT: (if (result i32) ;; PRIMARY-NEXT: (i32.eq ;; PRIMARY-NEXT: (global.get $global$0) ;; PRIMARY-NEXT: (i32.const 2) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (block (result i32) ;; PRIMARY-NEXT: (i32.store ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: (i32.sub ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.const 4) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (local.get $1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.const 0) ;; PRIMARY-NEXT: (global.get $global$0) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (block ;; PRIMARY-NEXT: (local.set $1 ;; PRIMARY-NEXT: (call_indirect (type $i32_=>_i32) ;; PRIMARY-NEXT: (i32.const 0) ;; PRIMARY-NEXT: (i32.const 0) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (drop ;; PRIMARY-NEXT: (br_if $label$2 ;; PRIMARY-NEXT: (i32.const 0) ;; PRIMARY-NEXT: (i32.eq ;; PRIMARY-NEXT: (global.get $global$0) ;; PRIMARY-NEXT: (i32.const 1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (local.set $0 ;; PRIMARY-NEXT: (local.get $1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (if ;; PRIMARY-NEXT: (i32.eqz ;; PRIMARY-NEXT: (global.get $global$0) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (return ;; PRIMARY-NEXT: (local.get $0) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (unreachable) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.store ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (local.get $1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.store ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: (i32.add ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.const 4) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.store ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (local.get $0) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.store ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: (i32.add ;; PRIMARY-NEXT: (i32.load ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.const 4) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (i32.const 0) ;; PRIMARY-NEXT: ) ;; PRIMARY: (func $asyncify_start_unwind (param $0 i32) ;; PRIMARY: (func $asyncify_stop_unwind ;; PRIMARY: (func $asyncify_start_rewind (param $0 i32) ;; PRIMARY: (func $asyncify_stop_rewind ;; PRIMARY: (func $asyncify_get_state (result i32) ;; PRIMARY: ) ;; SECONDARY: (module ;; SECONDARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; SECONDARY-NEXT: (import "primary" "%table" (table $timport$0 1 funcref)) ;; SECONDARY-NEXT: (import "primary" "%foo" (func $foo (param i32) (result i32))) ;; SECONDARY-NEXT: (elem (i32.const 0) $bar) ;; SECONDARY-NEXT: (func $bar (param $0 i32) (result i32) ;; SECONDARY-NEXT: (call $foo ;; SECONDARY-NEXT: (i32.const 1) ;; SECONDARY-NEXT: ) ;; SECONDARY-NEXT: ) ;; SECONDARY-NEXT: ) binaryen-version_108/test/lit/wasm-split/bar.txt000066400000000000000000000000041423707623100221130ustar00rootroot00000000000000bar binaryen-version_108/test/lit/wasm-split/basic.wast000066400000000000000000000206731423707623100226050ustar00rootroot00000000000000;; RUN: not wasm-split %s --export-prefix='%' -g -o1 %t.none.1.wasm -o2 %t.none.2.wasm --keep-funcs=@failed-to-open.txt -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix FAILED-TO-OPEN ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.none.1.wasm -o2 %t.none.2.wasm -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-NONE ;; RUN: wasm-dis %t.none.1.wasm | filecheck %s --check-prefix KEEP-NONE-PRIMARY ;; RUN: wasm-dis %t.none.2.wasm | filecheck %s --check-prefix KEEP-NONE-SECONDARY ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.none.1.wasm -o2 %t.none.2.wasm --keep-funcs=@%S/none.txt -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-NONE ;; RUN: wasm-dis %t.none.1.wasm | filecheck %s --check-prefix KEEP-NONE-PRIMARY ;; RUN: wasm-dis %t.none.2.wasm | filecheck %s --check-prefix KEEP-NONE-SECONDARY ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.foo.1.wasm -o2 %t.foo.2.wasm --keep-funcs=foo -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-FOO ;; RUN: wasm-dis %t.foo.1.wasm | filecheck %s --check-prefix KEEP-FOO-PRIMARY ;; RUN: wasm-dis %t.foo.2.wasm | filecheck %s --check-prefix KEEP-FOO-SECONDARY ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.foo.1.wasm -o2 %t.foo.2.wasm --keep-funcs=@%S/foo.txt -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-FOO ;; RUN: wasm-dis %t.foo.1.wasm | filecheck %s --check-prefix KEEP-FOO-PRIMARY ;; RUN: wasm-dis %t.foo.2.wasm | filecheck %s --check-prefix KEEP-FOO-SECONDARY ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.bar.1.wasm -o2 %t.bar.2.wasm --keep-funcs=bar -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-BAR ;; RUN: wasm-dis %t.bar.1.wasm | filecheck %s --check-prefix KEEP-BAR-PRIMARY ;; RUN: wasm-dis %t.bar.2.wasm | filecheck %s --check-prefix KEEP-BAR-SECONDARY ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.bar.1.wasm -o2 %t.bar.2.wasm --keep-funcs=@%S/bar.txt -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-BAR ;; RUN: wasm-dis %t.bar.1.wasm | filecheck %s --check-prefix KEEP-BAR-PRIMARY ;; RUN: wasm-dis %t.bar.2.wasm | filecheck %s --check-prefix KEEP-BAR-SECONDARY ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.both.1.wasm -o2 %t.both.2.wasm --keep-funcs=foo,bar -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-BOTH ;; RUN: wasm-dis %t.both.1.wasm | filecheck %s --check-prefix KEEP-BOTH-PRIMARY ;; RUN: wasm-dis %t.both.2.wasm | filecheck %s --check-prefix KEEP-BOTH-SECONDARY ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.both.1.wasm -o2 %t.both.2.wasm --keep-funcs=@%S/both.txt -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-BOTH ;; RUN: wasm-dis %t.both.1.wasm | filecheck %s --check-prefix KEEP-BOTH-PRIMARY ;; RUN: wasm-dis %t.both.2.wasm | filecheck %s --check-prefix KEEP-BOTH-SECONDARY ;; Also check the inverse workflow using --keep-all and --split-funcs ;; RUN: wasm-split %s --export-prefix='%' -g -o1 %t.split-bar.1.wasm -o2 %t.split-bar.2.wasm --split-funcs=bar -v 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-FOO ;; RUN: wasm-dis %t.split-bar.1.wasm | filecheck %s --check-prefix KEEP-FOO-PRIMARY ;; RUN: wasm-dis %t.split-bar.2.wasm | filecheck %s --check-prefix KEEP-FOO-SECONDARY (module (table $table 1 1 funcref) (elem (i32.const 0) $foo) (func $foo (param i32) (result i32) (call $bar (i32.const 0)) ) (func $bar (param i32) (result i32) (call $foo (i32.const 1)) ) ) ;; FAILED-TO-OPEN: Failed opening 'failed-to-open.txt' ;; KEEP-NONE: warning: not keeping any functions in the primary module ;; KEEP-NONE-PRIMARY: (module ;; KEEP-NONE-PRIMARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; KEEP-NONE-PRIMARY-NEXT: (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) ;; KEEP-NONE-PRIMARY-NEXT: (table $table 1 1 funcref) ;; KEEP-NONE-PRIMARY-NEXT: (elem (i32.const 0) $placeholder_0) ;; KEEP-NONE-PRIMARY-NEXT: (export "%table" (table $table)) ;; KEEP-NONE-PRIMARY-NEXT: ) ;; KEEP-NONE-SECONDARY: (module ;; KEEP-NONE-SECONDARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; KEEP-NONE-SECONDARY-NEXT: (import "primary" "%table" (table $table 1 1 funcref)) ;; KEEP-NONE-SECONDARY-NEXT: (elem (i32.const 0) $foo) ;; KEEP-NONE-SECONDARY-NEXT: (func $bar (param $0 i32) (result i32) ;; KEEP-NONE-SECONDARY-NEXT: (call $foo ;; KEEP-NONE-SECONDARY-NEXT: (i32.const 1) ;; KEEP-NONE-SECONDARY-NEXT: ) ;; KEEP-NONE-SECONDARY-NEXT: ) ;; KEEP-NONE-SECONDARY-NEXT: (func $foo (param $0 i32) (result i32) ;; KEEP-NONE-SECONDARY-NEXT: (call $bar ;; KEEP-NONE-SECONDARY-NEXT: (i32.const 0) ;; KEEP-NONE-SECONDARY-NEXT: ) ;; KEEP-NONE-SECONDARY-NEXT: ) ;; KEEP-NONE-SECONDARY-NEXT: ) ;; KEEP-FOO: Keeping functions: foo{{$}} ;; KEEP-FOO-NEXT: Splitting out functions: bar{{$}} ;; KEEP-FOO-PRIMARY: (module ;; KEEP-FOO-PRIMARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; KEEP-FOO-PRIMARY-NEXT: (import "placeholder" "1" (func $placeholder_1 (param i32) (result i32))) ;; KEEP-FOO-PRIMARY-NEXT: (table $table 2 2 funcref) ;; KEEP-FOO-PRIMARY-NEXT: (elem (i32.const 0) $foo $placeholder_1) ;; KEEP-FOO-PRIMARY-NEXT: (export "%foo" (func $foo)) ;; KEEP-FOO-PRIMARY-NEXT: (export "%table" (table $table)) ;; KEEP-FOO-PRIMARY-NEXT: (func $foo (param $0 i32) (result i32) ;; KEEP-FOO-PRIMARY-NEXT: (call_indirect (type $i32_=>_i32) ;; KEEP-FOO-PRIMARY-NEXT: (i32.const 0) ;; KEEP-FOO-PRIMARY-NEXT: (i32.const 1) ;; KEEP-FOO-PRIMARY-NEXT: ) ;; KEEP-FOO-PRIMARY-NEXT: ) ;; KEEP-FOO-PRIMARY-NEXT: ) ;; KEEP-FOO-SECONDARY: (module ;; KEEP-FOO-SECONDARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; KEEP-FOO-SECONDARY-NEXT: (import "primary" "%table" (table $table 2 2 funcref)) ;; KEEP-FOO-SECONDARY-NEXT: (import "primary" "%foo" (func $foo (param i32) (result i32))) ;; KEEP-FOO-SECONDARY-NEXT: (elem (i32.const 1) $bar) ;; KEEP-FOO-SECONDARY-NEXT: (func $bar (param $0 i32) (result i32) ;; KEEP-FOO-SECONDARY-NEXT: (call $foo ;; KEEP-FOO-SECONDARY-NEXT: (i32.const 1) ;; KEEP-FOO-SECONDARY-NEXT: ) ;; KEEP-FOO-SECONDARY-NEXT: ) ;; KEEP-FOO-SECONDARY-NEXT: ) ;; KEEP-BAR: Keeping functions: bar{{$}} ;; KEEP-BAR-NEXT: Splitting out functions: foo{{$}} ;; KEEP-BAR-PRIMARY: (module ;; KEEP-BAR-PRIMARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; KEEP-BAR-PRIMARY-NEXT: (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) ;; KEEP-BAR-PRIMARY-NEXT: (table $table 1 1 funcref) ;; KEEP-BAR-PRIMARY-NEXT: (elem (i32.const 0) $placeholder_0) ;; KEEP-BAR-PRIMARY-NEXT: (export "%bar" (func $bar)) ;; KEEP-BAR-PRIMARY-NEXT: (export "%table" (table $table)) ;; KEEP-BAR-PRIMARY-NEXT: (func $bar (param $0 i32) (result i32) ;; KEEP-BAR-PRIMARY-NEXT: (call_indirect (type $i32_=>_i32) ;; KEEP-BAR-PRIMARY-NEXT: (i32.const 1) ;; KEEP-BAR-PRIMARY-NEXT: (i32.const 0) ;; KEEP-BAR-PRIMARY-NEXT: ) ;; KEEP-BAR-PRIMARY-NEXT: ) ;; KEEP-BAR-PRIMARY-NEXT: ) ;; KEEP-BAR-SECONDARY: (module ;; KEEP-BAR-SECONDARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; KEEP-BAR-SECONDARY-NEXT: (import "primary" "%table" (table $table 1 1 funcref)) ;; KEEP-BAR-SECONDARY-NEXT: (import "primary" "%bar" (func $bar (param i32) (result i32))) ;; KEEP-BAR-SECONDARY-NEXT: (elem (i32.const 0) $foo) ;; KEEP-BAR-SECONDARY-NEXT: (func $foo (param $0 i32) (result i32) ;; KEEP-BAR-SECONDARY-NEXT: (call $bar ;; KEEP-BAR-SECONDARY-NEXT: (i32.const 0) ;; KEEP-BAR-SECONDARY-NEXT: ) ;; KEEP-BAR-SECONDARY-NEXT: ) ;; KEEP-BAR-SECONDARY-NEXT: ) ;; KEEP-BOTH: warning: not splitting any functions out to the secondary module ;; KEEP-BOTH-NEXT: Keeping functions: bar, foo{{$}} ;; KEEP-BOTH-NEXT: Splitting out functions: {{$}} ;; KEEP-BOTH-PRIMARY: (module ;; KEEP-BOTH-PRIMARY-NEXT: (type $i32_=>_i32 (func (param i32) (result i32))) ;; KEEP-BOTH-PRIMARY-NEXT: (table $table 1 1 funcref) ;; KEEP-BOTH-PRIMARY-NEXT: (elem (i32.const 0) $foo) ;; KEEP-BOTH-PRIMARY-NEXT: (export "%table" (table $table)) ;; KEEP-BOTH-PRIMARY-NEXT: (func $foo (param $0 i32) (result i32) ;; KEEP-BOTH-PRIMARY-NEXT: (call $bar ;; KEEP-BOTH-PRIMARY-NEXT: (i32.const 0) ;; KEEP-BOTH-PRIMARY-NEXT: ) ;; KEEP-BOTH-PRIMARY-NEXT: ) ;; KEEP-BOTH-PRIMARY-NEXT: (func $bar (param $0 i32) (result i32) ;; KEEP-BOTH-PRIMARY-NEXT: (call $foo ;; KEEP-BOTH-PRIMARY-NEXT: (i32.const 1) ;; KEEP-BOTH-PRIMARY-NEXT: ) ;; KEEP-BOTH-PRIMARY-NEXT: ) ;; KEEP-BOTH-PRIMARY-NEXT: ) ;; KEEP-BOTH-SECONDARY: (module ;; KEEP-BOTH-SECONDARY-NEXT: (import "primary" "%table" (table $table 1 1 funcref)) ;; KEEP-BOTH-SECONDARY-NEXT: ) binaryen-version_108/test/lit/wasm-split/both.txt000066400000000000000000000000101423707623100223000ustar00rootroot00000000000000foo bar binaryen-version_108/test/lit/wasm-split/call_exports.mjs000066400000000000000000000014271423707623100240320ustar00rootroot00000000000000// Instantiates an instrumented module, calls the given exports, then collects // its wasm-split profile and writes it to a given file. // // Usage: // // node call_exports.mjs * import * as fs from 'fs'; let wasm = process.argv[2]; let outFile = process.argv[3]; // Create the Wasm instance let { _, instance } = await WebAssembly.instantiate(fs.readFileSync(wasm)); // Call the specified exports for (let i = 4; i < process.argv.length; i++) { console.log('calling', process.argv[i]); instance.exports[process.argv[i]](); } // Create and read the profile let profileSize = instance.exports['__write_profile'](1024, 2**32 - 1024); let profileData = Buffer.from(instance.exports.memory.buffer, 1024, profileSize); fs.writeFileSync(outFile, profileData); binaryen-version_108/test/lit/wasm-split/export-name-already-exists.wast000066400000000000000000000002621423707623100267070ustar00rootroot00000000000000;; RUN: not wasm-split %s --instrument --profile-export=foo 2>&1 \ ;; RUN: | filecheck %s ;; CHECK: error: Export foo already exists. (module (export "foo" (memory 0 0)) ) binaryen-version_108/test/lit/wasm-split/foo.txt000066400000000000000000000000041423707623100221320ustar00rootroot00000000000000foo binaryen-version_108/test/lit/wasm-split/imported-memory.wast000066400000000000000000000005371423707623100246520ustar00rootroot00000000000000;; RUN: wasm-split --instrument %s -all -S -o - | filecheck %s ;; Check that an imported memory is not exported as "profile-memory" (module (import "env" "mem" (memory $mem 1 1)) ) ;; CHECK: (import "env" "mem" (memory $mem 1 1)) ;; CHECK: (export "__write_profile" (func $__write_profile)) ;; CHECK-NOT: (export "profile-memory" (memory $mem)) binaryen-version_108/test/lit/wasm-split/initial-table.wast000066400000000000000000000005561423707623100242400ustar00rootroot00000000000000;; Test that the --initial-table flag works as expected ;; RUN: wasm-split %s --instrument --initial-table=1234 -S | filecheck %s ;; RUN: wasm-split %s -g -o1 %t.1.wasm -o2 %t.2.wasm --initial-table=1234 ;; RUN: wasm-dis %t.1.wasm | filecheck %s ;; RUN: wasm-dis %t.2.wasm | filecheck %s ;; CHECK: (table $table 1234 funcref) (module (table $table 3 funcref) ) binaryen-version_108/test/lit/wasm-split/instrument-funcs.wast000066400000000000000000000046031423707623100250430ustar00rootroot00000000000000;; RUN: wasm-split %s --instrument -S -o - | filecheck %s ;; Check that the output round trips and validates as well ;; RUN: wasm-split %s --instrument -g -o %t ;; RUN: wasm-opt %t --print | filecheck %s (module (import "env" "foo" (func $foo)) (export "bar" (func $bar)) (func $bar (call $foo) ) (func $baz (param i32) (result i32) (local.get 0) ) ) ;; Check that the counter and timestamps have been added ;; CHECK: (global $monotonic_counter (mut i32) (i32.const 0)) ;; CHECK: (global $bar_timestamp (mut i32) (i32.const 0)) ;; CHECK: (global $baz_timestamp (mut i32) (i32.const 0)) ;; Check that a memory has been added ;; CHECK: (memory $0 1 1) ;; And the profiling function is exported ;; CHECK: (export "__write_profile" (func $__write_profile)) ;; And the memory has been exported ;; CHECK: (export "profile-memory" (memory $0)) ;; Check that the function instrumentation is correct ;; CHECK: (func $baz (param $0 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $baz_timestamp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $monotonic_counter ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $monotonic_counter) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $baz_timestamp ;; CHECK-NEXT: (global.get $monotonic_counter) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; Check that the profiling function is correct. ;; CHECK: (func $__write_profile (param $addr i32) (param $size i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i64.store align=1 ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (i64.const {{.*}}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 align=1 ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (global.get $bar_timestamp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 align=1 ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (global.get $baz_timestamp) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/wasm-split/instrument-in-memory.wast000066400000000000000000000047051423707623100256440ustar00rootroot00000000000000;; RUN: wasm-split %s --instrument --in-memory -all -S -o - | filecheck %s ;; Check that the output round trips and validates as well ;; RUN: wasm-split %s --instrument --in-memory -all -g -o %t.wasm ;; RUN: wasm-opt -all %t.wasm -S -o - (module (import "env" "foo" (func $foo)) (export "bar" (func $bar)) (func $bar (call $foo) ) (func $baz (param i32) (result i32) (local.get 0) ) ) ;; Check that a memory has been added ;; CHECK: (memory $0 1 1) ;; And the profiling function exported ;; CHECK: (export "__write_profile" (func $__write_profile)) ;; Check that the function instrumentation is correct ;; CHECK: (func $bar ;; CHECK-NEXT: (i32.atomic.store8 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $foo) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (func $baz (param $0 i32) (result i32) ;; CHECK-NEXT: (i32.atomic.store8 offset=1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; Check that the profiling function is correct. ;; CHECK: (func $__write_profile (param $addr i32) (param $size i32) (result i32) ;; CHECK-NEXT: (local $funcIdx i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i64.store align=1 ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (i64.const {{.*}}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $outer ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (br_if $outer ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $funcIdx) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $funcIdx) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.atomic.load8_u ;; CHECK-NEXT: (local.get $funcIdx) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $funcIdx ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $funcIdx) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $l) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) binaryen-version_108/test/lit/wasm-split/instrument-memory-too-small.wast000066400000000000000000000003721423707623100271410ustar00rootroot00000000000000;; Test that the instrumentation increases the memory bounds if necessary ;; RUN: wasm-split %s --instrument -S -o - | filecheck %s ;; CHECK: (memory $0 1 1) ;; CHECK: (export "__write_profile" (func $__write_profile)) (module (memory $0 0 0) ) binaryen-version_108/test/lit/wasm-split/invalid-options.wast000066400000000000000000000100641423707623100246340ustar00rootroot00000000000000;; Test that invalid command line option combinations are properly rejected with ;; helpful error messages. ;; --instrument cannot be used with --profile ;; RUN: not wasm-split %s --instrument --profile %t 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-PROFILE ;; --instrument cannot be used with -o1 ;; RUN: not wasm-split %s --instrument -o1 %t 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-OUT1 ;; --instrument cannot be used with -o2 ;; RUN: not wasm-split %s --instrument -o2 %t 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-OUT2 ;; --instrument cannot be used with --symbolmap ;; RUN: not wasm-split %s --instrument --symbolmap 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-SYMBOLMAP ;; --instrument cannot be used with --import-namespace ;; RUN: not wasm-split %s --instrument --import-namespace=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-IMPORT-NS ;; --instrument cannot be used with --placeholder-namespace ;; RUN: not wasm-split %s --instrument --placeholder-namespace=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-PLACEHOLDER-NS ;; --instrument cannot be used with --export-prefix ;; RUN: not wasm-split %s --instrument --export-prefix=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-EXPORT-PREFIX ;; --instrument cannot be used with --keep-funcs ;; RUN: not wasm-split %s --instrument --keep-funcs=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-KEEP-FUNCS ;; --instrument cannot be used with --split-funcs ;; RUN: not wasm-split %s --instrument --split-funcs=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix INSTRUMENT-SPLIT-FUNCS ;; Split mode requires -o1 and -o2 rather than -o ;; RUN: not wasm-split %s -o %t 2>&1 \ ;; RUN: | filecheck %s --check-prefix SPLIT-OUT ;; --instrument is required to use --profile-export ;; RUN: not wasm-split %s --profile-export=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix SPLIT-PROFILE-EXPORT ;; -S cannot be used with --merge-profiles ;; RUN: not wasm-split %s --merge-profiles -S 2>&1 \ ;; RUN: | filecheck %s --check-prefix MERGE-EMIT-TEXT ;; -g cannot be used with --merge-profiles ;; RUN: not wasm-split %s --merge-profiles -g 2>&1 \ ;; RUN: | filecheck %s --check-prefix MERGE-DEBUGINFO ;; --profile cannot be used with --keep-funcs ;; RUN: not wasm-split %s --profile=foo --keep-funcs=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix PROFILE-KEEP ;; --profile cannot be used with --split-funcs ;; RUN: not wasm-split %s --profile=foo --split-funcs=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix PROFILE-SPLIT ;; --keep-funcs cannot be used with --split-funcs ;; RUN: not wasm-split %s --keep-funcs=foo --split-funcs=foo 2>&1 \ ;; RUN: | filecheck %s --check-prefix KEEP-SPLIT ;; INSTRUMENT-PROFILE: error: Option --profile cannot be used in instrument mode. ;; INSTRUMENT-OUT1: error: Option --primary-output cannot be used in instrument mode. ;; INSTRUMENT-OUT2: error: Option --secondary-output cannot be used in instrument mode. ;; INSTRUMENT-SYMBOLMAP: error: Option --symbolmap cannot be used in instrument mode. ;; INSTRUMENT-IMPORT-NS: error: Option --import-namespace cannot be used in instrument mode. ;; INSTRUMENT-PLACEHOLDER-NS: error: Option --placeholder-namespace cannot be used in instrument mode. ;; INSTRUMENT-EXPORT-PREFIX: error: Option --export-prefix cannot be used in instrument mode. ;; INSTRUMENT-KEEP-FUNCS: error: Option --keep-funcs cannot be used in instrument mode. ;; INSTRUMENT-SPLIT-FUNCS: error: Option --split-funcs cannot be used in instrument mode. ;; SPLIT-OUT: error: Option --output cannot be used in split mode. ;; SPLIT-PROFILE-EXPORT: error: Option --profile-export cannot be used in split mode. ;; MERGE-EMIT-TEXT: error: Option --emit-text cannot be used in merge-profiles mode. ;; MERGE-DEBUGINFO: error: Option --debuginfo cannot be used in merge-profiles mode. ;; PROFILE-KEEP: error: Cannot use both --profile and --keep-funcs. ;; PROFILE-SPLIT: error: Cannot use both --profile and --split-funcs. ;; KEEP-SPLIT: error: Cannot use both --keep-funcs and --split-funcs. (module) binaryen-version_108/test/lit/wasm-split/merge-profiles.wast000066400000000000000000000024141423707623100244350ustar00rootroot00000000000000;; Instrument the module ;; RUN: wasm-split --instrument %s -o %t.instrumented.wasm -g ;; Generate profiles ;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.foo.prof foo ;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.foo.bar.prof foo bar ;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.bar.baz.prof bar baz ;; Merge profiles ;; RUN: wasm-split --merge-profiles -v %t.foo.prof %t.foo.bar.prof %t.bar.baz.prof -o %t.merged.prof 2>&1 \ ;; RUN: | filecheck %s --check-prefix MERGE ;; Split the module ;; RUN: wasm-split %s --profile %t.merged.prof -o1 %t.1.wasm -o2 %t.2.wasm -g -v \ ;; RUN: | filecheck %s --check-prefix SPLIT ;; MERGE: Profile {{.*}}foo.prof only includes functions included in other profiles. ;; MERGE: Profile {{.*}}foo.bar.prof only includes functions included in other profiles. ;; MERGE-NOT: Profile {{.*}}bar.baz.prof only includes functions included in other profiles. ;; SPLIT: Keeping functions: bar, baz, foo{{$}} ;; SPLIT-NEXT: Splitting out functions: qux{{$}} (module (export "memory" (memory 0 0)) (export "foo" (func $foo)) (export "bar" (func $bar)) (export "baz" (func $baz)) (export "qux" (func $qux)) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) (func $qux (nop) ) ) binaryen-version_108/test/lit/wasm-split/minimized-exports.wast000066400000000000000000000020021423707623100251750ustar00rootroot00000000000000;; RUN: wasm-split %s --keep-funcs=foo,bar --export-prefix='%' -o1 %t.1.wasm -o2 %t.2.wasm ;; RUN: wasm-dis %t.1.wasm | filecheck %s --check-prefix PRIMARY ;; RUN: wasm-dis %t.2.wasm | filecheck %s --check-prefix SECONDARY ;; PRIMARY: (module ;; PRIMARY-NEXT: (type $none_=>_none (func)) ;; PRIMARY-NEXT: (export "%a" (func $1)) ;; PRIMARY-NEXT: (export "%b" (func $0)) ;; PRIMARY-NEXT: (func $0 ;; PRIMARY-NEXT: (nop) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (func $1 ;; PRIMARY-NEXT: (nop) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; SECONDARY: (module ;; SECONDARY-NEXT: (type $none_=>_none (func)) ;; SECONDARY-NEXT: (import "primary" "%a" (func $fimport$0)) ;; SECONDARY-NEXT: (import "primary" "%b" (func $fimport$1)) ;; SECONDARY-NEXT: (func $0 ;; SECONDARY-NEXT: (call $fimport$1) ;; SECONDARY-NEXT: (call $fimport$0) ;; SECONDARY-NEXT: ) ;; SECONDARY-NEXT: ) (module (func $foo (nop) ) (func $bar (nop) ) (func $baz (call $foo) (call $bar) ) ) binaryen-version_108/test/lit/wasm-split/mismatched-hashes.wast000066400000000000000000000014321423707623100251030ustar00rootroot00000000000000;; Check that using different inputs for the instrumentation and splitting steps ;; results in an error. ;; Instrument the module ;; RUN: wasm-split --instrument %s -o %t.instrumented.wasm ;; Generate a profile ;; RUN: node %S/call_exports.mjs %t.instrumented.wasm %t.prof ;; Attempt to split the instrumented module ;; RUN: not wasm-split %t.instrumented.wasm --profile=%t.prof -o1 %t.1.wasm -o2 %t.2.wasm \ ;; RUN: 2>&1 | filecheck %s ;; CHECK: error: checksum in profile does not match module checksum. ;; CHECK-SAME: The split module must be the original module that was instrumented ;; CHECK-SAME: to generate the profile. ;; Check that the matching module succeeds ;; RUN: wasm-split %s --profile=%t.prof -o1 %t.1.wasm -o2 %t.2.wasm (module (export "memory" (memory 0 0)) ) binaryen-version_108/test/lit/wasm-split/module-names.wast000066400000000000000000000012061423707623100241010ustar00rootroot00000000000000;; Check that --emit-module-names without -g strips function names but generates ;; and keeps the module names. ;; RUN: wasm-split %s --keep-funcs=foo -o1 %t.primary.wasm -o2 %t.secondary.wasm --emit-module-names ;; RUN: wasm-dis %t.primary.wasm -o - | filecheck %s --check-prefix=PRIMARY ;; RUN: wasm-dis %t.secondary.wasm -o - | filecheck %s --check-prefix=SECONDARY ;; PRIMARY: (module $module-names.wast.tmp.primary.wasm ;; PRIMARY: (func $0 ;; PRIMARY-NOT: $foo ;; SECONDARY: (module $module-names.wast.tmp.secondary.wasm ;; SECONDARY: (func $0 ;; SECONDARY-NOT: $bar (module (func $foo (nop) ) (func $bar (nop) ) ) binaryen-version_108/test/lit/wasm-split/name-collision.wast000066400000000000000000000007541423707623100244330ustar00rootroot00000000000000;; Regression test for a bug in which colliding internal names between ;; non-function exports would result in the wrong import names being used in the ;; secondary module. ;; RUN: wasm-split %s -o1 %t.1.wasm -o2 %t.2.wasm ;; RUN: wasm-dis %t.2.wasm | filecheck %s ;; CHECK-NOT: (import "primary" "memory" (table ;; CHECK: (import "primary" "table" (table (module (table $collide 1 funcref) (memory $collide 1 1) (export "table" (table $collide)) (export "memory" (memory $collide)) ) binaryen-version_108/test/lit/wasm-split/none.txt000066400000000000000000000000011423707623100223030ustar00rootroot00000000000000 binaryen-version_108/test/lit/wasm-split/placeholdermap.wast000066400000000000000000000007651423707623100245040ustar00rootroot00000000000000;; RUN: wasm-split %s --keep-funcs=bar -o1 %t.1.wasm -o2 %t.2.wasm --placeholdermap ;; RUN: filecheck %s --check-prefix MAP < %t.1.wasm.placeholders ;; RUN: wasm-dis %t.1.wasm | filecheck %s --check-prefix PRIMARY ;; MAP: 0:foo ;; MAP-NEXT: 2:baz ;; MAP-NOT: bar ;; Check that the names have been stripped. ;; PRIMARY: (func $0 (module (table $table 3 3 funcref) (elem $table (i32.const 0) $foo $bar $baz) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) ) binaryen-version_108/test/lit/wasm-split/profile-guided.wast000066400000000000000000000064301423707623100244160ustar00rootroot00000000000000;; ===================== ;; Instrument the binary ;; ===================== ;; RUN: wasm-split -all --instrument %s -o %t.instrumented.wasm ;; Create profiles ;; RUN: node --experimental-wasm-threads %S/call_exports.mjs %t.instrumented.wasm %t.foo.prof foo ;; RUN: node --experimental-wasm-threads %S/call_exports.mjs %t.instrumented.wasm %t.bar.prof bar ;; RUN: node --experimental-wasm-threads %S/call_exports.mjs %t.instrumented.wasm %t.both.prof foo bar ;; RUN: node --experimental-wasm-threads %S/call_exports.mjs %t.instrumented.wasm %t.none.prof ;; Create profile-guided splits ;; RUN: wasm-split -all %s --profile=%t.foo.prof -v -o1 %t.foo.1.wasm -o2 %t.foo.2.wasm \ ;; RUN: | filecheck %s --check-prefix FOO ;; RUN: wasm-split -all %s --profile=%t.bar.prof -v -o1 %t.bar.1.wasm -o2 %t.bar.2.wasm \ ;; RUN: | filecheck %s --check-prefix BAR ;; RUN: wasm-split -all %s --profile=%t.both.prof -v -o1 %t.both.1.wasm -o2 %t.both.2.wasm \ ;; RUN: | filecheck %s --check-prefix BOTH ;; RUN: wasm-split -all %s --profile=%t.none.prof -v -o1 %t.none.1.wasm -o2 %t.none.2.wasm \ ;; RUN: | filecheck %s --check-prefix NONE ;; ================================= ;; Do it all again using --in-memory ;; ================================= ;; RUN: wasm-split -all --instrument --in-memory %s -o %t.instrumented.wasm ;; Create profiles ;; RUN: node --experimental-wasm-threads %S/call_exports.mjs %t.instrumented.wasm %t.foo.prof foo ;; RUN: node --experimental-wasm-threads %S/call_exports.mjs %t.instrumented.wasm %t.bar.prof bar ;; RUN: node --experimental-wasm-threads %S/call_exports.mjs %t.instrumented.wasm %t.both.prof foo bar ;; RUN: node --experimental-wasm-threads %S/call_exports.mjs %t.instrumented.wasm %t.none.prof ;; Create profile-guided splits ;; RUN: wasm-split -all %s --profile=%t.foo.prof -v -o1 %t.foo.1.wasm -o2 %t.foo.2.wasm \ ;; RUN: | filecheck %s --check-prefix FOO ;; RUN: wasm-split -all %s --profile=%t.bar.prof -v -o1 %t.bar.1.wasm -o2 %t.bar.2.wasm \ ;; RUN: | filecheck %s --check-prefix BAR ;; RUN: wasm-split -all %s --profile=%t.both.prof -v -o1 %t.both.1.wasm -o2 %t.both.2.wasm \ ;; RUN: | filecheck %s --check-prefix BOTH ;; RUN: wasm-split -all %s --profile=%t.none.prof -v -o1 %t.none.1.wasm -o2 %t.none.2.wasm \ ;; RUN: | filecheck %s --check-prefix NONE ;; ======= ;; Results ;; ======= ;; FOO: Keeping functions: deep_foo_callee, foo, foo_callee, shared_callee ;; FOO: Splitting out functions: bar, bar_callee, uncalled ;; BAR: Keeping functions: bar, bar_callee, shared_callee ;; BAR: Splitting out functions: deep_foo_callee, foo, foo_callee, uncalled ;; BOTH: Keeping functions: bar, bar_callee, deep_foo_callee, foo, foo_callee, shared_callee ;; BOTH: Splitting out functions: uncalled ;; NONE: Keeping functions: ;; NONE: Splitting out functions: bar, bar_callee, deep_foo_callee, foo, foo_callee, shared_callee, uncalled (module (memory $mem (shared 1 1)) (export "memory" (memory $mem)) (export "foo" (func $foo)) (export "bar" (func $bar)) (export "uncalled" (func $uncalled)) (func $foo (call $foo_callee) (call $shared_callee) ) (func $bar (call $shared_callee) (call $bar_callee) ) (func $uncalled) (func $foo_callee (call $deep_foo_callee) ) (func $bar_callee) (func $shared_callee) (func $deep_foo_callee) ) binaryen-version_108/test/lit/wasm-split/symbolmap.wast000066400000000000000000000012121423707623100235130ustar00rootroot00000000000000;; RUN: wasm-split %s --keep-funcs=bar -o1 %t.1.wasm -o2 %t.2.wasm --symbolmap ;; RUN: filecheck %s --check-prefix PRIMARY-MAP < %t.1.wasm.symbols ;; RUN: filecheck %s --check-prefix SECONDARY-MAP < %t.2.wasm.symbols ;; RUN: wasm-dis %t.1.wasm | filecheck %s --check-prefix PRIMARY ;; PRIMARY-MAP: 0:placeholder_0 ;; PRIMARY-MAP: 1:placeholder_2 ;; PRIMARY-MAP: 2:bar ;; SECONDARY-MAP: 0:baz ;; SECONDARY-MAP: 1:foo ;; Check that the names have been stripped. ;; PRIMARY: (func $0 (module (table $table 3 3 funcref) (elem $table (i32.const 0) $foo $bar $baz) (func $foo (nop) ) (func $bar (nop) ) (func $baz (nop) ) ) binaryen-version_108/test/lit/wasm-split/verbose.wast000066400000000000000000000005231423707623100231610ustar00rootroot00000000000000;; Test that --verbose mode correctly prints the kept and split funcs ;; RUN: wasm-split %s --keep-funcs=foo,bar --verbose \ ;; RUN: -o1 %t1.wasm -o2 %t2.wasm | filecheck %s ;; CHECK: Keeping functions: bar, foo{{$}} ;; CHECK: Splitting out functions: baz, quux{{$}} (module (func $foo) (func $bar) (func $baz) (func $quux) ) binaryen-version_108/test/lld/000077500000000000000000000000001423707623100164775ustar00rootroot00000000000000binaryen-version_108/test/lld/basic_safe_stack.s000066400000000000000000000014621423707623100221320ustar00rootroot00000000000000# Test that wasm-binaryen-finalize --check-stack-overflow correctly # inserts stack check handlers. .globl stackRestore .globl stackAlloc .globaltype __stack_pointer, i32 stackRestore: .functype stackRestore(i32) -> () local.get 0 global.set __stack_pointer end_function stackAlloc: .functype stackAlloc(i32) -> (i32) .local i32, i32 global.get __stack_pointer # Get arg 0 -> number of bytes to allocate local.get 0 # Stack grows down. Subtract arg0 from __stack_pointer i32.sub # Align result by anding with ~15 i32.const 0xfffffff0 i32.and local.tee 1 global.set __stack_pointer local.get 1 end_function .globl main main: .functype main () -> () end_function .export_name stackAlloc, stackAlloc .export_name stackSave, stackSave .export_name stackRestore, stackRestore binaryen-version_108/test/lld/basic_safe_stack.wat000066400000000000000000000014641423707623100224650ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 2) (global $__stack_pointer (mut i32) (i32.const 66112)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "stackRestore" (func $stackRestore)) (export "stackAlloc" (func $stackAlloc)) (export "main" (func $main)) (func $__wasm_call_ctors ) (func $stackRestore (param $0 i32) (global.set $__stack_pointer (local.get $0) ) ) (func $stackAlloc (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (global.set $__stack_pointer (local.tee $1 (i32.and (i32.sub (global.get $__stack_pointer) (local.get $0) ) (i32.const -16) ) ) ) (local.get $1) ) (func $main ) ) binaryen-version_108/test/lld/basic_safe_stack.wat.out000066400000000000000000000042731423707623100232740ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "__handle_stack_overflow" (func $__handle_stack_overflow (param i32))) (global $__stack_pointer (mut i32) (i32.const 66112)) (global $__stack_base (mut i32) (i32.const 0)) (global $__stack_limit (mut i32) (i32.const 0)) (memory $0 2) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "stackRestore" (func $stackRestore)) (export "stackAlloc" (func $stackAlloc)) (export "main" (func $main)) (export "__set_stack_limits" (func $__set_stack_limits)) (func $__wasm_call_ctors (nop) ) (func $stackRestore (param $0 i32) (local $1 i32) (if (i32.or (i32.gt_u (local.tee $1 (local.get $0) ) (global.get $__stack_base) ) (i32.lt_u (local.get $1) (global.get $__stack_limit) ) ) (call $__handle_stack_overflow (local.get $1) ) ) (global.set $__stack_pointer (local.get $1) ) ) (func $stackAlloc (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (block (if (i32.or (i32.gt_u (local.tee $3 (local.tee $1 (i32.and (i32.sub (global.get $__stack_pointer) (local.get $0) ) (i32.const -16) ) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $3) (global.get $__stack_limit) ) ) (call $__handle_stack_overflow (local.get $3) ) ) (global.set $__stack_pointer (local.get $3) ) ) (local.get $1) ) (func $main (nop) ) (func $__set_stack_limits (param $0 i32) (param $1 i32) (global.set $__stack_base (local.get $0) ) (global.set $__stack_limit (local.get $1) ) ) ) (; --BEGIN METADATA -- { "declares": [ "__handle_stack_overflow" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "stackRestore", "stackAlloc", "main", "__set_stack_limits" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 1, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/duplicate_imports.wat000066400000000000000000000017501423707623100227460ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (type $1 (func (result i32))) (type $2 (func)) (import "env" "puts" (func $puts1 (param i32) (result i32))) (import "env" "puts" (func $puts2 (param i64) (result i32))) (import "env" "invoke_ffd" (func $invoke_ffd (param i32 f32 f64) (result f32))) (import "env" "invoke_ffd" (func $invoke_ffd2 (param i32 f64 f64) (result f32))) (global $global$0 (mut i32) (i32.const 66128)) (global $global$1 i32 (i32.const 66128)) (global $global$2 i32 (i32.const 581)) (table 1 1 funcref) (memory $0 2) (data (i32.const 568) "Hello, world\00") (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $main (; 1 ;) (type $1) (result i32) (drop (call $puts1 (i32.const 568) ) ) (i32.const 0) ) (func $__wasm_call_ctors (; 2 ;) (type $2) ) ;; custom section "linking", size 3 ) binaryen-version_108/test/lld/duplicate_imports.wat.out000066400000000000000000000044621423707623100235570ustar00rootroot00000000000000(module (type $i32_f32_f64_=>_f32 (func (param i32 f32 f64) (result f32))) (type $i32_f64_f64_=>_f32 (func (param i32 f64 f64) (result f32))) (type $0 (func (param i32) (result i32))) (type $1 (func (result i32))) (type $2 (func)) (type $f32_f64_=>_f32 (func (param f32 f64) (result f32))) (type $f64_f64_=>_f32 (func (param f64 f64) (result f32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "puts" (func $puts1 (param i32) (result i32))) (import "env" "invoke_ffd" (func $invoke_ffd (param i32 f32 f64) (result f32))) (import "env" "invoke_ffd" (func $invoke_ffd2 (param i32 f64 f64) (result f32))) (import "env" "puts" (func $legalimport$puts2 (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 66128)) (global $global$1 i32 (i32.const 66128)) (global $global$2 i32 (i32.const 581)) (memory $0 2) (data (i32.const 568) "Hello, world\00") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "dynCall_ffd" (func $dynCall_ffd)) (export "dynCall_fdd" (func $dynCall_fdd)) (func $main (result i32) (drop (call $puts1 (i32.const 568) ) ) (i32.const 0) ) (func $__wasm_call_ctors (nop) ) (func $dynCall_ffd (param $fptr i32) (param $0 f32) (param $1 f64) (result f32) (call_indirect (type $f32_f64_=>_f32) (local.get $0) (local.get $1) (local.get $fptr) ) ) (func $dynCall_fdd (param $fptr i32) (param $0 f64) (param $1 f64) (result f32) (call_indirect (type $f64_f64_=>_f32) (local.get $0) (local.get $1) (local.get $fptr) ) ) (func $legalfunc$puts2 (param $0 i64) (result i32) (call $legalimport$puts2 (i32.wrap_i64 (local.get $0) ) (i32.wrap_i64 (i64.shr_u (local.get $0) (i64.const 32) ) ) ) ) ) (; --BEGIN METADATA -- { "declares": [ "puts" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main", "dynCall_ffd", "dynCall_fdd" ], "namedGlobals": { "__heap_base" : "66128", "__data_end" : "581" }, "invokeFuncs": [ "invoke_ffd" ], "mainReadsParams": 1, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_asm.cpp000066400000000000000000000003171423707623100204450ustar00rootroot00000000000000#include int main() { EM_ASM({ Module.print("Hello \\ world\t\n"); }); int x = EM_ASM_INT({ return $0 + $1; }, 13, 27); EM_ASM_({ Module.print("Got " + $0); }, x); return 0; } binaryen-version_108/test/lld/em_asm.wat000066400000000000000000000034151423707623100204600ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (memory $0 2) (data $.rodata (i32.const 568) "\00ii\00i\00") (data $em_asm (i32.const 574) "{ Module.print(\"Hello \\\\ world\\t\\n\"); }\00{ return $0 + $1; }\00{ Module.print(\"Got \" + $0); }\00") (table $0 1 1 funcref) (global $__stack_pointer (mut i32) (i32.const 66208)) (global $global$1 i32 (i32.const 574)) (global $global$2 i32 (i32.const 665)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__start_em_asm" (global $global$1)) (export "__stop_em_asm" (global $global$2)) (func $__wasm_call_ctors ) (func $__original_main (result i32) (local $0 i32) (global.set $__stack_pointer (local.tee $0 (i32.sub (global.get $__stack_pointer) (i32.const 32) ) ) ) (drop (call $emscripten_asm_const_int (i32.const 574) (i32.const 568) (i32.const 0) ) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (i32.store (local.get $0) (call $emscripten_asm_const_int (i32.const 614) (i32.const 569) (i32.add (local.get $0) (i32.const 16) ) ) ) (drop (call $emscripten_asm_const_int (i32.const 634) (i32.const 572) (local.get $0) ) ) (global.set $__stack_pointer (i32.add (local.get $0) (i32.const 32) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "producers", size 112 ) binaryen-version_108/test/lld/em_asm.wat.mem.mem000066400000000000000000000000061423707623100220030ustar00rootroot00000000000000iiibinaryen-version_108/test/lld/em_asm.wat.mem.out000066400000000000000000000036101423707623100220400ustar00rootroot00000000000000(module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66208)) (global $global$1 i32 (i32.const 574)) (global $global$2 i32 (i32.const 665)) (memory $0 2) (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (nop) ) (func $__original_main (result i32) (local $0 i32) (global.set $__stack_pointer (local.tee $0 (i32.sub (global.get $__stack_pointer) (i32.const 32) ) ) ) (drop (call $emscripten_asm_const_int (i32.const 574) (i32.const 568) (i32.const 0) ) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (i32.store (local.get $0) (call $emscripten_asm_const_int (i32.const 614) (i32.const 569) (i32.add (local.get $0) (i32.const 16) ) ) ) (drop (call $emscripten_asm_const_int (i32.const 634) (i32.const 572) (local.get $0) ) ) (global.set $__stack_pointer (i32.add (local.get $0) (i32.const 32) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "asmConsts": { "574": "{ Module.print(\"Hello \\ world\\t\\n\"); }", "614": "{ return $0 + $1; }", "634": "{ Module.print(\"Got \" + $0); }" }, "declares": [ "emscripten_asm_const_int" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_asm.wat.out000066400000000000000000000037331423707623100212710ustar00rootroot00000000000000(module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66208)) (global $global$1 i32 (i32.const 574)) (global $global$2 i32 (i32.const 665)) (memory $0 2) (data $.rodata (i32.const 568) "\00ii\00i\00") (data $em_asm (i32.const 574) "") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (nop) ) (func $__original_main (result i32) (local $0 i32) (global.set $__stack_pointer (local.tee $0 (i32.sub (global.get $__stack_pointer) (i32.const 32) ) ) ) (drop (call $emscripten_asm_const_int (i32.const 574) (i32.const 568) (i32.const 0) ) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (i32.store (local.get $0) (call $emscripten_asm_const_int (i32.const 614) (i32.const 569) (i32.add (local.get $0) (i32.const 16) ) ) ) (drop (call $emscripten_asm_const_int (i32.const 634) (i32.const 572) (local.get $0) ) ) (global.set $__stack_pointer (i32.add (local.get $0) (i32.const 32) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "asmConsts": { "574": "{ Module.print(\"Hello \\ world\\t\\n\"); }", "614": "{ return $0 + $1; }", "634": "{ Module.print(\"Got \" + $0); }" }, "declares": [ "emscripten_asm_const_int" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_asm64.cpp000066400000000000000000000003101423707623100206100ustar00rootroot00000000000000#include int main() { EM_ASM({ Module.print("Hello world"); }); int x = EM_ASM_INT({ return $0 + $1; }, 13, 27); EM_ASM_({ Module.print("Got " + $0); }, x); return 0; } binaryen-version_108/test/lld/em_asm64.wat000066400000000000000000000034451423707623100206350ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (type $i64_i64_i64_=>_i32 (func (param i64 i64 i64) (result i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i64 i64 i64) (result i32))) (memory $0 i64 2) (data $.rodata (i64.const 568) "\00ii\00i\00") (data $em_asm (i64.const 574) "{ Module.print(\"Hello world\"); }\00{ return $0 + $1; }\00{ Module.print(\"Got \" + $0); }\00") (table $0 1 1 funcref) (global $__stack_pointer (mut i64) (i64.const 66208)) (global $global$1 i64 (i64.const 574)) (global $global$2 i64 (i64.const 658)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__start_em_asm" (global $global$1)) (export "__stop_em_asm" (global $global$2)) (func $__wasm_call_ctors ) (func $__original_main (result i32) (local $0 i64) (global.set $__stack_pointer (local.tee $0 (i64.sub (global.get $__stack_pointer) (i64.const 32) ) ) ) (drop (call $emscripten_asm_const_int (i64.const 574) (i64.const 568) (i64.const 0) ) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (i32.store (local.get $0) (call $emscripten_asm_const_int (i64.const 607) (i64.const 569) (i64.add (local.get $0) (i64.const 16) ) ) ) (drop (call $emscripten_asm_const_int (i64.const 627) (i64.const 572) (local.get $0) ) ) (global.set $__stack_pointer (i64.add (local.get $0) (i64.const 32) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i64) (result i32) (call $__original_main) ) ;; custom section "producers", size 112 ;; features section: memory64 ) binaryen-version_108/test/lld/em_asm64.wat.out000066400000000000000000000037561423707623100214500ustar00rootroot00000000000000(module (type $i64_i64_i64_=>_i32 (func (param i64 i64 i64) (result i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i64 i64 i64) (result i32))) (global $__stack_pointer (mut i64) (i64.const 66208)) (global $global$1 i64 (i64.const 574)) (global $global$2 i64 (i64.const 658)) (memory $0 i64 2) (data $.rodata (i64.const 568) "\00ii\00i\00") (data $em_asm (i64.const 574) "") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (nop) ) (func $__original_main (result i32) (local $0 i64) (global.set $__stack_pointer (local.tee $0 (i64.sub (global.get $__stack_pointer) (i64.const 32) ) ) ) (drop (call $emscripten_asm_const_int (i64.const 574) (i64.const 568) (i64.const 0) ) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (i32.store (local.get $0) (call $emscripten_asm_const_int (i64.const 607) (i64.const 569) (i64.add (local.get $0) (i64.const 16) ) ) ) (drop (call $emscripten_asm_const_int (i64.const 627) (i64.const 572) (local.get $0) ) ) (global.set $__stack_pointer (i64.add (local.get $0) (i64.const 32) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i64) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "asmConsts": { "574": "{ Module.print(\"Hello world\"); }", "607": "{ return $0 + $1; }", "627": "{ Module.print(\"Got \" + $0); }" }, "declares": [ "emscripten_asm_const_int" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ "--enable-memory64" ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_asm_O0.c000066400000000000000000000003321423707623100204400ustar00rootroot00000000000000#include int main(int argc, char** argv) { EM_ASM({ Module.print("Hello world"); }); int ret = EM_ASM_INT({ return $0 + $1; }, 20, 30); EM_ASM({ Module.print("Got " + $0); }, 42); return ret; } binaryen-version_108/test/lld/em_asm_O0.wat000066400000000000000000000040201423707623100210070ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (memory $0 2) (data $em_asm (i32.const 568) "{ Module.print(\"Hello world\"); }\00{ return $0 + $1; }\00{ Module.print(\"Got \" + $0); }\00") (global $__stack_pointer (mut i32) (i32.const 66192)) (global $global$1 i32 (i32.const 568)) (global $global$2 i32 (i32.const 652)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__start_em_asm" (global $global$1)) (export "__stop_em_asm" (global $global$2)) (func $__wasm_call_ctors ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (global.set $__stack_pointer (local.tee $2 (i32.sub (global.get $__stack_pointer) (i32.const 32) ) ) ) (i32.store8 offset=31 (local.get $2) (i32.const 0) ) (drop (call $emscripten_asm_const_int (i32.const 568) (i32.add (local.get $2) (i32.const 31) ) (i32.const 0) ) ) (i32.store8 offset=30 (local.get $2) (i32.const 0) ) (i32.store16 offset=28 align=1 (local.get $2) (i32.const 26985) ) (i64.store offset=16 (local.get $2) (i64.const 128849018900) ) (local.set $3 (call $emscripten_asm_const_int (i32.const 601) (i32.add (local.get $2) (i32.const 28) ) (i32.add (local.get $2) (i32.const 16) ) ) ) (i32.store16 offset=26 align=1 (local.get $2) (i32.const 105) ) (i32.store (local.get $2) (i32.const 42) ) (drop (call $emscripten_asm_const_int (i32.const 621) (i32.add (local.get $2) (i32.const 26) ) (local.get $2) ) ) (global.set $__stack_pointer (i32.add (local.get $2) (i32.const 32) ) ) (local.get $3) ) ;; custom section "producers", size 112 ) binaryen-version_108/test/lld/em_asm_O0.wat.out000066400000000000000000000043401423707623100216220ustar00rootroot00000000000000(module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66192)) (global $global$1 i32 (i32.const 568)) (global $global$2 i32 (i32.const 652)) (memory $0 2) (data $em_asm (i32.const 568) "") (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (global.set $__stack_pointer (local.tee $2 (i32.sub (global.get $__stack_pointer) (i32.const 32) ) ) ) (i32.store8 offset=31 (local.get $2) (i32.const 0) ) (drop (call $emscripten_asm_const_int (i32.const 568) (i32.add (local.get $2) (i32.const 31) ) (i32.const 0) ) ) (i32.store8 offset=30 (local.get $2) (i32.const 0) ) (i32.store16 offset=28 align=1 (local.get $2) (i32.const 26985) ) (i64.store offset=16 (local.get $2) (i64.const 128849018900) ) (local.set $3 (call $emscripten_asm_const_int (i32.const 601) (i32.add (local.get $2) (i32.const 28) ) (i32.add (local.get $2) (i32.const 16) ) ) ) (i32.store16 offset=26 align=1 (local.get $2) (i32.const 105) ) (i32.store (local.get $2) (i32.const 42) ) (drop (call $emscripten_asm_const_int (i32.const 621) (i32.add (local.get $2) (i32.const 26) ) (local.get $2) ) ) (global.set $__stack_pointer (i32.add (local.get $2) (i32.const 32) ) ) (local.get $3) ) ) (; --BEGIN METADATA -- { "asmConsts": { "568": "{ Module.print(\"Hello world\"); }", "601": "{ return $0 + $1; }", "621": "{ Module.print(\"Got \" + $0); }" }, "declares": [ "emscripten_asm_const_int" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 1, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_asm_main_thread.wat000066400000000000000000000110761423707623100230150ustar00rootroot00000000000000(; Copied from em_asm.wat s/emscripten_asm_const_int/emscripten_asm_const_int_sync_on_main_thread/g ;) (module (type $0 (func (param i32 i32 i32) (result i32))) (type $1 (func)) (type $2 (func (result i32))) (type $3 (func (param i32 i32 i32))) (type $4 (func (param i32 i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32) (result i32))) (import "env" "emscripten_asm_const_int_sync_on_main_thread" (func $emscripten_asm_const_int_sync_on_main_thread (param i32 i32 i32) (result i32))) (memory $0 2) (data (i32.const 568) "{ Module.print(\"Hello world\"); }\00{ return $0 + $1; }\00{ Module.print(\"Got \" + $0); }\00") (global (export "__start_em_asm") i32 (i32.const 568)) (global (export "__stop_em_asm") i32 (i32.const 652)) (table $0 1 1 funcref) (global $global$0 (mut i32) (i32.const 66192)) (global $global$1 i32 (i32.const 66192)) (global $global$2 i32 (i32.const 652)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "main" (func $main)) (func $__wasm_call_ctors (; 1 ;) (type $1) ) (func $__original_main (; 2 ;) (type $2) (result i32) (local $0 i32) (local $1 i32) (global.set $global$0 (local.tee $0 (i32.sub (global.get $global$0) (i32.const 32) ) ) ) (i32.store8 offset=24 (local.get $0) (call $__em_asm_sig_builder::inner<>\20const\20__em_asm_sig_builder::__em_asm_sig<>\28\29) ) (drop (call $emscripten_asm_const_int_sync_on_main_thread (i32.const 568) (i32.add (local.get $0) (i32.const 24) ) (i32.const 0) ) ) (call $__em_asm_sig_builder::inner\20const\20__em_asm_sig_builder::__em_asm_sig\28int\2c\20int\29 (i32.add (local.get $0) (i32.const 24) ) (i32.const 13) (i32.const 27) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (call $__em_asm_sig_builder::inner\20const\20__em_asm_sig_builder::__em_asm_sig\28int\29 (i32.add (local.get $0) (i32.const 24) ) (local.tee $1 (call $emscripten_asm_const_int_sync_on_main_thread (i32.const 601) (i32.add (local.get $0) (i32.const 24) ) (i32.add (local.get $0) (i32.const 16) ) ) ) ) (i32.store (local.get $0) (local.get $1) ) (drop (call $emscripten_asm_const_int_sync_on_main_thread (i32.const 621) (i32.add (local.get $0) (i32.const 24) ) (local.get $0) ) ) (global.set $global$0 (i32.add (local.get $0) (i32.const 32) ) ) (i32.const 0) ) (func $__em_asm_sig_builder::inner<>\20const\20__em_asm_sig_builder::__em_asm_sig<>\28\29 (; 3 ;) (type $2) (result i32) (i32.const 0) ) (func $__em_asm_sig_builder::inner\20const\20__em_asm_sig_builder::__em_asm_sig\28int\2c\20int\29 (; 4 ;) (type $3) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (global.set $global$0 (local.tee $3 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (i32.store8 offset=13 (local.get $3) (call $__em_asm_sig_builder::sig_char\28int\29 (local.get $1) ) ) (local.set $2 (call $__em_asm_sig_builder::sig_char\28int\29 (local.get $2) ) ) (i32.store8 (i32.add (local.get $0) (i32.const 2) ) (i32.const 0) ) (i32.store8 offset=14 (local.get $3) (local.get $2) ) (i32.store16 align=1 (local.get $0) (i32.load16_u offset=13 align=1 (local.get $3) ) ) (global.set $global$0 (i32.add (local.get $3) (i32.const 16) ) ) ) (func $__em_asm_sig_builder::inner\20const\20__em_asm_sig_builder::__em_asm_sig\28int\29 (; 5 ;) (type $4) (param $0 i32) (param $1 i32) (local $2 i32) (global.set $global$0 (local.tee $2 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (local.set $1 (call $__em_asm_sig_builder::sig_char\28int\29 (local.get $1) ) ) (i32.store8 offset=15 (local.get $2) (i32.const 0) ) (i32.store8 offset=14 (local.get $2) (local.get $1) ) (i32.store16 align=1 (local.get $0) (i32.load16_u offset=14 (local.get $2) ) ) (global.set $global$0 (i32.add (local.get $2) (i32.const 16) ) ) ) (func $__em_asm_sig_builder::sig_char\28int\29 (; 6 ;) (type $5) (param $0 i32) (result i32) (i32.const 105) ) (func $main (; 7 ;) (type $6) (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "producers", size 111 ) binaryen-version_108/test/lld/em_asm_main_thread.wat.out000066400000000000000000000112371423707623100236220ustar00rootroot00000000000000(module (type $2 (func (result i32))) (type $0 (func (param i32 i32 i32) (result i32))) (type $1 (func)) (type $3 (func (param i32 i32 i32))) (type $4 (func (param i32 i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32) (result i32))) (import "env" "emscripten_asm_const_int_sync_on_main_thread" (func $emscripten_asm_const_int_sync_on_main_thread (param i32 i32 i32) (result i32))) (global $0 i32 (i32.const 568)) (global $1 i32 (i32.const 652)) (global $global$0 (mut i32) (i32.const 66192)) (global $global$1 i32 (i32.const 66192)) (global $global$2 i32 (i32.const 652)) (memory $0 2) (data (i32.const 568) "") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "main" (func $main)) (func $__wasm_call_ctors (nop) ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (global.set $global$0 (local.tee $0 (i32.sub (global.get $global$0) (i32.const 32) ) ) ) (i32.store8 offset=24 (local.get $0) (call $__em_asm_sig_builder::inner<>\20const\20__em_asm_sig_builder::__em_asm_sig<>\28\29) ) (drop (call $emscripten_asm_const_int_sync_on_main_thread (i32.const 568) (i32.add (local.get $0) (i32.const 24) ) (i32.const 0) ) ) (call $__em_asm_sig_builder::inner\20const\20__em_asm_sig_builder::__em_asm_sig\28int\2c\20int\29 (i32.add (local.get $0) (i32.const 24) ) (i32.const 13) (i32.const 27) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (call $__em_asm_sig_builder::inner\20const\20__em_asm_sig_builder::__em_asm_sig\28int\29 (i32.add (local.get $0) (i32.const 24) ) (local.tee $1 (call $emscripten_asm_const_int_sync_on_main_thread (i32.const 601) (i32.add (local.get $0) (i32.const 24) ) (i32.add (local.get $0) (i32.const 16) ) ) ) ) (i32.store (local.get $0) (local.get $1) ) (drop (call $emscripten_asm_const_int_sync_on_main_thread (i32.const 621) (i32.add (local.get $0) (i32.const 24) ) (local.get $0) ) ) (global.set $global$0 (i32.add (local.get $0) (i32.const 32) ) ) (i32.const 0) ) (func $__em_asm_sig_builder::inner<>\20const\20__em_asm_sig_builder::__em_asm_sig<>\28\29 (result i32) (i32.const 0) ) (func $__em_asm_sig_builder::inner\20const\20__em_asm_sig_builder::__em_asm_sig\28int\2c\20int\29 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (global.set $global$0 (local.tee $3 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (i32.store8 offset=13 (local.get $3) (call $__em_asm_sig_builder::sig_char\28int\29 (local.get $1) ) ) (local.set $2 (call $__em_asm_sig_builder::sig_char\28int\29 (local.get $2) ) ) (i32.store8 (i32.add (local.get $0) (i32.const 2) ) (i32.const 0) ) (i32.store8 offset=14 (local.get $3) (local.get $2) ) (i32.store16 align=1 (local.get $0) (i32.load16_u offset=13 align=1 (local.get $3) ) ) (global.set $global$0 (i32.add (local.get $3) (i32.const 16) ) ) ) (func $__em_asm_sig_builder::inner\20const\20__em_asm_sig_builder::__em_asm_sig\28int\29 (param $0 i32) (param $1 i32) (local $2 i32) (global.set $global$0 (local.tee $2 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (local.set $1 (call $__em_asm_sig_builder::sig_char\28int\29 (local.get $1) ) ) (i32.store8 offset=15 (local.get $2) (i32.const 0) ) (i32.store8 offset=14 (local.get $2) (local.get $1) ) (i32.store16 align=1 (local.get $0) (i32.load16_u offset=14 (local.get $2) ) ) (global.set $global$0 (i32.add (local.get $2) (i32.const 16) ) ) ) (func $__em_asm_sig_builder::sig_char\28int\29 (param $0 i32) (result i32) (i32.const 105) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "asmConsts": { "568": "{ Module.print(\"Hello world\"); }", "601": "{ return $0 + $1; }", "621": "{ Module.print(\"Got \" + $0); }" }, "declares": [ "emscripten_asm_const_int_sync_on_main_thread" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { "__heap_base" : "66192", "__data_end" : "652" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_asm_pthread.cpp000066400000000000000000000003111423707623100221460ustar00rootroot00000000000000// Build with // // emcc a.cpp -pthread -s WASM_BIGINT // #include EM_JS(void, world, (), { console.log("World."); }); int main() { EM_ASM({ console.log("Hello."); }); world(); } binaryen-version_108/test/lld/em_asm_pthread.wasm000066400000000000000000000574171423707623100223560ustar00rootroot00000000000000asm &``}`}``` ``` ``}`}`}}``}}`}}}``}}}`}}}}``}}}}`` ` `````````~~`|`|`|`|`|½envmemory€€envemscripten_asm_const_intenvworldenv__cxa_thread_atexitenv__clock_gettimeenvemscripten_get_now!env0emscripten_conditional_set_current_thread_statusenvemscripten_futex_wait"envemscripten_futex_wakeenv __assert_failenv$emscripten_set_current_thread_status env_emscripten_notify_thread_queueenvemscripten_webgl_create_contextenv"emscripten_set_canvas_element_sizeenvpthread_createenv$emscripten_receive_on_main_thread_js#envemscripten_resize_heapwasi_snapshot_preview1fd_writeenvinitPthreadsJSVU    $  %      pPAПÀ A A A A A A A A´ AÕ A˜ A¬ Aú Aö ¦$__wasm_call_ctorsmain__em_js__world__indirect_function_tableemscripten_tls_initemscripten_get_global_libcd__errno_location+fflushb%__emscripten_pthread_data_constructore__em_js__initPthreadsJS pthread_self __pthread_tsd_run_dtorsf.emscripten_current_thread_process_queued_calls1*emscripten_register_main_browser_thread_id6!emscripten_main_browser_thread_id7!_emscripten_do_dispatch_to_thread8$emscripten_sync_run_in_main_thread_2<$emscripten_sync_run_in_main_thread_4=+emscripten_main_thread_process_queued_calls>+_emscripten_allow_main_runtime_queued_calls (emscripten_run_in_main_runtime_thread_js?_emscripten_call_on_threadA_emscripten_main_thread_futex _emscripten_thread_init stackSave_ stackRestore` stackAllocaemscripten_stack_init,emscripten_stack_set_limits-emscripten_stack_get_free.emscripten_stack_get_end/mallocNfreePmemalignQ__start_em_asm __stop_em_asm  A [Z\  õ”U,e  {AÀAAþH@AÀABþA€AA“üA˜ AAœüA´ AAÆüAú AAüüA€AAÀüAÀAþAÀAþ ü ü ü ü ü  n #€€€€!A! k! $€€€€AúŒ€€!  6 ( !A€ˆ€€!A!   €€€€€€€A!A!  j! $€€€€  •€€€!  =@#€€€"E #‚€€€ Ñ€€€"“€€€A€€€ A€ˆ€€‚€€€ Ѐ€€ #ƒ€€€  $ƒ€€€ $„€€€ $…€€€ #…€€€ #„€€€ ê (!™€€€"((! ("Aÿÿÿÿq!@@ AqAG  G A! ("AþÿÿÿK  Aj6A A8! AÿÿÿÿF @ -A€qE @ Aœj( At6œ (! A j Aj6 A€€€€xr  ! @@@ E AqE  A€€€€qE  Aj  ž€€€ F  A jA6A  (˜! A˜j"6 6 Aj!@  F A|j 6  6˜A! A jA6 E A6 (Ar6A>!   þH *@ -Aq AjAA ž€€€A q €€€ ™€€€ ¢€€€ AAþ€Ž€€ "@¤€€€AG A(„Ž€€E ¥€€€ AAþ€Ž€€ A€Ž€€Aÿÿÿÿ‡€€€  ("AsA€q! (!@@@ Aq"  ™€€€!A?! (Aÿÿÿÿq ((G @ AqAG ("E Aj6A @  A j Aj6¡€€€ ( " ("6  A˜jF A|j 6 Aj" AtAuAÿÿÿÿq§€€€!@ E  A jA6£€€€ A!@  AJ   ¨€€€  þA A‡€€€  þ þ  ™€€€A0j AПÀ‚$‡€€€AÄŸ€€AjApq$†€€€  $‡€€€ $†€€€ #€€€€#†€€€k #†€€€ (AF @@œ€€€E A-¨Ž€€ AA:¨Ž€€ AŒŽ€€É€€€@ €€€²€€€" AŒŽ€€¦€€€œ€€€E AA:¨Ž€€ @ Aj"©€€€" A j"©€€€F @AŒŽ€€¦€€€ ( Atj(³€€€AŒŽ€€É€€€  AjA€o"ª€€€  ©€€€G AŒŽ€€¦€€€ Aÿÿÿÿ‡€€€œ€€€E AA:¨Ž€€ X@ E @A(°Ž€€"E @@ ( G  (" A A튀€Aˆ€€AAôŠ€€ˆ€€€ œ@@@ ("A€€€ÀqA€€€ÀF @@@@@@@@@@@@@@@@@@@@@@@@@@ AÿÿÿïJ @ A§€€0J @ AÿÿÿJ @ A€€€pj A€€€ŠxF    (€€€€  @ Aÿÿÿ/J Aøÿÿ_j A€€€0F  A €€0G  ( Aj( A j* (€€€  @ A§€ÀJ @ AØÿÿOj A€€€ÀF A €€ÀG  ( Aj( A j* A(j( (‚€€€  @ A§…€ÐJ AØþÿ¿j  A¨…€ÐF A€€€àG  ( Aj( A j( A(j( A0j( A8j( (ƒ€€€  @ Aÿÿÿ¯J @ Aÿÿÿ¯J @ AÿÿÿJ A€€€ðF  A€€€€G  ( Aj( A j( A(j( A0j( A8j( AÀj( AÈj( („€€€  A€€€F  A€€€ G  ( Aj( A j( A(j( A0j( A8j( AÀj( AÈj( AÐj( AØj( (…€€€  @ AÿÿÿJ A€€€°F  A€€€€G  (†€€€6°  A€€€F  A€€€ F  A€€€©G  ( Aj(‹€€€6°  @ AÿÿÿÏJ @ Aÿÿÿ¿J A€€€°F  A€€À¹G  ( Aj( A j(Œ€€€6°  A€€€ÀF  A€€€ÈG  ( Aj( A j( A(j(€€€6°  @ AÿÿÿïJ A€€€ÐF  A€€€àG  ( Aj( A j( A(j( A0j( A8j( (‡€€€6°  A€€€ðF  A€€€€F  A€€€G  ( Aj( A j( A(j( A0j( A8j( AÀj( AÈj( AÐj( (ˆ€€€6°  ( (‰€€€  * (Š€€€  ( Aj* (‹€€€  * Aj* (Œ€€€  ( Aj( A j( (€€€  ( Aj* A j* (Ž€€€  * Aj* A j* (€€€  ( Aj( A j( A(j( (€€€  ( Aj* A j* A(j* (‘€€€  * Aj* A j* A(j* (’€€€  A€€€ÐG ( Aj( A j( A(j( A0j( (“€€€  ( Aj* A j* A(j* A0j* (”€€€  ( Aj( A j( A(j( A0j( A8j( AÀj( (•€€€  ( Aj( A j( A(j( A0j( A8j( AÀj( AÈj( AÐj( (–€€€ ( Aj( A j( A(j( A0j( A8j( AÀj( AÈj( AÐj( AØj( Aàj( (—€€€ ( (˜€€€6° ( Aj( (™€€€6° ( Aj( A j( (š€€€6° ( Aj( A j( A(j( (›€€€6°  ( Aj( A j( A(j( A0j( (œ€€€6°  ( Aj( A j( A(j( A0j( A8j( AÀj( (€€€6°  ( Aj( A j( A(j( A0j( A8j( AÀj( AÈj( (ž€€€6°  A€€€ F  AºŠ€€Aˆ€€AßA±Š€€ˆ€€€ ( ( AjŽ€€€9°  A所€Aˆ€€AÏA±Š€€ˆ€€€ ( Aj( (Ÿ€€€ @ (¼E ´€€€ A6 AjAÿÿÿÿ‡€€€ @ E (¸Ѐ€€ Ѐ€€ |@ Aj"©€€€" „€€€!A‰€€€A!@    "cAs @ A  ¡†€€€ ©€€€!„€€€!   c A‰€€€ AAx  A 6ˆŽ€€ A(ˆŽ€€  @@@ E @@@  A鈀€Aˆ€€AÔALj€€ˆ€€€ ·€€€! @@ AF  €€€G  ³€€€A AŒŽ€€É€€€@ ¹€€€"( A€΀€€6 @ Aj"©€€€" A j"©€€€"AjA€o"G @AŒŽ€€¦€€€ ·€€€G   Dð†€€€AŒŽ€€É€€€ ©€€€" ©€€€"AjA€o"F ( Atj 6@  G ·€€€Š€€€ ´€€€AŒŽ€€¦€€€   ª€€€AŒŽ€€¦€€€  Aˆ€€Aˆ€€AÊALj€€ˆ€€€ ´€€€ A k@ ²€€€" A΀€€"B7 B7  6@@A(°Ž€€" A°Ž€€!  @ "(" Aj! 6  ·€€€ ¸€€€  º€€€ Dðµ€€€ ^#€€€€AÀk"$€€€€ AAÀü Aj 6 A6°  6  6 »€€€ (°! AÀj$€€€€ r#€€€€AÀk"$€€€€ AAÀü A(j 6 A j 6 Aj 6 A6°  6  6 »€€€ (°! AÀj$€€€€ @›€€€E A(˜‹€€E ±€€€ ƒ|#€€€€AÀk"$€€€€@@ E A6¸ A6 !  À€€€!  6 A€€€Šx6 A k6¼@ AN  6A!@ AL @  Aj"AtjAj  Atj)7 !  G @@ E »€€€ +°!  º€€€D! AÀj$€€€€  A÷ˆ€€Aˆ€€AþA ‰€€ˆ€€€ A@AÀ΀€€" Aˆ€€Aˆ€€A­AýŠ€€ˆ€€€ A6¸ B7 ±#€€€€Ak"$€€€€@À€€€"E  6¸  6  6  6 @ AvAq"E Aÿÿÿq!A!@@@@@@ Aq  ( "Aj6  AtjAj (6   ( AjAxq"Aj6  AtjAj )7   ( AjAxq"Aj6  AtjAj +¶8   ( AjAxq"Aj6  AtjAj +9 Av! Aj" G A6¼@@ E A! A: AéÒ;  6  6A§€€ A j €€€€   ¸€€€! Aj$€€€€  Aɉ€€Aˆ€€AäAˉ€€ˆ€€€ 9A!@ AK ™€€€!@ E  (86  68A!  º||#€€€€Ak"$€€€€@@@@  Dð!  A! (Aÿ“ëÜK   Ajƒ€€€   ( (k"6  ( ( k"6 @ AJ  A€”ëÜj"6  Aj"6 AH  ·D€„.A£ Aèl· ! @@@œ€€€"  €€€(8AG  €€€(functionEnum) <= EM_QUEUED_CALL_MAX_ARGS_do_call0 && "Invalid Emscripten pthread _do_call opcode!"targetGetQueueem_queued_call_mallocœÐPx  ÿÿÿÿ F()<::>{ console.log("World."); }(void)<::>{ PThread.initRuntime(); }|{ console.log("Hello."); }throw 'Canceled!'{ setTimeout(function() { __emscripten_do_dispatch_to_thread($0, $1); }, 0); }À¶ producerslanguageC99 processed-byclang†13.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project cfc256ba9f6aa9d6aa29db91a98d35fa1f075596)Btarget_features+atomics+ bulk-memory+mutable-globals+sign-extbinaryen-version_108/test/lld/em_asm_pthread.wasm.out000066400000000000000000011052031423707623100231500ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i64_i32_=>_i64 (func (param i32 i64 i32) (result i64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32 i32) (result i32))) (type $none_=>_f64 (func (result f64))) (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) (type $i32_i32_i32_=>_f64 (func (param i32 i32 i32) (result f64))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $i32_i32_f32_i32_=>_none (func (param i32 i32 f32 i32))) (type $i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32))) (type $i32_i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32 i32 i32))) (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $f32_=>_none (func (param f32))) (type $i32_f32_=>_none (func (param i32 f32))) (type $f32_f32_=>_none (func (param f32 f32))) (type $i32_f32_f32_=>_none (func (param i32 f32 f32))) (type $f32_f32_f32_=>_none (func (param f32 f32 f32))) (type $i32_f32_f32_f32_=>_none (func (param i32 f32 f32 f32))) (type $f32_f32_f32_f32_=>_none (func (param f32 f32 f32 f32))) (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32))) (type $i32_f32_f32_f32_f32_=>_none (func (param i32 f32 f32 f32 f32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32 i32))) (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_i32_i32_i32_=>_f64 (func (param i32 i32 i32 i32) (result f64))) (type $i32_i32_i64_i32_=>_i64 (func (param i32 i32 i64 i32) (result i64))) (import "env" "memory" (memory $mimport$0 (shared 256 256))) (data "\00/home/azakai/Dev/emscripten/system/lib/pthread/library_pthread.c\00call\00_emscripten_do_dispatch_to_thread\00target_thread\00num_args+1 <= EM_QUEUED_JS_CALL_MAX_ARGS\00emscripten_run_in_main_runtime_thread_js\00q\00_emscripten_call_on_thread\00EM_FUNC_SIG_NUM_FUNC_ARGUMENTS(q->functionEnum) <= EM_QUEUED_CALL_MAX_ARGS\00_do_call\000 && \"Invalid Emscripten pthread _do_call opcode!\"\00target\00GetQueue\00em_queued_call_malloc\00") (data "\01\00\00\00\d0\0fP\00\05\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\04\00\00\00x\t\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\a0\05\00\00") (data "") (data "") (data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (import "env" "emscripten_asm_const_int" (func $fimport$0 (param i32 i32 i32) (result i32))) (import "env" "world" (func $fimport$1)) (import "env" "__cxa_thread_atexit" (func $fimport$2 (param i32 i32 i32) (result i32))) (import "env" "__clock_gettime" (func $fimport$3 (param i32 i32) (result i32))) (import "env" "emscripten_get_now" (func $fimport$4 (result f64))) (import "env" "emscripten_conditional_set_current_thread_status" (func $fimport$5 (param i32 i32))) (import "env" "emscripten_futex_wait" (func $fimport$6 (param i32 i32 f64) (result i32))) (import "env" "emscripten_futex_wake" (func $fimport$7 (param i32 i32) (result i32))) (import "env" "__assert_fail" (func $fimport$8 (param i32 i32 i32 i32))) (import "env" "emscripten_set_current_thread_status" (func $fimport$9 (param i32))) (import "env" "_emscripten_notify_thread_queue" (func $fimport$10 (param i32 i32) (result i32))) (import "env" "emscripten_webgl_create_context" (func $fimport$11 (param i32 i32) (result i32))) (import "env" "emscripten_set_canvas_element_size" (func $fimport$12 (param i32 i32 i32) (result i32))) (import "env" "pthread_create" (func $fimport$13 (param i32 i32 i32 i32) (result i32))) (import "env" "emscripten_receive_on_main_thread_js" (func $fimport$14 (param i32 i32 i32) (result f64))) (import "env" "emscripten_resize_heap" (func $fimport$15 (param i32) (result i32))) (import "wasi_snapshot_preview1" "fd_write" (func $fimport$16 (param i32 i32 i32 i32) (result i32))) (import "env" "initPthreadsJS" (func $fimport$17)) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (global $global$0 (mut i32) (i32.const 5246928)) (global $global$1 i32 (i32.const 0)) (global $global$2 i32 (i32.const 0)) (global $global$3 (mut i32) (i32.const 0)) (global $global$4 (mut i32) (i32.const 0)) (global $global$5 (mut i32) (i32.const 0)) (global $global$6 (mut i32) (i32.const 0)) (global $global$7 (mut i32) (i32.const 0)) (global $global$10 i32 (i32.const 1432)) (global $global$11 i32 (i32.const 1836)) (global $global$12 i32 (i32.const 1658)) (global $global$13 i32 (i32.const 1782)) (table $0 5 5 funcref) (elem (i32.const 1) $6 $73 $72 $74) (export "__wasm_call_ctors" (func $0)) (export "main" (func $4)) (export "__indirect_function_table" (table $0)) (export "emscripten_tls_init" (func $5)) (export "emscripten_get_global_libc" (func $82)) (export "__errno_location" (func $25)) (export "fflush" (func $80)) (export "__emscripten_pthread_data_constructor" (func $83)) (export "pthread_self" (func $14)) (export "__pthread_tsd_run_dtors" (func $84)) (export "emscripten_current_thread_process_queued_calls" (func $31)) (export "emscripten_register_main_browser_thread_id" (func $36)) (export "emscripten_main_browser_thread_id" (func $37)) (export "_emscripten_do_dispatch_to_thread" (func $38)) (export "emscripten_sync_run_in_main_thread_2" (func $42)) (export "emscripten_sync_run_in_main_thread_4" (func $43)) (export "emscripten_main_thread_process_queued_calls" (func $44)) (export "_emscripten_allow_main_runtime_queued_calls" (global $global$10)) (export "emscripten_run_in_main_runtime_thread_js" (func $45)) (export "_emscripten_call_on_thread" (func $47)) (export "_emscripten_main_thread_futex" (global $global$11)) (export "_emscripten_thread_init" (func $8)) (export "stackSave" (func $77)) (export "stackRestore" (func $78)) (export "stackAlloc" (func $79)) (export "emscripten_stack_init" (func $26)) (export "emscripten_stack_set_limits" (func $27)) (export "emscripten_stack_get_free" (func $28)) (export "emscripten_stack_get_end" (func $29)) (export "malloc" (func $60)) (export "free" (func $62)) (export "memalign" (func $63)) (export "dynCall_vi" (func $dynCall_vi)) (export "dynCall_ii" (func $dynCall_ii)) (export "dynCall_iiii" (func $dynCall_iiii)) (export "dynCall_jiji" (func $legalstub$dynCall_jiji)) (start $2) (func $0 (call $26) (call $83) (call $5) ) (func $1 (param $0 i32) ) (func $2 (if (i32.atomic.rmw.cmpxchg (i32.const 4032) (i32.const 0) (i32.const 1) ) (drop (memory.atomic.wait32 (i32.const 4032) (i32.const 1) (i64.const -1) ) ) (block (memory.init 0 (i32.const 1024) (i32.const 0) (i32.const 403) ) (memory.init 1 (i32.const 1432) (i32.const 0) (i32.const 156) ) (block (drop (i32.const 1588) ) (drop (i32.const 0) ) (drop (i32.const 70) ) ) (block (drop (i32.const 1658) ) (drop (i32.const 0) ) (drop (i32.const 124) ) ) (memory.init 4 (i32.const 1792) (i32.const 0) (i32.const 2240) ) (i32.atomic.store (i32.const 4032) (i32.const 2) ) (drop (memory.atomic.notify (i32.const 4032) (i32.const -1) ) ) ) ) (data.drop 0) (data.drop 1) (nop) (nop) (data.drop 4) ) (func $3 (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local.set $0 (global.get $global$0) ) (local.set $1 (i32.const 16) ) (local.set $2 (i32.sub (local.get $0) (local.get $1) ) ) (global.set $global$0 (local.get $2) ) (local.set $3 (i32.const 1658) ) (i32.store offset=12 (local.get $2) (local.get $3) ) (local.set $4 (i32.load offset=12 (local.get $2) ) ) (local.set $5 (i32.const 1024) ) (local.set $6 (i32.const 0) ) (drop (call $fimport$0 (local.get $4) (local.get $5) (local.get $6) ) ) (call $fimport$1) (local.set $7 (i32.const 0) ) (local.set $8 (i32.const 16) ) (local.set $9 (i32.add (local.get $2) (local.get $8) ) ) (global.set $global$0 (local.get $9) ) (return (local.get $7) ) ) (func $4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (call $3) ) (return (local.get $2) ) ) (func $5 (local $0 i32) (block $label$1 (br_if $label$1 (i32.eqz (local.tee $0 (global.get $global$1) ) ) ) (call $1 (local.tee $0 (call $63 (global.get $global$2) (local.get $0) ) ) ) (drop (call $fimport$2 (i32.const 1) (local.get $0) (i32.const 1024) ) ) ) ) (func $6 (param $0 i32) (call $62 (local.get $0) ) ) (func $7 (result i32) (global.get $global$3) ) (func $8 (param $0 i32) (param $1 i32) (param $2 i32) (global.set $global$3 (local.get $0) ) (global.set $global$4 (local.get $1) ) (global.set $global$5 (local.get $2) ) ) (func $9 (result i32) (global.get $global$5) ) (func $10 (result i32) (global.get $global$4) ) (func $11 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local.set $1 (i32.load (local.get $0) ) ) (local.set $3 (i32.load offset=40 (local.tee $2 (call $7) ) ) ) (local.set $5 (i32.and (local.tee $4 (i32.load offset=4 (local.get $0) ) ) (i32.const 2147483647) ) ) (block $label$1 (block $label$2 (br_if $label$2 (i32.ne (i32.and (local.get $1) (i32.const 3) ) (i32.const 1) ) ) (br_if $label$2 (i32.ne (local.get $5) (local.get $3) ) ) (local.set $6 (i32.const 6) ) (br_if $label$1 (i32.gt_u (local.tee $5 (i32.load offset=20 (local.get $0) ) ) (i32.const 2147483646) ) ) (i32.store offset=20 (local.get $0) (i32.add (local.get $5) (i32.const 1) ) ) (return (i32.const 0) ) ) (local.set $6 (i32.const 56) ) (br_if $label$1 (i32.eq (local.get $5) (i32.const 2147483647) ) ) (block $label$3 (br_if $label$3 (i32.eqz (i32.and (i32.load8_u (local.get $0) ) (i32.const 128) ) ) ) (block $label$4 (br_if $label$4 (i32.load (i32.add (local.get $2) (i32.const 156) ) ) ) (i32.store offset=156 (local.get $2) (i32.const -12) ) ) (local.set $6 (i32.load offset=8 (local.get $0) ) ) (i32.store (i32.add (local.get $2) (i32.const 160) ) (i32.add (local.get $0) (i32.const 16) ) ) (local.set $3 (select (i32.or (local.get $3) (i32.const -2147483648) ) (local.get $3) (local.get $6) ) ) ) (block $label$5 (block $label$6 (block $label$7 (br_if $label$7 (i32.eqz (local.get $5) ) ) (br_if $label$6 (i32.eqz (i32.and (local.get $1) (i32.const 4) ) ) ) (br_if $label$6 (i32.eqz (i32.and (local.get $4) (i32.const 1073741824) ) ) ) ) (br_if $label$5 (i32.eq (call $12 (i32.add (local.get $0) (i32.const 4) ) (local.get $4) (local.get $3) ) (local.get $4) ) ) ) (i32.store (i32.add (local.get $2) (i32.const 160) ) (i32.const 0) ) (return (i32.const 10) ) ) (local.set $3 (i32.load offset=152 (local.get $2) ) ) (i32.store offset=12 (local.get $0) (local.tee $6 (i32.add (local.get $2) (i32.const 152) ) ) ) (i32.store offset=16 (local.get $0) (local.get $3) ) (local.set $1 (i32.add (local.get $0) (i32.const 16) ) ) (block $label$8 (br_if $label$8 (i32.eq (local.get $3) (local.get $6) ) ) (i32.store (i32.add (local.get $3) (i32.const -4) ) (local.get $1) ) ) (i32.store offset=152 (local.get $2) (local.get $1) ) (local.set $6 (i32.const 0) ) (i32.store (i32.add (local.get $2) (i32.const 160) ) (i32.const 0) ) (br_if $label$1 (i32.eqz (local.get $5) ) ) (i32.store offset=20 (local.get $0) (i32.const 0) ) (i32.store (local.get $0) (i32.or (i32.load (local.get $0) ) (i32.const 8) ) ) (local.set $6 (i32.const 62) ) ) (local.get $6) ) (func $12 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.atomic.rmw.cmpxchg (local.get $0) (local.get $1) (local.get $2) ) ) (func $13 (param $0 i32) (result i32) (block $label$1 (br_if $label$1 (i32.and (i32.load8_u (local.get $0) ) (i32.const 15) ) ) (return (i32.and (call $12 (i32.add (local.get $0) (i32.const 4) ) (i32.const 0) (i32.const 10) ) (i32.const 10) ) ) ) (call $11 (local.get $0) ) ) (func $14 (result i32) (call $7) ) (func $15 (call $16) ) (func $16 (drop (i32.atomic.rmw.add offset=1792 (i32.const 0) (i32.const 1) ) ) ) (func $17 (block $label$1 (br_if $label$1 (i32.ne (call $18) (i32.const 1) ) ) (br_if $label$1 (i32.eqz (i32.load offset=1796 (i32.const 0) ) ) ) (call $19) ) ) (func $18 (result i32) (i32.atomic.rmw.add offset=1792 (i32.const 0) (i32.const -1) ) ) (func $19 (drop (call $fimport$7 (i32.const 1792) (i32.const 2147483647) ) ) ) (func $20 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local.set $2 (i32.and (i32.xor (local.tee $1 (i32.load (local.get $0) ) ) (i32.const -1) ) (i32.const 128) ) ) (local.set $3 (i32.load offset=8 (local.get $0) ) ) (block $label$1 (block $label$2 (block $label$3 (br_if $label$3 (local.tee $4 (i32.and (local.get $1) (i32.const 15) ) ) ) (br $label$2) ) (local.set $5 (call $7) ) (local.set $6 (i32.const 63) ) (br_if $label$1 (i32.ne (i32.and (i32.load offset=4 (local.get $0) ) (i32.const 2147483647) ) (i32.load offset=40 (local.get $5) ) ) ) (block $label$4 (br_if $label$4 (i32.ne (i32.and (local.get $1) (i32.const 3) ) (i32.const 1) ) ) (br_if $label$4 (i32.eqz (local.tee $6 (i32.load offset=20 (local.get $0) ) ) ) ) (i32.store offset=20 (local.get $0) (i32.add (local.get $6) (i32.const -1) ) ) (return (i32.const 0) ) ) (block $label$5 (br_if $label$5 (local.get $2) ) (i32.store (i32.add (local.get $5) (i32.const 160) ) (i32.add (local.get $0) (i32.const 16) ) ) (call $15) ) (i32.store (local.tee $7 (i32.load offset=12 (local.get $0) ) ) (local.tee $6 (i32.load offset=16 (local.get $0) ) ) ) (br_if $label$2 (i32.eq (local.get $6) (i32.add (local.get $5) (i32.const 152) ) ) ) (i32.store (i32.add (local.get $6) (i32.const -4) ) (local.get $7) ) ) (local.set $0 (call $21 (local.tee $7 (i32.add (local.get $0) (i32.const 4) ) ) (i32.and (i32.shr_s (i32.shl (local.get $1) (i32.const 28) ) (i32.const 31) ) (i32.const 2147483647) ) ) ) (block $label$6 (br_if $label$6 (i32.eqz (local.get $4) ) ) (br_if $label$6 (local.get $2) ) (i32.store (i32.add (local.get $5) (i32.const 160) ) (i32.const 0) ) (call $17) ) (local.set $6 (i32.const 0) ) (block $label$7 (br_if $label$7 (local.get $3) ) (br_if $label$1 (i32.gt_s (local.get $0) (i32.const -1) ) ) ) (call $22 (local.get $7) (local.get $2) ) ) (local.get $6) ) (func $21 (param $0 i32) (param $1 i32) (result i32) (i32.atomic.rmw.xchg (local.get $0) (local.get $1) ) ) (func $22 (param $0 i32) (param $1 i32) (drop (call $fimport$7 (local.get $0) (i32.const 1) ) ) ) (func $23 (param $0 i32) (result i32) (i32.atomic.load (local.get $0) ) ) (func $24 (param $0 i32) (param $1 i32) (result i32) (i32.atomic.store (local.get $0) (local.get $1) ) (local.get $1) ) (func $25 (result i32) (i32.add (call $7) (i32.const 48) ) ) (func $26 (global.set $global$7 (i32.const 5246928) ) (global.set $global$6 (i32.and (i32.add (i32.const 4036) (i32.const 15) ) (i32.const -16) ) ) ) (func $27 (param $0 i32) (param $1 i32) (global.set $global$7 (local.get $0) ) (global.set $global$6 (local.get $1) ) ) (func $28 (result i32) (i32.sub (global.get $global$0) (global.get $global$6) ) ) (func $29 (result i32) (global.get $global$6) ) (func $30 (param $0 i32) (result i32) (i32.eq (i32.load (local.get $0) ) (i32.const 2) ) ) (func $31 (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (block $label$1 (block $label$2 (br_if $label$2 (i32.eqz (call $10) ) ) (br_if $label$1 (i32.load8_u offset=1832 (i32.const 0) ) ) (i32.store8 offset=1832 (i32.const 0) (i32.const 1) ) ) (drop (call $55 (i32.const 1804) ) ) (block $label$3 (br_if $label$3 (local.tee $0 (call $32 (call $14) ) ) ) (drop (call $20 (i32.const 1804) ) ) (br_if $label$1 (i32.eqz (call $10) ) ) (i32.store8 offset=1832 (i32.const 0) (i32.const 0) ) (return) ) (block $label$4 (br_if $label$4 (i32.eq (local.tee $2 (call $23 (local.tee $1 (i32.add (local.get $0) (i32.const 8) ) ) ) ) (call $23 (local.tee $3 (i32.add (local.get $0) (i32.const 12) ) ) ) ) ) (loop $label$5 (drop (call $20 (i32.const 1804) ) ) (call $33 (i32.load (i32.add (i32.load offset=4 (local.get $0) ) (i32.shl (local.get $2) (i32.const 2) ) ) ) ) (drop (call $55 (i32.const 1804) ) ) (drop (call $24 (local.get $1) (local.tee $2 (i32.rem_s (i32.add (local.get $2) (i32.const 1) ) (i32.const 128) ) ) ) ) (br_if $label$5 (i32.ne (local.get $2) (call $23 (local.get $3) ) ) ) ) ) (drop (call $20 (i32.const 1804) ) ) (drop (call $fimport$7 (local.get $1) (i32.const 2147483647) ) ) (br_if $label$1 (i32.eqz (call $10) ) ) (i32.store8 offset=1832 (i32.const 0) (i32.const 0) ) ) ) (func $32 (param $0 i32) (result i32) (local $1 i32) (block $label$1 (br_if $label$1 (i32.eqz (local.get $0) ) ) (block $label$2 (br_if $label$2 (i32.eqz (local.tee $1 (i32.load offset=1840 (i32.const 0) ) ) ) ) (loop $label$3 (block $label$4 (br_if $label$4 (i32.ne (i32.load (local.get $1) ) (local.get $0) ) ) (return (local.get $1) ) ) (br_if $label$3 (local.tee $1 (i32.load offset=16 (local.get $1) ) ) ) ) ) (return (i32.const 0) ) ) (call $fimport$8 (i32.const 1389) (i32.const 1025) (i32.const 385) (i32.const 1396) ) (unreachable) ) (func $33 (param $0 i32) (local $1 i32) (block $label$1 (block $label$2 (block $label$3 (br_if $label$3 (i32.eq (i32.and (local.tee $1 (i32.load (local.get $0) ) ) (i32.const 402653184) ) (i32.const 402653184) ) ) (block $label$4 (block $label$5 (block $label$6 (block $label$7 (block $label$8 (block $label$9 (block $label$10 (block $label$11 (block $label$12 (block $label$13 (block $label$14 (block $label$15 (block $label$16 (block $label$17 (block $label$18 (block $label$19 (block $label$20 (block $label$21 (block $label$22 (block $label$23 (block $label$24 (block $label$25 (block $label$26 (block $label$27 (block $label$28 (block $label$29 (br_if $label$29 (i32.gt_s (local.get $1) (i32.const 234881023) ) ) (block $label$30 (br_if $label$30 (i32.gt_s (local.get $1) (i32.const 100663335) ) ) (block $label$31 (br_if $label$31 (i32.gt_s (local.get $1) (i32.const 67108863) ) ) (block $label$32 (br_table $label$28 $label$5 $label$27 $label$32 (i32.add (local.get $1) (i32.const -33554432) ) ) ) (br_if $label$4 (i32.eq (local.get $1) (i32.const -2126512128) ) ) (br_if $label$5 (local.get $1) ) (call_indirect (type $none_=>_none) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (block $label$33 (br_if $label$33 (i32.gt_s (local.get $1) (i32.const 100663295) ) ) (br_table $label$26 $label$5 $label$25 $label$6 (i32.add (local.get $1) (i32.const -67108872) ) ) ) (br_if $label$24 (i32.eq (local.get $1) (i32.const 100663296) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 100663328) ) ) (call_indirect (type $i32_i32_f32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (f32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (block $label$34 (br_if $label$34 (i32.gt_s (local.get $1) (i32.const 134217895) ) ) (block $label$35 (br_table $label$23 $label$5 $label$22 $label$35 (i32.add (local.get $1) (i32.const -100663336) ) ) ) (br_if $label$21 (i32.eq (local.get $1) (i32.const 134217728) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 134217760) ) ) (call_indirect (type $i32_i32_f32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (f32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (block $label$36 (br_if $label$36 (i32.gt_s (local.get $1) (i32.const 167772839) ) ) (br_table $label$20 $label$5 $label$19 $label$18 (i32.add (local.get $1) (i32.const -134217896) ) ) ) (br_if $label$17 (i32.eq (local.get $1) (i32.const 167772840) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 201326592) ) ) (call_indirect (type $i32_i32_i32_i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (block $label$37 (br_if $label$37 (i32.gt_s (local.get $1) (i32.const 637534207) ) ) (block $label$38 (br_if $label$38 (i32.gt_s (local.get $1) (i32.const 369098751) ) ) (block $label$39 (br_if $label$39 (i32.gt_s (local.get $1) (i32.const 301989887) ) ) (br_if $label$16 (i32.eq (local.get $1) (i32.const 234881024) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 268435456) ) ) (call_indirect (type $i32_i32_i32_i32_i32_i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load (i32.add (local.get $0) (i32.const 64) ) ) (i32.load (i32.add (local.get $0) (i32.const 72) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (br_if $label$15 (i32.eq (local.get $1) (i32.const 301989888) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 335544320) ) ) (call_indirect (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load (i32.add (local.get $0) (i32.const 64) ) ) (i32.load (i32.add (local.get $0) (i32.const 72) ) ) (i32.load (i32.add (local.get $0) (i32.const 80) ) ) (i32.load (i32.add (local.get $0) (i32.const 88) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (block $label$40 (br_if $label$40 (i32.gt_s (local.get $1) (i32.const 570425343) ) ) (br_if $label$14 (i32.eq (local.get $1) (i32.const 369098752) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 536870912) ) ) (i32.store offset=176 (local.get $0) (call_indirect (type $none_=>_i32) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (br_if $label$13 (i32.eq (local.get $1) (i32.const 570425344) ) ) (br_if $label$12 (i32.eq (local.get $1) (i32.const 603979776) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 622854144) ) ) (i32.store offset=176 (local.get $0) (call $fimport$11 (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) ) ) (br $label$1) ) (block $label$41 (br_if $label$41 (i32.gt_s (local.get $1) (i32.const 704643071) ) ) (block $label$42 (br_if $label$42 (i32.gt_s (local.get $1) (i32.const 671088639) ) ) (br_if $label$11 (i32.eq (local.get $1) (i32.const 637534208) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 657457152) ) ) (i32.store offset=176 (local.get $0) (call $fimport$12 (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) ) ) (br $label$1) ) (br_if $label$10 (i32.eq (local.get $1) (i32.const 671088640) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 687865856) ) ) (i32.store offset=176 (local.get $0) (call $fimport$13 (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) ) ) (br $label$1) ) (block $label$43 (br_if $label$43 (i32.gt_s (local.get $1) (i32.const 771751935) ) ) (br_if $label$9 (i32.eq (local.get $1) (i32.const 704643072) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 738197504) ) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_i32_i32_i32_i32_i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (br_if $label$8 (i32.eq (local.get $1) (i32.const 771751936) ) ) (br_if $label$7 (i32.eq (local.get $1) (i32.const 805306368) ) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 838860800) ) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load (i32.add (local.get $0) (i32.const 64) ) ) (i32.load (i32.add (local.get $0) (i32.const 72) ) ) (i32.load (i32.add (local.get $0) (i32.const 80) ) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (call_indirect (type $i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $f32_=>_none) (f32.load offset=16 (local.get $0) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_f32_=>_none) (i32.load offset=16 (local.get $0) ) (f32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $f32_f32_=>_none) (f32.load offset=16 (local.get $0) ) (f32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_f32_f32_=>_none) (i32.load offset=16 (local.get $0) ) (f32.load (i32.add (local.get $0) (i32.const 24) ) ) (f32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $f32_f32_f32_=>_none) (f32.load offset=16 (local.get $0) ) (f32.load (i32.add (local.get $0) (i32.const 24) ) ) (f32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_f32_f32_f32_=>_none) (i32.load offset=16 (local.get $0) ) (f32.load (i32.add (local.get $0) (i32.const 24) ) ) (f32.load (i32.add (local.get $0) (i32.const 32) ) ) (f32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $f32_f32_f32_f32_=>_none) (f32.load offset=16 (local.get $0) ) (f32.load (i32.add (local.get $0) (i32.const 24) ) ) (f32.load (i32.add (local.get $0) (i32.const 32) ) ) (f32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (br_if $label$5 (i32.ne (local.get $1) (i32.const 167772160) ) ) (call_indirect (type $i32_i32_i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_f32_f32_f32_f32_=>_none) (i32.load offset=16 (local.get $0) ) (f32.load (i32.add (local.get $0) (i32.const 24) ) ) (f32.load (i32.add (local.get $0) (i32.const 32) ) ) (f32.load (i32.add (local.get $0) (i32.const 40) ) ) (f32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_i32_i32_i32_i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load (i32.add (local.get $0) (i32.const 64) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load (i32.add (local.get $0) (i32.const 64) ) ) (i32.load (i32.add (local.get $0) (i32.const 72) ) ) (i32.load (i32.add (local.get $0) (i32.const 80) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (call_indirect (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load (i32.add (local.get $0) (i32.const 64) ) ) (i32.load (i32.add (local.get $0) (i32.const 72) ) ) (i32.load (i32.add (local.get $0) (i32.const 80) ) ) (i32.load (i32.add (local.get $0) (i32.const 88) ) ) (i32.load (i32.add (local.get $0) (i32.const 96) ) ) (i32.load offset=4 (local.get $0) ) ) (br $label$1) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_i32_i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_i32_i32_i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_i32_i32_i32_i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_i32_i32_i32_i32_i32_i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load (i32.add (local.get $0) (i32.const 64) ) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (i32.store offset=176 (local.get $0) (call_indirect (type $i32_i32_i32_i32_i32_i32_i32_i32_=>_i32) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load (i32.add (local.get $0) (i32.const 32) ) ) (i32.load (i32.add (local.get $0) (i32.const 40) ) ) (i32.load (i32.add (local.get $0) (i32.const 48) ) ) (i32.load (i32.add (local.get $0) (i32.const 56) ) ) (i32.load (i32.add (local.get $0) (i32.const 64) ) ) (i32.load (i32.add (local.get $0) (i32.const 72) ) ) (i32.load offset=4 (local.get $0) ) ) ) (br $label$1) ) (br_if $label$2 (i32.eq (local.get $1) (i32.const 67108864) ) ) ) (call $fimport$8 (i32.const 1338) (i32.const 1025) (i32.const 351) (i32.const 1329) ) (unreachable) ) (f64.store offset=176 (local.get $0) (call $fimport$14 (i32.load offset=4 (local.get $0) ) (i32.load offset=16 (local.get $0) ) (i32.add (local.get $0) (i32.const 24) ) ) ) (br $label$1) ) (call $fimport$8 (i32.const 1254) (i32.const 1025) (i32.const 207) (i32.const 1329) ) (unreachable) ) (call_indirect (type $i32_i32_=>_none) (i32.load offset=16 (local.get $0) ) (i32.load (i32.add (local.get $0) (i32.const 24) ) ) (i32.load offset=4 (local.get $0) ) ) ) (block $label$44 (br_if $label$44 (i32.eqz (i32.load offset=188 (local.get $0) ) ) ) (call $34 (local.get $0) ) (return) ) (i32.store offset=8 (local.get $0) (i32.const 1) ) (drop (call $fimport$7 (i32.add (local.get $0) (i32.const 8) ) (i32.const 2147483647) ) ) ) (func $34 (param $0 i32) (block $label$1 (br_if $label$1 (i32.eqz (local.get $0) ) ) (call $62 (i32.load offset=184 (local.get $0) ) ) ) (call $62 (local.get $0) ) ) (func $35 (param $0 i32) (param $1 f64) (result i32) (local $2 i32) (local $3 f64) (block $label$1 (br_if $label$1 (local.tee $0 (call $23 (local.tee $2 (i32.add (local.get $0) (i32.const 8) ) ) ) ) ) (local.set $3 (call $fimport$4) ) (call $fimport$9 (i32.const 5) ) (local.set $0 (i32.const 0) ) (block $label$2 (br_if $label$2 (i32.xor (f64.lt (local.get $3) (local.tee $1 (f64.add (local.get $3) (local.get $1) ) ) ) (i32.const 1) ) ) (loop $label$3 (drop (call $fimport$6 (local.get $2) (i32.const 0) (f64.sub (local.get $1) (local.get $3) ) ) ) (local.set $0 (call $23 (local.get $2) ) ) (local.set $3 (call $fimport$4) ) (br_if $label$2 (local.get $0) ) (br_if $label$3 (f64.lt (local.get $3) (local.get $1) ) ) ) ) (call $fimport$9 (i32.const 1) ) ) (select (i32.const 0) (i32.const -8) (local.get $0) ) ) (func $36 (param $0 i32) (i32.store offset=1800 (i32.const 0) (local.get $0) ) ) (func $37 (result i32) (i32.load offset=1800 (i32.const 0) ) ) (func $38 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (block $label$1 (block $label$2 (block $label$3 (br_if $label$3 (i32.eqz (local.get $1) ) ) (block $label$4 (block $label$5 (block $label$6 (br_table $label$6 $label$5 $label$4 (local.get $0) ) ) (call $fimport$8 (i32.const 1129) (i32.const 1025) (i32.const 468) (i32.const 1095) ) (unreachable) ) (local.set $0 (call $37) ) ) (block $label$7 (block $label$8 (br_if $label$8 (i32.eq (local.get $0) (i32.const 2) ) ) (br_if $label$7 (i32.ne (local.get $0) (call $14) ) ) ) (call $33 (local.get $1) ) (return (i32.const 1) ) ) (drop (call $55 (i32.const 1804) ) ) (block $label$9 (br_if $label$9 (i32.load offset=4 (local.tee $2 (call $39 (local.get $0) ) ) ) ) (i32.store offset=4 (local.get $2) (call $60 (i32.const 512) ) ) ) (block $label$10 (br_if $label$10 (i32.ne (local.tee $4 (call $23 (local.tee $3 (i32.add (local.get $2) (i32.const 8) ) ) ) ) (local.tee $7 (i32.rem_s (i32.add (local.tee $6 (call $23 (local.tee $5 (i32.add (local.get $2) (i32.const 12) ) ) ) ) (i32.const 1) ) (i32.const 128) ) ) ) ) (loop $label$11 (drop (call $20 (i32.const 1804) ) ) (br_if $label$2 (i32.ne (local.get $0) (call $37) ) ) (drop (call $fimport$6 (local.get $3) (local.get $4) (f64.const inf) ) ) (drop (call $55 (i32.const 1804) ) ) (br_if $label$11 (i32.eq (local.tee $4 (call $23 (local.get $3) ) ) (local.tee $7 (i32.rem_s (i32.add (local.tee $6 (call $23 (local.get $5) ) ) (i32.const 1) ) (i32.const 128) ) ) ) ) ) ) (i32.store (i32.add (i32.load offset=4 (local.get $2) ) (i32.shl (local.get $6) (i32.const 2) ) ) (local.get $1) ) (block $label$12 (br_if $label$12 (i32.ne (local.get $4) (local.get $6) ) ) (br_if $label$12 (call $fimport$10 (local.get $0) (call $37) ) ) (call $34 (local.get $1) ) (drop (call $20 (i32.const 1804) ) ) (br $label$1) ) (drop (call $24 (local.get $5) (local.get $7) ) ) (drop (call $20 (i32.const 1804) ) ) (br $label$1) ) (call $fimport$8 (i32.const 1090) (i32.const 1025) (i32.const 458) (i32.const 1095) ) (unreachable) ) (call $34 (local.get $1) ) ) (i32.const 0) ) (func $39 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (block $label$1 (br_if $label$1 (local.tee $1 (call $32 (local.get $0) ) ) ) (i64.store offset=12 align=4 (local.tee $1 (call $60 (i32.const 20) ) ) (i64.const 0) ) (i64.store offset=4 align=4 (local.get $1) (i64.const 0) ) (i32.store (local.get $1) (local.get $0) ) (block $label$2 (block $label$3 (br_if $label$3 (local.tee $0 (i32.load offset=1840 (i32.const 0) ) ) ) (local.set $0 (i32.const 1840) ) (br $label$2) ) (loop $label$4 (br_if $label$4 (local.tee $0 (i32.load offset=16 (local.tee $2 (local.get $0) ) ) ) ) ) (local.set $0 (i32.add (local.get $2) (i32.const 16) ) ) ) (i32.store (local.get $0) (local.get $1) ) ) (local.get $1) ) (func $40 (param $0 i32) (drop (call $38 (call $37) (local.get $0) ) ) ) (func $41 (param $0 i32) (call $40 (local.get $0) ) (drop (call $35 (local.get $0) (f64.const inf) ) ) ) (func $42 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (global.set $global$0 (local.tee $3 (i32.sub (global.get $global$0) (i32.const 192) ) ) ) (memory.fill (local.get $3) (i32.const 0) (i32.const 192) ) (i32.store (i32.add (local.get $3) (i32.const 24) ) (local.get $2) ) (i32.store offset=176 (local.get $3) (i32.const 0) ) (i32.store offset=16 (local.get $3) (local.get $1) ) (i32.store (local.get $3) (local.get $0) ) (call $41 (local.get $3) ) (local.set $0 (i32.load offset=176 (local.get $3) ) ) (global.set $global$0 (i32.add (local.get $3) (i32.const 192) ) ) (local.get $0) ) (func $43 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (global.set $global$0 (local.tee $5 (i32.sub (global.get $global$0) (i32.const 192) ) ) ) (memory.fill (local.get $5) (i32.const 0) (i32.const 192) ) (i32.store (i32.add (local.get $5) (i32.const 40) ) (local.get $4) ) (i32.store (i32.add (local.get $5) (i32.const 32) ) (local.get $3) ) (i32.store (i32.add (local.get $5) (i32.const 24) ) (local.get $2) ) (i32.store offset=176 (local.get $5) (i32.const 0) ) (i32.store offset=16 (local.get $5) (local.get $1) ) (i32.store (local.get $5) (local.get $0) ) (call $41 (local.get $5) ) (local.set $0 (i32.load offset=176 (local.get $5) ) ) (global.set $global$0 (i32.add (local.get $5) (i32.const 192) ) ) (local.get $0) ) (func $44 (block $label$1 (br_if $label$1 (i32.eqz (call $9) ) ) (br_if $label$1 (i32.eqz (i32.load offset=1432 (i32.const 0) ) ) ) (call $31) ) ) (func $45 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result f64) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 f64) (global.set $global$0 (local.tee $4 (i32.sub (global.get $global$0) (i32.const 192) ) ) ) (block $label$1 (block $label$2 (br_if $label$2 (i32.eqz (local.get $3) ) ) (i32.store offset=184 (local.get $4) (i32.const 0) ) (i32.store offset=8 (local.get $4) (i32.const 0) ) (local.set $5 (local.get $4) ) (br $label$1) ) (local.set $5 (call $46) ) ) (i32.store offset=4 (local.get $5) (local.get $0) ) (i32.store (local.get $5) (i32.const -2126512128) ) (i32.store offset=188 (local.get $5) (i32.sub (i32.const 1) (local.get $3) ) ) (block $label$3 (br_if $label$3 (i32.ge_s (local.get $1) (i32.const 20) ) ) (i32.store offset=16 (local.get $5) (local.get $1) ) (local.set $0 (i32.const 0) ) (block $label$4 (br_if $label$4 (i32.le_s (local.get $1) (i32.const 0) ) ) (loop $label$5 (i64.store (i32.add (i32.add (local.get $5) (i32.shl (local.tee $6 (i32.add (local.get $0) (i32.const 1) ) ) (i32.const 3) ) ) (i32.const 16) ) (i64.load (i32.add (local.get $2) (i32.shl (local.get $0) (i32.const 3) ) ) ) ) (local.set $0 (local.get $6) ) (br_if $label$5 (i32.ne (local.get $6) (local.get $1) ) ) ) ) (block $label$6 (block $label$7 (br_if $label$7 (i32.eqz (local.get $3) ) ) (call $41 (local.get $4) ) (local.set $7 (f64.load offset=176 (local.get $4) ) ) (br $label$6) ) (call $40 (local.get $5) ) (local.set $7 (f64.const 0) ) ) (global.set $global$0 (i32.add (local.get $4) (i32.const 192) ) ) (return (local.get $7) ) ) (call $fimport$8 (i32.const 1143) (i32.const 1025) (i32.const 766) (i32.const 1184) ) (unreachable) ) (func $46 (result i32) (local $0 i32) (block $label$1 (br_if $label$1 (local.tee $0 (call $60 (i32.const 192) ) ) ) (call $fimport$8 (i32.const 1090) (i32.const 1025) (i32.const 173) (i32.const 1405) ) (unreachable) ) (i32.store offset=184 (local.get $0) (i32.const 0) ) (i64.store offset=4 align=4 (local.get $0) (i64.const 0) ) (local.get $0) ) (func $47 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) (local $6 i32) (local $7 i32) (global.set $global$0 (local.tee $6 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (block $label$1 (br_if $label$1 (i32.eqz (local.tee $7 (call $46) ) ) ) (i32.store offset=184 (local.get $7) (local.get $4) ) (i32.store offset=4 (local.get $7) (local.get $3) ) (i32.store (local.get $7) (local.get $2) ) (i32.store offset=12 (local.get $6) (local.get $5) ) (block $label$2 (br_if $label$2 (i32.eqz (local.tee $4 (i32.and (i32.shr_u (local.get $2) (i32.const 25) ) (i32.const 15) ) ) ) ) (local.set $2 (i32.and (local.get $2) (i32.const 33554431) ) ) (local.set $3 (i32.const 0) ) (loop $label$3 (block $label$4 (block $label$5 (block $label$6 (block $label$7 (block $label$8 (br_table $label$8 $label$7 $label$6 $label$5 $label$8 (i32.and (local.get $2) (i32.const 3) ) ) ) (i32.store offset=12 (local.get $6) (i32.add (local.tee $5 (i32.load offset=12 (local.get $6) ) ) (i32.const 4) ) ) (i32.store (i32.add (i32.add (local.get $7) (i32.shl (local.get $3) (i32.const 3) ) ) (i32.const 16) ) (i32.load (local.get $5) ) ) (br $label$4) ) (i32.store offset=12 (local.get $6) (i32.add (local.tee $5 (i32.and (i32.add (i32.load offset=12 (local.get $6) ) (i32.const 7) ) (i32.const -8) ) ) (i32.const 8) ) ) (i64.store (i32.add (i32.add (local.get $7) (i32.shl (local.get $3) (i32.const 3) ) ) (i32.const 16) ) (i64.load (local.get $5) ) ) (br $label$4) ) (i32.store offset=12 (local.get $6) (i32.add (local.tee $5 (i32.and (i32.add (i32.load offset=12 (local.get $6) ) (i32.const 7) ) (i32.const -8) ) ) (i32.const 8) ) ) (f32.store (i32.add (i32.add (local.get $7) (i32.shl (local.get $3) (i32.const 3) ) ) (i32.const 16) ) (f32.demote_f64 (f64.load (local.get $5) ) ) ) (br $label$4) ) (i32.store offset=12 (local.get $6) (i32.add (local.tee $5 (i32.and (i32.add (i32.load offset=12 (local.get $6) ) (i32.const 7) ) (i32.const -8) ) ) (i32.const 8) ) ) (f64.store (i32.add (i32.add (local.get $7) (i32.shl (local.get $3) (i32.const 3) ) ) (i32.const 16) ) (f64.load (local.get $5) ) ) ) (local.set $2 (i32.shr_u (local.get $2) (i32.const 2) ) ) (br_if $label$3 (i32.ne (local.tee $3 (i32.add (local.get $3) (i32.const 1) ) ) (local.get $4) ) ) ) ) (i32.store offset=188 (local.get $7) (i32.const 1) ) (block $label$9 (block $label$10 (br_if $label$10 (i32.eqz (local.get $0) ) ) (local.set $2 (i32.const 0) ) (i32.store8 offset=11 (local.get $6) (i32.const 0) ) (i32.store16 offset=9 align=1 (local.get $6) (i32.const 26985) ) (i32.store (local.get $6) (local.get $1) ) (i32.store offset=4 (local.get $6) (local.get $7) ) (drop (call $fimport$0 (i32.const 1703) (i32.add (local.get $6) (i32.const 9) ) (local.get $6) ) ) (br $label$9) ) (local.set $2 (call $38 (local.get $1) (local.get $7) ) ) ) (global.set $global$0 (i32.add (local.get $6) (i32.const 16) ) ) (return (local.get $2) ) ) (call $fimport$8 (i32.const 1225) (i32.const 1025) (i32.const 868) (i32.const 1227) ) (unreachable) ) (func $48 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.const 28) ) (block $label$1 (br_if $label$1 (i32.gt_u (local.get $0) (i32.const 2) ) ) (local.set $2 (call $7) ) (block $label$2 (br_if $label$2 (i32.eqz (local.get $1) ) ) (i32.store (local.get $1) (i32.load offset=56 (local.get $2) ) ) ) (i32.store offset=56 (local.get $2) (local.get $0) ) (local.set $2 (i32.const 0) ) ) (local.get $2) ) (func $49 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (local $6 f64) (local $7 i32) (local $8 f64) (global.set $global$0 (local.tee $5 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (block $label$1 (block $label$2 (block $label$3 (block $label$4 (br_if $label$4 (local.get $3) ) (local.set $6 (f64.const inf) ) (br $label$3) ) (local.set $7 (i32.const 28) ) (br_if $label$1 (i32.gt_u (i32.load offset=4 (local.get $3) ) (i32.const 999999999) ) ) (br_if $label$1 (call $fimport$3 (local.get $2) (i32.add (local.get $5) (i32.const 8) ) ) ) (i32.store offset=8 (local.get $5) (local.tee $7 (i32.sub (i32.load (local.get $3) ) (i32.load offset=8 (local.get $5) ) ) ) ) (i32.store offset=12 (local.get $5) (local.tee $3 (i32.sub (i32.load offset=4 (local.get $3) ) (i32.load offset=12 (local.get $5) ) ) ) ) (block $label$5 (br_if $label$5 (i32.gt_s (local.get $3) (i32.const -1) ) ) (i32.store offset=12 (local.get $5) (local.tee $3 (i32.add (local.get $3) (i32.const 1000000000) ) ) ) (i32.store offset=8 (local.get $5) (local.tee $7 (i32.add (local.get $7) (i32.const -1) ) ) ) ) (br_if $label$2 (i32.lt_s (local.get $7) (i32.const 0) ) ) (local.set $6 (f64.add (f64.div (f64.convert_i32_s (local.get $3) ) (f64.const 1e6) ) (f64.convert_i32_s (i32.mul (local.get $7) (i32.const 1000) ) ) ) ) ) (block $label$6 (block $label$7 (block $label$8 (br_if $label$8 (local.tee $3 (call $10) ) ) (br_if $label$8 (i32.ne (i32.load offset=56 (call $14) ) (i32.const 1) ) ) (br_if $label$7 (i32.ne (i32.load offset=60 (call $14) ) (i32.const 1) ) ) ) (local.set $8 (f64.add (local.get $6) (call $fimport$4) ) ) (loop $label$9 (block $label$10 (br_if $label$10 (i32.eqz (call $30 (call $14) ) ) ) (local.set $7 (i32.const 11) ) (br $label$1) ) (block $label$11 (br_if $label$11 (i32.eqz (local.get $3) ) ) (call $44) ) (br_if $label$2 (f64.le (local.tee $6 (f64.sub (local.get $8) (call $fimport$4) ) ) (f64.const 0) ) ) (br_if $label$9 (i32.eq (local.tee $7 (i32.sub (i32.const 0) (call $fimport$6 (local.get $0) (local.get $1) (select (select (f64.const 1) (local.tee $6 (f64.min (local.get $6) (f64.const 100) ) ) (f64.gt (local.get $6) (f64.const 1) ) ) (local.get $6) (local.get $3) ) ) ) ) (i32.const 73) ) ) (br $label$6) ) ) (local.set $7 (i32.sub (i32.const 0) (call $fimport$6 (local.get $0) (local.get $1) (local.get $6) ) ) ) ) (br_if $label$1 (i32.eq (local.get $7) (i32.const 11) ) ) (br_if $label$1 (i32.eq (local.get $7) (i32.const 27) ) ) (br_if $label$1 (i32.eq (local.get $7) (i32.const 73) ) ) (local.set $7 (i32.const 0) ) (br $label$1) ) (local.set $7 (i32.const 73) ) ) (global.set $global$0 (i32.add (local.get $5) (i32.const 16) ) ) (local.get $7) ) (func $50 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (global.set $global$0 (local.tee $5 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (drop (call $48 (i32.const 1) (i32.add (local.get $5) (i32.const 12) ) ) ) (call $fimport$5 (i32.const 1) (i32.const 4) ) (local.set $0 (call $49 (local.get $0) (local.get $1) (local.get $2) (local.get $3) (local.get $4) ) ) (call $fimport$5 (i32.const 4) (i32.const 1) ) (drop (call $48 (i32.load offset=12 (local.get $5) ) (i32.const 0) ) ) (global.set $global$0 (i32.add (local.get $5) (i32.const 16) ) ) (local.get $0) ) (func $51 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (block $label$1 (block $label$2 (br_if $label$2 (i32.and (local.tee $2 (i32.load (local.get $0) ) ) (i32.const 15) ) ) (local.set $3 (i32.const 0) ) (br_if $label$1 (i32.eqz (call $52 (i32.add (local.get $0) (i32.const 4) ) (i32.const 0) (i32.const 10) ) ) ) (local.set $2 (i32.load (local.get $0) ) ) ) (br_if $label$1 (i32.ne (local.tee $3 (call $13 (local.get $0) ) ) (i32.const 10) ) ) (local.set $4 (i32.and (i32.xor (local.get $2) (i32.const -1) ) (i32.const 128) ) ) (local.set $5 (i32.add (local.get $0) (i32.const 8) ) ) (local.set $2 (i32.add (local.get $0) (i32.const 4) ) ) (local.set $3 (i32.const 100) ) (block $label$3 (loop $label$4 (br_if $label$3 (i32.eqz (local.get $3) ) ) (br_if $label$3 (i32.eqz (i32.load (local.get $2) ) ) ) (local.set $3 (i32.add (local.get $3) (i32.const -1) ) ) (br_if $label$4 (i32.eqz (i32.load (local.get $5) ) ) ) ) ) (br_if $label$1 (i32.ne (local.tee $3 (call $13 (local.get $0) ) ) (i32.const 10) ) ) (loop $label$5 (block $label$6 (br_if $label$6 (i32.eqz (local.tee $3 (i32.load (local.get $2) ) ) ) ) (local.set $6 (i32.load (local.get $0) ) ) (block $label$7 (br_if $label$7 (i32.eqz (i32.and (local.get $3) (i32.const 1073741824) ) ) ) (br_if $label$6 (i32.and (local.get $6) (i32.const 4) ) ) ) (block $label$8 (br_if $label$8 (i32.ne (i32.and (local.get $6) (i32.const 3) ) (i32.const 2) ) ) (br_if $label$8 (i32.ne (i32.and (local.get $3) (i32.const 2147483647) ) (i32.load offset=40 (call $7) ) ) ) (return (i32.const 16) ) ) (call $53 (local.get $5) ) (drop (call $52 (local.get $2) (local.get $3) (local.tee $6 (i32.or (local.get $3) (i32.const -2147483648) ) ) ) ) (local.set $3 (call $50 (local.get $2) (local.get $6) (i32.const 0) (local.get $1) (local.get $4) ) ) (call $54 (local.get $5) ) (br_if $label$6 (i32.eqz (local.get $3) ) ) (br_if $label$1 (i32.ne (local.get $3) (i32.const 27) ) ) ) (br_if $label$5 (i32.eq (local.tee $3 (call $13 (local.get $0) ) ) (i32.const 10) ) ) ) ) (local.get $3) ) (func $52 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.atomic.rmw.cmpxchg (local.get $0) (local.get $1) (local.get $2) ) ) (func $53 (param $0 i32) (drop (i32.atomic.rmw.add (local.get $0) (i32.const 1) ) ) ) (func $54 (param $0 i32) (drop (i32.atomic.rmw.sub (local.get $0) (i32.const 1) ) ) ) (func $55 (param $0 i32) (result i32) (block $label$1 (br_if $label$1 (i32.and (i32.load8_u (local.get $0) ) (i32.const 15) ) ) (br_if $label$1 (call $56 (i32.add (local.get $0) (i32.const 4) ) ) ) (return (i32.const 0) ) ) (call $51 (local.get $0) (i32.const 0) ) ) (func $56 (param $0 i32) (result i32) (i32.atomic.rmw.cmpxchg (local.get $0) (i32.const 0) (i32.const 10) ) ) (func $57 (param $0 i32) (result i32) (i32.store (local.get $0) (i32.const 0) ) (i32.const 0) ) (func $58 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (i32.store (local.tee $3 (i32.add (local.tee $2 (i32.sub (global.get $global$0) (i32.const 32) ) ) (i32.const 24) ) ) (i32.const 0) ) (i64.store (local.tee $4 (i32.add (local.get $2) (i32.const 16) ) ) (i64.const 0) ) (i64.store (local.tee $5 (i32.add (local.get $2) (i32.const 8) ) ) (i64.const 0) ) (i64.store (local.get $2) (i64.const 0) ) (i64.store align=4 (local.get $0) (i64.load (local.get $2) ) ) (i32.store (i32.add (local.get $0) (i32.const 24) ) (i32.load (local.get $3) ) ) (i64.store align=4 (i32.add (local.get $0) (i32.const 16) ) (i64.load (local.get $4) ) ) (i64.store align=4 (i32.add (local.get $0) (i32.const 8) ) (i64.load (local.get $5) ) ) (block $label$1 (br_if $label$1 (i32.eqz (local.get $1) ) ) (i32.store (local.get $0) (i32.load (local.get $1) ) ) ) (i32.const 0) ) (func $59 (param $0 i32) (result i32) (i32.const 0) ) (func $60 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (block $label$1 (br_if $label$1 (i32.load offset=1844 (i32.const 0) ) ) (call $61) ) (block $label$2 (block $label$3 (br_if $label$3 (i32.eqz (i32.and (i32.load8_u offset=2312 (i32.const 0) ) (i32.const 2) ) ) ) (local.set $1 (i32.const 0) ) (br_if $label$2 (call $55 (i32.const 2316) ) ) ) (block $label$4 (block $label$5 (block $label$6 (block $label$7 (block $label$8 (block $label$9 (block $label$10 (block $label$11 (block $label$12 (block $label$13 (block $label$14 (block $label$15 (br_if $label$15 (i32.gt_u (local.get $0) (i32.const 244) ) ) (block $label$16 (br_if $label$16 (i32.eqz (i32.and (local.tee $0 (i32.shr_u (local.tee $2 (i32.load offset=1868 (i32.const 0) ) ) (local.tee $1 (i32.shr_u (local.tee $3 (select (i32.const 16) (i32.and (i32.add (local.get $0) (i32.const 11) ) (i32.const -8) ) (i32.lt_u (local.get $0) (i32.const 11) ) ) ) (i32.const 3) ) ) ) ) (i32.const 3) ) ) ) (local.set $1 (i32.add (local.tee $0 (i32.load (i32.add (local.tee $5 (i32.shl (local.tee $4 (i32.add (i32.and (i32.xor (local.get $0) (i32.const -1) ) (i32.const 1) ) (local.get $1) ) ) (i32.const 3) ) ) (i32.const 1916) ) ) ) (i32.const 8) ) ) (block $label$17 (block $label$18 (br_if $label$18 (i32.ne (local.tee $3 (i32.load offset=8 (local.get $0) ) ) (local.tee $5 (i32.add (local.get $5) (i32.const 1908) ) ) ) ) (i32.store offset=1868 (i32.const 0) (i32.and (local.get $2) (i32.rotl (i32.const -2) (local.get $4) ) ) ) (br $label$17) ) (i32.store offset=12 (local.get $3) (local.get $5) ) (i32.store offset=8 (local.get $5) (local.get $3) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.tee $4 (i32.shl (local.get $4) (i32.const 3) ) ) (i32.const 3) ) ) (i32.store offset=4 (local.tee $0 (i32.add (local.get $0) (local.get $4) ) ) (i32.or (i32.load offset=4 (local.get $0) ) (i32.const 1) ) ) (br $label$4) ) (br_if $label$14 (i32.le_u (local.get $3) (local.tee $6 (i32.load offset=1876 (i32.const 0) ) ) ) ) (block $label$19 (br_if $label$19 (i32.eqz (local.get $0) ) ) (block $label$20 (block $label$21 (br_if $label$21 (i32.ne (local.tee $1 (i32.load offset=8 (local.tee $0 (i32.load (i32.add (local.tee $5 (i32.shl (local.tee $4 (i32.add (i32.or (i32.or (i32.or (i32.or (local.tee $4 (i32.and (i32.shr_u (local.tee $1 (i32.shr_u (local.tee $0 (i32.add (i32.and (local.tee $0 (i32.and (i32.shl (local.get $0) (local.get $1) ) (i32.or (local.tee $0 (i32.shl (i32.const 2) (local.get $1) ) ) (i32.sub (i32.const 0) (local.get $0) ) ) ) ) (i32.sub (i32.const 0) (local.get $0) ) ) (i32.const -1) ) ) (local.tee $0 (i32.and (i32.shr_u (local.get $0) (i32.const 12) ) (i32.const 16) ) ) ) ) (i32.const 5) ) (i32.const 8) ) ) (local.get $0) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $1) (local.get $4) ) ) (i32.const 2) ) (i32.const 4) ) ) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $0) (local.get $1) ) ) (i32.const 1) ) (i32.const 2) ) ) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $0) (local.get $1) ) ) (i32.const 1) ) (i32.const 1) ) ) ) (i32.shr_u (local.get $0) (local.get $1) ) ) ) (i32.const 3) ) ) (i32.const 1916) ) ) ) ) ) (local.tee $5 (i32.add (local.get $5) (i32.const 1908) ) ) ) ) (i32.store offset=1868 (i32.const 0) (local.tee $2 (i32.and (local.get $2) (i32.rotl (i32.const -2) (local.get $4) ) ) ) ) (br $label$20) ) (i32.store offset=12 (local.get $1) (local.get $5) ) (i32.store offset=8 (local.get $5) (local.get $1) ) ) (local.set $1 (i32.add (local.get $0) (i32.const 8) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.get $3) (i32.const 3) ) ) (i32.store offset=4 (local.tee $5 (i32.add (local.get $0) (local.get $3) ) ) (i32.or (local.tee $4 (i32.sub (local.tee $7 (i32.shl (local.get $4) (i32.const 3) ) ) (local.get $3) ) ) (i32.const 1) ) ) (i32.store (i32.add (local.get $0) (local.get $7) ) (local.get $4) ) (block $label$22 (br_if $label$22 (i32.eqz (local.get $6) ) ) (local.set $3 (i32.add (i32.shl (local.tee $7 (i32.shr_u (local.get $6) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) (local.set $0 (i32.load offset=1888 (i32.const 0) ) ) (block $label$23 (block $label$24 (br_if $label$24 (i32.and (local.get $2) (local.tee $7 (i32.shl (i32.const 1) (local.get $7) ) ) ) ) (i32.store offset=1868 (i32.const 0) (i32.or (local.get $2) (local.get $7) ) ) (local.set $7 (local.get $3) ) (br $label$23) ) (local.set $7 (i32.load offset=8 (local.get $3) ) ) ) (i32.store offset=8 (local.get $3) (local.get $0) ) (i32.store offset=12 (local.get $7) (local.get $0) ) (i32.store offset=12 (local.get $0) (local.get $3) ) (i32.store offset=8 (local.get $0) (local.get $7) ) ) (i32.store offset=1888 (i32.const 0) (local.get $5) ) (i32.store offset=1876 (i32.const 0) (local.get $4) ) (br $label$4) ) (br_if $label$14 (i32.eqz (local.tee $8 (i32.load offset=1872 (i32.const 0) ) ) ) ) (local.set $1 (i32.sub (i32.and (i32.load offset=4 (local.tee $5 (i32.load (i32.add (i32.shl (i32.add (i32.or (i32.or (i32.or (i32.or (local.tee $4 (i32.and (i32.shr_u (local.tee $1 (i32.shr_u (local.tee $0 (i32.add (i32.and (local.get $8) (i32.sub (i32.const 0) (local.get $8) ) ) (i32.const -1) ) ) (local.tee $0 (i32.and (i32.shr_u (local.get $0) (i32.const 12) ) (i32.const 16) ) ) ) ) (i32.const 5) ) (i32.const 8) ) ) (local.get $0) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $1) (local.get $4) ) ) (i32.const 2) ) (i32.const 4) ) ) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $0) (local.get $1) ) ) (i32.const 1) ) (i32.const 2) ) ) ) (local.tee $1 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $0) (local.get $1) ) ) (i32.const 1) ) (i32.const 1) ) ) ) (i32.shr_u (local.get $0) (local.get $1) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) ) (i32.const -8) ) (local.get $3) ) ) (local.set $4 (local.get $5) ) (block $label$25 (loop $label$26 (block $label$27 (br_if $label$27 (local.tee $0 (i32.load offset=16 (local.get $4) ) ) ) (br_if $label$25 (i32.eqz (local.tee $0 (i32.load (i32.add (local.get $4) (i32.const 20) ) ) ) ) ) ) (local.set $1 (select (local.tee $4 (i32.sub (i32.and (i32.load offset=4 (local.get $0) ) (i32.const -8) ) (local.get $3) ) ) (local.get $1) (local.tee $4 (i32.lt_u (local.get $4) (local.get $1) ) ) ) ) (local.set $5 (select (local.get $0) (local.get $5) (local.get $4) ) ) (local.set $4 (local.get $0) ) (br $label$26) ) ) (br_if $label$13 (i32.le_u (local.tee $9 (i32.add (local.get $5) (local.get $3) ) ) (local.get $5) ) ) (local.set $10 (i32.load offset=24 (local.get $5) ) ) (block $label$28 (br_if $label$28 (i32.eq (local.tee $7 (i32.load offset=12 (local.get $5) ) ) (local.get $5) ) ) (drop (i32.gt_u (i32.load offset=1884 (i32.const 0) ) (local.tee $0 (i32.load offset=8 (local.get $5) ) ) ) ) (i32.store offset=12 (local.get $0) (local.get $7) ) (i32.store offset=8 (local.get $7) (local.get $0) ) (br $label$5) ) (block $label$29 (br_if $label$29 (local.tee $0 (i32.load (local.tee $4 (i32.add (local.get $5) (i32.const 20) ) ) ) ) ) (br_if $label$12 (i32.eqz (local.tee $0 (i32.load offset=16 (local.get $5) ) ) ) ) (local.set $4 (i32.add (local.get $5) (i32.const 16) ) ) ) (loop $label$30 (local.set $11 (local.get $4) ) (br_if $label$30 (local.tee $0 (i32.load (local.tee $4 (i32.add (local.tee $7 (local.get $0) ) (i32.const 20) ) ) ) ) ) (local.set $4 (i32.add (local.get $7) (i32.const 16) ) ) (br_if $label$30 (local.tee $0 (i32.load offset=16 (local.get $7) ) ) ) ) (i32.store (local.get $11) (i32.const 0) ) (br $label$5) ) (local.set $3 (i32.const -1) ) (br_if $label$14 (i32.gt_u (local.get $0) (i32.const -65) ) ) (local.set $3 (i32.and (local.tee $0 (i32.add (local.get $0) (i32.const 11) ) ) (i32.const -8) ) ) (br_if $label$14 (i32.eqz (local.tee $6 (i32.load offset=1872 (i32.const 0) ) ) ) ) (local.set $11 (i32.const 31) ) (block $label$31 (br_if $label$31 (i32.gt_u (local.get $3) (i32.const 16777215) ) ) (local.set $11 (i32.add (i32.or (i32.shl (local.tee $0 (i32.sub (i32.shr_u (i32.shl (local.tee $4 (i32.shl (local.tee $1 (i32.shl (local.tee $0 (i32.shr_u (local.get $0) (i32.const 8) ) ) (local.tee $0 (i32.and (i32.shr_u (i32.add (local.get $0) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (local.tee $1 (i32.and (i32.shr_u (i32.add (local.get $1) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) ) ) (local.tee $4 (i32.and (i32.shr_u (i32.add (local.get $4) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) (i32.const 15) ) (i32.or (i32.or (local.get $0) (local.get $1) ) (local.get $4) ) ) ) (i32.const 1) ) (i32.and (i32.shr_u (local.get $3) (i32.add (local.get $0) (i32.const 21) ) ) (i32.const 1) ) ) (i32.const 28) ) ) ) (local.set $1 (i32.sub (i32.const 0) (local.get $3) ) ) (block $label$32 (block $label$33 (block $label$34 (block $label$35 (br_if $label$35 (local.tee $4 (i32.load (i32.add (i32.shl (local.get $11) (i32.const 2) ) (i32.const 2172) ) ) ) ) (local.set $0 (i32.const 0) ) (local.set $7 (i32.const 0) ) (br $label$34) ) (local.set $0 (i32.const 0) ) (local.set $5 (i32.shl (local.get $3) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $11) (i32.const 1) ) ) (i32.eq (local.get $11) (i32.const 31) ) ) ) ) (local.set $7 (i32.const 0) ) (loop $label$36 (block $label$37 (br_if $label$37 (i32.ge_u (local.tee $2 (i32.sub (i32.and (i32.load offset=4 (local.get $4) ) (i32.const -8) ) (local.get $3) ) ) (local.get $1) ) ) (local.set $1 (local.get $2) ) (local.set $7 (local.get $4) ) (br_if $label$37 (local.get $2) ) (local.set $1 (i32.const 0) ) (local.set $7 (local.get $4) ) (local.set $0 (local.get $4) ) (br $label$33) ) (local.set $0 (select (select (local.get $0) (local.tee $2 (i32.load (i32.add (local.get $4) (i32.const 20) ) ) ) (i32.eq (local.get $2) (local.tee $4 (i32.load (i32.add (i32.add (local.get $4) (i32.and (i32.shr_u (local.get $5) (i32.const 29) ) (i32.const 4) ) ) (i32.const 16) ) ) ) ) ) (local.get $0) (local.get $2) ) ) (local.set $5 (i32.shl (local.get $5) (i32.const 1) ) ) (br_if $label$36 (local.get $4) ) ) ) (block $label$38 (br_if $label$38 (i32.or (local.get $0) (local.get $7) ) ) (br_if $label$14 (i32.eqz (local.tee $0 (i32.and (i32.or (local.tee $0 (i32.shl (i32.const 2) (local.get $11) ) ) (i32.sub (i32.const 0) (local.get $0) ) ) (local.get $6) ) ) ) ) (local.set $0 (i32.load (i32.add (i32.shl (i32.add (i32.or (i32.or (i32.or (i32.or (local.tee $5 (i32.and (i32.shr_u (local.tee $4 (i32.shr_u (local.tee $0 (i32.add (i32.and (local.get $0) (i32.sub (i32.const 0) (local.get $0) ) ) (i32.const -1) ) ) (local.tee $0 (i32.and (i32.shr_u (local.get $0) (i32.const 12) ) (i32.const 16) ) ) ) ) (i32.const 5) ) (i32.const 8) ) ) (local.get $0) ) (local.tee $4 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $4) (local.get $5) ) ) (i32.const 2) ) (i32.const 4) ) ) ) (local.tee $4 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $0) (local.get $4) ) ) (i32.const 1) ) (i32.const 2) ) ) ) (local.tee $4 (i32.and (i32.shr_u (local.tee $0 (i32.shr_u (local.get $0) (local.get $4) ) ) (i32.const 1) ) (i32.const 1) ) ) ) (i32.shr_u (local.get $0) (local.get $4) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) ) (br_if $label$32 (i32.eqz (local.get $0) ) ) ) (loop $label$39 (local.set $5 (i32.lt_u (local.tee $2 (i32.sub (i32.and (i32.load offset=4 (local.get $0) ) (i32.const -8) ) (local.get $3) ) ) (local.get $1) ) ) (block $label$40 (br_if $label$40 (local.tee $4 (i32.load offset=16 (local.get $0) ) ) ) (local.set $4 (i32.load (i32.add (local.get $0) (i32.const 20) ) ) ) ) (local.set $1 (select (local.get $2) (local.get $1) (local.get $5) ) ) (local.set $7 (select (local.get $0) (local.get $7) (local.get $5) ) ) (local.set $0 (local.get $4) ) (br_if $label$39 (local.get $4) ) ) ) (br_if $label$14 (i32.eqz (local.get $7) ) ) (br_if $label$14 (i32.ge_u (local.get $1) (i32.sub (i32.load offset=1876 (i32.const 0) ) (local.get $3) ) ) ) (br_if $label$13 (i32.le_u (local.tee $11 (i32.add (local.get $7) (local.get $3) ) ) (local.get $7) ) ) (local.set $8 (i32.load offset=24 (local.get $7) ) ) (block $label$41 (br_if $label$41 (i32.eq (local.tee $5 (i32.load offset=12 (local.get $7) ) ) (local.get $7) ) ) (drop (i32.gt_u (i32.load offset=1884 (i32.const 0) ) (local.tee $0 (i32.load offset=8 (local.get $7) ) ) ) ) (i32.store offset=12 (local.get $0) (local.get $5) ) (i32.store offset=8 (local.get $5) (local.get $0) ) (br $label$6) ) (block $label$42 (br_if $label$42 (local.tee $0 (i32.load (local.tee $4 (i32.add (local.get $7) (i32.const 20) ) ) ) ) ) (br_if $label$11 (i32.eqz (local.tee $0 (i32.load offset=16 (local.get $7) ) ) ) ) (local.set $4 (i32.add (local.get $7) (i32.const 16) ) ) ) (loop $label$43 (local.set $2 (local.get $4) ) (br_if $label$43 (local.tee $0 (i32.load (local.tee $4 (i32.add (local.tee $5 (local.get $0) ) (i32.const 20) ) ) ) ) ) (local.set $4 (i32.add (local.get $5) (i32.const 16) ) ) (br_if $label$43 (local.tee $0 (i32.load offset=16 (local.get $5) ) ) ) ) (i32.store (local.get $2) (i32.const 0) ) (br $label$6) ) (block $label$44 (br_if $label$44 (i32.lt_u (local.tee $0 (i32.load offset=1876 (i32.const 0) ) ) (local.get $3) ) ) (local.set $1 (i32.load offset=1888 (i32.const 0) ) ) (block $label$45 (block $label$46 (br_if $label$46 (i32.lt_u (local.tee $4 (i32.sub (local.get $0) (local.get $3) ) ) (i32.const 16) ) ) (i32.store offset=1876 (i32.const 0) (local.get $4) ) (i32.store offset=1888 (i32.const 0) (local.tee $5 (i32.add (local.get $1) (local.get $3) ) ) ) (i32.store offset=4 (local.get $5) (i32.or (local.get $4) (i32.const 1) ) ) (i32.store (i32.add (local.get $1) (local.get $0) ) (local.get $4) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $3) (i32.const 3) ) ) (br $label$45) ) (i32.store offset=1888 (i32.const 0) (i32.const 0) ) (i32.store offset=1876 (i32.const 0) (i32.const 0) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $0) (i32.const 3) ) ) (i32.store offset=4 (local.tee $0 (i32.add (local.get $1) (local.get $0) ) ) (i32.or (i32.load offset=4 (local.get $0) ) (i32.const 1) ) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 8) ) ) (br $label$4) ) (block $label$47 (br_if $label$47 (i32.le_u (local.tee $0 (i32.load offset=1880 (i32.const 0) ) ) (local.get $3) ) ) (i32.store offset=1880 (i32.const 0) (local.tee $1 (i32.sub (local.get $0) (local.get $3) ) ) ) (i32.store offset=1892 (i32.const 0) (local.tee $4 (i32.add (local.tee $0 (i32.load offset=1892 (i32.const 0) ) ) (local.get $3) ) ) ) (i32.store offset=4 (local.get $4) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.get $3) (i32.const 3) ) ) (local.set $1 (i32.add (local.get $0) (i32.const 8) ) ) (br $label$4) ) (local.set $1 (i32.const 0) ) (block $label$48 (br_if $label$48 (i32.load offset=1844 (i32.const 0) ) ) (call $61) ) (br_if $label$4 (i32.le_u (local.tee $7 (i32.and (i32.add (local.tee $0 (i32.load offset=1852 (i32.const 0) ) ) (local.tee $11 (i32.add (local.get $3) (i32.const 47) ) ) ) (i32.sub (i32.const 0) (local.get $0) ) ) ) (local.get $3) ) ) (local.set $1 (i32.const 0) ) (block $label$49 (br_if $label$49 (i32.eqz (local.tee $0 (i32.load offset=2308 (i32.const 0) ) ) ) ) (br_if $label$4 (i32.le_u (local.tee $5 (i32.add (local.tee $4 (i32.load offset=2300 (i32.const 0) ) ) (local.get $7) ) ) (local.get $4) ) ) (br_if $label$4 (i32.gt_u (local.get $5) (local.get $0) ) ) ) (local.set $2 (i32.const 0) ) (local.set $5 (i32.const -1) ) (br_if $label$7 (i32.and (i32.load8_u offset=2312 (i32.const 0) ) (i32.const 4) ) ) (local.set $6 (i32.const 0) ) (block $label$50 (block $label$51 (block $label$52 (br_if $label$52 (i32.eqz (local.tee $1 (i32.load offset=1892 (i32.const 0) ) ) ) ) (local.set $0 (i32.const 2344) ) (loop $label$53 (block $label$54 (br_if $label$54 (i32.gt_u (local.tee $4 (i32.load (local.get $0) ) ) (local.get $1) ) ) (br_if $label$51 (i32.gt_u (i32.add (local.get $4) (i32.load offset=4 (local.get $0) ) ) (local.get $1) ) ) ) (br_if $label$53 (local.tee $0 (i32.load offset=8 (local.get $0) ) ) ) ) ) (drop (call $55 (i32.const 2368) ) ) (br_if $label$9 (i32.eq (local.tee $5 (call $66 (i32.const 0) ) ) (i32.const -1) ) ) (local.set $2 (local.get $7) ) (block $label$55 (br_if $label$55 (i32.eqz (i32.and (local.tee $1 (i32.add (local.tee $0 (i32.load offset=1848 (i32.const 0) ) ) (i32.const -1) ) ) (local.get $5) ) ) ) (local.set $2 (i32.add (i32.sub (local.get $7) (local.get $5) ) (i32.and (i32.add (local.get $1) (local.get $5) ) (i32.sub (i32.const 0) (local.get $0) ) ) ) ) ) (block $label$56 (br_if $label$56 (i32.gt_u (local.get $2) (local.get $3) ) ) (local.set $6 (i32.const 0) ) (br $label$9) ) (block $label$57 (br_if $label$57 (i32.le_u (local.get $2) (i32.const 2147483646) ) ) (local.set $6 (i32.const 0) ) (br $label$9) ) (local.set $6 (i32.const 0) ) (block $label$58 (br_if $label$58 (i32.eqz (local.tee $0 (i32.load offset=2308 (i32.const 0) ) ) ) ) (br_if $label$9 (i32.le_u (local.tee $4 (i32.add (local.tee $1 (i32.load offset=2300 (i32.const 0) ) ) (local.get $2) ) ) (local.get $1) ) ) (br_if $label$9 (i32.gt_u (local.get $4) (local.get $0) ) ) ) (br_if $label$50 (i32.ne (local.tee $0 (call $66 (local.get $2) ) ) (local.get $5) ) ) (br $label$8) ) (drop (call $55 (i32.const 2368) ) ) (local.set $6 (i32.const 0) ) (br_if $label$9 (i32.gt_u (local.tee $2 (i32.and (i32.add (i32.sub (local.get $11) (i32.load offset=1880 (i32.const 0) ) ) (local.tee $1 (i32.load offset=1852 (i32.const 0) ) ) ) (i32.sub (i32.const 0) (local.get $1) ) ) ) (i32.const 2147483646) ) ) (br_if $label$10 (i32.eq (local.tee $5 (call $66 (local.get $2) ) ) (i32.add (i32.load (local.get $0) ) (i32.load offset=4 (local.get $0) ) ) ) ) (local.set $0 (local.get $5) ) ) (local.set $6 (i32.const 0) ) (block $label$59 (br_if $label$59 (i32.le_u (i32.add (local.get $3) (i32.const 48) ) (local.get $2) ) ) (br_if $label$59 (i32.eq (local.get $0) (i32.const -1) ) ) (block $label$60 (br_if $label$60 (i32.le_u (local.tee $1 (i32.and (i32.add (i32.sub (local.get $11) (local.get $2) ) (local.tee $1 (i32.load offset=1852 (i32.const 0) ) ) ) (i32.sub (i32.const 0) (local.get $1) ) ) ) (i32.const 2147483646) ) ) (local.set $5 (local.get $0) ) (br $label$8) ) (block $label$61 (br_if $label$61 (i32.eq (call $66 (local.get $1) ) (i32.const -1) ) ) (local.set $2 (i32.add (local.get $1) (local.get $2) ) ) (local.set $5 (local.get $0) ) (br $label$8) ) (drop (call $66 (i32.sub (i32.const 0) (local.get $2) ) ) ) (local.set $6 (i32.const 0) ) (br $label$9) ) (local.set $5 (local.get $0) ) (br_if $label$8 (i32.ne (local.get $0) (i32.const -1) ) ) (br $label$9) ) (unreachable) ) (local.set $7 (i32.const 0) ) (br $label$5) ) (local.set $5 (i32.const 0) ) (br $label$6) ) (local.set $6 (local.get $2) ) (br_if $label$8 (i32.ne (local.get $5) (i32.const -1) ) ) ) (i32.store offset=2312 (i32.const 0) (i32.or (i32.load offset=2312 (i32.const 0) ) (i32.const 4) ) ) (local.set $5 (i32.const -1) ) (local.set $2 (local.get $6) ) ) (drop (call $20 (i32.const 2368) ) ) ) (block $label$62 (block $label$63 (block $label$64 (br_if $label$64 (i32.gt_u (local.get $7) (i32.const 2147483646) ) ) (br_if $label$64 (i32.ne (local.get $5) (i32.const -1) ) ) (drop (call $55 (i32.const 2368) ) ) (local.set $5 (call $66 (local.get $7) ) ) (local.set $0 (call $66 (i32.const 0) ) ) (drop (call $20 (i32.const 2368) ) ) (br_if $label$62 (i32.ge_u (local.get $5) (local.get $0) ) ) (br_if $label$62 (i32.eq (local.get $5) (i32.const -1) ) ) (br_if $label$62 (i32.eq (local.get $0) (i32.const -1) ) ) (br_if $label$63 (i32.gt_u (local.tee $2 (i32.sub (local.get $0) (local.get $5) ) ) (i32.add (local.get $3) (i32.const 40) ) ) ) (br $label$62) ) (br_if $label$62 (i32.eq (local.get $5) (i32.const -1) ) ) ) (i32.store offset=2300 (i32.const 0) (local.tee $0 (i32.add (i32.load offset=2300 (i32.const 0) ) (local.get $2) ) ) ) (block $label$65 (br_if $label$65 (i32.le_u (local.get $0) (i32.load offset=2304 (i32.const 0) ) ) ) (i32.store offset=2304 (i32.const 0) (local.get $0) ) ) (block $label$66 (block $label$67 (block $label$68 (block $label$69 (br_if $label$69 (i32.eqz (local.tee $1 (i32.load offset=1892 (i32.const 0) ) ) ) ) (local.set $0 (i32.const 2344) ) (loop $label$70 (br_if $label$68 (i32.eq (local.get $5) (i32.add (local.tee $4 (i32.load (local.get $0) ) ) (local.tee $7 (i32.load offset=4 (local.get $0) ) ) ) ) ) (br_if $label$70 (local.tee $0 (i32.load offset=8 (local.get $0) ) ) ) (br $label$67) ) ) (block $label$71 (block $label$72 (br_if $label$72 (i32.eqz (local.tee $0 (i32.load offset=1884 (i32.const 0) ) ) ) ) (br_if $label$71 (i32.ge_u (local.get $5) (local.get $0) ) ) ) (i32.store offset=1884 (i32.const 0) (local.get $5) ) ) (local.set $0 (i32.const 0) ) (i32.store offset=2348 (i32.const 0) (local.get $2) ) (i32.store offset=2344 (i32.const 0) (local.get $5) ) (i32.store offset=1900 (i32.const 0) (i32.const -1) ) (i32.store offset=1904 (i32.const 0) (i32.load offset=1844 (i32.const 0) ) ) (i32.store offset=2356 (i32.const 0) (i32.const 0) ) (loop $label$73 (i32.store (i32.add (local.tee $1 (i32.shl (local.get $0) (i32.const 3) ) ) (i32.const 1916) ) (local.tee $4 (i32.add (local.get $1) (i32.const 1908) ) ) ) (i32.store (i32.add (local.get $1) (i32.const 1920) ) (local.get $4) ) (br_if $label$73 (i32.ne (local.tee $0 (i32.add (local.get $0) (i32.const 1) ) ) (i32.const 32) ) ) ) (i32.store offset=1880 (i32.const 0) (local.tee $4 (i32.sub (local.tee $0 (i32.add (local.get $2) (i32.const -40) ) ) (local.tee $1 (select (i32.and (i32.sub (i32.const -8) (local.get $5) ) (i32.const 7) ) (i32.const 0) (i32.and (i32.add (local.get $5) (i32.const 8) ) (i32.const 7) ) ) ) ) ) ) (i32.store offset=1892 (i32.const 0) (local.tee $1 (i32.add (local.get $5) (local.get $1) ) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $4) (i32.const 1) ) ) (i32.store offset=4 (i32.add (local.get $5) (local.get $0) ) (i32.const 40) ) (i32.store offset=1896 (i32.const 0) (i32.load offset=1860 (i32.const 0) ) ) (br $label$66) ) (br_if $label$67 (i32.le_u (local.get $5) (local.get $1) ) ) (br_if $label$67 (i32.gt_u (local.get $4) (local.get $1) ) ) (br_if $label$67 (i32.and (i32.load offset=12 (local.get $0) ) (i32.const 8) ) ) (i32.store offset=4 (local.get $0) (i32.add (local.get $7) (local.get $2) ) ) (i32.store offset=1892 (i32.const 0) (local.tee $4 (i32.add (local.get $1) (local.tee $0 (select (i32.and (i32.sub (i32.const -8) (local.get $1) ) (i32.const 7) ) (i32.const 0) (i32.and (i32.add (local.get $1) (i32.const 8) ) (i32.const 7) ) ) ) ) ) ) (i32.store offset=1880 (i32.const 0) (local.tee $0 (i32.sub (local.tee $5 (i32.add (i32.load offset=1880 (i32.const 0) ) (local.get $2) ) ) (local.get $0) ) ) ) (i32.store offset=4 (local.get $4) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store offset=4 (i32.add (local.get $1) (local.get $5) ) (i32.const 40) ) (i32.store offset=1896 (i32.const 0) (i32.load offset=1860 (i32.const 0) ) ) (br $label$66) ) (block $label$74 (br_if $label$74 (i32.ge_u (local.get $5) (local.tee $7 (i32.load offset=1884 (i32.const 0) ) ) ) ) (i32.store offset=1884 (i32.const 0) (local.get $5) ) (local.set $7 (local.get $5) ) ) (local.set $4 (i32.add (local.get $5) (local.get $2) ) ) (local.set $0 (i32.const 2344) ) (block $label$75 (block $label$76 (block $label$77 (block $label$78 (block $label$79 (block $label$80 (block $label$81 (loop $label$82 (br_if $label$81 (i32.eq (i32.load (local.get $0) ) (local.get $4) ) ) (br_if $label$82 (local.tee $0 (i32.load offset=8 (local.get $0) ) ) ) (br $label$80) ) ) (br_if $label$79 (i32.eqz (i32.and (i32.load8_u offset=12 (local.get $0) ) (i32.const 8) ) ) ) ) (local.set $0 (i32.const 2344) ) (loop $label$83 (block $label$84 (br_if $label$84 (i32.gt_u (local.tee $4 (i32.load (local.get $0) ) ) (local.get $1) ) ) (br_if $label$78 (i32.gt_u (local.tee $4 (i32.add (local.get $4) (i32.load offset=4 (local.get $0) ) ) ) (local.get $1) ) ) ) (local.set $0 (i32.load offset=8 (local.get $0) ) ) (br $label$83) ) ) (i32.store (local.get $0) (local.get $5) ) (i32.store offset=4 (local.get $0) (i32.add (i32.load offset=4 (local.get $0) ) (local.get $2) ) ) (i32.store offset=4 (local.tee $11 (i32.add (local.get $5) (select (i32.and (i32.sub (i32.const -8) (local.get $5) ) (i32.const 7) ) (i32.const 0) (i32.and (i32.add (local.get $5) (i32.const 8) ) (i32.const 7) ) ) ) ) (i32.or (local.get $3) (i32.const 3) ) ) (local.set $4 (i32.sub (i32.sub (local.tee $2 (i32.add (local.get $4) (select (i32.and (i32.sub (i32.const -8) (local.get $4) ) (i32.const 7) ) (i32.const 0) (i32.and (i32.add (local.get $4) (i32.const 8) ) (i32.const 7) ) ) ) ) (local.get $11) ) (local.get $3) ) ) (local.set $3 (i32.add (local.get $11) (local.get $3) ) ) (block $label$85 (br_if $label$85 (i32.ne (local.get $1) (local.get $2) ) ) (i32.store offset=1892 (i32.const 0) (local.get $3) ) (i32.store offset=1880 (i32.const 0) (local.tee $0 (i32.add (i32.load offset=1880 (i32.const 0) ) (local.get $4) ) ) ) (i32.store offset=4 (local.get $3) (i32.or (local.get $0) (i32.const 1) ) ) (br $label$76) ) (block $label$86 (br_if $label$86 (i32.ne (i32.load offset=1888 (i32.const 0) ) (local.get $2) ) ) (i32.store offset=1888 (i32.const 0) (local.get $3) ) (i32.store offset=1876 (i32.const 0) (local.tee $0 (i32.add (i32.load offset=1876 (i32.const 0) ) (local.get $4) ) ) ) (i32.store offset=4 (local.get $3) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store (i32.add (local.get $3) (local.get $0) ) (local.get $0) ) (br $label$76) ) (block $label$87 (br_if $label$87 (i32.ne (i32.and (local.tee $0 (i32.load offset=4 (local.get $2) ) ) (i32.const 3) ) (i32.const 1) ) ) (local.set $6 (i32.and (local.get $0) (i32.const -8) ) ) (block $label$88 (block $label$89 (br_if $label$89 (i32.gt_u (local.get $0) (i32.const 255) ) ) (drop (i32.eq (local.tee $1 (i32.load offset=8 (local.get $2) ) ) (local.tee $5 (i32.add (i32.shl (local.tee $7 (i32.shr_u (local.get $0) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) ) ) (block $label$90 (br_if $label$90 (i32.ne (local.tee $0 (i32.load offset=12 (local.get $2) ) ) (local.get $1) ) ) (i32.store offset=1868 (i32.const 0) (i32.and (i32.load offset=1868 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $7) ) ) ) (br $label$88) ) (drop (i32.eq (local.get $0) (local.get $5) ) ) (i32.store offset=12 (local.get $1) (local.get $0) ) (i32.store offset=8 (local.get $0) (local.get $1) ) (br $label$88) ) (local.set $8 (i32.load offset=24 (local.get $2) ) ) (block $label$91 (block $label$92 (br_if $label$92 (i32.eq (local.tee $5 (i32.load offset=12 (local.get $2) ) ) (local.get $2) ) ) (drop (i32.gt_u (local.get $7) (local.tee $0 (i32.load offset=8 (local.get $2) ) ) ) ) (i32.store offset=12 (local.get $0) (local.get $5) ) (i32.store offset=8 (local.get $5) (local.get $0) ) (br $label$91) ) (block $label$93 (br_if $label$93 (local.tee $1 (i32.load (local.tee $0 (i32.add (local.get $2) (i32.const 20) ) ) ) ) ) (br_if $label$93 (local.tee $1 (i32.load (local.tee $0 (i32.add (local.get $2) (i32.const 16) ) ) ) ) ) (local.set $5 (i32.const 0) ) (br $label$91) ) (loop $label$94 (local.set $7 (local.get $0) ) (br_if $label$94 (local.tee $1 (i32.load (local.tee $0 (i32.add (local.tee $5 (local.get $1) ) (i32.const 20) ) ) ) ) ) (local.set $0 (i32.add (local.get $5) (i32.const 16) ) ) (br_if $label$94 (local.tee $1 (i32.load offset=16 (local.get $5) ) ) ) ) (i32.store (local.get $7) (i32.const 0) ) ) (br_if $label$88 (i32.eqz (local.get $8) ) ) (block $label$95 (block $label$96 (br_if $label$96 (i32.ne (i32.load (local.tee $0 (i32.add (i32.shl (local.tee $1 (i32.load offset=28 (local.get $2) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) (local.get $2) ) ) (i32.store (local.get $0) (local.get $5) ) (br_if $label$95 (local.get $5) ) (i32.store offset=1872 (i32.const 0) (i32.and (i32.load offset=1872 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $1) ) ) ) (br $label$88) ) (i32.store (i32.add (local.get $8) (select (i32.const 16) (i32.const 20) (i32.eq (i32.load offset=16 (local.get $8) ) (local.get $2) ) ) ) (local.get $5) ) (br_if $label$88 (i32.eqz (local.get $5) ) ) ) (i32.store offset=24 (local.get $5) (local.get $8) ) (block $label$97 (br_if $label$97 (i32.eqz (local.tee $0 (i32.load offset=16 (local.get $2) ) ) ) ) (i32.store offset=16 (local.get $5) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $5) ) ) (br_if $label$88 (i32.eqz (local.tee $0 (i32.load offset=20 (local.get $2) ) ) ) ) (i32.store (i32.add (local.get $5) (i32.const 20) ) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $5) ) ) (local.set $4 (i32.add (local.get $6) (local.get $4) ) ) (local.set $2 (i32.add (local.get $2) (local.get $6) ) ) ) (i32.store offset=4 (local.get $2) (i32.and (i32.load offset=4 (local.get $2) ) (i32.const -2) ) ) (i32.store offset=4 (local.get $3) (i32.or (local.get $4) (i32.const 1) ) ) (i32.store (i32.add (local.get $3) (local.get $4) ) (local.get $4) ) (block $label$98 (br_if $label$98 (i32.gt_u (local.get $4) (i32.const 255) ) ) (local.set $0 (i32.add (i32.shl (local.tee $1 (i32.shr_u (local.get $4) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) (block $label$99 (block $label$100 (br_if $label$100 (i32.and (local.tee $4 (i32.load offset=1868 (i32.const 0) ) ) (local.tee $1 (i32.shl (i32.const 1) (local.get $1) ) ) ) ) (i32.store offset=1868 (i32.const 0) (i32.or (local.get $4) (local.get $1) ) ) (local.set $1 (local.get $0) ) (br $label$99) ) (local.set $1 (i32.load offset=8 (local.get $0) ) ) ) (i32.store offset=8 (local.get $0) (local.get $3) ) (i32.store offset=12 (local.get $1) (local.get $3) ) (i32.store offset=12 (local.get $3) (local.get $0) ) (i32.store offset=8 (local.get $3) (local.get $1) ) (br $label$76) ) (local.set $0 (i32.const 31) ) (block $label$101 (br_if $label$101 (i32.gt_u (local.get $4) (i32.const 16777215) ) ) (local.set $0 (i32.add (i32.or (i32.shl (local.tee $0 (i32.sub (i32.shr_u (i32.shl (local.tee $5 (i32.shl (local.tee $1 (i32.shl (local.tee $0 (i32.shr_u (local.get $4) (i32.const 8) ) ) (local.tee $0 (i32.and (i32.shr_u (i32.add (local.get $0) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (local.tee $1 (i32.and (i32.shr_u (i32.add (local.get $1) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) ) ) (local.tee $5 (i32.and (i32.shr_u (i32.add (local.get $5) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) (i32.const 15) ) (i32.or (i32.or (local.get $0) (local.get $1) ) (local.get $5) ) ) ) (i32.const 1) ) (i32.and (i32.shr_u (local.get $4) (i32.add (local.get $0) (i32.const 21) ) ) (i32.const 1) ) ) (i32.const 28) ) ) ) (i32.store offset=28 (local.get $3) (local.get $0) ) (i64.store offset=16 align=4 (local.get $3) (i64.const 0) ) (local.set $1 (i32.add (i32.shl (local.get $0) (i32.const 2) ) (i32.const 2172) ) ) (block $label$102 (block $label$103 (br_if $label$103 (i32.and (local.tee $5 (i32.load offset=1872 (i32.const 0) ) ) (local.tee $7 (i32.shl (i32.const 1) (local.get $0) ) ) ) ) (i32.store offset=1872 (i32.const 0) (i32.or (local.get $5) (local.get $7) ) ) (i32.store (local.get $1) (local.get $3) ) (i32.store offset=24 (local.get $3) (local.get $1) ) (br $label$102) ) (local.set $0 (i32.shl (local.get $4) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $0) (i32.const 1) ) ) (i32.eq (local.get $0) (i32.const 31) ) ) ) ) (local.set $5 (i32.load (local.get $1) ) ) (loop $label$104 (br_if $label$77 (i32.eq (i32.and (i32.load offset=4 (local.tee $1 (local.get $5) ) ) (i32.const -8) ) (local.get $4) ) ) (local.set $5 (i32.shr_u (local.get $0) (i32.const 29) ) ) (local.set $0 (i32.shl (local.get $0) (i32.const 1) ) ) (br_if $label$104 (local.tee $5 (i32.load (local.tee $7 (i32.add (i32.add (local.get $1) (i32.and (local.get $5) (i32.const 4) ) ) (i32.const 16) ) ) ) ) ) ) (i32.store (local.get $7) (local.get $3) ) (i32.store offset=24 (local.get $3) (local.get $1) ) ) (i32.store offset=12 (local.get $3) (local.get $3) ) (i32.store offset=8 (local.get $3) (local.get $3) ) (br $label$76) ) (i32.store offset=1880 (i32.const 0) (local.tee $11 (i32.sub (local.tee $0 (i32.add (local.get $2) (i32.const -40) ) ) (local.tee $7 (select (i32.and (i32.sub (i32.const -8) (local.get $5) ) (i32.const 7) ) (i32.const 0) (i32.and (i32.add (local.get $5) (i32.const 8) ) (i32.const 7) ) ) ) ) ) ) (i32.store offset=1892 (i32.const 0) (local.tee $7 (i32.add (local.get $5) (local.get $7) ) ) ) (i32.store offset=4 (local.get $7) (i32.or (local.get $11) (i32.const 1) ) ) (i32.store offset=4 (i32.add (local.get $5) (local.get $0) ) (i32.const 40) ) (i32.store offset=1896 (i32.const 0) (i32.load offset=1860 (i32.const 0) ) ) (i32.store offset=4 (local.tee $7 (select (local.get $1) (local.tee $0 (i32.add (i32.add (local.get $4) (select (i32.and (i32.sub (i32.const 39) (local.get $4) ) (i32.const 7) ) (i32.const 0) (i32.and (i32.add (local.get $4) (i32.const -39) ) (i32.const 7) ) ) ) (i32.const -47) ) ) (i32.lt_u (local.get $0) (i32.add (local.get $1) (i32.const 16) ) ) ) ) (i32.const 27) ) (i64.store align=4 (i32.add (local.get $7) (i32.const 16) ) (i64.load offset=2352 align=4 (i32.const 0) ) ) (i64.store offset=8 align=4 (local.get $7) (i64.load offset=2344 align=4 (i32.const 0) ) ) (i32.store offset=2352 (i32.const 0) (i32.add (local.get $7) (i32.const 8) ) ) (i32.store offset=2348 (i32.const 0) (local.get $2) ) (i32.store offset=2344 (i32.const 0) (local.get $5) ) (i32.store offset=2356 (i32.const 0) (i32.const 0) ) (local.set $0 (i32.add (local.get $7) (i32.const 24) ) ) (loop $label$105 (i32.store offset=4 (local.get $0) (i32.const 7) ) (local.set $5 (i32.add (local.get $0) (i32.const 8) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 4) ) ) (br_if $label$105 (i32.gt_u (local.get $4) (local.get $5) ) ) ) (br_if $label$66 (i32.eq (local.get $7) (local.get $1) ) ) (i32.store offset=4 (local.get $7) (i32.and (i32.load offset=4 (local.get $7) ) (i32.const -2) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.tee $2 (i32.sub (local.get $7) (local.get $1) ) ) (i32.const 1) ) ) (i32.store (local.get $7) (local.get $2) ) (block $label$106 (br_if $label$106 (i32.gt_u (local.get $2) (i32.const 255) ) ) (local.set $0 (i32.add (i32.shl (local.tee $4 (i32.shr_u (local.get $2) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) (block $label$107 (block $label$108 (br_if $label$108 (i32.and (local.tee $5 (i32.load offset=1868 (i32.const 0) ) ) (local.tee $4 (i32.shl (i32.const 1) (local.get $4) ) ) ) ) (i32.store offset=1868 (i32.const 0) (i32.or (local.get $5) (local.get $4) ) ) (local.set $4 (local.get $0) ) (br $label$107) ) (local.set $4 (i32.load offset=8 (local.get $0) ) ) ) (i32.store offset=8 (local.get $0) (local.get $1) ) (i32.store offset=12 (local.get $4) (local.get $1) ) (i32.store offset=12 (local.get $1) (local.get $0) ) (i32.store offset=8 (local.get $1) (local.get $4) ) (br $label$66) ) (local.set $0 (i32.const 31) ) (block $label$109 (br_if $label$109 (i32.gt_u (local.get $2) (i32.const 16777215) ) ) (local.set $0 (i32.add (i32.or (i32.shl (local.tee $0 (i32.sub (i32.shr_u (i32.shl (local.tee $5 (i32.shl (local.tee $4 (i32.shl (local.tee $0 (i32.shr_u (local.get $2) (i32.const 8) ) ) (local.tee $0 (i32.and (i32.shr_u (i32.add (local.get $0) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (local.tee $4 (i32.and (i32.shr_u (i32.add (local.get $4) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) ) ) (local.tee $5 (i32.and (i32.shr_u (i32.add (local.get $5) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) (i32.const 15) ) (i32.or (i32.or (local.get $0) (local.get $4) ) (local.get $5) ) ) ) (i32.const 1) ) (i32.and (i32.shr_u (local.get $2) (i32.add (local.get $0) (i32.const 21) ) ) (i32.const 1) ) ) (i32.const 28) ) ) ) (i64.store offset=16 align=4 (local.get $1) (i64.const 0) ) (i32.store (i32.add (local.get $1) (i32.const 28) ) (local.get $0) ) (local.set $4 (i32.add (i32.shl (local.get $0) (i32.const 2) ) (i32.const 2172) ) ) (block $label$110 (block $label$111 (br_if $label$111 (i32.and (local.tee $5 (i32.load offset=1872 (i32.const 0) ) ) (local.tee $7 (i32.shl (i32.const 1) (local.get $0) ) ) ) ) (i32.store offset=1872 (i32.const 0) (i32.or (local.get $5) (local.get $7) ) ) (i32.store (local.get $4) (local.get $1) ) (i32.store (i32.add (local.get $1) (i32.const 24) ) (local.get $4) ) (br $label$110) ) (local.set $0 (i32.shl (local.get $2) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $0) (i32.const 1) ) ) (i32.eq (local.get $0) (i32.const 31) ) ) ) ) (local.set $5 (i32.load (local.get $4) ) ) (loop $label$112 (br_if $label$75 (i32.eq (i32.and (i32.load offset=4 (local.tee $4 (local.get $5) ) ) (i32.const -8) ) (local.get $2) ) ) (local.set $5 (i32.shr_u (local.get $0) (i32.const 29) ) ) (local.set $0 (i32.shl (local.get $0) (i32.const 1) ) ) (br_if $label$112 (local.tee $5 (i32.load (local.tee $7 (i32.add (i32.add (local.get $4) (i32.and (local.get $5) (i32.const 4) ) ) (i32.const 16) ) ) ) ) ) ) (i32.store (local.get $7) (local.get $1) ) (i32.store (i32.add (local.get $1) (i32.const 24) ) (local.get $4) ) ) (i32.store offset=12 (local.get $1) (local.get $1) ) (i32.store offset=8 (local.get $1) (local.get $1) ) (br $label$66) ) (i32.store offset=12 (local.tee $0 (i32.load offset=8 (local.get $1) ) ) (local.get $3) ) (i32.store offset=8 (local.get $1) (local.get $3) ) (i32.store offset=24 (local.get $3) (i32.const 0) ) (i32.store offset=12 (local.get $3) (local.get $1) ) (i32.store offset=8 (local.get $3) (local.get $0) ) ) (local.set $1 (i32.add (local.get $11) (i32.const 8) ) ) (br $label$4) ) (i32.store offset=12 (local.tee $0 (i32.load offset=8 (local.get $4) ) ) (local.get $1) ) (i32.store offset=8 (local.get $4) (local.get $1) ) (i32.store (i32.add (local.get $1) (i32.const 24) ) (i32.const 0) ) (i32.store offset=12 (local.get $1) (local.get $4) ) (i32.store offset=8 (local.get $1) (local.get $0) ) ) (br_if $label$62 (i32.le_u (local.tee $0 (i32.load offset=1880 (i32.const 0) ) ) (local.get $3) ) ) (i32.store offset=1880 (i32.const 0) (local.tee $1 (i32.sub (local.get $0) (local.get $3) ) ) ) (i32.store offset=1892 (i32.const 0) (local.tee $4 (i32.add (local.tee $0 (i32.load offset=1892 (i32.const 0) ) ) (local.get $3) ) ) ) (i32.store offset=4 (local.get $4) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.get $3) (i32.const 3) ) ) (local.set $1 (i32.add (local.get $0) (i32.const 8) ) ) (br $label$4) ) (i32.store (call $25) (i32.const 48) ) (local.set $1 (i32.const 0) ) (br $label$4) ) (block $label$113 (br_if $label$113 (i32.eqz (local.get $8) ) ) (block $label$114 (block $label$115 (br_if $label$115 (i32.ne (local.get $7) (i32.load (local.tee $0 (i32.add (i32.shl (local.tee $4 (i32.load offset=28 (local.get $7) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) ) ) (i32.store (local.get $0) (local.get $5) ) (br_if $label$114 (local.get $5) ) (i32.store offset=1872 (i32.const 0) (local.tee $6 (i32.and (local.get $6) (i32.rotl (i32.const -2) (local.get $4) ) ) ) ) (br $label$113) ) (i32.store (i32.add (local.get $8) (select (i32.const 16) (i32.const 20) (i32.eq (i32.load offset=16 (local.get $8) ) (local.get $7) ) ) ) (local.get $5) ) (br_if $label$113 (i32.eqz (local.get $5) ) ) ) (i32.store offset=24 (local.get $5) (local.get $8) ) (block $label$116 (br_if $label$116 (i32.eqz (local.tee $0 (i32.load offset=16 (local.get $7) ) ) ) ) (i32.store offset=16 (local.get $5) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $5) ) ) (br_if $label$113 (i32.eqz (local.tee $0 (i32.load (i32.add (local.get $7) (i32.const 20) ) ) ) ) ) (i32.store (i32.add (local.get $5) (i32.const 20) ) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $5) ) ) (block $label$117 (block $label$118 (br_if $label$118 (i32.gt_u (local.get $1) (i32.const 15) ) ) (i32.store offset=4 (local.get $7) (i32.or (local.tee $0 (i32.add (local.get $1) (local.get $3) ) ) (i32.const 3) ) ) (i32.store offset=4 (local.tee $0 (i32.add (local.get $7) (local.get $0) ) ) (i32.or (i32.load offset=4 (local.get $0) ) (i32.const 1) ) ) (br $label$117) ) (i32.store offset=4 (local.get $7) (i32.or (local.get $3) (i32.const 3) ) ) (i32.store offset=4 (local.get $11) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store (i32.add (local.get $11) (local.get $1) ) (local.get $1) ) (block $label$119 (br_if $label$119 (i32.gt_u (local.get $1) (i32.const 255) ) ) (local.set $0 (i32.add (i32.shl (local.tee $1 (i32.shr_u (local.get $1) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) (block $label$120 (block $label$121 (br_if $label$121 (i32.and (local.tee $4 (i32.load offset=1868 (i32.const 0) ) ) (local.tee $1 (i32.shl (i32.const 1) (local.get $1) ) ) ) ) (i32.store offset=1868 (i32.const 0) (i32.or (local.get $4) (local.get $1) ) ) (local.set $1 (local.get $0) ) (br $label$120) ) (local.set $1 (i32.load offset=8 (local.get $0) ) ) ) (i32.store offset=8 (local.get $0) (local.get $11) ) (i32.store offset=12 (local.get $1) (local.get $11) ) (i32.store offset=12 (local.get $11) (local.get $0) ) (i32.store offset=8 (local.get $11) (local.get $1) ) (br $label$117) ) (local.set $0 (i32.const 31) ) (block $label$122 (br_if $label$122 (i32.gt_u (local.get $1) (i32.const 16777215) ) ) (local.set $0 (i32.add (i32.or (i32.shl (local.tee $0 (i32.sub (i32.shr_u (i32.shl (local.tee $3 (i32.shl (local.tee $4 (i32.shl (local.tee $0 (i32.shr_u (local.get $1) (i32.const 8) ) ) (local.tee $0 (i32.and (i32.shr_u (i32.add (local.get $0) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (local.tee $4 (i32.and (i32.shr_u (i32.add (local.get $4) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) ) ) (local.tee $3 (i32.and (i32.shr_u (i32.add (local.get $3) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) (i32.const 15) ) (i32.or (i32.or (local.get $0) (local.get $4) ) (local.get $3) ) ) ) (i32.const 1) ) (i32.and (i32.shr_u (local.get $1) (i32.add (local.get $0) (i32.const 21) ) ) (i32.const 1) ) ) (i32.const 28) ) ) ) (i32.store offset=28 (local.get $11) (local.get $0) ) (i64.store offset=16 align=4 (local.get $11) (i64.const 0) ) (local.set $4 (i32.add (i32.shl (local.get $0) (i32.const 2) ) (i32.const 2172) ) ) (block $label$123 (block $label$124 (block $label$125 (br_if $label$125 (i32.and (local.get $6) (local.tee $3 (i32.shl (i32.const 1) (local.get $0) ) ) ) ) (i32.store offset=1872 (i32.const 0) (i32.or (local.get $6) (local.get $3) ) ) (i32.store (local.get $4) (local.get $11) ) (i32.store offset=24 (local.get $11) (local.get $4) ) (br $label$124) ) (local.set $0 (i32.shl (local.get $1) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $0) (i32.const 1) ) ) (i32.eq (local.get $0) (i32.const 31) ) ) ) ) (local.set $3 (i32.load (local.get $4) ) ) (loop $label$126 (br_if $label$123 (i32.eq (i32.and (i32.load offset=4 (local.tee $4 (local.get $3) ) ) (i32.const -8) ) (local.get $1) ) ) (local.set $3 (i32.shr_u (local.get $0) (i32.const 29) ) ) (local.set $0 (i32.shl (local.get $0) (i32.const 1) ) ) (br_if $label$126 (local.tee $3 (i32.load (local.tee $5 (i32.add (i32.add (local.get $4) (i32.and (local.get $3) (i32.const 4) ) ) (i32.const 16) ) ) ) ) ) ) (i32.store (local.get $5) (local.get $11) ) (i32.store offset=24 (local.get $11) (local.get $4) ) ) (i32.store offset=12 (local.get $11) (local.get $11) ) (i32.store offset=8 (local.get $11) (local.get $11) ) (br $label$117) ) (i32.store offset=12 (local.tee $0 (i32.load offset=8 (local.get $4) ) ) (local.get $11) ) (i32.store offset=8 (local.get $4) (local.get $11) ) (i32.store offset=24 (local.get $11) (i32.const 0) ) (i32.store offset=12 (local.get $11) (local.get $4) ) (i32.store offset=8 (local.get $11) (local.get $0) ) ) (local.set $1 (i32.add (local.get $7) (i32.const 8) ) ) (br $label$4) ) (block $label$127 (br_if $label$127 (i32.eqz (local.get $10) ) ) (block $label$128 (block $label$129 (br_if $label$129 (i32.ne (local.get $5) (i32.load (local.tee $0 (i32.add (i32.shl (local.tee $4 (i32.load offset=28 (local.get $5) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) ) ) (i32.store (local.get $0) (local.get $7) ) (br_if $label$128 (local.get $7) ) (i32.store offset=1872 (i32.const 0) (i32.and (local.get $8) (i32.rotl (i32.const -2) (local.get $4) ) ) ) (br $label$127) ) (i32.store (i32.add (local.get $10) (select (i32.const 16) (i32.const 20) (i32.eq (i32.load offset=16 (local.get $10) ) (local.get $5) ) ) ) (local.get $7) ) (br_if $label$127 (i32.eqz (local.get $7) ) ) ) (i32.store offset=24 (local.get $7) (local.get $10) ) (block $label$130 (br_if $label$130 (i32.eqz (local.tee $0 (i32.load offset=16 (local.get $5) ) ) ) ) (i32.store offset=16 (local.get $7) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $7) ) ) (br_if $label$127 (i32.eqz (local.tee $0 (i32.load (i32.add (local.get $5) (i32.const 20) ) ) ) ) ) (i32.store (i32.add (local.get $7) (i32.const 20) ) (local.get $0) ) (i32.store offset=24 (local.get $0) (local.get $7) ) ) (block $label$131 (block $label$132 (br_if $label$132 (i32.gt_u (local.get $1) (i32.const 15) ) ) (i32.store offset=4 (local.get $5) (i32.or (local.tee $0 (i32.add (local.get $1) (local.get $3) ) ) (i32.const 3) ) ) (i32.store offset=4 (local.tee $0 (i32.add (local.get $5) (local.get $0) ) ) (i32.or (i32.load offset=4 (local.get $0) ) (i32.const 1) ) ) (br $label$131) ) (i32.store offset=4 (local.get $5) (i32.or (local.get $3) (i32.const 3) ) ) (i32.store offset=4 (local.get $9) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store (i32.add (local.get $9) (local.get $1) ) (local.get $1) ) (block $label$133 (br_if $label$133 (i32.eqz (local.get $6) ) ) (local.set $4 (i32.add (i32.shl (local.tee $3 (i32.shr_u (local.get $6) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) (local.set $0 (i32.load offset=1888 (i32.const 0) ) ) (block $label$134 (block $label$135 (br_if $label$135 (i32.and (local.tee $3 (i32.shl (i32.const 1) (local.get $3) ) ) (local.get $2) ) ) (i32.store offset=1868 (i32.const 0) (i32.or (local.get $3) (local.get $2) ) ) (local.set $3 (local.get $4) ) (br $label$134) ) (local.set $3 (i32.load offset=8 (local.get $4) ) ) ) (i32.store offset=8 (local.get $4) (local.get $0) ) (i32.store offset=12 (local.get $3) (local.get $0) ) (i32.store offset=12 (local.get $0) (local.get $4) ) (i32.store offset=8 (local.get $0) (local.get $3) ) ) (i32.store offset=1888 (i32.const 0) (local.get $9) ) (i32.store offset=1876 (i32.const 0) (local.get $1) ) ) (local.set $1 (i32.add (local.get $5) (i32.const 8) ) ) ) (br_if $label$2 (i32.eqz (i32.and (i32.load8_u offset=2312 (i32.const 0) ) (i32.const 2) ) ) ) (drop (call $20 (i32.const 2316) ) ) ) (local.get $1) ) (func $61 (local $0 i32) (global.set $global$0 (local.tee $0 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (drop (call $55 (i32.const 2368) ) ) (block $label$1 (br_if $label$1 (i32.load offset=1844 (i32.const 0) ) ) (i32.store offset=1864 (i32.const 0) (i32.const 2) ) (i64.store offset=1856 align=4 (i32.const 0) (i64.const -1) ) (i64.store offset=1848 align=4 (i32.const 0) (i64.const 17592186048512) ) (i32.store offset=2312 (i32.const 0) (i32.const 2) ) (block $label$2 (br_if $label$2 (call $57 (i32.add (local.get $0) (i32.const 8) ) ) ) (br_if $label$2 (call $58 (i32.const 2316) (i32.add (local.get $0) (i32.const 8) ) ) ) (drop (call $59 (i32.add (local.get $0) (i32.const 8) ) ) ) ) (i32.store offset=1844 (i32.const 0) (i32.xor (i32.and (i32.add (local.get $0) (i32.const 4) ) (i32.const -16) ) (i32.const 1431655768) ) ) ) (drop (call $20 (i32.const 2368) ) ) (global.set $global$0 (i32.add (local.get $0) (i32.const 16) ) ) ) (func $62 (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (block $label$1 (br_if $label$1 (i32.eqz (local.get $0) ) ) (block $label$2 (br_if $label$2 (i32.eqz (i32.and (i32.load8_u offset=2312 (i32.const 0) ) (i32.const 2) ) ) ) (br_if $label$1 (call $55 (i32.const 2316) ) ) ) (local.set $3 (i32.add (local.tee $1 (i32.add (local.get $0) (i32.const -8) ) ) (local.tee $0 (i32.and (local.tee $2 (i32.load (i32.add (local.get $0) (i32.const -4) ) ) ) (i32.const -8) ) ) ) ) (block $label$3 (block $label$4 (br_if $label$4 (i32.and (local.get $2) (i32.const 1) ) ) (br_if $label$3 (i32.eqz (i32.and (local.get $2) (i32.const 3) ) ) ) (br_if $label$3 (i32.lt_u (local.tee $1 (i32.sub (local.get $1) (local.tee $2 (i32.load (local.get $1) ) ) ) ) (local.tee $4 (i32.load offset=1884 (i32.const 0) ) ) ) ) (local.set $0 (i32.add (local.get $2) (local.get $0) ) ) (block $label$5 (br_if $label$5 (i32.eq (i32.load offset=1888 (i32.const 0) ) (local.get $1) ) ) (block $label$6 (br_if $label$6 (i32.gt_u (local.get $2) (i32.const 255) ) ) (drop (i32.eq (local.tee $4 (i32.load offset=8 (local.get $1) ) ) (local.tee $6 (i32.add (i32.shl (local.tee $5 (i32.shr_u (local.get $2) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) ) ) (block $label$7 (br_if $label$7 (i32.ne (local.tee $2 (i32.load offset=12 (local.get $1) ) ) (local.get $4) ) ) (i32.store offset=1868 (i32.const 0) (i32.and (i32.load offset=1868 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $5) ) ) ) (br $label$4) ) (drop (i32.eq (local.get $2) (local.get $6) ) ) (i32.store offset=12 (local.get $4) (local.get $2) ) (i32.store offset=8 (local.get $2) (local.get $4) ) (br $label$4) ) (local.set $7 (i32.load offset=24 (local.get $1) ) ) (block $label$8 (block $label$9 (br_if $label$9 (i32.eq (local.tee $6 (i32.load offset=12 (local.get $1) ) ) (local.get $1) ) ) (drop (i32.gt_u (local.get $4) (local.tee $2 (i32.load offset=8 (local.get $1) ) ) ) ) (i32.store offset=12 (local.get $2) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $2) ) (br $label$8) ) (block $label$10 (br_if $label$10 (local.tee $4 (i32.load (local.tee $2 (i32.add (local.get $1) (i32.const 20) ) ) ) ) ) (br_if $label$10 (local.tee $4 (i32.load (local.tee $2 (i32.add (local.get $1) (i32.const 16) ) ) ) ) ) (local.set $6 (i32.const 0) ) (br $label$8) ) (loop $label$11 (local.set $5 (local.get $2) ) (br_if $label$11 (local.tee $4 (i32.load (local.tee $2 (i32.add (local.tee $6 (local.get $4) ) (i32.const 20) ) ) ) ) ) (local.set $2 (i32.add (local.get $6) (i32.const 16) ) ) (br_if $label$11 (local.tee $4 (i32.load offset=16 (local.get $6) ) ) ) ) (i32.store (local.get $5) (i32.const 0) ) ) (br_if $label$4 (i32.eqz (local.get $7) ) ) (block $label$12 (block $label$13 (br_if $label$13 (i32.ne (i32.load (local.tee $2 (i32.add (i32.shl (local.tee $4 (i32.load offset=28 (local.get $1) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) (local.get $1) ) ) (i32.store (local.get $2) (local.get $6) ) (br_if $label$12 (local.get $6) ) (i32.store offset=1872 (i32.const 0) (i32.and (i32.load offset=1872 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $4) ) ) ) (br $label$4) ) (i32.store (i32.add (local.get $7) (select (i32.const 16) (i32.const 20) (i32.eq (i32.load offset=16 (local.get $7) ) (local.get $1) ) ) ) (local.get $6) ) (br_if $label$4 (i32.eqz (local.get $6) ) ) ) (i32.store offset=24 (local.get $6) (local.get $7) ) (block $label$14 (br_if $label$14 (i32.eqz (local.tee $2 (i32.load offset=16 (local.get $1) ) ) ) ) (i32.store offset=16 (local.get $6) (local.get $2) ) (i32.store offset=24 (local.get $2) (local.get $6) ) ) (br_if $label$4 (i32.eqz (local.tee $2 (i32.load offset=20 (local.get $1) ) ) ) ) (i32.store (i32.add (local.get $6) (i32.const 20) ) (local.get $2) ) (i32.store offset=24 (local.get $2) (local.get $6) ) (br $label$4) ) (br_if $label$4 (i32.ne (i32.and (local.tee $2 (i32.load offset=4 (local.get $3) ) ) (i32.const 3) ) (i32.const 3) ) ) (i32.store offset=1876 (i32.const 0) (local.get $0) ) (i32.store offset=4 (local.get $3) (i32.and (local.get $2) (i32.const -2) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store (i32.add (local.get $1) (local.get $0) ) (local.get $0) ) (br $label$3) ) (br_if $label$3 (i32.le_u (local.get $3) (local.get $1) ) ) (br_if $label$3 (i32.eqz (i32.and (local.tee $2 (i32.load offset=4 (local.get $3) ) ) (i32.const 1) ) ) ) (block $label$15 (block $label$16 (br_if $label$16 (i32.and (local.get $2) (i32.const 2) ) ) (block $label$17 (br_if $label$17 (i32.ne (i32.load offset=1892 (i32.const 0) ) (local.get $3) ) ) (i32.store offset=1892 (i32.const 0) (local.get $1) ) (i32.store offset=1880 (i32.const 0) (local.tee $0 (i32.add (i32.load offset=1880 (i32.const 0) ) (local.get $0) ) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $0) (i32.const 1) ) ) (br_if $label$3 (i32.ne (local.get $1) (i32.load offset=1888 (i32.const 0) ) ) ) (i32.store offset=1876 (i32.const 0) (i32.const 0) ) (i32.store offset=1888 (i32.const 0) (i32.const 0) ) (br $label$3) ) (block $label$18 (br_if $label$18 (i32.ne (i32.load offset=1888 (i32.const 0) ) (local.get $3) ) ) (i32.store offset=1888 (i32.const 0) (local.get $1) ) (i32.store offset=1876 (i32.const 0) (local.tee $0 (i32.add (i32.load offset=1876 (i32.const 0) ) (local.get $0) ) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store (i32.add (local.get $1) (local.get $0) ) (local.get $0) ) (br $label$3) ) (local.set $0 (i32.add (i32.and (local.get $2) (i32.const -8) ) (local.get $0) ) ) (block $label$19 (block $label$20 (br_if $label$20 (i32.gt_u (local.get $2) (i32.const 255) ) ) (drop (i32.eq (local.tee $4 (i32.load offset=8 (local.get $3) ) ) (local.tee $6 (i32.add (i32.shl (local.tee $5 (i32.shr_u (local.get $2) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) ) ) (block $label$21 (br_if $label$21 (i32.ne (local.tee $2 (i32.load offset=12 (local.get $3) ) ) (local.get $4) ) ) (i32.store offset=1868 (i32.const 0) (i32.and (i32.load offset=1868 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $5) ) ) ) (br $label$19) ) (drop (i32.eq (local.get $2) (local.get $6) ) ) (i32.store offset=12 (local.get $4) (local.get $2) ) (i32.store offset=8 (local.get $2) (local.get $4) ) (br $label$19) ) (local.set $7 (i32.load offset=24 (local.get $3) ) ) (block $label$22 (block $label$23 (br_if $label$23 (i32.eq (local.tee $6 (i32.load offset=12 (local.get $3) ) ) (local.get $3) ) ) (drop (i32.gt_u (i32.load offset=1884 (i32.const 0) ) (local.tee $2 (i32.load offset=8 (local.get $3) ) ) ) ) (i32.store offset=12 (local.get $2) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $2) ) (br $label$22) ) (block $label$24 (br_if $label$24 (local.tee $2 (i32.load (local.tee $4 (i32.add (local.get $3) (i32.const 20) ) ) ) ) ) (br_if $label$24 (local.tee $2 (i32.load (local.tee $4 (i32.add (local.get $3) (i32.const 16) ) ) ) ) ) (local.set $6 (i32.const 0) ) (br $label$22) ) (loop $label$25 (local.set $5 (local.get $4) ) (br_if $label$25 (local.tee $2 (i32.load (local.tee $4 (i32.add (local.tee $6 (local.get $2) ) (i32.const 20) ) ) ) ) ) (local.set $4 (i32.add (local.get $6) (i32.const 16) ) ) (br_if $label$25 (local.tee $2 (i32.load offset=16 (local.get $6) ) ) ) ) (i32.store (local.get $5) (i32.const 0) ) ) (br_if $label$19 (i32.eqz (local.get $7) ) ) (block $label$26 (block $label$27 (br_if $label$27 (i32.ne (i32.load (local.tee $2 (i32.add (i32.shl (local.tee $4 (i32.load offset=28 (local.get $3) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) (local.get $3) ) ) (i32.store (local.get $2) (local.get $6) ) (br_if $label$26 (local.get $6) ) (i32.store offset=1872 (i32.const 0) (i32.and (i32.load offset=1872 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $4) ) ) ) (br $label$19) ) (i32.store (i32.add (local.get $7) (select (i32.const 16) (i32.const 20) (i32.eq (i32.load offset=16 (local.get $7) ) (local.get $3) ) ) ) (local.get $6) ) (br_if $label$19 (i32.eqz (local.get $6) ) ) ) (i32.store offset=24 (local.get $6) (local.get $7) ) (block $label$28 (br_if $label$28 (i32.eqz (local.tee $2 (i32.load offset=16 (local.get $3) ) ) ) ) (i32.store offset=16 (local.get $6) (local.get $2) ) (i32.store offset=24 (local.get $2) (local.get $6) ) ) (br_if $label$19 (i32.eqz (local.tee $2 (i32.load offset=20 (local.get $3) ) ) ) ) (i32.store (i32.add (local.get $6) (i32.const 20) ) (local.get $2) ) (i32.store offset=24 (local.get $2) (local.get $6) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store (i32.add (local.get $1) (local.get $0) ) (local.get $0) ) (br_if $label$15 (i32.ne (local.get $1) (i32.load offset=1888 (i32.const 0) ) ) ) (i32.store offset=1876 (i32.const 0) (local.get $0) ) (br $label$3) ) (i32.store offset=4 (local.get $3) (i32.and (local.get $2) (i32.const -2) ) ) (i32.store offset=4 (local.get $1) (i32.or (local.get $0) (i32.const 1) ) ) (i32.store (i32.add (local.get $1) (local.get $0) ) (local.get $0) ) ) (block $label$29 (br_if $label$29 (i32.gt_u (local.get $0) (i32.const 255) ) ) (local.set $0 (i32.add (i32.shl (local.tee $2 (i32.shr_u (local.get $0) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) (block $label$30 (block $label$31 (br_if $label$31 (i32.and (local.tee $4 (i32.load offset=1868 (i32.const 0) ) ) (local.tee $2 (i32.shl (i32.const 1) (local.get $2) ) ) ) ) (i32.store offset=1868 (i32.const 0) (i32.or (local.get $4) (local.get $2) ) ) (local.set $2 (local.get $0) ) (br $label$30) ) (local.set $2 (i32.load offset=8 (local.get $0) ) ) ) (i32.store offset=8 (local.get $0) (local.get $1) ) (i32.store offset=12 (local.get $2) (local.get $1) ) (i32.store offset=12 (local.get $1) (local.get $0) ) (i32.store offset=8 (local.get $1) (local.get $2) ) (br $label$3) ) (local.set $2 (i32.const 31) ) (block $label$32 (br_if $label$32 (i32.gt_u (local.get $0) (i32.const 16777215) ) ) (local.set $2 (i32.add (i32.or (i32.shl (local.tee $2 (i32.sub (i32.shr_u (i32.shl (local.tee $6 (i32.shl (local.tee $4 (i32.shl (local.tee $2 (i32.shr_u (local.get $0) (i32.const 8) ) ) (local.tee $2 (i32.and (i32.shr_u (i32.add (local.get $2) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (local.tee $4 (i32.and (i32.shr_u (i32.add (local.get $4) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) ) ) (local.tee $6 (i32.and (i32.shr_u (i32.add (local.get $6) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) (i32.const 15) ) (i32.or (i32.or (local.get $2) (local.get $4) ) (local.get $6) ) ) ) (i32.const 1) ) (i32.and (i32.shr_u (local.get $0) (i32.add (local.get $2) (i32.const 21) ) ) (i32.const 1) ) ) (i32.const 28) ) ) ) (i64.store offset=16 align=4 (local.get $1) (i64.const 0) ) (i32.store (i32.add (local.get $1) (i32.const 28) ) (local.get $2) ) (local.set $4 (i32.add (i32.shl (local.get $2) (i32.const 2) ) (i32.const 2172) ) ) (block $label$33 (block $label$34 (block $label$35 (block $label$36 (br_if $label$36 (i32.and (local.tee $6 (i32.load offset=1872 (i32.const 0) ) ) (local.tee $3 (i32.shl (i32.const 1) (local.get $2) ) ) ) ) (i32.store offset=1872 (i32.const 0) (i32.or (local.get $6) (local.get $3) ) ) (i32.store (local.get $4) (local.get $1) ) (i32.store (i32.add (local.get $1) (i32.const 24) ) (local.get $4) ) (br $label$35) ) (local.set $2 (i32.shl (local.get $0) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $2) (i32.const 1) ) ) (i32.eq (local.get $2) (i32.const 31) ) ) ) ) (local.set $6 (i32.load (local.get $4) ) ) (loop $label$37 (br_if $label$34 (i32.eq (i32.and (i32.load offset=4 (local.tee $4 (local.get $6) ) ) (i32.const -8) ) (local.get $0) ) ) (local.set $6 (i32.shr_u (local.get $2) (i32.const 29) ) ) (local.set $2 (i32.shl (local.get $2) (i32.const 1) ) ) (br_if $label$37 (local.tee $6 (i32.load (local.tee $3 (i32.add (i32.add (local.get $4) (i32.and (local.get $6) (i32.const 4) ) ) (i32.const 16) ) ) ) ) ) ) (i32.store (local.get $3) (local.get $1) ) (i32.store (i32.add (local.get $1) (i32.const 24) ) (local.get $4) ) ) (i32.store offset=12 (local.get $1) (local.get $1) ) (i32.store offset=8 (local.get $1) (local.get $1) ) (br $label$33) ) (i32.store offset=12 (local.tee $0 (i32.load offset=8 (local.get $4) ) ) (local.get $1) ) (i32.store offset=8 (local.get $4) (local.get $1) ) (i32.store (i32.add (local.get $1) (i32.const 24) ) (i32.const 0) ) (i32.store offset=12 (local.get $1) (local.get $4) ) (i32.store offset=8 (local.get $1) (local.get $0) ) ) (i32.store offset=1900 (i32.const 0) (select (local.tee $1 (i32.add (i32.load offset=1900 (i32.const 0) ) (i32.const -1) ) ) (i32.const -1) (local.get $1) ) ) ) (br_if $label$1 (i32.eqz (i32.and (i32.load8_u offset=2312 (i32.const 0) ) (i32.const 2) ) ) ) (drop (call $20 (i32.const 2316) ) ) ) ) (func $63 (param $0 i32) (param $1 i32) (result i32) (block $label$1 (br_if $label$1 (i32.gt_u (local.get $0) (i32.const 8) ) ) (return (call $60 (local.get $1) ) ) ) (call $64 (local.get $0) (local.get $1) ) ) (func $64 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local.set $2 (i32.const 16) ) (block $label$1 (block $label$2 (br_if $label$2 (i32.and (local.tee $3 (select (local.get $0) (i32.const 16) (i32.gt_u (local.get $0) (i32.const 16) ) ) ) (i32.add (local.get $3) (i32.const -1) ) ) ) (local.set $0 (local.get $3) ) (br $label$1) ) (loop $label$3 (local.set $2 (i32.shl (local.tee $0 (local.get $2) ) (i32.const 1) ) ) (br_if $label$3 (i32.lt_u (local.get $0) (local.get $3) ) ) ) ) (block $label$4 (br_if $label$4 (i32.gt_u (i32.sub (i32.const -64) (local.get $0) ) (local.get $1) ) ) (i32.store (call $25) (i32.const 48) ) (return (i32.const 0) ) ) (block $label$5 (br_if $label$5 (local.tee $3 (call $60 (i32.add (i32.add (local.tee $1 (select (i32.const 16) (i32.and (i32.add (local.get $1) (i32.const 11) ) (i32.const -8) ) (i32.lt_u (local.get $1) (i32.const 11) ) ) ) (local.get $0) ) (i32.const 12) ) ) ) ) (return (i32.const 0) ) ) (local.set $2 (i32.const 0) ) (block $label$6 (block $label$7 (br_if $label$7 (i32.eqz (i32.and (i32.load8_u offset=2312 (i32.const 0) ) (i32.const 2) ) ) ) (br_if $label$6 (call $55 (i32.const 2316) ) ) ) (local.set $2 (i32.add (local.get $3) (i32.const -8) ) ) (block $label$8 (br_if $label$8 (i32.eqz (i32.and (i32.add (local.get $0) (i32.const -1) ) (local.get $3) ) ) ) (local.set $6 (i32.sub (i32.and (local.tee $5 (i32.load (local.tee $4 (i32.add (local.get $3) (i32.const -4) ) ) ) ) (i32.const -8) ) (local.tee $3 (i32.sub (local.tee $0 (select (local.tee $3 (i32.add (i32.and (i32.add (i32.add (local.get $3) (local.get $0) ) (i32.const -1) ) (i32.sub (i32.const 0) (local.get $0) ) ) (i32.const -8) ) ) (i32.add (local.get $3) (local.get $0) ) (i32.gt_u (i32.sub (local.get $3) (local.get $2) ) (i32.const 15) ) ) ) (local.get $2) ) ) ) ) (block $label$9 (block $label$10 (br_if $label$10 (i32.and (local.get $5) (i32.const 3) ) ) (local.set $2 (i32.load (local.get $2) ) ) (i32.store offset=4 (local.get $0) (local.get $6) ) (i32.store (local.get $0) (i32.add (local.get $2) (local.get $3) ) ) (br $label$9) ) (i32.store offset=4 (local.get $0) (i32.or (i32.or (local.get $6) (i32.and (i32.load offset=4 (local.get $0) ) (i32.const 1) ) ) (i32.const 2) ) ) (i32.store offset=4 (local.tee $6 (i32.add (local.get $0) (local.get $6) ) ) (i32.or (i32.load offset=4 (local.get $6) ) (i32.const 1) ) ) (i32.store (local.get $4) (i32.or (i32.or (local.get $3) (i32.and (i32.load (local.get $4) ) (i32.const 1) ) ) (i32.const 2) ) ) (i32.store offset=4 (local.tee $6 (i32.add (local.get $2) (local.get $3) ) ) (i32.or (i32.load offset=4 (local.get $6) ) (i32.const 1) ) ) (call $65 (local.get $2) (local.get $3) ) ) (local.set $2 (local.get $0) ) ) (block $label$11 (br_if $label$11 (i32.eqz (i32.and (local.tee $0 (i32.load offset=4 (local.get $2) ) ) (i32.const 3) ) ) ) (br_if $label$11 (i32.le_u (local.tee $3 (i32.and (local.get $0) (i32.const -8) ) ) (i32.add (local.get $1) (i32.const 16) ) ) ) (i32.store offset=4 (local.get $2) (i32.or (i32.or (local.get $1) (i32.and (local.get $0) (i32.const 1) ) ) (i32.const 2) ) ) (i32.store offset=4 (local.tee $0 (i32.add (local.get $2) (local.get $1) ) ) (i32.or (local.tee $1 (i32.sub (local.get $3) (local.get $1) ) ) (i32.const 3) ) ) (i32.store offset=4 (local.tee $3 (i32.add (local.get $2) (local.get $3) ) ) (i32.or (i32.load offset=4 (local.get $3) ) (i32.const 1) ) ) (call $65 (local.get $0) (local.get $1) ) ) (local.set $2 (i32.add (local.get $2) (i32.const 8) ) ) (br_if $label$6 (i32.eqz (i32.and (i32.load8_u offset=2312 (i32.const 0) ) (i32.const 2) ) ) ) (drop (call $20 (i32.const 2316) ) ) ) (local.get $2) ) (func $65 (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (block $label$1 (block $label$2 (br_if $label$2 (i32.and (local.tee $3 (i32.load offset=4 (local.get $0) ) ) (i32.const 1) ) ) (br_if $label$1 (i32.eqz (i32.and (local.get $3) (i32.const 3) ) ) ) (local.set $1 (i32.add (local.tee $3 (i32.load (local.get $0) ) ) (local.get $1) ) ) (block $label$3 (block $label$4 (br_if $label$4 (i32.eq (i32.load offset=1888 (i32.const 0) ) (local.tee $0 (i32.sub (local.get $0) (local.get $3) ) ) ) ) (block $label$5 (br_if $label$5 (i32.gt_u (local.get $3) (i32.const 255) ) ) (drop (i32.eq (local.tee $4 (i32.load offset=8 (local.get $0) ) ) (local.tee $6 (i32.add (i32.shl (local.tee $5 (i32.shr_u (local.get $3) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) ) ) (br_if $label$3 (i32.ne (local.tee $3 (i32.load offset=12 (local.get $0) ) ) (local.get $4) ) ) (i32.store offset=1868 (i32.const 0) (i32.and (i32.load offset=1868 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $5) ) ) ) (br $label$2) ) (local.set $7 (i32.load offset=24 (local.get $0) ) ) (block $label$6 (block $label$7 (br_if $label$7 (i32.eq (local.tee $6 (i32.load offset=12 (local.get $0) ) ) (local.get $0) ) ) (drop (i32.gt_u (i32.load offset=1884 (i32.const 0) ) (local.tee $3 (i32.load offset=8 (local.get $0) ) ) ) ) (i32.store offset=12 (local.get $3) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $3) ) (br $label$6) ) (block $label$8 (br_if $label$8 (local.tee $4 (i32.load (local.tee $3 (i32.add (local.get $0) (i32.const 20) ) ) ) ) ) (br_if $label$8 (local.tee $4 (i32.load (local.tee $3 (i32.add (local.get $0) (i32.const 16) ) ) ) ) ) (local.set $6 (i32.const 0) ) (br $label$6) ) (loop $label$9 (local.set $5 (local.get $3) ) (br_if $label$9 (local.tee $4 (i32.load (local.tee $3 (i32.add (local.tee $6 (local.get $4) ) (i32.const 20) ) ) ) ) ) (local.set $3 (i32.add (local.get $6) (i32.const 16) ) ) (br_if $label$9 (local.tee $4 (i32.load offset=16 (local.get $6) ) ) ) ) (i32.store (local.get $5) (i32.const 0) ) ) (br_if $label$2 (i32.eqz (local.get $7) ) ) (block $label$10 (block $label$11 (br_if $label$11 (i32.ne (i32.load (local.tee $3 (i32.add (i32.shl (local.tee $4 (i32.load offset=28 (local.get $0) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) (local.get $0) ) ) (i32.store (local.get $3) (local.get $6) ) (br_if $label$10 (local.get $6) ) (i32.store offset=1872 (i32.const 0) (i32.and (i32.load offset=1872 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $4) ) ) ) (br $label$2) ) (i32.store (i32.add (local.get $7) (select (i32.const 16) (i32.const 20) (i32.eq (i32.load offset=16 (local.get $7) ) (local.get $0) ) ) ) (local.get $6) ) (br_if $label$2 (i32.eqz (local.get $6) ) ) ) (i32.store offset=24 (local.get $6) (local.get $7) ) (block $label$12 (br_if $label$12 (i32.eqz (local.tee $3 (i32.load offset=16 (local.get $0) ) ) ) ) (i32.store offset=16 (local.get $6) (local.get $3) ) (i32.store offset=24 (local.get $3) (local.get $6) ) ) (br_if $label$2 (i32.eqz (local.tee $3 (i32.load offset=20 (local.get $0) ) ) ) ) (i32.store (i32.add (local.get $6) (i32.const 20) ) (local.get $3) ) (i32.store offset=24 (local.get $3) (local.get $6) ) (br $label$2) ) (br_if $label$2 (i32.ne (i32.and (local.tee $3 (i32.load offset=4 (local.get $2) ) ) (i32.const 3) ) (i32.const 3) ) ) (i32.store offset=1876 (i32.const 0) (local.get $1) ) (i32.store offset=4 (local.get $2) (i32.and (local.get $3) (i32.const -2) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store (local.get $2) (local.get $1) ) (return) ) (drop (i32.eq (local.get $3) (local.get $6) ) ) (i32.store offset=12 (local.get $4) (local.get $3) ) (i32.store offset=8 (local.get $3) (local.get $4) ) ) (block $label$13 (block $label$14 (br_if $label$14 (i32.and (local.tee $3 (i32.load offset=4 (local.get $2) ) ) (i32.const 2) ) ) (block $label$15 (br_if $label$15 (i32.ne (i32.load offset=1892 (i32.const 0) ) (local.get $2) ) ) (i32.store offset=1892 (i32.const 0) (local.get $0) ) (i32.store offset=1880 (i32.const 0) (local.tee $1 (i32.add (i32.load offset=1880 (i32.const 0) ) (local.get $1) ) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.get $1) (i32.const 1) ) ) (br_if $label$1 (i32.ne (local.get $0) (i32.load offset=1888 (i32.const 0) ) ) ) (i32.store offset=1876 (i32.const 0) (i32.const 0) ) (i32.store offset=1888 (i32.const 0) (i32.const 0) ) (return) ) (block $label$16 (br_if $label$16 (i32.ne (i32.load offset=1888 (i32.const 0) ) (local.get $2) ) ) (i32.store offset=1888 (i32.const 0) (local.get $0) ) (i32.store offset=1876 (i32.const 0) (local.tee $1 (i32.add (i32.load offset=1876 (i32.const 0) ) (local.get $1) ) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store (i32.add (local.get $0) (local.get $1) ) (local.get $1) ) (return) ) (local.set $1 (i32.add (i32.and (local.get $3) (i32.const -8) ) (local.get $1) ) ) (block $label$17 (block $label$18 (br_if $label$18 (i32.gt_u (local.get $3) (i32.const 255) ) ) (drop (i32.eq (local.tee $4 (i32.load offset=8 (local.get $2) ) ) (local.tee $6 (i32.add (i32.shl (local.tee $5 (i32.shr_u (local.get $3) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) ) ) (block $label$19 (br_if $label$19 (i32.ne (local.tee $3 (i32.load offset=12 (local.get $2) ) ) (local.get $4) ) ) (i32.store offset=1868 (i32.const 0) (i32.and (i32.load offset=1868 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $5) ) ) ) (br $label$17) ) (drop (i32.eq (local.get $3) (local.get $6) ) ) (i32.store offset=12 (local.get $4) (local.get $3) ) (i32.store offset=8 (local.get $3) (local.get $4) ) (br $label$17) ) (local.set $7 (i32.load offset=24 (local.get $2) ) ) (block $label$20 (block $label$21 (br_if $label$21 (i32.eq (local.tee $6 (i32.load offset=12 (local.get $2) ) ) (local.get $2) ) ) (drop (i32.gt_u (i32.load offset=1884 (i32.const 0) ) (local.tee $3 (i32.load offset=8 (local.get $2) ) ) ) ) (i32.store offset=12 (local.get $3) (local.get $6) ) (i32.store offset=8 (local.get $6) (local.get $3) ) (br $label$20) ) (block $label$22 (br_if $label$22 (local.tee $3 (i32.load (local.tee $4 (i32.add (local.get $2) (i32.const 20) ) ) ) ) ) (br_if $label$22 (local.tee $3 (i32.load (local.tee $4 (i32.add (local.get $2) (i32.const 16) ) ) ) ) ) (local.set $6 (i32.const 0) ) (br $label$20) ) (loop $label$23 (local.set $5 (local.get $4) ) (br_if $label$23 (local.tee $3 (i32.load (local.tee $4 (i32.add (local.tee $6 (local.get $3) ) (i32.const 20) ) ) ) ) ) (local.set $4 (i32.add (local.get $6) (i32.const 16) ) ) (br_if $label$23 (local.tee $3 (i32.load offset=16 (local.get $6) ) ) ) ) (i32.store (local.get $5) (i32.const 0) ) ) (br_if $label$17 (i32.eqz (local.get $7) ) ) (block $label$24 (block $label$25 (br_if $label$25 (i32.ne (i32.load (local.tee $3 (i32.add (i32.shl (local.tee $4 (i32.load offset=28 (local.get $2) ) ) (i32.const 2) ) (i32.const 2172) ) ) ) (local.get $2) ) ) (i32.store (local.get $3) (local.get $6) ) (br_if $label$24 (local.get $6) ) (i32.store offset=1872 (i32.const 0) (i32.and (i32.load offset=1872 (i32.const 0) ) (i32.rotl (i32.const -2) (local.get $4) ) ) ) (br $label$17) ) (i32.store (i32.add (local.get $7) (select (i32.const 16) (i32.const 20) (i32.eq (i32.load offset=16 (local.get $7) ) (local.get $2) ) ) ) (local.get $6) ) (br_if $label$17 (i32.eqz (local.get $6) ) ) ) (i32.store offset=24 (local.get $6) (local.get $7) ) (block $label$26 (br_if $label$26 (i32.eqz (local.tee $3 (i32.load offset=16 (local.get $2) ) ) ) ) (i32.store offset=16 (local.get $6) (local.get $3) ) (i32.store offset=24 (local.get $3) (local.get $6) ) ) (br_if $label$17 (i32.eqz (local.tee $3 (i32.load offset=20 (local.get $2) ) ) ) ) (i32.store (i32.add (local.get $6) (i32.const 20) ) (local.get $3) ) (i32.store offset=24 (local.get $3) (local.get $6) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store (i32.add (local.get $0) (local.get $1) ) (local.get $1) ) (br_if $label$13 (i32.ne (local.get $0) (i32.load offset=1888 (i32.const 0) ) ) ) (i32.store offset=1876 (i32.const 0) (local.get $1) ) (return) ) (i32.store offset=4 (local.get $2) (i32.and (local.get $3) (i32.const -2) ) ) (i32.store offset=4 (local.get $0) (i32.or (local.get $1) (i32.const 1) ) ) (i32.store (i32.add (local.get $0) (local.get $1) ) (local.get $1) ) ) (block $label$27 (br_if $label$27 (i32.gt_u (local.get $1) (i32.const 255) ) ) (local.set $1 (i32.add (i32.shl (local.tee $3 (i32.shr_u (local.get $1) (i32.const 3) ) ) (i32.const 3) ) (i32.const 1908) ) ) (block $label$28 (block $label$29 (br_if $label$29 (i32.and (local.tee $4 (i32.load offset=1868 (i32.const 0) ) ) (local.tee $3 (i32.shl (i32.const 1) (local.get $3) ) ) ) ) (i32.store offset=1868 (i32.const 0) (i32.or (local.get $4) (local.get $3) ) ) (local.set $3 (local.get $1) ) (br $label$28) ) (local.set $3 (i32.load offset=8 (local.get $1) ) ) ) (i32.store offset=8 (local.get $1) (local.get $0) ) (i32.store offset=12 (local.get $3) (local.get $0) ) (i32.store offset=12 (local.get $0) (local.get $1) ) (i32.store offset=8 (local.get $0) (local.get $3) ) (return) ) (local.set $3 (i32.const 31) ) (block $label$30 (br_if $label$30 (i32.gt_u (local.get $1) (i32.const 16777215) ) ) (local.set $3 (i32.add (i32.or (i32.shl (local.tee $3 (i32.sub (i32.shr_u (i32.shl (local.tee $6 (i32.shl (local.tee $4 (i32.shl (local.tee $3 (i32.shr_u (local.get $1) (i32.const 8) ) ) (local.tee $3 (i32.and (i32.shr_u (i32.add (local.get $3) (i32.const 1048320) ) (i32.const 16) ) (i32.const 8) ) ) ) ) (local.tee $4 (i32.and (i32.shr_u (i32.add (local.get $4) (i32.const 520192) ) (i32.const 16) ) (i32.const 4) ) ) ) ) (local.tee $6 (i32.and (i32.shr_u (i32.add (local.get $6) (i32.const 245760) ) (i32.const 16) ) (i32.const 2) ) ) ) (i32.const 15) ) (i32.or (i32.or (local.get $3) (local.get $4) ) (local.get $6) ) ) ) (i32.const 1) ) (i32.and (i32.shr_u (local.get $1) (i32.add (local.get $3) (i32.const 21) ) ) (i32.const 1) ) ) (i32.const 28) ) ) ) (i64.store offset=16 align=4 (local.get $0) (i64.const 0) ) (i32.store (i32.add (local.get $0) (i32.const 28) ) (local.get $3) ) (local.set $4 (i32.add (i32.shl (local.get $3) (i32.const 2) ) (i32.const 2172) ) ) (block $label$31 (block $label$32 (block $label$33 (br_if $label$33 (i32.and (local.tee $6 (i32.load offset=1872 (i32.const 0) ) ) (local.tee $2 (i32.shl (i32.const 1) (local.get $3) ) ) ) ) (i32.store offset=1872 (i32.const 0) (i32.or (local.get $6) (local.get $2) ) ) (i32.store (local.get $4) (local.get $0) ) (i32.store (i32.add (local.get $0) (i32.const 24) ) (local.get $4) ) (br $label$32) ) (local.set $3 (i32.shl (local.get $1) (select (i32.const 0) (i32.sub (i32.const 25) (i32.shr_u (local.get $3) (i32.const 1) ) ) (i32.eq (local.get $3) (i32.const 31) ) ) ) ) (local.set $6 (i32.load (local.get $4) ) ) (loop $label$34 (br_if $label$31 (i32.eq (i32.and (i32.load offset=4 (local.tee $4 (local.get $6) ) ) (i32.const -8) ) (local.get $1) ) ) (local.set $6 (i32.shr_u (local.get $3) (i32.const 29) ) ) (local.set $3 (i32.shl (local.get $3) (i32.const 1) ) ) (br_if $label$34 (local.tee $6 (i32.load (local.tee $2 (i32.add (i32.add (local.get $4) (i32.and (local.get $6) (i32.const 4) ) ) (i32.const 16) ) ) ) ) ) ) (i32.store (local.get $2) (local.get $0) ) (i32.store (i32.add (local.get $0) (i32.const 24) ) (local.get $4) ) ) (i32.store offset=12 (local.get $0) (local.get $0) ) (i32.store offset=8 (local.get $0) (local.get $0) ) (return) ) (i32.store offset=12 (local.tee $1 (i32.load offset=8 (local.get $4) ) ) (local.get $0) ) (i32.store offset=8 (local.get $4) (local.get $0) ) (i32.store (i32.add (local.get $0) (i32.const 24) ) (i32.const 0) ) (i32.store offset=12 (local.get $0) (local.get $4) ) (i32.store offset=8 (local.get $0) (local.get $1) ) ) ) (func $66 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local.set $2 (i32.lt_s (local.tee $1 (i32.and (i32.add (local.get $0) (i32.const 3) ) (i32.const -4) ) ) (i32.const 1) ) ) (block $label$1 (loop $label$2 (local.set $0 (i32.add (local.tee $3 (i32.atomic.load offset=1436 (i32.const 0) ) ) (local.get $1) ) ) (block $label$3 (br_if $label$3 (local.get $2) ) (br_if $label$1 (i32.le_u (local.get $0) (local.get $3) ) ) ) (block $label$4 (br_if $label$4 (i32.le_u (local.get $0) (i32.shl (memory.size) (i32.const 16) ) ) ) (br_if $label$1 (i32.eqz (call $fimport$15 (local.get $0) ) ) ) ) (br_if $label$2 (i32.ne (i32.atomic.rmw.cmpxchg offset=1436 (i32.const 0) (local.get $3) (local.get $0) ) (local.get $3) ) ) ) (return (local.get $3) ) ) (i32.store (call $25) (i32.const 48) ) (i32.const -1) ) (func $67 (param $0 i32) ) (func $68 (param $0 i32) ) (func $69 (result i32) (call $67 (i32.const 2396) ) (i32.const 2404) ) (func $70 (call $68 (i32.const 2396) ) ) (func $71 (param $0 i32) (result i32) (block $label$1 (br_if $label$1 (local.get $0) ) (return (i32.const 0) ) ) (i32.store (call $25) (local.get $0) ) (i32.const -1) ) (func $72 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (global.set $global$0 (local.tee $3 (i32.sub (global.get $global$0) (i32.const 32) ) ) ) (i32.store offset=16 (local.get $3) (local.tee $4 (i32.load offset=28 (local.get $0) ) ) ) (local.set $5 (i32.load offset=20 (local.get $0) ) ) (i32.store offset=28 (local.get $3) (local.get $2) ) (i32.store offset=24 (local.get $3) (local.get $1) ) (i32.store offset=20 (local.get $3) (local.tee $1 (i32.sub (local.get $5) (local.get $4) ) ) ) (local.set $6 (i32.add (local.get $1) (local.get $2) ) ) (local.set $7 (i32.const 2) ) (local.set $1 (i32.add (local.get $3) (i32.const 16) ) ) (block $label$1 (block $label$2 (block $label$3 (block $label$4 (br_if $label$4 (call $71 (call $fimport$16 (i32.load offset=60 (local.get $0) ) (i32.add (local.get $3) (i32.const 16) ) (i32.const 2) (i32.add (local.get $3) (i32.const 12) ) ) ) ) (loop $label$5 (br_if $label$3 (i32.eq (local.get $6) (local.tee $4 (i32.load offset=12 (local.get $3) ) ) ) ) (br_if $label$2 (i32.le_s (local.get $4) (i32.const -1) ) ) (i32.store (local.tee $9 (i32.add (local.get $1) (i32.shl (local.tee $5 (i32.gt_u (local.get $4) (local.tee $8 (i32.load offset=4 (local.get $1) ) ) ) ) (i32.const 3) ) ) ) (i32.add (i32.load (local.get $9) ) (local.tee $8 (i32.sub (local.get $4) (select (local.get $8) (i32.const 0) (local.get $5) ) ) ) ) ) (i32.store (local.tee $9 (i32.add (local.get $1) (select (i32.const 12) (i32.const 4) (local.get $5) ) ) ) (i32.sub (i32.load (local.get $9) ) (local.get $8) ) ) (local.set $6 (i32.sub (local.get $6) (local.get $4) ) ) (br_if $label$5 (i32.eqz (call $71 (call $fimport$16 (i32.load offset=60 (local.get $0) ) (local.tee $1 (select (i32.add (local.get $1) (i32.const 8) ) (local.get $1) (local.get $5) ) ) (local.tee $7 (i32.sub (local.get $7) (local.get $5) ) ) (i32.add (local.get $3) (i32.const 12) ) ) ) ) ) ) ) (br_if $label$2 (i32.ne (local.get $6) (i32.const -1) ) ) ) (i32.store offset=28 (local.get $0) (local.tee $1 (i32.load offset=44 (local.get $0) ) ) ) (i32.store offset=20 (local.get $0) (local.get $1) ) (i32.store offset=16 (local.get $0) (i32.add (local.get $1) (i32.load offset=48 (local.get $0) ) ) ) (local.set $4 (local.get $2) ) (br $label$1) ) (local.set $4 (i32.const 0) ) (i32.store offset=28 (local.get $0) (i32.const 0) ) (i64.store offset=16 (local.get $0) (i64.const 0) ) (i32.store (local.get $0) (i32.or (i32.load (local.get $0) ) (i32.const 32) ) ) (br_if $label$1 (i32.eq (local.get $7) (i32.const 2) ) ) (local.set $4 (i32.sub (local.get $2) (i32.load offset=4 (local.get $1) ) ) ) ) (global.set $global$0 (i32.add (local.get $3) (i32.const 32) ) ) (local.get $4) ) (func $73 (param $0 i32) (result i32) (i32.const 0) ) (func $74 (param $0 i32) (param $1 i64) (param $2 i32) (result i64) (i64.const 0) ) (func $75 (param $0 i32) (result i32) (i32.const 1) ) (func $76 (param $0 i32) ) (func $77 (result i32) (global.get $global$0) ) (func $78 (param $0 i32) (global.set $global$0 (local.get $0) ) ) (func $79 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (global.set $global$0 (local.tee $1 (i32.and (i32.sub (global.get $global$0) (local.get $0) ) (i32.const -16) ) ) ) (local.get $1) ) (func $80 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (block $label$1 (block $label$2 (br_if $label$2 (i32.eqz (local.get $0) ) ) (block $label$3 (br_if $label$3 (i32.gt_s (i32.load offset=76 (local.get $0) ) (i32.const -1) ) ) (return (call $81 (local.get $0) ) ) ) (local.set $1 (call $75 (local.get $0) ) ) (local.set $2 (call $81 (local.get $0) ) ) (br_if $label$1 (i32.eqz (local.get $1) ) ) (call $76 (local.get $0) ) (return (local.get $2) ) ) (local.set $2 (i32.const 0) ) (block $label$4 (br_if $label$4 (i32.eqz (i32.load offset=1584 (i32.const 0) ) ) ) (local.set $2 (call $80 (i32.load offset=1584 (i32.const 0) ) ) ) ) (block $label$5 (br_if $label$5 (i32.eqz (local.tee $0 (i32.load (call $69) ) ) ) ) (loop $label$6 (local.set $1 (i32.const 0) ) (block $label$7 (br_if $label$7 (i32.lt_s (i32.load offset=76 (local.get $0) ) (i32.const 0) ) ) (local.set $1 (call $75 (local.get $0) ) ) ) (block $label$8 (br_if $label$8 (i32.le_u (i32.load offset=20 (local.get $0) ) (i32.load offset=28 (local.get $0) ) ) ) (local.set $2 (i32.or (call $81 (local.get $0) ) (local.get $2) ) ) ) (block $label$9 (br_if $label$9 (i32.eqz (local.get $1) ) ) (call $76 (local.get $0) ) ) (br_if $label$6 (local.tee $0 (i32.load offset=56 (local.get $0) ) ) ) ) ) (call $70) ) (local.get $2) ) (func $81 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (block $label$1 (br_if $label$1 (i32.le_u (i32.load offset=20 (local.get $0) ) (i32.load offset=28 (local.get $0) ) ) ) (drop (call_indirect (type $i32_i32_i32_=>_i32) (local.get $0) (i32.const 0) (i32.const 0) (i32.load offset=36 (local.get $0) ) ) ) (br_if $label$1 (i32.load offset=20 (local.get $0) ) ) (return (i32.const -1) ) ) (block $label$2 (br_if $label$2 (i32.ge_u (local.tee $1 (i32.load offset=4 (local.get $0) ) ) (local.tee $2 (i32.load offset=8 (local.get $0) ) ) ) ) (drop (call_indirect (type $i32_i64_i32_=>_i64) (local.get $0) (i64.extend_i32_s (i32.sub (local.get $1) (local.get $2) ) ) (i32.const 1) (i32.load offset=40 (local.get $0) ) ) ) ) (i32.store offset=28 (local.get $0) (i32.const 0) ) (i64.store offset=16 (local.get $0) (i64.const 0) ) (i64.store offset=4 align=4 (local.get $0) (i64.const 0) ) (i32.const 0) ) (func $82 (result i32) (i32.const 3448) ) (func $83 (call $fimport$17) (i32.store offset=172 (call $14) (i32.add (i32.const 3448) (i32.const 40) ) ) ) (func $84 (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (block $label$1 (br_if $label$1 (i32.eqz (i32.load offset=44 (local.tee $0 (call $7) ) ) ) ) (local.set $1 (i32.const 0) ) (loop $label$2 (local.set $2 (i32.const 0) ) (local.set $3 (i32.const 0) ) (loop $label$3 (block $label$4 (br_if $label$4 (i32.eqz (local.tee $6 (i32.load (local.tee $5 (i32.add (i32.load offset=100 (local.get $0) ) (local.tee $4 (i32.shl (local.get $2) (i32.const 2) ) ) ) ) ) ) ) ) (br_if $label$4 (i32.eqz (i32.load (local.tee $4 (i32.add (local.get $4) (i32.const 3520) ) ) ) ) ) (i32.store (local.get $5) (i32.const 0) ) (call_indirect (type $i32_=>_none) (local.get $6) (i32.load (local.get $4) ) ) (local.set $3 (i32.const 1) ) ) (br_if $label$3 (i32.ne (local.tee $2 (i32.add (local.get $2) (i32.const 1) ) ) (i32.const 128) ) ) ) (br_if $label$1 (i32.gt_u (local.get $1) (i32.const 2) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (br_if $label$2 (local.get $3) ) ) ) ) (func $dynCall_vi (param $fptr i32) (param $0 i32) (call_indirect (type $i32_=>_none) (local.get $0) (local.get $fptr) ) ) (func $dynCall_ii (param $fptr i32) (param $0 i32) (result i32) (call_indirect (type $i32_=>_i32) (local.get $0) (local.get $fptr) ) ) (func $dynCall_iiii (param $fptr i32) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (call_indirect (type $i32_i32_i32_=>_i32) (local.get $0) (local.get $1) (local.get $2) (local.get $fptr) ) ) (func $dynCall_jiji (param $fptr i32) (param $0 i32) (param $1 i64) (param $2 i32) (result i64) (call_indirect (type $i32_i64_i32_=>_i64) (local.get $0) (local.get $1) (local.get $2) (local.get $fptr) ) ) (func $legalstub$dynCall_jiji (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i64) (local.set $5 (call $dynCall_jiji (local.get $0) (local.get $1) (i64.or (i64.extend_i32_u (local.get $2) ) (i64.shl (i64.extend_i32_u (local.get $3) ) (i64.const 32) ) ) (local.get $4) ) ) (call $setTempRet0 (i32.wrap_i64 (i64.shr_u (local.get $5) (i64.const 32) ) ) ) (i32.wrap_i64 (local.get $5) ) ) ;; custom section "producers", size 172 ) (; --BEGIN METADATA -- { "asmConsts": { "1658": "{ console.log(\"Hello.\"); }", "1685": "throw 'Canceled!'", "1703": "{ setTimeout(function() { __emscripten_do_dispatch_to_thread($0, $1); }, 0); }" }, "emJsFuncs": { "initPthreadsJS": "(void)<::>{ PThread.initRuntime(); }", "world": "()<::>{ console.log(\"World.\"); }" }, "declares": [ "emscripten_asm_const_int", "__cxa_thread_atexit", "__clock_gettime", "emscripten_get_now", "emscripten_conditional_set_current_thread_status", "emscripten_futex_wait", "emscripten_futex_wake", "__assert_fail", "emscripten_set_current_thread_status", "_emscripten_notify_thread_queue", "emscripten_webgl_create_context", "emscripten_set_canvas_element_size", "pthread_create", "emscripten_receive_on_main_thread_js", "emscripten_resize_heap", "fd_write", "setTempRet0" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main", "emscripten_tls_init", "emscripten_get_global_libc", "__errno_location", "fflush", "__emscripten_pthread_data_constructor", "pthread_self", "__pthread_tsd_run_dtors", "emscripten_current_thread_process_queued_calls", "emscripten_register_main_browser_thread_id", "emscripten_main_browser_thread_id", "_emscripten_do_dispatch_to_thread", "emscripten_sync_run_in_main_thread_2", "emscripten_sync_run_in_main_thread_4", "emscripten_main_thread_process_queued_calls", "emscripten_run_in_main_runtime_thread_js", "_emscripten_call_on_thread", "_emscripten_thread_init", "stackSave", "stackRestore", "stackAlloc", "emscripten_stack_init", "emscripten_stack_set_limits", "emscripten_stack_get_free", "emscripten_stack_get_end", "malloc", "free", "memalign", "dynCall_vi", "dynCall_ii", "dynCall_iiii", "dynCall_jiji" ], "namedGlobals": { "_emscripten_allow_main_runtime_queued_calls" : "1432", "_emscripten_main_thread_futex" : "1836" }, "invokeFuncs": [ ], "mainReadsParams": 1, "features": [ "--enable-threads", "--enable-mutable-globals", "--enable-bulk-memory", "--enable-sign-ext" ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_asm_shared.cpp000066400000000000000000000003101423707623100217640ustar00rootroot00000000000000#include int main() { EM_ASM({ Module.print("Hello world"); }); int x = EM_ASM_INT({ return $0 + $1; }, 13, 27); EM_ASM_({ Module.print("Got " + $0); }, x); return 0; } binaryen-version_108/test/lld/em_asm_shared.wat000066400000000000000000000064641423707623100220150ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 1)) (data $.data (global.get $__memory_base) "\00ii\00i\00{ Module.print(\"Hello world\"); }\00{ return $0 + $1; }\00{ Module.print(\"Got \" + $0); }\00") (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__stack_pointer" (global $__stack_pointer (mut i32))) (import "env" "__memory_base" (global $__memory_base i32)) (import "env" "__table_base" (global $__table_base i32)) (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" (global $__em_asm_sig_builder<__em_asm_type_tuple<>\20>::buffer (mut i32))) (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE" (global $__em_asm_sig_builder<__em_asm_type_tuple\20>::buffer (mut i32))) (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" (global $__em_asm_sig_builder<__em_asm_type_tuple\20>::buffer (mut i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (global $global$0 i32 (i32.const 0)) (global $global$1 i32 (i32.const 1)) (global $global$2 i32 (i32.const 4)) (global $global$3 i32 (i32.const 6)) (global $global$4 i32 (i32.const 90)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__original_main" (func $__original_main)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" (global $global$0)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE" (global $global$1)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" (global $global$2)) (export "main" (func $main)) (export "__start_em_asm" (global $global$3)) (export "__stop_em_asm" (global $global$4)) (func $__wasm_call_ctors (call $__wasm_apply_data_relocs) ) (func $__wasm_apply_data_relocs ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (global.set $__stack_pointer (local.tee $0 (i32.sub (global.get $__stack_pointer) (i32.const 32) ) ) ) (drop (call $emscripten_asm_const_int (i32.add (local.tee $1 (global.get $__memory_base) ) (i32.const 6) ) (global.get $__em_asm_sig_builder<__em_asm_type_tuple<>\20>::buffer) (i32.const 0) ) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (i32.store (local.get $0) (call $emscripten_asm_const_int (i32.add (local.get $1) (i32.const 39) ) (global.get $__em_asm_sig_builder<__em_asm_type_tuple\20>::buffer) (i32.add (local.get $0) (i32.const 16) ) ) ) (drop (call $emscripten_asm_const_int (i32.add (local.get $1) (i32.const 59) ) (global.get $__em_asm_sig_builder<__em_asm_type_tuple\20>::buffer) (local.get $0) ) ) (global.set $__stack_pointer (i32.add (local.get $0) (i32.const 32) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "dylink.0", size 6 ;; custom section "producers", size 112 ;; features section: mutable-globals ) binaryen-version_108/test/lld/em_asm_shared.wat.out000066400000000000000000000102651423707623100226150ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 1)) (data $.data (global.get $__memory_base) "\00ii\00i\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__stack_pointer" (global $__stack_pointer (mut i32))) (import "env" "__memory_base" (global $__memory_base i32)) (import "env" "__table_base" (global $__table_base i32)) (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" (global $__em_asm_sig_builder<__em_asm_type_tuple<>\20>::buffer (mut i32))) (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE" (global $__em_asm_sig_builder<__em_asm_type_tuple\20>::buffer (mut i32))) (import "GOT.mem" "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" (global $__em_asm_sig_builder<__em_asm_type_tuple\20>::buffer (mut i32))) (import "env" "emscripten_asm_const_int" (func $emscripten_asm_const_int (param i32 i32 i32) (result i32))) (global $global$0 i32 (i32.const 0)) (global $global$1 i32 (i32.const 1)) (global $global$2 i32 (i32.const 4)) (global $global$3 i32 (i32.const 6)) (global $global$4 i32 (i32.const 90)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__original_main" (func $__original_main)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" (global $global$0)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE" (global $global$1)) (export "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" (global $global$2)) (export "main" (func $main)) (func $__wasm_call_ctors (call $__wasm_apply_data_relocs) ) (func $__wasm_apply_data_relocs (nop) ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (global.set $__stack_pointer (local.tee $0 (i32.sub (global.get $__stack_pointer) (i32.const 32) ) ) ) (drop (call $emscripten_asm_const_int (i32.add (local.tee $1 (global.get $__memory_base) ) (i32.const 6) ) (global.get $__em_asm_sig_builder<__em_asm_type_tuple<>\20>::buffer) (i32.const 0) ) ) (i64.store offset=16 (local.get $0) (i64.const 115964117005) ) (i32.store (local.get $0) (call $emscripten_asm_const_int (i32.add (local.get $1) (i32.const 39) ) (global.get $__em_asm_sig_builder<__em_asm_type_tuple\20>::buffer) (i32.add (local.get $0) (i32.const 16) ) ) ) (drop (call $emscripten_asm_const_int (i32.add (local.get $1) (i32.const 59) ) (global.get $__em_asm_sig_builder<__em_asm_type_tuple\20>::buffer) (local.get $0) ) ) (global.set $__stack_pointer (i32.add (local.get $0) (i32.const 32) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "asmConsts": { "6": "{ Module.print(\"Hello world\"); }", "39": "{ return $0 + $1; }", "59": "{ Module.print(\"Got \" + $0); }" }, "declares": [ "emscripten_asm_const_int" ], "globalImports": [ "__stack_pointer", "__memory_base", "__table_base", "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE", "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE", "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" ], "exports": [ "__wasm_call_ctors", "__original_main", "main" ], "namedGlobals": { "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJEEE6bufferE" : "0", "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiiEEE6bufferE" : "1", "_ZN20__em_asm_sig_builderI19__em_asm_type_tupleIJiEEE6bufferE" : "4" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_asm_table.wat000066400000000000000000000007641423707623100216330ustar00rootroot00000000000000(module (type $0 (func (param i32 i32))) (type $1 (func (param i32 i32 i32) (result i32))) (import "env" "memory" (memory $2 8192)) (import "env" "emscripten_log" (func $fimport$0 (param i32 i32))) (import "env" "emscripten_asm_const_int" (func $fimport$1 (param i32 i32 i32) (result i32))) (table $0 159609 funcref) (elem (i32.const 1) $fimport$0 $fimport$1) (global $global$0 (mut i32) (i32.const 1024)) (global $global$1 i32 (i32.const 1048)) (export "__data_end" (global $global$1)) ) binaryen-version_108/test/lld/em_asm_table.wat.out000066400000000000000000000026041423707623100224340ustar00rootroot00000000000000(module (type $0 (func (param i32 i32))) (type $1 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (import "env" "memory" (memory $2 8192)) (import "env" "emscripten_log" (func $fimport$0 (param i32 i32))) (import "env" "emscripten_asm_const_int" (func $fimport$1 (param i32 i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 1024)) (global $global$1 i32 (i32.const 1048)) (table $0 159609 funcref) (elem (i32.const 1) $fimport$0 $fimport$1) (export "__data_end" (global $global$1)) (export "dynCall_vii" (func $dynCall_vii)) (export "dynCall_iiii" (func $dynCall_iiii)) (func $dynCall_vii (param $fptr i32) (param $0 i32) (param $1 i32) (call_indirect (type $0) (local.get $0) (local.get $1) (local.get $fptr) ) ) (func $dynCall_iiii (param $fptr i32) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (call_indirect (type $1) (local.get $0) (local.get $1) (local.get $2) (local.get $fptr) ) ) ) (; --BEGIN METADATA -- { "declares": [ "emscripten_log", "emscripten_asm_const_int" ], "globalImports": [ ], "exports": [ "dynCall_vii", "dynCall_iiii" ], "namedGlobals": { "__data_end" : "1048" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/em_js_O0.wat000066400000000000000000000275121423707623100206560ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256 256)) (data (i32.const 1024) "(void)<::>{ out(\"no args works\"); }\00(void)<::>{ out(\"no args returning int\"); return 12; }\00(void)<::>{ out(\"no args returning double\"); return 12.25; }\00(int x)<::>{ out(\" takes ints: \" + x);}\00(double d)<::>{ out(\" takes doubles: \" + d);}\00(char* str)<::>{ out(\" takes strings: \" + UTF8ToString(str)); return 7.75; }\00(int x, int y)<::>{ out(\" takes multiple ints: \" + x + \", \" + y); return 6; }\00(int x, const char* str, double d)<::>{ out(\" mixed arg types: \" + x + \", \" + UTF8ToString(str) + \", \" + d); return 8.125; }\00(int unused)<::>{ out(\" ignores unused args\"); return 5.5; }\00(int x, int y)<::>{ out(\" skips unused args: \" + y); return 6; }\00(double x, double y, double z)<::>{ out(\" \" + x + \" + \" + z); return x + z; }\00(void)<::>{ out(\" can use <::> separator in user code\"); return 15; }\00(void)<::>{ var x, y; x = {}; y = 3; x[y] = [1, 2, 3]; out(\" can have commas in user code: \" + x[y]); return x[y][1]; }\00(void)<::>{ var jsString = \'\e3\81\93\e3\82\93\e3\81\ab\e3\81\a1\e3\81\af\'; var lengthBytes = lengthBytesUTF8(jsString); var stringOnWasmHeap = _malloc(lengthBytes); stringToUTF8(jsString, stringOnWasmHeap, lengthBytes+1); return stringOnWasmHeap; }\00(void)<::>{ var jsString = \'hello from js\'; var lengthBytes = jsString.length+1; var stringOnWasmHeap = _malloc(lengthBytes); stringToUTF8(jsString, stringOnWasmHeap, lengthBytes+1); return stringOnWasmHeap; }\00BEGIN\n\00 noarg_int returned: %d\n\00 noarg_double returned: %f\n\00 stringarg returned: %f\n\00string arg\00 multi_intarg returned: %d\n\00 multi_mixedarg returned: %f\n\00hello\00 unused_args returned: %d\n\00 skip_args returned: %f\n\00 add_outer returned: %f\n\00 user_separator returned: %d\n\00 user_comma returned: %d\n\00 return_str returned: %s\n\00 return_utf8_str returned: %s\n\00END\n\00\00\cc\1a\00\00\00\00\00\00\00\00\00\00\00\00\00\00T!\"\19\0d\01\02\03\11K\1c\0c\10\04\0b\1d\12\1e\'hnopqb \05\06\0f\13\14\15\1a\08\16\07($\17\18\t\n\0e\1b\1f%#\83\82}&*+<=>?CGJMXYZ[\\]^_`acdefgijklrstyz{|\00\00\00\00\00\00\00\00\00Illegal byte sequence\00Domain error\00Result not representable\00Not a tty\00Permission denied\00Operation not permitted\00No such file or directory\00No such process\00File exists\00Value too large for data type\00No space left on device\00Out of memory\00Resource busy\00Interrupted system call\00Resource temporarily unavailable\00Invalid seek\00Cross-device link\00Read-only file system\00Directory not empty\00Connection reset by peer\00Operation timed out\00Connection refused\00Host is down\00Host is unreachable\00Address in use\00Broken pipe\00I/O error\00No such device or address\00Block device required\00No such device\00Not a directory\00Is a directory\00Text file busy\00Exec format error\00Invalid argument\00Argument list too long\00Symbolic link loop\00Filename too long\00Too many open files in system\00No file descriptors available\00Bad file descriptor\00No child process\00Bad address\00File too large\00Too many links\00No locks available\00Resource deadlock would occur\00State not recoverable\00Previous owner died\00Operation canceled\00Function not implemented\00No message of desired type\00Identifier removed\00Device not a stream\00No data available\00Device timeout\00Out of streams resources\00Link has been severed\00Protocol error\00Bad message\00File descriptor in bad state\00Not a socket\00Destination address required\00Message too large\00Protocol wrong type for socket\00Protocol not available\00Protocol not supported\00Socket type not supported\00Not supported\00Protocol family not supported\00Address family not supported by protocol\00Address not available\00Network is down\00Network unreachable\00Connection reset by network\00Connection aborted\00No buffer space available\00Socket is connected\00Socket not connected\00Cannot send after socket shutdown\00Operation already in progress\00Operation in progress\00Stale file handle\00Remote I/O error\00Quota exceeded\00No medium found\00Wrong medium type\00No error information\00\00-+ 0X0x\00(null)\00\00\00\00\11\00\n\00\11\11\11\00\00\00\00\05\00\00\00\00\00\00\t\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\0f\n\11\11\11\03\n\07\00\01\13\t\0b\0b\00\00\t\06\0b\00\00\0b\00\06\11\00\00\00\11\11\11\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\n\n\11\11\11\00\n\00\00\02\00\t\0b\00\00\00\t\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\04\0d\00\00\00\00\t\0e\00\00\00\00\00\0e\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\00\0f\00\00\00\00\t\10\00\00\00\00\00\10\00\00\10\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\00\n\00\00\00\00\t\0b\00\00\00\00\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\000123456789ABCDEF-0X+0X 0X-0x+0x 0x\00inf\00INF\00nan\00NAN\00.\00") (data (i32.const 5232) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 6860) "\05\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\04\00\00\00\88\14\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\cc\1a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\b0\18\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (global $global$0 (mut i32) (i32.const 5250112)) (global $global$1 i32 (i32.const 5250112)) (global $global$2 i32 (i32.const 7232)) (export "__em_js__noarg" (func $__em_js__noarg)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $__em_js__noarg (result i32) (local $0 i32) (local.set $0 (i32.const 1024) ) (return (local.get $0) ) ) ) binaryen-version_108/test/lld/em_js_O0.wat.out000066400000000000000000000277541423707623100214740ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256 256)) (data (i32.const 1024) "(void)<::>{ out(\"no args works\"); }\00(void)<::>{ out(\"no args returning int\"); return 12; }\00(void)<::>{ out(\"no args returning double\"); return 12.25; }\00(int x)<::>{ out(\" takes ints: \" + x);}\00(double d)<::>{ out(\" takes doubles: \" + d);}\00(char* str)<::>{ out(\" takes strings: \" + UTF8ToString(str)); return 7.75; }\00(int x, int y)<::>{ out(\" takes multiple ints: \" + x + \", \" + y); return 6; }\00(int x, const char* str, double d)<::>{ out(\" mixed arg types: \" + x + \", \" + UTF8ToString(str) + \", \" + d); return 8.125; }\00(int unused)<::>{ out(\" ignores unused args\"); return 5.5; }\00(int x, int y)<::>{ out(\" skips unused args: \" + y); return 6; }\00(double x, double y, double z)<::>{ out(\" \" + x + \" + \" + z); return x + z; }\00(void)<::>{ out(\" can use <::> separator in user code\"); return 15; }\00(void)<::>{ var x, y; x = {}; y = 3; x[y] = [1, 2, 3]; out(\" can have commas in user code: \" + x[y]); return x[y][1]; }\00(void)<::>{ var jsString = \'\e3\81\93\e3\82\93\e3\81\ab\e3\81\a1\e3\81\af\'; var lengthBytes = lengthBytesUTF8(jsString); var stringOnWasmHeap = _malloc(lengthBytes); stringToUTF8(jsString, stringOnWasmHeap, lengthBytes+1); return stringOnWasmHeap; }\00(void)<::>{ var jsString = \'hello from js\'; var lengthBytes = jsString.length+1; var stringOnWasmHeap = _malloc(lengthBytes); stringToUTF8(jsString, stringOnWasmHeap, lengthBytes+1); return stringOnWasmHeap; }\00BEGIN\n\00 noarg_int returned: %d\n\00 noarg_double returned: %f\n\00 stringarg returned: %f\n\00string arg\00 multi_intarg returned: %d\n\00 multi_mixedarg returned: %f\n\00hello\00 unused_args returned: %d\n\00 skip_args returned: %f\n\00 add_outer returned: %f\n\00 user_separator returned: %d\n\00 user_comma returned: %d\n\00 return_str returned: %s\n\00 return_utf8_str returned: %s\n\00END\n\00\00\cc\1a\00\00\00\00\00\00\00\00\00\00\00\00\00\00T!\"\19\0d\01\02\03\11K\1c\0c\10\04\0b\1d\12\1e\'hnopqb \05\06\0f\13\14\15\1a\08\16\07($\17\18\t\n\0e\1b\1f%#\83\82}&*+<=>?CGJMXYZ[\\]^_`acdefgijklrstyz{|\00\00\00\00\00\00\00\00\00Illegal byte sequence\00Domain error\00Result not representable\00Not a tty\00Permission denied\00Operation not permitted\00No such file or directory\00No such process\00File exists\00Value too large for data type\00No space left on device\00Out of memory\00Resource busy\00Interrupted system call\00Resource temporarily unavailable\00Invalid seek\00Cross-device link\00Read-only file system\00Directory not empty\00Connection reset by peer\00Operation timed out\00Connection refused\00Host is down\00Host is unreachable\00Address in use\00Broken pipe\00I/O error\00No such device or address\00Block device required\00No such device\00Not a directory\00Is a directory\00Text file busy\00Exec format error\00Invalid argument\00Argument list too long\00Symbolic link loop\00Filename too long\00Too many open files in system\00No file descriptors available\00Bad file descriptor\00No child process\00Bad address\00File too large\00Too many links\00No locks available\00Resource deadlock would occur\00State not recoverable\00Previous owner died\00Operation canceled\00Function not implemented\00No message of desired type\00Identifier removed\00Device not a stream\00No data available\00Device timeout\00Out of streams resources\00Link has been severed\00Protocol error\00Bad message\00File descriptor in bad state\00Not a socket\00Destination address required\00Message too large\00Protocol wrong type for socket\00Protocol not available\00Protocol not supported\00Socket type not supported\00Not supported\00Protocol family not supported\00Address family not supported by protocol\00Address not available\00Network is down\00Network unreachable\00Connection reset by network\00Connection aborted\00No buffer space available\00Socket is connected\00Socket not connected\00Cannot send after socket shutdown\00Operation already in progress\00Operation in progress\00Stale file handle\00Remote I/O error\00Quota exceeded\00No medium found\00Wrong medium type\00No error information\00\00-+ 0X0x\00(null)\00\00\00\00\11\00\n\00\11\11\11\00\00\00\00\05\00\00\00\00\00\00\t\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\0f\n\11\11\11\03\n\07\00\01\13\t\0b\0b\00\00\t\06\0b\00\00\0b\00\06\11\00\00\00\11\11\11\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\n\n\11\11\11\00\n\00\00\02\00\t\0b\00\00\00\t\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\04\0d\00\00\00\00\t\0e\00\00\00\00\00\0e\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\00\0f\00\00\00\00\t\10\00\00\00\00\00\10\00\00\10\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\00\n\00\00\00\00\t\0b\00\00\00\00\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\000123456789ABCDEF-0X+0X 0X-0x+0x 0x\00inf\00INF\00nan\00NAN\00.\00") (data (i32.const 5232) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 6860) "\05\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\04\00\00\00\88\14\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\cc\1a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\b0\18\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (global $global$0 (mut i32) (i32.const 5250112)) (global $global$1 i32 (i32.const 5250112)) (global $global$2 i32 (i32.const 7232)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) ) (; --BEGIN METADATA -- { "emJsFuncs": { "noarg": "(void)<::>{ out(\"no args works\"); }" }, "declares": [ ], "globalImports": [ ], "exports": [ ], "namedGlobals": { "__heap_base" : "5250112", "__data_end" : "7232" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/hello_world.c000066400000000000000000000001171423707623100211540ustar00rootroot00000000000000int puts(const char* str); int main() { puts("Hello, world"); return 0; } binaryen-version_108/test/lld/hello_world.passive.wat000066400000000000000000000020641423707623100232010ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (type $1 (func)) (type $2 (func (result i32))) (type $3 (func (param i32 i32) (result i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (memory $0 2) (data "Hello, world\00") (table $0 1 1 funcref) (global $global$0 (mut i32) (i32.const 66128)) (global $global$1 i32 (i32.const 66128)) (global $global$2 i32 (i32.const 581)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "main" (func $main)) (func $__wasm_call_ctors (; 1 ;) (type $1) (call $__wasm_init_memory) ) (func $__wasm_init_memory (; 2 ;) (type $1) (memory.init 0 (i32.const 568) (i32.const 0) (i32.const 14) ) ) (func $__original_main (; 3 ;) (type $2) (result i32) (drop (call $puts (i32.const 568) ) ) (i32.const 0) ) (func $main (; 3 ;) (type $3) (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "producers", size 111 ) binaryen-version_108/test/lld/hello_world.passive.wat.out000066400000000000000000000023711423707623100240100ustar00rootroot00000000000000(module (type $1 (func)) (type $0 (func (param i32) (result i32))) (type $2 (func (result i32))) (type $3 (func (param i32 i32) (result i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (global $global$0 (mut i32) (i32.const 66128)) (global $global$1 i32 (i32.const 66128)) (global $global$2 i32 (i32.const 581)) (memory $0 2) (data "Hello, world\00") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "main" (func $main)) (func $__wasm_call_ctors (call $__wasm_init_memory) ) (func $__wasm_init_memory (memory.init 0 (i32.const 568) (i32.const 0) (i32.const 14) ) ) (func $__original_main (result i32) (drop (call $puts (i32.const 568) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "declares": [ "puts" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { "__heap_base" : "66128", "__data_end" : "581" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/hello_world.wat000066400000000000000000000014131423707623100215250ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (memory $0 2) (data $.rodata (i32.const 568) "Hello, world\00") (table $0 1 1 funcref) (global $__stack_pointer (mut i32) (i32.const 66128)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors ) (func $__original_main (result i32) (drop (call $puts (i32.const 568) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "producers", size 112 ) binaryen-version_108/test/lld/hello_world.wat.mem.mem000066400000000000000000000000151423707623100230540ustar00rootroot00000000000000Hello, worldbinaryen-version_108/test/lld/hello_world.wat.mem.out000066400000000000000000000016661423707623100231220ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66128)) (memory $0 2) (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (nop) ) (func $__original_main (result i32) (drop (call $puts (i32.const 568) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "declares": [ "puts" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/hello_world.wat.out000066400000000000000000000017511423707623100223400ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66128)) (memory $0 2) (data $.rodata (i32.const 568) "Hello, world\00") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (nop) ) (func $__original_main (result i32) (drop (call $puts (i32.const 568) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "declares": [ "puts" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/init.c000066400000000000000000000002421423707623100176040ustar00rootroot00000000000000volatile int x, y; __attribute__((constructor)) void init_x() { x = 14; } __attribute__((constructor)) void init_y() { y = 144; } int main() { return x + y; } binaryen-version_108/test/lld/init.wat000066400000000000000000000015251423707623100201620ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (memory $0 2) (table $0 1 1 funcref) (global $__stack_pointer (mut i32) (i32.const 66112)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (call $init_x) (call $init_y) ) (func $init_x (i32.store offset=568 (i32.const 0) (i32.const 14) ) ) (func $init_y (i32.store offset=572 (i32.const 0) (i32.const 144) ) ) (func $__original_main (result i32) (i32.add (i32.load offset=568 (i32.const 0) ) (i32.load offset=572 (i32.const 0) ) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "producers", size 112 ) binaryen-version_108/test/lld/init.wat.out000066400000000000000000000020401423707623100207610ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66112)) (memory $0 2) (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (call $init_x) (call $init_y) ) (func $init_x (i32.store offset=568 (i32.const 0) (i32.const 14) ) ) (func $init_y (i32.store offset=572 (i32.const 0) (i32.const 144) ) ) (func $__original_main (result i32) (i32.add (i32.load offset=568 (i32.const 0) ) (i32.load offset=572 (i32.const 0) ) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/longjmp.c000066400000000000000000000003631423707623100203130ustar00rootroot00000000000000typedef struct jmp_buf_buf { int thing; } jmp_buf; void longjmp(jmp_buf env, int val); int setjmp(jmp_buf env); int __THREW__; int __threwValue; int main() { jmp_buf jmp; if (setjmp(jmp) == 0) { longjmp(jmp, 1); } return 0; } binaryen-version_108/test/lld/longjmp.wat000066400000000000000000000057651423707623100206770ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (import "env" "malloc" (func $malloc (param i32) (result i32))) (import "env" "saveSetjmp" (func $saveSetjmp (param i32 i32 i32 i32) (result i32))) (import "env" "getTempRet0" (func $getTempRet0 (result i32))) (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32))) (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32))) (import "env" "testSetjmp" (func $testSetjmp (param i32 i32 i32) (result i32))) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (import "env" "free" (func $free (param i32))) (memory $0 2) (table $0 2 2 funcref) (elem (i32.const 1) $emscripten_longjmp) (global $__stack_pointer (mut i32) (i32.const 66112)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (i32.store (local.tee $0 (call $malloc (i32.const 40) ) ) (i32.const 0) ) (local.set $1 (call $saveSetjmp (local.get $0) (i32.const 1) (local.get $0) (i32.const 4) ) ) (local.set $2 (call $getTempRet0) ) (local.set $0 (i32.const 0) ) (block $label$1 (block $label$2 (loop $label$3 (br_if $label$2 (local.get $0) ) (i32.store offset=568 (i32.const 0) (i32.const 0) ) (call $invoke_vii (i32.const 1) (local.get $0) (i32.const 1) ) (local.set $0 (i32.load offset=568 (i32.const 0) ) ) (i32.store offset=568 (i32.const 0) (i32.const 0) ) (block $label$4 (br_if $label$4 (i32.eqz (local.get $0) ) ) (br_if $label$4 (i32.eqz (local.tee $3 (i32.load offset=572 (i32.const 0) ) ) ) ) (br_if $label$1 (i32.eqz (call $testSetjmp (i32.load (local.get $0) ) (local.get $1) (local.get $2) ) ) ) (call $setTempRet0 (local.get $3) ) ) (local.set $0 (call $getTempRet0) ) (br $label$3) ) ) (call $free (local.get $1) ) (return (i32.const 0) ) ) (call $free (local.get $1) ) (call $emscripten_longjmp (local.get $0) (local.get $3) ) (unreachable) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "producers", size 112 ) binaryen-version_108/test/lld/longjmp.wat.out000066400000000000000000000071021423707623100214700ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "malloc" (func $malloc (param i32) (result i32))) (import "env" "saveSetjmp" (func $saveSetjmp (param i32 i32 i32 i32) (result i32))) (import "env" "getTempRet0" (func $getTempRet0 (result i32))) (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32))) (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32))) (import "env" "testSetjmp" (func $testSetjmp (param i32 i32 i32) (result i32))) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (import "env" "free" (func $free (param i32))) (global $__stack_pointer (mut i32) (i32.const 66112)) (memory $0 2) (table $0 2 2 funcref) (elem (i32.const 1) $emscripten_longjmp) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "dynCall_vii" (func $dynCall_vii)) (func $__wasm_call_ctors (nop) ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (i32.store (local.tee $0 (call $malloc (i32.const 40) ) ) (i32.const 0) ) (local.set $1 (call $saveSetjmp (local.get $0) (i32.const 1) (local.get $0) (i32.const 4) ) ) (local.set $2 (call $getTempRet0) ) (local.set $0 (i32.const 0) ) (block $label$1 (block $label$2 (loop $label$3 (br_if $label$2 (local.get $0) ) (i32.store offset=568 (i32.const 0) (i32.const 0) ) (call $invoke_vii (i32.const 1) (local.get $0) (i32.const 1) ) (local.set $0 (i32.load offset=568 (i32.const 0) ) ) (i32.store offset=568 (i32.const 0) (i32.const 0) ) (block $label$4 (br_if $label$4 (i32.eqz (local.get $0) ) ) (br_if $label$4 (i32.eqz (local.tee $3 (i32.load offset=572 (i32.const 0) ) ) ) ) (br_if $label$1 (i32.eqz (call $testSetjmp (i32.load (local.get $0) ) (local.get $1) (local.get $2) ) ) ) (call $setTempRet0 (local.get $3) ) ) (local.set $0 (call $getTempRet0) ) (br $label$3) ) ) (call $free (local.get $1) ) (return (i32.const 0) ) ) (call $free (local.get $1) ) (call $emscripten_longjmp (local.get $0) (local.get $3) ) (unreachable) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) (func $dynCall_vii (param $fptr i32) (param $0 i32) (param $1 i32) (call_indirect (type $i32_i32_=>_none) (local.get $0) (local.get $1) (local.get $fptr) ) ) ) (; --BEGIN METADATA -- { "declares": [ "malloc", "saveSetjmp", "getTempRet0", "emscripten_longjmp", "testSetjmp", "setTempRet0", "free" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main", "dynCall_vii" ], "namedGlobals": { }, "invokeFuncs": [ "invoke_vii" ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/main_module.wat000066400000000000000000000032451423707623100215110ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (type $1 (func)) (type $2 (func (result i32))) (import "env" "memory" (memory $0 0)) (data (global.get $gimport$2) "Hello, world\00\00\00\00\00\00\00\00\00\00\00\00") (import "env" "__stack_pointer" (global $sp (mut i32))) (import "env" "__indirect_function_table" (table $timport$1 0 funcref)) (import "env" "__memory_base" (global $gimport$2 i32)) (import "env" "__table_base" (global $gimport$3 i32)) (import "GOT.mem" "external_var" (global $gimport$5 (mut i32))) (import "GOT.func" "puts" (global $gimport$6 (mut i32))) (import "GOT.func" "_Z13print_messagev" (global $gimport$7 (mut i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (global $global$0 i32 (i32.const 16)) (global $global$1 i32 (i32.const 20)) (global $global i32 (i32.const 42)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "_Z13print_messagev" (func $print_message\28\29)) (export "ptr_puts" (global $global$0)) (export "ptr_local_func" (global $global$1)) (export "__data_end" (global $global)) (func $__wasm_call_ctors (; 1 ;) (type $1) (call $__wasm_apply_relocs) ) (func $__wasm_apply_relocs (; 2 ;) (type $1) (i32.store (i32.add (global.get $gimport$2) (i32.const 16) ) (global.get $gimport$6) ) (i32.store (i32.add (global.get $gimport$2) (i32.const 20) ) (global.get $gimport$7) ) ) (func $print_message\28\29 (; 3 ;) (type $2) (result i32) (drop (call $puts (i32.add (global.get $gimport$2) (i32.const 0) ) ) ) (i32.load (global.get $gimport$5) ) ) ;; custom section "dylink", size 5 ;; custom section "producers", size 112 ) binaryen-version_108/test/lld/main_module.wat.out000066400000000000000000000037641423707623100223250ustar00rootroot00000000000000(module (type $1 (func)) (type $0 (func (param i32) (result i32))) (type $2 (func (result i32))) (import "env" "memory" (memory $0 0)) (data (global.get $gimport$2) "Hello, world\00\00\00\00\00\00\00\00\00\00\00\00") (import "env" "__indirect_function_table" (table $timport$1 0 funcref)) (import "env" "__stack_pointer" (global $sp (mut i32))) (import "env" "__memory_base" (global $gimport$2 i32)) (import "env" "__table_base" (global $gimport$3 i32)) (import "GOT.mem" "external_var" (global $gimport$5 (mut i32))) (import "GOT.func" "puts" (global $gimport$6 (mut i32))) (import "GOT.func" "_Z13print_messagev" (global $gimport$7 (mut i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (global $global$0 i32 (i32.const 16)) (global $global$1 i32 (i32.const 20)) (global $global i32 (i32.const 42)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "_Z13print_messagev" (func $print_message\28\29)) (export "ptr_puts" (global $global$0)) (export "ptr_local_func" (global $global$1)) (export "__data_end" (global $global)) (func $__wasm_call_ctors (call $__wasm_apply_relocs) ) (func $__wasm_apply_relocs (i32.store (i32.add (global.get $gimport$2) (i32.const 16) ) (global.get $gimport$6) ) (i32.store (i32.add (global.get $gimport$2) (i32.const 20) ) (global.get $gimport$7) ) ) (func $print_message\28\29 (result i32) (drop (call $puts (i32.add (global.get $gimport$2) (i32.const 0) ) ) ) (i32.load (global.get $gimport$5) ) ) ) (; --BEGIN METADATA -- { "declares": [ "puts" ], "globalImports": [ "__stack_pointer", "__memory_base", "__table_base", "external_var", "puts", "_Z13print_messagev" ], "exports": [ "__wasm_call_ctors", "_Z13print_messagev" ], "namedGlobals": { "ptr_puts" : "16", "ptr_local_func" : "20", "__data_end" : "42" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/main_module_table.wat000066400000000000000000000004341423707623100226550ustar00rootroot00000000000000(module (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write ) ) binaryen-version_108/test/lld/main_module_table.wat.out000066400000000000000000000011511423707623100234600ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write (nop) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ "__stack_pointer", "__stdio_write" ], "exports": [ "__stdio_write" ], "namedGlobals": { "__data_end" : "42" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/main_module_table_2.wat000066400000000000000000000005211423707623100230730ustar00rootroot00000000000000(module (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (import "env" "table" (table $timport$9 1 funcref)) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write ) ) binaryen-version_108/test/lld/main_module_table_2.wat.out000066400000000000000000000012361423707623100237050ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "table" (table $timport$9 1 funcref)) (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write (nop) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ "__stack_pointer", "__stdio_write" ], "exports": [ "__stdio_write" ], "namedGlobals": { "__data_end" : "42" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/main_module_table_3.wat000066400000000000000000000005471423707623100231040ustar00rootroot00000000000000(module (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (import "env" "table" (table $timport$9 1 funcref)) (elem (i32.const 0)) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write ) ) binaryen-version_108/test/lld/main_module_table_3.wat.out000066400000000000000000000012641423707623100237070ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "table" (table $timport$9 1 funcref)) (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (global $global i32 (i32.const 42)) (elem (i32.const 0)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write (nop) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ "__stack_pointer", "__stdio_write" ], "exports": [ "__stdio_write" ], "namedGlobals": { "__data_end" : "42" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/main_module_table_4.wat000066400000000000000000000006321423707623100231000ustar00rootroot00000000000000(module (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (import "env" "__table_base" (global $tb i32)) (import "env" "table" (table $timport$9 1 funcref)) (elem (global.get $tb)) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write ) ) binaryen-version_108/test/lld/main_module_table_4.wat.out000066400000000000000000000013731423707623100237110ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "table" (table $timport$9 1 funcref)) (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (import "env" "__table_base" (global $tb i32)) (global $global i32 (i32.const 42)) (elem (global.get $tb)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write (nop) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ "__stack_pointer", "__stdio_write", "__table_base" ], "exports": [ "__stdio_write" ], "namedGlobals": { "__data_end" : "42" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/main_module_table_5.wat000066400000000000000000000007121423707623100231000ustar00rootroot00000000000000(module (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (import "env" "__table_base" (global $tb i32)) (import "env" "table" (table $timport$9 1 funcref)) (elem (global.get $tb) $other $stuff) (global $global i32 (i32.const 42)) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (func $__stdio_write ) (func $other ) (func $stuff ) ) binaryen-version_108/test/lld/main_module_table_5.wat.out000066400000000000000000000020021423707623100237000ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "env" "table" (table $timport$9 1 funcref)) (import "env" "__stack_pointer" (global $sp (mut i32))) (import "GOT.func" "__stdio_write" (global $gimport$9 (mut i32))) (import "env" "__table_base" (global $tb i32)) (global $global i32 (i32.const 42)) (elem (global.get $tb) $other $stuff) (export "__stdio_write" (func $__stdio_write)) (export "__data_end" (global $global)) (export "dynCall_v" (func $dynCall_v)) (func $__stdio_write (nop) ) (func $other (nop) ) (func $stuff (nop) ) (func $dynCall_v (param $fptr i32) (call_indirect (type $none_=>_none) (local.get $fptr) ) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ "__stack_pointer", "__stdio_write", "__table_base" ], "exports": [ "__stdio_write", "dynCall_v" ], "namedGlobals": { "__data_end" : "42" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/no-emit-metadata.wat000066400000000000000000000010001423707623100223310ustar00rootroot00000000000000(module (memory $0 2) (table $0 1 1 funcref) (elem (i32.const 0) $foo) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (export "memory" (memory $0)) (export "main" (func $main)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $__original_main (result i32) (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) (func $foo (result i32)) ) binaryen-version_108/test/lld/no-emit-metadata.wat.out000066400000000000000000000014741423707623100231560ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (memory $0 2) (table $0 1 1 funcref) (elem (i32.const 0) $foo) (export "memory" (memory $0)) (export "main" (func $main)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "dynCall_i" (func $dynCall_i)) (func $__original_main (result i32) (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) (func $foo (result i32) (nop) ) (func $dynCall_i (param $fptr i32) (result i32) (call_indirect (type $none_=>_i32) (local.get $fptr) ) ) ) binaryen-version_108/test/lld/recursive.c000066400000000000000000000005061423707623100206530ustar00rootroot00000000000000// This test emits a stack pointer, which tests global importing in object files // (which are mutable and not normally allowed). int printf(const char* fmt, ...); __attribute__((noinline)) int foo(int a, int b) { printf("%d:%d\n", a, b); return a + b; } int main() { printf("Result: %d\n", foo(1, 2)); return 0; } binaryen-version_108/test/lld/recursive.wat000066400000000000000000000031411423707623100212220ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (import "env" "iprintf" (func $iprintf (param i32 i32) (result i32))) (memory $0 2) (data $.rodata (i32.const 568) "%d:%d\n\00Result: %d\n\00") (table $0 1 1 funcref) (global $__stack_pointer (mut i32) (i32.const 66128)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors ) (func $foo (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (global.set $__stack_pointer (local.tee $2 (i32.sub (global.get $__stack_pointer) (i32.const 16) ) ) ) (i32.store offset=4 (local.get $2) (local.get $1) ) (i32.store (local.get $2) (local.get $0) ) (drop (call $iprintf (i32.const 568) (local.get $2) ) ) (global.set $__stack_pointer (i32.add (local.get $2) (i32.const 16) ) ) (i32.add (local.get $1) (local.get $0) ) ) (func $__original_main (result i32) (local $0 i32) (global.set $__stack_pointer (local.tee $0 (i32.sub (global.get $__stack_pointer) (i32.const 16) ) ) ) (i32.store (local.get $0) (call $foo (i32.const 1) (i32.const 2) ) ) (drop (call $iprintf (i32.const 575) (local.get $0) ) ) (global.set $__stack_pointer (i32.add (local.get $0) (i32.const 16) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "producers", size 112 ) binaryen-version_108/test/lld/recursive.wat.out000066400000000000000000000035021423707623100220310ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (import "env" "iprintf" (func $iprintf (param i32 i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66128)) (memory $0 2) (data $.rodata (i32.const 568) "%d:%d\n\00Result: %d\n\00") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors (nop) ) (func $foo (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (global.set $__stack_pointer (local.tee $2 (i32.sub (global.get $__stack_pointer) (i32.const 16) ) ) ) (i32.store offset=4 (local.get $2) (local.get $1) ) (i32.store (local.get $2) (local.get $0) ) (drop (call $iprintf (i32.const 568) (local.get $2) ) ) (global.set $__stack_pointer (i32.add (local.get $2) (i32.const 16) ) ) (i32.add (local.get $1) (local.get $0) ) ) (func $__original_main (result i32) (local $0 i32) (global.set $__stack_pointer (local.tee $0 (i32.sub (global.get $__stack_pointer) (i32.const 16) ) ) ) (i32.store (local.get $0) (call $foo (i32.const 1) (i32.const 2) ) ) (drop (call $iprintf (i32.const 575) (local.get $0) ) ) (global.set $__stack_pointer (i32.add (local.get $0) (i32.const 16) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) (; --BEGIN METADATA -- { "declares": [ "iprintf" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/recursive_safe_stack.wat000066400000000000000000000033601423707623100234100ustar00rootroot00000000000000(module (type $0 (func (param i32 i32) (result i32))) (type $1 (func)) (type $2 (func (result i32))) (import "env" "printf" (func $printf (param i32 i32) (result i32))) (memory $0 2) (data (i32.const 568) "%d:%d\n\00Result: %d\n\00") (table $0 1 1 funcref) (global $global$0 (mut i32) (i32.const 66128)) (global $global$1 i32 (i32.const 66128)) (global $global$2 i32 (i32.const 587)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "main" (func $main)) (func $__wasm_call_ctors (; 1 ;) (type $1) ) (func $foo (; 2 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (global.set $global$0 (local.tee $2 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (i32.store offset=4 (local.get $2) (local.get $1) ) (i32.store (local.get $2) (local.get $0) ) (drop (call $printf (i32.const 568) (local.get $2) ) ) (global.set $global$0 (i32.add (local.get $2) (i32.const 16) ) ) (i32.add (local.get $1) (local.get $0) ) ) (func $__original_main (; 3 ;) (type $2) (result i32) (local $0 i32) (global.set $global$0 (local.tee $0 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (i32.store (local.get $0) (call $foo (i32.const 1) (i32.const 2) ) ) (drop (call $printf (i32.const 575) (local.get $0) ) ) (global.set $global$0 (i32.add (local.get $0) (i32.const 16) ) ) (i32.const 0) ) (func $main (; 4 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; custom section "producers", size 111 ) binaryen-version_108/test/lld/recursive_safe_stack.wat.out000066400000000000000000000073511423707623100242220ustar00rootroot00000000000000(module (type $0 (func (param i32 i32) (result i32))) (type $1 (func)) (type $2 (func (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "printf" (func $printf (param i32 i32) (result i32))) (import "env" "__handle_stack_overflow" (func $__handle_stack_overflow (param i32))) (global $global$0 (mut i32) (i32.const 66128)) (global $global$1 i32 (i32.const 66128)) (global $global$2 i32 (i32.const 587)) (global $__stack_base (mut i32) (i32.const 0)) (global $__stack_limit (mut i32) (i32.const 0)) (memory $0 2) (data (i32.const 568) "%d:%d\n\00Result: %d\n\00") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "main" (func $main)) (export "__set_stack_limits" (func $__set_stack_limits)) (func $__wasm_call_ctors (nop) ) (func $foo (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (block (if (i32.or (i32.gt_u (local.tee $3 (local.tee $2 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $3) (global.get $__stack_limit) ) ) (call $__handle_stack_overflow (local.get $3) ) ) (global.set $global$0 (local.get $3) ) ) (i32.store offset=4 (local.get $2) (local.get $1) ) (i32.store (local.get $2) (local.get $0) ) (drop (call $printf (i32.const 568) (local.get $2) ) ) (block (if (i32.or (i32.gt_u (local.tee $4 (i32.add (local.get $2) (i32.const 16) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $4) (global.get $__stack_limit) ) ) (call $__handle_stack_overflow (local.get $4) ) ) (global.set $global$0 (local.get $4) ) ) (i32.add (local.get $1) (local.get $0) ) ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (block (if (i32.or (i32.gt_u (local.tee $1 (local.tee $0 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $1) (global.get $__stack_limit) ) ) (call $__handle_stack_overflow (local.get $1) ) ) (global.set $global$0 (local.get $1) ) ) (i32.store (local.get $0) (call $foo (i32.const 1) (i32.const 2) ) ) (drop (call $printf (i32.const 575) (local.get $0) ) ) (block (if (i32.or (i32.gt_u (local.tee $2 (i32.add (local.get $0) (i32.const 16) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $2) (global.get $__stack_limit) ) ) (call $__handle_stack_overflow (local.get $2) ) ) (global.set $global$0 (local.get $2) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) (func $__set_stack_limits (param $0 i32) (param $1 i32) (global.set $__stack_base (local.get $0) ) (global.set $__stack_limit (local.get $1) ) ) ) (; --BEGIN METADATA -- { "declares": [ "printf", "__handle_stack_overflow" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main", "__set_stack_limits" ], "namedGlobals": { "__heap_base" : "66128", "__data_end" : "587" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/reserved_func_ptr.cpp000066400000000000000000000016411423707623100227240ustar00rootroot00000000000000int atoi(const char* nptr); void address_taken_func(int a, int b, int c) {} void address_taken_func2(int a, int b, int c) {} int main(int argc, char** argv) { int fp_v = atoi(argv[1]); int fp_vi = atoi(argv[2]); int fp_iii = atoi(argv[3]); int fp_fffi = atoi(argv[4]); int fp_ddi = atoi(argv[5]); void (*f_viiii)(int, int, int) = 0; if (argc > 3) f_viiii = address_taken_func; else f_viiii = address_taken_func2; void (*f_v)() = reinterpret_cast(fp_v); void (*f_vi)(int) = reinterpret_cast(fp_vi); int (*f_iii)(int, int) = reinterpret_cast(fp_iii); float (*f_fffi)(float, float, int) = reinterpret_cast(fp_fffi); double (*f_ddi)(double, int) = reinterpret_cast(fp_ddi); f_v(); f_vi(3); f_iii(4, 5); f_fffi(3.1f, 4.2f, 5); f_ddi(4.2, 5); f_viiii(1, 2, 3); return 0; } binaryen-version_108/test/lld/reserved_func_ptr.wat000066400000000000000000000046761423707623100227500ustar00rootroot00000000000000(module (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $f32_f32_i32_=>_f32 (func (param f32 f32 i32) (result f32))) (type $f64_i32_=>_f64 (func (param f64 i32) (result f64))) (import "env" "_Z4atoiPKc" (func $atoi\28char\20const*\29 (param i32) (result i32))) (memory $0 2) (table $0 3 3 funcref) (elem (i32.const 1) $address_taken_func\28int\2c\20int\2c\20int\29 $address_taken_func2\28int\2c\20int\2c\20int\29) (global $__stack_pointer (mut i32) (i32.const 66112)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (func $__wasm_call_ctors ) (func $address_taken_func\28int\2c\20int\2c\20int\29 (param $0 i32) (param $1 i32) (param $2 i32) ) (func $address_taken_func2\28int\2c\20int\2c\20int\29 (param $0 i32) (param $1 i32) (param $2 i32) ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $2 (call $atoi\28char\20const*\29 (i32.load offset=4 (local.get $1) ) ) ) (local.set $3 (call $atoi\28char\20const*\29 (i32.load offset=8 (local.get $1) ) ) ) (local.set $4 (call $atoi\28char\20const*\29 (i32.load offset=12 (local.get $1) ) ) ) (local.set $5 (call $atoi\28char\20const*\29 (i32.load offset=16 (local.get $1) ) ) ) (local.set $1 (call $atoi\28char\20const*\29 (i32.load offset=20 (local.get $1) ) ) ) (call_indirect (type $none_=>_none) (local.get $2) ) (call_indirect (type $i32_=>_none) (i32.const 3) (local.get $3) ) (drop (call_indirect (type $i32_i32_=>_i32) (i32.const 4) (i32.const 5) (local.get $4) ) ) (drop (call_indirect (type $f32_f32_i32_=>_f32) (f32.const 3.0999999046325684) (f32.const 4.199999809265137) (i32.const 5) (local.get $5) ) ) (drop (call_indirect (type $f64_i32_=>_f64) (f64.const 4.2) (i32.const 5) (local.get $1) ) ) (call_indirect (type $i32_i32_i32_=>_none) (i32.const 1) (i32.const 2) (i32.const 3) (select (i32.const 1) (i32.const 2) (i32.gt_s (local.get $0) (i32.const 3) ) ) ) (i32.const 0) ) ;; custom section "producers", size 112 ) binaryen-version_108/test/lld/reserved_func_ptr.wat.out000066400000000000000000000060071423707623100235440ustar00rootroot00000000000000(module (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $f32_f32_i32_=>_f32 (func (param f32 f32 i32) (result f32))) (type $f64_i32_=>_f64 (func (param f64 i32) (result f64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "_Z4atoiPKc" (func $atoi\28char\20const*\29 (param i32) (result i32))) (global $__stack_pointer (mut i32) (i32.const 66112)) (memory $0 2) (table $0 3 3 funcref) (elem (i32.const 1) $address_taken_func\28int\2c\20int\2c\20int\29 $address_taken_func2\28int\2c\20int\2c\20int\29) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "dynCall_viii" (func $dynCall_viii)) (func $__wasm_call_ctors (nop) ) (func $address_taken_func\28int\2c\20int\2c\20int\29 (param $0 i32) (param $1 i32) (param $2 i32) (nop) ) (func $address_taken_func2\28int\2c\20int\2c\20int\29 (param $0 i32) (param $1 i32) (param $2 i32) (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $2 (call $atoi\28char\20const*\29 (i32.load offset=4 (local.get $1) ) ) ) (local.set $3 (call $atoi\28char\20const*\29 (i32.load offset=8 (local.get $1) ) ) ) (local.set $4 (call $atoi\28char\20const*\29 (i32.load offset=12 (local.get $1) ) ) ) (local.set $5 (call $atoi\28char\20const*\29 (i32.load offset=16 (local.get $1) ) ) ) (local.set $1 (call $atoi\28char\20const*\29 (i32.load offset=20 (local.get $1) ) ) ) (call_indirect (type $none_=>_none) (local.get $2) ) (call_indirect (type $i32_=>_none) (i32.const 3) (local.get $3) ) (drop (call_indirect (type $i32_i32_=>_i32) (i32.const 4) (i32.const 5) (local.get $4) ) ) (drop (call_indirect (type $f32_f32_i32_=>_f32) (f32.const 3.0999999046325684) (f32.const 4.199999809265137) (i32.const 5) (local.get $5) ) ) (drop (call_indirect (type $f64_i32_=>_f64) (f64.const 4.2) (i32.const 5) (local.get $1) ) ) (call_indirect (type $i32_i32_i32_=>_none) (i32.const 1) (i32.const 2) (i32.const 3) (select (i32.const 1) (i32.const 2) (i32.gt_s (local.get $0) (i32.const 3) ) ) ) (i32.const 0) ) (func $dynCall_viii (param $fptr i32) (param $0 i32) (param $1 i32) (param $2 i32) (call_indirect (type $i32_i32_i32_=>_none) (local.get $0) (local.get $1) (local.get $2) (local.get $fptr) ) ) ) (; --BEGIN METADATA -- { "declares": [ "_Z4atoiPKc" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main", "dynCall_viii" ], "namedGlobals": { }, "invokeFuncs": [ ], "mainReadsParams": 1, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/safe_stack_standalone-wasm.wat000066400000000000000000000033071423707623100244770ustar00rootroot00000000000000(module (type $0 (func (param i32 i32) (result i32))) (type $1 (func)) (type $2 (func (result i32))) (import "env" "printf" (func $printf (param i32 i32) (result i32))) (memory $0 2) (data (i32.const 568) "%d:%d\n\00Result: %d\n\00") (table $0 1 1 funcref) (global $global$0 (mut i32) (i32.const 66128)) (global $global$1 i32 (i32.const 66128)) (global $global$2 i32 (i32.const 587)) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "main" (func $main)) (func $__wasm_call_ctors (; 1 ;) (type $1) ) (func $foo (; 2 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (global.set $global$0 (local.tee $2 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (i32.store offset=4 (local.get $2) (local.get $1) ) (i32.store (local.get $2) (local.get $0) ) (drop (call $printf (i32.const 568) (local.get $2) ) ) (global.set $global$0 (i32.add (local.get $2) (i32.const 16) ) ) (i32.add (local.get $1) (local.get $0) ) ) (func $__original_main (; 3 ;) (type $2) (result i32) (local $0 i32) (global.set $global$0 (local.tee $0 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (i32.store (local.get $0) (call $foo (i32.const 1) (i32.const 2) ) ) (drop (call $printf (i32.const 575) (local.get $0) ) ) (global.set $global$0 (i32.add (local.get $0) (i32.const 16) ) ) (i32.const 0) ) (func $main (; 4 ;) (type $0) (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ) binaryen-version_108/test/lld/safe_stack_standalone-wasm.wat.out000066400000000000000000000066101423707623100253050ustar00rootroot00000000000000(module (type $0 (func (param i32 i32) (result i32))) (type $1 (func)) (type $2 (func (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "printf" (func $printf (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 66128)) (global $global$1 i32 (i32.const 66128)) (global $global$2 i32 (i32.const 587)) (global $__stack_base (mut i32) (i32.const 0)) (global $__stack_limit (mut i32) (i32.const 0)) (memory $0 2) (data (i32.const 568) "%d:%d\n\00Result: %d\n\00") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (export "main" (func $main)) (export "__set_stack_limits" (func $__set_stack_limits)) (func $__wasm_call_ctors (nop) ) (func $foo (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (block (if (i32.or (i32.gt_u (local.tee $3 (local.tee $2 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $3) (global.get $__stack_limit) ) ) (unreachable) ) (global.set $global$0 (local.get $3) ) ) (i32.store offset=4 (local.get $2) (local.get $1) ) (i32.store (local.get $2) (local.get $0) ) (drop (call $printf (i32.const 568) (local.get $2) ) ) (block (if (i32.or (i32.gt_u (local.tee $4 (i32.add (local.get $2) (i32.const 16) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $4) (global.get $__stack_limit) ) ) (unreachable) ) (global.set $global$0 (local.get $4) ) ) (i32.add (local.get $1) (local.get $0) ) ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (block (if (i32.or (i32.gt_u (local.tee $1 (local.tee $0 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $1) (global.get $__stack_limit) ) ) (unreachable) ) (global.set $global$0 (local.get $1) ) ) (i32.store (local.get $0) (call $foo (i32.const 1) (i32.const 2) ) ) (drop (call $printf (i32.const 575) (local.get $0) ) ) (block (if (i32.or (i32.gt_u (local.tee $2 (i32.add (local.get $0) (i32.const 16) ) ) (global.get $__stack_base) ) (i32.lt_u (local.get $2) (global.get $__stack_limit) ) ) (unreachable) ) (global.set $global$0 (local.get $2) ) ) (i32.const 0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) (func $__set_stack_limits (param $0 i32) (param $1 i32) (global.set $__stack_base (local.get $0) ) (global.set $__stack_limit (local.get $1) ) ) ) (; --BEGIN METADATA -- { "declares": [ "printf" ], "globalImports": [ ], "exports": [ "__wasm_call_ctors", "main", "__set_stack_limits" ], "namedGlobals": { "__heap_base" : "66128", "__data_end" : "587" }, "invokeFuncs": [ ], "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/shared.cpp000066400000000000000000000003311423707623100204460ustar00rootroot00000000000000extern "C" int puts(const char* str); extern "C" int external_var; int print_message() { puts("Hello, world"); return external_var; } void* ptr_puts = (void*)&puts; void* ptr_local_func = (void*)&print_message; binaryen-version_108/test/lld/shared.wat000066400000000000000000000031571423707623100204700ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "memory" (memory $mimport$0 1)) (data $.data (global.get $__memory_base) "Hello, world\00\00\00\00\00\00\00\00\00\00\00\00") (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__memory_base" (global $__memory_base i32)) (import "env" "__table_base" (global $__table_base i32)) (import "GOT.mem" "external_var" (global $external_var (mut i32))) (import "GOT.func" "puts" (global $puts (mut i32))) (import "GOT.func" "_Z13print_messagev" (global $print_message\28\29 (mut i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (global $global$0 i32 (i32.const 16)) (global $global$1 i32 (i32.const 20)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "_Z13print_messagev" (func $print_message\28\29)) (export "ptr_puts" (global $global$0)) (export "ptr_local_func" (global $global$1)) (func $__wasm_call_ctors (call $__wasm_apply_data_relocs) ) (func $__wasm_apply_data_relocs (i32.store (i32.add (global.get $__memory_base) (i32.const 16) ) (global.get $puts) ) (i32.store (i32.add (global.get $__memory_base) (i32.const 20) ) (global.get $print_message\28\29) ) ) (func $print_message\28\29 (result i32) (drop (call $puts (i32.add (global.get $__memory_base) (i32.const 0) ) ) ) (i32.load (global.get $external_var) ) ) ;; custom section "dylink.0", size 6 ;; custom section "producers", size 112 ;; features section: mutable-globals ) binaryen-version_108/test/lld/shared.wat.out000066400000000000000000000036341423707623100212760ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $mimport$0 1)) (data $.data (global.get $__memory_base) "Hello, world\00\00\00\00\00\00\00\00\00\00\00\00") (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__memory_base" (global $__memory_base i32)) (import "env" "__table_base" (global $__table_base i32)) (import "GOT.mem" "external_var" (global $external_var (mut i32))) (import "GOT.func" "puts" (global $puts (mut i32))) (import "GOT.func" "_Z13print_messagev" (global $print_message\28\29 (mut i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (global $global$0 i32 (i32.const 16)) (global $global$1 i32 (i32.const 20)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "_Z13print_messagev" (func $print_message\28\29)) (export "ptr_puts" (global $global$0)) (export "ptr_local_func" (global $global$1)) (func $__wasm_call_ctors (call $__wasm_apply_data_relocs) ) (func $__wasm_apply_data_relocs (i32.store (i32.add (global.get $__memory_base) (i32.const 16) ) (global.get $puts) ) (i32.store (i32.add (global.get $__memory_base) (i32.const 20) ) (global.get $print_message\28\29) ) ) (func $print_message\28\29 (result i32) (drop (call $puts (i32.add (global.get $__memory_base) (i32.const 0) ) ) ) (i32.load (global.get $external_var) ) ) ) (; --BEGIN METADATA -- { "declares": [ "puts" ], "globalImports": [ "__memory_base", "__table_base", "external_var", "puts", "_Z13print_messagev" ], "exports": [ "__wasm_call_ctors", "_Z13print_messagev" ], "namedGlobals": { "ptr_puts" : "16", "ptr_local_func" : "20" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/shared_add_to_table.wasm000066400000000000000000000014521423707623100233210ustar00rootroot00000000000000asm dylink````û envmemoryenv__indirect_function_tablepenv__stack_pointerenv __memory_baseenv __table_baseenv_Z16waka_func_theirsiGOT.func_Z16waka_func_theirsiGOT.func_Z14waka_func_mineiGOT.mem waka_mineGOT.mem waka_others A A u__wasm_call_ctors__wasm_apply_relocs_Z14waka_func_minei__original_main waka_minemain __dso_handle H   Aj -#ƒ€€€!#„€€€!#…€€€(  jj#†€€€(j „€€€ # *snamelwaka_func_theirs(int)__wasm_call_ctors__wasm_apply_relocswaka_func_mine(int)__original_mainmain§ producers processed-byclang†11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 22ebf08006a5b17a4ff6aed09ec5b72867338458)binaryen-version_108/test/lld/shared_add_to_table.wasm.out000066400000000000000000000051571423707623100241350ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 0)) (data (global.get $gimport$1) "*\00\00\00") (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__stack_pointer" (global $gimport$0 (mut i32))) (import "env" "__memory_base" (global $gimport$1 i32)) (import "env" "__table_base" (global $gimport$2 i32)) (import "GOT.func" "_Z16waka_func_theirsi" (global $gimport$3 (mut i32))) (import "GOT.func" "_Z14waka_func_minei" (global $gimport$4 (mut i32))) (import "GOT.mem" "waka_mine" (global $gimport$5 (mut i32))) (import "GOT.mem" "waka_others" (global $gimport$6 (mut i32))) (import "env" "_Z16waka_func_theirsi" (func $waka_func_theirs\28int\29 (param i32) (result i32))) (global $global$0 i32 (i32.const 0)) (global $global$1 i32 (i32.const 0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__wasm_apply_relocs" (func $__wasm_apply_relocs)) (export "_Z14waka_func_minei" (func $waka_func_mine\28int\29)) (export "__original_main" (func $__original_main)) (export "waka_mine" (global $global$0)) (export "main" (func $main)) (export "__dso_handle" (global $global$1)) (func $__wasm_call_ctors (call $__wasm_apply_relocs) ) (func $__wasm_apply_relocs ) (func $waka_func_mine\28int\29 (param $0 i32) (result i32) (i32.add (local.get $0) (i32.const 1) ) ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (local.set $0 (global.get $gimport$3) ) (local.set $1 (global.get $gimport$4) ) (i32.add (i32.add (i32.load (global.get $gimport$5) ) (i32.add (local.get $1) (local.get $0) ) ) (i32.load (global.get $gimport$6) ) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) ;; dylink section ;; memorysize: 4 ;; memoryalignment: 2 ;; tablesize: 0 ;; tablealignment: 0 ;; custom section "producers", size 157 ) (; --BEGIN METADATA -- { "declares": [ "_Z16waka_func_theirsi" ], "globalImports": [ "__stack_pointer", "__memory_base", "__table_base", "_Z16waka_func_theirsi", "_Z14waka_func_minei", "waka_mine", "waka_others" ], "exports": [ "__wasm_call_ctors", "__wasm_apply_relocs", "_Z14waka_func_minei", "__original_main", "main" ], "namedGlobals": { "waka_mine" : "0", "__dso_handle" : "0" }, "invokeFuncs": [ ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/shared_longjmp.c000066400000000000000000000003521423707623100216370ustar00rootroot00000000000000typedef struct jmp_buf_buf { int thing; } jmp_buf; void longjmp(jmp_buf env, int val); int setjmp(jmp_buf env); int __THREW__; int __threwValue; void _start() { jmp_buf jmp; if (setjmp(jmp) == 0) { longjmp(jmp, 1); } } binaryen-version_108/test/lld/shared_longjmp.wat000066400000000000000000000070331423707623100222130ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 1)) (data $.bss (global.get $__memory_base) "\00\00\00\00\00\00\00\00") (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__memory_base" (global $__memory_base i32)) (import "env" "__table_base" (global $__table_base i32)) (import "GOT.mem" "__THREW__" (global $__THREW__ (mut i32))) (import "GOT.func" "emscripten_longjmp" (global $emscripten_longjmp (mut i32))) (import "GOT.mem" "__threwValue" (global $__threwValue (mut i32))) (import "env" "malloc" (func $malloc (param i32) (result i32))) (import "env" "saveSetjmp" (func $saveSetjmp (param i32 i32 i32 i32) (result i32))) (import "env" "getTempRet0" (func $getTempRet0 (result i32))) (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32))) (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32))) (import "env" "testSetjmp" (func $testSetjmp (param i32 i32 i32) (result i32))) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (import "env" "free" (func $free (param i32))) (global $global$0 i32 (i32.const 0)) (global $global$1 i32 (i32.const 4)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "_start" (func $_start)) (export "__THREW__" (global $global$0)) (export "__threwValue" (global $global$1)) (func $__wasm_call_ctors (call $__wasm_apply_data_relocs) ) (func $__wasm_apply_data_relocs ) (func $_start (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (i32.store (local.tee $0 (call $malloc (i32.const 40) ) ) (i32.const 0) ) (local.set $1 (call $saveSetjmp (local.get $0) (i32.const 1) (local.get $0) (i32.const 4) ) ) (local.set $2 (call $getTempRet0) ) (local.set $0 (i32.const 0) ) (block $label$1 (block $label$2 (loop $label$3 (br_if $label$2 (local.get $0) ) (i32.store (local.tee $0 (global.get $__THREW__) ) (i32.const 0) ) (call $invoke_vii (global.get $emscripten_longjmp) (local.get $0) (i32.const 1) ) (local.set $3 (i32.load (local.get $0) ) ) (i32.store (local.get $0) (i32.const 0) ) (local.set $0 (global.get $__threwValue) ) (block $label$4 (br_if $label$4 (i32.eqz (local.get $3) ) ) (br_if $label$4 (i32.eqz (local.tee $0 (i32.load (local.get $0) ) ) ) ) (br_if $label$1 (i32.eqz (call $testSetjmp (i32.load (local.get $3) ) (local.get $1) (local.get $2) ) ) ) (call $setTempRet0 (local.get $0) ) ) (local.set $0 (call $getTempRet0) ) (br $label$3) ) ) (call $free (local.get $1) ) (return) ) (call $free (local.get $1) ) (call $emscripten_longjmp (local.get $3) (local.get $0) ) (unreachable) ) ;; custom section "dylink.0", size 6 ;; custom section "producers", size 112 ;; features section: mutable-globals ) binaryen-version_108/test/lld/shared_longjmp.wat.out000066400000000000000000000102651423707623100230220ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 1)) (data $.bss (global.get $__memory_base) "\00\00\00\00\00\00\00\00") (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__memory_base" (global $__memory_base i32)) (import "env" "__table_base" (global $__table_base i32)) (import "GOT.mem" "__THREW__" (global $__THREW__ (mut i32))) (import "GOT.func" "emscripten_longjmp" (global $emscripten_longjmp (mut i32))) (import "GOT.mem" "__threwValue" (global $__threwValue (mut i32))) (import "env" "malloc" (func $malloc (param i32) (result i32))) (import "env" "saveSetjmp" (func $saveSetjmp (param i32 i32 i32 i32) (result i32))) (import "env" "getTempRet0" (func $getTempRet0 (result i32))) (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32))) (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32))) (import "env" "testSetjmp" (func $testSetjmp (param i32 i32 i32) (result i32))) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (import "env" "free" (func $free (param i32))) (global $global$0 i32 (i32.const 0)) (global $global$1 i32 (i32.const 4)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "_start" (func $_start)) (export "__THREW__" (global $global$0)) (export "__threwValue" (global $global$1)) (export "dynCall_vii" (func $dynCall_vii)) (func $__wasm_call_ctors (call $__wasm_apply_data_relocs) ) (func $__wasm_apply_data_relocs (nop) ) (func $_start (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (i32.store (local.tee $0 (call $malloc (i32.const 40) ) ) (i32.const 0) ) (local.set $1 (call $saveSetjmp (local.get $0) (i32.const 1) (local.get $0) (i32.const 4) ) ) (local.set $2 (call $getTempRet0) ) (local.set $0 (i32.const 0) ) (block $label$1 (block $label$2 (loop $label$3 (br_if $label$2 (local.get $0) ) (i32.store (local.tee $0 (global.get $__THREW__) ) (i32.const 0) ) (call $invoke_vii (global.get $emscripten_longjmp) (local.get $0) (i32.const 1) ) (local.set $3 (i32.load (local.get $0) ) ) (i32.store (local.get $0) (i32.const 0) ) (local.set $0 (global.get $__threwValue) ) (block $label$4 (br_if $label$4 (i32.eqz (local.get $3) ) ) (br_if $label$4 (i32.eqz (local.tee $0 (i32.load (local.get $0) ) ) ) ) (br_if $label$1 (i32.eqz (call $testSetjmp (i32.load (local.get $3) ) (local.get $1) (local.get $2) ) ) ) (call $setTempRet0 (local.get $0) ) ) (local.set $0 (call $getTempRet0) ) (br $label$3) ) ) (call $free (local.get $1) ) (return) ) (call $free (local.get $1) ) (call $emscripten_longjmp (local.get $3) (local.get $0) ) (unreachable) ) (func $dynCall_vii (param $fptr i32) (param $0 i32) (param $1 i32) (call_indirect (type $i32_i32_=>_none) (local.get $0) (local.get $1) (local.get $fptr) ) ) ) (; --BEGIN METADATA -- { "declares": [ "malloc", "saveSetjmp", "getTempRet0", "emscripten_longjmp", "testSetjmp", "setTempRet0", "free" ], "globalImports": [ "__memory_base", "__table_base", "__THREW__", "emscripten_longjmp", "__threwValue" ], "exports": [ "__wasm_call_ctors", "_start", "dynCall_vii" ], "namedGlobals": { "__THREW__" : "0", "__threwValue" : "4" }, "invokeFuncs": [ "invoke_vii" ], "mainReadsParams": 0, "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/standalone-wasm-with-start.wat000066400000000000000000000006461423707623100244230ustar00rootroot00000000000000(module (memory $0 2) (table $0 1 1 funcref) (elem (i32.const 0) $foo) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (export "memory" (memory $0)) (export "_start" (func $_start)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $_start (result i32) (nop) ) (func $foo (result i32)) ) binaryen-version_108/test/lld/standalone-wasm-with-start.wat.out000066400000000000000000000013241423707623100252230ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (memory $0 2) (table $0 1 1 funcref) (elem (i32.const 0) $foo) (export "memory" (memory $0)) (export "_start" (func $_start)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $_start (result i32) (nop) ) (func $foo (result i32) (nop) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ ], "exports": [ "_start" ], "namedGlobals": { "__heap_base" : "66112", "__data_end" : "576" }, "invokeFuncs": [ ], "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/standalone-wasm.wat000066400000000000000000000010001423707623100223000ustar00rootroot00000000000000(module (memory $0 2) (table $0 1 1 funcref) (elem (i32.const 0) $foo) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (export "memory" (memory $0)) (export "main" (func $main)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $__original_main (result i32) (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) (func $foo (result i32)) ) binaryen-version_108/test/lld/standalone-wasm.wat.out000066400000000000000000000015501423707623100231200ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (memory $0 2) (table $0 1 1 funcref) (elem (i32.const 0) $foo) (export "memory" (memory $0)) (export "main" (func $main)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $__original_main (result i32) (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main) ) (func $foo (result i32) (nop) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ ], "exports": [ "main" ], "namedGlobals": { "__heap_base" : "66112", "__data_end" : "576" }, "invokeFuncs": [ ], "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/standalone-wasm2.wat000066400000000000000000000007571423707623100224040ustar00rootroot00000000000000(module (memory $0 2) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (export "memory" (memory $0)) (export "main" (func $main)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $__original_main (param $0 i32) (param $1 i32) (result i32) (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main (local.get $0) (local.get $1)) ) ) binaryen-version_108/test/lld/standalone-wasm2.wat.out000066400000000000000000000014551423707623100232060ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (memory $0 2) (export "memory" (memory $0)) (export "main" (func $main)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $__original_main (param $0 i32) (param $1 i32) (result i32) (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (call $__original_main (local.get $0) (local.get $1) ) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ ], "exports": [ "main" ], "namedGlobals": { "__heap_base" : "66112", "__data_end" : "576" }, "invokeFuncs": [ ], "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/lld/standalone-wasm3.wat000066400000000000000000000005361423707623100224000ustar00rootroot00000000000000(module (memory $0 2) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (export "memory" (memory $0)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $__original_main (param $0 i32) (param $1 i32) (result i32) (nop) ) ) binaryen-version_108/test/lld/standalone-wasm3.wat.out000066400000000000000000000012101423707623100231740ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 66112)) (global $global$1 i32 (i32.const 66112)) (global $global$2 i32 (i32.const 576)) (memory $0 2) (export "memory" (memory $0)) (export "__heap_base" (global $global$1)) (export "__data_end" (global $global$2)) (func $__original_main (param $0 i32) (param $1 i32) (result i32) (nop) ) ) (; --BEGIN METADATA -- { "declares": [ ], "globalImports": [ ], "exports": [ ], "namedGlobals": { "__heap_base" : "66112", "__data_end" : "576" }, "invokeFuncs": [ ], "features": [ ] } -- END METADATA -- ;) binaryen-version_108/test/mem.cpp000066400000000000000000000026771423707623100172220ustar00rootroot00000000000000#include #include extern "C" { int EMSCRIPTEN_KEEPALIVE loadi8(size_t addr) { return ((int8_t*)addr)[0]; } int EMSCRIPTEN_KEEPALIVE loadi16(size_t addr) { return ((int16_t*)addr)[0]; } int EMSCRIPTEN_KEEPALIVE loadi32(size_t addr) { return ((int32_t*)addr)[0]; } int EMSCRIPTEN_KEEPALIVE loadu8(size_t addr) { return ((uint8_t*)addr)[0]; } int EMSCRIPTEN_KEEPALIVE loadu16(size_t addr) { return ((uint16_t*)addr)[0]; } int EMSCRIPTEN_KEEPALIVE loadu32(size_t addr) { return ((uint32_t*)addr)[0]; } double EMSCRIPTEN_KEEPALIVE loadf32(size_t addr) { return ((float*)addr)[0]; } double EMSCRIPTEN_KEEPALIVE loadf64(size_t addr) { return ((double*)addr)[0]; } void EMSCRIPTEN_KEEPALIVE storei8(size_t addr, int8_t v) { ((int8_t*)addr)[0] = v; } void EMSCRIPTEN_KEEPALIVE storei16(size_t addr, int16_t v) { ((int16_t*)addr)[0] = v; } void EMSCRIPTEN_KEEPALIVE storei32(size_t addr, int32_t v) { ((int32_t*)addr)[0] = v; } void EMSCRIPTEN_KEEPALIVE storeu8(size_t addr, uint8_t v) { ((uint8_t*)addr)[0] = v; } void EMSCRIPTEN_KEEPALIVE storeu16(size_t addr, uint16_t v) { ((uint16_t*)addr)[0] = v; } void EMSCRIPTEN_KEEPALIVE storeu32(size_t addr, uint32_t v) { ((uint32_t*)addr)[0] = v; } void EMSCRIPTEN_KEEPALIVE storef32(size_t addr, float v) { ((float*)addr)[0] = v; } void EMSCRIPTEN_KEEPALIVE storef64(size_t addr, double v) { ((double*)addr)[0] = v; } int* EMSCRIPTEN_KEEPALIVE get_stack() { int t; return &t; } } binaryen-version_108/test/mem.emcc000066400000000000000000000000271423707623100173320ustar00rootroot00000000000000["-s", "ASSERTIONS=0"] binaryen-version_108/test/mem.post.js000066400000000000000000000020001423707623100200140ustar00rootroot00000000000000 function test(name) { Module.print(name); function doTest(x) { // write to 0, as 0-8 is normally unused anyhow Module['_store' + name](0, x); Module.print(' ' + [x] + ' ==> ' + Module['_load' + name](0)); } doTest(0); doTest(1); doTest(-1); doTest(0.5); doTest(-0.5); doTest(1.4); doTest(-1.4); doTest(1.6); doTest(-1.6); doTest(5.1); doTest(5.3); doTest(5.7); doTest(5.9); doTest(1 << 10); doTest(1 << 20); doTest(-1 | 0); doTest((-1 | 0) + 1); doTest((-1 | 0) - 1); doTest(-1 >>> 0); doTest((-1 >>> 0) + 1); doTest((-1 >>> 0) - 1); Module.print(' pre ==> ' + Module['_load' + name](0)); HEAPU8[0] = 10; HEAPU8[1] = 20; HEAPU8[2] = 30; HEAPU8[3] = 40; HEAPU8[4] = 50; HEAPU8[5] = 99; HEAPU8[6] = 125; HEAPU8[7] = 250; Module.print(' post ==> ' + Module['_load' + name](0)); } test('i8'); test('i16'); test('i32'); test('u8'); test('u16'); test('u32'); test('f32'); test('f64'); Module.print('stack: ' + (Module['_get_stack']() > 8)); binaryen-version_108/test/mem.txt000066400000000000000000000054421423707623100172500ustar00rootroot00000000000000i8 0 ==> 0 1 ==> 1 -1 ==> -1 0.5 ==> 0 -0.5 ==> 0 1.4 ==> 1 -1.4 ==> -1 1.6 ==> 1 -1.6 ==> -1 5.1 ==> 5 5.3 ==> 5 5.7 ==> 5 5.9 ==> 5 1024 ==> 0 1048576 ==> 0 -1 ==> -1 0 ==> 0 -2 ==> -2 4294967295 ==> -1 4294967296 ==> 0 4294967294 ==> -2 pre ==> -2 post ==> 10 i16 0 ==> 0 1 ==> 1 -1 ==> -1 0.5 ==> 0 -0.5 ==> 0 1.4 ==> 1 -1.4 ==> -1 1.6 ==> 1 -1.6 ==> -1 5.1 ==> 5 5.3 ==> 5 5.7 ==> 5 5.9 ==> 5 1024 ==> 1024 1048576 ==> 0 -1 ==> -1 0 ==> 0 -2 ==> -2 4294967295 ==> -1 4294967296 ==> 0 4294967294 ==> -2 pre ==> -2 post ==> 5130 i32 0 ==> 0 1 ==> 1 -1 ==> -1 0.5 ==> 0 -0.5 ==> 0 1.4 ==> 1 -1.4 ==> -1 1.6 ==> 1 -1.6 ==> -1 5.1 ==> 5 5.3 ==> 5 5.7 ==> 5 5.9 ==> 5 1024 ==> 1024 1048576 ==> 1048576 -1 ==> -1 0 ==> 0 -2 ==> -2 4294967295 ==> -1 4294967296 ==> 0 4294967294 ==> -2 pre ==> -2 post ==> 673059850 u8 0 ==> 0 1 ==> 1 -1 ==> 255 0.5 ==> 0 -0.5 ==> 0 1.4 ==> 1 -1.4 ==> 255 1.6 ==> 1 -1.6 ==> 255 5.1 ==> 5 5.3 ==> 5 5.7 ==> 5 5.9 ==> 5 1024 ==> 0 1048576 ==> 0 -1 ==> 255 0 ==> 0 -2 ==> 254 4294967295 ==> 255 4294967296 ==> 0 4294967294 ==> 254 pre ==> 254 post ==> 10 u16 0 ==> 0 1 ==> 1 -1 ==> 65535 0.5 ==> 0 -0.5 ==> 0 1.4 ==> 1 -1.4 ==> 65535 1.6 ==> 1 -1.6 ==> 65535 5.1 ==> 5 5.3 ==> 5 5.7 ==> 5 5.9 ==> 5 1024 ==> 1024 1048576 ==> 0 -1 ==> 65535 0 ==> 0 -2 ==> 65534 4294967295 ==> 65535 4294967296 ==> 0 4294967294 ==> 65534 pre ==> 65534 post ==> 5130 u32 0 ==> 0 1 ==> 1 -1 ==> -1 0.5 ==> 0 -0.5 ==> 0 1.4 ==> 1 -1.4 ==> -1 1.6 ==> 1 -1.6 ==> -1 5.1 ==> 5 5.3 ==> 5 5.7 ==> 5 5.9 ==> 5 1024 ==> 1024 1048576 ==> 1048576 -1 ==> -1 0 ==> 0 -2 ==> -2 4294967295 ==> -1 4294967296 ==> 0 4294967294 ==> -2 pre ==> -2 post ==> 673059850 f32 0 ==> 0 1 ==> 1 -1 ==> -1 0.5 ==> 0.5 -0.5 ==> -0.5 1.4 ==> 1.399999976158142 -1.4 ==> -1.399999976158142 1.6 ==> 1.600000023841858 -1.6 ==> -1.600000023841858 5.1 ==> 5.099999904632568 5.3 ==> 5.300000190734863 5.7 ==> 5.699999809265137 5.9 ==> 5.900000095367432 1024 ==> 1024 1048576 ==> 1048576 -1 ==> -1 0 ==> 0 -2 ==> -2 4294967295 ==> 4294967296 4294967296 ==> 4294967296 4294967294 ==> 4294967296 pre ==> 4294967296 post ==> 8.775107173558151e-15 f64 0 ==> 0 1 ==> 1 -1 ==> -1 0.5 ==> 0.5 -0.5 ==> -0.5 1.4 ==> 1.4 -1.4 ==> -1.4 1.6 ==> 1.6 -1.6 ==> -1.6 5.1 ==> 5.1 5.3 ==> 5.3 5.7 ==> 5.7 5.9 ==> 5.9 1024 ==> 1024 1048576 ==> 1048576 -1 ==> -1 0 ==> 0 -2 ==> -2 4294967295 ==> 4294967295 4294967296 ==> 4294967296 4294967294 ==> 4294967294 pre ==> 4294967294 post ==> -1.066886858533604e+282 stack: true binaryen-version_108/test/memory-import.wast000066400000000000000000000002571423707623100214500ustar00rootroot00000000000000(module (type $0 (func (result i32))) (import "env" "memory" (memory $0 1 1)) (func $foo (type $0) (result i32) (i32.load offset=13 (i32.const 37) ) ) ) binaryen-version_108/test/memory-import.wast.from-wast000066400000000000000000000002321423707623100233570ustar00rootroot00000000000000(module (type $0 (func (result i32))) (import "env" "memory" (memory $0 1 1)) (func $foo (result i32) (i32.load offset=13 (i32.const 37) ) ) ) binaryen-version_108/test/memory-import.wast.fromBinary000066400000000000000000000002331423707623100235510ustar00rootroot00000000000000(module (type $0 (func (result i32))) (import "env" "memory" (memory $0 1 1)) (func $foo (result i32) (i32.load offset=13 (i32.const 37) ) ) ) binaryen-version_108/test/memory-import.wast.fromBinary.noDebugInfo000066400000000000000000000002531423707623100257510ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $mimport$0 1 1)) (func $0 (result i32) (i32.load offset=13 (i32.const 37) ) ) ) binaryen-version_108/test/memory-import64.wast000066400000000000000000000002631423707623100216170ustar00rootroot00000000000000(module (type $0 (func (result i32))) (import "env" "memory" (memory $0 i64 1 1)) (func $foo (type $0) (result i32) (i32.load offset=13 (i64.const 37) ) ) ) binaryen-version_108/test/memory-import64.wast.from-wast000066400000000000000000000002361423707623100235350ustar00rootroot00000000000000(module (type $0 (func (result i32))) (import "env" "memory" (memory $0 i64 1 1)) (func $foo (result i32) (i32.load offset=13 (i64.const 37) ) ) ) binaryen-version_108/test/memory-import64.wast.fromBinary000066400000000000000000000002371423707623100237270ustar00rootroot00000000000000(module (type $0 (func (result i32))) (import "env" "memory" (memory $0 i64 1 1)) (func $foo (result i32) (i32.load offset=13 (i64.const 37) ) ) ) binaryen-version_108/test/memory-import64.wast.fromBinary.noDebugInfo000066400000000000000000000002571423707623100261270ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $mimport$0 i64 1 1)) (func $0 (result i32) (i32.load offset=13 (i64.const 37) ) ) ) binaryen-version_108/test/memory-import64.wast.wasm.fromBinary000066400000000000000000000002471423707623100246760ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $0 1 1 i64)) (func $0 (result i32) (i32.load offset=13 (i64.const 37) ) ) ) binaryen-version_108/test/memory-shared.wast000066400000000000000000000000471423707623100214010ustar00rootroot00000000000000(module (memory $0 (shared 23 256)) ) binaryen-version_108/test/memory-shared.wast.from-wast000066400000000000000000000000471423707623100233170ustar00rootroot00000000000000(module (memory $0 (shared 23 256)) ) binaryen-version_108/test/memory-shared.wast.fromBinary000066400000000000000000000000501423707623100235020ustar00rootroot00000000000000(module (memory $0 (shared 23 256)) ) binaryen-version_108/test/memory-shared.wast.fromBinary.noDebugInfo000066400000000000000000000000501423707623100257000ustar00rootroot00000000000000(module (memory $0 (shared 23 256)) ) binaryen-version_108/test/metadatas.wasm000066400000000000000000000004051423707623100205570ustar00rootroot00000000000000asm`a  emscripten_metadata€Å producers processed-byclang¤9.0.0 (git@github.com:llvm-mirror/clang.git 03591ee3511478e575dbf3306a3982f842f1e0fd) (git@github.com:llvm-mirror/llvm.git 5b5290a1ba58fad5f5052ebca8b244405f3b73aa)binaryen-version_108/test/metadatas.wasm.fromBinary000066400000000000000000000002571423707623100226730ustar00rootroot00000000000000(module (type $none_=>_none (func)) (export "a" (func $0)) (func $0 (nop) ) ;; custom section "emscripten_metadata", size 7 ;; custom section "producers", size 187 ) binaryen-version_108/test/metadce/000077500000000000000000000000001423707623100173265ustar00rootroot00000000000000binaryen-version_108/test/metadce/all-outside.wast000066400000000000000000000000111423707623100224400ustar00rootroot00000000000000(module) binaryen-version_108/test/metadce/all-outside.wast.dced000066400000000000000000000000121423707623100233370ustar00rootroot00000000000000(module ) binaryen-version_108/test/metadce/all-outside.wast.dced.stdout000066400000000000000000000001121423707623100246610ustar00rootroot00000000000000unused: island unused: lonely unused: loop1 unused: loop2 unused: reverse binaryen-version_108/test/metadce/all-outside.wast.graph.txt000066400000000000000000000007631423707623100243740ustar00rootroot00000000000000[ { "name": "root1", "reaches": ["two", "three"], "root": true }, { "name": "root2", "reaches": ["three"], "root": true }, { "name": "two", "reaches": ["two"], }, { "name": "three", }, { "name": "island", "reaches": ["island"], }, { "name": "loop1", "reaches": ["loop2"], }, { "name": "loop2", "reaches": ["loop1"], }, { "name": "lonely", }, { "name": "reverse", "reaches": ["root1"], }, ] binaryen-version_108/test/metadce/corners.wast000066400000000000000000000013751423707623100217070ustar00rootroot00000000000000(module (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) (global $STACKTOP (mut i32) (global.get $STACKTOP$asm2wasm$import)) (import "env" "UNUSEDTOP" (global $UNUSEDTOP$asm2wasm$import i32)) (global $UNUSEDTOP (mut i32) (global.get $UNUSEDTOP$asm2wasm$import)) (import "env" "imported_twice" (func $imported_twice_a)) ;; and used just once, (import "env" "imported_twice" (func $imported_twice_b)) ;; but the other should not kill the import for both! (import "env" "an-imported-table-func" (func $imported_table_func)) (import "env" "table" (table 10 10 funcref)) (elem (i32.const 0) $imported_table_func) (export "stackAlloc" (func $stackAlloc)) (func $stackAlloc (drop (global.get $STACKTOP)) (call $imported_twice_a) ) ) binaryen-version_108/test/metadce/corners.wast.dced000066400000000000000000000010221423707623100225720ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "table" (table $timport$0 10 10 funcref)) (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) (import "env" "imported_twice" (func $imported_twice_a)) (import "env" "an-imported-table-func" (func $imported_table_func)) (global $STACKTOP (mut i32) (global.get $STACKTOP$asm2wasm$import)) (elem (i32.const 0) $imported_table_func) (export "stackAlloc" (func $stackAlloc)) (func $stackAlloc (drop (global.get $STACKTOP) ) (call $imported_twice_a) ) ) binaryen-version_108/test/metadce/corners.wast.dced.stdout000066400000000000000000000000641423707623100241200ustar00rootroot00000000000000unused: global$UNUSEDTOP$2 unused: ignorable import binaryen-version_108/test/metadce/corners.wast.graph.txt000066400000000000000000000003621423707623100236200ustar00rootroot00000000000000[ { "name": "ignorable import", "import": ["non", "existent"] }, { "name": "imported_twice", "import": ["env", "imported_twice"] }, { "name": "stackAllocGood", "export": "stackAlloc", "root": true } ] binaryen-version_108/test/metadce/no-outside.wast000066400000000000000000000004371423707623100223200ustar00rootroot00000000000000(module (import "env" "js_func" (func $a_js_func)) (import "env" "js_func_unused" (func $an_unused_js_func)) (export "wasm_func" (func $a_wasm_func)) (export "wasm_func_unused" (func $an_unused_wasm_func)) (func $a_wasm_func (call $a_js_func) ) (func $an_unused_wasm_func ) ) binaryen-version_108/test/metadce/no-outside.wast.dced000066400000000000000000000000121423707623100232030ustar00rootroot00000000000000(module ) binaryen-version_108/test/metadce/no-outside.wast.dced.stdout000066400000000000000000000001731423707623100245340ustar00rootroot00000000000000unused: export$wasm_func$4 unused: export$wasm_func_unused$5 unused: func$a_wasm_func$0 unused: func$an_unused_wasm_func$1 binaryen-version_108/test/metadce/no-outside.wast.graph.txt000066400000000000000000000000061423707623100242260ustar00rootroot00000000000000[ ] binaryen-version_108/test/metadce/outside.wast000066400000000000000000000015241423707623100217040ustar00rootroot00000000000000(module (import "env" "js_func" (func $a_js_func)) (import "env" "js_func_unused" (func $an_unused_js_func)) (import "env" "memory" (memory $0 256 256)) (import "env" "table" (table 10 10 funcref)) (export "wasm_func" (func $a_wasm_func)) (export "wasm_func_unused" (func $an_unused_wasm_func)) (global $__THREW__ (mut i32) (i32.const 0)) (global $__THREW__unused (mut i32) (i32.const 0)) (global $from_segment (mut i32) (i32.const 0)) (global $from_segment_2 (mut i32) (i32.const 0)) (global $from_segment_never_used (mut i32) (i32.const 0)) (data (i32.const 1024) "abcd") (data (global.get $from_segment) "abcd") (elem (global.get $from_segment_2) $table_func) (func $a_wasm_func (call $a_js_func) (drop (global.get $__THREW__)) ) (func $an_unused_wasm_func (drop (global.get $__THREW__unused)) ) (func $table_func ) ) binaryen-version_108/test/metadce/outside.wast.dced000066400000000000000000000011351423707623100226000ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "memory" (memory $0 256 256)) (data (i32.const 1024) "abcd") (data (global.get $from_segment) "abcd") (import "env" "table" (table $timport$0 10 10 funcref)) (import "env" "js_func" (func $a_js_func)) (global $__THREW__ (mut i32) (i32.const 0)) (global $from_segment (mut i32) (i32.const 0)) (global $from_segment_2 (mut i32) (i32.const 0)) (elem (global.get $from_segment_2) $table_func) (export "wasm_func" (func $a_wasm_func)) (func $table_func (nop) ) (func $a_wasm_func (call $a_js_func) (drop (global.get $__THREW__) ) ) ) binaryen-version_108/test/metadce/outside.wast.dced.stdout000066400000000000000000000003161423707623100241210ustar00rootroot00000000000000unused: export$wasm_func_unused$10 unused: func$an_unused_wasm_func$1 unused: global$__THREW__unused$4 unused: global$from_segment$5 unused: global$from_segment_2$6 unused: global$from_segment_never_used$7 binaryen-version_108/test/metadce/outside.wast.graph.txt000066400000000000000000000002441423707623100236200ustar00rootroot00000000000000[ { "name": "outside-entity", "reaches": ["inside-wasm-func"], "root": true }, { "name": "inside-wasm-func", "export": "wasm_func" } ] binaryen-version_108/test/metadce/rooted-export.wast000066400000000000000000000005041423707623100230400ustar00rootroot00000000000000(module (export "wasm_func_a" (func $a_wasm_func)) (export "wasm_func_b" (func $b_wasm_func)) (func $a_wasm_func (unreachable) ) (func $b_wasm_func (unreachable) ) (export "wasm_tag_a" (tag $a_wasm_tag)) (export "wasm_tag_b" (tag $b_wasm_tag)) (tag $a_wasm_tag (param i32)) (tag $b_wasm_tag (param i32)) ) binaryen-version_108/test/metadce/rooted-export.wast.dced000066400000000000000000000003521423707623100237370ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (tag $b_wasm_tag (param i32)) (export "wasm_func_b" (func $b_wasm_func)) (export "wasm_tag_b" (tag $b_wasm_tag)) (func $b_wasm_func (unreachable) ) ) binaryen-version_108/test/metadce/rooted-export.wast.dced.stdout000066400000000000000000000001551423707623100252610ustar00rootroot00000000000000unused: export$wasm_func_a$4 unused: export$wasm_tag_a$5 unused: func$a_wasm_func$0 unused: tag$a_wasm_tag$2 binaryen-version_108/test/metadce/rooted-export.wast.graph.txt000066400000000000000000000002641423707623100247610ustar00rootroot00000000000000[ { "name": "rooted-export-func", "root": true, "export": "wasm_func_b" }, { "name": "rooted-export-tag", "root": true, "export": "wasm_tag_b" } ] binaryen-version_108/test/metadce/spanning_cycle.wast000066400000000000000000000004741423707623100232270ustar00rootroot00000000000000(module (memory 1 1) (data "Hello, datacount section!") (import "env" "js_func" (func $a_js_func)) (export "wasm_func_a" (func $a_wasm_func)) (func $a_wasm_func ;; refer to the data segment to keep it around (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 25) ) (call $a_js_func) ) ) binaryen-version_108/test/metadce/spanning_cycle.wast.dced000066400000000000000000000004501423707623100241170ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "js_func" (func $a_js_func)) (memory $0 1 1) (data "Hello, datacount section!") (export "wasm_func_a" (func $a_wasm_func)) (func $a_wasm_func (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 25) ) (call $a_js_func) ) ) binaryen-version_108/test/metadce/spanning_cycle.wast.dced.stdout000066400000000000000000000000001423707623100254270ustar00rootroot00000000000000binaryen-version_108/test/metadce/spanning_cycle.wast.graph.txt000066400000000000000000000004001423707623100251320ustar00rootroot00000000000000[ { "name": "root", "root": true, "reaches": ["wasm_export"], }, { "name": "wasm_export", "export": "wasm_func_a" }, { "name": "outside_js_function", "reaches": ["wasm_export"], "import": ["env", "js_func"] } ] binaryen-version_108/test/metadce/spanning_cycle_unrooted.wast000066400000000000000000000002201423707623100251330ustar00rootroot00000000000000(module (import "env" "js_func" (func $a_js_func)) (export "wasm_func_a" (func $a_wasm_func)) (func $a_wasm_func (call $a_js_func) ) ) binaryen-version_108/test/metadce/spanning_cycle_unrooted.wast.dced000066400000000000000000000000121423707623100260300ustar00rootroot00000000000000(module ) binaryen-version_108/test/metadce/spanning_cycle_unrooted.wast.dced.stdout000066400000000000000000000001131423707623100273530ustar00rootroot00000000000000unused: func$a_wasm_func$0 unused: outside_js_function unused: wasm_export binaryen-version_108/test/metadce/spanning_cycle_unrooted.wast.graph.txt000066400000000000000000000002611423707623100270560ustar00rootroot00000000000000[ { "name": "wasm_export", "export": "wasm_func_a" }, { "name": "outside_js_function", "reaches": ["wasm_export"], "import": ["env", "js_func"] } ] binaryen-version_108/test/metadce/tag.wast000066400000000000000000000002711423707623100210010ustar00rootroot00000000000000(module (import "env" "imported_tag" (tag $t0)) (tag $t1) (export "test" (func $test)) (func $test (try (do (throw $t0) ) (catch $t1) ) ) ) binaryen-version_108/test/metadce/tag.wast.dced000066400000000000000000000003421423707623100216760ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "imported_tag" (tag $t0 (param))) (tag $t1 (param)) (export "test" (func $test)) (func $test (try $try (do (throw $t0) ) (catch $t1 (nop) ) ) ) ) binaryen-version_108/test/metadce/tag.wast.dced.stdout000066400000000000000000000000001423707623100232060ustar00rootroot00000000000000binaryen-version_108/test/metadce/tag.wast.graph.txt000066400000000000000000000002271423707623100227200ustar00rootroot00000000000000[ { "name": "tag_import", "import": ["env", "imported_tag"] }, { "name": "func_export", "root": true, "export": "test" } ] binaryen-version_108/test/metadce/threaded.wast000066400000000000000000000010151423707623100220030ustar00rootroot00000000000000(module (import "env" "js_func1" (func $js_func_1)) (import "env" "js_func2" (func $js_func_2)) (import "env" "js_func3" (func $js_func_3)) (import "env" "js_func4" (func $js_func_4)) (export "wasm_func1" (func $wasm_func_1)) (export "wasm_func2" (func $wasm_func_2)) (export "wasm_func3" (func $wasm_func_3)) (export "wasm_func4" (func $wasm_func_4)) (func $wasm_func_1 (call $js_func_2) ) (func $wasm_func_2 (call $js_func_3) ) (func $wasm_func_3 (call $js_func_4) ) (func $wasm_func_4 (nop) ) ) binaryen-version_108/test/metadce/threaded.wast.dced000066400000000000000000000007721423707623100227120ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "js_func4" (func $js_func_4)) (import "env" "js_func3" (func $js_func_3)) (import "env" "js_func2" (func $js_func_2)) (export "wasm_func1" (func $wasm_func_1)) (export "wasm_func2" (func $wasm_func_2)) (export "wasm_func3" (func $wasm_func_3)) (export "wasm_func4" (func $wasm_func_4)) (func $wasm_func_4 (nop) ) (func $wasm_func_3 (call $js_func_4) ) (func $wasm_func_2 (call $js_func_3) ) (func $wasm_func_1 (call $js_func_2) ) ) binaryen-version_108/test/metadce/threaded.wast.dced.stdout000066400000000000000000000000351423707623100242230ustar00rootroot00000000000000unused: outside_js_function1 binaryen-version_108/test/metadce/threaded.wast.graph.txt000066400000000000000000000013261423707623100237260ustar00rootroot00000000000000[ { "name": "wasm_export1", "export": "wasm_func1", "root": true }, { "name": "wasm_export2", "export": "wasm_func2" }, { "name": "wasm_export3", "export": "wasm_func3" }, { "name": "wasm_export4", "export": "wasm_func4" }, { "name": "outside_js_function1", "reaches": ["wasm_export1"], "import": ["env", "js_func1"] }, { "name": "outside_js_function2", "reaches": ["wasm_export2"], "import": ["env", "js_func2"] }, { "name": "outside_js_function3", "reaches": ["wasm_export3"], "import": ["env", "js_func3"] }, { "name": "outside_js_function4", "reaches": ["wasm_export4"], "import": ["env", "js_func4"] } ] binaryen-version_108/test/metadce/threaded_cycle.wast000066400000000000000000000010311423707623100231600ustar00rootroot00000000000000(module (import "env" "js_func1" (func $js_func_1)) (import "env" "js_func2" (func $js_func_2)) (import "env" "js_func3" (func $js_func_3)) (import "env" "js_func4" (func $js_func_4)) (export "wasm_func1" (func $wasm_func_1)) (export "wasm_func2" (func $wasm_func_2)) (export "wasm_func3" (func $wasm_func_3)) (export "wasm_func4" (func $wasm_func_4)) (func $wasm_func_1 (call $js_func_2) ) (func $wasm_func_2 (call $js_func_3) ) (func $wasm_func_3 (call $js_func_4) ) (func $wasm_func_4 (call $js_func_1) ) ) binaryen-version_108/test/metadce/threaded_cycle.wast.dced000066400000000000000000000010631423707623100240630ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "js_func4" (func $js_func_4)) (import "env" "js_func3" (func $js_func_3)) (import "env" "js_func2" (func $js_func_2)) (import "env" "js_func1" (func $js_func_1)) (export "wasm_func1" (func $wasm_func_1)) (export "wasm_func2" (func $wasm_func_2)) (export "wasm_func3" (func $wasm_func_3)) (export "wasm_func4" (func $wasm_func_4)) (func $wasm_func_4 (call $js_func_1) ) (func $wasm_func_3 (call $js_func_4) ) (func $wasm_func_2 (call $js_func_3) ) (func $wasm_func_1 (call $js_func_2) ) ) binaryen-version_108/test/metadce/threaded_cycle.wast.dced.stdout000066400000000000000000000000001423707623100253720ustar00rootroot00000000000000binaryen-version_108/test/metadce/threaded_cycle.wast.graph.txt000066400000000000000000000013271423707623100251060ustar00rootroot00000000000000[ { "name": "wasm_export1", "export": "wasm_func1", }, { "name": "wasm_export2", "export": "wasm_func2" }, { "name": "wasm_export3", "export": "wasm_func3", "root": true }, { "name": "wasm_export4", "export": "wasm_func4" }, { "name": "outside_js_function1", "reaches": ["wasm_export1"], "import": ["env", "js_func1"] }, { "name": "outside_js_function2", "reaches": ["wasm_export2"], "import": ["env", "js_func2"] }, { "name": "outside_js_function3", "reaches": ["wasm_export3"], "import": ["env", "js_func3"] }, { "name": "outside_js_function4", "reaches": ["wasm_export4"], "import": ["env", "js_func4"] } ] binaryen-version_108/test/metadce/threaded_unrooted.wast000066400000000000000000000010151423707623100237220ustar00rootroot00000000000000(module (import "env" "js_func1" (func $js_func_1)) (import "env" "js_func2" (func $js_func_2)) (import "env" "js_func3" (func $js_func_3)) (import "env" "js_func4" (func $js_func_4)) (export "wasm_func1" (func $wasm_func_1)) (export "wasm_func2" (func $wasm_func_2)) (export "wasm_func3" (func $wasm_func_3)) (export "wasm_func4" (func $wasm_func_4)) (func $wasm_func_1 (call $js_func_2) ) (func $wasm_func_2 (call $js_func_3) ) (func $wasm_func_3 (call $js_func_4) ) (func $wasm_func_4 (nop) ) ) binaryen-version_108/test/metadce/threaded_unrooted.wast.dced000066400000000000000000000000121423707623100246140ustar00rootroot00000000000000(module ) binaryen-version_108/test/metadce/threaded_unrooted.wast.dced.stdout000066400000000000000000000004641423707623100261500ustar00rootroot00000000000000unused: func$wasm_func_1$0 unused: func$wasm_func_2$1 unused: func$wasm_func_3$2 unused: func$wasm_func_4$3 unused: outside_js_function1 unused: outside_js_function2 unused: outside_js_function3 unused: outside_js_function4 unused: wasm_export1 unused: wasm_export2 unused: wasm_export3 unused: wasm_export4 binaryen-version_108/test/metadce/threaded_unrooted.wast.graph.txt000066400000000000000000000013051423707623100256420ustar00rootroot00000000000000[ { "name": "wasm_export1", "export": "wasm_func1", }, { "name": "wasm_export2", "export": "wasm_func2" }, { "name": "wasm_export3", "export": "wasm_func3" }, { "name": "wasm_export4", "export": "wasm_func4" }, { "name": "outside_js_function1", "reaches": ["wasm_export1"], "import": ["env", "js_func1"] }, { "name": "outside_js_function2", "reaches": ["wasm_export2"], "import": ["env", "js_func2"] }, { "name": "outside_js_function3", "reaches": ["wasm_export3"], "import": ["env", "js_func3"] }, { "name": "outside_js_function4", "reaches": ["wasm_export4"], "import": ["env", "js_func4"] } ] binaryen-version_108/test/metadce/threaded_unrooted_cycle.wast000066400000000000000000000010311423707623100250770ustar00rootroot00000000000000(module (import "env" "js_func1" (func $js_func_1)) (import "env" "js_func2" (func $js_func_2)) (import "env" "js_func3" (func $js_func_3)) (import "env" "js_func4" (func $js_func_4)) (export "wasm_func1" (func $wasm_func_1)) (export "wasm_func2" (func $wasm_func_2)) (export "wasm_func3" (func $wasm_func_3)) (export "wasm_func4" (func $wasm_func_4)) (func $wasm_func_1 (call $js_func_2) ) (func $wasm_func_2 (call $js_func_3) ) (func $wasm_func_3 (call $js_func_4) ) (func $wasm_func_4 (call $js_func_1) ) ) binaryen-version_108/test/metadce/threaded_unrooted_cycle.wast.dced000066400000000000000000000000121423707623100257730ustar00rootroot00000000000000(module ) binaryen-version_108/test/metadce/threaded_unrooted_cycle.wast.dced.stdout000066400000000000000000000004641423707623100273270ustar00rootroot00000000000000unused: func$wasm_func_1$0 unused: func$wasm_func_2$1 unused: func$wasm_func_3$2 unused: func$wasm_func_4$3 unused: outside_js_function1 unused: outside_js_function2 unused: outside_js_function3 unused: outside_js_function4 unused: wasm_export1 unused: wasm_export2 unused: wasm_export3 unused: wasm_export4 binaryen-version_108/test/metadce/threaded_unrooted_cycle.wast.graph.txt000066400000000000000000000013051423707623100270210ustar00rootroot00000000000000[ { "name": "wasm_export1", "export": "wasm_func1", }, { "name": "wasm_export2", "export": "wasm_func2" }, { "name": "wasm_export3", "export": "wasm_func3" }, { "name": "wasm_export4", "export": "wasm_func4" }, { "name": "outside_js_function1", "reaches": ["wasm_export1"], "import": ["env", "js_func1"] }, { "name": "outside_js_function2", "reaches": ["wasm_export2"], "import": ["env", "js_func2"] }, { "name": "outside_js_function3", "reaches": ["wasm_export3"], "import": ["env", "js_func3"] }, { "name": "outside_js_function4", "reaches": ["wasm_export4"], "import": ["env", "js_func4"] } ] binaryen-version_108/test/min.wast000066400000000000000000000024751423707623100174170ustar00rootroot00000000000000(module (type $0 (func (param f32) (result f32))) (type $1 (func (param i32 i32) (result f32))) (type $2 (func (param i32) (result i32))) (type $3 (func (param i32 i32 i32) (result i32))) (memory $0 256 256) (export "floats" (func $floats)) (func $floats (type $0) (param $f f32) (result f32) (local $t f32) (f32.add (local.get $t) (local.get $f) ) ) (func $neg (type $1) (param $k i32) (param $p i32) (result f32) (local $n f32) (local.tee $n (f32.neg (block $block0 (result f32) (i32.store (local.get $k) (local.get $p) ) (f32.load (local.get $k) ) ) ) ) ) (func $littleswitch (type $2) (param $x i32) (result i32) (block $topmost (result i32) (block $switch-case$2 (block $switch-case$1 (br_table $switch-case$1 $switch-case$2 $switch-case$1 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $topmost (i32.const 1) ) ) (br $topmost (i32.const 2) ) (i32.const 0) ) ) (func $f1 (type $3) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) (block $topmost (result i32) (local.get $i3) ) ) ) binaryen-version_108/test/min.wast.from-wast000066400000000000000000000021521423707623100213250ustar00rootroot00000000000000(module (type $0 (func (param f32) (result f32))) (type $1 (func (param i32 i32) (result f32))) (type $2 (func (param i32) (result i32))) (type $3 (func (param i32 i32 i32) (result i32))) (memory $0 256 256) (export "floats" (func $floats)) (func $floats (param $f f32) (result f32) (local $t f32) (f32.add (local.get $t) (local.get $f) ) ) (func $neg (param $k i32) (param $p i32) (result f32) (local $n f32) (local.tee $n (f32.neg (block $block0 (result f32) (i32.store (local.get $k) (local.get $p) ) (f32.load (local.get $k) ) ) ) ) ) (func $littleswitch (param $x i32) (result i32) (block $topmost (result i32) (block $switch-case$2 (block $switch-case$1 (br_table $switch-case$1 $switch-case$2 $switch-case$1 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $topmost (i32.const 1) ) ) (br $topmost (i32.const 2) ) (i32.const 0) ) ) (func $f1 (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) (block $topmost (result i32) (local.get $i3) ) ) ) binaryen-version_108/test/min.wast.fromBinary000066400000000000000000000020311423707623100215120ustar00rootroot00000000000000(module (type $0 (func (param f32) (result f32))) (type $1 (func (param i32 i32) (result f32))) (type $2 (func (param i32) (result i32))) (type $3 (func (param i32 i32 i32) (result i32))) (memory $0 256 256) (export "floats" (func $floats)) (func $floats (param $f f32) (result f32) (local $t f32) (f32.add (local.get $t) (local.get $f) ) ) (func $neg (param $k i32) (param $p i32) (result f32) (local $n f32) (local.tee $n (f32.neg (block $label$1 (result f32) (i32.store (local.get $k) (local.get $p) ) (f32.load (local.get $k) ) ) ) ) ) (func $littleswitch (param $x i32) (result i32) (block $label$1 (result i32) (block $label$2 (block $label$3 (br_table $label$3 $label$2 $label$3 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $label$1 (i32.const 1) ) ) (br $label$1 (i32.const 2) ) ) ) (func $f1 (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) (local.get $i3) ) ) binaryen-version_108/test/min.wast.fromBinary.noDebugInfo000066400000000000000000000020551423707623100237160ustar00rootroot00000000000000(module (type $f32_=>_f32 (func (param f32) (result f32))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (memory $0 256 256) (export "floats" (func $0)) (func $0 (param $0 f32) (result f32) (local $1 f32) (f32.add (local.get $1) (local.get $0) ) ) (func $1 (param $0 i32) (param $1 i32) (result f32) (local $2 f32) (local.tee $2 (f32.neg (block $label$1 (result f32) (i32.store (local.get $0) (local.get $1) ) (f32.load (local.get $0) ) ) ) ) ) (func $2 (param $0 i32) (result i32) (block $label$1 (result i32) (block $label$2 (block $label$3 (br_table $label$3 $label$2 $label$3 (i32.sub (local.get $0) (i32.const 1) ) ) ) (br $label$1 (i32.const 1) ) ) (br $label$1 (i32.const 2) ) ) ) (func $3 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local.get $2) ) ) binaryen-version_108/test/multi-table.minified.txt000066400000000000000000000003721423707623100224710ustar00rootroot00000000000000(module(type $none_=>_none (func))(import "a" "b" (table $t1 1 10 funcref))(elem (table $t1) (i32.const 0) func $f)(table $t2 3 3 funcref)(elem (table $t2) (i32.const 0) func $f)(elem (table $t2) (i32.const 1) func $f $g)(func $f(nop))(func $g(nop)))binaryen-version_108/test/multi-table.wast000066400000000000000000000024231423707623100210440ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $A (struct)) (global $g1 (ref null $none_=>_none) (ref.func $f)) (global $g2 i32 (i32.const 0)) (import "a" "b" (table $t1 1 10 funcref)) (table $t2 3 3 funcref) (table $t3 4 4 funcref) (table $textern 0 externref) ;; A table with a typed function references specialized type. (table $tspecial 5 5 (ref null $none_=>_none)) ;; add to $t1 (elem (i32.const 0) $f) ;; add to $t2 (elem (table $t2) (i32.const 0) func $f) (elem $activeNonZeroOffset (table $t2) (offset (i32.const 1)) func $f $g) (elem $e3-1 (table $t3) (global.get $g2) funcref (ref.func $f) (ref.null func)) (elem $e3-2 (table $t3) (offset (i32.const 2)) (ref null $none_=>_none) (item ref.func $f) (item (ref.func $g))) (elem $passive-1 func $f $g) (elem $passive-2 funcref (item ref.func $f) (item (ref.func $g)) (ref.null func)) (elem $passive-3 (ref null $none_=>_none) (item ref.func $f) (item (ref.func $g)) (ref.null $none_=>_none) (global.get $g1)) (elem $empty func) (elem $declarative declare func $h) ;; This elem will be emitted as usesExpressions because of the type of the ;; table. (elem $especial (table $tspecial) (i32.const 0) (ref null $none_=>_none) $f $h) (func $f (drop (ref.func $h))) (func $g) (func $h) ) binaryen-version_108/test/multi-table.wast.from-wast000066400000000000000000000017521423707623100227660ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "a" "b" (table $t1 1 10 funcref)) (global $g1 (ref null $none_=>_none) (ref.func $f)) (global $g2 i32 (i32.const 0)) (table $t2 3 3 funcref) (table $t3 4 4 funcref) (table $textern 0 anyref) (table $tspecial 5 5 (ref null $none_=>_none)) (elem $0 (table $t1) (i32.const 0) func $f) (elem $1 (table $t2) (i32.const 0) func $f) (elem $activeNonZeroOffset (table $t2) (i32.const 1) func $f $g) (elem $e3-1 (table $t3) (global.get $g2) funcref (ref.func $f) (ref.null func)) (elem $e3-2 (table $t3) (i32.const 2) func $f $g) (elem $passive-1 func $f $g) (elem $passive-2 funcref (ref.func $f) (ref.func $g) (ref.null func)) (elem $passive-3 (ref null $none_=>_none) (ref.func $f) (ref.func $g) (ref.null $none_=>_none) (global.get $g1)) (elem $empty func) (elem $especial (table $tspecial) (i32.const 0) (ref null $none_=>_none) (ref.func $f) (ref.func $h)) (func $f (drop (ref.func $h) ) ) (func $g (nop) ) (func $h (nop) ) ) binaryen-version_108/test/multi-table.wast.fromBinary000066400000000000000000000017531423707623100231600ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "a" "b" (table $t1 1 10 funcref)) (global $g1 (ref null $none_=>_none) (ref.func $f)) (global $g2 i32 (i32.const 0)) (table $t2 3 3 funcref) (table $t3 4 4 funcref) (table $textern 0 anyref) (table $tspecial 5 5 (ref null $none_=>_none)) (elem $0 (table $t1) (i32.const 0) func $f) (elem $1 (table $t2) (i32.const 0) func $f) (elem $activeNonZeroOffset (table $t2) (i32.const 1) func $f $g) (elem $e3-1 (table $t3) (global.get $g2) funcref (ref.func $f) (ref.null func)) (elem $e3-2 (table $t3) (i32.const 2) func $f $g) (elem $passive-1 func $f $g) (elem $passive-2 funcref (ref.func $f) (ref.func $g) (ref.null func)) (elem $passive-3 (ref null $none_=>_none) (ref.func $f) (ref.func $g) (ref.null $none_=>_none) (global.get $g1)) (elem $empty func) (elem $especial (table $tspecial) (i32.const 0) (ref null $none_=>_none) (ref.func $f) (ref.func $h)) (func $f (drop (ref.func $h) ) ) (func $g (nop) ) (func $h (nop) ) ) binaryen-version_108/test/multi-table.wast.fromBinary.noDebugInfo000066400000000000000000000016741423707623100253600ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "a" "b" (table $timport$0 1 10 funcref)) (global $global$0 (ref null $none_=>_none) (ref.func $0)) (global $global$1 i32 (i32.const 0)) (table $0 3 3 funcref) (table $1 4 4 funcref) (table $2 0 anyref) (table $3 5 5 (ref null $none_=>_none)) (elem $0 (table $timport$0) (i32.const 0) func $0) (elem $1 (table $0) (i32.const 0) func $0) (elem $2 (table $0) (i32.const 1) func $0 $1) (elem $3 (table $1) (global.get $global$1) funcref (ref.func $0) (ref.null func)) (elem $4 (table $1) (i32.const 2) func $0 $1) (elem $5 func $0 $1) (elem $6 funcref (ref.func $0) (ref.func $1) (ref.null func)) (elem $7 (ref null $none_=>_none) (ref.func $0) (ref.func $1) (ref.null $none_=>_none) (global.get $global$0)) (elem $8 func) (elem $9 (table $3) (i32.const 0) (ref null $none_=>_none) (ref.func $0) (ref.func $2)) (func $0 (drop (ref.func $2) ) ) (func $1 (nop) ) (func $2 (nop) ) ) binaryen-version_108/test/multivalue.wast000066400000000000000000000052161423707623100210170ustar00rootroot00000000000000(module (import "env" "pair" (func $pair (result i32 i64))) (global $g1 (mut (i32 i64)) (tuple.make (i32.const 0) (i64.const 0))) (global $g2 (i32 i64) (tuple.make (i32.const 0) (i64.const 0))) ;; Test basic lowering of tuple.make, tuple.extract, and tuple variables (func $triple (result i32 i64 f32) (tuple.make (i32.const 42) (i64.const 7) (f32.const 13) ) ) (func $get-first (result i32) (tuple.extract 0 (call $triple) ) ) (func $get-second (result i64) (tuple.extract 1 (call $triple) ) ) (func $get-third (result f32) (tuple.extract 2 (call $triple) ) ) (func $reverse (result f32 i64 i32) (local $x (i32 i64 f32)) (local.set $x (call $triple) ) (tuple.make (tuple.extract 2 (local.get $x) ) (tuple.extract 1 (local.get $x) ) (tuple.extract 0 (local.get $x) ) ) ) (func $unreachable (result i64) (tuple.extract 1 (tuple.make (i32.const 42) (i64.const 7) (unreachable) ) ) ) ;; Test multivalue globals (func $global (result i32 i64) (global.set $g1 (tuple.make (i32.const 42) (i64.const 7) ) ) (global.get $g2) ) ;; Test lowering of multivalue drops (func $drop-call (drop (call $pair) ) ) (func $drop-tuple-make (drop (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $drop-block (drop (block (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) ;; Test multivalue control structures (func $mv-return (result i32 i64) (return (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $mv-return-in-block (result i32 i64) (block (result i32 i64) (return (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) (func $mv-block-break (result i32 i64) (block $l (result i32 i64) (br $l (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) (func $mv-block-br-if (result i32 i64) (block $l (result i32 i64) (br_if $l (tuple.make (i32.const 42) (i64.const 42) ) (i32.const 1) ) ) ) (func $mv-if (result i32 i64 externref) (if (result i32 i64 externref) (i32.const 1) (tuple.make (i32.const 42) (i64.const 42) (ref.null extern) ) (tuple.make (i32.const 42) (i64.const 42) (ref.null extern) ) ) ) (func $mv-loop (result i32 i64) (loop (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $mv-switch (result i32 i64) (block $a (result i32 i64) (block $b (result i32 i64) (br_table $a $b (tuple.make (i32.const 42) (i64.const 42) ) (i32.const 0) ) ) ) ) )binaryen-version_108/test/multivalue.wast.from-wast000066400000000000000000000055521423707623100227400ustar00rootroot00000000000000(module (type $none_=>_i32_i64 (func (result i32 i64))) (type $none_=>_none (func)) (type $none_=>_i64 (func (result i64))) (type $none_=>_f32_i64_i32 (func (result f32 i64 i32))) (type $none_=>_i32_i64_anyref (func (result i32 i64 anyref))) (type $none_=>_i32_i64_f32 (func (result i32 i64 f32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_f32 (func (result f32))) (import "env" "pair" (func $pair (result i32 i64))) (global $g1 (mut (i32 i64)) (tuple.make (i32.const 0) (i64.const 0) )) (global $g2 (i32 i64) (tuple.make (i32.const 0) (i64.const 0) )) (func $triple (result i32 i64 f32) (tuple.make (i32.const 42) (i64.const 7) (f32.const 13) ) ) (func $get-first (result i32) (tuple.extract 0 (call $triple) ) ) (func $get-second (result i64) (tuple.extract 1 (call $triple) ) ) (func $get-third (result f32) (tuple.extract 2 (call $triple) ) ) (func $reverse (result f32 i64 i32) (local $x (i32 i64 f32)) (local.set $x (call $triple) ) (tuple.make (tuple.extract 2 (local.get $x) ) (tuple.extract 1 (local.get $x) ) (tuple.extract 0 (local.get $x) ) ) ) (func $unreachable (result i64) (tuple.extract 1 (tuple.make (i32.const 42) (i64.const 7) (unreachable) ) ) ) (func $global (result i32 i64) (global.set $g1 (tuple.make (i32.const 42) (i64.const 7) ) ) (global.get $g2) ) (func $drop-call (drop (call $pair) ) ) (func $drop-tuple-make (drop (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $drop-block (drop (block $block (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) (func $mv-return (result i32 i64) (return (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $mv-return-in-block (result i32 i64) (block $block (result i32 i64) (return (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) (func $mv-block-break (result i32 i64) (block $l (result i32 i64) (br $l (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) (func $mv-block-br-if (result i32 i64) (block $l (result i32 i64) (br_if $l (tuple.make (i32.const 42) (i64.const 42) ) (i32.const 1) ) ) ) (func $mv-if (result i32 i64 anyref) (if (result i32 i64 anyref) (i32.const 1) (tuple.make (i32.const 42) (i64.const 42) (ref.null any) ) (tuple.make (i32.const 42) (i64.const 42) (ref.null any) ) ) ) (func $mv-loop (result i32 i64) (loop $loop-in (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $mv-switch (result i32 i64) (block $a (result i32 i64) (block $b (result i32 i64) (br_table $a $b (tuple.make (i32.const 42) (i64.const 42) ) (i32.const 0) ) ) ) ) ) binaryen-version_108/test/multivalue.wast.fromBinary000066400000000000000000000166521423707623100231340ustar00rootroot00000000000000(module (type $none_=>_i32_i64 (func (result i32 i64))) (type $none_=>_none (func)) (type $none_=>_i32_i64_anyref (func (result i32 i64 anyref))) (type $none_=>_i64 (func (result i64))) (type $none_=>_f32_i64_i32 (func (result f32 i64 i32))) (type $none_=>_i32_i64_f32 (func (result i32 i64 f32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_f32 (func (result f32))) (import "env" "pair" (func $pair (result i32 i64))) (global $g1 (mut i32) (i32.const 0)) (global $g2 (mut i64) (i64.const 0)) (global $global$2 i32 (i32.const 0)) (global $global$3 i64 (i64.const 0)) (func $triple (result i32 i64 f32) (tuple.make (i32.const 42) (i64.const 7) (f32.const 13) ) ) (func $get-first (result i32) (local $0 (i32 i64 f32)) (local $1 i64) (local $2 i32) (local.set $0 (call $triple) ) (block (result i32) (local.set $2 (tuple.extract 0 (local.get $0) ) ) (drop (block (result i64) (local.set $1 (tuple.extract 1 (local.get $0) ) ) (drop (tuple.extract 2 (local.get $0) ) ) (local.get $1) ) ) (local.get $2) ) ) (func $get-second (result i64) (local $0 i64) (local $1 (i32 i64 f32)) (local $2 i64) (local $3 i32) (local.set $1 (call $triple) ) (drop (block (result i32) (local.set $3 (tuple.extract 0 (local.get $1) ) ) (local.set $0 (block (result i64) (local.set $2 (tuple.extract 1 (local.get $1) ) ) (drop (tuple.extract 2 (local.get $1) ) ) (local.get $2) ) ) (local.get $3) ) ) (local.get $0) ) (func $get-third (result f32) (local $0 f32) (local $1 (i32 i64 f32)) (local $2 i64) (local $3 i32) (local.set $1 (call $triple) ) (drop (block (result i32) (local.set $3 (tuple.extract 0 (local.get $1) ) ) (drop (block (result i64) (local.set $2 (tuple.extract 1 (local.get $1) ) ) (local.set $0 (tuple.extract 2 (local.get $1) ) ) (local.get $2) ) ) (local.get $3) ) ) (local.get $0) ) (func $reverse (result f32 i64 i32) (local $x i32) (local $1 i64) (local $2 i64) (local $3 f32) (local $4 f32) (local $5 (i32 i64 f32)) (local $6 i64) (local $7 i32) (local $8 i64) (local $9 i32) (local $10 i64) (local $11 i32) (local $12 i64) (local $13 i32) (local $14 f32) (local.set $5 (call $triple) ) (local.set $x (block (result i32) (local.set $7 (tuple.extract 0 (local.get $5) ) ) (local.set $1 (block (result i64) (local.set $6 (tuple.extract 1 (local.get $5) ) ) (local.set $3 (tuple.extract 2 (local.get $5) ) ) (local.get $6) ) ) (local.get $7) ) ) (drop (block (result i32) (local.set $9 (local.get $x) ) (drop (block (result i64) (local.set $8 (local.get $1) ) (local.set $4 (local.get $3) ) (local.get $8) ) ) (local.get $9) ) ) (tuple.make (block (result f32) (local.set $14 (local.get $4) ) (drop (block (result i32) (local.set $11 (local.get $x) ) (local.set $2 (block (result i64) (local.set $10 (local.get $1) ) (drop (local.get $3) ) (local.get $10) ) ) (local.get $11) ) ) (local.get $14) ) (local.get $2) (block (result i32) (local.set $13 (local.get $x) ) (drop (block (result i64) (local.set $12 (local.get $1) ) (drop (local.get $3) ) (local.get $12) ) ) (local.get $13) ) ) ) (func $unreachable (result i64) (drop (i32.const 42) ) (drop (i64.const 7) ) (unreachable) ) (func $global (result i32 i64) (local $0 i32) (global.set $g1 (block (result i32) (local.set $0 (i32.const 42) ) (global.set $g2 (i64.const 7) ) (local.get $0) ) ) (tuple.make (global.get $global$2) (global.get $global$3) ) ) (func $drop-call (local $0 (i32 i64)) (local $1 i32) (local.set $0 (call $pair) ) (drop (block (result i32) (local.set $1 (tuple.extract 0 (local.get $0) ) ) (drop (tuple.extract 1 (local.get $0) ) ) (local.get $1) ) ) ) (func $drop-tuple-make (local $0 i32) (drop (block (result i32) (local.set $0 (i32.const 42) ) (drop (i64.const 42) ) (local.get $0) ) ) ) (func $drop-block (local $0 (i32 i64)) (local $1 i32) (local.set $0 (block $label$1 (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) (drop (block (result i32) (local.set $1 (tuple.extract 0 (local.get $0) ) ) (drop (tuple.extract 1 (local.get $0) ) ) (local.get $1) ) ) ) (func $mv-return (result i32 i64) (return (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $mv-return-in-block (result i32 i64) (return (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $mv-block-break (result i32 i64) (local $0 (i32 i64)) (local.set $0 (block $label$1 (result i32 i64) (br $label$1 (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) ) ) (func $mv-block-br-if (result i32 i64) (local $0 (i32 i64)) (local $1 (i32 i64)) (local.set $1 (block $label$1 (result i32 i64) (local.set $0 (br_if $label$1 (tuple.make (i32.const 42) (i64.const 42) ) (i32.const 1) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) ) ) ) (tuple.make (tuple.extract 0 (local.get $1) ) (tuple.extract 1 (local.get $1) ) ) ) (func $mv-if (result i32 i64 anyref) (local $0 (i32 i64 anyref)) (local.set $0 (if (result i32 i64 anyref) (i32.const 1) (tuple.make (i32.const 42) (i64.const 42) (ref.null any) ) (tuple.make (i32.const 42) (i64.const 42) (ref.null any) ) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) (tuple.extract 2 (local.get $0) ) ) ) (func $mv-loop (result i32 i64) (local $0 (i32 i64)) (local.set $0 (loop $label$1 (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) ) ) (func $mv-switch (result i32 i64) (local $0 (i32 i64)) (local $1 (i32 i64)) (local.set $1 (block $label$1 (result i32 i64) (local.set $0 (block $label$2 (result i32 i64) (br_table $label$1 $label$2 (tuple.make (i32.const 42) (i64.const 42) ) (i32.const 0) ) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) ) ) ) (tuple.make (tuple.extract 0 (local.get $1) ) (tuple.extract 1 (local.get $1) ) ) ) ) binaryen-version_108/test/multivalue.wast.fromBinary.noDebugInfo000066400000000000000000000164501423707623100253260ustar00rootroot00000000000000(module (type $none_=>_i32_i64 (func (result i32 i64))) (type $none_=>_none (func)) (type $none_=>_i32_i64_anyref (func (result i32 i64 anyref))) (type $none_=>_i64 (func (result i64))) (type $none_=>_f32_i64_i32 (func (result f32 i64 i32))) (type $none_=>_i32_i64_f32 (func (result i32 i64 f32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_f32 (func (result f32))) (import "env" "pair" (func $fimport$0 (result i32 i64))) (global $global$0 (mut i32) (i32.const 0)) (global $global$1 (mut i64) (i64.const 0)) (global $global$2 i32 (i32.const 0)) (global $global$3 i64 (i64.const 0)) (func $0 (result i32 i64 f32) (tuple.make (i32.const 42) (i64.const 7) (f32.const 13) ) ) (func $1 (result i32) (local $0 (i32 i64 f32)) (local $1 i64) (local $2 i32) (local.set $0 (call $0) ) (block (result i32) (local.set $2 (tuple.extract 0 (local.get $0) ) ) (drop (block (result i64) (local.set $1 (tuple.extract 1 (local.get $0) ) ) (drop (tuple.extract 2 (local.get $0) ) ) (local.get $1) ) ) (local.get $2) ) ) (func $2 (result i64) (local $0 i64) (local $1 (i32 i64 f32)) (local $2 i64) (local $3 i32) (local.set $1 (call $0) ) (drop (block (result i32) (local.set $3 (tuple.extract 0 (local.get $1) ) ) (local.set $0 (block (result i64) (local.set $2 (tuple.extract 1 (local.get $1) ) ) (drop (tuple.extract 2 (local.get $1) ) ) (local.get $2) ) ) (local.get $3) ) ) (local.get $0) ) (func $3 (result f32) (local $0 f32) (local $1 (i32 i64 f32)) (local $2 i64) (local $3 i32) (local.set $1 (call $0) ) (drop (block (result i32) (local.set $3 (tuple.extract 0 (local.get $1) ) ) (drop (block (result i64) (local.set $2 (tuple.extract 1 (local.get $1) ) ) (local.set $0 (tuple.extract 2 (local.get $1) ) ) (local.get $2) ) ) (local.get $3) ) ) (local.get $0) ) (func $4 (result f32 i64 i32) (local $0 i32) (local $1 i64) (local $2 i64) (local $3 f32) (local $4 f32) (local $5 (i32 i64 f32)) (local $6 i64) (local $7 i32) (local $8 i64) (local $9 i32) (local $10 i64) (local $11 i32) (local $12 i64) (local $13 i32) (local $14 f32) (local.set $5 (call $0) ) (local.set $0 (block (result i32) (local.set $7 (tuple.extract 0 (local.get $5) ) ) (local.set $1 (block (result i64) (local.set $6 (tuple.extract 1 (local.get $5) ) ) (local.set $3 (tuple.extract 2 (local.get $5) ) ) (local.get $6) ) ) (local.get $7) ) ) (drop (block (result i32) (local.set $9 (local.get $0) ) (drop (block (result i64) (local.set $8 (local.get $1) ) (local.set $4 (local.get $3) ) (local.get $8) ) ) (local.get $9) ) ) (tuple.make (block (result f32) (local.set $14 (local.get $4) ) (drop (block (result i32) (local.set $11 (local.get $0) ) (local.set $2 (block (result i64) (local.set $10 (local.get $1) ) (drop (local.get $3) ) (local.get $10) ) ) (local.get $11) ) ) (local.get $14) ) (local.get $2) (block (result i32) (local.set $13 (local.get $0) ) (drop (block (result i64) (local.set $12 (local.get $1) ) (drop (local.get $3) ) (local.get $12) ) ) (local.get $13) ) ) ) (func $5 (result i64) (drop (i32.const 42) ) (drop (i64.const 7) ) (unreachable) ) (func $6 (result i32 i64) (local $0 i32) (global.set $global$0 (block (result i32) (local.set $0 (i32.const 42) ) (global.set $global$1 (i64.const 7) ) (local.get $0) ) ) (tuple.make (global.get $global$2) (global.get $global$3) ) ) (func $7 (local $0 (i32 i64)) (local $1 i32) (local.set $0 (call $fimport$0) ) (drop (block (result i32) (local.set $1 (tuple.extract 0 (local.get $0) ) ) (drop (tuple.extract 1 (local.get $0) ) ) (local.get $1) ) ) ) (func $8 (local $0 i32) (drop (block (result i32) (local.set $0 (i32.const 42) ) (drop (i64.const 42) ) (local.get $0) ) ) ) (func $9 (local $0 (i32 i64)) (local $1 i32) (local.set $0 (block $label$1 (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) (drop (block (result i32) (local.set $1 (tuple.extract 0 (local.get $0) ) ) (drop (tuple.extract 1 (local.get $0) ) ) (local.get $1) ) ) ) (func $10 (result i32 i64) (return (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $11 (result i32 i64) (return (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $12 (result i32 i64) (local $0 (i32 i64)) (local.set $0 (block $label$1 (result i32 i64) (br $label$1 (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) ) ) (func $13 (result i32 i64) (local $0 (i32 i64)) (local $1 (i32 i64)) (local.set $1 (block $label$1 (result i32 i64) (local.set $0 (br_if $label$1 (tuple.make (i32.const 42) (i64.const 42) ) (i32.const 1) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) ) ) ) (tuple.make (tuple.extract 0 (local.get $1) ) (tuple.extract 1 (local.get $1) ) ) ) (func $14 (result i32 i64 anyref) (local $0 (i32 i64 anyref)) (local.set $0 (if (result i32 i64 anyref) (i32.const 1) (tuple.make (i32.const 42) (i64.const 42) (ref.null any) ) (tuple.make (i32.const 42) (i64.const 42) (ref.null any) ) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) (tuple.extract 2 (local.get $0) ) ) ) (func $15 (result i32 i64) (local $0 (i32 i64)) (local.set $0 (loop $label$1 (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) ) ) (func $16 (result i32 i64) (local $0 (i32 i64)) (local $1 (i32 i64)) (local.set $1 (block $label$1 (result i32 i64) (local.set $0 (block $label$2 (result i32 i64) (br_table $label$1 $label$2 (tuple.make (i32.const 42) (i64.const 42) ) (i32.const 0) ) ) ) (tuple.make (tuple.extract 0 (local.get $0) ) (tuple.extract 1 (local.get $0) ) ) ) ) (tuple.make (tuple.extract 0 (local.get $1) ) (tuple.extract 1 (local.get $1) ) ) ) ) binaryen-version_108/test/mutable-global.wasm000066400000000000000000000000641423707623100215040ustar00rootroot00000000000000asm`env global-mut  #Aj$ binaryen-version_108/test/mutable-global.wasm.fromBinary000066400000000000000000000003141423707623100236110ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "global-mut" (global $gimport$0 (mut i32))) (func $0 (global.set $gimport$0 (i32.add (global.get $gimport$0) (i32.const 1) ) ) ) ) binaryen-version_108/test/mutable-global.wast000066400000000000000000000003451423707623100215150ustar00rootroot00000000000000(module (type $0 (func)) (import "env" "global-mut" (global $global-mut (mut i32))) (func $foo (type $0) (global.set $global-mut (i32.add (global.get $global-mut) (i32.const 1) ) ) ) ) binaryen-version_108/test/mutable-global.wast.from-wast000066400000000000000000000003051423707623100234270ustar00rootroot00000000000000(module (type $0 (func)) (import "env" "global-mut" (global $global-mut (mut i32))) (func $foo (global.set $global-mut (i32.add (global.get $global-mut) (i32.const 1) ) ) ) ) binaryen-version_108/test/mutable-global.wast.fromBinary000066400000000000000000000003061423707623100236210ustar00rootroot00000000000000(module (type $0 (func)) (import "env" "global-mut" (global $global-mut (mut i32))) (func $foo (global.set $global-mut (i32.add (global.get $global-mut) (i32.const 1) ) ) ) ) binaryen-version_108/test/mutable-global.wast.fromBinary.noDebugInfo000066400000000000000000000003141423707623100260160ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "global-mut" (global $gimport$0 (mut i32))) (func $0 (global.set $gimport$0 (i32.add (global.get $gimport$0) (i32.const 1) ) ) ) ) binaryen-version_108/test/newsyntax.wast000066400000000000000000000003561423707623100206700ustar00rootroot00000000000000(module (import "env" "table" (table 9 9 funcref)) (func "call_indirect" (drop (call_indirect (param i32) (param f64) (result i32) (i32.const 10) (f64.const 20) (i32.const 30)) ) (call_indirect (i32.const 1)) ) ) binaryen-version_108/test/newsyntax.wast.from-wast000066400000000000000000000006171423707623100226060ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (import "env" "table" (table $timport$0 9 9 funcref)) (export "call_indirect" (func $0)) (func $0 (drop (call_indirect $timport$0 (type $i32_f64_=>_i32) (i32.const 10) (f64.const 20) (i32.const 30) ) ) (call_indirect $timport$0 (type $none_=>_none) (i32.const 1) ) ) ) binaryen-version_108/test/newsyntax.wast.fromBinary000066400000000000000000000006201423707623100227710ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (import "env" "table" (table $timport$0 9 9 funcref)) (export "call_indirect" (func $0)) (func $0 (drop (call_indirect $timport$0 (type $i32_f64_=>_i32) (i32.const 10) (f64.const 20) (i32.const 30) ) ) (call_indirect $timport$0 (type $none_=>_none) (i32.const 1) ) ) ) binaryen-version_108/test/newsyntax.wast.fromBinary.noDebugInfo000066400000000000000000000006201423707623100251670ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (import "env" "table" (table $timport$0 9 9 funcref)) (export "call_indirect" (func $0)) (func $0 (drop (call_indirect $timport$0 (type $i32_f64_=>_i32) (i32.const 10) (f64.const 20) (i32.const 30) ) ) (call_indirect $timport$0 (type $none_=>_none) (i32.const 1) ) ) ) binaryen-version_108/test/nonspec-bulk-memory.wast000066400000000000000000000006051423707623100225330ustar00rootroot00000000000000(module (memory 1024 1024 (segment 0 "hello, world") ) (func $memory.init (memory.init 0 (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $data.drop (data.drop 0) ) (func $memory.copy (memory.copy (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $memory.fill (memory.fill (i32.const 0) (i32.const 42) (i32.const 1024) ) ) ) binaryen-version_108/test/nonspec-bulk-memory.wast.from-wast000066400000000000000000000006531423707623100244540ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 1024 1024) (data (i32.const 0) "hello, world") (func $memory.init (memory.init 0 (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $data.drop (data.drop 0) ) (func $memory.copy (memory.copy (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $memory.fill (memory.fill (i32.const 0) (i32.const 42) (i32.const 1024) ) ) ) binaryen-version_108/test/nonspec-bulk-memory.wast.fromBinary000066400000000000000000000006541423707623100246460ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 1024 1024) (data (i32.const 0) "hello, world") (func $memory.init (memory.init 0 (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $data.drop (data.drop 0) ) (func $memory.copy (memory.copy (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $memory.fill (memory.fill (i32.const 0) (i32.const 42) (i32.const 1024) ) ) ) binaryen-version_108/test/nonspec-bulk-memory.wast.fromBinary.noDebugInfo000066400000000000000000000006061423707623100270410ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 1024 1024) (data (i32.const 0) "hello, world") (func $0 (memory.init 0 (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $1 (data.drop 0) ) (func $2 (memory.copy (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $3 (memory.fill (i32.const 0) (i32.const 42) (i32.const 1024) ) ) ) binaryen-version_108/test/passes/000077500000000000000000000000001423707623100172225ustar00rootroot00000000000000binaryen-version_108/test/passes/O.bin.txt000066400000000000000000000032761423707623100207400ustar00rootroot00000000000000(module (type $i64_=>_i64 (func (param i64) (result i64))) (export "fac-rec" (func $0)) (export "fac-rec-named" (func $1)) (export "fac-iter" (func $2)) (export "fac-iter-named" (func $3)) (export "fac-opt" (func $4)) (func $0 (; has Stack IR ;) (param $0 i64) (result i64) (if (result i64) (i64.eqz (local.get $0) ) (i64.const 1) (i64.mul (call $0 (i64.sub (local.get $0) (i64.const 1) ) ) (local.get $0) ) ) ) (func $1 (; has Stack IR ;) (param $0 i64) (result i64) (if (result i64) (i64.eqz (local.get $0) ) (i64.const 1) (i64.mul (call $1 (i64.sub (local.get $0) (i64.const 1) ) ) (local.get $0) ) ) ) (func $2 (; has Stack IR ;) (param $0 i64) (result i64) (unreachable) ) (func $3 (; has Stack IR ;) (param $0 i64) (result i64) (local $1 i64) (local.set $1 (i64.const 1) ) (loop $label$3 (if (i32.eqz (i64.eqz (local.get $0) ) ) (block (local.set $1 (i64.mul (local.get $0) (local.get $1) ) ) (local.set $0 (i64.sub (local.get $0) (i64.const 1) ) ) (br $label$3) ) ) ) (local.get $1) ) (func $4 (; has Stack IR ;) (param $0 i64) (result i64) (local $1 i64) (local.set $1 (i64.const 1) ) (if (i64.ge_s (local.get $0) (i64.const 2) ) (loop $label$3 (local.set $1 (i64.mul (local.get $0) (local.get $1) ) ) (br_if $label$3 (i64.gt_s (local.tee $0 (i64.sub (local.get $0) (i64.const 1) ) ) (i64.const 1) ) ) ) ) (local.get $1) ) ) binaryen-version_108/test/passes/O.wasm000066400000000000000000000005121423707623100203070ustar00rootroot00000000000000asm†€€€`~~†€€€Á€€€fac-rec fac-rec-namedfac-iterfac-iter-namedfac-opt Ý€€—€€€ BQ~B B}~ —€€€ BQ~B B}~ ³€€€~~ !B!@@ BQ@ ~! B}!  ³€€€~~ !B!@@ BQ@   ~! B}!  ¯€€€~~B!@ BS @  ~! B|! BU  binaryen-version_108/test/passes/O1_print-stack-ir.txt000066400000000000000000000015241423707623100231730ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $0 i32) (result i32) (i32.add (call $stacky-help (i32.const 0) ) (block (result i32) (local.set $0 (call $stacky-help (i32.const 1) ) ) (drop (call $stacky-help (i32.const 2) ) ) (i32.eqz (local.get $0) ) ) ) ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $0 i32) (result i32) (i32.add (call $stacky-help (i32.const 0) ) (block (result i32) (local.set $0 (call $stacky-help (i32.const 1) ) ) (drop (call $stacky-help (i32.const 2) ) ) (i32.eqz (local.get $0) ) ) ) ) ) binaryen-version_108/test/passes/O1_print-stack-ir.wast000066400000000000000000000006471423707623100233370ustar00rootroot00000000000000(module (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $x i32) (result i32) (local $temp i32) (i32.add (call $stacky-help (i32.const 0)) (i32.eqz (block (result i32) ;; after we use the stack instead of the local, we can remove this block (local.set $temp (call $stacky-help (i32.const 1))) (drop (call $stacky-help (i32.const 2))) (local.get $temp) ) ) ) ) ) binaryen-version_108/test/passes/O2_precompute-propagate_print-stack-ir.txt000066400000000000000000000011161423707623100274140ustar00rootroot00000000000000(module (type $i32_i32_i32_i64_=>_i64 (func (param i32 i32 i32 i64) (result i64))) (export "func" (func $0)) (func $0 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i64) (result i64) (local $4 i32) (local.set $3 (i64.const 2147483647) ) (nop) (i64.const 2147483647) ) ) (module (type $i32_i32_i32_i64_=>_i64 (func (param i32 i32 i32 i64) (result i64))) (export "func" (func $0)) (func $0 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i64) (result i64) (local $4 i32) (local.set $3 (i64.const 2147483647) ) (nop) (i64.const 2147483647) ) ) binaryen-version_108/test/passes/O2_precompute-propagate_print-stack-ir.wast000066400000000000000000000011161423707623100275530ustar00rootroot00000000000000(module (func "func" (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i64) (result i64) (local $var$4 i32) (block $label$1 (local.set $var$3 (i64.const 2147483647) ) (br_if $label$1 (local.get $var$4) ;; precompute-propagate will optimize this into 0, then the br_if is nopped ;; in place. if stack ir is not regenerated, that means we have the get ;; on the stack from before, and the br_if is now a nop, which means no one ;; pops the get ) ) (local.get $var$3) ) ) binaryen-version_108/test/passes/O2_print-stack-ir.txt000066400000000000000000000013711423707623100231740ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $0 i32) (result i32) i32.const 0 call $stacky-help i32.const 1 call $stacky-help local.set $0 i32.const 2 call $stacky-help drop local.get $0 i32.eqz i32.add ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (export "stacky-help" (func $stacky-help)) (func $stacky-help (; has Stack IR ;) (param $0 i32) (result i32) (i32.add (call $stacky-help (i32.const 0) ) (block (result i32) (local.set $0 (call $stacky-help (i32.const 1) ) ) (drop (call $stacky-help (i32.const 2) ) ) (i32.eqz (local.get $0) ) ) ) ) ) binaryen-version_108/test/passes/O2_print-stack-ir.wast000066400000000000000000000006471423707623100233400ustar00rootroot00000000000000(module (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $x i32) (result i32) (local $temp i32) (i32.add (call $stacky-help (i32.const 0)) (i32.eqz (block (result i32) ;; after we use the stack instead of the local, we can remove this block (local.set $temp (call $stacky-help (i32.const 1))) (drop (call $stacky-help (i32.const 2))) (local.get $temp) ) ) ) ) ) binaryen-version_108/test/passes/O3_low-memory-unused_metrics.txt000066400000000000000000002404221423707623100254660ustar00rootroot00000000000000total [exports] : 1 [funcs] : 1 [globals] : 0 [imports] : 10 [memory-data] : 0 [table-data] : 0 [tables] : 0 [tags] : 0 [total] : 1964 [vars] : 9 Binary : 240 Block : 68 Break : 90 Call : 22 CallIndirect : 1 Const : 175 Drop : 8 If : 27 Load : 313 LocalGet : 633 LocalSet : 181 Loop : 3 Return : 3 Select : 11 Store : 160 Unary : 29 (module (type $0 (func (param i32 i32 i32) (result i32))) (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32 i32 i32 i32))) (type $10 (func (param i32))) (import "env" "memory" (memory $108 4096 4096)) (import "env" "table" (table $timport$109 10 funcref)) (import "env" "crc32" (func $fimport$14 (param i32 i32 i32) (result i32))) (import "env" "adler32" (func $fimport$15 (param i32 i32 i32) (result i32))) (import "env" "deflate_huff" (func $fimport$20 (param i32 i32) (result i32))) (import "env" "deflate_rle" (func $fimport$21 (param i32 i32) (result i32))) (import "env" "_tr_stored_block" (func $fimport$29 (param i32 i32 i32 i32))) (import "env" "_tr_align" (func $fimport$30 (param i32))) (import "env" "memset" (func $fimport$97 (param i32 i32 i32) (result i32))) (import "env" "memcpy" (func $fimport$98 (param i32 i32 i32) (result i32))) (export "deflate" (func $0)) (func $0 (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local.set $3 (i32.const -2) ) (block $folding-inner1 (block $folding-inner0 (block $label$1 (br_if $label$1 (i32.eqz (local.get $0) ) ) (br_if $label$1 (i32.gt_u (local.get $1) (i32.const 5) ) ) (br_if $label$1 (i32.eqz (local.tee $2 (i32.load offset=28 (local.get $0) ) ) ) ) (block $label$2 (block $label$3 (br_if $label$3 (i32.eqz (i32.load offset=12 (local.get $0) ) ) ) (if (i32.eqz (i32.load (local.get $0) ) ) (br_if $label$3 (i32.load offset=4 (local.get $0) ) ) ) (local.set $3 (i32.load offset=4 (local.get $2) ) ) (br_if $label$2 (i32.eq (local.get $1) (i32.const 4) ) ) (br_if $label$2 (i32.ne (local.get $3) (i32.const 666) ) ) ) (i32.store offset=24 (local.get $0) (i32.load (i32.const 16992) ) ) (return (i32.const -2) ) ) (if (i32.eqz (i32.load offset=16 (local.get $0) ) ) (br $folding-inner0) ) (i32.store (local.get $2) (local.get $0) ) (local.set $7 (i32.load offset=40 (local.get $2) ) ) (i32.store offset=40 (local.get $2) (local.get $1) ) (block $label$6 (block $label$7 (block $label$8 (block $label$9 (block $label$10 (block $label$11 (block $label$12 (block $label$13 (block $label$14 (block $label$15 (block $label$16 (if (i32.eq (local.get $3) (i32.const 42) ) (block (if (i32.eq (i32.load offset=24 (local.get $2) ) (i32.const 2) ) (block (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.const 0) (i32.const 0) (i32.const 0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 31) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 139) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 8) ) (if (i32.eqz (local.tee $3 (i32.load offset=28 (local.get $2) ) ) ) (block (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 0) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 0) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 0) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 0) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 0) ) (local.set $3 (i32.const 2) ) (if (i32.ne (local.tee $4 (i32.load offset=132 (local.get $2) ) ) (i32.const 9) ) (local.set $3 (select (i32.const 4) (i32.shl (i32.gt_s (i32.load offset=136 (local.get $2) ) (i32.const 1) ) (i32.const 2) ) (i32.lt_s (local.get $4) (i32.const 2) ) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (local.get $3) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.const 3) ) (i32.store offset=4 (local.get $2) (i32.const 113) ) (br $label$6) ) ) (local.set $4 (i32.load offset=36 (local.get $3) ) ) (local.set $5 (i32.load offset=28 (local.get $3) ) ) (local.set $6 (i32.load offset=16 (local.get $3) ) ) (local.set $8 (i32.load offset=44 (local.get $3) ) ) (local.set $9 (i32.load (local.get $3) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $10 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (local.set $3 (i32.const 2) ) (i32.store8 (i32.add (local.get $10) (i32.load offset=8 (local.get $2) ) ) (i32.or (i32.or (i32.or (i32.or (i32.shl (i32.ne (local.get $8) (i32.const 0) ) (i32.const 1) ) (i32.ne (local.get $9) (i32.const 0) ) ) (i32.shl (i32.ne (local.get $6) (i32.const 0) ) (i32.const 2) ) ) (i32.shl (i32.ne (local.get $5) (i32.const 0) ) (i32.const 3) ) ) (i32.shl (i32.ne (local.get $4) (i32.const 0) ) (i32.const 4) ) ) ) (local.set $4 (i32.load offset=4 (i32.load offset=28 (local.get $2) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $5 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $2) ) ) (local.get $4) ) (local.set $4 (i32.load offset=4 (i32.load offset=28 (local.get $2) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $5 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $4) (i32.const 8) ) ) (local.set $4 (i32.load16_u offset=6 (i32.load offset=28 (local.get $2) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $5 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $2) ) ) (local.get $4) ) (local.set $4 (i32.load8_u offset=7 (i32.load offset=28 (local.get $2) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $5 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $2) ) ) (local.get $4) ) (if (i32.ne (local.tee $4 (i32.load offset=132 (local.get $2) ) ) (i32.const 9) ) (local.set $3 (select (i32.const 4) (i32.shl (i32.gt_s (i32.load offset=136 (local.get $2) ) (i32.const 1) ) (i32.const 2) ) (i32.lt_s (local.get $4) (i32.const 2) ) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (local.get $3) ) (local.set $3 (i32.load offset=12 (i32.load offset=28 (local.get $2) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (local.get $3) ) (if (i32.load offset=44 (if (result i32) (i32.load offset=16 (local.tee $3 (i32.load offset=28 (local.get $2) ) ) ) (block (result i32) (local.set $3 (i32.load offset=20 (local.get $3) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (local.get $3) ) (local.set $3 (i32.load offset=20 (i32.load offset=28 (local.get $2) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $3) (i32.const 8) ) ) (i32.load offset=28 (local.get $2) ) ) (local.get $3) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.load offset=8 (local.get $2) ) (i32.load offset=20 (local.get $2) ) ) ) ) (i32.store offset=4 (local.get $2) (i32.const 69) ) (i32.store offset=32 (local.get $2) (i32.const 0) ) (br $label$16) ) ) (local.set $5 (i32.sub (i32.shl (i32.load offset=48 (local.get $2) ) (i32.const 12) ) (i32.const 30720) ) ) (local.set $3 (i32.const 0) ) (block $label$24 (br_if $label$24 (i32.gt_s (i32.load offset=136 (local.get $2) ) (i32.const 1) ) ) (br_if $label$24 (i32.lt_s (local.tee $4 (i32.load offset=132 (local.get $2) ) ) (i32.const 2) ) ) (local.set $3 (i32.const 64) ) (br_if $label$24 (i32.lt_s (local.get $4) (i32.const 6) ) ) (local.set $3 (select (i32.const 128) (i32.const 192) (i32.eq (local.get $4) (i32.const 6) ) ) ) ) (i32.store offset=4 (local.get $2) (i32.const 113) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.tee $3 (select (i32.or (local.tee $3 (i32.or (local.get $3) (local.get $5) ) ) (i32.const 32) ) (local.get $3) (i32.load offset=108 (local.get $2) ) ) ) (i32.const 8) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (i32.xor (i32.or (i32.rem_u (local.get $3) (i32.const 31) ) (local.get $3) ) (i32.const 31) ) ) (if (i32.load offset=108 (local.get $2) ) (block (local.set $3 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $3) (i32.const 24) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $3) (i32.const 16) ) ) (local.set $3 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $3) (i32.const 8) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (local.get $3) ) ) ) (i32.store offset=48 (local.get $0) (call $fimport$15 (i32.const 0) (i32.const 0) (i32.const 0) ) ) (local.set $3 (i32.load offset=4 (local.get $2) ) ) ) ) (br_if $label$15 (i32.ne (local.get $3) (i32.const 69) ) ) ) (block $label$26 (if (i32.load offset=16 (local.tee $5 (i32.load offset=28 (local.get $2) ) ) ) (block (local.set $3 (i32.load offset=20 (local.get $2) ) ) (br_if $label$26 (i32.ge_u (local.tee $6 (i32.load offset=32 (local.get $2) ) ) (i32.load16_u offset=20 (local.get $5) ) ) ) (local.set $4 (local.get $3) ) (loop $label$28 (if (i32.eq (i32.load offset=12 (local.get $2) ) (local.get $3) ) (block (block $label$30 (br_if $label$30 (i32.le_u (local.get $3) (local.get $4) ) ) (br_if $label$30 (i32.eqz (i32.load offset=44 (local.get $5) ) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $2) ) (local.get $4) ) (i32.sub (local.get $3) (local.get $4) ) ) ) ) (block $label$31 (br_if $label$31 (i32.eqz (local.tee $3 (select (local.tee $3 (i32.load offset=16 (local.get $0) ) ) (local.tee $5 (i32.load offset=20 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.lt_u (local.get $3) (local.get $5) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $3) ) ) (i32.store offset=20 (local.get $4) (local.tee $3 (i32.sub (i32.load offset=20 (local.get $4) ) (local.get $3) ) ) ) (br_if $label$31 (local.get $3) ) (i32.store offset=16 (local.get $4) (i32.load offset=8 (local.get $4) ) ) ) (local.set $5 (i32.load offset=28 (local.get $2) ) ) (br_if $label$26 (i32.eq (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.load offset=12 (local.get $2) ) ) ) (local.set $6 (i32.load offset=32 (local.get $2) ) ) (local.set $4 (local.get $3) ) ) ) (local.set $5 (i32.load8_u (i32.add (i32.load offset=16 (local.get $5) ) (local.get $6) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.get $3) (i32.const 1) ) ) (i32.store8 (i32.add (i32.load offset=8 (local.get $2) ) (local.get $3) ) (local.get $5) ) (i32.store offset=32 (local.get $2) (local.tee $6 (i32.add (i32.load offset=32 (local.get $2) ) (i32.const 1) ) ) ) (if (i32.le_u (i32.load16_u offset=20 (local.tee $5 (i32.load offset=28 (local.get $2) ) ) ) (local.get $6) ) (block (local.set $3 (local.get $4) ) (br $label$26) ) (block (local.set $3 (i32.load offset=20 (local.get $2) ) ) (br $label$28) ) ) ) ) ) (i32.store offset=4 (local.get $2) (i32.const 73) ) (br $label$14) ) (block $label$33 (br_if $label$33 (i32.eqz (i32.load offset=44 (local.get $5) ) ) ) (br_if $label$33 (i32.le_u (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (local.get $3) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $2) ) (local.get $3) ) (i32.sub (local.get $4) (local.get $3) ) ) ) (local.set $5 (i32.load offset=28 (local.get $2) ) ) ) (if (i32.eq (i32.load offset=32 (local.get $2) ) (i32.load offset=20 (local.get $5) ) ) (block (i32.store offset=4 (local.get $2) (i32.const 73) ) (i32.store offset=32 (local.get $2) (i32.const 0) ) (br $label$14) ) ) (local.set $3 (i32.load offset=4 (local.get $2) ) ) ) (br_if $label$13 (i32.ne (local.get $3) (i32.const 73) ) ) (local.set $5 (i32.load offset=28 (local.get $2) ) ) ) (br_if $label$11 (i32.eqz (i32.load offset=28 (local.get $5) ) ) ) (local.set $4 (local.tee $3 (i32.load offset=20 (local.get $2) ) ) ) (local.set $5 (block $label$35 (result i32) (loop $label$37 (block $label$36 (if (i32.eq (i32.load offset=12 (local.get $2) ) (local.get $3) ) (block (block $label$39 (br_if $label$39 (i32.le_u (local.get $3) (local.get $4) ) ) (br_if $label$39 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $2) ) ) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $2) ) (local.get $4) ) (i32.sub (local.get $3) (local.get $4) ) ) ) ) (block $label$40 (br_if $label$40 (i32.eqz (local.tee $3 (select (local.tee $3 (i32.load offset=16 (local.get $0) ) ) (local.tee $5 (i32.load offset=20 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.lt_u (local.get $3) (local.get $5) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $3) ) ) (i32.store offset=20 (local.get $4) (local.tee $3 (i32.sub (i32.load offset=20 (local.get $4) ) (local.get $3) ) ) ) (br_if $label$40 (local.get $3) ) (i32.store offset=16 (local.get $4) (i32.load offset=8 (local.get $4) ) ) ) (br_if $label$36 (i32.eq (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.load offset=12 (local.get $2) ) ) ) (local.set $4 (local.get $3) ) ) ) (local.set $5 (i32.load offset=28 (i32.load offset=28 (local.get $2) ) ) ) (i32.store offset=32 (local.get $2) (i32.add (local.tee $6 (i32.load offset=32 (local.get $2) ) ) (i32.const 1) ) ) (local.set $5 (i32.load8_u (i32.add (local.get $5) (local.get $6) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.get $3) (i32.const 1) ) ) (i32.store8 (i32.add (i32.load offset=8 (local.get $2) ) (local.get $3) ) (local.get $5) ) (if (local.get $5) (block (local.set $3 (i32.load offset=20 (local.get $2) ) ) (br $label$37) ) (block (local.set $3 (local.get $4) ) (br $label$35 (i32.const 0) ) ) ) ) ) (i32.const 1) ) ) (block $label$42 (br_if $label$42 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $2) ) ) ) ) (br_if $label$42 (i32.le_u (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (local.get $3) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $2) ) (local.get $3) ) (i32.sub (local.get $4) (local.get $3) ) ) ) ) (br_if $label$12 (i32.eqz (local.get $5) ) ) (local.set $3 (i32.load offset=4 (local.get $2) ) ) ) (br_if $label$10 (i32.eq (local.get $3) (i32.const 91) ) ) (br $label$9) ) (i32.store offset=32 (local.get $2) (i32.const 0) ) ) (i32.store offset=4 (local.get $2) (i32.const 91) ) ) (br_if $label$8 (i32.eqz (i32.load offset=36 (i32.load offset=28 (local.get $2) ) ) ) ) (local.set $4 (local.tee $3 (i32.load offset=20 (local.get $2) ) ) ) (local.set $5 (block $label$43 (result i32) (loop $label$45 (block $label$44 (if (i32.eq (i32.load offset=12 (local.get $2) ) (local.get $3) ) (block (block $label$47 (br_if $label$47 (i32.le_u (local.get $3) (local.get $4) ) ) (br_if $label$47 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $2) ) ) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $2) ) (local.get $4) ) (i32.sub (local.get $3) (local.get $4) ) ) ) ) (block $label$48 (br_if $label$48 (i32.eqz (local.tee $3 (select (local.tee $3 (i32.load offset=16 (local.get $0) ) ) (local.tee $5 (i32.load offset=20 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.lt_u (local.get $3) (local.get $5) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $3) ) ) (i32.store offset=20 (local.get $4) (local.tee $3 (i32.sub (i32.load offset=20 (local.get $4) ) (local.get $3) ) ) ) (br_if $label$48 (local.get $3) ) (i32.store offset=16 (local.get $4) (i32.load offset=8 (local.get $4) ) ) ) (br_if $label$44 (i32.eq (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.load offset=12 (local.get $2) ) ) ) (local.set $4 (local.get $3) ) ) ) (local.set $5 (i32.load offset=36 (i32.load offset=28 (local.get $2) ) ) ) (i32.store offset=32 (local.get $2) (i32.add (local.tee $6 (i32.load offset=32 (local.get $2) ) ) (i32.const 1) ) ) (local.set $5 (i32.load8_u (i32.add (local.get $5) (local.get $6) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.get $3) (i32.const 1) ) ) (i32.store8 (i32.add (i32.load offset=8 (local.get $2) ) (local.get $3) ) (local.get $5) ) (if (local.get $5) (block (local.set $3 (i32.load offset=20 (local.get $2) ) ) (br $label$45) ) (block (local.set $3 (local.get $4) ) (br $label$43 (i32.const 0) ) ) ) ) ) (i32.const 1) ) ) (block $label$50 (br_if $label$50 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $2) ) ) ) ) (br_if $label$50 (i32.le_u (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (local.get $3) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $2) ) (local.get $3) ) (i32.sub (local.get $4) (local.get $3) ) ) ) ) (br_if $label$8 (i32.eqz (local.get $5) ) ) (local.set $3 (i32.load offset=4 (local.get $2) ) ) ) (br_if $label$7 (i32.eq (local.get $3) (i32.const 103) ) ) (br $label$6) ) (i32.store offset=4 (local.get $2) (i32.const 103) ) ) (if (i32.load offset=44 (i32.load offset=28 (local.get $2) ) ) (block (block $label$52 (br_if $label$52 (i32.ge_u (i32.load offset=12 (local.get $2) ) (i32.add (i32.load offset=20 (local.get $2) ) (i32.const 2) ) ) ) (br_if $label$52 (i32.eqz (local.tee $3 (select (local.tee $3 (i32.load offset=16 (local.get $0) ) ) (local.tee $5 (i32.load offset=20 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.lt_u (local.get $3) (local.get $5) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $3) ) ) (i32.store offset=20 (local.get $4) (local.tee $3 (i32.sub (i32.load offset=20 (local.get $4) ) (local.get $3) ) ) ) (br_if $label$52 (local.get $3) ) (i32.store offset=16 (local.get $4) (i32.load offset=8 (local.get $4) ) ) ) (br_if $label$6 (i32.lt_u (i32.load offset=12 (local.get $2) ) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 2) ) ) ) (local.set $4 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.get $3) (i32.const 1) ) ) (i32.store8 (i32.add (i32.load offset=8 (local.get $2) ) (local.get $3) ) (local.get $4) ) (local.set $3 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $4 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $4) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $3) (i32.const 8) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.const 0) (i32.const 0) (i32.const 0) ) ) (i32.store offset=4 (local.get $2) (i32.const 113) ) (br $label$6) ) ) (i32.store offset=4 (local.get $2) (i32.const 113) ) ) (block $label$53 (if (i32.load offset=20 (local.get $2) ) (block (block $label$55 (br_if $label$55 (i32.eqz (local.tee $3 (select (local.tee $5 (i32.load offset=16 (local.get $0) ) ) (local.tee $3 (i32.load offset=20 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $3) (local.get $5) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.get $0) (local.tee $5 (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $3) ) ) ) (i32.store offset=20 (local.get $4) (local.tee $3 (i32.sub (i32.load offset=20 (local.get $4) ) (local.get $3) ) ) ) (br_if $label$55 (local.get $3) ) (i32.store offset=16 (local.get $4) (i32.load offset=8 (local.get $4) ) ) ) (br_if $label$53 (local.get $5) ) (br $folding-inner1) ) ) (br_if $label$53 (i32.eq (local.get $1) (i32.const 4) ) ) (br_if $label$53 (i32.gt_s (local.get $1) (local.get $7) ) ) (br_if $label$53 (i32.load offset=4 (local.get $0) ) ) (br $folding-inner0) ) (local.set $3 (i32.load offset=4 (local.get $0) ) ) (block $label$56 (block $label$57 (block $label$58 (if (i32.eq (local.tee $4 (i32.load offset=4 (local.get $2) ) ) (i32.const 666) ) (block (br_if $label$58 (i32.eqz (local.get $3) ) ) (br $folding-inner0) ) ) (br_if $label$57 (local.get $3) ) ) (br_if $label$57 (i32.eqz (i32.or (i32.eqz (local.get $1) ) (i32.eq (local.get $4) (i32.const 666) ) ) ) ) (br_if $label$56 (i32.eqz (i32.load offset=116 (local.get $2) ) ) ) ) (if (i32.eq (i32.or (local.tee $3 (block $label$60 (result i32) (block $label$61 (if (i32.ne (local.tee $3 (i32.load offset=136 (local.get $2) ) ) (i32.const 3) ) (block (br_if $label$61 (i32.ne (local.get $3) (i32.const 2) ) ) (br $label$60 (call $fimport$20 (local.get $2) (local.get $1) ) ) ) ) (br $label$60 (call $fimport$21 (local.get $2) (local.get $1) ) ) ) (call_indirect (type $2) (local.get $2) (local.get $1) (i32.load (i32.add (i32.mul (i32.load offset=132 (local.get $2) ) (i32.const 12) ) (i32.const 11032) ) ) ) ) ) (i32.const 1) ) (i32.const 3) ) (i32.store offset=4 (local.get $2) (i32.const 666) ) ) (if (i32.eqz (i32.and (local.get $3) (i32.const -3) ) ) (block (local.set $3 (i32.const 0) ) (br_if $label$1 (i32.load offset=16 (local.get $0) ) ) (br $folding-inner1) ) ) (br_if $label$56 (i32.ne (local.get $3) (i32.const 1) ) ) (block $label$65 (br_if $label$65 (i32.eq (local.get $1) (i32.const 5) ) ) (if (i32.eq (local.get $1) (i32.const 1) ) (block (call $fimport$30 (local.get $2) ) (br $label$65) ) ) (call $fimport$29 (local.get $2) (i32.const 0) (i32.const 0) (i32.const 0) ) (br_if $label$65 (i32.ne (local.get $1) (i32.const 3) ) ) (i32.store16 (i32.add (local.tee $3 (i32.load offset=68 (local.get $2) ) ) (local.tee $4 (i32.sub (i32.shl (i32.load offset=76 (local.get $2) ) (i32.const 1) ) (i32.const 2) ) ) ) (i32.const 0) ) (drop (call $fimport$97 (local.get $3) (i32.const 0) (local.get $4) ) ) (br_if $label$65 (i32.load offset=116 (local.get $2) ) ) (i32.store offset=92 (local.get $2) (i32.const 0) ) (i32.store offset=108 (local.get $2) (i32.const 0) ) ) (block $label$67 (br_if $label$67 (i32.eqz (local.tee $3 (select (local.tee $5 (i32.load offset=16 (local.get $0) ) ) (local.tee $3 (i32.load offset=20 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $3) (local.get $5) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.tee $4 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $4) ) (local.get $3) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $3) ) ) (i32.store offset=16 (local.get $0) (local.tee $5 (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $3) ) ) ) (i32.store offset=20 (local.get $4) (local.tee $3 (i32.sub (i32.load offset=20 (local.get $4) ) (local.get $3) ) ) ) (br_if $label$67 (local.get $3) ) (i32.store offset=16 (local.get $4) (i32.load offset=8 (local.get $4) ) ) ) (br_if $label$56 (local.get $5) ) (br $folding-inner1) ) (local.set $3 (i32.const 0) ) (br_if $label$1 (i32.ne (local.get $1) (i32.const 4) ) ) (local.set $3 (i32.const 1) ) (br_if $label$1 (i32.le_s (local.tee $4 (i32.load offset=24 (local.get $2) ) ) (i32.const 0) ) ) (local.set $1 (i32.load offset=48 (local.get $0) ) ) (i32.store8 (block $label$68 (result i32) (if (i32.eq (local.get $4) (i32.const 2) ) (block (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (local.get $1) ) (local.set $1 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $1) (i32.const 8) ) ) (local.set $1 (i32.load16_u offset=50 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (local.get $1) ) (local.set $1 (i32.load8_u offset=51 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (local.get $1) ) (local.set $1 (i32.load offset=8 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (local.get $1) ) (local.set $1 (i32.load offset=8 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $1) (i32.const 8) ) ) (local.set $1 (i32.load16_u offset=10 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (local.get $1) ) (local.set $3 (i32.load8_u offset=11 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $1 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (br $label$68 (i32.add (local.get $1) (i32.load offset=8 (local.get $2) ) ) ) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $1) (i32.const 24) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $3 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $3) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $1) (i32.const 16) ) ) (local.set $3 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $1 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $2) ) ) (i32.shr_u (local.get $3) (i32.const 8) ) ) (i32.store offset=20 (local.get $2) (i32.add (local.tee $1 (i32.load offset=20 (local.get $2) ) ) (i32.const 1) ) ) (i32.add (local.get $1) (i32.load offset=8 (local.get $2) ) ) ) (local.get $3) ) (block $label$70 (br_if $label$70 (i32.eqz (local.tee $1 (select (local.tee $1 (i32.load offset=16 (local.get $0) ) ) (local.tee $4 (i32.load offset=20 (local.tee $3 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.lt_u (local.get $1) (local.get $4) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $3) ) (local.get $1) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $1) ) ) (i32.store offset=16 (local.tee $3 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $3) ) (local.get $1) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $1) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $1) ) ) (i32.store offset=20 (local.get $3) (local.tee $0 (i32.sub (i32.load offset=20 (local.get $3) ) (local.get $1) ) ) ) (br_if $label$70 (local.get $0) ) (i32.store offset=16 (local.get $3) (i32.load offset=8 (local.get $3) ) ) ) (if (i32.gt_s (local.tee $0 (i32.load offset=24 (local.get $2) ) ) (i32.const 0) ) (i32.store offset=24 (local.get $2) (i32.sub (i32.const 0) (local.get $0) ) ) ) (local.set $3 (i32.eqz (i32.load offset=20 (local.get $2) ) ) ) ) (return (local.get $3) ) ) (i32.store offset=24 (local.get $0) (i32.load (i32.const 17004) ) ) (return (i32.const -5) ) ) (i32.store offset=40 (local.get $2) (i32.const -1) ) (i32.const 0) ) ) binaryen-version_108/test/passes/O3_low-memory-unused_metrics.wast000066400000000000000000002376671423707623100256460ustar00rootroot00000000000000;; zlib key deflate() function, with deflate_rle/deflate_huff inlining disabled (module (type $0 (func (param i32 i32 i32) (result i32))) (type $1 (func (param i32 i32))) (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32 i32 i32 i32))) (type $4 (func (param i32) (result i32))) (type $5 (func)) (type $6 (func (param i32 i32 i32))) (type $7 (func (result i32))) (type $8 (func (param i32 i32 i32 i32) (result i32))) (type $9 (func (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $10 (func (param i32))) (type $11 (func (param i32 i32 i32 i32 i32 i32) (result i32))) (type $12 (func (param i64 i64) (result i32))) (type $13 (func (param i32 i64 i64 i32))) (type $14 (func (param i32 i32 i32 i32 i32) (result i32))) (type $15 (func (param i64 i32 i32) (result i32))) (type $16 (func (param i64 i32) (result i32))) (type $17 (func (param i32 i32 i32 i32 i32))) (type $18 (func (param i32 i64 i64 i32 i32 i32 i32) (result i32))) (type $19 (func (param i32 i64 i64 i64 i64))) (type $20 (func (param i64 i64 i64 i64) (result i32))) (type $21 (func (param i32 f64))) (type $22 (func (param i32 i32 i32) (result i32))) (type $23 (func (param i32 i32))) (type $24 (func (param i32 i32) (result i32))) (type $25 (func (param i32) (result i32))) (type $26 (func (result i32))) (type $27 (func (param i32))) (type $28 (func (param i32 i32 i32 i32) (result i32))) (type $29 (func (param i32 i32 i32))) (import "env" "memory" (memory $108 4096 4096)) (import "env" "table" (table $timport$109 10 funcref)) (import "env" "__assert_fail" (func $fimport$0 (param i32 i32 i32 i32))) (import "env" "__syscall54" (func $fimport$1 (param i32 i32) (result i32))) (import "env" "__syscall6" (func $fimport$2 (param i32 i32) (result i32))) (import "env" "__syscall140" (func $fimport$3 (param i32 i32) (result i32))) (import "env" "__syscall146" (func $fimport$4 (param i32 i32) (result i32))) (import "env" "sbrk" (func $fimport$5 (param i32) (result i32))) (import "env" "emscripten_memcpy_big" (func $fimport$6 (param i32 i32 i32) (result i32))) (import "env" "__wasm_call_ctors" (func $fimport$7)) (import "env" "doit" (func $fimport$8 (param i32 i32 i32))) (import "env" "benchmark_main" (func $fimport$9 (param i32 i32) (result i32))) (import "env" "__original_main" (func $fimport$10 (result i32))) (import "env" "main" (func $fimport$11 (param i32 i32) (result i32))) (import "env" "compress" (func $fimport$12 (param i32 i32 i32 i32) (result i32))) (import "env" "compressBound" (func $fimport$13 (param i32) (result i32))) (import "env" "crc32" (func $fimport$14 (param i32 i32 i32) (result i32))) (import "env" "adler32" (func $fimport$15 (param i32 i32 i32) (result i32))) (import "env" "deflateInit_" (func $fimport$16 (param i32 i32 i32 i32) (result i32))) (import "env" "deflateInit2_" (func $fimport$17 (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (import "env" "deflateEnd" (func $fimport$18 (param i32) (result i32))) (import "env" "deflateReset" (func $fimport$19 (param i32) (result i32))) (import "env" "deflate_huff" (func $fimport$20 (param i32 i32) (result i32))) (import "env" "deflate_rle" (func $fimport$21 (param i32 i32) (result i32))) (import "env" "fill_window" (func $fimport$22 (param i32))) (import "env" "deflate_stored" (func $fimport$23 (param i32 i32) (result i32))) (import "env" "deflate_fast" (func $fimport$24 (param i32 i32) (result i32))) (import "env" "longest_match" (func $fimport$25 (param i32 i32) (result i32))) (import "env" "deflate_slow" (func $fimport$26 (param i32 i32) (result i32))) (import "env" "_tr_init" (func $fimport$27 (param i32))) (import "env" "init_block" (func $fimport$28 (param i32))) (import "env" "_tr_stored_block" (func $fimport$29 (param i32 i32 i32 i32))) (import "env" "_tr_align" (func $fimport$30 (param i32))) (import "env" "_tr_flush_block" (func $fimport$31 (param i32 i32 i32 i32))) (import "env" "build_tree" (func $fimport$32 (param i32 i32))) (import "env" "compress_block" (func $fimport$33 (param i32 i32 i32))) (import "env" "send_tree" (func $fimport$34 (param i32 i32 i32))) (import "env" "inflate_table" (func $fimport$35 (param i32 i32 i32 i32 i32 i32) (result i32))) (import "env" "inflate_fast" (func $fimport$36 (param i32 i32))) (import "env" "inflateInit2_" (func $fimport$37 (param i32 i32 i32 i32) (result i32))) (import "env" "inflateInit_" (func $fimport$38 (param i32 i32 i32) (result i32))) (import "env" "inflate" (func $fimport$39 (param i32 i32) (result i32))) (import "env" "updatewindow" (func $fimport$40 (param i32 i32) (result i32))) (import "env" "inflateEnd" (func $fimport$41 (param i32) (result i32))) (import "env" "uncompress" (func $fimport$42 (param i32 i32 i32 i32) (result i32))) (import "env" "zcalloc" (func $fimport$43 (param i32 i32 i32) (result i32))) (import "env" "zcfree" (func $fimport$44 (param i32 i32))) (import "env" "strcmp" (func $fimport$45 (param i32 i32) (result i32))) (import "env" "puts" (func $fimport$46 (param i32) (result i32))) (import "env" "strlen" (func $fimport$47 (param i32) (result i32))) (import "env" "fputs" (func $fimport$48 (param i32 i32) (result i32))) (import "env" "__towrite" (func $fimport$49 (param i32) (result i32))) (import "env" "__fwritex" (func $fimport$50 (param i32 i32 i32) (result i32))) (import "env" "fwrite" (func $fimport$51 (param i32 i32 i32 i32) (result i32))) (import "env" "__lockfile" (func $fimport$52 (param i32) (result i32))) (import "env" "__unlockfile" (func $fimport$53 (param i32))) (import "env" "__stdout_write" (func $fimport$54 (param i32 i32 i32) (result i32))) (import "env" "__errno_location" (func $fimport$55 (result i32))) (import "env" "__syscall_ret" (func $fimport$56 (param i32) (result i32))) (import "env" "dummy" (func $fimport$57 (param i32) (result i32))) (import "env" "__stdio_close" (func $fimport$58 (param i32) (result i32))) (import "env" "printf" (func $fimport$59 (param i32 i32) (result i32))) (import "env" "__overflow" (func $fimport$60 (param i32 i32) (result i32))) (import "env" "isdigit" (func $fimport$61 (param i32) (result i32))) (import "env" "memchr" (func $fimport$62 (param i32 i32 i32) (result i32))) (import "env" "pthread_self" (func $fimport$63 (result i32))) (import "env" "wcrtomb" (func $fimport$64 (param i32 i32 i32) (result i32))) (import "env" "__pthread_self" (func $fimport$65 (result i32))) (import "env" "wctomb" (func $fimport$66 (param i32 i32) (result i32))) (import "env" "__signbitl" (func $fimport$67 (param i64 i64) (result i32))) (import "env" "frexpl" (func $fimport$68 (param i32 i64 i64 i32))) (import "env" "vfprintf" (func $fimport$69 (param i32 i32 i32) (result i32))) (import "env" "printf_core" (func $fimport$70 (param i32 i32 i32 i32 i32) (result i32))) (import "env" "out" (func $fimport$71 (param i32 i32 i32))) (import "env" "getint" (func $fimport$72 (param i32) (result i32))) (import "env" "pop_arg" (func $fimport$73 (param i32 i32 i32))) (import "env" "fmt_x" (func $fimport$74 (param i64 i32 i32) (result i32))) (import "env" "fmt_o" (func $fimport$75 (param i64 i32) (result i32))) (import "env" "fmt_u" (func $fimport$76 (param i64 i32) (result i32))) (import "env" "pad" (func $fimport$77 (param i32 i32 i32 i32 i32))) (import "env" "fmt_fp" (func $fimport$78 (param i32 i64 i64 i32 i32 i32 i32) (result i32))) (import "env" "__stdio_seek" (func $fimport$79 (param i32 i32 i32) (result i32))) (import "env" "__stdio_write" (func $fimport$80 (param i32 i32 i32) (result i32))) (import "env" "malloc" (func $fimport$81 (param i32) (result i32))) (import "env" "free" (func $fimport$82 (param i32))) (import "env" "__addtf3" (func $fimport$83 (param i32 i64 i64 i64 i64))) (import "env" "__ashlti3" (func $fimport$84 (param i32 i64 i64 i32))) (import "env" "__unordtf2" (func $fimport$85 (param i64 i64 i64 i64) (result i32))) (import "env" "__eqtf2" (func $fimport$86 (param i64 i64 i64 i64) (result i32))) (import "env" "__netf2" (func $fimport$87 (param i64 i64 i64 i64) (result i32))) (import "env" "__extenddftf2" (func $fimport$88 (param i32 f64))) (import "env" "__fixtfsi" (func $fimport$89 (param i64 i64) (result i32))) (import "env" "__fixunstfsi" (func $fimport$90 (param i64 i64) (result i32))) (import "env" "__floatsitf" (func $fimport$91 (param i32 i32))) (import "env" "__floatunsitf" (func $fimport$92 (param i32 i32))) (import "env" "__lshrti3" (func $fimport$93 (param i32 i64 i64 i32))) (import "env" "__multf3" (func $fimport$94 (param i32 i64 i64 i64 i64))) (import "env" "__subtf3" (func $fimport$95 (param i32 i64 i64 i64 i64))) (import "env" "__fpclassifyl" (func $fimport$96 (param i64 i64) (result i32))) (import "env" "memset" (func $fimport$97 (param i32 i32 i32) (result i32))) (import "env" "memcpy" (func $fimport$98 (param i32 i32 i32) (result i32))) (import "env" "setThrew" (func $fimport$99 (param i32 i32))) (import "env" "stackSave" (func $fimport$100 (result i32))) (import "env" "stackAlloc" (func $fimport$101 (param i32) (result i32))) (import "env" "stackRestore" (func $fimport$102 (param i32))) (import "env" "__growWasmMemory" (func $fimport$103 (param i32) (result i32))) (import "env" "dynCall_iiii" (func $fimport$104 (param i32 i32 i32 i32) (result i32))) (import "env" "dynCall_vii" (func $fimport$105 (param i32 i32 i32))) (import "env" "dynCall_iii" (func $fimport$106 (param i32 i32 i32) (result i32))) (import "env" "dynCall_ii" (func $fimport$107 (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 5260880)) (global $global$2 i32 (i32.const 17988)) (export "deflate" (func $0)) (func $0 (; 108 ;) (type $2) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local.set $2 (i32.const -2) ) (block $label$1 (br_if $label$1 (i32.eqz (local.get $0) ) ) (br_if $label$1 (i32.gt_u (local.get $1) (i32.const 5) ) ) (br_if $label$1 (i32.eqz (local.tee $3 (i32.load offset=28 (local.get $0) ) ) ) ) (block $label$2 (block $label$3 (br_if $label$3 (i32.eqz (i32.load offset=12 (local.get $0) ) ) ) (block $label$4 (br_if $label$4 (i32.load (local.get $0) ) ) (br_if $label$3 (i32.load offset=4 (local.get $0) ) ) ) (local.set $2 (i32.load offset=4 (local.get $3) ) ) (br_if $label$2 (i32.eq (local.get $1) (i32.const 4) ) ) (br_if $label$2 (i32.ne (local.get $2) (i32.const 666) ) ) ) (i32.store offset=24 (local.get $0) (i32.load offset=16992 (i32.const 0) ) ) (return (i32.const -2) ) ) (block $label$5 (br_if $label$5 (i32.load offset=16 (local.get $0) ) ) (i32.store offset=24 (local.get $0) (i32.load offset=17004 (i32.const 0) ) ) (return (i32.const -5) ) ) (i32.store (local.get $3) (local.get $0) ) (local.set $4 (i32.load offset=40 (local.get $3) ) ) (i32.store offset=40 (local.get $3) (local.get $1) ) (block $label$6 (block $label$7 (block $label$8 (block $label$9 (block $label$10 (block $label$11 (block $label$12 (block $label$13 (block $label$14 (block $label$15 (block $label$16 (block $label$17 (br_if $label$17 (i32.ne (local.get $2) (i32.const 42) ) ) (block $label$18 (br_if $label$18 (i32.ne (i32.load offset=24 (local.get $3) ) (i32.const 2) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.const 0) (i32.const 0) (i32.const 0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 31) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 139) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 8) ) (block $label$19 (br_if $label$19 (local.tee $2 (i32.load offset=28 (local.get $3) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 0) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 0) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 0) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 0) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 0) ) (local.set $2 (i32.const 2) ) (block $label$20 (br_if $label$20 (i32.eq (local.tee $5 (i32.load offset=132 (local.get $3) ) ) (i32.const 9) ) ) (local.set $2 (select (i32.const 4) (i32.shl (i32.gt_s (i32.load offset=136 (local.get $3) ) (i32.const 1) ) (i32.const 2) ) (i32.lt_s (local.get $5) (i32.const 2) ) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $2) (i32.load offset=8 (local.get $3) ) ) (i32.const 3) ) (i32.store offset=4 (local.get $3) (i32.const 113) ) (br $label$6) ) (local.set $5 (i32.load offset=36 (local.get $2) ) ) (local.set $6 (i32.load offset=28 (local.get $2) ) ) (local.set $7 (i32.load offset=16 (local.get $2) ) ) (local.set $8 (i32.load offset=44 (local.get $2) ) ) (local.set $9 (i32.load (local.get $2) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $10 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (local.set $2 (i32.const 2) ) (i32.store8 (i32.add (local.get $10) (i32.load offset=8 (local.get $3) ) ) (i32.or (i32.or (i32.or (i32.or (i32.shl (i32.ne (local.get $8) (i32.const 0) ) (i32.const 1) ) (i32.ne (local.get $9) (i32.const 0) ) ) (i32.shl (i32.ne (local.get $7) (i32.const 0) ) (i32.const 2) ) ) (i32.shl (i32.ne (local.get $6) (i32.const 0) ) (i32.const 3) ) ) (i32.shl (i32.ne (local.get $5) (i32.const 0) ) (i32.const 4) ) ) ) (local.set $5 (i32.load offset=4 (i32.load offset=28 (local.get $3) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $6 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $6) (i32.load offset=8 (local.get $3) ) ) (local.get $5) ) (local.set $5 (i32.load offset=4 (i32.load offset=28 (local.get $3) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $6 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $6) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $5) (i32.const 8) ) ) (local.set $5 (i32.load16_u (i32.add (i32.load offset=28 (local.get $3) ) (i32.const 6) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $6 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $6) (i32.load offset=8 (local.get $3) ) ) (local.get $5) ) (local.set $5 (i32.load8_u (i32.add (i32.load offset=28 (local.get $3) ) (i32.const 7) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $6 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $6) (i32.load offset=8 (local.get $3) ) ) (local.get $5) ) (block $label$21 (br_if $label$21 (i32.eq (local.tee $5 (i32.load offset=132 (local.get $3) ) ) (i32.const 9) ) ) (local.set $2 (select (i32.const 4) (i32.shl (i32.gt_s (i32.load offset=136 (local.get $3) ) (i32.const 1) ) (i32.const 2) ) (i32.lt_s (local.get $5) (i32.const 2) ) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (local.set $2 (i32.load offset=12 (i32.load offset=28 (local.get $3) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (block $label$22 (br_if $label$22 (i32.eqz (i32.load offset=16 (local.tee $2 (i32.load offset=28 (local.get $3) ) ) ) ) ) (local.set $2 (i32.load offset=20 (local.get $2) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (local.set $2 (i32.load offset=20 (i32.load offset=28 (local.get $3) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 8) ) ) (local.set $2 (i32.load offset=28 (local.get $3) ) ) ) (block $label$23 (br_if $label$23 (i32.eqz (i32.load offset=44 (local.get $2) ) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.load offset=8 (local.get $3) ) (i32.load offset=20 (local.get $3) ) ) ) ) (i32.store offset=4 (local.get $3) (i32.const 69) ) (i32.store offset=32 (local.get $3) (i32.const 0) ) (br $label$16) ) (local.set $5 (i32.add (i32.shl (i32.load offset=48 (local.get $3) ) (i32.const 12) ) (i32.const -30720) ) ) (local.set $2 (i32.const 0) ) (block $label$24 (br_if $label$24 (i32.gt_s (i32.load offset=136 (local.get $3) ) (i32.const 1) ) ) (br_if $label$24 (i32.lt_s (local.tee $6 (i32.load offset=132 (local.get $3) ) ) (i32.const 2) ) ) (local.set $2 (i32.const 64) ) (br_if $label$24 (i32.lt_s (local.get $6) (i32.const 6) ) ) (local.set $2 (select (i32.const 128) (i32.const 192) (i32.eq (local.get $6) (i32.const 6) ) ) ) ) (i32.store offset=4 (local.get $3) (i32.const 113) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $6 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $6) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.tee $2 (select (i32.or (local.tee $2 (i32.or (local.get $2) (local.get $5) ) ) (i32.const 32) ) (local.get $2) (i32.load offset=108 (local.get $3) ) ) ) (i32.const 8) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (i32.xor (i32.or (i32.rem_u (local.get $2) (i32.const 31) ) (local.get $2) ) (i32.const 31) ) ) (block $label$25 (br_if $label$25 (i32.eqz (i32.load offset=108 (local.get $3) ) ) ) (local.set $2 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 24) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 16) ) ) (local.set $2 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 8) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) ) (i32.store offset=48 (local.get $0) (call $fimport$15 (i32.const 0) (i32.const 0) (i32.const 0) ) ) (local.set $2 (i32.load offset=4 (local.get $3) ) ) ) (br_if $label$15 (i32.ne (local.get $2) (i32.const 69) ) ) ) (block $label$26 (block $label$27 (br_if $label$27 (i32.eqz (i32.load offset=16 (local.tee $5 (i32.load offset=28 (local.get $3) ) ) ) ) ) (local.set $2 (i32.load offset=20 (local.get $3) ) ) (br_if $label$26 (i32.ge_u (local.tee $6 (i32.load offset=32 (local.get $3) ) ) (i32.load16_u offset=20 (local.get $5) ) ) ) (local.set $7 (local.get $2) ) (loop $label$28 (block $label$29 (br_if $label$29 (i32.ne (local.get $2) (i32.load offset=12 (local.get $3) ) ) ) (block $label$30 (br_if $label$30 (i32.le_u (local.get $2) (local.get $7) ) ) (br_if $label$30 (i32.eqz (i32.load offset=44 (local.get $5) ) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $3) ) (local.get $7) ) (i32.sub (local.get $2) (local.get $7) ) ) ) ) (block $label$31 (br_if $label$31 (i32.eqz (local.tee $2 (select (local.tee $2 (i32.load offset=16 (local.get $0) ) ) (local.tee $5 (i32.load offset=20 (local.tee $6 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $5) (local.get $2) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $6) ) (local.get $2) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.tee $5 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $5) ) (local.get $2) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $2) ) ) (i32.store offset=20 (local.get $5) (local.tee $2 (i32.sub (i32.load offset=20 (local.get $5) ) (local.get $2) ) ) ) (br_if $label$31 (local.get $2) ) (i32.store offset=16 (local.get $5) (i32.load offset=8 (local.get $5) ) ) ) (local.set $5 (i32.load offset=28 (local.get $3) ) ) (br_if $label$26 (i32.eq (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.load offset=12 (local.get $3) ) ) ) (local.set $6 (i32.load offset=32 (local.get $3) ) ) (local.set $7 (local.get $2) ) ) (local.set $5 (i32.load8_u (i32.add (i32.load offset=16 (local.get $5) ) (local.get $6) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.get $2) (i32.const 1) ) ) (i32.store8 (i32.add (i32.load offset=8 (local.get $3) ) (local.get $2) ) (local.get $5) ) (i32.store offset=32 (local.get $3) (local.tee $6 (i32.add (i32.load offset=32 (local.get $3) ) (i32.const 1) ) ) ) (block $label$32 (br_if $label$32 (i32.lt_u (local.get $6) (i32.load16_u offset=20 (local.tee $5 (i32.load offset=28 (local.get $3) ) ) ) ) ) (local.set $2 (local.get $7) ) (br $label$26) ) (local.set $2 (i32.load offset=20 (local.get $3) ) ) (br $label$28) ) ) (i32.store offset=4 (local.get $3) (i32.const 73) ) (br $label$14) ) (block $label$33 (br_if $label$33 (i32.eqz (i32.load offset=44 (local.get $5) ) ) ) (br_if $label$33 (i32.le_u (local.tee $6 (i32.load offset=20 (local.get $3) ) ) (local.get $2) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $3) ) (local.get $2) ) (i32.sub (local.get $6) (local.get $2) ) ) ) (local.set $5 (i32.load offset=28 (local.get $3) ) ) ) (block $label$34 (br_if $label$34 (i32.ne (i32.load offset=32 (local.get $3) ) (i32.load offset=20 (local.get $5) ) ) ) (i32.store offset=4 (local.get $3) (i32.const 73) ) (i32.store offset=32 (local.get $3) (i32.const 0) ) (br $label$14) ) (local.set $2 (i32.load offset=4 (local.get $3) ) ) ) (br_if $label$13 (i32.ne (local.get $2) (i32.const 73) ) ) (local.set $5 (i32.load offset=28 (local.get $3) ) ) ) (br_if $label$11 (i32.eqz (i32.load offset=28 (local.get $5) ) ) ) (local.set $7 (local.tee $2 (i32.load offset=20 (local.get $3) ) ) ) (block $label$35 (block $label$36 (loop $label$37 (block $label$38 (br_if $label$38 (i32.ne (local.get $2) (i32.load offset=12 (local.get $3) ) ) ) (block $label$39 (br_if $label$39 (i32.le_u (local.get $2) (local.get $7) ) ) (br_if $label$39 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $3) ) ) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $3) ) (local.get $7) ) (i32.sub (local.get $2) (local.get $7) ) ) ) ) (block $label$40 (br_if $label$40 (i32.eqz (local.tee $2 (select (local.tee $2 (i32.load offset=16 (local.get $0) ) ) (local.tee $5 (i32.load offset=20 (local.tee $6 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $5) (local.get $2) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $6) ) (local.get $2) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.tee $5 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $5) ) (local.get $2) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $2) ) ) (i32.store offset=20 (local.get $5) (local.tee $2 (i32.sub (i32.load offset=20 (local.get $5) ) (local.get $2) ) ) ) (br_if $label$40 (local.get $2) ) (i32.store offset=16 (local.get $5) (i32.load offset=8 (local.get $5) ) ) ) (br_if $label$36 (i32.eq (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.load offset=12 (local.get $3) ) ) ) (local.set $7 (local.get $2) ) ) (local.set $5 (i32.load offset=28 (i32.load offset=28 (local.get $3) ) ) ) (i32.store offset=32 (local.get $3) (i32.add (local.tee $6 (i32.load offset=32 (local.get $3) ) ) (i32.const 1) ) ) (local.set $5 (i32.load8_u (i32.add (local.get $5) (local.get $6) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.get $2) (i32.const 1) ) ) (i32.store8 (i32.add (i32.load offset=8 (local.get $3) ) (local.get $2) ) (local.get $5) ) (block $label$41 (br_if $label$41 (local.get $5) ) (local.set $5 (i32.const 0) ) (local.set $2 (local.get $7) ) (br $label$35) ) (local.set $2 (i32.load offset=20 (local.get $3) ) ) (br $label$37) ) ) (local.set $5 (i32.const 1) ) ) (block $label$42 (br_if $label$42 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $3) ) ) ) ) (br_if $label$42 (i32.le_u (local.tee $6 (i32.load offset=20 (local.get $3) ) ) (local.get $2) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $3) ) (local.get $2) ) (i32.sub (local.get $6) (local.get $2) ) ) ) ) (br_if $label$12 (i32.eqz (local.get $5) ) ) (local.set $2 (i32.load offset=4 (local.get $3) ) ) ) (br_if $label$10 (i32.eq (local.get $2) (i32.const 91) ) ) (br $label$9) ) (i32.store offset=32 (local.get $3) (i32.const 0) ) ) (i32.store offset=4 (local.get $3) (i32.const 91) ) ) (br_if $label$8 (i32.eqz (i32.load offset=36 (i32.load offset=28 (local.get $3) ) ) ) ) (local.set $7 (local.tee $2 (i32.load offset=20 (local.get $3) ) ) ) (block $label$43 (block $label$44 (loop $label$45 (block $label$46 (br_if $label$46 (i32.ne (local.get $2) (i32.load offset=12 (local.get $3) ) ) ) (block $label$47 (br_if $label$47 (i32.le_u (local.get $2) (local.get $7) ) ) (br_if $label$47 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $3) ) ) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $3) ) (local.get $7) ) (i32.sub (local.get $2) (local.get $7) ) ) ) ) (block $label$48 (br_if $label$48 (i32.eqz (local.tee $2 (select (local.tee $2 (i32.load offset=16 (local.get $0) ) ) (local.tee $5 (i32.load offset=20 (local.tee $6 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $5) (local.get $2) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $6) ) (local.get $2) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.tee $5 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $5) ) (local.get $2) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $2) ) ) (i32.store offset=20 (local.get $5) (local.tee $2 (i32.sub (i32.load offset=20 (local.get $5) ) (local.get $2) ) ) ) (br_if $label$48 (local.get $2) ) (i32.store offset=16 (local.get $5) (i32.load offset=8 (local.get $5) ) ) ) (br_if $label$44 (i32.eq (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.load offset=12 (local.get $3) ) ) ) (local.set $7 (local.get $2) ) ) (local.set $5 (i32.load offset=36 (i32.load offset=28 (local.get $3) ) ) ) (i32.store offset=32 (local.get $3) (i32.add (local.tee $6 (i32.load offset=32 (local.get $3) ) ) (i32.const 1) ) ) (local.set $5 (i32.load8_u (i32.add (local.get $5) (local.get $6) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.get $2) (i32.const 1) ) ) (i32.store8 (i32.add (i32.load offset=8 (local.get $3) ) (local.get $2) ) (local.get $5) ) (block $label$49 (br_if $label$49 (local.get $5) ) (local.set $5 (i32.const 0) ) (local.set $2 (local.get $7) ) (br $label$43) ) (local.set $2 (i32.load offset=20 (local.get $3) ) ) (br $label$45) ) ) (local.set $5 (i32.const 1) ) ) (block $label$50 (br_if $label$50 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $3) ) ) ) ) (br_if $label$50 (i32.le_u (local.tee $6 (i32.load offset=20 (local.get $3) ) ) (local.get $2) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.load offset=48 (local.get $0) ) (i32.add (i32.load offset=8 (local.get $3) ) (local.get $2) ) (i32.sub (local.get $6) (local.get $2) ) ) ) ) (br_if $label$8 (i32.eqz (local.get $5) ) ) (local.set $2 (i32.load offset=4 (local.get $3) ) ) ) (br_if $label$7 (i32.eq (local.get $2) (i32.const 103) ) ) (br $label$6) ) (i32.store offset=4 (local.get $3) (i32.const 103) ) ) (block $label$51 (br_if $label$51 (i32.eqz (i32.load offset=44 (i32.load offset=28 (local.get $3) ) ) ) ) (block $label$52 (br_if $label$52 (i32.le_u (i32.add (i32.load offset=20 (local.get $3) ) (i32.const 2) ) (i32.load offset=12 (local.get $3) ) ) ) (br_if $label$52 (i32.eqz (local.tee $2 (select (local.tee $2 (i32.load offset=16 (local.get $0) ) ) (local.tee $5 (i32.load offset=20 (local.tee $6 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $5) (local.get $2) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $6) ) (local.get $2) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.tee $5 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $5) ) (local.get $2) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $2) ) ) (i32.store offset=20 (local.get $5) (local.tee $2 (i32.sub (i32.load offset=20 (local.get $5) ) (local.get $2) ) ) ) (br_if $label$52 (local.get $2) ) (i32.store offset=16 (local.get $5) (i32.load offset=8 (local.get $5) ) ) ) (br_if $label$6 (i32.gt_u (i32.add (local.tee $2 (i32.load offset=20 (local.get $3) ) ) (i32.const 2) ) (i32.load offset=12 (local.get $3) ) ) ) (local.set $5 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.get $2) (i32.const 1) ) ) (i32.store8 (i32.add (i32.load offset=8 (local.get $3) ) (local.get $2) ) (local.get $5) ) (local.set $2 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $5 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $5) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 8) ) ) (i32.store offset=48 (local.get $0) (call $fimport$14 (i32.const 0) (i32.const 0) (i32.const 0) ) ) (i32.store offset=4 (local.get $3) (i32.const 113) ) (br $label$6) ) (i32.store offset=4 (local.get $3) (i32.const 113) ) ) (block $label$53 (block $label$54 (br_if $label$54 (i32.eqz (i32.load offset=20 (local.get $3) ) ) ) (block $label$55 (br_if $label$55 (i32.eqz (local.tee $2 (select (local.tee $5 (i32.load offset=16 (local.get $0) ) ) (local.tee $2 (i32.load offset=20 (local.tee $6 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $2) (local.get $5) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $6) ) (local.get $2) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.tee $6 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $6) ) (local.get $2) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.get $0) (local.tee $5 (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $2) ) ) ) (i32.store offset=20 (local.get $6) (local.tee $2 (i32.sub (i32.load offset=20 (local.get $6) ) (local.get $2) ) ) ) (br_if $label$55 (local.get $2) ) (i32.store offset=16 (local.get $6) (i32.load offset=8 (local.get $6) ) ) ) (br_if $label$53 (local.get $5) ) (i32.store offset=40 (local.get $3) (i32.const -1) ) (return (i32.const 0) ) ) (br_if $label$53 (i32.eq (local.get $1) (i32.const 4) ) ) (br_if $label$53 (i32.lt_s (local.get $4) (local.get $1) ) ) (br_if $label$53 (i32.load offset=4 (local.get $0) ) ) (i32.store offset=24 (local.get $0) (i32.load offset=17004 (i32.const 0) ) ) (return (i32.const -5) ) ) (local.set $2 (i32.load offset=4 (local.get $0) ) ) (block $label$56 (block $label$57 (block $label$58 (block $label$59 (br_if $label$59 (i32.ne (local.tee $5 (i32.load offset=4 (local.get $3) ) ) (i32.const 666) ) ) (br_if $label$58 (i32.eqz (local.get $2) ) ) (i32.store offset=24 (local.get $0) (i32.load offset=17004 (i32.const 0) ) ) (return (i32.const -5) ) ) (br_if $label$57 (local.get $2) ) ) (br_if $label$57 (i32.ne (i32.or (i32.eqz (local.get $1) ) (i32.eq (local.get $5) (i32.const 666) ) ) (i32.const 1) ) ) (br_if $label$56 (i32.eqz (i32.load offset=116 (local.get $3) ) ) ) ) (block $label$60 (block $label$61 (block $label$62 (br_if $label$62 (i32.eq (local.tee $2 (i32.load offset=136 (local.get $3) ) ) (i32.const 3) ) ) (br_if $label$61 (i32.ne (local.get $2) (i32.const 2) ) ) (local.set $2 (call $fimport$20 (local.get $3) (local.get $1) ) ) (br $label$60) ) (local.set $2 (call $fimport$21 (local.get $3) (local.get $1) ) ) (br $label$60) ) (local.set $2 (call_indirect (type $2) (local.get $3) (local.get $1) (i32.load (i32.add (i32.mul (i32.load offset=132 (local.get $3) ) (i32.const 12) ) (i32.const 11032) ) ) ) ) ) (block $label$63 (br_if $label$63 (i32.ne (i32.or (local.get $2) (i32.const 1) ) (i32.const 3) ) ) (i32.store offset=4 (local.get $3) (i32.const 666) ) ) (block $label$64 (br_if $label$64 (i32.and (local.get $2) (i32.const -3) ) ) (local.set $2 (i32.const 0) ) (br_if $label$1 (i32.load offset=16 (local.get $0) ) ) (i32.store offset=40 (local.get $3) (i32.const -1) ) (return (i32.const 0) ) ) (br_if $label$56 (i32.ne (local.get $2) (i32.const 1) ) ) (block $label$65 (br_if $label$65 (i32.eq (local.get $1) (i32.const 5) ) ) (block $label$66 (br_if $label$66 (i32.ne (local.get $1) (i32.const 1) ) ) (call $fimport$30 (local.get $3) ) (br $label$65) ) (call $fimport$29 (local.get $3) (i32.const 0) (i32.const 0) (i32.const 0) ) (br_if $label$65 (i32.ne (local.get $1) (i32.const 3) ) ) (i32.store16 (i32.add (local.tee $2 (i32.load offset=68 (local.get $3) ) ) (local.tee $5 (i32.add (i32.shl (i32.load offset=76 (local.get $3) ) (i32.const 1) ) (i32.const -2) ) ) ) (i32.const 0) ) (drop (call $fimport$97 (local.get $2) (i32.const 0) (local.get $5) ) ) (br_if $label$65 (i32.load offset=116 (local.get $3) ) ) (i32.store offset=92 (local.get $3) (i32.const 0) ) (i32.store offset=108 (local.get $3) (i32.const 0) ) ) (block $label$67 (br_if $label$67 (i32.eqz (local.tee $2 (select (local.tee $5 (i32.load offset=16 (local.get $0) ) ) (local.tee $2 (i32.load offset=20 (local.tee $6 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $2) (local.get $5) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $6) ) (local.get $2) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.tee $6 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $6) ) (local.get $2) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.get $0) (local.tee $5 (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $2) ) ) ) (i32.store offset=20 (local.get $6) (local.tee $2 (i32.sub (i32.load offset=20 (local.get $6) ) (local.get $2) ) ) ) (br_if $label$67 (local.get $2) ) (i32.store offset=16 (local.get $6) (i32.load offset=8 (local.get $6) ) ) ) (br_if $label$56 (local.get $5) ) (i32.store offset=40 (local.get $3) (i32.const -1) ) (return (i32.const 0) ) ) (local.set $2 (i32.const 0) ) (br_if $label$1 (i32.ne (local.get $1) (i32.const 4) ) ) (local.set $2 (i32.const 1) ) (br_if $label$1 (i32.lt_s (local.tee $1 (i32.load offset=24 (local.get $3) ) ) (i32.const 1) ) ) (local.set $2 (i32.load offset=48 (local.get $0) ) ) (block $label$68 (block $label$69 (br_if $label$69 (i32.ne (local.get $1) (i32.const 2) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (local.set $2 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 8) ) ) (local.set $2 (i32.load16_u (i32.add (local.get $0) (i32.const 50) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (local.set $2 (i32.load8_u (i32.add (local.get $0) (i32.const 51) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (local.set $2 (i32.load offset=8 (local.get $0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (local.set $2 (i32.load offset=8 (local.get $0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 8) ) ) (local.set $2 (i32.load16_u (i32.add (local.get $0) (i32.const 10) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (local.get $2) ) (local.set $2 (i32.load8_u (i32.add (local.get $0) (i32.const 11) ) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) ) (br $label$68) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 24) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 16) ) ) (local.set $2 (i32.load offset=48 (local.get $0) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (i32.store8 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) (i32.shr_u (local.get $2) (i32.const 8) ) ) (i32.store offset=20 (local.get $3) (i32.add (local.tee $1 (i32.load offset=20 (local.get $3) ) ) (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) (i32.load offset=8 (local.get $3) ) ) ) ) (i32.store8 (local.get $1) (local.get $2) ) (block $label$70 (br_if $label$70 (i32.eqz (local.tee $2 (select (local.tee $2 (i32.load offset=16 (local.get $0) ) ) (local.tee $1 (i32.load offset=20 (local.tee $5 (i32.load offset=28 (local.get $0) ) ) ) ) (i32.gt_u (local.get $1) (local.get $2) ) ) ) ) ) (drop (call $fimport$98 (i32.load offset=12 (local.get $0) ) (i32.load offset=16 (local.get $5) ) (local.get $2) ) ) (i32.store offset=12 (local.get $0) (i32.add (i32.load offset=12 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.tee $1 (i32.load offset=28 (local.get $0) ) ) (i32.add (i32.load offset=16 (local.get $1) ) (local.get $2) ) ) (i32.store offset=20 (local.get $0) (i32.add (i32.load offset=20 (local.get $0) ) (local.get $2) ) ) (i32.store offset=16 (local.get $0) (i32.sub (i32.load offset=16 (local.get $0) ) (local.get $2) ) ) (i32.store offset=20 (local.get $1) (local.tee $0 (i32.sub (i32.load offset=20 (local.get $1) ) (local.get $2) ) ) ) (br_if $label$70 (local.get $0) ) (i32.store offset=16 (local.get $1) (i32.load offset=8 (local.get $1) ) ) ) (block $label$71 (br_if $label$71 (i32.lt_s (local.tee $0 (i32.load offset=24 (local.get $3) ) ) (i32.const 1) ) ) (i32.store offset=24 (local.get $3) (i32.sub (i32.const 0) (local.get $0) ) ) ) (local.set $2 (i32.eqz (i32.load offset=20 (local.get $3) ) ) ) ) (local.get $2) ) ;; custom section "producers", size 183 ) binaryen-version_108/test/passes/O3_print-stack-ir.txt000066400000000000000000000013331423707623100231730ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $0 i32) (result i32) i32.const 0 call $stacky-help i32.const 1 call $stacky-help i32.const 2 call $stacky-help drop i32.eqz i32.add ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (export "stacky-help" (func $stacky-help)) (func $stacky-help (; has Stack IR ;) (param $0 i32) (result i32) (i32.add (call $stacky-help (i32.const 0) ) (block (result i32) (local.set $0 (call $stacky-help (i32.const 1) ) ) (drop (call $stacky-help (i32.const 2) ) ) (i32.eqz (local.get $0) ) ) ) ) ) binaryen-version_108/test/passes/O3_print-stack-ir.wast000066400000000000000000000006471423707623100233410ustar00rootroot00000000000000(module (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $x i32) (result i32) (local $temp i32) (i32.add (call $stacky-help (i32.const 0)) (i32.eqz (block (result i32) ;; after we use the stack instead of the local, we can remove this block (local.set $temp (call $stacky-help (i32.const 1))) (drop (call $stacky-help (i32.const 2))) (local.get $temp) ) ) ) ) ) binaryen-version_108/test/passes/Os_print-stack-ir_all-features_disable-gc.txt000066400000000000000000000013331423707623100300110ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $0 i32) (result i32) i32.const 0 call $stacky-help i32.const 1 call $stacky-help i32.const 2 call $stacky-help drop i32.eqz i32.add ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (export "stacky-help" (func $stacky-help)) (func $stacky-help (; has Stack IR ;) (param $0 i32) (result i32) (i32.add (call $stacky-help (i32.const 0) ) (block (result i32) (local.set $0 (call $stacky-help (i32.const 1) ) ) (drop (call $stacky-help (i32.const 2) ) ) (i32.eqz (local.get $0) ) ) ) ) ) binaryen-version_108/test/passes/Os_print-stack-ir_all-features_disable-gc.wast000066400000000000000000000006471423707623100301570ustar00rootroot00000000000000(module (export "stacky-help" (func $stacky-help)) (func $stacky-help (param $x i32) (result i32) (local $temp i32) (i32.add (call $stacky-help (i32.const 0)) (i32.eqz (block (result i32) ;; after we use the stack instead of the local, we can remove this block (local.set $temp (call $stacky-help (i32.const 1))) (drop (call $stacky-help (i32.const 2))) (local.get $temp) ) ) ) ) ) binaryen-version_108/test/passes/Oz_fuzz-exec_all-features.txt000066400000000000000000000312561423707623100250260ustar00rootroot00000000000000[fuzz-exec] calling structs [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 42] [LoggingExternalInterface logging 100] [LoggingExternalInterface logging 100] [fuzz-exec] calling arrays [LoggingExternalInterface logging 50] [LoggingExternalInterface logging 42] [LoggingExternalInterface logging 128] [LoggingExternalInterface logging -128] [LoggingExternalInterface logging 42] [fuzz-exec] calling rtts [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [fuzz-exec] calling br_on_cast [LoggingExternalInterface logging 3] [trap unreachable] [fuzz-exec] calling br_on_failed_cast-1 [LoggingExternalInterface logging 1] [fuzz-exec] calling br_on_failed_cast-2 [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 999] [fuzz-exec] calling cast-null-anyref-to-gc [LoggingExternalInterface logging 0] [fuzz-exec] calling br_on_data [LoggingExternalInterface logging 1] [fuzz-exec] calling br_on_non_data-null [fuzz-exec] calling br_on_non_data-data [LoggingExternalInterface logging 1] [fuzz-exec] calling br_on_non_data-other [fuzz-exec] calling br-on_non_null [fuzz-exec] calling br-on_non_null-2 [LoggingExternalInterface logging 1] [trap unreachable] [fuzz-exec] calling ref-as-data-of-func [trap not a data] [fuzz-exec] calling ref-as-data-of-data [fuzz-exec] calling ref-as-func-of-data [trap not a func] [fuzz-exec] calling ref-as-func-of-func [fuzz-exec] calling rtt-and-cast-on-func [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 2] [LoggingExternalInterface logging 1337] [LoggingExternalInterface logging 3] [trap cast error] [fuzz-exec] calling array-alloc-failure [host limit allocation failure] [fuzz-exec] calling init-array-packed [fuzz-exec] note result: init-array-packed => 213 [fuzz-exec] calling cast-func-to-struct [trap cast error] [fuzz-exec] calling array-copy [LoggingExternalInterface logging 10] [LoggingExternalInterface logging 10] [LoggingExternalInterface logging 99] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 10] [fuzz-exec] calling rtt_Fresh [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [fuzz-exec] calling array.init [LoggingExternalInterface logging 2] [LoggingExternalInterface logging 42] [LoggingExternalInterface logging 50] [fuzz-exec] calling array.init-packed [LoggingExternalInterface logging 8] [fuzz-exec] calling static-casts [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 0] [fuzz-exec] calling static-br_on_cast [LoggingExternalInterface logging 3] [fuzz-exec] calling static-br_on_cast_fail [LoggingExternalInterface logging -2] (module (type $void_func (func)) (type $bytes (array (mut i8))) (type $struct (struct (field (mut i32)))) (type $extendedstruct (struct (field (mut i32)) (field f64))) (type $i32_=>_none (func (param i32))) (type $anyref_=>_none (func (param anyref))) (type $int_func (func (result i32))) (import "fuzzing-support" "log-i32" (func $log (param i32))) (global $rtt (mut (rtt $extendedstruct)) (rtt.canon $extendedstruct)) (export "structs" (func $0)) (export "arrays" (func $1)) (export "rtts" (func $2)) (export "br_on_cast" (func $3)) (export "br_on_failed_cast-1" (func $4)) (export "br_on_failed_cast-2" (func $5)) (export "cast-null-anyref-to-gc" (func $6)) (export "br_on_data" (func $8)) (export "br_on_non_data-null" (func $9)) (export "br_on_non_data-data" (func $10)) (export "br_on_non_data-other" (func $9)) (export "br-on_non_null" (func $9)) (export "br-on_non_null-2" (func $13)) (export "ref-as-data-of-func" (func $14)) (export "ref-as-data-of-data" (func $9)) (export "ref-as-func-of-data" (func $14)) (export "ref-as-func-of-func" (func $9)) (export "rtt-and-cast-on-func" (func $19)) (export "array-alloc-failure" (func $9)) (export "init-array-packed" (func $21)) (export "cast-func-to-struct" (func $14)) (export "array-copy" (func $24)) (export "rtt_Fresh" (func $25)) (export "array.init" (func $26)) (export "array.init-packed" (func $27)) (export "static-casts" (func $28)) (export "static-br_on_cast" (func $29)) (export "static-br_on_cast_fail" (func $30)) (func $0 (; has Stack IR ;) (local $0 i32) (call $log (i32.const 0) ) (call $log (i32.const 42) ) (call $log (local.tee $0 (i32.const 100) ) ) (call $log (i32.const 100) ) ) (func $1 (; has Stack IR ;) (local $0 (ref null $bytes)) (call $log (array.len $bytes (local.tee $0 (array.new_with_rtt $bytes (i32.const 42) (i32.const 50) (rtt.canon $bytes) ) ) ) ) (call $log (array.get_u $bytes (local.get $0) (i32.const 10) ) ) (array.set $bytes (local.get $0) (i32.const 10) (i32.const 128) ) (call $log (array.get_u $bytes (local.get $0) (i32.const 10) ) ) (call $log (array.get_s $bytes (local.get $0) (i32.const 10) ) ) (call $log (array.get_s $bytes (local.get $0) (i32.const 20) ) ) ) (func $2 (; has Stack IR ;) (call $log (i32.const 1) ) (call $log (i32.const 0) ) (call $log (i32.const 0) ) (call $log (i32.const 1) ) (call $log (i32.const 0) ) (call $log (i32.const 1) ) (call $log (i32.const 0) ) (call $log (i32.const 1) ) ) (func $3 (; has Stack IR ;) (call $log (i32.const 3) ) (unreachable) ) (func $4 (; has Stack IR ;) (local $0 (ref null $struct)) (local.set $0 (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) (drop (block $any (result anyref) (call $log (i32.const 1) ) (drop (br_on_cast_fail $any (local.get $0) (rtt.canon $extendedstruct) ) ) (call $log (i32.const 999) ) (ref.null any) ) ) ) (func $5 (; has Stack IR ;) (call $log (i32.const 1) ) (call $log (i32.const 999) ) ) (func $6 (; has Stack IR ;) (call $log (i32.const 0) ) ) (func $8 (; has Stack IR ;) (param $0 anyref) (drop (block $data (result dataref) (drop (br_on_data $data (local.get $0) ) ) (call $log (i32.const 1) ) (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ) ) (func $9 (; has Stack IR ;) (nop) ) (func $10 (; has Stack IR ;) (call $log (i32.const 1) ) ) (func $13 (; has Stack IR ;) (drop (block (call $log (i32.const 1) ) (unreachable) ) ) ) (func $14 (; has Stack IR ;) (drop (unreachable) ) ) (func $19 (; has Stack IR ;) (call $log (i32.const 0) ) (call $log (i32.const 1) ) (call $log (i32.const 2) ) (call $log (i32.const 1337) ) (call $log (i32.const 3) ) (unreachable) ) (func $21 (; has Stack IR ;) (result i32) (array.get_u $bytes (array.new_with_rtt $bytes (i32.const -43) (i32.const 50) (rtt.canon $bytes) ) (i32.const 10) ) ) (func $24 (; has Stack IR ;) (local $0 (ref null $bytes)) (local $1 (ref null $bytes)) (array.set $bytes (local.tee $1 (array.new_default_with_rtt $bytes (i32.const 200) (rtt.canon $bytes) ) ) (i32.const 42) (i32.const 99) ) (call $log (array.get_u $bytes (local.tee $0 (array.new_with_rtt $bytes (i32.const 10) (i32.const 100) (rtt.canon $bytes) ) ) (i32.const 10) ) ) (array.copy $bytes $bytes (local.get $0) (i32.const 10) (local.get $1) (i32.const 42) (i32.const 2) ) (call $log (array.get_u $bytes (local.get $0) (i32.const 9) ) ) (call $log (array.get_u $bytes (local.get $0) (i32.const 10) ) ) (call $log (array.get_u $bytes (local.get $0) (i32.const 11) ) ) (call $log (array.get_u $bytes (local.get $0) (i32.const 12) ) ) ) (func $25 (; has Stack IR ;) (call $log (i32.const 1) ) (call $log (i32.const 0) ) (global.set $rtt (rtt.fresh_sub $extendedstruct (rtt.canon $struct) ) ) (call $log (ref.test (struct.new_default_with_rtt $extendedstruct (global.get $rtt) ) (global.get $rtt) ) ) ) (func $26 (; has Stack IR ;) (local $0 (ref null $bytes)) (call $log (array.len $bytes (local.tee $0 (array.init $bytes (i32.const 42) (i32.const 50) (rtt.canon $bytes) ) ) ) ) (call $log (array.get_u $bytes (local.get $0) (i32.const 0) ) ) (call $log (array.get_u $bytes (local.get $0) (i32.const 1) ) ) ) (func $27 (; has Stack IR ;) (call $log (array.get_u $bytes (array.init $bytes (i32.const -11512) (rtt.canon $bytes) ) (i32.const 0) ) ) ) (func $28 (; has Stack IR ;) (call $log (i32.const 1) ) (call $log (i32.const 0) ) (call $log (i32.const 0) ) (call $log (i32.const 1) ) (call $log (i32.const 0) ) (call $log (i32.const 1) ) ) (func $29 (; has Stack IR ;) (call $log (i32.const 3) ) ) (func $30 (; has Stack IR ;) (call $log (i32.const -2) ) ) ) [fuzz-exec] calling structs [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 42] [LoggingExternalInterface logging 100] [LoggingExternalInterface logging 100] [fuzz-exec] calling arrays [LoggingExternalInterface logging 50] [LoggingExternalInterface logging 42] [LoggingExternalInterface logging 128] [LoggingExternalInterface logging -128] [LoggingExternalInterface logging 42] [fuzz-exec] calling rtts [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [fuzz-exec] calling br_on_cast [LoggingExternalInterface logging 3] [trap unreachable] [fuzz-exec] calling br_on_failed_cast-1 [LoggingExternalInterface logging 1] [fuzz-exec] calling br_on_failed_cast-2 [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 999] [fuzz-exec] calling cast-null-anyref-to-gc [LoggingExternalInterface logging 0] [fuzz-exec] calling br_on_data [LoggingExternalInterface logging 1] [fuzz-exec] calling br_on_non_data-null [fuzz-exec] calling br_on_non_data-data [LoggingExternalInterface logging 1] [fuzz-exec] calling br_on_non_data-other [fuzz-exec] calling br-on_non_null [fuzz-exec] calling br-on_non_null-2 [LoggingExternalInterface logging 1] [trap unreachable] [fuzz-exec] calling ref-as-data-of-func [trap unreachable] [fuzz-exec] calling ref-as-data-of-data [fuzz-exec] calling ref-as-func-of-data [trap unreachable] [fuzz-exec] calling ref-as-func-of-func [fuzz-exec] calling rtt-and-cast-on-func [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 2] [LoggingExternalInterface logging 1337] [LoggingExternalInterface logging 3] [trap unreachable] [fuzz-exec] calling array-alloc-failure [fuzz-exec] calling init-array-packed [fuzz-exec] note result: init-array-packed => 213 [fuzz-exec] calling cast-func-to-struct [trap unreachable] [fuzz-exec] calling array-copy [LoggingExternalInterface logging 10] [LoggingExternalInterface logging 10] [LoggingExternalInterface logging 99] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 10] [fuzz-exec] calling rtt_Fresh [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [fuzz-exec] calling array.init [LoggingExternalInterface logging 2] [LoggingExternalInterface logging 42] [LoggingExternalInterface logging 50] [fuzz-exec] calling array.init-packed [LoggingExternalInterface logging 8] [fuzz-exec] calling static-casts [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [LoggingExternalInterface logging 1] [fuzz-exec] calling static-br_on_cast [LoggingExternalInterface logging 3] [fuzz-exec] calling static-br_on_cast_fail [LoggingExternalInterface logging -2] ignoring comparison of ExecutionResults! [fuzz-exec] calling foo [host limit allocation failure] (module (type $none_=>_i32 (func (result i32))) (export "foo" (func $0)) (func $0 (; has Stack IR ;) (result i32) (i32.const 0) ) ) [fuzz-exec] calling foo [fuzz-exec] note result: foo => 0 ignoring comparison of ExecutionResults! binaryen-version_108/test/passes/Oz_fuzz-exec_all-features.wast000066400000000000000000000357171423707623100251730ustar00rootroot00000000000000(module (type $struct (struct (mut i32))) (type $extendedstruct (struct (mut i32) f64)) (type $bytes (array (mut i8))) (type $void_func (func)) (type $int_func (func (result i32))) (import "fuzzing-support" "log-i32" (func $log (param i32))) (global $rtt (mut (rtt $extendedstruct)) (rtt.canon $extendedstruct)) (func "structs" (local $x (ref null $struct)) (local $y (ref null $struct)) (local.set $x (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ;; The value is initialized to 0 ;; Note: We cannot optimize these to constants without either immutability or ;; some kind of escape analysis (to verify that the GC data referred to is not ;; written to elsewhere). (call $log (struct.get $struct 0 (local.get $x)) ) ;; Assigning a value works (struct.set $struct 0 (local.get $x) (i32.const 42) ) (call $log (struct.get $struct 0 (local.get $x)) ) ;; References are references, so writing to one's value affects the other's (local.set $y (local.get $x)) (struct.set $struct 0 (local.get $y) (i32.const 100) ) (call $log (struct.get $struct 0 (local.get $x)) ) (call $log (struct.get $struct 0 (local.get $y)) ) ) (func "arrays" (local $x (ref null $bytes)) (local.set $x (array.new_with_rtt $bytes (i32.const 42) ;; value to splat into the array (i32.const 50) ;; size (rtt.canon $bytes) ) ) ;; The length should be 50 (call $log (array.len $bytes (local.get $x)) ) ;; The value should be 42 (call $log (array.get_u $bytes (local.get $x) (i32.const 10)) ) ;; Write a value that will be truncated into an i8 (array.set $bytes (local.get $x) (i32.const 10) (i32.const 0xff80)) ;; The value should be 0x80 (-128 or 128 depending on signed/unsigned) (call $log (array.get_u $bytes (local.get $x) (i32.const 10)) ) (call $log (array.get_s $bytes (local.get $x) (i32.const 10)) ) ;; Other items than the one at index 10 are unaffected. (call $log (array.get_s $bytes (local.get $x) (i32.const 20)) ) ) (func "rtts" (local $any anyref) ;; Casting null returns null. (call $log (ref.is_null (ref.cast (ref.null $struct) (rtt.canon $struct)) )) ;; Testing null returns 0. (call $log (ref.test (ref.null $struct) (rtt.canon $struct)) ) ;; Testing something completely wrong (struct vs array) returns 0. (call $log (ref.test (array.new_with_rtt $bytes (i32.const 20) (i32.const 10) (rtt.canon $bytes) ) (rtt.canon $struct) ) ) ;; Testing a thing with the same RTT returns 1. (call $log (ref.test (struct.new_default_with_rtt $struct (rtt.canon $struct) ) (rtt.canon $struct) ) ) ;; A bad downcast returns 0: we create a struct, which is not a extendedstruct. (call $log (ref.test (struct.new_default_with_rtt $struct (rtt.canon $struct) ) (rtt.canon $extendedstruct) ) ) ;; Create a extendedstruct with RTT y, and upcast statically to anyref. (local.set $any (struct.new_default_with_rtt $extendedstruct (rtt.sub $extendedstruct (rtt.canon $struct)) ) ) ;; Casting to y, the exact same RTT, works. (call $log (ref.test (local.get $any) (rtt.sub $extendedstruct (rtt.canon $struct)) ) ) ;; Casting to z, another RTT of the same data type, fails. (call $log (ref.test (local.get $any) (rtt.canon $extendedstruct) ) ) ;; Casting to x, the parent of y, works. (call $log (ref.test (local.get $any) (rtt.canon $struct) ) ) ) (func "br_on_cast" (local $any anyref) ;; create a simple $struct, store it in an anyref (local.set $any (struct.new_default_with_rtt $struct (rtt.canon $struct)) ) (drop (block $block (result ($ref $struct)) (drop (block $extendedblock (result (ref $extendedstruct)) (drop ;; second, try to cast our simple $struct to what it is, which will work (br_on_cast $block ;; first, try to cast our simple $struct to an extended, which will fail (br_on_cast $extendedblock (local.get $any) (rtt.canon $extendedstruct) ) (rtt.canon $struct) ) ) (call $log (i32.const -1)) ;; we should never get here (return) ) ) (call $log (i32.const -2)) ;; we should never get here either (return) ) ) (call $log (i32.const 3)) ;; we should get here (drop (block $never (result (ref $extendedstruct)) ;; an untaken br_on_cast, with unreachable rtt - so we cannot use the ;; RTT in binaryen IR to find the cast type. (br_on_cast $never (ref.null $struct) (unreachable)) (unreachable) ) ) ) (func "br_on_failed_cast-1" (local $any anyref) ;; create a simple $struct, store it in an anyref (local.set $any (struct.new_default_with_rtt $struct (rtt.canon $struct)) ) (drop (block $any (result (ref null any)) (call $log (i32.const 1)) (drop ;; try to cast our simple $struct to an extended, which will fail, and ;; so we will branch, skipping the next logging. (br_on_cast_fail $any (local.get $any) (rtt.canon $extendedstruct) ) ) (call $log (i32.const 999)) ;; we should skip this (ref.null any) ) ) ) (func "br_on_failed_cast-2" (local $any anyref) ;; create an $extendedstruct, store it in an anyref (local.set $any (struct.new_default_with_rtt $extendedstruct (rtt.canon $extendedstruct)) ) (drop (block $any (result (ref null any)) (call $log (i32.const 1)) (drop ;; try to cast our simple $struct to an extended, which will succeed, and ;; so we will continue to the next logging. (br_on_cast_fail $any (local.get $any) (rtt.canon $extendedstruct) ) ) (call $log (i32.const 999)) (ref.null any) ) ) ) (func "cast-null-anyref-to-gc" ;; a null anyref is a literal which is not even of GC data, as it's not an ;; array or a struct, so our casting code should not assume it is. it is ok ;; to try to cast it, and the result should be 0. (call $log (ref.test (ref.null any) (rtt.canon $struct) ) ) ) (func $get_data (result dataref) (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) (func "br_on_data" (param $x anyref) (local $y anyref) (drop (block $data (result dataref) (local.set $y (br_on_data $data (local.get $x)) ) (call $log (i32.const 1)) (call $get_data) ) ) ) (func "br_on_non_data-null" (local $x anyref) (drop (block $any (result anyref) (drop (br_on_non_data $any (local.get $x)) ) ;; $x is a null, and so it is not data, and the branch will be taken, and no ;; logging will occur. (call $log (i32.const 1)) (ref.null any) ) ) ) (func "br_on_non_data-data" (local $x anyref) ;; set x to valid data (local.set $x (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) (drop (block $any (result anyref) (drop (br_on_non_data $any (local.get $x)) ) ;; $x refers to valid data, and so we will not branch, and will log. (call $log (i32.const 1)) (ref.null any) ) ) ) (func "br_on_non_data-other" (local $x anyref) ;; set x to something that is not null, but also not data (local.set $x (ref.func $a-void-func) ) (drop (block $any (result anyref) (drop (br_on_non_data $any (local.get $x)) ) ;; $x refers to a function, so we will branch, and not log (call $log (i32.const 1)) (ref.null any) ) ) ) (func "br-on_non_null" (drop (block $non-null (result (ref any)) (br_on_non_null $non-null (ref.func $a-void-func)) ;; $x refers to a function, which is not null, so we will branch, and not ;; log (call $log (i32.const 1)) (unreachable) ) ) ) (func "br-on_non_null-2" (drop (block $non-null (result (ref any)) (br_on_non_null $non-null (ref.null any)) ;; $x is null, and so we will not branch, and log and then trap (call $log (i32.const 1)) (unreachable) ) ) ) (func "ref-as-data-of-func" (drop ;; This should trap. (ref.as_data (ref.func $0) ) ) ) (func "ref-as-data-of-data" (drop (ref.as_data (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ) ) (func "ref-as-func-of-data" (drop ;; This should trap. (ref.as_func (struct.new_default_with_rtt $struct (rtt.canon $struct) ) ) ) ) (func "ref-as-func-of-func" (drop (ref.as_func (ref.func $0) ) ) ) (func $a-void-func (call $log (i32.const 1337)) ) (func "rtt-and-cast-on-func" (call $log (i32.const 0)) (drop (rtt.canon $void_func) ) (call $log (i32.const 1)) (drop (rtt.canon $int_func) ) (call $log (i32.const 2)) ;; a valid cast (call_ref (ref.cast (ref.func $a-void-func) (rtt.canon $void_func)) ) (call $log (i32.const 3)) ;; an invalid cast (drop (call_ref (ref.cast (ref.func $a-void-func) (rtt.canon $int_func)) )) ;; will never be reached (call $log (i32.const 4)) ) (func "array-alloc-failure" (drop (array.new_default_with_rtt $bytes (i32.const -1) ;; un-allocatable size (4GB * sizeof(Literal)) (rtt.canon $bytes) ) ) ) (func "init-array-packed" (result i32) (local $x (ref null $bytes)) (local.set $x (array.new_with_rtt $bytes (i32.const -43) ;; initialize the i8 values with a negative i32 (i32.const 50) (rtt.canon $bytes) ) ) ;; read the value, which should be -43 & 255 ==> 213 (array.get_u $bytes (local.get $x) (i32.const 10) ) ) (func $call-target (param $0 eqref) (nop) ) (func "cast-func-to-struct" (drop ;; An impossible cast of a function to a struct, which should fail. (ref.cast (ref.func $call-target) (rtt.canon $struct) ) ) ) (func "array-copy" (local $x (ref null $bytes)) (local $y (ref null $bytes)) ;; Create an array of 10's, of size 100. (local.set $x (array.new_with_rtt $bytes (i32.const 10) (i32.const 100) (rtt.canon $bytes) ) ) ;; Create an array of zeros of size 200, and also set one index there. (local.set $y (array.new_default_with_rtt $bytes (i32.const 200) (rtt.canon $bytes) ) ) (array.set $bytes (local.get $y) (i32.const 42) (i32.const 99) ) ;; Log out a value from $x before. (call $log (array.get_u $bytes (local.get $x) (i32.const 10)) ) (array.copy $bytes $bytes (local.get $x) (i32.const 10) (local.get $y) (i32.const 42) (i32.const 2) ) ;; Log out some value from $x after. Indexes 10 and 11 should be modified. (call $log (array.get_u $bytes (local.get $x) (i32.const 9)) ) (call $log (array.get_u $bytes (local.get $x) (i32.const 10)) ) (call $log (array.get_u $bytes (local.get $x) (i32.const 11)) ) (call $log (array.get_u $bytes (local.get $x) (i32.const 12)) ) ) (func "rtt_Fresh" ;; Casting to the same sequence of rtt.subs works. (call $log (ref.test (struct.new_default_with_rtt $extendedstruct (rtt.sub $extendedstruct (rtt.canon $struct) ) ) (rtt.sub $extendedstruct (rtt.canon $struct) ) ) ) ;; But not with fresh! (call $log (ref.test (struct.new_default_with_rtt $extendedstruct (rtt.sub $extendedstruct (rtt.canon $struct) ) ) (rtt.fresh_sub $extendedstruct (rtt.canon $struct) ) ) ) ;; Casts with fresh succeed, if we use the same fresh rtt. (global.set $rtt (rtt.fresh_sub $extendedstruct (rtt.canon $struct) ) ) (call $log (ref.test (struct.new_default_with_rtt $extendedstruct (global.get $rtt) ) (global.get $rtt) ) ) ) (func "array.init" (local $x (ref null $bytes)) (local.set $x (array.init $bytes (i32.const 42) ;; first value (i32.const 50) ;; second value (rtt.canon $bytes) ) ) ;; The length should be 2 (call $log (array.len $bytes (local.get $x)) ) ;; The first value should be 42 (call $log (array.get_u $bytes (local.get $x) (i32.const 0)) ) ;; The second value should be 50 (call $log (array.get_u $bytes (local.get $x) (i32.const 1)) ) ) (func "array.init-packed" (local $x (ref null $bytes)) (local.set $x (array.init $bytes (i32.const -11512) (rtt.canon $bytes) ) ) ;; The value should be be -11512 & 255 => 8 (call $log (array.get_u $bytes (local.get $x) (i32.const 0)) ) ) (func "static-casts" ;; Casting null returns null. (call $log (ref.is_null (ref.cast_static $struct (ref.null $struct)) )) ;; Testing null returns 0. (call $log (ref.test_static $struct (ref.null $struct)) ) ;; Testing something completely wrong (struct vs array) returns 0. (call $log (ref.test_static $struct (array.new $bytes (i32.const 20) (i32.const 10) ) ) ) ;; Testing a thing with the same type returns 1. (call $log (ref.test_static $struct (struct.new_default $struct) ) ) ;; A bad downcast returns 0: we create a struct, which is not a extendedstruct. (call $log (ref.test_static $extendedstruct (struct.new_default $struct) ) ) ;; Casting to a supertype does not work because the canonical RTT for the ;; subtype is not a sub-rtt of the canonical RTT of the supertype in ;; structural mode. (call $log (ref.test_static $struct (struct.new_default $extendedstruct) ) ) ) (func "static-br_on_cast" (local $any anyref) ;; create a simple $struct, store it in an anyref (local.set $any (struct.new_default $struct) ) (drop (block $block (result ($ref $struct)) (drop (block $extendedblock (result (ref $extendedstruct)) (drop ;; second, try to cast our simple $struct to what it is, which will work (br_on_cast_static $block $struct ;; first, try to cast our simple $struct to an extended, which will fail (br_on_cast_static $extendedblock $extendedstruct (local.get $any) ) ) ) (call $log (i32.const -1)) ;; we should never get here (return) ) ) (call $log (i32.const -2)) ;; we should never get here either (return) ) ) (call $log (i32.const 3)) ;; we should get here ) (func "static-br_on_cast_fail" (local $any anyref) ;; create a simple $struct, store it in an anyref (local.set $any (struct.new_default $struct) ) (drop (block $failblock (result anyref) (drop ;; try to cast our simple $struct to an extended, which will fail (br_on_cast_static_fail $failblock $extendedstruct (local.get $any) ) ) (call $log (i32.const -1)) ;; we should never get here (return) ) ) (call $log (i32.const -2)) ;; we should get here. (return) ) ) (module (type $[mut:i8] (array (mut i8))) (func "foo" (result i32) ;; before opts this will trap on failing to allocate -1 >>> 0 bytes. after ;; opts the unused value is removed so there is no trap, and a value is ;; returned, which should not confuse the fuzzer. (drop (array.new_default_with_rtt $[mut:i8] (i32.const -1) (rtt.canon $[mut:i8]) ) ) (i32.const 0) ) ) binaryen-version_108/test/passes/class_with_dwarf_noprint.bin.txt000066400000000000000000000662731423707623100256440ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (429 bytes) Contains section .debug_loc (199 bytes) Contains section .debug_ranges (24 bytes) Contains section .debug_abbrev (337 bytes) Contains section .debug_line (438 bytes) Contains section .debug_str (364 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_location DW_FORM_exprloc [3] DW_TAG_structure_type DW_CHILDREN_yes DW_AT_calling_convention DW_FORM_data1 DW_AT_name DW_FORM_strp DW_AT_byte_size DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [4] DW_TAG_member DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_data_member_location DW_FORM_data1 DW_AT_accessibility DW_FORM_data1 [5] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_declaration DW_FORM_flag_present DW_AT_external DW_FORM_flag_present [6] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_type DW_FORM_ref4 DW_AT_artificial DW_FORM_flag_present [7] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_declaration DW_FORM_flag_present DW_AT_external DW_FORM_flag_present [8] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [9] DW_TAG_enumeration_type DW_CHILDREN_yes DW_AT_type DW_FORM_ref4 DW_AT_byte_size DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [10] DW_TAG_enumerator DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_const_value DW_FORM_udata [11] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [12] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [13] DW_TAG_namespace DW_CHILDREN_yes DW_AT_name DW_FORM_strp [14] DW_TAG_typedef DW_CHILDREN_no DW_AT_type DW_FORM_ref4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [15] DW_TAG_unspecified_type DW_CHILDREN_no DW_AT_name DW_FORM_strp [16] DW_TAG_imported_declaration DW_CHILDREN_no DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_import DW_FORM_ref4 [17] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_specification DW_FORM_ref4 DW_AT_inline DW_FORM_data1 DW_AT_object_pointer DW_FORM_ref4 [18] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_artificial DW_FORM_flag_present [19] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [20] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [21] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [22] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [23] DW_TAG_inlined_subroutine DW_CHILDREN_yes DW_AT_abstract_origin DW_FORM_ref4 DW_AT_ranges DW_FORM_sec_offset DW_AT_call_file DW_FORM_data1 DW_AT_call_line DW_FORM_data1 DW_AT_call_column DW_FORM_data1 [24] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [25] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_abstract_origin DW_FORM_ref4 [26] DW_TAG_inlined_subroutine DW_CHILDREN_yes DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_call_file DW_FORM_data1 DW_AT_call_line DW_FORM_data1 DW_AT_call_column DW_FORM_data1 [27] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr .debug_info contents: 0x00000000: Compile Unit: length = 0x000001a9 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x000001ad) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project d6fe253653b7e760f94ca21d0a7ebbfeeee28777)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000c1] = "/tmp/emscripten_test_wasm3_2u9tontv") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006) DW_AT_high_pc [DW_FORM_data4] (0x000000b0) 0x00000026: DW_TAG_variable [2] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e5] = "rng1") DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "Random") DW_AT_external [DW_FORM_flag_present] (true) DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (23) DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x638) 0x00000037: DW_TAG_structure_type [3] * DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000fc] = "Random") DW_AT_byte_size [DW_FORM_data1] (0x04) DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (9) 0x00000040: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ea] = "last") DW_AT_type [DW_FORM_ref4] (cu + 0x0095 => {0x00000095} "unsigned int") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (22) DW_AT_data_member_location [DW_FORM_data1] (0x00) DW_AT_accessibility [DW_FORM_data1] (DW_ACCESS_protected) 0x0000004d: DW_TAG_subprogram [5] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000fc] = "Random") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (15) DW_AT_declaration [DW_FORM_flag_present] (true) DW_AT_external [DW_FORM_flag_present] (true) 0x00000054: DW_TAG_formal_parameter [6] DW_AT_type [DW_FORM_ref4] (cu + 0x009c => {0x0000009c} "Random*") DW_AT_artificial [DW_FORM_flag_present] (true) 0x00000059: NULL 0x0000005a: DW_TAG_subprogram [7] * DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000103] = "_ZN6Random3getEf") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000114] = "get") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (16) DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float") DW_AT_declaration [DW_FORM_flag_present] (true) DW_AT_external [DW_FORM_flag_present] (true) 0x00000069: DW_TAG_formal_parameter [6] DW_AT_type [DW_FORM_ref4] (cu + 0x009c => {0x0000009c} "Random*") DW_AT_artificial [DW_FORM_flag_present] (true) 0x0000006e: DW_TAG_formal_parameter [8] DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float") 0x00000073: NULL 0x00000074: DW_TAG_enumeration_type [9] * DW_AT_type [DW_FORM_ref4] (cu + 0x0095 => {0x00000095} "unsigned int") DW_AT_byte_size [DW_FORM_data1] (0x04) DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (10) 0x0000007c: DW_TAG_enumerator [10] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000011e] = "IM") DW_AT_const_value [DW_FORM_udata] (139968) 0x00000084: DW_TAG_enumerator [10] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000121] = "IA") DW_AT_const_value [DW_FORM_udata] (3877) 0x0000008b: DW_TAG_enumerator [10] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000124] = "IC") DW_AT_const_value [DW_FORM_udata] (29573) 0x00000093: NULL 0x00000094: NULL 0x00000095: DW_TAG_base_type [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ef] = "unsigned int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_unsigned) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x0000009c: DW_TAG_pointer_type [12] DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "Random") 0x000000a1: DW_TAG_base_type [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000118] = "float") DW_AT_encoding [DW_FORM_data1] (DW_ATE_float) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x000000a8: DW_TAG_namespace [13] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000127] = "std") 0x000000ad: DW_TAG_typedef [14] DW_AT_type [DW_FORM_ref4] (cu + 0x00b9 => {0x000000b9} "decltype(nullptr)") DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013d] = "nullptr_t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr") DW_AT_decl_line [DW_FORM_data1] (57) 0x000000b8: NULL 0x000000b9: DW_TAG_unspecified_type [15] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000012b] = "decltype(nullptr)") 0x000000be: DW_TAG_imported_declaration [16] DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h") DW_AT_decl_line [DW_FORM_data1] (52) DW_AT_import [DW_FORM_ref4] (cu + 0x00ad => {0x000000ad}) 0x000000c5: DW_TAG_subprogram [17] * DW_AT_specification [DW_FORM_ref4] (cu + 0x005a => {0x0000005a} "_ZN6Random3getEf") DW_AT_inline [DW_FORM_data1] (DW_INL_inlined) DW_AT_object_pointer [DW_FORM_ref4] (cu + 0x00cf => {0x000000cf}) 0x000000cf: DW_TAG_formal_parameter [18] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000147] = "this") DW_AT_type [DW_FORM_ref4] (cu + 0x00e4 => {0x000000e4} "Random*") DW_AT_artificial [DW_FORM_flag_present] (true) 0x000000d8: DW_TAG_formal_parameter [19] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "max") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (16) DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float") 0x000000e3: NULL 0x000000e4: DW_TAG_pointer_type [12] DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "Random") 0x000000e9: DW_TAG_subprogram [20] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006) DW_AT_high_pc [DW_FORM_data4] (0x000000b0) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000150] = "main") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (24) DW_AT_type [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000101: DW_TAG_variable [21] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0x00000022, 0x0000002a): DW_OP_constu 0x2a, DW_OP_stack_value [0x00000007, 0x00000007): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000159] = "rng2") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (25) DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "Random") 0x00000110: DW_TAG_variable [21] DW_AT_location [DW_FORM_sec_offset] (0x00000023: [0x00000022, 0x0000002a): DW_OP_consts +0, DW_OP_stack_value [0x0000008f, 0x0000009c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000015e] = "count") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "int") 0x0000011f: DW_TAG_lexical_block [22] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000030) DW_AT_high_pc [DW_FORM_data4] (0xffffffd0) 0x00000128: DW_TAG_variable [21] DW_AT_location [DW_FORM_sec_offset] (0x00000046: [0x00000022, 0x0000002a): DW_OP_consts +0, DW_OP_stack_value [0x00000007, 0x00000007): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000164] = "i") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (27) DW_AT_type [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "int") 0x00000137: DW_TAG_lexical_block [22] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000030) DW_AT_high_pc [DW_FORM_data4] (0x0000005f) 0x00000140: DW_TAG_variable [21] DW_AT_location [DW_FORM_sec_offset] (0x0000009b: [0x00000007, 0x00000007): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "x2") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float") 0x0000014f: DW_TAG_variable [21] DW_AT_location [DW_FORM_sec_offset] (0x000000b1: [0x00000007, 0x00000007): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000169] = "x1") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_decl_line [DW_FORM_data1] (28) DW_AT_type [DW_FORM_ref4] (cu + 0x00a1 => {0x000000a1} "float") 0x0000015e: DW_TAG_inlined_subroutine [23] * DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00c5 => {0x000000c5} "_ZN6Random3getEf") DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000006, 0x00000007) [0x0000006b, 0x00000074)) DW_AT_call_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_call_line [DW_FORM_data1] (28) DW_AT_call_column [DW_FORM_data1] (0x15) 0x0000016a: DW_TAG_formal_parameter [24] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00cf => {0x000000cf} "this") 0x0000016f: DW_TAG_formal_parameter [25] DW_AT_location [DW_FORM_sec_offset] (0x00000069: [0x0000002c, 0x0000009c): DW_OP_constu 0x3f800000, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00d8 => {0x000000d8} "max") 0x00000178: NULL 0x00000179: DW_TAG_inlined_subroutine [26] * DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00c5 => {0x000000c5} "_ZN6Random3getEf") DW_AT_low_pc [DW_FORM_addr] (0x000000000000004a) DW_AT_high_pc [DW_FORM_data4] (0x00000019) DW_AT_call_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm3_2u9tontv/src.cpp") DW_AT_call_line [DW_FORM_data1] (29) DW_AT_call_column [DW_FORM_data1] (0x15) 0x00000189: DW_TAG_formal_parameter [24] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00cf => {0x000000cf} "this") 0x0000018e: DW_TAG_formal_parameter [25] DW_AT_location [DW_FORM_sec_offset] (0x00000082: [0x00000007, 0x00000007): DW_OP_constu 0x3f800000, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x00d8 => {0x000000d8} "max") 0x00000197: NULL 0x00000198: NULL 0x00000199: NULL 0x0000019a: DW_TAG_GNU_call_site [27] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000084) 0x0000019f: DW_TAG_GNU_call_site [27] DW_AT_low_pc [DW_FORM_addr] (0x00000000000000ab) 0x000001a4: NULL 0x000001a5: DW_TAG_base_type [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x000001ac: NULL .debug_loc contents: 0x00000000: [0x0000001c, 0x00000024): DW_OP_constu 0x2a, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000023: [0x0000001c, 0x00000024): DW_OP_consts +0, DW_OP_stack_value [0x00000089, 0x00000096): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x00000046: [0x0000001c, 0x00000024): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value 0x00000069: [0x00000026, 0x00000096): DW_OP_constu 0x3f800000, DW_OP_stack_value 0x00000082: [0x00000001, 0x00000001): DW_OP_constu 0x3f800000, DW_OP_stack_value 0x0000009b: [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x000000b1: [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x000001b2 version: 4 prologue_length: 0x0000007b min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 include_directories[ 1] = "/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx" file_names[ 1]: name: "src.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 file_names[ 2]: name: "__nullptr" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 3]: name: "stddef.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 0x00000085: 00 DW_LNE_set_address (0x0000000000000006) 0x0000008c: 03 DW_LNS_advance_line (24) 0x0000008e: 01 DW_LNS_copy 0x0000000000000006 24 0 1 0 0 is_stmt 0x0000008f: 00 DW_LNE_set_address (0x0000000000000030) 0x00000096: 03 DW_LNS_advance_line (17) 0x00000098: 05 DW_LNS_set_column (13) 0x0000009a: 0a DW_LNS_set_prologue_end 0x0000009b: 01 DW_LNS_copy 0x0000000000000030 17 13 1 0 0 is_stmt prologue_end 0x0000009c: 00 DW_LNE_set_address (0x0000000000000037) 0x000000a3: 05 DW_LNS_set_column (18) 0x000000a5: 06 DW_LNS_negate_stmt 0x000000a6: 01 DW_LNS_copy 0x0000000000000037 17 18 1 0 0 0x000000a7: 00 DW_LNE_set_address (0x000000000000003c) 0x000000ae: 05 DW_LNS_set_column (23) 0x000000b0: 01 DW_LNS_copy 0x000000000000003c 17 23 1 0 0 0x000000b1: 00 DW_LNE_set_address (0x0000000000000041) 0x000000b8: 05 DW_LNS_set_column (29) 0x000000ba: 01 DW_LNS_copy 0x0000000000000041 17 29 1 0 0 0x000000bb: 00 DW_LNE_set_address (0x0000000000000042) 0x000000c2: 05 DW_LNS_set_column (10) 0x000000c4: 01 DW_LNS_copy 0x0000000000000042 17 10 1 0 0 0x000000c5: 00 DW_LNE_set_address (0x0000000000000048) 0x000000cc: 03 DW_LNS_advance_line (30) 0x000000ce: 05 DW_LNS_set_column (5) 0x000000d0: 06 DW_LNS_negate_stmt 0x000000d1: 01 DW_LNS_copy 0x0000000000000048 30 5 1 0 0 is_stmt 0x000000d2: 00 DW_LNE_set_address (0x000000000000004a) 0x000000d9: 03 DW_LNS_advance_line (17) 0x000000db: 05 DW_LNS_set_column (18) 0x000000dd: 01 DW_LNS_copy 0x000000000000004a 17 18 1 0 0 is_stmt 0x000000de: 00 DW_LNE_set_address (0x0000000000000054) 0x000000e5: 05 DW_LNS_set_column (23) 0x000000e7: 06 DW_LNS_negate_stmt 0x000000e8: 01 DW_LNS_copy 0x0000000000000054 17 23 1 0 0 0x000000e9: 00 DW_LNE_set_address (0x0000000000000059) 0x000000f0: 05 DW_LNS_set_column (29) 0x000000f2: 01 DW_LNS_copy 0x0000000000000059 17 29 1 0 0 0x000000f3: 00 DW_LNE_set_address (0x000000000000005a) 0x000000fa: 03 DW_LNS_advance_line (18) 0x000000fc: 05 DW_LNS_set_column (18) 0x000000fe: 06 DW_LNS_negate_stmt 0x000000ff: 01 DW_LNS_copy 0x000000000000005a 18 18 1 0 0 is_stmt 0x00000100: 00 DW_LNE_set_address (0x0000000000000062) 0x00000107: 05 DW_LNS_set_column (23) 0x00000109: 06 DW_LNS_negate_stmt 0x0000010a: 01 DW_LNS_copy 0x0000000000000062 18 23 1 0 0 0x0000010b: 00 DW_LNE_set_address (0x0000000000000063) 0x00000112: 03 DW_LNS_advance_line (30) 0x00000114: 05 DW_LNS_set_column (28) 0x00000116: 06 DW_LNS_negate_stmt 0x00000117: 01 DW_LNS_copy 0x0000000000000063 30 28 1 0 0 is_stmt 0x00000118: 00 DW_LNE_set_address (0x0000000000000066) 0x0000011f: 05 DW_LNS_set_column (5) 0x00000121: 06 DW_LNS_negate_stmt 0x00000122: 01 DW_LNS_copy 0x0000000000000066 30 5 1 0 0 0x00000123: 00 DW_LNE_set_address (0x000000000000006b) 0x0000012a: 03 DW_LNS_advance_line (18) 0x0000012c: 05 DW_LNS_set_column (18) 0x0000012e: 06 DW_LNS_negate_stmt 0x0000012f: 01 DW_LNS_copy 0x000000000000006b 18 18 1 0 0 is_stmt 0x00000130: 00 DW_LNE_set_address (0x0000000000000073) 0x00000137: 05 DW_LNS_set_column (23) 0x00000139: 06 DW_LNS_negate_stmt 0x0000013a: 01 DW_LNS_copy 0x0000000000000073 18 23 1 0 0 0x0000013b: 00 DW_LNE_set_address (0x0000000000000074) 0x00000142: 03 DW_LNS_advance_line (30) 0x00000144: 05 DW_LNS_set_column (24) 0x00000146: 06 DW_LNS_negate_stmt 0x00000147: 01 DW_LNS_copy 0x0000000000000074 30 24 1 0 0 is_stmt 0x00000148: 00 DW_LNE_set_address (0x0000000000000077) 0x0000014f: 05 DW_LNS_set_column (5) 0x00000151: 06 DW_LNS_negate_stmt 0x00000152: 01 DW_LNS_copy 0x0000000000000077 30 5 1 0 0 0x00000153: 00 DW_LNE_set_address (0x0000000000000085) 0x0000015a: 03 DW_LNS_advance_line (31) 0x0000015c: 05 DW_LNS_set_column (9) 0x0000015e: 06 DW_LNS_negate_stmt 0x0000015f: 01 DW_LNS_copy 0x0000000000000085 31 9 1 0 0 is_stmt 0x00000160: 00 DW_LNE_set_address (0x0000000000000087) 0x00000167: 05 DW_LNS_set_column (12) 0x00000169: 06 DW_LNS_negate_stmt 0x0000016a: 01 DW_LNS_copy 0x0000000000000087 31 12 1 0 0 0x0000016b: 00 DW_LNE_set_address (0x000000000000008c) 0x00000172: 05 DW_LNS_set_column (9) 0x00000174: 01 DW_LNS_copy 0x000000000000008c 31 9 1 0 0 0x00000175: 00 DW_LNE_set_address (0x000000000000008f) 0x0000017c: 03 DW_LNS_advance_line (27) 0x0000017e: 05 DW_LNS_set_column (29) 0x00000180: 06 DW_LNS_negate_stmt 0x00000181: 01 DW_LNS_copy 0x000000000000008f 27 29 1 0 0 is_stmt 0x00000182: 00 DW_LNE_set_address (0x0000000000000099) 0x00000189: 05 DW_LNS_set_column (21) 0x0000018b: 06 DW_LNS_negate_stmt 0x0000018c: 01 DW_LNS_copy 0x0000000000000099 27 21 1 0 0 0x0000018d: 00 DW_LNE_set_address (0x000000000000009a) 0x00000194: 05 DW_LNS_set_column (3) 0x00000196: 01 DW_LNS_copy 0x000000000000009a 27 3 1 0 0 0x00000197: 00 DW_LNE_set_address (0x000000000000009d) 0x0000019e: 03 DW_LNS_advance_line (33) 0x000001a0: 06 DW_LNS_negate_stmt 0x000001a1: 01 DW_LNS_copy 0x000000000000009d 33 3 1 0 0 is_stmt 0x000001a2: 00 DW_LNE_set_address (0x00000000000000ac) 0x000001a9: 03 DW_LNS_advance_line (34) 0x000001ab: 01 DW_LNS_copy 0x00000000000000ac 34 3 1 0 0 is_stmt 0x000001ac: 00 DW_LNE_set_address (0x00000000000000b6) 0x000001b3: 00 DW_LNE_end_sequence 0x00000000000000b6 34 3 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project d6fe253653b7e760f94ca21d0a7ebbfeeee28777)" 0x00000095: "/tmp/emscripten_test_wasm3_2u9tontv/src.cpp" 0x000000c1: "/tmp/emscripten_test_wasm3_2u9tontv" 0x000000e5: "rng1" 0x000000ea: "last" 0x000000ef: "unsigned int" 0x000000fc: "Random" 0x00000103: "_ZN6Random3getEf" 0x00000114: "get" 0x00000118: "float" 0x0000011e: "IM" 0x00000121: "IA" 0x00000124: "IC" 0x00000127: "std" 0x0000012b: "decltype(nullptr)" 0x0000013d: "nullptr_t" 0x00000147: "this" 0x0000014c: "max" 0x00000150: "main" 0x00000155: "int" 0x00000159: "rng2" 0x0000015e: "count" 0x00000164: "i" 0x00000166: "x2" 0x00000169: "x1" .debug_ranges contents: 00000000 00000000 00000001 00000000 00000065 0000006e 00000000 binaryen-version_108/test/passes/class_with_dwarf_noprint.passes000066400000000000000000000000261423707623100255340ustar00rootroot00000000000000roundtrip_dwarfdump_g binaryen-version_108/test/passes/class_with_dwarf_noprint.wasm000066400000000000000000000566361423707623100252270ustar00rootroot00000000000000asm``````|`````~`~~`````|`~`~~`|~`||·wasi_snapshot_preview1fd_writeenvemscripten_memcpy_bigenvemscripten_get_sbrk_ptrenvemscripten_resize_heapenvabortenv setTempRet0envmemory€€envtablep21       AœÀ A„ Ï__wasm_call_ctorsmain__errno_locationsetThrew-malloc+free, __data_end stackSave. stackAlloc/ stackRestore0__growWasmMemory1 dynCall_ii2 dynCall_iiii3 dynCall_jiji6dynCall_iidiiii5 A  & " ˜Œ1 ¦}#A k"$A*!A!A!@AA(¸ A¥lA…çjAÀÅp"6¸ A¥lA…çjAÀÅp"³C°H•"»9 ³C°H•"»9A€ Aj    \j! Aj"AäG 6Aˆ   A j$A  A B +#Ak"$  6 A( $! Aj$  +#Ak"$  6 A( %! Aj$  A  AÈ APjA I AÐ ¡A!@@ E AÿM @@(°( A€qA€¿F A6  @ AÿK A?qA€r: AvAÀr:A @@ A€°I A€@qA€ÀG  A?qA€r: A vAàr: AvA?qA€r:A @ A€€|jAÿÿ?K A?qA€r: AvAðr: AvA?qA€r: A vA?qA€r:A A6 A!  :A  @ A A ‹ AG!@@@@ E AqE Aÿq!@ - F  Aj! Aj"AG! E  Aq E  - AÿqF @@ AI AÿqA‚„l! A|j"Aq! A|q jAj!@ ( s"As AÿýûwjqA€‚„xq  Aj! A|j"AK ! ! E  Aÿq!@ - F  Aj! Aj" A Ž~@ ½"B4ˆ§Aÿq"AÿF @  @@ Db A!  DðC¢ ! (A@j!  6   A‚xj6 Bÿÿÿÿÿÿÿ‡€ƒB€€€€€€€ð?„¿! \ -J"Aj r:J@ ("AqE A r6A B7 (,"6 6  (0j6A Ã@@ (" A!   (! @  ("k O   ($ A!@ ,KAH !@ "E  Aj"j-A G   ($" I   k! j! (! !  (  ( j6  j!  ˆ#AÐk"$  6ÌA! A jAA()  (Ì6È@@A  AÈj AÐj A j  AN A!  @ (LAH  ! (!@ ,JAJ A_q6 A q!@@ (0E  AÈj AÐj A j  !  AÐ60 AÐj6 6 6 (,! 6,  AÈj AÐj A j  ! E AA ($ A60 6, A6 A6 (! A6 A ! (" r6A  A q! E  AÐj$  š~#AÐk"$  6L A7j! A8j! A! A! A!@@@ AH @ Aÿÿÿÿ kL A=6A!   j! (L" !@@@@@@@@@@@@@@@ -" E @@@@@ Aÿq" !  A%G  ! @ -A%G   Aj"6L Aj! -! ! A%F k!@ E    (L,!A!A! (L!@ E -A$G ,APj!A! A!   j"6LA! @@ ,"A`j"AM !  !A t"A‰ÑqE @  Aj"6L  r! ,"A`j"AK  !A t"A‰Ñq @@ A*G @@ ,E (L"-A$G ,At jAÀ~jA 6 Aj! ,At jA€}j(!A!  A! A!@ E  ("Aj6 (! (LAj!  6L AJ A k! A€Àr!  AÌj"AH  (L! A!@ -A.G @ -A*G @ ,E (L"-A$G ,At jAÀ~jA 6 ,At jA€}j(!  Aj"6L  @@ A!   ("Aj6 (!  (LAj"6L   Aj6L AÌj! (L! A!@ !A! ,A¿jA9K   Aj"6L ,! !  A:ljAïj-"AjAI E @@@@ AG A! AL   AH   Atj 6   Atj)7@ A! E   E  AÀj    (L! Aÿÿ{q" A€Àq! A!A”! ! Aj,"A_q  AqAF  "A¨j"A M @@@@@ A¿j"AM AÓG  E  (@!    A! A A   A6  )@>  Aj6@A! Aj! A!@@ ("E @ Aj "AH"   kK Aj!   j"K   A!  A   @  A!  A! (@!@ (" E  Aj " j" J  Aj  Aj!  I A   A€Às    J!   Aj"6L -! ! !       !  E A!@@  Atj(" E   Atj  A! Aj"A G  A! A O @  Atj( A! AK! Aj!  A!  +@    ! A! (@"Až " A " j ! !  k  !  )@<7A! ! ! !  @ )@"BU B }"7@A!A”!  @ A€qE A!A•!  A–A” Aq"!  )@ ! A!A”! AqE   k"Aj  J!  A AK! Ar! Aø! )@ A q ! A!A”! AqE  )@P  AvA”j!A!  A! Aÿq" AK @@@@@@@   (@ 6 (@ 6 (@ ¬7 (@ ;  (@ :  (@ 6  (@ ¬7  A!A”! )@!  !! Aÿÿ{q AJ! )@!@@  PE A! !   k Pj"  J! ! A   k"   H"j"   H"     A0   A€€s A0  A  A   A€Às  A! AÐj$  @ -A q    IA!@ (,E @ (",! Aj6  A ljAPj! ,  Ä@ AK Awj"A K @@@@@@@@@@    ("Aj6 (6  ("Aj6 47  ("Aj6 57  (AjAxq"Aj6 )7  ("Aj6 27  ("Aj6 37  ("Aj6 07  ("Aj6 17  (AjAxq"Aj6 )7   {#A€k"$@  L A€Àq    k"A€ A€I")@   k!@ A€ A€~j"AÿK Aÿq!   A€j$ .@ P @ Aj" §AqA0r: Bˆ"BR  5@ P @ Aj" §AqA€ j- r: Bˆ"BR  ˆ~@@ B€€€€Z !  @ Aj" B €"B ~}§A0r: BÿÿÿÿŸV! !  @ §"E @ Aj"  A n"A lkA0r: A K! !   ñ~|#A°k"$ A6,@@ #"BU š"#!A!A !  @ A€qE A!A“ !  A– A‘ Aq"! @@ B€€€€€€€øÿƒB€€€€€€€øÿR A  Aj" Aÿÿ{q   A« A¯ AvAq" A£ A§   bA A  A€Às  Aj! @@@@  A,j"  "Da  (," Aj6, A r" AáG   A r" AáF A  AH! (,!   Acj"6,A  AH! D°A¢! A0j AÐj AH"!@@@ DðAc DfqE «!  A!  6 Aj!  ¸¡DeÍÍA¢"Db @@ AN ! !  !@ A AH!@ A|j" I ­!B!@ 5 † Bÿÿÿÿƒ|" B€”ëÜ€"B€”ëÜ~}> A|j" O §" E A|j" 6 @@ " M  A|j"(E  (, k"6, ! AJ @ AJ AjA mAj! AæF!@A A k AwH! @@  I  Aj (!  A€”ëÜ v!A tAs!A! !@  (" v j6  q l! Aj" I  Aj (! E 6 Aj!  (, j"6,   " Atj kAu J! AH A!@  O  kAuA l!A ! ("A I @ Aj!  A l"O @ A  AæFk AG AçFqk" kAuA lAwjN A€Èj"A m" At jA„`j!A !@  A lk"AJ @ A l! AH! Aj! (" n" lk!@@ Aj" G E  Dà?Dð?Dø?  Av"FDø?  F  I!D@CD@C Aq!@ E -A-G š! š!  k"6    a   j"6@ A€”ëÜI @ A6@ A|j" O A|j"A6  (Aj"6 Aÿ“ëÜK  kAuA l!A ! ("A I @ Aj!  A l"O Aj" K! @@@ " K A!  A|j" (E A! @@ AçF Aq!  AsA A " J A{Jq" j! AA~  j! Aq" A ! @ E A ! A|j(" E A !A! A p @ Aj! A l"pE  kAuA lAwj!@ A rAæG A!  k" A AJ" H!  A!  j k" A AJ" H! r" AG!@@ A r"AæG A AJ!  @  Au" j s­ !" kAJ @ Aj" A0: kAH A~j" : AjA-A+ AH: k! A   j j jAj"    A0  A€€s@@@@ AæG AjAr! AjA r!    K"!@ 5 !! @@  F AjM @ Aj" A0: AjK  G A0: !  k Aj" M @ E A³ A  O  AH @@ 5 !" AjM @ Aj" A0: AjK A A H Awj! Aj" O  A J! !   @ AH  Aj ! AjAr! AjA r! !@@ 5 !" G A0: ! @@  F AjM @ Aj" A0: AjK  A Aj! @  AH  A³ A  k" J k! Aj" O  AJ A0 AjAA  k  ! A0 A jA A A  A€Às  A j  A q"! @ A K A k" E D @!@ D0@¢! Aj" @ -A-G  š ¡ š!     ¡! @ (," Au" j s­ !" G A0: Aj! Ar! (,! A~j" Aj: AjA-A+ AH: Aq! Aj!@ ! @@ ™DàAcE ª!  A€€€€x! A€ j- r:  ·¡D0@¢!@ Aj" AjkAG @  AJ Da  A.: Aj! Db @@ E  AjkA~j N  j kAj!  Ajk k j! A  j"   A0  A€€s Aj  Ajk" A0  k"jkAA   A  A€Às A°j$  H  ½   AA   AA Ë#A k"$  ("6 (!  6  6   k"6  j!A! Aj!@@@@ (< AjA A j' @  ( "F  AL  Aj   ("K"" (  A k"j6  ( k6  k! (<   k" A j'E A6 AG  (,"6 6  (0j6 !  A! A6 B7 (A r6 AF  (k! A j$  @ A  6A ’@ A€I    j!@@  sAq @@ AN !  @ Aq !  !@  -: Aj! Aj" O  Aq @ A|q"AÀI  A@j"K @  (6  (6  (6  ( 6  (6  (6  (6  (6  ( 6  ($6$  ((6(  (,6,  (060  (464  (868  (<6< AÀj! AÀj" M  O @  (6 Aj! Aj" I  @ AO !  @ A|j" O !  !@  -:  -:  -:  -: Aj! Aj" M @  O @  -: Aj! Aj" G ó~@ E  j"Aj : : AI A~j : : A}j : : AI A|j : : A I A kAq"j" AÿqA‚„l"6   kA|q"j"A|j 6 A I  6  6 Axj 6 Atj 6 AI  6  6  6  6 Apj 6 Alj 6 Ahj 6 Adj 6  AqAr"k"A I ­"B † „!  j!@  7  7  7  7 A j! A`j"AK P@"(" AjA|qj"AJ A06A @ ?AtM  A06A  6  ë2 #Ak"$@@@@@ AôK @A(Œ"A A jAxq A I"Av"v"AqE @@ AsAq j"At"A¼j("(" A´j"G A A~ wq6Œ  A(œ K  ( G  6  6 Aj!  At"Ar6  j" (Ar6  A(”"M @ E @@ tA t"A krq"A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vj"At"A¼j("(" A´j"G A A~ wq"6Œ  A(œ K  ( G   6  6 Ar6 j" At" k"Ar6 j 6@ E Av"AtA´j!A( !@@ A t"q A  r6Œ !  A(œ ("K   6  6  6  6 Aj!A 6 A 6”  A(" E  A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vjAtA¼j("(Axq k! !@@@ (" Aj("E  (Axq k"   I"!  ! ! A(œ" K   j" M  (! @@ ( " F ("K  ( G  ( G  6  6  @@ Aj"(" ("E  Aj! @ ! "Aj"(" Aj! (" K  A6  A! @ E @@  ("AtA¼j"(G 6  A A~ wq6  A(œ K  AA ( Fj 6 E  A(œ" K   6@ ("E  K   6 6 Aj("E A(œ K  Aj 6 6 @@ AK   j"Ar6  j" (Ar6   Ar6 Ar6 j 6@ E Av"AtA´j!A( !@@A t" q A  r6Œ !  A(œ ("K   6  6 6 6 A 6 A 6” Aj!  A! A¿K A j"Axq!A("E A! @ Av"E A! AÿÿÿK A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv r rk"At  AjvAqrAj! A k!@@@@ AtA¼j(" A!A!  AA Avk AFt!A!A!@@ (Axq k" O ! !  A! ! !  Aj("   AvAqjAj("F !  AGt!  @ r A t"A kr q"E  A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vjAtA¼j(! E  @ (Axq k" I!@ (" Aj(!   !  ! !  E A(” kO A(œ" K   j" M  (! @@ ( " F ("K  ( G  ( G  6  6  @@ Aj"(" ("E  Aj! @ ! "Aj"(" Aj! (" K  A6  A! @ E @@  ("AtA¼j"(G 6  A A~ wq"6  A(œ K  AA ( Fj 6 E  A(œ" K   6@ ("E  K   6 6 Aj("E A(œ K  Aj 6 6 @@ AK   j"Ar6  j" (Ar6   Ar6 Ar6 j 6@ AÿK Av"AtA´j!@@A(Œ"A t"q A  r6Œ !  A(œ ("K  6  6 6 6  @@ Av" A!  A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At  AjvAqrAj! 6 B7 AtA¼j!@@@ A t"q A  r6  6 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A(œ K   6 6 6 6  A(œ" K   ("K  6  6 A6 6 6 Aj!  @A(”" I A( !@@ k"AI A 6”A  j"6   Ar6  j 6  Ar6  AA6 AA6”  Ar6  j" (Ar6 Aj!  @A(˜" M A  k"6˜AA(¤" j"6¤  Ar6 Ar6 Aj!  @@A(äE A(ì!  AB7ðAB€ €€€€7èA A jApqAتժs6äAA6øAA6ÈA€ ! A!  A/j"j"A k" q" M A!@A(Ä"E A(¼" j" M  K  @@A-ÈAq @@@@@A(¤"E AÌ!@@ (" K  (j K  (" A*"AF  !@A(è"Aj" qE  k  jA kqj!  M  AþÿÿÿK @A(Ä"E A(¼" j" M   K  *" G    k q"AþÿÿÿK  *" ( (jF  ! !@ A0j M AþÿÿÿK AF  kA(ì"jA kq"AþÿÿÿK @ *AF j!  A k*  AG   AG  AA(ÈAr6È AþÿÿÿK  *"A*"O  AF  AF  k" A(jM  AA(¼ j"6¼@ A(ÀM A 6À @@@@A(¤"E AÌ!@  (" ("jF  ("  @@A(œ"E  O  A 6œ A!A 6ÐA 6ÌAA6¬AA(ä6°AA6Ø@ At"A¼j A´j"6 AÀj 6 Aj"A G A AXj"Ax kAqA AjAq"k"6˜A  j"6¤  Ar6  jA(6AA(ô6¨  - Aq  M  K  j6A Ax kAqA AjAq"j"6¤AA(˜ j" k"6˜  Ar6  jA(6AA(ô6¨  @ A(œ"O A 6œ !  j!AÌ!@@@@@ ( F  ("  - AqE  AÌ!@@ (" K  (j" K  (! 6 ( j6 Ax kAqA AjAqj" Ar6 Ax kAqA AjAqj" k k! j!@@  G A 6¤AA(˜ j"6˜  Ar6  @A(  G A 6 AA(” j"6”  Ar6  j 6  @ (" AqAG @@ AÿK ( !@ (" Av"AtA´j"F  K  ( G  @  G AA(ŒA~ wq6Œ  @  F  K  ( G   6  6  (! @@ ( " F  ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! ("  K  A6 E @@ ("AtA¼j"( G  6  AA(A~ wq6  A(œ K  AA ( Fj 6 E  A(œ" K   6@ ("E  K   6  6 ("E A(œ K  Aj 6  6 Axq" j!  j!  (A~q6  Ar6  j 6@ AÿK Av"AtA´j!@@A(Œ"A t"q A  r6Œ !  A(œ ("K  6  6  6  6  A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At AjvAqrAj!  6 B7 AtA¼j!@@@A("A t"q A  r6  6  6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A(œ K   6  6  6  6  A(œ" K   ("K  6  6 A6  6  6 Aj!  A AXj"Ax kAqA AjAq"k" 6˜A  j"6¤  Ar6  jA(6AA(ô6¨  A' kAqA AYjAqjAQj" AjI"A6 AjA)Ô7 A)Ì7A Aj6ÔA 6ÐA 6ÌAA6Ø Aj!@ A6 Aj! Aj!  K  F  (A~q6   k"Ar6  6@ AÿK Av"AtA´j!@@A(Œ"A t"q A  r6Œ !  A(œ ("K  6  6  6  6  A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At  AjvAqrAj! B7 Aj 6 AtA¼j!@@@A("A t"q A  r6  6 Aj 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A(œ K   6 Aj 6  6  6  A(œ" K   ("K  6  6 AjA6  6  6 A(˜" M A k"6˜AA(¤" j"6¤  Ar6 Ar6 Aj!   A06A! Aj$ Ë@@ E Axj"A(œ"I  A|j("Aq"AF   Axq"j!@ Aq E   ("k" I   j!@A(  F @ AÿK ( !@ (" Av"AtA´j"F  K  ( G  @  G AA(ŒA~ wq6Œ  @  F  K  ( G   6  6  (!@@ ( " F  ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! ("  K  A6 E @@ ("AtA¼j"( G  6  AA(A~ wq6  A(œ K  AA ( Fj 6 E  A(œ" K   6@ ("E  K   6  6 ("E A(œ K  Aj 6  6  ("AqAG A 6”  A~q6  Ar6  j 6  M  ("AqE @@ Aq @A(¤ G A 6¤AA(˜ j"6˜  Ar6 A( G AA6”AA6  @A(  G A 6 AA(” j"6”  Ar6  j 6 @@ AÿK ( !@ (" Av"AtA´j"F A(œ K  ( G  @  G AA(ŒA~ wq6Œ  @  F A(œ K  ( G   6  6  (!@@ ( " F A(œ ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! (" A(œ K  A6 E @@ ("AtA¼j"( G  6  AA(A~ wq6  A(œ K  AA ( Fj 6 E  A(œ" K   6@ ("E  K   6  6 ("E A(œ K  Aj 6  6  Axq j"Ar6  j 6 A( G A 6”  A~q6  Ar6  j 6 @ AÿK Av"AtA´j!@@A(Œ"A t"q A  r6Œ !  A(œ ("K  6  6  6  6 A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At AjvAqrAj! B7 Aj 6 AtA¼j!@@@@A("A t"q A  r6  6 Aj 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A(œ K   6 Aj 6  6  6  A(œ" K   ("K  6  6 AjA6  6  6 AA(¬Aj"6¬  AÔ!@ ("Aj! AA6¬   @A(ü A 6€A 6ü # # kApq"$   $  @                   #~  ­ ­B †„ 4! B ˆ§ § A€ µ%f, %f *%d* @-+ 0X0x(null)              0123456789ABCDEF-0X+0X 0X-0x+0x 0xinfINFnanNAN.A¸ €*È ÿÿÿÿô AÀ Ä ÚnameÒ7__wasi_fd_writeemscripten_memcpy_bigemscripten_get_sbrk_ptremscripten_resize_heapabort setTempRet0__wasm_call_ctors__original_mainmain __emscripten_stdout_close __emscripten_stdout_seek iprintf __small_printf __lockfile __unlockfile__errno_locationisdigit pthread_selfwcrtomb__pthread_selfwctombmemchrfrexp __towrite __fwritex__vfprintf_internal printf_coreoutgetintpop_argpadfmt_o fmt_x!fmt_u"fmt_fp# __DOUBLE_BITS$ vfiprintf%__small_vfprintf& __stdio_write'__wasi_syscall_ret(memcpy)memset*sbrk+dlmalloc,dlfree-setThrew. stackSave/ stackAlloc0 stackRestore1__growWasmMemory2 dynCall_ii3 dynCall_iiii4 dynCall_jiji5dynCall_iidiiii6legalstub$dynCall_jiji¹ .debug_info©•Á¦å78ü ê•üœ¡œ¡ • ÀÅ !¥ $…ç ï 7  '¹=9+4­ZÏGäL¡ 7¦íŸP¥Y7#^¥&üÿÿÿFd¥&_›f¡±i¡ÅÏiØÅ@Ï‚Øz¡ UÒ .debug_loc*ŸíŸŸŒíŸŸíŸŒ€€€üŸ€€€üŸíŸíŸ& .debug_ranges[dß .debug_abbrev%4I?: ; 6  : ;  I: ; 8 2 .: ; <?I4.n: ; I<?I I : ; ( $> I 9I: ; ;: ; .G dI4: ; I.@—B: ; I?4: ; I 1UX Y W 111X Y W ‰‚ .debug_line²{û /usr/local/google/home/azakai/Dev/emscripten/system/include/libcxxsrc.cpp__nullptrstddef.h&y -278 > @sJOPXY \atij m{ } ‚ …|“¢¬÷ .debug_strclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project d6fe253653b7e760f94ca21d0a7ebbfeeee28777)/tmp/emscripten_test_wasm3_2u9tontv/src.cpp/tmp/emscripten_test_wasm3_2u9tontvrng1lastunsigned intRandom_ZN6Random3getEfgetfloatIMIAICstddecltype(nullptr)nullptr_tthismaxmainintrng2countix2x1¾ producerslanguage C_plus_plus processed-byclang†11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project d6fe253653b7e760f94ca21d0a7ebbfeeee28777)binaryen-version_108/test/passes/converge_O3_metrics.bin.txt000066400000000000000000000457201423707623100244410ustar00rootroot00000000000000total [exports] : 2 [funcs] : 6 [globals] : 1 [imports] : 3 [memory-data] : 28 [table-data] : 429 [tables] : 0 [tags] : 0 [total] : 551 [vars] : 2 Binary : 12 Block : 6 Break : 3 Call : 1 CallIndirect : 4 Const : 46 Drop : 3 GlobalSet : 1 If : 2 Load : 16 LocalGet : 16 LocalSet : 6 Loop : 1 RefFunc : 429 Store : 5 (module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 2948) "\03") (data (i32.const 6828) "\04") (data (i32.const 7028) "\0d\00\00\00\06") (data (i32.const 10888) "hello, world!") (data (i32.const 18100) "\b8\1a") (data (i32.const 18128) ",I") (data (i32.const 18732) "D\1b") (data (i32.const 18764) "`\0b") (import "env" "table" (table $timport$0 478 478 funcref)) (import "env" "___syscall146" (func $import$0 (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 1)) (elem (i32.const 0) $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $___stdout_write $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $__ZNSt3__211__stdoutbufIcE6xsputnEPKci $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $__ZNSt3__211__stdoutbufIcE8overflowEi) (export "_main" (func $_main)) (export "_malloc" (func $_malloc)) (func $b0 (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) (i32.const 0) ) (func $_malloc (; has Stack IR ;) (param $0 i32) (result i32) (i32.const 0) ) (func $_main (; has Stack IR ;) (result i32) (local $0 i32) (local $1 i32) (local.set $0 (i32.const 10888) ) (loop $label$3 (br_if $label$3 (i32.load8_s (local.tee $0 (i32.add (local.get $0) (i32.const 1) ) ) ) ) ) (local.set $1 (i32.load offset=24 (i32.add (i32.load (i32.sub (i32.load (i32.const 18100) ) (i32.const 12) ) ) (i32.const 18100) ) ) ) (if (local.tee $0 (i32.sub (local.get $0) (i32.const 10888) ) ) (block $label$2 (br_if $label$2 (call_indirect (type $i32_i32_i32_=>_i32) (local.get $1) (i32.const 10888) (local.get $0) (i32.add (i32.load offset=48 (i32.load (local.get $1) ) ) (i32.const 8) ) ) ) ) ) (block $label$1 (br_if $label$1 (if (result i32) (i32.load (i32.add (local.tee $0 (i32.load (i32.add (i32.load (i32.sub (i32.load (i32.const 18100) ) (i32.const 12) ) ) (i32.const 18124) ) ) ) (i32.const 24) ) ) (i32.const 0) (call_indirect (type $i32_i32_=>_i32) (local.get $0) (i32.const 10) (i32.add (i32.load offset=52 (i32.load (local.get $0) ) ) (i32.const 422) ) ) ) ) ) (i32.const 0) ) (func $___stdout_write (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (global.set $global$0 (i32.const 32) ) (i32.store (i32.const 8) (local.get $1) ) (i32.store (i32.const 12) (local.get $2) ) (i32.store (local.tee $0 (i32.const 32) ) (i32.const 1) ) (i32.store offset=8 (local.get $0) (i32.const 2) ) (drop (call $import$0 (i32.const 146) (local.get $0) ) ) (i32.const 1) ) (func $__ZNSt3__211__stdoutbufIcE8overflowEi (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) (i32.store8 (i32.const 0) (local.get $1) ) (drop (call_indirect (type $i32_i32_i32_=>_i32) (i32.const 0) (i32.const 0) (i32.const 1) (i32.add (i32.load offset=36 (i32.load (i32.add (local.get $0) (i32.const 32) ) ) ) (i32.const 8) ) ) ) (i32.const 0) ) (func $__ZNSt3__211__stdoutbufIcE6xsputnEPKci (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call_indirect (type $i32_i32_i32_=>_i32) (i32.const 0) (local.get $1) (local.get $2) (i32.add (i32.load offset=36 (i32.load offset=32 (local.get $0) ) ) (i32.const 8) ) ) ) (i32.const 0) ) ) total [exports] : 2 [funcs] : 6 [globals] : 0 -1 [imports] : 3 [memory-data] : 28 [table-data] : 429 [tables] : 0 [tags] : 0 [total] : 547 -4 [vars] : 2 Binary : 12 Block : 6 Break : 3 Call : 1 CallIndirect : 4 Const : 46 Drop : 3 If : 2 Load : 16 LocalGet : 14 -2 LocalSet : 5 -1 Loop : 1 RefFunc : 429 Store : 5 (module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 2948) "\03") (data (i32.const 6828) "\04") (data (i32.const 7028) "\0d\00\00\00\06") (data (i32.const 10888) "hello, world!") (data (i32.const 18100) "\b8\1a") (data (i32.const 18128) ",I") (data (i32.const 18732) "D\1b") (data (i32.const 18764) "`\0b") (import "env" "table" (table $timport$0 478 478 funcref)) (import "env" "___syscall146" (func $import$0 (param i32 i32) (result i32))) (elem (i32.const 0) $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $___stdout_write $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $__ZNSt3__211__stdoutbufIcE6xsputnEPKci $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $__ZNSt3__211__stdoutbufIcE8overflowEi) (export "_main" (func $_main)) (export "_malloc" (func $_malloc)) (func $b0 (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) (i32.const 0) ) (func $_malloc (; has Stack IR ;) (param $0 i32) (result i32) (i32.const 0) ) (func $_main (; has Stack IR ;) (result i32) (local $0 i32) (local $1 i32) (local.set $0 (i32.const 10888) ) (loop $label$3 (br_if $label$3 (i32.load8_s (local.tee $0 (i32.add (local.get $0) (i32.const 1) ) ) ) ) ) (local.set $1 (i32.load offset=24 (i32.add (i32.load (i32.sub (i32.load (i32.const 18100) ) (i32.const 12) ) ) (i32.const 18100) ) ) ) (if (local.tee $0 (i32.sub (local.get $0) (i32.const 10888) ) ) (block $label$2 (br_if $label$2 (call_indirect (type $i32_i32_i32_=>_i32) (local.get $1) (i32.const 10888) (local.get $0) (i32.add (i32.load offset=48 (i32.load (local.get $1) ) ) (i32.const 8) ) ) ) ) ) (block $label$1 (br_if $label$1 (if (result i32) (i32.load (i32.add (local.tee $0 (i32.load (i32.add (i32.load (i32.sub (i32.load (i32.const 18100) ) (i32.const 12) ) ) (i32.const 18124) ) ) ) (i32.const 24) ) ) (i32.const 0) (call_indirect (type $i32_i32_=>_i32) (local.get $0) (i32.const 10) (i32.add (i32.load offset=52 (i32.load (local.get $0) ) ) (i32.const 422) ) ) ) ) ) (i32.const 0) ) (func $___stdout_write (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.store (i32.const 8) (local.get $1) ) (i32.store (i32.const 12) (local.get $2) ) (i32.store (i32.const 32) (i32.const 1) ) (i32.store (i32.const 40) (i32.const 2) ) (drop (call $import$0 (i32.const 146) (i32.const 32) ) ) (i32.const 1) ) (func $__ZNSt3__211__stdoutbufIcE8overflowEi (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) (i32.store8 (i32.const 0) (local.get $1) ) (drop (call_indirect (type $i32_i32_i32_=>_i32) (i32.const 0) (i32.const 0) (i32.const 1) (i32.add (i32.load offset=36 (i32.load (i32.add (local.get $0) (i32.const 32) ) ) ) (i32.const 8) ) ) ) (i32.const 0) ) (func $__ZNSt3__211__stdoutbufIcE6xsputnEPKci (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call_indirect (type $i32_i32_i32_=>_i32) (i32.const 0) (local.get $1) (local.get $2) (i32.add (i32.load offset=36 (i32.load offset=32 (local.get $0) ) ) (i32.const 8) ) ) ) (i32.const 0) ) ) total [exports] : 2 [funcs] : 6 [globals] : 0 [imports] : 3 [memory-data] : 28 [table-data] : 429 [tables] : 0 [tags] : 0 [total] : 547 [vars] : 2 Binary : 12 Block : 6 Break : 3 Call : 1 CallIndirect : 4 Const : 46 Drop : 3 If : 2 Load : 16 LocalGet : 14 LocalSet : 5 Loop : 1 RefFunc : 429 Store : 5 (module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 2948) "\03") (data (i32.const 6828) "\04") (data (i32.const 7028) "\0d\00\00\00\06") (data (i32.const 10888) "hello, world!") (data (i32.const 18100) "\b8\1a") (data (i32.const 18128) ",I") (data (i32.const 18732) "D\1b") (data (i32.const 18764) "`\0b") (import "env" "table" (table $timport$0 478 478 funcref)) (import "env" "___syscall146" (func $import$0 (param i32 i32) (result i32))) (elem (i32.const 0) $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $___stdout_write $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $__ZNSt3__211__stdoutbufIcE6xsputnEPKci $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $b0 $__ZNSt3__211__stdoutbufIcE8overflowEi) (export "_main" (func $_main)) (export "_malloc" (func $_malloc)) (func $b0 (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) (i32.const 0) ) (func $_malloc (; has Stack IR ;) (param $0 i32) (result i32) (i32.const 0) ) (func $_main (; has Stack IR ;) (result i32) (local $0 i32) (local $1 i32) (local.set $0 (i32.const 10888) ) (loop $label$3 (br_if $label$3 (i32.load8_s (local.tee $0 (i32.add (local.get $0) (i32.const 1) ) ) ) ) ) (local.set $1 (i32.load offset=24 (i32.add (i32.load (i32.sub (i32.load (i32.const 18100) ) (i32.const 12) ) ) (i32.const 18100) ) ) ) (if (local.tee $0 (i32.sub (local.get $0) (i32.const 10888) ) ) (block $label$2 (br_if $label$2 (call_indirect (type $i32_i32_i32_=>_i32) (local.get $1) (i32.const 10888) (local.get $0) (i32.add (i32.load offset=48 (i32.load (local.get $1) ) ) (i32.const 8) ) ) ) ) ) (block $label$1 (br_if $label$1 (if (result i32) (i32.load (i32.add (local.tee $0 (i32.load (i32.add (i32.load (i32.sub (i32.load (i32.const 18100) ) (i32.const 12) ) ) (i32.const 18124) ) ) ) (i32.const 24) ) ) (i32.const 0) (call_indirect (type $i32_i32_=>_i32) (local.get $0) (i32.const 10) (i32.add (i32.load offset=52 (i32.load (local.get $0) ) ) (i32.const 422) ) ) ) ) ) (i32.const 0) ) (func $___stdout_write (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.store (i32.const 8) (local.get $1) ) (i32.store (i32.const 12) (local.get $2) ) (i32.store (i32.const 32) (i32.const 1) ) (i32.store (i32.const 40) (i32.const 2) ) (drop (call $import$0 (i32.const 146) (i32.const 32) ) ) (i32.const 1) ) (func $__ZNSt3__211__stdoutbufIcE8overflowEi (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) (i32.store8 (i32.const 0) (local.get $1) ) (drop (call_indirect (type $i32_i32_i32_=>_i32) (i32.const 0) (i32.const 0) (i32.const 1) (i32.add (i32.load offset=36 (i32.load (i32.add (local.get $0) (i32.const 32) ) ) ) (i32.const 8) ) ) ) (i32.const 0) ) (func $__ZNSt3__211__stdoutbufIcE6xsputnEPKci (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call_indirect (type $i32_i32_i32_=>_i32) (i32.const 0) (local.get $1) (local.get $2) (i32.add (i32.load offset=36 (i32.load offset=32 (local.get $0) ) ) (i32.const 8) ) ) ) (i32.const 0) ) ) binaryen-version_108/test/passes/converge_O3_metrics.wasm000066400000000000000000000027241423707623100240170ustar00rootroot00000000000000asm8````````7env ___syscall146envmemory€€envtablepÞÞ A _main_malloc ´A ­  î A A *@  k"@   ((0Aj  A A  ($AjA 5A 6A 6#"A6 A6A’ AA A .AˆÕ"!@ Aj", k A  A A $A   4A´(Atj(A´j(AˆÕ AˆÕj"AˆÕA AA A@A´(Atj(AÌj(""Aj(A  ((4A¦j A :AAA A j(A  A  (  RA„ A¬5 Aô6  AˆÕ hello, world!A´ ¸AÐ ,IA¬’ DAÌ’ ` ¯name§ import$0b0_mallocs__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4__fwrite___stdio_write_main___stdout_write`__ZNSt3__224__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_j 6__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE3putEc %__ZNSt3__211__stdoutbufIcE8overflowEi &__ZNSt3__211__stdoutbufIcE6xsputnEPKcibinaryen-version_108/test/passes/dce_vacuum_remove-unused-names.bin.txt000066400000000000000000000030071423707623100266240ustar00rootroot00000000000000(module (type $f32_f32_=>_f32 (func (param f32 f32) (result f32))) (type $f64_f64_=>_f64 (func (param f64 f64) (result f64))) (export "f32.compute_radix" (func $0)) (export "f64.compute_radix" (func $1)) (func $0 (param $0 f32) (param $1 f32) (result f32) (loop $label$2 (br_if $label$2 (f32.eq (f32.add (f32.sub (f32.add (local.tee $0 (f32.add (local.get $0) (local.get $0) ) ) (f32.const 1) ) (local.get $0) ) (f32.const -1) ) (f32.const 0) ) ) ) (block (drop (call $0 (f32.add (local.get $0) (local.tee $1 (f32.add (local.get $1) (f32.const 1) ) ) ) (local.get $0) ) ) (unreachable) ) ) (func $1 (param $0 f64) (param $1 f64) (result f64) (loop $label$2 (br_if $label$2 (f64.eq (f64.add (f64.sub (f64.add (local.tee $0 (f64.add (local.get $0) (local.get $0) ) ) (f64.const 1) ) (local.get $0) ) (f64.const -1) ) (f64.const 0) ) ) ) (loop $label$3 (br_if $label$3 (f64.ne (f64.sub (f64.sub (f64.add (local.get $0) (local.tee $1 (f64.add (local.get $1) (f64.const 1) ) ) ) (local.get $0) ) (local.get $1) ) (f64.const 0) ) ) ) (local.get $1) ) ) binaryen-version_108/test/passes/dce_vacuum_remove-unused-names.wasm000066400000000000000000000004041423707623100262030ustar00rootroot00000000000000asm€€€`}}}`|||ƒ€€€©€€€f32.compute_radixf64.compute_radix «€€Æ€€€}@ ’"C€?’ “C€¿’C[ @ C€?’"’ “C\  Ú€€€|@  "Dð?  ¡Dð¿ Da @ Dð? "  ¡ ¡Db  binaryen-version_108/test/passes/duplicate-function-elimination_all-features.txt000066400000000000000000000011661423707623100305360ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_funcref (func (result funcref))) (elem declare func $0) (func $0 (result i32) (i32.const 0) ) (func $test (result funcref) (ref.func $0) ) ) (module (type $none_=>_none (func)) (global $bar i32 (i32.const 0)) (memory $foo 16 16) (export "memory" (memory $foo)) (export "global" (global $bar)) (func $bar (nop) ) ) (module (type $func (func (result i32))) (global $global$0 (ref $func) (ref.func $foo)) (export "export" (func $2)) (func $foo (result i32) (unreachable) ) (func $2 (result i32) (call_ref (global.get $global$0) ) ) ) binaryen-version_108/test/passes/duplicate-function-elimination_all-features.wast000066400000000000000000000017121423707623100306720ustar00rootroot00000000000000;; --duplicate-function-elimination should not remove functions used in ref.func. (module (func $0 (result i32) (i32.const 0) ) (func $1 (result i32) (i32.const 0) ) (func $test (result funcref) (ref.func $1) ) ) ;; renaming after deduplication must only affect functions (module (memory $foo 16 16) (global $bar i32 (i32.const 0)) (export "memory" (memory $foo)) (export "global" (global $bar)) (func $bar ;; happens to share a name with the global ) (func $foo ;; happens to share a name with the memory ) ) ;; renaming after deduplication must update ref.funcs in globals (module (type $func (func (result i32))) (global $global$0 (ref $func) (ref.func $bar)) ;; These two identical functions can be merged. The ref.func in the global must ;; be updated accordingly. (func $foo (result i32) (unreachable) ) (func $bar (result i32) (unreachable) ) (func "export" (result i32) (call_ref (global.get $global$0) ) ) ) binaryen-version_108/test/passes/duplicate-function-elimination_optimize-level=1.txt000066400000000000000000000276771423707623100313140ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 0) (func $erase (nop) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (nop) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (i32.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (drop (i32.const 1) ) ) ) (module (type $0 (func)) (memory $0 0) (table $0 3 3 funcref) (elem (i32.const 0) $keep2 $keep2 $caller) (export "keep2" (func $keep2)) (export "other" (func $keep2)) (start $keep2) (func $keep2 (nop) ) (func $caller (call $keep2) (call $keep2) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2-after-two-passes (nop) ) (func $keep-caller (call $keep2-after-two-passes) ) (func $other-caller (call $keep2-after-two-passes) ) ) (module (type $0 (func)) (memory $0 0) (func $keep-4 (nop) ) (func $other (unreachable) ) (func $keep-caller (call $keep-4) ) (func $other-caller (call $other) ) ) (module (type $2 (func)) (type $3 (func (param i32))) (type $S (func (result i32))) (memory $0 0) (func $keep4-similar-but-func-sig-differs (drop (i32.const 0) ) ) (func $other1 (param $i i32) (drop (i32.const 0) ) ) (func $other2 (result i32) (i32.const 0) ) ) (module (type $1 (func (param i32))) (type $S (func (result i32))) (memory $0 0) (func $keep2-similar-but-func-sig-differs (param $i i32) (drop (i32.const 0) ) ) (func $other2 (result i32) (i32.const 0) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (nop) ) (func $other (nop) (nop) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (block $block0 ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $block0 ) ) (func $other (block $block0 (nop) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (block $block0 (nop) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $block0 (nop) ) ) (func $other (block $block0 (nop) (unreachable) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $block0 (nop) ) ) (func $other (block $block0 (unreachable) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase-since-block-names-do-not-matter (block $foo ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase-since-block-names-do-not-matter (block $foo (br $foo) (br_table $foo $foo (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $foo (block $block (drop (i32.const 0) ) (br $foo) ) ) ) (func $other (block $bar (block $block (drop (i32.const 1) ) (br $bar) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $foo (br_if $foo (i32.const 0) ) ) ) (func $other (block $bar (br_if $bar (i32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (block $foo (br_if $foo (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $foo (br_table $foo $foo (i32.const 0) ) ) ) (func $other (block $bar (br_table $bar $bar (i32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (loop $bar (nop) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (block $foo (result i32) (br_table $foo $foo (i32.const 0) (i32.const 0) ) ) ) ) (func $other (drop (block $bar (result i32) (br_table $bar $bar (i32.const 0) (i32.const 1) ) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $foo (block $bar (br_table $foo $bar (i32.const 0) ) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (block $foo (block $bar (br_table $foo $bar (i32.const 0) ) ) ) ) (func $other (block $bar (block $foo (br_table $foo $bar (i32.const 0) ) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (call $erase) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2-but-in-theory-we-could-erase (call $keep2-but-in-theory-we-could-erase) ) (func $other (call $other) ) ) (module (type $FUNCSIG$v (func)) (import "env" "i" (func $i)) (import "env" "j" (func $j)) (memory $0 0) (func $erase (call $i) ) ) (module (type $FUNCSIG$v (func)) (import "env" "i" (func $i)) (import "env" "j" (func $j)) (memory $0 0) (func $keep2 (call $i) ) (func $other (call $j) ) ) (module (type $T (func)) (memory $0 0) (table $0 2 2 funcref) (elem (i32.const 0) $erase $erase) (func $erase (call_indirect (type $T) (i32.const 0) ) ) ) (module (type $T (func)) (memory $0 0) (table $0 2 2 funcref) (elem (i32.const 0) $keep2 $other) (func $keep2 (call_indirect (type $T) (i32.const 0) ) ) (func $other (call_indirect (type $T) (i32.const 1) ) ) ) (module (type $S (func)) (memory $0 0) (table $0 2 2 funcref) (elem (i32.const 0) $keep2 $keep2) (func $keep2 (call_indirect (type $S) (i32.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase-even-locals-with-different-names (local $i i32) (drop (local.get $i) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (local $i i32) (drop (local.get $i) ) ) (func $other (local $j i64) (drop (local.get $j) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase-even-locals-with-different-names (local $i i32) (local.set $i (i32.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (local $j i64) (local.set $j (i64.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (local $j i32) (local.set $j (i32.const 1) ) ) ) (module (type $0 (func)) (memory $0 10) (func $erase (drop (i32.load (i32.const 0) ) ) (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load offset=3 (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 align=1 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load16_s (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 (i32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load16_u offset=3 (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $erase (i32.store (i32.const 0) (i32.const 100) ) (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 align=1 (i32.const 0) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store16 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 (i32.const 1) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 (i32.const 0) (i32.const 101) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (drop (i64.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (drop (f32.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (drop (f64.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i64.const 0) ) ) (func $other (drop (i64.const 1) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.const 0.10000000149011612) ) ) (func $other (drop (f32.const -0.10000000149011612) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f64.const 0.1) ) ) (func $other (drop (f64.const 0.2) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (f32.abs (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.abs (f32.const 0) ) ) ) (func $other (drop (f32.abs (f32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.abs (f32.const 0) ) ) ) (func $other (drop (f32.neg (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (drop (f32.add (f32.const 0) (f32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (drop (f32.add (f32.const 1) (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (drop (f32.sub (f32.const 0) (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (drop (select (i32.const 1) (i32.const 0) (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (drop (select (i32.const 0) (i32.const 2) (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (drop (select (i32.const 0) (i32.const 0) (i32.const 3) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (return) ) ) (module (type $0 (func (result i32))) (memory $0 0) (func $erase (result i32) (return (i32.const 0) ) ) ) (module (type $0 (func (result i32))) (memory $0 0) (func $keep (result i32) (return (i32.const 0) ) ) (func $other (result i32) (return (i32.const 1) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (memory.size) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (memory.grow (i32.const 10) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (memory.grow (i32.const 10) ) ) ) (func $other (drop (memory.grow (i32.const 11) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (memory.size) ) ) (func $other (drop (memory.grow (i32.const 10) ) ) ) ) binaryen-version_108/test/passes/duplicate-function-elimination_optimize-level=1.wast000066400000000000000000000421701423707623100314340ustar00rootroot00000000000000(module (memory 0) (type $0 (func)) (func $erase (type $0) (nop) ) (func $other (type $0) (nop) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (nop) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (i32.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (i32.const 1) ) ) ) (module (memory 0) (start $other) (type $0 (func)) (export "keep2" $keep2) (export "other" $other) (table 3 3 funcref) (elem (i32.const 0) $keep2 $other $caller) (func $keep2 (type $0) (nop) ) (func $other (type $0) (nop) ) (func $caller (type $0) (call $keep2) (call $other) ) ) (module (memory 0) (type $0 (func)) (func $keep2-after-two-passes (type $0) (nop) ) (func $other (type $0) (nop) ) (func $keep-caller (type $0) (call $keep2-after-two-passes) ) (func $other-caller (type $0) (call $other) ) ) (module (memory 0) (type $0 (func)) (func $keep-4 (type $0) (nop) ) (func $other (type $0) (unreachable) ) (func $keep-caller (type $0) (call $keep-4) ) (func $other-caller (type $0) (call $other) ) ) (module (memory 0) (type $T (func (result i32))) (type $S (func (result i32))) (type $2 (func)) (type $3 (func (param i32))) (func $keep4-similar-but-func-sig-differs (type $2) (drop (i32.const 0) ) ) (func $other1 (type $3) (param $i i32) (drop (i32.const 0) ) ) (func $other2 (type $T) (result i32) (i32.const 0) ) (func $other3 (type $S) (result i32) (i32.const 0) ) ) (module (memory 0) (type $S (func (result i32))) (type $1 (func (param i32))) (func $keep2-similar-but-func-sig-differs (type $1) (param $i i32) (drop (i32.const 0) ) ) (func $other1 (type $1) (param $i i32) (drop (i32.const 0) ) ) (func $other2 (type $S) (result i32) (i32.const 0) ) (func $other3 (type $S) (result i32) (i32.const 0) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (nop) ) (func $other (type $0) (nop) (nop) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (block $block0 ) ) (func $other (type $0) (block $block0 ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $block0 ) ) (func $other (type $0) (block $block0 (nop) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (block $block0 (nop) ) ) (func $other (type $0) (block $block0 (nop) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $block0 (nop) ) ) (func $other (type $0) (block $block0 (nop) (unreachable) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $block0 (nop) ) ) (func $other (type $0) (block $block0 (unreachable) ) ) ) (module (memory 0) (type $0 (func)) (func $erase-since-block-names-do-not-matter (type $0) (block $foo ) ) (func $other (type $0) (block $bar ) ) ) (module (memory 0) (type $0 (func)) (func $erase-since-block-names-do-not-matter (type $0) (block $foo (br $foo) (br_table $foo $foo (i32.const 0) ) ) ) (func $other (type $0) (block $bar (br $bar) (br_table $bar $bar (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $foo (block (drop (i32.const 0) ) (br $foo) ) ) ) (func $other (type $0) (block $bar (block (drop (i32.const 1) ) (br $bar) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $foo (br_if $foo (i32.const 0) ) ) ) (func $other (type $0) (block $bar (br_if $bar (i32.const 1) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (block $foo (br_if $foo (i32.const 0) ) ) ) (func $other (type $0) (block $bar (br_if $bar (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $foo (br_table $foo $foo (i32.const 0) ) ) ) (func $other (type $0) (block $bar (br_table $bar $bar (i32.const 1) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (loop $bar (nop) ) ) (func $other (type $0) (loop $sjc (nop) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (block $foo (result i32) (br_table $foo $foo (i32.const 0) (i32.const 0) ) ) ) ) (func $other (type $0) (drop (block $bar (result i32) (br_table $bar $bar (i32.const 0) (i32.const 1) ) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $foo (block $bar (br_table $foo $bar (i32.const 0) ) ) ) ) (func $other (type $0) (block $bar (block $foo (br_table $bar $foo (i32.const 0) ) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (block $foo (block $bar (br_table $foo $bar (i32.const 0) ) ) ) ) (func $other (type $0) (block $bar (block $foo (br_table $foo $bar (i32.const 0) ) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (call $erase) ) (func $other (type $0) (call $erase) ) ) (module (memory 0) (type $0 (func)) (func $keep2-but-in-theory-we-could-erase (type $0) (call $keep2-but-in-theory-we-could-erase) ) (func $other (type $0) (call $other) ) ) (module (memory 0) (type $FUNCSIG$v (func)) (import $i "env" "i") (import $j "env" "j") (func $erase (type $FUNCSIG$v) (call $i) ) (func $other (type $FUNCSIG$v) (call $i) ) ) (module (memory 0) (type $FUNCSIG$v (func)) (import $i "env" "i") (import $j "env" "j") (func $keep2 (type $FUNCSIG$v) (call $i) ) (func $other (type $FUNCSIG$v) (call $j) ) ) (module (memory 0) (type $T (func)) (table 2 2 funcref) (elem (i32.const 0) $erase $other) (func $erase (type $T) (call_indirect (type $T) (i32.const 0) ) ) (func $other (type $T) (call_indirect (type $T) (i32.const 0) ) ) ) (module (memory 0) (type $T (func)) (table 2 2 funcref) (elem (i32.const 0) $keep2 $other) (func $keep2 (type $T) (call_indirect (type $T) (i32.const 0) ) ) (func $other (type $T) (call_indirect (type $T) (i32.const 1) ) ) ) (module (memory 0) (type $T (func)) (type $S (func)) (table 2 2 funcref) (elem (i32.const 0) $keep2 $other) (func $keep2 (type $T) (call_indirect (type $T) (i32.const 0) ) ) (func $other (type $T) (call_indirect (type $S) (i32.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $erase-even-locals-with-different-names (type $0) (local $i i32) (drop (local.get $i) ) ) (func $other (type $0) (local $j i32) (drop (local.get $j) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (local $i i32) (drop (local.get $i) ) ) (func $other (type $0) (local $j i64) (drop (local.get $j) ) ) ) (module (memory 0) (type $0 (func)) (func $erase-even-locals-with-different-names (type $0) (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (type $0) (local $j i32) (local.set $j (i32.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (type $0) (local $j i64) (local.set $j (i64.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (type $0) (local $j i32) (local.set $j (i32.const 1) ) ) ) (module (memory 10) (type $0 (func)) (func $erase (type $0) (drop (i32.load (i32.const 0) ) ) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load (i32.const 0) ) ) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load offset=3 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=1 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load16_s align=2 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 1) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load16_u offset=3 align=2 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $erase (type $0) (i32.store (i32.const 0) (i32.const 100) ) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store (i32.const 0) (i32.const 100) ) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=1 (i32.const 0) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store16 align=2 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=2 (i32.const 1) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 101) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (i64.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (f32.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (f64.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i64.const 0) ) ) (func $other (type $0) (drop (i64.const 1) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.const 0.10000000149011612) ) ) (func $other (type $0) (drop (f32.const -0.10000000149011612) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f64.const 0.1) ) ) (func $other (type $0) (drop (f64.const 0.2) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (f32.abs (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.abs (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.abs (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.abs (f32.const 1) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.abs (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.neg (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.add (f32.const 0) (f32.const 1) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.add (f32.const 1) (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.sub (f32.const 0) (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (type $0) (drop (select (i32.const 1) (i32.const 0) (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (type $0) (drop (select (i32.const 0) (i32.const 2) (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 3) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (return) ) (func $other (type $0) (return) ) ) (module (memory 0) (type $0 (func (result i32))) (func $erase (type $0) (result i32) (return (i32.const 0) ) ) (func $other (type $0) (result i32) (return (i32.const 0) ) ) ) (module (memory 0) (type $0 (func (result i32))) (func $keep (type $0) (result i32) (return (i32.const 0) ) ) (func $other (type $0) (result i32) (return (i32.const 1) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (memory.size) ) ) (func $other (type $0) (drop (memory.size) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (memory.grow (i32.const 10) ) ) ) (func $other (type $0) (drop (memory.grow (i32.const 10) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (memory.grow (i32.const 10) ) ) ) (func $other (type $0) (drop (memory.grow (i32.const 11) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (memory.size) ) ) (func $other (type $0) (drop (memory.grow (i32.const 10) ) ) ) ) binaryen-version_108/test/passes/duplicate-function-elimination_optimize-level=2.txt000066400000000000000000000276061423707623100313050ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 0) (func $erase (nop) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (nop) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (i32.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (drop (i32.const 1) ) ) ) (module (type $0 (func)) (memory $0 0) (table $0 3 3 funcref) (elem (i32.const 0) $keep2 $keep2 $caller) (export "keep2" (func $keep2)) (export "other" (func $keep2)) (start $keep2) (func $keep2 (nop) ) (func $caller (call $keep2) (call $keep2) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2-after-two-passes (nop) ) (func $keep-caller (call $keep2-after-two-passes) ) ) (module (type $0 (func)) (memory $0 0) (func $keep-4 (nop) ) (func $other (unreachable) ) (func $keep-caller (call $keep-4) ) (func $other-caller (call $other) ) ) (module (type $2 (func)) (type $3 (func (param i32))) (type $S (func (result i32))) (memory $0 0) (func $keep4-similar-but-func-sig-differs (drop (i32.const 0) ) ) (func $other1 (param $i i32) (drop (i32.const 0) ) ) (func $other2 (result i32) (i32.const 0) ) ) (module (type $1 (func (param i32))) (type $S (func (result i32))) (memory $0 0) (func $keep2-similar-but-func-sig-differs (param $i i32) (drop (i32.const 0) ) ) (func $other2 (result i32) (i32.const 0) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (nop) ) (func $other (nop) (nop) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (block $block0 ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $block0 ) ) (func $other (block $block0 (nop) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (block $block0 (nop) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $block0 (nop) ) ) (func $other (block $block0 (nop) (unreachable) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $block0 (nop) ) ) (func $other (block $block0 (unreachable) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase-since-block-names-do-not-matter (block $foo ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase-since-block-names-do-not-matter (block $foo (br $foo) (br_table $foo $foo (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $foo (block $block (drop (i32.const 0) ) (br $foo) ) ) ) (func $other (block $bar (block $block (drop (i32.const 1) ) (br $bar) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $foo (br_if $foo (i32.const 0) ) ) ) (func $other (block $bar (br_if $bar (i32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (block $foo (br_if $foo (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $foo (br_table $foo $foo (i32.const 0) ) ) ) (func $other (block $bar (br_table $bar $bar (i32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (loop $bar (nop) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (block $foo (result i32) (br_table $foo $foo (i32.const 0) (i32.const 0) ) ) ) ) (func $other (drop (block $bar (result i32) (br_table $bar $bar (i32.const 0) (i32.const 1) ) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (block $foo (block $bar (br_table $foo $bar (i32.const 0) ) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (block $foo (block $bar (br_table $foo $bar (i32.const 0) ) ) ) ) (func $other (block $bar (block $foo (br_table $foo $bar (i32.const 0) ) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (call $erase) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2-but-in-theory-we-could-erase (call $keep2-but-in-theory-we-could-erase) ) (func $other (call $other) ) ) (module (type $FUNCSIG$v (func)) (import "env" "i" (func $i)) (import "env" "j" (func $j)) (memory $0 0) (func $erase (call $i) ) ) (module (type $FUNCSIG$v (func)) (import "env" "i" (func $i)) (import "env" "j" (func $j)) (memory $0 0) (func $keep2 (call $i) ) (func $other (call $j) ) ) (module (type $T (func)) (memory $0 0) (table $0 2 2 funcref) (elem (i32.const 0) $erase $erase) (func $erase (call_indirect (type $T) (i32.const 0) ) ) ) (module (type $T (func)) (memory $0 0) (table $0 2 2 funcref) (elem (i32.const 0) $keep2 $other) (func $keep2 (call_indirect (type $T) (i32.const 0) ) ) (func $other (call_indirect (type $T) (i32.const 1) ) ) ) (module (type $S (func)) (memory $0 0) (table $0 2 2 funcref) (elem (i32.const 0) $keep2 $keep2) (func $keep2 (call_indirect (type $S) (i32.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase-even-locals-with-different-names (local $i i32) (drop (local.get $i) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (local $i i32) (drop (local.get $i) ) ) (func $other (local $j i64) (drop (local.get $j) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase-even-locals-with-different-names (local $i i32) (local.set $i (i32.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (local $j i64) (local.set $j (i64.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (local $j i32) (local.set $j (i32.const 1) ) ) ) (module (type $0 (func)) (memory $0 10) (func $erase (drop (i32.load (i32.const 0) ) ) (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load offset=3 (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 align=1 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load16_s (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 (i32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (drop (i32.load16_u offset=3 (i32.const 0) ) ) ) (func $other (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 10) (func $erase (i32.store (i32.const 0) (i32.const 100) ) (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 align=1 (i32.const 0) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store16 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 (i32.const 1) (i32.const 100) ) ) ) (module (type $0 (func)) (memory $0 10) (func $keep2 (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (i32.store16 offset=3 (i32.const 0) (i32.const 101) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (drop (i64.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (drop (f32.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i32.const 0) ) ) (func $other (drop (f64.const 0) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (i64.const 0) ) ) (func $other (drop (i64.const 1) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.const 0.10000000149011612) ) ) (func $other (drop (f32.const -0.10000000149011612) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f64.const 0.1) ) ) (func $other (drop (f64.const 0.2) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (f32.abs (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.abs (f32.const 0) ) ) ) (func $other (drop (f32.abs (f32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.abs (f32.const 0) ) ) ) (func $other (drop (f32.neg (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (drop (f32.add (f32.const 0) (f32.const 1) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (drop (f32.add (f32.const 1) (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep2 (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (drop (f32.sub (f32.const 0) (f32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (drop (select (i32.const 1) (i32.const 0) (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (drop (select (i32.const 0) (i32.const 2) (i32.const 0) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (drop (select (i32.const 0) (i32.const 0) (i32.const 3) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (return) ) ) (module (type $0 (func (result i32))) (memory $0 0) (func $erase (result i32) (return (i32.const 0) ) ) ) (module (type $0 (func (result i32))) (memory $0 0) (func $keep (result i32) (return (i32.const 0) ) ) (func $other (result i32) (return (i32.const 1) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (memory.size) ) ) ) (module (type $0 (func)) (memory $0 0) (func $erase (drop (memory.grow (i32.const 10) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (memory.grow (i32.const 10) ) ) ) (func $other (drop (memory.grow (i32.const 11) ) ) ) ) (module (type $0 (func)) (memory $0 0) (func $keep (drop (memory.size) ) ) (func $other (drop (memory.grow (i32.const 10) ) ) ) ) binaryen-version_108/test/passes/duplicate-function-elimination_optimize-level=2.wast000066400000000000000000000421701423707623100314350ustar00rootroot00000000000000(module (memory 0) (type $0 (func)) (func $erase (type $0) (nop) ) (func $other (type $0) (nop) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (nop) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (i32.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (i32.const 1) ) ) ) (module (memory 0) (start $other) (type $0 (func)) (export "keep2" $keep2) (export "other" $other) (table 3 3 funcref) (elem (i32.const 0) $keep2 $other $caller) (func $keep2 (type $0) (nop) ) (func $other (type $0) (nop) ) (func $caller (type $0) (call $keep2) (call $other) ) ) (module (memory 0) (type $0 (func)) (func $keep2-after-two-passes (type $0) (nop) ) (func $other (type $0) (nop) ) (func $keep-caller (type $0) (call $keep2-after-two-passes) ) (func $other-caller (type $0) (call $other) ) ) (module (memory 0) (type $0 (func)) (func $keep-4 (type $0) (nop) ) (func $other (type $0) (unreachable) ) (func $keep-caller (type $0) (call $keep-4) ) (func $other-caller (type $0) (call $other) ) ) (module (memory 0) (type $T (func (result i32))) (type $S (func (result i32))) (type $2 (func)) (type $3 (func (param i32))) (func $keep4-similar-but-func-sig-differs (type $2) (drop (i32.const 0) ) ) (func $other1 (type $3) (param $i i32) (drop (i32.const 0) ) ) (func $other2 (type $T) (result i32) (i32.const 0) ) (func $other3 (type $S) (result i32) (i32.const 0) ) ) (module (memory 0) (type $S (func (result i32))) (type $1 (func (param i32))) (func $keep2-similar-but-func-sig-differs (type $1) (param $i i32) (drop (i32.const 0) ) ) (func $other1 (type $1) (param $i i32) (drop (i32.const 0) ) ) (func $other2 (type $S) (result i32) (i32.const 0) ) (func $other3 (type $S) (result i32) (i32.const 0) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (nop) ) (func $other (type $0) (nop) (nop) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (block $block0 ) ) (func $other (type $0) (block $block0 ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $block0 ) ) (func $other (type $0) (block $block0 (nop) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (block $block0 (nop) ) ) (func $other (type $0) (block $block0 (nop) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $block0 (nop) ) ) (func $other (type $0) (block $block0 (nop) (unreachable) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $block0 (nop) ) ) (func $other (type $0) (block $block0 (unreachable) ) ) ) (module (memory 0) (type $0 (func)) (func $erase-since-block-names-do-not-matter (type $0) (block $foo ) ) (func $other (type $0) (block $bar ) ) ) (module (memory 0) (type $0 (func)) (func $erase-since-block-names-do-not-matter (type $0) (block $foo (br $foo) (br_table $foo $foo (i32.const 0) ) ) ) (func $other (type $0) (block $bar (br $bar) (br_table $bar $bar (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $foo (block (drop (i32.const 0) ) (br $foo) ) ) ) (func $other (type $0) (block $bar (block (drop (i32.const 1) ) (br $bar) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $foo (br_if $foo (i32.const 0) ) ) ) (func $other (type $0) (block $bar (br_if $bar (i32.const 1) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (block $foo (br_if $foo (i32.const 0) ) ) ) (func $other (type $0) (block $bar (br_if $bar (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $foo (br_table $foo $foo (i32.const 0) ) ) ) (func $other (type $0) (block $bar (br_table $bar $bar (i32.const 1) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (loop $bar (nop) ) ) (func $other (type $0) (loop $sjc (nop) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (block $foo (result i32) (br_table $foo $foo (i32.const 0) (i32.const 0) ) ) ) ) (func $other (type $0) (drop (block $bar (result i32) (br_table $bar $bar (i32.const 0) (i32.const 1) ) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (block $foo (block $bar (br_table $foo $bar (i32.const 0) ) ) ) ) (func $other (type $0) (block $bar (block $foo (br_table $bar $foo (i32.const 0) ) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (block $foo (block $bar (br_table $foo $bar (i32.const 0) ) ) ) ) (func $other (type $0) (block $bar (block $foo (br_table $foo $bar (i32.const 0) ) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (call $erase) ) (func $other (type $0) (call $erase) ) ) (module (memory 0) (type $0 (func)) (func $keep2-but-in-theory-we-could-erase (type $0) (call $keep2-but-in-theory-we-could-erase) ) (func $other (type $0) (call $other) ) ) (module (memory 0) (type $FUNCSIG$v (func)) (import $i "env" "i") (import $j "env" "j") (func $erase (type $FUNCSIG$v) (call $i) ) (func $other (type $FUNCSIG$v) (call $i) ) ) (module (memory 0) (type $FUNCSIG$v (func)) (import $i "env" "i") (import $j "env" "j") (func $keep2 (type $FUNCSIG$v) (call $i) ) (func $other (type $FUNCSIG$v) (call $j) ) ) (module (memory 0) (type $T (func)) (table 2 2 funcref) (elem (i32.const 0) $erase $other) (func $erase (type $T) (call_indirect (type $T) (i32.const 0) ) ) (func $other (type $T) (call_indirect (type $T) (i32.const 0) ) ) ) (module (memory 0) (type $T (func)) (table 2 2 funcref) (elem (i32.const 0) $keep2 $other) (func $keep2 (type $T) (call_indirect (type $T) (i32.const 0) ) ) (func $other (type $T) (call_indirect (type $T) (i32.const 1) ) ) ) (module (memory 0) (type $T (func)) (type $S (func)) (table 2 2 funcref) (elem (i32.const 0) $keep2 $other) (func $keep2 (type $T) (call_indirect (type $T) (i32.const 0) ) ) (func $other (type $T) (call_indirect (type $S) (i32.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $erase-even-locals-with-different-names (type $0) (local $i i32) (drop (local.get $i) ) ) (func $other (type $0) (local $j i32) (drop (local.get $j) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (local $i i32) (drop (local.get $i) ) ) (func $other (type $0) (local $j i64) (drop (local.get $j) ) ) ) (module (memory 0) (type $0 (func)) (func $erase-even-locals-with-different-names (type $0) (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (type $0) (local $j i32) (local.set $j (i32.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (type $0) (local $j i64) (local.set $j (i64.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (local $i i32) (local.set $i (i32.const 0) ) ) (func $other (type $0) (local $j i32) (local.set $j (i32.const 1) ) ) ) (module (memory 10) (type $0 (func)) (func $erase (type $0) (drop (i32.load (i32.const 0) ) ) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load (i32.const 0) ) ) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load offset=3 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load16_s offset=3 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=1 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load16_s align=2 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 1) ) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (drop (i32.load16_u offset=3 align=2 (i32.const 0) ) ) ) (func $other (type $0) (drop (i32.load16_s offset=3 align=2 (i32.const 0) ) ) ) ) (module (memory 10) (type $0 (func)) (func $erase (type $0) (i32.store (i32.const 0) (i32.const 100) ) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store (i32.const 0) (i32.const 100) ) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store16 offset=3 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=1 (i32.const 0) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store16 align=2 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=2 (i32.const 1) (i32.const 100) ) ) ) (module (memory 10) (type $0 (func)) (func $keep2 (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 100) ) ) (func $other (type $0) (i32.store16 offset=3 align=2 (i32.const 0) (i32.const 101) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (i64.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (f32.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i32.const 0) ) ) (func $other (type $0) (drop (f64.const 0) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (i64.const 0) ) ) (func $other (type $0) (drop (i64.const 1) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.const 0.10000000149011612) ) ) (func $other (type $0) (drop (f32.const -0.10000000149011612) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f64.const 0.1) ) ) (func $other (type $0) (drop (f64.const 0.2) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (f32.abs (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.abs (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.abs (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.abs (f32.const 1) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.abs (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.neg (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.add (f32.const 0) (f32.const 1) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.add (f32.const 1) (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep2 (type $0) (drop (f32.add (f32.const 0) (f32.const 0) ) ) ) (func $other (type $0) (drop (f32.sub (f32.const 0) (f32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (type $0) (drop (select (i32.const 1) (i32.const 0) (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (type $0) (drop (select (i32.const 0) (i32.const 2) (i32.const 0) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (func $other (type $0) (drop (select (i32.const 0) (i32.const 0) (i32.const 3) ) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (return) ) (func $other (type $0) (return) ) ) (module (memory 0) (type $0 (func (result i32))) (func $erase (type $0) (result i32) (return (i32.const 0) ) ) (func $other (type $0) (result i32) (return (i32.const 0) ) ) ) (module (memory 0) (type $0 (func (result i32))) (func $keep (type $0) (result i32) (return (i32.const 0) ) ) (func $other (type $0) (result i32) (return (i32.const 1) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (memory.size) ) ) (func $other (type $0) (drop (memory.size) ) ) ) (module (memory 0) (type $0 (func)) (func $erase (type $0) (drop (memory.grow (i32.const 10) ) ) ) (func $other (type $0) (drop (memory.grow (i32.const 10) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (memory.grow (i32.const 10) ) ) ) (func $other (type $0) (drop (memory.grow (i32.const 11) ) ) ) ) (module (memory 0) (type $0 (func)) (func $keep (type $0) (drop (memory.size) ) ) (func $other (type $0) (drop (memory.grow (i32.const 10) ) ) ) ) binaryen-version_108/test/passes/duplicate-import-elimination.txt000066400000000000000000000005201423707623100255500ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "env" "waka" (func $foo)) (import "env" "waka" (func $wrong (param i32))) (table $0 2 2 funcref) (elem (i32.const 0) $foo $foo) (export "baz" (func $0)) (start $foo) (func $0 (call $foo) (call $foo) (call $wrong (i32.const 1) ) ) ) binaryen-version_108/test/passes/duplicate-import-elimination.wast000066400000000000000000000004351423707623100257140ustar00rootroot00000000000000(module (import "env" "waka" (func $foo)) (import "env" "waka" (func $bar)) (import "env" "waka" (func $wrong (param i32))) (table 2 2 funcref) (elem (i32.const 0) $foo $bar) (start $bar) (func "baz" (call $foo) (call $bar) (call $wrong (i32.const 1)) ) ) binaryen-version_108/test/passes/dwarf-local-order.bin.txt000066400000000000000000000270751423707623100240510ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (memory $0 256 256) (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "foo" (func $foo)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $foo (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 f32) (local $5 i32) (local $6 i32) (local $7 f32) (local $8 f32) (local $9 f32) (local $10 i32) (local $11 f32) (local $12 f32) (local $13 f32) (local $14 f32) (local $15 i32) (local $16 i32) (local $17 i32) (local $18 i32) (local $19 i32) (local $20 i32) (local.set $0 (global.get $global$0) ) (local.set $1 (i32.const 16) ) (local.set $2 (i32.sub (local.get $0) (local.get $1) ) ) (local.set $3 (i32.const 3) ) (local.set $4 (f32.const 2) ) (local.set $5 (i32.const 1) ) (i32.store offset=12 (local.get $2) (local.get $5) ) (f32.store offset=8 (local.get $2) (local.get $4) ) (i32.store offset=4 (local.get $2) (local.get $3) ) (local.set $6 (i32.load offset=12 (local.get $2) ) ) (local.set $7 (f32.convert_i32_s (local.get $6) ) ) (local.set $8 (f32.load offset=8 (local.get $2) ) ) (local.set $9 (f32.add (local.get $7) (local.get $8) ) ) (local.set $10 (i32.load offset=4 (local.get $2) ) ) (local.set $11 (f32.convert_i32_s (local.get $10) ) ) (local.set $12 (f32.add (local.get $9) (local.get $11) ) ) (local.set $13 (f32.abs (local.get $12) ) ) (local.set $14 (f32.const 2147483648) ) (local.set $15 (f32.lt (local.get $13) (local.get $14) ) ) (local.set $16 (i32.eqz (local.get $15) ) ) (block $label$1 (block $label$2 (br_if $label$2 (local.get $16) ) (local.set $17 (i32.trunc_f32_s (local.get $12) ) ) (local.set $18 (local.get $17) ) (br $label$1) ) (local.set $19 (i32.const -2147483648) ) (local.set $18 (local.get $19) ) ) (local.set $20 (local.get $18) ) (return (local.get $20) ) ) ;; custom section ".debug_info", size 120 ;; custom section ".debug_abbrev", size 67 ;; custom section ".debug_line", size 94 ;; custom section ".debug_str", size 201 ;; custom section "producers", size 172 ) (module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (memory $0 256 256) (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "foo" (func $foo)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $foo (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 f32) (local $5 i32) (local $6 i32) (local $7 f32) (local $8 f32) (local $9 f32) (local $10 i32) (local $11 f32) (local $12 f32) (local $13 f32) (local $14 f32) (local $15 i32) (local $16 i32) (local $17 i32) (local $18 i32) (local $19 i32) (local $20 i32) ;; code offset: 0x33 (local.set $0 ;; code offset: 0x31 (global.get $global$0) ) ;; code offset: 0x37 (local.set $1 ;; code offset: 0x35 (i32.const 16) ) ;; code offset: 0x3e (local.set $2 ;; code offset: 0x3d (i32.sub ;; code offset: 0x39 (local.get $0) ;; code offset: 0x3b (local.get $1) ) ) ;; code offset: 0x42 (local.set $3 ;; code offset: 0x40 (i32.const 3) ) ;; code offset: 0x49 (local.set $4 ;; code offset: 0x44 (f32.const 2) ) ;; code offset: 0x4d (local.set $5 ;; code offset: 0x4b (i32.const 1) ) ;; code offset: 0x53 (i32.store offset=12 ;; code offset: 0x4f (local.get $2) ;; code offset: 0x51 (local.get $5) ) ;; code offset: 0x5a (f32.store offset=8 ;; code offset: 0x56 (local.get $2) ;; code offset: 0x58 (local.get $4) ) ;; code offset: 0x61 (i32.store offset=4 ;; code offset: 0x5d (local.get $2) ;; code offset: 0x5f (local.get $3) ) ;; code offset: 0x69 (local.set $6 ;; code offset: 0x66 (i32.load offset=12 ;; code offset: 0x64 (local.get $2) ) ) ;; code offset: 0x6e (local.set $7 ;; code offset: 0x6d (f32.convert_i32_s ;; code offset: 0x6b (local.get $6) ) ) ;; code offset: 0x75 (local.set $8 ;; code offset: 0x72 (f32.load offset=8 ;; code offset: 0x70 (local.get $2) ) ) ;; code offset: 0x7c (local.set $9 ;; code offset: 0x7b (f32.add ;; code offset: 0x77 (local.get $7) ;; code offset: 0x79 (local.get $8) ) ) ;; code offset: 0x83 (local.set $10 ;; code offset: 0x80 (i32.load offset=4 ;; code offset: 0x7e (local.get $2) ) ) ;; code offset: 0x88 (local.set $11 ;; code offset: 0x87 (f32.convert_i32_s ;; code offset: 0x85 (local.get $10) ) ) ;; code offset: 0x8f (local.set $12 ;; code offset: 0x8e (f32.add ;; code offset: 0x8a (local.get $9) ;; code offset: 0x8c (local.get $11) ) ) ;; code offset: 0x94 (local.set $13 ;; code offset: 0x93 (f32.abs ;; code offset: 0x91 (local.get $12) ) ) ;; code offset: 0x9b (local.set $14 ;; code offset: 0x96 (f32.const 2147483648) ) ;; code offset: 0xa2 (local.set $15 ;; code offset: 0xa1 (f32.lt ;; code offset: 0x9d (local.get $13) ;; code offset: 0x9f (local.get $14) ) ) ;; code offset: 0xa7 (local.set $16 ;; code offset: 0xa6 (i32.eqz ;; code offset: 0xa4 (local.get $15) ) ) ;; code offset: 0xa9 (block $label$1 (block $label$2 ;; code offset: 0xaf (br_if $label$2 ;; code offset: 0xad (local.get $16) ) ;; code offset: 0xb4 (local.set $17 ;; code offset: 0xb3 (i32.trunc_f32_s ;; code offset: 0xb1 (local.get $12) ) ) ;; code offset: 0xb8 (local.set $18 ;; code offset: 0xb6 (local.get $17) ) ;; code offset: 0xba (br $label$1) ) ;; code offset: 0xc3 (local.set $19 ;; code offset: 0xbd (i32.const -2147483648) ) ;; code offset: 0xc7 (local.set $18 ;; code offset: 0xc5 (local.get $19) ) ) ;; code offset: 0xcc (local.set $20 ;; code offset: 0xca (local.get $18) ) ;; code offset: 0xd0 (return ;; code offset: 0xce (local.get $20) ) ) ;; custom section ".debug_info", size 120 ;; custom section ".debug_abbrev", size 67 ;; custom section ".debug_line", size 37 ;; custom section ".debug_str", size 201 ;; custom section "producers", size 172 ) (module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (memory $0 256 256) (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "foo" (func $foo)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $foo (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 f32) (local $14 f32) (local $15 f32) (local $16 f32) (local $17 f32) (local $18 f32) (local $19 f32) (local $20 f32) (local.set $0 (global.get $global$0) ) (local.set $1 (i32.const 16) ) (local.set $2 (i32.sub (local.get $0) (local.get $1) ) ) (local.set $3 (i32.const 3) ) (local.set $13 (f32.const 2) ) (local.set $4 (i32.const 1) ) (i32.store offset=12 (local.get $2) (local.get $4) ) (f32.store offset=8 (local.get $2) (local.get $13) ) (i32.store offset=4 (local.get $2) (local.get $3) ) (local.set $5 (i32.load offset=12 (local.get $2) ) ) (local.set $14 (f32.convert_i32_s (local.get $5) ) ) (local.set $15 (f32.load offset=8 (local.get $2) ) ) (local.set $16 (f32.add (local.get $14) (local.get $15) ) ) (local.set $6 (i32.load offset=4 (local.get $2) ) ) (local.set $17 (f32.convert_i32_s (local.get $6) ) ) (local.set $18 (f32.add (local.get $16) (local.get $17) ) ) (local.set $19 (f32.abs (local.get $18) ) ) (local.set $20 (f32.const 2147483648) ) (local.set $7 (f32.lt (local.get $19) (local.get $20) ) ) (local.set $8 (i32.eqz (local.get $7) ) ) (block $label$1 (block $label$2 (br_if $label$2 (local.get $8) ) (local.set $9 (i32.trunc_f32_s (local.get $18) ) ) (local.set $10 (local.get $9) ) (br $label$1) ) (local.set $11 (i32.const -2147483648) ) (local.set $10 (local.get $11) ) ) (local.set $12 (local.get $10) ) (return (local.get $12) ) ) ;; custom section "producers", size 172 ) (module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (memory $0 256 256) (table $0 1 1 funcref) (export "memory" (memory $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "foo" (func $foo)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $foo (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 f32) (local $14 f32) (local $15 f32) (local $16 f32) (local $17 f32) (local $18 f32) (local $19 f32) (local $20 f32) (local.set $0 (global.get $global$0) ) (local.set $1 (i32.const 16) ) (local.set $2 (i32.sub (local.get $0) (local.get $1) ) ) (local.set $3 (i32.const 3) ) (local.set $13 (f32.const 2) ) (local.set $4 (i32.const 1) ) (i32.store offset=12 (local.get $2) (local.get $4) ) (f32.store offset=8 (local.get $2) (local.get $13) ) (i32.store offset=4 (local.get $2) (local.get $3) ) (local.set $5 (i32.load offset=12 (local.get $2) ) ) (local.set $14 (f32.convert_i32_s (local.get $5) ) ) (local.set $15 (f32.load offset=8 (local.get $2) ) ) (local.set $16 (f32.add (local.get $14) (local.get $15) ) ) (local.set $6 (i32.load offset=4 (local.get $2) ) ) (local.set $17 (f32.convert_i32_s (local.get $6) ) ) (local.set $18 (f32.add (local.get $16) (local.get $17) ) ) (local.set $19 (f32.abs (local.get $18) ) ) (local.set $20 (f32.const 2147483648) ) (local.set $7 (f32.lt (local.get $19) (local.get $20) ) ) (local.set $8 (i32.eqz (local.get $7) ) ) (block $label$1 (block $label$2 (br_if $label$2 (local.get $8) ) (local.set $9 (i32.trunc_f32_s (local.get $18) ) ) (local.set $10 (local.get $9) ) (br $label$1) ) (local.set $11 (i32.const -2147483648) ) (local.set $10 (local.get $11) ) ) (local.set $12 (local.get $10) ) (return (local.get $12) ) ) ;; custom section "producers", size 172 ) binaryen-version_108/test/passes/dwarf-local-order.passes000066400000000000000000000000641423707623100237460ustar00rootroot00000000000000g_print_roundtrip_print_strip-dwarf_roundtrip_print binaryen-version_108/test/passes/dwarf-local-order.wasm000077500000000000000000000020371423707623100234240ustar00rootroot00000000000000asm``p€€A€ˆÀ A€ 1memory__wasm_call_ctorsfoo __data_end º ´}}}#€€€€!A! k!A!C@!A!  6  8  6 ( ! ²! *!  ’! (! ²! ’! ‹! CO! ]! E!@@  ¨! !  A€€€€x! ! !  „ .debug_infot •™´´íŸµi‘ ½i‘¿p‘Çi¹ÁQ .debug_abbrev%.@: ; I?4: ; I$> j .debug_lineZû a.c 1 uu uº ttº tx+(xº(JÔ .debug_strclang version 12.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 93ec6cd684265161623b4ea67836f022cd18c224)a.c/home/azakai/Dev/emscriptenfoointxyfloatz name__wasm_call_ctorsfoo¶ producerslanguageC99 processed-byclang†12.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 93ec6cd684265161623b4ea67836f022cd18c224)binaryen-version_108/test/passes/dwarf_unit_with_no_abbrevs_noprint.bin.txt000066400000000000000000000000001423707623100276660ustar00rootroot00000000000000binaryen-version_108/test/passes/dwarf_unit_with_no_abbrevs_noprint.passes000066400000000000000000000000141423707623100276030ustar00rootroot00000000000000roundtrip_g binaryen-version_108/test/passes/dwarf_unit_with_no_abbrevs_noprint.wasm000066400000000000000000002605711423707623100272740ustar00rootroot00000000000000asmpA€€À A€€À A€€À %memory __data_end __heap_baseÅÙ .debug_info·9M~'2~E<…‹5 ’^’- –‹)‘ŠÖš¢úó‘ýÌŠÖÌ… ÿ|ˆŽ “ò‚# £ÿ¯ð)þ9ÝLÝNÝ ¬8ªqa#ÝLÝNP£ÿ¯ð) GÝLÝN¢!ÝLÝN¦¢«è²ÇOŠÖß²0Ç`qÖÏØŠÖ qÖ[ _,/ ŠL 2 7 = D…peÝŒj‘pƺ¾ üËÝÒkÖ #ËÝÒ‡ÝÖ lËÝÒ£ÂÖØêÒÖÒÝÝÖ+ÒÂÂÖw{‘Á÷Å‘ÑÛìŠâ3çDâŠÖç{ŠŠÖ Š%  !нº÷~¡¬~ŠW~¾w~~Ò´~m~íø~zAÁæ 3> qgÝ~OZ~Ç“~lw~ݨ~‰”~^¬~¦±~ßjVH¢~¡~0;~ã~MX~k ¦èŠ ì ÷Ûè •â¸çÉâ Öç {Ö²òâç&âEÖç{EEÖÏwÖ[,/~{~ *8(4òP‰ ¹({IdŠ… j p uJ:C‘Z^• mæØÚáÚ¤Qsužˆs{¡ž{Åz• ÚŒ‘¡•Ú‡:C‘~~~ ~)UN:GC‘C~Yd~ò]‰ŽfM¦w¡©²¹¼¿þ¼IÐS–Ý ãêí0 ÷; € ‹ Ð Ö  Îð ÖGÛGáGMNæ+3Q9èBèM~Š• ‡ ŠJ ‡ % 2 ; E{‘I O X m ’„!‰ËŽË w | … é (w m } Þ } mÑ K ç É w  Ú Þ Ú Ñ þ ç ¥ (w Í : Þ : ÍÑ ^ ç ]0w —  } Þ }  — Ñ K ç Õ0‹— Ñ g(Ú?Ñ K ç RÓ $(P?Ñ ^ ç `Ó Í$ ?Ñ þ ç YÓ Õ w ?· R?Ñ RÓ s w ?· Y?Ñ YÓ O w ?· `?Ñ `Ó   w nÑ nÜ5ŠK ; @ F="\ýÆ9"â0 2XÆâ;"1.[[Ñ (w u· -uÑ -Ó F w ”G”Ñ GÜ! w ý· NýÑ NÓ Á± w [ ¹  a  =  ¼ ÿ({‘}Üë(y‘“ ‘ÞÖ$Î%}܇É!˜‘Ÿ‘ «}²‘¼?{DøÓ Rø!*ÿøPÆž!*ÿžPˆ0´Ë‡Ø9ë‡0{ÿ90{3- ž‘“ ‘! y(@‘I‘ W‘^Gž‘“ ‘f‘m‘ Õ {°øÜ® y‘“ ‘(ÖÎøÜ D 7‘w ?ô  „# ({¨ ;  ï  ¨ ¢“ Ç ŠÖÞ µè·gΊÖgÜ:¢Ü“ ÜÇ" ñÖÏ— ¬Ö±-ÖÖÇ,Ö)[ÖÅ%ÖY&wÖÛ¾ ‰ Ëâ¬ ç½ âK Öç{K K Ö§ æ Ë â ç â þ Öç {þ þ Öƒ F Ëâi çz â^ Öç{^ ^ Ö;³ K } K 9Û Ëâþ ç âgÖç{ggÖW8 Ëâ[ çl â—Öç{——Öê• Ëâ¹ çÊ â‘Öç{‘‘Öìó Šâ ç( âŠÖç{ŠŠÖ ² {^ ¤  q ‘ } Ë$ ½ ) Ä . × 8 ê  $ ) {}. {}8 {þ ƒ @ } ' u ‘Šb  $ B  M  S  ]  . pŠ‘ x „G Ë9Á ?ê CE9{}ç }ï } ?{}ç }C{} E[6£ –` Ji^S!²+!~4w´¸Îƒp[, ~¾,/ $žä¸/¯ð˧¬ §¬{‘¿}ĈÊËÐnûnõzËÚºÝÍãàíçÚ{‘Ý{‘ ã íØÒåàîʃ݉ V4ÊË¿}Ĉ0û‰ Љ –`øÈ ~¾((-Û2«ÒªÝ~æ¡Bï-œ tx!²+!~4˜œ¥!²+!~4èì¢Ç3 “%˜%ñ%@œ%GŸ%GC‘8 Þ®%G0³%‘<ÇU ï%¨% ¡G¢%G/G¥%G ¹%ƒ&@œ%GŸ%GC‘8 Þ®%G0³%‘<Çf wï% M&æ&@ß&¢((²ŠÖ"ËÉ 3"ËÉ"ËÉ"ËÉ"ËÉ"ËÉÉQó {Gç Nï N ã ë ~^˜~~rÚ~ ~~~¡P~~µ‹~~É?~~Ýý~J:C‘×~u~‡:C‘"ŠÉ~U”~~i~~í~†è~~š~~®!~~Âÿ~~Ö#‘~~êÞ~~þ(~"Š$É~ .~Š?=G"‘ÉLy~\g~}®~¡~‚}~–Ã"ŠÉÈ~¬·~.~ÉÔ~˜áÝ8ɰøH%«&Ý {'&Ý~Ý~~0;~Éú~MX~è]~ju~~&"~Ž™~Y~«¶~G}~ÈÓ~N‚~åð~2¤~ ~È~*~½ø~ë~EP~‘~l~kv~KW~ˆ“~\ Ÿ~¥°~' Ã~ÂÍ~q ã~ßê~þ ~ü~^ ~$~u W~6A~}~S^~Ï W“#–:ŽC‘!Š8:µC‘Æ:ÜC‘ñãÏ÷z(g&å&-`ñÿ~"-~6²¡›~HS~!Ê~ep~ËÐ~‚~Æ~Ÿª~â¾~¼Ç~2V~Ùä~~ö~Ú Ê~~mû~0;~} L~MX~— {~ju~ͬ~‡’~: ÷~¤¯~[(~ÁÌ~K ?~Þé~gX~û~³ o~#~W÷5¯&œ~GR~D QW~mx~?ˆ~Š•~ž¥:¼C‘}‘~ÎÙ~ÿ®~ëö~vã~~¨˜~%0~3½~BM~ÿá~_j~ç ~|‡~?~™¤~ŒO~¶°~~Ê‘~~Þé~¨Î~û~4) ~#~Ø ~5@~‘!~R]~P#~oz~Z$~Œ—~> %~©´~€&~ÆÑ~¨&~ãî~~ò&~ ~Þ'~(~U ('~:E~f a'~Wb~Ýš'~t~æ¥'~‘œ~ïÈ'~®¹~ü'~ËÖ~'(~èó~uI(~~e(b(~)4~=m(i(~MX~av(r(~q|~…({(ñ„(òÏ()))O %) 2)F@Z) M)@)f4hG){ËŠ¿) «) ´)~¨~»“¦…Œj‘pßw{‘mË)f*~'<~¦wg*b*t [,/~l™Bu*„M~'2~O0,‡*‹*Ž*”*, n·*‘Ö,/ À3·*‘òÖÄ2 ÿ3·*‘Ö·*_½*Þê+êŠÂ*Å*/¼+BÂ*{f(Å*{V¼+{}3в+ Ì* Õ* æ* ø* + + '+ 1+ B+ M+ [+ f+ s+ + ˆ+ ’+ ž+ ¤+¼+ b*V·*Om,/ÜŠI- ?- D-™25l@r@Ió F=F)r@pÓLNL)r@—rQ9aë]ó] 'chcë]ó] uc”/(0Ô0/ß/á/ß" –Ö// ß/ª@–µ9¤@‘ó‘ ¨@{@œE¶4\¢ -Ö„K¶4\¢[ \ÖP¶4\¢“ ÖO xV™={C;™={`;™={};ø[*²T*~]+ÖŽ**²T*~]·*Ã+*²T*~]vÖ_*²T*~]b;*²T*~]O þ?@ {|s,~,¦.†,É3.§—ÖÆ-Ò3Ö,” ª——Ö2†,4.§Ö1 Ò3Ö,”ªÖÖ,-Ý,  .–./â5°4""Ös6°4{{Ö:°4ÔÔÖ·: °4ú5ú5Ö33@3 Ê3q4–,Ó4{x 7<2={u7ç ~7ï ‡7þ<ë7 £=™={.8ç u7ï .8þ<‡7 ¹=78ø=ë7™={ ç Z&¶4Rx,TƒT?2¡¢TRR\RÇRù:ñS|4ðTúTþT;UO HURU\œ\U°UÇU¼ô$VVÍUÑU·&%X-Xß ziZS:vX{v [[{ƒ “iŸië]ó]¹ lÁi«i.,|4Å,‘,–, œ,Ó4»4{;;{¥Ê+ü;<{Ó,CR{Ó,@@{¥@{¥D`{¥ i` Ù`;¹Q{¥ée{/Š]u Gu Ou TuS: vX[[ [Úd_ g_¶c½cÊcÂcù>ûcôcËed)dŠ 5d?d®  IdËWd˺ddЍd±dÁ õd{¥… ‡rõ@Èsè,3D3 0Ð3C•4›4{‘ç EXµ9ä_Û ËÇ_ÿ Ó_ Ç_{‘ Ó_¾3Z4 - ËÃ3{ :4Ž B4• I4œ S4£ Ã3 {·  :4  B4  I4 S4 {h4*4)h4ï3Õ Ã3á Šö3= ÿ3P  4n 4 !4” %4² ö3{h4ÿ3{h4ç h4  4{Š4{h4!4{h4ç h4 %4{н;… „? r O [HQ{7HQ{7Ѝ% Ã3 u "u $ |4ƒ4‰4d4Ýù]Â^÷ W!ÖÞb«!Ööh/ "ÖÄk K^"Ö§tg½"Ö{@—^;!W!ÖŒb!«!Öˆhî! "Öbk B"^"Öt¡"½"ÖO u>)y>\>,µ>p½>?{ø/{Y ¥X(×6q'nX² ¶4¢qXœä,–,µ5¶45Ö,§eÖR55Ö,”ª—eÖd6¶445Ö,§ÝÖ=65Ö,”ª³ÝÖì9¶4e5Ö,§-Ö›95Ö,”ªÏ-Ö?A5Ö,”ª? Öü455‘ 5‘S:[:{/vX˜;–,ÄQO ÉQ™={ð:dZ5XÇGZ |4Ë Z  Z†; o9¡6‘®6/·6¨†8 ¾65Ï6Ï—7$×6™#ø6ö# „7S$T7©Ë7Í7à7{7{öO <=™= {8ç y ï 8ü=™={]8??©D?[™={ç ;$;‘q;‘–;‘¹Q{, ü;<{³O ÿQR\èR-:RÆéKR@@{ß+@{ò…¡ZE £ÒZ–.ùZ >[¡Zv ?v[q[‚ËF[¥¼+¬ F[¼+{Ó/\£=\  ¾\{\­\×;‹ˆ(º\Æ\%f6Ù\þ\{«0üstë]ó]Õ Ät]]] ]z EF]@]{aç a|“%â]O u>æ]ë]-ó]e ä^¶cºcÓc® dÁ $drdÔ Æd ñdõd{= +f2fë]ó] [iž*…’- –J)‘ŠÖK9 –…)‘VÖa8 –À)‘tÖK7 –û)‘ÖšS –6)‘Ž/Öš¢+ó‘ýÌŠÖÌ9¢Ró‘ýÌVÖÌ#8¢yó‘ýÌtÖÌ)7¢ ó‘ýÌÖÌ^S¢Çó‘ýÌŽ/ÖÌ…‹5 ’ä,¤C¢C-Ö”A$€@‡@ª--ÖìH¢7C\ÖDF(€@‡@ª\\ÖN¢SC%ÖUL€@‡@ªÖcY¢oCXØÖ«X0€@‡@ªØØÖ|ˆâ]¸q ml?C‘r L<#NŽeqŽo^q‘r L<#Nq¢îr L<#N.+o£À@¯b2) Ö@Gã@Œr L<#N.m@ª”/aÉ@r L<#N¦¢«è²ÇOŠÖç8²n5ÇÐVÖû7²Ý5Ç¿tÖ7² Ç®Ö8S²;Ç6Ž/Ö†p²·@Çz”Ö(ŠB²¬9¼ÖŠG²å9Ö]M²÷9nÖùX²;ÇÖf²W@¬1ÖÏ 7ÖÎ7tÖ»8VÖ±R/ÖÄ7ÖC¼Ö9HÖíMnÖ SŽ/Ö8Z†;Ö,YÇÖHf†@Öp”Öñ+ŠÀ!å{ÝÝÖËï+!{ËÝÖËï+Œ?Ë;!`{Ù Ù ÖËï+!{ËÙ ÖËï+7@’˶!Û{ÓÓÖËï+!{ËÓÖËï+ä,é,-µ{8?µë–TµÚÄZ¦Z!ÝÖ6]µ!ð,õ,ÒŠŠÖŒ--¾ÒöÖ3-ÒÚÛ3Ö!-ÒÛ3Û3ÖO-ÒÖÁ0-¾Ò9­Öe0Ò­­Öm4d4ݤ4d4ÝÂ4Ò//Ö%5ÒeeÖ.6ÒÝÝÖw9Ò--Ö&?Ò‘‘ÖEÒ# £9ÖŽDÒ£9£9Öå@ÒÖØJÒw Ü9Ö&JÒÜ9Ü9ÖPÒ¯ î9Ö}OÒî9î9ÖÔYÒç 'ÖžYÒ''Ö°ZÒ¡;¡;Ö&]ÒËËÖX^Òå(å(Ö"^Òs! =Ö ^Ò = =Ö&bÒ ) )Ö¢a -¾ÒÒ!þ)ÖgaÒþ)þ)ÖhÒ¸*¸*ÖJgÒ&"+ÖðfÒ++Öìj Òs+s+ÖHj-¾Ò…"Ñ+ÖýiÒÑ+Ñ+ÖGtÒV,V,ÖtÒë‘ÖÛ/ë"Šâ#ç#âÖç{Öi3 H#Ëâk#ç|#â r Öç {r r ÖÜ6 ¥#ËâÈ#çÙ#â Öç {Ö`7$Ëâ%$ç6$âÖç{Ö‹7_$Ëâƒ$ç”$âËÖç{ËËÖê½$Ëâá$çò$â‘Öç{‘‘Ö ?%Ëâ>%çO%âf6Öç{f6f6Öìx%Šâœ%ç­%âŠÖç{ŠŠÖTQ0âà%â”ÖuQ0â&â§Ö—Q0â0&âÖŠÓQ â çhT f&Ëâ‰&çš&â Ù Öç {Ù Ù ÖôUÃ&Ëâæ&ç÷&â;Öç{;;Ö‚Y 'ËâC'çT'âÅÖç{ÅÅÖMX}'Ëâ 'ç±'â¼ Öç{¼ ¼ Ö9Ú'Ëâý'ç(â×;Öç{×;×;ÖW7(ËâZ(çk(â<Öç{<<Ö\ ”(Ëâ·(çÈ(â |Öç {||Ö3^ñ(pâ)ç&)âW!Öç{W!W!Öš_O)Ëâr)çƒ)â”Öç{””ÖÚa¬)ËâÐ)çá)â«!Öç{«!«!ÖFa *Ëâ-*ç>*âÖç{Öƒeg*ËâŠ*ç›*â7Öç{77ÖžgÄ*Ëâè*çù*â "Öç{ " "Ö°f"+ËâE+çV+â‹Öç{‹‹Öj +Ëâ£+ç´+â ^"Öç {^"^"ÖÌiÝ+Ëâ,ç,âBÖç{BBÖ·i0âD,âøÖ'tb,Ëâ†,ç—,â½"Öç{½"½"Ö…peÝü; <<p<Ë[V4ÊË¿¦Äˆ0û±$б$–Œ.ø/ ~Í7(,/ $ž-¸Ê-¯‹-˧¯-¬¶- §¬{‘¿¦ÄˆÊËÐ .û .õ.ËÚU.Ýh.ã{.í‚.Ú{‘Ý{‘ ã íS*²T*~]ØÒ¢7à«7ʃ݉áƒà;[+(~Í7 :¢™7“ ™7Çòª.Ö˜œ¥*²T*~]€<*²T*~]ØR*²T*~]µ/ÖÍR*²T*~]N[*²T*~]wõ>{pÁ÷Å‘Ñl%I º[¡[0©[Î'±[.< ’„f6‰ËŽË tx*²T*~]õ\*²T*~]Ò0Öñ\*²T*~]“%˜%:_@ß&1ñ%@œ%pŸ%pC‘8 l1®%p0³%‘<Ç~;ï%¨% ¡p¢%p/p¥%p(-df2`@ÇiÛ2Ý1Òª~i@¡Br@-,,œ, º¾ ùlËÝÒÝ2oÖ üËÝÒù2Ö †n ËÝÒ3r Ö ín ËÝÒ13<#ÖØrlÒooÖêÒÖ]n Òr r Ö®n Ò<#<#Ö 'uB(>u1+uÿÿÿÿ10u16uÎÎ+~3š3~|<~¬3·3~vP/ò /.q«,-~ë3ö3~è2¤2\1~4%4~r M3~74B4~<#Œ3~¡~]4! ~… Ö3"Š2}43~4h4~~‡~ª4U~~¾4M ~~Ò4ž ~~æ4h~~í~5º~Iz5\Ù4~)5Ö~¢G6~F5r ~~Z5ò~ûº9V•8  É6™5Ä6 É6dÍ<[7i<‘¸u<p/t§7~ï5~m: {{ç ‰~!6º,~~56@6~0;~R6]6~f6ʇ:C‘~6˜6~|K;~ª6µ6~”i;~Ç6Ò6~”|;~ä6ï6~§¢;~n ~ 77~7Ó;Æ Â;~07;7~Ëå;~M7X7~Ó <~j7z~B<‘^<§5Ú<÷,`ª.ãÈ.Ï´7z(g&¢7&7ª.ÿ:™7C‘g=~ý7þ~¨C=±$x=~#8³~/¯=@8Ú=5½=~R8-~f8:>Ï>~x8²~~Œ8%~~ 8[~~´8¿8~à?:Ý8C‘r ¾?~ï8¼~~90~~9~~Ã~49*~~H9†~~\9Ù ~~p9V~~„9#f(~~˜9|~•D¼BŒ@:C‘q4Öî€IÝFGöNnÏL~ :O~~:v~~1:~~E:ö ~~Y: ~~m:Ê%~~:ò%~~•:&~~©:~~½:f6~~Ñ:º~~å:Ê~B&ÚQ½SŽ/èR~;þ~(;ÖU'3T~8;È~I}V~U;Û~púV~r;î~—ŸWýZÇÈXõ~XݨZ~³;¾;~Ç;Ü['&Î;50Ä[æ.#–:þ;C‘f6Š8:%<C‘a-^0›~©:~I<~~]<à~~˜9~z<~~½:~—<&~~«<#Ý~~¿<Ê<~ˆ(]~Ü<ç<~±$®]~ù<=~ø/Ë]^{pç p~4=?=~û0F_~Q=\=~œ v_~n=y=~C)©_~‹=–=~¬~¨=³=~Ï þ_~Å=Ð=~¼ *`~â=í=~0~ÿ= >~ L`~>'>~ u`~9>D>~ò–`~V>a>~ß»`~s>~>~ ä`~+ ~™>¤>~Va~¶>Á>~Oa~“~Ô~å>ð>~ßÜc"Š}4~??~ò d~,?7?~ d~I?T?~Ód~f?q?~z?e7e~l~•? ?~h4:e~²?½?~Õ Te~Ï?Ú?~· ge~ì?÷?~[*œe~ @@~, Äe~&@1@~? òe~C@N@~Ó,f¬1lfÊ1áû1°{@H%Ý13@9f(w3w~£@®@~ r”‚oæÚm;2}4 ‰2}4 °2}4 r.¿sÄ{Ar.¿sÄ™rË¢r˪rZB/írpB45s‘4>£ManuallyDrop>qLeafNode<(), ()>gResultŠu8ÿ*const alloc::collections::btree::node::InternalNode<(), ()>‘usizeÝ()ßUtf8ErrorMaybeUninit<()>ˆAlignmentEStringOPhantomData2&mut alloc::string::String*const u8¦vtableÂBoxedNode<(), ()>ø!±&core::str::Utf8Error‡ManuallyDrop<()>^VecZ&core::alloc::Layout´LayoutErr!Unique>‹RawVecwErrorAInternalNode<(), ()>kManuallyDrop0*const alloc::collections::btree::node::LeafNode<(), ()>ÌGlobal>MaybeUninit>¬&u8òNodeHeader<(), (), ()>Optionw&()ðMaybeUninitu16”&alloc::vec::VecúUniqueÇLayoutG»n &&[u16];&u16æOption)&[u16]IPhantomData<&()>d&&[u8]ò&[u8]G*const u16EDemangleStyle‰Option¹OptionCppSymbolkc_voidÒPrintFmtSymbolNameX*mut core::ffi::c_voidu32ÅDemangleYvtableÚ&strÉ) Ô&core::task::wake::Waker‘SplitInternalvMultiCharEqSearcher<&[char]>g&char(CharPredicateSearcher&core::char::EscapeDefaultbool~SipHasher24°&core::char::EscapeUnicodeState#&core::ffi::VaListImplg&core::fmt::Arguments-FormatterJ&mut core::fmt::builders::PadAdapterStateÍMap PhantomData<&u8>‰ OptionS&&str˜NoPayloadæ&core::task::wake::RawWakerVTablenCountê&core::char::EscapeUnicodeÚFlattenCompat, core::char::EscapeDebug>^ EscapeDefault&[u8; 200]u&i64âFlatMap•&&[char]b&*const ()]&core::iter::adapters::chain::Chain>, core::iter::adapters::flatten::FlatMap>þ EscapeUnicode‹FlattenCompat, core::char::EscapeDebug>-LinesAnyMapÆArgumentNUnsafeBytesToStr2FloatErrorKindñArgumentV1Ì&core::char::EscapeDebugé&core::iter::adapters::Map, core::str::LinesAnyMap>FlatMap&core::iter::adapters::Map[Iter6&core::panic::Location¤&core::iter::adapters::Cloned>Map+*mut u8NonNull¹&unsafe fn(*const ())$&core::char::CaseMappingIterÑ&core::hash::sip::HasheräPositionîfn(&core::fmt::Void, &mut core::fmt::Formatter) -> core::result::Result<(), core::fmt::Error>qvtableX&core::option::IntoIterÉRawWakerVTableö&core::str::pattern::MultiCharEqSearcher<&[char]>3 PhantomData<&mut &core::ffi::c_void>af32Í&core::char::EscapeDefaultState— IntoIter´&core::hash::sip::HasherVoidA&&AnyHasher>FlatMap‡&core::str::Charsv&core::num::IntErrorKindmMapPChain>, core::iter::adapters::flatten::FlatMap> PhantomData<*mut Fn<()>>\ CharErrorKindå&core::fmt::VoidX&&[u8]€HasherSplitž&[char]}charGu64p&u32œ&unsafe fn(*const ()) -> core::task::wake::RawWaker[&mut core::ffi::VaListImpløIsWhitespaceè&[u8]ÈIter?Chars°SplitInternal¡Location&core::str::pattern::StrSearcherImpl0&core::str::pattern::TwoWaySearcher &core::hash::sip::StateGIsNotEmptyuNonZeroUsize!&strÆFlatten>&mut core::fmt::FormatteruSplitTerminator&core::fmt::ArgumentV1’&core::option::OptionDecimal…f64&&core::task::wake::RawWakerVTablegIsAsciiWhitespaceX&f32: Option' EscapeUnicodeState4&[usize; 3]p&[&str]-*mut Fn<()>-&&core::panic::LocationÿEmptyNeedlez&core::iter::adapters::flatten::FlatMapFlattenCompat, core::char::EscapeUnicode>Ç&core::iter::adapters::chain::ChainState¼*const charNi16*&core::num::flt2dec::decoder::Decoded &boolMap, core::str::BytesIsNotEmpty>, core::str::UnsafeBytesToStr>P&usizeLPadAdapterStateïunsafe fn(*const ()) -> core::task::wake::RawWaker“Arguments˜WakerRCharEscapeDebugContinue™&core::num::dec2flt::parse::Decimal¨Map, core::str::LinesAnyMap>«RawWaker¶&u64E&core::marker::PhantomData(u64, i16, i16)#&core::iter::adapters::Filter, core::str::IsNotEmpty>ŒCloned>&core::str::Linesf PhantomDatawSip24RoundsŽ*const &str^&core::option::Option<&core::fmt::Arguments>·&mut core::fmt::builders::PadAdapter”SplitDMultiCharEqSearcherx&[u8; 4]Ý*const ()2ChainStateWVaListImplPFlattenCompat, core::char::EscapeDefault>Ï Option<&core::fmt::Arguments>unsafe fn(*const ())&core::option::OptionU PhantomData&i8—&[core::fmt::rt::v1::Argument]—&core::iter::adapters::flatten::FlatMap=i32ª&core::iter::adapters::flatten::FlatMapÖ&core::ptr::non_null::NonNull&core::iter::adapters::flatten::Flatten>|&f64(&core::marker::PhantomDataÚ Option4Linesu CaseMappingIterM&core::str::pattern::EmptyNeedleµ*const core::fmt::rt::v1::Argument½Decoded@&core::iter::adapters::Map, core::str::BytesIsNotEmpty>, core::str::UnsafeBytesToStr>î&core::hash::sip::SipHasher24&Anyu&core::iter::adapters::MapÜ*const core::fmt::ArgumentV1/FormatSpecÓ&i16¨StrSearcherImpl5&core::ffi::c_void, Option<&[core::fmt::rt::v1::Argument]>ð&core::num::dec2flt::FloatErrorKindÞCharSearcherR&core::marker::PhantomData<&mut core::ffi::VaListImpl>Sip13Rounds" PhantomData<&core::fmt::ArgumentV1>`CharEscapeDefault.PadAdapterq EscapeDefaultState“&core::char::convert::CharErrorKind¾&[core::fmt::ArgumentV1]&core::option::ItemÞStatenBytesIsNotEmptyi8`&mut WriteÙ&core::str::CharIndices³ Itemj&core::option::Option;*const core::task::wake::RawWakerVTable~i64ýFilter, core::str::BytesIsNotEmpty>YCharEscapeUnicode4&i32K EscapeDebug3TwoWaySearcherKIntErrorKind,&mut &core::ffi::c_voidç Option¯&core::slice::Iteró&core::num::NonZeroUsize;&core::option::Optionä&core::iter::adapters::MapD PhantomData<&mut core::ffi::VaListImpl>ØFilter, core::str::IsNotEmpty>} Optioné&&core::fmt::ArgumentsÿCharIndicesy¶(õ¨&core::alloc::LayoutzFallibilityFAlignedBytesßNonZeroUsizefGroupvtable»Layout+«)q<ParseIntError'vtable6G*BÚUnsafeCell¸*Option>>>`@&core::task::wake::Waker£9*mut alloc::sync::Arc>>>z?&std::net::tcp::TcpListener~7&mut usizeç<&core::option::Optionîclosure-0zclosure-1òFilePermissionsÜ9*mut alloc::sync::Arc>>>>13ManuallyDrop>BThreadInfo?Root>C;&std::io::lazy::Lazy>>> .Countÿ3&mut std::io::stdio::StdoutLock^"RefCell>öVecÏ FromBytesWithNulErrorKindœ JoinPathsError Key>>>X7&std::time::SystemTime0Buf+Uniqueç UnsafeCell>4&std::sys_common::remutex::ReentrantMutex>>>2AtomicIsizeÏUnsafeCellÚ?&std::path::PrefixComponent};&std::io::lazy::Lazy>>>VErrorKindh4&std::ffi::os_str::OsStrs!UnsafeCell<(u64, u64)>oBoxedNode>Ý2ManuallyDrop>>òIpv4Addra-ArgumentÐPhantomDataª.ArgumentV1p/&mut FnMut<(&mut core::fmt::Formatter, backtrace::types::BytesOrWideString)>ò%Option³UnsafeCell<()>q?&&std::net::tcp::TcpListener9UnsafeCell>>!UnsafeCellûRawVec.<&core::panic::LocationIMutexBufReader>ÀRawVec˜6&alloc::string::String® in6_addr;2MaybeUninit>>v Condvar¡;*mut ().,Option-Position~>&std::sys::wasm::fs::DirBuilderGArc>>>«7fn(&core::fmt::Void, &mut core::fmt::Formatter) -> core::result::Result<(), core::fmt::Error>*Permissions£@vtable&"UnsafeCell>>? UnsafeCell>>û1RawWakerVTable‹NonNullöUnsafeCell>V,Option>u7&backtrace::print::PrintFmtB"UnsafeCell>>>-CaptureáPhantomData<*mut Fn<()>>¢7&core::fmt::VoidàPanicPayloadö#OptionLazyKeyInner>>>ÎCustomï6&std::process::ChildStdout®@&alloc::collections::btree::map::BTreeMap>ßFileType“ Cell<*mut alloc::sync::Arc>>>>æInternalNode>PoisonError<(std::sync::mutex::MutexGuard<()>, std::sync::condvar::WaitTimeoutResult)>†ResultD>&std::sys::wasm::fs::FilePermissions=&core::num::NonZeroU64"MutexGuardð:&mut core::option::Optiony=&core::option::Option<&Error>‡7&mut backtrace::print::BacktraceFmt78&&backtrace::backtrace::Frame;!UnsafeCell>>· PrefixComponentC)Option<&Error>Ä7&core::fmt::ArgumentV1+Write0Utf8Errorn&mut alloc::vec::Vec@&std::sys::wasm::process::ExitStatus‘AnonPipeà;&[&str]R/*mut Fn<()>¤>&std::io::error::ErrorKindR Stdio2&mut std::io::Write::write_fmt::Adaptor>§5BacktraceFmt DebugHelper )Option>>>æ.ArgumentsÁ>&alloc::boxed::BoxÊ1Waker "Cell>>ÇUnique>>Z&OptionPhantomData>>>>>îUnique>>Ý1RawWaker¬1Contextî9*mut alloc::sync::Arc>>>˜;BoxS$Option‰2MaybeUninit7&std::path::Path•Arc>>>å(Option>ßIpv6AddrÆInstantILazy>>>µ/FnOnce<()>§ChildStdoutÎ'Option<&core::fmt::Arguments> AtomicBoolîArc>>>> Unique¿8&[std::ffi::os_str::OsString]<&[core::fmt::rt::v1::Argument]PanicPayload<&str>zCache7&&std::path::Path¼AChunk…RawVecòStderrLockEAtomicPtr<()>ÏVec ResultÔMutexGuardÑ+Option™5Frame0&Anyn5*const std::backtrace::BacktraceFrame”&Error-Mutex>>ReentrantMutex>>™7*const core::fmt::ArgumentV1%PhantomData>>>>ƒ RWLockÊ-FormatSpec­LineWriter>¼ CStringY3Ordering50PanicInfoˆ(OptionÝ8*const std::ffi::os_str::OsString\ReentrantMutex>>>þ)Option>eBarrierStateADlmallocvError/LazyKeyInner>>>ðATreeChunkgB*mut dlmalloc::dlmalloc::ChunkW!Cell<(u64, u64)>nArcInner>>>÷9*const alloc::sync::ArcInner>>>À3&mut std::io::stdio::StderrLockb2MaybeUninit;*const alloc::boxed::Box>Í7&[core::fmt::ArgumentV1] StateÜReentrantMutexGuard>>”ChildStdin“B*mut dlmalloc::dlmalloc::Segment BTreeMap>¬9*const alloc::sync::ArcInner>>>Ë Cell>UBorrowMutError3ManuallyDrop}B*mut dlmalloc::dlmalloc::TreeChunkÓ,DurationŽ/Box>{UnsafeCellû0SipHasher13= TcpListenerÕ PrefixPhantomData>>>>@6&std::process::ChildStderrú5(std::sync::mutex::MutexGuard<()>, std::sync::condvar::WaitTimeoutResult)XPhantomData>¡"UnsafeCell>>¨Vec'Option =(u64, u64)¢Mutex<()>”LeafNode>·&Option«!RefCell>>{UnsafeCellN@&core::time::Duration;unsafe extern "C" fn(*mut u8)!UnsafeCell>>>>xMutex÷,Formatter×;&core::fmt::Arguments\=&std::sys::wasm::os::JoinPathsError+Option>M AccessError±$OptionVec]6&&strº,LayoutErri@&core::task::wake::RawWakerVTable½"Cell?&std::net::ip::Ipv4Addr·3&mut std::io::Write::write_fmt::AdaptorvHook[ Cell<*mut alloc::sync::Arc>>>>>%4&std::ffi::os_str::OsStringµ6&&ErroraAtomicU32yUnique5&std::sync::mutex::MutexÒ6&std::process::ChildStdinvAdaptorÖPoisonError>]8&mut &mut alloc::vec::VecýWaiterÆ PathAtomicUsize¼StaticKeyB4&core::option::Option¿PhantomDataž NulErrorgLazyKeyInner><#Option8&mut alloc::vec::Vec DirBuildere Key>VBacktraceFrame!UnsafeCell<*mut ()>Ò3BoxSocketAddrV4 SocketAddrV6³=&std::ffi::c_str::FromBytesWithNulErrorKindûMutex½?&std::path::Prefix? ExitCodeChildStderròPoisonError> ?&&std::ffi::os_str::OsStrö3&mut std::io::Write::write_fmt::Adaptor, ExitStatus—RefCell>÷ LazyKeyInner>¯ UnsafeCell<*mut alloc::sync::Arc>>>>®PhantomDataSNonNull>>>>CSliceAdaptorù:*mut alloc::vec::Vec>>Ð=&std::ffi::c_str::CStringÝ5*const std::backtrace::BacktraceSymbol¹ Key>>¾Cell OpenOptions sockaddr_in·@*const alloc::collections::btree::node::LeafNode>È.VoidoNonNull>Vec>>²ThreadId‘Result<(), std::io::error::Error>ÔBufWriter>a>&std::sys::wasm::fs::FileType1Hasher6PhantomData>>”FlagOAdaptor>¾;fn(&core::panic::PanicInfo)í=&core::str::Utf8ErrorhBorrowErrorå9*const alloc::sync::ArcInner>>>>Ò!UnsafeCell>>'>&std::sys::wasm::fs::OpenOptions/IterRefCell>>¼ArcInner>>>tBacktraceSymbolÔ sockaddr_in6ÅThread;7&std::io::error::Error^0Location45&std::sync::mutex::Mutex<()>f6&strßOnceºPoisonError>ArcInner>>>>7&mut core::fmt::FormatterÀ@*const alloc::collections::btree::node::InternalNode>…"UnsafeCell> Key>>>%Option<&str>³SystemTime|String¼StringErrorÒ0Anyß"Option> >&std::sys::wasm::fs::ReadDirð>&std::net::ip::Ipv6Addr—UnsafeCell{MutexGuard<()>r@unsafe fn(*const ()) -> core::task::wake::RawWakerr OsString`;&std::io::lazy::Lazy>>>>KLazyKeyInner>>Û3isize# UnsafeCell<*mut alloc::sync::Arc>>>>qReentrantMutexNonNull>>>>.8&mut boolq'Option°2MaybeUninit>1@&std::sys::wasm::process::ExitCodeµ9alloc::boxed::Box<[u8]>MaybeBoxþ;*const &strBytesOrWideGPhantomData<*const std::sync::once::Waiter>! Component÷?&core::option::Option<&std::path::Path>5BoxÎ;&core::panic::PanicInfo&RewrapBox‰WaitTimeoutResult ReadDirš3&mut alloc::string::StringzPhantomData>>?=&core::hash::sip::SipHasher13}3Box8&mut core::option::OptionÙ PathBuf[*Option<&std::path::Path>pLazy>>>>5ReentrantMutexGuard>>>B&Option†@fn(&()) -> &()%<*const core::fmt::rt::v1::ArgumentÊ<&core::option::Optionî!UnsafeCell>>>>6RawVec>, alloc::alloc::Global>ëUnsafeCells+Option>>f8&mut alloc::vec::VecRUniquee5&std::sync::mutex::MutexÇArcInner$BSegmentw UnsafeCell<*mut alloc::sync::Arc>>>>>7NonNull>>>>>ÞReprW@*const core::task::wake::Context&Option+(Option<&[core::fmt::rt::v1::Argument]>ë7&mut core::result::Result<(), core::fmt::Error>™#Option>ù2ManuallyDropÁ in_addròPhantomData<&core::fmt::ArgumentV1>Ó/*mut Fn<(&core::panic::PanicInfo)>–=&alloc::vec::VecT?&std::net::addr::SocketAddrV4Õ Key>7?&std::net::addr::SocketAddrV6Œ.&mut Writeø/NonZeroU64Ê%Option«0BoxOBox§Guard@8&backtrace::backtrace::Frame… OsStrØInnerl%Option Cell<*mut alloc::sync::Arc>>>>—Lazy>>>†;*const std::sync::once::WaiteriPhantomData &()>JRawVecStdoutLockÉ3&std::sys_common::remutex::ReentrantMutex>>;*const alloc::sync::ArcInner Arc.debug_aranges× .debug_abbrev%´B4I ˆI9 ˆ Iˆ8 /I  ˆ 4I?: ; n Im ˆ (  ˆ3 Iˆ8 4 $> I!I" 7 $ > 4IIIm ˆ/I9 Iˆ8 4I: ; n4I?: ; ˆn Iˆ8 44I?: ;n ! Iˆ8 4"I# ˆ$!I" 7%I&I'(I)4I: ;n* Iˆ8 4+3,4I: ;ˆn-4I: ; ˆn. ˆ/ Iˆ8031( 2!I" 3I4 Iˆ8ó .debug_lineD>û src/liballoc/collections/btreenode.rsû ˆ‚û src/libcore/num/flt2dec/strategysrc/libcore/strsrc/libcore/fmtdragon.rsgrisu.rsmod.rsnum.rspjû /cargo/registry/src/github.com-1ecc6299db9ec823/hashbrown-0.6.2/src/rawgeneric.rsû _Yû src/libstd/threadsrc/libstdsrc/libstd/iosrc/libstd/sys_commonsrc/libstd/../stdarch/crates/std_detect/src/detectsrc/libstd/sys/wasmmod.rsbacktrace.rsstdio.rstime.rsat_exit_imp.rsbacktrace.rsthread.rsthread_local.rsmod.rsalloc.rspanicking.rscache.rslocal.rsalloc.rsîê .debug_strclang LLVM (rustc version 1.41.1 (f3e1a954d 2020-02-24))src/liballoc/lib.rs/rustc/f3e1a954d2ead4e2fc197c7da7d71e6c61bad196/vtableallocstringvecbufraw_vecptrcoreuniquepointeru8*const u8_markermarkerTPhantomDataUniquecapusizeaGlobalARawVeclenVecString&mut alloc::string::String&u8fmtErrorprivate()LayoutErr!collectionsbtreenodeEMPTY_ROOT_NODEparentdataparent_idxmemmaybe_uninituninitvaluemanually_dropu16ManuallyDropMaybeUninitkeysManuallyDrop<()>MaybeUninit<()>__ARRAY_SIZE_TYPE__valsKVLeafNode<(), ()>edges*const alloc::collections::btree::node::LeafNode<(), ()>PhantomData>Unique>BoxedNode<(), ()>ManuallyDrop>MaybeUninit>InternalNode<(), ()>*const alloc::collections::btree::node::InternalNode<(), ()>keys_startK2NodeHeader<(), (), ()>_ZN5alloc11collections5btree4node15EMPTY_ROOT_NODE17heb2293ea0fba367cEsize_align_num__0NonZeroUsizeLayout&core::alloc::Layout&()&alloc::vec::Vecstrvalid_up_toerror_lenoptionNoneSomeOptionUtf8Error&core::str::Utf8ErrorresultOkErrResultrtv1LeftRightCenterUnknownAlignment/cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/lib.rs/cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40&u16ffi__variant1__variant2c_void*mut core::ffi::c_voidbacktracesymbolizebytesdata_ptrlength&[u8]demangledu32rustc_demanglestyleLegacylegacyinner&strelementsDemangleV0v0DemangleStyleOptionoriginalsuffixOptioncpp_demangledPhantomData<&()>OptionCppSymbolSymbolName*const u16&[u16]&&[u16]&&[u8]printShortFull__NonexhaustivePrintFmtsrc/libcore/lib.rsflt2decstrategydragonPOW10_ZN4core3num7flt2dec8strategy6dragon5POW1017h5da6aadeddbe229aETWOPOW10_ZN4core3num7flt2dec8strategy6dragon8TWOPOW1017h5c4d607532daff48EPOW10TO16_ZN4core3num7flt2dec8strategy6dragon9POW10TO1617h83d7c98d78d159e5EPOW10TO32_ZN4core3num7flt2dec8strategy6dragon9POW10TO3217ha50c214ff7dc18dcEPOW10TO64_ZN4core3num7flt2dec8strategy6dragon9POW10TO6417hb6568a1145d38427EPOW10TO128_ZN4core3num7flt2dec8strategy6dragon10POW10TO12817hf317ca5f522894bfEPOW10TO256_ZN4core3num7flt2dec8strategy6dragon10POW10TO25617hd39a45a52e6994c4EgrisuCACHED_POW10u64__1i16__2(u64, i16, i16)_ZN4core3num7flt2dec8strategy5grisu12CACHED_POW1017h9f185b784b2ba834Epanic{{impl}}internal_constructorNoPayloaditeradaptersflattensliceendPhantomData<&u8>IterCharsfCharEscapeDebugContinueIFMapfrontitercharstateDoneCharBackslashUnicodecRightBraceValueLeftBraceTypeEscapeUnicodeStatehex_digit_idxEscapeUnicodeEscapeDefaultStateEscapeDefaultEscapeDebugOptionbackiterUFlattenCompat, core::char::EscapeDebug>CharEscapeUnicodeMapOptionFlattenCompat, core::char::EscapeUnicode>CharEscapeDefaultMapOptionFlattenCompat, core::char::EscapeDefault>optItemIntoIterFlattenCompat, core::char::EscapeDebug>vpredIsAsciiWhitespacefinishedboolPSplitpredicateBytesIsNotEmptyFilter, core::str::BytesIsNotEmpty>startmatcherpatternhaystackfingerfinger_backneedleutf8_sizeutf8_encodedCharSearcherallow_trailing_emptySplitInternalSplitTerminatorchar_eqIsWhitespacechar_indicesfront_offsetCharIndicesCMultiCharEqSearcherCharPredicateSearcherSplitInternalSplitUTF8_CHAR_WIDTH_ZN4core3str15UTF8_CHAR_WIDTH17he5efe023055697dbEbuilders*mut u8&[usize; 3]&mut Writeon_newlinePadAdapterState&mut core::fmt::builders::PadAdapterStatePadAdapter&charDEC_DIGITS_LUT&[u8; 200]_ZN4core3fmt3num14DEC_DIGITS_LUT17hce877a6ba795938eE&mut core::fmt::builders::PadAdaptertaskwakewaker*const ()cloneunsafe fn(*const ()) -> core::task::wake::RawWakerunsafe fn(*const ())wake_by_refdropRawWakerVTable&core::task::wake::RawWakerVTableRawWakerWaker&core::task::wake::Waker*const core::task::wake::RawWakerVTablei64&i64dec2fltparseintegralfractionalexpDecimal&core::num::dec2flt::parse::Decimal&u64&i16EmptyInvalidFloatErrorKind&core::num::dec2flt::FloatErrorKind&booldecodermantminusplusinclusiveDecoded&core::num::flt2dec::decoder::Decoded&usizeInvalidDigitOverflowUnderflowZeroIntErrorKind&core::num::IntErrorKindconvertEmptyStringTooManyCharsCharErrorKind&core::char::convert::CharErrorKind&core::char::EscapeUnicodeState&core::char::EscapeDefaultState&core::char::EscapeUnicode&core::char::EscapeDefaultThreeTwoOneCaseMappingIter&core::char::CaseMappingIterany&Any&&Anypieces*const &str&[&str]positionNextAtPositionformatfillalignflagsprecisionIsParamNextParamImpliedCountwidthFormatSpecArgument*const core::fmt::rt::v1::Argument&[core::fmt::rt::v1::Argument]Option<&[core::fmt::rt::v1::Argument]>args_priv_oibit_removeropsfunction*mut Fn<()>PhantomData<*mut Fn<()>>Void&core::fmt::VoidformatterOptioncurarg&core::fmt::ArgumentV1PhantomData<&core::fmt::ArgumentV1>IterFormatter&mut core::fmt::Formatterfn(&core::fmt::Void, &mut core::fmt::Formatter) -> core::result::Result<(), core::fmt::Error>ArgumentV1*const core::fmt::ArgumentV1&[core::fmt::ArgumentV1]Arguments&core::fmt::ArgumentsOption<&core::fmt::Arguments>&core::option::Option<&core::fmt::Arguments>filelinecolLocation&core::panic::Location&&core::panic::Location&&str&u32Flatten>&core::iter::adapters::flatten::Flatten>FlatMap&core::iter::adapters::flatten::FlatMapchainBothFrontBackChainState&core::iter::adapters::chain::ChainState&core::iter::adapters::Map&core::option::Option&core::iter::adapters::Map&core::option::Option&core::option::IntoIter&core::iter::adapters::Map&core::option::Option&core::slice::Iter&core::char::EscapeDebug&&core::fmt::Arguments&core::option::Item&core::ffi::c_void&mut &core::ffi::c_voidPhantomData<&mut &core::ffi::c_void>VaListImpl&core::ffi::VaListImpl&mut core::ffi::VaListImplPhantomData<&mut core::ffi::VaListImpl>&core::marker::PhantomData<&mut core::ffi::VaListImpl>&[u8; 4]*const char&[char]&&[char]&core::str::CharIndicesMultiCharEqSearcher<&[char]>&core::str::pattern::MultiCharEqSearcher<&[char]>is_match_fwis_match_bwEmptyNeedleTwoWaycrit_poscrit_pos_backperiodbytesetmemorymemory_backTwoWaySearcherStrSearcherImpl&core::str::pattern::StrSearcherImpl&core::str::pattern::TwoWaySearcher&core::str::pattern::EmptyNeedle&core::option::Option&core::str::CharsitCloned>&core::iter::adapters::Cloned>LinesAnyMapMap, core::str::LinesAnyMap>&core::iter::adapters::Map, core::str::LinesAnyMap>Lines&core::str::LinesIsNotEmptyFilter, core::str::IsNotEmpty>&core::iter::adapters::Filter, core::str::IsNotEmpty>UnsafeBytesToStrMap, core::str::BytesIsNotEmpty>, core::str::UnsafeBytesToStr>&core::iter::adapters::Map, core::str::BytesIsNotEmpty>, core::str::UnsafeBytesToStr>bBChain>, core::iter::adapters::flatten::FlatMap>&core::iter::adapters::chain::Chain>, core::iter::adapters::flatten::FlatMap>FlatMap&core::iter::adapters::flatten::FlatMapFlatMap&core::iter::adapters::flatten::FlatMaphashsipk0k1v2v3StatetailntailSip13RoundsPhantomDataSHasher&core::hash::sip::HasherSip24RoundsPhantomDataHasher&core::hash::sip::HasherhasherSipHasher24&core::hash::sip::SipHasher24&core::hash::sip::State&core::marker::PhantomData&core::marker::PhantomData&*const ()&&core::task::wake::RawWakerVTable&unsafe fn(*const ()) -> core::task::wake::RawWaker&unsafe fn(*const ())non_nullNonNull&core::ptr::non_null::NonNull&core::num::NonZeroUsizei8&i8i32&i32f32&f32f64&f64/cargo/registry/src/github.com-1ecc6299db9ec823/hashbrown-0.6.2/src/lib.rs/cargo/registry/src/github.com-1ecc6299db9ec823/hashbrown-0.6.2hashbrownrawgenericstatic_emptyALIGNED_BYTES_alignGroupAlignedBytes_ZN9hashbrown3raw7generic5Group12static_empty13ALIGNED_BYTES17h1f7469ddd7751ab9EFallibleInfallibleFallibility/cargo/registry/src/github.com-1ecc6299db9ec823/rustc-demangle-0.1.16/src/lib.rs/cargo/registry/src/github.com-1ecc6299db9ec823/rustc-demangle-0.1.16kindParseIntErrorsrc/libstd/lib.rsstdioWritewrite_fmt&mut alloc::vec::VecerrorreprOsSimpleNotFoundPermissionDeniedConnectionRefusedConnectionResetConnectionAbortedNotConnectedAddrInUseAddrNotAvailableBrokenPipeAlreadyExistsWouldBlockInvalidInputInvalidDataTimedOutWriteZeroInterruptedOtherUnexpectedEofErrorKindCustomBoxBoxReprEResult<(), std::io::error::Error>Adaptor>&mut std::io::Write::write_fmt::Adaptor>stdiosys_commonremutex__locksyswasmmutexReentrantMutexBoxpoisonfailedsyncatomiccellUnsafeCellAtomicBoolFlagborrowisizeUnsafeCellCellRealFakeMaybeUnsafeCell>RefCell>ReentrantMutex>>&std::sys_common::remutex::ReentrantMutex>>__poisonpanickingGuardReentrantMutexGuard>>StderrLock&mut std::io::stdio::StderrLockAdaptor&mut std::io::Write::write_fmt::AdaptorbufferedOption>panickedWBufWriter>need_flushLineWriter>UnsafeCell>>RefCell>>ReentrantMutex>>>&std::sys_common::remutex::ReentrantMutex>>>ReentrantMutexGuard>>>StdoutLock&mut std::io::stdio::StdoutLockAdaptor&mut std::io::Write::write_fmt::Adaptoros_stros_str_bytesBufOsString&std::ffi::os_str::OsStringOption&core::option::OptionpathPrefixSliceOsStr&std::ffi::os_str::OsStrparsedVerbatimVerbatimUNCVerbatimDiskDeviceNSUNCDiskPrefixComponentRootDirCurDirParentDirNormalComponent_privateBorrowMutErrorthreadlocalAccessErrorc_strNulErrorBorrowErrorguardlocklockedUnsafeCellMutexBoxbarriercountgeneration_idBarrierStateUnsafeCellMutex&std::sync::mutex::MutexMutexGuardPoisonError>UnsafeCell<()>Mutex<()>&std::sync::mutex::Mutex<()>MutexGuard<()>PoisonError>actual_startresolvedframesframenoopFramesymbolsnameOption>filenameBytesWidePhantomDataUniqueRawVecVecBytesOrWideOptionlinenoOptionBacktraceSymbol*const std::backtrace::BacktraceSymbolPhantomDataUniqueRawVecVecBacktraceFrame*const std::backtrace::BacktraceFramePhantomDataUniqueRawVecVecCaptureUnsafeCellMutex&std::sync::mutex::MutexMutexGuardPoisonError>condvarWaitTimeoutResult(std::sync::mutex::MutexGuard<()>, std::sync::condvar::WaitTimeoutResult)PoisonError<(std::sync::mutex::MutexGuard<()>, std::sync::condvar::WaitTimeoutResult)>processpipeAnonPipeChildStderr&std::process::ChildStderr&alloc::string::String&Error&&ErrorChildStdin&std::process::ChildStdinChildStdout&std::process::ChildStdoutPath&std::path::Path&&std::path::Path&std::io::error::ErrortimesecsnanosDurationSystemTime&std::time::SystemTime_print_fmt&backtrace::print::PrintFmt&mut usizeframe_indexprint_path&mut FnMut<(&mut core::fmt::Formatter, backtrace::types::BytesOrWideString)>BacktraceFmt&mut backtrace::print::BacktraceFmt__3&mut core::result::Result<(), core::fmt::Error>closure-1create&mut alloc::vec::Vec&mut core::option::Optionclosure-0{{closure}}&mut bool__4&backtrace::backtrace::Frame&&backtrace::backtrace::Frame__5resolve&mut alloc::vec::Vec&mut &mut alloc::vec::VecnewGUARD_ZN3std6thread8ThreadId3new5GUARD17h834af12fe6d53ddaECOUNTER_ZN3std6thread8ThreadId3new7COUNTER17h390aabab3ddd9d5fENonZeroU64ThreadIdOption<&str>enabledENABLEDUnsafeCellAtomicUsize_ZN3std9backtrace9Backtrace7enabled7ENABLED17h719c03ab8183ef76EPathBufResult*const std::ffi::os_str::OsString&[std::ffi::os_str::OsString]fromStringErrorfsFileTypeFilePermissionsPermissionsResultstdinINSTANCElazystrongweakalloc::boxed::Box<[u8]>posRBufReader>UnsafeCell>>Mutex>>ArcInner>>>*const alloc::sync::ArcInner>>>NonNull>>>>phantomPhantomData>>>>Arc>>>*mut alloc::sync::Arc>>>UnsafeCell<*mut alloc::sync::Arc>>>>Cell<*mut alloc::sync::Arc>>>>Lazy>>>_ZN3std2io5stdio5stdin8INSTANCE17hb34a6bd077afc212EstdoutArcInner>>>>*const alloc::sync::ArcInner>>>>NonNull>>>>>PhantomData>>>>>Arc>>>>*mut alloc::sync::Arc>>>>UnsafeCell<*mut alloc::sync::Arc>>>>>Cell<*mut alloc::sync::Arc>>>>>Lazy>>>>_ZN3std2io5stdio6stdout8INSTANCE17h5c4fcb62e722504fEstderrArcInner>>>*const alloc::sync::ArcInner>>>NonNull>>>>PhantomData>>>>Arc>>>*mut alloc::sync::Arc>>>UnsafeCell<*mut alloc::sync::Arc>>>>Cell<*mut alloc::sync::Arc>>>>Lazy>>>_ZN3std2io5stdio6stderr8INSTANCE17he176d178450107c5EDebugHelperOptionOptionOptionExitStatusoncecall_onceOption&mut core::option::OptionnowLOCK_ZN3std4time7Instant3now4LOCK17h45c9dbfee6cd1010ELAST_NOWInstant_ZN3std4time7Instant3now8LAST_NOW17h3810eec8d251b9cdEat_exit_imp_ZN3std10sys_common11at_exit_imp4LOCK17he226c81d6a9832a8EQUEUEFnOnce<()>Box>*const alloc::boxed::Box>PhantomData>>Unique>>RawVec>, alloc::alloc::Global>Vec>>*mut alloc::vec::Vec>>_ZN3std10sys_common11at_exit_imp5QUEUE17hf3f926524d2d1450E_ZN3std10sys_common9backtrace4lock4LOCK17h92aae827bd981655EOptionrust_backtrace_envAtomicIsize_ZN3std10sys_common9backtrace18rust_backtrace_env7ENABLED17hbca2b5ba25098ae1Emin_stackMIN_ZN3std10sys_common6thread9min_stack3MIN17h7733854898bd634cEthread_locallazy_initINIT_LOCK_ZN3std10sys_common12thread_local9StaticKey9lazy_init9INIT_LOCK17h8647b9820286d39dEregister_dtor_fallbackDTORSkeydtorunsafe extern "C" fn(*mut u8)OptionStaticKey_ZN3std10sys_common12thread_local22register_dtor_fallback5DTORS17hf55a93c94c347a76Einit&std::io::lazy::Lazy>>>&std::io::lazy::Lazy>>>>&std::io::lazy::Lazy>>>cleanupCLEANUPstate_and_queueCStringOptionidcvarCondvarBoxInnerArcInner*const alloc::sync::ArcInnerNonNull>PhantomData>ArcThreadOptionUnsafeCell>Cell>signalednextWaiter*const std::sync::once::WaiterPhantomData<*const std::sync::once::Waiter>Once_ZN3std10sys_common7cleanup7CLEANUP17hc43ee5a11edd78e2EHOOKp*mut ()UnsafeCell<*mut ()>AtomicPtr<()>_ZN3std5alloc4HOOK17h50e3d0754ee0d371EHOOK_LOCKrwlockmodeRWLock_ZN3std9panicking9HOOK_LOCK17h8c64965529158c7cEDefault*mut Fn<(&core::panic::PanicInfo)>Hook_ZN3std9panicking4HOOK17h35014f4acfd76438EpayloadmessagelocationPanicInfo&core::panic::PanicInfofn(&core::panic::PanicInfo)Boxdefault_hookFIRST_PANIC_ZN3std9panicking12default_hook28_$u7b$$u7b$closure$u7d$$u7d$11FIRST_PANIC17h854bab1bfa898236Ebegin_panic_handlerOptionPanicPayloadbegin_panicPanicPayload<&str>rust_panic_without_hookAnyBoxRewrapBoxstd_detectdetectcacheCACHEUnsafeCellAtomicU32Cache_ZN3std10std_detect6detect5cache5CACHE17hbc4210edd58044efE&core::option::Option&core::option::Option&core::num::NonZeroU64mapKEYS__getit__KEYstatik(u64, u64)UnsafeCell<(u64, u64)>Cell<(u64, u64)>Option>UnsafeCell>>LazyKeyInner>Key>_ZN3std11collections4hash3map11RandomState3new4KEYS7__getit5__KEY17ha5686ebf7e8d3103ESipHasher13&core::hash::sip::SipHasher13osJoinPathsError&std::sys::wasm::os::JoinPathsErrorOption<&Error>&core::option::Option<&Error>InteriorNulNotNulTerminatedFromBytesWithNulErrorKind&std::ffi::c_str::FromBytesWithNulErrorKind&std::ffi::c_str::CStringReadDir&std::sys::wasm::fs::ReadDirOpenOptions&std::sys::wasm::fs::OpenOptions&std::sys::wasm::fs::FilePermissions&std::sys::wasm::fs::FileTypeDirBuilder&std::sys::wasm::fs::DirBuilder&std::io::error::ErrorKind&alloc::boxed::BoxLOCAL_STDOUTOption>UnsafeCell>>RefCell>>Option>>>UnsafeCell>>>>LazyKeyInner>>>Key>>>_ZN3std2io5stdio12LOCAL_STDOUT7__getit5__KEY17he06b13a73cd08edfELOCAL_STDERR_ZN3std2io5stdio12LOCAL_STDERR7__getit5__KEY17hdc7310932b4e0aa5Enetipnetcs6_addrin6_addrIpv6Addr&std::net::ip::Ipv6Addrs_addrin_addrIpv4Addr&std::net::ip::Ipv4Addraddrsin6_familysin6_portsin6_addrsin6_flowinfosin6_scope_idsockaddr_in6SocketAddrV6&std::net::addr::SocketAddrV6sin_familysin_portsin_addrsockaddr_inSocketAddrV4&std::net::addr::SocketAddrV4tcpTcpListener&std::net::tcp::TcpListener&&std::net::tcp::TcpListener&&std::ffi::os_str::OsStr&std::path::Prefix&std::path::PrefixComponentOption<&std::path::Path>&core::option::Option<&std::path::Path>&std::sys::wasm::process::ExitStatusExitCode&std::sys::wasm::process::ExitCode&core::time::DurationfutureTLS_CXfn(&()) -> &()PhantomData &()>Context*const core::task::wake::ContextNonNullOption>UnsafeCell>>Cell>>Option>>>UnsafeCell>>>>LazyKeyInner>>>Key>>>_ZN3std6future6TLS_CX7__getit5__KEY17hffb21c30460c0459Ethread_infoTHREAD_INFOstack_guardOptionThreadInfoOptionUnsafeCell>RefCell>Option>>UnsafeCell>>>LazyKeyInner>>Key>>_ZN3std10sys_common11thread_info11THREAD_INFO7__getit5__KEY17ha6d8f612bed40e8eErootManuallyDrop>>MaybeUninit>>InternalNode>*const alloc::collections::btree::node::InternalNode>ManuallyDropMaybeUninitManuallyDrop>MaybeUninit>LeafNode>*const alloc::collections::btree::node::LeafNode>PhantomData>>Unique>>BoxedNode>heightRoot>BTreeMap>&alloc::collections::btree::map::BTreeMap>DLMALLOCdlmallocsmallmaptreemapsmallbinsprev_footheadprevChunk*mut dlmalloc::dlmalloc::ChunktreebinschunkchildindexTreeChunk*mut dlmalloc::dlmalloc::TreeChunkdvsizetopsizedvtopfootprintmax_footprintsegbasesize*mut dlmalloc::dlmalloc::SegmentSegmenttrim_checkleast_addrrelease_checksDlmalloc_ZN3std3sys4wasm5alloc8DLMALLOC17h02765b1b78e74130Eupdate_panic_countPANIC_COUNTCellOption>UnsafeCell>>LazyKeyInner>Key>_ZN3std9panicking18update_panic_count11PANIC_COUNT7__getit5__KEY17h3963c946c82ddc30EStartDirBodycmpLessEqualGreaterOrderingInheritNullMakePipeStdio¶.debug_pubnames@»ÔcollectionsJmarkerëmaybe_uninit†raw_vecëcore“Left¥UnknownðptrãEMPTY_ROOT_NODEÚstrrOkþoptionvtableæmemYvecŸCenter™RightÞnoderfmtƒv1xErr¯alloc~rtÁnumÙbtree@stringõuniquefmanually_dropbresultñ»n†backtrace‹symbolizeDmarkerv__variant1|__variant2Àv0`fmtjv1acoreertrustc_demangleÍprinté__NonexhaustiveÝShortãFullfffiœlegacy„optionPvtable[result) UTF8_CHAR_WIDTH(flt2decþdec2flt2 Done¡grisu‰panic=BothÕflatten#ops‚POW10TO128:strx option8 RightBracehvtableÙpattern˜non_null¼rtD LeftBraceP Backslash{sipVsliceËiterbOverflow¸decoder‘POW10TO256hUnderflowMresultUPOW10TO16Ž{{impl}}ûmarkerƒDEC_DIGITS_LUTvhashg EmptyStringCInvalidÿanycoreCFront(function¦CACHED_POW10IBackŽtaskÐadapters“ptr7POW10\InvalidDigitm TooManyCharsparseF charnZeroW convert“internal_constructorJ TypesPOW10TO64-chain$fmt“wakeÁv1VEmpty~numFTWOPOW10-strategyRffi)builders2dragon> ValuedPOW10TO32¢¶(õÚnum…Fallible-{{impl}}‹Infallible2static_empty±core#raw7ALIGNED_BYTEShashbrown(generic¶alloc”vtableK«)q7numZrtUfmt_v12coregvtablePresultà*Bpbacktrace©InvalidDataÅcall_once'THREAD_INFO62maybe_uninitEWrite¬DTORS‹AddrNotAvailable00panicÎ,time/ StartDirJwrite_fmtyConnectionAbortedu_print_fmtS&SomeH/ops?PANIC_COUNTpoisonlthreadqmin_stackXHOOK_LOCKatomicmConnectionRefused12memŸCOUNTERnon_nullW-rtI__KEY»once:nodeAenabledö0sipgPermissionDeniedWmutexwstringn3EqualŒresultbsys©markerístdiovMINª{{impl}}M/functionEraw_vec0stdinlockñ0hash7ENABLED"thread_infoˆ0anyÿbegin_panicM&NoneGUARD·fromSpanickingWouldBlockFake‘lazy_initm os_str!rust_panic_without_hook–INIT_LOCK|vec—AlreadyExistsEstdout\std_detect‡thread_localñ fmt\-v1¯newµWriteZeroÛbegin_panic_handler pathÇUnexpectedEofó/num¤ net[stderrh ffiÀdefault_hook™ c_straddr' processvcell(resolve…AddrInUse¨buffered; Done;stdH localúcollections5 Bodyfcache£InvalidInputÚ"option 0strc Null”5noopš@vtableÚfsT3cmpmapÁOtheradetectReal`barrierÿLAST_NOWÛcleanup×remutex© netc§register_dtor_fallbackq condvarQTLS_CX/slice2tcpÿbtreesConnectionResetënow2rust_backtrace_env:update_panic_countÃinitd3Less´KEYS+os_str_bytesò lazy— os\QUEUEàCLEANUPcoreJerror Adlmalloc"LOCKaNotFoundÅ{{closure}}i MakePipeqLOCAL_STDOUTgHOOKV DLMALLOCHat_exit_imp¢1task`INSTANCE!ptr»Interruptedt3GreaterLfuturesyncŒLOCAL_STDERRO3char] InheritNotConnectedÒsys_common§1wakeQ alloc¯TimedOut¢5printŒpipe‘BrokenPipe` statik) Prefix~ rwlockÊFIRST_PANICùcreatekCACHE&unique@iogwasmÚipD__getitØ2manually_dropM producerslanguageRust processed-byrustc1.41.1 (f3e1a954d 2020-02-24)binaryen-version_108/test/passes/dwarf_with_exceptions.bin.txt000066400000000000000000000412451423707623100251370ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "_Z3foov" (func $foo\28\29)) (import "env" "__cxa_begin_catch" (func $__cxa_begin_catch (param i32) (result i32))) (import "env" "__cxa_end_catch" (func $__cxa_end_catch)) (import "env" "_ZSt9terminatev" (func $std::terminate\28\29)) (global $__stack_pointer (mut i32) (i32.const 66560)) (memory $0 2) (tag $tag$0 (param i32)) (export "memory" (memory $0)) (func $__wasm_call_ctors ) (func $dwarf_with_exceptions\28\29 (local $0 i32) (local $1 i32) ;; code offset: 0xe (local.set $0 ;; code offset: 0x8 (global.get $__stack_pointer) ) ;; code offset: 0x10 (try $label$9 (do ;; code offset: 0x12 (call $foo\28\29) ) ;; code offset: 0x18 (catch $tag$0 ;; code offset: 0x1e (local.set $1 (pop i32) ) ;; code offset: 0x22 (global.set $__stack_pointer ;; code offset: 0x20 (local.get $0) ) ;; code offset: 0x30 (drop ;; code offset: 0x2a (call $__cxa_begin_catch ;; code offset: 0x28 (local.get $1) ) ) ;; code offset: 0x31 (try $label$8 (do ;; code offset: 0x33 (call $foo\28\29) ;; code offset: 0x3b (global.set $__stack_pointer ;; code offset: 0x39 (local.get $0) ) ) ;; code offset: 0x41 (catch_all ;; code offset: 0x42 (try $label$7 (do ;; code offset: 0x44 (call $__cxa_end_catch) ) ;; code offset: 0x4a (catch $tag$0 ;; code offset: 0x50 (local.set $1 (pop i32) ) ;; code offset: 0x54 (global.set $__stack_pointer ;; code offset: 0x52 (local.get $0) ) ;; code offset: 0x5c (call $__clang_call_terminate ;; code offset: 0x5a (local.get $1) ) ;; code offset: 0x62 (unreachable) ) ;; code offset: 0x63 (catch_all ;; code offset: 0x64 (call $std::terminate\28\29) ;; code offset: 0x6a (unreachable) ) ) ;; code offset: 0x6c (rethrow $label$8) ) ) ;; code offset: 0x6f (call $__cxa_end_catch) ) ) ) (func $__clang_call_terminate (param $0 i32) ;; code offset: 0x81 (drop ;; code offset: 0x7b (call $__cxa_begin_catch ;; code offset: 0x79 (local.get $0) ) ) ;; code offset: 0x82 (call $std::terminate\28\29) ;; code offset: 0x88 (unreachable) ) ;; custom section ".debug_info", size 63 ;; custom section ".debug_abbrev", size 41 ;; custom section ".debug_line", size 109 ;; custom section ".debug_str", size 178 ;; custom section "producers", size 134 ;; features section: exception-handling ) DWARF debug info ================ Contains section .debug_info (63 bytes) Contains section .debug_abbrev (41 bytes) Contains section .debug_line (109 bytes) Contains section .debug_str (178 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_external DW_FORM_flag_present .debug_info contents: 0x00000000: Compile Unit: length = 0x0000003b version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003f) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus_14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000065] = "dwarf_with_exceptions.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000007f] = "/") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000072) 0x00000026: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000072) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000081] = "_Z21dwarf_with_exceptionsv") DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009c] = "dwarf_with_exceptions") DW_AT_decl_file [DW_FORM_data1] ("/dwarf_with_exceptions.cpp") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_external [DW_FORM_flag_present] (true) 0x0000003e: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000069 version: 4 prologue_length: 0x00000031 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "dwarf_with_exceptions.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x0000003b: 00 DW_LNE_set_address (0x0000000000000005) 0x00000042: 13 address += 0, line += 1 0x0000000000000005 2 0 1 0 0 is_stmt 0x00000043: 05 DW_LNS_set_column (5) 0x00000045: 0a DW_LNS_set_prologue_end 0x00000046: ae address += 11, line += 2 0x0000000000000010 4 5 1 0 0 is_stmt prologue_end 0x00000047: 05 DW_LNS_set_column (3) 0x00000049: 83 address += 8, line += 1 0x0000000000000018 5 3 1 0 0 is_stmt 0x0000004a: 05 DW_LNS_set_column (5) 0x0000004c: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000004d: 83 address += 8, line += 1 0x0000000000000031 6 5 1 0 0 is_stmt 0x0000004e: 06 DW_LNS_negate_stmt 0x0000004f: 03 DW_LNS_advance_line (0) 0x00000051: 82 address += 8, line += 0 0x0000000000000039 0 5 1 0 0 0x00000052: 05 DW_LNS_set_column (3) 0x00000054: 06 DW_LNS_negate_stmt 0x00000055: 89 address += 8, line += 7 0x0000000000000041 7 3 1 0 0 is_stmt 0x00000056: 06 DW_LNS_negate_stmt 0x00000057: 03 DW_LNS_advance_line (0) 0x00000059: 02 DW_LNS_advance_pc (42) 0x0000005b: 01 DW_LNS_copy 0x000000000000006b 0 3 1 0 0 0x0000005c: 27 address += 1, line += 7 0x000000000000006c 7 3 1 0 0 0x0000005d: 03 DW_LNS_advance_line (0) 0x0000005f: 2e address += 2, line += 0 0x000000000000006e 0 3 1 0 0 0x00000060: 27 address += 1, line += 7 0x000000000000006f 7 3 1 0 0 0x00000061: 03 DW_LNS_advance_line (0) 0x00000063: 66 address += 6, line += 0 0x0000000000000075 0 3 1 0 0 0x00000064: 05 DW_LNS_set_column (1) 0x00000066: 06 DW_LNS_negate_stmt 0x00000067: 28 address += 1, line += 8 0x0000000000000076 8 1 1 0 0 is_stmt 0x00000068: 02 DW_LNS_advance_pc (1) 0x0000006a: 00 DW_LNE_end_sequence 0x0000000000000077 8 1 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)" 0x00000065: "dwarf_with_exceptions.cpp" 0x0000007f: "/" 0x00000081: "_Z21dwarf_with_exceptionsv" 0x0000009c: "dwarf_with_exceptions" DWARF debug info ================ Contains section .debug_info (63 bytes) Contains section .debug_abbrev (41 bytes) Contains section .debug_line (162 bytes) Contains section .debug_str (178 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_external DW_FORM_flag_present .debug_info contents: 0x00000000: Compile Unit: length = 0x0000003b version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003f) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus_14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000065] = "dwarf_with_exceptions.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000007f] = "/") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000040) 0x00000026: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000040) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000081] = "_Z21dwarf_with_exceptionsv") DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009c] = "dwarf_with_exceptions") DW_AT_decl_file [DW_FORM_data1] ("/dwarf_with_exceptions.cpp") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_external [DW_FORM_flag_present] (true) 0x0000003e: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x0000009e version: 4 prologue_length: 0x00000031 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "dwarf_with_exceptions.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x0000003b: 00 DW_LNE_set_address (0x0000000000000005) 0x00000042: 03 DW_LNS_advance_line (2) 0x00000044: 01 DW_LNS_copy 0x0000000000000005 2 0 1 0 0 is_stmt 0x00000045: 00 DW_LNE_set_address (0x000000000000000e) 0x0000004c: 03 DW_LNS_advance_line (4) 0x0000004e: 05 DW_LNS_set_column (5) 0x00000050: 0a DW_LNS_set_prologue_end 0x00000051: 01 DW_LNS_copy 0x000000000000000e 4 5 1 0 0 is_stmt prologue_end 0x00000052: 00 DW_LNE_set_address (0x0000000000000012) 0x00000059: 03 DW_LNS_advance_line (5) 0x0000005b: 05 DW_LNS_set_column (3) 0x0000005d: 01 DW_LNS_copy 0x0000000000000012 5 3 1 0 0 is_stmt 0x0000005e: 00 DW_LNE_set_address (0x000000000000001f) 0x00000065: 03 DW_LNS_advance_line (6) 0x00000067: 05 DW_LNS_set_column (5) 0x00000069: 01 DW_LNS_copy 0x000000000000001f 6 5 1 0 0 is_stmt 0x0000006a: 00 DW_LNE_set_address (0x000000000000003e) 0x00000071: 03 DW_LNS_advance_line (7) 0x00000073: 05 DW_LNS_set_column (3) 0x00000075: 06 DW_LNS_negate_stmt 0x00000076: 01 DW_LNS_copy 0x000000000000003e 7 3 1 0 0 0x00000077: 00 DW_LNE_set_address (0x0000000000000041) 0x0000007e: 01 DW_LNS_copy 0x0000000000000041 7 3 1 0 0 0x0000007f: 00 DW_LNE_set_address (0x0000000000000044) 0x00000086: 03 DW_LNS_advance_line (8) 0x00000088: 05 DW_LNS_set_column (1) 0x0000008a: 06 DW_LNS_negate_stmt 0x0000008b: 01 DW_LNS_copy 0x0000000000000044 8 1 1 0 0 is_stmt 0x0000008c: 00 DW_LNE_set_address (0x0000000000000045) 0x00000093: 01 DW_LNS_copy 0x0000000000000045 8 1 1 0 0 is_stmt 0x00000094: 00 DW_LNE_set_address (0x00000000ffffff64) 0x0000009b: 03 DW_LNS_advance_line (7) 0x0000009d: 05 DW_LNS_set_column (3) 0x0000009f: 00 DW_LNE_end_sequence 0x00000000ffffff64 7 3 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)" 0x00000065: "dwarf_with_exceptions.cpp" 0x0000007f: "/" 0x00000081: "_Z21dwarf_with_exceptionsv" 0x0000009c: "dwarf_with_exceptions" (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "_Z3foov" (func $foo\28\29)) (import "env" "__cxa_begin_catch" (func $__cxa_begin_catch (param i32) (result i32))) (import "env" "__cxa_end_catch" (func $__cxa_end_catch)) (import "env" "_ZSt9terminatev" (func $std::terminate\28\29)) (global $__stack_pointer (mut i32) (i32.const 66560)) (memory $0 2) (tag $tag$0 (param i32)) (export "memory" (memory $0)) (func $__wasm_call_ctors ) (func $dwarf_with_exceptions\28\29 (local $0 i32) (local $1 i32) ;; code offset: 0xc (local.set $0 ;; code offset: 0xa (global.get $__stack_pointer) ) ;; code offset: 0xe (try $label$9 (do ;; code offset: 0x10 (call $foo\28\29) ) ;; code offset: 0x12 (catch $tag$0 ;; code offset: 0x14 (local.set $1 (pop i32) ) ;; code offset: 0x18 (global.set $__stack_pointer ;; code offset: 0x16 (local.get $0) ) ;; code offset: 0x1e (drop ;; code offset: 0x1c (call $__cxa_begin_catch ;; code offset: 0x1a (local.get $1) ) ) ;; code offset: 0x1f (try $label$8 (do ;; code offset: 0x21 (call $foo\28\29) ;; code offset: 0x25 (global.set $__stack_pointer ;; code offset: 0x23 (local.get $0) ) ) ;; code offset: 0x27 (catch_all ;; code offset: 0x28 (try $label$7 (do ;; code offset: 0x2a (call $__cxa_end_catch) ) ;; code offset: 0x2c (catch $tag$0 ;; code offset: 0x2e (local.set $1 (pop i32) ) ;; code offset: 0x32 (global.set $__stack_pointer ;; code offset: 0x30 (local.get $0) ) ;; code offset: 0x36 (call $__clang_call_terminate ;; code offset: 0x34 (local.get $1) ) ;; code offset: 0x38 (unreachable) ) ;; code offset: 0x39 (catch_all ;; code offset: 0x3a (call $std::terminate\28\29) ;; code offset: 0x3c (unreachable) ) ) ;; code offset: 0x3e (rethrow $label$8) ) ) ;; code offset: 0x41 (call $__cxa_end_catch) ) ) ) (func $__clang_call_terminate (param $0 i32) ;; code offset: 0x4b (drop ;; code offset: 0x49 (call $__cxa_begin_catch ;; code offset: 0x47 (local.get $0) ) ) ;; code offset: 0x4c (call $std::terminate\28\29) ;; code offset: 0x4e (unreachable) ) ;; custom section ".debug_info", size 63 ;; custom section ".debug_abbrev", size 41 ;; custom section ".debug_line", size 162 ;; custom section ".debug_str", size 178 ;; custom section "producers", size 134 ;; features section: exception-handling ) binaryen-version_108/test/passes/dwarf_with_exceptions.cpp000066400000000000000000000013231423707623100243240ustar00rootroot00000000000000void foo(); void dwarf_with_exceptions() { try { foo(); } catch (...) { foo(); } } // How to generate dwarf_with_exceptions.wasm: // $ clang++ -std=c++14 --target=wasm32-unknown-unknown -g -fwasm-exceptions \ // -Xclang -disable-O0-optnone -c -S -emit-llvm // dwarf_with_exceptions.cpp -o temp.ll // $ opt -S -mem2reg -simplifycfg temp.ll -o dwarf_with_exceptions.ll // Remove some personal info from dwarf_with_exceptions.ll // $ llc -exception-model=wasm -mattr=+exception-handling -filetype=obj \ // dwarf_with_exceptions.ll -o dwarf_with_exceptions.o // $ wasm-ld --no-entry --no-gc-sections --allow-undefined \ // dwarf_with_exceptions.o -o dwarf_with_exceptions.wasm binaryen-version_108/test/passes/dwarf_with_exceptions.passes000066400000000000000000000000461423707623100250410ustar00rootroot00000000000000print_dwarfdump_roundtrip_dwarfdump_g binaryen-version_108/test/passes/dwarf_with_exceptions.wasm000077500000000000000000000020731423707623100245170ustar00rootroot00000000000000asm ```Senv_Z3foovenv__cxa_begin_catchenv__cxa_end_catchenv_ZSt9terminatev A€ˆ  memory Š r#€€€€!@€€€€€€€€! $€€€€ €€€@€€€€ $€€€€@‚€€€€€€€! $€€€€ †€€€ƒ€€€ ‚€€€  €€€ƒ€€€ K .debug_info;!errퟜ7 .debug_abbrev%.@n: ; ?y .debug_linei1û dwarf_with_exceptions.cpp ®ƒƒz‚‰y*'y.'yf(½ .debug_strclang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)dwarf_with_exceptions.cpp/_Z21dwarf_with_exceptionsvdwarf_with_exceptionsžname‚foo()__cxa_begin_catch__cxa_end_catchstd::terminate()__wasm_call_ctorsdwarf_with_exceptions()__clang_call_terminate__stack_pointer producerslanguageC_plus_plus_14 processed-byclangV13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)%target_features+exception-handlingbinaryen-version_108/test/passes/dwarfdump.bin.txt000066400000000000000000000126261423707623100225320ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (58 bytes) Contains section .debug_abbrev (39 bytes) Contains section .debug_line (56 bytes) Contains section .debug_str (212 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_external DW_FORM_flag_present .debug_info contents: 0x00000000: Compile Unit: length = 0x00000036 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003a) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "a.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000009b] = "/usr/local/google/home/azakai/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000002) 0x00000026: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000002) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "_Z3foov") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d0] = "foo") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (3) DW_AT_external [DW_FORM_flag_present] (true) 0x00000039: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000034 version: 4 prologue_length: 0x0000001d min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "a.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000027: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002e: 14 address += 0, line += 2 0x0000000000000005 3 0 1 0 0 is_stmt 0x0000002f: 05 DW_LNS_set_column (1) 0x00000031: 0a DW_LNS_set_prologue_end 0x00000032: 21 address += 1, line += 1 0x0000000000000006 4 1 1 0 0 is_stmt prologue_end 0x00000033: 02 DW_LNS_advance_pc (1) 0x00000035: 00 DW_LNE_end_sequence 0x0000000000000007 4 1 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)" 0x00000095: "a.cpp" 0x0000009b: "/usr/local/google/home/azakai/Dev/emscripten" 0x000000c8: "_Z3foov" 0x000000d0: "foo" (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "__wasm_call_ctors" (func $fimport$0)) (import "env" "dlmalloc" (func $fimport$1 (param i32) (result i32))) (import "env" "dlfree" (func $fimport$2 (param i32))) (import "env" "setThrew" (func $fimport$3 (param i32 i32))) (import "env" "stackSave" (func $fimport$4 (result i32))) (import "env" "stackAlloc" (func $fimport$5 (param i32) (result i32))) (import "env" "stackRestore" (func $fimport$6 (param i32))) (import "env" "__growWasmMemory" (func $fimport$7 (param i32) (result i32))) (global $global$0 i32 (i32.const 1532)) (export "__wasm_call_ctors" (func $fimport$0)) (export "_Z3foov" (func $fimport$0)) (export "__errno_location" (func $0)) (export "setThrew" (func $fimport$3)) (export "malloc" (func $fimport$1)) (export "free" (func $fimport$2)) (export "__data_end" (global $global$0)) (export "stackSave" (func $fimport$4)) (export "stackAlloc" (func $fimport$5)) (export "stackRestore" (func $fimport$6)) (export "__growWasmMemory" (func $fimport$7)) (func $0 (result i32) (i32.const 1024) ) ;; custom section "sourceMappingURL", size 15 ;; custom section "sourceMappingURL", size 15 ;; custom section ".debug_info", size 58 ;; custom section ".debug_abbrev", size 39 ;; custom section ".debug_line", size 56 ;; custom section ".debug_str", size 212 ) binaryen-version_108/test/passes/dwarfdump.wasm000066400000000000000000000015131423707623100221040ustar00rootroot00000000000000asm`````env__wasm_call_ctorsenvdlmallocenvdlfreeenvsetThrewenv stackSaveenv stackAllocenv stackRestoreenv__growWasmMemoryAü • __wasm_call_ctors_Z3foov__errno_locationsetThrewmallocfree __data_end stackSave stackAlloc stackRestore__growWasmMemory A€ sourceMappingURLa.out.wasm.map sourceMappingURLa.out.wasm.mapF .debug_info6•›ÈÐ5 .debug_abbrev%.n: ; ?D .debug_line4û a.cpp !ß .debug_strclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)a.cpp/usr/local/google/home/azakai/Dev/emscripten_Z3foovfoobinaryen-version_108/test/passes/dwarfdump_roundtrip_dwarfdump.bin.txt000066400000000000000000000214161423707623100267060ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (58 bytes) Contains section .debug_abbrev (39 bytes) Contains section .debug_line (56 bytes) Contains section .debug_str (212 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_external DW_FORM_flag_present .debug_info contents: 0x00000000: Compile Unit: length = 0x00000036 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003a) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "a.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000009b] = "/usr/local/google/home/azakai/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000002) 0x00000026: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000002) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "_Z3foov") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d0] = "foo") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (3) DW_AT_external [DW_FORM_flag_present] (true) 0x00000039: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000034 version: 4 prologue_length: 0x0000001d min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "a.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000027: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002e: 14 address += 0, line += 2 0x0000000000000005 3 0 1 0 0 is_stmt 0x0000002f: 05 DW_LNS_set_column (1) 0x00000031: 0a DW_LNS_set_prologue_end 0x00000032: 21 address += 1, line += 1 0x0000000000000006 4 1 1 0 0 is_stmt prologue_end 0x00000033: 02 DW_LNS_advance_pc (1) 0x00000035: 00 DW_LNE_end_sequence 0x0000000000000007 4 1 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)" 0x00000095: "a.cpp" 0x0000009b: "/usr/local/google/home/azakai/Dev/emscripten" 0x000000c8: "_Z3foov" 0x000000d0: "foo" DWARF debug info ================ Contains section .debug_info (58 bytes) Contains section .debug_abbrev (39 bytes) Contains section .debug_line (39 bytes) Contains section .debug_str (212 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_external DW_FORM_flag_present .debug_info contents: 0x00000000: Compile Unit: length = 0x00000036 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003a) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "a.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000009b] = "/usr/local/google/home/azakai/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_high_pc [DW_FORM_data4] (0x00000000) 0x00000026: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_high_pc [DW_FORM_data4] (0x00000000) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "_Z3foov") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d0] = "foo") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (3) DW_AT_external [DW_FORM_flag_present] (true) 0x00000039: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000023 version: 4 prologue_length: 0x0000001d min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "a.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 .debug_str contents: 0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)" 0x00000095: "a.cpp" 0x0000009b: "/usr/local/google/home/azakai/Dev/emscripten" 0x000000c8: "_Z3foov" 0x000000d0: "foo" (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "__wasm_call_ctors" (func $fimport$0)) (import "env" "dlmalloc" (func $fimport$1 (param i32) (result i32))) (import "env" "dlfree" (func $fimport$2 (param i32))) (import "env" "setThrew" (func $fimport$3 (param i32 i32))) (import "env" "stackSave" (func $fimport$4 (result i32))) (import "env" "stackAlloc" (func $fimport$5 (param i32) (result i32))) (import "env" "stackRestore" (func $fimport$6 (param i32))) (import "env" "__growWasmMemory" (func $fimport$7 (param i32) (result i32))) (global $global$0 i32 (i32.const 1532)) (export "__wasm_call_ctors" (func $fimport$0)) (export "_Z3foov" (func $fimport$0)) (export "__errno_location" (func $0)) (export "setThrew" (func $fimport$3)) (export "malloc" (func $fimport$1)) (export "free" (func $fimport$2)) (export "__data_end" (global $global$0)) (export "stackSave" (func $fimport$4)) (export "stackAlloc" (func $fimport$5)) (export "stackRestore" (func $fimport$6)) (export "__growWasmMemory" (func $fimport$7)) (func $0 (result i32) (i32.const 1024) ) ;; custom section "sourceMappingURL", size 15 ;; custom section "sourceMappingURL", size 15 ;; custom section ".debug_info", size 58 ;; custom section ".debug_abbrev", size 39 ;; custom section ".debug_line", size 39 ;; custom section ".debug_str", size 212 ) binaryen-version_108/test/passes/dwarfdump_roundtrip_dwarfdump.wasm000066400000000000000000000015131423707623100262630ustar00rootroot00000000000000asm`````env__wasm_call_ctorsenvdlmallocenvdlfreeenvsetThrewenv stackSaveenv stackAllocenv stackRestoreenv__growWasmMemoryAü • __wasm_call_ctors_Z3foov__errno_locationsetThrewmallocfree __data_end stackSave stackAlloc stackRestore__growWasmMemory A€ sourceMappingURLa.out.wasm.map sourceMappingURLa.out.wasm.mapF .debug_info6•›ÈÐ5 .debug_abbrev%.n: ; ?D .debug_line4û a.cpp !ß .debug_strclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)a.cpp/usr/local/google/home/azakai/Dev/emscripten_Z3foovfoobinaryen-version_108/test/passes/emit-js-wrapper=a.js.txt000066400000000000000000000036521423707623100236700ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i64_f32_f64_=>_none (func (param i32 i64 f32 f64))) (type $i32_f32_f64_=>_none (func (param i32 f32 f64))) (type $i32_f32_f64_=>_i64 (func (param i32 f32 f64) (result i64))) (type $i32_i32_i32_f32_f64_=>_none (func (param i32 i32 i32 f32 f64))) (type $i32_f32_f64_=>_i32 (func (param i32 f32 f64) (result i32))) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (memory $0 256 256) (export "add" (func $add)) (export "no_return" (func $no-return)) (export "types" (func $legalstub$types)) (export "types2" (func $types2)) (export "types3" (func $legalstub$types3)) (func $add (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) (func $unexported (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) (func $no-return (param $x i32) (drop (i32.add (local.get $x) (local.get $x) ) ) ) (func $types (param $x i32) (param $y i64) (param $z f32) (param $w f64) (nop) ) (func $types2 (param $x i32) (param $z f32) (param $w f64) (nop) ) (func $types3 (param $x i32) (param $z f32) (param $w f64) (result i64) (i64.const 1) ) (func $legalstub$types (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f32) (param $4 f64) (call $types (local.get $0) (i64.or (i64.extend_i32_u (local.get $1) ) (i64.shl (i64.extend_i32_u (local.get $2) ) (i64.const 32) ) ) (local.get $3) (local.get $4) ) ) (func $legalstub$types3 (param $0 i32) (param $1 f32) (param $2 f64) (result i32) (local $3 i64) (local.set $3 (call $types3 (local.get $0) (local.get $1) (local.get $2) ) ) (call $setTempRet0 (i32.wrap_i64 (i64.shr_u (local.get $3) (i64.const 32) ) ) ) (i32.wrap_i64 (local.get $3) ) ) ) binaryen-version_108/test/passes/emit-js-wrapper=a.js.wast000066400000000000000000000014631423707623100240250ustar00rootroot00000000000000(module (memory $0 256 256) (export "add" (func $add)) (export "no_return" (func $no-return)) ;; note exported name is slightly different (export "types" (func $types)) (export "types2" (func $types2)) (export "types3" (func $types3)) (func $add (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) (func $unexported (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) (func $no-return (param $x i32) (drop (i32.add (local.get $x) (local.get $x) ) ) ) (func $types (param $x i32) (param $y i64) (param $z f32) (param $w f64) (nop) ) (func $types2 (param $x i32) (param $z f32) (param $w f64) (nop) ) (func $types3 (param $x i32) (param $z f32) (param $w f64) (result i64) (i64.const 1) ) ) binaryen-version_108/test/passes/emit-js-wrapper=a.js.wast.js000066400000000000000000000055461423707623100244460ustar00rootroot00000000000000if (typeof console === 'undefined') { console = { log: print }; } var tempRet0; var binary; if (typeof process === 'object' && typeof require === 'function' /* node.js detection */) { var args = process.argv.slice(2); binary = require('fs').readFileSync(args[0]); if (!binary.buffer) binary = new Uint8Array(binary); } else { var args; if (typeof scriptArgs != 'undefined') { args = scriptArgs; } else if (typeof arguments != 'undefined') { args = arguments; } if (typeof readbuffer === 'function') { binary = new Uint8Array(readbuffer(args[0])); } else { binary = read(args[0], 'binary'); } } function literal(x, type) { var ret = ''; switch (type) { case 'i32': ret += (x | 0); break; case 'f32': case 'f64': { if (x == 0 && (1 / x) < 0) ret += '-'; ret += Number(x).toString(); break; } // For anything else, just print the type. default: ret += type; break; } return ret; } var instance = new WebAssembly.Instance(new WebAssembly.Module(binary), { 'fuzzing-support': { 'log-i32': function(x) { console.log('[LoggingExternalInterface logging ' + literal(x, 'i32') + ']') }, 'log-i64': function(x, y) { console.log('[LoggingExternalInterface logging ' + literal(x, 'i32') + ' ' + literal(y, 'i32') + ']') }, 'log-f32': function(x) { console.log('[LoggingExternalInterface logging ' + literal(x, 'f64') + ']') }, 'log-f64': function(x) { console.log('[LoggingExternalInterface logging ' + literal(x, 'f64') + ']') }, }, 'env': { 'setTempRet0': function(x) { tempRet0 = x }, 'getTempRet0': function() { return tempRet0 }, }, }); if (instance.exports.hangLimitInitializer) instance.exports.hangLimitInitializer(); try { console.log('[fuzz-exec] calling add'); console.log('[fuzz-exec] note result: add => ' + literal(instance.exports.add(0, 0), 'i32')); } catch (e) { console.log('exception!' /* + e */); } if (instance.exports.hangLimitInitializer) instance.exports.hangLimitInitializer(); try { console.log('[fuzz-exec] calling no_return'); instance.exports.no_return(0); } catch (e) { console.log('exception!' /* + e */); } if (instance.exports.hangLimitInitializer) instance.exports.hangLimitInitializer(); try { console.log('[fuzz-exec] calling types'); instance.exports.types(0, 0, 0, 0, 0); } catch (e) { console.log('exception!' /* + e */); } if (instance.exports.hangLimitInitializer) instance.exports.hangLimitInitializer(); try { console.log('[fuzz-exec] calling types2'); instance.exports.types2(0, 0, 0); } catch (e) { console.log('exception!' /* + e */); } if (instance.exports.hangLimitInitializer) instance.exports.hangLimitInitializer(); try { console.log('[fuzz-exec] calling types3'); console.log('[fuzz-exec] note result: types3 => ' + literal(instance.exports.types3(0, 0, 0), 'i32')); } catch (e) { console.log('exception!' /* + e */); } binaryen-version_108/test/passes/emit-spec-wrapper=a.wat.txt000066400000000000000000000020471423707623100243620ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i64_f32_f64_=>_none (func (param i32 i64 f32 f64))) (type $i32_f32_f64_=>_none (func (param i32 f32 f64))) (type $i32_f32_f64_=>_i64 (func (param i32 f32 f64) (result i64))) (memory $0 256 256) (export "add" (func $add)) (export "no_return" (func $no-return)) (export "types" (func $types)) (export "types2" (func $types2)) (export "types3" (func $types3)) (func $add (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) (func $unexported (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) (func $no-return (param $x i32) (drop (i32.add (local.get $x) (local.get $x) ) ) ) (func $types (param $x i32) (param $y i64) (param $z f32) (param $w f64) (nop) ) (func $types2 (param $x i32) (param $z f32) (param $w f64) (nop) ) (func $types3 (param $x i32) (param $z f32) (param $w f64) (result i64) (i64.const 1) ) ) binaryen-version_108/test/passes/emit-spec-wrapper=a.wat.wast000066400000000000000000000014631423707623100245220ustar00rootroot00000000000000(module (memory $0 256 256) (export "add" (func $add)) (export "no_return" (func $no-return)) ;; note exported name is slightly different (export "types" (func $types)) (export "types2" (func $types2)) (export "types3" (func $types3)) (func $add (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) (func $unexported (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) (func $no-return (param $x i32) (drop (i32.add (local.get $x) (local.get $x) ) ) ) (func $types (param $x i32) (param $y i64) (param $z f32) (param $w f64) (nop) ) (func $types2 (param $x i32) (param $z f32) (param $w f64) (nop) ) (func $types3 (param $x i32) (param $z f32) (param $w f64) (result i64) (i64.const 1) ) ) binaryen-version_108/test/passes/emit-spec-wrapper=a.wat.wast.wat000066400000000000000000000006641423707623100253160ustar00rootroot00000000000000(invoke "hangLimitInitializer") (invoke "add" (i32.const 0) (i32.const 0) ) (invoke "hangLimitInitializer") (invoke "no_return" (i32.const 0) ) (invoke "hangLimitInitializer") (invoke "types" (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) ) (invoke "hangLimitInitializer") (invoke "types2" (i32.const 0) (f32.const 0) (f64.const 0) ) (invoke "hangLimitInitializer") (invoke "types3" (i32.const 0) (f32.const 0) (f64.const 0) ) binaryen-version_108/test/passes/fannkuch0_dwarf.bin.txt000066400000000000000000011043141423707623100235760ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (640 bytes) Contains section .debug_ranges (32 bytes) Contains section .debug_abbrev (222 bytes) Contains section .debug_line (1558 bytes) Contains section .debug_str (409 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [3] DW_TAG_structure_type DW_CHILDREN_yes DW_AT_calling_convention DW_FORM_data1 DW_AT_name DW_FORM_strp DW_AT_byte_size DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [4] DW_TAG_member DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_data_member_location DW_FORM_data1 [5] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [6] DW_TAG_namespace DW_CHILDREN_yes DW_AT_name DW_FORM_strp [7] DW_TAG_typedef DW_CHILDREN_no DW_AT_type DW_FORM_ref4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [8] DW_TAG_unspecified_type DW_CHILDREN_no DW_AT_name DW_FORM_strp [9] DW_TAG_imported_declaration DW_CHILDREN_no DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_import DW_FORM_ref4 [10] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [11] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_location DW_FORM_exprloc DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [12] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_exprloc DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [13] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [14] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [15] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [16] DW_TAG_label DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_low_pc DW_FORM_addr [17] DW_TAG_pointer_type DW_CHILDREN_no .debug_info contents: 0x00000000: Compile Unit: length = 0x0000027c version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000280) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 2d7a8cf90478cd845ffb39763b0e95b7715322d2)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "tests/fannkuch.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a8] = "/home/alon/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000006, 0x0000088c) [0x0000088e, 0x000009dc) [0x000009de, 0x00001042)) 0x00000026: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x002b => {0x0000002b} "worker_args") 0x0000002b: DW_TAG_structure_type [3] * DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cf] = "worker_args") DW_AT_byte_size [DW_FORM_data1] (0x0c) DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (20) 0x00000034: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "i") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x00) 0x00000040: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "n") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x04) 0x0000004c: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ca] = "next") DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (22) DW_AT_data_member_location [DW_FORM_data1] (0x08) 0x00000058: NULL 0x00000059: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c4] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000060: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000065: DW_TAG_namespace [6] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000db] = "std") 0x0000006a: DW_TAG_typedef [7] DW_AT_type [DW_FORM_ref4] (cu + 0x0076 => {0x00000076} "decltype(nullptr)") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000f1] = "nullptr_t") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/system/include/libcxx/__nullptr") DW_AT_decl_line [DW_FORM_data1] (57) 0x00000075: NULL 0x00000076: DW_TAG_unspecified_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000df] = "decltype(nullptr)") 0x0000007b: DW_TAG_imported_declaration [9] DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/system/include/libcxx/stddef.h") DW_AT_decl_line [DW_FORM_data1] (52) DW_AT_import [DW_FORM_ref4] (cu + 0x006a => {0x0000006a}) 0x00000082: DW_TAG_subprogram [10] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006) DW_AT_high_pc [DW_FORM_data4] (0x00000886) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000fb] = "_Z15fannkuch_workerPv") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000111] = "fannkuch_worker") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000099: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x3c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013d] = "_arg") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x026d => {0x0000026d} "*") 0x000000a7: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x38) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000142] = "args") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (28) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000000b5: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x34) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000147] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000c3: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x30) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014d] = "count") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000d1: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x2c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000153] = "perm") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000df: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x28) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000158] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000ed: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x24) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000fb: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x20) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "i") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000109: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x1c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "n") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000117: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x18) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000167] = "r") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000125: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000169] = "j") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000133: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x10) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016b] = "k") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000141: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0xc) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016d] = "tmp") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000014f: DW_TAG_lexical_block [13] * DW_AT_low_pc [DW_FORM_addr] (0x00000000000006b4) DW_AT_high_pc [DW_FORM_data4] (0x00000135) 0x00000158: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x8) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000171] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (74) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000166: NULL 0x00000167: NULL 0x00000168: DW_TAG_subprogram [14] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000088e) DW_AT_high_pc [DW_FORM_data4] (0x0000014e) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000121] = "main") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000017b: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x18) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "argc") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000189: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000179] = "argv") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x026e => {0x0000026e} "char**") 0x00000197: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x10) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "n") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (153) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001a5: NULL 0x000001a6: DW_TAG_subprogram [15] * DW_AT_low_pc [DW_FORM_addr] (0x00000000000009de) DW_AT_high_pc [DW_FORM_data4] (0x00000664) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000126] = "_ZL8fannkuchi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000134] = "fannkuch") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001bd: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x2c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "n") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001cb: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x28) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000142] = "args") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001d9: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x24) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000183] = "targs") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001e7: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x20) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000189] = "showmax") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (90) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001f5: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x1c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000147] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x00000203: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x18) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014d] = "count") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x00000211: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "i") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000021f: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x10) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000167] = "r") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000022d: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0xc) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000158] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000023b: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x8) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000249: DW_TAG_label [16] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "cleanup") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (137) DW_AT_low_pc [DW_FORM_addr] (0x0000000000000f10) 0x00000254: DW_TAG_lexical_block [13] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000d62) DW_AT_high_pc [DW_FORM_data4] (0x00000106) 0x0000025d: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x4) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000171] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (125) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000026b: NULL 0x0000026c: NULL 0x0000026d: DW_TAG_pointer_type [17] 0x0000026e: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0273 => {0x00000273} "char*") 0x00000273: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0278 => {0x00000278} "char") 0x00000278: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017e] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x0000027f: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000612 version: 4 prologue_length: 0x00000059 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 include_directories[ 1] = "tests" include_directories[ 2] = "system/include/libcxx" file_names[ 1]: name: "fannkuch.cpp" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 2]: name: "__nullptr" dir_index: 2 mod_time: 0x00000000 length: 0x00000000 file_names[ 3]: name: "stddef.h" dir_index: 2 mod_time: 0x00000000 length: 0x00000000 0x00000063: 00 DW_LNE_set_address (0x0000000000000006) 0x0000006a: 03 DW_LNS_advance_line (27) 0x0000006c: 01 DW_LNS_copy 0x0000000000000006 27 0 1 0 0 is_stmt 0x0000006d: 05 DW_LNS_set_column (45) 0x0000006f: 0a DW_LNS_set_prologue_end 0x00000070: 02 DW_LNS_advance_pc (43) 0x00000072: 13 address += 0, line += 1 0x0000000000000031 28 45 1 0 0 is_stmt prologue_end 0x00000073: 05 DW_LNS_set_column (24) 0x00000075: 06 DW_LNS_negate_stmt 0x00000076: 74 address += 7, line += 0 0x0000000000000038 28 24 1 0 0 0x00000077: 05 DW_LNS_set_column (13) 0x00000079: 06 DW_LNS_negate_stmt 0x0000007a: 78 address += 7, line += 4 0x000000000000003f 32 13 1 0 0 is_stmt 0x0000007b: 05 DW_LNS_set_column (8) 0x0000007d: 75 address += 7, line += 1 0x0000000000000046 33 8 1 0 0 is_stmt 0x0000007e: 05 DW_LNS_set_column (14) 0x00000080: 06 DW_LNS_negate_stmt 0x00000081: 74 address += 7, line += 0 0x000000000000004d 33 14 1 0 0 0x00000082: 05 DW_LNS_set_column (6) 0x00000084: 74 address += 7, line += 0 0x0000000000000054 33 6 1 0 0 0x00000085: 05 DW_LNS_set_column (25) 0x00000087: 06 DW_LNS_negate_stmt 0x00000088: 75 address += 7, line += 1 0x000000000000005b 34 25 1 0 0 is_stmt 0x00000089: 05 DW_LNS_set_column (27) 0x0000008b: 06 DW_LNS_negate_stmt 0x0000008c: 74 address += 7, line += 0 0x0000000000000062 34 27 1 0 0 0x0000008d: 05 DW_LNS_set_column (18) 0x0000008f: ac address += 11, line += 0 0x000000000000006d 34 18 1 0 0 0x00000090: 05 DW_LNS_set_column (10) 0x00000092: 9e address += 10, line += 0 0x0000000000000077 34 10 1 0 0 0x00000093: 05 DW_LNS_set_column (24) 0x00000095: 06 DW_LNS_negate_stmt 0x00000096: 75 address += 7, line += 1 0x000000000000007e 35 24 1 0 0 is_stmt 0x00000097: 05 DW_LNS_set_column (26) 0x00000099: 06 DW_LNS_negate_stmt 0x0000009a: 74 address += 7, line += 0 0x0000000000000085 35 26 1 0 0 0x0000009b: 05 DW_LNS_set_column (17) 0x0000009d: ac address += 11, line += 0 0x0000000000000090 35 17 1 0 0 0x0000009e: 05 DW_LNS_set_column (9) 0x000000a0: 9e address += 10, line += 0 0x000000000000009a 35 9 1 0 0 0x000000a1: 05 DW_LNS_set_column (25) 0x000000a3: 06 DW_LNS_negate_stmt 0x000000a4: 75 address += 7, line += 1 0x00000000000000a1 36 25 1 0 0 is_stmt 0x000000a5: 05 DW_LNS_set_column (27) 0x000000a7: 06 DW_LNS_negate_stmt 0x000000a8: 74 address += 7, line += 0 0x00000000000000a8 36 27 1 0 0 0x000000a9: 05 DW_LNS_set_column (18) 0x000000ab: ac address += 11, line += 0 0x00000000000000b3 36 18 1 0 0 0x000000ac: 05 DW_LNS_set_column (10) 0x000000ae: 9e address += 10, line += 0 0x00000000000000bd 36 10 1 0 0 0x000000af: 05 DW_LNS_set_column (11) 0x000000b1: 06 DW_LNS_negate_stmt 0x000000b2: 75 address += 7, line += 1 0x00000000000000c4 37 11 1 0 0 is_stmt 0x000000b3: 05 DW_LNS_set_column (16) 0x000000b5: 06 DW_LNS_negate_stmt 0x000000b6: 74 address += 7, line += 0 0x00000000000000cb 37 16 1 0 0 0x000000b7: 05 DW_LNS_set_column (20) 0x000000b9: ac address += 11, line += 0 0x00000000000000d6 37 20 1 0 0 0x000000ba: 05 DW_LNS_set_column (18) 0x000000bc: 74 address += 7, line += 0 0x00000000000000dd 37 18 1 0 0 0x000000bd: 05 DW_LNS_set_column (4) 0x000000bf: e4 address += 15, line += 0 0x00000000000000ec 37 4 1 0 0 0x000000c0: 05 DW_LNS_set_column (18) 0x000000c2: 06 DW_LNS_negate_stmt 0x000000c3: f3 address += 16, line += 1 0x00000000000000fc 38 18 1 0 0 is_stmt 0x000000c4: 05 DW_LNS_set_column (7) 0x000000c6: 06 DW_LNS_negate_stmt 0x000000c7: 74 address += 7, line += 0 0x0000000000000103 38 7 1 0 0 0x000000c8: 05 DW_LNS_set_column (13) 0x000000ca: 74 address += 7, line += 0 0x000000000000010a 38 13 1 0 0 0x000000cb: 05 DW_LNS_set_column (7) 0x000000cd: 74 address += 7, line += 0 0x0000000000000111 38 7 1 0 0 0x000000ce: 05 DW_LNS_set_column (16) 0x000000d0: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000000d1: 20 address += 1, line += 0 0x0000000000000123 38 16 1 0 0 0x000000d2: 05 DW_LNS_set_column (24) 0x000000d4: 06 DW_LNS_negate_stmt 0x000000d5: 73 address += 7, line += -1 0x000000000000012a 37 24 1 0 0 is_stmt 0x000000d6: 05 DW_LNS_set_column (4) 0x000000d8: 06 DW_LNS_negate_stmt 0x000000d9: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000000da: 82 address += 8, line += 0 0x0000000000000143 37 4 1 0 0 0x000000db: 2e address += 2, line += 0 0x0000000000000145 37 4 1 0 0 0x000000dc: 05 DW_LNS_set_column (21) 0x000000de: 06 DW_LNS_negate_stmt 0x000000df: 30 address += 2, line += 2 0x0000000000000147 39 21 1 0 0 is_stmt 0x000000e0: 05 DW_LNS_set_column (23) 0x000000e2: 06 DW_LNS_negate_stmt 0x000000e3: 74 address += 7, line += 0 0x000000000000014e 39 23 1 0 0 0x000000e4: 05 DW_LNS_set_column (4) 0x000000e6: ac address += 11, line += 0 0x0000000000000159 39 4 1 0 0 0x000000e7: 05 DW_LNS_set_column (10) 0x000000e9: 74 address += 7, line += 0 0x0000000000000160 39 10 1 0 0 0x000000ea: 05 DW_LNS_set_column (16) 0x000000ec: 74 address += 7, line += 0 0x0000000000000167 39 16 1 0 0 0x000000ed: 05 DW_LNS_set_column (4) 0x000000ef: 74 address += 7, line += 0 0x000000000000016e 39 4 1 0 0 0x000000f0: 05 DW_LNS_set_column (19) 0x000000f2: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000000f3: 20 address += 1, line += 0 0x0000000000000180 39 19 1 0 0 0x000000f4: 06 DW_LNS_negate_stmt 0x000000f5: 75 address += 7, line += 1 0x0000000000000187 40 19 1 0 0 is_stmt 0x000000f6: 05 DW_LNS_set_column (25) 0x000000f8: 06 DW_LNS_negate_stmt 0x000000f9: 74 address += 7, line += 0 0x000000000000018e 40 25 1 0 0 0x000000fa: 05 DW_LNS_set_column (4) 0x000000fc: 74 address += 7, line += 0 0x0000000000000195 40 4 1 0 0 0x000000fd: 05 DW_LNS_set_column (10) 0x000000ff: 74 address += 7, line += 0 0x000000000000019c 40 10 1 0 0 0x00000100: 05 DW_LNS_set_column (12) 0x00000102: 74 address += 7, line += 0 0x00000000000001a3 40 12 1 0 0 0x00000103: 05 DW_LNS_set_column (4) 0x00000105: ac address += 11, line += 0 0x00000000000001ae 40 4 1 0 0 0x00000106: 05 DW_LNS_set_column (17) 0x00000108: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000109: 20 address += 1, line += 0 0x00000000000001c0 40 17 1 0 0 0x0000010a: 05 DW_LNS_set_column (8) 0x0000010c: 06 DW_LNS_negate_stmt 0x0000010d: 75 address += 7, line += 1 0x00000000000001c7 41 8 1 0 0 is_stmt 0x0000010e: 05 DW_LNS_set_column (6) 0x00000110: 06 DW_LNS_negate_stmt 0x00000111: 74 address += 7, line += 0 0x00000000000001ce 41 6 1 0 0 0x00000112: 03 DW_LNS_advance_line (0) 0x00000114: 74 address += 7, line += 0 0x00000000000001d5 0 6 1 0 0 0x00000115: 05 DW_LNS_set_column (14) 0x00000117: 06 DW_LNS_negate_stmt 0x00000118: 03 DW_LNS_advance_line (44) 0x0000011a: 9e address += 10, line += 0 0x00000000000001df 44 14 1 0 0 is_stmt 0x0000011b: 05 DW_LNS_set_column (16) 0x0000011d: 06 DW_LNS_negate_stmt 0x0000011e: 74 address += 7, line += 0 0x00000000000001e6 44 16 1 0 0 0x0000011f: 05 DW_LNS_set_column (7) 0x00000121: e4 address += 15, line += 0 0x00000000000001f5 44 7 1 0 0 0x00000122: 05 DW_LNS_set_column (25) 0x00000124: 06 DW_LNS_negate_stmt 0x00000125: f3 address += 16, line += 1 0x0000000000000205 45 25 1 0 0 is_stmt 0x00000126: 05 DW_LNS_set_column (10) 0x00000128: 06 DW_LNS_negate_stmt 0x00000129: 74 address += 7, line += 0 0x000000000000020c 45 10 1 0 0 0x0000012a: 05 DW_LNS_set_column (16) 0x0000012c: 74 address += 7, line += 0 0x0000000000000213 45 16 1 0 0 0x0000012d: 05 DW_LNS_set_column (18) 0x0000012f: 74 address += 7, line += 0 0x000000000000021a 45 18 1 0 0 0x00000130: 05 DW_LNS_set_column (10) 0x00000132: ac address += 11, line += 0 0x0000000000000225 45 10 1 0 0 0x00000133: 05 DW_LNS_set_column (23) 0x00000135: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000136: 20 address += 1, line += 0 0x0000000000000237 45 23 1 0 0 0x00000137: 05 DW_LNS_set_column (22) 0x00000139: 06 DW_LNS_negate_stmt 0x0000013a: 73 address += 7, line += -1 0x000000000000023e 44 22 1 0 0 is_stmt 0x0000013b: 05 DW_LNS_set_column (7) 0x0000013d: 06 DW_LNS_negate_stmt 0x0000013e: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000013f: 82 address += 8, line += 0 0x0000000000000257 44 7 1 0 0 0x00000140: 2e address += 2, line += 0 0x0000000000000259 44 7 1 0 0 0x00000141: 05 DW_LNS_set_column (11) 0x00000143: 06 DW_LNS_negate_stmt 0x00000144: 30 address += 2, line += 2 0x000000000000025b 46 11 1 0 0 is_stmt 0x00000145: 05 DW_LNS_set_column (25) 0x00000147: 06 DW_LNS_negate_stmt 0x00000148: d6 address += 14, line += 0 0x0000000000000269 46 25 1 0 0 0x00000149: 05 DW_LNS_set_column (28) 0x0000014b: 74 address += 7, line += 0 0x0000000000000270 46 28 1 0 0 0x0000014c: 05 DW_LNS_set_column (34) 0x0000014e: 74 address += 7, line += 0 0x0000000000000277 46 34 1 0 0 0x0000014f: 05 DW_LNS_set_column (36) 0x00000151: 74 address += 7, line += 0 0x000000000000027e 46 36 1 0 0 0x00000152: 05 DW_LNS_set_column (28) 0x00000154: ac address += 11, line += 0 0x0000000000000289 46 28 1 0 0 0x00000155: 05 DW_LNS_set_column (44) 0x00000157: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000158: 82 address += 8, line += 0 0x00000000000002a2 46 44 1 0 0 0x00000159: 05 DW_LNS_set_column (46) 0x0000015b: 74 address += 7, line += 0 0x00000000000002a9 46 46 1 0 0 0x0000015c: 05 DW_LNS_set_column (41) 0x0000015e: ac address += 11, line += 0 0x00000000000002b4 46 41 1 0 0 0x0000015f: 05 DW_LNS_set_column (11) 0x00000161: e4 address += 15, line += 0 0x00000000000002c3 46 11 1 0 0 0x00000162: 03 DW_LNS_advance_line (0) 0x00000164: f2 address += 16, line += 0 0x00000000000002d3 0 11 1 0 0 0x00000165: 05 DW_LNS_set_column (17) 0x00000167: 06 DW_LNS_negate_stmt 0x00000168: 03 DW_LNS_advance_line (47) 0x0000016a: 4a address += 4, line += 0 0x00000000000002d7 47 17 1 0 0 is_stmt 0x0000016b: 05 DW_LNS_set_column (22) 0x0000016d: 06 DW_LNS_negate_stmt 0x0000016e: 74 address += 7, line += 0 0x00000000000002de 47 22 1 0 0 0x0000016f: 05 DW_LNS_set_column (26) 0x00000171: ac address += 11, line += 0 0x00000000000002e9 47 26 1 0 0 0x00000172: 05 DW_LNS_set_column (24) 0x00000174: 74 address += 7, line += 0 0x00000000000002f0 47 24 1 0 0 0x00000175: 05 DW_LNS_set_column (10) 0x00000177: e4 address += 15, line += 0 0x00000000000002ff 47 10 1 0 0 0x00000178: 05 DW_LNS_set_column (23) 0x0000017a: 06 DW_LNS_negate_stmt 0x0000017b: f3 address += 16, line += 1 0x000000000000030f 48 23 1 0 0 is_stmt 0x0000017c: 05 DW_LNS_set_column (29) 0x0000017e: 06 DW_LNS_negate_stmt 0x0000017f: 74 address += 7, line += 0 0x0000000000000316 48 29 1 0 0 0x00000180: 05 DW_LNS_set_column (23) 0x00000182: 74 address += 7, line += 0 0x000000000000031d 48 23 1 0 0 0x00000183: 05 DW_LNS_set_column (13) 0x00000185: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000186: 82 address += 8, line += 0 0x0000000000000336 48 13 1 0 0 0x00000187: 05 DW_LNS_set_column (18) 0x00000189: 74 address += 7, line += 0 0x000000000000033d 48 18 1 0 0 0x0000018a: 05 DW_LNS_set_column (13) 0x0000018c: 74 address += 7, line += 0 0x0000000000000344 48 13 1 0 0 0x0000018d: 05 DW_LNS_set_column (21) 0x0000018f: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000190: 20 address += 1, line += 0 0x0000000000000356 48 21 1 0 0 0x00000191: 05 DW_LNS_set_column (30) 0x00000193: 06 DW_LNS_negate_stmt 0x00000194: 73 address += 7, line += -1 0x000000000000035d 47 30 1 0 0 is_stmt 0x00000195: 05 DW_LNS_set_column (10) 0x00000197: 06 DW_LNS_negate_stmt 0x00000198: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000199: 82 address += 8, line += 0 0x0000000000000376 47 10 1 0 0 0x0000019a: 2e address += 2, line += 0 0x0000000000000378 47 10 1 0 0 0x0000019b: 05 DW_LNS_set_column (16) 0x0000019d: 06 DW_LNS_negate_stmt 0x0000019e: 68 address += 6, line += 2 0x000000000000037e 49 16 1 0 0 is_stmt 0x0000019f: 05 DW_LNS_set_column (14) 0x000001a1: 75 address += 7, line += 1 0x0000000000000385 50 14 1 0 0 is_stmt 0x000001a2: 05 DW_LNS_set_column (12) 0x000001a4: 06 DW_LNS_negate_stmt 0x000001a5: d6 address += 14, line += 0 0x0000000000000393 50 12 1 0 0 0x000001a6: 03 DW_LNS_advance_line (0) 0x000001a8: 74 address += 7, line += 0 0x000000000000039a 0 12 1 0 0 0x000001a9: 05 DW_LNS_set_column (20) 0x000001ab: 06 DW_LNS_negate_stmt 0x000001ac: 03 DW_LNS_advance_line (52) 0x000001ae: 66 address += 6, line += 0 0x00000000000003a0 52 20 1 0 0 is_stmt 0x000001af: 05 DW_LNS_set_column (29) 0x000001b1: 06 DW_LNS_negate_stmt 0x000001b2: 74 address += 7, line += 0 0x00000000000003a7 52 29 1 0 0 0x000001b3: 05 DW_LNS_set_column (31) 0x000001b5: 74 address += 7, line += 0 0x00000000000003ae 52 31 1 0 0 0x000001b6: 05 DW_LNS_set_column (27) 0x000001b8: ac address += 11, line += 0 0x00000000000003b9 52 27 1 0 0 0x000001b9: 05 DW_LNS_set_column (36) 0x000001bb: 74 address += 7, line += 0 0x00000000000003c0 52 36 1 0 0 0x000001bc: 05 DW_LNS_set_column (40) 0x000001be: ac address += 11, line += 0 0x00000000000003cb 52 40 1 0 0 0x000001bf: 05 DW_LNS_set_column (38) 0x000001c1: 74 address += 7, line += 0 0x00000000000003d2 52 38 1 0 0 0x000001c2: 05 DW_LNS_set_column (13) 0x000001c4: e4 address += 15, line += 0 0x00000000000003e1 52 13 1 0 0 0x000001c5: 05 DW_LNS_set_column (22) 0x000001c7: 06 DW_LNS_negate_stmt 0x000001c8: f3 address += 16, line += 1 0x00000000000003f1 53 22 1 0 0 is_stmt 0x000001c9: 05 DW_LNS_set_column (27) 0x000001cb: 06 DW_LNS_negate_stmt 0x000001cc: 74 address += 7, line += 0 0x00000000000003f8 53 27 1 0 0 0x000001cd: 05 DW_LNS_set_column (22) 0x000001cf: 82 address += 8, line += 0 0x0000000000000400 53 22 1 0 0 0x000001d0: 05 DW_LNS_set_column (20) 0x000001d2: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000001d3: f2 address += 16, line += 0 0x0000000000000421 53 20 1 0 0 0x000001d4: 05 DW_LNS_set_column (26) 0x000001d6: 06 DW_LNS_negate_stmt 0x000001d7: 83 address += 8, line += 1 0x0000000000000429 54 26 1 0 0 is_stmt 0x000001d8: 05 DW_LNS_set_column (31) 0x000001da: 06 DW_LNS_negate_stmt 0x000001db: 82 address += 8, line += 0 0x0000000000000431 54 31 1 0 0 0x000001dc: 05 DW_LNS_set_column (26) 0x000001de: 82 address += 8, line += 0 0x0000000000000439 54 26 1 0 0 0x000001df: 05 DW_LNS_set_column (16) 0x000001e1: 02 DW_LNS_advance_pc (34) 0x000001e3: 12 address += 0, line += 0 0x000000000000045b 54 16 1 0 0 0x000001e4: 05 DW_LNS_set_column (21) 0x000001e6: 82 address += 8, line += 0 0x0000000000000463 54 21 1 0 0 0x000001e7: 05 DW_LNS_set_column (16) 0x000001e9: 82 address += 8, line += 0 0x000000000000046b 54 16 1 0 0 0x000001ea: 05 DW_LNS_set_column (24) 0x000001ec: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000001ed: 82 address += 8, line += 0 0x0000000000000484 54 24 1 0 0 0x000001ee: 05 DW_LNS_set_column (26) 0x000001f0: 06 DW_LNS_negate_stmt 0x000001f1: 91 address += 9, line += 1 0x000000000000048d 55 26 1 0 0 is_stmt 0x000001f2: 05 DW_LNS_set_column (16) 0x000001f4: 06 DW_LNS_negate_stmt 0x000001f5: 82 address += 8, line += 0 0x0000000000000495 55 16 1 0 0 0x000001f6: 05 DW_LNS_set_column (21) 0x000001f8: 82 address += 8, line += 0 0x000000000000049d 55 21 1 0 0 0x000001f9: 05 DW_LNS_set_column (16) 0x000001fb: 82 address += 8, line += 0 0x00000000000004a5 55 16 1 0 0 0x000001fc: 05 DW_LNS_set_column (24) 0x000001fe: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000001ff: 82 address += 8, line += 0 0x00000000000004be 55 24 1 0 0 0x00000200: 05 DW_LNS_set_column (44) 0x00000202: 06 DW_LNS_negate_stmt 0x00000203: 8d address += 9, line += -3 0x00000000000004c7 52 44 1 0 0 is_stmt 0x00000204: 05 DW_LNS_set_column (49) 0x00000206: 06 DW_LNS_negate_stmt 0x00000207: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000208: d6 address += 14, line += 0 0x00000000000004e6 52 49 1 0 0 0x00000209: 05 DW_LNS_set_column (13) 0x0000020b: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000020c: d6 address += 14, line += 0 0x0000000000000505 52 13 1 0 0 0x0000020d: 2e address += 2, line += 0 0x0000000000000507 52 13 1 0 0 0x0000020e: 05 DW_LNS_set_column (18) 0x00000210: 06 DW_LNS_negate_stmt 0x00000211: 33 address += 2, line += 5 0x0000000000000509 57 18 1 0 0 is_stmt 0x00000212: 05 DW_LNS_set_column (19) 0x00000214: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000215: d7 address += 14, line += 1 0x0000000000000528 58 19 1 0 0 is_stmt 0x00000216: 05 DW_LNS_set_column (24) 0x00000218: 06 DW_LNS_negate_stmt 0x00000219: 82 address += 8, line += 0 0x0000000000000530 58 24 1 0 0 0x0000021a: 05 DW_LNS_set_column (19) 0x0000021c: 82 address += 8, line += 0 0x0000000000000538 58 19 1 0 0 0x0000021d: 05 DW_LNS_set_column (17) 0x0000021f: 02 DW_LNS_advance_pc (34) 0x00000221: 12 address += 0, line += 0 0x000000000000055a 58 17 1 0 0 0x00000222: 05 DW_LNS_set_column (23) 0x00000224: 06 DW_LNS_negate_stmt 0x00000225: 83 address += 8, line += 1 0x0000000000000562 59 23 1 0 0 is_stmt 0x00000226: 05 DW_LNS_set_column (13) 0x00000228: 06 DW_LNS_negate_stmt 0x00000229: 82 address += 8, line += 0 0x000000000000056a 59 13 1 0 0 0x0000022a: 05 DW_LNS_set_column (18) 0x0000022c: 82 address += 8, line += 0 0x0000000000000572 59 18 1 0 0 0x0000022d: 05 DW_LNS_set_column (13) 0x0000022f: 82 address += 8, line += 0 0x000000000000057a 59 13 1 0 0 0x00000230: 05 DW_LNS_set_column (21) 0x00000232: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000233: 82 address += 8, line += 0 0x0000000000000593 59 21 1 0 0 0x00000234: 05 DW_LNS_set_column (17) 0x00000236: 06 DW_LNS_negate_stmt 0x00000237: 91 address += 9, line += 1 0x000000000000059c 60 17 1 0 0 is_stmt 0x00000238: 05 DW_LNS_set_column (15) 0x0000023a: 06 DW_LNS_negate_stmt 0x0000023b: 82 address += 8, line += 0 0x00000000000005a4 60 15 1 0 0 0x0000023c: 05 DW_LNS_set_column (19) 0x0000023e: 06 DW_LNS_negate_stmt 0x0000023f: 83 address += 8, line += 1 0x00000000000005ac 61 19 1 0 0 is_stmt 0x00000240: 05 DW_LNS_set_column (10) 0x00000242: 06 DW_LNS_negate_stmt 0x00000243: 82 address += 8, line += 0 0x00000000000005b4 61 10 1 0 0 0x00000244: 05 DW_LNS_set_column (14) 0x00000246: 06 DW_LNS_negate_stmt 0x00000247: 67 address += 6, line += 1 0x00000000000005ba 62 14 1 0 0 is_stmt 0x00000248: 05 DW_LNS_set_column (25) 0x0000024a: 06 DW_LNS_negate_stmt 0x0000024b: 82 address += 8, line += 0 0x00000000000005c2 62 25 1 0 0 0x0000024c: 05 DW_LNS_set_column (23) 0x0000024e: 82 address += 8, line += 0 0x00000000000005ca 62 23 1 0 0 0x0000024f: 05 DW_LNS_set_column (14) 0x00000251: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000252: 58 address += 5, line += 0 0x00000000000005e0 62 14 1 0 0 0x00000253: 05 DW_LNS_set_column (24) 0x00000255: 06 DW_LNS_negate_stmt 0x00000256: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000257: 67 address += 6, line += 1 0x00000000000005f7 63 24 1 0 0 is_stmt 0x00000258: 05 DW_LNS_set_column (22) 0x0000025a: 06 DW_LNS_negate_stmt 0x0000025b: 82 address += 8, line += 0 0x00000000000005ff 63 22 1 0 0 0x0000025c: 03 DW_LNS_advance_line (0) 0x0000025e: 82 address += 8, line += 0 0x0000000000000607 0 22 1 0 0 0x0000025f: 05 DW_LNS_set_column (14) 0x00000261: 06 DW_LNS_negate_stmt 0x00000262: 03 DW_LNS_advance_line (66) 0x00000265: 2e address += 2, line += 0 0x0000000000000609 66 14 1 0 0 is_stmt 0x00000266: 05 DW_LNS_set_column (19) 0x00000268: 06 DW_LNS_negate_stmt 0x00000269: 9e address += 10, line += 0 0x0000000000000613 66 19 1 0 0 0x0000026a: 05 DW_LNS_set_column (21) 0x0000026c: 82 address += 8, line += 0 0x000000000000061b 66 21 1 0 0 0x0000026d: 05 DW_LNS_set_column (16) 0x0000026f: e4 address += 15, line += 0 0x000000000000062a 66 16 1 0 0 0x00000270: 05 DW_LNS_set_column (14) 0x00000272: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000273: 58 address += 5, line += 0 0x0000000000000640 66 14 1 0 0 0x00000274: 05 DW_LNS_set_column (18) 0x00000276: 06 DW_LNS_negate_stmt 0x00000277: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000278: 67 address += 6, line += 1 0x0000000000000657 67 18 1 0 0 is_stmt 0x00000279: 05 DW_LNS_set_column (13) 0x0000027b: 06 DW_LNS_negate_stmt 0x0000027c: 82 address += 8, line += 0 0x000000000000065f 67 13 1 0 0 0x0000027d: 05 DW_LNS_set_column (18) 0x0000027f: 06 DW_LNS_negate_stmt 0x00000280: 91 address += 9, line += 1 0x0000000000000668 68 18 1 0 0 is_stmt 0x00000281: 05 DW_LNS_set_column (13) 0x00000283: 06 DW_LNS_negate_stmt 0x00000284: 82 address += 8, line += 0 0x0000000000000670 68 13 1 0 0 0x00000285: 05 DW_LNS_set_column (18) 0x00000287: 06 DW_LNS_negate_stmt 0x00000288: 91 address += 9, line += 1 0x0000000000000679 69 18 1 0 0 is_stmt 0x00000289: 05 DW_LNS_set_column (13) 0x0000028b: 06 DW_LNS_negate_stmt 0x0000028c: 82 address += 8, line += 0 0x0000000000000681 69 13 1 0 0 0x0000028d: 05 DW_LNS_set_column (20) 0x0000028f: 06 DW_LNS_negate_stmt 0x00000290: 91 address += 9, line += 1 0x000000000000068a 70 20 1 0 0 is_stmt 0x00000291: 05 DW_LNS_set_column (13) 0x00000293: 06 DW_LNS_negate_stmt 0x00000294: 82 address += 8, line += 0 0x0000000000000692 70 13 1 0 0 0x00000295: 03 DW_LNS_advance_line (0) 0x00000298: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000299: ac address += 11, line += 0 0x00000000000006ae 0 13 1 0 0 0x0000029a: 05 DW_LNS_set_column (22) 0x0000029c: 06 DW_LNS_negate_stmt 0x0000029d: 03 DW_LNS_advance_line (74) 0x000002a0: 66 address += 6, line += 0 0x00000000000006b4 74 22 1 0 0 is_stmt 0x000002a1: 05 DW_LNS_set_column (17) 0x000002a3: 06 DW_LNS_negate_stmt 0x000002a4: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000002a5: 12 address += 0, line += 0 0x00000000000006c5 74 17 1 0 0 0x000002a6: 05 DW_LNS_set_column (20) 0x000002a8: 06 DW_LNS_negate_stmt 0x000002a9: 83 address += 8, line += 1 0x00000000000006cd 75 20 1 0 0 is_stmt 0x000002aa: 05 DW_LNS_set_column (25) 0x000002ac: 06 DW_LNS_negate_stmt 0x000002ad: 82 address += 8, line += 0 0x00000000000006d5 75 25 1 0 0 0x000002ae: 05 DW_LNS_set_column (29) 0x000002b0: ba address += 12, line += 0 0x00000000000006e1 75 29 1 0 0 0x000002b1: 05 DW_LNS_set_column (27) 0x000002b3: 82 address += 8, line += 0 0x00000000000006e9 75 27 1 0 0 0x000002b4: 05 DW_LNS_set_column (13) 0x000002b6: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000002b7: 58 address += 5, line += 0 0x00000000000006ff 75 13 1 0 0 0x000002b8: 05 DW_LNS_set_column (27) 0x000002ba: 06 DW_LNS_negate_stmt 0x000002bb: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000002bc: 4b address += 4, line += 1 0x0000000000000714 76 27 1 0 0 is_stmt 0x000002bd: 05 DW_LNS_set_column (33) 0x000002bf: 06 DW_LNS_negate_stmt 0x000002c0: 82 address += 8, line += 0 0x000000000000071c 76 33 1 0 0 0x000002c1: 05 DW_LNS_set_column (35) 0x000002c3: 82 address += 8, line += 0 0x0000000000000724 76 35 1 0 0 0x000002c4: 05 DW_LNS_set_column (27) 0x000002c6: e4 address += 15, line += 0 0x0000000000000733 76 27 1 0 0 0x000002c7: 05 DW_LNS_set_column (16) 0x000002c9: 02 DW_LNS_advance_pc (34) 0x000002cb: 12 address += 0, line += 0 0x0000000000000755 76 16 1 0 0 0x000002cc: 05 DW_LNS_set_column (22) 0x000002ce: 82 address += 8, line += 0 0x000000000000075d 76 22 1 0 0 0x000002cf: 05 DW_LNS_set_column (16) 0x000002d1: 82 address += 8, line += 0 0x0000000000000765 76 16 1 0 0 0x000002d2: 05 DW_LNS_set_column (25) 0x000002d4: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000002d5: 82 address += 8, line += 0 0x000000000000077e 76 25 1 0 0 0x000002d6: 05 DW_LNS_set_column (33) 0x000002d8: 06 DW_LNS_negate_stmt 0x000002d9: 8f address += 9, line += -1 0x0000000000000787 75 33 1 0 0 is_stmt 0x000002da: 05 DW_LNS_set_column (13) 0x000002dc: 06 DW_LNS_negate_stmt 0x000002dd: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000002de: d6 address += 14, line += 0 0x00000000000007a6 75 13 1 0 0 0x000002df: 2e address += 2, line += 0 0x00000000000007a8 75 13 1 0 0 0x000002e0: 05 DW_LNS_set_column (24) 0x000002e2: 06 DW_LNS_negate_stmt 0x000002e3: 76 address += 7, line += 2 0x00000000000007af 77 24 1 0 0 is_stmt 0x000002e4: 05 DW_LNS_set_column (13) 0x000002e6: 06 DW_LNS_negate_stmt 0x000002e7: 82 address += 8, line += 0 0x00000000000007b7 77 13 1 0 0 0x000002e8: 05 DW_LNS_set_column (19) 0x000002ea: 82 address += 8, line += 0 0x00000000000007bf 77 19 1 0 0 0x000002eb: 05 DW_LNS_set_column (13) 0x000002ed: 82 address += 8, line += 0 0x00000000000007c7 77 13 1 0 0 0x000002ee: 05 DW_LNS_set_column (22) 0x000002f0: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000002f1: 82 address += 8, line += 0 0x00000000000007e0 77 22 1 0 0 0x000002f2: 05 DW_LNS_set_column (16) 0x000002f4: 06 DW_LNS_negate_stmt 0x000002f5: 92 address += 9, line += 2 0x00000000000007e9 79 16 1 0 0 is_stmt 0x000002f6: 05 DW_LNS_set_column (22) 0x000002f8: 06 DW_LNS_negate_stmt 0x000002f9: 82 address += 8, line += 0 0x00000000000007f1 79 22 1 0 0 0x000002fa: 05 DW_LNS_set_column (16) 0x000002fc: 82 address += 8, line += 0 0x00000000000007f9 79 16 1 0 0 0x000002fd: 05 DW_LNS_set_column (14) 0x000002ff: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000300: 82 address += 8, line += 0 0x0000000000000812 79 14 1 0 0 0x00000301: 05 DW_LNS_set_column (25) 0x00000303: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000304: f2 address += 16, line += 0 0x0000000000000833 79 25 1 0 0 0x00000305: 05 DW_LNS_set_column (14) 0x00000307: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000308: 58 address += 5, line += 0 0x0000000000000849 79 14 1 0 0 0x00000309: 05 DW_LNS_set_column (13) 0x0000030b: 06 DW_LNS_negate_stmt 0x0000030c: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000030d: 83 address += 8, line += 1 0x0000000000000862 80 13 1 0 0 is_stmt 0x0000030e: 06 DW_LNS_negate_stmt 0x0000030f: 03 DW_LNS_advance_line (0) 0x00000312: 2e address += 2, line += 0 0x0000000000000864 0 13 1 0 0 0x00000313: 05 DW_LNS_set_column (11) 0x00000315: 06 DW_LNS_negate_stmt 0x00000316: 03 DW_LNS_advance_line (81) 0x00000319: 20 address += 1, line += 0 0x0000000000000865 81 11 1 0 0 is_stmt 0x0000031a: 05 DW_LNS_set_column (7) 0x0000031c: 03 DW_LNS_advance_line (65) 0x0000031e: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000031f: d6 address += 14, line += 0 0x0000000000000884 65 7 1 0 0 is_stmt 0x00000320: 06 DW_LNS_negate_stmt 0x00000321: 03 DW_LNS_advance_line (0) 0x00000324: 2e address += 2, line += 0 0x0000000000000886 0 7 1 0 0 0x00000325: 05 DW_LNS_set_column (13) 0x00000327: 06 DW_LNS_negate_stmt 0x00000328: 03 DW_LNS_advance_line (80) 0x0000032b: 20 address += 1, line += 0 0x0000000000000887 80 13 1 0 0 is_stmt 0x0000032c: 05 DW_LNS_set_column (4) 0x0000032e: 03 DW_LNS_advance_line (43) 0x00000330: 20 address += 1, line += 0 0x0000000000000888 43 4 1 0 0 is_stmt 0x00000331: 06 DW_LNS_negate_stmt 0x00000332: 03 DW_LNS_advance_line (0) 0x00000334: 2e address += 2, line += 0 0x000000000000088a 0 4 1 0 0 0x00000335: 02 DW_LNS_advance_pc (2) 0x00000337: 00 DW_LNE_end_sequence 0x000000000000088c 0 4 1 0 0 end_sequence 0x0000033a: 00 DW_LNE_set_address (0x000000000000088e) 0x00000341: 03 DW_LNS_advance_line (152) 0x00000344: 01 DW_LNS_copy 0x000000000000088e 152 0 1 0 0 is_stmt 0x00000345: 05 DW_LNS_set_column (12) 0x00000347: 0a DW_LNS_set_prologue_end 0x00000348: 02 DW_LNS_advance_pc (59) 0x0000034a: 13 address += 0, line += 1 0x00000000000008c9 153 12 1 0 0 is_stmt prologue_end 0x0000034b: 05 DW_LNS_set_column (17) 0x0000034d: 06 DW_LNS_negate_stmt 0x0000034e: 74 address += 7, line += 0 0x00000000000008d0 153 17 1 0 0 0x0000034f: 05 DW_LNS_set_column (12) 0x00000351: e4 address += 15, line += 0 0x00000000000008df 153 12 1 0 0 0x00000352: 05 DW_LNS_set_column (28) 0x00000354: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000355: 3c address += 3, line += 0 0x00000000000008f3 153 28 1 0 0 0x00000356: 05 DW_LNS_set_column (23) 0x00000358: d6 address += 14, line += 0 0x0000000000000901 153 23 1 0 0 0x00000359: 05 DW_LNS_set_column (12) 0x0000035b: 9e address += 10, line += 0 0x000000000000090b 153 12 1 0 0 0x0000035c: 03 DW_LNS_advance_line (0) 0x0000035f: 66 address += 6, line += 0 0x0000000000000911 0 12 1 0 0 0x00000360: 03 DW_LNS_advance_line (153) 0x00000363: 58 address += 5, line += 0 0x0000000000000916 153 12 1 0 0 0x00000364: 03 DW_LNS_advance_line (0) 0x00000367: 4a address += 4, line += 0 0x000000000000091a 0 12 1 0 0 0x00000368: 03 DW_LNS_advance_line (153) 0x0000036b: 20 address += 1, line += 0 0x000000000000091b 153 12 1 0 0 0x0000036c: 05 DW_LNS_set_column (8) 0x0000036e: 82 address += 8, line += 0 0x0000000000000923 153 8 1 0 0 0x0000036f: 06 DW_LNS_negate_stmt 0x00000370: 76 address += 7, line += 2 0x000000000000092a 155 8 1 0 0 is_stmt 0x00000371: 05 DW_LNS_set_column (10) 0x00000373: 06 DW_LNS_negate_stmt 0x00000374: 74 address += 7, line += 0 0x0000000000000931 155 10 1 0 0 0x00000375: 05 DW_LNS_set_column (8) 0x00000377: e4 address += 15, line += 0 0x0000000000000940 155 8 1 0 0 0x00000378: 05 DW_LNS_set_column (7) 0x0000037a: 06 DW_LNS_negate_stmt 0x0000037b: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000037c: 3d address += 3, line += 1 0x0000000000000954 156 7 1 0 0 is_stmt 0x0000037d: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000037e: 9f address += 10, line += 1 0x000000000000096f 157 7 1 0 0 is_stmt 0x0000037f: 06 DW_LNS_negate_stmt 0x00000380: 03 DW_LNS_advance_line (0) 0x00000383: 90 address += 9, line += 0 0x0000000000000978 0 7 1 0 0 0x00000384: 05 DW_LNS_set_column (38) 0x00000386: 06 DW_LNS_negate_stmt 0x00000387: 03 DW_LNS_advance_line (159) 0x0000038a: 20 address += 1, line += 0 0x0000000000000979 159 38 1 0 0 is_stmt 0x0000038b: 05 DW_LNS_set_column (50) 0x0000038d: 06 DW_LNS_negate_stmt 0x0000038e: 74 address += 7, line += 0 0x0000000000000980 159 50 1 0 0 0x0000038f: 05 DW_LNS_set_column (41) 0x00000391: 74 address += 7, line += 0 0x0000000000000987 159 41 1 0 0 0x00000392: 05 DW_LNS_set_column (4) 0x00000394: 9e address += 10, line += 0 0x0000000000000991 159 4 1 0 0 0x00000395: 06 DW_LNS_negate_stmt 0x00000396: 02 DW_LNS_advance_pc (37) 0x00000398: 13 address += 0, line += 1 0x00000000000009b6 160 4 1 0 0 is_stmt 0x00000399: 06 DW_LNS_negate_stmt 0x0000039a: 03 DW_LNS_advance_line (0) 0x0000039d: 74 address += 7, line += 0 0x00000000000009bd 0 4 1 0 0 0x0000039e: 05 DW_LNS_set_column (1) 0x000003a0: 06 DW_LNS_negate_stmt 0x000003a1: 03 DW_LNS_advance_line (161) 0x000003a4: 20 address += 1, line += 0 0x00000000000009be 161 1 1 0 0 is_stmt 0x000003a5: 02 DW_LNS_advance_pc (30) 0x000003a7: 00 DW_LNE_end_sequence 0x00000000000009dc 161 1 1 0 0 is_stmt end_sequence 0x000003aa: 00 DW_LNE_set_address (0x00000000000009de) 0x000003b1: 03 DW_LNS_advance_line (88) 0x000003b4: 01 DW_LNS_copy 0x00000000000009de 88 0 1 0 0 is_stmt 0x000003b5: 05 DW_LNS_set_column (8) 0x000003b7: 0a DW_LNS_set_prologue_end 0x000003b8: 02 DW_LNS_advance_pc (46) 0x000003ba: 14 address += 0, line += 2 0x0000000000000a0c 90 8 1 0 0 is_stmt prologue_end 0x000003bb: 05 DW_LNS_set_column (9) 0x000003bd: 77 address += 7, line += 3 0x0000000000000a13 93 9 1 0 0 is_stmt 0x000003be: 05 DW_LNS_set_column (11) 0x000003c0: 75 address += 7, line += 1 0x0000000000000a1a 94 11 1 0 0 is_stmt 0x000003c1: 05 DW_LNS_set_column (16) 0x000003c3: 06 DW_LNS_negate_stmt 0x000003c4: 74 address += 7, line += 0 0x0000000000000a21 94 16 1 0 0 0x000003c5: 05 DW_LNS_set_column (20) 0x000003c7: ac address += 11, line += 0 0x0000000000000a2c 94 20 1 0 0 0x000003c8: 05 DW_LNS_set_column (22) 0x000003ca: 74 address += 7, line += 0 0x0000000000000a33 94 22 1 0 0 0x000003cb: 05 DW_LNS_set_column (18) 0x000003cd: ac address += 11, line += 0 0x0000000000000a3e 94 18 1 0 0 0x000003ce: 05 DW_LNS_set_column (4) 0x000003d0: e4 address += 15, line += 0 0x0000000000000a4d 94 4 1 0 0 0x000003d1: 03 DW_LNS_advance_line (0) 0x000003d4: f2 address += 16, line += 0 0x0000000000000a5d 0 4 1 0 0 0x000003d5: 05 DW_LNS_set_column (29) 0x000003d7: 06 DW_LNS_negate_stmt 0x000003d8: 03 DW_LNS_advance_line (95) 0x000003db: 4a address += 4, line += 0 0x0000000000000a61 95 29 1 0 0 is_stmt 0x000003dc: 05 DW_LNS_set_column (13) 0x000003de: 06 DW_LNS_negate_stmt 0x000003df: 9e address += 10, line += 0 0x0000000000000a6b 95 13 1 0 0 0x000003e0: 05 DW_LNS_set_column (18) 0x000003e2: 06 DW_LNS_negate_stmt 0x000003e3: 75 address += 7, line += 1 0x0000000000000a72 96 18 1 0 0 is_stmt 0x000003e4: 05 DW_LNS_set_column (7) 0x000003e6: 06 DW_LNS_negate_stmt 0x000003e7: 74 address += 7, line += 0 0x0000000000000a79 96 7 1 0 0 0x000003e8: 05 DW_LNS_set_column (16) 0x000003ea: 74 address += 7, line += 0 0x0000000000000a80 96 16 1 0 0 0x000003eb: 05 DW_LNS_set_column (18) 0x000003ed: 06 DW_LNS_negate_stmt 0x000003ee: 75 address += 7, line += 1 0x0000000000000a87 97 18 1 0 0 is_stmt 0x000003ef: 05 DW_LNS_set_column (7) 0x000003f1: 06 DW_LNS_negate_stmt 0x000003f2: 74 address += 7, line += 0 0x0000000000000a8e 97 7 1 0 0 0x000003f3: 05 DW_LNS_set_column (16) 0x000003f5: 74 address += 7, line += 0 0x0000000000000a95 97 16 1 0 0 0x000003f6: 05 DW_LNS_set_column (21) 0x000003f8: 06 DW_LNS_negate_stmt 0x000003f9: 75 address += 7, line += 1 0x0000000000000a9c 98 21 1 0 0 is_stmt 0x000003fa: 05 DW_LNS_set_column (7) 0x000003fc: 06 DW_LNS_negate_stmt 0x000003fd: 74 address += 7, line += 0 0x0000000000000aa3 98 7 1 0 0 0x000003fe: 05 DW_LNS_set_column (19) 0x00000400: 74 address += 7, line += 0 0x0000000000000aaa 98 19 1 0 0 0x00000401: 05 DW_LNS_set_column (14) 0x00000403: 06 DW_LNS_negate_stmt 0x00000404: 75 address += 7, line += 1 0x0000000000000ab1 99 14 1 0 0 is_stmt 0x00000405: 05 DW_LNS_set_column (12) 0x00000407: 06 DW_LNS_negate_stmt 0x00000408: 74 address += 7, line += 0 0x0000000000000ab8 99 12 1 0 0 0x00000409: 05 DW_LNS_set_column (28) 0x0000040b: 06 DW_LNS_negate_stmt 0x0000040c: 6f address += 7, line += -5 0x0000000000000abf 94 28 1 0 0 is_stmt 0x0000040d: 05 DW_LNS_set_column (4) 0x0000040f: 06 DW_LNS_negate_stmt 0x00000410: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000411: 82 address += 8, line += 0 0x0000000000000ad8 94 4 1 0 0 0x00000412: 2e address += 2, line += 0 0x0000000000000ada 94 4 1 0 0 0x00000413: 05 DW_LNS_set_column (25) 0x00000415: 06 DW_LNS_negate_stmt 0x00000416: 6e address += 6, line += 8 0x0000000000000ae0 102 25 1 0 0 is_stmt 0x00000417: 05 DW_LNS_set_column (27) 0x00000419: 06 DW_LNS_negate_stmt 0x0000041a: 74 address += 7, line += 0 0x0000000000000ae7 102 27 1 0 0 0x0000041b: 05 DW_LNS_set_column (18) 0x0000041d: ac address += 11, line += 0 0x0000000000000af2 102 18 1 0 0 0x0000041e: 05 DW_LNS_set_column (10) 0x00000420: 9e address += 10, line += 0 0x0000000000000afc 102 10 1 0 0 0x00000421: 05 DW_LNS_set_column (25) 0x00000423: 06 DW_LNS_negate_stmt 0x00000424: 75 address += 7, line += 1 0x0000000000000b03 103 25 1 0 0 is_stmt 0x00000425: 05 DW_LNS_set_column (27) 0x00000427: 06 DW_LNS_negate_stmt 0x00000428: 74 address += 7, line += 0 0x0000000000000b0a 103 27 1 0 0 0x00000429: 05 DW_LNS_set_column (18) 0x0000042b: ac address += 11, line += 0 0x0000000000000b15 103 18 1 0 0 0x0000042c: 05 DW_LNS_set_column (10) 0x0000042e: 9e address += 10, line += 0 0x0000000000000b1f 103 10 1 0 0 0x0000042f: 05 DW_LNS_set_column (11) 0x00000431: 06 DW_LNS_negate_stmt 0x00000432: 76 address += 7, line += 2 0x0000000000000b26 105 11 1 0 0 is_stmt 0x00000433: 05 DW_LNS_set_column (16) 0x00000435: 06 DW_LNS_negate_stmt 0x00000436: 74 address += 7, line += 0 0x0000000000000b2d 105 16 1 0 0 0x00000437: 05 DW_LNS_set_column (20) 0x00000439: ac address += 11, line += 0 0x0000000000000b38 105 20 1 0 0 0x0000043a: 05 DW_LNS_set_column (18) 0x0000043c: 74 address += 7, line += 0 0x0000000000000b3f 105 18 1 0 0 0x0000043d: 05 DW_LNS_set_column (4) 0x0000043f: e4 address += 15, line += 0 0x0000000000000b4e 105 4 1 0 0 0x00000440: 05 DW_LNS_set_column (18) 0x00000442: 06 DW_LNS_negate_stmt 0x00000443: f3 address += 16, line += 1 0x0000000000000b5e 106 18 1 0 0 is_stmt 0x00000444: 05 DW_LNS_set_column (7) 0x00000446: 06 DW_LNS_negate_stmt 0x00000447: 74 address += 7, line += 0 0x0000000000000b65 106 7 1 0 0 0x00000448: 05 DW_LNS_set_column (13) 0x0000044a: 74 address += 7, line += 0 0x0000000000000b6c 106 13 1 0 0 0x0000044b: 05 DW_LNS_set_column (7) 0x0000044d: 74 address += 7, line += 0 0x0000000000000b73 106 7 1 0 0 0x0000044e: 05 DW_LNS_set_column (16) 0x00000450: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000451: 20 address += 1, line += 0 0x0000000000000b85 106 16 1 0 0 0x00000452: 05 DW_LNS_set_column (24) 0x00000454: 06 DW_LNS_negate_stmt 0x00000455: 73 address += 7, line += -1 0x0000000000000b8c 105 24 1 0 0 is_stmt 0x00000456: 05 DW_LNS_set_column (4) 0x00000458: 06 DW_LNS_negate_stmt 0x00000459: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000045a: 82 address += 8, line += 0 0x0000000000000ba5 105 4 1 0 0 0x0000045b: 2e address += 2, line += 0 0x0000000000000ba7 105 4 1 0 0 0x0000045c: 05 DW_LNS_set_column (8) 0x0000045e: 06 DW_LNS_negate_stmt 0x0000045f: 31 address += 2, line += 3 0x0000000000000ba9 108 8 1 0 0 is_stmt 0x00000460: 05 DW_LNS_set_column (6) 0x00000462: 06 DW_LNS_negate_stmt 0x00000463: 74 address += 7, line += 0 0x0000000000000bb0 108 6 1 0 0 0x00000464: 05 DW_LNS_set_column (11) 0x00000466: 06 DW_LNS_negate_stmt 0x00000467: 76 address += 7, line += 2 0x0000000000000bb7 110 11 1 0 0 is_stmt 0x00000468: 06 DW_LNS_negate_stmt 0x00000469: ac address += 11, line += 0 0x0000000000000bc2 110 11 1 0 0 0x0000046a: 03 DW_LNS_advance_line (0) 0x0000046d: 90 address += 9, line += 0 0x0000000000000bcb 0 11 1 0 0 0x0000046e: 05 DW_LNS_set_column (17) 0x00000470: 06 DW_LNS_negate_stmt 0x00000471: 03 DW_LNS_advance_line (111) 0x00000474: 4a address += 4, line += 0 0x0000000000000bcf 111 17 1 0 0 is_stmt 0x00000475: 05 DW_LNS_set_column (22) 0x00000477: 06 DW_LNS_negate_stmt 0x00000478: 74 address += 7, line += 0 0x0000000000000bd6 111 22 1 0 0 0x00000479: 05 DW_LNS_set_column (26) 0x0000047b: ac address += 11, line += 0 0x0000000000000be1 111 26 1 0 0 0x0000047c: 05 DW_LNS_set_column (24) 0x0000047e: 74 address += 7, line += 0 0x0000000000000be8 111 24 1 0 0 0x0000047f: 05 DW_LNS_set_column (10) 0x00000481: e4 address += 15, line += 0 0x0000000000000bf7 111 10 1 0 0 0x00000482: 05 DW_LNS_set_column (26) 0x00000484: 06 DW_LNS_negate_stmt 0x00000485: f3 address += 16, line += 1 0x0000000000000c07 112 26 1 0 0 is_stmt 0x00000486: 05 DW_LNS_set_column (32) 0x00000488: 06 DW_LNS_negate_stmt 0x00000489: 74 address += 7, line += 0 0x0000000000000c0e 112 32 1 0 0 0x0000048a: 05 DW_LNS_set_column (26) 0x0000048c: 74 address += 7, line += 0 0x0000000000000c15 112 26 1 0 0 0x0000048d: 05 DW_LNS_set_column (35) 0x0000048f: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000490: 82 address += 8, line += 0 0x0000000000000c2e 112 35 1 0 0 0x00000491: 05 DW_LNS_set_column (13) 0x00000493: ac address += 11, line += 0 0x0000000000000c39 112 13 1 0 0 0x00000494: 05 DW_LNS_set_column (30) 0x00000496: 06 DW_LNS_negate_stmt 0x00000497: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000498: 8f address += 9, line += -1 0x0000000000000c53 111 30 1 0 0 is_stmt 0x00000499: 05 DW_LNS_set_column (10) 0x0000049b: 06 DW_LNS_negate_stmt 0x0000049c: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000049d: 82 address += 8, line += 0 0x0000000000000c6c 111 10 1 0 0 0x0000049e: 2e address += 2, line += 0 0x0000000000000c6e 111 10 1 0 0 0x0000049f: 06 DW_LNS_negate_stmt 0x000004a0: 30 address += 2, line += 2 0x0000000000000c70 113 10 1 0 0 is_stmt 0x000004a1: 05 DW_LNS_set_column (17) 0x000004a3: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000004a4: 67 address += 6, line += 1 0x0000000000000c87 114 17 1 0 0 is_stmt 0x000004a5: 05 DW_LNS_set_column (7) 0x000004a7: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000004a8: 83 address += 8, line += 1 0x0000000000000ca0 115 7 1 0 0 is_stmt 0x000004a9: 06 DW_LNS_negate_stmt 0x000004aa: 03 DW_LNS_advance_line (0) 0x000004ad: 2e address += 2, line += 0 0x0000000000000ca2 0 7 1 0 0 0x000004ae: 05 DW_LNS_set_column (10) 0x000004b0: 06 DW_LNS_negate_stmt 0x000004b1: 03 DW_LNS_advance_line (116) 0x000004b4: 20 address += 1, line += 0 0x0000000000000ca3 116 10 1 0 0 is_stmt 0x000004b5: 06 DW_LNS_negate_stmt 0x000004b6: 03 DW_LNS_advance_line (0) 0x000004b9: 2e address += 2, line += 0 0x0000000000000ca5 0 10 1 0 0 0x000004ba: 05 DW_LNS_set_column (14) 0x000004bc: 06 DW_LNS_negate_stmt 0x000004bd: 03 DW_LNS_advance_line (118) 0x000004c0: 90 address += 9, line += 0 0x0000000000000cae 118 14 1 0 0 is_stmt 0x000004c1: 05 DW_LNS_set_column (16) 0x000004c3: 06 DW_LNS_negate_stmt 0x000004c4: 74 address += 7, line += 0 0x0000000000000cb5 118 16 1 0 0 0x000004c5: 05 DW_LNS_set_column (7) 0x000004c7: e4 address += 15, line += 0 0x0000000000000cc4 118 7 1 0 0 0x000004c8: 05 DW_LNS_set_column (25) 0x000004ca: 06 DW_LNS_negate_stmt 0x000004cb: f3 address += 16, line += 1 0x0000000000000cd4 119 25 1 0 0 is_stmt 0x000004cc: 05 DW_LNS_set_column (10) 0x000004ce: 06 DW_LNS_negate_stmt 0x000004cf: 74 address += 7, line += 0 0x0000000000000cdb 119 10 1 0 0 0x000004d0: 05 DW_LNS_set_column (16) 0x000004d2: 74 address += 7, line += 0 0x0000000000000ce2 119 16 1 0 0 0x000004d3: 05 DW_LNS_set_column (18) 0x000004d5: 74 address += 7, line += 0 0x0000000000000ce9 119 18 1 0 0 0x000004d6: 05 DW_LNS_set_column (10) 0x000004d8: ac address += 11, line += 0 0x0000000000000cf4 119 10 1 0 0 0x000004d9: 05 DW_LNS_set_column (23) 0x000004db: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000004dc: 20 address += 1, line += 0 0x0000000000000d06 119 23 1 0 0 0x000004dd: 05 DW_LNS_set_column (22) 0x000004df: 06 DW_LNS_negate_stmt 0x000004e0: 73 address += 7, line += -1 0x0000000000000d0d 118 22 1 0 0 is_stmt 0x000004e1: 05 DW_LNS_set_column (7) 0x000004e3: 06 DW_LNS_negate_stmt 0x000004e4: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000004e5: 82 address += 8, line += 0 0x0000000000000d26 118 7 1 0 0 0x000004e6: 2e address += 2, line += 0 0x0000000000000d28 118 7 1 0 0 0x000004e7: 05 DW_LNS_set_column (14) 0x000004e9: 06 DW_LNS_negate_stmt 0x000004ea: 32 address += 2, line += 4 0x0000000000000d2a 122 14 1 0 0 is_stmt 0x000004eb: 05 DW_LNS_set_column (19) 0x000004ed: 06 DW_LNS_negate_stmt 0x000004ee: 90 address += 9, line += 0 0x0000000000000d33 122 19 1 0 0 0x000004ef: 05 DW_LNS_set_column (16) 0x000004f1: 74 address += 7, line += 0 0x0000000000000d3a 122 16 1 0 0 0x000004f2: 05 DW_LNS_set_column (14) 0x000004f4: e4 address += 15, line += 0 0x0000000000000d49 122 14 1 0 0 0x000004f5: 05 DW_LNS_set_column (13) 0x000004f7: 06 DW_LNS_negate_stmt 0x000004f8: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000004f9: 21 address += 1, line += 1 0x0000000000000d5b 123 13 1 0 0 is_stmt 0x000004fa: 06 DW_LNS_negate_stmt 0x000004fb: 03 DW_LNS_advance_line (0) 0x000004fe: 2e address += 2, line += 0 0x0000000000000d5d 0 13 1 0 0 0x000004ff: 05 DW_LNS_set_column (22) 0x00000501: 06 DW_LNS_negate_stmt 0x00000502: 03 DW_LNS_advance_line (125) 0x00000505: 58 address += 5, line += 0 0x0000000000000d62 125 22 1 0 0 is_stmt 0x00000506: 05 DW_LNS_set_column (17) 0x00000508: 06 DW_LNS_negate_stmt 0x00000509: d6 address += 14, line += 0 0x0000000000000d70 125 17 1 0 0 0x0000050a: 05 DW_LNS_set_column (20) 0x0000050c: 06 DW_LNS_negate_stmt 0x0000050d: 75 address += 7, line += 1 0x0000000000000d77 126 20 1 0 0 is_stmt 0x0000050e: 05 DW_LNS_set_column (25) 0x00000510: 06 DW_LNS_negate_stmt 0x00000511: 74 address += 7, line += 0 0x0000000000000d7e 126 25 1 0 0 0x00000512: 05 DW_LNS_set_column (29) 0x00000514: ac address += 11, line += 0 0x0000000000000d89 126 29 1 0 0 0x00000515: 05 DW_LNS_set_column (27) 0x00000517: 74 address += 7, line += 0 0x0000000000000d90 126 27 1 0 0 0x00000518: 05 DW_LNS_set_column (13) 0x0000051a: e4 address += 15, line += 0 0x0000000000000d9f 126 13 1 0 0 0x0000051b: 05 DW_LNS_set_column (27) 0x0000051d: 06 DW_LNS_negate_stmt 0x0000051e: f3 address += 16, line += 1 0x0000000000000daf 127 27 1 0 0 is_stmt 0x0000051f: 05 DW_LNS_set_column (33) 0x00000521: 06 DW_LNS_negate_stmt 0x00000522: 74 address += 7, line += 0 0x0000000000000db6 127 33 1 0 0 0x00000523: 05 DW_LNS_set_column (35) 0x00000525: 74 address += 7, line += 0 0x0000000000000dbd 127 35 1 0 0 0x00000526: 05 DW_LNS_set_column (27) 0x00000528: ac address += 11, line += 0 0x0000000000000dc8 127 27 1 0 0 0x00000529: 05 DW_LNS_set_column (16) 0x0000052b: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000052c: 82 address += 8, line += 0 0x0000000000000de1 127 16 1 0 0 0x0000052d: 05 DW_LNS_set_column (22) 0x0000052f: 74 address += 7, line += 0 0x0000000000000de8 127 22 1 0 0 0x00000530: 05 DW_LNS_set_column (16) 0x00000532: 74 address += 7, line += 0 0x0000000000000def 127 16 1 0 0 0x00000533: 05 DW_LNS_set_column (25) 0x00000535: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000536: 20 address += 1, line += 0 0x0000000000000e01 127 25 1 0 0 0x00000537: 05 DW_LNS_set_column (33) 0x00000539: 06 DW_LNS_negate_stmt 0x0000053a: 73 address += 7, line += -1 0x0000000000000e08 126 33 1 0 0 is_stmt 0x0000053b: 05 DW_LNS_set_column (13) 0x0000053d: 06 DW_LNS_negate_stmt 0x0000053e: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000053f: ba address += 12, line += 0 0x0000000000000e25 126 13 1 0 0 0x00000540: 2e address += 2, line += 0 0x0000000000000e27 126 13 1 0 0 0x00000541: 05 DW_LNS_set_column (24) 0x00000543: 06 DW_LNS_negate_stmt 0x00000544: 76 address += 7, line += 2 0x0000000000000e2e 128 24 1 0 0 is_stmt 0x00000545: 05 DW_LNS_set_column (13) 0x00000547: 06 DW_LNS_negate_stmt 0x00000548: 82 address += 8, line += 0 0x0000000000000e36 128 13 1 0 0 0x00000549: 05 DW_LNS_set_column (19) 0x0000054b: 82 address += 8, line += 0 0x0000000000000e3e 128 19 1 0 0 0x0000054c: 05 DW_LNS_set_column (13) 0x0000054e: 82 address += 8, line += 0 0x0000000000000e46 128 13 1 0 0 0x0000054f: 05 DW_LNS_set_column (22) 0x00000551: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000552: 82 address += 8, line += 0 0x0000000000000e5f 128 22 1 0 0 0x00000553: 05 DW_LNS_set_column (16) 0x00000555: 06 DW_LNS_negate_stmt 0x00000556: 92 address += 9, line += 2 0x0000000000000e68 130 16 1 0 0 is_stmt 0x00000557: 05 DW_LNS_set_column (22) 0x00000559: 06 DW_LNS_negate_stmt 0x0000055a: 82 address += 8, line += 0 0x0000000000000e70 130 22 1 0 0 0x0000055b: 05 DW_LNS_set_column (16) 0x0000055d: 82 address += 8, line += 0 0x0000000000000e78 130 16 1 0 0 0x0000055e: 05 DW_LNS_set_column (14) 0x00000560: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000561: 82 address += 8, line += 0 0x0000000000000e91 130 14 1 0 0 0x00000562: 05 DW_LNS_set_column (25) 0x00000564: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000565: f2 address += 16, line += 0 0x0000000000000eb2 130 25 1 0 0 0x00000566: 05 DW_LNS_set_column (14) 0x00000568: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000569: 58 address += 5, line += 0 0x0000000000000ec8 130 14 1 0 0 0x0000056a: 05 DW_LNS_set_column (13) 0x0000056c: 06 DW_LNS_negate_stmt 0x0000056d: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000056e: 83 address += 8, line += 1 0x0000000000000ee1 131 13 1 0 0 is_stmt 0x0000056f: 06 DW_LNS_negate_stmt 0x00000570: 03 DW_LNS_advance_line (0) 0x00000573: 2e address += 2, line += 0 0x0000000000000ee3 0 13 1 0 0 0x00000574: 05 DW_LNS_set_column (11) 0x00000576: 06 DW_LNS_negate_stmt 0x00000577: 03 DW_LNS_advance_line (133) 0x0000057a: 20 address += 1, line += 0 0x0000000000000ee4 133 11 1 0 0 is_stmt 0x0000057b: 05 DW_LNS_set_column (7) 0x0000057d: 03 DW_LNS_advance_line (121) 0x0000057f: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000580: d6 address += 14, line += 0 0x0000000000000f03 121 7 1 0 0 is_stmt 0x00000581: 06 DW_LNS_negate_stmt 0x00000582: 03 DW_LNS_advance_line (0) 0x00000585: 2e address += 2, line += 0 0x0000000000000f05 0 7 1 0 0 0x00000586: 05 DW_LNS_set_column (13) 0x00000588: 06 DW_LNS_negate_stmt 0x00000589: 03 DW_LNS_advance_line (131) 0x0000058c: 20 address += 1, line += 0 0x0000000000000f06 131 13 1 0 0 is_stmt 0x0000058d: 05 DW_LNS_set_column (4) 0x0000058f: 03 DW_LNS_advance_line (109) 0x00000591: 20 address += 1, line += 0 0x0000000000000f07 109 4 1 0 0 is_stmt 0x00000592: 05 DW_LNS_set_column (13) 0x00000594: 03 DW_LNS_advance_line (123) 0x00000596: 2e address += 2, line += 0 0x0000000000000f09 123 13 1 0 0 is_stmt 0x00000597: 05 DW_LNS_set_column (9) 0x00000599: 03 DW_LNS_advance_line (138) 0x0000059b: 74 address += 7, line += 0 0x0000000000000f10 138 9 1 0 0 is_stmt 0x0000059c: 05 DW_LNS_set_column (4) 0x0000059e: 06 DW_LNS_negate_stmt 0x0000059f: 82 address += 8, line += 0 0x0000000000000f18 138 4 1 0 0 0x000005a0: 05 DW_LNS_set_column (9) 0x000005a2: 06 DW_LNS_negate_stmt 0x000005a3: 91 address += 9, line += 1 0x0000000000000f21 139 9 1 0 0 is_stmt 0x000005a4: 05 DW_LNS_set_column (4) 0x000005a6: 06 DW_LNS_negate_stmt 0x000005a7: 82 address += 8, line += 0 0x0000000000000f29 139 4 1 0 0 0x000005a8: 05 DW_LNS_set_column (13) 0x000005aa: 06 DW_LNS_negate_stmt 0x000005ab: 91 address += 9, line += 1 0x0000000000000f32 140 13 1 0 0 is_stmt 0x000005ac: 06 DW_LNS_negate_stmt 0x000005ad: 03 DW_LNS_advance_line (0) 0x000005b0: 82 address += 8, line += 0 0x0000000000000f3a 0 13 1 0 0 0x000005b1: 05 DW_LNS_set_column (11) 0x000005b3: 06 DW_LNS_negate_stmt 0x000005b4: 03 DW_LNS_advance_line (141) 0x000005b7: 90 address += 9, line += 0 0x0000000000000f43 141 11 1 0 0 is_stmt 0x000005b8: 05 DW_LNS_set_column (16) 0x000005ba: 06 DW_LNS_negate_stmt 0x000005bb: 82 address += 8, line += 0 0x0000000000000f4b 141 16 1 0 0 0x000005bc: 05 DW_LNS_set_column (4) 0x000005be: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000005bf: 58 address += 5, line += 0 0x0000000000000f61 141 4 1 0 0 0x000005c0: 05 DW_LNS_set_column (36) 0x000005c2: 06 DW_LNS_negate_stmt 0x000005c3: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000005c4: 4b address += 4, line += 1 0x0000000000000f76 142 36 1 0 0 is_stmt 0x000005c5: 05 DW_LNS_set_column (20) 0x000005c7: 06 DW_LNS_negate_stmt 0x000005c8: 82 address += 8, line += 0 0x0000000000000f7e 142 20 1 0 0 0x000005c9: 05 DW_LNS_set_column (13) 0x000005cb: ba address += 12, line += 0 0x0000000000000f8a 142 13 1 0 0 0x000005cc: 05 DW_LNS_set_column (11) 0x000005ce: 06 DW_LNS_negate_stmt 0x000005cf: 83 address += 8, line += 1 0x0000000000000f92 143 11 1 0 0 is_stmt 0x000005d0: 05 DW_LNS_set_column (22) 0x000005d2: 06 DW_LNS_negate_stmt 0x000005d3: 82 address += 8, line += 0 0x0000000000000f9a 143 22 1 0 0 0x000005d4: 05 DW_LNS_set_column (20) 0x000005d6: 82 address += 8, line += 0 0x0000000000000fa2 143 20 1 0 0 0x000005d7: 05 DW_LNS_set_column (11) 0x000005d9: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000005da: 58 address += 5, line += 0 0x0000000000000fb8 143 11 1 0 0 0x000005db: 05 DW_LNS_set_column (21) 0x000005dd: 06 DW_LNS_negate_stmt 0x000005de: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000005df: 67 address += 6, line += 1 0x0000000000000fcf 144 21 1 0 0 is_stmt 0x000005e0: 05 DW_LNS_set_column (19) 0x000005e2: 06 DW_LNS_negate_stmt 0x000005e3: 82 address += 8, line += 0 0x0000000000000fd7 144 19 1 0 0 0x000005e4: 03 DW_LNS_advance_line (0) 0x000005e7: 82 address += 8, line += 0 0x0000000000000fdf 0 19 1 0 0 0x000005e8: 05 DW_LNS_set_column (15) 0x000005ea: 06 DW_LNS_negate_stmt 0x000005eb: 03 DW_LNS_advance_line (145) 0x000005ee: 20 address += 1, line += 0 0x0000000000000fe0 145 15 1 0 0 is_stmt 0x000005ef: 05 DW_LNS_set_column (13) 0x000005f1: 06 DW_LNS_negate_stmt 0x000005f2: 82 address += 8, line += 0 0x0000000000000fe8 145 13 1 0 0 0x000005f3: 05 DW_LNS_set_column (14) 0x000005f5: 06 DW_LNS_negate_stmt 0x000005f6: 83 address += 8, line += 1 0x0000000000000ff0 146 14 1 0 0 is_stmt 0x000005f7: 05 DW_LNS_set_column (20) 0x000005f9: 06 DW_LNS_negate_stmt 0x000005fa: 82 address += 8, line += 0 0x0000000000000ff8 146 20 1 0 0 0x000005fb: 05 DW_LNS_set_column (12) 0x000005fd: 90 address += 9, line += 0 0x0000000000001001 146 12 1 0 0 0x000005fe: 06 DW_LNS_negate_stmt 0x000005ff: 83 address += 8, line += 1 0x0000000000001009 147 12 1 0 0 is_stmt 0x00000600: 05 DW_LNS_set_column (7) 0x00000602: 06 DW_LNS_negate_stmt 0x00000603: 82 address += 8, line += 0 0x0000000000001011 147 7 1 0 0 0x00000604: 05 DW_LNS_set_column (4) 0x00000606: 06 DW_LNS_negate_stmt 0x00000607: 03 DW_LNS_advance_line (141) 0x00000609: 90 address += 9, line += 0 0x000000000000101a 141 4 1 0 0 is_stmt 0x0000060a: 05 DW_LNS_set_column (11) 0x0000060c: 52 address += 4, line += 8 0x000000000000101e 149 11 1 0 0 is_stmt 0x0000060d: 05 DW_LNS_set_column (4) 0x0000060f: 06 DW_LNS_negate_stmt 0x00000610: 82 address += 8, line += 0 0x0000000000001026 149 4 1 0 0 0x00000611: 02 DW_LNS_advance_pc (28) 0x00000613: 00 DW_LNE_end_sequence 0x0000000000001042 149 4 1 0 0 end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 2d7a8cf90478cd845ffb39763b0e95b7715322d2)" 0x00000095: "tests/fannkuch.cpp" 0x000000a8: "/home/alon/Dev/emscripten" 0x000000c2: "i" 0x000000c4: "int" 0x000000c8: "n" 0x000000ca: "next" 0x000000cf: "worker_args" 0x000000db: "std" 0x000000df: "decltype(nullptr)" 0x000000f1: "nullptr_t" 0x000000fb: "_Z15fannkuch_workerPv" 0x00000111: "fannkuch_worker" 0x00000121: "main" 0x00000126: "_ZL8fannkuchi" 0x00000134: "fannkuch" 0x0000013d: "_arg" 0x00000142: "args" 0x00000147: "perm1" 0x0000014d: "count" 0x00000153: "perm" 0x00000158: "maxflips" 0x00000161: "flips" 0x00000167: "r" 0x00000169: "j" 0x0000016b: "k" 0x0000016d: "tmp" 0x00000171: "p0" 0x00000174: "argc" 0x00000179: "argv" 0x0000017e: "char" 0x00000183: "targs" 0x00000189: "showmax" 0x00000191: "cleanup" .debug_ranges contents: 00000000 00000006 0000088c 00000000 0000088e 000009dc 00000000 000009de 00001042 00000000 DWARF debug info ================ Contains section .debug_info (640 bytes) Contains section .debug_ranges (32 bytes) Contains section .debug_abbrev (222 bytes) Contains section .debug_line (3965 bytes) Contains section .debug_str (409 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [3] DW_TAG_structure_type DW_CHILDREN_yes DW_AT_calling_convention DW_FORM_data1 DW_AT_name DW_FORM_strp DW_AT_byte_size DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [4] DW_TAG_member DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_data_member_location DW_FORM_data1 [5] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [6] DW_TAG_namespace DW_CHILDREN_yes DW_AT_name DW_FORM_strp [7] DW_TAG_typedef DW_CHILDREN_no DW_AT_type DW_FORM_ref4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [8] DW_TAG_unspecified_type DW_CHILDREN_no DW_AT_name DW_FORM_strp [9] DW_TAG_imported_declaration DW_CHILDREN_no DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_import DW_FORM_ref4 [10] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [11] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_location DW_FORM_exprloc DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [12] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_exprloc DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [13] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [14] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [15] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [16] DW_TAG_label DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_low_pc DW_FORM_addr [17] DW_TAG_pointer_type DW_CHILDREN_no .debug_info contents: 0x00000000: Compile Unit: length = 0x0000027c version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000280) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 2d7a8cf90478cd845ffb39763b0e95b7715322d2)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "tests/fannkuch.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a8] = "/home/alon/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000006, 0x00000a53) [0x00000a55, 0x00000bc5) [0x00000bc7, 0x00001360)) 0x00000026: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x002b => {0x0000002b} "worker_args") 0x0000002b: DW_TAG_structure_type [3] * DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cf] = "worker_args") DW_AT_byte_size [DW_FORM_data1] (0x0c) DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (20) 0x00000034: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "i") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x00) 0x00000040: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "n") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x04) 0x0000004c: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ca] = "next") DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (22) DW_AT_data_member_location [DW_FORM_data1] (0x08) 0x00000058: NULL 0x00000059: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c4] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000060: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000065: DW_TAG_namespace [6] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000db] = "std") 0x0000006a: DW_TAG_typedef [7] DW_AT_type [DW_FORM_ref4] (cu + 0x0076 => {0x00000076} "decltype(nullptr)") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000f1] = "nullptr_t") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/system/include/libcxx/__nullptr") DW_AT_decl_line [DW_FORM_data1] (57) 0x00000075: NULL 0x00000076: DW_TAG_unspecified_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000df] = "decltype(nullptr)") 0x0000007b: DW_TAG_imported_declaration [9] DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/system/include/libcxx/stddef.h") DW_AT_decl_line [DW_FORM_data1] (52) DW_AT_import [DW_FORM_ref4] (cu + 0x006a => {0x0000006a}) 0x00000082: DW_TAG_subprogram [10] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006) DW_AT_high_pc [DW_FORM_data4] (0x00000a4d) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000fb] = "_Z15fannkuch_workerPv") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000111] = "fannkuch_worker") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000099: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x3c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013d] = "_arg") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x026d => {0x0000026d} "*") 0x000000a7: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x38) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000142] = "args") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (28) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000000b5: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x34) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000147] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000c3: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x30) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014d] = "count") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000d1: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x2c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000153] = "perm") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000df: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x28) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000158] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000ed: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x24) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000fb: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x20) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "i") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000109: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x1c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "n") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000117: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x18) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000167] = "r") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000125: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000169] = "j") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000133: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x10) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016b] = "k") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000141: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0xc) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016d] = "tmp") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000014f: DW_TAG_lexical_block [13] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000087a) DW_AT_high_pc [DW_FORM_data4] (0x00000136) 0x00000158: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x8) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000171] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (74) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000166: NULL 0x00000167: NULL 0x00000168: DW_TAG_subprogram [14] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000a55) DW_AT_high_pc [DW_FORM_data4] (0x00000170) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000121] = "main") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000017b: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x18) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "argc") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000189: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000179] = "argv") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x026e => {0x0000026e} "char**") 0x00000197: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x10) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "n") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (153) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001a5: NULL 0x000001a6: DW_TAG_subprogram [15] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000bc7) DW_AT_high_pc [DW_FORM_data4] (0x00000799) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000126] = "_ZL8fannkuchi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000134] = "fannkuch") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001bd: DW_TAG_formal_parameter [11] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x2c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "n") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001cb: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x28) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000142] = "args") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001d9: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x24) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000183] = "targs") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001e7: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x20) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000189] = "showmax") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (90) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001f5: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x1c) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000147] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x00000203: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x18) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014d] = "count") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x00000211: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "i") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000021f: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x10) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000167] = "r") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000022d: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0xc) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000158] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000023b: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x8) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000249: DW_TAG_label [16] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "cleanup") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (137) DW_AT_low_pc [DW_FORM_addr] (0x0000000000001241) 0x00000254: DW_TAG_lexical_block [13] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000001091) DW_AT_high_pc [DW_FORM_data4] (0x00000107) 0x0000025d: DW_TAG_variable [12] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0x4) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000171] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (125) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000026b: NULL 0x0000026c: NULL 0x0000026d: DW_TAG_pointer_type [17] 0x0000026e: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0273 => {0x00000273} "char*") 0x00000273: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0278 => {0x00000278} "char") 0x00000278: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017e] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x0000027f: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000f79 version: 4 prologue_length: 0x00000059 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 include_directories[ 1] = "tests" include_directories[ 2] = "system/include/libcxx" file_names[ 1]: name: "fannkuch.cpp" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 2]: name: "__nullptr" dir_index: 2 mod_time: 0x00000000 length: 0x00000000 file_names[ 3]: name: "stddef.h" dir_index: 2 mod_time: 0x00000000 length: 0x00000000 0x00000063: 00 DW_LNE_set_address (0x0000000000000006) 0x0000006a: 03 DW_LNS_advance_line (27) 0x0000006c: 01 DW_LNS_copy 0x0000000000000006 27 0 1 0 0 is_stmt 0x0000006d: 00 DW_LNE_set_address (0x000000000000020f) 0x00000074: 03 DW_LNS_advance_line (28) 0x00000076: 05 DW_LNS_set_column (45) 0x00000078: 0a DW_LNS_set_prologue_end 0x00000079: 01 DW_LNS_copy 0x000000000000020f 28 45 1 0 0 is_stmt prologue_end 0x0000007a: 00 DW_LNE_set_address (0x0000000000000216) 0x00000081: 05 DW_LNS_set_column (24) 0x00000083: 06 DW_LNS_negate_stmt 0x00000084: 01 DW_LNS_copy 0x0000000000000216 28 24 1 0 0 0x00000085: 00 DW_LNE_set_address (0x000000000000021d) 0x0000008c: 03 DW_LNS_advance_line (32) 0x0000008e: 05 DW_LNS_set_column (13) 0x00000090: 06 DW_LNS_negate_stmt 0x00000091: 01 DW_LNS_copy 0x000000000000021d 32 13 1 0 0 is_stmt 0x00000092: 00 DW_LNE_set_address (0x0000000000000224) 0x00000099: 03 DW_LNS_advance_line (33) 0x0000009b: 05 DW_LNS_set_column (8) 0x0000009d: 01 DW_LNS_copy 0x0000000000000224 33 8 1 0 0 is_stmt 0x0000009e: 00 DW_LNE_set_address (0x000000000000022b) 0x000000a5: 05 DW_LNS_set_column (14) 0x000000a7: 06 DW_LNS_negate_stmt 0x000000a8: 01 DW_LNS_copy 0x000000000000022b 33 14 1 0 0 0x000000a9: 00 DW_LNE_set_address (0x0000000000000232) 0x000000b0: 05 DW_LNS_set_column (6) 0x000000b2: 01 DW_LNS_copy 0x0000000000000232 33 6 1 0 0 0x000000b3: 00 DW_LNE_set_address (0x0000000000000239) 0x000000ba: 03 DW_LNS_advance_line (34) 0x000000bc: 05 DW_LNS_set_column (25) 0x000000be: 06 DW_LNS_negate_stmt 0x000000bf: 01 DW_LNS_copy 0x0000000000000239 34 25 1 0 0 is_stmt 0x000000c0: 00 DW_LNE_set_address (0x0000000000000240) 0x000000c7: 05 DW_LNS_set_column (27) 0x000000c9: 06 DW_LNS_negate_stmt 0x000000ca: 01 DW_LNS_copy 0x0000000000000240 34 27 1 0 0 0x000000cb: 00 DW_LNE_set_address (0x000000000000024b) 0x000000d2: 05 DW_LNS_set_column (18) 0x000000d4: 01 DW_LNS_copy 0x000000000000024b 34 18 1 0 0 0x000000d5: 00 DW_LNE_set_address (0x0000000000000251) 0x000000dc: 05 DW_LNS_set_column (10) 0x000000de: 01 DW_LNS_copy 0x0000000000000251 34 10 1 0 0 0x000000df: 00 DW_LNE_set_address (0x0000000000000258) 0x000000e6: 03 DW_LNS_advance_line (35) 0x000000e8: 05 DW_LNS_set_column (24) 0x000000ea: 06 DW_LNS_negate_stmt 0x000000eb: 01 DW_LNS_copy 0x0000000000000258 35 24 1 0 0 is_stmt 0x000000ec: 00 DW_LNE_set_address (0x000000000000025f) 0x000000f3: 05 DW_LNS_set_column (26) 0x000000f5: 06 DW_LNS_negate_stmt 0x000000f6: 01 DW_LNS_copy 0x000000000000025f 35 26 1 0 0 0x000000f7: 00 DW_LNE_set_address (0x000000000000026a) 0x000000fe: 05 DW_LNS_set_column (17) 0x00000100: 01 DW_LNS_copy 0x000000000000026a 35 17 1 0 0 0x00000101: 00 DW_LNE_set_address (0x0000000000000270) 0x00000108: 05 DW_LNS_set_column (9) 0x0000010a: 01 DW_LNS_copy 0x0000000000000270 35 9 1 0 0 0x0000010b: 00 DW_LNE_set_address (0x0000000000000277) 0x00000112: 03 DW_LNS_advance_line (36) 0x00000114: 05 DW_LNS_set_column (25) 0x00000116: 06 DW_LNS_negate_stmt 0x00000117: 01 DW_LNS_copy 0x0000000000000277 36 25 1 0 0 is_stmt 0x00000118: 00 DW_LNE_set_address (0x000000000000027e) 0x0000011f: 05 DW_LNS_set_column (27) 0x00000121: 06 DW_LNS_negate_stmt 0x00000122: 01 DW_LNS_copy 0x000000000000027e 36 27 1 0 0 0x00000123: 00 DW_LNE_set_address (0x0000000000000289) 0x0000012a: 05 DW_LNS_set_column (18) 0x0000012c: 01 DW_LNS_copy 0x0000000000000289 36 18 1 0 0 0x0000012d: 00 DW_LNE_set_address (0x000000000000028f) 0x00000134: 05 DW_LNS_set_column (10) 0x00000136: 01 DW_LNS_copy 0x000000000000028f 36 10 1 0 0 0x00000137: 00 DW_LNE_set_address (0x0000000000000296) 0x0000013e: 03 DW_LNS_advance_line (37) 0x00000140: 05 DW_LNS_set_column (11) 0x00000142: 06 DW_LNS_negate_stmt 0x00000143: 01 DW_LNS_copy 0x0000000000000296 37 11 1 0 0 is_stmt 0x00000144: 00 DW_LNE_set_address (0x000000000000029d) 0x0000014b: 05 DW_LNS_set_column (16) 0x0000014d: 06 DW_LNS_negate_stmt 0x0000014e: 01 DW_LNS_copy 0x000000000000029d 37 16 1 0 0 0x0000014f: 00 DW_LNE_set_address (0x00000000000002a8) 0x00000156: 05 DW_LNS_set_column (20) 0x00000158: 01 DW_LNS_copy 0x00000000000002a8 37 20 1 0 0 0x00000159: 00 DW_LNE_set_address (0x00000000000002af) 0x00000160: 05 DW_LNS_set_column (18) 0x00000162: 01 DW_LNS_copy 0x00000000000002af 37 18 1 0 0 0x00000163: 00 DW_LNE_set_address (0x00000000000002be) 0x0000016a: 05 DW_LNS_set_column (4) 0x0000016c: 01 DW_LNS_copy 0x00000000000002be 37 4 1 0 0 0x0000016d: 00 DW_LNE_set_address (0x00000000000002ce) 0x00000174: 03 DW_LNS_advance_line (38) 0x00000176: 05 DW_LNS_set_column (18) 0x00000178: 06 DW_LNS_negate_stmt 0x00000179: 01 DW_LNS_copy 0x00000000000002ce 38 18 1 0 0 is_stmt 0x0000017a: 00 DW_LNE_set_address (0x00000000000002d5) 0x00000181: 05 DW_LNS_set_column (7) 0x00000183: 06 DW_LNS_negate_stmt 0x00000184: 01 DW_LNS_copy 0x00000000000002d5 38 7 1 0 0 0x00000185: 00 DW_LNE_set_address (0x00000000000002dc) 0x0000018c: 05 DW_LNS_set_column (13) 0x0000018e: 01 DW_LNS_copy 0x00000000000002dc 38 13 1 0 0 0x0000018f: 00 DW_LNE_set_address (0x00000000000002e3) 0x00000196: 05 DW_LNS_set_column (7) 0x00000198: 01 DW_LNS_copy 0x00000000000002e3 38 7 1 0 0 0x00000199: 00 DW_LNE_set_address (0x00000000000002f5) 0x000001a0: 05 DW_LNS_set_column (16) 0x000001a2: 01 DW_LNS_copy 0x00000000000002f5 38 16 1 0 0 0x000001a3: 00 DW_LNE_set_address (0x00000000000002fc) 0x000001aa: 03 DW_LNS_advance_line (37) 0x000001ac: 05 DW_LNS_set_column (24) 0x000001ae: 06 DW_LNS_negate_stmt 0x000001af: 01 DW_LNS_copy 0x00000000000002fc 37 24 1 0 0 is_stmt 0x000001b0: 00 DW_LNE_set_address (0x0000000000000315) 0x000001b7: 05 DW_LNS_set_column (4) 0x000001b9: 06 DW_LNS_negate_stmt 0x000001ba: 01 DW_LNS_copy 0x0000000000000315 37 4 1 0 0 0x000001bb: 00 DW_LNE_set_address (0x0000000000000317) 0x000001c2: 01 DW_LNS_copy 0x0000000000000317 37 4 1 0 0 0x000001c3: 00 DW_LNE_set_address (0x000000000000031a) 0x000001ca: 03 DW_LNS_advance_line (39) 0x000001cc: 05 DW_LNS_set_column (21) 0x000001ce: 06 DW_LNS_negate_stmt 0x000001cf: 01 DW_LNS_copy 0x000000000000031a 39 21 1 0 0 is_stmt 0x000001d0: 00 DW_LNE_set_address (0x0000000000000321) 0x000001d7: 05 DW_LNS_set_column (23) 0x000001d9: 06 DW_LNS_negate_stmt 0x000001da: 01 DW_LNS_copy 0x0000000000000321 39 23 1 0 0 0x000001db: 00 DW_LNE_set_address (0x000000000000032c) 0x000001e2: 05 DW_LNS_set_column (4) 0x000001e4: 01 DW_LNS_copy 0x000000000000032c 39 4 1 0 0 0x000001e5: 00 DW_LNE_set_address (0x0000000000000333) 0x000001ec: 05 DW_LNS_set_column (10) 0x000001ee: 01 DW_LNS_copy 0x0000000000000333 39 10 1 0 0 0x000001ef: 00 DW_LNE_set_address (0x000000000000033a) 0x000001f6: 05 DW_LNS_set_column (16) 0x000001f8: 01 DW_LNS_copy 0x000000000000033a 39 16 1 0 0 0x000001f9: 00 DW_LNE_set_address (0x0000000000000341) 0x00000200: 05 DW_LNS_set_column (4) 0x00000202: 01 DW_LNS_copy 0x0000000000000341 39 4 1 0 0 0x00000203: 00 DW_LNE_set_address (0x0000000000000353) 0x0000020a: 05 DW_LNS_set_column (19) 0x0000020c: 01 DW_LNS_copy 0x0000000000000353 39 19 1 0 0 0x0000020d: 00 DW_LNE_set_address (0x000000000000035a) 0x00000214: 03 DW_LNS_advance_line (40) 0x00000216: 06 DW_LNS_negate_stmt 0x00000217: 01 DW_LNS_copy 0x000000000000035a 40 19 1 0 0 is_stmt 0x00000218: 00 DW_LNE_set_address (0x0000000000000361) 0x0000021f: 05 DW_LNS_set_column (25) 0x00000221: 06 DW_LNS_negate_stmt 0x00000222: 01 DW_LNS_copy 0x0000000000000361 40 25 1 0 0 0x00000223: 00 DW_LNE_set_address (0x0000000000000368) 0x0000022a: 05 DW_LNS_set_column (4) 0x0000022c: 01 DW_LNS_copy 0x0000000000000368 40 4 1 0 0 0x0000022d: 00 DW_LNE_set_address (0x000000000000036f) 0x00000234: 05 DW_LNS_set_column (10) 0x00000236: 01 DW_LNS_copy 0x000000000000036f 40 10 1 0 0 0x00000237: 00 DW_LNE_set_address (0x0000000000000376) 0x0000023e: 05 DW_LNS_set_column (12) 0x00000240: 01 DW_LNS_copy 0x0000000000000376 40 12 1 0 0 0x00000241: 00 DW_LNE_set_address (0x0000000000000381) 0x00000248: 05 DW_LNS_set_column (4) 0x0000024a: 01 DW_LNS_copy 0x0000000000000381 40 4 1 0 0 0x0000024b: 00 DW_LNE_set_address (0x0000000000000393) 0x00000252: 05 DW_LNS_set_column (17) 0x00000254: 01 DW_LNS_copy 0x0000000000000393 40 17 1 0 0 0x00000255: 00 DW_LNE_set_address (0x000000000000039a) 0x0000025c: 03 DW_LNS_advance_line (41) 0x0000025e: 05 DW_LNS_set_column (8) 0x00000260: 06 DW_LNS_negate_stmt 0x00000261: 01 DW_LNS_copy 0x000000000000039a 41 8 1 0 0 is_stmt 0x00000262: 00 DW_LNE_set_address (0x00000000000003a1) 0x00000269: 05 DW_LNS_set_column (6) 0x0000026b: 06 DW_LNS_negate_stmt 0x0000026c: 01 DW_LNS_copy 0x00000000000003a1 41 6 1 0 0 0x0000026d: 00 DW_LNE_set_address (0x00000000000003b2) 0x00000274: 03 DW_LNS_advance_line (44) 0x00000276: 05 DW_LNS_set_column (14) 0x00000278: 06 DW_LNS_negate_stmt 0x00000279: 01 DW_LNS_copy 0x00000000000003b2 44 14 1 0 0 is_stmt 0x0000027a: 00 DW_LNE_set_address (0x00000000000003b9) 0x00000281: 05 DW_LNS_set_column (16) 0x00000283: 06 DW_LNS_negate_stmt 0x00000284: 01 DW_LNS_copy 0x00000000000003b9 44 16 1 0 0 0x00000285: 00 DW_LNE_set_address (0x00000000000003c8) 0x0000028c: 05 DW_LNS_set_column (7) 0x0000028e: 01 DW_LNS_copy 0x00000000000003c8 44 7 1 0 0 0x0000028f: 00 DW_LNE_set_address (0x00000000000003d8) 0x00000296: 03 DW_LNS_advance_line (45) 0x00000298: 05 DW_LNS_set_column (25) 0x0000029a: 06 DW_LNS_negate_stmt 0x0000029b: 01 DW_LNS_copy 0x00000000000003d8 45 25 1 0 0 is_stmt 0x0000029c: 00 DW_LNE_set_address (0x00000000000003df) 0x000002a3: 05 DW_LNS_set_column (10) 0x000002a5: 06 DW_LNS_negate_stmt 0x000002a6: 01 DW_LNS_copy 0x00000000000003df 45 10 1 0 0 0x000002a7: 00 DW_LNE_set_address (0x00000000000003e6) 0x000002ae: 05 DW_LNS_set_column (16) 0x000002b0: 01 DW_LNS_copy 0x00000000000003e6 45 16 1 0 0 0x000002b1: 00 DW_LNE_set_address (0x00000000000003ed) 0x000002b8: 05 DW_LNS_set_column (18) 0x000002ba: 01 DW_LNS_copy 0x00000000000003ed 45 18 1 0 0 0x000002bb: 00 DW_LNE_set_address (0x00000000000003f8) 0x000002c2: 05 DW_LNS_set_column (10) 0x000002c4: 01 DW_LNS_copy 0x00000000000003f8 45 10 1 0 0 0x000002c5: 00 DW_LNE_set_address (0x000000000000040a) 0x000002cc: 05 DW_LNS_set_column (23) 0x000002ce: 01 DW_LNS_copy 0x000000000000040a 45 23 1 0 0 0x000002cf: 00 DW_LNE_set_address (0x0000000000000411) 0x000002d6: 03 DW_LNS_advance_line (44) 0x000002d8: 05 DW_LNS_set_column (22) 0x000002da: 06 DW_LNS_negate_stmt 0x000002db: 01 DW_LNS_copy 0x0000000000000411 44 22 1 0 0 is_stmt 0x000002dc: 00 DW_LNE_set_address (0x000000000000042a) 0x000002e3: 05 DW_LNS_set_column (7) 0x000002e5: 06 DW_LNS_negate_stmt 0x000002e6: 01 DW_LNS_copy 0x000000000000042a 44 7 1 0 0 0x000002e7: 00 DW_LNE_set_address (0x000000000000042c) 0x000002ee: 01 DW_LNS_copy 0x000000000000042c 44 7 1 0 0 0x000002ef: 00 DW_LNE_set_address (0x000000000000042f) 0x000002f6: 03 DW_LNS_advance_line (46) 0x000002f8: 05 DW_LNS_set_column (11) 0x000002fa: 06 DW_LNS_negate_stmt 0x000002fb: 01 DW_LNS_copy 0x000000000000042f 46 11 1 0 0 is_stmt 0x000002fc: 00 DW_LNE_set_address (0x000000000000043d) 0x00000303: 05 DW_LNS_set_column (25) 0x00000305: 06 DW_LNS_negate_stmt 0x00000306: 01 DW_LNS_copy 0x000000000000043d 46 25 1 0 0 0x00000307: 00 DW_LNE_set_address (0x0000000000000444) 0x0000030e: 05 DW_LNS_set_column (28) 0x00000310: 01 DW_LNS_copy 0x0000000000000444 46 28 1 0 0 0x00000311: 00 DW_LNE_set_address (0x000000000000044b) 0x00000318: 05 DW_LNS_set_column (34) 0x0000031a: 01 DW_LNS_copy 0x000000000000044b 46 34 1 0 0 0x0000031b: 00 DW_LNE_set_address (0x0000000000000452) 0x00000322: 05 DW_LNS_set_column (36) 0x00000324: 01 DW_LNS_copy 0x0000000000000452 46 36 1 0 0 0x00000325: 00 DW_LNE_set_address (0x000000000000045d) 0x0000032c: 05 DW_LNS_set_column (28) 0x0000032e: 01 DW_LNS_copy 0x000000000000045d 46 28 1 0 0 0x0000032f: 00 DW_LNE_set_address (0x0000000000000476) 0x00000336: 05 DW_LNS_set_column (44) 0x00000338: 01 DW_LNS_copy 0x0000000000000476 46 44 1 0 0 0x00000339: 00 DW_LNE_set_address (0x000000000000047d) 0x00000340: 05 DW_LNS_set_column (46) 0x00000342: 01 DW_LNS_copy 0x000000000000047d 46 46 1 0 0 0x00000343: 00 DW_LNE_set_address (0x0000000000000488) 0x0000034a: 05 DW_LNS_set_column (41) 0x0000034c: 01 DW_LNS_copy 0x0000000000000488 46 41 1 0 0 0x0000034d: 00 DW_LNE_set_address (0x0000000000000497) 0x00000354: 05 DW_LNS_set_column (11) 0x00000356: 01 DW_LNS_copy 0x0000000000000497 46 11 1 0 0 0x00000357: 00 DW_LNE_set_address (0x00000000000004ab) 0x0000035e: 03 DW_LNS_advance_line (47) 0x00000360: 05 DW_LNS_set_column (17) 0x00000362: 06 DW_LNS_negate_stmt 0x00000363: 01 DW_LNS_copy 0x00000000000004ab 47 17 1 0 0 is_stmt 0x00000364: 00 DW_LNE_set_address (0x00000000000004b2) 0x0000036b: 05 DW_LNS_set_column (22) 0x0000036d: 06 DW_LNS_negate_stmt 0x0000036e: 01 DW_LNS_copy 0x00000000000004b2 47 22 1 0 0 0x0000036f: 00 DW_LNE_set_address (0x00000000000004bd) 0x00000376: 05 DW_LNS_set_column (26) 0x00000378: 01 DW_LNS_copy 0x00000000000004bd 47 26 1 0 0 0x00000379: 00 DW_LNE_set_address (0x00000000000004c4) 0x00000380: 05 DW_LNS_set_column (24) 0x00000382: 01 DW_LNS_copy 0x00000000000004c4 47 24 1 0 0 0x00000383: 00 DW_LNE_set_address (0x00000000000004d3) 0x0000038a: 05 DW_LNS_set_column (10) 0x0000038c: 01 DW_LNS_copy 0x00000000000004d3 47 10 1 0 0 0x0000038d: 00 DW_LNE_set_address (0x00000000000004e3) 0x00000394: 03 DW_LNS_advance_line (48) 0x00000396: 05 DW_LNS_set_column (23) 0x00000398: 06 DW_LNS_negate_stmt 0x00000399: 01 DW_LNS_copy 0x00000000000004e3 48 23 1 0 0 is_stmt 0x0000039a: 00 DW_LNE_set_address (0x00000000000004ea) 0x000003a1: 05 DW_LNS_set_column (29) 0x000003a3: 06 DW_LNS_negate_stmt 0x000003a4: 01 DW_LNS_copy 0x00000000000004ea 48 29 1 0 0 0x000003a5: 00 DW_LNE_set_address (0x00000000000004f1) 0x000003ac: 05 DW_LNS_set_column (23) 0x000003ae: 01 DW_LNS_copy 0x00000000000004f1 48 23 1 0 0 0x000003af: 00 DW_LNE_set_address (0x000000000000050a) 0x000003b6: 05 DW_LNS_set_column (13) 0x000003b8: 01 DW_LNS_copy 0x000000000000050a 48 13 1 0 0 0x000003b9: 00 DW_LNE_set_address (0x0000000000000511) 0x000003c0: 05 DW_LNS_set_column (18) 0x000003c2: 01 DW_LNS_copy 0x0000000000000511 48 18 1 0 0 0x000003c3: 00 DW_LNE_set_address (0x0000000000000518) 0x000003ca: 05 DW_LNS_set_column (13) 0x000003cc: 01 DW_LNS_copy 0x0000000000000518 48 13 1 0 0 0x000003cd: 00 DW_LNE_set_address (0x000000000000052a) 0x000003d4: 05 DW_LNS_set_column (21) 0x000003d6: 01 DW_LNS_copy 0x000000000000052a 48 21 1 0 0 0x000003d7: 00 DW_LNE_set_address (0x0000000000000531) 0x000003de: 03 DW_LNS_advance_line (47) 0x000003e0: 05 DW_LNS_set_column (30) 0x000003e2: 06 DW_LNS_negate_stmt 0x000003e3: 01 DW_LNS_copy 0x0000000000000531 47 30 1 0 0 is_stmt 0x000003e4: 00 DW_LNE_set_address (0x000000000000054a) 0x000003eb: 05 DW_LNS_set_column (10) 0x000003ed: 06 DW_LNS_negate_stmt 0x000003ee: 01 DW_LNS_copy 0x000000000000054a 47 10 1 0 0 0x000003ef: 00 DW_LNE_set_address (0x000000000000054c) 0x000003f6: 01 DW_LNS_copy 0x000000000000054c 47 10 1 0 0 0x000003f7: 00 DW_LNE_set_address (0x0000000000000553) 0x000003fe: 03 DW_LNS_advance_line (49) 0x00000400: 05 DW_LNS_set_column (16) 0x00000402: 06 DW_LNS_negate_stmt 0x00000403: 01 DW_LNS_copy 0x0000000000000553 49 16 1 0 0 is_stmt 0x00000404: 00 DW_LNE_set_address (0x000000000000055a) 0x0000040b: 03 DW_LNS_advance_line (50) 0x0000040d: 05 DW_LNS_set_column (14) 0x0000040f: 01 DW_LNS_copy 0x000000000000055a 50 14 1 0 0 is_stmt 0x00000410: 00 DW_LNE_set_address (0x0000000000000568) 0x00000417: 05 DW_LNS_set_column (12) 0x00000419: 06 DW_LNS_negate_stmt 0x0000041a: 01 DW_LNS_copy 0x0000000000000568 50 12 1 0 0 0x0000041b: 00 DW_LNE_set_address (0x0000000000000575) 0x00000422: 03 DW_LNS_advance_line (52) 0x00000424: 05 DW_LNS_set_column (20) 0x00000426: 06 DW_LNS_negate_stmt 0x00000427: 01 DW_LNS_copy 0x0000000000000575 52 20 1 0 0 is_stmt 0x00000428: 00 DW_LNE_set_address (0x000000000000057c) 0x0000042f: 05 DW_LNS_set_column (29) 0x00000431: 06 DW_LNS_negate_stmt 0x00000432: 01 DW_LNS_copy 0x000000000000057c 52 29 1 0 0 0x00000433: 00 DW_LNE_set_address (0x0000000000000583) 0x0000043a: 05 DW_LNS_set_column (31) 0x0000043c: 01 DW_LNS_copy 0x0000000000000583 52 31 1 0 0 0x0000043d: 00 DW_LNE_set_address (0x000000000000058e) 0x00000444: 05 DW_LNS_set_column (27) 0x00000446: 01 DW_LNS_copy 0x000000000000058e 52 27 1 0 0 0x00000447: 00 DW_LNE_set_address (0x0000000000000595) 0x0000044e: 05 DW_LNS_set_column (36) 0x00000450: 01 DW_LNS_copy 0x0000000000000595 52 36 1 0 0 0x00000451: 00 DW_LNE_set_address (0x00000000000005a0) 0x00000458: 05 DW_LNS_set_column (40) 0x0000045a: 01 DW_LNS_copy 0x00000000000005a0 52 40 1 0 0 0x0000045b: 00 DW_LNE_set_address (0x00000000000005a7) 0x00000462: 05 DW_LNS_set_column (38) 0x00000464: 01 DW_LNS_copy 0x00000000000005a7 52 38 1 0 0 0x00000465: 00 DW_LNE_set_address (0x00000000000005b6) 0x0000046c: 05 DW_LNS_set_column (13) 0x0000046e: 01 DW_LNS_copy 0x00000000000005b6 52 13 1 0 0 0x0000046f: 00 DW_LNE_set_address (0x00000000000005c6) 0x00000476: 03 DW_LNS_advance_line (53) 0x00000478: 05 DW_LNS_set_column (22) 0x0000047a: 06 DW_LNS_negate_stmt 0x0000047b: 01 DW_LNS_copy 0x00000000000005c6 53 22 1 0 0 is_stmt 0x0000047c: 00 DW_LNE_set_address (0x00000000000005cd) 0x00000483: 05 DW_LNS_set_column (27) 0x00000485: 06 DW_LNS_negate_stmt 0x00000486: 01 DW_LNS_copy 0x00000000000005cd 53 27 1 0 0 0x00000487: 00 DW_LNE_set_address (0x00000000000005d5) 0x0000048e: 05 DW_LNS_set_column (22) 0x00000490: 01 DW_LNS_copy 0x00000000000005d5 53 22 1 0 0 0x00000491: 00 DW_LNE_set_address (0x00000000000005f6) 0x00000498: 05 DW_LNS_set_column (20) 0x0000049a: 01 DW_LNS_copy 0x00000000000005f6 53 20 1 0 0 0x0000049b: 00 DW_LNE_set_address (0x00000000000005fe) 0x000004a2: 03 DW_LNS_advance_line (54) 0x000004a4: 05 DW_LNS_set_column (26) 0x000004a6: 06 DW_LNS_negate_stmt 0x000004a7: 01 DW_LNS_copy 0x00000000000005fe 54 26 1 0 0 is_stmt 0x000004a8: 00 DW_LNE_set_address (0x0000000000000606) 0x000004af: 05 DW_LNS_set_column (31) 0x000004b1: 06 DW_LNS_negate_stmt 0x000004b2: 01 DW_LNS_copy 0x0000000000000606 54 31 1 0 0 0x000004b3: 00 DW_LNE_set_address (0x000000000000060e) 0x000004ba: 05 DW_LNS_set_column (26) 0x000004bc: 01 DW_LNS_copy 0x000000000000060e 54 26 1 0 0 0x000004bd: 00 DW_LNE_set_address (0x0000000000000630) 0x000004c4: 05 DW_LNS_set_column (16) 0x000004c6: 01 DW_LNS_copy 0x0000000000000630 54 16 1 0 0 0x000004c7: 00 DW_LNE_set_address (0x0000000000000638) 0x000004ce: 05 DW_LNS_set_column (21) 0x000004d0: 01 DW_LNS_copy 0x0000000000000638 54 21 1 0 0 0x000004d1: 00 DW_LNE_set_address (0x0000000000000640) 0x000004d8: 05 DW_LNS_set_column (16) 0x000004da: 01 DW_LNS_copy 0x0000000000000640 54 16 1 0 0 0x000004db: 00 DW_LNE_set_address (0x0000000000000659) 0x000004e2: 05 DW_LNS_set_column (24) 0x000004e4: 01 DW_LNS_copy 0x0000000000000659 54 24 1 0 0 0x000004e5: 00 DW_LNE_set_address (0x0000000000000662) 0x000004ec: 03 DW_LNS_advance_line (55) 0x000004ee: 05 DW_LNS_set_column (26) 0x000004f0: 06 DW_LNS_negate_stmt 0x000004f1: 01 DW_LNS_copy 0x0000000000000662 55 26 1 0 0 is_stmt 0x000004f2: 00 DW_LNE_set_address (0x000000000000066a) 0x000004f9: 05 DW_LNS_set_column (16) 0x000004fb: 06 DW_LNS_negate_stmt 0x000004fc: 01 DW_LNS_copy 0x000000000000066a 55 16 1 0 0 0x000004fd: 00 DW_LNE_set_address (0x0000000000000672) 0x00000504: 05 DW_LNS_set_column (21) 0x00000506: 01 DW_LNS_copy 0x0000000000000672 55 21 1 0 0 0x00000507: 00 DW_LNE_set_address (0x000000000000067a) 0x0000050e: 05 DW_LNS_set_column (16) 0x00000510: 01 DW_LNS_copy 0x000000000000067a 55 16 1 0 0 0x00000511: 00 DW_LNE_set_address (0x0000000000000693) 0x00000518: 05 DW_LNS_set_column (24) 0x0000051a: 01 DW_LNS_copy 0x0000000000000693 55 24 1 0 0 0x0000051b: 00 DW_LNE_set_address (0x000000000000069c) 0x00000522: 03 DW_LNS_advance_line (52) 0x00000524: 05 DW_LNS_set_column (44) 0x00000526: 06 DW_LNS_negate_stmt 0x00000527: 01 DW_LNS_copy 0x000000000000069c 52 44 1 0 0 is_stmt 0x00000528: 00 DW_LNE_set_address (0x00000000000006bb) 0x0000052f: 05 DW_LNS_set_column (49) 0x00000531: 06 DW_LNS_negate_stmt 0x00000532: 01 DW_LNS_copy 0x00000000000006bb 52 49 1 0 0 0x00000533: 00 DW_LNE_set_address (0x00000000000006da) 0x0000053a: 05 DW_LNS_set_column (13) 0x0000053c: 01 DW_LNS_copy 0x00000000000006da 52 13 1 0 0 0x0000053d: 00 DW_LNE_set_address (0x00000000000006dc) 0x00000544: 01 DW_LNS_copy 0x00000000000006dc 52 13 1 0 0 0x00000545: 00 DW_LNE_set_address (0x00000000000006df) 0x0000054c: 03 DW_LNS_advance_line (57) 0x0000054e: 05 DW_LNS_set_column (18) 0x00000550: 06 DW_LNS_negate_stmt 0x00000551: 01 DW_LNS_copy 0x00000000000006df 57 18 1 0 0 is_stmt 0x00000552: 00 DW_LNE_set_address (0x00000000000006fe) 0x00000559: 03 DW_LNS_advance_line (58) 0x0000055b: 05 DW_LNS_set_column (19) 0x0000055d: 01 DW_LNS_copy 0x00000000000006fe 58 19 1 0 0 is_stmt 0x0000055e: 00 DW_LNE_set_address (0x0000000000000706) 0x00000565: 05 DW_LNS_set_column (24) 0x00000567: 06 DW_LNS_negate_stmt 0x00000568: 01 DW_LNS_copy 0x0000000000000706 58 24 1 0 0 0x00000569: 00 DW_LNE_set_address (0x000000000000070e) 0x00000570: 05 DW_LNS_set_column (19) 0x00000572: 01 DW_LNS_copy 0x000000000000070e 58 19 1 0 0 0x00000573: 00 DW_LNE_set_address (0x0000000000000730) 0x0000057a: 05 DW_LNS_set_column (17) 0x0000057c: 01 DW_LNS_copy 0x0000000000000730 58 17 1 0 0 0x0000057d: 00 DW_LNE_set_address (0x0000000000000738) 0x00000584: 03 DW_LNS_advance_line (59) 0x00000586: 05 DW_LNS_set_column (23) 0x00000588: 06 DW_LNS_negate_stmt 0x00000589: 01 DW_LNS_copy 0x0000000000000738 59 23 1 0 0 is_stmt 0x0000058a: 00 DW_LNE_set_address (0x0000000000000740) 0x00000591: 05 DW_LNS_set_column (13) 0x00000593: 06 DW_LNS_negate_stmt 0x00000594: 01 DW_LNS_copy 0x0000000000000740 59 13 1 0 0 0x00000595: 00 DW_LNE_set_address (0x0000000000000748) 0x0000059c: 05 DW_LNS_set_column (18) 0x0000059e: 01 DW_LNS_copy 0x0000000000000748 59 18 1 0 0 0x0000059f: 00 DW_LNE_set_address (0x0000000000000750) 0x000005a6: 05 DW_LNS_set_column (13) 0x000005a8: 01 DW_LNS_copy 0x0000000000000750 59 13 1 0 0 0x000005a9: 00 DW_LNE_set_address (0x0000000000000769) 0x000005b0: 05 DW_LNS_set_column (21) 0x000005b2: 01 DW_LNS_copy 0x0000000000000769 59 21 1 0 0 0x000005b3: 00 DW_LNE_set_address (0x0000000000000772) 0x000005ba: 03 DW_LNS_advance_line (60) 0x000005bc: 05 DW_LNS_set_column (17) 0x000005be: 06 DW_LNS_negate_stmt 0x000005bf: 01 DW_LNS_copy 0x0000000000000772 60 17 1 0 0 is_stmt 0x000005c0: 00 DW_LNE_set_address (0x000000000000077a) 0x000005c7: 05 DW_LNS_set_column (15) 0x000005c9: 06 DW_LNS_negate_stmt 0x000005ca: 01 DW_LNS_copy 0x000000000000077a 60 15 1 0 0 0x000005cb: 00 DW_LNE_set_address (0x0000000000000782) 0x000005d2: 03 DW_LNS_advance_line (61) 0x000005d4: 05 DW_LNS_set_column (19) 0x000005d6: 06 DW_LNS_negate_stmt 0x000005d7: 01 DW_LNS_copy 0x0000000000000782 61 19 1 0 0 is_stmt 0x000005d8: 00 DW_LNE_set_address (0x000000000000078a) 0x000005df: 05 DW_LNS_set_column (10) 0x000005e1: 06 DW_LNS_negate_stmt 0x000005e2: 01 DW_LNS_copy 0x000000000000078a 61 10 1 0 0 0x000005e3: 00 DW_LNE_set_address (0x0000000000000790) 0x000005ea: 03 DW_LNS_advance_line (62) 0x000005ec: 05 DW_LNS_set_column (14) 0x000005ee: 06 DW_LNS_negate_stmt 0x000005ef: 01 DW_LNS_copy 0x0000000000000790 62 14 1 0 0 is_stmt 0x000005f0: 00 DW_LNE_set_address (0x0000000000000798) 0x000005f7: 05 DW_LNS_set_column (25) 0x000005f9: 06 DW_LNS_negate_stmt 0x000005fa: 01 DW_LNS_copy 0x0000000000000798 62 25 1 0 0 0x000005fb: 00 DW_LNE_set_address (0x00000000000007a0) 0x00000602: 05 DW_LNS_set_column (23) 0x00000604: 01 DW_LNS_copy 0x00000000000007a0 62 23 1 0 0 0x00000605: 00 DW_LNE_set_address (0x00000000000007b6) 0x0000060c: 05 DW_LNS_set_column (14) 0x0000060e: 01 DW_LNS_copy 0x00000000000007b6 62 14 1 0 0 0x0000060f: 00 DW_LNE_set_address (0x00000000000007cd) 0x00000616: 03 DW_LNS_advance_line (63) 0x00000618: 05 DW_LNS_set_column (24) 0x0000061a: 06 DW_LNS_negate_stmt 0x0000061b: 01 DW_LNS_copy 0x00000000000007cd 63 24 1 0 0 is_stmt 0x0000061c: 00 DW_LNE_set_address (0x00000000000007d5) 0x00000623: 05 DW_LNS_set_column (22) 0x00000625: 06 DW_LNS_negate_stmt 0x00000626: 01 DW_LNS_copy 0x00000000000007d5 63 22 1 0 0 0x00000627: 00 DW_LNE_set_address (0x00000000000007df) 0x0000062e: 03 DW_LNS_advance_line (66) 0x00000630: 05 DW_LNS_set_column (14) 0x00000632: 06 DW_LNS_negate_stmt 0x00000633: 01 DW_LNS_copy 0x00000000000007df 66 14 1 0 0 is_stmt 0x00000634: 00 DW_LNE_set_address (0x00000000000007e9) 0x0000063b: 05 DW_LNS_set_column (19) 0x0000063d: 06 DW_LNS_negate_stmt 0x0000063e: 01 DW_LNS_copy 0x00000000000007e9 66 19 1 0 0 0x0000063f: 00 DW_LNE_set_address (0x00000000000007f1) 0x00000646: 05 DW_LNS_set_column (21) 0x00000648: 01 DW_LNS_copy 0x00000000000007f1 66 21 1 0 0 0x00000649: 00 DW_LNE_set_address (0x0000000000000800) 0x00000650: 05 DW_LNS_set_column (16) 0x00000652: 01 DW_LNS_copy 0x0000000000000800 66 16 1 0 0 0x00000653: 00 DW_LNE_set_address (0x0000000000000816) 0x0000065a: 05 DW_LNS_set_column (14) 0x0000065c: 01 DW_LNS_copy 0x0000000000000816 66 14 1 0 0 0x0000065d: 00 DW_LNE_set_address (0x000000000000082d) 0x00000664: 03 DW_LNS_advance_line (67) 0x00000666: 05 DW_LNS_set_column (18) 0x00000668: 06 DW_LNS_negate_stmt 0x00000669: 01 DW_LNS_copy 0x000000000000082d 67 18 1 0 0 is_stmt 0x0000066a: 00 DW_LNE_set_address (0x0000000000000835) 0x00000671: 05 DW_LNS_set_column (13) 0x00000673: 06 DW_LNS_negate_stmt 0x00000674: 01 DW_LNS_copy 0x0000000000000835 67 13 1 0 0 0x00000675: 00 DW_LNE_set_address (0x000000000000083a) 0x0000067c: 03 DW_LNS_advance_line (68) 0x0000067e: 05 DW_LNS_set_column (18) 0x00000680: 06 DW_LNS_negate_stmt 0x00000681: 01 DW_LNS_copy 0x000000000000083a 68 18 1 0 0 is_stmt 0x00000682: 00 DW_LNE_set_address (0x0000000000000842) 0x00000689: 05 DW_LNS_set_column (13) 0x0000068b: 06 DW_LNS_negate_stmt 0x0000068c: 01 DW_LNS_copy 0x0000000000000842 68 13 1 0 0 0x0000068d: 00 DW_LNE_set_address (0x0000000000000847) 0x00000694: 03 DW_LNS_advance_line (69) 0x00000696: 05 DW_LNS_set_column (18) 0x00000698: 06 DW_LNS_negate_stmt 0x00000699: 01 DW_LNS_copy 0x0000000000000847 69 18 1 0 0 is_stmt 0x0000069a: 00 DW_LNE_set_address (0x000000000000084f) 0x000006a1: 05 DW_LNS_set_column (13) 0x000006a3: 06 DW_LNS_negate_stmt 0x000006a4: 01 DW_LNS_copy 0x000000000000084f 69 13 1 0 0 0x000006a5: 00 DW_LNE_set_address (0x0000000000000854) 0x000006ac: 03 DW_LNS_advance_line (70) 0x000006ae: 05 DW_LNS_set_column (20) 0x000006b0: 06 DW_LNS_negate_stmt 0x000006b1: 01 DW_LNS_copy 0x0000000000000854 70 20 1 0 0 is_stmt 0x000006b2: 00 DW_LNE_set_address (0x000000000000085c) 0x000006b9: 05 DW_LNS_set_column (13) 0x000006bb: 06 DW_LNS_negate_stmt 0x000006bc: 01 DW_LNS_copy 0x000000000000085c 70 13 1 0 0 0x000006bd: 00 DW_LNE_set_address (0x000000000000087a) 0x000006c4: 03 DW_LNS_advance_line (74) 0x000006c6: 05 DW_LNS_set_column (22) 0x000006c8: 06 DW_LNS_negate_stmt 0x000006c9: 01 DW_LNS_copy 0x000000000000087a 74 22 1 0 0 is_stmt 0x000006ca: 00 DW_LNE_set_address (0x000000000000088b) 0x000006d1: 05 DW_LNS_set_column (17) 0x000006d3: 06 DW_LNS_negate_stmt 0x000006d4: 01 DW_LNS_copy 0x000000000000088b 74 17 1 0 0 0x000006d5: 00 DW_LNE_set_address (0x0000000000000893) 0x000006dc: 03 DW_LNS_advance_line (75) 0x000006de: 05 DW_LNS_set_column (20) 0x000006e0: 06 DW_LNS_negate_stmt 0x000006e1: 01 DW_LNS_copy 0x0000000000000893 75 20 1 0 0 is_stmt 0x000006e2: 00 DW_LNE_set_address (0x000000000000089b) 0x000006e9: 05 DW_LNS_set_column (25) 0x000006eb: 06 DW_LNS_negate_stmt 0x000006ec: 01 DW_LNS_copy 0x000000000000089b 75 25 1 0 0 0x000006ed: 00 DW_LNE_set_address (0x00000000000008a7) 0x000006f4: 05 DW_LNS_set_column (29) 0x000006f6: 01 DW_LNS_copy 0x00000000000008a7 75 29 1 0 0 0x000006f7: 00 DW_LNE_set_address (0x00000000000008af) 0x000006fe: 05 DW_LNS_set_column (27) 0x00000700: 01 DW_LNS_copy 0x00000000000008af 75 27 1 0 0 0x00000701: 00 DW_LNE_set_address (0x00000000000008c5) 0x00000708: 05 DW_LNS_set_column (13) 0x0000070a: 01 DW_LNS_copy 0x00000000000008c5 75 13 1 0 0 0x0000070b: 00 DW_LNE_set_address (0x00000000000008da) 0x00000712: 03 DW_LNS_advance_line (76) 0x00000714: 05 DW_LNS_set_column (27) 0x00000716: 06 DW_LNS_negate_stmt 0x00000717: 01 DW_LNS_copy 0x00000000000008da 76 27 1 0 0 is_stmt 0x00000718: 00 DW_LNE_set_address (0x00000000000008e2) 0x0000071f: 05 DW_LNS_set_column (33) 0x00000721: 06 DW_LNS_negate_stmt 0x00000722: 01 DW_LNS_copy 0x00000000000008e2 76 33 1 0 0 0x00000723: 00 DW_LNE_set_address (0x00000000000008ea) 0x0000072a: 05 DW_LNS_set_column (35) 0x0000072c: 01 DW_LNS_copy 0x00000000000008ea 76 35 1 0 0 0x0000072d: 00 DW_LNE_set_address (0x00000000000008f9) 0x00000734: 05 DW_LNS_set_column (27) 0x00000736: 01 DW_LNS_copy 0x00000000000008f9 76 27 1 0 0 0x00000737: 00 DW_LNE_set_address (0x000000000000091b) 0x0000073e: 05 DW_LNS_set_column (16) 0x00000740: 01 DW_LNS_copy 0x000000000000091b 76 16 1 0 0 0x00000741: 00 DW_LNE_set_address (0x0000000000000923) 0x00000748: 05 DW_LNS_set_column (22) 0x0000074a: 01 DW_LNS_copy 0x0000000000000923 76 22 1 0 0 0x0000074b: 00 DW_LNE_set_address (0x000000000000092b) 0x00000752: 05 DW_LNS_set_column (16) 0x00000754: 01 DW_LNS_copy 0x000000000000092b 76 16 1 0 0 0x00000755: 00 DW_LNE_set_address (0x0000000000000944) 0x0000075c: 05 DW_LNS_set_column (25) 0x0000075e: 01 DW_LNS_copy 0x0000000000000944 76 25 1 0 0 0x0000075f: 00 DW_LNE_set_address (0x000000000000094d) 0x00000766: 03 DW_LNS_advance_line (75) 0x00000768: 05 DW_LNS_set_column (33) 0x0000076a: 06 DW_LNS_negate_stmt 0x0000076b: 01 DW_LNS_copy 0x000000000000094d 75 33 1 0 0 is_stmt 0x0000076c: 00 DW_LNE_set_address (0x000000000000096c) 0x00000773: 05 DW_LNS_set_column (13) 0x00000775: 06 DW_LNS_negate_stmt 0x00000776: 01 DW_LNS_copy 0x000000000000096c 75 13 1 0 0 0x00000777: 00 DW_LNE_set_address (0x000000000000096e) 0x0000077e: 01 DW_LNS_copy 0x000000000000096e 75 13 1 0 0 0x0000077f: 00 DW_LNE_set_address (0x0000000000000976) 0x00000786: 03 DW_LNS_advance_line (77) 0x00000788: 05 DW_LNS_set_column (24) 0x0000078a: 06 DW_LNS_negate_stmt 0x0000078b: 01 DW_LNS_copy 0x0000000000000976 77 24 1 0 0 is_stmt 0x0000078c: 00 DW_LNE_set_address (0x000000000000097e) 0x00000793: 05 DW_LNS_set_column (13) 0x00000795: 06 DW_LNS_negate_stmt 0x00000796: 01 DW_LNS_copy 0x000000000000097e 77 13 1 0 0 0x00000797: 00 DW_LNE_set_address (0x0000000000000986) 0x0000079e: 05 DW_LNS_set_column (19) 0x000007a0: 01 DW_LNS_copy 0x0000000000000986 77 19 1 0 0 0x000007a1: 00 DW_LNE_set_address (0x000000000000098e) 0x000007a8: 05 DW_LNS_set_column (13) 0x000007aa: 01 DW_LNS_copy 0x000000000000098e 77 13 1 0 0 0x000007ab: 00 DW_LNE_set_address (0x00000000000009a7) 0x000007b2: 05 DW_LNS_set_column (22) 0x000007b4: 01 DW_LNS_copy 0x00000000000009a7 77 22 1 0 0 0x000007b5: 00 DW_LNE_set_address (0x00000000000009b0) 0x000007bc: 03 DW_LNS_advance_line (79) 0x000007be: 05 DW_LNS_set_column (16) 0x000007c0: 06 DW_LNS_negate_stmt 0x000007c1: 01 DW_LNS_copy 0x00000000000009b0 79 16 1 0 0 is_stmt 0x000007c2: 00 DW_LNE_set_address (0x00000000000009b8) 0x000007c9: 05 DW_LNS_set_column (22) 0x000007cb: 06 DW_LNS_negate_stmt 0x000007cc: 01 DW_LNS_copy 0x00000000000009b8 79 22 1 0 0 0x000007cd: 00 DW_LNE_set_address (0x00000000000009c0) 0x000007d4: 05 DW_LNS_set_column (16) 0x000007d6: 01 DW_LNS_copy 0x00000000000009c0 79 16 1 0 0 0x000007d7: 00 DW_LNE_set_address (0x00000000000009d9) 0x000007de: 05 DW_LNS_set_column (14) 0x000007e0: 01 DW_LNS_copy 0x00000000000009d9 79 14 1 0 0 0x000007e1: 00 DW_LNE_set_address (0x00000000000009fa) 0x000007e8: 05 DW_LNS_set_column (25) 0x000007ea: 01 DW_LNS_copy 0x00000000000009fa 79 25 1 0 0 0x000007eb: 00 DW_LNE_set_address (0x0000000000000a10) 0x000007f2: 05 DW_LNS_set_column (14) 0x000007f4: 01 DW_LNS_copy 0x0000000000000a10 79 14 1 0 0 0x000007f5: 00 DW_LNE_set_address (0x0000000000000a29) 0x000007fc: 03 DW_LNS_advance_line (80) 0x000007fe: 05 DW_LNS_set_column (13) 0x00000800: 06 DW_LNS_negate_stmt 0x00000801: 01 DW_LNS_copy 0x0000000000000a29 80 13 1 0 0 is_stmt 0x00000802: 00 DW_LNE_set_address (0x0000000000000a2c) 0x00000809: 03 DW_LNS_advance_line (81) 0x0000080b: 05 DW_LNS_set_column (11) 0x0000080d: 01 DW_LNS_copy 0x0000000000000a2c 81 11 1 0 0 is_stmt 0x0000080e: 00 DW_LNE_set_address (0x0000000000000a4b) 0x00000815: 03 DW_LNS_advance_line (65) 0x00000817: 05 DW_LNS_set_column (7) 0x00000819: 01 DW_LNS_copy 0x0000000000000a4b 65 7 1 0 0 is_stmt 0x0000081a: 00 DW_LNE_set_address (0x0000000000000a4e) 0x00000821: 03 DW_LNS_advance_line (80) 0x00000823: 05 DW_LNS_set_column (13) 0x00000825: 01 DW_LNS_copy 0x0000000000000a4e 80 13 1 0 0 is_stmt 0x00000826: 00 DW_LNE_set_address (0x0000000000000a4f) 0x0000082d: 03 DW_LNS_advance_line (43) 0x0000082f: 05 DW_LNS_set_column (4) 0x00000831: 00 DW_LNE_end_sequence 0x0000000000000a4f 43 4 1 0 0 is_stmt end_sequence 0x00000834: 00 DW_LNE_set_address (0x0000000000000a55) 0x0000083b: 03 DW_LNS_advance_line (152) 0x0000083e: 01 DW_LNS_copy 0x0000000000000a55 152 0 1 0 0 is_stmt 0x0000083f: 00 DW_LNE_set_address (0x0000000000000acc) 0x00000846: 03 DW_LNS_advance_line (153) 0x00000848: 05 DW_LNS_set_column (12) 0x0000084a: 0a DW_LNS_set_prologue_end 0x0000084b: 01 DW_LNS_copy 0x0000000000000acc 153 12 1 0 0 is_stmt prologue_end 0x0000084c: 00 DW_LNE_set_address (0x0000000000000ad3) 0x00000853: 05 DW_LNS_set_column (17) 0x00000855: 06 DW_LNS_negate_stmt 0x00000856: 01 DW_LNS_copy 0x0000000000000ad3 153 17 1 0 0 0x00000857: 00 DW_LNE_set_address (0x0000000000000ae2) 0x0000085e: 05 DW_LNS_set_column (12) 0x00000860: 01 DW_LNS_copy 0x0000000000000ae2 153 12 1 0 0 0x00000861: 00 DW_LNE_set_address (0x0000000000000af6) 0x00000868: 05 DW_LNS_set_column (28) 0x0000086a: 01 DW_LNS_copy 0x0000000000000af6 153 28 1 0 0 0x0000086b: 00 DW_LNE_set_address (0x0000000000000b04) 0x00000872: 05 DW_LNS_set_column (23) 0x00000874: 01 DW_LNS_copy 0x0000000000000b04 153 23 1 0 0 0x00000875: 00 DW_LNE_set_address (0x0000000000000b0a) 0x0000087c: 05 DW_LNS_set_column (12) 0x0000087e: 01 DW_LNS_copy 0x0000000000000b0a 153 12 1 0 0 0x0000087f: 00 DW_LNE_set_address (0x0000000000000b15) 0x00000886: 01 DW_LNS_copy 0x0000000000000b15 153 12 1 0 0 0x00000887: 00 DW_LNE_set_address (0x0000000000000b1a) 0x0000088e: 01 DW_LNS_copy 0x0000000000000b1a 153 12 1 0 0 0x0000088f: 00 DW_LNE_set_address (0x0000000000000b22) 0x00000896: 05 DW_LNS_set_column (8) 0x00000898: 01 DW_LNS_copy 0x0000000000000b22 153 8 1 0 0 0x00000899: 00 DW_LNE_set_address (0x0000000000000b29) 0x000008a0: 03 DW_LNS_advance_line (155) 0x000008a2: 06 DW_LNS_negate_stmt 0x000008a3: 01 DW_LNS_copy 0x0000000000000b29 155 8 1 0 0 is_stmt 0x000008a4: 00 DW_LNE_set_address (0x0000000000000b30) 0x000008ab: 05 DW_LNS_set_column (10) 0x000008ad: 06 DW_LNS_negate_stmt 0x000008ae: 01 DW_LNS_copy 0x0000000000000b30 155 10 1 0 0 0x000008af: 00 DW_LNE_set_address (0x0000000000000b3f) 0x000008b6: 05 DW_LNS_set_column (8) 0x000008b8: 01 DW_LNS_copy 0x0000000000000b3f 155 8 1 0 0 0x000008b9: 00 DW_LNE_set_address (0x0000000000000b53) 0x000008c0: 03 DW_LNS_advance_line (156) 0x000008c2: 05 DW_LNS_set_column (7) 0x000008c4: 06 DW_LNS_negate_stmt 0x000008c5: 01 DW_LNS_copy 0x0000000000000b53 156 7 1 0 0 is_stmt 0x000008c6: 00 DW_LNE_set_address (0x0000000000000b67) 0x000008cd: 03 DW_LNS_advance_line (157) 0x000008cf: 01 DW_LNS_copy 0x0000000000000b67 157 7 1 0 0 is_stmt 0x000008d0: 00 DW_LNE_set_address (0x0000000000000b71) 0x000008d7: 03 DW_LNS_advance_line (159) 0x000008d9: 05 DW_LNS_set_column (38) 0x000008db: 01 DW_LNS_copy 0x0000000000000b71 159 38 1 0 0 is_stmt 0x000008dc: 00 DW_LNE_set_address (0x0000000000000b78) 0x000008e3: 05 DW_LNS_set_column (50) 0x000008e5: 06 DW_LNS_negate_stmt 0x000008e6: 01 DW_LNS_copy 0x0000000000000b78 159 50 1 0 0 0x000008e7: 00 DW_LNE_set_address (0x0000000000000b7f) 0x000008ee: 05 DW_LNS_set_column (41) 0x000008f0: 01 DW_LNS_copy 0x0000000000000b7f 159 41 1 0 0 0x000008f1: 00 DW_LNE_set_address (0x0000000000000b85) 0x000008f8: 05 DW_LNS_set_column (4) 0x000008fa: 01 DW_LNS_copy 0x0000000000000b85 159 4 1 0 0 0x000008fb: 00 DW_LNE_set_address (0x0000000000000ba3) 0x00000902: 03 DW_LNS_advance_line (160) 0x00000904: 06 DW_LNS_negate_stmt 0x00000905: 01 DW_LNS_copy 0x0000000000000ba3 160 4 1 0 0 is_stmt 0x00000906: 00 DW_LNE_set_address (0x0000000000000bab) 0x0000090d: 03 DW_LNS_advance_line (161) 0x0000090f: 05 DW_LNS_set_column (1) 0x00000911: 01 DW_LNS_copy 0x0000000000000bab 161 1 1 0 0 is_stmt 0x00000912: 00 DW_LNE_set_address (0x0000000000000bc5) 0x00000919: 00 DW_LNE_end_sequence 0x0000000000000bc5 161 1 1 0 0 is_stmt end_sequence 0x0000091c: 00 DW_LNE_set_address (0x0000000000000bc7) 0x00000923: 03 DW_LNS_advance_line (88) 0x00000926: 01 DW_LNS_copy 0x0000000000000bc7 88 0 1 0 0 is_stmt 0x00000927: 00 DW_LNE_set_address (0x0000000000000d51) 0x0000092e: 03 DW_LNS_advance_line (90) 0x00000930: 05 DW_LNS_set_column (8) 0x00000932: 0a DW_LNS_set_prologue_end 0x00000933: 01 DW_LNS_copy 0x0000000000000d51 90 8 1 0 0 is_stmt prologue_end 0x00000934: 00 DW_LNE_set_address (0x0000000000000d58) 0x0000093b: 03 DW_LNS_advance_line (93) 0x0000093d: 05 DW_LNS_set_column (9) 0x0000093f: 01 DW_LNS_copy 0x0000000000000d58 93 9 1 0 0 is_stmt 0x00000940: 00 DW_LNE_set_address (0x0000000000000d5f) 0x00000947: 03 DW_LNS_advance_line (94) 0x00000949: 05 DW_LNS_set_column (11) 0x0000094b: 01 DW_LNS_copy 0x0000000000000d5f 94 11 1 0 0 is_stmt 0x0000094c: 00 DW_LNE_set_address (0x0000000000000d66) 0x00000953: 05 DW_LNS_set_column (16) 0x00000955: 06 DW_LNS_negate_stmt 0x00000956: 01 DW_LNS_copy 0x0000000000000d66 94 16 1 0 0 0x00000957: 00 DW_LNE_set_address (0x0000000000000d71) 0x0000095e: 05 DW_LNS_set_column (20) 0x00000960: 01 DW_LNS_copy 0x0000000000000d71 94 20 1 0 0 0x00000961: 00 DW_LNE_set_address (0x0000000000000d78) 0x00000968: 05 DW_LNS_set_column (22) 0x0000096a: 01 DW_LNS_copy 0x0000000000000d78 94 22 1 0 0 0x0000096b: 00 DW_LNE_set_address (0x0000000000000d83) 0x00000972: 05 DW_LNS_set_column (18) 0x00000974: 01 DW_LNS_copy 0x0000000000000d83 94 18 1 0 0 0x00000975: 00 DW_LNE_set_address (0x0000000000000d92) 0x0000097c: 05 DW_LNS_set_column (4) 0x0000097e: 01 DW_LNS_copy 0x0000000000000d92 94 4 1 0 0 0x0000097f: 00 DW_LNE_set_address (0x0000000000000da6) 0x00000986: 03 DW_LNS_advance_line (95) 0x00000988: 05 DW_LNS_set_column (29) 0x0000098a: 06 DW_LNS_negate_stmt 0x0000098b: 01 DW_LNS_copy 0x0000000000000da6 95 29 1 0 0 is_stmt 0x0000098c: 00 DW_LNE_set_address (0x0000000000000dac) 0x00000993: 05 DW_LNS_set_column (13) 0x00000995: 06 DW_LNS_negate_stmt 0x00000996: 01 DW_LNS_copy 0x0000000000000dac 95 13 1 0 0 0x00000997: 00 DW_LNE_set_address (0x0000000000000db3) 0x0000099e: 03 DW_LNS_advance_line (96) 0x000009a0: 05 DW_LNS_set_column (18) 0x000009a2: 06 DW_LNS_negate_stmt 0x000009a3: 01 DW_LNS_copy 0x0000000000000db3 96 18 1 0 0 is_stmt 0x000009a4: 00 DW_LNE_set_address (0x0000000000000dba) 0x000009ab: 05 DW_LNS_set_column (7) 0x000009ad: 06 DW_LNS_negate_stmt 0x000009ae: 01 DW_LNS_copy 0x0000000000000dba 96 7 1 0 0 0x000009af: 00 DW_LNE_set_address (0x0000000000000dc1) 0x000009b6: 05 DW_LNS_set_column (16) 0x000009b8: 01 DW_LNS_copy 0x0000000000000dc1 96 16 1 0 0 0x000009b9: 00 DW_LNE_set_address (0x0000000000000dc8) 0x000009c0: 03 DW_LNS_advance_line (97) 0x000009c2: 05 DW_LNS_set_column (18) 0x000009c4: 06 DW_LNS_negate_stmt 0x000009c5: 01 DW_LNS_copy 0x0000000000000dc8 97 18 1 0 0 is_stmt 0x000009c6: 00 DW_LNE_set_address (0x0000000000000dcf) 0x000009cd: 05 DW_LNS_set_column (7) 0x000009cf: 06 DW_LNS_negate_stmt 0x000009d0: 01 DW_LNS_copy 0x0000000000000dcf 97 7 1 0 0 0x000009d1: 00 DW_LNE_set_address (0x0000000000000dd6) 0x000009d8: 05 DW_LNS_set_column (16) 0x000009da: 01 DW_LNS_copy 0x0000000000000dd6 97 16 1 0 0 0x000009db: 00 DW_LNE_set_address (0x0000000000000ddd) 0x000009e2: 03 DW_LNS_advance_line (98) 0x000009e4: 05 DW_LNS_set_column (21) 0x000009e6: 06 DW_LNS_negate_stmt 0x000009e7: 01 DW_LNS_copy 0x0000000000000ddd 98 21 1 0 0 is_stmt 0x000009e8: 00 DW_LNE_set_address (0x0000000000000de4) 0x000009ef: 05 DW_LNS_set_column (7) 0x000009f1: 06 DW_LNS_negate_stmt 0x000009f2: 01 DW_LNS_copy 0x0000000000000de4 98 7 1 0 0 0x000009f3: 00 DW_LNE_set_address (0x0000000000000deb) 0x000009fa: 05 DW_LNS_set_column (19) 0x000009fc: 01 DW_LNS_copy 0x0000000000000deb 98 19 1 0 0 0x000009fd: 00 DW_LNE_set_address (0x0000000000000df2) 0x00000a04: 03 DW_LNS_advance_line (99) 0x00000a06: 05 DW_LNS_set_column (14) 0x00000a08: 06 DW_LNS_negate_stmt 0x00000a09: 01 DW_LNS_copy 0x0000000000000df2 99 14 1 0 0 is_stmt 0x00000a0a: 00 DW_LNE_set_address (0x0000000000000df9) 0x00000a11: 05 DW_LNS_set_column (12) 0x00000a13: 06 DW_LNS_negate_stmt 0x00000a14: 01 DW_LNS_copy 0x0000000000000df9 99 12 1 0 0 0x00000a15: 00 DW_LNE_set_address (0x0000000000000e00) 0x00000a1c: 03 DW_LNS_advance_line (94) 0x00000a1e: 05 DW_LNS_set_column (28) 0x00000a20: 06 DW_LNS_negate_stmt 0x00000a21: 01 DW_LNS_copy 0x0000000000000e00 94 28 1 0 0 is_stmt 0x00000a22: 00 DW_LNE_set_address (0x0000000000000e19) 0x00000a29: 05 DW_LNS_set_column (4) 0x00000a2b: 06 DW_LNS_negate_stmt 0x00000a2c: 01 DW_LNS_copy 0x0000000000000e19 94 4 1 0 0 0x00000a2d: 00 DW_LNE_set_address (0x0000000000000e1b) 0x00000a34: 01 DW_LNS_copy 0x0000000000000e1b 94 4 1 0 0 0x00000a35: 00 DW_LNE_set_address (0x0000000000000e22) 0x00000a3c: 03 DW_LNS_advance_line (102) 0x00000a3e: 05 DW_LNS_set_column (25) 0x00000a40: 06 DW_LNS_negate_stmt 0x00000a41: 01 DW_LNS_copy 0x0000000000000e22 102 25 1 0 0 is_stmt 0x00000a42: 00 DW_LNE_set_address (0x0000000000000e29) 0x00000a49: 05 DW_LNS_set_column (27) 0x00000a4b: 06 DW_LNS_negate_stmt 0x00000a4c: 01 DW_LNS_copy 0x0000000000000e29 102 27 1 0 0 0x00000a4d: 00 DW_LNE_set_address (0x0000000000000e34) 0x00000a54: 05 DW_LNS_set_column (18) 0x00000a56: 01 DW_LNS_copy 0x0000000000000e34 102 18 1 0 0 0x00000a57: 00 DW_LNE_set_address (0x0000000000000e3a) 0x00000a5e: 05 DW_LNS_set_column (10) 0x00000a60: 01 DW_LNS_copy 0x0000000000000e3a 102 10 1 0 0 0x00000a61: 00 DW_LNE_set_address (0x0000000000000e41) 0x00000a68: 03 DW_LNS_advance_line (103) 0x00000a6a: 05 DW_LNS_set_column (25) 0x00000a6c: 06 DW_LNS_negate_stmt 0x00000a6d: 01 DW_LNS_copy 0x0000000000000e41 103 25 1 0 0 is_stmt 0x00000a6e: 00 DW_LNE_set_address (0x0000000000000e48) 0x00000a75: 05 DW_LNS_set_column (27) 0x00000a77: 06 DW_LNS_negate_stmt 0x00000a78: 01 DW_LNS_copy 0x0000000000000e48 103 27 1 0 0 0x00000a79: 00 DW_LNE_set_address (0x0000000000000e53) 0x00000a80: 05 DW_LNS_set_column (18) 0x00000a82: 01 DW_LNS_copy 0x0000000000000e53 103 18 1 0 0 0x00000a83: 00 DW_LNE_set_address (0x0000000000000e59) 0x00000a8a: 05 DW_LNS_set_column (10) 0x00000a8c: 01 DW_LNS_copy 0x0000000000000e59 103 10 1 0 0 0x00000a8d: 00 DW_LNE_set_address (0x0000000000000e60) 0x00000a94: 03 DW_LNS_advance_line (105) 0x00000a96: 05 DW_LNS_set_column (11) 0x00000a98: 06 DW_LNS_negate_stmt 0x00000a99: 01 DW_LNS_copy 0x0000000000000e60 105 11 1 0 0 is_stmt 0x00000a9a: 00 DW_LNE_set_address (0x0000000000000e67) 0x00000aa1: 05 DW_LNS_set_column (16) 0x00000aa3: 06 DW_LNS_negate_stmt 0x00000aa4: 01 DW_LNS_copy 0x0000000000000e67 105 16 1 0 0 0x00000aa5: 00 DW_LNE_set_address (0x0000000000000e72) 0x00000aac: 05 DW_LNS_set_column (20) 0x00000aae: 01 DW_LNS_copy 0x0000000000000e72 105 20 1 0 0 0x00000aaf: 00 DW_LNE_set_address (0x0000000000000e79) 0x00000ab6: 05 DW_LNS_set_column (18) 0x00000ab8: 01 DW_LNS_copy 0x0000000000000e79 105 18 1 0 0 0x00000ab9: 00 DW_LNE_set_address (0x0000000000000e88) 0x00000ac0: 05 DW_LNS_set_column (4) 0x00000ac2: 01 DW_LNS_copy 0x0000000000000e88 105 4 1 0 0 0x00000ac3: 00 DW_LNE_set_address (0x0000000000000e98) 0x00000aca: 03 DW_LNS_advance_line (106) 0x00000acc: 05 DW_LNS_set_column (18) 0x00000ace: 06 DW_LNS_negate_stmt 0x00000acf: 01 DW_LNS_copy 0x0000000000000e98 106 18 1 0 0 is_stmt 0x00000ad0: 00 DW_LNE_set_address (0x0000000000000e9f) 0x00000ad7: 05 DW_LNS_set_column (7) 0x00000ad9: 06 DW_LNS_negate_stmt 0x00000ada: 01 DW_LNS_copy 0x0000000000000e9f 106 7 1 0 0 0x00000adb: 00 DW_LNE_set_address (0x0000000000000ea6) 0x00000ae2: 05 DW_LNS_set_column (13) 0x00000ae4: 01 DW_LNS_copy 0x0000000000000ea6 106 13 1 0 0 0x00000ae5: 00 DW_LNE_set_address (0x0000000000000ead) 0x00000aec: 05 DW_LNS_set_column (7) 0x00000aee: 01 DW_LNS_copy 0x0000000000000ead 106 7 1 0 0 0x00000aef: 00 DW_LNE_set_address (0x0000000000000ebf) 0x00000af6: 05 DW_LNS_set_column (16) 0x00000af8: 01 DW_LNS_copy 0x0000000000000ebf 106 16 1 0 0 0x00000af9: 00 DW_LNE_set_address (0x0000000000000ec6) 0x00000b00: 03 DW_LNS_advance_line (105) 0x00000b02: 05 DW_LNS_set_column (24) 0x00000b04: 06 DW_LNS_negate_stmt 0x00000b05: 01 DW_LNS_copy 0x0000000000000ec6 105 24 1 0 0 is_stmt 0x00000b06: 00 DW_LNE_set_address (0x0000000000000edf) 0x00000b0d: 05 DW_LNS_set_column (4) 0x00000b0f: 06 DW_LNS_negate_stmt 0x00000b10: 01 DW_LNS_copy 0x0000000000000edf 105 4 1 0 0 0x00000b11: 00 DW_LNE_set_address (0x0000000000000ee1) 0x00000b18: 01 DW_LNS_copy 0x0000000000000ee1 105 4 1 0 0 0x00000b19: 00 DW_LNE_set_address (0x0000000000000ee4) 0x00000b20: 03 DW_LNS_advance_line (108) 0x00000b22: 05 DW_LNS_set_column (8) 0x00000b24: 06 DW_LNS_negate_stmt 0x00000b25: 01 DW_LNS_copy 0x0000000000000ee4 108 8 1 0 0 is_stmt 0x00000b26: 00 DW_LNE_set_address (0x0000000000000eeb) 0x00000b2d: 05 DW_LNS_set_column (6) 0x00000b2f: 06 DW_LNS_negate_stmt 0x00000b30: 01 DW_LNS_copy 0x0000000000000eeb 108 6 1 0 0 0x00000b31: 00 DW_LNE_set_address (0x0000000000000ef2) 0x00000b38: 03 DW_LNS_advance_line (110) 0x00000b3a: 05 DW_LNS_set_column (11) 0x00000b3c: 06 DW_LNS_negate_stmt 0x00000b3d: 01 DW_LNS_copy 0x0000000000000ef2 110 11 1 0 0 is_stmt 0x00000b3e: 00 DW_LNE_set_address (0x0000000000000efd) 0x00000b45: 06 DW_LNS_negate_stmt 0x00000b46: 01 DW_LNS_copy 0x0000000000000efd 110 11 1 0 0 0x00000b47: 00 DW_LNE_set_address (0x0000000000000f0a) 0x00000b4e: 03 DW_LNS_advance_line (111) 0x00000b50: 05 DW_LNS_set_column (17) 0x00000b52: 06 DW_LNS_negate_stmt 0x00000b53: 01 DW_LNS_copy 0x0000000000000f0a 111 17 1 0 0 is_stmt 0x00000b54: 00 DW_LNE_set_address (0x0000000000000f11) 0x00000b5b: 05 DW_LNS_set_column (22) 0x00000b5d: 06 DW_LNS_negate_stmt 0x00000b5e: 01 DW_LNS_copy 0x0000000000000f11 111 22 1 0 0 0x00000b5f: 00 DW_LNE_set_address (0x0000000000000f1c) 0x00000b66: 05 DW_LNS_set_column (26) 0x00000b68: 01 DW_LNS_copy 0x0000000000000f1c 111 26 1 0 0 0x00000b69: 00 DW_LNE_set_address (0x0000000000000f23) 0x00000b70: 05 DW_LNS_set_column (24) 0x00000b72: 01 DW_LNS_copy 0x0000000000000f23 111 24 1 0 0 0x00000b73: 00 DW_LNE_set_address (0x0000000000000f32) 0x00000b7a: 05 DW_LNS_set_column (10) 0x00000b7c: 01 DW_LNS_copy 0x0000000000000f32 111 10 1 0 0 0x00000b7d: 00 DW_LNE_set_address (0x0000000000000f42) 0x00000b84: 03 DW_LNS_advance_line (112) 0x00000b86: 05 DW_LNS_set_column (26) 0x00000b88: 06 DW_LNS_negate_stmt 0x00000b89: 01 DW_LNS_copy 0x0000000000000f42 112 26 1 0 0 is_stmt 0x00000b8a: 00 DW_LNE_set_address (0x0000000000000f49) 0x00000b91: 05 DW_LNS_set_column (32) 0x00000b93: 06 DW_LNS_negate_stmt 0x00000b94: 01 DW_LNS_copy 0x0000000000000f49 112 32 1 0 0 0x00000b95: 00 DW_LNE_set_address (0x0000000000000f50) 0x00000b9c: 05 DW_LNS_set_column (26) 0x00000b9e: 01 DW_LNS_copy 0x0000000000000f50 112 26 1 0 0 0x00000b9f: 00 DW_LNE_set_address (0x0000000000000f69) 0x00000ba6: 05 DW_LNS_set_column (35) 0x00000ba8: 01 DW_LNS_copy 0x0000000000000f69 112 35 1 0 0 0x00000ba9: 00 DW_LNE_set_address (0x0000000000000f74) 0x00000bb0: 05 DW_LNS_set_column (13) 0x00000bb2: 01 DW_LNS_copy 0x0000000000000f74 112 13 1 0 0 0x00000bb3: 00 DW_LNE_set_address (0x0000000000000f87) 0x00000bba: 03 DW_LNS_advance_line (111) 0x00000bbc: 05 DW_LNS_set_column (30) 0x00000bbe: 06 DW_LNS_negate_stmt 0x00000bbf: 01 DW_LNS_copy 0x0000000000000f87 111 30 1 0 0 is_stmt 0x00000bc0: 00 DW_LNE_set_address (0x0000000000000fa0) 0x00000bc7: 05 DW_LNS_set_column (10) 0x00000bc9: 06 DW_LNS_negate_stmt 0x00000bca: 01 DW_LNS_copy 0x0000000000000fa0 111 10 1 0 0 0x00000bcb: 00 DW_LNE_set_address (0x0000000000000fa2) 0x00000bd2: 01 DW_LNS_copy 0x0000000000000fa2 111 10 1 0 0 0x00000bd3: 00 DW_LNE_set_address (0x0000000000000fa5) 0x00000bda: 03 DW_LNS_advance_line (113) 0x00000bdc: 06 DW_LNS_negate_stmt 0x00000bdd: 01 DW_LNS_copy 0x0000000000000fa5 113 10 1 0 0 is_stmt 0x00000bde: 00 DW_LNE_set_address (0x0000000000000fb5) 0x00000be5: 03 DW_LNS_advance_line (114) 0x00000be7: 05 DW_LNS_set_column (17) 0x00000be9: 01 DW_LNS_copy 0x0000000000000fb5 114 17 1 0 0 is_stmt 0x00000bea: 00 DW_LNE_set_address (0x0000000000000fce) 0x00000bf1: 03 DW_LNS_advance_line (115) 0x00000bf3: 05 DW_LNS_set_column (7) 0x00000bf5: 01 DW_LNS_copy 0x0000000000000fce 115 7 1 0 0 is_stmt 0x00000bf6: 00 DW_LNE_set_address (0x0000000000000fd1) 0x00000bfd: 03 DW_LNS_advance_line (116) 0x00000bff: 05 DW_LNS_set_column (10) 0x00000c01: 01 DW_LNS_copy 0x0000000000000fd1 116 10 1 0 0 is_stmt 0x00000c02: 00 DW_LNE_set_address (0x0000000000000fdc) 0x00000c09: 03 DW_LNS_advance_line (118) 0x00000c0b: 05 DW_LNS_set_column (14) 0x00000c0d: 01 DW_LNS_copy 0x0000000000000fdc 118 14 1 0 0 is_stmt 0x00000c0e: 00 DW_LNE_set_address (0x0000000000000fe3) 0x00000c15: 05 DW_LNS_set_column (16) 0x00000c17: 06 DW_LNS_negate_stmt 0x00000c18: 01 DW_LNS_copy 0x0000000000000fe3 118 16 1 0 0 0x00000c19: 00 DW_LNE_set_address (0x0000000000000ff2) 0x00000c20: 05 DW_LNS_set_column (7) 0x00000c22: 01 DW_LNS_copy 0x0000000000000ff2 118 7 1 0 0 0x00000c23: 00 DW_LNE_set_address (0x0000000000001002) 0x00000c2a: 03 DW_LNS_advance_line (119) 0x00000c2c: 05 DW_LNS_set_column (25) 0x00000c2e: 06 DW_LNS_negate_stmt 0x00000c2f: 01 DW_LNS_copy 0x0000000000001002 119 25 1 0 0 is_stmt 0x00000c30: 00 DW_LNE_set_address (0x0000000000001009) 0x00000c37: 05 DW_LNS_set_column (10) 0x00000c39: 06 DW_LNS_negate_stmt 0x00000c3a: 01 DW_LNS_copy 0x0000000000001009 119 10 1 0 0 0x00000c3b: 00 DW_LNE_set_address (0x0000000000001010) 0x00000c42: 05 DW_LNS_set_column (16) 0x00000c44: 01 DW_LNS_copy 0x0000000000001010 119 16 1 0 0 0x00000c45: 00 DW_LNE_set_address (0x0000000000001017) 0x00000c4c: 05 DW_LNS_set_column (18) 0x00000c4e: 01 DW_LNS_copy 0x0000000000001017 119 18 1 0 0 0x00000c4f: 00 DW_LNE_set_address (0x0000000000001022) 0x00000c56: 05 DW_LNS_set_column (10) 0x00000c58: 01 DW_LNS_copy 0x0000000000001022 119 10 1 0 0 0x00000c59: 00 DW_LNE_set_address (0x0000000000001034) 0x00000c60: 05 DW_LNS_set_column (23) 0x00000c62: 01 DW_LNS_copy 0x0000000000001034 119 23 1 0 0 0x00000c63: 00 DW_LNE_set_address (0x000000000000103b) 0x00000c6a: 03 DW_LNS_advance_line (118) 0x00000c6c: 05 DW_LNS_set_column (22) 0x00000c6e: 06 DW_LNS_negate_stmt 0x00000c6f: 01 DW_LNS_copy 0x000000000000103b 118 22 1 0 0 is_stmt 0x00000c70: 00 DW_LNE_set_address (0x0000000000001054) 0x00000c77: 05 DW_LNS_set_column (7) 0x00000c79: 06 DW_LNS_negate_stmt 0x00000c7a: 01 DW_LNS_copy 0x0000000000001054 118 7 1 0 0 0x00000c7b: 00 DW_LNE_set_address (0x0000000000001056) 0x00000c82: 01 DW_LNS_copy 0x0000000000001056 118 7 1 0 0 0x00000c83: 00 DW_LNE_set_address (0x0000000000001059) 0x00000c8a: 03 DW_LNS_advance_line (122) 0x00000c8c: 05 DW_LNS_set_column (14) 0x00000c8e: 06 DW_LNS_negate_stmt 0x00000c8f: 01 DW_LNS_copy 0x0000000000001059 122 14 1 0 0 is_stmt 0x00000c90: 00 DW_LNE_set_address (0x0000000000001062) 0x00000c97: 05 DW_LNS_set_column (19) 0x00000c99: 06 DW_LNS_negate_stmt 0x00000c9a: 01 DW_LNS_copy 0x0000000000001062 122 19 1 0 0 0x00000c9b: 00 DW_LNE_set_address (0x0000000000001069) 0x00000ca2: 05 DW_LNS_set_column (16) 0x00000ca4: 01 DW_LNS_copy 0x0000000000001069 122 16 1 0 0 0x00000ca5: 00 DW_LNE_set_address (0x0000000000001078) 0x00000cac: 05 DW_LNS_set_column (14) 0x00000cae: 01 DW_LNS_copy 0x0000000000001078 122 14 1 0 0 0x00000caf: 00 DW_LNE_set_address (0x000000000000108a) 0x00000cb6: 03 DW_LNS_advance_line (123) 0x00000cb8: 05 DW_LNS_set_column (13) 0x00000cba: 06 DW_LNS_negate_stmt 0x00000cbb: 01 DW_LNS_copy 0x000000000000108a 123 13 1 0 0 is_stmt 0x00000cbc: 00 DW_LNE_set_address (0x0000000000001091) 0x00000cc3: 03 DW_LNS_advance_line (125) 0x00000cc5: 05 DW_LNS_set_column (22) 0x00000cc7: 01 DW_LNS_copy 0x0000000000001091 125 22 1 0 0 is_stmt 0x00000cc8: 00 DW_LNE_set_address (0x000000000000109f) 0x00000ccf: 05 DW_LNS_set_column (17) 0x00000cd1: 06 DW_LNS_negate_stmt 0x00000cd2: 01 DW_LNS_copy 0x000000000000109f 125 17 1 0 0 0x00000cd3: 00 DW_LNE_set_address (0x00000000000010a6) 0x00000cda: 03 DW_LNS_advance_line (126) 0x00000cdc: 05 DW_LNS_set_column (20) 0x00000cde: 06 DW_LNS_negate_stmt 0x00000cdf: 01 DW_LNS_copy 0x00000000000010a6 126 20 1 0 0 is_stmt 0x00000ce0: 00 DW_LNE_set_address (0x00000000000010ad) 0x00000ce7: 05 DW_LNS_set_column (25) 0x00000ce9: 06 DW_LNS_negate_stmt 0x00000cea: 01 DW_LNS_copy 0x00000000000010ad 126 25 1 0 0 0x00000ceb: 00 DW_LNE_set_address (0x00000000000010b8) 0x00000cf2: 05 DW_LNS_set_column (29) 0x00000cf4: 01 DW_LNS_copy 0x00000000000010b8 126 29 1 0 0 0x00000cf5: 00 DW_LNE_set_address (0x00000000000010bf) 0x00000cfc: 05 DW_LNS_set_column (27) 0x00000cfe: 01 DW_LNS_copy 0x00000000000010bf 126 27 1 0 0 0x00000cff: 00 DW_LNE_set_address (0x00000000000010ce) 0x00000d06: 05 DW_LNS_set_column (13) 0x00000d08: 01 DW_LNS_copy 0x00000000000010ce 126 13 1 0 0 0x00000d09: 00 DW_LNE_set_address (0x00000000000010de) 0x00000d10: 03 DW_LNS_advance_line (127) 0x00000d12: 05 DW_LNS_set_column (27) 0x00000d14: 06 DW_LNS_negate_stmt 0x00000d15: 01 DW_LNS_copy 0x00000000000010de 127 27 1 0 0 is_stmt 0x00000d16: 00 DW_LNE_set_address (0x00000000000010e5) 0x00000d1d: 05 DW_LNS_set_column (33) 0x00000d1f: 06 DW_LNS_negate_stmt 0x00000d20: 01 DW_LNS_copy 0x00000000000010e5 127 33 1 0 0 0x00000d21: 00 DW_LNE_set_address (0x00000000000010ec) 0x00000d28: 05 DW_LNS_set_column (35) 0x00000d2a: 01 DW_LNS_copy 0x00000000000010ec 127 35 1 0 0 0x00000d2b: 00 DW_LNE_set_address (0x00000000000010f7) 0x00000d32: 05 DW_LNS_set_column (27) 0x00000d34: 01 DW_LNS_copy 0x00000000000010f7 127 27 1 0 0 0x00000d35: 00 DW_LNE_set_address (0x0000000000001110) 0x00000d3c: 05 DW_LNS_set_column (16) 0x00000d3e: 01 DW_LNS_copy 0x0000000000001110 127 16 1 0 0 0x00000d3f: 00 DW_LNE_set_address (0x0000000000001117) 0x00000d46: 05 DW_LNS_set_column (22) 0x00000d48: 01 DW_LNS_copy 0x0000000000001117 127 22 1 0 0 0x00000d49: 00 DW_LNE_set_address (0x000000000000111e) 0x00000d50: 05 DW_LNS_set_column (16) 0x00000d52: 01 DW_LNS_copy 0x000000000000111e 127 16 1 0 0 0x00000d53: 00 DW_LNE_set_address (0x0000000000001130) 0x00000d5a: 05 DW_LNS_set_column (25) 0x00000d5c: 01 DW_LNS_copy 0x0000000000001130 127 25 1 0 0 0x00000d5d: 00 DW_LNE_set_address (0x0000000000001137) 0x00000d64: 03 DW_LNS_advance_line (126) 0x00000d66: 05 DW_LNS_set_column (33) 0x00000d68: 06 DW_LNS_negate_stmt 0x00000d69: 01 DW_LNS_copy 0x0000000000001137 126 33 1 0 0 is_stmt 0x00000d6a: 00 DW_LNE_set_address (0x0000000000001154) 0x00000d71: 05 DW_LNS_set_column (13) 0x00000d73: 06 DW_LNS_negate_stmt 0x00000d74: 01 DW_LNS_copy 0x0000000000001154 126 13 1 0 0 0x00000d75: 00 DW_LNE_set_address (0x0000000000001156) 0x00000d7c: 01 DW_LNS_copy 0x0000000000001156 126 13 1 0 0 0x00000d7d: 00 DW_LNE_set_address (0x000000000000115e) 0x00000d84: 03 DW_LNS_advance_line (128) 0x00000d86: 05 DW_LNS_set_column (24) 0x00000d88: 06 DW_LNS_negate_stmt 0x00000d89: 01 DW_LNS_copy 0x000000000000115e 128 24 1 0 0 is_stmt 0x00000d8a: 00 DW_LNE_set_address (0x0000000000001166) 0x00000d91: 05 DW_LNS_set_column (13) 0x00000d93: 06 DW_LNS_negate_stmt 0x00000d94: 01 DW_LNS_copy 0x0000000000001166 128 13 1 0 0 0x00000d95: 00 DW_LNE_set_address (0x000000000000116e) 0x00000d9c: 05 DW_LNS_set_column (19) 0x00000d9e: 01 DW_LNS_copy 0x000000000000116e 128 19 1 0 0 0x00000d9f: 00 DW_LNE_set_address (0x0000000000001176) 0x00000da6: 05 DW_LNS_set_column (13) 0x00000da8: 01 DW_LNS_copy 0x0000000000001176 128 13 1 0 0 0x00000da9: 00 DW_LNE_set_address (0x000000000000118f) 0x00000db0: 05 DW_LNS_set_column (22) 0x00000db2: 01 DW_LNS_copy 0x000000000000118f 128 22 1 0 0 0x00000db3: 00 DW_LNE_set_address (0x0000000000001198) 0x00000dba: 03 DW_LNS_advance_line (130) 0x00000dbc: 05 DW_LNS_set_column (16) 0x00000dbe: 06 DW_LNS_negate_stmt 0x00000dbf: 01 DW_LNS_copy 0x0000000000001198 130 16 1 0 0 is_stmt 0x00000dc0: 00 DW_LNE_set_address (0x00000000000011a0) 0x00000dc7: 05 DW_LNS_set_column (22) 0x00000dc9: 06 DW_LNS_negate_stmt 0x00000dca: 01 DW_LNS_copy 0x00000000000011a0 130 22 1 0 0 0x00000dcb: 00 DW_LNE_set_address (0x00000000000011a8) 0x00000dd2: 05 DW_LNS_set_column (16) 0x00000dd4: 01 DW_LNS_copy 0x00000000000011a8 130 16 1 0 0 0x00000dd5: 00 DW_LNE_set_address (0x00000000000011c1) 0x00000ddc: 05 DW_LNS_set_column (14) 0x00000dde: 01 DW_LNS_copy 0x00000000000011c1 130 14 1 0 0 0x00000ddf: 00 DW_LNE_set_address (0x00000000000011e2) 0x00000de6: 05 DW_LNS_set_column (25) 0x00000de8: 01 DW_LNS_copy 0x00000000000011e2 130 25 1 0 0 0x00000de9: 00 DW_LNE_set_address (0x00000000000011f8) 0x00000df0: 05 DW_LNS_set_column (14) 0x00000df2: 01 DW_LNS_copy 0x00000000000011f8 130 14 1 0 0 0x00000df3: 00 DW_LNE_set_address (0x0000000000001211) 0x00000dfa: 03 DW_LNS_advance_line (131) 0x00000dfc: 05 DW_LNS_set_column (13) 0x00000dfe: 06 DW_LNS_negate_stmt 0x00000dff: 01 DW_LNS_copy 0x0000000000001211 131 13 1 0 0 is_stmt 0x00000e00: 00 DW_LNE_set_address (0x0000000000001214) 0x00000e07: 03 DW_LNS_advance_line (133) 0x00000e09: 05 DW_LNS_set_column (11) 0x00000e0b: 01 DW_LNS_copy 0x0000000000001214 133 11 1 0 0 is_stmt 0x00000e0c: 00 DW_LNE_set_address (0x0000000000001233) 0x00000e13: 03 DW_LNS_advance_line (121) 0x00000e15: 05 DW_LNS_set_column (7) 0x00000e17: 01 DW_LNS_copy 0x0000000000001233 121 7 1 0 0 is_stmt 0x00000e18: 00 DW_LNE_set_address (0x0000000000001236) 0x00000e1f: 03 DW_LNS_advance_line (131) 0x00000e21: 05 DW_LNS_set_column (13) 0x00000e23: 01 DW_LNS_copy 0x0000000000001236 131 13 1 0 0 is_stmt 0x00000e24: 00 DW_LNE_set_address (0x0000000000001237) 0x00000e2b: 03 DW_LNS_advance_line (109) 0x00000e2d: 05 DW_LNS_set_column (4) 0x00000e2f: 01 DW_LNS_copy 0x0000000000001237 109 4 1 0 0 is_stmt 0x00000e30: 00 DW_LNE_set_address (0x0000000000001239) 0x00000e37: 03 DW_LNS_advance_line (123) 0x00000e39: 05 DW_LNS_set_column (13) 0x00000e3b: 01 DW_LNS_copy 0x0000000000001239 123 13 1 0 0 is_stmt 0x00000e3c: 00 DW_LNE_set_address (0x0000000000001241) 0x00000e43: 03 DW_LNS_advance_line (138) 0x00000e45: 05 DW_LNS_set_column (9) 0x00000e47: 01 DW_LNS_copy 0x0000000000001241 138 9 1 0 0 is_stmt 0x00000e48: 00 DW_LNE_set_address (0x0000000000001249) 0x00000e4f: 05 DW_LNS_set_column (4) 0x00000e51: 06 DW_LNS_negate_stmt 0x00000e52: 01 DW_LNS_copy 0x0000000000001249 138 4 1 0 0 0x00000e53: 00 DW_LNE_set_address (0x000000000000124e) 0x00000e5a: 03 DW_LNS_advance_line (139) 0x00000e5c: 05 DW_LNS_set_column (9) 0x00000e5e: 06 DW_LNS_negate_stmt 0x00000e5f: 01 DW_LNS_copy 0x000000000000124e 139 9 1 0 0 is_stmt 0x00000e60: 00 DW_LNE_set_address (0x0000000000001256) 0x00000e67: 05 DW_LNS_set_column (4) 0x00000e69: 06 DW_LNS_negate_stmt 0x00000e6a: 01 DW_LNS_copy 0x0000000000001256 139 4 1 0 0 0x00000e6b: 00 DW_LNE_set_address (0x000000000000125b) 0x00000e72: 03 DW_LNS_advance_line (140) 0x00000e74: 05 DW_LNS_set_column (13) 0x00000e76: 06 DW_LNS_negate_stmt 0x00000e77: 01 DW_LNS_copy 0x000000000000125b 140 13 1 0 0 is_stmt 0x00000e78: 00 DW_LNE_set_address (0x000000000000126c) 0x00000e7f: 03 DW_LNS_advance_line (141) 0x00000e81: 05 DW_LNS_set_column (11) 0x00000e83: 01 DW_LNS_copy 0x000000000000126c 141 11 1 0 0 is_stmt 0x00000e84: 00 DW_LNE_set_address (0x0000000000001274) 0x00000e8b: 05 DW_LNS_set_column (16) 0x00000e8d: 06 DW_LNS_negate_stmt 0x00000e8e: 01 DW_LNS_copy 0x0000000000001274 141 16 1 0 0 0x00000e8f: 00 DW_LNE_set_address (0x000000000000128a) 0x00000e96: 05 DW_LNS_set_column (4) 0x00000e98: 01 DW_LNS_copy 0x000000000000128a 141 4 1 0 0 0x00000e99: 00 DW_LNE_set_address (0x000000000000129f) 0x00000ea0: 03 DW_LNS_advance_line (142) 0x00000ea2: 05 DW_LNS_set_column (36) 0x00000ea4: 06 DW_LNS_negate_stmt 0x00000ea5: 01 DW_LNS_copy 0x000000000000129f 142 36 1 0 0 is_stmt 0x00000ea6: 00 DW_LNE_set_address (0x00000000000012a7) 0x00000ead: 05 DW_LNS_set_column (20) 0x00000eaf: 06 DW_LNS_negate_stmt 0x00000eb0: 01 DW_LNS_copy 0x00000000000012a7 142 20 1 0 0 0x00000eb1: 00 DW_LNE_set_address (0x00000000000012af) 0x00000eb8: 05 DW_LNS_set_column (13) 0x00000eba: 01 DW_LNS_copy 0x00000000000012af 142 13 1 0 0 0x00000ebb: 00 DW_LNE_set_address (0x00000000000012b7) 0x00000ec2: 03 DW_LNS_advance_line (143) 0x00000ec4: 05 DW_LNS_set_column (11) 0x00000ec6: 06 DW_LNS_negate_stmt 0x00000ec7: 01 DW_LNS_copy 0x00000000000012b7 143 11 1 0 0 is_stmt 0x00000ec8: 00 DW_LNE_set_address (0x00000000000012bf) 0x00000ecf: 05 DW_LNS_set_column (22) 0x00000ed1: 06 DW_LNS_negate_stmt 0x00000ed2: 01 DW_LNS_copy 0x00000000000012bf 143 22 1 0 0 0x00000ed3: 00 DW_LNE_set_address (0x00000000000012c7) 0x00000eda: 05 DW_LNS_set_column (20) 0x00000edc: 01 DW_LNS_copy 0x00000000000012c7 143 20 1 0 0 0x00000edd: 00 DW_LNE_set_address (0x00000000000012dd) 0x00000ee4: 05 DW_LNS_set_column (11) 0x00000ee6: 01 DW_LNS_copy 0x00000000000012dd 143 11 1 0 0 0x00000ee7: 00 DW_LNE_set_address (0x00000000000012f4) 0x00000eee: 03 DW_LNS_advance_line (144) 0x00000ef0: 05 DW_LNS_set_column (21) 0x00000ef2: 06 DW_LNS_negate_stmt 0x00000ef3: 01 DW_LNS_copy 0x00000000000012f4 144 21 1 0 0 is_stmt 0x00000ef4: 00 DW_LNE_set_address (0x00000000000012fc) 0x00000efb: 05 DW_LNS_set_column (19) 0x00000efd: 06 DW_LNS_negate_stmt 0x00000efe: 01 DW_LNS_copy 0x00000000000012fc 144 19 1 0 0 0x00000eff: 00 DW_LNE_set_address (0x0000000000001305) 0x00000f06: 03 DW_LNS_advance_line (145) 0x00000f08: 05 DW_LNS_set_column (15) 0x00000f0a: 06 DW_LNS_negate_stmt 0x00000f0b: 01 DW_LNS_copy 0x0000000000001305 145 15 1 0 0 is_stmt 0x00000f0c: 00 DW_LNE_set_address (0x000000000000130d) 0x00000f13: 05 DW_LNS_set_column (13) 0x00000f15: 06 DW_LNS_negate_stmt 0x00000f16: 01 DW_LNS_copy 0x000000000000130d 145 13 1 0 0 0x00000f17: 00 DW_LNE_set_address (0x0000000000001315) 0x00000f1e: 03 DW_LNS_advance_line (146) 0x00000f20: 05 DW_LNS_set_column (14) 0x00000f22: 06 DW_LNS_negate_stmt 0x00000f23: 01 DW_LNS_copy 0x0000000000001315 146 14 1 0 0 is_stmt 0x00000f24: 00 DW_LNE_set_address (0x000000000000131d) 0x00000f2b: 05 DW_LNS_set_column (20) 0x00000f2d: 06 DW_LNS_negate_stmt 0x00000f2e: 01 DW_LNS_copy 0x000000000000131d 146 20 1 0 0 0x00000f2f: 00 DW_LNE_set_address (0x0000000000001326) 0x00000f36: 05 DW_LNS_set_column (12) 0x00000f38: 01 DW_LNS_copy 0x0000000000001326 146 12 1 0 0 0x00000f39: 00 DW_LNE_set_address (0x000000000000132e) 0x00000f40: 03 DW_LNS_advance_line (147) 0x00000f42: 06 DW_LNS_negate_stmt 0x00000f43: 01 DW_LNS_copy 0x000000000000132e 147 12 1 0 0 is_stmt 0x00000f44: 00 DW_LNE_set_address (0x0000000000001336) 0x00000f4b: 05 DW_LNS_set_column (7) 0x00000f4d: 06 DW_LNS_negate_stmt 0x00000f4e: 01 DW_LNS_copy 0x0000000000001336 147 7 1 0 0 0x00000f4f: 00 DW_LNE_set_address (0x000000000000133b) 0x00000f56: 03 DW_LNS_advance_line (141) 0x00000f58: 05 DW_LNS_set_column (4) 0x00000f5a: 06 DW_LNS_negate_stmt 0x00000f5b: 01 DW_LNS_copy 0x000000000000133b 141 4 1 0 0 is_stmt 0x00000f5c: 00 DW_LNE_set_address (0x0000000000001340) 0x00000f63: 03 DW_LNS_advance_line (149) 0x00000f65: 05 DW_LNS_set_column (11) 0x00000f67: 01 DW_LNS_copy 0x0000000000001340 149 11 1 0 0 is_stmt 0x00000f68: 00 DW_LNE_set_address (0x0000000000001348) 0x00000f6f: 05 DW_LNS_set_column (4) 0x00000f71: 06 DW_LNS_negate_stmt 0x00000f72: 01 DW_LNS_copy 0x0000000000001348 149 4 1 0 0 0x00000f73: 00 DW_LNE_set_address (0x0000000000001360) 0x00000f7a: 00 DW_LNE_end_sequence 0x0000000000001360 149 4 1 0 0 end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 2d7a8cf90478cd845ffb39763b0e95b7715322d2)" 0x00000095: "tests/fannkuch.cpp" 0x000000a8: "/home/alon/Dev/emscripten" 0x000000c2: "i" 0x000000c4: "int" 0x000000c8: "n" 0x000000ca: "next" 0x000000cf: "worker_args" 0x000000db: "std" 0x000000df: "decltype(nullptr)" 0x000000f1: "nullptr_t" 0x000000fb: "_Z15fannkuch_workerPv" 0x00000111: "fannkuch_worker" 0x00000121: "main" 0x00000126: "_ZL8fannkuchi" 0x00000134: "fannkuch" 0x0000013d: "_arg" 0x00000142: "args" 0x00000147: "perm1" 0x0000014d: "count" 0x00000153: "perm" 0x00000158: "maxflips" 0x00000161: "flips" 0x00000167: "r" 0x00000169: "j" 0x0000016b: "k" 0x0000016d: "tmp" 0x00000171: "p0" 0x00000174: "argc" 0x00000179: "argv" 0x0000017e: "char" 0x00000183: "targs" 0x00000189: "showmax" 0x00000191: "cleanup" .debug_ranges contents: 00000000 00000006 00000a53 00000000 00000a55 00000bc5 00000000 00000bc7 00001360 00000000 (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 1024) "Wrong argument.\n\00Pfannkuchen(%d) = %d.\n\00%d\00\n\00") (import "env" "__indirect_function_table" (table $timport$0 1 funcref)) (import "env" "malloc" (func $malloc (param i32) (result i32))) (import "env" "free" (func $free (param i32))) (import "env" "atoi" (func $atoi (param i32) (result i32))) (import "env" "printf" (func $printf (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 5243952)) (global $global$1 i32 (i32.const 1069)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $fannkuch_worker\28void*\29 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (local $18 i32) (local $19 i32) (local $20 i32) (local $21 i32) (local $22 i32) (local $23 i32) (local $24 i32) (local $25 i32) (local $26 i32) (local $27 i32) (local $28 i32) (local $29 i32) (local $30 i32) (local $31 i32) (local $32 i32) (local $33 i32) (local $34 i32) (local $35 i32) (local $36 i32) (local $37 i32) (local $38 i32) (local $39 i32) (local $40 i32) (local $41 i32) (local $42 i32) (local $43 i32) (local $44 i32) (local $45 i32) (local $46 i32) (local $47 i32) (local $48 i32) (local $49 i32) (local $50 i32) (local $51 i32) (local $52 i32) (local $53 i32) (local $54 i32) (local $55 i32) (local $56 i32) (local $57 i32) (local $58 i32) (local $59 i32) (local $60 i32) (local $61 i32) (local $62 i32) (local $63 i32) (local $64 i32) (local $65 i32) (local $66 i32) (local $67 i32) (local $68 i32) (local $69 i32) (local $70 i32) (local $71 i32) (local $72 i32) (local $73 i32) (local $74 i32) (local $75 i32) (local $76 i32) (local $77 i32) (local $78 i32) (local $79 i32) (local $80 i32) (local $81 i32) (local $82 i32) (local $83 i32) (local $84 i32) (local $85 i32) (local $86 i32) (local $87 i32) (local $88 i32) (local $89 i32) (local $90 i32) (local $91 i32) (local $92 i32) (local $93 i32) (local $94 i32) (local $95 i32) (local $96 i32) (local $97 i32) (local $98 i32) (local $99 i32) (local $100 i32) (local $101 i32) (local $102 i32) (local $103 i32) (local $104 i32) (local $105 i32) (local $106 i32) (local $107 i32) (local $108 i32) (local $109 i32) (local $110 i32) (local $111 i32) (local $112 i32) (local $113 i32) (local $114 i32) (local $115 i32) (local $116 i32) (local $117 i32) (local $118 i32) (local $119 i32) (local $120 i32) (local $121 i32) (local $122 i32) (local $123 i32) (local $124 i32) (local $125 i32) (local $126 i32) (local $127 i32) (local $128 i32) (local $129 i32) (local $130 i32) (local $131 i32) (local $132 i32) (local $133 i32) (local $134 i32) (local $135 i32) (local $136 i32) (local $137 i32) (local $138 i32) (local $139 i32) (local $140 i32) (local $141 i32) (local $142 i32) (local $143 i32) (local $144 i32) (local $145 i32) (local $146 i32) (local $147 i32) (local $148 i32) (local $149 i32) (local $150 i32) (local $151 i32) (local $152 i32) (local $153 i32) (local $154 i32) (local $155 i32) (local $156 i32) (local $157 i32) (local $158 i32) (local $159 i32) (local $160 i32) (local $161 i32) (local $162 i32) (local $163 i32) (local $164 i32) (local $165 i32) (local $166 i32) (local $167 i32) (local $168 i32) (local $169 i32) (local $170 i32) (local $171 i32) (local $172 i32) (local $173 i32) (local $174 i32) (local $175 i32) (local $176 i32) (local $177 i32) (local $178 i32) (local $179 i32) (local $180 i32) (local $181 i32) (local $182 i32) (local $183 i32) (local $184 i32) (local $185 i32) (local $186 i32) (local $187 i32) (local $188 i32) (local $189 i32) (local $190 i32) (local $191 i32) (local $192 i32) (local $193 i32) (local $194 i32) (local $195 i32) (local $196 i32) (local $197 i32) (local $198 i32) (local $199 i32) (local $200 i32) (local $201 i32) (local $202 i32) (local $203 i32) (local $204 i32) (local $205 i32) (local $206 i32) (local $207 i32) (local $208 i32) (local $209 i32) (local $210 i32) (local $211 i32) (local $212 i32) (local $213 i32) (local $214 i32) (local $215 i32) (local $216 i32) (local $217 i32) (local $218 i32) (local $219 i32) (local $220 i32) (local $221 i32) (local $222 i32) (local $223 i32) (local $224 i32) (local $225 i32) (local $226 i32) (local $227 i32) (local $228 i32) (local $229 i32) (local $230 i32) (local $231 i32) (local $232 i32) (local $233 i32) (local $234 i32) (local $235 i32) (local $236 i32) (local $237 i32) (local $238 i32) (local $239 i32) (local $240 i32) (local $241 i32) (local $242 i32) (local $243 i32) (local $244 i32) ;; code offset: 0x1f2 (local.set $1 ;; code offset: 0x1f0 (global.get $global$0) ) ;; code offset: 0x1f7 (local.set $2 ;; code offset: 0x1f4 (i32.const 64) ) ;; code offset: 0x1fe (local.set $3 ;; code offset: 0x1fd (i32.sub ;; code offset: 0x1f9 (local.get $1) ;; code offset: 0x1fb (local.get $2) ) ) ;; code offset: 0x202 (global.set $global$0 ;; code offset: 0x200 (local.get $3) ) ;; code offset: 0x206 (local.set $4 ;; code offset: 0x204 (i32.const 0) ) ;; code offset: 0x20c (i32.store offset=60 ;; code offset: 0x208 (local.get $3) ;; code offset: 0x20a (local.get $0) ) ;; code offset: 0x214 (local.set $5 ;; code offset: 0x211 (i32.load offset=60 ;; code offset: 0x20f (local.get $3) ) ) ;; code offset: 0x21a (i32.store offset=56 ;; code offset: 0x216 (local.get $3) ;; code offset: 0x218 (local.get $5) ) ;; code offset: 0x221 (i32.store offset=40 ;; code offset: 0x21d (local.get $3) ;; code offset: 0x21f (local.get $4) ) ;; code offset: 0x229 (local.set $6 ;; code offset: 0x226 (i32.load offset=56 ;; code offset: 0x224 (local.get $3) ) ) ;; code offset: 0x230 (local.set $7 ;; code offset: 0x22d (i32.load offset=4 ;; code offset: 0x22b (local.get $6) ) ) ;; code offset: 0x236 (i32.store offset=28 ;; code offset: 0x232 (local.get $3) ;; code offset: 0x234 (local.get $7) ) ;; code offset: 0x23e (local.set $8 ;; code offset: 0x23b (i32.load offset=28 ;; code offset: 0x239 (local.get $3) ) ) ;; code offset: 0x242 (local.set $9 ;; code offset: 0x240 (i32.const 2) ) ;; code offset: 0x249 (local.set $10 ;; code offset: 0x248 (i32.shl ;; code offset: 0x244 (local.get $8) ;; code offset: 0x246 (local.get $9) ) ) ;; code offset: 0x24f (local.set $11 ;; code offset: 0x24d (call $malloc ;; code offset: 0x24b (local.get $10) ) ) ;; code offset: 0x255 (i32.store offset=52 ;; code offset: 0x251 (local.get $3) ;; code offset: 0x253 (local.get $11) ) ;; code offset: 0x25d (local.set $12 ;; code offset: 0x25a (i32.load offset=28 ;; code offset: 0x258 (local.get $3) ) ) ;; code offset: 0x261 (local.set $13 ;; code offset: 0x25f (i32.const 2) ) ;; code offset: 0x268 (local.set $14 ;; code offset: 0x267 (i32.shl ;; code offset: 0x263 (local.get $12) ;; code offset: 0x265 (local.get $13) ) ) ;; code offset: 0x26e (local.set $15 ;; code offset: 0x26c (call $malloc ;; code offset: 0x26a (local.get $14) ) ) ;; code offset: 0x274 (i32.store offset=44 ;; code offset: 0x270 (local.get $3) ;; code offset: 0x272 (local.get $15) ) ;; code offset: 0x27c (local.set $16 ;; code offset: 0x279 (i32.load offset=28 ;; code offset: 0x277 (local.get $3) ) ) ;; code offset: 0x280 (local.set $17 ;; code offset: 0x27e (i32.const 2) ) ;; code offset: 0x287 (local.set $18 ;; code offset: 0x286 (i32.shl ;; code offset: 0x282 (local.get $16) ;; code offset: 0x284 (local.get $17) ) ) ;; code offset: 0x28d (local.set $19 ;; code offset: 0x28b (call $malloc ;; code offset: 0x289 (local.get $18) ) ) ;; code offset: 0x293 (i32.store offset=48 ;; code offset: 0x28f (local.get $3) ;; code offset: 0x291 (local.get $19) ) ;; code offset: 0x29a (i32.store offset=32 ;; code offset: 0x296 (local.get $3) ;; code offset: 0x298 (local.get $4) ) ;; code offset: 0x29d (block $label$1 ;; code offset: 0x29f (loop $label$2 ;; code offset: 0x2a6 (local.set $20 ;; code offset: 0x2a3 (i32.load offset=32 ;; code offset: 0x2a1 (local.get $3) ) ) ;; code offset: 0x2ad (local.set $21 ;; code offset: 0x2aa (i32.load offset=28 ;; code offset: 0x2a8 (local.get $3) ) ) ;; code offset: 0x2b1 (local.set $22 ;; code offset: 0x2af (local.get $20) ) ;; code offset: 0x2b5 (local.set $23 ;; code offset: 0x2b3 (local.get $21) ) ;; code offset: 0x2bc (local.set $24 ;; code offset: 0x2bb (i32.lt_s ;; code offset: 0x2b7 (local.get $22) ;; code offset: 0x2b9 (local.get $23) ) ) ;; code offset: 0x2c0 (local.set $25 ;; code offset: 0x2be (i32.const 1) ) ;; code offset: 0x2c7 (local.set $26 ;; code offset: 0x2c6 (i32.and ;; code offset: 0x2c2 (local.get $24) ;; code offset: 0x2c4 (local.get $25) ) ) ;; code offset: 0x2cc (br_if $label$1 ;; code offset: 0x2cb (i32.eqz ;; code offset: 0x2c9 (local.get $26) ) ) ;; code offset: 0x2d3 (local.set $27 ;; code offset: 0x2d0 (i32.load offset=32 ;; code offset: 0x2ce (local.get $3) ) ) ;; code offset: 0x2da (local.set $28 ;; code offset: 0x2d7 (i32.load offset=52 ;; code offset: 0x2d5 (local.get $3) ) ) ;; code offset: 0x2e1 (local.set $29 ;; code offset: 0x2de (i32.load offset=32 ;; code offset: 0x2dc (local.get $3) ) ) ;; code offset: 0x2e5 (local.set $30 ;; code offset: 0x2e3 (i32.const 2) ) ;; code offset: 0x2ec (local.set $31 ;; code offset: 0x2eb (i32.shl ;; code offset: 0x2e7 (local.get $29) ;; code offset: 0x2e9 (local.get $30) ) ) ;; code offset: 0x2f3 (local.set $32 ;; code offset: 0x2f2 (i32.add ;; code offset: 0x2ee (local.get $28) ;; code offset: 0x2f0 (local.get $31) ) ) ;; code offset: 0x2f9 (i32.store ;; code offset: 0x2f5 (local.get $32) ;; code offset: 0x2f7 (local.get $27) ) ;; code offset: 0x301 (local.set $33 ;; code offset: 0x2fe (i32.load offset=32 ;; code offset: 0x2fc (local.get $3) ) ) ;; code offset: 0x305 (local.set $34 ;; code offset: 0x303 (i32.const 1) ) ;; code offset: 0x30c (local.set $35 ;; code offset: 0x30b (i32.add ;; code offset: 0x307 (local.get $33) ;; code offset: 0x309 (local.get $34) ) ) ;; code offset: 0x312 (i32.store offset=32 ;; code offset: 0x30e (local.get $3) ;; code offset: 0x310 (local.get $35) ) ;; code offset: 0x315 (br $label$2) ) ) ;; code offset: 0x31f (local.set $36 ;; code offset: 0x31c (i32.load offset=28 ;; code offset: 0x31a (local.get $3) ) ) ;; code offset: 0x323 (local.set $37 ;; code offset: 0x321 (i32.const 1) ) ;; code offset: 0x32a (local.set $38 ;; code offset: 0x329 (i32.sub ;; code offset: 0x325 (local.get $36) ;; code offset: 0x327 (local.get $37) ) ) ;; code offset: 0x331 (local.set $39 ;; code offset: 0x32e (i32.load offset=52 ;; code offset: 0x32c (local.get $3) ) ) ;; code offset: 0x338 (local.set $40 ;; code offset: 0x335 (i32.load offset=56 ;; code offset: 0x333 (local.get $3) ) ) ;; code offset: 0x33f (local.set $41 ;; code offset: 0x33c (i32.load ;; code offset: 0x33a (local.get $40) ) ) ;; code offset: 0x343 (local.set $42 ;; code offset: 0x341 (i32.const 2) ) ;; code offset: 0x34a (local.set $43 ;; code offset: 0x349 (i32.shl ;; code offset: 0x345 (local.get $41) ;; code offset: 0x347 (local.get $42) ) ) ;; code offset: 0x351 (local.set $44 ;; code offset: 0x350 (i32.add ;; code offset: 0x34c (local.get $39) ;; code offset: 0x34e (local.get $43) ) ) ;; code offset: 0x357 (i32.store ;; code offset: 0x353 (local.get $44) ;; code offset: 0x355 (local.get $38) ) ;; code offset: 0x35f (local.set $45 ;; code offset: 0x35c (i32.load offset=56 ;; code offset: 0x35a (local.get $3) ) ) ;; code offset: 0x366 (local.set $46 ;; code offset: 0x363 (i32.load ;; code offset: 0x361 (local.get $45) ) ) ;; code offset: 0x36d (local.set $47 ;; code offset: 0x36a (i32.load offset=52 ;; code offset: 0x368 (local.get $3) ) ) ;; code offset: 0x374 (local.set $48 ;; code offset: 0x371 (i32.load offset=28 ;; code offset: 0x36f (local.get $3) ) ) ;; code offset: 0x378 (local.set $49 ;; code offset: 0x376 (i32.const 1) ) ;; code offset: 0x37f (local.set $50 ;; code offset: 0x37e (i32.sub ;; code offset: 0x37a (local.get $48) ;; code offset: 0x37c (local.get $49) ) ) ;; code offset: 0x383 (local.set $51 ;; code offset: 0x381 (i32.const 2) ) ;; code offset: 0x38a (local.set $52 ;; code offset: 0x389 (i32.shl ;; code offset: 0x385 (local.get $50) ;; code offset: 0x387 (local.get $51) ) ) ;; code offset: 0x391 (local.set $53 ;; code offset: 0x390 (i32.add ;; code offset: 0x38c (local.get $47) ;; code offset: 0x38e (local.get $52) ) ) ;; code offset: 0x397 (i32.store ;; code offset: 0x393 (local.get $53) ;; code offset: 0x395 (local.get $46) ) ;; code offset: 0x39f (local.set $54 ;; code offset: 0x39c (i32.load offset=28 ;; code offset: 0x39a (local.get $3) ) ) ;; code offset: 0x3a5 (i32.store offset=24 ;; code offset: 0x3a1 (local.get $3) ;; code offset: 0x3a3 (local.get $54) ) ;; code offset: 0x3a8 (loop $label$3 (result i32) ;; code offset: 0x3aa (block $label$4 ;; code offset: 0x3ac (loop $label$5 ;; code offset: 0x3b0 (local.set $55 ;; code offset: 0x3ae (i32.const 1) ) ;; code offset: 0x3b7 (local.set $56 ;; code offset: 0x3b4 (i32.load offset=24 ;; code offset: 0x3b2 (local.get $3) ) ) ;; code offset: 0x3bb (local.set $57 ;; code offset: 0x3b9 (local.get $56) ) ;; code offset: 0x3bf (local.set $58 ;; code offset: 0x3bd (local.get $55) ) ;; code offset: 0x3c6 (local.set $59 ;; code offset: 0x3c5 (i32.gt_s ;; code offset: 0x3c1 (local.get $57) ;; code offset: 0x3c3 (local.get $58) ) ) ;; code offset: 0x3ca (local.set $60 ;; code offset: 0x3c8 (i32.const 1) ) ;; code offset: 0x3d1 (local.set $61 ;; code offset: 0x3d0 (i32.and ;; code offset: 0x3cc (local.get $59) ;; code offset: 0x3ce (local.get $60) ) ) ;; code offset: 0x3d6 (br_if $label$4 ;; code offset: 0x3d5 (i32.eqz ;; code offset: 0x3d3 (local.get $61) ) ) ;; code offset: 0x3dd (local.set $62 ;; code offset: 0x3da (i32.load offset=24 ;; code offset: 0x3d8 (local.get $3) ) ) ;; code offset: 0x3e4 (local.set $63 ;; code offset: 0x3e1 (i32.load offset=48 ;; code offset: 0x3df (local.get $3) ) ) ;; code offset: 0x3eb (local.set $64 ;; code offset: 0x3e8 (i32.load offset=24 ;; code offset: 0x3e6 (local.get $3) ) ) ;; code offset: 0x3ef (local.set $65 ;; code offset: 0x3ed (i32.const 1) ) ;; code offset: 0x3f6 (local.set $66 ;; code offset: 0x3f5 (i32.sub ;; code offset: 0x3f1 (local.get $64) ;; code offset: 0x3f3 (local.get $65) ) ) ;; code offset: 0x3fa (local.set $67 ;; code offset: 0x3f8 (i32.const 2) ) ;; code offset: 0x401 (local.set $68 ;; code offset: 0x400 (i32.shl ;; code offset: 0x3fc (local.get $66) ;; code offset: 0x3fe (local.get $67) ) ) ;; code offset: 0x408 (local.set $69 ;; code offset: 0x407 (i32.add ;; code offset: 0x403 (local.get $63) ;; code offset: 0x405 (local.get $68) ) ) ;; code offset: 0x40e (i32.store ;; code offset: 0x40a (local.get $69) ;; code offset: 0x40c (local.get $62) ) ;; code offset: 0x416 (local.set $70 ;; code offset: 0x413 (i32.load offset=24 ;; code offset: 0x411 (local.get $3) ) ) ;; code offset: 0x41a (local.set $71 ;; code offset: 0x418 (i32.const -1) ) ;; code offset: 0x421 (local.set $72 ;; code offset: 0x420 (i32.add ;; code offset: 0x41c (local.get $70) ;; code offset: 0x41e (local.get $71) ) ) ;; code offset: 0x427 (i32.store offset=24 ;; code offset: 0x423 (local.get $3) ;; code offset: 0x425 (local.get $72) ) ;; code offset: 0x42a (br $label$5) ) ) ;; code offset: 0x434 (local.set $73 ;; code offset: 0x431 (i32.load offset=52 ;; code offset: 0x42f (local.get $3) ) ) ;; code offset: 0x43b (local.set $74 ;; code offset: 0x438 (i32.load ;; code offset: 0x436 (local.get $73) ) ) ;; code offset: 0x43d (block $label$6 ;; code offset: 0x442 (br_if $label$6 ;; code offset: 0x441 (i32.eqz ;; code offset: 0x43f (local.get $74) ) ) ;; code offset: 0x449 (local.set $75 ;; code offset: 0x446 (i32.load offset=52 ;; code offset: 0x444 (local.get $3) ) ) ;; code offset: 0x450 (local.set $76 ;; code offset: 0x44d (i32.load offset=28 ;; code offset: 0x44b (local.get $3) ) ) ;; code offset: 0x454 (local.set $77 ;; code offset: 0x452 (i32.const 1) ) ;; code offset: 0x45b (local.set $78 ;; code offset: 0x45a (i32.sub ;; code offset: 0x456 (local.get $76) ;; code offset: 0x458 (local.get $77) ) ) ;; code offset: 0x45f (local.set $79 ;; code offset: 0x45d (i32.const 2) ) ;; code offset: 0x466 (local.set $80 ;; code offset: 0x465 (i32.shl ;; code offset: 0x461 (local.get $78) ;; code offset: 0x463 (local.get $79) ) ) ;; code offset: 0x46d (local.set $81 ;; code offset: 0x46c (i32.add ;; code offset: 0x468 (local.get $75) ;; code offset: 0x46a (local.get $80) ) ) ;; code offset: 0x474 (local.set $82 ;; code offset: 0x471 (i32.load ;; code offset: 0x46f (local.get $81) ) ) ;; code offset: 0x47b (local.set $83 ;; code offset: 0x478 (i32.load offset=28 ;; code offset: 0x476 (local.get $3) ) ) ;; code offset: 0x47f (local.set $84 ;; code offset: 0x47d (i32.const 1) ) ;; code offset: 0x486 (local.set $85 ;; code offset: 0x485 (i32.sub ;; code offset: 0x481 (local.get $83) ;; code offset: 0x483 (local.get $84) ) ) ;; code offset: 0x48a (local.set $86 ;; code offset: 0x488 (local.get $82) ) ;; code offset: 0x48e (local.set $87 ;; code offset: 0x48c (local.get $85) ) ;; code offset: 0x495 (local.set $88 ;; code offset: 0x494 (i32.ne ;; code offset: 0x490 (local.get $86) ;; code offset: 0x492 (local.get $87) ) ) ;; code offset: 0x499 (local.set $89 ;; code offset: 0x497 (i32.const 1) ) ;; code offset: 0x4a0 (local.set $90 ;; code offset: 0x49f (i32.and ;; code offset: 0x49b (local.get $88) ;; code offset: 0x49d (local.get $89) ) ) ;; code offset: 0x4a5 (br_if $label$6 ;; code offset: 0x4a4 (i32.eqz ;; code offset: 0x4a2 (local.get $90) ) ) ;; code offset: 0x4a9 (local.set $91 ;; code offset: 0x4a7 (i32.const 0) ) ;; code offset: 0x4af (i32.store offset=32 ;; code offset: 0x4ab (local.get $3) ;; code offset: 0x4ad (local.get $91) ) ;; code offset: 0x4b2 (block $label$7 ;; code offset: 0x4b4 (loop $label$8 ;; code offset: 0x4bb (local.set $92 ;; code offset: 0x4b8 (i32.load offset=32 ;; code offset: 0x4b6 (local.get $3) ) ) ;; code offset: 0x4c2 (local.set $93 ;; code offset: 0x4bf (i32.load offset=28 ;; code offset: 0x4bd (local.get $3) ) ) ;; code offset: 0x4c6 (local.set $94 ;; code offset: 0x4c4 (local.get $92) ) ;; code offset: 0x4ca (local.set $95 ;; code offset: 0x4c8 (local.get $93) ) ;; code offset: 0x4d1 (local.set $96 ;; code offset: 0x4d0 (i32.lt_s ;; code offset: 0x4cc (local.get $94) ;; code offset: 0x4ce (local.get $95) ) ) ;; code offset: 0x4d5 (local.set $97 ;; code offset: 0x4d3 (i32.const 1) ) ;; code offset: 0x4dc (local.set $98 ;; code offset: 0x4db (i32.and ;; code offset: 0x4d7 (local.get $96) ;; code offset: 0x4d9 (local.get $97) ) ) ;; code offset: 0x4e1 (br_if $label$7 ;; code offset: 0x4e0 (i32.eqz ;; code offset: 0x4de (local.get $98) ) ) ;; code offset: 0x4e8 (local.set $99 ;; code offset: 0x4e5 (i32.load offset=52 ;; code offset: 0x4e3 (local.get $3) ) ) ;; code offset: 0x4ef (local.set $100 ;; code offset: 0x4ec (i32.load offset=32 ;; code offset: 0x4ea (local.get $3) ) ) ;; code offset: 0x4f3 (local.set $101 ;; code offset: 0x4f1 (i32.const 2) ) ;; code offset: 0x4fa (local.set $102 ;; code offset: 0x4f9 (i32.shl ;; code offset: 0x4f5 (local.get $100) ;; code offset: 0x4f7 (local.get $101) ) ) ;; code offset: 0x501 (local.set $103 ;; code offset: 0x500 (i32.add ;; code offset: 0x4fc (local.get $99) ;; code offset: 0x4fe (local.get $102) ) ) ;; code offset: 0x508 (local.set $104 ;; code offset: 0x505 (i32.load ;; code offset: 0x503 (local.get $103) ) ) ;; code offset: 0x50f (local.set $105 ;; code offset: 0x50c (i32.load offset=44 ;; code offset: 0x50a (local.get $3) ) ) ;; code offset: 0x516 (local.set $106 ;; code offset: 0x513 (i32.load offset=32 ;; code offset: 0x511 (local.get $3) ) ) ;; code offset: 0x51a (local.set $107 ;; code offset: 0x518 (i32.const 2) ) ;; code offset: 0x521 (local.set $108 ;; code offset: 0x520 (i32.shl ;; code offset: 0x51c (local.get $106) ;; code offset: 0x51e (local.get $107) ) ) ;; code offset: 0x528 (local.set $109 ;; code offset: 0x527 (i32.add ;; code offset: 0x523 (local.get $105) ;; code offset: 0x525 (local.get $108) ) ) ;; code offset: 0x52e (i32.store ;; code offset: 0x52a (local.get $109) ;; code offset: 0x52c (local.get $104) ) ;; code offset: 0x536 (local.set $110 ;; code offset: 0x533 (i32.load offset=32 ;; code offset: 0x531 (local.get $3) ) ) ;; code offset: 0x53a (local.set $111 ;; code offset: 0x538 (i32.const 1) ) ;; code offset: 0x541 (local.set $112 ;; code offset: 0x540 (i32.add ;; code offset: 0x53c (local.get $110) ;; code offset: 0x53e (local.get $111) ) ) ;; code offset: 0x547 (i32.store offset=32 ;; code offset: 0x543 (local.get $3) ;; code offset: 0x545 (local.get $112) ) ;; code offset: 0x54a (br $label$8) ) ) ;; code offset: 0x551 (local.set $113 ;; code offset: 0x54f (i32.const 0) ) ;; code offset: 0x557 (i32.store offset=36 ;; code offset: 0x553 (local.get $3) ;; code offset: 0x555 (local.get $113) ) ;; code offset: 0x55f (local.set $114 ;; code offset: 0x55c (i32.load offset=44 ;; code offset: 0x55a (local.get $3) ) ) ;; code offset: 0x566 (local.set $115 ;; code offset: 0x563 (i32.load ;; code offset: 0x561 (local.get $114) ) ) ;; code offset: 0x56c (i32.store offset=16 ;; code offset: 0x568 (local.get $3) ;; code offset: 0x56a (local.get $115) ) ;; code offset: 0x56f (loop $label$9 ;; code offset: 0x573 (local.set $116 ;; code offset: 0x571 (i32.const 1) ) ;; code offset: 0x579 (i32.store offset=32 ;; code offset: 0x575 (local.get $3) ;; code offset: 0x577 (local.get $116) ) ;; code offset: 0x581 (local.set $117 ;; code offset: 0x57e (i32.load offset=16 ;; code offset: 0x57c (local.get $3) ) ) ;; code offset: 0x585 (local.set $118 ;; code offset: 0x583 (i32.const 1) ) ;; code offset: 0x58c (local.set $119 ;; code offset: 0x58b (i32.sub ;; code offset: 0x587 (local.get $117) ;; code offset: 0x589 (local.get $118) ) ) ;; code offset: 0x592 (i32.store offset=20 ;; code offset: 0x58e (local.get $3) ;; code offset: 0x590 (local.get $119) ) ;; code offset: 0x595 (block $label$10 ;; code offset: 0x597 (loop $label$11 ;; code offset: 0x59e (local.set $120 ;; code offset: 0x59b (i32.load offset=32 ;; code offset: 0x599 (local.get $3) ) ) ;; code offset: 0x5a5 (local.set $121 ;; code offset: 0x5a2 (i32.load offset=20 ;; code offset: 0x5a0 (local.get $3) ) ) ;; code offset: 0x5a9 (local.set $122 ;; code offset: 0x5a7 (local.get $120) ) ;; code offset: 0x5ad (local.set $123 ;; code offset: 0x5ab (local.get $121) ) ;; code offset: 0x5b4 (local.set $124 ;; code offset: 0x5b3 (i32.lt_s ;; code offset: 0x5af (local.get $122) ;; code offset: 0x5b1 (local.get $123) ) ) ;; code offset: 0x5b8 (local.set $125 ;; code offset: 0x5b6 (i32.const 1) ) ;; code offset: 0x5bf (local.set $126 ;; code offset: 0x5be (i32.and ;; code offset: 0x5ba (local.get $124) ;; code offset: 0x5bc (local.get $125) ) ) ;; code offset: 0x5c4 (br_if $label$10 ;; code offset: 0x5c3 (i32.eqz ;; code offset: 0x5c1 (local.get $126) ) ) ;; code offset: 0x5cb (local.set $127 ;; code offset: 0x5c8 (i32.load offset=44 ;; code offset: 0x5c6 (local.get $3) ) ) ;; code offset: 0x5d2 (local.set $128 ;; code offset: 0x5cf (i32.load offset=32 ;; code offset: 0x5cd (local.get $3) ) ) ;; code offset: 0x5d7 (local.set $129 ;; code offset: 0x5d5 (i32.const 2) ) ;; code offset: 0x5e1 (local.set $130 ;; code offset: 0x5e0 (i32.shl ;; code offset: 0x5da (local.get $128) ;; code offset: 0x5dd (local.get $129) ) ) ;; code offset: 0x5ea (local.set $131 ;; code offset: 0x5e9 (i32.add ;; code offset: 0x5e4 (local.get $127) ;; code offset: 0x5e6 (local.get $130) ) ) ;; code offset: 0x5f3 (local.set $132 ;; code offset: 0x5f0 (i32.load ;; code offset: 0x5ed (local.get $131) ) ) ;; code offset: 0x5fb (i32.store offset=12 ;; code offset: 0x5f6 (local.get $3) ;; code offset: 0x5f8 (local.get $132) ) ;; code offset: 0x603 (local.set $133 ;; code offset: 0x600 (i32.load offset=44 ;; code offset: 0x5fe (local.get $3) ) ) ;; code offset: 0x60b (local.set $134 ;; code offset: 0x608 (i32.load offset=20 ;; code offset: 0x606 (local.get $3) ) ) ;; code offset: 0x610 (local.set $135 ;; code offset: 0x60e (i32.const 2) ) ;; code offset: 0x61a (local.set $136 ;; code offset: 0x619 (i32.shl ;; code offset: 0x613 (local.get $134) ;; code offset: 0x616 (local.get $135) ) ) ;; code offset: 0x624 (local.set $137 ;; code offset: 0x623 (i32.add ;; code offset: 0x61d (local.get $133) ;; code offset: 0x620 (local.get $136) ) ) ;; code offset: 0x62d (local.set $138 ;; code offset: 0x62a (i32.load ;; code offset: 0x627 (local.get $137) ) ) ;; code offset: 0x635 (local.set $139 ;; code offset: 0x632 (i32.load offset=44 ;; code offset: 0x630 (local.get $3) ) ) ;; code offset: 0x63d (local.set $140 ;; code offset: 0x63a (i32.load offset=32 ;; code offset: 0x638 (local.get $3) ) ) ;; code offset: 0x642 (local.set $141 ;; code offset: 0x640 (i32.const 2) ) ;; code offset: 0x64c (local.set $142 ;; code offset: 0x64b (i32.shl ;; code offset: 0x645 (local.get $140) ;; code offset: 0x648 (local.get $141) ) ) ;; code offset: 0x656 (local.set $143 ;; code offset: 0x655 (i32.add ;; code offset: 0x64f (local.get $139) ;; code offset: 0x652 (local.get $142) ) ) ;; code offset: 0x65f (i32.store ;; code offset: 0x659 (local.get $143) ;; code offset: 0x65c (local.get $138) ) ;; code offset: 0x667 (local.set $144 ;; code offset: 0x664 (i32.load offset=12 ;; code offset: 0x662 (local.get $3) ) ) ;; code offset: 0x66f (local.set $145 ;; code offset: 0x66c (i32.load offset=44 ;; code offset: 0x66a (local.get $3) ) ) ;; code offset: 0x677 (local.set $146 ;; code offset: 0x674 (i32.load offset=20 ;; code offset: 0x672 (local.get $3) ) ) ;; code offset: 0x67c (local.set $147 ;; code offset: 0x67a (i32.const 2) ) ;; code offset: 0x686 (local.set $148 ;; code offset: 0x685 (i32.shl ;; code offset: 0x67f (local.get $146) ;; code offset: 0x682 (local.get $147) ) ) ;; code offset: 0x690 (local.set $149 ;; code offset: 0x68f (i32.add ;; code offset: 0x689 (local.get $145) ;; code offset: 0x68c (local.get $148) ) ) ;; code offset: 0x699 (i32.store ;; code offset: 0x693 (local.get $149) ;; code offset: 0x696 (local.get $144) ) ;; code offset: 0x6a1 (local.set $150 ;; code offset: 0x69e (i32.load offset=32 ;; code offset: 0x69c (local.get $3) ) ) ;; code offset: 0x6a6 (local.set $151 ;; code offset: 0x6a4 (i32.const 1) ) ;; code offset: 0x6b0 (local.set $152 ;; code offset: 0x6af (i32.add ;; code offset: 0x6a9 (local.get $150) ;; code offset: 0x6ac (local.get $151) ) ) ;; code offset: 0x6b8 (i32.store offset=32 ;; code offset: 0x6b3 (local.get $3) ;; code offset: 0x6b5 (local.get $152) ) ;; code offset: 0x6c0 (local.set $153 ;; code offset: 0x6bd (i32.load offset=20 ;; code offset: 0x6bb (local.get $3) ) ) ;; code offset: 0x6c5 (local.set $154 ;; code offset: 0x6c3 (i32.const -1) ) ;; code offset: 0x6cf (local.set $155 ;; code offset: 0x6ce (i32.add ;; code offset: 0x6c8 (local.get $153) ;; code offset: 0x6cb (local.get $154) ) ) ;; code offset: 0x6d7 (i32.store offset=20 ;; code offset: 0x6d2 (local.get $3) ;; code offset: 0x6d4 (local.get $155) ) ;; code offset: 0x6da (br $label$11) ) ) ;; code offset: 0x6e4 (local.set $156 ;; code offset: 0x6e1 (i32.load offset=36 ;; code offset: 0x6df (local.get $3) ) ) ;; code offset: 0x6e9 (local.set $157 ;; code offset: 0x6e7 (i32.const 1) ) ;; code offset: 0x6f3 (local.set $158 ;; code offset: 0x6f2 (i32.add ;; code offset: 0x6ec (local.get $156) ;; code offset: 0x6ef (local.get $157) ) ) ;; code offset: 0x6fb (i32.store offset=36 ;; code offset: 0x6f6 (local.get $3) ;; code offset: 0x6f8 (local.get $158) ) ;; code offset: 0x703 (local.set $159 ;; code offset: 0x700 (i32.load offset=44 ;; code offset: 0x6fe (local.get $3) ) ) ;; code offset: 0x70b (local.set $160 ;; code offset: 0x708 (i32.load offset=16 ;; code offset: 0x706 (local.get $3) ) ) ;; code offset: 0x710 (local.set $161 ;; code offset: 0x70e (i32.const 2) ) ;; code offset: 0x71a (local.set $162 ;; code offset: 0x719 (i32.shl ;; code offset: 0x713 (local.get $160) ;; code offset: 0x716 (local.get $161) ) ) ;; code offset: 0x724 (local.set $163 ;; code offset: 0x723 (i32.add ;; code offset: 0x71d (local.get $159) ;; code offset: 0x720 (local.get $162) ) ) ;; code offset: 0x72d (local.set $164 ;; code offset: 0x72a (i32.load ;; code offset: 0x727 (local.get $163) ) ) ;; code offset: 0x735 (i32.store offset=12 ;; code offset: 0x730 (local.get $3) ;; code offset: 0x732 (local.get $164) ) ;; code offset: 0x73d (local.set $165 ;; code offset: 0x73a (i32.load offset=16 ;; code offset: 0x738 (local.get $3) ) ) ;; code offset: 0x745 (local.set $166 ;; code offset: 0x742 (i32.load offset=44 ;; code offset: 0x740 (local.get $3) ) ) ;; code offset: 0x74d (local.set $167 ;; code offset: 0x74a (i32.load offset=16 ;; code offset: 0x748 (local.get $3) ) ) ;; code offset: 0x752 (local.set $168 ;; code offset: 0x750 (i32.const 2) ) ;; code offset: 0x75c (local.set $169 ;; code offset: 0x75b (i32.shl ;; code offset: 0x755 (local.get $167) ;; code offset: 0x758 (local.get $168) ) ) ;; code offset: 0x766 (local.set $170 ;; code offset: 0x765 (i32.add ;; code offset: 0x75f (local.get $166) ;; code offset: 0x762 (local.get $169) ) ) ;; code offset: 0x76f (i32.store ;; code offset: 0x769 (local.get $170) ;; code offset: 0x76c (local.get $165) ) ;; code offset: 0x777 (local.set $171 ;; code offset: 0x774 (i32.load offset=12 ;; code offset: 0x772 (local.get $3) ) ) ;; code offset: 0x77f (i32.store offset=16 ;; code offset: 0x77a (local.get $3) ;; code offset: 0x77c (local.get $171) ) ;; code offset: 0x787 (local.set $172 ;; code offset: 0x784 (i32.load offset=16 ;; code offset: 0x782 (local.get $3) ) ) ;; code offset: 0x78d (br_if $label$9 ;; code offset: 0x78a (local.get $172) ) ) ;; code offset: 0x795 (local.set $173 ;; code offset: 0x792 (i32.load offset=40 ;; code offset: 0x790 (local.get $3) ) ) ;; code offset: 0x79d (local.set $174 ;; code offset: 0x79a (i32.load offset=36 ;; code offset: 0x798 (local.get $3) ) ) ;; code offset: 0x7a3 (local.set $175 ;; code offset: 0x7a0 (local.get $173) ) ;; code offset: 0x7a9 (local.set $176 ;; code offset: 0x7a6 (local.get $174) ) ;; code offset: 0x7b3 (local.set $177 ;; code offset: 0x7b2 (i32.lt_s ;; code offset: 0x7ac (local.get $175) ;; code offset: 0x7af (local.get $176) ) ) ;; code offset: 0x7b8 (local.set $178 ;; code offset: 0x7b6 (i32.const 1) ) ;; code offset: 0x7c2 (local.set $179 ;; code offset: 0x7c1 (i32.and ;; code offset: 0x7bb (local.get $177) ;; code offset: 0x7be (local.get $178) ) ) ;; code offset: 0x7c5 (block $label$12 ;; code offset: 0x7cb (br_if $label$12 ;; code offset: 0x7ca (i32.eqz ;; code offset: 0x7c7 (local.get $179) ) ) ;; code offset: 0x7d2 (local.set $180 ;; code offset: 0x7cf (i32.load offset=36 ;; code offset: 0x7cd (local.get $3) ) ) ;; code offset: 0x7da (i32.store offset=40 ;; code offset: 0x7d5 (local.get $3) ;; code offset: 0x7d7 (local.get $180) ) ) ) ;; code offset: 0x7df (loop $label$13 ;; code offset: 0x7e6 (local.set $181 ;; code offset: 0x7e3 (i32.load offset=24 ;; code offset: 0x7e1 (local.get $3) ) ) ;; code offset: 0x7ee (local.set $182 ;; code offset: 0x7eb (i32.load offset=28 ;; code offset: 0x7e9 (local.get $3) ) ) ;; code offset: 0x7f3 (local.set $183 ;; code offset: 0x7f1 (i32.const 1) ) ;; code offset: 0x7fd (local.set $184 ;; code offset: 0x7fc (i32.sub ;; code offset: 0x7f6 (local.get $182) ;; code offset: 0x7f9 (local.get $183) ) ) ;; code offset: 0x803 (local.set $185 ;; code offset: 0x800 (local.get $181) ) ;; code offset: 0x809 (local.set $186 ;; code offset: 0x806 (local.get $184) ) ;; code offset: 0x813 (local.set $187 ;; code offset: 0x812 (i32.ge_s ;; code offset: 0x80c (local.get $185) ;; code offset: 0x80f (local.get $186) ) ) ;; code offset: 0x818 (local.set $188 ;; code offset: 0x816 (i32.const 1) ) ;; code offset: 0x822 (local.set $189 ;; code offset: 0x821 (i32.and ;; code offset: 0x81b (local.get $187) ;; code offset: 0x81e (local.get $188) ) ) ;; code offset: 0x825 (block $label$14 ;; code offset: 0x82b (br_if $label$14 ;; code offset: 0x82a (i32.eqz ;; code offset: 0x827 (local.get $189) ) ) ;; code offset: 0x832 (local.set $190 ;; code offset: 0x82f (i32.load offset=52 ;; code offset: 0x82d (local.get $3) ) ) ;; code offset: 0x838 (call $free ;; code offset: 0x835 (local.get $190) ) ;; code offset: 0x83f (local.set $191 ;; code offset: 0x83c (i32.load offset=44 ;; code offset: 0x83a (local.get $3) ) ) ;; code offset: 0x845 (call $free ;; code offset: 0x842 (local.get $191) ) ;; code offset: 0x84c (local.set $192 ;; code offset: 0x849 (i32.load offset=48 ;; code offset: 0x847 (local.get $3) ) ) ;; code offset: 0x852 (call $free ;; code offset: 0x84f (local.get $192) ) ;; code offset: 0x859 (local.set $193 ;; code offset: 0x856 (i32.load offset=40 ;; code offset: 0x854 (local.get $3) ) ) ;; code offset: 0x85f (local.set $194 ;; code offset: 0x85c (i32.const 64) ) ;; code offset: 0x868 (local.set $195 ;; code offset: 0x867 (i32.add ;; code offset: 0x862 (local.get $3) ;; code offset: 0x864 (local.get $194) ) ) ;; code offset: 0x86e (global.set $global$0 ;; code offset: 0x86b (local.get $195) ) ;; code offset: 0x873 (return ;; code offset: 0x870 (local.get $193) ) ) ;; code offset: 0x877 (local.set $196 ;; code offset: 0x875 (i32.const 0) ) ;; code offset: 0x87f (local.set $197 ;; code offset: 0x87c (i32.load offset=52 ;; code offset: 0x87a (local.get $3) ) ) ;; code offset: 0x888 (local.set $198 ;; code offset: 0x885 (i32.load ;; code offset: 0x882 (local.get $197) ) ) ;; code offset: 0x890 (i32.store offset=8 ;; code offset: 0x88b (local.get $3) ;; code offset: 0x88d (local.get $198) ) ;; code offset: 0x898 (i32.store offset=32 ;; code offset: 0x893 (local.get $3) ;; code offset: 0x895 (local.get $196) ) ;; code offset: 0x89b (block $label$15 ;; code offset: 0x89d (loop $label$16 ;; code offset: 0x8a4 (local.set $199 ;; code offset: 0x8a1 (i32.load offset=32 ;; code offset: 0x89f (local.get $3) ) ) ;; code offset: 0x8ac (local.set $200 ;; code offset: 0x8a9 (i32.load offset=24 ;; code offset: 0x8a7 (local.get $3) ) ) ;; code offset: 0x8b2 (local.set $201 ;; code offset: 0x8af (local.get $199) ) ;; code offset: 0x8b8 (local.set $202 ;; code offset: 0x8b5 (local.get $200) ) ;; code offset: 0x8c2 (local.set $203 ;; code offset: 0x8c1 (i32.lt_s ;; code offset: 0x8bb (local.get $201) ;; code offset: 0x8be (local.get $202) ) ) ;; code offset: 0x8c7 (local.set $204 ;; code offset: 0x8c5 (i32.const 1) ) ;; code offset: 0x8d1 (local.set $205 ;; code offset: 0x8d0 (i32.and ;; code offset: 0x8ca (local.get $203) ;; code offset: 0x8cd (local.get $204) ) ) ;; code offset: 0x8d8 (br_if $label$15 ;; code offset: 0x8d7 (i32.eqz ;; code offset: 0x8d4 (local.get $205) ) ) ;; code offset: 0x8df (local.set $206 ;; code offset: 0x8dc (i32.load offset=52 ;; code offset: 0x8da (local.get $3) ) ) ;; code offset: 0x8e7 (local.set $207 ;; code offset: 0x8e4 (i32.load offset=32 ;; code offset: 0x8e2 (local.get $3) ) ) ;; code offset: 0x8ec (local.set $208 ;; code offset: 0x8ea (i32.const 1) ) ;; code offset: 0x8f6 (local.set $209 ;; code offset: 0x8f5 (i32.add ;; code offset: 0x8ef (local.get $207) ;; code offset: 0x8f2 (local.get $208) ) ) ;; code offset: 0x8fb (local.set $210 ;; code offset: 0x8f9 (i32.const 2) ) ;; code offset: 0x905 (local.set $211 ;; code offset: 0x904 (i32.shl ;; code offset: 0x8fe (local.get $209) ;; code offset: 0x901 (local.get $210) ) ) ;; code offset: 0x90f (local.set $212 ;; code offset: 0x90e (i32.add ;; code offset: 0x908 (local.get $206) ;; code offset: 0x90b (local.get $211) ) ) ;; code offset: 0x918 (local.set $213 ;; code offset: 0x915 (i32.load ;; code offset: 0x912 (local.get $212) ) ) ;; code offset: 0x920 (local.set $214 ;; code offset: 0x91d (i32.load offset=52 ;; code offset: 0x91b (local.get $3) ) ) ;; code offset: 0x928 (local.set $215 ;; code offset: 0x925 (i32.load offset=32 ;; code offset: 0x923 (local.get $3) ) ) ;; code offset: 0x92d (local.set $216 ;; code offset: 0x92b (i32.const 2) ) ;; code offset: 0x937 (local.set $217 ;; code offset: 0x936 (i32.shl ;; code offset: 0x930 (local.get $215) ;; code offset: 0x933 (local.get $216) ) ) ;; code offset: 0x941 (local.set $218 ;; code offset: 0x940 (i32.add ;; code offset: 0x93a (local.get $214) ;; code offset: 0x93d (local.get $217) ) ) ;; code offset: 0x94a (i32.store ;; code offset: 0x944 (local.get $218) ;; code offset: 0x947 (local.get $213) ) ;; code offset: 0x952 (local.set $219 ;; code offset: 0x94f (i32.load offset=32 ;; code offset: 0x94d (local.get $3) ) ) ;; code offset: 0x957 (local.set $220 ;; code offset: 0x955 (i32.const 1) ) ;; code offset: 0x961 (local.set $221 ;; code offset: 0x960 (i32.add ;; code offset: 0x95a (local.get $219) ;; code offset: 0x95d (local.get $220) ) ) ;; code offset: 0x969 (i32.store offset=32 ;; code offset: 0x964 (local.get $3) ;; code offset: 0x966 (local.get $221) ) ;; code offset: 0x96c (br $label$16) ) ) ;; code offset: 0x973 (local.set $222 ;; code offset: 0x971 (i32.const 0) ) ;; code offset: 0x97b (local.set $223 ;; code offset: 0x978 (i32.load offset=8 ;; code offset: 0x976 (local.get $3) ) ) ;; code offset: 0x983 (local.set $224 ;; code offset: 0x980 (i32.load offset=52 ;; code offset: 0x97e (local.get $3) ) ) ;; code offset: 0x98b (local.set $225 ;; code offset: 0x988 (i32.load offset=32 ;; code offset: 0x986 (local.get $3) ) ) ;; code offset: 0x990 (local.set $226 ;; code offset: 0x98e (i32.const 2) ) ;; code offset: 0x99a (local.set $227 ;; code offset: 0x999 (i32.shl ;; code offset: 0x993 (local.get $225) ;; code offset: 0x996 (local.get $226) ) ) ;; code offset: 0x9a4 (local.set $228 ;; code offset: 0x9a3 (i32.add ;; code offset: 0x99d (local.get $224) ;; code offset: 0x9a0 (local.get $227) ) ) ;; code offset: 0x9ad (i32.store ;; code offset: 0x9a7 (local.get $228) ;; code offset: 0x9aa (local.get $223) ) ;; code offset: 0x9b5 (local.set $229 ;; code offset: 0x9b2 (i32.load offset=48 ;; code offset: 0x9b0 (local.get $3) ) ) ;; code offset: 0x9bd (local.set $230 ;; code offset: 0x9ba (i32.load offset=24 ;; code offset: 0x9b8 (local.get $3) ) ) ;; code offset: 0x9c2 (local.set $231 ;; code offset: 0x9c0 (i32.const 2) ) ;; code offset: 0x9cc (local.set $232 ;; code offset: 0x9cb (i32.shl ;; code offset: 0x9c5 (local.get $230) ;; code offset: 0x9c8 (local.get $231) ) ) ;; code offset: 0x9d6 (local.set $233 ;; code offset: 0x9d5 (i32.add ;; code offset: 0x9cf (local.get $229) ;; code offset: 0x9d2 (local.get $232) ) ) ;; code offset: 0x9df (local.set $234 ;; code offset: 0x9dc (i32.load ;; code offset: 0x9d9 (local.get $233) ) ) ;; code offset: 0x9e4 (local.set $235 ;; code offset: 0x9e2 (i32.const -1) ) ;; code offset: 0x9ee (local.set $236 ;; code offset: 0x9ed (i32.add ;; code offset: 0x9e7 (local.get $234) ;; code offset: 0x9ea (local.get $235) ) ) ;; code offset: 0x9f7 (i32.store ;; code offset: 0x9f1 (local.get $233) ;; code offset: 0x9f4 (local.get $236) ) ;; code offset: 0x9fd (local.set $237 ;; code offset: 0x9fa (local.get $236) ) ;; code offset: 0xa03 (local.set $238 ;; code offset: 0xa00 (local.get $222) ) ;; code offset: 0xa0d (local.set $239 ;; code offset: 0xa0c (i32.gt_s ;; code offset: 0xa06 (local.get $237) ;; code offset: 0xa09 (local.get $238) ) ) ;; code offset: 0xa12 (local.set $240 ;; code offset: 0xa10 (i32.const 1) ) ;; code offset: 0xa1c (local.set $241 ;; code offset: 0xa1b (i32.and ;; code offset: 0xa15 (local.get $239) ;; code offset: 0xa18 (local.get $240) ) ) ;; code offset: 0xa1f (block $label$17 (block $label$18 ;; code offset: 0xa27 (br_if $label$18 ;; code offset: 0xa26 (i32.eqz ;; code offset: 0xa23 (local.get $241) ) ) ;; code offset: 0xa29 (br $label$17) ) ;; code offset: 0xa31 (local.set $242 ;; code offset: 0xa2e (i32.load offset=24 ;; code offset: 0xa2c (local.get $3) ) ) ;; code offset: 0xa36 (local.set $243 ;; code offset: 0xa34 (i32.const 1) ) ;; code offset: 0xa40 (local.set $244 ;; code offset: 0xa3f (i32.add ;; code offset: 0xa39 (local.get $242) ;; code offset: 0xa3c (local.get $243) ) ) ;; code offset: 0xa48 (i32.store offset=24 ;; code offset: 0xa43 (local.get $3) ;; code offset: 0xa45 (local.get $244) ) ;; code offset: 0xa4b (br $label$13) ) ) ;; code offset: 0xa4f (br $label$3) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (local $18 i32) (local $19 i32) (local $20 i32) (local $21 i32) (local $22 i32) (local $23 i32) (local $24 i32) (local $25 i32) (local $26 i32) (local $27 i32) (local $28 i32) (local $29 i32) (local $30 i32) (local $31 i32) (local $32 i32) (local $33 i32) (local $34 i32) (local $35 i32) (local $36 i32) ;; code offset: 0xa9e (local.set $2 ;; code offset: 0xa9c (global.get $global$0) ) ;; code offset: 0xaa2 (local.set $3 ;; code offset: 0xaa0 (i32.const 32) ) ;; code offset: 0xaa9 (local.set $4 ;; code offset: 0xaa8 (i32.sub ;; code offset: 0xaa4 (local.get $2) ;; code offset: 0xaa6 (local.get $3) ) ) ;; code offset: 0xaad (global.set $global$0 ;; code offset: 0xaab (local.get $4) ) ;; code offset: 0xab1 (local.set $5 ;; code offset: 0xaaf (i32.const 1) ) ;; code offset: 0xab5 (local.set $6 ;; code offset: 0xab3 (i32.const 0) ) ;; code offset: 0xabb (i32.store offset=28 ;; code offset: 0xab7 (local.get $4) ;; code offset: 0xab9 (local.get $6) ) ;; code offset: 0xac2 (i32.store offset=24 ;; code offset: 0xabe (local.get $4) ;; code offset: 0xac0 (local.get $0) ) ;; code offset: 0xac9 (i32.store offset=20 ;; code offset: 0xac5 (local.get $4) ;; code offset: 0xac7 (local.get $1) ) ;; code offset: 0xad1 (local.set $7 ;; code offset: 0xace (i32.load offset=24 ;; code offset: 0xacc (local.get $4) ) ) ;; code offset: 0xad5 (local.set $8 ;; code offset: 0xad3 (local.get $7) ) ;; code offset: 0xad9 (local.set $9 ;; code offset: 0xad7 (local.get $5) ) ;; code offset: 0xae0 (local.set $10 ;; code offset: 0xadf (i32.gt_s ;; code offset: 0xadb (local.get $8) ;; code offset: 0xadd (local.get $9) ) ) ;; code offset: 0xae4 (local.set $11 ;; code offset: 0xae2 (i32.const 1) ) ;; code offset: 0xaeb (local.set $12 ;; code offset: 0xaea (i32.and ;; code offset: 0xae6 (local.get $10) ;; code offset: 0xae8 (local.get $11) ) ) ;; code offset: 0xaed (block $label$1 (block $label$2 ;; code offset: 0xaf4 (br_if $label$2 ;; code offset: 0xaf3 (i32.eqz ;; code offset: 0xaf1 (local.get $12) ) ) ;; code offset: 0xafb (local.set $13 ;; code offset: 0xaf8 (i32.load offset=20 ;; code offset: 0xaf6 (local.get $4) ) ) ;; code offset: 0xb02 (local.set $14 ;; code offset: 0xaff (i32.load offset=4 ;; code offset: 0xafd (local.get $13) ) ) ;; code offset: 0xb08 (local.set $15 ;; code offset: 0xb06 (call $atoi ;; code offset: 0xb04 (local.get $14) ) ) ;; code offset: 0xb0c (local.set $16 ;; code offset: 0xb0a (local.get $15) ) ;; code offset: 0xb0e (br $label$1) ) ;; code offset: 0xb13 (local.set $17 ;; code offset: 0xb11 (i32.const 0) ) ;; code offset: 0xb17 (local.set $16 ;; code offset: 0xb15 (local.get $17) ) ) ;; code offset: 0xb1c (local.set $18 ;; code offset: 0xb1a (local.get $16) ) ;; code offset: 0xb20 (local.set $19 ;; code offset: 0xb1e (i32.const 1) ) ;; code offset: 0xb26 (i32.store offset=16 ;; code offset: 0xb22 (local.get $4) ;; code offset: 0xb24 (local.get $18) ) ;; code offset: 0xb2e (local.set $20 ;; code offset: 0xb2b (i32.load offset=16 ;; code offset: 0xb29 (local.get $4) ) ) ;; code offset: 0xb32 (local.set $21 ;; code offset: 0xb30 (local.get $20) ) ;; code offset: 0xb36 (local.set $22 ;; code offset: 0xb34 (local.get $19) ) ;; code offset: 0xb3d (local.set $23 ;; code offset: 0xb3c (i32.lt_s ;; code offset: 0xb38 (local.get $21) ;; code offset: 0xb3a (local.get $22) ) ) ;; code offset: 0xb41 (local.set $24 ;; code offset: 0xb3f (i32.const 1) ) ;; code offset: 0xb48 (local.set $25 ;; code offset: 0xb47 (i32.and ;; code offset: 0xb43 (local.get $23) ;; code offset: 0xb45 (local.get $24) ) ) ;; code offset: 0xb4a (block $label$3 (block $label$4 ;; code offset: 0xb51 (br_if $label$4 ;; code offset: 0xb50 (i32.eqz ;; code offset: 0xb4e (local.get $25) ) ) ;; code offset: 0xb56 (local.set $26 ;; code offset: 0xb53 (i32.const 1024) ) ;; code offset: 0xb5a (local.set $27 ;; code offset: 0xb58 (i32.const 0) ) ;; code offset: 0xb62 (drop ;; code offset: 0xb60 (call $printf ;; code offset: 0xb5c (local.get $26) ;; code offset: 0xb5e (local.get $27) ) ) ;; code offset: 0xb65 (local.set $28 ;; code offset: 0xb63 (i32.const 1) ) ;; code offset: 0xb6b (i32.store offset=28 ;; code offset: 0xb67 (local.get $4) ;; code offset: 0xb69 (local.get $28) ) ;; code offset: 0xb6e (br $label$3) ) ;; code offset: 0xb76 (local.set $29 ;; code offset: 0xb73 (i32.load offset=16 ;; code offset: 0xb71 (local.get $4) ) ) ;; code offset: 0xb7d (local.set $30 ;; code offset: 0xb7a (i32.load offset=16 ;; code offset: 0xb78 (local.get $4) ) ) ;; code offset: 0xb83 (local.set $31 ;; code offset: 0xb81 (call $fannkuch\28int\29 ;; code offset: 0xb7f (local.get $30) ) ) ;; code offset: 0xb89 (i32.store offset=4 ;; code offset: 0xb85 (local.get $4) ;; code offset: 0xb87 (local.get $31) ) ;; code offset: 0xb90 (i32.store ;; code offset: 0xb8c (local.get $4) ;; code offset: 0xb8e (local.get $29) ) ;; code offset: 0xb96 (local.set $32 ;; code offset: 0xb93 (i32.const 1041) ) ;; code offset: 0xb9e (drop ;; code offset: 0xb9c (call $printf ;; code offset: 0xb98 (local.get $32) ;; code offset: 0xb9a (local.get $4) ) ) ;; code offset: 0xba1 (local.set $33 ;; code offset: 0xb9f (i32.const 0) ) ;; code offset: 0xba7 (i32.store offset=28 ;; code offset: 0xba3 (local.get $4) ;; code offset: 0xba5 (local.get $33) ) ) ;; code offset: 0xbb0 (local.set $34 ;; code offset: 0xbad (i32.load offset=28 ;; code offset: 0xbab (local.get $4) ) ) ;; code offset: 0xbb4 (local.set $35 ;; code offset: 0xbb2 (i32.const 32) ) ;; code offset: 0xbbb (local.set $36 ;; code offset: 0xbba (i32.add ;; code offset: 0xbb6 (local.get $4) ;; code offset: 0xbb8 (local.get $35) ) ) ;; code offset: 0xbbf (global.set $global$0 ;; code offset: 0xbbd (local.get $36) ) ;; code offset: 0xbc3 (return ;; code offset: 0xbc1 (local.get $34) ) ) (func $fannkuch\28int\29 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (local $18 i32) (local $19 i32) (local $20 i32) (local $21 i32) (local $22 i32) (local $23 i32) (local $24 i32) (local $25 i32) (local $26 i32) (local $27 i32) (local $28 i32) (local $29 i32) (local $30 i32) (local $31 i32) (local $32 i32) (local $33 i32) (local $34 i32) (local $35 i32) (local $36 i32) (local $37 i32) (local $38 i32) (local $39 i32) (local $40 i32) (local $41 i32) (local $42 i32) (local $43 i32) (local $44 i32) (local $45 i32) (local $46 i32) (local $47 i32) (local $48 i32) (local $49 i32) (local $50 i32) (local $51 i32) (local $52 i32) (local $53 i32) (local $54 i32) (local $55 i32) (local $56 i32) (local $57 i32) (local $58 i32) (local $59 i32) (local $60 i32) (local $61 i32) (local $62 i32) (local $63 i32) (local $64 i32) (local $65 i32) (local $66 i32) (local $67 i32) (local $68 i32) (local $69 i32) (local $70 i32) (local $71 i32) (local $72 i32) (local $73 i32) (local $74 i32) (local $75 i32) (local $76 i32) (local $77 i32) (local $78 i32) (local $79 i32) (local $80 i32) (local $81 i32) (local $82 i32) (local $83 i32) (local $84 i32) (local $85 i32) (local $86 i32) (local $87 i32) (local $88 i32) (local $89 i32) (local $90 i32) (local $91 i32) (local $92 i32) (local $93 i32) (local $94 i32) (local $95 i32) (local $96 i32) (local $97 i32) (local $98 i32) (local $99 i32) (local $100 i32) (local $101 i32) (local $102 i32) (local $103 i32) (local $104 i32) (local $105 i32) (local $106 i32) (local $107 i32) (local $108 i32) (local $109 i32) (local $110 i32) (local $111 i32) (local $112 i32) (local $113 i32) (local $114 i32) (local $115 i32) (local $116 i32) (local $117 i32) (local $118 i32) (local $119 i32) (local $120 i32) (local $121 i32) (local $122 i32) (local $123 i32) (local $124 i32) (local $125 i32) (local $126 i32) (local $127 i32) (local $128 i32) (local $129 i32) (local $130 i32) (local $131 i32) (local $132 i32) (local $133 i32) (local $134 i32) (local $135 i32) (local $136 i32) (local $137 i32) (local $138 i32) (local $139 i32) (local $140 i32) (local $141 i32) (local $142 i32) (local $143 i32) (local $144 i32) (local $145 i32) (local $146 i32) (local $147 i32) (local $148 i32) (local $149 i32) (local $150 i32) (local $151 i32) (local $152 i32) (local $153 i32) (local $154 i32) (local $155 i32) (local $156 i32) (local $157 i32) (local $158 i32) (local $159 i32) (local $160 i32) (local $161 i32) (local $162 i32) (local $163 i32) (local $164 i32) (local $165 i32) (local $166 i32) (local $167 i32) (local $168 i32) (local $169 i32) (local $170 i32) (local $171 i32) (local $172 i32) (local $173 i32) (local $174 i32) (local $175 i32) (local $176 i32) (local $177 i32) (local $178 i32) (local $179 i32) ;; code offset: 0xd31 (local.set $1 ;; code offset: 0xd2f (global.get $global$0) ) ;; code offset: 0xd35 (local.set $2 ;; code offset: 0xd33 (i32.const 48) ) ;; code offset: 0xd3c (local.set $3 ;; code offset: 0xd3b (i32.sub ;; code offset: 0xd37 (local.get $1) ;; code offset: 0xd39 (local.get $2) ) ) ;; code offset: 0xd40 (global.set $global$0 ;; code offset: 0xd3e (local.get $3) ) ;; code offset: 0xd44 (local.set $4 ;; code offset: 0xd42 (i32.const 0) ) ;; code offset: 0xd48 (local.set $5 ;; code offset: 0xd46 (i32.const 30) ) ;; code offset: 0xd4e (i32.store offset=44 ;; code offset: 0xd4a (local.get $3) ;; code offset: 0xd4c (local.get $0) ) ;; code offset: 0xd55 (i32.store offset=32 ;; code offset: 0xd51 (local.get $3) ;; code offset: 0xd53 (local.get $5) ) ;; code offset: 0xd5c (i32.store offset=40 ;; code offset: 0xd58 (local.get $3) ;; code offset: 0xd5a (local.get $4) ) ;; code offset: 0xd63 (i32.store offset=20 ;; code offset: 0xd5f (local.get $3) ;; code offset: 0xd61 (local.get $4) ) ;; code offset: 0xd66 (block $label$1 ;; code offset: 0xd68 (loop $label$2 ;; code offset: 0xd6f (local.set $6 ;; code offset: 0xd6c (i32.load offset=20 ;; code offset: 0xd6a (local.get $3) ) ) ;; code offset: 0xd76 (local.set $7 ;; code offset: 0xd73 (i32.load offset=44 ;; code offset: 0xd71 (local.get $3) ) ) ;; code offset: 0xd7a (local.set $8 ;; code offset: 0xd78 (i32.const 1) ) ;; code offset: 0xd81 (local.set $9 ;; code offset: 0xd80 (i32.sub ;; code offset: 0xd7c (local.get $7) ;; code offset: 0xd7e (local.get $8) ) ) ;; code offset: 0xd85 (local.set $10 ;; code offset: 0xd83 (local.get $6) ) ;; code offset: 0xd89 (local.set $11 ;; code offset: 0xd87 (local.get $9) ) ;; code offset: 0xd90 (local.set $12 ;; code offset: 0xd8f (i32.lt_s ;; code offset: 0xd8b (local.get $10) ;; code offset: 0xd8d (local.get $11) ) ) ;; code offset: 0xd94 (local.set $13 ;; code offset: 0xd92 (i32.const 1) ) ;; code offset: 0xd9b (local.set $14 ;; code offset: 0xd9a (i32.and ;; code offset: 0xd96 (local.get $12) ;; code offset: 0xd98 (local.get $13) ) ) ;; code offset: 0xda0 (br_if $label$1 ;; code offset: 0xd9f (i32.eqz ;; code offset: 0xd9d (local.get $14) ) ) ;; code offset: 0xda4 (local.set $15 ;; code offset: 0xda2 (i32.const 12) ) ;; code offset: 0xdaa (local.set $16 ;; code offset: 0xda8 (call $malloc ;; code offset: 0xda6 (local.get $15) ) ) ;; code offset: 0xdb0 (i32.store offset=36 ;; code offset: 0xdac (local.get $3) ;; code offset: 0xdae (local.get $16) ) ;; code offset: 0xdb8 (local.set $17 ;; code offset: 0xdb5 (i32.load offset=20 ;; code offset: 0xdb3 (local.get $3) ) ) ;; code offset: 0xdbf (local.set $18 ;; code offset: 0xdbc (i32.load offset=36 ;; code offset: 0xdba (local.get $3) ) ) ;; code offset: 0xdc5 (i32.store ;; code offset: 0xdc1 (local.get $18) ;; code offset: 0xdc3 (local.get $17) ) ;; code offset: 0xdcd (local.set $19 ;; code offset: 0xdca (i32.load offset=44 ;; code offset: 0xdc8 (local.get $3) ) ) ;; code offset: 0xdd4 (local.set $20 ;; code offset: 0xdd1 (i32.load offset=36 ;; code offset: 0xdcf (local.get $3) ) ) ;; code offset: 0xdda (i32.store offset=4 ;; code offset: 0xdd6 (local.get $20) ;; code offset: 0xdd8 (local.get $19) ) ;; code offset: 0xde2 (local.set $21 ;; code offset: 0xddf (i32.load offset=40 ;; code offset: 0xddd (local.get $3) ) ) ;; code offset: 0xde9 (local.set $22 ;; code offset: 0xde6 (i32.load offset=36 ;; code offset: 0xde4 (local.get $3) ) ) ;; code offset: 0xdef (i32.store offset=8 ;; code offset: 0xdeb (local.get $22) ;; code offset: 0xded (local.get $21) ) ;; code offset: 0xdf7 (local.set $23 ;; code offset: 0xdf4 (i32.load offset=36 ;; code offset: 0xdf2 (local.get $3) ) ) ;; code offset: 0xdfd (i32.store offset=40 ;; code offset: 0xdf9 (local.get $3) ;; code offset: 0xdfb (local.get $23) ) ;; code offset: 0xe05 (local.set $24 ;; code offset: 0xe02 (i32.load offset=20 ;; code offset: 0xe00 (local.get $3) ) ) ;; code offset: 0xe09 (local.set $25 ;; code offset: 0xe07 (i32.const 1) ) ;; code offset: 0xe10 (local.set $26 ;; code offset: 0xe0f (i32.add ;; code offset: 0xe0b (local.get $24) ;; code offset: 0xe0d (local.get $25) ) ) ;; code offset: 0xe16 (i32.store offset=20 ;; code offset: 0xe12 (local.get $3) ;; code offset: 0xe14 (local.get $26) ) ;; code offset: 0xe19 (br $label$2) ) ) ;; code offset: 0xe20 (local.set $27 ;; code offset: 0xe1e (i32.const 0) ) ;; code offset: 0xe27 (local.set $28 ;; code offset: 0xe24 (i32.load offset=44 ;; code offset: 0xe22 (local.get $3) ) ) ;; code offset: 0xe2b (local.set $29 ;; code offset: 0xe29 (i32.const 2) ) ;; code offset: 0xe32 (local.set $30 ;; code offset: 0xe31 (i32.shl ;; code offset: 0xe2d (local.get $28) ;; code offset: 0xe2f (local.get $29) ) ) ;; code offset: 0xe38 (local.set $31 ;; code offset: 0xe36 (call $malloc ;; code offset: 0xe34 (local.get $30) ) ) ;; code offset: 0xe3e (i32.store offset=28 ;; code offset: 0xe3a (local.get $3) ;; code offset: 0xe3c (local.get $31) ) ;; code offset: 0xe46 (local.set $32 ;; code offset: 0xe43 (i32.load offset=44 ;; code offset: 0xe41 (local.get $3) ) ) ;; code offset: 0xe4a (local.set $33 ;; code offset: 0xe48 (i32.const 2) ) ;; code offset: 0xe51 (local.set $34 ;; code offset: 0xe50 (i32.shl ;; code offset: 0xe4c (local.get $32) ;; code offset: 0xe4e (local.get $33) ) ) ;; code offset: 0xe57 (local.set $35 ;; code offset: 0xe55 (call $malloc ;; code offset: 0xe53 (local.get $34) ) ) ;; code offset: 0xe5d (i32.store offset=24 ;; code offset: 0xe59 (local.get $3) ;; code offset: 0xe5b (local.get $35) ) ;; code offset: 0xe64 (i32.store offset=20 ;; code offset: 0xe60 (local.get $3) ;; code offset: 0xe62 (local.get $27) ) ;; code offset: 0xe67 (block $label$3 ;; code offset: 0xe69 (loop $label$4 ;; code offset: 0xe70 (local.set $36 ;; code offset: 0xe6d (i32.load offset=20 ;; code offset: 0xe6b (local.get $3) ) ) ;; code offset: 0xe77 (local.set $37 ;; code offset: 0xe74 (i32.load offset=44 ;; code offset: 0xe72 (local.get $3) ) ) ;; code offset: 0xe7b (local.set $38 ;; code offset: 0xe79 (local.get $36) ) ;; code offset: 0xe7f (local.set $39 ;; code offset: 0xe7d (local.get $37) ) ;; code offset: 0xe86 (local.set $40 ;; code offset: 0xe85 (i32.lt_s ;; code offset: 0xe81 (local.get $38) ;; code offset: 0xe83 (local.get $39) ) ) ;; code offset: 0xe8a (local.set $41 ;; code offset: 0xe88 (i32.const 1) ) ;; code offset: 0xe91 (local.set $42 ;; code offset: 0xe90 (i32.and ;; code offset: 0xe8c (local.get $40) ;; code offset: 0xe8e (local.get $41) ) ) ;; code offset: 0xe96 (br_if $label$3 ;; code offset: 0xe95 (i32.eqz ;; code offset: 0xe93 (local.get $42) ) ) ;; code offset: 0xe9d (local.set $43 ;; code offset: 0xe9a (i32.load offset=20 ;; code offset: 0xe98 (local.get $3) ) ) ;; code offset: 0xea4 (local.set $44 ;; code offset: 0xea1 (i32.load offset=28 ;; code offset: 0xe9f (local.get $3) ) ) ;; code offset: 0xeab (local.set $45 ;; code offset: 0xea8 (i32.load offset=20 ;; code offset: 0xea6 (local.get $3) ) ) ;; code offset: 0xeaf (local.set $46 ;; code offset: 0xead (i32.const 2) ) ;; code offset: 0xeb6 (local.set $47 ;; code offset: 0xeb5 (i32.shl ;; code offset: 0xeb1 (local.get $45) ;; code offset: 0xeb3 (local.get $46) ) ) ;; code offset: 0xebd (local.set $48 ;; code offset: 0xebc (i32.add ;; code offset: 0xeb8 (local.get $44) ;; code offset: 0xeba (local.get $47) ) ) ;; code offset: 0xec3 (i32.store ;; code offset: 0xebf (local.get $48) ;; code offset: 0xec1 (local.get $43) ) ;; code offset: 0xecb (local.set $49 ;; code offset: 0xec8 (i32.load offset=20 ;; code offset: 0xec6 (local.get $3) ) ) ;; code offset: 0xecf (local.set $50 ;; code offset: 0xecd (i32.const 1) ) ;; code offset: 0xed6 (local.set $51 ;; code offset: 0xed5 (i32.add ;; code offset: 0xed1 (local.get $49) ;; code offset: 0xed3 (local.get $50) ) ) ;; code offset: 0xedc (i32.store offset=20 ;; code offset: 0xed8 (local.get $3) ;; code offset: 0xeda (local.get $51) ) ;; code offset: 0xedf (br $label$4) ) ) ;; code offset: 0xee9 (local.set $52 ;; code offset: 0xee6 (i32.load offset=44 ;; code offset: 0xee4 (local.get $3) ) ) ;; code offset: 0xeef (i32.store offset=16 ;; code offset: 0xeeb (local.get $3) ;; code offset: 0xeed (local.get $52) ) ;; code offset: 0xef2 (block $label$5 ;; code offset: 0xef4 (loop $label$6 ;; code offset: 0xefb (local.set $53 ;; code offset: 0xef8 (i32.load offset=32 ;; code offset: 0xef6 (local.get $3) ) ) ;; code offset: 0xefd (block $label$7 (block $label$8 ;; code offset: 0xf04 (br_if $label$8 ;; code offset: 0xf03 (i32.eqz ;; code offset: 0xf01 (local.get $53) ) ) ;; code offset: 0xf08 (local.set $54 ;; code offset: 0xf06 (i32.const 0) ) ;; code offset: 0xf0e (i32.store offset=20 ;; code offset: 0xf0a (local.get $3) ;; code offset: 0xf0c (local.get $54) ) ;; code offset: 0xf11 (block $label$9 ;; code offset: 0xf13 (loop $label$10 ;; code offset: 0xf1a (local.set $55 ;; code offset: 0xf17 (i32.load offset=20 ;; code offset: 0xf15 (local.get $3) ) ) ;; code offset: 0xf21 (local.set $56 ;; code offset: 0xf1e (i32.load offset=44 ;; code offset: 0xf1c (local.get $3) ) ) ;; code offset: 0xf25 (local.set $57 ;; code offset: 0xf23 (local.get $55) ) ;; code offset: 0xf29 (local.set $58 ;; code offset: 0xf27 (local.get $56) ) ;; code offset: 0xf30 (local.set $59 ;; code offset: 0xf2f (i32.lt_s ;; code offset: 0xf2b (local.get $57) ;; code offset: 0xf2d (local.get $58) ) ) ;; code offset: 0xf34 (local.set $60 ;; code offset: 0xf32 (i32.const 1) ) ;; code offset: 0xf3b (local.set $61 ;; code offset: 0xf3a (i32.and ;; code offset: 0xf36 (local.get $59) ;; code offset: 0xf38 (local.get $60) ) ) ;; code offset: 0xf40 (br_if $label$9 ;; code offset: 0xf3f (i32.eqz ;; code offset: 0xf3d (local.get $61) ) ) ;; code offset: 0xf47 (local.set $62 ;; code offset: 0xf44 (i32.load offset=28 ;; code offset: 0xf42 (local.get $3) ) ) ;; code offset: 0xf4e (local.set $63 ;; code offset: 0xf4b (i32.load offset=20 ;; code offset: 0xf49 (local.get $3) ) ) ;; code offset: 0xf52 (local.set $64 ;; code offset: 0xf50 (i32.const 2) ) ;; code offset: 0xf59 (local.set $65 ;; code offset: 0xf58 (i32.shl ;; code offset: 0xf54 (local.get $63) ;; code offset: 0xf56 (local.get $64) ) ) ;; code offset: 0xf60 (local.set $66 ;; code offset: 0xf5f (i32.add ;; code offset: 0xf5b (local.get $62) ;; code offset: 0xf5d (local.get $65) ) ) ;; code offset: 0xf67 (local.set $67 ;; code offset: 0xf64 (i32.load ;; code offset: 0xf62 (local.get $66) ) ) ;; code offset: 0xf6b (local.set $68 ;; code offset: 0xf69 (i32.const 1) ) ;; code offset: 0xf72 (local.set $69 ;; code offset: 0xf71 (i32.add ;; code offset: 0xf6d (local.get $67) ;; code offset: 0xf6f (local.get $68) ) ) ;; code offset: 0xf78 (i32.store ;; code offset: 0xf74 (local.get $3) ;; code offset: 0xf76 (local.get $69) ) ;; code offset: 0xf7e (local.set $70 ;; code offset: 0xf7b (i32.const 1064) ) ;; code offset: 0xf86 (drop ;; code offset: 0xf84 (call $printf ;; code offset: 0xf80 (local.get $70) ;; code offset: 0xf82 (local.get $3) ) ) ;; code offset: 0xf8c (local.set $71 ;; code offset: 0xf89 (i32.load offset=20 ;; code offset: 0xf87 (local.get $3) ) ) ;; code offset: 0xf90 (local.set $72 ;; code offset: 0xf8e (i32.const 1) ) ;; code offset: 0xf97 (local.set $73 ;; code offset: 0xf96 (i32.add ;; code offset: 0xf92 (local.get $71) ;; code offset: 0xf94 (local.get $72) ) ) ;; code offset: 0xf9d (i32.store offset=20 ;; code offset: 0xf99 (local.get $3) ;; code offset: 0xf9b (local.get $73) ) ;; code offset: 0xfa0 (br $label$10) ) ) ;; code offset: 0xfa8 (local.set $74 ;; code offset: 0xfa5 (i32.const 1067) ) ;; code offset: 0xfac (local.set $75 ;; code offset: 0xfaa (i32.const 0) ) ;; code offset: 0xfb4 (drop ;; code offset: 0xfb2 (call $printf ;; code offset: 0xfae (local.get $74) ;; code offset: 0xfb0 (local.get $75) ) ) ;; code offset: 0xfba (local.set $76 ;; code offset: 0xfb7 (i32.load offset=32 ;; code offset: 0xfb5 (local.get $3) ) ) ;; code offset: 0xfbe (local.set $77 ;; code offset: 0xfbc (i32.const -1) ) ;; code offset: 0xfc5 (local.set $78 ;; code offset: 0xfc4 (i32.add ;; code offset: 0xfc0 (local.get $76) ;; code offset: 0xfc2 (local.get $77) ) ) ;; code offset: 0xfcb (i32.store offset=32 ;; code offset: 0xfc7 (local.get $3) ;; code offset: 0xfc9 (local.get $78) ) ;; code offset: 0xfce (br $label$7) ) ;; code offset: 0xfd1 (br $label$5) ) ;; code offset: 0xfd4 (block $label$11 ;; code offset: 0xfd6 (loop $label$12 ;; code offset: 0xfda (local.set $79 ;; code offset: 0xfd8 (i32.const 1) ) ;; code offset: 0xfe1 (local.set $80 ;; code offset: 0xfde (i32.load offset=16 ;; code offset: 0xfdc (local.get $3) ) ) ;; code offset: 0xfe5 (local.set $81 ;; code offset: 0xfe3 (local.get $80) ) ;; code offset: 0xfe9 (local.set $82 ;; code offset: 0xfe7 (local.get $79) ) ;; code offset: 0xff0 (local.set $83 ;; code offset: 0xfef (i32.gt_s ;; code offset: 0xfeb (local.get $81) ;; code offset: 0xfed (local.get $82) ) ) ;; code offset: 0xff4 (local.set $84 ;; code offset: 0xff2 (i32.const 1) ) ;; code offset: 0xffb (local.set $85 ;; code offset: 0xffa (i32.and ;; code offset: 0xff6 (local.get $83) ;; code offset: 0xff8 (local.get $84) ) ) ;; code offset: 0x1000 (br_if $label$11 ;; code offset: 0xfff (i32.eqz ;; code offset: 0xffd (local.get $85) ) ) ;; code offset: 0x1007 (local.set $86 ;; code offset: 0x1004 (i32.load offset=16 ;; code offset: 0x1002 (local.get $3) ) ) ;; code offset: 0x100e (local.set $87 ;; code offset: 0x100b (i32.load offset=24 ;; code offset: 0x1009 (local.get $3) ) ) ;; code offset: 0x1015 (local.set $88 ;; code offset: 0x1012 (i32.load offset=16 ;; code offset: 0x1010 (local.get $3) ) ) ;; code offset: 0x1019 (local.set $89 ;; code offset: 0x1017 (i32.const 1) ) ;; code offset: 0x1020 (local.set $90 ;; code offset: 0x101f (i32.sub ;; code offset: 0x101b (local.get $88) ;; code offset: 0x101d (local.get $89) ) ) ;; code offset: 0x1024 (local.set $91 ;; code offset: 0x1022 (i32.const 2) ) ;; code offset: 0x102b (local.set $92 ;; code offset: 0x102a (i32.shl ;; code offset: 0x1026 (local.get $90) ;; code offset: 0x1028 (local.get $91) ) ) ;; code offset: 0x1032 (local.set $93 ;; code offset: 0x1031 (i32.add ;; code offset: 0x102d (local.get $87) ;; code offset: 0x102f (local.get $92) ) ) ;; code offset: 0x1038 (i32.store ;; code offset: 0x1034 (local.get $93) ;; code offset: 0x1036 (local.get $86) ) ;; code offset: 0x1040 (local.set $94 ;; code offset: 0x103d (i32.load offset=16 ;; code offset: 0x103b (local.get $3) ) ) ;; code offset: 0x1044 (local.set $95 ;; code offset: 0x1042 (i32.const -1) ) ;; code offset: 0x104b (local.set $96 ;; code offset: 0x104a (i32.add ;; code offset: 0x1046 (local.get $94) ;; code offset: 0x1048 (local.get $95) ) ) ;; code offset: 0x1051 (i32.store offset=16 ;; code offset: 0x104d (local.get $3) ;; code offset: 0x104f (local.get $96) ) ;; code offset: 0x1054 (br $label$12) ) ) ;; code offset: 0x1059 (loop $label$13 ;; code offset: 0x1060 (local.set $97 ;; code offset: 0x105d (i32.load offset=16 ;; code offset: 0x105b (local.get $3) ) ) ;; code offset: 0x1067 (local.set $98 ;; code offset: 0x1064 (i32.load offset=44 ;; code offset: 0x1062 (local.get $3) ) ) ;; code offset: 0x106b (local.set $99 ;; code offset: 0x1069 (local.get $97) ) ;; code offset: 0x106f (local.set $100 ;; code offset: 0x106d (local.get $98) ) ;; code offset: 0x1076 (local.set $101 ;; code offset: 0x1075 (i32.eq ;; code offset: 0x1071 (local.get $99) ;; code offset: 0x1073 (local.get $100) ) ) ;; code offset: 0x107a (local.set $102 ;; code offset: 0x1078 (i32.const 1) ) ;; code offset: 0x1081 (local.set $103 ;; code offset: 0x1080 (i32.and ;; code offset: 0x107c (local.get $101) ;; code offset: 0x107e (local.get $102) ) ) ;; code offset: 0x1083 (block $label$14 ;; code offset: 0x1088 (br_if $label$14 ;; code offset: 0x1087 (i32.eqz ;; code offset: 0x1085 (local.get $103) ) ) ;; code offset: 0x108a (br $label$5) ) ;; code offset: 0x108f (local.set $104 ;; code offset: 0x108d (i32.const 0) ) ;; code offset: 0x1096 (local.set $105 ;; code offset: 0x1093 (i32.load offset=28 ;; code offset: 0x1091 (local.get $3) ) ) ;; code offset: 0x109d (local.set $106 ;; code offset: 0x109a (i32.load ;; code offset: 0x1098 (local.get $105) ) ) ;; code offset: 0x10a3 (i32.store offset=4 ;; code offset: 0x109f (local.get $3) ;; code offset: 0x10a1 (local.get $106) ) ;; code offset: 0x10aa (i32.store offset=20 ;; code offset: 0x10a6 (local.get $3) ;; code offset: 0x10a8 (local.get $104) ) ;; code offset: 0x10ad (block $label$15 ;; code offset: 0x10af (loop $label$16 ;; code offset: 0x10b6 (local.set $107 ;; code offset: 0x10b3 (i32.load offset=20 ;; code offset: 0x10b1 (local.get $3) ) ) ;; code offset: 0x10bd (local.set $108 ;; code offset: 0x10ba (i32.load offset=16 ;; code offset: 0x10b8 (local.get $3) ) ) ;; code offset: 0x10c1 (local.set $109 ;; code offset: 0x10bf (local.get $107) ) ;; code offset: 0x10c5 (local.set $110 ;; code offset: 0x10c3 (local.get $108) ) ;; code offset: 0x10cc (local.set $111 ;; code offset: 0x10cb (i32.lt_s ;; code offset: 0x10c7 (local.get $109) ;; code offset: 0x10c9 (local.get $110) ) ) ;; code offset: 0x10d0 (local.set $112 ;; code offset: 0x10ce (i32.const 1) ) ;; code offset: 0x10d7 (local.set $113 ;; code offset: 0x10d6 (i32.and ;; code offset: 0x10d2 (local.get $111) ;; code offset: 0x10d4 (local.get $112) ) ) ;; code offset: 0x10dc (br_if $label$15 ;; code offset: 0x10db (i32.eqz ;; code offset: 0x10d9 (local.get $113) ) ) ;; code offset: 0x10e3 (local.set $114 ;; code offset: 0x10e0 (i32.load offset=28 ;; code offset: 0x10de (local.get $3) ) ) ;; code offset: 0x10ea (local.set $115 ;; code offset: 0x10e7 (i32.load offset=20 ;; code offset: 0x10e5 (local.get $3) ) ) ;; code offset: 0x10ee (local.set $116 ;; code offset: 0x10ec (i32.const 1) ) ;; code offset: 0x10f5 (local.set $117 ;; code offset: 0x10f4 (i32.add ;; code offset: 0x10f0 (local.get $115) ;; code offset: 0x10f2 (local.get $116) ) ) ;; code offset: 0x10f9 (local.set $118 ;; code offset: 0x10f7 (i32.const 2) ) ;; code offset: 0x1100 (local.set $119 ;; code offset: 0x10ff (i32.shl ;; code offset: 0x10fb (local.get $117) ;; code offset: 0x10fd (local.get $118) ) ) ;; code offset: 0x1107 (local.set $120 ;; code offset: 0x1106 (i32.add ;; code offset: 0x1102 (local.get $114) ;; code offset: 0x1104 (local.get $119) ) ) ;; code offset: 0x110e (local.set $121 ;; code offset: 0x110b (i32.load ;; code offset: 0x1109 (local.get $120) ) ) ;; code offset: 0x1115 (local.set $122 ;; code offset: 0x1112 (i32.load offset=28 ;; code offset: 0x1110 (local.get $3) ) ) ;; code offset: 0x111c (local.set $123 ;; code offset: 0x1119 (i32.load offset=20 ;; code offset: 0x1117 (local.get $3) ) ) ;; code offset: 0x1120 (local.set $124 ;; code offset: 0x111e (i32.const 2) ) ;; code offset: 0x1127 (local.set $125 ;; code offset: 0x1126 (i32.shl ;; code offset: 0x1122 (local.get $123) ;; code offset: 0x1124 (local.get $124) ) ) ;; code offset: 0x112e (local.set $126 ;; code offset: 0x112d (i32.add ;; code offset: 0x1129 (local.get $122) ;; code offset: 0x112b (local.get $125) ) ) ;; code offset: 0x1134 (i32.store ;; code offset: 0x1130 (local.get $126) ;; code offset: 0x1132 (local.get $121) ) ;; code offset: 0x113c (local.set $127 ;; code offset: 0x1139 (i32.load offset=20 ;; code offset: 0x1137 (local.get $3) ) ) ;; code offset: 0x1140 (local.set $128 ;; code offset: 0x113e (i32.const 1) ) ;; code offset: 0x1149 (local.set $129 ;; code offset: 0x1148 (i32.add ;; code offset: 0x1143 (local.get $127) ;; code offset: 0x1145 (local.get $128) ) ) ;; code offset: 0x1151 (i32.store offset=20 ;; code offset: 0x114c (local.get $3) ;; code offset: 0x114e (local.get $129) ) ;; code offset: 0x1154 (br $label$16) ) ) ;; code offset: 0x115b (local.set $130 ;; code offset: 0x1159 (i32.const 0) ) ;; code offset: 0x1163 (local.set $131 ;; code offset: 0x1160 (i32.load offset=4 ;; code offset: 0x115e (local.get $3) ) ) ;; code offset: 0x116b (local.set $132 ;; code offset: 0x1168 (i32.load offset=28 ;; code offset: 0x1166 (local.get $3) ) ) ;; code offset: 0x1173 (local.set $133 ;; code offset: 0x1170 (i32.load offset=20 ;; code offset: 0x116e (local.get $3) ) ) ;; code offset: 0x1178 (local.set $134 ;; code offset: 0x1176 (i32.const 2) ) ;; code offset: 0x1182 (local.set $135 ;; code offset: 0x1181 (i32.shl ;; code offset: 0x117b (local.get $133) ;; code offset: 0x117e (local.get $134) ) ) ;; code offset: 0x118c (local.set $136 ;; code offset: 0x118b (i32.add ;; code offset: 0x1185 (local.get $132) ;; code offset: 0x1188 (local.get $135) ) ) ;; code offset: 0x1195 (i32.store ;; code offset: 0x118f (local.get $136) ;; code offset: 0x1192 (local.get $131) ) ;; code offset: 0x119d (local.set $137 ;; code offset: 0x119a (i32.load offset=24 ;; code offset: 0x1198 (local.get $3) ) ) ;; code offset: 0x11a5 (local.set $138 ;; code offset: 0x11a2 (i32.load offset=16 ;; code offset: 0x11a0 (local.get $3) ) ) ;; code offset: 0x11aa (local.set $139 ;; code offset: 0x11a8 (i32.const 2) ) ;; code offset: 0x11b4 (local.set $140 ;; code offset: 0x11b3 (i32.shl ;; code offset: 0x11ad (local.get $138) ;; code offset: 0x11b0 (local.get $139) ) ) ;; code offset: 0x11be (local.set $141 ;; code offset: 0x11bd (i32.add ;; code offset: 0x11b7 (local.get $137) ;; code offset: 0x11ba (local.get $140) ) ) ;; code offset: 0x11c7 (local.set $142 ;; code offset: 0x11c4 (i32.load ;; code offset: 0x11c1 (local.get $141) ) ) ;; code offset: 0x11cc (local.set $143 ;; code offset: 0x11ca (i32.const -1) ) ;; code offset: 0x11d6 (local.set $144 ;; code offset: 0x11d5 (i32.add ;; code offset: 0x11cf (local.get $142) ;; code offset: 0x11d2 (local.get $143) ) ) ;; code offset: 0x11df (i32.store ;; code offset: 0x11d9 (local.get $141) ;; code offset: 0x11dc (local.get $144) ) ;; code offset: 0x11e5 (local.set $145 ;; code offset: 0x11e2 (local.get $144) ) ;; code offset: 0x11eb (local.set $146 ;; code offset: 0x11e8 (local.get $130) ) ;; code offset: 0x11f5 (local.set $147 ;; code offset: 0x11f4 (i32.gt_s ;; code offset: 0x11ee (local.get $145) ;; code offset: 0x11f1 (local.get $146) ) ) ;; code offset: 0x11fa (local.set $148 ;; code offset: 0x11f8 (i32.const 1) ) ;; code offset: 0x1204 (local.set $149 ;; code offset: 0x1203 (i32.and ;; code offset: 0x11fd (local.get $147) ;; code offset: 0x1200 (local.get $148) ) ) ;; code offset: 0x1207 (block $label$17 (block $label$18 ;; code offset: 0x120f (br_if $label$18 ;; code offset: 0x120e (i32.eqz ;; code offset: 0x120b (local.get $149) ) ) ;; code offset: 0x1211 (br $label$17) ) ;; code offset: 0x1219 (local.set $150 ;; code offset: 0x1216 (i32.load offset=16 ;; code offset: 0x1214 (local.get $3) ) ) ;; code offset: 0x121e (local.set $151 ;; code offset: 0x121c (i32.const 1) ) ;; code offset: 0x1228 (local.set $152 ;; code offset: 0x1227 (i32.add ;; code offset: 0x1221 (local.get $150) ;; code offset: 0x1224 (local.get $151) ) ) ;; code offset: 0x1230 (i32.store offset=16 ;; code offset: 0x122b (local.get $3) ;; code offset: 0x122d (local.get $152) ) ;; code offset: 0x1233 (br $label$13) ) ) ;; code offset: 0x1237 (br $label$6) ) ) ;; code offset: 0x123e (local.set $153 ;; code offset: 0x123c (i32.const 0) ) ;; code offset: 0x1246 (local.set $154 ;; code offset: 0x1243 (i32.load offset=28 ;; code offset: 0x1241 (local.get $3) ) ) ;; code offset: 0x124c (call $free ;; code offset: 0x1249 (local.get $154) ) ;; code offset: 0x1253 (local.set $155 ;; code offset: 0x1250 (i32.load offset=24 ;; code offset: 0x124e (local.get $3) ) ) ;; code offset: 0x1259 (call $free ;; code offset: 0x1256 (local.get $155) ) ;; code offset: 0x1260 (i32.store offset=12 ;; code offset: 0x125b (local.get $3) ;; code offset: 0x125d (local.get $153) ) ;; code offset: 0x1263 (block $label$19 ;; code offset: 0x1265 (loop $label$20 ;; code offset: 0x1269 (local.set $156 ;; code offset: 0x1267 (i32.const 0) ) ;; code offset: 0x1271 (local.set $157 ;; code offset: 0x126e (i32.load offset=40 ;; code offset: 0x126c (local.get $3) ) ) ;; code offset: 0x1277 (local.set $158 ;; code offset: 0x1274 (local.get $157) ) ;; code offset: 0x127d (local.set $159 ;; code offset: 0x127a (local.get $156) ) ;; code offset: 0x1287 (local.set $160 ;; code offset: 0x1286 (i32.ne ;; code offset: 0x1280 (local.get $158) ;; code offset: 0x1283 (local.get $159) ) ) ;; code offset: 0x128c (local.set $161 ;; code offset: 0x128a (i32.const 1) ) ;; code offset: 0x1296 (local.set $162 ;; code offset: 0x1295 (i32.and ;; code offset: 0x128f (local.get $160) ;; code offset: 0x1292 (local.get $161) ) ) ;; code offset: 0x129d (br_if $label$19 ;; code offset: 0x129c (i32.eqz ;; code offset: 0x1299 (local.get $162) ) ) ;; code offset: 0x12a4 (local.set $163 ;; code offset: 0x12a1 (i32.load offset=40 ;; code offset: 0x129f (local.get $3) ) ) ;; code offset: 0x12ac (local.set $164 ;; code offset: 0x12aa (call $fannkuch_worker\28void*\29 ;; code offset: 0x12a7 (local.get $163) ) ) ;; code offset: 0x12b4 (i32.store offset=8 ;; code offset: 0x12af (local.get $3) ;; code offset: 0x12b1 (local.get $164) ) ;; code offset: 0x12bc (local.set $165 ;; code offset: 0x12b9 (i32.load offset=12 ;; code offset: 0x12b7 (local.get $3) ) ) ;; code offset: 0x12c4 (local.set $166 ;; code offset: 0x12c1 (i32.load offset=8 ;; code offset: 0x12bf (local.get $3) ) ) ;; code offset: 0x12ca (local.set $167 ;; code offset: 0x12c7 (local.get $165) ) ;; code offset: 0x12d0 (local.set $168 ;; code offset: 0x12cd (local.get $166) ) ;; code offset: 0x12da (local.set $169 ;; code offset: 0x12d9 (i32.lt_s ;; code offset: 0x12d3 (local.get $167) ;; code offset: 0x12d6 (local.get $168) ) ) ;; code offset: 0x12df (local.set $170 ;; code offset: 0x12dd (i32.const 1) ) ;; code offset: 0x12e9 (local.set $171 ;; code offset: 0x12e8 (i32.and ;; code offset: 0x12e2 (local.get $169) ;; code offset: 0x12e5 (local.get $170) ) ) ;; code offset: 0x12ec (block $label$21 ;; code offset: 0x12f2 (br_if $label$21 ;; code offset: 0x12f1 (i32.eqz ;; code offset: 0x12ee (local.get $171) ) ) ;; code offset: 0x12f9 (local.set $172 ;; code offset: 0x12f6 (i32.load offset=8 ;; code offset: 0x12f4 (local.get $3) ) ) ;; code offset: 0x1301 (i32.store offset=12 ;; code offset: 0x12fc (local.get $3) ;; code offset: 0x12fe (local.get $172) ) ) ;; code offset: 0x130a (local.set $173 ;; code offset: 0x1307 (i32.load offset=40 ;; code offset: 0x1305 (local.get $3) ) ) ;; code offset: 0x1312 (i32.store offset=36 ;; code offset: 0x130d (local.get $3) ;; code offset: 0x130f (local.get $173) ) ;; code offset: 0x131a (local.set $174 ;; code offset: 0x1317 (i32.load offset=40 ;; code offset: 0x1315 (local.get $3) ) ) ;; code offset: 0x1323 (local.set $175 ;; code offset: 0x1320 (i32.load offset=8 ;; code offset: 0x131d (local.get $174) ) ) ;; code offset: 0x132b (i32.store offset=40 ;; code offset: 0x1326 (local.get $3) ;; code offset: 0x1328 (local.get $175) ) ;; code offset: 0x1333 (local.set $176 ;; code offset: 0x1330 (i32.load offset=36 ;; code offset: 0x132e (local.get $3) ) ) ;; code offset: 0x1339 (call $free ;; code offset: 0x1336 (local.get $176) ) ;; code offset: 0x133b (br $label$20) ) ) ;; code offset: 0x1345 (local.set $177 ;; code offset: 0x1342 (i32.load offset=12 ;; code offset: 0x1340 (local.get $3) ) ) ;; code offset: 0x134a (local.set $178 ;; code offset: 0x1348 (i32.const 48) ) ;; code offset: 0x1353 (local.set $179 ;; code offset: 0x1352 (i32.add ;; code offset: 0x134d (local.get $3) ;; code offset: 0x134f (local.get $178) ) ) ;; code offset: 0x1359 (global.set $global$0 ;; code offset: 0x1356 (local.get $179) ) ;; code offset: 0x135e (return ;; code offset: 0x135b (local.get $177) ) ) ;; custom section ".debug_info", size 640 ;; custom section ".debug_ranges", size 32 ;; custom section ".debug_abbrev", size 222 ;; custom section ".debug_line", size 3965 ;; custom section ".debug_str", size 409 ;; custom section "producers", size 180 ) binaryen-version_108/test/passes/fannkuch0_dwarf.passes000066400000000000000000000000401423707623100234740ustar00rootroot00000000000000dwarfdump_roundtrip_dwarfdump_g binaryen-version_108/test/passes/fannkuch0_dwarf.wasm000066400000000000000000000167421423707623100231650ustar00rootroot00000000000000asm````denvmemory€€env__indirect_function_tablepenvmallocenvfreeenvatoienvprintfA°ˆÀ A­ )__wasm_call_ctorsmain __data_end   †ô#€€€€!AÀ!  k! $€€€€A!  6< ( (0!? (!@A!A @ Ak!BA!C B Ct!D ? Dj!E E >6 (!FA!G F Gj!H  H6 (4!I I(!J@ JE (4!K (!LA!M L Mk!NA!O N Ot!P K Pj!Q Q(!R (!SA!T S Tk!U R!V U!W V WG!XA!Y X Yq!Z ZE A![  [6 @@ ( !\ (!] \!^ ]!_ ^ _H!`A!a ` aq!b bE  (4!c ( !dA!e d et!f c fj!g g(!h (,!i ( !jA!k j kt!l i lj!m m h6 ( !nA!o n oj!p  p6 A!q  q6$ (,!r r(!s  s6@A!t  t6 (!uA!v u vk!w  w6@@ ( !x (!y x!z y!{ z {H!|A!} | }q!~ ~E  (,! ( !€A! € t!‚  ‚j!ƒ ƒ(!„  „6 (,!… (!†A!‡ † ‡t!ˆ … ˆj!‰ ‰(!Š (,!‹ ( !ŒA! Œ t!Ž ‹ Žj!  Š6 ( ! (,!‘ (!’A!“ ’ “t!” ‘ ”j!• • 6 ( !–A!— – —j!˜  ˜6 (!™A!š ™ šj!›  ›6 ($!œA! œ j!ž  ž6$ (,!Ÿ (! A!¡   ¡t!¢ Ÿ ¢j!£ £(!¤  ¤6 (!¥ (,!¦ (!§A!¨ § ¨t!© ¦ ©j!ª ª ¥6 ( !«  «6 (!¬ ¬ ((!­ ($!® ­!¯ ®!° ¯ °H!±A!² ± ²q!³@ ³E ($!´  ´6( @ (!µ (!¶A!· ¶ ·k!¸ µ!¹ ¸!º ¹ ºN!»A!¼ » ¼q!½@ ½E (4!¾ ¾€€€ (,!¿ ¿€€€ (0!À À€€€ ((!ÁAÀ!  Âj!à Ã$€€€€ Á A!Ä (4!Å Å(!Æ  Æ6  Ä6 @@ ( !Ç (!È Ç!É È!Ê É ÊH!ËA!Ì Ë Ìq!Í ÍE  (4!Î ( !ÏA!Ð Ï Ðj!ÑA!Ò Ñ Òt!Ó Î Ój!Ô Ô(!Õ (4!Ö ( !×A!Ø × Øt!Ù Ö Ùj!Ú Ú Õ6 ( !ÛA!Ü Û Üj!Ý  Ý6 A!Þ (!ß (4!à ( !áA!â á ât!ã à ãj!ä ä ß6 (0!å (!æA!ç æ çt!è å èj!é é(!êA!ë ê ëj!ì é ì6 ì!í Þ!î í îJ!ïA!ð ï ðq!ñ@@ ñE  (!òA!ó ò ój!ô  ô6  Î##€€€€!A !  k! $€€€€A!A!  6  6  6 (! ! !  J! A! q! @@ E (! (! ‚€€€! !  A! ! !A!  6 (! ! !  H!A!  q!@@ E A€ˆ€€!A!  ƒ€€€A!  6  (! (! ‡€€€!  6  6A‘ˆ€€! ƒ€€€A!!  !6 (!"A !#  #j!$ $$€€€€ " ä ³#€€€€!A0!  k! $€€€€A!A!  6,  6  6(  6@@ (! (,!A!  k! ! ! H! A! q! E A ! €€€€!  6$ (! ($!  6 (,! ($!  6 ((! ($!  6 ($!  6( (!A!  j!  6 A! (,!A!  t! €€€€!  6 (,! A!! !t!" "€€€€!#  #6  6@@ (!$ (,!% $!& %!' & 'H!(A!) ( )q!* *E  (!+ (!, (!-A!. - .t!/ , /j!0 0 +6 (!1A!2 1 2j!3  36 (,!4  46@@ ( !5@@ 5E A!6  66@@ (!7 (,!8 7!9 8!: 9 :H!;A!< ; (!?A!@ ? @t!A > Aj!B B(!CA!D C Dj!E  E6A¨ˆ€€!F F ƒ€€€ (!GA!H G Hj!I  I6 A«ˆ€€!JA!K J Kƒ€€€ ( !LA!M L Mj!N  N6   @@A!O (!P P!Q O!R Q RJ!SA!T S Tq!U UE  (!V (!W (!XA!Y X Yk!ZA![ Z [t!\ W \j!] ] V6 (!^A!_ ^ _j!`  `6 @ (!a (,!b a!c b!d c dF!eA!f e fq!g@ gE  A!h (!i i(!j  j6  h6@@ (!k (!l k!m l!n m nH!oA!p o pq!q qE  (!r (!sA!t s tj!uA!v u vt!w r wj!x x(!y (!z (!{A!| { |t!} z }j!~ ~ y6 (!A!€  €j!  6 A!‚ (!ƒ (!„ (!…A!† … †t!‡ „ ‡j!ˆ ˆ ƒ6 (!‰ (!ŠA!‹ Š ‹t!Œ ‰ Œj! (!ŽA! Ž j!  6 !‘ ‚!’ ‘ ’J!“A!” “ ”q!•@@ •E  (!–A!— – —j!˜  ˜6  A!™ (!š š€€€ (!› ›€€€  ™6 @@A!œ ((! !ž œ!Ÿ ž ŸG! A!¡   ¡q!¢ ¢E  ((!£ £…€€€!¤  ¤6 ( !¥ (!¦ ¥!§ ¦!¨ § ¨H!©A!ª © ªq!«@ «E (!¬  ¬6 ((!­  ­6$ ((!® ®(!¯  ¯6( ($!° °€€€ ( !±A0!²  ²j!³ ³$€€€€ ± 4A€ -Wrong argument. Pfannkuchen(%d) = %d. %d Œ .debug_info|•¨+Ï ÂYÈYÊ&ÄYÛvñ9ß 4j †ûY #<=m #8B& #4G` #0M` #,S` #(XY #$aY # ÂY #ÈY #gY #iY #kY # mY ´5 #qJYŽN!˜Y #t˜Y #y˜n #È™YÞ d&4WY #,ÈWY #(BY& #$ƒY& # ‰ZY #G[` #M[` #Â[Y #g[Y # X[Y #a[Y‘‰ b  #q}Ysx~. .debug_rangesŒŽÜ Þ Bì .debug_abbrev%UI6  : ;  I: ; 8 $> 9I: ; ; : ;  .n: ; I? : ; I 4: ; I .: ; I?.n: ; I : ; ¢ .debug_lineYû testssystem/include/libcxxfannkuch.cpp__nullptrstddef.h- +t xuttut¬ žut¬ žut¬ ž ut¬täót tt s‚.0t¬ ttt utt t t¬ utWt,žtäó ttt ¬ s‚. 0Öt"t$t¬,‚.t)¬ äRò/Jt¬t äótt ‚t t s ‚.hu ÖNt4ftt¬$t(¬&t äót‚òƒ‚‚"‚‚‚‘‚‚‚‚,1Ö Ö.3ׂ‚"ƒ ‚‚ ‚‚‘‚ƒ ‚g‚‚Xg‚A‚Â.ž‚äXg ‚‘ ‚‘ ‚‘ ‚º¬Êfƒ‚º‚ XK!‚#‚ä"‚‚‚! Ö.v ‚‚ ‚‚’‚‚‚òX ƒ°. Ñ pÖ¿. Ð [ U.Ž— ;t ä<Ö žç~f™Xç~J™ ‚v tä=Ÿã~&Ÿ 2t)tž%à~t¡ Þ × . w ut¬t¬ä¢òßJ žuttuttuttu to‚.nt¬ žut¬ ž vt¬täót tt s‚.1t v¬’ïJt¬t äó tt#‚ ¬ ‚.0gƒ. ô Œ.ötäó ttt ¬ s‚.2tä !….ýXÖut¬t äó!t#t¬‚tt !s º.v ‚‚ ‚‚’‚‚‚òX ƒý~. … tÖ‡. ƒ j  . t‚ ‘‚ ‘ô~‚ ‚X$K‚ º ƒ‚‚ Xg‚ð~‚‘  ‚ƒ‚ ƒ‚z R‚¤ .debug_strclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 2d7a8cf90478cd845ffb39763b0e95b7715322d2)tests/fannkuch.cpp/home/alon/Dev/emscripteniintnnextworker_argsstddecltype(nullptr)nullptr_t_Z15fannkuch_workerPvfannkuch_workermain_ZL8fannkuchifannkuch_argargsperm1countpermmaxflipsflipsrjktmpp0argcargvchartargsshowmaxcleanupdname]mallocfreeatoiprintf__wasm_call_ctorsfannkuch_worker(void*)main fannkuch(int)¾ producerslanguage C_plus_plus processed-byclang†11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 2d7a8cf90478cd845ffb39763b0e95b7715322d2)binaryen-version_108/test/passes/fannkuch3_dwarf.bin.txt000066400000000000000000007324571423707623100236170ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (851 bytes) Contains section .debug_loc (1073 bytes) Contains section .debug_ranges (88 bytes) Contains section .debug_abbrev (333 bytes) Contains section .debug_line (1477 bytes) Contains section .debug_str (434 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [3] DW_TAG_structure_type DW_CHILDREN_yes DW_AT_calling_convention DW_FORM_data1 DW_AT_name DW_FORM_strp DW_AT_byte_size DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [4] DW_TAG_member DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_data_member_location DW_FORM_data1 [5] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [6] DW_TAG_namespace DW_CHILDREN_yes DW_AT_name DW_FORM_strp [7] DW_TAG_typedef DW_CHILDREN_no DW_AT_type DW_FORM_ref4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [8] DW_TAG_unspecified_type DW_CHILDREN_no DW_AT_name DW_FORM_strp [9] DW_TAG_imported_declaration DW_CHILDREN_no DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_import DW_FORM_ref4 [10] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [11] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [12] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [13] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [14] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_ranges DW_FORM_sec_offset [15] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [16] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr [17] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_declaration DW_FORM_flag_present DW_AT_external DW_FORM_flag_present [18] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [19] DW_TAG_pointer_type DW_CHILDREN_no [20] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_inline DW_FORM_data1 [21] DW_TAG_label DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [22] DW_TAG_lexical_block DW_CHILDREN_yes [23] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [24] DW_TAG_inlined_subroutine DW_CHILDREN_yes DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_call_file DW_FORM_data1 DW_AT_call_line DW_FORM_data1 DW_AT_call_column DW_FORM_data1 [25] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [26] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_abstract_origin DW_FORM_ref4 [27] DW_TAG_variable DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [28] DW_TAG_label DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr .debug_info contents: 0x00000000: Compile Unit: length = 0x0000034f version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000353) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a9] = "/usr/local/google/home/azakai/Dev/2-binaryen") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000040 [0x00000006, 0x0000039d) [0x0000039f, 0x000006e1)) 0x00000026: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x002b => {0x0000002b} "worker_args") 0x0000002b: DW_TAG_structure_type [3] * DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e3] = "worker_args") DW_AT_byte_size [DW_FORM_data1] (0x0c) DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (20) 0x00000034: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x00) 0x00000040: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x04) 0x0000004c: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000de] = "next") DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (22) DW_AT_data_member_location [DW_FORM_data1] (0x08) 0x00000058: NULL 0x00000059: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d8] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000060: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000065: DW_TAG_namespace [6] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ef] = "std") 0x0000006a: DW_TAG_typedef [7] DW_AT_type [DW_FORM_ref4] (cu + 0x0076 => {0x00000076} "decltype(nullptr)") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000105] = "nullptr_t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr") DW_AT_decl_line [DW_FORM_data1] (57) 0x00000075: NULL 0x00000076: DW_TAG_unspecified_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000f3] = "decltype(nullptr)") 0x0000007b: DW_TAG_imported_declaration [9] DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h") DW_AT_decl_line [DW_FORM_data1] (52) DW_AT_import [DW_FORM_ref4] (cu + 0x006a => {0x0000006a}) 0x00000082: DW_TAG_subprogram [10] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006) DW_AT_high_pc [DW_FORM_data4] (0x00000397) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000166] = "_Z15fannkuch_workerPv") DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017c] = "fannkuch_worker") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000009e: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "_arg") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x01a7 => {0x000001a7} "*") 0x000000a9: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000133] = "args") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (28) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000000b4: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000006): [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000c3: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000001d: [0xffffffff, 0x00000006): [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value [0x00000052, 0x00000057): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value [0x00000131, 0x0000013b): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000179, 0x00000186): DW_OP_consts +0, DW_OP_stack_value [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value [0x00000275, 0x0000027e): DW_OP_consts +1, DW_OP_stack_value [0x000002ba, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000d2: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000a5: [0xffffffff, 0x00000006): [0x0000000e, 0x0000003c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000e1: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000c3: [0xffffffff, 0x00000006): [0x0000001b, 0x0000003c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000f0: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000e1: [0xffffffff, 0x00000006): [0x00000025, 0x0000003c): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000196] = "perm") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000ff: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000ff: [0xffffffff, 0x00000006): [0x0000002f, 0x0000003c): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x0000010e: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000011d: [0xffffffff, 0x00000006): [0x000001e2, 0x000001e7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value [0x0000036b, 0x00000370): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000011d: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000149: [0xffffffff, 0x00000006): [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value [0x000000ec, 0x000000f5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value [0x0000015a, 0x00000162): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value [0x00000275, 0x0000027e): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value [0x000002e3, 0x000002eb): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000012c: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001ab: [0xffffffff, 0x00000006): [0x000000e2, 0x000000e6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value [0x0000026b, 0x0000026f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019b] = "k") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000013b: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001d7: [0xffffffff, 0x00000006): [0x000000fc, 0x00000100): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000138, 0x0000013b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000285, 0x00000289): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000002c1, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019d] = "j") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000014a: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000021f: [0xffffffff, 0x00000006): [0x00000111, 0x0000013b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value [0x0000014c, 0x00000162): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000029a, 0x000002c4): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value [0x000002d5, 0x000002eb): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019f] = "tmp") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000159: DW_TAG_lexical_block [14] * DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000185, 0x000001c3) [0x000001ed, 0x000001f6) [0x0000030e, 0x0000034c) [0x00000376, 0x0000037f)) 0x0000015e: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000163] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (74) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000169: NULL 0x0000016a: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000001f) 0x0000016f: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000029) 0x00000174: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000033) 0x00000179: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000000e1) 0x0000017e: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000038a) 0x00000187: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000392) 0x00000190: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000039a) 0x00000199: NULL 0x0000019a: DW_TAG_subprogram [17] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "free") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h") DW_AT_decl_line [DW_FORM_data1] (41) DW_AT_declaration [DW_FORM_flag_present] (true) DW_AT_external [DW_FORM_flag_present] (true) 0x000001a1: DW_TAG_formal_parameter [18] DW_AT_type [DW_FORM_ref4] (cu + 0x01a7 => {0x000001a7} "*") 0x000001a6: NULL 0x000001a7: DW_TAG_pointer_type [19] 0x000001a8: DW_TAG_subprogram [20] * DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000114] = "_ZL8fannkuchi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000122] = "fannkuch") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_inline [DW_FORM_data1] (DW_INL_inlined) 0x000001b8: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001c3: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000012b] = "showmax") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (90) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001ce: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000133] = "args") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001d9: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001e4: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000138] = "targs") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001ef: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000001fa: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x00000205: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000210: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000021b: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000226: DW_TAG_label [21] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000015b] = "cleanup") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (137) 0x0000022d: DW_TAG_lexical_block [22] * 0x0000022e: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000163] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (125) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000239: NULL 0x0000023a: NULL 0x0000023b: DW_TAG_subprogram [23] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000039f) DW_AT_high_pc [DW_FORM_data4] (0x00000342) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000018c] = "main") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000253: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001a3] = "argc") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000025e: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001a8] = "argv") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0341 => {0x00000341} "char**") 0x00000269: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000267: [0xffffffff, 0x0000039f): [0x00000032, 0x00000037): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (153) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000278: DW_TAG_inlined_subroutine [24] * DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01a8 => {0x000001a8} "_ZL8fannkuchi") DW_AT_low_pc [DW_FORM_addr] (0x00000000000003ed) DW_AT_high_pc [DW_FORM_data4] (0x000002c8) DW_AT_call_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_call_line [DW_FORM_data1] (159) DW_AT_call_column [DW_FORM_data1] (0x29) 0x00000288: DW_TAG_formal_parameter [25] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01b8 => {0x000001b8} "n") 0x0000028d: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000285: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c3 => {0x000001c3} "showmax") 0x00000296: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002a2: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value [0x000002f8, 0x00000314): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ce => {0x000001ce} "args") 0x0000029f: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002cc: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value [0x0000008e, 0x00000093): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value [0x000000d7, 0x000000dc): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value [0x00000127, 0x0000012c): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000178, 0x00000188): DW_OP_consts +0, DW_OP_stack_value [0x000001fa, 0x0000020c): DW_OP_consts +0, DW_OP_stack_value [0x00000241, 0x00000255): DW_OP_consts +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d9 => {0x000001d9} "i") 0x000002a8: DW_TAG_variable [27] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01e4 => {0x000001e4} "targs") 0x000002ad: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000354: [0xffffffff, 0x0000039f): [0x000000a8, 0x000000c1): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ef => {0x000001ef} "perm1") 0x000002b6: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000372: [0xffffffff, 0x0000039f): [0x000000b2, 0x000000c1): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01fa => {0x000001fa} "count") 0x000002bf: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000390: [0xffffffff, 0x0000039f): [0x000001e6, 0x000001ed): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value [0x000002b3, 0x000002ba): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0205 => {0x00000205} "r") 0x000002c8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003e8: [0xffffffff, 0x0000039f): [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value [0x0000030c, 0x00000314): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0210 => {0x00000210} "maxflips") 0x000002d1: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000413: [0xffffffff, 0x0000039f): [0x000002f1, 0x00000314): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x021b => {0x0000021b} "flips") 0x000002da: DW_TAG_label [28] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0226 => {0x00000226} "cleanup") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000661) 0x000002e3: DW_TAG_lexical_block [14] * DW_AT_ranges [DW_FORM_sec_offset] (0x00000028 [0x00000517, 0x0000055e) [0x000005de, 0x0000062b)) 0x000002e8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003bc: [0xffffffff, 0x0000039f): [0x0000017f, 0x00000188): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value [0x00000248, 0x00000255): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022e => {0x0000022e} "p0") 0x000002f1: NULL 0x000002f2: NULL 0x000002f3: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003cf) 0x000002f8: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003e3) 0x000002fd: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000040d) 0x00000302: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000445) 0x00000307: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000044f) 0x0000030c: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000004be) 0x00000311: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000004d4) 0x00000316: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000005a1) 0x0000031b: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000669) 0x00000324: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000671) 0x0000032d: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000068e) 0x00000332: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000069f) 0x0000033b: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000006d1) 0x00000340: NULL 0x00000341: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0346 => {0x00000346} "char*") 0x00000346: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x034b => {0x0000034b} "char") 0x0000034b: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001ad] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x00000352: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000006): [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value 0x0000001d: [0xffffffff, 0x00000006): [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value [0x00000052, 0x00000057): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value [0x00000131, 0x0000013b): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000179, 0x00000186): DW_OP_consts +0, DW_OP_stack_value [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value [0x00000275, 0x0000027e): DW_OP_consts +1, DW_OP_stack_value [0x000002ba, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value 0x000000a5: [0xffffffff, 0x00000006): [0x0000000e, 0x0000003c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x000000c3: [0xffffffff, 0x00000006): [0x0000001b, 0x0000003c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x000000e1: [0xffffffff, 0x00000006): [0x00000025, 0x0000003c): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x000000ff: [0xffffffff, 0x00000006): [0x0000002f, 0x0000003c): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x0000011d: [0xffffffff, 0x00000006): [0x000001e2, 0x000001e7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value [0x0000036b, 0x00000370): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x00000149: [0xffffffff, 0x00000006): [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value [0x000000ec, 0x000000f5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value [0x0000015a, 0x00000162): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value [0x00000275, 0x0000027e): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value [0x000002e3, 0x000002eb): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x000001ab: [0xffffffff, 0x00000006): [0x000000e2, 0x000000e6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value [0x0000026b, 0x0000026f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value 0x000001d7: [0xffffffff, 0x00000006): [0x000000fc, 0x00000100): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000138, 0x0000013b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000285, 0x00000289): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000002c1, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x0000021f: [0xffffffff, 0x00000006): [0x00000111, 0x0000013b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value [0x0000014c, 0x00000162): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000029a, 0x000002c4): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value [0x000002d5, 0x000002eb): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000267: [0xffffffff, 0x0000039f): [0x00000032, 0x00000037): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x00000285: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value 0x000002a2: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value [0x000002f8, 0x00000314): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000002cc: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value [0x0000008e, 0x00000093): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value [0x000000d7, 0x000000dc): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value [0x00000127, 0x0000012c): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000178, 0x00000188): DW_OP_consts +0, DW_OP_stack_value [0x000001fa, 0x0000020c): DW_OP_consts +0, DW_OP_stack_value [0x00000241, 0x00000255): DW_OP_consts +0, DW_OP_stack_value 0x00000354: [0xffffffff, 0x0000039f): [0x000000a8, 0x000000c1): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000372: [0xffffffff, 0x0000039f): [0x000000b2, 0x000000c1): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x00000390: [0xffffffff, 0x0000039f): [0x000001e6, 0x000001ed): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value [0x000002b3, 0x000002ba): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000003bc: [0xffffffff, 0x0000039f): [0x0000017f, 0x00000188): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value [0x00000248, 0x00000255): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value 0x000003e8: [0xffffffff, 0x0000039f): [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value [0x0000030c, 0x00000314): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x00000413: [0xffffffff, 0x0000039f): [0x000002f1, 0x00000314): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x000005c1 version: 4 prologue_length: 0x000000dd min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 include_directories[ 1] = "/usr/local/google/home/azakai/Dev" file_names[ 1]: name: "emscripten/tests/fannkuch.cpp" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 2]: name: "emscripten/system/include/libcxx/__nullptr" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 3]: name: "emscripten/system/include/libcxx/stddef.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 4]: name: "emscripten/system/include/libc/stdlib.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 0x000000e7: 00 DW_LNE_set_address (0x0000000000000006) 0x000000ee: 03 DW_LNS_advance_line (27) 0x000000f0: 01 DW_LNS_copy 0x0000000000000006 27 0 1 0 0 is_stmt 0x000000f1: 05 DW_LNS_set_column (14) 0x000000f3: 0a DW_LNS_set_prologue_end 0x000000f4: 7a address += 7, line += 6 0x000000000000000d 33 14 1 0 0 is_stmt prologue_end 0x000000f5: 06 DW_LNS_negate_stmt 0x000000f6: 03 DW_LNS_advance_line (0) 0x000000f8: 58 address += 5, line += 0 0x0000000000000012 0 14 1 0 0 0x000000f9: 05 DW_LNS_set_column (27) 0x000000fb: 06 DW_LNS_negate_stmt 0x000000fc: 03 DW_LNS_advance_line (34) 0x000000fe: 4a address += 4, line += 0 0x0000000000000016 34 27 1 0 0 is_stmt 0x000000ff: 05 DW_LNS_set_column (18) 0x00000101: 06 DW_LNS_negate_stmt 0x00000102: 20 address += 1, line += 0 0x0000000000000017 34 18 1 0 0 0x00000103: 05 DW_LNS_set_column (17) 0x00000105: 06 DW_LNS_negate_stmt 0x00000106: 9f address += 10, line += 1 0x0000000000000021 35 17 1 0 0 is_stmt 0x00000107: 05 DW_LNS_set_column (18) 0x00000109: 9f address += 10, line += 1 0x000000000000002b 36 18 1 0 0 is_stmt 0x0000010a: 06 DW_LNS_negate_stmt 0x0000010b: 03 DW_LNS_advance_line (0) 0x0000010d: 9e address += 10, line += 0 0x0000000000000035 0 18 1 0 0 0x0000010e: 06 DW_LNS_negate_stmt 0x0000010f: 03 DW_LNS_advance_line (37) 0x00000111: 66 address += 6, line += 0 0x000000000000003b 37 18 1 0 0 is_stmt 0x00000112: 05 DW_LNS_set_column (4) 0x00000114: 06 DW_LNS_negate_stmt 0x00000115: 58 address += 5, line += 0 0x0000000000000040 37 4 1 0 0 0x00000116: 03 DW_LNS_advance_line (0) 0x00000118: 2e address += 2, line += 0 0x0000000000000042 0 4 1 0 0 0x00000119: 05 DW_LNS_set_column (7) 0x0000011b: 06 DW_LNS_negate_stmt 0x0000011c: 03 DW_LNS_advance_line (38) 0x0000011e: 2e address += 2, line += 0 0x0000000000000044 38 7 1 0 0 is_stmt 0x0000011f: 05 DW_LNS_set_column (16) 0x00000121: 06 DW_LNS_negate_stmt 0x00000122: 82 address += 8, line += 0 0x000000000000004c 38 16 1 0 0 0x00000123: 05 DW_LNS_set_column (24) 0x00000125: 06 DW_LNS_negate_stmt 0x00000126: 57 address += 5, line += -1 0x0000000000000051 37 24 1 0 0 is_stmt 0x00000127: 05 DW_LNS_set_column (18) 0x00000129: 06 DW_LNS_negate_stmt 0x0000012a: 58 address += 5, line += 0 0x0000000000000056 37 18 1 0 0 0x0000012b: 05 DW_LNS_set_column (4) 0x0000012d: 58 address += 5, line += 0 0x000000000000005b 37 4 1 0 0 0x0000012e: 06 DW_LNS_negate_stmt 0x0000012f: 3e address += 3, line += 2 0x000000000000005e 39 4 1 0 0 is_stmt 0x00000130: 05 DW_LNS_set_column (16) 0x00000132: 06 DW_LNS_negate_stmt 0x00000133: 2e address += 2, line += 0 0x0000000000000060 39 16 1 0 0 0x00000134: 05 DW_LNS_set_column (4) 0x00000136: 90 address += 9, line += 0 0x0000000000000069 39 4 1 0 0 0x00000137: 05 DW_LNS_set_column (23) 0x00000139: 2e address += 2, line += 0 0x000000000000006b 39 23 1 0 0 0x0000013a: 05 DW_LNS_set_column (19) 0x0000013c: 58 address += 5, line += 0 0x0000000000000070 39 19 1 0 0 0x0000013d: 05 DW_LNS_set_column (4) 0x0000013f: 06 DW_LNS_negate_stmt 0x00000140: 59 address += 5, line += 1 0x0000000000000075 40 4 1 0 0 is_stmt 0x00000141: 05 DW_LNS_set_column (17) 0x00000143: 06 DW_LNS_negate_stmt 0x00000144: 82 address += 8, line += 0 0x000000000000007d 40 17 1 0 0 0x00000145: 05 DW_LNS_set_column (18) 0x00000147: 06 DW_LNS_negate_stmt 0x00000148: a9 address += 11, line += -3 0x0000000000000088 37 18 1 0 0 is_stmt 0x00000149: 05 DW_LNS_set_column (4) 0x0000014b: 5e address += 5, line += 6 0x000000000000008d 43 4 1 0 0 is_stmt 0x0000014c: 06 DW_LNS_negate_stmt 0x0000014d: 03 DW_LNS_advance_line (0) 0x0000014f: 2e address += 2, line += 0 0x000000000000008f 0 4 1 0 0 0x00000150: 05 DW_LNS_set_column (16) 0x00000152: 06 DW_LNS_negate_stmt 0x00000153: 03 DW_LNS_advance_line (44) 0x00000155: 4a address += 4, line += 0 0x0000000000000093 44 16 1 0 0 is_stmt 0x00000156: 06 DW_LNS_negate_stmt 0x00000157: 03 DW_LNS_advance_line (0) 0x00000159: 74 address += 7, line += 0 0x000000000000009a 0 16 1 0 0 0x0000015a: 05 DW_LNS_set_column (10) 0x0000015c: 06 DW_LNS_negate_stmt 0x0000015d: 03 DW_LNS_advance_line (45) 0x0000015f: 2e address += 2, line += 0 0x000000000000009c 45 10 1 0 0 is_stmt 0x00000160: 05 DW_LNS_set_column (18) 0x00000162: 06 DW_LNS_negate_stmt 0x00000163: 2e address += 2, line += 0 0x000000000000009e 45 18 1 0 0 0x00000164: 05 DW_LNS_set_column (10) 0x00000166: 90 address += 9, line += 0 0x00000000000000a7 45 10 1 0 0 0x00000167: 05 DW_LNS_set_column (23) 0x00000169: 2e address += 2, line += 0 0x00000000000000a9 45 23 1 0 0 0x0000016a: 05 DW_LNS_set_column (16) 0x0000016c: 06 DW_LNS_negate_stmt 0x0000016d: 57 address += 5, line += -1 0x00000000000000ae 44 16 1 0 0 is_stmt 0x0000016e: 05 DW_LNS_set_column (0) 0x00000170: 06 DW_LNS_negate_stmt 0x00000171: 03 DW_LNS_advance_line (0) 0x00000173: 74 address += 7, line += 0 0x00000000000000b5 0 0 1 0 0 0x00000174: 05 DW_LNS_set_column (7) 0x00000176: 03 DW_LNS_advance_line (44) 0x00000178: 4a address += 4, line += 0 0x00000000000000b9 44 7 1 0 0 0x00000179: 05 DW_LNS_set_column (11) 0x0000017b: 06 DW_LNS_negate_stmt 0x0000017c: 68 address += 6, line += 2 0x00000000000000bf 46 11 1 0 0 is_stmt 0x0000017d: 05 DW_LNS_set_column (28) 0x0000017f: 06 DW_LNS_negate_stmt 0x00000180: ba address += 12, line += 0 0x00000000000000cb 46 28 1 0 0 0x00000181: 05 DW_LNS_set_column (41) 0x00000183: 58 address += 5, line += 0 0x00000000000000d0 46 41 1 0 0 0x00000184: 05 DW_LNS_set_column (21) 0x00000186: 06 DW_LNS_negate_stmt 0x00000187: 5a address += 5, line += 2 0x00000000000000d5 48 21 1 0 0 is_stmt 0x00000188: 05 DW_LNS_set_column (14) 0x0000018a: bc address += 12, line += 2 0x00000000000000e1 50 14 1 0 0 is_stmt 0x0000018b: 06 DW_LNS_negate_stmt 0x0000018c: 03 DW_LNS_advance_line (0) 0x0000018e: 74 address += 7, line += 0 0x00000000000000e8 0 14 1 0 0 0x0000018f: 05 DW_LNS_set_column (38) 0x00000191: 06 DW_LNS_negate_stmt 0x00000192: 03 DW_LNS_advance_line (52) 0x00000194: ba address += 12, line += 0 0x00000000000000f4 52 38 1 0 0 is_stmt 0x00000195: 05 DW_LNS_set_column (0) 0x00000197: 06 DW_LNS_negate_stmt 0x00000198: 03 DW_LNS_advance_line (0) 0x0000019a: 74 address += 7, line += 0 0x00000000000000fb 0 0 1 0 0 0x0000019b: 05 DW_LNS_set_column (22) 0x0000019d: 06 DW_LNS_negate_stmt 0x0000019e: 03 DW_LNS_advance_line (53) 0x000001a0: c8 address += 13, line += 0 0x0000000000000108 53 22 1 0 0 is_stmt 0x000001a1: 05 DW_LNS_set_column (24) 0x000001a3: e5 address += 15, line += 1 0x0000000000000117 54 24 1 0 0 is_stmt 0x000001a4: 05 DW_LNS_set_column (26) 0x000001a6: 06 DW_LNS_negate_stmt 0x000001a7: 2e address += 2, line += 0 0x0000000000000119 54 26 1 0 0 0x000001a8: 05 DW_LNS_set_column (24) 0x000001aa: c8 address += 13, line += 0 0x0000000000000126 54 24 1 0 0 0x000001ab: 06 DW_LNS_negate_stmt 0x000001ac: 3d address += 3, line += 1 0x0000000000000129 55 24 1 0 0 is_stmt 0x000001ad: 05 DW_LNS_set_column (44) 0x000001af: 71 address += 7, line += -3 0x0000000000000130 52 44 1 0 0 is_stmt 0x000001b0: 06 DW_LNS_negate_stmt 0x000001b1: 03 DW_LNS_advance_line (0) 0x000001b3: 58 address += 5, line += 0 0x0000000000000135 0 44 1 0 0 0x000001b4: 05 DW_LNS_set_column (38) 0x000001b6: 03 DW_LNS_advance_line (52) 0x000001b8: 74 address += 7, line += 0 0x000000000000013c 52 38 1 0 0 0x000001b9: 05 DW_LNS_set_column (13) 0x000001bb: 3c address += 3, line += 0 0x000000000000013f 52 13 1 0 0 0x000001bc: 05 DW_LNS_set_column (19) 0x000001be: 06 DW_LNS_negate_stmt 0x000001bf: 50 address += 4, line += 6 0x0000000000000143 58 19 1 0 0 is_stmt 0x000001c0: 05 DW_LNS_set_column (21) 0x000001c2: e5 address += 15, line += 1 0x0000000000000152 59 21 1 0 0 is_stmt 0x000001c3: 05 DW_LNS_set_column (18) 0x000001c5: 72 address += 7, line += -2 0x0000000000000159 57 18 1 0 0 is_stmt 0x000001c6: 05 DW_LNS_set_column (0) 0x000001c8: 06 DW_LNS_negate_stmt 0x000001c9: 03 DW_LNS_advance_line (0) 0x000001cb: 74 address += 7, line += 0 0x0000000000000160 0 0 1 0 0 0x000001cc: 05 DW_LNS_set_column (14) 0x000001ce: 06 DW_LNS_negate_stmt 0x000001cf: 03 DW_LNS_advance_line (62) 0x000001d1: 90 address += 9, line += 0 0x0000000000000169 62 14 1 0 0 is_stmt 0x000001d2: 05 DW_LNS_set_column (23) 0x000001d4: 06 DW_LNS_negate_stmt 0x000001d5: 4a address += 4, line += 0 0x000000000000016d 62 23 1 0 0 0x000001d6: 05 DW_LNS_set_column (14) 0x000001d8: 58 address += 5, line += 0 0x0000000000000172 62 14 1 0 0 0x000001d9: 03 DW_LNS_advance_line (0) 0x000001db: 3c address += 3, line += 0 0x0000000000000175 0 14 1 0 0 0x000001dc: 05 DW_LNS_set_column (16) 0x000001de: 06 DW_LNS_negate_stmt 0x000001df: 03 DW_LNS_advance_line (66) 0x000001e2: 20 address += 1, line += 0 0x0000000000000176 66 16 1 0 0 is_stmt 0x000001e3: 06 DW_LNS_negate_stmt 0x000001e4: 03 DW_LNS_advance_line (0) 0x000001e7: 74 address += 7, line += 0 0x000000000000017d 0 16 1 0 0 0x000001e8: 05 DW_LNS_set_column (27) 0x000001ea: 06 DW_LNS_negate_stmt 0x000001eb: 03 DW_LNS_advance_line (75) 0x000001ee: 82 address += 8, line += 0 0x0000000000000185 75 27 1 0 0 is_stmt 0x000001ef: 06 DW_LNS_negate_stmt 0x000001f0: 03 DW_LNS_advance_line (0) 0x000001f3: 74 address += 7, line += 0 0x000000000000018c 0 27 1 0 0 0x000001f4: 05 DW_LNS_set_column (16) 0x000001f6: 06 DW_LNS_negate_stmt 0x000001f7: 03 DW_LNS_advance_line (76) 0x000001fa: 2e address += 2, line += 0 0x000000000000018e 76 16 1 0 0 is_stmt 0x000001fb: 05 DW_LNS_set_column (27) 0x000001fd: 06 DW_LNS_negate_stmt 0x000001fe: 82 address += 8, line += 0 0x0000000000000196 76 27 1 0 0 0x000001ff: 05 DW_LNS_set_column (35) 0x00000201: 2e address += 2, line += 0 0x0000000000000198 76 35 1 0 0 0x00000202: 05 DW_LNS_set_column (27) 0x00000204: 90 address += 9, line += 0 0x00000000000001a1 76 27 1 0 0 0x00000205: 05 DW_LNS_set_column (25) 0x00000207: 58 address += 5, line += 0 0x00000000000001a6 76 25 1 0 0 0x00000208: 05 DW_LNS_set_column (27) 0x0000020a: 06 DW_LNS_negate_stmt 0x0000020b: 3b address += 3, line += -1 0x00000000000001a9 75 27 1 0 0 is_stmt 0x0000020c: 05 DW_LNS_set_column (13) 0x0000020e: 06 DW_LNS_negate_stmt 0x0000020f: 58 address += 5, line += 0 0x00000000000001ae 75 13 1 0 0 0x00000210: 05 DW_LNS_set_column (0) 0x00000212: 03 DW_LNS_advance_line (0) 0x00000215: 3c address += 3, line += 0 0x00000000000001b1 0 0 1 0 0 0x00000216: 05 DW_LNS_set_column (13) 0x00000218: 06 DW_LNS_negate_stmt 0x00000219: 03 DW_LNS_advance_line (77) 0x0000021c: 58 address += 5, line += 0 0x00000000000001b6 77 13 1 0 0 is_stmt 0x0000021d: 05 DW_LNS_set_column (22) 0x0000021f: 06 DW_LNS_negate_stmt 0x00000220: 82 address += 8, line += 0 0x00000000000001be 77 22 1 0 0 0x00000221: 05 DW_LNS_set_column (16) 0x00000223: 06 DW_LNS_negate_stmt 0x00000224: 5a address += 5, line += 2 0x00000000000001c3 79 16 1 0 0 is_stmt 0x00000225: 05 DW_LNS_set_column (14) 0x00000227: 06 DW_LNS_negate_stmt 0x00000228: 82 address += 8, line += 0 0x00000000000001cb 79 14 1 0 0 0x00000229: 05 DW_LNS_set_column (25) 0x0000022b: e4 address += 15, line += 0 0x00000000000001da 79 25 1 0 0 0x0000022c: 05 DW_LNS_set_column (11) 0x0000022e: 06 DW_LNS_negate_stmt 0x0000022f: 76 address += 7, line += 2 0x00000000000001e1 81 11 1 0 0 is_stmt 0x00000230: 05 DW_LNS_set_column (16) 0x00000232: 03 DW_LNS_advance_line (66) 0x00000234: 58 address += 5, line += 0 0x00000000000001e6 66 16 1 0 0 is_stmt 0x00000235: 05 DW_LNS_set_column (22) 0x00000237: 7c address += 7, line += 8 0x00000000000001ed 74 22 1 0 0 is_stmt 0x00000238: 05 DW_LNS_set_column (4) 0x0000023a: 03 DW_LNS_advance_line (37) 0x0000023c: 90 address += 9, line += 0 0x00000000000001f6 37 4 1 0 0 is_stmt 0x0000023d: 3e address += 3, line += 2 0x00000000000001f9 39 4 1 0 0 is_stmt 0x0000023e: 05 DW_LNS_set_column (16) 0x00000240: 06 DW_LNS_negate_stmt 0x00000241: 2e address += 2, line += 0 0x00000000000001fb 39 16 1 0 0 0x00000242: 05 DW_LNS_set_column (4) 0x00000244: 90 address += 9, line += 0 0x0000000000000204 39 4 1 0 0 0x00000245: 05 DW_LNS_set_column (23) 0x00000247: 2e address += 2, line += 0 0x0000000000000206 39 23 1 0 0 0x00000248: 05 DW_LNS_set_column (19) 0x0000024a: 58 address += 5, line += 0 0x000000000000020b 39 19 1 0 0 0x0000024b: 05 DW_LNS_set_column (4) 0x0000024d: 06 DW_LNS_negate_stmt 0x0000024e: 59 address += 5, line += 1 0x0000000000000210 40 4 1 0 0 is_stmt 0x0000024f: 05 DW_LNS_set_column (17) 0x00000251: 06 DW_LNS_negate_stmt 0x00000252: 82 address += 8, line += 0 0x0000000000000218 40 17 1 0 0 0x00000253: 03 DW_LNS_advance_line (0) 0x00000255: 74 address += 7, line += 0 0x000000000000021f 0 17 1 0 0 0x00000256: 05 DW_LNS_set_column (16) 0x00000258: 06 DW_LNS_negate_stmt 0x00000259: 03 DW_LNS_advance_line (44) 0x0000025b: 90 address += 9, line += 0 0x0000000000000228 44 16 1 0 0 is_stmt 0x0000025c: 06 DW_LNS_negate_stmt 0x0000025d: 03 DW_LNS_advance_line (0) 0x0000025f: 74 address += 7, line += 0 0x000000000000022f 0 16 1 0 0 0x00000260: 05 DW_LNS_set_column (10) 0x00000262: 06 DW_LNS_negate_stmt 0x00000263: 03 DW_LNS_advance_line (45) 0x00000265: 2e address += 2, line += 0 0x0000000000000231 45 10 1 0 0 is_stmt 0x00000266: 05 DW_LNS_set_column (18) 0x00000268: 06 DW_LNS_negate_stmt 0x00000269: 2e address += 2, line += 0 0x0000000000000233 45 18 1 0 0 0x0000026a: 05 DW_LNS_set_column (10) 0x0000026c: 90 address += 9, line += 0 0x000000000000023c 45 10 1 0 0 0x0000026d: 05 DW_LNS_set_column (23) 0x0000026f: 2e address += 2, line += 0 0x000000000000023e 45 23 1 0 0 0x00000270: 05 DW_LNS_set_column (16) 0x00000272: 06 DW_LNS_negate_stmt 0x00000273: 57 address += 5, line += -1 0x0000000000000243 44 16 1 0 0 is_stmt 0x00000274: 06 DW_LNS_negate_stmt 0x00000275: 03 DW_LNS_advance_line (0) 0x00000277: e4 address += 15, line += 0 0x0000000000000252 0 16 1 0 0 0x00000278: 05 DW_LNS_set_column (11) 0x0000027a: 06 DW_LNS_negate_stmt 0x0000027b: 03 DW_LNS_advance_line (46) 0x0000027d: 2e address += 2, line += 0 0x0000000000000254 46 11 1 0 0 is_stmt 0x0000027e: 05 DW_LNS_set_column (28) 0x00000280: 06 DW_LNS_negate_stmt 0x00000281: ba address += 12, line += 0 0x0000000000000260 46 28 1 0 0 0x00000282: 05 DW_LNS_set_column (41) 0x00000284: 58 address += 5, line += 0 0x0000000000000265 46 41 1 0 0 0x00000285: 05 DW_LNS_set_column (14) 0x00000287: 06 DW_LNS_negate_stmt 0x00000288: 5c address += 5, line += 4 0x000000000000026a 50 14 1 0 0 is_stmt 0x00000289: 06 DW_LNS_negate_stmt 0x0000028a: 03 DW_LNS_advance_line (0) 0x0000028c: 74 address += 7, line += 0 0x0000000000000271 0 14 1 0 0 0x0000028d: 05 DW_LNS_set_column (38) 0x0000028f: 06 DW_LNS_negate_stmt 0x00000290: 03 DW_LNS_advance_line (52) 0x00000292: ba address += 12, line += 0 0x000000000000027d 52 38 1 0 0 is_stmt 0x00000293: 05 DW_LNS_set_column (0) 0x00000295: 06 DW_LNS_negate_stmt 0x00000296: 03 DW_LNS_advance_line (0) 0x00000298: 74 address += 7, line += 0 0x0000000000000284 0 0 1 0 0 0x00000299: 05 DW_LNS_set_column (22) 0x0000029b: 06 DW_LNS_negate_stmt 0x0000029c: 03 DW_LNS_advance_line (53) 0x0000029e: c8 address += 13, line += 0 0x0000000000000291 53 22 1 0 0 is_stmt 0x0000029f: 05 DW_LNS_set_column (24) 0x000002a1: e5 address += 15, line += 1 0x00000000000002a0 54 24 1 0 0 is_stmt 0x000002a2: 05 DW_LNS_set_column (26) 0x000002a4: 06 DW_LNS_negate_stmt 0x000002a5: 2e address += 2, line += 0 0x00000000000002a2 54 26 1 0 0 0x000002a6: 05 DW_LNS_set_column (24) 0x000002a8: c8 address += 13, line += 0 0x00000000000002af 54 24 1 0 0 0x000002a9: 06 DW_LNS_negate_stmt 0x000002aa: 3d address += 3, line += 1 0x00000000000002b2 55 24 1 0 0 is_stmt 0x000002ab: 05 DW_LNS_set_column (44) 0x000002ad: 71 address += 7, line += -3 0x00000000000002b9 52 44 1 0 0 is_stmt 0x000002ae: 06 DW_LNS_negate_stmt 0x000002af: 03 DW_LNS_advance_line (0) 0x000002b1: 58 address += 5, line += 0 0x00000000000002be 0 44 1 0 0 0x000002b2: 05 DW_LNS_set_column (38) 0x000002b4: 03 DW_LNS_advance_line (52) 0x000002b6: 74 address += 7, line += 0 0x00000000000002c5 52 38 1 0 0 0x000002b7: 03 DW_LNS_advance_line (0) 0x000002b9: 58 address += 5, line += 0 0x00000000000002ca 0 38 1 0 0 0x000002ba: 05 DW_LNS_set_column (19) 0x000002bc: 06 DW_LNS_negate_stmt 0x000002bd: 03 DW_LNS_advance_line (58) 0x000002bf: 2e address += 2, line += 0 0x00000000000002cc 58 19 1 0 0 is_stmt 0x000002c0: 05 DW_LNS_set_column (21) 0x000002c2: e5 address += 15, line += 1 0x00000000000002db 59 21 1 0 0 is_stmt 0x000002c3: 05 DW_LNS_set_column (18) 0x000002c5: 72 address += 7, line += -2 0x00000000000002e2 57 18 1 0 0 is_stmt 0x000002c6: 05 DW_LNS_set_column (0) 0x000002c8: 06 DW_LNS_negate_stmt 0x000002c9: 03 DW_LNS_advance_line (0) 0x000002cb: 74 address += 7, line += 0 0x00000000000002e9 0 0 1 0 0 0x000002cc: 05 DW_LNS_set_column (14) 0x000002ce: 06 DW_LNS_negate_stmt 0x000002cf: 03 DW_LNS_advance_line (62) 0x000002d1: 90 address += 9, line += 0 0x00000000000002f2 62 14 1 0 0 is_stmt 0x000002d2: 05 DW_LNS_set_column (23) 0x000002d4: 06 DW_LNS_negate_stmt 0x000002d5: 4a address += 4, line += 0 0x00000000000002f6 62 23 1 0 0 0x000002d6: 05 DW_LNS_set_column (14) 0x000002d8: 58 address += 5, line += 0 0x00000000000002fb 62 14 1 0 0 0x000002d9: 03 DW_LNS_advance_line (0) 0x000002db: 3c address += 3, line += 0 0x00000000000002fe 0 14 1 0 0 0x000002dc: 05 DW_LNS_set_column (16) 0x000002de: 06 DW_LNS_negate_stmt 0x000002df: 03 DW_LNS_advance_line (66) 0x000002e2: 20 address += 1, line += 0 0x00000000000002ff 66 16 1 0 0 is_stmt 0x000002e3: 06 DW_LNS_negate_stmt 0x000002e4: 03 DW_LNS_advance_line (0) 0x000002e7: 74 address += 7, line += 0 0x0000000000000306 0 16 1 0 0 0x000002e8: 05 DW_LNS_set_column (27) 0x000002ea: 06 DW_LNS_negate_stmt 0x000002eb: 03 DW_LNS_advance_line (75) 0x000002ee: 82 address += 8, line += 0 0x000000000000030e 75 27 1 0 0 is_stmt 0x000002ef: 06 DW_LNS_negate_stmt 0x000002f0: 03 DW_LNS_advance_line (0) 0x000002f3: 74 address += 7, line += 0 0x0000000000000315 0 27 1 0 0 0x000002f4: 05 DW_LNS_set_column (16) 0x000002f6: 06 DW_LNS_negate_stmt 0x000002f7: 03 DW_LNS_advance_line (76) 0x000002fa: 2e address += 2, line += 0 0x0000000000000317 76 16 1 0 0 is_stmt 0x000002fb: 05 DW_LNS_set_column (27) 0x000002fd: 06 DW_LNS_negate_stmt 0x000002fe: 82 address += 8, line += 0 0x000000000000031f 76 27 1 0 0 0x000002ff: 05 DW_LNS_set_column (35) 0x00000301: 2e address += 2, line += 0 0x0000000000000321 76 35 1 0 0 0x00000302: 05 DW_LNS_set_column (27) 0x00000304: 90 address += 9, line += 0 0x000000000000032a 76 27 1 0 0 0x00000305: 05 DW_LNS_set_column (25) 0x00000307: 58 address += 5, line += 0 0x000000000000032f 76 25 1 0 0 0x00000308: 05 DW_LNS_set_column (27) 0x0000030a: 06 DW_LNS_negate_stmt 0x0000030b: 3b address += 3, line += -1 0x0000000000000332 75 27 1 0 0 is_stmt 0x0000030c: 06 DW_LNS_negate_stmt 0x0000030d: 03 DW_LNS_advance_line (0) 0x00000310: 74 address += 7, line += 0 0x0000000000000339 0 27 1 0 0 0x00000311: 05 DW_LNS_set_column (13) 0x00000313: 06 DW_LNS_negate_stmt 0x00000314: 03 DW_LNS_advance_line (77) 0x00000317: 66 address += 6, line += 0 0x000000000000033f 77 13 1 0 0 is_stmt 0x00000318: 05 DW_LNS_set_column (22) 0x0000031a: 06 DW_LNS_negate_stmt 0x0000031b: 82 address += 8, line += 0 0x0000000000000347 77 22 1 0 0 0x0000031c: 05 DW_LNS_set_column (16) 0x0000031e: 06 DW_LNS_negate_stmt 0x0000031f: 5a address += 5, line += 2 0x000000000000034c 79 16 1 0 0 is_stmt 0x00000320: 05 DW_LNS_set_column (14) 0x00000322: 06 DW_LNS_negate_stmt 0x00000323: 82 address += 8, line += 0 0x0000000000000354 79 14 1 0 0 0x00000324: 05 DW_LNS_set_column (25) 0x00000326: e4 address += 15, line += 0 0x0000000000000363 79 25 1 0 0 0x00000327: 05 DW_LNS_set_column (11) 0x00000329: 06 DW_LNS_negate_stmt 0x0000032a: 76 address += 7, line += 2 0x000000000000036a 81 11 1 0 0 is_stmt 0x0000032b: 05 DW_LNS_set_column (16) 0x0000032d: 03 DW_LNS_advance_line (66) 0x0000032f: 58 address += 5, line += 0 0x000000000000036f 66 16 1 0 0 is_stmt 0x00000330: 05 DW_LNS_set_column (22) 0x00000332: 7c address += 7, line += 8 0x0000000000000376 74 22 1 0 0 is_stmt 0x00000333: 06 DW_LNS_negate_stmt 0x00000334: 03 DW_LNS_advance_line (0) 0x00000337: 90 address += 9, line += 0 0x000000000000037f 0 22 1 0 0 0x00000338: 05 DW_LNS_set_column (13) 0x0000033a: 06 DW_LNS_negate_stmt 0x0000033b: 03 DW_LNS_advance_line (67) 0x0000033e: 3c address += 3, line += 0 0x0000000000000382 67 13 1 0 0 is_stmt 0x0000033f: 83 address += 8, line += 1 0x000000000000038a 68 13 1 0 0 is_stmt 0x00000340: 83 address += 8, line += 1 0x0000000000000392 69 13 1 0 0 is_stmt 0x00000341: 83 address += 8, line += 1 0x000000000000039a 70 13 1 0 0 is_stmt 0x00000342: 02 DW_LNS_advance_pc (3) 0x00000344: 00 DW_LNE_end_sequence 0x000000000000039d 70 13 1 0 0 is_stmt end_sequence 0x00000347: 00 DW_LNE_set_address (0x000000000000039f) 0x0000034e: 03 DW_LNS_advance_line (152) 0x00000351: 01 DW_LNS_copy 0x000000000000039f 152 0 1 0 0 is_stmt 0x00000352: 05 DW_LNS_set_column (17) 0x00000354: 0a DW_LNS_set_prologue_end 0x00000355: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000356: 91 address += 9, line += 1 0x00000000000003b9 153 17 1 0 0 is_stmt prologue_end 0x00000357: 05 DW_LNS_set_column (12) 0x00000359: 06 DW_LNS_negate_stmt 0x0000035a: 58 address += 5, line += 0 0x00000000000003be 153 12 1 0 0 0x0000035b: 03 DW_LNS_advance_line (0) 0x0000035e: 2e address += 2, line += 0 0x00000000000003c0 0 12 1 0 0 0x0000035f: 05 DW_LNS_set_column (28) 0x00000361: 03 DW_LNS_advance_line (153) 0x00000364: 4a address += 4, line += 0 0x00000000000003c4 153 28 1 0 0 0x00000365: 05 DW_LNS_set_column (23) 0x00000367: 58 address += 5, line += 0 0x00000000000003c9 153 23 1 0 0 0x00000368: 03 DW_LNS_advance_line (0) 0x0000036b: 66 address += 6, line += 0 0x00000000000003cf 0 23 1 0 0 0x0000036c: 05 DW_LNS_set_column (10) 0x0000036e: 06 DW_LNS_negate_stmt 0x0000036f: 03 DW_LNS_advance_line (155) 0x00000372: 4a address += 4, line += 0 0x00000000000003d3 155 10 1 0 0 is_stmt 0x00000373: 05 DW_LNS_set_column (8) 0x00000375: 06 DW_LNS_negate_stmt 0x00000376: 20 address += 1, line += 0 0x00000000000003d4 155 8 1 0 0 0x00000377: 03 DW_LNS_advance_line (0) 0x0000037a: 2e address += 2, line += 0 0x00000000000003d6 0 8 1 0 0 0x0000037b: 05 DW_LNS_set_column (7) 0x0000037d: 06 DW_LNS_negate_stmt 0x0000037e: 03 DW_LNS_advance_line (156) 0x00000381: 20 address += 1, line += 0 0x00000000000003d7 156 7 1 0 0 is_stmt 0x00000382: 06 DW_LNS_negate_stmt 0x00000383: 03 DW_LNS_advance_line (0) 0x00000386: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000387: 2e address += 2, line += 0 0x00000000000003ea 0 7 1 0 0 0x00000388: 05 DW_LNS_set_column (18) 0x0000038a: 06 DW_LNS_negate_stmt 0x0000038b: 03 DW_LNS_advance_line (94) 0x0000038e: 3c address += 3, line += 0 0x00000000000003ed 94 18 1 0 0 is_stmt 0x0000038f: 05 DW_LNS_set_column (4) 0x00000391: 06 DW_LNS_negate_stmt 0x00000392: 58 address += 5, line += 0 0x00000000000003f2 94 4 1 0 0 0x00000393: 03 DW_LNS_advance_line (0) 0x00000396: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000397: 12 address += 0, line += 0 0x0000000000000403 0 4 1 0 0 0x00000398: 05 DW_LNS_set_column (29) 0x0000039a: 06 DW_LNS_negate_stmt 0x0000039b: 03 DW_LNS_advance_line (95) 0x0000039e: 4a address += 4, line += 0 0x0000000000000407 95 29 1 0 0 is_stmt 0x0000039f: 05 DW_LNS_set_column (19) 0x000003a1: 69 address += 6, line += 3 0x000000000000040d 98 19 1 0 0 is_stmt 0x000003a2: 05 DW_LNS_set_column (16) 0x000003a4: 73 address += 7, line += -1 0x0000000000000414 97 16 1 0 0 is_stmt 0x000003a5: 73 address += 7, line += -1 0x000000000000041b 96 16 1 0 0 is_stmt 0x000003a6: 06 DW_LNS_negate_stmt 0x000003a7: 03 DW_LNS_advance_line (0) 0x000003aa: 74 address += 7, line += 0 0x0000000000000422 0 16 1 0 0 0x000003ab: 05 DW_LNS_set_column (28) 0x000003ad: 06 DW_LNS_negate_stmt 0x000003ae: 03 DW_LNS_advance_line (94) 0x000003b1: 4a address += 4, line += 0 0x0000000000000426 94 28 1 0 0 is_stmt 0x000003b2: 05 DW_LNS_set_column (18) 0x000003b4: 06 DW_LNS_negate_stmt 0x000003b5: 58 address += 5, line += 0 0x000000000000042b 94 18 1 0 0 0x000003b6: 05 DW_LNS_set_column (4) 0x000003b8: 58 address += 5, line += 0 0x0000000000000430 94 4 1 0 0 0x000003b9: 03 DW_LNS_advance_line (0) 0x000003bc: 4a address += 4, line += 0 0x0000000000000434 0 4 1 0 0 0x000003bd: 05 DW_LNS_set_column (27) 0x000003bf: 06 DW_LNS_negate_stmt 0x000003c0: 03 DW_LNS_advance_line (102) 0x000003c3: 4a address += 4, line += 0 0x0000000000000438 102 27 1 0 0 is_stmt 0x000003c4: 05 DW_LNS_set_column (18) 0x000003c6: 06 DW_LNS_negate_stmt 0x000003c7: 58 address += 5, line += 0 0x000000000000043d 102 18 1 0 0 0x000003c8: 06 DW_LNS_negate_stmt 0x000003c9: 9f address += 10, line += 1 0x0000000000000447 103 18 1 0 0 is_stmt 0x000003ca: 06 DW_LNS_negate_stmt 0x000003cb: 03 DW_LNS_advance_line (0) 0x000003ce: 9e address += 10, line += 0 0x0000000000000451 0 18 1 0 0 0x000003cf: 06 DW_LNS_negate_stmt 0x000003d0: 03 DW_LNS_advance_line (105) 0x000003d3: 82 address += 8, line += 0 0x0000000000000459 105 18 1 0 0 is_stmt 0x000003d4: 05 DW_LNS_set_column (4) 0x000003d6: 06 DW_LNS_negate_stmt 0x000003d7: 58 address += 5, line += 0 0x000000000000045e 105 4 1 0 0 0x000003d8: 03 DW_LNS_advance_line (0) 0x000003db: 2e address += 2, line += 0 0x0000000000000460 0 4 1 0 0 0x000003dc: 05 DW_LNS_set_column (7) 0x000003de: 06 DW_LNS_negate_stmt 0x000003df: 03 DW_LNS_advance_line (106) 0x000003e2: 2e address += 2, line += 0 0x0000000000000462 106 7 1 0 0 is_stmt 0x000003e3: 05 DW_LNS_set_column (16) 0x000003e5: 06 DW_LNS_negate_stmt 0x000003e6: 82 address += 8, line += 0 0x000000000000046a 106 16 1 0 0 0x000003e7: 05 DW_LNS_set_column (24) 0x000003e9: 06 DW_LNS_negate_stmt 0x000003ea: 57 address += 5, line += -1 0x000000000000046f 105 24 1 0 0 is_stmt 0x000003eb: 05 DW_LNS_set_column (18) 0x000003ed: 06 DW_LNS_negate_stmt 0x000003ee: 58 address += 5, line += 0 0x0000000000000474 105 18 1 0 0 0x000003ef: 03 DW_LNS_advance_line (0) 0x000003f2: 74 address += 7, line += 0 0x000000000000047b 0 18 1 0 0 0x000003f3: 05 DW_LNS_set_column (13) 0x000003f5: 06 DW_LNS_negate_stmt 0x000003f6: 03 DW_LNS_advance_line (112) 0x000003f9: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000003fa: d6 address += 14, line += 0 0x000000000000049a 112 13 1 0 0 is_stmt 0x000003fb: 05 DW_LNS_set_column (26) 0x000003fd: 06 DW_LNS_negate_stmt 0x000003fe: 2e address += 2, line += 0 0x000000000000049c 112 26 1 0 0 0x000003ff: 05 DW_LNS_set_column (35) 0x00000401: c8 address += 13, line += 0 0x00000000000004a9 112 35 1 0 0 0x00000402: 05 DW_LNS_set_column (13) 0x00000404: 20 address += 1, line += 0 0x00000000000004aa 112 13 1 0 0 0x00000405: 05 DW_LNS_set_column (30) 0x00000407: 06 DW_LNS_negate_stmt 0x00000408: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000409: 49 address += 4, line += -1 0x00000000000004bf 111 30 1 0 0 is_stmt 0x0000040a: 05 DW_LNS_set_column (24) 0x0000040c: 06 DW_LNS_negate_stmt 0x0000040d: 58 address += 5, line += 0 0x00000000000004c4 111 24 1 0 0 0x0000040e: 05 DW_LNS_set_column (10) 0x00000410: 58 address += 5, line += 0 0x00000000000004c9 111 10 1 0 0 0x00000411: 06 DW_LNS_negate_stmt 0x00000412: 5a address += 5, line += 2 0x00000000000004ce 113 10 1 0 0 is_stmt 0x00000413: 06 DW_LNS_negate_stmt 0x00000414: 03 DW_LNS_advance_line (0) 0x00000417: 74 address += 7, line += 0 0x00000000000004d5 0 10 1 0 0 0x00000418: 05 DW_LNS_set_column (16) 0x0000041a: 06 DW_LNS_negate_stmt 0x0000041b: 03 DW_LNS_advance_line (118) 0x0000041e: 2e address += 2, line += 0 0x00000000000004d7 118 16 1 0 0 is_stmt 0x0000041f: 05 DW_LNS_set_column (7) 0x00000421: 06 DW_LNS_negate_stmt 0x00000422: 58 address += 5, line += 0 0x00000000000004dc 118 7 1 0 0 0x00000423: 03 DW_LNS_advance_line (0) 0x00000426: 2e address += 2, line += 0 0x00000000000004de 0 7 1 0 0 0x00000427: 05 DW_LNS_set_column (10) 0x00000429: 06 DW_LNS_negate_stmt 0x0000042a: 03 DW_LNS_advance_line (119) 0x0000042d: 2e address += 2, line += 0 0x00000000000004e0 119 10 1 0 0 is_stmt 0x0000042e: 05 DW_LNS_set_column (18) 0x00000430: 06 DW_LNS_negate_stmt 0x00000431: 2e address += 2, line += 0 0x00000000000004e2 119 18 1 0 0 0x00000432: 05 DW_LNS_set_column (10) 0x00000434: 90 address += 9, line += 0 0x00000000000004eb 119 10 1 0 0 0x00000435: 05 DW_LNS_set_column (23) 0x00000437: 2e address += 2, line += 0 0x00000000000004ed 119 23 1 0 0 0x00000438: 05 DW_LNS_set_column (16) 0x0000043a: 06 DW_LNS_negate_stmt 0x0000043b: 57 address += 5, line += -1 0x00000000000004f2 118 16 1 0 0 is_stmt 0x0000043c: 05 DW_LNS_set_column (7) 0x0000043e: 06 DW_LNS_negate_stmt 0x0000043f: ac address += 11, line += 0 0x00000000000004fd 118 7 1 0 0 0x00000440: 05 DW_LNS_set_column (16) 0x00000442: 06 DW_LNS_negate_stmt 0x00000443: 6a address += 6, line += 4 0x0000000000000503 122 16 1 0 0 is_stmt 0x00000444: 06 DW_LNS_negate_stmt 0x00000445: 03 DW_LNS_advance_line (0) 0x00000448: 74 address += 7, line += 0 0x000000000000050a 0 16 1 0 0 0x00000449: 05 DW_LNS_set_column (22) 0x0000044b: 06 DW_LNS_negate_stmt 0x0000044c: 03 DW_LNS_advance_line (125) 0x0000044f: c8 address += 13, line += 0 0x0000000000000517 125 22 1 0 0 is_stmt 0x00000450: 06 DW_LNS_negate_stmt 0x00000451: 03 DW_LNS_advance_line (0) 0x00000454: 74 address += 7, line += 0 0x000000000000051e 0 22 1 0 0 0x00000455: 05 DW_LNS_set_column (27) 0x00000457: 06 DW_LNS_negate_stmt 0x00000458: 03 DW_LNS_advance_line (126) 0x0000045b: 2e address += 2, line += 0 0x0000000000000520 126 27 1 0 0 is_stmt 0x0000045c: 05 DW_LNS_set_column (13) 0x0000045e: 06 DW_LNS_negate_stmt 0x0000045f: 58 address += 5, line += 0 0x0000000000000525 126 13 1 0 0 0x00000460: 03 DW_LNS_advance_line (0) 0x00000463: 2e address += 2, line += 0 0x0000000000000527 0 13 1 0 0 0x00000464: 05 DW_LNS_set_column (16) 0x00000466: 06 DW_LNS_negate_stmt 0x00000467: 03 DW_LNS_advance_line (127) 0x0000046a: 2e address += 2, line += 0 0x0000000000000529 127 16 1 0 0 is_stmt 0x0000046b: 05 DW_LNS_set_column (27) 0x0000046d: 06 DW_LNS_negate_stmt 0x0000046e: 82 address += 8, line += 0 0x0000000000000531 127 27 1 0 0 0x0000046f: 05 DW_LNS_set_column (35) 0x00000471: 2e address += 2, line += 0 0x0000000000000533 127 35 1 0 0 0x00000472: 05 DW_LNS_set_column (27) 0x00000474: 90 address += 9, line += 0 0x000000000000053c 127 27 1 0 0 0x00000475: 05 DW_LNS_set_column (25) 0x00000477: 58 address += 5, line += 0 0x0000000000000541 127 25 1 0 0 0x00000478: 05 DW_LNS_set_column (27) 0x0000047a: 06 DW_LNS_negate_stmt 0x0000047b: 3b address += 3, line += -1 0x0000000000000544 126 27 1 0 0 is_stmt 0x0000047c: 05 DW_LNS_set_column (13) 0x0000047e: 06 DW_LNS_negate_stmt 0x0000047f: 58 address += 5, line += 0 0x0000000000000549 126 13 1 0 0 0x00000480: 05 DW_LNS_set_column (0) 0x00000482: 03 DW_LNS_advance_line (0) 0x00000485: 3c address += 3, line += 0 0x000000000000054c 0 0 1 0 0 0x00000486: 05 DW_LNS_set_column (13) 0x00000488: 06 DW_LNS_negate_stmt 0x00000489: 03 DW_LNS_advance_line (128) 0x0000048c: 58 address += 5, line += 0 0x0000000000000551 128 13 1 0 0 is_stmt 0x0000048d: 05 DW_LNS_set_column (22) 0x0000048f: 06 DW_LNS_negate_stmt 0x00000490: 82 address += 8, line += 0 0x0000000000000559 128 22 1 0 0 0x00000491: 05 DW_LNS_set_column (16) 0x00000493: 06 DW_LNS_negate_stmt 0x00000494: 5a address += 5, line += 2 0x000000000000055e 130 16 1 0 0 is_stmt 0x00000495: 05 DW_LNS_set_column (14) 0x00000497: 06 DW_LNS_negate_stmt 0x00000498: 82 address += 8, line += 0 0x0000000000000566 130 14 1 0 0 0x00000499: 05 DW_LNS_set_column (25) 0x0000049b: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000049c: 12 address += 0, line += 0 0x0000000000000577 130 25 1 0 0 0x0000049d: 05 DW_LNS_set_column (14) 0x0000049f: 58 address += 5, line += 0 0x000000000000057c 130 14 1 0 0 0x000004a0: 05 DW_LNS_set_column (11) 0x000004a2: 06 DW_LNS_negate_stmt 0x000004a3: 31 address += 2, line += 3 0x000000000000057e 133 11 1 0 0 is_stmt 0x000004a4: 05 DW_LNS_set_column (16) 0x000004a6: 03 DW_LNS_advance_line (122) 0x000004a8: 58 address += 5, line += 0 0x0000000000000583 122 16 1 0 0 is_stmt 0x000004a9: 05 DW_LNS_set_column (14) 0x000004ab: 06 DW_LNS_negate_stmt 0x000004ac: 58 address += 5, line += 0 0x0000000000000588 122 14 1 0 0 0x000004ad: 03 DW_LNS_advance_line (0) 0x000004b0: 4a address += 4, line += 0 0x000000000000058c 0 14 1 0 0 0x000004b1: 06 DW_LNS_negate_stmt 0x000004b2: 03 DW_LNS_advance_line (130) 0x000004b5: 20 address += 1, line += 0 0x000000000000058d 130 14 1 0 0 is_stmt 0x000004b6: 05 DW_LNS_set_column (11) 0x000004b8: 03 DW_LNS_advance_line (110) 0x000004ba: 20 address += 1, line += 0 0x000000000000058e 110 11 1 0 0 is_stmt 0x000004bb: 06 DW_LNS_negate_stmt 0x000004bc: 03 DW_LNS_advance_line (0) 0x000004bf: 74 address += 7, line += 0 0x0000000000000595 0 11 1 0 0 0x000004c0: 05 DW_LNS_set_column (10) 0x000004c2: 06 DW_LNS_negate_stmt 0x000004c3: 03 DW_LNS_advance_line (113) 0x000004c6: 66 address += 6, line += 0 0x000000000000059b 113 10 1 0 0 is_stmt 0x000004c7: 06 DW_LNS_negate_stmt 0x000004c8: 03 DW_LNS_advance_line (0) 0x000004cb: 74 address += 7, line += 0 0x00000000000005a2 0 10 1 0 0 0x000004cc: 05 DW_LNS_set_column (16) 0x000004ce: 06 DW_LNS_negate_stmt 0x000004cf: 03 DW_LNS_advance_line (118) 0x000004d2: 2e address += 2, line += 0 0x00000000000005a4 118 16 1 0 0 is_stmt 0x000004d3: 05 DW_LNS_set_column (7) 0x000004d5: 06 DW_LNS_negate_stmt 0x000004d6: 58 address += 5, line += 0 0x00000000000005a9 118 7 1 0 0 0x000004d7: 03 DW_LNS_advance_line (0) 0x000004da: 2e address += 2, line += 0 0x00000000000005ab 0 7 1 0 0 0x000004db: 05 DW_LNS_set_column (10) 0x000004dd: 06 DW_LNS_negate_stmt 0x000004de: 03 DW_LNS_advance_line (119) 0x000004e1: 2e address += 2, line += 0 0x00000000000005ad 119 10 1 0 0 is_stmt 0x000004e2: 05 DW_LNS_set_column (18) 0x000004e4: 06 DW_LNS_negate_stmt 0x000004e5: 2e address += 2, line += 0 0x00000000000005af 119 18 1 0 0 0x000004e6: 05 DW_LNS_set_column (10) 0x000004e8: 90 address += 9, line += 0 0x00000000000005b8 119 10 1 0 0 0x000004e9: 05 DW_LNS_set_column (23) 0x000004eb: 2e address += 2, line += 0 0x00000000000005ba 119 23 1 0 0 0x000004ec: 05 DW_LNS_set_column (16) 0x000004ee: 06 DW_LNS_negate_stmt 0x000004ef: 57 address += 5, line += -1 0x00000000000005bf 118 16 1 0 0 is_stmt 0x000004f0: 05 DW_LNS_set_column (0) 0x000004f2: 06 DW_LNS_negate_stmt 0x000004f3: 03 DW_LNS_advance_line (0) 0x000004f6: 74 address += 7, line += 0 0x00000000000005c6 0 0 1 0 0 0x000004f7: 05 DW_LNS_set_column (7) 0x000004f9: 03 DW_LNS_advance_line (118) 0x000004fc: 4a address += 4, line += 0 0x00000000000005ca 118 7 1 0 0 0x000004fd: 05 DW_LNS_set_column (16) 0x000004ff: 06 DW_LNS_negate_stmt 0x00000500: 6a address += 6, line += 4 0x00000000000005d0 122 16 1 0 0 is_stmt 0x00000501: 05 DW_LNS_set_column (14) 0x00000503: 06 DW_LNS_negate_stmt 0x00000504: 58 address += 5, line += 0 0x00000000000005d5 122 14 1 0 0 0x00000505: 03 DW_LNS_advance_line (0) 0x00000508: 2e address += 2, line += 0 0x00000000000005d7 0 14 1 0 0 0x00000509: 05 DW_LNS_set_column (22) 0x0000050b: 06 DW_LNS_negate_stmt 0x0000050c: 03 DW_LNS_advance_line (125) 0x0000050f: 74 address += 7, line += 0 0x00000000000005de 125 22 1 0 0 is_stmt 0x00000510: 06 DW_LNS_negate_stmt 0x00000511: 03 DW_LNS_advance_line (0) 0x00000514: 90 address += 9, line += 0 0x00000000000005e7 0 22 1 0 0 0x00000515: 05 DW_LNS_set_column (27) 0x00000517: 06 DW_LNS_negate_stmt 0x00000518: 03 DW_LNS_advance_line (126) 0x0000051b: 66 address += 6, line += 0 0x00000000000005ed 126 27 1 0 0 is_stmt 0x0000051c: 05 DW_LNS_set_column (13) 0x0000051e: 06 DW_LNS_negate_stmt 0x0000051f: 58 address += 5, line += 0 0x00000000000005f2 126 13 1 0 0 0x00000520: 03 DW_LNS_advance_line (0) 0x00000523: 2e address += 2, line += 0 0x00000000000005f4 0 13 1 0 0 0x00000524: 05 DW_LNS_set_column (16) 0x00000526: 06 DW_LNS_negate_stmt 0x00000527: 03 DW_LNS_advance_line (127) 0x0000052a: 2e address += 2, line += 0 0x00000000000005f6 127 16 1 0 0 is_stmt 0x0000052b: 05 DW_LNS_set_column (27) 0x0000052d: 06 DW_LNS_negate_stmt 0x0000052e: 82 address += 8, line += 0 0x00000000000005fe 127 27 1 0 0 0x0000052f: 05 DW_LNS_set_column (35) 0x00000531: 2e address += 2, line += 0 0x0000000000000600 127 35 1 0 0 0x00000532: 05 DW_LNS_set_column (27) 0x00000534: 90 address += 9, line += 0 0x0000000000000609 127 27 1 0 0 0x00000535: 05 DW_LNS_set_column (25) 0x00000537: 58 address += 5, line += 0 0x000000000000060e 127 25 1 0 0 0x00000538: 05 DW_LNS_set_column (27) 0x0000053a: 06 DW_LNS_negate_stmt 0x0000053b: 3b address += 3, line += -1 0x0000000000000611 126 27 1 0 0 is_stmt 0x0000053c: 05 DW_LNS_set_column (13) 0x0000053e: 06 DW_LNS_negate_stmt 0x0000053f: 58 address += 5, line += 0 0x0000000000000616 126 13 1 0 0 0x00000540: 05 DW_LNS_set_column (0) 0x00000542: 03 DW_LNS_advance_line (0) 0x00000545: 3c address += 3, line += 0 0x0000000000000619 0 0 1 0 0 0x00000546: 05 DW_LNS_set_column (13) 0x00000548: 06 DW_LNS_negate_stmt 0x00000549: 03 DW_LNS_advance_line (128) 0x0000054c: 58 address += 5, line += 0 0x000000000000061e 128 13 1 0 0 is_stmt 0x0000054d: 05 DW_LNS_set_column (22) 0x0000054f: 06 DW_LNS_negate_stmt 0x00000550: 82 address += 8, line += 0 0x0000000000000626 128 22 1 0 0 0x00000551: 05 DW_LNS_set_column (16) 0x00000553: 06 DW_LNS_negate_stmt 0x00000554: 5a address += 5, line += 2 0x000000000000062b 130 16 1 0 0 is_stmt 0x00000555: 05 DW_LNS_set_column (14) 0x00000557: 06 DW_LNS_negate_stmt 0x00000558: 82 address += 8, line += 0 0x0000000000000633 130 14 1 0 0 0x00000559: 05 DW_LNS_set_column (25) 0x0000055b: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000055c: 12 address += 0, line += 0 0x0000000000000644 130 25 1 0 0 0x0000055d: 05 DW_LNS_set_column (14) 0x0000055f: 58 address += 5, line += 0 0x0000000000000649 130 14 1 0 0 0x00000560: 05 DW_LNS_set_column (11) 0x00000562: 06 DW_LNS_negate_stmt 0x00000563: 31 address += 2, line += 3 0x000000000000064b 133 11 1 0 0 is_stmt 0x00000564: 05 DW_LNS_set_column (16) 0x00000566: 03 DW_LNS_advance_line (122) 0x00000568: 58 address += 5, line += 0 0x0000000000000650 122 16 1 0 0 is_stmt 0x00000569: 05 DW_LNS_set_column (14) 0x0000056b: 06 DW_LNS_negate_stmt 0x0000056c: 58 address += 5, line += 0 0x0000000000000655 122 14 1 0 0 0x0000056d: 03 DW_LNS_advance_line (0) 0x00000570: 4a address += 4, line += 0 0x0000000000000659 0 14 1 0 0 0x00000571: 06 DW_LNS_negate_stmt 0x00000572: 03 DW_LNS_advance_line (130) 0x00000575: 20 address += 1, line += 0 0x000000000000065a 130 14 1 0 0 is_stmt 0x00000576: 05 DW_LNS_set_column (11) 0x00000578: 03 DW_LNS_advance_line (110) 0x0000057a: 20 address += 1, line += 0 0x000000000000065b 110 11 1 0 0 is_stmt 0x0000057b: 05 DW_LNS_set_column (4) 0x0000057d: 03 DW_LNS_advance_line (138) 0x0000057f: 66 address += 6, line += 0 0x0000000000000661 138 4 1 0 0 is_stmt 0x00000580: 83 address += 8, line += 1 0x0000000000000669 139 4 1 0 0 is_stmt 0x00000581: 06 DW_LNS_negate_stmt 0x00000582: 03 DW_LNS_advance_line (0) 0x00000585: 82 address += 8, line += 0 0x0000000000000671 0 4 1 0 0 0x00000586: 06 DW_LNS_negate_stmt 0x00000587: 03 DW_LNS_advance_line (141) 0x0000058a: 82 address += 8, line += 0 0x0000000000000679 141 4 1 0 0 is_stmt 0x0000058b: 06 DW_LNS_negate_stmt 0x0000058c: 03 DW_LNS_advance_line (0) 0x0000058f: 74 address += 7, line += 0 0x0000000000000680 0 4 1 0 0 0x00000590: 05 DW_LNS_set_column (20) 0x00000592: 06 DW_LNS_negate_stmt 0x00000593: 03 DW_LNS_advance_line (142) 0x00000596: 4a address += 4, line += 0 0x0000000000000684 142 20 1 0 0 is_stmt 0x00000597: be address += 12, line += 4 0x0000000000000690 146 20 1 0 0 is_stmt 0x00000598: 05 DW_LNS_set_column (7) 0x0000059a: 75 address += 7, line += 1 0x0000000000000697 147 7 1 0 0 is_stmt 0x0000059b: 05 DW_LNS_set_column (11) 0x0000059d: 7e address += 8, line += -4 0x000000000000069f 143 11 1 0 0 is_stmt 0x0000059e: 05 DW_LNS_set_column (20) 0x000005a0: 06 DW_LNS_negate_stmt 0x000005a1: 4a address += 4, line += 0 0x00000000000006a3 143 20 1 0 0 0x000005a2: 05 DW_LNS_set_column (11) 0x000005a4: 58 address += 5, line += 0 0x00000000000006a8 143 11 1 0 0 0x000005a5: 03 DW_LNS_advance_line (0) 0x000005a8: 3c address += 3, line += 0 0x00000000000006ab 0 11 1 0 0 0x000005a9: 05 DW_LNS_set_column (4) 0x000005ab: 06 DW_LNS_negate_stmt 0x000005ac: 03 DW_LNS_advance_line (141) 0x000005af: 4a address += 4, line += 0 0x00000000000006af 141 4 1 0 0 is_stmt 0x000005b0: 03 DW_LNS_advance_line (159) 0x000005b2: 66 address += 6, line += 0 0x00000000000006b5 159 4 1 0 0 is_stmt 0x000005b3: 06 DW_LNS_negate_stmt 0x000005b4: 03 DW_LNS_advance_line (0) 0x000005b7: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000005b8: ba address += 12, line += 0 0x00000000000006d2 0 4 1 0 0 0x000005b9: 05 DW_LNS_set_column (1) 0x000005bb: 06 DW_LNS_negate_stmt 0x000005bc: 03 DW_LNS_advance_line (161) 0x000005bf: 20 address += 1, line += 0 0x00000000000006d3 161 1 1 0 0 is_stmt 0x000005c0: 02 DW_LNS_advance_pc (14) 0x000005c2: 00 DW_LNE_end_sequence 0x00000000000006e1 161 1 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)" 0x00000069: "/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp" 0x000000a9: "/usr/local/google/home/azakai/Dev/2-binaryen" 0x000000d6: "i" 0x000000d8: "int" 0x000000dc: "n" 0x000000de: "next" 0x000000e3: "worker_args" 0x000000ef: "std" 0x000000f3: "decltype(nullptr)" 0x00000105: "nullptr_t" 0x0000010f: "free" 0x00000114: "_ZL8fannkuchi" 0x00000122: "fannkuch" 0x0000012b: "showmax" 0x00000133: "args" 0x00000138: "targs" 0x0000013e: "perm1" 0x00000144: "count" 0x0000014a: "r" 0x0000014c: "maxflips" 0x00000155: "flips" 0x0000015b: "cleanup" 0x00000163: "p0" 0x00000166: "_Z15fannkuch_workerPv" 0x0000017c: "fannkuch_worker" 0x0000018c: "main" 0x00000191: "_arg" 0x00000196: "perm" 0x0000019b: "k" 0x0000019d: "j" 0x0000019f: "tmp" 0x000001a3: "argc" 0x000001a8: "argv" 0x000001ad: "char" .debug_ranges contents: 00000000 00000185 000001c3 00000000 000001ed 000001f6 00000000 0000030e 0000034c 00000000 00000376 0000037f 00000000 00000028 00000517 0000055e 00000028 000005de 0000062b 00000028 00000040 00000006 0000039d 00000040 0000039f 000006e1 00000040 DWARF debug info ================ Contains section .debug_info (851 bytes) Contains section .debug_loc (1073 bytes) Contains section .debug_ranges (88 bytes) Contains section .debug_abbrev (333 bytes) Contains section .debug_line (2826 bytes) Contains section .debug_str (434 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [3] DW_TAG_structure_type DW_CHILDREN_yes DW_AT_calling_convention DW_FORM_data1 DW_AT_name DW_FORM_strp DW_AT_byte_size DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [4] DW_TAG_member DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_data_member_location DW_FORM_data1 [5] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [6] DW_TAG_namespace DW_CHILDREN_yes DW_AT_name DW_FORM_strp [7] DW_TAG_typedef DW_CHILDREN_no DW_AT_type DW_FORM_ref4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [8] DW_TAG_unspecified_type DW_CHILDREN_no DW_AT_name DW_FORM_strp [9] DW_TAG_imported_declaration DW_CHILDREN_no DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_import DW_FORM_ref4 [10] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [11] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [12] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [13] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [14] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_ranges DW_FORM_sec_offset [15] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [16] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr [17] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_declaration DW_FORM_flag_present DW_AT_external DW_FORM_flag_present [18] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [19] DW_TAG_pointer_type DW_CHILDREN_no [20] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_inline DW_FORM_data1 [21] DW_TAG_label DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [22] DW_TAG_lexical_block DW_CHILDREN_yes [23] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [24] DW_TAG_inlined_subroutine DW_CHILDREN_yes DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_call_file DW_FORM_data1 DW_AT_call_line DW_FORM_data1 DW_AT_call_column DW_FORM_data1 [25] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [26] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_abstract_origin DW_FORM_ref4 [27] DW_TAG_variable DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [28] DW_TAG_label DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr .debug_info contents: 0x00000000: Compile Unit: length = 0x0000034f version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000353) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a9] = "/usr/local/google/home/azakai/Dev/2-binaryen") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000040 [0x00000006, 0x000003a3) [0x000003a5, 0x000006ab)) 0x00000026: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x002b => {0x0000002b} "worker_args") 0x0000002b: DW_TAG_structure_type [3] * DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e3] = "worker_args") DW_AT_byte_size [DW_FORM_data1] (0x0c) DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (20) 0x00000034: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x00) 0x00000040: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x04) 0x0000004c: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000de] = "next") DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (22) DW_AT_data_member_location [DW_FORM_data1] (0x08) 0x00000058: NULL 0x00000059: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d8] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000060: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000065: DW_TAG_namespace [6] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ef] = "std") 0x0000006a: DW_TAG_typedef [7] DW_AT_type [DW_FORM_ref4] (cu + 0x0076 => {0x00000076} "decltype(nullptr)") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000105] = "nullptr_t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr") DW_AT_decl_line [DW_FORM_data1] (57) 0x00000075: NULL 0x00000076: DW_TAG_unspecified_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000f3] = "decltype(nullptr)") 0x0000007b: DW_TAG_imported_declaration [9] DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h") DW_AT_decl_line [DW_FORM_data1] (52) DW_AT_import [DW_FORM_ref4] (cu + 0x006a => {0x0000006a}) 0x00000082: DW_TAG_subprogram [10] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006) DW_AT_high_pc [DW_FORM_data4] (0x0000039d) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000166] = "_Z15fannkuch_workerPv") DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017c] = "fannkuch_worker") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000009e: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "_arg") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x01a7 => {0x000001a7} "*") 0x000000a9: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000133] = "args") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (28) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000000b4: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000006): [0x00000000, 0x0000004e): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000c3: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000001d: [0xffffffff, 0x0000002b): [0x00000000, 0x00000029): DW_OP_consts +0, DW_OP_stack_value [0x0000003f, 0x00000044): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000000d5, 0x000000de): DW_OP_consts +1, DW_OP_stack_value [0x0000011a, 0x00000124): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000162, 0x0000016f): DW_OP_consts +0, DW_OP_stack_value [0x0000024f, 0x0000025a): DW_OP_consts +0, DW_OP_stack_value [0x00000260, 0x00000269): DW_OP_consts +1, DW_OP_stack_value [0x000002a5, 0x000002af): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x000002ed, 0x000002fa): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000d2: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000a5: [0xffffffff, 0x00000032): [0x00000000, 0x00000022): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000e1: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000c3: [0xffffffff, 0x0000003b): [0x00000000, 0x00000019): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000f0: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000e1: [0xffffffff, 0x00000041): [0x00000000, 0x00000013): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000196] = "perm") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000ff: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000ff: [0xffffffff, 0x00000047): [0x00000000, 0x0000000d): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x0000010e: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000011d: [0xffffffff, 0x000001f6): [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value [0x0000018b, 0x00000190): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000011d: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000149: [0xffffffff, 0x000000e7): [0x00000000, 0x00000013): DW_OP_consts +0, DW_OP_stack_value [0x00000019, 0x00000022): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value [0x00000087, 0x0000008f): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000193, 0x0000019e): DW_OP_consts +0, DW_OP_stack_value [0x000001a4, 0x000001ad): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value [0x00000212, 0x0000021a): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000012c: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001ab: [0xffffffff, 0x000000f6): [0x00000000, 0x00000004): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value [0x0000018b, 0x0000018f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019b] = "k") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000013b: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001d7: [0xffffffff, 0x00000110): [0x00000000, 0x00000004): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000003c, 0x0000003f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000018b, 0x0000018f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000001c7, 0x000001ca): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019d] = "j") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000014a: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000021f: [0xffffffff, 0x00000125): [0x00000000, 0x0000002a): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value [0x0000003b, 0x00000051): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000018b, 0x000001b5): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value [0x000001c6, 0x000001dc): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019f] = "tmp") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000159: DW_TAG_lexical_block [14] * DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000193, 0x000001d1) [0x000001fb, 0x00000204) [0x0000031e, 0x0000035c) [0x00000386, 0x0000038f)) 0x0000015e: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000163] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (74) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000169: NULL 0x0000016a: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000039) 0x0000016f: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000003f) 0x00000174: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000045) 0x00000179: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000000ef) 0x0000017e: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000398) 0x00000187: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000039c) 0x00000190: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x00000000000003a0) 0x00000199: NULL 0x0000019a: DW_TAG_subprogram [17] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "free") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h") DW_AT_decl_line [DW_FORM_data1] (41) DW_AT_declaration [DW_FORM_flag_present] (true) DW_AT_external [DW_FORM_flag_present] (true) 0x000001a1: DW_TAG_formal_parameter [18] DW_AT_type [DW_FORM_ref4] (cu + 0x01a7 => {0x000001a7} "*") 0x000001a6: NULL 0x000001a7: DW_TAG_pointer_type [19] 0x000001a8: DW_TAG_subprogram [20] * DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000114] = "_ZL8fannkuchi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000122] = "fannkuch") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_inline [DW_FORM_data1] (DW_INL_inlined) 0x000001b8: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001c3: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000012b] = "showmax") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (90) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001ce: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000133] = "args") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001d9: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001e4: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000138] = "targs") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001ef: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000001fa: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x00000205: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000210: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000021b: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000226: DW_TAG_label [21] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000015b] = "cleanup") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (137) 0x0000022d: DW_TAG_lexical_block [22] * 0x0000022e: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000163] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (125) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000239: NULL 0x0000023a: NULL 0x0000023b: DW_TAG_subprogram [23] * DW_AT_low_pc [DW_FORM_addr] (0x00000000000003a5) DW_AT_high_pc [DW_FORM_data4] (0x00000306) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000018c] = "main") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000253: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001a3] = "argc") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000025e: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001a8] = "argv") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0341 => {0x00000341} "char**") 0x00000269: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000267: [0xffffffff, 0x000003d7): [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (153) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000278: DW_TAG_inlined_subroutine [24] * DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01a8 => {0x000001a8} "_ZL8fannkuchi") DW_AT_low_pc [DW_FORM_addr] (0x00000000000003ec) DW_AT_high_pc [DW_FORM_data4] (0x0000029e) DW_AT_call_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_call_line [DW_FORM_data1] (159) DW_AT_call_column [DW_FORM_data1] (0x29) 0x00000288: DW_TAG_formal_parameter [25] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01b8 => {0x000001b8} "n") 0x0000028d: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000285: [0xffffffff, 0x000003ea): [0x00000000, 0x00000009): DW_OP_consts +30, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c3 => {0x000001c3} "showmax") 0x00000296: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002a2: [0xffffffff, 0x000003ea): [0x00000000, 0x00000009): DW_OP_lit0, DW_OP_stack_value [0x00000286, 0x0000029e): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ce => {0x000001ce} "args") 0x0000029f: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002cc: [0xffffffff, 0x000003ea): [0x00000000, 0x00000009): DW_OP_consts +0, DW_OP_stack_value [0x0000003e, 0x00000043): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000049, 0x00000069): DW_OP_consts +0, DW_OP_stack_value [0x0000007f, 0x00000084): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x0000009d, 0x000000a1): DW_OP_consts +0, DW_OP_stack_value [0x000000c8, 0x000000cd): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000115, 0x00000125): DW_OP_consts +0, DW_OP_stack_value [0x00000198, 0x000001a6): DW_OP_consts +0, DW_OP_stack_value [0x000001db, 0x000001ef): DW_OP_consts +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d9 => {0x000001d9} "i") 0x000002a8: DW_TAG_variable [27] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01e4 => {0x000001e4} "targs") 0x000002ad: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000354: [0xffffffff, 0x0000043e): [0x00000000, 0x00000015): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ef => {0x000001ef} "perm1") 0x000002b6: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000372: [0xffffffff, 0x00000444): [0x00000000, 0x0000000f): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01fa => {0x000001fa} "count") 0x000002bf: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000390: [0xffffffff, 0x0000056d): [0x00000000, 0x00000007): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value [0x000000ca, 0x000000d1): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0205 => {0x00000205} "r") 0x000002c8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003e8: [0xffffffff, 0x00000652): [0x00000000, 0x0000000b): DW_OP_consts +0, DW_OP_stack_value [0x0000002e, 0x00000036): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0210 => {0x00000210} "maxflips") 0x000002d1: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000413: [0xffffffff, 0x00000669): [0x00000000, 0x0000001f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x021b => {0x0000021b} "flips") 0x000002da: DW_TAG_label [28] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0226 => {0x00000226} "cleanup") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000646) 0x000002e3: DW_TAG_lexical_block [14] * DW_AT_ranges [DW_FORM_sec_offset] (0x00000028 [0x000004ff, 0x00000546) [0x000005c3, 0x00000610)) 0x000002e8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003bc: [0xffffffff, 0x00000506): [0x00000000, 0x00000009): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value [0x000000c6, 0x000000d3): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022e => {0x0000022e} "p0") 0x000002f1: NULL 0x000002f2: NULL 0x000002f3: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003d5) 0x000002f8: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003e2) 0x000002fd: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000408) 0x00000302: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000043c) 0x00000307: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000442) 0x0000030c: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000004aa) 0x00000311: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000004bc) 0x00000316: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000586) 0x0000031b: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000064a) 0x00000324: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000064e) 0x0000032d: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000667) 0x00000332: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000674) 0x0000033b: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000069f) 0x00000340: NULL 0x00000341: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0346 => {0x00000346} "char*") 0x00000346: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x034b => {0x0000034b} "char") 0x0000034b: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001ad] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x00000352: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000006): [0x00000000, 0x0000004e): DW_OP_consts +0, DW_OP_stack_value 0x0000001d: [0xffffffff, 0x0000002b): [0x00000000, 0x00000029): DW_OP_consts +0, DW_OP_stack_value [0x0000003f, 0x00000044): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000000d5, 0x000000de): DW_OP_consts +1, DW_OP_stack_value [0x0000011a, 0x00000124): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000162, 0x0000016f): DW_OP_consts +0, DW_OP_stack_value [0x0000024f, 0x0000025a): DW_OP_consts +0, DW_OP_stack_value [0x00000260, 0x00000269): DW_OP_consts +1, DW_OP_stack_value [0x000002a5, 0x000002af): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x000002ed, 0x000002fa): DW_OP_consts +0, DW_OP_stack_value 0x000000a5: [0xffffffff, 0x00000032): [0x00000000, 0x00000022): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x000000c3: [0xffffffff, 0x0000003b): [0x00000000, 0x00000019): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x000000e1: [0xffffffff, 0x00000041): [0x00000000, 0x00000013): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x000000ff: [0xffffffff, 0x00000047): [0x00000000, 0x0000000d): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x0000011d: [0xffffffff, 0x000001f6): [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value [0x0000018b, 0x00000190): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x00000149: [0xffffffff, 0x000000e7): [0x00000000, 0x00000013): DW_OP_consts +0, DW_OP_stack_value [0x00000019, 0x00000022): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value [0x00000087, 0x0000008f): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000193, 0x0000019e): DW_OP_consts +0, DW_OP_stack_value [0x000001a4, 0x000001ad): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value [0x00000212, 0x0000021a): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x000001ab: [0xffffffff, 0x000000f6): [0x00000000, 0x00000004): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value [0x0000018b, 0x0000018f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value 0x000001d7: [0xffffffff, 0x00000110): [0x00000000, 0x00000004): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000003c, 0x0000003f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000018b, 0x0000018f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000001c7, 0x000001ca): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x0000021f: [0xffffffff, 0x00000125): [0x00000000, 0x0000002a): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value [0x0000003b, 0x00000051): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000018b, 0x000001b5): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value [0x000001c6, 0x000001dc): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000267: [0xffffffff, 0x000003d7): [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x00000285: [0xffffffff, 0x000003ea): [0x00000000, 0x00000009): DW_OP_consts +30, DW_OP_stack_value 0x000002a2: [0xffffffff, 0x000003ea): [0x00000000, 0x00000009): DW_OP_lit0, DW_OP_stack_value [0x00000286, 0x0000029e): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000002cc: [0xffffffff, 0x000003ea): [0x00000000, 0x00000009): DW_OP_consts +0, DW_OP_stack_value [0x0000003e, 0x00000043): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000049, 0x00000069): DW_OP_consts +0, DW_OP_stack_value [0x0000007f, 0x00000084): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x0000009d, 0x000000a1): DW_OP_consts +0, DW_OP_stack_value [0x000000c8, 0x000000cd): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000115, 0x00000125): DW_OP_consts +0, DW_OP_stack_value [0x00000198, 0x000001a6): DW_OP_consts +0, DW_OP_stack_value [0x000001db, 0x000001ef): DW_OP_consts +0, DW_OP_stack_value 0x00000354: [0xffffffff, 0x0000043e): [0x00000000, 0x00000015): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000372: [0xffffffff, 0x00000444): [0x00000000, 0x0000000f): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x00000390: [0xffffffff, 0x0000056d): [0x00000000, 0x00000007): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value [0x000000ca, 0x000000d1): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000003bc: [0xffffffff, 0x00000506): [0x00000000, 0x00000009): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value [0x000000c6, 0x000000d3): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value 0x000003e8: [0xffffffff, 0x00000652): [0x00000000, 0x0000000b): DW_OP_consts +0, DW_OP_stack_value [0x0000002e, 0x00000036): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x00000413: [0xffffffff, 0x00000669): [0x00000000, 0x0000001f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000b06 version: 4 prologue_length: 0x000000dd min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 include_directories[ 1] = "/usr/local/google/home/azakai/Dev" file_names[ 1]: name: "emscripten/tests/fannkuch.cpp" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 2]: name: "emscripten/system/include/libcxx/__nullptr" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 3]: name: "emscripten/system/include/libcxx/stddef.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 4]: name: "emscripten/system/include/libc/stdlib.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 0x000000e7: 00 DW_LNE_set_address (0x0000000000000006) 0x000000ee: 03 DW_LNS_advance_line (27) 0x000000f0: 01 DW_LNS_copy 0x0000000000000006 27 0 1 0 0 is_stmt 0x000000f1: 00 DW_LNE_set_address (0x000000000000002b) 0x000000f8: 03 DW_LNS_advance_line (33) 0x000000fa: 05 DW_LNS_set_column (14) 0x000000fc: 0a DW_LNS_set_prologue_end 0x000000fd: 01 DW_LNS_copy 0x000000000000002b 33 14 1 0 0 is_stmt prologue_end 0x000000fe: 00 DW_LNE_set_address (0x0000000000000034) 0x00000105: 03 DW_LNS_advance_line (34) 0x00000107: 05 DW_LNS_set_column (27) 0x00000109: 01 DW_LNS_copy 0x0000000000000034 34 27 1 0 0 is_stmt 0x0000010a: 00 DW_LNE_set_address (0x0000000000000035) 0x00000111: 05 DW_LNS_set_column (18) 0x00000113: 06 DW_LNS_negate_stmt 0x00000114: 01 DW_LNS_copy 0x0000000000000035 34 18 1 0 0 0x00000115: 00 DW_LNE_set_address (0x000000000000003b) 0x0000011c: 03 DW_LNS_advance_line (35) 0x0000011e: 05 DW_LNS_set_column (17) 0x00000120: 06 DW_LNS_negate_stmt 0x00000121: 01 DW_LNS_copy 0x000000000000003b 35 17 1 0 0 is_stmt 0x00000122: 00 DW_LNE_set_address (0x0000000000000041) 0x00000129: 03 DW_LNS_advance_line (36) 0x0000012b: 05 DW_LNS_set_column (18) 0x0000012d: 01 DW_LNS_copy 0x0000000000000041 36 18 1 0 0 is_stmt 0x0000012e: 00 DW_LNE_set_address (0x000000000000004d) 0x00000135: 03 DW_LNS_advance_line (37) 0x00000137: 01 DW_LNS_copy 0x000000000000004d 37 18 1 0 0 is_stmt 0x00000138: 00 DW_LNE_set_address (0x0000000000000052) 0x0000013f: 05 DW_LNS_set_column (4) 0x00000141: 06 DW_LNS_negate_stmt 0x00000142: 01 DW_LNS_copy 0x0000000000000052 37 4 1 0 0 0x00000143: 00 DW_LNE_set_address (0x0000000000000056) 0x0000014a: 03 DW_LNS_advance_line (38) 0x0000014c: 05 DW_LNS_set_column (7) 0x0000014e: 06 DW_LNS_negate_stmt 0x0000014f: 01 DW_LNS_copy 0x0000000000000056 38 7 1 0 0 is_stmt 0x00000150: 00 DW_LNE_set_address (0x000000000000005e) 0x00000157: 05 DW_LNS_set_column (16) 0x00000159: 06 DW_LNS_negate_stmt 0x0000015a: 01 DW_LNS_copy 0x000000000000005e 38 16 1 0 0 0x0000015b: 00 DW_LNE_set_address (0x0000000000000063) 0x00000162: 03 DW_LNS_advance_line (37) 0x00000164: 05 DW_LNS_set_column (24) 0x00000166: 06 DW_LNS_negate_stmt 0x00000167: 01 DW_LNS_copy 0x0000000000000063 37 24 1 0 0 is_stmt 0x00000168: 00 DW_LNE_set_address (0x0000000000000068) 0x0000016f: 05 DW_LNS_set_column (18) 0x00000171: 06 DW_LNS_negate_stmt 0x00000172: 01 DW_LNS_copy 0x0000000000000068 37 18 1 0 0 0x00000173: 00 DW_LNE_set_address (0x000000000000006d) 0x0000017a: 05 DW_LNS_set_column (4) 0x0000017c: 01 DW_LNS_copy 0x000000000000006d 37 4 1 0 0 0x0000017d: 00 DW_LNE_set_address (0x0000000000000070) 0x00000184: 03 DW_LNS_advance_line (39) 0x00000186: 06 DW_LNS_negate_stmt 0x00000187: 01 DW_LNS_copy 0x0000000000000070 39 4 1 0 0 is_stmt 0x00000188: 00 DW_LNE_set_address (0x0000000000000072) 0x0000018f: 05 DW_LNS_set_column (16) 0x00000191: 06 DW_LNS_negate_stmt 0x00000192: 01 DW_LNS_copy 0x0000000000000072 39 16 1 0 0 0x00000193: 00 DW_LNE_set_address (0x000000000000007b) 0x0000019a: 05 DW_LNS_set_column (4) 0x0000019c: 01 DW_LNS_copy 0x000000000000007b 39 4 1 0 0 0x0000019d: 00 DW_LNE_set_address (0x000000000000007d) 0x000001a4: 05 DW_LNS_set_column (23) 0x000001a6: 01 DW_LNS_copy 0x000000000000007d 39 23 1 0 0 0x000001a7: 00 DW_LNE_set_address (0x0000000000000082) 0x000001ae: 05 DW_LNS_set_column (19) 0x000001b0: 01 DW_LNS_copy 0x0000000000000082 39 19 1 0 0 0x000001b1: 00 DW_LNE_set_address (0x0000000000000087) 0x000001b8: 03 DW_LNS_advance_line (40) 0x000001ba: 05 DW_LNS_set_column (4) 0x000001bc: 06 DW_LNS_negate_stmt 0x000001bd: 01 DW_LNS_copy 0x0000000000000087 40 4 1 0 0 is_stmt 0x000001be: 00 DW_LNE_set_address (0x000000000000008f) 0x000001c5: 05 DW_LNS_set_column (17) 0x000001c7: 06 DW_LNS_negate_stmt 0x000001c8: 01 DW_LNS_copy 0x000000000000008f 40 17 1 0 0 0x000001c9: 00 DW_LNE_set_address (0x000000000000009a) 0x000001d0: 03 DW_LNS_advance_line (37) 0x000001d2: 05 DW_LNS_set_column (18) 0x000001d4: 06 DW_LNS_negate_stmt 0x000001d5: 01 DW_LNS_copy 0x000000000000009a 37 18 1 0 0 is_stmt 0x000001d6: 00 DW_LNE_set_address (0x000000000000009f) 0x000001dd: 03 DW_LNS_advance_line (43) 0x000001df: 05 DW_LNS_set_column (4) 0x000001e1: 01 DW_LNS_copy 0x000000000000009f 43 4 1 0 0 is_stmt 0x000001e2: 00 DW_LNE_set_address (0x00000000000000a5) 0x000001e9: 03 DW_LNS_advance_line (44) 0x000001eb: 05 DW_LNS_set_column (16) 0x000001ed: 01 DW_LNS_copy 0x00000000000000a5 44 16 1 0 0 is_stmt 0x000001ee: 00 DW_LNE_set_address (0x00000000000000ae) 0x000001f5: 03 DW_LNS_advance_line (45) 0x000001f7: 05 DW_LNS_set_column (10) 0x000001f9: 01 DW_LNS_copy 0x00000000000000ae 45 10 1 0 0 is_stmt 0x000001fa: 00 DW_LNE_set_address (0x00000000000000b0) 0x00000201: 05 DW_LNS_set_column (18) 0x00000203: 06 DW_LNS_negate_stmt 0x00000204: 01 DW_LNS_copy 0x00000000000000b0 45 18 1 0 0 0x00000205: 00 DW_LNE_set_address (0x00000000000000b9) 0x0000020c: 05 DW_LNS_set_column (10) 0x0000020e: 01 DW_LNS_copy 0x00000000000000b9 45 10 1 0 0 0x0000020f: 00 DW_LNE_set_address (0x00000000000000bb) 0x00000216: 05 DW_LNS_set_column (23) 0x00000218: 01 DW_LNS_copy 0x00000000000000bb 45 23 1 0 0 0x00000219: 00 DW_LNE_set_address (0x00000000000000c0) 0x00000220: 03 DW_LNS_advance_line (44) 0x00000222: 05 DW_LNS_set_column (16) 0x00000224: 06 DW_LNS_negate_stmt 0x00000225: 01 DW_LNS_copy 0x00000000000000c0 44 16 1 0 0 is_stmt 0x00000226: 00 DW_LNE_set_address (0x00000000000000cb) 0x0000022d: 05 DW_LNS_set_column (7) 0x0000022f: 06 DW_LNS_negate_stmt 0x00000230: 01 DW_LNS_copy 0x00000000000000cb 44 7 1 0 0 0x00000231: 00 DW_LNE_set_address (0x00000000000000d1) 0x00000238: 03 DW_LNS_advance_line (46) 0x0000023a: 05 DW_LNS_set_column (11) 0x0000023c: 06 DW_LNS_negate_stmt 0x0000023d: 01 DW_LNS_copy 0x00000000000000d1 46 11 1 0 0 is_stmt 0x0000023e: 00 DW_LNE_set_address (0x00000000000000dd) 0x00000245: 05 DW_LNS_set_column (28) 0x00000247: 06 DW_LNS_negate_stmt 0x00000248: 01 DW_LNS_copy 0x00000000000000dd 46 28 1 0 0 0x00000249: 00 DW_LNE_set_address (0x00000000000000e2) 0x00000250: 05 DW_LNS_set_column (41) 0x00000252: 01 DW_LNS_copy 0x00000000000000e2 46 41 1 0 0 0x00000253: 00 DW_LNE_set_address (0x00000000000000e7) 0x0000025a: 03 DW_LNS_advance_line (48) 0x0000025c: 05 DW_LNS_set_column (21) 0x0000025e: 06 DW_LNS_negate_stmt 0x0000025f: 01 DW_LNS_copy 0x00000000000000e7 48 21 1 0 0 is_stmt 0x00000260: 00 DW_LNE_set_address (0x00000000000000ef) 0x00000267: 03 DW_LNS_advance_line (50) 0x00000269: 05 DW_LNS_set_column (14) 0x0000026b: 01 DW_LNS_copy 0x00000000000000ef 50 14 1 0 0 is_stmt 0x0000026c: 00 DW_LNE_set_address (0x0000000000000102) 0x00000273: 03 DW_LNS_advance_line (52) 0x00000275: 05 DW_LNS_set_column (38) 0x00000277: 01 DW_LNS_copy 0x0000000000000102 52 38 1 0 0 is_stmt 0x00000278: 00 DW_LNE_set_address (0x0000000000000116) 0x0000027f: 03 DW_LNS_advance_line (53) 0x00000281: 05 DW_LNS_set_column (22) 0x00000283: 01 DW_LNS_copy 0x0000000000000116 53 22 1 0 0 is_stmt 0x00000284: 00 DW_LNE_set_address (0x0000000000000125) 0x0000028b: 03 DW_LNS_advance_line (54) 0x0000028d: 05 DW_LNS_set_column (24) 0x0000028f: 01 DW_LNS_copy 0x0000000000000125 54 24 1 0 0 is_stmt 0x00000290: 00 DW_LNE_set_address (0x0000000000000127) 0x00000297: 05 DW_LNS_set_column (26) 0x00000299: 06 DW_LNS_negate_stmt 0x0000029a: 01 DW_LNS_copy 0x0000000000000127 54 26 1 0 0 0x0000029b: 00 DW_LNE_set_address (0x0000000000000134) 0x000002a2: 05 DW_LNS_set_column (24) 0x000002a4: 01 DW_LNS_copy 0x0000000000000134 54 24 1 0 0 0x000002a5: 00 DW_LNE_set_address (0x0000000000000137) 0x000002ac: 03 DW_LNS_advance_line (55) 0x000002ae: 06 DW_LNS_negate_stmt 0x000002af: 01 DW_LNS_copy 0x0000000000000137 55 24 1 0 0 is_stmt 0x000002b0: 00 DW_LNE_set_address (0x000000000000013e) 0x000002b7: 03 DW_LNS_advance_line (52) 0x000002b9: 05 DW_LNS_set_column (44) 0x000002bb: 01 DW_LNS_copy 0x000000000000013e 52 44 1 0 0 is_stmt 0x000002bc: 00 DW_LNE_set_address (0x000000000000014a) 0x000002c3: 05 DW_LNS_set_column (38) 0x000002c5: 06 DW_LNS_negate_stmt 0x000002c6: 01 DW_LNS_copy 0x000000000000014a 52 38 1 0 0 0x000002c7: 00 DW_LNE_set_address (0x000000000000014d) 0x000002ce: 05 DW_LNS_set_column (13) 0x000002d0: 01 DW_LNS_copy 0x000000000000014d 52 13 1 0 0 0x000002d1: 00 DW_LNE_set_address (0x0000000000000151) 0x000002d8: 03 DW_LNS_advance_line (58) 0x000002da: 05 DW_LNS_set_column (19) 0x000002dc: 06 DW_LNS_negate_stmt 0x000002dd: 01 DW_LNS_copy 0x0000000000000151 58 19 1 0 0 is_stmt 0x000002de: 00 DW_LNE_set_address (0x0000000000000160) 0x000002e5: 03 DW_LNS_advance_line (59) 0x000002e7: 05 DW_LNS_set_column (21) 0x000002e9: 01 DW_LNS_copy 0x0000000000000160 59 21 1 0 0 is_stmt 0x000002ea: 00 DW_LNE_set_address (0x0000000000000167) 0x000002f1: 03 DW_LNS_advance_line (57) 0x000002f3: 05 DW_LNS_set_column (18) 0x000002f5: 01 DW_LNS_copy 0x0000000000000167 57 18 1 0 0 is_stmt 0x000002f6: 00 DW_LNE_set_address (0x0000000000000177) 0x000002fd: 03 DW_LNS_advance_line (62) 0x000002ff: 05 DW_LNS_set_column (14) 0x00000301: 01 DW_LNS_copy 0x0000000000000177 62 14 1 0 0 is_stmt 0x00000302: 00 DW_LNE_set_address (0x000000000000017b) 0x00000309: 05 DW_LNS_set_column (23) 0x0000030b: 06 DW_LNS_negate_stmt 0x0000030c: 01 DW_LNS_copy 0x000000000000017b 62 23 1 0 0 0x0000030d: 00 DW_LNE_set_address (0x0000000000000180) 0x00000314: 05 DW_LNS_set_column (14) 0x00000316: 01 DW_LNS_copy 0x0000000000000180 62 14 1 0 0 0x00000317: 00 DW_LNE_set_address (0x0000000000000184) 0x0000031e: 03 DW_LNS_advance_line (66) 0x00000320: 05 DW_LNS_set_column (16) 0x00000322: 06 DW_LNS_negate_stmt 0x00000323: 01 DW_LNS_copy 0x0000000000000184 66 16 1 0 0 is_stmt 0x00000324: 00 DW_LNE_set_address (0x0000000000000193) 0x0000032b: 03 DW_LNS_advance_line (75) 0x0000032d: 05 DW_LNS_set_column (27) 0x0000032f: 01 DW_LNS_copy 0x0000000000000193 75 27 1 0 0 is_stmt 0x00000330: 00 DW_LNE_set_address (0x000000000000019c) 0x00000337: 03 DW_LNS_advance_line (76) 0x00000339: 05 DW_LNS_set_column (16) 0x0000033b: 01 DW_LNS_copy 0x000000000000019c 76 16 1 0 0 is_stmt 0x0000033c: 00 DW_LNE_set_address (0x00000000000001a4) 0x00000343: 05 DW_LNS_set_column (27) 0x00000345: 06 DW_LNS_negate_stmt 0x00000346: 01 DW_LNS_copy 0x00000000000001a4 76 27 1 0 0 0x00000347: 00 DW_LNE_set_address (0x00000000000001a6) 0x0000034e: 05 DW_LNS_set_column (35) 0x00000350: 01 DW_LNS_copy 0x00000000000001a6 76 35 1 0 0 0x00000351: 00 DW_LNE_set_address (0x00000000000001af) 0x00000358: 05 DW_LNS_set_column (27) 0x0000035a: 01 DW_LNS_copy 0x00000000000001af 76 27 1 0 0 0x0000035b: 00 DW_LNE_set_address (0x00000000000001b4) 0x00000362: 05 DW_LNS_set_column (25) 0x00000364: 01 DW_LNS_copy 0x00000000000001b4 76 25 1 0 0 0x00000365: 00 DW_LNE_set_address (0x00000000000001b7) 0x0000036c: 03 DW_LNS_advance_line (75) 0x0000036e: 05 DW_LNS_set_column (27) 0x00000370: 06 DW_LNS_negate_stmt 0x00000371: 01 DW_LNS_copy 0x00000000000001b7 75 27 1 0 0 is_stmt 0x00000372: 00 DW_LNE_set_address (0x00000000000001bc) 0x00000379: 05 DW_LNS_set_column (13) 0x0000037b: 06 DW_LNS_negate_stmt 0x0000037c: 01 DW_LNS_copy 0x00000000000001bc 75 13 1 0 0 0x0000037d: 00 DW_LNE_set_address (0x00000000000001c4) 0x00000384: 03 DW_LNS_advance_line (77) 0x00000386: 06 DW_LNS_negate_stmt 0x00000387: 01 DW_LNS_copy 0x00000000000001c4 77 13 1 0 0 is_stmt 0x00000388: 00 DW_LNE_set_address (0x00000000000001cc) 0x0000038f: 05 DW_LNS_set_column (22) 0x00000391: 06 DW_LNS_negate_stmt 0x00000392: 01 DW_LNS_copy 0x00000000000001cc 77 22 1 0 0 0x00000393: 00 DW_LNE_set_address (0x00000000000001d1) 0x0000039a: 03 DW_LNS_advance_line (79) 0x0000039c: 05 DW_LNS_set_column (16) 0x0000039e: 06 DW_LNS_negate_stmt 0x0000039f: 01 DW_LNS_copy 0x00000000000001d1 79 16 1 0 0 is_stmt 0x000003a0: 00 DW_LNE_set_address (0x00000000000001d9) 0x000003a7: 05 DW_LNS_set_column (14) 0x000003a9: 06 DW_LNS_negate_stmt 0x000003aa: 01 DW_LNS_copy 0x00000000000001d9 79 14 1 0 0 0x000003ab: 00 DW_LNE_set_address (0x00000000000001e8) 0x000003b2: 05 DW_LNS_set_column (25) 0x000003b4: 01 DW_LNS_copy 0x00000000000001e8 79 25 1 0 0 0x000003b5: 00 DW_LNE_set_address (0x00000000000001ef) 0x000003bc: 03 DW_LNS_advance_line (81) 0x000003be: 05 DW_LNS_set_column (11) 0x000003c0: 06 DW_LNS_negate_stmt 0x000003c1: 01 DW_LNS_copy 0x00000000000001ef 81 11 1 0 0 is_stmt 0x000003c2: 00 DW_LNE_set_address (0x00000000000001f4) 0x000003c9: 03 DW_LNS_advance_line (66) 0x000003cb: 05 DW_LNS_set_column (16) 0x000003cd: 01 DW_LNS_copy 0x00000000000001f4 66 16 1 0 0 is_stmt 0x000003ce: 00 DW_LNE_set_address (0x00000000000001fb) 0x000003d5: 03 DW_LNS_advance_line (74) 0x000003d7: 05 DW_LNS_set_column (22) 0x000003d9: 01 DW_LNS_copy 0x00000000000001fb 74 22 1 0 0 is_stmt 0x000003da: 00 DW_LNE_set_address (0x0000000000000204) 0x000003e1: 03 DW_LNS_advance_line (37) 0x000003e3: 05 DW_LNS_set_column (4) 0x000003e5: 01 DW_LNS_copy 0x0000000000000204 37 4 1 0 0 is_stmt 0x000003e6: 00 DW_LNE_set_address (0x0000000000000209) 0x000003ed: 03 DW_LNS_advance_line (39) 0x000003ef: 01 DW_LNS_copy 0x0000000000000209 39 4 1 0 0 is_stmt 0x000003f0: 00 DW_LNE_set_address (0x000000000000020b) 0x000003f7: 05 DW_LNS_set_column (16) 0x000003f9: 06 DW_LNS_negate_stmt 0x000003fa: 01 DW_LNS_copy 0x000000000000020b 39 16 1 0 0 0x000003fb: 00 DW_LNE_set_address (0x0000000000000214) 0x00000402: 05 DW_LNS_set_column (4) 0x00000404: 01 DW_LNS_copy 0x0000000000000214 39 4 1 0 0 0x00000405: 00 DW_LNE_set_address (0x0000000000000216) 0x0000040c: 05 DW_LNS_set_column (23) 0x0000040e: 01 DW_LNS_copy 0x0000000000000216 39 23 1 0 0 0x0000040f: 00 DW_LNE_set_address (0x000000000000021b) 0x00000416: 05 DW_LNS_set_column (19) 0x00000418: 01 DW_LNS_copy 0x000000000000021b 39 19 1 0 0 0x00000419: 00 DW_LNE_set_address (0x0000000000000220) 0x00000420: 03 DW_LNS_advance_line (40) 0x00000422: 05 DW_LNS_set_column (4) 0x00000424: 06 DW_LNS_negate_stmt 0x00000425: 01 DW_LNS_copy 0x0000000000000220 40 4 1 0 0 is_stmt 0x00000426: 00 DW_LNE_set_address (0x0000000000000228) 0x0000042d: 05 DW_LNS_set_column (17) 0x0000042f: 06 DW_LNS_negate_stmt 0x00000430: 01 DW_LNS_copy 0x0000000000000228 40 17 1 0 0 0x00000431: 00 DW_LNE_set_address (0x0000000000000238) 0x00000438: 03 DW_LNS_advance_line (44) 0x0000043a: 05 DW_LNS_set_column (16) 0x0000043c: 06 DW_LNS_negate_stmt 0x0000043d: 01 DW_LNS_copy 0x0000000000000238 44 16 1 0 0 is_stmt 0x0000043e: 00 DW_LNE_set_address (0x0000000000000241) 0x00000445: 03 DW_LNS_advance_line (45) 0x00000447: 05 DW_LNS_set_column (10) 0x00000449: 01 DW_LNS_copy 0x0000000000000241 45 10 1 0 0 is_stmt 0x0000044a: 00 DW_LNE_set_address (0x0000000000000243) 0x00000451: 05 DW_LNS_set_column (18) 0x00000453: 06 DW_LNS_negate_stmt 0x00000454: 01 DW_LNS_copy 0x0000000000000243 45 18 1 0 0 0x00000455: 00 DW_LNE_set_address (0x000000000000024c) 0x0000045c: 05 DW_LNS_set_column (10) 0x0000045e: 01 DW_LNS_copy 0x000000000000024c 45 10 1 0 0 0x0000045f: 00 DW_LNE_set_address (0x000000000000024e) 0x00000466: 05 DW_LNS_set_column (23) 0x00000468: 01 DW_LNS_copy 0x000000000000024e 45 23 1 0 0 0x00000469: 00 DW_LNE_set_address (0x0000000000000253) 0x00000470: 03 DW_LNS_advance_line (44) 0x00000472: 05 DW_LNS_set_column (16) 0x00000474: 06 DW_LNS_negate_stmt 0x00000475: 01 DW_LNS_copy 0x0000000000000253 44 16 1 0 0 is_stmt 0x00000476: 00 DW_LNE_set_address (0x0000000000000264) 0x0000047d: 03 DW_LNS_advance_line (46) 0x0000047f: 05 DW_LNS_set_column (11) 0x00000481: 01 DW_LNS_copy 0x0000000000000264 46 11 1 0 0 is_stmt 0x00000482: 00 DW_LNE_set_address (0x0000000000000270) 0x00000489: 05 DW_LNS_set_column (28) 0x0000048b: 06 DW_LNS_negate_stmt 0x0000048c: 01 DW_LNS_copy 0x0000000000000270 46 28 1 0 0 0x0000048d: 00 DW_LNE_set_address (0x0000000000000275) 0x00000494: 05 DW_LNS_set_column (41) 0x00000496: 01 DW_LNS_copy 0x0000000000000275 46 41 1 0 0 0x00000497: 00 DW_LNE_set_address (0x000000000000027a) 0x0000049e: 03 DW_LNS_advance_line (50) 0x000004a0: 05 DW_LNS_set_column (14) 0x000004a2: 06 DW_LNS_negate_stmt 0x000004a3: 01 DW_LNS_copy 0x000000000000027a 50 14 1 0 0 is_stmt 0x000004a4: 00 DW_LNE_set_address (0x000000000000028d) 0x000004ab: 03 DW_LNS_advance_line (52) 0x000004ad: 05 DW_LNS_set_column (38) 0x000004af: 01 DW_LNS_copy 0x000000000000028d 52 38 1 0 0 is_stmt 0x000004b0: 00 DW_LNE_set_address (0x00000000000002a1) 0x000004b7: 03 DW_LNS_advance_line (53) 0x000004b9: 05 DW_LNS_set_column (22) 0x000004bb: 01 DW_LNS_copy 0x00000000000002a1 53 22 1 0 0 is_stmt 0x000004bc: 00 DW_LNE_set_address (0x00000000000002b0) 0x000004c3: 03 DW_LNS_advance_line (54) 0x000004c5: 05 DW_LNS_set_column (24) 0x000004c7: 01 DW_LNS_copy 0x00000000000002b0 54 24 1 0 0 is_stmt 0x000004c8: 00 DW_LNE_set_address (0x00000000000002b2) 0x000004cf: 05 DW_LNS_set_column (26) 0x000004d1: 06 DW_LNS_negate_stmt 0x000004d2: 01 DW_LNS_copy 0x00000000000002b2 54 26 1 0 0 0x000004d3: 00 DW_LNE_set_address (0x00000000000002bf) 0x000004da: 05 DW_LNS_set_column (24) 0x000004dc: 01 DW_LNS_copy 0x00000000000002bf 54 24 1 0 0 0x000004dd: 00 DW_LNE_set_address (0x00000000000002c2) 0x000004e4: 03 DW_LNS_advance_line (55) 0x000004e6: 06 DW_LNS_negate_stmt 0x000004e7: 01 DW_LNS_copy 0x00000000000002c2 55 24 1 0 0 is_stmt 0x000004e8: 00 DW_LNE_set_address (0x00000000000002c9) 0x000004ef: 03 DW_LNS_advance_line (52) 0x000004f1: 05 DW_LNS_set_column (44) 0x000004f3: 01 DW_LNS_copy 0x00000000000002c9 52 44 1 0 0 is_stmt 0x000004f4: 00 DW_LNE_set_address (0x00000000000002d5) 0x000004fb: 05 DW_LNS_set_column (38) 0x000004fd: 06 DW_LNS_negate_stmt 0x000004fe: 01 DW_LNS_copy 0x00000000000002d5 52 38 1 0 0 0x000004ff: 00 DW_LNE_set_address (0x00000000000002dc) 0x00000506: 03 DW_LNS_advance_line (58) 0x00000508: 05 DW_LNS_set_column (19) 0x0000050a: 06 DW_LNS_negate_stmt 0x0000050b: 01 DW_LNS_copy 0x00000000000002dc 58 19 1 0 0 is_stmt 0x0000050c: 00 DW_LNE_set_address (0x00000000000002eb) 0x00000513: 03 DW_LNS_advance_line (59) 0x00000515: 05 DW_LNS_set_column (21) 0x00000517: 01 DW_LNS_copy 0x00000000000002eb 59 21 1 0 0 is_stmt 0x00000518: 00 DW_LNE_set_address (0x00000000000002f2) 0x0000051f: 03 DW_LNS_advance_line (57) 0x00000521: 05 DW_LNS_set_column (18) 0x00000523: 01 DW_LNS_copy 0x00000000000002f2 57 18 1 0 0 is_stmt 0x00000524: 00 DW_LNE_set_address (0x0000000000000302) 0x0000052b: 03 DW_LNS_advance_line (62) 0x0000052d: 05 DW_LNS_set_column (14) 0x0000052f: 01 DW_LNS_copy 0x0000000000000302 62 14 1 0 0 is_stmt 0x00000530: 00 DW_LNE_set_address (0x0000000000000306) 0x00000537: 05 DW_LNS_set_column (23) 0x00000539: 06 DW_LNS_negate_stmt 0x0000053a: 01 DW_LNS_copy 0x0000000000000306 62 23 1 0 0 0x0000053b: 00 DW_LNE_set_address (0x000000000000030b) 0x00000542: 05 DW_LNS_set_column (14) 0x00000544: 01 DW_LNS_copy 0x000000000000030b 62 14 1 0 0 0x00000545: 00 DW_LNE_set_address (0x000000000000030f) 0x0000054c: 03 DW_LNS_advance_line (66) 0x0000054e: 05 DW_LNS_set_column (16) 0x00000550: 06 DW_LNS_negate_stmt 0x00000551: 01 DW_LNS_copy 0x000000000000030f 66 16 1 0 0 is_stmt 0x00000552: 00 DW_LNE_set_address (0x000000000000031e) 0x00000559: 03 DW_LNS_advance_line (75) 0x0000055b: 05 DW_LNS_set_column (27) 0x0000055d: 01 DW_LNS_copy 0x000000000000031e 75 27 1 0 0 is_stmt 0x0000055e: 00 DW_LNE_set_address (0x0000000000000327) 0x00000565: 03 DW_LNS_advance_line (76) 0x00000567: 05 DW_LNS_set_column (16) 0x00000569: 01 DW_LNS_copy 0x0000000000000327 76 16 1 0 0 is_stmt 0x0000056a: 00 DW_LNE_set_address (0x000000000000032f) 0x00000571: 05 DW_LNS_set_column (27) 0x00000573: 06 DW_LNS_negate_stmt 0x00000574: 01 DW_LNS_copy 0x000000000000032f 76 27 1 0 0 0x00000575: 00 DW_LNE_set_address (0x0000000000000331) 0x0000057c: 05 DW_LNS_set_column (35) 0x0000057e: 01 DW_LNS_copy 0x0000000000000331 76 35 1 0 0 0x0000057f: 00 DW_LNE_set_address (0x000000000000033a) 0x00000586: 05 DW_LNS_set_column (27) 0x00000588: 01 DW_LNS_copy 0x000000000000033a 76 27 1 0 0 0x00000589: 00 DW_LNE_set_address (0x000000000000033f) 0x00000590: 05 DW_LNS_set_column (25) 0x00000592: 01 DW_LNS_copy 0x000000000000033f 76 25 1 0 0 0x00000593: 00 DW_LNE_set_address (0x0000000000000342) 0x0000059a: 03 DW_LNS_advance_line (75) 0x0000059c: 05 DW_LNS_set_column (27) 0x0000059e: 06 DW_LNS_negate_stmt 0x0000059f: 01 DW_LNS_copy 0x0000000000000342 75 27 1 0 0 is_stmt 0x000005a0: 00 DW_LNE_set_address (0x000000000000034f) 0x000005a7: 03 DW_LNS_advance_line (77) 0x000005a9: 05 DW_LNS_set_column (13) 0x000005ab: 01 DW_LNS_copy 0x000000000000034f 77 13 1 0 0 is_stmt 0x000005ac: 00 DW_LNE_set_address (0x0000000000000357) 0x000005b3: 05 DW_LNS_set_column (22) 0x000005b5: 06 DW_LNS_negate_stmt 0x000005b6: 01 DW_LNS_copy 0x0000000000000357 77 22 1 0 0 0x000005b7: 00 DW_LNE_set_address (0x000000000000035c) 0x000005be: 03 DW_LNS_advance_line (79) 0x000005c0: 05 DW_LNS_set_column (16) 0x000005c2: 06 DW_LNS_negate_stmt 0x000005c3: 01 DW_LNS_copy 0x000000000000035c 79 16 1 0 0 is_stmt 0x000005c4: 00 DW_LNE_set_address (0x0000000000000364) 0x000005cb: 05 DW_LNS_set_column (14) 0x000005cd: 06 DW_LNS_negate_stmt 0x000005ce: 01 DW_LNS_copy 0x0000000000000364 79 14 1 0 0 0x000005cf: 00 DW_LNE_set_address (0x0000000000000373) 0x000005d6: 05 DW_LNS_set_column (25) 0x000005d8: 01 DW_LNS_copy 0x0000000000000373 79 25 1 0 0 0x000005d9: 00 DW_LNE_set_address (0x000000000000037a) 0x000005e0: 03 DW_LNS_advance_line (81) 0x000005e2: 05 DW_LNS_set_column (11) 0x000005e4: 06 DW_LNS_negate_stmt 0x000005e5: 01 DW_LNS_copy 0x000000000000037a 81 11 1 0 0 is_stmt 0x000005e6: 00 DW_LNE_set_address (0x000000000000037f) 0x000005ed: 03 DW_LNS_advance_line (66) 0x000005ef: 05 DW_LNS_set_column (16) 0x000005f1: 01 DW_LNS_copy 0x000000000000037f 66 16 1 0 0 is_stmt 0x000005f2: 00 DW_LNE_set_address (0x0000000000000386) 0x000005f9: 03 DW_LNS_advance_line (74) 0x000005fb: 05 DW_LNS_set_column (22) 0x000005fd: 01 DW_LNS_copy 0x0000000000000386 74 22 1 0 0 is_stmt 0x000005fe: 00 DW_LNE_set_address (0x0000000000000394) 0x00000605: 03 DW_LNS_advance_line (67) 0x00000607: 05 DW_LNS_set_column (13) 0x00000609: 01 DW_LNS_copy 0x0000000000000394 67 13 1 0 0 is_stmt 0x0000060a: 00 DW_LNE_set_address (0x0000000000000398) 0x00000611: 03 DW_LNS_advance_line (68) 0x00000613: 01 DW_LNS_copy 0x0000000000000398 68 13 1 0 0 is_stmt 0x00000614: 00 DW_LNE_set_address (0x000000000000039c) 0x0000061b: 03 DW_LNS_advance_line (69) 0x0000061d: 01 DW_LNS_copy 0x000000000000039c 69 13 1 0 0 is_stmt 0x0000061e: 00 DW_LNE_set_address (0x00000000000003a0) 0x00000625: 03 DW_LNS_advance_line (70) 0x00000627: 01 DW_LNS_copy 0x00000000000003a0 70 13 1 0 0 is_stmt 0x00000628: 00 DW_LNE_set_address (0x00000000000003a3) 0x0000062f: 00 DW_LNE_end_sequence 0x00000000000003a3 70 13 1 0 0 is_stmt end_sequence 0x00000632: 00 DW_LNE_set_address (0x00000000000003a5) 0x00000639: 03 DW_LNS_advance_line (152) 0x0000063c: 01 DW_LNS_copy 0x00000000000003a5 152 0 1 0 0 is_stmt 0x0000063d: 00 DW_LNE_set_address (0x00000000000003c3) 0x00000644: 03 DW_LNS_advance_line (153) 0x00000646: 05 DW_LNS_set_column (17) 0x00000648: 0a DW_LNS_set_prologue_end 0x00000649: 01 DW_LNS_copy 0x00000000000003c3 153 17 1 0 0 is_stmt prologue_end 0x0000064a: 00 DW_LNE_set_address (0x00000000000003c8) 0x00000651: 05 DW_LNS_set_column (12) 0x00000653: 06 DW_LNS_negate_stmt 0x00000654: 01 DW_LNS_copy 0x00000000000003c8 153 12 1 0 0 0x00000655: 00 DW_LNE_set_address (0x00000000000003ce) 0x0000065c: 05 DW_LNS_set_column (28) 0x0000065e: 01 DW_LNS_copy 0x00000000000003ce 153 28 1 0 0 0x0000065f: 00 DW_LNE_set_address (0x00000000000003d3) 0x00000666: 05 DW_LNS_set_column (23) 0x00000668: 01 DW_LNS_copy 0x00000000000003d3 153 23 1 0 0 0x00000669: 00 DW_LNE_set_address (0x00000000000003d9) 0x00000670: 03 DW_LNS_advance_line (155) 0x00000672: 05 DW_LNS_set_column (10) 0x00000674: 06 DW_LNS_negate_stmt 0x00000675: 01 DW_LNS_copy 0x00000000000003d9 155 10 1 0 0 is_stmt 0x00000676: 00 DW_LNE_set_address (0x00000000000003da) 0x0000067d: 05 DW_LNS_set_column (8) 0x0000067f: 06 DW_LNS_negate_stmt 0x00000680: 01 DW_LNS_copy 0x00000000000003da 155 8 1 0 0 0x00000681: 00 DW_LNE_set_address (0x00000000000003dd) 0x00000688: 03 DW_LNS_advance_line (156) 0x0000068a: 05 DW_LNS_set_column (7) 0x0000068c: 06 DW_LNS_negate_stmt 0x0000068d: 01 DW_LNS_copy 0x00000000000003dd 156 7 1 0 0 is_stmt 0x0000068e: 00 DW_LNE_set_address (0x00000000000003ec) 0x00000695: 03 DW_LNS_advance_line (94) 0x00000697: 05 DW_LNS_set_column (18) 0x00000699: 01 DW_LNS_copy 0x00000000000003ec 94 18 1 0 0 is_stmt 0x0000069a: 00 DW_LNE_set_address (0x00000000000003f1) 0x000006a1: 05 DW_LNS_set_column (4) 0x000006a3: 06 DW_LNS_negate_stmt 0x000006a4: 01 DW_LNS_copy 0x00000000000003f1 94 4 1 0 0 0x000006a5: 00 DW_LNE_set_address (0x0000000000000406) 0x000006ac: 03 DW_LNS_advance_line (95) 0x000006ae: 05 DW_LNS_set_column (29) 0x000006b0: 06 DW_LNS_negate_stmt 0x000006b1: 01 DW_LNS_copy 0x0000000000000406 95 29 1 0 0 is_stmt 0x000006b2: 00 DW_LNE_set_address (0x0000000000000408) 0x000006b9: 03 DW_LNS_advance_line (98) 0x000006bb: 05 DW_LNS_set_column (19) 0x000006bd: 01 DW_LNS_copy 0x0000000000000408 98 19 1 0 0 is_stmt 0x000006be: 00 DW_LNE_set_address (0x000000000000040f) 0x000006c5: 03 DW_LNS_advance_line (97) 0x000006c7: 05 DW_LNS_set_column (16) 0x000006c9: 01 DW_LNS_copy 0x000000000000040f 97 16 1 0 0 is_stmt 0x000006ca: 00 DW_LNE_set_address (0x0000000000000416) 0x000006d1: 03 DW_LNS_advance_line (96) 0x000006d3: 01 DW_LNS_copy 0x0000000000000416 96 16 1 0 0 is_stmt 0x000006d4: 00 DW_LNE_set_address (0x0000000000000421) 0x000006db: 03 DW_LNS_advance_line (94) 0x000006dd: 05 DW_LNS_set_column (28) 0x000006df: 01 DW_LNS_copy 0x0000000000000421 94 28 1 0 0 is_stmt 0x000006e0: 00 DW_LNE_set_address (0x0000000000000426) 0x000006e7: 05 DW_LNS_set_column (18) 0x000006e9: 06 DW_LNS_negate_stmt 0x000006ea: 01 DW_LNS_copy 0x0000000000000426 94 18 1 0 0 0x000006eb: 00 DW_LNE_set_address (0x000000000000042b) 0x000006f2: 05 DW_LNS_set_column (4) 0x000006f4: 01 DW_LNS_copy 0x000000000000042b 94 4 1 0 0 0x000006f5: 00 DW_LNE_set_address (0x0000000000000433) 0x000006fc: 03 DW_LNS_advance_line (102) 0x000006fe: 05 DW_LNS_set_column (27) 0x00000700: 06 DW_LNS_negate_stmt 0x00000701: 01 DW_LNS_copy 0x0000000000000433 102 27 1 0 0 is_stmt 0x00000702: 00 DW_LNE_set_address (0x0000000000000438) 0x00000709: 05 DW_LNS_set_column (18) 0x0000070b: 06 DW_LNS_negate_stmt 0x0000070c: 01 DW_LNS_copy 0x0000000000000438 102 18 1 0 0 0x0000070d: 00 DW_LNE_set_address (0x000000000000043e) 0x00000714: 03 DW_LNS_advance_line (103) 0x00000716: 06 DW_LNS_negate_stmt 0x00000717: 01 DW_LNS_copy 0x000000000000043e 103 18 1 0 0 is_stmt 0x00000718: 00 DW_LNE_set_address (0x000000000000044c) 0x0000071f: 03 DW_LNS_advance_line (105) 0x00000721: 01 DW_LNS_copy 0x000000000000044c 105 18 1 0 0 is_stmt 0x00000722: 00 DW_LNE_set_address (0x0000000000000451) 0x00000729: 05 DW_LNS_set_column (4) 0x0000072b: 06 DW_LNS_negate_stmt 0x0000072c: 01 DW_LNS_copy 0x0000000000000451 105 4 1 0 0 0x0000072d: 00 DW_LNE_set_address (0x0000000000000455) 0x00000734: 03 DW_LNS_advance_line (106) 0x00000736: 05 DW_LNS_set_column (7) 0x00000738: 06 DW_LNS_negate_stmt 0x00000739: 01 DW_LNS_copy 0x0000000000000455 106 7 1 0 0 is_stmt 0x0000073a: 00 DW_LNE_set_address (0x000000000000045d) 0x00000741: 05 DW_LNS_set_column (16) 0x00000743: 06 DW_LNS_negate_stmt 0x00000744: 01 DW_LNS_copy 0x000000000000045d 106 16 1 0 0 0x00000745: 00 DW_LNE_set_address (0x0000000000000462) 0x0000074c: 03 DW_LNS_advance_line (105) 0x0000074e: 05 DW_LNS_set_column (24) 0x00000750: 06 DW_LNS_negate_stmt 0x00000751: 01 DW_LNS_copy 0x0000000000000462 105 24 1 0 0 is_stmt 0x00000752: 00 DW_LNE_set_address (0x0000000000000467) 0x00000759: 05 DW_LNS_set_column (18) 0x0000075b: 06 DW_LNS_negate_stmt 0x0000075c: 01 DW_LNS_copy 0x0000000000000467 105 18 1 0 0 0x0000075d: 00 DW_LNE_set_address (0x000000000000048d) 0x00000764: 03 DW_LNS_advance_line (112) 0x00000766: 05 DW_LNS_set_column (13) 0x00000768: 06 DW_LNS_negate_stmt 0x00000769: 01 DW_LNS_copy 0x000000000000048d 112 13 1 0 0 is_stmt 0x0000076a: 00 DW_LNE_set_address (0x000000000000048f) 0x00000771: 05 DW_LNS_set_column (26) 0x00000773: 06 DW_LNS_negate_stmt 0x00000774: 01 DW_LNS_copy 0x000000000000048f 112 26 1 0 0 0x00000775: 00 DW_LNE_set_address (0x000000000000049c) 0x0000077c: 05 DW_LNS_set_column (35) 0x0000077e: 01 DW_LNS_copy 0x000000000000049c 112 35 1 0 0 0x0000077f: 00 DW_LNE_set_address (0x000000000000049d) 0x00000786: 05 DW_LNS_set_column (13) 0x00000788: 01 DW_LNS_copy 0x000000000000049d 112 13 1 0 0 0x00000789: 00 DW_LNE_set_address (0x00000000000004ab) 0x00000790: 03 DW_LNS_advance_line (111) 0x00000792: 05 DW_LNS_set_column (30) 0x00000794: 06 DW_LNS_negate_stmt 0x00000795: 01 DW_LNS_copy 0x00000000000004ab 111 30 1 0 0 is_stmt 0x00000796: 00 DW_LNE_set_address (0x00000000000004b0) 0x0000079d: 05 DW_LNS_set_column (24) 0x0000079f: 06 DW_LNS_negate_stmt 0x000007a0: 01 DW_LNS_copy 0x00000000000004b0 111 24 1 0 0 0x000007a1: 00 DW_LNE_set_address (0x00000000000004b5) 0x000007a8: 05 DW_LNS_set_column (10) 0x000007aa: 01 DW_LNS_copy 0x00000000000004b5 111 10 1 0 0 0x000007ab: 00 DW_LNE_set_address (0x00000000000004ba) 0x000007b2: 03 DW_LNS_advance_line (113) 0x000007b4: 06 DW_LNS_negate_stmt 0x000007b5: 01 DW_LNS_copy 0x00000000000004ba 113 10 1 0 0 is_stmt 0x000007b6: 00 DW_LNE_set_address (0x00000000000004bf) 0x000007bd: 03 DW_LNS_advance_line (118) 0x000007bf: 05 DW_LNS_set_column (16) 0x000007c1: 01 DW_LNS_copy 0x00000000000004bf 118 16 1 0 0 is_stmt 0x000007c2: 00 DW_LNE_set_address (0x00000000000004c4) 0x000007c9: 05 DW_LNS_set_column (7) 0x000007cb: 06 DW_LNS_negate_stmt 0x000007cc: 01 DW_LNS_copy 0x00000000000004c4 118 7 1 0 0 0x000007cd: 00 DW_LNE_set_address (0x00000000000004c8) 0x000007d4: 03 DW_LNS_advance_line (119) 0x000007d6: 05 DW_LNS_set_column (10) 0x000007d8: 06 DW_LNS_negate_stmt 0x000007d9: 01 DW_LNS_copy 0x00000000000004c8 119 10 1 0 0 is_stmt 0x000007da: 00 DW_LNE_set_address (0x00000000000004ca) 0x000007e1: 05 DW_LNS_set_column (18) 0x000007e3: 06 DW_LNS_negate_stmt 0x000007e4: 01 DW_LNS_copy 0x00000000000004ca 119 18 1 0 0 0x000007e5: 00 DW_LNE_set_address (0x00000000000004d3) 0x000007ec: 05 DW_LNS_set_column (10) 0x000007ee: 01 DW_LNS_copy 0x00000000000004d3 119 10 1 0 0 0x000007ef: 00 DW_LNE_set_address (0x00000000000004d5) 0x000007f6: 05 DW_LNS_set_column (23) 0x000007f8: 01 DW_LNS_copy 0x00000000000004d5 119 23 1 0 0 0x000007f9: 00 DW_LNE_set_address (0x00000000000004da) 0x00000800: 03 DW_LNS_advance_line (118) 0x00000802: 05 DW_LNS_set_column (16) 0x00000804: 06 DW_LNS_negate_stmt 0x00000805: 01 DW_LNS_copy 0x00000000000004da 118 16 1 0 0 is_stmt 0x00000806: 00 DW_LNE_set_address (0x00000000000004e5) 0x0000080d: 05 DW_LNS_set_column (7) 0x0000080f: 06 DW_LNS_negate_stmt 0x00000810: 01 DW_LNS_copy 0x00000000000004e5 118 7 1 0 0 0x00000811: 00 DW_LNE_set_address (0x00000000000004eb) 0x00000818: 03 DW_LNS_advance_line (122) 0x0000081a: 05 DW_LNS_set_column (16) 0x0000081c: 06 DW_LNS_negate_stmt 0x0000081d: 01 DW_LNS_copy 0x00000000000004eb 122 16 1 0 0 is_stmt 0x0000081e: 00 DW_LNE_set_address (0x00000000000004ff) 0x00000825: 03 DW_LNS_advance_line (125) 0x00000827: 05 DW_LNS_set_column (22) 0x00000829: 01 DW_LNS_copy 0x00000000000004ff 125 22 1 0 0 is_stmt 0x0000082a: 00 DW_LNE_set_address (0x0000000000000508) 0x00000831: 03 DW_LNS_advance_line (126) 0x00000833: 05 DW_LNS_set_column (27) 0x00000835: 01 DW_LNS_copy 0x0000000000000508 126 27 1 0 0 is_stmt 0x00000836: 00 DW_LNE_set_address (0x000000000000050d) 0x0000083d: 05 DW_LNS_set_column (13) 0x0000083f: 06 DW_LNS_negate_stmt 0x00000840: 01 DW_LNS_copy 0x000000000000050d 126 13 1 0 0 0x00000841: 00 DW_LNE_set_address (0x0000000000000511) 0x00000848: 03 DW_LNS_advance_line (127) 0x0000084a: 05 DW_LNS_set_column (16) 0x0000084c: 06 DW_LNS_negate_stmt 0x0000084d: 01 DW_LNS_copy 0x0000000000000511 127 16 1 0 0 is_stmt 0x0000084e: 00 DW_LNE_set_address (0x0000000000000519) 0x00000855: 05 DW_LNS_set_column (27) 0x00000857: 06 DW_LNS_negate_stmt 0x00000858: 01 DW_LNS_copy 0x0000000000000519 127 27 1 0 0 0x00000859: 00 DW_LNE_set_address (0x000000000000051b) 0x00000860: 05 DW_LNS_set_column (35) 0x00000862: 01 DW_LNS_copy 0x000000000000051b 127 35 1 0 0 0x00000863: 00 DW_LNE_set_address (0x0000000000000524) 0x0000086a: 05 DW_LNS_set_column (27) 0x0000086c: 01 DW_LNS_copy 0x0000000000000524 127 27 1 0 0 0x0000086d: 00 DW_LNE_set_address (0x0000000000000529) 0x00000874: 05 DW_LNS_set_column (25) 0x00000876: 01 DW_LNS_copy 0x0000000000000529 127 25 1 0 0 0x00000877: 00 DW_LNE_set_address (0x000000000000052c) 0x0000087e: 03 DW_LNS_advance_line (126) 0x00000880: 05 DW_LNS_set_column (27) 0x00000882: 06 DW_LNS_negate_stmt 0x00000883: 01 DW_LNS_copy 0x000000000000052c 126 27 1 0 0 is_stmt 0x00000884: 00 DW_LNE_set_address (0x0000000000000531) 0x0000088b: 05 DW_LNS_set_column (13) 0x0000088d: 06 DW_LNS_negate_stmt 0x0000088e: 01 DW_LNS_copy 0x0000000000000531 126 13 1 0 0 0x0000088f: 00 DW_LNE_set_address (0x0000000000000539) 0x00000896: 03 DW_LNS_advance_line (128) 0x00000898: 06 DW_LNS_negate_stmt 0x00000899: 01 DW_LNS_copy 0x0000000000000539 128 13 1 0 0 is_stmt 0x0000089a: 00 DW_LNE_set_address (0x0000000000000541) 0x000008a1: 05 DW_LNS_set_column (22) 0x000008a3: 06 DW_LNS_negate_stmt 0x000008a4: 01 DW_LNS_copy 0x0000000000000541 128 22 1 0 0 0x000008a5: 00 DW_LNE_set_address (0x0000000000000546) 0x000008ac: 03 DW_LNS_advance_line (130) 0x000008ae: 05 DW_LNS_set_column (16) 0x000008b0: 06 DW_LNS_negate_stmt 0x000008b1: 01 DW_LNS_copy 0x0000000000000546 130 16 1 0 0 is_stmt 0x000008b2: 00 DW_LNE_set_address (0x000000000000054e) 0x000008b9: 05 DW_LNS_set_column (14) 0x000008bb: 06 DW_LNS_negate_stmt 0x000008bc: 01 DW_LNS_copy 0x000000000000054e 130 14 1 0 0 0x000008bd: 00 DW_LNE_set_address (0x000000000000055f) 0x000008c4: 05 DW_LNS_set_column (25) 0x000008c6: 01 DW_LNS_copy 0x000000000000055f 130 25 1 0 0 0x000008c7: 00 DW_LNE_set_address (0x0000000000000564) 0x000008ce: 05 DW_LNS_set_column (14) 0x000008d0: 01 DW_LNS_copy 0x0000000000000564 130 14 1 0 0 0x000008d1: 00 DW_LNE_set_address (0x0000000000000566) 0x000008d8: 03 DW_LNS_advance_line (133) 0x000008da: 05 DW_LNS_set_column (11) 0x000008dc: 06 DW_LNS_negate_stmt 0x000008dd: 01 DW_LNS_copy 0x0000000000000566 133 11 1 0 0 is_stmt 0x000008de: 00 DW_LNE_set_address (0x000000000000056b) 0x000008e5: 03 DW_LNS_advance_line (122) 0x000008e7: 05 DW_LNS_set_column (16) 0x000008e9: 01 DW_LNS_copy 0x000000000000056b 122 16 1 0 0 is_stmt 0x000008ea: 00 DW_LNE_set_address (0x0000000000000570) 0x000008f1: 05 DW_LNS_set_column (14) 0x000008f3: 06 DW_LNS_negate_stmt 0x000008f4: 01 DW_LNS_copy 0x0000000000000570 122 14 1 0 0 0x000008f5: 00 DW_LNE_set_address (0x0000000000000575) 0x000008fc: 03 DW_LNS_advance_line (130) 0x000008fe: 06 DW_LNS_negate_stmt 0x000008ff: 01 DW_LNS_copy 0x0000000000000575 130 14 1 0 0 is_stmt 0x00000900: 00 DW_LNE_set_address (0x0000000000000576) 0x00000907: 03 DW_LNS_advance_line (110) 0x00000909: 05 DW_LNS_set_column (11) 0x0000090b: 01 DW_LNS_copy 0x0000000000000576 110 11 1 0 0 is_stmt 0x0000090c: 00 DW_LNE_set_address (0x0000000000000584) 0x00000913: 03 DW_LNS_advance_line (113) 0x00000915: 05 DW_LNS_set_column (10) 0x00000917: 01 DW_LNS_copy 0x0000000000000584 113 10 1 0 0 is_stmt 0x00000918: 00 DW_LNE_set_address (0x0000000000000589) 0x0000091f: 03 DW_LNS_advance_line (118) 0x00000921: 05 DW_LNS_set_column (16) 0x00000923: 01 DW_LNS_copy 0x0000000000000589 118 16 1 0 0 is_stmt 0x00000924: 00 DW_LNE_set_address (0x000000000000058e) 0x0000092b: 05 DW_LNS_set_column (7) 0x0000092d: 06 DW_LNS_negate_stmt 0x0000092e: 01 DW_LNS_copy 0x000000000000058e 118 7 1 0 0 0x0000092f: 00 DW_LNE_set_address (0x0000000000000592) 0x00000936: 03 DW_LNS_advance_line (119) 0x00000938: 05 DW_LNS_set_column (10) 0x0000093a: 06 DW_LNS_negate_stmt 0x0000093b: 01 DW_LNS_copy 0x0000000000000592 119 10 1 0 0 is_stmt 0x0000093c: 00 DW_LNE_set_address (0x0000000000000594) 0x00000943: 05 DW_LNS_set_column (18) 0x00000945: 06 DW_LNS_negate_stmt 0x00000946: 01 DW_LNS_copy 0x0000000000000594 119 18 1 0 0 0x00000947: 00 DW_LNE_set_address (0x000000000000059d) 0x0000094e: 05 DW_LNS_set_column (10) 0x00000950: 01 DW_LNS_copy 0x000000000000059d 119 10 1 0 0 0x00000951: 00 DW_LNE_set_address (0x000000000000059f) 0x00000958: 05 DW_LNS_set_column (23) 0x0000095a: 01 DW_LNS_copy 0x000000000000059f 119 23 1 0 0 0x0000095b: 00 DW_LNE_set_address (0x00000000000005a4) 0x00000962: 03 DW_LNS_advance_line (118) 0x00000964: 05 DW_LNS_set_column (16) 0x00000966: 06 DW_LNS_negate_stmt 0x00000967: 01 DW_LNS_copy 0x00000000000005a4 118 16 1 0 0 is_stmt 0x00000968: 00 DW_LNE_set_address (0x00000000000005af) 0x0000096f: 05 DW_LNS_set_column (7) 0x00000971: 06 DW_LNS_negate_stmt 0x00000972: 01 DW_LNS_copy 0x00000000000005af 118 7 1 0 0 0x00000973: 00 DW_LNE_set_address (0x00000000000005b5) 0x0000097a: 03 DW_LNS_advance_line (122) 0x0000097c: 05 DW_LNS_set_column (16) 0x0000097e: 06 DW_LNS_negate_stmt 0x0000097f: 01 DW_LNS_copy 0x00000000000005b5 122 16 1 0 0 is_stmt 0x00000980: 00 DW_LNE_set_address (0x00000000000005ba) 0x00000987: 05 DW_LNS_set_column (14) 0x00000989: 06 DW_LNS_negate_stmt 0x0000098a: 01 DW_LNS_copy 0x00000000000005ba 122 14 1 0 0 0x0000098b: 00 DW_LNE_set_address (0x00000000000005c3) 0x00000992: 03 DW_LNS_advance_line (125) 0x00000994: 05 DW_LNS_set_column (22) 0x00000996: 06 DW_LNS_negate_stmt 0x00000997: 01 DW_LNS_copy 0x00000000000005c3 125 22 1 0 0 is_stmt 0x00000998: 00 DW_LNE_set_address (0x00000000000005d2) 0x0000099f: 03 DW_LNS_advance_line (126) 0x000009a1: 05 DW_LNS_set_column (27) 0x000009a3: 01 DW_LNS_copy 0x00000000000005d2 126 27 1 0 0 is_stmt 0x000009a4: 00 DW_LNE_set_address (0x00000000000005d7) 0x000009ab: 05 DW_LNS_set_column (13) 0x000009ad: 06 DW_LNS_negate_stmt 0x000009ae: 01 DW_LNS_copy 0x00000000000005d7 126 13 1 0 0 0x000009af: 00 DW_LNE_set_address (0x00000000000005db) 0x000009b6: 03 DW_LNS_advance_line (127) 0x000009b8: 05 DW_LNS_set_column (16) 0x000009ba: 06 DW_LNS_negate_stmt 0x000009bb: 01 DW_LNS_copy 0x00000000000005db 127 16 1 0 0 is_stmt 0x000009bc: 00 DW_LNE_set_address (0x00000000000005e3) 0x000009c3: 05 DW_LNS_set_column (27) 0x000009c5: 06 DW_LNS_negate_stmt 0x000009c6: 01 DW_LNS_copy 0x00000000000005e3 127 27 1 0 0 0x000009c7: 00 DW_LNE_set_address (0x00000000000005e5) 0x000009ce: 05 DW_LNS_set_column (35) 0x000009d0: 01 DW_LNS_copy 0x00000000000005e5 127 35 1 0 0 0x000009d1: 00 DW_LNE_set_address (0x00000000000005ee) 0x000009d8: 05 DW_LNS_set_column (27) 0x000009da: 01 DW_LNS_copy 0x00000000000005ee 127 27 1 0 0 0x000009db: 00 DW_LNE_set_address (0x00000000000005f3) 0x000009e2: 05 DW_LNS_set_column (25) 0x000009e4: 01 DW_LNS_copy 0x00000000000005f3 127 25 1 0 0 0x000009e5: 00 DW_LNE_set_address (0x00000000000005f6) 0x000009ec: 03 DW_LNS_advance_line (126) 0x000009ee: 05 DW_LNS_set_column (27) 0x000009f0: 06 DW_LNS_negate_stmt 0x000009f1: 01 DW_LNS_copy 0x00000000000005f6 126 27 1 0 0 is_stmt 0x000009f2: 00 DW_LNE_set_address (0x00000000000005fb) 0x000009f9: 05 DW_LNS_set_column (13) 0x000009fb: 06 DW_LNS_negate_stmt 0x000009fc: 01 DW_LNS_copy 0x00000000000005fb 126 13 1 0 0 0x000009fd: 00 DW_LNE_set_address (0x0000000000000603) 0x00000a04: 03 DW_LNS_advance_line (128) 0x00000a06: 06 DW_LNS_negate_stmt 0x00000a07: 01 DW_LNS_copy 0x0000000000000603 128 13 1 0 0 is_stmt 0x00000a08: 00 DW_LNE_set_address (0x000000000000060b) 0x00000a0f: 05 DW_LNS_set_column (22) 0x00000a11: 06 DW_LNS_negate_stmt 0x00000a12: 01 DW_LNS_copy 0x000000000000060b 128 22 1 0 0 0x00000a13: 00 DW_LNE_set_address (0x0000000000000610) 0x00000a1a: 03 DW_LNS_advance_line (130) 0x00000a1c: 05 DW_LNS_set_column (16) 0x00000a1e: 06 DW_LNS_negate_stmt 0x00000a1f: 01 DW_LNS_copy 0x0000000000000610 130 16 1 0 0 is_stmt 0x00000a20: 00 DW_LNE_set_address (0x0000000000000618) 0x00000a27: 05 DW_LNS_set_column (14) 0x00000a29: 06 DW_LNS_negate_stmt 0x00000a2a: 01 DW_LNS_copy 0x0000000000000618 130 14 1 0 0 0x00000a2b: 00 DW_LNE_set_address (0x0000000000000629) 0x00000a32: 05 DW_LNS_set_column (25) 0x00000a34: 01 DW_LNS_copy 0x0000000000000629 130 25 1 0 0 0x00000a35: 00 DW_LNE_set_address (0x000000000000062e) 0x00000a3c: 05 DW_LNS_set_column (14) 0x00000a3e: 01 DW_LNS_copy 0x000000000000062e 130 14 1 0 0 0x00000a3f: 00 DW_LNE_set_address (0x0000000000000630) 0x00000a46: 03 DW_LNS_advance_line (133) 0x00000a48: 05 DW_LNS_set_column (11) 0x00000a4a: 06 DW_LNS_negate_stmt 0x00000a4b: 01 DW_LNS_copy 0x0000000000000630 133 11 1 0 0 is_stmt 0x00000a4c: 00 DW_LNE_set_address (0x0000000000000635) 0x00000a53: 03 DW_LNS_advance_line (122) 0x00000a55: 05 DW_LNS_set_column (16) 0x00000a57: 01 DW_LNS_copy 0x0000000000000635 122 16 1 0 0 is_stmt 0x00000a58: 00 DW_LNE_set_address (0x000000000000063a) 0x00000a5f: 05 DW_LNS_set_column (14) 0x00000a61: 06 DW_LNS_negate_stmt 0x00000a62: 01 DW_LNS_copy 0x000000000000063a 122 14 1 0 0 0x00000a63: 00 DW_LNE_set_address (0x000000000000063f) 0x00000a6a: 03 DW_LNS_advance_line (130) 0x00000a6c: 06 DW_LNS_negate_stmt 0x00000a6d: 01 DW_LNS_copy 0x000000000000063f 130 14 1 0 0 is_stmt 0x00000a6e: 00 DW_LNE_set_address (0x0000000000000640) 0x00000a75: 03 DW_LNS_advance_line (110) 0x00000a77: 05 DW_LNS_set_column (11) 0x00000a79: 01 DW_LNS_copy 0x0000000000000640 110 11 1 0 0 is_stmt 0x00000a7a: 00 DW_LNE_set_address (0x0000000000000646) 0x00000a81: 03 DW_LNS_advance_line (138) 0x00000a83: 05 DW_LNS_set_column (4) 0x00000a85: 01 DW_LNS_copy 0x0000000000000646 138 4 1 0 0 is_stmt 0x00000a86: 00 DW_LNE_set_address (0x000000000000064a) 0x00000a8d: 03 DW_LNS_advance_line (139) 0x00000a8f: 01 DW_LNS_copy 0x000000000000064a 139 4 1 0 0 is_stmt 0x00000a90: 00 DW_LNE_set_address (0x0000000000000656) 0x00000a97: 03 DW_LNS_advance_line (141) 0x00000a99: 01 DW_LNS_copy 0x0000000000000656 141 4 1 0 0 is_stmt 0x00000a9a: 00 DW_LNE_set_address (0x0000000000000661) 0x00000aa1: 03 DW_LNS_advance_line (142) 0x00000aa3: 05 DW_LNS_set_column (20) 0x00000aa5: 01 DW_LNS_copy 0x0000000000000661 142 20 1 0 0 is_stmt 0x00000aa6: 00 DW_LNE_set_address (0x0000000000000669) 0x00000aad: 03 DW_LNS_advance_line (146) 0x00000aaf: 01 DW_LNS_copy 0x0000000000000669 146 20 1 0 0 is_stmt 0x00000ab0: 00 DW_LNE_set_address (0x0000000000000670) 0x00000ab7: 03 DW_LNS_advance_line (147) 0x00000ab9: 05 DW_LNS_set_column (7) 0x00000abb: 01 DW_LNS_copy 0x0000000000000670 147 7 1 0 0 is_stmt 0x00000abc: 00 DW_LNE_set_address (0x0000000000000674) 0x00000ac3: 03 DW_LNS_advance_line (143) 0x00000ac5: 05 DW_LNS_set_column (11) 0x00000ac7: 01 DW_LNS_copy 0x0000000000000674 143 11 1 0 0 is_stmt 0x00000ac8: 00 DW_LNE_set_address (0x0000000000000678) 0x00000acf: 05 DW_LNS_set_column (20) 0x00000ad1: 06 DW_LNS_negate_stmt 0x00000ad2: 01 DW_LNS_copy 0x0000000000000678 143 20 1 0 0 0x00000ad3: 00 DW_LNE_set_address (0x000000000000067d) 0x00000ada: 05 DW_LNS_set_column (11) 0x00000adc: 01 DW_LNS_copy 0x000000000000067d 143 11 1 0 0 0x00000add: 00 DW_LNE_set_address (0x0000000000000684) 0x00000ae4: 03 DW_LNS_advance_line (141) 0x00000ae6: 05 DW_LNS_set_column (4) 0x00000ae8: 06 DW_LNS_negate_stmt 0x00000ae9: 01 DW_LNS_copy 0x0000000000000684 141 4 1 0 0 is_stmt 0x00000aea: 00 DW_LNE_set_address (0x000000000000068a) 0x00000af1: 03 DW_LNS_advance_line (159) 0x00000af3: 01 DW_LNS_copy 0x000000000000068a 159 4 1 0 0 is_stmt 0x00000af4: 00 DW_LNE_set_address (0x00000000000006a1) 0x00000afb: 03 DW_LNS_advance_line (161) 0x00000afd: 05 DW_LNS_set_column (1) 0x00000aff: 01 DW_LNS_copy 0x00000000000006a1 161 1 1 0 0 is_stmt 0x00000b00: 00 DW_LNE_set_address (0x00000000000006ab) 0x00000b07: 00 DW_LNE_end_sequence 0x00000000000006ab 161 1 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)" 0x00000069: "/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp" 0x000000a9: "/usr/local/google/home/azakai/Dev/2-binaryen" 0x000000d6: "i" 0x000000d8: "int" 0x000000dc: "n" 0x000000de: "next" 0x000000e3: "worker_args" 0x000000ef: "std" 0x000000f3: "decltype(nullptr)" 0x00000105: "nullptr_t" 0x0000010f: "free" 0x00000114: "_ZL8fannkuchi" 0x00000122: "fannkuch" 0x0000012b: "showmax" 0x00000133: "args" 0x00000138: "targs" 0x0000013e: "perm1" 0x00000144: "count" 0x0000014a: "r" 0x0000014c: "maxflips" 0x00000155: "flips" 0x0000015b: "cleanup" 0x00000163: "p0" 0x00000166: "_Z15fannkuch_workerPv" 0x0000017c: "fannkuch_worker" 0x0000018c: "main" 0x00000191: "_arg" 0x00000196: "perm" 0x0000019b: "k" 0x0000019d: "j" 0x0000019f: "tmp" 0x000001a3: "argc" 0x000001a8: "argv" 0x000001ad: "char" .debug_ranges contents: 00000000 00000193 000001d1 00000000 000001fb 00000204 00000000 0000031e 0000035c 00000000 00000386 0000038f 00000000 00000028 000004ff 00000546 00000028 000005c3 00000610 00000028 00000040 00000006 000003a3 00000040 000003a5 000006ab 00000040 (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 1024) "Pfannkuchen(%d) = %d.\n\00%d\00Wrong argument.\00") (import "env" "__indirect_function_table" (table $timport$0 1 funcref)) (import "env" "malloc" (func $malloc (param i32) (result i32))) (import "env" "memcpy" (func $memcpy (param i32 i32 i32) (result i32))) (import "env" "free" (func $free (param i32))) (import "env" "atoi" (func $atoi (param i32) (result i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (import "env" "iprintf" (func $iprintf (param i32 i32) (result i32))) (import "env" "putchar" (func $putchar (param i32) (result i32))) (global $global$0 (mut i32) (i32.const 5243952)) (global $global$1 i32 (i32.const 1066)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $fannkuch_worker\28void*\29 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) ;; code offset: 0x29 (local.set $1 ;; code offset: 0x27 (i32.const 0) ) ;; code offset: 0x39 (local.set $4 ;; code offset: 0x37 (call $malloc ;; code offset: 0x35 (local.tee $3 ;; code offset: 0x34 (i32.shl ;; code offset: 0x30 (local.tee $2 ;; code offset: 0x2d (i32.load offset=4 ;; code offset: 0x2b (local.get $0) ) ) ;; code offset: 0x32 (i32.const 2) ) ) ) ) ;; code offset: 0x3f (local.set $5 ;; code offset: 0x3d (call $malloc ;; code offset: 0x3b (local.get $3) ) ) ;; code offset: 0x45 (local.set $6 ;; code offset: 0x43 (call $malloc ;; code offset: 0x41 (local.get $3) ) ) ;; code offset: 0x47 (block $label$1 (block $label$2 (block $label$3 ;; code offset: 0x52 (br_if $label$3 ;; code offset: 0x51 (i32.le_s ;; code offset: 0x4d (local.get $2) ;; code offset: 0x4f (i32.const 0) ) ) ;; code offset: 0x54 (loop $label$4 ;; code offset: 0x60 (i32.store ;; code offset: 0x5d (i32.add ;; code offset: 0x56 (local.get $4) ;; code offset: 0x5c (i32.shl ;; code offset: 0x58 (local.get $1) ;; code offset: 0x5a (i32.const 2) ) ) ;; code offset: 0x5e (local.get $1) ) ;; code offset: 0x6d (br_if $label$4 ;; code offset: 0x6c (i32.ne ;; code offset: 0x68 (local.tee $1 ;; code offset: 0x67 (i32.add ;; code offset: 0x63 (local.get $1) ;; code offset: 0x65 (i32.const 1) ) ) ;; code offset: 0x6a (local.get $2) ) ) ) ;; code offset: 0x84 (i32.store ;; code offset: 0x7c (i32.add ;; code offset: 0x70 (local.get $4) ;; code offset: 0x7b (i32.shl ;; code offset: 0x77 (local.tee $1 ;; code offset: 0x74 (i32.load ;; code offset: 0x72 (local.get $0) ) ) ;; code offset: 0x79 (i32.const 2) ) ) ;; code offset: 0x82 (local.tee $7 ;; code offset: 0x81 (i32.add ;; code offset: 0x7d (local.get $2) ;; code offset: 0x7f (i32.const -1) ) ) ) ;; code offset: 0x93 (i32.store ;; code offset: 0x8f (local.tee $8 ;; code offset: 0x8e (i32.add ;; code offset: 0x87 (local.get $4) ;; code offset: 0x8d (i32.shl ;; code offset: 0x89 (local.get $7) ;; code offset: 0x8b (i32.const 2) ) ) ) ;; code offset: 0x91 (local.get $1) ) ;; code offset: 0x98 (local.set $9 ;; code offset: 0x96 (i32.const 0) ) ;; code offset: 0x9f (br_if $label$2 ;; code offset: 0x9e (i32.le_s ;; code offset: 0x9a (local.get $2) ;; code offset: 0x9c (i32.const 0) ) ) ;; code offset: 0xa1 (loop $label$5 ;; code offset: 0xa3 (block $label$6 ;; code offset: 0xaa (br_if $label$6 ;; code offset: 0xa9 (i32.le_s ;; code offset: 0xa5 (local.get $2) ;; code offset: 0xa7 (i32.const 1) ) ) ;; code offset: 0xac (loop $label$7 ;; code offset: 0xbd (i32.store ;; code offset: 0xba (i32.add ;; code offset: 0xae (local.get $6) ;; code offset: 0xb9 (i32.shl ;; code offset: 0xb5 (local.tee $1 ;; code offset: 0xb4 (i32.add ;; code offset: 0xb0 (local.get $2) ;; code offset: 0xb2 (i32.const -1) ) ) ;; code offset: 0xb7 (i32.const 2) ) ) ;; code offset: 0xbb (local.get $2) ) ;; code offset: 0xc5 (local.set $0 ;; code offset: 0xc4 (i32.gt_s ;; code offset: 0xc0 (local.get $2) ;; code offset: 0xc2 (i32.const 2) ) ) ;; code offset: 0xc9 (local.set $2 ;; code offset: 0xc7 (local.get $1) ) ;; code offset: 0xcd (br_if $label$7 ;; code offset: 0xcb (local.get $0) ) ) ) ;; code offset: 0xd1 (block $label$8 ;; code offset: 0xdb (br_if $label$8 ;; code offset: 0xda (i32.eqz ;; code offset: 0xd8 (local.tee $10 ;; code offset: 0xd5 (i32.load ;; code offset: 0xd3 (local.get $4) ) ) ) ) ;; code offset: 0xe5 (br_if $label$8 ;; code offset: 0xe4 (i32.eq ;; code offset: 0xdf (i32.load ;; code offset: 0xdd (local.get $8) ) ;; code offset: 0xe2 (local.get $7) ) ) ;; code offset: 0xf4 (local.set $12 ;; code offset: 0xf1 (i32.load ;; code offset: 0xef (local.tee $11 ;; code offset: 0xed (call $memcpy ;; code offset: 0xe7 (local.get $5) ;; code offset: 0xe9 (local.get $4) ;; code offset: 0xeb (local.get $3) ) ) ) ) ;; code offset: 0xf8 (local.set $0 ;; code offset: 0xf6 (i32.const 0) ) ;; code offset: 0xfa (loop $label$9 ;; code offset: 0xfe (local.set $13 ;; code offset: 0xfc (local.get $0) ) ;; code offset: 0x100 (block $label$10 ;; code offset: 0x107 (br_if $label$10 ;; code offset: 0x106 (i32.lt_s ;; code offset: 0x102 (local.get $12) ;; code offset: 0x104 (i32.const 3) ) ) ;; code offset: 0x10e (local.set $1 ;; code offset: 0x10d (i32.add ;; code offset: 0x109 (local.get $12) ;; code offset: 0x10b (i32.const -1) ) ) ;; code offset: 0x112 (local.set $0 ;; code offset: 0x110 (i32.const 1) ) ;; code offset: 0x114 (loop $label$11 ;; code offset: 0x123 (local.set $15 ;; code offset: 0x120 (i32.load ;; code offset: 0x11e (local.tee $14 ;; code offset: 0x11d (i32.add ;; code offset: 0x116 (local.get $11) ;; code offset: 0x11c (i32.shl ;; code offset: 0x118 (local.get $0) ;; code offset: 0x11a (i32.const 2) ) ) ) ) ) ;; code offset: 0x134 (i32.store ;; code offset: 0x125 (local.get $14) ;; code offset: 0x131 (i32.load ;; code offset: 0x12f (local.tee $16 ;; code offset: 0x12e (i32.add ;; code offset: 0x127 (local.get $11) ;; code offset: 0x12d (i32.shl ;; code offset: 0x129 (local.get $1) ;; code offset: 0x12b (i32.const 2) ) ) ) ) ) ;; code offset: 0x13b (i32.store ;; code offset: 0x137 (local.get $16) ;; code offset: 0x139 (local.get $15) ) ;; code offset: 0x14d (br_if $label$11 ;; code offset: 0x14c (i32.lt_s ;; code offset: 0x143 (local.tee $0 ;; code offset: 0x142 (i32.add ;; code offset: 0x13e (local.get $0) ;; code offset: 0x140 (i32.const 1) ) ) ;; code offset: 0x14a (local.tee $1 ;; code offset: 0x149 (i32.add ;; code offset: 0x145 (local.get $1) ;; code offset: 0x147 (i32.const -1) ) ) ) ) ) ) ;; code offset: 0x15e (local.set $1 ;; code offset: 0x15b (i32.load ;; code offset: 0x159 (local.tee $0 ;; code offset: 0x158 (i32.add ;; code offset: 0x151 (local.get $11) ;; code offset: 0x157 (i32.shl ;; code offset: 0x153 (local.get $12) ;; code offset: 0x155 (i32.const 2) ) ) ) ) ) ;; code offset: 0x164 (i32.store ;; code offset: 0x160 (local.get $0) ;; code offset: 0x162 (local.get $12) ) ;; code offset: 0x16c (local.set $0 ;; code offset: 0x16b (i32.add ;; code offset: 0x167 (local.get $13) ;; code offset: 0x169 (i32.const 1) ) ) ;; code offset: 0x170 (local.set $12 ;; code offset: 0x16e (local.get $1) ) ;; code offset: 0x174 (br_if $label$9 ;; code offset: 0x172 (local.get $1) ) ) ;; code offset: 0x181 (local.set $9 ;; code offset: 0x180 (select ;; code offset: 0x177 (local.get $9) ;; code offset: 0x179 (local.get $0) ;; code offset: 0x17f (i32.gt_s ;; code offset: 0x17b (local.get $9) ;; code offset: 0x17d (local.get $13) ) ) ) ) ;; code offset: 0x189 (br_if $label$1 ;; code offset: 0x188 (i32.ge_s ;; code offset: 0x184 (local.get $2) ;; code offset: 0x186 (local.get $7) ) ) ;; code offset: 0x18b (loop $label$12 ;; code offset: 0x18f (local.set $1 ;; code offset: 0x18d (i32.const 0) ) ;; code offset: 0x191 (block $label$13 ;; code offset: 0x198 (br_if $label$13 ;; code offset: 0x197 (i32.le_s ;; code offset: 0x193 (local.get $2) ;; code offset: 0x195 (i32.const 0) ) ) ;; code offset: 0x19a (loop $label$14 ;; code offset: 0x1b4 (i32.store ;; code offset: 0x1a3 (i32.add ;; code offset: 0x19c (local.get $4) ;; code offset: 0x1a2 (i32.shl ;; code offset: 0x19e (local.get $1) ;; code offset: 0x1a0 (i32.const 2) ) ) ;; code offset: 0x1b1 (i32.load ;; code offset: 0x1b0 (i32.add ;; code offset: 0x1a4 (local.get $4) ;; code offset: 0x1af (i32.shl ;; code offset: 0x1ab (local.tee $1 ;; code offset: 0x1aa (i32.add ;; code offset: 0x1a6 (local.get $1) ;; code offset: 0x1a8 (i32.const 1) ) ) ;; code offset: 0x1ad (i32.const 2) ) ) ) ) ;; code offset: 0x1bc (br_if $label$14 ;; code offset: 0x1bb (i32.ne ;; code offset: 0x1b7 (local.get $1) ;; code offset: 0x1b9 (local.get $2) ) ) ) ;; code offset: 0x1c1 (local.set $1 ;; code offset: 0x1bf (local.get $2) ) ) ;; code offset: 0x1ce (i32.store ;; code offset: 0x1cb (i32.add ;; code offset: 0x1c4 (local.get $4) ;; code offset: 0x1ca (i32.shl ;; code offset: 0x1c6 (local.get $1) ;; code offset: 0x1c8 (i32.const 2) ) ) ;; code offset: 0x1cc (local.get $10) ) ;; code offset: 0x1e5 (i32.store ;; code offset: 0x1d9 (local.tee $1 ;; code offset: 0x1d8 (i32.add ;; code offset: 0x1d1 (local.get $6) ;; code offset: 0x1d7 (i32.shl ;; code offset: 0x1d3 (local.get $2) ;; code offset: 0x1d5 (i32.const 2) ) ) ) ;; code offset: 0x1e4 (i32.add ;; code offset: 0x1e0 (local.tee $1 ;; code offset: 0x1dd (i32.load ;; code offset: 0x1db (local.get $1) ) ) ;; code offset: 0x1e2 (i32.const -1) ) ) ;; code offset: 0x1ed (br_if $label$5 ;; code offset: 0x1ec (i32.gt_s ;; code offset: 0x1e8 (local.get $1) ;; code offset: 0x1ea (i32.const 1) ) ) ;; code offset: 0x1f9 (br_if $label$1 ;; code offset: 0x1f8 (i32.eq ;; code offset: 0x1f4 (local.tee $2 ;; code offset: 0x1f3 (i32.add ;; code offset: 0x1ef (local.get $2) ;; code offset: 0x1f1 (i32.const 1) ) ) ;; code offset: 0x1f6 (local.get $7) ) ) ;; code offset: 0x200 (local.set $10 ;; code offset: 0x1fd (i32.load ;; code offset: 0x1fb (local.get $4) ) ) ;; code offset: 0x202 (br $label$12) ) ) ) ;; code offset: 0x21d (i32.store ;; code offset: 0x215 (i32.add ;; code offset: 0x209 (local.get $4) ;; code offset: 0x214 (i32.shl ;; code offset: 0x210 (local.tee $1 ;; code offset: 0x20d (i32.load ;; code offset: 0x20b (local.get $0) ) ) ;; code offset: 0x212 (i32.const 2) ) ) ;; code offset: 0x21b (local.tee $7 ;; code offset: 0x21a (i32.add ;; code offset: 0x216 (local.get $2) ;; code offset: 0x218 (i32.const -1) ) ) ) ;; code offset: 0x22c (i32.store ;; code offset: 0x228 (local.tee $8 ;; code offset: 0x227 (i32.add ;; code offset: 0x220 (local.get $4) ;; code offset: 0x226 (i32.shl ;; code offset: 0x222 (local.get $7) ;; code offset: 0x224 (i32.const 2) ) ) ) ;; code offset: 0x22a (local.get $1) ) ) ;; code offset: 0x232 (local.set $9 ;; code offset: 0x230 (i32.const 0) ) ;; code offset: 0x234 (loop $label$15 ;; code offset: 0x236 (block $label$16 ;; code offset: 0x23d (br_if $label$16 ;; code offset: 0x23c (i32.lt_s ;; code offset: 0x238 (local.get $2) ;; code offset: 0x23a (i32.const 2) ) ) ;; code offset: 0x23f (loop $label$17 ;; code offset: 0x250 (i32.store ;; code offset: 0x24d (i32.add ;; code offset: 0x241 (local.get $6) ;; code offset: 0x24c (i32.shl ;; code offset: 0x248 (local.tee $1 ;; code offset: 0x247 (i32.add ;; code offset: 0x243 (local.get $2) ;; code offset: 0x245 (i32.const -1) ) ) ;; code offset: 0x24a (i32.const 2) ) ) ;; code offset: 0x24e (local.get $2) ) ;; code offset: 0x258 (local.set $0 ;; code offset: 0x257 (i32.gt_s ;; code offset: 0x253 (local.get $2) ;; code offset: 0x255 (i32.const 2) ) ) ;; code offset: 0x25c (local.set $2 ;; code offset: 0x25a (local.get $1) ) ;; code offset: 0x260 (br_if $label$17 ;; code offset: 0x25e (local.get $0) ) ) ) ;; code offset: 0x264 (block $label$18 ;; code offset: 0x26e (br_if $label$18 ;; code offset: 0x26d (i32.eqz ;; code offset: 0x26b (local.tee $12 ;; code offset: 0x268 (i32.load ;; code offset: 0x266 (local.get $4) ) ) ) ) ;; code offset: 0x278 (br_if $label$18 ;; code offset: 0x277 (i32.eq ;; code offset: 0x272 (i32.load ;; code offset: 0x270 (local.get $8) ) ;; code offset: 0x275 (local.get $7) ) ) ;; code offset: 0x27f (local.set $16 ;; code offset: 0x27c (i32.load ;; code offset: 0x27a (local.get $5) ) ) ;; code offset: 0x283 (local.set $0 ;; code offset: 0x281 (i32.const 0) ) ;; code offset: 0x285 (loop $label$19 ;; code offset: 0x289 (local.set $10 ;; code offset: 0x287 (local.get $0) ) ;; code offset: 0x28b (block $label$20 ;; code offset: 0x292 (br_if $label$20 ;; code offset: 0x291 (i32.lt_s ;; code offset: 0x28d (local.get $16) ;; code offset: 0x28f (i32.const 3) ) ) ;; code offset: 0x299 (local.set $1 ;; code offset: 0x298 (i32.add ;; code offset: 0x294 (local.get $16) ;; code offset: 0x296 (i32.const -1) ) ) ;; code offset: 0x29d (local.set $0 ;; code offset: 0x29b (i32.const 1) ) ;; code offset: 0x29f (loop $label$21 ;; code offset: 0x2ae (local.set $14 ;; code offset: 0x2ab (i32.load ;; code offset: 0x2a9 (local.tee $11 ;; code offset: 0x2a8 (i32.add ;; code offset: 0x2a1 (local.get $5) ;; code offset: 0x2a7 (i32.shl ;; code offset: 0x2a3 (local.get $0) ;; code offset: 0x2a5 (i32.const 2) ) ) ) ) ) ;; code offset: 0x2bf (i32.store ;; code offset: 0x2b0 (local.get $11) ;; code offset: 0x2bc (i32.load ;; code offset: 0x2ba (local.tee $15 ;; code offset: 0x2b9 (i32.add ;; code offset: 0x2b2 (local.get $5) ;; code offset: 0x2b8 (i32.shl ;; code offset: 0x2b4 (local.get $1) ;; code offset: 0x2b6 (i32.const 2) ) ) ) ) ) ;; code offset: 0x2c6 (i32.store ;; code offset: 0x2c2 (local.get $15) ;; code offset: 0x2c4 (local.get $14) ) ;; code offset: 0x2d8 (br_if $label$21 ;; code offset: 0x2d7 (i32.lt_s ;; code offset: 0x2ce (local.tee $0 ;; code offset: 0x2cd (i32.add ;; code offset: 0x2c9 (local.get $0) ;; code offset: 0x2cb (i32.const 1) ) ) ;; code offset: 0x2d5 (local.tee $1 ;; code offset: 0x2d4 (i32.add ;; code offset: 0x2d0 (local.get $1) ;; code offset: 0x2d2 (i32.const -1) ) ) ) ) ) ) ;; code offset: 0x2e9 (local.set $1 ;; code offset: 0x2e6 (i32.load ;; code offset: 0x2e4 (local.tee $0 ;; code offset: 0x2e3 (i32.add ;; code offset: 0x2dc (local.get $5) ;; code offset: 0x2e2 (i32.shl ;; code offset: 0x2de (local.get $16) ;; code offset: 0x2e0 (i32.const 2) ) ) ) ) ) ;; code offset: 0x2ef (i32.store ;; code offset: 0x2eb (local.get $0) ;; code offset: 0x2ed (local.get $16) ) ;; code offset: 0x2f7 (local.set $0 ;; code offset: 0x2f6 (i32.add ;; code offset: 0x2f2 (local.get $10) ;; code offset: 0x2f4 (i32.const 1) ) ) ;; code offset: 0x2fb (local.set $16 ;; code offset: 0x2f9 (local.get $1) ) ;; code offset: 0x2ff (br_if $label$19 ;; code offset: 0x2fd (local.get $1) ) ) ;; code offset: 0x30c (local.set $9 ;; code offset: 0x30b (select ;; code offset: 0x302 (local.get $9) ;; code offset: 0x304 (local.get $0) ;; code offset: 0x30a (i32.gt_s ;; code offset: 0x306 (local.get $9) ;; code offset: 0x308 (local.get $10) ) ) ) ) ;; code offset: 0x314 (br_if $label$1 ;; code offset: 0x313 (i32.ge_s ;; code offset: 0x30f (local.get $2) ;; code offset: 0x311 (local.get $7) ) ) ;; code offset: 0x316 (loop $label$22 ;; code offset: 0x31a (local.set $1 ;; code offset: 0x318 (i32.const 0) ) ;; code offset: 0x31c (block $label$23 ;; code offset: 0x323 (br_if $label$23 ;; code offset: 0x322 (i32.lt_s ;; code offset: 0x31e (local.get $2) ;; code offset: 0x320 (i32.const 1) ) ) ;; code offset: 0x325 (loop $label$24 ;; code offset: 0x33f (i32.store ;; code offset: 0x32e (i32.add ;; code offset: 0x327 (local.get $4) ;; code offset: 0x32d (i32.shl ;; code offset: 0x329 (local.get $1) ;; code offset: 0x32b (i32.const 2) ) ) ;; code offset: 0x33c (i32.load ;; code offset: 0x33b (i32.add ;; code offset: 0x32f (local.get $4) ;; code offset: 0x33a (i32.shl ;; code offset: 0x336 (local.tee $1 ;; code offset: 0x335 (i32.add ;; code offset: 0x331 (local.get $1) ;; code offset: 0x333 (i32.const 1) ) ) ;; code offset: 0x338 (i32.const 2) ) ) ) ) ;; code offset: 0x347 (br_if $label$24 ;; code offset: 0x346 (i32.ne ;; code offset: 0x342 (local.get $1) ;; code offset: 0x344 (local.get $2) ) ) ) ;; code offset: 0x34c (local.set $1 ;; code offset: 0x34a (local.get $2) ) ) ;; code offset: 0x359 (i32.store ;; code offset: 0x356 (i32.add ;; code offset: 0x34f (local.get $4) ;; code offset: 0x355 (i32.shl ;; code offset: 0x351 (local.get $1) ;; code offset: 0x353 (i32.const 2) ) ) ;; code offset: 0x357 (local.get $12) ) ;; code offset: 0x370 (i32.store ;; code offset: 0x364 (local.tee $1 ;; code offset: 0x363 (i32.add ;; code offset: 0x35c (local.get $6) ;; code offset: 0x362 (i32.shl ;; code offset: 0x35e (local.get $2) ;; code offset: 0x360 (i32.const 2) ) ) ) ;; code offset: 0x36f (i32.add ;; code offset: 0x36b (local.tee $1 ;; code offset: 0x368 (i32.load ;; code offset: 0x366 (local.get $1) ) ) ;; code offset: 0x36d (i32.const -1) ) ) ;; code offset: 0x378 (br_if $label$15 ;; code offset: 0x377 (i32.gt_s ;; code offset: 0x373 (local.get $1) ;; code offset: 0x375 (i32.const 1) ) ) ;; code offset: 0x384 (br_if $label$1 ;; code offset: 0x383 (i32.eq ;; code offset: 0x37f (local.tee $2 ;; code offset: 0x37e (i32.add ;; code offset: 0x37a (local.get $2) ;; code offset: 0x37c (i32.const 1) ) ) ;; code offset: 0x381 (local.get $7) ) ) ;; code offset: 0x38b (local.set $12 ;; code offset: 0x388 (i32.load ;; code offset: 0x386 (local.get $4) ) ) ;; code offset: 0x38d (br $label$22) ) ) ) ;; code offset: 0x396 (call $free ;; code offset: 0x394 (local.get $4) ) ;; code offset: 0x39a (call $free ;; code offset: 0x398 (local.get $5) ) ;; code offset: 0x39e (call $free ;; code offset: 0x39c (local.get $6) ) ;; code offset: 0x3a0 (local.get $9) ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) ;; code offset: 0x3bb (global.set $global$0 ;; code offset: 0x3b9 (local.tee $2 ;; code offset: 0x3b8 (i32.sub ;; code offset: 0x3b4 (global.get $global$0) ;; code offset: 0x3b6 (i32.const 32) ) ) ) ;; code offset: 0x3bd (block $label$1 (block $label$2 (block $label$3 ;; code offset: 0x3c8 (br_if $label$3 ;; code offset: 0x3c7 (i32.lt_s ;; code offset: 0x3c3 (local.get $0) ;; code offset: 0x3c5 (i32.const 2) ) ) ;; code offset: 0x3cc (local.set $3 ;; code offset: 0x3ca (i32.const 0) ) ;; code offset: 0x3da (br_if $label$2 ;; code offset: 0x3d9 (i32.gt_s ;; code offset: 0x3d5 (local.tee $4 ;; code offset: 0x3d3 (call $atoi ;; code offset: 0x3d0 (i32.load offset=4 ;; code offset: 0x3ce (local.get $1) ) ) ) ;; code offset: 0x3d7 (i32.const 0) ) ) ) ;; code offset: 0x3e2 (drop ;; code offset: 0x3e0 (call $puts ;; code offset: 0x3dd (i32.const 1050) ) ) ;; code offset: 0x3e5 (local.set $5 ;; code offset: 0x3e3 (i32.const 1) ) ;; code offset: 0x3e7 (br $label$1) ) ;; code offset: 0x3ea (block $label$4 ;; code offset: 0x3f1 (br_if $label$4 ;; code offset: 0x3f0 (i32.eq ;; code offset: 0x3ec (local.get $4) ;; code offset: 0x3ee (i32.const 1) ) ) ;; code offset: 0x3f8 (local.set $6 ;; code offset: 0x3f7 (i32.add ;; code offset: 0x3f3 (local.get $4) ;; code offset: 0x3f5 (i32.const -1) ) ) ;; code offset: 0x3fc (local.set $1 ;; code offset: 0x3fa (i32.const 0) ) ;; code offset: 0x400 (local.set $0 ;; code offset: 0x3fe (i32.const 0) ) ;; code offset: 0x402 (loop $label$5 ;; code offset: 0x40c (i32.store offset=8 ;; code offset: 0x408 (local.tee $3 ;; code offset: 0x406 (call $malloc ;; code offset: 0x404 (i32.const 12) ) ) ;; code offset: 0x40a (local.get $1) ) ;; code offset: 0x413 (i32.store offset=4 ;; code offset: 0x40f (local.get $3) ;; code offset: 0x411 (local.get $4) ) ;; code offset: 0x41a (i32.store ;; code offset: 0x416 (local.get $3) ;; code offset: 0x418 (local.get $0) ) ;; code offset: 0x41f (local.set $1 ;; code offset: 0x41d (local.get $3) ) ;; code offset: 0x42b (br_if $label$5 ;; code offset: 0x42a (i32.ne ;; code offset: 0x426 (local.tee $0 ;; code offset: 0x425 (i32.add ;; code offset: 0x421 (local.get $0) ;; code offset: 0x423 (i32.const 1) ) ) ;; code offset: 0x428 (local.get $6) ) ) ) ) ;; code offset: 0x431 (local.set $0 ;; code offset: 0x42f (i32.const 0) ) ;; code offset: 0x43c (local.set $1 ;; code offset: 0x43a (call $malloc ;; code offset: 0x438 (local.tee $6 ;; code offset: 0x437 (i32.shl ;; code offset: 0x433 (local.get $4) ;; code offset: 0x435 (i32.const 2) ) ) ) ) ;; code offset: 0x442 (local.set $5 ;; code offset: 0x440 (call $malloc ;; code offset: 0x43e (local.get $6) ) ) ;; code offset: 0x444 (block $label$6 (block $label$7 (block $label$8 (block $label$9 ;; code offset: 0x451 (br_if $label$9 ;; code offset: 0x450 (i32.le_s ;; code offset: 0x44c (local.get $4) ;; code offset: 0x44e (i32.const 0) ) ) ;; code offset: 0x453 (loop $label$10 ;; code offset: 0x45f (i32.store ;; code offset: 0x45c (i32.add ;; code offset: 0x455 (local.get $1) ;; code offset: 0x45b (i32.shl ;; code offset: 0x457 (local.get $0) ;; code offset: 0x459 (i32.const 2) ) ) ;; code offset: 0x45d (local.get $0) ) ;; code offset: 0x46c (br_if $label$10 ;; code offset: 0x46b (i32.ne ;; code offset: 0x467 (local.tee $0 ;; code offset: 0x466 (i32.add ;; code offset: 0x462 (local.get $0) ;; code offset: 0x464 (i32.const 1) ) ) ;; code offset: 0x469 (local.get $4) ) ) ) ;; code offset: 0x471 (local.set $7 ;; code offset: 0x46f (i32.const 30) ) ;; code offset: 0x475 (local.set $6 ;; code offset: 0x473 (local.get $4) ) ;; code offset: 0x477 (br $label$8) ) ;; code offset: 0x47c (local.set $7 ;; code offset: 0x47a (i32.const 30) ) ;; code offset: 0x480 (local.set $6 ;; code offset: 0x47e (local.get $4) ) ;; code offset: 0x482 (br $label$7) ) ;; code offset: 0x485 (loop $label$11 ;; code offset: 0x489 (local.set $0 ;; code offset: 0x487 (i32.const 0) ) ;; code offset: 0x48b (loop $label$12 ;; code offset: 0x49d (i32.store offset=16 ;; code offset: 0x48d (local.get $2) ;; code offset: 0x49c (i32.add ;; code offset: 0x497 (i32.load ;; code offset: 0x496 (i32.add ;; code offset: 0x48f (local.get $1) ;; code offset: 0x495 (i32.shl ;; code offset: 0x491 (local.get $0) ;; code offset: 0x493 (i32.const 2) ) ) ) ;; code offset: 0x49a (i32.const 1) ) ) ;; code offset: 0x4aa (drop ;; code offset: 0x4a8 (call $iprintf ;; code offset: 0x4a0 (i32.const 1047) ;; code offset: 0x4a7 (i32.add ;; code offset: 0x4a3 (local.get $2) ;; code offset: 0x4a5 (i32.const 16) ) ) ) ;; code offset: 0x4b5 (br_if $label$12 ;; code offset: 0x4b4 (i32.ne ;; code offset: 0x4b0 (local.tee $0 ;; code offset: 0x4af (i32.add ;; code offset: 0x4ab (local.get $0) ;; code offset: 0x4ad (i32.const 1) ) ) ;; code offset: 0x4b2 (local.get $4) ) ) ) ;; code offset: 0x4bc (drop ;; code offset: 0x4ba (call $putchar ;; code offset: 0x4b8 (i32.const 10) ) ) ;; code offset: 0x4bd (block $label$13 ;; code offset: 0x4c4 (br_if $label$13 ;; code offset: 0x4c3 (i32.le_s ;; code offset: 0x4bf (local.get $6) ;; code offset: 0x4c1 (i32.const 1) ) ) ;; code offset: 0x4c6 (loop $label$14 ;; code offset: 0x4d7 (i32.store ;; code offset: 0x4d4 (i32.add ;; code offset: 0x4c8 (local.get $5) ;; code offset: 0x4d3 (i32.shl ;; code offset: 0x4cf (local.tee $0 ;; code offset: 0x4ce (i32.add ;; code offset: 0x4ca (local.get $6) ;; code offset: 0x4cc (i32.const -1) ) ) ;; code offset: 0x4d1 (i32.const 2) ) ) ;; code offset: 0x4d5 (local.get $6) ) ;; code offset: 0x4df (local.set $8 ;; code offset: 0x4de (i32.gt_s ;; code offset: 0x4da (local.get $6) ;; code offset: 0x4dc (i32.const 2) ) ) ;; code offset: 0x4e3 (local.set $6 ;; code offset: 0x4e1 (local.get $0) ) ;; code offset: 0x4e7 (br_if $label$14 ;; code offset: 0x4e5 (local.get $8) ) ) ) ;; code offset: 0x4f0 (br_if $label$6 ;; code offset: 0x4ef (i32.eq ;; code offset: 0x4eb (local.get $6) ;; code offset: 0x4ed (local.get $4) ) ) ;; code offset: 0x4f7 (local.set $7 ;; code offset: 0x4f6 (i32.add ;; code offset: 0x4f2 (local.get $7) ;; code offset: 0x4f4 (i32.const -1) ) ) ;; code offset: 0x4f9 (loop $label$15 ;; code offset: 0x4fd (local.set $0 ;; code offset: 0x4fb (i32.const 0) ) ;; code offset: 0x504 (local.set $8 ;; code offset: 0x501 (i32.load ;; code offset: 0x4ff (local.get $1) ) ) ;; code offset: 0x506 (block $label$16 ;; code offset: 0x50d (br_if $label$16 ;; code offset: 0x50c (i32.le_s ;; code offset: 0x508 (local.get $6) ;; code offset: 0x50a (i32.const 0) ) ) ;; code offset: 0x50f (loop $label$17 ;; code offset: 0x529 (i32.store ;; code offset: 0x518 (i32.add ;; code offset: 0x511 (local.get $1) ;; code offset: 0x517 (i32.shl ;; code offset: 0x513 (local.get $0) ;; code offset: 0x515 (i32.const 2) ) ) ;; code offset: 0x526 (i32.load ;; code offset: 0x525 (i32.add ;; code offset: 0x519 (local.get $1) ;; code offset: 0x524 (i32.shl ;; code offset: 0x520 (local.tee $0 ;; code offset: 0x51f (i32.add ;; code offset: 0x51b (local.get $0) ;; code offset: 0x51d (i32.const 1) ) ) ;; code offset: 0x522 (i32.const 2) ) ) ) ) ;; code offset: 0x531 (br_if $label$17 ;; code offset: 0x530 (i32.ne ;; code offset: 0x52c (local.get $0) ;; code offset: 0x52e (local.get $6) ) ) ) ;; code offset: 0x536 (local.set $0 ;; code offset: 0x534 (local.get $6) ) ) ;; code offset: 0x543 (i32.store ;; code offset: 0x540 (i32.add ;; code offset: 0x539 (local.get $1) ;; code offset: 0x53f (i32.shl ;; code offset: 0x53b (local.get $0) ;; code offset: 0x53d (i32.const 2) ) ) ;; code offset: 0x541 (local.get $8) ) ;; code offset: 0x55a (i32.store ;; code offset: 0x54e (local.tee $0 ;; code offset: 0x54d (i32.add ;; code offset: 0x546 (local.get $5) ;; code offset: 0x54c (i32.shl ;; code offset: 0x548 (local.get $6) ;; code offset: 0x54a (i32.const 2) ) ) ) ;; code offset: 0x559 (i32.add ;; code offset: 0x555 (local.tee $0 ;; code offset: 0x552 (i32.load ;; code offset: 0x550 (local.get $0) ) ) ;; code offset: 0x557 (i32.const -1) ) ) ;; code offset: 0x55d (block $label$18 ;; code offset: 0x564 (br_if $label$18 ;; code offset: 0x563 (i32.gt_s ;; code offset: 0x55f (local.get $0) ;; code offset: 0x561 (i32.const 1) ) ) ;; code offset: 0x570 (br_if $label$15 ;; code offset: 0x56f (i32.ne ;; code offset: 0x56b (local.tee $6 ;; code offset: 0x56a (i32.add ;; code offset: 0x566 (local.get $6) ;; code offset: 0x568 (i32.const 1) ) ) ;; code offset: 0x56d (local.get $4) ) ) ;; code offset: 0x572 (br $label$6) ) ) ;; code offset: 0x579 (br_if $label$6 ;; code offset: 0x578 (i32.eqz ;; code offset: 0x576 (local.get $7) ) ) ;; code offset: 0x57b (br $label$11) ) ) ;; code offset: 0x580 (loop $label$19 ;; code offset: 0x586 (drop ;; code offset: 0x584 (call $putchar ;; code offset: 0x582 (i32.const 10) ) ) ;; code offset: 0x587 (block $label$20 ;; code offset: 0x58e (br_if $label$20 ;; code offset: 0x58d (i32.le_s ;; code offset: 0x589 (local.get $6) ;; code offset: 0x58b (i32.const 1) ) ) ;; code offset: 0x590 (loop $label$21 ;; code offset: 0x5a1 (i32.store ;; code offset: 0x59e (i32.add ;; code offset: 0x592 (local.get $5) ;; code offset: 0x59d (i32.shl ;; code offset: 0x599 (local.tee $0 ;; code offset: 0x598 (i32.add ;; code offset: 0x594 (local.get $6) ;; code offset: 0x596 (i32.const -1) ) ) ;; code offset: 0x59b (i32.const 2) ) ) ;; code offset: 0x59f (local.get $6) ) ;; code offset: 0x5a9 (local.set $8 ;; code offset: 0x5a8 (i32.gt_s ;; code offset: 0x5a4 (local.get $6) ;; code offset: 0x5a6 (i32.const 2) ) ) ;; code offset: 0x5ad (local.set $6 ;; code offset: 0x5ab (local.get $0) ) ;; code offset: 0x5b1 (br_if $label$21 ;; code offset: 0x5af (local.get $8) ) ) ) ;; code offset: 0x5ba (br_if $label$6 ;; code offset: 0x5b9 (i32.eq ;; code offset: 0x5b5 (local.get $6) ;; code offset: 0x5b7 (local.get $4) ) ) ;; code offset: 0x5c1 (local.set $7 ;; code offset: 0x5c0 (i32.add ;; code offset: 0x5bc (local.get $7) ;; code offset: 0x5be (i32.const -1) ) ) ;; code offset: 0x5c3 (loop $label$22 ;; code offset: 0x5ca (local.set $8 ;; code offset: 0x5c7 (i32.load ;; code offset: 0x5c5 (local.get $1) ) ) ;; code offset: 0x5ce (local.set $0 ;; code offset: 0x5cc (i32.const 0) ) ;; code offset: 0x5d0 (block $label$23 ;; code offset: 0x5d7 (br_if $label$23 ;; code offset: 0x5d6 (i32.lt_s ;; code offset: 0x5d2 (local.get $6) ;; code offset: 0x5d4 (i32.const 1) ) ) ;; code offset: 0x5d9 (loop $label$24 ;; code offset: 0x5f3 (i32.store ;; code offset: 0x5e2 (i32.add ;; code offset: 0x5db (local.get $1) ;; code offset: 0x5e1 (i32.shl ;; code offset: 0x5dd (local.get $0) ;; code offset: 0x5df (i32.const 2) ) ) ;; code offset: 0x5f0 (i32.load ;; code offset: 0x5ef (i32.add ;; code offset: 0x5e3 (local.get $1) ;; code offset: 0x5ee (i32.shl ;; code offset: 0x5ea (local.tee $0 ;; code offset: 0x5e9 (i32.add ;; code offset: 0x5e5 (local.get $0) ;; code offset: 0x5e7 (i32.const 1) ) ) ;; code offset: 0x5ec (i32.const 2) ) ) ) ) ;; code offset: 0x5fb (br_if $label$24 ;; code offset: 0x5fa (i32.ne ;; code offset: 0x5f6 (local.get $0) ;; code offset: 0x5f8 (local.get $6) ) ) ) ;; code offset: 0x600 (local.set $0 ;; code offset: 0x5fe (local.get $6) ) ) ;; code offset: 0x60d (i32.store ;; code offset: 0x60a (i32.add ;; code offset: 0x603 (local.get $1) ;; code offset: 0x609 (i32.shl ;; code offset: 0x605 (local.get $0) ;; code offset: 0x607 (i32.const 2) ) ) ;; code offset: 0x60b (local.get $8) ) ;; code offset: 0x624 (i32.store ;; code offset: 0x618 (local.tee $0 ;; code offset: 0x617 (i32.add ;; code offset: 0x610 (local.get $5) ;; code offset: 0x616 (i32.shl ;; code offset: 0x612 (local.get $6) ;; code offset: 0x614 (i32.const 2) ) ) ) ;; code offset: 0x623 (i32.add ;; code offset: 0x61f (local.tee $0 ;; code offset: 0x61c (i32.load ;; code offset: 0x61a (local.get $0) ) ) ;; code offset: 0x621 (i32.const -1) ) ) ;; code offset: 0x627 (block $label$25 ;; code offset: 0x62e (br_if $label$25 ;; code offset: 0x62d (i32.gt_s ;; code offset: 0x629 (local.get $0) ;; code offset: 0x62b (i32.const 1) ) ) ;; code offset: 0x63a (br_if $label$22 ;; code offset: 0x639 (i32.ne ;; code offset: 0x635 (local.tee $6 ;; code offset: 0x634 (i32.add ;; code offset: 0x630 (local.get $6) ;; code offset: 0x632 (i32.const 1) ) ) ;; code offset: 0x637 (local.get $4) ) ) ;; code offset: 0x63c (br $label$6) ) ) ;; code offset: 0x642 (br_if $label$19 ;; code offset: 0x640 (local.get $7) ) ) ) ;; code offset: 0x648 (call $free ;; code offset: 0x646 (local.get $1) ) ;; code offset: 0x64c (call $free ;; code offset: 0x64a (local.get $5) ) ;; code offset: 0x650 (local.set $5 ;; code offset: 0x64e (i32.const 0) ) ;; code offset: 0x654 (local.set $0 ;; code offset: 0x652 (i32.const 0) ) ;; code offset: 0x656 (block $label$26 ;; code offset: 0x65b (br_if $label$26 ;; code offset: 0x65a (i32.eqz ;; code offset: 0x658 (local.get $3) ) ) ;; code offset: 0x65f (local.set $0 ;; code offset: 0x65d (i32.const 0) ) ;; code offset: 0x661 (loop $label$27 ;; code offset: 0x667 (local.set $1 ;; code offset: 0x665 (call $fannkuch_worker\28void*\29 ;; code offset: 0x663 (local.get $3) ) ) ;; code offset: 0x66e (local.set $6 ;; code offset: 0x66b (i32.load offset=8 ;; code offset: 0x669 (local.get $3) ) ) ;; code offset: 0x672 (call $free ;; code offset: 0x670 (local.get $3) ) ;; code offset: 0x67e (local.set $0 ;; code offset: 0x67d (select ;; code offset: 0x674 (local.get $1) ;; code offset: 0x676 (local.get $0) ;; code offset: 0x67c (i32.lt_s ;; code offset: 0x678 (local.get $0) ;; code offset: 0x67a (local.get $1) ) ) ) ;; code offset: 0x682 (local.set $3 ;; code offset: 0x680 (local.get $6) ) ;; code offset: 0x686 (br_if $label$27 ;; code offset: 0x684 (local.get $6) ) ) ) ;; code offset: 0x68e (i32.store offset=4 ;; code offset: 0x68a (local.get $2) ;; code offset: 0x68c (local.get $0) ) ;; code offset: 0x695 (i32.store ;; code offset: 0x691 (local.get $2) ;; code offset: 0x693 (local.get $4) ) ;; code offset: 0x69f (drop ;; code offset: 0x69d (call $iprintf ;; code offset: 0x698 (i32.const 1024) ;; code offset: 0x69b (local.get $2) ) ) ) ;; code offset: 0x6a6 (global.set $global$0 ;; code offset: 0x6a5 (i32.add ;; code offset: 0x6a1 (local.get $2) ;; code offset: 0x6a3 (i32.const 32) ) ) ;; code offset: 0x6a8 (local.get $5) ) ;; custom section ".debug_info", size 851 ;; custom section ".debug_loc", size 1073 ;; custom section ".debug_ranges", size 88 ;; custom section ".debug_abbrev", size 333 ;; custom section ".debug_line", size 2826 ;; custom section ".debug_str", size 434 ;; custom section "producers", size 135 ) binaryen-version_108/test/passes/fannkuch3_dwarf.passes000066400000000000000000000000401423707623100234770ustar00rootroot00000000000000dwarfdump_roundtrip_dwarfdump_g binaryen-version_108/test/passes/fannkuch3_dwarf.wasm000066400000000000000000000150111423707623100231540ustar00rootroot00000000000000asm`````‹ envmemory€€env__indirect_function_tablepenvmallocenvmemcpyenvfreeenvatoienvputsenviprintfenvputcharA°ˆÀ Aª )__wasm_call_ctorsmain __data_end á  —A! ("At"€€€€! €€€€! €€€€!@@@ AL @  Atj 6 Aj" G  ("Atj Aj"6  Atj" 6A! AL @@ AL @  Aj"Atj 6 AJ! ! @ (" E ( F   €€€" (! A!@ ! @ AH Aj!A!@ Atj"(!  Atj"(6  6 Aj" Aj"H Atj"(! 6 Aj! !  J!  N @A!@ AL @  Atj  Aj"Atj(6  G !  Atj 6  Atj" ("Aj6 AJ  Aj" F  (!  ("Atj Aj"6  Atj" 6 A! @@ AH @  Aj"Atj 6 AJ! ! @ (" E ( F (!A!@ ! @ AH Aj!A!@  Atj" (!  Atj"(6  6 Aj" Aj"H  Atj"(! 6 Aj! !  J!  N @A!@ AH @  Atj  Aj"Atj(6  G !  Atj 6  Atj" ("Aj6 AJ  Aj" F  (! ‚€€€ ‚€€€ ‚€€€ Â#€€€€A k"$€€€€@@@ AH A! (ƒ€€€"AJ  Ašˆ€€„€€€A!  @ AF Aj!A!A!@A €€€€" 6  6  6 ! Aj" G A! At"€€€€! €€€€!@@@@ AL @  Atj 6 Aj" G A! !  A! !  @A!@   Atj(Aj6A—ˆ€€ Aj…€€€ Aj" G A †€€€@ AL @  Aj"Atj 6 AJ! !   F  Aj!@A! (!@ AL @  Atj  Aj"Atj(6 G !  Atj 6  Atj" ("Aj6@ AJ Aj" G   E  @A †€€€@ AL @  Aj"Atj 6 AJ! !   F  Aj!@ (!A!@ AH @  Atj  Aj"Atj(6 G !  Atj 6  Atj" ("Aj6@ AJ Aj" G    ‚€€€ ‚€€€A!A!@ E A!@ ˆ€€€! (! ‚€€€  H! !   6  6A€ˆ€€ …€€€ A j$€€€€  1A€ *Pfannkuchen(%d) = %d. %dWrong argument.ß .debug_infoOi©@+ã ÖYÜYÞ&ØYïv9ó 4j —íŸf|Y ‘§ 3& LY ÖY ¥ÜY Ã>` á–` ÿD` JY IUY «›Y ×Y ŸY cJY)3ášŠš’šš)§"WY ÜWY +ZY 3Y& Ö[Y 8Y& >[` D[` J[Y L[Y U[Y[‰ c}YŸBퟌ˜Y £˜Y ¨˜A gÜ™Y¨íÈŸ)¸…âÎÌÙäTïrúè&a(¼.Ïã EO¾Ô¡šišqŽšŸÑFK­¼ .debug_locÿÿÿÿ<Ÿÿÿÿÿ<ŸRWíŸìõŸ1;íŸy†ŸdoŸu~ŸºÄퟟÿÿÿÿ<íŸÿÿÿÿ<íŸÿÿÿÿ%<íŸÿÿÿÿ/<íŸÿÿÿÿâçíŸkpíŸÿÿÿÿÏæŸìõí ŸZbíŸdoŸu~í ŸãëíŸÿÿÿÿâæí ŸkoíŸÿÿÿÿüíŸ8;ퟅ‰íŸÁÄíŸÿÿÿÿ;íŸLbퟚÄíŸÕëíŸÿÿÿÿŸ27íŸÿÿÿÿŸLUŸÿÿÿÿŸLU0ŸøíŸÿÿÿÿŸLUŸŽ“ퟙÁŸ×ÜíŸõùŸ',íŸxˆŸú ŸAUŸÿÿÿÿŸ¨ÁíŸÿÿÿÿŸ²ÁíŸÿÿÿÿŸæíퟳºíŸÿÿÿÿŸˆíŸHUíŸÿÿÿÿŸÖ០íŸÿÿÿÿŸñíŸf .debug_ranges…ÃíöLv^Þ+ŸáÛ .debug_abbrev%UI6  : ;  I: ; 8 $> 9I: ; ; : ;  .@—Bn: ; I? : ; I 4: ; I 4: ; I U‰‚‰‚1.: ; <?I.n: ; I  : ;  .@—B: ; I?1X Y W 14141 1Ñ .debug_lineÁÝû /usr/local/google/home/azakai/Devemscripten/tests/fannkuch.cppemscripten/system/include/libcxx/__nullptremscripten/system/include/libcxx/stddef.hemscripten/system/include/libc/stdlib.h z_X"J ŸŸ\ž%fX[.&.‚WXX>..XY‚©^U.,JTt -.. .WTt,J hº)XZ¼Nt&4ºLt5Èå.È=,qLX&4t <PårGt>JXB< ¾tË‚µtÌ.‚#.X; Xµ< ÍX‚Z‚ä vqX|[>..XY‚Xt,Tt -.. .WTä ..º)X\Nt&4ºLt5Èå.È=,qLX&4tLX:.årGt>JXB< ¾tË‚µtÌ.‚#.X;µt Íf‚Z‚ä vqX|¶ Ã<ƒƒƒŸ— ‘ Xç~.™JXç~f ›J å~.œ ä~.Þ<X¢ßJiss tÞJXX¢JæJXŸ™žé‚X—.ê.‚WX—t ðÖ.#È IX XZtö.XŠ. ÷.. .W¬j†týȃtþ. X‚.ÿ.‚#.X; X‚< €X‚Z‚X 1uXX†J‚  l ’t ñftö.XŠ. ÷.. .WŠtöJjX†.ýtƒþf X‚.ÿ.‚#.X; X‚< €X‚Z‚X 1uXX†J‚  l fƒõ~‚‚ó~tŽJ¾u ~J Xñ~<Jfá~º¡ ½ .debug_strclang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp/usr/local/google/home/azakai/Dev/2-binaryeniintnnextworker_argsstddecltype(nullptr)nullptr_tfree_ZL8fannkuchifannkuchshowmaxargstargsperm1countrmaxflipsflipscleanupp0_Z15fannkuch_workerPvfannkuch_workermain_argpermkjtmpargcargvcharmnamef mallocmemcpyfreeatoiputsiprintfputchar__wasm_call_ctorsfannkuch_worker(void*) main‘ producerslanguage C_plus_plus processed-byclangZ11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)binaryen-version_108/test/passes/fannkuch3_manyopts_dwarf.bin.txt000066400000000000000000007235261423707623100255460ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (851 bytes) Contains section .debug_loc (1073 bytes) Contains section .debug_ranges (88 bytes) Contains section .debug_abbrev (333 bytes) Contains section .debug_line (1477 bytes) Contains section .debug_str (434 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [3] DW_TAG_structure_type DW_CHILDREN_yes DW_AT_calling_convention DW_FORM_data1 DW_AT_name DW_FORM_strp DW_AT_byte_size DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [4] DW_TAG_member DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_data_member_location DW_FORM_data1 [5] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [6] DW_TAG_namespace DW_CHILDREN_yes DW_AT_name DW_FORM_strp [7] DW_TAG_typedef DW_CHILDREN_no DW_AT_type DW_FORM_ref4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [8] DW_TAG_unspecified_type DW_CHILDREN_no DW_AT_name DW_FORM_strp [9] DW_TAG_imported_declaration DW_CHILDREN_no DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_import DW_FORM_ref4 [10] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [11] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [12] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [13] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [14] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_ranges DW_FORM_sec_offset [15] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [16] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr [17] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_declaration DW_FORM_flag_present DW_AT_external DW_FORM_flag_present [18] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [19] DW_TAG_pointer_type DW_CHILDREN_no [20] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_inline DW_FORM_data1 [21] DW_TAG_label DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [22] DW_TAG_lexical_block DW_CHILDREN_yes [23] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [24] DW_TAG_inlined_subroutine DW_CHILDREN_yes DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_call_file DW_FORM_data1 DW_AT_call_line DW_FORM_data1 DW_AT_call_column DW_FORM_data1 [25] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [26] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_abstract_origin DW_FORM_ref4 [27] DW_TAG_variable DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [28] DW_TAG_label DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr .debug_info contents: 0x00000000: Compile Unit: length = 0x0000034f version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000353) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a9] = "/usr/local/google/home/azakai/Dev/2-binaryen") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000040 [0x00000006, 0x0000039d) [0x0000039f, 0x000006e1)) 0x00000026: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x002b => {0x0000002b} "worker_args") 0x0000002b: DW_TAG_structure_type [3] * DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e3] = "worker_args") DW_AT_byte_size [DW_FORM_data1] (0x0c) DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (20) 0x00000034: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x00) 0x00000040: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x04) 0x0000004c: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000de] = "next") DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (22) DW_AT_data_member_location [DW_FORM_data1] (0x08) 0x00000058: NULL 0x00000059: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d8] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000060: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000065: DW_TAG_namespace [6] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ef] = "std") 0x0000006a: DW_TAG_typedef [7] DW_AT_type [DW_FORM_ref4] (cu + 0x0076 => {0x00000076} "decltype(nullptr)") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000105] = "nullptr_t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr") DW_AT_decl_line [DW_FORM_data1] (57) 0x00000075: NULL 0x00000076: DW_TAG_unspecified_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000f3] = "decltype(nullptr)") 0x0000007b: DW_TAG_imported_declaration [9] DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h") DW_AT_decl_line [DW_FORM_data1] (52) DW_AT_import [DW_FORM_ref4] (cu + 0x006a => {0x0000006a}) 0x00000082: DW_TAG_subprogram [10] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000006) DW_AT_high_pc [DW_FORM_data4] (0x00000397) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000166] = "_Z15fannkuch_workerPv") DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017c] = "fannkuch_worker") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000009e: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "_arg") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x01a7 => {0x000001a7} "*") 0x000000a9: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000133] = "args") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (28) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000000b4: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000006): [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000c3: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000001d: [0xffffffff, 0x00000006): [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value [0x00000052, 0x00000057): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value [0x00000131, 0x0000013b): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000179, 0x00000186): DW_OP_consts +0, DW_OP_stack_value [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value [0x00000275, 0x0000027e): DW_OP_consts +1, DW_OP_stack_value [0x000002ba, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000d2: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000a5: [0xffffffff, 0x00000006): [0x0000000e, 0x0000003c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000e1: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000c3: [0xffffffff, 0x00000006): [0x0000001b, 0x0000003c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000f0: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000e1: [0xffffffff, 0x00000006): [0x00000025, 0x0000003c): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000196] = "perm") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000ff: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000ff: [0xffffffff, 0x00000006): [0x0000002f, 0x0000003c): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x0000010e: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000011d: [0xffffffff, 0x00000006): [0x000001e2, 0x000001e7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value [0x0000036b, 0x00000370): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000011d: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000149: [0xffffffff, 0x00000006): [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value [0x000000ec, 0x000000f5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value [0x0000015a, 0x00000162): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value [0x00000275, 0x0000027e): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value [0x000002e3, 0x000002eb): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000012c: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001ab: [0xffffffff, 0x00000006): [0x000000e2, 0x000000e6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value [0x0000026b, 0x0000026f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019b] = "k") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000013b: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001d7: [0xffffffff, 0x00000006): [0x000000fc, 0x00000100): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000138, 0x0000013b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000285, 0x00000289): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000002c1, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019d] = "j") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000014a: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000021f: [0xffffffff, 0x00000006): [0x00000111, 0x0000013b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value [0x0000014c, 0x00000162): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000029a, 0x000002c4): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value [0x000002d5, 0x000002eb): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019f] = "tmp") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000159: DW_TAG_lexical_block [14] * DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000185, 0x000001c3) [0x000001ed, 0x000001f6) [0x0000030e, 0x0000034c) [0x00000376, 0x0000037f)) 0x0000015e: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000163] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (74) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000169: NULL 0x0000016a: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000001f) 0x0000016f: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000029) 0x00000174: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000033) 0x00000179: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000000e1) 0x0000017e: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000038a) 0x00000187: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000392) 0x00000190: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000039a) 0x00000199: NULL 0x0000019a: DW_TAG_subprogram [17] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "free") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h") DW_AT_decl_line [DW_FORM_data1] (41) DW_AT_declaration [DW_FORM_flag_present] (true) DW_AT_external [DW_FORM_flag_present] (true) 0x000001a1: DW_TAG_formal_parameter [18] DW_AT_type [DW_FORM_ref4] (cu + 0x01a7 => {0x000001a7} "*") 0x000001a6: NULL 0x000001a7: DW_TAG_pointer_type [19] 0x000001a8: DW_TAG_subprogram [20] * DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000114] = "_ZL8fannkuchi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000122] = "fannkuch") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_inline [DW_FORM_data1] (DW_INL_inlined) 0x000001b8: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001c3: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000012b] = "showmax") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (90) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001ce: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000133] = "args") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001d9: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001e4: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000138] = "targs") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001ef: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000001fa: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x00000205: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000210: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000021b: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000226: DW_TAG_label [21] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000015b] = "cleanup") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (137) 0x0000022d: DW_TAG_lexical_block [22] * 0x0000022e: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000163] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (125) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000239: NULL 0x0000023a: NULL 0x0000023b: DW_TAG_subprogram [23] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000039f) DW_AT_high_pc [DW_FORM_data4] (0x00000342) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000018c] = "main") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000253: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001a3] = "argc") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000025e: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001a8] = "argv") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0341 => {0x00000341} "char**") 0x00000269: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000267: [0xffffffff, 0x0000039f): [0x00000032, 0x00000037): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (153) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000278: DW_TAG_inlined_subroutine [24] * DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01a8 => {0x000001a8} "_ZL8fannkuchi") DW_AT_low_pc [DW_FORM_addr] (0x00000000000003ed) DW_AT_high_pc [DW_FORM_data4] (0x000002c8) DW_AT_call_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_call_line [DW_FORM_data1] (159) DW_AT_call_column [DW_FORM_data1] (0x29) 0x00000288: DW_TAG_formal_parameter [25] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01b8 => {0x000001b8} "n") 0x0000028d: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000285: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c3 => {0x000001c3} "showmax") 0x00000296: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002a2: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value [0x000002f8, 0x00000314): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ce => {0x000001ce} "args") 0x0000029f: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002cc: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value [0x0000008e, 0x00000093): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value [0x000000d7, 0x000000dc): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value [0x00000127, 0x0000012c): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000178, 0x00000188): DW_OP_consts +0, DW_OP_stack_value [0x000001fa, 0x0000020c): DW_OP_consts +0, DW_OP_stack_value [0x00000241, 0x00000255): DW_OP_consts +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d9 => {0x000001d9} "i") 0x000002a8: DW_TAG_variable [27] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01e4 => {0x000001e4} "targs") 0x000002ad: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000354: [0xffffffff, 0x0000039f): [0x000000a8, 0x000000c1): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ef => {0x000001ef} "perm1") 0x000002b6: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000372: [0xffffffff, 0x0000039f): [0x000000b2, 0x000000c1): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01fa => {0x000001fa} "count") 0x000002bf: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000390: [0xffffffff, 0x0000039f): [0x000001e6, 0x000001ed): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value [0x000002b3, 0x000002ba): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0205 => {0x00000205} "r") 0x000002c8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003e8: [0xffffffff, 0x0000039f): [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value [0x0000030c, 0x00000314): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0210 => {0x00000210} "maxflips") 0x000002d1: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000413: [0xffffffff, 0x0000039f): [0x000002f1, 0x00000314): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x021b => {0x0000021b} "flips") 0x000002da: DW_TAG_label [28] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0226 => {0x00000226} "cleanup") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000661) 0x000002e3: DW_TAG_lexical_block [14] * DW_AT_ranges [DW_FORM_sec_offset] (0x00000028 [0x00000517, 0x0000055e) [0x000005de, 0x0000062b)) 0x000002e8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003bc: [0xffffffff, 0x0000039f): [0x0000017f, 0x00000188): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value [0x00000248, 0x00000255): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022e => {0x0000022e} "p0") 0x000002f1: NULL 0x000002f2: NULL 0x000002f3: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003cf) 0x000002f8: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003e3) 0x000002fd: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000040d) 0x00000302: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000445) 0x00000307: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000044f) 0x0000030c: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000004be) 0x00000311: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000004d4) 0x00000316: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000005a1) 0x0000031b: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000669) 0x00000324: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000671) 0x0000032d: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000068e) 0x00000332: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000069f) 0x0000033b: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000006d1) 0x00000340: NULL 0x00000341: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0346 => {0x00000346} "char*") 0x00000346: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x034b => {0x0000034b} "char") 0x0000034b: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001ad] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x00000352: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000006): [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value 0x0000001d: [0xffffffff, 0x00000006): [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value [0x00000052, 0x00000057): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value [0x00000131, 0x0000013b): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000179, 0x00000186): DW_OP_consts +0, DW_OP_stack_value [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value [0x00000275, 0x0000027e): DW_OP_consts +1, DW_OP_stack_value [0x000002ba, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value 0x000000a5: [0xffffffff, 0x00000006): [0x0000000e, 0x0000003c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x000000c3: [0xffffffff, 0x00000006): [0x0000001b, 0x0000003c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x000000e1: [0xffffffff, 0x00000006): [0x00000025, 0x0000003c): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x000000ff: [0xffffffff, 0x00000006): [0x0000002f, 0x0000003c): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x0000011d: [0xffffffff, 0x00000006): [0x000001e2, 0x000001e7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value [0x0000036b, 0x00000370): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x00000149: [0xffffffff, 0x00000006): [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value [0x000000ec, 0x000000f5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value [0x0000015a, 0x00000162): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value [0x00000275, 0x0000027e): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value [0x000002e3, 0x000002eb): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x000001ab: [0xffffffff, 0x00000006): [0x000000e2, 0x000000e6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value [0x0000026b, 0x0000026f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value 0x000001d7: [0xffffffff, 0x00000006): [0x000000fc, 0x00000100): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000138, 0x0000013b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000285, 0x00000289): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000002c1, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x0000021f: [0xffffffff, 0x00000006): [0x00000111, 0x0000013b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value [0x0000014c, 0x00000162): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000029a, 0x000002c4): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value [0x000002d5, 0x000002eb): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000267: [0xffffffff, 0x0000039f): [0x00000032, 0x00000037): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x00000285: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value 0x000002a2: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value [0x000002f8, 0x00000314): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000002cc: [0xffffffff, 0x0000039f): [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value [0x0000008e, 0x00000093): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value [0x000000d7, 0x000000dc): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value [0x00000127, 0x0000012c): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000178, 0x00000188): DW_OP_consts +0, DW_OP_stack_value [0x000001fa, 0x0000020c): DW_OP_consts +0, DW_OP_stack_value [0x00000241, 0x00000255): DW_OP_consts +0, DW_OP_stack_value 0x00000354: [0xffffffff, 0x0000039f): [0x000000a8, 0x000000c1): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000372: [0xffffffff, 0x0000039f): [0x000000b2, 0x000000c1): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x00000390: [0xffffffff, 0x0000039f): [0x000001e6, 0x000001ed): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value [0x000002b3, 0x000002ba): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000003bc: [0xffffffff, 0x0000039f): [0x0000017f, 0x00000188): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value [0x00000248, 0x00000255): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value 0x000003e8: [0xffffffff, 0x0000039f): [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value [0x0000030c, 0x00000314): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x00000413: [0xffffffff, 0x0000039f): [0x000002f1, 0x00000314): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x000005c1 version: 4 prologue_length: 0x000000dd min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 include_directories[ 1] = "/usr/local/google/home/azakai/Dev" file_names[ 1]: name: "emscripten/tests/fannkuch.cpp" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 2]: name: "emscripten/system/include/libcxx/__nullptr" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 3]: name: "emscripten/system/include/libcxx/stddef.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 4]: name: "emscripten/system/include/libc/stdlib.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 0x000000e7: 00 DW_LNE_set_address (0x0000000000000006) 0x000000ee: 03 DW_LNS_advance_line (27) 0x000000f0: 01 DW_LNS_copy 0x0000000000000006 27 0 1 0 0 is_stmt 0x000000f1: 05 DW_LNS_set_column (14) 0x000000f3: 0a DW_LNS_set_prologue_end 0x000000f4: 7a address += 7, line += 6 0x000000000000000d 33 14 1 0 0 is_stmt prologue_end 0x000000f5: 06 DW_LNS_negate_stmt 0x000000f6: 03 DW_LNS_advance_line (0) 0x000000f8: 58 address += 5, line += 0 0x0000000000000012 0 14 1 0 0 0x000000f9: 05 DW_LNS_set_column (27) 0x000000fb: 06 DW_LNS_negate_stmt 0x000000fc: 03 DW_LNS_advance_line (34) 0x000000fe: 4a address += 4, line += 0 0x0000000000000016 34 27 1 0 0 is_stmt 0x000000ff: 05 DW_LNS_set_column (18) 0x00000101: 06 DW_LNS_negate_stmt 0x00000102: 20 address += 1, line += 0 0x0000000000000017 34 18 1 0 0 0x00000103: 05 DW_LNS_set_column (17) 0x00000105: 06 DW_LNS_negate_stmt 0x00000106: 9f address += 10, line += 1 0x0000000000000021 35 17 1 0 0 is_stmt 0x00000107: 05 DW_LNS_set_column (18) 0x00000109: 9f address += 10, line += 1 0x000000000000002b 36 18 1 0 0 is_stmt 0x0000010a: 06 DW_LNS_negate_stmt 0x0000010b: 03 DW_LNS_advance_line (0) 0x0000010d: 9e address += 10, line += 0 0x0000000000000035 0 18 1 0 0 0x0000010e: 06 DW_LNS_negate_stmt 0x0000010f: 03 DW_LNS_advance_line (37) 0x00000111: 66 address += 6, line += 0 0x000000000000003b 37 18 1 0 0 is_stmt 0x00000112: 05 DW_LNS_set_column (4) 0x00000114: 06 DW_LNS_negate_stmt 0x00000115: 58 address += 5, line += 0 0x0000000000000040 37 4 1 0 0 0x00000116: 03 DW_LNS_advance_line (0) 0x00000118: 2e address += 2, line += 0 0x0000000000000042 0 4 1 0 0 0x00000119: 05 DW_LNS_set_column (7) 0x0000011b: 06 DW_LNS_negate_stmt 0x0000011c: 03 DW_LNS_advance_line (38) 0x0000011e: 2e address += 2, line += 0 0x0000000000000044 38 7 1 0 0 is_stmt 0x0000011f: 05 DW_LNS_set_column (16) 0x00000121: 06 DW_LNS_negate_stmt 0x00000122: 82 address += 8, line += 0 0x000000000000004c 38 16 1 0 0 0x00000123: 05 DW_LNS_set_column (24) 0x00000125: 06 DW_LNS_negate_stmt 0x00000126: 57 address += 5, line += -1 0x0000000000000051 37 24 1 0 0 is_stmt 0x00000127: 05 DW_LNS_set_column (18) 0x00000129: 06 DW_LNS_negate_stmt 0x0000012a: 58 address += 5, line += 0 0x0000000000000056 37 18 1 0 0 0x0000012b: 05 DW_LNS_set_column (4) 0x0000012d: 58 address += 5, line += 0 0x000000000000005b 37 4 1 0 0 0x0000012e: 06 DW_LNS_negate_stmt 0x0000012f: 3e address += 3, line += 2 0x000000000000005e 39 4 1 0 0 is_stmt 0x00000130: 05 DW_LNS_set_column (16) 0x00000132: 06 DW_LNS_negate_stmt 0x00000133: 2e address += 2, line += 0 0x0000000000000060 39 16 1 0 0 0x00000134: 05 DW_LNS_set_column (4) 0x00000136: 90 address += 9, line += 0 0x0000000000000069 39 4 1 0 0 0x00000137: 05 DW_LNS_set_column (23) 0x00000139: 2e address += 2, line += 0 0x000000000000006b 39 23 1 0 0 0x0000013a: 05 DW_LNS_set_column (19) 0x0000013c: 58 address += 5, line += 0 0x0000000000000070 39 19 1 0 0 0x0000013d: 05 DW_LNS_set_column (4) 0x0000013f: 06 DW_LNS_negate_stmt 0x00000140: 59 address += 5, line += 1 0x0000000000000075 40 4 1 0 0 is_stmt 0x00000141: 05 DW_LNS_set_column (17) 0x00000143: 06 DW_LNS_negate_stmt 0x00000144: 82 address += 8, line += 0 0x000000000000007d 40 17 1 0 0 0x00000145: 05 DW_LNS_set_column (18) 0x00000147: 06 DW_LNS_negate_stmt 0x00000148: a9 address += 11, line += -3 0x0000000000000088 37 18 1 0 0 is_stmt 0x00000149: 05 DW_LNS_set_column (4) 0x0000014b: 5e address += 5, line += 6 0x000000000000008d 43 4 1 0 0 is_stmt 0x0000014c: 06 DW_LNS_negate_stmt 0x0000014d: 03 DW_LNS_advance_line (0) 0x0000014f: 2e address += 2, line += 0 0x000000000000008f 0 4 1 0 0 0x00000150: 05 DW_LNS_set_column (16) 0x00000152: 06 DW_LNS_negate_stmt 0x00000153: 03 DW_LNS_advance_line (44) 0x00000155: 4a address += 4, line += 0 0x0000000000000093 44 16 1 0 0 is_stmt 0x00000156: 06 DW_LNS_negate_stmt 0x00000157: 03 DW_LNS_advance_line (0) 0x00000159: 74 address += 7, line += 0 0x000000000000009a 0 16 1 0 0 0x0000015a: 05 DW_LNS_set_column (10) 0x0000015c: 06 DW_LNS_negate_stmt 0x0000015d: 03 DW_LNS_advance_line (45) 0x0000015f: 2e address += 2, line += 0 0x000000000000009c 45 10 1 0 0 is_stmt 0x00000160: 05 DW_LNS_set_column (18) 0x00000162: 06 DW_LNS_negate_stmt 0x00000163: 2e address += 2, line += 0 0x000000000000009e 45 18 1 0 0 0x00000164: 05 DW_LNS_set_column (10) 0x00000166: 90 address += 9, line += 0 0x00000000000000a7 45 10 1 0 0 0x00000167: 05 DW_LNS_set_column (23) 0x00000169: 2e address += 2, line += 0 0x00000000000000a9 45 23 1 0 0 0x0000016a: 05 DW_LNS_set_column (16) 0x0000016c: 06 DW_LNS_negate_stmt 0x0000016d: 57 address += 5, line += -1 0x00000000000000ae 44 16 1 0 0 is_stmt 0x0000016e: 05 DW_LNS_set_column (0) 0x00000170: 06 DW_LNS_negate_stmt 0x00000171: 03 DW_LNS_advance_line (0) 0x00000173: 74 address += 7, line += 0 0x00000000000000b5 0 0 1 0 0 0x00000174: 05 DW_LNS_set_column (7) 0x00000176: 03 DW_LNS_advance_line (44) 0x00000178: 4a address += 4, line += 0 0x00000000000000b9 44 7 1 0 0 0x00000179: 05 DW_LNS_set_column (11) 0x0000017b: 06 DW_LNS_negate_stmt 0x0000017c: 68 address += 6, line += 2 0x00000000000000bf 46 11 1 0 0 is_stmt 0x0000017d: 05 DW_LNS_set_column (28) 0x0000017f: 06 DW_LNS_negate_stmt 0x00000180: ba address += 12, line += 0 0x00000000000000cb 46 28 1 0 0 0x00000181: 05 DW_LNS_set_column (41) 0x00000183: 58 address += 5, line += 0 0x00000000000000d0 46 41 1 0 0 0x00000184: 05 DW_LNS_set_column (21) 0x00000186: 06 DW_LNS_negate_stmt 0x00000187: 5a address += 5, line += 2 0x00000000000000d5 48 21 1 0 0 is_stmt 0x00000188: 05 DW_LNS_set_column (14) 0x0000018a: bc address += 12, line += 2 0x00000000000000e1 50 14 1 0 0 is_stmt 0x0000018b: 06 DW_LNS_negate_stmt 0x0000018c: 03 DW_LNS_advance_line (0) 0x0000018e: 74 address += 7, line += 0 0x00000000000000e8 0 14 1 0 0 0x0000018f: 05 DW_LNS_set_column (38) 0x00000191: 06 DW_LNS_negate_stmt 0x00000192: 03 DW_LNS_advance_line (52) 0x00000194: ba address += 12, line += 0 0x00000000000000f4 52 38 1 0 0 is_stmt 0x00000195: 05 DW_LNS_set_column (0) 0x00000197: 06 DW_LNS_negate_stmt 0x00000198: 03 DW_LNS_advance_line (0) 0x0000019a: 74 address += 7, line += 0 0x00000000000000fb 0 0 1 0 0 0x0000019b: 05 DW_LNS_set_column (22) 0x0000019d: 06 DW_LNS_negate_stmt 0x0000019e: 03 DW_LNS_advance_line (53) 0x000001a0: c8 address += 13, line += 0 0x0000000000000108 53 22 1 0 0 is_stmt 0x000001a1: 05 DW_LNS_set_column (24) 0x000001a3: e5 address += 15, line += 1 0x0000000000000117 54 24 1 0 0 is_stmt 0x000001a4: 05 DW_LNS_set_column (26) 0x000001a6: 06 DW_LNS_negate_stmt 0x000001a7: 2e address += 2, line += 0 0x0000000000000119 54 26 1 0 0 0x000001a8: 05 DW_LNS_set_column (24) 0x000001aa: c8 address += 13, line += 0 0x0000000000000126 54 24 1 0 0 0x000001ab: 06 DW_LNS_negate_stmt 0x000001ac: 3d address += 3, line += 1 0x0000000000000129 55 24 1 0 0 is_stmt 0x000001ad: 05 DW_LNS_set_column (44) 0x000001af: 71 address += 7, line += -3 0x0000000000000130 52 44 1 0 0 is_stmt 0x000001b0: 06 DW_LNS_negate_stmt 0x000001b1: 03 DW_LNS_advance_line (0) 0x000001b3: 58 address += 5, line += 0 0x0000000000000135 0 44 1 0 0 0x000001b4: 05 DW_LNS_set_column (38) 0x000001b6: 03 DW_LNS_advance_line (52) 0x000001b8: 74 address += 7, line += 0 0x000000000000013c 52 38 1 0 0 0x000001b9: 05 DW_LNS_set_column (13) 0x000001bb: 3c address += 3, line += 0 0x000000000000013f 52 13 1 0 0 0x000001bc: 05 DW_LNS_set_column (19) 0x000001be: 06 DW_LNS_negate_stmt 0x000001bf: 50 address += 4, line += 6 0x0000000000000143 58 19 1 0 0 is_stmt 0x000001c0: 05 DW_LNS_set_column (21) 0x000001c2: e5 address += 15, line += 1 0x0000000000000152 59 21 1 0 0 is_stmt 0x000001c3: 05 DW_LNS_set_column (18) 0x000001c5: 72 address += 7, line += -2 0x0000000000000159 57 18 1 0 0 is_stmt 0x000001c6: 05 DW_LNS_set_column (0) 0x000001c8: 06 DW_LNS_negate_stmt 0x000001c9: 03 DW_LNS_advance_line (0) 0x000001cb: 74 address += 7, line += 0 0x0000000000000160 0 0 1 0 0 0x000001cc: 05 DW_LNS_set_column (14) 0x000001ce: 06 DW_LNS_negate_stmt 0x000001cf: 03 DW_LNS_advance_line (62) 0x000001d1: 90 address += 9, line += 0 0x0000000000000169 62 14 1 0 0 is_stmt 0x000001d2: 05 DW_LNS_set_column (23) 0x000001d4: 06 DW_LNS_negate_stmt 0x000001d5: 4a address += 4, line += 0 0x000000000000016d 62 23 1 0 0 0x000001d6: 05 DW_LNS_set_column (14) 0x000001d8: 58 address += 5, line += 0 0x0000000000000172 62 14 1 0 0 0x000001d9: 03 DW_LNS_advance_line (0) 0x000001db: 3c address += 3, line += 0 0x0000000000000175 0 14 1 0 0 0x000001dc: 05 DW_LNS_set_column (16) 0x000001de: 06 DW_LNS_negate_stmt 0x000001df: 03 DW_LNS_advance_line (66) 0x000001e2: 20 address += 1, line += 0 0x0000000000000176 66 16 1 0 0 is_stmt 0x000001e3: 06 DW_LNS_negate_stmt 0x000001e4: 03 DW_LNS_advance_line (0) 0x000001e7: 74 address += 7, line += 0 0x000000000000017d 0 16 1 0 0 0x000001e8: 05 DW_LNS_set_column (27) 0x000001ea: 06 DW_LNS_negate_stmt 0x000001eb: 03 DW_LNS_advance_line (75) 0x000001ee: 82 address += 8, line += 0 0x0000000000000185 75 27 1 0 0 is_stmt 0x000001ef: 06 DW_LNS_negate_stmt 0x000001f0: 03 DW_LNS_advance_line (0) 0x000001f3: 74 address += 7, line += 0 0x000000000000018c 0 27 1 0 0 0x000001f4: 05 DW_LNS_set_column (16) 0x000001f6: 06 DW_LNS_negate_stmt 0x000001f7: 03 DW_LNS_advance_line (76) 0x000001fa: 2e address += 2, line += 0 0x000000000000018e 76 16 1 0 0 is_stmt 0x000001fb: 05 DW_LNS_set_column (27) 0x000001fd: 06 DW_LNS_negate_stmt 0x000001fe: 82 address += 8, line += 0 0x0000000000000196 76 27 1 0 0 0x000001ff: 05 DW_LNS_set_column (35) 0x00000201: 2e address += 2, line += 0 0x0000000000000198 76 35 1 0 0 0x00000202: 05 DW_LNS_set_column (27) 0x00000204: 90 address += 9, line += 0 0x00000000000001a1 76 27 1 0 0 0x00000205: 05 DW_LNS_set_column (25) 0x00000207: 58 address += 5, line += 0 0x00000000000001a6 76 25 1 0 0 0x00000208: 05 DW_LNS_set_column (27) 0x0000020a: 06 DW_LNS_negate_stmt 0x0000020b: 3b address += 3, line += -1 0x00000000000001a9 75 27 1 0 0 is_stmt 0x0000020c: 05 DW_LNS_set_column (13) 0x0000020e: 06 DW_LNS_negate_stmt 0x0000020f: 58 address += 5, line += 0 0x00000000000001ae 75 13 1 0 0 0x00000210: 05 DW_LNS_set_column (0) 0x00000212: 03 DW_LNS_advance_line (0) 0x00000215: 3c address += 3, line += 0 0x00000000000001b1 0 0 1 0 0 0x00000216: 05 DW_LNS_set_column (13) 0x00000218: 06 DW_LNS_negate_stmt 0x00000219: 03 DW_LNS_advance_line (77) 0x0000021c: 58 address += 5, line += 0 0x00000000000001b6 77 13 1 0 0 is_stmt 0x0000021d: 05 DW_LNS_set_column (22) 0x0000021f: 06 DW_LNS_negate_stmt 0x00000220: 82 address += 8, line += 0 0x00000000000001be 77 22 1 0 0 0x00000221: 05 DW_LNS_set_column (16) 0x00000223: 06 DW_LNS_negate_stmt 0x00000224: 5a address += 5, line += 2 0x00000000000001c3 79 16 1 0 0 is_stmt 0x00000225: 05 DW_LNS_set_column (14) 0x00000227: 06 DW_LNS_negate_stmt 0x00000228: 82 address += 8, line += 0 0x00000000000001cb 79 14 1 0 0 0x00000229: 05 DW_LNS_set_column (25) 0x0000022b: e4 address += 15, line += 0 0x00000000000001da 79 25 1 0 0 0x0000022c: 05 DW_LNS_set_column (11) 0x0000022e: 06 DW_LNS_negate_stmt 0x0000022f: 76 address += 7, line += 2 0x00000000000001e1 81 11 1 0 0 is_stmt 0x00000230: 05 DW_LNS_set_column (16) 0x00000232: 03 DW_LNS_advance_line (66) 0x00000234: 58 address += 5, line += 0 0x00000000000001e6 66 16 1 0 0 is_stmt 0x00000235: 05 DW_LNS_set_column (22) 0x00000237: 7c address += 7, line += 8 0x00000000000001ed 74 22 1 0 0 is_stmt 0x00000238: 05 DW_LNS_set_column (4) 0x0000023a: 03 DW_LNS_advance_line (37) 0x0000023c: 90 address += 9, line += 0 0x00000000000001f6 37 4 1 0 0 is_stmt 0x0000023d: 3e address += 3, line += 2 0x00000000000001f9 39 4 1 0 0 is_stmt 0x0000023e: 05 DW_LNS_set_column (16) 0x00000240: 06 DW_LNS_negate_stmt 0x00000241: 2e address += 2, line += 0 0x00000000000001fb 39 16 1 0 0 0x00000242: 05 DW_LNS_set_column (4) 0x00000244: 90 address += 9, line += 0 0x0000000000000204 39 4 1 0 0 0x00000245: 05 DW_LNS_set_column (23) 0x00000247: 2e address += 2, line += 0 0x0000000000000206 39 23 1 0 0 0x00000248: 05 DW_LNS_set_column (19) 0x0000024a: 58 address += 5, line += 0 0x000000000000020b 39 19 1 0 0 0x0000024b: 05 DW_LNS_set_column (4) 0x0000024d: 06 DW_LNS_negate_stmt 0x0000024e: 59 address += 5, line += 1 0x0000000000000210 40 4 1 0 0 is_stmt 0x0000024f: 05 DW_LNS_set_column (17) 0x00000251: 06 DW_LNS_negate_stmt 0x00000252: 82 address += 8, line += 0 0x0000000000000218 40 17 1 0 0 0x00000253: 03 DW_LNS_advance_line (0) 0x00000255: 74 address += 7, line += 0 0x000000000000021f 0 17 1 0 0 0x00000256: 05 DW_LNS_set_column (16) 0x00000258: 06 DW_LNS_negate_stmt 0x00000259: 03 DW_LNS_advance_line (44) 0x0000025b: 90 address += 9, line += 0 0x0000000000000228 44 16 1 0 0 is_stmt 0x0000025c: 06 DW_LNS_negate_stmt 0x0000025d: 03 DW_LNS_advance_line (0) 0x0000025f: 74 address += 7, line += 0 0x000000000000022f 0 16 1 0 0 0x00000260: 05 DW_LNS_set_column (10) 0x00000262: 06 DW_LNS_negate_stmt 0x00000263: 03 DW_LNS_advance_line (45) 0x00000265: 2e address += 2, line += 0 0x0000000000000231 45 10 1 0 0 is_stmt 0x00000266: 05 DW_LNS_set_column (18) 0x00000268: 06 DW_LNS_negate_stmt 0x00000269: 2e address += 2, line += 0 0x0000000000000233 45 18 1 0 0 0x0000026a: 05 DW_LNS_set_column (10) 0x0000026c: 90 address += 9, line += 0 0x000000000000023c 45 10 1 0 0 0x0000026d: 05 DW_LNS_set_column (23) 0x0000026f: 2e address += 2, line += 0 0x000000000000023e 45 23 1 0 0 0x00000270: 05 DW_LNS_set_column (16) 0x00000272: 06 DW_LNS_negate_stmt 0x00000273: 57 address += 5, line += -1 0x0000000000000243 44 16 1 0 0 is_stmt 0x00000274: 06 DW_LNS_negate_stmt 0x00000275: 03 DW_LNS_advance_line (0) 0x00000277: e4 address += 15, line += 0 0x0000000000000252 0 16 1 0 0 0x00000278: 05 DW_LNS_set_column (11) 0x0000027a: 06 DW_LNS_negate_stmt 0x0000027b: 03 DW_LNS_advance_line (46) 0x0000027d: 2e address += 2, line += 0 0x0000000000000254 46 11 1 0 0 is_stmt 0x0000027e: 05 DW_LNS_set_column (28) 0x00000280: 06 DW_LNS_negate_stmt 0x00000281: ba address += 12, line += 0 0x0000000000000260 46 28 1 0 0 0x00000282: 05 DW_LNS_set_column (41) 0x00000284: 58 address += 5, line += 0 0x0000000000000265 46 41 1 0 0 0x00000285: 05 DW_LNS_set_column (14) 0x00000287: 06 DW_LNS_negate_stmt 0x00000288: 5c address += 5, line += 4 0x000000000000026a 50 14 1 0 0 is_stmt 0x00000289: 06 DW_LNS_negate_stmt 0x0000028a: 03 DW_LNS_advance_line (0) 0x0000028c: 74 address += 7, line += 0 0x0000000000000271 0 14 1 0 0 0x0000028d: 05 DW_LNS_set_column (38) 0x0000028f: 06 DW_LNS_negate_stmt 0x00000290: 03 DW_LNS_advance_line (52) 0x00000292: ba address += 12, line += 0 0x000000000000027d 52 38 1 0 0 is_stmt 0x00000293: 05 DW_LNS_set_column (0) 0x00000295: 06 DW_LNS_negate_stmt 0x00000296: 03 DW_LNS_advance_line (0) 0x00000298: 74 address += 7, line += 0 0x0000000000000284 0 0 1 0 0 0x00000299: 05 DW_LNS_set_column (22) 0x0000029b: 06 DW_LNS_negate_stmt 0x0000029c: 03 DW_LNS_advance_line (53) 0x0000029e: c8 address += 13, line += 0 0x0000000000000291 53 22 1 0 0 is_stmt 0x0000029f: 05 DW_LNS_set_column (24) 0x000002a1: e5 address += 15, line += 1 0x00000000000002a0 54 24 1 0 0 is_stmt 0x000002a2: 05 DW_LNS_set_column (26) 0x000002a4: 06 DW_LNS_negate_stmt 0x000002a5: 2e address += 2, line += 0 0x00000000000002a2 54 26 1 0 0 0x000002a6: 05 DW_LNS_set_column (24) 0x000002a8: c8 address += 13, line += 0 0x00000000000002af 54 24 1 0 0 0x000002a9: 06 DW_LNS_negate_stmt 0x000002aa: 3d address += 3, line += 1 0x00000000000002b2 55 24 1 0 0 is_stmt 0x000002ab: 05 DW_LNS_set_column (44) 0x000002ad: 71 address += 7, line += -3 0x00000000000002b9 52 44 1 0 0 is_stmt 0x000002ae: 06 DW_LNS_negate_stmt 0x000002af: 03 DW_LNS_advance_line (0) 0x000002b1: 58 address += 5, line += 0 0x00000000000002be 0 44 1 0 0 0x000002b2: 05 DW_LNS_set_column (38) 0x000002b4: 03 DW_LNS_advance_line (52) 0x000002b6: 74 address += 7, line += 0 0x00000000000002c5 52 38 1 0 0 0x000002b7: 03 DW_LNS_advance_line (0) 0x000002b9: 58 address += 5, line += 0 0x00000000000002ca 0 38 1 0 0 0x000002ba: 05 DW_LNS_set_column (19) 0x000002bc: 06 DW_LNS_negate_stmt 0x000002bd: 03 DW_LNS_advance_line (58) 0x000002bf: 2e address += 2, line += 0 0x00000000000002cc 58 19 1 0 0 is_stmt 0x000002c0: 05 DW_LNS_set_column (21) 0x000002c2: e5 address += 15, line += 1 0x00000000000002db 59 21 1 0 0 is_stmt 0x000002c3: 05 DW_LNS_set_column (18) 0x000002c5: 72 address += 7, line += -2 0x00000000000002e2 57 18 1 0 0 is_stmt 0x000002c6: 05 DW_LNS_set_column (0) 0x000002c8: 06 DW_LNS_negate_stmt 0x000002c9: 03 DW_LNS_advance_line (0) 0x000002cb: 74 address += 7, line += 0 0x00000000000002e9 0 0 1 0 0 0x000002cc: 05 DW_LNS_set_column (14) 0x000002ce: 06 DW_LNS_negate_stmt 0x000002cf: 03 DW_LNS_advance_line (62) 0x000002d1: 90 address += 9, line += 0 0x00000000000002f2 62 14 1 0 0 is_stmt 0x000002d2: 05 DW_LNS_set_column (23) 0x000002d4: 06 DW_LNS_negate_stmt 0x000002d5: 4a address += 4, line += 0 0x00000000000002f6 62 23 1 0 0 0x000002d6: 05 DW_LNS_set_column (14) 0x000002d8: 58 address += 5, line += 0 0x00000000000002fb 62 14 1 0 0 0x000002d9: 03 DW_LNS_advance_line (0) 0x000002db: 3c address += 3, line += 0 0x00000000000002fe 0 14 1 0 0 0x000002dc: 05 DW_LNS_set_column (16) 0x000002de: 06 DW_LNS_negate_stmt 0x000002df: 03 DW_LNS_advance_line (66) 0x000002e2: 20 address += 1, line += 0 0x00000000000002ff 66 16 1 0 0 is_stmt 0x000002e3: 06 DW_LNS_negate_stmt 0x000002e4: 03 DW_LNS_advance_line (0) 0x000002e7: 74 address += 7, line += 0 0x0000000000000306 0 16 1 0 0 0x000002e8: 05 DW_LNS_set_column (27) 0x000002ea: 06 DW_LNS_negate_stmt 0x000002eb: 03 DW_LNS_advance_line (75) 0x000002ee: 82 address += 8, line += 0 0x000000000000030e 75 27 1 0 0 is_stmt 0x000002ef: 06 DW_LNS_negate_stmt 0x000002f0: 03 DW_LNS_advance_line (0) 0x000002f3: 74 address += 7, line += 0 0x0000000000000315 0 27 1 0 0 0x000002f4: 05 DW_LNS_set_column (16) 0x000002f6: 06 DW_LNS_negate_stmt 0x000002f7: 03 DW_LNS_advance_line (76) 0x000002fa: 2e address += 2, line += 0 0x0000000000000317 76 16 1 0 0 is_stmt 0x000002fb: 05 DW_LNS_set_column (27) 0x000002fd: 06 DW_LNS_negate_stmt 0x000002fe: 82 address += 8, line += 0 0x000000000000031f 76 27 1 0 0 0x000002ff: 05 DW_LNS_set_column (35) 0x00000301: 2e address += 2, line += 0 0x0000000000000321 76 35 1 0 0 0x00000302: 05 DW_LNS_set_column (27) 0x00000304: 90 address += 9, line += 0 0x000000000000032a 76 27 1 0 0 0x00000305: 05 DW_LNS_set_column (25) 0x00000307: 58 address += 5, line += 0 0x000000000000032f 76 25 1 0 0 0x00000308: 05 DW_LNS_set_column (27) 0x0000030a: 06 DW_LNS_negate_stmt 0x0000030b: 3b address += 3, line += -1 0x0000000000000332 75 27 1 0 0 is_stmt 0x0000030c: 06 DW_LNS_negate_stmt 0x0000030d: 03 DW_LNS_advance_line (0) 0x00000310: 74 address += 7, line += 0 0x0000000000000339 0 27 1 0 0 0x00000311: 05 DW_LNS_set_column (13) 0x00000313: 06 DW_LNS_negate_stmt 0x00000314: 03 DW_LNS_advance_line (77) 0x00000317: 66 address += 6, line += 0 0x000000000000033f 77 13 1 0 0 is_stmt 0x00000318: 05 DW_LNS_set_column (22) 0x0000031a: 06 DW_LNS_negate_stmt 0x0000031b: 82 address += 8, line += 0 0x0000000000000347 77 22 1 0 0 0x0000031c: 05 DW_LNS_set_column (16) 0x0000031e: 06 DW_LNS_negate_stmt 0x0000031f: 5a address += 5, line += 2 0x000000000000034c 79 16 1 0 0 is_stmt 0x00000320: 05 DW_LNS_set_column (14) 0x00000322: 06 DW_LNS_negate_stmt 0x00000323: 82 address += 8, line += 0 0x0000000000000354 79 14 1 0 0 0x00000324: 05 DW_LNS_set_column (25) 0x00000326: e4 address += 15, line += 0 0x0000000000000363 79 25 1 0 0 0x00000327: 05 DW_LNS_set_column (11) 0x00000329: 06 DW_LNS_negate_stmt 0x0000032a: 76 address += 7, line += 2 0x000000000000036a 81 11 1 0 0 is_stmt 0x0000032b: 05 DW_LNS_set_column (16) 0x0000032d: 03 DW_LNS_advance_line (66) 0x0000032f: 58 address += 5, line += 0 0x000000000000036f 66 16 1 0 0 is_stmt 0x00000330: 05 DW_LNS_set_column (22) 0x00000332: 7c address += 7, line += 8 0x0000000000000376 74 22 1 0 0 is_stmt 0x00000333: 06 DW_LNS_negate_stmt 0x00000334: 03 DW_LNS_advance_line (0) 0x00000337: 90 address += 9, line += 0 0x000000000000037f 0 22 1 0 0 0x00000338: 05 DW_LNS_set_column (13) 0x0000033a: 06 DW_LNS_negate_stmt 0x0000033b: 03 DW_LNS_advance_line (67) 0x0000033e: 3c address += 3, line += 0 0x0000000000000382 67 13 1 0 0 is_stmt 0x0000033f: 83 address += 8, line += 1 0x000000000000038a 68 13 1 0 0 is_stmt 0x00000340: 83 address += 8, line += 1 0x0000000000000392 69 13 1 0 0 is_stmt 0x00000341: 83 address += 8, line += 1 0x000000000000039a 70 13 1 0 0 is_stmt 0x00000342: 02 DW_LNS_advance_pc (3) 0x00000344: 00 DW_LNE_end_sequence 0x000000000000039d 70 13 1 0 0 is_stmt end_sequence 0x00000347: 00 DW_LNE_set_address (0x000000000000039f) 0x0000034e: 03 DW_LNS_advance_line (152) 0x00000351: 01 DW_LNS_copy 0x000000000000039f 152 0 1 0 0 is_stmt 0x00000352: 05 DW_LNS_set_column (17) 0x00000354: 0a DW_LNS_set_prologue_end 0x00000355: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000356: 91 address += 9, line += 1 0x00000000000003b9 153 17 1 0 0 is_stmt prologue_end 0x00000357: 05 DW_LNS_set_column (12) 0x00000359: 06 DW_LNS_negate_stmt 0x0000035a: 58 address += 5, line += 0 0x00000000000003be 153 12 1 0 0 0x0000035b: 03 DW_LNS_advance_line (0) 0x0000035e: 2e address += 2, line += 0 0x00000000000003c0 0 12 1 0 0 0x0000035f: 05 DW_LNS_set_column (28) 0x00000361: 03 DW_LNS_advance_line (153) 0x00000364: 4a address += 4, line += 0 0x00000000000003c4 153 28 1 0 0 0x00000365: 05 DW_LNS_set_column (23) 0x00000367: 58 address += 5, line += 0 0x00000000000003c9 153 23 1 0 0 0x00000368: 03 DW_LNS_advance_line (0) 0x0000036b: 66 address += 6, line += 0 0x00000000000003cf 0 23 1 0 0 0x0000036c: 05 DW_LNS_set_column (10) 0x0000036e: 06 DW_LNS_negate_stmt 0x0000036f: 03 DW_LNS_advance_line (155) 0x00000372: 4a address += 4, line += 0 0x00000000000003d3 155 10 1 0 0 is_stmt 0x00000373: 05 DW_LNS_set_column (8) 0x00000375: 06 DW_LNS_negate_stmt 0x00000376: 20 address += 1, line += 0 0x00000000000003d4 155 8 1 0 0 0x00000377: 03 DW_LNS_advance_line (0) 0x0000037a: 2e address += 2, line += 0 0x00000000000003d6 0 8 1 0 0 0x0000037b: 05 DW_LNS_set_column (7) 0x0000037d: 06 DW_LNS_negate_stmt 0x0000037e: 03 DW_LNS_advance_line (156) 0x00000381: 20 address += 1, line += 0 0x00000000000003d7 156 7 1 0 0 is_stmt 0x00000382: 06 DW_LNS_negate_stmt 0x00000383: 03 DW_LNS_advance_line (0) 0x00000386: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000387: 2e address += 2, line += 0 0x00000000000003ea 0 7 1 0 0 0x00000388: 05 DW_LNS_set_column (18) 0x0000038a: 06 DW_LNS_negate_stmt 0x0000038b: 03 DW_LNS_advance_line (94) 0x0000038e: 3c address += 3, line += 0 0x00000000000003ed 94 18 1 0 0 is_stmt 0x0000038f: 05 DW_LNS_set_column (4) 0x00000391: 06 DW_LNS_negate_stmt 0x00000392: 58 address += 5, line += 0 0x00000000000003f2 94 4 1 0 0 0x00000393: 03 DW_LNS_advance_line (0) 0x00000396: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000397: 12 address += 0, line += 0 0x0000000000000403 0 4 1 0 0 0x00000398: 05 DW_LNS_set_column (29) 0x0000039a: 06 DW_LNS_negate_stmt 0x0000039b: 03 DW_LNS_advance_line (95) 0x0000039e: 4a address += 4, line += 0 0x0000000000000407 95 29 1 0 0 is_stmt 0x0000039f: 05 DW_LNS_set_column (19) 0x000003a1: 69 address += 6, line += 3 0x000000000000040d 98 19 1 0 0 is_stmt 0x000003a2: 05 DW_LNS_set_column (16) 0x000003a4: 73 address += 7, line += -1 0x0000000000000414 97 16 1 0 0 is_stmt 0x000003a5: 73 address += 7, line += -1 0x000000000000041b 96 16 1 0 0 is_stmt 0x000003a6: 06 DW_LNS_negate_stmt 0x000003a7: 03 DW_LNS_advance_line (0) 0x000003aa: 74 address += 7, line += 0 0x0000000000000422 0 16 1 0 0 0x000003ab: 05 DW_LNS_set_column (28) 0x000003ad: 06 DW_LNS_negate_stmt 0x000003ae: 03 DW_LNS_advance_line (94) 0x000003b1: 4a address += 4, line += 0 0x0000000000000426 94 28 1 0 0 is_stmt 0x000003b2: 05 DW_LNS_set_column (18) 0x000003b4: 06 DW_LNS_negate_stmt 0x000003b5: 58 address += 5, line += 0 0x000000000000042b 94 18 1 0 0 0x000003b6: 05 DW_LNS_set_column (4) 0x000003b8: 58 address += 5, line += 0 0x0000000000000430 94 4 1 0 0 0x000003b9: 03 DW_LNS_advance_line (0) 0x000003bc: 4a address += 4, line += 0 0x0000000000000434 0 4 1 0 0 0x000003bd: 05 DW_LNS_set_column (27) 0x000003bf: 06 DW_LNS_negate_stmt 0x000003c0: 03 DW_LNS_advance_line (102) 0x000003c3: 4a address += 4, line += 0 0x0000000000000438 102 27 1 0 0 is_stmt 0x000003c4: 05 DW_LNS_set_column (18) 0x000003c6: 06 DW_LNS_negate_stmt 0x000003c7: 58 address += 5, line += 0 0x000000000000043d 102 18 1 0 0 0x000003c8: 06 DW_LNS_negate_stmt 0x000003c9: 9f address += 10, line += 1 0x0000000000000447 103 18 1 0 0 is_stmt 0x000003ca: 06 DW_LNS_negate_stmt 0x000003cb: 03 DW_LNS_advance_line (0) 0x000003ce: 9e address += 10, line += 0 0x0000000000000451 0 18 1 0 0 0x000003cf: 06 DW_LNS_negate_stmt 0x000003d0: 03 DW_LNS_advance_line (105) 0x000003d3: 82 address += 8, line += 0 0x0000000000000459 105 18 1 0 0 is_stmt 0x000003d4: 05 DW_LNS_set_column (4) 0x000003d6: 06 DW_LNS_negate_stmt 0x000003d7: 58 address += 5, line += 0 0x000000000000045e 105 4 1 0 0 0x000003d8: 03 DW_LNS_advance_line (0) 0x000003db: 2e address += 2, line += 0 0x0000000000000460 0 4 1 0 0 0x000003dc: 05 DW_LNS_set_column (7) 0x000003de: 06 DW_LNS_negate_stmt 0x000003df: 03 DW_LNS_advance_line (106) 0x000003e2: 2e address += 2, line += 0 0x0000000000000462 106 7 1 0 0 is_stmt 0x000003e3: 05 DW_LNS_set_column (16) 0x000003e5: 06 DW_LNS_negate_stmt 0x000003e6: 82 address += 8, line += 0 0x000000000000046a 106 16 1 0 0 0x000003e7: 05 DW_LNS_set_column (24) 0x000003e9: 06 DW_LNS_negate_stmt 0x000003ea: 57 address += 5, line += -1 0x000000000000046f 105 24 1 0 0 is_stmt 0x000003eb: 05 DW_LNS_set_column (18) 0x000003ed: 06 DW_LNS_negate_stmt 0x000003ee: 58 address += 5, line += 0 0x0000000000000474 105 18 1 0 0 0x000003ef: 03 DW_LNS_advance_line (0) 0x000003f2: 74 address += 7, line += 0 0x000000000000047b 0 18 1 0 0 0x000003f3: 05 DW_LNS_set_column (13) 0x000003f5: 06 DW_LNS_negate_stmt 0x000003f6: 03 DW_LNS_advance_line (112) 0x000003f9: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000003fa: d6 address += 14, line += 0 0x000000000000049a 112 13 1 0 0 is_stmt 0x000003fb: 05 DW_LNS_set_column (26) 0x000003fd: 06 DW_LNS_negate_stmt 0x000003fe: 2e address += 2, line += 0 0x000000000000049c 112 26 1 0 0 0x000003ff: 05 DW_LNS_set_column (35) 0x00000401: c8 address += 13, line += 0 0x00000000000004a9 112 35 1 0 0 0x00000402: 05 DW_LNS_set_column (13) 0x00000404: 20 address += 1, line += 0 0x00000000000004aa 112 13 1 0 0 0x00000405: 05 DW_LNS_set_column (30) 0x00000407: 06 DW_LNS_negate_stmt 0x00000408: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000409: 49 address += 4, line += -1 0x00000000000004bf 111 30 1 0 0 is_stmt 0x0000040a: 05 DW_LNS_set_column (24) 0x0000040c: 06 DW_LNS_negate_stmt 0x0000040d: 58 address += 5, line += 0 0x00000000000004c4 111 24 1 0 0 0x0000040e: 05 DW_LNS_set_column (10) 0x00000410: 58 address += 5, line += 0 0x00000000000004c9 111 10 1 0 0 0x00000411: 06 DW_LNS_negate_stmt 0x00000412: 5a address += 5, line += 2 0x00000000000004ce 113 10 1 0 0 is_stmt 0x00000413: 06 DW_LNS_negate_stmt 0x00000414: 03 DW_LNS_advance_line (0) 0x00000417: 74 address += 7, line += 0 0x00000000000004d5 0 10 1 0 0 0x00000418: 05 DW_LNS_set_column (16) 0x0000041a: 06 DW_LNS_negate_stmt 0x0000041b: 03 DW_LNS_advance_line (118) 0x0000041e: 2e address += 2, line += 0 0x00000000000004d7 118 16 1 0 0 is_stmt 0x0000041f: 05 DW_LNS_set_column (7) 0x00000421: 06 DW_LNS_negate_stmt 0x00000422: 58 address += 5, line += 0 0x00000000000004dc 118 7 1 0 0 0x00000423: 03 DW_LNS_advance_line (0) 0x00000426: 2e address += 2, line += 0 0x00000000000004de 0 7 1 0 0 0x00000427: 05 DW_LNS_set_column (10) 0x00000429: 06 DW_LNS_negate_stmt 0x0000042a: 03 DW_LNS_advance_line (119) 0x0000042d: 2e address += 2, line += 0 0x00000000000004e0 119 10 1 0 0 is_stmt 0x0000042e: 05 DW_LNS_set_column (18) 0x00000430: 06 DW_LNS_negate_stmt 0x00000431: 2e address += 2, line += 0 0x00000000000004e2 119 18 1 0 0 0x00000432: 05 DW_LNS_set_column (10) 0x00000434: 90 address += 9, line += 0 0x00000000000004eb 119 10 1 0 0 0x00000435: 05 DW_LNS_set_column (23) 0x00000437: 2e address += 2, line += 0 0x00000000000004ed 119 23 1 0 0 0x00000438: 05 DW_LNS_set_column (16) 0x0000043a: 06 DW_LNS_negate_stmt 0x0000043b: 57 address += 5, line += -1 0x00000000000004f2 118 16 1 0 0 is_stmt 0x0000043c: 05 DW_LNS_set_column (7) 0x0000043e: 06 DW_LNS_negate_stmt 0x0000043f: ac address += 11, line += 0 0x00000000000004fd 118 7 1 0 0 0x00000440: 05 DW_LNS_set_column (16) 0x00000442: 06 DW_LNS_negate_stmt 0x00000443: 6a address += 6, line += 4 0x0000000000000503 122 16 1 0 0 is_stmt 0x00000444: 06 DW_LNS_negate_stmt 0x00000445: 03 DW_LNS_advance_line (0) 0x00000448: 74 address += 7, line += 0 0x000000000000050a 0 16 1 0 0 0x00000449: 05 DW_LNS_set_column (22) 0x0000044b: 06 DW_LNS_negate_stmt 0x0000044c: 03 DW_LNS_advance_line (125) 0x0000044f: c8 address += 13, line += 0 0x0000000000000517 125 22 1 0 0 is_stmt 0x00000450: 06 DW_LNS_negate_stmt 0x00000451: 03 DW_LNS_advance_line (0) 0x00000454: 74 address += 7, line += 0 0x000000000000051e 0 22 1 0 0 0x00000455: 05 DW_LNS_set_column (27) 0x00000457: 06 DW_LNS_negate_stmt 0x00000458: 03 DW_LNS_advance_line (126) 0x0000045b: 2e address += 2, line += 0 0x0000000000000520 126 27 1 0 0 is_stmt 0x0000045c: 05 DW_LNS_set_column (13) 0x0000045e: 06 DW_LNS_negate_stmt 0x0000045f: 58 address += 5, line += 0 0x0000000000000525 126 13 1 0 0 0x00000460: 03 DW_LNS_advance_line (0) 0x00000463: 2e address += 2, line += 0 0x0000000000000527 0 13 1 0 0 0x00000464: 05 DW_LNS_set_column (16) 0x00000466: 06 DW_LNS_negate_stmt 0x00000467: 03 DW_LNS_advance_line (127) 0x0000046a: 2e address += 2, line += 0 0x0000000000000529 127 16 1 0 0 is_stmt 0x0000046b: 05 DW_LNS_set_column (27) 0x0000046d: 06 DW_LNS_negate_stmt 0x0000046e: 82 address += 8, line += 0 0x0000000000000531 127 27 1 0 0 0x0000046f: 05 DW_LNS_set_column (35) 0x00000471: 2e address += 2, line += 0 0x0000000000000533 127 35 1 0 0 0x00000472: 05 DW_LNS_set_column (27) 0x00000474: 90 address += 9, line += 0 0x000000000000053c 127 27 1 0 0 0x00000475: 05 DW_LNS_set_column (25) 0x00000477: 58 address += 5, line += 0 0x0000000000000541 127 25 1 0 0 0x00000478: 05 DW_LNS_set_column (27) 0x0000047a: 06 DW_LNS_negate_stmt 0x0000047b: 3b address += 3, line += -1 0x0000000000000544 126 27 1 0 0 is_stmt 0x0000047c: 05 DW_LNS_set_column (13) 0x0000047e: 06 DW_LNS_negate_stmt 0x0000047f: 58 address += 5, line += 0 0x0000000000000549 126 13 1 0 0 0x00000480: 05 DW_LNS_set_column (0) 0x00000482: 03 DW_LNS_advance_line (0) 0x00000485: 3c address += 3, line += 0 0x000000000000054c 0 0 1 0 0 0x00000486: 05 DW_LNS_set_column (13) 0x00000488: 06 DW_LNS_negate_stmt 0x00000489: 03 DW_LNS_advance_line (128) 0x0000048c: 58 address += 5, line += 0 0x0000000000000551 128 13 1 0 0 is_stmt 0x0000048d: 05 DW_LNS_set_column (22) 0x0000048f: 06 DW_LNS_negate_stmt 0x00000490: 82 address += 8, line += 0 0x0000000000000559 128 22 1 0 0 0x00000491: 05 DW_LNS_set_column (16) 0x00000493: 06 DW_LNS_negate_stmt 0x00000494: 5a address += 5, line += 2 0x000000000000055e 130 16 1 0 0 is_stmt 0x00000495: 05 DW_LNS_set_column (14) 0x00000497: 06 DW_LNS_negate_stmt 0x00000498: 82 address += 8, line += 0 0x0000000000000566 130 14 1 0 0 0x00000499: 05 DW_LNS_set_column (25) 0x0000049b: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000049c: 12 address += 0, line += 0 0x0000000000000577 130 25 1 0 0 0x0000049d: 05 DW_LNS_set_column (14) 0x0000049f: 58 address += 5, line += 0 0x000000000000057c 130 14 1 0 0 0x000004a0: 05 DW_LNS_set_column (11) 0x000004a2: 06 DW_LNS_negate_stmt 0x000004a3: 31 address += 2, line += 3 0x000000000000057e 133 11 1 0 0 is_stmt 0x000004a4: 05 DW_LNS_set_column (16) 0x000004a6: 03 DW_LNS_advance_line (122) 0x000004a8: 58 address += 5, line += 0 0x0000000000000583 122 16 1 0 0 is_stmt 0x000004a9: 05 DW_LNS_set_column (14) 0x000004ab: 06 DW_LNS_negate_stmt 0x000004ac: 58 address += 5, line += 0 0x0000000000000588 122 14 1 0 0 0x000004ad: 03 DW_LNS_advance_line (0) 0x000004b0: 4a address += 4, line += 0 0x000000000000058c 0 14 1 0 0 0x000004b1: 06 DW_LNS_negate_stmt 0x000004b2: 03 DW_LNS_advance_line (130) 0x000004b5: 20 address += 1, line += 0 0x000000000000058d 130 14 1 0 0 is_stmt 0x000004b6: 05 DW_LNS_set_column (11) 0x000004b8: 03 DW_LNS_advance_line (110) 0x000004ba: 20 address += 1, line += 0 0x000000000000058e 110 11 1 0 0 is_stmt 0x000004bb: 06 DW_LNS_negate_stmt 0x000004bc: 03 DW_LNS_advance_line (0) 0x000004bf: 74 address += 7, line += 0 0x0000000000000595 0 11 1 0 0 0x000004c0: 05 DW_LNS_set_column (10) 0x000004c2: 06 DW_LNS_negate_stmt 0x000004c3: 03 DW_LNS_advance_line (113) 0x000004c6: 66 address += 6, line += 0 0x000000000000059b 113 10 1 0 0 is_stmt 0x000004c7: 06 DW_LNS_negate_stmt 0x000004c8: 03 DW_LNS_advance_line (0) 0x000004cb: 74 address += 7, line += 0 0x00000000000005a2 0 10 1 0 0 0x000004cc: 05 DW_LNS_set_column (16) 0x000004ce: 06 DW_LNS_negate_stmt 0x000004cf: 03 DW_LNS_advance_line (118) 0x000004d2: 2e address += 2, line += 0 0x00000000000005a4 118 16 1 0 0 is_stmt 0x000004d3: 05 DW_LNS_set_column (7) 0x000004d5: 06 DW_LNS_negate_stmt 0x000004d6: 58 address += 5, line += 0 0x00000000000005a9 118 7 1 0 0 0x000004d7: 03 DW_LNS_advance_line (0) 0x000004da: 2e address += 2, line += 0 0x00000000000005ab 0 7 1 0 0 0x000004db: 05 DW_LNS_set_column (10) 0x000004dd: 06 DW_LNS_negate_stmt 0x000004de: 03 DW_LNS_advance_line (119) 0x000004e1: 2e address += 2, line += 0 0x00000000000005ad 119 10 1 0 0 is_stmt 0x000004e2: 05 DW_LNS_set_column (18) 0x000004e4: 06 DW_LNS_negate_stmt 0x000004e5: 2e address += 2, line += 0 0x00000000000005af 119 18 1 0 0 0x000004e6: 05 DW_LNS_set_column (10) 0x000004e8: 90 address += 9, line += 0 0x00000000000005b8 119 10 1 0 0 0x000004e9: 05 DW_LNS_set_column (23) 0x000004eb: 2e address += 2, line += 0 0x00000000000005ba 119 23 1 0 0 0x000004ec: 05 DW_LNS_set_column (16) 0x000004ee: 06 DW_LNS_negate_stmt 0x000004ef: 57 address += 5, line += -1 0x00000000000005bf 118 16 1 0 0 is_stmt 0x000004f0: 05 DW_LNS_set_column (0) 0x000004f2: 06 DW_LNS_negate_stmt 0x000004f3: 03 DW_LNS_advance_line (0) 0x000004f6: 74 address += 7, line += 0 0x00000000000005c6 0 0 1 0 0 0x000004f7: 05 DW_LNS_set_column (7) 0x000004f9: 03 DW_LNS_advance_line (118) 0x000004fc: 4a address += 4, line += 0 0x00000000000005ca 118 7 1 0 0 0x000004fd: 05 DW_LNS_set_column (16) 0x000004ff: 06 DW_LNS_negate_stmt 0x00000500: 6a address += 6, line += 4 0x00000000000005d0 122 16 1 0 0 is_stmt 0x00000501: 05 DW_LNS_set_column (14) 0x00000503: 06 DW_LNS_negate_stmt 0x00000504: 58 address += 5, line += 0 0x00000000000005d5 122 14 1 0 0 0x00000505: 03 DW_LNS_advance_line (0) 0x00000508: 2e address += 2, line += 0 0x00000000000005d7 0 14 1 0 0 0x00000509: 05 DW_LNS_set_column (22) 0x0000050b: 06 DW_LNS_negate_stmt 0x0000050c: 03 DW_LNS_advance_line (125) 0x0000050f: 74 address += 7, line += 0 0x00000000000005de 125 22 1 0 0 is_stmt 0x00000510: 06 DW_LNS_negate_stmt 0x00000511: 03 DW_LNS_advance_line (0) 0x00000514: 90 address += 9, line += 0 0x00000000000005e7 0 22 1 0 0 0x00000515: 05 DW_LNS_set_column (27) 0x00000517: 06 DW_LNS_negate_stmt 0x00000518: 03 DW_LNS_advance_line (126) 0x0000051b: 66 address += 6, line += 0 0x00000000000005ed 126 27 1 0 0 is_stmt 0x0000051c: 05 DW_LNS_set_column (13) 0x0000051e: 06 DW_LNS_negate_stmt 0x0000051f: 58 address += 5, line += 0 0x00000000000005f2 126 13 1 0 0 0x00000520: 03 DW_LNS_advance_line (0) 0x00000523: 2e address += 2, line += 0 0x00000000000005f4 0 13 1 0 0 0x00000524: 05 DW_LNS_set_column (16) 0x00000526: 06 DW_LNS_negate_stmt 0x00000527: 03 DW_LNS_advance_line (127) 0x0000052a: 2e address += 2, line += 0 0x00000000000005f6 127 16 1 0 0 is_stmt 0x0000052b: 05 DW_LNS_set_column (27) 0x0000052d: 06 DW_LNS_negate_stmt 0x0000052e: 82 address += 8, line += 0 0x00000000000005fe 127 27 1 0 0 0x0000052f: 05 DW_LNS_set_column (35) 0x00000531: 2e address += 2, line += 0 0x0000000000000600 127 35 1 0 0 0x00000532: 05 DW_LNS_set_column (27) 0x00000534: 90 address += 9, line += 0 0x0000000000000609 127 27 1 0 0 0x00000535: 05 DW_LNS_set_column (25) 0x00000537: 58 address += 5, line += 0 0x000000000000060e 127 25 1 0 0 0x00000538: 05 DW_LNS_set_column (27) 0x0000053a: 06 DW_LNS_negate_stmt 0x0000053b: 3b address += 3, line += -1 0x0000000000000611 126 27 1 0 0 is_stmt 0x0000053c: 05 DW_LNS_set_column (13) 0x0000053e: 06 DW_LNS_negate_stmt 0x0000053f: 58 address += 5, line += 0 0x0000000000000616 126 13 1 0 0 0x00000540: 05 DW_LNS_set_column (0) 0x00000542: 03 DW_LNS_advance_line (0) 0x00000545: 3c address += 3, line += 0 0x0000000000000619 0 0 1 0 0 0x00000546: 05 DW_LNS_set_column (13) 0x00000548: 06 DW_LNS_negate_stmt 0x00000549: 03 DW_LNS_advance_line (128) 0x0000054c: 58 address += 5, line += 0 0x000000000000061e 128 13 1 0 0 is_stmt 0x0000054d: 05 DW_LNS_set_column (22) 0x0000054f: 06 DW_LNS_negate_stmt 0x00000550: 82 address += 8, line += 0 0x0000000000000626 128 22 1 0 0 0x00000551: 05 DW_LNS_set_column (16) 0x00000553: 06 DW_LNS_negate_stmt 0x00000554: 5a address += 5, line += 2 0x000000000000062b 130 16 1 0 0 is_stmt 0x00000555: 05 DW_LNS_set_column (14) 0x00000557: 06 DW_LNS_negate_stmt 0x00000558: 82 address += 8, line += 0 0x0000000000000633 130 14 1 0 0 0x00000559: 05 DW_LNS_set_column (25) 0x0000055b: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x0000055c: 12 address += 0, line += 0 0x0000000000000644 130 25 1 0 0 0x0000055d: 05 DW_LNS_set_column (14) 0x0000055f: 58 address += 5, line += 0 0x0000000000000649 130 14 1 0 0 0x00000560: 05 DW_LNS_set_column (11) 0x00000562: 06 DW_LNS_negate_stmt 0x00000563: 31 address += 2, line += 3 0x000000000000064b 133 11 1 0 0 is_stmt 0x00000564: 05 DW_LNS_set_column (16) 0x00000566: 03 DW_LNS_advance_line (122) 0x00000568: 58 address += 5, line += 0 0x0000000000000650 122 16 1 0 0 is_stmt 0x00000569: 05 DW_LNS_set_column (14) 0x0000056b: 06 DW_LNS_negate_stmt 0x0000056c: 58 address += 5, line += 0 0x0000000000000655 122 14 1 0 0 0x0000056d: 03 DW_LNS_advance_line (0) 0x00000570: 4a address += 4, line += 0 0x0000000000000659 0 14 1 0 0 0x00000571: 06 DW_LNS_negate_stmt 0x00000572: 03 DW_LNS_advance_line (130) 0x00000575: 20 address += 1, line += 0 0x000000000000065a 130 14 1 0 0 is_stmt 0x00000576: 05 DW_LNS_set_column (11) 0x00000578: 03 DW_LNS_advance_line (110) 0x0000057a: 20 address += 1, line += 0 0x000000000000065b 110 11 1 0 0 is_stmt 0x0000057b: 05 DW_LNS_set_column (4) 0x0000057d: 03 DW_LNS_advance_line (138) 0x0000057f: 66 address += 6, line += 0 0x0000000000000661 138 4 1 0 0 is_stmt 0x00000580: 83 address += 8, line += 1 0x0000000000000669 139 4 1 0 0 is_stmt 0x00000581: 06 DW_LNS_negate_stmt 0x00000582: 03 DW_LNS_advance_line (0) 0x00000585: 82 address += 8, line += 0 0x0000000000000671 0 4 1 0 0 0x00000586: 06 DW_LNS_negate_stmt 0x00000587: 03 DW_LNS_advance_line (141) 0x0000058a: 82 address += 8, line += 0 0x0000000000000679 141 4 1 0 0 is_stmt 0x0000058b: 06 DW_LNS_negate_stmt 0x0000058c: 03 DW_LNS_advance_line (0) 0x0000058f: 74 address += 7, line += 0 0x0000000000000680 0 4 1 0 0 0x00000590: 05 DW_LNS_set_column (20) 0x00000592: 06 DW_LNS_negate_stmt 0x00000593: 03 DW_LNS_advance_line (142) 0x00000596: 4a address += 4, line += 0 0x0000000000000684 142 20 1 0 0 is_stmt 0x00000597: be address += 12, line += 4 0x0000000000000690 146 20 1 0 0 is_stmt 0x00000598: 05 DW_LNS_set_column (7) 0x0000059a: 75 address += 7, line += 1 0x0000000000000697 147 7 1 0 0 is_stmt 0x0000059b: 05 DW_LNS_set_column (11) 0x0000059d: 7e address += 8, line += -4 0x000000000000069f 143 11 1 0 0 is_stmt 0x0000059e: 05 DW_LNS_set_column (20) 0x000005a0: 06 DW_LNS_negate_stmt 0x000005a1: 4a address += 4, line += 0 0x00000000000006a3 143 20 1 0 0 0x000005a2: 05 DW_LNS_set_column (11) 0x000005a4: 58 address += 5, line += 0 0x00000000000006a8 143 11 1 0 0 0x000005a5: 03 DW_LNS_advance_line (0) 0x000005a8: 3c address += 3, line += 0 0x00000000000006ab 0 11 1 0 0 0x000005a9: 05 DW_LNS_set_column (4) 0x000005ab: 06 DW_LNS_negate_stmt 0x000005ac: 03 DW_LNS_advance_line (141) 0x000005af: 4a address += 4, line += 0 0x00000000000006af 141 4 1 0 0 is_stmt 0x000005b0: 03 DW_LNS_advance_line (159) 0x000005b2: 66 address += 6, line += 0 0x00000000000006b5 159 4 1 0 0 is_stmt 0x000005b3: 06 DW_LNS_negate_stmt 0x000005b4: 03 DW_LNS_advance_line (0) 0x000005b7: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x000005b8: ba address += 12, line += 0 0x00000000000006d2 0 4 1 0 0 0x000005b9: 05 DW_LNS_set_column (1) 0x000005bb: 06 DW_LNS_negate_stmt 0x000005bc: 03 DW_LNS_advance_line (161) 0x000005bf: 20 address += 1, line += 0 0x00000000000006d3 161 1 1 0 0 is_stmt 0x000005c0: 02 DW_LNS_advance_pc (14) 0x000005c2: 00 DW_LNE_end_sequence 0x00000000000006e1 161 1 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)" 0x00000069: "/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp" 0x000000a9: "/usr/local/google/home/azakai/Dev/2-binaryen" 0x000000d6: "i" 0x000000d8: "int" 0x000000dc: "n" 0x000000de: "next" 0x000000e3: "worker_args" 0x000000ef: "std" 0x000000f3: "decltype(nullptr)" 0x00000105: "nullptr_t" 0x0000010f: "free" 0x00000114: "_ZL8fannkuchi" 0x00000122: "fannkuch" 0x0000012b: "showmax" 0x00000133: "args" 0x00000138: "targs" 0x0000013e: "perm1" 0x00000144: "count" 0x0000014a: "r" 0x0000014c: "maxflips" 0x00000155: "flips" 0x0000015b: "cleanup" 0x00000163: "p0" 0x00000166: "_Z15fannkuch_workerPv" 0x0000017c: "fannkuch_worker" 0x0000018c: "main" 0x00000191: "_arg" 0x00000196: "perm" 0x0000019b: "k" 0x0000019d: "j" 0x0000019f: "tmp" 0x000001a3: "argc" 0x000001a8: "argv" 0x000001ad: "char" .debug_ranges contents: 00000000 00000185 000001c3 00000000 000001ed 000001f6 00000000 0000030e 0000034c 00000000 00000376 0000037f 00000000 00000028 00000517 0000055e 00000028 000005de 0000062b 00000028 00000040 00000006 0000039d 00000040 0000039f 000006e1 00000040 DWARF debug info ================ Contains section .debug_info (851 bytes) Contains section .debug_loc (1073 bytes) Contains section .debug_ranges (88 bytes) Contains section .debug_abbrev (333 bytes) Contains section .debug_line (2682 bytes) Contains section .debug_str (434 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [3] DW_TAG_structure_type DW_CHILDREN_yes DW_AT_calling_convention DW_FORM_data1 DW_AT_name DW_FORM_strp DW_AT_byte_size DW_FORM_data1 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [4] DW_TAG_member DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_data_member_location DW_FORM_data1 [5] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [6] DW_TAG_namespace DW_CHILDREN_yes DW_AT_name DW_FORM_strp [7] DW_TAG_typedef DW_CHILDREN_no DW_AT_type DW_FORM_ref4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [8] DW_TAG_unspecified_type DW_CHILDREN_no DW_AT_name DW_FORM_strp [9] DW_TAG_imported_declaration DW_CHILDREN_no DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_import DW_FORM_ref4 [10] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [11] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [12] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [13] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [14] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_ranges DW_FORM_sec_offset [15] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [16] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr [17] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_declaration DW_FORM_flag_present DW_AT_external DW_FORM_flag_present [18] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [19] DW_TAG_pointer_type DW_CHILDREN_no [20] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_inline DW_FORM_data1 [21] DW_TAG_label DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 [22] DW_TAG_lexical_block DW_CHILDREN_yes [23] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [24] DW_TAG_inlined_subroutine DW_CHILDREN_yes DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_call_file DW_FORM_data1 DW_AT_call_line DW_FORM_data1 DW_AT_call_column DW_FORM_data1 [25] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [26] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_abstract_origin DW_FORM_ref4 [27] DW_TAG_variable DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [28] DW_TAG_label DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr .debug_info contents: 0x00000000: Compile Unit: length = 0x0000034f version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000353) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a9] = "/usr/local/google/home/azakai/Dev/2-binaryen") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000040 [0x00000007, 0x0000038a) [0x0000038c, 0x00000673)) 0x00000026: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x002b => {0x0000002b} "worker_args") 0x0000002b: DW_TAG_structure_type [3] * DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e3] = "worker_args") DW_AT_byte_size [DW_FORM_data1] (0x0c) DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (20) 0x00000034: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x00) 0x00000040: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (21) DW_AT_data_member_location [DW_FORM_data1] (0x04) 0x0000004c: DW_TAG_member [4] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000de] = "next") DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (22) DW_AT_data_member_location [DW_FORM_data1] (0x08) 0x00000058: NULL 0x00000059: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d8] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000060: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000065: DW_TAG_namespace [6] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ef] = "std") 0x0000006a: DW_TAG_typedef [7] DW_AT_type [DW_FORM_ref4] (cu + 0x0076 => {0x00000076} "decltype(nullptr)") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000105] = "nullptr_t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr") DW_AT_decl_line [DW_FORM_data1] (57) 0x00000075: NULL 0x00000076: DW_TAG_unspecified_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000f3] = "decltype(nullptr)") 0x0000007b: DW_TAG_imported_declaration [9] DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h") DW_AT_decl_line [DW_FORM_data1] (52) DW_AT_import [DW_FORM_ref4] (cu + 0x006a => {0x0000006a}) 0x00000082: DW_TAG_subprogram [10] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000007) DW_AT_high_pc [DW_FORM_data4] (0x00000383) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000166] = "_Z15fannkuch_workerPv") DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017c] = "fannkuch_worker") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000009e: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "_arg") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (26) DW_AT_type [DW_FORM_ref4] (cu + 0x01a7 => {0x000001a7} "*") 0x000000a9: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000133] = "args") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (28) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000000b4: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000007): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000c3: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000001d: [0xffffffff, 0x00000028): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x0000003d, 0x00000042): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +1, DW_OP_stack_value [0x00000110, 0x0000011a): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x0000023d, 0x00000248): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +1, DW_OP_stack_value [0x00000291, 0x0000029b): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000d2: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000a5: [0xffffffff, 0x0000002f): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000000e1: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000c3: [0xffffffff, 0x00000038): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000f0: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000e1: [0xffffffff, 0x0000003e): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000196] = "perm") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000000ff: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000ff: [0xffffffff, 0x00000044): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x0000010e: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000011d: [0xffffffff, 0x000001e7): [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value [0x00000181, 0x00000186): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000011d: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000149: [0xffffffff, 0x000000dc): [0x00000000, 0x00000013): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value [0x00000085, 0x0000008d): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000189, 0x00000194): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value [0x00000206, 0x0000020e): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000012c: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001ab: [0xffffffff, 0x000000eb): [0x00000000, 0x00000004): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value [0x00000181, 0x00000185): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019b] = "k") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000013b: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001d7: [0xffffffff, 0x00000103): [0x00000000, 0x00000004): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000003c, 0x0000003f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000181, 0x00000185): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000001bd, 0x000001c0): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019d] = "j") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000014a: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000021f: [0xffffffff, 0x00000118): [0x00000000, 0x0000002a): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value [0x0000003b, 0x00000051): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000181, 0x000001ab): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value [0x000001bc, 0x000001d2): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019f] = "tmp") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000159: DW_TAG_lexical_block [14] * DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000184, 0x000001c2) [0x000001ec, 0x000001f5) [0x00000305, 0x00000343) [0x0000036d, 0x00000376)) 0x0000015e: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000163] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (74) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000169: NULL 0x0000016a: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000036) 0x0000016f: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000003c) 0x00000174: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000042) 0x00000179: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000000e4) 0x0000017e: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000037f) 0x00000187: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000383) 0x00000190: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000387) 0x00000199: NULL 0x0000019a: DW_TAG_subprogram [17] * DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "free") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h") DW_AT_decl_line [DW_FORM_data1] (41) DW_AT_declaration [DW_FORM_flag_present] (true) DW_AT_external [DW_FORM_flag_present] (true) 0x000001a1: DW_TAG_formal_parameter [18] DW_AT_type [DW_FORM_ref4] (cu + 0x01a7 => {0x000001a7} "*") 0x000001a6: NULL 0x000001a7: DW_TAG_pointer_type [19] 0x000001a8: DW_TAG_subprogram [20] * DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000114] = "_ZL8fannkuchi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000122] = "fannkuch") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_inline [DW_FORM_data1] (DW_INL_inlined) 0x000001b8: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (87) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001c3: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000012b] = "showmax") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (90) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001ce: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000133] = "args") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001d9: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x000001e4: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000138] = "targs") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (89) DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "worker_args*") 0x000001ef: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x000001fa: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0060 => {0x00000060} "int*") 0x00000205: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000210: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000021b: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (91) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000226: DW_TAG_label [21] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000015b] = "cleanup") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (137) 0x0000022d: DW_TAG_lexical_block [22] * 0x0000022e: DW_TAG_variable [12] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000163] = "p0") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (125) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000239: NULL 0x0000023a: NULL 0x0000023b: DW_TAG_subprogram [23] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000038c) DW_AT_high_pc [DW_FORM_data4] (0x000002e7) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000018c] = "main") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000253: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001a3] = "argc") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x0000025e: DW_TAG_formal_parameter [11] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001a8] = "argv") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (152) DW_AT_type [DW_FORM_ref4] (cu + 0x0341 => {0x00000341} "char**") 0x00000269: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000267: [0xffffffff, 0x000003b8): [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (153) DW_AT_type [DW_FORM_ref4] (cu + 0x0059 => {0x00000059} "int") 0x00000278: DW_TAG_inlined_subroutine [24] * DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01a8 => {0x000001a8} "_ZL8fannkuchi") DW_AT_low_pc [DW_FORM_addr] (0x00000000000003cb) DW_AT_high_pc [DW_FORM_data4] (0xfffffc35) DW_AT_call_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_call_line [DW_FORM_data1] (159) DW_AT_call_column [DW_FORM_data1] (0x29) 0x00000288: DW_TAG_formal_parameter [25] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01b8 => {0x000001b8} "n") 0x0000028d: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000285: [0xffffffff, 0x00000000): [0x00000001, 0x00000001): DW_OP_consts +30, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c3 => {0x000001c3} "showmax") 0x00000296: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002a2: [0xffffffff, 0x00000638): [0x00000001, 0x00000001): DW_OP_lit0, DW_OP_stack_value [0x00000000, 0x00000018): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ce => {0x000001ce} "args") 0x0000029f: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002cc: [0xffffffff, 0x00000407): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x0000003f, 0x00000044): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x0000005d, 0x00000061): DW_OP_consts +0, DW_OP_stack_value [0x00000088, 0x0000008d): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d9 => {0x000001d9} "i") 0x000002a8: DW_TAG_variable [27] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01e4 => {0x000001e4} "targs") 0x000002ad: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000354: [0xffffffff, 0x0000041d): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ef => {0x000001ef} "perm1") 0x000002b6: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000372: [0xffffffff, 0x00000423): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01fa => {0x000001fa} "count") 0x000002bf: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000390: [0xffffffff, 0x00000544): [0x00000000, 0x00000007): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value [0x000000c2, 0x000000c9): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0205 => {0x00000205} "r") 0x000002c8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003e8: [0xffffffff, 0x00000621): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000027, 0x0000002f): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0210 => {0x00000210} "maxflips") 0x000002d1: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000413: [0xffffffff, 0x00000631): [0x00000000, 0x0000001f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x021b => {0x0000021b} "flips") 0x000002da: DW_TAG_label [28] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0226 => {0x00000226} "cleanup") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000615) 0x000002e3: DW_TAG_lexical_block [14] * DW_AT_ranges [DW_FORM_sec_offset] (0x00000028 [0x000004da, 0x0000051f) [0x00000596, 0x000005e1)) 0x000002e8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003bc: [0xffffffff, 0x0000059f): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022e => {0x0000022e} "p0") 0x000002f1: NULL 0x000002f2: NULL 0x000002f3: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003b6) 0x000002f8: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003c3) 0x000002fd: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x00000000000003e7) 0x00000302: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000041b) 0x00000307: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000421) 0x0000030c: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000487) 0x00000311: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000499) 0x00000316: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000055b) 0x0000031b: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000619) 0x00000324: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000061d) 0x0000032d: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x000000000000062f) 0x00000332: DW_TAG_GNU_call_site [16] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x019a => {0x0000019a} "free") DW_AT_low_pc [DW_FORM_addr] (0x000000000000063c) 0x0000033b: DW_TAG_GNU_call_site [15] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000667) 0x00000340: NULL 0x00000341: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x0346 => {0x00000346} "char*") 0x00000346: DW_TAG_pointer_type [2] DW_AT_type [DW_FORM_ref4] (cu + 0x034b => {0x0000034b} "char") 0x0000034b: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001ad] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x00000352: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000007): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value 0x0000001d: [0xffffffff, 0x00000028): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x0000003d, 0x00000042): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +1, DW_OP_stack_value [0x00000110, 0x0000011a): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x0000023d, 0x00000248): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +1, DW_OP_stack_value [0x00000291, 0x0000029b): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value 0x000000a5: [0xffffffff, 0x0000002f): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x000000c3: [0xffffffff, 0x00000038): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x000000e1: [0xffffffff, 0x0000003e): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x000000ff: [0xffffffff, 0x00000044): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x0000011d: [0xffffffff, 0x000001e7): [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value [0x00000181, 0x00000186): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x00000149: [0xffffffff, 0x000000dc): [0x00000000, 0x00000013): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value [0x00000085, 0x0000008d): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000189, 0x00000194): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value [0x00000206, 0x0000020e): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x000001ab: [0xffffffff, 0x000000eb): [0x00000000, 0x00000004): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value [0x00000181, 0x00000185): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value 0x000001d7: [0xffffffff, 0x00000103): [0x00000000, 0x00000004): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x0000003c, 0x0000003f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000181, 0x00000185): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x000001bd, 0x000001c0): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x0000021f: [0xffffffff, 0x00000118): [0x00000000, 0x0000002a): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value [0x0000003b, 0x00000051): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value [0x00000181, 0x000001ab): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value [0x000001bc, 0x000001d2): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000267: [0xffffffff, 0x000003b8): [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x00000285: [0xffffffff, 0x00000000): [0x00000001, 0x00000001): DW_OP_consts +30, DW_OP_stack_value 0x000002a2: [0xffffffff, 0x00000638): [0x00000001, 0x00000001): DW_OP_lit0, DW_OP_stack_value [0x00000000, 0x00000018): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000002cc: [0xffffffff, 0x00000407): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000000, 0x00000005): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x0000003f, 0x00000044): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x0000005d, 0x00000061): DW_OP_consts +0, DW_OP_stack_value [0x00000088, 0x0000008d): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value 0x00000354: [0xffffffff, 0x0000041d): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000372: [0xffffffff, 0x00000423): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x00000390: [0xffffffff, 0x00000544): [0x00000000, 0x00000007): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value [0x000000c2, 0x000000c9): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000003bc: [0xffffffff, 0x0000059f): [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value 0x000003e8: [0xffffffff, 0x00000621): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000027, 0x0000002f): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x00000413: [0xffffffff, 0x00000631): [0x00000000, 0x0000001f): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000a76 version: 4 prologue_length: 0x000000dd min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 include_directories[ 1] = "/usr/local/google/home/azakai/Dev" file_names[ 1]: name: "emscripten/tests/fannkuch.cpp" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 2]: name: "emscripten/system/include/libcxx/__nullptr" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 3]: name: "emscripten/system/include/libcxx/stddef.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 file_names[ 4]: name: "emscripten/system/include/libc/stdlib.h" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 0x000000e7: 00 DW_LNE_set_address (0x0000000000000007) 0x000000ee: 03 DW_LNS_advance_line (27) 0x000000f0: 01 DW_LNS_copy 0x0000000000000007 27 0 1 0 0 is_stmt 0x000000f1: 00 DW_LNE_set_address (0x0000000000000028) 0x000000f8: 03 DW_LNS_advance_line (33) 0x000000fa: 05 DW_LNS_set_column (14) 0x000000fc: 0a DW_LNS_set_prologue_end 0x000000fd: 01 DW_LNS_copy 0x0000000000000028 33 14 1 0 0 is_stmt prologue_end 0x000000fe: 00 DW_LNE_set_address (0x0000000000000031) 0x00000105: 03 DW_LNS_advance_line (34) 0x00000107: 05 DW_LNS_set_column (27) 0x00000109: 01 DW_LNS_copy 0x0000000000000031 34 27 1 0 0 is_stmt 0x0000010a: 00 DW_LNE_set_address (0x0000000000000032) 0x00000111: 05 DW_LNS_set_column (18) 0x00000113: 06 DW_LNS_negate_stmt 0x00000114: 01 DW_LNS_copy 0x0000000000000032 34 18 1 0 0 0x00000115: 00 DW_LNE_set_address (0x0000000000000038) 0x0000011c: 03 DW_LNS_advance_line (35) 0x0000011e: 05 DW_LNS_set_column (17) 0x00000120: 06 DW_LNS_negate_stmt 0x00000121: 01 DW_LNS_copy 0x0000000000000038 35 17 1 0 0 is_stmt 0x00000122: 00 DW_LNE_set_address (0x000000000000003e) 0x00000129: 03 DW_LNS_advance_line (36) 0x0000012b: 05 DW_LNS_set_column (18) 0x0000012d: 01 DW_LNS_copy 0x000000000000003e 36 18 1 0 0 is_stmt 0x0000012e: 00 DW_LNE_set_address (0x0000000000000048) 0x00000135: 03 DW_LNS_advance_line (37) 0x00000137: 01 DW_LNS_copy 0x0000000000000048 37 18 1 0 0 is_stmt 0x00000138: 00 DW_LNE_set_address (0x0000000000000051) 0x0000013f: 03 DW_LNS_advance_line (38) 0x00000141: 05 DW_LNS_set_column (7) 0x00000143: 01 DW_LNS_copy 0x0000000000000051 38 7 1 0 0 is_stmt 0x00000144: 00 DW_LNE_set_address (0x0000000000000059) 0x0000014b: 05 DW_LNS_set_column (16) 0x0000014d: 06 DW_LNS_negate_stmt 0x0000014e: 01 DW_LNS_copy 0x0000000000000059 38 16 1 0 0 0x0000014f: 00 DW_LNE_set_address (0x000000000000005e) 0x00000156: 03 DW_LNS_advance_line (37) 0x00000158: 05 DW_LNS_set_column (24) 0x0000015a: 06 DW_LNS_negate_stmt 0x0000015b: 01 DW_LNS_copy 0x000000000000005e 37 24 1 0 0 is_stmt 0x0000015c: 00 DW_LNE_set_address (0x0000000000000063) 0x00000163: 05 DW_LNS_set_column (18) 0x00000165: 06 DW_LNS_negate_stmt 0x00000166: 01 DW_LNS_copy 0x0000000000000063 37 18 1 0 0 0x00000167: 00 DW_LNE_set_address (0x0000000000000068) 0x0000016e: 05 DW_LNS_set_column (4) 0x00000170: 01 DW_LNS_copy 0x0000000000000068 37 4 1 0 0 0x00000171: 00 DW_LNE_set_address (0x000000000000006b) 0x00000178: 03 DW_LNS_advance_line (39) 0x0000017a: 06 DW_LNS_negate_stmt 0x0000017b: 01 DW_LNS_copy 0x000000000000006b 39 4 1 0 0 is_stmt 0x0000017c: 00 DW_LNE_set_address (0x000000000000006d) 0x00000183: 05 DW_LNS_set_column (16) 0x00000185: 06 DW_LNS_negate_stmt 0x00000186: 01 DW_LNS_copy 0x000000000000006d 39 16 1 0 0 0x00000187: 00 DW_LNE_set_address (0x0000000000000076) 0x0000018e: 05 DW_LNS_set_column (4) 0x00000190: 01 DW_LNS_copy 0x0000000000000076 39 4 1 0 0 0x00000191: 00 DW_LNE_set_address (0x0000000000000078) 0x00000198: 05 DW_LNS_set_column (23) 0x0000019a: 01 DW_LNS_copy 0x0000000000000078 39 23 1 0 0 0x0000019b: 00 DW_LNE_set_address (0x000000000000007d) 0x000001a2: 05 DW_LNS_set_column (19) 0x000001a4: 01 DW_LNS_copy 0x000000000000007d 39 19 1 0 0 0x000001a5: 00 DW_LNE_set_address (0x0000000000000082) 0x000001ac: 03 DW_LNS_advance_line (40) 0x000001ae: 05 DW_LNS_set_column (4) 0x000001b0: 06 DW_LNS_negate_stmt 0x000001b1: 01 DW_LNS_copy 0x0000000000000082 40 4 1 0 0 is_stmt 0x000001b2: 00 DW_LNE_set_address (0x000000000000008a) 0x000001b9: 05 DW_LNS_set_column (17) 0x000001bb: 06 DW_LNS_negate_stmt 0x000001bc: 01 DW_LNS_copy 0x000000000000008a 40 17 1 0 0 0x000001bd: 00 DW_LNE_set_address (0x0000000000000091) 0x000001c4: 03 DW_LNS_advance_line (37) 0x000001c6: 05 DW_LNS_set_column (18) 0x000001c8: 06 DW_LNS_negate_stmt 0x000001c9: 01 DW_LNS_copy 0x0000000000000091 37 18 1 0 0 is_stmt 0x000001ca: 00 DW_LNE_set_address (0x0000000000000096) 0x000001d1: 03 DW_LNS_advance_line (43) 0x000001d3: 05 DW_LNS_set_column (4) 0x000001d5: 01 DW_LNS_copy 0x0000000000000096 43 4 1 0 0 is_stmt 0x000001d6: 00 DW_LNE_set_address (0x000000000000009a) 0x000001dd: 03 DW_LNS_advance_line (44) 0x000001df: 05 DW_LNS_set_column (16) 0x000001e1: 01 DW_LNS_copy 0x000000000000009a 44 16 1 0 0 is_stmt 0x000001e2: 00 DW_LNE_set_address (0x00000000000000a3) 0x000001e9: 03 DW_LNS_advance_line (45) 0x000001eb: 05 DW_LNS_set_column (10) 0x000001ed: 01 DW_LNS_copy 0x00000000000000a3 45 10 1 0 0 is_stmt 0x000001ee: 00 DW_LNE_set_address (0x00000000000000a5) 0x000001f5: 05 DW_LNS_set_column (18) 0x000001f7: 06 DW_LNS_negate_stmt 0x000001f8: 01 DW_LNS_copy 0x00000000000000a5 45 18 1 0 0 0x000001f9: 00 DW_LNE_set_address (0x00000000000000ae) 0x00000200: 05 DW_LNS_set_column (10) 0x00000202: 01 DW_LNS_copy 0x00000000000000ae 45 10 1 0 0 0x00000203: 00 DW_LNE_set_address (0x00000000000000b0) 0x0000020a: 05 DW_LNS_set_column (23) 0x0000020c: 01 DW_LNS_copy 0x00000000000000b0 45 23 1 0 0 0x0000020d: 00 DW_LNE_set_address (0x00000000000000b5) 0x00000214: 03 DW_LNS_advance_line (44) 0x00000216: 05 DW_LNS_set_column (16) 0x00000218: 06 DW_LNS_negate_stmt 0x00000219: 01 DW_LNS_copy 0x00000000000000b5 44 16 1 0 0 is_stmt 0x0000021a: 00 DW_LNE_set_address (0x00000000000000c0) 0x00000221: 05 DW_LNS_set_column (7) 0x00000223: 06 DW_LNS_negate_stmt 0x00000224: 01 DW_LNS_copy 0x00000000000000c0 44 7 1 0 0 0x00000225: 00 DW_LNE_set_address (0x00000000000000c6) 0x0000022c: 03 DW_LNS_advance_line (46) 0x0000022e: 05 DW_LNS_set_column (11) 0x00000230: 06 DW_LNS_negate_stmt 0x00000231: 01 DW_LNS_copy 0x00000000000000c6 46 11 1 0 0 is_stmt 0x00000232: 00 DW_LNE_set_address (0x00000000000000d2) 0x00000239: 05 DW_LNS_set_column (28) 0x0000023b: 06 DW_LNS_negate_stmt 0x0000023c: 01 DW_LNS_copy 0x00000000000000d2 46 28 1 0 0 0x0000023d: 00 DW_LNE_set_address (0x00000000000000d7) 0x00000244: 05 DW_LNS_set_column (41) 0x00000246: 01 DW_LNS_copy 0x00000000000000d7 46 41 1 0 0 0x00000247: 00 DW_LNE_set_address (0x00000000000000dc) 0x0000024e: 03 DW_LNS_advance_line (48) 0x00000250: 05 DW_LNS_set_column (21) 0x00000252: 06 DW_LNS_negate_stmt 0x00000253: 01 DW_LNS_copy 0x00000000000000dc 48 21 1 0 0 is_stmt 0x00000254: 00 DW_LNE_set_address (0x00000000000000e4) 0x0000025b: 03 DW_LNS_advance_line (50) 0x0000025d: 05 DW_LNS_set_column (14) 0x0000025f: 01 DW_LNS_copy 0x00000000000000e4 50 14 1 0 0 is_stmt 0x00000260: 00 DW_LNE_set_address (0x00000000000000f5) 0x00000267: 03 DW_LNS_advance_line (52) 0x00000269: 05 DW_LNS_set_column (38) 0x0000026b: 01 DW_LNS_copy 0x00000000000000f5 52 38 1 0 0 is_stmt 0x0000026c: 00 DW_LNE_set_address (0x0000000000000109) 0x00000273: 03 DW_LNS_advance_line (53) 0x00000275: 05 DW_LNS_set_column (22) 0x00000277: 01 DW_LNS_copy 0x0000000000000109 53 22 1 0 0 is_stmt 0x00000278: 00 DW_LNE_set_address (0x0000000000000118) 0x0000027f: 03 DW_LNS_advance_line (54) 0x00000281: 05 DW_LNS_set_column (24) 0x00000283: 01 DW_LNS_copy 0x0000000000000118 54 24 1 0 0 is_stmt 0x00000284: 00 DW_LNE_set_address (0x000000000000011a) 0x0000028b: 05 DW_LNS_set_column (26) 0x0000028d: 06 DW_LNS_negate_stmt 0x0000028e: 01 DW_LNS_copy 0x000000000000011a 54 26 1 0 0 0x0000028f: 00 DW_LNE_set_address (0x0000000000000127) 0x00000296: 05 DW_LNS_set_column (24) 0x00000298: 01 DW_LNS_copy 0x0000000000000127 54 24 1 0 0 0x00000299: 00 DW_LNE_set_address (0x000000000000012a) 0x000002a0: 03 DW_LNS_advance_line (55) 0x000002a2: 06 DW_LNS_negate_stmt 0x000002a3: 01 DW_LNS_copy 0x000000000000012a 55 24 1 0 0 is_stmt 0x000002a4: 00 DW_LNE_set_address (0x0000000000000131) 0x000002ab: 03 DW_LNS_advance_line (52) 0x000002ad: 05 DW_LNS_set_column (44) 0x000002af: 01 DW_LNS_copy 0x0000000000000131 52 44 1 0 0 is_stmt 0x000002b0: 00 DW_LNE_set_address (0x000000000000013d) 0x000002b7: 05 DW_LNS_set_column (38) 0x000002b9: 06 DW_LNS_negate_stmt 0x000002ba: 01 DW_LNS_copy 0x000000000000013d 52 38 1 0 0 0x000002bb: 00 DW_LNE_set_address (0x0000000000000140) 0x000002c2: 05 DW_LNS_set_column (13) 0x000002c4: 01 DW_LNS_copy 0x0000000000000140 52 13 1 0 0 0x000002c5: 00 DW_LNE_set_address (0x0000000000000144) 0x000002cc: 03 DW_LNS_advance_line (58) 0x000002ce: 05 DW_LNS_set_column (19) 0x000002d0: 06 DW_LNS_negate_stmt 0x000002d1: 01 DW_LNS_copy 0x0000000000000144 58 19 1 0 0 is_stmt 0x000002d2: 00 DW_LNE_set_address (0x0000000000000153) 0x000002d9: 03 DW_LNS_advance_line (59) 0x000002db: 05 DW_LNS_set_column (21) 0x000002dd: 01 DW_LNS_copy 0x0000000000000153 59 21 1 0 0 is_stmt 0x000002de: 00 DW_LNE_set_address (0x000000000000015a) 0x000002e5: 03 DW_LNS_advance_line (57) 0x000002e7: 05 DW_LNS_set_column (18) 0x000002e9: 01 DW_LNS_copy 0x000000000000015a 57 18 1 0 0 is_stmt 0x000002ea: 00 DW_LNE_set_address (0x000000000000016a) 0x000002f1: 03 DW_LNS_advance_line (62) 0x000002f3: 05 DW_LNS_set_column (14) 0x000002f5: 01 DW_LNS_copy 0x000000000000016a 62 14 1 0 0 is_stmt 0x000002f6: 00 DW_LNE_set_address (0x000000000000016e) 0x000002fd: 05 DW_LNS_set_column (23) 0x000002ff: 06 DW_LNS_negate_stmt 0x00000300: 01 DW_LNS_copy 0x000000000000016e 62 23 1 0 0 0x00000301: 00 DW_LNE_set_address (0x0000000000000173) 0x00000308: 05 DW_LNS_set_column (14) 0x0000030a: 01 DW_LNS_copy 0x0000000000000173 62 14 1 0 0 0x0000030b: 00 DW_LNE_set_address (0x0000000000000177) 0x00000312: 03 DW_LNS_advance_line (66) 0x00000314: 05 DW_LNS_set_column (16) 0x00000316: 06 DW_LNS_negate_stmt 0x00000317: 01 DW_LNS_copy 0x0000000000000177 66 16 1 0 0 is_stmt 0x00000318: 00 DW_LNE_set_address (0x0000000000000184) 0x0000031f: 03 DW_LNS_advance_line (75) 0x00000321: 05 DW_LNS_set_column (27) 0x00000323: 01 DW_LNS_copy 0x0000000000000184 75 27 1 0 0 is_stmt 0x00000324: 00 DW_LNE_set_address (0x000000000000018d) 0x0000032b: 03 DW_LNS_advance_line (76) 0x0000032d: 05 DW_LNS_set_column (16) 0x0000032f: 01 DW_LNS_copy 0x000000000000018d 76 16 1 0 0 is_stmt 0x00000330: 00 DW_LNE_set_address (0x0000000000000195) 0x00000337: 05 DW_LNS_set_column (27) 0x00000339: 06 DW_LNS_negate_stmt 0x0000033a: 01 DW_LNS_copy 0x0000000000000195 76 27 1 0 0 0x0000033b: 00 DW_LNE_set_address (0x0000000000000197) 0x00000342: 05 DW_LNS_set_column (35) 0x00000344: 01 DW_LNS_copy 0x0000000000000197 76 35 1 0 0 0x00000345: 00 DW_LNE_set_address (0x00000000000001a0) 0x0000034c: 05 DW_LNS_set_column (27) 0x0000034e: 01 DW_LNS_copy 0x00000000000001a0 76 27 1 0 0 0x0000034f: 00 DW_LNE_set_address (0x00000000000001a5) 0x00000356: 05 DW_LNS_set_column (25) 0x00000358: 01 DW_LNS_copy 0x00000000000001a5 76 25 1 0 0 0x00000359: 00 DW_LNE_set_address (0x00000000000001a8) 0x00000360: 03 DW_LNS_advance_line (75) 0x00000362: 05 DW_LNS_set_column (27) 0x00000364: 06 DW_LNS_negate_stmt 0x00000365: 01 DW_LNS_copy 0x00000000000001a8 75 27 1 0 0 is_stmt 0x00000366: 00 DW_LNE_set_address (0x00000000000001ad) 0x0000036d: 05 DW_LNS_set_column (13) 0x0000036f: 06 DW_LNS_negate_stmt 0x00000370: 01 DW_LNS_copy 0x00000000000001ad 75 13 1 0 0 0x00000371: 00 DW_LNE_set_address (0x00000000000001b5) 0x00000378: 03 DW_LNS_advance_line (77) 0x0000037a: 06 DW_LNS_negate_stmt 0x0000037b: 01 DW_LNS_copy 0x00000000000001b5 77 13 1 0 0 is_stmt 0x0000037c: 00 DW_LNE_set_address (0x00000000000001bd) 0x00000383: 05 DW_LNS_set_column (22) 0x00000385: 06 DW_LNS_negate_stmt 0x00000386: 01 DW_LNS_copy 0x00000000000001bd 77 22 1 0 0 0x00000387: 00 DW_LNE_set_address (0x00000000000001c2) 0x0000038e: 03 DW_LNS_advance_line (79) 0x00000390: 05 DW_LNS_set_column (16) 0x00000392: 06 DW_LNS_negate_stmt 0x00000393: 01 DW_LNS_copy 0x00000000000001c2 79 16 1 0 0 is_stmt 0x00000394: 00 DW_LNE_set_address (0x00000000000001ca) 0x0000039b: 05 DW_LNS_set_column (14) 0x0000039d: 06 DW_LNS_negate_stmt 0x0000039e: 01 DW_LNS_copy 0x00000000000001ca 79 14 1 0 0 0x0000039f: 00 DW_LNE_set_address (0x00000000000001d9) 0x000003a6: 05 DW_LNS_set_column (25) 0x000003a8: 01 DW_LNS_copy 0x00000000000001d9 79 25 1 0 0 0x000003a9: 00 DW_LNE_set_address (0x00000000000001e0) 0x000003b0: 03 DW_LNS_advance_line (81) 0x000003b2: 05 DW_LNS_set_column (11) 0x000003b4: 06 DW_LNS_negate_stmt 0x000003b5: 01 DW_LNS_copy 0x00000000000001e0 81 11 1 0 0 is_stmt 0x000003b6: 00 DW_LNE_set_address (0x00000000000001e5) 0x000003bd: 03 DW_LNS_advance_line (66) 0x000003bf: 05 DW_LNS_set_column (16) 0x000003c1: 01 DW_LNS_copy 0x00000000000001e5 66 16 1 0 0 is_stmt 0x000003c2: 00 DW_LNE_set_address (0x00000000000001ec) 0x000003c9: 03 DW_LNS_advance_line (74) 0x000003cb: 05 DW_LNS_set_column (22) 0x000003cd: 01 DW_LNS_copy 0x00000000000001ec 74 22 1 0 0 is_stmt 0x000003ce: 00 DW_LNE_set_address (0x00000000000001f5) 0x000003d5: 03 DW_LNS_advance_line (37) 0x000003d7: 05 DW_LNS_set_column (4) 0x000003d9: 01 DW_LNS_copy 0x00000000000001f5 37 4 1 0 0 is_stmt 0x000003da: 00 DW_LNE_set_address (0x00000000000001fa) 0x000003e1: 03 DW_LNS_advance_line (39) 0x000003e3: 01 DW_LNS_copy 0x00000000000001fa 39 4 1 0 0 is_stmt 0x000003e4: 00 DW_LNE_set_address (0x00000000000001fc) 0x000003eb: 05 DW_LNS_set_column (16) 0x000003ed: 06 DW_LNS_negate_stmt 0x000003ee: 01 DW_LNS_copy 0x00000000000001fc 39 16 1 0 0 0x000003ef: 00 DW_LNE_set_address (0x0000000000000205) 0x000003f6: 05 DW_LNS_set_column (4) 0x000003f8: 01 DW_LNS_copy 0x0000000000000205 39 4 1 0 0 0x000003f9: 00 DW_LNE_set_address (0x0000000000000207) 0x00000400: 05 DW_LNS_set_column (23) 0x00000402: 01 DW_LNS_copy 0x0000000000000207 39 23 1 0 0 0x00000403: 00 DW_LNE_set_address (0x000000000000020c) 0x0000040a: 05 DW_LNS_set_column (19) 0x0000040c: 01 DW_LNS_copy 0x000000000000020c 39 19 1 0 0 0x0000040d: 00 DW_LNE_set_address (0x0000000000000211) 0x00000414: 03 DW_LNS_advance_line (40) 0x00000416: 05 DW_LNS_set_column (4) 0x00000418: 06 DW_LNS_negate_stmt 0x00000419: 01 DW_LNS_copy 0x0000000000000211 40 4 1 0 0 is_stmt 0x0000041a: 00 DW_LNE_set_address (0x0000000000000219) 0x00000421: 05 DW_LNS_set_column (17) 0x00000423: 06 DW_LNS_negate_stmt 0x00000424: 01 DW_LNS_copy 0x0000000000000219 40 17 1 0 0 0x00000425: 00 DW_LNE_set_address (0x0000000000000223) 0x0000042c: 03 DW_LNS_advance_line (44) 0x0000042e: 05 DW_LNS_set_column (16) 0x00000430: 06 DW_LNS_negate_stmt 0x00000431: 01 DW_LNS_copy 0x0000000000000223 44 16 1 0 0 is_stmt 0x00000432: 00 DW_LNE_set_address (0x000000000000022c) 0x00000439: 03 DW_LNS_advance_line (45) 0x0000043b: 05 DW_LNS_set_column (10) 0x0000043d: 01 DW_LNS_copy 0x000000000000022c 45 10 1 0 0 is_stmt 0x0000043e: 00 DW_LNE_set_address (0x000000000000022e) 0x00000445: 05 DW_LNS_set_column (18) 0x00000447: 06 DW_LNS_negate_stmt 0x00000448: 01 DW_LNS_copy 0x000000000000022e 45 18 1 0 0 0x00000449: 00 DW_LNE_set_address (0x0000000000000237) 0x00000450: 05 DW_LNS_set_column (10) 0x00000452: 01 DW_LNS_copy 0x0000000000000237 45 10 1 0 0 0x00000453: 00 DW_LNE_set_address (0x0000000000000239) 0x0000045a: 05 DW_LNS_set_column (23) 0x0000045c: 01 DW_LNS_copy 0x0000000000000239 45 23 1 0 0 0x0000045d: 00 DW_LNE_set_address (0x000000000000023e) 0x00000464: 03 DW_LNS_advance_line (44) 0x00000466: 05 DW_LNS_set_column (16) 0x00000468: 06 DW_LNS_negate_stmt 0x00000469: 01 DW_LNS_copy 0x000000000000023e 44 16 1 0 0 is_stmt 0x0000046a: 00 DW_LNE_set_address (0x000000000000024f) 0x00000471: 03 DW_LNS_advance_line (46) 0x00000473: 05 DW_LNS_set_column (11) 0x00000475: 01 DW_LNS_copy 0x000000000000024f 46 11 1 0 0 is_stmt 0x00000476: 00 DW_LNE_set_address (0x000000000000025b) 0x0000047d: 05 DW_LNS_set_column (28) 0x0000047f: 06 DW_LNS_negate_stmt 0x00000480: 01 DW_LNS_copy 0x000000000000025b 46 28 1 0 0 0x00000481: 00 DW_LNE_set_address (0x0000000000000260) 0x00000488: 05 DW_LNS_set_column (41) 0x0000048a: 01 DW_LNS_copy 0x0000000000000260 46 41 1 0 0 0x0000048b: 00 DW_LNE_set_address (0x0000000000000265) 0x00000492: 03 DW_LNS_advance_line (50) 0x00000494: 05 DW_LNS_set_column (14) 0x00000496: 06 DW_LNS_negate_stmt 0x00000497: 01 DW_LNS_copy 0x0000000000000265 50 14 1 0 0 is_stmt 0x00000498: 00 DW_LNE_set_address (0x0000000000000276) 0x0000049f: 03 DW_LNS_advance_line (52) 0x000004a1: 05 DW_LNS_set_column (38) 0x000004a3: 01 DW_LNS_copy 0x0000000000000276 52 38 1 0 0 is_stmt 0x000004a4: 00 DW_LNE_set_address (0x000000000000028a) 0x000004ab: 03 DW_LNS_advance_line (53) 0x000004ad: 05 DW_LNS_set_column (22) 0x000004af: 01 DW_LNS_copy 0x000000000000028a 53 22 1 0 0 is_stmt 0x000004b0: 00 DW_LNE_set_address (0x0000000000000299) 0x000004b7: 03 DW_LNS_advance_line (54) 0x000004b9: 05 DW_LNS_set_column (24) 0x000004bb: 01 DW_LNS_copy 0x0000000000000299 54 24 1 0 0 is_stmt 0x000004bc: 00 DW_LNE_set_address (0x000000000000029b) 0x000004c3: 05 DW_LNS_set_column (26) 0x000004c5: 06 DW_LNS_negate_stmt 0x000004c6: 01 DW_LNS_copy 0x000000000000029b 54 26 1 0 0 0x000004c7: 00 DW_LNE_set_address (0x00000000000002a8) 0x000004ce: 05 DW_LNS_set_column (24) 0x000004d0: 01 DW_LNS_copy 0x00000000000002a8 54 24 1 0 0 0x000004d1: 00 DW_LNE_set_address (0x00000000000002ab) 0x000004d8: 03 DW_LNS_advance_line (55) 0x000004da: 06 DW_LNS_negate_stmt 0x000004db: 01 DW_LNS_copy 0x00000000000002ab 55 24 1 0 0 is_stmt 0x000004dc: 00 DW_LNE_set_address (0x00000000000002b2) 0x000004e3: 03 DW_LNS_advance_line (52) 0x000004e5: 05 DW_LNS_set_column (44) 0x000004e7: 01 DW_LNS_copy 0x00000000000002b2 52 44 1 0 0 is_stmt 0x000004e8: 00 DW_LNE_set_address (0x00000000000002be) 0x000004ef: 05 DW_LNS_set_column (38) 0x000004f1: 06 DW_LNS_negate_stmt 0x000004f2: 01 DW_LNS_copy 0x00000000000002be 52 38 1 0 0 0x000004f3: 00 DW_LNE_set_address (0x00000000000002c5) 0x000004fa: 03 DW_LNS_advance_line (58) 0x000004fc: 05 DW_LNS_set_column (19) 0x000004fe: 06 DW_LNS_negate_stmt 0x000004ff: 01 DW_LNS_copy 0x00000000000002c5 58 19 1 0 0 is_stmt 0x00000500: 00 DW_LNE_set_address (0x00000000000002d4) 0x00000507: 03 DW_LNS_advance_line (59) 0x00000509: 05 DW_LNS_set_column (21) 0x0000050b: 01 DW_LNS_copy 0x00000000000002d4 59 21 1 0 0 is_stmt 0x0000050c: 00 DW_LNE_set_address (0x00000000000002db) 0x00000513: 03 DW_LNS_advance_line (57) 0x00000515: 05 DW_LNS_set_column (18) 0x00000517: 01 DW_LNS_copy 0x00000000000002db 57 18 1 0 0 is_stmt 0x00000518: 00 DW_LNE_set_address (0x00000000000002eb) 0x0000051f: 03 DW_LNS_advance_line (62) 0x00000521: 05 DW_LNS_set_column (14) 0x00000523: 01 DW_LNS_copy 0x00000000000002eb 62 14 1 0 0 is_stmt 0x00000524: 00 DW_LNE_set_address (0x00000000000002ef) 0x0000052b: 05 DW_LNS_set_column (23) 0x0000052d: 06 DW_LNS_negate_stmt 0x0000052e: 01 DW_LNS_copy 0x00000000000002ef 62 23 1 0 0 0x0000052f: 00 DW_LNE_set_address (0x00000000000002f4) 0x00000536: 05 DW_LNS_set_column (14) 0x00000538: 01 DW_LNS_copy 0x00000000000002f4 62 14 1 0 0 0x00000539: 00 DW_LNE_set_address (0x00000000000002f8) 0x00000540: 03 DW_LNS_advance_line (66) 0x00000542: 05 DW_LNS_set_column (16) 0x00000544: 06 DW_LNS_negate_stmt 0x00000545: 01 DW_LNS_copy 0x00000000000002f8 66 16 1 0 0 is_stmt 0x00000546: 00 DW_LNE_set_address (0x0000000000000305) 0x0000054d: 03 DW_LNS_advance_line (75) 0x0000054f: 05 DW_LNS_set_column (27) 0x00000551: 01 DW_LNS_copy 0x0000000000000305 75 27 1 0 0 is_stmt 0x00000552: 00 DW_LNE_set_address (0x000000000000030e) 0x00000559: 03 DW_LNS_advance_line (76) 0x0000055b: 05 DW_LNS_set_column (16) 0x0000055d: 01 DW_LNS_copy 0x000000000000030e 76 16 1 0 0 is_stmt 0x0000055e: 00 DW_LNE_set_address (0x0000000000000316) 0x00000565: 05 DW_LNS_set_column (27) 0x00000567: 06 DW_LNS_negate_stmt 0x00000568: 01 DW_LNS_copy 0x0000000000000316 76 27 1 0 0 0x00000569: 00 DW_LNE_set_address (0x0000000000000318) 0x00000570: 05 DW_LNS_set_column (35) 0x00000572: 01 DW_LNS_copy 0x0000000000000318 76 35 1 0 0 0x00000573: 00 DW_LNE_set_address (0x0000000000000321) 0x0000057a: 05 DW_LNS_set_column (27) 0x0000057c: 01 DW_LNS_copy 0x0000000000000321 76 27 1 0 0 0x0000057d: 00 DW_LNE_set_address (0x0000000000000326) 0x00000584: 05 DW_LNS_set_column (25) 0x00000586: 01 DW_LNS_copy 0x0000000000000326 76 25 1 0 0 0x00000587: 00 DW_LNE_set_address (0x0000000000000329) 0x0000058e: 03 DW_LNS_advance_line (75) 0x00000590: 05 DW_LNS_set_column (27) 0x00000592: 06 DW_LNS_negate_stmt 0x00000593: 01 DW_LNS_copy 0x0000000000000329 75 27 1 0 0 is_stmt 0x00000594: 00 DW_LNE_set_address (0x0000000000000336) 0x0000059b: 03 DW_LNS_advance_line (77) 0x0000059d: 05 DW_LNS_set_column (13) 0x0000059f: 01 DW_LNS_copy 0x0000000000000336 77 13 1 0 0 is_stmt 0x000005a0: 00 DW_LNE_set_address (0x000000000000033e) 0x000005a7: 05 DW_LNS_set_column (22) 0x000005a9: 06 DW_LNS_negate_stmt 0x000005aa: 01 DW_LNS_copy 0x000000000000033e 77 22 1 0 0 0x000005ab: 00 DW_LNE_set_address (0x0000000000000343) 0x000005b2: 03 DW_LNS_advance_line (79) 0x000005b4: 05 DW_LNS_set_column (16) 0x000005b6: 06 DW_LNS_negate_stmt 0x000005b7: 01 DW_LNS_copy 0x0000000000000343 79 16 1 0 0 is_stmt 0x000005b8: 00 DW_LNE_set_address (0x000000000000034b) 0x000005bf: 05 DW_LNS_set_column (14) 0x000005c1: 06 DW_LNS_negate_stmt 0x000005c2: 01 DW_LNS_copy 0x000000000000034b 79 14 1 0 0 0x000005c3: 00 DW_LNE_set_address (0x000000000000035a) 0x000005ca: 05 DW_LNS_set_column (25) 0x000005cc: 01 DW_LNS_copy 0x000000000000035a 79 25 1 0 0 0x000005cd: 00 DW_LNE_set_address (0x0000000000000361) 0x000005d4: 03 DW_LNS_advance_line (81) 0x000005d6: 05 DW_LNS_set_column (11) 0x000005d8: 06 DW_LNS_negate_stmt 0x000005d9: 01 DW_LNS_copy 0x0000000000000361 81 11 1 0 0 is_stmt 0x000005da: 00 DW_LNE_set_address (0x0000000000000366) 0x000005e1: 03 DW_LNS_advance_line (66) 0x000005e3: 05 DW_LNS_set_column (16) 0x000005e5: 01 DW_LNS_copy 0x0000000000000366 66 16 1 0 0 is_stmt 0x000005e6: 00 DW_LNE_set_address (0x000000000000036d) 0x000005ed: 03 DW_LNS_advance_line (74) 0x000005ef: 05 DW_LNS_set_column (22) 0x000005f1: 01 DW_LNS_copy 0x000000000000036d 74 22 1 0 0 is_stmt 0x000005f2: 00 DW_LNE_set_address (0x000000000000037b) 0x000005f9: 03 DW_LNS_advance_line (67) 0x000005fb: 05 DW_LNS_set_column (13) 0x000005fd: 01 DW_LNS_copy 0x000000000000037b 67 13 1 0 0 is_stmt 0x000005fe: 00 DW_LNE_set_address (0x000000000000037f) 0x00000605: 03 DW_LNS_advance_line (68) 0x00000607: 01 DW_LNS_copy 0x000000000000037f 68 13 1 0 0 is_stmt 0x00000608: 00 DW_LNE_set_address (0x0000000000000383) 0x0000060f: 03 DW_LNS_advance_line (69) 0x00000611: 01 DW_LNS_copy 0x0000000000000383 69 13 1 0 0 is_stmt 0x00000612: 00 DW_LNE_set_address (0x0000000000000387) 0x00000619: 03 DW_LNS_advance_line (70) 0x0000061b: 01 DW_LNS_copy 0x0000000000000387 70 13 1 0 0 is_stmt 0x0000061c: 00 DW_LNE_set_address (0x000000000000038a) 0x00000623: 00 DW_LNE_end_sequence 0x000000000000038a 70 13 1 0 0 is_stmt end_sequence 0x00000626: 00 DW_LNE_set_address (0x000000000000038c) 0x0000062d: 03 DW_LNS_advance_line (152) 0x00000630: 01 DW_LNS_copy 0x000000000000038c 152 0 1 0 0 is_stmt 0x00000631: 00 DW_LNE_set_address (0x00000000000003a8) 0x00000638: 03 DW_LNS_advance_line (153) 0x0000063a: 05 DW_LNS_set_column (17) 0x0000063c: 0a DW_LNS_set_prologue_end 0x0000063d: 01 DW_LNS_copy 0x00000000000003a8 153 17 1 0 0 is_stmt prologue_end 0x0000063e: 00 DW_LNE_set_address (0x00000000000003af) 0x00000645: 05 DW_LNS_set_column (28) 0x00000647: 06 DW_LNS_negate_stmt 0x00000648: 01 DW_LNS_copy 0x00000000000003af 153 28 1 0 0 0x00000649: 00 DW_LNE_set_address (0x00000000000003b4) 0x00000650: 05 DW_LNS_set_column (23) 0x00000652: 01 DW_LNS_copy 0x00000000000003b4 153 23 1 0 0 0x00000653: 00 DW_LNE_set_address (0x00000000000003ba) 0x0000065a: 03 DW_LNS_advance_line (155) 0x0000065c: 05 DW_LNS_set_column (10) 0x0000065e: 06 DW_LNS_negate_stmt 0x0000065f: 01 DW_LNS_copy 0x00000000000003ba 155 10 1 0 0 is_stmt 0x00000660: 00 DW_LNE_set_address (0x00000000000003bb) 0x00000667: 05 DW_LNS_set_column (8) 0x00000669: 06 DW_LNS_negate_stmt 0x0000066a: 01 DW_LNS_copy 0x00000000000003bb 155 8 1 0 0 0x0000066b: 00 DW_LNE_set_address (0x00000000000003be) 0x00000672: 03 DW_LNS_advance_line (156) 0x00000674: 05 DW_LNS_set_column (7) 0x00000676: 06 DW_LNS_negate_stmt 0x00000677: 01 DW_LNS_copy 0x00000000000003be 156 7 1 0 0 is_stmt 0x00000678: 00 DW_LNE_set_address (0x00000000000003cb) 0x0000067f: 03 DW_LNS_advance_line (94) 0x00000681: 05 DW_LNS_set_column (18) 0x00000683: 01 DW_LNS_copy 0x00000000000003cb 94 18 1 0 0 is_stmt 0x00000684: 00 DW_LNE_set_address (0x00000000000003e5) 0x0000068b: 03 DW_LNS_advance_line (95) 0x0000068d: 05 DW_LNS_set_column (29) 0x0000068f: 01 DW_LNS_copy 0x00000000000003e5 95 29 1 0 0 is_stmt 0x00000690: 00 DW_LNE_set_address (0x00000000000003e7) 0x00000697: 03 DW_LNS_advance_line (98) 0x00000699: 05 DW_LNS_set_column (19) 0x0000069b: 01 DW_LNS_copy 0x00000000000003e7 98 19 1 0 0 is_stmt 0x0000069c: 00 DW_LNE_set_address (0x00000000000003ee) 0x000006a3: 03 DW_LNS_advance_line (97) 0x000006a5: 05 DW_LNS_set_column (16) 0x000006a7: 01 DW_LNS_copy 0x00000000000003ee 97 16 1 0 0 is_stmt 0x000006a8: 00 DW_LNE_set_address (0x00000000000003f5) 0x000006af: 03 DW_LNS_advance_line (96) 0x000006b1: 01 DW_LNS_copy 0x00000000000003f5 96 16 1 0 0 is_stmt 0x000006b2: 00 DW_LNE_set_address (0x0000000000000400) 0x000006b9: 03 DW_LNS_advance_line (94) 0x000006bb: 05 DW_LNS_set_column (28) 0x000006bd: 01 DW_LNS_copy 0x0000000000000400 94 28 1 0 0 is_stmt 0x000006be: 00 DW_LNE_set_address (0x0000000000000405) 0x000006c5: 05 DW_LNS_set_column (18) 0x000006c7: 06 DW_LNS_negate_stmt 0x000006c8: 01 DW_LNS_copy 0x0000000000000405 94 18 1 0 0 0x000006c9: 00 DW_LNE_set_address (0x000000000000040a) 0x000006d0: 05 DW_LNS_set_column (4) 0x000006d2: 01 DW_LNS_copy 0x000000000000040a 94 4 1 0 0 0x000006d3: 00 DW_LNE_set_address (0x0000000000000412) 0x000006da: 03 DW_LNS_advance_line (102) 0x000006dc: 05 DW_LNS_set_column (27) 0x000006de: 06 DW_LNS_negate_stmt 0x000006df: 01 DW_LNS_copy 0x0000000000000412 102 27 1 0 0 is_stmt 0x000006e0: 00 DW_LNE_set_address (0x0000000000000417) 0x000006e7: 05 DW_LNS_set_column (18) 0x000006e9: 06 DW_LNS_negate_stmt 0x000006ea: 01 DW_LNS_copy 0x0000000000000417 102 18 1 0 0 0x000006eb: 00 DW_LNE_set_address (0x000000000000041d) 0x000006f2: 03 DW_LNS_advance_line (103) 0x000006f4: 06 DW_LNS_negate_stmt 0x000006f5: 01 DW_LNS_copy 0x000000000000041d 103 18 1 0 0 is_stmt 0x000006f6: 00 DW_LNE_set_address (0x0000000000000429) 0x000006fd: 03 DW_LNS_advance_line (105) 0x000006ff: 01 DW_LNS_copy 0x0000000000000429 105 18 1 0 0 is_stmt 0x00000700: 00 DW_LNE_set_address (0x0000000000000432) 0x00000707: 03 DW_LNS_advance_line (106) 0x00000709: 05 DW_LNS_set_column (7) 0x0000070b: 01 DW_LNS_copy 0x0000000000000432 106 7 1 0 0 is_stmt 0x0000070c: 00 DW_LNE_set_address (0x000000000000043a) 0x00000713: 05 DW_LNS_set_column (16) 0x00000715: 06 DW_LNS_negate_stmt 0x00000716: 01 DW_LNS_copy 0x000000000000043a 106 16 1 0 0 0x00000717: 00 DW_LNE_set_address (0x000000000000043f) 0x0000071e: 03 DW_LNS_advance_line (105) 0x00000720: 05 DW_LNS_set_column (24) 0x00000722: 06 DW_LNS_negate_stmt 0x00000723: 01 DW_LNS_copy 0x000000000000043f 105 24 1 0 0 is_stmt 0x00000724: 00 DW_LNE_set_address (0x0000000000000444) 0x0000072b: 05 DW_LNS_set_column (18) 0x0000072d: 06 DW_LNS_negate_stmt 0x0000072e: 01 DW_LNS_copy 0x0000000000000444 105 18 1 0 0 0x0000072f: 00 DW_LNE_set_address (0x000000000000046a) 0x00000736: 03 DW_LNS_advance_line (112) 0x00000738: 05 DW_LNS_set_column (13) 0x0000073a: 06 DW_LNS_negate_stmt 0x0000073b: 01 DW_LNS_copy 0x000000000000046a 112 13 1 0 0 is_stmt 0x0000073c: 00 DW_LNE_set_address (0x000000000000046c) 0x00000743: 05 DW_LNS_set_column (26) 0x00000745: 06 DW_LNS_negate_stmt 0x00000746: 01 DW_LNS_copy 0x000000000000046c 112 26 1 0 0 0x00000747: 00 DW_LNE_set_address (0x0000000000000479) 0x0000074e: 05 DW_LNS_set_column (35) 0x00000750: 01 DW_LNS_copy 0x0000000000000479 112 35 1 0 0 0x00000751: 00 DW_LNE_set_address (0x000000000000047a) 0x00000758: 05 DW_LNS_set_column (13) 0x0000075a: 01 DW_LNS_copy 0x000000000000047a 112 13 1 0 0 0x0000075b: 00 DW_LNE_set_address (0x0000000000000488) 0x00000762: 03 DW_LNS_advance_line (111) 0x00000764: 05 DW_LNS_set_column (30) 0x00000766: 06 DW_LNS_negate_stmt 0x00000767: 01 DW_LNS_copy 0x0000000000000488 111 30 1 0 0 is_stmt 0x00000768: 00 DW_LNE_set_address (0x000000000000048d) 0x0000076f: 05 DW_LNS_set_column (24) 0x00000771: 06 DW_LNS_negate_stmt 0x00000772: 01 DW_LNS_copy 0x000000000000048d 111 24 1 0 0 0x00000773: 00 DW_LNE_set_address (0x0000000000000492) 0x0000077a: 05 DW_LNS_set_column (10) 0x0000077c: 01 DW_LNS_copy 0x0000000000000492 111 10 1 0 0 0x0000077d: 00 DW_LNE_set_address (0x0000000000000497) 0x00000784: 03 DW_LNS_advance_line (113) 0x00000786: 06 DW_LNS_negate_stmt 0x00000787: 01 DW_LNS_copy 0x0000000000000497 113 10 1 0 0 is_stmt 0x00000788: 00 DW_LNE_set_address (0x000000000000049a) 0x0000078f: 03 DW_LNS_advance_line (118) 0x00000791: 05 DW_LNS_set_column (16) 0x00000793: 01 DW_LNS_copy 0x000000000000049a 118 16 1 0 0 is_stmt 0x00000794: 00 DW_LNE_set_address (0x00000000000004a3) 0x0000079b: 03 DW_LNS_advance_line (119) 0x0000079d: 05 DW_LNS_set_column (10) 0x0000079f: 01 DW_LNS_copy 0x00000000000004a3 119 10 1 0 0 is_stmt 0x000007a0: 00 DW_LNE_set_address (0x00000000000004a5) 0x000007a7: 05 DW_LNS_set_column (18) 0x000007a9: 06 DW_LNS_negate_stmt 0x000007aa: 01 DW_LNS_copy 0x00000000000004a5 119 18 1 0 0 0x000007ab: 00 DW_LNE_set_address (0x00000000000004ae) 0x000007b2: 05 DW_LNS_set_column (10) 0x000007b4: 01 DW_LNS_copy 0x00000000000004ae 119 10 1 0 0 0x000007b5: 00 DW_LNE_set_address (0x00000000000004b0) 0x000007bc: 05 DW_LNS_set_column (23) 0x000007be: 01 DW_LNS_copy 0x00000000000004b0 119 23 1 0 0 0x000007bf: 00 DW_LNE_set_address (0x00000000000004b5) 0x000007c6: 03 DW_LNS_advance_line (118) 0x000007c8: 05 DW_LNS_set_column (16) 0x000007ca: 06 DW_LNS_negate_stmt 0x000007cb: 01 DW_LNS_copy 0x00000000000004b5 118 16 1 0 0 is_stmt 0x000007cc: 00 DW_LNE_set_address (0x00000000000004c0) 0x000007d3: 05 DW_LNS_set_column (7) 0x000007d5: 06 DW_LNS_negate_stmt 0x000007d6: 01 DW_LNS_copy 0x00000000000004c0 118 7 1 0 0 0x000007d7: 00 DW_LNE_set_address (0x00000000000004c6) 0x000007de: 03 DW_LNS_advance_line (122) 0x000007e0: 05 DW_LNS_set_column (16) 0x000007e2: 06 DW_LNS_negate_stmt 0x000007e3: 01 DW_LNS_copy 0x00000000000004c6 122 16 1 0 0 is_stmt 0x000007e4: 00 DW_LNE_set_address (0x00000000000004da) 0x000007eb: 03 DW_LNS_advance_line (125) 0x000007ed: 05 DW_LNS_set_column (22) 0x000007ef: 01 DW_LNS_copy 0x00000000000004da 125 22 1 0 0 is_stmt 0x000007f0: 00 DW_LNE_set_address (0x00000000000004e1) 0x000007f7: 03 DW_LNS_advance_line (126) 0x000007f9: 05 DW_LNS_set_column (27) 0x000007fb: 01 DW_LNS_copy 0x00000000000004e1 126 27 1 0 0 is_stmt 0x000007fc: 00 DW_LNE_set_address (0x00000000000004ea) 0x00000803: 03 DW_LNS_advance_line (127) 0x00000805: 05 DW_LNS_set_column (16) 0x00000807: 01 DW_LNS_copy 0x00000000000004ea 127 16 1 0 0 is_stmt 0x00000808: 00 DW_LNE_set_address (0x00000000000004f2) 0x0000080f: 05 DW_LNS_set_column (27) 0x00000811: 06 DW_LNS_negate_stmt 0x00000812: 01 DW_LNS_copy 0x00000000000004f2 127 27 1 0 0 0x00000813: 00 DW_LNE_set_address (0x00000000000004f4) 0x0000081a: 05 DW_LNS_set_column (35) 0x0000081c: 01 DW_LNS_copy 0x00000000000004f4 127 35 1 0 0 0x0000081d: 00 DW_LNE_set_address (0x00000000000004fd) 0x00000824: 05 DW_LNS_set_column (27) 0x00000826: 01 DW_LNS_copy 0x00000000000004fd 127 27 1 0 0 0x00000827: 00 DW_LNE_set_address (0x0000000000000502) 0x0000082e: 05 DW_LNS_set_column (25) 0x00000830: 01 DW_LNS_copy 0x0000000000000502 127 25 1 0 0 0x00000831: 00 DW_LNE_set_address (0x0000000000000505) 0x00000838: 03 DW_LNS_advance_line (126) 0x0000083a: 05 DW_LNS_set_column (27) 0x0000083c: 06 DW_LNS_negate_stmt 0x0000083d: 01 DW_LNS_copy 0x0000000000000505 126 27 1 0 0 is_stmt 0x0000083e: 00 DW_LNE_set_address (0x000000000000050a) 0x00000845: 05 DW_LNS_set_column (13) 0x00000847: 06 DW_LNS_negate_stmt 0x00000848: 01 DW_LNS_copy 0x000000000000050a 126 13 1 0 0 0x00000849: 00 DW_LNE_set_address (0x0000000000000512) 0x00000850: 03 DW_LNS_advance_line (128) 0x00000852: 06 DW_LNS_negate_stmt 0x00000853: 01 DW_LNS_copy 0x0000000000000512 128 13 1 0 0 is_stmt 0x00000854: 00 DW_LNE_set_address (0x000000000000051a) 0x0000085b: 05 DW_LNS_set_column (22) 0x0000085d: 06 DW_LNS_negate_stmt 0x0000085e: 01 DW_LNS_copy 0x000000000000051a 128 22 1 0 0 0x0000085f: 00 DW_LNE_set_address (0x000000000000051f) 0x00000866: 03 DW_LNS_advance_line (130) 0x00000868: 05 DW_LNS_set_column (16) 0x0000086a: 06 DW_LNS_negate_stmt 0x0000086b: 01 DW_LNS_copy 0x000000000000051f 130 16 1 0 0 is_stmt 0x0000086c: 00 DW_LNE_set_address (0x0000000000000527) 0x00000873: 05 DW_LNS_set_column (14) 0x00000875: 06 DW_LNS_negate_stmt 0x00000876: 01 DW_LNS_copy 0x0000000000000527 130 14 1 0 0 0x00000877: 00 DW_LNE_set_address (0x0000000000000536) 0x0000087e: 05 DW_LNS_set_column (25) 0x00000880: 01 DW_LNS_copy 0x0000000000000536 130 25 1 0 0 0x00000881: 00 DW_LNE_set_address (0x000000000000053d) 0x00000888: 03 DW_LNS_advance_line (133) 0x0000088a: 05 DW_LNS_set_column (11) 0x0000088c: 06 DW_LNS_negate_stmt 0x0000088d: 01 DW_LNS_copy 0x000000000000053d 133 11 1 0 0 is_stmt 0x0000088e: 00 DW_LNE_set_address (0x0000000000000542) 0x00000895: 03 DW_LNS_advance_line (122) 0x00000897: 05 DW_LNS_set_column (16) 0x00000899: 01 DW_LNS_copy 0x0000000000000542 122 16 1 0 0 is_stmt 0x0000089a: 00 DW_LNE_set_address (0x0000000000000547) 0x000008a1: 05 DW_LNS_set_column (14) 0x000008a3: 06 DW_LNS_negate_stmt 0x000008a4: 01 DW_LNS_copy 0x0000000000000547 122 14 1 0 0 0x000008a5: 00 DW_LNE_set_address (0x000000000000054d) 0x000008ac: 03 DW_LNS_advance_line (110) 0x000008ae: 05 DW_LNS_set_column (11) 0x000008b0: 06 DW_LNS_negate_stmt 0x000008b1: 01 DW_LNS_copy 0x000000000000054d 110 11 1 0 0 is_stmt 0x000008b2: 00 DW_LNE_set_address (0x0000000000000559) 0x000008b9: 03 DW_LNS_advance_line (113) 0x000008bb: 05 DW_LNS_set_column (10) 0x000008bd: 01 DW_LNS_copy 0x0000000000000559 113 10 1 0 0 is_stmt 0x000008be: 00 DW_LNE_set_address (0x000000000000055c) 0x000008c5: 03 DW_LNS_advance_line (118) 0x000008c7: 05 DW_LNS_set_column (16) 0x000008c9: 01 DW_LNS_copy 0x000000000000055c 118 16 1 0 0 is_stmt 0x000008ca: 00 DW_LNE_set_address (0x0000000000000565) 0x000008d1: 03 DW_LNS_advance_line (119) 0x000008d3: 05 DW_LNS_set_column (10) 0x000008d5: 01 DW_LNS_copy 0x0000000000000565 119 10 1 0 0 is_stmt 0x000008d6: 00 DW_LNE_set_address (0x0000000000000567) 0x000008dd: 05 DW_LNS_set_column (18) 0x000008df: 06 DW_LNS_negate_stmt 0x000008e0: 01 DW_LNS_copy 0x0000000000000567 119 18 1 0 0 0x000008e1: 00 DW_LNE_set_address (0x0000000000000570) 0x000008e8: 05 DW_LNS_set_column (10) 0x000008ea: 01 DW_LNS_copy 0x0000000000000570 119 10 1 0 0 0x000008eb: 00 DW_LNE_set_address (0x0000000000000572) 0x000008f2: 05 DW_LNS_set_column (23) 0x000008f4: 01 DW_LNS_copy 0x0000000000000572 119 23 1 0 0 0x000008f5: 00 DW_LNE_set_address (0x0000000000000577) 0x000008fc: 03 DW_LNS_advance_line (118) 0x000008fe: 05 DW_LNS_set_column (16) 0x00000900: 06 DW_LNS_negate_stmt 0x00000901: 01 DW_LNS_copy 0x0000000000000577 118 16 1 0 0 is_stmt 0x00000902: 00 DW_LNE_set_address (0x0000000000000582) 0x00000909: 05 DW_LNS_set_column (7) 0x0000090b: 06 DW_LNS_negate_stmt 0x0000090c: 01 DW_LNS_copy 0x0000000000000582 118 7 1 0 0 0x0000090d: 00 DW_LNE_set_address (0x0000000000000588) 0x00000914: 03 DW_LNS_advance_line (122) 0x00000916: 05 DW_LNS_set_column (16) 0x00000918: 06 DW_LNS_negate_stmt 0x00000919: 01 DW_LNS_copy 0x0000000000000588 122 16 1 0 0 is_stmt 0x0000091a: 00 DW_LNE_set_address (0x000000000000058d) 0x00000921: 05 DW_LNS_set_column (14) 0x00000923: 06 DW_LNS_negate_stmt 0x00000924: 01 DW_LNS_copy 0x000000000000058d 122 14 1 0 0 0x00000925: 00 DW_LNE_set_address (0x0000000000000596) 0x0000092c: 03 DW_LNS_advance_line (125) 0x0000092e: 05 DW_LNS_set_column (22) 0x00000930: 06 DW_LNS_negate_stmt 0x00000931: 01 DW_LNS_copy 0x0000000000000596 125 22 1 0 0 is_stmt 0x00000932: 00 DW_LNE_set_address (0x00000000000005a3) 0x00000939: 03 DW_LNS_advance_line (126) 0x0000093b: 05 DW_LNS_set_column (27) 0x0000093d: 01 DW_LNS_copy 0x00000000000005a3 126 27 1 0 0 is_stmt 0x0000093e: 00 DW_LNE_set_address (0x00000000000005ac) 0x00000945: 03 DW_LNS_advance_line (127) 0x00000947: 05 DW_LNS_set_column (16) 0x00000949: 01 DW_LNS_copy 0x00000000000005ac 127 16 1 0 0 is_stmt 0x0000094a: 00 DW_LNE_set_address (0x00000000000005b4) 0x00000951: 05 DW_LNS_set_column (27) 0x00000953: 06 DW_LNS_negate_stmt 0x00000954: 01 DW_LNS_copy 0x00000000000005b4 127 27 1 0 0 0x00000955: 00 DW_LNE_set_address (0x00000000000005b6) 0x0000095c: 05 DW_LNS_set_column (35) 0x0000095e: 01 DW_LNS_copy 0x00000000000005b6 127 35 1 0 0 0x0000095f: 00 DW_LNE_set_address (0x00000000000005bf) 0x00000966: 05 DW_LNS_set_column (27) 0x00000968: 01 DW_LNS_copy 0x00000000000005bf 127 27 1 0 0 0x00000969: 00 DW_LNE_set_address (0x00000000000005c4) 0x00000970: 05 DW_LNS_set_column (25) 0x00000972: 01 DW_LNS_copy 0x00000000000005c4 127 25 1 0 0 0x00000973: 00 DW_LNE_set_address (0x00000000000005c7) 0x0000097a: 03 DW_LNS_advance_line (126) 0x0000097c: 05 DW_LNS_set_column (27) 0x0000097e: 06 DW_LNS_negate_stmt 0x0000097f: 01 DW_LNS_copy 0x00000000000005c7 126 27 1 0 0 is_stmt 0x00000980: 00 DW_LNE_set_address (0x00000000000005cc) 0x00000987: 05 DW_LNS_set_column (13) 0x00000989: 06 DW_LNS_negate_stmt 0x0000098a: 01 DW_LNS_copy 0x00000000000005cc 126 13 1 0 0 0x0000098b: 00 DW_LNE_set_address (0x00000000000005d4) 0x00000992: 03 DW_LNS_advance_line (128) 0x00000994: 06 DW_LNS_negate_stmt 0x00000995: 01 DW_LNS_copy 0x00000000000005d4 128 13 1 0 0 is_stmt 0x00000996: 00 DW_LNE_set_address (0x00000000000005dc) 0x0000099d: 05 DW_LNS_set_column (22) 0x0000099f: 06 DW_LNS_negate_stmt 0x000009a0: 01 DW_LNS_copy 0x00000000000005dc 128 22 1 0 0 0x000009a1: 00 DW_LNE_set_address (0x00000000000005e1) 0x000009a8: 03 DW_LNS_advance_line (130) 0x000009aa: 05 DW_LNS_set_column (16) 0x000009ac: 06 DW_LNS_negate_stmt 0x000009ad: 01 DW_LNS_copy 0x00000000000005e1 130 16 1 0 0 is_stmt 0x000009ae: 00 DW_LNE_set_address (0x00000000000005e9) 0x000009b5: 05 DW_LNS_set_column (14) 0x000009b7: 06 DW_LNS_negate_stmt 0x000009b8: 01 DW_LNS_copy 0x00000000000005e9 130 14 1 0 0 0x000009b9: 00 DW_LNE_set_address (0x00000000000005f8) 0x000009c0: 05 DW_LNS_set_column (25) 0x000009c2: 01 DW_LNS_copy 0x00000000000005f8 130 25 1 0 0 0x000009c3: 00 DW_LNE_set_address (0x00000000000005ff) 0x000009ca: 03 DW_LNS_advance_line (133) 0x000009cc: 05 DW_LNS_set_column (11) 0x000009ce: 06 DW_LNS_negate_stmt 0x000009cf: 01 DW_LNS_copy 0x00000000000005ff 133 11 1 0 0 is_stmt 0x000009d0: 00 DW_LNE_set_address (0x0000000000000604) 0x000009d7: 03 DW_LNS_advance_line (122) 0x000009d9: 05 DW_LNS_set_column (16) 0x000009db: 01 DW_LNS_copy 0x0000000000000604 122 16 1 0 0 is_stmt 0x000009dc: 00 DW_LNE_set_address (0x0000000000000609) 0x000009e3: 05 DW_LNS_set_column (14) 0x000009e5: 06 DW_LNS_negate_stmt 0x000009e6: 01 DW_LNS_copy 0x0000000000000609 122 14 1 0 0 0x000009e7: 00 DW_LNE_set_address (0x000000000000060f) 0x000009ee: 03 DW_LNS_advance_line (110) 0x000009f0: 05 DW_LNS_set_column (11) 0x000009f2: 06 DW_LNS_negate_stmt 0x000009f3: 01 DW_LNS_copy 0x000000000000060f 110 11 1 0 0 is_stmt 0x000009f4: 00 DW_LNE_set_address (0x0000000000000615) 0x000009fb: 03 DW_LNS_advance_line (138) 0x000009fd: 05 DW_LNS_set_column (4) 0x000009ff: 01 DW_LNS_copy 0x0000000000000615 138 4 1 0 0 is_stmt 0x00000a00: 00 DW_LNE_set_address (0x0000000000000619) 0x00000a07: 03 DW_LNS_advance_line (139) 0x00000a09: 01 DW_LNS_copy 0x0000000000000619 139 4 1 0 0 is_stmt 0x00000a0a: 00 DW_LNE_set_address (0x0000000000000629) 0x00000a11: 03 DW_LNS_advance_line (142) 0x00000a13: 05 DW_LNS_set_column (20) 0x00000a15: 01 DW_LNS_copy 0x0000000000000629 142 20 1 0 0 is_stmt 0x00000a16: 00 DW_LNE_set_address (0x0000000000000631) 0x00000a1d: 03 DW_LNS_advance_line (146) 0x00000a1f: 01 DW_LNS_copy 0x0000000000000631 146 20 1 0 0 is_stmt 0x00000a20: 00 DW_LNE_set_address (0x0000000000000638) 0x00000a27: 03 DW_LNS_advance_line (147) 0x00000a29: 05 DW_LNS_set_column (7) 0x00000a2b: 01 DW_LNS_copy 0x0000000000000638 147 7 1 0 0 is_stmt 0x00000a2c: 00 DW_LNE_set_address (0x000000000000063c) 0x00000a33: 03 DW_LNS_advance_line (143) 0x00000a35: 05 DW_LNS_set_column (11) 0x00000a37: 01 DW_LNS_copy 0x000000000000063c 143 11 1 0 0 is_stmt 0x00000a38: 00 DW_LNE_set_address (0x0000000000000640) 0x00000a3f: 05 DW_LNS_set_column (20) 0x00000a41: 06 DW_LNS_negate_stmt 0x00000a42: 01 DW_LNS_copy 0x0000000000000640 143 20 1 0 0 0x00000a43: 00 DW_LNE_set_address (0x0000000000000645) 0x00000a4a: 05 DW_LNS_set_column (11) 0x00000a4c: 01 DW_LNS_copy 0x0000000000000645 143 11 1 0 0 0x00000a4d: 00 DW_LNE_set_address (0x000000000000064c) 0x00000a54: 03 DW_LNS_advance_line (141) 0x00000a56: 05 DW_LNS_set_column (4) 0x00000a58: 06 DW_LNS_negate_stmt 0x00000a59: 01 DW_LNS_copy 0x000000000000064c 141 4 1 0 0 is_stmt 0x00000a5a: 00 DW_LNE_set_address (0x0000000000000652) 0x00000a61: 03 DW_LNS_advance_line (159) 0x00000a63: 01 DW_LNS_copy 0x0000000000000652 159 4 1 0 0 is_stmt 0x00000a64: 00 DW_LNE_set_address (0x0000000000000669) 0x00000a6b: 03 DW_LNS_advance_line (161) 0x00000a6d: 05 DW_LNS_set_column (1) 0x00000a6f: 01 DW_LNS_copy 0x0000000000000669 161 1 1 0 0 is_stmt 0x00000a70: 00 DW_LNE_set_address (0x0000000000000673) 0x00000a77: 00 DW_LNE_end_sequence 0x0000000000000673 161 1 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)" 0x00000069: "/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp" 0x000000a9: "/usr/local/google/home/azakai/Dev/2-binaryen" 0x000000d6: "i" 0x000000d8: "int" 0x000000dc: "n" 0x000000de: "next" 0x000000e3: "worker_args" 0x000000ef: "std" 0x000000f3: "decltype(nullptr)" 0x00000105: "nullptr_t" 0x0000010f: "free" 0x00000114: "_ZL8fannkuchi" 0x00000122: "fannkuch" 0x0000012b: "showmax" 0x00000133: "args" 0x00000138: "targs" 0x0000013e: "perm1" 0x00000144: "count" 0x0000014a: "r" 0x0000014c: "maxflips" 0x00000155: "flips" 0x0000015b: "cleanup" 0x00000163: "p0" 0x00000166: "_Z15fannkuch_workerPv" 0x0000017c: "fannkuch_worker" 0x0000018c: "main" 0x00000191: "_arg" 0x00000196: "perm" 0x0000019b: "k" 0x0000019d: "j" 0x0000019f: "tmp" 0x000001a3: "argc" 0x000001a8: "argv" 0x000001ad: "char" .debug_ranges contents: 00000000 00000184 000001c2 00000000 000001ec 000001f5 00000000 00000305 00000343 00000000 0000036d 00000376 00000000 00000028 000004da 0000051f 00000028 00000596 000005e1 00000028 00000040 00000007 0000038a 00000040 0000038c 00000673 00000040 (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 1024) "Pfannkuchen(%d) = %d.\n\00%d\00Wrong argument.\00") (import "env" "malloc" (func $malloc (param i32) (result i32))) (import "env" "memcpy" (func $memcpy (param i32 i32 i32) (result i32))) (import "env" "free" (func $free (param i32))) (import "env" "atoi" (func $atoi (param i32) (result i32))) (import "env" "puts" (func $puts (param i32) (result i32))) (import "env" "iprintf" (func $iprintf (param i32 i32) (result i32))) (import "env" "putchar" (func $putchar (param i32) (result i32))) (global $global$0 (mut i32) (i32.const 5243952)) (global $global$1 i32 (i32.const 1066)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ;; code offset: 0x3 (nop) ) (func $fannkuch_worker\28void*\29 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) ;; code offset: 0x36 (local.set $3 ;; code offset: 0x34 (call $malloc ;; code offset: 0x32 (local.tee $12 ;; code offset: 0x31 (i32.shl ;; code offset: 0x2d (local.tee $2 ;; code offset: 0x2a (i32.load offset=4 ;; code offset: 0x28 (local.get $0) ) ) ;; code offset: 0x2f (i32.const 2) ) ) ) ) ;; code offset: 0x3c (local.set $8 ;; code offset: 0x3a (call $malloc ;; code offset: 0x38 (local.get $12) ) ) ;; code offset: 0x42 (local.set $9 ;; code offset: 0x40 (call $malloc ;; code offset: 0x3e (local.get $12) ) ) ;; code offset: 0x44 (block $label$1 (block $label$2 ;; code offset: 0x4d (if ;; code offset: 0x4c (i32.gt_s ;; code offset: 0x48 (local.get $2) ;; code offset: 0x4a (i32.const 0) ) (block ;; code offset: 0x4f (loop $label$4 ;; code offset: 0x5b (i32.store ;; code offset: 0x58 (i32.add ;; code offset: 0x51 (local.get $3) ;; code offset: 0x57 (i32.shl ;; code offset: 0x53 (local.get $1) ;; code offset: 0x55 (i32.const 2) ) ) ;; code offset: 0x59 (local.get $1) ) ;; code offset: 0x68 (br_if $label$4 ;; code offset: 0x67 (i32.ne ;; code offset: 0x63 (local.tee $1 ;; code offset: 0x62 (i32.add ;; code offset: 0x5e (local.get $1) ;; code offset: 0x60 (i32.const 1) ) ) ;; code offset: 0x65 (local.get $2) ) ) ) ;; code offset: 0x7f (i32.store ;; code offset: 0x77 (i32.add ;; code offset: 0x6b (local.get $3) ;; code offset: 0x76 (i32.shl ;; code offset: 0x72 (local.tee $1 ;; code offset: 0x6f (i32.load ;; code offset: 0x6d (local.get $0) ) ) ;; code offset: 0x74 (i32.const 2) ) ) ;; code offset: 0x7d (local.tee $4 ;; code offset: 0x7c (i32.sub ;; code offset: 0x78 (local.get $2) ;; code offset: 0x7a (i32.const 1) ) ) ) ;; code offset: 0x8e (i32.store ;; code offset: 0x8a (local.tee $13 ;; code offset: 0x89 (i32.add ;; code offset: 0x82 (local.get $3) ;; code offset: 0x88 (i32.shl ;; code offset: 0x84 (local.get $4) ;; code offset: 0x86 (i32.const 2) ) ) ) ;; code offset: 0x8c (local.get $1) ) ;; code offset: 0x96 (br_if $label$2 ;; code offset: 0x95 (i32.le_s ;; code offset: 0x91 (local.get $2) ;; code offset: 0x93 (i32.const 0) ) ) ;; code offset: 0x98 (loop $label$5 ;; code offset: 0x9f (if ;; code offset: 0x9e (i32.gt_s ;; code offset: 0x9a (local.get $2) ;; code offset: 0x9c (i32.const 1) ) ;; code offset: 0xa1 (loop $label$7 ;; code offset: 0xb2 (i32.store ;; code offset: 0xaf (i32.add ;; code offset: 0xa3 (local.get $9) ;; code offset: 0xae (i32.shl ;; code offset: 0xaa (local.tee $1 ;; code offset: 0xa9 (i32.sub ;; code offset: 0xa5 (local.get $2) ;; code offset: 0xa7 (i32.const 1) ) ) ;; code offset: 0xac (i32.const 2) ) ) ;; code offset: 0xb0 (local.get $2) ) ;; code offset: 0xba (local.set $0 ;; code offset: 0xb9 (i32.gt_s ;; code offset: 0xb5 (local.get $2) ;; code offset: 0xb7 (i32.const 2) ) ) ;; code offset: 0xbe (local.set $2 ;; code offset: 0xbc (local.get $1) ) ;; code offset: 0xc2 (br_if $label$7 ;; code offset: 0xc0 (local.get $0) ) ) ) ;; code offset: 0xc6 (block $label$8 ;; code offset: 0xd0 (br_if $label$8 ;; code offset: 0xcf (i32.eqz ;; code offset: 0xcd (local.tee $10 ;; code offset: 0xca (i32.load ;; code offset: 0xc8 (local.get $3) ) ) ) ) ;; code offset: 0xda (br_if $label$8 ;; code offset: 0xd9 (i32.eq ;; code offset: 0xd4 (i32.load ;; code offset: 0xd2 (local.get $13) ) ;; code offset: 0xd7 (local.get $4) ) ) ;; code offset: 0xe9 (local.set $6 ;; code offset: 0xe6 (i32.load ;; code offset: 0xe4 (local.tee $11 ;; code offset: 0xe2 (call $memcpy ;; code offset: 0xdc (local.get $8) ;; code offset: 0xde (local.get $3) ;; code offset: 0xe0 (local.get $12) ) ) ) ) ;; code offset: 0xed (local.set $0 ;; code offset: 0xeb (i32.const 0) ) ;; code offset: 0xef (loop $label$9 ;; code offset: 0xf3 (local.set $16 ;; code offset: 0xf1 (local.get $0) ) ;; code offset: 0xfa (if ;; code offset: 0xf9 (i32.ge_s ;; code offset: 0xf5 (local.get $6) ;; code offset: 0xf7 (i32.const 3) ) (block ;; code offset: 0x101 (local.set $1 ;; code offset: 0x100 (i32.sub ;; code offset: 0xfc (local.get $6) ;; code offset: 0xfe (i32.const 1) ) ) ;; code offset: 0x105 (local.set $0 ;; code offset: 0x103 (i32.const 1) ) ;; code offset: 0x107 (loop $label$11 ;; code offset: 0x116 (local.set $15 ;; code offset: 0x113 (i32.load ;; code offset: 0x111 (local.tee $14 ;; code offset: 0x110 (i32.add ;; code offset: 0x109 (local.get $11) ;; code offset: 0x10f (i32.shl ;; code offset: 0x10b (local.get $0) ;; code offset: 0x10d (i32.const 2) ) ) ) ) ) ;; code offset: 0x127 (i32.store ;; code offset: 0x118 (local.get $14) ;; code offset: 0x124 (i32.load ;; code offset: 0x122 (local.tee $7 ;; code offset: 0x121 (i32.add ;; code offset: 0x11a (local.get $11) ;; code offset: 0x120 (i32.shl ;; code offset: 0x11c (local.get $1) ;; code offset: 0x11e (i32.const 2) ) ) ) ) ) ;; code offset: 0x12e (i32.store ;; code offset: 0x12a (local.get $7) ;; code offset: 0x12c (local.get $15) ) ;; code offset: 0x140 (br_if $label$11 ;; code offset: 0x13f (i32.lt_s ;; code offset: 0x136 (local.tee $0 ;; code offset: 0x135 (i32.add ;; code offset: 0x131 (local.get $0) ;; code offset: 0x133 (i32.const 1) ) ) ;; code offset: 0x13d (local.tee $1 ;; code offset: 0x13c (i32.sub ;; code offset: 0x138 (local.get $1) ;; code offset: 0x13a (i32.const 1) ) ) ) ) ) ) ) ;; code offset: 0x151 (local.set $1 ;; code offset: 0x14e (i32.load ;; code offset: 0x14c (local.tee $0 ;; code offset: 0x14b (i32.add ;; code offset: 0x144 (local.get $11) ;; code offset: 0x14a (i32.shl ;; code offset: 0x146 (local.get $6) ;; code offset: 0x148 (i32.const 2) ) ) ) ) ) ;; code offset: 0x157 (i32.store ;; code offset: 0x153 (local.get $0) ;; code offset: 0x155 (local.get $6) ) ;; code offset: 0x15f (local.set $0 ;; code offset: 0x15e (i32.add ;; code offset: 0x15a (local.get $16) ;; code offset: 0x15c (i32.const 1) ) ) ;; code offset: 0x163 (local.set $6 ;; code offset: 0x161 (local.get $1) ) ;; code offset: 0x167 (br_if $label$9 ;; code offset: 0x165 (local.get $1) ) ) ;; code offset: 0x174 (local.set $5 ;; code offset: 0x173 (select ;; code offset: 0x16a (local.get $5) ;; code offset: 0x16c (local.get $0) ;; code offset: 0x172 (i32.gt_s ;; code offset: 0x16e (local.get $5) ;; code offset: 0x170 (local.get $16) ) ) ) ) ;; code offset: 0x17c (br_if $label$1 ;; code offset: 0x17b (i32.ge_s ;; code offset: 0x177 (local.get $2) ;; code offset: 0x179 (local.get $4) ) ) ;; code offset: 0x17e (loop $label$12 ;; code offset: 0x182 (local.set $1 ;; code offset: 0x180 (i32.const 0) ) ;; code offset: 0x189 (if ;; code offset: 0x188 (i32.gt_s ;; code offset: 0x184 (local.get $2) ;; code offset: 0x186 (i32.const 0) ) (block ;; code offset: 0x18b (loop $label$14 ;; code offset: 0x1a5 (i32.store ;; code offset: 0x194 (i32.add ;; code offset: 0x18d (local.get $3) ;; code offset: 0x193 (i32.shl ;; code offset: 0x18f (local.get $1) ;; code offset: 0x191 (i32.const 2) ) ) ;; code offset: 0x1a2 (i32.load ;; code offset: 0x1a1 (i32.add ;; code offset: 0x195 (local.get $3) ;; code offset: 0x1a0 (i32.shl ;; code offset: 0x19c (local.tee $1 ;; code offset: 0x19b (i32.add ;; code offset: 0x197 (local.get $1) ;; code offset: 0x199 (i32.const 1) ) ) ;; code offset: 0x19e (i32.const 2) ) ) ) ) ;; code offset: 0x1ad (br_if $label$14 ;; code offset: 0x1ac (i32.ne ;; code offset: 0x1a8 (local.get $1) ;; code offset: 0x1aa (local.get $2) ) ) ) ;; code offset: 0x1b2 (local.set $1 ;; code offset: 0x1b0 (local.get $2) ) ) ) ;; code offset: 0x1bf (i32.store ;; code offset: 0x1bc (i32.add ;; code offset: 0x1b5 (local.get $3) ;; code offset: 0x1bb (i32.shl ;; code offset: 0x1b7 (local.get $1) ;; code offset: 0x1b9 (i32.const 2) ) ) ;; code offset: 0x1bd (local.get $10) ) ;; code offset: 0x1d6 (i32.store ;; code offset: 0x1ca (local.tee $1 ;; code offset: 0x1c9 (i32.add ;; code offset: 0x1c2 (local.get $9) ;; code offset: 0x1c8 (i32.shl ;; code offset: 0x1c4 (local.get $2) ;; code offset: 0x1c6 (i32.const 2) ) ) ) ;; code offset: 0x1d5 (i32.sub ;; code offset: 0x1d1 (local.tee $1 ;; code offset: 0x1ce (i32.load ;; code offset: 0x1cc (local.get $1) ) ) ;; code offset: 0x1d3 (i32.const 1) ) ) ;; code offset: 0x1de (br_if $label$5 ;; code offset: 0x1dd (i32.gt_s ;; code offset: 0x1d9 (local.get $1) ;; code offset: 0x1db (i32.const 1) ) ) ;; code offset: 0x1ea (br_if $label$1 ;; code offset: 0x1e9 (i32.eq ;; code offset: 0x1e5 (local.tee $2 ;; code offset: 0x1e4 (i32.add ;; code offset: 0x1e0 (local.get $2) ;; code offset: 0x1e2 (i32.const 1) ) ) ;; code offset: 0x1e7 (local.get $4) ) ) ;; code offset: 0x1f1 (local.set $10 ;; code offset: 0x1ee (i32.load ;; code offset: 0x1ec (local.get $3) ) ) ;; code offset: 0x1f3 (br $label$12) ) ) ) ) ;; code offset: 0x20e (i32.store ;; code offset: 0x206 (i32.add ;; code offset: 0x1fa (local.get $3) ;; code offset: 0x205 (i32.shl ;; code offset: 0x201 (local.tee $1 ;; code offset: 0x1fe (i32.load ;; code offset: 0x1fc (local.get $0) ) ) ;; code offset: 0x203 (i32.const 2) ) ) ;; code offset: 0x20c (local.tee $4 ;; code offset: 0x20b (i32.sub ;; code offset: 0x207 (local.get $2) ;; code offset: 0x209 (i32.const 1) ) ) ) ;; code offset: 0x21d (i32.store ;; code offset: 0x219 (local.tee $13 ;; code offset: 0x218 (i32.add ;; code offset: 0x211 (local.get $3) ;; code offset: 0x217 (i32.shl ;; code offset: 0x213 (local.get $4) ;; code offset: 0x215 (i32.const 2) ) ) ) ;; code offset: 0x21b (local.get $1) ) ) ;; code offset: 0x221 (loop $label$15 ;; code offset: 0x228 (if ;; code offset: 0x227 (i32.ge_s ;; code offset: 0x223 (local.get $2) ;; code offset: 0x225 (i32.const 2) ) ;; code offset: 0x22a (loop $label$17 ;; code offset: 0x23b (i32.store ;; code offset: 0x238 (i32.add ;; code offset: 0x22c (local.get $9) ;; code offset: 0x237 (i32.shl ;; code offset: 0x233 (local.tee $1 ;; code offset: 0x232 (i32.sub ;; code offset: 0x22e (local.get $2) ;; code offset: 0x230 (i32.const 1) ) ) ;; code offset: 0x235 (i32.const 2) ) ) ;; code offset: 0x239 (local.get $2) ) ;; code offset: 0x243 (local.set $0 ;; code offset: 0x242 (i32.gt_s ;; code offset: 0x23e (local.get $2) ;; code offset: 0x240 (i32.const 2) ) ) ;; code offset: 0x247 (local.set $2 ;; code offset: 0x245 (local.get $1) ) ;; code offset: 0x24b (br_if $label$17 ;; code offset: 0x249 (local.get $0) ) ) ) ;; code offset: 0x24f (block $label$18 ;; code offset: 0x259 (br_if $label$18 ;; code offset: 0x258 (i32.eqz ;; code offset: 0x256 (local.tee $6 ;; code offset: 0x253 (i32.load ;; code offset: 0x251 (local.get $3) ) ) ) ) ;; code offset: 0x263 (br_if $label$18 ;; code offset: 0x262 (i32.eq ;; code offset: 0x25d (i32.load ;; code offset: 0x25b (local.get $13) ) ;; code offset: 0x260 (local.get $4) ) ) ;; code offset: 0x26a (local.set $7 ;; code offset: 0x267 (i32.load ;; code offset: 0x265 (local.get $8) ) ) ;; code offset: 0x26e (local.set $0 ;; code offset: 0x26c (i32.const 0) ) ;; code offset: 0x270 (loop $label$19 ;; code offset: 0x274 (local.set $10 ;; code offset: 0x272 (local.get $0) ) ;; code offset: 0x27b (if ;; code offset: 0x27a (i32.ge_s ;; code offset: 0x276 (local.get $7) ;; code offset: 0x278 (i32.const 3) ) (block ;; code offset: 0x282 (local.set $1 ;; code offset: 0x281 (i32.sub ;; code offset: 0x27d (local.get $7) ;; code offset: 0x27f (i32.const 1) ) ) ;; code offset: 0x286 (local.set $0 ;; code offset: 0x284 (i32.const 1) ) ;; code offset: 0x288 (loop $label$21 ;; code offset: 0x297 (local.set $14 ;; code offset: 0x294 (i32.load ;; code offset: 0x292 (local.tee $11 ;; code offset: 0x291 (i32.add ;; code offset: 0x28a (local.get $8) ;; code offset: 0x290 (i32.shl ;; code offset: 0x28c (local.get $0) ;; code offset: 0x28e (i32.const 2) ) ) ) ) ) ;; code offset: 0x2a8 (i32.store ;; code offset: 0x299 (local.get $11) ;; code offset: 0x2a5 (i32.load ;; code offset: 0x2a3 (local.tee $15 ;; code offset: 0x2a2 (i32.add ;; code offset: 0x29b (local.get $8) ;; code offset: 0x2a1 (i32.shl ;; code offset: 0x29d (local.get $1) ;; code offset: 0x29f (i32.const 2) ) ) ) ) ) ;; code offset: 0x2af (i32.store ;; code offset: 0x2ab (local.get $15) ;; code offset: 0x2ad (local.get $14) ) ;; code offset: 0x2c1 (br_if $label$21 ;; code offset: 0x2c0 (i32.lt_s ;; code offset: 0x2b7 (local.tee $0 ;; code offset: 0x2b6 (i32.add ;; code offset: 0x2b2 (local.get $0) ;; code offset: 0x2b4 (i32.const 1) ) ) ;; code offset: 0x2be (local.tee $1 ;; code offset: 0x2bd (i32.sub ;; code offset: 0x2b9 (local.get $1) ;; code offset: 0x2bb (i32.const 1) ) ) ) ) ) ) ) ;; code offset: 0x2d2 (local.set $1 ;; code offset: 0x2cf (i32.load ;; code offset: 0x2cd (local.tee $0 ;; code offset: 0x2cc (i32.add ;; code offset: 0x2c5 (local.get $8) ;; code offset: 0x2cb (i32.shl ;; code offset: 0x2c7 (local.get $7) ;; code offset: 0x2c9 (i32.const 2) ) ) ) ) ) ;; code offset: 0x2d8 (i32.store ;; code offset: 0x2d4 (local.get $0) ;; code offset: 0x2d6 (local.get $7) ) ;; code offset: 0x2e0 (local.set $0 ;; code offset: 0x2df (i32.add ;; code offset: 0x2db (local.get $10) ;; code offset: 0x2dd (i32.const 1) ) ) ;; code offset: 0x2e4 (local.set $7 ;; code offset: 0x2e2 (local.get $1) ) ;; code offset: 0x2e8 (br_if $label$19 ;; code offset: 0x2e6 (local.get $1) ) ) ;; code offset: 0x2f5 (local.set $5 ;; code offset: 0x2f4 (select ;; code offset: 0x2eb (local.get $5) ;; code offset: 0x2ed (local.get $0) ;; code offset: 0x2f3 (i32.gt_s ;; code offset: 0x2ef (local.get $5) ;; code offset: 0x2f1 (local.get $10) ) ) ) ) ;; code offset: 0x2fd (br_if $label$1 ;; code offset: 0x2fc (i32.ge_s ;; code offset: 0x2f8 (local.get $2) ;; code offset: 0x2fa (local.get $4) ) ) ;; code offset: 0x2ff (loop $label$22 ;; code offset: 0x303 (local.set $1 ;; code offset: 0x301 (i32.const 0) ) ;; code offset: 0x30a (if ;; code offset: 0x309 (i32.gt_s ;; code offset: 0x305 (local.get $2) ;; code offset: 0x307 (i32.const 0) ) (block ;; code offset: 0x30c (loop $label$24 ;; code offset: 0x326 (i32.store ;; code offset: 0x315 (i32.add ;; code offset: 0x30e (local.get $3) ;; code offset: 0x314 (i32.shl ;; code offset: 0x310 (local.get $1) ;; code offset: 0x312 (i32.const 2) ) ) ;; code offset: 0x323 (i32.load ;; code offset: 0x322 (i32.add ;; code offset: 0x316 (local.get $3) ;; code offset: 0x321 (i32.shl ;; code offset: 0x31d (local.tee $1 ;; code offset: 0x31c (i32.add ;; code offset: 0x318 (local.get $1) ;; code offset: 0x31a (i32.const 1) ) ) ;; code offset: 0x31f (i32.const 2) ) ) ) ) ;; code offset: 0x32e (br_if $label$24 ;; code offset: 0x32d (i32.ne ;; code offset: 0x329 (local.get $1) ;; code offset: 0x32b (local.get $2) ) ) ) ;; code offset: 0x333 (local.set $1 ;; code offset: 0x331 (local.get $2) ) ) ) ;; code offset: 0x340 (i32.store ;; code offset: 0x33d (i32.add ;; code offset: 0x336 (local.get $3) ;; code offset: 0x33c (i32.shl ;; code offset: 0x338 (local.get $1) ;; code offset: 0x33a (i32.const 2) ) ) ;; code offset: 0x33e (local.get $6) ) ;; code offset: 0x357 (i32.store ;; code offset: 0x34b (local.tee $1 ;; code offset: 0x34a (i32.add ;; code offset: 0x343 (local.get $9) ;; code offset: 0x349 (i32.shl ;; code offset: 0x345 (local.get $2) ;; code offset: 0x347 (i32.const 2) ) ) ) ;; code offset: 0x356 (i32.sub ;; code offset: 0x352 (local.tee $1 ;; code offset: 0x34f (i32.load ;; code offset: 0x34d (local.get $1) ) ) ;; code offset: 0x354 (i32.const 1) ) ) ;; code offset: 0x35f (br_if $label$15 ;; code offset: 0x35e (i32.gt_s ;; code offset: 0x35a (local.get $1) ;; code offset: 0x35c (i32.const 1) ) ) ;; code offset: 0x36b (br_if $label$1 ;; code offset: 0x36a (i32.eq ;; code offset: 0x366 (local.tee $2 ;; code offset: 0x365 (i32.add ;; code offset: 0x361 (local.get $2) ;; code offset: 0x363 (i32.const 1) ) ) ;; code offset: 0x368 (local.get $4) ) ) ;; code offset: 0x372 (local.set $6 ;; code offset: 0x36f (i32.load ;; code offset: 0x36d (local.get $3) ) ) ;; code offset: 0x374 (br $label$22) ) ) ) ;; code offset: 0x37d (call $free ;; code offset: 0x37b (local.get $3) ) ;; code offset: 0x381 (call $free ;; code offset: 0x37f (local.get $8) ) ;; code offset: 0x385 (call $free ;; code offset: 0x383 (local.get $9) ) ;; code offset: 0x387 (local.get $5) ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) ;; code offset: 0x3a2 (global.set $global$0 ;; code offset: 0x3a0 (local.tee $8 ;; code offset: 0x39f (i32.sub ;; code offset: 0x39b (global.get $global$0) ;; code offset: 0x39d (i32.const 32) ) ) ) ;; code offset: 0x3a4 (block $label$1 (block $label$2 ;; code offset: 0x3ad (if ;; code offset: 0x3ac (i32.ge_s ;; code offset: 0x3a8 (local.get $0) ;; code offset: 0x3aa (i32.const 2) ) ;; code offset: 0x3bb (br_if $label$2 ;; code offset: 0x3ba (i32.gt_s ;; code offset: 0x3b6 (local.tee $3 ;; code offset: 0x3b4 (call $atoi ;; code offset: 0x3b1 (i32.load offset=4 ;; code offset: 0x3af (local.get $1) ) ) ) ;; code offset: 0x3b8 (i32.const 0) ) ) ) ;; code offset: 0x3c3 (drop ;; code offset: 0x3c1 (call $puts ;; code offset: 0x3be (i32.const 1050) ) ) ;; code offset: 0x3c6 (local.set $5 ;; code offset: 0x3c4 (i32.const 1) ) ;; code offset: 0x3c8 (br $label$1) ) ;; code offset: 0x3d0 (if ;; code offset: 0x3cf (i32.ne ;; code offset: 0x3cb (local.get $3) ;; code offset: 0x3cd (i32.const 1) ) (block ;; code offset: 0x3d7 (local.set $2 ;; code offset: 0x3d6 (i32.sub ;; code offset: 0x3d2 (local.get $3) ;; code offset: 0x3d4 (i32.const 1) ) ) ;; code offset: 0x3db (local.set $1 ;; code offset: 0x3d9 (i32.const 0) ) ;; code offset: 0x3df (local.set $0 ;; code offset: 0x3dd (i32.const 0) ) ;; code offset: 0x3e1 (loop $label$5 ;; code offset: 0x3eb (i32.store offset=8 ;; code offset: 0x3e7 (local.tee $4 ;; code offset: 0x3e5 (call $malloc ;; code offset: 0x3e3 (i32.const 12) ) ) ;; code offset: 0x3e9 (local.get $1) ) ;; code offset: 0x3f2 (i32.store offset=4 ;; code offset: 0x3ee (local.get $4) ;; code offset: 0x3f0 (local.get $3) ) ;; code offset: 0x3f9 (i32.store ;; code offset: 0x3f5 (local.get $4) ;; code offset: 0x3f7 (local.get $0) ) ;; code offset: 0x3fe (local.set $1 ;; code offset: 0x3fc (local.get $4) ) ;; code offset: 0x40a (br_if $label$5 ;; code offset: 0x409 (i32.ne ;; code offset: 0x405 (local.tee $0 ;; code offset: 0x404 (i32.add ;; code offset: 0x400 (local.get $0) ;; code offset: 0x402 (i32.const 1) ) ) ;; code offset: 0x407 (local.get $2) ) ) ) ) ) ;; code offset: 0x410 (local.set $0 ;; code offset: 0x40e (i32.const 0) ) ;; code offset: 0x41b (local.set $1 ;; code offset: 0x419 (call $malloc ;; code offset: 0x417 (local.tee $2 ;; code offset: 0x416 (i32.shl ;; code offset: 0x412 (local.get $3) ;; code offset: 0x414 (i32.const 2) ) ) ) ) ;; code offset: 0x421 (local.set $5 ;; code offset: 0x41f (call $malloc ;; code offset: 0x41d (local.get $2) ) ) ;; code offset: 0x423 (block $label$6 (block $label$7 (block $label$8 ;; code offset: 0x42e (if ;; code offset: 0x42d (i32.gt_s ;; code offset: 0x429 (local.get $3) ;; code offset: 0x42b (i32.const 0) ) (block ;; code offset: 0x430 (loop $label$10 ;; code offset: 0x43c (i32.store ;; code offset: 0x439 (i32.add ;; code offset: 0x432 (local.get $1) ;; code offset: 0x438 (i32.shl ;; code offset: 0x434 (local.get $0) ;; code offset: 0x436 (i32.const 2) ) ) ;; code offset: 0x43a (local.get $0) ) ;; code offset: 0x449 (br_if $label$10 ;; code offset: 0x448 (i32.ne ;; code offset: 0x444 (local.tee $0 ;; code offset: 0x443 (i32.add ;; code offset: 0x43f (local.get $0) ;; code offset: 0x441 (i32.const 1) ) ) ;; code offset: 0x446 (local.get $3) ) ) ) ;; code offset: 0x44e (local.set $6 ;; code offset: 0x44c (i32.const 30) ) ;; code offset: 0x452 (local.set $2 ;; code offset: 0x450 (local.get $3) ) ;; code offset: 0x454 (br $label$8) ) ) ;; code offset: 0x459 (local.set $6 ;; code offset: 0x457 (i32.const 30) ) ;; code offset: 0x45d (local.set $2 ;; code offset: 0x45b (local.get $3) ) ;; code offset: 0x45f (br $label$7) ) ;; code offset: 0x462 (loop $label$11 ;; code offset: 0x466 (local.set $0 ;; code offset: 0x464 (i32.const 0) ) ;; code offset: 0x468 (loop $label$12 ;; code offset: 0x47a (i32.store offset=16 ;; code offset: 0x46a (local.get $8) ;; code offset: 0x479 (i32.add ;; code offset: 0x474 (i32.load ;; code offset: 0x473 (i32.add ;; code offset: 0x46c (local.get $1) ;; code offset: 0x472 (i32.shl ;; code offset: 0x46e (local.get $0) ;; code offset: 0x470 (i32.const 2) ) ) ) ;; code offset: 0x477 (i32.const 1) ) ) ;; code offset: 0x487 (drop ;; code offset: 0x485 (call $iprintf ;; code offset: 0x47d (i32.const 1047) ;; code offset: 0x484 (i32.add ;; code offset: 0x480 (local.get $8) ;; code offset: 0x482 (i32.const 16) ) ) ) ;; code offset: 0x492 (br_if $label$12 ;; code offset: 0x491 (i32.ne ;; code offset: 0x48d (local.tee $0 ;; code offset: 0x48c (i32.add ;; code offset: 0x488 (local.get $0) ;; code offset: 0x48a (i32.const 1) ) ) ;; code offset: 0x48f (local.get $3) ) ) ) ;; code offset: 0x499 (drop ;; code offset: 0x497 (call $putchar ;; code offset: 0x495 (i32.const 10) ) ) ;; code offset: 0x49f (if ;; code offset: 0x49e (i32.gt_s ;; code offset: 0x49a (local.get $2) ;; code offset: 0x49c (i32.const 1) ) ;; code offset: 0x4a1 (loop $label$14 ;; code offset: 0x4b2 (i32.store ;; code offset: 0x4af (i32.add ;; code offset: 0x4a3 (local.get $5) ;; code offset: 0x4ae (i32.shl ;; code offset: 0x4aa (local.tee $0 ;; code offset: 0x4a9 (i32.sub ;; code offset: 0x4a5 (local.get $2) ;; code offset: 0x4a7 (i32.const 1) ) ) ;; code offset: 0x4ac (i32.const 2) ) ) ;; code offset: 0x4b0 (local.get $2) ) ;; code offset: 0x4ba (local.set $7 ;; code offset: 0x4b9 (i32.gt_s ;; code offset: 0x4b5 (local.get $2) ;; code offset: 0x4b7 (i32.const 2) ) ) ;; code offset: 0x4be (local.set $2 ;; code offset: 0x4bc (local.get $0) ) ;; code offset: 0x4c2 (br_if $label$14 ;; code offset: 0x4c0 (local.get $7) ) ) ) ;; code offset: 0x4cb (br_if $label$6 ;; code offset: 0x4ca (i32.eq ;; code offset: 0x4c6 (local.get $2) ;; code offset: 0x4c8 (local.get $3) ) ) ;; code offset: 0x4d2 (local.set $6 ;; code offset: 0x4d1 (i32.sub ;; code offset: 0x4cd (local.get $6) ;; code offset: 0x4cf (i32.const 1) ) ) ;; code offset: 0x4d4 (loop $label$15 ;; code offset: 0x4d8 (local.set $0 ;; code offset: 0x4d6 (i32.const 0) ) ;; code offset: 0x4df (local.set $7 ;; code offset: 0x4dc (i32.load ;; code offset: 0x4da (local.get $1) ) ) ;; code offset: 0x4e6 (if ;; code offset: 0x4e5 (i32.gt_s ;; code offset: 0x4e1 (local.get $2) ;; code offset: 0x4e3 (i32.const 0) ) (block ;; code offset: 0x4e8 (loop $label$17 ;; code offset: 0x502 (i32.store ;; code offset: 0x4f1 (i32.add ;; code offset: 0x4ea (local.get $1) ;; code offset: 0x4f0 (i32.shl ;; code offset: 0x4ec (local.get $0) ;; code offset: 0x4ee (i32.const 2) ) ) ;; code offset: 0x4ff (i32.load ;; code offset: 0x4fe (i32.add ;; code offset: 0x4f2 (local.get $1) ;; code offset: 0x4fd (i32.shl ;; code offset: 0x4f9 (local.tee $0 ;; code offset: 0x4f8 (i32.add ;; code offset: 0x4f4 (local.get $0) ;; code offset: 0x4f6 (i32.const 1) ) ) ;; code offset: 0x4fb (i32.const 2) ) ) ) ) ;; code offset: 0x50a (br_if $label$17 ;; code offset: 0x509 (i32.ne ;; code offset: 0x505 (local.get $0) ;; code offset: 0x507 (local.get $2) ) ) ) ;; code offset: 0x50f (local.set $0 ;; code offset: 0x50d (local.get $2) ) ) ) ;; code offset: 0x51c (i32.store ;; code offset: 0x519 (i32.add ;; code offset: 0x512 (local.get $1) ;; code offset: 0x518 (i32.shl ;; code offset: 0x514 (local.get $0) ;; code offset: 0x516 (i32.const 2) ) ) ;; code offset: 0x51a (local.get $7) ) ;; code offset: 0x533 (i32.store ;; code offset: 0x527 (local.tee $0 ;; code offset: 0x526 (i32.add ;; code offset: 0x51f (local.get $5) ;; code offset: 0x525 (i32.shl ;; code offset: 0x521 (local.get $2) ;; code offset: 0x523 (i32.const 2) ) ) ) ;; code offset: 0x532 (i32.sub ;; code offset: 0x52e (local.tee $0 ;; code offset: 0x52b (i32.load ;; code offset: 0x529 (local.get $0) ) ) ;; code offset: 0x530 (i32.const 1) ) ) ;; code offset: 0x53b (if ;; code offset: 0x53a (i32.le_s ;; code offset: 0x536 (local.get $0) ;; code offset: 0x538 (i32.const 1) ) (block ;; code offset: 0x547 (br_if $label$15 ;; code offset: 0x546 (i32.ne ;; code offset: 0x542 (local.tee $2 ;; code offset: 0x541 (i32.add ;; code offset: 0x53d (local.get $2) ;; code offset: 0x53f (i32.const 1) ) ) ;; code offset: 0x544 (local.get $3) ) ) ;; code offset: 0x549 (br $label$6) ) ) ) ;; code offset: 0x54f (br_if $label$11 ;; code offset: 0x54d (local.get $6) ) ) ;; code offset: 0x552 (br $label$6) ) ;; code offset: 0x555 (loop $label$19 ;; code offset: 0x55b (drop ;; code offset: 0x559 (call $putchar ;; code offset: 0x557 (i32.const 10) ) ) ;; code offset: 0x561 (if ;; code offset: 0x560 (i32.gt_s ;; code offset: 0x55c (local.get $2) ;; code offset: 0x55e (i32.const 1) ) ;; code offset: 0x563 (loop $label$21 ;; code offset: 0x574 (i32.store ;; code offset: 0x571 (i32.add ;; code offset: 0x565 (local.get $5) ;; code offset: 0x570 (i32.shl ;; code offset: 0x56c (local.tee $0 ;; code offset: 0x56b (i32.sub ;; code offset: 0x567 (local.get $2) ;; code offset: 0x569 (i32.const 1) ) ) ;; code offset: 0x56e (i32.const 2) ) ) ;; code offset: 0x572 (local.get $2) ) ;; code offset: 0x57c (local.set $7 ;; code offset: 0x57b (i32.gt_s ;; code offset: 0x577 (local.get $2) ;; code offset: 0x579 (i32.const 2) ) ) ;; code offset: 0x580 (local.set $2 ;; code offset: 0x57e (local.get $0) ) ;; code offset: 0x584 (br_if $label$21 ;; code offset: 0x582 (local.get $7) ) ) ) ;; code offset: 0x58d (br_if $label$6 ;; code offset: 0x58c (i32.eq ;; code offset: 0x588 (local.get $2) ;; code offset: 0x58a (local.get $3) ) ) ;; code offset: 0x594 (local.set $6 ;; code offset: 0x593 (i32.sub ;; code offset: 0x58f (local.get $6) ;; code offset: 0x591 (i32.const 1) ) ) ;; code offset: 0x596 (loop $label$22 ;; code offset: 0x59d (local.set $7 ;; code offset: 0x59a (i32.load ;; code offset: 0x598 (local.get $1) ) ) ;; code offset: 0x5a1 (local.set $0 ;; code offset: 0x59f (i32.const 0) ) ;; code offset: 0x5a8 (if ;; code offset: 0x5a7 (i32.gt_s ;; code offset: 0x5a3 (local.get $2) ;; code offset: 0x5a5 (i32.const 0) ) (block ;; code offset: 0x5aa (loop $label$24 ;; code offset: 0x5c4 (i32.store ;; code offset: 0x5b3 (i32.add ;; code offset: 0x5ac (local.get $1) ;; code offset: 0x5b2 (i32.shl ;; code offset: 0x5ae (local.get $0) ;; code offset: 0x5b0 (i32.const 2) ) ) ;; code offset: 0x5c1 (i32.load ;; code offset: 0x5c0 (i32.add ;; code offset: 0x5b4 (local.get $1) ;; code offset: 0x5bf (i32.shl ;; code offset: 0x5bb (local.tee $0 ;; code offset: 0x5ba (i32.add ;; code offset: 0x5b6 (local.get $0) ;; code offset: 0x5b8 (i32.const 1) ) ) ;; code offset: 0x5bd (i32.const 2) ) ) ) ) ;; code offset: 0x5cc (br_if $label$24 ;; code offset: 0x5cb (i32.ne ;; code offset: 0x5c7 (local.get $0) ;; code offset: 0x5c9 (local.get $2) ) ) ) ;; code offset: 0x5d1 (local.set $0 ;; code offset: 0x5cf (local.get $2) ) ) ) ;; code offset: 0x5de (i32.store ;; code offset: 0x5db (i32.add ;; code offset: 0x5d4 (local.get $1) ;; code offset: 0x5da (i32.shl ;; code offset: 0x5d6 (local.get $0) ;; code offset: 0x5d8 (i32.const 2) ) ) ;; code offset: 0x5dc (local.get $7) ) ;; code offset: 0x5f5 (i32.store ;; code offset: 0x5e9 (local.tee $0 ;; code offset: 0x5e8 (i32.add ;; code offset: 0x5e1 (local.get $5) ;; code offset: 0x5e7 (i32.shl ;; code offset: 0x5e3 (local.get $2) ;; code offset: 0x5e5 (i32.const 2) ) ) ) ;; code offset: 0x5f4 (i32.sub ;; code offset: 0x5f0 (local.tee $0 ;; code offset: 0x5ed (i32.load ;; code offset: 0x5eb (local.get $0) ) ) ;; code offset: 0x5f2 (i32.const 1) ) ) ;; code offset: 0x5fd (if ;; code offset: 0x5fc (i32.le_s ;; code offset: 0x5f8 (local.get $0) ;; code offset: 0x5fa (i32.const 1) ) (block ;; code offset: 0x609 (br_if $label$22 ;; code offset: 0x608 (i32.ne ;; code offset: 0x604 (local.tee $2 ;; code offset: 0x603 (i32.add ;; code offset: 0x5ff (local.get $2) ;; code offset: 0x601 (i32.const 1) ) ) ;; code offset: 0x606 (local.get $3) ) ) ;; code offset: 0x60b (br $label$6) ) ) ) ;; code offset: 0x611 (br_if $label$19 ;; code offset: 0x60f (local.get $6) ) ) ) ;; code offset: 0x617 (call $free ;; code offset: 0x615 (local.get $1) ) ;; code offset: 0x61b (call $free ;; code offset: 0x619 (local.get $5) ) ;; code offset: 0x61f (local.set $5 ;; code offset: 0x61d (i32.const 0) ) ;; code offset: 0x623 (local.set $0 ;; code offset: 0x621 (i32.const 0) ) ;; code offset: 0x627 (if ;; code offset: 0x625 (local.get $4) ;; code offset: 0x629 (loop $label$27 ;; code offset: 0x62f (local.set $1 ;; code offset: 0x62d (call $fannkuch_worker\28void*\29 ;; code offset: 0x62b (local.get $4) ) ) ;; code offset: 0x636 (local.set $2 ;; code offset: 0x633 (i32.load offset=8 ;; code offset: 0x631 (local.get $4) ) ) ;; code offset: 0x63a (call $free ;; code offset: 0x638 (local.get $4) ) ;; code offset: 0x646 (local.set $0 ;; code offset: 0x645 (select ;; code offset: 0x63c (local.get $1) ;; code offset: 0x63e (local.get $0) ;; code offset: 0x644 (i32.lt_s ;; code offset: 0x640 (local.get $0) ;; code offset: 0x642 (local.get $1) ) ) ) ;; code offset: 0x64a (local.set $4 ;; code offset: 0x648 (local.get $2) ) ;; code offset: 0x64e (br_if $label$27 ;; code offset: 0x64c (local.get $2) ) ) ) ;; code offset: 0x656 (i32.store offset=4 ;; code offset: 0x652 (local.get $8) ;; code offset: 0x654 (local.get $0) ) ;; code offset: 0x65d (i32.store ;; code offset: 0x659 (local.get $8) ;; code offset: 0x65b (local.get $3) ) ;; code offset: 0x667 (drop ;; code offset: 0x665 (call $iprintf ;; code offset: 0x660 (i32.const 1024) ;; code offset: 0x663 (local.get $8) ) ) ) ;; code offset: 0x66e (global.set $global$0 ;; code offset: 0x66d (i32.add ;; code offset: 0x669 (local.get $8) ;; code offset: 0x66b (i32.const 32) ) ) ;; code offset: 0x670 (local.get $5) ) ;; custom section ".debug_info", size 851 ;; custom section ".debug_loc", size 1073 ;; custom section ".debug_ranges", size 88 ;; custom section ".debug_abbrev", size 333 ;; custom section ".debug_line", size 2682 ;; custom section ".debug_str", size 434 ;; custom section "producers", size 135 ) binaryen-version_108/test/passes/fannkuch3_manyopts_dwarf.passes000066400000000000000000000000431423707623100254340ustar00rootroot00000000000000dwarfdump_O4_roundtrip_dwarfdump_g binaryen-version_108/test/passes/fannkuch3_manyopts_dwarf.wasm000066400000000000000000000150111423707623100251060ustar00rootroot00000000000000asm`````‹ envmemory€€env__indirect_function_tablepenvmallocenvmemcpyenvfreeenvatoienvputsenviprintfenvputcharA°ˆÀ Aª )__wasm_call_ctorsmain __data_end á  —A! ("At"€€€€! €€€€! €€€€!@@@ AL @  Atj 6 Aj" G  ("Atj Aj"6  Atj" 6A! AL @@ AL @  Aj"Atj 6 AJ! ! @ (" E ( F   €€€" (! A!@ ! @ AH Aj!A!@ Atj"(!  Atj"(6  6 Aj" Aj"H Atj"(! 6 Aj! !  J!  N @A!@ AL @  Atj  Aj"Atj(6  G !  Atj 6  Atj" ("Aj6 AJ  Aj" F  (!  ("Atj Aj"6  Atj" 6 A! @@ AH @  Aj"Atj 6 AJ! ! @ (" E ( F (!A!@ ! @ AH Aj!A!@  Atj" (!  Atj"(6  6 Aj" Aj"H  Atj"(! 6 Aj! !  J!  N @A!@ AH @  Atj  Aj"Atj(6  G !  Atj 6  Atj" ("Aj6 AJ  Aj" F  (! ‚€€€ ‚€€€ ‚€€€ Â#€€€€A k"$€€€€@@@ AH A! (ƒ€€€"AJ  Ašˆ€€„€€€A!  @ AF Aj!A!A!@A €€€€" 6  6  6 ! Aj" G A! At"€€€€! €€€€!@@@@ AL @  Atj 6 Aj" G A! !  A! !  @A!@   Atj(Aj6A—ˆ€€ Aj…€€€ Aj" G A †€€€@ AL @  Aj"Atj 6 AJ! !   F  Aj!@A! (!@ AL @  Atj  Aj"Atj(6 G !  Atj 6  Atj" ("Aj6@ AJ Aj" G   E  @A †€€€@ AL @  Aj"Atj 6 AJ! !   F  Aj!@ (!A!@ AH @  Atj  Aj"Atj(6 G !  Atj 6  Atj" ("Aj6@ AJ Aj" G    ‚€€€ ‚€€€A!A!@ E A!@ ˆ€€€! (! ‚€€€  H! !   6  6A€ˆ€€ …€€€ A j$€€€€  1A€ *Pfannkuchen(%d) = %d. %dWrong argument.ß .debug_infoOi©@+ã ÖYÜYÞ&ØYïv9ó 4j —íŸf|Y ‘§ 3& LY ÖY ¥ÜY Ã>` á–` ÿD` JY IUY «›Y ×Y ŸY cJY)3ášŠš’šš)§"WY ÜWY +ZY 3Y& Ö[Y 8Y& >[` D[` J[Y L[Y U[Y[‰ c}YŸBퟌ˜Y £˜Y ¨˜A gÜ™Y¨íÈŸ)¸…âÎÌÙäTïrúè&a(¼.Ïã EO¾Ô¡šišqŽšŸÑFK­¼ .debug_locÿÿÿÿ<Ÿÿÿÿÿ<ŸRWíŸìõŸ1;íŸy†ŸdoŸu~ŸºÄퟟÿÿÿÿ<íŸÿÿÿÿ<íŸÿÿÿÿ%<íŸÿÿÿÿ/<íŸÿÿÿÿâçíŸkpíŸÿÿÿÿÏæŸìõí ŸZbíŸdoŸu~í ŸãëíŸÿÿÿÿâæí ŸkoíŸÿÿÿÿüíŸ8;ퟅ‰íŸÁÄíŸÿÿÿÿ;íŸLbퟚÄíŸÕëíŸÿÿÿÿŸ27íŸÿÿÿÿŸLUŸÿÿÿÿŸLU0ŸøíŸÿÿÿÿŸLUŸŽ“ퟙÁŸ×ÜíŸõùŸ',íŸxˆŸú ŸAUŸÿÿÿÿŸ¨ÁíŸÿÿÿÿŸ²ÁíŸÿÿÿÿŸæíퟳºíŸÿÿÿÿŸˆíŸHUíŸÿÿÿÿŸÖ០íŸÿÿÿÿŸñíŸf .debug_ranges…ÃíöLv^Þ+ŸáÛ .debug_abbrev%UI6  : ;  I: ; 8 $> 9I: ; ; : ;  .@—Bn: ; I? : ; I 4: ; I 4: ; I U‰‚‰‚1.: ; <?I.n: ; I  : ;  .@—B: ; I?1X Y W 14141 1Ñ .debug_lineÁÝû /usr/local/google/home/azakai/Devemscripten/tests/fannkuch.cppemscripten/system/include/libcxx/__nullptremscripten/system/include/libcxx/stddef.hemscripten/system/include/libc/stdlib.h z_X"J ŸŸ\ž%fX[.&.‚WXX>..XY‚©^U.,JTt -.. .WTt,J hº)XZ¼Nt&4ºLt5Èå.È=,qLX&4t <PårGt>JXB< ¾tË‚µtÌ.‚#.X; Xµ< ÍX‚Z‚ä vqX|[>..XY‚Xt,Tt -.. .WTä ..º)X\Nt&4ºLt5Èå.È=,qLX&4tLX:.årGt>JXB< ¾tË‚µtÌ.‚#.X;µt Íf‚Z‚ä vqX|¶ Ã<ƒƒƒŸ— ‘ Xç~.™JXç~f ›J å~.œ ä~.Þ<X¢ßJiss tÞJXX¢JæJXŸ™žé‚X—.ê.‚WX—t ðÖ.#È IX XZtö.XŠ. ÷.. .W¬j†týȃtþ. X‚.ÿ.‚#.X; X‚< €X‚Z‚X 1uXX†J‚  l ’t ñftö.XŠ. ÷.. .WŠtöJjX†.ýtƒþf X‚.ÿ.‚#.X; X‚< €X‚Z‚X 1uXX†J‚  l fƒõ~‚‚ó~tŽJ¾u ~J Xñ~<Jfá~º¡ ½ .debug_strclang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp/usr/local/google/home/azakai/Dev/2-binaryeniintnnextworker_argsstddecltype(nullptr)nullptr_tfree_ZL8fannkuchifannkuchshowmaxargstargsperm1countrmaxflipsflipscleanupp0_Z15fannkuch_workerPvfannkuch_workermain_argpermkjtmpargcargvcharmnamef mallocmemcpyfreeatoiputsiprintfputchar__wasm_call_ctorsfannkuch_worker(void*) main‘ producerslanguage C_plus_plus processed-byclangZ11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)binaryen-version_108/test/passes/fib2_dwarf.bin.txt000066400000000000000000000654011423707623100225450ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (168 bytes) Contains section .debug_loc (143 bytes) Contains section .debug_ranges (24 bytes) Contains section .debug_abbrev (131 bytes) Contains section .debug_line (106 bytes) Contains section .debug_str (180 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_prototyped DW_FORM_flag_present DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [4] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [5] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [6] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [7] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [8] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 .debug_info contents: 0x00000000: Compile Unit: length = 0x000000a4 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x000000a8) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)") DW_AT_language [DW_FORM_data2] (DW_LANG_C99) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "fib2.c") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000070] = "/usr/local/google/home/azakai/Dev/2-binaryen") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000005, 0x0000003d) [0x0000003e, 0x00000048)) 0x00000026: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000038) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009d] = "fib") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_prototyped [DW_FORM_flag_present] (true) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000003e: DW_TAG_formal_parameter [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000aa] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000049: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +0, DW_OP_stack_value [0x0000001e, 0x00000033): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ac] = "a") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000058: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x0000002b: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +1, DW_OP_stack_value [0x0000001e, 0x00000023): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x00000023, 0x00000033): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ae] = "b") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000067: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000064: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +0, DW_OP_stack_value [0x0000002e, 0x00000033): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b0] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000076: DW_TAG_variable [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b2] = "t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000081: NULL 0x00000082: DW_TAG_subprogram [6] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000003e) DW_AT_high_pc [DW_FORM_data4] (0x0000000a) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a5] = "main") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (11) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000009a: DW_TAG_GNU_call_site [7] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000047) 0x0000009f: NULL 0x000000a0: DW_TAG_base_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x000000a7: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +0, DW_OP_stack_value [0x0000001e, 0x00000033): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x0000002b: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +1, DW_OP_stack_value [0x0000001e, 0x00000023): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x00000023, 0x00000033): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000064: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +0, DW_OP_stack_value [0x0000002e, 0x00000033): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000066 version: 4 prologue_length: 0x0000001e min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "fib2.c" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000028: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002f: 01 DW_LNS_copy 0x0000000000000005 1 0 1 0 0 is_stmt 0x00000030: 05 DW_LNS_set_column (17) 0x00000032: 0a DW_LNS_set_prologue_end 0x00000033: 92 address += 9, line += 2 0x000000000000000e 3 17 1 0 0 is_stmt prologue_end 0x00000034: 05 DW_LNS_set_column (3) 0x00000036: 06 DW_LNS_negate_stmt 0x00000037: 58 address += 5, line += 0 0x0000000000000013 3 3 1 0 0 0x00000038: 2b address += 2, line += -3 0x0000000000000015 0 3 1 0 0 0x00000039: 05 DW_LNS_set_column (7) 0x0000003b: 06 DW_LNS_negate_stmt 0x0000003c: c0 address += 12, line += 6 0x0000000000000021 6 7 1 0 0 is_stmt 0x0000003d: 06 DW_LNS_negate_stmt 0x0000003e: 03 DW_LNS_advance_line (0) 0x00000040: 74 address += 7, line += 0 0x0000000000000028 0 7 1 0 0 0x00000041: 05 DW_LNS_set_column (23) 0x00000043: 06 DW_LNS_negate_stmt 0x00000044: 4d address += 4, line += 3 0x000000000000002c 3 23 1 0 0 is_stmt 0x00000045: 05 DW_LNS_set_column (17) 0x00000047: 06 DW_LNS_negate_stmt 0x00000048: 58 address += 5, line += 0 0x0000000000000031 3 17 1 0 0 0x00000049: 05 DW_LNS_set_column (3) 0x0000004b: 58 address += 5, line += 0 0x0000000000000036 3 3 1 0 0 0x0000004c: 06 DW_LNS_negate_stmt 0x0000004d: 4f address += 4, line += 5 0x000000000000003a 8 3 1 0 0 is_stmt 0x0000004e: 02 DW_LNS_advance_pc (3) 0x00000050: 00 DW_LNE_end_sequence 0x000000000000003d 8 3 1 0 0 is_stmt end_sequence 0x00000053: 00 DW_LNE_set_address (0x000000000000003e) 0x0000005a: 03 DW_LNS_advance_line (11) 0x0000005c: 01 DW_LNS_copy 0x000000000000003e 11 0 1 0 0 is_stmt 0x0000005d: 05 DW_LNS_set_column (10) 0x0000005f: 0a DW_LNS_set_prologue_end 0x00000060: 3d address += 3, line += 1 0x0000000000000041 12 10 1 0 0 is_stmt prologue_end 0x00000061: 05 DW_LNS_set_column (3) 0x00000063: 06 DW_LNS_negate_stmt 0x00000064: 66 address += 6, line += 0 0x0000000000000047 12 3 1 0 0 0x00000065: 02 DW_LNS_advance_pc (1) 0x00000067: 00 DW_LNE_end_sequence 0x0000000000000048 12 3 1 0 0 end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)" 0x00000069: "fib2.c" 0x00000070: "/usr/local/google/home/azakai/Dev/2-binaryen" 0x0000009d: "fib" 0x000000a1: "int" 0x000000a5: "main" 0x000000aa: "n" 0x000000ac: "a" 0x000000ae: "b" 0x000000b0: "i" 0x000000b2: "t" .debug_ranges contents: 00000000 00000005 0000003d 00000000 0000003e 00000048 00000000 DWARF debug info ================ Contains section .debug_info (168 bytes) Contains section .debug_loc (143 bytes) Contains section .debug_ranges (24 bytes) Contains section .debug_abbrev (131 bytes) Contains section .debug_line (183 bytes) Contains section .debug_str (180 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_prototyped DW_FORM_flag_present DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [4] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [5] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [6] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [7] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [8] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 .debug_info contents: 0x00000000: Compile Unit: length = 0x000000a4 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x000000a8) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)") DW_AT_language [DW_FORM_data2] (DW_LANG_C99) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "fib2.c") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000070] = "/usr/local/google/home/azakai/Dev/2-binaryen") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000005, 0x00000043) [0x00000044, 0x0000004a)) 0x00000026: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x0000003e) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009d] = "fib") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_prototyped [DW_FORM_flag_present] (true) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000003e: DW_TAG_formal_parameter [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000aa] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000049: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +0, DW_OP_stack_value [0x00000017, 0x0000002c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ac] = "a") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000058: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x0000002b: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +1, DW_OP_stack_value [0x00000017, 0x0000001c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x0000001c, 0x0000002c): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ae] = "b") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000067: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000064: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +0, DW_OP_stack_value [0x00000027, 0x0000002c): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b0] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000076: DW_TAG_variable [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b2] = "t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000081: NULL 0x00000082: DW_TAG_subprogram [6] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000044) DW_AT_high_pc [DW_FORM_data4] (0x00000006) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a5] = "main") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (11) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000009a: DW_TAG_GNU_call_site [7] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) 0x0000009f: NULL 0x000000a0: DW_TAG_base_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x000000a7: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +0, DW_OP_stack_value [0x00000017, 0x0000002c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x0000002b: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +1, DW_OP_stack_value [0x00000017, 0x0000001c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x0000001c, 0x0000002c): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000064: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +0, DW_OP_stack_value [0x00000027, 0x0000002c): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x000000b3 version: 4 prologue_length: 0x0000001e min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "fib2.c" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000028: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002f: 01 DW_LNS_copy 0x0000000000000005 1 0 1 0 0 is_stmt 0x00000030: 00 DW_LNE_set_address (0x0000000000000014) 0x00000037: 03 DW_LNS_advance_line (3) 0x00000039: 05 DW_LNS_set_column (17) 0x0000003b: 0a DW_LNS_set_prologue_end 0x0000003c: 01 DW_LNS_copy 0x0000000000000014 3 17 1 0 0 is_stmt prologue_end 0x0000003d: 00 DW_LNE_set_address (0x0000000000000019) 0x00000044: 05 DW_LNS_set_column (3) 0x00000046: 06 DW_LNS_negate_stmt 0x00000047: 01 DW_LNS_copy 0x0000000000000019 3 3 1 0 0 0x00000048: 00 DW_LNE_set_address (0x0000000000000027) 0x0000004f: 03 DW_LNS_advance_line (6) 0x00000051: 05 DW_LNS_set_column (7) 0x00000053: 06 DW_LNS_negate_stmt 0x00000054: 01 DW_LNS_copy 0x0000000000000027 6 7 1 0 0 is_stmt 0x00000055: 00 DW_LNE_set_address (0x0000000000000032) 0x0000005c: 03 DW_LNS_advance_line (3) 0x0000005e: 05 DW_LNS_set_column (23) 0x00000060: 01 DW_LNS_copy 0x0000000000000032 3 23 1 0 0 is_stmt 0x00000061: 00 DW_LNE_set_address (0x0000000000000037) 0x00000068: 05 DW_LNS_set_column (17) 0x0000006a: 06 DW_LNS_negate_stmt 0x0000006b: 01 DW_LNS_copy 0x0000000000000037 3 17 1 0 0 0x0000006c: 00 DW_LNE_set_address (0x000000000000003c) 0x00000073: 05 DW_LNS_set_column (3) 0x00000075: 01 DW_LNS_copy 0x000000000000003c 3 3 1 0 0 0x00000076: 00 DW_LNE_set_address (0x0000000000000040) 0x0000007d: 03 DW_LNS_advance_line (8) 0x0000007f: 06 DW_LNS_negate_stmt 0x00000080: 01 DW_LNS_copy 0x0000000000000040 8 3 1 0 0 is_stmt 0x00000081: 00 DW_LNE_set_address (0x0000000000000043) 0x00000088: 00 DW_LNE_end_sequence 0x0000000000000043 8 3 1 0 0 is_stmt end_sequence 0x0000008b: 00 DW_LNE_set_address (0x0000000000000044) 0x00000092: 03 DW_LNS_advance_line (11) 0x00000094: 01 DW_LNS_copy 0x0000000000000044 11 0 1 0 0 is_stmt 0x00000095: 00 DW_LNE_set_address (0x0000000000000047) 0x0000009c: 03 DW_LNS_advance_line (12) 0x0000009e: 05 DW_LNS_set_column (10) 0x000000a0: 0a DW_LNS_set_prologue_end 0x000000a1: 01 DW_LNS_copy 0x0000000000000047 12 10 1 0 0 is_stmt prologue_end 0x000000a2: 00 DW_LNE_set_address (0x0000000000000049) 0x000000a9: 05 DW_LNS_set_column (3) 0x000000ab: 06 DW_LNS_negate_stmt 0x000000ac: 01 DW_LNS_copy 0x0000000000000049 12 3 1 0 0 0x000000ad: 00 DW_LNE_set_address (0x000000000000004a) 0x000000b4: 00 DW_LNE_end_sequence 0x000000000000004a 12 3 1 0 0 end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)" 0x00000069: "fib2.c" 0x00000070: "/usr/local/google/home/azakai/Dev/2-binaryen" 0x0000009d: "fib" 0x000000a1: "int" 0x000000a5: "main" 0x000000aa: "n" 0x000000ac: "a" 0x000000ae: "b" 0x000000b0: "i" 0x000000b2: "t" .debug_ranges contents: 00000000 00000005 00000043 00000000 00000044 0000004a 00000000 (module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (import "env" "__indirect_function_table" (table $timport$0 1 funcref)) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $fib (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) ;; code offset: 0x10 (local.set $1 ;; code offset: 0xe (i32.const 1) ) ;; code offset: 0x12 (block $label$1 ;; code offset: 0x19 (br_if $label$1 ;; code offset: 0x18 (i32.lt_s ;; code offset: 0x14 (local.get $0) ;; code offset: 0x16 (i32.const 1) ) ) ;; code offset: 0x1d (local.set $2 ;; code offset: 0x1b (i32.const 0) ) ;; code offset: 0x21 (local.set $3 ;; code offset: 0x1f (i32.const 0) ) ;; code offset: 0x23 (loop $label$2 ;; code offset: 0x2c (local.set $1 ;; code offset: 0x2b (i32.add ;; code offset: 0x27 (local.tee $4 ;; code offset: 0x25 (local.get $1) ) ;; code offset: 0x29 (local.get $2) ) ) ;; code offset: 0x30 (local.set $2 ;; code offset: 0x2e (local.get $4) ) ;; code offset: 0x3c (br_if $label$2 ;; code offset: 0x3b (i32.ne ;; code offset: 0x37 (local.tee $3 ;; code offset: 0x36 (i32.add ;; code offset: 0x32 (local.get $3) ;; code offset: 0x34 (i32.const 1) ) ) ;; code offset: 0x39 (local.get $0) ) ) ) ) ;; code offset: 0x40 (local.get $1) ) (func $__original_main (result i32) ;; code offset: 0x47 (call $fib ;; code offset: 0x45 (i32.const 6) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) ;; code offset: 0x4c (call $__original_main) ) ;; custom section ".debug_info", size 168 ;; custom section ".debug_loc", size 143 ;; custom section ".debug_ranges", size 24 ;; custom section ".debug_abbrev", size 131 ;; custom section ".debug_line", size 183 ;; custom section ".debug_str", size 180 ;; custom section "producers", size 127 ) binaryen-version_108/test/passes/fib2_dwarf.passes000066400000000000000000000000401423707623100224410ustar00rootroot00000000000000dwarfdump_roundtrip_dwarfdump_g binaryen-version_108/test/passes/fib2_dwarf.wasm000066400000000000000000000023701423707623100221220ustar00rootroot00000000000000asm````4envmemory€€env__indirect_function_tablepA€ˆÀ A€ )__wasm_call_ctorsmain __data_end Q 8A!@ AH A!A!@ " j! ! Aj" G  A€€€ ‚€€€ ´ .debug_info¤ ip8ퟠª ¬ +® d° ² > ퟥ  G¡š .debug_locÿÿÿÿŸ3íŸÿÿÿÿŸ#íŸ#3íŸÿÿÿÿŸ.3íŸ& .debug_ranges=>H‘ .debug_abbrev%U.@—B: ; 'I?: ; I4: ; I4: ; I.@—B: ; I?‰‚$> v .debug_linefû fib2.c ’X+ÀztMXXO>  =f¿ .debug_strclang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)fib2.c/usr/local/google/home/azakai/Dev/2-binaryenfibintmainnabit7name0__wasm_call_ctorsfib__original_mainmain‰ producerslanguageC99 processed-byclangZ11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)binaryen-version_108/test/passes/fib2_emptylocspan_dwarf.bin.txt000066400000000000000000000654011423707623100253430ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (168 bytes) Contains section .debug_loc (143 bytes) Contains section .debug_ranges (24 bytes) Contains section .debug_abbrev (131 bytes) Contains section .debug_line (106 bytes) Contains section .debug_str (180 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_prototyped DW_FORM_flag_present DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [4] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [5] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [6] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [7] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [8] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 .debug_info contents: 0x00000000: Compile Unit: length = 0x000000a4 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x000000a8) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)") DW_AT_language [DW_FORM_data2] (DW_LANG_C99) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "fib2.c") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000070] = "/usr/local/google/home/azakai/Dev/2-binaryen") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000005, 0x0000003d) [0x0000003e, 0x00000048)) 0x00000026: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000038) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009d] = "fib") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_prototyped [DW_FORM_flag_present] (true) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000003e: DW_TAG_formal_parameter [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000aa] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000049: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000005): [0x00000007, 0x00000007): DW_OP_consts +0, DW_OP_stack_value [0x0000001e, 0x0000001e): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ac] = "a") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000058: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x0000002b: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +1, DW_OP_stack_value [0x0000001e, 0x00000023): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x00000023, 0x00000033): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ae] = "b") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000067: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000064: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +0, DW_OP_stack_value [0x0000002e, 0x00000033): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b0] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000076: DW_TAG_variable [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b2] = "t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000081: NULL 0x00000082: DW_TAG_subprogram [6] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000003e) DW_AT_high_pc [DW_FORM_data4] (0x0000000a) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a5] = "main") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (11) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000009a: DW_TAG_GNU_call_site [7] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000047) 0x0000009f: NULL 0x000000a0: DW_TAG_base_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x000000a7: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000005): [0x00000007, 0x00000007): DW_OP_consts +0, DW_OP_stack_value [0x0000001e, 0x0000001e): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x0000002b: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +1, DW_OP_stack_value [0x0000001e, 0x00000023): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x00000023, 0x00000033): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000064: [0xffffffff, 0x00000005): [0x00000007, 0x00000010): DW_OP_consts +0, DW_OP_stack_value [0x0000002e, 0x00000033): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000066 version: 4 prologue_length: 0x0000001e min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "fib2.c" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000028: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002f: 01 DW_LNS_copy 0x0000000000000005 1 0 1 0 0 is_stmt 0x00000030: 05 DW_LNS_set_column (17) 0x00000032: 0a DW_LNS_set_prologue_end 0x00000033: 92 address += 9, line += 2 0x000000000000000e 3 17 1 0 0 is_stmt prologue_end 0x00000034: 05 DW_LNS_set_column (3) 0x00000036: 06 DW_LNS_negate_stmt 0x00000037: 58 address += 5, line += 0 0x0000000000000013 3 3 1 0 0 0x00000038: 2b address += 2, line += -3 0x0000000000000015 0 3 1 0 0 0x00000039: 05 DW_LNS_set_column (7) 0x0000003b: 06 DW_LNS_negate_stmt 0x0000003c: c0 address += 12, line += 6 0x0000000000000021 6 7 1 0 0 is_stmt 0x0000003d: 06 DW_LNS_negate_stmt 0x0000003e: 03 DW_LNS_advance_line (0) 0x00000040: 74 address += 7, line += 0 0x0000000000000028 0 7 1 0 0 0x00000041: 05 DW_LNS_set_column (23) 0x00000043: 06 DW_LNS_negate_stmt 0x00000044: 4d address += 4, line += 3 0x000000000000002c 3 23 1 0 0 is_stmt 0x00000045: 05 DW_LNS_set_column (17) 0x00000047: 06 DW_LNS_negate_stmt 0x00000048: 58 address += 5, line += 0 0x0000000000000031 3 17 1 0 0 0x00000049: 05 DW_LNS_set_column (3) 0x0000004b: 58 address += 5, line += 0 0x0000000000000036 3 3 1 0 0 0x0000004c: 06 DW_LNS_negate_stmt 0x0000004d: 4f address += 4, line += 5 0x000000000000003a 8 3 1 0 0 is_stmt 0x0000004e: 02 DW_LNS_advance_pc (3) 0x00000050: 00 DW_LNE_end_sequence 0x000000000000003d 8 3 1 0 0 is_stmt end_sequence 0x00000053: 00 DW_LNE_set_address (0x000000000000003e) 0x0000005a: 03 DW_LNS_advance_line (11) 0x0000005c: 01 DW_LNS_copy 0x000000000000003e 11 0 1 0 0 is_stmt 0x0000005d: 05 DW_LNS_set_column (10) 0x0000005f: 0a DW_LNS_set_prologue_end 0x00000060: 3d address += 3, line += 1 0x0000000000000041 12 10 1 0 0 is_stmt prologue_end 0x00000061: 05 DW_LNS_set_column (3) 0x00000063: 06 DW_LNS_negate_stmt 0x00000064: 66 address += 6, line += 0 0x0000000000000047 12 3 1 0 0 0x00000065: 02 DW_LNS_advance_pc (1) 0x00000067: 00 DW_LNE_end_sequence 0x0000000000000048 12 3 1 0 0 end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)" 0x00000069: "fib2.c" 0x00000070: "/usr/local/google/home/azakai/Dev/2-binaryen" 0x0000009d: "fib" 0x000000a1: "int" 0x000000a5: "main" 0x000000aa: "n" 0x000000ac: "a" 0x000000ae: "b" 0x000000b0: "i" 0x000000b2: "t" .debug_ranges contents: 00000000 00000005 0000003d 00000000 0000003e 00000048 00000000 DWARF debug info ================ Contains section .debug_info (168 bytes) Contains section .debug_loc (143 bytes) Contains section .debug_ranges (24 bytes) Contains section .debug_abbrev (131 bytes) Contains section .debug_line (183 bytes) Contains section .debug_str (180 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_prototyped DW_FORM_flag_present DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [4] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [5] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [6] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [7] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [8] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 .debug_info contents: 0x00000000: Compile Unit: length = 0x000000a4 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x000000a8) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)") DW_AT_language [DW_FORM_data2] (DW_LANG_C99) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "fib2.c") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000070] = "/usr/local/google/home/azakai/Dev/2-binaryen") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000005, 0x00000043) [0x00000044, 0x0000004a)) 0x00000026: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x0000003e) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009d] = "fib") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_prototyped [DW_FORM_flag_present] (true) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000003e: DW_TAG_formal_parameter [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000aa] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000049: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000012): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000017, 0x00000017): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ac] = "a") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000058: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x0000002b: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +1, DW_OP_stack_value [0x00000017, 0x0000001c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x0000001c, 0x0000002c): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ae] = "b") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000067: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000064: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +0, DW_OP_stack_value [0x00000027, 0x0000002c): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b0] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000076: DW_TAG_variable [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b2] = "t") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") 0x00000081: NULL 0x00000082: DW_TAG_subprogram [6] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000044) DW_AT_high_pc [DW_FORM_data4] (0x00000006) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x1 +0, DW_OP_stack_value) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a5] = "main") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/2-binaryen/fib2.c") DW_AT_decl_line [DW_FORM_data1] (11) DW_AT_type [DW_FORM_ref4] (cu + 0x00a0 => {0x000000a0} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000009a: DW_TAG_GNU_call_site [7] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) 0x0000009f: NULL 0x000000a0: DW_TAG_base_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x000000a7: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000012): [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value [0x00000017, 0x00000017): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x0000002b: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +1, DW_OP_stack_value [0x00000017, 0x0000001c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x0000001c, 0x0000002c): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000064: [0xffffffff, 0x00000012): [0x00000000, 0x00000009): DW_OP_consts +0, DW_OP_stack_value [0x00000027, 0x0000002c): DW_OP_WASM_location 0x0 +3, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x000000b3 version: 4 prologue_length: 0x0000001e min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "fib2.c" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000028: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002f: 01 DW_LNS_copy 0x0000000000000005 1 0 1 0 0 is_stmt 0x00000030: 00 DW_LNE_set_address (0x0000000000000014) 0x00000037: 03 DW_LNS_advance_line (3) 0x00000039: 05 DW_LNS_set_column (17) 0x0000003b: 0a DW_LNS_set_prologue_end 0x0000003c: 01 DW_LNS_copy 0x0000000000000014 3 17 1 0 0 is_stmt prologue_end 0x0000003d: 00 DW_LNE_set_address (0x0000000000000019) 0x00000044: 05 DW_LNS_set_column (3) 0x00000046: 06 DW_LNS_negate_stmt 0x00000047: 01 DW_LNS_copy 0x0000000000000019 3 3 1 0 0 0x00000048: 00 DW_LNE_set_address (0x0000000000000027) 0x0000004f: 03 DW_LNS_advance_line (6) 0x00000051: 05 DW_LNS_set_column (7) 0x00000053: 06 DW_LNS_negate_stmt 0x00000054: 01 DW_LNS_copy 0x0000000000000027 6 7 1 0 0 is_stmt 0x00000055: 00 DW_LNE_set_address (0x0000000000000032) 0x0000005c: 03 DW_LNS_advance_line (3) 0x0000005e: 05 DW_LNS_set_column (23) 0x00000060: 01 DW_LNS_copy 0x0000000000000032 3 23 1 0 0 is_stmt 0x00000061: 00 DW_LNE_set_address (0x0000000000000037) 0x00000068: 05 DW_LNS_set_column (17) 0x0000006a: 06 DW_LNS_negate_stmt 0x0000006b: 01 DW_LNS_copy 0x0000000000000037 3 17 1 0 0 0x0000006c: 00 DW_LNE_set_address (0x000000000000003c) 0x00000073: 05 DW_LNS_set_column (3) 0x00000075: 01 DW_LNS_copy 0x000000000000003c 3 3 1 0 0 0x00000076: 00 DW_LNE_set_address (0x0000000000000040) 0x0000007d: 03 DW_LNS_advance_line (8) 0x0000007f: 06 DW_LNS_negate_stmt 0x00000080: 01 DW_LNS_copy 0x0000000000000040 8 3 1 0 0 is_stmt 0x00000081: 00 DW_LNE_set_address (0x0000000000000043) 0x00000088: 00 DW_LNE_end_sequence 0x0000000000000043 8 3 1 0 0 is_stmt end_sequence 0x0000008b: 00 DW_LNE_set_address (0x0000000000000044) 0x00000092: 03 DW_LNS_advance_line (11) 0x00000094: 01 DW_LNS_copy 0x0000000000000044 11 0 1 0 0 is_stmt 0x00000095: 00 DW_LNE_set_address (0x0000000000000047) 0x0000009c: 03 DW_LNS_advance_line (12) 0x0000009e: 05 DW_LNS_set_column (10) 0x000000a0: 0a DW_LNS_set_prologue_end 0x000000a1: 01 DW_LNS_copy 0x0000000000000047 12 10 1 0 0 is_stmt prologue_end 0x000000a2: 00 DW_LNE_set_address (0x0000000000000049) 0x000000a9: 05 DW_LNS_set_column (3) 0x000000ab: 06 DW_LNS_negate_stmt 0x000000ac: 01 DW_LNS_copy 0x0000000000000049 12 3 1 0 0 0x000000ad: 00 DW_LNE_set_address (0x000000000000004a) 0x000000b4: 00 DW_LNE_end_sequence 0x000000000000004a 12 3 1 0 0 end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)" 0x00000069: "fib2.c" 0x00000070: "/usr/local/google/home/azakai/Dev/2-binaryen" 0x0000009d: "fib" 0x000000a1: "int" 0x000000a5: "main" 0x000000aa: "n" 0x000000ac: "a" 0x000000ae: "b" 0x000000b0: "i" 0x000000b2: "t" .debug_ranges contents: 00000000 00000005 00000043 00000000 00000044 0000004a 00000000 (module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (import "env" "__indirect_function_table" (table $timport$0 1 funcref)) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $fib (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) ;; code offset: 0x10 (local.set $1 ;; code offset: 0xe (i32.const 1) ) ;; code offset: 0x12 (block $label$1 ;; code offset: 0x19 (br_if $label$1 ;; code offset: 0x18 (i32.lt_s ;; code offset: 0x14 (local.get $0) ;; code offset: 0x16 (i32.const 1) ) ) ;; code offset: 0x1d (local.set $2 ;; code offset: 0x1b (i32.const 0) ) ;; code offset: 0x21 (local.set $3 ;; code offset: 0x1f (i32.const 0) ) ;; code offset: 0x23 (loop $label$2 ;; code offset: 0x2c (local.set $1 ;; code offset: 0x2b (i32.add ;; code offset: 0x27 (local.tee $4 ;; code offset: 0x25 (local.get $1) ) ;; code offset: 0x29 (local.get $2) ) ) ;; code offset: 0x30 (local.set $2 ;; code offset: 0x2e (local.get $4) ) ;; code offset: 0x3c (br_if $label$2 ;; code offset: 0x3b (i32.ne ;; code offset: 0x37 (local.tee $3 ;; code offset: 0x36 (i32.add ;; code offset: 0x32 (local.get $3) ;; code offset: 0x34 (i32.const 1) ) ) ;; code offset: 0x39 (local.get $0) ) ) ) ) ;; code offset: 0x40 (local.get $1) ) (func $__original_main (result i32) ;; code offset: 0x47 (call $fib ;; code offset: 0x45 (i32.const 6) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) ;; code offset: 0x4c (call $__original_main) ) ;; custom section ".debug_info", size 168 ;; custom section ".debug_loc", size 143 ;; custom section ".debug_ranges", size 24 ;; custom section ".debug_abbrev", size 131 ;; custom section ".debug_line", size 183 ;; custom section ".debug_str", size 180 ;; custom section "producers", size 127 ) binaryen-version_108/test/passes/fib2_emptylocspan_dwarf.passes000066400000000000000000000000401423707623100252370ustar00rootroot00000000000000dwarfdump_roundtrip_dwarfdump_g binaryen-version_108/test/passes/fib2_emptylocspan_dwarf.wasm000066400000000000000000000023701423707623100247200ustar00rootroot00000000000000asm````4envmemory€€env__indirect_function_tablepA€ˆÀ A€ )__wasm_call_ctorsmain __data_end Q 8A!@ AH A!A!@ " j! ! Aj" G  A€€€ ‚€€€ ´ .debug_info¤ ip8ퟠª ¬ +® d° ² > ퟥ  G¡š .debug_locÿÿÿÿŸíŸÿÿÿÿŸ#íŸ#3íŸÿÿÿÿŸ.3íŸ& .debug_ranges=>H‘ .debug_abbrev%U.@—B: ; 'I?: ; I4: ; I4: ; I.@—B: ; I?‰‚$> v .debug_linefû fib2.c ’X+ÀztMXXO>  =f¿ .debug_strclang version 11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)fib2.c/usr/local/google/home/azakai/Dev/2-binaryenfibintmainnabit7name0__wasm_call_ctorsfib__original_mainmain‰ producerslanguageC99 processed-byclangZ11.0.0 (https://github.com/llvm/llvm-project.git 313d89724ce3ccf66c1c51849903e1e6d184dd85)binaryen-version_108/test/passes/fib_nonzero-low-pc_dwarf.bin.txt000066400000000000000000000565751423707623100254500ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (155 bytes) Contains section .debug_loc (182 bytes) Contains section .debug_abbrev (94 bytes) Contains section .debug_line (86 bytes) Contains section .debug_str (157 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_prototyped DW_FORM_flag_present DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [4] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [5] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [6] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 .debug_info contents: 0x00000000: Compile Unit: length = 0x00000097 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000009b) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git b0e51167aff84e52fb99f69db6f8965304eee2cf)") DW_AT_language [DW_FORM_data2] (DW_LANG_C99) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "fib.c") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000006f] = "D:\\test\\fib") DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a) DW_AT_high_pc [DW_FORM_data4] (0x0000003f) 0x00000026: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a) DW_AT_high_pc [DW_FORM_data4] (0x0000003f) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 +0, 00 00 9f) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000007b] = "fib") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (3) DW_AT_prototyped [DW_FORM_flag_present] (true) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000041: DW_TAG_formal_parameter [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000083] = "n") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (3) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x0000004c: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0x0000000a, 0x0000001a): DW_OP_consts +1, DW_OP_stack_value [0x00000026, 0x00000028): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value [0x00000028, 0x00000044): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000085] = "previous") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (4) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x0000005b: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000031: [0x0000000a, 0x0000001a): DW_OP_consts +1, DW_OP_stack_value [0x0000002d, 0x00000044): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000008e] = "current") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (5) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x0000006a: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000054: [0x0000000a, 0x0000001a): DW_OP_consts +1, DW_OP_stack_value [0x00000026, 0x00000028): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value [0x00000028, 0x0000002d): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x0000002d, 0x00000044): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000096] = "next") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (6) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x00000079: DW_TAG_lexical_block [5] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000013) DW_AT_high_pc [DW_FORM_data4] (0x00000033) 0x00000082: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000093: [0x0000000a, 0x0000001a): DW_OP_consts +3, DW_OP_stack_value [0x00000039, 0x0000003b): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009b] = "i") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (7) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x00000091: NULL 0x00000092: NULL 0x00000093: DW_TAG_base_type [6] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000007f] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x0000009a: NULL .debug_loc contents: 0x00000000: [0x00000000, 0x00000010): DW_OP_consts +1, DW_OP_stack_value [0x0000001c, 0x0000001e): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value [0x0000001e, 0x0000003a): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x00000031: [0x00000000, 0x00000010): DW_OP_consts +1, DW_OP_stack_value [0x00000023, 0x0000003a): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000054: [0x00000000, 0x00000010): DW_OP_consts +1, DW_OP_stack_value [0x0000001c, 0x0000001e): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value [0x0000001e, 0x00000023): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x00000023, 0x0000003a): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000093: [0x00000000, 0x00000010): DW_OP_consts +3, DW_OP_stack_value [0x0000002f, 0x00000031): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000052 version: 4 prologue_length: 0x0000001d min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "fib.c" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000027: 00 DW_LNE_set_address (0x000000000000000a) 0x0000002e: 14 address += 0, line += 2 0x000000000000000a 3 0 1 0 0 is_stmt 0x0000002f: 05 DW_LNS_set_column (23) 0x00000031: 0a DW_LNS_set_prologue_end 0x00000032: 94 address += 9, line += 4 0x0000000000000013 7 23 1 0 0 is_stmt prologue_end 0x00000033: 05 DW_LNS_set_column (5) 0x00000035: 06 DW_LNS_negate_stmt 0x00000036: 58 address += 5, line += 0 0x0000000000000018 7 5 1 0 0 0x00000037: 03 DW_LNS_advance_line (0) 0x00000039: 2e address += 2, line += 0 0x000000000000001a 0 5 1 0 0 0x0000003a: 05 DW_LNS_set_column (24) 0x0000003c: 06 DW_LNS_negate_stmt 0x0000003d: 03 DW_LNS_advance_line (9) 0x0000003f: ba address += 12, line += 0 0x0000000000000026 9 24 1 0 0 is_stmt 0x00000040: 05 DW_LNS_set_column (23) 0x00000042: 72 address += 7, line += -2 0x000000000000002d 7 23 1 0 0 is_stmt 0x00000043: 05 DW_LNS_set_column (29) 0x00000045: 06 DW_LNS_negate_stmt 0x00000046: 74 address += 7, line += 0 0x0000000000000034 7 29 1 0 0 0x00000047: 03 DW_LNS_advance_line (0) 0x00000049: 58 address += 5, line += 0 0x0000000000000039 0 29 1 0 0 0x0000004a: 05 DW_LNS_set_column (5) 0x0000004c: 6d address += 6, line += 7 0x000000000000003f 7 5 1 0 0 0x0000004d: 06 DW_LNS_negate_stmt 0x0000004e: 03 DW_LNS_advance_line (16) 0x00000050: 74 address += 7, line += 0 0x0000000000000046 16 5 1 0 0 is_stmt 0x00000051: 02 DW_LNS_advance_pc (3) 0x00000053: 00 DW_LNE_end_sequence 0x0000000000000049 16 5 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git b0e51167aff84e52fb99f69db6f8965304eee2cf)" 0x00000069: "fib.c" 0x0000006f: "D:\test\fib" 0x0000007b: "fib" 0x0000007f: "int" 0x00000083: "n" 0x00000085: "previous" 0x0000008e: "current" 0x00000096: "next" 0x0000009b: "i" DWARF debug info ================ Contains section .debug_info (155 bytes) Contains section .debug_loc (182 bytes) Contains section .debug_abbrev (94 bytes) Contains section .debug_line (140 bytes) Contains section .debug_str (157 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_prototyped DW_FORM_flag_present DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [4] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [5] DW_TAG_lexical_block DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [6] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 .debug_info contents: 0x00000000: Compile Unit: length = 0x00000097 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000009b) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 11.0.0 (https://github.com/llvm/llvm-project.git b0e51167aff84e52fb99f69db6f8965304eee2cf)") DW_AT_language [DW_FORM_data2] (DW_LANG_C99) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "fib.c") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000006f] = "D:\\test\\fib") DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a) DW_AT_high_pc [DW_FORM_data4] (0x00000047) 0x00000026: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a) DW_AT_high_pc [DW_FORM_data4] (0x00000047) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 +0, 00 00 9f) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000007b] = "fib") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (3) DW_AT_prototyped [DW_FORM_flag_present] (true) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000041: DW_TAG_formal_parameter [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000083] = "n") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (3) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x0000004c: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0x0000000a, 0x00000022): DW_OP_consts +1, DW_OP_stack_value [0x0000002e, 0x00000030): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value [0x00000030, 0x0000004c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000085] = "previous") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (4) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x0000005b: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000031: [0x0000000a, 0x00000022): DW_OP_consts +1, DW_OP_stack_value [0x00000035, 0x0000004c): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000008e] = "current") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (5) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x0000006a: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000054: [0x0000000a, 0x00000022): DW_OP_consts +1, DW_OP_stack_value [0x0000002e, 0x00000030): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value [0x00000030, 0x00000035): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x00000035, 0x0000004c): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000096] = "next") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (6) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x00000079: DW_TAG_lexical_block [5] * DW_AT_low_pc [DW_FORM_addr] (0x000000000000001b) DW_AT_high_pc [DW_FORM_data4] (0x00000033) 0x00000082: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000093: [0x0000000a, 0x00000022): DW_OP_consts +3, DW_OP_stack_value [0x00000041, 0x00000043): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009b] = "i") DW_AT_decl_file [DW_FORM_data1] ("D:\test\fib/fib.c") DW_AT_decl_line [DW_FORM_data1] (7) DW_AT_type [DW_FORM_ref4] (cu + 0x0093 => {0x00000093} "int") 0x00000091: NULL 0x00000092: NULL 0x00000093: DW_TAG_base_type [6] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000007f] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x0000009a: NULL .debug_loc contents: 0x00000000: [0x00000000, 0x00000018): DW_OP_consts +1, DW_OP_stack_value [0x00000024, 0x00000026): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value [0x00000026, 0x00000042): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x00000031: [0x00000000, 0x00000018): DW_OP_consts +1, DW_OP_stack_value [0x0000002b, 0x00000042): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000054: [0x00000000, 0x00000018): DW_OP_consts +1, DW_OP_stack_value [0x00000024, 0x00000026): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value [0x00000026, 0x0000002b): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value [0x0000002b, 0x00000042): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000093: [0x00000000, 0x00000018): DW_OP_consts +3, DW_OP_stack_value [0x00000037, 0x00000039): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000088 version: 4 prologue_length: 0x0000001d min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "fib.c" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000027: 00 DW_LNE_set_address (0x000000000000000a) 0x0000002e: 03 DW_LNS_advance_line (3) 0x00000030: 01 DW_LNS_copy 0x000000000000000a 3 0 1 0 0 is_stmt 0x00000031: 00 DW_LNE_set_address (0x000000000000001b) 0x00000038: 03 DW_LNS_advance_line (7) 0x0000003a: 05 DW_LNS_set_column (23) 0x0000003c: 0a DW_LNS_set_prologue_end 0x0000003d: 01 DW_LNS_copy 0x000000000000001b 7 23 1 0 0 is_stmt prologue_end 0x0000003e: 00 DW_LNE_set_address (0x0000000000000020) 0x00000045: 05 DW_LNS_set_column (5) 0x00000047: 06 DW_LNS_negate_stmt 0x00000048: 01 DW_LNS_copy 0x0000000000000020 7 5 1 0 0 0x00000049: 00 DW_LNE_set_address (0x000000000000002e) 0x00000050: 03 DW_LNS_advance_line (9) 0x00000052: 05 DW_LNS_set_column (24) 0x00000054: 06 DW_LNS_negate_stmt 0x00000055: 01 DW_LNS_copy 0x000000000000002e 9 24 1 0 0 is_stmt 0x00000056: 00 DW_LNE_set_address (0x0000000000000035) 0x0000005d: 03 DW_LNS_advance_line (7) 0x0000005f: 05 DW_LNS_set_column (23) 0x00000061: 01 DW_LNS_copy 0x0000000000000035 7 23 1 0 0 is_stmt 0x00000062: 00 DW_LNE_set_address (0x000000000000003c) 0x00000069: 05 DW_LNS_set_column (29) 0x0000006b: 06 DW_LNS_negate_stmt 0x0000006c: 01 DW_LNS_copy 0x000000000000003c 7 29 1 0 0 0x0000006d: 00 DW_LNE_set_address (0x0000000000000047) 0x00000074: 05 DW_LNS_set_column (5) 0x00000076: 01 DW_LNS_copy 0x0000000000000047 7 5 1 0 0 0x00000077: 00 DW_LNE_set_address (0x000000000000004e) 0x0000007e: 03 DW_LNS_advance_line (16) 0x00000080: 06 DW_LNS_negate_stmt 0x00000081: 01 DW_LNS_copy 0x000000000000004e 16 5 1 0 0 is_stmt 0x00000082: 00 DW_LNE_set_address (0x0000000000000051) 0x00000089: 00 DW_LNE_end_sequence 0x0000000000000051 16 5 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 11.0.0 (https://github.com/llvm/llvm-project.git b0e51167aff84e52fb99f69db6f8965304eee2cf)" 0x00000069: "fib.c" 0x0000006f: "D:\test\fib" 0x0000007b: "fib" 0x0000007f: "int" 0x00000083: "n" 0x00000085: "previous" 0x0000008e: "current" 0x00000096: "next" 0x0000009b: "i" (module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "memory" (memory $mimport$0 0)) (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__stack_pointer" (global $gimport$0 (mut i32))) (import "env" "__memory_base" (global $gimport$1 i32)) (import "env" "__table_base" (global $gimport$2 i32)) (global $global$0 i32 (i32.const 0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__wasm_apply_relocs" (func $__wasm_apply_relocs)) (export "fib" (func $fib)) (export "__dso_handle" (global $global$0)) (func $__wasm_call_ctors ;; code offset: 0x3 (call $__wasm_apply_relocs) ) (func $__wasm_apply_relocs ) (func $fib (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) ;; code offset: 0x17 (local.set $1 ;; code offset: 0x15 (i32.const 1) ) ;; code offset: 0x19 (block $label$1 ;; code offset: 0x20 (br_if $label$1 ;; code offset: 0x1f (i32.le_s ;; code offset: 0x1b (local.get $0) ;; code offset: 0x1d (i32.const 2) ) ) ;; code offset: 0x24 (local.set $2 ;; code offset: 0x22 (i32.const 3) ) ;; code offset: 0x28 (local.set $3 ;; code offset: 0x26 (i32.const 1) ) ;; code offset: 0x2a (loop $label$2 ;; code offset: 0x33 (local.set $1 ;; code offset: 0x32 (i32.add ;; code offset: 0x2e (local.tee $4 ;; code offset: 0x2c (local.get $1) ) ;; code offset: 0x30 (local.get $3) ) ) ;; code offset: 0x3a (local.set $5 ;; code offset: 0x39 (i32.eq ;; code offset: 0x35 (local.get $2) ;; code offset: 0x37 (local.get $0) ) ) ;; code offset: 0x41 (local.set $2 ;; code offset: 0x40 (i32.add ;; code offset: 0x3c (local.get $2) ;; code offset: 0x3e (i32.const 1) ) ) ;; code offset: 0x45 (local.set $3 ;; code offset: 0x43 (local.get $4) ) ;; code offset: 0x4a (br_if $label$2 ;; code offset: 0x49 (i32.eqz ;; code offset: 0x47 (local.get $5) ) ) ) ) ;; code offset: 0x4e (local.get $1) ) ;; dylink section ;; memorysize: 0 ;; memoryalignment: 0 ;; tablesize: 0 ;; tablealignment: 0 ;; custom section ".debug_info", size 155 ;; custom section ".debug_loc", size 182 ;; custom section ".debug_abbrev", size 94 ;; custom section ".debug_line", size 140 ;; custom section ".debug_str", size 157 ;; custom section "producers", size 127 ) binaryen-version_108/test/passes/fib_nonzero-low-pc_dwarf.passes000066400000000000000000000000671423707623100253410ustar00rootroot00000000000000enable-mutable-globals_dwarfdump_roundtrip_dwarfdump_g binaryen-version_108/test/passes/fib_nonzero-low-pc_dwarf.wasm000066400000000000000000000023351423707623100250120ustar00rootroot00000000000000asm dylink ``qenvmemoryenv__indirect_function_tablepenv__stack_pointerenv __memory_baseenv __table_baseA @__wasm_call_ctors__wasm_apply_relocsfib __dso_handle I  ?A!@ AL A!A!@ " j!  F! Aj! ! E  § .debug_info— io ? ?íŸ{“ƒ“…“1Ž“T–“3“›“Á .debug_locŸíŸ:ퟟ#:ퟟíŸ#íŸ#:ퟟ/1íŸl .debug_abbrev%.@—B: ; 'I?: ; I4: ; I $> b .debug_lineRû fib.c  ”Xy. ºrtyXm t¨ .debug_strclang version 11.0.0 (https://github.com/llvm/llvm-project.git b0e51167aff84e52fb99f69db6f8965304eee2cf)fib.cD:\test\fibfibintnpreviouscurrentnexti5name.__wasm_call_ctors__wasm_apply_relocsfib‰ producerslanguageC99 processed-byclangZ11.0.0 (https://github.com/llvm/llvm-project.git b0e51167aff84e52fb99f69db6f8965304eee2cf)binaryen-version_108/test/passes/flatten.bin.txt000066400000000000000000000110061423707623100221650ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_i64 (func (result i64))) (type $none_=>_f32 (func (result f32))) (type $none_=>_f64 (func (result f64))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i64_=>_i64 (func (param i64) (result i64))) (type $f32_=>_f32 (func (param f32) (result f32))) (type $f64_=>_f64 (func (param f64) (result f64))) (type $i64_f32_f64_i32_i32_=>_none (func (param i64 f32 f64 i32 i32))) (type $i64_f32_f64_i32_i32_=>_f64 (func (param i64 f32 f64 i32 i32) (result f64))) (export "type-local-i32" (func $0)) (export "type-local-i64" (func $1)) (export "type-local-f32" (func $2)) (export "type-local-f64" (func $3)) (export "type-param-i32" (func $4)) (export "type-param-i64" (func $5)) (export "type-param-f32" (func $6)) (export "type-param-f64" (func $7)) (export "type-mixed" (func $8)) (export "read" (func $9)) (func $0 (result i32) (local $0 i32) (local $1 i32) (local.set $1 (local.get $0) ) (return (local.get $1) ) ) (func $1 (result i64) (local $0 i64) (local $1 i64) (local.set $1 (local.get $0) ) (return (local.get $1) ) ) (func $2 (result f32) (local $0 f32) (local $1 f32) (local.set $1 (local.get $0) ) (return (local.get $1) ) ) (func $3 (result f64) (local $0 f64) (local $1 f64) (local.set $1 (local.get $0) ) (return (local.get $1) ) ) (func $4 (param $0 i32) (result i32) (local $1 i32) (local.set $1 (local.get $0) ) (return (local.get $1) ) ) (func $5 (param $0 i64) (result i64) (local $1 i64) (local.set $1 (local.get $0) ) (return (local.get $1) ) ) (func $6 (param $0 f32) (result f32) (local $1 f32) (local.set $1 (local.get $0) ) (return (local.get $1) ) ) (func $7 (param $0 f64) (result f64) (local $1 f64) (local.set $1 (local.get $0) ) (return (local.get $1) ) ) (func $8 (param $0 i64) (param $1 f32) (param $2 f64) (param $3 i32) (param $4 i32) (local $5 i64) (local $6 i64) (local $7 f32) (local $8 f64) (block $label$1 (nop) (unreachable) (unreachable) ) (unreachable) ) (func $9 (param $0 i64) (param $1 f32) (param $2 f64) (param $3 i32) (param $4 i32) (result f64) (local $5 i64) (local $6 i64) (local $7 f32) (local $8 f64) (local $9 i64) (local $10 f64) (local $11 f32) (local $12 f64) (local $13 f64) (local $14 i32) (local $15 f64) (local $16 i32) (local $17 f64) (local $18 f32) (local $19 f64) (local $20 i64) (local $21 f64) (local $22 i64) (local $23 f64) (local $24 f64) (local $25 f64) (local $26 f64) (local $27 f64) (local $28 f64) (local $29 f64) (local $30 f64) (local $31 f64) (local $32 f64) (local $33 f64) (local $34 f64) (block $label$1 (local.set $7 (f32.const 5.5) ) (local.set $5 (i64.const 6) ) (local.set $8 (f64.const 8) ) (local.set $9 (local.get $0) ) (local.set $10 (f64.convert_i64_u (local.get $9) ) ) (local.set $11 (local.get $1) ) (local.set $12 (f64.promote_f32 (local.get $11) ) ) (local.set $13 (local.get $2) ) (local.set $14 (local.get $3) ) (local.set $15 (f64.convert_i32_u (local.get $14) ) ) (local.set $16 (local.get $4) ) (local.set $17 (f64.convert_i32_s (local.get $16) ) ) (local.set $18 (local.get $7) ) (local.set $19 (f64.promote_f32 (local.get $18) ) ) (local.set $20 (local.get $5) ) (local.set $21 (f64.convert_i64_u (local.get $20) ) ) (local.set $22 (local.get $6) ) (local.set $23 (f64.convert_i64_u (local.get $22) ) ) (local.set $24 (local.get $8) ) (local.set $25 (f64.add (local.get $23) (local.get $24) ) ) (local.set $26 (f64.add (local.get $21) (local.get $25) ) ) (local.set $27 (f64.add (local.get $19) (local.get $26) ) ) (local.set $28 (f64.add (local.get $17) (local.get $27) ) ) (local.set $29 (f64.add (local.get $15) (local.get $28) ) ) (local.set $30 (f64.add (local.get $13) (local.get $29) ) ) (local.set $31 (f64.add (local.get $12) (local.get $30) ) ) (local.set $32 (f64.add (local.get $10) (local.get $31) ) ) (local.set $33 (local.get $32) ) ) (local.set $34 (local.get $33) ) (return (local.get $34) ) ) ) binaryen-version_108/test/passes/flatten.wasm000066400000000000000000000007121423707623100215500ustar00rootroot00000000000000asm¶€€€ ``~`}`|``~~`}}`||`~}|`~}||‹€€€  €€ type-local-i32type-local-i64type-local-f32type-local-f64type-param-i32type-param-i64type-param-f32type-param-f64 type-mixedread Ì€€ †€€€ †€€€~ †€€€} †€€€| „€€€ „€€€ „€€€ „€€€ ¯€€€~}|@P Œ š E E Œ P P š €€€~}||C°@!B!D @! º »  ¸ · » º º          binaryen-version_108/test/passes/fpcast-emu_pass-arg=max-func-params@5.txt000066400000000000000000000016171423707623100270330ustar00rootroot00000000000000(module (type $i64_i64_i64_i64_i64_=>_i64 (func (param i64 i64 i64 i64 i64) (result i64))) (type $vijfd (func (param i32 i64 f32 f64))) (table $0 10 10 funcref) (elem (i32.const 0) $byn$fpcast-emu$a) (func $a (param $x i32) (param $y i64) (param $z f32) (param $w f64) (drop (call_indirect (type $i64_i64_i64_i64_i64_=>_i64) (i64.extend_i32_u (i32.const 1) ) (i64.const 2) (i64.extend_i32_u (i32.reinterpret_f32 (f32.const 3) ) ) (i64.reinterpret_f64 (f64.const 4) ) (i64.const 0) (i32.const 1337) ) ) ) (func $byn$fpcast-emu$a (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (result i64) (call $a (i32.wrap_i64 (local.get $0) ) (local.get $1) (f32.reinterpret_i32 (i32.wrap_i64 (local.get $2) ) ) (f64.reinterpret_i64 (local.get $3) ) ) (i64.const 0) ) ) binaryen-version_108/test/passes/fpcast-emu_pass-arg=max-func-params@5.wast000066400000000000000000000005341423707623100271670ustar00rootroot00000000000000(module (type $vijfd (func (param i32) (param i64) (param f32) (param f64))) (table 10 10 funcref) (elem (i32.const 0) $a) (func $a (param $x i32) (param $y i64) (param $z f32) (param $w f64) (call_indirect (type $vijfd) (i32.const 1) (i64.const 2) (f32.const 3) (f64.const 4) (i32.const 1337) ) ) ) binaryen-version_108/test/passes/func-metrics.txt000066400000000000000000000123651423707623100223710ustar00rootroot00000000000000global [exports] : 0 [funcs] : 3 [globals] : 1 [imports] : 0 [memory-data] : 9 [table-data] : 3 [tables] : 1 [tags] : 0 [total] : 6 Const : 3 RefFunc : 3 func: empty [binary-bytes] : 3 [total] : 1 [vars] : 0 Nop : 1 func: small [binary-bytes] : 9 [total] : 5 [vars] : 0 Block : 1 Const : 1 Drop : 1 Nop : 1 Return : 1 func: ifs [binary-bytes] : 51 [total] : 24 [vars] : 1 Binary : 1 Block : 1 Const : 12 Drop : 6 If : 4 (module (type $none_=>_none (func)) (type $0 (func (param i32))) (global $glob i32 (i32.const 1337)) (memory $0 256 256) (data (i32.const 0) "\ff\ef\0f\1f 0@P\99") (table $0 256 256 funcref) (elem (i32.const 0) $ifs $ifs $ifs) (func $empty (nop) ) (func $small (nop) (drop (i32.const 100421) ) (return) ) (func $ifs (param $x i32) (local $y f32) (block $block0 (if (i32.const 0) (drop (i32.const 1) ) ) (if (i32.const 0) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (if (i32.const 4) (drop (i32.const 5) ) (drop (i32.const 6) ) ) (drop (i32.eq (if (result i32) (i32.const 4) (i32.const 5) (i32.const 6) ) (i32.const 177) ) ) ) ) ) global [exports] : 0 [funcs] : 0 [globals] : 0 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 0 (module ) global [exports] : 2 [funcs] : 3 [globals] : 0 [imports] : 1 [tables] : 0 [tags] : 0 [total] : 0 func: func_a [binary-bytes] : 16 [total] : 8 [vars] : 0 Block : 1 Call : 7 func: func_b [binary-bytes] : 22 [total] : 11 [vars] : 0 Block : 1 Call : 10 func: func_c [binary-bytes] : 32 [total] : 16 [vars] : 0 Block : 1 Call : 15 export: a (func_a) [removable-bytes-without-it]: 58 [total] : 0 export: b (func_b) [removable-bytes-without-it]: 18 [total] : 0 (module (type $none_=>_none (func)) (import "env" "waka" (func $waka)) (export "a" (func $func_a)) (export "b" (func $func_b)) (func $func_a (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $func_b) (call $func_c) ) (func $func_b (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) ) (func $func_c (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) ) ) global [exports] : 1 [funcs] : 1 [globals] : 0 [imports] : 1 [tables] : 0 [tags] : 0 [total] : 0 func: func_a [binary-bytes] : 12 [total] : 6 [vars] : 0 Block : 1 Call : 5 export: a (func_a) [removable-bytes-without-it]: 7 [total] : 0 start: func_a [removable-bytes-without-it]: 3 [total] : 0 (module (type $none_=>_none (func)) (import "env" "waka" (func $waka)) (export "a" (func $func_a)) (start $func_a) (func $func_a (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) ) ) global [exports] : 0 [funcs] : 1 [globals] : 0 [imports] : 1 [tables] : 0 [tags] : 0 [total] : 0 func: func_a [binary-bytes] : 12 [total] : 6 [vars] : 0 Block : 1 Call : 5 start: func_a [removable-bytes-without-it]: 57 [total] : 0 (module (type $none_=>_none (func)) (import "env" "waka" (func $waka)) (start $func_a) (func $func_a (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) ) ) global [exports] : 1 [funcs] : 1 [globals] : 1 [imports] : 1 [tables] : 0 [tags] : 0 [total] : 1 GlobalGet : 1 func: 0 [binary-bytes] : 4 [total] : 1 [vars] : 0 GlobalGet : 1 export: stackSave (0) [removable-bytes-without-it]: 62 [total] : 0 (module (type $0 (func (result i32))) (import "env" "STACKTOP" (global $gimport$0 i32)) (global $global$0 (mut i32) (global.get $gimport$0)) (export "stackSave" (func $0)) (func $0 (result i32) (global.get $global$0) ) ) binaryen-version_108/test/passes/func-metrics.wast000066400000000000000000000044031423707623100225220ustar00rootroot00000000000000(module (memory 256 256) (table 256 256 funcref) (elem (i32.const 0) $ifs $ifs $ifs) (data (i32.const 0) "\ff\ef\0f\1f\20\30\40\50\99") (type $0 (func (param i32))) (global $glob i32 (i32.const 1337)) (func $empty) (func $small (nop) (drop (i32.const 100421)) (return) ) (func $ifs (type $0) (param $x i32) (local $y f32) (block $block0 (if (i32.const 0) (drop (i32.const 1) ) ) (if (i32.const 0) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (if (i32.const 4) (drop (i32.const 5) ) (drop (i32.const 6) ) ) (drop (i32.eq (if (result i32) (i32.const 4) (i32.const 5) (i32.const 6) ) (i32.const 177) ) ) ) ) ) ;; module with no table or memory or anything for that matter (module ) ;; export size checking (module (import "env" "waka" (func $waka)) (export "a" (func $func_a)) (export "b" (func $func_b)) (func $func_a (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $func_b) (call $func_c) ) (func $func_b (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) ) (func $func_c (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) ) ) ;; start size checking (module (import "env" "waka" (func $waka)) (export "a" (func $func_a)) (start $func_a) (func $func_a (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) ) ) (module (import "env" "waka" (func $waka)) (start $func_a) (func $func_a (call $waka) (call $waka) (call $waka) (call $waka) (call $waka) ) ) (module ;; various globals (type $0 (func (result i32))) (import "env" "STACKTOP" (global $gimport$0 i32)) (global $global$0 (mut i32) (global.get $gimport$0)) (export "stackSave" (func $0)) (func $0 (; 0 ;) (type $0) (result i32) (global.get $global$0) ) ) binaryen-version_108/test/passes/fuzz-exec_O.txt000066400000000000000000000052521423707623100221650ustar00rootroot00000000000000[fuzz-exec] calling func_0 [trap final > memory: 18446744073709551615 > 65514] [fuzz-exec] calling func_1 [trap final > memory: 18446744073709551615 > 65514] (module (type $none_=>_i64 (func (result i64))) (type $none_=>_i32 (func (result i32))) (memory $0 1 1) (export "func_0" (func $func_0)) (export "func_1" (func $func_1)) (func $func_0 (; has Stack IR ;) (result i64) (block $label$0 (result i64) (br_if $label$0 (i64.const 1234) (i32.load16_s offset=22 align=1 (i32.const -1) ) ) ) ) (func $func_1 (; has Stack IR ;) (result i32) (i32.load16_s offset=22 align=1 (i32.const -1) ) ) ) [fuzz-exec] calling func_0 [trap final > memory: 18446744073709551615 > 65514] [fuzz-exec] calling func_1 [trap final > memory: 18446744073709551615 > 65514] [fuzz-exec] comparing func_0 [fuzz-exec] comparing func_1 [fuzz-exec] calling div [fuzz-exec] note result: div => nan:0x400000 [fuzz-exec] calling mul1 [fuzz-exec] note result: mul1 => nan:0x400000 [fuzz-exec] calling mul2 [fuzz-exec] note result: mul2 => nan:0x400000 [fuzz-exec] calling add1 [fuzz-exec] note result: add1 => nan:0x400000 [fuzz-exec] calling add2 [fuzz-exec] note result: add2 => nan:0x400000 [fuzz-exec] calling add3 [fuzz-exec] note result: add3 => nan:0x400000 [fuzz-exec] calling add4 [fuzz-exec] note result: add4 => nan:0x400000 [fuzz-exec] calling sub1 [fuzz-exec] note result: sub1 => nan:0x400000 [fuzz-exec] calling sub2 [fuzz-exec] note result: sub2 => nan:0x400000 (module (type $none_=>_f32 (func (result f32))) (export "div" (func $0)) (export "mul1" (func $0)) (export "mul2" (func $0)) (export "add1" (func $0)) (export "add2" (func $0)) (export "add3" (func $0)) (export "add4" (func $0)) (export "sub1" (func $0)) (export "sub2" (func $0)) (func $0 (; has Stack IR ;) (result f32) (f32.const nan:0x400000) ) ) [fuzz-exec] calling div [fuzz-exec] note result: div => nan:0x400000 [fuzz-exec] calling mul1 [fuzz-exec] note result: mul1 => nan:0x400000 [fuzz-exec] calling mul2 [fuzz-exec] note result: mul2 => nan:0x400000 [fuzz-exec] calling add1 [fuzz-exec] note result: add1 => nan:0x400000 [fuzz-exec] calling add2 [fuzz-exec] note result: add2 => nan:0x400000 [fuzz-exec] calling add3 [fuzz-exec] note result: add3 => nan:0x400000 [fuzz-exec] calling add4 [fuzz-exec] note result: add4 => nan:0x400000 [fuzz-exec] calling sub1 [fuzz-exec] note result: sub1 => nan:0x400000 [fuzz-exec] calling sub2 [fuzz-exec] note result: sub2 => nan:0x400000 [fuzz-exec] comparing add1 [fuzz-exec] comparing add2 [fuzz-exec] comparing add3 [fuzz-exec] comparing add4 [fuzz-exec] comparing div [fuzz-exec] comparing mul1 [fuzz-exec] comparing mul2 [fuzz-exec] comparing sub1 [fuzz-exec] comparing sub2 binaryen-version_108/test/passes/fuzz-exec_O.wast000066400000000000000000000023141423707623100223200ustar00rootroot00000000000000(module (memory $0 1 1) (export "func_0" (func $func_0)) (export "func_1" (func $func_1)) (func $func_0 (result i64) (block $label$0 (result i64) (loop $label$1 (result i64) (br_if $label$0 (i64.const 1234) (i32.load16_s offset=22 align=1 (i32.const -1) ) ) ) ) ) (func $func_1 (result i32) (i32.load16_s offset=22 align=1 (i32.const -1) ) ) ) (module (func "div" (result f32) (f32.div (f32.const -nan:0x23017a) (f32.const 1) ) ) (func "mul1" (result f32) (f32.mul (f32.const -nan:0x34546d) (f32.const 1) ) ) (func "mul2" (result f32) (f32.mul (f32.const 1) (f32.const -nan:0x34546d) ) ) (func "add1" (result f32) (f32.add (f32.const -nan:0x34546d) (f32.const -0) ) ) (func "add2" (result f32) (f32.add (f32.const -0) (f32.const -nan:0x34546d) ) ) (func "add3" (result f32) (f32.add (f32.const -nan:0x34546d) (f32.const 0) ) ) (func "add4" (result f32) (f32.add (f32.const 0) (f32.const -nan:0x34546d) ) ) (func "sub1" (result f32) (f32.sub (f32.const -nan:0x34546d) (f32.const 0) ) ) (func "sub2" (result f32) (f32.sub (f32.const -nan:0x34546d) (f32.const -0) ) ) ) binaryen-version_108/test/passes/fuzz-exec_all-features.txt000066400000000000000000000127001423707623100243470ustar00rootroot00000000000000[fuzz-exec] calling a [fuzz-exec] note result: a => -69 [fuzz-exec] calling b [fuzz-exec] note result: b => -31768 [fuzz-exec] calling c [fuzz-exec] note result: c => -69 [fuzz-exec] calling d [fuzz-exec] note result: d => -31768 [fuzz-exec] calling e [fuzz-exec] note result: e => -2146649112 (module (type $none_=>_i64 (func (result i64))) (type $none_=>_i32 (func (result i32))) (export "a" (func $a)) (export "b" (func $b)) (export "c" (func $c)) (export "d" (func $d)) (export "e" (func $e)) (func $a (result i32) (i32.extend8_s (i32.const 187) ) ) (func $b (result i32) (i32.extend16_s (i32.const 33768) ) ) (func $c (result i64) (i64.extend8_s (i64.const 187) ) ) (func $d (result i64) (i64.extend16_s (i64.const 33768) ) ) (func $e (result i64) (i64.extend32_s (i64.const 2148318184) ) ) ) [fuzz-exec] calling a [fuzz-exec] note result: a => -69 [fuzz-exec] calling b [fuzz-exec] note result: b => -31768 [fuzz-exec] calling c [fuzz-exec] note result: c => -69 [fuzz-exec] calling d [fuzz-exec] note result: d => -31768 [fuzz-exec] calling e [fuzz-exec] note result: e => -2146649112 [fuzz-exec] comparing a [fuzz-exec] comparing b [fuzz-exec] comparing c [fuzz-exec] comparing d [fuzz-exec] comparing e [fuzz-exec] calling unaligned_load [trap unaligned atomic operation] [fuzz-exec] calling unaligned_load_offset [trap unaligned atomic operation] [fuzz-exec] calling aligned_for_size [fuzz-exec] note result: aligned_for_size => 0 [fuzz-exec] calling unaligned_notify [trap unaligned atomic operation] [fuzz-exec] calling wrap_cmpxchg [LoggingExternalInterface logging 42] [fuzz-exec] calling oob_notify [trap final > memory: 18446744073709551512 > 65514] (module (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (import "fuzzing-support" "log-i32" (func $fimport$0 (param i32))) (memory $0 (shared 1 1)) (export "unaligned_load" (func $0)) (export "unaligned_load_offset" (func $1)) (export "aligned_for_size" (func $2)) (export "unaligned_notify" (func $3)) (export "wrap_cmpxchg" (func $4)) (export "oob_notify" (func $5)) (func $0 (result i32) (i32.atomic.load (i32.const 1) ) ) (func $1 (result i32) (i32.atomic.load offset=1 (i32.const 0) ) ) (func $2 (result i32) (i32.atomic.load16_u offset=2 (i32.const 0) ) ) (func $3 (result i32) (memory.atomic.notify (i32.const 1) (i32.const 1) ) ) (func $4 (param $0 i32) (param $1 i32) (drop (i32.atomic.rmw8.cmpxchg_u (i32.const 0) (i32.const 256) (i32.const 42) ) ) (call $fimport$0 (i32.load (i32.const 0) ) ) ) (func $5 (drop (memory.atomic.notify offset=22 (i32.const -104) (i32.const -72) ) ) ) ) [fuzz-exec] calling unaligned_load [trap unaligned atomic operation] [fuzz-exec] calling unaligned_load_offset [trap unaligned atomic operation] [fuzz-exec] calling aligned_for_size [fuzz-exec] note result: aligned_for_size => 0 [fuzz-exec] calling unaligned_notify [trap unaligned atomic operation] [fuzz-exec] calling wrap_cmpxchg [LoggingExternalInterface logging 42] [fuzz-exec] calling oob_notify [trap final > memory: 18446744073709551512 > 65514] [fuzz-exec] comparing aligned_for_size [fuzz-exec] comparing oob_notify [fuzz-exec] comparing unaligned_load [fuzz-exec] comparing unaligned_load_offset [fuzz-exec] comparing unaligned_notify [fuzz-exec] comparing wrap_cmpxchg [fuzz-exec] calling unsigned_2_bytes [fuzz-exec] note result: unsigned_2_bytes => 65535 (module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 1 1)) (data (i32.const 0) "\ff\ff") (export "unsigned_2_bytes" (func $0)) (func $0 (result i32) (i32.atomic.rmw16.xor_u (i32.const 0) (i32.const 0) ) ) ) [fuzz-exec] calling unsigned_2_bytes [fuzz-exec] note result: unsigned_2_bytes => 65535 [fuzz-exec] comparing unsigned_2_bytes [fuzz-exec] calling rmw-reads-modifies-and-writes [LoggingExternalInterface logging 0] (module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "fuzzing-support" "log-i32" (func $fimport$0 (param i32))) (memory $0 (shared 1 1)) (export "rmw-reads-modifies-and-writes" (func $0)) (func $0 (drop (i64.atomic.rmw16.and_u offset=4 (i32.const 0) (i64.const 65535) ) ) (call $fimport$0 (i32.load8_u (i32.const 5) ) ) ) ) [fuzz-exec] calling rmw-reads-modifies-and-writes [LoggingExternalInterface logging 0] [fuzz-exec] comparing rmw-reads-modifies-and-writes [fuzz-exec] calling rmw-reads-modifies-and-writes-asymmetrical [LoggingExternalInterface logging 214] (module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "fuzzing-support" "log-i32" (func $fimport$0 (param i32))) (memory $0 (shared 1 1)) (export "rmw-reads-modifies-and-writes-asymmetrical" (func $0)) (func $0 (drop (i32.atomic.rmw8.sub_u (i32.const 3) (i32.const 42) ) ) (call $fimport$0 (i32.load8_u (i32.const 3) ) ) ) ) [fuzz-exec] calling rmw-reads-modifies-and-writes-asymmetrical [LoggingExternalInterface logging 214] [fuzz-exec] comparing rmw-reads-modifies-and-writes-asymmetrical [fuzz-exec] calling func [fuzz-exec] note result: func => funcref (module (type $none_=>_funcref (func (result funcref))) (elem declare func $func) (export "func" (func $func)) (func $func (result funcref) (ref.func $func) ) ) [fuzz-exec] calling func [fuzz-exec] note result: func => funcref [fuzz-exec] comparing func binaryen-version_108/test/passes/fuzz-exec_all-features.wast000066400000000000000000000045001423707623100245050ustar00rootroot00000000000000(module (export "a" (func $a)) (export "b" (func $b)) (export "c" (func $c)) (export "d" (func $d)) (export "e" (func $e)) (func $a (result i32) (i32.extend8_s (i32.const 187) ) ) (func $b (result i32) (i32.extend16_s (i32.const 33768) ) ) (func $c (result i64) (i64.extend8_s (i64.const 187) ) ) (func $d (result i64) (i64.extend16_s (i64.const 33768) ) ) (func $e (result i64) (i64.extend32_s (i64.const 2148318184) ) ) ) (module (import "fuzzing-support" "log-i32" (func $fimport$0 (param i32))) (memory $0 (shared 1 1)) (func "unaligned_load" (result i32) (i32.atomic.load (i32.const 1) ;; unaligned ptr (i32.const 1) ) ) (func "unaligned_load_offset" (result i32) (i32.atomic.load offset=1 ;; unaligned with offset (i32.const 0) (i32.const 1) ) ) (func "aligned_for_size" (result i32) (i32.atomic.load16_u offset=2 ;; just 2 bytes loaded, so size is ok (i32.const 0) ) ) (func "unaligned_notify" (result i32) (memory.atomic.notify (i32.const 1) ;; unaligned (i32.const 1) ) ) (func "wrap_cmpxchg" (param $0 i32) (param $1 i32) (drop (i32.atomic.rmw8.cmpxchg_u (i32.const 0) (i32.const 256) ;; 0x100, lower byte is 0 - should be wrapped to that (i32.const 42) ) ) (call $fimport$0 (i32.load (i32.const 0)) ) ) (func "oob_notify" (drop (memory.atomic.notify offset=22 (i32.const -104) ;; illegal address (i32.const -72) ) ) ) ) (module (memory $0 (shared 1 1)) (data (i32.const 0) "\ff\ff") (func "unsigned_2_bytes" (result i32) (i32.atomic.rmw16.xor_u ;; should be unsigned (i32.const 0) (i32.const 0) ) ) ) (module (import "fuzzing-support" "log-i32" (func $fimport$0 (param i32))) (memory $0 (shared 1 1)) (func "rmw-reads-modifies-and-writes" (drop (i64.atomic.rmw16.and_u offset=4 (i32.const 0) (i64.const 65535) ) ) (call $fimport$0 (i32.load8_u (i32.const 5) ) ) ) ) (module (import "fuzzing-support" "log-i32" (func $fimport$0 (param i32))) (memory $0 (shared 1 1)) (func "rmw-reads-modifies-and-writes-asymmetrical" (drop (i32.atomic.rmw8.sub_u (i32.const 3) (i32.const 42) ) ) (call $fimport$0 (i32.load8_u (i32.const 3) ) ) ) ) (module (export "func" (func $func)) (func $func (result funcref) (ref.func $func) ) ) binaryen-version_108/test/passes/fuzz_metrics_noprint.bin.txt000066400000000000000000000015131423707623100250270ustar00rootroot00000000000000total [exports] : 39 [funcs] : 50 [globals] : 7 [imports] : 4 [memory-data] : 4 [table-data] : 17 [tables] : 1 [tags] : 0 [total] : 3442 [vars] : 108 Binary : 299 Block : 495 Break : 110 Call : 193 CallIndirect : 29 Const : 650 Drop : 48 GlobalGet : 295 GlobalSet : 131 If : 183 Load : 79 LocalGet : 199 LocalSet : 153 Loop : 71 Nop : 45 RefFunc : 17 Return : 155 Select : 25 Store : 29 Unary : 235 Unreachable : 1 binaryen-version_108/test/passes/fuzz_metrics_noprint.passes000066400000000000000000000000321423707623100247320ustar00rootroot00000000000000translate-to-fuzz_metrics binaryen-version_108/test/passes/fuzz_metrics_noprint.wasm000066400000000000000000001200001423707623100244010ustar00rootroot00000000000000D ‚<ýæñÂk0ùÇÝäˆu4¢ ÃnØqàýw°vpë” Õ3_—=ªØa›‘ÿÉõ|ÎÔX»¿,à7SɽúðÉWVtfvϰ´ë‰ÄBiÚöºfÓø¶Ô±©êuZ\.‚$*ç‰8^°”#UQ‚V‹–è¤þò: ŸÅ¯×`„7kÝ s ËJRäÚpærʤÚ˜@lœ$'ž˜QÕBoëWÁf±2iÝcü5Ç—ÿ¦Í Pf§E­Ûmˆ1°øx!+DVUm‰ª‚¼­®:•xúE5¤Ð%ÂK@®:Á'r)ˆº—:ê7—.Ó:`z×R;æU{Q4ÞÁ–ô¡3j¢ —£æÈ Ì ¢é9€nð¶„]je~¸)-å.­tǧ_¢›}«3/}p |Í%‰$& ”·üðN3§'X[LH£œ6–@iH¡i[™ÝP~ äÜ€àèÊ­W„ø Õ µF@F„ËÍX-wøZ¢àsz ýõsÓ¬Œp$¼QhŸ˜™¾Tí+?ÁZO€ÚoýɲÄT.‚3ˆ*G)ã{ÃÝËT¦à@ùl=ÜÑ<—ŽÁaà |…iX‘Kf‹Ÿ€äV¶û×>jÄh‘7 <—E&¿Ÿß¶¥?âæ³œÌ­ü9ÁÃhŽeìÑœWæe¸ÇÚϬ"ü~” ÐOËŠ[%²‡Ò›Mì„øVïŠ2Ø#µ"â TR/Í›jjyª‰#&¼ïV˜Š¶vÈÌX÷„¨q„}΢݉a%TãK†ëSFFḞÍ{;iœ"6tˤü3_ ný⯌L¢¦§#çõèºÂ(Dû€}­¹½Îí®UK€qD9^Ò2ˆ6h…"(%oXÝ ¼ù‘pfüxÙç»`ö%ƒÐgÂù'ÎÙ´êa™=š¡ÒÑçšCãGSÙ¼×Í ..ĉ틾ö¬Æé;÷µJÔK X…¼A“Ó„“׌ݫønûÍÙ. BiLu 4Oõ2Ì_-Úoر4Ö<‡Ž[õm,Ç?å–þÉ;õ6LÅgUƒÕ“üm¬ø4±ˆá™3uŒŠ~ÒKBƒcÐLÓŠõœˆûmÿ¼ð{­Z\æL¦Em¡üõ¨¨±G:€I±'/4™¢‰¹(G̾{0¨Œ¤9´@ŠÏ.óÖÉšpšD8Y{nÞŒ €Š†ò@Î5¿#¹äCO&Hn÷«º•QOÃáÏ õkÄYËt3«¨}ìñ½ücÝáÌ=ùˆ@LÀÔ7 &]êÁ“ON6‚ íËtÈØQ[¯z&RYÀ oÚxa'~Ëî<Æ-0õz ŸîŽÔUD¢åÕUÊÇfýޏM„Y*¸¬I„‚²ÄŽïLBsd$eÛzGëÈd*'NÏÃÕFB%{ÃG’g˶[s˜I²û•-™jí ”4¾ã‚¡QC49Þ}jË>lÄD‚=gÁöv‰UwÒŒ×Ì‹ü2B_èúmɬ|0'Øâ`XaŸdw¸!®êZK’ð!Ê/̚ɉ´ðôÚ›¢LŽ!¸ÔÈ :3ª¬¼½%ø*ä«R¦¸mJK7΢׸®…¼ ~‡Ë‘*&WˆÓ*@†xk2õšh&¡­—D⺡ÕSÙ^ew:B>ˆêd¸é«µpúTu+Xfkâ“|û¾¦È%c\`˜Úòº ù 5ݯ­%×cýôæñT‰šÊ„‚žêê¶vãkó«JÄß8¶‚œÁ¦­žj)¨=!A–Ñ®w ]»š–Á×ì%eÐv{r|ÊÂkM™¸ãþWJ½ß¯ú¢9•ÛŸ,û:p‡ß¾v4SB•"oØ !­ª lðfˆ—€w]kÈzç©§Ð=^/^osZ›2 J âLv’°-âft^=g;,p’Ø€c¦³¶èÃÅ-Ú}ú¯[:z%ß›«½Ñ麴¡Êñ½AšVš@LUêMER(x¶¡Wòž'ÛN´æ7O¡#_õb¶»µ¿¯=^ÀŠk~›§Î}¸v”d1Er¼ˆHSt&ŸÝàó]¶dÝ%iuHDj Sø¹^¸*yl,ád¯T o¡õ»ÿ²Eù"£Ÿ¢-ö­Ô$† ¥ \§s †œùÔ–S”;ÜÜo޶ýƒX¥I´0˶bÊæLö|~($ñ÷§WþËÅæT¿¼´ày›-â¶cRD⺬XûôwãSjÌî?¡†FV¨C\wÚïêŸVžiO®<ÙÂ[áæâºi+61ÆFãË]óåcæúÇ”²X‹\!uä£â«4ÆïŽÑî©1TÍÚôL£J³FcsnèO44ÙèM¿¤ËÆù䚛Ơ”Y3ú\äNê6?£¡ý®£ì¥øÉoU{f}¤¨Ö°¸¹Ñk“r ËÄYdzqw!£Äh–1Þ³/ÐN9[®IÀߦjcQTRK=âBÜDª¢F ·Ysxþú-DðIk¸F²!Äóìd{i›ˆ`$68Ì©5ä÷Iܾ²ÄÒß¼id!Jyz {Ééá0XÜŽÔCx¿Ô¯èBº²<}?ßL »BM“ ñ ÷"Ü/ð1AÉÑ{Âô¢à;"k½51µ6d8,Ýx.ùÛ˜Èôàp‰¤ôâ‰Xàé—]¤ËÓËôpœ Kü;¸„ž›F6Féäð¦¾@g‰!쑈 Í92¤å.ÿ¯`V;<œfRLto-´ÞˆD’#‡ ÝóØß"^mÛÔµµK[su»"ä¤opƒOÃ6ôñŸ†•jCÂÃê Cvü2—ßfª2|û;[þ·ÝÌ× ÌHÙA•ÆÜ0gŠõ؇6¦N„ 1½è‡0‘G+ÐÂõBÈûwÀÒ+è*–±"%µ.ð·§Wµ§woŸœ¥šöuK{R+„ÌgFT%¡ÅlQänÍ9Ÿp”ä¬*#$v=íêUêÝ8b|m–‡²ˆ“ái'¡ç›:~8bcE átóXrF F¤+…cË´„ÅÎîŽ-\õÉDj ¢Jp£ËÑó!CÒÇ‹oc›Â™ ˆaSu-kõTÎM2ÜóYoï7Ïr A­óü¼Ýâ…ζÅuÁ6\°& Öüë8wè³.««BUÜŸâ|úÄ‚=’„ +¦\p–)Wé¾Ìçñ4ú* މŸZô¬è¯ys± áeÉN[v)ÊY£èSØqƒà`ÁÒÌڋ⬠(ñÖRÜRXˆÓö’±éËÀ’z·s‡ %†ÇR‡ûQ÷8pM9ÄX"0ïï Šñj¶à8­£ÃÇ”*uá²ÚÜ߈_M©´À"¢ZJ:hôw·Rh™WFÌÙú³& ¼OmÊã‹Ú­ö®)GðZ.! ]ŽcëÍŠ‡Ä5Êí{$ D Á”°à¢¡Èä1ØÏ?ѲYÏI’ÒUð–ƒÈÒJ¥WèÉ@(É…Èú”Q‰ÆŒ?‚=6ïMî{ys(71:ÔK±:ÇrQúW´ËW¦$˜2æ,œ‚êÄvh¨å*ܶT\4µ^ü(éÜo "€¨È¼§Ü$aÒ±þ±=å¨s›ÒGbŽSž8ˆ9\ç~ïÜHü¸•À-ßBwÛù ¹^ha ±yzÒÔTxpO. Hˆu¸ªF0‚Ӷꡟ™ÇÅ÷–=6Ù%j?}ð$l®m—’îîkìÀ*%šæh—Ô^ÊÀíq~ü•‰òü´8=mäÆn×ZÅÙ¿H"QlîžšóD çްߺoŠhìòŠÔ‘ã!8¦å“t£OP‚ÒÛËsE$+TïÂp•ȉ‘L=ÜšÖL1TùÝ8·¢œç°‘l†ŒV’­-ACÄ¥­ñU• ‡ ×í Ç6?Ä-ÿmµÑñ£`Aññ€Ý3Õç—/ØN³e*é¹8©3h¢QR©)j–!ûìãźóYHYZLjD|êF+øÇÉÙßðô@eÁŒGáoOÇâ±sO’ú©N!É%%&,C€jܬ޵fQÑ)µ;Øæª4KÐlg"Ré §–žNç“Q ¡ K6wƒýÿb'C’xPY|ë7d»WŠ0)™vÀ˜EšG˜=™3jáÌ2Êô–ðð¼\kôfsFÝeºût}:¹"lÝ©Ðæâëå¾h„B7Ôf§4reÄc›ž¿wŽœ\:²OÇûé9s³*{WeÚGÁÍ´*鵓¾¨¿:Æš‹õû¢ÛépW̓b¡g9U××B/„z^èÙJœFHÒïýÆ6–Óí7ÚÒ †•„¦Go¡1SšÓI(ý Ú»Lëϧÿ'E -iºõKYCÙ&¶Ÿ€¸½žÐÌó༦ÓMCô€Úñ–ü°ýCäJòMwª#ºW×Ñ›Šqõ·)†øÉëÚùL¤KiÃ>8¤IðåOüO`Ì«„ù”ß)m £Ï•~™Ý³â¦Ž=¾“h7„„«8Ìë–¾Iü5Áã îxE LhøW°pjèíìðºÚØ"s°¦5Äÿ©Hg#‰þùï£î)ü:CÕ/JÃ1ØoK93)©?¿ÕÊ&Óæ™ßáËDêôÆ6ªŽH‡0U§­R×àÜÍ>ÊEzøÇ A“GGHJyelúêºðÛ×zˆ ¥7}ÛƒBï¼€>.³Ïâº×àÿÀù¥v4 ³'[ó>vJë&UŽòº_w•ãè}›ðLed\œ$ƒVÈš\èË/¶¶vTè@ÅL¬¯€I`ƒmë‘q8'Lg[ßPWá¤ä·’A|:çûu¢9œMˆÖ‡: ½^§Q…~•öÿ¬-fY³-½I¸cìÁå±(~w0x-Ÿ½)>¸‘ž?UÐlíEd(Þ%ÃN|šƒõÅ<7¸èöÊlªL‰¦dΈ¤7Ch¿ð¦êDèÿmŽƒO‘<¢r® d>Ôl×D-ÆÅGɱËJ/vfùòÁ¢… ÃÉJW„2Ð:ôÎù)(q¬Å¯¶€{ÑFqÍ~`K­_7jת¹²ßt³Â$sïA¶¼/íÖÁ†%êïL†¹Øy³î©áJ{2s‹ºr^ã·¼]Ç´±Ñš…ê*5‰žlÚf}Ž/ÕÈ“•ø/Órfö>·*)¥}â.báC+ñ!Iý@ýßõ–€<.»wM ÃCªÄ%æ§iÚ÷ Â5špÁÈ&.| ÖäŸIüø¼L;i‰þçIK¡Ìâ‹ê½Ë* nr~±Ý1*w©zfS+R™€ª²Ø¾iÿC[Ã]‡»oÐ`|ÖgÔÂWj3•Kɸ^VSKÿ-å]“ˆ³â|uo‰zÜx¸úÒgê¡wqOØ?%ÕÚÃê0gÈjlÝñ¿5À–¼ Z×~a&t+‚×rüƒɰÍíÕh’vMI¬—çÙš¿ „tèɨk0E~´IäÌ€Õ¡I£#iÅkÌ.ïl9FÂ9Å}ï÷)R´ëEÿÄg`®dõ[þÕObÖ$^ À”K’FW˜wålciÀ§¶ÄÊ-PüN´ž\öì¶°±oD{Ô zƒ™í«âûùC ÙÆ_’ÁaÌ |÷®¹ãž(¡PE¹ñ{ôêïÛ|ÏZ5|‘›u 6iÛ’ýœ8îG Ÿ­˜d‚ír é8!Ú´Gœ¿¯Ì[ï§SuõSÚË8Ÿ.ëSÞûG õCzšÓ탲ª»\Úqþ¾|!„•–ôöS/e­’!sVJÝ fî^g'ƹß`RÚ}É9½¿DÂ0¢úïxÎ(ÝÀ °–vËþνÐÛPJ©aHûÓ »¾¹)ÄCHž‡ª(AFz¢kPãeѾCŸ]ë [>HÔ•l$Ù‰ðáî)¯6™uy;i[ÉÏAviùN;Äã· öù‘Xð"¢,…šB¡(KBX #¸ô'ëè ¶å)± YZÊcrOù>²û4Zž1™-;¤á“á“àìL›Š'’ÊBú¥†>”ßq|Ç%Í@x­)„Ã5C{ø¥ìÐ)ïÞeÉ…ADÁ á±ä§_kámfǩ⎌R™,$õ|0ÿ=æU9¦Ár1æu9,ó€š ªÄ|ÜNå"óƒÑ">Ä<ˆÁ/°&ÈðõPÌ…ËÈÅç|B%ÿÎk6ìdÎÏÞ ùÖBZ`À‘(ÓJïQ˜™•§–ù,SÄü‡å ×—±f¯\}F.0O¡üò ÅÂxH5ÕÅr¡ÑÆoCßZ89˜Y´ñþRˆz‡$¦}p†RCì¶B›ÙäüXÁÿ ŽQ·¼/Û|º0´|!»ŸµÅ1[ì7n¿"FÍ^à0‹õ]¿M=D'ÊR]r“6onâbÀ˜L­¾Á7c­ØäbT †ïw*!nGz¸ eæ2YÒAøuz¾VSÜ}‰±g—y4¨œ[@Ó¢‘ ~¢ôhÌ2áÏügå6bYƒ†"Å aªŒiôKçÂÊÍ”µwdëðða<¤™ÛPˆ¿6¸ÙÙçõr2Zçï4+Í̈aû·À9yúņˆ+SÉ2l°\Y”;wÖ“PJD§a>«ügŸaZ©abØ8§‰[›ÃÅÎ ¢¬E„‰áQìbÄð/â>_ƒžÒ–˜f¶Bn5Ün†yC"¬ä€}µ/V\b`Ñüz{7¦ÚZÅœµë®ÅàÿòµSߨ„ÄNódÇï[sTÒèeË%ÍHsÌ­j4Ç¢'g³´ڜޖRVDßnqà1ßQ“ì_Èb”¢:<<÷Ķ6툧à@Ÿê@“:>)ÛÜ+ضVüÿÔ–ìï{jbCâåYj”šJ+^.UWÐVm×­NvÔ¨vW•9sÚY áØKºÍsý>“ –’/½¶:挋­²}ú‡"uÑÂðSÓêÞqé)ÊÂ`fDIé³´0{£ž ‚Þ臮*‰ÙOv¾ÅxYq=b0bvÓ¯Iîn3`´ Ào£È•W•žŽ¹tp=ÁH¸‘´¶.Þ­¶{œ’Å¥UL3MqšÞ؆»žâåèÒ?˜\%9z¹å»”LŽ4Bú©v´<^þè/ÏL%›ê|vnBÏCLPµ¾þç/åFÈ^q<œ^6ôL‚;+¨Cvt¬á²!‹^½–WûU¹»Ûÿñ°Ñ2&2u¦i´qÕÀÝŽ¿%4¨[²ÆïQYÖñ` Qe]) -açƒÌŠ×yç?#ljoYÒúá©[b×/ú¹,ëd޶·`}Ù¦¼áì8k¯'Ü|Ÿ0ŸKܸ*œ$âôSzek§.ÇÒÁ¯Áà¶aG˜0ù³Ë^+üÉOF]#ÉbȵÔYÐŒw¿•“‰JiîŠ:,"þEùìÇsÔV”èOajRm@ Àϼ¸ªM¤¥­¥èS/ ù5`ÇÒ8†ßën–× «°Í‰ChRäÒ7Vë!HsxÞ7ù¾ªSl}*oTš/(jB&愸~HXzÙ&¾XŽôÕb9´«„T‘—ù¥Û8! Ÿ×ž¨-KáÕsÔ¬ŸX93à>ó²= Ã>Tå-ÿ¯?¤22|ý|ø¬UÛ©œ}µJ$`Z·ß†kRkÏ^YzíI¥R£{cUHB ß³åJÛnP·Y#†¾«œOöîÕ, n½hæq˜f[be¾nE3 Ríÿ ô"裷±ÒI?7ì¦U#Å ãE—›óóLþÒ|;Æ {ÅŽºmÛmçBŠ1Ê0ýúL9ú€]7í$]¬îPù¿ƒ˜÷XšZ|5Ç'>—2qX¹6æ2¥!äÞ,9ïñƒÃîòÂÄ1Àª#XüÜ+Æ© æYçšÐ'hÚ¢ûÛÈ4WÏO‚nýF¯4Pü Ÿ1‰üPÒ€´–¥_m7P=gFè:~ZÕ×T¨¤WK¼~ÖP§m|öŠörR!èGÀV 0ÿí ü†‘Ãõ<,ŸÁÞdxN#”i3³‰Fq·³Q55d›x!ªÁmº'ëï©•ª ,AT ~hÝž^6Àd"oQ h¢u†±È¢éf8ìOÇÁj ­yýïÌî´ö¬âÈóù“ìv/šSælˆSšÈ`õ•‡„'ÇdònÊ¥™ùƒ†RÊÎÿsxÐä&Æa´d6ña[¡‚iaÐ![‚JnY§GXΪ n(öí%WŠ Ó•f\£2•›f9jnxeÿ¢Ìö5¾&îó ªô~@Ê1v™½41NxOôÒá©Þ˜ùá¢Ù V¹{"J£Êž¥»ùHkÕn5)W *è%_·X]Õ&ì7öºÎIºGyǧ`3žáièMƒSdûd̰ôÔqc)Oýnþ‰É?#2±Veڞу}ÁÐb¾Ï¤ÑçÈYAܲ»¿Þ¼?«l·[’ÿYؼ¾U]·ðäb>¤Ûqàž×(eç9rzÿ©ha8™0D½æØ¨›*íqQk•ð’2RZUÛšËËvUÒW©|oL“&&z;œCÏÊ?CîÊ•zQðws€ÕëCBBNY±ö_v¦^lXü~@j«~Ïê‡];,’ÿ=Ÿ½±zlƒaS­Ž¥¹'mXÉêkíËÁ²½ü'ÏпÍ^›d-›ÙêÎgóƒ krG©z†©Å”ï Ù7X ÏãN'maÕ·¼ pd0A±§Ù‡Óµt&èp£`·›¿d³¥‰Ð-Áaådn¦õà™@Ç$–A¥¤ÅóJƒp~Á¼ší°Lóÿ Èß7hÙ¾ÜæÄÙ ÿ]m_3Ù¸p\ŵ½HQwƒ~$(gßû¤p&Û+£]ôxµe‘Uç94œ4‘gìsÔ%®îççrÝÂ,ÌË35º´³ÊôùinHi;^ù¯€Ÿ-kHz1™Õ¤¶Oët j¨AFÊлìé—ÌΩù( L¡!¸ĤnGÛw‘®sl‡Ï™ðÏùî‡îåèÚo»ßWYêµ n8¿å!¦1.»u.ªB|³xˆ}È…ÿ;ùÒ1°ù¼‡fÛÃV¼#ãð¼g¨Ä¼Wã¹€AqQª?GfCÃGB­ñí1ÇJÂ,D+…—Mª3â+b¸à:` 5œ ÕX…Z ``X=¸ž8UnwW×wHïûKÿ‚í¶­íÕx¿îõý`ªb3«î_…|åÝAX ÷˜‚ŽÀ}r¯£Â…|*ýT¾Q)âôº¢&nqJµ¯WTbhiÔ`ëÒ©¡[@vÖùXù‚gÁUÜr»Æ2ðͧu'‡mÝmd!" JæPzrdç|ÙuJ»¶Þ·põÎnðV¼•6ÍÉ8BSޏ‘cÄ&ëNOGèXLXG x?¹8Z=z™HYêÜ>\(¬ôæŠö3rŸÓõ —öàgÉKZY!¢oÿ2¯¢Bf²k«QÔâVɹ¿›‡cµ;µTKY†}rîi€Šû¡W¼žÃÑ‘µJA;+-5\r¸p½ÒÔàǰëÅ$·6³ä;Ø“öÝëI`¿`ÌG£V6'kø ð×X©|–+ äp£¡¤1C“‡'Í¢ð¤YŸØlF1膫25¶×ãÝÅ­:aÆx–ôÞ¸Êáéß+—ö•ø!O/4Ë[¾]#ÛtÞ].ên¼¨8Hw÷Tûg…„è™§&öã÷ºîù¹ °dN$'ŸÐÒ ‡Š?Ås*òF[´z/Rá¼ânÊ”„ª^‘”h˜¶û‘ƒãnlh™Ã9¿Æ±s"u¿Ó£©˜ŽƒèÀÇŽx‚Âo­èŽÃ˜1`Tã…Ù«S£`Õòuô*²ÝV³7©#l>D³hÕÎEksŤ±æ¼>*#M 2Ñ¢|xeíçàÌ™h“}‹£±%†fÔQÜJqǦÂ"Þ<þyõ!YŸ† °tÄ9tƒÍîŽbiZcxž&!†vk»eMNÇé NkcóëH®jLjCê¡évf,ÇŒ. µR§òð„5옸nÔ/”tÑ8niÛ³ô£>¾x&17Óµ]ªä¦éÎ7Ø2²ÄÜ4J™ÄrÂçÂóÓT?p>ô¼VtøÕホYkþqí¯l?[Y0ß6aÎqÏ'ß¾àä×5âÝÎçØ®ãÿ†ÛùV.A¤)Ëz®šl½âaj?8‹ØÖ›@‰x<«E0餄 s˜ÑšU_”XHrïô½®Ê½z ó ý¹'!Iá.¾†{O‚¹Ëû[ÿ©ÔeÌá,m¸*]úýÇuØý¹ây YXî_u?Îl£CfHÇ&Kâ…÷¿\´†@¤#ýJ|xn´u¨?¥DŠIಊÍë†Þ¤¸™sd‡j5¸ù1ga³Ï?ly]0ëw±¿X+ña•î tUGÓ°_ùå©+7ij0næ×Ý`ÊIv¶º¨œm¬àb˜÷Û½ØÞÇkj62 oŸÐò­:#¼´@ÝZ9ŒÒNdÖÚœ¨ßP†?Hä …”[ô{Wƒ8\ ¶ ·K PÚÂïÒ(.^§Å–T~çbsN+’j œ3¢ú ÝZN>‘ÁIVœÌPC’¥É÷Œ‘íž ´‹PÌÐÐóø~zày>ïÕÞ·‰´ÛªÂËþF®ŸÈ(ÓÄ#bª&)–¤!‡(=_ˆªSh €ÐÔÏÕjTþ[,ds ktáPówê)Y¸«ì`%í4¼;—D©¾~T9.¯e+N»V;{ðèSô8#ñ5´ÔÔ§²¹©äPSD5Sš³xv°©N$*¼²òî³-éÖÄe–§qÊÉüß™ãlĉ-K|ù ¡*œIXgˆñ0…ª˜Ž¹tbé!‰ÁGI0¬=˜JMÐPx/fˆéCòZÙ¾˜ Á+‹Föš[»R%ˆA®¸N8gåikåf&.ÐÐÜêXþ…7gš1¿Ÿ±.m£1læÌÄfßÚA´¸?¿û^£)è}ÕÌÌBobQ±D˜¤) „b`x«Ào)“>n7…¿Aˆ-d¢³Ð,l åœy ÆéYáB›ô÷ç~d$ÜIŠ¥"qD1²fŽöYìI¢RÉj˜‚êàE^YPÿЦVG‡ ΋X´7€YÙ ! ìÜ»JZ¼*>JO ‚pb$°Ð°üÄa‰aÒzÂo3¥VÎz¢¾jS¤›é3_¼gQŽR8aÀÝži!ÿìt„¦ÈO¬¨çV2é@NÄVC7i8ûr˲–.r¼ 0†Ž”ž]Üú¤ÀÎjÕ³$ä›Ê³‘B9¥y|¯G²U€Ìs™¬¯Ó‘2F7‹ôÿib²¾s¤¥üDA`x-a·ÓPcj¿|u ×£ÅB¯D0ç“ÍÍ3j£³ÉÇîœ#öø:§]X¢ÑKX]¹Î,nOù¿‹Yœ÷ÄDꜯ>°Ú{7ì=¦þk3 ˜Ói¡ÙcUYüÞ:X*éܲa¶ó/»\Ã{)„ÑJˆÞp§Ýo4n¸ÿR Ã9vÌÛíÊ’@l¦ $(¢Øø;ì|𔳄j?4>)Z”Ð*:bJç^dnmS¹ wHU:yÑJj±$¿‘œnñ),ÿm:: Ðã:ƒ3€œR¾3®¬MÓ.Ž,à2<$HfÔ›p‘)$‡æý‹ÜØ~»6WMMèUÔÁ§ó‘+C~øf5+Œ3bBšE¬JA5Êôsèpóo™j¼”÷WÉHŠâÀWä˜ÛÐÖÜÇXÁba&î¥wÆ'‘4?Æ kÏèÉ€(yÊ2’æ“ßìz±¥w± €=ö¤™ˆÈÏ[)«‡¢˜t7Äæ¼©‰õn´ÎÑ£ó=©çë6„Fnã$@ #êúƵÖdUE(ifyó£zAÐÆþeÍ„qT¸Û‹º0±±ZÑ(%swnŒG¢`õc6{ Š(ôÌ8ÜÏɳ÷¿¢ïƒKR<ØE#fËÕ‘à¤\e«À‹ëLË|M®h}Áô“En®®„ %{Ï^e}z¯Þ¥à­©RsÿȑޒJDÎÛøHg<¡üß#¡µj'oÖ>ÑDÅ×Üêõ{Û~! ¤²t‹Õ U°xb@ûPWHrÿ­õ½·tðÒíy3JeMs@¬Òèäï4`éÎÿgç&Wí™ÁXWàœ› õò–¸÷¡/)öYêÚb¨E†Ä¬+ââ±ø‘Ç™: H†QûßÒ¢ËnM ×®ÍvxlCùa¬])ZÝŸßicû u0¨ý×ktïRQJRè¶1z”ÙÜåÏJÞÆº›Ûö6©2UO›\,æþÐ3ôÅÀ¹ž™åòó}¨oÛ›:¨Åñ6%?î«‘Å ¼gû!(纩š=Äoíó<“·}9õOß 05j2…+”UìD_gaÊè.#Aõ°……aZRíPÝÕLx•XÍãIoïe5@7ƒ— ¶¡‘§ ÅëYÂneKù»ÇÒXôQYZí;l „º, Ö²òÜ‚)òúêvïš—CÅ0eÿ|ךYD¦y¸¾>€¬×8uSÉo·}+enúAÓ ¾Ø6Dýܤ8é܂ﻣNˬÿ/©ÀéüL5¯;eBs¿ŒOÑŸ•Õ( Œ5–kŠ9ðdtíêfõH°°N>rŽy*èP3KRãE Í/œÊ–˜¾'z‡&Œ»ä‚UcdÜ€Áv¸2tƒ;ôÖÊ¿·îˆÖx½\VWJ*»ciÚ(6§côÁÃY€À½rPÜ;9ØÂÅ"ÈOZ!å bV‹HH®«‡M>°pWƒ\FiX唫g¬\ûÕiÞt·€ ³5wû’÷ËÀº”å`g’[ðŒ—¸˜å!K¢œ©Aq˜_-6çS×Yižn¬íï"³‰P.¨c¡‡É­iÅjݹ°<¬Á—ë—_Lþ©¥ìyÑàRqqÊ3Nt± ÝîãGð[ ÄõÉ•*Í]F|S [רK† ,›nD¦¿pu_–§ž1¿“ù#óð|[¦†©Pü$ù­[6ÌqçU¸µAsvšØ¦@;s{#°Kq‡ú’B¬ãÔª7Ni½QåìºÖ2áߊ´À2c²^4ó séUŠÄ11<¡{oëïL«Ý8p4¡@ÅöŽ'p2—[!e°"ßéu Ÿ†(uç²’™‰÷*±£É ['DÈå­p4tIªtÉ;Þ¤ƒ:cO΀×QAˆ ¶¹%ç]Ç„Ž¥ïk.´ð¾C™Õ3#åçf‹àe„ñ.E]z®‹C!EOÖEB®m¤ë¬ô+|í%žwÄ›Æ6Ò”iÀÆÝ|»u- 0 ghP洙߹ØÚ8Àðí /¢J§Zñ®j>Du¹^$îDZ¥›•è@b€¡£ ‰)x+ÐÇ”’øÚ¦óóý5ûx%¿ƒEÍ‚"ÊÞ€ûŒf¸¡¶&Zø¢ ¨¤Â.e£îùÇ> end¤ h˜V[M~’/#œqëEàÇ4>! ™'‚ë9®‰÷¢>$tøólÅñ¼½€aŠ]f—w>ÁÝLz¹gçœKãÈîÕ:/Þ± ËCu$š- űÀú.F«#¬D]PvBŽÜ~°¹E¦t-VáÁònÙÕÑÒ;º~=÷‹õÚ`qYmZñôV&Êš9Øè ‚¹uÍC󍨱´_'º)@”RkgCÇ˪Þ$ȶJK=v¡éòpC[Z‰–xtóOT³JŠî’NŠ––t0ªL*‘ý©«Öä™ÄÙF–;×÷Î?ú5"Õæœy‰‹D•ëI“ãSÚ™‰hTy<ÉúMÆœ}¼KRÔç¾@õ–ŠÕåÛ®H½ ’8¥yÁs˜@¯_Å÷Z<åbó<#,ºô çÛ¾]nÀý$þ¬¤Ô-´¾@:ŽhÏD›¢F"k¼ò0ÁX€ÿVÁF=à@'ìGnW.]žáíÿÿ•¦Oõ‚vå±ɑɭûtåm„³vNw_ùA‘C¸X—× Ù®¦á‘’™ 6÷&­ýT¶KçA †DD>XDVk~ˆÁJ«yÞêøœk2T¥?0Ï ¹"@X$¿ [‡#¥ÒEXð?ð{_ÊÀh>D®e0™BnÂäÎËÂìNo‡¦‰¡Îü7xiI ]Ü‹Ž4Á^ ÐýX•ˆTþ¶|ƒs¯nꈱþdkÛ\¥ö çß„g®Zâ]Øna)dU¸ÐriṕN;s,QÕà2«× €NÆ\¾¥E@õòÈÎ[ŒëÆ­H½%H 7w‰gÊà"æJŸ7PW&:7Mþ2±H§þ_Pþ>„P¬´t1ôT…8¡“®¸R”ÁÊd±!á îž'ÎŒ†iíåvåÚ—lÛ‹{㳨Е‰_$IRñ5šŒË¦=.;N¹$3~¡mr²G @;yGeô„ʶ1¯ib‡[.ô> KΕˆ8w– £ õPbZ×IéãB³;L¹Ä)ª£º+ŠDù‰…)M¯DuáÚ/‚ñÀ} ÐÔ­4 ‚Ç8¸dÑ"ðEb0»º0õ•¯ ã ^ˆVמ¦a ÇÉ6ؼ d»áAÂûÇ1¤ g3œàLì-QÂð–y¯WÉš@x®"ò–:ÃßtrïqªÀëùd)A½Yi4sગgj¾®þ°51ÐÖ dÂ.îÞ;i#‚0YDq5b’i’Û…XÌ ¼Ê<~_Y˜A½Kèé³ñuƒ[ ü èÎMÞ¬UÒ)i2@7~_Ó‚†^¼£Põ¬N&»”ñ–ço!Di÷Œ‘;^»™No†Ëß°åÅ@Æf摇„dÂíwvC¬û=MHšnÎ8¶ÚAl(2äà' o7Xù÷‡òœÚ˜κûƒs£³Y.ùŠîÇv¡yÞQ0W8àZA ¨b˜ m\ ƒ ¨õ¬¹%¹ŒZ¤y#˜7ûùµd×grXzèic¹|dI` Š(µ%Ž[3Ùb”ÈŸÐÕZîŽB"ïoß̆2a]¨, _'v<‘¼:(  adµĉðJÌñðd:ŽèJ\ós<@©gžÜÓ×Væ~ ÅkUCål•ä^fYW% LJ _—Ö'¶½Ù:å±ì²Ó#¨PpANâ jÚPþ03Ãmè'ÖÂÙ’òíÂ>°øx½k:ÀÄ4ÌÐa\!Ú¾ÏT)IGNMÄéðì½…òÂÄÁ4$÷•ç7ŽYõjûü¬ú–ì»W ªÍšù•lÊ®ÐEJEº(Øéçß+si9§¿µ—%¿N"j[Lîà£ÃÖ-áÐ×cOËÑAÓöÙçÍ($Ú N0”’†w@×’,° G1 ïÏdõG Z ­Ä¥Ê·À…SíÅŸ—»wÀƒ.L~»ù¾=¾h°ÀAð™2‚IJ°ö°ÒicyÍ*[k€Jê€$MrŒT/˜Öƒwb/sNqb7|ú.åîàåG¯žA5F@•sÚÂZÒXö)ÞÒ3‘oYȧzú{ºí¨oYE:ߥ6óULj°ÊÑýôµ`ú èŸ&–p(8#v8뻀V/‹+ ÍïåùL 5ÈQ+ŒÂáü A|‘H ÈüyëX·3ñ±D¾·µn#U¬äM…ú?‹çb*l±U¿þåÚE ÿÈl1µÔ/ˆ¡² 2QvAÕMÙº›[†¢Ë¿¦Ø8]ò ­4´¬LUUžýîLø°°«¬4ÏÐÿíkf7ö€x)Å­3vÉ–±Øƒ=©A­2¾¥òZõž]jVMŽø0ýO\ ÿ\¾pltù4.¤æó{Ûl C`RŠ ¿é‘—¿Jþ§à²_6ÞLÕ¦‘TQøØ_C·9Èב­YʈóÐtpÉ|C#³Öüaœw·.`AÚRýì5çZp¡a<“ÿx•£˜a]ò±pç[õÓÝ#Û@þ<››¸ÜÕ”ÌÿýH†±ËšJšVÂ(†]ÞÍäYèûœ÷=*Ä+à¾q×¥+Á±)qÜ&_kÓ5ÆoiÝé©z¶ï’ìb¢Ÿ ¯´¦þr¥h‘¨ÀôRxúÓ¦ý¤MéÕF°Ý‡qÜ]\xÿmDVüK õJ`Ü|èM„ÁBK1ú‰÷üMã!F«.Üþ¨ZsHçyâ»$ºv¶?åÆœòïO¶jWÊÂË8¶ÄDî=ØÂÖ’Ù¿‰…\m¹ +Ù–wç9¤©_Ÿ}™_²mc»¥ÕoĆ)¼ÆtÛ"nw_a  ¾óÜoø¨YVd°¬*Gú /i·eŸyOlœÓZ®lvñTíÏÈŠ,4¬Ê™×þî Â søù±’xc8_Ñ MnøÖ^žtá^ÊOÐò(o@Â}o\ë„ä„­|gß.ÈN{Îj‹•—ãeš]'ÅÓ›èAÞÈæší˜u?Ñ\ êÚñ–Ûø:ãØšP­Ûø‰ã`RÆ þÆ—Ï9” P‘Ÿ£Àn¨Ó©· ~æC(³ú¡|S'°KA5ú1Hþiv›:C'9~Z0Û3Ÿ–-óQî·@¼IÈÐÑåJ¹óGW‡mÆL[: |Y_|íô[6gº¥ÇίöE‘Ç!ÙUˆtÂà[êzvõRî›-÷ƒM‚£ÍoÌ1ìù5–´7ʳ“÷\L{áIÝ~!FݾEZÉjÖÇÉ^kÁÙ«Jpþ£ÔT5dÆÐhcý:×2f£´¶›ê÷¾KNâ¿®`‹;ÇA  îKG[ºP\¶Xâùµ1Ü™Éf‡|-ïÿë‰Ú+ÛßÏqŒ:ó£ŽpJï"û âÓÐñêóØÊ' W9ëf]äöŽ·?ÒÖÓÅ8²†á4è’kÕ…2Ðø"[º•ÒõŸÆ‘'êÕmÂf¸áÒ˜¤±W™øWÛv¯3»ªx²5€ëËÿ¬ˆŠ?‘£¬¬„jÛð-lYÏ£CcuC" :èñ[ è‡ÿ<‚Gqí|"ŸPÁIA·Ø“Ý- ñÙ·JÎ?’°\lÝŽÄÓÓÛÊÒ¹;ܰ EiDŒY²ØÍ¬‹'%jʈ¼`B $‹ÂÊf>Å,“fºTI§§¢S[™… t(÷°ì«»3ÊÑE8“͵‡Êß)󜕩rú¾¨F"*&\ÚÖýÇZ5Ís¾$Å ™nƒ4Û¡QnA‚æ„2ƒUÕ‡8sn—ý]ºb›Ü#iªz‰ÔP‹x˜¯Ä.ËD°–:t˪QP?->QŽ«ƒó[ÇÎ î37›vYoOúb>WöðÖ^Û1„¦Ý†b/θY¢ ¹@5d ƒ;" Ò£J¥¿æ¹ÖÞµgæè|ÈDVô8©@}šæí0b€ï‰x8óÞ^º2Û|rªv¡6]c½åˆö ³\°<œg†Ð! .šl^C¿rùê\4ŸÇx!\š÷ˆ=2è\'¢L5Å}æ*b~kθZJðŒÐ¥‰ù¬ÛQ.cO ÚÓ{ÎÚñ3Áƒüðj§NÄ~ýþ#£A@"þH€ý·÷â®a ¼<¤½G":¬è¥M¤ÜÍ{µ[{ÞÜdúgZáºÛpï~MèN¯yZ½Œ7;Z K€âEËÙ{_]¨¡d‘,¶NO,I5ïË)I}àðÛ:nË1 ­›€Ì¬=} 2â-ÝQÚ!åu1?a…wˆ¬LdìÆÊ±<õQŒ‚ãP@½W¡Ñùδ¬`âA»ª-œü4Z'ëu|ž wÃààžLŸú€*Lz,·~H5 R95½ 8ü }þ•|GªÉ6õ:k$m3V‚HgkÿxÜ%F9œ*2R+?¾üÛÍ¢´¨â/q“Ç]R2®„/ˆ:mÜøþüJ ŒÈ!%³¥nS²Ð}—ÛË „÷46…¹HÇŽ)•ü²tß…kå¹õxa+î×*$ú²×Åì°æÓ´†6V{†ÌmA7ä`q€L}fÈÏô·~,ó0ÎhÔ£-ýÜë"ƒÜL §cÇXN×îýj¹­ó %eu.Ewx²µ7BKòözîPPBByºW&zIròÙt""OÂú/7´^IºõuÏÛ'Fäc(uyáï›=aD™¥¢M ;†¶•@Íî¤HR¥cfTÖ®u© ¤´ò¡² ñyãàÏt·`ºI±mµ­·ð¤×ÏîqwØ-j˜§ÖªŠ ö,·ü]Uã‹§S+“Ø4ºÊ«S°´Ÿœ8Òó/Úsõ6{#_SuBº,zEº- ¥´¹ƒó™'n÷ŸCÕ,ŸÝÛß?wÛcn÷þùÏ8‘È𒻨1ñ×*ýê7{dÃîq=¼‡i9ã\ðæçv<ƸN<:*ùáÖo«½62éÿ4|õw«,ºˆøyœ3s#ŸózßúÛ[Ã!Hð´ áóþRGÿGæ`ßÈ#ed¤p“ó’™ÜÛ“¡ñëÙÂêga^l°jåÒÓŸs,ëä]m²ðÕ‰ŽñÔ‚CDñrzpÇr,ûî°ÉÚõ|º«ÿ¾Zo¤îëg܇ª§R_¼ÒçÂßÛåÌF΄£¶¥s HÏ•Cö0ú}Dçhma‘ ¹1šÌØÆ÷*‰NÛ¨#_J¶g€ @Ý¿-g528Áà(»À5PŠÏÄÉ’cš"ˆ’b¢÷— K3ÕMgwí¦ ßáf/Î…1B#ÿÿ2qQRJõ·Qb3z1q´ô-\­‹Unn#áuQ^(N«m…èÝ1 Dû™Ó;KÇÌ„lCþö‡ºuú,†&Eº#óòŽ}nk jw“|þ|Ýriâ$$ 0“/„,t„¦‡¯-‰ÖÚÕù"ôOg¼cσ<©¤¾WÃh¥½a0]Ñ(€lúŽ%©kQ¨d|àÆ¹D ó¾Ø×5AJÀÒž,Zy\ÖîŸ/¯Ÿ<;²ÂáVú"Ê8"ýWÁºÓŸ4„ƒäº§Î°[PÀyyh%u‰_Á1ù8æÃPt%_·ÛÉ»‹8ÛùeŒÓ‹ÐVqj•ù9b9’zL ¤ùŸ¯`gãaÅ,÷J1È2ó.XŒðØ)SVUáAo©â<ä3í$㳕žÒîIÀ­*Šm;JæòB ÀÌ  ¤ߨTÐ-lÄž9a6Ë_Š€0ótdRéqë€Ø¦ ¡QÇ®š¥%ÎÖ6Ww' Aš;SNp““üÍ{uÁd¸µåÈlápíwžWÒ¨B¯y㟔‡ä‰~îãì9£Üo9Ù'ŸAƒð{© æ$ßF¶§5úœp1¹É{HÒ‚NR#×–) G1KRƒÊ±mbŽüVFÜ+ò޳¸©€ÖÉAÍK‘$ØÿŸ|Yâ‡w_Q\™^“ÖÓˆV»Öº`ƒJq&Òo#ÿsɨ‘´ \o3‰õÐûžþÅ]³5‚sqïÓ×À…ø‹)sIww´.lq-™ñ…Ô ôoÕÄà ?1M‹‹%./Qºm Ã7€£²ÈUñd±MžñÂÐé/Á¢–Ë3Ó=2šOüð‚åŸ6µ'ë~è‰kÔ5é„ëe€š]ÅDÿk.åÐ ã`X½Àêù¸‡z£cárÔ:ÜÔ %(ù¼T½ŸyŽp>^Í’3ä’/ÑGšXsÄ8%BÔ¢ÿÕ e¡"¡±8â„cúÙ{ó I½41T •iûx„>¡Ó7ñu}|€>µ´é:¶¨²ŠÕµhÇÚ##ôÒ_¡›<}¤TÕ|©˜O+FÔì>àlT5ö]B>ÏÄË›-Á¥C'í|¡°BR [ õýÚÔ0fg§ÚfP*MAÎ,òb 鎣© qèpå%mJŸ¼eÔ\3®)²šF‚ᆈÎ×£wúY—‚{c7ÖáS¹ý´©+[ZÒˆýZÝ“yÂeûZ—(ðÏ­bn -F’U:gÂÿ±IÒñkøu‰œS "ÍcW!øÆ‡ß»O=‰zWºÿ5wþ€KúÓ\õ$|½¼^`"+xÂýPh*C í >#/ŠBïJö‹¦²?Oá£)ÛçΩÚ‰7ušæ"äéf“£õ¬áÚhóù@0‡S©9)(6 QÝx<]ß߀.K¾ïø—vÎ)Á :Ò»0>I—›30əػŒŠ)ç÷DßÈ•ÿ@>¼9VŠKX‰$Û! ƒTn¿$nq‰¦ e ’nX¾|ÊeâÑ?úWëü©ìr=ß.p¨ÌÊd&=žà‚Á(a$µÀ¶°ú!Ö{Ó†|ºvá# ¤Ç÷÷|Öfl±åU X¢Ã•°D8*$8èȲÇa'7âí /™lȺø®ØÀ®ˆA”÷”,0Ų¢ff[W#=˜uÓGÝó:¸®è™dÄQ"M‰«Á°â Èq¦/äëq|–%»ôZªbÚÚ ÌhçÀQ¥/µÀd¼ïš+‹(éZÚ'æ1½ýðb%kq†.T¦Q Â1µÚ2iâiôœ¯¹±ƒ¡Oú—r+Ÿ½¯fÌÅ}[ÈçÌÇ bü½ÿ})õK͈W’Ë‘CÙÄÙ¹œùžvך•ͼm¡¥ÙÁ‘YÊ ÓžšÑã²Fs  d Š;šúkßín6Ùâzï„•Š• ]„¡“WaP¿‚‡ù˜_è3ó“mA0¤¬Dð¥|pËVò€ÎZeÃe¢ª(«É'lª‚m™`ÿ™ÚQq3ótœKH$ô=¤Ï[¤’/chiòf^ç>8®¨‹fÎ2 l :»&eëq"k2·>D•ÚgSQ&9¡wØyì eŸ]Ûy‰QäbÆše!tª>÷¥#ó´¨Á‡ë€2y‹ÊÇ^ÙMKz‹jû5ÿþÙg6R†F Ыnƒ}h¹ª=JœSä-PÛ쮜÷¨ª ¶‰’Ê|¬8±šúû±V¶ªÞÄ2¥kš"ÝL/s=þ}ˆóÛàÌ÷Ï6Ûø’pÅa…ò¬=<{l‹ˆô§±/âÀ‚ªùœô’èy©§n³ô`Q³w‰g–æ†BÜ0üxjµŒƒ!<Õ¦F1 «õw›écûA¶a#ryì%" ø@+˜å ~žêïójl›Ö©¬`«9 Xò>…æ•Z÷«´ÌŠI‘›PóºŸÕ1j&>ŽŸºâi¨¨-.½;;Çì3*u+—á2ö3`‰s÷²Ý·¡tƒ)ë'š0¢asˆCÙW]éU„ëøu~€_¡ï\²‹"–|0¶¯áž•¹ù$D¿°Y.^·`^ߥôÂy®éþfú<[¢åJ3ÅØT (9 | vÊ­Ÿš6TBT›êùqוžc…Aý“«3²f¬öUø³°+w¢€—­Ø$S_.uÒ‘©ìsg¦“·¡>âúî·ÍO£Õ¹0RnÈ©\IX‰J wÊÏ‹4áŸúyr>úm䱫 ÿæ¬Þêg—fÜQÏ¥BOî)J7ðšz¢€.zý«l sPNÃÙÔ¾Œ6k:ÆØ‡‘?¥@{©¨]:TV¿žèׄî´^£dÇåæ¡‹¹ejüŸ_ÕsÎ2 5}~MÝ£ÿ»M,'btI{<>:€­¼lg¤jžõm‚½[£BüküÅ.q>- ²ž5ª©RÀ"¿þÔ¢âVàhJ=­Ü ÐdÇ‘0_è~DGŸOÂ)&w€u$ß“%ݳƒo_E}ßK?[Çh» #ßcÿ°kI!{9¢\ÄO®ÛæšO†CÔ²~ݽX¡«­"¿(Rj%äË]ûœ¸ØÀY\øÒïø1e;ŸUÃÌÛ|£m!Wg¹1mQB‚mÝÍÛÙr½à7Ùÿ[2-þ´&4ßv-5H»Ûi€é¾ÏÉ{<¥YïW#?ÖŶàO¨p•áÓÒ¾^G«|-:7vZ©Ùä3ð@ˆïÇŒÞÛ9þÜw»eÙMàuмêè€ WTlöüñjÌ_D€äÝH§YÌÊý…=i#Ç?€ÊÏmX‰`A÷”W:‡ãð;¸Në%‚É’½Hߦ?ø^’Êí6 ¼3"‚âŸK ±,Mcs#P¡£¹ŠŠz%p _>0·CÒø+öŠ(-ÖìE²™©z3rç2\ø‹P»ÏÝcš`Î~æ–nøÝ]ßî£9*­£S±‰:’UÆ.´©ÜU’Ìì˜WBIÌ®0×Y wHŽ¥öœGy$X2Å#'ömýþ…8a§·ô²A†š²XÄê©™c±p˜-Bg+BkNÒoÇèmü\™½œ©G«lê!Üä,¯T@9y—£e·é×(÷ÇQü\¦!]Q~îøUù"¿‹¬„Š‚¼!ß:h9e 1wˆó‡ A7u‡•K&uMÉ”xBî7K¦ÓÊ7Õ&nÜx•x‹%ä'I\ð³ß›<¢¤IƒnîÞF­#ž=yñÛ0£vóŒ‚]y>ý .7õLdß6Ò¤»¯=zV­¿ÉÑ—NÒÏP:/N<«xK]QóW~Žœö¯U戲<§EâV¢t¡`Ö»£>:&bÜÚ,LyÙBKêKNr@É{aà¦,ïoŸEºDùO6FĦsÁæ”0zñžîó Еzì6bf__Ðá•Ï”£C uöeBªTŠÅÏ£$þmé²ýÇ_L¡*âÀ•ÂL¼Gj™áäD̨¯¥u±¯–OS!ï_~ÌP tä/x)ä;5þ뤙iíjµ•H÷À\2üÀ¯[=‡9€9‚õ#`Çà·'šœi¦º‹Ç­©ó³ìÀ^axŽ”íJ€©/JJeŠÌöbàî‰ô¢…3ç¡¡¹ !©à¡ò§ÙfÇh»±ˆ®QƒË¢@È›EÇÇâM¦Ù€Ï ‰Öš&åZ1[¡\P€¿œ-܈.C£äDq7ØÚ‘òEšÅ ÿéäP夨ê–@\ý™V"ÇqèÉ•(6§¾ÆjYMNmW=o_¤´àE v>‘õ }C´óH; ¯²OML2.BQÀµªKÖôÍ=\X/"i”4ã1òó&_A‡àyÏtü £}†$Æ2¥k2/){<ì^ÅC2~þ¿øç­¼Ÿ=¯ËPPýǒÙfš†m—ÈÓ>ÃŽE“È Q¥•¸l&â'*_™ƒÁÍL"4Ý¢ #•¯\°ƒAÖnDyŽ7ü\bLØpqæòÑ!¯ZGwÁH\>†§eÌ‚M1ÛZ£.%'‚ÄY#Á£¾REb°‰<Þ–@7¢h1“ýsÞ\ùªŸ×0po¼‰qb:ÃbŸa­›@ÃÒ;a[ŸH\—ã# €^~$ü§;«dÍbèB ú¼£ÜDzÓYþI{L¥jØÎ®° 8cp¿q—P’¼‚ĺhw‚•…lN„eŒüy\¦¾–Tבð‘Óº^‘í¼âžÍ–!ºå~ùœ¯ÊKÃáH.­·­·‰‹õËÇ´\_B·'ö‰†E@¸h6ô-zA²ŒÑ·¦_[î, ®͈—Êê’ºúÖ‰ˆWêȸŠ¥`¯ð°K]µ’ñ~ò\ÌBå¥>8^ êo¼ýÍJÂ~ U‡‹éžÝKm…cR ˜ý^jV –N_‘µÖ¬°gÖwAàÇ[M-oó ö¼Ñ¶Ûš3Ì«U&9‰Ex7)"äf¦“×>»E»j‹ 3]³3AŸ/Ü #úu­±z„.ѽr<ÂÎŽ‚¾(£cfSžg¡Ï™ÏvžUÕýSÿÕЩ¸'–†%DãKÓ¬Ô©Zqc’Ø<¿­÷Ô   4·솷´.§¸Àïim®lVéÊc޼½£ÓlHÆ3ÀžÝýÍ“1Ð(.*oœ< ‘Œ‘Êaœ"[¯ À_õ‚2U8§HËR45P±6J¡Ç’Oð¶* …U«m[“l- ¾Õ Ç¼yé}#ϵ_Tç·ëè©Ó/=Î •ö:‰$eSÓrXï…H À)Òü§gù·è}:Û©AðÍsX¿ ]6DV›g]ï,µ­V×rõ~µxÓ¤œì:?ÉDƘð.‚>ã3ûT~>ø †×+?‡ÂRXØá'Àˆ-ër¨…*ú½v[ ‚ƹ¨û*Пù·yÕw«Ð.‰3Tä2ˆÚئÃ…†™½6ý„þI<ÓòŸ:Ø€¡èQ ´ì!…KÁM’3  7¾­¼ H÷ËpZ£ ‚÷Äu Ê%AJÛ¶V¬ŒTÍî—ýȱ%¹¥Ìmi¨hdðœüó¹±üJ|gë©Ò¼u¥4ÓÇ:f©.Wy¾¼$0ÆÀˆ]0Þ¦„v ¨¤‡Ä¯Ôà.`¶›Wxª†>ÏÿÉ縇íƒ9ÇyâùóQ×øEÀ ~—)µÉVêO§kE›Ð÷¨fI+/Ñ”ÛF~©Êø?äbÒ/äJëÝÜ;3¢¦Á@±¦fSGÙÅÿø˜“[ä‘¶ôû× o>hýéRÒ68)"wø¶hZQ)|!ß„ÅóÆ úß¿˜›þÕø°¢êñÕ™ºõ.V–Ú{[å:»¸ç½é‚áO zmAÔ5ÖU-ÈÒG^ä'YÀ ð‡“*„,æ ²+¼Íø‘òZ©.¡•FS“–ô,.¨ïEvQ,IM/±x+1|¿’lª”2oÀ4êpˆØ_¡] Ë%¨<‘»02;o} %Cv&‰AŒ7½›ªÞ¤ú·iBÿ䆞Ð×ÇOv•uFb˳ãF&ýÚŠw1ÿc#ïhnÅxG–a’¯L³±Eéã;#Ú[¢¿à9~Opb*/þ tÅǾÍ{ÅWÇn0»·Nó" 8Ì¥`ÝD‰K„_¤è¥· Ûvñø˜–™¦O«¡’¿Uä·nÔî‰A«ôMÍ»Éör~ý•÷6Qbê§È^0pîøu ½ŸfÒ òXÅs¼¾À|âKP½@¯iȼyã%Ò½ÿW½>‚b’¼%@/’ˆ²”ò¡BïÚÜçØŒ†.ÏŽT’ã-2‰öÉUóaŸ¨ÐI$¬°S¾²ðᢡ}Ç>‡âk7vº³—z¿ê$8'åH&”Kfjná£û¼%¤î4g(ã!,ØØ«×.d›`”y,„õ¨> °û¿xÏÛæNµàÉg Ü.Ð[· '|'–±VªHp©­¨ß§«/A÷'êU-+gLt——­OM€¡ ãKÌŒõ<0O¯„3¯/;±ØE¼èÝI‡ñV JlLJèÃ]̺V0ü Í–<\Š-%¤Í‚NÀ-ò™ÿImd¥i³Ö;ëòjtF¼ætÿµ®œü¹NNò«[½c¶G9ðj:›¯F†é£;bo‚…†b.«õÈ.ÇQ¬n»-¬\Ëè©}†Í&TÆ´. þt! ×+ÚÛý­ÀÏ~‰ Ÿ+£§Ž^6 Œ½t 8ðq¾@ý®@üžÜñÃïÍõ9øÜŠëèñÔÉÜZ™O8G•Ÿß÷TJ.ïuYX=~³õ¼¨È¯ÇßÞÞwÛy_7ªÊ ¤Ï€Û°è—Á[n•)_MX¬¨¤È^S¬Ä8qU†ì;}~\ š½—z!…›ÞÛluÒn™C_L( MÞùèH1¤Ê7CphÉÁ¿uþÌÖÝ©læÂ€@úÈ·'QnÂèW"N©Îè(c?ຎ$/hîy7D‘™W EåÛÂ1ÃÞ.*ß~“ ¶ò}È”^!?ß%­#c€a·ŸÞžbÎE÷¿ñõèÒ©¦—6>•]­˜“ì‰ µŸ/<< “HL ‡"rÆ+졃2aYÞ<9÷'û]0 Ù ZQZ€– AMÀµ3ê3c²õìÃñß¿–[êM×ø«„-•&ö([Í%ü§¶ÚíÅ´ÊÇ^µžÅò\úèaŸ—ë÷AàoͨšX褜²oí ³mõãOI2§5²®8€¥E¹RµMn¬˜¸¶³º}bóŽAyfedÈ#q*Ú÷m"Èž±%nL¹Ø4è%€lè`ÇåÃêÉÝõØí“ñ¢®ì`í ~Tq=eH•´¾µyõ·nZm”zE¼š>B)Ðs+k!ã!ÜeuQ#½'1ç“ü°ºïH•ôÖ_6õÝ=ˆi·žö[œáÇ]ïüJ‰N,Þ÷C›—»Æ&ƒ¯ÌŒÜQÉ Ø+ªîªûzæg]Ò>?‚ñ"júÎõA†°ÎÓ†Ù‚_tÀ]$Å·•YfÍÝÒ*žRÛ8¿$l#¬ @adxÐêæ©É;Ÿô 7¿€ÚØ£ßú8ýÆåÅÿ9h§Óårî”ÜY3/ ‚ç@áÈ |)/ îž14lÐÞaТ'îá6‚§7‘jpMdÃLkÞŸ“ºèC&ÃÃuÁ—AÜ) ¬ÐºÈkoÕQ#S¹ °ÃÐÏÐéRA¯ØbGõeÚxgTÅ GIí¤WS×ï÷ …iôÜz£pœ1‹^ ÕJÖCÊW䀩'Ø»btàá³Í¢iRG>,¶Ê~Ý‹™F<—ky—‰Ã-X†“¥„ÂxS¯ìéEã^6®b+Dk2:ž†»êþ®ƒ»= ¤÷c*_¿]ö·u{‰B/æ°jÿu!+’[’ˆ܈oÅM2 g‹l‰„Åç ‡X> G(ež°¿´z΂ ¨/ÿÖH߸„)€«Ð¤ã$‡C| wæ`‡Ø‰7sd-voìÃVjùˆWù6µÄ´nEuš¯Þ+ŒüYE ŒíÄïm׋Hz:ù[ÜÑ Ÿ íyÿIØÍnQž\®Iý`xRë³ê‰y…£R¼íuuzfºb–w× >'m"Ýîoª¤ºÇÿ%SÐDØ(<VPŠMö% AÙ3›|¿í4xìµ®îø!†¨RøÅ61Í|ÀÞoð’G~ºÞÄw@Øa€Ç_¨îó9•oÒ&hB6Óà)'1p…‹Cö‰!õ¯~î({Càewk7ñ]sÅ’©d-©Øˆ7…ÒÞ΋j¼ù Ÿh§ÙIiÉú³Ê" ®¿Ê Qúh¼TlàÚ Í I½`;ŒÕ~„6 ª×U*ÀDU$Qãyª³¢ÃlW©ôÐsq2×7%îu¢ïô,3“ýÜ?RƲýŠ›ŸÇ<{4ìkrµ0vñk½`‰T%0oxÉîøTªÐ”XŽ‹€TH_ñU%3„¶V 3Nh§ë±Ô L'¼’-}8¢Ó`LÔÂnÏ@=D08 ´p"þ5ˆd«)V¥0r„»²Ö^ ‰€L¿*Ók¢þžÛ’€%Ødq} üeÆIî(›¹ Þ³á…ϵljr‰ÈNO ÙäK ›^r‡;¾»VÝ IR€¦Ôœ]¤eùkÞŸ™v³»‰Sq} zÖ3Ä6¤}Noï|L’ùK…á“Ú‹`Ÿ®²}›EBo#—$¿3&}ODb+‡¶ÓÔªd æ ³èóS«Â³rSÇ£“Ù7Œ:ö<œ~ZpÓ1‰S9£NÀdÒp,9è5½k¬S&•J*ÓYˆÑ ƒNÚúúêVч°~C=›„ßl,ãÕ)Å…¨ùvÍ+ahÑzÈöP€)Ÿm+_—¯ñÔ"¤F왲¼>¿š¸¬V’:C¤FPèÇ ½9äLïšÛ>I¦÷‘ ÉñgseMRî לp¦í݆|ýrÖÄ‚§Æ/ +©h"ø5ßX©Óý·¬¹Ç_°^\ d­{ƒ‰Ú¶Ùï>HvYt=X²wc?ƨì‰é>ŒK¯.¶åíՠǵcÏ™¨îž¡‰i½˜2—üc-F“ìä¹YU¾K%˜ŒŠó£šàÜ%ñ«†ö$¤ä¬Yà½.æû )ÆJÍÎÛ˸ VåO±KÙCÃdêØÃ”a’Š×l]ôLÌ·cݘvZw<b²‘Êb,} 9­¢`{dó£g{Ñ<¹DL¾÷'½ë˜ú;8˜ ^´ ^9iâŽm”ËÉè …Çª’¾6Îð¸!MÉ£tIÁ`¯Çnb)žÀPê»Î[ÙéÖ&$PCÀÉ%MtH ,ú±¬Ÿ&)jjY÷ïî \}„@X€ÿzM¶ù­ˆ!X æÊÜ;DaŠ Û‘X0vMâŒÁ_#¸Nº¸î#ãJ9¶+'72Ïë2×k;¯OêÖ˜¶§y©÷$$ÚÈ«Ã*PqÈpååé%¡?t(£N;cêq®¥ˆ‰@ˆ¬}ŠôJðUÌ!l¸³°r¢†gCö!¡­ó-u呇–Ú¡³p¶DLÀ9Rfš3 ðôƒTòÕ—î:’¶aŽX·Q&,aN…C#qX)¼BâIAÄ;";yb‚¡| êË] ÆKÍšÓCuc¤¤u²²yÑÁ´ø4ÊMˆ%Ôþ,ï@7C‘´e%bÁ_SF(‚t è%p5Wû :õ¯™†ßÈ­1E±ïÝ3ù‘>MÓ.æ9²Xnùð‰Z¸,ÑzMY„;bfÖ0ùÂëDÆüFË£µb‡ÊÝ ¼bP ~ö;d£mñÖ`_•g92„àÒNÚ-IYŠÉ£ÑÜTàh@vˆ\#‰)àŠŠÝ èq§ò%Ò‹è×,ÁðíÁ æUL¿Ã1/O÷ q³3N©UÛÁÿ õoµ”!­¿ÂŠ0n ÇÂQ)Qyˆ´qR÷ñ¨  7 ë\7‘Õ³³O™?+ʘ/ûß™e\“ßæÛ}®“Ex",5­+¾Iê%¿Ÿ1Éúpm¹çiÏéx矣)PIÉû Ê×øƒéÑ¡>Ƨð¸!™!›ëŒÕk¥™®cɃã""Š“3sM>§ªëêÝ«¿ú²£“HӋ›¾‘SÏhþùXóËb¯u]† AFÀ?LÄM± íÜŠ˜;Œ4pLÀšc3Co~ÏgOƯÉÓpŽ.ýBåÉûa—`á—Rã&\D­6ã_ôщ?_ªê ^3Só—{¬ü-rç8†ŠÂ‚Â>tPz‰:ûi©w ®¢ Ê3xËCF¬æ*ò:ËÖÚŠ»<Ì A¿Šg9n?-k©ÆÇFwçj#Ìm­|Ë=ë÷wólÂKå¹»‹â]ï&>2n¼[Ñã—~“bmÚ{¥ŒŸ+¹ð^XÕ½-œ P„%ö«\R<üôÙ-Ômž¶–àŠŒÍálC¡FÉiwºP}Ôâ2ùÞ?iå`vŒÚ¼>Í›‹ì$6E+Š’Þ‘(h‹ZqñjOª5´2¹AühyÍÍ·Af!òž*„KÎxyI™Y&_S_`RÙëˆ ‚ÕàDŒÉþÇ×­†¥bíWi Àáúó Þ>GáAƒª6áy6¥øþìÚ·™Œ“/“õ x Fl:¿Õ|§»X.ŽÛíÆxsÑÒ® T"ôôNŸ¼Ì|ÇÓõŠv×¢‹œJJ0azt÷W¤+—=Ÿ¸ b“¢Ë0°%m4UÜôÖZÒ—w{eÎo¥îóËǨ{K4džóŽA÷ž~=i¡F ïsIƒó«˜;À‡ÿõšÝŠ»{ËNIèqŠ Ÿ8ïîÉŽŽ'™íIû†ªŸåQxN÷ÙóSX—.ß E»õi¡xiŽu/RPmŒâp “Ä®ÁჅ(1ŠâÚ_'L4Z<…¯ÿ·ãà•FÆC‹NNçD¼rÓ†€¾yeˆÊ¥½± /y©gíµ6,§”O5Ta…üw|çUoxytîÚ•º’CÖÉþYLQùSA¢Ð¾ûq.`ØÊAÌC÷¦r€Y¨eô7Mºjxjò{ÌÏK+ëPÝói«{Z‘X梟UTÀËo'ûE‘Ž…½»F‘³ Z&ކ28ÅÝ>Æù±Ý0L~˦)ªÁN"ùðù4§¦¨bF–Rë&íÚ¸¡ó“½9/Ù¬®âY?pÕÏÖ#SqP'†î,22£ÞµêP jÕ¼Ïrfó*éú+œæ¹é ýéÅ⾇7><ÿARìR ûcs—œöȺßìÐ92Ø?KõÎX.Tü§GëlšZÌ€¦ ™=?õ¼1 èó<˜—á…Ÿ{ѼЯÃÖcô.X<Þ¤lÀ»R0´øŒ r‰Ø¦'ÂSä¼¶¦HÁr'kþßNЬ%ÄøÐü Ý;½bæ¶÷0bcª?iúؼÉâŠ*Ö#ÄÚ=ËcŠÌ—B*zv21‡d)×ïZ†ÄwøpÛ§û¥Áio‚5ùÖØ&P(qCyÙ?'Òp|ßÂ%déº6‰àÉ©—DüûÅú“ï‘®¶‡¨DH­ þ)ß²ŽfFU7£‡Í",y¬N@–\‘V-ôÜz'¨O¢ÙbTœK¯æëR â‰Âر(ÅX‡DÑùã¤lݤªo"šm—ã‰:As³ßû£—Rlü·a}'ÁõÐ^J‘oŒz³¹\É·XÁúÿˆÔ ˜Œ+Ö‹þAC½ü«’0ÒzAÏÅG1Ÿe ãèDÄbÓãPöT‚€ Dó/Fùó$bx8Žtñ°õá#Í@ÓÎø0M•ØYV¡S%s£—ÅÐvvE§Ä2%ÂÕ0wTîæ9îàìm¿"ì½È ×\n匷a)•™AQ*H+ZžiSj¯^ NÍÖ7ºjá$—I}hž¸§ÕÔK&ãë0\uYYmÆ¥C8ø}ó,YðtSm¬_ˆm¶™W € 0ߪè}ùá'Ëݾ´’s1ÜŒH+)·4ü¿üÉ“DMÉjIÚHƒ…–‰…¹v*ƒÑÞ“X‰h©ÇÜŠX`Í^=ÒG"NGº!mü%y®¹t=û÷ŠùOóôˆ'-Ôf½VgàrTâiÒ{ÑI^ ÛÖG©b}êÒwRÕ"ØŒ´9ØÕ57*¡R²Åõ6Ve¸Æ{xÖj,k‘H¨# ¶"`¤/©ûòž¸Cº2ZÖèðÑRlô-ºRçÙÑEc³LÁÓTV6eª h€©“ô”FÍ€Ÿ^GpŽÕ3¡f“°Žc çMÏÌÈ´°6šç§rH­…â»]Ũ˜‘ËO¢¡Ôf¦Û›V”Sò8{P[Œ·QþjÃ=›7µŒßûø}K·wŒ—°éÂïáíº¦øl2MIgX@ᲨéÖØî·±:+HéÙÆíJ÷£ƒqEbb…ðªx½Þ³˜ðFg@xÈæÖ|“Ã5;‰eh,(*=¦Úe>Ú¾ïM£ïšùàEÐæ ÁGVü±çX®›xÛ½új:ypBT¨‰LEqyP‰ ñëö¯ÅÃjœ¿NøÏBßûGY–t‘âl8f´o\ßþó}úШ‹¬ Ó„äëîQ]Ö-Lbè—»WèéØV„PNls Å/î‘ÉÂØa¦ç^eʧTì$U+“V¡õ¥R¥ü kFÿXg·™ >ÇØ·iŽ´Š^l²¤¶E A;ó|Ñ$Qx˜Ôqãºs«þíâlKäBÇ«s‹àdž¸Áî>”ˆýsèò´È(l[íJýØ“PÁƒ1ÝßóÌË?…ç©Ål‡ËÌᆛ2ó(_f¤¸—y†TÊ‘=ÿP›)jˆˆ¨LÙÔï<äC0:öZ}uµª¬AÊðIÄb=þâxײKxˆTCÉ8™Çêtœ«¾Ûüpt×t$Ý?bpÙ‘¨vfjrÕElÛQ9¬ ö4 Σkª‰äì€cÛOÞýZDð½—ìÌjêkâ@±bTQSdûüøß/±ùMŠÃgõ\"â[¥|ƒ6‚ƒ¶¥¾ÜÒTÑSÎcÙÂY…Z¿§Û—˧~í)ÿ |R‡ÈÀ@7:c„6Çð‰êY1‡Âû`»…ȱò²7_¡7 *À@η'UK!Q¤ïü1/íöÙù ÒÐeˆ@ÕÞ][Ïx,7K7Ú‚fÐSåEBÓ9‘¥°†1÷Ê’ KPh&àb"»Ü’§HºADüGì’ë~É£¡!E‡VR¢6ET¯Î,µÂ„îâPô€yi£BâÈmè¥>èQÀŒÈåè5’[úÍBqÝ2×òª³ÎF ¡KÐ6L¬½D‡‘5¿¼}û–fÄ6µT‚íMíÐYŠNûù¦J®ìäóróP;NÙ—îRÔˆu 6S‰àx?ði¿­µ9üx%V;bâ:_îÃ=! (˜ñk2¶8²?5âÿMgž­ß×PéˆÜ œ.n)ª…=hl×uËuã¤â‰ú ÌUbxÙ8Þp%ŸOêBƒ•¶Æó(#*@°~# ИññfÚë+ÙRm'<ìyBjÁE´²µu7ÆY yÂxÓn·Iú¶Çµ.ãc8eÁª-òJ|¥¾’ëþnà~æœÖ_š]YyþDµ‡ùâܶ!ÄíÈ`žujSpèSh.9 &DŒÃ•pñ,%Èf ´n4_C•|IÍZø™îÍã%jW£’îS³CÌä)ÙÂÐn€:X#’j‰b,ú¼EP;BèPÄ,¨á¾)ÙÈû- g#Íú2¨ú®¹×2@%ü»‘Ž? ëØ?=¾²¦ó|q‰èƉa¶Þ­€²·”TDiƬ\N`؆¿*¹I95v!ó$¨¿2šþnøÇ5ÑÖä ЇزS·i*©Ðú­ Ïݥ'H1>{Ñ|E‘}Â~‘¸X:.,ú_`/¬âýäˆÆ˜hu)úÉ1}݇ۡ·ÿ¼Iomõ\È,s”ô¼ÑuÀ Î =ecI%xlß'ˆzôÇú ¤¾°ÜW»b¬RBý\j–PêÞ=BÄãNý)qƒÄ! ® RÝOPzùcSKþ-íèùdeE‰.àÔ öÛ/VÚô¢BT« å¸ázã íu}„@N˜—vÝE í$|!6È/&¶T-¬Åÿ—ƒó>5(qˆ‰üó9ˆün_I­kó-LÒÎ 9ó}6&ã?l>PxVÜqúÙWûêoÑΆÐîkÈ>ÝñÓP³é‰ðŠ]PI‰¬Œ’¡_TÈÔ£šœ=Ò"J{~Ö2= q-8Pà:£­%£Gƒw³ôuFš Jö}þÓ&lß~xˆü¤ëÿ<ûh²Ô×Û"ë‡ vOø{ÌåÖß;½šú"W8[D/T”¥Kje}¼¶•ø}yˆ„›„cJEQüðÃJÊKi0ÇáÄÿ²ëï«ô…§‡öJ/›§Bèqœø\&7§Ï;nNB™ˆfzc“1ŒËkÇÛ6ˆ®Ï\ýÎ+iìWÍÕÇ~™hß¾ª†Éáë^ 7ÚwèŽ6Géø_¡ú¢DD$’»³I2^þ;Œ›nÄC¯¥m‹™ŠüGR\)dsLèVÑ`1ÿ0ÈY%)Ñt åºüã¼"ÃÓàš¶û‘1a·ÕŒËha‹‡Üèq2R >Þþ]T>²Zô2d¾­&×Ö d¼õzC‚çåÙ"ŬRÌÍ yšþ€>Î8m dpºr‚Tw3TþZ“ çJ¸+Ô.9¤Û­«r,¼xµÞ6hH{Óg…Fâ’ZdE†~1+/6°ì¹·ZÀ1YaI¤².¨)êp„¡#pyÆ ¶Ð>`ÝÐ\péÇk¥¸Üm‘O[Éè’‘zv3…#‹ÊÙ¬XùÙrÛ£#МÙÝ ¾¤+eAå­&‘gªBRk¹½úýUPâŠU94.<ï)˜4.€"ŸêM‰ æö„ã4г„Ò-/a¥EA>kSî.Ãý“D{a©oÑdaS®Òzbéç²vÚ!ý ýÿ8B2ÊÚ­ÍMO²H:ç/·ÿkòÏ8ïÒ¯ªâ#P›>ZܺíµÁODürÁºè÷B¥Õó ¹&W“oʼnwm‚àQG° 0ùN3–ÀȃѦÕâ¢{¤zñI÷qq_çrÌK¶ŒXÄ펴ömí<Îèië4cú¬ei幜æÜ'rà¥W§5Ô7L$¾›‰ù¢i ØsDPå'õœ€£&)Ü'ö«øï½ªÈê=i‰Å[ô²šl¥‚FâÑ53 Fª„éä¹_JðûÂêé½7²EŽ Â7âêk &„œÂ¸˜HšŽ=2•dwµ®–BÅ!‡®­ÎYË.ÇÇ`Õ¯A Wn@ˆ3D?®")s×Ki.*ªÛïÍè"⥠:-X…«ù|ÏÛÉŌ̂îÁÑç¥¼× Ð¸·±ç °`ø'·Á¶½•lG7ß`SãJÅVÑï¯IÄ&“ÚÜÜ4YŠd±¶hüf%UïO o@¨ú,kZÊ $k:&Ñ’E 2 °¶gIž+ºFú†VÀWã`¶iºÏöÌ¿j1®@j?Të<îW¨Ò®DOvê¬ú‚„Ÿ®á?°µPòP[†'W•ŽwÉŒYÕ :€+޽ž3{‚+`Í–».ˆ¾L¸¡Óå {ÒÔ›n¾²5À…“z¾cÖÌîÇÇÙ®Ü ýåE1€è s\’ÓXE,¸úwè‘Jè€)ÒW8²þ]ŒàAç·B<æ’ë$ž”ng<)½¸n±ÊÝvmc‰@³6"u¦í‹÷º[Ì+ù¼M\ÙÂO¨`ÐÏ¥¨Q­0÷4{jUr,;7*Èëçé›r¼5l$"›Ü¤`h<Õe‚Ì!€Cïh\köØŒ§Ê°Ã½K`f¢~J™š0Èÿêµb¥6ßðòqë‡ú5º%=LßDÁeì¨KR¸o=\9_ÝBNÝ‚šÝ|#†ò {t³‚Iݲ۩q0¤¼z¥­;ñ×Hœ½· ¶#2øã8]¥ªÛ ^Ä™†>I'ÛÊš}„F¤öÍÏ2ïf».ÎÎL¸#V°"Hú\‘Èý‡T½‰èCô¨‰óhUŽ˜äöD|Wèô ®ÎúM#Û¯ïõ†Iˆz˜øÔøD¬àW â„´ïz¶èÍXÉžð´b1X ¬<ê艾®ùLµÐ÷$;z)òŸ®æØÜ@æb»Ê]ÄCY¢òÓã_ è;ýòu¹yÕ\†ÏHm‚çp„`q! 0ÛÀiF¦L™ÜlºLpt‹"¿øª„tÀ!H«|èNb®;·È  ùî}Úã½ͳû,oanf•8ôÕº²¯ìœ =ïÓ@óbb"©E 6¼~¼åý~¹µ9VЪ ë ë*ãÚ©nZþ‹zS"娀VïºdAÛHÑŽÈÈé¸lQã§9Äo5†¡±Ý’VBÈQf•'*6…qpi6¼˜ò/œ_ã+Žà½Hƒ‰-v4ö@p뤦F ?ØTÞíR¯ñ,”õ«Ù]€°ÌÎ0›Òm&6Ziâ{3ˆ£ûíŠéÖd§”“Ý0¶‚;Ì ó‘ƒÈnM!åaÙ± ¾å¤PþdŠÚq(²%ðÍ`3Ê}ù³d^ߨ†ó…ð¾ _ÔL|vš)1Iî{Y’·®PÔ<XömŸ³ûºä†èÍhG¾þ¾NÅäñ=ßÝGhþP›¸ù_•­˜ ³ª!­´suè.Ž~üÚ+¢F¹ ‚H`Ò÷Ñ®Ê Ù!ÌjY%0•dG—ÿ‰±Lpzù‰ªêͧ ÿ|2Þé8ø.—RŸ*ðL‡èÖšœê÷õè=>x²[Þî9}¸_oCD„ÅžòLJ²oR t0¸ÎkV¬~ñüÇä^«Z¢ÖhlU[þéS?Uvõà.p€²†8Txþ‘)üÀl佊 Ñy2~ü;Pšx±⢅L7m±CÍÚ@žÙyBÌ–ÁUmïձ«½ÿ÷n31 1`4pFYÓè7ÍZ‹"ŠŸH5.Œ'u=8*Ã"0ÔȺæGúŽòëû¸Qß‹@(N3¾‘3€â_+VÄqvNI-xH³Ã;F>mNÉsÞàfK¡½Á+WOöxLßÔ¬Ñ ãHÿ!zØÜ.ë‡íhSÍðY'Aý¶äë[_ïj<.ÝÂáEá{‚:jTÛd™Iò=.ØE{ꪣ]F›µë ¬Ös{þ~6ÉŸ3 6õwÜ\4r… ”ûµupçêx"œÉ$Â*\™ê ('€·Ê^zšf8Œ)bñ;“û4ñûkz4 +âÙr[9ÞÈpÂ=¢­Ç4 ›Knvu'кͳÁ½e”ÂŽls[ ½Sëjõð1íèíÒBQ7’Ủ+uU!j§r'B8.Z[cþ=bþ&[ À9ØI‹Ö ·ë’ƒ¼³2ç–™ ÏŠqê˵²ˆ­h j)ÀvÊ&9¯ªJž «ˆ¸Ö»ÿþ„¹’ÉH²ìê“"ù±ïî)`N¡¡YÚô–¦É‘u¬)˜Š˜4­Æ%–9ØMa<°Ú ‡’72à|4ó³áíéÖ=–P´ ³&'>ávÂðáÔý‹ />‹‘fä÷šH¿!ßÉ™ ÉÔ~Ë (ÂVS®Œ{ÿ¨ûq/š1×ˈ^#qPø_Xcþêø7¼ƒ`#1…õnÕƒÍ̶9öbh…;úãÊí”æÕŽÇß1¥ni¿ç¦(ÐtOJƒ$ ý+ øé|!ÐLÓñ†Ï6©õªûEµ!HpÚ#7½9µÔÐ#5G¬™ åiü"@ã3ÈßÜn>Ž.•X(@ëp³üŽNÎ^‰Ñ,§˜*ôªd"çÍAÅÚ"§ÞYÚ@šÛ•Þî'Ê€¶×D97ôñ»@œ%Öc…j7ê$Út&%®îõ”G¬IC˜~ß)a¿ 3` v…Ϧ‘½âL ܦ±†à)5$½CãÆqœÔÏèf´9ƒ&G†¨†ÎÈY‡[ˆûCùT±¸2‹+2Y¤ÿAlÃǤYí&mμ«tÅZÍŒ©H[dïOv•òj'·w±` æÎÛØx§–Ä bñK*¢4z„«±³!è£w0ÕP@Z8ªè?H†““eTyù{¹oáwk7/ËOAŠw ^6€¹5б¾>£µV¨+€ÎÊ{V HÛK¿Ý¡„ìò<|a Ë7©€Á©å1Vä‰Úb/3âG_e;«{*ƒ9†O !)SÞL;œ‡FaÃw*5Ð;Ü€Hªu„OpŒI]Òš¸£,UÁým¹É¶Ùs‡% ¤ã!Ç}¦ÅϦœ;ó\>¹©FR›«÷&‘±Ê,Õl¢èFµ(ï+eÁ¥Àrp éQG2~‹ÐP±®ó1$ ü>`‹ÝùuiÕŒDÏóûn+¾Tb]A†ç÷ü‘-R[I=ÕóáâbFFƒ%­èƒçF% `Ôæö¶™ãöp|Fµ€’ìÆl{ѱÀÎiÔKñtC¨_dü"¦ºÝoæÌßN€©ÛédQ4¡µ¬]p£ö¬›ºa/èýg55F¸±ÆwòÿaÕb~Î÷òi‘ÓM™HËöƒzš½ï±©9M/˜¯ì X{­&Кl¯~£äIßkÝf×¾CæÔ_'OÁ]z‰Ýy„7×ÒÁ±JãËÒ*·Ø¡ña–sMVPñ‡?&|™šh ÃóÍ–š2u'§¡¡è„¹Á?$žâ%T#çƒá„éô_G5¥þ36öÏw‚_%ãD:HÐ>XVwñ*­bÜ Yìà°î¸%Å `†-HÏÛ¤ÑF ¼#:"ÚD È|—ÛéÇ`lWÝŒ7Íæböþ”a€aØê®è•Å(åMWã×÷X^;Q‰m阾’õ¯ÚžŒK`L"ÇajtóÈ䳚»¨;ͲI@x,@8TÃÖ 0¨¢Éÿ]Ì‹· ‚Ôg^¸¤wÛÒì?/*Ì—”mÉû ¸™®õUóÙÏpá’òßÃY>Ú:s7€ŠÒ¯Mm;w* lÀÙ xéñè'@²÷¨ëäï{¯t~™ˆÝÏwâÀx°•"_âÈqÏSÉ:}Ù}%ÖPÀ•ÛÍ/ì†S Ôh0\¬­ñ[WPÖq÷:}…é[È `î™ì‚c³¬ ý]µæ•ð,X±ÞÊÍÁ=® UHQÊL³©ñ›¶Gsö™]×!1·ù)çì嬀IÂËÜÓn—n@¤sª’kýy¬ÓgŒ´üàr6öäú ØŒÃ8:ƒ²TòÃÞWÑ„ñáKìrÿXR³žgŽõ8< DüßkEý8‚:Dì˜rÖ&…\Ñ&]ˆšãMWüóeé` Á¿©áÖ„'Š©ÞLÄÉ¿ˆâÖ7sxPÜb> V•@;j'§l6¬k`ðîo†Õi¬”2ÒhWƒ[XÇ~vs´·ƒa[S½7g\ï»ë—§íÜÔ¯‰Uì'#%èP‘\ÉQä•îQ'@Äd«©úˆ¸A¯r’S®“Ñ U½Th9±<ŠkÀYˆ Ôçæõ”"ÿwºÐ8DàÀƒœ‰Šý3ÑÝìHì]­Ä3fÚr0GX1n¦<ë Â6‘hó‹V-- :}'5mDM—ÄT€Ø‹Ø™žþ+̧“ß&¿žKA޲ø„‹ÉçnDrk:©ž„ªôm@¿kNel§‹ž~ÙsÉÁR€Jm^ŠD Ûñ¥TX-$$êõzä Xj‡†¢Þ?èq¯xºPÄÿg«ëtÍo“ ;&?rTþÌÆÁ¤™ŒP:1烘bA@Ë@¶_ž@LBàmFÀ Ñ®åQo¨ŠSaZt¼BIÛ ˆ@‹¾ù>WÁžDw… özœ2³[u} àAÈW®&“=ÈJ2;’6ìñ˜eîÁûSX­GìÏ´zl™=:ú!¡ù0µ¦d°µƒ_MG¼äG‰èçEVÓÂWüwõðò[ØæH´]Y­ÙÌÒ{´6!òª=n€/å³Sœ¸üQ²wá’T WTÇO7&ÕziÑÛ2GÓ¡S?`D£ã=ÀÒ=†ºÜ­ùƈL `OØóç«ôà h\ÑÎA7|¿Ôôǯ-Ü g¡MœáèPF×å)hzÝÂE´î;ü/ªßÕ¯\‹Ë%”Âdšø–kzwú_%¥¾e&4ÝœNñe±Ç§˜U-[ÙnÁ’Z®'¤ÏÆôUî 4ÈâÆÔ!O)ßÑ%?PÞ!ß_¦¿Id\œ•œ :lí³ŠÀÈÇR&q{…UO ß:uþ'Ì€ñ*èe´ÑÌ窼¦ò˜Bè]+uŒHµŸkÑä5Áݽt»«”ÅÊžÖG½.5ƒ&(à*4 â µ±CÒcÙ½ExfÑâJøçÿŽ®ÆÕ»™Øù²ü¥Vú¿Â¦fár6Ëb%bB*µÀ9Ñ*©ôtѵFñÁä' l×ßxJŸæº¨{Ø)‚Ø{U Ø|{Vbxå í ZÉ«§^—fÙÍL 06N÷«¹K ËÇ„ß•Š‘!êu¹›DåWÿU¯uÁŸGU¥¡u›¸jÁð®ØïÕ8Z(…ŠJÓ¸ªÇÇ)Óó ËuÒàû˜äCp(=–¤ÁÿÜ a\ ßýöèºðM‹Ë‘Ùð´ò¼‘W`¼4º`Þê ôömW Ôª¾?/¥H¿º¢hÂáÀ0ÚZòÅtáþPö«Í¦] òƒº!,CÙ‹SŒøn@É;næ iÊ.¾+@‘íø/qÀñ­Íb ª|ïý*,›Óq)ôVåWÄØ=õrƒï ‘÷nN“Ž \fÕžBýeŽos "M\Ê4,ÞøúJ¨­Ÿo ó¶IÂZÐ0òë›4N$$<‡Úójצ– €¼å˜&—§®Ï’NWû¦Ž >…‡bº¸¶dºl+Üø´ô<ÇY*}dºÕµ4©øˆZÕI‹J„¿ò‰ŠO2ÏÙ™jãt់²9%j­a3Î|Ûqjw¨Áxü#{ ”)âx>Û)84o¿† ›¹UQ£ïãa-ÈÓAÆvn3kàJF¿0Ñ3>" fE4˜¤å5©$°Xð6 ÷/ë&6?µ§¨ÞS2ÆI°Ôu2ùR¸5Òq;w„Rωæp‡G±"ý¸ß§`Oz;Ò-²b-öî\/ïí=PÞh9lëI~"i¼æ ¥šD˽N4@Ÿ<¾9_ŒæsÎÆÏ‡¬0Ñ1?r±½ë!‹Ýr|Ëóâo>¼}û-«c®Êšý ‚žÖþØíÄ$æ°WK–Ý'âEå$Ø—J’´KžU´šµh°”E`+z[£ä KüÍd‰1ˆùŠ? ­ƒ€:øØ£$g :KaMï"º…¦ïf¦¦éW¾H²·DךAÐO(ÚœatLØ!ô/œû7ž2;ß½Ãe!K’|Ó¹K"=yjѲ.{ÒÈOÈlð.z”˜ªÅy¬–Y(â  DòV8ØÐ hÀáÈõüL’âØû7´+5_^²ø„2ùž0Ë@{ìxÙ¹º€¥ ÌMTÐ:W2Ìa7Ý›£íË -A â©þ½F„ó¤XO¬{Ñ^ûÚf.ÓŽ¸îÍùØ’?üÈes¼ó^ªÿû®uÎ;§ü¸/}5u }ˆ/‹Tåíû¬ùÐÿ;Ç„z×2ljÿ äÐ{ö1‚–#¬g1ümrìHʧ‚èè†q‰L¡2.ÖÚøtÈ‘¡ÏÌ'0®~v36§‚ø‘5Ây €Éõ%䣸&Åå!œw7*í`kq‡ŸÃÎF·v~÷¾x[ÛÆö$€]k4CF*ú;Z¨«o™ÆÏî ‚JCvê6NæH2¼-n*üúeyí(0·–îìK:Ía{PwÐðìkØç÷Û#™çß Ñø&59­÷&ãsõ/O¤oÑ{ÅT:k@” jà_‡þŧzUÉéÁÜæâý jÑ4ËCn@à^OÞ| d•ææî,ÑvâfaÂ|Žä}|ÙÙíº·uµý·Vx´G"ä`˜¼ÐQ²ÂLçŽ-º:TÚµä‹Z·hZ y6îg ð¼”_&“ Êœ ‹©x'ýA*Þ@+WŽLfPwlÈŽ#ÈÕ½ýðáòn˜O&éJPR*2“ñm RÝ—1ÇG4y¥»HÏ3h0“Gœ5ãð"ÇþÙ—-ô1;Ò-ÕŠœ Ù†sÚ3Iˆ§„ ÊÂpÒFhVRg~/*cP~»ÖÌ 1‡A3§ÂúE³;aÙ°zîy_ >M…®‚nmU¿¢¦Òo¬ åÕo`¢³¨·…o’î˜+,¡& VŸG{á2AÖ¢¾¹æªjs–QXóSoâëÅ€¤s-ÖS¡Y›Øè¡ËÀNÎ`ä¶Ç&A;$EñˆLvÙ{hbN 0ãHÀ’I†÷ßh“6ÖÄùq™Þ²¼ÑïO 3 y0Wdø~öÓ "wç… X ‚˜Göÿ{ñá)Y¹„¡©ÏÅ.îgìTdÓÒ MOK ù¡ ‰ÌÒÏh(0a×(Yþ}ÛMÞø•ÔE]מ"?êIé„îô¤*ºQ9„ ¡Ì« ˆ“´*q0žö ~ù@õÞÈ â5bͰFáí&aÊH·‚Ît©ŒU2&†M¥b³ÊêS“Pâû¸‹˜¦tvýf¿q\óX ßynˆô—IFÛ¨y1y"¢ÈÔöýÁ§ÿðÉû_Ãßs&üIj1›ÓÍá†hP’<ƒ¯¨*Z¦iy(d{ÚP S‘– Ò»òrëì(Ûæá¡VÑY_ÕßÿgÅ^úûÂ_/ïjÕ.?4¡j9‰ 0w2»\-ññ˜Ä‰¥œÇO“Á¸zh< Î)ÁÖzƒÈFÄD»«, ü b°z¾ap,º^ç”?!Ê3xnuÙ¿<¸xK.ïsshñb2EA §_d•“ ·;é·% ¾Õ—9ðÓ˜Öl AÉùæŒbå8Øx/Â`7´V@­¡­!ŒßØ9ùFò­Aâ=ËÒ h|χÇãÙmÈO7^†3x?;ß /¹®w¿/•0§C¥Â±z¯º£èmÝlvˆ{Î{^FO§·ö`ÓÇ¿ø(±ÕóÙs.•Ü¿Q“@“S㟀Žì8¬qS˜¨_óIº å¤|ñá@ÚÊù–áªE„)ΣØštOw,w|^ ÿv@F~ªRá€Nò <rŸ~dœÚ9[´\òz‘ò\žëß Ò@–Ѥkà~ö¬ò^òÿDS³Æ‚ ÍûNi>2O'>ý‚áÇ;|7qrÓžB¾Z»&ò <¦P”œç?ÞîÍœ H­þ³CáØfÖ^uí6PYúžž{ÊÛ'ƒº@†Ûþüø“zªÁCç`Ìzÿ8£¬s*M2+šT8®D'‰«ËÒB%|ÕXs_Ð(9c«LªˆƒK—LKî‚£4?g’˜V2}ð˜×Õ­F’(8:mÊzÃÛâs #QÁƒ¹Mˆ|s´·¡dnÑ\Éá ´£;:ñŠqg¡+–³JhÖQ„÷(f4]ÜUꃌ_¢¼ÈûÔ=V¹^V²âªã[F&JQÏ Dè*ñÈ’jAE…Ö© üõð4“õ -è”äáqøò":uóçÝõ?£¿.Ñ_3`?À$”8ÊKÝpE.ÓýDPXg”ÝÃævºˆöÒJ¯8Á¼Ó¸îÎt:zÃãKtôØÀël#á#û÷®é¶¼¼ý€:Ñ<}kÓÛôiy;À  yd&¥;ÀûamÎ.®™Ü3ð(Kä?º«RÇÑçPQ7ÈoNÞz2†Ïà>CgJÚÈÖð¦*d½Ìr]7§ýƒ<4¿eg1h…ƶC~‹²ÑÙÏËHv²öE1HO¼WÊ#@}‹C ×¶IssÍÕèƒ,þtgˆÎO|y`¯ºm"0z 'Wòé;ו9%Í2þ‚LójÞdÂøÍ‰YF/ "S¬sDZ*¼>’ar¸ÁxEÕ?‚ ð]&.“5‡ñ|1éª\ͼ6ö†2Çr3Ÿ„ËMu3ÜµÊ ÉA¨Ñn¨3*î|qúWb¯5@Qç_íMs12w¯ÃÍÔ“½×xÛ#ÎB–«8ïõ¾Qï=@‡˜å7Éõ²îaÑÌdð‹€Sª·®Á·ƒi £‘¼ËŸ¿uñ:xs¶üPb7õIe|—Ên°“_ ÁTdÆ>6sn„*m— ¤ª­3¿d£+-;Rb‚KX‡í »QZ]Õ´kîr ÉòÙéÙ.½pCèâ½€ÉW,O*\É]Ô{'7)’Fà B–1õÿml‘¤år\9J«ˆ¾lƒgá8Xµè_Û®fÿ}̃ îWýþ]ተw'Ö³µ#s\Xq(ž·)¯Våòín äTŽÈ´E/ñU[cͽ⎮%³zã/Ø… äšý¶:תêG8Âõ'3úFÐ1½ð$M65¤êB¨°ÙÝíP^}¸)"öŒ™½üÝ•y‹Qëî¥ÈJR;ç~'µjó ¼’›$zsRû #´K)3x•–©º¾Ë8£*‰›$•PäµÞsšKŠb:±}æöÔÃŽ9¿—óéªj§¸ö»rп¹yŒ8ÞC_S­«¦TXäfPøÈgÕáåû„è°”Ú*פpdCOa/GÐHécÁ1¦´ËA%ÆŒ/kå—a€÷˜O 0îïÜZ†À˜zù—˜¦dž¼öº"Å™®˜ ùÑ®…ö;ddË)jk_L”eVØU-ùº#¹¿T ÐËBΗûÀÕ‡›Ê§ž ¾šÄ¯ª|w;ñ’ù®!¥Ã’Ž¡6PRÊw]Àg I"ó#¹½:—àâ K‹»nÝ-Ÿš'[í“T÷æK ÛR> ]xEe±sÀçO­íWÊ„ ŽÑżffQ§9ä0ÂËoÃ Ž’k$ºú6eDÇÉ"U‘'æê½‘ÅΖ•và3k6¡¹Ý¸-®œÇç<[ŽâQ6|^™#§¡KXÃ3®`W—´Q·ý~?‡¤Ù§~{Ý$­ @PéU#&‹¹xB!"Ë~¥‰¯ÌÒ±D÷û>¬•©\êN^gïüúrG\Éë*‡$…÷¥Q¥µÂʺÒ`ó ƒ5¤ %| +¡›“_Ë/Ó¦óC^ëÃéÚ¹§÷>(6‘ûaðrlUë>x–ÀíZF“£ïµc²‹µ.*©øë$ô›Áï8¨ÇžŽ°¦®’ȸÔËâéñÍDlùîõ(¾¢›|o=`çˆx¤ù6ÖG®èÀ2 £öÈš:ë°aMV•^ÊÅŽuÊr~_ÓV?˜ÇžFG»Fvà{R|n ÜgŽ1Ó3^©^žPͯ’ˆ@¼Ôðdžß&ËHR+Ò—€ND¸Î* `Ž,1.à#ßnÊÛÙÈx(œX%£ÍÃXëQ©ì\I…éšæD¸áuõ:¢f¶{ŒÇn²áð6òöv˺•ðE ¶³\ÿˆR~'{]\%:-‚p³m\$à– /›Ó±WKÀþŸ«è.2‹R¤Õ„<”§2ƒW.ÔÈ{Ý臽‚ÙŒcmIÍÓ燙çi Yl$®âµœ%W7ÁKi¢@¢Ë³÷kèî)* c0ºØ}§ìû,mç÷5W<Ž‚Üý¡ ÞûòCfGâ¥ZÔ¨ÓÐå••ýÜÖ¿ñâÄ*$¬Û“$ ¡rÑ‘`]Å“«^ï[çÙB¹ƒÉÍQÙIÞm…Á\Úµ/[£óÇ×Í‚±ª"NN2 .ƒ´oºS°wsÚÓ«ÞÏBäù“¸~xÇ(Fb§„s½gŒü©æ´í¿­žPâ@}¶ÝþGŠ{…M…%! ïÆÉV`,Ö~fÑu¡)½ÿi!ô¾ºÅmdHe:ëx8/:½b+_okÂÒéþßì&,3s¸.¨ŒTÛòº`Õ$#8ŒŽÕJúMï¹6aèž–ˆO…ékHîÞø_* Ù’ø-úgenerate-stack-ir_optimize-stack-ir_print-stack-ir_optimize-level=3.txt000066400000000000000000000661271423707623100350140ustar00rootroot00000000000000binaryen-version_108/test/passes(module (type $FUNCSIG$v (func)) (type $5 (func (result i32))) (type $6 (func (param i32) (result i32))) (type $FUNCSIG$vf (func (param f32))) (type $4 (func (result f64))) (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) (type $FUNCSIG$id (func (param f64) (result i32))) (type $7 (func (param f64) (result f64))) (type $8 (func (result i64))) (type $9 (func (param i32 i64))) (import "env" "_emscripten_asm_const_vi" (func $_emscripten_asm_const_vi)) (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (table $0 10 funcref) (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) (export "big_negative" (func $big_negative)) (func $big_negative (local $temp f64) f64.const -2147483648 local.set $temp f64.const -2147483648 local.set $temp f64.const -21474836480 local.set $temp f64.const 0.039625 local.set $temp f64.const -0.039625 local.set $temp ) (func $importedDoubles (result f64) (local $temp f64) block $topmost (result f64) i32.const 8 f64.load i32.const 16 f64.load f64.add i32.const 16 f64.load f64.neg f64.add i32.const 8 f64.load f64.neg f64.add local.set $temp i32.const 24 i32.load i32.const 0 i32.gt_s if f64.const -3.4 br $topmost end i32.const 32 f64.load f64.const 0 f64.gt if f64.const 5.6 br $topmost end f64.const 1.2 end ) (func $doubleCompares (param $x f64) (param $y f64) (result f64) (local $t f64) (local $Int f64) (local $Double i32) block $topmost (result f64) local.get $x f64.const 0 f64.gt if f64.const 1.2 br $topmost end local.get $Int f64.const 0 f64.gt if f64.const -3.4 br $topmost end local.get $Double i32.const 0 i32.gt_s if f64.const 5.6 br $topmost end local.get $x local.get $y f64.lt if local.get $x br $topmost end local.get $y end ) (func $intOps (result i32) (local $x i32) local.get $x i32.const 0 i32.eq ) (func $hexLiterals i32.const 0 i32.const 313249263 i32.add i32.const -19088752 i32.add drop ) (func $conversions (local $i i32) (local $d f64) local.get $d call $f64-to-int local.set $i local.get $i f64.convert_i32_s local.set $d local.get $i i32.const 0 i32.shr_u f64.convert_i32_u local.set $d ) (func $seq (local $J f64) f64.const 0.1 drop f64.const 5.1 f64.const 3.2 drop f64.const 4.2 f64.sub local.set $J ) (func $switcher (param $x i32) (result i32) block $topmost (result i32) block $switch-default$3 block $switch-case$2 block $switch-case$1 local.get $x i32.const 1 i32.sub br_table $switch-case$1 $switch-case$2 $switch-default$3 end i32.const 1 br $topmost end i32.const 2 br $topmost end nop block $switch-default$7 block $switch-case$6 block $switch-case$5 local.get $x i32.const 5 i32.sub br_table $switch-case$6 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-case$5 $switch-default$7 end i32.const 121 br $topmost end i32.const 51 br $topmost end nop block $label$break$Lout block $switch-default$16 block $switch-case$15 block $switch-case$12 block $switch-case$9 block $switch-case$8 local.get $x i32.const 2 i32.sub br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 end br $label$break$Lout end br $label$break$Lout end block $while-out$10 loop $while-in$11 br $while-out$10 end unreachable end end loop $while-in$14 br $label$break$Lout end unreachable end nop end i32.const 0 end ) (func $blocker block $label$break$L br $label$break$L end ) (func $frem (result f64) f64.const 5.5 f64.const 1.2 call $f64-rem ) (func $big_uint_div_u (result i32) (local $x i32) i32.const -1 i32.const 2 i32.div_u i32.const -1 i32.and ) (func $fr (param $x f32) (local $y f32) (local $z f64) local.get $z f32.demote_f64 drop local.get $y drop f32.const 5 drop f32.const 0 drop f32.const 5 drop f32.const 0 drop ) (func $negZero (result f64) f64.const -0 ) (func $abs (local $x i32) (local $y f64) (local $z f32) (local $asm2wasm_i32_temp i32) i32.const 0 local.set $asm2wasm_i32_temp i32.const 0 local.get $asm2wasm_i32_temp i32.sub local.get $asm2wasm_i32_temp local.get $asm2wasm_i32_temp i32.const 0 i32.lt_s select local.set $x f64.const 0 f64.abs local.set $y f32.const 0 f32.abs local.set $z ) (func $neg (local $x f32) local.get $x f32.neg i32.const 1 i32.const 7 i32.and i32.const 8 i32.add call_indirect $0 (type $f32_=>_none) ) (func $cneg (param $x f32) local.get $x i32.const 1 i32.const 7 i32.and i32.const 8 i32.add call_indirect $0 (type $f32_=>_none) ) (func $___syscall_ret (local $$0 i32) local.get $$0 i32.const 0 i32.shr_u i32.const -4096 i32.gt_u drop ) (func $z nop ) (func $w nop ) (func $block_and_after (result i32) block $waka i32.const 1 drop br $waka end i32.const 0 ) (func $loop-roundtrip (param $0 f64) (result f64) loop $loop-in1 (result f64) local.get $0 drop local.get $0 end ) (func $big-i64 (result i64) i64.const -9218868437227405313 ) (func $i64-store32 (param $0 i32) (param $1 i64) local.get $0 local.get $1 i64.store32 ) (func $return-unreachable (result i32) i32.const 1 return ) (func $unreachable-block (result i32) i32.const 1 drop i32.const 2 return ) (func $unreachable-block-toplevel (result i32) i32.const 1 drop i32.const 2 return ) (func $unreachable-block0 (result i32) i32.const 2 return ) (func $unreachable-block0-toplevel (result i32) i32.const 2 return ) (func $unreachable-block-with-br (result i32) block $block i32.const 1 drop br $block end i32.const 1 ) (func $unreachable-if (result i32) i32.const 3 if i32.const 2 return else i32.const 1 return end unreachable ) (func $unreachable-if-toplevel (result i32) i32.const 3 if i32.const 2 return else i32.const 1 return end unreachable ) (func $unreachable-loop (result i32) loop $loop-in nop i32.const 1 return end unreachable ) (func $unreachable-loop0 (result i32) loop $loop-in i32.const 1 return end unreachable ) (func $unreachable-loop-toplevel (result i32) loop $loop-in nop i32.const 1 return end unreachable ) (func $unreachable-loop0-toplevel (result i32) loop $loop-in i32.const 1 return end unreachable ) (func $unreachable-ifs unreachable ) (func $unreachable-if-arm i32.const 1 if nop else unreachable end ) (func $local-to-stack (param $x i32) (result i32) (local $temp i32) i32.const 1 call $local-to-stack i32.const 2 call $local-to-stack drop ) (func $local-to-stack-1 (param $x i32) (result i32) (local $temp i32) i32.const 1 call $local-to-stack i32.const 2 call $local-to-stack drop i32.eqz ) (func $local-to-stack-1b (param $x i32) (result i32) (local $temp i32) i32.const 1 call $local-to-stack i32.const 2 call $local-to-stack drop i32.const 3 i32.add ) (func $local-to-stack-1c-no (param $x i32) (result i32) (local $temp i32) i32.const 1 call $local-to-stack local.set $temp i32.const 2 call $local-to-stack drop i32.const 3 local.get $temp i32.add ) (func $local-to-stack-2-no (param $x i32) (result i32) (local $temp i32) i32.const 1 call $local-to-stack local.set $temp i32.const 2 call $local-to-stack drop local.get $temp local.get $temp i32.add ) (func $local-to-stack-3-no (param $x i32) (result i32) (local $temp i32) i32.const 1 if i32.const 1 call $local-to-stack local.set $temp else i32.const 2 call $local-to-stack local.set $temp end i32.const 3 call $local-to-stack drop local.get $temp ) (func $local-to-stack-multi-4 (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) i32.const 1 call $local-to-stack-multi-4 i32.const 2 call $local-to-stack-multi-4 drop drop i32.const 3 call $local-to-stack-multi-4 i32.const 4 call $local-to-stack-multi-4 drop ) (func $local-to-stack-multi-5 (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) i32.const 1 call $local-to-stack-multi-4 i32.const 2 call $local-to-stack-multi-4 drop drop i32.const 3 call $local-to-stack-multi-4 i32.const 4 call $local-to-stack-multi-4 drop ) (func $local-to-stack-multi-6-justone (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) i32.const 1 call $local-to-stack-multi-4 i32.const 2 call $local-to-stack-multi-4 drop drop i32.const 3 call $local-to-stack-multi-4 local.set $temp2 i32.const 4 call $local-to-stack-multi-4 drop local.get $temp2 local.get $temp2 i32.add ) (func $local-to-stack-multi-7-justone (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) i32.const 1 call $local-to-stack-multi-4 local.set $temp1 i32.const 2 call $local-to-stack-multi-4 drop local.get $temp1 local.get $temp1 i32.add drop i32.const 3 call $local-to-stack-multi-4 i32.const 4 call $local-to-stack-multi-4 drop ) (func $local-to-stack-overlapping-multi-8-no (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) i32.const 1 call $local-to-stack-multi-4 local.set $temp1 i32.const 1 call $local-to-stack-multi-4 i32.const 3 call $local-to-stack-multi-4 drop local.get $temp1 i32.add ) (func $local-to-stack-overlapping-multi-9-yes (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) i32.const 1 call $local-to-stack-multi-4 i32.const 1 call $local-to-stack-multi-4 i32.const 3 call $local-to-stack-multi-4 drop i32.add ) (func $local-to-stack-through-control-flow (local $temp1 i32) (local $temp2 i32) i32.const 0 call $local-to-stack-multi-4 i32.const 1 call $local-to-stack-multi-4 i32.const 0 if nop end drop i32.const 2 call $local-to-stack-multi-4 block $block br $block end drop drop ) (func $local-to-stack-in-control-flow (local $temp1 i32) i32.const 0 if i32.const 0 call $local-to-stack-multi-4 drop else i32.const 1 call $local-to-stack-multi-4 drop end ) (func $remove-block (param $x i32) (result i32) (local $temp i32) i32.const 0 call $remove-block i32.const 1 call $remove-block i32.const 2 call $remove-block drop i32.eqz i32.add ) ) (module (type $FUNCSIG$v (func)) (type $5 (func (result i32))) (type $6 (func (param i32) (result i32))) (type $FUNCSIG$vf (func (param f32))) (type $4 (func (result f64))) (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) (type $FUNCSIG$id (func (param f64) (result i32))) (type $7 (func (param f64) (result f64))) (type $8 (func (result i64))) (type $9 (func (param i32 i64))) (import "env" "_emscripten_asm_const_vi" (func $_emscripten_asm_const_vi)) (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (table $0 10 funcref) (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) (export "big_negative" (func $big_negative)) (func $big_negative (; has Stack IR ;) (local $temp f64) (block $block0 (local.set $temp (f64.const -2147483648) ) (local.set $temp (f64.const -2147483648) ) (local.set $temp (f64.const -21474836480) ) (local.set $temp (f64.const 0.039625) ) (local.set $temp (f64.const -0.039625) ) ) ) (func $importedDoubles (; has Stack IR ;) (result f64) (local $temp f64) (block $topmost (result f64) (local.set $temp (f64.add (f64.add (f64.add (f64.load (i32.const 8) ) (f64.load (i32.const 16) ) ) (f64.neg (f64.load (i32.const 16) ) ) ) (f64.neg (f64.load (i32.const 8) ) ) ) ) (if (i32.gt_s (i32.load (i32.const 24) ) (i32.const 0) ) (br $topmost (f64.const -3.4) ) ) (if (f64.gt (f64.load (i32.const 32) ) (f64.const 0) ) (br $topmost (f64.const 5.6) ) ) (f64.const 1.2) ) ) (func $doubleCompares (; has Stack IR ;) (param $x f64) (param $y f64) (result f64) (local $t f64) (local $Int f64) (local $Double i32) (block $topmost (result f64) (if (f64.gt (local.get $x) (f64.const 0) ) (br $topmost (f64.const 1.2) ) ) (if (f64.gt (local.get $Int) (f64.const 0) ) (br $topmost (f64.const -3.4) ) ) (if (i32.gt_s (local.get $Double) (i32.const 0) ) (br $topmost (f64.const 5.6) ) ) (if (f64.lt (local.get $x) (local.get $y) ) (br $topmost (local.get $x) ) ) (local.get $y) ) ) (func $intOps (; has Stack IR ;) (result i32) (local $x i32) (i32.eq (local.get $x) (i32.const 0) ) ) (func $hexLiterals (; has Stack IR ;) (drop (i32.add (i32.add (i32.const 0) (i32.const 313249263) ) (i32.const -19088752) ) ) ) (func $conversions (; has Stack IR ;) (local $i i32) (local $d f64) (block $block0 (local.set $i (call $f64-to-int (local.get $d) ) ) (local.set $d (f64.convert_i32_s (local.get $i) ) ) (local.set $d (f64.convert_i32_u (i32.shr_u (local.get $i) (i32.const 0) ) ) ) ) ) (func $seq (; has Stack IR ;) (local $J f64) (local.set $J (f64.sub (block $block0 (result f64) (drop (f64.const 0.1) ) (f64.const 5.1) ) (block $block1 (result f64) (drop (f64.const 3.2) ) (f64.const 4.2) ) ) ) ) (func $switcher (; has Stack IR ;) (param $x i32) (result i32) (block $topmost (result i32) (block $switch$0 (block $switch-default$3 (block $switch-case$2 (block $switch-case$1 (br_table $switch-case$1 $switch-case$2 $switch-default$3 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $topmost (i32.const 1) ) ) (br $topmost (i32.const 2) ) ) (nop) ) (block $switch$4 (block $switch-default$7 (block $switch-case$6 (block $switch-case$5 (br_table $switch-case$6 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-case$5 $switch-default$7 (i32.sub (local.get $x) (i32.const 5) ) ) ) (br $topmost (i32.const 121) ) ) (br $topmost (i32.const 51) ) ) (nop) ) (block $label$break$Lout (block $switch-default$16 (block $switch-case$15 (block $switch-case$12 (block $switch-case$9 (block $switch-case$8 (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 (i32.sub (local.get $x) (i32.const 2) ) ) ) (br $label$break$Lout) ) (br $label$break$Lout) ) (block $while-out$10 (loop $while-in$11 (block $block1 (br $while-out$10) (br $while-in$11) ) ) (br $label$break$Lout) ) ) (block $while-out$13 (loop $while-in$14 (block $block3 (br $label$break$Lout) (br $while-in$14) ) ) (br $label$break$Lout) ) ) (nop) ) (i32.const 0) ) ) (func $blocker (; has Stack IR ;) (block $label$break$L (br $label$break$L) ) ) (func $frem (; has Stack IR ;) (result f64) (call $f64-rem (f64.const 5.5) (f64.const 1.2) ) ) (func $big_uint_div_u (; has Stack IR ;) (result i32) (local $x i32) (block $topmost (result i32) (local.set $x (i32.and (i32.div_u (i32.const -1) (i32.const 2) ) (i32.const -1) ) ) (local.get $x) ) ) (func $fr (; has Stack IR ;) (param $x f32) (local $y f32) (local $z f64) (block $block0 (drop (f32.demote_f64 (local.get $z) ) ) (drop (local.get $y) ) (drop (f32.const 5) ) (drop (f32.const 0) ) (drop (f32.const 5) ) (drop (f32.const 0) ) ) ) (func $negZero (; has Stack IR ;) (result f64) (f64.const -0) ) (func $abs (; has Stack IR ;) (local $x i32) (local $y f64) (local $z f32) (local $asm2wasm_i32_temp i32) (block $block0 (local.set $x (block $block1 (result i32) (local.set $asm2wasm_i32_temp (i32.const 0) ) (select (i32.sub (i32.const 0) (local.get $asm2wasm_i32_temp) ) (local.get $asm2wasm_i32_temp) (i32.lt_s (local.get $asm2wasm_i32_temp) (i32.const 0) ) ) ) ) (local.set $y (f64.abs (f64.const 0) ) ) (local.set $z (f32.abs (f32.const 0) ) ) ) ) (func $neg (; has Stack IR ;) (local $x f32) (block $block0 (local.set $x (f32.neg (local.get $x) ) ) (call_indirect (type $FUNCSIG$vf) (local.get $x) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) ) (func $cneg (; has Stack IR ;) (param $x f32) (call_indirect (type $FUNCSIG$vf) (local.get $x) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) (func $___syscall_ret (; has Stack IR ;) (local $$0 i32) (drop (i32.gt_u (i32.shr_u (local.get $$0) (i32.const 0) ) (i32.const -4096) ) ) ) (func $z (; has Stack IR ;) (nop) ) (func $w (; has Stack IR ;) (nop) ) (func $block_and_after (; has Stack IR ;) (result i32) (block $waka (drop (i32.const 1) ) (br $waka) ) (i32.const 0) ) (func $loop-roundtrip (; has Stack IR ;) (param $0 f64) (result f64) (loop $loop-in1 (result f64) (drop (local.get $0) ) (local.get $0) ) ) (func $big-i64 (; has Stack IR ;) (result i64) (i64.const -9218868437227405313) ) (func $i64-store32 (; has Stack IR ;) (param $0 i32) (param $1 i64) (i64.store32 (local.get $0) (local.get $1) ) ) (func $return-unreachable (; has Stack IR ;) (result i32) (return (i32.const 1) ) ) (func $unreachable-block (; has Stack IR ;) (result i32) (f64.abs (block $block (drop (i32.const 1) ) (return (i32.const 2) ) ) ) ) (func $unreachable-block-toplevel (; has Stack IR ;) (result i32) (block $block (drop (i32.const 1) ) (return (i32.const 2) ) ) ) (func $unreachable-block0 (; has Stack IR ;) (result i32) (f64.abs (block $block (return (i32.const 2) ) ) ) ) (func $unreachable-block0-toplevel (; has Stack IR ;) (result i32) (block $block (return (i32.const 2) ) ) ) (func $unreachable-block-with-br (; has Stack IR ;) (result i32) (block $block (drop (i32.const 1) ) (br $block) ) (i32.const 1) ) (func $unreachable-if (; has Stack IR ;) (result i32) (f64.abs (if (i32.const 3) (return (i32.const 2) ) (return (i32.const 1) ) ) ) ) (func $unreachable-if-toplevel (; has Stack IR ;) (result i32) (if (i32.const 3) (return (i32.const 2) ) (return (i32.const 1) ) ) ) (func $unreachable-loop (; has Stack IR ;) (result i32) (f64.abs (loop $loop-in (nop) (return (i32.const 1) ) ) ) ) (func $unreachable-loop0 (; has Stack IR ;) (result i32) (f64.abs (loop $loop-in (return (i32.const 1) ) ) ) ) (func $unreachable-loop-toplevel (; has Stack IR ;) (result i32) (loop $loop-in (nop) (return (i32.const 1) ) ) ) (func $unreachable-loop0-toplevel (; has Stack IR ;) (result i32) (loop $loop-in (return (i32.const 1) ) ) ) (func $unreachable-ifs (; has Stack IR ;) (if (unreachable) (nop) ) (if (unreachable) (unreachable) ) (if (unreachable) (nop) (nop) ) (if (unreachable) (unreachable) (nop) ) (if (unreachable) (nop) (unreachable) ) (if (unreachable) (unreachable) (unreachable) ) (if (i32.const 1) (unreachable) (nop) ) (if (i32.const 1) (nop) (unreachable) ) (if (i32.const 1) (unreachable) (unreachable) ) ) (func $unreachable-if-arm (; has Stack IR ;) (if (i32.const 1) (block $block (nop) ) (block $block12 (unreachable) (drop (i32.const 1) ) ) ) ) (func $local-to-stack (; has Stack IR ;) (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1) ) ) (drop (call $local-to-stack (i32.const 2) ) ) (local.get $temp) ) (func $local-to-stack-1 (; has Stack IR ;) (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1) ) ) (drop (call $local-to-stack (i32.const 2) ) ) (i32.eqz (local.get $temp) ) ) (func $local-to-stack-1b (; has Stack IR ;) (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1) ) ) (drop (call $local-to-stack (i32.const 2) ) ) (i32.add (local.get $temp) (i32.const 3) ) ) (func $local-to-stack-1c-no (; has Stack IR ;) (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1) ) ) (drop (call $local-to-stack (i32.const 2) ) ) (i32.add (i32.const 3) (local.get $temp) ) ) (func $local-to-stack-2-no (; has Stack IR ;) (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1) ) ) (drop (call $local-to-stack (i32.const 2) ) ) (i32.add (local.get $temp) (local.get $temp) ) ) (func $local-to-stack-3-no (; has Stack IR ;) (param $x i32) (result i32) (local $temp i32) (if (i32.const 1) (local.set $temp (call $local-to-stack (i32.const 1) ) ) (local.set $temp (call $local-to-stack (i32.const 2) ) ) ) (drop (call $local-to-stack (i32.const 3) ) ) (local.get $temp) ) (func $local-to-stack-multi-4 (; has Stack IR ;) (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1) ) ) (drop (call $local-to-stack-multi-4 (i32.const 2) ) ) (drop (local.get $temp1) ) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 3) ) ) (drop (call $local-to-stack-multi-4 (i32.const 4) ) ) (local.get $temp1) ) (func $local-to-stack-multi-5 (; has Stack IR ;) (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1) ) ) (drop (call $local-to-stack-multi-4 (i32.const 2) ) ) (drop (local.get $temp1) ) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 3) ) ) (drop (call $local-to-stack-multi-4 (i32.const 4) ) ) (local.get $temp2) ) (func $local-to-stack-multi-6-justone (; has Stack IR ;) (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1) ) ) (drop (call $local-to-stack-multi-4 (i32.const 2) ) ) (drop (local.get $temp1) ) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 3) ) ) (drop (call $local-to-stack-multi-4 (i32.const 4) ) ) (i32.add (local.get $temp2) (local.get $temp2) ) ) (func $local-to-stack-multi-7-justone (; has Stack IR ;) (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1) ) ) (drop (call $local-to-stack-multi-4 (i32.const 2) ) ) (drop (i32.add (local.get $temp1) (local.get $temp1) ) ) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 3) ) ) (drop (call $local-to-stack-multi-4 (i32.const 4) ) ) (local.get $temp2) ) (func $local-to-stack-overlapping-multi-8-no (; has Stack IR ;) (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1) ) ) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 1) ) ) (drop (call $local-to-stack-multi-4 (i32.const 3) ) ) (i32.add (local.get $temp2) (local.get $temp1) ) ) (func $local-to-stack-overlapping-multi-9-yes (; has Stack IR ;) (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1) ) ) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 1) ) ) (drop (call $local-to-stack-multi-4 (i32.const 3) ) ) (i32.add (local.get $temp1) (local.get $temp2) ) ) (func $local-to-stack-through-control-flow (; has Stack IR ;) (local $temp1 i32) (local $temp2 i32) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 0) ) ) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1) ) ) (if (i32.const 0) (nop) ) (drop (local.get $temp1) ) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 2) ) ) (block $block (br $block) ) (drop (local.get $temp1) ) (drop (local.get $temp2) ) ) (func $local-to-stack-in-control-flow (; has Stack IR ;) (local $temp1 i32) (if (i32.const 0) (block $block (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 0) ) ) (drop (local.get $temp1) ) ) (block $block13 (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1) ) ) (drop (local.get $temp1) ) ) ) ) (func $remove-block (; has Stack IR ;) (param $x i32) (result i32) (local $temp i32) (i32.add (call $remove-block (i32.const 0) ) (i32.eqz (block $block (result i32) (local.set $temp (call $remove-block (i32.const 1) ) ) (drop (call $remove-block (i32.const 2) ) ) (local.get $temp) ) ) ) ) ) generate-stack-ir_optimize-stack-ir_print-stack-ir_optimize-level=3.wast000066400000000000000000000432431423707623100351450ustar00rootroot00000000000000binaryen-version_108/test/passes(module (type $FUNCSIG$vf (func (param f32))) (type $FUNCSIG$v (func)) (type $FUNCSIG$id (func (param f64) (result i32))) (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) (type $4 (func (result f64))) (type $5 (func (result i32))) (type $6 (func (param i32) (result i32))) (type $7 (func (param f64) (result f64))) (type $8 (func (result i64))) (type $9 (func (param i32 i64))) (import "env" "_emscripten_asm_const_vi" (func $_emscripten_asm_const_vi)) (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) (table 10 funcref) (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (export "big_negative" (func $big_negative)) (func $big_negative (type $FUNCSIG$v) (local $temp f64) (block $block0 (local.set $temp (f64.const -2147483648) ) (local.set $temp (f64.const -2147483648) ) (local.set $temp (f64.const -21474836480) ) (local.set $temp (f64.const 0.039625) ) (local.set $temp (f64.const -0.039625) ) ) ) (func $importedDoubles (type $4) (result f64) (local $temp f64) (block $topmost (result f64) (local.set $temp (f64.add (f64.add (f64.add (f64.load (i32.const 8) ) (f64.load (i32.const 16) ) ) (f64.neg (f64.load (i32.const 16) ) ) ) (f64.neg (f64.load (i32.const 8) ) ) ) ) (if (i32.gt_s (i32.load (i32.const 24) ) (i32.const 0) ) (br $topmost (f64.const -3.4) ) ) (if (f64.gt (f64.load (i32.const 32) ) (f64.const 0) ) (br $topmost (f64.const 5.6) ) ) (f64.const 1.2) ) ) (func $doubleCompares (type $FUNCSIG$ddd) (param $x f64) (param $y f64) (result f64) (local $t f64) (local $Int f64) (local $Double i32) (block $topmost (result f64) (if (f64.gt (local.get $x) (f64.const 0) ) (br $topmost (f64.const 1.2) ) ) (if (f64.gt (local.get $Int) (f64.const 0) ) (br $topmost (f64.const -3.4) ) ) (if (i32.gt_s (local.get $Double) (i32.const 0) ) (br $topmost (f64.const 5.6) ) ) (if (f64.lt (local.get $x) (local.get $y) ) (br $topmost (local.get $x) ) ) (local.get $y) ) ) (func $intOps (type $5) (result i32) (local $x i32) (i32.eq (local.get $x) (i32.const 0) ) ) (func $hexLiterals (type $FUNCSIG$v) (drop (i32.add (i32.add (i32.const 0) (i32.const 313249263) ) (i32.const -19088752) ) ) ) (func $conversions (type $FUNCSIG$v) (local $i i32) (local $d f64) (block $block0 (local.set $i (call $f64-to-int (local.get $d) ) ) (local.set $d (f64.convert_i32_s (local.get $i) ) ) (local.set $d (f64.convert_i32_u (i32.shr_u (local.get $i) (i32.const 0) ) ) ) ) ) (func $seq (type $FUNCSIG$v) (local $J f64) (local.set $J (f64.sub (block $block0 (result f64) (drop (f64.const 0.1) ) (f64.const 5.1) ) (block $block1 (result f64) (drop (f64.const 3.2) ) (f64.const 4.2) ) ) ) ) (func $switcher (type $6) (param $x i32) (result i32) (block $topmost (result i32) (block $switch$0 (block $switch-default$3 (block $switch-case$2 (block $switch-case$1 (br_table $switch-case$1 $switch-case$2 $switch-default$3 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $topmost (i32.const 1) ) ) (br $topmost (i32.const 2) ) ) (nop) ) (block $switch$4 (block $switch-default$7 (block $switch-case$6 (block $switch-case$5 (br_table $switch-case$6 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-case$5 $switch-default$7 (i32.sub (local.get $x) (i32.const 5) ) ) ) (br $topmost (i32.const 121) ) ) (br $topmost (i32.const 51) ) ) (nop) ) (block $label$break$Lout (block $switch-default$16 (block $switch-case$15 (block $switch-case$12 (block $switch-case$9 (block $switch-case$8 (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 (i32.sub (local.get $x) (i32.const 2) ) ) ) (br $label$break$Lout) ) (br $label$break$Lout) ) (block $while-out$10 (loop $while-in$11 (block $block1 (br $while-out$10) (br $while-in$11) ) ) (br $label$break$Lout) ) ) (block $while-out$13 (loop $while-in$14 (block $block3 (br $label$break$Lout) (br $while-in$14) ) ) (br $label$break$Lout) ) ) (nop) ) (i32.const 0) ) ) (func $blocker (type $FUNCSIG$v) (block $label$break$L (br $label$break$L) ) ) (func $frem (type $4) (result f64) (call $f64-rem (f64.const 5.5) (f64.const 1.2) ) ) (func $big_uint_div_u (type $5) (result i32) (local $x i32) (block $topmost (result i32) (local.set $x (i32.and (i32.div_u (i32.const -1) (i32.const 2) ) (i32.const -1) ) ) (local.get $x) ) ) (func $fr (type $FUNCSIG$vf) (param $x f32) (local $y f32) (local $z f64) (block $block0 (drop (f32.demote_f64 (local.get $z) ) ) (drop (local.get $y) ) (drop (f32.const 5) ) (drop (f32.const 0) ) (drop (f32.const 5) ) (drop (f32.const 0) ) ) ) (func $negZero (type $4) (result f64) (f64.const -0) ) (func $abs (type $FUNCSIG$v) (local $x i32) (local $y f64) (local $z f32) (local $asm2wasm_i32_temp i32) (block $block0 (local.set $x (block $block1 (result i32) (local.set $asm2wasm_i32_temp (i32.const 0) ) (select (i32.sub (i32.const 0) (local.get $asm2wasm_i32_temp) ) (local.get $asm2wasm_i32_temp) (i32.lt_s (local.get $asm2wasm_i32_temp) (i32.const 0) ) ) ) ) (local.set $y (f64.abs (f64.const 0) ) ) (local.set $z (f32.abs (f32.const 0) ) ) ) ) (func $neg (type $FUNCSIG$v) (local $x f32) (block $block0 (local.set $x (f32.neg (local.get $x) ) ) (call_indirect (type $FUNCSIG$vf) (local.get $x) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) ) (func $cneg (type $FUNCSIG$vf) (param $x f32) (call_indirect (type $FUNCSIG$vf) (local.get $x) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) (func $___syscall_ret (type $FUNCSIG$v) (local $$0 i32) (drop (i32.gt_u (i32.shr_u (local.get $$0) (i32.const 0) ) (i32.const -4096) ) ) ) (func $z (type $FUNCSIG$v) (nop) ) (func $w (type $FUNCSIG$v) (nop) ) (func $block_and_after (type $5) (result i32) (block $waka (drop (i32.const 1) ) (br $waka) ) (i32.const 0) ) (func $loop-roundtrip (type $7) (param $0 f64) (result f64) (loop $loop-in1 (result f64) (drop (local.get $0) ) (local.get $0) ) ) (func $big-i64 (type $8) (result i64) (i64.const -9218868437227405313) ) (func $i64-store32 (type $9) (param $0 i32) (param $1 i64) (i64.store32 (local.get $0) (local.get $1) ) ) (func $return-unreachable (result i32) (return (i32.const 1)) ) (func $unreachable-block (result i32) (f64.abs (block ;; note no type - valid in binaryen IR, in wasm must be i32 (drop (i32.const 1)) (return (i32.const 2)) ) ) ) (func $unreachable-block-toplevel (result i32) (block ;; note no type - valid in binaryen IR, in wasm must be i32 (drop (i32.const 1)) (return (i32.const 2)) ) ) (func $unreachable-block0 (result i32) (f64.abs (block ;; note no type - valid in binaryen IR, in wasm must be i32 (return (i32.const 2)) ) ) ) (func $unreachable-block0-toplevel (result i32) (block ;; note no type - valid in binaryen IR, in wasm must be i32 (return (i32.const 2)) ) ) (func $unreachable-block-with-br (result i32) (block $block ;; unreachable type due to last element having that type, but the block is exitable (drop (i32.const 1)) (br $block) ) (i32.const 1) ) (func $unreachable-if (result i32) (f64.abs (if ;; note no type - valid in binaryen IR, in wasm must be i32 (i32.const 3) (return (i32.const 2)) (return (i32.const 1)) ) ) ) (func $unreachable-if-toplevel (result i32) (if ;; note no type - valid in binaryen IR, in wasm must be i32 (i32.const 3) (return (i32.const 2)) (return (i32.const 1)) ) ) (func $unreachable-loop (result i32) (f64.abs (loop ;; note no type - valid in binaryen IR, in wasm must be i32 (nop) (return (i32.const 1)) ) ) ) (func $unreachable-loop0 (result i32) (f64.abs (loop ;; note no type - valid in binaryen IR, in wasm must be i32 (return (i32.const 1)) ) ) ) (func $unreachable-loop-toplevel (result i32) (loop ;; note no type - valid in binaryen IR, in wasm must be i32 (nop) (return (i32.const 1)) ) ) (func $unreachable-loop0-toplevel (result i32) (loop ;; note no type - valid in binaryen IR, in wasm must be i32 (return (i32.const 1)) ) ) (func $unreachable-ifs (if (unreachable) (nop)) (if (unreachable) (unreachable)) (if (unreachable) (nop) (nop)) (if (unreachable) (unreachable) (nop)) (if (unreachable) (nop) (unreachable)) (if (unreachable) (unreachable) (unreachable)) ;; (if (i32.const 1) (unreachable) (nop)) (if (i32.const 1) (nop) (unreachable)) (if (i32.const 1) (unreachable) (unreachable)) ) (func $unreachable-if-arm (if (i32.const 1) (block (nop) ) (block (unreachable) (drop (i32.const 1) ) ) ) ) (func $local-to-stack (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1))) ;; this set could just be on the stack (drop (call $local-to-stack (i32.const 2))) (local.get $temp) ) (func $local-to-stack-1 (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1))) (drop (call $local-to-stack (i32.const 2))) (i32.eqz (local.get $temp) ) ) (func $local-to-stack-1b (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1))) (drop (call $local-to-stack (i32.const 2))) (i32.add (local.get $temp) (i32.const 3) ) ) (func $local-to-stack-1c-no (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1))) (drop (call $local-to-stack (i32.const 2))) (i32.add (i32.const 3) ;; this is in the way (local.get $temp) ) ) (func $local-to-stack-2-no (param $x i32) (result i32) (local $temp i32) (local.set $temp (call $local-to-stack (i32.const 1))) (drop (call $local-to-stack (i32.const 2))) (i32.add (local.get $temp) (local.get $temp) ;; a second use - so cannot stack it ) ) (func $local-to-stack-3-no (param $x i32) (result i32) (local $temp i32) (if (i32.const 1) (local.set $temp (call $local-to-stack (i32.const 1))) (local.set $temp (call $local-to-stack (i32.const 2))) ;; two sets for that get ) (drop (call $local-to-stack (i32.const 3))) (local.get $temp) ) (func $local-to-stack-multi-4 (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) (drop (call $local-to-stack-multi-4 (i32.const 2))) (drop (local.get $temp1)) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 3))) ;; same local, used later (drop (call $local-to-stack-multi-4 (i32.const 4))) (local.get $temp1) ) (func $local-to-stack-multi-5 (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) (drop (call $local-to-stack-multi-4 (i32.const 2))) (drop (local.get $temp1)) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 3))) ;; different local, used later (drop (call $local-to-stack-multi-4 (i32.const 4))) (local.get $temp2) ) (func $local-to-stack-multi-6-justone (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) (drop (call $local-to-stack-multi-4 (i32.const 2))) (drop (local.get $temp1)) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 3))) ;; different local, used later (drop (call $local-to-stack-multi-4 (i32.const 4))) (i32.add (local.get $temp2) (local.get $temp2) ) ) (func $local-to-stack-multi-7-justone (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) (drop (call $local-to-stack-multi-4 (i32.const 2))) (drop (i32.add (local.get $temp1) (local.get $temp1) ) ) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 3))) ;; different local, used later (drop (call $local-to-stack-multi-4 (i32.const 4))) (local.get $temp2) ) (func $local-to-stack-overlapping-multi-8-no (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 1))) (drop (call $local-to-stack-multi-4 (i32.const 3))) (i32.add (local.get $temp2) ;; the timing (local.get $temp1) ;; it sucks ) ) (func $local-to-stack-overlapping-multi-9-yes (param $x i32) (result i32) (local $temp1 i32) (local $temp2 i32) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 1))) (drop (call $local-to-stack-multi-4 (i32.const 3))) (i32.add (local.get $temp1) ;; the stars align (local.get $temp2) ;; and a time presents itself ) ) (func $local-to-stack-through-control-flow (local $temp1 i32) (local $temp2 i32) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 0))) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) (if (i32.const 0) (nop)) (drop (local.get $temp1)) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 2))) (block $block (br $block)) (drop (local.get $temp1)) (drop (local.get $temp2)) ) (func $local-to-stack-in-control-flow (local $temp1 i32) (if (i32.const 0) (block (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 0))) (drop (local.get $temp1)) ) (block (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) (drop (local.get $temp1)) ) ) ) (func $remove-block (param $x i32) (result i32) (local $temp i32) (i32.add (call $remove-block (i32.const 0)) (i32.eqz (block (result i32) ;; after we use the stack instead of the local, we can remove this block (local.set $temp (call $remove-block (i32.const 1))) (drop (call $remove-block (i32.const 2))) (local.get $temp) ) ) ) ) ) binaryen-version_108/test/passes/ignore_missing_func_dwarf.bin.txt000066400000000000000000000772511423707623100257600ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 1024) "\nvoid used(int x) {\n x++;\n x--;\n return x;\n}\n\nvoid unused(int x) {\n x >>= 1;\n x <<= 1;\n return x;\n}\n\nint main() {\n return used(42);\n}\n\00") (data (i32.const 1168) "\00\04\00\00") (import "env" "__indirect_function_table" (table $timport$0 1 funcref)) (global $global$0 (mut i32) (i32.const 5244064)) (global $global$1 i32 (i32.const 1172)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $used\28int\29 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) ;; code offset: 0xe (local.set $1 ;; code offset: 0x8 (global.get $global$0) ) ;; code offset: 0x12 (local.set $2 ;; code offset: 0x10 (i32.const 16) ) ;; code offset: 0x19 (local.set $3 ;; code offset: 0x18 (i32.sub ;; code offset: 0x14 (local.get $1) ;; code offset: 0x16 (local.get $2) ) ) ;; code offset: 0x1f (i32.store offset=12 ;; code offset: 0x1b (local.get $3) ;; code offset: 0x1d (local.get $0) ) ;; code offset: 0x27 (local.set $4 ;; code offset: 0x24 (i32.load offset=12 ;; code offset: 0x22 (local.get $3) ) ) ;; code offset: 0x2b (local.set $5 ;; code offset: 0x29 (i32.const 1) ) ;; code offset: 0x32 (local.set $6 ;; code offset: 0x31 (i32.add ;; code offset: 0x2d (local.get $4) ;; code offset: 0x2f (local.get $5) ) ) ;; code offset: 0x38 (i32.store offset=12 ;; code offset: 0x34 (local.get $3) ;; code offset: 0x36 (local.get $6) ) ;; code offset: 0x40 (local.set $7 ;; code offset: 0x3d (i32.load offset=12 ;; code offset: 0x3b (local.get $3) ) ) ;; code offset: 0x44 (local.set $8 ;; code offset: 0x42 (i32.const -1) ) ;; code offset: 0x4b (local.set $9 ;; code offset: 0x4a (i32.add ;; code offset: 0x46 (local.get $7) ;; code offset: 0x48 (local.get $8) ) ) ;; code offset: 0x51 (i32.store offset=12 ;; code offset: 0x4d (local.get $3) ;; code offset: 0x4f (local.get $9) ) ;; code offset: 0x59 (local.set $10 ;; code offset: 0x56 (i32.load offset=12 ;; code offset: 0x54 (local.get $3) ) ) ;; code offset: 0x5d (return ;; code offset: 0x5b (local.get $10) ) ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) ;; code offset: 0x69 (local.set $0 ;; code offset: 0x63 (global.get $global$0) ) ;; code offset: 0x6d (local.set $1 ;; code offset: 0x6b (i32.const 16) ) ;; code offset: 0x74 (local.set $2 ;; code offset: 0x73 (i32.sub ;; code offset: 0x6f (local.get $0) ;; code offset: 0x71 (local.get $1) ) ) ;; code offset: 0x78 (global.set $global$0 ;; code offset: 0x76 (local.get $2) ) ;; code offset: 0x80 (local.set $3 ;; code offset: 0x7e (i32.const 42) ) ;; code offset: 0x84 (local.set $4 ;; code offset: 0x82 (i32.const 0) ) ;; code offset: 0x8a (i32.store offset=12 ;; code offset: 0x86 (local.get $2) ;; code offset: 0x88 (local.get $4) ) ;; code offset: 0x95 (local.set $5 ;; code offset: 0x8f (call $used\28int\29 ;; code offset: 0x8d (local.get $3) ) ) ;; code offset: 0x99 (local.set $6 ;; code offset: 0x97 (i32.const 0) ) ;; code offset: 0xa4 (local.set $7 ;; code offset: 0x9d (i32.load offset=1168 ;; code offset: 0x9b (local.get $6) ) ) ;; code offset: 0xab (local.set $8 ;; code offset: 0xaa (i32.add ;; code offset: 0xa6 (local.get $5) ;; code offset: 0xa8 (local.get $7) ) ) ;; code offset: 0xaf (local.set $9 ;; code offset: 0xad (i32.const 16) ) ;; code offset: 0xb6 (local.set $10 ;; code offset: 0xb5 (i32.add ;; code offset: 0xb1 (local.get $2) ;; code offset: 0xb3 (local.get $9) ) ) ;; code offset: 0xba (global.set $global$0 ;; code offset: 0xb8 (local.get $10) ) ;; code offset: 0xc2 (return ;; code offset: 0xc0 (local.get $8) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) ;; code offset: 0xce (local.set $2 ;; code offset: 0xc8 (call $__original_main) ) ;; code offset: 0xd2 (return ;; code offset: 0xd0 (local.get $2) ) ) ;; custom section ".debug_info", size 175 ;; custom section ".debug_ranges", size 32 ;; custom section ".debug_abbrev", size 117 ;; custom section ".debug_line", size 128 ;; custom section ".debug_str", size 235 ;; custom section "producers", size 180 ) DWARF debug info ================ Contains section .debug_info (175 bytes) Contains section .debug_ranges (32 bytes) Contains section .debug_abbrev (117 bytes) Contains section .debug_line (128 bytes) Contains section .debug_str (235 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_location DW_FORM_exprloc [3] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [4] DW_TAG_const_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [5] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [6] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [7] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_location DW_FORM_exprloc DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [8] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present .debug_info contents: 0x00000000: Compile Unit: length = 0x000000ab version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x000000af) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "a.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000009b] = "/home/alon/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000005, 0x0000005f)) 0x00000026: DW_TAG_variable [2] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b5] = "quine") DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "const char*") DW_AT_external [DW_FORM_flag_present] (true) DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x490) 0x00000037: DW_TAG_pointer_type [3] DW_AT_type [DW_FORM_ref4] (cu + 0x003c => {0x0000003c} "const char") 0x0000003c: DW_TAG_const_type [4] DW_AT_type [DW_FORM_ref4] (cu + 0x0041 => {0x00000041} "char") 0x00000041: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000bb] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x00000048: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c0] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x0000004f: DW_TAG_subprogram [6] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x0000005a) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000c4] = "_Z4usedi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cd] = "used") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (4) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000066: DW_TAG_formal_parameter [7] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0xc) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e9] = "x") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (4) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") 0x00000074: NULL 0x00000075: DW_TAG_subprogram [6] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_high_pc [DW_FORM_data4] (0x0000005a) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000d2] = "_Z6unusedi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dd] = "unused") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (10) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000008c: DW_TAG_formal_parameter [7] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0xc) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e9] = "x") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (10) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") 0x0000009a: NULL 0x0000009b: DW_TAG_subprogram [8] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000060) DW_AT_high_pc [DW_FORM_data4] (0x00000064) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e4] = "main") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (16) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x000000ae: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x0000007c version: 4 prologue_length: 0x0000001d min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "a.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000027: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002e: 15 address += 0, line += 3 0x0000000000000005 4 0 1 0 0 is_stmt 0x0000002f: 05 DW_LNS_set_column (4) 0x00000031: 0a DW_LNS_set_prologue_end 0x00000032: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000033: bb address += 12, line += 1 0x0000000000000022 5 4 1 0 0 is_stmt prologue_end 0x00000034: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000035: 83 address += 8, line += 1 0x000000000000003b 6 4 1 0 0 is_stmt 0x00000036: 05 DW_LNS_set_column (10) 0x00000038: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000039: 83 address += 8, line += 1 0x0000000000000054 7 10 1 0 0 is_stmt 0x0000003a: 05 DW_LNS_set_column (3) 0x0000003c: 06 DW_LNS_negate_stmt 0x0000003d: 74 address += 7, line += 0 0x000000000000005b 7 3 1 0 0 0x0000003e: 02 DW_LNS_advance_pc (4) 0x00000040: 00 DW_LNE_end_sequence 0x000000000000005f 7 3 1 0 0 end_sequence 0x00000043: 00 DW_LNE_set_address (0x0000000000000000) 0x0000004a: 03 DW_LNS_advance_line (10) 0x0000004c: 01 DW_LNS_copy 0x0000000000000000 10 0 1 0 0 is_stmt 0x0000004d: 05 DW_LNS_set_column (5) 0x0000004f: 0a DW_LNS_set_prologue_end 0x00000050: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000051: bb address += 12, line += 1 0x000000000000001d 11 5 1 0 0 is_stmt prologue_end 0x00000052: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000053: 83 address += 8, line += 1 0x0000000000000036 12 5 1 0 0 is_stmt 0x00000054: 05 DW_LNS_set_column (10) 0x00000056: 08 DW_LNS_const_add_pc (0x0000000000000011) 0x00000057: 83 address += 8, line += 1 0x000000000000004f 13 10 1 0 0 is_stmt 0x00000058: 05 DW_LNS_set_column (3) 0x0000005a: 06 DW_LNS_negate_stmt 0x0000005b: 74 address += 7, line += 0 0x0000000000000056 13 3 1 0 0 0x0000005c: 02 DW_LNS_advance_pc (4) 0x0000005e: 00 DW_LNE_end_sequence 0x000000000000005a 13 3 1 0 0 end_sequence 0x00000061: 00 DW_LNE_set_address (0x0000000000000060) 0x00000068: 03 DW_LNS_advance_line (16) 0x0000006a: 01 DW_LNS_copy 0x0000000000000060 16 0 1 0 0 is_stmt 0x0000006b: 05 DW_LNS_set_column (10) 0x0000006d: 0a DW_LNS_set_prologue_end 0x0000006e: 02 DW_LNS_advance_pc (45) 0x00000070: 13 address += 0, line += 1 0x000000000000008d 17 10 1 0 0 is_stmt prologue_end 0x00000071: 05 DW_LNS_set_column (25) 0x00000073: 06 DW_LNS_negate_stmt 0x00000074: 9e address += 10, line += 0 0x0000000000000097 17 25 1 0 0 0x00000075: 05 DW_LNS_set_column (19) 0x00000077: e4 address += 15, line += 0 0x00000000000000a6 17 19 1 0 0 0x00000078: 05 DW_LNS_set_column (3) 0x0000007a: 74 address += 7, line += 0 0x00000000000000ad 17 3 1 0 0 0x0000007b: 02 DW_LNS_advance_pc (23) 0x0000007d: 00 DW_LNE_end_sequence 0x00000000000000c4 17 3 1 0 0 end_sequence .debug_str contents: 0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)" 0x00000095: "a.cpp" 0x0000009b: "/home/alon/Dev/emscripten" 0x000000b5: "quine" 0x000000bb: "char" 0x000000c0: "int" 0x000000c4: "_Z4usedi" 0x000000cd: "used" 0x000000d2: "_Z6unusedi" 0x000000dd: "unused" 0x000000e4: "main" 0x000000e9: "x" .debug_ranges contents: 00000000 00000005 0000005f 00000000 00000010 00000060 000000c4 00000010 DWARF debug info ================ Contains section .debug_info (175 bytes) Contains section .debug_ranges (32 bytes) Contains section .debug_abbrev (117 bytes) Contains section .debug_line (169 bytes) Contains section .debug_str (235 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_location DW_FORM_exprloc [3] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [4] DW_TAG_const_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 [5] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [6] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [7] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_location DW_FORM_exprloc DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [8] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present .debug_info contents: 0x00000000: Compile Unit: length = 0x000000ab version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x000000af) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "a.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000009b] = "/home/alon/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000005, 0x0000006d)) 0x00000026: DW_TAG_variable [2] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b5] = "quine") DW_AT_type [DW_FORM_ref4] (cu + 0x0037 => {0x00000037} "const char*") DW_AT_external [DW_FORM_flag_present] (true) DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x490) 0x00000037: DW_TAG_pointer_type [3] DW_AT_type [DW_FORM_ref4] (cu + 0x003c => {0x0000003c} "const char") 0x0000003c: DW_TAG_const_type [4] DW_AT_type [DW_FORM_ref4] (cu + 0x0041 => {0x00000041} "char") 0x00000041: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000bb] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x00000048: DW_TAG_base_type [5] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c0] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x0000004f: DW_TAG_subprogram [6] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000068) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000c4] = "_Z4usedi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cd] = "used") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (4) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000066: DW_TAG_formal_parameter [7] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0xc) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e9] = "x") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (4) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") 0x00000074: NULL 0x00000075: DW_TAG_subprogram [6] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_high_pc [DW_FORM_data4] (0x00000000) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000d2] = "_Z6unusedi") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dd] = "unused") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (10) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000008c: DW_TAG_formal_parameter [7] DW_AT_location [DW_FORM_exprloc] (DW_OP_plus_uconst 0xc) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e9] = "x") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (10) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") 0x0000009a: NULL 0x0000009b: DW_TAG_subprogram [8] DW_AT_low_pc [DW_FORM_addr] (0x000000000000006e) DW_AT_high_pc [DW_FORM_data4] (0x00000065) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e4] = "main") DW_AT_decl_file [DW_FORM_data1] ("/home/alon/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (16) DW_AT_type [DW_FORM_ref4] (cu + 0x0048 => {0x00000048} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x000000ae: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x000000a5 version: 4 prologue_length: 0x0000001d min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "a.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000027: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002e: 03 DW_LNS_advance_line (4) 0x00000030: 01 DW_LNS_copy 0x0000000000000005 4 0 1 0 0 is_stmt 0x00000031: 00 DW_LNE_set_address (0x0000000000000030) 0x00000038: 03 DW_LNS_advance_line (5) 0x0000003a: 05 DW_LNS_set_column (4) 0x0000003c: 0a DW_LNS_set_prologue_end 0x0000003d: 01 DW_LNS_copy 0x0000000000000030 5 4 1 0 0 is_stmt prologue_end 0x0000003e: 00 DW_LNE_set_address (0x0000000000000049) 0x00000045: 03 DW_LNS_advance_line (6) 0x00000047: 01 DW_LNS_copy 0x0000000000000049 6 4 1 0 0 is_stmt 0x00000048: 00 DW_LNE_set_address (0x0000000000000062) 0x0000004f: 03 DW_LNS_advance_line (7) 0x00000051: 05 DW_LNS_set_column (10) 0x00000053: 01 DW_LNS_copy 0x0000000000000062 7 10 1 0 0 is_stmt 0x00000054: 00 DW_LNE_set_address (0x0000000000000069) 0x0000005b: 05 DW_LNS_set_column (3) 0x0000005d: 06 DW_LNS_negate_stmt 0x0000005e: 01 DW_LNS_copy 0x0000000000000069 7 3 1 0 0 0x0000005f: 00 DW_LNE_set_address (0x000000000000006d) 0x00000066: 00 DW_LNE_end_sequence 0x000000000000006d 7 3 1 0 0 end_sequence 0x00000069: 00 DW_LNE_set_address (0x000000000000006e) 0x00000070: 03 DW_LNS_advance_line (16) 0x00000072: 01 DW_LNS_copy 0x000000000000006e 16 0 1 0 0 is_stmt 0x00000073: 00 DW_LNE_set_address (0x00000000000000a7) 0x0000007a: 03 DW_LNS_advance_line (17) 0x0000007c: 05 DW_LNS_set_column (10) 0x0000007e: 0a DW_LNS_set_prologue_end 0x0000007f: 01 DW_LNS_copy 0x00000000000000a7 17 10 1 0 0 is_stmt prologue_end 0x00000080: 00 DW_LNE_set_address (0x00000000000000ad) 0x00000087: 05 DW_LNS_set_column (25) 0x00000089: 06 DW_LNS_negate_stmt 0x0000008a: 01 DW_LNS_copy 0x00000000000000ad 17 25 1 0 0 0x0000008b: 00 DW_LNE_set_address (0x00000000000000b9) 0x00000092: 05 DW_LNS_set_column (19) 0x00000094: 01 DW_LNS_copy 0x00000000000000b9 17 19 1 0 0 0x00000095: 00 DW_LNE_set_address (0x00000000000000c0) 0x0000009c: 05 DW_LNS_set_column (3) 0x0000009e: 01 DW_LNS_copy 0x00000000000000c0 17 3 1 0 0 0x0000009f: 00 DW_LNE_set_address (0x00000000000000d3) 0x000000a6: 00 DW_LNE_end_sequence 0x00000000000000d3 17 3 1 0 0 end_sequence .debug_str contents: 0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)" 0x00000095: "a.cpp" 0x0000009b: "/home/alon/Dev/emscripten" 0x000000b5: "quine" 0x000000bb: "char" 0x000000c0: "int" 0x000000c4: "_Z4usedi" 0x000000cd: "used" 0x000000d2: "_Z6unusedi" 0x000000dd: "unused" 0x000000e4: "main" 0x000000e9: "x" .debug_ranges contents: 00000000 00000005 0000006d 00000000 00000010 0000006e 000000d3 00000010 (module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 1024) "\nvoid used(int x) {\n x++;\n x--;\n return x;\n}\n\nvoid unused(int x) {\n x >>= 1;\n x <<= 1;\n return x;\n}\n\nint main() {\n return used(42);\n}\n\00") (data (i32.const 1168) "\00\04\00\00") (import "env" "__indirect_function_table" (table $timport$0 1 funcref)) (global $global$0 (mut i32) (i32.const 5244064)) (global $global$1 i32 (i32.const 1172)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $used\28int\29 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) ;; code offset: 0x1c (local.set $1 ;; code offset: 0x1a (global.get $global$0) ) ;; code offset: 0x20 (local.set $2 ;; code offset: 0x1e (i32.const 16) ) ;; code offset: 0x27 (local.set $3 ;; code offset: 0x26 (i32.sub ;; code offset: 0x22 (local.get $1) ;; code offset: 0x24 (local.get $2) ) ) ;; code offset: 0x2d (i32.store offset=12 ;; code offset: 0x29 (local.get $3) ;; code offset: 0x2b (local.get $0) ) ;; code offset: 0x35 (local.set $4 ;; code offset: 0x32 (i32.load offset=12 ;; code offset: 0x30 (local.get $3) ) ) ;; code offset: 0x39 (local.set $5 ;; code offset: 0x37 (i32.const 1) ) ;; code offset: 0x40 (local.set $6 ;; code offset: 0x3f (i32.add ;; code offset: 0x3b (local.get $4) ;; code offset: 0x3d (local.get $5) ) ) ;; code offset: 0x46 (i32.store offset=12 ;; code offset: 0x42 (local.get $3) ;; code offset: 0x44 (local.get $6) ) ;; code offset: 0x4e (local.set $7 ;; code offset: 0x4b (i32.load offset=12 ;; code offset: 0x49 (local.get $3) ) ) ;; code offset: 0x52 (local.set $8 ;; code offset: 0x50 (i32.const -1) ) ;; code offset: 0x59 (local.set $9 ;; code offset: 0x58 (i32.add ;; code offset: 0x54 (local.get $7) ;; code offset: 0x56 (local.get $8) ) ) ;; code offset: 0x5f (i32.store offset=12 ;; code offset: 0x5b (local.get $3) ;; code offset: 0x5d (local.get $9) ) ;; code offset: 0x67 (local.set $10 ;; code offset: 0x64 (i32.load offset=12 ;; code offset: 0x62 (local.get $3) ) ) ;; code offset: 0x6b (return ;; code offset: 0x69 (local.get $10) ) ) (func $__original_main (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) ;; code offset: 0x87 (local.set $0 ;; code offset: 0x85 (global.get $global$0) ) ;; code offset: 0x8b (local.set $1 ;; code offset: 0x89 (i32.const 16) ) ;; code offset: 0x92 (local.set $2 ;; code offset: 0x91 (i32.sub ;; code offset: 0x8d (local.get $0) ;; code offset: 0x8f (local.get $1) ) ) ;; code offset: 0x96 (global.set $global$0 ;; code offset: 0x94 (local.get $2) ) ;; code offset: 0x9a (local.set $3 ;; code offset: 0x98 (i32.const 42) ) ;; code offset: 0x9e (local.set $4 ;; code offset: 0x9c (i32.const 0) ) ;; code offset: 0xa4 (i32.store offset=12 ;; code offset: 0xa0 (local.get $2) ;; code offset: 0xa2 (local.get $4) ) ;; code offset: 0xab (local.set $5 ;; code offset: 0xa9 (call $used\28int\29 ;; code offset: 0xa7 (local.get $3) ) ) ;; code offset: 0xaf (local.set $6 ;; code offset: 0xad (i32.const 0) ) ;; code offset: 0xb7 (local.set $7 ;; code offset: 0xb3 (i32.load offset=1168 ;; code offset: 0xb1 (local.get $6) ) ) ;; code offset: 0xbe (local.set $8 ;; code offset: 0xbd (i32.add ;; code offset: 0xb9 (local.get $5) ;; code offset: 0xbb (local.get $7) ) ) ;; code offset: 0xc2 (local.set $9 ;; code offset: 0xc0 (i32.const 16) ) ;; code offset: 0xc9 (local.set $10 ;; code offset: 0xc8 (i32.add ;; code offset: 0xc4 (local.get $2) ;; code offset: 0xc6 (local.get $9) ) ) ;; code offset: 0xcd (global.set $global$0 ;; code offset: 0xcb (local.get $10) ) ;; code offset: 0xd1 (return ;; code offset: 0xcf (local.get $8) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) (local $2 i32) ;; code offset: 0xd9 (local.set $2 ;; code offset: 0xd7 (call $__original_main) ) ;; code offset: 0xdd (return ;; code offset: 0xdb (local.get $2) ) ) ;; custom section ".debug_info", size 175 ;; custom section ".debug_ranges", size 32 ;; custom section ".debug_abbrev", size 117 ;; custom section ".debug_line", size 169 ;; custom section ".debug_str", size 235 ;; custom section "producers", size 180 ) binaryen-version_108/test/passes/ignore_missing_func_dwarf.passes000066400000000000000000000000461423707623100256540ustar00rootroot00000000000000print_dwarfdump_roundtrip_dwarfdump_g binaryen-version_108/test/passes/ignore_missing_func_dwarf.wasm000066400000000000000000000030141423707623100253230ustar00rootroot00000000000000asm````4envmemory€€env__indirect_function_tablepA ‰À A” )__wasm_call_ctorsmain __data_end Ô Z #€€€€!A!  k!  6 ( !A!  j!  6 ( !A!  j!  6 ( !  d #€€€€!A! k! $€€€€A*!A!  6 €€€!A! (‰€€!  j!A!  j! $€€€€  ‚€€€!   A€ Ž void used(int x) { x++; x--; return x; } void unused(int x) { x >>= 1; x <<= 1; return x; } int main() { return used(42); } A » .debug_info«•›µ7<A»ÀZÄÍH# éHZÒÝ H# é H`däH. .debug_ranges_`ă .debug_abbrev%U4I?: ; I&I$> .n: ; I?: ; I.: ; I?Œ .debug_line|û a.cpp »ƒ ƒt  »ƒ ƒt` -žätö .debug_strclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)a.cpp/home/alon/Dev/emscriptenquinecharint_Z4usediused_Z6unusediunusedmainx=name6__wasm_call_ctors used(int)__original_mainmain¾ producerslanguage C_plus_plus processed-byclang†10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)binaryen-version_108/test/passes/inlined_to_start_dwarf.bin.txt000066400000000000000000000452151423707623100252650ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (321 bytes) Contains section .debug_loc (104 bytes) Contains section .debug_ranges (32 bytes) Contains section .debug_abbrev (206 bytes) Contains section .debug_line (151 bytes) Contains section .debug_str (217 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_ranges DW_FORM_sec_offset [2] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_abstract_origin DW_FORM_ref4 [3] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_abstract_origin DW_FORM_ref4 [4] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_abstract_origin DW_FORM_ref4 [5] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present DW_AT_inline DW_FORM_data1 [6] DW_TAG_formal_parameter DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [7] DW_TAG_variable DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [8] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [9] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_linkage_name DW_FORM_strp DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [10] DW_TAG_variable DW_CHILDREN_no DW_AT_location DW_FORM_sec_offset DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 [11] DW_TAG_inlined_subroutine DW_CHILDREN_yes DW_AT_abstract_origin DW_FORM_ref4 DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_call_file DW_FORM_data1 DW_AT_call_line DW_FORM_data1 DW_AT_call_column DW_FORM_data1 [12] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [13] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [14] DW_TAG_pointer_type DW_CHILDREN_no DW_AT_type DW_FORM_ref4 .debug_info contents: 0x00000000: Compile Unit: length = 0x0000013d version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000141) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 12.0.0 (https://github.com/llvm/llvm-project.git 132f29ce0611754e0ffb2b534c34b2ffe27b40a8)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus_14) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000069] = "a.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000006f] = "/home/azakai/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 [0x00000000, 0x00000007) [0x00000005, 0x00000012) [0x00000013, 0x0000001b)) 0x00000026: DW_TAG_subprogram [2] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_high_pc [DW_FORM_data4] (0x00000000) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 +0, 00 00 9f) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x004a => {0x0000004a} "_Z6squarei") 0x0000003b: DW_TAG_formal_parameter [3] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x005a => {0x0000005a} "x") 0x00000040: DW_TAG_variable [4] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000006): [0x00000001, 0x00000001): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0065 => {0x00000065} "result") 0x00000049: NULL 0x0000004a: DW_TAG_subprogram [5] * DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x0000008b] = "_Z6squarei") DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000096] = "square") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") DW_AT_external [DW_FORM_flag_present] (true) DW_AT_inline [DW_FORM_data1] (DW_INL_inlined) 0x0000005a: DW_TAG_formal_parameter [6] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "x") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") 0x00000065: DW_TAG_variable [7] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a3] = "result") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (2) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") 0x00000070: NULL 0x00000071: DW_TAG_base_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009d] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000078: DW_TAG_subprogram [9] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x0000000d) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 +0, 00 00 9f) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000aa] = "_Z7dsquareii") DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b7] = "dsquare") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (6) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000097: DW_TAG_formal_parameter [6] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "x") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (6) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") 0x000000a2: DW_TAG_formal_parameter [6] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c4] = "y") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (6) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") 0x000000ad: DW_TAG_variable [10] DW_AT_location [DW_FORM_sec_offset] (0x0000001e: [0xffffffff, 0x00000010): [0x00000000, 0x00000001): DW_OP_WASM_location 0x2 +1, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c6] = "dsq") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (7) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") 0x000000bc: DW_TAG_inlined_subroutine [11] * DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x004a => {0x0000004a} "_Z6squarei") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005) DW_AT_high_pc [DW_FORM_data4] (0x00000006) DW_AT_call_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_call_line [DW_FORM_data1] (8) DW_AT_call_column [DW_FORM_data1] (0x0a) 0x000000cc: DW_TAG_formal_parameter [3] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x005a => {0x0000005a} "x") 0x000000d1: NULL 0x000000d2: DW_TAG_inlined_subroutine [11] * DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x004a => {0x0000004a} "_Z6squarei") DW_AT_low_pc [DW_FORM_addr] (0x000000000000000b) DW_AT_high_pc [DW_FORM_data4] (0x00000005) DW_AT_call_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_call_line [DW_FORM_data1] (7) DW_AT_call_column [DW_FORM_data1] (0x0d) 0x000000e2: DW_TAG_formal_parameter [3] DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x005a => {0x0000005a} "x") 0x000000e7: NULL 0x000000e8: NULL 0x000000e9: DW_TAG_subprogram [12] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000013) DW_AT_high_pc [DW_FORM_data4] (0x00000008) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 +0, 00 00 9f) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000bf] = "main") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (12) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000104: DW_TAG_formal_parameter [6] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ca] = "argc") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (12) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") 0x0000010f: DW_TAG_formal_parameter [6] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cf] = "argv") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (12) DW_AT_type [DW_FORM_ref4] (cu + 0x012f => {0x0000012f} "char**") 0x0000011a: DW_TAG_variable [10] DW_AT_location [DW_FORM_sec_offset] (0x0000004a: [0xffffffff, 0x00000000): [0x00000001, 0x00000001): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000a3] = "result") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/a.cpp") DW_AT_decl_line [DW_FORM_data1] (13) DW_AT_type [DW_FORM_ref4] (cu + 0x0071 => {0x00000071} "int") 0x00000129: DW_TAG_GNU_call_site [13] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) 0x0000012e: NULL 0x0000012f: DW_TAG_pointer_type [14] DW_AT_type [DW_FORM_ref4] (cu + 0x0134 => {0x00000134} "char*") 0x00000134: DW_TAG_pointer_type [14] DW_AT_type [DW_FORM_ref4] (cu + 0x0139 => {0x00000139} "char") 0x00000139: DW_TAG_base_type [8] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d4] = "char") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char) DW_AT_byte_size [DW_FORM_data1] (0x01) 0x00000140: NULL .debug_loc contents: 0x00000000: [0xffffffff, 0x00000006): [0x00000001, 0x00000001): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value 0x0000001e: [0xffffffff, 0x00000010): [0x00000000, 0x00000001): DW_OP_WASM_location 0x2 +1, DW_OP_stack_value [0x00000001, 0x00000001): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value 0x0000004a: [0xffffffff, 0x00000000): [0x00000001, 0x00000001): DW_OP_WASM_location 0x2 +0, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000093 version: 4 prologue_length: 0x0000001d min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "a.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000027: 00 DW_LNE_set_address (0x0000000000000005) 0x0000002e: 03 DW_LNS_advance_line (6) 0x00000030: 01 DW_LNS_copy 0x0000000000000005 6 0 1 0 0 is_stmt 0x00000031: 00 DW_LNE_set_address (0x0000000000000006) 0x00000038: 03 DW_LNS_advance_line (2) 0x0000003a: 05 DW_LNS_set_column (18) 0x0000003c: 0a DW_LNS_set_prologue_end 0x0000003d: 01 DW_LNS_copy 0x0000000000000006 2 18 1 0 0 is_stmt prologue_end 0x0000003e: 00 DW_LNE_set_address (0x000000000000000b) 0x00000045: 06 DW_LNS_negate_stmt 0x00000046: 01 DW_LNS_copy 0x000000000000000b 2 18 1 0 0 0x00000047: 00 DW_LNE_set_address (0x0000000000000010) 0x0000004e: 03 DW_LNS_advance_line (8) 0x00000050: 05 DW_LNS_set_column (7) 0x00000052: 06 DW_LNS_negate_stmt 0x00000053: 01 DW_LNS_copy 0x0000000000000010 8 7 1 0 0 is_stmt 0x00000054: 00 DW_LNE_set_address (0x0000000000000011) 0x0000005b: 03 DW_LNS_advance_line (9) 0x0000005d: 05 DW_LNS_set_column (3) 0x0000005f: 01 DW_LNS_copy 0x0000000000000011 9 3 1 0 0 is_stmt 0x00000060: 00 DW_LNE_set_address (0x0000000000000012) 0x00000067: 00 DW_LNE_end_sequence 0x0000000000000012 9 3 1 0 0 is_stmt end_sequence 0x0000006a: 00 DW_LNE_set_address (0x0000000000000013) 0x00000071: 03 DW_LNS_advance_line (12) 0x00000073: 01 DW_LNS_copy 0x0000000000000013 12 0 1 0 0 is_stmt 0x00000074: 00 DW_LNE_set_address (0x0000000000000018) 0x0000007b: 03 DW_LNS_advance_line (13) 0x0000007d: 05 DW_LNS_set_column (16) 0x0000007f: 0a DW_LNS_set_prologue_end 0x00000080: 01 DW_LNS_copy 0x0000000000000018 13 16 1 0 0 is_stmt prologue_end 0x00000081: 00 DW_LNE_set_address (0x000000000000001a) 0x00000088: 03 DW_LNS_advance_line (14) 0x0000008a: 05 DW_LNS_set_column (3) 0x0000008c: 01 DW_LNS_copy 0x000000000000001a 14 3 1 0 0 is_stmt 0x0000008d: 00 DW_LNE_set_address (0x000000000000001b) 0x00000094: 00 DW_LNE_end_sequence 0x000000000000001b 14 3 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 12.0.0 (https://github.com/llvm/llvm-project.git 132f29ce0611754e0ffb2b534c34b2ffe27b40a8)" 0x00000069: "a.cpp" 0x0000006f: "/home/azakai/Dev/emscripten" 0x0000008b: "_Z6squarei" 0x00000096: "square" 0x0000009d: "int" 0x000000a1: "x" 0x000000a3: "result" 0x000000aa: "_Z7dsquareii" 0x000000b7: "dsquare" 0x000000bf: "main" 0x000000c4: "y" 0x000000c6: "dsq" 0x000000ca: "argc" 0x000000cf: "argv" 0x000000d4: "char" .debug_ranges contents: 00000000 00000000 00000007 00000000 00000005 00000012 00000000 00000013 0000001b 00000000 (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 1024) "\00\00\00\00") (global $global$0 (mut i32) (i32.const 5243920)) (global $global$1 i32 (i32.const 1028)) (table $0 1 1 funcref) (export "__indirect_function_table" (table $0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__errno_location" (func $__errno_location)) (export "stackSave" (func $stackSave)) (export "stackRestore" (func $stackRestore)) (export "stackAlloc" (func $stackAlloc)) (export "__data_end" (global $global$1)) (func $__wasm_call_ctors ) (func $dsquare\28int\2c\20int\29 (param $0 i32) (param $1 i32) (result i32) ;; code offset: 0x10 (i32.add ;; code offset: 0xa (i32.mul ;; code offset: 0x6 (local.get $1) ;; code offset: 0x8 (local.get $1) ) ;; code offset: 0xf (i32.mul ;; code offset: 0xb (local.get $0) ;; code offset: 0xd (local.get $0) ) ) ) (func $main (param $0 i32) (param $1 i32) (result i32) ;; code offset: 0x18 (call $dsquare\28int\2c\20int\29 ;; code offset: 0x14 (i32.const 6) ;; code offset: 0x16 (i32.const 8) ) ) (func $stackSave (result i32) ;; code offset: 0x1d (global.get $global$0) ) (func $stackRestore (param $0 i32) ;; code offset: 0x24 (global.set $global$0 ;; code offset: 0x22 (local.get $0) ) ) (func $stackAlloc (param $0 i32) (result i32) (local $1 i32) (local $2 i32) ;; code offset: 0x37 (global.set $global$0 ;; code offset: 0x35 (local.tee $1 ;; code offset: 0x34 (i32.and ;; code offset: 0x31 (i32.sub ;; code offset: 0x2d (global.get $global$0) ;; code offset: 0x2f (local.get $0) ) ;; code offset: 0x32 (i32.const -16) ) ) ) ;; code offset: 0x39 (local.get $1) ) (func $__errno_location (result i32) ;; code offset: 0x3e (i32.const 1024) ) ;; custom section ".debug_info", size 321 ;; custom section ".debug_loc", size 104 ;; custom section ".debug_ranges", size 32 ;; custom section ".debug_abbrev", size 206 ;; custom section ".debug_line", size 151 ;; custom section ".debug_str", size 217 ) binaryen-version_108/test/passes/inlined_to_start_dwarf.passes000066400000000000000000000000261423707623100251640ustar00rootroot00000000000000g_roundtrip_dwarfdump binaryen-version_108/test/passes/inlined_to_start_dwarf.wasm000077500000000000000000000030311423707623100246370ustar00rootroot00000000000000asm—€€€`````’€€€envmemory€€ˆ€€€…€€€p€€€AˆÀ A„ €€€__indirect_function_table__wasm_call_ctorsmain__errno_location stackSave stackRestore stackAlloc __data_end ×€€€  l lj AA€€€ #€€€€ $€€€€ #€€€€ kApq"$€€€€  A€ˆ€€ ‹€€€A€ Í‚€€ .debug_info=!ioíŸJZe‹–q¡q£q  ퟪ·q¡qÄq Æq J Z J  Z  ퟿ qÊ qÏ / J£ q 49Ôó€€€ .debug_locÿÿÿÿíŸÿÿÿÿ íŸ íŸÿÿÿÿ ퟮ€€€ .debug_rangesÜ€€ .debug_abbrev%U.@—B1141.n: ; I? : ; I4: ; I$> .@—Bn: ; I? 4: ; I 1X Y W .@—B: ; I? ‰‚I÷€€€ .debug_linegû a.cpp !Y X^!  Yg䀀 .debug_strclang version 12.0.0 (https://github.com/llvm/llvm-project.git 132f29ce0611754e0ffb2b534c34b2ffe27b40a8)a.cpp/home/azakai/Dev/emscripten_Z6squareisquareintxresult_Z7dsquareiidsquaremainydsqargcargvchar뀀€named__wasm_call_ctorsdsquare(int, int)main stackSave stackRestore stackAlloc__errno_locationbinaryen-version_108/test/passes/interesting-pass-mix.passes000066400000000000000000000002201423707623100245260ustar00rootroot00000000000000flatten_rereloop_dce_remove-unused-brs_remove-unused-names_coalesce-locals_simplify-locals_reorder-locals_remove-unused-brs_merge-blocks_vacuum binaryen-version_108/test/passes/interesting-pass-mix.txt000066400000000000000000000067221423707623100240640ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (func $trivial (nop) ) (func $trivial2 (call $trivial) (call $trivial) ) (func $return-void (nop) ) (func $return-val (result i32) (i32.const 1) ) (func $ifs (param $0 i32) (result i32) (select (select (i32.const 2) (i32.const 3) (local.get $0) ) (select (i32.const 4) (i32.const 5) (local.get $0) ) (local.get $0) ) ) (func $loops (param $0 i32) (if (local.get $0) (loop $shape$2$continue (call $trivial) (br $shape$2$continue) ) ) (loop $shape$4$continue (call $trivial) (if (local.get $0) (br $shape$4$continue) ) ) (loop $shape$6$continue (call $trivial) (if (local.get $0) (br $shape$6$continue) ) ) ) (func $br-out (param $0 i32) (call $br-out (i32.const 5) ) ) (func $unreachable (param $0 i32) (if (i32.eqz (local.get $0) ) (block (call $unreachable (i32.const 5) ) (return) ) ) (if (local.get $0) (block (call $unreachable (i32.const 1) ) (unreachable) ) (call $unreachable (i32.const 3) ) ) ) (func $empty-blocks (param $0 i32) (nop) ) (func $before-and-after (param $0 i32) (call $before-and-after (i32.const 1) ) (call $before-and-after (i32.const 2) ) (call $before-and-after (i32.const 3) ) (call $before-and-after (i32.const 4) ) (if (i32.eqz (local.get $0) ) (call $before-and-after (i32.const 5) ) ) (call $before-and-after (i32.const 6) ) (call $before-and-after (i32.const 7) ) (call $before-and-after (i32.const 8) ) (loop $shape$4$continue (call $before-and-after (i32.const 9) ) (if (local.get $0) (br $shape$4$continue) ) ) (call $before-and-after (i32.const 10) ) (call $before-and-after (i32.const 11) ) (if (local.get $0) (call $before-and-after (i32.const 12) ) ) (call $before-and-after (i32.const 13) ) (if (local.get $0) (call $before-and-after (i32.const 14) ) (call $before-and-after (i32.const 15) ) ) (if (local.get $0) (call $before-and-after (i32.const 16) ) ) (call $before-and-after (i32.const 17) ) (call $before-and-after (i32.const 18) ) (call $before-and-after (i32.const 19) ) (call $before-and-after (i32.const 20) ) (call $before-and-after (i32.const 21) ) (call $before-and-after (i32.const 22) ) (call $before-and-after (i32.const 23) ) (call $before-and-after (i32.const 24) ) (call $before-and-after (i32.const 25) ) ) (func $switch (param $0 i32) (call $switch (i32.const 1) ) (block $block$7$break (block $switch$3$default (block $switch$3$case$7 (br_table $switch$3$case$7 $switch$3$case$7 $switch$3$case$7 $switch$3$default (local.get $0) ) ) (br $block$7$break) ) (call $switch (i32.const 2) ) ) (call $switch (i32.const 3) ) ) (func $no-return (nop) ) (func $if-br-wat (param $0 i32) (call $if-br-wat (i32.const 0) ) (block $block$2$break (if (local.get $0) (call $if-br-wat (i32.const 1) ) (if (local.get $0) (br $block$2$break) ) ) (call $if-br-wat (i32.const 2) ) ) (call $if-br-wat (i32.const 3) ) ) ) binaryen-version_108/test/passes/interesting-pass-mix.wast000066400000000000000000000072701423707623100242220ustar00rootroot00000000000000(module (func $trivial (nop) ) (func $trivial2 (call $trivial) (call $trivial) ) (func $return-void (return) ) (func $return-val (result i32) (return (i32.const 1)) ) (func $ifs (param $x i32) (result i32) (if (local.get $x) (if (local.get $x) (return (i32.const 2)) (return (i32.const 3)) ) ) (if (local.get $x) (return (i32.const 4)) ) (return (i32.const 5)) ) (func $loops (param $x i32) (if (local.get $x) (loop $top (call $trivial) (br $top) ) ) (loop $top2 (call $trivial) (br_if $top2 (local.get $x)) ) (loop $top3 (call $trivial) (if (local.get $x) (br $top3)) ) ) (func $br-out (param $x i32) (block $out (call $br-out (i32.const 5)) (br $out) ) ) (func $unreachable (param $x i32) (if (local.get $x) (if (local.get $x) (block (call $unreachable (i32.const 1)) (unreachable) (call $unreachable (i32.const 2)) ) (block (call $unreachable (i32.const 3)) (return) (call $unreachable (i32.const 4)) ) ) ) (block $out (call $unreachable (i32.const 5)) (br $out) (call $unreachable (i32.const 6)) ) ) (func $empty-blocks (param $x i32) (block) (block) ) (func $before-and-after (param $x i32) (call $before-and-after (i32.const 1)) (block (call $before-and-after (i32.const 2)) ) (call $before-and-after (i32.const 3)) (block $out (call $before-and-after (i32.const 4)) (br_if $out (local.get $x)) (call $before-and-after (i32.const 5)) ) (call $before-and-after (i32.const 6)) (loop) (call $before-and-after (i32.const 7)) (loop $top) (call $before-and-after (i32.const 8)) (loop $top2 (call $before-and-after (i32.const 9)) (br_if $top2 (local.get $x)) (call $before-and-after (i32.const 10)) ) (call $before-and-after (i32.const 11)) (if (local.get $x) (call $before-and-after (i32.const 12)) ) (call $before-and-after (i32.const 13)) (if (local.get $x) (call $before-and-after (i32.const 14)) (call $before-and-after (i32.const 15)) ) (if (local.get $x) (block (call $before-and-after (i32.const 16)) ) ) (call $before-and-after (i32.const 17)) (block (call $before-and-after (i32.const 18)) (block (call $before-and-after (i32.const 19)) ) (call $before-and-after (i32.const 20)) ) (call $before-and-after (i32.const 21)) (block (block (call $before-and-after (i32.const 22)) ) ) (call $before-and-after (i32.const 23)) (block $no1 (block $no2 (call $before-and-after (i32.const 24)) ) ) (call $before-and-after (i32.const 25)) ) (func $switch (param $x i32) (block $out (block $a (br_table $a $a (local.get $x)) ) (call $switch (i32.const 1)) (block $b (block $c (br_table $b $b $b $c (local.get $x)) ) (call $switch (i32.const 2)) ) (call $switch (i32.const 3)) ) ) (func $no-return (if (i32.const 1) (drop (i32.const 2)) (drop (i32.const 3)) ) ) (func $if-br-wat (param $x i32) (call $if-br-wat (i32.const 0) ) (block $label$2 (if (local.get $x) (call $if-br-wat (i32.const 1) ) (if (local.get $x) (br $label$2) ;; waka ) ) (call $if-br-wat (i32.const 2) ) ) (call $if-br-wat (i32.const 3) ) ) ) binaryen-version_108/test/passes/legalize-js-interface-minimally.txt000066400000000000000000000021671423707623100261260ustar00rootroot00000000000000(module (type $none_=>_i64 (func (result i64))) (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $i64_=>_none (func (param i64))) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "imported" (func $imported (result i64))) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (import "env" "invoke_vj" (func $legalimport$invoke_vj (param i32 i32))) (export "func" (func $func)) (export "dynCall_foo" (func $legalstub$dyn)) (func $func (result i64) (drop (call $imported) ) (call $legalfunc$invoke_vj (i64.const 0) ) (unreachable) ) (func $dyn (result i64) (drop (call $imported) ) (unreachable) ) (func $legalstub$dyn (result i32) (local $0 i64) (local.set $0 (call $dyn) ) (call $setTempRet0 (i32.wrap_i64 (i64.shr_u (local.get $0) (i64.const 32) ) ) ) (i32.wrap_i64 (local.get $0) ) ) (func $legalfunc$invoke_vj (param $0 i64) (call $legalimport$invoke_vj (i32.wrap_i64 (local.get $0) ) (i32.wrap_i64 (i64.shr_u (local.get $0) (i64.const 32) ) ) ) ) ) (module ) binaryen-version_108/test/passes/legalize-js-interface-minimally.wast000066400000000000000000000006121423707623100262560ustar00rootroot00000000000000(module (import "env" "imported" (func $imported (result i64))) (import "env" "invoke_vj" (func $invoke_vj (param i64))) (export "func" (func $func)) (export "dynCall_foo" (func $dyn)) (func $func (result i64) (drop (call $imported)) (call $invoke_vj (i64.const 0)) (unreachable) ) (func $dyn (result i64) (drop (call $imported)) (unreachable) ) ) (module) binaryen-version_108/test/passes/legalize-js-interface_all-features.txt000066400000000000000000000056071423707623100266030ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_i64 (func (result i64))) (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_i64_i64_=>_none (func (param i32 i64 i64))) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (import "env" "getTempRet0" (func $getTempRet0 (result i32))) (import "env" "imported" (func $legalimport$imported (result i32))) (import "env" "other" (func $legalimport$other (param i32 i32 i32 i32 i32))) (import "env" "ref-func-arg" (func $legalimport$ref-func-arg (result i32))) (elem declare func $legalfunc$ref-func-arg) (export "func" (func $legalstub$func)) (export "ref-func-test" (func $ref-func-test)) (export "imported" (func $legalstub$imported)) (export "imported_again" (func $legalstub$imported)) (export "other" (func $legalstub$other)) (func $func (result i64) (drop (call $legalfunc$imported) ) (call $legalfunc$other (i32.const 0) (i64.const 0) (i64.const 0) ) (unreachable) ) (func $ref-func-test (drop (call $legalfunc$ref-func-arg) ) (drop (ref.func $legalfunc$ref-func-arg) ) ) (func $legalstub$func (result i32) (local $0 i64) (local.set $0 (call $func) ) (call $setTempRet0 (i32.wrap_i64 (i64.shr_u (local.get $0) (i64.const 32) ) ) ) (i32.wrap_i64 (local.get $0) ) ) (func $legalstub$imported (result i32) (local $0 i64) (local.set $0 (call $legalfunc$imported) ) (call $setTempRet0 (i32.wrap_i64 (i64.shr_u (local.get $0) (i64.const 32) ) ) ) (i32.wrap_i64 (local.get $0) ) ) (func $legalstub$other (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (call $legalfunc$other (local.get $0) (i64.or (i64.extend_i32_u (local.get $1) ) (i64.shl (i64.extend_i32_u (local.get $2) ) (i64.const 32) ) ) (i64.or (i64.extend_i32_u (local.get $3) ) (i64.shl (i64.extend_i32_u (local.get $4) ) (i64.const 32) ) ) ) ) (func $legalfunc$imported (result i64) (i64.or (i64.extend_i32_u (call $legalimport$imported) ) (i64.shl (i64.extend_i32_u (call $getTempRet0) ) (i64.const 32) ) ) ) (func $legalfunc$other (param $0 i32) (param $1 i64) (param $2 i64) (call $legalimport$other (local.get $0) (i32.wrap_i64 (local.get $1) ) (i32.wrap_i64 (i64.shr_u (local.get $1) (i64.const 32) ) ) (i32.wrap_i64 (local.get $2) ) (i32.wrap_i64 (i64.shr_u (local.get $2) (i64.const 32) ) ) ) ) (func $legalfunc$ref-func-arg (result i64) (i64.or (i64.extend_i32_u (call $legalimport$ref-func-arg) ) (i64.shl (i64.extend_i32_u (call $getTempRet0) ) (i64.const 32) ) ) ) ) (module ) binaryen-version_108/test/passes/legalize-js-interface_all-features.wast000066400000000000000000000013311423707623100267300ustar00rootroot00000000000000(module (import "env" "imported" (func $imported (result i64))) (import "env" "other" (func $other (param i32) (param i64) (param i64))) (import "env" "ref-func-arg" (func $ref-func-arg (result i64))) (export "func" (func $func)) (export "ref-func-test" (func $ref-func-test)) (export "imported" (func $imported)) (export "imported_again" (func $imported)) (export "other" (func $other)) (func $func (result i64) (drop (call $imported)) (call $other (i32.const 0) (i64.const 0) (i64.const 0) ) (unreachable) ) ;; ref.func must also be updated. (func $ref-func-test (drop (call $ref-func-arg) ) (drop (ref.func $ref-func-arg) ) ) ) (module) legalize-js-interface_pass-arg=legalize-js-interface-export-originals.txt000066400000000000000000000010501423707623100353270ustar00rootroot00000000000000binaryen-version_108/test/passes(module (type $none_=>_i64 (func (result i64))) (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (import "env" "setTempRet0" (func $setTempRet0 (param i32))) (export "func" (func $legalstub$func)) (export "orig$func" (func $func)) (func $func (result i64) (unreachable) ) (func $legalstub$func (result i32) (local $0 i64) (local.set $0 (call $func) ) (call $setTempRet0 (i32.wrap_i64 (i64.shr_u (local.get $0) (i64.const 32) ) ) ) (i32.wrap_i64 (local.get $0) ) ) ) legalize-js-interface_pass-arg=legalize-js-interface-export-originals.wast000066400000000000000000000001331423707623100354670ustar00rootroot00000000000000binaryen-version_108/test/passes(module (export "func" (func $func)) (func $func (result i64) (unreachable) ) ) binaryen-version_108/test/passes/licm.txt000066400000000000000000000214671423707623100207210ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $none_=>_i64 (func (result i64))) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (global $glob (mut i32) (i32.const 1)) (global $glob-imm i32 (i32.const 1)) (memory $0 1) (func $loop1 (drop (i32.const 10) ) (loop $loop (nop) (br_if $loop (i32.const 1) ) ) ) (func $loop2 (drop (i32.const 10) ) (drop (i32.const 20) ) (loop $loop (nop) (nop) (br_if $loop (i32.const 1) ) ) ) (func $loop3 (drop (i32.const 10) ) (drop (i32.const 20) ) (loop $loop (nop) (call $loop2) (nop) (br_if $loop (i32.const 1) ) ) ) (func $loop4 (drop (i32.load (i32.const 1) ) ) (loop $loop (nop) (br_if $loop (i32.const 1) ) ) ) (func $loop3-4 (loop $loop (drop (i32.load (i32.const 10) ) ) (call $loop2) (drop (i32.load (i32.const 20) ) ) (br_if $loop (i32.const 1) ) ) ) (func $loop3-4-b (drop (i32.load (i32.const 10) ) ) (drop (i32.load (i32.const 20) ) ) (loop $loop (nop) (nop) (br_if $loop (i32.const 1) ) ) ) (func $loop5 (loop $loop (i32.store (i32.const 1) (i32.const 2) ) (br_if $loop (i32.const 1) ) ) ) (func $loop6 (loop $loop (i32.store (i32.const 1) (i32.const 2) ) (i32.store (i32.const 2) (i32.const 3) ) ) ) (func $loop7 (loop $loop (i32.store (i32.const 1) (i32.const 2) ) (i32.store (i32.const 2) (i32.const 3) ) (br_if $loop (i32.const 1) ) ) ) (func $loop8 (loop $loop (i32.store (i32.const 1) (i32.const 2) ) (br_if $loop (i32.const 1) ) ) ) (func $loop9 (loop $loop (drop (i32.load (i32.const 1) ) ) (i32.store (i32.const 1) (i32.const 2) ) (br_if $loop (i32.const 1) ) ) ) (func $loop10 (drop (i32.load (i32.const 1) ) ) (drop (i32.load (i32.const 2) ) ) (loop $loop (nop) (nop) (br_if $loop (i32.const 1) ) ) ) (func $loop11 (local $x i32) (local $y i32) (loop $loop (drop (local.get $x) ) (br_if $loop (local.tee $x (i32.const 2) ) ) ) ) (func $loop12 (local $x i32) (local $y i32) (drop (local.get $x) ) (loop $loop (nop) (br_if $loop (local.tee $y (i32.const 2) ) ) ) ) (func $loop13 (local $x i32) (local $y i32) (local.set $x (i32.eqz (local.get $y) ) ) (loop $loop (nop) (call $loop12) (br_if $loop (i32.const 1) ) ) ) (func $loop14 (local $x i32) (local $y i32) (local.set $x (i32.eqz (local.get $y) ) ) (loop $loop (nop) (call $loop12) (br_if $loop (i32.const 1) ) (local.set $y (local.get $x) ) ) ) (func $loop14-1 (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.eqz (local.get $y) ) ) (call $loop12) (local.set $y (local.get $x) ) (br_if $loop (i32.const 1) ) ) ) (func $loop15 (local $x i32) (local $y i32) (local.set $x (i32.eqz (local.get $y) ) ) (loop $loop (nop) (call $loop12) (br_if $loop (i32.const 1) ) (drop (local.get $y) ) ) ) (func $loop15-1 (local $x i32) (local $y i32) (local.set $x (i32.eqz (local.get $y) ) ) (drop (local.get $y) ) (loop $loop (nop) (call $loop12) (nop) (br_if $loop (i32.const 1) ) ) ) (func $loop16 (local $x i32) (local $y i32) (local.set $x (i32.eqz (local.get $y) ) ) (loop $loop (nop) (call $loop12) (br_if $loop (i32.const 1) ) (drop (local.get $x) ) ) ) (func $loop16-1 (local $x i32) (local $y i32) (local.set $x (i32.eqz (local.get $y) ) ) (drop (local.get $x) ) (loop $loop (nop) (call $loop12) (nop) (br_if $loop (i32.const 1) ) ) ) (func $loop16-2 (local $x i32) (local $y i32) (local.set $x (i32.const 2) ) (block (local.set $x (i32.eqz (local.get $y) ) ) (drop (local.get $x) ) (loop $loop (nop) (call $loop12) (nop) (br_if $loop (i32.const 1) ) ) ) ) (func $loop16-3 (local $x i32) (local $y i32) (local.set $y (i32.const 2) ) (block (local.set $x (i32.eqz (local.get $y) ) ) (drop (local.get $x) ) (loop $loop (nop) (call $loop12) (nop) (br_if $loop (i32.const 1) ) ) ) ) (func $nop (loop $loop (nop) (br_if $loop (i32.const 1) ) ) ) (func $nested-blocks (loop $loop (block $block (nop) ) (block $x (nop) ) (block $a (block $b (block $c (nop) ) ) ) (br_if $loop (i32.const 1) ) ) ) (func $nested-unhoistable-blocks (loop $loop (block $block (call $nested-unhoistable-blocks) ) (block $x (call $nested-unhoistable-blocks) ) (block $a (block $b (block $c (call $nested-unhoistable-blocks) ) ) ) (br_if $loop (i32.const 1) ) ) ) (func $conditional (if (i32.const 0) (drop (i32.const 10) ) ) (loop $loop (nop) (br_if $loop (i32.const 1) ) ) ) (func $conditional1 (result i32) (loop $loop (if (call $conditional1) (drop (i32.const 10) ) ) (br_if $loop (i32.const 1) ) ) (unreachable) ) (func $conditional2 (block $out (loop $loop (br_if $out (i32.const 1) ) (drop (i32.const 10) ) (br_if $loop (i32.const 1) ) ) ) ) (func $conditional3 (block $out (block (drop (i32.const 10) ) (loop $loop (nop) (br_if $out (i32.const 1) ) (br_if $loop (i32.const 1) ) ) ) ) ) (func $after (loop $loop (nop) ) (drop (i32.const 10) ) ) (func $loops (drop (i32.const 10) ) (loop $loop2 (nop) (loop $loop1 (nop) (br_if $loop1 (i32.const 1) ) ) ) ) (func $loops2 (drop (i32.const 10) ) (loop $loop2 (nop) (loop $loop1 (nop) (br_if $loop2 (i32.const 1) ) ) ) ) (func $fuzz1 (result i64) (local $var$1 i64) (drop (block (result i32) (local.set $var$1 (block $label$5 (result i64) (local.set $var$1 (i64.const -29585) ) (i64.const -70) ) ) (loop $label$4 (result i32) (nop) (i32.const 1) ) ) ) (loop $label$1 (result i64) (block $label$2 (block $label$3 (nop) (br $label$2) ) (unreachable) ) (local.get $var$1) ) ) (func $self (result i32) (local $x i32) (loop $loop (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) (br_if $loop (i32.const 1) ) ) (local.get $x) ) (func $nested-set (local $var$0 i32) (local $var$1 i64) (loop $label$1 (local.set $var$0 (block $label$3 (result i32) (local.set $var$1 (i64.const 0) ) (local.get $var$0) ) ) (local.set $var$1 (i64.const 1) ) (br_if $label$1 (i32.const 0) ) ) ) (func $load-store (param $x i32) (loop $loop (drop (i32.load (i32.const 0) ) ) (i32.store (local.get $x) (local.get $x) ) (br_if $loop (i32.const 1) ) ) ) (func $set-set (param $x i32) (result i32) (loop $loop (local.set $x (i32.const 1) ) (br_if $loop (i32.const 2) ) (local.set $x (i32.const 3) ) (br_if $loop (i32.const 4) ) ) (local.get $x) ) (func $copies-no (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local $c i32) (loop $loop (local.set $x (local.get $x) ) (local.set $y (local.get $z) ) (local.set $a (local.tee $b (local.get $c) ) ) (br_if $loop (i32.const 1) ) ) ) (func $consts-no (local $x i32) (local $a i32) (local $b i32) (loop $loop (local.set $x (i32.const 0) ) (local.set $a (local.tee $b (i32.const 1) ) ) (br_if $loop (i32.const 1) ) ) ) (func $global (local $x i32) (local.set $x (global.get $glob) ) (drop (local.get $x) ) (loop $loop (nop) (nop) (br_if $loop (local.get $x) ) ) ) (func $global-call (local $x i32) (loop $loop (local.set $x (global.get $glob) ) (call $global) (drop (local.get $x) ) (br_if $loop (local.get $x) ) ) ) (func $global-call-immutable (local $x i32) (local.set $x (global.get $glob-imm) ) (drop (local.get $x) ) (loop $loop (nop) (call $global) (nop) (br_if $loop (local.get $x) ) ) ) ) binaryen-version_108/test/passes/licm.wast000066400000000000000000000223111423707623100210450ustar00rootroot00000000000000(module (memory 1) (global $glob (mut i32) (i32.const 1)) (global $glob-imm i32 (i32.const 1)) (func $loop1 (loop $loop (drop (i32.const 10)) (br_if $loop (i32.const 1)) ) ) (func $loop2 (loop $loop (drop (i32.const 10)) (drop (i32.const 20)) (br_if $loop (i32.const 1)) ) ) (func $loop3 (loop $loop (drop (i32.const 10)) (call $loop2) (drop (i32.const 20)) (br_if $loop (i32.const 1)) ) ) (func $loop4 (loop $loop (drop (i32.load (i32.const 1))) (br_if $loop (i32.const 1)) ) ) (func $loop3-4 (loop $loop (drop (i32.load (i32.const 10))) (call $loop2) ;; may have global side effects which alter a load! (drop (i32.load (i32.const 20))) ;; this load must stay put (br_if $loop (i32.const 1)) ) ) (func $loop3-4-b (; 4 ;) (loop $loop (drop (i32.load (i32.const 10) ) ) (drop (i32.load (i32.const 20) ) ) (br_if $loop (i32.const 1) ) ) ) (func $loop5 (loop $loop (i32.store (i32.const 1) (i32.const 2)) (br_if $loop (i32.const 1)) ) ) (func $loop6 (loop $loop (i32.store (i32.const 1) (i32.const 2)) (i32.store (i32.const 2) (i32.const 3)) ) ) (func $loop7 (loop $loop (i32.store (i32.const 1) (i32.const 2)) (i32.store (i32.const 2) (i32.const 3)) (br_if $loop (i32.const 1)) ) ) (func $loop8 (loop $loop (i32.store (i32.const 1) (i32.const 2)) (br_if $loop (i32.const 1)) ) ) (func $loop9 (loop $loop (drop (i32.load (i32.const 1))) (i32.store (i32.const 1) (i32.const 2)) (br_if $loop (i32.const 1)) ) ) (func $loop10 (loop $loop (drop (i32.load (i32.const 1))) (drop (i32.load (i32.const 2))) (br_if $loop (i32.const 1)) ) ) (func $loop11 (local $x i32) (local $y i32) (loop $loop (drop (local.get $x)) (br_if $loop (local.tee $x (i32.const 2))) ) ) (func $loop12 (local $x i32) (local $y i32) (loop $loop (drop (local.get $x)) (br_if $loop (local.tee $y (i32.const 2))) ) ) (func $loop13 (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (br_if $loop (i32.const 1)) ) ) (func $loop14 (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (br_if $loop (i32.const 1)) (local.set $y (local.get $x)) ;; not actually in the loop! ) ) (func $loop14-1 (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (local.set $y (local.get $x)) ;; in the loop (br_if $loop (i32.const 1)) ) ) (func $loop15 (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (br_if $loop (i32.const 1)) (drop (local.get $y)) ) ) (func $loop15-1 (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (drop (local.get $y)) (br_if $loop (i32.const 1)) ) ) (func $loop16 (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (br_if $loop (i32.const 1)) (drop (local.get $x)) ) ) (func $loop16-1 (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (drop (local.get $x)) (br_if $loop (i32.const 1)) ) ) (func $loop16-2 (local $x i32) (local $y i32) (local.set $x (i32.const 2)) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (drop (local.get $x)) (br_if $loop (i32.const 1)) ) ) (func $loop16-3 (local $x i32) (local $y i32) (local.set $y (i32.const 2)) (loop $loop (local.set $x (i32.eqz (local.get $y))) (call $loop12) (drop (local.get $x)) (br_if $loop (i32.const 1)) ) ) (func $nop (loop $loop (nop) (br_if $loop (i32.const 1)) ) ) (func $nested-blocks (loop $loop (block (nop) ) (block $x (nop) ) (block $a (block $b (block $c (nop) ) ) ) (br_if $loop (i32.const 1)) ) ) (func $nested-unhoistable-blocks (loop $loop (block (call $nested-unhoistable-blocks) ) (block $x (call $nested-unhoistable-blocks) ) (block $a (block $b (block $c (call $nested-unhoistable-blocks) ) ) ) (br_if $loop (i32.const 1)) ) ) (func $conditional (loop $loop (if (i32.const 0) (drop (i32.const 10)) ;; cannot be hoisted - might never be reached ) (br_if $loop (i32.const 1)) ) ) (func $conditional1 (result i32) (loop $loop (if (call $conditional1) (drop (i32.const 10)) ;; cannot be hoisted - might never be reached ;; also anyhow the whole if also cannot, due to the call ) (br_if $loop (i32.const 1)) ) (unreachable) ) (func $conditional2 (block $out (loop $loop (br_if $out (i32.const 1)) (drop (i32.const 10)) ;; cannot be hoisted - might never be reached (br_if $loop (i32.const 1)) ) ) ) (func $conditional3 (block $out (loop $loop (drop (i32.const 10)) ;; *CAN* be hoisted - will definitely be reached (br_if $out (i32.const 1)) (br_if $loop (i32.const 1)) ) ) ) (func $after (loop $loop) (drop (i32.const 10)) ;; may be part of the loop's basic block, logically, but is not nested in it ) (func $loops (loop $loop2 (loop $loop1 (drop (i32.const 10)) (br_if $loop1 (i32.const 1)) ) ) ) (func $loops2 (loop $loop2 (loop $loop1 (drop (i32.const 10)) (br_if $loop2 (i32.const 1)) ) ) ) (func $fuzz1 (result i64) (local $var$1 i64) (loop $label$1 (result i64) ;; multiple loops here require us to be careful not to Nop out stuff before we finalize things (block $label$2 (block $label$3 (drop (loop $label$4 (result i32) (local.set $var$1 (block $label$5 (result i64) (local.set $var$1 (i64.const -29585) ) (i64.const -70) ) ) (i32.const 1) ) ) (br $label$2) ) (unreachable) ) (local.get $var$1) ) ) (func $self (result i32) (local $x i32) (loop $loop (local.set $x (i32.add (local.get $x) (i32.const 1))) (br_if $loop (i32.const 1)) ) (local.get $x) ) (func $nested-set (local $var$0 i32) (local $var$1 i64) (loop $label$1 (local.set $var$0 (block $label$3 (result i32) (local.set $var$1 ;; cannot be moved out (in current position - other opts would help), and invalidates moving out the set below (i64.const 0) ) (local.get $var$0) ) ) (local.set $var$1 (i64.const 1) ) (br_if $label$1 (i32.const 0) ) ) ) (func $load-store (param $x i32) (loop $loop (drop (i32.load (i32.const 0))) ;; can't move this out, the store might affect it for later iterations (i32.store (local.get $x) (local.get $x)) (br_if $loop (i32.const 1)) ) ) (func $set-set (param $x i32) (result i32) (loop $loop (local.set $x (i32.const 1)) (br_if $loop (i32.const 2)) (local.set $x (i32.const 3)) (br_if $loop (i32.const 4)) ) (local.get $x) ) (func $copies-no (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local $c i32) (loop $loop (local.set $x (local.get $x)) (local.set $y (local.get $z)) (local.set $a (local.tee $b (local.get $c))) (br_if $loop (i32.const 1)) ) ) (func $consts-no (local $x i32) (local $a i32) (local $b i32) (loop $loop (local.set $x (i32.const 0)) (local.set $a (local.tee $b (i32.const 1))) (br_if $loop (i32.const 1)) ) ) (func $global (local $x i32) (loop $loop ;; Moving this global.get out of the loop is ok. It is mutable, but there ;; is no possible place where it can be set in the loop. (local.set $x (global.get $glob)) (drop (local.get $x)) (br_if $loop (local.get $x)) ) ) (func $global-call (local $x i32) (loop $loop ;; As above, but now the loop does a call, which might in theory change ;; mutable global state, so we cannot optimize. (local.set $x (global.get $glob)) (call $global) (drop (local.get $x)) (br_if $loop (local.get $x)) ) ) (func $global-call-immutable (local $x i32) (loop $loop ;; As above, but now the global is immutable, so the call does not ;; prevent us from optimizing. (local.set $x (global.get $glob-imm)) (call $global) (drop (local.get $x)) (br_if $loop (local.get $x)) ) ) ) binaryen-version_108/test/passes/limit-segments_disable-bulk-memory.txt000066400000000000000000136151271423707623100266700ustar00rootroot00000000000000(module (memory $0 256 256) (data (i32.const 0) "a") (data (i32.const 3) "a") (data (i32.const 6) "a") (data (i32.const 9) "a") (data (i32.const 12) "a") (data (i32.const 15) "a") (data (i32.const 18) "a") (data (i32.const 21) "a") (data (i32.const 24) "a") (data (i32.const 27) "a") (data (i32.const 30) "a") (data (i32.const 33) "a") (data (i32.const 36) "a") (data (i32.const 39) "a") (data (i32.const 42) "a") (data (i32.const 45) "a") (data (i32.const 48) "a") (data (i32.const 51) "a") (data (i32.const 54) "a") (data (i32.const 57) "a") (data (i32.const 60) "a") (data (i32.const 63) "a") (data (i32.const 66) "a") (data (i32.const 69) "a") (data (i32.const 72) "a") (data (i32.const 75) "a") (data (i32.const 78) "a") (data (i32.const 81) "a") (data (i32.const 84) "a") (data (i32.const 87) "a") (data (i32.const 90) "a") (data (i32.const 93) "a") (data (i32.const 96) "a") (data (i32.const 99) "a") (data (i32.const 102) "a") (data (i32.const 105) "a") (data (i32.const 108) "a") (data (i32.const 111) "a") (data (i32.const 114) "a") (data (i32.const 117) "a") (data (i32.const 120) "a") (data (i32.const 123) "a") (data (i32.const 126) "a") (data (i32.const 129) "a") (data (i32.const 132) "a") (data (i32.const 135) "a") (data (i32.const 138) "a") (data (i32.const 141) "a") (data (i32.const 144) "a") (data (i32.const 147) "a") (data (i32.const 150) "a") (data (i32.const 153) "a") (data (i32.const 156) "a") (data (i32.const 159) "a") (data (i32.const 162) "a") (data (i32.const 165) "a") (data (i32.const 168) "a") (data (i32.const 171) "a") (data (i32.const 174) "a") (data (i32.const 177) "a") (data (i32.const 180) "a") (data (i32.const 183) "a") (data (i32.const 186) "a") (data (i32.const 189) "a") (data (i32.const 192) "a") (data (i32.const 195) "a") (data (i32.const 198) "a") (data (i32.const 201) "a") (data (i32.const 204) "a") (data (i32.const 207) "a") (data (i32.const 210) "a") (data (i32.const 213) "a") (data (i32.const 216) "a") (data (i32.const 219) "a") (data (i32.const 222) "a") (data (i32.const 225) "a") (data (i32.const 228) "a") (data (i32.const 231) "a") (data (i32.const 234) "a") (data (i32.const 237) "a") (data (i32.const 240) "a") (data (i32.const 243) "a") (data (i32.const 246) "a") (data (i32.const 249) "a") (data (i32.const 252) "a") (data (i32.const 255) "a") (data (i32.const 258) "a") (data (i32.const 261) "a") (data (i32.const 264) "a") (data (i32.const 267) "a") (data (i32.const 270) "a") (data (i32.const 273) "a") (data (i32.const 276) "a") (data (i32.const 279) "a") (data (i32.const 282) "a") (data (i32.const 285) "a") (data (i32.const 288) "a") (data (i32.const 291) "a") (data (i32.const 294) "a") (data (i32.const 297) "a") (data (i32.const 300) "a") (data (i32.const 303) "a") (data (i32.const 306) "a") (data (i32.const 309) "a") (data (i32.const 312) "a") (data (i32.const 315) "a") (data (i32.const 318) "a") (data (i32.const 321) "a") (data (i32.const 324) "a") (data (i32.const 327) "a") (data (i32.const 330) "a") (data (i32.const 333) "a") (data (i32.const 336) "a") (data (i32.const 339) "a") (data (i32.const 342) "a") (data (i32.const 345) "a") (data (i32.const 348) "a") (data (i32.const 351) "a") (data (i32.const 354) "a") (data (i32.const 357) "a") (data (i32.const 360) "a") (data (i32.const 363) "a") (data (i32.const 366) "a") (data (i32.const 369) "a") (data (i32.const 372) "a") (data (i32.const 375) "a") (data (i32.const 378) "a") (data (i32.const 381) "a") (data (i32.const 384) "a") (data (i32.const 387) "a") (data (i32.const 390) "a") (data (i32.const 393) "a") (data (i32.const 396) "a") (data (i32.const 399) "a") (data (i32.const 402) "a") (data (i32.const 405) "a") (data (i32.const 408) "a") (data (i32.const 411) "a") (data (i32.const 414) "a") (data (i32.const 417) "a") (data (i32.const 420) "a") (data (i32.const 423) "a") (data (i32.const 426) "a") (data (i32.const 429) "a") (data (i32.const 432) "a") (data (i32.const 435) "a") (data (i32.const 438) "a") (data (i32.const 441) "a") (data (i32.const 444) "a") (data (i32.const 447) "a") (data (i32.const 450) "a") (data (i32.const 453) "a") (data (i32.const 456) "a") (data (i32.const 459) "a") (data (i32.const 462) "a") (data (i32.const 465) "a") (data (i32.const 468) "a") (data (i32.const 471) "a") (data (i32.const 474) "a") (data (i32.const 477) "a") (data (i32.const 480) "a") (data (i32.const 483) "a") (data (i32.const 486) "a") (data (i32.const 489) "a") (data (i32.const 492) "a") (data (i32.const 495) "a") (data (i32.const 498) "a") (data (i32.const 501) "a") (data (i32.const 504) "a") (data (i32.const 507) "a") (data (i32.const 510) "a") (data (i32.const 513) "a") (data (i32.const 516) "a") (data (i32.const 519) "a") (data (i32.const 522) "a") (data (i32.const 525) "a") (data (i32.const 528) "a") (data (i32.const 531) "a") (data (i32.const 534) "a") (data (i32.const 537) "a") (data (i32.const 540) "a") (data (i32.const 543) "a") (data (i32.const 546) "a") (data (i32.const 549) "a") (data (i32.const 552) "a") (data (i32.const 555) "a") (data (i32.const 558) "a") (data (i32.const 561) "a") (data (i32.const 564) "a") (data (i32.const 567) "a") (data (i32.const 570) "a") (data (i32.const 573) "a") (data (i32.const 576) "a") (data (i32.const 579) "a") (data (i32.const 582) "a") (data (i32.const 585) "a") (data (i32.const 588) "a") (data (i32.const 591) "a") (data (i32.const 594) "a") (data (i32.const 597) "a") (data (i32.const 600) "a") (data (i32.const 603) "a") (data (i32.const 606) "a") (data (i32.const 609) "a") (data (i32.const 612) "a") (data (i32.const 615) "a") (data (i32.const 618) "a") (data (i32.const 621) "a") (data (i32.const 624) "a") (data (i32.const 627) "a") (data (i32.const 630) "a") (data (i32.const 633) "a") (data (i32.const 636) "a") (data (i32.const 639) "a") (data (i32.const 642) "a") (data (i32.const 645) "a") (data (i32.const 648) "a") (data (i32.const 651) "a") (data (i32.const 654) "a") (data (i32.const 657) "a") (data (i32.const 660) "a") (data (i32.const 663) "a") (data (i32.const 666) "a") (data (i32.const 669) "a") (data (i32.const 672) "a") (data (i32.const 675) "a") (data (i32.const 678) "a") (data (i32.const 681) "a") (data (i32.const 684) "a") (data (i32.const 687) "a") (data (i32.const 690) "a") (data (i32.const 693) "a") (data (i32.const 696) "a") (data (i32.const 699) "a") (data (i32.const 702) "a") (data (i32.const 705) "a") (data (i32.const 708) "a") (data (i32.const 711) "a") (data (i32.const 714) "a") (data (i32.const 717) "a") (data (i32.const 720) "a") (data (i32.const 723) "a") (data (i32.const 726) "a") (data (i32.const 729) "a") (data (i32.const 732) "a") (data (i32.const 735) "a") (data (i32.const 738) "a") (data (i32.const 741) "a") (data (i32.const 744) "a") (data (i32.const 747) "a") (data (i32.const 750) "a") (data (i32.const 753) "a") (data (i32.const 756) "a") (data (i32.const 759) "a") (data (i32.const 762) "a") (data (i32.const 765) "a") (data (i32.const 768) "a") (data (i32.const 771) "a") (data (i32.const 774) "a") (data (i32.const 777) "a") (data (i32.const 780) "a") (data (i32.const 783) "a") (data (i32.const 786) "a") (data (i32.const 789) "a") (data (i32.const 792) "a") (data (i32.const 795) "a") (data (i32.const 798) "a") (data (i32.const 801) "a") (data (i32.const 804) "a") (data (i32.const 807) "a") (data (i32.const 810) "a") (data (i32.const 813) "a") (data (i32.const 816) "a") (data (i32.const 819) "a") (data (i32.const 822) "a") (data (i32.const 825) "a") (data (i32.const 828) "a") (data (i32.const 831) "a") (data (i32.const 834) "a") (data (i32.const 837) "a") (data (i32.const 840) "a") (data (i32.const 843) "a") (data (i32.const 846) "a") (data (i32.const 849) "a") (data (i32.const 852) "a") (data (i32.const 855) "a") (data (i32.const 858) "a") (data (i32.const 861) "a") (data (i32.const 864) "a") (data (i32.const 867) "a") (data (i32.const 870) "a") (data (i32.const 873) "a") (data (i32.const 876) "a") (data (i32.const 879) "a") (data (i32.const 882) "a") (data (i32.const 885) "a") (data (i32.const 888) "a") (data (i32.const 891) "a") (data (i32.const 894) "a") (data (i32.const 897) "a") (data (i32.const 900) "a") (data (i32.const 903) "a") (data (i32.const 906) "a") (data (i32.const 909) "a") (data (i32.const 912) "a") (data (i32.const 915) "a") (data (i32.const 918) "a") (data (i32.const 921) "a") (data (i32.const 924) "a") (data (i32.const 927) "a") (data (i32.const 930) "a") (data (i32.const 933) "a") (data (i32.const 936) "a") (data (i32.const 939) "a") (data (i32.const 942) "a") (data (i32.const 945) "a") (data (i32.const 948) "a") (data (i32.const 951) "a") (data (i32.const 954) "a") (data (i32.const 957) "a") (data (i32.const 960) "a") (data (i32.const 963) "a") (data (i32.const 966) "a") (data (i32.const 969) "a") (data (i32.const 972) "a") (data (i32.const 975) "a") (data (i32.const 978) "a") (data (i32.const 981) "a") (data (i32.const 984) "a") (data (i32.const 987) "a") (data (i32.const 990) "a") (data (i32.const 993) "a") (data (i32.const 996) "a") (data (i32.const 999) "a") (data (i32.const 1002) "a") (data (i32.const 1005) "a") (data (i32.const 1008) "a") (data (i32.const 1011) "a") (data (i32.const 1014) "a") (data (i32.const 1017) "a") (data (i32.const 1020) "a") (data (i32.const 1023) "a") (data (i32.const 1026) "a") (data (i32.const 1029) "a") (data (i32.const 1032) "a") (data (i32.const 1035) "a") (data (i32.const 1038) "a") (data (i32.const 1041) "a") (data (i32.const 1044) "a") (data (i32.const 1047) "a") (data (i32.const 1050) "a") (data (i32.const 1053) "a") (data (i32.const 1056) "a") (data (i32.const 1059) "a") (data (i32.const 1062) "a") (data (i32.const 1065) "a") (data (i32.const 1068) "a") (data (i32.const 1071) "a") (data (i32.const 1074) "a") (data (i32.const 1077) "a") (data (i32.const 1080) "a") (data (i32.const 1083) "a") (data (i32.const 1086) "a") (data (i32.const 1089) "a") (data (i32.const 1092) "a") (data (i32.const 1095) "a") (data (i32.const 1098) "a") (data (i32.const 1101) "a") (data (i32.const 1104) "a") (data (i32.const 1107) "a") (data (i32.const 1110) "a") (data (i32.const 1113) "a") (data (i32.const 1116) "a") (data (i32.const 1119) "a") (data (i32.const 1122) "a") (data (i32.const 1125) "a") (data (i32.const 1128) "a") (data (i32.const 1131) "a") (data (i32.const 1134) "a") (data (i32.const 1137) "a") (data (i32.const 1140) "a") (data (i32.const 1143) "a") (data (i32.const 1146) "a") (data (i32.const 1149) "a") (data (i32.const 1152) "a") (data (i32.const 1155) "a") (data (i32.const 1158) "a") (data (i32.const 1161) "a") (data (i32.const 1164) "a") (data (i32.const 1167) "a") (data (i32.const 1170) "a") (data (i32.const 1173) "a") (data (i32.const 1176) "a") (data (i32.const 1179) "a") (data (i32.const 1182) "a") (data (i32.const 1185) "a") (data (i32.const 1188) "a") (data (i32.const 1191) "a") (data (i32.const 1194) "a") (data (i32.const 1197) "a") (data (i32.const 1200) "a") (data (i32.const 1203) "a") (data (i32.const 1206) "a") (data (i32.const 1209) "a") (data (i32.const 1212) "a") (data (i32.const 1215) "a") (data (i32.const 1218) "a") (data (i32.const 1221) "a") (data (i32.const 1224) "a") (data (i32.const 1227) "a") (data (i32.const 1230) "a") (data (i32.const 1233) "a") (data (i32.const 1236) "a") (data (i32.const 1239) "a") (data (i32.const 1242) "a") (data (i32.const 1245) "a") (data (i32.const 1248) "a") (data (i32.const 1251) "a") (data (i32.const 1254) "a") (data (i32.const 1257) "a") (data (i32.const 1260) "a") (data (i32.const 1263) "a") (data (i32.const 1266) "a") (data (i32.const 1269) "a") (data (i32.const 1272) "a") (data (i32.const 1275) "a") (data (i32.const 1278) "a") (data (i32.const 1281) "a") (data (i32.const 1284) "a") (data (i32.const 1287) "a") (data (i32.const 1290) "a") (data (i32.const 1293) "a") (data (i32.const 1296) "a") (data (i32.const 1299) "a") (data (i32.const 1302) "a") (data (i32.const 1305) "a") (data (i32.const 1308) "a") (data (i32.const 1311) "a") (data (i32.const 1314) "a") (data (i32.const 1317) "a") (data (i32.const 1320) "a") (data (i32.const 1323) "a") (data (i32.const 1326) "a") (data (i32.const 1329) "a") (data (i32.const 1332) "a") (data (i32.const 1335) "a") (data (i32.const 1338) "a") (data (i32.const 1341) "a") (data (i32.const 1344) "a") (data (i32.const 1347) "a") (data (i32.const 1350) "a") (data (i32.const 1353) "a") (data (i32.const 1356) "a") (data (i32.const 1359) "a") (data (i32.const 1362) "a") (data (i32.const 1365) "a") (data (i32.const 1368) "a") (data (i32.const 1371) "a") (data (i32.const 1374) "a") (data (i32.const 1377) "a") (data (i32.const 1380) "a") (data (i32.const 1383) "a") (data (i32.const 1386) "a") (data (i32.const 1389) "a") (data (i32.const 1392) "a") (data (i32.const 1395) "a") (data (i32.const 1398) "a") (data (i32.const 1401) "a") (data (i32.const 1404) "a") (data (i32.const 1407) "a") (data (i32.const 1410) "a") (data (i32.const 1413) "a") (data (i32.const 1416) "a") (data (i32.const 1419) "a") (data (i32.const 1422) "a") (data (i32.const 1425) "a") (data (i32.const 1428) "a") (data (i32.const 1431) "a") (data (i32.const 1434) "a") (data (i32.const 1437) "a") (data (i32.const 1440) "a") (data (i32.const 1443) "a") (data (i32.const 1446) "a") (data (i32.const 1449) "a") (data (i32.const 1452) "a") (data (i32.const 1455) "a") (data (i32.const 1458) "a") (data (i32.const 1461) "a") (data (i32.const 1464) "a") (data (i32.const 1467) "a") (data (i32.const 1470) "a") (data (i32.const 1473) "a") (data (i32.const 1476) "a") (data (i32.const 1479) "a") (data (i32.const 1482) "a") (data (i32.const 1485) "a") (data (i32.const 1488) "a") (data (i32.const 1491) "a") (data (i32.const 1494) "a") (data (i32.const 1497) "a") (data (i32.const 1500) "a") (data (i32.const 1503) "a") (data (i32.const 1506) "a") (data (i32.const 1509) "a") (data (i32.const 1512) "a") (data (i32.const 1515) "a") (data (i32.const 1518) "a") (data (i32.const 1521) "a") (data (i32.const 1524) "a") (data (i32.const 1527) "a") (data (i32.const 1530) "a") (data (i32.const 1533) "a") (data (i32.const 1536) "a") (data (i32.const 1539) "a") (data (i32.const 1542) "a") (data (i32.const 1545) "a") (data (i32.const 1548) "a") (data (i32.const 1551) "a") (data (i32.const 1554) "a") (data (i32.const 1557) "a") (data (i32.const 1560) "a") (data (i32.const 1563) "a") (data (i32.const 1566) "a") (data (i32.const 1569) "a") (data (i32.const 1572) "a") (data (i32.const 1575) "a") (data (i32.const 1578) "a") (data (i32.const 1581) "a") (data (i32.const 1584) "a") (data (i32.const 1587) "a") (data (i32.const 1590) "a") (data (i32.const 1593) "a") (data (i32.const 1596) "a") (data (i32.const 1599) "a") (data (i32.const 1602) "a") (data (i32.const 1605) "a") (data (i32.const 1608) "a") (data (i32.const 1611) "a") (data (i32.const 1614) "a") (data (i32.const 1617) "a") (data (i32.const 1620) "a") (data (i32.const 1623) "a") (data (i32.const 1626) "a") (data (i32.const 1629) "a") (data (i32.const 1632) "a") (data (i32.const 1635) "a") (data (i32.const 1638) "a") (data (i32.const 1641) "a") (data (i32.const 1644) "a") (data (i32.const 1647) "a") (data (i32.const 1650) "a") (data (i32.const 1653) "a") (data (i32.const 1656) "a") (data (i32.const 1659) "a") (data (i32.const 1662) "a") (data (i32.const 1665) "a") (data (i32.const 1668) "a") (data (i32.const 1671) "a") (data (i32.const 1674) "a") (data (i32.const 1677) "a") (data (i32.const 1680) "a") (data (i32.const 1683) "a") (data (i32.const 1686) "a") (data (i32.const 1689) "a") (data (i32.const 1692) "a") (data (i32.const 1695) "a") (data (i32.const 1698) "a") (data (i32.const 1701) "a") (data (i32.const 1704) "a") (data (i32.const 1707) "a") (data (i32.const 1710) "a") (data (i32.const 1713) "a") (data (i32.const 1716) "a") (data (i32.const 1719) "a") (data (i32.const 1722) "a") (data (i32.const 1725) "a") (data (i32.const 1728) "a") (data (i32.const 1731) "a") (data (i32.const 1734) "a") (data (i32.const 1737) "a") (data (i32.const 1740) "a") (data (i32.const 1743) "a") (data (i32.const 1746) "a") (data (i32.const 1749) "a") (data (i32.const 1752) "a") (data (i32.const 1755) "a") (data (i32.const 1758) "a") (data (i32.const 1761) "a") (data (i32.const 1764) "a") (data (i32.const 1767) "a") (data (i32.const 1770) "a") (data (i32.const 1773) "a") (data (i32.const 1776) "a") (data (i32.const 1779) "a") (data (i32.const 1782) "a") (data (i32.const 1785) "a") (data (i32.const 1788) "a") (data (i32.const 1791) "a") (data (i32.const 1794) "a") (data (i32.const 1797) "a") (data (i32.const 1800) "a") (data (i32.const 1803) "a") (data (i32.const 1806) "a") (data (i32.const 1809) "a") (data (i32.const 1812) "a") (data (i32.const 1815) "a") (data (i32.const 1818) "a") (data (i32.const 1821) "a") (data (i32.const 1824) "a") (data (i32.const 1827) "a") (data (i32.const 1830) "a") (data (i32.const 1833) "a") (data (i32.const 1836) "a") (data (i32.const 1839) "a") (data (i32.const 1842) "a") (data (i32.const 1845) "a") (data (i32.const 1848) "a") (data (i32.const 1851) "a") (data (i32.const 1854) "a") (data (i32.const 1857) "a") (data (i32.const 1860) "a") (data (i32.const 1863) "a") (data (i32.const 1866) "a") (data (i32.const 1869) "a") (data (i32.const 1872) "a") (data (i32.const 1875) "a") (data (i32.const 1878) "a") (data (i32.const 1881) "a") (data (i32.const 1884) "a") (data (i32.const 1887) "a") (data (i32.const 1890) "a") (data (i32.const 1893) "a") (data (i32.const 1896) "a") (data (i32.const 1899) "a") (data (i32.const 1902) "a") (data (i32.const 1905) "a") (data (i32.const 1908) "a") (data (i32.const 1911) "a") (data (i32.const 1914) "a") (data (i32.const 1917) "a") (data (i32.const 1920) "a") (data (i32.const 1923) "a") (data (i32.const 1926) "a") (data (i32.const 1929) "a") (data (i32.const 1932) "a") (data (i32.const 1935) "a") (data (i32.const 1938) "a") (data (i32.const 1941) "a") (data (i32.const 1944) "a") (data (i32.const 1947) "a") (data (i32.const 1950) "a") (data (i32.const 1953) "a") (data (i32.const 1956) "a") (data (i32.const 1959) "a") (data (i32.const 1962) "a") (data (i32.const 1965) "a") (data (i32.const 1968) "a") (data (i32.const 1971) "a") (data (i32.const 1974) "a") (data (i32.const 1977) "a") (data (i32.const 1980) "a") (data (i32.const 1983) "a") (data (i32.const 1986) "a") (data (i32.const 1989) "a") (data (i32.const 1992) "a") (data (i32.const 1995) "a") (data (i32.const 1998) "a") (data (i32.const 2001) "a") (data (i32.const 2004) "a") (data (i32.const 2007) "a") (data (i32.const 2010) "a") (data (i32.const 2013) "a") (data (i32.const 2016) "a") (data (i32.const 2019) "a") (data (i32.const 2022) "a") (data (i32.const 2025) "a") (data (i32.const 2028) "a") (data (i32.const 2031) "a") (data (i32.const 2034) "a") (data (i32.const 2037) "a") (data (i32.const 2040) "a") (data (i32.const 2043) "a") (data (i32.const 2046) "a") (data (i32.const 2049) "a") (data (i32.const 2052) "a") (data (i32.const 2055) "a") (data (i32.const 2058) "a") (data (i32.const 2061) "a") (data (i32.const 2064) "a") (data (i32.const 2067) "a") (data (i32.const 2070) "a") (data (i32.const 2073) "a") (data (i32.const 2076) "a") (data (i32.const 2079) "a") (data (i32.const 2082) "a") (data (i32.const 2085) "a") (data (i32.const 2088) "a") (data (i32.const 2091) "a") (data (i32.const 2094) "a") (data (i32.const 2097) "a") (data (i32.const 2100) "a") (data (i32.const 2103) "a") (data (i32.const 2106) "a") (data (i32.const 2109) "a") (data (i32.const 2112) "a") (data (i32.const 2115) "a") (data (i32.const 2118) "a") (data (i32.const 2121) "a") (data (i32.const 2124) "a") (data (i32.const 2127) "a") (data (i32.const 2130) "a") (data (i32.const 2133) "a") (data (i32.const 2136) "a") (data (i32.const 2139) "a") (data (i32.const 2142) "a") (data (i32.const 2145) "a") (data (i32.const 2148) "a") (data (i32.const 2151) "a") (data (i32.const 2154) "a") (data (i32.const 2157) "a") (data (i32.const 2160) "a") (data (i32.const 2163) "a") (data (i32.const 2166) "a") (data (i32.const 2169) "a") (data (i32.const 2172) "a") (data (i32.const 2175) "a") (data (i32.const 2178) "a") (data (i32.const 2181) "a") (data (i32.const 2184) "a") (data (i32.const 2187) "a") (data (i32.const 2190) "a") (data (i32.const 2193) "a") (data (i32.const 2196) "a") (data (i32.const 2199) "a") (data (i32.const 2202) "a") (data (i32.const 2205) "a") (data (i32.const 2208) "a") (data (i32.const 2211) "a") (data (i32.const 2214) "a") (data (i32.const 2217) "a") (data (i32.const 2220) "a") (data (i32.const 2223) "a") (data (i32.const 2226) "a") (data (i32.const 2229) "a") (data (i32.const 2232) "a") (data (i32.const 2235) "a") (data (i32.const 2238) "a") (data (i32.const 2241) "a") (data (i32.const 2244) "a") (data (i32.const 2247) "a") (data (i32.const 2250) "a") (data (i32.const 2253) "a") (data (i32.const 2256) "a") (data (i32.const 2259) "a") (data (i32.const 2262) "a") (data (i32.const 2265) "a") (data (i32.const 2268) "a") (data (i32.const 2271) "a") (data (i32.const 2274) "a") (data (i32.const 2277) "a") (data (i32.const 2280) "a") (data (i32.const 2283) "a") (data (i32.const 2286) "a") (data (i32.const 2289) "a") (data (i32.const 2292) "a") (data (i32.const 2295) "a") (data (i32.const 2298) "a") (data (i32.const 2301) "a") (data (i32.const 2304) "a") (data (i32.const 2307) "a") (data (i32.const 2310) "a") (data (i32.const 2313) "a") (data (i32.const 2316) "a") (data (i32.const 2319) "a") (data (i32.const 2322) "a") (data (i32.const 2325) "a") (data (i32.const 2328) "a") (data (i32.const 2331) "a") (data (i32.const 2334) "a") (data (i32.const 2337) "a") (data (i32.const 2340) "a") (data (i32.const 2343) "a") (data (i32.const 2346) "a") (data (i32.const 2349) "a") (data (i32.const 2352) "a") (data (i32.const 2355) "a") (data (i32.const 2358) "a") (data (i32.const 2361) "a") (data (i32.const 2364) "a") (data (i32.const 2367) "a") (data (i32.const 2370) "a") (data (i32.const 2373) "a") (data (i32.const 2376) "a") (data (i32.const 2379) "a") (data (i32.const 2382) "a") (data (i32.const 2385) "a") (data (i32.const 2388) "a") (data (i32.const 2391) "a") (data (i32.const 2394) "a") (data (i32.const 2397) "a") (data (i32.const 2400) "a") (data (i32.const 2403) "a") (data (i32.const 2406) "a") (data (i32.const 2409) "a") (data (i32.const 2412) "a") (data (i32.const 2415) "a") (data (i32.const 2418) "a") (data (i32.const 2421) "a") (data (i32.const 2424) "a") (data (i32.const 2427) "a") (data (i32.const 2430) "a") (data (i32.const 2433) "a") (data (i32.const 2436) "a") (data (i32.const 2439) "a") (data (i32.const 2442) "a") (data (i32.const 2445) "a") (data (i32.const 2448) "a") (data (i32.const 2451) "a") (data (i32.const 2454) "a") (data (i32.const 2457) "a") (data (i32.const 2460) "a") (data (i32.const 2463) "a") (data (i32.const 2466) "a") (data (i32.const 2469) "a") (data (i32.const 2472) "a") (data (i32.const 2475) "a") (data (i32.const 2478) "a") (data (i32.const 2481) "a") (data (i32.const 2484) "a") (data (i32.const 2487) "a") (data (i32.const 2490) "a") (data (i32.const 2493) "a") (data (i32.const 2496) "a") (data (i32.const 2499) "a") (data (i32.const 2502) "a") (data (i32.const 2505) "a") (data (i32.const 2508) "a") (data (i32.const 2511) "a") (data (i32.const 2514) "a") (data (i32.const 2517) "a") (data (i32.const 2520) "a") (data (i32.const 2523) "a") (data (i32.const 2526) "a") (data (i32.const 2529) "a") (data (i32.const 2532) "a") (data (i32.const 2535) "a") (data (i32.const 2538) "a") (data (i32.const 2541) "a") (data (i32.const 2544) "a") (data (i32.const 2547) "a") (data (i32.const 2550) "a") (data (i32.const 2553) "a") (data (i32.const 2556) "a") (data (i32.const 2559) "a") (data (i32.const 2562) "a") (data (i32.const 2565) "a") (data (i32.const 2568) "a") (data (i32.const 2571) "a") (data (i32.const 2574) "a") (data (i32.const 2577) "a") (data (i32.const 2580) "a") (data (i32.const 2583) "a") (data (i32.const 2586) "a") (data (i32.const 2589) "a") (data (i32.const 2592) "a") (data (i32.const 2595) "a") (data (i32.const 2598) "a") (data (i32.const 2601) "a") (data (i32.const 2604) "a") (data (i32.const 2607) "a") (data (i32.const 2610) "a") (data (i32.const 2613) "a") (data (i32.const 2616) "a") (data (i32.const 2619) "a") (data (i32.const 2622) "a") (data (i32.const 2625) "a") (data (i32.const 2628) "a") (data (i32.const 2631) "a") (data (i32.const 2634) "a") (data (i32.const 2637) "a") (data (i32.const 2640) "a") (data (i32.const 2643) "a") (data (i32.const 2646) "a") (data (i32.const 2649) "a") (data (i32.const 2652) "a") (data (i32.const 2655) "a") (data (i32.const 2658) "a") (data (i32.const 2661) "a") (data (i32.const 2664) "a") (data (i32.const 2667) "a") (data (i32.const 2670) "a") (data (i32.const 2673) "a") (data (i32.const 2676) "a") (data (i32.const 2679) "a") (data (i32.const 2682) "a") (data (i32.const 2685) "a") (data (i32.const 2688) "a") (data (i32.const 2691) "a") (data (i32.const 2694) "a") (data (i32.const 2697) "a") (data (i32.const 2700) "a") (data (i32.const 2703) "a") (data (i32.const 2706) "a") (data (i32.const 2709) "a") (data (i32.const 2712) "a") (data (i32.const 2715) "a") (data (i32.const 2718) "a") (data (i32.const 2721) "a") (data (i32.const 2724) "a") (data (i32.const 2727) "a") (data (i32.const 2730) "a") (data (i32.const 2733) "a") (data (i32.const 2736) "a") (data (i32.const 2739) "a") (data (i32.const 2742) "a") (data (i32.const 2745) "a") (data (i32.const 2748) "a") (data (i32.const 2751) "a") (data (i32.const 2754) "a") (data (i32.const 2757) "a") (data (i32.const 2760) "a") (data (i32.const 2763) "a") (data (i32.const 2766) "a") (data (i32.const 2769) "a") (data (i32.const 2772) "a") (data (i32.const 2775) "a") (data (i32.const 2778) "a") (data (i32.const 2781) "a") (data (i32.const 2784) "a") (data (i32.const 2787) "a") (data (i32.const 2790) "a") (data (i32.const 2793) "a") (data (i32.const 2796) "a") (data (i32.const 2799) "a") (data (i32.const 2802) "a") (data (i32.const 2805) "a") (data (i32.const 2808) "a") (data (i32.const 2811) "a") (data (i32.const 2814) "a") (data (i32.const 2817) "a") (data (i32.const 2820) "a") (data (i32.const 2823) "a") (data (i32.const 2826) "a") (data (i32.const 2829) "a") (data (i32.const 2832) "a") (data (i32.const 2835) "a") (data (i32.const 2838) "a") (data (i32.const 2841) "a") (data (i32.const 2844) "a") (data (i32.const 2847) "a") (data (i32.const 2850) "a") (data (i32.const 2853) "a") (data (i32.const 2856) "a") (data (i32.const 2859) "a") (data (i32.const 2862) "a") (data (i32.const 2865) "a") (data (i32.const 2868) "a") (data (i32.const 2871) "a") (data (i32.const 2874) "a") (data (i32.const 2877) "a") (data (i32.const 2880) "a") (data (i32.const 2883) "a") (data (i32.const 2886) "a") (data (i32.const 2889) "a") (data (i32.const 2892) "a") (data (i32.const 2895) "a") (data (i32.const 2898) "a") (data (i32.const 2901) "a") (data (i32.const 2904) "a") (data (i32.const 2907) "a") (data (i32.const 2910) "a") (data (i32.const 2913) "a") (data (i32.const 2916) "a") (data (i32.const 2919) "a") (data (i32.const 2922) "a") (data (i32.const 2925) "a") (data (i32.const 2928) "a") (data (i32.const 2931) "a") (data (i32.const 2934) "a") (data (i32.const 2937) "a") (data (i32.const 2940) "a") (data (i32.const 2943) "a") (data (i32.const 2946) "a") (data (i32.const 2949) "a") (data (i32.const 2952) "a") (data (i32.const 2955) "a") (data (i32.const 2958) "a") (data (i32.const 2961) "a") (data (i32.const 2964) "a") (data (i32.const 2967) "a") (data (i32.const 2970) "a") (data (i32.const 2973) "a") (data (i32.const 2976) "a") (data (i32.const 2979) "a") (data (i32.const 2982) "a") (data (i32.const 2985) "a") (data (i32.const 2988) "a") (data (i32.const 2991) "a") (data (i32.const 2994) "a") (data (i32.const 2997) "a") (data (i32.const 3000) "a") (data (i32.const 3003) "a") (data (i32.const 3006) "a") (data (i32.const 3009) "a") (data (i32.const 3012) "a") (data (i32.const 3015) "a") (data (i32.const 3018) "a") (data (i32.const 3021) "a") (data (i32.const 3024) "a") (data (i32.const 3027) "a") (data (i32.const 3030) "a") (data (i32.const 3033) "a") (data (i32.const 3036) "a") (data (i32.const 3039) "a") (data (i32.const 3042) "a") (data (i32.const 3045) "a") (data (i32.const 3048) "a") (data (i32.const 3051) "a") (data (i32.const 3054) "a") (data (i32.const 3057) "a") (data (i32.const 3060) "a") (data (i32.const 3063) "a") (data (i32.const 3066) "a") (data (i32.const 3069) "a") (data (i32.const 3072) "a") (data (i32.const 3075) "a") (data (i32.const 3078) "a") (data (i32.const 3081) "a") (data (i32.const 3084) "a") (data (i32.const 3087) "a") (data (i32.const 3090) "a") (data (i32.const 3093) "a") (data (i32.const 3096) "a") (data (i32.const 3099) "a") (data (i32.const 3102) "a") (data (i32.const 3105) "a") (data (i32.const 3108) "a") (data (i32.const 3111) "a") (data (i32.const 3114) "a") (data (i32.const 3117) "a") (data (i32.const 3120) "a") (data (i32.const 3123) "a") (data (i32.const 3126) "a") (data (i32.const 3129) "a") (data (i32.const 3132) "a") (data (i32.const 3135) "a") (data (i32.const 3138) "a") (data (i32.const 3141) "a") (data (i32.const 3144) "a") (data (i32.const 3147) "a") (data (i32.const 3150) "a") (data (i32.const 3153) "a") (data (i32.const 3156) "a") (data (i32.const 3159) "a") (data (i32.const 3162) "a") (data (i32.const 3165) "a") (data (i32.const 3168) "a") (data (i32.const 3171) "a") (data (i32.const 3174) "a") (data (i32.const 3177) "a") (data (i32.const 3180) "a") (data (i32.const 3183) "a") (data (i32.const 3186) "a") (data (i32.const 3189) "a") (data (i32.const 3192) "a") (data (i32.const 3195) "a") (data (i32.const 3198) "a") (data (i32.const 3201) "a") (data (i32.const 3204) "a") (data (i32.const 3207) "a") (data (i32.const 3210) "a") (data (i32.const 3213) "a") (data (i32.const 3216) "a") (data (i32.const 3219) "a") (data (i32.const 3222) "a") (data (i32.const 3225) "a") (data (i32.const 3228) "a") (data (i32.const 3231) "a") (data (i32.const 3234) "a") (data (i32.const 3237) "a") (data (i32.const 3240) "a") (data (i32.const 3243) "a") (data (i32.const 3246) "a") (data (i32.const 3249) "a") (data (i32.const 3252) "a") (data (i32.const 3255) "a") (data (i32.const 3258) "a") (data (i32.const 3261) "a") (data (i32.const 3264) "a") (data (i32.const 3267) "a") (data (i32.const 3270) "a") (data (i32.const 3273) "a") (data (i32.const 3276) "a") (data (i32.const 3279) "a") (data (i32.const 3282) "a") (data (i32.const 3285) "a") (data (i32.const 3288) "a") (data (i32.const 3291) "a") (data (i32.const 3294) "a") (data (i32.const 3297) "a") (data (i32.const 3300) "a") (data (i32.const 3303) "a") (data (i32.const 3306) "a") (data (i32.const 3309) "a") (data (i32.const 3312) "a") (data (i32.const 3315) "a") (data (i32.const 3318) "a") (data (i32.const 3321) "a") (data (i32.const 3324) "a") (data (i32.const 3327) "a") (data (i32.const 3330) "a") (data (i32.const 3333) "a") (data (i32.const 3336) "a") (data (i32.const 3339) "a") (data (i32.const 3342) "a") (data (i32.const 3345) "a") (data (i32.const 3348) "a") (data (i32.const 3351) "a") (data (i32.const 3354) "a") (data (i32.const 3357) "a") (data (i32.const 3360) "a") (data (i32.const 3363) "a") (data (i32.const 3366) "a") (data (i32.const 3369) "a") (data (i32.const 3372) "a") (data (i32.const 3375) "a") (data (i32.const 3378) "a") (data (i32.const 3381) "a") (data (i32.const 3384) "a") (data (i32.const 3387) "a") (data (i32.const 3390) "a") (data (i32.const 3393) "a") (data (i32.const 3396) "a") (data (i32.const 3399) "a") (data (i32.const 3402) "a") (data (i32.const 3405) "a") (data (i32.const 3408) "a") (data (i32.const 3411) "a") (data (i32.const 3414) "a") (data (i32.const 3417) "a") (data (i32.const 3420) "a") (data (i32.const 3423) "a") (data (i32.const 3426) "a") (data (i32.const 3429) "a") (data (i32.const 3432) "a") (data (i32.const 3435) "a") (data (i32.const 3438) "a") (data (i32.const 3441) "a") (data (i32.const 3444) "a") (data (i32.const 3447) "a") (data (i32.const 3450) "a") (data (i32.const 3453) "a") (data (i32.const 3456) "a") (data (i32.const 3459) "a") (data (i32.const 3462) "a") (data (i32.const 3465) "a") (data (i32.const 3468) "a") (data (i32.const 3471) "a") (data (i32.const 3474) "a") (data (i32.const 3477) "a") (data (i32.const 3480) "a") (data (i32.const 3483) "a") (data (i32.const 3486) "a") (data (i32.const 3489) "a") (data (i32.const 3492) "a") (data (i32.const 3495) "a") (data (i32.const 3498) "a") (data (i32.const 3501) "a") (data (i32.const 3504) "a") (data (i32.const 3507) "a") (data (i32.const 3510) "a") (data (i32.const 3513) "a") (data (i32.const 3516) "a") (data (i32.const 3519) "a") (data (i32.const 3522) "a") (data (i32.const 3525) "a") (data (i32.const 3528) "a") (data (i32.const 3531) "a") (data (i32.const 3534) "a") (data (i32.const 3537) "a") (data (i32.const 3540) "a") (data (i32.const 3543) "a") (data (i32.const 3546) "a") (data (i32.const 3549) "a") (data (i32.const 3552) "a") (data (i32.const 3555) "a") (data (i32.const 3558) "a") (data (i32.const 3561) "a") (data (i32.const 3564) "a") (data (i32.const 3567) "a") (data (i32.const 3570) "a") (data (i32.const 3573) "a") (data (i32.const 3576) "a") (data (i32.const 3579) "a") (data (i32.const 3582) "a") (data (i32.const 3585) "a") (data (i32.const 3588) "a") (data (i32.const 3591) "a") (data (i32.const 3594) "a") (data (i32.const 3597) "a") (data (i32.const 3600) "a") (data (i32.const 3603) "a") (data (i32.const 3606) "a") (data (i32.const 3609) "a") (data (i32.const 3612) "a") (data (i32.const 3615) "a") (data (i32.const 3618) "a") (data (i32.const 3621) "a") (data (i32.const 3624) "a") (data (i32.const 3627) "a") (data (i32.const 3630) "a") (data (i32.const 3633) "a") (data (i32.const 3636) "a") (data (i32.const 3639) "a") (data (i32.const 3642) "a") (data (i32.const 3645) "a") (data (i32.const 3648) "a") (data (i32.const 3651) "a") (data (i32.const 3654) "a") (data (i32.const 3657) "a") (data (i32.const 3660) "a") (data (i32.const 3663) "a") (data (i32.const 3666) "a") (data (i32.const 3669) "a") (data (i32.const 3672) "a") (data (i32.const 3675) "a") (data (i32.const 3678) "a") (data (i32.const 3681) "a") (data (i32.const 3684) "a") (data (i32.const 3687) "a") (data (i32.const 3690) "a") (data (i32.const 3693) "a") (data (i32.const 3696) "a") (data (i32.const 3699) "a") (data (i32.const 3702) "a") (data (i32.const 3705) "a") (data (i32.const 3708) "a") (data (i32.const 3711) "a") (data (i32.const 3714) "a") (data (i32.const 3717) "a") (data (i32.const 3720) "a") (data (i32.const 3723) "a") (data (i32.const 3726) "a") (data (i32.const 3729) "a") (data (i32.const 3732) "a") (data (i32.const 3735) "a") (data (i32.const 3738) "a") (data (i32.const 3741) "a") (data (i32.const 3744) "a") (data (i32.const 3747) "a") (data (i32.const 3750) "a") (data (i32.const 3753) "a") (data (i32.const 3756) "a") (data (i32.const 3759) "a") (data (i32.const 3762) "a") (data (i32.const 3765) "a") (data (i32.const 3768) "a") (data (i32.const 3771) "a") (data (i32.const 3774) "a") (data (i32.const 3777) "a") (data (i32.const 3780) "a") (data (i32.const 3783) "a") (data (i32.const 3786) "a") (data (i32.const 3789) "a") (data (i32.const 3792) "a") (data (i32.const 3795) "a") (data (i32.const 3798) "a") (data (i32.const 3801) "a") (data (i32.const 3804) "a") (data (i32.const 3807) "a") (data (i32.const 3810) "a") (data (i32.const 3813) "a") (data (i32.const 3816) "a") (data (i32.const 3819) "a") (data (i32.const 3822) "a") (data (i32.const 3825) "a") (data (i32.const 3828) "a") (data (i32.const 3831) "a") (data (i32.const 3834) "a") (data (i32.const 3837) "a") (data (i32.const 3840) "a") (data (i32.const 3843) "a") (data (i32.const 3846) "a") (data (i32.const 3849) "a") (data (i32.const 3852) "a") (data (i32.const 3855) "a") (data (i32.const 3858) "a") (data (i32.const 3861) "a") (data (i32.const 3864) "a") (data (i32.const 3867) "a") (data (i32.const 3870) "a") (data (i32.const 3873) "a") (data (i32.const 3876) "a") (data (i32.const 3879) "a") (data (i32.const 3882) "a") (data (i32.const 3885) "a") (data (i32.const 3888) "a") (data (i32.const 3891) "a") (data (i32.const 3894) "a") (data (i32.const 3897) "a") (data (i32.const 3900) "a") (data (i32.const 3903) "a") (data (i32.const 3906) "a") (data (i32.const 3909) "a") (data (i32.const 3912) "a") (data (i32.const 3915) "a") (data (i32.const 3918) "a") (data (i32.const 3921) "a") (data (i32.const 3924) "a") (data (i32.const 3927) "a") (data (i32.const 3930) "a") (data (i32.const 3933) "a") (data (i32.const 3936) "a") (data (i32.const 3939) "a") (data (i32.const 3942) "a") (data (i32.const 3945) "a") (data (i32.const 3948) "a") (data (i32.const 3951) "a") (data (i32.const 3954) "a") (data (i32.const 3957) "a") (data (i32.const 3960) "a") (data (i32.const 3963) "a") (data (i32.const 3966) "a") (data (i32.const 3969) "a") (data (i32.const 3972) "a") (data (i32.const 3975) "a") (data (i32.const 3978) "a") (data (i32.const 3981) "a") (data (i32.const 3984) "a") (data (i32.const 3987) "a") (data (i32.const 3990) "a") (data (i32.const 3993) "a") (data (i32.const 3996) "a") (data (i32.const 3999) "a") (data (i32.const 4002) "a") (data (i32.const 4005) "a") (data (i32.const 4008) "a") (data (i32.const 4011) "a") (data (i32.const 4014) "a") (data (i32.const 4017) "a") (data (i32.const 4020) "a") (data (i32.const 4023) "a") (data (i32.const 4026) "a") (data (i32.const 4029) "a") (data (i32.const 4032) "a") (data (i32.const 4035) "a") (data (i32.const 4038) "a") (data (i32.const 4041) "a") (data (i32.const 4044) "a") (data (i32.const 4047) "a") (data (i32.const 4050) "a") (data (i32.const 4053) "a") (data (i32.const 4056) "a") (data (i32.const 4059) "a") (data (i32.const 4062) "a") (data (i32.const 4065) "a") (data (i32.const 4068) "a") (data (i32.const 4071) "a") (data (i32.const 4074) "a") (data (i32.const 4077) "a") (data (i32.const 4080) "a") (data (i32.const 4083) "a") (data (i32.const 4086) "a") (data (i32.const 4089) "a") (data (i32.const 4092) "a") (data (i32.const 4095) "a") (data (i32.const 4098) "a") (data (i32.const 4101) "a") (data (i32.const 4104) "a") (data (i32.const 4107) "a") (data (i32.const 4110) "a") (data (i32.const 4113) "a") (data (i32.const 4116) "a") (data (i32.const 4119) "a") (data (i32.const 4122) "a") (data (i32.const 4125) "a") (data (i32.const 4128) "a") (data (i32.const 4131) "a") (data (i32.const 4134) "a") (data (i32.const 4137) "a") (data (i32.const 4140) "a") (data (i32.const 4143) "a") (data (i32.const 4146) "a") (data (i32.const 4149) "a") (data (i32.const 4152) "a") (data (i32.const 4155) "a") (data (i32.const 4158) "a") (data (i32.const 4161) "a") (data (i32.const 4164) "a") (data (i32.const 4167) "a") (data (i32.const 4170) "a") (data (i32.const 4173) "a") (data (i32.const 4176) "a") (data (i32.const 4179) "a") (data (i32.const 4182) "a") (data (i32.const 4185) "a") (data (i32.const 4188) "a") (data (i32.const 4191) "a") (data (i32.const 4194) "a") (data (i32.const 4197) "a") (data (i32.const 4200) "a") (data (i32.const 4203) "a") (data (i32.const 4206) "a") (data (i32.const 4209) "a") (data (i32.const 4212) "a") (data (i32.const 4215) "a") (data (i32.const 4218) "a") (data (i32.const 4221) "a") (data (i32.const 4224) "a") (data (i32.const 4227) "a") (data (i32.const 4230) "a") (data (i32.const 4233) "a") (data (i32.const 4236) "a") (data (i32.const 4239) "a") (data (i32.const 4242) "a") (data (i32.const 4245) "a") (data (i32.const 4248) "a") (data (i32.const 4251) "a") (data (i32.const 4254) "a") (data (i32.const 4257) "a") (data (i32.const 4260) "a") (data (i32.const 4263) "a") (data (i32.const 4266) "a") (data (i32.const 4269) "a") (data (i32.const 4272) "a") (data (i32.const 4275) "a") (data (i32.const 4278) "a") (data (i32.const 4281) "a") (data (i32.const 4284) "a") (data (i32.const 4287) "a") (data (i32.const 4290) "a") (data (i32.const 4293) "a") (data (i32.const 4296) "a") (data (i32.const 4299) "a") (data (i32.const 4302) "a") (data (i32.const 4305) "a") (data (i32.const 4308) "a") (data (i32.const 4311) "a") (data (i32.const 4314) "a") (data (i32.const 4317) "a") (data (i32.const 4320) "a") (data (i32.const 4323) "a") (data (i32.const 4326) "a") (data (i32.const 4329) "a") (data (i32.const 4332) "a") (data (i32.const 4335) "a") (data (i32.const 4338) "a") (data (i32.const 4341) "a") (data (i32.const 4344) "a") (data (i32.const 4347) "a") (data (i32.const 4350) "a") (data (i32.const 4353) "a") (data (i32.const 4356) "a") (data (i32.const 4359) "a") (data (i32.const 4362) "a") (data (i32.const 4365) "a") (data (i32.const 4368) "a") (data (i32.const 4371) "a") (data (i32.const 4374) "a") (data (i32.const 4377) "a") (data (i32.const 4380) "a") (data (i32.const 4383) "a") (data (i32.const 4386) "a") (data (i32.const 4389) "a") (data (i32.const 4392) "a") (data (i32.const 4395) "a") (data (i32.const 4398) "a") (data (i32.const 4401) "a") (data (i32.const 4404) "a") (data (i32.const 4407) "a") (data (i32.const 4410) "a") (data (i32.const 4413) "a") (data (i32.const 4416) "a") (data (i32.const 4419) "a") (data (i32.const 4422) "a") (data (i32.const 4425) "a") (data (i32.const 4428) "a") (data (i32.const 4431) "a") (data (i32.const 4434) "a") (data (i32.const 4437) "a") (data (i32.const 4440) "a") (data (i32.const 4443) "a") (data (i32.const 4446) "a") (data (i32.const 4449) "a") (data (i32.const 4452) "a") (data (i32.const 4455) "a") (data (i32.const 4458) "a") (data (i32.const 4461) "a") (data (i32.const 4464) "a") (data (i32.const 4467) "a") (data (i32.const 4470) "a") (data (i32.const 4473) "a") (data (i32.const 4476) "a") (data (i32.const 4479) "a") (data (i32.const 4482) "a") (data (i32.const 4485) "a") (data (i32.const 4488) "a") (data (i32.const 4491) "a") (data (i32.const 4494) "a") (data (i32.const 4497) "a") (data (i32.const 4500) "a") (data (i32.const 4503) "a") (data (i32.const 4506) "a") (data (i32.const 4509) "a") (data (i32.const 4512) "a") (data (i32.const 4515) "a") (data (i32.const 4518) "a") (data (i32.const 4521) "a") (data (i32.const 4524) "a") (data (i32.const 4527) "a") (data (i32.const 4530) "a") (data (i32.const 4533) "a") (data (i32.const 4536) "a") (data (i32.const 4539) "a") (data (i32.const 4542) "a") (data (i32.const 4545) "a") (data (i32.const 4548) "a") (data (i32.const 4551) "a") (data (i32.const 4554) "a") (data (i32.const 4557) "a") (data (i32.const 4560) "a") (data (i32.const 4563) "a") (data (i32.const 4566) "a") (data (i32.const 4569) "a") (data (i32.const 4572) "a") (data (i32.const 4575) "a") (data (i32.const 4578) "a") (data (i32.const 4581) "a") (data (i32.const 4584) "a") (data (i32.const 4587) "a") (data (i32.const 4590) "a") (data (i32.const 4593) "a") (data (i32.const 4596) "a") (data (i32.const 4599) "a") (data (i32.const 4602) "a") (data (i32.const 4605) "a") (data (i32.const 4608) "a") (data (i32.const 4611) "a") (data (i32.const 4614) "a") (data (i32.const 4617) "a") (data (i32.const 4620) "a") (data (i32.const 4623) "a") (data (i32.const 4626) "a") (data (i32.const 4629) "a") (data (i32.const 4632) "a") (data (i32.const 4635) "a") (data (i32.const 4638) "a") (data (i32.const 4641) "a") (data (i32.const 4644) "a") (data (i32.const 4647) "a") (data (i32.const 4650) "a") (data (i32.const 4653) "a") (data (i32.const 4656) "a") (data (i32.const 4659) "a") (data (i32.const 4662) "a") (data (i32.const 4665) "a") (data (i32.const 4668) "a") (data (i32.const 4671) "a") (data (i32.const 4674) "a") (data (i32.const 4677) "a") (data (i32.const 4680) "a") (data (i32.const 4683) "a") (data (i32.const 4686) "a") (data (i32.const 4689) "a") (data (i32.const 4692) "a") (data (i32.const 4695) "a") (data (i32.const 4698) "a") (data (i32.const 4701) "a") (data (i32.const 4704) "a") (data (i32.const 4707) "a") (data (i32.const 4710) "a") (data (i32.const 4713) "a") (data (i32.const 4716) "a") (data (i32.const 4719) "a") (data (i32.const 4722) "a") (data (i32.const 4725) "a") (data (i32.const 4728) "a") (data (i32.const 4731) "a") (data (i32.const 4734) "a") (data (i32.const 4737) "a") (data (i32.const 4740) "a") (data (i32.const 4743) "a") (data (i32.const 4746) "a") (data (i32.const 4749) "a") (data (i32.const 4752) "a") (data (i32.const 4755) "a") (data (i32.const 4758) "a") (data (i32.const 4761) "a") (data (i32.const 4764) "a") (data (i32.const 4767) "a") (data (i32.const 4770) "a") (data (i32.const 4773) "a") (data (i32.const 4776) "a") (data (i32.const 4779) "a") (data (i32.const 4782) "a") (data (i32.const 4785) "a") (data (i32.const 4788) "a") (data (i32.const 4791) "a") (data (i32.const 4794) "a") (data (i32.const 4797) "a") (data (i32.const 4800) "a") (data (i32.const 4803) "a") (data (i32.const 4806) "a") (data (i32.const 4809) "a") (data (i32.const 4812) "a") (data (i32.const 4815) "a") (data (i32.const 4818) "a") (data (i32.const 4821) "a") (data (i32.const 4824) "a") (data (i32.const 4827) "a") (data (i32.const 4830) "a") (data (i32.const 4833) "a") (data (i32.const 4836) "a") (data (i32.const 4839) "a") (data (i32.const 4842) "a") (data (i32.const 4845) "a") (data (i32.const 4848) "a") (data (i32.const 4851) "a") (data (i32.const 4854) "a") (data (i32.const 4857) "a") (data (i32.const 4860) "a") (data (i32.const 4863) "a") (data (i32.const 4866) "a") (data (i32.const 4869) "a") (data (i32.const 4872) "a") (data (i32.const 4875) "a") (data (i32.const 4878) "a") (data (i32.const 4881) "a") (data (i32.const 4884) "a") (data (i32.const 4887) "a") (data (i32.const 4890) "a") (data (i32.const 4893) "a") (data (i32.const 4896) "a") (data (i32.const 4899) "a") (data (i32.const 4902) "a") (data (i32.const 4905) "a") (data (i32.const 4908) "a") (data (i32.const 4911) "a") (data (i32.const 4914) "a") (data (i32.const 4917) "a") (data (i32.const 4920) "a") (data (i32.const 4923) "a") (data (i32.const 4926) "a") (data (i32.const 4929) "a") (data (i32.const 4932) "a") (data (i32.const 4935) "a") (data (i32.const 4938) "a") (data (i32.const 4941) "a") (data (i32.const 4944) "a") (data (i32.const 4947) "a") (data (i32.const 4950) "a") (data (i32.const 4953) "a") (data (i32.const 4956) "a") (data (i32.const 4959) "a") (data (i32.const 4962) "a") (data (i32.const 4965) "a") (data (i32.const 4968) "a") (data (i32.const 4971) "a") (data (i32.const 4974) "a") (data (i32.const 4977) "a") (data (i32.const 4980) "a") (data (i32.const 4983) "a") (data (i32.const 4986) "a") (data (i32.const 4989) "a") (data (i32.const 4992) "a") (data (i32.const 4995) "a") (data (i32.const 4998) "a") (data (i32.const 5001) "a") (data (i32.const 5004) "a") (data (i32.const 5007) "a") (data (i32.const 5010) "a") (data (i32.const 5013) "a") (data (i32.const 5016) "a") (data (i32.const 5019) "a") (data (i32.const 5022) "a") (data (i32.const 5025) "a") (data (i32.const 5028) "a") (data (i32.const 5031) "a") (data (i32.const 5034) "a") (data (i32.const 5037) "a") (data (i32.const 5040) "a") (data (i32.const 5043) "a") (data (i32.const 5046) "a") (data (i32.const 5049) "a") (data (i32.const 5052) "a") (data (i32.const 5055) "a") (data (i32.const 5058) "a") (data (i32.const 5061) "a") (data (i32.const 5064) "a") (data (i32.const 5067) "a") (data (i32.const 5070) "a") (data (i32.const 5073) "a") (data (i32.const 5076) "a") (data (i32.const 5079) "a") (data (i32.const 5082) "a") (data (i32.const 5085) "a") (data (i32.const 5088) "a") (data (i32.const 5091) "a") (data (i32.const 5094) "a") (data (i32.const 5097) "a") (data (i32.const 5100) "a") (data (i32.const 5103) "a") (data (i32.const 5106) "a") (data (i32.const 5109) "a") (data (i32.const 5112) "a") (data (i32.const 5115) "a") (data (i32.const 5118) "a") (data (i32.const 5121) "a") (data (i32.const 5124) "a") (data (i32.const 5127) "a") (data (i32.const 5130) "a") (data (i32.const 5133) "a") (data (i32.const 5136) "a") (data (i32.const 5139) "a") (data (i32.const 5142) "a") (data (i32.const 5145) "a") (data (i32.const 5148) "a") (data (i32.const 5151) "a") (data (i32.const 5154) "a") (data (i32.const 5157) "a") (data (i32.const 5160) "a") (data (i32.const 5163) "a") (data (i32.const 5166) "a") (data (i32.const 5169) "a") (data (i32.const 5172) "a") (data (i32.const 5175) "a") (data (i32.const 5178) "a") (data (i32.const 5181) "a") (data (i32.const 5184) "a") (data (i32.const 5187) "a") (data (i32.const 5190) "a") (data (i32.const 5193) "a") (data (i32.const 5196) "a") (data (i32.const 5199) "a") (data (i32.const 5202) "a") (data (i32.const 5205) "a") (data (i32.const 5208) "a") (data (i32.const 5211) "a") (data (i32.const 5214) "a") (data (i32.const 5217) "a") (data (i32.const 5220) "a") (data (i32.const 5223) "a") (data (i32.const 5226) "a") (data (i32.const 5229) "a") (data (i32.const 5232) "a") (data (i32.const 5235) "a") (data (i32.const 5238) "a") (data (i32.const 5241) "a") (data (i32.const 5244) "a") (data (i32.const 5247) "a") (data (i32.const 5250) "a") (data (i32.const 5253) "a") (data (i32.const 5256) "a") (data (i32.const 5259) "a") (data (i32.const 5262) "a") (data (i32.const 5265) "a") (data (i32.const 5268) "a") (data (i32.const 5271) "a") (data (i32.const 5274) "a") (data (i32.const 5277) "a") (data (i32.const 5280) "a") (data (i32.const 5283) "a") (data (i32.const 5286) "a") (data (i32.const 5289) "a") (data (i32.const 5292) "a") (data (i32.const 5295) "a") (data (i32.const 5298) "a") (data (i32.const 5301) "a") (data (i32.const 5304) "a") (data (i32.const 5307) "a") (data (i32.const 5310) "a") (data (i32.const 5313) "a") (data (i32.const 5316) "a") (data (i32.const 5319) "a") (data (i32.const 5322) "a") (data (i32.const 5325) "a") (data (i32.const 5328) "a") (data (i32.const 5331) "a") (data (i32.const 5334) "a") (data (i32.const 5337) "a") (data (i32.const 5340) "a") (data (i32.const 5343) "a") (data (i32.const 5346) "a") (data (i32.const 5349) "a") (data (i32.const 5352) "a") (data (i32.const 5355) "a") (data (i32.const 5358) "a") (data (i32.const 5361) "a") (data (i32.const 5364) "a") (data (i32.const 5367) "a") (data (i32.const 5370) "a") (data (i32.const 5373) "a") (data (i32.const 5376) "a") (data (i32.const 5379) "a") (data (i32.const 5382) "a") (data (i32.const 5385) "a") (data (i32.const 5388) "a") (data (i32.const 5391) "a") (data (i32.const 5394) "a") (data (i32.const 5397) "a") (data (i32.const 5400) "a") (data (i32.const 5403) "a") (data (i32.const 5406) "a") (data (i32.const 5409) "a") (data (i32.const 5412) "a") (data (i32.const 5415) "a") (data (i32.const 5418) "a") (data (i32.const 5421) "a") (data (i32.const 5424) "a") (data (i32.const 5427) "a") (data (i32.const 5430) "a") (data (i32.const 5433) "a") (data (i32.const 5436) "a") (data (i32.const 5439) "a") (data (i32.const 5442) "a") (data (i32.const 5445) "a") (data (i32.const 5448) "a") (data (i32.const 5451) "a") (data (i32.const 5454) "a") (data (i32.const 5457) "a") (data (i32.const 5460) "a") (data (i32.const 5463) "a") (data (i32.const 5466) "a") (data (i32.const 5469) "a") (data (i32.const 5472) "a") (data (i32.const 5475) "a") (data (i32.const 5478) "a") (data (i32.const 5481) "a") (data (i32.const 5484) "a") (data (i32.const 5487) "a") (data (i32.const 5490) "a") (data (i32.const 5493) "a") (data (i32.const 5496) "a") (data (i32.const 5499) "a") (data (i32.const 5502) "a") (data (i32.const 5505) "a") (data (i32.const 5508) "a") (data (i32.const 5511) "a") (data (i32.const 5514) "a") (data (i32.const 5517) "a") (data (i32.const 5520) "a") (data (i32.const 5523) "a") (data (i32.const 5526) "a") (data (i32.const 5529) "a") (data (i32.const 5532) "a") (data (i32.const 5535) "a") (data (i32.const 5538) "a") (data (i32.const 5541) "a") (data (i32.const 5544) "a") (data (i32.const 5547) "a") (data (i32.const 5550) "a") (data (i32.const 5553) "a") (data (i32.const 5556) "a") (data (i32.const 5559) "a") (data (i32.const 5562) "a") (data (i32.const 5565) "a") (data (i32.const 5568) "a") (data (i32.const 5571) "a") (data (i32.const 5574) "a") (data (i32.const 5577) "a") (data (i32.const 5580) "a") (data (i32.const 5583) "a") (data (i32.const 5586) "a") (data (i32.const 5589) "a") (data (i32.const 5592) "a") (data (i32.const 5595) "a") (data (i32.const 5598) "a") (data (i32.const 5601) "a") (data (i32.const 5604) "a") (data (i32.const 5607) "a") (data (i32.const 5610) "a") (data (i32.const 5613) "a") (data (i32.const 5616) "a") (data (i32.const 5619) "a") (data (i32.const 5622) "a") (data (i32.const 5625) "a") (data (i32.const 5628) "a") (data (i32.const 5631) "a") (data (i32.const 5634) "a") (data (i32.const 5637) "a") (data (i32.const 5640) "a") (data (i32.const 5643) "a") (data (i32.const 5646) "a") (data (i32.const 5649) "a") (data (i32.const 5652) "a") (data (i32.const 5655) "a") (data (i32.const 5658) "a") (data (i32.const 5661) "a") (data (i32.const 5664) "a") (data (i32.const 5667) "a") (data (i32.const 5670) "a") (data (i32.const 5673) "a") (data (i32.const 5676) "a") (data (i32.const 5679) "a") (data (i32.const 5682) "a") (data (i32.const 5685) "a") (data (i32.const 5688) "a") (data (i32.const 5691) "a") (data (i32.const 5694) "a") (data (i32.const 5697) "a") (data (i32.const 5700) "a") (data (i32.const 5703) "a") (data (i32.const 5706) "a") (data (i32.const 5709) "a") (data (i32.const 5712) "a") (data (i32.const 5715) "a") (data (i32.const 5718) "a") (data (i32.const 5721) "a") (data (i32.const 5724) "a") (data (i32.const 5727) "a") (data (i32.const 5730) "a") (data (i32.const 5733) "a") (data (i32.const 5736) "a") (data (i32.const 5739) "a") (data (i32.const 5742) "a") (data (i32.const 5745) "a") (data (i32.const 5748) "a") (data (i32.const 5751) "a") (data (i32.const 5754) "a") (data (i32.const 5757) "a") (data (i32.const 5760) "a") (data (i32.const 5763) "a") (data (i32.const 5766) "a") (data (i32.const 5769) "a") (data (i32.const 5772) "a") (data (i32.const 5775) "a") (data (i32.const 5778) "a") (data (i32.const 5781) "a") (data (i32.const 5784) "a") (data (i32.const 5787) "a") (data (i32.const 5790) "a") (data (i32.const 5793) "a") (data (i32.const 5796) "a") (data (i32.const 5799) "a") (data (i32.const 5802) "a") (data (i32.const 5805) "a") (data (i32.const 5808) "a") (data (i32.const 5811) "a") (data (i32.const 5814) "a") (data (i32.const 5817) "a") (data (i32.const 5820) "a") (data (i32.const 5823) "a") (data (i32.const 5826) "a") (data (i32.const 5829) "a") (data (i32.const 5832) "a") (data (i32.const 5835) "a") (data (i32.const 5838) "a") (data (i32.const 5841) "a") (data (i32.const 5844) "a") (data (i32.const 5847) "a") (data (i32.const 5850) "a") (data (i32.const 5853) "a") (data (i32.const 5856) "a") (data (i32.const 5859) "a") (data (i32.const 5862) "a") (data (i32.const 5865) "a") (data (i32.const 5868) "a") (data (i32.const 5871) "a") (data (i32.const 5874) "a") (data (i32.const 5877) "a") (data (i32.const 5880) "a") (data (i32.const 5883) "a") (data (i32.const 5886) "a") (data (i32.const 5889) "a") (data (i32.const 5892) "a") (data (i32.const 5895) "a") (data (i32.const 5898) "a") (data (i32.const 5901) "a") (data (i32.const 5904) "a") (data (i32.const 5907) "a") (data (i32.const 5910) "a") (data (i32.const 5913) "a") (data (i32.const 5916) "a") (data (i32.const 5919) "a") (data (i32.const 5922) "a") (data (i32.const 5925) "a") (data (i32.const 5928) "a") (data (i32.const 5931) "a") (data (i32.const 5934) "a") (data (i32.const 5937) "a") (data (i32.const 5940) "a") (data (i32.const 5943) "a") (data (i32.const 5946) "a") (data (i32.const 5949) "a") (data (i32.const 5952) "a") (data (i32.const 5955) "a") (data (i32.const 5958) "a") (data (i32.const 5961) "a") (data (i32.const 5964) "a") (data (i32.const 5967) "a") (data (i32.const 5970) "a") (data (i32.const 5973) "a") (data (i32.const 5976) "a") (data (i32.const 5979) "a") (data (i32.const 5982) "a") (data (i32.const 5985) "a") (data (i32.const 5988) "a") (data (i32.const 5991) "a") (data (i32.const 5994) "a") (data (i32.const 5997) "a") (data (i32.const 6000) "a") (data (i32.const 6003) "a") (data (i32.const 6006) "a") (data (i32.const 6009) "a") (data (i32.const 6012) "a") (data (i32.const 6015) "a") (data (i32.const 6018) "a") (data (i32.const 6021) "a") (data (i32.const 6024) "a") (data (i32.const 6027) "a") (data (i32.const 6030) "a") (data (i32.const 6033) "a") (data (i32.const 6036) "a") (data (i32.const 6039) "a") (data (i32.const 6042) "a") (data (i32.const 6045) "a") (data (i32.const 6048) "a") (data (i32.const 6051) "a") (data (i32.const 6054) "a") (data (i32.const 6057) "a") (data (i32.const 6060) "a") (data (i32.const 6063) "a") (data (i32.const 6066) "a") (data (i32.const 6069) "a") (data (i32.const 6072) "a") (data (i32.const 6075) "a") (data (i32.const 6078) "a") (data (i32.const 6081) "a") (data (i32.const 6084) "a") (data (i32.const 6087) "a") (data (i32.const 6090) "a") (data (i32.const 6093) "a") (data (i32.const 6096) "a") (data (i32.const 6099) "a") (data (i32.const 6102) "a") (data (i32.const 6105) "a") (data (i32.const 6108) "a") (data (i32.const 6111) "a") (data (i32.const 6114) "a") (data (i32.const 6117) "a") (data (i32.const 6120) "a") (data (i32.const 6123) "a") (data (i32.const 6126) "a") (data (i32.const 6129) "a") (data (i32.const 6132) "a") (data (i32.const 6135) "a") (data (i32.const 6138) "a") (data (i32.const 6141) "a") (data (i32.const 6144) "a") (data (i32.const 6147) "a") (data (i32.const 6150) "a") (data (i32.const 6153) "a") (data (i32.const 6156) "a") (data (i32.const 6159) "a") (data (i32.const 6162) "a") (data (i32.const 6165) "a") (data (i32.const 6168) "a") (data (i32.const 6171) "a") (data (i32.const 6174) "a") (data (i32.const 6177) "a") (data (i32.const 6180) "a") (data (i32.const 6183) "a") (data (i32.const 6186) "a") (data (i32.const 6189) "a") (data (i32.const 6192) "a") (data (i32.const 6195) "a") (data (i32.const 6198) "a") (data (i32.const 6201) "a") (data (i32.const 6204) "a") (data (i32.const 6207) "a") (data (i32.const 6210) "a") (data (i32.const 6213) "a") (data (i32.const 6216) "a") (data (i32.const 6219) "a") (data (i32.const 6222) "a") (data (i32.const 6225) "a") (data (i32.const 6228) "a") (data (i32.const 6231) "a") (data (i32.const 6234) "a") (data (i32.const 6237) "a") (data (i32.const 6240) "a") (data (i32.const 6243) "a") (data (i32.const 6246) "a") (data (i32.const 6249) "a") (data (i32.const 6252) "a") (data (i32.const 6255) "a") (data (i32.const 6258) "a") (data (i32.const 6261) "a") (data (i32.const 6264) "a") (data (i32.const 6267) "a") (data (i32.const 6270) "a") (data (i32.const 6273) "a") (data (i32.const 6276) "a") (data (i32.const 6279) "a") (data (i32.const 6282) "a") (data (i32.const 6285) "a") (data (i32.const 6288) "a") (data (i32.const 6291) "a") (data (i32.const 6294) "a") (data (i32.const 6297) "a") (data (i32.const 6300) "a") (data (i32.const 6303) "a") (data (i32.const 6306) "a") (data (i32.const 6309) "a") (data (i32.const 6312) "a") (data (i32.const 6315) "a") (data (i32.const 6318) "a") (data (i32.const 6321) "a") (data (i32.const 6324) "a") (data (i32.const 6327) "a") (data (i32.const 6330) "a") (data (i32.const 6333) "a") (data (i32.const 6336) "a") (data (i32.const 6339) "a") (data (i32.const 6342) "a") (data (i32.const 6345) "a") (data (i32.const 6348) "a") (data (i32.const 6351) "a") (data (i32.const 6354) "a") (data (i32.const 6357) "a") (data (i32.const 6360) "a") (data (i32.const 6363) "a") (data (i32.const 6366) "a") (data (i32.const 6369) "a") (data (i32.const 6372) "a") (data (i32.const 6375) "a") (data (i32.const 6378) "a") (data (i32.const 6381) "a") (data (i32.const 6384) "a") (data (i32.const 6387) "a") (data (i32.const 6390) "a") (data (i32.const 6393) "a") (data (i32.const 6396) "a") (data (i32.const 6399) "a") (data (i32.const 6402) "a") (data (i32.const 6405) "a") (data (i32.const 6408) "a") (data (i32.const 6411) "a") (data (i32.const 6414) "a") (data (i32.const 6417) "a") (data (i32.const 6420) "a") (data (i32.const 6423) "a") (data (i32.const 6426) "a") (data (i32.const 6429) "a") (data (i32.const 6432) "a") (data (i32.const 6435) "a") (data (i32.const 6438) "a") (data (i32.const 6441) "a") (data (i32.const 6444) "a") (data (i32.const 6447) "a") (data (i32.const 6450) "a") (data (i32.const 6453) "a") (data (i32.const 6456) "a") (data (i32.const 6459) "a") (data (i32.const 6462) "a") (data (i32.const 6465) "a") (data (i32.const 6468) "a") (data (i32.const 6471) "a") (data (i32.const 6474) "a") (data (i32.const 6477) "a") (data (i32.const 6480) "a") (data (i32.const 6483) "a") (data (i32.const 6486) "a") (data (i32.const 6489) "a") (data (i32.const 6492) "a") (data (i32.const 6495) "a") (data (i32.const 6498) "a") (data (i32.const 6501) "a") (data (i32.const 6504) "a") (data (i32.const 6507) "a") (data (i32.const 6510) "a") (data (i32.const 6513) "a") (data (i32.const 6516) "a") (data (i32.const 6519) "a") (data (i32.const 6522) "a") (data (i32.const 6525) "a") (data (i32.const 6528) "a") (data (i32.const 6531) "a") (data (i32.const 6534) "a") (data (i32.const 6537) "a") (data (i32.const 6540) "a") (data (i32.const 6543) "a") (data (i32.const 6546) "a") (data (i32.const 6549) "a") (data (i32.const 6552) "a") (data (i32.const 6555) "a") (data (i32.const 6558) "a") (data (i32.const 6561) "a") (data (i32.const 6564) "a") (data (i32.const 6567) "a") (data (i32.const 6570) "a") (data (i32.const 6573) "a") (data (i32.const 6576) "a") (data (i32.const 6579) "a") (data (i32.const 6582) "a") (data (i32.const 6585) "a") (data (i32.const 6588) "a") (data (i32.const 6591) "a") (data (i32.const 6594) "a") (data (i32.const 6597) "a") (data (i32.const 6600) "a") (data (i32.const 6603) "a") (data (i32.const 6606) "a") (data (i32.const 6609) "a") (data (i32.const 6612) "a") (data (i32.const 6615) "a") (data (i32.const 6618) "a") (data (i32.const 6621) "a") (data (i32.const 6624) "a") (data (i32.const 6627) "a") (data (i32.const 6630) "a") (data (i32.const 6633) "a") (data (i32.const 6636) "a") (data (i32.const 6639) "a") (data (i32.const 6642) "a") (data (i32.const 6645) "a") (data (i32.const 6648) "a") (data (i32.const 6651) "a") (data (i32.const 6654) "a") (data (i32.const 6657) "a") (data (i32.const 6660) "a") (data (i32.const 6663) "a") (data (i32.const 6666) "a") (data (i32.const 6669) "a") (data (i32.const 6672) "a") (data (i32.const 6675) "a") (data (i32.const 6678) "a") (data (i32.const 6681) "a") (data (i32.const 6684) "a") (data (i32.const 6687) "a") (data (i32.const 6690) "a") (data (i32.const 6693) "a") (data (i32.const 6696) "a") (data (i32.const 6699) "a") (data (i32.const 6702) "a") (data (i32.const 6705) "a") (data (i32.const 6708) "a") (data (i32.const 6711) "a") (data (i32.const 6714) "a") (data (i32.const 6717) "a") (data (i32.const 6720) "a") (data (i32.const 6723) "a") (data (i32.const 6726) "a") (data (i32.const 6729) "a") (data (i32.const 6732) "a") (data (i32.const 6735) "a") (data (i32.const 6738) "a") (data (i32.const 6741) "a") (data (i32.const 6744) "a") (data (i32.const 6747) "a") (data (i32.const 6750) "a") (data (i32.const 6753) "a") (data (i32.const 6756) "a") (data (i32.const 6759) "a") (data (i32.const 6762) "a") (data (i32.const 6765) "a") (data (i32.const 6768) "a") (data (i32.const 6771) "a") (data (i32.const 6774) "a") (data (i32.const 6777) "a") (data (i32.const 6780) "a") (data (i32.const 6783) "a") (data (i32.const 6786) "a") (data (i32.const 6789) "a") (data (i32.const 6792) "a") (data (i32.const 6795) "a") (data (i32.const 6798) "a") (data (i32.const 6801) "a") (data (i32.const 6804) "a") (data (i32.const 6807) "a") (data (i32.const 6810) "a") (data (i32.const 6813) "a") (data (i32.const 6816) "a") (data (i32.const 6819) "a") (data (i32.const 6822) "a") (data (i32.const 6825) "a") (data (i32.const 6828) "a") (data (i32.const 6831) "a") (data (i32.const 6834) "a") (data (i32.const 6837) "a") (data (i32.const 6840) "a") (data (i32.const 6843) "a") (data (i32.const 6846) "a") (data (i32.const 6849) "a") (data (i32.const 6852) "a") (data (i32.const 6855) "a") (data (i32.const 6858) "a") (data (i32.const 6861) "a") (data (i32.const 6864) "a") (data (i32.const 6867) "a") (data (i32.const 6870) "a") (data (i32.const 6873) "a") (data (i32.const 6876) "a") (data (i32.const 6879) "a") (data (i32.const 6882) "a") (data (i32.const 6885) "a") (data (i32.const 6888) "a") (data (i32.const 6891) "a") (data (i32.const 6894) "a") (data (i32.const 6897) "a") (data (i32.const 6900) "a") (data (i32.const 6903) "a") (data (i32.const 6906) "a") (data (i32.const 6909) "a") (data (i32.const 6912) "a") (data (i32.const 6915) "a") (data (i32.const 6918) "a") (data (i32.const 6921) "a") (data (i32.const 6924) "a") (data (i32.const 6927) "a") (data (i32.const 6930) "a") (data (i32.const 6933) "a") (data (i32.const 6936) "a") (data (i32.const 6939) "a") (data (i32.const 6942) "a") (data (i32.const 6945) "a") (data (i32.const 6948) "a") (data (i32.const 6951) "a") (data (i32.const 6954) "a") (data (i32.const 6957) "a") (data (i32.const 6960) "a") (data (i32.const 6963) "a") (data (i32.const 6966) "a") (data (i32.const 6969) "a") (data (i32.const 6972) "a") (data (i32.const 6975) "a") (data (i32.const 6978) "a") (data (i32.const 6981) "a") (data (i32.const 6984) "a") (data (i32.const 6987) "a") (data (i32.const 6990) "a") (data (i32.const 6993) "a") (data (i32.const 6996) "a") (data (i32.const 6999) "a") (data (i32.const 7002) "a") (data (i32.const 7005) "a") (data (i32.const 7008) "a") (data (i32.const 7011) "a") (data (i32.const 7014) "a") (data (i32.const 7017) "a") (data (i32.const 7020) "a") (data (i32.const 7023) "a") (data (i32.const 7026) "a") (data (i32.const 7029) "a") (data (i32.const 7032) "a") (data (i32.const 7035) "a") (data (i32.const 7038) "a") (data (i32.const 7041) "a") (data (i32.const 7044) "a") (data (i32.const 7047) "a") (data (i32.const 7050) "a") (data (i32.const 7053) "a") (data (i32.const 7056) "a") (data (i32.const 7059) "a") (data (i32.const 7062) "a") (data (i32.const 7065) "a") (data (i32.const 7068) "a") (data (i32.const 7071) "a") (data (i32.const 7074) "a") (data (i32.const 7077) "a") (data (i32.const 7080) "a") (data (i32.const 7083) "a") (data (i32.const 7086) "a") (data (i32.const 7089) "a") (data (i32.const 7092) "a") (data (i32.const 7095) "a") (data (i32.const 7098) "a") (data (i32.const 7101) "a") (data (i32.const 7104) "a") (data (i32.const 7107) "a") (data (i32.const 7110) "a") (data (i32.const 7113) "a") (data (i32.const 7116) "a") (data (i32.const 7119) "a") (data (i32.const 7122) "a") (data (i32.const 7125) "a") (data (i32.const 7128) "a") (data (i32.const 7131) "a") (data (i32.const 7134) "a") (data (i32.const 7137) "a") (data (i32.const 7140) "a") (data (i32.const 7143) "a") (data (i32.const 7146) "a") (data (i32.const 7149) "a") (data (i32.const 7152) "a") (data (i32.const 7155) "a") (data (i32.const 7158) "a") (data (i32.const 7161) "a") (data (i32.const 7164) "a") (data (i32.const 7167) "a") (data (i32.const 7170) "a") (data (i32.const 7173) "a") (data (i32.const 7176) "a") (data (i32.const 7179) "a") (data (i32.const 7182) "a") (data (i32.const 7185) "a") (data (i32.const 7188) "a") (data (i32.const 7191) "a") (data (i32.const 7194) "a") (data (i32.const 7197) "a") (data (i32.const 7200) "a") (data (i32.const 7203) "a") (data (i32.const 7206) "a") (data (i32.const 7209) "a") (data (i32.const 7212) "a") (data (i32.const 7215) "a") (data (i32.const 7218) "a") (data (i32.const 7221) "a") (data (i32.const 7224) "a") (data (i32.const 7227) "a") (data (i32.const 7230) "a") (data (i32.const 7233) "a") (data (i32.const 7236) "a") (data (i32.const 7239) "a") (data (i32.const 7242) "a") (data (i32.const 7245) "a") (data (i32.const 7248) "a") (data (i32.const 7251) "a") (data (i32.const 7254) "a") (data (i32.const 7257) "a") (data (i32.const 7260) "a") (data (i32.const 7263) "a") (data (i32.const 7266) "a") (data (i32.const 7269) "a") (data (i32.const 7272) "a") (data (i32.const 7275) "a") (data (i32.const 7278) "a") (data (i32.const 7281) "a") (data (i32.const 7284) "a") (data (i32.const 7287) "a") (data (i32.const 7290) "a") (data (i32.const 7293) "a") (data (i32.const 7296) "a") (data (i32.const 7299) "a") (data (i32.const 7302) "a") (data (i32.const 7305) "a") (data (i32.const 7308) "a") (data (i32.const 7311) "a") (data (i32.const 7314) "a") (data (i32.const 7317) "a") (data (i32.const 7320) "a") (data (i32.const 7323) "a") (data (i32.const 7326) "a") (data (i32.const 7329) "a") (data (i32.const 7332) "a") (data (i32.const 7335) "a") (data (i32.const 7338) "a") (data (i32.const 7341) "a") (data (i32.const 7344) "a") (data (i32.const 7347) "a") (data (i32.const 7350) "a") (data (i32.const 7353) "a") (data (i32.const 7356) "a") (data (i32.const 7359) "a") (data (i32.const 7362) "a") (data (i32.const 7365) "a") (data (i32.const 7368) "a") (data (i32.const 7371) "a") (data (i32.const 7374) "a") (data (i32.const 7377) "a") (data (i32.const 7380) "a") (data (i32.const 7383) "a") (data (i32.const 7386) "a") (data (i32.const 7389) "a") (data (i32.const 7392) "a") (data (i32.const 7395) "a") (data (i32.const 7398) "a") (data (i32.const 7401) "a") (data (i32.const 7404) "a") (data (i32.const 7407) "a") (data (i32.const 7410) "a") (data (i32.const 7413) "a") (data (i32.const 7416) "a") (data (i32.const 7419) "a") (data (i32.const 7422) "a") (data (i32.const 7425) "a") (data (i32.const 7428) "a") (data (i32.const 7431) "a") (data (i32.const 7434) "a") (data (i32.const 7437) "a") (data (i32.const 7440) "a") (data (i32.const 7443) "a") (data (i32.const 7446) "a") (data (i32.const 7449) "a") (data (i32.const 7452) "a") (data (i32.const 7455) "a") (data (i32.const 7458) "a") (data (i32.const 7461) "a") (data (i32.const 7464) "a") (data (i32.const 7467) "a") (data (i32.const 7470) "a") (data (i32.const 7473) "a") (data (i32.const 7476) "a") (data (i32.const 7479) "a") (data (i32.const 7482) "a") (data (i32.const 7485) "a") (data (i32.const 7488) "a") (data (i32.const 7491) "a") (data (i32.const 7494) "a") (data (i32.const 7497) "a") (data (i32.const 7500) "a") (data (i32.const 7503) "a") (data (i32.const 7506) "a") (data (i32.const 7509) "a") (data (i32.const 7512) "a") (data (i32.const 7515) "a") (data (i32.const 7518) "a") (data (i32.const 7521) "a") (data (i32.const 7524) "a") (data (i32.const 7527) "a") (data (i32.const 7530) "a") (data (i32.const 7533) "a") (data (i32.const 7536) "a") (data (i32.const 7539) "a") (data (i32.const 7542) "a") (data (i32.const 7545) "a") (data (i32.const 7548) "a") (data (i32.const 7551) "a") (data (i32.const 7554) "a") (data (i32.const 7557) "a") (data (i32.const 7560) "a") (data (i32.const 7563) "a") (data (i32.const 7566) "a") (data (i32.const 7569) "a") (data (i32.const 7572) "a") (data (i32.const 7575) "a") (data (i32.const 7578) "a") (data (i32.const 7581) "a") (data (i32.const 7584) "a") (data (i32.const 7587) "a") (data (i32.const 7590) "a") (data (i32.const 7593) "a") (data (i32.const 7596) "a") (data (i32.const 7599) "a") (data (i32.const 7602) "a") (data (i32.const 7605) "a") (data (i32.const 7608) "a") (data (i32.const 7611) "a") (data (i32.const 7614) "a") (data (i32.const 7617) "a") (data (i32.const 7620) "a") (data (i32.const 7623) "a") (data (i32.const 7626) "a") (data (i32.const 7629) "a") (data (i32.const 7632) "a") (data (i32.const 7635) "a") (data (i32.const 7638) "a") (data (i32.const 7641) "a") (data (i32.const 7644) "a") (data (i32.const 7647) "a") (data (i32.const 7650) "a") (data (i32.const 7653) "a") (data (i32.const 7656) "a") (data (i32.const 7659) "a") (data (i32.const 7662) "a") (data (i32.const 7665) "a") (data (i32.const 7668) "a") (data (i32.const 7671) "a") (data (i32.const 7674) "a") (data (i32.const 7677) "a") (data (i32.const 7680) "a") (data (i32.const 7683) "a") (data (i32.const 7686) "a") (data (i32.const 7689) "a") (data (i32.const 7692) "a") (data (i32.const 7695) "a") (data (i32.const 7698) "a") (data (i32.const 7701) "a") (data (i32.const 7704) "a") (data (i32.const 7707) "a") (data (i32.const 7710) "a") (data (i32.const 7713) "a") (data (i32.const 7716) "a") (data (i32.const 7719) "a") (data (i32.const 7722) "a") (data (i32.const 7725) "a") (data (i32.const 7728) "a") (data (i32.const 7731) "a") (data (i32.const 7734) "a") (data (i32.const 7737) "a") (data (i32.const 7740) "a") (data (i32.const 7743) "a") (data (i32.const 7746) "a") (data (i32.const 7749) "a") (data (i32.const 7752) "a") (data (i32.const 7755) "a") (data (i32.const 7758) "a") (data (i32.const 7761) "a") (data (i32.const 7764) "a") (data (i32.const 7767) "a") (data (i32.const 7770) "a") (data (i32.const 7773) "a") (data (i32.const 7776) "a") (data (i32.const 7779) "a") (data (i32.const 7782) "a") (data (i32.const 7785) "a") (data (i32.const 7788) "a") (data (i32.const 7791) "a") (data (i32.const 7794) "a") (data (i32.const 7797) "a") (data (i32.const 7800) "a") (data (i32.const 7803) "a") (data (i32.const 7806) "a") (data (i32.const 7809) "a") (data (i32.const 7812) "a") (data (i32.const 7815) "a") (data (i32.const 7818) "a") (data (i32.const 7821) "a") (data (i32.const 7824) "a") (data (i32.const 7827) "a") (data (i32.const 7830) "a") (data (i32.const 7833) "a") (data (i32.const 7836) "a") (data (i32.const 7839) "a") (data (i32.const 7842) "a") (data (i32.const 7845) "a") (data (i32.const 7848) "a") (data (i32.const 7851) "a") (data (i32.const 7854) "a") (data (i32.const 7857) "a") (data (i32.const 7860) "a") (data (i32.const 7863) "a") (data (i32.const 7866) "a") (data (i32.const 7869) "a") (data (i32.const 7872) "a") (data (i32.const 7875) "a") (data (i32.const 7878) "a") (data (i32.const 7881) "a") (data (i32.const 7884) "a") (data (i32.const 7887) "a") (data (i32.const 7890) "a") (data (i32.const 7893) "a") (data (i32.const 7896) "a") (data (i32.const 7899) "a") (data (i32.const 7902) "a") (data (i32.const 7905) "a") (data (i32.const 7908) "a") (data (i32.const 7911) "a") (data (i32.const 7914) "a") (data (i32.const 7917) "a") (data (i32.const 7920) "a") (data (i32.const 7923) "a") (data (i32.const 7926) "a") (data (i32.const 7929) "a") (data (i32.const 7932) "a") (data (i32.const 7935) "a") (data (i32.const 7938) "a") (data (i32.const 7941) "a") (data (i32.const 7944) "a") (data (i32.const 7947) "a") (data (i32.const 7950) "a") (data (i32.const 7953) "a") (data (i32.const 7956) "a") (data (i32.const 7959) "a") (data (i32.const 7962) "a") (data (i32.const 7965) "a") (data (i32.const 7968) "a") (data (i32.const 7971) "a") (data (i32.const 7974) "a") (data (i32.const 7977) "a") (data (i32.const 7980) "a") (data (i32.const 7983) "a") (data (i32.const 7986) "a") (data (i32.const 7989) "a") (data (i32.const 7992) "a") (data (i32.const 7995) "a") (data (i32.const 7998) "a") (data (i32.const 8001) "a") (data (i32.const 8004) "a") (data (i32.const 8007) "a") (data (i32.const 8010) "a") (data (i32.const 8013) "a") (data (i32.const 8016) "a") (data (i32.const 8019) "a") (data (i32.const 8022) "a") (data (i32.const 8025) "a") (data (i32.const 8028) "a") (data (i32.const 8031) "a") (data (i32.const 8034) "a") (data (i32.const 8037) "a") (data (i32.const 8040) "a") (data (i32.const 8043) "a") (data (i32.const 8046) "a") (data (i32.const 8049) "a") (data (i32.const 8052) "a") (data (i32.const 8055) "a") (data (i32.const 8058) "a") (data (i32.const 8061) "a") (data (i32.const 8064) "a") (data (i32.const 8067) "a") (data (i32.const 8070) "a") (data (i32.const 8073) "a") (data (i32.const 8076) "a") (data (i32.const 8079) "a") (data (i32.const 8082) "a") (data (i32.const 8085) "a") (data (i32.const 8088) "a") (data (i32.const 8091) "a") (data (i32.const 8094) "a") (data (i32.const 8097) "a") (data (i32.const 8100) "a") (data (i32.const 8103) "a") (data (i32.const 8106) "a") (data (i32.const 8109) "a") (data (i32.const 8112) "a") (data (i32.const 8115) "a") (data (i32.const 8118) "a") (data (i32.const 8121) "a") (data (i32.const 8124) "a") (data (i32.const 8127) "a") (data (i32.const 8130) "a") (data (i32.const 8133) "a") (data (i32.const 8136) "a") (data (i32.const 8139) "a") (data (i32.const 8142) "a") (data (i32.const 8145) "a") (data (i32.const 8148) "a") (data (i32.const 8151) "a") (data (i32.const 8154) "a") (data (i32.const 8157) "a") (data (i32.const 8160) "a") (data (i32.const 8163) "a") (data (i32.const 8166) "a") (data (i32.const 8169) "a") (data (i32.const 8172) "a") (data (i32.const 8175) "a") (data (i32.const 8178) "a") (data (i32.const 8181) "a") (data (i32.const 8184) "a") (data (i32.const 8187) "a") (data (i32.const 8190) "a") (data (i32.const 8193) "a") (data (i32.const 8196) "a") (data (i32.const 8199) "a") (data (i32.const 8202) "a") (data (i32.const 8205) "a") (data (i32.const 8208) "a") (data (i32.const 8211) "a") (data (i32.const 8214) "a") (data (i32.const 8217) "a") (data (i32.const 8220) "a") (data (i32.const 8223) "a") (data (i32.const 8226) "a") (data (i32.const 8229) "a") (data (i32.const 8232) "a") (data (i32.const 8235) "a") (data (i32.const 8238) "a") (data (i32.const 8241) "a") (data (i32.const 8244) "a") (data (i32.const 8247) "a") (data (i32.const 8250) "a") (data (i32.const 8253) "a") (data (i32.const 8256) "a") (data (i32.const 8259) "a") (data (i32.const 8262) "a") (data (i32.const 8265) "a") (data (i32.const 8268) "a") (data (i32.const 8271) "a") (data (i32.const 8274) "a") (data (i32.const 8277) "a") (data (i32.const 8280) "a") (data (i32.const 8283) "a") (data (i32.const 8286) "a") (data (i32.const 8289) "a") (data (i32.const 8292) "a") (data (i32.const 8295) "a") (data (i32.const 8298) "a") (data (i32.const 8301) "a") (data (i32.const 8304) "a") (data (i32.const 8307) "a") (data (i32.const 8310) "a") (data (i32.const 8313) "a") (data (i32.const 8316) "a") (data (i32.const 8319) "a") (data (i32.const 8322) "a") (data (i32.const 8325) "a") (data (i32.const 8328) "a") (data (i32.const 8331) "a") (data (i32.const 8334) "a") (data (i32.const 8337) "a") (data (i32.const 8340) "a") (data (i32.const 8343) "a") (data (i32.const 8346) "a") (data (i32.const 8349) "a") (data (i32.const 8352) "a") (data (i32.const 8355) "a") (data (i32.const 8358) "a") (data (i32.const 8361) "a") (data (i32.const 8364) "a") (data (i32.const 8367) "a") (data (i32.const 8370) "a") (data (i32.const 8373) "a") (data (i32.const 8376) "a") (data (i32.const 8379) "a") (data (i32.const 8382) "a") (data (i32.const 8385) "a") (data (i32.const 8388) "a") (data (i32.const 8391) "a") (data (i32.const 8394) "a") (data (i32.const 8397) "a") (data (i32.const 8400) "a") (data (i32.const 8403) "a") (data (i32.const 8406) "a") (data (i32.const 8409) "a") (data (i32.const 8412) "a") (data (i32.const 8415) "a") (data (i32.const 8418) "a") (data (i32.const 8421) "a") (data (i32.const 8424) "a") (data (i32.const 8427) "a") (data (i32.const 8430) "a") (data (i32.const 8433) "a") (data (i32.const 8436) "a") (data (i32.const 8439) "a") (data (i32.const 8442) "a") (data (i32.const 8445) "a") (data (i32.const 8448) "a") (data (i32.const 8451) "a") (data (i32.const 8454) "a") (data (i32.const 8457) "a") (data (i32.const 8460) "a") (data (i32.const 8463) "a") (data (i32.const 8466) "a") (data (i32.const 8469) "a") (data (i32.const 8472) "a") (data (i32.const 8475) "a") (data (i32.const 8478) "a") (data (i32.const 8481) "a") (data (i32.const 8484) "a") (data (i32.const 8487) "a") (data (i32.const 8490) "a") (data (i32.const 8493) "a") (data (i32.const 8496) "a") (data (i32.const 8499) "a") (data (i32.const 8502) "a") (data (i32.const 8505) "a") (data (i32.const 8508) "a") (data (i32.const 8511) "a") (data (i32.const 8514) "a") (data (i32.const 8517) "a") (data (i32.const 8520) "a") (data (i32.const 8523) "a") (data (i32.const 8526) "a") (data (i32.const 8529) "a") (data (i32.const 8532) "a") (data (i32.const 8535) "a") (data (i32.const 8538) "a") (data (i32.const 8541) "a") (data (i32.const 8544) "a") (data (i32.const 8547) "a") (data (i32.const 8550) "a") (data (i32.const 8553) "a") (data (i32.const 8556) "a") (data (i32.const 8559) "a") (data (i32.const 8562) "a") (data (i32.const 8565) "a") (data (i32.const 8568) "a") (data (i32.const 8571) "a") (data (i32.const 8574) "a") (data (i32.const 8577) "a") (data (i32.const 8580) "a") (data (i32.const 8583) "a") (data (i32.const 8586) "a") (data (i32.const 8589) "a") (data (i32.const 8592) "a") (data (i32.const 8595) "a") (data (i32.const 8598) "a") (data (i32.const 8601) "a") (data (i32.const 8604) "a") (data (i32.const 8607) "a") (data (i32.const 8610) "a") (data (i32.const 8613) "a") (data (i32.const 8616) "a") (data (i32.const 8619) "a") (data (i32.const 8622) "a") (data (i32.const 8625) "a") (data (i32.const 8628) "a") (data (i32.const 8631) "a") (data (i32.const 8634) "a") (data (i32.const 8637) "a") (data (i32.const 8640) "a") (data (i32.const 8643) "a") (data (i32.const 8646) "a") (data (i32.const 8649) "a") (data (i32.const 8652) "a") (data (i32.const 8655) "a") (data (i32.const 8658) "a") (data (i32.const 8661) "a") (data (i32.const 8664) "a") (data (i32.const 8667) "a") (data (i32.const 8670) "a") (data (i32.const 8673) "a") (data (i32.const 8676) "a") (data (i32.const 8679) "a") (data (i32.const 8682) "a") (data (i32.const 8685) "a") (data (i32.const 8688) "a") (data (i32.const 8691) "a") (data (i32.const 8694) "a") (data (i32.const 8697) "a") (data (i32.const 8700) "a") (data (i32.const 8703) "a") (data (i32.const 8706) "a") (data (i32.const 8709) "a") (data (i32.const 8712) "a") (data (i32.const 8715) "a") (data (i32.const 8718) "a") (data (i32.const 8721) "a") (data (i32.const 8724) "a") (data (i32.const 8727) "a") (data (i32.const 8730) "a") (data (i32.const 8733) "a") (data (i32.const 8736) "a") (data (i32.const 8739) "a") (data (i32.const 8742) "a") (data (i32.const 8745) "a") (data (i32.const 8748) "a") (data (i32.const 8751) "a") (data (i32.const 8754) "a") (data (i32.const 8757) "a") (data (i32.const 8760) "a") (data (i32.const 8763) "a") (data (i32.const 8766) "a") (data (i32.const 8769) "a") (data (i32.const 8772) "a") (data (i32.const 8775) "a") (data (i32.const 8778) "a") (data (i32.const 8781) "a") (data (i32.const 8784) "a") (data (i32.const 8787) "a") (data (i32.const 8790) "a") (data (i32.const 8793) "a") (data (i32.const 8796) "a") (data (i32.const 8799) "a") (data (i32.const 8802) "a") (data (i32.const 8805) "a") (data (i32.const 8808) "a") (data (i32.const 8811) "a") (data (i32.const 8814) "a") (data (i32.const 8817) "a") (data (i32.const 8820) "a") (data (i32.const 8823) "a") (data (i32.const 8826) "a") (data (i32.const 8829) "a") (data (i32.const 8832) "a") (data (i32.const 8835) "a") (data (i32.const 8838) "a") (data (i32.const 8841) "a") (data (i32.const 8844) "a") (data (i32.const 8847) "a") (data (i32.const 8850) "a") (data (i32.const 8853) "a") (data (i32.const 8856) "a") (data (i32.const 8859) "a") (data (i32.const 8862) "a") (data (i32.const 8865) "a") (data (i32.const 8868) "a") (data (i32.const 8871) "a") (data (i32.const 8874) "a") (data (i32.const 8877) "a") (data (i32.const 8880) "a") (data (i32.const 8883) "a") (data (i32.const 8886) "a") (data (i32.const 8889) "a") (data (i32.const 8892) "a") (data (i32.const 8895) "a") (data (i32.const 8898) "a") (data (i32.const 8901) "a") (data (i32.const 8904) "a") (data (i32.const 8907) "a") (data (i32.const 8910) "a") (data (i32.const 8913) "a") (data (i32.const 8916) "a") (data (i32.const 8919) "a") (data (i32.const 8922) "a") (data (i32.const 8925) "a") (data (i32.const 8928) "a") (data (i32.const 8931) "a") (data (i32.const 8934) "a") (data (i32.const 8937) "a") (data (i32.const 8940) "a") (data (i32.const 8943) "a") (data (i32.const 8946) "a") (data (i32.const 8949) "a") (data (i32.const 8952) "a") (data (i32.const 8955) "a") (data (i32.const 8958) "a") (data (i32.const 8961) "a") (data (i32.const 8964) "a") (data (i32.const 8967) "a") (data (i32.const 8970) "a") (data (i32.const 8973) "a") (data (i32.const 8976) "a") (data (i32.const 8979) "a") (data (i32.const 8982) "a") (data (i32.const 8985) "a") (data (i32.const 8988) "a") (data (i32.const 8991) "a") (data (i32.const 8994) "a") (data (i32.const 8997) "a") (data (i32.const 9000) "a") (data (i32.const 9003) "a") (data (i32.const 9006) "a") (data (i32.const 9009) "a") (data (i32.const 9012) "a") (data (i32.const 9015) "a") (data (i32.const 9018) "a") (data (i32.const 9021) "a") (data (i32.const 9024) "a") (data (i32.const 9027) "a") (data (i32.const 9030) "a") (data (i32.const 9033) "a") (data (i32.const 9036) "a") (data (i32.const 9039) "a") (data (i32.const 9042) "a") (data (i32.const 9045) "a") (data (i32.const 9048) "a") (data (i32.const 9051) "a") (data (i32.const 9054) "a") (data (i32.const 9057) "a") (data (i32.const 9060) "a") (data (i32.const 9063) "a") (data (i32.const 9066) "a") (data (i32.const 9069) "a") (data (i32.const 9072) "a") (data (i32.const 9075) "a") (data (i32.const 9078) "a") (data (i32.const 9081) "a") (data (i32.const 9084) "a") (data (i32.const 9087) "a") (data (i32.const 9090) "a") (data (i32.const 9093) "a") (data (i32.const 9096) "a") (data (i32.const 9099) "a") (data (i32.const 9102) "a") (data (i32.const 9105) "a") (data (i32.const 9108) "a") (data (i32.const 9111) "a") (data (i32.const 9114) "a") (data (i32.const 9117) "a") (data (i32.const 9120) "a") (data (i32.const 9123) "a") (data (i32.const 9126) "a") (data (i32.const 9129) "a") (data (i32.const 9132) "a") (data (i32.const 9135) "a") (data (i32.const 9138) "a") (data (i32.const 9141) "a") (data (i32.const 9144) "a") (data (i32.const 9147) "a") (data (i32.const 9150) "a") (data (i32.const 9153) "a") (data (i32.const 9156) "a") (data (i32.const 9159) "a") (data (i32.const 9162) "a") (data (i32.const 9165) "a") (data (i32.const 9168) "a") (data (i32.const 9171) "a") (data (i32.const 9174) "a") (data (i32.const 9177) "a") (data (i32.const 9180) "a") (data (i32.const 9183) "a") (data (i32.const 9186) "a") (data (i32.const 9189) "a") (data (i32.const 9192) "a") (data (i32.const 9195) "a") (data (i32.const 9198) "a") (data (i32.const 9201) "a") (data (i32.const 9204) "a") (data (i32.const 9207) "a") (data (i32.const 9210) "a") (data (i32.const 9213) "a") (data (i32.const 9216) "a") (data (i32.const 9219) "a") (data (i32.const 9222) "a") (data (i32.const 9225) "a") (data (i32.const 9228) "a") (data (i32.const 9231) "a") (data (i32.const 9234) "a") (data (i32.const 9237) "a") (data (i32.const 9240) "a") (data (i32.const 9243) "a") (data (i32.const 9246) "a") (data (i32.const 9249) "a") (data (i32.const 9252) "a") (data (i32.const 9255) "a") (data (i32.const 9258) "a") (data (i32.const 9261) "a") (data (i32.const 9264) "a") (data (i32.const 9267) "a") (data (i32.const 9270) "a") (data (i32.const 9273) "a") (data (i32.const 9276) "a") (data (i32.const 9279) "a") (data (i32.const 9282) "a") (data (i32.const 9285) "a") (data (i32.const 9288) "a") (data (i32.const 9291) "a") (data (i32.const 9294) "a") (data (i32.const 9297) "a") (data (i32.const 9300) "a") (data (i32.const 9303) "a") (data (i32.const 9306) "a") (data (i32.const 9309) "a") (data (i32.const 9312) "a") (data (i32.const 9315) "a") (data (i32.const 9318) "a") (data (i32.const 9321) "a") (data (i32.const 9324) "a") (data (i32.const 9327) "a") (data (i32.const 9330) "a") (data (i32.const 9333) "a") (data (i32.const 9336) "a") (data (i32.const 9339) "a") (data (i32.const 9342) "a") (data (i32.const 9345) "a") (data (i32.const 9348) "a") (data (i32.const 9351) "a") (data (i32.const 9354) "a") (data (i32.const 9357) "a") (data (i32.const 9360) "a") (data (i32.const 9363) "a") (data (i32.const 9366) "a") (data (i32.const 9369) "a") (data (i32.const 9372) "a") (data (i32.const 9375) "a") (data (i32.const 9378) "a") (data (i32.const 9381) "a") (data (i32.const 9384) "a") (data (i32.const 9387) "a") (data (i32.const 9390) "a") (data (i32.const 9393) "a") (data (i32.const 9396) "a") (data (i32.const 9399) "a") (data (i32.const 9402) "a") (data (i32.const 9405) "a") (data (i32.const 9408) "a") (data (i32.const 9411) "a") (data (i32.const 9414) "a") (data (i32.const 9417) "a") (data (i32.const 9420) "a") (data (i32.const 9423) "a") (data (i32.const 9426) "a") (data (i32.const 9429) "a") (data (i32.const 9432) "a") (data (i32.const 9435) "a") (data (i32.const 9438) "a") (data (i32.const 9441) "a") (data (i32.const 9444) "a") (data (i32.const 9447) "a") (data (i32.const 9450) "a") (data (i32.const 9453) "a") (data (i32.const 9456) "a") (data (i32.const 9459) "a") (data (i32.const 9462) "a") (data (i32.const 9465) "a") (data (i32.const 9468) "a") (data (i32.const 9471) "a") (data (i32.const 9474) "a") (data (i32.const 9477) "a") (data (i32.const 9480) "a") (data (i32.const 9483) "a") (data (i32.const 9486) "a") (data (i32.const 9489) "a") (data (i32.const 9492) "a") (data (i32.const 9495) "a") (data (i32.const 9498) "a") (data (i32.const 9501) "a") (data (i32.const 9504) "a") (data (i32.const 9507) "a") (data (i32.const 9510) "a") (data (i32.const 9513) "a") (data (i32.const 9516) "a") (data (i32.const 9519) "a") (data (i32.const 9522) "a") (data (i32.const 9525) "a") (data (i32.const 9528) "a") (data (i32.const 9531) "a") (data (i32.const 9534) "a") (data (i32.const 9537) "a") (data (i32.const 9540) "a") (data (i32.const 9543) "a") (data (i32.const 9546) "a") (data (i32.const 9549) "a") (data (i32.const 9552) "a") (data (i32.const 9555) "a") (data (i32.const 9558) "a") (data (i32.const 9561) "a") (data (i32.const 9564) "a") (data (i32.const 9567) "a") (data (i32.const 9570) "a") (data (i32.const 9573) "a") (data (i32.const 9576) "a") (data (i32.const 9579) "a") (data (i32.const 9582) "a") (data (i32.const 9585) "a") (data (i32.const 9588) "a") (data (i32.const 9591) "a") (data (i32.const 9594) "a") (data (i32.const 9597) "a") (data (i32.const 9600) "a") (data (i32.const 9603) "a") (data (i32.const 9606) "a") (data (i32.const 9609) "a") (data (i32.const 9612) "a") (data (i32.const 9615) "a") (data (i32.const 9618) "a") (data (i32.const 9621) "a") (data (i32.const 9624) "a") (data (i32.const 9627) "a") (data (i32.const 9630) "a") (data (i32.const 9633) "a") (data (i32.const 9636) "a") (data (i32.const 9639) "a") (data (i32.const 9642) "a") (data (i32.const 9645) "a") (data (i32.const 9648) "a") (data (i32.const 9651) "a") (data (i32.const 9654) "a") (data (i32.const 9657) "a") (data (i32.const 9660) "a") (data (i32.const 9663) "a") (data (i32.const 9666) "a") (data (i32.const 9669) "a") (data (i32.const 9672) "a") (data (i32.const 9675) "a") (data (i32.const 9678) "a") (data (i32.const 9681) "a") (data (i32.const 9684) "a") (data (i32.const 9687) "a") (data (i32.const 9690) "a") (data (i32.const 9693) "a") (data (i32.const 9696) "a") (data (i32.const 9699) "a") (data (i32.const 9702) "a") (data (i32.const 9705) "a") (data (i32.const 9708) "a") (data (i32.const 9711) "a") (data (i32.const 9714) "a") (data (i32.const 9717) "a") (data (i32.const 9720) "a") (data (i32.const 9723) "a") (data (i32.const 9726) "a") (data (i32.const 9729) "a") (data (i32.const 9732) "a") (data (i32.const 9735) "a") (data (i32.const 9738) "a") (data (i32.const 9741) "a") (data (i32.const 9744) "a") (data (i32.const 9747) "a") (data (i32.const 9750) "a") (data (i32.const 9753) "a") (data (i32.const 9756) "a") (data (i32.const 9759) "a") (data (i32.const 9762) "a") (data (i32.const 9765) "a") (data (i32.const 9768) "a") (data (i32.const 9771) "a") (data (i32.const 9774) "a") (data (i32.const 9777) "a") (data (i32.const 9780) "a") (data (i32.const 9783) "a") (data (i32.const 9786) "a") (data (i32.const 9789) "a") (data (i32.const 9792) "a") (data (i32.const 9795) "a") (data (i32.const 9798) "a") (data (i32.const 9801) "a") (data (i32.const 9804) "a") (data (i32.const 9807) "a") (data (i32.const 9810) "a") (data (i32.const 9813) "a") (data (i32.const 9816) "a") (data (i32.const 9819) "a") (data (i32.const 9822) "a") (data (i32.const 9825) "a") (data (i32.const 9828) "a") (data (i32.const 9831) "a") (data (i32.const 9834) "a") (data (i32.const 9837) "a") (data (i32.const 9840) "a") (data (i32.const 9843) "a") (data (i32.const 9846) "a") (data (i32.const 9849) "a") (data (i32.const 9852) "a") (data (i32.const 9855) "a") (data (i32.const 9858) "a") (data (i32.const 9861) "a") (data (i32.const 9864) "a") (data (i32.const 9867) "a") (data (i32.const 9870) "a") (data (i32.const 9873) "a") (data (i32.const 9876) "a") (data (i32.const 9879) "a") (data (i32.const 9882) "a") (data (i32.const 9885) "a") (data (i32.const 9888) "a") (data (i32.const 9891) "a") (data (i32.const 9894) "a") (data (i32.const 9897) "a") (data (i32.const 9900) "a") (data (i32.const 9903) "a") (data (i32.const 9906) "a") (data (i32.const 9909) "a") (data (i32.const 9912) "a") (data (i32.const 9915) "a") (data (i32.const 9918) "a") (data (i32.const 9921) "a") (data (i32.const 9924) "a") (data (i32.const 9927) "a") (data (i32.const 9930) "a") (data (i32.const 9933) "a") (data (i32.const 9936) "a") (data (i32.const 9939) "a") (data (i32.const 9942) "a") (data (i32.const 9945) "a") (data (i32.const 9948) "a") (data (i32.const 9951) "a") (data (i32.const 9954) "a") (data (i32.const 9957) "a") (data (i32.const 9960) "a") (data (i32.const 9963) "a") (data (i32.const 9966) "a") (data (i32.const 9969) "a") (data (i32.const 9972) "a") (data (i32.const 9975) "a") (data (i32.const 9978) "a") (data (i32.const 9981) "a") (data (i32.const 9984) "a") (data (i32.const 9987) "a") (data (i32.const 9990) "a") (data (i32.const 9993) "a") (data (i32.const 9996) "a") (data (i32.const 9999) "a") (data (i32.const 10002) "a") (data (i32.const 10005) "a") (data (i32.const 10008) "a") (data (i32.const 10011) "a") (data (i32.const 10014) "a") (data (i32.const 10017) "a") (data (i32.const 10020) "a") (data (i32.const 10023) "a") (data (i32.const 10026) "a") (data (i32.const 10029) "a") (data (i32.const 10032) "a") (data (i32.const 10035) "a") (data (i32.const 10038) "a") (data (i32.const 10041) "a") (data (i32.const 10044) "a") (data (i32.const 10047) "a") (data (i32.const 10050) "a") (data (i32.const 10053) "a") (data (i32.const 10056) "a") (data (i32.const 10059) "a") (data (i32.const 10062) "a") (data (i32.const 10065) "a") (data (i32.const 10068) "a") (data (i32.const 10071) "a") (data (i32.const 10074) "a") (data (i32.const 10077) "a") (data (i32.const 10080) "a") (data (i32.const 10083) "a") (data (i32.const 10086) "a") (data (i32.const 10089) "a") (data (i32.const 10092) "a") (data (i32.const 10095) "a") (data (i32.const 10098) "a") (data (i32.const 10101) "a") (data (i32.const 10104) "a") (data (i32.const 10107) "a") (data (i32.const 10110) "a") (data (i32.const 10113) "a") (data (i32.const 10116) "a") (data (i32.const 10119) "a") (data (i32.const 10122) "a") (data (i32.const 10125) "a") (data (i32.const 10128) "a") (data (i32.const 10131) "a") (data (i32.const 10134) "a") (data (i32.const 10137) "a") (data (i32.const 10140) "a") (data (i32.const 10143) "a") (data (i32.const 10146) "a") (data (i32.const 10149) "a") (data (i32.const 10152) "a") (data (i32.const 10155) "a") (data (i32.const 10158) "a") (data (i32.const 10161) "a") (data (i32.const 10164) "a") (data (i32.const 10167) "a") (data (i32.const 10170) "a") (data (i32.const 10173) "a") (data (i32.const 10176) "a") (data (i32.const 10179) "a") (data (i32.const 10182) "a") (data (i32.const 10185) "a") (data (i32.const 10188) "a") (data (i32.const 10191) "a") (data (i32.const 10194) "a") (data (i32.const 10197) "a") (data (i32.const 10200) "a") (data (i32.const 10203) "a") (data (i32.const 10206) "a") (data (i32.const 10209) "a") (data (i32.const 10212) "a") (data (i32.const 10215) "a") (data (i32.const 10218) "a") (data (i32.const 10221) "a") (data (i32.const 10224) "a") (data (i32.const 10227) "a") (data (i32.const 10230) "a") (data (i32.const 10233) "a") (data (i32.const 10236) "a") (data (i32.const 10239) "a") (data (i32.const 10242) "a") (data (i32.const 10245) "a") (data (i32.const 10248) "a") (data (i32.const 10251) "a") (data (i32.const 10254) "a") (data (i32.const 10257) "a") (data (i32.const 10260) "a") (data (i32.const 10263) "a") (data (i32.const 10266) "a") (data (i32.const 10269) "a") (data (i32.const 10272) "a") (data (i32.const 10275) "a") (data (i32.const 10278) "a") (data (i32.const 10281) "a") (data (i32.const 10284) "a") (data (i32.const 10287) "a") (data (i32.const 10290) "a") (data (i32.const 10293) "a") (data (i32.const 10296) "a") (data (i32.const 10299) "a") (data (i32.const 10302) "a") (data (i32.const 10305) "a") (data (i32.const 10308) "a") (data (i32.const 10311) "a") (data (i32.const 10314) "a") (data (i32.const 10317) "a") (data (i32.const 10320) "a") (data (i32.const 10323) "a") (data (i32.const 10326) "a") (data (i32.const 10329) "a") (data (i32.const 10332) "a") (data (i32.const 10335) "a") (data (i32.const 10338) "a") (data (i32.const 10341) "a") (data (i32.const 10344) "a") (data (i32.const 10347) "a") (data (i32.const 10350) "a") (data (i32.const 10353) "a") (data (i32.const 10356) "a") (data (i32.const 10359) "a") (data (i32.const 10362) "a") (data (i32.const 10365) "a") (data (i32.const 10368) "a") (data (i32.const 10371) "a") (data (i32.const 10374) "a") (data (i32.const 10377) "a") (data (i32.const 10380) "a") (data (i32.const 10383) "a") (data (i32.const 10386) "a") (data (i32.const 10389) "a") (data (i32.const 10392) "a") (data (i32.const 10395) "a") (data (i32.const 10398) "a") (data (i32.const 10401) "a") (data (i32.const 10404) "a") (data (i32.const 10407) "a") (data (i32.const 10410) "a") (data (i32.const 10413) "a") (data (i32.const 10416) "a") (data (i32.const 10419) "a") (data (i32.const 10422) "a") (data (i32.const 10425) "a") (data (i32.const 10428) "a") (data (i32.const 10431) "a") (data (i32.const 10434) "a") (data (i32.const 10437) "a") (data (i32.const 10440) "a") (data (i32.const 10443) "a") (data (i32.const 10446) "a") (data (i32.const 10449) "a") (data (i32.const 10452) "a") (data (i32.const 10455) "a") (data (i32.const 10458) "a") (data (i32.const 10461) "a") (data (i32.const 10464) "a") (data (i32.const 10467) "a") (data (i32.const 10470) "a") (data (i32.const 10473) "a") (data (i32.const 10476) "a") (data (i32.const 10479) "a") (data (i32.const 10482) "a") (data (i32.const 10485) "a") (data (i32.const 10488) "a") (data (i32.const 10491) "a") (data (i32.const 10494) "a") (data (i32.const 10497) "a") (data (i32.const 10500) "a") (data (i32.const 10503) "a") (data (i32.const 10506) "a") (data (i32.const 10509) "a") (data (i32.const 10512) "a") (data (i32.const 10515) "a") (data (i32.const 10518) "a") (data (i32.const 10521) "a") (data (i32.const 10524) "a") (data (i32.const 10527) "a") (data (i32.const 10530) "a") (data (i32.const 10533) "a") (data (i32.const 10536) "a") (data (i32.const 10539) "a") (data (i32.const 10542) "a") (data (i32.const 10545) "a") (data (i32.const 10548) "a") (data (i32.const 10551) "a") (data (i32.const 10554) "a") (data (i32.const 10557) "a") (data (i32.const 10560) "a") (data (i32.const 10563) "a") (data (i32.const 10566) "a") (data (i32.const 10569) "a") (data (i32.const 10572) "a") (data (i32.const 10575) "a") (data (i32.const 10578) "a") (data (i32.const 10581) "a") (data (i32.const 10584) "a") (data (i32.const 10587) "a") (data (i32.const 10590) "a") (data (i32.const 10593) "a") (data (i32.const 10596) "a") (data (i32.const 10599) "a") (data (i32.const 10602) "a") (data (i32.const 10605) "a") (data (i32.const 10608) "a") (data (i32.const 10611) "a") (data (i32.const 10614) "a") (data (i32.const 10617) "a") (data (i32.const 10620) "a") (data (i32.const 10623) "a") (data (i32.const 10626) "a") (data (i32.const 10629) "a") (data (i32.const 10632) "a") (data (i32.const 10635) "a") (data (i32.const 10638) "a") (data (i32.const 10641) "a") (data (i32.const 10644) "a") (data (i32.const 10647) "a") (data (i32.const 10650) "a") (data (i32.const 10653) "a") (data (i32.const 10656) "a") (data (i32.const 10659) "a") (data (i32.const 10662) "a") (data (i32.const 10665) "a") (data (i32.const 10668) "a") (data (i32.const 10671) "a") (data (i32.const 10674) "a") (data (i32.const 10677) "a") (data (i32.const 10680) "a") (data (i32.const 10683) "a") (data (i32.const 10686) "a") (data (i32.const 10689) "a") (data (i32.const 10692) "a") (data (i32.const 10695) "a") (data (i32.const 10698) "a") (data (i32.const 10701) "a") (data (i32.const 10704) "a") (data (i32.const 10707) "a") (data (i32.const 10710) "a") (data (i32.const 10713) "a") (data (i32.const 10716) "a") (data (i32.const 10719) "a") (data (i32.const 10722) "a") (data (i32.const 10725) "a") (data (i32.const 10728) "a") (data (i32.const 10731) "a") (data (i32.const 10734) "a") (data (i32.const 10737) "a") (data (i32.const 10740) "a") (data (i32.const 10743) "a") (data (i32.const 10746) "a") (data (i32.const 10749) "a") (data (i32.const 10752) "a") (data (i32.const 10755) "a") (data (i32.const 10758) "a") (data (i32.const 10761) "a") (data (i32.const 10764) "a") (data (i32.const 10767) "a") (data (i32.const 10770) "a") (data (i32.const 10773) "a") (data (i32.const 10776) "a") (data (i32.const 10779) "a") (data (i32.const 10782) "a") (data (i32.const 10785) "a") (data (i32.const 10788) "a") (data (i32.const 10791) "a") (data (i32.const 10794) "a") (data (i32.const 10797) "a") (data (i32.const 10800) "a") (data (i32.const 10803) "a") (data (i32.const 10806) "a") (data (i32.const 10809) "a") (data (i32.const 10812) "a") (data (i32.const 10815) "a") (data (i32.const 10818) "a") (data (i32.const 10821) "a") (data (i32.const 10824) "a") (data (i32.const 10827) "a") (data (i32.const 10830) "a") (data (i32.const 10833) "a") (data (i32.const 10836) "a") (data (i32.const 10839) "a") (data (i32.const 10842) "a") (data (i32.const 10845) "a") (data (i32.const 10848) "a") (data (i32.const 10851) "a") (data (i32.const 10854) "a") (data (i32.const 10857) "a") (data (i32.const 10860) "a") (data (i32.const 10863) "a") (data (i32.const 10866) "a") (data (i32.const 10869) "a") (data (i32.const 10872) "a") (data (i32.const 10875) "a") (data (i32.const 10878) "a") (data (i32.const 10881) "a") (data (i32.const 10884) "a") (data (i32.const 10887) "a") (data (i32.const 10890) "a") (data (i32.const 10893) "a") (data (i32.const 10896) "a") (data (i32.const 10899) "a") (data (i32.const 10902) "a") (data (i32.const 10905) "a") (data (i32.const 10908) "a") (data (i32.const 10911) "a") (data (i32.const 10914) "a") (data (i32.const 10917) "a") (data (i32.const 10920) "a") (data (i32.const 10923) "a") (data (i32.const 10926) "a") (data (i32.const 10929) "a") (data (i32.const 10932) "a") (data (i32.const 10935) "a") (data (i32.const 10938) "a") (data (i32.const 10941) "a") (data (i32.const 10944) "a") (data (i32.const 10947) "a") (data (i32.const 10950) "a") (data (i32.const 10953) "a") (data (i32.const 10956) "a") (data (i32.const 10959) "a") (data (i32.const 10962) "a") (data (i32.const 10965) "a") (data (i32.const 10968) "a") (data (i32.const 10971) "a") (data (i32.const 10974) "a") (data (i32.const 10977) "a") (data (i32.const 10980) "a") (data (i32.const 10983) "a") (data (i32.const 10986) "a") (data (i32.const 10989) "a") (data (i32.const 10992) "a") (data (i32.const 10995) "a") (data (i32.const 10998) "a") (data (i32.const 11001) "a") (data (i32.const 11004) "a") (data (i32.const 11007) "a") (data (i32.const 11010) "a") (data (i32.const 11013) "a") (data (i32.const 11016) "a") (data (i32.const 11019) "a") (data (i32.const 11022) "a") (data (i32.const 11025) "a") (data (i32.const 11028) "a") (data (i32.const 11031) "a") (data (i32.const 11034) "a") (data (i32.const 11037) "a") (data (i32.const 11040) "a") (data (i32.const 11043) "a") (data (i32.const 11046) "a") (data (i32.const 11049) "a") (data (i32.const 11052) "a") (data (i32.const 11055) "a") (data (i32.const 11058) "a") (data (i32.const 11061) "a") (data (i32.const 11064) "a") (data (i32.const 11067) "a") (data (i32.const 11070) "a") (data (i32.const 11073) "a") (data (i32.const 11076) "a") (data (i32.const 11079) "a") (data (i32.const 11082) "a") (data (i32.const 11085) "a") (data (i32.const 11088) "a") (data (i32.const 11091) "a") (data (i32.const 11094) "a") (data (i32.const 11097) "a") (data (i32.const 11100) "a") (data (i32.const 11103) "a") (data (i32.const 11106) "a") (data (i32.const 11109) "a") (data (i32.const 11112) "a") (data (i32.const 11115) "a") (data (i32.const 11118) "a") (data (i32.const 11121) "a") (data (i32.const 11124) "a") (data (i32.const 11127) "a") (data (i32.const 11130) "a") (data (i32.const 11133) "a") (data (i32.const 11136) "a") (data (i32.const 11139) "a") (data (i32.const 11142) "a") (data (i32.const 11145) "a") (data (i32.const 11148) "a") (data (i32.const 11151) "a") (data (i32.const 11154) "a") (data (i32.const 11157) "a") (data (i32.const 11160) "a") (data (i32.const 11163) "a") (data (i32.const 11166) "a") (data (i32.const 11169) "a") (data (i32.const 11172) "a") (data (i32.const 11175) "a") (data (i32.const 11178) "a") (data (i32.const 11181) "a") (data (i32.const 11184) "a") (data (i32.const 11187) "a") (data (i32.const 11190) "a") (data (i32.const 11193) "a") (data (i32.const 11196) "a") (data (i32.const 11199) "a") (data (i32.const 11202) "a") (data (i32.const 11205) "a") (data (i32.const 11208) "a") (data (i32.const 11211) "a") (data (i32.const 11214) "a") (data (i32.const 11217) "a") (data (i32.const 11220) "a") (data (i32.const 11223) "a") (data (i32.const 11226) "a") (data (i32.const 11229) "a") (data (i32.const 11232) "a") (data (i32.const 11235) "a") (data (i32.const 11238) "a") (data (i32.const 11241) "a") (data (i32.const 11244) "a") (data (i32.const 11247) "a") (data (i32.const 11250) "a") (data (i32.const 11253) "a") (data (i32.const 11256) "a") (data (i32.const 11259) "a") (data (i32.const 11262) "a") (data (i32.const 11265) "a") (data (i32.const 11268) "a") (data (i32.const 11271) "a") (data (i32.const 11274) "a") (data (i32.const 11277) "a") (data (i32.const 11280) "a") (data (i32.const 11283) "a") (data (i32.const 11286) "a") (data (i32.const 11289) "a") (data (i32.const 11292) "a") (data (i32.const 11295) "a") (data (i32.const 11298) "a") (data (i32.const 11301) "a") (data (i32.const 11304) "a") (data (i32.const 11307) "a") (data (i32.const 11310) "a") (data (i32.const 11313) "a") (data (i32.const 11316) "a") (data (i32.const 11319) "a") (data (i32.const 11322) "a") (data (i32.const 11325) "a") (data (i32.const 11328) "a") (data (i32.const 11331) "a") (data (i32.const 11334) "a") (data (i32.const 11337) "a") (data (i32.const 11340) "a") (data (i32.const 11343) "a") (data (i32.const 11346) "a") (data (i32.const 11349) "a") (data (i32.const 11352) "a") (data (i32.const 11355) "a") (data (i32.const 11358) "a") (data (i32.const 11361) "a") (data (i32.const 11364) "a") (data (i32.const 11367) "a") (data (i32.const 11370) "a") (data (i32.const 11373) "a") (data (i32.const 11376) "a") (data (i32.const 11379) "a") (data (i32.const 11382) "a") (data (i32.const 11385) "a") (data (i32.const 11388) "a") (data (i32.const 11391) "a") (data (i32.const 11394) "a") (data (i32.const 11397) "a") (data (i32.const 11400) "a") (data (i32.const 11403) "a") (data (i32.const 11406) "a") (data (i32.const 11409) "a") (data (i32.const 11412) "a") (data (i32.const 11415) "a") (data (i32.const 11418) "a") (data (i32.const 11421) "a") (data (i32.const 11424) "a") (data (i32.const 11427) "a") (data (i32.const 11430) "a") (data (i32.const 11433) "a") (data (i32.const 11436) "a") (data (i32.const 11439) "a") (data (i32.const 11442) "a") (data (i32.const 11445) "a") (data (i32.const 11448) "a") (data (i32.const 11451) "a") (data (i32.const 11454) "a") (data (i32.const 11457) "a") (data (i32.const 11460) "a") (data (i32.const 11463) "a") (data (i32.const 11466) "a") (data (i32.const 11469) "a") (data (i32.const 11472) "a") (data (i32.const 11475) "a") (data (i32.const 11478) "a") (data (i32.const 11481) "a") (data (i32.const 11484) "a") (data (i32.const 11487) "a") (data (i32.const 11490) "a") (data (i32.const 11493) "a") (data (i32.const 11496) "a") (data (i32.const 11499) "a") (data (i32.const 11502) "a") (data (i32.const 11505) "a") (data (i32.const 11508) "a") (data (i32.const 11511) "a") (data (i32.const 11514) "a") (data (i32.const 11517) "a") (data (i32.const 11520) "a") (data (i32.const 11523) "a") (data (i32.const 11526) "a") (data (i32.const 11529) "a") (data (i32.const 11532) "a") (data (i32.const 11535) "a") (data (i32.const 11538) "a") (data (i32.const 11541) "a") (data (i32.const 11544) "a") (data (i32.const 11547) "a") (data (i32.const 11550) "a") (data (i32.const 11553) "a") (data (i32.const 11556) "a") (data (i32.const 11559) "a") (data (i32.const 11562) "a") (data (i32.const 11565) "a") (data (i32.const 11568) "a") (data (i32.const 11571) "a") (data (i32.const 11574) "a") (data (i32.const 11577) "a") (data (i32.const 11580) "a") (data (i32.const 11583) "a") (data (i32.const 11586) "a") (data (i32.const 11589) "a") (data (i32.const 11592) "a") (data (i32.const 11595) "a") (data (i32.const 11598) "a") (data (i32.const 11601) "a") (data (i32.const 11604) "a") (data (i32.const 11607) "a") (data (i32.const 11610) "a") (data (i32.const 11613) "a") (data (i32.const 11616) "a") (data (i32.const 11619) "a") (data (i32.const 11622) "a") (data (i32.const 11625) "a") (data (i32.const 11628) "a") (data (i32.const 11631) "a") (data (i32.const 11634) "a") (data (i32.const 11637) "a") (data (i32.const 11640) "a") (data (i32.const 11643) "a") (data (i32.const 11646) "a") (data (i32.const 11649) "a") (data (i32.const 11652) "a") (data (i32.const 11655) "a") (data (i32.const 11658) "a") (data (i32.const 11661) "a") (data (i32.const 11664) "a") (data (i32.const 11667) "a") (data (i32.const 11670) "a") (data (i32.const 11673) "a") (data (i32.const 11676) "a") (data (i32.const 11679) "a") (data (i32.const 11682) "a") (data (i32.const 11685) "a") (data (i32.const 11688) "a") (data (i32.const 11691) "a") (data (i32.const 11694) "a") (data (i32.const 11697) "a") (data (i32.const 11700) "a") (data (i32.const 11703) "a") (data (i32.const 11706) "a") (data (i32.const 11709) "a") (data (i32.const 11712) "a") (data (i32.const 11715) "a") (data (i32.const 11718) "a") (data (i32.const 11721) "a") (data (i32.const 11724) "a") (data (i32.const 11727) "a") (data (i32.const 11730) "a") (data (i32.const 11733) "a") (data (i32.const 11736) "a") (data (i32.const 11739) "a") (data (i32.const 11742) "a") (data (i32.const 11745) "a") (data (i32.const 11748) "a") (data (i32.const 11751) "a") (data (i32.const 11754) "a") (data (i32.const 11757) "a") (data (i32.const 11760) "a") (data (i32.const 11763) "a") (data (i32.const 11766) "a") (data (i32.const 11769) "a") (data (i32.const 11772) "a") (data (i32.const 11775) "a") (data (i32.const 11778) "a") (data (i32.const 11781) "a") (data (i32.const 11784) "a") (data (i32.const 11787) "a") (data (i32.const 11790) "a") (data (i32.const 11793) "a") (data (i32.const 11796) "a") (data (i32.const 11799) "a") (data (i32.const 11802) "a") (data (i32.const 11805) "a") (data (i32.const 11808) "a") (data (i32.const 11811) "a") (data (i32.const 11814) "a") (data (i32.const 11817) "a") (data (i32.const 11820) "a") (data (i32.const 11823) "a") (data (i32.const 11826) "a") (data (i32.const 11829) "a") (data (i32.const 11832) "a") (data (i32.const 11835) "a") (data (i32.const 11838) "a") (data (i32.const 11841) "a") (data (i32.const 11844) "a") (data (i32.const 11847) "a") (data (i32.const 11850) "a") (data (i32.const 11853) "a") (data (i32.const 11856) "a") (data (i32.const 11859) "a") (data (i32.const 11862) "a") (data (i32.const 11865) "a") (data (i32.const 11868) "a") (data (i32.const 11871) "a") (data (i32.const 11874) "a") (data (i32.const 11877) "a") (data (i32.const 11880) "a") (data (i32.const 11883) "a") (data (i32.const 11886) "a") (data (i32.const 11889) "a") (data (i32.const 11892) "a") (data (i32.const 11895) "a") (data (i32.const 11898) "a") (data (i32.const 11901) "a") (data (i32.const 11904) "a") (data (i32.const 11907) "a") (data (i32.const 11910) "a") (data (i32.const 11913) "a") (data (i32.const 11916) "a") (data (i32.const 11919) "a") (data (i32.const 11922) "a") (data (i32.const 11925) "a") (data (i32.const 11928) "a") (data (i32.const 11931) "a") (data (i32.const 11934) "a") (data (i32.const 11937) "a") (data (i32.const 11940) "a") (data (i32.const 11943) "a") (data (i32.const 11946) "a") (data (i32.const 11949) "a") (data (i32.const 11952) "a") (data (i32.const 11955) "a") (data (i32.const 11958) "a") (data (i32.const 11961) "a") (data (i32.const 11964) "a") (data (i32.const 11967) "a") (data (i32.const 11970) "a") (data (i32.const 11973) "a") (data (i32.const 11976) "a") (data (i32.const 11979) "a") (data (i32.const 11982) "a") (data (i32.const 11985) "a") (data (i32.const 11988) "a") (data (i32.const 11991) "a") (data (i32.const 11994) "a") (data (i32.const 11997) "a") (data (i32.const 12000) "a") (data (i32.const 12003) "a") (data (i32.const 12006) "a") (data (i32.const 12009) "a") (data (i32.const 12012) "a") (data (i32.const 12015) "a") (data (i32.const 12018) "a") (data (i32.const 12021) "a") (data (i32.const 12024) "a") (data (i32.const 12027) "a") (data (i32.const 12030) "a") (data (i32.const 12033) "a") (data (i32.const 12036) "a") (data (i32.const 12039) "a") (data (i32.const 12042) "a") (data (i32.const 12045) "a") (data (i32.const 12048) "a") (data (i32.const 12051) "a") (data (i32.const 12054) "a") (data (i32.const 12057) "a") (data (i32.const 12060) "a") (data (i32.const 12063) "a") (data (i32.const 12066) "a") (data (i32.const 12069) "a") (data (i32.const 12072) "a") (data (i32.const 12075) "a") (data (i32.const 12078) "a") (data (i32.const 12081) "a") (data (i32.const 12084) "a") (data (i32.const 12087) "a") (data (i32.const 12090) "a") (data (i32.const 12093) "a") (data (i32.const 12096) "a") (data (i32.const 12099) "a") (data (i32.const 12102) "a") (data (i32.const 12105) "a") (data (i32.const 12108) "a") (data (i32.const 12111) "a") (data (i32.const 12114) "a") (data (i32.const 12117) "a") (data (i32.const 12120) "a") (data (i32.const 12123) "a") (data (i32.const 12126) "a") (data (i32.const 12129) "a") (data (i32.const 12132) "a") (data (i32.const 12135) "a") (data (i32.const 12138) "a") (data (i32.const 12141) "a") (data (i32.const 12144) "a") (data (i32.const 12147) "a") (data (i32.const 12150) "a") (data (i32.const 12153) "a") (data (i32.const 12156) "a") (data (i32.const 12159) "a") (data (i32.const 12162) "a") (data (i32.const 12165) "a") (data (i32.const 12168) "a") (data (i32.const 12171) "a") (data (i32.const 12174) "a") (data (i32.const 12177) "a") (data (i32.const 12180) "a") (data (i32.const 12183) "a") (data (i32.const 12186) "a") (data (i32.const 12189) "a") (data (i32.const 12192) "a") (data (i32.const 12195) "a") (data (i32.const 12198) "a") (data (i32.const 12201) "a") (data (i32.const 12204) "a") (data (i32.const 12207) "a") (data (i32.const 12210) "a") (data (i32.const 12213) "a") (data (i32.const 12216) "a") (data (i32.const 12219) "a") (data (i32.const 12222) "a") (data (i32.const 12225) "a") (data (i32.const 12228) "a") (data (i32.const 12231) "a") (data (i32.const 12234) "a") (data (i32.const 12237) "a") (data (i32.const 12240) "a") (data (i32.const 12243) "a") (data (i32.const 12246) "a") (data (i32.const 12249) "a") (data (i32.const 12252) "a") (data (i32.const 12255) "a") (data (i32.const 12258) "a") (data (i32.const 12261) "a") (data (i32.const 12264) "a") (data (i32.const 12267) "a") (data (i32.const 12270) "a") (data (i32.const 12273) "a") (data (i32.const 12276) "a") (data (i32.const 12279) "a") (data (i32.const 12282) "a") (data (i32.const 12285) "a") (data (i32.const 12288) "a") (data (i32.const 12291) "a") (data (i32.const 12294) "a") (data (i32.const 12297) "a") (data (i32.const 12300) "a") (data (i32.const 12303) "a") (data (i32.const 12306) "a") (data (i32.const 12309) "a") (data (i32.const 12312) "a") (data (i32.const 12315) "a") (data (i32.const 12318) "a") (data (i32.const 12321) "a") (data (i32.const 12324) "a") (data (i32.const 12327) "a") (data (i32.const 12330) "a") (data (i32.const 12333) "a") (data (i32.const 12336) "a") (data (i32.const 12339) "a") (data (i32.const 12342) "a") (data (i32.const 12345) "a") (data (i32.const 12348) "a") (data (i32.const 12351) "a") (data (i32.const 12354) "a") (data (i32.const 12357) "a") (data (i32.const 12360) "a") (data (i32.const 12363) "a") (data (i32.const 12366) "a") (data (i32.const 12369) "a") (data (i32.const 12372) "a") (data (i32.const 12375) "a") (data (i32.const 12378) "a") (data (i32.const 12381) "a") (data (i32.const 12384) "a") (data (i32.const 12387) "a") (data (i32.const 12390) "a") (data (i32.const 12393) "a") (data (i32.const 12396) "a") (data (i32.const 12399) "a") (data (i32.const 12402) "a") (data (i32.const 12405) "a") (data (i32.const 12408) "a") (data (i32.const 12411) "a") (data (i32.const 12414) "a") (data (i32.const 12417) "a") (data (i32.const 12420) "a") (data (i32.const 12423) "a") (data (i32.const 12426) "a") (data (i32.const 12429) "a") (data (i32.const 12432) "a") (data (i32.const 12435) "a") (data (i32.const 12438) "a") (data (i32.const 12441) "a") (data (i32.const 12444) "a") (data (i32.const 12447) "a") (data (i32.const 12450) "a") (data (i32.const 12453) "a") (data (i32.const 12456) "a") (data (i32.const 12459) "a") (data (i32.const 12462) "a") (data (i32.const 12465) "a") (data (i32.const 12468) "a") (data (i32.const 12471) "a") (data (i32.const 12474) "a") (data (i32.const 12477) "a") (data (i32.const 12480) "a") (data (i32.const 12483) "a") (data (i32.const 12486) "a") (data (i32.const 12489) "a") (data (i32.const 12492) "a") (data (i32.const 12495) "a") (data (i32.const 12498) "a") (data (i32.const 12501) "a") (data (i32.const 12504) "a") (data (i32.const 12507) "a") (data (i32.const 12510) "a") (data (i32.const 12513) "a") (data (i32.const 12516) "a") (data (i32.const 12519) "a") (data (i32.const 12522) "a") (data (i32.const 12525) "a") (data (i32.const 12528) "a") (data (i32.const 12531) "a") (data (i32.const 12534) "a") (data (i32.const 12537) "a") (data (i32.const 12540) "a") (data (i32.const 12543) "a") (data (i32.const 12546) "a") (data (i32.const 12549) "a") (data (i32.const 12552) "a") (data (i32.const 12555) "a") (data (i32.const 12558) "a") (data (i32.const 12561) "a") (data (i32.const 12564) "a") (data (i32.const 12567) "a") (data (i32.const 12570) "a") (data (i32.const 12573) "a") (data (i32.const 12576) "a") (data (i32.const 12579) "a") (data (i32.const 12582) "a") (data (i32.const 12585) "a") (data (i32.const 12588) "a") (data (i32.const 12591) "a") (data (i32.const 12594) "a") (data (i32.const 12597) "a") (data (i32.const 12600) "a") (data (i32.const 12603) "a") (data (i32.const 12606) "a") (data (i32.const 12609) "a") (data (i32.const 12612) "a") (data (i32.const 12615) "a") (data (i32.const 12618) "a") (data (i32.const 12621) "a") (data (i32.const 12624) "a") (data (i32.const 12627) "a") (data (i32.const 12630) "a") (data (i32.const 12633) "a") (data (i32.const 12636) "a") (data (i32.const 12639) "a") (data (i32.const 12642) "a") (data (i32.const 12645) "a") (data (i32.const 12648) "a") (data (i32.const 12651) "a") (data (i32.const 12654) "a") (data (i32.const 12657) "a") (data (i32.const 12660) "a") (data (i32.const 12663) "a") (data (i32.const 12666) "a") (data (i32.const 12669) "a") (data (i32.const 12672) "a") (data (i32.const 12675) "a") (data (i32.const 12678) "a") (data (i32.const 12681) "a") (data (i32.const 12684) "a") (data (i32.const 12687) "a") (data (i32.const 12690) "a") (data (i32.const 12693) "a") (data (i32.const 12696) "a") (data (i32.const 12699) "a") (data (i32.const 12702) "a") (data (i32.const 12705) "a") (data (i32.const 12708) "a") (data (i32.const 12711) "a") (data (i32.const 12714) "a") (data (i32.const 12717) "a") (data (i32.const 12720) "a") (data (i32.const 12723) "a") (data (i32.const 12726) "a") (data (i32.const 12729) "a") (data (i32.const 12732) "a") (data (i32.const 12735) "a") (data (i32.const 12738) "a") (data (i32.const 12741) "a") (data (i32.const 12744) "a") (data (i32.const 12747) "a") (data (i32.const 12750) "a") (data (i32.const 12753) "a") (data (i32.const 12756) "a") (data (i32.const 12759) "a") (data (i32.const 12762) "a") (data (i32.const 12765) "a") (data (i32.const 12768) "a") (data (i32.const 12771) "a") (data (i32.const 12774) "a") (data (i32.const 12777) "a") (data (i32.const 12780) "a") (data (i32.const 12783) "a") (data (i32.const 12786) "a") (data (i32.const 12789) "a") (data (i32.const 12792) "a") (data (i32.const 12795) "a") (data (i32.const 12798) "a") (data (i32.const 12801) "a") (data (i32.const 12804) "a") (data (i32.const 12807) "a") (data (i32.const 12810) "a") (data (i32.const 12813) "a") (data (i32.const 12816) "a") (data (i32.const 12819) "a") (data (i32.const 12822) "a") (data (i32.const 12825) "a") (data (i32.const 12828) "a") (data (i32.const 12831) "a") (data (i32.const 12834) "a") (data (i32.const 12837) "a") (data (i32.const 12840) "a") (data (i32.const 12843) "a") (data (i32.const 12846) "a") (data (i32.const 12849) "a") (data (i32.const 12852) "a") (data (i32.const 12855) "a") (data (i32.const 12858) "a") (data (i32.const 12861) "a") (data (i32.const 12864) "a") (data (i32.const 12867) "a") (data (i32.const 12870) "a") (data (i32.const 12873) "a") (data (i32.const 12876) "a") (data (i32.const 12879) "a") (data (i32.const 12882) "a") (data (i32.const 12885) "a") (data (i32.const 12888) "a") (data (i32.const 12891) "a") (data (i32.const 12894) "a") (data (i32.const 12897) "a") (data (i32.const 12900) "a") (data (i32.const 12903) "a") (data (i32.const 12906) "a") (data (i32.const 12909) "a") (data (i32.const 12912) "a") (data (i32.const 12915) "a") (data (i32.const 12918) "a") (data (i32.const 12921) "a") (data (i32.const 12924) "a") (data (i32.const 12927) "a") (data (i32.const 12930) "a") (data (i32.const 12933) "a") (data (i32.const 12936) "a") (data (i32.const 12939) "a") (data (i32.const 12942) "a") (data (i32.const 12945) "a") (data (i32.const 12948) "a") (data (i32.const 12951) "a") (data (i32.const 12954) "a") (data (i32.const 12957) "a") (data (i32.const 12960) "a") (data (i32.const 12963) "a") (data (i32.const 12966) "a") (data (i32.const 12969) "a") (data (i32.const 12972) "a") (data (i32.const 12975) "a") (data (i32.const 12978) "a") (data (i32.const 12981) "a") (data (i32.const 12984) "a") (data (i32.const 12987) "a") (data (i32.const 12990) "a") (data (i32.const 12993) "a") (data (i32.const 12996) "a") (data (i32.const 12999) "a") (data (i32.const 13002) "a") (data (i32.const 13005) "a") (data (i32.const 13008) "a") (data (i32.const 13011) "a") (data (i32.const 13014) "a") (data (i32.const 13017) "a") (data (i32.const 13020) "a") (data (i32.const 13023) "a") (data (i32.const 13026) "a") (data (i32.const 13029) "a") (data (i32.const 13032) "a") (data (i32.const 13035) "a") (data (i32.const 13038) "a") (data (i32.const 13041) "a") (data (i32.const 13044) "a") (data (i32.const 13047) "a") (data (i32.const 13050) "a") (data (i32.const 13053) "a") (data (i32.const 13056) "a") (data (i32.const 13059) "a") (data (i32.const 13062) "a") (data (i32.const 13065) "a") (data (i32.const 13068) "a") (data (i32.const 13071) "a") (data (i32.const 13074) "a") (data (i32.const 13077) "a") (data (i32.const 13080) "a") (data (i32.const 13083) "a") (data (i32.const 13086) "a") (data (i32.const 13089) "a") (data (i32.const 13092) "a") (data (i32.const 13095) "a") (data (i32.const 13098) "a") (data (i32.const 13101) "a") (data (i32.const 13104) "a") (data (i32.const 13107) "a") (data (i32.const 13110) "a") (data (i32.const 13113) "a") (data (i32.const 13116) "a") (data (i32.const 13119) "a") (data (i32.const 13122) "a") (data (i32.const 13125) "a") (data (i32.const 13128) "a") (data (i32.const 13131) "a") (data (i32.const 13134) "a") (data (i32.const 13137) "a") (data (i32.const 13140) "a") (data (i32.const 13143) "a") (data (i32.const 13146) "a") (data (i32.const 13149) "a") (data (i32.const 13152) "a") (data (i32.const 13155) "a") (data (i32.const 13158) "a") (data (i32.const 13161) "a") (data (i32.const 13164) "a") (data (i32.const 13167) "a") (data (i32.const 13170) "a") (data (i32.const 13173) "a") (data (i32.const 13176) "a") (data (i32.const 13179) "a") (data (i32.const 13182) "a") (data (i32.const 13185) "a") (data (i32.const 13188) "a") (data (i32.const 13191) "a") (data (i32.const 13194) "a") (data (i32.const 13197) "a") (data (i32.const 13200) "a") (data (i32.const 13203) "a") (data (i32.const 13206) "a") (data (i32.const 13209) "a") (data (i32.const 13212) "a") (data (i32.const 13215) "a") (data (i32.const 13218) "a") (data (i32.const 13221) "a") (data (i32.const 13224) "a") (data (i32.const 13227) "a") (data (i32.const 13230) "a") (data (i32.const 13233) "a") (data (i32.const 13236) "a") (data (i32.const 13239) "a") (data (i32.const 13242) "a") (data (i32.const 13245) "a") (data (i32.const 13248) "a") (data (i32.const 13251) "a") (data (i32.const 13254) "a") (data (i32.const 13257) "a") (data (i32.const 13260) "a") (data (i32.const 13263) "a") (data (i32.const 13266) "a") (data (i32.const 13269) "a") (data (i32.const 13272) "a") (data (i32.const 13275) "a") (data (i32.const 13278) "a") (data (i32.const 13281) "a") (data (i32.const 13284) "a") (data (i32.const 13287) "a") (data (i32.const 13290) "a") (data (i32.const 13293) "a") (data (i32.const 13296) "a") (data (i32.const 13299) "a") (data (i32.const 13302) "a") (data (i32.const 13305) "a") (data (i32.const 13308) "a") (data (i32.const 13311) "a") (data (i32.const 13314) "a") (data (i32.const 13317) "a") (data (i32.const 13320) "a") (data (i32.const 13323) "a") (data (i32.const 13326) "a") (data (i32.const 13329) "a") (data (i32.const 13332) "a") (data (i32.const 13335) "a") (data (i32.const 13338) "a") (data (i32.const 13341) "a") (data (i32.const 13344) "a") (data (i32.const 13347) "a") (data (i32.const 13350) "a") (data (i32.const 13353) "a") (data (i32.const 13356) "a") (data (i32.const 13359) "a") (data (i32.const 13362) "a") (data (i32.const 13365) "a") (data (i32.const 13368) "a") (data (i32.const 13371) "a") (data (i32.const 13374) "a") (data (i32.const 13377) "a") (data (i32.const 13380) "a") (data (i32.const 13383) "a") (data (i32.const 13386) "a") (data (i32.const 13389) "a") (data (i32.const 13392) "a") (data (i32.const 13395) "a") (data (i32.const 13398) "a") (data (i32.const 13401) "a") (data (i32.const 13404) "a") (data (i32.const 13407) "a") (data (i32.const 13410) "a") (data (i32.const 13413) "a") (data (i32.const 13416) "a") (data (i32.const 13419) "a") (data (i32.const 13422) "a") (data (i32.const 13425) "a") (data (i32.const 13428) "a") (data (i32.const 13431) "a") (data (i32.const 13434) "a") (data (i32.const 13437) "a") (data (i32.const 13440) "a") (data (i32.const 13443) "a") (data (i32.const 13446) "a") (data (i32.const 13449) "a") (data (i32.const 13452) "a") (data (i32.const 13455) "a") (data (i32.const 13458) "a") (data (i32.const 13461) "a") (data (i32.const 13464) "a") (data (i32.const 13467) "a") (data (i32.const 13470) "a") (data (i32.const 13473) "a") (data (i32.const 13476) "a") (data (i32.const 13479) "a") (data (i32.const 13482) "a") (data (i32.const 13485) "a") (data (i32.const 13488) "a") (data (i32.const 13491) "a") (data (i32.const 13494) "a") (data (i32.const 13497) "a") (data (i32.const 13500) "a") (data (i32.const 13503) "a") (data (i32.const 13506) "a") (data (i32.const 13509) "a") (data (i32.const 13512) "a") (data (i32.const 13515) "a") (data (i32.const 13518) "a") (data (i32.const 13521) "a") (data (i32.const 13524) "a") (data (i32.const 13527) "a") (data (i32.const 13530) "a") (data (i32.const 13533) "a") (data (i32.const 13536) "a") (data (i32.const 13539) "a") (data (i32.const 13542) "a") (data (i32.const 13545) "a") (data (i32.const 13548) "a") (data (i32.const 13551) "a") (data (i32.const 13554) "a") (data (i32.const 13557) "a") (data (i32.const 13560) "a") (data (i32.const 13563) "a") (data (i32.const 13566) "a") (data (i32.const 13569) "a") (data (i32.const 13572) "a") (data (i32.const 13575) "a") (data (i32.const 13578) "a") (data (i32.const 13581) "a") (data (i32.const 13584) "a") (data (i32.const 13587) "a") (data (i32.const 13590) "a") (data (i32.const 13593) "a") (data (i32.const 13596) "a") (data (i32.const 13599) "a") (data (i32.const 13602) "a") (data (i32.const 13605) "a") (data (i32.const 13608) "a") (data (i32.const 13611) "a") (data (i32.const 13614) "a") (data (i32.const 13617) "a") (data (i32.const 13620) "a") (data (i32.const 13623) "a") (data (i32.const 13626) "a") (data (i32.const 13629) "a") (data (i32.const 13632) "a") (data (i32.const 13635) "a") (data (i32.const 13638) "a") (data (i32.const 13641) "a") (data (i32.const 13644) "a") (data (i32.const 13647) "a") (data (i32.const 13650) "a") (data (i32.const 13653) "a") (data (i32.const 13656) "a") (data (i32.const 13659) "a") (data (i32.const 13662) "a") (data (i32.const 13665) "a") (data (i32.const 13668) "a") (data (i32.const 13671) "a") (data (i32.const 13674) "a") (data (i32.const 13677) "a") (data (i32.const 13680) "a") (data (i32.const 13683) "a") (data (i32.const 13686) "a") (data (i32.const 13689) "a") (data (i32.const 13692) "a") (data (i32.const 13695) "a") (data (i32.const 13698) "a") (data (i32.const 13701) "a") (data (i32.const 13704) "a") (data (i32.const 13707) "a") (data (i32.const 13710) "a") (data (i32.const 13713) "a") (data (i32.const 13716) "a") (data (i32.const 13719) "a") (data (i32.const 13722) "a") (data (i32.const 13725) "a") (data (i32.const 13728) "a") (data (i32.const 13731) "a") (data (i32.const 13734) "a") (data (i32.const 13737) "a") (data (i32.const 13740) "a") (data (i32.const 13743) "a") (data (i32.const 13746) "a") (data (i32.const 13749) "a") (data (i32.const 13752) "a") (data (i32.const 13755) "a") (data (i32.const 13758) "a") (data (i32.const 13761) "a") (data (i32.const 13764) "a") (data (i32.const 13767) "a") (data (i32.const 13770) "a") (data (i32.const 13773) "a") (data (i32.const 13776) "a") (data (i32.const 13779) "a") (data (i32.const 13782) "a") (data (i32.const 13785) "a") (data (i32.const 13788) "a") (data (i32.const 13791) "a") (data (i32.const 13794) "a") (data (i32.const 13797) "a") (data (i32.const 13800) "a") (data (i32.const 13803) "a") (data (i32.const 13806) "a") (data (i32.const 13809) "a") (data (i32.const 13812) "a") (data (i32.const 13815) "a") (data (i32.const 13818) "a") (data (i32.const 13821) "a") (data (i32.const 13824) "a") (data (i32.const 13827) "a") (data (i32.const 13830) "a") (data (i32.const 13833) "a") (data (i32.const 13836) "a") (data (i32.const 13839) "a") (data (i32.const 13842) "a") (data (i32.const 13845) "a") (data (i32.const 13848) "a") (data (i32.const 13851) "a") (data (i32.const 13854) "a") (data (i32.const 13857) "a") (data (i32.const 13860) "a") (data (i32.const 13863) "a") (data (i32.const 13866) "a") (data (i32.const 13869) "a") (data (i32.const 13872) "a") (data (i32.const 13875) "a") (data (i32.const 13878) "a") (data (i32.const 13881) "a") (data (i32.const 13884) "a") (data (i32.const 13887) "a") (data (i32.const 13890) "a") (data (i32.const 13893) "a") (data (i32.const 13896) "a") (data (i32.const 13899) "a") (data (i32.const 13902) "a") (data (i32.const 13905) "a") (data (i32.const 13908) "a") (data (i32.const 13911) "a") (data (i32.const 13914) "a") (data (i32.const 13917) "a") (data (i32.const 13920) "a") (data (i32.const 13923) "a") (data (i32.const 13926) "a") (data (i32.const 13929) "a") (data (i32.const 13932) "a") (data (i32.const 13935) "a") (data (i32.const 13938) "a") (data (i32.const 13941) "a") (data (i32.const 13944) "a") (data (i32.const 13947) "a") (data (i32.const 13950) "a") (data (i32.const 13953) "a") (data (i32.const 13956) "a") (data (i32.const 13959) "a") (data (i32.const 13962) "a") (data (i32.const 13965) "a") (data (i32.const 13968) "a") (data (i32.const 13971) "a") (data (i32.const 13974) "a") (data (i32.const 13977) "a") (data (i32.const 13980) "a") (data (i32.const 13983) "a") (data (i32.const 13986) "a") (data (i32.const 13989) "a") (data (i32.const 13992) "a") (data (i32.const 13995) "a") (data (i32.const 13998) "a") (data (i32.const 14001) "a") (data (i32.const 14004) "a") (data (i32.const 14007) "a") (data (i32.const 14010) "a") (data (i32.const 14013) "a") (data (i32.const 14016) "a") (data (i32.const 14019) "a") (data (i32.const 14022) "a") (data (i32.const 14025) "a") (data (i32.const 14028) "a") (data (i32.const 14031) "a") (data (i32.const 14034) "a") (data (i32.const 14037) "a") (data (i32.const 14040) "a") (data (i32.const 14043) "a") (data (i32.const 14046) "a") (data (i32.const 14049) "a") (data (i32.const 14052) "a") (data (i32.const 14055) "a") (data (i32.const 14058) "a") (data (i32.const 14061) "a") (data (i32.const 14064) "a") (data (i32.const 14067) "a") (data (i32.const 14070) "a") (data (i32.const 14073) "a") (data (i32.const 14076) "a") (data (i32.const 14079) "a") (data (i32.const 14082) "a") (data (i32.const 14085) "a") (data (i32.const 14088) "a") (data (i32.const 14091) "a") (data (i32.const 14094) "a") (data (i32.const 14097) "a") (data (i32.const 14100) "a") (data (i32.const 14103) "a") (data (i32.const 14106) "a") (data (i32.const 14109) "a") (data (i32.const 14112) "a") (data (i32.const 14115) "a") (data (i32.const 14118) "a") (data (i32.const 14121) "a") (data (i32.const 14124) "a") (data (i32.const 14127) "a") (data (i32.const 14130) "a") (data (i32.const 14133) "a") (data (i32.const 14136) "a") (data (i32.const 14139) "a") (data (i32.const 14142) "a") (data (i32.const 14145) "a") (data (i32.const 14148) "a") (data (i32.const 14151) "a") (data (i32.const 14154) "a") (data (i32.const 14157) "a") (data (i32.const 14160) "a") (data (i32.const 14163) "a") (data (i32.const 14166) "a") (data (i32.const 14169) "a") (data (i32.const 14172) "a") (data (i32.const 14175) "a") (data (i32.const 14178) "a") (data (i32.const 14181) "a") (data (i32.const 14184) "a") (data (i32.const 14187) "a") (data (i32.const 14190) "a") (data (i32.const 14193) "a") (data (i32.const 14196) "a") (data (i32.const 14199) "a") (data (i32.const 14202) "a") (data (i32.const 14205) "a") (data (i32.const 14208) "a") (data (i32.const 14211) "a") (data (i32.const 14214) "a") (data (i32.const 14217) "a") (data (i32.const 14220) "a") (data (i32.const 14223) "a") (data (i32.const 14226) "a") (data (i32.const 14229) "a") (data (i32.const 14232) "a") (data (i32.const 14235) "a") (data (i32.const 14238) "a") (data (i32.const 14241) "a") (data (i32.const 14244) "a") (data (i32.const 14247) "a") (data (i32.const 14250) "a") (data (i32.const 14253) "a") (data (i32.const 14256) "a") (data (i32.const 14259) "a") (data (i32.const 14262) "a") (data (i32.const 14265) "a") (data (i32.const 14268) "a") (data (i32.const 14271) "a") (data (i32.const 14274) "a") (data (i32.const 14277) "a") (data (i32.const 14280) "a") (data (i32.const 14283) "a") (data (i32.const 14286) "a") (data (i32.const 14289) "a") (data (i32.const 14292) "a") (data (i32.const 14295) "a") (data (i32.const 14298) "a") (data (i32.const 14301) "a") (data (i32.const 14304) "a") (data (i32.const 14307) "a") (data (i32.const 14310) "a") (data (i32.const 14313) "a") (data (i32.const 14316) "a") (data (i32.const 14319) "a") (data (i32.const 14322) "a") (data (i32.const 14325) "a") (data (i32.const 14328) "a") (data (i32.const 14331) "a") (data (i32.const 14334) "a") (data (i32.const 14337) "a") (data (i32.const 14340) "a") (data (i32.const 14343) "a") (data (i32.const 14346) "a") (data (i32.const 14349) "a") (data (i32.const 14352) "a") (data (i32.const 14355) "a") (data (i32.const 14358) "a") (data (i32.const 14361) "a") (data (i32.const 14364) "a") (data (i32.const 14367) "a") (data (i32.const 14370) "a") (data (i32.const 14373) "a") (data (i32.const 14376) "a") (data (i32.const 14379) "a") (data (i32.const 14382) "a") (data (i32.const 14385) "a") (data (i32.const 14388) "a") (data (i32.const 14391) "a") (data (i32.const 14394) "a") (data (i32.const 14397) "a") (data (i32.const 14400) "a") (data (i32.const 14403) "a") (data (i32.const 14406) "a") (data (i32.const 14409) "a") (data (i32.const 14412) "a") (data (i32.const 14415) "a") (data (i32.const 14418) "a") (data (i32.const 14421) "a") (data (i32.const 14424) "a") (data (i32.const 14427) "a") (data (i32.const 14430) "a") (data (i32.const 14433) "a") (data (i32.const 14436) "a") (data (i32.const 14439) "a") (data (i32.const 14442) "a") (data (i32.const 14445) "a") (data (i32.const 14448) "a") (data (i32.const 14451) "a") (data (i32.const 14454) "a") (data (i32.const 14457) "a") (data (i32.const 14460) "a") (data (i32.const 14463) "a") (data (i32.const 14466) "a") (data (i32.const 14469) "a") (data (i32.const 14472) "a") (data (i32.const 14475) "a") (data (i32.const 14478) "a") (data (i32.const 14481) "a") (data (i32.const 14484) "a") (data (i32.const 14487) "a") (data (i32.const 14490) "a") (data (i32.const 14493) "a") (data (i32.const 14496) "a") (data (i32.const 14499) "a") (data (i32.const 14502) "a") (data (i32.const 14505) "a") (data (i32.const 14508) "a") (data (i32.const 14511) "a") (data (i32.const 14514) "a") (data (i32.const 14517) "a") (data (i32.const 14520) "a") (data (i32.const 14523) "a") (data (i32.const 14526) "a") (data (i32.const 14529) "a") (data (i32.const 14532) "a") (data (i32.const 14535) "a") (data (i32.const 14538) "a") (data (i32.const 14541) "a") (data (i32.const 14544) "a") (data (i32.const 14547) "a") (data (i32.const 14550) "a") (data (i32.const 14553) "a") (data (i32.const 14556) "a") (data (i32.const 14559) "a") (data (i32.const 14562) "a") (data (i32.const 14565) "a") (data (i32.const 14568) "a") (data (i32.const 14571) "a") (data (i32.const 14574) "a") (data (i32.const 14577) "a") (data (i32.const 14580) "a") (data (i32.const 14583) "a") (data (i32.const 14586) "a") (data (i32.const 14589) "a") (data (i32.const 14592) "a") (data (i32.const 14595) "a") (data (i32.const 14598) "a") (data (i32.const 14601) "a") (data (i32.const 14604) "a") (data (i32.const 14607) "a") (data (i32.const 14610) "a") (data (i32.const 14613) "a") (data (i32.const 14616) "a") (data (i32.const 14619) "a") (data (i32.const 14622) "a") (data (i32.const 14625) "a") (data (i32.const 14628) "a") (data (i32.const 14631) "a") (data (i32.const 14634) "a") (data (i32.const 14637) "a") (data (i32.const 14640) "a") (data (i32.const 14643) "a") (data (i32.const 14646) "a") (data (i32.const 14649) "a") (data (i32.const 14652) "a") (data (i32.const 14655) "a") (data (i32.const 14658) "a") (data (i32.const 14661) "a") (data (i32.const 14664) "a") (data (i32.const 14667) "a") (data (i32.const 14670) "a") (data (i32.const 14673) "a") (data (i32.const 14676) "a") (data (i32.const 14679) "a") (data (i32.const 14682) "a") (data (i32.const 14685) "a") (data (i32.const 14688) "a") (data (i32.const 14691) "a") (data (i32.const 14694) "a") (data (i32.const 14697) "a") (data (i32.const 14700) "a") (data (i32.const 14703) "a") (data (i32.const 14706) "a") (data (i32.const 14709) "a") (data (i32.const 14712) "a") (data (i32.const 14715) "a") (data (i32.const 14718) "a") (data (i32.const 14721) "a") (data (i32.const 14724) "a") (data (i32.const 14727) "a") (data (i32.const 14730) "a") (data (i32.const 14733) "a") (data (i32.const 14736) "a") (data (i32.const 14739) "a") (data (i32.const 14742) "a") (data (i32.const 14745) "a") (data (i32.const 14748) "a") (data (i32.const 14751) "a") (data (i32.const 14754) "a") (data (i32.const 14757) "a") (data (i32.const 14760) "a") (data (i32.const 14763) "a") (data (i32.const 14766) "a") (data (i32.const 14769) "a") (data (i32.const 14772) "a") (data (i32.const 14775) "a") (data (i32.const 14778) "a") (data (i32.const 14781) "a") (data (i32.const 14784) "a") (data (i32.const 14787) "a") (data (i32.const 14790) "a") (data (i32.const 14793) "a") (data (i32.const 14796) "a") (data (i32.const 14799) "a") (data (i32.const 14802) "a") (data (i32.const 14805) "a") (data (i32.const 14808) "a") (data (i32.const 14811) "a") (data (i32.const 14814) "a") (data (i32.const 14817) "a") (data (i32.const 14820) "a") (data (i32.const 14823) "a") (data (i32.const 14826) "a") (data (i32.const 14829) "a") (data (i32.const 14832) "a") (data (i32.const 14835) "a") (data (i32.const 14838) "a") (data (i32.const 14841) "a") (data (i32.const 14844) "a") (data (i32.const 14847) "a") (data (i32.const 14850) "a") (data (i32.const 14853) "a") (data (i32.const 14856) "a") (data (i32.const 14859) "a") (data (i32.const 14862) "a") (data (i32.const 14865) "a") (data (i32.const 14868) "a") (data (i32.const 14871) "a") (data (i32.const 14874) "a") (data (i32.const 14877) "a") (data (i32.const 14880) "a") (data (i32.const 14883) "a") (data (i32.const 14886) "a") (data (i32.const 14889) "a") (data (i32.const 14892) "a") (data (i32.const 14895) "a") (data (i32.const 14898) "a") (data (i32.const 14901) "a") (data (i32.const 14904) "a") (data (i32.const 14907) "a") (data (i32.const 14910) "a") (data (i32.const 14913) "a") (data (i32.const 14916) "a") (data (i32.const 14919) "a") (data (i32.const 14922) "a") (data (i32.const 14925) "a") (data (i32.const 14928) "a") (data (i32.const 14931) "a") (data (i32.const 14934) "a") (data (i32.const 14937) "a") (data (i32.const 14940) "a") (data (i32.const 14943) "a") (data (i32.const 14946) "a") (data (i32.const 14949) "a") (data (i32.const 14952) "a") (data (i32.const 14955) "a") (data (i32.const 14958) "a") (data (i32.const 14961) "a") (data (i32.const 14964) "a") (data (i32.const 14967) "a") (data (i32.const 14970) "a") (data (i32.const 14973) "a") (data (i32.const 14976) "a") (data (i32.const 14979) "a") (data (i32.const 14982) "a") (data (i32.const 14985) "a") (data (i32.const 14988) "a") (data (i32.const 14991) "a") (data (i32.const 14994) "a") (data (i32.const 14997) "a") (data (i32.const 15000) "a") (data (i32.const 15003) "a") (data (i32.const 15006) "a") (data (i32.const 15009) "a") (data (i32.const 15012) "a") (data (i32.const 15015) "a") (data (i32.const 15018) "a") (data (i32.const 15021) "a") (data (i32.const 15024) "a") (data (i32.const 15027) "a") (data (i32.const 15030) "a") (data (i32.const 15033) "a") (data (i32.const 15036) "a") (data (i32.const 15039) "a") (data (i32.const 15042) "a") (data (i32.const 15045) "a") (data (i32.const 15048) "a") (data (i32.const 15051) "a") (data (i32.const 15054) "a") (data (i32.const 15057) "a") (data (i32.const 15060) "a") (data (i32.const 15063) "a") (data (i32.const 15066) "a") (data (i32.const 15069) "a") (data (i32.const 15072) "a") (data (i32.const 15075) "a") (data (i32.const 15078) "a") (data (i32.const 15081) "a") (data (i32.const 15084) "a") (data (i32.const 15087) "a") (data (i32.const 15090) "a") (data (i32.const 15093) "a") (data (i32.const 15096) "a") (data (i32.const 15099) "a") (data (i32.const 15102) "a") (data (i32.const 15105) "a") (data (i32.const 15108) "a") (data (i32.const 15111) "a") (data (i32.const 15114) "a") (data (i32.const 15117) "a") (data (i32.const 15120) "a") (data (i32.const 15123) "a") (data (i32.const 15126) "a") (data (i32.const 15129) "a") (data (i32.const 15132) "a") (data (i32.const 15135) "a") (data (i32.const 15138) "a") (data (i32.const 15141) "a") (data (i32.const 15144) "a") (data (i32.const 15147) "a") (data (i32.const 15150) "a") (data (i32.const 15153) "a") (data (i32.const 15156) "a") (data (i32.const 15159) "a") (data (i32.const 15162) "a") (data (i32.const 15165) "a") (data (i32.const 15168) "a") (data (i32.const 15171) "a") (data (i32.const 15174) "a") (data (i32.const 15177) "a") (data (i32.const 15180) "a") (data (i32.const 15183) "a") (data (i32.const 15186) "a") (data (i32.const 15189) "a") (data (i32.const 15192) "a") (data (i32.const 15195) "a") (data (i32.const 15198) "a") (data (i32.const 15201) "a") (data (i32.const 15204) "a") (data (i32.const 15207) "a") (data (i32.const 15210) "a") (data (i32.const 15213) "a") (data (i32.const 15216) "a") (data (i32.const 15219) "a") (data (i32.const 15222) "a") (data (i32.const 15225) "a") (data (i32.const 15228) "a") (data (i32.const 15231) "a") (data (i32.const 15234) "a") (data (i32.const 15237) "a") (data (i32.const 15240) "a") (data (i32.const 15243) "a") (data (i32.const 15246) "a") (data (i32.const 15249) "a") (data (i32.const 15252) "a") (data (i32.const 15255) "a") (data (i32.const 15258) "a") (data (i32.const 15261) "a") (data (i32.const 15264) "a") (data (i32.const 15267) "a") (data (i32.const 15270) "a") (data (i32.const 15273) "a") (data (i32.const 15276) "a") (data (i32.const 15279) "a") (data (i32.const 15282) "a") (data (i32.const 15285) "a") (data (i32.const 15288) "a") (data (i32.const 15291) "a") (data (i32.const 15294) "a") (data (i32.const 15297) "a") (data (i32.const 15300) "a") (data (i32.const 15303) "a") (data (i32.const 15306) "a") (data (i32.const 15309) "a") (data (i32.const 15312) "a") (data (i32.const 15315) "a") (data (i32.const 15318) "a") (data (i32.const 15321) "a") (data (i32.const 15324) "a") (data (i32.const 15327) "a") (data (i32.const 15330) "a") (data (i32.const 15333) "a") (data (i32.const 15336) "a") (data (i32.const 15339) "a") (data (i32.const 15342) "a") (data (i32.const 15345) "a") (data (i32.const 15348) "a") (data (i32.const 15351) "a") (data (i32.const 15354) "a") (data (i32.const 15357) "a") (data (i32.const 15360) "a") (data (i32.const 15363) "a") (data (i32.const 15366) "a") (data (i32.const 15369) "a") (data (i32.const 15372) "a") (data (i32.const 15375) "a") (data (i32.const 15378) "a") (data (i32.const 15381) "a") (data (i32.const 15384) "a") (data (i32.const 15387) "a") (data (i32.const 15390) "a") (data (i32.const 15393) "a") (data (i32.const 15396) "a") (data (i32.const 15399) "a") (data (i32.const 15402) "a") (data (i32.const 15405) "a") (data (i32.const 15408) "a") (data (i32.const 15411) "a") (data (i32.const 15414) "a") (data (i32.const 15417) "a") (data (i32.const 15420) "a") (data (i32.const 15423) "a") (data (i32.const 15426) "a") (data (i32.const 15429) "a") (data (i32.const 15432) "a") (data (i32.const 15435) "a") (data (i32.const 15438) "a") (data (i32.const 15441) "a") (data (i32.const 15444) "a") (data (i32.const 15447) "a") (data (i32.const 15450) "a") (data (i32.const 15453) "a") (data (i32.const 15456) "a") (data (i32.const 15459) "a") (data (i32.const 15462) "a") (data (i32.const 15465) "a") (data (i32.const 15468) "a") (data (i32.const 15471) "a") (data (i32.const 15474) "a") (data (i32.const 15477) "a") (data (i32.const 15480) "a") (data (i32.const 15483) "a") (data (i32.const 15486) "a") (data (i32.const 15489) "a") (data (i32.const 15492) "a") (data (i32.const 15495) "a") (data (i32.const 15498) "a") (data (i32.const 15501) "a") (data (i32.const 15504) "a") (data (i32.const 15507) "a") (data (i32.const 15510) "a") (data (i32.const 15513) "a") (data (i32.const 15516) "a") (data (i32.const 15519) "a") (data (i32.const 15522) "a") (data (i32.const 15525) "a") (data (i32.const 15528) "a") (data (i32.const 15531) "a") (data (i32.const 15534) "a") (data (i32.const 15537) "a") (data (i32.const 15540) "a") (data (i32.const 15543) "a") (data (i32.const 15546) "a") (data (i32.const 15549) "a") (data (i32.const 15552) "a") (data (i32.const 15555) "a") (data (i32.const 15558) "a") (data (i32.const 15561) "a") (data (i32.const 15564) "a") (data (i32.const 15567) "a") (data (i32.const 15570) "a") (data (i32.const 15573) "a") (data (i32.const 15576) "a") (data (i32.const 15579) "a") (data (i32.const 15582) "a") (data (i32.const 15585) "a") (data (i32.const 15588) "a") (data (i32.const 15591) "a") (data (i32.const 15594) "a") (data (i32.const 15597) "a") (data (i32.const 15600) "a") (data (i32.const 15603) "a") (data (i32.const 15606) "a") (data (i32.const 15609) "a") (data (i32.const 15612) "a") (data (i32.const 15615) "a") (data (i32.const 15618) "a") (data (i32.const 15621) "a") (data (i32.const 15624) "a") (data (i32.const 15627) "a") (data (i32.const 15630) "a") (data (i32.const 15633) "a") (data (i32.const 15636) "a") (data (i32.const 15639) "a") (data (i32.const 15642) "a") (data (i32.const 15645) "a") (data (i32.const 15648) "a") (data (i32.const 15651) "a") (data (i32.const 15654) "a") (data (i32.const 15657) "a") (data (i32.const 15660) "a") (data (i32.const 15663) "a") (data (i32.const 15666) "a") (data (i32.const 15669) "a") (data (i32.const 15672) "a") (data (i32.const 15675) "a") (data (i32.const 15678) "a") (data (i32.const 15681) "a") (data (i32.const 15684) "a") (data (i32.const 15687) "a") (data (i32.const 15690) "a") (data (i32.const 15693) "a") (data (i32.const 15696) "a") (data (i32.const 15699) "a") (data (i32.const 15702) "a") (data (i32.const 15705) "a") (data (i32.const 15708) "a") (data (i32.const 15711) "a") (data (i32.const 15714) "a") (data (i32.const 15717) "a") (data (i32.const 15720) "a") (data (i32.const 15723) "a") (data (i32.const 15726) "a") (data (i32.const 15729) "a") (data (i32.const 15732) "a") (data (i32.const 15735) "a") (data (i32.const 15738) "a") (data (i32.const 15741) "a") (data (i32.const 15744) "a") (data (i32.const 15747) "a") (data (i32.const 15750) "a") (data (i32.const 15753) "a") (data (i32.const 15756) "a") (data (i32.const 15759) "a") (data (i32.const 15762) "a") (data (i32.const 15765) "a") (data (i32.const 15768) "a") (data (i32.const 15771) "a") (data (i32.const 15774) "a") (data (i32.const 15777) "a") (data (i32.const 15780) "a") (data (i32.const 15783) "a") (data (i32.const 15786) "a") (data (i32.const 15789) "a") (data (i32.const 15792) "a") (data (i32.const 15795) "a") (data (i32.const 15798) "a") (data (i32.const 15801) "a") (data (i32.const 15804) "a") (data (i32.const 15807) "a") (data (i32.const 15810) "a") (data (i32.const 15813) "a") (data (i32.const 15816) "a") (data (i32.const 15819) "a") (data (i32.const 15822) "a") (data (i32.const 15825) "a") (data (i32.const 15828) "a") (data (i32.const 15831) "a") (data (i32.const 15834) "a") (data (i32.const 15837) "a") (data (i32.const 15840) "a") (data (i32.const 15843) "a") (data (i32.const 15846) "a") (data (i32.const 15849) "a") (data (i32.const 15852) "a") (data (i32.const 15855) "a") (data (i32.const 15858) "a") (data (i32.const 15861) "a") (data (i32.const 15864) "a") (data (i32.const 15867) "a") (data (i32.const 15870) "a") (data (i32.const 15873) "a") (data (i32.const 15876) "a") (data (i32.const 15879) "a") (data (i32.const 15882) "a") (data (i32.const 15885) "a") (data (i32.const 15888) "a") (data (i32.const 15891) "a") (data (i32.const 15894) "a") (data (i32.const 15897) "a") (data (i32.const 15900) "a") (data (i32.const 15903) "a") (data (i32.const 15906) "a") (data (i32.const 15909) "a") (data (i32.const 15912) "a") (data (i32.const 15915) "a") (data (i32.const 15918) "a") (data (i32.const 15921) "a") (data (i32.const 15924) "a") (data (i32.const 15927) "a") (data (i32.const 15930) "a") (data (i32.const 15933) "a") (data (i32.const 15936) "a") (data (i32.const 15939) "a") (data (i32.const 15942) "a") (data (i32.const 15945) "a") (data (i32.const 15948) "a") (data (i32.const 15951) "a") (data (i32.const 15954) "a") (data (i32.const 15957) "a") (data (i32.const 15960) "a") (data (i32.const 15963) "a") (data (i32.const 15966) "a") (data (i32.const 15969) "a") (data (i32.const 15972) "a") (data (i32.const 15975) "a") (data (i32.const 15978) "a") (data (i32.const 15981) "a") (data (i32.const 15984) "a") (data (i32.const 15987) "a") (data (i32.const 15990) "a") (data (i32.const 15993) "a") (data (i32.const 15996) "a") (data (i32.const 15999) "a") (data (i32.const 16002) "a") (data (i32.const 16005) "a") (data (i32.const 16008) "a") (data (i32.const 16011) "a") (data (i32.const 16014) "a") (data (i32.const 16017) "a") (data (i32.const 16020) "a") (data (i32.const 16023) "a") (data (i32.const 16026) "a") (data (i32.const 16029) "a") (data (i32.const 16032) "a") (data (i32.const 16035) "a") (data (i32.const 16038) "a") (data (i32.const 16041) "a") (data (i32.const 16044) "a") (data (i32.const 16047) "a") (data (i32.const 16050) "a") (data (i32.const 16053) "a") (data (i32.const 16056) "a") (data (i32.const 16059) "a") (data (i32.const 16062) "a") (data (i32.const 16065) "a") (data (i32.const 16068) "a") (data (i32.const 16071) "a") (data (i32.const 16074) "a") (data (i32.const 16077) "a") (data (i32.const 16080) "a") (data (i32.const 16083) "a") (data (i32.const 16086) "a") (data (i32.const 16089) "a") (data (i32.const 16092) "a") (data (i32.const 16095) "a") (data (i32.const 16098) "a") (data (i32.const 16101) "a") (data (i32.const 16104) "a") (data (i32.const 16107) "a") (data (i32.const 16110) "a") (data (i32.const 16113) "a") (data (i32.const 16116) "a") (data (i32.const 16119) "a") (data (i32.const 16122) "a") (data (i32.const 16125) "a") (data (i32.const 16128) "a") (data (i32.const 16131) "a") (data (i32.const 16134) "a") (data (i32.const 16137) "a") (data (i32.const 16140) "a") (data (i32.const 16143) "a") (data (i32.const 16146) "a") (data (i32.const 16149) "a") (data (i32.const 16152) "a") (data (i32.const 16155) "a") (data (i32.const 16158) "a") (data (i32.const 16161) "a") (data (i32.const 16164) "a") (data (i32.const 16167) "a") (data (i32.const 16170) "a") (data (i32.const 16173) "a") (data (i32.const 16176) "a") (data (i32.const 16179) "a") (data (i32.const 16182) "a") (data (i32.const 16185) "a") (data (i32.const 16188) "a") (data (i32.const 16191) "a") (data (i32.const 16194) "a") (data (i32.const 16197) "a") (data (i32.const 16200) "a") (data (i32.const 16203) "a") (data (i32.const 16206) "a") (data (i32.const 16209) "a") (data (i32.const 16212) "a") (data (i32.const 16215) "a") (data (i32.const 16218) "a") (data (i32.const 16221) "a") (data (i32.const 16224) "a") (data (i32.const 16227) "a") (data (i32.const 16230) "a") (data (i32.const 16233) "a") (data (i32.const 16236) "a") (data (i32.const 16239) "a") (data (i32.const 16242) "a") (data (i32.const 16245) "a") (data (i32.const 16248) "a") (data (i32.const 16251) "a") (data (i32.const 16254) "a") (data (i32.const 16257) "a") (data (i32.const 16260) "a") (data (i32.const 16263) "a") (data (i32.const 16266) "a") (data (i32.const 16269) "a") (data (i32.const 16272) "a") (data (i32.const 16275) "a") (data (i32.const 16278) "a") (data (i32.const 16281) "a") (data (i32.const 16284) "a") (data (i32.const 16287) "a") (data (i32.const 16290) "a") (data (i32.const 16293) "a") (data (i32.const 16296) "a") (data (i32.const 16299) "a") (data (i32.const 16302) "a") (data (i32.const 16305) "a") (data (i32.const 16308) "a") (data (i32.const 16311) "a") (data (i32.const 16314) "a") (data (i32.const 16317) "a") (data (i32.const 16320) "a") (data (i32.const 16323) "a") (data (i32.const 16326) "a") (data (i32.const 16329) "a") (data (i32.const 16332) "a") (data (i32.const 16335) "a") (data (i32.const 16338) "a") (data (i32.const 16341) "a") (data (i32.const 16344) "a") (data (i32.const 16347) "a") (data (i32.const 16350) "a") (data (i32.const 16353) "a") (data (i32.const 16356) "a") (data (i32.const 16359) "a") (data (i32.const 16362) "a") (data (i32.const 16365) "a") (data (i32.const 16368) "a") (data (i32.const 16371) "a") (data (i32.const 16374) "a") (data (i32.const 16377) "a") (data (i32.const 16380) "a") (data (i32.const 16383) "a") (data (i32.const 16386) "a") (data (i32.const 16389) "a") (data (i32.const 16392) "a") (data (i32.const 16395) "a") (data (i32.const 16398) "a") (data (i32.const 16401) "a") (data (i32.const 16404) "a") (data (i32.const 16407) "a") (data (i32.const 16410) "a") (data (i32.const 16413) "a") (data (i32.const 16416) "a") (data (i32.const 16419) "a") (data (i32.const 16422) "a") (data (i32.const 16425) "a") (data (i32.const 16428) "a") (data (i32.const 16431) "a") (data (i32.const 16434) "a") (data (i32.const 16437) "a") (data (i32.const 16440) "a") (data (i32.const 16443) "a") (data (i32.const 16446) "a") (data (i32.const 16449) "a") (data (i32.const 16452) "a") (data (i32.const 16455) "a") (data (i32.const 16458) "a") (data (i32.const 16461) "a") (data (i32.const 16464) "a") (data (i32.const 16467) "a") (data (i32.const 16470) "a") (data (i32.const 16473) "a") (data (i32.const 16476) "a") (data (i32.const 16479) "a") (data (i32.const 16482) "a") (data (i32.const 16485) "a") (data (i32.const 16488) "a") (data (i32.const 16491) "a") (data (i32.const 16494) "a") (data (i32.const 16497) "a") (data (i32.const 16500) "a") (data (i32.const 16503) "a") (data (i32.const 16506) "a") (data (i32.const 16509) "a") (data (i32.const 16512) "a") (data (i32.const 16515) "a") (data (i32.const 16518) "a") (data (i32.const 16521) "a") (data (i32.const 16524) "a") (data (i32.const 16527) "a") (data (i32.const 16530) "a") (data (i32.const 16533) "a") (data (i32.const 16536) "a") (data (i32.const 16539) "a") (data (i32.const 16542) "a") (data (i32.const 16545) "a") (data (i32.const 16548) "a") (data (i32.const 16551) "a") (data (i32.const 16554) "a") (data (i32.const 16557) "a") (data (i32.const 16560) "a") (data (i32.const 16563) "a") (data (i32.const 16566) "a") (data (i32.const 16569) "a") (data (i32.const 16572) "a") (data (i32.const 16575) "a") (data (i32.const 16578) "a") (data (i32.const 16581) "a") (data (i32.const 16584) "a") (data (i32.const 16587) "a") (data (i32.const 16590) "a") (data (i32.const 16593) "a") (data (i32.const 16596) "a") (data (i32.const 16599) "a") (data (i32.const 16602) "a") (data (i32.const 16605) "a") (data (i32.const 16608) "a") (data (i32.const 16611) "a") (data (i32.const 16614) "a") (data (i32.const 16617) "a") (data (i32.const 16620) "a") (data (i32.const 16623) "a") (data (i32.const 16626) "a") (data (i32.const 16629) "a") (data (i32.const 16632) "a") (data (i32.const 16635) "a") (data (i32.const 16638) "a") (data (i32.const 16641) "a") (data (i32.const 16644) "a") (data (i32.const 16647) "a") (data (i32.const 16650) "a") (data (i32.const 16653) "a") (data (i32.const 16656) "a") (data (i32.const 16659) "a") (data (i32.const 16662) "a") (data (i32.const 16665) "a") (data (i32.const 16668) "a") (data (i32.const 16671) "a") (data (i32.const 16674) "a") (data (i32.const 16677) "a") (data (i32.const 16680) "a") (data (i32.const 16683) "a") (data (i32.const 16686) "a") (data (i32.const 16689) "a") (data (i32.const 16692) "a") (data (i32.const 16695) "a") (data (i32.const 16698) "a") (data (i32.const 16701) "a") (data (i32.const 16704) "a") (data (i32.const 16707) "a") (data (i32.const 16710) "a") (data (i32.const 16713) "a") (data (i32.const 16716) "a") (data (i32.const 16719) "a") (data (i32.const 16722) "a") (data (i32.const 16725) "a") (data (i32.const 16728) "a") (data (i32.const 16731) "a") (data (i32.const 16734) "a") (data (i32.const 16737) "a") (data (i32.const 16740) "a") (data (i32.const 16743) "a") (data (i32.const 16746) "a") (data (i32.const 16749) "a") (data (i32.const 16752) "a") (data (i32.const 16755) "a") (data (i32.const 16758) "a") (data (i32.const 16761) "a") (data (i32.const 16764) "a") (data (i32.const 16767) "a") (data (i32.const 16770) "a") (data (i32.const 16773) "a") (data (i32.const 16776) "a") (data (i32.const 16779) "a") (data (i32.const 16782) "a") (data (i32.const 16785) "a") (data (i32.const 16788) "a") (data (i32.const 16791) "a") (data (i32.const 16794) "a") (data (i32.const 16797) "a") (data (i32.const 16800) "a") (data (i32.const 16803) "a") (data (i32.const 16806) "a") (data (i32.const 16809) "a") (data (i32.const 16812) "a") (data (i32.const 16815) "a") (data (i32.const 16818) "a") (data (i32.const 16821) "a") (data (i32.const 16824) "a") (data (i32.const 16827) "a") (data (i32.const 16830) "a") (data (i32.const 16833) "a") (data (i32.const 16836) "a") (data (i32.const 16839) "a") (data (i32.const 16842) "a") (data (i32.const 16845) "a") (data (i32.const 16848) "a") (data (i32.const 16851) "a") (data (i32.const 16854) "a") (data (i32.const 16857) "a") (data (i32.const 16860) "a") (data (i32.const 16863) "a") (data (i32.const 16866) "a") (data (i32.const 16869) "a") (data (i32.const 16872) "a") (data (i32.const 16875) "a") (data (i32.const 16878) "a") (data (i32.const 16881) "a") (data (i32.const 16884) "a") (data (i32.const 16887) "a") (data (i32.const 16890) "a") (data (i32.const 16893) "a") (data (i32.const 16896) "a") (data (i32.const 16899) "a") (data (i32.const 16902) "a") (data (i32.const 16905) "a") (data (i32.const 16908) "a") (data (i32.const 16911) "a") (data (i32.const 16914) "a") (data (i32.const 16917) "a") (data (i32.const 16920) "a") (data (i32.const 16923) "a") (data (i32.const 16926) "a") (data (i32.const 16929) "a") (data (i32.const 16932) "a") (data (i32.const 16935) "a") (data (i32.const 16938) "a") (data (i32.const 16941) "a") (data (i32.const 16944) "a") (data (i32.const 16947) "a") (data (i32.const 16950) "a") (data (i32.const 16953) "a") (data (i32.const 16956) "a") (data (i32.const 16959) "a") (data (i32.const 16962) "a") (data (i32.const 16965) "a") (data (i32.const 16968) "a") (data (i32.const 16971) "a") (data (i32.const 16974) "a") (data (i32.const 16977) "a") (data (i32.const 16980) "a") (data (i32.const 16983) "a") (data (i32.const 16986) "a") (data (i32.const 16989) "a") (data (i32.const 16992) "a") (data (i32.const 16995) "a") (data (i32.const 16998) "a") (data (i32.const 17001) "a") (data (i32.const 17004) "a") (data (i32.const 17007) "a") (data (i32.const 17010) "a") (data (i32.const 17013) "a") (data (i32.const 17016) "a") (data (i32.const 17019) "a") (data (i32.const 17022) "a") (data (i32.const 17025) "a") (data (i32.const 17028) "a") (data (i32.const 17031) "a") (data (i32.const 17034) "a") (data (i32.const 17037) "a") (data (i32.const 17040) "a") (data (i32.const 17043) "a") (data (i32.const 17046) "a") (data (i32.const 17049) "a") (data (i32.const 17052) "a") (data (i32.const 17055) "a") (data (i32.const 17058) "a") (data (i32.const 17061) "a") (data (i32.const 17064) "a") (data (i32.const 17067) "a") (data (i32.const 17070) "a") (data (i32.const 17073) "a") (data (i32.const 17076) "a") (data (i32.const 17079) "a") (data (i32.const 17082) "a") (data (i32.const 17085) "a") (data (i32.const 17088) "a") (data (i32.const 17091) "a") (data (i32.const 17094) "a") (data (i32.const 17097) "a") (data (i32.const 17100) "a") (data (i32.const 17103) "a") (data (i32.const 17106) "a") (data (i32.const 17109) "a") (data (i32.const 17112) "a") (data (i32.const 17115) "a") (data (i32.const 17118) "a") (data (i32.const 17121) "a") (data (i32.const 17124) "a") (data (i32.const 17127) "a") (data (i32.const 17130) "a") (data (i32.const 17133) "a") (data (i32.const 17136) "a") (data (i32.const 17139) "a") (data (i32.const 17142) "a") (data (i32.const 17145) "a") (data (i32.const 17148) "a") (data (i32.const 17151) "a") (data (i32.const 17154) "a") (data (i32.const 17157) "a") (data (i32.const 17160) "a") (data (i32.const 17163) "a") (data (i32.const 17166) "a") (data (i32.const 17169) "a") (data (i32.const 17172) "a") (data (i32.const 17175) "a") (data (i32.const 17178) "a") (data (i32.const 17181) "a") (data (i32.const 17184) "a") (data (i32.const 17187) "a") (data (i32.const 17190) "a") (data (i32.const 17193) "a") (data (i32.const 17196) "a") (data (i32.const 17199) "a") (data (i32.const 17202) "a") (data (i32.const 17205) "a") (data (i32.const 17208) "a") (data (i32.const 17211) "a") (data (i32.const 17214) "a") (data (i32.const 17217) "a") (data (i32.const 17220) "a") (data (i32.const 17223) "a") (data (i32.const 17226) "a") (data (i32.const 17229) "a") (data (i32.const 17232) "a") (data (i32.const 17235) "a") (data (i32.const 17238) "a") (data (i32.const 17241) "a") (data (i32.const 17244) "a") (data (i32.const 17247) "a") (data (i32.const 17250) "a") (data (i32.const 17253) "a") (data (i32.const 17256) "a") (data (i32.const 17259) "a") (data (i32.const 17262) "a") (data (i32.const 17265) "a") (data (i32.const 17268) "a") (data (i32.const 17271) "a") (data (i32.const 17274) "a") (data (i32.const 17277) "a") (data (i32.const 17280) "a") (data (i32.const 17283) "a") (data (i32.const 17286) "a") (data (i32.const 17289) "a") (data (i32.const 17292) "a") (data (i32.const 17295) "a") (data (i32.const 17298) "a") (data (i32.const 17301) "a") (data (i32.const 17304) "a") (data (i32.const 17307) "a") (data (i32.const 17310) "a") (data (i32.const 17313) "a") (data (i32.const 17316) "a") (data (i32.const 17319) "a") (data (i32.const 17322) "a") (data (i32.const 17325) "a") (data (i32.const 17328) "a") (data (i32.const 17331) "a") (data (i32.const 17334) "a") (data (i32.const 17337) "a") (data (i32.const 17340) "a") (data (i32.const 17343) "a") (data (i32.const 17346) "a") (data (i32.const 17349) "a") (data (i32.const 17352) "a") (data (i32.const 17355) "a") (data (i32.const 17358) "a") (data (i32.const 17361) "a") (data (i32.const 17364) "a") (data (i32.const 17367) "a") (data (i32.const 17370) "a") (data (i32.const 17373) "a") (data (i32.const 17376) "a") (data (i32.const 17379) "a") (data (i32.const 17382) "a") (data (i32.const 17385) "a") (data (i32.const 17388) "a") (data (i32.const 17391) "a") (data (i32.const 17394) "a") (data (i32.const 17397) "a") (data (i32.const 17400) "a") (data (i32.const 17403) "a") (data (i32.const 17406) "a") (data (i32.const 17409) "a") (data (i32.const 17412) "a") (data (i32.const 17415) "a") (data (i32.const 17418) "a") (data (i32.const 17421) "a") (data (i32.const 17424) "a") (data (i32.const 17427) "a") (data (i32.const 17430) "a") (data (i32.const 17433) "a") (data (i32.const 17436) "a") (data (i32.const 17439) "a") (data (i32.const 17442) "a") (data (i32.const 17445) "a") (data (i32.const 17448) "a") (data (i32.const 17451) "a") (data (i32.const 17454) "a") (data (i32.const 17457) "a") (data (i32.const 17460) "a") (data (i32.const 17463) "a") (data (i32.const 17466) "a") (data (i32.const 17469) "a") (data (i32.const 17472) "a") (data (i32.const 17475) "a") (data (i32.const 17478) "a") (data (i32.const 17481) "a") (data (i32.const 17484) "a") (data (i32.const 17487) "a") (data (i32.const 17490) "a") (data (i32.const 17493) "a") (data (i32.const 17496) "a") (data (i32.const 17499) "a") (data (i32.const 17502) "a") (data (i32.const 17505) "a") (data (i32.const 17508) "a") (data (i32.const 17511) "a") (data (i32.const 17514) "a") (data (i32.const 17517) "a") (data (i32.const 17520) "a") (data (i32.const 17523) "a") (data (i32.const 17526) "a") (data (i32.const 17529) "a") (data (i32.const 17532) "a") (data (i32.const 17535) "a") (data (i32.const 17538) "a") (data (i32.const 17541) "a") (data (i32.const 17544) "a") (data (i32.const 17547) "a") (data (i32.const 17550) "a") (data (i32.const 17553) "a") (data (i32.const 17556) "a") (data (i32.const 17559) "a") (data (i32.const 17562) "a") (data (i32.const 17565) "a") (data (i32.const 17568) "a") (data (i32.const 17571) "a") (data (i32.const 17574) "a") (data (i32.const 17577) "a") (data (i32.const 17580) "a") (data (i32.const 17583) "a") (data (i32.const 17586) "a") (data (i32.const 17589) "a") (data (i32.const 17592) "a") (data (i32.const 17595) "a") (data (i32.const 17598) "a") (data (i32.const 17601) "a") (data (i32.const 17604) "a") (data (i32.const 17607) "a") (data (i32.const 17610) "a") (data (i32.const 17613) "a") (data (i32.const 17616) "a") (data (i32.const 17619) "a") (data (i32.const 17622) "a") (data (i32.const 17625) "a") (data (i32.const 17628) "a") (data (i32.const 17631) "a") (data (i32.const 17634) "a") (data (i32.const 17637) "a") (data (i32.const 17640) "a") (data (i32.const 17643) "a") (data (i32.const 17646) "a") (data (i32.const 17649) "a") (data (i32.const 17652) "a") (data (i32.const 17655) "a") (data (i32.const 17658) "a") (data (i32.const 17661) "a") (data (i32.const 17664) "a") (data (i32.const 17667) "a") (data (i32.const 17670) "a") (data (i32.const 17673) "a") (data (i32.const 17676) "a") (data (i32.const 17679) "a") (data (i32.const 17682) "a") (data (i32.const 17685) "a") (data (i32.const 17688) "a") (data (i32.const 17691) "a") (data (i32.const 17694) "a") (data (i32.const 17697) "a") (data (i32.const 17700) "a") (data (i32.const 17703) "a") (data (i32.const 17706) "a") (data (i32.const 17709) "a") (data (i32.const 17712) "a") (data (i32.const 17715) "a") (data (i32.const 17718) "a") (data (i32.const 17721) "a") (data (i32.const 17724) "a") (data (i32.const 17727) "a") (data (i32.const 17730) "a") (data (i32.const 17733) "a") (data (i32.const 17736) "a") (data (i32.const 17739) "a") (data (i32.const 17742) "a") (data (i32.const 17745) "a") (data (i32.const 17748) "a") (data (i32.const 17751) "a") (data (i32.const 17754) "a") (data (i32.const 17757) "a") (data (i32.const 17760) "a") (data (i32.const 17763) "a") (data (i32.const 17766) "a") (data (i32.const 17769) "a") (data (i32.const 17772) "a") (data (i32.const 17775) "a") (data (i32.const 17778) "a") (data (i32.const 17781) "a") (data (i32.const 17784) "a") (data (i32.const 17787) "a") (data (i32.const 17790) "a") (data (i32.const 17793) "a") (data (i32.const 17796) "a") (data (i32.const 17799) "a") (data (i32.const 17802) "a") (data (i32.const 17805) "a") (data (i32.const 17808) "a") (data (i32.const 17811) "a") (data (i32.const 17814) "a") (data (i32.const 17817) "a") (data (i32.const 17820) "a") (data (i32.const 17823) "a") (data (i32.const 17826) "a") (data (i32.const 17829) "a") (data (i32.const 17832) "a") (data (i32.const 17835) "a") (data (i32.const 17838) "a") (data (i32.const 17841) "a") (data (i32.const 17844) "a") (data (i32.const 17847) "a") (data (i32.const 17850) "a") (data (i32.const 17853) "a") (data (i32.const 17856) "a") (data (i32.const 17859) "a") (data (i32.const 17862) "a") (data (i32.const 17865) "a") (data (i32.const 17868) "a") (data (i32.const 17871) "a") (data (i32.const 17874) "a") (data (i32.const 17877) "a") (data (i32.const 17880) "a") (data (i32.const 17883) "a") (data (i32.const 17886) "a") (data (i32.const 17889) "a") (data (i32.const 17892) "a") (data (i32.const 17895) "a") (data (i32.const 17898) "a") (data (i32.const 17901) "a") (data (i32.const 17904) "a") (data (i32.const 17907) "a") (data (i32.const 17910) "a") (data (i32.const 17913) "a") (data (i32.const 17916) "a") (data (i32.const 17919) "a") (data (i32.const 17922) "a") (data (i32.const 17925) "a") (data (i32.const 17928) "a") (data (i32.const 17931) "a") (data (i32.const 17934) "a") (data (i32.const 17937) "a") (data (i32.const 17940) "a") (data (i32.const 17943) "a") (data (i32.const 17946) "a") (data (i32.const 17949) "a") (data (i32.const 17952) "a") (data (i32.const 17955) "a") (data (i32.const 17958) "a") (data (i32.const 17961) "a") (data (i32.const 17964) "a") (data (i32.const 17967) "a") (data (i32.const 17970) "a") (data (i32.const 17973) "a") (data (i32.const 17976) "a") (data (i32.const 17979) "a") (data (i32.const 17982) "a") (data (i32.const 17985) "a") (data (i32.const 17988) "a") (data (i32.const 17991) "a") (data (i32.const 17994) "a") (data (i32.const 17997) "a") (data (i32.const 18000) "a") (data (i32.const 18003) "a") (data (i32.const 18006) "a") (data (i32.const 18009) "a") (data (i32.const 18012) "a") (data (i32.const 18015) "a") (data (i32.const 18018) "a") (data (i32.const 18021) "a") (data (i32.const 18024) "a") (data (i32.const 18027) "a") (data (i32.const 18030) "a") (data (i32.const 18033) "a") (data (i32.const 18036) "a") (data (i32.const 18039) "a") (data (i32.const 18042) "a") (data (i32.const 18045) "a") (data (i32.const 18048) "a") (data (i32.const 18051) "a") (data (i32.const 18054) "a") (data (i32.const 18057) "a") (data (i32.const 18060) "a") (data (i32.const 18063) "a") (data (i32.const 18066) "a") (data (i32.const 18069) "a") (data (i32.const 18072) "a") (data (i32.const 18075) "a") (data (i32.const 18078) "a") (data (i32.const 18081) "a") (data (i32.const 18084) "a") (data (i32.const 18087) "a") (data (i32.const 18090) "a") (data (i32.const 18093) "a") (data (i32.const 18096) "a") (data (i32.const 18099) "a") (data (i32.const 18102) "a") (data (i32.const 18105) "a") (data (i32.const 18108) "a") (data (i32.const 18111) "a") (data (i32.const 18114) "a") (data (i32.const 18117) "a") (data (i32.const 18120) "a") (data (i32.const 18123) "a") (data (i32.const 18126) "a") (data (i32.const 18129) "a") (data (i32.const 18132) "a") (data (i32.const 18135) "a") (data (i32.const 18138) "a") (data (i32.const 18141) "a") (data (i32.const 18144) "a") (data (i32.const 18147) "a") (data (i32.const 18150) "a") (data (i32.const 18153) "a") (data (i32.const 18156) "a") (data (i32.const 18159) "a") (data (i32.const 18162) "a") (data (i32.const 18165) "a") (data (i32.const 18168) "a") (data (i32.const 18171) "a") (data (i32.const 18174) "a") (data (i32.const 18177) "a") (data (i32.const 18180) "a") (data (i32.const 18183) "a") (data (i32.const 18186) "a") (data (i32.const 18189) "a") (data (i32.const 18192) "a") (data (i32.const 18195) "a") (data (i32.const 18198) "a") (data (i32.const 18201) "a") (data (i32.const 18204) "a") (data (i32.const 18207) "a") (data (i32.const 18210) "a") (data (i32.const 18213) "a") (data (i32.const 18216) "a") (data (i32.const 18219) "a") (data (i32.const 18222) "a") (data (i32.const 18225) "a") (data (i32.const 18228) "a") (data (i32.const 18231) "a") (data (i32.const 18234) "a") (data (i32.const 18237) "a") (data (i32.const 18240) "a") (data (i32.const 18243) "a") (data (i32.const 18246) "a") (data (i32.const 18249) "a") (data (i32.const 18252) "a") (data (i32.const 18255) "a") (data (i32.const 18258) "a") (data (i32.const 18261) "a") (data (i32.const 18264) "a") (data (i32.const 18267) "a") (data (i32.const 18270) "a") (data (i32.const 18273) "a") (data (i32.const 18276) "a") (data (i32.const 18279) "a") (data (i32.const 18282) "a") (data (i32.const 18285) "a") (data (i32.const 18288) "a") (data (i32.const 18291) "a") (data (i32.const 18294) "a") (data (i32.const 18297) "a") (data (i32.const 18300) "a") (data (i32.const 18303) "a") (data (i32.const 18306) "a") (data (i32.const 18309) "a") (data (i32.const 18312) "a") (data (i32.const 18315) "a") (data (i32.const 18318) "a") (data (i32.const 18321) "a") (data (i32.const 18324) "a") (data (i32.const 18327) "a") (data (i32.const 18330) "a") (data (i32.const 18333) "a") (data (i32.const 18336) "a") (data (i32.const 18339) "a") (data (i32.const 18342) "a") (data (i32.const 18345) "a") (data (i32.const 18348) "a") (data (i32.const 18351) "a") (data (i32.const 18354) "a") (data (i32.const 18357) "a") (data (i32.const 18360) "a") (data (i32.const 18363) "a") (data (i32.const 18366) "a") (data (i32.const 18369) "a") (data (i32.const 18372) "a") (data (i32.const 18375) "a") (data (i32.const 18378) "a") (data (i32.const 18381) "a") (data (i32.const 18384) "a") (data (i32.const 18387) "a") (data (i32.const 18390) "a") (data (i32.const 18393) "a") (data (i32.const 18396) "a") (data (i32.const 18399) "a") (data (i32.const 18402) "a") (data (i32.const 18405) "a") (data (i32.const 18408) "a") (data (i32.const 18411) "a") (data (i32.const 18414) "a") (data (i32.const 18417) "a") (data (i32.const 18420) "a") (data (i32.const 18423) "a") (data (i32.const 18426) "a") (data (i32.const 18429) "a") (data (i32.const 18432) "a") (data (i32.const 18435) "a") (data (i32.const 18438) "a") (data (i32.const 18441) "a") (data (i32.const 18444) "a") (data (i32.const 18447) "a") (data (i32.const 18450) "a") (data (i32.const 18453) "a") (data (i32.const 18456) "a") (data (i32.const 18459) "a") (data (i32.const 18462) "a") (data (i32.const 18465) "a") (data (i32.const 18468) "a") (data (i32.const 18471) "a") (data (i32.const 18474) "a") (data (i32.const 18477) "a") (data (i32.const 18480) "a") (data (i32.const 18483) "a") (data (i32.const 18486) "a") (data (i32.const 18489) "a") (data (i32.const 18492) "a") (data (i32.const 18495) "a") (data (i32.const 18498) "a") (data (i32.const 18501) "a") (data (i32.const 18504) "a") (data (i32.const 18507) "a") (data (i32.const 18510) "a") (data (i32.const 18513) "a") (data (i32.const 18516) "a") (data (i32.const 18519) "a") (data (i32.const 18522) "a") (data (i32.const 18525) "a") (data (i32.const 18528) "a") (data (i32.const 18531) "a") (data (i32.const 18534) "a") (data (i32.const 18537) "a") (data (i32.const 18540) "a") (data (i32.const 18543) "a") (data (i32.const 18546) "a") (data (i32.const 18549) "a") (data (i32.const 18552) "a") (data (i32.const 18555) "a") (data (i32.const 18558) "a") (data (i32.const 18561) "a") (data (i32.const 18564) "a") (data (i32.const 18567) "a") (data (i32.const 18570) "a") (data (i32.const 18573) "a") (data (i32.const 18576) "a") (data (i32.const 18579) "a") (data (i32.const 18582) "a") (data (i32.const 18585) "a") (data (i32.const 18588) "a") (data (i32.const 18591) "a") (data (i32.const 18594) "a") (data (i32.const 18597) "a") (data (i32.const 18600) "a") (data (i32.const 18603) "a") (data (i32.const 18606) "a") (data (i32.const 18609) "a") (data (i32.const 18612) "a") (data (i32.const 18615) "a") (data (i32.const 18618) "a") (data (i32.const 18621) "a") (data (i32.const 18624) "a") (data (i32.const 18627) "a") (data (i32.const 18630) "a") (data (i32.const 18633) "a") (data (i32.const 18636) "a") (data (i32.const 18639) "a") (data (i32.const 18642) "a") (data (i32.const 18645) "a") (data (i32.const 18648) "a") (data (i32.const 18651) "a") (data (i32.const 18654) "a") (data (i32.const 18657) "a") (data (i32.const 18660) "a") (data (i32.const 18663) "a") (data (i32.const 18666) "a") (data (i32.const 18669) "a") (data (i32.const 18672) "a") (data (i32.const 18675) "a") (data (i32.const 18678) "a") (data (i32.const 18681) "a") (data (i32.const 18684) "a") (data (i32.const 18687) "a") (data (i32.const 18690) "a") (data (i32.const 18693) "a") (data (i32.const 18696) "a") (data (i32.const 18699) "a") (data (i32.const 18702) "a") (data (i32.const 18705) "a") (data (i32.const 18708) "a") (data (i32.const 18711) "a") (data (i32.const 18714) "a") (data (i32.const 18717) "a") (data (i32.const 18720) "a") (data (i32.const 18723) "a") (data (i32.const 18726) "a") (data (i32.const 18729) "a") (data (i32.const 18732) "a") (data (i32.const 18735) "a") (data (i32.const 18738) "a") (data (i32.const 18741) "a") (data (i32.const 18744) "a") (data (i32.const 18747) "a") (data (i32.const 18750) "a") (data (i32.const 18753) "a") (data (i32.const 18756) "a") (data (i32.const 18759) "a") (data (i32.const 18762) "a") (data (i32.const 18765) "a") (data (i32.const 18768) "a") (data (i32.const 18771) "a") (data (i32.const 18774) "a") (data (i32.const 18777) "a") (data (i32.const 18780) "a") (data (i32.const 18783) "a") (data (i32.const 18786) "a") (data (i32.const 18789) "a") (data (i32.const 18792) "a") (data (i32.const 18795) "a") (data (i32.const 18798) "a") (data (i32.const 18801) "a") (data (i32.const 18804) "a") (data (i32.const 18807) "a") (data (i32.const 18810) "a") (data (i32.const 18813) "a") (data (i32.const 18816) "a") (data (i32.const 18819) "a") (data (i32.const 18822) "a") (data (i32.const 18825) "a") (data (i32.const 18828) "a") (data (i32.const 18831) "a") (data (i32.const 18834) "a") (data (i32.const 18837) "a") (data (i32.const 18840) "a") (data (i32.const 18843) "a") (data (i32.const 18846) "a") (data (i32.const 18849) "a") (data (i32.const 18852) "a") (data (i32.const 18855) "a") (data (i32.const 18858) "a") (data (i32.const 18861) "a") (data (i32.const 18864) "a") (data (i32.const 18867) "a") (data (i32.const 18870) "a") (data (i32.const 18873) "a") (data (i32.const 18876) "a") (data (i32.const 18879) "a") (data (i32.const 18882) "a") (data (i32.const 18885) "a") (data (i32.const 18888) "a") (data (i32.const 18891) "a") (data (i32.const 18894) "a") (data (i32.const 18897) "a") (data (i32.const 18900) "a") (data (i32.const 18903) "a") (data (i32.const 18906) "a") (data (i32.const 18909) "a") (data (i32.const 18912) "a") (data (i32.const 18915) "a") (data (i32.const 18918) "a") (data (i32.const 18921) "a") (data (i32.const 18924) "a") (data (i32.const 18927) "a") (data (i32.const 18930) "a") (data (i32.const 18933) "a") (data (i32.const 18936) "a") (data (i32.const 18939) "a") (data (i32.const 18942) "a") (data (i32.const 18945) "a") (data (i32.const 18948) "a") (data (i32.const 18951) "a") (data (i32.const 18954) "a") (data (i32.const 18957) "a") (data (i32.const 18960) "a") (data (i32.const 18963) "a") (data (i32.const 18966) "a") (data (i32.const 18969) "a") (data (i32.const 18972) "a") (data (i32.const 18975) "a") (data (i32.const 18978) "a") (data (i32.const 18981) "a") (data (i32.const 18984) "a") (data (i32.const 18987) "a") (data (i32.const 18990) "a") (data (i32.const 18993) "a") (data (i32.const 18996) "a") (data (i32.const 18999) "a") (data (i32.const 19002) "a") (data (i32.const 19005) "a") (data (i32.const 19008) "a") (data (i32.const 19011) "a") (data (i32.const 19014) "a") (data (i32.const 19017) "a") (data (i32.const 19020) "a") (data (i32.const 19023) "a") (data (i32.const 19026) "a") (data (i32.const 19029) "a") (data (i32.const 19032) "a") (data (i32.const 19035) "a") (data (i32.const 19038) "a") (data (i32.const 19041) "a") (data (i32.const 19044) "a") (data (i32.const 19047) "a") (data (i32.const 19050) "a") (data (i32.const 19053) "a") (data (i32.const 19056) "a") (data (i32.const 19059) "a") (data (i32.const 19062) "a") (data (i32.const 19065) "a") (data (i32.const 19068) "a") (data (i32.const 19071) "a") (data (i32.const 19074) "a") (data (i32.const 19077) "a") (data (i32.const 19080) "a") (data (i32.const 19083) "a") (data (i32.const 19086) "a") (data (i32.const 19089) "a") (data (i32.const 19092) "a") (data (i32.const 19095) "a") (data (i32.const 19098) "a") (data (i32.const 19101) "a") (data (i32.const 19104) "a") (data (i32.const 19107) "a") (data (i32.const 19110) "a") (data (i32.const 19113) "a") (data (i32.const 19116) "a") (data (i32.const 19119) "a") (data (i32.const 19122) "a") (data (i32.const 19125) "a") (data (i32.const 19128) "a") (data (i32.const 19131) "a") (data (i32.const 19134) "a") (data (i32.const 19137) "a") (data (i32.const 19140) "a") (data (i32.const 19143) "a") (data (i32.const 19146) "a") (data (i32.const 19149) "a") (data (i32.const 19152) "a") (data (i32.const 19155) "a") (data (i32.const 19158) "a") (data (i32.const 19161) "a") (data (i32.const 19164) "a") (data (i32.const 19167) "a") (data (i32.const 19170) "a") (data (i32.const 19173) "a") (data (i32.const 19176) "a") (data (i32.const 19179) "a") (data (i32.const 19182) "a") (data (i32.const 19185) "a") (data (i32.const 19188) "a") (data (i32.const 19191) "a") (data (i32.const 19194) "a") (data (i32.const 19197) "a") (data (i32.const 19200) "a") (data (i32.const 19203) "a") (data (i32.const 19206) "a") (data (i32.const 19209) "a") (data (i32.const 19212) "a") (data (i32.const 19215) "a") (data (i32.const 19218) "a") (data (i32.const 19221) "a") (data (i32.const 19224) "a") (data (i32.const 19227) "a") (data (i32.const 19230) "a") (data (i32.const 19233) "a") (data (i32.const 19236) "a") (data (i32.const 19239) "a") (data (i32.const 19242) "a") (data (i32.const 19245) "a") (data (i32.const 19248) "a") (data (i32.const 19251) "a") (data (i32.const 19254) "a") (data (i32.const 19257) "a") (data (i32.const 19260) "a") (data (i32.const 19263) "a") (data (i32.const 19266) "a") (data (i32.const 19269) "a") (data (i32.const 19272) "a") (data (i32.const 19275) "a") (data (i32.const 19278) "a") (data (i32.const 19281) "a") (data (i32.const 19284) "a") (data (i32.const 19287) "a") (data (i32.const 19290) "a") (data (i32.const 19293) "a") (data (i32.const 19296) "a") (data (i32.const 19299) "a") (data (i32.const 19302) "a") (data (i32.const 19305) "a") (data (i32.const 19308) "a") (data (i32.const 19311) "a") (data (i32.const 19314) "a") (data (i32.const 19317) "a") (data (i32.const 19320) "a") (data (i32.const 19323) "a") (data (i32.const 19326) "a") (data (i32.const 19329) "a") (data (i32.const 19332) "a") (data (i32.const 19335) "a") (data (i32.const 19338) "a") (data (i32.const 19341) "a") (data (i32.const 19344) "a") (data (i32.const 19347) "a") (data (i32.const 19350) "a") (data (i32.const 19353) "a") (data (i32.const 19356) "a") (data (i32.const 19359) "a") (data (i32.const 19362) "a") (data (i32.const 19365) "a") (data (i32.const 19368) "a") (data (i32.const 19371) "a") (data (i32.const 19374) "a") (data (i32.const 19377) "a") (data (i32.const 19380) "a") (data (i32.const 19383) "a") (data (i32.const 19386) "a") (data (i32.const 19389) "a") (data (i32.const 19392) "a") (data (i32.const 19395) "a") (data (i32.const 19398) "a") (data (i32.const 19401) "a") (data (i32.const 19404) "a") (data (i32.const 19407) "a") (data (i32.const 19410) "a") (data (i32.const 19413) "a") (data (i32.const 19416) "a") (data (i32.const 19419) "a") (data (i32.const 19422) "a") (data (i32.const 19425) "a") (data (i32.const 19428) "a") (data (i32.const 19431) "a") (data (i32.const 19434) "a") (data (i32.const 19437) "a") (data (i32.const 19440) "a") (data (i32.const 19443) "a") (data (i32.const 19446) "a") (data (i32.const 19449) "a") (data (i32.const 19452) "a") (data (i32.const 19455) "a") (data (i32.const 19458) "a") (data (i32.const 19461) "a") (data (i32.const 19464) "a") (data (i32.const 19467) "a") (data (i32.const 19470) "a") (data (i32.const 19473) "a") (data (i32.const 19476) "a") (data (i32.const 19479) "a") (data (i32.const 19482) "a") (data (i32.const 19485) "a") (data (i32.const 19488) "a") (data (i32.const 19491) "a") (data (i32.const 19494) "a") (data (i32.const 19497) "a") (data (i32.const 19500) "a") (data (i32.const 19503) "a") (data (i32.const 19506) "a") (data (i32.const 19509) "a") (data (i32.const 19512) "a") (data (i32.const 19515) "a") (data (i32.const 19518) "a") (data (i32.const 19521) "a") (data (i32.const 19524) "a") (data (i32.const 19527) "a") (data (i32.const 19530) "a") (data (i32.const 19533) "a") (data (i32.const 19536) "a") (data (i32.const 19539) "a") (data (i32.const 19542) "a") (data (i32.const 19545) "a") (data (i32.const 19548) "a") (data (i32.const 19551) "a") (data (i32.const 19554) "a") (data (i32.const 19557) "a") (data (i32.const 19560) "a") (data (i32.const 19563) "a") (data (i32.const 19566) "a") (data (i32.const 19569) "a") (data (i32.const 19572) "a") (data (i32.const 19575) "a") (data (i32.const 19578) "a") (data (i32.const 19581) "a") (data (i32.const 19584) "a") (data (i32.const 19587) "a") (data (i32.const 19590) "a") (data (i32.const 19593) "a") (data (i32.const 19596) "a") (data (i32.const 19599) "a") (data (i32.const 19602) "a") (data (i32.const 19605) "a") (data (i32.const 19608) "a") (data (i32.const 19611) "a") (data (i32.const 19614) "a") (data (i32.const 19617) "a") (data (i32.const 19620) "a") (data (i32.const 19623) "a") (data (i32.const 19626) "a") (data (i32.const 19629) "a") (data (i32.const 19632) "a") (data (i32.const 19635) "a") (data (i32.const 19638) "a") (data (i32.const 19641) "a") (data (i32.const 19644) "a") (data (i32.const 19647) "a") (data (i32.const 19650) "a") (data (i32.const 19653) "a") (data (i32.const 19656) "a") (data (i32.const 19659) "a") (data (i32.const 19662) "a") (data (i32.const 19665) "a") (data (i32.const 19668) "a") (data (i32.const 19671) "a") (data (i32.const 19674) "a") (data (i32.const 19677) "a") (data (i32.const 19680) "a") (data (i32.const 19683) "a") (data (i32.const 19686) "a") (data (i32.const 19689) "a") (data (i32.const 19692) "a") (data (i32.const 19695) "a") (data (i32.const 19698) "a") (data (i32.const 19701) "a") (data (i32.const 19704) "a") (data (i32.const 19707) "a") (data (i32.const 19710) "a") (data (i32.const 19713) "a") (data (i32.const 19716) "a") (data (i32.const 19719) "a") (data (i32.const 19722) "a") (data (i32.const 19725) "a") (data (i32.const 19728) "a") (data (i32.const 19731) "a") (data (i32.const 19734) "a") (data (i32.const 19737) "a") (data (i32.const 19740) "a") (data (i32.const 19743) "a") (data (i32.const 19746) "a") (data (i32.const 19749) "a") (data (i32.const 19752) "a") (data (i32.const 19755) "a") (data (i32.const 19758) "a") (data (i32.const 19761) "a") (data (i32.const 19764) "a") (data (i32.const 19767) "a") (data (i32.const 19770) "a") (data (i32.const 19773) "a") (data (i32.const 19776) "a") (data (i32.const 19779) "a") (data (i32.const 19782) "a") (data (i32.const 19785) "a") (data (i32.const 19788) "a") (data (i32.const 19791) "a") (data (i32.const 19794) "a") (data (i32.const 19797) "a") (data (i32.const 19800) "a") (data (i32.const 19803) "a") (data (i32.const 19806) "a") (data (i32.const 19809) "a") (data (i32.const 19812) "a") (data (i32.const 19815) "a") (data (i32.const 19818) "a") (data (i32.const 19821) "a") (data (i32.const 19824) "a") (data (i32.const 19827) "a") (data (i32.const 19830) "a") (data (i32.const 19833) "a") (data (i32.const 19836) "a") (data (i32.const 19839) "a") (data (i32.const 19842) "a") (data (i32.const 19845) "a") (data (i32.const 19848) "a") (data (i32.const 19851) "a") (data (i32.const 19854) "a") (data (i32.const 19857) "a") (data (i32.const 19860) "a") (data (i32.const 19863) "a") (data (i32.const 19866) "a") (data (i32.const 19869) "a") (data (i32.const 19872) "a") (data (i32.const 19875) "a") (data (i32.const 19878) "a") (data (i32.const 19881) "a") (data (i32.const 19884) "a") (data (i32.const 19887) "a") (data (i32.const 19890) "a") (data (i32.const 19893) "a") (data (i32.const 19896) "a") (data (i32.const 19899) "a") (data (i32.const 19902) "a") (data (i32.const 19905) "a") (data (i32.const 19908) "a") (data (i32.const 19911) "a") (data (i32.const 19914) "a") (data (i32.const 19917) "a") (data (i32.const 19920) "a") (data (i32.const 19923) "a") (data (i32.const 19926) "a") (data (i32.const 19929) "a") (data (i32.const 19932) "a") (data (i32.const 19935) "a") (data (i32.const 19938) "a") (data (i32.const 19941) "a") (data (i32.const 19944) "a") (data (i32.const 19947) "a") (data (i32.const 19950) "a") (data (i32.const 19953) "a") (data (i32.const 19956) "a") (data (i32.const 19959) "a") (data (i32.const 19962) "a") (data (i32.const 19965) "a") (data (i32.const 19968) "a") (data (i32.const 19971) "a") (data (i32.const 19974) "a") (data (i32.const 19977) "a") (data (i32.const 19980) "a") (data (i32.const 19983) "a") (data (i32.const 19986) "a") (data (i32.const 19989) "a") (data (i32.const 19992) "a") (data (i32.const 19995) "a") (data (i32.const 19998) "a") (data (i32.const 20001) "a") (data (i32.const 20004) "a") (data (i32.const 20007) "a") (data (i32.const 20010) "a") (data (i32.const 20013) "a") (data (i32.const 20016) "a") (data (i32.const 20019) "a") (data (i32.const 20022) "a") (data (i32.const 20025) "a") (data (i32.const 20028) "a") (data (i32.const 20031) "a") (data (i32.const 20034) "a") (data (i32.const 20037) "a") (data (i32.const 20040) "a") (data (i32.const 20043) "a") (data (i32.const 20046) "a") (data (i32.const 20049) "a") (data (i32.const 20052) "a") (data (i32.const 20055) "a") (data (i32.const 20058) "a") (data (i32.const 20061) "a") (data (i32.const 20064) "a") (data (i32.const 20067) "a") (data (i32.const 20070) "a") (data (i32.const 20073) "a") (data (i32.const 20076) "a") (data (i32.const 20079) "a") (data (i32.const 20082) "a") (data (i32.const 20085) "a") (data (i32.const 20088) "a") (data (i32.const 20091) "a") (data (i32.const 20094) "a") (data (i32.const 20097) "a") (data (i32.const 20100) "a") (data (i32.const 20103) "a") (data (i32.const 20106) "a") (data (i32.const 20109) "a") (data (i32.const 20112) "a") (data (i32.const 20115) "a") (data (i32.const 20118) "a") (data (i32.const 20121) "a") (data (i32.const 20124) "a") (data (i32.const 20127) "a") (data (i32.const 20130) "a") (data (i32.const 20133) "a") (data (i32.const 20136) "a") (data (i32.const 20139) "a") (data (i32.const 20142) "a") (data (i32.const 20145) "a") (data (i32.const 20148) "a") (data (i32.const 20151) "a") (data (i32.const 20154) "a") (data (i32.const 20157) "a") (data (i32.const 20160) "a") (data (i32.const 20163) "a") (data (i32.const 20166) "a") (data (i32.const 20169) "a") (data (i32.const 20172) "a") (data (i32.const 20175) "a") (data (i32.const 20178) "a") (data (i32.const 20181) "a") (data (i32.const 20184) "a") (data (i32.const 20187) "a") (data (i32.const 20190) "a") (data (i32.const 20193) "a") (data (i32.const 20196) "a") (data (i32.const 20199) "a") (data (i32.const 20202) "a") (data (i32.const 20205) "a") (data (i32.const 20208) "a") (data (i32.const 20211) "a") (data (i32.const 20214) "a") (data (i32.const 20217) "a") (data (i32.const 20220) "a") (data (i32.const 20223) "a") (data (i32.const 20226) "a") (data (i32.const 20229) "a") (data (i32.const 20232) "a") (data (i32.const 20235) "a") (data (i32.const 20238) "a") (data (i32.const 20241) "a") (data (i32.const 20244) "a") (data (i32.const 20247) "a") (data (i32.const 20250) "a") (data (i32.const 20253) "a") (data (i32.const 20256) "a") (data (i32.const 20259) "a") (data (i32.const 20262) "a") (data (i32.const 20265) "a") (data (i32.const 20268) "a") (data (i32.const 20271) "a") (data (i32.const 20274) "a") (data (i32.const 20277) "a") (data (i32.const 20280) "a") (data (i32.const 20283) "a") (data (i32.const 20286) "a") (data (i32.const 20289) "a") (data (i32.const 20292) "a") (data (i32.const 20295) "a") (data (i32.const 20298) "a") (data (i32.const 20301) "a") (data (i32.const 20304) "a") (data (i32.const 20307) "a") (data (i32.const 20310) "a") (data (i32.const 20313) "a") (data (i32.const 20316) "a") (data (i32.const 20319) "a") (data (i32.const 20322) "a") (data (i32.const 20325) "a") (data (i32.const 20328) "a") (data (i32.const 20331) "a") (data (i32.const 20334) "a") (data (i32.const 20337) "a") (data (i32.const 20340) "a") (data (i32.const 20343) "a") (data (i32.const 20346) "a") (data (i32.const 20349) "a") (data (i32.const 20352) "a") (data (i32.const 20355) "a") (data (i32.const 20358) "a") (data (i32.const 20361) "a") (data (i32.const 20364) "a") (data (i32.const 20367) "a") (data (i32.const 20370) "a") (data (i32.const 20373) "a") (data (i32.const 20376) "a") (data (i32.const 20379) "a") (data (i32.const 20382) "a") (data (i32.const 20385) "a") (data (i32.const 20388) "a") (data (i32.const 20391) "a") (data (i32.const 20394) "a") (data (i32.const 20397) "a") (data (i32.const 20400) "a") (data (i32.const 20403) "a") (data (i32.const 20406) "a") (data (i32.const 20409) "a") (data (i32.const 20412) "a") (data (i32.const 20415) "a") (data (i32.const 20418) "a") (data (i32.const 20421) "a") (data (i32.const 20424) "a") (data (i32.const 20427) "a") (data (i32.const 20430) "a") (data (i32.const 20433) "a") (data (i32.const 20436) "a") (data (i32.const 20439) "a") (data (i32.const 20442) "a") (data (i32.const 20445) "a") (data (i32.const 20448) "a") (data (i32.const 20451) "a") (data (i32.const 20454) "a") (data (i32.const 20457) "a") (data (i32.const 20460) "a") (data (i32.const 20463) "a") (data (i32.const 20466) "a") (data (i32.const 20469) "a") (data (i32.const 20472) "a") (data (i32.const 20475) "a") (data (i32.const 20478) "a") (data (i32.const 20481) "a") (data (i32.const 20484) "a") (data (i32.const 20487) "a") (data (i32.const 20490) "a") (data (i32.const 20493) "a") (data (i32.const 20496) "a") (data (i32.const 20499) "a") (data (i32.const 20502) "a") (data (i32.const 20505) "a") (data (i32.const 20508) "a") (data (i32.const 20511) "a") (data (i32.const 20514) "a") (data (i32.const 20517) "a") (data (i32.const 20520) "a") (data (i32.const 20523) "a") (data (i32.const 20526) "a") (data (i32.const 20529) "a") (data (i32.const 20532) "a") (data (i32.const 20535) "a") (data (i32.const 20538) "a") (data (i32.const 20541) "a") (data (i32.const 20544) "a") (data (i32.const 20547) "a") (data (i32.const 20550) "a") (data (i32.const 20553) "a") (data (i32.const 20556) "a") (data (i32.const 20559) "a") (data (i32.const 20562) "a") (data (i32.const 20565) "a") (data (i32.const 20568) "a") (data (i32.const 20571) "a") (data (i32.const 20574) "a") (data (i32.const 20577) "a") (data (i32.const 20580) "a") (data (i32.const 20583) "a") (data (i32.const 20586) "a") (data (i32.const 20589) "a") (data (i32.const 20592) "a") (data (i32.const 20595) "a") (data (i32.const 20598) "a") (data (i32.const 20601) "a") (data (i32.const 20604) "a") (data (i32.const 20607) "a") (data (i32.const 20610) "a") (data (i32.const 20613) "a") (data (i32.const 20616) "a") (data (i32.const 20619) "a") (data (i32.const 20622) "a") (data (i32.const 20625) "a") (data (i32.const 20628) "a") (data (i32.const 20631) "a") (data (i32.const 20634) "a") (data (i32.const 20637) "a") (data (i32.const 20640) "a") (data (i32.const 20643) "a") (data (i32.const 20646) "a") (data (i32.const 20649) "a") (data (i32.const 20652) "a") (data (i32.const 20655) "a") (data (i32.const 20658) "a") (data (i32.const 20661) "a") (data (i32.const 20664) "a") (data (i32.const 20667) "a") (data (i32.const 20670) "a") (data (i32.const 20673) "a") (data (i32.const 20676) "a") (data (i32.const 20679) "a") (data (i32.const 20682) "a") (data (i32.const 20685) "a") (data (i32.const 20688) "a") (data (i32.const 20691) "a") (data (i32.const 20694) "a") (data (i32.const 20697) "a") (data (i32.const 20700) "a") (data (i32.const 20703) "a") (data (i32.const 20706) "a") (data (i32.const 20709) "a") (data (i32.const 20712) "a") (data (i32.const 20715) "a") (data (i32.const 20718) "a") (data (i32.const 20721) "a") (data (i32.const 20724) "a") (data (i32.const 20727) "a") (data (i32.const 20730) "a") (data (i32.const 20733) "a") (data (i32.const 20736) "a") (data (i32.const 20739) "a") (data (i32.const 20742) "a") (data (i32.const 20745) "a") (data (i32.const 20748) "a") (data (i32.const 20751) "a") (data (i32.const 20754) "a") (data (i32.const 20757) "a") (data (i32.const 20760) "a") (data (i32.const 20763) "a") (data (i32.const 20766) "a") (data (i32.const 20769) "a") (data (i32.const 20772) "a") (data (i32.const 20775) "a") (data (i32.const 20778) "a") (data (i32.const 20781) "a") (data (i32.const 20784) "a") (data (i32.const 20787) "a") (data (i32.const 20790) "a") (data (i32.const 20793) "a") (data (i32.const 20796) "a") (data (i32.const 20799) "a") (data (i32.const 20802) "a") (data (i32.const 20805) "a") (data (i32.const 20808) "a") (data (i32.const 20811) "a") (data (i32.const 20814) "a") (data (i32.const 20817) "a") (data (i32.const 20820) "a") (data (i32.const 20823) "a") (data (i32.const 20826) "a") (data (i32.const 20829) "a") (data (i32.const 20832) "a") (data (i32.const 20835) "a") (data (i32.const 20838) "a") (data (i32.const 20841) "a") (data (i32.const 20844) "a") (data (i32.const 20847) "a") (data (i32.const 20850) "a") (data (i32.const 20853) "a") (data (i32.const 20856) "a") (data (i32.const 20859) "a") (data (i32.const 20862) "a") (data (i32.const 20865) "a") (data (i32.const 20868) "a") (data (i32.const 20871) "a") (data (i32.const 20874) "a") (data (i32.const 20877) "a") (data (i32.const 20880) "a") (data (i32.const 20883) "a") (data (i32.const 20886) "a") (data (i32.const 20889) "a") (data (i32.const 20892) "a") (data (i32.const 20895) "a") (data (i32.const 20898) "a") (data (i32.const 20901) "a") (data (i32.const 20904) "a") (data (i32.const 20907) "a") (data (i32.const 20910) "a") (data (i32.const 20913) "a") (data (i32.const 20916) "a") (data (i32.const 20919) "a") (data (i32.const 20922) "a") (data (i32.const 20925) "a") (data (i32.const 20928) "a") (data (i32.const 20931) "a") (data (i32.const 20934) "a") (data (i32.const 20937) "a") (data (i32.const 20940) "a") (data (i32.const 20943) "a") (data (i32.const 20946) "a") (data (i32.const 20949) "a") (data (i32.const 20952) "a") (data (i32.const 20955) "a") (data (i32.const 20958) "a") (data (i32.const 20961) "a") (data (i32.const 20964) "a") (data (i32.const 20967) "a") (data (i32.const 20970) "a") (data (i32.const 20973) "a") (data (i32.const 20976) "a") (data (i32.const 20979) "a") (data (i32.const 20982) "a") (data (i32.const 20985) "a") (data (i32.const 20988) "a") (data (i32.const 20991) "a") (data (i32.const 20994) "a") (data (i32.const 20997) "a") (data (i32.const 21000) "a") (data (i32.const 21003) "a") (data (i32.const 21006) "a") (data (i32.const 21009) "a") (data (i32.const 21012) "a") (data (i32.const 21015) "a") (data (i32.const 21018) "a") (data (i32.const 21021) "a") (data (i32.const 21024) "a") (data (i32.const 21027) "a") (data (i32.const 21030) "a") (data (i32.const 21033) "a") (data (i32.const 21036) "a") (data (i32.const 21039) "a") (data (i32.const 21042) "a") (data (i32.const 21045) "a") (data (i32.const 21048) "a") (data (i32.const 21051) "a") (data (i32.const 21054) "a") (data (i32.const 21057) "a") (data (i32.const 21060) "a") (data (i32.const 21063) "a") (data (i32.const 21066) "a") (data (i32.const 21069) "a") (data (i32.const 21072) "a") (data (i32.const 21075) "a") (data (i32.const 21078) "a") (data (i32.const 21081) "a") (data (i32.const 21084) "a") (data (i32.const 21087) "a") (data (i32.const 21090) "a") (data (i32.const 21093) "a") (data (i32.const 21096) "a") (data (i32.const 21099) "a") (data (i32.const 21102) "a") (data (i32.const 21105) "a") (data (i32.const 21108) "a") (data (i32.const 21111) "a") (data (i32.const 21114) "a") (data (i32.const 21117) "a") (data (i32.const 21120) "a") (data (i32.const 21123) "a") (data (i32.const 21126) "a") (data (i32.const 21129) "a") (data (i32.const 21132) "a") (data (i32.const 21135) "a") (data (i32.const 21138) "a") (data (i32.const 21141) "a") (data (i32.const 21144) "a") (data (i32.const 21147) "a") (data (i32.const 21150) "a") (data (i32.const 21153) "a") (data (i32.const 21156) "a") (data (i32.const 21159) "a") (data (i32.const 21162) "a") (data (i32.const 21165) "a") (data (i32.const 21168) "a") (data (i32.const 21171) "a") (data (i32.const 21174) "a") (data (i32.const 21177) "a") (data (i32.const 21180) "a") (data (i32.const 21183) "a") (data (i32.const 21186) "a") (data (i32.const 21189) "a") (data (i32.const 21192) "a") (data (i32.const 21195) "a") (data (i32.const 21198) "a") (data (i32.const 21201) "a") (data (i32.const 21204) "a") (data (i32.const 21207) "a") (data (i32.const 21210) "a") (data (i32.const 21213) "a") (data (i32.const 21216) "a") (data (i32.const 21219) "a") (data (i32.const 21222) "a") (data (i32.const 21225) "a") (data (i32.const 21228) "a") (data (i32.const 21231) "a") (data (i32.const 21234) "a") (data (i32.const 21237) "a") (data (i32.const 21240) "a") (data (i32.const 21243) "a") (data (i32.const 21246) "a") (data (i32.const 21249) "a") (data (i32.const 21252) "a") (data (i32.const 21255) "a") (data (i32.const 21258) "a") (data (i32.const 21261) "a") (data (i32.const 21264) "a") (data (i32.const 21267) "a") (data (i32.const 21270) "a") (data (i32.const 21273) "a") (data (i32.const 21276) "a") (data (i32.const 21279) "a") (data (i32.const 21282) "a") (data (i32.const 21285) "a") (data (i32.const 21288) "a") (data (i32.const 21291) "a") (data (i32.const 21294) "a") (data (i32.const 21297) "a") (data (i32.const 21300) "a") (data (i32.const 21303) "a") (data (i32.const 21306) "a") (data (i32.const 21309) "a") (data (i32.const 21312) "a") (data (i32.const 21315) "a") (data (i32.const 21318) "a") (data (i32.const 21321) "a") (data (i32.const 21324) "a") (data (i32.const 21327) "a") (data (i32.const 21330) "a") (data (i32.const 21333) "a") (data (i32.const 21336) "a") (data (i32.const 21339) "a") (data (i32.const 21342) "a") (data (i32.const 21345) "a") (data (i32.const 21348) "a") (data (i32.const 21351) "a") (data (i32.const 21354) "a") (data (i32.const 21357) "a") (data (i32.const 21360) "a") (data (i32.const 21363) "a") (data (i32.const 21366) "a") (data (i32.const 21369) "a") (data (i32.const 21372) "a") (data (i32.const 21375) "a") (data (i32.const 21378) "a") (data (i32.const 21381) "a") (data (i32.const 21384) "a") (data (i32.const 21387) "a") (data (i32.const 21390) "a") (data (i32.const 21393) "a") (data (i32.const 21396) "a") (data (i32.const 21399) "a") (data (i32.const 21402) "a") (data (i32.const 21405) "a") (data (i32.const 21408) "a") (data (i32.const 21411) "a") (data (i32.const 21414) "a") (data (i32.const 21417) "a") (data (i32.const 21420) "a") (data (i32.const 21423) "a") (data (i32.const 21426) "a") (data (i32.const 21429) "a") (data (i32.const 21432) "a") (data (i32.const 21435) "a") (data (i32.const 21438) "a") (data (i32.const 21441) "a") (data (i32.const 21444) "a") (data (i32.const 21447) "a") (data (i32.const 21450) "a") (data (i32.const 21453) "a") (data (i32.const 21456) "a") (data (i32.const 21459) "a") (data (i32.const 21462) "a") (data (i32.const 21465) "a") (data (i32.const 21468) "a") (data (i32.const 21471) "a") (data (i32.const 21474) "a") (data (i32.const 21477) "a") (data (i32.const 21480) "a") (data (i32.const 21483) "a") (data (i32.const 21486) "a") (data (i32.const 21489) "a") (data (i32.const 21492) "a") (data (i32.const 21495) "a") (data (i32.const 21498) "a") (data (i32.const 21501) "a") (data (i32.const 21504) "a") (data (i32.const 21507) "a") (data (i32.const 21510) "a") (data (i32.const 21513) "a") (data (i32.const 21516) "a") (data (i32.const 21519) "a") (data (i32.const 21522) "a") (data (i32.const 21525) "a") (data (i32.const 21528) "a") (data (i32.const 21531) "a") (data (i32.const 21534) "a") (data (i32.const 21537) "a") (data (i32.const 21540) "a") (data (i32.const 21543) "a") (data (i32.const 21546) "a") (data (i32.const 21549) "a") (data (i32.const 21552) "a") (data (i32.const 21555) "a") (data (i32.const 21558) "a") (data (i32.const 21561) "a") (data (i32.const 21564) "a") (data (i32.const 21567) "a") (data (i32.const 21570) "a") (data (i32.const 21573) "a") (data (i32.const 21576) "a") (data (i32.const 21579) "a") (data (i32.const 21582) "a") (data (i32.const 21585) "a") (data (i32.const 21588) "a") (data (i32.const 21591) "a") (data (i32.const 21594) "a") (data (i32.const 21597) "a") (data (i32.const 21600) "a") (data (i32.const 21603) "a") (data (i32.const 21606) "a") (data (i32.const 21609) "a") (data (i32.const 21612) "a") (data (i32.const 21615) "a") (data (i32.const 21618) "a") (data (i32.const 21621) "a") (data (i32.const 21624) "a") (data (i32.const 21627) "a") (data (i32.const 21630) "a") (data (i32.const 21633) "a") (data (i32.const 21636) "a") (data (i32.const 21639) "a") (data (i32.const 21642) "a") (data (i32.const 21645) "a") (data (i32.const 21648) "a") (data (i32.const 21651) "a") (data (i32.const 21654) "a") (data (i32.const 21657) "a") (data (i32.const 21660) "a") (data (i32.const 21663) "a") (data (i32.const 21666) "a") (data (i32.const 21669) "a") (data (i32.const 21672) "a") (data (i32.const 21675) "a") (data (i32.const 21678) "a") (data (i32.const 21681) "a") (data (i32.const 21684) "a") (data (i32.const 21687) "a") (data (i32.const 21690) "a") (data (i32.const 21693) "a") (data (i32.const 21696) "a") (data (i32.const 21699) "a") (data (i32.const 21702) "a") (data (i32.const 21705) "a") (data (i32.const 21708) "a") (data (i32.const 21711) "a") (data (i32.const 21714) "a") (data (i32.const 21717) "a") (data (i32.const 21720) "a") (data (i32.const 21723) "a") (data (i32.const 21726) "a") (data (i32.const 21729) "a") (data (i32.const 21732) "a") (data (i32.const 21735) "a") (data (i32.const 21738) "a") (data (i32.const 21741) "a") (data (i32.const 21744) "a") (data (i32.const 21747) "a") (data (i32.const 21750) "a") (data (i32.const 21753) "a") (data (i32.const 21756) "a") (data (i32.const 21759) "a") (data (i32.const 21762) "a") (data (i32.const 21765) "a") (data (i32.const 21768) "a") (data (i32.const 21771) "a") (data (i32.const 21774) "a") (data (i32.const 21777) "a") (data (i32.const 21780) "a") (data (i32.const 21783) "a") (data (i32.const 21786) "a") (data (i32.const 21789) "a") (data (i32.const 21792) "a") (data (i32.const 21795) "a") (data (i32.const 21798) "a") (data (i32.const 21801) "a") (data (i32.const 21804) "a") (data (i32.const 21807) "a") (data (i32.const 21810) "a") (data (i32.const 21813) "a") (data (i32.const 21816) "a") (data (i32.const 21819) "a") (data (i32.const 21822) "a") (data (i32.const 21825) "a") (data (i32.const 21828) "a") (data (i32.const 21831) "a") (data (i32.const 21834) "a") (data (i32.const 21837) "a") (data (i32.const 21840) "a") (data (i32.const 21843) "a") (data (i32.const 21846) "a") (data (i32.const 21849) "a") (data (i32.const 21852) "a") (data (i32.const 21855) "a") (data (i32.const 21858) "a") (data (i32.const 21861) "a") (data (i32.const 21864) "a") (data (i32.const 21867) "a") (data (i32.const 21870) "a") (data (i32.const 21873) "a") (data (i32.const 21876) "a") (data (i32.const 21879) "a") (data (i32.const 21882) "a") (data (i32.const 21885) "a") (data (i32.const 21888) "a") (data (i32.const 21891) "a") (data (i32.const 21894) "a") (data (i32.const 21897) "a") (data (i32.const 21900) "a") (data (i32.const 21903) "a") (data (i32.const 21906) "a") (data (i32.const 21909) "a") (data (i32.const 21912) "a") (data (i32.const 21915) "a") (data (i32.const 21918) "a") (data (i32.const 21921) "a") (data (i32.const 21924) "a") (data (i32.const 21927) "a") (data (i32.const 21930) "a") (data (i32.const 21933) "a") (data (i32.const 21936) "a") (data (i32.const 21939) "a") (data (i32.const 21942) "a") (data (i32.const 21945) "a") (data (i32.const 21948) "a") (data (i32.const 21951) "a") (data (i32.const 21954) "a") (data (i32.const 21957) "a") (data (i32.const 21960) "a") (data (i32.const 21963) "a") (data (i32.const 21966) "a") (data (i32.const 21969) "a") (data (i32.const 21972) "a") (data (i32.const 21975) "a") (data (i32.const 21978) "a") (data (i32.const 21981) "a") (data (i32.const 21984) "a") (data (i32.const 21987) "a") (data (i32.const 21990) "a") (data (i32.const 21993) "a") (data (i32.const 21996) "a") (data (i32.const 21999) "a") (data (i32.const 22002) "a") (data (i32.const 22005) "a") (data (i32.const 22008) "a") (data (i32.const 22011) "a") (data (i32.const 22014) "a") (data (i32.const 22017) "a") (data (i32.const 22020) "a") (data (i32.const 22023) "a") (data (i32.const 22026) "a") (data (i32.const 22029) "a") (data (i32.const 22032) "a") (data (i32.const 22035) "a") (data (i32.const 22038) "a") (data (i32.const 22041) "a") (data (i32.const 22044) "a") (data (i32.const 22047) "a") (data (i32.const 22050) "a") (data (i32.const 22053) "a") (data (i32.const 22056) "a") (data (i32.const 22059) "a") (data (i32.const 22062) "a") (data (i32.const 22065) "a") (data (i32.const 22068) "a") (data (i32.const 22071) "a") (data (i32.const 22074) "a") (data (i32.const 22077) "a") (data (i32.const 22080) "a") (data (i32.const 22083) "a") (data (i32.const 22086) "a") (data (i32.const 22089) "a") (data (i32.const 22092) "a") (data (i32.const 22095) "a") (data (i32.const 22098) "a") (data (i32.const 22101) "a") (data (i32.const 22104) "a") (data (i32.const 22107) "a") (data (i32.const 22110) "a") (data (i32.const 22113) "a") (data (i32.const 22116) "a") (data (i32.const 22119) "a") (data (i32.const 22122) "a") (data (i32.const 22125) "a") (data (i32.const 22128) "a") (data (i32.const 22131) "a") (data (i32.const 22134) "a") (data (i32.const 22137) "a") (data (i32.const 22140) "a") (data (i32.const 22143) "a") (data (i32.const 22146) "a") (data (i32.const 22149) "a") (data (i32.const 22152) "a") (data (i32.const 22155) "a") (data (i32.const 22158) "a") (data (i32.const 22161) "a") (data (i32.const 22164) "a") (data (i32.const 22167) "a") (data (i32.const 22170) "a") (data (i32.const 22173) "a") (data (i32.const 22176) "a") (data (i32.const 22179) "a") (data (i32.const 22182) "a") (data (i32.const 22185) "a") (data (i32.const 22188) "a") (data (i32.const 22191) "a") (data (i32.const 22194) "a") (data (i32.const 22197) "a") (data (i32.const 22200) "a") (data (i32.const 22203) "a") (data (i32.const 22206) "a") (data (i32.const 22209) "a") (data (i32.const 22212) "a") (data (i32.const 22215) "a") (data (i32.const 22218) "a") (data (i32.const 22221) "a") (data (i32.const 22224) "a") (data (i32.const 22227) "a") (data (i32.const 22230) "a") (data (i32.const 22233) "a") (data (i32.const 22236) "a") (data (i32.const 22239) "a") (data (i32.const 22242) "a") (data (i32.const 22245) "a") (data (i32.const 22248) "a") (data (i32.const 22251) "a") (data (i32.const 22254) "a") (data (i32.const 22257) "a") (data (i32.const 22260) "a") (data (i32.const 22263) "a") (data (i32.const 22266) "a") (data (i32.const 22269) "a") (data (i32.const 22272) "a") (data (i32.const 22275) "a") (data (i32.const 22278) "a") (data (i32.const 22281) "a") (data (i32.const 22284) "a") (data (i32.const 22287) "a") (data (i32.const 22290) "a") (data (i32.const 22293) "a") (data (i32.const 22296) "a") (data (i32.const 22299) "a") (data (i32.const 22302) "a") (data (i32.const 22305) "a") (data (i32.const 22308) "a") (data (i32.const 22311) "a") (data (i32.const 22314) "a") (data (i32.const 22317) "a") (data (i32.const 22320) "a") (data (i32.const 22323) "a") (data (i32.const 22326) "a") (data (i32.const 22329) "a") (data (i32.const 22332) "a") (data (i32.const 22335) "a") (data (i32.const 22338) "a") (data (i32.const 22341) "a") (data (i32.const 22344) "a") (data (i32.const 22347) "a") (data (i32.const 22350) "a") (data (i32.const 22353) "a") (data (i32.const 22356) "a") (data (i32.const 22359) "a") (data (i32.const 22362) "a") (data (i32.const 22365) "a") (data (i32.const 22368) "a") (data (i32.const 22371) "a") (data (i32.const 22374) "a") (data (i32.const 22377) "a") (data (i32.const 22380) "a") (data (i32.const 22383) "a") (data (i32.const 22386) "a") (data (i32.const 22389) "a") (data (i32.const 22392) "a") (data (i32.const 22395) "a") (data (i32.const 22398) "a") (data (i32.const 22401) "a") (data (i32.const 22404) "a") (data (i32.const 22407) "a") (data (i32.const 22410) "a") (data (i32.const 22413) "a") (data (i32.const 22416) "a") (data (i32.const 22419) "a") (data (i32.const 22422) "a") (data (i32.const 22425) "a") (data (i32.const 22428) "a") (data (i32.const 22431) "a") (data (i32.const 22434) "a") (data (i32.const 22437) "a") (data (i32.const 22440) "a") (data (i32.const 22443) "a") (data (i32.const 22446) "a") (data (i32.const 22449) "a") (data (i32.const 22452) "a") (data (i32.const 22455) "a") (data (i32.const 22458) "a") (data (i32.const 22461) "a") (data (i32.const 22464) "a") (data (i32.const 22467) "a") (data (i32.const 22470) "a") (data (i32.const 22473) "a") (data (i32.const 22476) "a") (data (i32.const 22479) "a") (data (i32.const 22482) "a") (data (i32.const 22485) "a") (data (i32.const 22488) "a") (data (i32.const 22491) "a") (data (i32.const 22494) "a") (data (i32.const 22497) "a") (data (i32.const 22500) "a") (data (i32.const 22503) "a") (data (i32.const 22506) "a") (data (i32.const 22509) "a") (data (i32.const 22512) "a") (data (i32.const 22515) "a") (data (i32.const 22518) "a") (data (i32.const 22521) "a") (data (i32.const 22524) "a") (data (i32.const 22527) "a") (data (i32.const 22530) "a") (data (i32.const 22533) "a") (data (i32.const 22536) "a") (data (i32.const 22539) "a") (data (i32.const 22542) "a") (data (i32.const 22545) "a") (data (i32.const 22548) "a") (data (i32.const 22551) "a") (data (i32.const 22554) "a") (data (i32.const 22557) "a") (data (i32.const 22560) "a") (data (i32.const 22563) "a") (data (i32.const 22566) "a") (data (i32.const 22569) "a") (data (i32.const 22572) "a") (data (i32.const 22575) "a") (data (i32.const 22578) "a") (data (i32.const 22581) "a") (data (i32.const 22584) "a") (data (i32.const 22587) "a") (data (i32.const 22590) "a") (data (i32.const 22593) "a") (data (i32.const 22596) "a") (data (i32.const 22599) "a") (data (i32.const 22602) "a") (data (i32.const 22605) "a") (data (i32.const 22608) "a") (data (i32.const 22611) "a") (data (i32.const 22614) "a") (data (i32.const 22617) "a") (data (i32.const 22620) "a") (data (i32.const 22623) "a") (data (i32.const 22626) "a") (data (i32.const 22629) "a") (data (i32.const 22632) "a") (data (i32.const 22635) "a") (data (i32.const 22638) "a") (data (i32.const 22641) "a") (data (i32.const 22644) "a") (data (i32.const 22647) "a") (data (i32.const 22650) "a") (data (i32.const 22653) "a") (data (i32.const 22656) "a") (data (i32.const 22659) "a") (data (i32.const 22662) "a") (data (i32.const 22665) "a") (data (i32.const 22668) "a") (data (i32.const 22671) "a") (data (i32.const 22674) "a") (data (i32.const 22677) "a") (data (i32.const 22680) "a") (data (i32.const 22683) "a") (data (i32.const 22686) "a") (data (i32.const 22689) "a") (data (i32.const 22692) "a") (data (i32.const 22695) "a") (data (i32.const 22698) "a") (data (i32.const 22701) "a") (data (i32.const 22704) "a") (data (i32.const 22707) "a") (data (i32.const 22710) "a") (data (i32.const 22713) "a") (data (i32.const 22716) "a") (data (i32.const 22719) "a") (data (i32.const 22722) "a") (data (i32.const 22725) "a") (data (i32.const 22728) "a") (data (i32.const 22731) "a") (data (i32.const 22734) "a") (data (i32.const 22737) "a") (data (i32.const 22740) "a") (data (i32.const 22743) "a") (data (i32.const 22746) "a") (data (i32.const 22749) "a") (data (i32.const 22752) "a") (data (i32.const 22755) "a") (data (i32.const 22758) "a") (data (i32.const 22761) "a") (data (i32.const 22764) "a") (data (i32.const 22767) "a") (data (i32.const 22770) "a") (data (i32.const 22773) "a") (data (i32.const 22776) "a") (data (i32.const 22779) "a") (data (i32.const 22782) "a") (data (i32.const 22785) "a") (data (i32.const 22788) "a") (data (i32.const 22791) "a") (data (i32.const 22794) "a") (data (i32.const 22797) "a") (data (i32.const 22800) "a") (data (i32.const 22803) "a") (data (i32.const 22806) "a") (data (i32.const 22809) "a") (data (i32.const 22812) "a") (data (i32.const 22815) "a") (data (i32.const 22818) "a") (data (i32.const 22821) "a") (data (i32.const 22824) "a") (data (i32.const 22827) "a") (data (i32.const 22830) "a") (data (i32.const 22833) "a") (data (i32.const 22836) "a") (data (i32.const 22839) "a") (data (i32.const 22842) "a") (data (i32.const 22845) "a") (data (i32.const 22848) "a") (data (i32.const 22851) "a") (data (i32.const 22854) "a") (data (i32.const 22857) "a") (data (i32.const 22860) "a") (data (i32.const 22863) "a") (data (i32.const 22866) "a") (data (i32.const 22869) "a") (data (i32.const 22872) "a") (data (i32.const 22875) "a") (data (i32.const 22878) "a") (data (i32.const 22881) "a") (data (i32.const 22884) "a") (data (i32.const 22887) "a") (data (i32.const 22890) "a") (data (i32.const 22893) "a") (data (i32.const 22896) "a") (data (i32.const 22899) "a") (data (i32.const 22902) "a") (data (i32.const 22905) "a") (data (i32.const 22908) "a") (data (i32.const 22911) "a") (data (i32.const 22914) "a") (data (i32.const 22917) "a") (data (i32.const 22920) "a") (data (i32.const 22923) "a") (data (i32.const 22926) "a") (data (i32.const 22929) "a") (data (i32.const 22932) "a") (data (i32.const 22935) "a") (data (i32.const 22938) "a") (data (i32.const 22941) "a") (data (i32.const 22944) "a") (data (i32.const 22947) "a") (data (i32.const 22950) "a") (data (i32.const 22953) "a") (data (i32.const 22956) "a") (data (i32.const 22959) "a") (data (i32.const 22962) "a") (data (i32.const 22965) "a") (data (i32.const 22968) "a") (data (i32.const 22971) "a") (data (i32.const 22974) "a") (data (i32.const 22977) "a") (data (i32.const 22980) "a") (data (i32.const 22983) "a") (data (i32.const 22986) "a") (data (i32.const 22989) "a") (data (i32.const 22992) "a") (data (i32.const 22995) "a") (data (i32.const 22998) "a") (data (i32.const 23001) "a") (data (i32.const 23004) "a") (data (i32.const 23007) "a") (data (i32.const 23010) "a") (data (i32.const 23013) "a") (data (i32.const 23016) "a") (data (i32.const 23019) "a") (data (i32.const 23022) "a") (data (i32.const 23025) "a") (data (i32.const 23028) "a") (data (i32.const 23031) "a") (data (i32.const 23034) "a") (data (i32.const 23037) "a") (data (i32.const 23040) "a") (data (i32.const 23043) "a") (data (i32.const 23046) "a") (data (i32.const 23049) "a") (data (i32.const 23052) "a") (data (i32.const 23055) "a") (data (i32.const 23058) "a") (data (i32.const 23061) "a") (data (i32.const 23064) "a") (data (i32.const 23067) "a") (data (i32.const 23070) "a") (data (i32.const 23073) "a") (data (i32.const 23076) "a") (data (i32.const 23079) "a") (data (i32.const 23082) "a") (data (i32.const 23085) "a") (data (i32.const 23088) "a") (data (i32.const 23091) "a") (data (i32.const 23094) "a") (data (i32.const 23097) "a") (data (i32.const 23100) "a") (data (i32.const 23103) "a") (data (i32.const 23106) "a") (data (i32.const 23109) "a") (data (i32.const 23112) "a") (data (i32.const 23115) "a") (data (i32.const 23118) "a") (data (i32.const 23121) "a") (data (i32.const 23124) "a") (data (i32.const 23127) "a") (data (i32.const 23130) "a") (data (i32.const 23133) "a") (data (i32.const 23136) "a") (data (i32.const 23139) "a") (data (i32.const 23142) "a") (data (i32.const 23145) "a") (data (i32.const 23148) "a") (data (i32.const 23151) "a") (data (i32.const 23154) "a") (data (i32.const 23157) "a") (data (i32.const 23160) "a") (data (i32.const 23163) "a") (data (i32.const 23166) "a") (data (i32.const 23169) "a") (data (i32.const 23172) "a") (data (i32.const 23175) "a") (data (i32.const 23178) "a") (data (i32.const 23181) "a") (data (i32.const 23184) "a") (data (i32.const 23187) "a") (data (i32.const 23190) "a") (data (i32.const 23193) "a") (data (i32.const 23196) "a") (data (i32.const 23199) "a") (data (i32.const 23202) "a") (data (i32.const 23205) "a") (data (i32.const 23208) "a") (data (i32.const 23211) "a") (data (i32.const 23214) "a") (data (i32.const 23217) "a") (data (i32.const 23220) "a") (data (i32.const 23223) "a") (data (i32.const 23226) "a") (data (i32.const 23229) "a") (data (i32.const 23232) "a") (data (i32.const 23235) "a") (data (i32.const 23238) "a") (data (i32.const 23241) "a") (data (i32.const 23244) "a") (data (i32.const 23247) "a") (data (i32.const 23250) "a") (data (i32.const 23253) "a") (data (i32.const 23256) "a") (data (i32.const 23259) "a") (data (i32.const 23262) "a") (data (i32.const 23265) "a") (data (i32.const 23268) "a") (data (i32.const 23271) "a") (data (i32.const 23274) "a") (data (i32.const 23277) "a") (data (i32.const 23280) "a") (data (i32.const 23283) "a") (data (i32.const 23286) "a") (data (i32.const 23289) "a") (data (i32.const 23292) "a") (data (i32.const 23295) "a") (data (i32.const 23298) "a") (data (i32.const 23301) "a") (data (i32.const 23304) "a") (data (i32.const 23307) "a") (data (i32.const 23310) "a") (data (i32.const 23313) "a") (data (i32.const 23316) "a") (data (i32.const 23319) "a") (data (i32.const 23322) "a") (data (i32.const 23325) "a") (data (i32.const 23328) "a") (data (i32.const 23331) "a") (data (i32.const 23334) "a") (data (i32.const 23337) "a") (data (i32.const 23340) "a") (data (i32.const 23343) "a") (data (i32.const 23346) "a") (data (i32.const 23349) "a") (data (i32.const 23352) "a") (data (i32.const 23355) "a") (data (i32.const 23358) "a") (data (i32.const 23361) "a") (data (i32.const 23364) "a") (data (i32.const 23367) "a") (data (i32.const 23370) "a") (data (i32.const 23373) "a") (data (i32.const 23376) "a") (data (i32.const 23379) "a") (data (i32.const 23382) "a") (data (i32.const 23385) "a") (data (i32.const 23388) "a") (data (i32.const 23391) "a") (data (i32.const 23394) "a") (data (i32.const 23397) "a") (data (i32.const 23400) "a") (data (i32.const 23403) "a") (data (i32.const 23406) "a") (data (i32.const 23409) "a") (data (i32.const 23412) "a") (data (i32.const 23415) "a") (data (i32.const 23418) "a") (data (i32.const 23421) "a") (data (i32.const 23424) "a") (data (i32.const 23427) "a") (data (i32.const 23430) "a") (data (i32.const 23433) "a") (data (i32.const 23436) "a") (data (i32.const 23439) "a") (data (i32.const 23442) "a") (data (i32.const 23445) "a") (data (i32.const 23448) "a") (data (i32.const 23451) "a") (data (i32.const 23454) "a") (data (i32.const 23457) "a") (data (i32.const 23460) "a") (data (i32.const 23463) "a") (data (i32.const 23466) "a") (data (i32.const 23469) "a") (data (i32.const 23472) "a") (data (i32.const 23475) "a") (data (i32.const 23478) "a") (data (i32.const 23481) "a") (data (i32.const 23484) "a") (data (i32.const 23487) "a") (data (i32.const 23490) "a") (data (i32.const 23493) "a") (data (i32.const 23496) "a") (data (i32.const 23499) "a") (data (i32.const 23502) "a") (data (i32.const 23505) "a") (data (i32.const 23508) "a") (data (i32.const 23511) "a") (data (i32.const 23514) "a") (data (i32.const 23517) "a") (data (i32.const 23520) "a") (data (i32.const 23523) "a") (data (i32.const 23526) "a") (data (i32.const 23529) "a") (data (i32.const 23532) "a") (data (i32.const 23535) "a") (data (i32.const 23538) "a") (data (i32.const 23541) "a") (data (i32.const 23544) "a") (data (i32.const 23547) "a") (data (i32.const 23550) "a") (data (i32.const 23553) "a") (data (i32.const 23556) "a") (data (i32.const 23559) "a") (data (i32.const 23562) "a") (data (i32.const 23565) "a") (data (i32.const 23568) "a") (data (i32.const 23571) "a") (data (i32.const 23574) "a") (data (i32.const 23577) "a") (data (i32.const 23580) "a") (data (i32.const 23583) "a") (data (i32.const 23586) "a") (data (i32.const 23589) "a") (data (i32.const 23592) "a") (data (i32.const 23595) "a") (data (i32.const 23598) "a") (data (i32.const 23601) "a") (data (i32.const 23604) "a") (data (i32.const 23607) "a") (data (i32.const 23610) "a") (data (i32.const 23613) "a") (data (i32.const 23616) "a") (data (i32.const 23619) "a") (data (i32.const 23622) "a") (data (i32.const 23625) "a") (data (i32.const 23628) "a") (data (i32.const 23631) "a") (data (i32.const 23634) "a") (data (i32.const 23637) "a") (data (i32.const 23640) "a") (data (i32.const 23643) "a") (data (i32.const 23646) "a") (data (i32.const 23649) "a") (data (i32.const 23652) "a") (data (i32.const 23655) "a") (data (i32.const 23658) "a") (data (i32.const 23661) "a") (data (i32.const 23664) "a") (data (i32.const 23667) "a") (data (i32.const 23670) "a") (data (i32.const 23673) "a") (data (i32.const 23676) "a") (data (i32.const 23679) "a") (data (i32.const 23682) "a") (data (i32.const 23685) "a") (data (i32.const 23688) "a") (data (i32.const 23691) "a") (data (i32.const 23694) "a") (data (i32.const 23697) "a") (data (i32.const 23700) "a") (data (i32.const 23703) "a") (data (i32.const 23706) "a") (data (i32.const 23709) "a") (data (i32.const 23712) "a") (data (i32.const 23715) "a") (data (i32.const 23718) "a") (data (i32.const 23721) "a") (data (i32.const 23724) "a") (data (i32.const 23727) "a") (data (i32.const 23730) "a") (data (i32.const 23733) "a") (data (i32.const 23736) "a") (data (i32.const 23739) "a") (data (i32.const 23742) "a") (data (i32.const 23745) "a") (data (i32.const 23748) "a") (data (i32.const 23751) "a") (data (i32.const 23754) "a") (data (i32.const 23757) "a") (data (i32.const 23760) "a") (data (i32.const 23763) "a") (data (i32.const 23766) "a") (data (i32.const 23769) "a") (data (i32.const 23772) "a") (data (i32.const 23775) "a") (data (i32.const 23778) "a") (data (i32.const 23781) "a") (data (i32.const 23784) "a") (data (i32.const 23787) "a") (data (i32.const 23790) "a") (data (i32.const 23793) "a") (data (i32.const 23796) "a") (data (i32.const 23799) "a") (data (i32.const 23802) "a") (data (i32.const 23805) "a") (data (i32.const 23808) "a") (data (i32.const 23811) "a") (data (i32.const 23814) "a") (data (i32.const 23817) "a") (data (i32.const 23820) "a") (data (i32.const 23823) "a") (data (i32.const 23826) "a") (data (i32.const 23829) "a") (data (i32.const 23832) "a") (data (i32.const 23835) "a") (data (i32.const 23838) "a") (data (i32.const 23841) "a") (data (i32.const 23844) "a") (data (i32.const 23847) "a") (data (i32.const 23850) "a") (data (i32.const 23853) "a") (data (i32.const 23856) "a") (data (i32.const 23859) "a") (data (i32.const 23862) "a") (data (i32.const 23865) "a") (data (i32.const 23868) "a") (data (i32.const 23871) "a") (data (i32.const 23874) "a") (data (i32.const 23877) "a") (data (i32.const 23880) "a") (data (i32.const 23883) "a") (data (i32.const 23886) "a") (data (i32.const 23889) "a") (data (i32.const 23892) "a") (data (i32.const 23895) "a") (data (i32.const 23898) "a") (data (i32.const 23901) "a") (data (i32.const 23904) "a") (data (i32.const 23907) "a") (data (i32.const 23910) "a") (data (i32.const 23913) "a") (data (i32.const 23916) "a") (data (i32.const 23919) "a") (data (i32.const 23922) "a") (data (i32.const 23925) "a") (data (i32.const 23928) "a") (data (i32.const 23931) "a") (data (i32.const 23934) "a") (data (i32.const 23937) "a") (data (i32.const 23940) "a") (data (i32.const 23943) "a") (data (i32.const 23946) "a") (data (i32.const 23949) "a") (data (i32.const 23952) "a") (data (i32.const 23955) "a") (data (i32.const 23958) "a") (data (i32.const 23961) "a") (data (i32.const 23964) "a") (data (i32.const 23967) "a") (data (i32.const 23970) "a") (data (i32.const 23973) "a") (data (i32.const 23976) "a") (data (i32.const 23979) "a") (data (i32.const 23982) "a") (data (i32.const 23985) "a") (data (i32.const 23988) "a") (data (i32.const 23991) "a") (data (i32.const 23994) "a") (data (i32.const 23997) "a") (data (i32.const 24000) "a") (data (i32.const 24003) "a") (data (i32.const 24006) "a") (data (i32.const 24009) "a") (data (i32.const 24012) "a") (data (i32.const 24015) "a") (data (i32.const 24018) "a") (data (i32.const 24021) "a") (data (i32.const 24024) "a") (data (i32.const 24027) "a") (data (i32.const 24030) "a") (data (i32.const 24033) "a") (data (i32.const 24036) "a") (data (i32.const 24039) "a") (data (i32.const 24042) "a") (data (i32.const 24045) "a") (data (i32.const 24048) "a") (data (i32.const 24051) "a") (data (i32.const 24054) "a") (data (i32.const 24057) "a") (data (i32.const 24060) "a") (data (i32.const 24063) "a") (data (i32.const 24066) "a") (data (i32.const 24069) "a") (data (i32.const 24072) "a") (data (i32.const 24075) "a") (data (i32.const 24078) "a") (data (i32.const 24081) "a") (data (i32.const 24084) "a") (data (i32.const 24087) "a") (data (i32.const 24090) "a") (data (i32.const 24093) "a") (data (i32.const 24096) "a") (data (i32.const 24099) "a") (data (i32.const 24102) "a") (data (i32.const 24105) "a") (data (i32.const 24108) "a") (data (i32.const 24111) "a") (data (i32.const 24114) "a") (data (i32.const 24117) "a") (data (i32.const 24120) "a") (data (i32.const 24123) "a") (data (i32.const 24126) "a") (data (i32.const 24129) "a") (data (i32.const 24132) "a") (data (i32.const 24135) "a") (data (i32.const 24138) "a") (data (i32.const 24141) "a") (data (i32.const 24144) "a") (data (i32.const 24147) "a") (data (i32.const 24150) "a") (data (i32.const 24153) "a") (data (i32.const 24156) "a") (data (i32.const 24159) "a") (data (i32.const 24162) "a") (data (i32.const 24165) "a") (data (i32.const 24168) "a") (data (i32.const 24171) "a") (data (i32.const 24174) "a") (data (i32.const 24177) "a") (data (i32.const 24180) "a") (data (i32.const 24183) "a") (data (i32.const 24186) "a") (data (i32.const 24189) "a") (data (i32.const 24192) "a") (data (i32.const 24195) "a") (data (i32.const 24198) "a") (data (i32.const 24201) "a") (data (i32.const 24204) "a") (data (i32.const 24207) "a") (data (i32.const 24210) "a") (data (i32.const 24213) "a") (data (i32.const 24216) "a") (data (i32.const 24219) "a") (data (i32.const 24222) "a") (data (i32.const 24225) "a") (data (i32.const 24228) "a") (data (i32.const 24231) "a") (data (i32.const 24234) "a") (data (i32.const 24237) "a") (data (i32.const 24240) "a") (data (i32.const 24243) "a") (data (i32.const 24246) "a") (data (i32.const 24249) "a") (data (i32.const 24252) "a") (data (i32.const 24255) "a") (data (i32.const 24258) "a") (data (i32.const 24261) "a") (data (i32.const 24264) "a") (data (i32.const 24267) "a") (data (i32.const 24270) "a") (data (i32.const 24273) "a") (data (i32.const 24276) "a") (data (i32.const 24279) "a") (data (i32.const 24282) "a") (data (i32.const 24285) "a") (data (i32.const 24288) "a") (data (i32.const 24291) "a") (data (i32.const 24294) "a") (data (i32.const 24297) "a") (data (i32.const 24300) "a") (data (i32.const 24303) "a") (data (i32.const 24306) "a") (data (i32.const 24309) "a") (data (i32.const 24312) "a") (data (i32.const 24315) "a") (data (i32.const 24318) "a") (data (i32.const 24321) "a") (data (i32.const 24324) "a") (data (i32.const 24327) "a") (data (i32.const 24330) "a") (data (i32.const 24333) "a") (data (i32.const 24336) "a") (data (i32.const 24339) "a") (data (i32.const 24342) "a") (data (i32.const 24345) "a") (data (i32.const 24348) "a") (data (i32.const 24351) "a") (data (i32.const 24354) "a") (data (i32.const 24357) "a") (data (i32.const 24360) "a") (data (i32.const 24363) "a") (data (i32.const 24366) "a") (data (i32.const 24369) "a") (data (i32.const 24372) "a") (data (i32.const 24375) "a") (data (i32.const 24378) "a") (data (i32.const 24381) "a") (data (i32.const 24384) "a") (data (i32.const 24387) "a") (data (i32.const 24390) "a") (data (i32.const 24393) "a") (data (i32.const 24396) "a") (data (i32.const 24399) "a") (data (i32.const 24402) "a") (data (i32.const 24405) "a") (data (i32.const 24408) "a") (data (i32.const 24411) "a") (data (i32.const 24414) "a") (data (i32.const 24417) "a") (data (i32.const 24420) "a") (data (i32.const 24423) "a") (data (i32.const 24426) "a") (data (i32.const 24429) "a") (data (i32.const 24432) "a") (data (i32.const 24435) "a") (data (i32.const 24438) "a") (data (i32.const 24441) "a") (data (i32.const 24444) "a") (data (i32.const 24447) "a") (data (i32.const 24450) "a") (data (i32.const 24453) "a") (data (i32.const 24456) "a") (data (i32.const 24459) "a") (data (i32.const 24462) "a") (data (i32.const 24465) "a") (data (i32.const 24468) "a") (data (i32.const 24471) "a") (data (i32.const 24474) "a") (data (i32.const 24477) "a") (data (i32.const 24480) "a") (data (i32.const 24483) "a") (data (i32.const 24486) "a") (data (i32.const 24489) "a") (data (i32.const 24492) "a") (data (i32.const 24495) "a") (data (i32.const 24498) "a") (data (i32.const 24501) "a") (data (i32.const 24504) "a") (data (i32.const 24507) "a") (data (i32.const 24510) "a") (data (i32.const 24513) "a") (data (i32.const 24516) "a") (data (i32.const 24519) "a") (data (i32.const 24522) "a") (data (i32.const 24525) "a") (data (i32.const 24528) "a") (data (i32.const 24531) "a") (data (i32.const 24534) "a") (data (i32.const 24537) "a") (data (i32.const 24540) "a") (data (i32.const 24543) "a") (data (i32.const 24546) "a") (data (i32.const 24549) "a") (data (i32.const 24552) "a") (data (i32.const 24555) "a") (data (i32.const 24558) "a") (data (i32.const 24561) "a") (data (i32.const 24564) "a") (data (i32.const 24567) "a") (data (i32.const 24570) "a") (data (i32.const 24573) "a") (data (i32.const 24576) "a") (data (i32.const 24579) "a") (data (i32.const 24582) "a") (data (i32.const 24585) "a") (data (i32.const 24588) "a") (data (i32.const 24591) "a") (data (i32.const 24594) "a") (data (i32.const 24597) "a") (data (i32.const 24600) "a") (data (i32.const 24603) "a") (data (i32.const 24606) "a") (data (i32.const 24609) "a") (data (i32.const 24612) "a") (data (i32.const 24615) "a") (data (i32.const 24618) "a") (data (i32.const 24621) "a") (data (i32.const 24624) "a") (data (i32.const 24627) "a") (data (i32.const 24630) "a") (data (i32.const 24633) "a") (data (i32.const 24636) "a") (data (i32.const 24639) "a") (data (i32.const 24642) "a") (data (i32.const 24645) "a") (data (i32.const 24648) "a") (data (i32.const 24651) "a") (data (i32.const 24654) "a") (data (i32.const 24657) "a") (data (i32.const 24660) "a") (data (i32.const 24663) "a") (data (i32.const 24666) "a") (data (i32.const 24669) "a") (data (i32.const 24672) "a") (data (i32.const 24675) "a") (data (i32.const 24678) "a") (data (i32.const 24681) "a") (data (i32.const 24684) "a") (data (i32.const 24687) "a") (data (i32.const 24690) "a") (data (i32.const 24693) "a") (data (i32.const 24696) "a") (data (i32.const 24699) "a") (data (i32.const 24702) "a") (data (i32.const 24705) "a") (data (i32.const 24708) "a") (data (i32.const 24711) "a") (data (i32.const 24714) "a") (data (i32.const 24717) "a") (data (i32.const 24720) "a") (data (i32.const 24723) "a") (data (i32.const 24726) "a") (data (i32.const 24729) "a") (data (i32.const 24732) "a") (data (i32.const 24735) "a") (data (i32.const 24738) "a") (data (i32.const 24741) "a") (data (i32.const 24744) "a") (data (i32.const 24747) "a") (data (i32.const 24750) "a") (data (i32.const 24753) "a") (data (i32.const 24756) "a") (data (i32.const 24759) "a") (data (i32.const 24762) "a") (data (i32.const 24765) "a") (data (i32.const 24768) "a") (data (i32.const 24771) "a") (data (i32.const 24774) "a") (data (i32.const 24777) "a") (data (i32.const 24780) "a") (data (i32.const 24783) "a") (data (i32.const 24786) "a") (data (i32.const 24789) "a") (data (i32.const 24792) "a") (data (i32.const 24795) "a") (data (i32.const 24798) "a") (data (i32.const 24801) "a") (data (i32.const 24804) "a") (data (i32.const 24807) "a") (data (i32.const 24810) "a") (data (i32.const 24813) "a") (data (i32.const 24816) "a") (data (i32.const 24819) "a") (data (i32.const 24822) "a") (data (i32.const 24825) "a") (data (i32.const 24828) "a") (data (i32.const 24831) "a") (data (i32.const 24834) "a") (data (i32.const 24837) "a") (data (i32.const 24840) "a") (data (i32.const 24843) "a") (data (i32.const 24846) "a") (data (i32.const 24849) "a") (data (i32.const 24852) "a") (data (i32.const 24855) "a") (data (i32.const 24858) "a") (data (i32.const 24861) "a") (data (i32.const 24864) "a") (data (i32.const 24867) "a") (data (i32.const 24870) "a") (data (i32.const 24873) "a") (data (i32.const 24876) "a") (data (i32.const 24879) "a") (data (i32.const 24882) "a") (data (i32.const 24885) "a") (data (i32.const 24888) "a") (data (i32.const 24891) "a") (data (i32.const 24894) "a") (data (i32.const 24897) "a") (data (i32.const 24900) "a") (data (i32.const 24903) "a") (data (i32.const 24906) "a") (data (i32.const 24909) "a") (data (i32.const 24912) "a") (data (i32.const 24915) "a") (data (i32.const 24918) "a") (data (i32.const 24921) "a") (data (i32.const 24924) "a") (data (i32.const 24927) "a") (data (i32.const 24930) "a") (data (i32.const 24933) "a") (data (i32.const 24936) "a") (data (i32.const 24939) "a") (data (i32.const 24942) "a") (data (i32.const 24945) "a") (data (i32.const 24948) "a") (data (i32.const 24951) "a") (data (i32.const 24954) "a") (data (i32.const 24957) "a") (data (i32.const 24960) "a") (data (i32.const 24963) "a") (data (i32.const 24966) "a") (data (i32.const 24969) "a") (data (i32.const 24972) "a") (data (i32.const 24975) "a") (data (i32.const 24978) "a") (data (i32.const 24981) "a") (data (i32.const 24984) "a") (data (i32.const 24987) "a") (data (i32.const 24990) "a") (data (i32.const 24993) "a") (data (i32.const 24996) "a") (data (i32.const 24999) "a") (data (i32.const 25002) "a") (data (i32.const 25005) "a") (data (i32.const 25008) "a") (data (i32.const 25011) "a") (data (i32.const 25014) "a") (data (i32.const 25017) "a") (data (i32.const 25020) "a") (data (i32.const 25023) "a") (data (i32.const 25026) "a") (data (i32.const 25029) "a") (data (i32.const 25032) "a") (data (i32.const 25035) "a") (data (i32.const 25038) "a") (data (i32.const 25041) "a") (data (i32.const 25044) "a") (data (i32.const 25047) "a") (data (i32.const 25050) "a") (data (i32.const 25053) "a") (data (i32.const 25056) "a") (data (i32.const 25059) "a") (data (i32.const 25062) "a") (data (i32.const 25065) "a") (data (i32.const 25068) "a") (data (i32.const 25071) "a") (data (i32.const 25074) "a") (data (i32.const 25077) "a") (data (i32.const 25080) "a") (data (i32.const 25083) "a") (data (i32.const 25086) "a") (data (i32.const 25089) "a") (data (i32.const 25092) "a") (data (i32.const 25095) "a") (data (i32.const 25098) "a") (data (i32.const 25101) "a") (data (i32.const 25104) "a") (data (i32.const 25107) "a") (data (i32.const 25110) "a") (data (i32.const 25113) "a") (data (i32.const 25116) "a") (data (i32.const 25119) "a") (data (i32.const 25122) "a") (data (i32.const 25125) "a") (data (i32.const 25128) "a") (data (i32.const 25131) "a") (data (i32.const 25134) "a") (data (i32.const 25137) "a") (data (i32.const 25140) "a") (data (i32.const 25143) "a") (data (i32.const 25146) "a") (data (i32.const 25149) "a") (data (i32.const 25152) "a") (data (i32.const 25155) "a") (data (i32.const 25158) "a") (data (i32.const 25161) "a") (data (i32.const 25164) "a") (data (i32.const 25167) "a") (data (i32.const 25170) "a") (data (i32.const 25173) "a") (data (i32.const 25176) "a") (data (i32.const 25179) "a") (data (i32.const 25182) "a") (data (i32.const 25185) "a") (data (i32.const 25188) "a") (data (i32.const 25191) "a") (data (i32.const 25194) "a") (data (i32.const 25197) "a") (data (i32.const 25200) "a") (data (i32.const 25203) "a") (data (i32.const 25206) "a") (data (i32.const 25209) "a") (data (i32.const 25212) "a") (data (i32.const 25215) "a") (data (i32.const 25218) "a") (data (i32.const 25221) "a") (data (i32.const 25224) "a") (data (i32.const 25227) "a") (data (i32.const 25230) "a") (data (i32.const 25233) "a") (data (i32.const 25236) "a") (data (i32.const 25239) "a") (data (i32.const 25242) "a") (data (i32.const 25245) "a") (data (i32.const 25248) "a") (data (i32.const 25251) "a") (data (i32.const 25254) "a") (data (i32.const 25257) "a") (data (i32.const 25260) "a") (data (i32.const 25263) "a") (data (i32.const 25266) "a") (data (i32.const 25269) "a") (data (i32.const 25272) "a") (data (i32.const 25275) "a") (data (i32.const 25278) "a") (data (i32.const 25281) "a") (data (i32.const 25284) "a") (data (i32.const 25287) "a") (data (i32.const 25290) "a") (data (i32.const 25293) "a") (data (i32.const 25296) "a") (data (i32.const 25299) "a") (data (i32.const 25302) "a") (data (i32.const 25305) "a") (data (i32.const 25308) "a") (data (i32.const 25311) "a") (data (i32.const 25314) "a") (data (i32.const 25317) "a") (data (i32.const 25320) "a") (data (i32.const 25323) "a") (data (i32.const 25326) "a") (data (i32.const 25329) "a") (data (i32.const 25332) "a") (data (i32.const 25335) "a") (data (i32.const 25338) "a") (data (i32.const 25341) "a") (data (i32.const 25344) "a") (data (i32.const 25347) "a") (data (i32.const 25350) "a") (data (i32.const 25353) "a") (data (i32.const 25356) "a") (data (i32.const 25359) "a") (data (i32.const 25362) "a") (data (i32.const 25365) "a") (data (i32.const 25368) "a") (data (i32.const 25371) "a") (data (i32.const 25374) "a") (data (i32.const 25377) "a") (data (i32.const 25380) "a") (data (i32.const 25383) "a") (data (i32.const 25386) "a") (data (i32.const 25389) "a") (data (i32.const 25392) "a") (data (i32.const 25395) "a") (data (i32.const 25398) "a") (data (i32.const 25401) "a") (data (i32.const 25404) "a") (data (i32.const 25407) "a") (data (i32.const 25410) "a") (data (i32.const 25413) "a") (data (i32.const 25416) "a") (data (i32.const 25419) "a") (data (i32.const 25422) "a") (data (i32.const 25425) "a") (data (i32.const 25428) "a") (data (i32.const 25431) "a") (data (i32.const 25434) "a") (data (i32.const 25437) "a") (data (i32.const 25440) "a") (data (i32.const 25443) "a") (data (i32.const 25446) "a") (data (i32.const 25449) "a") (data (i32.const 25452) "a") (data (i32.const 25455) "a") (data (i32.const 25458) "a") (data (i32.const 25461) "a") (data (i32.const 25464) "a") (data (i32.const 25467) "a") (data (i32.const 25470) "a") (data (i32.const 25473) "a") (data (i32.const 25476) "a") (data (i32.const 25479) "a") (data (i32.const 25482) "a") (data (i32.const 25485) "a") (data (i32.const 25488) "a") (data (i32.const 25491) "a") (data (i32.const 25494) "a") (data (i32.const 25497) "a") (data (i32.const 25500) "a") (data (i32.const 25503) "a") (data (i32.const 25506) "a") (data (i32.const 25509) "a") (data (i32.const 25512) "a") (data (i32.const 25515) "a") (data (i32.const 25518) "a") (data (i32.const 25521) "a") (data (i32.const 25524) "a") (data (i32.const 25527) "a") (data (i32.const 25530) "a") (data (i32.const 25533) "a") (data (i32.const 25536) "a") (data (i32.const 25539) "a") (data (i32.const 25542) "a") (data (i32.const 25545) "a") (data (i32.const 25548) "a") (data (i32.const 25551) "a") (data (i32.const 25554) "a") (data (i32.const 25557) "a") (data (i32.const 25560) "a") (data (i32.const 25563) "a") (data (i32.const 25566) "a") (data (i32.const 25569) "a") (data (i32.const 25572) "a") (data (i32.const 25575) "a") (data (i32.const 25578) "a") (data (i32.const 25581) "a") (data (i32.const 25584) "a") (data (i32.const 25587) "a") (data (i32.const 25590) "a") (data (i32.const 25593) "a") (data (i32.const 25596) "a") (data (i32.const 25599) "a") (data (i32.const 25602) "a") (data (i32.const 25605) "a") (data (i32.const 25608) "a") (data (i32.const 25611) "a") (data (i32.const 25614) "a") (data (i32.const 25617) "a") (data (i32.const 25620) "a") (data (i32.const 25623) "a") (data (i32.const 25626) "a") (data (i32.const 25629) "a") (data (i32.const 25632) "a") (data (i32.const 25635) "a") (data (i32.const 25638) "a") (data (i32.const 25641) "a") (data (i32.const 25644) "a") (data (i32.const 25647) "a") (data (i32.const 25650) "a") (data (i32.const 25653) "a") (data (i32.const 25656) "a") (data (i32.const 25659) "a") (data (i32.const 25662) "a") (data (i32.const 25665) "a") (data (i32.const 25668) "a") (data (i32.const 25671) "a") (data (i32.const 25674) "a") (data (i32.const 25677) "a") (data (i32.const 25680) "a") (data (i32.const 25683) "a") (data (i32.const 25686) "a") (data (i32.const 25689) "a") (data (i32.const 25692) "a") (data (i32.const 25695) "a") (data (i32.const 25698) "a") (data (i32.const 25701) "a") (data (i32.const 25704) "a") (data (i32.const 25707) "a") (data (i32.const 25710) "a") (data (i32.const 25713) "a") (data (i32.const 25716) "a") (data (i32.const 25719) "a") (data (i32.const 25722) "a") (data (i32.const 25725) "a") (data (i32.const 25728) "a") (data (i32.const 25731) "a") (data (i32.const 25734) "a") (data (i32.const 25737) "a") (data (i32.const 25740) "a") (data (i32.const 25743) "a") (data (i32.const 25746) "a") (data (i32.const 25749) "a") (data (i32.const 25752) "a") (data (i32.const 25755) "a") (data (i32.const 25758) "a") (data (i32.const 25761) "a") (data (i32.const 25764) "a") (data (i32.const 25767) "a") (data (i32.const 25770) "a") (data (i32.const 25773) "a") (data (i32.const 25776) "a") (data (i32.const 25779) "a") (data (i32.const 25782) "a") (data (i32.const 25785) "a") (data (i32.const 25788) "a") (data (i32.const 25791) "a") (data (i32.const 25794) "a") (data (i32.const 25797) "a") (data (i32.const 25800) "a") (data (i32.const 25803) "a") (data (i32.const 25806) "a") (data (i32.const 25809) "a") (data (i32.const 25812) "a") (data (i32.const 25815) "a") (data (i32.const 25818) "a") (data (i32.const 25821) "a") (data (i32.const 25824) "a") (data (i32.const 25827) "a") (data (i32.const 25830) "a") (data (i32.const 25833) "a") (data (i32.const 25836) "a") (data (i32.const 25839) "a") (data (i32.const 25842) "a") (data (i32.const 25845) "a") (data (i32.const 25848) "a") (data (i32.const 25851) "a") (data (i32.const 25854) "a") (data (i32.const 25857) "a") (data (i32.const 25860) "a") (data (i32.const 25863) "a") (data (i32.const 25866) "a") (data (i32.const 25869) "a") (data (i32.const 25872) "a") (data (i32.const 25875) "a") (data (i32.const 25878) "a") (data (i32.const 25881) "a") (data (i32.const 25884) "a") (data (i32.const 25887) "a") (data (i32.const 25890) "a") (data (i32.const 25893) "a") (data (i32.const 25896) "a") (data (i32.const 25899) "a") (data (i32.const 25902) "a") (data (i32.const 25905) "a") (data (i32.const 25908) "a") (data (i32.const 25911) "a") (data (i32.const 25914) "a") (data (i32.const 25917) "a") (data (i32.const 25920) "a") (data (i32.const 25923) "a") (data (i32.const 25926) "a") (data (i32.const 25929) "a") (data (i32.const 25932) "a") (data (i32.const 25935) "a") (data (i32.const 25938) "a") (data (i32.const 25941) "a") (data (i32.const 25944) "a") (data (i32.const 25947) "a") (data (i32.const 25950) "a") (data (i32.const 25953) "a") (data (i32.const 25956) "a") (data (i32.const 25959) "a") (data (i32.const 25962) "a") (data (i32.const 25965) "a") (data (i32.const 25968) "a") (data (i32.const 25971) "a") (data (i32.const 25974) "a") (data (i32.const 25977) "a") (data (i32.const 25980) "a") (data (i32.const 25983) "a") (data (i32.const 25986) "a") (data (i32.const 25989) "a") (data (i32.const 25992) "a") (data (i32.const 25995) "a") (data (i32.const 25998) "a") (data (i32.const 26001) "a") (data (i32.const 26004) "a") (data (i32.const 26007) "a") (data (i32.const 26010) "a") (data (i32.const 26013) "a") (data (i32.const 26016) "a") (data (i32.const 26019) "a") (data (i32.const 26022) "a") (data (i32.const 26025) "a") (data (i32.const 26028) "a") (data (i32.const 26031) "a") (data (i32.const 26034) "a") (data (i32.const 26037) "a") (data (i32.const 26040) "a") (data (i32.const 26043) "a") (data (i32.const 26046) "a") (data (i32.const 26049) "a") (data (i32.const 26052) "a") (data (i32.const 26055) "a") (data (i32.const 26058) "a") (data (i32.const 26061) "a") (data (i32.const 26064) "a") (data (i32.const 26067) "a") (data (i32.const 26070) "a") (data (i32.const 26073) "a") (data (i32.const 26076) "a") (data (i32.const 26079) "a") (data (i32.const 26082) "a") (data (i32.const 26085) "a") (data (i32.const 26088) "a") (data (i32.const 26091) "a") (data (i32.const 26094) "a") (data (i32.const 26097) "a") (data (i32.const 26100) "a") (data (i32.const 26103) "a") (data (i32.const 26106) "a") (data (i32.const 26109) "a") (data (i32.const 26112) "a") (data (i32.const 26115) "a") (data (i32.const 26118) "a") (data (i32.const 26121) "a") (data (i32.const 26124) "a") (data (i32.const 26127) "a") (data (i32.const 26130) "a") (data (i32.const 26133) "a") (data (i32.const 26136) "a") (data (i32.const 26139) "a") (data (i32.const 26142) "a") (data (i32.const 26145) "a") (data (i32.const 26148) "a") (data (i32.const 26151) "a") (data (i32.const 26154) "a") (data (i32.const 26157) "a") (data (i32.const 26160) "a") (data (i32.const 26163) "a") (data (i32.const 26166) "a") (data (i32.const 26169) "a") (data (i32.const 26172) "a") (data (i32.const 26175) "a") (data (i32.const 26178) "a") (data (i32.const 26181) "a") (data (i32.const 26184) "a") (data (i32.const 26187) "a") (data (i32.const 26190) "a") (data (i32.const 26193) "a") (data (i32.const 26196) "a") (data (i32.const 26199) "a") (data (i32.const 26202) "a") (data (i32.const 26205) "a") (data (i32.const 26208) "a") (data (i32.const 26211) "a") (data (i32.const 26214) "a") (data (i32.const 26217) "a") (data (i32.const 26220) "a") (data (i32.const 26223) "a") (data (i32.const 26226) "a") (data (i32.const 26229) "a") (data (i32.const 26232) "a") (data (i32.const 26235) "a") (data (i32.const 26238) "a") (data (i32.const 26241) "a") (data (i32.const 26244) "a") (data (i32.const 26247) "a") (data (i32.const 26250) "a") (data (i32.const 26253) "a") (data (i32.const 26256) "a") (data (i32.const 26259) "a") (data (i32.const 26262) "a") (data (i32.const 26265) "a") (data (i32.const 26268) "a") (data (i32.const 26271) "a") (data (i32.const 26274) "a") (data (i32.const 26277) "a") (data (i32.const 26280) "a") (data (i32.const 26283) "a") (data (i32.const 26286) "a") (data (i32.const 26289) "a") (data (i32.const 26292) "a") (data (i32.const 26295) "a") (data (i32.const 26298) "a") (data (i32.const 26301) "a") (data (i32.const 26304) "a") (data (i32.const 26307) "a") (data (i32.const 26310) "a") (data (i32.const 26313) "a") (data (i32.const 26316) "a") (data (i32.const 26319) "a") (data (i32.const 26322) "a") (data (i32.const 26325) "a") (data (i32.const 26328) "a") (data (i32.const 26331) "a") (data (i32.const 26334) "a") (data (i32.const 26337) "a") (data (i32.const 26340) "a") (data (i32.const 26343) "a") (data (i32.const 26346) "a") (data (i32.const 26349) "a") (data (i32.const 26352) "a") (data (i32.const 26355) "a") (data (i32.const 26358) "a") (data (i32.const 26361) "a") (data (i32.const 26364) "a") (data (i32.const 26367) "a") (data (i32.const 26370) "a") (data (i32.const 26373) "a") (data (i32.const 26376) "a") (data (i32.const 26379) "a") (data (i32.const 26382) "a") (data (i32.const 26385) "a") (data (i32.const 26388) "a") (data (i32.const 26391) "a") (data (i32.const 26394) "a") (data (i32.const 26397) "a") (data (i32.const 26400) "a") (data (i32.const 26403) "a") (data (i32.const 26406) "a") (data (i32.const 26409) "a") (data (i32.const 26412) "a") (data (i32.const 26415) "a") (data (i32.const 26418) "a") (data (i32.const 26421) "a") (data (i32.const 26424) "a") (data (i32.const 26427) "a") (data (i32.const 26430) "a") (data (i32.const 26433) "a") (data (i32.const 26436) "a") (data (i32.const 26439) "a") (data (i32.const 26442) "a") (data (i32.const 26445) "a") (data (i32.const 26448) "a") (data (i32.const 26451) "a") (data (i32.const 26454) "a") (data (i32.const 26457) "a") (data (i32.const 26460) "a") (data (i32.const 26463) "a") (data (i32.const 26466) "a") (data (i32.const 26469) "a") (data (i32.const 26472) "a") (data (i32.const 26475) "a") (data (i32.const 26478) "a") (data (i32.const 26481) "a") (data (i32.const 26484) "a") (data (i32.const 26487) "a") (data (i32.const 26490) "a") (data (i32.const 26493) "a") (data (i32.const 26496) "a") (data (i32.const 26499) "a") (data (i32.const 26502) "a") (data (i32.const 26505) "a") (data (i32.const 26508) "a") (data (i32.const 26511) "a") (data (i32.const 26514) "a") (data (i32.const 26517) "a") (data (i32.const 26520) "a") (data (i32.const 26523) "a") (data (i32.const 26526) "a") (data (i32.const 26529) "a") (data (i32.const 26532) "a") (data (i32.const 26535) "a") (data (i32.const 26538) "a") (data (i32.const 26541) "a") (data (i32.const 26544) "a") (data (i32.const 26547) "a") (data (i32.const 26550) "a") (data (i32.const 26553) "a") (data (i32.const 26556) "a") (data (i32.const 26559) "a") (data (i32.const 26562) "a") (data (i32.const 26565) "a") (data (i32.const 26568) "a") (data (i32.const 26571) "a") (data (i32.const 26574) "a") (data (i32.const 26577) "a") (data (i32.const 26580) "a") (data (i32.const 26583) "a") (data (i32.const 26586) "a") (data (i32.const 26589) "a") (data (i32.const 26592) "a") (data (i32.const 26595) "a") (data (i32.const 26598) "a") (data (i32.const 26601) "a") (data (i32.const 26604) "a") (data (i32.const 26607) "a") (data (i32.const 26610) "a") (data (i32.const 26613) "a") (data (i32.const 26616) "a") (data (i32.const 26619) "a") (data (i32.const 26622) "a") (data (i32.const 26625) "a") (data (i32.const 26628) "a") (data (i32.const 26631) "a") (data (i32.const 26634) "a") (data (i32.const 26637) "a") (data (i32.const 26640) "a") (data (i32.const 26643) "a") (data (i32.const 26646) "a") (data (i32.const 26649) "a") (data (i32.const 26652) "a") (data (i32.const 26655) "a") (data (i32.const 26658) "a") (data (i32.const 26661) "a") (data (i32.const 26664) "a") (data (i32.const 26667) "a") (data (i32.const 26670) "a") (data (i32.const 26673) "a") (data (i32.const 26676) "a") (data (i32.const 26679) "a") (data (i32.const 26682) "a") (data (i32.const 26685) "a") (data (i32.const 26688) "a") (data (i32.const 26691) "a") (data (i32.const 26694) "a") (data (i32.const 26697) "a") (data (i32.const 26700) "a") (data (i32.const 26703) "a") (data (i32.const 26706) "a") (data (i32.const 26709) "a") (data (i32.const 26712) "a") (data (i32.const 26715) "a") (data (i32.const 26718) "a") (data (i32.const 26721) "a") (data (i32.const 26724) "a") (data (i32.const 26727) "a") (data (i32.const 26730) "a") (data (i32.const 26733) "a") (data (i32.const 26736) "a") (data (i32.const 26739) "a") (data (i32.const 26742) "a") (data (i32.const 26745) "a") (data (i32.const 26748) "a") (data (i32.const 26751) "a") (data (i32.const 26754) "a") (data (i32.const 26757) "a") (data (i32.const 26760) "a") (data (i32.const 26763) "a") (data (i32.const 26766) "a") (data (i32.const 26769) "a") (data (i32.const 26772) "a") (data (i32.const 26775) "a") (data (i32.const 26778) "a") (data (i32.const 26781) "a") (data (i32.const 26784) "a") (data (i32.const 26787) "a") (data (i32.const 26790) "a") (data (i32.const 26793) "a") (data (i32.const 26796) "a") (data (i32.const 26799) "a") (data (i32.const 26802) "a") (data (i32.const 26805) "a") (data (i32.const 26808) "a") (data (i32.const 26811) "a") (data (i32.const 26814) "a") (data (i32.const 26817) "a") (data (i32.const 26820) "a") (data (i32.const 26823) "a") (data (i32.const 26826) "a") (data (i32.const 26829) "a") (data (i32.const 26832) "a") (data (i32.const 26835) "a") (data (i32.const 26838) "a") (data (i32.const 26841) "a") (data (i32.const 26844) "a") (data (i32.const 26847) "a") (data (i32.const 26850) "a") (data (i32.const 26853) "a") (data (i32.const 26856) "a") (data (i32.const 26859) "a") (data (i32.const 26862) "a") (data (i32.const 26865) "a") (data (i32.const 26868) "a") (data (i32.const 26871) "a") (data (i32.const 26874) "a") (data (i32.const 26877) "a") (data (i32.const 26880) "a") (data (i32.const 26883) "a") (data (i32.const 26886) "a") (data (i32.const 26889) "a") (data (i32.const 26892) "a") (data (i32.const 26895) "a") (data (i32.const 26898) "a") (data (i32.const 26901) "a") (data (i32.const 26904) "a") (data (i32.const 26907) "a") (data (i32.const 26910) "a") (data (i32.const 26913) "a") (data (i32.const 26916) "a") (data (i32.const 26919) "a") (data (i32.const 26922) "a") (data (i32.const 26925) "a") (data (i32.const 26928) "a") (data (i32.const 26931) "a") (data (i32.const 26934) "a") (data (i32.const 26937) "a") (data (i32.const 26940) "a") (data (i32.const 26943) "a") (data (i32.const 26946) "a") (data (i32.const 26949) "a") (data (i32.const 26952) "a") (data (i32.const 26955) "a") (data (i32.const 26958) "a") (data (i32.const 26961) "a") (data (i32.const 26964) "a") (data (i32.const 26967) "a") (data (i32.const 26970) "a") (data (i32.const 26973) "a") (data (i32.const 26976) "a") (data (i32.const 26979) "a") (data (i32.const 26982) "a") (data (i32.const 26985) "a") (data (i32.const 26988) "a") (data (i32.const 26991) "a") (data (i32.const 26994) "a") (data (i32.const 26997) "a") (data (i32.const 27000) "a") (data (i32.const 27003) "a") (data (i32.const 27006) "a") (data (i32.const 27009) "a") (data (i32.const 27012) "a") (data (i32.const 27015) "a") (data (i32.const 27018) "a") (data (i32.const 27021) "a") (data (i32.const 27024) "a") (data (i32.const 27027) "a") (data (i32.const 27030) "a") (data (i32.const 27033) "a") (data (i32.const 27036) "a") (data (i32.const 27039) "a") (data (i32.const 27042) "a") (data (i32.const 27045) "a") (data (i32.const 27048) "a") (data (i32.const 27051) "a") (data (i32.const 27054) "a") (data (i32.const 27057) "a") (data (i32.const 27060) "a") (data (i32.const 27063) "a") (data (i32.const 27066) "a") (data (i32.const 27069) "a") (data (i32.const 27072) "a") (data (i32.const 27075) "a") (data (i32.const 27078) "a") (data (i32.const 27081) "a") (data (i32.const 27084) "a") (data (i32.const 27087) "a") (data (i32.const 27090) "a") (data (i32.const 27093) "a") (data (i32.const 27096) "a") (data (i32.const 27099) "a") (data (i32.const 27102) "a") (data (i32.const 27105) "a") (data (i32.const 27108) "a") (data (i32.const 27111) "a") (data (i32.const 27114) "a") (data (i32.const 27117) "a") (data (i32.const 27120) "a") (data (i32.const 27123) "a") (data (i32.const 27126) "a") (data (i32.const 27129) "a") (data (i32.const 27132) "a") (data (i32.const 27135) "a") (data (i32.const 27138) "a") (data (i32.const 27141) "a") (data (i32.const 27144) "a") (data (i32.const 27147) "a") (data (i32.const 27150) "a") (data (i32.const 27153) "a") (data (i32.const 27156) "a") (data (i32.const 27159) "a") (data (i32.const 27162) "a") (data (i32.const 27165) "a") (data (i32.const 27168) "a") (data (i32.const 27171) "a") (data (i32.const 27174) "a") (data (i32.const 27177) "a") (data (i32.const 27180) "a") (data (i32.const 27183) "a") (data (i32.const 27186) "a") (data (i32.const 27189) "a") (data (i32.const 27192) "a") (data (i32.const 27195) "a") (data (i32.const 27198) "a") (data (i32.const 27201) "a") (data (i32.const 27204) "a") (data (i32.const 27207) "a") (data (i32.const 27210) "a") (data (i32.const 27213) "a") (data (i32.const 27216) "a") (data (i32.const 27219) "a") (data (i32.const 27222) "a") (data (i32.const 27225) "a") (data (i32.const 27228) "a") (data (i32.const 27231) "a") (data (i32.const 27234) "a") (data (i32.const 27237) "a") (data (i32.const 27240) "a") (data (i32.const 27243) "a") (data (i32.const 27246) "a") (data (i32.const 27249) "a") (data (i32.const 27252) "a") (data (i32.const 27255) "a") (data (i32.const 27258) "a") (data (i32.const 27261) "a") (data (i32.const 27264) "a") (data (i32.const 27267) "a") (data (i32.const 27270) "a") (data (i32.const 27273) "a") (data (i32.const 27276) "a") (data (i32.const 27279) "a") (data (i32.const 27282) "a") (data (i32.const 27285) "a") (data (i32.const 27288) "a") (data (i32.const 27291) "a") (data (i32.const 27294) "a") (data (i32.const 27297) "a") (data (i32.const 27300) "a") (data (i32.const 27303) "a") (data (i32.const 27306) "a") (data (i32.const 27309) "a") (data (i32.const 27312) "a") (data (i32.const 27315) "a") (data (i32.const 27318) "a") (data (i32.const 27321) "a") (data (i32.const 27324) "a") (data (i32.const 27327) "a") (data (i32.const 27330) "a") (data (i32.const 27333) "a") (data (i32.const 27336) "a") (data (i32.const 27339) "a") (data (i32.const 27342) "a") (data (i32.const 27345) "a") (data (i32.const 27348) "a") (data (i32.const 27351) "a") (data (i32.const 27354) "a") (data (i32.const 27357) "a") (data (i32.const 27360) "a") (data (i32.const 27363) "a") (data (i32.const 27366) "a") (data (i32.const 27369) "a") (data (i32.const 27372) "a") (data (i32.const 27375) "a") (data (i32.const 27378) "a") (data (i32.const 27381) "a") (data (i32.const 27384) "a") (data (i32.const 27387) "a") (data (i32.const 27390) "a") (data (i32.const 27393) "a") (data (i32.const 27396) "a") (data (i32.const 27399) "a") (data (i32.const 27402) "a") (data (i32.const 27405) "a") (data (i32.const 27408) "a") (data (i32.const 27411) "a") (data (i32.const 27414) "a") (data (i32.const 27417) "a") (data (i32.const 27420) "a") (data (i32.const 27423) "a") (data (i32.const 27426) "a") (data (i32.const 27429) "a") (data (i32.const 27432) "a") (data (i32.const 27435) "a") (data (i32.const 27438) "a") (data (i32.const 27441) "a") (data (i32.const 27444) "a") (data (i32.const 27447) "a") (data (i32.const 27450) "a") (data (i32.const 27453) "a") (data (i32.const 27456) "a") (data (i32.const 27459) "a") (data (i32.const 27462) "a") (data (i32.const 27465) "a") (data (i32.const 27468) "a") (data (i32.const 27471) "a") (data (i32.const 27474) "a") (data (i32.const 27477) "a") (data (i32.const 27480) "a") (data (i32.const 27483) "a") (data (i32.const 27486) "a") (data (i32.const 27489) "a") (data (i32.const 27492) "a") (data (i32.const 27495) "a") (data (i32.const 27498) "a") (data (i32.const 27501) "a") (data (i32.const 27504) "a") (data (i32.const 27507) "a") (data (i32.const 27510) "a") (data (i32.const 27513) "a") (data (i32.const 27516) "a") (data (i32.const 27519) "a") (data (i32.const 27522) "a") (data (i32.const 27525) "a") (data (i32.const 27528) "a") (data (i32.const 27531) "a") (data (i32.const 27534) "a") (data (i32.const 27537) "a") (data (i32.const 27540) "a") (data (i32.const 27543) "a") (data (i32.const 27546) "a") (data (i32.const 27549) "a") (data (i32.const 27552) "a") (data (i32.const 27555) "a") (data (i32.const 27558) "a") (data (i32.const 27561) "a") (data (i32.const 27564) "a") (data (i32.const 27567) "a") (data (i32.const 27570) "a") (data (i32.const 27573) "a") (data (i32.const 27576) "a") (data (i32.const 27579) "a") (data (i32.const 27582) "a") (data (i32.const 27585) "a") (data (i32.const 27588) "a") (data (i32.const 27591) "a") (data (i32.const 27594) "a") (data (i32.const 27597) "a") (data (i32.const 27600) "a") (data (i32.const 27603) "a") (data (i32.const 27606) "a") (data (i32.const 27609) "a") (data (i32.const 27612) "a") (data (i32.const 27615) "a") (data (i32.const 27618) "a") (data (i32.const 27621) "a") (data (i32.const 27624) "a") (data (i32.const 27627) "a") (data (i32.const 27630) "a") (data (i32.const 27633) "a") (data (i32.const 27636) "a") (data (i32.const 27639) "a") (data (i32.const 27642) "a") (data (i32.const 27645) "a") (data (i32.const 27648) "a") (data (i32.const 27651) "a") (data (i32.const 27654) "a") (data (i32.const 27657) "a") (data (i32.const 27660) "a") (data (i32.const 27663) "a") (data (i32.const 27666) "a") (data (i32.const 27669) "a") (data (i32.const 27672) "a") (data (i32.const 27675) "a") (data (i32.const 27678) "a") (data (i32.const 27681) "a") (data (i32.const 27684) "a") (data (i32.const 27687) "a") (data (i32.const 27690) "a") (data (i32.const 27693) "a") (data (i32.const 27696) "a") (data (i32.const 27699) "a") (data (i32.const 27702) "a") (data (i32.const 27705) "a") (data (i32.const 27708) "a") (data (i32.const 27711) "a") (data (i32.const 27714) "a") (data (i32.const 27717) "a") (data (i32.const 27720) "a") (data (i32.const 27723) "a") (data (i32.const 27726) "a") (data (i32.const 27729) "a") (data (i32.const 27732) "a") (data (i32.const 27735) "a") (data (i32.const 27738) "a") (data (i32.const 27741) "a") (data (i32.const 27744) "a") (data (i32.const 27747) "a") (data (i32.const 27750) "a") (data (i32.const 27753) "a") (data (i32.const 27756) "a") (data (i32.const 27759) "a") (data (i32.const 27762) "a") (data (i32.const 27765) "a") (data (i32.const 27768) "a") (data (i32.const 27771) "a") (data (i32.const 27774) "a") (data (i32.const 27777) "a") (data (i32.const 27780) "a") (data (i32.const 27783) "a") (data (i32.const 27786) "a") (data (i32.const 27789) "a") (data (i32.const 27792) "a") (data (i32.const 27795) "a") (data (i32.const 27798) "a") (data (i32.const 27801) "a") (data (i32.const 27804) "a") (data (i32.const 27807) "a") (data (i32.const 27810) "a") (data (i32.const 27813) "a") (data (i32.const 27816) "a") (data (i32.const 27819) "a") (data (i32.const 27822) "a") (data (i32.const 27825) "a") (data (i32.const 27828) "a") (data (i32.const 27831) "a") (data (i32.const 27834) "a") (data (i32.const 27837) "a") (data (i32.const 27840) "a") (data (i32.const 27843) "a") (data (i32.const 27846) "a") (data (i32.const 27849) "a") (data (i32.const 27852) "a") (data (i32.const 27855) "a") (data (i32.const 27858) "a") (data (i32.const 27861) "a") (data (i32.const 27864) "a") (data (i32.const 27867) "a") (data (i32.const 27870) "a") (data (i32.const 27873) "a") (data (i32.const 27876) "a") (data (i32.const 27879) "a") (data (i32.const 27882) "a") (data (i32.const 27885) "a") (data (i32.const 27888) "a") (data (i32.const 27891) "a") (data (i32.const 27894) "a") (data (i32.const 27897) "a") (data (i32.const 27900) "a") (data (i32.const 27903) "a") (data (i32.const 27906) "a") (data (i32.const 27909) "a") (data (i32.const 27912) "a") (data (i32.const 27915) "a") (data (i32.const 27918) "a") (data (i32.const 27921) "a") (data (i32.const 27924) "a") (data (i32.const 27927) "a") (data (i32.const 27930) "a") (data (i32.const 27933) "a") (data (i32.const 27936) "a") (data (i32.const 27939) "a") (data (i32.const 27942) "a") (data (i32.const 27945) "a") (data (i32.const 27948) "a") (data (i32.const 27951) "a") (data (i32.const 27954) "a") (data (i32.const 27957) "a") (data (i32.const 27960) "a") (data (i32.const 27963) "a") (data (i32.const 27966) "a") (data (i32.const 27969) "a") (data (i32.const 27972) "a") (data (i32.const 27975) "a") (data (i32.const 27978) "a") (data (i32.const 27981) "a") (data (i32.const 27984) "a") (data (i32.const 27987) "a") (data (i32.const 27990) "a") (data (i32.const 27993) "a") (data (i32.const 27996) "a") (data (i32.const 27999) "a") (data (i32.const 28002) "a") (data (i32.const 28005) "a") (data (i32.const 28008) "a") (data (i32.const 28011) "a") (data (i32.const 28014) "a") (data (i32.const 28017) "a") (data (i32.const 28020) "a") (data (i32.const 28023) "a") (data (i32.const 28026) "a") (data (i32.const 28029) "a") (data (i32.const 28032) "a") (data (i32.const 28035) "a") (data (i32.const 28038) "a") (data (i32.const 28041) "a") (data (i32.const 28044) "a") (data (i32.const 28047) "a") (data (i32.const 28050) "a") (data (i32.const 28053) "a") (data (i32.const 28056) "a") (data (i32.const 28059) "a") (data (i32.const 28062) "a") (data (i32.const 28065) "a") (data (i32.const 28068) "a") (data (i32.const 28071) "a") (data (i32.const 28074) "a") (data (i32.const 28077) "a") (data (i32.const 28080) "a") (data (i32.const 28083) "a") (data (i32.const 28086) "a") (data (i32.const 28089) "a") (data (i32.const 28092) "a") (data (i32.const 28095) "a") (data (i32.const 28098) "a") (data (i32.const 28101) "a") (data (i32.const 28104) "a") (data (i32.const 28107) "a") (data (i32.const 28110) "a") (data (i32.const 28113) "a") (data (i32.const 28116) "a") (data (i32.const 28119) "a") (data (i32.const 28122) "a") (data (i32.const 28125) "a") (data (i32.const 28128) "a") (data (i32.const 28131) "a") (data (i32.const 28134) "a") (data (i32.const 28137) "a") (data (i32.const 28140) "a") (data (i32.const 28143) "a") (data (i32.const 28146) "a") (data (i32.const 28149) "a") (data (i32.const 28152) "a") (data (i32.const 28155) "a") (data (i32.const 28158) "a") (data (i32.const 28161) "a") (data (i32.const 28164) "a") (data (i32.const 28167) "a") (data (i32.const 28170) "a") (data (i32.const 28173) "a") (data (i32.const 28176) "a") (data (i32.const 28179) "a") (data (i32.const 28182) "a") (data (i32.const 28185) "a") (data (i32.const 28188) "a") (data (i32.const 28191) "a") (data (i32.const 28194) "a") (data (i32.const 28197) "a") (data (i32.const 28200) "a") (data (i32.const 28203) "a") (data (i32.const 28206) "a") (data (i32.const 28209) "a") (data (i32.const 28212) "a") (data (i32.const 28215) "a") (data (i32.const 28218) "a") (data (i32.const 28221) "a") (data (i32.const 28224) "a") (data (i32.const 28227) "a") (data (i32.const 28230) "a") (data (i32.const 28233) "a") (data (i32.const 28236) "a") (data (i32.const 28239) "a") (data (i32.const 28242) "a") (data (i32.const 28245) "a") (data (i32.const 28248) "a") (data (i32.const 28251) "a") (data (i32.const 28254) "a") (data (i32.const 28257) "a") (data (i32.const 28260) "a") (data (i32.const 28263) "a") (data (i32.const 28266) "a") (data (i32.const 28269) "a") (data (i32.const 28272) "a") (data (i32.const 28275) "a") (data (i32.const 28278) "a") (data (i32.const 28281) "a") (data (i32.const 28284) "a") (data (i32.const 28287) "a") (data (i32.const 28290) "a") (data (i32.const 28293) "a") (data (i32.const 28296) "a") (data (i32.const 28299) "a") (data (i32.const 28302) "a") (data (i32.const 28305) "a") (data (i32.const 28308) "a") (data (i32.const 28311) "a") (data (i32.const 28314) "a") (data (i32.const 28317) "a") (data (i32.const 28320) "a") (data (i32.const 28323) "a") (data (i32.const 28326) "a") (data (i32.const 28329) "a") (data (i32.const 28332) "a") (data (i32.const 28335) "a") (data (i32.const 28338) "a") (data (i32.const 28341) "a") (data (i32.const 28344) "a") (data (i32.const 28347) "a") (data (i32.const 28350) "a") (data (i32.const 28353) "a") (data (i32.const 28356) "a") (data (i32.const 28359) "a") (data (i32.const 28362) "a") (data (i32.const 28365) "a") (data (i32.const 28368) "a") (data (i32.const 28371) "a") (data (i32.const 28374) "a") (data (i32.const 28377) "a") (data (i32.const 28380) "a") (data (i32.const 28383) "a") (data (i32.const 28386) "a") (data (i32.const 28389) "a") (data (i32.const 28392) "a") (data (i32.const 28395) "a") (data (i32.const 28398) "a") (data (i32.const 28401) "a") (data (i32.const 28404) "a") (data (i32.const 28407) "a") (data (i32.const 28410) "a") (data (i32.const 28413) "a") (data (i32.const 28416) "a") (data (i32.const 28419) "a") (data (i32.const 28422) "a") (data (i32.const 28425) "a") (data (i32.const 28428) "a") (data (i32.const 28431) "a") (data (i32.const 28434) "a") (data (i32.const 28437) "a") (data (i32.const 28440) "a") (data (i32.const 28443) "a") (data (i32.const 28446) "a") (data (i32.const 28449) "a") (data (i32.const 28452) "a") (data (i32.const 28455) "a") (data (i32.const 28458) "a") (data (i32.const 28461) "a") (data (i32.const 28464) "a") (data (i32.const 28467) "a") (data (i32.const 28470) "a") (data (i32.const 28473) "a") (data (i32.const 28476) "a") (data (i32.const 28479) "a") (data (i32.const 28482) "a") (data (i32.const 28485) "a") (data (i32.const 28488) "a") (data (i32.const 28491) "a") (data (i32.const 28494) "a") (data (i32.const 28497) "a") (data (i32.const 28500) "a") (data (i32.const 28503) "a") (data (i32.const 28506) "a") (data (i32.const 28509) "a") (data (i32.const 28512) "a") (data (i32.const 28515) "a") (data (i32.const 28518) "a") (data (i32.const 28521) "a") (data (i32.const 28524) "a") (data (i32.const 28527) "a") (data (i32.const 28530) "a") (data (i32.const 28533) "a") (data (i32.const 28536) "a") (data (i32.const 28539) "a") (data (i32.const 28542) "a") (data (i32.const 28545) "a") (data (i32.const 28548) "a") (data (i32.const 28551) "a") (data (i32.const 28554) "a") (data (i32.const 28557) "a") (data (i32.const 28560) "a") (data (i32.const 28563) "a") (data (i32.const 28566) "a") (data (i32.const 28569) "a") (data (i32.const 28572) "a") (data (i32.const 28575) "a") (data (i32.const 28578) "a") (data (i32.const 28581) "a") (data (i32.const 28584) "a") (data (i32.const 28587) "a") (data (i32.const 28590) "a") (data (i32.const 28593) "a") (data (i32.const 28596) "a") (data (i32.const 28599) "a") (data (i32.const 28602) "a") (data (i32.const 28605) "a") (data (i32.const 28608) "a") (data (i32.const 28611) "a") (data (i32.const 28614) "a") (data (i32.const 28617) "a") (data (i32.const 28620) "a") (data (i32.const 28623) "a") (data (i32.const 28626) "a") (data (i32.const 28629) "a") (data (i32.const 28632) "a") (data (i32.const 28635) "a") (data (i32.const 28638) "a") (data (i32.const 28641) "a") (data (i32.const 28644) "a") (data (i32.const 28647) "a") (data (i32.const 28650) "a") (data (i32.const 28653) "a") (data (i32.const 28656) "a") (data (i32.const 28659) "a") (data (i32.const 28662) "a") (data (i32.const 28665) "a") (data (i32.const 28668) "a") (data (i32.const 28671) "a") (data (i32.const 28674) "a") (data (i32.const 28677) "a") (data (i32.const 28680) "a") (data (i32.const 28683) "a") (data (i32.const 28686) "a") (data (i32.const 28689) "a") (data (i32.const 28692) "a") (data (i32.const 28695) "a") (data (i32.const 28698) "a") (data (i32.const 28701) "a") (data (i32.const 28704) "a") (data (i32.const 28707) "a") (data (i32.const 28710) "a") (data (i32.const 28713) "a") (data (i32.const 28716) "a") (data (i32.const 28719) "a") (data (i32.const 28722) "a") (data (i32.const 28725) "a") (data (i32.const 28728) "a") (data (i32.const 28731) "a") (data (i32.const 28734) "a") (data (i32.const 28737) "a") (data (i32.const 28740) "a") (data (i32.const 28743) "a") (data (i32.const 28746) "a") (data (i32.const 28749) "a") (data (i32.const 28752) "a") (data (i32.const 28755) "a") (data (i32.const 28758) "a") (data (i32.const 28761) "a") (data (i32.const 28764) "a") (data (i32.const 28767) "a") (data (i32.const 28770) "a") (data (i32.const 28773) "a") (data (i32.const 28776) "a") (data (i32.const 28779) "a") (data (i32.const 28782) "a") (data (i32.const 28785) "a") (data (i32.const 28788) "a") (data (i32.const 28791) "a") (data (i32.const 28794) "a") (data (i32.const 28797) "a") (data (i32.const 28800) "a") (data (i32.const 28803) "a") (data (i32.const 28806) "a") (data (i32.const 28809) "a") (data (i32.const 28812) "a") (data (i32.const 28815) "a") (data (i32.const 28818) "a") (data (i32.const 28821) "a") (data (i32.const 28824) "a") (data (i32.const 28827) "a") (data (i32.const 28830) "a") (data (i32.const 28833) "a") (data (i32.const 28836) "a") (data (i32.const 28839) "a") (data (i32.const 28842) "a") (data (i32.const 28845) "a") (data (i32.const 28848) "a") (data (i32.const 28851) "a") (data (i32.const 28854) "a") (data (i32.const 28857) "a") (data (i32.const 28860) "a") (data (i32.const 28863) "a") (data (i32.const 28866) "a") (data (i32.const 28869) "a") (data (i32.const 28872) "a") (data (i32.const 28875) "a") (data (i32.const 28878) "a") (data (i32.const 28881) "a") (data (i32.const 28884) "a") (data (i32.const 28887) "a") (data (i32.const 28890) "a") (data (i32.const 28893) "a") (data (i32.const 28896) "a") (data (i32.const 28899) "a") (data (i32.const 28902) "a") (data (i32.const 28905) "a") (data (i32.const 28908) "a") (data (i32.const 28911) "a") (data (i32.const 28914) "a") (data (i32.const 28917) "a") (data (i32.const 28920) "a") (data (i32.const 28923) "a") (data (i32.const 28926) "a") (data (i32.const 28929) "a") (data (i32.const 28932) "a") (data (i32.const 28935) "a") (data (i32.const 28938) "a") (data (i32.const 28941) "a") (data (i32.const 28944) "a") (data (i32.const 28947) "a") (data (i32.const 28950) "a") (data (i32.const 28953) "a") (data (i32.const 28956) "a") (data (i32.const 28959) "a") (data (i32.const 28962) "a") (data (i32.const 28965) "a") (data (i32.const 28968) "a") (data (i32.const 28971) "a") (data (i32.const 28974) "a") (data (i32.const 28977) "a") (data (i32.const 28980) "a") (data (i32.const 28983) "a") (data (i32.const 28986) "a") (data (i32.const 28989) "a") (data (i32.const 28992) "a") (data (i32.const 28995) "a") (data (i32.const 28998) "a") (data (i32.const 29001) "a") (data (i32.const 29004) "a") (data (i32.const 29007) "a") (data (i32.const 29010) "a") (data (i32.const 29013) "a") (data (i32.const 29016) "a") (data (i32.const 29019) "a") (data (i32.const 29022) "a") (data (i32.const 29025) "a") (data (i32.const 29028) "a") (data (i32.const 29031) "a") (data (i32.const 29034) "a") (data (i32.const 29037) "a") (data (i32.const 29040) "a") (data (i32.const 29043) "a") (data (i32.const 29046) "a") (data (i32.const 29049) "a") (data (i32.const 29052) "a") (data (i32.const 29055) "a") (data (i32.const 29058) "a") (data (i32.const 29061) "a") (data (i32.const 29064) "a") (data (i32.const 29067) "a") (data (i32.const 29070) "a") (data (i32.const 29073) "a") (data (i32.const 29076) "a") (data (i32.const 29079) "a") (data (i32.const 29082) "a") (data (i32.const 29085) "a") (data (i32.const 29088) "a") (data (i32.const 29091) "a") (data (i32.const 29094) "a") (data (i32.const 29097) "a") (data (i32.const 29100) "a") (data (i32.const 29103) "a") (data (i32.const 29106) "a") (data (i32.const 29109) "a") (data (i32.const 29112) "a") (data (i32.const 29115) "a") (data (i32.const 29118) "a") (data (i32.const 29121) "a") (data (i32.const 29124) "a") (data (i32.const 29127) "a") (data (i32.const 29130) "a") (data (i32.const 29133) "a") (data (i32.const 29136) "a") (data (i32.const 29139) "a") (data (i32.const 29142) "a") (data (i32.const 29145) "a") (data (i32.const 29148) "a") (data (i32.const 29151) "a") (data (i32.const 29154) "a") (data (i32.const 29157) "a") (data (i32.const 29160) "a") (data (i32.const 29163) "a") (data (i32.const 29166) "a") (data (i32.const 29169) "a") (data (i32.const 29172) "a") (data (i32.const 29175) "a") (data (i32.const 29178) "a") (data (i32.const 29181) "a") (data (i32.const 29184) "a") (data (i32.const 29187) "a") (data (i32.const 29190) "a") (data (i32.const 29193) "a") (data (i32.const 29196) "a") (data (i32.const 29199) "a") (data (i32.const 29202) "a") (data (i32.const 29205) "a") (data (i32.const 29208) "a") (data (i32.const 29211) "a") (data (i32.const 29214) "a") (data (i32.const 29217) "a") (data (i32.const 29220) "a") (data (i32.const 29223) "a") (data (i32.const 29226) "a") (data (i32.const 29229) "a") (data (i32.const 29232) "a") (data (i32.const 29235) "a") (data (i32.const 29238) "a") (data (i32.const 29241) "a") (data (i32.const 29244) "a") (data (i32.const 29247) "a") (data (i32.const 29250) "a") (data (i32.const 29253) "a") (data (i32.const 29256) "a") (data (i32.const 29259) "a") (data (i32.const 29262) "a") (data (i32.const 29265) "a") (data (i32.const 29268) "a") (data (i32.const 29271) "a") (data (i32.const 29274) "a") (data (i32.const 29277) "a") (data (i32.const 29280) "a") (data (i32.const 29283) "a") (data (i32.const 29286) "a") (data (i32.const 29289) "a") (data (i32.const 29292) "a") (data (i32.const 29295) "a") (data (i32.const 29298) "a") (data (i32.const 29301) "a") (data (i32.const 29304) "a") (data (i32.const 29307) "a") (data (i32.const 29310) "a") (data (i32.const 29313) "a") (data (i32.const 29316) "a") (data (i32.const 29319) "a") (data (i32.const 29322) "a") (data (i32.const 29325) "a") (data (i32.const 29328) "a") (data (i32.const 29331) "a") (data (i32.const 29334) "a") (data (i32.const 29337) "a") (data (i32.const 29340) "a") (data (i32.const 29343) "a") (data (i32.const 29346) "a") (data (i32.const 29349) "a") (data (i32.const 29352) "a") (data (i32.const 29355) "a") (data (i32.const 29358) "a") (data (i32.const 29361) "a") (data (i32.const 29364) "a") (data (i32.const 29367) "a") (data (i32.const 29370) "a") (data (i32.const 29373) "a") (data (i32.const 29376) "a") (data (i32.const 29379) "a") (data (i32.const 29382) "a") (data (i32.const 29385) "a") (data (i32.const 29388) "a") (data (i32.const 29391) "a") (data (i32.const 29394) "a") (data (i32.const 29397) "a") (data (i32.const 29400) "a") (data (i32.const 29403) "a") (data (i32.const 29406) "a") (data (i32.const 29409) "a") (data (i32.const 29412) "a") (data (i32.const 29415) "a") (data (i32.const 29418) "a") (data (i32.const 29421) "a") (data (i32.const 29424) "a") (data (i32.const 29427) "a") (data (i32.const 29430) "a") (data (i32.const 29433) "a") (data (i32.const 29436) "a") (data (i32.const 29439) "a") (data (i32.const 29442) "a") (data (i32.const 29445) "a") (data (i32.const 29448) "a") (data (i32.const 29451) "a") (data (i32.const 29454) "a") (data (i32.const 29457) "a") (data (i32.const 29460) "a") (data (i32.const 29463) "a") (data (i32.const 29466) "a") (data (i32.const 29469) "a") (data (i32.const 29472) "a") (data (i32.const 29475) "a") (data (i32.const 29478) "a") (data (i32.const 29481) "a") (data (i32.const 29484) "a") (data (i32.const 29487) "a") (data (i32.const 29490) "a") (data (i32.const 29493) "a") (data (i32.const 29496) "a") (data (i32.const 29499) "a") (data (i32.const 29502) "a") (data (i32.const 29505) "a") (data (i32.const 29508) "a") (data (i32.const 29511) "a") (data (i32.const 29514) "a") (data (i32.const 29517) "a") (data (i32.const 29520) "a") (data (i32.const 29523) "a") (data (i32.const 29526) "a") (data (i32.const 29529) "a") (data (i32.const 29532) "a") (data (i32.const 29535) "a") (data (i32.const 29538) "a") (data (i32.const 29541) "a") (data (i32.const 29544) "a") (data (i32.const 29547) "a") (data (i32.const 29550) "a") (data (i32.const 29553) "a") (data (i32.const 29556) "a") (data (i32.const 29559) "a") (data (i32.const 29562) "a") (data (i32.const 29565) "a") (data (i32.const 29568) "a") (data (i32.const 29571) "a") (data (i32.const 29574) "a") (data (i32.const 29577) "a") (data (i32.const 29580) "a") (data (i32.const 29583) "a") (data (i32.const 29586) "a") (data (i32.const 29589) "a") (data (i32.const 29592) "a") (data (i32.const 29595) "a") (data (i32.const 29598) "a") (data (i32.const 29601) "a") (data (i32.const 29604) "a") (data (i32.const 29607) "a") (data (i32.const 29610) "a") (data (i32.const 29613) "a") (data (i32.const 29616) "a") (data (i32.const 29619) "a") (data (i32.const 29622) "a") (data (i32.const 29625) "a") (data (i32.const 29628) "a") (data (i32.const 29631) "a") (data (i32.const 29634) "a") (data (i32.const 29637) "a") (data (i32.const 29640) "a") (data (i32.const 29643) "a") (data (i32.const 29646) "a") (data (i32.const 29649) "a") (data (i32.const 29652) "a") (data (i32.const 29655) "a") (data (i32.const 29658) "a") (data (i32.const 29661) "a") (data (i32.const 29664) "a") (data (i32.const 29667) "a") (data (i32.const 29670) "a") (data (i32.const 29673) "a") (data (i32.const 29676) "a") (data (i32.const 29679) "a") (data (i32.const 29682) "a") (data (i32.const 29685) "a") (data (i32.const 29688) "a") (data (i32.const 29691) "a") (data (i32.const 29694) "a") (data (i32.const 29697) "a") (data (i32.const 29700) "a") (data (i32.const 29703) "a") (data (i32.const 29706) "a") (data (i32.const 29709) "a") (data (i32.const 29712) "a") (data (i32.const 29715) "a") (data (i32.const 29718) "a") (data (i32.const 29721) "a") (data (i32.const 29724) "a") (data (i32.const 29727) "a") (data (i32.const 29730) "a") (data (i32.const 29733) "a") (data (i32.const 29736) "a") (data (i32.const 29739) "a") (data (i32.const 29742) "a") (data (i32.const 29745) "a") (data (i32.const 29748) "a") (data (i32.const 29751) "a") (data (i32.const 29754) "a") (data (i32.const 29757) "a") (data (i32.const 29760) "a") (data (i32.const 29763) "a") (data (i32.const 29766) "a") (data (i32.const 29769) "a") (data (i32.const 29772) "a") (data (i32.const 29775) "a") (data (i32.const 29778) "a") (data (i32.const 29781) "a") (data (i32.const 29784) "a") (data (i32.const 29787) "a") (data (i32.const 29790) "a") (data (i32.const 29793) "a") (data (i32.const 29796) "a") (data (i32.const 29799) "a") (data (i32.const 29802) "a") (data (i32.const 29805) "a") (data (i32.const 29808) "a") (data (i32.const 29811) "a") (data (i32.const 29814) "a") (data (i32.const 29817) "a") (data (i32.const 29820) "a") (data (i32.const 29823) "a") (data (i32.const 29826) "a") (data (i32.const 29829) "a") (data (i32.const 29832) "a") (data (i32.const 29835) "a") (data (i32.const 29838) "a") (data (i32.const 29841) "a") (data (i32.const 29844) "a") (data (i32.const 29847) "a") (data (i32.const 29850) "a") (data (i32.const 29853) "a") (data (i32.const 29856) "a") (data (i32.const 29859) "a") (data (i32.const 29862) "a") (data (i32.const 29865) "a") (data (i32.const 29868) "a") (data (i32.const 29871) "a") (data (i32.const 29874) "a") (data (i32.const 29877) "a") (data (i32.const 29880) "a") (data (i32.const 29883) "a") (data (i32.const 29886) "a") (data (i32.const 29889) "a") (data (i32.const 29892) "a") (data (i32.const 29895) "a") (data (i32.const 29898) "a") (data (i32.const 29901) "a") (data (i32.const 29904) "a") (data (i32.const 29907) "a") (data (i32.const 29910) "a") (data (i32.const 29913) "a") (data (i32.const 29916) "a") (data (i32.const 29919) "a") (data (i32.const 29922) "a") (data (i32.const 29925) "a") (data (i32.const 29928) "a") (data (i32.const 29931) "a") (data (i32.const 29934) "a") (data (i32.const 29937) "a") (data (i32.const 29940) "a") (data (i32.const 29943) "a") (data (i32.const 29946) "a") (data (i32.const 29949) "a") (data (i32.const 29952) "a") (data (i32.const 29955) "a") (data (i32.const 29958) "a") (data (i32.const 29961) "a") (data (i32.const 29964) "a") (data (i32.const 29967) "a") (data (i32.const 29970) "a") (data (i32.const 29973) "a") (data (i32.const 29976) "a") (data (i32.const 29979) "a") (data (i32.const 29982) "a") (data (i32.const 29985) "a") (data (i32.const 29988) "a") (data (i32.const 29991) "a") (data (i32.const 29994) "a") (data (i32.const 29997) "a") (data (i32.const 30000) "a") (data (i32.const 30003) "a") (data (i32.const 30006) "a") (data (i32.const 30009) "a") (data (i32.const 30012) "a") (data (i32.const 30015) "a") (data (i32.const 30018) "a") (data (i32.const 30021) "a") (data (i32.const 30024) "a") (data (i32.const 30027) "a") (data (i32.const 30030) "a") (data (i32.const 30033) "a") (data (i32.const 30036) "a") (data (i32.const 30039) "a") (data (i32.const 30042) "a") (data (i32.const 30045) "a") (data (i32.const 30048) "a") (data (i32.const 30051) "a") (data (i32.const 30054) "a") (data (i32.const 30057) "a") (data (i32.const 30060) "a") (data (i32.const 30063) "a") (data (i32.const 30066) "a") (data (i32.const 30069) "a") (data (i32.const 30072) "a") (data (i32.const 30075) "a") (data (i32.const 30078) "a") (data (i32.const 30081) "a") (data (i32.const 30084) "a") (data (i32.const 30087) "a") (data (i32.const 30090) "a") (data (i32.const 30093) "a") (data (i32.const 30096) "a") (data (i32.const 30099) "a") (data (i32.const 30102) "a") (data (i32.const 30105) "a") (data (i32.const 30108) "a") (data (i32.const 30111) "a") (data (i32.const 30114) "a") (data (i32.const 30117) "a") (data (i32.const 30120) "a") (data (i32.const 30123) "a") (data (i32.const 30126) "a") (data (i32.const 30129) "a") (data (i32.const 30132) "a") (data (i32.const 30135) "a") (data (i32.const 30138) "a") (data (i32.const 30141) "a") (data (i32.const 30144) "a") (data (i32.const 30147) "a") (data (i32.const 30150) "a") (data (i32.const 30153) "a") (data (i32.const 30156) "a") (data (i32.const 30159) "a") (data (i32.const 30162) "a") (data (i32.const 30165) "a") (data (i32.const 30168) "a") (data (i32.const 30171) "a") (data (i32.const 30174) "a") (data (i32.const 30177) "a") (data (i32.const 30180) "a") (data (i32.const 30183) "a") (data (i32.const 30186) "a") (data (i32.const 30189) "a") (data (i32.const 30192) "a") (data (i32.const 30195) "a") (data (i32.const 30198) "a") (data (i32.const 30201) "a") (data (i32.const 30204) "a") (data (i32.const 30207) "a") (data (i32.const 30210) "a") (data (i32.const 30213) "a") (data (i32.const 30216) "a") (data (i32.const 30219) "a") (data (i32.const 30222) "a") (data (i32.const 30225) "a") (data (i32.const 30228) "a") (data (i32.const 30231) "a") (data (i32.const 30234) "a") (data (i32.const 30237) "a") (data (i32.const 30240) "a") (data (i32.const 30243) "a") (data (i32.const 30246) "a") (data (i32.const 30249) "a") (data (i32.const 30252) "a") (data (i32.const 30255) "a") (data (i32.const 30258) "a") (data (i32.const 30261) "a") (data (i32.const 30264) "a") (data (i32.const 30267) "a") (data (i32.const 30270) "a") (data (i32.const 30273) "a") (data (i32.const 30276) "a") (data (i32.const 30279) "a") (data (i32.const 30282) "a") (data (i32.const 30285) "a") (data (i32.const 30288) "a") (data (i32.const 30291) "a") (data (i32.const 30294) "a") (data (i32.const 30297) "a") (data (i32.const 30300) "a") (data (i32.const 30303) "a") (data (i32.const 30306) "a") (data (i32.const 30309) "a") (data (i32.const 30312) "a") (data (i32.const 30315) "a") (data (i32.const 30318) "a") (data (i32.const 30321) "a") (data (i32.const 30324) "a") (data (i32.const 30327) "a") (data (i32.const 30330) "a") (data (i32.const 30333) "a") (data (i32.const 30336) "a") (data (i32.const 30339) "a") (data (i32.const 30342) "a") (data (i32.const 30345) "a") (data (i32.const 30348) "a") (data (i32.const 30351) "a") (data (i32.const 30354) "a") (data (i32.const 30357) "a") (data (i32.const 30360) "a") (data (i32.const 30363) "a") (data (i32.const 30366) "a") (data (i32.const 30369) "a") (data (i32.const 30372) "a") (data (i32.const 30375) "a") (data (i32.const 30378) "a") (data (i32.const 30381) "a") (data (i32.const 30384) "a") (data (i32.const 30387) "a") (data (i32.const 30390) "a") (data (i32.const 30393) "a") (data (i32.const 30396) "a") (data (i32.const 30399) "a") (data (i32.const 30402) "a") (data (i32.const 30405) "a") (data (i32.const 30408) "a") (data (i32.const 30411) "a") (data (i32.const 30414) "a") (data (i32.const 30417) "a") (data (i32.const 30420) "a") (data (i32.const 30423) "a") (data (i32.const 30426) "a") (data (i32.const 30429) "a") (data (i32.const 30432) "a") (data (i32.const 30435) "a") (data (i32.const 30438) "a") (data (i32.const 30441) "a") (data (i32.const 30444) "a") (data (i32.const 30447) "a") (data (i32.const 30450) "a") (data (i32.const 30453) "a") (data (i32.const 30456) "a") (data (i32.const 30459) "a") (data (i32.const 30462) "a") (data (i32.const 30465) "a") (data (i32.const 30468) "a") (data (i32.const 30471) "a") (data (i32.const 30474) "a") (data (i32.const 30477) "a") (data (i32.const 30480) "a") (data (i32.const 30483) "a") (data (i32.const 30486) "a") (data (i32.const 30489) "a") (data (i32.const 30492) "a") (data (i32.const 30495) "a") (data (i32.const 30498) "a") (data (i32.const 30501) "a") (data (i32.const 30504) "a") (data (i32.const 30507) "a") (data (i32.const 30510) "a") (data (i32.const 30513) "a") (data (i32.const 30516) "a") (data (i32.const 30519) "a") (data (i32.const 30522) "a") (data (i32.const 30525) "a") (data (i32.const 30528) "a") (data (i32.const 30531) "a") (data (i32.const 30534) "a") (data (i32.const 30537) "a") (data (i32.const 30540) "a") (data (i32.const 30543) "a") (data (i32.const 30546) "a") (data (i32.const 30549) "a") (data (i32.const 30552) "a") (data (i32.const 30555) "a") (data (i32.const 30558) "a") (data (i32.const 30561) "a") (data (i32.const 30564) "a") (data (i32.const 30567) "a") (data (i32.const 30570) "a") (data (i32.const 30573) "a") (data (i32.const 30576) "a") (data (i32.const 30579) "a") (data (i32.const 30582) "a") (data (i32.const 30585) "a") (data (i32.const 30588) "a") (data (i32.const 30591) "a") (data (i32.const 30594) "a") (data (i32.const 30597) "a") (data (i32.const 30600) "a") (data (i32.const 30603) "a") (data (i32.const 30606) "a") (data (i32.const 30609) "a") (data (i32.const 30612) "a") (data (i32.const 30615) "a") (data (i32.const 30618) "a") (data (i32.const 30621) "a") (data (i32.const 30624) "a") (data (i32.const 30627) "a") (data (i32.const 30630) "a") (data (i32.const 30633) "a") (data (i32.const 30636) "a") (data (i32.const 30639) "a") (data (i32.const 30642) "a") (data (i32.const 30645) "a") (data (i32.const 30648) "a") (data (i32.const 30651) "a") (data (i32.const 30654) "a") (data (i32.const 30657) "a") (data (i32.const 30660) "a") (data (i32.const 30663) "a") (data (i32.const 30666) "a") (data (i32.const 30669) "a") (data (i32.const 30672) "a") (data (i32.const 30675) "a") (data (i32.const 30678) "a") (data (i32.const 30681) "a") (data (i32.const 30684) "a") (data (i32.const 30687) "a") (data (i32.const 30690) "a") (data (i32.const 30693) "a") (data (i32.const 30696) "a") (data (i32.const 30699) "a") (data (i32.const 30702) "a") (data (i32.const 30705) "a") (data (i32.const 30708) "a") (data (i32.const 30711) "a") (data (i32.const 30714) "a") (data (i32.const 30717) "a") (data (i32.const 30720) "a") (data (i32.const 30723) "a") (data (i32.const 30726) "a") (data (i32.const 30729) "a") (data (i32.const 30732) "a") (data (i32.const 30735) "a") (data (i32.const 30738) "a") (data (i32.const 30741) "a") (data (i32.const 30744) "a") (data (i32.const 30747) "a") (data (i32.const 30750) "a") (data (i32.const 30753) "a") (data (i32.const 30756) "a") (data (i32.const 30759) "a") (data (i32.const 30762) "a") (data (i32.const 30765) "a") (data (i32.const 30768) "a") (data (i32.const 30771) "a") (data (i32.const 30774) "a") (data (i32.const 30777) "a") (data (i32.const 30780) "a") (data (i32.const 30783) "a") (data (i32.const 30786) "a") (data (i32.const 30789) "a") (data (i32.const 30792) "a") (data (i32.const 30795) "a") (data (i32.const 30798) "a") (data (i32.const 30801) "a") (data (i32.const 30804) "a") (data (i32.const 30807) "a") (data (i32.const 30810) "a") (data (i32.const 30813) "a") (data (i32.const 30816) "a") (data (i32.const 30819) "a") (data (i32.const 30822) "a") (data (i32.const 30825) "a") (data (i32.const 30828) "a") (data (i32.const 30831) "a") (data (i32.const 30834) "a") (data (i32.const 30837) "a") (data (i32.const 30840) "a") (data (i32.const 30843) "a") (data (i32.const 30846) "a") (data (i32.const 30849) "a") (data (i32.const 30852) "a") (data (i32.const 30855) "a") (data (i32.const 30858) "a") (data (i32.const 30861) "a") (data (i32.const 30864) "a") (data (i32.const 30867) "a") (data (i32.const 30870) "a") (data (i32.const 30873) "a") (data (i32.const 30876) "a") (data (i32.const 30879) "a") (data (i32.const 30882) "a") (data (i32.const 30885) "a") (data (i32.const 30888) "a") (data (i32.const 30891) "a") (data (i32.const 30894) "a") (data (i32.const 30897) "a") (data (i32.const 30900) "a") (data (i32.const 30903) "a") (data (i32.const 30906) "a") (data (i32.const 30909) "a") (data (i32.const 30912) "a") (data (i32.const 30915) "a") (data (i32.const 30918) "a") (data (i32.const 30921) "a") (data (i32.const 30924) "a") (data (i32.const 30927) "a") (data (i32.const 30930) "a") (data (i32.const 30933) "a") (data (i32.const 30936) "a") (data (i32.const 30939) "a") (data (i32.const 30942) "a") (data (i32.const 30945) "a") (data (i32.const 30948) "a") (data (i32.const 30951) "a") (data (i32.const 30954) "a") (data (i32.const 30957) "a") (data (i32.const 30960) "a") (data (i32.const 30963) "a") (data (i32.const 30966) "a") (data (i32.const 30969) "a") (data (i32.const 30972) "a") (data (i32.const 30975) "a") (data (i32.const 30978) "a") (data (i32.const 30981) "a") (data (i32.const 30984) "a") (data (i32.const 30987) "a") (data (i32.const 30990) "a") (data (i32.const 30993) "a") (data (i32.const 30996) "a") (data (i32.const 30999) "a") (data (i32.const 31002) "a") (data (i32.const 31005) "a") (data (i32.const 31008) "a") (data (i32.const 31011) "a") (data (i32.const 31014) "a") (data (i32.const 31017) "a") (data (i32.const 31020) "a") (data (i32.const 31023) "a") (data (i32.const 31026) "a") (data (i32.const 31029) "a") (data (i32.const 31032) "a") (data (i32.const 31035) "a") (data (i32.const 31038) "a") (data (i32.const 31041) "a") (data (i32.const 31044) "a") (data (i32.const 31047) "a") (data (i32.const 31050) "a") (data (i32.const 31053) "a") (data (i32.const 31056) "a") (data (i32.const 31059) "a") (data (i32.const 31062) "a") (data (i32.const 31065) "a") (data (i32.const 31068) "a") (data (i32.const 31071) "a") (data (i32.const 31074) "a") (data (i32.const 31077) "a") (data (i32.const 31080) "a") (data (i32.const 31083) "a") (data (i32.const 31086) "a") (data (i32.const 31089) "a") (data (i32.const 31092) "a") (data (i32.const 31095) "a") (data (i32.const 31098) "a") (data (i32.const 31101) "a") (data (i32.const 31104) "a") (data (i32.const 31107) "a") (data (i32.const 31110) "a") (data (i32.const 31113) "a") (data (i32.const 31116) "a") (data (i32.const 31119) "a") (data (i32.const 31122) "a") (data (i32.const 31125) "a") (data (i32.const 31128) "a") (data (i32.const 31131) "a") (data (i32.const 31134) "a") (data (i32.const 31137) "a") (data (i32.const 31140) "a") (data (i32.const 31143) "a") (data (i32.const 31146) "a") (data (i32.const 31149) "a") (data (i32.const 31152) "a") (data (i32.const 31155) "a") (data (i32.const 31158) "a") (data (i32.const 31161) "a") (data (i32.const 31164) "a") (data (i32.const 31167) "a") (data (i32.const 31170) "a") (data (i32.const 31173) "a") (data (i32.const 31176) "a") (data (i32.const 31179) "a") (data (i32.const 31182) "a") (data (i32.const 31185) "a") (data (i32.const 31188) "a") (data (i32.const 31191) "a") (data (i32.const 31194) "a") (data (i32.const 31197) "a") (data (i32.const 31200) "a") (data (i32.const 31203) "a") (data (i32.const 31206) "a") (data (i32.const 31209) "a") (data (i32.const 31212) "a") (data (i32.const 31215) "a") (data (i32.const 31218) "a") (data (i32.const 31221) "a") (data (i32.const 31224) "a") (data (i32.const 31227) "a") (data (i32.const 31230) "a") (data (i32.const 31233) "a") (data (i32.const 31236) "a") (data (i32.const 31239) "a") (data (i32.const 31242) "a") (data (i32.const 31245) "a") (data (i32.const 31248) "a") (data (i32.const 31251) "a") (data (i32.const 31254) "a") (data (i32.const 31257) "a") (data (i32.const 31260) "a") (data (i32.const 31263) "a") (data (i32.const 31266) "a") (data (i32.const 31269) "a") (data (i32.const 31272) "a") (data (i32.const 31275) "a") (data (i32.const 31278) "a") (data (i32.const 31281) "a") (data (i32.const 31284) "a") (data (i32.const 31287) "a") (data (i32.const 31290) "a") (data (i32.const 31293) "a") (data (i32.const 31296) "a") (data (i32.const 31299) "a") (data (i32.const 31302) "a") (data (i32.const 31305) "a") (data (i32.const 31308) "a") (data (i32.const 31311) "a") (data (i32.const 31314) "a") (data (i32.const 31317) "a") (data (i32.const 31320) "a") (data (i32.const 31323) "a") (data (i32.const 31326) "a") (data (i32.const 31329) "a") (data (i32.const 31332) "a") (data (i32.const 31335) "a") (data (i32.const 31338) "a") (data (i32.const 31341) "a") (data (i32.const 31344) "a") (data (i32.const 31347) "a") (data (i32.const 31350) "a") (data (i32.const 31353) "a") (data (i32.const 31356) "a") (data (i32.const 31359) "a") (data (i32.const 31362) "a") (data (i32.const 31365) "a") (data (i32.const 31368) "a") (data (i32.const 31371) "a") (data (i32.const 31374) "a") (data (i32.const 31377) "a") (data (i32.const 31380) "a") (data (i32.const 31383) "a") (data (i32.const 31386) "a") (data (i32.const 31389) "a") (data (i32.const 31392) "a") (data (i32.const 31395) "a") (data (i32.const 31398) "a") (data (i32.const 31401) "a") (data (i32.const 31404) "a") (data (i32.const 31407) "a") (data (i32.const 31410) "a") (data (i32.const 31413) "a") (data (i32.const 31416) "a") (data (i32.const 31419) "a") (data (i32.const 31422) "a") (data (i32.const 31425) "a") (data (i32.const 31428) "a") (data (i32.const 31431) "a") (data (i32.const 31434) "a") (data (i32.const 31437) "a") (data (i32.const 31440) "a") (data (i32.const 31443) "a") (data (i32.const 31446) "a") (data (i32.const 31449) "a") (data (i32.const 31452) "a") (data (i32.const 31455) "a") (data (i32.const 31458) "a") (data (i32.const 31461) "a") (data (i32.const 31464) "a") (data (i32.const 31467) "a") (data (i32.const 31470) "a") (data (i32.const 31473) "a") (data (i32.const 31476) "a") (data (i32.const 31479) "a") (data (i32.const 31482) "a") (data (i32.const 31485) "a") (data (i32.const 31488) "a") (data (i32.const 31491) "a") (data (i32.const 31494) "a") (data (i32.const 31497) "a") (data (i32.const 31500) "a") (data (i32.const 31503) "a") (data (i32.const 31506) "a") (data (i32.const 31509) "a") (data (i32.const 31512) "a") (data (i32.const 31515) "a") (data (i32.const 31518) "a") (data (i32.const 31521) "a") (data (i32.const 31524) "a") (data (i32.const 31527) "a") (data (i32.const 31530) "a") (data (i32.const 31533) "a") (data (i32.const 31536) "a") (data (i32.const 31539) "a") (data (i32.const 31542) "a") (data (i32.const 31545) "a") (data (i32.const 31548) "a") (data (i32.const 31551) "a") (data (i32.const 31554) "a") (data (i32.const 31557) "a") (data (i32.const 31560) "a") (data (i32.const 31563) "a") (data (i32.const 31566) "a") (data (i32.const 31569) "a") (data (i32.const 31572) "a") (data (i32.const 31575) "a") (data (i32.const 31578) "a") (data (i32.const 31581) "a") (data (i32.const 31584) "a") (data (i32.const 31587) "a") (data (i32.const 31590) "a") (data (i32.const 31593) "a") (data (i32.const 31596) "a") (data (i32.const 31599) "a") (data (i32.const 31602) "a") (data (i32.const 31605) "a") (data (i32.const 31608) "a") (data (i32.const 31611) "a") (data (i32.const 31614) "a") (data (i32.const 31617) "a") (data (i32.const 31620) "a") (data (i32.const 31623) "a") (data (i32.const 31626) "a") (data (i32.const 31629) "a") (data (i32.const 31632) "a") (data (i32.const 31635) "a") (data (i32.const 31638) "a") (data (i32.const 31641) "a") (data (i32.const 31644) "a") (data (i32.const 31647) "a") (data (i32.const 31650) "a") (data (i32.const 31653) "a") (data (i32.const 31656) "a") (data (i32.const 31659) "a") (data (i32.const 31662) "a") (data (i32.const 31665) "a") (data (i32.const 31668) "a") (data (i32.const 31671) "a") (data (i32.const 31674) "a") (data (i32.const 31677) "a") (data (i32.const 31680) "a") (data (i32.const 31683) "a") (data (i32.const 31686) "a") (data (i32.const 31689) "a") (data (i32.const 31692) "a") (data (i32.const 31695) "a") (data (i32.const 31698) "a") (data (i32.const 31701) "a") (data (i32.const 31704) "a") (data (i32.const 31707) "a") (data (i32.const 31710) "a") (data (i32.const 31713) "a") (data (i32.const 31716) "a") (data (i32.const 31719) "a") (data (i32.const 31722) "a") (data (i32.const 31725) "a") (data (i32.const 31728) "a") (data (i32.const 31731) "a") (data (i32.const 31734) "a") (data (i32.const 31737) "a") (data (i32.const 31740) "a") (data (i32.const 31743) "a") (data (i32.const 31746) "a") (data (i32.const 31749) "a") (data (i32.const 31752) "a") (data (i32.const 31755) "a") (data (i32.const 31758) "a") (data (i32.const 31761) "a") (data (i32.const 31764) "a") (data (i32.const 31767) "a") (data (i32.const 31770) "a") (data (i32.const 31773) "a") (data (i32.const 31776) "a") (data (i32.const 31779) "a") (data (i32.const 31782) "a") (data (i32.const 31785) "a") (data (i32.const 31788) "a") (data (i32.const 31791) "a") (data (i32.const 31794) "a") (data (i32.const 31797) "a") (data (i32.const 31800) "a") (data (i32.const 31803) "a") (data (i32.const 31806) "a") (data (i32.const 31809) "a") (data (i32.const 31812) "a") (data (i32.const 31815) "a") (data (i32.const 31818) "a") (data (i32.const 31821) "a") (data (i32.const 31824) "a") (data (i32.const 31827) "a") (data (i32.const 31830) "a") (data (i32.const 31833) "a") (data (i32.const 31836) "a") (data (i32.const 31839) "a") (data (i32.const 31842) "a") (data (i32.const 31845) "a") (data (i32.const 31848) "a") (data (i32.const 31851) "a") (data (i32.const 31854) "a") (data (i32.const 31857) "a") (data (i32.const 31860) "a") (data (i32.const 31863) "a") (data (i32.const 31866) "a") (data (i32.const 31869) "a") (data (i32.const 31872) "a") (data (i32.const 31875) "a") (data (i32.const 31878) "a") (data (i32.const 31881) "a") (data (i32.const 31884) "a") (data (i32.const 31887) "a") (data (i32.const 31890) "a") (data (i32.const 31893) "a") (data (i32.const 31896) "a") (data (i32.const 31899) "a") (data (i32.const 31902) "a") (data (i32.const 31905) "a") (data (i32.const 31908) "a") (data (i32.const 31911) "a") (data (i32.const 31914) "a") (data (i32.const 31917) "a") (data (i32.const 31920) "a") (data (i32.const 31923) "a") (data (i32.const 31926) "a") (data (i32.const 31929) "a") (data (i32.const 31932) "a") (data (i32.const 31935) "a") (data (i32.const 31938) "a") (data (i32.const 31941) "a") (data (i32.const 31944) "a") (data (i32.const 31947) "a") (data (i32.const 31950) "a") (data (i32.const 31953) "a") (data (i32.const 31956) "a") (data (i32.const 31959) "a") (data (i32.const 31962) "a") (data (i32.const 31965) "a") (data (i32.const 31968) "a") (data (i32.const 31971) "a") (data (i32.const 31974) "a") (data (i32.const 31977) "a") (data (i32.const 31980) "a") (data (i32.const 31983) "a") (data (i32.const 31986) "a") (data (i32.const 31989) "a") (data (i32.const 31992) "a") (data (i32.const 31995) "a") (data (i32.const 31998) "a") (data (i32.const 32001) "a") (data (i32.const 32004) "a") (data (i32.const 32007) "a") (data (i32.const 32010) "a") (data (i32.const 32013) "a") (data (i32.const 32016) "a") (data (i32.const 32019) "a") (data (i32.const 32022) "a") (data (i32.const 32025) "a") (data (i32.const 32028) "a") (data (i32.const 32031) "a") (data (i32.const 32034) "a") (data (i32.const 32037) "a") (data (i32.const 32040) "a") (data (i32.const 32043) "a") (data (i32.const 32046) "a") (data (i32.const 32049) "a") (data (i32.const 32052) "a") (data (i32.const 32055) "a") (data (i32.const 32058) "a") (data (i32.const 32061) "a") (data (i32.const 32064) "a") (data (i32.const 32067) "a") (data (i32.const 32070) "a") (data (i32.const 32073) "a") (data (i32.const 32076) "a") (data (i32.const 32079) "a") (data (i32.const 32082) "a") (data (i32.const 32085) "a") (data (i32.const 32088) "a") (data (i32.const 32091) "a") (data (i32.const 32094) "a") (data (i32.const 32097) "a") (data (i32.const 32100) "a") (data (i32.const 32103) "a") (data (i32.const 32106) "a") (data (i32.const 32109) "a") (data (i32.const 32112) "a") (data (i32.const 32115) "a") (data (i32.const 32118) "a") (data (i32.const 32121) "a") (data (i32.const 32124) "a") (data (i32.const 32127) "a") (data (i32.const 32130) "a") (data (i32.const 32133) "a") (data (i32.const 32136) "a") (data (i32.const 32139) "a") (data (i32.const 32142) "a") (data (i32.const 32145) "a") (data (i32.const 32148) "a") (data (i32.const 32151) "a") (data (i32.const 32154) "a") (data (i32.const 32157) "a") (data (i32.const 32160) "a") (data (i32.const 32163) "a") (data (i32.const 32166) "a") (data (i32.const 32169) "a") (data (i32.const 32172) "a") (data (i32.const 32175) "a") (data (i32.const 32178) "a") (data (i32.const 32181) "a") (data (i32.const 32184) "a") (data (i32.const 32187) "a") (data (i32.const 32190) "a") (data (i32.const 32193) "a") (data (i32.const 32196) "a") (data (i32.const 32199) "a") (data (i32.const 32202) "a") (data (i32.const 32205) "a") (data (i32.const 32208) "a") (data (i32.const 32211) "a") (data (i32.const 32214) "a") (data (i32.const 32217) "a") (data (i32.const 32220) "a") (data (i32.const 32223) "a") (data (i32.const 32226) "a") (data (i32.const 32229) "a") (data (i32.const 32232) "a") (data (i32.const 32235) "a") (data (i32.const 32238) "a") (data (i32.const 32241) "a") (data (i32.const 32244) "a") (data (i32.const 32247) "a") (data (i32.const 32250) "a") (data (i32.const 32253) "a") (data (i32.const 32256) "a") (data (i32.const 32259) "a") (data (i32.const 32262) "a") (data (i32.const 32265) "a") (data (i32.const 32268) "a") (data (i32.const 32271) "a") (data (i32.const 32274) "a") (data (i32.const 32277) "a") (data (i32.const 32280) "a") (data (i32.const 32283) "a") (data (i32.const 32286) "a") (data (i32.const 32289) "a") (data (i32.const 32292) "a") (data (i32.const 32295) "a") (data (i32.const 32298) "a") (data (i32.const 32301) "a") (data (i32.const 32304) "a") (data (i32.const 32307) "a") (data (i32.const 32310) "a") (data (i32.const 32313) "a") (data (i32.const 32316) "a") (data (i32.const 32319) "a") (data (i32.const 32322) "a") (data (i32.const 32325) "a") (data (i32.const 32328) "a") (data (i32.const 32331) "a") (data (i32.const 32334) "a") (data (i32.const 32337) "a") (data (i32.const 32340) "a") (data (i32.const 32343) "a") (data (i32.const 32346) "a") (data (i32.const 32349) "a") (data (i32.const 32352) "a") (data (i32.const 32355) "a") (data (i32.const 32358) "a") (data (i32.const 32361) "a") (data (i32.const 32364) "a") (data (i32.const 32367) "a") (data (i32.const 32370) "a") (data (i32.const 32373) "a") (data (i32.const 32376) "a") (data (i32.const 32379) "a") (data (i32.const 32382) "a") (data (i32.const 32385) "a") (data (i32.const 32388) "a") (data (i32.const 32391) "a") (data (i32.const 32394) "a") (data (i32.const 32397) "a") (data (i32.const 32400) "a") (data (i32.const 32403) "a") (data (i32.const 32406) "a") (data (i32.const 32409) "a") (data (i32.const 32412) "a") (data (i32.const 32415) "a") (data (i32.const 32418) "a") (data (i32.const 32421) "a") (data (i32.const 32424) "a") (data (i32.const 32427) "a") (data (i32.const 32430) "a") (data (i32.const 32433) "a") (data (i32.const 32436) "a") (data (i32.const 32439) "a") (data (i32.const 32442) "a") (data (i32.const 32445) "a") (data (i32.const 32448) "a") (data (i32.const 32451) "a") (data (i32.const 32454) "a") (data (i32.const 32457) "a") (data (i32.const 32460) "a") (data (i32.const 32463) "a") (data (i32.const 32466) "a") (data (i32.const 32469) "a") (data (i32.const 32472) "a") (data (i32.const 32475) "a") (data (i32.const 32478) "a") (data (i32.const 32481) "a") (data (i32.const 32484) "a") (data (i32.const 32487) "a") (data (i32.const 32490) "a") (data (i32.const 32493) "a") (data (i32.const 32496) "a") (data (i32.const 32499) "a") (data (i32.const 32502) "a") (data (i32.const 32505) "a") (data (i32.const 32508) "a") (data (i32.const 32511) "a") (data (i32.const 32514) "a") (data (i32.const 32517) "a") (data (i32.const 32520) "a") (data (i32.const 32523) "a") (data (i32.const 32526) "a") (data (i32.const 32529) "a") (data (i32.const 32532) "a") (data (i32.const 32535) "a") (data (i32.const 32538) "a") (data (i32.const 32541) "a") (data (i32.const 32544) "a") (data (i32.const 32547) "a") (data (i32.const 32550) "a") (data (i32.const 32553) "a") (data (i32.const 32556) "a") (data (i32.const 32559) "a") (data (i32.const 32562) "a") (data (i32.const 32565) "a") (data (i32.const 32568) "a") (data (i32.const 32571) "a") (data (i32.const 32574) "a") (data (i32.const 32577) "a") (data (i32.const 32580) "a") (data (i32.const 32583) "a") (data (i32.const 32586) "a") (data (i32.const 32589) "a") (data (i32.const 32592) "a") (data (i32.const 32595) "a") (data (i32.const 32598) "a") (data (i32.const 32601) "a") (data (i32.const 32604) "a") (data (i32.const 32607) "a") (data (i32.const 32610) "a") (data (i32.const 32613) "a") (data (i32.const 32616) "a") (data (i32.const 32619) "a") (data (i32.const 32622) "a") (data (i32.const 32625) "a") (data (i32.const 32628) "a") (data (i32.const 32631) "a") (data (i32.const 32634) "a") (data (i32.const 32637) "a") (data (i32.const 32640) "a") (data (i32.const 32643) "a") (data (i32.const 32646) "a") (data (i32.const 32649) "a") (data (i32.const 32652) "a") (data (i32.const 32655) "a") (data (i32.const 32658) "a") (data (i32.const 32661) "a") (data (i32.const 32664) "a") (data (i32.const 32667) "a") (data (i32.const 32670) "a") (data (i32.const 32673) "a") (data (i32.const 32676) "a") (data (i32.const 32679) "a") (data (i32.const 32682) "a") (data (i32.const 32685) "a") (data (i32.const 32688) "a") (data (i32.const 32691) "a") (data (i32.const 32694) "a") (data (i32.const 32697) "a") (data (i32.const 32700) "a") (data (i32.const 32703) "a") (data (i32.const 32706) "a") (data (i32.const 32709) "a") (data (i32.const 32712) "a") (data (i32.const 32715) "a") (data (i32.const 32718) "a") (data (i32.const 32721) "a") (data (i32.const 32724) "a") (data (i32.const 32727) "a") (data (i32.const 32730) "a") (data (i32.const 32733) "a") (data (i32.const 32736) "a") (data (i32.const 32739) "a") (data (i32.const 32742) "a") (data (i32.const 32745) "a") (data (i32.const 32748) "a") (data (i32.const 32751) "a") (data (i32.const 32754) "a") (data (i32.const 32757) "a") (data (i32.const 32760) "a") (data (i32.const 32763) "a") (data (i32.const 32766) "a") (data (i32.const 32769) "a") (data (i32.const 32772) "a") (data (i32.const 32775) "a") (data (i32.const 32778) "a") (data (i32.const 32781) "a") (data (i32.const 32784) "a") (data (i32.const 32787) "a") (data (i32.const 32790) "a") (data (i32.const 32793) "a") (data (i32.const 32796) "a") (data (i32.const 32799) "a") (data (i32.const 32802) "a") (data (i32.const 32805) "a") (data (i32.const 32808) "a") (data (i32.const 32811) "a") (data (i32.const 32814) "a") (data (i32.const 32817) "a") (data (i32.const 32820) "a") (data (i32.const 32823) "a") (data (i32.const 32826) "a") (data (i32.const 32829) "a") (data (i32.const 32832) "a") (data (i32.const 32835) "a") (data (i32.const 32838) "a") (data (i32.const 32841) "a") (data (i32.const 32844) "a") (data (i32.const 32847) "a") (data (i32.const 32850) "a") (data (i32.const 32853) "a") (data (i32.const 32856) "a") (data (i32.const 32859) "a") (data (i32.const 32862) "a") (data (i32.const 32865) "a") (data (i32.const 32868) "a") (data (i32.const 32871) "a") (data (i32.const 32874) "a") (data (i32.const 32877) "a") (data (i32.const 32880) "a") (data (i32.const 32883) "a") (data (i32.const 32886) "a") (data (i32.const 32889) "a") (data (i32.const 32892) "a") (data (i32.const 32895) "a") (data (i32.const 32898) "a") (data (i32.const 32901) "a") (data (i32.const 32904) "a") (data (i32.const 32907) "a") (data (i32.const 32910) "a") (data (i32.const 32913) "a") (data (i32.const 32916) "a") (data (i32.const 32919) "a") (data (i32.const 32922) "a") (data (i32.const 32925) "a") (data (i32.const 32928) "a") (data (i32.const 32931) "a") (data (i32.const 32934) "a") (data (i32.const 32937) "a") (data (i32.const 32940) "a") (data (i32.const 32943) "a") (data (i32.const 32946) "a") (data (i32.const 32949) "a") (data (i32.const 32952) "a") (data (i32.const 32955) "a") (data (i32.const 32958) "a") (data (i32.const 32961) "a") (data (i32.const 32964) "a") (data (i32.const 32967) "a") (data (i32.const 32970) "a") (data (i32.const 32973) "a") (data (i32.const 32976) "a") (data (i32.const 32979) "a") (data (i32.const 32982) "a") (data (i32.const 32985) "a") (data (i32.const 32988) "a") (data (i32.const 32991) "a") (data (i32.const 32994) "a") (data (i32.const 32997) "a") (data (i32.const 33000) "a") (data (i32.const 33003) "a") (data (i32.const 33006) "a") (data (i32.const 33009) "a") (data (i32.const 33012) "a") (data (i32.const 33015) "a") (data (i32.const 33018) "a") (data (i32.const 33021) "a") (data (i32.const 33024) "a") (data (i32.const 33027) "a") (data (i32.const 33030) "a") (data (i32.const 33033) "a") (data (i32.const 33036) "a") (data (i32.const 33039) "a") (data (i32.const 33042) "a") (data (i32.const 33045) "a") (data (i32.const 33048) "a") (data (i32.const 33051) "a") (data (i32.const 33054) "a") (data (i32.const 33057) "a") (data (i32.const 33060) "a") (data (i32.const 33063) "a") (data (i32.const 33066) "a") (data (i32.const 33069) "a") (data (i32.const 33072) "a") (data (i32.const 33075) "a") (data (i32.const 33078) "a") (data (i32.const 33081) "a") (data (i32.const 33084) "a") (data (i32.const 33087) "a") (data (i32.const 33090) "a") (data (i32.const 33093) "a") (data (i32.const 33096) "a") (data (i32.const 33099) "a") (data (i32.const 33102) "a") (data (i32.const 33105) "a") (data (i32.const 33108) "a") (data (i32.const 33111) "a") (data (i32.const 33114) "a") (data (i32.const 33117) "a") (data (i32.const 33120) "a") (data (i32.const 33123) "a") (data (i32.const 33126) "a") (data (i32.const 33129) "a") (data (i32.const 33132) "a") (data (i32.const 33135) "a") (data (i32.const 33138) "a") (data (i32.const 33141) "a") (data (i32.const 33144) "a") (data (i32.const 33147) "a") (data (i32.const 33150) "a") (data (i32.const 33153) "a") (data (i32.const 33156) "a") (data (i32.const 33159) "a") (data (i32.const 33162) "a") (data (i32.const 33165) "a") (data (i32.const 33168) "a") (data (i32.const 33171) "a") (data (i32.const 33174) "a") (data (i32.const 33177) "a") (data (i32.const 33180) "a") (data (i32.const 33183) "a") (data (i32.const 33186) "a") (data (i32.const 33189) "a") (data (i32.const 33192) "a") (data (i32.const 33195) "a") (data (i32.const 33198) "a") (data (i32.const 33201) "a") (data (i32.const 33204) "a") (data (i32.const 33207) "a") (data (i32.const 33210) "a") (data (i32.const 33213) "a") (data (i32.const 33216) "a") (data (i32.const 33219) "a") (data (i32.const 33222) "a") (data (i32.const 33225) "a") (data (i32.const 33228) "a") (data (i32.const 33231) "a") (data (i32.const 33234) "a") (data (i32.const 33237) "a") (data (i32.const 33240) "a") (data (i32.const 33243) "a") (data (i32.const 33246) "a") (data (i32.const 33249) "a") (data (i32.const 33252) "a") (data (i32.const 33255) "a") (data (i32.const 33258) "a") (data (i32.const 33261) "a") (data (i32.const 33264) "a") (data (i32.const 33267) "a") (data (i32.const 33270) "a") (data (i32.const 33273) "a") (data (i32.const 33276) "a") (data (i32.const 33279) "a") (data (i32.const 33282) "a") (data (i32.const 33285) "a") (data (i32.const 33288) "a") (data (i32.const 33291) "a") (data (i32.const 33294) "a") (data (i32.const 33297) "a") (data (i32.const 33300) "a") (data (i32.const 33303) "a") (data (i32.const 33306) "a") (data (i32.const 33309) "a") (data (i32.const 33312) "a") (data (i32.const 33315) "a") (data (i32.const 33318) "a") (data (i32.const 33321) "a") (data (i32.const 33324) "a") (data (i32.const 33327) "a") (data (i32.const 33330) "a") (data (i32.const 33333) "a") (data (i32.const 33336) "a") (data (i32.const 33339) "a") (data (i32.const 33342) "a") (data (i32.const 33345) "a") (data (i32.const 33348) "a") (data (i32.const 33351) "a") (data (i32.const 33354) "a") (data (i32.const 33357) "a") (data (i32.const 33360) "a") (data (i32.const 33363) "a") (data (i32.const 33366) "a") (data (i32.const 33369) "a") (data (i32.const 33372) "a") (data (i32.const 33375) "a") (data (i32.const 33378) "a") (data (i32.const 33381) "a") (data (i32.const 33384) "a") (data (i32.const 33387) "a") (data (i32.const 33390) "a") (data (i32.const 33393) "a") (data (i32.const 33396) "a") (data (i32.const 33399) "a") (data (i32.const 33402) "a") (data (i32.const 33405) "a") (data (i32.const 33408) "a") (data (i32.const 33411) "a") (data (i32.const 33414) "a") (data (i32.const 33417) "a") (data (i32.const 33420) "a") (data (i32.const 33423) "a") (data (i32.const 33426) "a") (data (i32.const 33429) "a") (data (i32.const 33432) "a") (data (i32.const 33435) "a") (data (i32.const 33438) "a") (data (i32.const 33441) "a") (data (i32.const 33444) "a") (data (i32.const 33447) "a") (data (i32.const 33450) "a") (data (i32.const 33453) "a") (data (i32.const 33456) "a") (data (i32.const 33459) "a") (data (i32.const 33462) "a") (data (i32.const 33465) "a") (data (i32.const 33468) "a") (data (i32.const 33471) "a") (data (i32.const 33474) "a") (data (i32.const 33477) "a") (data (i32.const 33480) "a") (data (i32.const 33483) "a") (data (i32.const 33486) "a") (data (i32.const 33489) "a") (data (i32.const 33492) "a") (data (i32.const 33495) "a") (data (i32.const 33498) "a") (data (i32.const 33501) "a") (data (i32.const 33504) "a") (data (i32.const 33507) "a") (data (i32.const 33510) "a") (data (i32.const 33513) "a") (data (i32.const 33516) "a") (data (i32.const 33519) "a") (data (i32.const 33522) "a") (data (i32.const 33525) "a") (data (i32.const 33528) "a") (data (i32.const 33531) "a") (data (i32.const 33534) "a") (data (i32.const 33537) "a") (data (i32.const 33540) "a") (data (i32.const 33543) "a") (data (i32.const 33546) "a") (data (i32.const 33549) "a") (data (i32.const 33552) "a") (data (i32.const 33555) "a") (data (i32.const 33558) "a") (data (i32.const 33561) "a") (data (i32.const 33564) "a") (data (i32.const 33567) "a") (data (i32.const 33570) "a") (data (i32.const 33573) "a") (data (i32.const 33576) "a") (data (i32.const 33579) "a") (data (i32.const 33582) "a") (data (i32.const 33585) "a") (data (i32.const 33588) "a") (data (i32.const 33591) "a") (data (i32.const 33594) "a") (data (i32.const 33597) "a") (data (i32.const 33600) "a") (data (i32.const 33603) "a") (data (i32.const 33606) "a") (data (i32.const 33609) "a") (data (i32.const 33612) "a") (data (i32.const 33615) "a") (data (i32.const 33618) "a") (data (i32.const 33621) "a") (data (i32.const 33624) "a") (data (i32.const 33627) "a") (data (i32.const 33630) "a") (data (i32.const 33633) "a") (data (i32.const 33636) "a") (data (i32.const 33639) "a") (data (i32.const 33642) "a") (data (i32.const 33645) "a") (data (i32.const 33648) "a") (data (i32.const 33651) "a") (data (i32.const 33654) "a") (data (i32.const 33657) "a") (data (i32.const 33660) "a") (data (i32.const 33663) "a") (data (i32.const 33666) "a") (data (i32.const 33669) "a") (data (i32.const 33672) "a") (data (i32.const 33675) "a") (data (i32.const 33678) "a") (data (i32.const 33681) "a") (data (i32.const 33684) "a") (data (i32.const 33687) "a") (data (i32.const 33690) "a") (data (i32.const 33693) "a") (data (i32.const 33696) "a") (data (i32.const 33699) "a") (data (i32.const 33702) "a") (data (i32.const 33705) "a") (data (i32.const 33708) "a") (data (i32.const 33711) "a") (data (i32.const 33714) "a") (data (i32.const 33717) "a") (data (i32.const 33720) "a") (data (i32.const 33723) "a") (data (i32.const 33726) "a") (data (i32.const 33729) "a") (data (i32.const 33732) "a") (data (i32.const 33735) "a") (data (i32.const 33738) "a") (data (i32.const 33741) "a") (data (i32.const 33744) "a") (data (i32.const 33747) "a") (data (i32.const 33750) "a") (data (i32.const 33753) "a") (data (i32.const 33756) "a") (data (i32.const 33759) "a") (data (i32.const 33762) "a") (data (i32.const 33765) "a") (data (i32.const 33768) "a") (data (i32.const 33771) "a") (data (i32.const 33774) "a") (data (i32.const 33777) "a") (data (i32.const 33780) "a") (data (i32.const 33783) "a") (data (i32.const 33786) "a") (data (i32.const 33789) "a") (data (i32.const 33792) "a") (data (i32.const 33795) "a") (data (i32.const 33798) "a") (data (i32.const 33801) "a") (data (i32.const 33804) "a") (data (i32.const 33807) "a") (data (i32.const 33810) "a") (data (i32.const 33813) "a") (data (i32.const 33816) "a") (data (i32.const 33819) "a") (data (i32.const 33822) "a") (data (i32.const 33825) "a") (data (i32.const 33828) "a") (data (i32.const 33831) "a") (data (i32.const 33834) "a") (data (i32.const 33837) "a") (data (i32.const 33840) "a") (data (i32.const 33843) "a") (data (i32.const 33846) "a") (data (i32.const 33849) "a") (data (i32.const 33852) "a") (data (i32.const 33855) "a") (data (i32.const 33858) "a") (data (i32.const 33861) "a") (data (i32.const 33864) "a") (data (i32.const 33867) "a") (data (i32.const 33870) "a") (data (i32.const 33873) "a") (data (i32.const 33876) "a") (data (i32.const 33879) "a") (data (i32.const 33882) "a") (data (i32.const 33885) "a") (data (i32.const 33888) "a") (data (i32.const 33891) "a") (data (i32.const 33894) "a") (data (i32.const 33897) "a") (data (i32.const 33900) "a") (data (i32.const 33903) "a") (data (i32.const 33906) "a") (data (i32.const 33909) "a") (data (i32.const 33912) "a") (data (i32.const 33915) "a") (data (i32.const 33918) "a") (data (i32.const 33921) "a") (data (i32.const 33924) "a") (data (i32.const 33927) "a") (data (i32.const 33930) "a") (data (i32.const 33933) "a") (data (i32.const 33936) "a") (data (i32.const 33939) "a") (data (i32.const 33942) "a") (data (i32.const 33945) "a") (data (i32.const 33948) "a") (data (i32.const 33951) "a") (data (i32.const 33954) "a") (data (i32.const 33957) "a") (data (i32.const 33960) "a") (data (i32.const 33963) "a") (data (i32.const 33966) "a") (data (i32.const 33969) "a") (data (i32.const 33972) "a") (data (i32.const 33975) "a") (data (i32.const 33978) "a") (data (i32.const 33981) "a") (data (i32.const 33984) "a") (data (i32.const 33987) "a") (data (i32.const 33990) "a") (data (i32.const 33993) "a") (data (i32.const 33996) "a") (data (i32.const 33999) "a") (data (i32.const 34002) "a") (data (i32.const 34005) "a") (data (i32.const 34008) "a") (data (i32.const 34011) "a") (data (i32.const 34014) "a") (data (i32.const 34017) "a") (data (i32.const 34020) "a") (data (i32.const 34023) "a") (data (i32.const 34026) "a") (data (i32.const 34029) "a") (data (i32.const 34032) "a") (data (i32.const 34035) "a") (data (i32.const 34038) "a") (data (i32.const 34041) "a") (data (i32.const 34044) "a") (data (i32.const 34047) "a") (data (i32.const 34050) "a") (data (i32.const 34053) "a") (data (i32.const 34056) "a") (data (i32.const 34059) "a") (data (i32.const 34062) "a") (data (i32.const 34065) "a") (data (i32.const 34068) "a") (data (i32.const 34071) "a") (data (i32.const 34074) "a") (data (i32.const 34077) "a") (data (i32.const 34080) "a") (data (i32.const 34083) "a") (data (i32.const 34086) "a") (data (i32.const 34089) "a") (data (i32.const 34092) "a") (data (i32.const 34095) "a") (data (i32.const 34098) "a") (data (i32.const 34101) "a") (data (i32.const 34104) "a") (data (i32.const 34107) "a") (data (i32.const 34110) "a") (data (i32.const 34113) "a") (data (i32.const 34116) "a") (data (i32.const 34119) "a") (data (i32.const 34122) "a") (data (i32.const 34125) "a") (data (i32.const 34128) "a") (data (i32.const 34131) "a") (data (i32.const 34134) "a") (data (i32.const 34137) "a") (data (i32.const 34140) "a") (data (i32.const 34143) "a") (data (i32.const 34146) "a") (data (i32.const 34149) "a") (data (i32.const 34152) "a") (data (i32.const 34155) "a") (data (i32.const 34158) "a") (data (i32.const 34161) "a") (data (i32.const 34164) "a") (data (i32.const 34167) "a") (data (i32.const 34170) "a") (data (i32.const 34173) "a") (data (i32.const 34176) "a") (data (i32.const 34179) "a") (data (i32.const 34182) "a") (data (i32.const 34185) "a") (data (i32.const 34188) "a") (data (i32.const 34191) "a") (data (i32.const 34194) "a") (data (i32.const 34197) "a") (data (i32.const 34200) "a") (data (i32.const 34203) "a") (data (i32.const 34206) "a") (data (i32.const 34209) "a") (data (i32.const 34212) "a") (data (i32.const 34215) "a") (data (i32.const 34218) "a") (data (i32.const 34221) "a") (data (i32.const 34224) "a") (data (i32.const 34227) "a") (data (i32.const 34230) "a") (data (i32.const 34233) "a") (data (i32.const 34236) "a") (data (i32.const 34239) "a") (data (i32.const 34242) "a") (data (i32.const 34245) "a") (data (i32.const 34248) "a") (data (i32.const 34251) "a") (data (i32.const 34254) "a") (data (i32.const 34257) "a") (data (i32.const 34260) "a") (data (i32.const 34263) "a") (data (i32.const 34266) "a") (data (i32.const 34269) "a") (data (i32.const 34272) "a") (data (i32.const 34275) "a") (data (i32.const 34278) "a") (data (i32.const 34281) "a") (data (i32.const 34284) "a") (data (i32.const 34287) "a") (data (i32.const 34290) "a") (data (i32.const 34293) "a") (data (i32.const 34296) "a") (data (i32.const 34299) "a") (data (i32.const 34302) "a") (data (i32.const 34305) "a") (data (i32.const 34308) "a") (data (i32.const 34311) "a") (data (i32.const 34314) "a") (data (i32.const 34317) "a") (data (i32.const 34320) "a") (data (i32.const 34323) "a") (data (i32.const 34326) "a") (data (i32.const 34329) "a") (data (i32.const 34332) "a") (data (i32.const 34335) "a") (data (i32.const 34338) "a") (data (i32.const 34341) "a") (data (i32.const 34344) "a") (data (i32.const 34347) "a") (data (i32.const 34350) "a") (data (i32.const 34353) "a") (data (i32.const 34356) "a") (data (i32.const 34359) "a") (data (i32.const 34362) "a") (data (i32.const 34365) "a") (data (i32.const 34368) "a") (data (i32.const 34371) "a") (data (i32.const 34374) "a") (data (i32.const 34377) "a") (data (i32.const 34380) "a") (data (i32.const 34383) "a") (data (i32.const 34386) "a") (data (i32.const 34389) "a") (data (i32.const 34392) "a") (data (i32.const 34395) "a") (data (i32.const 34398) "a") (data (i32.const 34401) "a") (data (i32.const 34404) "a") (data (i32.const 34407) "a") (data (i32.const 34410) "a") (data (i32.const 34413) "a") (data (i32.const 34416) "a") (data (i32.const 34419) "a") (data (i32.const 34422) "a") (data (i32.const 34425) "a") (data (i32.const 34428) "a") (data (i32.const 34431) "a") (data (i32.const 34434) "a") (data (i32.const 34437) "a") (data (i32.const 34440) "a") (data (i32.const 34443) "a") (data (i32.const 34446) "a") (data (i32.const 34449) "a") (data (i32.const 34452) "a") (data (i32.const 34455) "a") (data (i32.const 34458) "a") (data (i32.const 34461) "a") (data (i32.const 34464) "a") (data (i32.const 34467) "a") (data (i32.const 34470) "a") (data (i32.const 34473) "a") (data (i32.const 34476) "a") (data (i32.const 34479) "a") (data (i32.const 34482) "a") (data (i32.const 34485) "a") (data (i32.const 34488) "a") (data (i32.const 34491) "a") (data (i32.const 34494) "a") (data (i32.const 34497) "a") (data (i32.const 34500) "a") (data (i32.const 34503) "a") (data (i32.const 34506) "a") (data (i32.const 34509) "a") (data (i32.const 34512) "a") (data (i32.const 34515) "a") (data (i32.const 34518) "a") (data (i32.const 34521) "a") (data (i32.const 34524) "a") (data (i32.const 34527) "a") (data (i32.const 34530) "a") (data (i32.const 34533) "a") (data (i32.const 34536) "a") (data (i32.const 34539) "a") (data (i32.const 34542) "a") (data (i32.const 34545) "a") (data (i32.const 34548) "a") (data (i32.const 34551) "a") (data (i32.const 34554) "a") (data (i32.const 34557) "a") (data (i32.const 34560) "a") (data (i32.const 34563) "a") (data (i32.const 34566) "a") (data (i32.const 34569) "a") (data (i32.const 34572) "a") (data (i32.const 34575) "a") (data (i32.const 34578) "a") (data (i32.const 34581) "a") (data (i32.const 34584) "a") (data (i32.const 34587) "a") (data (i32.const 34590) "a") (data (i32.const 34593) "a") (data (i32.const 34596) "a") (data (i32.const 34599) "a") (data (i32.const 34602) "a") (data (i32.const 34605) "a") (data (i32.const 34608) "a") (data (i32.const 34611) "a") (data (i32.const 34614) "a") (data (i32.const 34617) "a") (data (i32.const 34620) "a") (data (i32.const 34623) "a") (data (i32.const 34626) "a") (data (i32.const 34629) "a") (data (i32.const 34632) "a") (data (i32.const 34635) "a") (data (i32.const 34638) "a") (data (i32.const 34641) "a") (data (i32.const 34644) "a") (data (i32.const 34647) "a") (data (i32.const 34650) "a") (data (i32.const 34653) "a") (data (i32.const 34656) "a") (data (i32.const 34659) "a") (data (i32.const 34662) "a") (data (i32.const 34665) "a") (data (i32.const 34668) "a") (data (i32.const 34671) "a") (data (i32.const 34674) "a") (data (i32.const 34677) "a") (data (i32.const 34680) "a") (data (i32.const 34683) "a") (data (i32.const 34686) "a") (data (i32.const 34689) "a") (data (i32.const 34692) "a") (data (i32.const 34695) "a") (data (i32.const 34698) "a") (data (i32.const 34701) "a") (data (i32.const 34704) "a") (data (i32.const 34707) "a") (data (i32.const 34710) "a") (data (i32.const 34713) "a") (data (i32.const 34716) "a") (data (i32.const 34719) "a") (data (i32.const 34722) "a") (data (i32.const 34725) "a") (data (i32.const 34728) "a") (data (i32.const 34731) "a") (data (i32.const 34734) "a") (data (i32.const 34737) "a") (data (i32.const 34740) "a") (data (i32.const 34743) "a") (data (i32.const 34746) "a") (data (i32.const 34749) "a") (data (i32.const 34752) "a") (data (i32.const 34755) "a") (data (i32.const 34758) "a") (data (i32.const 34761) "a") (data (i32.const 34764) "a") (data (i32.const 34767) "a") (data (i32.const 34770) "a") (data (i32.const 34773) "a") (data (i32.const 34776) "a") (data (i32.const 34779) "a") (data (i32.const 34782) "a") (data (i32.const 34785) "a") (data (i32.const 34788) "a") (data (i32.const 34791) "a") (data (i32.const 34794) "a") (data (i32.const 34797) "a") (data (i32.const 34800) "a") (data (i32.const 34803) "a") (data (i32.const 34806) "a") (data (i32.const 34809) "a") (data (i32.const 34812) "a") (data (i32.const 34815) "a") (data (i32.const 34818) "a") (data (i32.const 34821) "a") (data (i32.const 34824) "a") (data (i32.const 34827) "a") (data (i32.const 34830) "a") (data (i32.const 34833) "a") (data (i32.const 34836) "a") (data (i32.const 34839) "a") (data (i32.const 34842) "a") (data (i32.const 34845) "a") (data (i32.const 34848) "a") (data (i32.const 34851) "a") (data (i32.const 34854) "a") (data (i32.const 34857) "a") (data (i32.const 34860) "a") (data (i32.const 34863) "a") (data (i32.const 34866) "a") (data (i32.const 34869) "a") (data (i32.const 34872) "a") (data (i32.const 34875) "a") (data (i32.const 34878) "a") (data (i32.const 34881) "a") (data (i32.const 34884) "a") (data (i32.const 34887) "a") (data (i32.const 34890) "a") (data (i32.const 34893) "a") (data (i32.const 34896) "a") (data (i32.const 34899) "a") (data (i32.const 34902) "a") (data (i32.const 34905) "a") (data (i32.const 34908) "a") (data (i32.const 34911) "a") (data (i32.const 34914) "a") (data (i32.const 34917) "a") (data (i32.const 34920) "a") (data (i32.const 34923) "a") (data (i32.const 34926) "a") (data (i32.const 34929) "a") (data (i32.const 34932) "a") (data (i32.const 34935) "a") (data (i32.const 34938) "a") (data (i32.const 34941) "a") (data (i32.const 34944) "a") (data (i32.const 34947) "a") (data (i32.const 34950) "a") (data (i32.const 34953) "a") (data (i32.const 34956) "a") (data (i32.const 34959) "a") (data (i32.const 34962) "a") (data (i32.const 34965) "a") (data (i32.const 34968) "a") (data (i32.const 34971) "a") (data (i32.const 34974) "a") (data (i32.const 34977) "a") (data (i32.const 34980) "a") (data (i32.const 34983) "a") (data (i32.const 34986) "a") (data (i32.const 34989) "a") (data (i32.const 34992) "a") (data (i32.const 34995) "a") (data (i32.const 34998) "a") (data (i32.const 35001) "a") (data (i32.const 35004) "a") (data (i32.const 35007) "a") (data (i32.const 35010) "a") (data (i32.const 35013) "a") (data (i32.const 35016) "a") (data (i32.const 35019) "a") (data (i32.const 35022) "a") (data (i32.const 35025) "a") (data (i32.const 35028) "a") (data (i32.const 35031) "a") (data (i32.const 35034) "a") (data (i32.const 35037) "a") (data (i32.const 35040) "a") (data (i32.const 35043) "a") (data (i32.const 35046) "a") (data (i32.const 35049) "a") (data (i32.const 35052) "a") (data (i32.const 35055) "a") (data (i32.const 35058) "a") (data (i32.const 35061) "a") (data (i32.const 35064) "a") (data (i32.const 35067) "a") (data (i32.const 35070) "a") (data (i32.const 35073) "a") (data (i32.const 35076) "a") (data (i32.const 35079) "a") (data (i32.const 35082) "a") (data (i32.const 35085) "a") (data (i32.const 35088) "a") (data (i32.const 35091) "a") (data (i32.const 35094) "a") (data (i32.const 35097) "a") (data (i32.const 35100) "a") (data (i32.const 35103) "a") (data (i32.const 35106) "a") (data (i32.const 35109) "a") (data (i32.const 35112) "a") (data (i32.const 35115) "a") (data (i32.const 35118) "a") (data (i32.const 35121) "a") (data (i32.const 35124) "a") (data (i32.const 35127) "a") (data (i32.const 35130) "a") (data (i32.const 35133) "a") (data (i32.const 35136) "a") (data (i32.const 35139) "a") (data (i32.const 35142) "a") (data (i32.const 35145) "a") (data (i32.const 35148) "a") (data (i32.const 35151) "a") (data (i32.const 35154) "a") (data (i32.const 35157) "a") (data (i32.const 35160) "a") (data (i32.const 35163) "a") (data (i32.const 35166) "a") (data (i32.const 35169) "a") (data (i32.const 35172) "a") (data (i32.const 35175) "a") (data (i32.const 35178) "a") (data (i32.const 35181) "a") (data (i32.const 35184) "a") (data (i32.const 35187) "a") (data (i32.const 35190) "a") (data (i32.const 35193) "a") (data (i32.const 35196) "a") (data (i32.const 35199) "a") (data (i32.const 35202) "a") (data (i32.const 35205) "a") (data (i32.const 35208) "a") (data (i32.const 35211) "a") (data (i32.const 35214) "a") (data (i32.const 35217) "a") (data (i32.const 35220) "a") (data (i32.const 35223) "a") (data (i32.const 35226) "a") (data (i32.const 35229) "a") (data (i32.const 35232) "a") (data (i32.const 35235) "a") (data (i32.const 35238) "a") (data (i32.const 35241) "a") (data (i32.const 35244) "a") (data (i32.const 35247) "a") (data (i32.const 35250) "a") (data (i32.const 35253) "a") (data (i32.const 35256) "a") (data (i32.const 35259) "a") (data (i32.const 35262) "a") (data (i32.const 35265) "a") (data (i32.const 35268) "a") (data (i32.const 35271) "a") (data (i32.const 35274) "a") (data (i32.const 35277) "a") (data (i32.const 35280) "a") (data (i32.const 35283) "a") (data (i32.const 35286) "a") (data (i32.const 35289) "a") (data (i32.const 35292) "a") (data (i32.const 35295) "a") (data (i32.const 35298) "a") (data (i32.const 35301) "a") (data (i32.const 35304) "a") (data (i32.const 35307) "a") (data (i32.const 35310) "a") (data (i32.const 35313) "a") (data (i32.const 35316) "a") (data (i32.const 35319) "a") (data (i32.const 35322) "a") (data (i32.const 35325) "a") (data (i32.const 35328) "a") (data (i32.const 35331) "a") (data (i32.const 35334) "a") (data (i32.const 35337) "a") (data (i32.const 35340) "a") (data (i32.const 35343) "a") (data (i32.const 35346) "a") (data (i32.const 35349) "a") (data (i32.const 35352) "a") (data (i32.const 35355) "a") (data (i32.const 35358) "a") (data (i32.const 35361) "a") (data (i32.const 35364) "a") (data (i32.const 35367) "a") (data (i32.const 35370) "a") (data (i32.const 35373) "a") (data (i32.const 35376) "a") (data (i32.const 35379) "a") (data (i32.const 35382) "a") (data (i32.const 35385) "a") (data (i32.const 35388) "a") (data (i32.const 35391) "a") (data (i32.const 35394) "a") (data (i32.const 35397) "a") (data (i32.const 35400) "a") (data (i32.const 35403) "a") (data (i32.const 35406) "a") (data (i32.const 35409) "a") (data (i32.const 35412) "a") (data (i32.const 35415) "a") (data (i32.const 35418) "a") (data (i32.const 35421) "a") (data (i32.const 35424) "a") (data (i32.const 35427) "a") (data (i32.const 35430) "a") (data (i32.const 35433) "a") (data (i32.const 35436) "a") (data (i32.const 35439) "a") (data (i32.const 35442) "a") (data (i32.const 35445) "a") (data (i32.const 35448) "a") (data (i32.const 35451) "a") (data (i32.const 35454) "a") (data (i32.const 35457) "a") (data (i32.const 35460) "a") (data (i32.const 35463) "a") (data (i32.const 35466) "a") (data (i32.const 35469) "a") (data (i32.const 35472) "a") (data (i32.const 35475) "a") (data (i32.const 35478) "a") (data (i32.const 35481) "a") (data (i32.const 35484) "a") (data (i32.const 35487) "a") (data (i32.const 35490) "a") (data (i32.const 35493) "a") (data (i32.const 35496) "a") (data (i32.const 35499) "a") (data (i32.const 35502) "a") (data (i32.const 35505) "a") (data (i32.const 35508) "a") (data (i32.const 35511) "a") (data (i32.const 35514) "a") (data (i32.const 35517) "a") (data (i32.const 35520) "a") (data (i32.const 35523) "a") (data (i32.const 35526) "a") (data (i32.const 35529) "a") (data (i32.const 35532) "a") (data (i32.const 35535) "a") (data (i32.const 35538) "a") (data (i32.const 35541) "a") (data (i32.const 35544) "a") (data (i32.const 35547) "a") (data (i32.const 35550) "a") (data (i32.const 35553) "a") (data (i32.const 35556) "a") (data (i32.const 35559) "a") (data (i32.const 35562) "a") (data (i32.const 35565) "a") (data (i32.const 35568) "a") (data (i32.const 35571) "a") (data (i32.const 35574) "a") (data (i32.const 35577) "a") (data (i32.const 35580) "a") (data (i32.const 35583) "a") (data (i32.const 35586) "a") (data (i32.const 35589) "a") (data (i32.const 35592) "a") (data (i32.const 35595) "a") (data (i32.const 35598) "a") (data (i32.const 35601) "a") (data (i32.const 35604) "a") (data (i32.const 35607) "a") (data (i32.const 35610) "a") (data (i32.const 35613) "a") (data (i32.const 35616) "a") (data (i32.const 35619) "a") (data (i32.const 35622) "a") (data (i32.const 35625) "a") (data (i32.const 35628) "a") (data (i32.const 35631) "a") (data (i32.const 35634) "a") (data (i32.const 35637) "a") (data (i32.const 35640) "a") (data (i32.const 35643) "a") (data (i32.const 35646) "a") (data (i32.const 35649) "a") (data (i32.const 35652) "a") (data (i32.const 35655) "a") (data (i32.const 35658) "a") (data (i32.const 35661) "a") (data (i32.const 35664) "a") (data (i32.const 35667) "a") (data (i32.const 35670) "a") (data (i32.const 35673) "a") (data (i32.const 35676) "a") (data (i32.const 35679) "a") (data (i32.const 35682) "a") (data (i32.const 35685) "a") (data (i32.const 35688) "a") (data (i32.const 35691) "a") (data (i32.const 35694) "a") (data (i32.const 35697) "a") (data (i32.const 35700) "a") (data (i32.const 35703) "a") (data (i32.const 35706) "a") (data (i32.const 35709) "a") (data (i32.const 35712) "a") (data (i32.const 35715) "a") (data (i32.const 35718) "a") (data (i32.const 35721) "a") (data (i32.const 35724) "a") (data (i32.const 35727) "a") (data (i32.const 35730) "a") (data (i32.const 35733) "a") (data (i32.const 35736) "a") (data (i32.const 35739) "a") (data (i32.const 35742) "a") (data (i32.const 35745) "a") (data (i32.const 35748) "a") (data (i32.const 35751) "a") (data (i32.const 35754) "a") (data (i32.const 35757) "a") (data (i32.const 35760) "a") (data (i32.const 35763) "a") (data (i32.const 35766) "a") (data (i32.const 35769) "a") (data (i32.const 35772) "a") (data (i32.const 35775) "a") (data (i32.const 35778) "a") (data (i32.const 35781) "a") (data (i32.const 35784) "a") (data (i32.const 35787) "a") (data (i32.const 35790) "a") (data (i32.const 35793) "a") (data (i32.const 35796) "a") (data (i32.const 35799) "a") (data (i32.const 35802) "a") (data (i32.const 35805) "a") (data (i32.const 35808) "a") (data (i32.const 35811) "a") (data (i32.const 35814) "a") (data (i32.const 35817) "a") (data (i32.const 35820) "a") (data (i32.const 35823) "a") (data (i32.const 35826) "a") (data (i32.const 35829) "a") (data (i32.const 35832) "a") (data (i32.const 35835) "a") (data (i32.const 35838) "a") (data (i32.const 35841) "a") (data (i32.const 35844) "a") (data (i32.const 35847) "a") (data (i32.const 35850) "a") (data (i32.const 35853) "a") (data (i32.const 35856) "a") (data (i32.const 35859) "a") (data (i32.const 35862) "a") (data (i32.const 35865) "a") (data (i32.const 35868) "a") (data (i32.const 35871) "a") (data (i32.const 35874) "a") (data (i32.const 35877) "a") (data (i32.const 35880) "a") (data (i32.const 35883) "a") (data (i32.const 35886) "a") (data (i32.const 35889) "a") (data (i32.const 35892) "a") (data (i32.const 35895) "a") (data (i32.const 35898) "a") (data (i32.const 35901) "a") (data (i32.const 35904) "a") (data (i32.const 35907) "a") (data (i32.const 35910) "a") (data (i32.const 35913) "a") (data (i32.const 35916) "a") (data (i32.const 35919) "a") (data (i32.const 35922) "a") (data (i32.const 35925) "a") (data (i32.const 35928) "a") (data (i32.const 35931) "a") (data (i32.const 35934) "a") (data (i32.const 35937) "a") (data (i32.const 35940) "a") (data (i32.const 35943) "a") (data (i32.const 35946) "a") (data (i32.const 35949) "a") (data (i32.const 35952) "a") (data (i32.const 35955) "a") (data (i32.const 35958) "a") (data (i32.const 35961) "a") (data (i32.const 35964) "a") (data (i32.const 35967) "a") (data (i32.const 35970) "a") (data (i32.const 35973) "a") (data (i32.const 35976) "a") (data (i32.const 35979) "a") (data (i32.const 35982) "a") (data (i32.const 35985) "a") (data (i32.const 35988) "a") (data (i32.const 35991) "a") (data (i32.const 35994) "a") (data (i32.const 35997) "a") (data (i32.const 36000) "a") (data (i32.const 36003) "a") (data (i32.const 36006) "a") (data (i32.const 36009) "a") (data (i32.const 36012) "a") (data (i32.const 36015) "a") (data (i32.const 36018) "a") (data (i32.const 36021) "a") (data (i32.const 36024) "a") (data (i32.const 36027) "a") (data (i32.const 36030) "a") (data (i32.const 36033) "a") (data (i32.const 36036) "a") (data (i32.const 36039) "a") (data (i32.const 36042) "a") (data (i32.const 36045) "a") (data (i32.const 36048) "a") (data (i32.const 36051) "a") (data (i32.const 36054) "a") (data (i32.const 36057) "a") (data (i32.const 36060) "a") (data (i32.const 36063) "a") (data (i32.const 36066) "a") (data (i32.const 36069) "a") (data (i32.const 36072) "a") (data (i32.const 36075) "a") (data (i32.const 36078) "a") (data (i32.const 36081) "a") (data (i32.const 36084) "a") (data (i32.const 36087) "a") (data (i32.const 36090) "a") (data (i32.const 36093) "a") (data (i32.const 36096) "a") (data (i32.const 36099) "a") (data (i32.const 36102) "a") (data (i32.const 36105) "a") (data (i32.const 36108) "a") (data (i32.const 36111) "a") (data (i32.const 36114) "a") (data (i32.const 36117) "a") (data (i32.const 36120) "a") (data (i32.const 36123) "a") (data (i32.const 36126) "a") (data (i32.const 36129) "a") (data (i32.const 36132) "a") (data (i32.const 36135) "a") (data (i32.const 36138) "a") (data (i32.const 36141) "a") (data (i32.const 36144) "a") (data (i32.const 36147) "a") (data (i32.const 36150) "a") (data (i32.const 36153) "a") (data (i32.const 36156) "a") (data (i32.const 36159) "a") (data (i32.const 36162) "a") (data (i32.const 36165) "a") (data (i32.const 36168) "a") (data (i32.const 36171) "a") (data (i32.const 36174) "a") (data (i32.const 36177) "a") (data (i32.const 36180) "a") (data (i32.const 36183) "a") (data (i32.const 36186) "a") (data (i32.const 36189) "a") (data (i32.const 36192) "a") (data (i32.const 36195) "a") (data (i32.const 36198) "a") (data (i32.const 36201) "a") (data (i32.const 36204) "a") (data (i32.const 36207) "a") (data (i32.const 36210) "a") (data (i32.const 36213) "a") (data (i32.const 36216) "a") (data (i32.const 36219) "a") (data (i32.const 36222) "a") (data (i32.const 36225) "a") (data (i32.const 36228) "a") (data (i32.const 36231) "a") (data (i32.const 36234) "a") (data (i32.const 36237) "a") (data (i32.const 36240) "a") (data (i32.const 36243) "a") (data (i32.const 36246) "a") (data (i32.const 36249) "a") (data (i32.const 36252) "a") (data (i32.const 36255) "a") (data (i32.const 36258) "a") (data (i32.const 36261) "a") (data (i32.const 36264) "a") (data (i32.const 36267) "a") (data (i32.const 36270) "a") (data (i32.const 36273) "a") (data (i32.const 36276) "a") (data (i32.const 36279) "a") (data (i32.const 36282) "a") (data (i32.const 36285) "a") (data (i32.const 36288) "a") (data (i32.const 36291) "a") (data (i32.const 36294) "a") (data (i32.const 36297) "a") (data (i32.const 36300) "a") (data (i32.const 36303) "a") (data (i32.const 36306) "a") (data (i32.const 36309) "a") (data (i32.const 36312) "a") (data (i32.const 36315) "a") (data (i32.const 36318) "a") (data (i32.const 36321) "a") (data (i32.const 36324) "a") (data (i32.const 36327) "a") (data (i32.const 36330) "a") (data (i32.const 36333) "a") (data (i32.const 36336) "a") (data (i32.const 36339) "a") (data (i32.const 36342) "a") (data (i32.const 36345) "a") (data (i32.const 36348) "a") (data (i32.const 36351) "a") (data (i32.const 36354) "a") (data (i32.const 36357) "a") (data (i32.const 36360) "a") (data (i32.const 36363) "a") (data (i32.const 36366) "a") (data (i32.const 36369) "a") (data (i32.const 36372) "a") (data (i32.const 36375) "a") (data (i32.const 36378) "a") (data (i32.const 36381) "a") (data (i32.const 36384) "a") (data (i32.const 36387) "a") (data (i32.const 36390) "a") (data (i32.const 36393) "a") (data (i32.const 36396) "a") (data (i32.const 36399) "a") (data (i32.const 36402) "a") (data (i32.const 36405) "a") (data (i32.const 36408) "a") (data (i32.const 36411) "a") (data (i32.const 36414) "a") (data (i32.const 36417) "a") (data (i32.const 36420) "a") (data (i32.const 36423) "a") (data (i32.const 36426) "a") (data (i32.const 36429) "a") (data (i32.const 36432) "a") (data (i32.const 36435) "a") (data (i32.const 36438) "a") (data (i32.const 36441) "a") (data (i32.const 36444) "a") (data (i32.const 36447) "a") (data (i32.const 36450) "a") (data (i32.const 36453) "a") (data (i32.const 36456) "a") (data (i32.const 36459) "a") (data (i32.const 36462) "a") (data (i32.const 36465) "a") (data (i32.const 36468) "a") (data (i32.const 36471) "a") (data (i32.const 36474) "a") (data (i32.const 36477) "a") (data (i32.const 36480) "a") (data (i32.const 36483) "a") (data (i32.const 36486) "a") (data (i32.const 36489) "a") (data (i32.const 36492) "a") (data (i32.const 36495) "a") (data (i32.const 36498) "a") (data (i32.const 36501) "a") (data (i32.const 36504) "a") (data (i32.const 36507) "a") (data (i32.const 36510) "a") (data (i32.const 36513) "a") (data (i32.const 36516) "a") (data (i32.const 36519) "a") (data (i32.const 36522) "a") (data (i32.const 36525) "a") (data (i32.const 36528) "a") (data (i32.const 36531) "a") (data (i32.const 36534) "a") (data (i32.const 36537) "a") (data (i32.const 36540) "a") (data (i32.const 36543) "a") (data (i32.const 36546) "a") (data (i32.const 36549) "a") (data (i32.const 36552) "a") (data (i32.const 36555) "a") (data (i32.const 36558) "a") (data (i32.const 36561) "a") (data (i32.const 36564) "a") (data (i32.const 36567) "a") (data (i32.const 36570) "a") (data (i32.const 36573) "a") (data (i32.const 36576) "a") (data (i32.const 36579) "a") (data (i32.const 36582) "a") (data (i32.const 36585) "a") (data (i32.const 36588) "a") (data (i32.const 36591) "a") (data (i32.const 36594) "a") (data (i32.const 36597) "a") (data (i32.const 36600) "a") (data (i32.const 36603) "a") (data (i32.const 36606) "a") (data (i32.const 36609) "a") (data (i32.const 36612) "a") (data (i32.const 36615) "a") (data (i32.const 36618) "a") (data (i32.const 36621) "a") (data (i32.const 36624) "a") (data (i32.const 36627) "a") (data (i32.const 36630) "a") (data (i32.const 36633) "a") (data (i32.const 36636) "a") (data (i32.const 36639) "a") (data (i32.const 36642) "a") (data (i32.const 36645) "a") (data (i32.const 36648) "a") (data (i32.const 36651) "a") (data (i32.const 36654) "a") (data (i32.const 36657) "a") (data (i32.const 36660) "a") (data (i32.const 36663) "a") (data (i32.const 36666) "a") (data (i32.const 36669) "a") (data (i32.const 36672) "a") (data (i32.const 36675) "a") (data (i32.const 36678) "a") (data (i32.const 36681) "a") (data (i32.const 36684) "a") (data (i32.const 36687) "a") (data (i32.const 36690) "a") (data (i32.const 36693) "a") (data (i32.const 36696) "a") (data (i32.const 36699) "a") (data (i32.const 36702) "a") (data (i32.const 36705) "a") (data (i32.const 36708) "a") (data (i32.const 36711) "a") (data (i32.const 36714) "a") (data (i32.const 36717) "a") (data (i32.const 36720) "a") (data (i32.const 36723) "a") (data (i32.const 36726) "a") (data (i32.const 36729) "a") (data (i32.const 36732) "a") (data (i32.const 36735) "a") (data (i32.const 36738) "a") (data (i32.const 36741) "a") (data (i32.const 36744) "a") (data (i32.const 36747) "a") (data (i32.const 36750) "a") (data (i32.const 36753) "a") (data (i32.const 36756) "a") (data (i32.const 36759) "a") (data (i32.const 36762) "a") (data (i32.const 36765) "a") (data (i32.const 36768) "a") (data (i32.const 36771) "a") (data (i32.const 36774) "a") (data (i32.const 36777) "a") (data (i32.const 36780) "a") (data (i32.const 36783) "a") (data (i32.const 36786) "a") (data (i32.const 36789) "a") (data (i32.const 36792) "a") (data (i32.const 36795) "a") (data (i32.const 36798) "a") (data (i32.const 36801) "a") (data (i32.const 36804) "a") (data (i32.const 36807) "a") (data (i32.const 36810) "a") (data (i32.const 36813) "a") (data (i32.const 36816) "a") (data (i32.const 36819) "a") (data (i32.const 36822) "a") (data (i32.const 36825) "a") (data (i32.const 36828) "a") (data (i32.const 36831) "a") (data (i32.const 36834) "a") (data (i32.const 36837) "a") (data (i32.const 36840) "a") (data (i32.const 36843) "a") (data (i32.const 36846) "a") (data (i32.const 36849) "a") (data (i32.const 36852) "a") (data (i32.const 36855) "a") (data (i32.const 36858) "a") (data (i32.const 36861) "a") (data (i32.const 36864) "a") (data (i32.const 36867) "a") (data (i32.const 36870) "a") (data (i32.const 36873) "a") (data (i32.const 36876) "a") (data (i32.const 36879) "a") (data (i32.const 36882) "a") (data (i32.const 36885) "a") (data (i32.const 36888) "a") (data (i32.const 36891) "a") (data (i32.const 36894) "a") (data (i32.const 36897) "a") (data (i32.const 36900) "a") (data (i32.const 36903) "a") (data (i32.const 36906) "a") (data (i32.const 36909) "a") (data (i32.const 36912) "a") (data (i32.const 36915) "a") (data (i32.const 36918) "a") (data (i32.const 36921) "a") (data (i32.const 36924) "a") (data (i32.const 36927) "a") (data (i32.const 36930) "a") (data (i32.const 36933) "a") (data (i32.const 36936) "a") (data (i32.const 36939) "a") (data (i32.const 36942) "a") (data (i32.const 36945) "a") (data (i32.const 36948) "a") (data (i32.const 36951) "a") (data (i32.const 36954) "a") (data (i32.const 36957) "a") (data (i32.const 36960) "a") (data (i32.const 36963) "a") (data (i32.const 36966) "a") (data (i32.const 36969) "a") (data (i32.const 36972) "a") (data (i32.const 36975) "a") (data (i32.const 36978) "a") (data (i32.const 36981) "a") (data (i32.const 36984) "a") (data (i32.const 36987) "a") (data (i32.const 36990) "a") (data (i32.const 36993) "a") (data (i32.const 36996) "a") (data (i32.const 36999) "a") (data (i32.const 37002) "a") (data (i32.const 37005) "a") (data (i32.const 37008) "a") (data (i32.const 37011) "a") (data (i32.const 37014) "a") (data (i32.const 37017) "a") (data (i32.const 37020) "a") (data (i32.const 37023) "a") (data (i32.const 37026) "a") (data (i32.const 37029) "a") (data (i32.const 37032) "a") (data (i32.const 37035) "a") (data (i32.const 37038) "a") (data (i32.const 37041) "a") (data (i32.const 37044) "a") (data (i32.const 37047) "a") (data (i32.const 37050) "a") (data (i32.const 37053) "a") (data (i32.const 37056) "a") (data (i32.const 37059) "a") (data (i32.const 37062) "a") (data (i32.const 37065) "a") (data (i32.const 37068) "a") (data (i32.const 37071) "a") (data (i32.const 37074) "a") (data (i32.const 37077) "a") (data (i32.const 37080) "a") (data (i32.const 37083) "a") (data (i32.const 37086) "a") (data (i32.const 37089) "a") (data (i32.const 37092) "a") (data (i32.const 37095) "a") (data (i32.const 37098) "a") (data (i32.const 37101) "a") (data (i32.const 37104) "a") (data (i32.const 37107) "a") (data (i32.const 37110) "a") (data (i32.const 37113) "a") (data (i32.const 37116) "a") (data (i32.const 37119) "a") (data (i32.const 37122) "a") (data (i32.const 37125) "a") (data (i32.const 37128) "a") (data (i32.const 37131) "a") (data (i32.const 37134) "a") (data (i32.const 37137) "a") (data (i32.const 37140) "a") (data (i32.const 37143) "a") (data (i32.const 37146) "a") (data (i32.const 37149) "a") (data (i32.const 37152) "a") (data (i32.const 37155) "a") (data (i32.const 37158) "a") (data (i32.const 37161) "a") (data (i32.const 37164) "a") (data (i32.const 37167) "a") (data (i32.const 37170) "a") (data (i32.const 37173) "a") (data (i32.const 37176) "a") (data (i32.const 37179) "a") (data (i32.const 37182) "a") (data (i32.const 37185) "a") (data (i32.const 37188) "a") (data (i32.const 37191) "a") (data (i32.const 37194) "a") (data (i32.const 37197) "a") (data (i32.const 37200) "a") (data (i32.const 37203) "a") (data (i32.const 37206) "a") (data (i32.const 37209) "a") (data (i32.const 37212) "a") (data (i32.const 37215) "a") (data (i32.const 37218) "a") (data (i32.const 37221) "a") (data (i32.const 37224) "a") (data (i32.const 37227) "a") (data (i32.const 37230) "a") (data (i32.const 37233) "a") (data (i32.const 37236) "a") (data (i32.const 37239) "a") (data (i32.const 37242) "a") (data (i32.const 37245) "a") (data (i32.const 37248) "a") (data (i32.const 37251) "a") (data (i32.const 37254) "a") (data (i32.const 37257) "a") (data (i32.const 37260) "a") (data (i32.const 37263) "a") (data (i32.const 37266) "a") (data (i32.const 37269) "a") (data (i32.const 37272) "a") (data (i32.const 37275) "a") (data (i32.const 37278) "a") (data (i32.const 37281) "a") (data (i32.const 37284) "a") (data (i32.const 37287) "a") (data (i32.const 37290) "a") (data (i32.const 37293) "a") (data (i32.const 37296) "a") (data (i32.const 37299) "a") (data (i32.const 37302) "a") (data (i32.const 37305) "a") (data (i32.const 37308) "a") (data (i32.const 37311) "a") (data (i32.const 37314) "a") (data (i32.const 37317) "a") (data (i32.const 37320) "a") (data (i32.const 37323) "a") (data (i32.const 37326) "a") (data (i32.const 37329) "a") (data (i32.const 37332) "a") (data (i32.const 37335) "a") (data (i32.const 37338) "a") (data (i32.const 37341) "a") (data (i32.const 37344) "a") (data (i32.const 37347) "a") (data (i32.const 37350) "a") (data (i32.const 37353) "a") (data (i32.const 37356) "a") (data (i32.const 37359) "a") (data (i32.const 37362) "a") (data (i32.const 37365) "a") (data (i32.const 37368) "a") (data (i32.const 37371) "a") (data (i32.const 37374) "a") (data (i32.const 37377) "a") (data (i32.const 37380) "a") (data (i32.const 37383) "a") (data (i32.const 37386) "a") (data (i32.const 37389) "a") (data (i32.const 37392) "a") (data (i32.const 37395) "a") (data (i32.const 37398) "a") (data (i32.const 37401) "a") (data (i32.const 37404) "a") (data (i32.const 37407) "a") (data (i32.const 37410) "a") (data (i32.const 37413) "a") (data (i32.const 37416) "a") (data (i32.const 37419) "a") (data (i32.const 37422) "a") (data (i32.const 37425) "a") (data (i32.const 37428) "a") (data (i32.const 37431) "a") (data (i32.const 37434) "a") (data (i32.const 37437) "a") (data (i32.const 37440) "a") (data (i32.const 37443) "a") (data (i32.const 37446) "a") (data (i32.const 37449) "a") (data (i32.const 37452) "a") (data (i32.const 37455) "a") (data (i32.const 37458) "a") (data (i32.const 37461) "a") (data (i32.const 37464) "a") (data (i32.const 37467) "a") (data (i32.const 37470) "a") (data (i32.const 37473) "a") (data (i32.const 37476) "a") (data (i32.const 37479) "a") (data (i32.const 37482) "a") (data (i32.const 37485) "a") (data (i32.const 37488) "a") (data (i32.const 37491) "a") (data (i32.const 37494) "a") (data (i32.const 37497) "a") (data (i32.const 37500) "a") (data (i32.const 37503) "a") (data (i32.const 37506) "a") (data (i32.const 37509) "a") (data (i32.const 37512) "a") (data (i32.const 37515) "a") (data (i32.const 37518) "a") (data (i32.const 37521) "a") (data (i32.const 37524) "a") (data (i32.const 37527) "a") (data (i32.const 37530) "a") (data (i32.const 37533) "a") (data (i32.const 37536) "a") (data (i32.const 37539) "a") (data (i32.const 37542) "a") (data (i32.const 37545) "a") (data (i32.const 37548) "a") (data (i32.const 37551) "a") (data (i32.const 37554) "a") (data (i32.const 37557) "a") (data (i32.const 37560) "a") (data (i32.const 37563) "a") (data (i32.const 37566) "a") (data (i32.const 37569) "a") (data (i32.const 37572) "a") (data (i32.const 37575) "a") (data (i32.const 37578) "a") (data (i32.const 37581) "a") (data (i32.const 37584) "a") (data (i32.const 37587) "a") (data (i32.const 37590) "a") (data (i32.const 37593) "a") (data (i32.const 37596) "a") (data (i32.const 37599) "a") (data (i32.const 37602) "a") (data (i32.const 37605) "a") (data (i32.const 37608) "a") (data (i32.const 37611) "a") (data (i32.const 37614) "a") (data (i32.const 37617) "a") (data (i32.const 37620) "a") (data (i32.const 37623) "a") (data (i32.const 37626) "a") (data (i32.const 37629) "a") (data (i32.const 37632) "a") (data (i32.const 37635) "a") (data (i32.const 37638) "a") (data (i32.const 37641) "a") (data (i32.const 37644) "a") (data (i32.const 37647) "a") (data (i32.const 37650) "a") (data (i32.const 37653) "a") (data (i32.const 37656) "a") (data (i32.const 37659) "a") (data (i32.const 37662) "a") (data (i32.const 37665) "a") (data (i32.const 37668) "a") (data (i32.const 37671) "a") (data (i32.const 37674) "a") (data (i32.const 37677) "a") (data (i32.const 37680) "a") (data (i32.const 37683) "a") (data (i32.const 37686) "a") (data (i32.const 37689) "a") (data (i32.const 37692) "a") (data (i32.const 37695) "a") (data (i32.const 37698) "a") (data (i32.const 37701) "a") (data (i32.const 37704) "a") (data (i32.const 37707) "a") (data (i32.const 37710) "a") (data (i32.const 37713) "a") (data (i32.const 37716) "a") (data (i32.const 37719) "a") (data (i32.const 37722) "a") (data (i32.const 37725) "a") (data (i32.const 37728) "a") (data (i32.const 37731) "a") (data (i32.const 37734) "a") (data (i32.const 37737) "a") (data (i32.const 37740) "a") (data (i32.const 37743) "a") (data (i32.const 37746) "a") (data (i32.const 37749) "a") (data (i32.const 37752) "a") (data (i32.const 37755) "a") (data (i32.const 37758) "a") (data (i32.const 37761) "a") (data (i32.const 37764) "a") (data (i32.const 37767) "a") (data (i32.const 37770) "a") (data (i32.const 37773) "a") (data (i32.const 37776) "a") (data (i32.const 37779) "a") (data (i32.const 37782) "a") (data (i32.const 37785) "a") (data (i32.const 37788) "a") (data (i32.const 37791) "a") (data (i32.const 37794) "a") (data (i32.const 37797) "a") (data (i32.const 37800) "a") (data (i32.const 37803) "a") (data (i32.const 37806) "a") (data (i32.const 37809) "a") (data (i32.const 37812) "a") (data (i32.const 37815) "a") (data (i32.const 37818) "a") (data (i32.const 37821) "a") (data (i32.const 37824) "a") (data (i32.const 37827) "a") (data (i32.const 37830) "a") (data (i32.const 37833) "a") (data (i32.const 37836) "a") (data (i32.const 37839) "a") (data (i32.const 37842) "a") (data (i32.const 37845) "a") (data (i32.const 37848) "a") (data (i32.const 37851) "a") (data (i32.const 37854) "a") (data (i32.const 37857) "a") (data (i32.const 37860) "a") (data (i32.const 37863) "a") (data (i32.const 37866) "a") (data (i32.const 37869) "a") (data (i32.const 37872) "a") (data (i32.const 37875) "a") (data (i32.const 37878) "a") (data (i32.const 37881) "a") (data (i32.const 37884) "a") (data (i32.const 37887) "a") (data (i32.const 37890) "a") (data (i32.const 37893) "a") (data (i32.const 37896) "a") (data (i32.const 37899) "a") (data (i32.const 37902) "a") (data (i32.const 37905) "a") (data (i32.const 37908) "a") (data (i32.const 37911) "a") (data (i32.const 37914) "a") (data (i32.const 37917) "a") (data (i32.const 37920) "a") (data (i32.const 37923) "a") (data (i32.const 37926) "a") (data (i32.const 37929) "a") (data (i32.const 37932) "a") (data (i32.const 37935) "a") (data (i32.const 37938) "a") (data (i32.const 37941) "a") (data (i32.const 37944) "a") (data (i32.const 37947) "a") (data (i32.const 37950) "a") (data (i32.const 37953) "a") (data (i32.const 37956) "a") (data (i32.const 37959) "a") (data (i32.const 37962) "a") (data (i32.const 37965) "a") (data (i32.const 37968) "a") (data (i32.const 37971) "a") (data (i32.const 37974) "a") (data (i32.const 37977) "a") (data (i32.const 37980) "a") (data (i32.const 37983) "a") (data (i32.const 37986) "a") (data (i32.const 37989) "a") (data (i32.const 37992) "a") (data (i32.const 37995) "a") (data (i32.const 37998) "a") (data (i32.const 38001) "a") (data (i32.const 38004) "a") (data (i32.const 38007) "a") (data (i32.const 38010) "a") (data (i32.const 38013) "a") (data (i32.const 38016) "a") (data (i32.const 38019) "a") (data (i32.const 38022) "a") (data (i32.const 38025) "a") (data (i32.const 38028) "a") (data (i32.const 38031) "a") (data (i32.const 38034) "a") (data (i32.const 38037) "a") (data (i32.const 38040) "a") (data (i32.const 38043) "a") (data (i32.const 38046) "a") (data (i32.const 38049) "a") (data (i32.const 38052) "a") (data (i32.const 38055) "a") (data (i32.const 38058) "a") (data (i32.const 38061) "a") (data (i32.const 38064) "a") (data (i32.const 38067) "a") (data (i32.const 38070) "a") (data (i32.const 38073) "a") (data (i32.const 38076) "a") (data (i32.const 38079) "a") (data (i32.const 38082) "a") (data (i32.const 38085) "a") (data (i32.const 38088) "a") (data (i32.const 38091) "a") (data (i32.const 38094) "a") (data (i32.const 38097) "a") (data (i32.const 38100) "a") (data (i32.const 38103) "a") (data (i32.const 38106) "a") (data (i32.const 38109) "a") (data (i32.const 38112) "a") (data (i32.const 38115) "a") (data (i32.const 38118) "a") (data (i32.const 38121) "a") (data (i32.const 38124) "a") (data (i32.const 38127) "a") (data (i32.const 38130) "a") (data (i32.const 38133) "a") (data (i32.const 38136) "a") (data (i32.const 38139) "a") (data (i32.const 38142) "a") (data (i32.const 38145) "a") (data (i32.const 38148) "a") (data (i32.const 38151) "a") (data (i32.const 38154) "a") (data (i32.const 38157) "a") (data (i32.const 38160) "a") (data (i32.const 38163) "a") (data (i32.const 38166) "a") (data (i32.const 38169) "a") (data (i32.const 38172) "a") (data (i32.const 38175) "a") (data (i32.const 38178) "a") (data (i32.const 38181) "a") (data (i32.const 38184) "a") (data (i32.const 38187) "a") (data (i32.const 38190) "a") (data (i32.const 38193) "a") (data (i32.const 38196) "a") (data (i32.const 38199) "a") (data (i32.const 38202) "a") (data (i32.const 38205) "a") (data (i32.const 38208) "a") (data (i32.const 38211) "a") (data (i32.const 38214) "a") (data (i32.const 38217) "a") (data (i32.const 38220) "a") (data (i32.const 38223) "a") (data (i32.const 38226) "a") (data (i32.const 38229) "a") (data (i32.const 38232) "a") (data (i32.const 38235) "a") (data (i32.const 38238) "a") (data (i32.const 38241) "a") (data (i32.const 38244) "a") (data (i32.const 38247) "a") (data (i32.const 38250) "a") (data (i32.const 38253) "a") (data (i32.const 38256) "a") (data (i32.const 38259) "a") (data (i32.const 38262) "a") (data (i32.const 38265) "a") (data (i32.const 38268) "a") (data (i32.const 38271) "a") (data (i32.const 38274) "a") (data (i32.const 38277) "a") (data (i32.const 38280) "a") (data (i32.const 38283) "a") (data (i32.const 38286) "a") (data (i32.const 38289) "a") (data (i32.const 38292) "a") (data (i32.const 38295) "a") (data (i32.const 38298) "a") (data (i32.const 38301) "a") (data (i32.const 38304) "a") (data (i32.const 38307) "a") (data (i32.const 38310) "a") (data (i32.const 38313) "a") (data (i32.const 38316) "a") (data (i32.const 38319) "a") (data (i32.const 38322) "a") (data (i32.const 38325) "a") (data (i32.const 38328) "a") (data (i32.const 38331) "a") (data (i32.const 38334) "a") (data (i32.const 38337) "a") (data (i32.const 38340) "a") (data (i32.const 38343) "a") (data (i32.const 38346) "a") (data (i32.const 38349) "a") (data (i32.const 38352) "a") (data (i32.const 38355) "a") (data (i32.const 38358) "a") (data (i32.const 38361) "a") (data (i32.const 38364) "a") (data (i32.const 38367) "a") (data (i32.const 38370) "a") (data (i32.const 38373) "a") (data (i32.const 38376) "a") (data (i32.const 38379) "a") (data (i32.const 38382) "a") (data (i32.const 38385) "a") (data (i32.const 38388) "a") (data (i32.const 38391) "a") (data (i32.const 38394) "a") (data (i32.const 38397) "a") (data (i32.const 38400) "a") (data (i32.const 38403) "a") (data (i32.const 38406) "a") (data (i32.const 38409) "a") (data (i32.const 38412) "a") (data (i32.const 38415) "a") (data (i32.const 38418) "a") (data (i32.const 38421) "a") (data (i32.const 38424) "a") (data (i32.const 38427) "a") (data (i32.const 38430) "a") (data (i32.const 38433) "a") (data (i32.const 38436) "a") (data (i32.const 38439) "a") (data (i32.const 38442) "a") (data (i32.const 38445) "a") (data (i32.const 38448) "a") (data (i32.const 38451) "a") (data (i32.const 38454) "a") (data (i32.const 38457) "a") (data (i32.const 38460) "a") (data (i32.const 38463) "a") (data (i32.const 38466) "a") (data (i32.const 38469) "a") (data (i32.const 38472) "a") (data (i32.const 38475) "a") (data (i32.const 38478) "a") (data (i32.const 38481) "a") (data (i32.const 38484) "a") (data (i32.const 38487) "a") (data (i32.const 38490) "a") (data (i32.const 38493) "a") (data (i32.const 38496) "a") (data (i32.const 38499) "a") (data (i32.const 38502) "a") (data (i32.const 38505) "a") (data (i32.const 38508) "a") (data (i32.const 38511) "a") (data (i32.const 38514) "a") (data (i32.const 38517) "a") (data (i32.const 38520) "a") (data (i32.const 38523) "a") (data (i32.const 38526) "a") (data (i32.const 38529) "a") (data (i32.const 38532) "a") (data (i32.const 38535) "a") (data (i32.const 38538) "a") (data (i32.const 38541) "a") (data (i32.const 38544) "a") (data (i32.const 38547) "a") (data (i32.const 38550) "a") (data (i32.const 38553) "a") (data (i32.const 38556) "a") (data (i32.const 38559) "a") (data (i32.const 38562) "a") (data (i32.const 38565) "a") (data (i32.const 38568) "a") (data (i32.const 38571) "a") (data (i32.const 38574) "a") (data (i32.const 38577) "a") (data (i32.const 38580) "a") (data (i32.const 38583) "a") (data (i32.const 38586) "a") (data (i32.const 38589) "a") (data (i32.const 38592) "a") (data (i32.const 38595) "a") (data (i32.const 38598) "a") (data (i32.const 38601) "a") (data (i32.const 38604) "a") (data (i32.const 38607) "a") (data (i32.const 38610) "a") (data (i32.const 38613) "a") (data (i32.const 38616) "a") (data (i32.const 38619) "a") (data (i32.const 38622) "a") (data (i32.const 38625) "a") (data (i32.const 38628) "a") (data (i32.const 38631) "a") (data (i32.const 38634) "a") (data (i32.const 38637) "a") (data (i32.const 38640) "a") (data (i32.const 38643) "a") (data (i32.const 38646) "a") (data (i32.const 38649) "a") (data (i32.const 38652) "a") (data (i32.const 38655) "a") (data (i32.const 38658) "a") (data (i32.const 38661) "a") (data (i32.const 38664) "a") (data (i32.const 38667) "a") (data (i32.const 38670) "a") (data (i32.const 38673) "a") (data (i32.const 38676) "a") (data (i32.const 38679) "a") (data (i32.const 38682) "a") (data (i32.const 38685) "a") (data (i32.const 38688) "a") (data (i32.const 38691) "a") (data (i32.const 38694) "a") (data (i32.const 38697) "a") (data (i32.const 38700) "a") (data (i32.const 38703) "a") (data (i32.const 38706) "a") (data (i32.const 38709) "a") (data (i32.const 38712) "a") (data (i32.const 38715) "a") (data (i32.const 38718) "a") (data (i32.const 38721) "a") (data (i32.const 38724) "a") (data (i32.const 38727) "a") (data (i32.const 38730) "a") (data (i32.const 38733) "a") (data (i32.const 38736) "a") (data (i32.const 38739) "a") (data (i32.const 38742) "a") (data (i32.const 38745) "a") (data (i32.const 38748) "a") (data (i32.const 38751) "a") (data (i32.const 38754) "a") (data (i32.const 38757) "a") (data (i32.const 38760) "a") (data (i32.const 38763) "a") (data (i32.const 38766) "a") (data (i32.const 38769) "a") (data (i32.const 38772) "a") (data (i32.const 38775) "a") (data (i32.const 38778) "a") (data (i32.const 38781) "a") (data (i32.const 38784) "a") (data (i32.const 38787) "a") (data (i32.const 38790) "a") (data (i32.const 38793) "a") (data (i32.const 38796) "a") (data (i32.const 38799) "a") (data (i32.const 38802) "a") (data (i32.const 38805) "a") (data (i32.const 38808) "a") (data (i32.const 38811) "a") (data (i32.const 38814) "a") (data (i32.const 38817) "a") (data (i32.const 38820) "a") (data (i32.const 38823) "a") (data (i32.const 38826) "a") (data (i32.const 38829) "a") (data (i32.const 38832) "a") (data (i32.const 38835) "a") (data (i32.const 38838) "a") (data (i32.const 38841) "a") (data (i32.const 38844) "a") (data (i32.const 38847) "a") (data (i32.const 38850) "a") (data (i32.const 38853) "a") (data (i32.const 38856) "a") (data (i32.const 38859) "a") (data (i32.const 38862) "a") (data (i32.const 38865) "a") (data (i32.const 38868) "a") (data (i32.const 38871) "a") (data (i32.const 38874) "a") (data (i32.const 38877) "a") (data (i32.const 38880) "a") (data (i32.const 38883) "a") (data (i32.const 38886) "a") (data (i32.const 38889) "a") (data (i32.const 38892) "a") (data (i32.const 38895) "a") (data (i32.const 38898) "a") (data (i32.const 38901) "a") (data (i32.const 38904) "a") (data (i32.const 38907) "a") (data (i32.const 38910) "a") (data (i32.const 38913) "a") (data (i32.const 38916) "a") (data (i32.const 38919) "a") (data (i32.const 38922) "a") (data (i32.const 38925) "a") (data (i32.const 38928) "a") (data (i32.const 38931) "a") (data (i32.const 38934) "a") (data (i32.const 38937) "a") (data (i32.const 38940) "a") (data (i32.const 38943) "a") (data (i32.const 38946) "a") (data (i32.const 38949) "a") (data (i32.const 38952) "a") (data (i32.const 38955) "a") (data (i32.const 38958) "a") (data (i32.const 38961) "a") (data (i32.const 38964) "a") (data (i32.const 38967) "a") (data (i32.const 38970) "a") (data (i32.const 38973) "a") (data (i32.const 38976) "a") (data (i32.const 38979) "a") (data (i32.const 38982) "a") (data (i32.const 38985) "a") (data (i32.const 38988) "a") (data (i32.const 38991) "a") (data (i32.const 38994) "a") (data (i32.const 38997) "a") (data (i32.const 39000) "a") (data (i32.const 39003) "a") (data (i32.const 39006) "a") (data (i32.const 39009) "a") (data (i32.const 39012) "a") (data (i32.const 39015) "a") (data (i32.const 39018) "a") (data (i32.const 39021) "a") (data (i32.const 39024) "a") (data (i32.const 39027) "a") (data (i32.const 39030) "a") (data (i32.const 39033) "a") (data (i32.const 39036) "a") (data (i32.const 39039) "a") (data (i32.const 39042) "a") (data (i32.const 39045) "a") (data (i32.const 39048) "a") (data (i32.const 39051) "a") (data (i32.const 39054) "a") (data (i32.const 39057) "a") (data (i32.const 39060) "a") (data (i32.const 39063) "a") (data (i32.const 39066) "a") (data (i32.const 39069) "a") (data (i32.const 39072) "a") (data (i32.const 39075) "a") (data (i32.const 39078) "a") (data (i32.const 39081) "a") (data (i32.const 39084) "a") (data (i32.const 39087) "a") (data (i32.const 39090) "a") (data (i32.const 39093) "a") (data (i32.const 39096) "a") (data (i32.const 39099) "a") (data (i32.const 39102) "a") (data (i32.const 39105) "a") (data (i32.const 39108) "a") (data (i32.const 39111) "a") (data (i32.const 39114) "a") (data (i32.const 39117) "a") (data (i32.const 39120) "a") (data (i32.const 39123) "a") (data (i32.const 39126) "a") (data (i32.const 39129) "a") (data (i32.const 39132) "a") (data (i32.const 39135) "a") (data (i32.const 39138) "a") (data (i32.const 39141) "a") (data (i32.const 39144) "a") (data (i32.const 39147) "a") (data (i32.const 39150) "a") (data (i32.const 39153) "a") (data (i32.const 39156) "a") (data (i32.const 39159) "a") (data (i32.const 39162) "a") (data (i32.const 39165) "a") (data (i32.const 39168) "a") (data (i32.const 39171) "a") (data (i32.const 39174) "a") (data (i32.const 39177) "a") (data (i32.const 39180) "a") (data (i32.const 39183) "a") (data (i32.const 39186) "a") (data (i32.const 39189) "a") (data (i32.const 39192) "a") (data (i32.const 39195) "a") (data (i32.const 39198) "a") (data (i32.const 39201) "a") (data (i32.const 39204) "a") (data (i32.const 39207) "a") (data (i32.const 39210) "a") (data (i32.const 39213) "a") (data (i32.const 39216) "a") (data (i32.const 39219) "a") (data (i32.const 39222) "a") (data (i32.const 39225) "a") (data (i32.const 39228) "a") (data (i32.const 39231) "a") (data (i32.const 39234) "a") (data (i32.const 39237) "a") (data (i32.const 39240) "a") (data (i32.const 39243) "a") (data (i32.const 39246) "a") (data (i32.const 39249) "a") (data (i32.const 39252) "a") (data (i32.const 39255) "a") (data (i32.const 39258) "a") (data (i32.const 39261) "a") (data (i32.const 39264) "a") (data (i32.const 39267) "a") (data (i32.const 39270) "a") (data (i32.const 39273) "a") (data (i32.const 39276) "a") (data (i32.const 39279) "a") (data (i32.const 39282) "a") (data (i32.const 39285) "a") (data (i32.const 39288) "a") (data (i32.const 39291) "a") (data (i32.const 39294) "a") (data (i32.const 39297) "a") (data (i32.const 39300) "a") (data (i32.const 39303) "a") (data (i32.const 39306) "a") (data (i32.const 39309) "a") (data (i32.const 39312) "a") (data (i32.const 39315) "a") (data (i32.const 39318) "a") (data (i32.const 39321) "a") (data (i32.const 39324) "a") (data (i32.const 39327) "a") (data (i32.const 39330) "a") (data (i32.const 39333) "a") (data (i32.const 39336) "a") (data (i32.const 39339) "a") (data (i32.const 39342) "a") (data (i32.const 39345) "a") (data (i32.const 39348) "a") (data (i32.const 39351) "a") (data (i32.const 39354) "a") (data (i32.const 39357) "a") (data (i32.const 39360) "a") (data (i32.const 39363) "a") (data (i32.const 39366) "a") (data (i32.const 39369) "a") (data (i32.const 39372) "a") (data (i32.const 39375) "a") (data (i32.const 39378) "a") (data (i32.const 39381) "a") (data (i32.const 39384) "a") (data (i32.const 39387) "a") (data (i32.const 39390) "a") (data (i32.const 39393) "a") (data (i32.const 39396) "a") (data (i32.const 39399) "a") (data (i32.const 39402) "a") (data (i32.const 39405) "a") (data (i32.const 39408) "a") (data (i32.const 39411) "a") (data (i32.const 39414) "a") (data (i32.const 39417) "a") (data (i32.const 39420) "a") (data (i32.const 39423) "a") (data (i32.const 39426) "a") (data (i32.const 39429) "a") (data (i32.const 39432) "a") (data (i32.const 39435) "a") (data (i32.const 39438) "a") (data (i32.const 39441) "a") (data (i32.const 39444) "a") (data (i32.const 39447) "a") (data (i32.const 39450) "a") (data (i32.const 39453) "a") (data (i32.const 39456) "a") (data (i32.const 39459) "a") (data (i32.const 39462) "a") (data (i32.const 39465) "a") (data (i32.const 39468) "a") (data (i32.const 39471) "a") (data (i32.const 39474) "a") (data (i32.const 39477) "a") (data (i32.const 39480) "a") (data (i32.const 39483) "a") (data (i32.const 39486) "a") (data (i32.const 39489) "a") (data (i32.const 39492) "a") (data (i32.const 39495) "a") (data (i32.const 39498) "a") (data (i32.const 39501) "a") (data (i32.const 39504) "a") (data (i32.const 39507) "a") (data (i32.const 39510) "a") (data (i32.const 39513) "a") (data (i32.const 39516) "a") (data (i32.const 39519) "a") (data (i32.const 39522) "a") (data (i32.const 39525) "a") (data (i32.const 39528) "a") (data (i32.const 39531) "a") (data (i32.const 39534) "a") (data (i32.const 39537) "a") (data (i32.const 39540) "a") (data (i32.const 39543) "a") (data (i32.const 39546) "a") (data (i32.const 39549) "a") (data (i32.const 39552) "a") (data (i32.const 39555) "a") (data (i32.const 39558) "a") (data (i32.const 39561) "a") (data (i32.const 39564) "a") (data (i32.const 39567) "a") (data (i32.const 39570) "a") (data (i32.const 39573) "a") (data (i32.const 39576) "a") (data (i32.const 39579) "a") (data (i32.const 39582) "a") (data (i32.const 39585) "a") (data (i32.const 39588) "a") (data (i32.const 39591) "a") (data (i32.const 39594) "a") (data (i32.const 39597) "a") (data (i32.const 39600) "a") (data (i32.const 39603) "a") (data (i32.const 39606) "a") (data (i32.const 39609) "a") (data (i32.const 39612) "a") (data (i32.const 39615) "a") (data (i32.const 39618) "a") (data (i32.const 39621) "a") (data (i32.const 39624) "a") (data (i32.const 39627) "a") (data (i32.const 39630) "a") (data (i32.const 39633) "a") (data (i32.const 39636) "a") (data (i32.const 39639) "a") (data (i32.const 39642) "a") (data (i32.const 39645) "a") (data (i32.const 39648) "a") (data (i32.const 39651) "a") (data (i32.const 39654) "a") (data (i32.const 39657) "a") (data (i32.const 39660) "a") (data (i32.const 39663) "a") (data (i32.const 39666) "a") (data (i32.const 39669) "a") (data (i32.const 39672) "a") (data (i32.const 39675) "a") (data (i32.const 39678) "a") (data (i32.const 39681) "a") (data (i32.const 39684) "a") (data (i32.const 39687) "a") (data (i32.const 39690) "a") (data (i32.const 39693) "a") (data (i32.const 39696) "a") (data (i32.const 39699) "a") (data (i32.const 39702) "a") (data (i32.const 39705) "a") (data (i32.const 39708) "a") (data (i32.const 39711) "a") (data (i32.const 39714) "a") (data (i32.const 39717) "a") (data (i32.const 39720) "a") (data (i32.const 39723) "a") (data (i32.const 39726) "a") (data (i32.const 39729) "a") (data (i32.const 39732) "a") (data (i32.const 39735) "a") (data (i32.const 39738) "a") (data (i32.const 39741) "a") (data (i32.const 39744) "a") (data (i32.const 39747) "a") (data (i32.const 39750) "a") (data (i32.const 39753) "a") (data (i32.const 39756) "a") (data (i32.const 39759) "a") (data (i32.const 39762) "a") (data (i32.const 39765) "a") (data (i32.const 39768) "a") (data (i32.const 39771) "a") (data (i32.const 39774) "a") (data (i32.const 39777) "a") (data (i32.const 39780) "a") (data (i32.const 39783) "a") (data (i32.const 39786) "a") (data (i32.const 39789) "a") (data (i32.const 39792) "a") (data (i32.const 39795) "a") (data (i32.const 39798) "a") (data (i32.const 39801) "a") (data (i32.const 39804) "a") (data (i32.const 39807) "a") (data (i32.const 39810) "a") (data (i32.const 39813) "a") (data (i32.const 39816) "a") (data (i32.const 39819) "a") (data (i32.const 39822) "a") (data (i32.const 39825) "a") (data (i32.const 39828) "a") (data (i32.const 39831) "a") (data (i32.const 39834) "a") (data (i32.const 39837) "a") (data (i32.const 39840) "a") (data (i32.const 39843) "a") (data (i32.const 39846) "a") (data (i32.const 39849) "a") (data (i32.const 39852) "a") (data (i32.const 39855) "a") (data (i32.const 39858) "a") (data (i32.const 39861) "a") (data (i32.const 39864) "a") (data (i32.const 39867) "a") (data (i32.const 39870) "a") (data (i32.const 39873) "a") (data (i32.const 39876) "a") (data (i32.const 39879) "a") (data (i32.const 39882) "a") (data (i32.const 39885) "a") (data (i32.const 39888) "a") (data (i32.const 39891) "a") (data (i32.const 39894) "a") (data (i32.const 39897) "a") (data (i32.const 39900) "a") (data (i32.const 39903) "a") (data (i32.const 39906) "a") (data (i32.const 39909) "a") (data (i32.const 39912) "a") (data (i32.const 39915) "a") (data (i32.const 39918) "a") (data (i32.const 39921) "a") (data (i32.const 39924) "a") (data (i32.const 39927) "a") (data (i32.const 39930) "a") (data (i32.const 39933) "a") (data (i32.const 39936) "a") (data (i32.const 39939) "a") (data (i32.const 39942) "a") (data (i32.const 39945) "a") (data (i32.const 39948) "a") (data (i32.const 39951) "a") (data (i32.const 39954) "a") (data (i32.const 39957) "a") (data (i32.const 39960) "a") (data (i32.const 39963) "a") (data (i32.const 39966) "a") (data (i32.const 39969) "a") (data (i32.const 39972) "a") (data (i32.const 39975) "a") (data (i32.const 39978) "a") (data (i32.const 39981) "a") (data (i32.const 39984) "a") (data (i32.const 39987) "a") (data (i32.const 39990) "a") (data (i32.const 39993) "a") (data (i32.const 39996) "a") (data (i32.const 39999) "a") (data (i32.const 40002) "a") (data (i32.const 40005) "a") (data (i32.const 40008) "a") (data (i32.const 40011) "a") (data (i32.const 40014) "a") (data (i32.const 40017) "a") (data (i32.const 40020) "a") (data (i32.const 40023) "a") (data (i32.const 40026) "a") (data (i32.const 40029) "a") (data (i32.const 40032) "a") (data (i32.const 40035) "a") (data (i32.const 40038) "a") (data (i32.const 40041) "a") (data (i32.const 40044) "a") (data (i32.const 40047) "a") (data (i32.const 40050) "a") (data (i32.const 40053) "a") (data (i32.const 40056) "a") (data (i32.const 40059) "a") (data (i32.const 40062) "a") (data (i32.const 40065) "a") (data (i32.const 40068) "a") (data (i32.const 40071) "a") (data (i32.const 40074) "a") (data (i32.const 40077) "a") (data (i32.const 40080) "a") (data (i32.const 40083) "a") (data (i32.const 40086) "a") (data (i32.const 40089) "a") (data (i32.const 40092) "a") (data (i32.const 40095) "a") (data (i32.const 40098) "a") (data (i32.const 40101) "a") (data (i32.const 40104) "a") (data (i32.const 40107) "a") (data (i32.const 40110) "a") (data (i32.const 40113) "a") (data (i32.const 40116) "a") (data (i32.const 40119) "a") (data (i32.const 40122) "a") (data (i32.const 40125) "a") (data (i32.const 40128) "a") (data (i32.const 40131) "a") (data (i32.const 40134) "a") (data (i32.const 40137) "a") (data (i32.const 40140) "a") (data (i32.const 40143) "a") (data (i32.const 40146) "a") (data (i32.const 40149) "a") (data (i32.const 40152) "a") (data (i32.const 40155) "a") (data (i32.const 40158) "a") (data (i32.const 40161) "a") (data (i32.const 40164) "a") (data (i32.const 40167) "a") (data (i32.const 40170) "a") (data (i32.const 40173) "a") (data (i32.const 40176) "a") (data (i32.const 40179) "a") (data (i32.const 40182) "a") (data (i32.const 40185) "a") (data (i32.const 40188) "a") (data (i32.const 40191) "a") (data (i32.const 40194) "a") (data (i32.const 40197) "a") (data (i32.const 40200) "a") (data (i32.const 40203) "a") (data (i32.const 40206) "a") (data (i32.const 40209) "a") (data (i32.const 40212) "a") (data (i32.const 40215) "a") (data (i32.const 40218) "a") (data (i32.const 40221) "a") (data (i32.const 40224) "a") (data (i32.const 40227) "a") (data (i32.const 40230) "a") (data (i32.const 40233) "a") (data (i32.const 40236) "a") (data (i32.const 40239) "a") (data (i32.const 40242) "a") (data (i32.const 40245) "a") (data (i32.const 40248) "a") (data (i32.const 40251) "a") (data (i32.const 40254) "a") (data (i32.const 40257) "a") (data (i32.const 40260) "a") (data (i32.const 40263) "a") (data (i32.const 40266) "a") (data (i32.const 40269) "a") (data (i32.const 40272) "a") (data (i32.const 40275) "a") (data (i32.const 40278) "a") (data (i32.const 40281) "a") (data (i32.const 40284) "a") (data (i32.const 40287) "a") (data (i32.const 40290) "a") (data (i32.const 40293) "a") (data (i32.const 40296) "a") (data (i32.const 40299) "a") (data (i32.const 40302) "a") (data (i32.const 40305) "a") (data (i32.const 40308) "a") (data (i32.const 40311) "a") (data (i32.const 40314) "a") (data (i32.const 40317) "a") (data (i32.const 40320) "a") (data (i32.const 40323) "a") (data (i32.const 40326) "a") (data (i32.const 40329) "a") (data (i32.const 40332) "a") (data (i32.const 40335) "a") (data (i32.const 40338) "a") (data (i32.const 40341) "a") (data (i32.const 40344) "a") (data (i32.const 40347) "a") (data (i32.const 40350) "a") (data (i32.const 40353) "a") (data (i32.const 40356) "a") (data (i32.const 40359) "a") (data (i32.const 40362) "a") (data (i32.const 40365) "a") (data (i32.const 40368) "a") (data (i32.const 40371) "a") (data (i32.const 40374) "a") (data (i32.const 40377) "a") (data (i32.const 40380) "a") (data (i32.const 40383) "a") (data (i32.const 40386) "a") (data (i32.const 40389) "a") (data (i32.const 40392) "a") (data (i32.const 40395) "a") (data (i32.const 40398) "a") (data (i32.const 40401) "a") (data (i32.const 40404) "a") (data (i32.const 40407) "a") (data (i32.const 40410) "a") (data (i32.const 40413) "a") (data (i32.const 40416) "a") (data (i32.const 40419) "a") (data (i32.const 40422) "a") (data (i32.const 40425) "a") (data (i32.const 40428) "a") (data (i32.const 40431) "a") (data (i32.const 40434) "a") (data (i32.const 40437) "a") (data (i32.const 40440) "a") (data (i32.const 40443) "a") (data (i32.const 40446) "a") (data (i32.const 40449) "a") (data (i32.const 40452) "a") (data (i32.const 40455) "a") (data (i32.const 40458) "a") (data (i32.const 40461) "a") (data (i32.const 40464) "a") (data (i32.const 40467) "a") (data (i32.const 40470) "a") (data (i32.const 40473) "a") (data (i32.const 40476) "a") (data (i32.const 40479) "a") (data (i32.const 40482) "a") (data (i32.const 40485) "a") (data (i32.const 40488) "a") (data (i32.const 40491) "a") (data (i32.const 40494) "a") (data (i32.const 40497) "a") (data (i32.const 40500) "a") (data (i32.const 40503) "a") (data (i32.const 40506) "a") (data (i32.const 40509) "a") (data (i32.const 40512) "a") (data (i32.const 40515) "a") (data (i32.const 40518) "a") (data (i32.const 40521) "a") (data (i32.const 40524) "a") (data (i32.const 40527) "a") (data (i32.const 40530) "a") (data (i32.const 40533) "a") (data (i32.const 40536) "a") (data (i32.const 40539) "a") (data (i32.const 40542) "a") (data (i32.const 40545) "a") (data (i32.const 40548) "a") (data (i32.const 40551) "a") (data (i32.const 40554) "a") (data (i32.const 40557) "a") (data (i32.const 40560) "a") (data (i32.const 40563) "a") (data (i32.const 40566) "a") (data (i32.const 40569) "a") (data (i32.const 40572) "a") (data (i32.const 40575) "a") (data (i32.const 40578) "a") (data (i32.const 40581) "a") (data (i32.const 40584) "a") (data (i32.const 40587) "a") (data (i32.const 40590) "a") (data (i32.const 40593) "a") (data (i32.const 40596) "a") (data (i32.const 40599) "a") (data (i32.const 40602) "a") (data (i32.const 40605) "a") (data (i32.const 40608) "a") (data (i32.const 40611) "a") (data (i32.const 40614) "a") (data (i32.const 40617) "a") (data (i32.const 40620) "a") (data (i32.const 40623) "a") (data (i32.const 40626) "a") (data (i32.const 40629) "a") (data (i32.const 40632) "a") (data (i32.const 40635) "a") (data (i32.const 40638) "a") (data (i32.const 40641) "a") (data (i32.const 40644) "a") (data (i32.const 40647) "a") (data (i32.const 40650) "a") (data (i32.const 40653) "a") (data (i32.const 40656) "a") (data (i32.const 40659) "a") (data (i32.const 40662) "a") (data (i32.const 40665) "a") (data (i32.const 40668) "a") (data (i32.const 40671) "a") (data (i32.const 40674) "a") (data (i32.const 40677) "a") (data (i32.const 40680) "a") (data (i32.const 40683) "a") (data (i32.const 40686) "a") (data (i32.const 40689) "a") (data (i32.const 40692) "a") (data (i32.const 40695) "a") (data (i32.const 40698) "a") (data (i32.const 40701) "a") (data (i32.const 40704) "a") (data (i32.const 40707) "a") (data (i32.const 40710) "a") (data (i32.const 40713) "a") (data (i32.const 40716) "a") (data (i32.const 40719) "a") (data (i32.const 40722) "a") (data (i32.const 40725) "a") (data (i32.const 40728) "a") (data (i32.const 40731) "a") (data (i32.const 40734) "a") (data (i32.const 40737) "a") (data (i32.const 40740) "a") (data (i32.const 40743) "a") (data (i32.const 40746) "a") (data (i32.const 40749) "a") (data (i32.const 40752) "a") (data (i32.const 40755) "a") (data (i32.const 40758) "a") (data (i32.const 40761) "a") (data (i32.const 40764) "a") (data (i32.const 40767) "a") (data (i32.const 40770) "a") (data (i32.const 40773) "a") (data (i32.const 40776) "a") (data (i32.const 40779) "a") (data (i32.const 40782) "a") (data (i32.const 40785) "a") (data (i32.const 40788) "a") (data (i32.const 40791) "a") (data (i32.const 40794) "a") (data (i32.const 40797) "a") (data (i32.const 40800) "a") (data (i32.const 40803) "a") (data (i32.const 40806) "a") (data (i32.const 40809) "a") (data (i32.const 40812) "a") (data (i32.const 40815) "a") (data (i32.const 40818) "a") (data (i32.const 40821) "a") (data (i32.const 40824) "a") (data (i32.const 40827) "a") (data (i32.const 40830) "a") (data (i32.const 40833) "a") (data (i32.const 40836) "a") (data (i32.const 40839) "a") (data (i32.const 40842) "a") (data (i32.const 40845) "a") (data (i32.const 40848) "a") (data (i32.const 40851) "a") (data (i32.const 40854) "a") (data (i32.const 40857) "a") (data (i32.const 40860) "a") (data (i32.const 40863) "a") (data (i32.const 40866) "a") (data (i32.const 40869) "a") (data (i32.const 40872) "a") (data (i32.const 40875) "a") (data (i32.const 40878) "a") (data (i32.const 40881) "a") (data (i32.const 40884) "a") (data (i32.const 40887) "a") (data (i32.const 40890) "a") (data (i32.const 40893) "a") (data (i32.const 40896) "a") (data (i32.const 40899) "a") (data (i32.const 40902) "a") (data (i32.const 40905) "a") (data (i32.const 40908) "a") (data (i32.const 40911) "a") (data (i32.const 40914) "a") (data (i32.const 40917) "a") (data (i32.const 40920) "a") (data (i32.const 40923) "a") (data (i32.const 40926) "a") (data (i32.const 40929) "a") (data (i32.const 40932) "a") (data (i32.const 40935) "a") (data (i32.const 40938) "a") (data (i32.const 40941) "a") (data (i32.const 40944) "a") (data (i32.const 40947) "a") (data (i32.const 40950) "a") (data (i32.const 40953) "a") (data (i32.const 40956) "a") (data (i32.const 40959) "a") (data (i32.const 40962) "a") (data (i32.const 40965) "a") (data (i32.const 40968) "a") (data (i32.const 40971) "a") (data (i32.const 40974) "a") (data (i32.const 40977) "a") (data (i32.const 40980) "a") (data (i32.const 40983) "a") (data (i32.const 40986) "a") (data (i32.const 40989) "a") (data (i32.const 40992) "a") (data (i32.const 40995) "a") (data (i32.const 40998) "a") (data (i32.const 41001) "a") (data (i32.const 41004) "a") (data (i32.const 41007) "a") (data (i32.const 41010) "a") (data (i32.const 41013) "a") (data (i32.const 41016) "a") (data (i32.const 41019) "a") (data (i32.const 41022) "a") (data (i32.const 41025) "a") (data (i32.const 41028) "a") (data (i32.const 41031) "a") (data (i32.const 41034) "a") (data (i32.const 41037) "a") (data (i32.const 41040) "a") (data (i32.const 41043) "a") (data (i32.const 41046) "a") (data (i32.const 41049) "a") (data (i32.const 41052) "a") (data (i32.const 41055) "a") (data (i32.const 41058) "a") (data (i32.const 41061) "a") (data (i32.const 41064) "a") (data (i32.const 41067) "a") (data (i32.const 41070) "a") (data (i32.const 41073) "a") (data (i32.const 41076) "a") (data (i32.const 41079) "a") (data (i32.const 41082) "a") (data (i32.const 41085) "a") (data (i32.const 41088) "a") (data (i32.const 41091) "a") (data (i32.const 41094) "a") (data (i32.const 41097) "a") (data (i32.const 41100) "a") (data (i32.const 41103) "a") (data (i32.const 41106) "a") (data (i32.const 41109) "a") (data (i32.const 41112) "a") (data (i32.const 41115) "a") (data (i32.const 41118) "a") (data (i32.const 41121) "a") (data (i32.const 41124) "a") (data (i32.const 41127) "a") (data (i32.const 41130) "a") (data (i32.const 41133) "a") (data (i32.const 41136) "a") (data (i32.const 41139) "a") (data (i32.const 41142) "a") (data (i32.const 41145) "a") (data (i32.const 41148) "a") (data (i32.const 41151) "a") (data (i32.const 41154) "a") (data (i32.const 41157) "a") (data (i32.const 41160) "a") (data (i32.const 41163) "a") (data (i32.const 41166) "a") (data (i32.const 41169) "a") (data (i32.const 41172) "a") (data (i32.const 41175) "a") (data (i32.const 41178) "a") (data (i32.const 41181) "a") (data (i32.const 41184) "a") (data (i32.const 41187) "a") (data (i32.const 41190) "a") (data (i32.const 41193) "a") (data (i32.const 41196) "a") (data (i32.const 41199) "a") (data (i32.const 41202) "a") (data (i32.const 41205) "a") (data (i32.const 41208) "a") (data (i32.const 41211) "a") (data (i32.const 41214) "a") (data (i32.const 41217) "a") (data (i32.const 41220) "a") (data (i32.const 41223) "a") (data (i32.const 41226) "a") (data (i32.const 41229) "a") (data (i32.const 41232) "a") (data (i32.const 41235) "a") (data (i32.const 41238) "a") (data (i32.const 41241) "a") (data (i32.const 41244) "a") (data (i32.const 41247) "a") (data (i32.const 41250) "a") (data (i32.const 41253) "a") (data (i32.const 41256) "a") (data (i32.const 41259) "a") (data (i32.const 41262) "a") (data (i32.const 41265) "a") (data (i32.const 41268) "a") (data (i32.const 41271) "a") (data (i32.const 41274) "a") (data (i32.const 41277) "a") (data (i32.const 41280) "a") (data (i32.const 41283) "a") (data (i32.const 41286) "a") (data (i32.const 41289) "a") (data (i32.const 41292) "a") (data (i32.const 41295) "a") (data (i32.const 41298) "a") (data (i32.const 41301) "a") (data (i32.const 41304) "a") (data (i32.const 41307) "a") (data (i32.const 41310) "a") (data (i32.const 41313) "a") (data (i32.const 41316) "a") (data (i32.const 41319) "a") (data (i32.const 41322) "a") (data (i32.const 41325) "a") (data (i32.const 41328) "a") (data (i32.const 41331) "a") (data (i32.const 41334) "a") (data (i32.const 41337) "a") (data (i32.const 41340) "a") (data (i32.const 41343) "a") (data (i32.const 41346) "a") (data (i32.const 41349) "a") (data (i32.const 41352) "a") (data (i32.const 41355) "a") (data (i32.const 41358) "a") (data (i32.const 41361) "a") (data (i32.const 41364) "a") (data (i32.const 41367) "a") (data (i32.const 41370) "a") (data (i32.const 41373) "a") (data (i32.const 41376) "a") (data (i32.const 41379) "a") (data (i32.const 41382) "a") (data (i32.const 41385) "a") (data (i32.const 41388) "a") (data (i32.const 41391) "a") (data (i32.const 41394) "a") (data (i32.const 41397) "a") (data (i32.const 41400) "a") (data (i32.const 41403) "a") (data (i32.const 41406) "a") (data (i32.const 41409) "a") (data (i32.const 41412) "a") (data (i32.const 41415) "a") (data (i32.const 41418) "a") (data (i32.const 41421) "a") (data (i32.const 41424) "a") (data (i32.const 41427) "a") (data (i32.const 41430) "a") (data (i32.const 41433) "a") (data (i32.const 41436) "a") (data (i32.const 41439) "a") (data (i32.const 41442) "a") (data (i32.const 41445) "a") (data (i32.const 41448) "a") (data (i32.const 41451) "a") (data (i32.const 41454) "a") (data (i32.const 41457) "a") (data (i32.const 41460) "a") (data (i32.const 41463) "a") (data (i32.const 41466) "a") (data (i32.const 41469) "a") (data (i32.const 41472) "a") (data (i32.const 41475) "a") (data (i32.const 41478) "a") (data (i32.const 41481) "a") (data (i32.const 41484) "a") (data (i32.const 41487) "a") (data (i32.const 41490) "a") (data (i32.const 41493) "a") (data (i32.const 41496) "a") (data (i32.const 41499) "a") (data (i32.const 41502) "a") (data (i32.const 41505) "a") (data (i32.const 41508) "a") (data (i32.const 41511) "a") (data (i32.const 41514) "a") (data (i32.const 41517) "a") (data (i32.const 41520) "a") (data (i32.const 41523) "a") (data (i32.const 41526) "a") (data (i32.const 41529) "a") (data (i32.const 41532) "a") (data (i32.const 41535) "a") (data (i32.const 41538) "a") (data (i32.const 41541) "a") (data (i32.const 41544) "a") (data (i32.const 41547) "a") (data (i32.const 41550) "a") (data (i32.const 41553) "a") (data (i32.const 41556) "a") (data (i32.const 41559) "a") (data (i32.const 41562) "a") (data (i32.const 41565) "a") (data (i32.const 41568) "a") (data (i32.const 41571) "a") (data (i32.const 41574) "a") (data (i32.const 41577) "a") (data (i32.const 41580) "a") (data (i32.const 41583) "a") (data (i32.const 41586) "a") (data (i32.const 41589) "a") (data (i32.const 41592) "a") (data (i32.const 41595) "a") (data (i32.const 41598) "a") (data (i32.const 41601) "a") (data (i32.const 41604) "a") (data (i32.const 41607) "a") (data (i32.const 41610) "a") (data (i32.const 41613) "a") (data (i32.const 41616) "a") (data (i32.const 41619) "a") (data (i32.const 41622) "a") (data (i32.const 41625) "a") (data (i32.const 41628) "a") (data (i32.const 41631) "a") (data (i32.const 41634) "a") (data (i32.const 41637) "a") (data (i32.const 41640) "a") (data (i32.const 41643) "a") (data (i32.const 41646) "a") (data (i32.const 41649) "a") (data (i32.const 41652) "a") (data (i32.const 41655) "a") (data (i32.const 41658) "a") (data (i32.const 41661) "a") (data (i32.const 41664) "a") (data (i32.const 41667) "a") (data (i32.const 41670) "a") (data (i32.const 41673) "a") (data (i32.const 41676) "a") (data (i32.const 41679) "a") (data (i32.const 41682) "a") (data (i32.const 41685) "a") (data (i32.const 41688) "a") (data (i32.const 41691) "a") (data (i32.const 41694) "a") (data (i32.const 41697) "a") (data (i32.const 41700) "a") (data (i32.const 41703) "a") (data (i32.const 41706) "a") (data (i32.const 41709) "a") (data (i32.const 41712) "a") (data (i32.const 41715) "a") (data (i32.const 41718) "a") (data (i32.const 41721) "a") (data (i32.const 41724) "a") (data (i32.const 41727) "a") (data (i32.const 41730) "a") (data (i32.const 41733) "a") (data (i32.const 41736) "a") (data (i32.const 41739) "a") (data (i32.const 41742) "a") (data (i32.const 41745) "a") (data (i32.const 41748) "a") (data (i32.const 41751) "a") (data (i32.const 41754) "a") (data (i32.const 41757) "a") (data (i32.const 41760) "a") (data (i32.const 41763) "a") (data (i32.const 41766) "a") (data (i32.const 41769) "a") (data (i32.const 41772) "a") (data (i32.const 41775) "a") (data (i32.const 41778) "a") (data (i32.const 41781) "a") (data (i32.const 41784) "a") (data (i32.const 41787) "a") (data (i32.const 41790) "a") (data (i32.const 41793) "a") (data (i32.const 41796) "a") (data (i32.const 41799) "a") (data (i32.const 41802) "a") (data (i32.const 41805) "a") (data (i32.const 41808) "a") (data (i32.const 41811) "a") (data (i32.const 41814) "a") (data (i32.const 41817) "a") (data (i32.const 41820) "a") (data (i32.const 41823) "a") (data (i32.const 41826) "a") (data (i32.const 41829) "a") (data (i32.const 41832) "a") (data (i32.const 41835) "a") (data (i32.const 41838) "a") (data (i32.const 41841) "a") (data (i32.const 41844) "a") (data (i32.const 41847) "a") (data (i32.const 41850) "a") (data (i32.const 41853) "a") (data (i32.const 41856) "a") (data (i32.const 41859) "a") (data (i32.const 41862) "a") (data (i32.const 41865) "a") (data (i32.const 41868) "a") (data (i32.const 41871) "a") (data (i32.const 41874) "a") (data (i32.const 41877) "a") (data (i32.const 41880) "a") (data (i32.const 41883) "a") (data (i32.const 41886) "a") (data (i32.const 41889) "a") (data (i32.const 41892) "a") (data (i32.const 41895) "a") (data (i32.const 41898) "a") (data (i32.const 41901) "a") (data (i32.const 41904) "a") (data (i32.const 41907) "a") (data (i32.const 41910) "a") (data (i32.const 41913) "a") (data (i32.const 41916) "a") (data (i32.const 41919) "a") (data (i32.const 41922) "a") (data (i32.const 41925) "a") (data (i32.const 41928) "a") (data (i32.const 41931) "a") (data (i32.const 41934) "a") (data (i32.const 41937) "a") (data (i32.const 41940) "a") (data (i32.const 41943) "a") (data (i32.const 41946) "a") (data (i32.const 41949) "a") (data (i32.const 41952) "a") (data (i32.const 41955) "a") (data (i32.const 41958) "a") (data (i32.const 41961) "a") (data (i32.const 41964) "a") (data (i32.const 41967) "a") (data (i32.const 41970) "a") (data (i32.const 41973) "a") (data (i32.const 41976) "a") (data (i32.const 41979) "a") (data (i32.const 41982) "a") (data (i32.const 41985) "a") (data (i32.const 41988) "a") (data (i32.const 41991) "a") (data (i32.const 41994) "a") (data (i32.const 41997) "a") (data (i32.const 42000) "a") (data (i32.const 42003) "a") (data (i32.const 42006) "a") (data (i32.const 42009) "a") (data (i32.const 42012) "a") (data (i32.const 42015) "a") (data (i32.const 42018) "a") (data (i32.const 42021) "a") (data (i32.const 42024) "a") (data (i32.const 42027) "a") (data (i32.const 42030) "a") (data (i32.const 42033) "a") (data (i32.const 42036) "a") (data (i32.const 42039) "a") (data (i32.const 42042) "a") (data (i32.const 42045) "a") (data (i32.const 42048) "a") (data (i32.const 42051) "a") (data (i32.const 42054) "a") (data (i32.const 42057) "a") (data (i32.const 42060) "a") (data (i32.const 42063) "a") (data (i32.const 42066) "a") (data (i32.const 42069) "a") (data (i32.const 42072) "a") (data (i32.const 42075) "a") (data (i32.const 42078) "a") (data (i32.const 42081) "a") (data (i32.const 42084) "a") (data (i32.const 42087) "a") (data (i32.const 42090) "a") (data (i32.const 42093) "a") (data (i32.const 42096) "a") (data (i32.const 42099) "a") (data (i32.const 42102) "a") (data (i32.const 42105) "a") (data (i32.const 42108) "a") (data (i32.const 42111) "a") (data (i32.const 42114) "a") (data (i32.const 42117) "a") (data (i32.const 42120) "a") (data (i32.const 42123) "a") (data (i32.const 42126) "a") (data (i32.const 42129) "a") (data (i32.const 42132) "a") (data (i32.const 42135) "a") (data (i32.const 42138) "a") (data (i32.const 42141) "a") (data (i32.const 42144) "a") (data (i32.const 42147) "a") (data (i32.const 42150) "a") (data (i32.const 42153) "a") (data (i32.const 42156) "a") (data (i32.const 42159) "a") (data (i32.const 42162) "a") (data (i32.const 42165) "a") (data (i32.const 42168) "a") (data (i32.const 42171) "a") (data (i32.const 42174) "a") (data (i32.const 42177) "a") (data (i32.const 42180) "a") (data (i32.const 42183) "a") (data (i32.const 42186) "a") (data (i32.const 42189) "a") (data (i32.const 42192) "a") (data (i32.const 42195) "a") (data (i32.const 42198) "a") (data (i32.const 42201) "a") (data (i32.const 42204) "a") (data (i32.const 42207) "a") (data (i32.const 42210) "a") (data (i32.const 42213) "a") (data (i32.const 42216) "a") (data (i32.const 42219) "a") (data (i32.const 42222) "a") (data (i32.const 42225) "a") (data (i32.const 42228) "a") (data (i32.const 42231) "a") (data (i32.const 42234) "a") (data (i32.const 42237) "a") (data (i32.const 42240) "a") (data (i32.const 42243) "a") (data (i32.const 42246) "a") (data (i32.const 42249) "a") (data (i32.const 42252) "a") (data (i32.const 42255) "a") (data (i32.const 42258) "a") (data (i32.const 42261) "a") (data (i32.const 42264) "a") (data (i32.const 42267) "a") (data (i32.const 42270) "a") (data (i32.const 42273) "a") (data (i32.const 42276) "a") (data (i32.const 42279) "a") (data (i32.const 42282) "a") (data (i32.const 42285) "a") (data (i32.const 42288) "a") (data (i32.const 42291) "a") (data (i32.const 42294) "a") (data (i32.const 42297) "a") (data (i32.const 42300) "a") (data (i32.const 42303) "a") (data (i32.const 42306) "a") (data (i32.const 42309) "a") (data (i32.const 42312) "a") (data (i32.const 42315) "a") (data (i32.const 42318) "a") (data (i32.const 42321) "a") (data (i32.const 42324) "a") (data (i32.const 42327) "a") (data (i32.const 42330) "a") (data (i32.const 42333) "a") (data (i32.const 42336) "a") (data (i32.const 42339) "a") (data (i32.const 42342) "a") (data (i32.const 42345) "a") (data (i32.const 42348) "a") (data (i32.const 42351) "a") (data (i32.const 42354) "a") (data (i32.const 42357) "a") (data (i32.const 42360) "a") (data (i32.const 42363) "a") (data (i32.const 42366) "a") (data (i32.const 42369) "a") (data (i32.const 42372) "a") (data (i32.const 42375) "a") (data (i32.const 42378) "a") (data (i32.const 42381) "a") (data (i32.const 42384) "a") (data (i32.const 42387) "a") (data (i32.const 42390) "a") (data (i32.const 42393) "a") (data (i32.const 42396) "a") (data (i32.const 42399) "a") (data (i32.const 42402) "a") (data (i32.const 42405) "a") (data (i32.const 42408) "a") (data (i32.const 42411) "a") (data (i32.const 42414) "a") (data (i32.const 42417) "a") (data (i32.const 42420) "a") (data (i32.const 42423) "a") (data (i32.const 42426) "a") (data (i32.const 42429) "a") (data (i32.const 42432) "a") (data (i32.const 42435) "a") (data (i32.const 42438) "a") (data (i32.const 42441) "a") (data (i32.const 42444) "a") (data (i32.const 42447) "a") (data (i32.const 42450) "a") (data (i32.const 42453) "a") (data (i32.const 42456) "a") (data (i32.const 42459) "a") (data (i32.const 42462) "a") (data (i32.const 42465) "a") (data (i32.const 42468) "a") (data (i32.const 42471) "a") (data (i32.const 42474) "a") (data (i32.const 42477) "a") (data (i32.const 42480) "a") (data (i32.const 42483) "a") (data (i32.const 42486) "a") (data (i32.const 42489) "a") (data (i32.const 42492) "a") (data (i32.const 42495) "a") (data (i32.const 42498) "a") (data (i32.const 42501) "a") (data (i32.const 42504) "a") (data (i32.const 42507) "a") (data (i32.const 42510) "a") (data (i32.const 42513) "a") (data (i32.const 42516) "a") (data (i32.const 42519) "a") (data (i32.const 42522) "a") (data (i32.const 42525) "a") (data (i32.const 42528) "a") (data (i32.const 42531) "a") (data (i32.const 42534) "a") (data (i32.const 42537) "a") (data (i32.const 42540) "a") (data (i32.const 42543) "a") (data (i32.const 42546) "a") (data (i32.const 42549) "a") (data (i32.const 42552) "a") (data (i32.const 42555) "a") (data (i32.const 42558) "a") (data (i32.const 42561) "a") (data (i32.const 42564) "a") (data (i32.const 42567) "a") (data (i32.const 42570) "a") (data (i32.const 42573) "a") (data (i32.const 42576) "a") (data (i32.const 42579) "a") (data (i32.const 42582) "a") (data (i32.const 42585) "a") (data (i32.const 42588) "a") (data (i32.const 42591) "a") (data (i32.const 42594) "a") (data (i32.const 42597) "a") (data (i32.const 42600) "a") (data (i32.const 42603) "a") (data (i32.const 42606) "a") (data (i32.const 42609) "a") (data (i32.const 42612) "a") (data (i32.const 42615) "a") (data (i32.const 42618) "a") (data (i32.const 42621) "a") (data (i32.const 42624) "a") (data (i32.const 42627) "a") (data (i32.const 42630) "a") (data (i32.const 42633) "a") (data (i32.const 42636) "a") (data (i32.const 42639) "a") (data (i32.const 42642) "a") (data (i32.const 42645) "a") (data (i32.const 42648) "a") (data (i32.const 42651) "a") (data (i32.const 42654) "a") (data (i32.const 42657) "a") (data (i32.const 42660) "a") (data (i32.const 42663) "a") (data (i32.const 42666) "a") (data (i32.const 42669) "a") (data (i32.const 42672) "a") (data (i32.const 42675) "a") (data (i32.const 42678) "a") (data (i32.const 42681) "a") (data (i32.const 42684) "a") (data (i32.const 42687) "a") (data (i32.const 42690) "a") (data (i32.const 42693) "a") (data (i32.const 42696) "a") (data (i32.const 42699) "a") (data (i32.const 42702) "a") (data (i32.const 42705) "a") (data (i32.const 42708) "a") (data (i32.const 42711) "a") (data (i32.const 42714) "a") (data (i32.const 42717) "a") (data (i32.const 42720) "a") (data (i32.const 42723) "a") (data (i32.const 42726) "a") (data (i32.const 42729) "a") (data (i32.const 42732) "a") (data (i32.const 42735) "a") (data (i32.const 42738) "a") (data (i32.const 42741) "a") (data (i32.const 42744) "a") (data (i32.const 42747) "a") (data (i32.const 42750) "a") (data (i32.const 42753) "a") (data (i32.const 42756) "a") (data (i32.const 42759) "a") (data (i32.const 42762) "a") (data (i32.const 42765) "a") (data (i32.const 42768) "a") (data (i32.const 42771) "a") (data (i32.const 42774) "a") (data (i32.const 42777) "a") (data (i32.const 42780) "a") (data (i32.const 42783) "a") (data (i32.const 42786) "a") (data (i32.const 42789) "a") (data (i32.const 42792) "a") (data (i32.const 42795) "a") (data (i32.const 42798) "a") (data (i32.const 42801) "a") (data (i32.const 42804) "a") (data (i32.const 42807) "a") (data (i32.const 42810) "a") (data (i32.const 42813) "a") (data (i32.const 42816) "a") (data (i32.const 42819) "a") (data (i32.const 42822) "a") (data (i32.const 42825) "a") (data (i32.const 42828) "a") (data (i32.const 42831) "a") (data (i32.const 42834) "a") (data (i32.const 42837) "a") (data (i32.const 42840) "a") (data (i32.const 42843) "a") (data (i32.const 42846) "a") (data (i32.const 42849) "a") (data (i32.const 42852) "a") (data (i32.const 42855) "a") (data (i32.const 42858) "a") (data (i32.const 42861) "a") (data (i32.const 42864) "a") (data (i32.const 42867) "a") (data (i32.const 42870) "a") (data (i32.const 42873) "a") (data (i32.const 42876) "a") (data (i32.const 42879) "a") (data (i32.const 42882) "a") (data (i32.const 42885) "a") (data (i32.const 42888) "a") (data (i32.const 42891) "a") (data (i32.const 42894) "a") (data (i32.const 42897) "a") (data (i32.const 42900) "a") (data (i32.const 42903) "a") (data (i32.const 42906) "a") (data (i32.const 42909) "a") (data (i32.const 42912) "a") (data (i32.const 42915) "a") (data (i32.const 42918) "a") (data (i32.const 42921) "a") (data (i32.const 42924) "a") (data (i32.const 42927) "a") (data (i32.const 42930) "a") (data (i32.const 42933) "a") (data (i32.const 42936) "a") (data (i32.const 42939) "a") (data (i32.const 42942) "a") (data (i32.const 42945) "a") (data (i32.const 42948) "a") (data (i32.const 42951) "a") (data (i32.const 42954) "a") (data (i32.const 42957) "a") (data (i32.const 42960) "a") (data (i32.const 42963) "a") (data (i32.const 42966) "a") (data (i32.const 42969) "a") (data (i32.const 42972) "a") (data (i32.const 42975) "a") (data (i32.const 42978) "a") (data (i32.const 42981) "a") (data (i32.const 42984) "a") (data (i32.const 42987) "a") (data (i32.const 42990) "a") (data (i32.const 42993) "a") (data (i32.const 42996) "a") (data (i32.const 42999) "a") (data (i32.const 43002) "a") (data (i32.const 43005) "a") (data (i32.const 43008) "a") (data (i32.const 43011) "a") (data (i32.const 43014) "a") (data (i32.const 43017) "a") (data (i32.const 43020) "a") (data (i32.const 43023) "a") (data (i32.const 43026) "a") (data (i32.const 43029) "a") (data (i32.const 43032) "a") (data (i32.const 43035) "a") (data (i32.const 43038) "a") (data (i32.const 43041) "a") (data (i32.const 43044) "a") (data (i32.const 43047) "a") (data (i32.const 43050) "a") (data (i32.const 43053) "a") (data (i32.const 43056) "a") (data (i32.const 43059) "a") (data (i32.const 43062) "a") (data (i32.const 43065) "a") (data (i32.const 43068) "a") (data (i32.const 43071) "a") (data (i32.const 43074) "a") (data (i32.const 43077) "a") (data (i32.const 43080) "a") (data (i32.const 43083) "a") (data (i32.const 43086) "a") (data (i32.const 43089) "a") (data (i32.const 43092) "a") (data (i32.const 43095) "a") (data (i32.const 43098) "a") (data (i32.const 43101) "a") (data (i32.const 43104) "a") (data (i32.const 43107) "a") (data (i32.const 43110) "a") (data (i32.const 43113) "a") (data (i32.const 43116) "a") (data (i32.const 43119) "a") (data (i32.const 43122) "a") (data (i32.const 43125) "a") (data (i32.const 43128) "a") (data (i32.const 43131) "a") (data (i32.const 43134) "a") (data (i32.const 43137) "a") (data (i32.const 43140) "a") (data (i32.const 43143) "a") (data (i32.const 43146) "a") (data (i32.const 43149) "a") (data (i32.const 43152) "a") (data (i32.const 43155) "a") (data (i32.const 43158) "a") (data (i32.const 43161) "a") (data (i32.const 43164) "a") (data (i32.const 43167) "a") (data (i32.const 43170) "a") (data (i32.const 43173) "a") (data (i32.const 43176) "a") (data (i32.const 43179) "a") (data (i32.const 43182) "a") (data (i32.const 43185) "a") (data (i32.const 43188) "a") (data (i32.const 43191) "a") (data (i32.const 43194) "a") (data (i32.const 43197) "a") (data (i32.const 43200) "a") (data (i32.const 43203) "a") (data (i32.const 43206) "a") (data (i32.const 43209) "a") (data (i32.const 43212) "a") (data (i32.const 43215) "a") (data (i32.const 43218) "a") (data (i32.const 43221) "a") (data (i32.const 43224) "a") (data (i32.const 43227) "a") (data (i32.const 43230) "a") (data (i32.const 43233) "a") (data (i32.const 43236) "a") (data (i32.const 43239) "a") (data (i32.const 43242) "a") (data (i32.const 43245) "a") (data (i32.const 43248) "a") (data (i32.const 43251) "a") (data (i32.const 43254) "a") (data (i32.const 43257) "a") (data (i32.const 43260) "a") (data (i32.const 43263) "a") (data (i32.const 43266) "a") (data (i32.const 43269) "a") (data (i32.const 43272) "a") (data (i32.const 43275) "a") (data (i32.const 43278) "a") (data (i32.const 43281) "a") (data (i32.const 43284) "a") (data (i32.const 43287) "a") (data (i32.const 43290) "a") (data (i32.const 43293) "a") (data (i32.const 43296) "a") (data (i32.const 43299) "a") (data (i32.const 43302) "a") (data (i32.const 43305) "a") (data (i32.const 43308) "a") (data (i32.const 43311) "a") (data (i32.const 43314) "a") (data (i32.const 43317) "a") (data (i32.const 43320) "a") (data (i32.const 43323) "a") (data (i32.const 43326) "a") (data (i32.const 43329) "a") (data (i32.const 43332) "a") (data (i32.const 43335) "a") (data (i32.const 43338) "a") (data (i32.const 43341) "a") (data (i32.const 43344) "a") (data (i32.const 43347) "a") (data (i32.const 43350) "a") (data (i32.const 43353) "a") (data (i32.const 43356) "a") (data (i32.const 43359) "a") (data (i32.const 43362) "a") (data (i32.const 43365) "a") (data (i32.const 43368) "a") (data (i32.const 43371) "a") (data (i32.const 43374) "a") (data (i32.const 43377) "a") (data (i32.const 43380) "a") (data (i32.const 43383) "a") (data (i32.const 43386) "a") (data (i32.const 43389) "a") (data (i32.const 43392) "a") (data (i32.const 43395) "a") (data (i32.const 43398) "a") (data (i32.const 43401) "a") (data (i32.const 43404) "a") (data (i32.const 43407) "a") (data (i32.const 43410) "a") (data (i32.const 43413) "a") (data (i32.const 43416) "a") (data (i32.const 43419) "a") (data (i32.const 43422) "a") (data (i32.const 43425) "a") (data (i32.const 43428) "a") (data (i32.const 43431) "a") (data (i32.const 43434) "a") (data (i32.const 43437) "a") (data (i32.const 43440) "a") (data (i32.const 43443) "a") (data (i32.const 43446) "a") (data (i32.const 43449) "a") (data (i32.const 43452) "a") (data (i32.const 43455) "a") (data (i32.const 43458) "a") (data (i32.const 43461) "a") (data (i32.const 43464) "a") (data (i32.const 43467) "a") (data (i32.const 43470) "a") (data (i32.const 43473) "a") (data (i32.const 43476) "a") (data (i32.const 43479) "a") (data (i32.const 43482) "a") (data (i32.const 43485) "a") (data (i32.const 43488) "a") (data (i32.const 43491) "a") (data (i32.const 43494) "a") (data (i32.const 43497) "a") (data (i32.const 43500) "a") (data (i32.const 43503) "a") (data (i32.const 43506) "a") (data (i32.const 43509) "a") (data (i32.const 43512) "a") (data (i32.const 43515) "a") (data (i32.const 43518) "a") (data (i32.const 43521) "a") (data (i32.const 43524) "a") (data (i32.const 43527) "a") (data (i32.const 43530) "a") (data (i32.const 43533) "a") (data (i32.const 43536) "a") (data (i32.const 43539) "a") (data (i32.const 43542) "a") (data (i32.const 43545) "a") (data (i32.const 43548) "a") (data (i32.const 43551) "a") (data (i32.const 43554) "a") (data (i32.const 43557) "a") (data (i32.const 43560) "a") (data (i32.const 43563) "a") (data (i32.const 43566) "a") (data (i32.const 43569) "a") (data (i32.const 43572) "a") (data (i32.const 43575) "a") (data (i32.const 43578) "a") (data (i32.const 43581) "a") (data (i32.const 43584) "a") (data (i32.const 43587) "a") (data (i32.const 43590) "a") (data (i32.const 43593) "a") (data (i32.const 43596) "a") (data (i32.const 43599) "a") (data (i32.const 43602) "a") (data (i32.const 43605) "a") (data (i32.const 43608) "a") (data (i32.const 43611) "a") (data (i32.const 43614) "a") (data (i32.const 43617) "a") (data (i32.const 43620) "a") (data (i32.const 43623) "a") (data (i32.const 43626) "a") (data (i32.const 43629) "a") (data (i32.const 43632) "a") (data (i32.const 43635) "a") (data (i32.const 43638) "a") (data (i32.const 43641) "a") (data (i32.const 43644) "a") (data (i32.const 43647) "a") (data (i32.const 43650) "a") (data (i32.const 43653) "a") (data (i32.const 43656) "a") (data (i32.const 43659) "a") (data (i32.const 43662) "a") (data (i32.const 43665) "a") (data (i32.const 43668) "a") (data (i32.const 43671) "a") (data (i32.const 43674) "a") (data (i32.const 43677) "a") (data (i32.const 43680) "a") (data (i32.const 43683) "a") (data (i32.const 43686) "a") (data (i32.const 43689) "a") (data (i32.const 43692) "a") (data (i32.const 43695) "a") (data (i32.const 43698) "a") (data (i32.const 43701) "a") (data (i32.const 43704) "a") (data (i32.const 43707) "a") (data (i32.const 43710) "a") (data (i32.const 43713) "a") (data (i32.const 43716) "a") (data (i32.const 43719) "a") (data (i32.const 43722) "a") (data (i32.const 43725) "a") (data (i32.const 43728) "a") (data (i32.const 43731) "a") (data (i32.const 43734) "a") (data (i32.const 43737) "a") (data (i32.const 43740) "a") (data (i32.const 43743) "a") (data (i32.const 43746) "a") (data (i32.const 43749) "a") (data (i32.const 43752) "a") (data (i32.const 43755) "a") (data (i32.const 43758) "a") (data (i32.const 43761) "a") (data (i32.const 43764) "a") (data (i32.const 43767) "a") (data (i32.const 43770) "a") (data (i32.const 43773) "a") (data (i32.const 43776) "a") (data (i32.const 43779) "a") (data (i32.const 43782) "a") (data (i32.const 43785) "a") (data (i32.const 43788) "a") (data (i32.const 43791) "a") (data (i32.const 43794) "a") (data (i32.const 43797) "a") (data (i32.const 43800) "a") (data (i32.const 43803) "a") (data (i32.const 43806) "a") (data (i32.const 43809) "a") (data (i32.const 43812) "a") (data (i32.const 43815) "a") (data (i32.const 43818) "a") (data (i32.const 43821) "a") (data (i32.const 43824) "a") (data (i32.const 43827) "a") (data (i32.const 43830) "a") (data (i32.const 43833) "a") (data (i32.const 43836) "a") (data (i32.const 43839) "a") (data (i32.const 43842) "a") (data (i32.const 43845) "a") (data (i32.const 43848) "a") (data (i32.const 43851) "a") (data (i32.const 43854) "a") (data (i32.const 43857) "a") (data (i32.const 43860) "a") (data (i32.const 43863) "a") (data (i32.const 43866) "a") (data (i32.const 43869) "a") (data (i32.const 43872) "a") (data (i32.const 43875) "a") (data (i32.const 43878) "a") (data (i32.const 43881) "a") (data (i32.const 43884) "a") (data (i32.const 43887) "a") (data (i32.const 43890) "a") (data (i32.const 43893) "a") (data (i32.const 43896) "a") (data (i32.const 43899) "a") (data (i32.const 43902) "a") (data (i32.const 43905) "a") (data (i32.const 43908) "a") (data (i32.const 43911) "a") (data (i32.const 43914) "a") (data (i32.const 43917) "a") (data (i32.const 43920) "a") (data (i32.const 43923) "a") (data (i32.const 43926) "a") (data (i32.const 43929) "a") (data (i32.const 43932) "a") (data (i32.const 43935) "a") (data (i32.const 43938) "a") (data (i32.const 43941) "a") (data (i32.const 43944) "a") (data (i32.const 43947) "a") (data (i32.const 43950) "a") (data (i32.const 43953) "a") (data (i32.const 43956) "a") (data (i32.const 43959) "a") (data (i32.const 43962) "a") (data (i32.const 43965) "a") (data (i32.const 43968) "a") (data (i32.const 43971) "a") (data (i32.const 43974) "a") (data (i32.const 43977) "a") (data (i32.const 43980) "a") (data (i32.const 43983) "a") (data (i32.const 43986) "a") (data (i32.const 43989) "a") (data (i32.const 43992) "a") (data (i32.const 43995) "a") (data (i32.const 43998) "a") (data (i32.const 44001) "a") (data (i32.const 44004) "a") (data (i32.const 44007) "a") (data (i32.const 44010) "a") (data (i32.const 44013) "a") (data (i32.const 44016) "a") (data (i32.const 44019) "a") (data (i32.const 44022) "a") (data (i32.const 44025) "a") (data (i32.const 44028) "a") (data (i32.const 44031) "a") (data (i32.const 44034) "a") (data (i32.const 44037) "a") (data (i32.const 44040) "a") (data (i32.const 44043) "a") (data (i32.const 44046) "a") (data (i32.const 44049) "a") (data (i32.const 44052) "a") (data (i32.const 44055) "a") (data (i32.const 44058) "a") (data (i32.const 44061) "a") (data (i32.const 44064) "a") (data (i32.const 44067) "a") (data (i32.const 44070) "a") (data (i32.const 44073) "a") (data (i32.const 44076) "a") (data (i32.const 44079) "a") (data (i32.const 44082) "a") (data (i32.const 44085) "a") (data (i32.const 44088) "a") (data (i32.const 44091) "a") (data (i32.const 44094) "a") (data (i32.const 44097) "a") (data (i32.const 44100) "a") (data (i32.const 44103) "a") (data (i32.const 44106) "a") (data (i32.const 44109) "a") (data (i32.const 44112) "a") (data (i32.const 44115) "a") (data (i32.const 44118) "a") (data (i32.const 44121) "a") (data (i32.const 44124) "a") (data (i32.const 44127) "a") (data (i32.const 44130) "a") (data (i32.const 44133) "a") (data (i32.const 44136) "a") (data (i32.const 44139) "a") (data (i32.const 44142) "a") (data (i32.const 44145) "a") (data (i32.const 44148) "a") (data (i32.const 44151) "a") (data (i32.const 44154) "a") (data (i32.const 44157) "a") (data (i32.const 44160) "a") (data (i32.const 44163) "a") (data (i32.const 44166) "a") (data (i32.const 44169) "a") (data (i32.const 44172) "a") (data (i32.const 44175) "a") (data (i32.const 44178) "a") (data (i32.const 44181) "a") (data (i32.const 44184) "a") (data (i32.const 44187) "a") (data (i32.const 44190) "a") (data (i32.const 44193) "a") (data (i32.const 44196) "a") (data (i32.const 44199) "a") (data (i32.const 44202) "a") (data (i32.const 44205) "a") (data (i32.const 44208) "a") (data (i32.const 44211) "a") (data (i32.const 44214) "a") (data (i32.const 44217) "a") (data (i32.const 44220) "a") (data (i32.const 44223) "a") (data (i32.const 44226) "a") (data (i32.const 44229) "a") (data (i32.const 44232) "a") (data (i32.const 44235) "a") (data (i32.const 44238) "a") (data (i32.const 44241) "a") (data (i32.const 44244) "a") (data (i32.const 44247) "a") (data (i32.const 44250) "a") (data (i32.const 44253) "a") (data (i32.const 44256) "a") (data (i32.const 44259) "a") (data (i32.const 44262) "a") (data (i32.const 44265) "a") (data (i32.const 44268) "a") (data (i32.const 44271) "a") (data (i32.const 44274) "a") (data (i32.const 44277) "a") (data (i32.const 44280) "a") (data (i32.const 44283) "a") (data (i32.const 44286) "a") (data (i32.const 44289) "a") (data (i32.const 44292) "a") (data (i32.const 44295) "a") (data (i32.const 44298) "a") (data (i32.const 44301) "a") (data (i32.const 44304) "a") (data (i32.const 44307) "a") (data (i32.const 44310) "a") (data (i32.const 44313) "a") (data (i32.const 44316) "a") (data (i32.const 44319) "a") (data (i32.const 44322) "a") (data (i32.const 44325) "a") (data (i32.const 44328) "a") (data (i32.const 44331) "a") (data (i32.const 44334) "a") (data (i32.const 44337) "a") (data (i32.const 44340) "a") (data (i32.const 44343) "a") (data (i32.const 44346) "a") (data (i32.const 44349) "a") (data (i32.const 44352) "a") (data (i32.const 44355) "a") (data (i32.const 44358) "a") (data (i32.const 44361) "a") (data (i32.const 44364) "a") (data (i32.const 44367) "a") (data (i32.const 44370) "a") (data (i32.const 44373) "a") (data (i32.const 44376) "a") (data (i32.const 44379) "a") (data (i32.const 44382) "a") (data (i32.const 44385) "a") (data (i32.const 44388) "a") (data (i32.const 44391) "a") (data (i32.const 44394) "a") (data (i32.const 44397) "a") (data (i32.const 44400) "a") (data (i32.const 44403) "a") (data (i32.const 44406) "a") (data (i32.const 44409) "a") (data (i32.const 44412) "a") (data (i32.const 44415) "a") (data (i32.const 44418) "a") (data (i32.const 44421) "a") (data (i32.const 44424) "a") (data (i32.const 44427) "a") (data (i32.const 44430) "a") (data (i32.const 44433) "a") (data (i32.const 44436) "a") (data (i32.const 44439) "a") (data (i32.const 44442) "a") (data (i32.const 44445) "a") (data (i32.const 44448) "a") (data (i32.const 44451) "a") (data (i32.const 44454) "a") (data (i32.const 44457) "a") (data (i32.const 44460) "a") (data (i32.const 44463) "a") (data (i32.const 44466) "a") (data (i32.const 44469) "a") (data (i32.const 44472) "a") (data (i32.const 44475) "a") (data (i32.const 44478) "a") (data (i32.const 44481) "a") (data (i32.const 44484) "a") (data (i32.const 44487) "a") (data (i32.const 44490) "a") (data (i32.const 44493) "a") (data (i32.const 44496) "a") (data (i32.const 44499) "a") (data (i32.const 44502) "a") (data (i32.const 44505) "a") (data (i32.const 44508) "a") (data (i32.const 44511) "a") (data (i32.const 44514) "a") (data (i32.const 44517) "a") (data (i32.const 44520) "a") (data (i32.const 44523) "a") (data (i32.const 44526) "a") (data (i32.const 44529) "a") (data (i32.const 44532) "a") (data (i32.const 44535) "a") (data (i32.const 44538) "a") (data (i32.const 44541) "a") (data (i32.const 44544) "a") (data (i32.const 44547) "a") (data (i32.const 44550) "a") (data (i32.const 44553) "a") (data (i32.const 44556) "a") (data (i32.const 44559) "a") (data (i32.const 44562) "a") (data (i32.const 44565) "a") (data (i32.const 44568) "a") (data (i32.const 44571) "a") (data (i32.const 44574) "a") (data (i32.const 44577) "a") (data (i32.const 44580) "a") (data (i32.const 44583) "a") (data (i32.const 44586) "a") (data (i32.const 44589) "a") (data (i32.const 44592) "a") (data (i32.const 44595) "a") (data (i32.const 44598) "a") (data (i32.const 44601) "a") (data (i32.const 44604) "a") (data (i32.const 44607) "a") (data (i32.const 44610) "a") (data (i32.const 44613) "a") (data (i32.const 44616) "a") (data (i32.const 44619) "a") (data (i32.const 44622) "a") (data (i32.const 44625) "a") (data (i32.const 44628) "a") (data (i32.const 44631) "a") (data (i32.const 44634) "a") (data (i32.const 44637) "a") (data (i32.const 44640) "a") (data (i32.const 44643) "a") (data (i32.const 44646) "a") (data (i32.const 44649) "a") (data (i32.const 44652) "a") (data (i32.const 44655) "a") (data (i32.const 44658) "a") (data (i32.const 44661) "a") (data (i32.const 44664) "a") (data (i32.const 44667) "a") (data (i32.const 44670) "a") (data (i32.const 44673) "a") (data (i32.const 44676) "a") (data (i32.const 44679) "a") (data (i32.const 44682) "a") (data (i32.const 44685) "a") (data (i32.const 44688) "a") (data (i32.const 44691) "a") (data (i32.const 44694) "a") (data (i32.const 44697) "a") (data (i32.const 44700) "a") (data (i32.const 44703) "a") (data (i32.const 44706) "a") (data (i32.const 44709) "a") (data (i32.const 44712) "a") (data (i32.const 44715) "a") (data (i32.const 44718) "a") (data (i32.const 44721) "a") (data (i32.const 44724) "a") (data (i32.const 44727) "a") (data (i32.const 44730) "a") (data (i32.const 44733) "a") (data (i32.const 44736) "a") (data (i32.const 44739) "a") (data (i32.const 44742) "a") (data (i32.const 44745) "a") (data (i32.const 44748) "a") (data (i32.const 44751) "a") (data (i32.const 44754) "a") (data (i32.const 44757) "a") (data (i32.const 44760) "a") (data (i32.const 44763) "a") (data (i32.const 44766) "a") (data (i32.const 44769) "a") (data (i32.const 44772) "a") (data (i32.const 44775) "a") (data (i32.const 44778) "a") (data (i32.const 44781) "a") (data (i32.const 44784) "a") (data (i32.const 44787) "a") (data (i32.const 44790) "a") (data (i32.const 44793) "a") (data (i32.const 44796) "a") (data (i32.const 44799) "a") (data (i32.const 44802) "a") (data (i32.const 44805) "a") (data (i32.const 44808) "a") (data (i32.const 44811) "a") (data (i32.const 44814) "a") (data (i32.const 44817) "a") (data (i32.const 44820) "a") (data (i32.const 44823) "a") (data (i32.const 44826) "a") (data (i32.const 44829) "a") (data (i32.const 44832) "a") (data (i32.const 44835) "a") (data (i32.const 44838) "a") (data (i32.const 44841) "a") (data (i32.const 44844) "a") (data (i32.const 44847) "a") (data (i32.const 44850) "a") (data (i32.const 44853) "a") (data (i32.const 44856) "a") (data (i32.const 44859) "a") (data (i32.const 44862) "a") (data (i32.const 44865) "a") (data (i32.const 44868) "a") (data (i32.const 44871) "a") (data (i32.const 44874) "a") (data (i32.const 44877) "a") (data (i32.const 44880) "a") (data (i32.const 44883) "a") (data (i32.const 44886) "a") (data (i32.const 44889) "a") (data (i32.const 44892) "a") (data (i32.const 44895) "a") (data (i32.const 44898) "a") (data (i32.const 44901) "a") (data (i32.const 44904) "a") (data (i32.const 44907) "a") (data (i32.const 44910) "a") (data (i32.const 44913) "a") (data (i32.const 44916) "a") (data (i32.const 44919) "a") (data (i32.const 44922) "a") (data (i32.const 44925) "a") (data (i32.const 44928) "a") (data (i32.const 44931) "a") (data (i32.const 44934) "a") (data (i32.const 44937) "a") (data (i32.const 44940) "a") (data (i32.const 44943) "a") (data (i32.const 44946) "a") (data (i32.const 44949) "a") (data (i32.const 44952) "a") (data (i32.const 44955) "a") (data (i32.const 44958) "a") (data (i32.const 44961) "a") (data (i32.const 44964) "a") (data (i32.const 44967) "a") (data (i32.const 44970) "a") (data (i32.const 44973) "a") (data (i32.const 44976) "a") (data (i32.const 44979) "a") (data (i32.const 44982) "a") (data (i32.const 44985) "a") (data (i32.const 44988) "a") (data (i32.const 44991) "a") (data (i32.const 44994) "a") (data (i32.const 44997) "a") (data (i32.const 45000) "a") (data (i32.const 45003) "a") (data (i32.const 45006) "a") (data (i32.const 45009) "a") (data (i32.const 45012) "a") (data (i32.const 45015) "a") (data (i32.const 45018) "a") (data (i32.const 45021) "a") (data (i32.const 45024) "a") (data (i32.const 45027) "a") (data (i32.const 45030) "a") (data (i32.const 45033) "a") (data (i32.const 45036) "a") (data (i32.const 45039) "a") (data (i32.const 45042) "a") (data (i32.const 45045) "a") (data (i32.const 45048) "a") (data (i32.const 45051) "a") (data (i32.const 45054) "a") (data (i32.const 45057) "a") (data (i32.const 45060) "a") (data (i32.const 45063) "a") (data (i32.const 45066) "a") (data (i32.const 45069) "a") (data (i32.const 45072) "a") (data (i32.const 45075) "a") (data (i32.const 45078) "a") (data (i32.const 45081) "a") (data (i32.const 45084) "a") (data (i32.const 45087) "a") (data (i32.const 45090) "a") (data (i32.const 45093) "a") (data (i32.const 45096) "a") (data (i32.const 45099) "a") (data (i32.const 45102) "a") (data (i32.const 45105) "a") (data (i32.const 45108) "a") (data (i32.const 45111) "a") (data (i32.const 45114) "a") (data (i32.const 45117) "a") (data (i32.const 45120) "a") (data (i32.const 45123) "a") (data (i32.const 45126) "a") (data (i32.const 45129) "a") (data (i32.const 45132) "a") (data (i32.const 45135) "a") (data (i32.const 45138) "a") (data (i32.const 45141) "a") (data (i32.const 45144) "a") (data (i32.const 45147) "a") (data (i32.const 45150) "a") (data (i32.const 45153) "a") (data (i32.const 45156) "a") (data (i32.const 45159) "a") (data (i32.const 45162) "a") (data (i32.const 45165) "a") (data (i32.const 45168) "a") (data (i32.const 45171) "a") (data (i32.const 45174) "a") (data (i32.const 45177) "a") (data (i32.const 45180) "a") (data (i32.const 45183) "a") (data (i32.const 45186) "a") (data (i32.const 45189) "a") (data (i32.const 45192) "a") (data (i32.const 45195) "a") (data (i32.const 45198) "a") (data (i32.const 45201) "a") (data (i32.const 45204) "a") (data (i32.const 45207) "a") (data (i32.const 45210) "a") (data (i32.const 45213) "a") (data (i32.const 45216) "a") (data (i32.const 45219) "a") (data (i32.const 45222) "a") (data (i32.const 45225) "a") (data (i32.const 45228) "a") (data (i32.const 45231) "a") (data (i32.const 45234) "a") (data (i32.const 45237) "a") (data (i32.const 45240) "a") (data (i32.const 45243) "a") (data (i32.const 45246) "a") (data (i32.const 45249) "a") (data (i32.const 45252) "a") (data (i32.const 45255) "a") (data (i32.const 45258) "a") (data (i32.const 45261) "a") (data (i32.const 45264) "a") (data (i32.const 45267) "a") (data (i32.const 45270) "a") (data (i32.const 45273) "a") (data (i32.const 45276) "a") (data (i32.const 45279) "a") (data (i32.const 45282) "a") (data (i32.const 45285) "a") (data (i32.const 45288) "a") (data (i32.const 45291) "a") (data (i32.const 45294) "a") (data (i32.const 45297) "a") (data (i32.const 45300) "a") (data (i32.const 45303) "a") (data (i32.const 45306) "a") (data (i32.const 45309) "a") (data (i32.const 45312) "a") (data (i32.const 45315) "a") (data (i32.const 45318) "a") (data (i32.const 45321) "a") (data (i32.const 45324) "a") (data (i32.const 45327) "a") (data (i32.const 45330) "a") (data (i32.const 45333) "a") (data (i32.const 45336) "a") (data (i32.const 45339) "a") (data (i32.const 45342) "a") (data (i32.const 45345) "a") (data (i32.const 45348) "a") (data (i32.const 45351) "a") (data (i32.const 45354) "a") (data (i32.const 45357) "a") (data (i32.const 45360) "a") (data (i32.const 45363) "a") (data (i32.const 45366) "a") (data (i32.const 45369) "a") (data (i32.const 45372) "a") (data (i32.const 45375) "a") (data (i32.const 45378) "a") (data (i32.const 45381) "a") (data (i32.const 45384) "a") (data (i32.const 45387) "a") (data (i32.const 45390) "a") (data (i32.const 45393) "a") (data (i32.const 45396) "a") (data (i32.const 45399) "a") (data (i32.const 45402) "a") (data (i32.const 45405) "a") (data (i32.const 45408) "a") (data (i32.const 45411) "a") (data (i32.const 45414) "a") (data (i32.const 45417) "a") (data (i32.const 45420) "a") (data (i32.const 45423) "a") (data (i32.const 45426) "a") (data (i32.const 45429) "a") (data (i32.const 45432) "a") (data (i32.const 45435) "a") (data (i32.const 45438) "a") (data (i32.const 45441) "a") (data (i32.const 45444) "a") (data (i32.const 45447) "a") (data (i32.const 45450) "a") (data (i32.const 45453) "a") (data (i32.const 45456) "a") (data (i32.const 45459) "a") (data (i32.const 45462) "a") (data (i32.const 45465) "a") (data (i32.const 45468) "a") (data (i32.const 45471) "a") (data (i32.const 45474) "a") (data (i32.const 45477) "a") (data (i32.const 45480) "a") (data (i32.const 45483) "a") (data (i32.const 45486) "a") (data (i32.const 45489) "a") (data (i32.const 45492) "a") (data (i32.const 45495) "a") (data (i32.const 45498) "a") (data (i32.const 45501) "a") (data (i32.const 45504) "a") (data (i32.const 45507) "a") (data (i32.const 45510) "a") (data (i32.const 45513) "a") (data (i32.const 45516) "a") (data (i32.const 45519) "a") (data (i32.const 45522) "a") (data (i32.const 45525) "a") (data (i32.const 45528) "a") (data (i32.const 45531) "a") (data (i32.const 45534) "a") (data (i32.const 45537) "a") (data (i32.const 45540) "a") (data (i32.const 45543) "a") (data (i32.const 45546) "a") (data (i32.const 45549) "a") (data (i32.const 45552) "a") (data (i32.const 45555) "a") (data (i32.const 45558) "a") (data (i32.const 45561) "a") (data (i32.const 45564) "a") (data (i32.const 45567) "a") (data (i32.const 45570) "a") (data (i32.const 45573) "a") (data (i32.const 45576) "a") (data (i32.const 45579) "a") (data (i32.const 45582) "a") (data (i32.const 45585) "a") (data (i32.const 45588) "a") (data (i32.const 45591) "a") (data (i32.const 45594) "a") (data (i32.const 45597) "a") (data (i32.const 45600) "a") (data (i32.const 45603) "a") (data (i32.const 45606) "a") (data (i32.const 45609) "a") (data (i32.const 45612) "a") (data (i32.const 45615) "a") (data (i32.const 45618) "a") (data (i32.const 45621) "a") (data (i32.const 45624) "a") (data (i32.const 45627) "a") (data (i32.const 45630) "a") (data (i32.const 45633) "a") (data (i32.const 45636) "a") (data (i32.const 45639) "a") (data (i32.const 45642) "a") (data (i32.const 45645) "a") (data (i32.const 45648) "a") (data (i32.const 45651) "a") (data (i32.const 45654) "a") (data (i32.const 45657) "a") (data (i32.const 45660) "a") (data (i32.const 45663) "a") (data (i32.const 45666) "a") (data (i32.const 45669) "a") (data (i32.const 45672) "a") (data (i32.const 45675) "a") (data (i32.const 45678) "a") (data (i32.const 45681) "a") (data (i32.const 45684) "a") (data (i32.const 45687) "a") (data (i32.const 45690) "a") (data (i32.const 45693) "a") (data (i32.const 45696) "a") (data (i32.const 45699) "a") (data (i32.const 45702) "a") (data (i32.const 45705) "a") (data (i32.const 45708) "a") (data (i32.const 45711) "a") (data (i32.const 45714) "a") (data (i32.const 45717) "a") (data (i32.const 45720) "a") (data (i32.const 45723) "a") (data (i32.const 45726) "a") (data (i32.const 45729) "a") (data (i32.const 45732) "a") (data (i32.const 45735) "a") (data (i32.const 45738) "a") (data (i32.const 45741) "a") (data (i32.const 45744) "a") (data (i32.const 45747) "a") (data (i32.const 45750) "a") (data (i32.const 45753) "a") (data (i32.const 45756) "a") (data (i32.const 45759) "a") (data (i32.const 45762) "a") (data (i32.const 45765) "a") (data (i32.const 45768) "a") (data (i32.const 45771) "a") (data (i32.const 45774) "a") (data (i32.const 45777) "a") (data (i32.const 45780) "a") (data (i32.const 45783) "a") (data (i32.const 45786) "a") (data (i32.const 45789) "a") (data (i32.const 45792) "a") (data (i32.const 45795) "a") (data (i32.const 45798) "a") (data (i32.const 45801) "a") (data (i32.const 45804) "a") (data (i32.const 45807) "a") (data (i32.const 45810) "a") (data (i32.const 45813) "a") (data (i32.const 45816) "a") (data (i32.const 45819) "a") (data (i32.const 45822) "a") (data (i32.const 45825) "a") (data (i32.const 45828) "a") (data (i32.const 45831) "a") (data (i32.const 45834) "a") (data (i32.const 45837) "a") (data (i32.const 45840) "a") (data (i32.const 45843) "a") (data (i32.const 45846) "a") (data (i32.const 45849) "a") (data (i32.const 45852) "a") (data (i32.const 45855) "a") (data (i32.const 45858) "a") (data (i32.const 45861) "a") (data (i32.const 45864) "a") (data (i32.const 45867) "a") (data (i32.const 45870) "a") (data (i32.const 45873) "a") (data (i32.const 45876) "a") (data (i32.const 45879) "a") (data (i32.const 45882) "a") (data (i32.const 45885) "a") (data (i32.const 45888) "a") (data (i32.const 45891) "a") (data (i32.const 45894) "a") (data (i32.const 45897) "a") (data (i32.const 45900) "a") (data (i32.const 45903) "a") (data (i32.const 45906) "a") (data (i32.const 45909) "a") (data (i32.const 45912) "a") (data (i32.const 45915) "a") (data (i32.const 45918) "a") (data (i32.const 45921) "a") (data (i32.const 45924) "a") (data (i32.const 45927) "a") (data (i32.const 45930) "a") (data (i32.const 45933) "a") (data (i32.const 45936) "a") (data (i32.const 45939) "a") (data (i32.const 45942) "a") (data (i32.const 45945) "a") (data (i32.const 45948) "a") (data (i32.const 45951) "a") (data (i32.const 45954) "a") (data (i32.const 45957) "a") (data (i32.const 45960) "a") (data (i32.const 45963) "a") (data (i32.const 45966) "a") (data (i32.const 45969) "a") (data (i32.const 45972) "a") (data (i32.const 45975) "a") (data (i32.const 45978) "a") (data (i32.const 45981) "a") (data (i32.const 45984) "a") (data (i32.const 45987) "a") (data (i32.const 45990) "a") (data (i32.const 45993) "a") (data (i32.const 45996) "a") (data (i32.const 45999) "a") (data (i32.const 46002) "a") (data (i32.const 46005) "a") (data (i32.const 46008) "a") (data (i32.const 46011) "a") (data (i32.const 46014) "a") (data (i32.const 46017) "a") (data (i32.const 46020) "a") (data (i32.const 46023) "a") (data (i32.const 46026) "a") (data (i32.const 46029) "a") (data (i32.const 46032) "a") (data (i32.const 46035) "a") (data (i32.const 46038) "a") (data (i32.const 46041) "a") (data (i32.const 46044) "a") (data (i32.const 46047) "a") (data (i32.const 46050) "a") (data (i32.const 46053) "a") (data (i32.const 46056) "a") (data (i32.const 46059) "a") (data (i32.const 46062) "a") (data (i32.const 46065) "a") (data (i32.const 46068) "a") (data (i32.const 46071) "a") (data (i32.const 46074) "a") (data (i32.const 46077) "a") (data (i32.const 46080) "a") (data (i32.const 46083) "a") (data (i32.const 46086) "a") (data (i32.const 46089) "a") (data (i32.const 46092) "a") (data (i32.const 46095) "a") (data (i32.const 46098) "a") (data (i32.const 46101) "a") (data (i32.const 46104) "a") (data (i32.const 46107) "a") (data (i32.const 46110) "a") (data (i32.const 46113) "a") (data (i32.const 46116) "a") (data (i32.const 46119) "a") (data (i32.const 46122) "a") (data (i32.const 46125) "a") (data (i32.const 46128) "a") (data (i32.const 46131) "a") (data (i32.const 46134) "a") (data (i32.const 46137) "a") (data (i32.const 46140) "a") (data (i32.const 46143) "a") (data (i32.const 46146) "a") (data (i32.const 46149) "a") (data (i32.const 46152) "a") (data (i32.const 46155) "a") (data (i32.const 46158) "a") (data (i32.const 46161) "a") (data (i32.const 46164) "a") (data (i32.const 46167) "a") (data (i32.const 46170) "a") (data (i32.const 46173) "a") (data (i32.const 46176) "a") (data (i32.const 46179) "a") (data (i32.const 46182) "a") (data (i32.const 46185) "a") (data (i32.const 46188) "a") (data (i32.const 46191) "a") (data (i32.const 46194) "a") (data (i32.const 46197) "a") (data (i32.const 46200) "a") (data (i32.const 46203) "a") (data (i32.const 46206) "a") (data (i32.const 46209) "a") (data (i32.const 46212) "a") (data (i32.const 46215) "a") (data (i32.const 46218) "a") (data (i32.const 46221) "a") (data (i32.const 46224) "a") (data (i32.const 46227) "a") (data (i32.const 46230) "a") (data (i32.const 46233) "a") (data (i32.const 46236) "a") (data (i32.const 46239) "a") (data (i32.const 46242) "a") (data (i32.const 46245) "a") (data (i32.const 46248) "a") (data (i32.const 46251) "a") (data (i32.const 46254) "a") (data (i32.const 46257) "a") (data (i32.const 46260) "a") (data (i32.const 46263) "a") (data (i32.const 46266) "a") (data (i32.const 46269) "a") (data (i32.const 46272) "a") (data (i32.const 46275) "a") (data (i32.const 46278) "a") (data (i32.const 46281) "a") (data (i32.const 46284) "a") (data (i32.const 46287) "a") (data (i32.const 46290) "a") (data (i32.const 46293) "a") (data (i32.const 46296) "a") (data (i32.const 46299) "a") (data (i32.const 46302) "a") (data (i32.const 46305) "a") (data (i32.const 46308) "a") (data (i32.const 46311) "a") (data (i32.const 46314) "a") (data (i32.const 46317) "a") (data (i32.const 46320) "a") (data (i32.const 46323) "a") (data (i32.const 46326) "a") (data (i32.const 46329) "a") (data (i32.const 46332) "a") (data (i32.const 46335) "a") (data (i32.const 46338) "a") (data (i32.const 46341) "a") (data (i32.const 46344) "a") (data (i32.const 46347) "a") (data (i32.const 46350) "a") (data (i32.const 46353) "a") (data (i32.const 46356) "a") (data (i32.const 46359) "a") (data (i32.const 46362) "a") (data (i32.const 46365) "a") (data (i32.const 46368) "a") (data (i32.const 46371) "a") (data (i32.const 46374) "a") (data (i32.const 46377) "a") (data (i32.const 46380) "a") (data (i32.const 46383) "a") (data (i32.const 46386) "a") (data (i32.const 46389) "a") (data (i32.const 46392) "a") (data (i32.const 46395) "a") (data (i32.const 46398) "a") (data (i32.const 46401) "a") (data (i32.const 46404) "a") (data (i32.const 46407) "a") (data (i32.const 46410) "a") (data (i32.const 46413) "a") (data (i32.const 46416) "a") (data (i32.const 46419) "a") (data (i32.const 46422) "a") (data (i32.const 46425) "a") (data (i32.const 46428) "a") (data (i32.const 46431) "a") (data (i32.const 46434) "a") (data (i32.const 46437) "a") (data (i32.const 46440) "a") (data (i32.const 46443) "a") (data (i32.const 46446) "a") (data (i32.const 46449) "a") (data (i32.const 46452) "a") (data (i32.const 46455) "a") (data (i32.const 46458) "a") (data (i32.const 46461) "a") (data (i32.const 46464) "a") (data (i32.const 46467) "a") (data (i32.const 46470) "a") (data (i32.const 46473) "a") (data (i32.const 46476) "a") (data (i32.const 46479) "a") (data (i32.const 46482) "a") (data (i32.const 46485) "a") (data (i32.const 46488) "a") (data (i32.const 46491) "a") (data (i32.const 46494) "a") (data (i32.const 46497) "a") (data (i32.const 46500) "a") (data (i32.const 46503) "a") (data (i32.const 46506) "a") (data (i32.const 46509) "a") (data (i32.const 46512) "a") (data (i32.const 46515) "a") (data (i32.const 46518) "a") (data (i32.const 46521) "a") (data (i32.const 46524) "a") (data (i32.const 46527) "a") (data (i32.const 46530) "a") (data (i32.const 46533) "a") (data (i32.const 46536) "a") (data (i32.const 46539) "a") (data (i32.const 46542) "a") (data (i32.const 46545) "a") (data (i32.const 46548) "a") (data (i32.const 46551) "a") (data (i32.const 46554) "a") (data (i32.const 46557) "a") (data (i32.const 46560) "a") (data (i32.const 46563) "a") (data (i32.const 46566) "a") (data (i32.const 46569) "a") (data (i32.const 46572) "a") (data (i32.const 46575) "a") (data (i32.const 46578) "a") (data (i32.const 46581) "a") (data (i32.const 46584) "a") (data (i32.const 46587) "a") (data (i32.const 46590) "a") (data (i32.const 46593) "a") (data (i32.const 46596) "a") (data (i32.const 46599) "a") (data (i32.const 46602) "a") (data (i32.const 46605) "a") (data (i32.const 46608) "a") (data (i32.const 46611) "a") (data (i32.const 46614) "a") (data (i32.const 46617) "a") (data (i32.const 46620) "a") (data (i32.const 46623) "a") (data (i32.const 46626) "a") (data (i32.const 46629) "a") (data (i32.const 46632) "a") (data (i32.const 46635) "a") (data (i32.const 46638) "a") (data (i32.const 46641) "a") (data (i32.const 46644) "a") (data (i32.const 46647) "a") (data (i32.const 46650) "a") (data (i32.const 46653) "a") (data (i32.const 46656) "a") (data (i32.const 46659) "a") (data (i32.const 46662) "a") (data (i32.const 46665) "a") (data (i32.const 46668) "a") (data (i32.const 46671) "a") (data (i32.const 46674) "a") (data (i32.const 46677) "a") (data (i32.const 46680) "a") (data (i32.const 46683) "a") (data (i32.const 46686) "a") (data (i32.const 46689) "a") (data (i32.const 46692) "a") (data (i32.const 46695) "a") (data (i32.const 46698) "a") (data (i32.const 46701) "a") (data (i32.const 46704) "a") (data (i32.const 46707) "a") (data (i32.const 46710) "a") (data (i32.const 46713) "a") (data (i32.const 46716) "a") (data (i32.const 46719) "a") (data (i32.const 46722) "a") (data (i32.const 46725) "a") (data (i32.const 46728) "a") (data (i32.const 46731) "a") (data (i32.const 46734) "a") (data (i32.const 46737) "a") (data (i32.const 46740) "a") (data (i32.const 46743) "a") (data (i32.const 46746) "a") (data (i32.const 46749) "a") (data (i32.const 46752) "a") (data (i32.const 46755) "a") (data (i32.const 46758) "a") (data (i32.const 46761) "a") (data (i32.const 46764) "a") (data (i32.const 46767) "a") (data (i32.const 46770) "a") (data (i32.const 46773) "a") (data (i32.const 46776) "a") (data (i32.const 46779) "a") (data (i32.const 46782) "a") (data (i32.const 46785) "a") (data (i32.const 46788) "a") (data (i32.const 46791) "a") (data (i32.const 46794) "a") (data (i32.const 46797) "a") (data (i32.const 46800) "a") (data (i32.const 46803) "a") (data (i32.const 46806) "a") (data (i32.const 46809) "a") (data (i32.const 46812) "a") (data (i32.const 46815) "a") (data (i32.const 46818) "a") (data (i32.const 46821) "a") (data (i32.const 46824) "a") (data (i32.const 46827) "a") (data (i32.const 46830) "a") (data (i32.const 46833) "a") (data (i32.const 46836) "a") (data (i32.const 46839) "a") (data (i32.const 46842) "a") (data (i32.const 46845) "a") (data (i32.const 46848) "a") (data (i32.const 46851) "a") (data (i32.const 46854) "a") (data (i32.const 46857) "a") (data (i32.const 46860) "a") (data (i32.const 46863) "a") (data (i32.const 46866) "a") (data (i32.const 46869) "a") (data (i32.const 46872) "a") (data (i32.const 46875) "a") (data (i32.const 46878) "a") (data (i32.const 46881) "a") (data (i32.const 46884) "a") (data (i32.const 46887) "a") (data (i32.const 46890) "a") (data (i32.const 46893) "a") (data (i32.const 46896) "a") (data (i32.const 46899) "a") (data (i32.const 46902) "a") (data (i32.const 46905) "a") (data (i32.const 46908) "a") (data (i32.const 46911) "a") (data (i32.const 46914) "a") (data (i32.const 46917) "a") (data (i32.const 46920) "a") (data (i32.const 46923) "a") (data (i32.const 46926) "a") (data (i32.const 46929) "a") (data (i32.const 46932) "a") (data (i32.const 46935) "a") (data (i32.const 46938) "a") (data (i32.const 46941) "a") (data (i32.const 46944) "a") (data (i32.const 46947) "a") (data (i32.const 46950) "a") (data (i32.const 46953) "a") (data (i32.const 46956) "a") (data (i32.const 46959) "a") (data (i32.const 46962) "a") (data (i32.const 46965) "a") (data (i32.const 46968) "a") (data (i32.const 46971) "a") (data (i32.const 46974) "a") (data (i32.const 46977) "a") (data (i32.const 46980) "a") (data (i32.const 46983) "a") (data (i32.const 46986) "a") (data (i32.const 46989) "a") (data (i32.const 46992) "a") (data (i32.const 46995) "a") (data (i32.const 46998) "a") (data (i32.const 47001) "a") (data (i32.const 47004) "a") (data (i32.const 47007) "a") (data (i32.const 47010) "a") (data (i32.const 47013) "a") (data (i32.const 47016) "a") (data (i32.const 47019) "a") (data (i32.const 47022) "a") (data (i32.const 47025) "a") (data (i32.const 47028) "a") (data (i32.const 47031) "a") (data (i32.const 47034) "a") (data (i32.const 47037) "a") (data (i32.const 47040) "a") (data (i32.const 47043) "a") (data (i32.const 47046) "a") (data (i32.const 47049) "a") (data (i32.const 47052) "a") (data (i32.const 47055) "a") (data (i32.const 47058) "a") (data (i32.const 47061) "a") (data (i32.const 47064) "a") (data (i32.const 47067) "a") (data (i32.const 47070) "a") (data (i32.const 47073) "a") (data (i32.const 47076) "a") (data (i32.const 47079) "a") (data (i32.const 47082) "a") (data (i32.const 47085) "a") (data (i32.const 47088) "a") (data (i32.const 47091) "a") (data (i32.const 47094) "a") (data (i32.const 47097) "a") (data (i32.const 47100) "a") (data (i32.const 47103) "a") (data (i32.const 47106) "a") (data (i32.const 47109) "a") (data (i32.const 47112) "a") (data (i32.const 47115) "a") (data (i32.const 47118) "a") (data (i32.const 47121) "a") (data (i32.const 47124) "a") (data (i32.const 47127) "a") (data (i32.const 47130) "a") (data (i32.const 47133) "a") (data (i32.const 47136) "a") (data (i32.const 47139) "a") (data (i32.const 47142) "a") (data (i32.const 47145) "a") (data (i32.const 47148) "a") (data (i32.const 47151) "a") (data (i32.const 47154) "a") (data (i32.const 47157) "a") (data (i32.const 47160) "a") (data (i32.const 47163) "a") (data (i32.const 47166) "a") (data (i32.const 47169) "a") (data (i32.const 47172) "a") (data (i32.const 47175) "a") (data (i32.const 47178) "a") (data (i32.const 47181) "a") (data (i32.const 47184) "a") (data (i32.const 47187) "a") (data (i32.const 47190) "a") (data (i32.const 47193) "a") (data (i32.const 47196) "a") (data (i32.const 47199) "a") (data (i32.const 47202) "a") (data (i32.const 47205) "a") (data (i32.const 47208) "a") (data (i32.const 47211) "a") (data (i32.const 47214) "a") (data (i32.const 47217) "a") (data (i32.const 47220) "a") (data (i32.const 47223) "a") (data (i32.const 47226) "a") (data (i32.const 47229) "a") (data (i32.const 47232) "a") (data (i32.const 47235) "a") (data (i32.const 47238) "a") (data (i32.const 47241) "a") (data (i32.const 47244) "a") (data (i32.const 47247) "a") (data (i32.const 47250) "a") (data (i32.const 47253) "a") (data (i32.const 47256) "a") (data (i32.const 47259) "a") (data (i32.const 47262) "a") (data (i32.const 47265) "a") (data (i32.const 47268) "a") (data (i32.const 47271) "a") (data (i32.const 47274) "a") (data (i32.const 47277) "a") (data (i32.const 47280) "a") (data (i32.const 47283) "a") (data (i32.const 47286) "a") (data (i32.const 47289) "a") (data (i32.const 47292) "a") (data (i32.const 47295) "a") (data (i32.const 47298) "a") (data (i32.const 47301) "a") (data (i32.const 47304) "a") (data (i32.const 47307) "a") (data (i32.const 47310) "a") (data (i32.const 47313) "a") (data (i32.const 47316) "a") (data (i32.const 47319) "a") (data (i32.const 47322) "a") (data (i32.const 47325) "a") (data (i32.const 47328) "a") (data (i32.const 47331) "a") (data (i32.const 47334) "a") (data (i32.const 47337) "a") (data (i32.const 47340) "a") (data (i32.const 47343) "a") (data (i32.const 47346) "a") (data (i32.const 47349) "a") (data (i32.const 47352) "a") (data (i32.const 47355) "a") (data (i32.const 47358) "a") (data (i32.const 47361) "a") (data (i32.const 47364) "a") (data (i32.const 47367) "a") (data (i32.const 47370) "a") (data (i32.const 47373) "a") (data (i32.const 47376) "a") (data (i32.const 47379) "a") (data (i32.const 47382) "a") (data (i32.const 47385) "a") (data (i32.const 47388) "a") (data (i32.const 47391) "a") (data (i32.const 47394) "a") (data (i32.const 47397) "a") (data (i32.const 47400) "a") (data (i32.const 47403) "a") (data (i32.const 47406) "a") (data (i32.const 47409) "a") (data (i32.const 47412) "a") (data (i32.const 47415) "a") (data (i32.const 47418) "a") (data (i32.const 47421) "a") (data (i32.const 47424) "a") (data (i32.const 47427) "a") (data (i32.const 47430) "a") (data (i32.const 47433) "a") (data (i32.const 47436) "a") (data (i32.const 47439) "a") (data (i32.const 47442) "a") (data (i32.const 47445) "a") (data (i32.const 47448) "a") (data (i32.const 47451) "a") (data (i32.const 47454) "a") (data (i32.const 47457) "a") (data (i32.const 47460) "a") (data (i32.const 47463) "a") (data (i32.const 47466) "a") (data (i32.const 47469) "a") (data (i32.const 47472) "a") (data (i32.const 47475) "a") (data (i32.const 47478) "a") (data (i32.const 47481) "a") (data (i32.const 47484) "a") (data (i32.const 47487) "a") (data (i32.const 47490) "a") (data (i32.const 47493) "a") (data (i32.const 47496) "a") (data (i32.const 47499) "a") (data (i32.const 47502) "a") (data (i32.const 47505) "a") (data (i32.const 47508) "a") (data (i32.const 47511) "a") (data (i32.const 47514) "a") (data (i32.const 47517) "a") (data (i32.const 47520) "a") (data (i32.const 47523) "a") (data (i32.const 47526) "a") (data (i32.const 47529) "a") (data (i32.const 47532) "a") (data (i32.const 47535) "a") (data (i32.const 47538) "a") (data (i32.const 47541) "a") (data (i32.const 47544) "a") (data (i32.const 47547) "a") (data (i32.const 47550) "a") (data (i32.const 47553) "a") (data (i32.const 47556) "a") (data (i32.const 47559) "a") (data (i32.const 47562) "a") (data (i32.const 47565) "a") (data (i32.const 47568) "a") (data (i32.const 47571) "a") (data (i32.const 47574) "a") (data (i32.const 47577) "a") (data (i32.const 47580) "a") (data (i32.const 47583) "a") (data (i32.const 47586) "a") (data (i32.const 47589) "a") (data (i32.const 47592) "a") (data (i32.const 47595) "a") (data (i32.const 47598) "a") (data (i32.const 47601) "a") (data (i32.const 47604) "a") (data (i32.const 47607) "a") (data (i32.const 47610) "a") (data (i32.const 47613) "a") (data (i32.const 47616) "a") (data (i32.const 47619) "a") (data (i32.const 47622) "a") (data (i32.const 47625) "a") (data (i32.const 47628) "a") (data (i32.const 47631) "a") (data (i32.const 47634) "a") (data (i32.const 47637) "a") (data (i32.const 47640) "a") (data (i32.const 47643) "a") (data (i32.const 47646) "a") (data (i32.const 47649) "a") (data (i32.const 47652) "a") (data (i32.const 47655) "a") (data (i32.const 47658) "a") (data (i32.const 47661) "a") (data (i32.const 47664) "a") (data (i32.const 47667) "a") (data (i32.const 47670) "a") (data (i32.const 47673) "a") (data (i32.const 47676) "a") (data (i32.const 47679) "a") (data (i32.const 47682) "a") (data (i32.const 47685) "a") (data (i32.const 47688) "a") (data (i32.const 47691) "a") (data (i32.const 47694) "a") (data (i32.const 47697) "a") (data (i32.const 47700) "a") (data (i32.const 47703) "a") (data (i32.const 47706) "a") (data (i32.const 47709) "a") (data (i32.const 47712) "a") (data (i32.const 47715) "a") (data (i32.const 47718) "a") (data (i32.const 47721) "a") (data (i32.const 47724) "a") (data (i32.const 47727) "a") (data (i32.const 47730) "a") (data (i32.const 47733) "a") (data (i32.const 47736) "a") (data (i32.const 47739) "a") (data (i32.const 47742) "a") (data (i32.const 47745) "a") (data (i32.const 47748) "a") (data (i32.const 47751) "a") (data (i32.const 47754) "a") (data (i32.const 47757) "a") (data (i32.const 47760) "a") (data (i32.const 47763) "a") (data (i32.const 47766) "a") (data (i32.const 47769) "a") (data (i32.const 47772) "a") (data (i32.const 47775) "a") (data (i32.const 47778) "a") (data (i32.const 47781) "a") (data (i32.const 47784) "a") (data (i32.const 47787) "a") (data (i32.const 47790) "a") (data (i32.const 47793) "a") (data (i32.const 47796) "a") (data (i32.const 47799) "a") (data (i32.const 47802) "a") (data (i32.const 47805) "a") (data (i32.const 47808) "a") (data (i32.const 47811) "a") (data (i32.const 47814) "a") (data (i32.const 47817) "a") (data (i32.const 47820) "a") (data (i32.const 47823) "a") (data (i32.const 47826) "a") (data (i32.const 47829) "a") (data (i32.const 47832) "a") (data (i32.const 47835) "a") (data (i32.const 47838) "a") (data (i32.const 47841) "a") (data (i32.const 47844) "a") (data (i32.const 47847) "a") (data (i32.const 47850) "a") (data (i32.const 47853) "a") (data (i32.const 47856) "a") (data (i32.const 47859) "a") (data (i32.const 47862) "a") (data (i32.const 47865) "a") (data (i32.const 47868) "a") (data (i32.const 47871) "a") (data (i32.const 47874) "a") (data (i32.const 47877) "a") (data (i32.const 47880) "a") (data (i32.const 47883) "a") (data (i32.const 47886) "a") (data (i32.const 47889) "a") (data (i32.const 47892) "a") (data (i32.const 47895) "a") (data (i32.const 47898) "a") (data (i32.const 47901) "a") (data (i32.const 47904) "a") (data (i32.const 47907) "a") (data (i32.const 47910) "a") (data (i32.const 47913) "a") (data (i32.const 47916) "a") (data (i32.const 47919) "a") (data (i32.const 47922) "a") (data (i32.const 47925) "a") (data (i32.const 47928) "a") (data (i32.const 47931) "a") (data (i32.const 47934) "a") (data (i32.const 47937) "a") (data (i32.const 47940) "a") (data (i32.const 47943) "a") (data (i32.const 47946) "a") (data (i32.const 47949) "a") (data (i32.const 47952) "a") (data (i32.const 47955) "a") (data (i32.const 47958) "a") (data (i32.const 47961) "a") (data (i32.const 47964) "a") (data (i32.const 47967) "a") (data (i32.const 47970) "a") (data (i32.const 47973) "a") (data (i32.const 47976) "a") (data (i32.const 47979) "a") (data (i32.const 47982) "a") (data (i32.const 47985) "a") (data (i32.const 47988) "a") (data (i32.const 47991) "a") (data (i32.const 47994) "a") (data (i32.const 47997) "a") (data (i32.const 48000) "a") (data (i32.const 48003) "a") (data (i32.const 48006) "a") (data (i32.const 48009) "a") (data (i32.const 48012) "a") (data (i32.const 48015) "a") (data (i32.const 48018) "a") (data (i32.const 48021) "a") (data (i32.const 48024) "a") (data (i32.const 48027) "a") (data (i32.const 48030) "a") (data (i32.const 48033) "a") (data (i32.const 48036) "a") (data (i32.const 48039) "a") (data (i32.const 48042) "a") (data (i32.const 48045) "a") (data (i32.const 48048) "a") (data (i32.const 48051) "a") (data (i32.const 48054) "a") (data (i32.const 48057) "a") (data (i32.const 48060) "a") (data (i32.const 48063) "a") (data (i32.const 48066) "a") (data (i32.const 48069) "a") (data (i32.const 48072) "a") (data (i32.const 48075) "a") (data (i32.const 48078) "a") (data (i32.const 48081) "a") (data (i32.const 48084) "a") (data (i32.const 48087) "a") (data (i32.const 48090) "a") (data (i32.const 48093) "a") (data (i32.const 48096) "a") (data (i32.const 48099) "a") (data (i32.const 48102) "a") (data (i32.const 48105) "a") (data (i32.const 48108) "a") (data (i32.const 48111) "a") (data (i32.const 48114) "a") (data (i32.const 48117) "a") (data (i32.const 48120) "a") (data (i32.const 48123) "a") (data (i32.const 48126) "a") (data (i32.const 48129) "a") (data (i32.const 48132) "a") (data (i32.const 48135) "a") (data (i32.const 48138) "a") (data (i32.const 48141) "a") (data (i32.const 48144) "a") (data (i32.const 48147) "a") (data (i32.const 48150) "a") (data (i32.const 48153) "a") (data (i32.const 48156) "a") (data (i32.const 48159) "a") (data (i32.const 48162) "a") (data (i32.const 48165) "a") (data (i32.const 48168) "a") (data (i32.const 48171) "a") (data (i32.const 48174) "a") (data (i32.const 48177) "a") (data (i32.const 48180) "a") (data (i32.const 48183) "a") (data (i32.const 48186) "a") (data (i32.const 48189) "a") (data (i32.const 48192) "a") (data (i32.const 48195) "a") (data (i32.const 48198) "a") (data (i32.const 48201) "a") (data (i32.const 48204) "a") (data (i32.const 48207) "a") (data (i32.const 48210) "a") (data (i32.const 48213) "a") (data (i32.const 48216) "a") (data (i32.const 48219) "a") (data (i32.const 48222) "a") (data (i32.const 48225) "a") (data (i32.const 48228) "a") (data (i32.const 48231) "a") (data (i32.const 48234) "a") (data (i32.const 48237) "a") (data (i32.const 48240) "a") (data (i32.const 48243) "a") (data (i32.const 48246) "a") (data (i32.const 48249) "a") (data (i32.const 48252) "a") (data (i32.const 48255) "a") (data (i32.const 48258) "a") (data (i32.const 48261) "a") (data (i32.const 48264) "a") (data (i32.const 48267) "a") (data (i32.const 48270) "a") (data (i32.const 48273) "a") (data (i32.const 48276) "a") (data (i32.const 48279) "a") (data (i32.const 48282) "a") (data (i32.const 48285) "a") (data (i32.const 48288) "a") (data (i32.const 48291) "a") (data (i32.const 48294) "a") (data (i32.const 48297) "a") (data (i32.const 48300) "a") (data (i32.const 48303) "a") (data (i32.const 48306) "a") (data (i32.const 48309) "a") (data (i32.const 48312) "a") (data (i32.const 48315) "a") (data (i32.const 48318) "a") (data (i32.const 48321) "a") (data (i32.const 48324) "a") (data (i32.const 48327) "a") (data (i32.const 48330) "a") (data (i32.const 48333) "a") (data (i32.const 48336) "a") (data (i32.const 48339) "a") (data (i32.const 48342) "a") (data (i32.const 48345) "a") (data (i32.const 48348) "a") (data (i32.const 48351) "a") (data (i32.const 48354) "a") (data (i32.const 48357) "a") (data (i32.const 48360) "a") (data (i32.const 48363) "a") (data (i32.const 48366) "a") (data (i32.const 48369) "a") (data (i32.const 48372) "a") (data (i32.const 48375) "a") (data (i32.const 48378) "a") (data (i32.const 48381) "a") (data (i32.const 48384) "a") (data (i32.const 48387) "a") (data (i32.const 48390) "a") (data (i32.const 48393) "a") (data (i32.const 48396) "a") (data (i32.const 48399) "a") (data (i32.const 48402) "a") (data (i32.const 48405) "a") (data (i32.const 48408) "a") (data (i32.const 48411) "a") (data (i32.const 48414) "a") (data (i32.const 48417) "a") (data (i32.const 48420) "a") (data (i32.const 48423) "a") (data (i32.const 48426) "a") (data (i32.const 48429) "a") (data (i32.const 48432) "a") (data (i32.const 48435) "a") (data (i32.const 48438) "a") (data (i32.const 48441) "a") (data (i32.const 48444) "a") (data (i32.const 48447) "a") (data (i32.const 48450) "a") (data (i32.const 48453) "a") (data (i32.const 48456) "a") (data (i32.const 48459) "a") (data (i32.const 48462) "a") (data (i32.const 48465) "a") (data (i32.const 48468) "a") (data (i32.const 48471) "a") (data (i32.const 48474) "a") (data (i32.const 48477) "a") (data (i32.const 48480) "a") (data (i32.const 48483) "a") (data (i32.const 48486) "a") (data (i32.const 48489) "a") (data (i32.const 48492) "a") (data (i32.const 48495) "a") (data (i32.const 48498) "a") (data (i32.const 48501) "a") (data (i32.const 48504) "a") (data (i32.const 48507) "a") (data (i32.const 48510) "a") (data (i32.const 48513) "a") (data (i32.const 48516) "a") (data (i32.const 48519) "a") (data (i32.const 48522) "a") (data (i32.const 48525) "a") (data (i32.const 48528) "a") (data (i32.const 48531) "a") (data (i32.const 48534) "a") (data (i32.const 48537) "a") (data (i32.const 48540) "a") (data (i32.const 48543) "a") (data (i32.const 48546) "a") (data (i32.const 48549) "a") (data (i32.const 48552) "a") (data (i32.const 48555) "a") (data (i32.const 48558) "a") (data (i32.const 48561) "a") (data (i32.const 48564) "a") (data (i32.const 48567) "a") (data (i32.const 48570) "a") (data (i32.const 48573) "a") (data (i32.const 48576) "a") (data (i32.const 48579) "a") (data (i32.const 48582) "a") (data (i32.const 48585) "a") (data (i32.const 48588) "a") (data (i32.const 48591) "a") (data (i32.const 48594) "a") (data (i32.const 48597) "a") (data (i32.const 48600) "a") (data (i32.const 48603) "a") (data (i32.const 48606) "a") (data (i32.const 48609) "a") (data (i32.const 48612) "a") (data (i32.const 48615) "a") (data (i32.const 48618) "a") (data (i32.const 48621) "a") (data (i32.const 48624) "a") (data (i32.const 48627) "a") (data (i32.const 48630) "a") (data (i32.const 48633) "a") (data (i32.const 48636) "a") (data (i32.const 48639) "a") (data (i32.const 48642) "a") (data (i32.const 48645) "a") (data (i32.const 48648) "a") (data (i32.const 48651) "a") (data (i32.const 48654) "a") (data (i32.const 48657) "a") (data (i32.const 48660) "a") (data (i32.const 48663) "a") (data (i32.const 48666) "a") (data (i32.const 48669) "a") (data (i32.const 48672) "a") (data (i32.const 48675) "a") (data (i32.const 48678) "a") (data (i32.const 48681) "a") (data (i32.const 48684) "a") (data (i32.const 48687) "a") (data (i32.const 48690) "a") (data (i32.const 48693) "a") (data (i32.const 48696) "a") (data (i32.const 48699) "a") (data (i32.const 48702) "a") (data (i32.const 48705) "a") (data (i32.const 48708) "a") (data (i32.const 48711) "a") (data (i32.const 48714) "a") (data (i32.const 48717) "a") (data (i32.const 48720) "a") (data (i32.const 48723) "a") (data (i32.const 48726) "a") (data (i32.const 48729) "a") (data (i32.const 48732) "a") (data (i32.const 48735) "a") (data (i32.const 48738) "a") (data (i32.const 48741) "a") (data (i32.const 48744) "a") (data (i32.const 48747) "a") (data (i32.const 48750) "a") (data (i32.const 48753) "a") (data (i32.const 48756) "a") (data (i32.const 48759) "a") (data (i32.const 48762) "a") (data (i32.const 48765) "a") (data (i32.const 48768) "a") (data (i32.const 48771) "a") (data (i32.const 48774) "a") (data (i32.const 48777) "a") (data (i32.const 48780) "a") (data (i32.const 48783) "a") (data (i32.const 48786) "a") (data (i32.const 48789) "a") (data (i32.const 48792) "a") (data (i32.const 48795) "a") (data (i32.const 48798) "a") (data (i32.const 48801) "a") (data (i32.const 48804) "a") (data (i32.const 48807) "a") (data (i32.const 48810) "a") (data (i32.const 48813) "a") (data (i32.const 48816) "a") (data (i32.const 48819) "a") (data (i32.const 48822) "a") (data (i32.const 48825) "a") (data (i32.const 48828) "a") (data (i32.const 48831) "a") (data (i32.const 48834) "a") (data (i32.const 48837) "a") (data (i32.const 48840) "a") (data (i32.const 48843) "a") (data (i32.const 48846) "a") (data (i32.const 48849) "a") (data (i32.const 48852) "a") (data (i32.const 48855) "a") (data (i32.const 48858) "a") (data (i32.const 48861) "a") (data (i32.const 48864) "a") (data (i32.const 48867) "a") (data (i32.const 48870) "a") (data (i32.const 48873) "a") (data (i32.const 48876) "a") (data (i32.const 48879) "a") (data (i32.const 48882) "a") (data (i32.const 48885) "a") (data (i32.const 48888) "a") (data (i32.const 48891) "a") (data (i32.const 48894) "a") (data (i32.const 48897) "a") (data (i32.const 48900) "a") (data (i32.const 48903) "a") (data (i32.const 48906) "a") (data (i32.const 48909) "a") (data (i32.const 48912) "a") (data (i32.const 48915) "a") (data (i32.const 48918) "a") (data (i32.const 48921) "a") (data (i32.const 48924) "a") (data (i32.const 48927) "a") (data (i32.const 48930) "a") (data (i32.const 48933) "a") (data (i32.const 48936) "a") (data (i32.const 48939) "a") (data (i32.const 48942) "a") (data (i32.const 48945) "a") (data (i32.const 48948) "a") (data (i32.const 48951) "a") (data (i32.const 48954) "a") (data (i32.const 48957) "a") (data (i32.const 48960) "a") (data (i32.const 48963) "a") (data (i32.const 48966) "a") (data (i32.const 48969) "a") (data (i32.const 48972) "a") (data (i32.const 48975) "a") (data (i32.const 48978) "a") (data (i32.const 48981) "a") (data (i32.const 48984) "a") (data (i32.const 48987) "a") (data (i32.const 48990) "a") (data (i32.const 48993) "a") (data (i32.const 48996) "a") (data (i32.const 48999) "a") (data (i32.const 49002) "a") (data (i32.const 49005) "a") (data (i32.const 49008) "a") (data (i32.const 49011) "a") (data (i32.const 49014) "a") (data (i32.const 49017) "a") (data (i32.const 49020) "a") (data (i32.const 49023) "a") (data (i32.const 49026) "a") (data (i32.const 49029) "a") (data (i32.const 49032) "a") (data (i32.const 49035) "a") (data (i32.const 49038) "a") (data (i32.const 49041) "a") (data (i32.const 49044) "a") (data (i32.const 49047) "a") (data (i32.const 49050) "a") (data (i32.const 49053) "a") (data (i32.const 49056) "a") (data (i32.const 49059) "a") (data (i32.const 49062) "a") (data (i32.const 49065) "a") (data (i32.const 49068) "a") (data (i32.const 49071) "a") (data (i32.const 49074) "a") (data (i32.const 49077) "a") (data (i32.const 49080) "a") (data (i32.const 49083) "a") (data (i32.const 49086) "a") (data (i32.const 49089) "a") (data (i32.const 49092) "a") (data (i32.const 49095) "a") (data (i32.const 49098) "a") (data (i32.const 49101) "a") (data (i32.const 49104) "a") (data (i32.const 49107) "a") (data (i32.const 49110) "a") (data (i32.const 49113) "a") (data (i32.const 49116) "a") (data (i32.const 49119) "a") (data (i32.const 49122) "a") (data (i32.const 49125) "a") (data (i32.const 49128) "a") (data (i32.const 49131) "a") (data (i32.const 49134) "a") (data (i32.const 49137) "a") (data (i32.const 49140) "a") (data (i32.const 49143) "a") (data (i32.const 49146) "a") (data (i32.const 49149) "a") (data (i32.const 49152) "a") (data (i32.const 49155) "a") (data (i32.const 49158) "a") (data (i32.const 49161) "a") (data (i32.const 49164) "a") (data (i32.const 49167) "a") (data (i32.const 49170) "a") (data (i32.const 49173) "a") (data (i32.const 49176) "a") (data (i32.const 49179) "a") (data (i32.const 49182) "a") (data (i32.const 49185) "a") (data (i32.const 49188) "a") (data (i32.const 49191) "a") (data (i32.const 49194) "a") (data (i32.const 49197) "a") (data (i32.const 49200) "a") (data (i32.const 49203) "a") (data (i32.const 49206) "a") (data (i32.const 49209) "a") (data (i32.const 49212) "a") (data (i32.const 49215) "a") (data (i32.const 49218) "a") (data (i32.const 49221) "a") (data (i32.const 49224) "a") (data (i32.const 49227) "a") (data (i32.const 49230) "a") (data (i32.const 49233) "a") (data (i32.const 49236) "a") (data (i32.const 49239) "a") (data (i32.const 49242) "a") (data (i32.const 49245) "a") (data (i32.const 49248) "a") (data (i32.const 49251) "a") (data (i32.const 49254) "a") (data (i32.const 49257) "a") (data (i32.const 49260) "a") (data (i32.const 49263) "a") (data (i32.const 49266) "a") (data (i32.const 49269) "a") (data (i32.const 49272) "a") (data (i32.const 49275) "a") (data (i32.const 49278) "a") (data (i32.const 49281) "a") (data (i32.const 49284) "a") (data (i32.const 49287) "a") (data (i32.const 49290) "a") (data (i32.const 49293) "a") (data (i32.const 49296) "a") (data (i32.const 49299) "a") (data (i32.const 49302) "a") (data (i32.const 49305) "a") (data (i32.const 49308) "a") (data (i32.const 49311) "a") (data (i32.const 49314) "a") (data (i32.const 49317) "a") (data (i32.const 49320) "a") (data (i32.const 49323) "a") (data (i32.const 49326) "a") (data (i32.const 49329) "a") (data (i32.const 49332) "a") (data (i32.const 49335) "a") (data (i32.const 49338) "a") (data (i32.const 49341) "a") (data (i32.const 49344) "a") (data (i32.const 49347) "a") (data (i32.const 49350) "a") (data (i32.const 49353) "a") (data (i32.const 49356) "a") (data (i32.const 49359) "a") (data (i32.const 49362) "a") (data (i32.const 49365) "a") (data (i32.const 49368) "a") (data (i32.const 49371) "a") (data (i32.const 49374) "a") (data (i32.const 49377) "a") (data (i32.const 49380) "a") (data (i32.const 49383) "a") (data (i32.const 49386) "a") (data (i32.const 49389) "a") (data (i32.const 49392) "a") (data (i32.const 49395) "a") (data (i32.const 49398) "a") (data (i32.const 49401) "a") (data (i32.const 49404) "a") (data (i32.const 49407) "a") (data (i32.const 49410) "a") (data (i32.const 49413) "a") (data (i32.const 49416) "a") (data (i32.const 49419) "a") (data (i32.const 49422) "a") (data (i32.const 49425) "a") (data (i32.const 49428) "a") (data (i32.const 49431) "a") (data (i32.const 49434) "a") (data (i32.const 49437) "a") (data (i32.const 49440) "a") (data (i32.const 49443) "a") (data (i32.const 49446) "a") (data (i32.const 49449) "a") (data (i32.const 49452) "a") (data (i32.const 49455) "a") (data (i32.const 49458) "a") (data (i32.const 49461) "a") (data (i32.const 49464) "a") (data (i32.const 49467) "a") (data (i32.const 49470) "a") (data (i32.const 49473) "a") (data (i32.const 49476) "a") (data (i32.const 49479) "a") (data (i32.const 49482) "a") (data (i32.const 49485) "a") (data (i32.const 49488) "a") (data (i32.const 49491) "a") (data (i32.const 49494) "a") (data (i32.const 49497) "a") (data (i32.const 49500) "a") (data (i32.const 49503) "a") (data (i32.const 49506) "a") (data (i32.const 49509) "a") (data (i32.const 49512) "a") (data (i32.const 49515) "a") (data (i32.const 49518) "a") (data (i32.const 49521) "a") (data (i32.const 49524) "a") (data (i32.const 49527) "a") (data (i32.const 49530) "a") (data (i32.const 49533) "a") (data (i32.const 49536) "a") (data (i32.const 49539) "a") (data (i32.const 49542) "a") (data (i32.const 49545) "a") (data (i32.const 49548) "a") (data (i32.const 49551) "a") (data (i32.const 49554) "a") (data (i32.const 49557) "a") (data (i32.const 49560) "a") (data (i32.const 49563) "a") (data (i32.const 49566) "a") (data (i32.const 49569) "a") (data (i32.const 49572) "a") (data (i32.const 49575) "a") (data (i32.const 49578) "a") (data (i32.const 49581) "a") (data (i32.const 49584) "a") (data (i32.const 49587) "a") (data (i32.const 49590) "a") (data (i32.const 49593) "a") (data (i32.const 49596) "a") (data (i32.const 49599) "a") (data (i32.const 49602) "a") (data (i32.const 49605) "a") (data (i32.const 49608) "a") (data (i32.const 49611) "a") (data (i32.const 49614) "a") (data (i32.const 49617) "a") (data (i32.const 49620) "a") (data (i32.const 49623) "a") (data (i32.const 49626) "a") (data (i32.const 49629) "a") (data (i32.const 49632) "a") (data (i32.const 49635) "a") (data (i32.const 49638) "a") (data (i32.const 49641) "a") (data (i32.const 49644) "a") (data (i32.const 49647) "a") (data (i32.const 49650) "a") (data (i32.const 49653) "a") (data (i32.const 49656) "a") (data (i32.const 49659) "a") (data (i32.const 49662) "a") (data (i32.const 49665) "a") (data (i32.const 49668) "a") (data (i32.const 49671) "a") (data (i32.const 49674) "a") (data (i32.const 49677) "a") (data (i32.const 49680) "a") (data (i32.const 49683) "a") (data (i32.const 49686) "a") (data (i32.const 49689) "a") (data (i32.const 49692) "a") (data (i32.const 49695) "a") (data (i32.const 49698) "a") (data (i32.const 49701) "a") (data (i32.const 49704) "a") (data (i32.const 49707) "a") (data (i32.const 49710) "a") (data (i32.const 49713) "a") (data (i32.const 49716) "a") (data (i32.const 49719) "a") (data (i32.const 49722) "a") (data (i32.const 49725) "a") (data (i32.const 49728) "a") (data (i32.const 49731) "a") (data (i32.const 49734) "a") (data (i32.const 49737) "a") (data (i32.const 49740) "a") (data (i32.const 49743) "a") (data (i32.const 49746) "a") (data (i32.const 49749) "a") (data (i32.const 49752) "a") (data (i32.const 49755) "a") (data (i32.const 49758) "a") (data (i32.const 49761) "a") (data (i32.const 49764) "a") (data (i32.const 49767) "a") (data (i32.const 49770) "a") (data (i32.const 49773) "a") (data (i32.const 49776) "a") (data (i32.const 49779) "a") (data (i32.const 49782) "a") (data (i32.const 49785) "a") (data (i32.const 49788) "a") (data (i32.const 49791) "a") (data (i32.const 49794) "a") (data (i32.const 49797) "a") (data (i32.const 49800) "a") (data (i32.const 49803) "a") (data (i32.const 49806) "a") (data (i32.const 49809) "a") (data (i32.const 49812) "a") (data (i32.const 49815) "a") (data (i32.const 49818) "a") (data (i32.const 49821) "a") (data (i32.const 49824) "a") (data (i32.const 49827) "a") (data (i32.const 49830) "a") (data (i32.const 49833) "a") (data (i32.const 49836) "a") (data (i32.const 49839) "a") (data (i32.const 49842) "a") (data (i32.const 49845) "a") (data (i32.const 49848) "a") (data (i32.const 49851) "a") (data (i32.const 49854) "a") (data (i32.const 49857) "a") (data (i32.const 49860) "a") (data (i32.const 49863) "a") (data (i32.const 49866) "a") (data (i32.const 49869) "a") (data (i32.const 49872) "a") (data (i32.const 49875) "a") (data (i32.const 49878) "a") (data (i32.const 49881) "a") (data (i32.const 49884) "a") (data (i32.const 49887) "a") (data (i32.const 49890) "a") (data (i32.const 49893) "a") (data (i32.const 49896) "a") (data (i32.const 49899) "a") (data (i32.const 49902) "a") (data (i32.const 49905) "a") (data (i32.const 49908) "a") (data (i32.const 49911) "a") (data (i32.const 49914) "a") (data (i32.const 49917) "a") (data (i32.const 49920) "a") (data (i32.const 49923) "a") (data (i32.const 49926) "a") (data (i32.const 49929) "a") (data (i32.const 49932) "a") (data (i32.const 49935) "a") (data (i32.const 49938) "a") (data (i32.const 49941) "a") (data (i32.const 49944) "a") (data (i32.const 49947) "a") (data (i32.const 49950) "a") (data (i32.const 49953) "a") (data (i32.const 49956) "a") (data (i32.const 49959) "a") (data (i32.const 49962) "a") (data (i32.const 49965) "a") (data (i32.const 49968) "a") (data (i32.const 49971) "a") (data (i32.const 49974) "a") (data (i32.const 49977) "a") (data (i32.const 49980) "a") (data (i32.const 49983) "a") (data (i32.const 49986) "a") (data (i32.const 49989) "a") (data (i32.const 49992) "a") (data (i32.const 49995) "a") (data (i32.const 49998) "a") (data (i32.const 50001) "a") (data (i32.const 50004) "a") (data (i32.const 50007) "a") (data (i32.const 50010) "a") (data (i32.const 50013) "a") (data (i32.const 50016) "a") (data (i32.const 50019) "a") (data (i32.const 50022) "a") (data (i32.const 50025) "a") (data (i32.const 50028) "a") (data (i32.const 50031) "a") (data (i32.const 50034) "a") (data (i32.const 50037) "a") (data (i32.const 50040) "a") (data (i32.const 50043) "a") (data (i32.const 50046) "a") (data (i32.const 50049) "a") (data (i32.const 50052) "a") (data (i32.const 50055) "a") (data (i32.const 50058) "a") (data (i32.const 50061) "a") (data (i32.const 50064) "a") (data (i32.const 50067) "a") (data (i32.const 50070) "a") (data (i32.const 50073) "a") (data (i32.const 50076) "a") (data (i32.const 50079) "a") (data (i32.const 50082) "a") (data (i32.const 50085) "a") (data (i32.const 50088) "a") (data (i32.const 50091) "a") (data (i32.const 50094) "a") (data (i32.const 50097) "a") (data (i32.const 50100) "a") (data (i32.const 50103) "a") (data (i32.const 50106) "a") (data (i32.const 50109) "a") (data (i32.const 50112) "a") (data (i32.const 50115) "a") (data (i32.const 50118) "a") (data (i32.const 50121) "a") (data (i32.const 50124) "a") (data (i32.const 50127) "a") (data (i32.const 50130) "a") (data (i32.const 50133) "a") (data (i32.const 50136) "a") (data (i32.const 50139) "a") (data (i32.const 50142) "a") (data (i32.const 50145) "a") (data (i32.const 50148) "a") (data (i32.const 50151) "a") (data (i32.const 50154) "a") (data (i32.const 50157) "a") (data (i32.const 50160) "a") (data (i32.const 50163) "a") (data (i32.const 50166) "a") (data (i32.const 50169) "a") (data (i32.const 50172) "a") (data (i32.const 50175) "a") (data (i32.const 50178) "a") (data (i32.const 50181) "a") (data (i32.const 50184) "a") (data (i32.const 50187) "a") (data (i32.const 50190) "a") (data (i32.const 50193) "a") (data (i32.const 50196) "a") (data (i32.const 50199) "a") (data (i32.const 50202) "a") (data (i32.const 50205) "a") (data (i32.const 50208) "a") (data (i32.const 50211) "a") (data (i32.const 50214) "a") (data (i32.const 50217) "a") (data (i32.const 50220) "a") (data (i32.const 50223) "a") (data (i32.const 50226) "a") (data (i32.const 50229) "a") (data (i32.const 50232) "a") (data (i32.const 50235) "a") (data (i32.const 50238) "a") (data (i32.const 50241) "a") (data (i32.const 50244) "a") (data (i32.const 50247) "a") (data (i32.const 50250) "a") (data (i32.const 50253) "a") (data (i32.const 50256) "a") (data (i32.const 50259) "a") (data (i32.const 50262) "a") (data (i32.const 50265) "a") (data (i32.const 50268) "a") (data (i32.const 50271) "a") (data (i32.const 50274) "a") (data (i32.const 50277) "a") (data (i32.const 50280) "a") (data (i32.const 50283) "a") (data (i32.const 50286) "a") (data (i32.const 50289) "a") (data (i32.const 50292) "a") (data (i32.const 50295) "a") (data (i32.const 50298) "a") (data (i32.const 50301) "a") (data (i32.const 50304) "a") (data (i32.const 50307) "a") (data (i32.const 50310) "a") (data (i32.const 50313) "a") (data (i32.const 50316) "a") (data (i32.const 50319) "a") (data (i32.const 50322) "a") (data (i32.const 50325) "a") (data (i32.const 50328) "a") (data (i32.const 50331) "a") (data (i32.const 50334) "a") (data (i32.const 50337) "a") (data (i32.const 50340) "a") (data (i32.const 50343) "a") (data (i32.const 50346) "a") (data (i32.const 50349) "a") (data (i32.const 50352) "a") (data (i32.const 50355) "a") (data (i32.const 50358) "a") (data (i32.const 50361) "a") (data (i32.const 50364) "a") (data (i32.const 50367) "a") (data (i32.const 50370) "a") (data (i32.const 50373) "a") (data (i32.const 50376) "a") (data (i32.const 50379) "a") (data (i32.const 50382) "a") (data (i32.const 50385) "a") (data (i32.const 50388) "a") (data (i32.const 50391) "a") (data (i32.const 50394) "a") (data (i32.const 50397) "a") (data (i32.const 50400) "a") (data (i32.const 50403) "a") (data (i32.const 50406) "a") (data (i32.const 50409) "a") (data (i32.const 50412) "a") (data (i32.const 50415) "a") (data (i32.const 50418) "a") (data (i32.const 50421) "a") (data (i32.const 50424) "a") (data (i32.const 50427) "a") (data (i32.const 50430) "a") (data (i32.const 50433) "a") (data (i32.const 50436) "a") (data (i32.const 50439) "a") (data (i32.const 50442) "a") (data (i32.const 50445) "a") (data (i32.const 50448) "a") (data (i32.const 50451) "a") (data (i32.const 50454) "a") (data (i32.const 50457) "a") (data (i32.const 50460) "a") (data (i32.const 50463) "a") (data (i32.const 50466) "a") (data (i32.const 50469) "a") (data (i32.const 50472) "a") (data (i32.const 50475) "a") (data (i32.const 50478) "a") (data (i32.const 50481) "a") (data (i32.const 50484) "a") (data (i32.const 50487) "a") (data (i32.const 50490) "a") (data (i32.const 50493) "a") (data (i32.const 50496) "a") (data (i32.const 50499) "a") (data (i32.const 50502) "a") (data (i32.const 50505) "a") (data (i32.const 50508) "a") (data (i32.const 50511) "a") (data (i32.const 50514) "a") (data (i32.const 50517) "a") (data (i32.const 50520) "a") (data (i32.const 50523) "a") (data (i32.const 50526) "a") (data (i32.const 50529) "a") (data (i32.const 50532) "a") (data (i32.const 50535) "a") (data (i32.const 50538) "a") (data (i32.const 50541) "a") (data (i32.const 50544) "a") (data (i32.const 50547) "a") (data (i32.const 50550) "a") (data (i32.const 50553) "a") (data (i32.const 50556) "a") (data (i32.const 50559) "a") (data (i32.const 50562) "a") (data (i32.const 50565) "a") (data (i32.const 50568) "a") (data (i32.const 50571) "a") (data (i32.const 50574) "a") (data (i32.const 50577) "a") (data (i32.const 50580) "a") (data (i32.const 50583) "a") (data (i32.const 50586) "a") (data (i32.const 50589) "a") (data (i32.const 50592) "a") (data (i32.const 50595) "a") (data (i32.const 50598) "a") (data (i32.const 50601) "a") (data (i32.const 50604) "a") (data (i32.const 50607) "a") (data (i32.const 50610) "a") (data (i32.const 50613) "a") (data (i32.const 50616) "a") (data (i32.const 50619) "a") (data (i32.const 50622) "a") (data (i32.const 50625) "a") (data (i32.const 50628) "a") (data (i32.const 50631) "a") (data (i32.const 50634) "a") (data (i32.const 50637) "a") (data (i32.const 50640) "a") (data (i32.const 50643) "a") (data (i32.const 50646) "a") (data (i32.const 50649) "a") (data (i32.const 50652) "a") (data (i32.const 50655) "a") (data (i32.const 50658) "a") (data (i32.const 50661) "a") (data (i32.const 50664) "a") (data (i32.const 50667) "a") (data (i32.const 50670) "a") (data (i32.const 50673) "a") (data (i32.const 50676) "a") (data (i32.const 50679) "a") (data (i32.const 50682) "a") (data (i32.const 50685) "a") (data (i32.const 50688) "a") (data (i32.const 50691) "a") (data (i32.const 50694) "a") (data (i32.const 50697) "a") (data (i32.const 50700) "a") (data (i32.const 50703) "a") (data (i32.const 50706) "a") (data (i32.const 50709) "a") (data (i32.const 50712) "a") (data (i32.const 50715) "a") (data (i32.const 50718) "a") (data (i32.const 50721) "a") (data (i32.const 50724) "a") (data (i32.const 50727) "a") (data (i32.const 50730) "a") (data (i32.const 50733) "a") (data (i32.const 50736) "a") (data (i32.const 50739) "a") (data (i32.const 50742) "a") (data (i32.const 50745) "a") (data (i32.const 50748) "a") (data (i32.const 50751) "a") (data (i32.const 50754) "a") (data (i32.const 50757) "a") (data (i32.const 50760) "a") (data (i32.const 50763) "a") (data (i32.const 50766) "a") (data (i32.const 50769) "a") (data (i32.const 50772) "a") (data (i32.const 50775) "a") (data (i32.const 50778) "a") (data (i32.const 50781) "a") (data (i32.const 50784) "a") (data (i32.const 50787) "a") (data (i32.const 50790) "a") (data (i32.const 50793) "a") (data (i32.const 50796) "a") (data (i32.const 50799) "a") (data (i32.const 50802) "a") (data (i32.const 50805) "a") (data (i32.const 50808) "a") (data (i32.const 50811) "a") (data (i32.const 50814) "a") (data (i32.const 50817) "a") (data (i32.const 50820) "a") (data (i32.const 50823) "a") (data (i32.const 50826) "a") (data (i32.const 50829) "a") (data (i32.const 50832) "a") (data (i32.const 50835) "a") (data (i32.const 50838) "a") (data (i32.const 50841) "a") (data (i32.const 50844) "a") (data (i32.const 50847) "a") (data (i32.const 50850) "a") (data (i32.const 50853) "a") (data (i32.const 50856) "a") (data (i32.const 50859) "a") (data (i32.const 50862) "a") (data (i32.const 50865) "a") (data (i32.const 50868) "a") (data (i32.const 50871) "a") (data (i32.const 50874) "a") (data (i32.const 50877) "a") (data (i32.const 50880) "a") (data (i32.const 50883) "a") (data (i32.const 50886) "a") (data (i32.const 50889) "a") (data (i32.const 50892) "a") (data (i32.const 50895) "a") (data (i32.const 50898) "a") (data (i32.const 50901) "a") (data (i32.const 50904) "a") (data (i32.const 50907) "a") (data (i32.const 50910) "a") (data (i32.const 50913) "a") (data (i32.const 50916) "a") (data (i32.const 50919) "a") (data (i32.const 50922) "a") (data (i32.const 50925) "a") (data (i32.const 50928) "a") (data (i32.const 50931) "a") (data (i32.const 50934) "a") (data (i32.const 50937) "a") (data (i32.const 50940) "a") (data (i32.const 50943) "a") (data (i32.const 50946) "a") (data (i32.const 50949) "a") (data (i32.const 50952) "a") (data (i32.const 50955) "a") (data (i32.const 50958) "a") (data (i32.const 50961) "a") (data (i32.const 50964) "a") (data (i32.const 50967) "a") (data (i32.const 50970) "a") (data (i32.const 50973) "a") (data (i32.const 50976) "a") (data (i32.const 50979) "a") (data (i32.const 50982) "a") (data (i32.const 50985) "a") (data (i32.const 50988) "a") (data (i32.const 50991) "a") (data (i32.const 50994) "a") (data (i32.const 50997) "a") (data (i32.const 51000) "a") (data (i32.const 51003) "a") (data (i32.const 51006) "a") (data (i32.const 51009) "a") (data (i32.const 51012) "a") (data (i32.const 51015) "a") (data (i32.const 51018) "a") (data (i32.const 51021) "a") (data (i32.const 51024) "a") (data (i32.const 51027) "a") (data (i32.const 51030) "a") (data (i32.const 51033) "a") (data (i32.const 51036) "a") (data (i32.const 51039) "a") (data (i32.const 51042) "a") (data (i32.const 51045) "a") (data (i32.const 51048) "a") (data (i32.const 51051) "a") (data (i32.const 51054) "a") (data (i32.const 51057) "a") (data (i32.const 51060) "a") (data (i32.const 51063) "a") (data (i32.const 51066) "a") (data (i32.const 51069) "a") (data (i32.const 51072) "a") (data (i32.const 51075) "a") (data (i32.const 51078) "a") (data (i32.const 51081) "a") (data (i32.const 51084) "a") (data (i32.const 51087) "a") (data (i32.const 51090) "a") (data (i32.const 51093) "a") (data (i32.const 51096) "a") (data (i32.const 51099) "a") (data (i32.const 51102) "a") (data (i32.const 51105) "a") (data (i32.const 51108) "a") (data (i32.const 51111) "a") (data (i32.const 51114) "a") (data (i32.const 51117) "a") (data (i32.const 51120) "a") (data (i32.const 51123) "a") (data (i32.const 51126) "a") (data (i32.const 51129) "a") (data (i32.const 51132) "a") (data (i32.const 51135) "a") (data (i32.const 51138) "a") (data (i32.const 51141) "a") (data (i32.const 51144) "a") (data (i32.const 51147) "a") (data (i32.const 51150) "a") (data (i32.const 51153) "a") (data (i32.const 51156) "a") (data (i32.const 51159) "a") (data (i32.const 51162) "a") (data (i32.const 51165) "a") (data (i32.const 51168) "a") (data (i32.const 51171) "a") (data (i32.const 51174) "a") (data (i32.const 51177) "a") (data (i32.const 51180) "a") (data (i32.const 51183) "a") (data (i32.const 51186) "a") (data (i32.const 51189) "a") (data (i32.const 51192) "a") (data (i32.const 51195) "a") (data (i32.const 51198) "a") (data (i32.const 51201) "a") (data (i32.const 51204) "a") (data (i32.const 51207) "a") (data (i32.const 51210) "a") (data (i32.const 51213) "a") (data (i32.const 51216) "a") (data (i32.const 51219) "a") (data (i32.const 51222) "a") (data (i32.const 51225) "a") (data (i32.const 51228) "a") (data (i32.const 51231) "a") (data (i32.const 51234) "a") (data (i32.const 51237) "a") (data (i32.const 51240) "a") (data (i32.const 51243) "a") (data (i32.const 51246) "a") (data (i32.const 51249) "a") (data (i32.const 51252) "a") (data (i32.const 51255) "a") (data (i32.const 51258) "a") (data (i32.const 51261) "a") (data (i32.const 51264) "a") (data (i32.const 51267) "a") (data (i32.const 51270) "a") (data (i32.const 51273) "a") (data (i32.const 51276) "a") (data (i32.const 51279) "a") (data (i32.const 51282) "a") (data (i32.const 51285) "a") (data (i32.const 51288) "a") (data (i32.const 51291) "a") (data (i32.const 51294) "a") (data (i32.const 51297) "a") (data (i32.const 51300) "a") (data (i32.const 51303) "a") (data (i32.const 51306) "a") (data (i32.const 51309) "a") (data (i32.const 51312) "a") (data (i32.const 51315) "a") (data (i32.const 51318) "a") (data (i32.const 51321) "a") (data (i32.const 51324) "a") (data (i32.const 51327) "a") (data (i32.const 51330) "a") (data (i32.const 51333) "a") (data (i32.const 51336) "a") (data (i32.const 51339) "a") (data (i32.const 51342) "a") (data (i32.const 51345) "a") (data (i32.const 51348) "a") (data (i32.const 51351) "a") (data (i32.const 51354) "a") (data (i32.const 51357) "a") (data (i32.const 51360) "a") (data (i32.const 51363) "a") (data (i32.const 51366) "a") (data (i32.const 51369) "a") (data (i32.const 51372) "a") (data (i32.const 51375) "a") (data (i32.const 51378) "a") (data (i32.const 51381) "a") (data (i32.const 51384) "a") (data (i32.const 51387) "a") (data (i32.const 51390) "a") (data (i32.const 51393) "a") (data (i32.const 51396) "a") (data (i32.const 51399) "a") (data (i32.const 51402) "a") (data (i32.const 51405) "a") (data (i32.const 51408) "a") (data (i32.const 51411) "a") (data (i32.const 51414) "a") (data (i32.const 51417) "a") (data (i32.const 51420) "a") (data (i32.const 51423) "a") (data (i32.const 51426) "a") (data (i32.const 51429) "a") (data (i32.const 51432) "a") (data (i32.const 51435) "a") (data (i32.const 51438) "a") (data (i32.const 51441) "a") (data (i32.const 51444) "a") (data (i32.const 51447) "a") (data (i32.const 51450) "a") (data (i32.const 51453) "a") (data (i32.const 51456) "a") (data (i32.const 51459) "a") (data (i32.const 51462) "a") (data (i32.const 51465) "a") (data (i32.const 51468) "a") (data (i32.const 51471) "a") (data (i32.const 51474) "a") (data (i32.const 51477) "a") (data (i32.const 51480) "a") (data (i32.const 51483) "a") (data (i32.const 51486) "a") (data (i32.const 51489) "a") (data (i32.const 51492) "a") (data (i32.const 51495) "a") (data (i32.const 51498) "a") (data (i32.const 51501) "a") (data (i32.const 51504) "a") (data (i32.const 51507) "a") (data (i32.const 51510) "a") (data (i32.const 51513) "a") (data (i32.const 51516) "a") (data (i32.const 51519) "a") (data (i32.const 51522) "a") (data (i32.const 51525) "a") (data (i32.const 51528) "a") (data (i32.const 51531) "a") (data (i32.const 51534) "a") (data (i32.const 51537) "a") (data (i32.const 51540) "a") (data (i32.const 51543) "a") (data (i32.const 51546) "a") (data (i32.const 51549) "a") (data (i32.const 51552) "a") (data (i32.const 51555) "a") (data (i32.const 51558) "a") (data (i32.const 51561) "a") (data (i32.const 51564) "a") (data (i32.const 51567) "a") (data (i32.const 51570) "a") (data (i32.const 51573) "a") (data (i32.const 51576) "a") (data (i32.const 51579) "a") (data (i32.const 51582) "a") (data (i32.const 51585) "a") (data (i32.const 51588) "a") (data (i32.const 51591) "a") (data (i32.const 51594) "a") (data (i32.const 51597) "a") (data (i32.const 51600) "a") (data (i32.const 51603) "a") (data (i32.const 51606) "a") (data (i32.const 51609) "a") (data (i32.const 51612) "a") (data (i32.const 51615) "a") (data (i32.const 51618) "a") (data (i32.const 51621) "a") (data (i32.const 51624) "a") (data (i32.const 51627) "a") (data (i32.const 51630) "a") (data (i32.const 51633) "a") (data (i32.const 51636) "a") (data (i32.const 51639) "a") (data (i32.const 51642) "a") (data (i32.const 51645) "a") (data (i32.const 51648) "a") (data (i32.const 51651) "a") (data (i32.const 51654) "a") (data (i32.const 51657) "a") (data (i32.const 51660) "a") (data (i32.const 51663) "a") (data (i32.const 51666) "a") (data (i32.const 51669) "a") (data (i32.const 51672) "a") (data (i32.const 51675) "a") (data (i32.const 51678) "a") (data (i32.const 51681) "a") (data (i32.const 51684) "a") (data (i32.const 51687) "a") (data (i32.const 51690) "a") (data (i32.const 51693) "a") (data (i32.const 51696) "a") (data (i32.const 51699) "a") (data (i32.const 51702) "a") (data (i32.const 51705) "a") (data (i32.const 51708) "a") (data (i32.const 51711) "a") (data (i32.const 51714) "a") (data (i32.const 51717) "a") (data (i32.const 51720) "a") (data (i32.const 51723) "a") (data (i32.const 51726) "a") (data (i32.const 51729) "a") (data (i32.const 51732) "a") (data (i32.const 51735) "a") (data (i32.const 51738) "a") (data (i32.const 51741) "a") (data (i32.const 51744) "a") (data (i32.const 51747) "a") (data (i32.const 51750) "a") (data (i32.const 51753) "a") (data (i32.const 51756) "a") (data (i32.const 51759) "a") (data (i32.const 51762) "a") (data (i32.const 51765) "a") (data (i32.const 51768) "a") (data (i32.const 51771) "a") (data (i32.const 51774) "a") (data (i32.const 51777) "a") (data (i32.const 51780) "a") (data (i32.const 51783) "a") (data (i32.const 51786) "a") (data (i32.const 51789) "a") (data (i32.const 51792) "a") (data (i32.const 51795) "a") (data (i32.const 51798) "a") (data (i32.const 51801) "a") (data (i32.const 51804) "a") (data (i32.const 51807) "a") (data (i32.const 51810) "a") (data (i32.const 51813) "a") (data (i32.const 51816) "a") (data (i32.const 51819) "a") (data (i32.const 51822) "a") (data (i32.const 51825) "a") (data (i32.const 51828) "a") (data (i32.const 51831) "a") (data (i32.const 51834) "a") (data (i32.const 51837) "a") (data (i32.const 51840) "a") (data (i32.const 51843) "a") (data (i32.const 51846) "a") (data (i32.const 51849) "a") (data (i32.const 51852) "a") (data (i32.const 51855) "a") (data (i32.const 51858) "a") (data (i32.const 51861) "a") (data (i32.const 51864) "a") (data (i32.const 51867) "a") (data (i32.const 51870) "a") (data (i32.const 51873) "a") (data (i32.const 51876) "a") (data (i32.const 51879) "a") (data (i32.const 51882) "a") (data (i32.const 51885) "a") (data (i32.const 51888) "a") (data (i32.const 51891) "a") (data (i32.const 51894) "a") (data (i32.const 51897) "a") (data (i32.const 51900) "a") (data (i32.const 51903) "a") (data (i32.const 51906) "a") (data (i32.const 51909) "a") (data (i32.const 51912) "a") (data (i32.const 51915) "a") (data (i32.const 51918) "a") (data (i32.const 51921) "a") (data (i32.const 51924) "a") (data (i32.const 51927) "a") (data (i32.const 51930) "a") (data (i32.const 51933) "a") (data (i32.const 51936) "a") (data (i32.const 51939) "a") (data (i32.const 51942) "a") (data (i32.const 51945) "a") (data (i32.const 51948) "a") (data (i32.const 51951) "a") (data (i32.const 51954) "a") (data (i32.const 51957) "a") (data (i32.const 51960) "a") (data (i32.const 51963) "a") (data (i32.const 51966) "a") (data (i32.const 51969) "a") (data (i32.const 51972) "a") (data (i32.const 51975) "a") (data (i32.const 51978) "a") (data (i32.const 51981) "a") (data (i32.const 51984) "a") (data (i32.const 51987) "a") (data (i32.const 51990) "a") (data (i32.const 51993) "a") (data (i32.const 51996) "a") (data (i32.const 51999) "a") (data (i32.const 52002) "a") (data (i32.const 52005) "a") (data (i32.const 52008) "a") (data (i32.const 52011) "a") (data (i32.const 52014) "a") (data (i32.const 52017) "a") (data (i32.const 52020) "a") (data (i32.const 52023) "a") (data (i32.const 52026) "a") (data (i32.const 52029) "a") (data (i32.const 52032) "a") (data (i32.const 52035) "a") (data (i32.const 52038) "a") (data (i32.const 52041) "a") (data (i32.const 52044) "a") (data (i32.const 52047) "a") (data (i32.const 52050) "a") (data (i32.const 52053) "a") (data (i32.const 52056) "a") (data (i32.const 52059) "a") (data (i32.const 52062) "a") (data (i32.const 52065) "a") (data (i32.const 52068) "a") (data (i32.const 52071) "a") (data (i32.const 52074) "a") (data (i32.const 52077) "a") (data (i32.const 52080) "a") (data (i32.const 52083) "a") (data (i32.const 52086) "a") (data (i32.const 52089) "a") (data (i32.const 52092) "a") (data (i32.const 52095) "a") (data (i32.const 52098) "a") (data (i32.const 52101) "a") (data (i32.const 52104) "a") (data (i32.const 52107) "a") (data (i32.const 52110) "a") (data (i32.const 52113) "a") (data (i32.const 52116) "a") (data (i32.const 52119) "a") (data (i32.const 52122) "a") (data (i32.const 52125) "a") (data (i32.const 52128) "a") (data (i32.const 52131) "a") (data (i32.const 52134) "a") (data (i32.const 52137) "a") (data (i32.const 52140) "a") (data (i32.const 52143) "a") (data (i32.const 52146) "a") (data (i32.const 52149) "a") (data (i32.const 52152) "a") (data (i32.const 52155) "a") (data (i32.const 52158) "a") (data (i32.const 52161) "a") (data (i32.const 52164) "a") (data (i32.const 52167) "a") (data (i32.const 52170) "a") (data (i32.const 52173) "a") (data (i32.const 52176) "a") (data (i32.const 52179) "a") (data (i32.const 52182) "a") (data (i32.const 52185) "a") (data (i32.const 52188) "a") (data (i32.const 52191) "a") (data (i32.const 52194) "a") (data (i32.const 52197) "a") (data (i32.const 52200) "a") (data (i32.const 52203) "a") (data (i32.const 52206) "a") (data (i32.const 52209) "a") (data (i32.const 52212) "a") (data (i32.const 52215) "a") (data (i32.const 52218) "a") (data (i32.const 52221) "a") (data (i32.const 52224) "a") (data (i32.const 52227) "a") (data (i32.const 52230) "a") (data (i32.const 52233) "a") (data (i32.const 52236) "a") (data (i32.const 52239) "a") (data (i32.const 52242) "a") (data (i32.const 52245) "a") (data (i32.const 52248) "a") (data (i32.const 52251) "a") (data (i32.const 52254) "a") (data (i32.const 52257) "a") (data (i32.const 52260) "a") (data (i32.const 52263) "a") (data (i32.const 52266) "a") (data (i32.const 52269) "a") (data (i32.const 52272) "a") (data (i32.const 52275) "a") (data (i32.const 52278) "a") (data (i32.const 52281) "a") (data (i32.const 52284) "a") (data (i32.const 52287) "a") (data (i32.const 52290) "a") (data (i32.const 52293) "a") (data (i32.const 52296) "a") (data (i32.const 52299) "a") (data (i32.const 52302) "a") (data (i32.const 52305) "a") (data (i32.const 52308) "a") (data (i32.const 52311) "a") (data (i32.const 52314) "a") (data (i32.const 52317) "a") (data (i32.const 52320) "a") (data (i32.const 52323) "a") (data (i32.const 52326) "a") (data (i32.const 52329) "a") (data (i32.const 52332) "a") (data (i32.const 52335) "a") (data (i32.const 52338) "a") (data (i32.const 52341) "a") (data (i32.const 52344) "a") (data (i32.const 52347) "a") (data (i32.const 52350) "a") (data (i32.const 52353) "a") (data (i32.const 52356) "a") (data (i32.const 52359) "a") (data (i32.const 52362) "a") (data (i32.const 52365) "a") (data (i32.const 52368) "a") (data (i32.const 52371) "a") (data (i32.const 52374) "a") (data (i32.const 52377) "a") (data (i32.const 52380) "a") (data (i32.const 52383) "a") (data (i32.const 52386) "a") (data (i32.const 52389) "a") (data (i32.const 52392) "a") (data (i32.const 52395) "a") (data (i32.const 52398) "a") (data (i32.const 52401) "a") (data (i32.const 52404) "a") (data (i32.const 52407) "a") (data (i32.const 52410) "a") (data (i32.const 52413) "a") (data (i32.const 52416) "a") (data (i32.const 52419) "a") (data (i32.const 52422) "a") (data (i32.const 52425) "a") (data (i32.const 52428) "a") (data (i32.const 52431) "a") (data (i32.const 52434) "a") (data (i32.const 52437) "a") (data (i32.const 52440) "a") (data (i32.const 52443) "a") (data (i32.const 52446) "a") (data (i32.const 52449) "a") (data (i32.const 52452) "a") (data (i32.const 52455) "a") (data (i32.const 52458) "a") (data (i32.const 52461) "a") (data (i32.const 52464) "a") (data (i32.const 52467) "a") (data (i32.const 52470) "a") (data (i32.const 52473) "a") (data (i32.const 52476) "a") (data (i32.const 52479) "a") (data (i32.const 52482) "a") (data (i32.const 52485) "a") (data (i32.const 52488) "a") (data (i32.const 52491) "a") (data (i32.const 52494) "a") (data (i32.const 52497) "a") (data (i32.const 52500) "a") (data (i32.const 52503) "a") (data (i32.const 52506) "a") (data (i32.const 52509) "a") (data (i32.const 52512) "a") (data (i32.const 52515) "a") (data (i32.const 52518) "a") (data (i32.const 52521) "a") (data (i32.const 52524) "a") (data (i32.const 52527) "a") (data (i32.const 52530) "a") (data (i32.const 52533) "a") (data (i32.const 52536) "a") (data (i32.const 52539) "a") (data (i32.const 52542) "a") (data (i32.const 52545) "a") (data (i32.const 52548) "a") (data (i32.const 52551) "a") (data (i32.const 52554) "a") (data (i32.const 52557) "a") (data (i32.const 52560) "a") (data (i32.const 52563) "a") (data (i32.const 52566) "a") (data (i32.const 52569) "a") (data (i32.const 52572) "a") (data (i32.const 52575) "a") (data (i32.const 52578) "a") (data (i32.const 52581) "a") (data (i32.const 52584) "a") (data (i32.const 52587) "a") (data (i32.const 52590) "a") (data (i32.const 52593) "a") (data (i32.const 52596) "a") (data (i32.const 52599) "a") (data (i32.const 52602) "a") (data (i32.const 52605) "a") (data (i32.const 52608) "a") (data (i32.const 52611) "a") (data (i32.const 52614) "a") (data (i32.const 52617) "a") (data (i32.const 52620) "a") (data (i32.const 52623) "a") (data (i32.const 52626) "a") (data (i32.const 52629) "a") (data (i32.const 52632) "a") (data (i32.const 52635) "a") (data (i32.const 52638) "a") (data (i32.const 52641) "a") (data (i32.const 52644) "a") (data (i32.const 52647) "a") (data (i32.const 52650) "a") (data (i32.const 52653) "a") (data (i32.const 52656) "a") (data (i32.const 52659) "a") (data (i32.const 52662) "a") (data (i32.const 52665) "a") (data (i32.const 52668) "a") (data (i32.const 52671) "a") (data (i32.const 52674) "a") (data (i32.const 52677) "a") (data (i32.const 52680) "a") (data (i32.const 52683) "a") (data (i32.const 52686) "a") (data (i32.const 52689) "a") (data (i32.const 52692) "a") (data (i32.const 52695) "a") (data (i32.const 52698) "a") (data (i32.const 52701) "a") (data (i32.const 52704) "a") (data (i32.const 52707) "a") (data (i32.const 52710) "a") (data (i32.const 52713) "a") (data (i32.const 52716) "a") (data (i32.const 52719) "a") (data (i32.const 52722) "a") (data (i32.const 52725) "a") (data (i32.const 52728) "a") (data (i32.const 52731) "a") (data (i32.const 52734) "a") (data (i32.const 52737) "a") (data (i32.const 52740) "a") (data (i32.const 52743) "a") (data (i32.const 52746) "a") (data (i32.const 52749) "a") (data (i32.const 52752) "a") (data (i32.const 52755) "a") (data (i32.const 52758) "a") (data (i32.const 52761) "a") (data (i32.const 52764) "a") (data (i32.const 52767) "a") (data (i32.const 52770) "a") (data (i32.const 52773) "a") (data (i32.const 52776) "a") (data (i32.const 52779) "a") (data (i32.const 52782) "a") (data (i32.const 52785) "a") (data (i32.const 52788) "a") (data (i32.const 52791) "a") (data (i32.const 52794) "a") (data (i32.const 52797) "a") (data (i32.const 52800) "a") (data (i32.const 52803) "a") (data (i32.const 52806) "a") (data (i32.const 52809) "a") (data (i32.const 52812) "a") (data (i32.const 52815) "a") (data (i32.const 52818) "a") (data (i32.const 52821) "a") (data (i32.const 52824) "a") (data (i32.const 52827) "a") (data (i32.const 52830) "a") (data (i32.const 52833) "a") (data (i32.const 52836) "a") (data (i32.const 52839) "a") (data (i32.const 52842) "a") (data (i32.const 52845) "a") (data (i32.const 52848) "a") (data (i32.const 52851) "a") (data (i32.const 52854) "a") (data (i32.const 52857) "a") (data (i32.const 52860) "a") (data (i32.const 52863) "a") (data (i32.const 52866) "a") (data (i32.const 52869) "a") (data (i32.const 52872) "a") (data (i32.const 52875) "a") (data (i32.const 52878) "a") (data (i32.const 52881) "a") (data (i32.const 52884) "a") (data (i32.const 52887) "a") (data (i32.const 52890) "a") (data (i32.const 52893) "a") (data (i32.const 52896) "a") (data (i32.const 52899) "a") (data (i32.const 52902) "a") (data (i32.const 52905) "a") (data (i32.const 52908) "a") (data (i32.const 52911) "a") (data (i32.const 52914) "a") (data (i32.const 52917) "a") (data (i32.const 52920) "a") (data (i32.const 52923) "a") (data (i32.const 52926) "a") (data (i32.const 52929) "a") (data (i32.const 52932) "a") (data (i32.const 52935) "a") (data (i32.const 52938) "a") (data (i32.const 52941) "a") (data (i32.const 52944) "a") (data (i32.const 52947) "a") (data (i32.const 52950) "a") (data (i32.const 52953) "a") (data (i32.const 52956) "a") (data (i32.const 52959) "a") (data (i32.const 52962) "a") (data (i32.const 52965) "a") (data (i32.const 52968) "a") (data (i32.const 52971) "a") (data (i32.const 52974) "a") (data (i32.const 52977) "a") (data (i32.const 52980) "a") (data (i32.const 52983) "a") (data (i32.const 52986) "a") (data (i32.const 52989) "a") (data (i32.const 52992) "a") (data (i32.const 52995) "a") (data (i32.const 52998) "a") (data (i32.const 53001) "a") (data (i32.const 53004) "a") (data (i32.const 53007) "a") (data (i32.const 53010) "a") (data (i32.const 53013) "a") (data (i32.const 53016) "a") (data (i32.const 53019) "a") (data (i32.const 53022) "a") (data (i32.const 53025) "a") (data (i32.const 53028) "a") (data (i32.const 53031) "a") (data (i32.const 53034) "a") (data (i32.const 53037) "a") (data (i32.const 53040) "a") (data (i32.const 53043) "a") (data (i32.const 53046) "a") (data (i32.const 53049) "a") (data (i32.const 53052) "a") (data (i32.const 53055) "a") (data (i32.const 53058) "a") (data (i32.const 53061) "a") (data (i32.const 53064) "a") (data (i32.const 53067) "a") (data (i32.const 53070) "a") (data (i32.const 53073) "a") (data (i32.const 53076) "a") (data (i32.const 53079) "a") (data (i32.const 53082) "a") (data (i32.const 53085) "a") (data (i32.const 53088) "a") (data (i32.const 53091) "a") (data (i32.const 53094) "a") (data (i32.const 53097) "a") (data (i32.const 53100) "a") (data (i32.const 53103) "a") (data (i32.const 53106) "a") (data (i32.const 53109) "a") (data (i32.const 53112) "a") (data (i32.const 53115) "a") (data (i32.const 53118) "a") (data (i32.const 53121) "a") (data (i32.const 53124) "a") (data (i32.const 53127) "a") (data (i32.const 53130) "a") (data (i32.const 53133) "a") (data (i32.const 53136) "a") (data (i32.const 53139) "a") (data (i32.const 53142) "a") (data (i32.const 53145) "a") (data (i32.const 53148) "a") (data (i32.const 53151) "a") (data (i32.const 53154) "a") (data (i32.const 53157) "a") (data (i32.const 53160) "a") (data (i32.const 53163) "a") (data (i32.const 53166) "a") (data (i32.const 53169) "a") (data (i32.const 53172) "a") (data (i32.const 53175) "a") (data (i32.const 53178) "a") (data (i32.const 53181) "a") (data (i32.const 53184) "a") (data (i32.const 53187) "a") (data (i32.const 53190) "a") (data (i32.const 53193) "a") (data (i32.const 53196) "a") (data (i32.const 53199) "a") (data (i32.const 53202) "a") (data (i32.const 53205) "a") (data (i32.const 53208) "a") (data (i32.const 53211) "a") (data (i32.const 53214) "a") (data (i32.const 53217) "a") (data (i32.const 53220) "a") (data (i32.const 53223) "a") (data (i32.const 53226) "a") (data (i32.const 53229) "a") (data (i32.const 53232) "a") (data (i32.const 53235) "a") (data (i32.const 53238) "a") (data (i32.const 53241) "a") (data (i32.const 53244) "a") (data (i32.const 53247) "a") (data (i32.const 53250) "a") (data (i32.const 53253) "a") (data (i32.const 53256) "a") (data (i32.const 53259) "a") (data (i32.const 53262) "a") (data (i32.const 53265) "a") (data (i32.const 53268) "a") (data (i32.const 53271) "a") (data (i32.const 53274) "a") (data (i32.const 53277) "a") (data (i32.const 53280) "a") (data (i32.const 53283) "a") (data (i32.const 53286) "a") (data (i32.const 53289) "a") (data (i32.const 53292) "a") (data (i32.const 53295) "a") (data (i32.const 53298) "a") (data (i32.const 53301) "a") (data (i32.const 53304) "a") (data (i32.const 53307) "a") (data (i32.const 53310) "a") (data (i32.const 53313) "a") (data (i32.const 53316) "a") (data (i32.const 53319) "a") (data (i32.const 53322) "a") (data (i32.const 53325) "a") (data (i32.const 53328) "a") (data (i32.const 53331) "a") (data (i32.const 53334) "a") (data (i32.const 53337) "a") (data (i32.const 53340) "a") (data (i32.const 53343) "a") (data (i32.const 53346) "a") (data (i32.const 53349) "a") (data (i32.const 53352) "a") (data (i32.const 53355) "a") (data (i32.const 53358) "a") (data (i32.const 53361) "a") (data (i32.const 53364) "a") (data (i32.const 53367) "a") (data (i32.const 53370) "a") (data (i32.const 53373) "a") (data (i32.const 53376) "a") (data (i32.const 53379) "a") (data (i32.const 53382) "a") (data (i32.const 53385) "a") (data (i32.const 53388) "a") (data (i32.const 53391) "a") (data (i32.const 53394) "a") (data (i32.const 53397) "a") (data (i32.const 53400) "a") (data (i32.const 53403) "a") (data (i32.const 53406) "a") (data (i32.const 53409) "a") (data (i32.const 53412) "a") (data (i32.const 53415) "a") (data (i32.const 53418) "a") (data (i32.const 53421) "a") (data (i32.const 53424) "a") (data (i32.const 53427) "a") (data (i32.const 53430) "a") (data (i32.const 53433) "a") (data (i32.const 53436) "a") (data (i32.const 53439) "a") (data (i32.const 53442) "a") (data (i32.const 53445) "a") (data (i32.const 53448) "a") (data (i32.const 53451) "a") (data (i32.const 53454) "a") (data (i32.const 53457) "a") (data (i32.const 53460) "a") (data (i32.const 53463) "a") (data (i32.const 53466) "a") (data (i32.const 53469) "a") (data (i32.const 53472) "a") (data (i32.const 53475) "a") (data (i32.const 53478) "a") (data (i32.const 53481) "a") (data (i32.const 53484) "a") (data (i32.const 53487) "a") (data (i32.const 53490) "a") (data (i32.const 53493) "a") (data (i32.const 53496) "a") (data (i32.const 53499) "a") (data (i32.const 53502) "a") (data (i32.const 53505) "a") (data (i32.const 53508) "a") (data (i32.const 53511) "a") (data (i32.const 53514) "a") (data (i32.const 53517) "a") (data (i32.const 53520) "a") (data (i32.const 53523) "a") (data (i32.const 53526) "a") (data (i32.const 53529) "a") (data (i32.const 53532) "a") (data (i32.const 53535) "a") (data (i32.const 53538) "a") (data (i32.const 53541) "a") (data (i32.const 53544) "a") (data (i32.const 53547) "a") (data (i32.const 53550) "a") (data (i32.const 53553) "a") (data (i32.const 53556) "a") (data (i32.const 53559) "a") (data (i32.const 53562) "a") (data (i32.const 53565) "a") (data (i32.const 53568) "a") (data (i32.const 53571) "a") (data (i32.const 53574) "a") (data (i32.const 53577) "a") (data (i32.const 53580) "a") (data (i32.const 53583) "a") (data (i32.const 53586) "a") (data (i32.const 53589) "a") (data (i32.const 53592) "a") (data (i32.const 53595) "a") (data (i32.const 53598) "a") (data (i32.const 53601) "a") (data (i32.const 53604) "a") (data (i32.const 53607) "a") (data (i32.const 53610) "a") (data (i32.const 53613) "a") (data (i32.const 53616) "a") (data (i32.const 53619) "a") (data (i32.const 53622) "a") (data (i32.const 53625) "a") (data (i32.const 53628) "a") (data (i32.const 53631) "a") (data (i32.const 53634) "a") (data (i32.const 53637) "a") (data (i32.const 53640) "a") (data (i32.const 53643) "a") (data (i32.const 53646) "a") (data (i32.const 53649) "a") (data (i32.const 53652) "a") (data (i32.const 53655) "a") (data (i32.const 53658) "a") (data (i32.const 53661) "a") (data (i32.const 53664) "a") (data (i32.const 53667) "a") (data (i32.const 53670) "a") (data (i32.const 53673) "a") (data (i32.const 53676) "a") (data (i32.const 53679) "a") (data (i32.const 53682) "a") (data (i32.const 53685) "a") (data (i32.const 53688) "a") (data (i32.const 53691) "a") (data (i32.const 53694) "a") (data (i32.const 53697) "a") (data (i32.const 53700) "a") (data (i32.const 53703) "a") (data (i32.const 53706) "a") (data (i32.const 53709) "a") (data (i32.const 53712) "a") (data (i32.const 53715) "a") (data (i32.const 53718) "a") (data (i32.const 53721) "a") (data (i32.const 53724) "a") (data (i32.const 53727) "a") (data (i32.const 53730) "a") (data (i32.const 53733) "a") (data (i32.const 53736) "a") (data (i32.const 53739) "a") (data (i32.const 53742) "a") (data (i32.const 53745) "a") (data (i32.const 53748) "a") (data (i32.const 53751) "a") (data (i32.const 53754) "a") (data (i32.const 53757) "a") (data (i32.const 53760) "a") (data (i32.const 53763) "a") (data (i32.const 53766) "a") (data (i32.const 53769) "a") (data (i32.const 53772) "a") (data (i32.const 53775) "a") (data (i32.const 53778) "a") (data (i32.const 53781) "a") (data (i32.const 53784) "a") (data (i32.const 53787) "a") (data (i32.const 53790) "a") (data (i32.const 53793) "a") (data (i32.const 53796) "a") (data (i32.const 53799) "a") (data (i32.const 53802) "a") (data (i32.const 53805) "a") (data (i32.const 53808) "a") (data (i32.const 53811) "a") (data (i32.const 53814) "a") (data (i32.const 53817) "a") (data (i32.const 53820) "a") (data (i32.const 53823) "a") (data (i32.const 53826) "a") (data (i32.const 53829) "a") (data (i32.const 53832) "a") (data (i32.const 53835) "a") (data (i32.const 53838) "a") (data (i32.const 53841) "a") (data (i32.const 53844) "a") (data (i32.const 53847) "a") (data (i32.const 53850) "a") (data (i32.const 53853) "a") (data (i32.const 53856) "a") (data (i32.const 53859) "a") (data (i32.const 53862) "a") (data (i32.const 53865) "a") (data (i32.const 53868) "a") (data (i32.const 53871) "a") (data (i32.const 53874) "a") (data (i32.const 53877) "a") (data (i32.const 53880) "a") (data (i32.const 53883) "a") (data (i32.const 53886) "a") (data (i32.const 53889) "a") (data (i32.const 53892) "a") (data (i32.const 53895) "a") (data (i32.const 53898) "a") (data (i32.const 53901) "a") (data (i32.const 53904) "a") (data (i32.const 53907) "a") (data (i32.const 53910) "a") (data (i32.const 53913) "a") (data (i32.const 53916) "a") (data (i32.const 53919) "a") (data (i32.const 53922) "a") (data (i32.const 53925) "a") (data (i32.const 53928) "a") (data (i32.const 53931) "a") (data (i32.const 53934) "a") (data (i32.const 53937) "a") (data (i32.const 53940) "a") (data (i32.const 53943) "a") (data (i32.const 53946) "a") (data (i32.const 53949) "a") (data (i32.const 53952) "a") (data (i32.const 53955) "a") (data (i32.const 53958) "a") (data (i32.const 53961) "a") (data (i32.const 53964) "a") (data (i32.const 53967) "a") (data (i32.const 53970) "a") (data (i32.const 53973) "a") (data (i32.const 53976) "a") (data (i32.const 53979) "a") (data (i32.const 53982) "a") (data (i32.const 53985) "a") (data (i32.const 53988) "a") (data (i32.const 53991) "a") (data (i32.const 53994) "a") (data (i32.const 53997) "a") (data (i32.const 54000) "a") (data (i32.const 54003) "a") (data (i32.const 54006) "a") (data (i32.const 54009) "a") (data (i32.const 54012) "a") (data (i32.const 54015) "a") (data (i32.const 54018) "a") (data (i32.const 54021) "a") (data (i32.const 54024) "a") (data (i32.const 54027) "a") (data (i32.const 54030) "a") (data (i32.const 54033) "a") (data (i32.const 54036) "a") (data (i32.const 54039) "a") (data (i32.const 54042) "a") (data (i32.const 54045) "a") (data (i32.const 54048) "a") (data (i32.const 54051) "a") (data (i32.const 54054) "a") (data (i32.const 54057) "a") (data (i32.const 54060) "a") (data (i32.const 54063) "a") (data (i32.const 54066) "a") (data (i32.const 54069) "a") (data (i32.const 54072) "a") (data (i32.const 54075) "a") (data (i32.const 54078) "a") (data (i32.const 54081) "a") (data (i32.const 54084) "a") (data (i32.const 54087) "a") (data (i32.const 54090) "a") (data (i32.const 54093) "a") (data (i32.const 54096) "a") (data (i32.const 54099) "a") (data (i32.const 54102) "a") (data (i32.const 54105) "a") (data (i32.const 54108) "a") (data (i32.const 54111) "a") (data (i32.const 54114) "a") (data (i32.const 54117) "a") (data (i32.const 54120) "a") (data (i32.const 54123) "a") (data (i32.const 54126) "a") (data (i32.const 54129) "a") (data (i32.const 54132) "a") (data (i32.const 54135) "a") (data (i32.const 54138) "a") (data (i32.const 54141) "a") (data (i32.const 54144) "a") (data (i32.const 54147) "a") (data (i32.const 54150) "a") (data (i32.const 54153) "a") (data (i32.const 54156) "a") (data (i32.const 54159) "a") (data (i32.const 54162) "a") (data (i32.const 54165) "a") (data (i32.const 54168) "a") (data (i32.const 54171) "a") (data (i32.const 54174) "a") (data (i32.const 54177) "a") (data (i32.const 54180) "a") (data (i32.const 54183) "a") (data (i32.const 54186) "a") (data (i32.const 54189) "a") (data (i32.const 54192) "a") (data (i32.const 54195) "a") (data (i32.const 54198) "a") (data (i32.const 54201) "a") (data (i32.const 54204) "a") (data (i32.const 54207) "a") (data (i32.const 54210) "a") (data (i32.const 54213) "a") (data (i32.const 54216) "a") (data (i32.const 54219) "a") (data (i32.const 54222) "a") (data (i32.const 54225) "a") (data (i32.const 54228) "a") (data (i32.const 54231) "a") (data (i32.const 54234) "a") (data (i32.const 54237) "a") (data (i32.const 54240) "a") (data (i32.const 54243) "a") (data (i32.const 54246) "a") (data (i32.const 54249) "a") (data (i32.const 54252) "a") (data (i32.const 54255) "a") (data (i32.const 54258) "a") (data (i32.const 54261) "a") (data (i32.const 54264) "a") (data (i32.const 54267) "a") (data (i32.const 54270) "a") (data (i32.const 54273) "a") (data (i32.const 54276) "a") (data (i32.const 54279) "a") (data (i32.const 54282) "a") (data (i32.const 54285) "a") (data (i32.const 54288) "a") (data (i32.const 54291) "a") (data (i32.const 54294) "a") (data (i32.const 54297) "a") (data (i32.const 54300) "a") (data (i32.const 54303) "a") (data (i32.const 54306) "a") (data (i32.const 54309) "a") (data (i32.const 54312) "a") (data (i32.const 54315) "a") (data (i32.const 54318) "a") (data (i32.const 54321) "a") (data (i32.const 54324) "a") (data (i32.const 54327) "a") (data (i32.const 54330) "a") (data (i32.const 54333) "a") (data (i32.const 54336) "a") (data (i32.const 54339) "a") (data (i32.const 54342) "a") (data (i32.const 54345) "a") (data (i32.const 54348) "a") (data (i32.const 54351) "a") (data (i32.const 54354) "a") (data (i32.const 54357) "a") (data (i32.const 54360) "a") (data (i32.const 54363) "a") (data (i32.const 54366) "a") (data (i32.const 54369) "a") (data (i32.const 54372) "a") (data (i32.const 54375) "a") (data (i32.const 54378) "a") (data (i32.const 54381) "a") (data (i32.const 54384) "a") (data (i32.const 54387) "a") (data (i32.const 54390) "a") (data (i32.const 54393) "a") (data (i32.const 54396) "a") (data (i32.const 54399) "a") (data (i32.const 54402) "a") (data (i32.const 54405) "a") (data (i32.const 54408) "a") (data (i32.const 54411) "a") (data (i32.const 54414) "a") (data (i32.const 54417) "a") (data (i32.const 54420) "a") (data (i32.const 54423) "a") (data (i32.const 54426) "a") (data (i32.const 54429) "a") (data (i32.const 54432) "a") (data (i32.const 54435) "a") (data (i32.const 54438) "a") (data (i32.const 54441) "a") (data (i32.const 54444) "a") (data (i32.const 54447) "a") (data (i32.const 54450) "a") (data (i32.const 54453) "a") (data (i32.const 54456) "a") (data (i32.const 54459) "a") (data (i32.const 54462) "a") (data (i32.const 54465) "a") (data (i32.const 54468) "a") (data (i32.const 54471) "a") (data (i32.const 54474) "a") (data (i32.const 54477) "a") (data (i32.const 54480) "a") (data (i32.const 54483) "a") (data (i32.const 54486) "a") (data (i32.const 54489) "a") (data (i32.const 54492) "a") (data (i32.const 54495) "a") (data (i32.const 54498) "a") (data (i32.const 54501) "a") (data (i32.const 54504) "a") (data (i32.const 54507) "a") (data (i32.const 54510) "a") (data (i32.const 54513) "a") (data (i32.const 54516) "a") (data (i32.const 54519) "a") (data (i32.const 54522) "a") (data (i32.const 54525) "a") (data (i32.const 54528) "a") (data (i32.const 54531) "a") (data (i32.const 54534) "a") (data (i32.const 54537) "a") (data (i32.const 54540) "a") (data (i32.const 54543) "a") (data (i32.const 54546) "a") (data (i32.const 54549) "a") (data (i32.const 54552) "a") (data (i32.const 54555) "a") (data (i32.const 54558) "a") (data (i32.const 54561) "a") (data (i32.const 54564) "a") (data (i32.const 54567) "a") (data (i32.const 54570) "a") (data (i32.const 54573) "a") (data (i32.const 54576) "a") (data (i32.const 54579) "a") (data (i32.const 54582) "a") (data (i32.const 54585) "a") (data (i32.const 54588) "a") (data (i32.const 54591) "a") (data (i32.const 54594) "a") (data (i32.const 54597) "a") (data (i32.const 54600) "a") (data (i32.const 54603) "a") (data (i32.const 54606) "a") (data (i32.const 54609) "a") (data (i32.const 54612) "a") (data (i32.const 54615) "a") (data (i32.const 54618) "a") (data (i32.const 54621) "a") (data (i32.const 54624) "a") (data (i32.const 54627) "a") (data (i32.const 54630) "a") (data (i32.const 54633) "a") (data (i32.const 54636) "a") (data (i32.const 54639) "a") (data (i32.const 54642) "a") (data (i32.const 54645) "a") (data (i32.const 54648) "a") (data (i32.const 54651) "a") (data (i32.const 54654) "a") (data (i32.const 54657) "a") (data (i32.const 54660) "a") (data (i32.const 54663) "a") (data (i32.const 54666) "a") (data (i32.const 54669) "a") (data (i32.const 54672) "a") (data (i32.const 54675) "a") (data (i32.const 54678) "a") (data (i32.const 54681) "a") (data (i32.const 54684) "a") (data (i32.const 54687) "a") (data (i32.const 54690) "a") (data (i32.const 54693) "a") (data (i32.const 54696) "a") (data (i32.const 54699) "a") (data (i32.const 54702) "a") (data (i32.const 54705) "a") (data (i32.const 54708) "a") (data (i32.const 54711) "a") (data (i32.const 54714) "a") (data (i32.const 54717) "a") (data (i32.const 54720) "a") (data (i32.const 54723) "a") (data (i32.const 54726) "a") (data (i32.const 54729) "a") (data (i32.const 54732) "a") (data (i32.const 54735) "a") (data (i32.const 54738) "a") (data (i32.const 54741) "a") (data (i32.const 54744) "a") (data (i32.const 54747) "a") (data (i32.const 54750) "a") (data (i32.const 54753) "a") (data (i32.const 54756) "a") (data (i32.const 54759) "a") (data (i32.const 54762) "a") (data (i32.const 54765) "a") (data (i32.const 54768) "a") (data (i32.const 54771) "a") (data (i32.const 54774) "a") (data (i32.const 54777) "a") (data (i32.const 54780) "a") (data (i32.const 54783) "a") (data (i32.const 54786) "a") (data (i32.const 54789) "a") (data (i32.const 54792) "a") (data (i32.const 54795) "a") (data (i32.const 54798) "a") (data (i32.const 54801) "a") (data (i32.const 54804) "a") (data (i32.const 54807) "a") (data (i32.const 54810) "a") (data (i32.const 54813) "a") (data (i32.const 54816) "a") (data (i32.const 54819) "a") (data (i32.const 54822) "a") (data (i32.const 54825) "a") (data (i32.const 54828) "a") (data (i32.const 54831) "a") (data (i32.const 54834) "a") (data (i32.const 54837) "a") (data (i32.const 54840) "a") (data (i32.const 54843) "a") (data (i32.const 54846) "a") (data (i32.const 54849) "a") (data (i32.const 54852) "a") (data (i32.const 54855) "a") (data (i32.const 54858) "a") (data (i32.const 54861) "a") (data (i32.const 54864) "a") (data (i32.const 54867) "a") (data (i32.const 54870) "a") (data (i32.const 54873) "a") (data (i32.const 54876) "a") (data (i32.const 54879) "a") (data (i32.const 54882) "a") (data (i32.const 54885) "a") (data (i32.const 54888) "a") (data (i32.const 54891) "a") (data (i32.const 54894) "a") (data (i32.const 54897) "a") (data (i32.const 54900) "a") (data (i32.const 54903) "a") (data (i32.const 54906) "a") (data (i32.const 54909) "a") (data (i32.const 54912) "a") (data (i32.const 54915) "a") (data (i32.const 54918) "a") (data (i32.const 54921) "a") (data (i32.const 54924) "a") (data (i32.const 54927) "a") (data (i32.const 54930) "a") (data (i32.const 54933) "a") (data (i32.const 54936) "a") (data (i32.const 54939) "a") (data (i32.const 54942) "a") (data (i32.const 54945) "a") (data (i32.const 54948) "a") (data (i32.const 54951) "a") (data (i32.const 54954) "a") (data (i32.const 54957) "a") (data (i32.const 54960) "a") (data (i32.const 54963) "a") (data (i32.const 54966) "a") (data (i32.const 54969) "a") (data (i32.const 54972) "a") (data (i32.const 54975) "a") (data (i32.const 54978) "a") (data (i32.const 54981) "a") (data (i32.const 54984) "a") (data (i32.const 54987) "a") (data (i32.const 54990) "a") (data (i32.const 54993) "a") (data (i32.const 54996) "a") (data (i32.const 54999) "a") (data (i32.const 55002) "a") (data (i32.const 55005) "a") (data (i32.const 55008) "a") (data (i32.const 55011) "a") (data (i32.const 55014) "a") (data (i32.const 55017) "a") (data (i32.const 55020) "a") (data (i32.const 55023) "a") (data (i32.const 55026) "a") (data (i32.const 55029) "a") (data (i32.const 55032) "a") (data (i32.const 55035) "a") (data (i32.const 55038) "a") (data (i32.const 55041) "a") (data (i32.const 55044) "a") (data (i32.const 55047) "a") (data (i32.const 55050) "a") (data (i32.const 55053) "a") (data (i32.const 55056) "a") (data (i32.const 55059) "a") (data (i32.const 55062) "a") (data (i32.const 55065) "a") (data (i32.const 55068) "a") (data (i32.const 55071) "a") (data (i32.const 55074) "a") (data (i32.const 55077) "a") (data (i32.const 55080) "a") (data (i32.const 55083) "a") (data (i32.const 55086) "a") (data (i32.const 55089) "a") (data (i32.const 55092) "a") (data (i32.const 55095) "a") (data (i32.const 55098) "a") (data (i32.const 55101) "a") (data (i32.const 55104) "a") (data (i32.const 55107) "a") (data (i32.const 55110) "a") (data (i32.const 55113) "a") (data (i32.const 55116) "a") (data (i32.const 55119) "a") (data (i32.const 55122) "a") (data (i32.const 55125) "a") (data (i32.const 55128) "a") (data (i32.const 55131) "a") (data (i32.const 55134) "a") (data (i32.const 55137) "a") (data (i32.const 55140) "a") (data (i32.const 55143) "a") (data (i32.const 55146) "a") (data (i32.const 55149) "a") (data (i32.const 55152) "a") (data (i32.const 55155) "a") (data (i32.const 55158) "a") (data (i32.const 55161) "a") (data (i32.const 55164) "a") (data (i32.const 55167) "a") (data (i32.const 55170) "a") (data (i32.const 55173) "a") (data (i32.const 55176) "a") (data (i32.const 55179) "a") (data (i32.const 55182) "a") (data (i32.const 55185) "a") (data (i32.const 55188) "a") (data (i32.const 55191) "a") (data (i32.const 55194) "a") (data (i32.const 55197) "a") (data (i32.const 55200) "a") (data (i32.const 55203) "a") (data (i32.const 55206) "a") (data (i32.const 55209) "a") (data (i32.const 55212) "a") (data (i32.const 55215) "a") (data (i32.const 55218) "a") (data (i32.const 55221) "a") (data (i32.const 55224) "a") (data (i32.const 55227) "a") (data (i32.const 55230) "a") (data (i32.const 55233) "a") (data (i32.const 55236) "a") (data (i32.const 55239) "a") (data (i32.const 55242) "a") (data (i32.const 55245) "a") (data (i32.const 55248) "a") (data (i32.const 55251) "a") (data (i32.const 55254) "a") (data (i32.const 55257) "a") (data (i32.const 55260) "a") (data (i32.const 55263) "a") (data (i32.const 55266) "a") (data (i32.const 55269) "a") (data (i32.const 55272) "a") (data (i32.const 55275) "a") (data (i32.const 55278) "a") (data (i32.const 55281) "a") (data (i32.const 55284) "a") (data (i32.const 55287) "a") (data (i32.const 55290) "a") (data (i32.const 55293) "a") (data (i32.const 55296) "a") (data (i32.const 55299) "a") (data (i32.const 55302) "a") (data (i32.const 55305) "a") (data (i32.const 55308) "a") (data (i32.const 55311) "a") (data (i32.const 55314) "a") (data (i32.const 55317) "a") (data (i32.const 55320) "a") (data (i32.const 55323) "a") (data (i32.const 55326) "a") (data (i32.const 55329) "a") (data (i32.const 55332) "a") (data (i32.const 55335) "a") (data (i32.const 55338) "a") (data (i32.const 55341) "a") (data (i32.const 55344) "a") (data (i32.const 55347) "a") (data (i32.const 55350) "a") (data (i32.const 55353) "a") (data (i32.const 55356) "a") (data (i32.const 55359) "a") (data (i32.const 55362) "a") (data (i32.const 55365) "a") (data (i32.const 55368) "a") (data (i32.const 55371) "a") (data (i32.const 55374) "a") (data (i32.const 55377) "a") (data (i32.const 55380) "a") (data (i32.const 55383) "a") (data (i32.const 55386) "a") (data (i32.const 55389) "a") (data (i32.const 55392) "a") (data (i32.const 55395) "a") (data (i32.const 55398) "a") (data (i32.const 55401) "a") (data (i32.const 55404) "a") (data (i32.const 55407) "a") (data (i32.const 55410) "a") (data (i32.const 55413) "a") (data (i32.const 55416) "a") (data (i32.const 55419) "a") (data (i32.const 55422) "a") (data (i32.const 55425) "a") (data (i32.const 55428) "a") (data (i32.const 55431) "a") (data (i32.const 55434) "a") (data (i32.const 55437) "a") (data (i32.const 55440) "a") (data (i32.const 55443) "a") (data (i32.const 55446) "a") (data (i32.const 55449) "a") (data (i32.const 55452) "a") (data (i32.const 55455) "a") (data (i32.const 55458) "a") (data (i32.const 55461) "a") (data (i32.const 55464) "a") (data (i32.const 55467) "a") (data (i32.const 55470) "a") (data (i32.const 55473) "a") (data (i32.const 55476) "a") (data (i32.const 55479) "a") (data (i32.const 55482) "a") (data (i32.const 55485) "a") (data (i32.const 55488) "a") (data (i32.const 55491) "a") (data (i32.const 55494) "a") (data (i32.const 55497) "a") (data (i32.const 55500) "a") (data (i32.const 55503) "a") (data (i32.const 55506) "a") (data (i32.const 55509) "a") (data (i32.const 55512) "a") (data (i32.const 55515) "a") (data (i32.const 55518) "a") (data (i32.const 55521) "a") (data (i32.const 55524) "a") (data (i32.const 55527) "a") (data (i32.const 55530) "a") (data (i32.const 55533) "a") (data (i32.const 55536) "a") (data (i32.const 55539) "a") (data (i32.const 55542) "a") (data (i32.const 55545) "a") (data (i32.const 55548) "a") (data (i32.const 55551) "a") (data (i32.const 55554) "a") (data (i32.const 55557) "a") (data (i32.const 55560) "a") (data (i32.const 55563) "a") (data (i32.const 55566) "a") (data (i32.const 55569) "a") (data (i32.const 55572) "a") (data (i32.const 55575) "a") (data (i32.const 55578) "a") (data (i32.const 55581) "a") (data (i32.const 55584) "a") (data (i32.const 55587) "a") (data (i32.const 55590) "a") (data (i32.const 55593) "a") (data (i32.const 55596) "a") (data (i32.const 55599) "a") (data (i32.const 55602) "a") (data (i32.const 55605) "a") (data (i32.const 55608) "a") (data (i32.const 55611) "a") (data (i32.const 55614) "a") (data (i32.const 55617) "a") (data (i32.const 55620) "a") (data (i32.const 55623) "a") (data (i32.const 55626) "a") (data (i32.const 55629) "a") (data (i32.const 55632) "a") (data (i32.const 55635) "a") (data (i32.const 55638) "a") (data (i32.const 55641) "a") (data (i32.const 55644) "a") (data (i32.const 55647) "a") (data (i32.const 55650) "a") (data (i32.const 55653) "a") (data (i32.const 55656) "a") (data (i32.const 55659) "a") (data (i32.const 55662) "a") (data (i32.const 55665) "a") (data (i32.const 55668) "a") (data (i32.const 55671) "a") (data (i32.const 55674) "a") (data (i32.const 55677) "a") (data (i32.const 55680) "a") (data (i32.const 55683) "a") (data (i32.const 55686) "a") (data (i32.const 55689) "a") (data (i32.const 55692) "a") (data (i32.const 55695) "a") (data (i32.const 55698) "a") (data (i32.const 55701) "a") (data (i32.const 55704) "a") (data (i32.const 55707) "a") (data (i32.const 55710) "a") (data (i32.const 55713) "a") (data (i32.const 55716) "a") (data (i32.const 55719) "a") (data (i32.const 55722) "a") (data (i32.const 55725) "a") (data (i32.const 55728) "a") (data (i32.const 55731) "a") (data (i32.const 55734) "a") (data (i32.const 55737) "a") (data (i32.const 55740) "a") (data (i32.const 55743) "a") (data (i32.const 55746) "a") (data (i32.const 55749) "a") (data (i32.const 55752) "a") (data (i32.const 55755) "a") (data (i32.const 55758) "a") (data (i32.const 55761) "a") (data (i32.const 55764) "a") (data (i32.const 55767) "a") (data (i32.const 55770) "a") (data (i32.const 55773) "a") (data (i32.const 55776) "a") (data (i32.const 55779) "a") (data (i32.const 55782) "a") (data (i32.const 55785) "a") (data (i32.const 55788) "a") (data (i32.const 55791) "a") (data (i32.const 55794) "a") (data (i32.const 55797) "a") (data (i32.const 55800) "a") (data (i32.const 55803) "a") (data (i32.const 55806) "a") (data (i32.const 55809) "a") (data (i32.const 55812) "a") (data (i32.const 55815) "a") (data (i32.const 55818) "a") (data (i32.const 55821) "a") (data (i32.const 55824) "a") (data (i32.const 55827) "a") (data (i32.const 55830) "a") (data (i32.const 55833) "a") (data (i32.const 55836) "a") (data (i32.const 55839) "a") (data (i32.const 55842) "a") (data (i32.const 55845) "a") (data (i32.const 55848) "a") (data (i32.const 55851) "a") (data (i32.const 55854) "a") (data (i32.const 55857) "a") (data (i32.const 55860) "a") (data (i32.const 55863) "a") (data (i32.const 55866) "a") (data (i32.const 55869) "a") (data (i32.const 55872) "a") (data (i32.const 55875) "a") (data (i32.const 55878) "a") (data (i32.const 55881) "a") (data (i32.const 55884) "a") (data (i32.const 55887) "a") (data (i32.const 55890) "a") (data (i32.const 55893) "a") (data (i32.const 55896) "a") (data (i32.const 55899) "a") (data (i32.const 55902) "a") (data (i32.const 55905) "a") (data (i32.const 55908) "a") (data (i32.const 55911) "a") (data (i32.const 55914) "a") (data (i32.const 55917) "a") (data (i32.const 55920) "a") (data (i32.const 55923) "a") (data (i32.const 55926) "a") (data (i32.const 55929) "a") (data (i32.const 55932) "a") (data (i32.const 55935) "a") (data (i32.const 55938) "a") (data (i32.const 55941) "a") (data (i32.const 55944) "a") (data (i32.const 55947) "a") (data (i32.const 55950) "a") (data (i32.const 55953) "a") (data (i32.const 55956) "a") (data (i32.const 55959) "a") (data (i32.const 55962) "a") (data (i32.const 55965) "a") (data (i32.const 55968) "a") (data (i32.const 55971) "a") (data (i32.const 55974) "a") (data (i32.const 55977) "a") (data (i32.const 55980) "a") (data (i32.const 55983) "a") (data (i32.const 55986) "a") (data (i32.const 55989) "a") (data (i32.const 55992) "a") (data (i32.const 55995) "a") (data (i32.const 55998) "a") (data (i32.const 56001) "a") (data (i32.const 56004) "a") (data (i32.const 56007) "a") (data (i32.const 56010) "a") (data (i32.const 56013) "a") (data (i32.const 56016) "a") (data (i32.const 56019) "a") (data (i32.const 56022) "a") (data (i32.const 56025) "a") (data (i32.const 56028) "a") (data (i32.const 56031) "a") (data (i32.const 56034) "a") (data (i32.const 56037) "a") (data (i32.const 56040) "a") (data (i32.const 56043) "a") (data (i32.const 56046) "a") (data (i32.const 56049) "a") (data (i32.const 56052) "a") (data (i32.const 56055) "a") (data (i32.const 56058) "a") (data (i32.const 56061) "a") (data (i32.const 56064) "a") (data (i32.const 56067) "a") (data (i32.const 56070) "a") (data (i32.const 56073) "a") (data (i32.const 56076) "a") (data (i32.const 56079) "a") (data (i32.const 56082) "a") (data (i32.const 56085) "a") (data (i32.const 56088) "a") (data (i32.const 56091) "a") (data (i32.const 56094) "a") (data (i32.const 56097) "a") (data (i32.const 56100) "a") (data (i32.const 56103) "a") (data (i32.const 56106) "a") (data (i32.const 56109) "a") (data (i32.const 56112) "a") (data (i32.const 56115) "a") (data (i32.const 56118) "a") (data (i32.const 56121) "a") (data (i32.const 56124) "a") (data (i32.const 56127) "a") (data (i32.const 56130) "a") (data (i32.const 56133) "a") (data (i32.const 56136) "a") (data (i32.const 56139) "a") (data (i32.const 56142) "a") (data (i32.const 56145) "a") (data (i32.const 56148) "a") (data (i32.const 56151) "a") (data (i32.const 56154) "a") (data (i32.const 56157) "a") (data (i32.const 56160) "a") (data (i32.const 56163) "a") (data (i32.const 56166) "a") (data (i32.const 56169) "a") (data (i32.const 56172) "a") (data (i32.const 56175) "a") (data (i32.const 56178) "a") (data (i32.const 56181) "a") (data (i32.const 56184) "a") (data (i32.const 56187) "a") (data (i32.const 56190) "a") (data (i32.const 56193) "a") (data (i32.const 56196) "a") (data (i32.const 56199) "a") (data (i32.const 56202) "a") (data (i32.const 56205) "a") (data (i32.const 56208) "a") (data (i32.const 56211) "a") (data (i32.const 56214) "a") (data (i32.const 56217) "a") (data (i32.const 56220) "a") (data (i32.const 56223) "a") (data (i32.const 56226) "a") (data (i32.const 56229) "a") (data (i32.const 56232) "a") (data (i32.const 56235) "a") (data (i32.const 56238) "a") (data (i32.const 56241) "a") (data (i32.const 56244) "a") (data (i32.const 56247) "a") (data (i32.const 56250) "a") (data (i32.const 56253) "a") (data (i32.const 56256) "a") (data (i32.const 56259) "a") (data (i32.const 56262) "a") (data (i32.const 56265) "a") (data (i32.const 56268) "a") (data (i32.const 56271) "a") (data (i32.const 56274) "a") (data (i32.const 56277) "a") (data (i32.const 56280) "a") (data (i32.const 56283) "a") (data (i32.const 56286) "a") (data (i32.const 56289) "a") (data (i32.const 56292) "a") (data (i32.const 56295) "a") (data (i32.const 56298) "a") (data (i32.const 56301) "a") (data (i32.const 56304) "a") (data (i32.const 56307) "a") (data (i32.const 56310) "a") (data (i32.const 56313) "a") (data (i32.const 56316) "a") (data (i32.const 56319) "a") (data (i32.const 56322) "a") (data (i32.const 56325) "a") (data (i32.const 56328) "a") (data (i32.const 56331) "a") (data (i32.const 56334) "a") (data (i32.const 56337) "a") (data (i32.const 56340) "a") (data (i32.const 56343) "a") (data (i32.const 56346) "a") (data (i32.const 56349) "a") (data (i32.const 56352) "a") (data (i32.const 56355) "a") (data (i32.const 56358) "a") (data (i32.const 56361) "a") (data (i32.const 56364) "a") (data (i32.const 56367) "a") (data (i32.const 56370) "a") (data (i32.const 56373) "a") (data (i32.const 56376) "a") (data (i32.const 56379) "a") (data (i32.const 56382) "a") (data (i32.const 56385) "a") (data (i32.const 56388) "a") (data (i32.const 56391) "a") (data (i32.const 56394) "a") (data (i32.const 56397) "a") (data (i32.const 56400) "a") (data (i32.const 56403) "a") (data (i32.const 56406) "a") (data (i32.const 56409) "a") (data (i32.const 56412) "a") (data (i32.const 56415) "a") (data (i32.const 56418) "a") (data (i32.const 56421) "a") (data (i32.const 56424) "a") (data (i32.const 56427) "a") (data (i32.const 56430) "a") (data (i32.const 56433) "a") (data (i32.const 56436) "a") (data (i32.const 56439) "a") (data (i32.const 56442) "a") (data (i32.const 56445) "a") (data (i32.const 56448) "a") (data (i32.const 56451) "a") (data (i32.const 56454) "a") (data (i32.const 56457) "a") (data (i32.const 56460) "a") (data (i32.const 56463) "a") (data (i32.const 56466) "a") (data (i32.const 56469) "a") (data (i32.const 56472) "a") (data (i32.const 56475) "a") (data (i32.const 56478) "a") (data (i32.const 56481) "a") (data (i32.const 56484) "a") (data (i32.const 56487) "a") (data (i32.const 56490) "a") (data (i32.const 56493) "a") (data (i32.const 56496) "a") (data (i32.const 56499) "a") (data (i32.const 56502) "a") (data (i32.const 56505) "a") (data (i32.const 56508) "a") (data (i32.const 56511) "a") (data (i32.const 56514) "a") (data (i32.const 56517) "a") (data (i32.const 56520) "a") (data (i32.const 56523) "a") (data (i32.const 56526) "a") (data (i32.const 56529) "a") (data (i32.const 56532) "a") (data (i32.const 56535) "a") (data (i32.const 56538) "a") (data (i32.const 56541) "a") (data (i32.const 56544) "a") (data (i32.const 56547) "a") (data (i32.const 56550) "a") (data (i32.const 56553) "a") (data (i32.const 56556) "a") (data (i32.const 56559) "a") (data (i32.const 56562) "a") (data (i32.const 56565) "a") (data (i32.const 56568) "a") (data (i32.const 56571) "a") (data (i32.const 56574) "a") (data (i32.const 56577) "a") (data (i32.const 56580) "a") (data (i32.const 56583) "a") (data (i32.const 56586) "a") (data (i32.const 56589) "a") (data (i32.const 56592) "a") (data (i32.const 56595) "a") (data (i32.const 56598) "a") (data (i32.const 56601) "a") (data (i32.const 56604) "a") (data (i32.const 56607) "a") (data (i32.const 56610) "a") (data (i32.const 56613) "a") (data (i32.const 56616) "a") (data (i32.const 56619) "a") (data (i32.const 56622) "a") (data (i32.const 56625) "a") (data (i32.const 56628) "a") (data (i32.const 56631) "a") (data (i32.const 56634) "a") (data (i32.const 56637) "a") (data (i32.const 56640) "a") (data (i32.const 56643) "a") (data (i32.const 56646) "a") (data (i32.const 56649) "a") (data (i32.const 56652) "a") (data (i32.const 56655) "a") (data (i32.const 56658) "a") (data (i32.const 56661) "a") (data (i32.const 56664) "a") (data (i32.const 56667) "a") (data (i32.const 56670) "a") (data (i32.const 56673) "a") (data (i32.const 56676) "a") (data (i32.const 56679) "a") (data (i32.const 56682) "a") (data (i32.const 56685) "a") (data (i32.const 56688) "a") (data (i32.const 56691) "a") (data (i32.const 56694) "a") (data (i32.const 56697) "a") (data (i32.const 56700) "a") (data (i32.const 56703) "a") (data (i32.const 56706) "a") (data (i32.const 56709) "a") (data (i32.const 56712) "a") (data (i32.const 56715) "a") (data (i32.const 56718) "a") (data (i32.const 56721) "a") (data (i32.const 56724) "a") (data (i32.const 56727) "a") (data (i32.const 56730) "a") (data (i32.const 56733) "a") (data (i32.const 56736) "a") (data (i32.const 56739) "a") (data (i32.const 56742) "a") (data (i32.const 56745) "a") (data (i32.const 56748) "a") (data (i32.const 56751) "a") (data (i32.const 56754) "a") (data (i32.const 56757) "a") (data (i32.const 56760) "a") (data (i32.const 56763) "a") (data (i32.const 56766) "a") (data (i32.const 56769) "a") (data (i32.const 56772) "a") (data (i32.const 56775) "a") (data (i32.const 56778) "a") (data (i32.const 56781) "a") (data (i32.const 56784) "a") (data (i32.const 56787) "a") (data (i32.const 56790) "a") (data (i32.const 56793) "a") (data (i32.const 56796) "a") (data (i32.const 56799) "a") (data (i32.const 56802) "a") (data (i32.const 56805) "a") (data (i32.const 56808) "a") (data (i32.const 56811) "a") (data (i32.const 56814) "a") (data (i32.const 56817) "a") (data (i32.const 56820) "a") (data (i32.const 56823) "a") (data (i32.const 56826) "a") (data (i32.const 56829) "a") (data (i32.const 56832) "a") (data (i32.const 56835) "a") (data (i32.const 56838) "a") (data (i32.const 56841) "a") (data (i32.const 56844) "a") (data (i32.const 56847) "a") (data (i32.const 56850) "a") (data (i32.const 56853) "a") (data (i32.const 56856) "a") (data (i32.const 56859) "a") (data (i32.const 56862) "a") (data (i32.const 56865) "a") (data (i32.const 56868) "a") (data (i32.const 56871) "a") (data (i32.const 56874) "a") (data (i32.const 56877) "a") (data (i32.const 56880) "a") (data (i32.const 56883) "a") (data (i32.const 56886) "a") (data (i32.const 56889) "a") (data (i32.const 56892) "a") (data (i32.const 56895) "a") (data (i32.const 56898) "a") (data (i32.const 56901) "a") (data (i32.const 56904) "a") (data (i32.const 56907) "a") (data (i32.const 56910) "a") (data (i32.const 56913) "a") (data (i32.const 56916) "a") (data (i32.const 56919) "a") (data (i32.const 56922) "a") (data (i32.const 56925) "a") (data (i32.const 56928) "a") (data (i32.const 56931) "a") (data (i32.const 56934) "a") (data (i32.const 56937) "a") (data (i32.const 56940) "a") (data (i32.const 56943) "a") (data (i32.const 56946) "a") (data (i32.const 56949) "a") (data (i32.const 56952) "a") (data (i32.const 56955) "a") (data (i32.const 56958) "a") (data (i32.const 56961) "a") (data (i32.const 56964) "a") (data (i32.const 56967) "a") (data (i32.const 56970) "a") (data (i32.const 56973) "a") (data (i32.const 56976) "a") (data (i32.const 56979) "a") (data (i32.const 56982) "a") (data (i32.const 56985) "a") (data (i32.const 56988) "a") (data (i32.const 56991) "a") (data (i32.const 56994) "a") (data (i32.const 56997) "a") (data (i32.const 57000) "a") (data (i32.const 57003) "a") (data (i32.const 57006) "a") (data (i32.const 57009) "a") (data (i32.const 57012) "a") (data (i32.const 57015) "a") (data (i32.const 57018) "a") (data (i32.const 57021) "a") (data (i32.const 57024) "a") (data (i32.const 57027) "a") (data (i32.const 57030) "a") (data (i32.const 57033) "a") (data (i32.const 57036) "a") (data (i32.const 57039) "a") (data (i32.const 57042) "a") (data (i32.const 57045) "a") (data (i32.const 57048) "a") (data (i32.const 57051) "a") (data (i32.const 57054) "a") (data (i32.const 57057) "a") (data (i32.const 57060) "a") (data (i32.const 57063) "a") (data (i32.const 57066) "a") (data (i32.const 57069) "a") (data (i32.const 57072) "a") (data (i32.const 57075) "a") (data (i32.const 57078) "a") (data (i32.const 57081) "a") (data (i32.const 57084) "a") (data (i32.const 57087) "a") (data (i32.const 57090) "a") (data (i32.const 57093) "a") (data (i32.const 57096) "a") (data (i32.const 57099) "a") (data (i32.const 57102) "a") (data (i32.const 57105) "a") (data (i32.const 57108) "a") (data (i32.const 57111) "a") (data (i32.const 57114) "a") (data (i32.const 57117) "a") (data (i32.const 57120) "a") (data (i32.const 57123) "a") (data (i32.const 57126) "a") (data (i32.const 57129) "a") (data (i32.const 57132) "a") (data (i32.const 57135) "a") (data (i32.const 57138) "a") (data (i32.const 57141) "a") (data (i32.const 57144) "a") (data (i32.const 57147) "a") (data (i32.const 57150) "a") (data (i32.const 57153) "a") (data (i32.const 57156) "a") (data (i32.const 57159) "a") (data (i32.const 57162) "a") (data (i32.const 57165) "a") (data (i32.const 57168) "a") (data (i32.const 57171) "a") (data (i32.const 57174) "a") (data (i32.const 57177) "a") (data (i32.const 57180) "a") (data (i32.const 57183) "a") (data (i32.const 57186) "a") (data (i32.const 57189) "a") (data (i32.const 57192) "a") (data (i32.const 57195) "a") (data (i32.const 57198) "a") (data (i32.const 57201) "a") (data (i32.const 57204) "a") (data (i32.const 57207) "a") (data (i32.const 57210) "a") (data (i32.const 57213) "a") (data (i32.const 57216) "a") (data (i32.const 57219) "a") (data (i32.const 57222) "a") (data (i32.const 57225) "a") (data (i32.const 57228) "a") (data (i32.const 57231) "a") (data (i32.const 57234) "a") (data (i32.const 57237) "a") (data (i32.const 57240) "a") (data (i32.const 57243) "a") (data (i32.const 57246) "a") (data (i32.const 57249) "a") (data (i32.const 57252) "a") (data (i32.const 57255) "a") (data (i32.const 57258) "a") (data (i32.const 57261) "a") (data (i32.const 57264) "a") (data (i32.const 57267) "a") (data (i32.const 57270) "a") (data (i32.const 57273) "a") (data (i32.const 57276) "a") (data (i32.const 57279) "a") (data (i32.const 57282) "a") (data (i32.const 57285) "a") (data (i32.const 57288) "a") (data (i32.const 57291) "a") (data (i32.const 57294) "a") (data (i32.const 57297) "a") (data (i32.const 57300) "a") (data (i32.const 57303) "a") (data (i32.const 57306) "a") (data (i32.const 57309) "a") (data (i32.const 57312) "a") (data (i32.const 57315) "a") (data (i32.const 57318) "a") (data (i32.const 57321) "a") (data (i32.const 57324) "a") (data (i32.const 57327) "a") (data (i32.const 57330) "a") (data (i32.const 57333) "a") (data (i32.const 57336) "a") (data (i32.const 57339) "a") (data (i32.const 57342) "a") (data (i32.const 57345) "a") (data (i32.const 57348) "a") (data (i32.const 57351) "a") (data (i32.const 57354) "a") (data (i32.const 57357) "a") (data (i32.const 57360) "a") (data (i32.const 57363) "a") (data (i32.const 57366) "a") (data (i32.const 57369) "a") (data (i32.const 57372) "a") (data (i32.const 57375) "a") (data (i32.const 57378) "a") (data (i32.const 57381) "a") (data (i32.const 57384) "a") (data (i32.const 57387) "a") (data (i32.const 57390) "a") (data (i32.const 57393) "a") (data (i32.const 57396) "a") (data (i32.const 57399) "a") (data (i32.const 57402) "a") (data (i32.const 57405) "a") (data (i32.const 57408) "a") (data (i32.const 57411) "a") (data (i32.const 57414) "a") (data (i32.const 57417) "a") (data (i32.const 57420) "a") (data (i32.const 57423) "a") (data (i32.const 57426) "a") (data (i32.const 57429) "a") (data (i32.const 57432) "a") (data (i32.const 57435) "a") (data (i32.const 57438) "a") (data (i32.const 57441) "a") (data (i32.const 57444) "a") (data (i32.const 57447) "a") (data (i32.const 57450) "a") (data (i32.const 57453) "a") (data (i32.const 57456) "a") (data (i32.const 57459) "a") (data (i32.const 57462) "a") (data (i32.const 57465) "a") (data (i32.const 57468) "a") (data (i32.const 57471) "a") (data (i32.const 57474) "a") (data (i32.const 57477) "a") (data (i32.const 57480) "a") (data (i32.const 57483) "a") (data (i32.const 57486) "a") (data (i32.const 57489) "a") (data (i32.const 57492) "a") (data (i32.const 57495) "a") (data (i32.const 57498) "a") (data (i32.const 57501) "a") (data (i32.const 57504) "a") (data (i32.const 57507) "a") (data (i32.const 57510) "a") (data (i32.const 57513) "a") (data (i32.const 57516) "a") (data (i32.const 57519) "a") (data (i32.const 57522) "a") (data (i32.const 57525) "a") (data (i32.const 57528) "a") (data (i32.const 57531) "a") (data (i32.const 57534) "a") (data (i32.const 57537) "a") (data (i32.const 57540) "a") (data (i32.const 57543) "a") (data (i32.const 57546) "a") (data (i32.const 57549) "a") (data (i32.const 57552) "a") (data (i32.const 57555) "a") (data (i32.const 57558) "a") (data (i32.const 57561) "a") (data (i32.const 57564) "a") (data (i32.const 57567) "a") (data (i32.const 57570) "a") (data (i32.const 57573) "a") (data (i32.const 57576) "a") (data (i32.const 57579) "a") (data (i32.const 57582) "a") (data (i32.const 57585) "a") (data (i32.const 57588) "a") (data (i32.const 57591) "a") (data (i32.const 57594) "a") (data (i32.const 57597) "a") (data (i32.const 57600) "a") (data (i32.const 57603) "a") (data (i32.const 57606) "a") (data (i32.const 57609) "a") (data (i32.const 57612) "a") (data (i32.const 57615) "a") (data (i32.const 57618) "a") (data (i32.const 57621) "a") (data (i32.const 57624) "a") (data (i32.const 57627) "a") (data (i32.const 57630) "a") (data (i32.const 57633) "a") (data (i32.const 57636) "a") (data (i32.const 57639) "a") (data (i32.const 57642) "a") (data (i32.const 57645) "a") (data (i32.const 57648) "a") (data (i32.const 57651) "a") (data (i32.const 57654) "a") (data (i32.const 57657) "a") (data (i32.const 57660) "a") (data (i32.const 57663) "a") (data (i32.const 57666) "a") (data (i32.const 57669) "a") (data (i32.const 57672) "a") (data (i32.const 57675) "a") (data (i32.const 57678) "a") (data (i32.const 57681) "a") (data (i32.const 57684) "a") (data (i32.const 57687) "a") (data (i32.const 57690) "a") (data (i32.const 57693) "a") (data (i32.const 57696) "a") (data (i32.const 57699) "a") (data (i32.const 57702) "a") (data (i32.const 57705) "a") (data (i32.const 57708) "a") (data (i32.const 57711) "a") (data (i32.const 57714) "a") (data (i32.const 57717) "a") (data (i32.const 57720) "a") (data (i32.const 57723) "a") (data (i32.const 57726) "a") (data (i32.const 57729) "a") (data (i32.const 57732) "a") (data (i32.const 57735) "a") (data (i32.const 57738) "a") (data (i32.const 57741) "a") (data (i32.const 57744) "a") (data (i32.const 57747) "a") (data (i32.const 57750) "a") (data (i32.const 57753) "a") (data (i32.const 57756) "a") (data (i32.const 57759) "a") (data (i32.const 57762) "a") (data (i32.const 57765) "a") (data (i32.const 57768) "a") (data (i32.const 57771) "a") (data (i32.const 57774) "a") (data (i32.const 57777) "a") (data (i32.const 57780) "a") (data (i32.const 57783) "a") (data (i32.const 57786) "a") (data (i32.const 57789) "a") (data (i32.const 57792) "a") (data (i32.const 57795) "a") (data (i32.const 57798) "a") (data (i32.const 57801) "a") (data (i32.const 57804) "a") (data (i32.const 57807) "a") (data (i32.const 57810) "a") (data (i32.const 57813) "a") (data (i32.const 57816) "a") (data (i32.const 57819) "a") (data (i32.const 57822) "a") (data (i32.const 57825) "a") (data (i32.const 57828) "a") (data (i32.const 57831) "a") (data (i32.const 57834) "a") (data (i32.const 57837) "a") (data (i32.const 57840) "a") (data (i32.const 57843) "a") (data (i32.const 57846) "a") (data (i32.const 57849) "a") (data (i32.const 57852) "a") (data (i32.const 57855) "a") (data (i32.const 57858) "a") (data (i32.const 57861) "a") (data (i32.const 57864) "a") (data (i32.const 57867) "a") (data (i32.const 57870) "a") (data (i32.const 57873) "a") (data (i32.const 57876) "a") (data (i32.const 57879) "a") (data (i32.const 57882) "a") (data (i32.const 57885) "a") (data (i32.const 57888) "a") (data (i32.const 57891) "a") (data (i32.const 57894) "a") (data (i32.const 57897) "a") (data (i32.const 57900) "a") (data (i32.const 57903) "a") (data (i32.const 57906) "a") (data (i32.const 57909) "a") (data (i32.const 57912) "a") (data (i32.const 57915) "a") (data (i32.const 57918) "a") (data (i32.const 57921) "a") (data (i32.const 57924) "a") (data (i32.const 57927) "a") (data (i32.const 57930) "a") (data (i32.const 57933) "a") (data (i32.const 57936) "a") (data (i32.const 57939) "a") (data (i32.const 57942) "a") (data (i32.const 57945) "a") (data (i32.const 57948) "a") (data (i32.const 57951) "a") (data (i32.const 57954) "a") (data (i32.const 57957) "a") (data (i32.const 57960) "a") (data (i32.const 57963) "a") (data (i32.const 57966) "a") (data (i32.const 57969) "a") (data (i32.const 57972) "a") (data (i32.const 57975) "a") (data (i32.const 57978) "a") (data (i32.const 57981) "a") (data (i32.const 57984) "a") (data (i32.const 57987) "a") (data (i32.const 57990) "a") (data (i32.const 57993) "a") (data (i32.const 57996) "a") (data (i32.const 57999) "a") (data (i32.const 58002) "a") (data (i32.const 58005) "a") (data (i32.const 58008) "a") (data (i32.const 58011) "a") (data (i32.const 58014) "a") (data (i32.const 58017) "a") (data (i32.const 58020) "a") (data (i32.const 58023) "a") (data (i32.const 58026) "a") (data (i32.const 58029) "a") (data (i32.const 58032) "a") (data (i32.const 58035) "a") (data (i32.const 58038) "a") (data (i32.const 58041) "a") (data (i32.const 58044) "a") (data (i32.const 58047) "a") (data (i32.const 58050) "a") (data (i32.const 58053) "a") (data (i32.const 58056) "a") (data (i32.const 58059) "a") (data (i32.const 58062) "a") (data (i32.const 58065) "a") (data (i32.const 58068) "a") (data (i32.const 58071) "a") (data (i32.const 58074) "a") (data (i32.const 58077) "a") (data (i32.const 58080) "a") (data (i32.const 58083) "a") (data (i32.const 58086) "a") (data (i32.const 58089) "a") (data (i32.const 58092) "a") (data (i32.const 58095) "a") (data (i32.const 58098) "a") (data (i32.const 58101) "a") (data (i32.const 58104) "a") (data (i32.const 58107) "a") (data (i32.const 58110) "a") (data (i32.const 58113) "a") (data (i32.const 58116) "a") (data (i32.const 58119) "a") (data (i32.const 58122) "a") (data (i32.const 58125) "a") (data (i32.const 58128) "a") (data (i32.const 58131) "a") (data (i32.const 58134) "a") (data (i32.const 58137) "a") (data (i32.const 58140) "a") (data (i32.const 58143) "a") (data (i32.const 58146) "a") (data (i32.const 58149) "a") (data (i32.const 58152) "a") (data (i32.const 58155) "a") (data (i32.const 58158) "a") (data (i32.const 58161) "a") (data (i32.const 58164) "a") (data (i32.const 58167) "a") (data (i32.const 58170) "a") (data (i32.const 58173) "a") (data (i32.const 58176) "a") (data (i32.const 58179) "a") (data (i32.const 58182) "a") (data (i32.const 58185) "a") (data (i32.const 58188) "a") (data (i32.const 58191) "a") (data (i32.const 58194) "a") (data (i32.const 58197) "a") (data (i32.const 58200) "a") (data (i32.const 58203) "a") (data (i32.const 58206) "a") (data (i32.const 58209) "a") (data (i32.const 58212) "a") (data (i32.const 58215) "a") (data (i32.const 58218) "a") (data (i32.const 58221) "a") (data (i32.const 58224) "a") (data (i32.const 58227) "a") (data (i32.const 58230) "a") (data (i32.const 58233) "a") (data (i32.const 58236) "a") (data (i32.const 58239) "a") (data (i32.const 58242) "a") (data (i32.const 58245) "a") (data (i32.const 58248) "a") (data (i32.const 58251) "a") (data (i32.const 58254) "a") (data (i32.const 58257) "a") (data (i32.const 58260) "a") (data (i32.const 58263) "a") (data (i32.const 58266) "a") (data (i32.const 58269) "a") (data (i32.const 58272) "a") (data (i32.const 58275) "a") (data (i32.const 58278) "a") (data (i32.const 58281) "a") (data (i32.const 58284) "a") (data (i32.const 58287) "a") (data (i32.const 58290) "a") (data (i32.const 58293) "a") (data (i32.const 58296) "a") (data (i32.const 58299) "a") (data (i32.const 58302) "a") (data (i32.const 58305) "a") (data (i32.const 58308) "a") (data (i32.const 58311) "a") (data (i32.const 58314) "a") (data (i32.const 58317) "a") (data (i32.const 58320) "a") (data (i32.const 58323) "a") (data (i32.const 58326) "a") (data (i32.const 58329) "a") (data (i32.const 58332) "a") (data (i32.const 58335) "a") (data (i32.const 58338) "a") (data (i32.const 58341) "a") (data (i32.const 58344) "a") (data (i32.const 58347) "a") (data (i32.const 58350) "a") (data (i32.const 58353) "a") (data (i32.const 58356) "a") (data (i32.const 58359) "a") (data (i32.const 58362) "a") (data (i32.const 58365) "a") (data (i32.const 58368) "a") (data (i32.const 58371) "a") (data (i32.const 58374) "a") (data (i32.const 58377) "a") (data (i32.const 58380) "a") (data (i32.const 58383) "a") (data (i32.const 58386) "a") (data (i32.const 58389) "a") (data (i32.const 58392) "a") (data (i32.const 58395) "a") (data (i32.const 58398) "a") (data (i32.const 58401) "a") (data (i32.const 58404) "a") (data (i32.const 58407) "a") (data (i32.const 58410) "a") (data (i32.const 58413) "a") (data (i32.const 58416) "a") (data (i32.const 58419) "a") (data (i32.const 58422) "a") (data (i32.const 58425) "a") (data (i32.const 58428) "a") (data (i32.const 58431) "a") (data (i32.const 58434) "a") (data (i32.const 58437) "a") (data (i32.const 58440) "a") (data (i32.const 58443) "a") (data (i32.const 58446) "a") (data (i32.const 58449) "a") (data (i32.const 58452) "a") (data (i32.const 58455) "a") (data (i32.const 58458) "a") (data (i32.const 58461) "a") (data (i32.const 58464) "a") (data (i32.const 58467) "a") (data (i32.const 58470) "a") (data (i32.const 58473) "a") (data (i32.const 58476) "a") (data (i32.const 58479) "a") (data (i32.const 58482) "a") (data (i32.const 58485) "a") (data (i32.const 58488) "a") (data (i32.const 58491) "a") (data (i32.const 58494) "a") (data (i32.const 58497) "a") (data (i32.const 58500) "a") (data (i32.const 58503) "a") (data (i32.const 58506) "a") (data (i32.const 58509) "a") (data (i32.const 58512) "a") (data (i32.const 58515) "a") (data (i32.const 58518) "a") (data (i32.const 58521) "a") (data (i32.const 58524) "a") (data (i32.const 58527) "a") (data (i32.const 58530) "a") (data (i32.const 58533) "a") (data (i32.const 58536) "a") (data (i32.const 58539) "a") (data (i32.const 58542) "a") (data (i32.const 58545) "a") (data (i32.const 58548) "a") (data (i32.const 58551) "a") (data (i32.const 58554) "a") (data (i32.const 58557) "a") (data (i32.const 58560) "a") (data (i32.const 58563) "a") (data (i32.const 58566) "a") (data (i32.const 58569) "a") (data (i32.const 58572) "a") (data (i32.const 58575) "a") (data (i32.const 58578) "a") (data (i32.const 58581) "a") (data (i32.const 58584) "a") (data (i32.const 58587) "a") (data (i32.const 58590) "a") (data (i32.const 58593) "a") (data (i32.const 58596) "a") (data (i32.const 58599) "a") (data (i32.const 58602) "a") (data (i32.const 58605) "a") (data (i32.const 58608) "a") (data (i32.const 58611) "a") (data (i32.const 58614) "a") (data (i32.const 58617) "a") (data (i32.const 58620) "a") (data (i32.const 58623) "a") (data (i32.const 58626) "a") (data (i32.const 58629) "a") (data (i32.const 58632) "a") (data (i32.const 58635) "a") (data (i32.const 58638) "a") (data (i32.const 58641) "a") (data (i32.const 58644) "a") (data (i32.const 58647) "a") (data (i32.const 58650) "a") (data (i32.const 58653) "a") (data (i32.const 58656) "a") (data (i32.const 58659) "a") (data (i32.const 58662) "a") (data (i32.const 58665) "a") (data (i32.const 58668) "a") (data (i32.const 58671) "a") (data (i32.const 58674) "a") (data (i32.const 58677) "a") (data (i32.const 58680) "a") (data (i32.const 58683) "a") (data (i32.const 58686) "a") (data (i32.const 58689) "a") (data (i32.const 58692) "a") (data (i32.const 58695) "a") (data (i32.const 58698) "a") (data (i32.const 58701) "a") (data (i32.const 58704) "a") (data (i32.const 58707) "a") (data (i32.const 58710) "a") (data (i32.const 58713) "a") (data (i32.const 58716) "a") (data (i32.const 58719) "a") (data (i32.const 58722) "a") (data (i32.const 58725) "a") (data (i32.const 58728) "a") (data (i32.const 58731) "a") (data (i32.const 58734) "a") (data (i32.const 58737) "a") (data (i32.const 58740) "a") (data (i32.const 58743) "a") (data (i32.const 58746) "a") (data (i32.const 58749) "a") (data (i32.const 58752) "a") (data (i32.const 58755) "a") (data (i32.const 58758) "a") (data (i32.const 58761) "a") (data (i32.const 58764) "a") (data (i32.const 58767) "a") (data (i32.const 58770) "a") (data (i32.const 58773) "a") (data (i32.const 58776) "a") (data (i32.const 58779) "a") (data (i32.const 58782) "a") (data (i32.const 58785) "a") (data (i32.const 58788) "a") (data (i32.const 58791) "a") (data (i32.const 58794) "a") (data (i32.const 58797) "a") (data (i32.const 58800) "a") (data (i32.const 58803) "a") (data (i32.const 58806) "a") (data (i32.const 58809) "a") (data (i32.const 58812) "a") (data (i32.const 58815) "a") (data (i32.const 58818) "a") (data (i32.const 58821) "a") (data (i32.const 58824) "a") (data (i32.const 58827) "a") (data (i32.const 58830) "a") (data (i32.const 58833) "a") (data (i32.const 58836) "a") (data (i32.const 58839) "a") (data (i32.const 58842) "a") (data (i32.const 58845) "a") (data (i32.const 58848) "a") (data (i32.const 58851) "a") (data (i32.const 58854) "a") (data (i32.const 58857) "a") (data (i32.const 58860) "a") (data (i32.const 58863) "a") (data (i32.const 58866) "a") (data (i32.const 58869) "a") (data (i32.const 58872) "a") (data (i32.const 58875) "a") (data (i32.const 58878) "a") (data (i32.const 58881) "a") (data (i32.const 58884) "a") (data (i32.const 58887) "a") (data (i32.const 58890) "a") (data (i32.const 58893) "a") (data (i32.const 58896) "a") (data (i32.const 58899) "a") (data (i32.const 58902) "a") (data (i32.const 58905) "a") (data (i32.const 58908) "a") (data (i32.const 58911) "a") (data (i32.const 58914) "a") (data (i32.const 58917) "a") (data (i32.const 58920) "a") (data (i32.const 58923) "a") (data (i32.const 58926) "a") (data (i32.const 58929) "a") (data (i32.const 58932) "a") (data (i32.const 58935) "a") (data (i32.const 58938) "a") (data (i32.const 58941) "a") (data (i32.const 58944) "a") (data (i32.const 58947) "a") (data (i32.const 58950) "a") (data (i32.const 58953) "a") (data (i32.const 58956) "a") (data (i32.const 58959) "a") (data (i32.const 58962) "a") (data (i32.const 58965) "a") (data (i32.const 58968) "a") (data (i32.const 58971) "a") (data (i32.const 58974) "a") (data (i32.const 58977) "a") (data (i32.const 58980) "a") (data (i32.const 58983) "a") (data (i32.const 58986) "a") (data (i32.const 58989) "a") (data (i32.const 58992) "a") (data (i32.const 58995) "a") (data (i32.const 58998) "a") (data (i32.const 59001) "a") (data (i32.const 59004) "a") (data (i32.const 59007) "a") (data (i32.const 59010) "a") (data (i32.const 59013) "a") (data (i32.const 59016) "a") (data (i32.const 59019) "a") (data (i32.const 59022) "a") (data (i32.const 59025) "a") (data (i32.const 59028) "a") (data (i32.const 59031) "a") (data (i32.const 59034) "a") (data (i32.const 59037) "a") (data (i32.const 59040) "a") (data (i32.const 59043) "a") (data (i32.const 59046) "a") (data (i32.const 59049) "a") (data (i32.const 59052) "a") (data (i32.const 59055) "a") (data (i32.const 59058) "a") (data (i32.const 59061) "a") (data (i32.const 59064) "a") (data (i32.const 59067) "a") (data (i32.const 59070) "a") (data (i32.const 59073) "a") (data (i32.const 59076) "a") (data (i32.const 59079) "a") (data (i32.const 59082) "a") (data (i32.const 59085) "a") (data (i32.const 59088) "a") (data (i32.const 59091) "a") (data (i32.const 59094) "a") (data (i32.const 59097) "a") (data (i32.const 59100) "a") (data (i32.const 59103) "a") (data (i32.const 59106) "a") (data (i32.const 59109) "a") (data (i32.const 59112) "a") (data (i32.const 59115) "a") (data (i32.const 59118) "a") (data (i32.const 59121) "a") (data (i32.const 59124) "a") (data (i32.const 59127) "a") (data (i32.const 59130) "a") (data (i32.const 59133) "a") (data (i32.const 59136) "a") (data (i32.const 59139) "a") (data (i32.const 59142) "a") (data (i32.const 59145) "a") (data (i32.const 59148) "a") (data (i32.const 59151) "a") (data (i32.const 59154) "a") (data (i32.const 59157) "a") (data (i32.const 59160) "a") (data (i32.const 59163) "a") (data (i32.const 59166) "a") (data (i32.const 59169) "a") (data (i32.const 59172) "a") (data (i32.const 59175) "a") (data (i32.const 59178) "a") (data (i32.const 59181) "a") (data (i32.const 59184) "a") (data (i32.const 59187) "a") (data (i32.const 59190) "a") (data (i32.const 59193) "a") (data (i32.const 59196) "a") (data (i32.const 59199) "a") (data (i32.const 59202) "a") (data (i32.const 59205) "a") (data (i32.const 59208) "a") (data (i32.const 59211) "a") (data (i32.const 59214) "a") (data (i32.const 59217) "a") (data (i32.const 59220) "a") (data (i32.const 59223) "a") (data (i32.const 59226) "a") (data (i32.const 59229) "a") (data (i32.const 59232) "a") (data (i32.const 59235) "a") (data (i32.const 59238) "a") (data (i32.const 59241) "a") (data (i32.const 59244) "a") (data (i32.const 59247) "a") (data (i32.const 59250) "a") (data (i32.const 59253) "a") (data (i32.const 59256) "a") (data (i32.const 59259) "a") (data (i32.const 59262) "a") (data (i32.const 59265) "a") (data (i32.const 59268) "a") (data (i32.const 59271) "a") (data (i32.const 59274) "a") (data (i32.const 59277) "a") (data (i32.const 59280) "a") (data (i32.const 59283) "a") (data (i32.const 59286) "a") (data (i32.const 59289) "a") (data (i32.const 59292) "a") (data (i32.const 59295) "a") (data (i32.const 59298) "a") (data (i32.const 59301) "a") (data (i32.const 59304) "a") (data (i32.const 59307) "a") (data (i32.const 59310) "a") (data (i32.const 59313) "a") (data (i32.const 59316) "a") (data (i32.const 59319) "a") (data (i32.const 59322) "a") (data (i32.const 59325) "a") (data (i32.const 59328) "a") (data (i32.const 59331) "a") (data (i32.const 59334) "a") (data (i32.const 59337) "a") (data (i32.const 59340) "a") (data (i32.const 59343) "a") (data (i32.const 59346) "a") (data (i32.const 59349) "a") (data (i32.const 59352) "a") (data (i32.const 59355) "a") (data (i32.const 59358) "a") (data (i32.const 59361) "a") (data (i32.const 59364) "a") (data (i32.const 59367) "a") (data (i32.const 59370) "a") (data (i32.const 59373) "a") (data (i32.const 59376) "a") (data (i32.const 59379) "a") (data (i32.const 59382) "a") (data (i32.const 59385) "a") (data (i32.const 59388) "a") (data (i32.const 59391) "a") (data (i32.const 59394) "a") (data (i32.const 59397) "a") (data (i32.const 59400) "a") (data (i32.const 59403) "a") (data (i32.const 59406) "a") (data (i32.const 59409) "a") (data (i32.const 59412) "a") (data (i32.const 59415) "a") (data (i32.const 59418) "a") (data (i32.const 59421) "a") (data (i32.const 59424) "a") (data (i32.const 59427) "a") (data (i32.const 59430) "a") (data (i32.const 59433) "a") (data (i32.const 59436) "a") (data (i32.const 59439) "a") (data (i32.const 59442) "a") (data (i32.const 59445) "a") (data (i32.const 59448) "a") (data (i32.const 59451) "a") (data (i32.const 59454) "a") (data (i32.const 59457) "a") (data (i32.const 59460) "a") (data (i32.const 59463) "a") (data (i32.const 59466) "a") (data (i32.const 59469) "a") (data (i32.const 59472) "a") (data (i32.const 59475) "a") (data (i32.const 59478) "a") (data (i32.const 59481) "a") (data (i32.const 59484) "a") (data (i32.const 59487) "a") (data (i32.const 59490) "a") (data (i32.const 59493) "a") (data (i32.const 59496) "a") (data (i32.const 59499) "a") (data (i32.const 59502) "a") (data (i32.const 59505) "a") (data (i32.const 59508) "a") (data (i32.const 59511) "a") (data (i32.const 59514) "a") (data (i32.const 59517) "a") (data (i32.const 59520) "a") (data (i32.const 59523) "a") (data (i32.const 59526) "a") (data (i32.const 59529) "a") (data (i32.const 59532) "a") (data (i32.const 59535) "a") (data (i32.const 59538) "a") (data (i32.const 59541) "a") (data (i32.const 59544) "a") (data (i32.const 59547) "a") (data (i32.const 59550) "a") (data (i32.const 59553) "a") (data (i32.const 59556) "a") (data (i32.const 59559) "a") (data (i32.const 59562) "a") (data (i32.const 59565) "a") (data (i32.const 59568) "a") (data (i32.const 59571) "a") (data (i32.const 59574) "a") (data (i32.const 59577) "a") (data (i32.const 59580) "a") (data (i32.const 59583) "a") (data (i32.const 59586) "a") (data (i32.const 59589) "a") (data (i32.const 59592) "a") (data (i32.const 59595) "a") (data (i32.const 59598) "a") (data (i32.const 59601) "a") (data (i32.const 59604) "a") (data (i32.const 59607) "a") (data (i32.const 59610) "a") (data (i32.const 59613) "a") (data (i32.const 59616) "a") (data (i32.const 59619) "a") (data (i32.const 59622) "a") (data (i32.const 59625) "a") (data (i32.const 59628) "a") (data (i32.const 59631) "a") (data (i32.const 59634) "a") (data (i32.const 59637) "a") (data (i32.const 59640) "a") (data (i32.const 59643) "a") (data (i32.const 59646) "a") (data (i32.const 59649) "a") (data (i32.const 59652) "a") (data (i32.const 59655) "a") (data (i32.const 59658) "a") (data (i32.const 59661) "a") (data (i32.const 59664) "a") (data (i32.const 59667) "a") (data (i32.const 59670) "a") (data (i32.const 59673) "a") (data (i32.const 59676) "a") (data (i32.const 59679) "a") (data (i32.const 59682) "a") (data (i32.const 59685) "a") (data (i32.const 59688) "a") (data (i32.const 59691) "a") (data (i32.const 59694) "a") (data (i32.const 59697) "a") (data (i32.const 59700) "a") (data (i32.const 59703) "a") (data (i32.const 59706) "a") (data (i32.const 59709) "a") (data (i32.const 59712) "a") (data (i32.const 59715) "a") (data (i32.const 59718) "a") (data (i32.const 59721) "a") (data (i32.const 59724) "a") (data (i32.const 59727) "a") (data (i32.const 59730) "a") (data (i32.const 59733) "a") (data (i32.const 59736) "a") (data (i32.const 59739) "a") (data (i32.const 59742) "a") (data (i32.const 59745) "a") (data (i32.const 59748) "a") (data (i32.const 59751) "a") (data (i32.const 59754) "a") (data (i32.const 59757) "a") (data (i32.const 59760) "a") (data (i32.const 59763) "a") (data (i32.const 59766) "a") (data (i32.const 59769) "a") (data (i32.const 59772) "a") (data (i32.const 59775) "a") (data (i32.const 59778) "a") (data (i32.const 59781) "a") (data (i32.const 59784) "a") (data (i32.const 59787) "a") (data (i32.const 59790) "a") (data (i32.const 59793) "a") (data (i32.const 59796) "a") (data (i32.const 59799) "a") (data (i32.const 59802) "a") (data (i32.const 59805) "a") (data (i32.const 59808) "a") (data (i32.const 59811) "a") (data (i32.const 59814) "a") (data (i32.const 59817) "a") (data (i32.const 59820) "a") (data (i32.const 59823) "a") (data (i32.const 59826) "a") (data (i32.const 59829) "a") (data (i32.const 59832) "a") (data (i32.const 59835) "a") (data (i32.const 59838) "a") (data (i32.const 59841) "a") (data (i32.const 59844) "a") (data (i32.const 59847) "a") (data (i32.const 59850) "a") (data (i32.const 59853) "a") (data (i32.const 59856) "a") (data (i32.const 59859) "a") (data (i32.const 59862) "a") (data (i32.const 59865) "a") (data (i32.const 59868) "a") (data (i32.const 59871) "a") (data (i32.const 59874) "a") (data (i32.const 59877) "a") (data (i32.const 59880) "a") (data (i32.const 59883) "a") (data (i32.const 59886) "a") (data (i32.const 59889) "a") (data (i32.const 59892) "a") (data (i32.const 59895) "a") (data (i32.const 59898) "a") (data (i32.const 59901) "a") (data (i32.const 59904) "a") (data (i32.const 59907) "a") (data (i32.const 59910) "a") (data (i32.const 59913) "a") (data (i32.const 59916) "a") (data (i32.const 59919) "a") (data (i32.const 59922) "a") (data (i32.const 59925) "a") (data (i32.const 59928) "a") (data (i32.const 59931) "a") (data (i32.const 59934) "a") (data (i32.const 59937) "a") (data (i32.const 59940) "a") (data (i32.const 59943) "a") (data (i32.const 59946) "a") (data (i32.const 59949) "a") (data (i32.const 59952) "a") (data (i32.const 59955) "a") (data (i32.const 59958) "a") (data (i32.const 59961) "a") (data (i32.const 59964) "a") (data (i32.const 59967) "a") (data (i32.const 59970) "a") (data (i32.const 59973) "a") (data (i32.const 59976) "a") (data (i32.const 59979) "a") (data (i32.const 59982) "a") (data (i32.const 59985) "a") (data (i32.const 59988) "a") (data (i32.const 59991) "a") (data (i32.const 59994) "a") (data (i32.const 59997) "a") (data (i32.const 60000) "a") (data (i32.const 60003) "a") (data (i32.const 60006) "a") (data (i32.const 60009) "a") (data (i32.const 60012) "a") (data (i32.const 60015) "a") (data (i32.const 60018) "a") (data (i32.const 60021) "a") (data (i32.const 60024) "a") (data (i32.const 60027) "a") (data (i32.const 60030) "a") (data (i32.const 60033) "a") (data (i32.const 60036) "a") (data (i32.const 60039) "a") (data (i32.const 60042) "a") (data (i32.const 60045) "a") (data (i32.const 60048) "a") (data (i32.const 60051) "a") (data (i32.const 60054) "a") (data (i32.const 60057) "a") (data (i32.const 60060) "a") (data (i32.const 60063) "a") (data (i32.const 60066) "a") (data (i32.const 60069) "a") (data (i32.const 60072) "a") (data (i32.const 60075) "a") (data (i32.const 60078) "a") (data (i32.const 60081) "a") (data (i32.const 60084) "a") (data (i32.const 60087) "a") (data (i32.const 60090) "a") (data (i32.const 60093) "a") (data (i32.const 60096) "a") (data (i32.const 60099) "a") (data (i32.const 60102) "a") (data (i32.const 60105) "a") (data (i32.const 60108) "a") (data (i32.const 60111) "a") (data (i32.const 60114) "a") (data (i32.const 60117) "a") (data (i32.const 60120) "a") (data (i32.const 60123) "a") (data (i32.const 60126) "a") (data (i32.const 60129) "a") (data (i32.const 60132) "a") (data (i32.const 60135) "a") (data (i32.const 60138) "a") (data (i32.const 60141) "a") (data (i32.const 60144) "a") (data (i32.const 60147) "a") (data (i32.const 60150) "a") (data (i32.const 60153) "a") (data (i32.const 60156) "a") (data (i32.const 60159) "a") (data (i32.const 60162) "a") (data (i32.const 60165) "a") (data (i32.const 60168) "a") (data (i32.const 60171) "a") (data (i32.const 60174) "a") (data (i32.const 60177) "a") (data (i32.const 60180) "a") (data (i32.const 60183) "a") (data (i32.const 60186) "a") (data (i32.const 60189) "a") (data (i32.const 60192) "a") (data (i32.const 60195) "a") (data (i32.const 60198) "a") (data (i32.const 60201) "a") (data (i32.const 60204) "a") (data (i32.const 60207) "a") (data (i32.const 60210) "a") (data (i32.const 60213) "a") (data (i32.const 60216) "a") (data (i32.const 60219) "a") (data (i32.const 60222) "a") (data (i32.const 60225) "a") (data (i32.const 60228) "a") (data (i32.const 60231) "a") (data (i32.const 60234) "a") (data (i32.const 60237) "a") (data (i32.const 60240) "a") (data (i32.const 60243) "a") (data (i32.const 60246) "a") (data (i32.const 60249) "a") (data (i32.const 60252) "a") (data (i32.const 60255) "a") (data (i32.const 60258) "a") (data (i32.const 60261) "a") (data (i32.const 60264) "a") (data (i32.const 60267) "a") (data (i32.const 60270) "a") (data (i32.const 60273) "a") (data (i32.const 60276) "a") (data (i32.const 60279) "a") (data (i32.const 60282) "a") (data (i32.const 60285) "a") (data (i32.const 60288) "a") (data (i32.const 60291) "a") (data (i32.const 60294) "a") (data (i32.const 60297) "a") (data (i32.const 60300) "a") (data (i32.const 60303) "a") (data (i32.const 60306) "a") (data (i32.const 60309) "a") (data (i32.const 60312) "a") (data (i32.const 60315) "a") (data (i32.const 60318) "a") (data (i32.const 60321) "a") (data (i32.const 60324) "a") (data (i32.const 60327) "a") (data (i32.const 60330) "a") (data (i32.const 60333) "a") (data (i32.const 60336) "a") (data (i32.const 60339) "a") (data (i32.const 60342) "a") (data (i32.const 60345) "a") (data (i32.const 60348) "a") (data (i32.const 60351) "a") (data (i32.const 60354) "a") (data (i32.const 60357) "a") (data (i32.const 60360) "a") (data (i32.const 60363) "a") (data (i32.const 60366) "a") (data (i32.const 60369) "a") (data (i32.const 60372) "a") (data (i32.const 60375) "a") (data (i32.const 60378) "a") (data (i32.const 60381) "a") (data (i32.const 60384) "a") (data (i32.const 60387) "a") (data (i32.const 60390) "a") (data (i32.const 60393) "a") (data (i32.const 60396) "a") (data (i32.const 60399) "a") (data (i32.const 60402) "a") (data (i32.const 60405) "a") (data (i32.const 60408) "a") (data (i32.const 60411) "a") (data (i32.const 60414) "a") (data (i32.const 60417) "a") (data (i32.const 60420) "a") (data (i32.const 60423) "a") (data (i32.const 60426) "a") (data (i32.const 60429) "a") (data (i32.const 60432) "a") (data (i32.const 60435) "a") (data (i32.const 60438) "a") (data (i32.const 60441) "a") (data (i32.const 60444) "a") (data (i32.const 60447) "a") (data (i32.const 60450) "a") (data (i32.const 60453) "a") (data (i32.const 60456) "a") (data (i32.const 60459) "a") (data (i32.const 60462) "a") (data (i32.const 60465) "a") (data (i32.const 60468) "a") (data (i32.const 60471) "a") (data (i32.const 60474) "a") (data (i32.const 60477) "a") (data (i32.const 60480) "a") (data (i32.const 60483) "a") (data (i32.const 60486) "a") (data (i32.const 60489) "a") (data (i32.const 60492) "a") (data (i32.const 60495) "a") (data (i32.const 60498) "a") (data (i32.const 60501) "a") (data (i32.const 60504) "a") (data (i32.const 60507) "a") (data (i32.const 60510) "a") (data (i32.const 60513) "a") (data (i32.const 60516) "a") (data (i32.const 60519) "a") (data (i32.const 60522) "a") (data (i32.const 60525) "a") (data (i32.const 60528) "a") (data (i32.const 60531) "a") (data (i32.const 60534) "a") (data (i32.const 60537) "a") (data (i32.const 60540) "a") (data (i32.const 60543) "a") (data (i32.const 60546) "a") (data (i32.const 60549) "a") (data (i32.const 60552) "a") (data (i32.const 60555) "a") (data (i32.const 60558) "a") (data (i32.const 60561) "a") (data (i32.const 60564) "a") (data (i32.const 60567) "a") (data (i32.const 60570) "a") (data (i32.const 60573) "a") (data (i32.const 60576) "a") (data (i32.const 60579) "a") (data (i32.const 60582) "a") (data (i32.const 60585) "a") (data (i32.const 60588) "a") (data (i32.const 60591) "a") (data (i32.const 60594) "a") (data (i32.const 60597) "a") (data (i32.const 60600) "a") (data (i32.const 60603) "a") (data (i32.const 60606) "a") (data (i32.const 60609) "a") (data (i32.const 60612) "a") (data (i32.const 60615) "a") (data (i32.const 60618) "a") (data (i32.const 60621) "a") (data (i32.const 60624) "a") (data (i32.const 60627) "a") (data (i32.const 60630) "a") (data (i32.const 60633) "a") (data (i32.const 60636) "a") (data (i32.const 60639) "a") (data (i32.const 60642) "a") (data (i32.const 60645) "a") (data (i32.const 60648) "a") (data (i32.const 60651) "a") (data (i32.const 60654) "a") (data (i32.const 60657) "a") (data (i32.const 60660) "a") (data (i32.const 60663) "a") (data (i32.const 60666) "a") (data (i32.const 60669) "a") (data (i32.const 60672) "a") (data (i32.const 60675) "a") (data (i32.const 60678) "a") (data (i32.const 60681) "a") (data (i32.const 60684) "a") (data (i32.const 60687) "a") (data (i32.const 60690) "a") (data (i32.const 60693) "a") (data (i32.const 60696) "a") (data (i32.const 60699) "a") (data (i32.const 60702) "a") (data (i32.const 60705) "a") (data (i32.const 60708) "a") (data (i32.const 60711) "a") (data (i32.const 60714) "a") (data (i32.const 60717) "a") (data (i32.const 60720) "a") (data (i32.const 60723) "a") (data (i32.const 60726) "a") (data (i32.const 60729) "a") (data (i32.const 60732) "a") (data (i32.const 60735) "a") (data (i32.const 60738) "a") (data (i32.const 60741) "a") (data (i32.const 60744) "a") (data (i32.const 60747) "a") (data (i32.const 60750) "a") (data (i32.const 60753) "a") (data (i32.const 60756) "a") (data (i32.const 60759) "a") (data (i32.const 60762) "a") (data (i32.const 60765) "a") (data (i32.const 60768) "a") (data (i32.const 60771) "a") (data (i32.const 60774) "a") (data (i32.const 60777) "a") (data (i32.const 60780) "a") (data (i32.const 60783) "a") (data (i32.const 60786) "a") (data (i32.const 60789) "a") (data (i32.const 60792) "a") (data (i32.const 60795) "a") (data (i32.const 60798) "a") (data (i32.const 60801) "a") (data (i32.const 60804) "a") (data (i32.const 60807) "a") (data (i32.const 60810) "a") (data (i32.const 60813) "a") (data (i32.const 60816) "a") (data (i32.const 60819) "a") (data (i32.const 60822) "a") (data (i32.const 60825) "a") (data (i32.const 60828) "a") (data (i32.const 60831) "a") (data (i32.const 60834) "a") (data (i32.const 60837) "a") (data (i32.const 60840) "a") (data (i32.const 60843) "a") (data (i32.const 60846) "a") (data (i32.const 60849) "a") (data (i32.const 60852) "a") (data (i32.const 60855) "a") (data (i32.const 60858) "a") (data (i32.const 60861) "a") (data (i32.const 60864) "a") (data (i32.const 60867) "a") (data (i32.const 60870) "a") (data (i32.const 60873) "a") (data (i32.const 60876) "a") (data (i32.const 60879) "a") (data (i32.const 60882) "a") (data (i32.const 60885) "a") (data (i32.const 60888) "a") (data (i32.const 60891) "a") (data (i32.const 60894) "a") (data (i32.const 60897) "a") (data (i32.const 60900) "a") (data (i32.const 60903) "a") (data (i32.const 60906) "a") (data (i32.const 60909) "a") (data (i32.const 60912) "a") (data (i32.const 60915) "a") (data (i32.const 60918) "a") (data (i32.const 60921) "a") (data (i32.const 60924) "a") (data (i32.const 60927) "a") (data (i32.const 60930) "a") (data (i32.const 60933) "a") (data (i32.const 60936) "a") (data (i32.const 60939) "a") (data (i32.const 60942) "a") (data (i32.const 60945) "a") (data (i32.const 60948) "a") (data (i32.const 60951) "a") (data (i32.const 60954) "a") (data (i32.const 60957) "a") (data (i32.const 60960) "a") (data (i32.const 60963) "a") (data (i32.const 60966) "a") (data (i32.const 60969) "a") (data (i32.const 60972) "a") (data (i32.const 60975) "a") (data (i32.const 60978) "a") (data (i32.const 60981) "a") (data (i32.const 60984) "a") (data (i32.const 60987) "a") (data (i32.const 60990) "a") (data (i32.const 60993) "a") (data (i32.const 60996) "a") (data (i32.const 60999) "a") (data (i32.const 61002) "a") (data (i32.const 61005) "a") (data (i32.const 61008) "a") (data (i32.const 61011) "a") (data (i32.const 61014) "a") (data (i32.const 61017) "a") (data (i32.const 61020) "a") (data (i32.const 61023) "a") (data (i32.const 61026) "a") (data (i32.const 61029) "a") (data (i32.const 61032) "a") (data (i32.const 61035) "a") (data (i32.const 61038) "a") (data (i32.const 61041) "a") (data (i32.const 61044) "a") (data (i32.const 61047) "a") (data (i32.const 61050) "a") (data (i32.const 61053) "a") (data (i32.const 61056) "a") (data (i32.const 61059) "a") (data (i32.const 61062) "a") (data (i32.const 61065) "a") (data (i32.const 61068) "a") (data (i32.const 61071) "a") (data (i32.const 61074) "a") (data (i32.const 61077) "a") (data (i32.const 61080) "a") (data (i32.const 61083) "a") (data (i32.const 61086) "a") (data (i32.const 61089) "a") (data (i32.const 61092) "a") (data (i32.const 61095) "a") (data (i32.const 61098) "a") (data (i32.const 61101) "a") (data (i32.const 61104) "a") (data (i32.const 61107) "a") (data (i32.const 61110) "a") (data (i32.const 61113) "a") (data (i32.const 61116) "a") (data (i32.const 61119) "a") (data (i32.const 61122) "a") (data (i32.const 61125) "a") (data (i32.const 61128) "a") (data (i32.const 61131) "a") (data (i32.const 61134) "a") (data (i32.const 61137) "a") (data (i32.const 61140) "a") (data (i32.const 61143) "a") (data (i32.const 61146) "a") (data (i32.const 61149) "a") (data (i32.const 61152) "a") (data (i32.const 61155) "a") (data (i32.const 61158) "a") (data (i32.const 61161) "a") (data (i32.const 61164) "a") (data (i32.const 61167) "a") (data (i32.const 61170) "a") (data (i32.const 61173) "a") (data (i32.const 61176) "a") (data (i32.const 61179) "a") (data (i32.const 61182) "a") (data (i32.const 61185) "a") (data (i32.const 61188) "a") (data (i32.const 61191) "a") (data (i32.const 61194) "a") (data (i32.const 61197) "a") (data (i32.const 61200) "a") (data (i32.const 61203) "a") (data (i32.const 61206) "a") (data (i32.const 61209) "a") (data (i32.const 61212) "a") (data (i32.const 61215) "a") (data (i32.const 61218) "a") (data (i32.const 61221) "a") (data (i32.const 61224) "a") (data (i32.const 61227) "a") (data (i32.const 61230) "a") (data (i32.const 61233) "a") (data (i32.const 61236) "a") (data (i32.const 61239) "a") (data (i32.const 61242) "a") (data (i32.const 61245) "a") (data (i32.const 61248) "a") (data (i32.const 61251) "a") (data (i32.const 61254) "a") (data (i32.const 61257) "a") (data (i32.const 61260) "a") (data (i32.const 61263) "a") (data (i32.const 61266) "a") (data (i32.const 61269) "a") (data (i32.const 61272) "a") (data (i32.const 61275) "a") (data (i32.const 61278) "a") (data (i32.const 61281) "a") (data (i32.const 61284) "a") (data (i32.const 61287) "a") (data (i32.const 61290) "a") (data (i32.const 61293) "a") (data (i32.const 61296) "a") (data (i32.const 61299) "a") (data (i32.const 61302) "a") (data (i32.const 61305) "a") (data (i32.const 61308) "a") (data (i32.const 61311) "a") (data (i32.const 61314) "a") (data (i32.const 61317) "a") (data (i32.const 61320) "a") (data (i32.const 61323) "a") (data (i32.const 61326) "a") (data (i32.const 61329) "a") (data (i32.const 61332) "a") (data (i32.const 61335) "a") (data (i32.const 61338) "a") (data (i32.const 61341) "a") (data (i32.const 61344) "a") (data (i32.const 61347) "a") (data (i32.const 61350) "a") (data (i32.const 61353) "a") (data (i32.const 61356) "a") (data (i32.const 61359) "a") (data (i32.const 61362) "a") (data (i32.const 61365) "a") (data (i32.const 61368) "a") (data (i32.const 61371) "a") (data (i32.const 61374) "a") (data (i32.const 61377) "a") (data (i32.const 61380) "a") (data (i32.const 61383) "a") (data (i32.const 61386) "a") (data (i32.const 61389) "a") (data (i32.const 61392) "a") (data (i32.const 61395) "a") (data (i32.const 61398) "a") (data (i32.const 61401) "a") (data (i32.const 61404) "a") (data (i32.const 61407) "a") (data (i32.const 61410) "a") (data (i32.const 61413) "a") (data (i32.const 61416) "a") (data (i32.const 61419) "a") (data (i32.const 61422) "a") (data (i32.const 61425) "a") (data (i32.const 61428) "a") (data (i32.const 61431) "a") (data (i32.const 61434) "a") (data (i32.const 61437) "a") (data (i32.const 61440) "a") (data (i32.const 61443) "a") (data (i32.const 61446) "a") (data (i32.const 61449) "a") (data (i32.const 61452) "a") (data (i32.const 61455) "a") (data (i32.const 61458) "a") (data (i32.const 61461) "a") (data (i32.const 61464) "a") (data (i32.const 61467) "a") (data (i32.const 61470) "a") (data (i32.const 61473) "a") (data (i32.const 61476) "a") (data (i32.const 61479) "a") (data (i32.const 61482) "a") (data (i32.const 61485) "a") (data (i32.const 61488) "a") (data (i32.const 61491) "a") (data (i32.const 61494) "a") (data (i32.const 61497) "a") (data (i32.const 61500) "a") (data (i32.const 61503) "a") (data (i32.const 61506) "a") (data (i32.const 61509) "a") (data (i32.const 61512) "a") (data (i32.const 61515) "a") (data (i32.const 61518) "a") (data (i32.const 61521) "a") (data (i32.const 61524) "a") (data (i32.const 61527) "a") (data (i32.const 61530) "a") (data (i32.const 61533) "a") (data (i32.const 61536) "a") (data (i32.const 61539) "a") (data (i32.const 61542) "a") (data (i32.const 61545) "a") (data (i32.const 61548) "a") (data (i32.const 61551) "a") (data (i32.const 61554) "a") (data (i32.const 61557) "a") (data (i32.const 61560) "a") (data (i32.const 61563) "a") (data (i32.const 61566) "a") (data (i32.const 61569) "a") (data (i32.const 61572) "a") (data (i32.const 61575) "a") (data (i32.const 61578) "a") (data (i32.const 61581) "a") (data (i32.const 61584) "a") (data (i32.const 61587) "a") (data (i32.const 61590) "a") (data (i32.const 61593) "a") (data (i32.const 61596) "a") (data (i32.const 61599) "a") (data (i32.const 61602) "a") (data (i32.const 61605) "a") (data (i32.const 61608) "a") (data (i32.const 61611) "a") (data (i32.const 61614) "a") (data (i32.const 61617) "a") (data (i32.const 61620) "a") (data (i32.const 61623) "a") (data (i32.const 61626) "a") (data (i32.const 61629) "a") (data (i32.const 61632) "a") (data (i32.const 61635) "a") (data (i32.const 61638) "a") (data (i32.const 61641) "a") (data (i32.const 61644) "a") (data (i32.const 61647) "a") (data (i32.const 61650) "a") (data (i32.const 61653) "a") (data (i32.const 61656) "a") (data (i32.const 61659) "a") (data (i32.const 61662) "a") (data (i32.const 61665) "a") (data (i32.const 61668) "a") (data (i32.const 61671) "a") (data (i32.const 61674) "a") (data (i32.const 61677) "a") (data (i32.const 61680) "a") (data (i32.const 61683) "a") (data (i32.const 61686) "a") (data (i32.const 61689) "a") (data (i32.const 61692) "a") (data (i32.const 61695) "a") (data (i32.const 61698) "a") (data (i32.const 61701) "a") (data (i32.const 61704) "a") (data (i32.const 61707) "a") (data (i32.const 61710) "a") (data (i32.const 61713) "a") (data (i32.const 61716) "a") (data (i32.const 61719) "a") (data (i32.const 61722) "a") (data (i32.const 61725) "a") (data (i32.const 61728) "a") (data (i32.const 61731) "a") (data (i32.const 61734) "a") (data (i32.const 61737) "a") (data (i32.const 61740) "a") (data (i32.const 61743) "a") (data (i32.const 61746) "a") (data (i32.const 61749) "a") (data (i32.const 61752) "a") (data (i32.const 61755) "a") (data (i32.const 61758) "a") (data (i32.const 61761) "a") (data (i32.const 61764) "a") (data (i32.const 61767) "a") (data (i32.const 61770) "a") (data (i32.const 61773) "a") (data (i32.const 61776) "a") (data (i32.const 61779) "a") (data (i32.const 61782) "a") (data (i32.const 61785) "a") (data (i32.const 61788) "a") (data (i32.const 61791) "a") (data (i32.const 61794) "a") (data (i32.const 61797) "a") (data (i32.const 61800) "a") (data (i32.const 61803) "a") (data (i32.const 61806) "a") (data (i32.const 61809) "a") (data (i32.const 61812) "a") (data (i32.const 61815) "a") (data (i32.const 61818) "a") (data (i32.const 61821) "a") (data (i32.const 61824) "a") (data (i32.const 61827) "a") (data (i32.const 61830) "a") (data (i32.const 61833) "a") (data (i32.const 61836) "a") (data (i32.const 61839) "a") (data (i32.const 61842) "a") (data (i32.const 61845) "a") (data (i32.const 61848) "a") (data (i32.const 61851) "a") (data (i32.const 61854) "a") (data (i32.const 61857) "a") (data (i32.const 61860) "a") (data (i32.const 61863) "a") (data (i32.const 61866) "a") (data (i32.const 61869) "a") (data (i32.const 61872) "a") (data (i32.const 61875) "a") (data (i32.const 61878) "a") (data (i32.const 61881) "a") (data (i32.const 61884) "a") (data (i32.const 61887) "a") (data (i32.const 61890) "a") (data (i32.const 61893) "a") (data (i32.const 61896) "a") (data (i32.const 61899) "a") (data (i32.const 61902) "a") (data (i32.const 61905) "a") (data (i32.const 61908) "a") (data (i32.const 61911) "a") (data (i32.const 61914) "a") (data (i32.const 61917) "a") (data (i32.const 61920) "a") (data (i32.const 61923) "a") (data (i32.const 61926) "a") (data (i32.const 61929) "a") (data (i32.const 61932) "a") (data (i32.const 61935) "a") (data (i32.const 61938) "a") (data (i32.const 61941) "a") (data (i32.const 61944) "a") (data (i32.const 61947) "a") (data (i32.const 61950) "a") (data (i32.const 61953) "a") (data (i32.const 61956) "a") (data (i32.const 61959) "a") (data (i32.const 61962) "a") (data (i32.const 61965) "a") (data (i32.const 61968) "a") (data (i32.const 61971) "a") (data (i32.const 61974) "a") (data (i32.const 61977) "a") (data (i32.const 61980) "a") (data (i32.const 61983) "a") (data (i32.const 61986) "a") (data (i32.const 61989) "a") (data (i32.const 61992) "a") (data (i32.const 61995) "a") (data (i32.const 61998) "a") (data (i32.const 62001) "a") (data (i32.const 62004) "a") (data (i32.const 62007) "a") (data (i32.const 62010) "a") (data (i32.const 62013) "a") (data (i32.const 62016) "a") (data (i32.const 62019) "a") (data (i32.const 62022) "a") (data (i32.const 62025) "a") (data (i32.const 62028) "a") (data (i32.const 62031) "a") (data (i32.const 62034) "a") (data (i32.const 62037) "a") (data (i32.const 62040) "a") (data (i32.const 62043) "a") (data (i32.const 62046) "a") (data (i32.const 62049) "a") (data (i32.const 62052) "a") (data (i32.const 62055) "a") (data (i32.const 62058) "a") (data (i32.const 62061) "a") (data (i32.const 62064) "a") (data (i32.const 62067) "a") (data (i32.const 62070) "a") (data (i32.const 62073) "a") (data (i32.const 62076) "a") (data (i32.const 62079) "a") (data (i32.const 62082) "a") (data (i32.const 62085) "a") (data (i32.const 62088) "a") (data (i32.const 62091) "a") (data (i32.const 62094) "a") (data (i32.const 62097) "a") (data (i32.const 62100) "a") (data (i32.const 62103) "a") (data (i32.const 62106) "a") (data (i32.const 62109) "a") (data (i32.const 62112) "a") (data (i32.const 62115) "a") (data (i32.const 62118) "a") (data (i32.const 62121) "a") (data (i32.const 62124) "a") (data (i32.const 62127) "a") (data (i32.const 62130) "a") (data (i32.const 62133) "a") (data (i32.const 62136) "a") (data (i32.const 62139) "a") (data (i32.const 62142) "a") (data (i32.const 62145) "a") (data (i32.const 62148) "a") (data (i32.const 62151) "a") (data (i32.const 62154) "a") (data (i32.const 62157) "a") (data (i32.const 62160) "a") (data (i32.const 62163) "a") (data (i32.const 62166) "a") (data (i32.const 62169) "a") (data (i32.const 62172) "a") (data (i32.const 62175) "a") (data (i32.const 62178) "a") (data (i32.const 62181) "a") (data (i32.const 62184) "a") (data (i32.const 62187) "a") (data (i32.const 62190) "a") (data (i32.const 62193) "a") (data (i32.const 62196) "a") (data (i32.const 62199) "a") (data (i32.const 62202) "a") (data (i32.const 62205) "a") (data (i32.const 62208) "a") (data (i32.const 62211) "a") (data (i32.const 62214) "a") (data (i32.const 62217) "a") (data (i32.const 62220) "a") (data (i32.const 62223) "a") (data (i32.const 62226) "a") (data (i32.const 62229) "a") (data (i32.const 62232) "a") (data (i32.const 62235) "a") (data (i32.const 62238) "a") (data (i32.const 62241) "a") (data (i32.const 62244) "a") (data (i32.const 62247) "a") (data (i32.const 62250) "a") (data (i32.const 62253) "a") (data (i32.const 62256) "a") (data (i32.const 62259) "a") (data (i32.const 62262) "a") (data (i32.const 62265) "a") (data (i32.const 62268) "a") (data (i32.const 62271) "a") (data (i32.const 62274) "a") (data (i32.const 62277) "a") (data (i32.const 62280) "a") (data (i32.const 62283) "a") (data (i32.const 62286) "a") (data (i32.const 62289) "a") (data (i32.const 62292) "a") (data (i32.const 62295) "a") (data (i32.const 62298) "a") (data (i32.const 62301) "a") (data (i32.const 62304) "a") (data (i32.const 62307) "a") (data (i32.const 62310) "a") (data (i32.const 62313) "a") (data (i32.const 62316) "a") (data (i32.const 62319) "a") (data (i32.const 62322) "a") (data (i32.const 62325) "a") (data (i32.const 62328) "a") (data (i32.const 62331) "a") (data (i32.const 62334) "a") (data (i32.const 62337) "a") (data (i32.const 62340) "a") (data (i32.const 62343) "a") (data (i32.const 62346) "a") (data (i32.const 62349) "a") (data (i32.const 62352) "a") (data (i32.const 62355) "a") (data (i32.const 62358) "a") (data (i32.const 62361) "a") (data (i32.const 62364) "a") (data (i32.const 62367) "a") (data (i32.const 62370) "a") (data (i32.const 62373) "a") (data (i32.const 62376) "a") (data (i32.const 62379) "a") (data (i32.const 62382) "a") (data (i32.const 62385) "a") (data (i32.const 62388) "a") (data (i32.const 62391) "a") (data (i32.const 62394) "a") (data (i32.const 62397) "a") (data (i32.const 62400) "a") (data (i32.const 62403) "a") (data (i32.const 62406) "a") (data (i32.const 62409) "a") (data (i32.const 62412) "a") (data (i32.const 62415) "a") (data (i32.const 62418) "a") (data (i32.const 62421) "a") (data (i32.const 62424) "a") (data (i32.const 62427) "a") (data (i32.const 62430) "a") (data (i32.const 62433) "a") (data (i32.const 62436) "a") (data (i32.const 62439) "a") (data (i32.const 62442) "a") (data (i32.const 62445) "a") (data (i32.const 62448) "a") (data (i32.const 62451) "a") (data (i32.const 62454) "a") (data (i32.const 62457) "a") (data (i32.const 62460) "a") (data (i32.const 62463) "a") (data (i32.const 62466) "a") (data (i32.const 62469) "a") (data (i32.const 62472) "a") (data (i32.const 62475) "a") (data (i32.const 62478) "a") (data (i32.const 62481) "a") (data (i32.const 62484) "a") (data (i32.const 62487) "a") (data (i32.const 62490) "a") (data (i32.const 62493) "a") (data (i32.const 62496) "a") (data (i32.const 62499) "a") (data (i32.const 62502) "a") (data (i32.const 62505) "a") (data (i32.const 62508) "a") (data (i32.const 62511) "a") (data (i32.const 62514) "a") (data (i32.const 62517) "a") (data (i32.const 62520) "a") (data (i32.const 62523) "a") (data (i32.const 62526) "a") (data (i32.const 62529) "a") (data (i32.const 62532) "a") (data (i32.const 62535) "a") (data (i32.const 62538) "a") (data (i32.const 62541) "a") (data (i32.const 62544) "a") (data (i32.const 62547) "a") (data (i32.const 62550) "a") (data (i32.const 62553) "a") (data (i32.const 62556) "a") (data (i32.const 62559) "a") (data (i32.const 62562) "a") (data (i32.const 62565) "a") (data (i32.const 62568) "a") (data (i32.const 62571) "a") (data (i32.const 62574) "a") (data (i32.const 62577) "a") (data (i32.const 62580) "a") (data (i32.const 62583) "a") (data (i32.const 62586) "a") (data (i32.const 62589) "a") (data (i32.const 62592) "a") (data (i32.const 62595) "a") (data (i32.const 62598) "a") (data (i32.const 62601) "a") (data (i32.const 62604) "a") (data (i32.const 62607) "a") (data (i32.const 62610) "a") (data (i32.const 62613) "a") (data (i32.const 62616) "a") (data (i32.const 62619) "a") (data (i32.const 62622) "a") (data (i32.const 62625) "a") (data (i32.const 62628) "a") (data (i32.const 62631) "a") (data (i32.const 62634) "a") (data (i32.const 62637) "a") (data (i32.const 62640) "a") (data (i32.const 62643) "a") (data (i32.const 62646) "a") (data (i32.const 62649) "a") (data (i32.const 62652) "a") (data (i32.const 62655) "a") (data (i32.const 62658) "a") (data (i32.const 62661) "a") (data (i32.const 62664) "a") (data (i32.const 62667) "a") (data (i32.const 62670) "a") (data (i32.const 62673) "a") (data (i32.const 62676) "a") (data (i32.const 62679) "a") (data (i32.const 62682) "a") (data (i32.const 62685) "a") (data (i32.const 62688) "a") (data (i32.const 62691) "a") (data (i32.const 62694) "a") (data (i32.const 62697) "a") (data (i32.const 62700) "a") (data (i32.const 62703) "a") (data (i32.const 62706) "a") (data (i32.const 62709) "a") (data (i32.const 62712) "a") (data (i32.const 62715) "a") (data (i32.const 62718) "a") (data (i32.const 62721) "a") (data (i32.const 62724) "a") (data (i32.const 62727) "a") (data (i32.const 62730) "a") (data (i32.const 62733) "a") (data (i32.const 62736) "a") (data (i32.const 62739) "a") (data (i32.const 62742) "a") (data (i32.const 62745) "a") (data (i32.const 62748) "a") (data (i32.const 62751) "a") (data (i32.const 62754) "a") (data (i32.const 62757) "a") (data (i32.const 62760) "a") (data (i32.const 62763) "a") (data (i32.const 62766) "a") (data (i32.const 62769) "a") (data (i32.const 62772) "a") (data (i32.const 62775) "a") (data (i32.const 62778) "a") (data (i32.const 62781) "a") (data (i32.const 62784) "a") (data (i32.const 62787) "a") (data (i32.const 62790) "a") (data (i32.const 62793) "a") (data (i32.const 62796) "a") (data (i32.const 62799) "a") (data (i32.const 62802) "a") (data (i32.const 62805) "a") (data (i32.const 62808) "a") (data (i32.const 62811) "a") (data (i32.const 62814) "a") (data (i32.const 62817) "a") (data (i32.const 62820) "a") (data (i32.const 62823) "a") (data (i32.const 62826) "a") (data (i32.const 62829) "a") (data (i32.const 62832) "a") (data (i32.const 62835) "a") (data (i32.const 62838) "a") (data (i32.const 62841) "a") (data (i32.const 62844) "a") (data (i32.const 62847) "a") (data (i32.const 62850) "a") (data (i32.const 62853) "a") (data (i32.const 62856) "a") (data (i32.const 62859) "a") (data (i32.const 62862) "a") (data (i32.const 62865) "a") (data (i32.const 62868) "a") (data (i32.const 62871) "a") (data (i32.const 62874) "a") (data (i32.const 62877) "a") (data (i32.const 62880) "a") (data (i32.const 62883) "a") (data (i32.const 62886) "a") (data (i32.const 62889) "a") (data (i32.const 62892) "a") (data (i32.const 62895) "a") (data (i32.const 62898) "a") (data (i32.const 62901) "a") (data (i32.const 62904) "a") (data (i32.const 62907) "a") (data (i32.const 62910) "a") (data (i32.const 62913) "a") (data (i32.const 62916) "a") (data (i32.const 62919) "a") (data (i32.const 62922) "a") (data (i32.const 62925) "a") (data (i32.const 62928) "a") (data (i32.const 62931) "a") (data (i32.const 62934) "a") (data (i32.const 62937) "a") (data (i32.const 62940) "a") (data (i32.const 62943) "a") (data (i32.const 62946) "a") (data (i32.const 62949) "a") (data (i32.const 62952) "a") (data (i32.const 62955) "a") (data (i32.const 62958) "a") (data (i32.const 62961) "a") (data (i32.const 62964) "a") (data (i32.const 62967) "a") (data (i32.const 62970) "a") (data (i32.const 62973) "a") (data (i32.const 62976) "a") (data (i32.const 62979) "a") (data (i32.const 62982) "a") (data (i32.const 62985) "a") (data (i32.const 62988) "a") (data (i32.const 62991) "a") (data (i32.const 62994) "a") (data (i32.const 62997) "a") (data (i32.const 63000) "a") (data (i32.const 63003) "a") (data (i32.const 63006) "a") (data (i32.const 63009) "a") (data (i32.const 63012) "a") (data (i32.const 63015) "a") (data (i32.const 63018) "a") (data (i32.const 63021) "a") (data (i32.const 63024) "a") (data (i32.const 63027) "a") (data (i32.const 63030) "a") (data (i32.const 63033) "a") (data (i32.const 63036) "a") (data (i32.const 63039) "a") (data (i32.const 63042) "a") (data (i32.const 63045) "a") (data (i32.const 63048) "a") (data (i32.const 63051) "a") (data (i32.const 63054) "a") (data (i32.const 63057) "a") (data (i32.const 63060) "a") (data (i32.const 63063) "a") (data (i32.const 63066) "a") (data (i32.const 63069) "a") (data (i32.const 63072) "a") (data (i32.const 63075) "a") (data (i32.const 63078) "a") (data (i32.const 63081) "a") (data (i32.const 63084) "a") (data (i32.const 63087) "a") (data (i32.const 63090) "a") (data (i32.const 63093) "a") (data (i32.const 63096) "a") (data (i32.const 63099) "a") (data (i32.const 63102) "a") (data (i32.const 63105) "a") (data (i32.const 63108) "a") (data (i32.const 63111) "a") (data (i32.const 63114) "a") (data (i32.const 63117) "a") (data (i32.const 63120) "a") (data (i32.const 63123) "a") (data (i32.const 63126) "a") (data (i32.const 63129) "a") (data (i32.const 63132) "a") (data (i32.const 63135) "a") (data (i32.const 63138) "a") (data (i32.const 63141) "a") (data (i32.const 63144) "a") (data (i32.const 63147) "a") (data (i32.const 63150) "a") (data (i32.const 63153) "a") (data (i32.const 63156) "a") (data (i32.const 63159) "a") (data (i32.const 63162) "a") (data (i32.const 63165) "a") (data (i32.const 63168) "a") (data (i32.const 63171) "a") (data (i32.const 63174) "a") (data (i32.const 63177) "a") (data (i32.const 63180) "a") (data (i32.const 63183) "a") (data (i32.const 63186) "a") (data (i32.const 63189) "a") (data (i32.const 63192) "a") (data (i32.const 63195) "a") (data (i32.const 63198) "a") (data (i32.const 63201) "a") (data (i32.const 63204) "a") (data (i32.const 63207) "a") (data (i32.const 63210) "a") (data (i32.const 63213) "a") (data (i32.const 63216) "a") (data (i32.const 63219) "a") (data (i32.const 63222) "a") (data (i32.const 63225) "a") (data (i32.const 63228) "a") (data (i32.const 63231) "a") (data (i32.const 63234) "a") (data (i32.const 63237) "a") (data (i32.const 63240) "a") (data (i32.const 63243) "a") (data (i32.const 63246) "a") (data (i32.const 63249) "a") (data (i32.const 63252) "a") (data (i32.const 63255) "a") (data (i32.const 63258) "a") (data (i32.const 63261) "a") (data (i32.const 63264) "a") (data (i32.const 63267) "a") (data (i32.const 63270) "a") (data (i32.const 63273) "a") (data (i32.const 63276) "a") (data (i32.const 63279) "a") (data (i32.const 63282) "a") (data (i32.const 63285) "a") (data (i32.const 63288) "a") (data (i32.const 63291) "a") (data (i32.const 63294) "a") (data (i32.const 63297) "a") (data (i32.const 63300) "a") (data (i32.const 63303) "a") (data (i32.const 63306) "a") (data (i32.const 63309) "a") (data (i32.const 63312) "a") (data (i32.const 63315) "a") (data (i32.const 63318) "a") (data (i32.const 63321) "a") (data (i32.const 63324) "a") (data (i32.const 63327) "a") (data (i32.const 63330) "a") (data (i32.const 63333) "a") (data (i32.const 63336) "a") (data (i32.const 63339) "a") (data (i32.const 63342) "a") (data (i32.const 63345) "a") (data (i32.const 63348) "a") (data (i32.const 63351) "a") (data (i32.const 63354) "a") (data (i32.const 63357) "a") (data (i32.const 63360) "a") (data (i32.const 63363) "a") (data (i32.const 63366) "a") (data (i32.const 63369) "a") (data (i32.const 63372) "a") (data (i32.const 63375) "a") (data (i32.const 63378) "a") (data (i32.const 63381) "a") (data (i32.const 63384) "a") (data (i32.const 63387) "a") (data (i32.const 63390) "a") (data (i32.const 63393) "a") (data (i32.const 63396) "a") (data (i32.const 63399) "a") (data (i32.const 63402) "a") (data (i32.const 63405) "a") (data (i32.const 63408) "a") (data (i32.const 63411) "a") (data (i32.const 63414) "a") (data (i32.const 63417) "a") (data (i32.const 63420) "a") (data (i32.const 63423) "a") (data (i32.const 63426) "a") (data (i32.const 63429) "a") (data (i32.const 63432) "a") (data (i32.const 63435) "a") (data (i32.const 63438) "a") (data (i32.const 63441) "a") (data (i32.const 63444) "a") (data (i32.const 63447) "a") (data (i32.const 63450) "a") (data (i32.const 63453) "a") (data (i32.const 63456) "a") (data (i32.const 63459) "a") (data (i32.const 63462) "a") (data (i32.const 63465) "a") (data (i32.const 63468) "a") (data (i32.const 63471) "a") (data (i32.const 63474) "a") (data (i32.const 63477) "a") (data (i32.const 63480) "a") (data (i32.const 63483) "a") (data (i32.const 63486) "a") (data (i32.const 63489) "a") (data (i32.const 63492) "a") (data (i32.const 63495) "a") (data (i32.const 63498) "a") (data (i32.const 63501) "a") (data (i32.const 63504) "a") (data (i32.const 63507) "a") (data (i32.const 63510) "a") (data (i32.const 63513) "a") (data (i32.const 63516) "a") (data (i32.const 63519) "a") (data (i32.const 63522) "a") (data (i32.const 63525) "a") (data (i32.const 63528) "a") (data (i32.const 63531) "a") (data (i32.const 63534) "a") (data (i32.const 63537) "a") (data (i32.const 63540) "a") (data (i32.const 63543) "a") (data (i32.const 63546) "a") (data (i32.const 63549) "a") (data (i32.const 63552) "a") (data (i32.const 63555) "a") (data (i32.const 63558) "a") (data (i32.const 63561) "a") (data (i32.const 63564) "a") (data (i32.const 63567) "a") (data (i32.const 63570) "a") (data (i32.const 63573) "a") (data (i32.const 63576) "a") (data (i32.const 63579) "a") (data (i32.const 63582) "a") (data (i32.const 63585) "a") (data (i32.const 63588) "a") (data (i32.const 63591) "a") (data (i32.const 63594) "a") (data (i32.const 63597) "a") (data (i32.const 63600) "a") (data (i32.const 63603) "a") (data (i32.const 63606) "a") (data (i32.const 63609) "a") (data (i32.const 63612) "a") (data (i32.const 63615) "a") (data (i32.const 63618) "a") (data (i32.const 63621) "a") (data (i32.const 63624) "a") (data (i32.const 63627) "a") (data (i32.const 63630) "a") (data (i32.const 63633) "a") (data (i32.const 63636) "a") (data (i32.const 63639) "a") (data (i32.const 63642) "a") (data (i32.const 63645) "a") (data (i32.const 63648) "a") (data (i32.const 63651) "a") (data (i32.const 63654) "a") (data (i32.const 63657) "a") (data (i32.const 63660) "a") (data (i32.const 63663) "a") (data (i32.const 63666) "a") (data (i32.const 63669) "a") (data (i32.const 63672) "a") (data (i32.const 63675) "a") (data (i32.const 63678) "a") (data (i32.const 63681) "a") (data (i32.const 63684) "a") (data (i32.const 63687) "a") (data (i32.const 63690) "a") (data (i32.const 63693) "a") (data (i32.const 63696) "a") (data (i32.const 63699) "a") (data (i32.const 63702) "a") (data (i32.const 63705) "a") (data (i32.const 63708) "a") (data (i32.const 63711) "a") (data (i32.const 63714) "a") (data (i32.const 63717) "a") (data (i32.const 63720) "a") (data (i32.const 63723) "a") (data (i32.const 63726) "a") (data (i32.const 63729) "a") (data (i32.const 63732) "a") (data (i32.const 63735) "a") (data (i32.const 63738) "a") (data (i32.const 63741) "a") (data (i32.const 63744) "a") (data (i32.const 63747) "a") (data (i32.const 63750) "a") (data (i32.const 63753) "a") (data (i32.const 63756) "a") (data (i32.const 63759) "a") (data (i32.const 63762) "a") (data (i32.const 63765) "a") (data (i32.const 63768) "a") (data (i32.const 63771) "a") (data (i32.const 63774) "a") (data (i32.const 63777) "a") (data (i32.const 63780) "a") (data (i32.const 63783) "a") (data (i32.const 63786) "a") (data (i32.const 63789) "a") (data (i32.const 63792) "a") (data (i32.const 63795) "a") (data (i32.const 63798) "a") (data (i32.const 63801) "a") (data (i32.const 63804) "a") (data (i32.const 63807) "a") (data (i32.const 63810) "a") (data (i32.const 63813) "a") (data (i32.const 63816) "a") (data (i32.const 63819) "a") (data (i32.const 63822) "a") (data (i32.const 63825) "a") (data (i32.const 63828) "a") (data (i32.const 63831) "a") (data (i32.const 63834) "a") (data (i32.const 63837) "a") (data (i32.const 63840) "a") (data (i32.const 63843) "a") (data (i32.const 63846) "a") (data (i32.const 63849) "a") (data (i32.const 63852) "a") (data (i32.const 63855) "a") (data (i32.const 63858) "a") (data (i32.const 63861) "a") (data (i32.const 63864) "a") (data (i32.const 63867) "a") (data (i32.const 63870) "a") (data (i32.const 63873) "a") (data (i32.const 63876) "a") (data (i32.const 63879) "a") (data (i32.const 63882) "a") (data (i32.const 63885) "a") (data (i32.const 63888) "a") (data (i32.const 63891) "a") (data (i32.const 63894) "a") (data (i32.const 63897) "a") (data (i32.const 63900) "a") (data (i32.const 63903) "a") (data (i32.const 63906) "a") (data (i32.const 63909) "a") (data (i32.const 63912) "a") (data (i32.const 63915) "a") (data (i32.const 63918) "a") (data (i32.const 63921) "a") (data (i32.const 63924) "a") (data (i32.const 63927) "a") (data (i32.const 63930) "a") (data (i32.const 63933) "a") (data (i32.const 63936) "a") (data (i32.const 63939) "a") (data (i32.const 63942) "a") (data (i32.const 63945) "a") (data (i32.const 63948) "a") (data (i32.const 63951) "a") (data (i32.const 63954) "a") (data (i32.const 63957) "a") (data (i32.const 63960) "a") (data (i32.const 63963) "a") (data (i32.const 63966) "a") (data (i32.const 63969) "a") (data (i32.const 63972) "a") (data (i32.const 63975) "a") (data (i32.const 63978) "a") (data (i32.const 63981) "a") (data (i32.const 63984) "a") (data (i32.const 63987) "a") (data (i32.const 63990) "a") (data (i32.const 63993) "a") (data (i32.const 63996) "a") (data (i32.const 63999) "a") (data (i32.const 64002) "a") (data (i32.const 64005) "a") (data (i32.const 64008) "a") (data (i32.const 64011) "a") (data (i32.const 64014) "a") (data (i32.const 64017) "a") (data (i32.const 64020) "a") (data (i32.const 64023) "a") (data (i32.const 64026) "a") (data (i32.const 64029) "a") (data (i32.const 64032) "a") (data (i32.const 64035) "a") (data (i32.const 64038) "a") (data (i32.const 64041) "a") (data (i32.const 64044) "a") (data (i32.const 64047) "a") (data (i32.const 64050) "a") (data (i32.const 64053) "a") (data (i32.const 64056) "a") (data (i32.const 64059) "a") (data (i32.const 64062) "a") (data (i32.const 64065) "a") (data (i32.const 64068) "a") (data (i32.const 64071) "a") (data (i32.const 64074) "a") (data (i32.const 64077) "a") (data (i32.const 64080) "a") (data (i32.const 64083) "a") (data (i32.const 64086) "a") (data (i32.const 64089) "a") (data (i32.const 64092) "a") (data (i32.const 64095) "a") (data (i32.const 64098) "a") (data (i32.const 64101) "a") (data (i32.const 64104) "a") (data (i32.const 64107) "a") (data (i32.const 64110) "a") (data (i32.const 64113) "a") (data (i32.const 64116) "a") (data (i32.const 64119) "a") (data (i32.const 64122) "a") (data (i32.const 64125) "a") (data (i32.const 64128) "a") (data (i32.const 64131) "a") (data (i32.const 64134) "a") (data (i32.const 64137) "a") (data (i32.const 64140) "a") (data (i32.const 64143) "a") (data (i32.const 64146) "a") (data (i32.const 64149) "a") (data (i32.const 64152) "a") (data (i32.const 64155) "a") (data (i32.const 64158) "a") (data (i32.const 64161) "a") (data (i32.const 64164) "a") (data (i32.const 64167) "a") (data (i32.const 64170) "a") (data (i32.const 64173) "a") (data (i32.const 64176) "a") (data (i32.const 64179) "a") (data (i32.const 64182) "a") (data (i32.const 64185) "a") (data (i32.const 64188) "a") (data (i32.const 64191) "a") (data (i32.const 64194) "a") (data (i32.const 64197) "a") (data (i32.const 64200) "a") (data (i32.const 64203) "a") (data (i32.const 64206) "a") (data (i32.const 64209) "a") (data (i32.const 64212) "a") (data (i32.const 64215) "a") (data (i32.const 64218) "a") (data (i32.const 64221) "a") (data (i32.const 64224) "a") (data (i32.const 64227) "a") (data (i32.const 64230) "a") (data (i32.const 64233) "a") (data (i32.const 64236) "a") (data (i32.const 64239) "a") (data (i32.const 64242) "a") (data (i32.const 64245) "a") (data (i32.const 64248) "a") (data (i32.const 64251) "a") (data (i32.const 64254) "a") (data (i32.const 64257) "a") (data (i32.const 64260) "a") (data (i32.const 64263) "a") (data (i32.const 64266) "a") (data (i32.const 64269) "a") (data (i32.const 64272) "a") (data (i32.const 64275) "a") (data (i32.const 64278) "a") (data (i32.const 64281) "a") (data (i32.const 64284) "a") (data (i32.const 64287) "a") (data (i32.const 64290) "a") (data (i32.const 64293) "a") (data (i32.const 64296) "a") (data (i32.const 64299) "a") (data (i32.const 64302) "a") (data (i32.const 64305) "a") (data (i32.const 64308) "a") (data (i32.const 64311) "a") (data (i32.const 64314) "a") (data (i32.const 64317) "a") (data (i32.const 64320) "a") (data (i32.const 64323) "a") (data (i32.const 64326) "a") (data (i32.const 64329) "a") (data (i32.const 64332) "a") (data (i32.const 64335) "a") (data (i32.const 64338) "a") (data (i32.const 64341) "a") (data (i32.const 64344) "a") (data (i32.const 64347) "a") (data (i32.const 64350) "a") (data (i32.const 64353) "a") (data (i32.const 64356) "a") (data (i32.const 64359) "a") (data (i32.const 64362) "a") (data (i32.const 64365) "a") (data (i32.const 64368) "a") (data (i32.const 64371) "a") (data (i32.const 64374) "a") (data (i32.const 64377) "a") (data (i32.const 64380) "a") (data (i32.const 64383) "a") (data (i32.const 64386) "a") (data (i32.const 64389) "a") (data (i32.const 64392) "a") (data (i32.const 64395) "a") (data (i32.const 64398) "a") (data (i32.const 64401) "a") (data (i32.const 64404) "a") (data (i32.const 64407) "a") (data (i32.const 64410) "a") (data (i32.const 64413) "a") (data (i32.const 64416) "a") (data (i32.const 64419) "a") (data (i32.const 64422) "a") (data (i32.const 64425) "a") (data (i32.const 64428) "a") (data (i32.const 64431) "a") (data (i32.const 64434) "a") (data (i32.const 64437) "a") (data (i32.const 64440) "a") (data (i32.const 64443) "a") (data (i32.const 64446) "a") (data (i32.const 64449) "a") (data (i32.const 64452) "a") (data (i32.const 64455) "a") (data (i32.const 64458) "a") (data (i32.const 64461) "a") (data (i32.const 64464) "a") (data (i32.const 64467) "a") (data (i32.const 64470) "a") (data (i32.const 64473) "a") (data (i32.const 64476) "a") (data (i32.const 64479) "a") (data (i32.const 64482) "a") (data (i32.const 64485) "a") (data (i32.const 64488) "a") (data (i32.const 64491) "a") (data (i32.const 64494) "a") (data (i32.const 64497) "a") (data (i32.const 64500) "a") (data (i32.const 64503) "a") (data (i32.const 64506) "a") (data (i32.const 64509) "a") (data (i32.const 64512) "a") (data (i32.const 64515) "a") (data (i32.const 64518) "a") (data (i32.const 64521) "a") (data (i32.const 64524) "a") (data (i32.const 64527) "a") (data (i32.const 64530) "a") (data (i32.const 64533) "a") (data (i32.const 64536) "a") (data (i32.const 64539) "a") (data (i32.const 64542) "a") (data (i32.const 64545) "a") (data (i32.const 64548) "a") (data (i32.const 64551) "a") (data (i32.const 64554) "a") (data (i32.const 64557) "a") (data (i32.const 64560) "a") (data (i32.const 64563) "a") (data (i32.const 64566) "a") (data (i32.const 64569) "a") (data (i32.const 64572) "a") (data (i32.const 64575) "a") (data (i32.const 64578) "a") (data (i32.const 64581) "a") (data (i32.const 64584) "a") (data (i32.const 64587) "a") (data (i32.const 64590) "a") (data (i32.const 64593) "a") (data (i32.const 64596) "a") (data (i32.const 64599) "a") (data (i32.const 64602) "a") (data (i32.const 64605) "a") (data (i32.const 64608) "a") (data (i32.const 64611) "a") (data (i32.const 64614) "a") (data (i32.const 64617) "a") (data (i32.const 64620) "a") (data (i32.const 64623) "a") (data (i32.const 64626) "a") (data (i32.const 64629) "a") (data (i32.const 64632) "a") (data (i32.const 64635) "a") (data (i32.const 64638) "a") (data (i32.const 64641) "a") (data (i32.const 64644) "a") (data (i32.const 64647) "a") (data (i32.const 64650) "a") (data (i32.const 64653) "a") (data (i32.const 64656) "a") (data (i32.const 64659) "a") (data (i32.const 64662) "a") (data (i32.const 64665) "a") (data (i32.const 64668) "a") (data (i32.const 64671) "a") (data (i32.const 64674) "a") (data (i32.const 64677) "a") (data (i32.const 64680) "a") (data (i32.const 64683) "a") (data (i32.const 64686) "a") (data (i32.const 64689) "a") (data (i32.const 64692) "a") (data (i32.const 64695) "a") (data (i32.const 64698) "a") (data (i32.const 64701) "a") (data (i32.const 64704) "a") (data (i32.const 64707) "a") (data (i32.const 64710) "a") (data (i32.const 64713) "a") (data (i32.const 64716) "a") (data (i32.const 64719) "a") (data (i32.const 64722) "a") (data (i32.const 64725) "a") (data (i32.const 64728) "a") (data (i32.const 64731) "a") (data (i32.const 64734) "a") (data (i32.const 64737) "a") (data (i32.const 64740) "a") (data (i32.const 64743) "a") (data (i32.const 64746) "a") (data (i32.const 64749) "a") (data (i32.const 64752) "a") (data (i32.const 64755) "a") (data (i32.const 64758) "a") (data (i32.const 64761) "a") (data (i32.const 64764) "a") (data (i32.const 64767) "a") (data (i32.const 64770) "a") (data (i32.const 64773) "a") (data (i32.const 64776) "a") (data (i32.const 64779) "a") (data (i32.const 64782) "a") (data (i32.const 64785) "a") (data (i32.const 64788) "a") (data (i32.const 64791) "a") (data (i32.const 64794) "a") (data (i32.const 64797) "a") (data (i32.const 64800) "a") (data (i32.const 64803) "a") (data (i32.const 64806) "a") (data (i32.const 64809) "a") (data (i32.const 64812) "a") (data (i32.const 64815) "a") (data (i32.const 64818) "a") (data (i32.const 64821) "a") (data (i32.const 64824) "a") (data (i32.const 64827) "a") (data (i32.const 64830) "a") (data (i32.const 64833) "a") (data (i32.const 64836) "a") (data (i32.const 64839) "a") (data (i32.const 64842) "a") (data (i32.const 64845) "a") (data (i32.const 64848) "a") (data (i32.const 64851) "a") (data (i32.const 64854) "a") (data (i32.const 64857) "a") (data (i32.const 64860) "a") (data (i32.const 64863) "a") (data (i32.const 64866) "a") (data (i32.const 64869) "a") (data (i32.const 64872) "a") (data (i32.const 64875) "a") (data (i32.const 64878) "a") (data (i32.const 64881) "a") (data (i32.const 64884) "a") (data (i32.const 64887) "a") (data (i32.const 64890) "a") (data (i32.const 64893) "a") (data (i32.const 64896) "a") (data (i32.const 64899) "a") (data (i32.const 64902) "a") (data (i32.const 64905) "a") (data (i32.const 64908) "a") (data (i32.const 64911) "a") (data (i32.const 64914) "a") (data (i32.const 64917) "a") (data (i32.const 64920) "a") (data (i32.const 64923) "a") (data (i32.const 64926) "a") (data (i32.const 64929) "a") (data (i32.const 64932) "a") (data (i32.const 64935) "a") (data (i32.const 64938) "a") (data (i32.const 64941) "a") (data (i32.const 64944) "a") (data (i32.const 64947) "a") (data (i32.const 64950) "a") (data (i32.const 64953) "a") (data (i32.const 64956) "a") (data (i32.const 64959) "a") (data (i32.const 64962) "a") (data (i32.const 64965) "a") (data (i32.const 64968) "a") (data (i32.const 64971) "a") (data (i32.const 64974) "a") (data (i32.const 64977) "a") (data (i32.const 64980) "a") (data (i32.const 64983) "a") (data (i32.const 64986) "a") (data (i32.const 64989) "a") (data (i32.const 64992) "a") (data (i32.const 64995) "a") (data (i32.const 64998) "a") (data (i32.const 65001) "a") (data (i32.const 65004) "a") (data (i32.const 65007) "a") (data (i32.const 65010) "a") (data (i32.const 65013) "a") (data (i32.const 65016) "a") (data (i32.const 65019) "a") (data (i32.const 65022) "a") (data (i32.const 65025) "a") (data (i32.const 65028) "a") (data (i32.const 65031) "a") (data (i32.const 65034) "a") (data (i32.const 65037) "a") (data (i32.const 65040) "a") (data (i32.const 65043) "a") (data (i32.const 65046) "a") (data (i32.const 65049) "a") (data (i32.const 65052) "a") (data (i32.const 65055) "a") (data (i32.const 65058) "a") (data (i32.const 65061) "a") (data (i32.const 65064) "a") (data (i32.const 65067) "a") (data (i32.const 65070) "a") (data (i32.const 65073) "a") (data (i32.const 65076) "a") (data (i32.const 65079) "a") (data (i32.const 65082) "a") (data (i32.const 65085) "a") (data (i32.const 65088) "a") (data (i32.const 65091) "a") (data (i32.const 65094) "a") (data (i32.const 65097) "a") (data (i32.const 65100) "a") (data (i32.const 65103) "a") (data (i32.const 65106) "a") (data (i32.const 65109) "a") (data (i32.const 65112) "a") (data (i32.const 65115) "a") (data (i32.const 65118) "a") (data (i32.const 65121) "a") (data (i32.const 65124) "a") (data (i32.const 65127) "a") (data (i32.const 65130) "a") (data (i32.const 65133) "a") (data (i32.const 65136) "a") (data (i32.const 65139) "a") (data (i32.const 65142) "a") (data (i32.const 65145) "a") (data (i32.const 65148) "a") (data (i32.const 65151) "a") (data (i32.const 65154) "a") (data (i32.const 65157) "a") (data (i32.const 65160) "a") (data (i32.const 65163) "a") (data (i32.const 65166) "a") (data (i32.const 65169) "a") (data (i32.const 65172) "a") (data (i32.const 65175) "a") (data (i32.const 65178) "a") (data (i32.const 65181) "a") (data (i32.const 65184) "a") (data (i32.const 65187) "a") (data (i32.const 65190) "a") (data (i32.const 65193) "a") (data (i32.const 65196) "a") (data (i32.const 65199) "a") (data (i32.const 65202) "a") (data (i32.const 65205) "a") (data (i32.const 65208) "a") (data (i32.const 65211) "a") (data (i32.const 65214) "a") (data (i32.const 65217) "a") (data (i32.const 65220) "a") (data (i32.const 65223) "a") (data (i32.const 65226) "a") (data (i32.const 65229) "a") (data (i32.const 65232) "a") (data (i32.const 65235) "a") (data (i32.const 65238) "a") (data (i32.const 65241) "a") (data (i32.const 65244) "a") (data (i32.const 65247) "a") (data (i32.const 65250) "a") (data (i32.const 65253) "a") (data (i32.const 65256) "a") (data (i32.const 65259) "a") (data (i32.const 65262) "a") (data (i32.const 65265) "a") (data (i32.const 65268) "a") (data (i32.const 65271) "a") (data (i32.const 65274) "a") (data (i32.const 65277) "a") (data (i32.const 65280) "a") (data (i32.const 65283) "a") (data (i32.const 65286) "a") (data (i32.const 65289) "a") (data (i32.const 65292) "a") (data (i32.const 65295) "a") (data (i32.const 65298) "a") (data (i32.const 65301) "a") (data (i32.const 65304) "a") (data (i32.const 65307) "a") (data (i32.const 65310) "a") (data (i32.const 65313) "a") (data (i32.const 65316) "a") (data (i32.const 65319) "a") (data (i32.const 65322) "a") (data (i32.const 65325) "a") (data (i32.const 65328) "a") (data (i32.const 65331) "a") (data (i32.const 65334) "a") (data (i32.const 65337) "a") (data (i32.const 65340) "a") (data (i32.const 65343) "a") (data (i32.const 65346) "a") (data (i32.const 65349) "a") (data (i32.const 65352) "a") (data (i32.const 65355) "a") (data (i32.const 65358) "a") (data (i32.const 65361) "a") (data (i32.const 65364) "a") (data (i32.const 65367) "a") (data (i32.const 65370) "a") (data (i32.const 65373) "a") (data (i32.const 65376) "a") (data (i32.const 65379) "a") (data (i32.const 65382) "a") (data (i32.const 65385) "a") (data (i32.const 65388) "a") (data (i32.const 65391) "a") (data (i32.const 65394) "a") (data (i32.const 65397) "a") (data (i32.const 65400) "a") (data (i32.const 65403) "a") (data (i32.const 65406) "a") (data (i32.const 65409) "a") (data (i32.const 65412) "a") (data (i32.const 65415) "a") (data (i32.const 65418) "a") (data (i32.const 65421) "a") (data (i32.const 65424) "a") (data (i32.const 65427) "a") (data (i32.const 65430) "a") (data (i32.const 65433) "a") (data (i32.const 65436) "a") (data (i32.const 65439) "a") (data (i32.const 65442) "a") (data (i32.const 65445) "a") (data (i32.const 65448) "a") (data (i32.const 65451) "a") (data (i32.const 65454) "a") (data (i32.const 65457) "a") (data (i32.const 65460) "a") (data (i32.const 65463) "a") (data (i32.const 65466) "a") (data (i32.const 65469) "a") (data (i32.const 65472) "a") (data (i32.const 65475) "a") (data (i32.const 65478) "a") (data (i32.const 65481) "a") (data (i32.const 65484) "a") (data (i32.const 65487) "a") (data (i32.const 65490) "a") (data (i32.const 65493) "a") (data (i32.const 65496) "a") (data (i32.const 65499) "a") (data (i32.const 65502) "a") (data (i32.const 65505) "a") (data (i32.const 65508) "a") (data (i32.const 65511) "a") (data (i32.const 65514) "a") (data (i32.const 65517) "a") (data (i32.const 65520) "a") (data (i32.const 65523) "a") (data (i32.const 65526) "a") (data (i32.const 65529) "a") (data (i32.const 65532) "a") (data (i32.const 65535) "a") (data (i32.const 65538) "a") (data (i32.const 65541) "a") (data (i32.const 65544) "a") (data (i32.const 65547) "a") (data (i32.const 65550) "a") (data (i32.const 65553) "a") (data (i32.const 65556) "a") (data (i32.const 65559) "a") (data (i32.const 65562) "a") (data (i32.const 65565) "a") (data (i32.const 65568) "a") (data (i32.const 65571) "a") (data (i32.const 65574) "a") (data (i32.const 65577) "a") (data (i32.const 65580) "a") (data (i32.const 65583) "a") (data (i32.const 65586) "a") (data (i32.const 65589) "a") (data (i32.const 65592) "a") (data (i32.const 65595) "a") (data (i32.const 65598) "a") (data (i32.const 65601) "a") (data (i32.const 65604) "a") (data (i32.const 65607) "a") (data (i32.const 65610) "a") (data (i32.const 65613) "a") (data (i32.const 65616) "a") (data (i32.const 65619) "a") (data (i32.const 65622) "a") (data (i32.const 65625) "a") (data (i32.const 65628) "a") (data (i32.const 65631) "a") (data (i32.const 65634) "a") (data (i32.const 65637) "a") (data (i32.const 65640) "a") (data (i32.const 65643) "a") (data (i32.const 65646) "a") (data (i32.const 65649) "a") (data (i32.const 65652) "a") (data (i32.const 65655) "a") (data (i32.const 65658) "a") (data (i32.const 65661) "a") (data (i32.const 65664) "a") (data (i32.const 65667) "a") (data (i32.const 65670) "a") (data (i32.const 65673) "a") (data (i32.const 65676) "a") (data (i32.const 65679) "a") (data (i32.const 65682) "a") (data (i32.const 65685) "a") (data (i32.const 65688) "a") (data (i32.const 65691) "a") (data (i32.const 65694) "a") (data (i32.const 65697) "a") (data (i32.const 65700) "a") (data (i32.const 65703) "a") (data (i32.const 65706) "a") (data (i32.const 65709) "a") (data (i32.const 65712) "a") (data (i32.const 65715) "a") (data (i32.const 65718) "a") (data (i32.const 65721) "a") (data (i32.const 65724) "a") (data (i32.const 65727) "a") (data (i32.const 65730) "a") (data (i32.const 65733) "a") (data (i32.const 65736) "a") (data (i32.const 65739) "a") (data (i32.const 65742) "a") (data (i32.const 65745) "a") (data (i32.const 65748) "a") (data (i32.const 65751) "a") (data (i32.const 65754) "a") (data (i32.const 65757) "a") (data (i32.const 65760) "a") (data (i32.const 65763) "a") (data (i32.const 65766) "a") (data (i32.const 65769) "a") (data (i32.const 65772) "a") (data (i32.const 65775) "a") (data (i32.const 65778) "a") (data (i32.const 65781) "a") (data (i32.const 65784) "a") (data (i32.const 65787) "a") (data (i32.const 65790) "a") (data (i32.const 65793) "a") (data (i32.const 65796) "a") (data (i32.const 65799) "a") (data (i32.const 65802) "a") (data (i32.const 65805) "a") (data (i32.const 65808) "a") (data (i32.const 65811) "a") (data (i32.const 65814) "a") (data (i32.const 65817) "a") (data (i32.const 65820) "a") (data (i32.const 65823) "a") (data (i32.const 65826) "a") (data (i32.const 65829) "a") (data (i32.const 65832) "a") (data (i32.const 65835) "a") (data (i32.const 65838) "a") (data (i32.const 65841) "a") (data (i32.const 65844) "a") (data (i32.const 65847) "a") (data (i32.const 65850) "a") (data (i32.const 65853) "a") (data (i32.const 65856) "a") (data (i32.const 65859) "a") (data (i32.const 65862) "a") (data (i32.const 65865) "a") (data (i32.const 65868) "a") (data (i32.const 65871) "a") (data (i32.const 65874) "a") (data (i32.const 65877) "a") (data (i32.const 65880) "a") (data (i32.const 65883) "a") (data (i32.const 65886) "a") (data (i32.const 65889) "a") (data (i32.const 65892) "a") (data (i32.const 65895) "a") (data (i32.const 65898) "a") (data (i32.const 65901) "a") (data (i32.const 65904) "a") (data (i32.const 65907) "a") (data (i32.const 65910) "a") (data (i32.const 65913) "a") (data (i32.const 65916) "a") (data (i32.const 65919) "a") (data (i32.const 65922) "a") (data (i32.const 65925) "a") (data (i32.const 65928) "a") (data (i32.const 65931) "a") (data (i32.const 65934) "a") (data (i32.const 65937) "a") (data (i32.const 65940) "a") (data (i32.const 65943) "a") (data (i32.const 65946) "a") (data (i32.const 65949) "a") (data (i32.const 65952) "a") (data (i32.const 65955) "a") (data (i32.const 65958) "a") (data (i32.const 65961) "a") (data (i32.const 65964) "a") (data (i32.const 65967) "a") (data (i32.const 65970) "a") (data (i32.const 65973) "a") (data (i32.const 65976) "a") (data (i32.const 65979) "a") (data (i32.const 65982) "a") (data (i32.const 65985) "a") (data (i32.const 65988) "a") (data (i32.const 65991) "a") (data (i32.const 65994) "a") (data (i32.const 65997) "a") (data (i32.const 66000) "a") (data (i32.const 66003) "a") (data (i32.const 66006) "a") (data (i32.const 66009) "a") (data (i32.const 66012) "a") (data (i32.const 66015) "a") (data (i32.const 66018) "a") (data (i32.const 66021) "a") (data (i32.const 66024) "a") (data (i32.const 66027) "a") (data (i32.const 66030) "a") (data (i32.const 66033) "a") (data (i32.const 66036) "a") (data (i32.const 66039) "a") (data (i32.const 66042) "a") (data (i32.const 66045) "a") (data (i32.const 66048) "a") (data (i32.const 66051) "a") (data (i32.const 66054) "a") (data (i32.const 66057) "a") (data (i32.const 66060) "a") (data (i32.const 66063) "a") (data (i32.const 66066) "a") (data (i32.const 66069) "a") (data (i32.const 66072) "a") (data (i32.const 66075) "a") (data (i32.const 66078) "a") (data (i32.const 66081) "a") (data (i32.const 66084) "a") (data (i32.const 66087) "a") (data (i32.const 66090) "a") (data (i32.const 66093) "a") (data (i32.const 66096) "a") (data (i32.const 66099) "a") (data (i32.const 66102) "a") (data (i32.const 66105) "a") (data (i32.const 66108) "a") (data (i32.const 66111) "a") (data (i32.const 66114) "a") (data (i32.const 66117) "a") (data (i32.const 66120) "a") (data (i32.const 66123) "a") (data (i32.const 66126) "a") (data (i32.const 66129) "a") (data (i32.const 66132) "a") (data (i32.const 66135) "a") (data (i32.const 66138) "a") (data (i32.const 66141) "a") (data (i32.const 66144) "a") (data (i32.const 66147) "a") (data (i32.const 66150) "a") (data (i32.const 66153) "a") (data (i32.const 66156) "a") (data (i32.const 66159) "a") (data (i32.const 66162) "a") (data (i32.const 66165) "a") (data (i32.const 66168) "a") (data (i32.const 66171) "a") (data (i32.const 66174) "a") (data (i32.const 66177) "a") (data (i32.const 66180) "a") (data (i32.const 66183) "a") (data (i32.const 66186) "a") (data (i32.const 66189) "a") (data (i32.const 66192) "a") (data (i32.const 66195) "a") (data (i32.const 66198) "a") (data (i32.const 66201) "a") (data (i32.const 66204) "a") (data (i32.const 66207) "a") (data (i32.const 66210) "a") (data (i32.const 66213) "a") (data (i32.const 66216) "a") (data (i32.const 66219) "a") (data (i32.const 66222) "a") (data (i32.const 66225) "a") (data (i32.const 66228) "a") (data (i32.const 66231) "a") (data (i32.const 66234) "a") (data (i32.const 66237) "a") (data (i32.const 66240) "a") (data (i32.const 66243) "a") (data (i32.const 66246) "a") (data (i32.const 66249) "a") (data (i32.const 66252) "a") (data (i32.const 66255) "a") (data (i32.const 66258) "a") (data (i32.const 66261) "a") (data (i32.const 66264) "a") (data (i32.const 66267) "a") (data (i32.const 66270) "a") (data (i32.const 66273) "a") (data (i32.const 66276) "a") (data (i32.const 66279) "a") (data (i32.const 66282) "a") (data (i32.const 66285) "a") (data (i32.const 66288) "a") (data (i32.const 66291) "a") (data (i32.const 66294) "a") (data (i32.const 66297) "a") (data (i32.const 66300) "a") (data (i32.const 66303) "a") (data (i32.const 66306) "a") (data (i32.const 66309) "a") (data (i32.const 66312) "a") (data (i32.const 66315) "a") (data (i32.const 66318) "a") (data (i32.const 66321) "a") (data (i32.const 66324) "a") (data (i32.const 66327) "a") (data (i32.const 66330) "a") (data (i32.const 66333) "a") (data (i32.const 66336) "a") (data (i32.const 66339) "a") (data (i32.const 66342) "a") (data (i32.const 66345) "a") (data (i32.const 66348) "a") (data (i32.const 66351) "a") (data (i32.const 66354) "a") (data (i32.const 66357) "a") (data (i32.const 66360) "a") (data (i32.const 66363) "a") (data (i32.const 66366) "a") (data (i32.const 66369) "a") (data (i32.const 66372) "a") (data (i32.const 66375) "a") (data (i32.const 66378) "a") (data (i32.const 66381) "a") (data (i32.const 66384) "a") (data (i32.const 66387) "a") (data (i32.const 66390) "a") (data (i32.const 66393) "a") (data (i32.const 66396) "a") (data (i32.const 66399) "a") (data (i32.const 66402) "a") (data (i32.const 66405) "a") (data (i32.const 66408) "a") (data (i32.const 66411) "a") (data (i32.const 66414) "a") (data (i32.const 66417) "a") (data (i32.const 66420) "a") (data (i32.const 66423) "a") (data (i32.const 66426) "a") (data (i32.const 66429) "a") (data (i32.const 66432) "a") (data (i32.const 66435) "a") (data (i32.const 66438) "a") (data (i32.const 66441) "a") (data (i32.const 66444) "a") (data (i32.const 66447) "a") (data (i32.const 66450) "a") (data (i32.const 66453) "a") (data (i32.const 66456) "a") (data (i32.const 66459) "a") (data (i32.const 66462) "a") (data (i32.const 66465) "a") (data (i32.const 66468) "a") (data (i32.const 66471) "a") (data (i32.const 66474) "a") (data (i32.const 66477) "a") (data (i32.const 66480) "a") (data (i32.const 66483) "a") (data (i32.const 66486) "a") (data (i32.const 66489) "a") (data (i32.const 66492) "a") (data (i32.const 66495) "a") (data (i32.const 66498) "a") (data (i32.const 66501) "a") (data (i32.const 66504) "a") (data (i32.const 66507) "a") (data (i32.const 66510) "a") (data (i32.const 66513) "a") (data (i32.const 66516) "a") (data (i32.const 66519) "a") (data (i32.const 66522) "a") (data (i32.const 66525) "a") (data (i32.const 66528) "a") (data (i32.const 66531) "a") (data (i32.const 66534) "a") (data (i32.const 66537) "a") (data (i32.const 66540) "a") (data (i32.const 66543) "a") (data (i32.const 66546) "a") (data (i32.const 66549) "a") (data (i32.const 66552) "a") (data (i32.const 66555) "a") (data (i32.const 66558) "a") (data (i32.const 66561) "a") (data (i32.const 66564) "a") (data (i32.const 66567) "a") (data (i32.const 66570) "a") (data (i32.const 66573) "a") (data (i32.const 66576) "a") (data (i32.const 66579) "a") (data (i32.const 66582) "a") (data (i32.const 66585) "a") (data (i32.const 66588) "a") (data (i32.const 66591) "a") (data (i32.const 66594) "a") (data (i32.const 66597) "a") (data (i32.const 66600) "a") (data (i32.const 66603) "a") (data (i32.const 66606) "a") (data (i32.const 66609) "a") (data (i32.const 66612) "a") (data (i32.const 66615) "a") (data (i32.const 66618) "a") (data (i32.const 66621) "a") (data (i32.const 66624) "a") (data (i32.const 66627) "a") (data (i32.const 66630) "a") (data (i32.const 66633) "a") (data (i32.const 66636) "a") (data (i32.const 66639) "a") (data (i32.const 66642) "a") (data (i32.const 66645) "a") (data (i32.const 66648) "a") (data (i32.const 66651) "a") (data (i32.const 66654) "a") (data (i32.const 66657) "a") (data (i32.const 66660) "a") (data (i32.const 66663) "a") (data (i32.const 66666) "a") (data (i32.const 66669) "a") (data (i32.const 66672) "a") (data (i32.const 66675) "a") (data (i32.const 66678) "a") (data (i32.const 66681) "a") (data (i32.const 66684) "a") (data (i32.const 66687) "a") (data (i32.const 66690) "a") (data (i32.const 66693) "a") (data (i32.const 66696) "a") (data (i32.const 66699) "a") (data (i32.const 66702) "a") (data (i32.const 66705) "a") (data (i32.const 66708) "a") (data (i32.const 66711) "a") (data (i32.const 66714) "a") (data (i32.const 66717) "a") (data (i32.const 66720) "a") (data (i32.const 66723) "a") (data (i32.const 66726) "a") (data (i32.const 66729) "a") (data (i32.const 66732) "a") (data (i32.const 66735) "a") (data (i32.const 66738) "a") (data (i32.const 66741) "a") (data (i32.const 66744) "a") (data (i32.const 66747) "a") (data (i32.const 66750) "a") (data (i32.const 66753) "a") (data (i32.const 66756) "a") (data (i32.const 66759) "a") (data (i32.const 66762) "a") (data (i32.const 66765) "a") (data (i32.const 66768) "a") (data (i32.const 66771) "a") (data (i32.const 66774) "a") (data (i32.const 66777) "a") (data (i32.const 66780) "a") (data (i32.const 66783) "a") (data (i32.const 66786) "a") (data (i32.const 66789) "a") (data (i32.const 66792) "a") (data (i32.const 66795) "a") (data (i32.const 66798) "a") (data (i32.const 66801) "a") (data (i32.const 66804) "a") (data (i32.const 66807) "a") (data (i32.const 66810) "a") (data (i32.const 66813) "a") (data (i32.const 66816) "a") (data (i32.const 66819) "a") (data (i32.const 66822) "a") (data (i32.const 66825) "a") (data (i32.const 66828) "a") (data (i32.const 66831) "a") (data (i32.const 66834) "a") (data (i32.const 66837) "a") (data (i32.const 66840) "a") (data (i32.const 66843) "a") (data (i32.const 66846) "a") (data (i32.const 66849) "a") (data (i32.const 66852) "a") (data (i32.const 66855) "a") (data (i32.const 66858) "a") (data (i32.const 66861) "a") (data (i32.const 66864) "a") (data (i32.const 66867) "a") (data (i32.const 66870) "a") (data (i32.const 66873) "a") (data (i32.const 66876) "a") (data (i32.const 66879) "a") (data (i32.const 66882) "a") (data (i32.const 66885) "a") (data (i32.const 66888) "a") (data (i32.const 66891) "a") (data (i32.const 66894) "a") (data (i32.const 66897) "a") (data (i32.const 66900) "a") (data (i32.const 66903) "a") (data (i32.const 66906) "a") (data (i32.const 66909) "a") (data (i32.const 66912) "a") (data (i32.const 66915) "a") (data (i32.const 66918) "a") (data (i32.const 66921) "a") (data (i32.const 66924) "a") (data (i32.const 66927) "a") (data (i32.const 66930) "a") (data (i32.const 66933) "a") (data (i32.const 66936) "a") (data (i32.const 66939) "a") (data (i32.const 66942) "a") (data (i32.const 66945) "a") (data (i32.const 66948) "a") (data (i32.const 66951) "a") (data (i32.const 66954) "a") (data (i32.const 66957) "a") (data (i32.const 66960) "a") (data (i32.const 66963) "a") (data (i32.const 66966) "a") (data (i32.const 66969) "a") (data (i32.const 66972) "a") (data (i32.const 66975) "a") (data (i32.const 66978) "a") (data (i32.const 66981) "a") (data (i32.const 66984) "a") (data (i32.const 66987) "a") (data (i32.const 66990) "a") (data (i32.const 66993) "a") (data (i32.const 66996) "a") (data (i32.const 66999) "a") (data (i32.const 67002) "a") (data (i32.const 67005) "a") (data (i32.const 67008) "a") (data (i32.const 67011) "a") (data (i32.const 67014) "a") (data (i32.const 67017) "a") (data (i32.const 67020) "a") (data (i32.const 67023) "a") (data (i32.const 67026) "a") (data (i32.const 67029) "a") (data (i32.const 67032) "a") (data (i32.const 67035) "a") (data (i32.const 67038) "a") (data (i32.const 67041) "a") (data (i32.const 67044) "a") (data (i32.const 67047) "a") (data (i32.const 67050) "a") (data (i32.const 67053) "a") (data (i32.const 67056) "a") (data (i32.const 67059) "a") (data (i32.const 67062) "a") (data (i32.const 67065) "a") (data (i32.const 67068) "a") (data (i32.const 67071) "a") (data (i32.const 67074) "a") (data (i32.const 67077) "a") (data (i32.const 67080) "a") (data (i32.const 67083) "a") (data (i32.const 67086) "a") (data (i32.const 67089) "a") (data (i32.const 67092) "a") (data (i32.const 67095) "a") (data (i32.const 67098) "a") (data (i32.const 67101) "a") (data (i32.const 67104) "a") (data (i32.const 67107) "a") (data (i32.const 67110) "a") (data (i32.const 67113) "a") (data (i32.const 67116) "a") (data (i32.const 67119) "a") (data (i32.const 67122) "a") (data (i32.const 67125) "a") (data (i32.const 67128) "a") (data (i32.const 67131) "a") (data (i32.const 67134) "a") (data (i32.const 67137) "a") (data (i32.const 67140) "a") (data (i32.const 67143) "a") (data (i32.const 67146) "a") (data (i32.const 67149) "a") (data (i32.const 67152) "a") (data (i32.const 67155) "a") (data (i32.const 67158) "a") (data (i32.const 67161) "a") (data (i32.const 67164) "a") (data (i32.const 67167) "a") (data (i32.const 67170) "a") (data (i32.const 67173) "a") (data (i32.const 67176) "a") (data (i32.const 67179) "a") (data (i32.const 67182) "a") (data (i32.const 67185) "a") (data (i32.const 67188) "a") (data (i32.const 67191) "a") (data (i32.const 67194) "a") (data (i32.const 67197) "a") (data (i32.const 67200) "a") (data (i32.const 67203) "a") (data (i32.const 67206) "a") (data (i32.const 67209) "a") (data (i32.const 67212) "a") (data (i32.const 67215) "a") (data (i32.const 67218) "a") (data (i32.const 67221) "a") (data (i32.const 67224) "a") (data (i32.const 67227) "a") (data (i32.const 67230) "a") (data (i32.const 67233) "a") (data (i32.const 67236) "a") (data (i32.const 67239) "a") (data (i32.const 67242) "a") (data (i32.const 67245) "a") (data (i32.const 67248) "a") (data (i32.const 67251) "a") (data (i32.const 67254) "a") (data (i32.const 67257) "a") (data (i32.const 67260) "a") (data (i32.const 67263) "a") (data (i32.const 67266) "a") (data (i32.const 67269) "a") (data (i32.const 67272) "a") (data (i32.const 67275) "a") (data (i32.const 67278) "a") (data (i32.const 67281) "a") (data (i32.const 67284) "a") (data (i32.const 67287) "a") (data (i32.const 67290) "a") (data (i32.const 67293) "a") (data (i32.const 67296) "a") (data (i32.const 67299) "a") (data (i32.const 67302) "a") (data (i32.const 67305) "a") (data (i32.const 67308) "a") (data (i32.const 67311) "a") (data (i32.const 67314) "a") (data (i32.const 67317) "a") (data (i32.const 67320) "a") (data (i32.const 67323) "a") (data (i32.const 67326) "a") (data (i32.const 67329) "a") (data (i32.const 67332) "a") (data (i32.const 67335) "a") (data (i32.const 67338) "a") (data (i32.const 67341) "a") (data (i32.const 67344) "a") (data (i32.const 67347) "a") (data (i32.const 67350) "a") (data (i32.const 67353) "a") (data (i32.const 67356) "a") (data (i32.const 67359) "a") (data (i32.const 67362) "a") (data (i32.const 67365) "a") (data (i32.const 67368) "a") (data (i32.const 67371) "a") (data (i32.const 67374) "a") (data (i32.const 67377) "a") (data (i32.const 67380) "a") (data (i32.const 67383) "a") (data (i32.const 67386) "a") (data (i32.const 67389) "a") (data (i32.const 67392) "a") (data (i32.const 67395) "a") (data (i32.const 67398) "a") (data (i32.const 67401) "a") (data (i32.const 67404) "a") (data (i32.const 67407) "a") (data (i32.const 67410) "a") (data (i32.const 67413) "a") (data (i32.const 67416) "a") (data (i32.const 67419) "a") (data (i32.const 67422) "a") (data (i32.const 67425) "a") (data (i32.const 67428) "a") (data (i32.const 67431) "a") (data (i32.const 67434) "a") (data (i32.const 67437) "a") (data (i32.const 67440) "a") (data (i32.const 67443) "a") (data (i32.const 67446) "a") (data (i32.const 67449) "a") (data (i32.const 67452) "a") (data (i32.const 67455) "a") (data (i32.const 67458) "a") (data (i32.const 67461) "a") (data (i32.const 67464) "a") (data (i32.const 67467) "a") (data (i32.const 67470) "a") (data (i32.const 67473) "a") (data (i32.const 67476) "a") (data (i32.const 67479) "a") (data (i32.const 67482) "a") (data (i32.const 67485) "a") (data (i32.const 67488) "a") (data (i32.const 67491) "a") (data (i32.const 67494) "a") (data (i32.const 67497) "a") (data (i32.const 67500) "a") (data (i32.const 67503) "a") (data (i32.const 67506) "a") (data (i32.const 67509) "a") (data (i32.const 67512) "a") (data (i32.const 67515) "a") (data (i32.const 67518) "a") (data (i32.const 67521) "a") (data (i32.const 67524) "a") (data (i32.const 67527) "a") (data (i32.const 67530) "a") (data (i32.const 67533) "a") (data (i32.const 67536) "a") (data (i32.const 67539) "a") (data (i32.const 67542) "a") (data (i32.const 67545) "a") (data (i32.const 67548) "a") (data (i32.const 67551) "a") (data (i32.const 67554) "a") (data (i32.const 67557) "a") (data (i32.const 67560) "a") (data (i32.const 67563) "a") (data (i32.const 67566) "a") (data (i32.const 67569) "a") (data (i32.const 67572) "a") (data (i32.const 67575) "a") (data (i32.const 67578) "a") (data (i32.const 67581) "a") (data (i32.const 67584) "a") (data (i32.const 67587) "a") (data (i32.const 67590) "a") (data (i32.const 67593) "a") (data (i32.const 67596) "a") (data (i32.const 67599) "a") (data (i32.const 67602) "a") (data (i32.const 67605) "a") (data (i32.const 67608) "a") (data (i32.const 67611) "a") (data (i32.const 67614) "a") (data (i32.const 67617) "a") (data (i32.const 67620) "a") (data (i32.const 67623) "a") (data (i32.const 67626) "a") (data (i32.const 67629) "a") (data (i32.const 67632) "a") (data (i32.const 67635) "a") (data (i32.const 67638) "a") (data (i32.const 67641) "a") (data (i32.const 67644) "a") (data (i32.const 67647) "a") (data (i32.const 67650) "a") (data (i32.const 67653) "a") (data (i32.const 67656) "a") (data (i32.const 67659) "a") (data (i32.const 67662) "a") (data (i32.const 67665) "a") (data (i32.const 67668) "a") (data (i32.const 67671) "a") (data (i32.const 67674) "a") (data (i32.const 67677) "a") (data (i32.const 67680) "a") (data (i32.const 67683) "a") (data (i32.const 67686) "a") (data (i32.const 67689) "a") (data (i32.const 67692) "a") (data (i32.const 67695) "a") (data (i32.const 67698) "a") (data (i32.const 67701) "a") (data (i32.const 67704) "a") (data (i32.const 67707) "a") (data (i32.const 67710) "a") (data (i32.const 67713) "a") (data (i32.const 67716) "a") (data (i32.const 67719) "a") (data (i32.const 67722) "a") (data (i32.const 67725) "a") (data (i32.const 67728) "a") (data (i32.const 67731) "a") (data (i32.const 67734) "a") (data (i32.const 67737) "a") (data (i32.const 67740) "a") (data (i32.const 67743) "a") (data (i32.const 67746) "a") (data (i32.const 67749) "a") (data (i32.const 67752) "a") (data (i32.const 67755) "a") (data (i32.const 67758) "a") (data (i32.const 67761) "a") (data (i32.const 67764) "a") (data (i32.const 67767) "a") (data (i32.const 67770) "a") (data (i32.const 67773) "a") (data (i32.const 67776) "a") (data (i32.const 67779) "a") (data (i32.const 67782) "a") (data (i32.const 67785) "a") (data (i32.const 67788) "a") (data (i32.const 67791) "a") (data (i32.const 67794) "a") (data (i32.const 67797) "a") (data (i32.const 67800) "a") (data (i32.const 67803) "a") (data (i32.const 67806) "a") (data (i32.const 67809) "a") (data (i32.const 67812) "a") (data (i32.const 67815) "a") (data (i32.const 67818) "a") (data (i32.const 67821) "a") (data (i32.const 67824) "a") (data (i32.const 67827) "a") (data (i32.const 67830) "a") (data (i32.const 67833) "a") (data (i32.const 67836) "a") (data (i32.const 67839) "a") (data (i32.const 67842) "a") (data (i32.const 67845) "a") (data (i32.const 67848) "a") (data (i32.const 67851) "a") (data (i32.const 67854) "a") (data (i32.const 67857) "a") (data (i32.const 67860) "a") (data (i32.const 67863) "a") (data (i32.const 67866) "a") (data (i32.const 67869) "a") (data (i32.const 67872) "a") (data (i32.const 67875) "a") (data (i32.const 67878) "a") (data (i32.const 67881) "a") (data (i32.const 67884) "a") (data (i32.const 67887) "a") (data (i32.const 67890) "a") (data (i32.const 67893) "a") (data (i32.const 67896) "a") (data (i32.const 67899) "a") (data (i32.const 67902) "a") (data (i32.const 67905) "a") (data (i32.const 67908) "a") (data (i32.const 67911) "a") (data (i32.const 67914) "a") (data (i32.const 67917) "a") (data (i32.const 67920) "a") (data (i32.const 67923) "a") (data (i32.const 67926) "a") (data (i32.const 67929) "a") (data (i32.const 67932) "a") (data (i32.const 67935) "a") (data (i32.const 67938) "a") (data (i32.const 67941) "a") (data (i32.const 67944) "a") (data (i32.const 67947) "a") (data (i32.const 67950) "a") (data (i32.const 67953) "a") (data (i32.const 67956) "a") (data (i32.const 67959) "a") (data (i32.const 67962) "a") (data (i32.const 67965) "a") (data (i32.const 67968) "a") (data (i32.const 67971) "a") (data (i32.const 67974) "a") (data (i32.const 67977) "a") (data (i32.const 67980) "a") (data (i32.const 67983) "a") (data (i32.const 67986) "a") (data (i32.const 67989) "a") (data (i32.const 67992) "a") (data (i32.const 67995) "a") (data (i32.const 67998) "a") (data (i32.const 68001) "a") (data (i32.const 68004) "a") (data (i32.const 68007) "a") (data (i32.const 68010) "a") (data (i32.const 68013) "a") (data (i32.const 68016) "a") (data (i32.const 68019) "a") (data (i32.const 68022) "a") (data (i32.const 68025) "a") (data (i32.const 68028) "a") (data (i32.const 68031) "a") (data (i32.const 68034) "a") (data (i32.const 68037) "a") (data (i32.const 68040) "a") (data (i32.const 68043) "a") (data (i32.const 68046) "a") (data (i32.const 68049) "a") (data (i32.const 68052) "a") (data (i32.const 68055) "a") (data (i32.const 68058) "a") (data (i32.const 68061) "a") (data (i32.const 68064) "a") (data (i32.const 68067) "a") (data (i32.const 68070) "a") (data (i32.const 68073) "a") (data (i32.const 68076) "a") (data (i32.const 68079) "a") (data (i32.const 68082) "a") (data (i32.const 68085) "a") (data (i32.const 68088) "a") (data (i32.const 68091) "a") (data (i32.const 68094) "a") (data (i32.const 68097) "a") (data (i32.const 68100) "a") (data (i32.const 68103) "a") (data (i32.const 68106) "a") (data (i32.const 68109) "a") (data (i32.const 68112) "a") (data (i32.const 68115) "a") (data (i32.const 68118) "a") (data (i32.const 68121) "a") (data (i32.const 68124) "a") (data (i32.const 68127) "a") (data (i32.const 68130) "a") (data (i32.const 68133) "a") (data (i32.const 68136) "a") (data (i32.const 68139) "a") (data (i32.const 68142) "a") (data (i32.const 68145) "a") (data (i32.const 68148) "a") (data (i32.const 68151) "a") (data (i32.const 68154) "a") (data (i32.const 68157) "a") (data (i32.const 68160) "a") (data (i32.const 68163) "a") (data (i32.const 68166) "a") (data (i32.const 68169) "a") (data (i32.const 68172) "a") (data (i32.const 68175) "a") (data (i32.const 68178) "a") (data (i32.const 68181) "a") (data (i32.const 68184) "a") (data (i32.const 68187) "a") (data (i32.const 68190) "a") (data (i32.const 68193) "a") (data (i32.const 68196) "a") (data (i32.const 68199) "a") (data (i32.const 68202) "a") (data (i32.const 68205) "a") (data (i32.const 68208) "a") (data (i32.const 68211) "a") (data (i32.const 68214) "a") (data (i32.const 68217) "a") (data (i32.const 68220) "a") (data (i32.const 68223) "a") (data (i32.const 68226) "a") (data (i32.const 68229) "a") (data (i32.const 68232) "a") (data (i32.const 68235) "a") (data (i32.const 68238) "a") (data (i32.const 68241) "a") (data (i32.const 68244) "a") (data (i32.const 68247) "a") (data (i32.const 68250) "a") (data (i32.const 68253) "a") (data (i32.const 68256) "a") (data (i32.const 68259) "a") (data (i32.const 68262) "a") (data (i32.const 68265) "a") (data (i32.const 68268) "a") (data (i32.const 68271) "a") (data (i32.const 68274) "a") (data (i32.const 68277) "a") (data (i32.const 68280) "a") (data (i32.const 68283) "a") (data (i32.const 68286) "a") (data (i32.const 68289) "a") (data (i32.const 68292) "a") (data (i32.const 68295) "a") (data (i32.const 68298) "a") (data (i32.const 68301) "a") (data (i32.const 68304) "a") (data (i32.const 68307) "a") (data (i32.const 68310) "a") (data (i32.const 68313) "a") (data (i32.const 68316) "a") (data (i32.const 68319) "a") (data (i32.const 68322) "a") (data (i32.const 68325) "a") (data (i32.const 68328) "a") (data (i32.const 68331) "a") (data (i32.const 68334) "a") (data (i32.const 68337) "a") (data (i32.const 68340) "a") (data (i32.const 68343) "a") (data (i32.const 68346) "a") (data (i32.const 68349) "a") (data (i32.const 68352) "a") (data (i32.const 68355) "a") (data (i32.const 68358) "a") (data (i32.const 68361) "a") (data (i32.const 68364) "a") (data (i32.const 68367) "a") (data (i32.const 68370) "a") (data (i32.const 68373) "a") (data (i32.const 68376) "a") (data (i32.const 68379) "a") (data (i32.const 68382) "a") (data (i32.const 68385) "a") (data (i32.const 68388) "a") (data (i32.const 68391) "a") (data (i32.const 68394) "a") (data (i32.const 68397) "a") (data (i32.const 68400) "a") (data (i32.const 68403) "a") (data (i32.const 68406) "a") (data (i32.const 68409) "a") (data (i32.const 68412) "a") (data (i32.const 68415) "a") (data (i32.const 68418) "a") (data (i32.const 68421) "a") (data (i32.const 68424) "a") (data (i32.const 68427) "a") (data (i32.const 68430) "a") (data (i32.const 68433) "a") (data (i32.const 68436) "a") (data (i32.const 68439) "a") (data (i32.const 68442) "a") (data (i32.const 68445) "a") (data (i32.const 68448) "a") (data (i32.const 68451) "a") (data (i32.const 68454) "a") (data (i32.const 68457) "a") (data (i32.const 68460) "a") (data (i32.const 68463) "a") (data (i32.const 68466) "a") (data (i32.const 68469) "a") (data (i32.const 68472) "a") (data (i32.const 68475) "a") (data (i32.const 68478) "a") (data (i32.const 68481) "a") (data (i32.const 68484) "a") (data (i32.const 68487) "a") (data (i32.const 68490) "a") (data (i32.const 68493) "a") (data (i32.const 68496) "a") (data (i32.const 68499) "a") (data (i32.const 68502) "a") (data (i32.const 68505) "a") (data (i32.const 68508) "a") (data (i32.const 68511) "a") (data (i32.const 68514) "a") (data (i32.const 68517) "a") (data (i32.const 68520) "a") (data (i32.const 68523) "a") (data (i32.const 68526) "a") (data (i32.const 68529) "a") (data (i32.const 68532) "a") (data (i32.const 68535) "a") (data (i32.const 68538) "a") (data (i32.const 68541) "a") (data (i32.const 68544) "a") (data (i32.const 68547) "a") (data (i32.const 68550) "a") (data (i32.const 68553) "a") (data (i32.const 68556) "a") (data (i32.const 68559) "a") (data (i32.const 68562) "a") (data (i32.const 68565) "a") (data (i32.const 68568) "a") (data (i32.const 68571) "a") (data (i32.const 68574) "a") (data (i32.const 68577) "a") (data (i32.const 68580) "a") (data (i32.const 68583) "a") (data (i32.const 68586) "a") (data (i32.const 68589) "a") (data (i32.const 68592) "a") (data (i32.const 68595) "a") (data (i32.const 68598) "a") (data (i32.const 68601) "a") (data (i32.const 68604) "a") (data (i32.const 68607) "a") (data (i32.const 68610) "a") (data (i32.const 68613) "a") (data (i32.const 68616) "a") (data (i32.const 68619) "a") (data (i32.const 68622) "a") (data (i32.const 68625) "a") (data (i32.const 68628) "a") (data (i32.const 68631) "a") (data (i32.const 68634) "a") (data (i32.const 68637) "a") (data (i32.const 68640) "a") (data (i32.const 68643) "a") (data (i32.const 68646) "a") (data (i32.const 68649) "a") (data (i32.const 68652) "a") (data (i32.const 68655) "a") (data (i32.const 68658) "a") (data (i32.const 68661) "a") (data (i32.const 68664) "a") (data (i32.const 68667) "a") (data (i32.const 68670) "a") (data (i32.const 68673) "a") (data (i32.const 68676) "a") (data (i32.const 68679) "a") (data (i32.const 68682) "a") (data (i32.const 68685) "a") (data (i32.const 68688) "a") (data (i32.const 68691) "a") (data (i32.const 68694) "a") (data (i32.const 68697) "a") (data (i32.const 68700) "a") (data (i32.const 68703) "a") (data (i32.const 68706) "a") (data (i32.const 68709) "a") (data (i32.const 68712) "a") (data (i32.const 68715) "a") (data (i32.const 68718) "a") (data (i32.const 68721) "a") (data (i32.const 68724) "a") (data (i32.const 68727) "a") (data (i32.const 68730) "a") (data (i32.const 68733) "a") (data (i32.const 68736) "a") (data (i32.const 68739) "a") (data (i32.const 68742) "a") (data (i32.const 68745) "a") (data (i32.const 68748) "a") (data (i32.const 68751) "a") (data (i32.const 68754) "a") (data (i32.const 68757) "a") (data (i32.const 68760) "a") (data (i32.const 68763) "a") (data (i32.const 68766) "a") (data (i32.const 68769) "a") (data (i32.const 68772) "a") (data (i32.const 68775) "a") (data (i32.const 68778) "a") (data (i32.const 68781) "a") (data (i32.const 68784) "a") (data (i32.const 68787) "a") (data (i32.const 68790) "a") (data (i32.const 68793) "a") (data (i32.const 68796) "a") (data (i32.const 68799) "a") (data (i32.const 68802) "a") (data (i32.const 68805) "a") (data (i32.const 68808) "a") (data (i32.const 68811) "a") (data (i32.const 68814) "a") (data (i32.const 68817) "a") (data (i32.const 68820) "a") (data (i32.const 68823) "a") (data (i32.const 68826) "a") (data (i32.const 68829) "a") (data (i32.const 68832) "a") (data (i32.const 68835) "a") (data (i32.const 68838) "a") (data (i32.const 68841) "a") (data (i32.const 68844) "a") (data (i32.const 68847) "a") (data (i32.const 68850) "a") (data (i32.const 68853) "a") (data (i32.const 68856) "a") (data (i32.const 68859) "a") (data (i32.const 68862) "a") (data (i32.const 68865) "a") (data (i32.const 68868) "a") (data (i32.const 68871) "a") (data (i32.const 68874) "a") (data (i32.const 68877) "a") (data (i32.const 68880) "a") (data (i32.const 68883) "a") (data (i32.const 68886) "a") (data (i32.const 68889) "a") (data (i32.const 68892) "a") (data (i32.const 68895) "a") (data (i32.const 68898) "a") (data (i32.const 68901) "a") (data (i32.const 68904) "a") (data (i32.const 68907) "a") (data (i32.const 68910) "a") (data (i32.const 68913) "a") (data (i32.const 68916) "a") (data (i32.const 68919) "a") (data (i32.const 68922) "a") (data (i32.const 68925) "a") (data (i32.const 68928) "a") (data (i32.const 68931) "a") (data (i32.const 68934) "a") (data (i32.const 68937) "a") (data (i32.const 68940) "a") (data (i32.const 68943) "a") (data (i32.const 68946) "a") (data (i32.const 68949) "a") (data (i32.const 68952) "a") (data (i32.const 68955) "a") (data (i32.const 68958) "a") (data (i32.const 68961) "a") (data (i32.const 68964) "a") (data (i32.const 68967) "a") (data (i32.const 68970) "a") (data (i32.const 68973) "a") (data (i32.const 68976) "a") (data (i32.const 68979) "a") (data (i32.const 68982) "a") (data (i32.const 68985) "a") (data (i32.const 68988) "a") (data (i32.const 68991) "a") (data (i32.const 68994) "a") (data (i32.const 68997) "a") (data (i32.const 69000) "a") (data (i32.const 69003) "a") (data (i32.const 69006) "a") (data (i32.const 69009) "a") (data (i32.const 69012) "a") (data (i32.const 69015) "a") (data (i32.const 69018) "a") (data (i32.const 69021) "a") (data (i32.const 69024) "a") (data (i32.const 69027) "a") (data (i32.const 69030) "a") (data (i32.const 69033) "a") (data (i32.const 69036) "a") (data (i32.const 69039) "a") (data (i32.const 69042) "a") (data (i32.const 69045) "a") (data (i32.const 69048) "a") (data (i32.const 69051) "a") (data (i32.const 69054) "a") (data (i32.const 69057) "a") (data (i32.const 69060) "a") (data (i32.const 69063) "a") (data (i32.const 69066) "a") (data (i32.const 69069) "a") (data (i32.const 69072) "a") (data (i32.const 69075) "a") (data (i32.const 69078) "a") (data (i32.const 69081) "a") (data (i32.const 69084) "a") (data (i32.const 69087) "a") (data (i32.const 69090) "a") (data (i32.const 69093) "a") (data (i32.const 69096) "a") (data (i32.const 69099) "a") (data (i32.const 69102) "a") (data (i32.const 69105) "a") (data (i32.const 69108) "a") (data (i32.const 69111) "a") (data (i32.const 69114) "a") (data (i32.const 69117) "a") (data (i32.const 69120) "a") (data (i32.const 69123) "a") (data (i32.const 69126) "a") (data (i32.const 69129) "a") (data (i32.const 69132) "a") (data (i32.const 69135) "a") (data (i32.const 69138) "a") (data (i32.const 69141) "a") (data (i32.const 69144) "a") (data (i32.const 69147) "a") (data (i32.const 69150) "a") (data (i32.const 69153) "a") (data (i32.const 69156) "a") (data (i32.const 69159) "a") (data (i32.const 69162) "a") (data (i32.const 69165) "a") (data (i32.const 69168) "a") (data (i32.const 69171) "a") (data (i32.const 69174) "a") (data (i32.const 69177) "a") (data (i32.const 69180) "a") (data (i32.const 69183) "a") (data (i32.const 69186) "a") (data (i32.const 69189) "a") (data (i32.const 69192) "a") (data (i32.const 69195) "a") (data (i32.const 69198) "a") (data (i32.const 69201) "a") (data (i32.const 69204) "a") (data (i32.const 69207) "a") (data (i32.const 69210) "a") (data (i32.const 69213) "a") (data (i32.const 69216) "a") (data (i32.const 69219) "a") (data (i32.const 69222) "a") (data (i32.const 69225) "a") (data (i32.const 69228) "a") (data (i32.const 69231) "a") (data (i32.const 69234) "a") (data (i32.const 69237) "a") (data (i32.const 69240) "a") (data (i32.const 69243) "a") (data (i32.const 69246) "a") (data (i32.const 69249) "a") (data (i32.const 69252) "a") (data (i32.const 69255) "a") (data (i32.const 69258) "a") (data (i32.const 69261) "a") (data (i32.const 69264) "a") (data (i32.const 69267) "a") (data (i32.const 69270) "a") (data (i32.const 69273) "a") (data (i32.const 69276) "a") (data (i32.const 69279) "a") (data (i32.const 69282) "a") (data (i32.const 69285) "a") (data (i32.const 69288) "a") (data (i32.const 69291) "a") (data (i32.const 69294) "a") (data (i32.const 69297) "a") (data (i32.const 69300) "a") (data (i32.const 69303) "a") (data (i32.const 69306) "a") (data (i32.const 69309) "a") (data (i32.const 69312) "a") (data (i32.const 69315) "a") (data (i32.const 69318) "a") (data (i32.const 69321) "a") (data (i32.const 69324) "a") (data (i32.const 69327) "a") (data (i32.const 69330) "a") (data (i32.const 69333) "a") (data (i32.const 69336) "a") (data (i32.const 69339) "a") (data (i32.const 69342) "a") (data (i32.const 69345) "a") (data (i32.const 69348) "a") (data (i32.const 69351) "a") (data (i32.const 69354) "a") (data (i32.const 69357) "a") (data (i32.const 69360) "a") (data (i32.const 69363) "a") (data (i32.const 69366) "a") (data (i32.const 69369) "a") (data (i32.const 69372) "a") (data (i32.const 69375) "a") (data (i32.const 69378) "a") (data (i32.const 69381) "a") (data (i32.const 69384) "a") (data (i32.const 69387) "a") (data (i32.const 69390) "a") (data (i32.const 69393) "a") (data (i32.const 69396) "a") (data (i32.const 69399) "a") (data (i32.const 69402) "a") (data (i32.const 69405) "a") (data (i32.const 69408) "a") (data (i32.const 69411) "a") (data (i32.const 69414) "a") (data (i32.const 69417) "a") (data (i32.const 69420) "a") (data (i32.const 69423) "a") (data (i32.const 69426) "a") (data (i32.const 69429) "a") (data (i32.const 69432) "a") (data (i32.const 69435) "a") (data (i32.const 69438) "a") (data (i32.const 69441) "a") (data (i32.const 69444) "a") (data (i32.const 69447) "a") (data (i32.const 69450) "a") (data (i32.const 69453) "a") (data (i32.const 69456) "a") (data (i32.const 69459) "a") (data (i32.const 69462) "a") (data (i32.const 69465) "a") (data (i32.const 69468) "a") (data (i32.const 69471) "a") (data (i32.const 69474) "a") (data (i32.const 69477) "a") (data (i32.const 69480) "a") (data (i32.const 69483) "a") (data (i32.const 69486) "a") (data (i32.const 69489) "a") (data (i32.const 69492) "a") (data (i32.const 69495) "a") (data (i32.const 69498) "a") (data (i32.const 69501) "a") (data (i32.const 69504) "a") (data (i32.const 69507) "a") (data (i32.const 69510) "a") (data (i32.const 69513) "a") (data (i32.const 69516) "a") (data (i32.const 69519) "a") (data (i32.const 69522) "a") (data (i32.const 69525) "a") (data (i32.const 69528) "a") (data (i32.const 69531) "a") (data (i32.const 69534) "a") (data (i32.const 69537) "a") (data (i32.const 69540) "a") (data (i32.const 69543) "a") (data (i32.const 69546) "a") (data (i32.const 69549) "a") (data (i32.const 69552) "a") (data (i32.const 69555) "a") (data (i32.const 69558) "a") (data (i32.const 69561) "a") (data (i32.const 69564) "a") (data (i32.const 69567) "a") (data (i32.const 69570) "a") (data (i32.const 69573) "a") (data (i32.const 69576) "a") (data (i32.const 69579) "a") (data (i32.const 69582) "a") (data (i32.const 69585) "a") (data (i32.const 69588) "a") (data (i32.const 69591) "a") (data (i32.const 69594) "a") (data (i32.const 69597) "a") (data (i32.const 69600) "a") (data (i32.const 69603) "a") (data (i32.const 69606) "a") (data (i32.const 69609) "a") (data (i32.const 69612) "a") (data (i32.const 69615) "a") (data (i32.const 69618) "a") (data (i32.const 69621) "a") (data (i32.const 69624) "a") (data (i32.const 69627) "a") (data (i32.const 69630) "a") (data (i32.const 69633) "a") (data (i32.const 69636) "a") (data (i32.const 69639) "a") (data (i32.const 69642) "a") (data (i32.const 69645) "a") (data (i32.const 69648) "a") (data (i32.const 69651) "a") (data (i32.const 69654) "a") (data (i32.const 69657) "a") (data (i32.const 69660) "a") (data (i32.const 69663) "a") (data (i32.const 69666) "a") (data (i32.const 69669) "a") (data (i32.const 69672) "a") (data (i32.const 69675) "a") (data (i32.const 69678) "a") (data (i32.const 69681) "a") (data (i32.const 69684) "a") (data (i32.const 69687) "a") (data (i32.const 69690) "a") (data (i32.const 69693) "a") (data (i32.const 69696) "a") (data (i32.const 69699) "a") (data (i32.const 69702) "a") (data (i32.const 69705) "a") (data (i32.const 69708) "a") (data (i32.const 69711) "a") (data (i32.const 69714) "a") (data (i32.const 69717) "a") (data (i32.const 69720) "a") (data (i32.const 69723) "a") (data (i32.const 69726) "a") (data (i32.const 69729) "a") (data (i32.const 69732) "a") (data (i32.const 69735) "a") (data (i32.const 69738) "a") (data (i32.const 69741) "a") (data (i32.const 69744) "a") (data (i32.const 69747) "a") (data (i32.const 69750) "a") (data (i32.const 69753) "a") (data (i32.const 69756) "a") (data (i32.const 69759) "a") (data (i32.const 69762) "a") (data (i32.const 69765) "a") (data (i32.const 69768) "a") (data (i32.const 69771) "a") (data (i32.const 69774) "a") (data (i32.const 69777) "a") (data (i32.const 69780) "a") (data (i32.const 69783) "a") (data (i32.const 69786) "a") (data (i32.const 69789) "a") (data (i32.const 69792) "a") (data (i32.const 69795) "a") (data (i32.const 69798) "a") (data (i32.const 69801) "a") (data (i32.const 69804) "a") (data (i32.const 69807) "a") (data (i32.const 69810) "a") (data (i32.const 69813) "a") (data (i32.const 69816) "a") (data (i32.const 69819) "a") (data (i32.const 69822) "a") (data (i32.const 69825) "a") (data (i32.const 69828) "a") (data (i32.const 69831) "a") (data (i32.const 69834) "a") (data (i32.const 69837) "a") (data (i32.const 69840) "a") (data (i32.const 69843) "a") (data (i32.const 69846) "a") (data (i32.const 69849) "a") (data (i32.const 69852) "a") (data (i32.const 69855) "a") (data (i32.const 69858) "a") (data (i32.const 69861) "a") (data (i32.const 69864) "a") (data (i32.const 69867) "a") (data (i32.const 69870) "a") (data (i32.const 69873) "a") (data (i32.const 69876) "a") (data (i32.const 69879) "a") (data (i32.const 69882) "a") (data (i32.const 69885) "a") (data (i32.const 69888) "a") (data (i32.const 69891) "a") (data (i32.const 69894) "a") (data (i32.const 69897) "a") (data (i32.const 69900) "a") (data (i32.const 69903) "a") (data (i32.const 69906) "a") (data (i32.const 69909) "a") (data (i32.const 69912) "a") (data (i32.const 69915) "a") (data (i32.const 69918) "a") (data (i32.const 69921) "a") (data (i32.const 69924) "a") (data (i32.const 69927) "a") (data (i32.const 69930) "a") (data (i32.const 69933) "a") (data (i32.const 69936) "a") (data (i32.const 69939) "a") (data (i32.const 69942) "a") (data (i32.const 69945) "a") (data (i32.const 69948) "a") (data (i32.const 69951) "a") (data (i32.const 69954) "a") (data (i32.const 69957) "a") (data (i32.const 69960) "a") (data (i32.const 69963) "a") (data (i32.const 69966) "a") (data (i32.const 69969) "a") (data (i32.const 69972) "a") (data (i32.const 69975) "a") (data (i32.const 69978) "a") (data (i32.const 69981) "a") (data (i32.const 69984) "a") (data (i32.const 69987) "a") (data (i32.const 69990) "a") (data (i32.const 69993) "a") (data (i32.const 69996) "a") (data (i32.const 69999) "a") (data (i32.const 70002) "a") (data (i32.const 70005) "a") (data (i32.const 70008) "a") (data (i32.const 70011) "a") (data (i32.const 70014) "a") (data (i32.const 70017) "a") (data (i32.const 70020) "a") (data (i32.const 70023) "a") (data (i32.const 70026) "a") (data (i32.const 70029) "a") (data (i32.const 70032) "a") (data (i32.const 70035) "a") (data (i32.const 70038) "a") (data (i32.const 70041) "a") (data (i32.const 70044) "a") (data (i32.const 70047) "a") (data (i32.const 70050) "a") (data (i32.const 70053) "a") (data (i32.const 70056) "a") (data (i32.const 70059) "a") (data (i32.const 70062) "a") (data (i32.const 70065) "a") (data (i32.const 70068) "a") (data (i32.const 70071) "a") (data (i32.const 70074) "a") (data (i32.const 70077) "a") (data (i32.const 70080) "a") (data (i32.const 70083) "a") (data (i32.const 70086) "a") (data (i32.const 70089) "a") (data (i32.const 70092) "a") (data (i32.const 70095) "a") (data (i32.const 70098) "a") (data (i32.const 70101) "a") (data (i32.const 70104) "a") (data (i32.const 70107) "a") (data (i32.const 70110) "a") (data (i32.const 70113) "a") (data (i32.const 70116) "a") (data (i32.const 70119) "a") (data (i32.const 70122) "a") (data (i32.const 70125) "a") (data (i32.const 70128) "a") (data (i32.const 70131) "a") (data (i32.const 70134) "a") (data (i32.const 70137) "a") (data (i32.const 70140) "a") (data (i32.const 70143) "a") (data (i32.const 70146) "a") (data (i32.const 70149) "a") (data (i32.const 70152) "a") (data (i32.const 70155) "a") (data (i32.const 70158) "a") (data (i32.const 70161) "a") (data (i32.const 70164) "a") (data (i32.const 70167) "a") (data (i32.const 70170) "a") (data (i32.const 70173) "a") (data (i32.const 70176) "a") (data (i32.const 70179) "a") (data (i32.const 70182) "a") (data (i32.const 70185) "a") (data (i32.const 70188) "a") (data (i32.const 70191) "a") (data (i32.const 70194) "a") (data (i32.const 70197) "a") (data (i32.const 70200) "a") (data (i32.const 70203) "a") (data (i32.const 70206) "a") (data (i32.const 70209) "a") (data (i32.const 70212) "a") (data (i32.const 70215) "a") (data (i32.const 70218) "a") (data (i32.const 70221) "a") (data (i32.const 70224) "a") (data (i32.const 70227) "a") (data (i32.const 70230) "a") (data (i32.const 70233) "a") (data (i32.const 70236) "a") (data (i32.const 70239) "a") (data (i32.const 70242) "a") (data (i32.const 70245) "a") (data (i32.const 70248) "a") (data (i32.const 70251) "a") (data (i32.const 70254) "a") (data (i32.const 70257) "a") (data (i32.const 70260) "a") (data (i32.const 70263) "a") (data (i32.const 70266) "a") (data (i32.const 70269) "a") (data (i32.const 70272) "a") (data (i32.const 70275) "a") (data (i32.const 70278) "a") (data (i32.const 70281) "a") (data (i32.const 70284) "a") (data (i32.const 70287) "a") (data (i32.const 70290) "a") (data (i32.const 70293) "a") (data (i32.const 70296) "a") (data (i32.const 70299) "a") (data (i32.const 70302) "a") (data (i32.const 70305) "a") (data (i32.const 70308) "a") (data (i32.const 70311) "a") (data (i32.const 70314) "a") (data (i32.const 70317) "a") (data (i32.const 70320) "a") (data (i32.const 70323) "a") (data (i32.const 70326) "a") (data (i32.const 70329) "a") (data (i32.const 70332) "a") (data (i32.const 70335) "a") (data (i32.const 70338) "a") (data (i32.const 70341) "a") (data (i32.const 70344) "a") (data (i32.const 70347) "a") (data (i32.const 70350) "a") (data (i32.const 70353) "a") (data (i32.const 70356) "a") (data (i32.const 70359) "a") (data (i32.const 70362) "a") (data (i32.const 70365) "a") (data (i32.const 70368) "a") (data (i32.const 70371) "a") (data (i32.const 70374) "a") (data (i32.const 70377) "a") (data (i32.const 70380) "a") (data (i32.const 70383) "a") (data (i32.const 70386) "a") (data (i32.const 70389) "a") (data (i32.const 70392) "a") (data (i32.const 70395) "a") (data (i32.const 70398) "a") (data (i32.const 70401) "a") (data (i32.const 70404) "a") (data (i32.const 70407) "a") (data (i32.const 70410) "a") (data (i32.const 70413) "a") (data (i32.const 70416) "a") (data (i32.const 70419) "a") (data (i32.const 70422) "a") (data (i32.const 70425) "a") (data (i32.const 70428) "a") (data (i32.const 70431) "a") (data (i32.const 70434) "a") (data (i32.const 70437) "a") (data (i32.const 70440) "a") (data (i32.const 70443) "a") (data (i32.const 70446) "a") (data (i32.const 70449) "a") (data (i32.const 70452) "a") (data (i32.const 70455) "a") (data (i32.const 70458) "a") (data (i32.const 70461) "a") (data (i32.const 70464) "a") (data (i32.const 70467) "a") (data (i32.const 70470) "a") (data (i32.const 70473) "a") (data (i32.const 70476) "a") (data (i32.const 70479) "a") (data (i32.const 70482) "a") (data (i32.const 70485) "a") (data (i32.const 70488) "a") (data (i32.const 70491) "a") (data (i32.const 70494) "a") (data (i32.const 70497) "a") (data (i32.const 70500) "a") (data (i32.const 70503) "a") (data (i32.const 70506) "a") (data (i32.const 70509) "a") (data (i32.const 70512) "a") (data (i32.const 70515) "a") (data (i32.const 70518) "a") (data (i32.const 70521) "a") (data (i32.const 70524) "a") (data (i32.const 70527) "a") (data (i32.const 70530) "a") (data (i32.const 70533) "a") (data (i32.const 70536) "a") (data (i32.const 70539) "a") (data (i32.const 70542) "a") (data (i32.const 70545) "a") (data (i32.const 70548) "a") (data (i32.const 70551) "a") (data (i32.const 70554) "a") (data (i32.const 70557) "a") (data (i32.const 70560) "a") (data (i32.const 70563) "a") (data (i32.const 70566) "a") (data (i32.const 70569) "a") (data (i32.const 70572) "a") (data (i32.const 70575) "a") (data (i32.const 70578) "a") (data (i32.const 70581) "a") (data (i32.const 70584) "a") (data (i32.const 70587) "a") (data (i32.const 70590) "a") (data (i32.const 70593) "a") (data (i32.const 70596) "a") (data (i32.const 70599) "a") (data (i32.const 70602) "a") (data (i32.const 70605) "a") (data (i32.const 70608) "a") (data (i32.const 70611) "a") (data (i32.const 70614) "a") (data (i32.const 70617) "a") (data (i32.const 70620) "a") (data (i32.const 70623) "a") (data (i32.const 70626) "a") (data (i32.const 70629) "a") (data (i32.const 70632) "a") (data (i32.const 70635) "a") (data (i32.const 70638) "a") (data (i32.const 70641) "a") (data (i32.const 70644) "a") (data (i32.const 70647) "a") (data (i32.const 70650) "a") (data (i32.const 70653) "a") (data (i32.const 70656) "a") (data (i32.const 70659) "a") (data (i32.const 70662) "a") (data (i32.const 70665) "a") (data (i32.const 70668) "a") (data (i32.const 70671) "a") (data (i32.const 70674) "a") (data (i32.const 70677) "a") (data (i32.const 70680) "a") (data (i32.const 70683) "a") (data (i32.const 70686) "a") (data (i32.const 70689) "a") (data (i32.const 70692) "a") (data (i32.const 70695) "a") (data (i32.const 70698) "a") (data (i32.const 70701) "a") (data (i32.const 70704) "a") (data (i32.const 70707) "a") (data (i32.const 70710) "a") (data (i32.const 70713) "a") (data (i32.const 70716) "a") (data (i32.const 70719) "a") (data (i32.const 70722) "a") (data (i32.const 70725) "a") (data (i32.const 70728) "a") (data (i32.const 70731) "a") (data (i32.const 70734) "a") (data (i32.const 70737) "a") (data (i32.const 70740) "a") (data (i32.const 70743) "a") (data (i32.const 70746) "a") (data (i32.const 70749) "a") (data (i32.const 70752) "a") (data (i32.const 70755) "a") (data (i32.const 70758) "a") (data (i32.const 70761) "a") (data (i32.const 70764) "a") (data (i32.const 70767) "a") (data (i32.const 70770) "a") (data (i32.const 70773) "a") (data (i32.const 70776) "a") (data (i32.const 70779) "a") (data (i32.const 70782) "a") (data (i32.const 70785) "a") (data (i32.const 70788) "a") (data (i32.const 70791) "a") (data (i32.const 70794) "a") (data (i32.const 70797) "a") (data (i32.const 70800) "a") (data (i32.const 70803) "a") (data (i32.const 70806) "a") (data (i32.const 70809) "a") (data (i32.const 70812) "a") (data (i32.const 70815) "a") (data (i32.const 70818) "a") (data (i32.const 70821) "a") (data (i32.const 70824) "a") (data (i32.const 70827) "a") (data (i32.const 70830) "a") (data (i32.const 70833) "a") (data (i32.const 70836) "a") (data (i32.const 70839) "a") (data (i32.const 70842) "a") (data (i32.const 70845) "a") (data (i32.const 70848) "a") (data (i32.const 70851) "a") (data (i32.const 70854) "a") (data (i32.const 70857) "a") (data (i32.const 70860) "a") (data (i32.const 70863) "a") (data (i32.const 70866) "a") (data (i32.const 70869) "a") (data (i32.const 70872) "a") (data (i32.const 70875) "a") (data (i32.const 70878) "a") (data (i32.const 70881) "a") (data (i32.const 70884) "a") (data (i32.const 70887) "a") (data (i32.const 70890) "a") (data (i32.const 70893) "a") (data (i32.const 70896) "a") (data (i32.const 70899) "a") (data (i32.const 70902) "a") (data (i32.const 70905) "a") (data (i32.const 70908) "a") (data (i32.const 70911) "a") (data (i32.const 70914) "a") (data (i32.const 70917) "a") (data (i32.const 70920) "a") (data (i32.const 70923) "a") (data (i32.const 70926) "a") (data (i32.const 70929) "a") (data (i32.const 70932) "a") (data (i32.const 70935) "a") (data (i32.const 70938) "a") (data (i32.const 70941) "a") (data (i32.const 70944) "a") (data (i32.const 70947) "a") (data (i32.const 70950) "a") (data (i32.const 70953) "a") (data (i32.const 70956) "a") (data (i32.const 70959) "a") (data (i32.const 70962) "a") (data (i32.const 70965) "a") (data (i32.const 70968) "a") (data (i32.const 70971) "a") (data (i32.const 70974) "a") (data (i32.const 70977) "a") (data (i32.const 70980) "a") (data (i32.const 70983) "a") (data (i32.const 70986) "a") (data (i32.const 70989) "a") (data (i32.const 70992) "a") (data (i32.const 70995) "a") (data (i32.const 70998) "a") (data (i32.const 71001) "a") (data (i32.const 71004) "a") (data (i32.const 71007) "a") (data (i32.const 71010) "a") (data (i32.const 71013) "a") (data (i32.const 71016) "a") (data (i32.const 71019) "a") (data (i32.const 71022) "a") (data (i32.const 71025) "a") (data (i32.const 71028) "a") (data (i32.const 71031) "a") (data (i32.const 71034) "a") (data (i32.const 71037) "a") (data (i32.const 71040) "a") (data (i32.const 71043) "a") (data (i32.const 71046) "a") (data (i32.const 71049) "a") (data (i32.const 71052) "a") (data (i32.const 71055) "a") (data (i32.const 71058) "a") (data (i32.const 71061) "a") (data (i32.const 71064) "a") (data (i32.const 71067) "a") (data (i32.const 71070) "a") (data (i32.const 71073) "a") (data (i32.const 71076) "a") (data (i32.const 71079) "a") (data (i32.const 71082) "a") (data (i32.const 71085) "a") (data (i32.const 71088) "a") (data (i32.const 71091) "a") (data (i32.const 71094) "a") (data (i32.const 71097) "a") (data (i32.const 71100) "a") (data (i32.const 71103) "a") (data (i32.const 71106) "a") (data (i32.const 71109) "a") (data (i32.const 71112) "a") (data (i32.const 71115) "a") (data (i32.const 71118) "a") (data (i32.const 71121) "a") (data (i32.const 71124) "a") (data (i32.const 71127) "a") (data (i32.const 71130) "a") (data (i32.const 71133) "a") (data (i32.const 71136) "a") (data (i32.const 71139) "a") (data (i32.const 71142) "a") (data (i32.const 71145) "a") (data (i32.const 71148) "a") (data (i32.const 71151) "a") (data (i32.const 71154) "a") (data (i32.const 71157) "a") (data (i32.const 71160) "a") (data (i32.const 71163) "a") (data (i32.const 71166) "a") (data (i32.const 71169) "a") (data (i32.const 71172) "a") (data (i32.const 71175) "a") (data (i32.const 71178) "a") (data (i32.const 71181) "a") (data (i32.const 71184) "a") (data (i32.const 71187) "a") (data (i32.const 71190) "a") (data (i32.const 71193) "a") (data (i32.const 71196) "a") (data (i32.const 71199) "a") (data (i32.const 71202) "a") (data (i32.const 71205) "a") (data (i32.const 71208) "a") (data (i32.const 71211) "a") (data (i32.const 71214) "a") (data (i32.const 71217) "a") (data (i32.const 71220) "a") (data (i32.const 71223) "a") (data (i32.const 71226) "a") (data (i32.const 71229) "a") (data (i32.const 71232) "a") (data (i32.const 71235) "a") (data (i32.const 71238) "a") (data (i32.const 71241) "a") (data (i32.const 71244) "a") (data (i32.const 71247) "a") (data (i32.const 71250) "a") (data (i32.const 71253) "a") (data (i32.const 71256) "a") (data (i32.const 71259) "a") (data (i32.const 71262) "a") (data (i32.const 71265) "a") (data (i32.const 71268) "a") (data (i32.const 71271) "a") (data (i32.const 71274) "a") (data (i32.const 71277) "a") (data (i32.const 71280) "a") (data (i32.const 71283) "a") (data (i32.const 71286) "a") (data (i32.const 71289) "a") (data (i32.const 71292) "a") (data (i32.const 71295) "a") (data (i32.const 71298) "a") (data (i32.const 71301) "a") (data (i32.const 71304) "a") (data (i32.const 71307) "a") (data (i32.const 71310) "a") (data (i32.const 71313) "a") (data (i32.const 71316) "a") (data (i32.const 71319) "a") (data (i32.const 71322) "a") (data (i32.const 71325) "a") (data (i32.const 71328) "a") (data (i32.const 71331) "a") (data (i32.const 71334) "a") (data (i32.const 71337) "a") (data (i32.const 71340) "a") (data (i32.const 71343) "a") (data (i32.const 71346) "a") (data (i32.const 71349) "a") (data (i32.const 71352) "a") (data (i32.const 71355) "a") (data (i32.const 71358) "a") (data (i32.const 71361) "a") (data (i32.const 71364) "a") (data (i32.const 71367) "a") (data (i32.const 71370) "a") (data (i32.const 71373) "a") (data (i32.const 71376) "a") (data (i32.const 71379) "a") (data (i32.const 71382) "a") (data (i32.const 71385) "a") (data (i32.const 71388) "a") (data (i32.const 71391) "a") (data (i32.const 71394) "a") (data (i32.const 71397) "a") (data (i32.const 71400) "a") (data (i32.const 71403) "a") (data (i32.const 71406) "a") (data (i32.const 71409) "a") (data (i32.const 71412) "a") (data (i32.const 71415) "a") (data (i32.const 71418) "a") (data (i32.const 71421) "a") (data (i32.const 71424) "a") (data (i32.const 71427) "a") (data (i32.const 71430) "a") (data (i32.const 71433) "a") (data (i32.const 71436) "a") (data (i32.const 71439) "a") (data (i32.const 71442) "a") (data (i32.const 71445) "a") (data (i32.const 71448) "a") (data (i32.const 71451) "a") (data (i32.const 71454) "a") (data (i32.const 71457) "a") (data (i32.const 71460) "a") (data (i32.const 71463) "a") (data (i32.const 71466) "a") (data (i32.const 71469) "a") (data (i32.const 71472) "a") (data (i32.const 71475) "a") (data (i32.const 71478) "a") (data (i32.const 71481) "a") (data (i32.const 71484) "a") (data (i32.const 71487) "a") (data (i32.const 71490) "a") (data (i32.const 71493) "a") (data (i32.const 71496) "a") (data (i32.const 71499) "a") (data (i32.const 71502) "a") (data (i32.const 71505) "a") (data (i32.const 71508) "a") (data (i32.const 71511) "a") (data (i32.const 71514) "a") (data (i32.const 71517) "a") (data (i32.const 71520) "a") (data (i32.const 71523) "a") (data (i32.const 71526) "a") (data (i32.const 71529) "a") (data (i32.const 71532) "a") (data (i32.const 71535) "a") (data (i32.const 71538) "a") (data (i32.const 71541) "a") (data (i32.const 71544) "a") (data (i32.const 71547) "a") (data (i32.const 71550) "a") (data (i32.const 71553) "a") (data (i32.const 71556) "a") (data (i32.const 71559) "a") (data (i32.const 71562) "a") (data (i32.const 71565) "a") (data (i32.const 71568) "a") (data (i32.const 71571) "a") (data (i32.const 71574) "a") (data (i32.const 71577) "a") (data (i32.const 71580) "a") (data (i32.const 71583) "a") (data (i32.const 71586) "a") (data (i32.const 71589) "a") (data (i32.const 71592) "a") (data (i32.const 71595) "a") (data (i32.const 71598) "a") (data (i32.const 71601) "a") (data (i32.const 71604) "a") (data (i32.const 71607) "a") (data (i32.const 71610) "a") (data (i32.const 71613) "a") (data (i32.const 71616) "a") (data (i32.const 71619) "a") (data (i32.const 71622) "a") (data (i32.const 71625) "a") (data (i32.const 71628) "a") (data (i32.const 71631) "a") (data (i32.const 71634) "a") (data (i32.const 71637) "a") (data (i32.const 71640) "a") (data (i32.const 71643) "a") (data (i32.const 71646) "a") (data (i32.const 71649) "a") (data (i32.const 71652) "a") (data (i32.const 71655) "a") (data (i32.const 71658) "a") (data (i32.const 71661) "a") (data (i32.const 71664) "a") (data (i32.const 71667) "a") (data (i32.const 71670) "a") (data (i32.const 71673) "a") (data (i32.const 71676) "a") (data (i32.const 71679) "a") (data (i32.const 71682) "a") (data (i32.const 71685) "a") (data (i32.const 71688) "a") (data (i32.const 71691) "a") (data (i32.const 71694) "a") (data (i32.const 71697) "a") (data (i32.const 71700) "a") (data (i32.const 71703) "a") (data (i32.const 71706) "a") (data (i32.const 71709) "a") (data (i32.const 71712) "a") (data (i32.const 71715) "a") (data (i32.const 71718) "a") (data (i32.const 71721) "a") (data (i32.const 71724) "a") (data (i32.const 71727) "a") (data (i32.const 71730) "a") (data (i32.const 71733) "a") (data (i32.const 71736) "a") (data (i32.const 71739) "a") (data (i32.const 71742) "a") (data (i32.const 71745) "a") (data (i32.const 71748) "a") (data (i32.const 71751) "a") (data (i32.const 71754) "a") (data (i32.const 71757) "a") (data (i32.const 71760) "a") (data (i32.const 71763) "a") (data (i32.const 71766) "a") (data (i32.const 71769) "a") (data (i32.const 71772) "a") (data (i32.const 71775) "a") (data (i32.const 71778) "a") (data (i32.const 71781) "a") (data (i32.const 71784) "a") (data (i32.const 71787) "a") (data (i32.const 71790) "a") (data (i32.const 71793) "a") (data (i32.const 71796) "a") (data (i32.const 71799) "a") (data (i32.const 71802) "a") (data (i32.const 71805) "a") (data (i32.const 71808) "a") (data (i32.const 71811) "a") (data (i32.const 71814) "a") (data (i32.const 71817) "a") (data (i32.const 71820) "a") (data (i32.const 71823) "a") (data (i32.const 71826) "a") (data (i32.const 71829) "a") (data (i32.const 71832) "a") (data (i32.const 71835) "a") (data (i32.const 71838) "a") (data (i32.const 71841) "a") (data (i32.const 71844) "a") (data (i32.const 71847) "a") (data (i32.const 71850) "a") (data (i32.const 71853) "a") (data (i32.const 71856) "a") (data (i32.const 71859) "a") (data (i32.const 71862) "a") (data (i32.const 71865) "a") (data (i32.const 71868) "a") (data (i32.const 71871) "a") (data (i32.const 71874) "a") (data (i32.const 71877) "a") (data (i32.const 71880) "a") (data (i32.const 71883) "a") (data (i32.const 71886) "a") (data (i32.const 71889) "a") (data (i32.const 71892) "a") (data (i32.const 71895) "a") (data (i32.const 71898) "a") (data (i32.const 71901) "a") (data (i32.const 71904) "a") (data (i32.const 71907) "a") (data (i32.const 71910) "a") (data (i32.const 71913) "a") (data (i32.const 71916) "a") (data (i32.const 71919) "a") (data (i32.const 71922) "a") (data (i32.const 71925) "a") (data (i32.const 71928) "a") (data (i32.const 71931) "a") (data (i32.const 71934) "a") (data (i32.const 71937) "a") (data (i32.const 71940) "a") (data (i32.const 71943) "a") (data (i32.const 71946) "a") (data (i32.const 71949) "a") (data (i32.const 71952) "a") (data (i32.const 71955) "a") (data (i32.const 71958) "a") (data (i32.const 71961) "a") (data (i32.const 71964) "a") (data (i32.const 71967) "a") (data (i32.const 71970) "a") (data (i32.const 71973) "a") (data (i32.const 71976) "a") (data (i32.const 71979) "a") (data (i32.const 71982) "a") (data (i32.const 71985) "a") (data (i32.const 71988) "a") (data (i32.const 71991) "a") (data (i32.const 71994) "a") (data (i32.const 71997) "a") (data (i32.const 72000) "a") (data (i32.const 72003) "a") (data (i32.const 72006) "a") (data (i32.const 72009) "a") (data (i32.const 72012) "a") (data (i32.const 72015) "a") (data (i32.const 72018) "a") (data (i32.const 72021) "a") (data (i32.const 72024) "a") (data (i32.const 72027) "a") (data (i32.const 72030) "a") (data (i32.const 72033) "a") (data (i32.const 72036) "a") (data (i32.const 72039) "a") (data (i32.const 72042) "a") (data (i32.const 72045) "a") (data (i32.const 72048) "a") (data (i32.const 72051) "a") (data (i32.const 72054) "a") (data (i32.const 72057) "a") (data (i32.const 72060) "a") (data (i32.const 72063) "a") (data (i32.const 72066) "a") (data (i32.const 72069) "a") (data (i32.const 72072) "a") (data (i32.const 72075) "a") (data (i32.const 72078) "a") (data (i32.const 72081) "a") (data (i32.const 72084) "a") (data (i32.const 72087) "a") (data (i32.const 72090) "a") (data (i32.const 72093) "a") (data (i32.const 72096) "a") (data (i32.const 72099) "a") (data (i32.const 72102) "a") (data (i32.const 72105) "a") (data (i32.const 72108) "a") (data (i32.const 72111) "a") (data (i32.const 72114) "a") (data (i32.const 72117) "a") (data (i32.const 72120) "a") (data (i32.const 72123) "a") (data (i32.const 72126) "a") (data (i32.const 72129) "a") (data (i32.const 72132) "a") (data (i32.const 72135) "a") (data (i32.const 72138) "a") (data (i32.const 72141) "a") (data (i32.const 72144) "a") (data (i32.const 72147) "a") (data (i32.const 72150) "a") (data (i32.const 72153) "a") (data (i32.const 72156) "a") (data (i32.const 72159) "a") (data (i32.const 72162) "a") (data (i32.const 72165) "a") (data (i32.const 72168) "a") (data (i32.const 72171) "a") (data (i32.const 72174) "a") (data (i32.const 72177) "a") (data (i32.const 72180) "a") (data (i32.const 72183) "a") (data (i32.const 72186) "a") (data (i32.const 72189) "a") (data (i32.const 72192) "a") (data (i32.const 72195) "a") (data (i32.const 72198) "a") (data (i32.const 72201) "a") (data (i32.const 72204) "a") (data (i32.const 72207) "a") (data (i32.const 72210) "a") (data (i32.const 72213) "a") (data (i32.const 72216) "a") (data (i32.const 72219) "a") (data (i32.const 72222) "a") (data (i32.const 72225) "a") (data (i32.const 72228) "a") (data (i32.const 72231) "a") (data (i32.const 72234) "a") (data (i32.const 72237) "a") (data (i32.const 72240) "a") (data (i32.const 72243) "a") (data (i32.const 72246) "a") (data (i32.const 72249) "a") (data (i32.const 72252) "a") (data (i32.const 72255) "a") (data (i32.const 72258) "a") (data (i32.const 72261) "a") (data (i32.const 72264) "a") (data (i32.const 72267) "a") (data (i32.const 72270) "a") (data (i32.const 72273) "a") (data (i32.const 72276) "a") (data (i32.const 72279) "a") (data (i32.const 72282) "a") (data (i32.const 72285) "a") (data (i32.const 72288) "a") (data (i32.const 72291) "a") (data (i32.const 72294) "a") (data (i32.const 72297) "a") (data (i32.const 72300) "a") (data (i32.const 72303) "a") (data (i32.const 72306) "a") (data (i32.const 72309) "a") (data (i32.const 72312) "a") (data (i32.const 72315) "a") (data (i32.const 72318) "a") (data (i32.const 72321) "a") (data (i32.const 72324) "a") (data (i32.const 72327) "a") (data (i32.const 72330) "a") (data (i32.const 72333) "a") (data (i32.const 72336) "a") (data (i32.const 72339) "a") (data (i32.const 72342) "a") (data (i32.const 72345) "a") (data (i32.const 72348) "a") (data (i32.const 72351) "a") (data (i32.const 72354) "a") (data (i32.const 72357) "a") (data (i32.const 72360) "a") (data (i32.const 72363) "a") (data (i32.const 72366) "a") (data (i32.const 72369) "a") (data (i32.const 72372) "a") (data (i32.const 72375) "a") (data (i32.const 72378) "a") (data (i32.const 72381) "a") (data (i32.const 72384) "a") (data (i32.const 72387) "a") (data (i32.const 72390) "a") (data (i32.const 72393) "a") (data (i32.const 72396) "a") (data (i32.const 72399) "a") (data (i32.const 72402) "a") (data (i32.const 72405) "a") (data (i32.const 72408) "a") (data (i32.const 72411) "a") (data (i32.const 72414) "a") (data (i32.const 72417) "a") (data (i32.const 72420) "a") (data (i32.const 72423) "a") (data (i32.const 72426) "a") (data (i32.const 72429) "a") (data (i32.const 72432) "a") (data (i32.const 72435) "a") (data (i32.const 72438) "a") (data (i32.const 72441) "a") (data (i32.const 72444) "a") (data (i32.const 72447) "a") (data (i32.const 72450) "a") (data (i32.const 72453) "a") (data (i32.const 72456) "a") (data (i32.const 72459) "a") (data (i32.const 72462) "a") (data (i32.const 72465) "a") (data (i32.const 72468) "a") (data (i32.const 72471) "a") (data (i32.const 72474) "a") (data (i32.const 72477) "a") (data (i32.const 72480) "a") (data (i32.const 72483) "a") (data (i32.const 72486) "a") (data (i32.const 72489) "a") (data (i32.const 72492) "a") (data (i32.const 72495) "a") (data (i32.const 72498) "a") (data (i32.const 72501) "a") (data (i32.const 72504) "a") (data (i32.const 72507) "a") (data (i32.const 72510) "a") (data (i32.const 72513) "a") (data (i32.const 72516) "a") (data (i32.const 72519) "a") (data (i32.const 72522) "a") (data (i32.const 72525) "a") (data (i32.const 72528) "a") (data (i32.const 72531) "a") (data (i32.const 72534) "a") (data (i32.const 72537) "a") (data (i32.const 72540) "a") (data (i32.const 72543) "a") (data (i32.const 72546) "a") (data (i32.const 72549) "a") (data (i32.const 72552) "a") (data (i32.const 72555) "a") (data (i32.const 72558) "a") (data (i32.const 72561) "a") (data (i32.const 72564) "a") (data (i32.const 72567) "a") (data (i32.const 72570) "a") (data (i32.const 72573) "a") (data (i32.const 72576) "a") (data (i32.const 72579) "a") (data (i32.const 72582) "a") (data (i32.const 72585) "a") (data (i32.const 72588) "a") (data (i32.const 72591) "a") (data (i32.const 72594) "a") (data (i32.const 72597) "a") (data (i32.const 72600) "a") (data (i32.const 72603) "a") (data (i32.const 72606) "a") (data (i32.const 72609) "a") (data (i32.const 72612) "a") (data (i32.const 72615) "a") (data (i32.const 72618) "a") (data (i32.const 72621) "a") (data (i32.const 72624) "a") (data (i32.const 72627) "a") (data (i32.const 72630) "a") (data (i32.const 72633) "a") (data (i32.const 72636) "a") (data (i32.const 72639) "a") (data (i32.const 72642) "a") (data (i32.const 72645) "a") (data (i32.const 72648) "a") (data (i32.const 72651) "a") (data (i32.const 72654) "a") (data (i32.const 72657) "a") (data (i32.const 72660) "a") (data (i32.const 72663) "a") (data (i32.const 72666) "a") (data (i32.const 72669) "a") (data (i32.const 72672) "a") (data (i32.const 72675) "a") (data (i32.const 72678) "a") (data (i32.const 72681) "a") (data (i32.const 72684) "a") (data (i32.const 72687) "a") (data (i32.const 72690) "a") (data (i32.const 72693) "a") (data (i32.const 72696) "a") (data (i32.const 72699) "a") (data (i32.const 72702) "a") (data (i32.const 72705) "a") (data (i32.const 72708) "a") (data (i32.const 72711) "a") (data (i32.const 72714) "a") (data (i32.const 72717) "a") (data (i32.const 72720) "a") (data (i32.const 72723) "a") (data (i32.const 72726) "a") (data (i32.const 72729) "a") (data (i32.const 72732) "a") (data (i32.const 72735) "a") (data (i32.const 72738) "a") (data (i32.const 72741) "a") (data (i32.const 72744) "a") (data (i32.const 72747) "a") (data (i32.const 72750) "a") (data (i32.const 72753) "a") (data (i32.const 72756) "a") (data (i32.const 72759) "a") (data (i32.const 72762) "a") (data (i32.const 72765) "a") (data (i32.const 72768) "a") (data (i32.const 72771) "a") (data (i32.const 72774) "a") (data (i32.const 72777) "a") (data (i32.const 72780) "a") (data (i32.const 72783) "a") (data (i32.const 72786) "a") (data (i32.const 72789) "a") (data (i32.const 72792) "a") (data (i32.const 72795) "a") (data (i32.const 72798) "a") (data (i32.const 72801) "a") (data (i32.const 72804) "a") (data (i32.const 72807) "a") (data (i32.const 72810) "a") (data (i32.const 72813) "a") (data (i32.const 72816) "a") (data (i32.const 72819) "a") (data (i32.const 72822) "a") (data (i32.const 72825) "a") (data (i32.const 72828) "a") (data (i32.const 72831) "a") (data (i32.const 72834) "a") (data (i32.const 72837) "a") (data (i32.const 72840) "a") (data (i32.const 72843) "a") (data (i32.const 72846) "a") (data (i32.const 72849) "a") (data (i32.const 72852) "a") (data (i32.const 72855) "a") (data (i32.const 72858) "a") (data (i32.const 72861) "a") (data (i32.const 72864) "a") (data (i32.const 72867) "a") (data (i32.const 72870) "a") (data (i32.const 72873) "a") (data (i32.const 72876) "a") (data (i32.const 72879) "a") (data (i32.const 72882) "a") (data (i32.const 72885) "a") (data (i32.const 72888) "a") (data (i32.const 72891) "a") (data (i32.const 72894) "a") (data (i32.const 72897) "a") (data (i32.const 72900) "a") (data (i32.const 72903) "a") (data (i32.const 72906) "a") (data (i32.const 72909) "a") (data (i32.const 72912) "a") (data (i32.const 72915) "a") (data (i32.const 72918) "a") (data (i32.const 72921) "a") (data (i32.const 72924) "a") (data (i32.const 72927) "a") (data (i32.const 72930) "a") (data (i32.const 72933) "a") (data (i32.const 72936) "a") (data (i32.const 72939) "a") (data (i32.const 72942) "a") (data (i32.const 72945) "a") (data (i32.const 72948) "a") (data (i32.const 72951) "a") (data (i32.const 72954) "a") (data (i32.const 72957) "a") (data (i32.const 72960) "a") (data (i32.const 72963) "a") (data (i32.const 72966) "a") (data (i32.const 72969) "a") (data (i32.const 72972) "a") (data (i32.const 72975) "a") (data (i32.const 72978) "a") (data (i32.const 72981) "a") (data (i32.const 72984) "a") (data (i32.const 72987) "a") (data (i32.const 72990) "a") (data (i32.const 72993) "a") (data (i32.const 72996) "a") (data (i32.const 72999) "a") (data (i32.const 73002) "a") (data (i32.const 73005) "a") (data (i32.const 73008) "a") (data (i32.const 73011) "a") (data (i32.const 73014) "a") (data (i32.const 73017) "a") (data (i32.const 73020) "a") (data (i32.const 73023) "a") (data (i32.const 73026) "a") (data (i32.const 73029) "a") (data (i32.const 73032) "a") (data (i32.const 73035) "a") (data (i32.const 73038) "a") (data (i32.const 73041) "a") (data (i32.const 73044) "a") (data (i32.const 73047) "a") (data (i32.const 73050) "a") (data (i32.const 73053) "a") (data (i32.const 73056) "a") (data (i32.const 73059) "a") (data (i32.const 73062) "a") (data (i32.const 73065) "a") (data (i32.const 73068) "a") (data (i32.const 73071) "a") (data (i32.const 73074) "a") (data (i32.const 73077) "a") (data (i32.const 73080) "a") (data (i32.const 73083) "a") (data (i32.const 73086) "a") (data (i32.const 73089) "a") (data (i32.const 73092) "a") (data (i32.const 73095) "a") (data (i32.const 73098) "a") (data (i32.const 73101) "a") (data (i32.const 73104) "a") (data (i32.const 73107) "a") (data (i32.const 73110) "a") (data (i32.const 73113) "a") (data (i32.const 73116) "a") (data (i32.const 73119) "a") (data (i32.const 73122) "a") (data (i32.const 73125) "a") (data (i32.const 73128) "a") (data (i32.const 73131) "a") (data (i32.const 73134) "a") (data (i32.const 73137) "a") (data (i32.const 73140) "a") (data (i32.const 73143) "a") (data (i32.const 73146) "a") (data (i32.const 73149) "a") (data (i32.const 73152) "a") (data (i32.const 73155) "a") (data (i32.const 73158) "a") (data (i32.const 73161) "a") (data (i32.const 73164) "a") (data (i32.const 73167) "a") (data (i32.const 73170) "a") (data (i32.const 73173) "a") (data (i32.const 73176) "a") (data (i32.const 73179) "a") (data (i32.const 73182) "a") (data (i32.const 73185) "a") (data (i32.const 73188) "a") (data (i32.const 73191) "a") (data (i32.const 73194) "a") (data (i32.const 73197) "a") (data (i32.const 73200) "a") (data (i32.const 73203) "a") (data (i32.const 73206) "a") (data (i32.const 73209) "a") (data (i32.const 73212) "a") (data (i32.const 73215) "a") (data (i32.const 73218) "a") (data (i32.const 73221) "a") (data (i32.const 73224) "a") (data (i32.const 73227) "a") (data (i32.const 73230) "a") (data (i32.const 73233) "a") (data (i32.const 73236) "a") (data (i32.const 73239) "a") (data (i32.const 73242) "a") (data (i32.const 73245) "a") (data (i32.const 73248) "a") (data (i32.const 73251) "a") (data (i32.const 73254) "a") (data (i32.const 73257) "a") (data (i32.const 73260) "a") (data (i32.const 73263) "a") (data (i32.const 73266) "a") (data (i32.const 73269) "a") (data (i32.const 73272) "a") (data (i32.const 73275) "a") (data (i32.const 73278) "a") (data (i32.const 73281) "a") (data (i32.const 73284) "a") (data (i32.const 73287) "a") (data (i32.const 73290) "a") (data (i32.const 73293) "a") (data (i32.const 73296) "a") (data (i32.const 73299) "a") (data (i32.const 73302) "a") (data (i32.const 73305) "a") (data (i32.const 73308) "a") (data (i32.const 73311) "a") (data (i32.const 73314) "a") (data (i32.const 73317) "a") (data (i32.const 73320) "a") (data (i32.const 73323) "a") (data (i32.const 73326) "a") (data (i32.const 73329) "a") (data (i32.const 73332) "a") (data (i32.const 73335) "a") (data (i32.const 73338) "a") (data (i32.const 73341) "a") (data (i32.const 73344) "a") (data (i32.const 73347) "a") (data (i32.const 73350) "a") (data (i32.const 73353) "a") (data (i32.const 73356) "a") (data (i32.const 73359) "a") (data (i32.const 73362) "a") (data (i32.const 73365) "a") (data (i32.const 73368) "a") (data (i32.const 73371) "a") (data (i32.const 73374) "a") (data (i32.const 73377) "a") (data (i32.const 73380) "a") (data (i32.const 73383) "a") (data (i32.const 73386) "a") (data (i32.const 73389) "a") (data (i32.const 73392) "a") (data (i32.const 73395) "a") (data (i32.const 73398) "a") (data (i32.const 73401) "a") (data (i32.const 73404) "a") (data (i32.const 73407) "a") (data (i32.const 73410) "a") (data (i32.const 73413) "a") (data (i32.const 73416) "a") (data (i32.const 73419) "a") (data (i32.const 73422) "a") (data (i32.const 73425) "a") (data (i32.const 73428) "a") (data (i32.const 73431) "a") (data (i32.const 73434) "a") (data (i32.const 73437) "a") (data (i32.const 73440) "a") (data (i32.const 73443) "a") (data (i32.const 73446) "a") (data (i32.const 73449) "a") (data (i32.const 73452) "a") (data (i32.const 73455) "a") (data (i32.const 73458) "a") (data (i32.const 73461) "a") (data (i32.const 73464) "a") (data (i32.const 73467) "a") (data (i32.const 73470) "a") (data (i32.const 73473) "a") (data (i32.const 73476) "a") (data (i32.const 73479) "a") (data (i32.const 73482) "a") (data (i32.const 73485) "a") (data (i32.const 73488) "a") (data (i32.const 73491) "a") (data (i32.const 73494) "a") (data (i32.const 73497) "a") (data (i32.const 73500) "a") (data (i32.const 73503) "a") (data (i32.const 73506) "a") (data (i32.const 73509) "a") (data (i32.const 73512) "a") (data (i32.const 73515) "a") (data (i32.const 73518) "a") (data (i32.const 73521) "a") (data (i32.const 73524) "a") (data (i32.const 73527) "a") (data (i32.const 73530) "a") (data (i32.const 73533) "a") (data (i32.const 73536) "a") (data (i32.const 73539) "a") (data (i32.const 73542) "a") (data (i32.const 73545) "a") (data (i32.const 73548) "a") (data (i32.const 73551) "a") (data (i32.const 73554) "a") (data (i32.const 73557) "a") (data (i32.const 73560) "a") (data (i32.const 73563) "a") (data (i32.const 73566) "a") (data (i32.const 73569) "a") (data (i32.const 73572) "a") (data (i32.const 73575) "a") (data (i32.const 73578) "a") (data (i32.const 73581) "a") (data (i32.const 73584) "a") (data (i32.const 73587) "a") (data (i32.const 73590) "a") (data (i32.const 73593) "a") (data (i32.const 73596) "a") (data (i32.const 73599) "a") (data (i32.const 73602) "a") (data (i32.const 73605) "a") (data (i32.const 73608) "a") (data (i32.const 73611) "a") (data (i32.const 73614) "a") (data (i32.const 73617) "a") (data (i32.const 73620) "a") (data (i32.const 73623) "a") (data (i32.const 73626) "a") (data (i32.const 73629) "a") (data (i32.const 73632) "a") (data (i32.const 73635) "a") (data (i32.const 73638) "a") (data (i32.const 73641) "a") (data (i32.const 73644) "a") (data (i32.const 73647) "a") (data (i32.const 73650) "a") (data (i32.const 73653) "a") (data (i32.const 73656) "a") (data (i32.const 73659) "a") (data (i32.const 73662) "a") (data (i32.const 73665) "a") (data (i32.const 73668) "a") (data (i32.const 73671) "a") (data (i32.const 73674) "a") (data (i32.const 73677) "a") (data (i32.const 73680) "a") (data (i32.const 73683) "a") (data (i32.const 73686) "a") (data (i32.const 73689) "a") (data (i32.const 73692) "a") (data (i32.const 73695) "a") (data (i32.const 73698) "a") (data (i32.const 73701) "a") (data (i32.const 73704) "a") (data (i32.const 73707) "a") (data (i32.const 73710) "a") (data (i32.const 73713) "a") (data (i32.const 73716) "a") (data (i32.const 73719) "a") (data (i32.const 73722) "a") (data (i32.const 73725) "a") (data (i32.const 73728) "a") (data (i32.const 73731) "a") (data (i32.const 73734) "a") (data (i32.const 73737) "a") (data (i32.const 73740) "a") (data (i32.const 73743) "a") (data (i32.const 73746) "a") (data (i32.const 73749) "a") (data (i32.const 73752) "a") (data (i32.const 73755) "a") (data (i32.const 73758) "a") (data (i32.const 73761) "a") (data (i32.const 73764) "a") (data (i32.const 73767) "a") (data (i32.const 73770) "a") (data (i32.const 73773) "a") (data (i32.const 73776) "a") (data (i32.const 73779) "a") (data (i32.const 73782) "a") (data (i32.const 73785) "a") (data (i32.const 73788) "a") (data (i32.const 73791) "a") (data (i32.const 73794) "a") (data (i32.const 73797) "a") (data (i32.const 73800) "a") (data (i32.const 73803) "a") (data (i32.const 73806) "a") (data (i32.const 73809) "a") (data (i32.const 73812) "a") (data (i32.const 73815) "a") (data (i32.const 73818) "a") (data (i32.const 73821) "a") (data (i32.const 73824) "a") (data (i32.const 73827) "a") (data (i32.const 73830) "a") (data (i32.const 73833) "a") (data (i32.const 73836) "a") (data (i32.const 73839) "a") (data (i32.const 73842) "a") (data (i32.const 73845) "a") (data (i32.const 73848) "a") (data (i32.const 73851) "a") (data (i32.const 73854) "a") (data (i32.const 73857) "a") (data (i32.const 73860) "a") (data (i32.const 73863) "a") (data (i32.const 73866) "a") (data (i32.const 73869) "a") (data (i32.const 73872) "a") (data (i32.const 73875) "a") (data (i32.const 73878) "a") (data (i32.const 73881) "a") (data (i32.const 73884) "a") (data (i32.const 73887) "a") (data (i32.const 73890) "a") (data (i32.const 73893) "a") (data (i32.const 73896) "a") (data (i32.const 73899) "a") (data (i32.const 73902) "a") (data (i32.const 73905) "a") (data (i32.const 73908) "a") (data (i32.const 73911) "a") (data (i32.const 73914) "a") (data (i32.const 73917) "a") (data (i32.const 73920) "a") (data (i32.const 73923) "a") (data (i32.const 73926) "a") (data (i32.const 73929) "a") (data (i32.const 73932) "a") (data (i32.const 73935) "a") (data (i32.const 73938) "a") (data (i32.const 73941) "a") (data (i32.const 73944) "a") (data (i32.const 73947) "a") (data (i32.const 73950) "a") (data (i32.const 73953) "a") (data (i32.const 73956) "a") (data (i32.const 73959) "a") (data (i32.const 73962) "a") (data (i32.const 73965) "a") (data (i32.const 73968) "a") (data (i32.const 73971) "a") (data (i32.const 73974) "a") (data (i32.const 73977) "a") (data (i32.const 73980) "a") (data (i32.const 73983) "a") (data (i32.const 73986) "a") (data (i32.const 73989) "a") (data (i32.const 73992) "a") (data (i32.const 73995) "a") (data (i32.const 73998) "a") (data (i32.const 74001) "a") (data (i32.const 74004) "a") (data (i32.const 74007) "a") (data (i32.const 74010) "a") (data (i32.const 74013) "a") (data (i32.const 74016) "a") (data (i32.const 74019) "a") (data (i32.const 74022) "a") (data (i32.const 74025) "a") (data (i32.const 74028) "a") (data (i32.const 74031) "a") (data (i32.const 74034) "a") (data (i32.const 74037) "a") (data (i32.const 74040) "a") (data (i32.const 74043) "a") (data (i32.const 74046) "a") (data (i32.const 74049) "a") (data (i32.const 74052) "a") (data (i32.const 74055) "a") (data (i32.const 74058) "a") (data (i32.const 74061) "a") (data (i32.const 74064) "a") (data (i32.const 74067) "a") (data (i32.const 74070) "a") (data (i32.const 74073) "a") (data (i32.const 74076) "a") (data (i32.const 74079) "a") (data (i32.const 74082) "a") (data (i32.const 74085) "a") (data (i32.const 74088) "a") (data (i32.const 74091) "a") (data (i32.const 74094) "a") (data (i32.const 74097) "a") (data (i32.const 74100) "a") (data (i32.const 74103) "a") (data (i32.const 74106) "a") (data (i32.const 74109) "a") (data (i32.const 74112) "a") (data (i32.const 74115) "a") (data (i32.const 74118) "a") (data (i32.const 74121) "a") (data (i32.const 74124) "a") (data (i32.const 74127) "a") (data (i32.const 74130) "a") (data (i32.const 74133) "a") (data (i32.const 74136) "a") (data (i32.const 74139) "a") (data (i32.const 74142) "a") (data (i32.const 74145) "a") (data (i32.const 74148) "a") (data (i32.const 74151) "a") (data (i32.const 74154) "a") (data (i32.const 74157) "a") (data (i32.const 74160) "a") (data (i32.const 74163) "a") (data (i32.const 74166) "a") (data (i32.const 74169) "a") (data (i32.const 74172) "a") (data (i32.const 74175) "a") (data (i32.const 74178) "a") (data (i32.const 74181) "a") (data (i32.const 74184) "a") (data (i32.const 74187) "a") (data (i32.const 74190) "a") (data (i32.const 74193) "a") (data (i32.const 74196) "a") (data (i32.const 74199) "a") (data (i32.const 74202) "a") (data (i32.const 74205) "a") (data (i32.const 74208) "a") (data (i32.const 74211) "a") (data (i32.const 74214) "a") (data (i32.const 74217) "a") (data (i32.const 74220) "a") (data (i32.const 74223) "a") (data (i32.const 74226) "a") (data (i32.const 74229) "a") (data (i32.const 74232) "a") (data (i32.const 74235) "a") (data (i32.const 74238) "a") (data (i32.const 74241) "a") (data (i32.const 74244) "a") (data (i32.const 74247) "a") (data (i32.const 74250) "a") (data (i32.const 74253) "a") (data (i32.const 74256) "a") (data (i32.const 74259) "a") (data (i32.const 74262) "a") (data (i32.const 74265) "a") (data (i32.const 74268) "a") (data (i32.const 74271) "a") (data (i32.const 74274) "a") (data (i32.const 74277) "a") (data (i32.const 74280) "a") (data (i32.const 74283) "a") (data (i32.const 74286) "a") (data (i32.const 74289) "a") (data (i32.const 74292) "a") (data (i32.const 74295) "a") (data (i32.const 74298) "a") (data (i32.const 74301) "a") (data (i32.const 74304) "a") (data (i32.const 74307) "a") (data (i32.const 74310) "a") (data (i32.const 74313) "a") (data (i32.const 74316) "a") (data (i32.const 74319) "a") (data (i32.const 74322) "a") (data (i32.const 74325) "a") (data (i32.const 74328) "a") (data (i32.const 74331) "a") (data (i32.const 74334) "a") (data (i32.const 74337) "a") (data (i32.const 74340) "a") (data (i32.const 74343) "a") (data (i32.const 74346) "a") (data (i32.const 74349) "a") (data (i32.const 74352) "a") (data (i32.const 74355) "a") (data (i32.const 74358) "a") (data (i32.const 74361) "a") (data (i32.const 74364) "a") (data (i32.const 74367) "a") (data (i32.const 74370) "a") (data (i32.const 74373) "a") (data (i32.const 74376) "a") (data (i32.const 74379) "a") (data (i32.const 74382) "a") (data (i32.const 74385) "a") (data (i32.const 74388) "a") (data (i32.const 74391) "a") (data (i32.const 74394) "a") (data (i32.const 74397) "a") (data (i32.const 74400) "a") (data (i32.const 74403) "a") (data (i32.const 74406) "a") (data (i32.const 74409) "a") (data (i32.const 74412) "a") (data (i32.const 74415) "a") (data (i32.const 74418) "a") (data (i32.const 74421) "a") (data (i32.const 74424) "a") (data (i32.const 74427) "a") (data (i32.const 74430) "a") (data (i32.const 74433) "a") (data (i32.const 74436) "a") (data (i32.const 74439) "a") (data (i32.const 74442) "a") (data (i32.const 74445) "a") (data (i32.const 74448) "a") (data (i32.const 74451) "a") (data (i32.const 74454) "a") (data (i32.const 74457) "a") (data (i32.const 74460) "a") (data (i32.const 74463) "a") (data (i32.const 74466) "a") (data (i32.const 74469) "a") (data (i32.const 74472) "a") (data (i32.const 74475) "a") (data (i32.const 74478) "a") (data (i32.const 74481) "a") (data (i32.const 74484) "a") (data (i32.const 74487) "a") (data (i32.const 74490) "a") (data (i32.const 74493) "a") (data (i32.const 74496) "a") (data (i32.const 74499) "a") (data (i32.const 74502) "a") (data (i32.const 74505) "a") (data (i32.const 74508) "a") (data (i32.const 74511) "a") (data (i32.const 74514) "a") (data (i32.const 74517) "a") (data (i32.const 74520) "a") (data (i32.const 74523) "a") (data (i32.const 74526) "a") (data (i32.const 74529) "a") (data (i32.const 74532) "a") (data (i32.const 74535) "a") (data (i32.const 74538) "a") (data (i32.const 74541) "a") (data (i32.const 74544) "a") (data (i32.const 74547) "a") (data (i32.const 74550) "a") (data (i32.const 74553) "a") (data (i32.const 74556) "a") (data (i32.const 74559) "a") (data (i32.const 74562) "a") (data (i32.const 74565) "a") (data (i32.const 74568) "a") (data (i32.const 74571) "a") (data (i32.const 74574) "a") (data (i32.const 74577) "a") (data (i32.const 74580) "a") (data (i32.const 74583) "a") (data (i32.const 74586) "a") (data (i32.const 74589) "a") (data (i32.const 74592) "a") (data (i32.const 74595) "a") (data (i32.const 74598) "a") (data (i32.const 74601) "a") (data (i32.const 74604) "a") (data (i32.const 74607) "a") (data (i32.const 74610) "a") (data (i32.const 74613) "a") (data (i32.const 74616) "a") (data (i32.const 74619) "a") (data (i32.const 74622) "a") (data (i32.const 74625) "a") (data (i32.const 74628) "a") (data (i32.const 74631) "a") (data (i32.const 74634) "a") (data (i32.const 74637) "a") (data (i32.const 74640) "a") (data (i32.const 74643) "a") (data (i32.const 74646) "a") (data (i32.const 74649) "a") (data (i32.const 74652) "a") (data (i32.const 74655) "a") (data (i32.const 74658) "a") (data (i32.const 74661) "a") (data (i32.const 74664) "a") (data (i32.const 74667) "a") (data (i32.const 74670) "a") (data (i32.const 74673) "a") (data (i32.const 74676) "a") (data (i32.const 74679) "a") (data (i32.const 74682) "a") (data (i32.const 74685) "a") (data (i32.const 74688) "a") (data (i32.const 74691) "a") (data (i32.const 74694) "a") (data (i32.const 74697) "a") (data (i32.const 74700) "a") (data (i32.const 74703) "a") (data (i32.const 74706) "a") (data (i32.const 74709) "a") (data (i32.const 74712) "a") (data (i32.const 74715) "a") (data (i32.const 74718) "a") (data (i32.const 74721) "a") (data (i32.const 74724) "a") (data (i32.const 74727) "a") (data (i32.const 74730) "a") (data (i32.const 74733) "a") (data (i32.const 74736) "a") (data (i32.const 74739) "a") (data (i32.const 74742) "a") (data (i32.const 74745) "a") (data (i32.const 74748) "a") (data (i32.const 74751) "a") (data (i32.const 74754) "a") (data (i32.const 74757) "a") (data (i32.const 74760) "a") (data (i32.const 74763) "a") (data (i32.const 74766) "a") (data (i32.const 74769) "a") (data (i32.const 74772) "a") (data (i32.const 74775) "a") (data (i32.const 74778) "a") (data (i32.const 74781) "a") (data (i32.const 74784) "a") (data (i32.const 74787) "a") (data (i32.const 74790) "a") (data (i32.const 74793) "a") (data (i32.const 74796) "a") (data (i32.const 74799) "a") (data (i32.const 74802) "a") (data (i32.const 74805) "a") (data (i32.const 74808) "a") (data (i32.const 74811) "a") (data (i32.const 74814) "a") (data (i32.const 74817) "a") (data (i32.const 74820) "a") (data (i32.const 74823) "a") (data (i32.const 74826) "a") (data (i32.const 74829) "a") (data (i32.const 74832) "a") (data (i32.const 74835) "a") (data (i32.const 74838) "a") (data (i32.const 74841) "a") (data (i32.const 74844) "a") (data (i32.const 74847) "a") (data (i32.const 74850) "a") (data (i32.const 74853) "a") (data (i32.const 74856) "a") (data (i32.const 74859) "a") (data (i32.const 74862) "a") (data (i32.const 74865) "a") (data (i32.const 74868) "a") (data (i32.const 74871) "a") (data (i32.const 74874) "a") (data (i32.const 74877) "a") (data (i32.const 74880) "a") (data (i32.const 74883) "a") (data (i32.const 74886) "a") (data (i32.const 74889) "a") (data (i32.const 74892) "a") (data (i32.const 74895) "a") (data (i32.const 74898) "a") (data (i32.const 74901) "a") (data (i32.const 74904) "a") (data (i32.const 74907) "a") (data (i32.const 74910) "a") (data (i32.const 74913) "a") (data (i32.const 74916) "a") (data (i32.const 74919) "a") (data (i32.const 74922) "a") (data (i32.const 74925) "a") (data (i32.const 74928) "a") (data (i32.const 74931) "a") (data (i32.const 74934) "a") (data (i32.const 74937) "a") (data (i32.const 74940) "a") (data (i32.const 74943) "a") (data (i32.const 74946) "a") (data (i32.const 74949) "a") (data (i32.const 74952) "a") (data (i32.const 74955) "a") (data (i32.const 74958) "a") (data (i32.const 74961) "a") (data (i32.const 74964) "a") (data (i32.const 74967) "a") (data (i32.const 74970) "a") (data (i32.const 74973) "a") (data (i32.const 74976) "a") (data (i32.const 74979) "a") (data (i32.const 74982) "a") (data (i32.const 74985) "a") (data (i32.const 74988) "a") (data (i32.const 74991) "a") (data (i32.const 74994) "a") (data (i32.const 74997) "a") (data (i32.const 75000) "a") (data (i32.const 75003) "a") (data (i32.const 75006) "a") (data (i32.const 75009) "a") (data (i32.const 75012) "a") (data (i32.const 75015) "a") (data (i32.const 75018) "a") (data (i32.const 75021) "a") (data (i32.const 75024) "a") (data (i32.const 75027) "a") (data (i32.const 75030) "a") (data (i32.const 75033) "a") (data (i32.const 75036) "a") (data (i32.const 75039) "a") (data (i32.const 75042) "a") (data (i32.const 75045) "a") (data (i32.const 75048) "a") (data (i32.const 75051) "a") (data (i32.const 75054) "a") (data (i32.const 75057) "a") (data (i32.const 75060) "a") (data (i32.const 75063) "a") (data (i32.const 75066) "a") (data (i32.const 75069) "a") (data (i32.const 75072) "a") (data (i32.const 75075) "a") (data (i32.const 75078) "a") (data (i32.const 75081) "a") (data (i32.const 75084) "a") (data (i32.const 75087) "a") (data (i32.const 75090) "a") (data (i32.const 75093) "a") (data (i32.const 75096) "a") (data (i32.const 75099) "a") (data (i32.const 75102) "a") (data (i32.const 75105) "a") (data (i32.const 75108) "a") (data (i32.const 75111) "a") (data (i32.const 75114) "a") (data (i32.const 75117) "a") (data (i32.const 75120) "a") (data (i32.const 75123) "a") (data (i32.const 75126) "a") (data (i32.const 75129) "a") (data (i32.const 75132) "a") (data (i32.const 75135) "a") (data (i32.const 75138) "a") (data (i32.const 75141) "a") (data (i32.const 75144) "a") (data (i32.const 75147) "a") (data (i32.const 75150) "a") (data (i32.const 75153) "a") (data (i32.const 75156) "a") (data (i32.const 75159) "a") (data (i32.const 75162) "a") (data (i32.const 75165) "a") (data (i32.const 75168) "a") (data (i32.const 75171) "a") (data (i32.const 75174) "a") (data (i32.const 75177) "a") (data (i32.const 75180) "a") (data (i32.const 75183) "a") (data (i32.const 75186) "a") (data (i32.const 75189) "a") (data (i32.const 75192) "a") (data (i32.const 75195) "a") (data (i32.const 75198) "a") (data (i32.const 75201) "a") (data (i32.const 75204) "a") (data (i32.const 75207) "a") (data (i32.const 75210) "a") (data (i32.const 75213) "a") (data (i32.const 75216) "a") (data (i32.const 75219) "a") (data (i32.const 75222) "a") (data (i32.const 75225) "a") (data (i32.const 75228) "a") (data (i32.const 75231) "a") (data (i32.const 75234) "a") (data (i32.const 75237) "a") (data (i32.const 75240) "a") (data (i32.const 75243) "a") (data (i32.const 75246) "a") (data (i32.const 75249) "a") (data (i32.const 75252) "a") (data (i32.const 75255) "a") (data (i32.const 75258) "a") (data (i32.const 75261) "a") (data (i32.const 75264) "a") (data (i32.const 75267) "a") (data (i32.const 75270) "a") (data (i32.const 75273) "a") (data (i32.const 75276) "a") (data (i32.const 75279) "a") (data (i32.const 75282) "a") (data (i32.const 75285) "a") (data (i32.const 75288) "a") (data (i32.const 75291) "a") (data (i32.const 75294) "a") (data (i32.const 75297) "a") (data (i32.const 75300) "a") (data (i32.const 75303) "a") (data (i32.const 75306) "a") (data (i32.const 75309) "a") (data (i32.const 75312) "a") (data (i32.const 75315) "a") (data (i32.const 75318) "a") (data (i32.const 75321) "a") (data (i32.const 75324) "a") (data (i32.const 75327) "a") (data (i32.const 75330) "a") (data (i32.const 75333) "a") (data (i32.const 75336) "a") (data (i32.const 75339) "a") (data (i32.const 75342) "a") (data (i32.const 75345) "a") (data (i32.const 75348) "a") (data (i32.const 75351) "a") (data (i32.const 75354) "a") (data (i32.const 75357) "a") (data (i32.const 75360) "a") (data (i32.const 75363) "a") (data (i32.const 75366) "a") (data (i32.const 75369) "a") (data (i32.const 75372) "a") (data (i32.const 75375) "a") (data (i32.const 75378) "a") (data (i32.const 75381) "a") (data (i32.const 75384) "a") (data (i32.const 75387) "a") (data (i32.const 75390) "a") (data (i32.const 75393) "a") (data (i32.const 75396) "a") (data (i32.const 75399) "a") (data (i32.const 75402) "a") (data (i32.const 75405) "a") (data (i32.const 75408) "a") (data (i32.const 75411) "a") (data (i32.const 75414) "a") (data (i32.const 75417) "a") (data (i32.const 75420) "a") (data (i32.const 75423) "a") (data (i32.const 75426) "a") (data (i32.const 75429) "a") (data (i32.const 75432) "a") (data (i32.const 75435) "a") (data (i32.const 75438) "a") (data (i32.const 75441) "a") (data (i32.const 75444) "a") (data (i32.const 75447) "a") (data (i32.const 75450) "a") (data (i32.const 75453) "a") (data (i32.const 75456) "a") (data (i32.const 75459) "a") (data (i32.const 75462) "a") (data (i32.const 75465) "a") (data (i32.const 75468) "a") (data (i32.const 75471) "a") (data (i32.const 75474) "a") (data (i32.const 75477) "a") (data (i32.const 75480) "a") (data (i32.const 75483) "a") (data (i32.const 75486) "a") (data (i32.const 75489) "a") (data (i32.const 75492) "a") (data (i32.const 75495) "a") (data (i32.const 75498) "a") (data (i32.const 75501) "a") (data (i32.const 75504) "a") (data (i32.const 75507) "a") (data (i32.const 75510) "a") (data (i32.const 75513) "a") (data (i32.const 75516) "a") (data (i32.const 75519) "a") (data (i32.const 75522) "a") (data (i32.const 75525) "a") (data (i32.const 75528) "a") (data (i32.const 75531) "a") (data (i32.const 75534) "a") (data (i32.const 75537) "a") (data (i32.const 75540) "a") (data (i32.const 75543) "a") (data (i32.const 75546) "a") (data (i32.const 75549) "a") (data (i32.const 75552) "a") (data (i32.const 75555) "a") (data (i32.const 75558) "a") (data (i32.const 75561) "a") (data (i32.const 75564) "a") (data (i32.const 75567) "a") (data (i32.const 75570) "a") (data (i32.const 75573) "a") (data (i32.const 75576) "a") (data (i32.const 75579) "a") (data (i32.const 75582) "a") (data (i32.const 75585) "a") (data (i32.const 75588) "a") (data (i32.const 75591) "a") (data (i32.const 75594) "a") (data (i32.const 75597) "a") (data (i32.const 75600) "a") (data (i32.const 75603) "a") (data (i32.const 75606) "a") (data (i32.const 75609) "a") (data (i32.const 75612) "a") (data (i32.const 75615) "a") (data (i32.const 75618) "a") (data (i32.const 75621) "a") (data (i32.const 75624) "a") (data (i32.const 75627) "a") (data (i32.const 75630) "a") (data (i32.const 75633) "a") (data (i32.const 75636) "a") (data (i32.const 75639) "a") (data (i32.const 75642) "a") (data (i32.const 75645) "a") (data (i32.const 75648) "a") (data (i32.const 75651) "a") (data (i32.const 75654) "a") (data (i32.const 75657) "a") (data (i32.const 75660) "a") (data (i32.const 75663) "a") (data (i32.const 75666) "a") (data (i32.const 75669) "a") (data (i32.const 75672) "a") (data (i32.const 75675) "a") (data (i32.const 75678) "a") (data (i32.const 75681) "a") (data (i32.const 75684) "a") (data (i32.const 75687) "a") (data (i32.const 75690) "a") (data (i32.const 75693) "a") (data (i32.const 75696) "a") (data (i32.const 75699) "a") (data (i32.const 75702) "a") (data (i32.const 75705) "a") (data (i32.const 75708) "a") (data (i32.const 75711) "a") (data (i32.const 75714) "a") (data (i32.const 75717) "a") (data (i32.const 75720) "a") (data (i32.const 75723) "a") (data (i32.const 75726) "a") (data (i32.const 75729) "a") (data (i32.const 75732) "a") (data (i32.const 75735) "a") (data (i32.const 75738) "a") (data (i32.const 75741) "a") (data (i32.const 75744) "a") (data (i32.const 75747) "a") (data (i32.const 75750) "a") (data (i32.const 75753) "a") (data (i32.const 75756) "a") (data (i32.const 75759) "a") (data (i32.const 75762) "a") (data (i32.const 75765) "a") (data (i32.const 75768) "a") (data (i32.const 75771) "a") (data (i32.const 75774) "a") (data (i32.const 75777) "a") (data (i32.const 75780) "a") (data (i32.const 75783) "a") (data (i32.const 75786) "a") (data (i32.const 75789) "a") (data (i32.const 75792) "a") (data (i32.const 75795) "a") (data (i32.const 75798) "a") (data (i32.const 75801) "a") (data (i32.const 75804) "a") (data (i32.const 75807) "a") (data (i32.const 75810) "a") (data (i32.const 75813) "a") (data (i32.const 75816) "a") (data (i32.const 75819) "a") (data (i32.const 75822) "a") (data (i32.const 75825) "a") (data (i32.const 75828) "a") (data (i32.const 75831) "a") (data (i32.const 75834) "a") (data (i32.const 75837) "a") (data (i32.const 75840) "a") (data (i32.const 75843) "a") (data (i32.const 75846) "a") (data (i32.const 75849) "a") (data (i32.const 75852) "a") (data (i32.const 75855) "a") (data (i32.const 75858) "a") (data (i32.const 75861) "a") (data (i32.const 75864) "a") (data (i32.const 75867) "a") (data (i32.const 75870) "a") (data (i32.const 75873) "a") (data (i32.const 75876) "a") (data (i32.const 75879) "a") (data (i32.const 75882) "a") (data (i32.const 75885) "a") (data (i32.const 75888) "a") (data (i32.const 75891) "a") (data (i32.const 75894) "a") (data (i32.const 75897) "a") (data (i32.const 75900) "a") (data (i32.const 75903) "a") (data (i32.const 75906) "a") (data (i32.const 75909) "a") (data (i32.const 75912) "a") (data (i32.const 75915) "a") (data (i32.const 75918) "a") (data (i32.const 75921) "a") (data (i32.const 75924) "a") (data (i32.const 75927) "a") (data (i32.const 75930) "a") (data (i32.const 75933) "a") (data (i32.const 75936) "a") (data (i32.const 75939) "a") (data (i32.const 75942) "a") (data (i32.const 75945) "a") (data (i32.const 75948) "a") (data (i32.const 75951) "a") (data (i32.const 75954) "a") (data (i32.const 75957) "a") (data (i32.const 75960) "a") (data (i32.const 75963) "a") (data (i32.const 75966) "a") (data (i32.const 75969) "a") (data (i32.const 75972) "a") (data (i32.const 75975) "a") (data (i32.const 75978) "a") (data (i32.const 75981) "a") (data (i32.const 75984) "a") (data (i32.const 75987) "a") (data (i32.const 75990) "a") (data (i32.const 75993) "a") (data (i32.const 75996) "a") (data (i32.const 75999) "a") (data (i32.const 76002) "a") (data (i32.const 76005) "a") (data (i32.const 76008) "a") (data (i32.const 76011) "a") (data (i32.const 76014) "a") (data (i32.const 76017) "a") (data (i32.const 76020) "a") (data (i32.const 76023) "a") (data (i32.const 76026) "a") (data (i32.const 76029) "a") (data (i32.const 76032) "a") (data (i32.const 76035) "a") (data (i32.const 76038) "a") (data (i32.const 76041) "a") (data (i32.const 76044) "a") (data (i32.const 76047) "a") (data (i32.const 76050) "a") (data (i32.const 76053) "a") (data (i32.const 76056) "a") (data (i32.const 76059) "a") (data (i32.const 76062) "a") (data (i32.const 76065) "a") (data (i32.const 76068) "a") (data (i32.const 76071) "a") (data (i32.const 76074) "a") (data (i32.const 76077) "a") (data (i32.const 76080) "a") (data (i32.const 76083) "a") (data (i32.const 76086) "a") (data (i32.const 76089) "a") (data (i32.const 76092) "a") (data (i32.const 76095) "a") (data (i32.const 76098) "a") (data (i32.const 76101) "a") (data (i32.const 76104) "a") (data (i32.const 76107) "a") (data (i32.const 76110) "a") (data (i32.const 76113) "a") (data (i32.const 76116) "a") (data (i32.const 76119) "a") (data (i32.const 76122) "a") (data (i32.const 76125) "a") (data (i32.const 76128) "a") (data (i32.const 76131) "a") (data (i32.const 76134) "a") (data (i32.const 76137) "a") (data (i32.const 76140) "a") (data (i32.const 76143) "a") (data (i32.const 76146) "a") (data (i32.const 76149) "a") (data (i32.const 76152) "a") (data (i32.const 76155) "a") (data (i32.const 76158) "a") (data (i32.const 76161) "a") (data (i32.const 76164) "a") (data (i32.const 76167) "a") (data (i32.const 76170) "a") (data (i32.const 76173) "a") (data (i32.const 76176) "a") (data (i32.const 76179) "a") (data (i32.const 76182) "a") (data (i32.const 76185) "a") (data (i32.const 76188) "a") (data (i32.const 76191) "a") (data (i32.const 76194) "a") (data (i32.const 76197) "a") (data (i32.const 76200) "a") (data (i32.const 76203) "a") (data (i32.const 76206) "a") (data (i32.const 76209) "a") (data (i32.const 76212) "a") (data (i32.const 76215) "a") (data (i32.const 76218) "a") (data (i32.const 76221) "a") (data (i32.const 76224) "a") (data (i32.const 76227) "a") (data (i32.const 76230) "a") (data (i32.const 76233) "a") (data (i32.const 76236) "a") (data (i32.const 76239) "a") (data (i32.const 76242) "a") (data (i32.const 76245) "a") (data (i32.const 76248) "a") (data (i32.const 76251) "a") (data (i32.const 76254) "a") (data (i32.const 76257) "a") (data (i32.const 76260) "a") (data (i32.const 76263) "a") (data (i32.const 76266) "a") (data (i32.const 76269) "a") (data (i32.const 76272) "a") (data (i32.const 76275) "a") (data (i32.const 76278) "a") (data (i32.const 76281) "a") (data (i32.const 76284) "a") (data (i32.const 76287) "a") (data (i32.const 76290) "a") (data (i32.const 76293) "a") (data (i32.const 76296) "a") (data (i32.const 76299) "a") (data (i32.const 76302) "a") (data (i32.const 76305) "a") (data (i32.const 76308) "a") (data (i32.const 76311) "a") (data (i32.const 76314) "a") (data (i32.const 76317) "a") (data (i32.const 76320) "a") (data (i32.const 76323) "a") (data (i32.const 76326) "a") (data (i32.const 76329) "a") (data (i32.const 76332) "a") (data (i32.const 76335) "a") (data (i32.const 76338) "a") (data (i32.const 76341) "a") (data (i32.const 76344) "a") (data (i32.const 76347) "a") (data (i32.const 76350) "a") (data (i32.const 76353) "a") (data (i32.const 76356) "a") (data (i32.const 76359) "a") (data (i32.const 76362) "a") (data (i32.const 76365) "a") (data (i32.const 76368) "a") (data (i32.const 76371) "a") (data (i32.const 76374) "a") (data (i32.const 76377) "a") (data (i32.const 76380) "a") (data (i32.const 76383) "a") (data (i32.const 76386) "a") (data (i32.const 76389) "a") (data (i32.const 76392) "a") (data (i32.const 76395) "a") (data (i32.const 76398) "a") (data (i32.const 76401) "a") (data (i32.const 76404) "a") (data (i32.const 76407) "a") (data (i32.const 76410) "a") (data (i32.const 76413) "a") (data (i32.const 76416) "a") (data (i32.const 76419) "a") (data (i32.const 76422) "a") (data (i32.const 76425) "a") (data (i32.const 76428) "a") (data (i32.const 76431) "a") (data (i32.const 76434) "a") (data (i32.const 76437) "a") (data (i32.const 76440) "a") (data (i32.const 76443) "a") (data (i32.const 76446) "a") (data (i32.const 76449) "a") (data (i32.const 76452) "a") (data (i32.const 76455) "a") (data (i32.const 76458) "a") (data (i32.const 76461) "a") (data (i32.const 76464) "a") (data (i32.const 76467) "a") (data (i32.const 76470) "a") (data (i32.const 76473) "a") (data (i32.const 76476) "a") (data (i32.const 76479) "a") (data (i32.const 76482) "a") (data (i32.const 76485) "a") (data (i32.const 76488) "a") (data (i32.const 76491) "a") (data (i32.const 76494) "a") (data (i32.const 76497) "a") (data (i32.const 76500) "a") (data (i32.const 76503) "a") (data (i32.const 76506) "a") (data (i32.const 76509) "a") (data (i32.const 76512) "a") (data (i32.const 76515) "a") (data (i32.const 76518) "a") (data (i32.const 76521) "a") (data (i32.const 76524) "a") (data (i32.const 76527) "a") (data (i32.const 76530) "a") (data (i32.const 76533) "a") (data (i32.const 76536) "a") (data (i32.const 76539) "a") (data (i32.const 76542) "a") (data (i32.const 76545) "a") (data (i32.const 76548) "a") (data (i32.const 76551) "a") (data (i32.const 76554) "a") (data (i32.const 76557) "a") (data (i32.const 76560) "a") (data (i32.const 76563) "a") (data (i32.const 76566) "a") (data (i32.const 76569) "a") (data (i32.const 76572) "a") (data (i32.const 76575) "a") (data (i32.const 76578) "a") (data (i32.const 76581) "a") (data (i32.const 76584) "a") (data (i32.const 76587) "a") (data (i32.const 76590) "a") (data (i32.const 76593) "a") (data (i32.const 76596) "a") (data (i32.const 76599) "a") (data (i32.const 76602) "a") (data (i32.const 76605) "a") (data (i32.const 76608) "a") (data (i32.const 76611) "a") (data (i32.const 76614) "a") (data (i32.const 76617) "a") (data (i32.const 76620) "a") (data (i32.const 76623) "a") (data (i32.const 76626) "a") (data (i32.const 76629) "a") (data (i32.const 76632) "a") (data (i32.const 76635) "a") (data (i32.const 76638) "a") (data (i32.const 76641) "a") (data (i32.const 76644) "a") (data (i32.const 76647) "a") (data (i32.const 76650) "a") (data (i32.const 76653) "a") (data (i32.const 76656) "a") (data (i32.const 76659) "a") (data (i32.const 76662) "a") (data (i32.const 76665) "a") (data (i32.const 76668) "a") (data (i32.const 76671) "a") (data (i32.const 76674) "a") (data (i32.const 76677) "a") (data (i32.const 76680) "a") (data (i32.const 76683) "a") (data (i32.const 76686) "a") (data (i32.const 76689) "a") (data (i32.const 76692) "a") (data (i32.const 76695) "a") (data (i32.const 76698) "a") (data (i32.const 76701) "a") (data (i32.const 76704) "a") (data (i32.const 76707) "a") (data (i32.const 76710) "a") (data (i32.const 76713) "a") (data (i32.const 76716) "a") (data (i32.const 76719) "a") (data (i32.const 76722) "a") (data (i32.const 76725) "a") (data (i32.const 76728) "a") (data (i32.const 76731) "a") (data (i32.const 76734) "a") (data (i32.const 76737) "a") (data (i32.const 76740) "a") (data (i32.const 76743) "a") (data (i32.const 76746) "a") (data (i32.const 76749) "a") (data (i32.const 76752) "a") (data (i32.const 76755) "a") (data (i32.const 76758) "a") (data (i32.const 76761) "a") (data (i32.const 76764) "a") (data (i32.const 76767) "a") (data (i32.const 76770) "a") (data (i32.const 76773) "a") (data (i32.const 76776) "a") (data (i32.const 76779) "a") (data (i32.const 76782) "a") (data (i32.const 76785) "a") (data (i32.const 76788) "a") (data (i32.const 76791) "a") (data (i32.const 76794) "a") (data (i32.const 76797) "a") (data (i32.const 76800) "a") (data (i32.const 76803) "a") (data (i32.const 76806) "a") (data (i32.const 76809) "a") (data (i32.const 76812) "a") (data (i32.const 76815) "a") (data (i32.const 76818) "a") (data (i32.const 76821) "a") (data (i32.const 76824) "a") (data (i32.const 76827) "a") (data (i32.const 76830) "a") (data (i32.const 76833) "a") (data (i32.const 76836) "a") (data (i32.const 76839) "a") (data (i32.const 76842) "a") (data (i32.const 76845) "a") (data (i32.const 76848) "a") (data (i32.const 76851) "a") (data (i32.const 76854) "a") (data (i32.const 76857) "a") (data (i32.const 76860) "a") (data (i32.const 76863) "a") (data (i32.const 76866) "a") (data (i32.const 76869) "a") (data (i32.const 76872) "a") (data (i32.const 76875) "a") (data (i32.const 76878) "a") (data (i32.const 76881) "a") (data (i32.const 76884) "a") (data (i32.const 76887) "a") (data (i32.const 76890) "a") (data (i32.const 76893) "a") (data (i32.const 76896) "a") (data (i32.const 76899) "a") (data (i32.const 76902) "a") (data (i32.const 76905) "a") (data (i32.const 76908) "a") (data (i32.const 76911) "a") (data (i32.const 76914) "a") (data (i32.const 76917) "a") (data (i32.const 76920) "a") (data (i32.const 76923) "a") (data (i32.const 76926) "a") (data (i32.const 76929) "a") (data (i32.const 76932) "a") (data (i32.const 76935) "a") (data (i32.const 76938) "a") (data (i32.const 76941) "a") (data (i32.const 76944) "a") (data (i32.const 76947) "a") (data (i32.const 76950) "a") (data (i32.const 76953) "a") (data (i32.const 76956) "a") (data (i32.const 76959) "a") (data (i32.const 76962) "a") (data (i32.const 76965) "a") (data (i32.const 76968) "a") (data (i32.const 76971) "a") (data (i32.const 76974) "a") (data (i32.const 76977) "a") (data (i32.const 76980) "a") (data (i32.const 76983) "a") (data (i32.const 76986) "a") (data (i32.const 76989) "a") (data (i32.const 76992) "a") (data (i32.const 76995) "a") (data (i32.const 76998) "a") (data (i32.const 77001) "a") (data (i32.const 77004) "a") (data (i32.const 77007) "a") (data (i32.const 77010) "a") (data (i32.const 77013) "a") (data (i32.const 77016) "a") (data (i32.const 77019) "a") (data (i32.const 77022) "a") (data (i32.const 77025) "a") (data (i32.const 77028) "a") (data (i32.const 77031) "a") (data (i32.const 77034) "a") (data (i32.const 77037) "a") (data (i32.const 77040) "a") (data (i32.const 77043) "a") (data (i32.const 77046) "a") (data (i32.const 77049) "a") (data (i32.const 77052) "a") (data (i32.const 77055) "a") (data (i32.const 77058) "a") (data (i32.const 77061) "a") (data (i32.const 77064) "a") (data (i32.const 77067) "a") (data (i32.const 77070) "a") (data (i32.const 77073) "a") (data (i32.const 77076) "a") (data (i32.const 77079) "a") (data (i32.const 77082) "a") (data (i32.const 77085) "a") (data (i32.const 77088) "a") (data (i32.const 77091) "a") (data (i32.const 77094) "a") (data (i32.const 77097) "a") (data (i32.const 77100) "a") (data (i32.const 77103) "a") (data (i32.const 77106) "a") (data (i32.const 77109) "a") (data (i32.const 77112) "a") (data (i32.const 77115) "a") (data (i32.const 77118) "a") (data (i32.const 77121) "a") (data (i32.const 77124) "a") (data (i32.const 77127) "a") (data (i32.const 77130) "a") (data (i32.const 77133) "a") (data (i32.const 77136) "a") (data (i32.const 77139) "a") (data (i32.const 77142) "a") (data (i32.const 77145) "a") (data (i32.const 77148) "a") (data (i32.const 77151) "a") (data (i32.const 77154) "a") (data (i32.const 77157) "a") (data (i32.const 77160) "a") (data (i32.const 77163) "a") (data (i32.const 77166) "a") (data (i32.const 77169) "a") (data (i32.const 77172) "a") (data (i32.const 77175) "a") (data (i32.const 77178) "a") (data (i32.const 77181) "a") (data (i32.const 77184) "a") (data (i32.const 77187) "a") (data (i32.const 77190) "a") (data (i32.const 77193) "a") (data (i32.const 77196) "a") (data (i32.const 77199) "a") (data (i32.const 77202) "a") (data (i32.const 77205) "a") (data (i32.const 77208) "a") (data (i32.const 77211) "a") (data (i32.const 77214) "a") (data (i32.const 77217) "a") (data (i32.const 77220) "a") (data (i32.const 77223) "a") (data (i32.const 77226) "a") (data (i32.const 77229) "a") (data (i32.const 77232) "a") (data (i32.const 77235) "a") (data (i32.const 77238) "a") (data (i32.const 77241) "a") (data (i32.const 77244) "a") (data (i32.const 77247) "a") (data (i32.const 77250) "a") (data (i32.const 77253) "a") (data (i32.const 77256) "a") (data (i32.const 77259) "a") (data (i32.const 77262) "a") (data (i32.const 77265) "a") (data (i32.const 77268) "a") (data (i32.const 77271) "a") (data (i32.const 77274) "a") (data (i32.const 77277) "a") (data (i32.const 77280) "a") (data (i32.const 77283) "a") (data (i32.const 77286) "a") (data (i32.const 77289) "a") (data (i32.const 77292) "a") (data (i32.const 77295) "a") (data (i32.const 77298) "a") (data (i32.const 77301) "a") (data (i32.const 77304) "a") (data (i32.const 77307) "a") (data (i32.const 77310) "a") (data (i32.const 77313) "a") (data (i32.const 77316) "a") (data (i32.const 77319) "a") (data (i32.const 77322) "a") (data (i32.const 77325) "a") (data (i32.const 77328) "a") (data (i32.const 77331) "a") (data (i32.const 77334) "a") (data (i32.const 77337) "a") (data (i32.const 77340) "a") (data (i32.const 77343) "a") (data (i32.const 77346) "a") (data (i32.const 77349) "a") (data (i32.const 77352) "a") (data (i32.const 77355) "a") (data (i32.const 77358) "a") (data (i32.const 77361) "a") (data (i32.const 77364) "a") (data (i32.const 77367) "a") (data (i32.const 77370) "a") (data (i32.const 77373) "a") (data (i32.const 77376) "a") (data (i32.const 77379) "a") (data (i32.const 77382) "a") (data (i32.const 77385) "a") (data (i32.const 77388) "a") (data (i32.const 77391) "a") (data (i32.const 77394) "a") (data (i32.const 77397) "a") (data (i32.const 77400) "a") (data (i32.const 77403) "a") (data (i32.const 77406) "a") (data (i32.const 77409) "a") (data (i32.const 77412) "a") (data (i32.const 77415) "a") (data (i32.const 77418) "a") (data (i32.const 77421) "a") (data (i32.const 77424) "a") (data (i32.const 77427) "a") (data (i32.const 77430) "a") (data (i32.const 77433) "a") (data (i32.const 77436) "a") (data (i32.const 77439) "a") (data (i32.const 77442) "a") (data (i32.const 77445) "a") (data (i32.const 77448) "a") (data (i32.const 77451) "a") (data (i32.const 77454) "a") (data (i32.const 77457) "a") (data (i32.const 77460) "a") (data (i32.const 77463) "a") (data (i32.const 77466) "a") (data (i32.const 77469) "a") (data (i32.const 77472) "a") (data (i32.const 77475) "a") (data (i32.const 77478) "a") (data (i32.const 77481) "a") (data (i32.const 77484) "a") (data (i32.const 77487) "a") (data (i32.const 77490) "a") (data (i32.const 77493) "a") (data (i32.const 77496) "a") (data (i32.const 77499) "a") (data (i32.const 77502) "a") (data (i32.const 77505) "a") (data (i32.const 77508) "a") (data (i32.const 77511) "a") (data (i32.const 77514) "a") (data (i32.const 77517) "a") (data (i32.const 77520) "a") (data (i32.const 77523) "a") (data (i32.const 77526) "a") (data (i32.const 77529) "a") (data (i32.const 77532) "a") (data (i32.const 77535) "a") (data (i32.const 77538) "a") (data (i32.const 77541) "a") (data (i32.const 77544) "a") (data (i32.const 77547) "a") (data (i32.const 77550) "a") (data (i32.const 77553) "a") (data (i32.const 77556) "a") (data (i32.const 77559) "a") (data (i32.const 77562) "a") (data (i32.const 77565) "a") (data (i32.const 77568) "a") (data (i32.const 77571) "a") (data (i32.const 77574) "a") (data (i32.const 77577) "a") (data (i32.const 77580) "a") (data (i32.const 77583) "a") (data (i32.const 77586) "a") (data (i32.const 77589) "a") (data (i32.const 77592) "a") (data (i32.const 77595) "a") (data (i32.const 77598) "a") (data (i32.const 77601) "a") (data (i32.const 77604) "a") (data (i32.const 77607) "a") (data (i32.const 77610) "a") (data (i32.const 77613) "a") (data (i32.const 77616) "a") (data (i32.const 77619) "a") (data (i32.const 77622) "a") (data (i32.const 77625) "a") (data (i32.const 77628) "a") (data (i32.const 77631) "a") (data (i32.const 77634) "a") (data (i32.const 77637) "a") (data (i32.const 77640) "a") (data (i32.const 77643) "a") (data (i32.const 77646) "a") (data (i32.const 77649) "a") (data (i32.const 77652) "a") (data (i32.const 77655) "a") (data (i32.const 77658) "a") (data (i32.const 77661) "a") (data (i32.const 77664) "a") (data (i32.const 77667) "a") (data (i32.const 77670) "a") (data (i32.const 77673) "a") (data (i32.const 77676) "a") (data (i32.const 77679) "a") (data (i32.const 77682) "a") (data (i32.const 77685) "a") (data (i32.const 77688) "a") (data (i32.const 77691) "a") (data (i32.const 77694) "a") (data (i32.const 77697) "a") (data (i32.const 77700) "a") (data (i32.const 77703) "a") (data (i32.const 77706) "a") (data (i32.const 77709) "a") (data (i32.const 77712) "a") (data (i32.const 77715) "a") (data (i32.const 77718) "a") (data (i32.const 77721) "a") (data (i32.const 77724) "a") (data (i32.const 77727) "a") (data (i32.const 77730) "a") (data (i32.const 77733) "a") (data (i32.const 77736) "a") (data (i32.const 77739) "a") (data (i32.const 77742) "a") (data (i32.const 77745) "a") (data (i32.const 77748) "a") (data (i32.const 77751) "a") (data (i32.const 77754) "a") (data (i32.const 77757) "a") (data (i32.const 77760) "a") (data (i32.const 77763) "a") (data (i32.const 77766) "a") (data (i32.const 77769) "a") (data (i32.const 77772) "a") (data (i32.const 77775) "a") (data (i32.const 77778) "a") (data (i32.const 77781) "a") (data (i32.const 77784) "a") (data (i32.const 77787) "a") (data (i32.const 77790) "a") (data (i32.const 77793) "a") (data (i32.const 77796) "a") (data (i32.const 77799) "a") (data (i32.const 77802) "a") (data (i32.const 77805) "a") (data (i32.const 77808) "a") (data (i32.const 77811) "a") (data (i32.const 77814) "a") (data (i32.const 77817) "a") (data (i32.const 77820) "a") (data (i32.const 77823) "a") (data (i32.const 77826) "a") (data (i32.const 77829) "a") (data (i32.const 77832) "a") (data (i32.const 77835) "a") (data (i32.const 77838) "a") (data (i32.const 77841) "a") (data (i32.const 77844) "a") (data (i32.const 77847) "a") (data (i32.const 77850) "a") (data (i32.const 77853) "a") (data (i32.const 77856) "a") (data (i32.const 77859) "a") (data (i32.const 77862) "a") (data (i32.const 77865) "a") (data (i32.const 77868) "a") (data (i32.const 77871) "a") (data (i32.const 77874) "a") (data (i32.const 77877) "a") (data (i32.const 77880) "a") (data (i32.const 77883) "a") (data (i32.const 77886) "a") (data (i32.const 77889) "a") (data (i32.const 77892) "a") (data (i32.const 77895) "a") (data (i32.const 77898) "a") (data (i32.const 77901) "a") (data (i32.const 77904) "a") (data (i32.const 77907) "a") (data (i32.const 77910) "a") (data (i32.const 77913) "a") (data (i32.const 77916) "a") (data (i32.const 77919) "a") (data (i32.const 77922) "a") (data (i32.const 77925) "a") (data (i32.const 77928) "a") (data (i32.const 77931) "a") (data (i32.const 77934) "a") (data (i32.const 77937) "a") (data (i32.const 77940) "a") (data (i32.const 77943) "a") (data (i32.const 77946) "a") (data (i32.const 77949) "a") (data (i32.const 77952) "a") (data (i32.const 77955) "a") (data (i32.const 77958) "a") (data (i32.const 77961) "a") (data (i32.const 77964) "a") (data (i32.const 77967) "a") (data (i32.const 77970) "a") (data (i32.const 77973) "a") (data (i32.const 77976) "a") (data (i32.const 77979) "a") (data (i32.const 77982) "a") (data (i32.const 77985) "a") (data (i32.const 77988) "a") (data (i32.const 77991) "a") (data (i32.const 77994) "a") (data (i32.const 77997) "a") (data (i32.const 78000) "a") (data (i32.const 78003) "a") (data (i32.const 78006) "a") (data (i32.const 78009) "a") (data (i32.const 78012) "a") (data (i32.const 78015) "a") (data (i32.const 78018) "a") (data (i32.const 78021) "a") (data (i32.const 78024) "a") (data (i32.const 78027) "a") (data (i32.const 78030) "a") (data (i32.const 78033) "a") (data (i32.const 78036) "a") (data (i32.const 78039) "a") (data (i32.const 78042) "a") (data (i32.const 78045) "a") (data (i32.const 78048) "a") (data (i32.const 78051) "a") (data (i32.const 78054) "a") (data (i32.const 78057) "a") (data (i32.const 78060) "a") (data (i32.const 78063) "a") (data (i32.const 78066) "a") (data (i32.const 78069) "a") (data (i32.const 78072) "a") (data (i32.const 78075) "a") (data (i32.const 78078) "a") (data (i32.const 78081) "a") (data (i32.const 78084) "a") (data (i32.const 78087) "a") (data (i32.const 78090) "a") (data (i32.const 78093) "a") (data (i32.const 78096) "a") (data (i32.const 78099) "a") (data (i32.const 78102) "a") (data (i32.const 78105) "a") (data (i32.const 78108) "a") (data (i32.const 78111) "a") (data (i32.const 78114) "a") (data (i32.const 78117) "a") (data (i32.const 78120) "a") (data (i32.const 78123) "a") (data (i32.const 78126) "a") (data (i32.const 78129) "a") (data (i32.const 78132) "a") (data (i32.const 78135) "a") (data (i32.const 78138) "a") (data (i32.const 78141) "a") (data (i32.const 78144) "a") (data (i32.const 78147) "a") (data (i32.const 78150) "a") (data (i32.const 78153) "a") (data (i32.const 78156) "a") (data (i32.const 78159) "a") (data (i32.const 78162) "a") (data (i32.const 78165) "a") (data (i32.const 78168) "a") (data (i32.const 78171) "a") (data (i32.const 78174) "a") (data (i32.const 78177) "a") (data (i32.const 78180) "a") (data (i32.const 78183) "a") (data (i32.const 78186) "a") (data (i32.const 78189) "a") (data (i32.const 78192) "a") (data (i32.const 78195) "a") (data (i32.const 78198) "a") (data (i32.const 78201) "a") (data (i32.const 78204) "a") (data (i32.const 78207) "a") (data (i32.const 78210) "a") (data (i32.const 78213) "a") (data (i32.const 78216) "a") (data (i32.const 78219) "a") (data (i32.const 78222) "a") (data (i32.const 78225) "a") (data (i32.const 78228) "a") (data (i32.const 78231) "a") (data (i32.const 78234) "a") (data (i32.const 78237) "a") (data (i32.const 78240) "a") (data (i32.const 78243) "a") (data (i32.const 78246) "a") (data (i32.const 78249) "a") (data (i32.const 78252) "a") (data (i32.const 78255) "a") (data (i32.const 78258) "a") (data (i32.const 78261) "a") (data (i32.const 78264) "a") (data (i32.const 78267) "a") (data (i32.const 78270) "a") (data (i32.const 78273) "a") (data (i32.const 78276) "a") (data (i32.const 78279) "a") (data (i32.const 78282) "a") (data (i32.const 78285) "a") (data (i32.const 78288) "a") (data (i32.const 78291) "a") (data (i32.const 78294) "a") (data (i32.const 78297) "a") (data (i32.const 78300) "a") (data (i32.const 78303) "a") (data (i32.const 78306) "a") (data (i32.const 78309) "a") (data (i32.const 78312) "a") (data (i32.const 78315) "a") (data (i32.const 78318) "a") (data (i32.const 78321) "a") (data (i32.const 78324) "a") (data (i32.const 78327) "a") (data (i32.const 78330) "a") (data (i32.const 78333) "a") (data (i32.const 78336) "a") (data (i32.const 78339) "a") (data (i32.const 78342) "a") (data (i32.const 78345) "a") (data (i32.const 78348) "a") (data (i32.const 78351) "a") (data (i32.const 78354) "a") (data (i32.const 78357) "a") (data (i32.const 78360) "a") (data (i32.const 78363) "a") (data (i32.const 78366) "a") (data (i32.const 78369) "a") (data (i32.const 78372) "a") (data (i32.const 78375) "a") (data (i32.const 78378) "a") (data (i32.const 78381) "a") (data (i32.const 78384) "a") (data (i32.const 78387) "a") (data (i32.const 78390) "a") (data (i32.const 78393) "a") (data (i32.const 78396) "a") (data (i32.const 78399) "a") (data (i32.const 78402) "a") (data (i32.const 78405) "a") (data (i32.const 78408) "a") (data (i32.const 78411) "a") (data (i32.const 78414) "a") (data (i32.const 78417) "a") (data (i32.const 78420) "a") (data (i32.const 78423) "a") (data (i32.const 78426) "a") (data (i32.const 78429) "a") (data (i32.const 78432) "a") (data (i32.const 78435) "a") (data (i32.const 78438) "a") (data (i32.const 78441) "a") (data (i32.const 78444) "a") (data (i32.const 78447) "a") (data (i32.const 78450) "a") (data (i32.const 78453) "a") (data (i32.const 78456) "a") (data (i32.const 78459) "a") (data (i32.const 78462) "a") (data (i32.const 78465) "a") (data (i32.const 78468) "a") (data (i32.const 78471) "a") (data (i32.const 78474) "a") (data (i32.const 78477) "a") (data (i32.const 78480) "a") (data (i32.const 78483) "a") (data (i32.const 78486) "a") (data (i32.const 78489) "a") (data (i32.const 78492) "a") (data (i32.const 78495) "a") (data (i32.const 78498) "a") (data (i32.const 78501) "a") (data (i32.const 78504) "a") (data (i32.const 78507) "a") (data (i32.const 78510) "a") (data (i32.const 78513) "a") (data (i32.const 78516) "a") (data (i32.const 78519) "a") (data (i32.const 78522) "a") (data (i32.const 78525) "a") (data (i32.const 78528) "a") (data (i32.const 78531) "a") (data (i32.const 78534) "a") (data (i32.const 78537) "a") (data (i32.const 78540) "a") (data (i32.const 78543) "a") (data (i32.const 78546) "a") (data (i32.const 78549) "a") (data (i32.const 78552) "a") (data (i32.const 78555) "a") (data (i32.const 78558) "a") (data (i32.const 78561) "a") (data (i32.const 78564) "a") (data (i32.const 78567) "a") (data (i32.const 78570) "a") (data (i32.const 78573) "a") (data (i32.const 78576) "a") (data (i32.const 78579) "a") (data (i32.const 78582) "a") (data (i32.const 78585) "a") (data (i32.const 78588) "a") (data (i32.const 78591) "a") (data (i32.const 78594) "a") (data (i32.const 78597) "a") (data (i32.const 78600) "a") (data (i32.const 78603) "a") (data (i32.const 78606) "a") (data (i32.const 78609) "a") (data (i32.const 78612) "a") (data (i32.const 78615) "a") (data (i32.const 78618) "a") (data (i32.const 78621) "a") (data (i32.const 78624) "a") (data (i32.const 78627) "a") (data (i32.const 78630) "a") (data (i32.const 78633) "a") (data (i32.const 78636) "a") (data (i32.const 78639) "a") (data (i32.const 78642) "a") (data (i32.const 78645) "a") (data (i32.const 78648) "a") (data (i32.const 78651) "a") (data (i32.const 78654) "a") (data (i32.const 78657) "a") (data (i32.const 78660) "a") (data (i32.const 78663) "a") (data (i32.const 78666) "a") (data (i32.const 78669) "a") (data (i32.const 78672) "a") (data (i32.const 78675) "a") (data (i32.const 78678) "a") (data (i32.const 78681) "a") (data (i32.const 78684) "a") (data (i32.const 78687) "a") (data (i32.const 78690) "a") (data (i32.const 78693) "a") (data (i32.const 78696) "a") (data (i32.const 78699) "a") (data (i32.const 78702) "a") (data (i32.const 78705) "a") (data (i32.const 78708) "a") (data (i32.const 78711) "a") (data (i32.const 78714) "a") (data (i32.const 78717) "a") (data (i32.const 78720) "a") (data (i32.const 78723) "a") (data (i32.const 78726) "a") (data (i32.const 78729) "a") (data (i32.const 78732) "a") (data (i32.const 78735) "a") (data (i32.const 78738) "a") (data (i32.const 78741) "a") (data (i32.const 78744) "a") (data (i32.const 78747) "a") (data (i32.const 78750) "a") (data (i32.const 78753) "a") (data (i32.const 78756) "a") (data (i32.const 78759) "a") (data (i32.const 78762) "a") (data (i32.const 78765) "a") (data (i32.const 78768) "a") (data (i32.const 78771) "a") (data (i32.const 78774) "a") (data (i32.const 78777) "a") (data (i32.const 78780) "a") (data (i32.const 78783) "a") (data (i32.const 78786) "a") (data (i32.const 78789) "a") (data (i32.const 78792) "a") (data (i32.const 78795) "a") (data (i32.const 78798) "a") (data (i32.const 78801) "a") (data (i32.const 78804) "a") (data (i32.const 78807) "a") (data (i32.const 78810) "a") (data (i32.const 78813) "a") (data (i32.const 78816) "a") (data (i32.const 78819) "a") (data (i32.const 78822) "a") (data (i32.const 78825) "a") (data (i32.const 78828) "a") (data (i32.const 78831) "a") (data (i32.const 78834) "a") (data (i32.const 78837) "a") (data (i32.const 78840) "a") (data (i32.const 78843) "a") (data (i32.const 78846) "a") (data (i32.const 78849) "a") (data (i32.const 78852) "a") (data (i32.const 78855) "a") (data (i32.const 78858) "a") (data (i32.const 78861) "a") (data (i32.const 78864) "a") (data (i32.const 78867) "a") (data (i32.const 78870) "a") (data (i32.const 78873) "a") (data (i32.const 78876) "a") (data (i32.const 78879) "a") (data (i32.const 78882) "a") (data (i32.const 78885) "a") (data (i32.const 78888) "a") (data (i32.const 78891) "a") (data (i32.const 78894) "a") (data (i32.const 78897) "a") (data (i32.const 78900) "a") (data (i32.const 78903) "a") (data (i32.const 78906) "a") (data (i32.const 78909) "a") (data (i32.const 78912) "a") (data (i32.const 78915) "a") (data (i32.const 78918) "a") (data (i32.const 78921) "a") (data (i32.const 78924) "a") (data (i32.const 78927) "a") (data (i32.const 78930) "a") (data (i32.const 78933) "a") (data (i32.const 78936) "a") (data (i32.const 78939) "a") (data (i32.const 78942) "a") (data (i32.const 78945) "a") (data (i32.const 78948) "a") (data (i32.const 78951) "a") (data (i32.const 78954) "a") (data (i32.const 78957) "a") (data (i32.const 78960) "a") (data (i32.const 78963) "a") (data (i32.const 78966) "a") (data (i32.const 78969) "a") (data (i32.const 78972) "a") (data (i32.const 78975) "a") (data (i32.const 78978) "a") (data (i32.const 78981) "a") (data (i32.const 78984) "a") (data (i32.const 78987) "a") (data (i32.const 78990) "a") (data (i32.const 78993) "a") (data (i32.const 78996) "a") (data (i32.const 78999) "a") (data (i32.const 79002) "a") (data (i32.const 79005) "a") (data (i32.const 79008) "a") (data (i32.const 79011) "a") (data (i32.const 79014) "a") (data (i32.const 79017) "a") (data (i32.const 79020) "a") (data (i32.const 79023) "a") (data (i32.const 79026) "a") (data (i32.const 79029) "a") (data (i32.const 79032) "a") (data (i32.const 79035) "a") (data (i32.const 79038) "a") (data (i32.const 79041) "a") (data (i32.const 79044) "a") (data (i32.const 79047) "a") (data (i32.const 79050) "a") (data (i32.const 79053) "a") (data (i32.const 79056) "a") (data (i32.const 79059) "a") (data (i32.const 79062) "a") (data (i32.const 79065) "a") (data (i32.const 79068) "a") (data (i32.const 79071) "a") (data (i32.const 79074) "a") (data (i32.const 79077) "a") (data (i32.const 79080) "a") (data (i32.const 79083) "a") (data (i32.const 79086) "a") (data (i32.const 79089) "a") (data (i32.const 79092) "a") (data (i32.const 79095) "a") (data (i32.const 79098) "a") (data (i32.const 79101) "a") (data (i32.const 79104) "a") (data (i32.const 79107) "a") (data (i32.const 79110) "a") (data (i32.const 79113) "a") (data (i32.const 79116) "a") (data (i32.const 79119) "a") (data (i32.const 79122) "a") (data (i32.const 79125) "a") (data (i32.const 79128) "a") (data (i32.const 79131) "a") (data (i32.const 79134) "a") (data (i32.const 79137) "a") (data (i32.const 79140) "a") (data (i32.const 79143) "a") (data (i32.const 79146) "a") (data (i32.const 79149) "a") (data (i32.const 79152) "a") (data (i32.const 79155) "a") (data (i32.const 79158) "a") (data (i32.const 79161) "a") (data (i32.const 79164) "a") (data (i32.const 79167) "a") (data (i32.const 79170) "a") (data (i32.const 79173) "a") (data (i32.const 79176) "a") (data (i32.const 79179) "a") (data (i32.const 79182) "a") (data (i32.const 79185) "a") (data (i32.const 79188) "a") (data (i32.const 79191) "a") (data (i32.const 79194) "a") (data (i32.const 79197) "a") (data (i32.const 79200) "a") (data (i32.const 79203) "a") (data (i32.const 79206) "a") (data (i32.const 79209) "a") (data (i32.const 79212) "a") (data (i32.const 79215) "a") (data (i32.const 79218) "a") (data (i32.const 79221) "a") (data (i32.const 79224) "a") (data (i32.const 79227) "a") (data (i32.const 79230) "a") (data (i32.const 79233) "a") (data (i32.const 79236) "a") (data (i32.const 79239) "a") (data (i32.const 79242) "a") (data (i32.const 79245) "a") (data (i32.const 79248) "a") (data (i32.const 79251) "a") (data (i32.const 79254) "a") (data (i32.const 79257) "a") (data (i32.const 79260) "a") (data (i32.const 79263) "a") (data (i32.const 79266) "a") (data (i32.const 79269) "a") (data (i32.const 79272) "a") (data (i32.const 79275) "a") (data (i32.const 79278) "a") (data (i32.const 79281) "a") (data (i32.const 79284) "a") (data (i32.const 79287) "a") (data (i32.const 79290) "a") (data (i32.const 79293) "a") (data (i32.const 79296) "a") (data (i32.const 79299) "a") (data (i32.const 79302) "a") (data (i32.const 79305) "a") (data (i32.const 79308) "a") (data (i32.const 79311) "a") (data (i32.const 79314) "a") (data (i32.const 79317) "a") (data (i32.const 79320) "a") (data (i32.const 79323) "a") (data (i32.const 79326) "a") (data (i32.const 79329) "a") (data (i32.const 79332) "a") (data (i32.const 79335) "a") (data (i32.const 79338) "a") (data (i32.const 79341) "a") (data (i32.const 79344) "a") (data (i32.const 79347) "a") (data (i32.const 79350) "a") (data (i32.const 79353) "a") (data (i32.const 79356) "a") (data (i32.const 79359) "a") (data (i32.const 79362) "a") (data (i32.const 79365) "a") (data (i32.const 79368) "a") (data (i32.const 79371) "a") (data (i32.const 79374) "a") (data (i32.const 79377) "a") (data (i32.const 79380) "a") (data (i32.const 79383) "a") (data (i32.const 79386) "a") (data (i32.const 79389) "a") (data (i32.const 79392) "a") (data (i32.const 79395) "a") (data (i32.const 79398) "a") (data (i32.const 79401) "a") (data (i32.const 79404) "a") (data (i32.const 79407) "a") (data (i32.const 79410) "a") (data (i32.const 79413) "a") (data (i32.const 79416) "a") (data (i32.const 79419) "a") (data (i32.const 79422) "a") (data (i32.const 79425) "a") (data (i32.const 79428) "a") (data (i32.const 79431) "a") (data (i32.const 79434) "a") (data (i32.const 79437) "a") (data (i32.const 79440) "a") (data (i32.const 79443) "a") (data (i32.const 79446) "a") (data (i32.const 79449) "a") (data (i32.const 79452) "a") (data (i32.const 79455) "a") (data (i32.const 79458) "a") (data (i32.const 79461) "a") (data (i32.const 79464) "a") (data (i32.const 79467) "a") (data (i32.const 79470) "a") (data (i32.const 79473) "a") (data (i32.const 79476) "a") (data (i32.const 79479) "a") (data (i32.const 79482) "a") (data (i32.const 79485) "a") (data (i32.const 79488) "a") (data (i32.const 79491) "a") (data (i32.const 79494) "a") (data (i32.const 79497) "a") (data (i32.const 79500) "a") (data (i32.const 79503) "a") (data (i32.const 79506) "a") (data (i32.const 79509) "a") (data (i32.const 79512) "a") (data (i32.const 79515) "a") (data (i32.const 79518) "a") (data (i32.const 79521) "a") (data (i32.const 79524) "a") (data (i32.const 79527) "a") (data (i32.const 79530) "a") (data (i32.const 79533) "a") (data (i32.const 79536) "a") (data (i32.const 79539) "a") (data (i32.const 79542) "a") (data (i32.const 79545) "a") (data (i32.const 79548) "a") (data (i32.const 79551) "a") (data (i32.const 79554) "a") (data (i32.const 79557) "a") (data (i32.const 79560) "a") (data (i32.const 79563) "a") (data (i32.const 79566) "a") (data (i32.const 79569) "a") (data (i32.const 79572) "a") (data (i32.const 79575) "a") (data (i32.const 79578) "a") (data (i32.const 79581) "a") (data (i32.const 79584) "a") (data (i32.const 79587) "a") (data (i32.const 79590) "a") (data (i32.const 79593) "a") (data (i32.const 79596) "a") (data (i32.const 79599) "a") (data (i32.const 79602) "a") (data (i32.const 79605) "a") (data (i32.const 79608) "a") (data (i32.const 79611) "a") (data (i32.const 79614) "a") (data (i32.const 79617) "a") (data (i32.const 79620) "a") (data (i32.const 79623) "a") (data (i32.const 79626) "a") (data (i32.const 79629) "a") (data (i32.const 79632) "a") (data (i32.const 79635) "a") (data (i32.const 79638) "a") (data (i32.const 79641) "a") (data (i32.const 79644) "a") (data (i32.const 79647) "a") (data (i32.const 79650) "a") (data (i32.const 79653) "a") (data (i32.const 79656) "a") (data (i32.const 79659) "a") (data (i32.const 79662) "a") (data (i32.const 79665) "a") (data (i32.const 79668) "a") (data (i32.const 79671) "a") (data (i32.const 79674) "a") (data (i32.const 79677) "a") (data (i32.const 79680) "a") (data (i32.const 79683) "a") (data (i32.const 79686) "a") (data (i32.const 79689) "a") (data (i32.const 79692) "a") (data (i32.const 79695) "a") (data (i32.const 79698) "a") (data (i32.const 79701) "a") (data (i32.const 79704) "a") (data (i32.const 79707) "a") (data (i32.const 79710) "a") (data (i32.const 79713) "a") (data (i32.const 79716) "a") (data (i32.const 79719) "a") (data (i32.const 79722) "a") (data (i32.const 79725) "a") (data (i32.const 79728) "a") (data (i32.const 79731) "a") (data (i32.const 79734) "a") (data (i32.const 79737) "a") (data (i32.const 79740) "a") (data (i32.const 79743) "a") (data (i32.const 79746) "a") (data (i32.const 79749) "a") (data (i32.const 79752) "a") (data (i32.const 79755) "a") (data (i32.const 79758) "a") (data (i32.const 79761) "a") (data (i32.const 79764) "a") (data (i32.const 79767) "a") (data (i32.const 79770) "a") (data (i32.const 79773) "a") (data (i32.const 79776) "a") (data (i32.const 79779) "a") (data (i32.const 79782) "a") (data (i32.const 79785) "a") (data (i32.const 79788) "a") (data (i32.const 79791) "a") (data (i32.const 79794) "a") (data (i32.const 79797) "a") (data (i32.const 79800) "a") (data (i32.const 79803) "a") (data (i32.const 79806) "a") (data (i32.const 79809) "a") (data (i32.const 79812) "a") (data (i32.const 79815) "a") (data (i32.const 79818) "a") (data (i32.const 79821) "a") (data (i32.const 79824) "a") (data (i32.const 79827) "a") (data (i32.const 79830) "a") (data (i32.const 79833) "a") (data (i32.const 79836) "a") (data (i32.const 79839) "a") (data (i32.const 79842) "a") (data (i32.const 79845) "a") (data (i32.const 79848) "a") (data (i32.const 79851) "a") (data (i32.const 79854) "a") (data (i32.const 79857) "a") (data (i32.const 79860) "a") (data (i32.const 79863) "a") (data (i32.const 79866) "a") (data (i32.const 79869) "a") (data (i32.const 79872) "a") (data (i32.const 79875) "a") (data (i32.const 79878) "a") (data (i32.const 79881) "a") (data (i32.const 79884) "a") (data (i32.const 79887) "a") (data (i32.const 79890) "a") (data (i32.const 79893) "a") (data (i32.const 79896) "a") (data (i32.const 79899) "a") (data (i32.const 79902) "a") (data (i32.const 79905) "a") (data (i32.const 79908) "a") (data (i32.const 79911) "a") (data (i32.const 79914) "a") (data (i32.const 79917) "a") (data (i32.const 79920) "a") (data (i32.const 79923) "a") (data (i32.const 79926) "a") (data (i32.const 79929) "a") (data (i32.const 79932) "a") (data (i32.const 79935) "a") (data (i32.const 79938) "a") (data (i32.const 79941) "a") (data (i32.const 79944) "a") (data (i32.const 79947) "a") (data (i32.const 79950) "a") (data (i32.const 79953) "a") (data (i32.const 79956) "a") (data (i32.const 79959) "a") (data (i32.const 79962) "a") (data (i32.const 79965) "a") (data (i32.const 79968) "a") (data (i32.const 79971) "a") (data (i32.const 79974) "a") (data (i32.const 79977) "a") (data (i32.const 79980) "a") (data (i32.const 79983) "a") (data (i32.const 79986) "a") (data (i32.const 79989) "a") (data (i32.const 79992) "a") (data (i32.const 79995) "a") (data (i32.const 79998) "a") (data (i32.const 80001) "a") (data (i32.const 80004) "a") (data (i32.const 80007) "a") (data (i32.const 80010) "a") (data (i32.const 80013) "a") (data (i32.const 80016) "a") (data (i32.const 80019) "a") (data (i32.const 80022) "a") (data (i32.const 80025) "a") (data (i32.const 80028) "a") (data (i32.const 80031) "a") (data (i32.const 80034) "a") (data (i32.const 80037) "a") (data (i32.const 80040) "a") (data (i32.const 80043) "a") (data (i32.const 80046) "a") (data (i32.const 80049) "a") (data (i32.const 80052) "a") (data (i32.const 80055) "a") (data (i32.const 80058) "a") (data (i32.const 80061) "a") (data (i32.const 80064) "a") (data (i32.const 80067) "a") (data (i32.const 80070) "a") (data (i32.const 80073) "a") (data (i32.const 80076) "a") (data (i32.const 80079) "a") (data (i32.const 80082) "a") (data (i32.const 80085) "a") (data (i32.const 80088) "a") (data (i32.const 80091) "a") (data (i32.const 80094) "a") (data (i32.const 80097) "a") (data (i32.const 80100) "a") (data (i32.const 80103) "a") (data (i32.const 80106) "a") (data (i32.const 80109) "a") (data (i32.const 80112) "a") (data (i32.const 80115) "a") (data (i32.const 80118) "a") (data (i32.const 80121) "a") (data (i32.const 80124) "a") (data (i32.const 80127) "a") (data (i32.const 80130) "a") (data (i32.const 80133) "a") (data (i32.const 80136) "a") (data (i32.const 80139) "a") (data (i32.const 80142) "a") (data (i32.const 80145) "a") (data (i32.const 80148) "a") (data (i32.const 80151) "a") (data (i32.const 80154) "a") (data (i32.const 80157) "a") (data (i32.const 80160) "a") (data (i32.const 80163) "a") (data (i32.const 80166) "a") (data (i32.const 80169) "a") (data (i32.const 80172) "a") (data (i32.const 80175) "a") (data (i32.const 80178) "a") (data (i32.const 80181) "a") (data (i32.const 80184) "a") (data (i32.const 80187) "a") (data (i32.const 80190) "a") (data (i32.const 80193) "a") (data (i32.const 80196) "a") (data (i32.const 80199) "a") (data (i32.const 80202) "a") (data (i32.const 80205) "a") (data (i32.const 80208) "a") (data (i32.const 80211) "a") (data (i32.const 80214) "a") (data (i32.const 80217) "a") (data (i32.const 80220) "a") (data (i32.const 80223) "a") (data (i32.const 80226) "a") (data (i32.const 80229) "a") (data (i32.const 80232) "a") (data (i32.const 80235) "a") (data (i32.const 80238) "a") (data (i32.const 80241) "a") (data (i32.const 80244) "a") (data (i32.const 80247) "a") (data (i32.const 80250) "a") (data (i32.const 80253) "a") (data (i32.const 80256) "a") (data (i32.const 80259) "a") (data (i32.const 80262) "a") (data (i32.const 80265) "a") (data (i32.const 80268) "a") (data (i32.const 80271) "a") (data (i32.const 80274) "a") (data (i32.const 80277) "a") (data (i32.const 80280) "a") (data (i32.const 80283) "a") (data (i32.const 80286) "a") (data (i32.const 80289) "a") (data (i32.const 80292) "a") (data (i32.const 80295) "a") (data (i32.const 80298) "a") (data (i32.const 80301) "a") (data (i32.const 80304) "a") (data (i32.const 80307) "a") (data (i32.const 80310) "a") (data (i32.const 80313) "a") (data (i32.const 80316) "a") (data (i32.const 80319) "a") (data (i32.const 80322) "a") (data (i32.const 80325) "a") (data (i32.const 80328) "a") (data (i32.const 80331) "a") (data (i32.const 80334) "a") (data (i32.const 80337) "a") (data (i32.const 80340) "a") (data (i32.const 80343) "a") (data (i32.const 80346) "a") (data (i32.const 80349) "a") (data (i32.const 80352) "a") (data (i32.const 80355) "a") (data (i32.const 80358) "a") (data (i32.const 80361) "a") (data (i32.const 80364) "a") (data (i32.const 80367) "a") (data (i32.const 80370) "a") (data (i32.const 80373) "a") (data (i32.const 80376) "a") (data (i32.const 80379) "a") (data (i32.const 80382) "a") (data (i32.const 80385) "a") (data (i32.const 80388) "a") (data (i32.const 80391) "a") (data (i32.const 80394) "a") (data (i32.const 80397) "a") (data (i32.const 80400) "a") (data (i32.const 80403) "a") (data (i32.const 80406) "a") (data (i32.const 80409) "a") (data (i32.const 80412) "a") (data (i32.const 80415) "a") (data (i32.const 80418) "a") (data (i32.const 80421) "a") (data (i32.const 80424) "a") (data (i32.const 80427) "a") (data (i32.const 80430) "a") (data (i32.const 80433) "a") (data (i32.const 80436) "a") (data (i32.const 80439) "a") (data (i32.const 80442) "a") (data (i32.const 80445) "a") (data (i32.const 80448) "a") (data (i32.const 80451) "a") (data (i32.const 80454) "a") (data (i32.const 80457) "a") (data (i32.const 80460) "a") (data (i32.const 80463) "a") (data (i32.const 80466) "a") (data (i32.const 80469) "a") (data (i32.const 80472) "a") (data (i32.const 80475) "a") (data (i32.const 80478) "a") (data (i32.const 80481) "a") (data (i32.const 80484) "a") (data (i32.const 80487) "a") (data (i32.const 80490) "a") (data (i32.const 80493) "a") (data (i32.const 80496) "a") (data (i32.const 80499) "a") (data (i32.const 80502) "a") (data (i32.const 80505) "a") (data (i32.const 80508) "a") (data (i32.const 80511) "a") (data (i32.const 80514) "a") (data (i32.const 80517) "a") (data (i32.const 80520) "a") (data (i32.const 80523) "a") (data (i32.const 80526) "a") (data (i32.const 80529) "a") (data (i32.const 80532) "a") (data (i32.const 80535) "a") (data (i32.const 80538) "a") (data (i32.const 80541) "a") (data (i32.const 80544) "a") (data (i32.const 80547) "a") (data (i32.const 80550) "a") (data (i32.const 80553) "a") (data (i32.const 80556) "a") (data (i32.const 80559) "a") (data (i32.const 80562) "a") (data (i32.const 80565) "a") (data (i32.const 80568) "a") (data (i32.const 80571) "a") (data (i32.const 80574) "a") (data (i32.const 80577) "a") (data (i32.const 80580) "a") (data (i32.const 80583) "a") (data (i32.const 80586) "a") (data (i32.const 80589) "a") (data (i32.const 80592) "a") (data (i32.const 80595) "a") (data (i32.const 80598) "a") (data (i32.const 80601) "a") (data (i32.const 80604) "a") (data (i32.const 80607) "a") (data (i32.const 80610) "a") (data (i32.const 80613) "a") (data (i32.const 80616) "a") (data (i32.const 80619) "a") (data (i32.const 80622) "a") (data (i32.const 80625) "a") (data (i32.const 80628) "a") (data (i32.const 80631) "a") (data (i32.const 80634) "a") (data (i32.const 80637) "a") (data (i32.const 80640) "a") (data (i32.const 80643) "a") (data (i32.const 80646) "a") (data (i32.const 80649) "a") (data (i32.const 80652) "a") (data (i32.const 80655) "a") (data (i32.const 80658) "a") (data (i32.const 80661) "a") (data (i32.const 80664) "a") (data (i32.const 80667) "a") (data (i32.const 80670) "a") (data (i32.const 80673) "a") (data (i32.const 80676) "a") (data (i32.const 80679) "a") (data (i32.const 80682) "a") (data (i32.const 80685) "a") (data (i32.const 80688) "a") (data (i32.const 80691) "a") (data (i32.const 80694) "a") (data (i32.const 80697) "a") (data (i32.const 80700) "a") (data (i32.const 80703) "a") (data (i32.const 80706) "a") (data (i32.const 80709) "a") (data (i32.const 80712) "a") (data (i32.const 80715) "a") (data (i32.const 80718) "a") (data (i32.const 80721) "a") (data (i32.const 80724) "a") (data (i32.const 80727) "a") (data (i32.const 80730) "a") (data (i32.const 80733) "a") (data (i32.const 80736) "a") (data (i32.const 80739) "a") (data (i32.const 80742) "a") (data (i32.const 80745) "a") (data (i32.const 80748) "a") (data (i32.const 80751) "a") (data (i32.const 80754) "a") (data (i32.const 80757) "a") (data (i32.const 80760) "a") (data (i32.const 80763) "a") (data (i32.const 80766) "a") (data (i32.const 80769) "a") (data (i32.const 80772) "a") (data (i32.const 80775) "a") (data (i32.const 80778) "a") (data (i32.const 80781) "a") (data (i32.const 80784) "a") (data (i32.const 80787) "a") (data (i32.const 80790) "a") (data (i32.const 80793) "a") (data (i32.const 80796) "a") (data (i32.const 80799) "a") (data (i32.const 80802) "a") (data (i32.const 80805) "a") (data (i32.const 80808) "a") (data (i32.const 80811) "a") (data (i32.const 80814) "a") (data (i32.const 80817) "a") (data (i32.const 80820) "a") (data (i32.const 80823) "a") (data (i32.const 80826) "a") (data (i32.const 80829) "a") (data (i32.const 80832) "a") (data (i32.const 80835) "a") (data (i32.const 80838) "a") (data (i32.const 80841) "a") (data (i32.const 80844) "a") (data (i32.const 80847) "a") (data (i32.const 80850) "a") (data (i32.const 80853) "a") (data (i32.const 80856) "a") (data (i32.const 80859) "a") (data (i32.const 80862) "a") (data (i32.const 80865) "a") (data (i32.const 80868) "a") (data (i32.const 80871) "a") (data (i32.const 80874) "a") (data (i32.const 80877) "a") (data (i32.const 80880) "a") (data (i32.const 80883) "a") (data (i32.const 80886) "a") (data (i32.const 80889) "a") (data (i32.const 80892) "a") (data (i32.const 80895) "a") (data (i32.const 80898) "a") (data (i32.const 80901) "a") (data (i32.const 80904) "a") (data (i32.const 80907) "a") (data (i32.const 80910) "a") (data (i32.const 80913) "a") (data (i32.const 80916) "a") (data (i32.const 80919) "a") (data (i32.const 80922) "a") (data (i32.const 80925) "a") (data (i32.const 80928) "a") (data (i32.const 80931) "a") (data (i32.const 80934) "a") (data (i32.const 80937) "a") (data (i32.const 80940) "a") (data (i32.const 80943) "a") (data (i32.const 80946) "a") (data (i32.const 80949) "a") (data (i32.const 80952) "a") (data (i32.const 80955) "a") (data (i32.const 80958) "a") (data (i32.const 80961) "a") (data (i32.const 80964) "a") (data (i32.const 80967) "a") (data (i32.const 80970) "a") (data (i32.const 80973) "a") (data (i32.const 80976) "a") (data (i32.const 80979) "a") (data (i32.const 80982) "a") (data (i32.const 80985) "a") (data (i32.const 80988) "a") (data (i32.const 80991) "a") (data (i32.const 80994) "a") (data (i32.const 80997) "a") (data (i32.const 81000) "a") (data (i32.const 81003) "a") (data (i32.const 81006) "a") (data (i32.const 81009) "a") (data (i32.const 81012) "a") (data (i32.const 81015) "a") (data (i32.const 81018) "a") (data (i32.const 81021) "a") (data (i32.const 81024) "a") (data (i32.const 81027) "a") (data (i32.const 81030) "a") (data (i32.const 81033) "a") (data (i32.const 81036) "a") (data (i32.const 81039) "a") (data (i32.const 81042) "a") (data (i32.const 81045) "a") (data (i32.const 81048) "a") (data (i32.const 81051) "a") (data (i32.const 81054) "a") (data (i32.const 81057) "a") (data (i32.const 81060) "a") (data (i32.const 81063) "a") (data (i32.const 81066) "a") (data (i32.const 81069) "a") (data (i32.const 81072) "a") (data (i32.const 81075) "a") (data (i32.const 81078) "a") (data (i32.const 81081) "a") (data (i32.const 81084) "a") (data (i32.const 81087) "a") (data (i32.const 81090) "a") (data (i32.const 81093) "a") (data (i32.const 81096) "a") (data (i32.const 81099) "a") (data (i32.const 81102) "a") (data (i32.const 81105) "a") (data (i32.const 81108) "a") (data (i32.const 81111) "a") (data (i32.const 81114) "a") (data (i32.const 81117) "a") (data (i32.const 81120) "a") (data (i32.const 81123) "a") (data (i32.const 81126) "a") (data (i32.const 81129) "a") (data (i32.const 81132) "a") (data (i32.const 81135) "a") (data (i32.const 81138) "a") (data (i32.const 81141) "a") (data (i32.const 81144) "a") (data (i32.const 81147) "a") (data (i32.const 81150) "a") (data (i32.const 81153) "a") (data (i32.const 81156) "a") (data (i32.const 81159) "a") (data (i32.const 81162) "a") (data (i32.const 81165) "a") (data (i32.const 81168) "a") (data (i32.const 81171) "a") (data (i32.const 81174) "a") (data (i32.const 81177) "a") (data (i32.const 81180) "a") (data (i32.const 81183) "a") (data (i32.const 81186) "a") (data (i32.const 81189) "a") (data (i32.const 81192) "a") (data (i32.const 81195) "a") (data (i32.const 81198) "a") (data (i32.const 81201) "a") (data (i32.const 81204) "a") (data (i32.const 81207) "a") (data (i32.const 81210) "a") (data (i32.const 81213) "a") (data (i32.const 81216) "a") (data (i32.const 81219) "a") (data (i32.const 81222) "a") (data (i32.const 81225) "a") (data (i32.const 81228) "a") (data (i32.const 81231) "a") (data (i32.const 81234) "a") (data (i32.const 81237) "a") (data (i32.const 81240) "a") (data (i32.const 81243) "a") (data (i32.const 81246) "a") (data (i32.const 81249) "a") (data (i32.const 81252) "a") (data (i32.const 81255) "a") (data (i32.const 81258) "a") (data (i32.const 81261) "a") (data (i32.const 81264) "a") (data (i32.const 81267) "a") (data (i32.const 81270) "a") (data (i32.const 81273) "a") (data (i32.const 81276) "a") (data (i32.const 81279) "a") (data (i32.const 81282) "a") (data (i32.const 81285) "a") (data (i32.const 81288) "a") (data (i32.const 81291) "a") (data (i32.const 81294) "a") (data (i32.const 81297) "a") (data (i32.const 81300) "a") (data (i32.const 81303) "a") (data (i32.const 81306) "a") (data (i32.const 81309) "a") (data (i32.const 81312) "a") (data (i32.const 81315) "a") (data (i32.const 81318) "a") (data (i32.const 81321) "a") (data (i32.const 81324) "a") (data (i32.const 81327) "a") (data (i32.const 81330) "a") (data (i32.const 81333) "a") (data (i32.const 81336) "a") (data (i32.const 81339) "a") (data (i32.const 81342) "a") (data (i32.const 81345) "a") (data (i32.const 81348) "a") (data (i32.const 81351) "a") (data (i32.const 81354) "a") (data (i32.const 81357) "a") (data (i32.const 81360) "a") (data (i32.const 81363) "a") (data (i32.const 81366) "a") (data (i32.const 81369) "a") (data (i32.const 81372) "a") (data (i32.const 81375) "a") (data (i32.const 81378) "a") (data (i32.const 81381) "a") (data (i32.const 81384) "a") (data (i32.const 81387) "a") (data (i32.const 81390) "a") (data (i32.const 81393) "a") (data (i32.const 81396) "a") (data (i32.const 81399) "a") (data (i32.const 81402) "a") (data (i32.const 81405) "a") (data (i32.const 81408) "a") (data (i32.const 81411) "a") (data (i32.const 81414) "a") (data (i32.const 81417) "a") (data (i32.const 81420) "a") (data (i32.const 81423) "a") (data (i32.const 81426) "a") (data (i32.const 81429) "a") (data (i32.const 81432) "a") (data (i32.const 81435) "a") (data (i32.const 81438) "a") (data (i32.const 81441) "a") (data (i32.const 81444) "a") (data (i32.const 81447) "a") (data (i32.const 81450) "a") (data (i32.const 81453) "a") (data (i32.const 81456) "a") (data (i32.const 81459) "a") (data (i32.const 81462) "a") (data (i32.const 81465) "a") (data (i32.const 81468) "a") (data (i32.const 81471) "a") (data (i32.const 81474) "a") (data (i32.const 81477) "a") (data (i32.const 81480) "a") (data (i32.const 81483) "a") (data (i32.const 81486) "a") (data (i32.const 81489) "a") (data (i32.const 81492) "a") (data (i32.const 81495) "a") (data (i32.const 81498) "a") (data (i32.const 81501) "a") (data (i32.const 81504) "a") (data (i32.const 81507) "a") (data (i32.const 81510) "a") (data (i32.const 81513) "a") (data (i32.const 81516) "a") (data (i32.const 81519) "a") (data (i32.const 81522) "a") (data (i32.const 81525) "a") (data (i32.const 81528) "a") (data (i32.const 81531) "a") (data (i32.const 81534) "a") (data (i32.const 81537) "a") (data (i32.const 81540) "a") (data (i32.const 81543) "a") (data (i32.const 81546) "a") (data (i32.const 81549) "a") (data (i32.const 81552) "a") (data (i32.const 81555) "a") (data (i32.const 81558) "a") (data (i32.const 81561) "a") (data (i32.const 81564) "a") (data (i32.const 81567) "a") (data (i32.const 81570) "a") (data (i32.const 81573) "a") (data (i32.const 81576) "a") (data (i32.const 81579) "a") (data (i32.const 81582) "a") (data (i32.const 81585) "a") (data (i32.const 81588) "a") (data (i32.const 81591) "a") (data (i32.const 81594) "a") (data (i32.const 81597) "a") (data (i32.const 81600) "a") (data (i32.const 81603) "a") (data (i32.const 81606) "a") (data (i32.const 81609) "a") (data (i32.const 81612) "a") (data (i32.const 81615) "a") (data (i32.const 81618) "a") (data (i32.const 81621) "a") (data (i32.const 81624) "a") (data (i32.const 81627) "a") (data (i32.const 81630) "a") (data (i32.const 81633) "a") (data (i32.const 81636) "a") (data (i32.const 81639) "a") (data (i32.const 81642) "a") (data (i32.const 81645) "a") (data (i32.const 81648) "a") (data (i32.const 81651) "a") (data (i32.const 81654) "a") (data (i32.const 81657) "a") (data (i32.const 81660) "a") (data (i32.const 81663) "a") (data (i32.const 81666) "a") (data (i32.const 81669) "a") (data (i32.const 81672) "a") (data (i32.const 81675) "a") (data (i32.const 81678) "a") (data (i32.const 81681) "a") (data (i32.const 81684) "a") (data (i32.const 81687) "a") (data (i32.const 81690) "a") (data (i32.const 81693) "a") (data (i32.const 81696) "a") (data (i32.const 81699) "a") (data (i32.const 81702) "a") (data (i32.const 81705) "a") (data (i32.const 81708) "a") (data (i32.const 81711) "a") (data (i32.const 81714) "a") (data (i32.const 81717) "a") (data (i32.const 81720) "a") (data (i32.const 81723) "a") (data (i32.const 81726) "a") (data (i32.const 81729) "a") (data (i32.const 81732) "a") (data (i32.const 81735) "a") (data (i32.const 81738) "a") (data (i32.const 81741) "a") (data (i32.const 81744) "a") (data (i32.const 81747) "a") (data (i32.const 81750) "a") (data (i32.const 81753) "a") (data (i32.const 81756) "a") (data (i32.const 81759) "a") (data (i32.const 81762) "a") (data (i32.const 81765) "a") (data (i32.const 81768) "a") (data (i32.const 81771) "a") (data (i32.const 81774) "a") (data (i32.const 81777) "a") (data (i32.const 81780) "a") (data (i32.const 81783) "a") (data (i32.const 81786) "a") (data (i32.const 81789) "a") (data (i32.const 81792) "a") (data (i32.const 81795) "a") (data (i32.const 81798) "a") (data (i32.const 81801) "a") (data (i32.const 81804) "a") (data (i32.const 81807) "a") (data (i32.const 81810) "a") (data (i32.const 81813) "a") (data (i32.const 81816) "a") (data (i32.const 81819) "a") (data (i32.const 81822) "a") (data (i32.const 81825) "a") (data (i32.const 81828) "a") (data (i32.const 81831) "a") (data (i32.const 81834) "a") (data (i32.const 81837) "a") (data (i32.const 81840) "a") (data (i32.const 81843) "a") (data (i32.const 81846) "a") (data (i32.const 81849) "a") (data (i32.const 81852) "a") (data (i32.const 81855) "a") (data (i32.const 81858) "a") (data (i32.const 81861) "a") (data (i32.const 81864) "a") (data (i32.const 81867) "a") (data (i32.const 81870) "a") (data (i32.const 81873) "a") (data (i32.const 81876) "a") (data (i32.const 81879) "a") (data (i32.const 81882) "a") (data (i32.const 81885) "a") (data (i32.const 81888) "a") (data (i32.const 81891) "a") (data (i32.const 81894) "a") (data (i32.const 81897) "a") (data (i32.const 81900) "a") (data (i32.const 81903) "a") (data (i32.const 81906) "a") (data (i32.const 81909) "a") (data (i32.const 81912) "a") (data (i32.const 81915) "a") (data (i32.const 81918) "a") (data (i32.const 81921) "a") (data (i32.const 81924) "a") (data (i32.const 81927) "a") (data (i32.const 81930) "a") (data (i32.const 81933) "a") (data (i32.const 81936) "a") (data (i32.const 81939) "a") (data (i32.const 81942) "a") (data (i32.const 81945) "a") (data (i32.const 81948) "a") (data (i32.const 81951) "a") (data (i32.const 81954) "a") (data (i32.const 81957) "a") (data (i32.const 81960) "a") (data (i32.const 81963) "a") (data (i32.const 81966) "a") (data (i32.const 81969) "a") (data (i32.const 81972) "a") (data (i32.const 81975) "a") (data (i32.const 81978) "a") (data (i32.const 81981) "a") (data (i32.const 81984) "a") (data (i32.const 81987) "a") (data (i32.const 81990) "a") (data (i32.const 81993) "a") (data (i32.const 81996) "a") (data (i32.const 81999) "a") (data (i32.const 82002) "a") (data (i32.const 82005) "a") (data (i32.const 82008) "a") (data (i32.const 82011) "a") (data (i32.const 82014) "a") (data (i32.const 82017) "a") (data (i32.const 82020) "a") (data (i32.const 82023) "a") (data (i32.const 82026) "a") (data (i32.const 82029) "a") (data (i32.const 82032) "a") (data (i32.const 82035) "a") (data (i32.const 82038) "a") (data (i32.const 82041) "a") (data (i32.const 82044) "a") (data (i32.const 82047) "a") (data (i32.const 82050) "a") (data (i32.const 82053) "a") (data (i32.const 82056) "a") (data (i32.const 82059) "a") (data (i32.const 82062) "a") (data (i32.const 82065) "a") (data (i32.const 82068) "a") (data (i32.const 82071) "a") (data (i32.const 82074) "a") (data (i32.const 82077) "a") (data (i32.const 82080) "a") (data (i32.const 82083) "a") (data (i32.const 82086) "a") (data (i32.const 82089) "a") (data (i32.const 82092) "a") (data (i32.const 82095) "a") (data (i32.const 82098) "a") (data (i32.const 82101) "a") (data (i32.const 82104) "a") (data (i32.const 82107) "a") (data (i32.const 82110) "a") (data (i32.const 82113) "a") (data (i32.const 82116) "a") (data (i32.const 82119) "a") (data (i32.const 82122) "a") (data (i32.const 82125) "a") (data (i32.const 82128) "a") (data (i32.const 82131) "a") (data (i32.const 82134) "a") (data (i32.const 82137) "a") (data (i32.const 82140) "a") (data (i32.const 82143) "a") (data (i32.const 82146) "a") (data (i32.const 82149) "a") (data (i32.const 82152) "a") (data (i32.const 82155) "a") (data (i32.const 82158) "a") (data (i32.const 82161) "a") (data (i32.const 82164) "a") (data (i32.const 82167) "a") (data (i32.const 82170) "a") (data (i32.const 82173) "a") (data (i32.const 82176) "a") (data (i32.const 82179) "a") (data (i32.const 82182) "a") (data (i32.const 82185) "a") (data (i32.const 82188) "a") (data (i32.const 82191) "a") (data (i32.const 82194) "a") (data (i32.const 82197) "a") (data (i32.const 82200) "a") (data (i32.const 82203) "a") (data (i32.const 82206) "a") (data (i32.const 82209) "a") (data (i32.const 82212) "a") (data (i32.const 82215) "a") (data (i32.const 82218) "a") (data (i32.const 82221) "a") (data (i32.const 82224) "a") (data (i32.const 82227) "a") (data (i32.const 82230) "a") (data (i32.const 82233) "a") (data (i32.const 82236) "a") (data (i32.const 82239) "a") (data (i32.const 82242) "a") (data (i32.const 82245) "a") (data (i32.const 82248) "a") (data (i32.const 82251) "a") (data (i32.const 82254) "a") (data (i32.const 82257) "a") (data (i32.const 82260) "a") (data (i32.const 82263) "a") (data (i32.const 82266) "a") (data (i32.const 82269) "a") (data (i32.const 82272) "a") (data (i32.const 82275) "a") (data (i32.const 82278) "a") (data (i32.const 82281) "a") (data (i32.const 82284) "a") (data (i32.const 82287) "a") (data (i32.const 82290) "a") (data (i32.const 82293) "a") (data (i32.const 82296) "a") (data (i32.const 82299) "a") (data (i32.const 82302) "a") (data (i32.const 82305) "a") (data (i32.const 82308) "a") (data (i32.const 82311) "a") (data (i32.const 82314) "a") (data (i32.const 82317) "a") (data (i32.const 82320) "a") (data (i32.const 82323) "a") (data (i32.const 82326) "a") (data (i32.const 82329) "a") (data (i32.const 82332) "a") (data (i32.const 82335) "a") (data (i32.const 82338) "a") (data (i32.const 82341) "a") (data (i32.const 82344) "a") (data (i32.const 82347) "a") (data (i32.const 82350) "a") (data (i32.const 82353) "a") (data (i32.const 82356) "a") (data (i32.const 82359) "a") (data (i32.const 82362) "a") (data (i32.const 82365) "a") (data (i32.const 82368) "a") (data (i32.const 82371) "a") (data (i32.const 82374) "a") (data (i32.const 82377) "a") (data (i32.const 82380) "a") (data (i32.const 82383) "a") (data (i32.const 82386) "a") (data (i32.const 82389) "a") (data (i32.const 82392) "a") (data (i32.const 82395) "a") (data (i32.const 82398) "a") (data (i32.const 82401) "a") (data (i32.const 82404) "a") (data (i32.const 82407) "a") (data (i32.const 82410) "a") (data (i32.const 82413) "a") (data (i32.const 82416) "a") (data (i32.const 82419) "a") (data (i32.const 82422) "a") (data (i32.const 82425) "a") (data (i32.const 82428) "a") (data (i32.const 82431) "a") (data (i32.const 82434) "a") (data (i32.const 82437) "a") (data (i32.const 82440) "a") (data (i32.const 82443) "a") (data (i32.const 82446) "a") (data (i32.const 82449) "a") (data (i32.const 82452) "a") (data (i32.const 82455) "a") (data (i32.const 82458) "a") (data (i32.const 82461) "a") (data (i32.const 82464) "a") (data (i32.const 82467) "a") (data (i32.const 82470) "a") (data (i32.const 82473) "a") (data (i32.const 82476) "a") (data (i32.const 82479) "a") (data (i32.const 82482) "a") (data (i32.const 82485) "a") (data (i32.const 82488) "a") (data (i32.const 82491) "a") (data (i32.const 82494) "a") (data (i32.const 82497) "a") (data (i32.const 82500) "a") (data (i32.const 82503) "a") (data (i32.const 82506) "a") (data (i32.const 82509) "a") (data (i32.const 82512) "a") (data (i32.const 82515) "a") (data (i32.const 82518) "a") (data (i32.const 82521) "a") (data (i32.const 82524) "a") (data (i32.const 82527) "a") (data (i32.const 82530) "a") (data (i32.const 82533) "a") (data (i32.const 82536) "a") (data (i32.const 82539) "a") (data (i32.const 82542) "a") (data (i32.const 82545) "a") (data (i32.const 82548) "a") (data (i32.const 82551) "a") (data (i32.const 82554) "a") (data (i32.const 82557) "a") (data (i32.const 82560) "a") (data (i32.const 82563) "a") (data (i32.const 82566) "a") (data (i32.const 82569) "a") (data (i32.const 82572) "a") (data (i32.const 82575) "a") (data (i32.const 82578) "a") (data (i32.const 82581) "a") (data (i32.const 82584) "a") (data (i32.const 82587) "a") (data (i32.const 82590) "a") (data (i32.const 82593) "a") (data (i32.const 82596) "a") (data (i32.const 82599) "a") (data (i32.const 82602) "a") (data (i32.const 82605) "a") (data (i32.const 82608) "a") (data (i32.const 82611) "a") (data (i32.const 82614) "a") (data (i32.const 82617) "a") (data (i32.const 82620) "a") (data (i32.const 82623) "a") (data (i32.const 82626) "a") (data (i32.const 82629) "a") (data (i32.const 82632) "a") (data (i32.const 82635) "a") (data (i32.const 82638) "a") (data (i32.const 82641) "a") (data (i32.const 82644) "a") (data (i32.const 82647) "a") (data (i32.const 82650) "a") (data (i32.const 82653) "a") (data (i32.const 82656) "a") (data (i32.const 82659) "a") (data (i32.const 82662) "a") (data (i32.const 82665) "a") (data (i32.const 82668) "a") (data (i32.const 82671) "a") (data (i32.const 82674) "a") (data (i32.const 82677) "a") (data (i32.const 82680) "a") (data (i32.const 82683) "a") (data (i32.const 82686) "a") (data (i32.const 82689) "a") (data (i32.const 82692) "a") (data (i32.const 82695) "a") (data (i32.const 82698) "a") (data (i32.const 82701) "a") (data (i32.const 82704) "a") (data (i32.const 82707) "a") (data (i32.const 82710) "a") (data (i32.const 82713) "a") (data (i32.const 82716) "a") (data (i32.const 82719) "a") (data (i32.const 82722) "a") (data (i32.const 82725) "a") (data (i32.const 82728) "a") (data (i32.const 82731) "a") (data (i32.const 82734) "a") (data (i32.const 82737) "a") (data (i32.const 82740) "a") (data (i32.const 82743) "a") (data (i32.const 82746) "a") (data (i32.const 82749) "a") (data (i32.const 82752) "a") (data (i32.const 82755) "a") (data (i32.const 82758) "a") (data (i32.const 82761) "a") (data (i32.const 82764) "a") (data (i32.const 82767) "a") (data (i32.const 82770) "a") (data (i32.const 82773) "a") (data (i32.const 82776) "a") (data (i32.const 82779) "a") (data (i32.const 82782) "a") (data (i32.const 82785) "a") (data (i32.const 82788) "a") (data (i32.const 82791) "a") (data (i32.const 82794) "a") (data (i32.const 82797) "a") (data (i32.const 82800) "a") (data (i32.const 82803) "a") (data (i32.const 82806) "a") (data (i32.const 82809) "a") (data (i32.const 82812) "a") (data (i32.const 82815) "a") (data (i32.const 82818) "a") (data (i32.const 82821) "a") (data (i32.const 82824) "a") (data (i32.const 82827) "a") (data (i32.const 82830) "a") (data (i32.const 82833) "a") (data (i32.const 82836) "a") (data (i32.const 82839) "a") (data (i32.const 82842) "a") (data (i32.const 82845) "a") (data (i32.const 82848) "a") (data (i32.const 82851) "a") (data (i32.const 82854) "a") (data (i32.const 82857) "a") (data (i32.const 82860) "a") (data (i32.const 82863) "a") (data (i32.const 82866) "a") (data (i32.const 82869) "a") (data (i32.const 82872) "a") (data (i32.const 82875) "a") (data (i32.const 82878) "a") (data (i32.const 82881) "a") (data (i32.const 82884) "a") (data (i32.const 82887) "a") (data (i32.const 82890) "a") (data (i32.const 82893) "a") (data (i32.const 82896) "a") (data (i32.const 82899) "a") (data (i32.const 82902) "a") (data (i32.const 82905) "a") (data (i32.const 82908) "a") (data (i32.const 82911) "a") (data (i32.const 82914) "a") (data (i32.const 82917) "a") (data (i32.const 82920) "a") (data (i32.const 82923) "a") (data (i32.const 82926) "a") (data (i32.const 82929) "a") (data (i32.const 82932) "a") (data (i32.const 82935) "a") (data (i32.const 82938) "a") (data (i32.const 82941) "a") (data (i32.const 82944) "a") (data (i32.const 82947) "a") (data (i32.const 82950) "a") (data (i32.const 82953) "a") (data (i32.const 82956) "a") (data (i32.const 82959) "a") (data (i32.const 82962) "a") (data (i32.const 82965) "a") (data (i32.const 82968) "a") (data (i32.const 82971) "a") (data (i32.const 82974) "a") (data (i32.const 82977) "a") (data (i32.const 82980) "a") (data (i32.const 82983) "a") (data (i32.const 82986) "a") (data (i32.const 82989) "a") (data (i32.const 82992) "a") (data (i32.const 82995) "a") (data (i32.const 82998) "a") (data (i32.const 83001) "a") (data (i32.const 83004) "a") (data (i32.const 83007) "a") (data (i32.const 83010) "a") (data (i32.const 83013) "a") (data (i32.const 83016) "a") (data (i32.const 83019) "a") (data (i32.const 83022) "a") (data (i32.const 83025) "a") (data (i32.const 83028) "a") (data (i32.const 83031) "a") (data (i32.const 83034) "a") (data (i32.const 83037) "a") (data (i32.const 83040) "a") (data (i32.const 83043) "a") (data (i32.const 83046) "a") (data (i32.const 83049) "a") (data (i32.const 83052) "a") (data (i32.const 83055) "a") (data (i32.const 83058) "a") (data (i32.const 83061) "a") (data (i32.const 83064) "a") (data (i32.const 83067) "a") (data (i32.const 83070) "a") (data (i32.const 83073) "a") (data (i32.const 83076) "a") (data (i32.const 83079) "a") (data (i32.const 83082) "a") (data (i32.const 83085) "a") (data (i32.const 83088) "a") (data (i32.const 83091) "a") (data (i32.const 83094) "a") (data (i32.const 83097) "a") (data (i32.const 83100) "a") (data (i32.const 83103) "a") (data (i32.const 83106) "a") (data (i32.const 83109) "a") (data (i32.const 83112) "a") (data (i32.const 83115) "a") (data (i32.const 83118) "a") (data (i32.const 83121) "a") (data (i32.const 83124) "a") (data (i32.const 83127) "a") (data (i32.const 83130) "a") (data (i32.const 83133) "a") (data (i32.const 83136) "a") (data (i32.const 83139) "a") (data (i32.const 83142) "a") (data (i32.const 83145) "a") (data (i32.const 83148) "a") (data (i32.const 83151) "a") (data (i32.const 83154) "a") (data (i32.const 83157) "a") (data (i32.const 83160) "a") (data (i32.const 83163) "a") (data (i32.const 83166) "a") (data (i32.const 83169) "a") (data (i32.const 83172) "a") (data (i32.const 83175) "a") (data (i32.const 83178) "a") (data (i32.const 83181) "a") (data (i32.const 83184) "a") (data (i32.const 83187) "a") (data (i32.const 83190) "a") (data (i32.const 83193) "a") (data (i32.const 83196) "a") (data (i32.const 83199) "a") (data (i32.const 83202) "a") (data (i32.const 83205) "a") (data (i32.const 83208) "a") (data (i32.const 83211) "a") (data (i32.const 83214) "a") (data (i32.const 83217) "a") (data (i32.const 83220) "a") (data (i32.const 83223) "a") (data (i32.const 83226) "a") (data (i32.const 83229) "a") (data (i32.const 83232) "a") (data (i32.const 83235) "a") (data (i32.const 83238) "a") (data (i32.const 83241) "a") (data (i32.const 83244) "a") (data (i32.const 83247) "a") (data (i32.const 83250) "a") (data (i32.const 83253) "a") (data (i32.const 83256) "a") (data (i32.const 83259) "a") (data (i32.const 83262) "a") (data (i32.const 83265) "a") (data (i32.const 83268) "a") (data (i32.const 83271) "a") (data (i32.const 83274) "a") (data (i32.const 83277) "a") (data (i32.const 83280) "a") (data (i32.const 83283) "a") (data (i32.const 83286) "a") (data (i32.const 83289) "a") (data (i32.const 83292) "a") (data (i32.const 83295) "a") (data (i32.const 83298) "a") (data (i32.const 83301) "a") (data (i32.const 83304) "a") (data (i32.const 83307) "a") (data (i32.const 83310) "a") (data (i32.const 83313) "a") (data (i32.const 83316) "a") (data (i32.const 83319) "a") (data (i32.const 83322) "a") (data (i32.const 83325) "a") (data (i32.const 83328) "a") (data (i32.const 83331) "a") (data (i32.const 83334) "a") (data (i32.const 83337) "a") (data (i32.const 83340) "a") (data (i32.const 83343) "a") (data (i32.const 83346) "a") (data (i32.const 83349) "a") (data (i32.const 83352) "a") (data (i32.const 83355) "a") (data (i32.const 83358) "a") (data (i32.const 83361) "a") (data (i32.const 83364) "a") (data (i32.const 83367) "a") (data (i32.const 83370) "a") (data (i32.const 83373) "a") (data (i32.const 83376) "a") (data (i32.const 83379) "a") (data (i32.const 83382) "a") (data (i32.const 83385) "a") (data (i32.const 83388) "a") (data (i32.const 83391) "a") (data (i32.const 83394) "a") (data (i32.const 83397) "a") (data (i32.const 83400) "a") (data (i32.const 83403) "a") (data (i32.const 83406) "a") (data (i32.const 83409) "a") (data (i32.const 83412) "a") (data (i32.const 83415) "a") (data (i32.const 83418) "a") (data (i32.const 83421) "a") (data (i32.const 83424) "a") (data (i32.const 83427) "a") (data (i32.const 83430) "a") (data (i32.const 83433) "a") (data (i32.const 83436) "a") (data (i32.const 83439) "a") (data (i32.const 83442) "a") (data (i32.const 83445) "a") (data (i32.const 83448) "a") (data (i32.const 83451) "a") (data (i32.const 83454) "a") (data (i32.const 83457) "a") (data (i32.const 83460) "a") (data (i32.const 83463) "a") (data (i32.const 83466) "a") (data (i32.const 83469) "a") (data (i32.const 83472) "a") (data (i32.const 83475) "a") (data (i32.const 83478) "a") (data (i32.const 83481) "a") (data (i32.const 83484) "a") (data (i32.const 83487) "a") (data (i32.const 83490) "a") (data (i32.const 83493) "a") (data (i32.const 83496) "a") (data (i32.const 83499) "a") (data (i32.const 83502) "a") (data (i32.const 83505) "a") (data (i32.const 83508) "a") (data (i32.const 83511) "a") (data (i32.const 83514) "a") (data (i32.const 83517) "a") (data (i32.const 83520) "a") (data (i32.const 83523) "a") (data (i32.const 83526) "a") (data (i32.const 83529) "a") (data (i32.const 83532) "a") (data (i32.const 83535) "a") (data (i32.const 83538) "a") (data (i32.const 83541) "a") (data (i32.const 83544) "a") (data (i32.const 83547) "a") (data (i32.const 83550) "a") (data (i32.const 83553) "a") (data (i32.const 83556) "a") (data (i32.const 83559) "a") (data (i32.const 83562) "a") (data (i32.const 83565) "a") (data (i32.const 83568) "a") (data (i32.const 83571) "a") (data (i32.const 83574) "a") (data (i32.const 83577) "a") (data (i32.const 83580) "a") (data (i32.const 83583) "a") (data (i32.const 83586) "a") (data (i32.const 83589) "a") (data (i32.const 83592) "a") (data (i32.const 83595) "a") (data (i32.const 83598) "a") (data (i32.const 83601) "a") (data (i32.const 83604) "a") (data (i32.const 83607) "a") (data (i32.const 83610) "a") (data (i32.const 83613) "a") (data (i32.const 83616) "a") (data (i32.const 83619) "a") (data (i32.const 83622) "a") (data (i32.const 83625) "a") (data (i32.const 83628) "a") (data (i32.const 83631) "a") (data (i32.const 83634) "a") (data (i32.const 83637) "a") (data (i32.const 83640) "a") (data (i32.const 83643) "a") (data (i32.const 83646) "a") (data (i32.const 83649) "a") (data (i32.const 83652) "a") (data (i32.const 83655) "a") (data (i32.const 83658) "a") (data (i32.const 83661) "a") (data (i32.const 83664) "a") (data (i32.const 83667) "a") (data (i32.const 83670) "a") (data (i32.const 83673) "a") (data (i32.const 83676) "a") (data (i32.const 83679) "a") (data (i32.const 83682) "a") (data (i32.const 83685) "a") (data (i32.const 83688) "a") (data (i32.const 83691) "a") (data (i32.const 83694) "a") (data (i32.const 83697) "a") (data (i32.const 83700) "a") (data (i32.const 83703) "a") (data (i32.const 83706) "a") (data (i32.const 83709) "a") (data (i32.const 83712) "a") (data (i32.const 83715) "a") (data (i32.const 83718) "a") (data (i32.const 83721) "a") (data (i32.const 83724) "a") (data (i32.const 83727) "a") (data (i32.const 83730) "a") (data (i32.const 83733) "a") (data (i32.const 83736) "a") (data (i32.const 83739) "a") (data (i32.const 83742) "a") (data (i32.const 83745) "a") (data (i32.const 83748) "a") (data (i32.const 83751) "a") (data (i32.const 83754) "a") (data (i32.const 83757) "a") (data (i32.const 83760) "a") (data (i32.const 83763) "a") (data (i32.const 83766) "a") (data (i32.const 83769) "a") (data (i32.const 83772) "a") (data (i32.const 83775) "a") (data (i32.const 83778) "a") (data (i32.const 83781) "a") (data (i32.const 83784) "a") (data (i32.const 83787) "a") (data (i32.const 83790) "a") (data (i32.const 83793) "a") (data (i32.const 83796) "a") (data (i32.const 83799) "a") (data (i32.const 83802) "a") (data (i32.const 83805) "a") (data (i32.const 83808) "a") (data (i32.const 83811) "a") (data (i32.const 83814) "a") (data (i32.const 83817) "a") (data (i32.const 83820) "a") (data (i32.const 83823) "a") (data (i32.const 83826) "a") (data (i32.const 83829) "a") (data (i32.const 83832) "a") (data (i32.const 83835) "a") (data (i32.const 83838) "a") (data (i32.const 83841) "a") (data (i32.const 83844) "a") (data (i32.const 83847) "a") (data (i32.const 83850) "a") (data (i32.const 83853) "a") (data (i32.const 83856) "a") (data (i32.const 83859) "a") (data (i32.const 83862) "a") (data (i32.const 83865) "a") (data (i32.const 83868) "a") (data (i32.const 83871) "a") (data (i32.const 83874) "a") (data (i32.const 83877) "a") (data (i32.const 83880) "a") (data (i32.const 83883) "a") (data (i32.const 83886) "a") (data (i32.const 83889) "a") (data (i32.const 83892) "a") (data (i32.const 83895) "a") (data (i32.const 83898) "a") (data (i32.const 83901) "a") (data (i32.const 83904) "a") (data (i32.const 83907) "a") (data (i32.const 83910) "a") (data (i32.const 83913) "a") (data (i32.const 83916) "a") (data (i32.const 83919) "a") (data (i32.const 83922) "a") (data (i32.const 83925) "a") (data (i32.const 83928) "a") (data (i32.const 83931) "a") (data (i32.const 83934) "a") (data (i32.const 83937) "a") (data (i32.const 83940) "a") (data (i32.const 83943) "a") (data (i32.const 83946) "a") (data (i32.const 83949) "a") (data (i32.const 83952) "a") (data (i32.const 83955) "a") (data (i32.const 83958) "a") (data (i32.const 83961) "a") (data (i32.const 83964) "a") (data (i32.const 83967) "a") (data (i32.const 83970) "a") (data (i32.const 83973) "a") (data (i32.const 83976) "a") (data (i32.const 83979) "a") (data (i32.const 83982) "a") (data (i32.const 83985) "a") (data (i32.const 83988) "a") (data (i32.const 83991) "a") (data (i32.const 83994) "a") (data (i32.const 83997) "a") (data (i32.const 84000) "a") (data (i32.const 84003) "a") (data (i32.const 84006) "a") (data (i32.const 84009) "a") (data (i32.const 84012) "a") (data (i32.const 84015) "a") (data (i32.const 84018) "a") (data (i32.const 84021) "a") (data (i32.const 84024) "a") (data (i32.const 84027) "a") (data (i32.const 84030) "a") (data (i32.const 84033) "a") (data (i32.const 84036) "a") (data (i32.const 84039) "a") (data (i32.const 84042) "a") (data (i32.const 84045) "a") (data (i32.const 84048) "a") (data (i32.const 84051) "a") (data (i32.const 84054) "a") (data (i32.const 84057) "a") (data (i32.const 84060) "a") (data (i32.const 84063) "a") (data (i32.const 84066) "a") (data (i32.const 84069) "a") (data (i32.const 84072) "a") (data (i32.const 84075) "a") (data (i32.const 84078) "a") (data (i32.const 84081) "a") (data (i32.const 84084) "a") (data (i32.const 84087) "a") (data (i32.const 84090) "a") (data (i32.const 84093) "a") (data (i32.const 84096) "a") (data (i32.const 84099) "a") (data (i32.const 84102) "a") (data (i32.const 84105) "a") (data (i32.const 84108) "a") (data (i32.const 84111) "a") (data (i32.const 84114) "a") (data (i32.const 84117) "a") (data (i32.const 84120) "a") (data (i32.const 84123) "a") (data (i32.const 84126) "a") (data (i32.const 84129) "a") (data (i32.const 84132) "a") (data (i32.const 84135) "a") (data (i32.const 84138) "a") (data (i32.const 84141) "a") (data (i32.const 84144) "a") (data (i32.const 84147) "a") (data (i32.const 84150) "a") (data (i32.const 84153) "a") (data (i32.const 84156) "a") (data (i32.const 84159) "a") (data (i32.const 84162) "a") (data (i32.const 84165) "a") (data (i32.const 84168) "a") (data (i32.const 84171) "a") (data (i32.const 84174) "a") (data (i32.const 84177) "a") (data (i32.const 84180) "a") (data (i32.const 84183) "a") (data (i32.const 84186) "a") (data (i32.const 84189) "a") (data (i32.const 84192) "a") (data (i32.const 84195) "a") (data (i32.const 84198) "a") (data (i32.const 84201) "a") (data (i32.const 84204) "a") (data (i32.const 84207) "a") (data (i32.const 84210) "a") (data (i32.const 84213) "a") (data (i32.const 84216) "a") (data (i32.const 84219) "a") (data (i32.const 84222) "a") (data (i32.const 84225) "a") (data (i32.const 84228) "a") (data (i32.const 84231) "a") (data (i32.const 84234) "a") (data (i32.const 84237) "a") (data (i32.const 84240) "a") (data (i32.const 84243) "a") (data (i32.const 84246) "a") (data (i32.const 84249) "a") (data (i32.const 84252) "a") (data (i32.const 84255) "a") (data (i32.const 84258) "a") (data (i32.const 84261) "a") (data (i32.const 84264) "a") (data (i32.const 84267) "a") (data (i32.const 84270) "a") (data (i32.const 84273) "a") (data (i32.const 84276) "a") (data (i32.const 84279) "a") (data (i32.const 84282) "a") (data (i32.const 84285) "a") (data (i32.const 84288) "a") (data (i32.const 84291) "a") (data (i32.const 84294) "a") (data (i32.const 84297) "a") (data (i32.const 84300) "a") (data (i32.const 84303) "a") (data (i32.const 84306) "a") (data (i32.const 84309) "a") (data (i32.const 84312) "a") (data (i32.const 84315) "a") (data (i32.const 84318) "a") (data (i32.const 84321) "a") (data (i32.const 84324) "a") (data (i32.const 84327) "a") (data (i32.const 84330) "a") (data (i32.const 84333) "a") (data (i32.const 84336) "a") (data (i32.const 84339) "a") (data (i32.const 84342) "a") (data (i32.const 84345) "a") (data (i32.const 84348) "a") (data (i32.const 84351) "a") (data (i32.const 84354) "a") (data (i32.const 84357) "a") (data (i32.const 84360) "a") (data (i32.const 84363) "a") (data (i32.const 84366) "a") (data (i32.const 84369) "a") (data (i32.const 84372) "a") (data (i32.const 84375) "a") (data (i32.const 84378) "a") (data (i32.const 84381) "a") (data (i32.const 84384) "a") (data (i32.const 84387) "a") (data (i32.const 84390) "a") (data (i32.const 84393) "a") (data (i32.const 84396) "a") (data (i32.const 84399) "a") (data (i32.const 84402) "a") (data (i32.const 84405) "a") (data (i32.const 84408) "a") (data (i32.const 84411) "a") (data (i32.const 84414) "a") (data (i32.const 84417) "a") (data (i32.const 84420) "a") (data (i32.const 84423) "a") (data (i32.const 84426) "a") (data (i32.const 84429) "a") (data (i32.const 84432) "a") (data (i32.const 84435) "a") (data (i32.const 84438) "a") (data (i32.const 84441) "a") (data (i32.const 84444) "a") (data (i32.const 84447) "a") (data (i32.const 84450) "a") (data (i32.const 84453) "a") (data (i32.const 84456) "a") (data (i32.const 84459) "a") (data (i32.const 84462) "a") (data (i32.const 84465) "a") (data (i32.const 84468) "a") (data (i32.const 84471) "a") (data (i32.const 84474) "a") (data (i32.const 84477) "a") (data (i32.const 84480) "a") (data (i32.const 84483) "a") (data (i32.const 84486) "a") (data (i32.const 84489) "a") (data (i32.const 84492) "a") (data (i32.const 84495) "a") (data (i32.const 84498) "a") (data (i32.const 84501) "a") (data (i32.const 84504) "a") (data (i32.const 84507) "a") (data (i32.const 84510) "a") (data (i32.const 84513) "a") (data (i32.const 84516) "a") (data (i32.const 84519) "a") (data (i32.const 84522) "a") (data (i32.const 84525) "a") (data (i32.const 84528) "a") (data (i32.const 84531) "a") (data (i32.const 84534) "a") (data (i32.const 84537) "a") (data (i32.const 84540) "a") (data (i32.const 84543) "a") (data (i32.const 84546) "a") (data (i32.const 84549) "a") (data (i32.const 84552) "a") (data (i32.const 84555) "a") (data (i32.const 84558) "a") (data (i32.const 84561) "a") (data (i32.const 84564) "a") (data (i32.const 84567) "a") (data (i32.const 84570) "a") (data (i32.const 84573) "a") (data (i32.const 84576) "a") (data (i32.const 84579) "a") (data (i32.const 84582) "a") (data (i32.const 84585) "a") (data (i32.const 84588) "a") (data (i32.const 84591) "a") (data (i32.const 84594) "a") (data (i32.const 84597) "a") (data (i32.const 84600) "a") (data (i32.const 84603) "a") (data (i32.const 84606) "a") (data (i32.const 84609) "a") (data (i32.const 84612) "a") (data (i32.const 84615) "a") (data (i32.const 84618) "a") (data (i32.const 84621) "a") (data (i32.const 84624) "a") (data (i32.const 84627) "a") (data (i32.const 84630) "a") (data (i32.const 84633) "a") (data (i32.const 84636) "a") (data (i32.const 84639) "a") (data (i32.const 84642) "a") (data (i32.const 84645) "a") (data (i32.const 84648) "a") (data (i32.const 84651) "a") (data (i32.const 84654) "a") (data (i32.const 84657) "a") (data (i32.const 84660) "a") (data (i32.const 84663) "a") (data (i32.const 84666) "a") (data (i32.const 84669) "a") (data (i32.const 84672) "a") (data (i32.const 84675) "a") (data (i32.const 84678) "a") (data (i32.const 84681) "a") (data (i32.const 84684) "a") (data (i32.const 84687) "a") (data (i32.const 84690) "a") (data (i32.const 84693) "a") (data (i32.const 84696) "a") (data (i32.const 84699) "a") (data (i32.const 84702) "a") (data (i32.const 84705) "a") (data (i32.const 84708) "a") (data (i32.const 84711) "a") (data (i32.const 84714) "a") (data (i32.const 84717) "a") (data (i32.const 84720) "a") (data (i32.const 84723) "a") (data (i32.const 84726) "a") (data (i32.const 84729) "a") (data (i32.const 84732) "a") (data (i32.const 84735) "a") (data (i32.const 84738) "a") (data (i32.const 84741) "a") (data (i32.const 84744) "a") (data (i32.const 84747) "a") (data (i32.const 84750) "a") (data (i32.const 84753) "a") (data (i32.const 84756) "a") (data (i32.const 84759) "a") (data (i32.const 84762) "a") (data (i32.const 84765) "a") (data (i32.const 84768) "a") (data (i32.const 84771) "a") (data (i32.const 84774) "a") (data (i32.const 84777) "a") (data (i32.const 84780) "a") (data (i32.const 84783) "a") (data (i32.const 84786) "a") (data (i32.const 84789) "a") (data (i32.const 84792) "a") (data (i32.const 84795) "a") (data (i32.const 84798) "a") (data (i32.const 84801) "a") (data (i32.const 84804) "a") (data (i32.const 84807) "a") (data (i32.const 84810) "a") (data (i32.const 84813) "a") (data (i32.const 84816) "a") (data (i32.const 84819) "a") (data (i32.const 84822) "a") (data (i32.const 84825) "a") (data (i32.const 84828) "a") (data (i32.const 84831) "a") (data (i32.const 84834) "a") (data (i32.const 84837) "a") (data (i32.const 84840) "a") (data (i32.const 84843) "a") (data (i32.const 84846) "a") (data (i32.const 84849) "a") (data (i32.const 84852) "a") (data (i32.const 84855) "a") (data (i32.const 84858) "a") (data (i32.const 84861) "a") (data (i32.const 84864) "a") (data (i32.const 84867) "a") (data (i32.const 84870) "a") (data (i32.const 84873) "a") (data (i32.const 84876) "a") (data (i32.const 84879) "a") (data (i32.const 84882) "a") (data (i32.const 84885) "a") (data (i32.const 84888) "a") (data (i32.const 84891) "a") (data (i32.const 84894) "a") (data (i32.const 84897) "a") (data (i32.const 84900) "a") (data (i32.const 84903) "a") (data (i32.const 84906) "a") (data (i32.const 84909) "a") (data (i32.const 84912) "a") (data (i32.const 84915) "a") (data (i32.const 84918) "a") (data (i32.const 84921) "a") (data (i32.const 84924) "a") (data (i32.const 84927) "a") (data (i32.const 84930) "a") (data (i32.const 84933) "a") (data (i32.const 84936) "a") (data (i32.const 84939) "a") (data (i32.const 84942) "a") (data (i32.const 84945) "a") (data (i32.const 84948) "a") (data (i32.const 84951) "a") (data (i32.const 84954) "a") (data (i32.const 84957) "a") (data (i32.const 84960) "a") (data (i32.const 84963) "a") (data (i32.const 84966) "a") (data (i32.const 84969) "a") (data (i32.const 84972) "a") (data (i32.const 84975) "a") (data (i32.const 84978) "a") (data (i32.const 84981) "a") (data (i32.const 84984) "a") (data (i32.const 84987) "a") (data (i32.const 84990) "a") (data (i32.const 84993) "a") (data (i32.const 84996) "a") (data (i32.const 84999) "a") (data (i32.const 85002) "a") (data (i32.const 85005) "a") (data (i32.const 85008) "a") (data (i32.const 85011) "a") (data (i32.const 85014) "a") (data (i32.const 85017) "a") (data (i32.const 85020) "a") (data (i32.const 85023) "a") (data (i32.const 85026) "a") (data (i32.const 85029) "a") (data (i32.const 85032) "a") (data (i32.const 85035) "a") (data (i32.const 85038) "a") (data (i32.const 85041) "a") (data (i32.const 85044) "a") (data (i32.const 85047) "a") (data (i32.const 85050) "a") (data (i32.const 85053) "a") (data (i32.const 85056) "a") (data (i32.const 85059) "a") (data (i32.const 85062) "a") (data (i32.const 85065) "a") (data (i32.const 85068) "a") (data (i32.const 85071) "a") (data (i32.const 85074) "a") (data (i32.const 85077) "a") (data (i32.const 85080) "a") (data (i32.const 85083) "a") (data (i32.const 85086) "a") (data (i32.const 85089) "a") (data (i32.const 85092) "a") (data (i32.const 85095) "a") (data (i32.const 85098) "a") (data (i32.const 85101) "a") (data (i32.const 85104) "a") (data (i32.const 85107) "a") (data (i32.const 85110) "a") (data (i32.const 85113) "a") (data (i32.const 85116) "a") (data (i32.const 85119) "a") (data (i32.const 85122) "a") (data (i32.const 85125) "a") (data (i32.const 85128) "a") (data (i32.const 85131) "a") (data (i32.const 85134) "a") (data (i32.const 85137) "a") (data (i32.const 85140) "a") (data (i32.const 85143) "a") (data (i32.const 85146) "a") (data (i32.const 85149) "a") (data (i32.const 85152) "a") (data (i32.const 85155) "a") (data (i32.const 85158) "a") (data (i32.const 85161) "a") (data (i32.const 85164) "a") (data (i32.const 85167) "a") (data (i32.const 85170) "a") (data (i32.const 85173) "a") (data (i32.const 85176) "a") (data (i32.const 85179) "a") (data (i32.const 85182) "a") (data (i32.const 85185) "a") (data (i32.const 85188) "a") (data (i32.const 85191) "a") (data (i32.const 85194) "a") (data (i32.const 85197) "a") (data (i32.const 85200) "a") (data (i32.const 85203) "a") (data (i32.const 85206) "a") (data (i32.const 85209) "a") (data (i32.const 85212) "a") (data (i32.const 85215) "a") (data (i32.const 85218) "a") (data (i32.const 85221) "a") (data (i32.const 85224) "a") (data (i32.const 85227) "a") (data (i32.const 85230) "a") (data (i32.const 85233) "a") (data (i32.const 85236) "a") (data (i32.const 85239) "a") (data (i32.const 85242) "a") (data (i32.const 85245) "a") (data (i32.const 85248) "a") (data (i32.const 85251) "a") (data (i32.const 85254) "a") (data (i32.const 85257) "a") (data (i32.const 85260) "a") (data (i32.const 85263) "a") (data (i32.const 85266) "a") (data (i32.const 85269) "a") (data (i32.const 85272) "a") (data (i32.const 85275) "a") (data (i32.const 85278) "a") (data (i32.const 85281) "a") (data (i32.const 85284) "a") (data (i32.const 85287) "a") (data (i32.const 85290) "a") (data (i32.const 85293) "a") (data (i32.const 85296) "a") (data (i32.const 85299) "a") (data (i32.const 85302) "a") (data (i32.const 85305) "a") (data (i32.const 85308) "a") (data (i32.const 85311) "a") (data (i32.const 85314) "a") (data (i32.const 85317) "a") (data (i32.const 85320) "a") (data (i32.const 85323) "a") (data (i32.const 85326) "a") (data (i32.const 85329) "a") (data (i32.const 85332) "a") (data (i32.const 85335) "a") (data (i32.const 85338) "a") (data (i32.const 85341) "a") (data (i32.const 85344) "a") (data (i32.const 85347) "a") (data (i32.const 85350) "a") (data (i32.const 85353) "a") (data (i32.const 85356) "a") (data (i32.const 85359) "a") (data (i32.const 85362) "a") (data (i32.const 85365) "a") (data (i32.const 85368) "a") (data (i32.const 85371) "a") (data (i32.const 85374) "a") (data (i32.const 85377) "a") (data (i32.const 85380) "a") (data (i32.const 85383) "a") (data (i32.const 85386) "a") (data (i32.const 85389) "a") (data (i32.const 85392) "a") (data (i32.const 85395) "a") (data (i32.const 85398) "a") (data (i32.const 85401) "a") (data (i32.const 85404) "a") (data (i32.const 85407) "a") (data (i32.const 85410) "a") (data (i32.const 85413) "a") (data (i32.const 85416) "a") (data (i32.const 85419) "a") (data (i32.const 85422) "a") (data (i32.const 85425) "a") (data (i32.const 85428) "a") (data (i32.const 85431) "a") (data (i32.const 85434) "a") (data (i32.const 85437) "a") (data (i32.const 85440) "a") (data (i32.const 85443) "a") (data (i32.const 85446) "a") (data (i32.const 85449) "a") (data (i32.const 85452) "a") (data (i32.const 85455) "a") (data (i32.const 85458) "a") (data (i32.const 85461) "a") (data (i32.const 85464) "a") (data (i32.const 85467) "a") (data (i32.const 85470) "a") (data (i32.const 85473) "a") (data (i32.const 85476) "a") (data (i32.const 85479) "a") (data (i32.const 85482) "a") (data (i32.const 85485) "a") (data (i32.const 85488) "a") (data (i32.const 85491) "a") (data (i32.const 85494) "a") (data (i32.const 85497) "a") (data (i32.const 85500) "a") (data (i32.const 85503) "a") (data (i32.const 85506) "a") (data (i32.const 85509) "a") (data (i32.const 85512) "a") (data (i32.const 85515) "a") (data (i32.const 85518) "a") (data (i32.const 85521) "a") (data (i32.const 85524) "a") (data (i32.const 85527) "a") (data (i32.const 85530) "a") (data (i32.const 85533) "a") (data (i32.const 85536) "a") (data (i32.const 85539) "a") (data (i32.const 85542) "a") (data (i32.const 85545) "a") (data (i32.const 85548) "a") (data (i32.const 85551) "a") (data (i32.const 85554) "a") (data (i32.const 85557) "a") (data (i32.const 85560) "a") (data (i32.const 85563) "a") (data (i32.const 85566) "a") (data (i32.const 85569) "a") (data (i32.const 85572) "a") (data (i32.const 85575) "a") (data (i32.const 85578) "a") (data (i32.const 85581) "a") (data (i32.const 85584) "a") (data (i32.const 85587) "a") (data (i32.const 85590) "a") (data (i32.const 85593) "a") (data (i32.const 85596) "a") (data (i32.const 85599) "a") (data (i32.const 85602) "a") (data (i32.const 85605) "a") (data (i32.const 85608) "a") (data (i32.const 85611) "a") (data (i32.const 85614) "a") (data (i32.const 85617) "a") (data (i32.const 85620) "a") (data (i32.const 85623) "a") (data (i32.const 85626) "a") (data (i32.const 85629) "a") (data (i32.const 85632) "a") (data (i32.const 85635) "a") (data (i32.const 85638) "a") (data (i32.const 85641) "a") (data (i32.const 85644) "a") (data (i32.const 85647) "a") (data (i32.const 85650) "a") (data (i32.const 85653) "a") (data (i32.const 85656) "a") (data (i32.const 85659) "a") (data (i32.const 85662) "a") (data (i32.const 85665) "a") (data (i32.const 85668) "a") (data (i32.const 85671) "a") (data (i32.const 85674) "a") (data (i32.const 85677) "a") (data (i32.const 85680) "a") (data (i32.const 85683) "a") (data (i32.const 85686) "a") (data (i32.const 85689) "a") (data (i32.const 85692) "a") (data (i32.const 85695) "a") (data (i32.const 85698) "a") (data (i32.const 85701) "a") (data (i32.const 85704) "a") (data (i32.const 85707) "a") (data (i32.const 85710) "a") (data (i32.const 85713) "a") (data (i32.const 85716) "a") (data (i32.const 85719) "a") (data (i32.const 85722) "a") (data (i32.const 85725) "a") (data (i32.const 85728) "a") (data (i32.const 85731) "a") (data (i32.const 85734) "a") (data (i32.const 85737) "a") (data (i32.const 85740) "a") (data (i32.const 85743) "a") (data (i32.const 85746) "a") (data (i32.const 85749) "a") (data (i32.const 85752) "a") (data (i32.const 85755) "a") (data (i32.const 85758) "a") (data (i32.const 85761) "a") (data (i32.const 85764) "a") (data (i32.const 85767) "a") (data (i32.const 85770) "a") (data (i32.const 85773) "a") (data (i32.const 85776) "a") (data (i32.const 85779) "a") (data (i32.const 85782) "a") (data (i32.const 85785) "a") (data (i32.const 85788) "a") (data (i32.const 85791) "a") (data (i32.const 85794) "a") (data (i32.const 85797) "a") (data (i32.const 85800) "a") (data (i32.const 85803) "a") (data (i32.const 85806) "a") (data (i32.const 85809) "a") (data (i32.const 85812) "a") (data (i32.const 85815) "a") (data (i32.const 85818) "a") (data (i32.const 85821) "a") (data (i32.const 85824) "a") (data (i32.const 85827) "a") (data (i32.const 85830) "a") (data (i32.const 85833) "a") (data (i32.const 85836) "a") (data (i32.const 85839) "a") (data (i32.const 85842) "a") (data (i32.const 85845) "a") (data (i32.const 85848) "a") (data (i32.const 85851) "a") (data (i32.const 85854) "a") (data (i32.const 85857) "a") (data (i32.const 85860) "a") (data (i32.const 85863) "a") (data (i32.const 85866) "a") (data (i32.const 85869) "a") (data (i32.const 85872) "a") (data (i32.const 85875) "a") (data (i32.const 85878) "a") (data (i32.const 85881) "a") (data (i32.const 85884) "a") (data (i32.const 85887) "a") (data (i32.const 85890) "a") (data (i32.const 85893) "a") (data (i32.const 85896) "a") (data (i32.const 85899) "a") (data (i32.const 85902) "a") (data (i32.const 85905) "a") (data (i32.const 85908) "a") (data (i32.const 85911) "a") (data (i32.const 85914) "a") (data (i32.const 85917) "a") (data (i32.const 85920) "a") (data (i32.const 85923) "a") (data (i32.const 85926) "a") (data (i32.const 85929) "a") (data (i32.const 85932) "a") (data (i32.const 85935) "a") (data (i32.const 85938) "a") (data (i32.const 85941) "a") (data (i32.const 85944) "a") (data (i32.const 85947) "a") (data (i32.const 85950) "a") (data (i32.const 85953) "a") (data (i32.const 85956) "a") (data (i32.const 85959) "a") (data (i32.const 85962) "a") (data (i32.const 85965) "a") (data (i32.const 85968) "a") (data (i32.const 85971) "a") (data (i32.const 85974) "a") (data (i32.const 85977) "a") (data (i32.const 85980) "a") (data (i32.const 85983) "a") (data (i32.const 85986) "a") (data (i32.const 85989) "a") (data (i32.const 85992) "a") (data (i32.const 85995) "a") (data (i32.const 85998) "a") (data (i32.const 86001) "a") (data (i32.const 86004) "a") (data (i32.const 86007) "a") (data (i32.const 86010) "a") (data (i32.const 86013) "a") (data (i32.const 86016) "a") (data (i32.const 86019) "a") (data (i32.const 86022) "a") (data (i32.const 86025) "a") (data (i32.const 86028) "a") (data (i32.const 86031) "a") (data (i32.const 86034) "a") (data (i32.const 86037) "a") (data (i32.const 86040) "a") (data (i32.const 86043) "a") (data (i32.const 86046) "a") (data (i32.const 86049) "a") (data (i32.const 86052) "a") (data (i32.const 86055) "a") (data (i32.const 86058) "a") (data (i32.const 86061) "a") (data (i32.const 86064) "a") (data (i32.const 86067) "a") (data (i32.const 86070) "a") (data (i32.const 86073) "a") (data (i32.const 86076) "a") (data (i32.const 86079) "a") (data (i32.const 86082) "a") (data (i32.const 86085) "a") (data (i32.const 86088) "a") (data (i32.const 86091) "a") (data (i32.const 86094) "a") (data (i32.const 86097) "a") (data (i32.const 86100) "a") (data (i32.const 86103) "a") (data (i32.const 86106) "a") (data (i32.const 86109) "a") (data (i32.const 86112) "a") (data (i32.const 86115) "a") (data (i32.const 86118) "a") (data (i32.const 86121) "a") (data (i32.const 86124) "a") (data (i32.const 86127) "a") (data (i32.const 86130) "a") (data (i32.const 86133) "a") (data (i32.const 86136) "a") (data (i32.const 86139) "a") (data (i32.const 86142) "a") (data (i32.const 86145) "a") (data (i32.const 86148) "a") (data (i32.const 86151) "a") (data (i32.const 86154) "a") (data (i32.const 86157) "a") (data (i32.const 86160) "a") (data (i32.const 86163) "a") (data (i32.const 86166) "a") (data (i32.const 86169) "a") (data (i32.const 86172) "a") (data (i32.const 86175) "a") (data (i32.const 86178) "a") (data (i32.const 86181) "a") (data (i32.const 86184) "a") (data (i32.const 86187) "a") (data (i32.const 86190) "a") (data (i32.const 86193) "a") (data (i32.const 86196) "a") (data (i32.const 86199) "a") (data (i32.const 86202) "a") (data (i32.const 86205) "a") (data (i32.const 86208) "a") (data (i32.const 86211) "a") (data (i32.const 86214) "a") (data (i32.const 86217) "a") (data (i32.const 86220) "a") (data (i32.const 86223) "a") (data (i32.const 86226) "a") (data (i32.const 86229) "a") (data (i32.const 86232) "a") (data (i32.const 86235) "a") (data (i32.const 86238) "a") (data (i32.const 86241) "a") (data (i32.const 86244) "a") (data (i32.const 86247) "a") (data (i32.const 86250) "a") (data (i32.const 86253) "a") (data (i32.const 86256) "a") (data (i32.const 86259) "a") (data (i32.const 86262) "a") (data (i32.const 86265) "a") (data (i32.const 86268) "a") (data (i32.const 86271) "a") (data (i32.const 86274) "a") (data (i32.const 86277) "a") (data (i32.const 86280) "a") (data (i32.const 86283) "a") (data (i32.const 86286) "a") (data (i32.const 86289) "a") (data (i32.const 86292) "a") (data (i32.const 86295) "a") (data (i32.const 86298) "a") (data (i32.const 86301) "a") (data (i32.const 86304) "a") (data (i32.const 86307) "a") (data (i32.const 86310) "a") (data (i32.const 86313) "a") (data (i32.const 86316) "a") (data (i32.const 86319) "a") (data (i32.const 86322) "a") (data (i32.const 86325) "a") (data (i32.const 86328) "a") (data (i32.const 86331) "a") (data (i32.const 86334) "a") (data (i32.const 86337) "a") (data (i32.const 86340) "a") (data (i32.const 86343) "a") (data (i32.const 86346) "a") (data (i32.const 86349) "a") (data (i32.const 86352) "a") (data (i32.const 86355) "a") (data (i32.const 86358) "a") (data (i32.const 86361) "a") (data (i32.const 86364) "a") (data (i32.const 86367) "a") (data (i32.const 86370) "a") (data (i32.const 86373) "a") (data (i32.const 86376) "a") (data (i32.const 86379) "a") (data (i32.const 86382) "a") (data (i32.const 86385) "a") (data (i32.const 86388) "a") (data (i32.const 86391) "a") (data (i32.const 86394) "a") (data (i32.const 86397) "a") (data (i32.const 86400) "a") (data (i32.const 86403) "a") (data (i32.const 86406) "a") (data (i32.const 86409) "a") (data (i32.const 86412) "a") (data (i32.const 86415) "a") (data (i32.const 86418) "a") (data (i32.const 86421) "a") (data (i32.const 86424) "a") (data (i32.const 86427) "a") (data (i32.const 86430) "a") (data (i32.const 86433) "a") (data (i32.const 86436) "a") (data (i32.const 86439) "a") (data (i32.const 86442) "a") (data (i32.const 86445) "a") (data (i32.const 86448) "a") (data (i32.const 86451) "a") (data (i32.const 86454) "a") (data (i32.const 86457) "a") (data (i32.const 86460) "a") (data (i32.const 86463) "a") (data (i32.const 86466) "a") (data (i32.const 86469) "a") (data (i32.const 86472) "a") (data (i32.const 86475) "a") (data (i32.const 86478) "a") (data (i32.const 86481) "a") (data (i32.const 86484) "a") (data (i32.const 86487) "a") (data (i32.const 86490) "a") (data (i32.const 86493) "a") (data (i32.const 86496) "a") (data (i32.const 86499) "a") (data (i32.const 86502) "a") (data (i32.const 86505) "a") (data (i32.const 86508) "a") (data (i32.const 86511) "a") (data (i32.const 86514) "a") (data (i32.const 86517) "a") (data (i32.const 86520) "a") (data (i32.const 86523) "a") (data (i32.const 86526) "a") (data (i32.const 86529) "a") (data (i32.const 86532) "a") (data (i32.const 86535) "a") (data (i32.const 86538) "a") (data (i32.const 86541) "a") (data (i32.const 86544) "a") (data (i32.const 86547) "a") (data (i32.const 86550) "a") (data (i32.const 86553) "a") (data (i32.const 86556) "a") (data (i32.const 86559) "a") (data (i32.const 86562) "a") (data (i32.const 86565) "a") (data (i32.const 86568) "a") (data (i32.const 86571) "a") (data (i32.const 86574) "a") (data (i32.const 86577) "a") (data (i32.const 86580) "a") (data (i32.const 86583) "a") (data (i32.const 86586) "a") (data (i32.const 86589) "a") (data (i32.const 86592) "a") (data (i32.const 86595) "a") (data (i32.const 86598) "a") (data (i32.const 86601) "a") (data (i32.const 86604) "a") (data (i32.const 86607) "a") (data (i32.const 86610) "a") (data (i32.const 86613) "a") (data (i32.const 86616) "a") (data (i32.const 86619) "a") (data (i32.const 86622) "a") (data (i32.const 86625) "a") (data (i32.const 86628) "a") (data (i32.const 86631) "a") (data (i32.const 86634) "a") (data (i32.const 86637) "a") (data (i32.const 86640) "a") (data (i32.const 86643) "a") (data (i32.const 86646) "a") (data (i32.const 86649) "a") (data (i32.const 86652) "a") (data (i32.const 86655) "a") (data (i32.const 86658) "a") (data (i32.const 86661) "a") (data (i32.const 86664) "a") (data (i32.const 86667) "a") (data (i32.const 86670) "a") (data (i32.const 86673) "a") (data (i32.const 86676) "a") (data (i32.const 86679) "a") (data (i32.const 86682) "a") (data (i32.const 86685) "a") (data (i32.const 86688) "a") (data (i32.const 86691) "a") (data (i32.const 86694) "a") (data (i32.const 86697) "a") (data (i32.const 86700) "a") (data (i32.const 86703) "a") (data (i32.const 86706) "a") (data (i32.const 86709) "a") (data (i32.const 86712) "a") (data (i32.const 86715) "a") (data (i32.const 86718) "a") (data (i32.const 86721) "a") (data (i32.const 86724) "a") (data (i32.const 86727) "a") (data (i32.const 86730) "a") (data (i32.const 86733) "a") (data (i32.const 86736) "a") (data (i32.const 86739) "a") (data (i32.const 86742) "a") (data (i32.const 86745) "a") (data (i32.const 86748) "a") (data (i32.const 86751) "a") (data (i32.const 86754) "a") (data (i32.const 86757) "a") (data (i32.const 86760) "a") (data (i32.const 86763) "a") (data (i32.const 86766) "a") (data (i32.const 86769) "a") (data (i32.const 86772) "a") (data (i32.const 86775) "a") (data (i32.const 86778) "a") (data (i32.const 86781) "a") (data (i32.const 86784) "a") (data (i32.const 86787) "a") (data (i32.const 86790) "a") (data (i32.const 86793) "a") (data (i32.const 86796) "a") (data (i32.const 86799) "a") (data (i32.const 86802) "a") (data (i32.const 86805) "a") (data (i32.const 86808) "a") (data (i32.const 86811) "a") (data (i32.const 86814) "a") (data (i32.const 86817) "a") (data (i32.const 86820) "a") (data (i32.const 86823) "a") (data (i32.const 86826) "a") (data (i32.const 86829) "a") (data (i32.const 86832) "a") (data (i32.const 86835) "a") (data (i32.const 86838) "a") (data (i32.const 86841) "a") (data (i32.const 86844) "a") (data (i32.const 86847) "a") (data (i32.const 86850) "a") (data (i32.const 86853) "a") (data (i32.const 86856) "a") (data (i32.const 86859) "a") (data (i32.const 86862) "a") (data (i32.const 86865) "a") (data (i32.const 86868) "a") (data (i32.const 86871) "a") (data (i32.const 86874) "a") (data (i32.const 86877) "a") (data (i32.const 86880) "a") (data (i32.const 86883) "a") (data (i32.const 86886) "a") (data (i32.const 86889) "a") (data (i32.const 86892) "a") (data (i32.const 86895) "a") (data (i32.const 86898) "a") (data (i32.const 86901) "a") (data (i32.const 86904) "a") (data (i32.const 86907) "a") (data (i32.const 86910) "a") (data (i32.const 86913) "a") (data (i32.const 86916) "a") (data (i32.const 86919) "a") (data (i32.const 86922) "a") (data (i32.const 86925) "a") (data (i32.const 86928) "a") (data (i32.const 86931) "a") (data (i32.const 86934) "a") (data (i32.const 86937) "a") (data (i32.const 86940) "a") (data (i32.const 86943) "a") (data (i32.const 86946) "a") (data (i32.const 86949) "a") (data (i32.const 86952) "a") (data (i32.const 86955) "a") (data (i32.const 86958) "a") (data (i32.const 86961) "a") (data (i32.const 86964) "a") (data (i32.const 86967) "a") (data (i32.const 86970) "a") (data (i32.const 86973) "a") (data (i32.const 86976) "a") (data (i32.const 86979) "a") (data (i32.const 86982) "a") (data (i32.const 86985) "a") (data (i32.const 86988) "a") (data (i32.const 86991) "a") (data (i32.const 86994) "a") (data (i32.const 86997) "a") (data (i32.const 87000) "a") (data (i32.const 87003) "a") (data (i32.const 87006) "a") (data (i32.const 87009) "a") (data (i32.const 87012) "a") (data (i32.const 87015) "a") (data (i32.const 87018) "a") (data (i32.const 87021) "a") (data (i32.const 87024) "a") (data (i32.const 87027) "a") (data (i32.const 87030) "a") (data (i32.const 87033) "a") (data (i32.const 87036) "a") (data (i32.const 87039) "a") (data (i32.const 87042) "a") (data (i32.const 87045) "a") (data (i32.const 87048) "a") (data (i32.const 87051) "a") (data (i32.const 87054) "a") (data (i32.const 87057) "a") (data (i32.const 87060) "a") (data (i32.const 87063) "a") (data (i32.const 87066) "a") (data (i32.const 87069) "a") (data (i32.const 87072) "a") (data (i32.const 87075) "a") (data (i32.const 87078) "a") (data (i32.const 87081) "a") (data (i32.const 87084) "a") (data (i32.const 87087) "a") (data (i32.const 87090) "a") (data (i32.const 87093) "a") (data (i32.const 87096) "a") (data (i32.const 87099) "a") (data (i32.const 87102) "a") (data (i32.const 87105) "a") (data (i32.const 87108) "a") (data (i32.const 87111) "a") (data (i32.const 87114) "a") (data (i32.const 87117) "a") (data (i32.const 87120) "a") (data (i32.const 87123) "a") (data (i32.const 87126) "a") (data (i32.const 87129) "a") (data (i32.const 87132) "a") (data (i32.const 87135) "a") (data (i32.const 87138) "a") (data (i32.const 87141) "a") (data (i32.const 87144) "a") (data (i32.const 87147) "a") (data (i32.const 87150) "a") (data (i32.const 87153) "a") (data (i32.const 87156) "a") (data (i32.const 87159) "a") (data (i32.const 87162) "a") (data (i32.const 87165) "a") (data (i32.const 87168) "a") (data (i32.const 87171) "a") (data (i32.const 87174) "a") (data (i32.const 87177) "a") (data (i32.const 87180) "a") (data (i32.const 87183) "a") (data (i32.const 87186) "a") (data (i32.const 87189) "a") (data (i32.const 87192) "a") (data (i32.const 87195) "a") (data (i32.const 87198) "a") (data (i32.const 87201) "a") (data (i32.const 87204) "a") (data (i32.const 87207) "a") (data (i32.const 87210) "a") (data (i32.const 87213) "a") (data (i32.const 87216) "a") (data (i32.const 87219) "a") (data (i32.const 87222) "a") (data (i32.const 87225) "a") (data (i32.const 87228) "a") (data (i32.const 87231) "a") (data (i32.const 87234) "a") (data (i32.const 87237) "a") (data (i32.const 87240) "a") (data (i32.const 87243) "a") (data (i32.const 87246) "a") (data (i32.const 87249) "a") (data (i32.const 87252) "a") (data (i32.const 87255) "a") (data (i32.const 87258) "a") (data (i32.const 87261) "a") (data (i32.const 87264) "a") (data (i32.const 87267) "a") (data (i32.const 87270) "a") (data (i32.const 87273) "a") (data (i32.const 87276) "a") (data (i32.const 87279) "a") (data (i32.const 87282) "a") (data (i32.const 87285) "a") (data (i32.const 87288) "a") (data (i32.const 87291) "a") (data (i32.const 87294) "a") (data (i32.const 87297) "a") (data (i32.const 87300) "a") (data (i32.const 87303) "a") (data (i32.const 87306) "a") (data (i32.const 87309) "a") (data (i32.const 87312) "a") (data (i32.const 87315) "a") (data (i32.const 87318) "a") (data (i32.const 87321) "a") (data (i32.const 87324) "a") (data (i32.const 87327) "a") (data (i32.const 87330) "a") (data (i32.const 87333) "a") (data (i32.const 87336) "a") (data (i32.const 87339) "a") (data (i32.const 87342) "a") (data (i32.const 87345) "a") (data (i32.const 87348) "a") (data (i32.const 87351) "a") (data (i32.const 87354) "a") (data (i32.const 87357) "a") (data (i32.const 87360) "a") (data (i32.const 87363) "a") (data (i32.const 87366) "a") (data (i32.const 87369) "a") (data (i32.const 87372) "a") (data (i32.const 87375) "a") (data (i32.const 87378) "a") (data (i32.const 87381) "a") (data (i32.const 87384) "a") (data (i32.const 87387) "a") (data (i32.const 87390) "a") (data (i32.const 87393) "a") (data (i32.const 87396) "a") (data (i32.const 87399) "a") (data (i32.const 87402) "a") (data (i32.const 87405) "a") (data (i32.const 87408) "a") (data (i32.const 87411) "a") (data (i32.const 87414) "a") (data (i32.const 87417) "a") (data (i32.const 87420) "a") (data (i32.const 87423) "a") (data (i32.const 87426) "a") (data (i32.const 87429) "a") (data (i32.const 87432) "a") (data (i32.const 87435) "a") (data (i32.const 87438) "a") (data (i32.const 87441) "a") (data (i32.const 87444) "a") (data (i32.const 87447) "a") (data (i32.const 87450) "a") (data (i32.const 87453) "a") (data (i32.const 87456) "a") (data (i32.const 87459) "a") (data (i32.const 87462) "a") (data (i32.const 87465) "a") (data (i32.const 87468) "a") (data (i32.const 87471) "a") (data (i32.const 87474) "a") (data (i32.const 87477) "a") (data (i32.const 87480) "a") (data (i32.const 87483) "a") (data (i32.const 87486) "a") (data (i32.const 87489) "a") (data (i32.const 87492) "a") (data (i32.const 87495) "a") (data (i32.const 87498) "a") (data (i32.const 87501) "a") (data (i32.const 87504) "a") (data (i32.const 87507) "a") (data (i32.const 87510) "a") (data (i32.const 87513) "a") (data (i32.const 87516) "a") (data (i32.const 87519) "a") (data (i32.const 87522) "a") (data (i32.const 87525) "a") (data (i32.const 87528) "a") (data (i32.const 87531) "a") (data (i32.const 87534) "a") (data (i32.const 87537) "a") (data (i32.const 87540) "a") (data (i32.const 87543) "a") (data (i32.const 87546) "a") (data (i32.const 87549) "a") (data (i32.const 87552) "a") (data (i32.const 87555) "a") (data (i32.const 87558) "a") (data (i32.const 87561) "a") (data (i32.const 87564) "a") (data (i32.const 87567) "a") (data (i32.const 87570) "a") (data (i32.const 87573) "a") (data (i32.const 87576) "a") (data (i32.const 87579) "a") (data (i32.const 87582) "a") (data (i32.const 87585) "a") (data (i32.const 87588) "a") (data (i32.const 87591) "a") (data (i32.const 87594) "a") (data (i32.const 87597) "a") (data (i32.const 87600) "a") (data (i32.const 87603) "a") (data (i32.const 87606) "a") (data (i32.const 87609) "a") (data (i32.const 87612) "a") (data (i32.const 87615) "a") (data (i32.const 87618) "a") (data (i32.const 87621) "a") (data (i32.const 87624) "a") (data (i32.const 87627) "a") (data (i32.const 87630) "a") (data (i32.const 87633) "a") (data (i32.const 87636) "a") (data (i32.const 87639) "a") (data (i32.const 87642) "a") (data (i32.const 87645) "a") (data (i32.const 87648) "a") (data (i32.const 87651) "a") (data (i32.const 87654) "a") (data (i32.const 87657) "a") (data (i32.const 87660) "a") (data (i32.const 87663) "a") (data (i32.const 87666) "a") (data (i32.const 87669) "a") (data (i32.const 87672) "a") (data (i32.const 87675) "a") (data (i32.const 87678) "a") (data (i32.const 87681) "a") (data (i32.const 87684) "a") (data (i32.const 87687) "a") (data (i32.const 87690) "a") (data (i32.const 87693) "a") (data (i32.const 87696) "a") (data (i32.const 87699) "a") (data (i32.const 87702) "a") (data (i32.const 87705) "a") (data (i32.const 87708) "a") (data (i32.const 87711) "a") (data (i32.const 87714) "a") (data (i32.const 87717) "a") (data (i32.const 87720) "a") (data (i32.const 87723) "a") (data (i32.const 87726) "a") (data (i32.const 87729) "a") (data (i32.const 87732) "a") (data (i32.const 87735) "a") (data (i32.const 87738) "a") (data (i32.const 87741) "a") (data (i32.const 87744) "a") (data (i32.const 87747) "a") (data (i32.const 87750) "a") (data (i32.const 87753) "a") (data (i32.const 87756) "a") (data (i32.const 87759) "a") (data (i32.const 87762) "a") (data (i32.const 87765) "a") (data (i32.const 87768) "a") (data (i32.const 87771) "a") (data (i32.const 87774) "a") (data (i32.const 87777) "a") (data (i32.const 87780) "a") (data (i32.const 87783) "a") (data (i32.const 87786) "a") (data (i32.const 87789) "a") (data (i32.const 87792) "a") (data (i32.const 87795) "a") (data (i32.const 87798) "a") (data (i32.const 87801) "a") (data (i32.const 87804) "a") (data (i32.const 87807) "a") (data (i32.const 87810) "a") (data (i32.const 87813) "a") (data (i32.const 87816) "a") (data (i32.const 87819) "a") (data (i32.const 87822) "a") (data (i32.const 87825) "a") (data (i32.const 87828) "a") (data (i32.const 87831) "a") (data (i32.const 87834) "a") (data (i32.const 87837) "a") (data (i32.const 87840) "a") (data (i32.const 87843) "a") (data (i32.const 87846) "a") (data (i32.const 87849) "a") (data (i32.const 87852) "a") (data (i32.const 87855) "a") (data (i32.const 87858) "a") (data (i32.const 87861) "a") (data (i32.const 87864) "a") (data (i32.const 87867) "a") (data (i32.const 87870) "a") (data (i32.const 87873) "a") (data (i32.const 87876) "a") (data (i32.const 87879) "a") (data (i32.const 87882) "a") (data (i32.const 87885) "a") (data (i32.const 87888) "a") (data (i32.const 87891) "a") (data (i32.const 87894) "a") (data (i32.const 87897) "a") (data (i32.const 87900) "a") (data (i32.const 87903) "a") (data (i32.const 87906) "a") (data (i32.const 87909) "a") (data (i32.const 87912) "a") (data (i32.const 87915) "a") (data (i32.const 87918) "a") (data (i32.const 87921) "a") (data (i32.const 87924) "a") (data (i32.const 87927) "a") (data (i32.const 87930) "a") (data (i32.const 87933) "a") (data (i32.const 87936) "a") (data (i32.const 87939) "a") (data (i32.const 87942) "a") (data (i32.const 87945) "a") (data (i32.const 87948) "a") (data (i32.const 87951) "a") (data (i32.const 87954) "a") (data (i32.const 87957) "a") (data (i32.const 87960) "a") (data (i32.const 87963) "a") (data (i32.const 87966) "a") (data (i32.const 87969) "a") (data (i32.const 87972) "a") (data (i32.const 87975) "a") (data (i32.const 87978) "a") (data (i32.const 87981) "a") (data (i32.const 87984) "a") (data (i32.const 87987) "a") (data (i32.const 87990) "a") (data (i32.const 87993) "a") (data (i32.const 87996) "a") (data (i32.const 87999) "a") (data (i32.const 88002) "a") (data (i32.const 88005) "a") (data (i32.const 88008) "a") (data (i32.const 88011) "a") (data (i32.const 88014) "a") (data (i32.const 88017) "a") (data (i32.const 88020) "a") (data (i32.const 88023) "a") (data (i32.const 88026) "a") (data (i32.const 88029) "a") (data (i32.const 88032) "a") (data (i32.const 88035) "a") (data (i32.const 88038) "a") (data (i32.const 88041) "a") (data (i32.const 88044) "a") (data (i32.const 88047) "a") (data (i32.const 88050) "a") (data (i32.const 88053) "a") (data (i32.const 88056) "a") (data (i32.const 88059) "a") (data (i32.const 88062) "a") (data (i32.const 88065) "a") (data (i32.const 88068) "a") (data (i32.const 88071) "a") (data (i32.const 88074) "a") (data (i32.const 88077) "a") (data (i32.const 88080) "a") (data (i32.const 88083) "a") (data (i32.const 88086) "a") (data (i32.const 88089) "a") (data (i32.const 88092) "a") (data (i32.const 88095) "a") (data (i32.const 88098) "a") (data (i32.const 88101) "a") (data (i32.const 88104) "a") (data (i32.const 88107) "a") (data (i32.const 88110) "a") (data (i32.const 88113) "a") (data (i32.const 88116) "a") (data (i32.const 88119) "a") (data (i32.const 88122) "a") (data (i32.const 88125) "a") (data (i32.const 88128) "a") (data (i32.const 88131) "a") (data (i32.const 88134) "a") (data (i32.const 88137) "a") (data (i32.const 88140) "a") (data (i32.const 88143) "a") (data (i32.const 88146) "a") (data (i32.const 88149) "a") (data (i32.const 88152) "a") (data (i32.const 88155) "a") (data (i32.const 88158) "a") (data (i32.const 88161) "a") (data (i32.const 88164) "a") (data (i32.const 88167) "a") (data (i32.const 88170) "a") (data (i32.const 88173) "a") (data (i32.const 88176) "a") (data (i32.const 88179) "a") (data (i32.const 88182) "a") (data (i32.const 88185) "a") (data (i32.const 88188) "a") (data (i32.const 88191) "a") (data (i32.const 88194) "a") (data (i32.const 88197) "a") (data (i32.const 88200) "a") (data (i32.const 88203) "a") (data (i32.const 88206) "a") (data (i32.const 88209) "a") (data (i32.const 88212) "a") (data (i32.const 88215) "a") (data (i32.const 88218) "a") (data (i32.const 88221) "a") (data (i32.const 88224) "a") (data (i32.const 88227) "a") (data (i32.const 88230) "a") (data (i32.const 88233) "a") (data (i32.const 88236) "a") (data (i32.const 88239) "a") (data (i32.const 88242) "a") (data (i32.const 88245) "a") (data (i32.const 88248) "a") (data (i32.const 88251) "a") (data (i32.const 88254) "a") (data (i32.const 88257) "a") (data (i32.const 88260) "a") (data (i32.const 88263) "a") (data (i32.const 88266) "a") (data (i32.const 88269) "a") (data (i32.const 88272) "a") (data (i32.const 88275) "a") (data (i32.const 88278) "a") (data (i32.const 88281) "a") (data (i32.const 88284) "a") (data (i32.const 88287) "a") (data (i32.const 88290) "a") (data (i32.const 88293) "a") (data (i32.const 88296) "a") (data (i32.const 88299) "a") (data (i32.const 88302) "a") (data (i32.const 88305) "a") (data (i32.const 88308) "a") (data (i32.const 88311) "a") (data (i32.const 88314) "a") (data (i32.const 88317) "a") (data (i32.const 88320) "a") (data (i32.const 88323) "a") (data (i32.const 88326) "a") (data (i32.const 88329) "a") (data (i32.const 88332) "a") (data (i32.const 88335) "a") (data (i32.const 88338) "a") (data (i32.const 88341) "a") (data (i32.const 88344) "a") (data (i32.const 88347) "a") (data (i32.const 88350) "a") (data (i32.const 88353) "a") (data (i32.const 88356) "a") (data (i32.const 88359) "a") (data (i32.const 88362) "a") (data (i32.const 88365) "a") (data (i32.const 88368) "a") (data (i32.const 88371) "a") (data (i32.const 88374) "a") (data (i32.const 88377) "a") (data (i32.const 88380) "a") (data (i32.const 88383) "a") (data (i32.const 88386) "a") (data (i32.const 88389) "a") (data (i32.const 88392) "a") (data (i32.const 88395) "a") (data (i32.const 88398) "a") (data (i32.const 88401) "a") (data (i32.const 88404) "a") (data (i32.const 88407) "a") (data (i32.const 88410) "a") (data (i32.const 88413) "a") (data (i32.const 88416) "a") (data (i32.const 88419) "a") (data (i32.const 88422) "a") (data (i32.const 88425) "a") (data (i32.const 88428) "a") (data (i32.const 88431) "a") (data (i32.const 88434) "a") (data (i32.const 88437) "a") (data (i32.const 88440) "a") (data (i32.const 88443) "a") (data (i32.const 88446) "a") (data (i32.const 88449) "a") (data (i32.const 88452) "a") (data (i32.const 88455) "a") (data (i32.const 88458) "a") (data (i32.const 88461) "a") (data (i32.const 88464) "a") (data (i32.const 88467) "a") (data (i32.const 88470) "a") (data (i32.const 88473) "a") (data (i32.const 88476) "a") (data (i32.const 88479) "a") (data (i32.const 88482) "a") (data (i32.const 88485) "a") (data (i32.const 88488) "a") (data (i32.const 88491) "a") (data (i32.const 88494) "a") (data (i32.const 88497) "a") (data (i32.const 88500) "a") (data (i32.const 88503) "a") (data (i32.const 88506) "a") (data (i32.const 88509) "a") (data (i32.const 88512) "a") (data (i32.const 88515) "a") (data (i32.const 88518) "a") (data (i32.const 88521) "a") (data (i32.const 88524) "a") (data (i32.const 88527) "a") (data (i32.const 88530) "a") (data (i32.const 88533) "a") (data (i32.const 88536) "a") (data (i32.const 88539) "a") (data (i32.const 88542) "a") (data (i32.const 88545) "a") (data (i32.const 88548) "a") (data (i32.const 88551) "a") (data (i32.const 88554) "a") (data (i32.const 88557) "a") (data (i32.const 88560) "a") (data (i32.const 88563) "a") (data (i32.const 88566) "a") (data (i32.const 88569) "a") (data (i32.const 88572) "a") (data (i32.const 88575) "a") (data (i32.const 88578) "a") (data (i32.const 88581) "a") (data (i32.const 88584) "a") (data (i32.const 88587) "a") (data (i32.const 88590) "a") (data (i32.const 88593) "a") (data (i32.const 88596) "a") (data (i32.const 88599) "a") (data (i32.const 88602) "a") (data (i32.const 88605) "a") (data (i32.const 88608) "a") (data (i32.const 88611) "a") (data (i32.const 88614) "a") (data (i32.const 88617) "a") (data (i32.const 88620) "a") (data (i32.const 88623) "a") (data (i32.const 88626) "a") (data (i32.const 88629) "a") (data (i32.const 88632) "a") (data (i32.const 88635) "a") (data (i32.const 88638) "a") (data (i32.const 88641) "a") (data (i32.const 88644) "a") (data (i32.const 88647) "a") (data (i32.const 88650) "a") (data (i32.const 88653) "a") (data (i32.const 88656) "a") (data (i32.const 88659) "a") (data (i32.const 88662) "a") (data (i32.const 88665) "a") (data (i32.const 88668) "a") (data (i32.const 88671) "a") (data (i32.const 88674) "a") (data (i32.const 88677) "a") (data (i32.const 88680) "a") (data (i32.const 88683) "a") (data (i32.const 88686) "a") (data (i32.const 88689) "a") (data (i32.const 88692) "a") (data (i32.const 88695) "a") (data (i32.const 88698) "a") (data (i32.const 88701) "a") (data (i32.const 88704) "a") (data (i32.const 88707) "a") (data (i32.const 88710) "a") (data (i32.const 88713) "a") (data (i32.const 88716) "a") (data (i32.const 88719) "a") (data (i32.const 88722) "a") (data (i32.const 88725) "a") (data (i32.const 88728) "a") (data (i32.const 88731) "a") (data (i32.const 88734) "a") (data (i32.const 88737) "a") (data (i32.const 88740) "a") (data (i32.const 88743) "a") (data (i32.const 88746) "a") (data (i32.const 88749) "a") (data (i32.const 88752) "a") (data (i32.const 88755) "a") (data (i32.const 88758) "a") (data (i32.const 88761) "a") (data (i32.const 88764) "a") (data (i32.const 88767) "a") (data (i32.const 88770) "a") (data (i32.const 88773) "a") (data (i32.const 88776) "a") (data (i32.const 88779) "a") (data (i32.const 88782) "a") (data (i32.const 88785) "a") (data (i32.const 88788) "a") (data (i32.const 88791) "a") (data (i32.const 88794) "a") (data (i32.const 88797) "a") (data (i32.const 88800) "a") (data (i32.const 88803) "a") (data (i32.const 88806) "a") (data (i32.const 88809) "a") (data (i32.const 88812) "a") (data (i32.const 88815) "a") (data (i32.const 88818) "a") (data (i32.const 88821) "a") (data (i32.const 88824) "a") (data (i32.const 88827) "a") (data (i32.const 88830) "a") (data (i32.const 88833) "a") (data (i32.const 88836) "a") (data (i32.const 88839) "a") (data (i32.const 88842) "a") (data (i32.const 88845) "a") (data (i32.const 88848) "a") (data (i32.const 88851) "a") (data (i32.const 88854) "a") (data (i32.const 88857) "a") (data (i32.const 88860) "a") (data (i32.const 88863) "a") (data (i32.const 88866) "a") (data (i32.const 88869) "a") (data (i32.const 88872) "a") (data (i32.const 88875) "a") (data (i32.const 88878) "a") (data (i32.const 88881) "a") (data (i32.const 88884) "a") (data (i32.const 88887) "a") (data (i32.const 88890) "a") (data (i32.const 88893) "a") (data (i32.const 88896) "a") (data (i32.const 88899) "a") (data (i32.const 88902) "a") (data (i32.const 88905) "a") (data (i32.const 88908) "a") (data (i32.const 88911) "a") (data (i32.const 88914) "a") (data (i32.const 88917) "a") (data (i32.const 88920) "a") (data (i32.const 88923) "a") (data (i32.const 88926) "a") (data (i32.const 88929) "a") (data (i32.const 88932) "a") (data (i32.const 88935) "a") (data (i32.const 88938) "a") (data (i32.const 88941) "a") (data (i32.const 88944) "a") (data (i32.const 88947) "a") (data (i32.const 88950) "a") (data (i32.const 88953) "a") (data (i32.const 88956) "a") (data (i32.const 88959) "a") (data (i32.const 88962) "a") (data (i32.const 88965) "a") (data (i32.const 88968) "a") (data (i32.const 88971) "a") (data (i32.const 88974) "a") (data (i32.const 88977) "a") (data (i32.const 88980) "a") (data (i32.const 88983) "a") (data (i32.const 88986) "a") (data (i32.const 88989) "a") (data (i32.const 88992) "a") (data (i32.const 88995) "a") (data (i32.const 88998) "a") (data (i32.const 89001) "a") (data (i32.const 89004) "a") (data (i32.const 89007) "a") (data (i32.const 89010) "a") (data (i32.const 89013) "a") (data (i32.const 89016) "a") (data (i32.const 89019) "a") (data (i32.const 89022) "a") (data (i32.const 89025) "a") (data (i32.const 89028) "a") (data (i32.const 89031) "a") (data (i32.const 89034) "a") (data (i32.const 89037) "a") (data (i32.const 89040) "a") (data (i32.const 89043) "a") (data (i32.const 89046) "a") (data (i32.const 89049) "a") (data (i32.const 89052) "a") (data (i32.const 89055) "a") (data (i32.const 89058) "a") (data (i32.const 89061) "a") (data (i32.const 89064) "a") (data (i32.const 89067) "a") (data (i32.const 89070) "a") (data (i32.const 89073) "a") (data (i32.const 89076) "a") (data (i32.const 89079) "a") (data (i32.const 89082) "a") (data (i32.const 89085) "a") (data (i32.const 89088) "a") (data (i32.const 89091) "a") (data (i32.const 89094) "a") (data (i32.const 89097) "a") (data (i32.const 89100) "a") (data (i32.const 89103) "a") (data (i32.const 89106) "a") (data (i32.const 89109) "a") (data (i32.const 89112) "a") (data (i32.const 89115) "a") (data (i32.const 89118) "a") (data (i32.const 89121) "a") (data (i32.const 89124) "a") (data (i32.const 89127) "a") (data (i32.const 89130) "a") (data (i32.const 89133) "a") (data (i32.const 89136) "a") (data (i32.const 89139) "a") (data (i32.const 89142) "a") (data (i32.const 89145) "a") (data (i32.const 89148) "a") (data (i32.const 89151) "a") (data (i32.const 89154) "a") (data (i32.const 89157) "a") (data (i32.const 89160) "a") (data (i32.const 89163) "a") (data (i32.const 89166) "a") (data (i32.const 89169) "a") (data (i32.const 89172) "a") (data (i32.const 89175) "a") (data (i32.const 89178) "a") (data (i32.const 89181) "a") (data (i32.const 89184) "a") (data (i32.const 89187) "a") (data (i32.const 89190) "a") (data (i32.const 89193) "a") (data (i32.const 89196) "a") (data (i32.const 89199) "a") (data (i32.const 89202) "a") (data (i32.const 89205) "a") (data (i32.const 89208) "a") (data (i32.const 89211) "a") (data (i32.const 89214) "a") (data (i32.const 89217) "a") (data (i32.const 89220) "a") (data (i32.const 89223) "a") (data (i32.const 89226) "a") (data (i32.const 89229) "a") (data (i32.const 89232) "a") (data (i32.const 89235) "a") (data (i32.const 89238) "a") (data (i32.const 89241) "a") (data (i32.const 89244) "a") (data (i32.const 89247) "a") (data (i32.const 89250) "a") (data (i32.const 89253) "a") (data (i32.const 89256) "a") (data (i32.const 89259) "a") (data (i32.const 89262) "a") (data (i32.const 89265) "a") (data (i32.const 89268) "a") (data (i32.const 89271) "a") (data (i32.const 89274) "a") (data (i32.const 89277) "a") (data (i32.const 89280) "a") (data (i32.const 89283) "a") (data (i32.const 89286) "a") (data (i32.const 89289) "a") (data (i32.const 89292) "a") (data (i32.const 89295) "a") (data (i32.const 89298) "a") (data (i32.const 89301) "a") (data (i32.const 89304) "a") (data (i32.const 89307) "a") (data (i32.const 89310) "a") (data (i32.const 89313) "a") (data (i32.const 89316) "a") (data (i32.const 89319) "a") (data (i32.const 89322) "a") (data (i32.const 89325) "a") (data (i32.const 89328) "a") (data (i32.const 89331) "a") (data (i32.const 89334) "a") (data (i32.const 89337) "a") (data (i32.const 89340) "a") (data (i32.const 89343) "a") (data (i32.const 89346) "a") (data (i32.const 89349) "a") (data (i32.const 89352) "a") (data (i32.const 89355) "a") (data (i32.const 89358) "a") (data (i32.const 89361) "a") (data (i32.const 89364) "a") (data (i32.const 89367) "a") (data (i32.const 89370) "a") (data (i32.const 89373) "a") (data (i32.const 89376) "a") (data (i32.const 89379) "a") (data (i32.const 89382) "a") (data (i32.const 89385) "a") (data (i32.const 89388) "a") (data (i32.const 89391) "a") (data (i32.const 89394) "a") (data (i32.const 89397) "a") (data (i32.const 89400) "a") (data (i32.const 89403) "a") (data (i32.const 89406) "a") (data (i32.const 89409) "a") (data (i32.const 89412) "a") (data (i32.const 89415) "a") (data (i32.const 89418) "a") (data (i32.const 89421) "a") (data (i32.const 89424) "a") (data (i32.const 89427) "a") (data (i32.const 89430) "a") (data (i32.const 89433) "a") (data (i32.const 89436) "a") (data (i32.const 89439) "a") (data (i32.const 89442) "a") (data (i32.const 89445) "a") (data (i32.const 89448) "a") (data (i32.const 89451) "a") (data (i32.const 89454) "a") (data (i32.const 89457) "a") (data (i32.const 89460) "a") (data (i32.const 89463) "a") (data (i32.const 89466) "a") (data (i32.const 89469) "a") (data (i32.const 89472) "a") (data (i32.const 89475) "a") (data (i32.const 89478) "a") (data (i32.const 89481) "a") (data (i32.const 89484) "a") (data (i32.const 89487) "a") (data (i32.const 89490) "a") (data (i32.const 89493) "a") (data (i32.const 89496) "a") (data (i32.const 89499) "a") (data (i32.const 89502) "a") (data (i32.const 89505) "a") (data (i32.const 89508) "a") (data (i32.const 89511) "a") (data (i32.const 89514) "a") (data (i32.const 89517) "a") (data (i32.const 89520) "a") (data (i32.const 89523) "a") (data (i32.const 89526) "a") (data (i32.const 89529) "a") (data (i32.const 89532) "a") (data (i32.const 89535) "a") (data (i32.const 89538) "a") (data (i32.const 89541) "a") (data (i32.const 89544) "a") (data (i32.const 89547) "a") (data (i32.const 89550) "a") (data (i32.const 89553) "a") (data (i32.const 89556) "a") (data (i32.const 89559) "a") (data (i32.const 89562) "a") (data (i32.const 89565) "a") (data (i32.const 89568) "a") (data (i32.const 89571) "a") (data (i32.const 89574) "a") (data (i32.const 89577) "a") (data (i32.const 89580) "a") (data (i32.const 89583) "a") (data (i32.const 89586) "a") (data (i32.const 89589) "a") (data (i32.const 89592) "a") (data (i32.const 89595) "a") (data (i32.const 89598) "a") (data (i32.const 89601) "a") (data (i32.const 89604) "a") (data (i32.const 89607) "a") (data (i32.const 89610) "a") (data (i32.const 89613) "a") (data (i32.const 89616) "a") (data (i32.const 89619) "a") (data (i32.const 89622) "a") (data (i32.const 89625) "a") (data (i32.const 89628) "a") (data (i32.const 89631) "a") (data (i32.const 89634) "a") (data (i32.const 89637) "a") (data (i32.const 89640) "a") (data (i32.const 89643) "a") (data (i32.const 89646) "a") (data (i32.const 89649) "a") (data (i32.const 89652) "a") (data (i32.const 89655) "a") (data (i32.const 89658) "a") (data (i32.const 89661) "a") (data (i32.const 89664) "a") (data (i32.const 89667) "a") (data (i32.const 89670) "a") (data (i32.const 89673) "a") (data (i32.const 89676) "a") (data (i32.const 89679) "a") (data (i32.const 89682) "a") (data (i32.const 89685) "a") (data (i32.const 89688) "a") (data (i32.const 89691) "a") (data (i32.const 89694) "a") (data (i32.const 89697) "a") (data (i32.const 89700) "a") (data (i32.const 89703) "a") (data (i32.const 89706) "a") (data (i32.const 89709) "a") (data (i32.const 89712) "a") (data (i32.const 89715) "a") (data (i32.const 89718) "a") (data (i32.const 89721) "a") (data (i32.const 89724) "a") (data (i32.const 89727) "a") (data (i32.const 89730) "a") (data (i32.const 89733) "a") (data (i32.const 89736) "a") (data (i32.const 89739) "a") (data (i32.const 89742) "a") (data (i32.const 89745) "a") (data (i32.const 89748) "a") (data (i32.const 89751) "a") (data (i32.const 89754) "a") (data (i32.const 89757) "a") (data (i32.const 89760) "a") (data (i32.const 89763) "a") (data (i32.const 89766) "a") (data (i32.const 89769) "a") (data (i32.const 89772) "a") (data (i32.const 89775) "a") (data (i32.const 89778) "a") (data (i32.const 89781) "a") (data (i32.const 89784) "a") (data (i32.const 89787) "a") (data (i32.const 89790) "a") (data (i32.const 89793) "a") (data (i32.const 89796) "a") (data (i32.const 89799) "a") (data (i32.const 89802) "a") (data (i32.const 89805) "a") (data (i32.const 89808) "a") (data (i32.const 89811) "a") (data (i32.const 89814) "a") (data (i32.const 89817) "a") (data (i32.const 89820) "a") (data (i32.const 89823) "a") (data (i32.const 89826) "a") (data (i32.const 89829) "a") (data (i32.const 89832) "a") (data (i32.const 89835) "a") (data (i32.const 89838) "a") (data (i32.const 89841) "a") (data (i32.const 89844) "a") (data (i32.const 89847) "a") (data (i32.const 89850) "a") (data (i32.const 89853) "a") (data (i32.const 89856) "a") (data (i32.const 89859) "a") (data (i32.const 89862) "a") (data (i32.const 89865) "a") (data (i32.const 89868) "a") (data (i32.const 89871) "a") (data (i32.const 89874) "a") (data (i32.const 89877) "a") (data (i32.const 89880) "a") (data (i32.const 89883) "a") (data (i32.const 89886) "a") (data (i32.const 89889) "a") (data (i32.const 89892) "a") (data (i32.const 89895) "a") (data (i32.const 89898) "a") (data (i32.const 89901) "a") (data (i32.const 89904) "a") (data (i32.const 89907) "a") (data (i32.const 89910) "a") (data (i32.const 89913) "a") (data (i32.const 89916) "a") (data (i32.const 89919) "a") (data (i32.const 89922) "a") (data (i32.const 89925) "a") (data (i32.const 89928) "a") (data (i32.const 89931) "a") (data (i32.const 89934) "a") (data (i32.const 89937) "a") (data (i32.const 89940) "a") (data (i32.const 89943) "a") (data (i32.const 89946) "a") (data (i32.const 89949) "a") (data (i32.const 89952) "a") (data (i32.const 89955) "a") (data (i32.const 89958) "a") (data (i32.const 89961) "a") (data (i32.const 89964) "a") (data (i32.const 89967) "a") (data (i32.const 89970) "a") (data (i32.const 89973) "a") (data (i32.const 89976) "a") (data (i32.const 89979) "a") (data (i32.const 89982) "a") (data (i32.const 89985) "a") (data (i32.const 89988) "a") (data (i32.const 89991) "a") (data (i32.const 89994) "a") (data (i32.const 89997) "a") (data (i32.const 90000) "a") (data (i32.const 90003) "a") (data (i32.const 90006) "a") (data (i32.const 90009) "a") (data (i32.const 90012) "a") (data (i32.const 90015) "a") (data (i32.const 90018) "a") (data (i32.const 90021) "a") (data (i32.const 90024) "a") (data (i32.const 90027) "a") (data (i32.const 90030) "a") (data (i32.const 90033) "a") (data (i32.const 90036) "a") (data (i32.const 90039) "a") (data (i32.const 90042) "a") (data (i32.const 90045) "a") (data (i32.const 90048) "a") (data (i32.const 90051) "a") (data (i32.const 90054) "a") (data (i32.const 90057) "a") (data (i32.const 90060) "a") (data (i32.const 90063) "a") (data (i32.const 90066) "a") (data (i32.const 90069) "a") (data (i32.const 90072) "a") (data (i32.const 90075) "a") (data (i32.const 90078) "a") (data (i32.const 90081) "a") (data (i32.const 90084) "a") (data (i32.const 90087) "a") (data (i32.const 90090) "a") (data (i32.const 90093) "a") (data (i32.const 90096) "a") (data (i32.const 90099) "a") (data (i32.const 90102) "a") (data (i32.const 90105) "a") (data (i32.const 90108) "a") (data (i32.const 90111) "a") (data (i32.const 90114) "a") (data (i32.const 90117) "a") (data (i32.const 90120) "a") (data (i32.const 90123) "a") (data (i32.const 90126) "a") (data (i32.const 90129) "a") (data (i32.const 90132) "a") (data (i32.const 90135) "a") (data (i32.const 90138) "a") (data (i32.const 90141) "a") (data (i32.const 90144) "a") (data (i32.const 90147) "a") (data (i32.const 90150) "a") (data (i32.const 90153) "a") (data (i32.const 90156) "a") (data (i32.const 90159) "a") (data (i32.const 90162) "a") (data (i32.const 90165) "a") (data (i32.const 90168) "a") (data (i32.const 90171) "a") (data (i32.const 90174) "a") (data (i32.const 90177) "a") (data (i32.const 90180) "a") (data (i32.const 90183) "a") (data (i32.const 90186) "a") (data (i32.const 90189) "a") (data (i32.const 90192) "a") (data (i32.const 90195) "a") (data (i32.const 90198) "a") (data (i32.const 90201) "a") (data (i32.const 90204) "a") (data (i32.const 90207) "a") (data (i32.const 90210) "a") (data (i32.const 90213) "a") (data (i32.const 90216) "a") (data (i32.const 90219) "a") (data (i32.const 90222) "a") (data (i32.const 90225) "a") (data (i32.const 90228) "a") (data (i32.const 90231) "a") (data (i32.const 90234) "a") (data (i32.const 90237) "a") (data (i32.const 90240) "a") (data (i32.const 90243) "a") (data (i32.const 90246) "a") (data (i32.const 90249) "a") (data (i32.const 90252) "a") (data (i32.const 90255) "a") (data (i32.const 90258) "a") (data (i32.const 90261) "a") (data (i32.const 90264) "a") (data (i32.const 90267) "a") (data (i32.const 90270) "a") (data (i32.const 90273) "a") (data (i32.const 90276) "a") (data (i32.const 90279) "a") (data (i32.const 90282) "a") (data (i32.const 90285) "a") (data (i32.const 90288) "a") (data (i32.const 90291) "a") (data (i32.const 90294) "a") (data (i32.const 90297) "a") (data (i32.const 90300) "a") (data (i32.const 90303) "a") (data (i32.const 90306) "a") (data (i32.const 90309) "a") (data (i32.const 90312) "a") (data (i32.const 90315) "a") (data (i32.const 90318) "a") (data (i32.const 90321) "a") (data (i32.const 90324) "a") (data (i32.const 90327) "a") (data (i32.const 90330) "a") (data (i32.const 90333) "a") (data (i32.const 90336) "a") (data (i32.const 90339) "a") (data (i32.const 90342) "a") (data (i32.const 90345) "a") (data (i32.const 90348) "a") (data (i32.const 90351) "a") (data (i32.const 90354) "a") (data (i32.const 90357) "a") (data (i32.const 90360) "a") (data (i32.const 90363) "a") (data (i32.const 90366) "a") (data (i32.const 90369) "a") (data (i32.const 90372) "a") (data (i32.const 90375) "a") (data (i32.const 90378) "a") (data (i32.const 90381) "a") (data (i32.const 90384) "a") (data (i32.const 90387) "a") (data (i32.const 90390) "a") (data (i32.const 90393) "a") (data (i32.const 90396) "a") (data (i32.const 90399) "a") (data (i32.const 90402) "a") (data (i32.const 90405) "a") (data (i32.const 90408) "a") (data (i32.const 90411) "a") (data (i32.const 90414) "a") (data (i32.const 90417) "a") (data (i32.const 90420) "a") (data (i32.const 90423) "a") (data (i32.const 90426) "a") (data (i32.const 90429) "a") (data (i32.const 90432) "a") (data (i32.const 90435) "a") (data (i32.const 90438) "a") (data (i32.const 90441) "a") (data (i32.const 90444) "a") (data (i32.const 90447) "a") (data (i32.const 90450) "a") (data (i32.const 90453) "a") (data (i32.const 90456) "a") (data (i32.const 90459) "a") (data (i32.const 90462) "a") (data (i32.const 90465) "a") (data (i32.const 90468) "a") (data (i32.const 90471) "a") (data (i32.const 90474) "a") (data (i32.const 90477) "a") (data (i32.const 90480) "a") (data (i32.const 90483) "a") (data (i32.const 90486) "a") (data (i32.const 90489) "a") (data (i32.const 90492) "a") (data (i32.const 90495) "a") (data (i32.const 90498) "a") (data (i32.const 90501) "a") (data (i32.const 90504) "a") (data (i32.const 90507) "a") (data (i32.const 90510) "a") (data (i32.const 90513) "a") (data (i32.const 90516) "a") (data (i32.const 90519) "a") (data (i32.const 90522) "a") (data (i32.const 90525) "a") (data (i32.const 90528) "a") (data (i32.const 90531) "a") (data (i32.const 90534) "a") (data (i32.const 90537) "a") (data (i32.const 90540) "a") (data (i32.const 90543) "a") (data (i32.const 90546) "a") (data (i32.const 90549) "a") (data (i32.const 90552) "a") (data (i32.const 90555) "a") (data (i32.const 90558) "a") (data (i32.const 90561) "a") (data (i32.const 90564) "a") (data (i32.const 90567) "a") (data (i32.const 90570) "a") (data (i32.const 90573) "a") (data (i32.const 90576) "a") (data (i32.const 90579) "a") (data (i32.const 90582) "a") (data (i32.const 90585) "a") (data (i32.const 90588) "a") (data (i32.const 90591) "a") (data (i32.const 90594) "a") (data (i32.const 90597) "a") (data (i32.const 90600) "a") (data (i32.const 90603) "a") (data (i32.const 90606) "a") (data (i32.const 90609) "a") (data (i32.const 90612) "a") (data (i32.const 90615) "a") (data (i32.const 90618) "a") (data (i32.const 90621) "a") (data (i32.const 90624) "a") (data (i32.const 90627) "a") (data (i32.const 90630) "a") (data (i32.const 90633) "a") (data (i32.const 90636) "a") (data (i32.const 90639) "a") (data (i32.const 90642) "a") (data (i32.const 90645) "a") (data (i32.const 90648) "a") (data (i32.const 90651) "a") (data (i32.const 90654) "a") (data (i32.const 90657) "a") (data (i32.const 90660) "a") (data (i32.const 90663) "a") (data (i32.const 90666) "a") (data (i32.const 90669) "a") (data (i32.const 90672) "a") (data (i32.const 90675) "a") (data (i32.const 90678) "a") (data (i32.const 90681) "a") (data (i32.const 90684) "a") (data (i32.const 90687) "a") (data (i32.const 90690) "a") (data (i32.const 90693) "a") (data (i32.const 90696) "a") (data (i32.const 90699) "a") (data (i32.const 90702) "a") (data (i32.const 90705) "a") (data (i32.const 90708) "a") (data (i32.const 90711) "a") (data (i32.const 90714) "a") (data (i32.const 90717) "a") (data (i32.const 90720) "a") (data (i32.const 90723) "a") (data (i32.const 90726) "a") (data (i32.const 90729) "a") (data (i32.const 90732) "a") (data (i32.const 90735) "a") (data (i32.const 90738) "a") (data (i32.const 90741) "a") (data (i32.const 90744) "a") (data (i32.const 90747) "a") (data (i32.const 90750) "a") (data (i32.const 90753) "a") (data (i32.const 90756) "a") (data (i32.const 90759) "a") (data (i32.const 90762) "a") (data (i32.const 90765) "a") (data (i32.const 90768) "a") (data (i32.const 90771) "a") (data (i32.const 90774) "a") (data (i32.const 90777) "a") (data (i32.const 90780) "a") (data (i32.const 90783) "a") (data (i32.const 90786) "a") (data (i32.const 90789) "a") (data (i32.const 90792) "a") (data (i32.const 90795) "a") (data (i32.const 90798) "a") (data (i32.const 90801) "a") (data (i32.const 90804) "a") (data (i32.const 90807) "a") (data (i32.const 90810) "a") (data (i32.const 90813) "a") (data (i32.const 90816) "a") (data (i32.const 90819) "a") (data (i32.const 90822) "a") (data (i32.const 90825) "a") (data (i32.const 90828) "a") (data (i32.const 90831) "a") (data (i32.const 90834) "a") (data (i32.const 90837) "a") (data (i32.const 90840) "a") (data (i32.const 90843) "a") (data (i32.const 90846) "a") (data (i32.const 90849) "a") (data (i32.const 90852) "a") (data (i32.const 90855) "a") (data (i32.const 90858) "a") (data (i32.const 90861) "a") (data (i32.const 90864) "a") (data (i32.const 90867) "a") (data (i32.const 90870) "a") (data (i32.const 90873) "a") (data (i32.const 90876) "a") (data (i32.const 90879) "a") (data (i32.const 90882) "a") (data (i32.const 90885) "a") (data (i32.const 90888) "a") (data (i32.const 90891) "a") (data (i32.const 90894) "a") (data (i32.const 90897) "a") (data (i32.const 90900) "a") (data (i32.const 90903) "a") (data (i32.const 90906) "a") (data (i32.const 90909) "a") (data (i32.const 90912) "a") (data (i32.const 90915) "a") (data (i32.const 90918) "a") (data (i32.const 90921) "a") (data (i32.const 90924) "a") (data (i32.const 90927) "a") (data (i32.const 90930) "a") (data (i32.const 90933) "a") (data (i32.const 90936) "a") (data (i32.const 90939) "a") (data (i32.const 90942) "a") (data (i32.const 90945) "a") (data (i32.const 90948) "a") (data (i32.const 90951) "a") (data (i32.const 90954) "a") (data (i32.const 90957) "a") (data (i32.const 90960) "a") (data (i32.const 90963) "a") (data (i32.const 90966) "a") (data (i32.const 90969) "a") (data (i32.const 90972) "a") (data (i32.const 90975) "a") (data (i32.const 90978) "a") (data (i32.const 90981) "a") (data (i32.const 90984) "a") (data (i32.const 90987) "a") (data (i32.const 90990) "a") (data (i32.const 90993) "a") (data (i32.const 90996) "a") (data (i32.const 90999) "a") (data (i32.const 91002) "a") (data (i32.const 91005) "a") (data (i32.const 91008) "a") (data (i32.const 91011) "a") (data (i32.const 91014) "a") (data (i32.const 91017) "a") (data (i32.const 91020) "a") (data (i32.const 91023) "a") (data (i32.const 91026) "a") (data (i32.const 91029) "a") (data (i32.const 91032) "a") (data (i32.const 91035) "a") (data (i32.const 91038) "a") (data (i32.const 91041) "a") (data (i32.const 91044) "a") (data (i32.const 91047) "a") (data (i32.const 91050) "a") (data (i32.const 91053) "a") (data (i32.const 91056) "a") (data (i32.const 91059) "a") (data (i32.const 91062) "a") (data (i32.const 91065) "a") (data (i32.const 91068) "a") (data (i32.const 91071) "a") (data (i32.const 91074) "a") (data (i32.const 91077) "a") (data (i32.const 91080) "a") (data (i32.const 91083) "a") (data (i32.const 91086) "a") (data (i32.const 91089) "a") (data (i32.const 91092) "a") (data (i32.const 91095) "a") (data (i32.const 91098) "a") (data (i32.const 91101) "a") (data (i32.const 91104) "a") (data (i32.const 91107) "a") (data (i32.const 91110) "a") (data (i32.const 91113) "a") (data (i32.const 91116) "a") (data (i32.const 91119) "a") (data (i32.const 91122) "a") (data (i32.const 91125) "a") (data (i32.const 91128) "a") (data (i32.const 91131) "a") (data (i32.const 91134) "a") (data (i32.const 91137) "a") (data (i32.const 91140) "a") (data (i32.const 91143) "a") (data (i32.const 91146) "a") (data (i32.const 91149) "a") (data (i32.const 91152) "a") (data (i32.const 91155) "a") (data (i32.const 91158) "a") (data (i32.const 91161) "a") (data (i32.const 91164) "a") (data (i32.const 91167) "a") (data (i32.const 91170) "a") (data (i32.const 91173) "a") (data (i32.const 91176) "a") (data (i32.const 91179) "a") (data (i32.const 91182) "a") (data (i32.const 91185) "a") (data (i32.const 91188) "a") (data (i32.const 91191) "a") (data (i32.const 91194) "a") (data (i32.const 91197) "a") (data (i32.const 91200) "a") (data (i32.const 91203) "a") (data (i32.const 91206) "a") (data (i32.const 91209) "a") (data (i32.const 91212) "a") (data (i32.const 91215) "a") (data (i32.const 91218) "a") (data (i32.const 91221) "a") (data (i32.const 91224) "a") (data (i32.const 91227) "a") (data (i32.const 91230) "a") (data (i32.const 91233) "a") (data (i32.const 91236) "a") (data (i32.const 91239) "a") (data (i32.const 91242) "a") (data (i32.const 91245) "a") (data (i32.const 91248) "a") (data (i32.const 91251) "a") (data (i32.const 91254) "a") (data (i32.const 91257) "a") (data (i32.const 91260) "a") (data (i32.const 91263) "a") (data (i32.const 91266) "a") (data (i32.const 91269) "a") (data (i32.const 91272) "a") (data (i32.const 91275) "a") (data (i32.const 91278) "a") (data (i32.const 91281) "a") (data (i32.const 91284) "a") (data (i32.const 91287) "a") (data (i32.const 91290) "a") (data (i32.const 91293) "a") (data (i32.const 91296) "a") (data (i32.const 91299) "a") (data (i32.const 91302) "a") (data (i32.const 91305) "a") (data (i32.const 91308) "a") (data (i32.const 91311) "a") (data (i32.const 91314) "a") (data (i32.const 91317) "a") (data (i32.const 91320) "a") (data (i32.const 91323) "a") (data (i32.const 91326) "a") (data (i32.const 91329) "a") (data (i32.const 91332) "a") (data (i32.const 91335) "a") (data (i32.const 91338) "a") (data (i32.const 91341) "a") (data (i32.const 91344) "a") (data (i32.const 91347) "a") (data (i32.const 91350) "a") (data (i32.const 91353) "a") (data (i32.const 91356) "a") (data (i32.const 91359) "a") (data (i32.const 91362) "a") (data (i32.const 91365) "a") (data (i32.const 91368) "a") (data (i32.const 91371) "a") (data (i32.const 91374) "a") (data (i32.const 91377) "a") (data (i32.const 91380) "a") (data (i32.const 91383) "a") (data (i32.const 91386) "a") (data (i32.const 91389) "a") (data (i32.const 91392) "a") (data (i32.const 91395) "a") (data (i32.const 91398) "a") (data (i32.const 91401) "a") (data (i32.const 91404) "a") (data (i32.const 91407) "a") (data (i32.const 91410) "a") (data (i32.const 91413) "a") (data (i32.const 91416) "a") (data (i32.const 91419) "a") (data (i32.const 91422) "a") (data (i32.const 91425) "a") (data (i32.const 91428) "a") (data (i32.const 91431) "a") (data (i32.const 91434) "a") (data (i32.const 91437) "a") (data (i32.const 91440) "a") (data (i32.const 91443) "a") (data (i32.const 91446) "a") (data (i32.const 91449) "a") (data (i32.const 91452) "a") (data (i32.const 91455) "a") (data (i32.const 91458) "a") (data (i32.const 91461) "a") (data (i32.const 91464) "a") (data (i32.const 91467) "a") (data (i32.const 91470) "a") (data (i32.const 91473) "a") (data (i32.const 91476) "a") (data (i32.const 91479) "a") (data (i32.const 91482) "a") (data (i32.const 91485) "a") (data (i32.const 91488) "a") (data (i32.const 91491) "a") (data (i32.const 91494) "a") (data (i32.const 91497) "a") (data (i32.const 91500) "a") (data (i32.const 91503) "a") (data (i32.const 91506) "a") (data (i32.const 91509) "a") (data (i32.const 91512) "a") (data (i32.const 91515) "a") (data (i32.const 91518) "a") (data (i32.const 91521) "a") (data (i32.const 91524) "a") (data (i32.const 91527) "a") (data (i32.const 91530) "a") (data (i32.const 91533) "a") (data (i32.const 91536) "a") (data (i32.const 91539) "a") (data (i32.const 91542) "a") (data (i32.const 91545) "a") (data (i32.const 91548) "a") (data (i32.const 91551) "a") (data (i32.const 91554) "a") (data (i32.const 91557) "a") (data (i32.const 91560) "a") (data (i32.const 91563) "a") (data (i32.const 91566) "a") (data (i32.const 91569) "a") (data (i32.const 91572) "a") (data (i32.const 91575) "a") (data (i32.const 91578) "a") (data (i32.const 91581) "a") (data (i32.const 91584) "a") (data (i32.const 91587) "a") (data (i32.const 91590) "a") (data (i32.const 91593) "a") (data (i32.const 91596) "a") (data (i32.const 91599) "a") (data (i32.const 91602) "a") (data (i32.const 91605) "a") (data (i32.const 91608) "a") (data (i32.const 91611) "a") (data (i32.const 91614) "a") (data (i32.const 91617) "a") (data (i32.const 91620) "a") (data (i32.const 91623) "a") (data (i32.const 91626) "a") (data (i32.const 91629) "a") (data (i32.const 91632) "a") (data (i32.const 91635) "a") (data (i32.const 91638) "a") (data (i32.const 91641) "a") (data (i32.const 91644) "a") (data (i32.const 91647) "a") (data (i32.const 91650) "a") (data (i32.const 91653) "a") (data (i32.const 91656) "a") (data (i32.const 91659) "a") (data (i32.const 91662) "a") (data (i32.const 91665) "a") (data (i32.const 91668) "a") (data (i32.const 91671) "a") (data (i32.const 91674) "a") (data (i32.const 91677) "a") (data (i32.const 91680) "a") (data (i32.const 91683) "a") (data (i32.const 91686) "a") (data (i32.const 91689) "a") (data (i32.const 91692) "a") (data (i32.const 91695) "a") (data (i32.const 91698) "a") (data (i32.const 91701) "a") (data (i32.const 91704) "a") (data (i32.const 91707) "a") (data (i32.const 91710) "a") (data (i32.const 91713) "a") (data (i32.const 91716) "a") (data (i32.const 91719) "a") (data (i32.const 91722) "a") (data (i32.const 91725) "a") (data (i32.const 91728) "a") (data (i32.const 91731) "a") (data (i32.const 91734) "a") (data (i32.const 91737) "a") (data (i32.const 91740) "a") (data (i32.const 91743) "a") (data (i32.const 91746) "a") (data (i32.const 91749) "a") (data (i32.const 91752) "a") (data (i32.const 91755) "a") (data (i32.const 91758) "a") (data (i32.const 91761) "a") (data (i32.const 91764) "a") (data (i32.const 91767) "a") (data (i32.const 91770) "a") (data (i32.const 91773) "a") (data (i32.const 91776) "a") (data (i32.const 91779) "a") (data (i32.const 91782) "a") (data (i32.const 91785) "a") (data (i32.const 91788) "a") (data (i32.const 91791) "a") (data (i32.const 91794) "a") (data (i32.const 91797) "a") (data (i32.const 91800) "a") (data (i32.const 91803) "a") (data (i32.const 91806) "a") (data (i32.const 91809) "a") (data (i32.const 91812) "a") (data (i32.const 91815) "a") (data (i32.const 91818) "a") (data (i32.const 91821) "a") (data (i32.const 91824) "a") (data (i32.const 91827) "a") (data (i32.const 91830) "a") (data (i32.const 91833) "a") (data (i32.const 91836) "a") (data (i32.const 91839) "a") (data (i32.const 91842) "a") (data (i32.const 91845) "a") (data (i32.const 91848) "a") (data (i32.const 91851) "a") (data (i32.const 91854) "a") (data (i32.const 91857) "a") (data (i32.const 91860) "a") (data (i32.const 91863) "a") (data (i32.const 91866) "a") (data (i32.const 91869) "a") (data (i32.const 91872) "a") (data (i32.const 91875) "a") (data (i32.const 91878) "a") (data (i32.const 91881) "a") (data (i32.const 91884) "a") (data (i32.const 91887) "a") (data (i32.const 91890) "a") (data (i32.const 91893) "a") (data (i32.const 91896) "a") (data (i32.const 91899) "a") (data (i32.const 91902) "a") (data (i32.const 91905) "a") (data (i32.const 91908) "a") (data (i32.const 91911) "a") (data (i32.const 91914) "a") (data (i32.const 91917) "a") (data (i32.const 91920) "a") (data (i32.const 91923) "a") (data (i32.const 91926) "a") (data (i32.const 91929) "a") (data (i32.const 91932) "a") (data (i32.const 91935) "a") (data (i32.const 91938) "a") (data (i32.const 91941) "a") (data (i32.const 91944) "a") (data (i32.const 91947) "a") (data (i32.const 91950) "a") (data (i32.const 91953) "a") (data (i32.const 91956) "a") (data (i32.const 91959) "a") (data (i32.const 91962) "a") (data (i32.const 91965) "a") (data (i32.const 91968) "a") (data (i32.const 91971) "a") (data (i32.const 91974) "a") (data (i32.const 91977) "a") (data (i32.const 91980) "a") (data (i32.const 91983) "a") (data (i32.const 91986) "a") (data (i32.const 91989) "a") (data (i32.const 91992) "a") (data (i32.const 91995) "a") (data (i32.const 91998) "a") (data (i32.const 92001) "a") (data (i32.const 92004) "a") (data (i32.const 92007) "a") (data (i32.const 92010) "a") (data (i32.const 92013) "a") (data (i32.const 92016) "a") (data (i32.const 92019) "a") (data (i32.const 92022) "a") (data (i32.const 92025) "a") (data (i32.const 92028) "a") (data (i32.const 92031) "a") (data (i32.const 92034) "a") (data (i32.const 92037) "a") (data (i32.const 92040) "a") (data (i32.const 92043) "a") (data (i32.const 92046) "a") (data (i32.const 92049) "a") (data (i32.const 92052) "a") (data (i32.const 92055) "a") (data (i32.const 92058) "a") (data (i32.const 92061) "a") (data (i32.const 92064) "a") (data (i32.const 92067) "a") (data (i32.const 92070) "a") (data (i32.const 92073) "a") (data (i32.const 92076) "a") (data (i32.const 92079) "a") (data (i32.const 92082) "a") (data (i32.const 92085) "a") (data (i32.const 92088) "a") (data (i32.const 92091) "a") (data (i32.const 92094) "a") (data (i32.const 92097) "a") (data (i32.const 92100) "a") (data (i32.const 92103) "a") (data (i32.const 92106) "a") (data (i32.const 92109) "a") (data (i32.const 92112) "a") (data (i32.const 92115) "a") (data (i32.const 92118) "a") (data (i32.const 92121) "a") (data (i32.const 92124) "a") (data (i32.const 92127) "a") (data (i32.const 92130) "a") (data (i32.const 92133) "a") (data (i32.const 92136) "a") (data (i32.const 92139) "a") (data (i32.const 92142) "a") (data (i32.const 92145) "a") (data (i32.const 92148) "a") (data (i32.const 92151) "a") (data (i32.const 92154) "a") (data (i32.const 92157) "a") (data (i32.const 92160) "a") (data (i32.const 92163) "a") (data (i32.const 92166) "a") (data (i32.const 92169) "a") (data (i32.const 92172) "a") (data (i32.const 92175) "a") (data (i32.const 92178) "a") (data (i32.const 92181) "a") (data (i32.const 92184) "a") (data (i32.const 92187) "a") (data (i32.const 92190) "a") (data (i32.const 92193) "a") (data (i32.const 92196) "a") (data (i32.const 92199) "a") (data (i32.const 92202) "a") (data (i32.const 92205) "a") (data (i32.const 92208) "a") (data (i32.const 92211) "a") (data (i32.const 92214) "a") (data (i32.const 92217) "a") (data (i32.const 92220) "a") (data (i32.const 92223) "a") (data (i32.const 92226) "a") (data (i32.const 92229) "a") (data (i32.const 92232) "a") (data (i32.const 92235) "a") (data (i32.const 92238) "a") (data (i32.const 92241) "a") (data (i32.const 92244) "a") (data (i32.const 92247) "a") (data (i32.const 92250) "a") (data (i32.const 92253) "a") (data (i32.const 92256) "a") (data (i32.const 92259) "a") (data (i32.const 92262) "a") (data (i32.const 92265) "a") (data (i32.const 92268) "a") (data (i32.const 92271) "a") (data (i32.const 92274) "a") (data (i32.const 92277) "a") (data (i32.const 92280) "a") (data (i32.const 92283) "a") (data (i32.const 92286) "a") (data (i32.const 92289) "a") (data (i32.const 92292) "a") (data (i32.const 92295) "a") (data (i32.const 92298) "a") (data (i32.const 92301) "a") (data (i32.const 92304) "a") (data (i32.const 92307) "a") (data (i32.const 92310) "a") (data (i32.const 92313) "a") (data (i32.const 92316) "a") (data (i32.const 92319) "a") (data (i32.const 92322) "a") (data (i32.const 92325) "a") (data (i32.const 92328) "a") (data (i32.const 92331) "a") (data (i32.const 92334) "a") (data (i32.const 92337) "a") (data (i32.const 92340) "a") (data (i32.const 92343) "a") (data (i32.const 92346) "a") (data (i32.const 92349) "a") (data (i32.const 92352) "a") (data (i32.const 92355) "a") (data (i32.const 92358) "a") (data (i32.const 92361) "a") (data (i32.const 92364) "a") (data (i32.const 92367) "a") (data (i32.const 92370) "a") (data (i32.const 92373) "a") (data (i32.const 92376) "a") (data (i32.const 92379) "a") (data (i32.const 92382) "a") (data (i32.const 92385) "a") (data (i32.const 92388) "a") (data (i32.const 92391) "a") (data (i32.const 92394) "a") (data (i32.const 92397) "a") (data (i32.const 92400) "a") (data (i32.const 92403) "a") (data (i32.const 92406) "a") (data (i32.const 92409) "a") (data (i32.const 92412) "a") (data (i32.const 92415) "a") (data (i32.const 92418) "a") (data (i32.const 92421) "a") (data (i32.const 92424) "a") (data (i32.const 92427) "a") (data (i32.const 92430) "a") (data (i32.const 92433) "a") (data (i32.const 92436) "a") (data (i32.const 92439) "a") (data (i32.const 92442) "a") (data (i32.const 92445) "a") (data (i32.const 92448) "a") (data (i32.const 92451) "a") (data (i32.const 92454) "a") (data (i32.const 92457) "a") (data (i32.const 92460) "a") (data (i32.const 92463) "a") (data (i32.const 92466) "a") (data (i32.const 92469) "a") (data (i32.const 92472) "a") (data (i32.const 92475) "a") (data (i32.const 92478) "a") (data (i32.const 92481) "a") (data (i32.const 92484) "a") (data (i32.const 92487) "a") (data (i32.const 92490) "a") (data (i32.const 92493) "a") (data (i32.const 92496) "a") (data (i32.const 92499) "a") (data (i32.const 92502) "a") (data (i32.const 92505) "a") (data (i32.const 92508) "a") (data (i32.const 92511) "a") (data (i32.const 92514) "a") (data (i32.const 92517) "a") (data (i32.const 92520) "a") (data (i32.const 92523) "a") (data (i32.const 92526) "a") (data (i32.const 92529) "a") (data (i32.const 92532) "a") (data (i32.const 92535) "a") (data (i32.const 92538) "a") (data (i32.const 92541) "a") (data (i32.const 92544) "a") (data (i32.const 92547) "a") (data (i32.const 92550) "a") (data (i32.const 92553) "a") (data (i32.const 92556) "a") (data (i32.const 92559) "a") (data (i32.const 92562) "a") (data (i32.const 92565) "a") (data (i32.const 92568) "a") (data (i32.const 92571) "a") (data (i32.const 92574) "a") (data (i32.const 92577) "a") (data (i32.const 92580) "a") (data (i32.const 92583) "a") (data (i32.const 92586) "a") (data (i32.const 92589) "a") (data (i32.const 92592) "a") (data (i32.const 92595) "a") (data (i32.const 92598) "a") (data (i32.const 92601) "a") (data (i32.const 92604) "a") (data (i32.const 92607) "a") (data (i32.const 92610) "a") (data (i32.const 92613) "a") (data (i32.const 92616) "a") (data (i32.const 92619) "a") (data (i32.const 92622) "a") (data (i32.const 92625) "a") (data (i32.const 92628) "a") (data (i32.const 92631) "a") (data (i32.const 92634) "a") (data (i32.const 92637) "a") (data (i32.const 92640) "a") (data (i32.const 92643) "a") (data (i32.const 92646) "a") (data (i32.const 92649) "a") (data (i32.const 92652) "a") (data (i32.const 92655) "a") (data (i32.const 92658) "a") (data (i32.const 92661) "a") (data (i32.const 92664) "a") (data (i32.const 92667) "a") (data (i32.const 92670) "a") (data (i32.const 92673) "a") (data (i32.const 92676) "a") (data (i32.const 92679) "a") (data (i32.const 92682) "a") (data (i32.const 92685) "a") (data (i32.const 92688) "a") (data (i32.const 92691) "a") (data (i32.const 92694) "a") (data (i32.const 92697) "a") (data (i32.const 92700) "a") (data (i32.const 92703) "a") (data (i32.const 92706) "a") (data (i32.const 92709) "a") (data (i32.const 92712) "a") (data (i32.const 92715) "a") (data (i32.const 92718) "a") (data (i32.const 92721) "a") (data (i32.const 92724) "a") (data (i32.const 92727) "a") (data (i32.const 92730) "a") (data (i32.const 92733) "a") (data (i32.const 92736) "a") (data (i32.const 92739) "a") (data (i32.const 92742) "a") (data (i32.const 92745) "a") (data (i32.const 92748) "a") (data (i32.const 92751) "a") (data (i32.const 92754) "a") (data (i32.const 92757) "a") (data (i32.const 92760) "a") (data (i32.const 92763) "a") (data (i32.const 92766) "a") (data (i32.const 92769) "a") (data (i32.const 92772) "a") (data (i32.const 92775) "a") (data (i32.const 92778) "a") (data (i32.const 92781) "a") (data (i32.const 92784) "a") (data (i32.const 92787) "a") (data (i32.const 92790) "a") (data (i32.const 92793) "a") (data (i32.const 92796) "a") (data (i32.const 92799) "a") (data (i32.const 92802) "a") (data (i32.const 92805) "a") (data (i32.const 92808) "a") (data (i32.const 92811) "a") (data (i32.const 92814) "a") (data (i32.const 92817) "a") (data (i32.const 92820) "a") (data (i32.const 92823) "a") (data (i32.const 92826) "a") (data (i32.const 92829) "a") (data (i32.const 92832) "a") (data (i32.const 92835) "a") (data (i32.const 92838) "a") (data (i32.const 92841) "a") (data (i32.const 92844) "a") (data (i32.const 92847) "a") (data (i32.const 92850) "a") (data (i32.const 92853) "a") (data (i32.const 92856) "a") (data (i32.const 92859) "a") (data (i32.const 92862) "a") (data (i32.const 92865) "a") (data (i32.const 92868) "a") (data (i32.const 92871) "a") (data (i32.const 92874) "a") (data (i32.const 92877) "a") (data (i32.const 92880) "a") (data (i32.const 92883) "a") (data (i32.const 92886) "a") (data (i32.const 92889) "a") (data (i32.const 92892) "a") (data (i32.const 92895) "a") (data (i32.const 92898) "a") (data (i32.const 92901) "a") (data (i32.const 92904) "a") (data (i32.const 92907) "a") (data (i32.const 92910) "a") (data (i32.const 92913) "a") (data (i32.const 92916) "a") (data (i32.const 92919) "a") (data (i32.const 92922) "a") (data (i32.const 92925) "a") (data (i32.const 92928) "a") (data (i32.const 92931) "a") (data (i32.const 92934) "a") (data (i32.const 92937) "a") (data (i32.const 92940) "a") (data (i32.const 92943) "a") (data (i32.const 92946) "a") (data (i32.const 92949) "a") (data (i32.const 92952) "a") (data (i32.const 92955) "a") (data (i32.const 92958) "a") (data (i32.const 92961) "a") (data (i32.const 92964) "a") (data (i32.const 92967) "a") (data (i32.const 92970) "a") (data (i32.const 92973) "a") (data (i32.const 92976) "a") (data (i32.const 92979) "a") (data (i32.const 92982) "a") (data (i32.const 92985) "a") (data (i32.const 92988) "a") (data (i32.const 92991) "a") (data (i32.const 92994) "a") (data (i32.const 92997) "a") (data (i32.const 93000) "a") (data (i32.const 93003) "a") (data (i32.const 93006) "a") (data (i32.const 93009) "a") (data (i32.const 93012) "a") (data (i32.const 93015) "a") (data (i32.const 93018) "a") (data (i32.const 93021) "a") (data (i32.const 93024) "a") (data (i32.const 93027) "a") (data (i32.const 93030) "a") (data (i32.const 93033) "a") (data (i32.const 93036) "a") (data (i32.const 93039) "a") (data (i32.const 93042) "a") (data (i32.const 93045) "a") (data (i32.const 93048) "a") (data (i32.const 93051) "a") (data (i32.const 93054) "a") (data (i32.const 93057) "a") (data (i32.const 93060) "a") (data (i32.const 93063) "a") (data (i32.const 93066) "a") (data (i32.const 93069) "a") (data (i32.const 93072) "a") (data (i32.const 93075) "a") (data (i32.const 93078) "a") (data (i32.const 93081) "a") (data (i32.const 93084) "a") (data (i32.const 93087) "a") (data (i32.const 93090) "a") (data (i32.const 93093) "a") (data (i32.const 93096) "a") (data (i32.const 93099) "a") (data (i32.const 93102) "a") (data (i32.const 93105) "a") (data (i32.const 93108) "a") (data (i32.const 93111) "a") (data (i32.const 93114) "a") (data (i32.const 93117) "a") (data (i32.const 93120) "a") (data (i32.const 93123) "a") (data (i32.const 93126) "a") (data (i32.const 93129) "a") (data (i32.const 93132) "a") (data (i32.const 93135) "a") (data (i32.const 93138) "a") (data (i32.const 93141) "a") (data (i32.const 93144) "a") (data (i32.const 93147) "a") (data (i32.const 93150) "a") (data (i32.const 93153) "a") (data (i32.const 93156) "a") (data (i32.const 93159) "a") (data (i32.const 93162) "a") (data (i32.const 93165) "a") (data (i32.const 93168) "a") (data (i32.const 93171) "a") (data (i32.const 93174) "a") (data (i32.const 93177) "a") (data (i32.const 93180) "a") (data (i32.const 93183) "a") (data (i32.const 93186) "a") (data (i32.const 93189) "a") (data (i32.const 93192) "a") (data (i32.const 93195) "a") (data (i32.const 93198) "a") (data (i32.const 93201) "a") (data (i32.const 93204) "a") (data (i32.const 93207) "a") (data (i32.const 93210) "a") (data (i32.const 93213) "a") (data (i32.const 93216) "a") (data (i32.const 93219) "a") (data (i32.const 93222) "a") (data (i32.const 93225) "a") (data (i32.const 93228) "a") (data (i32.const 93231) "a") (data (i32.const 93234) "a") (data (i32.const 93237) "a") (data (i32.const 93240) "a") (data (i32.const 93243) "a") (data (i32.const 93246) "a") (data (i32.const 93249) "a") (data (i32.const 93252) "a") (data (i32.const 93255) "a") (data (i32.const 93258) "a") (data (i32.const 93261) "a") (data (i32.const 93264) "a") (data (i32.const 93267) "a") (data (i32.const 93270) "a") (data (i32.const 93273) "a") (data (i32.const 93276) "a") (data (i32.const 93279) "a") (data (i32.const 93282) "a") (data (i32.const 93285) "a") (data (i32.const 93288) "a") (data (i32.const 93291) "a") (data (i32.const 93294) "a") (data (i32.const 93297) "a") (data (i32.const 93300) "a") (data (i32.const 93303) "a") (data (i32.const 93306) "a") (data (i32.const 93309) "a") (data (i32.const 93312) "a") (data (i32.const 93315) "a") (data (i32.const 93318) "a") (data (i32.const 93321) "a") (data (i32.const 93324) "a") (data (i32.const 93327) "a") (data (i32.const 93330) "a") (data (i32.const 93333) "a") (data (i32.const 93336) "a") (data (i32.const 93339) "a") (data (i32.const 93342) "a") (data (i32.const 93345) "a") (data (i32.const 93348) "a") (data (i32.const 93351) "a") (data (i32.const 93354) "a") (data (i32.const 93357) "a") (data (i32.const 93360) "a") (data (i32.const 93363) "a") (data (i32.const 93366) "a") (data (i32.const 93369) "a") (data (i32.const 93372) "a") (data (i32.const 93375) "a") (data (i32.const 93378) "a") (data (i32.const 93381) "a") (data (i32.const 93384) "a") (data (i32.const 93387) "a") (data (i32.const 93390) "a") (data (i32.const 93393) "a") (data (i32.const 93396) "a") (data (i32.const 93399) "a") (data (i32.const 93402) "a") (data (i32.const 93405) "a") (data (i32.const 93408) "a") (data (i32.const 93411) "a") (data (i32.const 93414) "a") (data (i32.const 93417) "a") (data (i32.const 93420) "a") (data (i32.const 93423) "a") (data (i32.const 93426) "a") (data (i32.const 93429) "a") (data (i32.const 93432) "a") (data (i32.const 93435) "a") (data (i32.const 93438) "a") (data (i32.const 93441) "a") (data (i32.const 93444) "a") (data (i32.const 93447) "a") (data (i32.const 93450) "a") (data (i32.const 93453) "a") (data (i32.const 93456) "a") (data (i32.const 93459) "a") (data (i32.const 93462) "a") (data (i32.const 93465) "a") (data (i32.const 93468) "a") (data (i32.const 93471) "a") (data (i32.const 93474) "a") (data (i32.const 93477) "a") (data (i32.const 93480) "a") (data (i32.const 93483) "a") (data (i32.const 93486) "a") (data (i32.const 93489) "a") (data (i32.const 93492) "a") (data (i32.const 93495) "a") (data (i32.const 93498) "a") (data (i32.const 93501) "a") (data (i32.const 93504) "a") (data (i32.const 93507) "a") (data (i32.const 93510) "a") (data (i32.const 93513) "a") (data (i32.const 93516) "a") (data (i32.const 93519) "a") (data (i32.const 93522) "a") (data (i32.const 93525) "a") (data (i32.const 93528) "a") (data (i32.const 93531) "a") (data (i32.const 93534) "a") (data (i32.const 93537) "a") (data (i32.const 93540) "a") (data (i32.const 93543) "a") (data (i32.const 93546) "a") (data (i32.const 93549) "a") (data (i32.const 93552) "a") (data (i32.const 93555) "a") (data (i32.const 93558) "a") (data (i32.const 93561) "a") (data (i32.const 93564) "a") (data (i32.const 93567) "a") (data (i32.const 93570) "a") (data (i32.const 93573) "a") (data (i32.const 93576) "a") (data (i32.const 93579) "a") (data (i32.const 93582) "a") (data (i32.const 93585) "a") (data (i32.const 93588) "a") (data (i32.const 93591) "a") (data (i32.const 93594) "a") (data (i32.const 93597) "a") (data (i32.const 93600) "a") (data (i32.const 93603) "a") (data (i32.const 93606) "a") (data (i32.const 93609) "a") (data (i32.const 93612) "a") (data (i32.const 93615) "a") (data (i32.const 93618) "a") (data (i32.const 93621) "a") (data (i32.const 93624) "a") (data (i32.const 93627) "a") (data (i32.const 93630) "a") (data (i32.const 93633) "a") (data (i32.const 93636) "a") (data (i32.const 93639) "a") (data (i32.const 93642) "a") (data (i32.const 93645) "a") (data (i32.const 93648) "a") (data (i32.const 93651) "a") (data (i32.const 93654) "a") (data (i32.const 93657) "a") (data (i32.const 93660) "a") (data (i32.const 93663) "a") (data (i32.const 93666) "a") (data (i32.const 93669) "a") (data (i32.const 93672) "a") (data (i32.const 93675) "a") (data (i32.const 93678) "a") (data (i32.const 93681) "a") (data (i32.const 93684) "a") (data (i32.const 93687) "a") (data (i32.const 93690) "a") (data (i32.const 93693) "a") (data (i32.const 93696) "a") (data (i32.const 93699) "a") (data (i32.const 93702) "a") (data (i32.const 93705) "a") (data (i32.const 93708) "a") (data (i32.const 93711) "a") (data (i32.const 93714) "a") (data (i32.const 93717) "a") (data (i32.const 93720) "a") (data (i32.const 93723) "a") (data (i32.const 93726) "a") (data (i32.const 93729) "a") (data (i32.const 93732) "a") (data (i32.const 93735) "a") (data (i32.const 93738) "a") (data (i32.const 93741) "a") (data (i32.const 93744) "a") (data (i32.const 93747) "a") (data (i32.const 93750) "a") (data (i32.const 93753) "a") (data (i32.const 93756) "a") (data (i32.const 93759) "a") (data (i32.const 93762) "a") (data (i32.const 93765) "a") (data (i32.const 93768) "a") (data (i32.const 93771) "a") (data (i32.const 93774) "a") (data (i32.const 93777) "a") (data (i32.const 93780) "a") (data (i32.const 93783) "a") (data (i32.const 93786) "a") (data (i32.const 93789) "a") (data (i32.const 93792) "a") (data (i32.const 93795) "a") (data (i32.const 93798) "a") (data (i32.const 93801) "a") (data (i32.const 93804) "a") (data (i32.const 93807) "a") (data (i32.const 93810) "a") (data (i32.const 93813) "a") (data (i32.const 93816) "a") (data (i32.const 93819) "a") (data (i32.const 93822) "a") (data (i32.const 93825) "a") (data (i32.const 93828) "a") (data (i32.const 93831) "a") (data (i32.const 93834) "a") (data (i32.const 93837) "a") (data (i32.const 93840) "a") (data (i32.const 93843) "a") (data (i32.const 93846) "a") (data (i32.const 93849) "a") (data (i32.const 93852) "a") (data (i32.const 93855) "a") (data (i32.const 93858) "a") (data (i32.const 93861) "a") (data (i32.const 93864) "a") (data (i32.const 93867) "a") (data (i32.const 93870) "a") (data (i32.const 93873) "a") (data (i32.const 93876) "a") (data (i32.const 93879) "a") (data (i32.const 93882) "a") (data (i32.const 93885) "a") (data (i32.const 93888) "a") (data (i32.const 93891) "a") (data (i32.const 93894) "a") (data (i32.const 93897) "a") (data (i32.const 93900) "a") (data (i32.const 93903) "a") (data (i32.const 93906) "a") (data (i32.const 93909) "a") (data (i32.const 93912) "a") (data (i32.const 93915) "a") (data (i32.const 93918) "a") (data (i32.const 93921) "a") (data (i32.const 93924) "a") (data (i32.const 93927) "a") (data (i32.const 93930) "a") (data (i32.const 93933) "a") (data (i32.const 93936) "a") (data (i32.const 93939) "a") (data (i32.const 93942) "a") (data (i32.const 93945) "a") (data (i32.const 93948) "a") (data (i32.const 93951) "a") (data (i32.const 93954) "a") (data (i32.const 93957) "a") (data (i32.const 93960) "a") (data (i32.const 93963) "a") (data (i32.const 93966) "a") (data (i32.const 93969) "a") (data (i32.const 93972) "a") (data (i32.const 93975) "a") (data (i32.const 93978) "a") (data (i32.const 93981) "a") (data (i32.const 93984) "a") (data (i32.const 93987) "a") (data (i32.const 93990) "a") (data (i32.const 93993) "a") (data (i32.const 93996) "a") (data (i32.const 93999) "a") (data (i32.const 94002) "a") (data (i32.const 94005) "a") (data (i32.const 94008) "a") (data (i32.const 94011) "a") (data (i32.const 94014) "a") (data (i32.const 94017) "a") (data (i32.const 94020) "a") (data (i32.const 94023) "a") (data (i32.const 94026) "a") (data (i32.const 94029) "a") (data (i32.const 94032) "a") (data (i32.const 94035) "a") (data (i32.const 94038) "a") (data (i32.const 94041) "a") (data (i32.const 94044) "a") (data (i32.const 94047) "a") (data (i32.const 94050) "a") (data (i32.const 94053) "a") (data (i32.const 94056) "a") (data (i32.const 94059) "a") (data (i32.const 94062) "a") (data (i32.const 94065) "a") (data (i32.const 94068) "a") (data (i32.const 94071) "a") (data (i32.const 94074) "a") (data (i32.const 94077) "a") (data (i32.const 94080) "a") (data (i32.const 94083) "a") (data (i32.const 94086) "a") (data (i32.const 94089) "a") (data (i32.const 94092) "a") (data (i32.const 94095) "a") (data (i32.const 94098) "a") (data (i32.const 94101) "a") (data (i32.const 94104) "a") (data (i32.const 94107) "a") (data (i32.const 94110) "a") (data (i32.const 94113) "a") (data (i32.const 94116) "a") (data (i32.const 94119) "a") (data (i32.const 94122) "a") (data (i32.const 94125) "a") (data (i32.const 94128) "a") (data (i32.const 94131) "a") (data (i32.const 94134) "a") (data (i32.const 94137) "a") (data (i32.const 94140) "a") (data (i32.const 94143) "a") (data (i32.const 94146) "a") (data (i32.const 94149) "a") (data (i32.const 94152) "a") (data (i32.const 94155) "a") (data (i32.const 94158) "a") (data (i32.const 94161) "a") (data (i32.const 94164) "a") (data (i32.const 94167) "a") (data (i32.const 94170) "a") (data (i32.const 94173) "a") (data (i32.const 94176) "a") (data (i32.const 94179) "a") (data (i32.const 94182) "a") (data (i32.const 94185) "a") (data (i32.const 94188) "a") (data (i32.const 94191) "a") (data (i32.const 94194) "a") (data (i32.const 94197) "a") (data (i32.const 94200) "a") (data (i32.const 94203) "a") (data (i32.const 94206) "a") (data (i32.const 94209) "a") (data (i32.const 94212) "a") (data (i32.const 94215) "a") (data (i32.const 94218) "a") (data (i32.const 94221) "a") (data (i32.const 94224) "a") (data (i32.const 94227) "a") (data (i32.const 94230) "a") (data (i32.const 94233) "a") (data (i32.const 94236) "a") (data (i32.const 94239) "a") (data (i32.const 94242) "a") (data (i32.const 94245) "a") (data (i32.const 94248) "a") (data (i32.const 94251) "a") (data (i32.const 94254) "a") (data (i32.const 94257) "a") (data (i32.const 94260) "a") (data (i32.const 94263) "a") (data (i32.const 94266) "a") (data (i32.const 94269) "a") (data (i32.const 94272) "a") (data (i32.const 94275) "a") (data (i32.const 94278) "a") (data (i32.const 94281) "a") (data (i32.const 94284) "a") (data (i32.const 94287) "a") (data (i32.const 94290) "a") (data (i32.const 94293) "a") (data (i32.const 94296) "a") (data (i32.const 94299) "a") (data (i32.const 94302) "a") (data (i32.const 94305) "a") (data (i32.const 94308) "a") (data (i32.const 94311) "a") (data (i32.const 94314) "a") (data (i32.const 94317) "a") (data (i32.const 94320) "a") (data (i32.const 94323) "a") (data (i32.const 94326) "a") (data (i32.const 94329) "a") (data (i32.const 94332) "a") (data (i32.const 94335) "a") (data (i32.const 94338) "a") (data (i32.const 94341) "a") (data (i32.const 94344) "a") (data (i32.const 94347) "a") (data (i32.const 94350) "a") (data (i32.const 94353) "a") (data (i32.const 94356) "a") (data (i32.const 94359) "a") (data (i32.const 94362) "a") (data (i32.const 94365) "a") (data (i32.const 94368) "a") (data (i32.const 94371) "a") (data (i32.const 94374) "a") (data (i32.const 94377) "a") (data (i32.const 94380) "a") (data (i32.const 94383) "a") (data (i32.const 94386) "a") (data (i32.const 94389) "a") (data (i32.const 94392) "a") (data (i32.const 94395) "a") (data (i32.const 94398) "a") (data (i32.const 94401) "a") (data (i32.const 94404) "a") (data (i32.const 94407) "a") (data (i32.const 94410) "a") (data (i32.const 94413) "a") (data (i32.const 94416) "a") (data (i32.const 94419) "a") (data (i32.const 94422) "a") (data (i32.const 94425) "a") (data (i32.const 94428) "a") (data (i32.const 94431) "a") (data (i32.const 94434) "a") (data (i32.const 94437) "a") (data (i32.const 94440) "a") (data (i32.const 94443) "a") (data (i32.const 94446) "a") (data (i32.const 94449) "a") (data (i32.const 94452) "a") (data (i32.const 94455) "a") (data (i32.const 94458) "a") (data (i32.const 94461) "a") (data (i32.const 94464) "a") (data (i32.const 94467) "a") (data (i32.const 94470) "a") (data (i32.const 94473) "a") (data (i32.const 94476) "a") (data (i32.const 94479) "a") (data (i32.const 94482) "a") (data (i32.const 94485) "a") (data (i32.const 94488) "a") (data (i32.const 94491) "a") (data (i32.const 94494) "a") (data (i32.const 94497) "a") (data (i32.const 94500) "a") (data (i32.const 94503) "a") (data (i32.const 94506) "a") (data (i32.const 94509) "a") (data (i32.const 94512) "a") (data (i32.const 94515) "a") (data (i32.const 94518) "a") (data (i32.const 94521) "a") (data (i32.const 94524) "a") (data (i32.const 94527) "a") (data (i32.const 94530) "a") (data (i32.const 94533) "a") (data (i32.const 94536) "a") (data (i32.const 94539) "a") (data (i32.const 94542) "a") (data (i32.const 94545) "a") (data (i32.const 94548) "a") (data (i32.const 94551) "a") (data (i32.const 94554) "a") (data (i32.const 94557) "a") (data (i32.const 94560) "a") (data (i32.const 94563) "a") (data (i32.const 94566) "a") (data (i32.const 94569) "a") (data (i32.const 94572) "a") (data (i32.const 94575) "a") (data (i32.const 94578) "a") (data (i32.const 94581) "a") (data (i32.const 94584) "a") (data (i32.const 94587) "a") (data (i32.const 94590) "a") (data (i32.const 94593) "a") (data (i32.const 94596) "a") (data (i32.const 94599) "a") (data (i32.const 94602) "a") (data (i32.const 94605) "a") (data (i32.const 94608) "a") (data (i32.const 94611) "a") (data (i32.const 94614) "a") (data (i32.const 94617) "a") (data (i32.const 94620) "a") (data (i32.const 94623) "a") (data (i32.const 94626) "a") (data (i32.const 94629) "a") (data (i32.const 94632) "a") (data (i32.const 94635) "a") (data (i32.const 94638) "a") (data (i32.const 94641) "a") (data (i32.const 94644) "a") (data (i32.const 94647) "a") (data (i32.const 94650) "a") (data (i32.const 94653) "a") (data (i32.const 94656) "a") (data (i32.const 94659) "a") (data (i32.const 94662) "a") (data (i32.const 94665) "a") (data (i32.const 94668) "a") (data (i32.const 94671) "a") (data (i32.const 94674) "a") (data (i32.const 94677) "a") (data (i32.const 94680) "a") (data (i32.const 94683) "a") (data (i32.const 94686) "a") (data (i32.const 94689) "a") (data (i32.const 94692) "a") (data (i32.const 94695) "a") (data (i32.const 94698) "a") (data (i32.const 94701) "a") (data (i32.const 94704) "a") (data (i32.const 94707) "a") (data (i32.const 94710) "a") (data (i32.const 94713) "a") (data (i32.const 94716) "a") (data (i32.const 94719) "a") (data (i32.const 94722) "a") (data (i32.const 94725) "a") (data (i32.const 94728) "a") (data (i32.const 94731) "a") (data (i32.const 94734) "a") (data (i32.const 94737) "a") (data (i32.const 94740) "a") (data (i32.const 94743) "a") (data (i32.const 94746) "a") (data (i32.const 94749) "a") (data (i32.const 94752) "a") (data (i32.const 94755) "a") (data (i32.const 94758) "a") (data (i32.const 94761) "a") (data (i32.const 94764) "a") (data (i32.const 94767) "a") (data (i32.const 94770) "a") (data (i32.const 94773) "a") (data (i32.const 94776) "a") (data (i32.const 94779) "a") (data (i32.const 94782) "a") (data (i32.const 94785) "a") (data (i32.const 94788) "a") (data (i32.const 94791) "a") (data (i32.const 94794) "a") (data (i32.const 94797) "a") (data (i32.const 94800) "a") (data (i32.const 94803) "a") (data (i32.const 94806) "a") (data (i32.const 94809) "a") (data (i32.const 94812) "a") (data (i32.const 94815) "a") (data (i32.const 94818) "a") (data (i32.const 94821) "a") (data (i32.const 94824) "a") (data (i32.const 94827) "a") (data (i32.const 94830) "a") (data (i32.const 94833) "a") (data (i32.const 94836) "a") (data (i32.const 94839) "a") (data (i32.const 94842) "a") (data (i32.const 94845) "a") (data (i32.const 94848) "a") (data (i32.const 94851) "a") (data (i32.const 94854) "a") (data (i32.const 94857) "a") (data (i32.const 94860) "a") (data (i32.const 94863) "a") (data (i32.const 94866) "a") (data (i32.const 94869) "a") (data (i32.const 94872) "a") (data (i32.const 94875) "a") (data (i32.const 94878) "a") (data (i32.const 94881) "a") (data (i32.const 94884) "a") (data (i32.const 94887) "a") (data (i32.const 94890) "a") (data (i32.const 94893) "a") (data (i32.const 94896) "a") (data (i32.const 94899) "a") (data (i32.const 94902) "a") (data (i32.const 94905) "a") (data (i32.const 94908) "a") (data (i32.const 94911) "a") (data (i32.const 94914) "a") (data (i32.const 94917) "a") (data (i32.const 94920) "a") (data (i32.const 94923) "a") (data (i32.const 94926) "a") (data (i32.const 94929) "a") (data (i32.const 94932) "a") (data (i32.const 94935) "a") (data (i32.const 94938) "a") (data (i32.const 94941) "a") (data (i32.const 94944) "a") (data (i32.const 94947) "a") (data (i32.const 94950) "a") (data (i32.const 94953) "a") (data (i32.const 94956) "a") (data (i32.const 94959) "a") (data (i32.const 94962) "a") (data (i32.const 94965) "a") (data (i32.const 94968) "a") (data (i32.const 94971) "a") (data (i32.const 94974) "a") (data (i32.const 94977) "a") (data (i32.const 94980) "a") (data (i32.const 94983) "a") (data (i32.const 94986) "a") (data (i32.const 94989) "a") (data (i32.const 94992) "a") (data (i32.const 94995) "a") (data (i32.const 94998) "a") (data (i32.const 95001) "a") (data (i32.const 95004) "a") (data (i32.const 95007) "a") (data (i32.const 95010) "a") (data (i32.const 95013) "a") (data (i32.const 95016) "a") (data (i32.const 95019) "a") (data (i32.const 95022) "a") (data (i32.const 95025) "a") (data (i32.const 95028) "a") (data (i32.const 95031) "a") (data (i32.const 95034) "a") (data (i32.const 95037) "a") (data (i32.const 95040) "a") (data (i32.const 95043) "a") (data (i32.const 95046) "a") (data (i32.const 95049) "a") (data (i32.const 95052) "a") (data (i32.const 95055) "a") (data (i32.const 95058) "a") (data (i32.const 95061) "a") (data (i32.const 95064) "a") (data (i32.const 95067) "a") (data (i32.const 95070) "a") (data (i32.const 95073) "a") (data (i32.const 95076) "a") (data (i32.const 95079) "a") (data (i32.const 95082) "a") (data (i32.const 95085) "a") (data (i32.const 95088) "a") (data (i32.const 95091) "a") (data (i32.const 95094) "a") (data (i32.const 95097) "a") (data (i32.const 95100) "a") (data (i32.const 95103) "a") (data (i32.const 95106) "a") (data (i32.const 95109) "a") (data (i32.const 95112) "a") (data (i32.const 95115) "a") (data (i32.const 95118) "a") (data (i32.const 95121) "a") (data (i32.const 95124) "a") (data (i32.const 95127) "a") (data (i32.const 95130) "a") (data (i32.const 95133) "a") (data (i32.const 95136) "a") (data (i32.const 95139) "a") (data (i32.const 95142) "a") (data (i32.const 95145) "a") (data (i32.const 95148) "a") (data (i32.const 95151) "a") (data (i32.const 95154) "a") (data (i32.const 95157) "a") (data (i32.const 95160) "a") (data (i32.const 95163) "a") (data (i32.const 95166) "a") (data (i32.const 95169) "a") (data (i32.const 95172) "a") (data (i32.const 95175) "a") (data (i32.const 95178) "a") (data (i32.const 95181) "a") (data (i32.const 95184) "a") (data (i32.const 95187) "a") (data (i32.const 95190) "a") (data (i32.const 95193) "a") (data (i32.const 95196) "a") (data (i32.const 95199) "a") (data (i32.const 95202) "a") (data (i32.const 95205) "a") (data (i32.const 95208) "a") (data (i32.const 95211) "a") (data (i32.const 95214) "a") (data (i32.const 95217) "a") (data (i32.const 95220) "a") (data (i32.const 95223) "a") (data (i32.const 95226) "a") (data (i32.const 95229) "a") (data (i32.const 95232) "a") (data (i32.const 95235) "a") (data (i32.const 95238) "a") (data (i32.const 95241) "a") (data (i32.const 95244) "a") (data (i32.const 95247) "a") (data (i32.const 95250) "a") (data (i32.const 95253) "a") (data (i32.const 95256) "a") (data (i32.const 95259) "a") (data (i32.const 95262) "a") (data (i32.const 95265) "a") (data (i32.const 95268) "a") (data (i32.const 95271) "a") (data (i32.const 95274) "a") (data (i32.const 95277) "a") (data (i32.const 95280) "a") (data (i32.const 95283) "a") (data (i32.const 95286) "a") (data (i32.const 95289) "a") (data (i32.const 95292) "a") (data (i32.const 95295) "a") (data (i32.const 95298) "a") (data (i32.const 95301) "a") (data (i32.const 95304) "a") (data (i32.const 95307) "a") (data (i32.const 95310) "a") (data (i32.const 95313) "a") (data (i32.const 95316) "a") (data (i32.const 95319) "a") (data (i32.const 95322) "a") (data (i32.const 95325) "a") (data (i32.const 95328) "a") (data (i32.const 95331) "a") (data (i32.const 95334) "a") (data (i32.const 95337) "a") (data (i32.const 95340) "a") (data (i32.const 95343) "a") (data (i32.const 95346) "a") (data (i32.const 95349) "a") (data (i32.const 95352) "a") (data (i32.const 95355) "a") (data (i32.const 95358) "a") (data (i32.const 95361) "a") (data (i32.const 95364) "a") (data (i32.const 95367) "a") (data (i32.const 95370) "a") (data (i32.const 95373) "a") (data (i32.const 95376) "a") (data (i32.const 95379) "a") (data (i32.const 95382) "a") (data (i32.const 95385) "a") (data (i32.const 95388) "a") (data (i32.const 95391) "a") (data (i32.const 95394) "a") (data (i32.const 95397) "a") (data (i32.const 95400) "a") (data (i32.const 95403) "a") (data (i32.const 95406) "a") (data (i32.const 95409) "a") (data (i32.const 95412) "a") (data (i32.const 95415) "a") (data (i32.const 95418) "a") (data (i32.const 95421) "a") (data (i32.const 95424) "a") (data (i32.const 95427) "a") (data (i32.const 95430) "a") (data (i32.const 95433) "a") (data (i32.const 95436) "a") (data (i32.const 95439) "a") (data (i32.const 95442) "a") (data (i32.const 95445) "a") (data (i32.const 95448) "a") (data (i32.const 95451) "a") (data (i32.const 95454) "a") (data (i32.const 95457) "a") (data (i32.const 95460) "a") (data (i32.const 95463) "a") (data (i32.const 95466) "a") (data (i32.const 95469) "a") (data (i32.const 95472) "a") (data (i32.const 95475) "a") (data (i32.const 95478) "a") (data (i32.const 95481) "a") (data (i32.const 95484) "a") (data (i32.const 95487) "a") (data (i32.const 95490) "a") (data (i32.const 95493) "a") (data (i32.const 95496) "a") (data (i32.const 95499) "a") (data (i32.const 95502) "a") (data (i32.const 95505) "a") (data (i32.const 95508) "a") (data (i32.const 95511) "a") (data (i32.const 95514) "a") (data (i32.const 95517) "a") (data (i32.const 95520) "a") (data (i32.const 95523) "a") (data (i32.const 95526) "a") (data (i32.const 95529) "a") (data (i32.const 95532) "a") (data (i32.const 95535) "a") (data (i32.const 95538) "a") (data (i32.const 95541) "a") (data (i32.const 95544) "a") (data (i32.const 95547) "a") (data (i32.const 95550) "a") (data (i32.const 95553) "a") (data (i32.const 95556) "a") (data (i32.const 95559) "a") (data (i32.const 95562) "a") (data (i32.const 95565) "a") (data (i32.const 95568) "a") (data (i32.const 95571) "a") (data (i32.const 95574) "a") (data (i32.const 95577) "a") (data (i32.const 95580) "a") (data (i32.const 95583) "a") (data (i32.const 95586) "a") (data (i32.const 95589) "a") (data (i32.const 95592) "a") (data (i32.const 95595) "a") (data (i32.const 95598) "a") (data (i32.const 95601) "a") (data (i32.const 95604) "a") (data (i32.const 95607) "a") (data (i32.const 95610) "a") (data (i32.const 95613) "a") (data (i32.const 95616) "a") (data (i32.const 95619) "a") (data (i32.const 95622) "a") (data (i32.const 95625) "a") (data (i32.const 95628) "a") (data (i32.const 95631) "a") (data (i32.const 95634) "a") (data (i32.const 95637) "a") (data (i32.const 95640) "a") (data (i32.const 95643) "a") (data (i32.const 95646) "a") (data (i32.const 95649) "a") (data (i32.const 95652) "a") (data (i32.const 95655) "a") (data (i32.const 95658) "a") (data (i32.const 95661) "a") (data (i32.const 95664) "a") (data (i32.const 95667) "a") (data (i32.const 95670) "a") (data (i32.const 95673) "a") (data (i32.const 95676) "a") (data (i32.const 95679) "a") (data (i32.const 95682) "a") (data (i32.const 95685) "a") (data (i32.const 95688) "a") (data (i32.const 95691) "a") (data (i32.const 95694) "a") (data (i32.const 95697) "a") (data (i32.const 95700) "a") (data (i32.const 95703) "a") (data (i32.const 95706) "a") (data (i32.const 95709) "a") (data (i32.const 95712) "a") (data (i32.const 95715) "a") (data (i32.const 95718) "a") (data (i32.const 95721) "a") (data (i32.const 95724) "a") (data (i32.const 95727) "a") (data (i32.const 95730) "a") (data (i32.const 95733) "a") (data (i32.const 95736) "a") (data (i32.const 95739) "a") (data (i32.const 95742) "a") (data (i32.const 95745) "a") (data (i32.const 95748) "a") (data (i32.const 95751) "a") (data (i32.const 95754) "a") (data (i32.const 95757) "a") (data (i32.const 95760) "a") (data (i32.const 95763) "a") (data (i32.const 95766) "a") (data (i32.const 95769) "a") (data (i32.const 95772) "a") (data (i32.const 95775) "a") (data (i32.const 95778) "a") (data (i32.const 95781) "a") (data (i32.const 95784) "a") (data (i32.const 95787) "a") (data (i32.const 95790) "a") (data (i32.const 95793) "a") (data (i32.const 95796) "a") (data (i32.const 95799) "a") (data (i32.const 95802) "a") (data (i32.const 95805) "a") (data (i32.const 95808) "a") (data (i32.const 95811) "a") (data (i32.const 95814) "a") (data (i32.const 95817) "a") (data (i32.const 95820) "a") (data (i32.const 95823) "a") (data (i32.const 95826) "a") (data (i32.const 95829) "a") (data (i32.const 95832) "a") (data (i32.const 95835) "a") (data (i32.const 95838) "a") (data (i32.const 95841) "a") (data (i32.const 95844) "a") (data (i32.const 95847) "a") (data (i32.const 95850) "a") (data (i32.const 95853) "a") (data (i32.const 95856) "a") (data (i32.const 95859) "a") (data (i32.const 95862) "a") (data (i32.const 95865) "a") (data (i32.const 95868) "a") (data (i32.const 95871) "a") (data (i32.const 95874) "a") (data (i32.const 95877) "a") (data (i32.const 95880) "a") (data (i32.const 95883) "a") (data (i32.const 95886) "a") (data (i32.const 95889) "a") (data (i32.const 95892) "a") (data (i32.const 95895) "a") (data (i32.const 95898) "a") (data (i32.const 95901) "a") (data (i32.const 95904) "a") (data (i32.const 95907) "a") (data (i32.const 95910) "a") (data (i32.const 95913) "a") (data (i32.const 95916) "a") (data (i32.const 95919) "a") (data (i32.const 95922) "a") (data (i32.const 95925) "a") (data (i32.const 95928) "a") (data (i32.const 95931) "a") (data (i32.const 95934) "a") (data (i32.const 95937) "a") (data (i32.const 95940) "a") (data (i32.const 95943) "a") (data (i32.const 95946) "a") (data (i32.const 95949) "a") (data (i32.const 95952) "a") (data (i32.const 95955) "a") (data (i32.const 95958) "a") (data (i32.const 95961) "a") (data (i32.const 95964) "a") (data (i32.const 95967) "a") (data (i32.const 95970) "a") (data (i32.const 95973) "a") (data (i32.const 95976) "a") (data (i32.const 95979) "a") (data (i32.const 95982) "a") (data (i32.const 95985) "a") (data (i32.const 95988) "a") (data (i32.const 95991) "a") (data (i32.const 95994) "a") (data (i32.const 95997) "a") (data (i32.const 96000) "a") (data (i32.const 96003) "a") (data (i32.const 96006) "a") (data (i32.const 96009) "a") (data (i32.const 96012) "a") (data (i32.const 96015) "a") (data (i32.const 96018) "a") (data (i32.const 96021) "a") (data (i32.const 96024) "a") (data (i32.const 96027) "a") (data (i32.const 96030) "a") (data (i32.const 96033) "a") (data (i32.const 96036) "a") (data (i32.const 96039) "a") (data (i32.const 96042) "a") (data (i32.const 96045) "a") (data (i32.const 96048) "a") (data (i32.const 96051) "a") (data (i32.const 96054) "a") (data (i32.const 96057) "a") (data (i32.const 96060) "a") (data (i32.const 96063) "a") (data (i32.const 96066) "a") (data (i32.const 96069) "a") (data (i32.const 96072) "a") (data (i32.const 96075) "a") (data (i32.const 96078) "a") (data (i32.const 96081) "a") (data (i32.const 96084) "a") (data (i32.const 96087) "a") (data (i32.const 96090) "a") (data (i32.const 96093) "a") (data (i32.const 96096) "a") (data (i32.const 96099) "a") (data (i32.const 96102) "a") (data (i32.const 96105) "a") (data (i32.const 96108) "a") (data (i32.const 96111) "a") (data (i32.const 96114) "a") (data (i32.const 96117) "a") (data (i32.const 96120) "a") (data (i32.const 96123) "a") (data (i32.const 96126) "a") (data (i32.const 96129) "a") (data (i32.const 96132) "a") (data (i32.const 96135) "a") (data (i32.const 96138) "a") (data (i32.const 96141) "a") (data (i32.const 96144) "a") (data (i32.const 96147) "a") (data (i32.const 96150) "a") (data (i32.const 96153) "a") (data (i32.const 96156) "a") (data (i32.const 96159) "a") (data (i32.const 96162) "a") (data (i32.const 96165) "a") (data (i32.const 96168) "a") (data (i32.const 96171) "a") (data (i32.const 96174) "a") (data (i32.const 96177) "a") (data (i32.const 96180) "a") (data (i32.const 96183) "a") (data (i32.const 96186) "a") (data (i32.const 96189) "a") (data (i32.const 96192) "a") (data (i32.const 96195) "a") (data (i32.const 96198) "a") (data (i32.const 96201) "a") (data (i32.const 96204) "a") (data (i32.const 96207) "a") (data (i32.const 96210) "a") (data (i32.const 96213) "a") (data (i32.const 96216) "a") (data (i32.const 96219) "a") (data (i32.const 96222) "a") (data (i32.const 96225) "a") (data (i32.const 96228) "a") (data (i32.const 96231) "a") (data (i32.const 96234) "a") (data (i32.const 96237) "a") (data (i32.const 96240) "a") (data (i32.const 96243) "a") (data (i32.const 96246) "a") (data (i32.const 96249) "a") (data (i32.const 96252) "a") (data (i32.const 96255) "a") (data (i32.const 96258) "a") (data (i32.const 96261) "a") (data (i32.const 96264) "a") (data (i32.const 96267) "a") (data (i32.const 96270) "a") (data (i32.const 96273) "a") (data (i32.const 96276) "a") (data (i32.const 96279) "a") (data (i32.const 96282) "a") (data (i32.const 96285) "a") (data (i32.const 96288) "a") (data (i32.const 96291) "a") (data (i32.const 96294) "a") (data (i32.const 96297) "a") (data (i32.const 96300) "a") (data (i32.const 96303) "a") (data (i32.const 96306) "a") (data (i32.const 96309) "a") (data (i32.const 96312) "a") (data (i32.const 96315) "a") (data (i32.const 96318) "a") (data (i32.const 96321) "a") (data (i32.const 96324) "a") (data (i32.const 96327) "a") (data (i32.const 96330) "a") (data (i32.const 96333) "a") (data (i32.const 96336) "a") (data (i32.const 96339) "a") (data (i32.const 96342) "a") (data (i32.const 96345) "a") (data (i32.const 96348) "a") (data (i32.const 96351) "a") (data (i32.const 96354) "a") (data (i32.const 96357) "a") (data (i32.const 96360) "a") (data (i32.const 96363) "a") (data (i32.const 96366) "a") (data (i32.const 96369) "a") (data (i32.const 96372) "a") (data (i32.const 96375) "a") (data (i32.const 96378) "a") (data (i32.const 96381) "a") (data (i32.const 96384) "a") (data (i32.const 96387) "a") (data (i32.const 96390) "a") (data (i32.const 96393) "a") (data (i32.const 96396) "a") (data (i32.const 96399) "a") (data (i32.const 96402) "a") (data (i32.const 96405) "a") (data (i32.const 96408) "a") (data (i32.const 96411) "a") (data (i32.const 96414) "a") (data (i32.const 96417) "a") (data (i32.const 96420) "a") (data (i32.const 96423) "a") (data (i32.const 96426) "a") (data (i32.const 96429) "a") (data (i32.const 96432) "a") (data (i32.const 96435) "a") (data (i32.const 96438) "a") (data (i32.const 96441) "a") (data (i32.const 96444) "a") (data (i32.const 96447) "a") (data (i32.const 96450) "a") (data (i32.const 96453) "a") (data (i32.const 96456) "a") (data (i32.const 96459) "a") (data (i32.const 96462) "a") (data (i32.const 96465) "a") (data (i32.const 96468) "a") (data (i32.const 96471) "a") (data (i32.const 96474) "a") (data (i32.const 96477) "a") (data (i32.const 96480) "a") (data (i32.const 96483) "a") (data (i32.const 96486) "a") (data (i32.const 96489) "a") (data (i32.const 96492) "a") (data (i32.const 96495) "a") (data (i32.const 96498) "a") (data (i32.const 96501) "a") (data (i32.const 96504) "a") (data (i32.const 96507) "a") (data (i32.const 96510) "a") (data (i32.const 96513) "a") (data (i32.const 96516) "a") (data (i32.const 96519) "a") (data (i32.const 96522) "a") (data (i32.const 96525) "a") (data (i32.const 96528) "a") (data (i32.const 96531) "a") (data (i32.const 96534) "a") (data (i32.const 96537) "a") (data (i32.const 96540) "a") (data (i32.const 96543) "a") (data (i32.const 96546) "a") (data (i32.const 96549) "a") (data (i32.const 96552) "a") (data (i32.const 96555) "a") (data (i32.const 96558) "a") (data (i32.const 96561) "a") (data (i32.const 96564) "a") (data (i32.const 96567) "a") (data (i32.const 96570) "a") (data (i32.const 96573) "a") (data (i32.const 96576) "a") (data (i32.const 96579) "a") (data (i32.const 96582) "a") (data (i32.const 96585) "a") (data (i32.const 96588) "a") (data (i32.const 96591) "a") (data (i32.const 96594) "a") (data (i32.const 96597) "a") (data (i32.const 96600) "a") (data (i32.const 96603) "a") (data (i32.const 96606) "a") (data (i32.const 96609) "a") (data (i32.const 96612) "a") (data (i32.const 96615) "a") (data (i32.const 96618) "a") (data (i32.const 96621) "a") (data (i32.const 96624) "a") (data (i32.const 96627) "a") (data (i32.const 96630) "a") (data (i32.const 96633) "a") (data (i32.const 96636) "a") (data (i32.const 96639) "a") (data (i32.const 96642) "a") (data (i32.const 96645) "a") (data (i32.const 96648) "a") (data (i32.const 96651) "a") (data (i32.const 96654) "a") (data (i32.const 96657) "a") (data (i32.const 96660) "a") (data (i32.const 96663) "a") (data (i32.const 96666) "a") (data (i32.const 96669) "a") (data (i32.const 96672) "a") (data (i32.const 96675) "a") (data (i32.const 96678) "a") (data (i32.const 96681) "a") (data (i32.const 96684) "a") (data (i32.const 96687) "a") (data (i32.const 96690) "a") (data (i32.const 96693) "a") (data (i32.const 96696) "a") (data (i32.const 96699) "a") (data (i32.const 96702) "a") (data (i32.const 96705) "a") (data (i32.const 96708) "a") (data (i32.const 96711) "a") (data (i32.const 96714) "a") (data (i32.const 96717) "a") (data (i32.const 96720) "a") (data (i32.const 96723) "a") (data (i32.const 96726) "a") (data (i32.const 96729) "a") (data (i32.const 96732) "a") (data (i32.const 96735) "a") (data (i32.const 96738) "a") (data (i32.const 96741) "a") (data (i32.const 96744) "a") (data (i32.const 96747) "a") (data (i32.const 96750) "a") (data (i32.const 96753) "a") (data (i32.const 96756) "a") (data (i32.const 96759) "a") (data (i32.const 96762) "a") (data (i32.const 96765) "a") (data (i32.const 96768) "a") (data (i32.const 96771) "a") (data (i32.const 96774) "a") (data (i32.const 96777) "a") (data (i32.const 96780) "a") (data (i32.const 96783) "a") (data (i32.const 96786) "a") (data (i32.const 96789) "a") (data (i32.const 96792) "a") (data (i32.const 96795) "a") (data (i32.const 96798) "a") (data (i32.const 96801) "a") (data (i32.const 96804) "a") (data (i32.const 96807) "a") (data (i32.const 96810) "a") (data (i32.const 96813) "a") (data (i32.const 96816) "a") (data (i32.const 96819) "a") (data (i32.const 96822) "a") (data (i32.const 96825) "a") (data (i32.const 96828) "a") (data (i32.const 96831) "a") (data (i32.const 96834) "a") (data (i32.const 96837) "a") (data (i32.const 96840) "a") (data (i32.const 96843) "a") (data (i32.const 96846) "a") (data (i32.const 96849) "a") (data (i32.const 96852) "a") (data (i32.const 96855) "a") (data (i32.const 96858) "a") (data (i32.const 96861) "a") (data (i32.const 96864) "a") (data (i32.const 96867) "a") (data (i32.const 96870) "a") (data (i32.const 96873) "a") (data (i32.const 96876) "a") (data (i32.const 96879) "a") (data (i32.const 96882) "a") (data (i32.const 96885) "a") (data (i32.const 96888) "a") (data (i32.const 96891) "a") (data (i32.const 96894) "a") (data (i32.const 96897) "a") (data (i32.const 96900) "a") (data (i32.const 96903) "a") (data (i32.const 96906) "a") (data (i32.const 96909) "a") (data (i32.const 96912) "a") (data (i32.const 96915) "a") (data (i32.const 96918) "a") (data (i32.const 96921) "a") (data (i32.const 96924) "a") (data (i32.const 96927) "a") (data (i32.const 96930) "a") (data (i32.const 96933) "a") (data (i32.const 96936) "a") (data (i32.const 96939) "a") (data (i32.const 96942) "a") (data (i32.const 96945) "a") (data (i32.const 96948) "a") (data (i32.const 96951) "a") (data (i32.const 96954) "a") (data (i32.const 96957) "a") (data (i32.const 96960) "a") (data (i32.const 96963) "a") (data (i32.const 96966) "a") (data (i32.const 96969) "a") (data (i32.const 96972) "a") (data (i32.const 96975) "a") (data (i32.const 96978) "a") (data (i32.const 96981) "a") (data (i32.const 96984) "a") (data (i32.const 96987) "a") (data (i32.const 96990) "a") (data (i32.const 96993) "a") (data (i32.const 96996) "a") (data (i32.const 96999) "a") (data (i32.const 97002) "a") (data (i32.const 97005) "a") (data (i32.const 97008) "a") (data (i32.const 97011) "a") (data (i32.const 97014) "a") (data (i32.const 97017) "a") (data (i32.const 97020) "a") (data (i32.const 97023) "a") (data (i32.const 97026) "a") (data (i32.const 97029) "a") (data (i32.const 97032) "a") (data (i32.const 97035) "a") (data (i32.const 97038) "a") (data (i32.const 97041) "a") (data (i32.const 97044) "a") (data (i32.const 97047) "a") (data (i32.const 97050) "a") (data (i32.const 97053) "a") (data (i32.const 97056) "a") (data (i32.const 97059) "a") (data (i32.const 97062) "a") (data (i32.const 97065) "a") (data (i32.const 97068) "a") (data (i32.const 97071) "a") (data (i32.const 97074) "a") (data (i32.const 97077) "a") (data (i32.const 97080) "a") (data (i32.const 97083) "a") (data (i32.const 97086) "a") (data (i32.const 97089) "a") (data (i32.const 97092) "a") (data (i32.const 97095) "a") (data (i32.const 97098) "a") (data (i32.const 97101) "a") (data (i32.const 97104) "a") (data (i32.const 97107) "a") (data (i32.const 97110) "a") (data (i32.const 97113) "a") (data (i32.const 97116) "a") (data (i32.const 97119) "a") (data (i32.const 97122) "a") (data (i32.const 97125) "a") (data (i32.const 97128) "a") (data (i32.const 97131) "a") (data (i32.const 97134) "a") (data (i32.const 97137) "a") (data (i32.const 97140) "a") (data (i32.const 97143) "a") (data (i32.const 97146) "a") (data (i32.const 97149) "a") (data (i32.const 97152) "a") (data (i32.const 97155) "a") (data (i32.const 97158) "a") (data (i32.const 97161) "a") (data (i32.const 97164) "a") (data (i32.const 97167) "a") (data (i32.const 97170) "a") (data (i32.const 97173) "a") (data (i32.const 97176) "a") (data (i32.const 97179) "a") (data (i32.const 97182) "a") (data (i32.const 97185) "a") (data (i32.const 97188) "a") (data (i32.const 97191) "a") (data (i32.const 97194) "a") (data (i32.const 97197) "a") (data (i32.const 97200) "a") (data (i32.const 97203) "a") (data (i32.const 97206) "a") (data (i32.const 97209) "a") (data (i32.const 97212) "a") (data (i32.const 97215) "a") (data (i32.const 97218) "a") (data (i32.const 97221) "a") (data (i32.const 97224) "a") (data (i32.const 97227) "a") (data (i32.const 97230) "a") (data (i32.const 97233) "a") (data (i32.const 97236) "a") (data (i32.const 97239) "a") (data (i32.const 97242) "a") (data (i32.const 97245) "a") (data (i32.const 97248) "a") (data (i32.const 97251) "a") (data (i32.const 97254) "a") (data (i32.const 97257) "a") (data (i32.const 97260) "a") (data (i32.const 97263) "a") (data (i32.const 97266) "a") (data (i32.const 97269) "a") (data (i32.const 97272) "a") (data (i32.const 97275) "a") (data (i32.const 97278) "a") (data (i32.const 97281) "a") (data (i32.const 97284) "a") (data (i32.const 97287) "a") (data (i32.const 97290) "a") (data (i32.const 97293) "a") (data (i32.const 97296) "a") (data (i32.const 97299) "a") (data (i32.const 97302) "a") (data (i32.const 97305) "a") (data (i32.const 97308) "a") (data (i32.const 97311) "a") (data (i32.const 97314) "a") (data (i32.const 97317) "a") (data (i32.const 97320) "a") (data (i32.const 97323) "a") (data (i32.const 97326) "a") (data (i32.const 97329) "a") (data (i32.const 97332) "a") (data (i32.const 97335) "a") (data (i32.const 97338) "a") (data (i32.const 97341) "a") (data (i32.const 97344) "a") (data (i32.const 97347) "a") (data (i32.const 97350) "a") (data (i32.const 97353) "a") (data (i32.const 97356) "a") (data (i32.const 97359) "a") (data (i32.const 97362) "a") (data (i32.const 97365) "a") (data (i32.const 97368) "a") (data (i32.const 97371) "a") (data (i32.const 97374) "a") (data (i32.const 97377) "a") (data (i32.const 97380) "a") (data (i32.const 97383) "a") (data (i32.const 97386) "a") (data (i32.const 97389) "a") (data (i32.const 97392) "a") (data (i32.const 97395) "a") (data (i32.const 97398) "a") (data (i32.const 97401) "a") (data (i32.const 97404) "a") (data (i32.const 97407) "a") (data (i32.const 97410) "a") (data (i32.const 97413) "a") (data (i32.const 97416) "a") (data (i32.const 97419) "a") (data (i32.const 97422) "a") (data (i32.const 97425) "a") (data (i32.const 97428) "a") (data (i32.const 97431) "a") (data (i32.const 97434) "a") (data (i32.const 97437) "a") (data (i32.const 97440) "a") (data (i32.const 97443) "a") (data (i32.const 97446) "a") (data (i32.const 97449) "a") (data (i32.const 97452) "a") (data (i32.const 97455) "a") (data (i32.const 97458) "a") (data (i32.const 97461) "a") (data (i32.const 97464) "a") (data (i32.const 97467) "a") (data (i32.const 97470) "a") (data (i32.const 97473) "a") (data (i32.const 97476) "a") (data (i32.const 97479) "a") (data (i32.const 97482) "a") (data (i32.const 97485) "a") (data (i32.const 97488) "a") (data (i32.const 97491) "a") (data (i32.const 97494) "a") (data (i32.const 97497) "a") (data (i32.const 97500) "a") (data (i32.const 97503) "a") (data (i32.const 97506) "a") (data (i32.const 97509) "a") (data (i32.const 97512) "a") (data (i32.const 97515) "a") (data (i32.const 97518) "a") (data (i32.const 97521) "a") (data (i32.const 97524) "a") (data (i32.const 97527) "a") (data (i32.const 97530) "a") (data (i32.const 97533) "a") (data (i32.const 97536) "a") (data (i32.const 97539) "a") (data (i32.const 97542) "a") (data (i32.const 97545) "a") (data (i32.const 97548) "a") (data (i32.const 97551) "a") (data (i32.const 97554) "a") (data (i32.const 97557) "a") (data (i32.const 97560) "a") (data (i32.const 97563) "a") (data (i32.const 97566) "a") (data (i32.const 97569) "a") (data (i32.const 97572) "a") (data (i32.const 97575) "a") (data (i32.const 97578) "a") (data (i32.const 97581) "a") (data (i32.const 97584) "a") (data (i32.const 97587) "a") (data (i32.const 97590) "a") (data (i32.const 97593) "a") (data (i32.const 97596) "a") (data (i32.const 97599) "a") (data (i32.const 97602) "a") (data (i32.const 97605) "a") (data (i32.const 97608) "a") (data (i32.const 97611) "a") (data (i32.const 97614) "a") (data (i32.const 97617) "a") (data (i32.const 97620) "a") (data (i32.const 97623) "a") (data (i32.const 97626) "a") (data (i32.const 97629) "a") (data (i32.const 97632) "a") (data (i32.const 97635) "a") (data (i32.const 97638) "a") (data (i32.const 97641) "a") (data (i32.const 97644) "a") (data (i32.const 97647) "a") (data (i32.const 97650) "a") (data (i32.const 97653) "a") (data (i32.const 97656) "a") (data (i32.const 97659) "a") (data (i32.const 97662) "a") (data (i32.const 97665) "a") (data (i32.const 97668) "a") (data (i32.const 97671) "a") (data (i32.const 97674) "a") (data (i32.const 97677) "a") (data (i32.const 97680) "a") (data (i32.const 97683) "a") (data (i32.const 97686) "a") (data (i32.const 97689) "a") (data (i32.const 97692) "a") (data (i32.const 97695) "a") (data (i32.const 97698) "a") (data (i32.const 97701) "a") (data (i32.const 97704) "a") (data (i32.const 97707) "a") (data (i32.const 97710) "a") (data (i32.const 97713) "a") (data (i32.const 97716) "a") (data (i32.const 97719) "a") (data (i32.const 97722) "a") (data (i32.const 97725) "a") (data (i32.const 97728) "a") (data (i32.const 97731) "a") (data (i32.const 97734) "a") (data (i32.const 97737) "a") (data (i32.const 97740) "a") (data (i32.const 97743) "a") (data (i32.const 97746) "a") (data (i32.const 97749) "a") (data (i32.const 97752) "a") (data (i32.const 97755) "a") (data (i32.const 97758) "a") (data (i32.const 97761) "a") (data (i32.const 97764) "a") (data (i32.const 97767) "a") (data (i32.const 97770) "a") (data (i32.const 97773) "a") (data (i32.const 97776) "a") (data (i32.const 97779) "a") (data (i32.const 97782) "a") (data (i32.const 97785) "a") (data (i32.const 97788) "a") (data (i32.const 97791) "a") (data (i32.const 97794) "a") (data (i32.const 97797) "a") (data (i32.const 97800) "a") (data (i32.const 97803) "a") (data (i32.const 97806) "a") (data (i32.const 97809) "a") (data (i32.const 97812) "a") (data (i32.const 97815) "a") (data (i32.const 97818) "a") (data (i32.const 97821) "a") (data (i32.const 97824) "a") (data (i32.const 97827) "a") (data (i32.const 97830) "a") (data (i32.const 97833) "a") (data (i32.const 97836) "a") (data (i32.const 97839) "a") (data (i32.const 97842) "a") (data (i32.const 97845) "a") (data (i32.const 97848) "a") (data (i32.const 97851) "a") (data (i32.const 97854) "a") (data (i32.const 97857) "a") (data (i32.const 97860) "a") (data (i32.const 97863) "a") (data (i32.const 97866) "a") (data (i32.const 97869) "a") (data (i32.const 97872) "a") (data (i32.const 97875) "a") (data (i32.const 97878) "a") (data (i32.const 97881) "a") (data (i32.const 97884) "a") (data (i32.const 97887) "a") (data (i32.const 97890) "a") (data (i32.const 97893) "a") (data (i32.const 97896) "a") (data (i32.const 97899) "a") (data (i32.const 97902) "a") (data (i32.const 97905) "a") (data (i32.const 97908) "a") (data (i32.const 97911) "a") (data (i32.const 97914) "a") (data (i32.const 97917) "a") (data (i32.const 97920) "a") (data (i32.const 97923) "a") (data (i32.const 97926) "a") (data (i32.const 97929) "a") (data (i32.const 97932) "a") (data (i32.const 97935) "a") (data (i32.const 97938) "a") (data (i32.const 97941) "a") (data (i32.const 97944) "a") (data (i32.const 97947) "a") (data (i32.const 97950) "a") (data (i32.const 97953) "a") (data (i32.const 97956) "a") (data (i32.const 97959) "a") (data (i32.const 97962) "a") (data (i32.const 97965) "a") (data (i32.const 97968) "a") (data (i32.const 97971) "a") (data (i32.const 97974) "a") (data (i32.const 97977) "a") (data (i32.const 97980) "a") (data (i32.const 97983) "a") (data (i32.const 97986) "a") (data (i32.const 97989) "a") (data (i32.const 97992) "a") (data (i32.const 97995) "a") (data (i32.const 97998) "a") (data (i32.const 98001) "a") (data (i32.const 98004) "a") (data (i32.const 98007) "a") (data (i32.const 98010) "a") (data (i32.const 98013) "a") (data (i32.const 98016) "a") (data (i32.const 98019) "a") (data (i32.const 98022) "a") (data (i32.const 98025) "a") (data (i32.const 98028) "a") (data (i32.const 98031) "a") (data (i32.const 98034) "a") (data (i32.const 98037) "a") (data (i32.const 98040) "a") (data (i32.const 98043) "a") (data (i32.const 98046) "a") (data (i32.const 98049) "a") (data (i32.const 98052) "a") (data (i32.const 98055) "a") (data (i32.const 98058) "a") (data (i32.const 98061) "a") (data (i32.const 98064) "a") (data (i32.const 98067) "a") (data (i32.const 98070) "a") (data (i32.const 98073) "a") (data (i32.const 98076) "a") (data (i32.const 98079) "a") (data (i32.const 98082) "a") (data (i32.const 98085) "a") (data (i32.const 98088) "a") (data (i32.const 98091) "a") (data (i32.const 98094) "a") (data (i32.const 98097) "a") (data (i32.const 98100) "a") (data (i32.const 98103) "a") (data (i32.const 98106) "a") (data (i32.const 98109) "a") (data (i32.const 98112) "a") (data (i32.const 98115) "a") (data (i32.const 98118) "a") (data (i32.const 98121) "a") (data (i32.const 98124) "a") (data (i32.const 98127) "a") (data (i32.const 98130) "a") (data (i32.const 98133) "a") (data (i32.const 98136) "a") (data (i32.const 98139) "a") (data (i32.const 98142) "a") (data (i32.const 98145) "a") (data (i32.const 98148) "a") (data (i32.const 98151) "a") (data (i32.const 98154) "a") (data (i32.const 98157) "a") (data (i32.const 98160) "a") (data (i32.const 98163) "a") (data (i32.const 98166) "a") (data (i32.const 98169) "a") (data (i32.const 98172) "a") (data (i32.const 98175) "a") (data (i32.const 98178) "a") (data (i32.const 98181) "a") (data (i32.const 98184) "a") (data (i32.const 98187) "a") (data (i32.const 98190) "a") (data (i32.const 98193) "a") (data (i32.const 98196) "a") (data (i32.const 98199) "a") (data (i32.const 98202) "a") (data (i32.const 98205) "a") (data (i32.const 98208) "a") (data (i32.const 98211) "a") (data (i32.const 98214) "a") (data (i32.const 98217) "a") (data (i32.const 98220) "a") (data (i32.const 98223) "a") (data (i32.const 98226) "a") (data (i32.const 98229) "a") (data (i32.const 98232) "a") (data (i32.const 98235) "a") (data (i32.const 98238) "a") (data (i32.const 98241) "a") (data (i32.const 98244) "a") (data (i32.const 98247) "a") (data (i32.const 98250) "a") (data (i32.const 98253) "a") (data (i32.const 98256) "a") (data (i32.const 98259) "a") (data (i32.const 98262) "a") (data (i32.const 98265) "a") (data (i32.const 98268) "a") (data (i32.const 98271) "a") (data (i32.const 98274) "a") (data (i32.const 98277) "a") (data (i32.const 98280) "a") (data (i32.const 98283) "a") (data (i32.const 98286) "a") (data (i32.const 98289) "a") (data (i32.const 98292) "a") (data (i32.const 98295) "a") (data (i32.const 98298) "a") (data (i32.const 98301) "a") (data (i32.const 98304) "a") (data (i32.const 98307) "a") (data (i32.const 98310) "a") (data (i32.const 98313) "a") (data (i32.const 98316) "a") (data (i32.const 98319) "a") (data (i32.const 98322) "a") (data (i32.const 98325) "a") (data (i32.const 98328) "a") (data (i32.const 98331) "a") (data (i32.const 98334) "a") (data (i32.const 98337) "a") (data (i32.const 98340) "a") (data (i32.const 98343) "a") (data (i32.const 98346) "a") (data (i32.const 98349) "a") (data (i32.const 98352) "a") (data (i32.const 98355) "a") (data (i32.const 98358) "a") (data (i32.const 98361) "a") (data (i32.const 98364) "a") (data (i32.const 98367) "a") (data (i32.const 98370) "a") (data (i32.const 98373) "a") (data (i32.const 98376) "a") (data (i32.const 98379) "a") (data (i32.const 98382) "a") (data (i32.const 98385) "a") (data (i32.const 98388) "a") (data (i32.const 98391) "a") (data (i32.const 98394) "a") (data (i32.const 98397) "a") (data (i32.const 98400) "a") (data (i32.const 98403) "a") (data (i32.const 98406) "a") (data (i32.const 98409) "a") (data (i32.const 98412) "a") (data (i32.const 98415) "a") (data (i32.const 98418) "a") (data (i32.const 98421) "a") (data (i32.const 98424) "a") (data (i32.const 98427) "a") (data (i32.const 98430) "a") (data (i32.const 98433) "a") (data (i32.const 98436) "a") (data (i32.const 98439) "a") (data (i32.const 98442) "a") (data (i32.const 98445) "a") (data (i32.const 98448) "a") (data (i32.const 98451) "a") (data (i32.const 98454) "a") (data (i32.const 98457) "a") (data (i32.const 98460) "a") (data (i32.const 98463) "a") (data (i32.const 98466) "a") (data (i32.const 98469) "a") (data (i32.const 98472) "a") (data (i32.const 98475) "a") (data (i32.const 98478) "a") (data (i32.const 98481) "a") (data (i32.const 98484) "a") (data (i32.const 98487) "a") (data (i32.const 98490) "a") (data (i32.const 98493) "a") (data (i32.const 98496) "a") (data (i32.const 98499) "a") (data (i32.const 98502) "a") (data (i32.const 98505) "a") (data (i32.const 98508) "a") (data (i32.const 98511) "a") (data (i32.const 98514) "a") (data (i32.const 98517) "a") (data (i32.const 98520) "a") (data (i32.const 98523) "a") (data (i32.const 98526) "a") (data (i32.const 98529) "a") (data (i32.const 98532) "a") (data (i32.const 98535) "a") (data (i32.const 98538) "a") (data (i32.const 98541) "a") (data (i32.const 98544) "a") (data (i32.const 98547) "a") (data (i32.const 98550) "a") (data (i32.const 98553) "a") (data (i32.const 98556) "a") (data (i32.const 98559) "a") (data (i32.const 98562) "a") (data (i32.const 98565) "a") (data (i32.const 98568) "a") (data (i32.const 98571) "a") (data (i32.const 98574) "a") (data (i32.const 98577) "a") (data (i32.const 98580) "a") (data (i32.const 98583) "a") (data (i32.const 98586) "a") (data (i32.const 98589) "a") (data (i32.const 98592) "a") (data (i32.const 98595) "a") (data (i32.const 98598) "a") (data (i32.const 98601) "a") (data (i32.const 98604) "a") (data (i32.const 98607) "a") (data (i32.const 98610) "a") (data (i32.const 98613) "a") (data (i32.const 98616) "a") (data (i32.const 98619) "a") (data (i32.const 98622) "a") (data (i32.const 98625) "a") (data (i32.const 98628) "a") (data (i32.const 98631) "a") (data (i32.const 98634) "a") (data (i32.const 98637) "a") (data (i32.const 98640) "a") (data (i32.const 98643) "a") (data (i32.const 98646) "a") (data (i32.const 98649) "a") (data (i32.const 98652) "a") (data (i32.const 98655) "a") (data (i32.const 98658) "a") (data (i32.const 98661) "a") (data (i32.const 98664) "a") (data (i32.const 98667) "a") (data (i32.const 98670) "a") (data (i32.const 98673) "a") (data (i32.const 98676) "a") (data (i32.const 98679) "a") (data (i32.const 98682) "a") (data (i32.const 98685) "a") (data (i32.const 98688) "a") (data (i32.const 98691) "a") (data (i32.const 98694) "a") (data (i32.const 98697) "a") (data (i32.const 98700) "a") (data (i32.const 98703) "a") (data (i32.const 98706) "a") (data (i32.const 98709) "a") (data (i32.const 98712) "a") (data (i32.const 98715) "a") (data (i32.const 98718) "a") (data (i32.const 98721) "a") (data (i32.const 98724) "a") (data (i32.const 98727) "a") (data (i32.const 98730) "a") (data (i32.const 98733) "a") (data (i32.const 98736) "a") (data (i32.const 98739) "a") (data (i32.const 98742) "a") (data (i32.const 98745) "a") (data (i32.const 98748) "a") (data (i32.const 98751) "a") (data (i32.const 98754) "a") (data (i32.const 98757) "a") (data (i32.const 98760) "a") (data (i32.const 98763) "a") (data (i32.const 98766) "a") (data (i32.const 98769) "a") (data (i32.const 98772) "a") (data (i32.const 98775) "a") (data (i32.const 98778) "a") (data (i32.const 98781) "a") (data (i32.const 98784) "a") (data (i32.const 98787) "a") (data (i32.const 98790) "a") (data (i32.const 98793) "a") (data (i32.const 98796) "a") (data (i32.const 98799) "a") (data (i32.const 98802) "a") (data (i32.const 98805) "a") (data (i32.const 98808) "a") (data (i32.const 98811) "a") (data (i32.const 98814) "a") (data (i32.const 98817) "a") (data (i32.const 98820) "a") (data (i32.const 98823) "a") (data (i32.const 98826) "a") (data (i32.const 98829) "a") (data (i32.const 98832) "a") (data (i32.const 98835) "a") (data (i32.const 98838) "a") (data (i32.const 98841) "a") (data (i32.const 98844) "a") (data (i32.const 98847) "a") (data (i32.const 98850) "a") (data (i32.const 98853) "a") (data (i32.const 98856) "a") (data (i32.const 98859) "a") (data (i32.const 98862) "a") (data (i32.const 98865) "a") (data (i32.const 98868) "a") (data (i32.const 98871) "a") (data (i32.const 98874) "a") (data (i32.const 98877) "a") (data (i32.const 98880) "a") (data (i32.const 98883) "a") (data (i32.const 98886) "a") (data (i32.const 98889) "a") (data (i32.const 98892) "a") (data (i32.const 98895) "a") (data (i32.const 98898) "a") (data (i32.const 98901) "a") (data (i32.const 98904) "a") (data (i32.const 98907) "a") (data (i32.const 98910) "a") (data (i32.const 98913) "a") (data (i32.const 98916) "a") (data (i32.const 98919) "a") (data (i32.const 98922) "a") (data (i32.const 98925) "a") (data (i32.const 98928) "a") (data (i32.const 98931) "a") (data (i32.const 98934) "a") (data (i32.const 98937) "a") (data (i32.const 98940) "a") (data (i32.const 98943) "a") (data (i32.const 98946) "a") (data (i32.const 98949) "a") (data (i32.const 98952) "a") (data (i32.const 98955) "a") (data (i32.const 98958) "a") (data (i32.const 98961) "a") (data (i32.const 98964) "a") (data (i32.const 98967) "a") (data (i32.const 98970) "a") (data (i32.const 98973) "a") (data (i32.const 98976) "a") (data (i32.const 98979) "a") (data (i32.const 98982) "a") (data (i32.const 98985) "a") (data (i32.const 98988) "a") (data (i32.const 98991) "a") (data (i32.const 98994) "a") (data (i32.const 98997) "a") (data (i32.const 99000) "a") (data (i32.const 99003) "a") (data (i32.const 99006) "a") (data (i32.const 99009) "a") (data (i32.const 99012) "a") (data (i32.const 99015) "a") (data (i32.const 99018) "a") (data (i32.const 99021) "a") (data (i32.const 99024) "a") (data (i32.const 99027) "a") (data (i32.const 99030) "a") (data (i32.const 99033) "a") (data (i32.const 99036) "a") (data (i32.const 99039) "a") (data (i32.const 99042) "a") (data (i32.const 99045) "a") (data (i32.const 99048) "a") (data (i32.const 99051) "a") (data (i32.const 99054) "a") (data (i32.const 99057) "a") (data (i32.const 99060) "a") (data (i32.const 99063) "a") (data (i32.const 99066) "a") (data (i32.const 99069) "a") (data (i32.const 99072) "a") (data (i32.const 99075) "a") (data (i32.const 99078) "a") (data (i32.const 99081) "a") (data (i32.const 99084) "a") (data (i32.const 99087) "a") (data (i32.const 99090) "a") (data (i32.const 99093) "a") (data (i32.const 99096) "a") (data (i32.const 99099) "a") (data (i32.const 99102) "a") (data (i32.const 99105) "a") (data (i32.const 99108) "a") (data (i32.const 99111) "a") (data (i32.const 99114) "a") (data (i32.const 99117) "a") (data (i32.const 99120) "a") (data (i32.const 99123) "a") (data (i32.const 99126) "a") (data (i32.const 99129) "a") (data (i32.const 99132) "a") (data (i32.const 99135) "a") (data (i32.const 99138) "a") (data (i32.const 99141) "a") (data (i32.const 99144) "a") (data (i32.const 99147) "a") (data (i32.const 99150) "a") (data (i32.const 99153) "a") (data (i32.const 99156) "a") (data (i32.const 99159) "a") (data (i32.const 99162) "a") (data (i32.const 99165) "a") (data (i32.const 99168) "a") (data (i32.const 99171) "a") (data (i32.const 99174) "a") (data (i32.const 99177) "a") (data (i32.const 99180) "a") (data (i32.const 99183) "a") (data (i32.const 99186) "a") (data (i32.const 99189) "a") (data (i32.const 99192) "a") (data (i32.const 99195) "a") (data (i32.const 99198) "a") (data (i32.const 99201) "a") (data (i32.const 99204) "a") (data (i32.const 99207) "a") (data (i32.const 99210) "a") (data (i32.const 99213) "a") (data (i32.const 99216) "a") (data (i32.const 99219) "a") (data (i32.const 99222) "a") (data (i32.const 99225) "a") (data (i32.const 99228) "a") (data (i32.const 99231) "a") (data (i32.const 99234) "a") (data (i32.const 99237) "a") (data (i32.const 99240) "a") (data (i32.const 99243) "a") (data (i32.const 99246) "a") (data (i32.const 99249) "a") (data (i32.const 99252) "a") (data (i32.const 99255) "a") (data (i32.const 99258) "a") (data (i32.const 99261) "a") (data (i32.const 99264) "a") (data (i32.const 99267) "a") (data (i32.const 99270) "a") (data (i32.const 99273) "a") (data (i32.const 99276) "a") (data (i32.const 99279) "a") (data (i32.const 99282) "a") (data (i32.const 99285) "a") (data (i32.const 99288) "a") (data (i32.const 99291) "a") (data (i32.const 99294) "a") (data (i32.const 99297) "a") (data (i32.const 99300) "a") (data (i32.const 99303) "a") (data (i32.const 99306) "a") (data (i32.const 99309) "a") (data (i32.const 99312) "a") (data (i32.const 99315) "a") (data (i32.const 99318) "a") (data (i32.const 99321) "a") (data (i32.const 99324) "a") (data (i32.const 99327) "a") (data (i32.const 99330) "a") (data (i32.const 99333) "a") (data (i32.const 99336) "a") (data (i32.const 99339) "a") (data (i32.const 99342) "a") (data (i32.const 99345) "a") (data (i32.const 99348) "a") (data (i32.const 99351) "a") (data (i32.const 99354) "a") (data (i32.const 99357) "a") (data (i32.const 99360) "a") (data (i32.const 99363) "a") (data (i32.const 99366) "a") (data (i32.const 99369) "a") (data (i32.const 99372) "a") (data (i32.const 99375) "a") (data (i32.const 99378) "a") (data (i32.const 99381) "a") (data (i32.const 99384) "a") (data (i32.const 99387) "a") (data (i32.const 99390) "a") (data (i32.const 99393) "a") (data (i32.const 99396) "a") (data (i32.const 99399) "a") (data (i32.const 99402) "a") (data (i32.const 99405) "a") (data (i32.const 99408) "a") (data (i32.const 99411) "a") (data (i32.const 99414) "a") (data (i32.const 99417) "a") (data (i32.const 99420) "a") (data (i32.const 99423) "a") (data (i32.const 99426) "a") (data (i32.const 99429) "a") (data (i32.const 99432) "a") (data (i32.const 99435) "a") (data (i32.const 99438) "a") (data (i32.const 99441) "a") (data (i32.const 99444) "a") (data (i32.const 99447) "a") (data (i32.const 99450) "a") (data (i32.const 99453) "a") (data (i32.const 99456) "a") (data (i32.const 99459) "a") (data (i32.const 99462) "a") (data (i32.const 99465) "a") (data (i32.const 99468) "a") (data (i32.const 99471) "a") (data (i32.const 99474) "a") (data (i32.const 99477) "a") (data (i32.const 99480) "a") (data (i32.const 99483) "a") (data (i32.const 99486) "a") (data (i32.const 99489) "a") (data (i32.const 99492) "a") (data (i32.const 99495) "a") (data (i32.const 99498) "a") (data (i32.const 99501) "a") (data (i32.const 99504) "a") (data (i32.const 99507) "a") (data (i32.const 99510) "a") (data (i32.const 99513) "a") (data (i32.const 99516) "a") (data (i32.const 99519) "a") (data (i32.const 99522) "a") (data (i32.const 99525) "a") (data (i32.const 99528) "a") (data (i32.const 99531) "a") (data (i32.const 99534) "a") (data (i32.const 99537) "a") (data (i32.const 99540) "a") (data (i32.const 99543) "a") (data (i32.const 99546) "a") (data (i32.const 99549) "a") (data (i32.const 99552) "a") (data (i32.const 99555) "a") (data (i32.const 99558) "a") (data (i32.const 99561) "a") (data (i32.const 99564) "a") (data (i32.const 99567) "a") (data (i32.const 99570) "a") (data (i32.const 99573) "a") (data (i32.const 99576) "a") (data (i32.const 99579) "a") (data (i32.const 99582) "a") (data (i32.const 99585) "a") (data (i32.const 99588) "a") (data (i32.const 99591) "a") (data (i32.const 99594) "a") (data (i32.const 99597) "a") (data (i32.const 99600) "a") (data (i32.const 99603) "a") (data (i32.const 99606) "a") (data (i32.const 99609) "a") (data (i32.const 99612) "a") (data (i32.const 99615) "a") (data (i32.const 99618) "a") (data (i32.const 99621) "a") (data (i32.const 99624) "a") (data (i32.const 99627) "a") (data (i32.const 99630) "a") (data (i32.const 99633) "a") (data (i32.const 99636) "a") (data (i32.const 99639) "a") (data (i32.const 99642) "a") (data (i32.const 99645) "a") (data (i32.const 99648) "a") (data (i32.const 99651) "a") (data (i32.const 99654) "a") (data (i32.const 99657) "a") (data (i32.const 99660) "a") (data (i32.const 99663) "a") (data (i32.const 99666) "a") (data (i32.const 99669) "a") (data (i32.const 99672) "a") (data (i32.const 99675) "a") (data (i32.const 99678) "a") (data (i32.const 99681) "a") (data (i32.const 99684) "a") (data (i32.const 99687) "a") (data (i32.const 99690) "a") (data (i32.const 99693) "a") (data (i32.const 99696) "a") (data (i32.const 99699) "a") (data (i32.const 99702) "a") (data (i32.const 99705) "a") (data (i32.const 99708) "a") (data (i32.const 99711) "a") (data (i32.const 99714) "a") (data (i32.const 99717) "a") (data (i32.const 99720) "a") (data (i32.const 99723) "a") (data (i32.const 99726) "a") (data (i32.const 99729) "a") (data (i32.const 99732) "a") (data (i32.const 99735) "a") (data (i32.const 99738) "a") (data (i32.const 99741) "a") (data (i32.const 99744) "a") (data (i32.const 99747) "a") (data (i32.const 99750) "a") (data (i32.const 99753) "a") (data (i32.const 99756) "a") (data (i32.const 99759) "a") (data (i32.const 99762) "a") (data (i32.const 99765) "a") (data (i32.const 99768) "a") (data (i32.const 99771) "a") (data (i32.const 99774) "a") (data (i32.const 99777) "a") (data (i32.const 99780) "a") (data (i32.const 99783) "a") (data (i32.const 99786) "a") (data (i32.const 99789) "a") (data (i32.const 99792) "a") (data (i32.const 99795) "a") (data (i32.const 99798) "a") (data (i32.const 99801) "a") (data (i32.const 99804) "a") (data (i32.const 99807) "a") (data (i32.const 99810) "a") (data (i32.const 99813) "a") (data (i32.const 99816) "a") (data (i32.const 99819) "a") (data (i32.const 99822) "a") (data (i32.const 99825) "a") (data (i32.const 99828) "a") (data (i32.const 99831) "a") (data (i32.const 99834) "a") (data (i32.const 99837) "a") (data (i32.const 99840) "a") (data (i32.const 99843) "a") (data (i32.const 99846) "a") (data (i32.const 99849) "a") (data (i32.const 99852) "a") (data (i32.const 99855) "a") (data (i32.const 99858) "a") (data (i32.const 99861) "a") (data (i32.const 99864) "a") (data (i32.const 99867) "a") (data (i32.const 99870) "a") (data (i32.const 99873) "a") (data (i32.const 99876) "a") (data (i32.const 99879) "a") (data (i32.const 99882) "a") (data (i32.const 99885) "a") (data (i32.const 99888) "a") (data (i32.const 99891) "a") (data (i32.const 99894) "a") (data (i32.const 99897) "a") (data (i32.const 99900) "a") (data (i32.const 99903) "a") (data (i32.const 99906) "a") (data (i32.const 99909) "a") (data (i32.const 99912) "a") (data (i32.const 99915) "a") (data (i32.const 99918) "a") (data (i32.const 99921) "a") (data (i32.const 99924) "a") (data (i32.const 99927) "a") (data (i32.const 99930) "a") (data (i32.const 99933) "a") (data (i32.const 99936) "a") (data (i32.const 99939) "a") (data (i32.const 99942) "a") (data (i32.const 99945) "a") (data (i32.const 99948) "a") (data (i32.const 99951) "a") (data (i32.const 99954) "a") (data (i32.const 99957) "a") (data (i32.const 99960) "a") (data (i32.const 99963) "a") (data (i32.const 99966) "a") (data (i32.const 99969) "a") (data (i32.const 99972) "a") (data (i32.const 99975) "a") (data (i32.const 99978) "a") (data (i32.const 99981) "a") (data (i32.const 99984) "a") (data (i32.const 99987) "a") (data (i32.const 99990) "a") (data (i32.const 99993) "a") (data (i32.const 99996) "a") (data (i32.const 99999) "a") (data (i32.const 100002) "a") (data (i32.const 100005) "a") (data (i32.const 100008) "a") (data (i32.const 100011) "a") (data (i32.const 100014) "a") (data (i32.const 100017) "a") (data (i32.const 100020) "a") (data (i32.const 100023) "a") (data (i32.const 100026) "a") (data (i32.const 100029) "a") (data (i32.const 100032) "a") (data (i32.const 100035) "a") (data (i32.const 100038) "a") (data (i32.const 100041) "a") (data (i32.const 100044) "a") (data (i32.const 100047) "a") (data (i32.const 100050) "a") (data (i32.const 100053) "a") (data (i32.const 100056) "a") (data (i32.const 100059) "a") (data (i32.const 100062) "a") (data (i32.const 100065) "a") (data (i32.const 100068) "a") (data (i32.const 100071) "a") (data (i32.const 100074) "a") (data (i32.const 100077) "a") (data (i32.const 100080) "a") (data (i32.const 100083) "a") (data (i32.const 100086) "a") (data (i32.const 100089) "a") (data (i32.const 100092) "a") (data (i32.const 100095) "a") (data (i32.const 100098) "a") (data (i32.const 100101) "a") (data (i32.const 100104) "a") (data (i32.const 100107) "a") (data (i32.const 100110) "a") (data (i32.const 100113) "a") (data (i32.const 100116) "a") (data (i32.const 100119) "a") (data (i32.const 100122) "a") (data (i32.const 100125) "a") (data (i32.const 100128) "a") (data (i32.const 100131) "a") (data (i32.const 100134) "a") (data (i32.const 100137) "a") (data (i32.const 100140) "a") (data (i32.const 100143) "a") (data (i32.const 100146) "a") (data (i32.const 100149) "a") (data (i32.const 100152) "a") (data (i32.const 100155) "a") (data (i32.const 100158) "a") (data (i32.const 100161) "a") (data (i32.const 100164) "a") (data (i32.const 100167) "a") (data (i32.const 100170) "a") (data (i32.const 100173) "a") (data (i32.const 100176) "a") (data (i32.const 100179) "a") (data (i32.const 100182) "a") (data (i32.const 100185) "a") (data (i32.const 100188) "a") (data (i32.const 100191) "a") (data (i32.const 100194) "a") (data (i32.const 100197) "a") (data (i32.const 100200) "a") (data (i32.const 100203) "a") (data (i32.const 100206) "a") (data (i32.const 100209) "a") (data (i32.const 100212) "a") (data (i32.const 100215) "a") (data (i32.const 100218) "a") (data (i32.const 100221) "a") (data (i32.const 100224) "a") (data (i32.const 100227) "a") (data (i32.const 100230) "a") (data (i32.const 100233) "a") (data (i32.const 100236) "a") (data (i32.const 100239) "a") (data (i32.const 100242) "a") (data (i32.const 100245) "a") (data (i32.const 100248) "a") (data (i32.const 100251) "a") (data (i32.const 100254) "a") (data (i32.const 100257) "a") (data (i32.const 100260) "a") (data (i32.const 100263) "a") (data (i32.const 100266) "a") (data (i32.const 100269) "a") (data (i32.const 100272) "a") (data (i32.const 100275) "a") (data (i32.const 100278) "a") (data (i32.const 100281) "a") (data (i32.const 100284) "a") (data (i32.const 100287) "a") (data (i32.const 100290) "a") (data (i32.const 100293) "a") (data (i32.const 100296) "a") (data (i32.const 100299) "a") (data (i32.const 100302) "a") (data (i32.const 100305) "a") (data (i32.const 100308) "a") (data (i32.const 100311) "a") (data (i32.const 100314) "a") (data (i32.const 100317) "a") (data (i32.const 100320) "a") (data (i32.const 100323) "a") (data (i32.const 100326) "a") (data (i32.const 100329) "a") (data (i32.const 100332) "a") (data (i32.const 100335) "a") (data (i32.const 100338) "a") (data (i32.const 100341) "a") (data (i32.const 100344) "a") (data (i32.const 100347) "a") (data (i32.const 100350) "a") (data (i32.const 100353) "a") (data (i32.const 100356) "a") (data (i32.const 100359) "a") (data (i32.const 100362) "a") (data (i32.const 100365) "a") (data (i32.const 100368) "a") (data (i32.const 100371) "a") (data (i32.const 100374) "a") (data (i32.const 100377) "a") (data (i32.const 100380) "a") (data (i32.const 100383) "a") (data (i32.const 100386) "a") (data (i32.const 100389) "a") (data (i32.const 100392) "a") (data (i32.const 100395) "a") (data (i32.const 100398) "a") (data (i32.const 100401) "a") (data (i32.const 100404) "a") (data (i32.const 100407) "a") (data (i32.const 100410) "a") (data (i32.const 100413) "a") (data (i32.const 100416) "a") (data (i32.const 100419) "a") (data (i32.const 100422) "a") (data (i32.const 100425) "a") (data (i32.const 100428) "a") (data (i32.const 100431) "a") (data (i32.const 100434) "a") (data (i32.const 100437) "a") (data (i32.const 100440) "a") (data (i32.const 100443) "a") (data (i32.const 100446) "a") (data (i32.const 100449) "a") (data (i32.const 100452) "a") (data (i32.const 100455) "a") (data (i32.const 100458) "a") (data (i32.const 100461) "a") (data (i32.const 100464) "a") (data (i32.const 100467) "a") (data (i32.const 100470) "a") (data (i32.const 100473) "a") (data (i32.const 100476) "a") (data (i32.const 100479) "a") (data (i32.const 100482) "a") (data (i32.const 100485) "a") (data (i32.const 100488) "a") (data (i32.const 100491) "a") (data (i32.const 100494) "a") (data (i32.const 100497) "a") (data (i32.const 100500) "a") (data (i32.const 100503) "a") (data (i32.const 100506) "a") (data (i32.const 100509) "a") (data (i32.const 100512) "a") (data (i32.const 100515) "a") (data (i32.const 100518) "a") (data (i32.const 100521) "a") (data (i32.const 100524) "a") (data (i32.const 100527) "a") (data (i32.const 100530) "a") (data (i32.const 100533) "a") (data (i32.const 100536) "a") (data (i32.const 100539) "a") (data (i32.const 100542) "a") (data (i32.const 100545) "a") (data (i32.const 100548) "a") (data (i32.const 100551) "a") (data (i32.const 100554) "a") (data (i32.const 100557) "a") (data (i32.const 100560) "a") (data (i32.const 100563) "a") (data (i32.const 100566) "a") (data (i32.const 100569) "a") (data (i32.const 100572) "a") (data (i32.const 100575) "a") (data (i32.const 100578) "a") (data (i32.const 100581) "a") (data (i32.const 100584) "a") (data (i32.const 100587) "a") (data (i32.const 100590) "a") (data (i32.const 100593) "a") (data (i32.const 100596) "a") (data (i32.const 100599) "a") (data (i32.const 100602) "a") (data (i32.const 100605) "a") (data (i32.const 100608) "a") (data (i32.const 100611) "a") (data (i32.const 100614) "a") (data (i32.const 100617) "a") (data (i32.const 100620) "a") (data (i32.const 100623) "a") (data (i32.const 100626) "a") (data (i32.const 100629) "a") (data (i32.const 100632) "a") (data (i32.const 100635) "a") (data (i32.const 100638) "a") (data (i32.const 100641) "a") (data (i32.const 100644) "a") (data (i32.const 100647) "a") (data (i32.const 100650) "a") (data (i32.const 100653) "a") (data (i32.const 100656) "a") (data (i32.const 100659) "a") (data (i32.const 100662) "a") (data (i32.const 100665) "a") (data (i32.const 100668) "a") (data (i32.const 100671) "a") (data (i32.const 100674) "a") (data (i32.const 100677) "a") (data (i32.const 100680) "a") (data (i32.const 100683) "a") (data (i32.const 100686) "a") (data (i32.const 100689) "a") (data (i32.const 100692) "a") (data (i32.const 100695) "a") (data (i32.const 100698) "a") (data (i32.const 100701) "a") (data (i32.const 100704) "a") (data (i32.const 100707) "a") (data (i32.const 100710) "a") (data (i32.const 100713) "a") (data (i32.const 100716) "a") (data (i32.const 100719) "a") (data (i32.const 100722) "a") (data (i32.const 100725) "a") (data (i32.const 100728) "a") (data (i32.const 100731) "a") (data (i32.const 100734) "a") (data (i32.const 100737) "a") (data (i32.const 100740) "a") (data (i32.const 100743) "a") (data (i32.const 100746) "a") (data (i32.const 100749) "a") (data (i32.const 100752) "a") (data (i32.const 100755) "a") (data (i32.const 100758) "a") (data (i32.const 100761) "a") (data (i32.const 100764) "a") (data (i32.const 100767) "a") (data (i32.const 100770) "a") (data (i32.const 100773) "a") (data (i32.const 100776) "a") (data (i32.const 100779) "a") (data (i32.const 100782) "a") (data (i32.const 100785) "a") (data (i32.const 100788) "a") (data (i32.const 100791) "a") (data (i32.const 100794) "a") (data (i32.const 100797) "a") (data (i32.const 100800) "a") (data (i32.const 100803) "a") (data (i32.const 100806) "a") (data (i32.const 100809) "a") (data (i32.const 100812) "a") (data (i32.const 100815) "a") (data (i32.const 100818) "a") (data (i32.const 100821) "a") (data (i32.const 100824) "a") (data (i32.const 100827) "a") (data (i32.const 100830) "a") (data (i32.const 100833) "a") (data (i32.const 100836) "a") (data (i32.const 100839) "a") (data (i32.const 100842) "a") (data (i32.const 100845) "a") (data (i32.const 100848) "a") (data (i32.const 100851) "a") (data (i32.const 100854) "a") (data (i32.const 100857) "a") (data (i32.const 100860) "a") (data (i32.const 100863) "a") (data (i32.const 100866) "a") (data (i32.const 100869) "a") (data (i32.const 100872) "a") (data (i32.const 100875) "a") (data (i32.const 100878) "a") (data (i32.const 100881) "a") (data (i32.const 100884) "a") (data (i32.const 100887) "a") (data (i32.const 100890) "a") (data (i32.const 100893) "a") (data (i32.const 100896) "a") (data (i32.const 100899) "a") (data (i32.const 100902) "a") (data (i32.const 100905) "a") (data (i32.const 100908) "a") (data (i32.const 100911) "a") (data (i32.const 100914) "a") (data (i32.const 100917) "a") (data (i32.const 100920) "a") (data (i32.const 100923) "a") (data (i32.const 100926) "a") (data (i32.const 100929) "a") (data (i32.const 100932) "a") (data (i32.const 100935) "a") (data (i32.const 100938) "a") (data (i32.const 100941) "a") (data (i32.const 100944) "a") (data (i32.const 100947) "a") (data (i32.const 100950) "a") (data (i32.const 100953) "a") (data (i32.const 100956) "a") (data (i32.const 100959) "a") (data (i32.const 100962) "a") (data (i32.const 100965) "a") (data (i32.const 100968) "a") (data (i32.const 100971) "a") (data (i32.const 100974) "a") (data (i32.const 100977) "a") (data (i32.const 100980) "a") (data (i32.const 100983) "a") (data (i32.const 100986) "a") (data (i32.const 100989) "a") (data (i32.const 100992) "a") (data (i32.const 100995) "a") (data (i32.const 100998) "a") (data (i32.const 101001) "a") (data (i32.const 101004) "a") (data (i32.const 101007) "a") (data (i32.const 101010) "a") (data (i32.const 101013) "a") (data (i32.const 101016) "a") (data (i32.const 101019) "a") (data (i32.const 101022) "a") (data (i32.const 101025) "a") (data (i32.const 101028) "a") (data (i32.const 101031) "a") (data (i32.const 101034) "a") (data (i32.const 101037) "a") (data (i32.const 101040) "a") (data (i32.const 101043) "a") (data (i32.const 101046) "a") (data (i32.const 101049) "a") (data (i32.const 101052) "a") (data (i32.const 101055) "a") (data (i32.const 101058) "a") (data (i32.const 101061) "a") (data (i32.const 101064) "a") (data (i32.const 101067) "a") (data (i32.const 101070) "a") (data (i32.const 101073) "a") (data (i32.const 101076) "a") (data (i32.const 101079) "a") (data (i32.const 101082) "a") (data (i32.const 101085) "a") (data (i32.const 101088) "a") (data (i32.const 101091) "a") (data (i32.const 101094) "a") (data (i32.const 101097) "a") (data (i32.const 101100) "a") (data (i32.const 101103) "a") (data (i32.const 101106) "a") (data (i32.const 101109) "a") (data (i32.const 101112) "a") (data (i32.const 101115) "a") (data (i32.const 101118) "a") (data (i32.const 101121) "a") (data (i32.const 101124) "a") (data (i32.const 101127) "a") (data (i32.const 101130) "a") (data (i32.const 101133) "a") (data (i32.const 101136) "a") (data (i32.const 101139) "a") (data (i32.const 101142) "a") (data (i32.const 101145) "a") (data (i32.const 101148) "a") (data (i32.const 101151) "a") (data (i32.const 101154) "a") (data (i32.const 101157) "a") (data (i32.const 101160) "a") (data (i32.const 101163) "a") (data (i32.const 101166) "a") (data (i32.const 101169) "a") (data (i32.const 101172) "a") (data (i32.const 101175) "a") (data (i32.const 101178) "a") (data (i32.const 101181) "a") (data (i32.const 101184) "a") (data (i32.const 101187) "a") (data (i32.const 101190) "a") (data (i32.const 101193) "a") (data (i32.const 101196) "a") (data (i32.const 101199) "a") (data (i32.const 101202) "a") (data (i32.const 101205) "a") (data (i32.const 101208) "a") (data (i32.const 101211) "a") (data (i32.const 101214) "a") (data (i32.const 101217) "a") (data (i32.const 101220) "a") (data (i32.const 101223) "a") (data (i32.const 101226) "a") (data (i32.const 101229) "a") (data (i32.const 101232) "a") (data (i32.const 101235) "a") (data (i32.const 101238) "a") (data (i32.const 101241) "a") (data (i32.const 101244) "a") (data (i32.const 101247) "a") (data (i32.const 101250) "a") (data (i32.const 101253) "a") (data (i32.const 101256) "a") (data (i32.const 101259) "a") (data (i32.const 101262) "a") (data (i32.const 101265) "a") (data (i32.const 101268) "a") (data (i32.const 101271) "a") (data (i32.const 101274) "a") (data (i32.const 101277) "a") (data (i32.const 101280) "a") (data (i32.const 101283) "a") (data (i32.const 101286) "a") (data (i32.const 101289) "a") (data (i32.const 101292) "a") (data (i32.const 101295) "a") (data (i32.const 101298) "a") (data (i32.const 101301) "a") (data (i32.const 101304) "a") (data (i32.const 101307) "a") (data (i32.const 101310) "a") (data (i32.const 101313) "a") (data (i32.const 101316) "a") (data (i32.const 101319) "a") (data (i32.const 101322) "a") (data (i32.const 101325) "a") (data (i32.const 101328) "a") (data (i32.const 101331) "a") (data (i32.const 101334) "a") (data (i32.const 101337) "a") (data (i32.const 101340) "a") (data (i32.const 101343) "a") (data (i32.const 101346) "a") (data (i32.const 101349) "a") (data (i32.const 101352) "a") (data (i32.const 101355) "a") (data (i32.const 101358) "a") (data (i32.const 101361) "a") (data (i32.const 101364) "a") (data (i32.const 101367) "a") (data (i32.const 101370) "a") (data (i32.const 101373) "a") (data (i32.const 101376) "a") (data (i32.const 101379) "a") (data (i32.const 101382) "a") (data (i32.const 101385) "a") (data (i32.const 101388) "a") (data (i32.const 101391) "a") (data (i32.const 101394) "a") (data (i32.const 101397) "a") (data (i32.const 101400) "a") (data (i32.const 101403) "a") (data (i32.const 101406) "a") (data (i32.const 101409) "a") (data (i32.const 101412) "a") (data (i32.const 101415) "a") (data (i32.const 101418) "a") (data (i32.const 101421) "a") (data (i32.const 101424) "a") (data (i32.const 101427) "a") (data (i32.const 101430) "a") (data (i32.const 101433) "a") (data (i32.const 101436) "a") (data (i32.const 101439) "a") (data (i32.const 101442) "a") (data (i32.const 101445) "a") (data (i32.const 101448) "a") (data (i32.const 101451) "a") (data (i32.const 101454) "a") (data (i32.const 101457) "a") (data (i32.const 101460) "a") (data (i32.const 101463) "a") (data (i32.const 101466) "a") (data (i32.const 101469) "a") (data (i32.const 101472) "a") (data (i32.const 101475) "a") (data (i32.const 101478) "a") (data (i32.const 101481) "a") (data (i32.const 101484) "a") (data (i32.const 101487) "a") (data (i32.const 101490) "a") (data (i32.const 101493) "a") (data (i32.const 101496) "a") (data (i32.const 101499) "a") (data (i32.const 101502) "a") (data (i32.const 101505) "a") (data (i32.const 101508) "a") (data (i32.const 101511) "a") (data (i32.const 101514) "a") (data (i32.const 101517) "a") (data (i32.const 101520) "a") (data (i32.const 101523) "a") (data (i32.const 101526) "a") (data (i32.const 101529) "a") (data (i32.const 101532) "a") (data (i32.const 101535) "a") (data (i32.const 101538) "a") (data (i32.const 101541) "a") (data (i32.const 101544) "a") (data (i32.const 101547) "a") (data (i32.const 101550) "a") (data (i32.const 101553) "a") (data (i32.const 101556) "a") (data (i32.const 101559) "a") (data (i32.const 101562) "a") (data (i32.const 101565) "a") (data (i32.const 101568) "a") (data (i32.const 101571) "a") (data (i32.const 101574) "a") (data (i32.const 101577) "a") (data (i32.const 101580) "a") (data (i32.const 101583) "a") (data (i32.const 101586) "a") (data (i32.const 101589) "a") (data (i32.const 101592) "a") (data (i32.const 101595) "a") (data (i32.const 101598) "a") (data (i32.const 101601) "a") (data (i32.const 101604) "a") (data (i32.const 101607) "a") (data (i32.const 101610) "a") (data (i32.const 101613) "a") (data (i32.const 101616) "a") (data (i32.const 101619) "a") (data (i32.const 101622) "a") (data (i32.const 101625) "a") (data (i32.const 101628) "a") (data (i32.const 101631) "a") (data (i32.const 101634) "a") (data (i32.const 101637) "a") (data (i32.const 101640) "a") (data (i32.const 101643) "a") (data (i32.const 101646) "a") (data (i32.const 101649) "a") (data (i32.const 101652) "a") (data (i32.const 101655) "a") (data (i32.const 101658) "a") (data (i32.const 101661) "a") (data (i32.const 101664) "a") (data (i32.const 101667) "a") (data (i32.const 101670) "a") (data (i32.const 101673) "a") (data (i32.const 101676) "a") (data (i32.const 101679) "a") (data (i32.const 101682) "a") (data (i32.const 101685) "a") (data (i32.const 101688) "a") (data (i32.const 101691) "a") (data (i32.const 101694) "a") (data (i32.const 101697) "a") (data (i32.const 101700) "a") (data (i32.const 101703) "a") (data (i32.const 101706) "a") (data (i32.const 101709) "a") (data (i32.const 101712) "a") (data (i32.const 101715) "a") (data (i32.const 101718) "a") (data (i32.const 101721) "a") (data (i32.const 101724) "a") (data (i32.const 101727) "a") (data (i32.const 101730) "a") (data (i32.const 101733) "a") (data (i32.const 101736) "a") (data (i32.const 101739) "a") (data (i32.const 101742) "a") (data (i32.const 101745) "a") (data (i32.const 101748) "a") (data (i32.const 101751) "a") (data (i32.const 101754) "a") (data (i32.const 101757) "a") (data (i32.const 101760) "a") (data (i32.const 101763) "a") (data (i32.const 101766) "a") (data (i32.const 101769) "a") (data (i32.const 101772) "a") (data (i32.const 101775) "a") (data (i32.const 101778) "a") (data (i32.const 101781) "a") (data (i32.const 101784) "a") (data (i32.const 101787) "a") (data (i32.const 101790) "a") (data (i32.const 101793) "a") (data (i32.const 101796) "a") (data (i32.const 101799) "a") (data (i32.const 101802) "a") (data (i32.const 101805) "a") (data (i32.const 101808) "a") (data (i32.const 101811) "a") (data (i32.const 101814) "a") (data (i32.const 101817) "a") (data (i32.const 101820) "a") (data (i32.const 101823) "a") (data (i32.const 101826) "a") (data (i32.const 101829) "a") (data (i32.const 101832) "a") (data (i32.const 101835) "a") (data (i32.const 101838) "a") (data (i32.const 101841) "a") (data (i32.const 101844) "a") (data (i32.const 101847) "a") (data (i32.const 101850) "a") (data (i32.const 101853) "a") (data (i32.const 101856) "a") (data (i32.const 101859) "a") (data (i32.const 101862) "a") (data (i32.const 101865) "a") (data (i32.const 101868) "a") (data (i32.const 101871) "a") (data (i32.const 101874) "a") (data (i32.const 101877) "a") (data (i32.const 101880) "a") (data (i32.const 101883) "a") (data (i32.const 101886) "a") (data (i32.const 101889) "a") (data (i32.const 101892) "a") (data (i32.const 101895) "a") (data (i32.const 101898) "a") (data (i32.const 101901) "a") (data (i32.const 101904) "a") (data (i32.const 101907) "a") (data (i32.const 101910) "a") (data (i32.const 101913) "a") (data (i32.const 101916) "a") (data (i32.const 101919) "a") (data (i32.const 101922) "a") (data (i32.const 101925) "a") (data (i32.const 101928) "a") (data (i32.const 101931) "a") (data (i32.const 101934) "a") (data (i32.const 101937) "a") (data (i32.const 101940) "a") (data (i32.const 101943) "a") (data (i32.const 101946) "a") (data (i32.const 101949) "a") (data (i32.const 101952) "a") (data (i32.const 101955) "a") (data (i32.const 101958) "a") (data (i32.const 101961) "a") (data (i32.const 101964) "a") (data (i32.const 101967) "a") (data (i32.const 101970) "a") (data (i32.const 101973) "a") (data (i32.const 101976) "a") (data (i32.const 101979) "a") (data (i32.const 101982) "a") (data (i32.const 101985) "a") (data (i32.const 101988) "a") (data (i32.const 101991) "a") (data (i32.const 101994) "a") (data (i32.const 101997) "a") (data (i32.const 102000) "a") (data (i32.const 102003) "a") (data (i32.const 102006) "a") (data (i32.const 102009) "a") (data (i32.const 102012) "a") (data (i32.const 102015) "a") (data (i32.const 102018) "a") (data (i32.const 102021) "a") (data (i32.const 102024) "a") (data (i32.const 102027) "a") (data (i32.const 102030) "a") (data (i32.const 102033) "a") (data (i32.const 102036) "a") (data (i32.const 102039) "a") (data (i32.const 102042) "a") (data (i32.const 102045) "a") (data (i32.const 102048) "a") (data (i32.const 102051) "a") (data (i32.const 102054) "a") (data (i32.const 102057) "a") (data (i32.const 102060) "a") (data (i32.const 102063) "a") (data (i32.const 102066) "a") (data (i32.const 102069) "a") (data (i32.const 102072) "a") (data (i32.const 102075) "a") (data (i32.const 102078) "a") (data (i32.const 102081) "a") (data (i32.const 102084) "a") (data (i32.const 102087) "a") (data (i32.const 102090) "a") (data (i32.const 102093) "a") (data (i32.const 102096) "a") (data (i32.const 102099) "a") (data (i32.const 102102) "a") (data (i32.const 102105) "a") (data (i32.const 102108) "a") (data (i32.const 102111) "a") (data (i32.const 102114) "a") (data (i32.const 102117) "a") (data (i32.const 102120) "a") (data (i32.const 102123) "a") (data (i32.const 102126) "a") (data (i32.const 102129) "a") (data (i32.const 102132) "a") (data (i32.const 102135) "a") (data (i32.const 102138) "a") (data (i32.const 102141) "a") (data (i32.const 102144) "a") (data (i32.const 102147) "a") (data (i32.const 102150) "a") (data (i32.const 102153) "a") (data (i32.const 102156) "a") (data (i32.const 102159) "a") (data (i32.const 102162) "a") (data (i32.const 102165) "a") (data (i32.const 102168) "a") (data (i32.const 102171) "a") (data (i32.const 102174) "a") (data (i32.const 102177) "a") (data (i32.const 102180) "a") (data (i32.const 102183) "a") (data (i32.const 102186) "a") (data (i32.const 102189) "a") (data (i32.const 102192) "a") (data (i32.const 102195) "a") (data (i32.const 102198) "a") (data (i32.const 102201) "a") (data (i32.const 102204) "a") (data (i32.const 102207) "a") (data (i32.const 102210) "a") (data (i32.const 102213) "a") (data (i32.const 102216) "a") (data (i32.const 102219) "a") (data (i32.const 102222) "a") (data (i32.const 102225) "a") (data (i32.const 102228) "a") (data (i32.const 102231) "a") (data (i32.const 102234) "a") (data (i32.const 102237) "a") (data (i32.const 102240) "a") (data (i32.const 102243) "a") (data (i32.const 102246) "a") (data (i32.const 102249) "a") (data (i32.const 102252) "a") (data (i32.const 102255) "a") (data (i32.const 102258) "a") (data (i32.const 102261) "a") (data (i32.const 102264) "a") (data (i32.const 102267) "a") (data (i32.const 102270) "a") (data (i32.const 102273) "a") (data (i32.const 102276) "a") (data (i32.const 102279) "a") (data (i32.const 102282) "a") (data (i32.const 102285) "a") (data (i32.const 102288) "a") (data (i32.const 102291) "a") (data (i32.const 102294) "a") (data (i32.const 102297) "a") (data (i32.const 102300) "a") (data (i32.const 102303) "a") (data (i32.const 102306) "a") (data (i32.const 102309) "a") (data (i32.const 102312) "a") (data (i32.const 102315) "a") (data (i32.const 102318) "a") (data (i32.const 102321) "a") (data (i32.const 102324) "a") (data (i32.const 102327) "a") (data (i32.const 102330) "a") (data (i32.const 102333) "a") (data (i32.const 102336) "a") (data (i32.const 102339) "a") (data (i32.const 102342) "a") (data (i32.const 102345) "a") (data (i32.const 102348) "a") (data (i32.const 102351) "a") (data (i32.const 102354) "a") (data (i32.const 102357) "a") (data (i32.const 102360) "a") (data (i32.const 102363) "a") (data (i32.const 102366) "a") (data (i32.const 102369) "a") (data (i32.const 102372) "a") (data (i32.const 102375) "a") (data (i32.const 102378) "a") (data (i32.const 102381) "a") (data (i32.const 102384) "a") (data (i32.const 102387) "a") (data (i32.const 102390) "a") (data (i32.const 102393) "a") (data (i32.const 102396) "a") (data (i32.const 102399) "a") (data (i32.const 102402) "a") (data (i32.const 102405) "a") (data (i32.const 102408) "a") (data (i32.const 102411) "a") (data (i32.const 102414) "a") (data (i32.const 102417) "a") (data (i32.const 102420) "a") (data (i32.const 102423) "a") (data (i32.const 102426) "a") (data (i32.const 102429) "a") (data (i32.const 102432) "a") (data (i32.const 102435) "a") (data (i32.const 102438) "a") (data (i32.const 102441) "a") (data (i32.const 102444) "a") (data (i32.const 102447) "a") (data (i32.const 102450) "a") (data (i32.const 102453) "a") (data (i32.const 102456) "a") (data (i32.const 102459) "a") (data (i32.const 102462) "a") (data (i32.const 102465) "a") (data (i32.const 102468) "a") (data (i32.const 102471) "a") (data (i32.const 102474) "a") (data (i32.const 102477) "a") (data (i32.const 102480) "a") (data (i32.const 102483) "a") (data (i32.const 102486) "a") (data (i32.const 102489) "a") (data (i32.const 102492) "a") (data (i32.const 102495) "a") (data (i32.const 102498) "a") (data (i32.const 102501) "a") (data (i32.const 102504) "a") (data (i32.const 102507) "a") (data (i32.const 102510) "a") (data (i32.const 102513) "a") (data (i32.const 102516) "a") (data (i32.const 102519) "a") (data (i32.const 102522) "a") (data (i32.const 102525) "a") (data (i32.const 102528) "a") (data (i32.const 102531) "a") (data (i32.const 102534) "a") (data (i32.const 102537) "a") (data (i32.const 102540) "a") (data (i32.const 102543) "a") (data (i32.const 102546) "a") (data (i32.const 102549) "a") (data (i32.const 102552) "a") (data (i32.const 102555) "a") (data (i32.const 102558) "a") (data (i32.const 102561) "a") (data (i32.const 102564) "a") (data (i32.const 102567) "a") (data (i32.const 102570) "a") (data (i32.const 102573) "a") (data (i32.const 102576) "a") (data (i32.const 102579) "a") (data (i32.const 102582) "a") (data (i32.const 102585) "a") (data (i32.const 102588) "a") (data (i32.const 102591) "a") (data (i32.const 102594) "a") (data (i32.const 102597) "a") (data (i32.const 102600) "a") (data (i32.const 102603) "a") (data (i32.const 102606) "a") (data (i32.const 102609) "a") (data (i32.const 102612) "a") (data (i32.const 102615) "a") (data (i32.const 102618) "a") (data (i32.const 102621) "a") (data (i32.const 102624) "a") (data (i32.const 102627) "a") (data (i32.const 102630) "a") (data (i32.const 102633) "a") (data (i32.const 102636) "a") (data (i32.const 102639) "a") (data (i32.const 102642) "a") (data (i32.const 102645) "a") (data (i32.const 102648) "a") (data (i32.const 102651) "a") (data (i32.const 102654) "a") (data (i32.const 102657) "a") (data (i32.const 102660) "a") (data (i32.const 102663) "a") (data (i32.const 102666) "a") (data (i32.const 102669) "a") (data (i32.const 102672) "a") (data (i32.const 102675) "a") (data (i32.const 102678) "a") (data (i32.const 102681) "a") (data (i32.const 102684) "a") (data (i32.const 102687) "a") (data (i32.const 102690) "a") (data (i32.const 102693) "a") (data (i32.const 102696) "a") (data (i32.const 102699) "a") (data (i32.const 102702) "a") (data (i32.const 102705) "a") (data (i32.const 102708) "a") (data (i32.const 102711) "a") (data (i32.const 102714) "a") (data (i32.const 102717) "a") (data (i32.const 102720) "a") (data (i32.const 102723) "a") (data (i32.const 102726) "a") (data (i32.const 102729) "a") (data (i32.const 102732) "a") (data (i32.const 102735) "a") (data (i32.const 102738) "a") (data (i32.const 102741) "a") (data (i32.const 102744) "a") (data (i32.const 102747) "a") (data (i32.const 102750) "a") (data (i32.const 102753) "a") (data (i32.const 102756) "a") (data (i32.const 102759) "a") (data (i32.const 102762) "a") (data (i32.const 102765) "a") (data (i32.const 102768) "a") (data (i32.const 102771) "a") (data (i32.const 102774) "a") (data (i32.const 102777) "a") (data (i32.const 102780) "a") (data (i32.const 102783) "a") (data (i32.const 102786) "a") (data (i32.const 102789) "a") (data (i32.const 102792) "a") (data (i32.const 102795) "a") (data (i32.const 102798) "a") (data (i32.const 102801) "a") (data (i32.const 102804) "a") (data (i32.const 102807) "a") (data (i32.const 102810) "a") (data (i32.const 102813) "a") (data (i32.const 102816) "a") (data (i32.const 102819) "a") (data (i32.const 102822) "a") (data (i32.const 102825) "a") (data (i32.const 102828) "a") (data (i32.const 102831) "a") (data (i32.const 102834) "a") (data (i32.const 102837) "a") (data (i32.const 102840) "a") (data (i32.const 102843) "a") (data (i32.const 102846) "a") (data (i32.const 102849) "a") (data (i32.const 102852) "a") (data (i32.const 102855) "a") (data (i32.const 102858) "a") (data (i32.const 102861) "a") (data (i32.const 102864) "a") (data (i32.const 102867) "a") (data (i32.const 102870) "a") (data (i32.const 102873) "a") (data (i32.const 102876) "a") (data (i32.const 102879) "a") (data (i32.const 102882) "a") (data (i32.const 102885) "a") (data (i32.const 102888) "a") (data (i32.const 102891) "a") (data (i32.const 102894) "a") (data (i32.const 102897) "a") (data (i32.const 102900) "a") (data (i32.const 102903) "a") (data (i32.const 102906) "a") (data (i32.const 102909) "a") (data (i32.const 102912) "a") (data (i32.const 102915) "a") (data (i32.const 102918) "a") (data (i32.const 102921) "a") (data (i32.const 102924) "a") (data (i32.const 102927) "a") (data (i32.const 102930) "a") (data (i32.const 102933) "a") (data (i32.const 102936) "a") (data (i32.const 102939) "a") (data (i32.const 102942) "a") (data (i32.const 102945) "a") (data (i32.const 102948) "a") (data (i32.const 102951) "a") (data (i32.const 102954) "a") (data (i32.const 102957) "a") (data (i32.const 102960) "a") (data (i32.const 102963) "a") (data (i32.const 102966) "a") (data (i32.const 102969) "a") (data (i32.const 102972) "a") (data (i32.const 102975) "a") (data (i32.const 102978) "a") (data (i32.const 102981) "a") (data (i32.const 102984) "a") (data (i32.const 102987) "a") (data (i32.const 102990) "a") (data (i32.const 102993) "a") (data (i32.const 102996) "a") (data (i32.const 102999) "a") (data (i32.const 103002) "a") (data (i32.const 103005) "a") (data (i32.const 103008) "a") (data (i32.const 103011) "a") (data (i32.const 103014) "a") (data (i32.const 103017) "a") (data (i32.const 103020) "a") (data (i32.const 103023) "a") (data (i32.const 103026) "a") (data (i32.const 103029) "a") (data (i32.const 103032) "a") (data (i32.const 103035) "a") (data (i32.const 103038) "a") (data (i32.const 103041) "a") (data (i32.const 103044) "a") (data (i32.const 103047) "a") (data (i32.const 103050) "a") (data (i32.const 103053) "a") (data (i32.const 103056) "a") (data (i32.const 103059) "a") (data (i32.const 103062) "a") (data (i32.const 103065) "a") (data (i32.const 103068) "a") (data (i32.const 103071) "a") (data (i32.const 103074) "a") (data (i32.const 103077) "a") (data (i32.const 103080) "a") (data (i32.const 103083) "a") (data (i32.const 103086) "a") (data (i32.const 103089) "a") (data (i32.const 103092) "a") (data (i32.const 103095) "a") (data (i32.const 103098) "a") (data (i32.const 103101) "a") (data (i32.const 103104) "a") (data (i32.const 103107) "a") (data (i32.const 103110) "a") (data (i32.const 103113) "a") (data (i32.const 103116) "a") (data (i32.const 103119) "a") (data (i32.const 103122) "a") (data (i32.const 103125) "a") (data (i32.const 103128) "a") (data (i32.const 103131) "a") (data (i32.const 103134) "a") (data (i32.const 103137) "a") (data (i32.const 103140) "a") (data (i32.const 103143) "a") (data (i32.const 103146) "a") (data (i32.const 103149) "a") (data (i32.const 103152) "a") (data (i32.const 103155) "a") (data (i32.const 103158) "a") (data (i32.const 103161) "a") (data (i32.const 103164) "a") (data (i32.const 103167) "a") (data (i32.const 103170) "a") (data (i32.const 103173) "a") (data (i32.const 103176) "a") (data (i32.const 103179) "a") (data (i32.const 103182) "a") (data (i32.const 103185) "a") (data (i32.const 103188) "a") (data (i32.const 103191) "a") (data (i32.const 103194) "a") (data (i32.const 103197) "a") (data (i32.const 103200) "a") (data (i32.const 103203) "a") (data (i32.const 103206) "a") (data (i32.const 103209) "a") (data (i32.const 103212) "a") (data (i32.const 103215) "a") (data (i32.const 103218) "a") (data (i32.const 103221) "a") (data (i32.const 103224) "a") (data (i32.const 103227) "a") (data (i32.const 103230) "a") (data (i32.const 103233) "a") (data (i32.const 103236) "a") (data (i32.const 103239) "a") (data (i32.const 103242) "a") (data (i32.const 103245) "a") (data (i32.const 103248) "a") (data (i32.const 103251) "a") (data (i32.const 103254) "a") (data (i32.const 103257) "a") (data (i32.const 103260) "a") (data (i32.const 103263) "a") (data (i32.const 103266) "a") (data (i32.const 103269) "a") (data (i32.const 103272) "a") (data (i32.const 103275) "a") (data (i32.const 103278) "a") (data (i32.const 103281) "a") (data (i32.const 103284) "a") (data (i32.const 103287) "a") (data (i32.const 103290) "a") (data (i32.const 103293) "a") (data (i32.const 103296) "a") (data (i32.const 103299) "a") (data (i32.const 103302) "a") (data (i32.const 103305) "a") (data (i32.const 103308) "a") (data (i32.const 103311) "a") (data (i32.const 103314) "a") (data (i32.const 103317) "a") (data (i32.const 103320) "a") (data (i32.const 103323) "a") (data (i32.const 103326) "a") (data (i32.const 103329) "a") (data (i32.const 103332) "a") (data (i32.const 103335) "a") (data (i32.const 103338) "a") (data (i32.const 103341) "a") (data (i32.const 103344) "a") (data (i32.const 103347) "a") (data (i32.const 103350) "a") (data (i32.const 103353) "a") (data (i32.const 103356) "a") (data (i32.const 103359) "a") (data (i32.const 103362) "a") (data (i32.const 103365) "a") (data (i32.const 103368) "a") (data (i32.const 103371) "a") (data (i32.const 103374) "a") (data (i32.const 103377) "a") (data (i32.const 103380) "a") (data (i32.const 103383) "a") (data (i32.const 103386) "a") (data (i32.const 103389) "a") (data (i32.const 103392) "a") (data (i32.const 103395) "a") (data (i32.const 103398) "a") (data (i32.const 103401) "a") (data (i32.const 103404) "a") (data (i32.const 103407) "a") (data (i32.const 103410) "a") (data (i32.const 103413) "a") (data (i32.const 103416) "a") (data (i32.const 103419) "a") (data (i32.const 103422) "a") (data (i32.const 103425) "a") (data (i32.const 103428) "a") (data (i32.const 103431) "a") (data (i32.const 103434) "a") (data (i32.const 103437) "a") (data (i32.const 103440) "a") (data (i32.const 103443) "a") (data (i32.const 103446) "a") (data (i32.const 103449) "a") (data (i32.const 103452) "a") (data (i32.const 103455) "a") (data (i32.const 103458) "a") (data (i32.const 103461) "a") (data (i32.const 103464) "a") (data (i32.const 103467) "a") (data (i32.const 103470) "a") (data (i32.const 103473) "a") (data (i32.const 103476) "a") (data (i32.const 103479) "a") (data (i32.const 103482) "a") (data (i32.const 103485) "a") (data (i32.const 103488) "a") (data (i32.const 103491) "a") (data (i32.const 103494) "a") (data (i32.const 103497) "a") (data (i32.const 103500) "a") (data (i32.const 103503) "a") (data (i32.const 103506) "a") (data (i32.const 103509) "a") (data (i32.const 103512) "a") (data (i32.const 103515) "a") (data (i32.const 103518) "a") (data (i32.const 103521) "a") (data (i32.const 103524) "a") (data (i32.const 103527) "a") (data (i32.const 103530) "a") (data (i32.const 103533) "a") (data (i32.const 103536) "a") (data (i32.const 103539) "a") (data (i32.const 103542) "a") (data (i32.const 103545) "a") (data (i32.const 103548) "a") (data (i32.const 103551) "a") (data (i32.const 103554) "a") (data (i32.const 103557) "a") (data (i32.const 103560) "a") (data (i32.const 103563) "a") (data (i32.const 103566) "a") (data (i32.const 103569) "a") (data (i32.const 103572) "a") (data (i32.const 103575) "a") (data (i32.const 103578) "a") (data (i32.const 103581) "a") (data (i32.const 103584) "a") (data (i32.const 103587) "a") (data (i32.const 103590) "a") (data (i32.const 103593) "a") (data (i32.const 103596) "a") (data (i32.const 103599) "a") (data (i32.const 103602) "a") (data (i32.const 103605) "a") (data (i32.const 103608) "a") (data (i32.const 103611) "a") (data (i32.const 103614) "a") (data (i32.const 103617) "a") (data (i32.const 103620) "a") (data (i32.const 103623) "a") (data (i32.const 103626) "a") (data (i32.const 103629) "a") (data (i32.const 103632) "a") (data (i32.const 103635) "a") (data (i32.const 103638) "a") (data (i32.const 103641) "a") (data (i32.const 103644) "a") (data (i32.const 103647) "a") (data (i32.const 103650) "a") (data (i32.const 103653) "a") (data (i32.const 103656) "a") (data (i32.const 103659) "a") (data (i32.const 103662) "a") (data (i32.const 103665) "a") (data (i32.const 103668) "a") (data (i32.const 103671) "a") (data (i32.const 103674) "a") (data (i32.const 103677) "a") (data (i32.const 103680) "a") (data (i32.const 103683) "a") (data (i32.const 103686) "a") (data (i32.const 103689) "a") (data (i32.const 103692) "a") (data (i32.const 103695) "a") (data (i32.const 103698) "a") (data (i32.const 103701) "a") (data (i32.const 103704) "a") (data (i32.const 103707) "a") (data (i32.const 103710) "a") (data (i32.const 103713) "a") (data (i32.const 103716) "a") (data (i32.const 103719) "a") (data (i32.const 103722) "a") (data (i32.const 103725) "a") (data (i32.const 103728) "a") (data (i32.const 103731) "a") (data (i32.const 103734) "a") (data (i32.const 103737) "a") (data (i32.const 103740) "a") (data (i32.const 103743) "a") (data (i32.const 103746) "a") (data (i32.const 103749) "a") (data (i32.const 103752) "a") (data (i32.const 103755) "a") (data (i32.const 103758) "a") (data (i32.const 103761) "a") (data (i32.const 103764) "a") (data (i32.const 103767) "a") (data (i32.const 103770) "a") (data (i32.const 103773) "a") (data (i32.const 103776) "a") (data (i32.const 103779) "a") (data (i32.const 103782) "a") (data (i32.const 103785) "a") (data (i32.const 103788) "a") (data (i32.const 103791) "a") (data (i32.const 103794) "a") (data (i32.const 103797) "a") (data (i32.const 103800) "a") (data (i32.const 103803) "a") (data (i32.const 103806) "a") (data (i32.const 103809) "a") (data (i32.const 103812) "a") (data (i32.const 103815) "a") (data (i32.const 103818) "a") (data (i32.const 103821) "a") (data (i32.const 103824) "a") (data (i32.const 103827) "a") (data (i32.const 103830) "a") (data (i32.const 103833) "a") (data (i32.const 103836) "a") (data (i32.const 103839) "a") (data (i32.const 103842) "a") (data (i32.const 103845) "a") (data (i32.const 103848) "a") (data (i32.const 103851) "a") (data (i32.const 103854) "a") (data (i32.const 103857) "a") (data (i32.const 103860) "a") (data (i32.const 103863) "a") (data (i32.const 103866) "a") (data (i32.const 103869) "a") (data (i32.const 103872) "a") (data (i32.const 103875) "a") (data (i32.const 103878) "a") (data (i32.const 103881) "a") (data (i32.const 103884) "a") (data (i32.const 103887) "a") (data (i32.const 103890) "a") (data (i32.const 103893) "a") (data (i32.const 103896) "a") (data (i32.const 103899) "a") (data (i32.const 103902) "a") (data (i32.const 103905) "a") (data (i32.const 103908) "a") (data (i32.const 103911) "a") (data (i32.const 103914) "a") (data (i32.const 103917) "a") (data (i32.const 103920) "a") (data (i32.const 103923) "a") (data (i32.const 103926) "a") (data (i32.const 103929) "a") (data (i32.const 103932) "a") (data (i32.const 103935) "a") (data (i32.const 103938) "a") (data (i32.const 103941) "a") (data (i32.const 103944) "a") (data (i32.const 103947) "a") (data (i32.const 103950) "a") (data (i32.const 103953) "a") (data (i32.const 103956) "a") (data (i32.const 103959) "a") (data (i32.const 103962) "a") (data (i32.const 103965) "a") (data (i32.const 103968) "a") (data (i32.const 103971) "a") (data (i32.const 103974) "a") (data (i32.const 103977) "a") (data (i32.const 103980) "a") (data (i32.const 103983) "a") (data (i32.const 103986) "a") (data (i32.const 103989) "a") (data (i32.const 103992) "a") (data (i32.const 103995) "a") (data (i32.const 103998) "a") (data (i32.const 104001) "a") (data (i32.const 104004) "a") (data (i32.const 104007) "a") (data (i32.const 104010) "a") (data (i32.const 104013) "a") (data (i32.const 104016) "a") (data (i32.const 104019) "a") (data (i32.const 104022) "a") (data (i32.const 104025) "a") (data (i32.const 104028) "a") (data (i32.const 104031) "a") (data (i32.const 104034) "a") (data (i32.const 104037) "a") (data (i32.const 104040) "a") (data (i32.const 104043) "a") (data (i32.const 104046) "a") (data (i32.const 104049) "a") (data (i32.const 104052) "a") (data (i32.const 104055) "a") (data (i32.const 104058) "a") (data (i32.const 104061) "a") (data (i32.const 104064) "a") (data (i32.const 104067) "a") (data (i32.const 104070) "a") (data (i32.const 104073) "a") (data (i32.const 104076) "a") (data (i32.const 104079) "a") (data (i32.const 104082) "a") (data (i32.const 104085) "a") (data (i32.const 104088) "a") (data (i32.const 104091) "a") (data (i32.const 104094) "a") (data (i32.const 104097) "a") (data (i32.const 104100) "a") (data (i32.const 104103) "a") (data (i32.const 104106) "a") (data (i32.const 104109) "a") (data (i32.const 104112) "a") (data (i32.const 104115) "a") (data (i32.const 104118) "a") (data (i32.const 104121) "a") (data (i32.const 104124) "a") (data (i32.const 104127) "a") (data (i32.const 104130) "a") (data (i32.const 104133) "a") (data (i32.const 104136) "a") (data (i32.const 104139) "a") (data (i32.const 104142) "a") (data (i32.const 104145) "a") (data (i32.const 104148) "a") (data (i32.const 104151) "a") (data (i32.const 104154) "a") (data (i32.const 104157) "a") (data (i32.const 104160) "a") (data (i32.const 104163) "a") (data (i32.const 104166) "a") (data (i32.const 104169) "a") (data (i32.const 104172) "a") (data (i32.const 104175) "a") (data (i32.const 104178) "a") (data (i32.const 104181) "a") (data (i32.const 104184) "a") (data (i32.const 104187) "a") (data (i32.const 104190) "a") (data (i32.const 104193) "a") (data (i32.const 104196) "a") (data (i32.const 104199) "a") (data (i32.const 104202) "a") (data (i32.const 104205) "a") (data (i32.const 104208) "a") (data (i32.const 104211) "a") (data (i32.const 104214) "a") (data (i32.const 104217) "a") (data (i32.const 104220) "a") (data (i32.const 104223) "a") (data (i32.const 104226) "a") (data (i32.const 104229) "a") (data (i32.const 104232) "a") (data (i32.const 104235) "a") (data (i32.const 104238) "a") (data (i32.const 104241) "a") (data (i32.const 104244) "a") (data (i32.const 104247) "a") (data (i32.const 104250) "a") (data (i32.const 104253) "a") (data (i32.const 104256) "a") (data (i32.const 104259) "a") (data (i32.const 104262) "a") (data (i32.const 104265) "a") (data (i32.const 104268) "a") (data (i32.const 104271) "a") (data (i32.const 104274) "a") (data (i32.const 104277) "a") (data (i32.const 104280) "a") (data (i32.const 104283) "a") (data (i32.const 104286) "a") (data (i32.const 104289) "a") (data (i32.const 104292) "a") (data (i32.const 104295) "a") (data (i32.const 104298) "a") (data (i32.const 104301) "a") (data (i32.const 104304) "a") (data (i32.const 104307) "a") (data (i32.const 104310) "a") (data (i32.const 104313) "a") (data (i32.const 104316) "a") (data (i32.const 104319) "a") (data (i32.const 104322) "a") (data (i32.const 104325) "a") (data (i32.const 104328) "a") (data (i32.const 104331) "a") (data (i32.const 104334) "a") (data (i32.const 104337) "a") (data (i32.const 104340) "a") (data (i32.const 104343) "a") (data (i32.const 104346) "a") (data (i32.const 104349) "a") (data (i32.const 104352) "a") (data (i32.const 104355) "a") (data (i32.const 104358) "a") (data (i32.const 104361) "a") (data (i32.const 104364) "a") (data (i32.const 104367) "a") (data (i32.const 104370) "a") (data (i32.const 104373) "a") (data (i32.const 104376) "a") (data (i32.const 104379) "a") (data (i32.const 104382) "a") (data (i32.const 104385) "a") (data (i32.const 104388) "a") (data (i32.const 104391) "a") (data (i32.const 104394) "a") (data (i32.const 104397) "a") (data (i32.const 104400) "a") (data (i32.const 104403) "a") (data (i32.const 104406) "a") (data (i32.const 104409) "a") (data (i32.const 104412) "a") (data (i32.const 104415) "a") (data (i32.const 104418) "a") (data (i32.const 104421) "a") (data (i32.const 104424) "a") (data (i32.const 104427) "a") (data (i32.const 104430) "a") (data (i32.const 104433) "a") (data (i32.const 104436) "a") (data (i32.const 104439) "a") (data (i32.const 104442) "a") (data (i32.const 104445) "a") (data (i32.const 104448) "a") (data (i32.const 104451) "a") (data (i32.const 104454) "a") (data (i32.const 104457) "a") (data (i32.const 104460) "a") (data (i32.const 104463) "a") (data (i32.const 104466) "a") (data (i32.const 104469) "a") (data (i32.const 104472) "a") (data (i32.const 104475) "a") (data (i32.const 104478) "a") (data (i32.const 104481) "a") (data (i32.const 104484) "a") (data (i32.const 104487) "a") (data (i32.const 104490) "a") (data (i32.const 104493) "a") (data (i32.const 104496) "a") (data (i32.const 104499) "a") (data (i32.const 104502) "a") (data (i32.const 104505) "a") (data (i32.const 104508) "a") (data (i32.const 104511) "a") (data (i32.const 104514) "a") (data (i32.const 104517) "a") (data (i32.const 104520) "a") (data (i32.const 104523) "a") (data (i32.const 104526) "a") (data (i32.const 104529) "a") (data (i32.const 104532) "a") (data (i32.const 104535) "a") (data (i32.const 104538) "a") (data (i32.const 104541) "a") (data (i32.const 104544) "a") (data (i32.const 104547) "a") (data (i32.const 104550) "a") (data (i32.const 104553) "a") (data (i32.const 104556) "a") (data (i32.const 104559) "a") (data (i32.const 104562) "a") (data (i32.const 104565) "a") (data (i32.const 104568) "a") (data (i32.const 104571) "a") (data (i32.const 104574) "a") (data (i32.const 104577) "a") (data (i32.const 104580) "a") (data (i32.const 104583) "a") (data (i32.const 104586) "a") (data (i32.const 104589) "a") (data (i32.const 104592) "a") (data (i32.const 104595) "a") (data (i32.const 104598) "a") (data (i32.const 104601) "a") (data (i32.const 104604) "a") (data (i32.const 104607) "a") (data (i32.const 104610) "a") (data (i32.const 104613) "a") (data (i32.const 104616) "a") (data (i32.const 104619) "a") (data (i32.const 104622) "a") (data (i32.const 104625) "a") (data (i32.const 104628) "a") (data (i32.const 104631) "a") (data (i32.const 104634) "a") (data (i32.const 104637) "a") (data (i32.const 104640) "a") (data (i32.const 104643) "a") (data (i32.const 104646) "a") (data (i32.const 104649) "a") (data (i32.const 104652) "a") (data (i32.const 104655) "a") (data (i32.const 104658) "a") (data (i32.const 104661) "a") (data (i32.const 104664) "a") (data (i32.const 104667) "a") (data (i32.const 104670) "a") (data (i32.const 104673) "a") (data (i32.const 104676) "a") (data (i32.const 104679) "a") (data (i32.const 104682) "a") (data (i32.const 104685) "a") (data (i32.const 104688) "a") (data (i32.const 104691) "a") (data (i32.const 104694) "a") (data (i32.const 104697) "a") (data (i32.const 104700) "a") (data (i32.const 104703) "a") (data (i32.const 104706) "a") (data (i32.const 104709) "a") (data (i32.const 104712) "a") (data (i32.const 104715) "a") (data (i32.const 104718) "a") (data (i32.const 104721) "a") (data (i32.const 104724) "a") (data (i32.const 104727) "a") (data (i32.const 104730) "a") (data (i32.const 104733) "a") (data (i32.const 104736) "a") (data (i32.const 104739) "a") (data (i32.const 104742) "a") (data (i32.const 104745) "a") (data (i32.const 104748) "a") (data (i32.const 104751) "a") (data (i32.const 104754) "a") (data (i32.const 104757) "a") (data (i32.const 104760) "a") (data (i32.const 104763) "a") (data (i32.const 104766) "a") (data (i32.const 104769) "a") (data (i32.const 104772) "a") (data (i32.const 104775) "a") (data (i32.const 104778) "a") (data (i32.const 104781) "a") (data (i32.const 104784) "a") (data (i32.const 104787) "a") (data (i32.const 104790) "a") (data (i32.const 104793) "a") (data (i32.const 104796) "a") (data (i32.const 104799) "a") (data (i32.const 104802) "a") (data (i32.const 104805) "a") (data (i32.const 104808) "a") (data (i32.const 104811) "a") (data (i32.const 104814) "a") (data (i32.const 104817) "a") (data (i32.const 104820) "a") (data (i32.const 104823) "a") (data (i32.const 104826) "a") (data (i32.const 104829) "a") (data (i32.const 104832) "a") (data (i32.const 104835) "a") (data (i32.const 104838) "a") (data (i32.const 104841) "a") (data (i32.const 104844) "a") (data (i32.const 104847) "a") (data (i32.const 104850) "a") (data (i32.const 104853) "a") (data (i32.const 104856) "a") (data (i32.const 104859) "a") (data (i32.const 104862) "a") (data (i32.const 104865) "a") (data (i32.const 104868) "a") (data (i32.const 104871) "a") (data (i32.const 104874) "a") (data (i32.const 104877) "a") (data (i32.const 104880) "a") (data (i32.const 104883) "a") (data (i32.const 104886) "a") (data (i32.const 104889) "a") (data (i32.const 104892) "a") (data (i32.const 104895) "a") (data (i32.const 104898) "a") (data (i32.const 104901) "a") (data (i32.const 104904) "a") (data (i32.const 104907) "a") (data (i32.const 104910) "a") (data (i32.const 104913) "a") (data (i32.const 104916) "a") (data (i32.const 104919) "a") (data (i32.const 104922) "a") (data (i32.const 104925) "a") (data (i32.const 104928) "a") (data (i32.const 104931) "a") (data (i32.const 104934) "a") (data (i32.const 104937) "a") (data (i32.const 104940) "a") (data (i32.const 104943) "a") (data (i32.const 104946) "a") (data (i32.const 104949) "a") (data (i32.const 104952) "a") (data (i32.const 104955) "a") (data (i32.const 104958) "a") (data (i32.const 104961) "a") (data (i32.const 104964) "a") (data (i32.const 104967) "a") (data (i32.const 104970) "a") (data (i32.const 104973) "a") (data (i32.const 104976) "a") (data (i32.const 104979) "a") (data (i32.const 104982) "a") (data (i32.const 104985) "a") (data (i32.const 104988) "a") (data (i32.const 104991) "a") (data (i32.const 104994) "a") (data (i32.const 104997) "a") (data (i32.const 105000) "a") (data (i32.const 105003) "a") (data (i32.const 105006) "a") (data (i32.const 105009) "a") (data (i32.const 105012) "a") (data (i32.const 105015) "a") (data (i32.const 105018) "a") (data (i32.const 105021) "a") (data (i32.const 105024) "a") (data (i32.const 105027) "a") (data (i32.const 105030) "a") (data (i32.const 105033) "a") (data (i32.const 105036) "a") (data (i32.const 105039) "a") (data (i32.const 105042) "a") (data (i32.const 105045) "a") (data (i32.const 105048) "a") (data (i32.const 105051) "a") (data (i32.const 105054) "a") (data (i32.const 105057) "a") (data (i32.const 105060) "a") (data (i32.const 105063) "a") (data (i32.const 105066) "a") (data (i32.const 105069) "a") (data (i32.const 105072) "a") (data (i32.const 105075) "a") (data (i32.const 105078) "a") (data (i32.const 105081) "a") (data (i32.const 105084) "a") (data (i32.const 105087) "a") (data (i32.const 105090) "a") (data (i32.const 105093) "a") (data (i32.const 105096) "a") (data (i32.const 105099) "a") (data (i32.const 105102) "a") (data (i32.const 105105) "a") (data (i32.const 105108) "a") (data (i32.const 105111) "a") (data (i32.const 105114) "a") (data (i32.const 105117) "a") (data (i32.const 105120) "a") (data (i32.const 105123) "a") (data (i32.const 105126) "a") (data (i32.const 105129) "a") (data (i32.const 105132) "a") (data (i32.const 105135) "a") (data (i32.const 105138) "a") (data (i32.const 105141) "a") (data (i32.const 105144) "a") (data (i32.const 105147) "a") (data (i32.const 105150) "a") (data (i32.const 105153) "a") (data (i32.const 105156) "a") (data (i32.const 105159) "a") (data (i32.const 105162) "a") (data (i32.const 105165) "a") (data (i32.const 105168) "a") (data (i32.const 105171) "a") (data (i32.const 105174) "a") (data (i32.const 105177) "a") (data (i32.const 105180) "a") (data (i32.const 105183) "a") (data (i32.const 105186) "a") (data (i32.const 105189) "a") (data (i32.const 105192) "a") (data (i32.const 105195) "a") (data (i32.const 105198) "a") (data (i32.const 105201) "a") (data (i32.const 105204) "a") (data (i32.const 105207) "a") (data (i32.const 105210) "a") (data (i32.const 105213) "a") (data (i32.const 105216) "a") (data (i32.const 105219) "a") (data (i32.const 105222) "a") (data (i32.const 105225) "a") (data (i32.const 105228) "a") (data (i32.const 105231) "a") (data (i32.const 105234) "a") (data (i32.const 105237) "a") (data (i32.const 105240) "a") (data (i32.const 105243) "a") (data (i32.const 105246) "a") (data (i32.const 105249) "a") (data (i32.const 105252) "a") (data (i32.const 105255) "a") (data (i32.const 105258) "a") (data (i32.const 105261) "a") (data (i32.const 105264) "a") (data (i32.const 105267) "a") (data (i32.const 105270) "a") (data (i32.const 105273) "a") (data (i32.const 105276) "a") (data (i32.const 105279) "a") (data (i32.const 105282) "a") (data (i32.const 105285) "a") (data (i32.const 105288) "a") (data (i32.const 105291) "a") (data (i32.const 105294) "a") (data (i32.const 105297) "a") (data (i32.const 105300) "a") (data (i32.const 105303) "a") (data (i32.const 105306) "a") (data (i32.const 105309) "a") (data (i32.const 105312) "a") (data (i32.const 105315) "a") (data (i32.const 105318) "a") (data (i32.const 105321) "a") (data (i32.const 105324) "a") (data (i32.const 105327) "a") (data (i32.const 105330) "a") (data (i32.const 105333) "a") (data (i32.const 105336) "a") (data (i32.const 105339) "a") (data (i32.const 105342) "a") (data (i32.const 105345) "a") (data (i32.const 105348) "a") (data (i32.const 105351) "a") (data (i32.const 105354) "a") (data (i32.const 105357) "a") (data (i32.const 105360) "a") (data (i32.const 105363) "a") (data (i32.const 105366) "a") (data (i32.const 105369) "a") (data (i32.const 105372) "a") (data (i32.const 105375) "a") (data (i32.const 105378) "a") (data (i32.const 105381) "a") (data (i32.const 105384) "a") (data (i32.const 105387) "a") (data (i32.const 105390) "a") (data (i32.const 105393) "a") (data (i32.const 105396) "a") (data (i32.const 105399) "a") (data (i32.const 105402) "a") (data (i32.const 105405) "a") (data (i32.const 105408) "a") (data (i32.const 105411) "a") (data (i32.const 105414) "a") (data (i32.const 105417) "a") (data (i32.const 105420) "a") (data (i32.const 105423) "a") (data (i32.const 105426) "a") (data (i32.const 105429) "a") (data (i32.const 105432) "a") (data (i32.const 105435) "a") (data (i32.const 105438) "a") (data (i32.const 105441) "a") (data (i32.const 105444) "a") (data (i32.const 105447) "a") (data (i32.const 105450) "a") (data (i32.const 105453) "a") (data (i32.const 105456) "a") (data (i32.const 105459) "a") (data (i32.const 105462) "a") (data (i32.const 105465) "a") (data (i32.const 105468) "a") (data (i32.const 105471) "a") (data (i32.const 105474) "a") (data (i32.const 105477) "a") (data (i32.const 105480) "a") (data (i32.const 105483) "a") (data (i32.const 105486) "a") (data (i32.const 105489) "a") (data (i32.const 105492) "a") (data (i32.const 105495) "a") (data (i32.const 105498) "a") (data (i32.const 105501) "a") (data (i32.const 105504) "a") (data (i32.const 105507) "a") (data (i32.const 105510) "a") (data (i32.const 105513) "a") (data (i32.const 105516) "a") (data (i32.const 105519) "a") (data (i32.const 105522) "a") (data (i32.const 105525) "a") (data (i32.const 105528) "a") (data (i32.const 105531) "a") (data (i32.const 105534) "a") (data (i32.const 105537) "a") (data (i32.const 105540) "a") (data (i32.const 105543) "a") (data (i32.const 105546) "a") (data (i32.const 105549) "a") (data (i32.const 105552) "a") (data (i32.const 105555) "a") (data (i32.const 105558) "a") (data (i32.const 105561) "a") (data (i32.const 105564) "a") (data (i32.const 105567) "a") (data (i32.const 105570) "a") (data (i32.const 105573) "a") (data (i32.const 105576) "a") (data (i32.const 105579) "a") (data (i32.const 105582) "a") (data (i32.const 105585) "a") (data (i32.const 105588) "a") (data (i32.const 105591) "a") (data (i32.const 105594) "a") (data (i32.const 105597) "a") (data (i32.const 105600) "a") (data (i32.const 105603) "a") (data (i32.const 105606) "a") (data (i32.const 105609) "a") (data (i32.const 105612) "a") (data (i32.const 105615) "a") (data (i32.const 105618) "a") (data (i32.const 105621) "a") (data (i32.const 105624) "a") (data (i32.const 105627) "a") (data (i32.const 105630) "a") (data (i32.const 105633) "a") (data (i32.const 105636) "a") (data (i32.const 105639) "a") (data (i32.const 105642) "a") (data (i32.const 105645) "a") (data (i32.const 105648) "a") (data (i32.const 105651) "a") (data (i32.const 105654) "a") (data (i32.const 105657) "a") (data (i32.const 105660) "a") (data (i32.const 105663) "a") (data (i32.const 105666) "a") (data (i32.const 105669) "a") (data (i32.const 105672) "a") (data (i32.const 105675) "a") (data (i32.const 105678) "a") (data (i32.const 105681) "a") (data (i32.const 105684) "a") (data (i32.const 105687) "a") (data (i32.const 105690) "a") (data (i32.const 105693) "a") (data (i32.const 105696) "a") (data (i32.const 105699) "a") (data (i32.const 105702) "a") (data (i32.const 105705) "a") (data (i32.const 105708) "a") (data (i32.const 105711) "a") (data (i32.const 105714) "a") (data (i32.const 105717) "a") (data (i32.const 105720) "a") (data (i32.const 105723) "a") (data (i32.const 105726) "a") (data (i32.const 105729) "a") (data (i32.const 105732) "a") (data (i32.const 105735) "a") (data (i32.const 105738) "a") (data (i32.const 105741) "a") (data (i32.const 105744) "a") (data (i32.const 105747) "a") (data (i32.const 105750) "a") (data (i32.const 105753) "a") (data (i32.const 105756) "a") (data (i32.const 105759) "a") (data (i32.const 105762) "a") (data (i32.const 105765) "a") (data (i32.const 105768) "a") (data (i32.const 105771) "a") (data (i32.const 105774) "a") (data (i32.const 105777) "a") (data (i32.const 105780) "a") (data (i32.const 105783) "a") (data (i32.const 105786) "a") (data (i32.const 105789) "a") (data (i32.const 105792) "a") (data (i32.const 105795) "a") (data (i32.const 105798) "a") (data (i32.const 105801) "a") (data (i32.const 105804) "a") (data (i32.const 105807) "a") (data (i32.const 105810) "a") (data (i32.const 105813) "a") (data (i32.const 105816) "a") (data (i32.const 105819) "a") (data (i32.const 105822) "a") (data (i32.const 105825) "a") (data (i32.const 105828) "a") (data (i32.const 105831) "a") (data (i32.const 105834) "a") (data (i32.const 105837) "a") (data (i32.const 105840) "a") (data (i32.const 105843) "a") (data (i32.const 105846) "a") (data (i32.const 105849) "a") (data (i32.const 105852) "a") (data (i32.const 105855) "a") (data (i32.const 105858) "a") (data (i32.const 105861) "a") (data (i32.const 105864) "a") (data (i32.const 105867) "a") (data (i32.const 105870) "a") (data (i32.const 105873) "a") (data (i32.const 105876) "a") (data (i32.const 105879) "a") (data (i32.const 105882) "a") (data (i32.const 105885) "a") (data (i32.const 105888) "a") (data (i32.const 105891) "a") (data (i32.const 105894) "a") (data (i32.const 105897) "a") (data (i32.const 105900) "a") (data (i32.const 105903) "a") (data (i32.const 105906) "a") (data (i32.const 105909) "a") (data (i32.const 105912) "a") (data (i32.const 105915) "a") (data (i32.const 105918) "a") (data (i32.const 105921) "a") (data (i32.const 105924) "a") (data (i32.const 105927) "a") (data (i32.const 105930) "a") (data (i32.const 105933) "a") (data (i32.const 105936) "a") (data (i32.const 105939) "a") (data (i32.const 105942) "a") (data (i32.const 105945) "a") (data (i32.const 105948) "a") (data (i32.const 105951) "a") (data (i32.const 105954) "a") (data (i32.const 105957) "a") (data (i32.const 105960) "a") (data (i32.const 105963) "a") (data (i32.const 105966) "a") (data (i32.const 105969) "a") (data (i32.const 105972) "a") (data (i32.const 105975) "a") (data (i32.const 105978) "a") (data (i32.const 105981) "a") (data (i32.const 105984) "a") (data (i32.const 105987) "a") (data (i32.const 105990) "a") (data (i32.const 105993) "a") (data (i32.const 105996) "a") (data (i32.const 105999) "a") (data (i32.const 106002) "a") (data (i32.const 106005) "a") (data (i32.const 106008) "a") (data (i32.const 106011) "a") (data (i32.const 106014) "a") (data (i32.const 106017) "a") (data (i32.const 106020) "a") (data (i32.const 106023) "a") (data (i32.const 106026) "a") (data (i32.const 106029) "a") (data (i32.const 106032) "a") (data (i32.const 106035) "a") (data (i32.const 106038) "a") (data (i32.const 106041) "a") (data (i32.const 106044) "a") (data (i32.const 106047) "a") (data (i32.const 106050) "a") (data (i32.const 106053) "a") (data (i32.const 106056) "a") (data (i32.const 106059) "a") (data (i32.const 106062) "a") (data (i32.const 106065) "a") (data (i32.const 106068) "a") (data (i32.const 106071) "a") (data (i32.const 106074) "a") (data (i32.const 106077) "a") (data (i32.const 106080) "a") (data (i32.const 106083) "a") (data (i32.const 106086) "a") (data (i32.const 106089) "a") (data (i32.const 106092) "a") (data (i32.const 106095) "a") (data (i32.const 106098) "a") (data (i32.const 106101) "a") (data (i32.const 106104) "a") (data (i32.const 106107) "a") (data (i32.const 106110) "a") (data (i32.const 106113) "a") (data (i32.const 106116) "a") (data (i32.const 106119) "a") (data (i32.const 106122) "a") (data (i32.const 106125) "a") (data (i32.const 106128) "a") (data (i32.const 106131) "a") (data (i32.const 106134) "a") (data (i32.const 106137) "a") (data (i32.const 106140) "a") (data (i32.const 106143) "a") (data (i32.const 106146) "a") (data (i32.const 106149) "a") (data (i32.const 106152) "a") (data (i32.const 106155) "a") (data (i32.const 106158) "a") (data (i32.const 106161) "a") (data (i32.const 106164) "a") (data (i32.const 106167) "a") (data (i32.const 106170) "a") (data (i32.const 106173) "a") (data (i32.const 106176) "a") (data (i32.const 106179) "a") (data (i32.const 106182) "a") (data (i32.const 106185) "a") (data (i32.const 106188) "a") (data (i32.const 106191) "a") (data (i32.const 106194) "a") (data (i32.const 106197) "a") (data (i32.const 106200) "a") (data (i32.const 106203) "a") (data (i32.const 106206) "a") (data (i32.const 106209) "a") (data (i32.const 106212) "a") (data (i32.const 106215) "a") (data (i32.const 106218) "a") (data (i32.const 106221) "a") (data (i32.const 106224) "a") (data (i32.const 106227) "a") (data (i32.const 106230) "a") (data (i32.const 106233) "a") (data (i32.const 106236) "a") (data (i32.const 106239) "a") (data (i32.const 106242) "a") (data (i32.const 106245) "a") (data (i32.const 106248) "a") (data (i32.const 106251) "a") (data (i32.const 106254) "a") (data (i32.const 106257) "a") (data (i32.const 106260) "a") (data (i32.const 106263) "a") (data (i32.const 106266) "a") (data (i32.const 106269) "a") (data (i32.const 106272) "a") (data (i32.const 106275) "a") (data (i32.const 106278) "a") (data (i32.const 106281) "a") (data (i32.const 106284) "a") (data (i32.const 106287) "a") (data (i32.const 106290) "a") (data (i32.const 106293) "a") (data (i32.const 106296) "a") (data (i32.const 106299) "a") (data (i32.const 106302) "a") (data (i32.const 106305) "a") (data (i32.const 106308) "a") (data (i32.const 106311) "a") (data (i32.const 106314) "a") (data (i32.const 106317) "a") (data (i32.const 106320) "a") (data (i32.const 106323) "a") (data (i32.const 106326) "a") (data (i32.const 106329) "a") (data (i32.const 106332) "a") (data (i32.const 106335) "a") (data (i32.const 106338) "a") (data (i32.const 106341) "a") (data (i32.const 106344) "a") (data (i32.const 106347) "a") (data (i32.const 106350) "a") (data (i32.const 106353) "a") (data (i32.const 106356) "a") (data (i32.const 106359) "a") (data (i32.const 106362) "a") (data (i32.const 106365) "a") (data (i32.const 106368) "a") (data (i32.const 106371) "a") (data (i32.const 106374) "a") (data (i32.const 106377) "a") (data (i32.const 106380) "a") (data (i32.const 106383) "a") (data (i32.const 106386) "a") (data (i32.const 106389) "a") (data (i32.const 106392) "a") (data (i32.const 106395) "a") (data (i32.const 106398) "a") (data (i32.const 106401) "a") (data (i32.const 106404) "a") (data (i32.const 106407) "a") (data (i32.const 106410) "a") (data (i32.const 106413) "a") (data (i32.const 106416) "a") (data (i32.const 106419) "a") (data (i32.const 106422) "a") (data (i32.const 106425) "a") (data (i32.const 106428) "a") (data (i32.const 106431) "a") (data (i32.const 106434) "a") (data (i32.const 106437) "a") (data (i32.const 106440) "a") (data (i32.const 106443) "a") (data (i32.const 106446) "a") (data (i32.const 106449) "a") (data (i32.const 106452) "a") (data (i32.const 106455) "a") (data (i32.const 106458) "a") (data (i32.const 106461) "a") (data (i32.const 106464) "a") (data (i32.const 106467) "a") (data (i32.const 106470) "a") (data (i32.const 106473) "a") (data (i32.const 106476) "a") (data (i32.const 106479) "a") (data (i32.const 106482) "a") (data (i32.const 106485) "a") (data (i32.const 106488) "a") (data (i32.const 106491) "a") (data (i32.const 106494) "a") (data (i32.const 106497) "a") (data (i32.const 106500) "a") (data (i32.const 106503) "a") (data (i32.const 106506) "a") (data (i32.const 106509) "a") (data (i32.const 106512) "a") (data (i32.const 106515) "a") (data (i32.const 106518) "a") (data (i32.const 106521) "a") (data (i32.const 106524) "a") (data (i32.const 106527) "a") (data (i32.const 106530) "a") (data (i32.const 106533) "a") (data (i32.const 106536) "a") (data (i32.const 106539) "a") (data (i32.const 106542) "a") (data (i32.const 106545) "a") (data (i32.const 106548) "a") (data (i32.const 106551) "a") (data (i32.const 106554) "a") (data (i32.const 106557) "a") (data (i32.const 106560) "a") (data (i32.const 106563) "a") (data (i32.const 106566) "a") (data (i32.const 106569) "a") (data (i32.const 106572) "a") (data (i32.const 106575) "a") (data (i32.const 106578) "a") (data (i32.const 106581) "a") (data (i32.const 106584) "a") (data (i32.const 106587) "a") (data (i32.const 106590) "a") (data (i32.const 106593) "a") (data (i32.const 106596) "a") (data (i32.const 106599) "a") (data (i32.const 106602) "a") (data (i32.const 106605) "a") (data (i32.const 106608) "a") (data (i32.const 106611) "a") (data (i32.const 106614) "a") (data (i32.const 106617) "a") (data (i32.const 106620) "a") (data (i32.const 106623) "a") (data (i32.const 106626) "a") (data (i32.const 106629) "a") (data (i32.const 106632) "a") (data (i32.const 106635) "a") (data (i32.const 106638) "a") (data (i32.const 106641) "a") (data (i32.const 106644) "a") (data (i32.const 106647) "a") (data (i32.const 106650) "a") (data (i32.const 106653) "a") (data (i32.const 106656) "a") (data (i32.const 106659) "a") (data (i32.const 106662) "a") (data (i32.const 106665) "a") (data (i32.const 106668) "a") (data (i32.const 106671) "a") (data (i32.const 106674) "a") (data (i32.const 106677) "a") (data (i32.const 106680) "a") (data (i32.const 106683) "a") (data (i32.const 106686) "a") (data (i32.const 106689) "a") (data (i32.const 106692) "a") (data (i32.const 106695) "a") (data (i32.const 106698) "a") (data (i32.const 106701) "a") (data (i32.const 106704) "a") (data (i32.const 106707) "a") (data (i32.const 106710) "a") (data (i32.const 106713) "a") (data (i32.const 106716) "a") (data (i32.const 106719) "a") (data (i32.const 106722) "a") (data (i32.const 106725) "a") (data (i32.const 106728) "a") (data (i32.const 106731) "a") (data (i32.const 106734) "a") (data (i32.const 106737) "a") (data (i32.const 106740) "a") (data (i32.const 106743) "a") (data (i32.const 106746) "a") (data (i32.const 106749) "a") (data (i32.const 106752) "a") (data (i32.const 106755) "a") (data (i32.const 106758) "a") (data (i32.const 106761) "a") (data (i32.const 106764) "a") (data (i32.const 106767) "a") (data (i32.const 106770) "a") (data (i32.const 106773) "a") (data (i32.const 106776) "a") (data (i32.const 106779) "a") (data (i32.const 106782) "a") (data (i32.const 106785) "a") (data (i32.const 106788) "a") (data (i32.const 106791) "a") (data (i32.const 106794) "a") (data (i32.const 106797) "a") (data (i32.const 106800) "a") (data (i32.const 106803) "a") (data (i32.const 106806) "a") (data (i32.const 106809) "a") (data (i32.const 106812) "a") (data (i32.const 106815) "a") (data (i32.const 106818) "a") (data (i32.const 106821) "a") (data (i32.const 106824) "a") (data (i32.const 106827) "a") (data (i32.const 106830) "a") (data (i32.const 106833) "a") (data (i32.const 106836) "a") (data (i32.const 106839) "a") (data (i32.const 106842) "a") (data (i32.const 106845) "a") (data (i32.const 106848) "a") (data (i32.const 106851) "a") (data (i32.const 106854) "a") (data (i32.const 106857) "a") (data (i32.const 106860) "a") (data (i32.const 106863) "a") (data (i32.const 106866) "a") (data (i32.const 106869) "a") (data (i32.const 106872) "a") (data (i32.const 106875) "a") (data (i32.const 106878) "a") (data (i32.const 106881) "a") (data (i32.const 106884) "a") (data (i32.const 106887) "a") (data (i32.const 106890) "a") (data (i32.const 106893) "a") (data (i32.const 106896) "a") (data (i32.const 106899) "a") (data (i32.const 106902) "a") (data (i32.const 106905) "a") (data (i32.const 106908) "a") (data (i32.const 106911) "a") (data (i32.const 106914) "a") (data (i32.const 106917) "a") (data (i32.const 106920) "a") (data (i32.const 106923) "a") (data (i32.const 106926) "a") (data (i32.const 106929) "a") (data (i32.const 106932) "a") (data (i32.const 106935) "a") (data (i32.const 106938) "a") (data (i32.const 106941) "a") (data (i32.const 106944) "a") (data (i32.const 106947) "a") (data (i32.const 106950) "a") (data (i32.const 106953) "a") (data (i32.const 106956) "a") (data (i32.const 106959) "a") (data (i32.const 106962) "a") (data (i32.const 106965) "a") (data (i32.const 106968) "a") (data (i32.const 106971) "a") (data (i32.const 106974) "a") (data (i32.const 106977) "a") (data (i32.const 106980) "a") (data (i32.const 106983) "a") (data (i32.const 106986) "a") (data (i32.const 106989) "a") (data (i32.const 106992) "a") (data (i32.const 106995) "a") (data (i32.const 106998) "a") (data (i32.const 107001) "a") (data (i32.const 107004) "a") (data (i32.const 107007) "a") (data (i32.const 107010) "a") (data (i32.const 107013) "a") (data (i32.const 107016) "a") (data (i32.const 107019) "a") (data (i32.const 107022) "a") (data (i32.const 107025) "a") (data (i32.const 107028) "a") (data (i32.const 107031) "a") (data (i32.const 107034) "a") (data (i32.const 107037) "a") (data (i32.const 107040) "a") (data (i32.const 107043) "a") (data (i32.const 107046) "a") (data (i32.const 107049) "a") (data (i32.const 107052) "a") (data (i32.const 107055) "a") (data (i32.const 107058) "a") (data (i32.const 107061) "a") (data (i32.const 107064) "a") (data (i32.const 107067) "a") (data (i32.const 107070) "a") (data (i32.const 107073) "a") (data (i32.const 107076) "a") (data (i32.const 107079) "a") (data (i32.const 107082) "a") (data (i32.const 107085) "a") (data (i32.const 107088) "a") (data (i32.const 107091) "a") (data (i32.const 107094) "a") (data (i32.const 107097) "a") (data (i32.const 107100) "a") (data (i32.const 107103) "a") (data (i32.const 107106) "a") (data (i32.const 107109) "a") (data (i32.const 107112) "a") (data (i32.const 107115) "a") (data (i32.const 107118) "a") (data (i32.const 107121) "a") (data (i32.const 107124) "a") (data (i32.const 107127) "a") (data (i32.const 107130) "a") (data (i32.const 107133) "a") (data (i32.const 107136) "a") (data (i32.const 107139) "a") (data (i32.const 107142) "a") (data (i32.const 107145) "a") (data (i32.const 107148) "a") (data (i32.const 107151) "a") (data (i32.const 107154) "a") (data (i32.const 107157) "a") (data (i32.const 107160) "a") (data (i32.const 107163) "a") (data (i32.const 107166) "a") (data (i32.const 107169) "a") (data (i32.const 107172) "a") (data (i32.const 107175) "a") (data (i32.const 107178) "a") (data (i32.const 107181) "a") (data (i32.const 107184) "a") (data (i32.const 107187) "a") (data (i32.const 107190) "a") (data (i32.const 107193) "a") (data (i32.const 107196) "a") (data (i32.const 107199) "a") (data (i32.const 107202) "a") (data (i32.const 107205) "a") (data (i32.const 107208) "a") (data (i32.const 107211) "a") (data (i32.const 107214) "a") (data (i32.const 107217) "a") (data (i32.const 107220) "a") (data (i32.const 107223) "a") (data (i32.const 107226) "a") (data (i32.const 107229) "a") (data (i32.const 107232) "a") (data (i32.const 107235) "a") (data (i32.const 107238) "a") (data (i32.const 107241) "a") (data (i32.const 107244) "a") (data (i32.const 107247) "a") (data (i32.const 107250) "a") (data (i32.const 107253) "a") (data (i32.const 107256) "a") (data (i32.const 107259) "a") (data (i32.const 107262) "a") (data (i32.const 107265) "a") (data (i32.const 107268) "a") (data (i32.const 107271) "a") (data (i32.const 107274) "a") (data (i32.const 107277) "a") (data (i32.const 107280) "a") (data (i32.const 107283) "a") (data (i32.const 107286) "a") (data (i32.const 107289) "a") (data (i32.const 107292) "a") (data (i32.const 107295) "a") (data (i32.const 107298) "a") (data (i32.const 107301) "a") (data (i32.const 107304) "a") (data (i32.const 107307) "a") (data (i32.const 107310) "a") (data (i32.const 107313) "a") (data (i32.const 107316) "a") (data (i32.const 107319) "a") (data (i32.const 107322) "a") (data (i32.const 107325) "a") (data (i32.const 107328) "a") (data (i32.const 107331) "a") (data (i32.const 107334) "a") (data (i32.const 107337) "a") (data (i32.const 107340) "a") (data (i32.const 107343) "a") (data (i32.const 107346) "a") (data (i32.const 107349) "a") (data (i32.const 107352) "a") (data (i32.const 107355) "a") (data (i32.const 107358) "a") (data (i32.const 107361) "a") (data (i32.const 107364) "a") (data (i32.const 107367) "a") (data (i32.const 107370) "a") (data (i32.const 107373) "a") (data (i32.const 107376) "a") (data (i32.const 107379) "a") (data (i32.const 107382) "a") (data (i32.const 107385) "a") (data (i32.const 107388) "a") (data (i32.const 107391) "a") (data (i32.const 107394) "a") (data (i32.const 107397) "a") (data (i32.const 107400) "a") (data (i32.const 107403) "a") (data (i32.const 107406) "a") (data (i32.const 107409) "a") (data (i32.const 107412) "a") (data (i32.const 107415) "a") (data (i32.const 107418) "a") (data (i32.const 107421) "a") (data (i32.const 107424) "a") (data (i32.const 107427) "a") (data (i32.const 107430) "a") (data (i32.const 107433) "a") (data (i32.const 107436) "a") (data (i32.const 107439) "a") (data (i32.const 107442) "a") (data (i32.const 107445) "a") (data (i32.const 107448) "a") (data (i32.const 107451) "a") (data (i32.const 107454) "a") (data (i32.const 107457) "a") (data (i32.const 107460) "a") (data (i32.const 107463) "a") (data (i32.const 107466) "a") (data (i32.const 107469) "a") (data (i32.const 107472) "a") (data (i32.const 107475) "a") (data (i32.const 107478) "a") (data (i32.const 107481) "a") (data (i32.const 107484) "a") (data (i32.const 107487) "a") (data (i32.const 107490) "a") (data (i32.const 107493) "a") (data (i32.const 107496) "a") (data (i32.const 107499) "a") (data (i32.const 107502) "a") (data (i32.const 107505) "a") (data (i32.const 107508) "a") (data (i32.const 107511) "a") (data (i32.const 107514) "a") (data (i32.const 107517) "a") (data (i32.const 107520) "a") (data (i32.const 107523) "a") (data (i32.const 107526) "a") (data (i32.const 107529) "a") (data (i32.const 107532) "a") (data (i32.const 107535) "a") (data (i32.const 107538) "a") (data (i32.const 107541) "a") (data (i32.const 107544) "a") (data (i32.const 107547) "a") (data (i32.const 107550) "a") (data (i32.const 107553) "a") (data (i32.const 107556) "a") (data (i32.const 107559) "a") (data (i32.const 107562) "a") (data (i32.const 107565) "a") (data (i32.const 107568) "a") (data (i32.const 107571) "a") (data (i32.const 107574) "a") (data (i32.const 107577) "a") (data (i32.const 107580) "a") (data (i32.const 107583) "a") (data (i32.const 107586) "a") (data (i32.const 107589) "a") (data (i32.const 107592) "a") (data (i32.const 107595) "a") (data (i32.const 107598) "a") (data (i32.const 107601) "a") (data (i32.const 107604) "a") (data (i32.const 107607) "a") (data (i32.const 107610) "a") (data (i32.const 107613) "a") (data (i32.const 107616) "a") (data (i32.const 107619) "a") (data (i32.const 107622) "a") (data (i32.const 107625) "a") (data (i32.const 107628) "a") (data (i32.const 107631) "a") (data (i32.const 107634) "a") (data (i32.const 107637) "a") (data (i32.const 107640) "a") (data (i32.const 107643) "a") (data (i32.const 107646) "a") (data (i32.const 107649) "a") (data (i32.const 107652) "a") (data (i32.const 107655) "a") (data (i32.const 107658) "a") (data (i32.const 107661) "a") (data (i32.const 107664) "a") (data (i32.const 107667) "a") (data (i32.const 107670) "a") (data (i32.const 107673) "a") (data (i32.const 107676) "a") (data (i32.const 107679) "a") (data (i32.const 107682) "a") (data (i32.const 107685) "a") (data (i32.const 107688) "a") (data (i32.const 107691) "a") (data (i32.const 107694) "a") (data (i32.const 107697) "a") (data (i32.const 107700) "a") (data (i32.const 107703) "a") (data (i32.const 107706) "a") (data (i32.const 107709) "a") (data (i32.const 107712) "a") (data (i32.const 107715) "a") (data (i32.const 107718) "a") (data (i32.const 107721) "a") (data (i32.const 107724) "a") (data (i32.const 107727) "a") (data (i32.const 107730) "a") (data (i32.const 107733) "a") (data (i32.const 107736) "a") (data (i32.const 107739) "a") (data (i32.const 107742) "a") (data (i32.const 107745) "a") (data (i32.const 107748) "a") (data (i32.const 107751) "a") (data (i32.const 107754) "a") (data (i32.const 107757) "a") (data (i32.const 107760) "a") (data (i32.const 107763) "a") (data (i32.const 107766) "a") (data (i32.const 107769) "a") (data (i32.const 107772) "a") (data (i32.const 107775) "a") (data (i32.const 107778) "a") (data (i32.const 107781) "a") (data (i32.const 107784) "a") (data (i32.const 107787) "a") (data (i32.const 107790) "a") (data (i32.const 107793) "a") (data (i32.const 107796) "a") (data (i32.const 107799) "a") (data (i32.const 107802) "a") (data (i32.const 107805) "a") (data (i32.const 107808) "a") (data (i32.const 107811) "a") (data (i32.const 107814) "a") (data (i32.const 107817) "a") (data (i32.const 107820) "a") (data (i32.const 107823) "a") (data (i32.const 107826) "a") (data (i32.const 107829) "a") (data (i32.const 107832) "a") (data (i32.const 107835) "a") (data (i32.const 107838) "a") (data (i32.const 107841) "a") (data (i32.const 107844) "a") (data (i32.const 107847) "a") (data (i32.const 107850) "a") (data (i32.const 107853) "a") (data (i32.const 107856) "a") (data (i32.const 107859) "a") (data (i32.const 107862) "a") (data (i32.const 107865) "a") (data (i32.const 107868) "a") (data (i32.const 107871) "a") (data (i32.const 107874) "a") (data (i32.const 107877) "a") (data (i32.const 107880) "a") (data (i32.const 107883) "a") (data (i32.const 107886) "a") (data (i32.const 107889) "a") (data (i32.const 107892) "a") (data (i32.const 107895) "a") (data (i32.const 107898) "a") (data (i32.const 107901) "a") (data (i32.const 107904) "a") (data (i32.const 107907) "a") (data (i32.const 107910) "a") (data (i32.const 107913) "a") (data (i32.const 107916) "a") (data (i32.const 107919) "a") (data (i32.const 107922) "a") (data (i32.const 107925) "a") (data (i32.const 107928) "a") (data (i32.const 107931) "a") (data (i32.const 107934) "a") (data (i32.const 107937) "a") (data (i32.const 107940) "a") (data (i32.const 107943) "a") (data (i32.const 107946) "a") (data (i32.const 107949) "a") (data (i32.const 107952) "a") (data (i32.const 107955) "a") (data (i32.const 107958) "a") (data (i32.const 107961) "a") (data (i32.const 107964) "a") (data (i32.const 107967) "a") (data (i32.const 107970) "a") (data (i32.const 107973) "a") (data (i32.const 107976) "a") (data (i32.const 107979) "a") (data (i32.const 107982) "a") (data (i32.const 107985) "a") (data (i32.const 107988) "a") (data (i32.const 107991) "a") (data (i32.const 107994) "a") (data (i32.const 107997) "a") (data (i32.const 108000) "a") (data (i32.const 108003) "a") (data (i32.const 108006) "a") (data (i32.const 108009) "a") (data (i32.const 108012) "a") (data (i32.const 108015) "a") (data (i32.const 108018) "a") (data (i32.const 108021) "a") (data (i32.const 108024) "a") (data (i32.const 108027) "a") (data (i32.const 108030) "a") (data (i32.const 108033) "a") (data (i32.const 108036) "a") (data (i32.const 108039) "a") (data (i32.const 108042) "a") (data (i32.const 108045) "a") (data (i32.const 108048) "a") (data (i32.const 108051) "a") (data (i32.const 108054) "a") (data (i32.const 108057) "a") (data (i32.const 108060) "a") (data (i32.const 108063) "a") (data (i32.const 108066) "a") (data (i32.const 108069) "a") (data (i32.const 108072) "a") (data (i32.const 108075) "a") (data (i32.const 108078) "a") (data (i32.const 108081) "a") (data (i32.const 108084) "a") (data (i32.const 108087) "a") (data (i32.const 108090) "a") (data (i32.const 108093) "a") (data (i32.const 108096) "a") (data (i32.const 108099) "a") (data (i32.const 108102) "a") (data (i32.const 108105) "a") (data (i32.const 108108) "a") (data (i32.const 108111) "a") (data (i32.const 108114) "a") (data (i32.const 108117) "a") (data (i32.const 108120) "a") (data (i32.const 108123) "a") (data (i32.const 108126) "a") (data (i32.const 108129) "a") (data (i32.const 108132) "a") (data (i32.const 108135) "a") (data (i32.const 108138) "a") (data (i32.const 108141) "a") (data (i32.const 108144) "a") (data (i32.const 108147) "a") (data (i32.const 108150) "a") (data (i32.const 108153) "a") (data (i32.const 108156) "a") (data (i32.const 108159) "a") (data (i32.const 108162) "a") (data (i32.const 108165) "a") (data (i32.const 108168) "a") (data (i32.const 108171) "a") (data (i32.const 108174) "a") (data (i32.const 108177) "a") (data (i32.const 108180) "a") (data (i32.const 108183) "a") (data (i32.const 108186) "a") (data (i32.const 108189) "a") (data (i32.const 108192) "a") (data (i32.const 108195) "a") (data (i32.const 108198) "a") (data (i32.const 108201) "a") (data (i32.const 108204) "a") (data (i32.const 108207) "a") (data (i32.const 108210) "a") (data (i32.const 108213) "a") (data (i32.const 108216) "a") (data (i32.const 108219) "a") (data (i32.const 108222) "a") (data (i32.const 108225) "a") (data (i32.const 108228) "a") (data (i32.const 108231) "a") (data (i32.const 108234) "a") (data (i32.const 108237) "a") (data (i32.const 108240) "a") (data (i32.const 108243) "a") (data (i32.const 108246) "a") (data (i32.const 108249) "a") (data (i32.const 108252) "a") (data (i32.const 108255) "a") (data (i32.const 108258) "a") (data (i32.const 108261) "a") (data (i32.const 108264) "a") (data (i32.const 108267) "a") (data (i32.const 108270) "a") (data (i32.const 108273) "a") (data (i32.const 108276) "a") (data (i32.const 108279) "a") (data (i32.const 108282) "a") (data (i32.const 108285) "a") (data (i32.const 108288) "a") (data (i32.const 108291) "a") (data (i32.const 108294) "a") (data (i32.const 108297) "a") (data (i32.const 108300) "a") (data (i32.const 108303) "a") (data (i32.const 108306) "a") (data (i32.const 108309) "a") (data (i32.const 108312) "a") (data (i32.const 108315) "a") (data (i32.const 108318) "a") (data (i32.const 108321) "a") (data (i32.const 108324) "a") (data (i32.const 108327) "a") (data (i32.const 108330) "a") (data (i32.const 108333) "a") (data (i32.const 108336) "a") (data (i32.const 108339) "a") (data (i32.const 108342) "a") (data (i32.const 108345) "a") (data (i32.const 108348) "a") (data (i32.const 108351) "a") (data (i32.const 108354) "a") (data (i32.const 108357) "a") (data (i32.const 108360) "a") (data (i32.const 108363) "a") (data (i32.const 108366) "a") (data (i32.const 108369) "a") (data (i32.const 108372) "a") (data (i32.const 108375) "a") (data (i32.const 108378) "a") (data (i32.const 108381) "a") (data (i32.const 108384) "a") (data (i32.const 108387) "a") (data (i32.const 108390) "a") (data (i32.const 108393) "a") (data (i32.const 108396) "a") (data (i32.const 108399) "a") (data (i32.const 108402) "a") (data (i32.const 108405) "a") (data (i32.const 108408) "a") (data (i32.const 108411) "a") (data (i32.const 108414) "a") (data (i32.const 108417) "a") (data (i32.const 108420) "a") (data (i32.const 108423) "a") (data (i32.const 108426) "a") (data (i32.const 108429) "a") (data (i32.const 108432) "a") (data (i32.const 108435) "a") (data (i32.const 108438) "a") (data (i32.const 108441) "a") (data (i32.const 108444) "a") (data (i32.const 108447) "a") (data (i32.const 108450) "a") (data (i32.const 108453) "a") (data (i32.const 108456) "a") (data (i32.const 108459) "a") (data (i32.const 108462) "a") (data (i32.const 108465) "a") (data (i32.const 108468) "a") (data (i32.const 108471) "a") (data (i32.const 108474) "a") (data (i32.const 108477) "a") (data (i32.const 108480) "a") (data (i32.const 108483) "a") (data (i32.const 108486) "a") (data (i32.const 108489) "a") (data (i32.const 108492) "a") (data (i32.const 108495) "a") (data (i32.const 108498) "a") (data (i32.const 108501) "a") (data (i32.const 108504) "a") (data (i32.const 108507) "a") (data (i32.const 108510) "a") (data (i32.const 108513) "a") (data (i32.const 108516) "a") (data (i32.const 108519) "a") (data (i32.const 108522) "a") (data (i32.const 108525) "a") (data (i32.const 108528) "a") (data (i32.const 108531) "a") (data (i32.const 108534) "a") (data (i32.const 108537) "a") (data (i32.const 108540) "a") (data (i32.const 108543) "a") (data (i32.const 108546) "a") (data (i32.const 108549) "a") (data (i32.const 108552) "a") (data (i32.const 108555) "a") (data (i32.const 108558) "a") (data (i32.const 108561) "a") (data (i32.const 108564) "a") (data (i32.const 108567) "a") (data (i32.const 108570) "a") (data (i32.const 108573) "a") (data (i32.const 108576) "a") (data (i32.const 108579) "a") (data (i32.const 108582) "a") (data (i32.const 108585) "a") (data (i32.const 108588) "a") (data (i32.const 108591) "a") (data (i32.const 108594) "a") (data (i32.const 108597) "a") (data (i32.const 108600) "a") (data (i32.const 108603) "a") (data (i32.const 108606) "a") (data (i32.const 108609) "a") (data (i32.const 108612) "a") (data (i32.const 108615) "a") (data (i32.const 108618) "a") (data (i32.const 108621) "a") (data (i32.const 108624) "a") (data (i32.const 108627) "a") (data (i32.const 108630) "a") (data (i32.const 108633) "a") (data (i32.const 108636) "a") (data (i32.const 108639) "a") (data (i32.const 108642) "a") (data (i32.const 108645) "a") (data (i32.const 108648) "a") (data (i32.const 108651) "a") (data (i32.const 108654) "a") (data (i32.const 108657) "a") (data (i32.const 108660) "a") (data (i32.const 108663) "a") (data (i32.const 108666) "a") (data (i32.const 108669) "a") (data (i32.const 108672) "a") (data (i32.const 108675) "a") (data (i32.const 108678) "a") (data (i32.const 108681) "a") (data (i32.const 108684) "a") (data (i32.const 108687) "a") (data (i32.const 108690) "a") (data (i32.const 108693) "a") (data (i32.const 108696) "a") (data (i32.const 108699) "a") (data (i32.const 108702) "a") (data (i32.const 108705) "a") (data (i32.const 108708) "a") (data (i32.const 108711) "a") (data (i32.const 108714) "a") (data (i32.const 108717) "a") (data (i32.const 108720) "a") (data (i32.const 108723) "a") (data (i32.const 108726) "a") (data (i32.const 108729) "a") (data (i32.const 108732) "a") (data (i32.const 108735) "a") (data (i32.const 108738) "a") (data (i32.const 108741) "a") (data (i32.const 108744) "a") (data (i32.const 108747) "a") (data (i32.const 108750) "a") (data (i32.const 108753) "a") (data (i32.const 108756) "a") (data (i32.const 108759) "a") (data (i32.const 108762) "a") (data (i32.const 108765) "a") (data (i32.const 108768) "a") (data (i32.const 108771) "a") (data (i32.const 108774) "a") (data (i32.const 108777) "a") (data (i32.const 108780) "a") (data (i32.const 108783) "a") (data (i32.const 108786) "a") (data (i32.const 108789) "a") (data (i32.const 108792) "a") (data (i32.const 108795) "a") (data (i32.const 108798) "a") (data (i32.const 108801) "a") (data (i32.const 108804) "a") (data (i32.const 108807) "a") (data (i32.const 108810) "a") (data (i32.const 108813) "a") (data (i32.const 108816) "a") (data (i32.const 108819) "a") (data (i32.const 108822) "a") (data (i32.const 108825) "a") (data (i32.const 108828) "a") (data (i32.const 108831) "a") (data (i32.const 108834) "a") (data (i32.const 108837) "a") (data (i32.const 108840) "a") (data (i32.const 108843) "a") (data (i32.const 108846) "a") (data (i32.const 108849) "a") (data (i32.const 108852) "a") (data (i32.const 108855) "a") (data (i32.const 108858) "a") (data (i32.const 108861) "a") (data (i32.const 108864) "a") (data (i32.const 108867) "a") (data (i32.const 108870) "a") (data (i32.const 108873) "a") (data (i32.const 108876) "a") (data (i32.const 108879) "a") (data (i32.const 108882) "a") (data (i32.const 108885) "a") (data (i32.const 108888) "a") (data (i32.const 108891) "a") (data (i32.const 108894) "a") (data (i32.const 108897) "a") (data (i32.const 108900) "a") (data (i32.const 108903) "a") (data (i32.const 108906) "a") (data (i32.const 108909) "a") (data (i32.const 108912) "a") (data (i32.const 108915) "a") (data (i32.const 108918) "a") (data (i32.const 108921) "a") (data (i32.const 108924) "a") (data (i32.const 108927) "a") (data (i32.const 108930) "a") (data (i32.const 108933) "a") (data (i32.const 108936) "a") (data (i32.const 108939) "a") (data (i32.const 108942) "a") (data (i32.const 108945) "a") (data (i32.const 108948) "a") (data (i32.const 108951) "a") (data (i32.const 108954) "a") (data (i32.const 108957) "a") (data (i32.const 108960) "a") (data (i32.const 108963) "a") (data (i32.const 108966) "a") (data (i32.const 108969) "a") (data (i32.const 108972) "a") (data (i32.const 108975) "a") (data (i32.const 108978) "a") (data (i32.const 108981) "a") (data (i32.const 108984) "a") (data (i32.const 108987) "a") (data (i32.const 108990) "a") (data (i32.const 108993) "a") (data (i32.const 108996) "a") (data (i32.const 108999) "a") (data (i32.const 109002) "a") (data (i32.const 109005) "a") (data (i32.const 109008) "a") (data (i32.const 109011) "a") (data (i32.const 109014) "a") (data (i32.const 109017) "a") (data (i32.const 109020) "a") (data (i32.const 109023) "a") (data (i32.const 109026) "a") (data (i32.const 109029) "a") (data (i32.const 109032) "a") (data (i32.const 109035) "a") (data (i32.const 109038) "a") (data (i32.const 109041) "a") (data (i32.const 109044) "a") (data (i32.const 109047) "a") (data (i32.const 109050) "a") (data (i32.const 109053) "a") (data (i32.const 109056) "a") (data (i32.const 109059) "a") (data (i32.const 109062) "a") (data (i32.const 109065) "a") (data (i32.const 109068) "a") (data (i32.const 109071) "a") (data (i32.const 109074) "a") (data (i32.const 109077) "a") (data (i32.const 109080) "a") (data (i32.const 109083) "a") (data (i32.const 109086) "a") (data (i32.const 109089) "a") (data (i32.const 109092) "a") (data (i32.const 109095) "a") (data (i32.const 109098) "a") (data (i32.const 109101) "a") (data (i32.const 109104) "a") (data (i32.const 109107) "a") (data (i32.const 109110) "a") (data (i32.const 109113) "a") (data (i32.const 109116) "a") (data (i32.const 109119) "a") (data (i32.const 109122) "a") (data (i32.const 109125) "a") (data (i32.const 109128) "a") (data (i32.const 109131) "a") (data (i32.const 109134) "a") (data (i32.const 109137) "a") (data (i32.const 109140) "a") (data (i32.const 109143) "a") (data (i32.const 109146) "a") (data (i32.const 109149) "a") (data (i32.const 109152) "a") (data (i32.const 109155) "a") (data (i32.const 109158) "a") (data (i32.const 109161) "a") (data (i32.const 109164) "a") (data (i32.const 109167) "a") (data (i32.const 109170) "a") (data (i32.const 109173) "a") (data (i32.const 109176) "a") (data (i32.const 109179) "a") (data (i32.const 109182) "a") (data (i32.const 109185) "a") (data (i32.const 109188) "a") (data (i32.const 109191) "a") (data (i32.const 109194) "a") (data (i32.const 109197) "a") (data (i32.const 109200) "a") (data (i32.const 109203) "a") (data (i32.const 109206) "a") (data (i32.const 109209) "a") (data (i32.const 109212) "a") (data (i32.const 109215) "a") (data (i32.const 109218) "a") (data (i32.const 109221) "a") (data (i32.const 109224) "a") (data (i32.const 109227) "a") (data (i32.const 109230) "a") (data (i32.const 109233) "a") (data (i32.const 109236) "a") (data (i32.const 109239) "a") (data (i32.const 109242) "a") (data (i32.const 109245) "a") (data (i32.const 109248) "a") (data (i32.const 109251) "a") (data (i32.const 109254) "a") (data (i32.const 109257) "a") (data (i32.const 109260) "a") (data (i32.const 109263) "a") (data (i32.const 109266) "a") (data (i32.const 109269) "a") (data (i32.const 109272) "a") (data (i32.const 109275) "a") (data (i32.const 109278) "a") (data (i32.const 109281) "a") (data (i32.const 109284) "a") (data (i32.const 109287) "a") (data (i32.const 109290) "a") (data (i32.const 109293) "a") (data (i32.const 109296) "a") (data (i32.const 109299) "a") (data (i32.const 109302) "a") (data (i32.const 109305) "a") (data (i32.const 109308) "a") (data (i32.const 109311) "a") (data (i32.const 109314) "a") (data (i32.const 109317) "a") (data (i32.const 109320) "a") (data (i32.const 109323) "a") (data (i32.const 109326) "a") (data (i32.const 109329) "a") (data (i32.const 109332) "a") (data (i32.const 109335) "a") (data (i32.const 109338) "a") (data (i32.const 109341) "a") (data (i32.const 109344) "a") (data (i32.const 109347) "a") (data (i32.const 109350) "a") (data (i32.const 109353) "a") (data (i32.const 109356) "a") (data (i32.const 109359) "a") (data (i32.const 109362) "a") (data (i32.const 109365) "a") (data (i32.const 109368) "a") (data (i32.const 109371) "a") (data (i32.const 109374) "a") (data (i32.const 109377) "a") (data (i32.const 109380) "a") (data (i32.const 109383) "a") (data (i32.const 109386) "a") (data (i32.const 109389) "a") (data (i32.const 109392) "a") (data (i32.const 109395) "a") (data (i32.const 109398) "a") (data (i32.const 109401) "a") (data (i32.const 109404) "a") (data (i32.const 109407) "a") (data (i32.const 109410) "a") (data (i32.const 109413) "a") (data (i32.const 109416) "a") (data (i32.const 109419) "a") (data (i32.const 109422) "a") (data (i32.const 109425) "a") (data (i32.const 109428) "a") (data (i32.const 109431) "a") (data (i32.const 109434) "a") (data (i32.const 109437) "a") (data (i32.const 109440) "a") (data (i32.const 109443) "a") (data (i32.const 109446) "a") (data (i32.const 109449) "a") (data (i32.const 109452) "a") (data (i32.const 109455) "a") (data (i32.const 109458) "a") (data (i32.const 109461) "a") (data (i32.const 109464) "a") (data (i32.const 109467) "a") (data (i32.const 109470) "a") (data (i32.const 109473) "a") (data (i32.const 109476) "a") (data (i32.const 109479) "a") (data (i32.const 109482) "a") (data (i32.const 109485) "a") (data (i32.const 109488) "a") (data (i32.const 109491) "a") (data (i32.const 109494) "a") (data (i32.const 109497) "a") (data (i32.const 109500) "a") (data (i32.const 109503) "a") (data (i32.const 109506) "a") (data (i32.const 109509) "a") (data (i32.const 109512) "a") (data (i32.const 109515) "a") (data (i32.const 109518) "a") (data (i32.const 109521) "a") (data (i32.const 109524) "a") (data (i32.const 109527) "a") (data (i32.const 109530) "a") (data (i32.const 109533) "a") (data (i32.const 109536) "a") (data (i32.const 109539) "a") (data (i32.const 109542) "a") (data (i32.const 109545) "a") (data (i32.const 109548) "a") (data (i32.const 109551) "a") (data (i32.const 109554) "a") (data (i32.const 109557) "a") (data (i32.const 109560) "a") (data (i32.const 109563) "a") (data (i32.const 109566) "a") (data (i32.const 109569) "a") (data (i32.const 109572) "a") (data (i32.const 109575) "a") (data (i32.const 109578) "a") (data (i32.const 109581) "a") (data (i32.const 109584) "a") (data (i32.const 109587) "a") (data (i32.const 109590) "a") (data (i32.const 109593) "a") (data (i32.const 109596) "a") (data (i32.const 109599) "a") (data (i32.const 109602) "a") (data (i32.const 109605) "a") (data (i32.const 109608) "a") (data (i32.const 109611) "a") (data (i32.const 109614) "a") (data (i32.const 109617) "a") (data (i32.const 109620) "a") (data (i32.const 109623) "a") (data (i32.const 109626) "a") (data (i32.const 109629) "a") (data (i32.const 109632) "a") (data (i32.const 109635) "a") (data (i32.const 109638) "a") (data (i32.const 109641) "a") (data (i32.const 109644) "a") (data (i32.const 109647) "a") (data (i32.const 109650) "a") (data (i32.const 109653) "a") (data (i32.const 109656) "a") (data (i32.const 109659) "a") (data (i32.const 109662) "a") (data (i32.const 109665) "a") (data (i32.const 109668) "a") (data (i32.const 109671) "a") (data (i32.const 109674) "a") (data (i32.const 109677) "a") (data (i32.const 109680) "a") (data (i32.const 109683) "a") (data (i32.const 109686) "a") (data (i32.const 109689) "a") (data (i32.const 109692) "a") (data (i32.const 109695) "a") (data (i32.const 109698) "a") (data (i32.const 109701) "a") (data (i32.const 109704) "a") (data (i32.const 109707) "a") (data (i32.const 109710) "a") (data (i32.const 109713) "a") (data (i32.const 109716) "a") (data (i32.const 109719) "a") (data (i32.const 109722) "a") (data (i32.const 109725) "a") (data (i32.const 109728) "a") (data (i32.const 109731) "a") (data (i32.const 109734) "a") (data (i32.const 109737) "a") (data (i32.const 109740) "a") (data (i32.const 109743) "a") (data (i32.const 109746) "a") (data (i32.const 109749) "a") (data (i32.const 109752) "a") (data (i32.const 109755) "a") (data (i32.const 109758) "a") (data (i32.const 109761) "a") (data (i32.const 109764) "a") (data (i32.const 109767) "a") (data (i32.const 109770) "a") (data (i32.const 109773) "a") (data (i32.const 109776) "a") (data (i32.const 109779) "a") (data (i32.const 109782) "a") (data (i32.const 109785) "a") (data (i32.const 109788) "a") (data (i32.const 109791) "a") (data (i32.const 109794) "a") (data (i32.const 109797) "a") (data (i32.const 109800) "a") (data (i32.const 109803) "a") (data (i32.const 109806) "a") (data (i32.const 109809) "a") (data (i32.const 109812) "a") (data (i32.const 109815) "a") (data (i32.const 109818) "a") (data (i32.const 109821) "a") (data (i32.const 109824) "a") (data (i32.const 109827) "a") (data (i32.const 109830) "a") (data (i32.const 109833) "a") (data (i32.const 109836) "a") (data (i32.const 109839) "a") (data (i32.const 109842) "a") (data (i32.const 109845) "a") (data (i32.const 109848) "a") (data (i32.const 109851) "a") (data (i32.const 109854) "a") (data (i32.const 109857) "a") (data (i32.const 109860) "a") (data (i32.const 109863) "a") (data (i32.const 109866) "a") (data (i32.const 109869) "a") (data (i32.const 109872) "a") (data (i32.const 109875) "a") (data (i32.const 109878) "a") (data (i32.const 109881) "a") (data (i32.const 109884) "a") (data (i32.const 109887) "a") (data (i32.const 109890) "a") (data (i32.const 109893) "a") (data (i32.const 109896) "a") (data (i32.const 109899) "a") (data (i32.const 109902) "a") (data (i32.const 109905) "a") (data (i32.const 109908) "a") (data (i32.const 109911) "a") (data (i32.const 109914) "a") (data (i32.const 109917) "a") (data (i32.const 109920) "a") (data (i32.const 109923) "a") (data (i32.const 109926) "a") (data (i32.const 109929) "a") (data (i32.const 109932) "a") (data (i32.const 109935) "a") (data (i32.const 109938) "a") (data (i32.const 109941) "a") (data (i32.const 109944) "a") (data (i32.const 109947) "a") (data (i32.const 109950) "a") (data (i32.const 109953) "a") (data (i32.const 109956) "a") (data (i32.const 109959) "a") (data (i32.const 109962) "a") (data (i32.const 109965) "a") (data (i32.const 109968) "a") (data (i32.const 109971) "a") (data (i32.const 109974) "a") (data (i32.const 109977) "a") (data (i32.const 109980) "a") (data (i32.const 109983) "a") (data (i32.const 109986) "a") (data (i32.const 109989) "a") (data (i32.const 109992) "a") (data (i32.const 109995) "a") (data (i32.const 109998) "a") (data (i32.const 110001) "a") (data (i32.const 110004) "a") (data (i32.const 110007) "a") (data (i32.const 110010) "a") (data (i32.const 110013) "a") (data (i32.const 110016) "a") (data (i32.const 110019) "a") (data (i32.const 110022) "a") (data (i32.const 110025) "a") (data (i32.const 110028) "a") (data (i32.const 110031) "a") (data (i32.const 110034) "a") (data (i32.const 110037) "a") (data (i32.const 110040) "a") (data (i32.const 110043) "a") (data (i32.const 110046) "a") (data (i32.const 110049) "a") (data (i32.const 110052) "a") (data (i32.const 110055) "a") (data (i32.const 110058) "a") (data (i32.const 110061) "a") (data (i32.const 110064) "a") (data (i32.const 110067) "a") (data (i32.const 110070) "a") (data (i32.const 110073) "a") (data (i32.const 110076) "a") (data (i32.const 110079) "a") (data (i32.const 110082) "a") (data (i32.const 110085) "a") (data (i32.const 110088) "a") (data (i32.const 110091) "a") (data (i32.const 110094) "a") (data (i32.const 110097) "a") (data (i32.const 110100) "a") (data (i32.const 110103) "a") (data (i32.const 110106) "a") (data (i32.const 110109) "a") (data (i32.const 110112) "a") (data (i32.const 110115) "a") (data (i32.const 110118) "a") (data (i32.const 110121) "a") (data (i32.const 110124) "a") (data (i32.const 110127) "a") (data (i32.const 110130) "a") (data (i32.const 110133) "a") (data (i32.const 110136) "a") (data (i32.const 110139) "a") (data (i32.const 110142) "a") (data (i32.const 110145) "a") (data (i32.const 110148) "a") (data (i32.const 110151) "a") (data (i32.const 110154) "a") (data (i32.const 110157) "a") (data (i32.const 110160) "a") (data (i32.const 110163) "a") (data (i32.const 110166) "a") (data (i32.const 110169) "a") (data (i32.const 110172) "a") (data (i32.const 110175) "a") (data (i32.const 110178) "a") (data (i32.const 110181) "a") (data (i32.const 110184) "a") (data (i32.const 110187) "a") (data (i32.const 110190) "a") (data (i32.const 110193) "a") (data (i32.const 110196) "a") (data (i32.const 110199) "a") (data (i32.const 110202) "a") (data (i32.const 110205) "a") (data (i32.const 110208) "a") (data (i32.const 110211) "a") (data (i32.const 110214) "a") (data (i32.const 110217) "a") (data (i32.const 110220) "a") (data (i32.const 110223) "a") (data (i32.const 110226) "a") (data (i32.const 110229) "a") (data (i32.const 110232) "a") (data (i32.const 110235) "a") (data (i32.const 110238) "a") (data (i32.const 110241) "a") (data (i32.const 110244) "a") (data (i32.const 110247) "a") (data (i32.const 110250) "a") (data (i32.const 110253) "a") (data (i32.const 110256) "a") (data (i32.const 110259) "a") (data (i32.const 110262) "a") (data (i32.const 110265) "a") (data (i32.const 110268) "a") (data (i32.const 110271) "a") (data (i32.const 110274) "a") (data (i32.const 110277) "a") (data (i32.const 110280) "a") (data (i32.const 110283) "a") (data (i32.const 110286) "a") (data (i32.const 110289) "a") (data (i32.const 110292) "a") (data (i32.const 110295) "a") (data (i32.const 110298) "a") (data (i32.const 110301) "a") (data (i32.const 110304) "a") (data (i32.const 110307) "a") (data (i32.const 110310) "a") (data (i32.const 110313) "a") (data (i32.const 110316) "a") (data (i32.const 110319) "a") (data (i32.const 110322) "a") (data (i32.const 110325) "a") (data (i32.const 110328) "a") (data (i32.const 110331) "a") (data (i32.const 110334) "a") (data (i32.const 110337) "a") (data (i32.const 110340) "a") (data (i32.const 110343) "a") (data (i32.const 110346) "a") (data (i32.const 110349) "a") (data (i32.const 110352) "a") (data (i32.const 110355) "a") (data (i32.const 110358) "a") (data (i32.const 110361) "a") (data (i32.const 110364) "a") (data (i32.const 110367) "a") (data (i32.const 110370) "a") (data (i32.const 110373) "a") (data (i32.const 110376) "a") (data (i32.const 110379) "a") (data (i32.const 110382) "a") (data (i32.const 110385) "a") (data (i32.const 110388) "a") (data (i32.const 110391) "a") (data (i32.const 110394) "a") (data (i32.const 110397) "a") (data (i32.const 110400) "a") (data (i32.const 110403) "a") (data (i32.const 110406) "a") (data (i32.const 110409) "a") (data (i32.const 110412) "a") (data (i32.const 110415) "a") (data (i32.const 110418) "a") (data (i32.const 110421) "a") (data (i32.const 110424) "a") (data (i32.const 110427) "a") (data (i32.const 110430) "a") (data (i32.const 110433) "a") (data (i32.const 110436) "a") (data (i32.const 110439) "a") (data (i32.const 110442) "a") (data (i32.const 110445) "a") (data (i32.const 110448) "a") (data (i32.const 110451) "a") (data (i32.const 110454) "a") (data (i32.const 110457) "a") (data (i32.const 110460) "a") (data (i32.const 110463) "a") (data (i32.const 110466) "a") (data (i32.const 110469) "a") (data (i32.const 110472) "a") (data (i32.const 110475) "a") (data (i32.const 110478) "a") (data (i32.const 110481) "a") (data (i32.const 110484) "a") (data (i32.const 110487) "a") (data (i32.const 110490) "a") (data (i32.const 110493) "a") (data (i32.const 110496) "a") (data (i32.const 110499) "a") (data (i32.const 110502) "a") (data (i32.const 110505) "a") (data (i32.const 110508) "a") (data (i32.const 110511) "a") (data (i32.const 110514) "a") (data (i32.const 110517) "a") (data (i32.const 110520) "a") (data (i32.const 110523) "a") (data (i32.const 110526) "a") (data (i32.const 110529) "a") (data (i32.const 110532) "a") (data (i32.const 110535) "a") (data (i32.const 110538) "a") (data (i32.const 110541) "a") (data (i32.const 110544) "a") (data (i32.const 110547) "a") (data (i32.const 110550) "a") (data (i32.const 110553) "a") (data (i32.const 110556) "a") (data (i32.const 110559) "a") (data (i32.const 110562) "a") (data (i32.const 110565) "a") (data (i32.const 110568) "a") (data (i32.const 110571) "a") (data (i32.const 110574) "a") (data (i32.const 110577) "a") (data (i32.const 110580) "a") (data (i32.const 110583) "a") (data (i32.const 110586) "a") (data (i32.const 110589) "a") (data (i32.const 110592) "a") (data (i32.const 110595) "a") (data (i32.const 110598) "a") (data (i32.const 110601) "a") (data (i32.const 110604) "a") (data (i32.const 110607) "a") (data (i32.const 110610) "a") (data (i32.const 110613) "a") (data (i32.const 110616) "a") (data (i32.const 110619) "a") (data (i32.const 110622) "a") (data (i32.const 110625) "a") (data (i32.const 110628) "a") (data (i32.const 110631) "a") (data (i32.const 110634) "a") (data (i32.const 110637) "a") (data (i32.const 110640) "a") (data (i32.const 110643) "a") (data (i32.const 110646) "a") (data (i32.const 110649) "a") (data (i32.const 110652) "a") (data (i32.const 110655) "a") (data (i32.const 110658) "a") (data (i32.const 110661) "a") (data (i32.const 110664) "a") (data (i32.const 110667) "a") (data (i32.const 110670) "a") (data (i32.const 110673) "a") (data (i32.const 110676) "a") (data (i32.const 110679) "a") (data (i32.const 110682) "a") (data (i32.const 110685) "a") (data (i32.const 110688) "a") (data (i32.const 110691) "a") (data (i32.const 110694) "a") (data (i32.const 110697) "a") (data (i32.const 110700) "a") (data (i32.const 110703) "a") (data (i32.const 110706) "a") (data (i32.const 110709) "a") (data (i32.const 110712) "a") (data (i32.const 110715) "a") (data (i32.const 110718) "a") (data (i32.const 110721) "a") (data (i32.const 110724) "a") (data (i32.const 110727) "a") (data (i32.const 110730) "a") (data (i32.const 110733) "a") (data (i32.const 110736) "a") (data (i32.const 110739) "a") (data (i32.const 110742) "a") (data (i32.const 110745) "a") (data (i32.const 110748) "a") (data (i32.const 110751) "a") (data (i32.const 110754) "a") (data (i32.const 110757) "a") (data (i32.const 110760) "a") (data (i32.const 110763) "a") (data (i32.const 110766) "a") (data (i32.const 110769) "a") (data (i32.const 110772) "a") (data (i32.const 110775) "a") (data (i32.const 110778) "a") (data (i32.const 110781) "a") (data (i32.const 110784) "a") (data (i32.const 110787) "a") (data (i32.const 110790) "a") (data (i32.const 110793) "a") (data (i32.const 110796) "a") (data (i32.const 110799) "a") (data (i32.const 110802) "a") (data (i32.const 110805) "a") (data (i32.const 110808) "a") (data (i32.const 110811) "a") (data (i32.const 110814) "a") (data (i32.const 110817) "a") (data (i32.const 110820) "a") (data (i32.const 110823) "a") (data (i32.const 110826) "a") (data (i32.const 110829) "a") (data (i32.const 110832) "a") (data (i32.const 110835) "a") (data (i32.const 110838) "a") (data (i32.const 110841) "a") (data (i32.const 110844) "a") (data (i32.const 110847) "a") (data (i32.const 110850) "a") (data (i32.const 110853) "a") (data (i32.const 110856) "a") (data (i32.const 110859) "a") (data (i32.const 110862) "a") (data (i32.const 110865) "a") (data (i32.const 110868) "a") (data (i32.const 110871) "a") (data (i32.const 110874) "a") (data (i32.const 110877) "a") (data (i32.const 110880) "a") (data (i32.const 110883) "a") (data (i32.const 110886) "a") (data (i32.const 110889) "a") (data (i32.const 110892) "a") (data (i32.const 110895) "a") (data (i32.const 110898) "a") (data (i32.const 110901) "a") (data (i32.const 110904) "a") (data (i32.const 110907) "a") (data (i32.const 110910) "a") (data (i32.const 110913) "a") (data (i32.const 110916) "a") (data (i32.const 110919) "a") (data (i32.const 110922) "a") (data (i32.const 110925) "a") (data (i32.const 110928) "a") (data (i32.const 110931) "a") (data (i32.const 110934) "a") (data (i32.const 110937) "a") (data (i32.const 110940) "a") (data (i32.const 110943) "a") (data (i32.const 110946) "a") (data (i32.const 110949) "a") (data (i32.const 110952) "a") (data (i32.const 110955) "a") (data (i32.const 110958) "a") (data (i32.const 110961) "a") (data (i32.const 110964) "a") (data (i32.const 110967) "a") (data (i32.const 110970) "a") (data (i32.const 110973) "a") (data (i32.const 110976) "a") (data (i32.const 110979) "a") (data (i32.const 110982) "a") (data (i32.const 110985) "a") (data (i32.const 110988) "a") (data (i32.const 110991) "a") (data (i32.const 110994) "a") (data (i32.const 110997) "a") (data (i32.const 111000) "a") (data (i32.const 111003) "a") (data (i32.const 111006) "a") (data (i32.const 111009) "a") (data (i32.const 111012) "a") (data (i32.const 111015) "a") (data (i32.const 111018) "a") (data (i32.const 111021) "a") (data (i32.const 111024) "a") (data (i32.const 111027) "a") (data (i32.const 111030) "a") (data (i32.const 111033) "a") (data (i32.const 111036) "a") (data (i32.const 111039) "a") (data (i32.const 111042) "a") (data (i32.const 111045) "a") (data (i32.const 111048) "a") (data (i32.const 111051) "a") (data (i32.const 111054) "a") (data (i32.const 111057) "a") (data (i32.const 111060) "a") (data (i32.const 111063) "a") (data (i32.const 111066) "a") (data (i32.const 111069) "a") (data (i32.const 111072) "a") (data (i32.const 111075) "a") (data (i32.const 111078) "a") (data (i32.const 111081) "a") (data (i32.const 111084) "a") (data (i32.const 111087) "a") (data (i32.const 111090) "a") (data (i32.const 111093) "a") (data (i32.const 111096) "a") (data (i32.const 111099) "a") (data (i32.const 111102) "a") (data (i32.const 111105) "a") (data (i32.const 111108) "a") (data (i32.const 111111) "a") (data (i32.const 111114) "a") (data (i32.const 111117) "a") (data (i32.const 111120) "a") (data (i32.const 111123) "a") (data (i32.const 111126) "a") (data (i32.const 111129) "a") (data (i32.const 111132) "a") (data (i32.const 111135) "a") (data (i32.const 111138) "a") (data (i32.const 111141) "a") (data (i32.const 111144) "a") (data (i32.const 111147) "a") (data (i32.const 111150) "a") (data (i32.const 111153) "a") (data (i32.const 111156) "a") (data (i32.const 111159) "a") (data (i32.const 111162) "a") (data (i32.const 111165) "a") (data (i32.const 111168) "a") (data (i32.const 111171) "a") (data (i32.const 111174) "a") (data (i32.const 111177) "a") (data (i32.const 111180) "a") (data (i32.const 111183) "a") (data (i32.const 111186) "a") (data (i32.const 111189) "a") (data (i32.const 111192) "a") (data (i32.const 111195) "a") (data (i32.const 111198) "a") (data (i32.const 111201) "a") (data (i32.const 111204) "a") (data (i32.const 111207) "a") (data (i32.const 111210) "a") (data (i32.const 111213) "a") (data (i32.const 111216) "a") (data (i32.const 111219) "a") (data (i32.const 111222) "a") (data (i32.const 111225) "a") (data (i32.const 111228) "a") (data (i32.const 111231) "a") (data (i32.const 111234) "a") (data (i32.const 111237) "a") (data (i32.const 111240) "a") (data (i32.const 111243) "a") (data (i32.const 111246) "a") (data (i32.const 111249) "a") (data (i32.const 111252) "a") (data (i32.const 111255) "a") (data (i32.const 111258) "a") (data (i32.const 111261) "a") (data (i32.const 111264) "a") (data (i32.const 111267) "a") (data (i32.const 111270) "a") (data (i32.const 111273) "a") (data (i32.const 111276) "a") (data (i32.const 111279) "a") (data (i32.const 111282) "a") (data (i32.const 111285) "a") (data (i32.const 111288) "a") (data (i32.const 111291) "a") (data (i32.const 111294) "a") (data (i32.const 111297) "a") (data (i32.const 111300) "a") (data (i32.const 111303) "a") (data (i32.const 111306) "a") (data (i32.const 111309) "a") (data (i32.const 111312) "a") (data (i32.const 111315) "a") (data (i32.const 111318) "a") (data (i32.const 111321) "a") (data (i32.const 111324) "a") (data (i32.const 111327) "a") (data (i32.const 111330) "a") (data (i32.const 111333) "a") (data (i32.const 111336) "a") (data (i32.const 111339) "a") (data (i32.const 111342) "a") (data (i32.const 111345) "a") (data (i32.const 111348) "a") (data (i32.const 111351) "a") (data (i32.const 111354) "a") (data (i32.const 111357) "a") (data (i32.const 111360) "a") (data (i32.const 111363) "a") (data (i32.const 111366) "a") (data (i32.const 111369) "a") (data (i32.const 111372) "a") (data (i32.const 111375) "a") (data (i32.const 111378) "a") (data (i32.const 111381) "a") (data (i32.const 111384) "a") (data (i32.const 111387) "a") (data (i32.const 111390) "a") (data (i32.const 111393) "a") (data (i32.const 111396) "a") (data (i32.const 111399) "a") (data (i32.const 111402) "a") (data (i32.const 111405) "a") (data (i32.const 111408) "a") (data (i32.const 111411) "a") (data (i32.const 111414) "a") (data (i32.const 111417) "a") (data (i32.const 111420) "a") (data (i32.const 111423) "a") (data (i32.const 111426) "a") (data (i32.const 111429) "a") (data (i32.const 111432) "a") (data (i32.const 111435) "a") (data (i32.const 111438) "a") (data (i32.const 111441) "a") (data (i32.const 111444) "a") (data (i32.const 111447) "a") (data (i32.const 111450) "a") (data (i32.const 111453) "a") (data (i32.const 111456) "a") (data (i32.const 111459) "a") (data (i32.const 111462) "a") (data (i32.const 111465) "a") (data (i32.const 111468) "a") (data (i32.const 111471) "a") (data (i32.const 111474) "a") (data (i32.const 111477) "a") (data (i32.const 111480) "a") (data (i32.const 111483) "a") (data (i32.const 111486) "a") (data (i32.const 111489) "a") (data (i32.const 111492) "a") (data (i32.const 111495) "a") (data (i32.const 111498) "a") (data (i32.const 111501) "a") (data (i32.const 111504) "a") (data (i32.const 111507) "a") (data (i32.const 111510) "a") (data (i32.const 111513) "a") (data (i32.const 111516) "a") (data (i32.const 111519) "a") (data (i32.const 111522) "a") (data (i32.const 111525) "a") (data (i32.const 111528) "a") (data (i32.const 111531) "a") (data (i32.const 111534) "a") (data (i32.const 111537) "a") (data (i32.const 111540) "a") (data (i32.const 111543) "a") (data (i32.const 111546) "a") (data (i32.const 111549) "a") (data (i32.const 111552) "a") (data (i32.const 111555) "a") (data (i32.const 111558) "a") (data (i32.const 111561) "a") (data (i32.const 111564) "a") (data (i32.const 111567) "a") (data (i32.const 111570) "a") (data (i32.const 111573) "a") (data (i32.const 111576) "a") (data (i32.const 111579) "a") (data (i32.const 111582) "a") (data (i32.const 111585) "a") (data (i32.const 111588) "a") (data (i32.const 111591) "a") (data (i32.const 111594) "a") (data (i32.const 111597) "a") (data (i32.const 111600) "a") (data (i32.const 111603) "a") (data (i32.const 111606) "a") (data (i32.const 111609) "a") (data (i32.const 111612) "a") (data (i32.const 111615) "a") (data (i32.const 111618) "a") (data (i32.const 111621) "a") (data (i32.const 111624) "a") (data (i32.const 111627) "a") (data (i32.const 111630) "a") (data (i32.const 111633) "a") (data (i32.const 111636) "a") (data (i32.const 111639) "a") (data (i32.const 111642) "a") (data (i32.const 111645) "a") (data (i32.const 111648) "a") (data (i32.const 111651) "a") (data (i32.const 111654) "a") (data (i32.const 111657) "a") (data (i32.const 111660) "a") (data (i32.const 111663) "a") (data (i32.const 111666) "a") (data (i32.const 111669) "a") (data (i32.const 111672) "a") (data (i32.const 111675) "a") (data (i32.const 111678) "a") (data (i32.const 111681) "a") (data (i32.const 111684) "a") (data (i32.const 111687) "a") (data (i32.const 111690) "a") (data (i32.const 111693) "a") (data (i32.const 111696) "a") (data (i32.const 111699) "a") (data (i32.const 111702) "a") (data (i32.const 111705) "a") (data (i32.const 111708) "a") (data (i32.const 111711) "a") (data (i32.const 111714) "a") (data (i32.const 111717) "a") (data (i32.const 111720) "a") (data (i32.const 111723) "a") (data (i32.const 111726) "a") (data (i32.const 111729) "a") (data (i32.const 111732) "a") (data (i32.const 111735) "a") (data (i32.const 111738) "a") (data (i32.const 111741) "a") (data (i32.const 111744) "a") (data (i32.const 111747) "a") (data (i32.const 111750) "a") (data (i32.const 111753) "a") (data (i32.const 111756) "a") (data (i32.const 111759) "a") (data (i32.const 111762) "a") (data (i32.const 111765) "a") (data (i32.const 111768) "a") (data (i32.const 111771) "a") (data (i32.const 111774) "a") (data (i32.const 111777) "a") (data (i32.const 111780) "a") (data (i32.const 111783) "a") (data (i32.const 111786) "a") (data (i32.const 111789) "a") (data (i32.const 111792) "a") (data (i32.const 111795) "a") (data (i32.const 111798) "a") (data (i32.const 111801) "a") (data (i32.const 111804) "a") (data (i32.const 111807) "a") (data (i32.const 111810) "a") (data (i32.const 111813) "a") (data (i32.const 111816) "a") (data (i32.const 111819) "a") (data (i32.const 111822) "a") (data (i32.const 111825) "a") (data (i32.const 111828) "a") (data (i32.const 111831) "a") (data (i32.const 111834) "a") (data (i32.const 111837) "a") (data (i32.const 111840) "a") (data (i32.const 111843) "a") (data (i32.const 111846) "a") (data (i32.const 111849) "a") (data (i32.const 111852) "a") (data (i32.const 111855) "a") (data (i32.const 111858) "a") (data (i32.const 111861) "a") (data (i32.const 111864) "a") (data (i32.const 111867) "a") (data (i32.const 111870) "a") (data (i32.const 111873) "a") (data (i32.const 111876) "a") (data (i32.const 111879) "a") (data (i32.const 111882) "a") (data (i32.const 111885) "a") (data (i32.const 111888) "a") (data (i32.const 111891) "a") (data (i32.const 111894) "a") (data (i32.const 111897) "a") (data (i32.const 111900) "a") (data (i32.const 111903) "a") (data (i32.const 111906) "a") (data (i32.const 111909) "a") (data (i32.const 111912) "a") (data (i32.const 111915) "a") (data (i32.const 111918) "a") (data (i32.const 111921) "a") (data (i32.const 111924) "a") (data (i32.const 111927) "a") (data (i32.const 111930) "a") (data (i32.const 111933) "a") (data (i32.const 111936) "a") (data (i32.const 111939) "a") (data (i32.const 111942) "a") (data (i32.const 111945) "a") (data (i32.const 111948) "a") (data (i32.const 111951) "a") (data (i32.const 111954) "a") (data (i32.const 111957) "a") (data (i32.const 111960) "a") (data (i32.const 111963) "a") (data (i32.const 111966) "a") (data (i32.const 111969) "a") (data (i32.const 111972) "a") (data (i32.const 111975) "a") (data (i32.const 111978) "a") (data (i32.const 111981) "a") (data (i32.const 111984) "a") (data (i32.const 111987) "a") (data (i32.const 111990) "a") (data (i32.const 111993) "a") (data (i32.const 111996) "a") (data (i32.const 111999) "a") (data (i32.const 112002) "a") (data (i32.const 112005) "a") (data (i32.const 112008) "a") (data (i32.const 112011) "a") (data (i32.const 112014) "a") (data (i32.const 112017) "a") (data (i32.const 112020) "a") (data (i32.const 112023) "a") (data (i32.const 112026) "a") (data (i32.const 112029) "a") (data (i32.const 112032) "a") (data (i32.const 112035) "a") (data (i32.const 112038) "a") (data (i32.const 112041) "a") (data (i32.const 112044) "a") (data (i32.const 112047) "a") (data (i32.const 112050) "a") (data (i32.const 112053) "a") (data (i32.const 112056) "a") (data (i32.const 112059) "a") (data (i32.const 112062) "a") (data (i32.const 112065) "a") (data (i32.const 112068) "a") (data (i32.const 112071) "a") (data (i32.const 112074) "a") (data (i32.const 112077) "a") (data (i32.const 112080) "a") (data (i32.const 112083) "a") (data (i32.const 112086) "a") (data (i32.const 112089) "a") (data (i32.const 112092) "a") (data (i32.const 112095) "a") (data (i32.const 112098) "a") (data (i32.const 112101) "a") (data (i32.const 112104) "a") (data (i32.const 112107) "a") (data (i32.const 112110) "a") (data (i32.const 112113) "a") (data (i32.const 112116) "a") (data (i32.const 112119) "a") (data (i32.const 112122) "a") (data (i32.const 112125) "a") (data (i32.const 112128) "a") (data (i32.const 112131) "a") (data (i32.const 112134) "a") (data (i32.const 112137) "a") (data (i32.const 112140) "a") (data (i32.const 112143) "a") (data (i32.const 112146) "a") (data (i32.const 112149) "a") (data (i32.const 112152) "a") (data (i32.const 112155) "a") (data (i32.const 112158) "a") (data (i32.const 112161) "a") (data (i32.const 112164) "a") (data (i32.const 112167) "a") (data (i32.const 112170) "a") (data (i32.const 112173) "a") (data (i32.const 112176) "a") (data (i32.const 112179) "a") (data (i32.const 112182) "a") (data (i32.const 112185) "a") (data (i32.const 112188) "a") (data (i32.const 112191) "a") (data (i32.const 112194) "a") (data (i32.const 112197) "a") (data (i32.const 112200) "a") (data (i32.const 112203) "a") (data (i32.const 112206) "a") (data (i32.const 112209) "a") (data (i32.const 112212) "a") (data (i32.const 112215) "a") (data (i32.const 112218) "a") (data (i32.const 112221) "a") (data (i32.const 112224) "a") (data (i32.const 112227) "a") (data (i32.const 112230) "a") (data (i32.const 112233) "a") (data (i32.const 112236) "a") (data (i32.const 112239) "a") (data (i32.const 112242) "a") (data (i32.const 112245) "a") (data (i32.const 112248) "a") (data (i32.const 112251) "a") (data (i32.const 112254) "a") (data (i32.const 112257) "a") (data (i32.const 112260) "a") (data (i32.const 112263) "a") (data (i32.const 112266) "a") (data (i32.const 112269) "a") (data (i32.const 112272) "a") (data (i32.const 112275) "a") (data (i32.const 112278) "a") (data (i32.const 112281) "a") (data (i32.const 112284) "a") (data (i32.const 112287) "a") (data (i32.const 112290) "a") (data (i32.const 112293) "a") (data (i32.const 112296) "a") (data (i32.const 112299) "a") (data (i32.const 112302) "a") (data (i32.const 112305) "a") (data (i32.const 112308) "a") (data (i32.const 112311) "a") (data (i32.const 112314) "a") (data (i32.const 112317) "a") (data (i32.const 112320) "a") (data (i32.const 112323) "a") (data (i32.const 112326) "a") (data (i32.const 112329) "a") (data (i32.const 112332) "a") (data (i32.const 112335) "a") (data (i32.const 112338) "a") (data (i32.const 112341) "a") (data (i32.const 112344) "a") (data (i32.const 112347) "a") (data (i32.const 112350) "a") (data (i32.const 112353) "a") (data (i32.const 112356) "a") (data (i32.const 112359) "a") (data (i32.const 112362) "a") (data (i32.const 112365) "a") (data (i32.const 112368) "a") (data (i32.const 112371) "a") (data (i32.const 112374) "a") (data (i32.const 112377) "a") (data (i32.const 112380) "a") (data (i32.const 112383) "a") (data (i32.const 112386) "a") (data (i32.const 112389) "a") (data (i32.const 112392) "a") (data (i32.const 112395) "a") (data (i32.const 112398) "a") (data (i32.const 112401) "a") (data (i32.const 112404) "a") (data (i32.const 112407) "a") (data (i32.const 112410) "a") (data (i32.const 112413) "a") (data (i32.const 112416) "a") (data (i32.const 112419) "a") (data (i32.const 112422) "a") (data (i32.const 112425) "a") (data (i32.const 112428) "a") (data (i32.const 112431) "a") (data (i32.const 112434) "a") (data (i32.const 112437) "a") (data (i32.const 112440) "a") (data (i32.const 112443) "a") (data (i32.const 112446) "a") (data (i32.const 112449) "a") (data (i32.const 112452) "a") (data (i32.const 112455) "a") (data (i32.const 112458) "a") (data (i32.const 112461) "a") (data (i32.const 112464) "a") (data (i32.const 112467) "a") (data (i32.const 112470) "a") (data (i32.const 112473) "a") (data (i32.const 112476) "a") (data (i32.const 112479) "a") (data (i32.const 112482) "a") (data (i32.const 112485) "a") (data (i32.const 112488) "a") (data (i32.const 112491) "a") (data (i32.const 112494) "a") (data (i32.const 112497) "a") (data (i32.const 112500) "a") (data (i32.const 112503) "a") (data (i32.const 112506) "a") (data (i32.const 112509) "a") (data (i32.const 112512) "a") (data (i32.const 112515) "a") (data (i32.const 112518) "a") (data (i32.const 112521) "a") (data (i32.const 112524) "a") (data (i32.const 112527) "a") (data (i32.const 112530) "a") (data (i32.const 112533) "a") (data (i32.const 112536) "a") (data (i32.const 112539) "a") (data (i32.const 112542) "a") (data (i32.const 112545) "a") (data (i32.const 112548) "a") (data (i32.const 112551) "a") (data (i32.const 112554) "a") (data (i32.const 112557) "a") (data (i32.const 112560) "a") (data (i32.const 112563) "a") (data (i32.const 112566) "a") (data (i32.const 112569) "a") (data (i32.const 112572) "a") (data (i32.const 112575) "a") (data (i32.const 112578) "a") (data (i32.const 112581) "a") (data (i32.const 112584) "a") (data (i32.const 112587) "a") (data (i32.const 112590) "a") (data (i32.const 112593) "a") (data (i32.const 112596) "a") (data (i32.const 112599) "a") (data (i32.const 112602) "a") (data (i32.const 112605) "a") (data (i32.const 112608) "a") (data (i32.const 112611) "a") (data (i32.const 112614) "a") (data (i32.const 112617) "a") (data (i32.const 112620) "a") (data (i32.const 112623) "a") (data (i32.const 112626) "a") (data (i32.const 112629) "a") (data (i32.const 112632) "a") (data (i32.const 112635) "a") (data (i32.const 112638) "a") (data (i32.const 112641) "a") (data (i32.const 112644) "a") (data (i32.const 112647) "a") (data (i32.const 112650) "a") (data (i32.const 112653) "a") (data (i32.const 112656) "a") (data (i32.const 112659) "a") (data (i32.const 112662) "a") (data (i32.const 112665) "a") (data (i32.const 112668) "a") (data (i32.const 112671) "a") (data (i32.const 112674) "a") (data (i32.const 112677) "a") (data (i32.const 112680) "a") (data (i32.const 112683) "a") (data (i32.const 112686) "a") (data (i32.const 112689) "a") (data (i32.const 112692) "a") (data (i32.const 112695) "a") (data (i32.const 112698) "a") (data (i32.const 112701) "a") (data (i32.const 112704) "a") (data (i32.const 112707) "a") (data (i32.const 112710) "a") (data (i32.const 112713) "a") (data (i32.const 112716) "a") (data (i32.const 112719) "a") (data (i32.const 112722) "a") (data (i32.const 112725) "a") (data (i32.const 112728) "a") (data (i32.const 112731) "a") (data (i32.const 112734) "a") (data (i32.const 112737) "a") (data (i32.const 112740) "a") (data (i32.const 112743) "a") (data (i32.const 112746) "a") (data (i32.const 112749) "a") (data (i32.const 112752) "a") (data (i32.const 112755) "a") (data (i32.const 112758) "a") (data (i32.const 112761) "a") (data (i32.const 112764) "a") (data (i32.const 112767) "a") (data (i32.const 112770) "a") (data (i32.const 112773) "a") (data (i32.const 112776) "a") (data (i32.const 112779) "a") (data (i32.const 112782) "a") (data (i32.const 112785) "a") (data (i32.const 112788) "a") (data (i32.const 112791) "a") (data (i32.const 112794) "a") (data (i32.const 112797) "a") (data (i32.const 112800) "a") (data (i32.const 112803) "a") (data (i32.const 112806) "a") (data (i32.const 112809) "a") (data (i32.const 112812) "a") (data (i32.const 112815) "a") (data (i32.const 112818) "a") (data (i32.const 112821) "a") (data (i32.const 112824) "a") (data (i32.const 112827) "a") (data (i32.const 112830) "a") (data (i32.const 112833) "a") (data (i32.const 112836) "a") (data (i32.const 112839) "a") (data (i32.const 112842) "a") (data (i32.const 112845) "a") (data (i32.const 112848) "a") (data (i32.const 112851) "a") (data (i32.const 112854) "a") (data (i32.const 112857) "a") (data (i32.const 112860) "a") (data (i32.const 112863) "a") (data (i32.const 112866) "a") (data (i32.const 112869) "a") (data (i32.const 112872) "a") (data (i32.const 112875) "a") (data (i32.const 112878) "a") (data (i32.const 112881) "a") (data (i32.const 112884) "a") (data (i32.const 112887) "a") (data (i32.const 112890) "a") (data (i32.const 112893) "a") (data (i32.const 112896) "a") (data (i32.const 112899) "a") (data (i32.const 112902) "a") (data (i32.const 112905) "a") (data (i32.const 112908) "a") (data (i32.const 112911) "a") (data (i32.const 112914) "a") (data (i32.const 112917) "a") (data (i32.const 112920) "a") (data (i32.const 112923) "a") (data (i32.const 112926) "a") (data (i32.const 112929) "a") (data (i32.const 112932) "a") (data (i32.const 112935) "a") (data (i32.const 112938) "a") (data (i32.const 112941) "a") (data (i32.const 112944) "a") (data (i32.const 112947) "a") (data (i32.const 112950) "a") (data (i32.const 112953) "a") (data (i32.const 112956) "a") (data (i32.const 112959) "a") (data (i32.const 112962) "a") (data (i32.const 112965) "a") (data (i32.const 112968) "a") (data (i32.const 112971) "a") (data (i32.const 112974) "a") (data (i32.const 112977) "a") (data (i32.const 112980) "a") (data (i32.const 112983) "a") (data (i32.const 112986) "a") (data (i32.const 112989) "a") (data (i32.const 112992) "a") (data (i32.const 112995) "a") (data (i32.const 112998) "a") (data (i32.const 113001) "a") (data (i32.const 113004) "a") (data (i32.const 113007) "a") (data (i32.const 113010) "a") (data (i32.const 113013) "a") (data (i32.const 113016) "a") (data (i32.const 113019) "a") (data (i32.const 113022) "a") (data (i32.const 113025) "a") (data (i32.const 113028) "a") (data (i32.const 113031) "a") (data (i32.const 113034) "a") (data (i32.const 113037) "a") (data (i32.const 113040) "a") (data (i32.const 113043) "a") (data (i32.const 113046) "a") (data (i32.const 113049) "a") (data (i32.const 113052) "a") (data (i32.const 113055) "a") (data (i32.const 113058) "a") (data (i32.const 113061) "a") (data (i32.const 113064) "a") (data (i32.const 113067) "a") (data (i32.const 113070) "a") (data (i32.const 113073) "a") (data (i32.const 113076) "a") (data (i32.const 113079) "a") (data (i32.const 113082) "a") (data (i32.const 113085) "a") (data (i32.const 113088) "a") (data (i32.const 113091) "a") (data (i32.const 113094) "a") (data (i32.const 113097) "a") (data (i32.const 113100) "a") (data (i32.const 113103) "a") (data (i32.const 113106) "a") (data (i32.const 113109) "a") (data (i32.const 113112) "a") (data (i32.const 113115) "a") (data (i32.const 113118) "a") (data (i32.const 113121) "a") (data (i32.const 113124) "a") (data (i32.const 113127) "a") (data (i32.const 113130) "a") (data (i32.const 113133) "a") (data (i32.const 113136) "a") (data (i32.const 113139) "a") (data (i32.const 113142) "a") (data (i32.const 113145) "a") (data (i32.const 113148) "a") (data (i32.const 113151) "a") (data (i32.const 113154) "a") (data (i32.const 113157) "a") (data (i32.const 113160) "a") (data (i32.const 113163) "a") (data (i32.const 113166) "a") (data (i32.const 113169) "a") (data (i32.const 113172) "a") (data (i32.const 113175) "a") (data (i32.const 113178) "a") (data (i32.const 113181) "a") (data (i32.const 113184) "a") (data (i32.const 113187) "a") (data (i32.const 113190) "a") (data (i32.const 113193) "a") (data (i32.const 113196) "a") (data (i32.const 113199) "a") (data (i32.const 113202) "a") (data (i32.const 113205) "a") (data (i32.const 113208) "a") (data (i32.const 113211) "a") (data (i32.const 113214) "a") (data (i32.const 113217) "a") (data (i32.const 113220) "a") (data (i32.const 113223) "a") (data (i32.const 113226) "a") (data (i32.const 113229) "a") (data (i32.const 113232) "a") (data (i32.const 113235) "a") (data (i32.const 113238) "a") (data (i32.const 113241) "a") (data (i32.const 113244) "a") (data (i32.const 113247) "a") (data (i32.const 113250) "a") (data (i32.const 113253) "a") (data (i32.const 113256) "a") (data (i32.const 113259) "a") (data (i32.const 113262) "a") (data (i32.const 113265) "a") (data (i32.const 113268) "a") (data (i32.const 113271) "a") (data (i32.const 113274) "a") (data (i32.const 113277) "a") (data (i32.const 113280) "a") (data (i32.const 113283) "a") (data (i32.const 113286) "a") (data (i32.const 113289) "a") (data (i32.const 113292) "a") (data (i32.const 113295) "a") (data (i32.const 113298) "a") (data (i32.const 113301) "a") (data (i32.const 113304) "a") (data (i32.const 113307) "a") (data (i32.const 113310) "a") (data (i32.const 113313) "a") (data (i32.const 113316) "a") (data (i32.const 113319) "a") (data (i32.const 113322) "a") (data (i32.const 113325) "a") (data (i32.const 113328) "a") (data (i32.const 113331) "a") (data (i32.const 113334) "a") (data (i32.const 113337) "a") (data (i32.const 113340) "a") (data (i32.const 113343) "a") (data (i32.const 113346) "a") (data (i32.const 113349) "a") (data (i32.const 113352) "a") (data (i32.const 113355) "a") (data (i32.const 113358) "a") (data (i32.const 113361) "a") (data (i32.const 113364) "a") (data (i32.const 113367) "a") (data (i32.const 113370) "a") (data (i32.const 113373) "a") (data (i32.const 113376) "a") (data (i32.const 113379) "a") (data (i32.const 113382) "a") (data (i32.const 113385) "a") (data (i32.const 113388) "a") (data (i32.const 113391) "a") (data (i32.const 113394) "a") (data (i32.const 113397) "a") (data (i32.const 113400) "a") (data (i32.const 113403) "a") (data (i32.const 113406) "a") (data (i32.const 113409) "a") (data (i32.const 113412) "a") (data (i32.const 113415) "a") (data (i32.const 113418) "a") (data (i32.const 113421) "a") (data (i32.const 113424) "a") (data (i32.const 113427) "a") (data (i32.const 113430) "a") (data (i32.const 113433) "a") (data (i32.const 113436) "a") (data (i32.const 113439) "a") (data (i32.const 113442) "a") (data (i32.const 113445) "a") (data (i32.const 113448) "a") (data (i32.const 113451) "a") (data (i32.const 113454) "a") (data (i32.const 113457) "a") (data (i32.const 113460) "a") (data (i32.const 113463) "a") (data (i32.const 113466) "a") (data (i32.const 113469) "a") (data (i32.const 113472) "a") (data (i32.const 113475) "a") (data (i32.const 113478) "a") (data (i32.const 113481) "a") (data (i32.const 113484) "a") (data (i32.const 113487) "a") (data (i32.const 113490) "a") (data (i32.const 113493) "a") (data (i32.const 113496) "a") (data (i32.const 113499) "a") (data (i32.const 113502) "a") (data (i32.const 113505) "a") (data (i32.const 113508) "a") (data (i32.const 113511) "a") (data (i32.const 113514) "a") (data (i32.const 113517) "a") (data (i32.const 113520) "a") (data (i32.const 113523) "a") (data (i32.const 113526) "a") (data (i32.const 113529) "a") (data (i32.const 113532) "a") (data (i32.const 113535) "a") (data (i32.const 113538) "a") (data (i32.const 113541) "a") (data (i32.const 113544) "a") (data (i32.const 113547) "a") (data (i32.const 113550) "a") (data (i32.const 113553) "a") (data (i32.const 113556) "a") (data (i32.const 113559) "a") (data (i32.const 113562) "a") (data (i32.const 113565) "a") (data (i32.const 113568) "a") (data (i32.const 113571) "a") (data (i32.const 113574) "a") (data (i32.const 113577) "a") (data (i32.const 113580) "a") (data (i32.const 113583) "a") (data (i32.const 113586) "a") (data (i32.const 113589) "a") (data (i32.const 113592) "a") (data (i32.const 113595) "a") (data (i32.const 113598) "a") (data (i32.const 113601) "a") (data (i32.const 113604) "a") (data (i32.const 113607) "a") (data (i32.const 113610) "a") (data (i32.const 113613) "a") (data (i32.const 113616) "a") (data (i32.const 113619) "a") (data (i32.const 113622) "a") (data (i32.const 113625) "a") (data (i32.const 113628) "a") (data (i32.const 113631) "a") (data (i32.const 113634) "a") (data (i32.const 113637) "a") (data (i32.const 113640) "a") (data (i32.const 113643) "a") (data (i32.const 113646) "a") (data (i32.const 113649) "a") (data (i32.const 113652) "a") (data (i32.const 113655) "a") (data (i32.const 113658) "a") (data (i32.const 113661) "a") (data (i32.const 113664) "a") (data (i32.const 113667) "a") (data (i32.const 113670) "a") (data (i32.const 113673) "a") (data (i32.const 113676) "a") (data (i32.const 113679) "a") (data (i32.const 113682) "a") (data (i32.const 113685) "a") (data (i32.const 113688) "a") (data (i32.const 113691) "a") (data (i32.const 113694) "a") (data (i32.const 113697) "a") (data (i32.const 113700) "a") (data (i32.const 113703) "a") (data (i32.const 113706) "a") (data (i32.const 113709) "a") (data (i32.const 113712) "a") (data (i32.const 113715) "a") (data (i32.const 113718) "a") (data (i32.const 113721) "a") (data (i32.const 113724) "a") (data (i32.const 113727) "a") (data (i32.const 113730) "a") (data (i32.const 113733) "a") (data (i32.const 113736) "a") (data (i32.const 113739) "a") (data (i32.const 113742) "a") (data (i32.const 113745) "a") (data (i32.const 113748) "a") (data (i32.const 113751) "a") (data (i32.const 113754) "a") (data (i32.const 113757) "a") (data (i32.const 113760) "a") (data (i32.const 113763) "a") (data (i32.const 113766) "a") (data (i32.const 113769) "a") (data (i32.const 113772) "a") (data (i32.const 113775) "a") (data (i32.const 113778) "a") (data (i32.const 113781) "a") (data (i32.const 113784) "a") (data (i32.const 113787) "a") (data (i32.const 113790) "a") (data (i32.const 113793) "a") (data (i32.const 113796) "a") (data (i32.const 113799) "a") (data (i32.const 113802) "a") (data (i32.const 113805) "a") (data (i32.const 113808) "a") (data (i32.const 113811) "a") (data (i32.const 113814) "a") (data (i32.const 113817) "a") (data (i32.const 113820) "a") (data (i32.const 113823) "a") (data (i32.const 113826) "a") (data (i32.const 113829) "a") (data (i32.const 113832) "a") (data (i32.const 113835) "a") (data (i32.const 113838) "a") (data (i32.const 113841) "a") (data (i32.const 113844) "a") (data (i32.const 113847) "a") (data (i32.const 113850) "a") (data (i32.const 113853) "a") (data (i32.const 113856) "a") (data (i32.const 113859) "a") (data (i32.const 113862) "a") (data (i32.const 113865) "a") (data (i32.const 113868) "a") (data (i32.const 113871) "a") (data (i32.const 113874) "a") (data (i32.const 113877) "a") (data (i32.const 113880) "a") (data (i32.const 113883) "a") (data (i32.const 113886) "a") (data (i32.const 113889) "a") (data (i32.const 113892) "a") (data (i32.const 113895) "a") (data (i32.const 113898) "a") (data (i32.const 113901) "a") (data (i32.const 113904) "a") (data (i32.const 113907) "a") (data (i32.const 113910) "a") (data (i32.const 113913) "a") (data (i32.const 113916) "a") (data (i32.const 113919) "a") (data (i32.const 113922) "a") (data (i32.const 113925) "a") (data (i32.const 113928) "a") (data (i32.const 113931) "a") (data (i32.const 113934) "a") (data (i32.const 113937) "a") (data (i32.const 113940) "a") (data (i32.const 113943) "a") (data (i32.const 113946) "a") (data (i32.const 113949) "a") (data (i32.const 113952) "a") (data (i32.const 113955) "a") (data (i32.const 113958) "a") (data (i32.const 113961) "a") (data (i32.const 113964) "a") (data (i32.const 113967) "a") (data (i32.const 113970) "a") (data (i32.const 113973) "a") (data (i32.const 113976) "a") (data (i32.const 113979) "a") (data (i32.const 113982) "a") (data (i32.const 113985) "a") (data (i32.const 113988) "a") (data (i32.const 113991) "a") (data (i32.const 113994) "a") (data (i32.const 113997) "a") (data (i32.const 114000) "a") (data (i32.const 114003) "a") (data (i32.const 114006) "a") (data (i32.const 114009) "a") (data (i32.const 114012) "a") (data (i32.const 114015) "a") (data (i32.const 114018) "a") (data (i32.const 114021) "a") (data (i32.const 114024) "a") (data (i32.const 114027) "a") (data (i32.const 114030) "a") (data (i32.const 114033) "a") (data (i32.const 114036) "a") (data (i32.const 114039) "a") (data (i32.const 114042) "a") (data (i32.const 114045) "a") (data (i32.const 114048) "a") (data (i32.const 114051) "a") (data (i32.const 114054) "a") (data (i32.const 114057) "a") (data (i32.const 114060) "a") (data (i32.const 114063) "a") (data (i32.const 114066) "a") (data (i32.const 114069) "a") (data (i32.const 114072) "a") (data (i32.const 114075) "a") (data (i32.const 114078) "a") (data (i32.const 114081) "a") (data (i32.const 114084) "a") (data (i32.const 114087) "a") (data (i32.const 114090) "a") (data (i32.const 114093) "a") (data (i32.const 114096) "a") (data (i32.const 114099) "a") (data (i32.const 114102) "a") (data (i32.const 114105) "a") (data (i32.const 114108) "a") (data (i32.const 114111) "a") (data (i32.const 114114) "a") (data (i32.const 114117) "a") (data (i32.const 114120) "a") (data (i32.const 114123) "a") (data (i32.const 114126) "a") (data (i32.const 114129) "a") (data (i32.const 114132) "a") (data (i32.const 114135) "a") (data (i32.const 114138) "a") (data (i32.const 114141) "a") (data (i32.const 114144) "a") (data (i32.const 114147) "a") (data (i32.const 114150) "a") (data (i32.const 114153) "a") (data (i32.const 114156) "a") (data (i32.const 114159) "a") (data (i32.const 114162) "a") (data (i32.const 114165) "a") (data (i32.const 114168) "a") (data (i32.const 114171) "a") (data (i32.const 114174) "a") (data (i32.const 114177) "a") (data (i32.const 114180) "a") (data (i32.const 114183) "a") (data (i32.const 114186) "a") (data (i32.const 114189) "a") (data (i32.const 114192) "a") (data (i32.const 114195) "a") (data (i32.const 114198) "a") (data (i32.const 114201) "a") (data (i32.const 114204) "a") (data (i32.const 114207) "a") (data (i32.const 114210) "a") (data (i32.const 114213) "a") (data (i32.const 114216) "a") (data (i32.const 114219) "a") (data (i32.const 114222) "a") (data (i32.const 114225) "a") (data (i32.const 114228) "a") (data (i32.const 114231) "a") (data (i32.const 114234) "a") (data (i32.const 114237) "a") (data (i32.const 114240) "a") (data (i32.const 114243) "a") (data (i32.const 114246) "a") (data (i32.const 114249) "a") (data (i32.const 114252) "a") (data (i32.const 114255) "a") (data (i32.const 114258) "a") (data (i32.const 114261) "a") (data (i32.const 114264) "a") (data (i32.const 114267) "a") (data (i32.const 114270) "a") (data (i32.const 114273) "a") (data (i32.const 114276) "a") (data (i32.const 114279) "a") (data (i32.const 114282) "a") (data (i32.const 114285) "a") (data (i32.const 114288) "a") (data (i32.const 114291) "a") (data (i32.const 114294) "a") (data (i32.const 114297) "a") (data (i32.const 114300) "a") (data (i32.const 114303) "a") (data (i32.const 114306) "a") (data (i32.const 114309) "a") (data (i32.const 114312) "a") (data (i32.const 114315) "a") (data (i32.const 114318) "a") (data (i32.const 114321) "a") (data (i32.const 114324) "a") (data (i32.const 114327) "a") (data (i32.const 114330) "a") (data (i32.const 114333) "a") (data (i32.const 114336) "a") (data (i32.const 114339) "a") (data (i32.const 114342) "a") (data (i32.const 114345) "a") (data (i32.const 114348) "a") (data (i32.const 114351) "a") (data (i32.const 114354) "a") (data (i32.const 114357) "a") (data (i32.const 114360) "a") (data (i32.const 114363) "a") (data (i32.const 114366) "a") (data (i32.const 114369) "a") (data (i32.const 114372) "a") (data (i32.const 114375) "a") (data (i32.const 114378) "a") (data (i32.const 114381) "a") (data (i32.const 114384) "a") (data (i32.const 114387) "a") (data (i32.const 114390) "a") (data (i32.const 114393) "a") (data (i32.const 114396) "a") (data (i32.const 114399) "a") (data (i32.const 114402) "a") (data (i32.const 114405) "a") (data (i32.const 114408) "a") (data (i32.const 114411) "a") (data (i32.const 114414) "a") (data (i32.const 114417) "a") (data (i32.const 114420) "a") (data (i32.const 114423) "a") (data (i32.const 114426) "a") (data (i32.const 114429) "a") (data (i32.const 114432) "a") (data (i32.const 114435) "a") (data (i32.const 114438) "a") (data (i32.const 114441) "a") (data (i32.const 114444) "a") (data (i32.const 114447) "a") (data (i32.const 114450) "a") (data (i32.const 114453) "a") (data (i32.const 114456) "a") (data (i32.const 114459) "a") (data (i32.const 114462) "a") (data (i32.const 114465) "a") (data (i32.const 114468) "a") (data (i32.const 114471) "a") (data (i32.const 114474) "a") (data (i32.const 114477) "a") (data (i32.const 114480) "a") (data (i32.const 114483) "a") (data (i32.const 114486) "a") (data (i32.const 114489) "a") (data (i32.const 114492) "a") (data (i32.const 114495) "a") (data (i32.const 114498) "a") (data (i32.const 114501) "a") (data (i32.const 114504) "a") (data (i32.const 114507) "a") (data (i32.const 114510) "a") (data (i32.const 114513) "a") (data (i32.const 114516) "a") (data (i32.const 114519) "a") (data (i32.const 114522) "a") (data (i32.const 114525) "a") (data (i32.const 114528) "a") (data (i32.const 114531) "a") (data (i32.const 114534) "a") (data (i32.const 114537) "a") (data (i32.const 114540) "a") (data (i32.const 114543) "a") (data (i32.const 114546) "a") (data (i32.const 114549) "a") (data (i32.const 114552) "a") (data (i32.const 114555) "a") (data (i32.const 114558) "a") (data (i32.const 114561) "a") (data (i32.const 114564) "a") (data (i32.const 114567) "a") (data (i32.const 114570) "a") (data (i32.const 114573) "a") (data (i32.const 114576) "a") (data (i32.const 114579) "a") (data (i32.const 114582) "a") (data (i32.const 114585) "a") (data (i32.const 114588) "a") (data (i32.const 114591) "a") (data (i32.const 114594) "a") (data (i32.const 114597) "a") (data (i32.const 114600) "a") (data (i32.const 114603) "a") (data (i32.const 114606) "a") (data (i32.const 114609) "a") (data (i32.const 114612) "a") (data (i32.const 114615) "a") (data (i32.const 114618) "a") (data (i32.const 114621) "a") (data (i32.const 114624) "a") (data (i32.const 114627) "a") (data (i32.const 114630) "a") (data (i32.const 114633) "a") (data (i32.const 114636) "a") (data (i32.const 114639) "a") (data (i32.const 114642) "a") (data (i32.const 114645) "a") (data (i32.const 114648) "a") (data (i32.const 114651) "a") (data (i32.const 114654) "a") (data (i32.const 114657) "a") (data (i32.const 114660) "a") (data (i32.const 114663) "a") (data (i32.const 114666) "a") (data (i32.const 114669) "a") (data (i32.const 114672) "a") (data (i32.const 114675) "a") (data (i32.const 114678) "a") (data (i32.const 114681) "a") (data (i32.const 114684) "a") (data (i32.const 114687) "a") (data (i32.const 114690) "a") (data (i32.const 114693) "a") (data (i32.const 114696) "a") (data (i32.const 114699) "a") (data (i32.const 114702) "a") (data (i32.const 114705) "a") (data (i32.const 114708) "a") (data (i32.const 114711) "a") (data (i32.const 114714) "a") (data (i32.const 114717) "a") (data (i32.const 114720) "a") (data (i32.const 114723) "a") (data (i32.const 114726) "a") (data (i32.const 114729) "a") (data (i32.const 114732) "a") (data (i32.const 114735) "a") (data (i32.const 114738) "a") (data (i32.const 114741) "a") (data (i32.const 114744) "a") (data (i32.const 114747) "a") (data (i32.const 114750) "a") (data (i32.const 114753) "a") (data (i32.const 114756) "a") (data (i32.const 114759) "a") (data (i32.const 114762) "a") (data (i32.const 114765) "a") (data (i32.const 114768) "a") (data (i32.const 114771) "a") (data (i32.const 114774) "a") (data (i32.const 114777) "a") (data (i32.const 114780) "a") (data (i32.const 114783) "a") (data (i32.const 114786) "a") (data (i32.const 114789) "a") (data (i32.const 114792) "a") (data (i32.const 114795) "a") (data (i32.const 114798) "a") (data (i32.const 114801) "a") (data (i32.const 114804) "a") (data (i32.const 114807) "a") (data (i32.const 114810) "a") (data (i32.const 114813) "a") (data (i32.const 114816) "a") (data (i32.const 114819) "a") (data (i32.const 114822) "a") (data (i32.const 114825) "a") (data (i32.const 114828) "a") (data (i32.const 114831) "a") (data (i32.const 114834) "a") (data (i32.const 114837) "a") (data (i32.const 114840) "a") (data (i32.const 114843) "a") (data (i32.const 114846) "a") (data (i32.const 114849) "a") (data (i32.const 114852) "a") (data (i32.const 114855) "a") (data (i32.const 114858) "a") (data (i32.const 114861) "a") (data (i32.const 114864) "a") (data (i32.const 114867) "a") (data (i32.const 114870) "a") (data (i32.const 114873) "a") (data (i32.const 114876) "a") (data (i32.const 114879) "a") (data (i32.const 114882) "a") (data (i32.const 114885) "a") (data (i32.const 114888) "a") (data (i32.const 114891) "a") (data (i32.const 114894) "a") (data (i32.const 114897) "a") (data (i32.const 114900) "a") (data (i32.const 114903) "a") (data (i32.const 114906) "a") (data (i32.const 114909) "a") (data (i32.const 114912) "a") (data (i32.const 114915) "a") (data (i32.const 114918) "a") (data (i32.const 114921) "a") (data (i32.const 114924) "a") (data (i32.const 114927) "a") (data (i32.const 114930) "a") (data (i32.const 114933) "a") (data (i32.const 114936) "a") (data (i32.const 114939) "a") (data (i32.const 114942) "a") (data (i32.const 114945) "a") (data (i32.const 114948) "a") (data (i32.const 114951) "a") (data (i32.const 114954) "a") (data (i32.const 114957) "a") (data (i32.const 114960) "a") (data (i32.const 114963) "a") (data (i32.const 114966) "a") (data (i32.const 114969) "a") (data (i32.const 114972) "a") (data (i32.const 114975) "a") (data (i32.const 114978) "a") (data (i32.const 114981) "a") (data (i32.const 114984) "a") (data (i32.const 114987) "a") (data (i32.const 114990) "a") (data (i32.const 114993) "a") (data (i32.const 114996) "a") (data (i32.const 114999) "a") (data (i32.const 115002) "a") (data (i32.const 115005) "a") (data (i32.const 115008) "a") (data (i32.const 115011) "a") (data (i32.const 115014) "a") (data (i32.const 115017) "a") (data (i32.const 115020) "a") (data (i32.const 115023) "a") (data (i32.const 115026) "a") (data (i32.const 115029) "a") (data (i32.const 115032) "a") (data (i32.const 115035) "a") (data (i32.const 115038) "a") (data (i32.const 115041) "a") (data (i32.const 115044) "a") (data (i32.const 115047) "a") (data (i32.const 115050) "a") (data (i32.const 115053) "a") (data (i32.const 115056) "a") (data (i32.const 115059) "a") (data (i32.const 115062) "a") (data (i32.const 115065) "a") (data (i32.const 115068) "a") (data (i32.const 115071) "a") (data (i32.const 115074) "a") (data (i32.const 115077) "a") (data (i32.const 115080) "a") (data (i32.const 115083) "a") (data (i32.const 115086) "a") (data (i32.const 115089) "a") (data (i32.const 115092) "a") (data (i32.const 115095) "a") (data (i32.const 115098) "a") (data (i32.const 115101) "a") (data (i32.const 115104) "a") (data (i32.const 115107) "a") (data (i32.const 115110) "a") (data (i32.const 115113) "a") (data (i32.const 115116) "a") (data (i32.const 115119) "a") (data (i32.const 115122) "a") (data (i32.const 115125) "a") (data (i32.const 115128) "a") (data (i32.const 115131) "a") (data (i32.const 115134) "a") (data (i32.const 115137) "a") (data (i32.const 115140) "a") (data (i32.const 115143) "a") (data (i32.const 115146) "a") (data (i32.const 115149) "a") (data (i32.const 115152) "a") (data (i32.const 115155) "a") (data (i32.const 115158) "a") (data (i32.const 115161) "a") (data (i32.const 115164) "a") (data (i32.const 115167) "a") (data (i32.const 115170) "a") (data (i32.const 115173) "a") (data (i32.const 115176) "a") (data (i32.const 115179) "a") (data (i32.const 115182) "a") (data (i32.const 115185) "a") (data (i32.const 115188) "a") (data (i32.const 115191) "a") (data (i32.const 115194) "a") (data (i32.const 115197) "a") (data (i32.const 115200) "a") (data (i32.const 115203) "a") (data (i32.const 115206) "a") (data (i32.const 115209) "a") (data (i32.const 115212) "a") (data (i32.const 115215) "a") (data (i32.const 115218) "a") (data (i32.const 115221) "a") (data (i32.const 115224) "a") (data (i32.const 115227) "a") (data (i32.const 115230) "a") (data (i32.const 115233) "a") (data (i32.const 115236) "a") (data (i32.const 115239) "a") (data (i32.const 115242) "a") (data (i32.const 115245) "a") (data (i32.const 115248) "a") (data (i32.const 115251) "a") (data (i32.const 115254) "a") (data (i32.const 115257) "a") (data (i32.const 115260) "a") (data (i32.const 115263) "a") (data (i32.const 115266) "a") (data (i32.const 115269) "a") (data (i32.const 115272) "a") (data (i32.const 115275) "a") (data (i32.const 115278) "a") (data (i32.const 115281) "a") (data (i32.const 115284) "a") (data (i32.const 115287) "a") (data (i32.const 115290) "a") (data (i32.const 115293) "a") (data (i32.const 115296) "a") (data (i32.const 115299) "a") (data (i32.const 115302) "a") (data (i32.const 115305) "a") (data (i32.const 115308) "a") (data (i32.const 115311) "a") (data (i32.const 115314) "a") (data (i32.const 115317) "a") (data (i32.const 115320) "a") (data (i32.const 115323) "a") (data (i32.const 115326) "a") (data (i32.const 115329) "a") (data (i32.const 115332) "a") (data (i32.const 115335) "a") (data (i32.const 115338) "a") (data (i32.const 115341) "a") (data (i32.const 115344) "a") (data (i32.const 115347) "a") (data (i32.const 115350) "a") (data (i32.const 115353) "a") (data (i32.const 115356) "a") (data (i32.const 115359) "a") (data (i32.const 115362) "a") (data (i32.const 115365) "a") (data (i32.const 115368) "a") (data (i32.const 115371) "a") (data (i32.const 115374) "a") (data (i32.const 115377) "a") (data (i32.const 115380) "a") (data (i32.const 115383) "a") (data (i32.const 115386) "a") (data (i32.const 115389) "a") (data (i32.const 115392) "a") (data (i32.const 115395) "a") (data (i32.const 115398) "a") (data (i32.const 115401) "a") (data (i32.const 115404) "a") (data (i32.const 115407) "a") (data (i32.const 115410) "a") (data (i32.const 115413) "a") (data (i32.const 115416) "a") (data (i32.const 115419) "a") (data (i32.const 115422) "a") (data (i32.const 115425) "a") (data (i32.const 115428) "a") (data (i32.const 115431) "a") (data (i32.const 115434) "a") (data (i32.const 115437) "a") (data (i32.const 115440) "a") (data (i32.const 115443) "a") (data (i32.const 115446) "a") (data (i32.const 115449) "a") (data (i32.const 115452) "a") (data (i32.const 115455) "a") (data (i32.const 115458) "a") (data (i32.const 115461) "a") (data (i32.const 115464) "a") (data (i32.const 115467) "a") (data (i32.const 115470) "a") (data (i32.const 115473) "a") (data (i32.const 115476) "a") (data (i32.const 115479) "a") (data (i32.const 115482) "a") (data (i32.const 115485) "a") (data (i32.const 115488) "a") (data (i32.const 115491) "a") (data (i32.const 115494) "a") (data (i32.const 115497) "a") (data (i32.const 115500) "a") (data (i32.const 115503) "a") (data (i32.const 115506) "a") (data (i32.const 115509) "a") (data (i32.const 115512) "a") (data (i32.const 115515) "a") (data (i32.const 115518) "a") (data (i32.const 115521) "a") (data (i32.const 115524) "a") (data (i32.const 115527) "a") (data (i32.const 115530) "a") (data (i32.const 115533) "a") (data (i32.const 115536) "a") (data (i32.const 115539) "a") (data (i32.const 115542) "a") (data (i32.const 115545) "a") (data (i32.const 115548) "a") (data (i32.const 115551) "a") (data (i32.const 115554) "a") (data (i32.const 115557) "a") (data (i32.const 115560) "a") (data (i32.const 115563) "a") (data (i32.const 115566) "a") (data (i32.const 115569) "a") (data (i32.const 115572) "a") (data (i32.const 115575) "a") (data (i32.const 115578) "a") (data (i32.const 115581) "a") (data (i32.const 115584) "a") (data (i32.const 115587) "a") (data (i32.const 115590) "a") (data (i32.const 115593) "a") (data (i32.const 115596) "a") (data (i32.const 115599) "a") (data (i32.const 115602) "a") (data (i32.const 115605) "a") (data (i32.const 115608) "a") (data (i32.const 115611) "a") (data (i32.const 115614) "a") (data (i32.const 115617) "a") (data (i32.const 115620) "a") (data (i32.const 115623) "a") (data (i32.const 115626) "a") (data (i32.const 115629) "a") (data (i32.const 115632) "a") (data (i32.const 115635) "a") (data (i32.const 115638) "a") (data (i32.const 115641) "a") (data (i32.const 115644) "a") (data (i32.const 115647) "a") (data (i32.const 115650) "a") (data (i32.const 115653) "a") (data (i32.const 115656) "a") (data (i32.const 115659) "a") (data (i32.const 115662) "a") (data (i32.const 115665) "a") (data (i32.const 115668) "a") (data (i32.const 115671) "a") (data (i32.const 115674) "a") (data (i32.const 115677) "a") (data (i32.const 115680) "a") (data (i32.const 115683) "a") (data (i32.const 115686) "a") (data (i32.const 115689) "a") (data (i32.const 115692) "a") (data (i32.const 115695) "a") (data (i32.const 115698) "a") (data (i32.const 115701) "a") (data (i32.const 115704) "a") (data (i32.const 115707) "a") (data (i32.const 115710) "a") (data (i32.const 115713) "a") (data (i32.const 115716) "a") (data (i32.const 115719) "a") (data (i32.const 115722) "a") (data (i32.const 115725) "a") (data (i32.const 115728) "a") (data (i32.const 115731) "a") (data (i32.const 115734) "a") (data (i32.const 115737) "a") (data (i32.const 115740) "a") (data (i32.const 115743) "a") (data (i32.const 115746) "a") (data (i32.const 115749) "a") (data (i32.const 115752) "a") (data (i32.const 115755) "a") (data (i32.const 115758) "a") (data (i32.const 115761) "a") (data (i32.const 115764) "a") (data (i32.const 115767) "a") (data (i32.const 115770) "a") (data (i32.const 115773) "a") (data (i32.const 115776) "a") (data (i32.const 115779) "a") (data (i32.const 115782) "a") (data (i32.const 115785) "a") (data (i32.const 115788) "a") (data (i32.const 115791) "a") (data (i32.const 115794) "a") (data (i32.const 115797) "a") (data (i32.const 115800) "a") (data (i32.const 115803) "a") (data (i32.const 115806) "a") (data (i32.const 115809) "a") (data (i32.const 115812) "a") (data (i32.const 115815) "a") (data (i32.const 115818) "a") (data (i32.const 115821) "a") (data (i32.const 115824) "a") (data (i32.const 115827) "a") (data (i32.const 115830) "a") (data (i32.const 115833) "a") (data (i32.const 115836) "a") (data (i32.const 115839) "a") (data (i32.const 115842) "a") (data (i32.const 115845) "a") (data (i32.const 115848) "a") (data (i32.const 115851) "a") (data (i32.const 115854) "a") (data (i32.const 115857) "a") (data (i32.const 115860) "a") (data (i32.const 115863) "a") (data (i32.const 115866) "a") (data (i32.const 115869) "a") (data (i32.const 115872) "a") (data (i32.const 115875) "a") (data (i32.const 115878) "a") (data (i32.const 115881) "a") (data (i32.const 115884) "a") (data (i32.const 115887) "a") (data (i32.const 115890) "a") (data (i32.const 115893) "a") (data (i32.const 115896) "a") (data (i32.const 115899) "a") (data (i32.const 115902) "a") (data (i32.const 115905) "a") (data (i32.const 115908) "a") (data (i32.const 115911) "a") (data (i32.const 115914) "a") (data (i32.const 115917) "a") (data (i32.const 115920) "a") (data (i32.const 115923) "a") (data (i32.const 115926) "a") (data (i32.const 115929) "a") (data (i32.const 115932) "a") (data (i32.const 115935) "a") (data (i32.const 115938) "a") (data (i32.const 115941) "a") (data (i32.const 115944) "a") (data (i32.const 115947) "a") (data (i32.const 115950) "a") (data (i32.const 115953) "a") (data (i32.const 115956) "a") (data (i32.const 115959) "a") (data (i32.const 115962) "a") (data (i32.const 115965) "a") (data (i32.const 115968) "a") (data (i32.const 115971) "a") (data (i32.const 115974) "a") (data (i32.const 115977) "a") (data (i32.const 115980) "a") (data (i32.const 115983) "a") (data (i32.const 115986) "a") (data (i32.const 115989) "a") (data (i32.const 115992) "a") (data (i32.const 115995) "a") (data (i32.const 115998) "a") (data (i32.const 116001) "a") (data (i32.const 116004) "a") (data (i32.const 116007) "a") (data (i32.const 116010) "a") (data (i32.const 116013) "a") (data (i32.const 116016) "a") (data (i32.const 116019) "a") (data (i32.const 116022) "a") (data (i32.const 116025) "a") (data (i32.const 116028) "a") (data (i32.const 116031) "a") (data (i32.const 116034) "a") (data (i32.const 116037) "a") (data (i32.const 116040) "a") (data (i32.const 116043) "a") (data (i32.const 116046) "a") (data (i32.const 116049) "a") (data (i32.const 116052) "a") (data (i32.const 116055) "a") (data (i32.const 116058) "a") (data (i32.const 116061) "a") (data (i32.const 116064) "a") (data (i32.const 116067) "a") (data (i32.const 116070) "a") (data (i32.const 116073) "a") (data (i32.const 116076) "a") (data (i32.const 116079) "a") (data (i32.const 116082) "a") (data (i32.const 116085) "a") (data (i32.const 116088) "a") (data (i32.const 116091) "a") (data (i32.const 116094) "a") (data (i32.const 116097) "a") (data (i32.const 116100) "a") (data (i32.const 116103) "a") (data (i32.const 116106) "a") (data (i32.const 116109) "a") (data (i32.const 116112) "a") (data (i32.const 116115) "a") (data (i32.const 116118) "a") (data (i32.const 116121) "a") (data (i32.const 116124) "a") (data (i32.const 116127) "a") (data (i32.const 116130) "a") (data (i32.const 116133) "a") (data (i32.const 116136) "a") (data (i32.const 116139) "a") (data (i32.const 116142) "a") (data (i32.const 116145) "a") (data (i32.const 116148) "a") (data (i32.const 116151) "a") (data (i32.const 116154) "a") (data (i32.const 116157) "a") (data (i32.const 116160) "a") (data (i32.const 116163) "a") (data (i32.const 116166) "a") (data (i32.const 116169) "a") (data (i32.const 116172) "a") (data (i32.const 116175) "a") (data (i32.const 116178) "a") (data (i32.const 116181) "a") (data (i32.const 116184) "a") (data (i32.const 116187) "a") (data (i32.const 116190) "a") (data (i32.const 116193) "a") (data (i32.const 116196) "a") (data (i32.const 116199) "a") (data (i32.const 116202) "a") (data (i32.const 116205) "a") (data (i32.const 116208) "a") (data (i32.const 116211) "a") (data (i32.const 116214) "a") (data (i32.const 116217) "a") (data (i32.const 116220) "a") (data (i32.const 116223) "a") (data (i32.const 116226) "a") (data (i32.const 116229) "a") (data (i32.const 116232) "a") (data (i32.const 116235) "a") (data (i32.const 116238) "a") (data (i32.const 116241) "a") (data (i32.const 116244) "a") (data (i32.const 116247) "a") (data (i32.const 116250) "a") (data (i32.const 116253) "a") (data (i32.const 116256) "a") (data (i32.const 116259) "a") (data (i32.const 116262) "a") (data (i32.const 116265) "a") (data (i32.const 116268) "a") (data (i32.const 116271) "a") (data (i32.const 116274) "a") (data (i32.const 116277) "a") (data (i32.const 116280) "a") (data (i32.const 116283) "a") (data (i32.const 116286) "a") (data (i32.const 116289) "a") (data (i32.const 116292) "a") (data (i32.const 116295) "a") (data (i32.const 116298) "a") (data (i32.const 116301) "a") (data (i32.const 116304) "a") (data (i32.const 116307) "a") (data (i32.const 116310) "a") (data (i32.const 116313) "a") (data (i32.const 116316) "a") (data (i32.const 116319) "a") (data (i32.const 116322) "a") (data (i32.const 116325) "a") (data (i32.const 116328) "a") (data (i32.const 116331) "a") (data (i32.const 116334) "a") (data (i32.const 116337) "a") (data (i32.const 116340) "a") (data (i32.const 116343) "a") (data (i32.const 116346) "a") (data (i32.const 116349) "a") (data (i32.const 116352) "a") (data (i32.const 116355) "a") (data (i32.const 116358) "a") (data (i32.const 116361) "a") (data (i32.const 116364) "a") (data (i32.const 116367) "a") (data (i32.const 116370) "a") (data (i32.const 116373) "a") (data (i32.const 116376) "a") (data (i32.const 116379) "a") (data (i32.const 116382) "a") (data (i32.const 116385) "a") (data (i32.const 116388) "a") (data (i32.const 116391) "a") (data (i32.const 116394) "a") (data (i32.const 116397) "a") (data (i32.const 116400) "a") (data (i32.const 116403) "a") (data (i32.const 116406) "a") (data (i32.const 116409) "a") (data (i32.const 116412) "a") (data (i32.const 116415) "a") (data (i32.const 116418) "a") (data (i32.const 116421) "a") (data (i32.const 116424) "a") (data (i32.const 116427) "a") (data (i32.const 116430) "a") (data (i32.const 116433) "a") (data (i32.const 116436) "a") (data (i32.const 116439) "a") (data (i32.const 116442) "a") (data (i32.const 116445) "a") (data (i32.const 116448) "a") (data (i32.const 116451) "a") (data (i32.const 116454) "a") (data (i32.const 116457) "a") (data (i32.const 116460) "a") (data (i32.const 116463) "a") (data (i32.const 116466) "a") (data (i32.const 116469) "a") (data (i32.const 116472) "a") (data (i32.const 116475) "a") (data (i32.const 116478) "a") (data (i32.const 116481) "a") (data (i32.const 116484) "a") (data (i32.const 116487) "a") (data (i32.const 116490) "a") (data (i32.const 116493) "a") (data (i32.const 116496) "a") (data (i32.const 116499) "a") (data (i32.const 116502) "a") (data (i32.const 116505) "a") (data (i32.const 116508) "a") (data (i32.const 116511) "a") (data (i32.const 116514) "a") (data (i32.const 116517) "a") (data (i32.const 116520) "a") (data (i32.const 116523) "a") (data (i32.const 116526) "a") (data (i32.const 116529) "a") (data (i32.const 116532) "a") (data (i32.const 116535) "a") (data (i32.const 116538) "a") (data (i32.const 116541) "a") (data (i32.const 116544) "a") (data (i32.const 116547) "a") (data (i32.const 116550) "a") (data (i32.const 116553) "a") (data (i32.const 116556) "a") (data (i32.const 116559) "a") (data (i32.const 116562) "a") (data (i32.const 116565) "a") (data (i32.const 116568) "a") (data (i32.const 116571) "a") (data (i32.const 116574) "a") (data (i32.const 116577) "a") (data (i32.const 116580) "a") (data (i32.const 116583) "a") (data (i32.const 116586) "a") (data (i32.const 116589) "a") (data (i32.const 116592) "a") (data (i32.const 116595) "a") (data (i32.const 116598) "a") (data (i32.const 116601) "a") (data (i32.const 116604) "a") (data (i32.const 116607) "a") (data (i32.const 116610) "a") (data (i32.const 116613) "a") (data (i32.const 116616) "a") (data (i32.const 116619) "a") (data (i32.const 116622) "a") (data (i32.const 116625) "a") (data (i32.const 116628) "a") (data (i32.const 116631) "a") (data (i32.const 116634) "a") (data (i32.const 116637) "a") (data (i32.const 116640) "a") (data (i32.const 116643) "a") (data (i32.const 116646) "a") (data (i32.const 116649) "a") (data (i32.const 116652) "a") (data (i32.const 116655) "a") (data (i32.const 116658) "a") (data (i32.const 116661) "a") (data (i32.const 116664) "a") (data (i32.const 116667) "a") (data (i32.const 116670) "a") (data (i32.const 116673) "a") (data (i32.const 116676) "a") (data (i32.const 116679) "a") (data (i32.const 116682) "a") (data (i32.const 116685) "a") (data (i32.const 116688) "a") (data (i32.const 116691) "a") (data (i32.const 116694) "a") (data (i32.const 116697) "a") (data (i32.const 116700) "a") (data (i32.const 116703) "a") (data (i32.const 116706) "a") (data (i32.const 116709) "a") (data (i32.const 116712) "a") (data (i32.const 116715) "a") (data (i32.const 116718) "a") (data (i32.const 116721) "a") (data (i32.const 116724) "a") (data (i32.const 116727) "a") (data (i32.const 116730) "a") (data (i32.const 116733) "a") (data (i32.const 116736) "a") (data (i32.const 116739) "a") (data (i32.const 116742) "a") (data (i32.const 116745) "a") (data (i32.const 116748) "a") (data (i32.const 116751) "a") (data (i32.const 116754) "a") (data (i32.const 116757) "a") (data (i32.const 116760) "a") (data (i32.const 116763) "a") (data (i32.const 116766) "a") (data (i32.const 116769) "a") (data (i32.const 116772) "a") (data (i32.const 116775) "a") (data (i32.const 116778) "a") (data (i32.const 116781) "a") (data (i32.const 116784) "a") (data (i32.const 116787) "a") (data (i32.const 116790) "a") (data (i32.const 116793) "a") (data (i32.const 116796) "a") (data (i32.const 116799) "a") (data (i32.const 116802) "a") (data (i32.const 116805) "a") (data (i32.const 116808) "a") (data (i32.const 116811) "a") (data (i32.const 116814) "a") (data (i32.const 116817) "a") (data (i32.const 116820) "a") (data (i32.const 116823) "a") (data (i32.const 116826) "a") (data (i32.const 116829) "a") (data (i32.const 116832) "a") (data (i32.const 116835) "a") (data (i32.const 116838) "a") (data (i32.const 116841) "a") (data (i32.const 116844) "a") (data (i32.const 116847) "a") (data (i32.const 116850) "a") (data (i32.const 116853) "a") (data (i32.const 116856) "a") (data (i32.const 116859) "a") (data (i32.const 116862) "a") (data (i32.const 116865) "a") (data (i32.const 116868) "a") (data (i32.const 116871) "a") (data (i32.const 116874) "a") (data (i32.const 116877) "a") (data (i32.const 116880) "a") (data (i32.const 116883) "a") (data (i32.const 116886) "a") (data (i32.const 116889) "a") (data (i32.const 116892) "a") (data (i32.const 116895) "a") (data (i32.const 116898) "a") (data (i32.const 116901) "a") (data (i32.const 116904) "a") (data (i32.const 116907) "a") (data (i32.const 116910) "a") (data (i32.const 116913) "a") (data (i32.const 116916) "a") (data (i32.const 116919) "a") (data (i32.const 116922) "a") (data (i32.const 116925) "a") (data (i32.const 116928) "a") (data (i32.const 116931) "a") (data (i32.const 116934) "a") (data (i32.const 116937) "a") (data (i32.const 116940) "a") (data (i32.const 116943) "a") (data (i32.const 116946) "a") (data (i32.const 116949) "a") (data (i32.const 116952) "a") (data (i32.const 116955) "a") (data (i32.const 116958) "a") (data (i32.const 116961) "a") (data (i32.const 116964) "a") (data (i32.const 116967) "a") (data (i32.const 116970) "a") (data (i32.const 116973) "a") (data (i32.const 116976) "a") (data (i32.const 116979) "a") (data (i32.const 116982) "a") (data (i32.const 116985) "a") (data (i32.const 116988) "a") (data (i32.const 116991) "a") (data (i32.const 116994) "a") (data (i32.const 116997) "a") (data (i32.const 117000) "a") (data (i32.const 117003) "a") (data (i32.const 117006) "a") (data (i32.const 117009) "a") (data (i32.const 117012) "a") (data (i32.const 117015) "a") (data (i32.const 117018) "a") (data (i32.const 117021) "a") (data (i32.const 117024) "a") (data (i32.const 117027) "a") (data (i32.const 117030) "a") (data (i32.const 117033) "a") (data (i32.const 117036) "a") (data (i32.const 117039) "a") (data (i32.const 117042) "a") (data (i32.const 117045) "a") (data (i32.const 117048) "a") (data (i32.const 117051) "a") (data (i32.const 117054) "a") (data (i32.const 117057) "a") (data (i32.const 117060) "a") (data (i32.const 117063) "a") (data (i32.const 117066) "a") (data (i32.const 117069) "a") (data (i32.const 117072) "a") (data (i32.const 117075) "a") (data (i32.const 117078) "a") (data (i32.const 117081) "a") (data (i32.const 117084) "a") (data (i32.const 117087) "a") (data (i32.const 117090) "a") (data (i32.const 117093) "a") (data (i32.const 117096) "a") (data (i32.const 117099) "a") (data (i32.const 117102) "a") (data (i32.const 117105) "a") (data (i32.const 117108) "a") (data (i32.const 117111) "a") (data (i32.const 117114) "a") (data (i32.const 117117) "a") (data (i32.const 117120) "a") (data (i32.const 117123) "a") (data (i32.const 117126) "a") (data (i32.const 117129) "a") (data (i32.const 117132) "a") (data (i32.const 117135) "a") (data (i32.const 117138) "a") (data (i32.const 117141) "a") (data (i32.const 117144) "a") (data (i32.const 117147) "a") (data (i32.const 117150) "a") (data (i32.const 117153) "a") (data (i32.const 117156) "a") (data (i32.const 117159) "a") (data (i32.const 117162) "a") (data (i32.const 117165) "a") (data (i32.const 117168) "a") (data (i32.const 117171) "a") (data (i32.const 117174) "a") (data (i32.const 117177) "a") (data (i32.const 117180) "a") (data (i32.const 117183) "a") (data (i32.const 117186) "a") (data (i32.const 117189) "a") (data (i32.const 117192) "a") (data (i32.const 117195) "a") (data (i32.const 117198) "a") (data (i32.const 117201) "a") (data (i32.const 117204) "a") (data (i32.const 117207) "a") (data (i32.const 117210) "a") (data (i32.const 117213) "a") (data (i32.const 117216) "a") (data (i32.const 117219) "a") (data (i32.const 117222) "a") (data (i32.const 117225) "a") (data (i32.const 117228) "a") (data (i32.const 117231) "a") (data (i32.const 117234) "a") (data (i32.const 117237) "a") (data (i32.const 117240) "a") (data (i32.const 117243) "a") (data (i32.const 117246) "a") (data (i32.const 117249) "a") (data (i32.const 117252) "a") (data (i32.const 117255) "a") (data (i32.const 117258) "a") (data (i32.const 117261) "a") (data (i32.const 117264) "a") (data (i32.const 117267) "a") (data (i32.const 117270) "a") (data (i32.const 117273) "a") (data (i32.const 117276) "a") (data (i32.const 117279) "a") (data (i32.const 117282) "a") (data (i32.const 117285) "a") (data (i32.const 117288) "a") (data (i32.const 117291) "a") (data (i32.const 117294) "a") (data (i32.const 117297) "a") (data (i32.const 117300) "a") (data (i32.const 117303) "a") (data (i32.const 117306) "a") (data (i32.const 117309) "a") (data (i32.const 117312) "a") (data (i32.const 117315) "a") (data (i32.const 117318) "a") (data (i32.const 117321) "a") (data (i32.const 117324) "a") (data (i32.const 117327) "a") (data (i32.const 117330) "a") (data (i32.const 117333) "a") (data (i32.const 117336) "a") (data (i32.const 117339) "a") (data (i32.const 117342) "a") (data (i32.const 117345) "a") (data (i32.const 117348) "a") (data (i32.const 117351) "a") (data (i32.const 117354) "a") (data (i32.const 117357) "a") (data (i32.const 117360) "a") (data (i32.const 117363) "a") (data (i32.const 117366) "a") (data (i32.const 117369) "a") (data (i32.const 117372) "a") (data (i32.const 117375) "a") (data (i32.const 117378) "a") (data (i32.const 117381) "a") (data (i32.const 117384) "a") (data (i32.const 117387) "a") (data (i32.const 117390) "a") (data (i32.const 117393) "a") (data (i32.const 117396) "a") (data (i32.const 117399) "a") (data (i32.const 117402) "a") (data (i32.const 117405) "a") (data (i32.const 117408) "a") (data (i32.const 117411) "a") (data (i32.const 117414) "a") (data (i32.const 117417) "a") (data (i32.const 117420) "a") (data (i32.const 117423) "a") (data (i32.const 117426) "a") (data (i32.const 117429) "a") (data (i32.const 117432) "a") (data (i32.const 117435) "a") (data (i32.const 117438) "a") (data (i32.const 117441) "a") (data (i32.const 117444) "a") (data (i32.const 117447) "a") (data (i32.const 117450) "a") (data (i32.const 117453) "a") (data (i32.const 117456) "a") (data (i32.const 117459) "a") (data (i32.const 117462) "a") (data (i32.const 117465) "a") (data (i32.const 117468) "a") (data (i32.const 117471) "a") (data (i32.const 117474) "a") (data (i32.const 117477) "a") (data (i32.const 117480) "a") (data (i32.const 117483) "a") (data (i32.const 117486) "a") (data (i32.const 117489) "a") (data (i32.const 117492) "a") (data (i32.const 117495) "a") (data (i32.const 117498) "a") (data (i32.const 117501) "a") (data (i32.const 117504) "a") (data (i32.const 117507) "a") (data (i32.const 117510) "a") (data (i32.const 117513) "a") (data (i32.const 117516) "a") (data (i32.const 117519) "a") (data (i32.const 117522) "a") (data (i32.const 117525) "a") (data (i32.const 117528) "a") (data (i32.const 117531) "a") (data (i32.const 117534) "a") (data (i32.const 117537) "a") (data (i32.const 117540) "a") (data (i32.const 117543) "a") (data (i32.const 117546) "a") (data (i32.const 117549) "a") (data (i32.const 117552) "a") (data (i32.const 117555) "a") (data (i32.const 117558) "a") (data (i32.const 117561) "a") (data (i32.const 117564) "a") (data (i32.const 117567) "a") (data (i32.const 117570) "a") (data (i32.const 117573) "a") (data (i32.const 117576) "a") (data (i32.const 117579) "a") (data (i32.const 117582) "a") (data (i32.const 117585) "a") (data (i32.const 117588) "a") (data (i32.const 117591) "a") (data (i32.const 117594) "a") (data (i32.const 117597) "a") (data (i32.const 117600) "a") (data (i32.const 117603) "a") (data (i32.const 117606) "a") (data (i32.const 117609) "a") (data (i32.const 117612) "a") (data (i32.const 117615) "a") (data (i32.const 117618) "a") (data (i32.const 117621) "a") (data (i32.const 117624) "a") (data (i32.const 117627) "a") (data (i32.const 117630) "a") (data (i32.const 117633) "a") (data (i32.const 117636) "a") (data (i32.const 117639) "a") (data (i32.const 117642) "a") (data (i32.const 117645) "a") (data (i32.const 117648) "a") (data (i32.const 117651) "a") (data (i32.const 117654) "a") (data (i32.const 117657) "a") (data (i32.const 117660) "a") (data (i32.const 117663) "a") (data (i32.const 117666) "a") (data (i32.const 117669) "a") (data (i32.const 117672) "a") (data (i32.const 117675) "a") (data (i32.const 117678) "a") (data (i32.const 117681) "a") (data (i32.const 117684) "a") (data (i32.const 117687) "a") (data (i32.const 117690) "a") (data (i32.const 117693) "a") (data (i32.const 117696) "a") (data (i32.const 117699) "a") (data (i32.const 117702) "a") (data (i32.const 117705) "a") (data (i32.const 117708) "a") (data (i32.const 117711) "a") (data (i32.const 117714) "a") (data (i32.const 117717) "a") (data (i32.const 117720) "a") (data (i32.const 117723) "a") (data (i32.const 117726) "a") (data (i32.const 117729) "a") (data (i32.const 117732) "a") (data (i32.const 117735) "a") (data (i32.const 117738) "a") (data (i32.const 117741) "a") (data (i32.const 117744) "a") (data (i32.const 117747) "a") (data (i32.const 117750) "a") (data (i32.const 117753) "a") (data (i32.const 117756) "a") (data (i32.const 117759) "a") (data (i32.const 117762) "a") (data (i32.const 117765) "a") (data (i32.const 117768) "a") (data (i32.const 117771) "a") (data (i32.const 117774) "a") (data (i32.const 117777) "a") (data (i32.const 117780) "a") (data (i32.const 117783) "a") (data (i32.const 117786) "a") (data (i32.const 117789) "a") (data (i32.const 117792) "a") (data (i32.const 117795) "a") (data (i32.const 117798) "a") (data (i32.const 117801) "a") (data (i32.const 117804) "a") (data (i32.const 117807) "a") (data (i32.const 117810) "a") (data (i32.const 117813) "a") (data (i32.const 117816) "a") (data (i32.const 117819) "a") (data (i32.const 117822) "a") (data (i32.const 117825) "a") (data (i32.const 117828) "a") (data (i32.const 117831) "a") (data (i32.const 117834) "a") (data (i32.const 117837) "a") (data (i32.const 117840) "a") (data (i32.const 117843) "a") (data (i32.const 117846) "a") (data (i32.const 117849) "a") (data (i32.const 117852) "a") (data (i32.const 117855) "a") (data (i32.const 117858) "a") (data (i32.const 117861) "a") (data (i32.const 117864) "a") (data (i32.const 117867) "a") (data (i32.const 117870) "a") (data (i32.const 117873) "a") (data (i32.const 117876) "a") (data (i32.const 117879) "a") (data (i32.const 117882) "a") (data (i32.const 117885) "a") (data (i32.const 117888) "a") (data (i32.const 117891) "a") (data (i32.const 117894) "a") (data (i32.const 117897) "a") (data (i32.const 117900) "a") (data (i32.const 117903) "a") (data (i32.const 117906) "a") (data (i32.const 117909) "a") (data (i32.const 117912) "a") (data (i32.const 117915) "a") (data (i32.const 117918) "a") (data (i32.const 117921) "a") (data (i32.const 117924) "a") (data (i32.const 117927) "a") (data (i32.const 117930) "a") (data (i32.const 117933) "a") (data (i32.const 117936) "a") (data (i32.const 117939) "a") (data (i32.const 117942) "a") (data (i32.const 117945) "a") (data (i32.const 117948) "a") (data (i32.const 117951) "a") (data (i32.const 117954) "a") (data (i32.const 117957) "a") (data (i32.const 117960) "a") (data (i32.const 117963) "a") (data (i32.const 117966) "a") (data (i32.const 117969) "a") (data (i32.const 117972) "a") (data (i32.const 117975) "a") (data (i32.const 117978) "a") (data (i32.const 117981) "a") (data (i32.const 117984) "a") (data (i32.const 117987) "a") (data (i32.const 117990) "a") (data (i32.const 117993) "a") (data (i32.const 117996) "a") (data (i32.const 117999) "a") (data (i32.const 118002) "a") (data (i32.const 118005) "a") (data (i32.const 118008) "a") (data (i32.const 118011) "a") (data (i32.const 118014) "a") (data (i32.const 118017) "a") (data (i32.const 118020) "a") (data (i32.const 118023) "a") (data (i32.const 118026) "a") (data (i32.const 118029) "a") (data (i32.const 118032) "a") (data (i32.const 118035) "a") (data (i32.const 118038) "a") (data (i32.const 118041) "a") (data (i32.const 118044) "a") (data (i32.const 118047) "a") (data (i32.const 118050) "a") (data (i32.const 118053) "a") (data (i32.const 118056) "a") (data (i32.const 118059) "a") (data (i32.const 118062) "a") (data (i32.const 118065) "a") (data (i32.const 118068) "a") (data (i32.const 118071) "a") (data (i32.const 118074) "a") (data (i32.const 118077) "a") (data (i32.const 118080) "a") (data (i32.const 118083) "a") (data (i32.const 118086) "a") (data (i32.const 118089) "a") (data (i32.const 118092) "a") (data (i32.const 118095) "a") (data (i32.const 118098) "a") (data (i32.const 118101) "a") (data (i32.const 118104) "a") (data (i32.const 118107) "a") (data (i32.const 118110) "a") (data (i32.const 118113) "a") (data (i32.const 118116) "a") (data (i32.const 118119) "a") (data (i32.const 118122) "a") (data (i32.const 118125) "a") (data (i32.const 118128) "a") (data (i32.const 118131) "a") (data (i32.const 118134) "a") (data (i32.const 118137) "a") (data (i32.const 118140) "a") (data (i32.const 118143) "a") (data (i32.const 118146) "a") (data (i32.const 118149) "a") (data (i32.const 118152) "a") (data (i32.const 118155) "a") (data (i32.const 118158) "a") (data (i32.const 118161) "a") (data (i32.const 118164) "a") (data (i32.const 118167) "a") (data (i32.const 118170) "a") (data (i32.const 118173) "a") (data (i32.const 118176) "a") (data (i32.const 118179) "a") (data (i32.const 118182) "a") (data (i32.const 118185) "a") (data (i32.const 118188) "a") (data (i32.const 118191) "a") (data (i32.const 118194) "a") (data (i32.const 118197) "a") (data (i32.const 118200) "a") (data (i32.const 118203) "a") (data (i32.const 118206) "a") (data (i32.const 118209) "a") (data (i32.const 118212) "a") (data (i32.const 118215) "a") (data (i32.const 118218) "a") (data (i32.const 118221) "a") (data (i32.const 118224) "a") (data (i32.const 118227) "a") (data (i32.const 118230) "a") (data (i32.const 118233) "a") (data (i32.const 118236) "a") (data (i32.const 118239) "a") (data (i32.const 118242) "a") (data (i32.const 118245) "a") (data (i32.const 118248) "a") (data (i32.const 118251) "a") (data (i32.const 118254) "a") (data (i32.const 118257) "a") (data (i32.const 118260) "a") (data (i32.const 118263) "a") (data (i32.const 118266) "a") (data (i32.const 118269) "a") (data (i32.const 118272) "a") (data (i32.const 118275) "a") (data (i32.const 118278) "a") (data (i32.const 118281) "a") (data (i32.const 118284) "a") (data (i32.const 118287) "a") (data (i32.const 118290) "a") (data (i32.const 118293) "a") (data (i32.const 118296) "a") (data (i32.const 118299) "a") (data (i32.const 118302) "a") (data (i32.const 118305) "a") (data (i32.const 118308) "a") (data (i32.const 118311) "a") (data (i32.const 118314) "a") (data (i32.const 118317) "a") (data (i32.const 118320) "a") (data (i32.const 118323) "a") (data (i32.const 118326) "a") (data (i32.const 118329) "a") (data (i32.const 118332) "a") (data (i32.const 118335) "a") (data (i32.const 118338) "a") (data (i32.const 118341) "a") (data (i32.const 118344) "a") (data (i32.const 118347) "a") (data (i32.const 118350) "a") (data (i32.const 118353) "a") (data (i32.const 118356) "a") (data (i32.const 118359) "a") (data (i32.const 118362) "a") (data (i32.const 118365) "a") (data (i32.const 118368) "a") (data (i32.const 118371) "a") (data (i32.const 118374) "a") (data (i32.const 118377) "a") (data (i32.const 118380) "a") (data (i32.const 118383) "a") (data (i32.const 118386) "a") (data (i32.const 118389) "a") (data (i32.const 118392) "a") (data (i32.const 118395) "a") (data (i32.const 118398) "a") (data (i32.const 118401) "a") (data (i32.const 118404) "a") (data (i32.const 118407) "a") (data (i32.const 118410) "a") (data (i32.const 118413) "a") (data (i32.const 118416) "a") (data (i32.const 118419) "a") (data (i32.const 118422) "a") (data (i32.const 118425) "a") (data (i32.const 118428) "a") (data (i32.const 118431) "a") (data (i32.const 118434) "a") (data (i32.const 118437) "a") (data (i32.const 118440) "a") (data (i32.const 118443) "a") (data (i32.const 118446) "a") (data (i32.const 118449) "a") (data (i32.const 118452) "a") (data (i32.const 118455) "a") (data (i32.const 118458) "a") (data (i32.const 118461) "a") (data (i32.const 118464) "a") (data (i32.const 118467) "a") (data (i32.const 118470) "a") (data (i32.const 118473) "a") (data (i32.const 118476) "a") (data (i32.const 118479) "a") (data (i32.const 118482) "a") (data (i32.const 118485) "a") (data (i32.const 118488) "a") (data (i32.const 118491) "a") (data (i32.const 118494) "a") (data (i32.const 118497) "a") (data (i32.const 118500) "a") (data (i32.const 118503) "a") (data (i32.const 118506) "a") (data (i32.const 118509) "a") (data (i32.const 118512) "a") (data (i32.const 118515) "a") (data (i32.const 118518) "a") (data (i32.const 118521) "a") (data (i32.const 118524) "a") (data (i32.const 118527) "a") (data (i32.const 118530) "a") (data (i32.const 118533) "a") (data (i32.const 118536) "a") (data (i32.const 118539) "a") (data (i32.const 118542) "a") (data (i32.const 118545) "a") (data (i32.const 118548) "a") (data (i32.const 118551) "a") (data (i32.const 118554) "a") (data (i32.const 118557) "a") (data (i32.const 118560) "a") (data (i32.const 118563) "a") (data (i32.const 118566) "a") (data (i32.const 118569) "a") (data (i32.const 118572) "a") (data (i32.const 118575) "a") (data (i32.const 118578) "a") (data (i32.const 118581) "a") (data (i32.const 118584) "a") (data (i32.const 118587) "a") (data (i32.const 118590) "a") (data (i32.const 118593) "a") (data (i32.const 118596) "a") (data (i32.const 118599) "a") (data (i32.const 118602) "a") (data (i32.const 118605) "a") (data (i32.const 118608) "a") (data (i32.const 118611) "a") (data (i32.const 118614) "a") (data (i32.const 118617) "a") (data (i32.const 118620) "a") (data (i32.const 118623) "a") (data (i32.const 118626) "a") (data (i32.const 118629) "a") (data (i32.const 118632) "a") (data (i32.const 118635) "a") (data (i32.const 118638) "a") (data (i32.const 118641) "a") (data (i32.const 118644) "a") (data (i32.const 118647) "a") (data (i32.const 118650) "a") (data (i32.const 118653) "a") (data (i32.const 118656) "a") (data (i32.const 118659) "a") (data (i32.const 118662) "a") (data (i32.const 118665) "a") (data (i32.const 118668) "a") (data (i32.const 118671) "a") (data (i32.const 118674) "a") (data (i32.const 118677) "a") (data (i32.const 118680) "a") (data (i32.const 118683) "a") (data (i32.const 118686) "a") (data (i32.const 118689) "a") (data (i32.const 118692) "a") (data (i32.const 118695) "a") (data (i32.const 118698) "a") (data (i32.const 118701) "a") (data (i32.const 118704) "a") (data (i32.const 118707) "a") (data (i32.const 118710) "a") (data (i32.const 118713) "a") (data (i32.const 118716) "a") (data (i32.const 118719) "a") (data (i32.const 118722) "a") (data (i32.const 118725) "a") (data (i32.const 118728) "a") (data (i32.const 118731) "a") (data (i32.const 118734) "a") (data (i32.const 118737) "a") (data (i32.const 118740) "a") (data (i32.const 118743) "a") (data (i32.const 118746) "a") (data (i32.const 118749) "a") (data (i32.const 118752) "a") (data (i32.const 118755) "a") (data (i32.const 118758) "a") (data (i32.const 118761) "a") (data (i32.const 118764) "a") (data (i32.const 118767) "a") (data (i32.const 118770) "a") (data (i32.const 118773) "a") (data (i32.const 118776) "a") (data (i32.const 118779) "a") (data (i32.const 118782) "a") (data (i32.const 118785) "a") (data (i32.const 118788) "a") (data (i32.const 118791) "a") (data (i32.const 118794) "a") (data (i32.const 118797) "a") (data (i32.const 118800) "a") (data (i32.const 118803) "a") (data (i32.const 118806) "a") (data (i32.const 118809) "a") (data (i32.const 118812) "a") (data (i32.const 118815) "a") (data (i32.const 118818) "a") (data (i32.const 118821) "a") (data (i32.const 118824) "a") (data (i32.const 118827) "a") (data (i32.const 118830) "a") (data (i32.const 118833) "a") (data (i32.const 118836) "a") (data (i32.const 118839) "a") (data (i32.const 118842) "a") (data (i32.const 118845) "a") (data (i32.const 118848) "a") (data (i32.const 118851) "a") (data (i32.const 118854) "a") (data (i32.const 118857) "a") (data (i32.const 118860) "a") (data (i32.const 118863) "a") (data (i32.const 118866) "a") (data (i32.const 118869) "a") (data (i32.const 118872) "a") (data (i32.const 118875) "a") (data (i32.const 118878) "a") (data (i32.const 118881) "a") (data (i32.const 118884) "a") (data (i32.const 118887) "a") (data (i32.const 118890) "a") (data (i32.const 118893) "a") (data (i32.const 118896) "a") (data (i32.const 118899) "a") (data (i32.const 118902) "a") (data (i32.const 118905) "a") (data (i32.const 118908) "a") (data (i32.const 118911) "a") (data (i32.const 118914) "a") (data (i32.const 118917) "a") (data (i32.const 118920) "a") (data (i32.const 118923) "a") (data (i32.const 118926) "a") (data (i32.const 118929) "a") (data (i32.const 118932) "a") (data (i32.const 118935) "a") (data (i32.const 118938) "a") (data (i32.const 118941) "a") (data (i32.const 118944) "a") (data (i32.const 118947) "a") (data (i32.const 118950) "a") (data (i32.const 118953) "a") (data (i32.const 118956) "a") (data (i32.const 118959) "a") (data (i32.const 118962) "a") (data (i32.const 118965) "a") (data (i32.const 118968) "a") (data (i32.const 118971) "a") (data (i32.const 118974) "a") (data (i32.const 118977) "a") (data (i32.const 118980) "a") (data (i32.const 118983) "a") (data (i32.const 118986) "a") (data (i32.const 118989) "a") (data (i32.const 118992) "a") (data (i32.const 118995) "a") (data (i32.const 118998) "a") (data (i32.const 119001) "a") (data (i32.const 119004) "a") (data (i32.const 119007) "a") (data (i32.const 119010) "a") (data (i32.const 119013) "a") (data (i32.const 119016) "a") (data (i32.const 119019) "a") (data (i32.const 119022) "a") (data (i32.const 119025) "a") (data (i32.const 119028) "a") (data (i32.const 119031) "a") (data (i32.const 119034) "a") (data (i32.const 119037) "a") (data (i32.const 119040) "a") (data (i32.const 119043) "a") (data (i32.const 119046) "a") (data (i32.const 119049) "a") (data (i32.const 119052) "a") (data (i32.const 119055) "a") (data (i32.const 119058) "a") (data (i32.const 119061) "a") (data (i32.const 119064) "a") (data (i32.const 119067) "a") (data (i32.const 119070) "a") (data (i32.const 119073) "a") (data (i32.const 119076) "a") (data (i32.const 119079) "a") (data (i32.const 119082) "a") (data (i32.const 119085) "a") (data (i32.const 119088) "a") (data (i32.const 119091) "a") (data (i32.const 119094) "a") (data (i32.const 119097) "a") (data (i32.const 119100) "a") (data (i32.const 119103) "a") (data (i32.const 119106) "a") (data (i32.const 119109) "a") (data (i32.const 119112) "a") (data (i32.const 119115) "a") (data (i32.const 119118) "a") (data (i32.const 119121) "a") (data (i32.const 119124) "a") (data (i32.const 119127) "a") (data (i32.const 119130) "a") (data (i32.const 119133) "a") (data (i32.const 119136) "a") (data (i32.const 119139) "a") (data (i32.const 119142) "a") (data (i32.const 119145) "a") (data (i32.const 119148) "a") (data (i32.const 119151) "a") (data (i32.const 119154) "a") (data (i32.const 119157) "a") (data (i32.const 119160) "a") (data (i32.const 119163) "a") (data (i32.const 119166) "a") (data (i32.const 119169) "a") (data (i32.const 119172) "a") (data (i32.const 119175) "a") (data (i32.const 119178) "a") (data (i32.const 119181) "a") (data (i32.const 119184) "a") (data (i32.const 119187) "a") (data (i32.const 119190) "a") (data (i32.const 119193) "a") (data (i32.const 119196) "a") (data (i32.const 119199) "a") (data (i32.const 119202) "a") (data (i32.const 119205) "a") (data (i32.const 119208) "a") (data (i32.const 119211) "a") (data (i32.const 119214) "a") (data (i32.const 119217) "a") (data (i32.const 119220) "a") (data (i32.const 119223) "a") (data (i32.const 119226) "a") (data (i32.const 119229) "a") (data (i32.const 119232) "a") (data (i32.const 119235) "a") (data (i32.const 119238) "a") (data (i32.const 119241) "a") (data (i32.const 119244) "a") (data (i32.const 119247) "a") (data (i32.const 119250) "a") (data (i32.const 119253) "a") (data (i32.const 119256) "a") (data (i32.const 119259) "a") (data (i32.const 119262) "a") (data (i32.const 119265) "a") (data (i32.const 119268) "a") (data (i32.const 119271) "a") (data (i32.const 119274) "a") (data (i32.const 119277) "a") (data (i32.const 119280) "a") (data (i32.const 119283) "a") (data (i32.const 119286) "a") (data (i32.const 119289) "a") (data (i32.const 119292) "a") (data (i32.const 119295) "a") (data (i32.const 119298) "a") (data (i32.const 119301) "a") (data (i32.const 119304) "a") (data (i32.const 119307) "a") (data (i32.const 119310) "a") (data (i32.const 119313) "a") (data (i32.const 119316) "a") (data (i32.const 119319) "a") (data (i32.const 119322) "a") (data (i32.const 119325) "a") (data (i32.const 119328) "a") (data (i32.const 119331) "a") (data (i32.const 119334) "a") (data (i32.const 119337) "a") (data (i32.const 119340) "a") (data (i32.const 119343) "a") (data (i32.const 119346) "a") (data (i32.const 119349) "a") (data (i32.const 119352) "a") (data (i32.const 119355) "a") (data (i32.const 119358) "a") (data (i32.const 119361) "a") (data (i32.const 119364) "a") (data (i32.const 119367) "a") (data (i32.const 119370) "a") (data (i32.const 119373) "a") (data (i32.const 119376) "a") (data (i32.const 119379) "a") (data (i32.const 119382) "a") (data (i32.const 119385) "a") (data (i32.const 119388) "a") (data (i32.const 119391) "a") (data (i32.const 119394) "a") (data (i32.const 119397) "a") (data (i32.const 119400) "a") (data (i32.const 119403) "a") (data (i32.const 119406) "a") (data (i32.const 119409) "a") (data (i32.const 119412) "a") (data (i32.const 119415) "a") (data (i32.const 119418) "a") (data (i32.const 119421) "a") (data (i32.const 119424) "a") (data (i32.const 119427) "a") (data (i32.const 119430) "a") (data (i32.const 119433) "a") (data (i32.const 119436) "a") (data (i32.const 119439) "a") (data (i32.const 119442) "a") (data (i32.const 119445) "a") (data (i32.const 119448) "a") (data (i32.const 119451) "a") (data (i32.const 119454) "a") (data (i32.const 119457) "a") (data (i32.const 119460) "a") (data (i32.const 119463) "a") (data (i32.const 119466) "a") (data (i32.const 119469) "a") (data (i32.const 119472) "a") (data (i32.const 119475) "a") (data (i32.const 119478) "a") (data (i32.const 119481) "a") (data (i32.const 119484) "a") (data (i32.const 119487) "a") (data (i32.const 119490) "a") (data (i32.const 119493) "a") (data (i32.const 119496) "a") (data (i32.const 119499) "a") (data (i32.const 119502) "a") (data (i32.const 119505) "a") (data (i32.const 119508) "a") (data (i32.const 119511) "a") (data (i32.const 119514) "a") (data (i32.const 119517) "a") (data (i32.const 119520) "a") (data (i32.const 119523) "a") (data (i32.const 119526) "a") (data (i32.const 119529) "a") (data (i32.const 119532) "a") (data (i32.const 119535) "a") (data (i32.const 119538) "a") (data (i32.const 119541) "a") (data (i32.const 119544) "a") (data (i32.const 119547) "a") (data (i32.const 119550) "a") (data (i32.const 119553) "a") (data (i32.const 119556) "a") (data (i32.const 119559) "a") (data (i32.const 119562) "a") (data (i32.const 119565) "a") (data (i32.const 119568) "a") (data (i32.const 119571) "a") (data (i32.const 119574) "a") (data (i32.const 119577) "a") (data (i32.const 119580) "a") (data (i32.const 119583) "a") (data (i32.const 119586) "a") (data (i32.const 119589) "a") (data (i32.const 119592) "a") (data (i32.const 119595) "a") (data (i32.const 119598) "a") (data (i32.const 119601) "a") (data (i32.const 119604) "a") (data (i32.const 119607) "a") (data (i32.const 119610) "a") (data (i32.const 119613) "a") (data (i32.const 119616) "a") (data (i32.const 119619) "a") (data (i32.const 119622) "a") (data (i32.const 119625) "a") (data (i32.const 119628) "a") (data (i32.const 119631) "a") (data (i32.const 119634) "a") (data (i32.const 119637) "a") (data (i32.const 119640) "a") (data (i32.const 119643) "a") (data (i32.const 119646) "a") (data (i32.const 119649) "a") (data (i32.const 119652) "a") (data (i32.const 119655) "a") (data (i32.const 119658) "a") (data (i32.const 119661) "a") (data (i32.const 119664) "a") (data (i32.const 119667) "a") (data (i32.const 119670) "a") (data (i32.const 119673) "a") (data (i32.const 119676) "a") (data (i32.const 119679) "a") (data (i32.const 119682) "a") (data (i32.const 119685) "a") (data (i32.const 119688) "a") (data (i32.const 119691) "a") (data (i32.const 119694) "a") (data (i32.const 119697) "a") (data (i32.const 119700) "a") (data (i32.const 119703) "a") (data (i32.const 119706) "a") (data (i32.const 119709) "a") (data (i32.const 119712) "a") (data (i32.const 119715) "a") (data (i32.const 119718) "a") (data (i32.const 119721) "a") (data (i32.const 119724) "a") (data (i32.const 119727) "a") (data (i32.const 119730) "a") (data (i32.const 119733) "a") (data (i32.const 119736) "a") (data (i32.const 119739) "a") (data (i32.const 119742) "a") (data (i32.const 119745) "a") (data (i32.const 119748) "a") (data (i32.const 119751) "a") (data (i32.const 119754) "a") (data (i32.const 119757) "a") (data (i32.const 119760) "a") (data (i32.const 119763) "a") (data (i32.const 119766) "a") (data (i32.const 119769) "a") (data (i32.const 119772) "a") (data (i32.const 119775) "a") (data (i32.const 119778) "a") (data (i32.const 119781) "a") (data (i32.const 119784) "a") (data (i32.const 119787) "a") (data (i32.const 119790) "a") (data (i32.const 119793) "a") (data (i32.const 119796) "a") (data (i32.const 119799) "a") (data (i32.const 119802) "a") (data (i32.const 119805) "a") (data (i32.const 119808) "a") (data (i32.const 119811) "a") (data (i32.const 119814) "a") (data (i32.const 119817) "a") (data (i32.const 119820) "a") (data (i32.const 119823) "a") (data (i32.const 119826) "a") (data (i32.const 119829) "a") (data (i32.const 119832) "a") (data (i32.const 119835) "a") (data (i32.const 119838) "a") (data (i32.const 119841) "a") (data (i32.const 119844) "a") (data (i32.const 119847) "a") (data (i32.const 119850) "a") (data (i32.const 119853) "a") (data (i32.const 119856) "a") (data (i32.const 119859) "a") (data (i32.const 119862) "a") (data (i32.const 119865) "a") (data (i32.const 119868) "a") (data (i32.const 119871) "a") (data (i32.const 119874) "a") (data (i32.const 119877) "a") (data (i32.const 119880) "a") (data (i32.const 119883) "a") (data (i32.const 119886) "a") (data (i32.const 119889) "a") (data (i32.const 119892) "a") (data (i32.const 119895) "a") (data (i32.const 119898) "a") (data (i32.const 119901) "a") (data (i32.const 119904) "a") (data (i32.const 119907) "a") (data (i32.const 119910) "a") (data (i32.const 119913) "a") (data (i32.const 119916) "a") (data (i32.const 119919) "a") (data (i32.const 119922) "a") (data (i32.const 119925) "a") (data (i32.const 119928) "a") (data (i32.const 119931) "a") (data (i32.const 119934) "a") (data (i32.const 119937) "a") (data (i32.const 119940) "a") (data (i32.const 119943) "a") (data (i32.const 119946) "a") (data (i32.const 119949) "a") (data (i32.const 119952) "a") (data (i32.const 119955) "a") (data (i32.const 119958) "a") (data (i32.const 119961) "a") (data (i32.const 119964) "a") (data (i32.const 119967) "a") (data (i32.const 119970) "a") (data (i32.const 119973) "a") (data (i32.const 119976) "a") (data (i32.const 119979) "a") (data (i32.const 119982) "a") (data (i32.const 119985) "a") (data (i32.const 119988) "a") (data (i32.const 119991) "a") (data (i32.const 119994) "a") (data (i32.const 119997) "a") (data (i32.const 120000) "a") (data (i32.const 120003) "a") (data (i32.const 120006) "a") (data (i32.const 120009) "a") (data (i32.const 120012) "a") (data (i32.const 120015) "a") (data (i32.const 120018) "a") (data (i32.const 120021) "a") (data (i32.const 120024) "a") (data (i32.const 120027) "a") (data (i32.const 120030) "a") (data (i32.const 120033) "a") (data (i32.const 120036) "a") (data (i32.const 120039) "a") (data (i32.const 120042) "a") (data (i32.const 120045) "a") (data (i32.const 120048) "a") (data (i32.const 120051) "a") (data (i32.const 120054) "a") (data (i32.const 120057) "a") (data (i32.const 120060) "a") (data (i32.const 120063) "a") (data (i32.const 120066) "a") (data (i32.const 120069) "a") (data (i32.const 120072) "a") (data (i32.const 120075) "a") (data (i32.const 120078) "a") (data (i32.const 120081) "a") (data (i32.const 120084) "a") (data (i32.const 120087) "a") (data (i32.const 120090) "a") (data (i32.const 120093) "a") (data (i32.const 120096) "a") (data (i32.const 120099) "a") (data (i32.const 120102) "a") (data (i32.const 120105) "a") (data (i32.const 120108) "a") (data (i32.const 120111) "a") (data (i32.const 120114) "a") (data (i32.const 120117) "a") (data (i32.const 120120) "a") (data (i32.const 120123) "a") (data (i32.const 120126) "a") (data (i32.const 120129) "a") (data (i32.const 120132) "a") (data (i32.const 120135) "a") (data (i32.const 120138) "a") (data (i32.const 120141) "a") (data (i32.const 120144) "a") (data (i32.const 120147) "a") (data (i32.const 120150) "a") (data (i32.const 120153) "a") (data (i32.const 120156) "a") (data (i32.const 120159) "a") (data (i32.const 120162) "a") (data (i32.const 120165) "a") (data (i32.const 120168) "a") (data (i32.const 120171) "a") (data (i32.const 120174) "a") (data (i32.const 120177) "a") (data (i32.const 120180) "a") (data (i32.const 120183) "a") (data (i32.const 120186) "a") (data (i32.const 120189) "a") (data (i32.const 120192) "a") (data (i32.const 120195) "a") (data (i32.const 120198) "a") (data (i32.const 120201) "a") (data (i32.const 120204) "a") (data (i32.const 120207) "a") (data (i32.const 120210) "a") (data (i32.const 120213) "a") (data (i32.const 120216) "a") (data (i32.const 120219) "a") (data (i32.const 120222) "a") (data (i32.const 120225) "a") (data (i32.const 120228) "a") (data (i32.const 120231) "a") (data (i32.const 120234) "a") (data (i32.const 120237) "a") (data (i32.const 120240) "a") (data (i32.const 120243) "a") (data (i32.const 120246) "a") (data (i32.const 120249) "a") (data (i32.const 120252) "a") (data (i32.const 120255) "a") (data (i32.const 120258) "a") (data (i32.const 120261) "a") (data (i32.const 120264) "a") (data (i32.const 120267) "a") (data (i32.const 120270) "a") (data (i32.const 120273) "a") (data (i32.const 120276) "a") (data (i32.const 120279) "a") (data (i32.const 120282) "a") (data (i32.const 120285) "a") (data (i32.const 120288) "a") (data (i32.const 120291) "a") (data (i32.const 120294) "a") (data (i32.const 120297) "a") (data (i32.const 120300) "a") (data (i32.const 120303) "a") (data (i32.const 120306) "a") (data (i32.const 120309) "a") (data (i32.const 120312) "a") (data (i32.const 120315) "a") (data (i32.const 120318) "a") (data (i32.const 120321) "a") (data (i32.const 120324) "a") (data (i32.const 120327) "a") (data (i32.const 120330) "a") (data (i32.const 120333) "a") (data (i32.const 120336) "a") (data (i32.const 120339) "a") (data (i32.const 120342) "a") (data (i32.const 120345) "a") (data (i32.const 120348) "a") (data (i32.const 120351) "a") (data (i32.const 120354) "a") (data (i32.const 120357) "a") (data (i32.const 120360) "a") (data (i32.const 120363) "a") (data (i32.const 120366) "a") (data (i32.const 120369) "a") (data (i32.const 120372) "a") (data (i32.const 120375) "a") (data (i32.const 120378) "a") (data (i32.const 120381) "a") (data (i32.const 120384) "a") (data (i32.const 120387) "a") (data (i32.const 120390) "a") (data (i32.const 120393) "a") (data (i32.const 120396) "a") (data (i32.const 120399) "a") (data (i32.const 120402) "a") (data (i32.const 120405) "a") (data (i32.const 120408) "a") (data (i32.const 120411) "a") (data (i32.const 120414) "a") (data (i32.const 120417) "a") (data (i32.const 120420) "a") (data (i32.const 120423) "a") (data (i32.const 120426) "a") (data (i32.const 120429) "a") (data (i32.const 120432) "a") (data (i32.const 120435) "a") (data (i32.const 120438) "a") (data (i32.const 120441) "a") (data (i32.const 120444) "a") (data (i32.const 120447) "a") (data (i32.const 120450) "a") (data (i32.const 120453) "a") (data (i32.const 120456) "a") (data (i32.const 120459) "a") (data (i32.const 120462) "a") (data (i32.const 120465) "a") (data (i32.const 120468) "a") (data (i32.const 120471) "a") (data (i32.const 120474) "a") (data (i32.const 120477) "a") (data (i32.const 120480) "a") (data (i32.const 120483) "a") (data (i32.const 120486) "a") (data (i32.const 120489) "a") (data (i32.const 120492) "a") (data (i32.const 120495) "a") (data (i32.const 120498) "a") (data (i32.const 120501) "a") (data (i32.const 120504) "a") (data (i32.const 120507) "a") (data (i32.const 120510) "a") (data (i32.const 120513) "a") (data (i32.const 120516) "a") (data (i32.const 120519) "a") (data (i32.const 120522) "a") (data (i32.const 120525) "a") (data (i32.const 120528) "a") (data (i32.const 120531) "a") (data (i32.const 120534) "a") (data (i32.const 120537) "a") (data (i32.const 120540) "a") (data (i32.const 120543) "a") (data (i32.const 120546) "a") (data (i32.const 120549) "a") (data (i32.const 120552) "a") (data (i32.const 120555) "a") (data (i32.const 120558) "a") (data (i32.const 120561) "a") (data (i32.const 120564) "a") (data (i32.const 120567) "a") (data (i32.const 120570) "a") (data (i32.const 120573) "a") (data (i32.const 120576) "a") (data (i32.const 120579) "a") (data (i32.const 120582) "a") (data (i32.const 120585) "a") (data (i32.const 120588) "a") (data (i32.const 120591) "a") (data (i32.const 120594) "a") (data (i32.const 120597) "a") (data (i32.const 120600) "a") (data (i32.const 120603) "a") (data (i32.const 120606) "a") (data (i32.const 120609) "a") (data (i32.const 120612) "a") (data (i32.const 120615) "a") (data (i32.const 120618) "a") (data (i32.const 120621) "a") (data (i32.const 120624) "a") (data (i32.const 120627) "a") (data (i32.const 120630) "a") (data (i32.const 120633) "a") (data (i32.const 120636) "a") (data (i32.const 120639) "a") (data (i32.const 120642) "a") (data (i32.const 120645) "a") (data (i32.const 120648) "a") (data (i32.const 120651) "a") (data (i32.const 120654) "a") (data (i32.const 120657) "a") (data (i32.const 120660) "a") (data (i32.const 120663) "a") (data (i32.const 120666) "a") (data (i32.const 120669) "a") (data (i32.const 120672) "a") (data (i32.const 120675) "a") (data (i32.const 120678) "a") (data (i32.const 120681) "a") (data (i32.const 120684) "a") (data (i32.const 120687) "a") (data (i32.const 120690) "a") (data (i32.const 120693) "a") (data (i32.const 120696) "a") (data (i32.const 120699) "a") (data (i32.const 120702) "a") (data (i32.const 120705) "a") (data (i32.const 120708) "a") (data (i32.const 120711) "a") (data (i32.const 120714) "a") (data (i32.const 120717) "a") (data (i32.const 120720) "a") (data (i32.const 120723) "a") (data (i32.const 120726) "a") (data (i32.const 120729) "a") (data (i32.const 120732) "a") (data (i32.const 120735) "a") (data (i32.const 120738) "a") (data (i32.const 120741) "a") (data (i32.const 120744) "a") (data (i32.const 120747) "a") (data (i32.const 120750) "a") (data (i32.const 120753) "a") (data (i32.const 120756) "a") (data (i32.const 120759) "a") (data (i32.const 120762) "a") (data (i32.const 120765) "a") (data (i32.const 120768) "a") (data (i32.const 120771) "a") (data (i32.const 120774) "a") (data (i32.const 120777) "a") (data (i32.const 120780) "a") (data (i32.const 120783) "a") (data (i32.const 120786) "a") (data (i32.const 120789) "a") (data (i32.const 120792) "a") (data (i32.const 120795) "a") (data (i32.const 120798) "a") (data (i32.const 120801) "a") (data (i32.const 120804) "a") (data (i32.const 120807) "a") (data (i32.const 120810) "a") (data (i32.const 120813) "a") (data (i32.const 120816) "a") (data (i32.const 120819) "a") (data (i32.const 120822) "a") (data (i32.const 120825) "a") (data (i32.const 120828) "a") (data (i32.const 120831) "a") (data (i32.const 120834) "a") (data (i32.const 120837) "a") (data (i32.const 120840) "a") (data (i32.const 120843) "a") (data (i32.const 120846) "a") (data (i32.const 120849) "a") (data (i32.const 120852) "a") (data (i32.const 120855) "a") (data (i32.const 120858) "a") (data (i32.const 120861) "a") (data (i32.const 120864) "a") (data (i32.const 120867) "a") (data (i32.const 120870) "a") (data (i32.const 120873) "a") (data (i32.const 120876) "a") (data (i32.const 120879) "a") (data (i32.const 120882) "a") (data (i32.const 120885) "a") (data (i32.const 120888) "a") (data (i32.const 120891) "a") (data (i32.const 120894) "a") (data (i32.const 120897) "a") (data (i32.const 120900) "a") (data (i32.const 120903) "a") (data (i32.const 120906) "a") (data (i32.const 120909) "a") (data (i32.const 120912) "a") (data (i32.const 120915) "a") (data (i32.const 120918) "a") (data (i32.const 120921) "a") (data (i32.const 120924) "a") (data (i32.const 120927) "a") (data (i32.const 120930) "a") (data (i32.const 120933) "a") (data (i32.const 120936) "a") (data (i32.const 120939) "a") (data (i32.const 120942) "a") (data (i32.const 120945) "a") (data (i32.const 120948) "a") (data (i32.const 120951) "a") (data (i32.const 120954) "a") (data (i32.const 120957) "a") (data (i32.const 120960) "a") (data (i32.const 120963) "a") (data (i32.const 120966) "a") (data (i32.const 120969) "a") (data (i32.const 120972) "a") (data (i32.const 120975) "a") (data (i32.const 120978) "a") (data (i32.const 120981) "a") (data (i32.const 120984) "a") (data (i32.const 120987) "a") (data (i32.const 120990) "a") (data (i32.const 120993) "a") (data (i32.const 120996) "a") (data (i32.const 120999) "a") (data (i32.const 121002) "a") (data (i32.const 121005) "a") (data (i32.const 121008) "a") (data (i32.const 121011) "a") (data (i32.const 121014) "a") (data (i32.const 121017) "a") (data (i32.const 121020) "a") (data (i32.const 121023) "a") (data (i32.const 121026) "a") (data (i32.const 121029) "a") (data (i32.const 121032) "a") (data (i32.const 121035) "a") (data (i32.const 121038) "a") (data (i32.const 121041) "a") (data (i32.const 121044) "a") (data (i32.const 121047) "a") (data (i32.const 121050) "a") (data (i32.const 121053) "a") (data (i32.const 121056) "a") (data (i32.const 121059) "a") (data (i32.const 121062) "a") (data (i32.const 121065) "a") (data (i32.const 121068) "a") (data (i32.const 121071) "a") (data (i32.const 121074) "a") (data (i32.const 121077) "a") (data (i32.const 121080) "a") (data (i32.const 121083) "a") (data (i32.const 121086) "a") (data (i32.const 121089) "a") (data (i32.const 121092) "a") (data (i32.const 121095) "a") (data (i32.const 121098) "a") (data (i32.const 121101) "a") (data (i32.const 121104) "a") (data (i32.const 121107) "a") (data (i32.const 121110) "a") (data (i32.const 121113) "a") (data (i32.const 121116) "a") (data (i32.const 121119) "a") (data (i32.const 121122) "a") (data (i32.const 121125) "a") (data (i32.const 121128) "a") (data (i32.const 121131) "a") (data (i32.const 121134) "a") (data (i32.const 121137) "a") (data (i32.const 121140) "a") (data (i32.const 121143) "a") (data (i32.const 121146) "a") (data (i32.const 121149) "a") (data (i32.const 121152) "a") (data (i32.const 121155) "a") (data (i32.const 121158) "a") (data (i32.const 121161) "a") (data (i32.const 121164) "a") (data (i32.const 121167) "a") (data (i32.const 121170) "a") (data (i32.const 121173) "a") (data (i32.const 121176) "a") (data (i32.const 121179) "a") (data (i32.const 121182) "a") (data (i32.const 121185) "a") (data (i32.const 121188) "a") (data (i32.const 121191) "a") (data (i32.const 121194) "a") (data (i32.const 121197) "a") (data (i32.const 121200) "a") (data (i32.const 121203) "a") (data (i32.const 121206) "a") (data (i32.const 121209) "a") (data (i32.const 121212) "a") (data (i32.const 121215) "a") (data (i32.const 121218) "a") (data (i32.const 121221) "a") (data (i32.const 121224) "a") (data (i32.const 121227) "a") (data (i32.const 121230) "a") (data (i32.const 121233) "a") (data (i32.const 121236) "a") (data (i32.const 121239) "a") (data (i32.const 121242) "a") (data (i32.const 121245) "a") (data (i32.const 121248) "a") (data (i32.const 121251) "a") (data (i32.const 121254) "a") (data (i32.const 121257) "a") (data (i32.const 121260) "a") (data (i32.const 121263) "a") (data (i32.const 121266) "a") (data (i32.const 121269) "a") (data (i32.const 121272) "a") (data (i32.const 121275) "a") (data (i32.const 121278) "a") (data (i32.const 121281) "a") (data (i32.const 121284) "a") (data (i32.const 121287) "a") (data (i32.const 121290) "a") (data (i32.const 121293) "a") (data (i32.const 121296) "a") (data (i32.const 121299) "a") (data (i32.const 121302) "a") (data (i32.const 121305) "a") (data (i32.const 121308) "a") (data (i32.const 121311) "a") (data (i32.const 121314) "a") (data (i32.const 121317) "a") (data (i32.const 121320) "a") (data (i32.const 121323) "a") (data (i32.const 121326) "a") (data (i32.const 121329) "a") (data (i32.const 121332) "a") (data (i32.const 121335) "a") (data (i32.const 121338) "a") (data (i32.const 121341) "a") (data (i32.const 121344) "a") (data (i32.const 121347) "a") (data (i32.const 121350) "a") (data (i32.const 121353) "a") (data (i32.const 121356) "a") (data (i32.const 121359) "a") (data (i32.const 121362) "a") (data (i32.const 121365) "a") (data (i32.const 121368) "a") (data (i32.const 121371) "a") (data (i32.const 121374) "a") (data (i32.const 121377) "a") (data (i32.const 121380) "a") (data (i32.const 121383) "a") (data (i32.const 121386) "a") (data (i32.const 121389) "a") (data (i32.const 121392) "a") (data (i32.const 121395) "a") (data (i32.const 121398) "a") (data (i32.const 121401) "a") (data (i32.const 121404) "a") (data (i32.const 121407) "a") (data (i32.const 121410) "a") (data (i32.const 121413) "a") (data (i32.const 121416) "a") (data (i32.const 121419) "a") (data (i32.const 121422) "a") (data (i32.const 121425) "a") (data (i32.const 121428) "a") (data (i32.const 121431) "a") (data (i32.const 121434) "a") (data (i32.const 121437) "a") (data (i32.const 121440) "a") (data (i32.const 121443) "a") (data (i32.const 121446) "a") (data (i32.const 121449) "a") (data (i32.const 121452) "a") (data (i32.const 121455) "a") (data (i32.const 121458) "a") (data (i32.const 121461) "a") (data (i32.const 121464) "a") (data (i32.const 121467) "a") (data (i32.const 121470) "a") (data (i32.const 121473) "a") (data (i32.const 121476) "a") (data (i32.const 121479) "a") (data (i32.const 121482) "a") (data (i32.const 121485) "a") (data (i32.const 121488) "a") (data (i32.const 121491) "a") (data (i32.const 121494) "a") (data (i32.const 121497) "a") (data (i32.const 121500) "a") (data (i32.const 121503) "a") (data (i32.const 121506) "a") (data (i32.const 121509) "a") (data (i32.const 121512) "a") (data (i32.const 121515) "a") (data (i32.const 121518) "a") (data (i32.const 121521) "a") (data (i32.const 121524) "a") (data (i32.const 121527) "a") (data (i32.const 121530) "a") (data (i32.const 121533) "a") (data (i32.const 121536) "a") (data (i32.const 121539) "a") (data (i32.const 121542) "a") (data (i32.const 121545) "a") (data (i32.const 121548) "a") (data (i32.const 121551) "a") (data (i32.const 121554) "a") (data (i32.const 121557) "a") (data (i32.const 121560) "a") (data (i32.const 121563) "a") (data (i32.const 121566) "a") (data (i32.const 121569) "a") (data (i32.const 121572) "a") (data (i32.const 121575) "a") (data (i32.const 121578) "a") (data (i32.const 121581) "a") (data (i32.const 121584) "a") (data (i32.const 121587) "a") (data (i32.const 121590) "a") (data (i32.const 121593) "a") (data (i32.const 121596) "a") (data (i32.const 121599) "a") (data (i32.const 121602) "a") (data (i32.const 121605) "a") (data (i32.const 121608) "a") (data (i32.const 121611) "a") (data (i32.const 121614) "a") (data (i32.const 121617) "a") (data (i32.const 121620) "a") (data (i32.const 121623) "a") (data (i32.const 121626) "a") (data (i32.const 121629) "a") (data (i32.const 121632) "a") (data (i32.const 121635) "a") (data (i32.const 121638) "a") (data (i32.const 121641) "a") (data (i32.const 121644) "a") (data (i32.const 121647) "a") (data (i32.const 121650) "a") (data (i32.const 121653) "a") (data (i32.const 121656) "a") (data (i32.const 121659) "a") (data (i32.const 121662) "a") (data (i32.const 121665) "a") (data (i32.const 121668) "a") (data (i32.const 121671) "a") (data (i32.const 121674) "a") (data (i32.const 121677) "a") (data (i32.const 121680) "a") (data (i32.const 121683) "a") (data (i32.const 121686) "a") (data (i32.const 121689) "a") (data (i32.const 121692) "a") (data (i32.const 121695) "a") (data (i32.const 121698) "a") (data (i32.const 121701) "a") (data (i32.const 121704) "a") (data (i32.const 121707) "a") (data (i32.const 121710) "a") (data (i32.const 121713) "a") (data (i32.const 121716) "a") (data (i32.const 121719) "a") (data (i32.const 121722) "a") (data (i32.const 121725) "a") (data (i32.const 121728) "a") (data (i32.const 121731) "a") (data (i32.const 121734) "a") (data (i32.const 121737) "a") (data (i32.const 121740) "a") (data (i32.const 121743) "a") (data (i32.const 121746) "a") (data (i32.const 121749) "a") (data (i32.const 121752) "a") (data (i32.const 121755) "a") (data (i32.const 121758) "a") (data (i32.const 121761) "a") (data (i32.const 121764) "a") (data (i32.const 121767) "a") (data (i32.const 121770) "a") (data (i32.const 121773) "a") (data (i32.const 121776) "a") (data (i32.const 121779) "a") (data (i32.const 121782) "a") (data (i32.const 121785) "a") (data (i32.const 121788) "a") (data (i32.const 121791) "a") (data (i32.const 121794) "a") (data (i32.const 121797) "a") (data (i32.const 121800) "a") (data (i32.const 121803) "a") (data (i32.const 121806) "a") (data (i32.const 121809) "a") (data (i32.const 121812) "a") (data (i32.const 121815) "a") (data (i32.const 121818) "a") (data (i32.const 121821) "a") (data (i32.const 121824) "a") (data (i32.const 121827) "a") (data (i32.const 121830) "a") (data (i32.const 121833) "a") (data (i32.const 121836) "a") (data (i32.const 121839) "a") (data (i32.const 121842) "a") (data (i32.const 121845) "a") (data (i32.const 121848) "a") (data (i32.const 121851) "a") (data (i32.const 121854) "a") (data (i32.const 121857) "a") (data (i32.const 121860) "a") (data (i32.const 121863) "a") (data (i32.const 121866) "a") (data (i32.const 121869) "a") (data (i32.const 121872) "a") (data (i32.const 121875) "a") (data (i32.const 121878) "a") (data (i32.const 121881) "a") (data (i32.const 121884) "a") (data (i32.const 121887) "a") (data (i32.const 121890) "a") (data (i32.const 121893) "a") (data (i32.const 121896) "a") (data (i32.const 121899) "a") (data (i32.const 121902) "a") (data (i32.const 121905) "a") (data (i32.const 121908) "a") (data (i32.const 121911) "a") (data (i32.const 121914) "a") (data (i32.const 121917) "a") (data (i32.const 121920) "a") (data (i32.const 121923) "a") (data (i32.const 121926) "a") (data (i32.const 121929) "a") (data (i32.const 121932) "a") (data (i32.const 121935) "a") (data (i32.const 121938) "a") (data (i32.const 121941) "a") (data (i32.const 121944) "a") (data (i32.const 121947) "a") (data (i32.const 121950) "a") (data (i32.const 121953) "a") (data (i32.const 121956) "a") (data (i32.const 121959) "a") (data (i32.const 121962) "a") (data (i32.const 121965) "a") (data (i32.const 121968) "a") (data (i32.const 121971) "a") (data (i32.const 121974) "a") (data (i32.const 121977) "a") (data (i32.const 121980) "a") (data (i32.const 121983) "a") (data (i32.const 121986) "a") (data (i32.const 121989) "a") (data (i32.const 121992) "a") (data (i32.const 121995) "a") (data (i32.const 121998) "a") (data (i32.const 122001) "a") (data (i32.const 122004) "a") (data (i32.const 122007) "a") (data (i32.const 122010) "a") (data (i32.const 122013) "a") (data (i32.const 122016) "a") (data (i32.const 122019) "a") (data (i32.const 122022) "a") (data (i32.const 122025) "a") (data (i32.const 122028) "a") (data (i32.const 122031) "a") (data (i32.const 122034) "a") (data (i32.const 122037) "a") (data (i32.const 122040) "a") (data (i32.const 122043) "a") (data (i32.const 122046) "a") (data (i32.const 122049) "a") (data (i32.const 122052) "a") (data (i32.const 122055) "a") (data (i32.const 122058) "a") (data (i32.const 122061) "a") (data (i32.const 122064) "a") (data (i32.const 122067) "a") (data (i32.const 122070) "a") (data (i32.const 122073) "a") (data (i32.const 122076) "a") (data (i32.const 122079) "a") (data (i32.const 122082) "a") (data (i32.const 122085) "a") (data (i32.const 122088) "a") (data (i32.const 122091) "a") (data (i32.const 122094) "a") (data (i32.const 122097) "a") (data (i32.const 122100) "a") (data (i32.const 122103) "a") (data (i32.const 122106) "a") (data (i32.const 122109) "a") (data (i32.const 122112) "a") (data (i32.const 122115) "a") (data (i32.const 122118) "a") (data (i32.const 122121) "a") (data (i32.const 122124) "a") (data (i32.const 122127) "a") (data (i32.const 122130) "a") (data (i32.const 122133) "a") (data (i32.const 122136) "a") (data (i32.const 122139) "a") (data (i32.const 122142) "a") (data (i32.const 122145) "a") (data (i32.const 122148) "a") (data (i32.const 122151) "a") (data (i32.const 122154) "a") (data (i32.const 122157) "a") (data (i32.const 122160) "a") (data (i32.const 122163) "a") (data (i32.const 122166) "a") (data (i32.const 122169) "a") (data (i32.const 122172) "a") (data (i32.const 122175) "a") (data (i32.const 122178) "a") (data (i32.const 122181) "a") (data (i32.const 122184) "a") (data (i32.const 122187) "a") (data (i32.const 122190) "a") (data (i32.const 122193) "a") (data (i32.const 122196) "a") (data (i32.const 122199) "a") (data (i32.const 122202) "a") (data (i32.const 122205) "a") (data (i32.const 122208) "a") (data (i32.const 122211) "a") (data (i32.const 122214) "a") (data (i32.const 122217) "a") (data (i32.const 122220) "a") (data (i32.const 122223) "a") (data (i32.const 122226) "a") (data (i32.const 122229) "a") (data (i32.const 122232) "a") (data (i32.const 122235) "a") (data (i32.const 122238) "a") (data (i32.const 122241) "a") (data (i32.const 122244) "a") (data (i32.const 122247) "a") (data (i32.const 122250) "a") (data (i32.const 122253) "a") (data (i32.const 122256) "a") (data (i32.const 122259) "a") (data (i32.const 122262) "a") (data (i32.const 122265) "a") (data (i32.const 122268) "a") (data (i32.const 122271) "a") (data (i32.const 122274) "a") (data (i32.const 122277) "a") (data (i32.const 122280) "a") (data (i32.const 122283) "a") (data (i32.const 122286) "a") (data (i32.const 122289) "a") (data (i32.const 122292) "a") (data (i32.const 122295) "a") (data (i32.const 122298) "a") (data (i32.const 122301) "a") (data (i32.const 122304) "a") (data (i32.const 122307) "a") (data (i32.const 122310) "a") (data (i32.const 122313) "a") (data (i32.const 122316) "a") (data (i32.const 122319) "a") (data (i32.const 122322) "a") (data (i32.const 122325) "a") (data (i32.const 122328) "a") (data (i32.const 122331) "a") (data (i32.const 122334) "a") (data (i32.const 122337) "a") (data (i32.const 122340) "a") (data (i32.const 122343) "a") (data (i32.const 122346) "a") (data (i32.const 122349) "a") (data (i32.const 122352) "a") (data (i32.const 122355) "a") (data (i32.const 122358) "a") (data (i32.const 122361) "a") (data (i32.const 122364) "a") (data (i32.const 122367) "a") (data (i32.const 122370) "a") (data (i32.const 122373) "a") (data (i32.const 122376) "a") (data (i32.const 122379) "a") (data (i32.const 122382) "a") (data (i32.const 122385) "a") (data (i32.const 122388) "a") (data (i32.const 122391) "a") (data (i32.const 122394) "a") (data (i32.const 122397) "a") (data (i32.const 122400) "a") (data (i32.const 122403) "a") (data (i32.const 122406) "a") (data (i32.const 122409) "a") (data (i32.const 122412) "a") (data (i32.const 122415) "a") (data (i32.const 122418) "a") (data (i32.const 122421) "a") (data (i32.const 122424) "a") (data (i32.const 122427) "a") (data (i32.const 122430) "a") (data (i32.const 122433) "a") (data (i32.const 122436) "a") (data (i32.const 122439) "a") (data (i32.const 122442) "a") (data (i32.const 122445) "a") (data (i32.const 122448) "a") (data (i32.const 122451) "a") (data (i32.const 122454) "a") (data (i32.const 122457) "a") (data (i32.const 122460) "a") (data (i32.const 122463) "a") (data (i32.const 122466) "a") (data (i32.const 122469) "a") (data (i32.const 122472) "a") (data (i32.const 122475) "a") (data (i32.const 122478) "a") (data (i32.const 122481) "a") (data (i32.const 122484) "a") (data (i32.const 122487) "a") (data (i32.const 122490) "a") (data (i32.const 122493) "a") (data (i32.const 122496) "a") (data (i32.const 122499) "a") (data (i32.const 122502) "a") (data (i32.const 122505) "a") (data (i32.const 122508) "a") (data (i32.const 122511) "a") (data (i32.const 122514) "a") (data (i32.const 122517) "a") (data (i32.const 122520) "a") (data (i32.const 122523) "a") (data (i32.const 122526) "a") (data (i32.const 122529) "a") (data (i32.const 122532) "a") (data (i32.const 122535) "a") (data (i32.const 122538) "a") (data (i32.const 122541) "a") (data (i32.const 122544) "a") (data (i32.const 122547) "a") (data (i32.const 122550) "a") (data (i32.const 122553) "a") (data (i32.const 122556) "a") (data (i32.const 122559) "a") (data (i32.const 122562) "a") (data (i32.const 122565) "a") (data (i32.const 122568) "a") (data (i32.const 122571) "a") (data (i32.const 122574) "a") (data (i32.const 122577) "a") (data (i32.const 122580) "a") (data (i32.const 122583) "a") (data (i32.const 122586) "a") (data (i32.const 122589) "a") (data (i32.const 122592) "a") (data (i32.const 122595) "a") (data (i32.const 122598) "a") (data (i32.const 122601) "a") (data (i32.const 122604) "a") (data (i32.const 122607) "a") (data (i32.const 122610) "a") (data (i32.const 122613) "a") (data (i32.const 122616) "a") (data (i32.const 122619) "a") (data (i32.const 122622) "a") (data (i32.const 122625) "a") (data (i32.const 122628) "a") (data (i32.const 122631) "a") (data (i32.const 122634) "a") (data (i32.const 122637) "a") (data (i32.const 122640) "a") (data (i32.const 122643) "a") (data (i32.const 122646) "a") (data (i32.const 122649) "a") (data (i32.const 122652) "a") (data (i32.const 122655) "a") (data (i32.const 122658) "a") (data (i32.const 122661) "a") (data (i32.const 122664) "a") (data (i32.const 122667) "a") (data (i32.const 122670) "a") (data (i32.const 122673) "a") (data (i32.const 122676) "a") (data (i32.const 122679) "a") (data (i32.const 122682) "a") (data (i32.const 122685) "a") (data (i32.const 122688) "a") (data (i32.const 122691) "a") (data (i32.const 122694) "a") (data (i32.const 122697) "a") (data (i32.const 122700) "a") (data (i32.const 122703) "a") (data (i32.const 122706) "a") (data (i32.const 122709) "a") (data (i32.const 122712) "a") (data (i32.const 122715) "a") (data (i32.const 122718) "a") (data (i32.const 122721) "a") (data (i32.const 122724) "a") (data (i32.const 122727) "a") (data (i32.const 122730) "a") (data (i32.const 122733) "a") (data (i32.const 122736) "a") (data (i32.const 122739) "a") (data (i32.const 122742) "a") (data (i32.const 122745) "a") (data (i32.const 122748) "a") (data (i32.const 122751) "a") (data (i32.const 122754) "a") (data (i32.const 122757) "a") (data (i32.const 122760) "a") (data (i32.const 122763) "a") (data (i32.const 122766) "a") (data (i32.const 122769) "a") (data (i32.const 122772) "a") (data (i32.const 122775) "a") (data (i32.const 122778) "a") (data (i32.const 122781) "a") (data (i32.const 122784) "a") (data (i32.const 122787) "a") (data (i32.const 122790) "a") (data (i32.const 122793) "a") (data (i32.const 122796) "a") (data (i32.const 122799) "a") (data (i32.const 122802) "a") (data (i32.const 122805) "a") (data (i32.const 122808) "a") (data (i32.const 122811) "a") (data (i32.const 122814) "a") (data (i32.const 122817) "a") (data (i32.const 122820) "a") (data (i32.const 122823) "a") (data (i32.const 122826) "a") (data (i32.const 122829) "a") (data (i32.const 122832) "a") (data (i32.const 122835) "a") (data (i32.const 122838) "a") (data (i32.const 122841) "a") (data (i32.const 122844) "a") (data (i32.const 122847) "a") (data (i32.const 122850) "a") (data (i32.const 122853) "a") (data (i32.const 122856) "a") (data (i32.const 122859) "a") (data (i32.const 122862) "a") (data (i32.const 122865) "a") (data (i32.const 122868) "a") (data (i32.const 122871) "a") (data (i32.const 122874) "a") (data (i32.const 122877) "a") (data (i32.const 122880) "a") (data (i32.const 122883) "a") (data (i32.const 122886) "a") (data (i32.const 122889) "a") (data (i32.const 122892) "a") (data (i32.const 122895) "a") (data (i32.const 122898) "a") (data (i32.const 122901) "a") (data (i32.const 122904) "a") (data (i32.const 122907) "a") (data (i32.const 122910) "a") (data (i32.const 122913) "a") (data (i32.const 122916) "a") (data (i32.const 122919) "a") (data (i32.const 122922) "a") (data (i32.const 122925) "a") (data (i32.const 122928) "a") (data (i32.const 122931) "a") (data (i32.const 122934) "a") (data (i32.const 122937) "a") (data (i32.const 122940) "a") (data (i32.const 122943) "a") (data (i32.const 122946) "a") (data (i32.const 122949) "a") (data (i32.const 122952) "a") (data (i32.const 122955) "a") (data (i32.const 122958) "a") (data (i32.const 122961) "a") (data (i32.const 122964) "a") (data (i32.const 122967) "a") (data (i32.const 122970) "a") (data (i32.const 122973) "a") (data (i32.const 122976) "a") (data (i32.const 122979) "a") (data (i32.const 122982) "a") (data (i32.const 122985) "a") (data (i32.const 122988) "a") (data (i32.const 122991) "a") (data (i32.const 122994) "a") (data (i32.const 122997) "a") (data (i32.const 123000) "a") (data (i32.const 123003) "a") (data (i32.const 123006) "a") (data (i32.const 123009) "a") (data (i32.const 123012) "a") (data (i32.const 123015) "a") (data (i32.const 123018) "a") (data (i32.const 123021) "a") (data (i32.const 123024) "a") (data (i32.const 123027) "a") (data (i32.const 123030) "a") (data (i32.const 123033) "a") (data (i32.const 123036) "a") (data (i32.const 123039) "a") (data (i32.const 123042) "a") (data (i32.const 123045) "a") (data (i32.const 123048) "a") (data (i32.const 123051) "a") (data (i32.const 123054) "a") (data (i32.const 123057) "a") (data (i32.const 123060) "a") (data (i32.const 123063) "a") (data (i32.const 123066) "a") (data (i32.const 123069) "a") (data (i32.const 123072) "a") (data (i32.const 123075) "a") (data (i32.const 123078) "a") (data (i32.const 123081) "a") (data (i32.const 123084) "a") (data (i32.const 123087) "a") (data (i32.const 123090) "a") (data (i32.const 123093) "a") (data (i32.const 123096) "a") (data (i32.const 123099) "a") (data (i32.const 123102) "a") (data (i32.const 123105) "a") (data (i32.const 123108) "a") (data (i32.const 123111) "a") (data (i32.const 123114) "a") (data (i32.const 123117) "a") (data (i32.const 123120) "a") (data (i32.const 123123) "a") (data (i32.const 123126) "a") (data (i32.const 123129) "a") (data (i32.const 123132) "a") (data (i32.const 123135) "a") (data (i32.const 123138) "a") (data (i32.const 123141) "a") (data (i32.const 123144) "a") (data (i32.const 123147) "a") (data (i32.const 123150) "a") (data (i32.const 123153) "a") (data (i32.const 123156) "a") (data (i32.const 123159) "a") (data (i32.const 123162) "a") (data (i32.const 123165) "a") (data (i32.const 123168) "a") (data (i32.const 123171) "a") (data (i32.const 123174) "a") (data (i32.const 123177) "a") (data (i32.const 123180) "a") (data (i32.const 123183) "a") (data (i32.const 123186) "a") (data (i32.const 123189) "a") (data (i32.const 123192) "a") (data (i32.const 123195) "a") (data (i32.const 123198) "a") (data (i32.const 123201) "a") (data (i32.const 123204) "a") (data (i32.const 123207) "a") (data (i32.const 123210) "a") (data (i32.const 123213) "a") (data (i32.const 123216) "a") (data (i32.const 123219) "a") (data (i32.const 123222) "a") (data (i32.const 123225) "a") (data (i32.const 123228) "a") (data (i32.const 123231) "a") (data (i32.const 123234) "a") (data (i32.const 123237) "a") (data (i32.const 123240) "a") (data (i32.const 123243) "a") (data (i32.const 123246) "a") (data (i32.const 123249) "a") (data (i32.const 123252) "a") (data (i32.const 123255) "a") (data (i32.const 123258) "a") (data (i32.const 123261) "a") (data (i32.const 123264) "a") (data (i32.const 123267) "a") (data (i32.const 123270) "a") (data (i32.const 123273) "a") (data (i32.const 123276) "a") (data (i32.const 123279) "a") (data (i32.const 123282) "a") (data (i32.const 123285) "a") (data (i32.const 123288) "a") (data (i32.const 123291) "a") (data (i32.const 123294) "a") (data (i32.const 123297) "a") (data (i32.const 123300) "a") (data (i32.const 123303) "a") (data (i32.const 123306) "a") (data (i32.const 123309) "a") (data (i32.const 123312) "a") (data (i32.const 123315) "a") (data (i32.const 123318) "a") (data (i32.const 123321) "a") (data (i32.const 123324) "a") (data (i32.const 123327) "a") (data (i32.const 123330) "a") (data (i32.const 123333) "a") (data (i32.const 123336) "a") (data (i32.const 123339) "a") (data (i32.const 123342) "a") (data (i32.const 123345) "a") (data (i32.const 123348) "a") (data (i32.const 123351) "a") (data (i32.const 123354) "a") (data (i32.const 123357) "a") (data (i32.const 123360) "a") (data (i32.const 123363) "a") (data (i32.const 123366) "a") (data (i32.const 123369) "a") (data (i32.const 123372) "a") (data (i32.const 123375) "a") (data (i32.const 123378) "a") (data (i32.const 123381) "a") (data (i32.const 123384) "a") (data (i32.const 123387) "a") (data (i32.const 123390) "a") (data (i32.const 123393) "a") (data (i32.const 123396) "a") (data (i32.const 123399) "a") (data (i32.const 123402) "a") (data (i32.const 123405) "a") (data (i32.const 123408) "a") (data (i32.const 123411) "a") (data (i32.const 123414) "a") (data (i32.const 123417) "a") (data (i32.const 123420) "a") (data (i32.const 123423) "a") (data (i32.const 123426) "a") (data (i32.const 123429) "a") (data (i32.const 123432) "a") (data (i32.const 123435) "a") (data (i32.const 123438) "a") (data (i32.const 123441) "a") (data (i32.const 123444) "a") (data (i32.const 123447) "a") (data (i32.const 123450) "a") (data (i32.const 123453) "a") (data (i32.const 123456) "a") (data (i32.const 123459) "a") (data (i32.const 123462) "a") (data (i32.const 123465) "a") (data (i32.const 123468) "a") (data (i32.const 123471) "a") (data (i32.const 123474) "a") (data (i32.const 123477) "a") (data (i32.const 123480) "a") (data (i32.const 123483) "a") (data (i32.const 123486) "a") (data (i32.const 123489) "a") (data (i32.const 123492) "a") (data (i32.const 123495) "a") (data (i32.const 123498) "a") (data (i32.const 123501) "a") (data (i32.const 123504) "a") (data (i32.const 123507) "a") (data (i32.const 123510) "a") (data (i32.const 123513) "a") (data (i32.const 123516) "a") (data (i32.const 123519) "a") (data (i32.const 123522) "a") (data (i32.const 123525) "a") (data (i32.const 123528) "a") (data (i32.const 123531) "a") (data (i32.const 123534) "a") (data (i32.const 123537) "a") (data (i32.const 123540) "a") (data (i32.const 123543) "a") (data (i32.const 123546) "a") (data (i32.const 123549) "a") (data (i32.const 123552) "a") (data (i32.const 123555) "a") (data (i32.const 123558) "a") (data (i32.const 123561) "a") (data (i32.const 123564) "a") (data (i32.const 123567) "a") (data (i32.const 123570) "a") (data (i32.const 123573) "a") (data (i32.const 123576) "a") (data (i32.const 123579) "a") (data (i32.const 123582) "a") (data (i32.const 123585) "a") (data (i32.const 123588) "a") (data (i32.const 123591) "a") (data (i32.const 123594) "a") (data (i32.const 123597) "a") (data (i32.const 123600) "a") (data (i32.const 123603) "a") (data (i32.const 123606) "a") (data (i32.const 123609) "a") (data (i32.const 123612) "a") (data (i32.const 123615) "a") (data (i32.const 123618) "a") (data (i32.const 123621) "a") (data (i32.const 123624) "a") (data (i32.const 123627) "a") (data (i32.const 123630) "a") (data (i32.const 123633) "a") (data (i32.const 123636) "a") (data (i32.const 123639) "a") (data (i32.const 123642) "a") (data (i32.const 123645) "a") (data (i32.const 123648) "a") (data (i32.const 123651) "a") (data (i32.const 123654) "a") (data (i32.const 123657) "a") (data (i32.const 123660) "a") (data (i32.const 123663) "a") (data (i32.const 123666) "a") (data (i32.const 123669) "a") (data (i32.const 123672) "a") (data (i32.const 123675) "a") (data (i32.const 123678) "a") (data (i32.const 123681) "a") (data (i32.const 123684) "a") (data (i32.const 123687) "a") (data (i32.const 123690) "a") (data (i32.const 123693) "a") (data (i32.const 123696) "a") (data (i32.const 123699) "a") (data (i32.const 123702) "a") (data (i32.const 123705) "a") (data (i32.const 123708) "a") (data (i32.const 123711) "a") (data (i32.const 123714) "a") (data (i32.const 123717) "a") (data (i32.const 123720) "a") (data (i32.const 123723) "a") (data (i32.const 123726) "a") (data (i32.const 123729) "a") (data (i32.const 123732) "a") (data (i32.const 123735) "a") (data (i32.const 123738) "a") (data (i32.const 123741) "a") (data (i32.const 123744) "a") (data (i32.const 123747) "a") (data (i32.const 123750) "a") (data (i32.const 123753) "a") (data (i32.const 123756) "a") (data (i32.const 123759) "a") (data (i32.const 123762) "a") (data (i32.const 123765) "a") (data (i32.const 123768) "a") (data (i32.const 123771) "a") (data (i32.const 123774) "a") (data (i32.const 123777) "a") (data (i32.const 123780) "a") (data (i32.const 123783) "a") (data (i32.const 123786) "a") (data (i32.const 123789) "a") (data (i32.const 123792) "a") (data (i32.const 123795) "a") (data (i32.const 123798) "a") (data (i32.const 123801) "a") (data (i32.const 123804) "a") (data (i32.const 123807) "a") (data (i32.const 123810) "a") (data (i32.const 123813) "a") (data (i32.const 123816) "a") (data (i32.const 123819) "a") (data (i32.const 123822) "a") (data (i32.const 123825) "a") (data (i32.const 123828) "a") (data (i32.const 123831) "a") (data (i32.const 123834) "a") (data (i32.const 123837) "a") (data (i32.const 123840) "a") (data (i32.const 123843) "a") (data (i32.const 123846) "a") (data (i32.const 123849) "a") (data (i32.const 123852) "a") (data (i32.const 123855) "a") (data (i32.const 123858) "a") (data (i32.const 123861) "a") (data (i32.const 123864) "a") (data (i32.const 123867) "a") (data (i32.const 123870) "a") (data (i32.const 123873) "a") (data (i32.const 123876) "a") (data (i32.const 123879) "a") (data (i32.const 123882) "a") (data (i32.const 123885) "a") (data (i32.const 123888) "a") (data (i32.const 123891) "a") (data (i32.const 123894) "a") (data (i32.const 123897) "a") (data (i32.const 123900) "a") (data (i32.const 123903) "a") (data (i32.const 123906) "a") (data (i32.const 123909) "a") (data (i32.const 123912) "a") (data (i32.const 123915) "a") (data (i32.const 123918) "a") (data (i32.const 123921) "a") (data (i32.const 123924) "a") (data (i32.const 123927) "a") (data (i32.const 123930) "a") (data (i32.const 123933) "a") (data (i32.const 123936) "a") (data (i32.const 123939) "a") (data (i32.const 123942) "a") (data (i32.const 123945) "a") (data (i32.const 123948) "a") (data (i32.const 123951) "a") (data (i32.const 123954) "a") (data (i32.const 123957) "a") (data (i32.const 123960) "a") (data (i32.const 123963) "a") (data (i32.const 123966) "a") (data (i32.const 123969) "a") (data (i32.const 123972) "a") (data (i32.const 123975) "a") (data (i32.const 123978) "a") (data (i32.const 123981) "a") (data (i32.const 123984) "a") (data (i32.const 123987) "a") (data (i32.const 123990) "a") (data (i32.const 123993) "a") (data (i32.const 123996) "a") (data (i32.const 123999) "a") (data (i32.const 124002) "a") (data (i32.const 124005) "a") (data (i32.const 124008) "a") (data (i32.const 124011) "a") (data (i32.const 124014) "a") (data (i32.const 124017) "a") (data (i32.const 124020) "a") (data (i32.const 124023) "a") (data (i32.const 124026) "a") (data (i32.const 124029) "a") (data (i32.const 124032) "a") (data (i32.const 124035) "a") (data (i32.const 124038) "a") (data (i32.const 124041) "a") (data (i32.const 124044) "a") (data (i32.const 124047) "a") (data (i32.const 124050) "a") (data (i32.const 124053) "a") (data (i32.const 124056) "a") (data (i32.const 124059) "a") (data (i32.const 124062) "a") (data (i32.const 124065) "a") (data (i32.const 124068) "a") (data (i32.const 124071) "a") (data (i32.const 124074) "a") (data (i32.const 124077) "a") (data (i32.const 124080) "a") (data (i32.const 124083) "a") (data (i32.const 124086) "a") (data (i32.const 124089) "a") (data (i32.const 124092) "a") (data (i32.const 124095) "a") (data (i32.const 124098) "a") (data (i32.const 124101) "a") (data (i32.const 124104) "a") (data (i32.const 124107) "a") (data (i32.const 124110) "a") (data (i32.const 124113) "a") (data (i32.const 124116) "a") (data (i32.const 124119) "a") (data (i32.const 124122) "a") (data (i32.const 124125) "a") (data (i32.const 124128) "a") (data (i32.const 124131) "a") (data (i32.const 124134) "a") (data (i32.const 124137) "a") (data (i32.const 124140) "a") (data (i32.const 124143) "a") (data (i32.const 124146) "a") (data (i32.const 124149) "a") (data (i32.const 124152) "a") (data (i32.const 124155) "a") (data (i32.const 124158) "a") (data (i32.const 124161) "a") (data (i32.const 124164) "a") (data (i32.const 124167) "a") (data (i32.const 124170) "a") (data (i32.const 124173) "a") (data (i32.const 124176) "a") (data (i32.const 124179) "a") (data (i32.const 124182) "a") (data (i32.const 124185) "a") (data (i32.const 124188) "a") (data (i32.const 124191) "a") (data (i32.const 124194) "a") (data (i32.const 124197) "a") (data (i32.const 124200) "a") (data (i32.const 124203) "a") (data (i32.const 124206) "a") (data (i32.const 124209) "a") (data (i32.const 124212) "a") (data (i32.const 124215) "a") (data (i32.const 124218) "a") (data (i32.const 124221) "a") (data (i32.const 124224) "a") (data (i32.const 124227) "a") (data (i32.const 124230) "a") (data (i32.const 124233) "a") (data (i32.const 124236) "a") (data (i32.const 124239) "a") (data (i32.const 124242) "a") (data (i32.const 124245) "a") (data (i32.const 124248) "a") (data (i32.const 124251) "a") (data (i32.const 124254) "a") (data (i32.const 124257) "a") (data (i32.const 124260) "a") (data (i32.const 124263) "a") (data (i32.const 124266) "a") (data (i32.const 124269) "a") (data (i32.const 124272) "a") (data (i32.const 124275) "a") (data (i32.const 124278) "a") (data (i32.const 124281) "a") (data (i32.const 124284) "a") (data (i32.const 124287) "a") (data (i32.const 124290) "a") (data (i32.const 124293) "a") (data (i32.const 124296) "a") (data (i32.const 124299) "a") (data (i32.const 124302) "a") (data (i32.const 124305) "a") (data (i32.const 124308) "a") (data (i32.const 124311) "a") (data (i32.const 124314) "a") (data (i32.const 124317) "a") (data (i32.const 124320) "a") (data (i32.const 124323) "a") (data (i32.const 124326) "a") (data (i32.const 124329) "a") (data (i32.const 124332) "a") (data (i32.const 124335) "a") (data (i32.const 124338) "a") (data (i32.const 124341) "a") (data (i32.const 124344) "a") (data (i32.const 124347) "a") (data (i32.const 124350) "a") (data (i32.const 124353) "a") (data (i32.const 124356) "a") (data (i32.const 124359) "a") (data (i32.const 124362) "a") (data (i32.const 124365) "a") (data (i32.const 124368) "a") (data (i32.const 124371) "a") (data (i32.const 124374) "a") (data (i32.const 124377) "a") (data (i32.const 124380) "a") (data (i32.const 124383) "a") (data (i32.const 124386) "a") (data (i32.const 124389) "a") (data (i32.const 124392) "a") (data (i32.const 124395) "a") (data (i32.const 124398) "a") (data (i32.const 124401) "a") (data (i32.const 124404) "a") (data (i32.const 124407) "a") (data (i32.const 124410) "a") (data (i32.const 124413) "a") (data (i32.const 124416) "a") (data (i32.const 124419) "a") (data (i32.const 124422) "a") (data (i32.const 124425) "a") (data (i32.const 124428) "a") (data (i32.const 124431) "a") (data (i32.const 124434) "a") (data (i32.const 124437) "a") (data (i32.const 124440) "a") (data (i32.const 124443) "a") (data (i32.const 124446) "a") (data (i32.const 124449) "a") (data (i32.const 124452) "a") (data (i32.const 124455) "a") (data (i32.const 124458) "a") (data (i32.const 124461) "a") (data (i32.const 124464) "a") (data (i32.const 124467) "a") (data (i32.const 124470) "a") (data (i32.const 124473) "a") (data (i32.const 124476) "a") (data (i32.const 124479) "a") (data (i32.const 124482) "a") (data (i32.const 124485) "a") (data (i32.const 124488) "a") (data (i32.const 124491) "a") (data (i32.const 124494) "a") (data (i32.const 124497) "a") (data (i32.const 124500) "a") (data (i32.const 124503) "a") (data (i32.const 124506) "a") (data (i32.const 124509) "a") (data (i32.const 124512) "a") (data (i32.const 124515) "a") (data (i32.const 124518) "a") (data (i32.const 124521) "a") (data (i32.const 124524) "a") (data (i32.const 124527) "a") (data (i32.const 124530) "a") (data (i32.const 124533) "a") (data (i32.const 124536) "a") (data (i32.const 124539) "a") (data (i32.const 124542) "a") (data (i32.const 124545) "a") (data (i32.const 124548) "a") (data (i32.const 124551) "a") (data (i32.const 124554) "a") (data (i32.const 124557) "a") (data (i32.const 124560) "a") (data (i32.const 124563) "a") (data (i32.const 124566) "a") (data (i32.const 124569) "a") (data (i32.const 124572) "a") (data (i32.const 124575) "a") (data (i32.const 124578) "a") (data (i32.const 124581) "a") (data (i32.const 124584) "a") (data (i32.const 124587) "a") (data (i32.const 124590) "a") (data (i32.const 124593) "a") (data (i32.const 124596) "a") (data (i32.const 124599) "a") (data (i32.const 124602) "a") (data (i32.const 124605) "a") (data (i32.const 124608) "a") (data (i32.const 124611) "a") (data (i32.const 124614) "a") (data (i32.const 124617) "a") (data (i32.const 124620) "a") (data (i32.const 124623) "a") (data (i32.const 124626) "a") (data (i32.const 124629) "a") (data (i32.const 124632) "a") (data (i32.const 124635) "a") (data (i32.const 124638) "a") (data (i32.const 124641) "a") (data (i32.const 124644) "a") (data (i32.const 124647) "a") (data (i32.const 124650) "a") (data (i32.const 124653) "a") (data (i32.const 124656) "a") (data (i32.const 124659) "a") (data (i32.const 124662) "a") (data (i32.const 124665) "a") (data (i32.const 124668) "a") (data (i32.const 124671) "a") (data (i32.const 124674) "a") (data (i32.const 124677) "a") (data (i32.const 124680) "a") (data (i32.const 124683) "a") (data (i32.const 124686) "a") (data (i32.const 124689) "a") (data (i32.const 124692) "a") (data (i32.const 124695) "a") (data (i32.const 124698) "a") (data (i32.const 124701) "a") (data (i32.const 124704) "a") (data (i32.const 124707) "a") (data (i32.const 124710) "a") (data (i32.const 124713) "a") (data (i32.const 124716) "a") (data (i32.const 124719) "a") (data (i32.const 124722) "a") (data (i32.const 124725) "a") (data (i32.const 124728) "a") (data (i32.const 124731) "a") (data (i32.const 124734) "a") (data (i32.const 124737) "a") (data (i32.const 124740) "a") (data (i32.const 124743) "a") (data (i32.const 124746) "a") (data (i32.const 124749) "a") (data (i32.const 124752) "a") (data (i32.const 124755) "a") (data (i32.const 124758) "a") (data (i32.const 124761) "a") (data (i32.const 124764) "a") (data (i32.const 124767) "a") (data (i32.const 124770) "a") (data (i32.const 124773) "a") (data (i32.const 124776) "a") (data (i32.const 124779) "a") (data (i32.const 124782) "a") (data (i32.const 124785) "a") (data (i32.const 124788) "a") (data (i32.const 124791) "a") (data (i32.const 124794) "a") (data (i32.const 124797) "a") (data (i32.const 124800) "a") (data (i32.const 124803) "a") (data (i32.const 124806) "a") (data (i32.const 124809) "a") (data (i32.const 124812) "a") (data (i32.const 124815) "a") (data (i32.const 124818) "a") (data (i32.const 124821) "a") (data (i32.const 124824) "a") (data (i32.const 124827) "a") (data (i32.const 124830) "a") (data (i32.const 124833) "a") (data (i32.const 124836) "a") (data (i32.const 124839) "a") (data (i32.const 124842) "a") (data (i32.const 124845) "a") (data (i32.const 124848) "a") (data (i32.const 124851) "a") (data (i32.const 124854) "a") (data (i32.const 124857) "a") (data (i32.const 124860) "a") (data (i32.const 124863) "a") (data (i32.const 124866) "a") (data (i32.const 124869) "a") (data (i32.const 124872) "a") (data (i32.const 124875) "a") (data (i32.const 124878) "a") (data (i32.const 124881) "a") (data (i32.const 124884) "a") (data (i32.const 124887) "a") (data (i32.const 124890) "a") (data (i32.const 124893) "a") (data (i32.const 124896) "a") (data (i32.const 124899) "a") (data (i32.const 124902) "a") (data (i32.const 124905) "a") (data (i32.const 124908) "a") (data (i32.const 124911) "a") (data (i32.const 124914) "a") (data (i32.const 124917) "a") (data (i32.const 124920) "a") (data (i32.const 124923) "a") (data (i32.const 124926) "a") (data (i32.const 124929) "a") (data (i32.const 124932) "a") (data (i32.const 124935) "a") (data (i32.const 124938) "a") (data (i32.const 124941) "a") (data (i32.const 124944) "a") (data (i32.const 124947) "a") (data (i32.const 124950) "a") (data (i32.const 124953) "a") (data (i32.const 124956) "a") (data (i32.const 124959) "a") (data (i32.const 124962) "a") (data (i32.const 124965) "a") (data (i32.const 124968) "a") (data (i32.const 124971) "a") (data (i32.const 124974) "a") (data (i32.const 124977) "a") (data (i32.const 124980) "a") (data (i32.const 124983) "a") (data (i32.const 124986) "a") (data (i32.const 124989) "a") (data (i32.const 124992) "a") (data (i32.const 124995) "a") (data (i32.const 124998) "a") (data (i32.const 125001) "a") (data (i32.const 125004) "a") (data (i32.const 125007) "a") (data (i32.const 125010) "a") (data (i32.const 125013) "a") (data (i32.const 125016) "a") (data (i32.const 125019) "a") (data (i32.const 125022) "a") (data (i32.const 125025) "a") (data (i32.const 125028) "a") (data (i32.const 125031) "a") (data (i32.const 125034) "a") (data (i32.const 125037) "a") (data (i32.const 125040) "a") (data (i32.const 125043) "a") (data (i32.const 125046) "a") (data (i32.const 125049) "a") (data (i32.const 125052) "a") (data (i32.const 125055) "a") (data (i32.const 125058) "a") (data (i32.const 125061) "a") (data (i32.const 125064) "a") (data (i32.const 125067) "a") (data (i32.const 125070) "a") (data (i32.const 125073) "a") (data (i32.const 125076) "a") (data (i32.const 125079) "a") (data (i32.const 125082) "a") (data (i32.const 125085) "a") (data (i32.const 125088) "a") (data (i32.const 125091) "a") (data (i32.const 125094) "a") (data (i32.const 125097) "a") (data (i32.const 125100) "a") (data (i32.const 125103) "a") (data (i32.const 125106) "a") (data (i32.const 125109) "a") (data (i32.const 125112) "a") (data (i32.const 125115) "a") (data (i32.const 125118) "a") (data (i32.const 125121) "a") (data (i32.const 125124) "a") (data (i32.const 125127) "a") (data (i32.const 125130) "a") (data (i32.const 125133) "a") (data (i32.const 125136) "a") (data (i32.const 125139) "a") (data (i32.const 125142) "a") (data (i32.const 125145) "a") (data (i32.const 125148) "a") (data (i32.const 125151) "a") (data (i32.const 125154) "a") (data (i32.const 125157) "a") (data (i32.const 125160) "a") (data (i32.const 125163) "a") (data (i32.const 125166) "a") (data (i32.const 125169) "a") (data (i32.const 125172) "a") (data (i32.const 125175) "a") (data (i32.const 125178) "a") (data (i32.const 125181) "a") (data (i32.const 125184) "a") (data (i32.const 125187) "a") (data (i32.const 125190) "a") (data (i32.const 125193) "a") (data (i32.const 125196) "a") (data (i32.const 125199) "a") (data (i32.const 125202) "a") (data (i32.const 125205) "a") (data (i32.const 125208) "a") (data (i32.const 125211) "a") (data (i32.const 125214) "a") (data (i32.const 125217) "a") (data (i32.const 125220) "a") (data (i32.const 125223) "a") (data (i32.const 125226) "a") (data (i32.const 125229) "a") (data (i32.const 125232) "a") (data (i32.const 125235) "a") (data (i32.const 125238) "a") (data (i32.const 125241) "a") (data (i32.const 125244) "a") (data (i32.const 125247) "a") (data (i32.const 125250) "a") (data (i32.const 125253) "a") (data (i32.const 125256) "a") (data (i32.const 125259) "a") (data (i32.const 125262) "a") (data (i32.const 125265) "a") (data (i32.const 125268) "a") (data (i32.const 125271) "a") (data (i32.const 125274) "a") (data (i32.const 125277) "a") (data (i32.const 125280) "a") (data (i32.const 125283) "a") (data (i32.const 125286) "a") (data (i32.const 125289) "a") (data (i32.const 125292) "a") (data (i32.const 125295) "a") (data (i32.const 125298) "a") (data (i32.const 125301) "a") (data (i32.const 125304) "a") (data (i32.const 125307) "a") (data (i32.const 125310) "a") (data (i32.const 125313) "a") (data (i32.const 125316) "a") (data (i32.const 125319) "a") (data (i32.const 125322) "a") (data (i32.const 125325) "a") (data (i32.const 125328) "a") (data (i32.const 125331) "a") (data (i32.const 125334) "a") (data (i32.const 125337) "a") (data (i32.const 125340) "a") (data (i32.const 125343) "a") (data (i32.const 125346) "a") (data (i32.const 125349) "a") (data (i32.const 125352) "a") (data (i32.const 125355) "a") (data (i32.const 125358) "a") (data (i32.const 125361) "a") (data (i32.const 125364) "a") (data (i32.const 125367) "a") (data (i32.const 125370) "a") (data (i32.const 125373) "a") (data (i32.const 125376) "a") (data (i32.const 125379) "a") (data (i32.const 125382) "a") (data (i32.const 125385) "a") (data (i32.const 125388) "a") (data (i32.const 125391) "a") (data (i32.const 125394) "a") (data (i32.const 125397) "a") (data (i32.const 125400) "a") (data (i32.const 125403) "a") (data (i32.const 125406) "a") (data (i32.const 125409) "a") (data (i32.const 125412) "a") (data (i32.const 125415) "a") (data (i32.const 125418) "a") (data (i32.const 125421) "a") (data (i32.const 125424) "a") (data (i32.const 125427) "a") (data (i32.const 125430) "a") (data (i32.const 125433) "a") (data (i32.const 125436) "a") (data (i32.const 125439) "a") (data (i32.const 125442) "a") (data (i32.const 125445) "a") (data (i32.const 125448) "a") (data (i32.const 125451) "a") (data (i32.const 125454) "a") (data (i32.const 125457) "a") (data (i32.const 125460) "a") (data (i32.const 125463) "a") (data (i32.const 125466) "a") (data (i32.const 125469) "a") (data (i32.const 125472) "a") (data (i32.const 125475) "a") (data (i32.const 125478) "a") (data (i32.const 125481) "a") (data (i32.const 125484) "a") (data (i32.const 125487) "a") (data (i32.const 125490) "a") (data (i32.const 125493) "a") (data (i32.const 125496) "a") (data (i32.const 125499) "a") (data (i32.const 125502) "a") (data (i32.const 125505) "a") (data (i32.const 125508) "a") (data (i32.const 125511) "a") (data (i32.const 125514) "a") (data (i32.const 125517) "a") (data (i32.const 125520) "a") (data (i32.const 125523) "a") (data (i32.const 125526) "a") (data (i32.const 125529) "a") (data (i32.const 125532) "a") (data (i32.const 125535) "a") (data (i32.const 125538) "a") (data (i32.const 125541) "a") (data (i32.const 125544) "a") (data (i32.const 125547) "a") (data (i32.const 125550) "a") (data (i32.const 125553) "a") (data (i32.const 125556) "a") (data (i32.const 125559) "a") (data (i32.const 125562) "a") (data (i32.const 125565) "a") (data (i32.const 125568) "a") (data (i32.const 125571) "a") (data (i32.const 125574) "a") (data (i32.const 125577) "a") (data (i32.const 125580) "a") (data (i32.const 125583) "a") (data (i32.const 125586) "a") (data (i32.const 125589) "a") (data (i32.const 125592) "a") (data (i32.const 125595) "a") (data (i32.const 125598) "a") (data (i32.const 125601) "a") (data (i32.const 125604) "a") (data (i32.const 125607) "a") (data (i32.const 125610) "a") (data (i32.const 125613) "a") (data (i32.const 125616) "a") (data (i32.const 125619) "a") (data (i32.const 125622) "a") (data (i32.const 125625) "a") (data (i32.const 125628) "a") (data (i32.const 125631) "a") (data (i32.const 125634) "a") (data (i32.const 125637) "a") (data (i32.const 125640) "a") (data (i32.const 125643) "a") (data (i32.const 125646) "a") (data (i32.const 125649) "a") (data (i32.const 125652) "a") (data (i32.const 125655) "a") (data (i32.const 125658) "a") (data (i32.const 125661) "a") (data (i32.const 125664) "a") (data (i32.const 125667) "a") (data (i32.const 125670) "a") (data (i32.const 125673) "a") (data (i32.const 125676) "a") (data (i32.const 125679) "a") (data (i32.const 125682) "a") (data (i32.const 125685) "a") (data (i32.const 125688) "a") (data (i32.const 125691) "a") (data (i32.const 125694) "a") (data (i32.const 125697) "a") (data (i32.const 125700) "a") (data (i32.const 125703) "a") (data (i32.const 125706) "a") (data (i32.const 125709) "a") (data (i32.const 125712) "a") (data (i32.const 125715) "a") (data (i32.const 125718) "a") (data (i32.const 125721) "a") (data (i32.const 125724) "a") (data (i32.const 125727) "a") (data (i32.const 125730) "a") (data (i32.const 125733) "a") (data (i32.const 125736) "a") (data (i32.const 125739) "a") (data (i32.const 125742) "a") (data (i32.const 125745) "a") (data (i32.const 125748) "a") (data (i32.const 125751) "a") (data (i32.const 125754) "a") (data (i32.const 125757) "a") (data (i32.const 125760) "a") (data (i32.const 125763) "a") (data (i32.const 125766) "a") (data (i32.const 125769) "a") (data (i32.const 125772) "a") (data (i32.const 125775) "a") (data (i32.const 125778) "a") (data (i32.const 125781) "a") (data (i32.const 125784) "a") (data (i32.const 125787) "a") (data (i32.const 125790) "a") (data (i32.const 125793) "a") (data (i32.const 125796) "a") (data (i32.const 125799) "a") (data (i32.const 125802) "a") (data (i32.const 125805) "a") (data (i32.const 125808) "a") (data (i32.const 125811) "a") (data (i32.const 125814) "a") (data (i32.const 125817) "a") (data (i32.const 125820) "a") (data (i32.const 125823) "a") (data (i32.const 125826) "a") (data (i32.const 125829) "a") (data (i32.const 125832) "a") (data (i32.const 125835) "a") (data (i32.const 125838) "a") (data (i32.const 125841) "a") (data (i32.const 125844) "a") (data (i32.const 125847) "a") (data (i32.const 125850) "a") (data (i32.const 125853) "a") (data (i32.const 125856) "a") (data (i32.const 125859) "a") (data (i32.const 125862) "a") (data (i32.const 125865) "a") (data (i32.const 125868) "a") (data (i32.const 125871) "a") (data (i32.const 125874) "a") (data (i32.const 125877) "a") (data (i32.const 125880) "a") (data (i32.const 125883) "a") (data (i32.const 125886) "a") (data (i32.const 125889) "a") (data (i32.const 125892) "a") (data (i32.const 125895) "a") (data (i32.const 125898) "a") (data (i32.const 125901) "a") (data (i32.const 125904) "a") (data (i32.const 125907) "a") (data (i32.const 125910) "a") (data (i32.const 125913) "a") (data (i32.const 125916) "a") (data (i32.const 125919) "a") (data (i32.const 125922) "a") (data (i32.const 125925) "a") (data (i32.const 125928) "a") (data (i32.const 125931) "a") (data (i32.const 125934) "a") (data (i32.const 125937) "a") (data (i32.const 125940) "a") (data (i32.const 125943) "a") (data (i32.const 125946) "a") (data (i32.const 125949) "a") (data (i32.const 125952) "a") (data (i32.const 125955) "a") (data (i32.const 125958) "a") (data (i32.const 125961) "a") (data (i32.const 125964) "a") (data (i32.const 125967) "a") (data (i32.const 125970) "a") (data (i32.const 125973) "a") (data (i32.const 125976) "a") (data (i32.const 125979) "a") (data (i32.const 125982) "a") (data (i32.const 125985) "a") (data (i32.const 125988) "a") (data (i32.const 125991) "a") (data (i32.const 125994) "a") (data (i32.const 125997) "a") (data (i32.const 126000) "a") (data (i32.const 126003) "a") (data (i32.const 126006) "a") (data (i32.const 126009) "a") (data (i32.const 126012) "a") (data (i32.const 126015) "a") (data (i32.const 126018) "a") (data (i32.const 126021) "a") (data (i32.const 126024) "a") (data (i32.const 126027) "a") (data (i32.const 126030) "a") (data (i32.const 126033) "a") (data (i32.const 126036) "a") (data (i32.const 126039) "a") (data (i32.const 126042) "a") (data (i32.const 126045) "a") (data (i32.const 126048) "a") (data (i32.const 126051) "a") (data (i32.const 126054) "a") (data (i32.const 126057) "a") (data (i32.const 126060) "a") (data (i32.const 126063) "a") (data (i32.const 126066) "a") (data (i32.const 126069) "a") (data (i32.const 126072) "a") (data (i32.const 126075) "a") (data (i32.const 126078) "a") (data (i32.const 126081) "a") (data (i32.const 126084) "a") (data (i32.const 126087) "a") (data (i32.const 126090) "a") (data (i32.const 126093) "a") (data (i32.const 126096) "a") (data (i32.const 126099) "a") (data (i32.const 126102) "a") (data (i32.const 126105) "a") (data (i32.const 126108) "a") (data (i32.const 126111) "a") (data (i32.const 126114) "a") (data (i32.const 126117) "a") (data (i32.const 126120) "a") (data (i32.const 126123) "a") (data (i32.const 126126) "a") (data (i32.const 126129) "a") (data (i32.const 126132) "a") (data (i32.const 126135) "a") (data (i32.const 126138) "a") (data (i32.const 126141) "a") (data (i32.const 126144) "a") (data (i32.const 126147) "a") (data (i32.const 126150) "a") (data (i32.const 126153) "a") (data (i32.const 126156) "a") (data (i32.const 126159) "a") (data (i32.const 126162) "a") (data (i32.const 126165) "a") (data (i32.const 126168) "a") (data (i32.const 126171) "a") (data (i32.const 126174) "a") (data (i32.const 126177) "a") (data (i32.const 126180) "a") (data (i32.const 126183) "a") (data (i32.const 126186) "a") (data (i32.const 126189) "a") (data (i32.const 126192) "a") (data (i32.const 126195) "a") (data (i32.const 126198) "a") (data (i32.const 126201) "a") (data (i32.const 126204) "a") (data (i32.const 126207) "a") (data (i32.const 126210) "a") (data (i32.const 126213) "a") (data (i32.const 126216) "a") (data (i32.const 126219) "a") (data (i32.const 126222) "a") (data (i32.const 126225) "a") (data (i32.const 126228) "a") (data (i32.const 126231) "a") (data (i32.const 126234) "a") (data (i32.const 126237) "a") (data (i32.const 126240) "a") (data (i32.const 126243) "a") (data (i32.const 126246) "a") (data (i32.const 126249) "a") (data (i32.const 126252) "a") (data (i32.const 126255) "a") (data (i32.const 126258) "a") (data (i32.const 126261) "a") (data (i32.const 126264) "a") (data (i32.const 126267) "a") (data (i32.const 126270) "a") (data (i32.const 126273) "a") (data (i32.const 126276) "a") (data (i32.const 126279) "a") (data (i32.const 126282) "a") (data (i32.const 126285) "a") (data (i32.const 126288) "a") (data (i32.const 126291) "a") (data (i32.const 126294) "a") (data (i32.const 126297) "a") (data (i32.const 126300) "a") (data (i32.const 126303) "a") (data (i32.const 126306) "a") (data (i32.const 126309) "a") (data (i32.const 126312) "a") (data (i32.const 126315) "a") (data (i32.const 126318) "a") (data (i32.const 126321) "a") (data (i32.const 126324) "a") (data (i32.const 126327) "a") (data (i32.const 126330) "a") (data (i32.const 126333) "a") (data (i32.const 126336) "a") (data (i32.const 126339) "a") (data (i32.const 126342) "a") (data (i32.const 126345) "a") (data (i32.const 126348) "a") (data (i32.const 126351) "a") (data (i32.const 126354) "a") (data (i32.const 126357) "a") (data (i32.const 126360) "a") (data (i32.const 126363) "a") (data (i32.const 126366) "a") (data (i32.const 126369) "a") (data (i32.const 126372) "a") (data (i32.const 126375) "a") (data (i32.const 126378) "a") (data (i32.const 126381) "a") (data (i32.const 126384) "a") (data (i32.const 126387) "a") (data (i32.const 126390) "a") (data (i32.const 126393) "a") (data (i32.const 126396) "a") (data (i32.const 126399) "a") (data (i32.const 126402) "a") (data (i32.const 126405) "a") (data (i32.const 126408) "a") (data (i32.const 126411) "a") (data (i32.const 126414) "a") (data (i32.const 126417) "a") (data (i32.const 126420) "a") (data (i32.const 126423) "a") (data (i32.const 126426) "a") (data (i32.const 126429) "a") (data (i32.const 126432) "a") (data (i32.const 126435) "a") (data (i32.const 126438) "a") (data (i32.const 126441) "a") (data (i32.const 126444) "a") (data (i32.const 126447) "a") (data (i32.const 126450) "a") (data (i32.const 126453) "a") (data (i32.const 126456) "a") (data (i32.const 126459) "a") (data (i32.const 126462) "a") (data (i32.const 126465) "a") (data (i32.const 126468) "a") (data (i32.const 126471) "a") (data (i32.const 126474) "a") (data (i32.const 126477) "a") (data (i32.const 126480) "a") (data (i32.const 126483) "a") (data (i32.const 126486) "a") (data (i32.const 126489) "a") (data (i32.const 126492) "a") (data (i32.const 126495) "a") (data (i32.const 126498) "a") (data (i32.const 126501) "a") (data (i32.const 126504) "a") (data (i32.const 126507) "a") (data (i32.const 126510) "a") (data (i32.const 126513) "a") (data (i32.const 126516) "a") (data (i32.const 126519) "a") (data (i32.const 126522) "a") (data (i32.const 126525) "a") (data (i32.const 126528) "a") (data (i32.const 126531) "a") (data (i32.const 126534) "a") (data (i32.const 126537) "a") (data (i32.const 126540) "a") (data (i32.const 126543) "a") (data (i32.const 126546) "a") (data (i32.const 126549) "a") (data (i32.const 126552) "a") (data (i32.const 126555) "a") (data (i32.const 126558) "a") (data (i32.const 126561) "a") (data (i32.const 126564) "a") (data (i32.const 126567) "a") (data (i32.const 126570) "a") (data (i32.const 126573) "a") (data (i32.const 126576) "a") (data (i32.const 126579) "a") (data (i32.const 126582) "a") (data (i32.const 126585) "a") (data (i32.const 126588) "a") (data (i32.const 126591) "a") (data (i32.const 126594) "a") (data (i32.const 126597) "a") (data (i32.const 126600) "a") (data (i32.const 126603) "a") (data (i32.const 126606) "a") (data (i32.const 126609) "a") (data (i32.const 126612) "a") (data (i32.const 126615) "a") (data (i32.const 126618) "a") (data (i32.const 126621) "a") (data (i32.const 126624) "a") (data (i32.const 126627) "a") (data (i32.const 126630) "a") (data (i32.const 126633) "a") (data (i32.const 126636) "a") (data (i32.const 126639) "a") (data (i32.const 126642) "a") (data (i32.const 126645) "a") (data (i32.const 126648) "a") (data (i32.const 126651) "a") (data (i32.const 126654) "a") (data (i32.const 126657) "a") (data (i32.const 126660) "a") (data (i32.const 126663) "a") (data (i32.const 126666) "a") (data (i32.const 126669) "a") (data (i32.const 126672) "a") (data (i32.const 126675) "a") (data (i32.const 126678) "a") (data (i32.const 126681) "a") (data (i32.const 126684) "a") (data (i32.const 126687) "a") (data (i32.const 126690) "a") (data (i32.const 126693) "a") (data (i32.const 126696) "a") (data (i32.const 126699) "a") (data (i32.const 126702) "a") (data (i32.const 126705) "a") (data (i32.const 126708) "a") (data (i32.const 126711) "a") (data (i32.const 126714) "a") (data (i32.const 126717) "a") (data (i32.const 126720) "a") (data (i32.const 126723) "a") (data (i32.const 126726) "a") (data (i32.const 126729) "a") (data (i32.const 126732) "a") (data (i32.const 126735) "a") (data (i32.const 126738) "a") (data (i32.const 126741) "a") (data (i32.const 126744) "a") (data (i32.const 126747) "a") (data (i32.const 126750) "a") (data (i32.const 126753) "a") (data (i32.const 126756) "a") (data (i32.const 126759) "a") (data (i32.const 126762) "a") (data (i32.const 126765) "a") (data (i32.const 126768) "a") (data (i32.const 126771) "a") (data (i32.const 126774) "a") (data (i32.const 126777) "a") (data (i32.const 126780) "a") (data (i32.const 126783) "a") (data (i32.const 126786) "a") (data (i32.const 126789) "a") (data (i32.const 126792) "a") (data (i32.const 126795) "a") (data (i32.const 126798) "a") (data (i32.const 126801) "a") (data (i32.const 126804) "a") (data (i32.const 126807) "a") (data (i32.const 126810) "a") (data (i32.const 126813) "a") (data (i32.const 126816) "a") (data (i32.const 126819) "a") (data (i32.const 126822) "a") (data (i32.const 126825) "a") (data (i32.const 126828) "a") (data (i32.const 126831) "a") (data (i32.const 126834) "a") (data (i32.const 126837) "a") (data (i32.const 126840) "a") (data (i32.const 126843) "a") (data (i32.const 126846) "a") (data (i32.const 126849) "a") (data (i32.const 126852) "a") (data (i32.const 126855) "a") (data (i32.const 126858) "a") (data (i32.const 126861) "a") (data (i32.const 126864) "a") (data (i32.const 126867) "a") (data (i32.const 126870) "a") (data (i32.const 126873) "a") (data (i32.const 126876) "a") (data (i32.const 126879) "a") (data (i32.const 126882) "a") (data (i32.const 126885) "a") (data (i32.const 126888) "a") (data (i32.const 126891) "a") (data (i32.const 126894) "a") (data (i32.const 126897) "a") (data (i32.const 126900) "a") (data (i32.const 126903) "a") (data (i32.const 126906) "a") (data (i32.const 126909) "a") (data (i32.const 126912) "a") (data (i32.const 126915) "a") (data (i32.const 126918) "a") (data (i32.const 126921) "a") (data (i32.const 126924) "a") (data (i32.const 126927) "a") (data (i32.const 126930) "a") (data (i32.const 126933) "a") (data (i32.const 126936) "a") (data (i32.const 126939) "a") (data (i32.const 126942) "a") (data (i32.const 126945) "a") (data (i32.const 126948) "a") (data (i32.const 126951) "a") (data (i32.const 126954) "a") (data (i32.const 126957) "a") (data (i32.const 126960) "a") (data (i32.const 126963) "a") (data (i32.const 126966) "a") (data (i32.const 126969) "a") (data (i32.const 126972) "a") (data (i32.const 126975) "a") (data (i32.const 126978) "a") (data (i32.const 126981) "a") (data (i32.const 126984) "a") (data (i32.const 126987) "a") (data (i32.const 126990) "a") (data (i32.const 126993) "a") (data (i32.const 126996) "a") (data (i32.const 126999) "a") (data (i32.const 127002) "a") (data (i32.const 127005) "a") (data (i32.const 127008) "a") (data (i32.const 127011) "a") (data (i32.const 127014) "a") (data (i32.const 127017) "a") (data (i32.const 127020) "a") (data (i32.const 127023) "a") (data (i32.const 127026) "a") (data (i32.const 127029) "a") (data (i32.const 127032) "a") (data (i32.const 127035) "a") (data (i32.const 127038) "a") (data (i32.const 127041) "a") (data (i32.const 127044) "a") (data (i32.const 127047) "a") (data (i32.const 127050) "a") (data (i32.const 127053) "a") (data (i32.const 127056) "a") (data (i32.const 127059) "a") (data (i32.const 127062) "a") (data (i32.const 127065) "a") (data (i32.const 127068) "a") (data (i32.const 127071) "a") (data (i32.const 127074) "a") (data (i32.const 127077) "a") (data (i32.const 127080) "a") (data (i32.const 127083) "a") (data (i32.const 127086) "a") (data (i32.const 127089) "a") (data (i32.const 127092) "a") (data (i32.const 127095) "a") (data (i32.const 127098) "a") (data (i32.const 127101) "a") (data (i32.const 127104) "a") (data (i32.const 127107) "a") (data (i32.const 127110) "a") (data (i32.const 127113) "a") (data (i32.const 127116) "a") (data (i32.const 127119) "a") (data (i32.const 127122) "a") (data (i32.const 127125) "a") (data (i32.const 127128) "a") (data (i32.const 127131) "a") (data (i32.const 127134) "a") (data (i32.const 127137) "a") (data (i32.const 127140) "a") (data (i32.const 127143) "a") (data (i32.const 127146) "a") (data (i32.const 127149) "a") (data (i32.const 127152) "a") (data (i32.const 127155) "a") (data (i32.const 127158) "a") (data (i32.const 127161) "a") (data (i32.const 127164) "a") (data (i32.const 127167) "a") (data (i32.const 127170) "a") (data (i32.const 127173) "a") (data (i32.const 127176) "a") (data (i32.const 127179) "a") (data (i32.const 127182) "a") (data (i32.const 127185) "a") (data (i32.const 127188) "a") (data (i32.const 127191) "a") (data (i32.const 127194) "a") (data (i32.const 127197) "a") (data (i32.const 127200) "a") (data (i32.const 127203) "a") (data (i32.const 127206) "a") (data (i32.const 127209) "a") (data (i32.const 127212) "a") (data (i32.const 127215) "a") (data (i32.const 127218) "a") (data (i32.const 127221) "a") (data (i32.const 127224) "a") (data (i32.const 127227) "a") (data (i32.const 127230) "a") (data (i32.const 127233) "a") (data (i32.const 127236) "a") (data (i32.const 127239) "a") (data (i32.const 127242) "a") (data (i32.const 127245) "a") (data (i32.const 127248) "a") (data (i32.const 127251) "a") (data (i32.const 127254) "a") (data (i32.const 127257) "a") (data (i32.const 127260) "a") (data (i32.const 127263) "a") (data (i32.const 127266) "a") (data (i32.const 127269) "a") (data (i32.const 127272) "a") (data (i32.const 127275) "a") (data (i32.const 127278) "a") (data (i32.const 127281) "a") (data (i32.const 127284) "a") (data (i32.const 127287) "a") (data (i32.const 127290) "a") (data (i32.const 127293) "a") (data (i32.const 127296) "a") (data (i32.const 127299) "a") (data (i32.const 127302) "a") (data (i32.const 127305) "a") (data (i32.const 127308) "a") (data (i32.const 127311) "a") (data (i32.const 127314) "a") (data (i32.const 127317) "a") (data (i32.const 127320) "a") (data (i32.const 127323) "a") (data (i32.const 127326) "a") (data (i32.const 127329) "a") (data (i32.const 127332) "a") (data (i32.const 127335) "a") (data (i32.const 127338) "a") (data (i32.const 127341) "a") (data (i32.const 127344) "a") (data (i32.const 127347) "a") (data (i32.const 127350) "a") (data (i32.const 127353) "a") (data (i32.const 127356) "a") (data (i32.const 127359) "a") (data (i32.const 127362) "a") (data (i32.const 127365) "a") (data (i32.const 127368) "a") (data (i32.const 127371) "a") (data (i32.const 127374) "a") (data (i32.const 127377) "a") (data (i32.const 127380) "a") (data (i32.const 127383) "a") (data (i32.const 127386) "a") (data (i32.const 127389) "a") (data (i32.const 127392) "a") (data (i32.const 127395) "a") (data (i32.const 127398) "a") (data (i32.const 127401) "a") (data (i32.const 127404) "a") (data (i32.const 127407) "a") (data (i32.const 127410) "a") (data (i32.const 127413) "a") (data (i32.const 127416) "a") (data (i32.const 127419) "a") (data (i32.const 127422) "a") (data (i32.const 127425) "a") (data (i32.const 127428) "a") (data (i32.const 127431) "a") (data (i32.const 127434) "a") (data (i32.const 127437) "a") (data (i32.const 127440) "a") (data (i32.const 127443) "a") (data (i32.const 127446) "a") (data (i32.const 127449) "a") (data (i32.const 127452) "a") (data (i32.const 127455) "a") (data (i32.const 127458) "a") (data (i32.const 127461) "a") (data (i32.const 127464) "a") (data (i32.const 127467) "a") (data (i32.const 127470) "a") (data (i32.const 127473) "a") (data (i32.const 127476) "a") (data (i32.const 127479) "a") (data (i32.const 127482) "a") (data (i32.const 127485) "a") (data (i32.const 127488) "a") (data (i32.const 127491) "a") (data (i32.const 127494) "a") (data (i32.const 127497) "a") (data (i32.const 127500) "a") (data (i32.const 127503) "a") (data (i32.const 127506) "a") (data (i32.const 127509) "a") (data (i32.const 127512) "a") (data (i32.const 127515) "a") (data (i32.const 127518) "a") (data (i32.const 127521) "a") (data (i32.const 127524) "a") (data (i32.const 127527) "a") (data (i32.const 127530) "a") (data (i32.const 127533) "a") (data (i32.const 127536) "a") (data (i32.const 127539) "a") (data (i32.const 127542) "a") (data (i32.const 127545) "a") (data (i32.const 127548) "a") (data (i32.const 127551) "a") (data (i32.const 127554) "a") (data (i32.const 127557) "a") (data (i32.const 127560) "a") (data (i32.const 127563) "a") (data (i32.const 127566) "a") (data (i32.const 127569) "a") (data (i32.const 127572) "a") (data (i32.const 127575) "a") (data (i32.const 127578) "a") (data (i32.const 127581) "a") (data (i32.const 127584) "a") (data (i32.const 127587) "a") (data (i32.const 127590) "a") (data (i32.const 127593) "a") (data (i32.const 127596) "a") (data (i32.const 127599) "a") (data (i32.const 127602) "a") (data (i32.const 127605) "a") (data (i32.const 127608) "a") (data (i32.const 127611) "a") (data (i32.const 127614) "a") (data (i32.const 127617) "a") (data (i32.const 127620) "a") (data (i32.const 127623) "a") (data (i32.const 127626) "a") (data (i32.const 127629) "a") (data (i32.const 127632) "a") (data (i32.const 127635) "a") (data (i32.const 127638) "a") (data (i32.const 127641) "a") (data (i32.const 127644) "a") (data (i32.const 127647) "a") (data (i32.const 127650) "a") (data (i32.const 127653) "a") (data (i32.const 127656) "a") (data (i32.const 127659) "a") (data (i32.const 127662) "a") (data (i32.const 127665) "a") (data (i32.const 127668) "a") (data (i32.const 127671) "a") (data (i32.const 127674) "a") (data (i32.const 127677) "a") (data (i32.const 127680) "a") (data (i32.const 127683) "a") (data (i32.const 127686) "a") (data (i32.const 127689) "a") (data (i32.const 127692) "a") (data (i32.const 127695) "a") (data (i32.const 127698) "a") (data (i32.const 127701) "a") (data (i32.const 127704) "a") (data (i32.const 127707) "a") (data (i32.const 127710) "a") (data (i32.const 127713) "a") (data (i32.const 127716) "a") (data (i32.const 127719) "a") (data (i32.const 127722) "a") (data (i32.const 127725) "a") (data (i32.const 127728) "a") (data (i32.const 127731) "a") (data (i32.const 127734) "a") (data (i32.const 127737) "a") (data (i32.const 127740) "a") (data (i32.const 127743) "a") (data (i32.const 127746) "a") (data (i32.const 127749) "a") (data (i32.const 127752) "a") (data (i32.const 127755) "a") (data (i32.const 127758) "a") (data (i32.const 127761) "a") (data (i32.const 127764) "a") (data (i32.const 127767) "a") (data (i32.const 127770) "a") (data (i32.const 127773) "a") (data (i32.const 127776) "a") (data (i32.const 127779) "a") (data (i32.const 127782) "a") (data (i32.const 127785) "a") (data (i32.const 127788) "a") (data (i32.const 127791) "a") (data (i32.const 127794) "a") (data (i32.const 127797) "a") (data (i32.const 127800) "a") (data (i32.const 127803) "a") (data (i32.const 127806) "a") (data (i32.const 127809) "a") (data (i32.const 127812) "a") (data (i32.const 127815) "a") (data (i32.const 127818) "a") (data (i32.const 127821) "a") (data (i32.const 127824) "a") (data (i32.const 127827) "a") (data (i32.const 127830) "a") (data (i32.const 127833) "a") (data (i32.const 127836) "a") (data (i32.const 127839) "a") (data (i32.const 127842) "a") (data (i32.const 127845) "a") (data (i32.const 127848) "a") (data (i32.const 127851) "a") (data (i32.const 127854) "a") (data (i32.const 127857) "a") (data (i32.const 127860) "a") (data (i32.const 127863) "a") (data (i32.const 127866) "a") (data (i32.const 127869) "a") (data (i32.const 127872) "a") (data (i32.const 127875) "a") (data (i32.const 127878) "a") (data (i32.const 127881) "a") (data (i32.const 127884) "a") (data (i32.const 127887) "a") (data (i32.const 127890) "a") (data (i32.const 127893) "a") (data (i32.const 127896) "a") (data (i32.const 127899) "a") (data (i32.const 127902) "a") (data (i32.const 127905) "a") (data (i32.const 127908) "a") (data (i32.const 127911) "a") (data (i32.const 127914) "a") (data (i32.const 127917) "a") (data (i32.const 127920) "a") (data (i32.const 127923) "a") (data (i32.const 127926) "a") (data (i32.const 127929) "a") (data (i32.const 127932) "a") (data (i32.const 127935) "a") (data (i32.const 127938) "a") (data (i32.const 127941) "a") (data (i32.const 127944) "a") (data (i32.const 127947) "a") (data (i32.const 127950) "a") (data (i32.const 127953) "a") (data (i32.const 127956) "a") (data (i32.const 127959) "a") (data (i32.const 127962) "a") (data (i32.const 127965) "a") (data (i32.const 127968) "a") (data (i32.const 127971) "a") (data (i32.const 127974) "a") (data (i32.const 127977) "a") (data (i32.const 127980) "a") (data (i32.const 127983) "a") (data (i32.const 127986) "a") (data (i32.const 127989) "a") (data (i32.const 127992) "a") (data (i32.const 127995) "a") (data (i32.const 127998) "a") (data (i32.const 128001) "a") (data (i32.const 128004) "a") (data (i32.const 128007) "a") (data (i32.const 128010) "a") (data (i32.const 128013) "a") (data (i32.const 128016) "a") (data (i32.const 128019) "a") (data (i32.const 128022) "a") (data (i32.const 128025) "a") (data (i32.const 128028) "a") (data (i32.const 128031) "a") (data (i32.const 128034) "a") (data (i32.const 128037) "a") (data (i32.const 128040) "a") (data (i32.const 128043) "a") (data (i32.const 128046) "a") (data (i32.const 128049) "a") (data (i32.const 128052) "a") (data (i32.const 128055) "a") (data (i32.const 128058) "a") (data (i32.const 128061) "a") (data (i32.const 128064) "a") (data (i32.const 128067) "a") (data (i32.const 128070) "a") (data (i32.const 128073) "a") (data (i32.const 128076) "a") (data (i32.const 128079) "a") (data (i32.const 128082) "a") (data (i32.const 128085) "a") (data (i32.const 128088) "a") (data (i32.const 128091) "a") (data (i32.const 128094) "a") (data (i32.const 128097) "a") (data (i32.const 128100) "a") (data (i32.const 128103) "a") (data (i32.const 128106) "a") (data (i32.const 128109) "a") (data (i32.const 128112) "a") (data (i32.const 128115) "a") (data (i32.const 128118) "a") (data (i32.const 128121) "a") (data (i32.const 128124) "a") (data (i32.const 128127) "a") (data (i32.const 128130) "a") (data (i32.const 128133) "a") (data (i32.const 128136) "a") (data (i32.const 128139) "a") (data (i32.const 128142) "a") (data (i32.const 128145) "a") (data (i32.const 128148) "a") (data (i32.const 128151) "a") (data (i32.const 128154) "a") (data (i32.const 128157) "a") (data (i32.const 128160) "a") (data (i32.const 128163) "a") (data (i32.const 128166) "a") (data (i32.const 128169) "a") (data (i32.const 128172) "a") (data (i32.const 128175) "a") (data (i32.const 128178) "a") (data (i32.const 128181) "a") (data (i32.const 128184) "a") (data (i32.const 128187) "a") (data (i32.const 128190) "a") (data (i32.const 128193) "a") (data (i32.const 128196) "a") (data (i32.const 128199) "a") (data (i32.const 128202) "a") (data (i32.const 128205) "a") (data (i32.const 128208) "a") (data (i32.const 128211) "a") (data (i32.const 128214) "a") (data (i32.const 128217) "a") (data (i32.const 128220) "a") (data (i32.const 128223) "a") (data (i32.const 128226) "a") (data (i32.const 128229) "a") (data (i32.const 128232) "a") (data (i32.const 128235) "a") (data (i32.const 128238) "a") (data (i32.const 128241) "a") (data (i32.const 128244) "a") (data (i32.const 128247) "a") (data (i32.const 128250) "a") (data (i32.const 128253) "a") (data (i32.const 128256) "a") (data (i32.const 128259) "a") (data (i32.const 128262) "a") (data (i32.const 128265) "a") (data (i32.const 128268) "a") (data (i32.const 128271) "a") (data (i32.const 128274) "a") (data (i32.const 128277) "a") (data (i32.const 128280) "a") (data (i32.const 128283) "a") (data (i32.const 128286) "a") (data (i32.const 128289) "a") (data (i32.const 128292) "a") (data (i32.const 128295) "a") (data (i32.const 128298) "a") (data (i32.const 128301) "a") (data (i32.const 128304) "a") (data (i32.const 128307) "a") (data (i32.const 128310) "a") (data (i32.const 128313) "a") (data (i32.const 128316) "a") (data (i32.const 128319) "a") (data (i32.const 128322) "a") (data (i32.const 128325) "a") (data (i32.const 128328) "a") (data (i32.const 128331) "a") (data (i32.const 128334) "a") (data (i32.const 128337) "a") (data (i32.const 128340) "a") (data (i32.const 128343) "a") (data (i32.const 128346) "a") (data (i32.const 128349) "a") (data (i32.const 128352) "a") (data (i32.const 128355) "a") (data (i32.const 128358) "a") (data (i32.const 128361) "a") (data (i32.const 128364) "a") (data (i32.const 128367) "a") (data (i32.const 128370) "a") (data (i32.const 128373) "a") (data (i32.const 128376) "a") (data (i32.const 128379) "a") (data (i32.const 128382) "a") (data (i32.const 128385) "a") (data (i32.const 128388) "a") (data (i32.const 128391) "a") (data (i32.const 128394) "a") (data (i32.const 128397) "a") (data (i32.const 128400) "a") (data (i32.const 128403) "a") (data (i32.const 128406) "a") (data (i32.const 128409) "a") (data (i32.const 128412) "a") (data (i32.const 128415) "a") (data (i32.const 128418) "a") (data (i32.const 128421) "a") (data (i32.const 128424) "a") (data (i32.const 128427) "a") (data (i32.const 128430) "a") (data (i32.const 128433) "a") (data (i32.const 128436) "a") (data (i32.const 128439) "a") (data (i32.const 128442) "a") (data (i32.const 128445) "a") (data (i32.const 128448) "a") (data (i32.const 128451) "a") (data (i32.const 128454) "a") (data (i32.const 128457) "a") (data (i32.const 128460) "a") (data (i32.const 128463) "a") (data (i32.const 128466) "a") (data (i32.const 128469) "a") (data (i32.const 128472) "a") (data (i32.const 128475) "a") (data (i32.const 128478) "a") (data (i32.const 128481) "a") (data (i32.const 128484) "a") (data (i32.const 128487) "a") (data (i32.const 128490) "a") (data (i32.const 128493) "a") (data (i32.const 128496) "a") (data (i32.const 128499) "a") (data (i32.const 128502) "a") (data (i32.const 128505) "a") (data (i32.const 128508) "a") (data (i32.const 128511) "a") (data (i32.const 128514) "a") (data (i32.const 128517) "a") (data (i32.const 128520) "a") (data (i32.const 128523) "a") (data (i32.const 128526) "a") (data (i32.const 128529) "a") (data (i32.const 128532) "a") (data (i32.const 128535) "a") (data (i32.const 128538) "a") (data (i32.const 128541) "a") (data (i32.const 128544) "a") (data (i32.const 128547) "a") (data (i32.const 128550) "a") (data (i32.const 128553) "a") (data (i32.const 128556) "a") (data (i32.const 128559) "a") (data (i32.const 128562) "a") (data (i32.const 128565) "a") (data (i32.const 128568) "a") (data (i32.const 128571) "a") (data (i32.const 128574) "a") (data (i32.const 128577) "a") (data (i32.const 128580) "a") (data (i32.const 128583) "a") (data (i32.const 128586) "a") (data (i32.const 128589) "a") (data (i32.const 128592) "a") (data (i32.const 128595) "a") (data (i32.const 128598) "a") (data (i32.const 128601) "a") (data (i32.const 128604) "a") (data (i32.const 128607) "a") (data (i32.const 128610) "a") (data (i32.const 128613) "a") (data (i32.const 128616) "a") (data (i32.const 128619) "a") (data (i32.const 128622) "a") (data (i32.const 128625) "a") (data (i32.const 128628) "a") (data (i32.const 128631) "a") (data (i32.const 128634) "a") (data (i32.const 128637) "a") (data (i32.const 128640) "a") (data (i32.const 128643) "a") (data (i32.const 128646) "a") (data (i32.const 128649) "a") (data (i32.const 128652) "a") (data (i32.const 128655) "a") (data (i32.const 128658) "a") (data (i32.const 128661) "a") (data (i32.const 128664) "a") (data (i32.const 128667) "a") (data (i32.const 128670) "a") (data (i32.const 128673) "a") (data (i32.const 128676) "a") (data (i32.const 128679) "a") (data (i32.const 128682) "a") (data (i32.const 128685) "a") (data (i32.const 128688) "a") (data (i32.const 128691) "a") (data (i32.const 128694) "a") (data (i32.const 128697) "a") (data (i32.const 128700) "a") (data (i32.const 128703) "a") (data (i32.const 128706) "a") (data (i32.const 128709) "a") (data (i32.const 128712) "a") (data (i32.const 128715) "a") (data (i32.const 128718) "a") (data (i32.const 128721) "a") (data (i32.const 128724) "a") (data (i32.const 128727) "a") (data (i32.const 128730) "a") (data (i32.const 128733) "a") (data (i32.const 128736) "a") (data (i32.const 128739) "a") (data (i32.const 128742) "a") (data (i32.const 128745) "a") (data (i32.const 128748) "a") (data (i32.const 128751) "a") (data (i32.const 128754) "a") (data (i32.const 128757) "a") (data (i32.const 128760) "a") (data (i32.const 128763) "a") (data (i32.const 128766) "a") (data (i32.const 128769) "a") (data (i32.const 128772) "a") (data (i32.const 128775) "a") (data (i32.const 128778) "a") (data (i32.const 128781) "a") (data (i32.const 128784) "a") (data (i32.const 128787) "a") (data (i32.const 128790) "a") (data (i32.const 128793) "a") (data (i32.const 128796) "a") (data (i32.const 128799) "a") (data (i32.const 128802) "a") (data (i32.const 128805) "a") (data (i32.const 128808) "a") (data (i32.const 128811) "a") (data (i32.const 128814) "a") (data (i32.const 128817) "a") (data (i32.const 128820) "a") (data (i32.const 128823) "a") (data (i32.const 128826) "a") (data (i32.const 128829) "a") (data (i32.const 128832) "a") (data (i32.const 128835) "a") (data (i32.const 128838) "a") (data (i32.const 128841) "a") (data (i32.const 128844) "a") (data (i32.const 128847) "a") (data (i32.const 128850) "a") (data (i32.const 128853) "a") (data (i32.const 128856) "a") (data (i32.const 128859) "a") (data (i32.const 128862) "a") (data (i32.const 128865) "a") (data (i32.const 128868) "a") (data (i32.const 128871) "a") (data (i32.const 128874) "a") (data (i32.const 128877) "a") (data (i32.const 128880) "a") (data (i32.const 128883) "a") (data (i32.const 128886) "a") (data (i32.const 128889) "a") (data (i32.const 128892) "a") (data (i32.const 128895) "a") (data (i32.const 128898) "a") (data (i32.const 128901) "a") (data (i32.const 128904) "a") (data (i32.const 128907) "a") (data (i32.const 128910) "a") (data (i32.const 128913) "a") (data (i32.const 128916) "a") (data (i32.const 128919) "a") (data (i32.const 128922) "a") (data (i32.const 128925) "a") (data (i32.const 128928) "a") (data (i32.const 128931) "a") (data (i32.const 128934) "a") (data (i32.const 128937) "a") (data (i32.const 128940) "a") (data (i32.const 128943) "a") (data (i32.const 128946) "a") (data (i32.const 128949) "a") (data (i32.const 128952) "a") (data (i32.const 128955) "a") (data (i32.const 128958) "a") (data (i32.const 128961) "a") (data (i32.const 128964) "a") (data (i32.const 128967) "a") (data (i32.const 128970) "a") (data (i32.const 128973) "a") (data (i32.const 128976) "a") (data (i32.const 128979) "a") (data (i32.const 128982) "a") (data (i32.const 128985) "a") (data (i32.const 128988) "a") (data (i32.const 128991) "a") (data (i32.const 128994) "a") (data (i32.const 128997) "a") (data (i32.const 129000) "a") (data (i32.const 129003) "a") (data (i32.const 129006) "a") (data (i32.const 129009) "a") (data (i32.const 129012) "a") (data (i32.const 129015) "a") (data (i32.const 129018) "a") (data (i32.const 129021) "a") (data (i32.const 129024) "a") (data (i32.const 129027) "a") (data (i32.const 129030) "a") (data (i32.const 129033) "a") (data (i32.const 129036) "a") (data (i32.const 129039) "a") (data (i32.const 129042) "a") (data (i32.const 129045) "a") (data (i32.const 129048) "a") (data (i32.const 129051) "a") (data (i32.const 129054) "a") (data (i32.const 129057) "a") (data (i32.const 129060) "a") (data (i32.const 129063) "a") (data (i32.const 129066) "a") (data (i32.const 129069) "a") (data (i32.const 129072) "a") (data (i32.const 129075) "a") (data (i32.const 129078) "a") (data (i32.const 129081) "a") (data (i32.const 129084) "a") (data (i32.const 129087) "a") (data (i32.const 129090) "a") (data (i32.const 129093) "a") (data (i32.const 129096) "a") (data (i32.const 129099) "a") (data (i32.const 129102) "a") (data (i32.const 129105) "a") (data (i32.const 129108) "a") (data (i32.const 129111) "a") (data (i32.const 129114) "a") (data (i32.const 129117) "a") (data (i32.const 129120) "a") (data (i32.const 129123) "a") (data (i32.const 129126) "a") (data (i32.const 129129) "a") (data (i32.const 129132) "a") (data (i32.const 129135) "a") (data (i32.const 129138) "a") (data (i32.const 129141) "a") (data (i32.const 129144) "a") (data (i32.const 129147) "a") (data (i32.const 129150) "a") (data (i32.const 129153) "a") (data (i32.const 129156) "a") (data (i32.const 129159) "a") (data (i32.const 129162) "a") (data (i32.const 129165) "a") (data (i32.const 129168) "a") (data (i32.const 129171) "a") (data (i32.const 129174) "a") (data (i32.const 129177) "a") (data (i32.const 129180) "a") (data (i32.const 129183) "a") (data (i32.const 129186) "a") (data (i32.const 129189) "a") (data (i32.const 129192) "a") (data (i32.const 129195) "a") (data (i32.const 129198) "a") (data (i32.const 129201) "a") (data (i32.const 129204) "a") (data (i32.const 129207) "a") (data (i32.const 129210) "a") (data (i32.const 129213) "a") (data (i32.const 129216) "a") (data (i32.const 129219) "a") (data (i32.const 129222) "a") (data (i32.const 129225) "a") (data (i32.const 129228) "a") (data (i32.const 129231) "a") (data (i32.const 129234) "a") (data (i32.const 129237) "a") (data (i32.const 129240) "a") (data (i32.const 129243) "a") (data (i32.const 129246) "a") (data (i32.const 129249) "a") (data (i32.const 129252) "a") (data (i32.const 129255) "a") (data (i32.const 129258) "a") (data (i32.const 129261) "a") (data (i32.const 129264) "a") (data (i32.const 129267) "a") (data (i32.const 129270) "a") (data (i32.const 129273) "a") (data (i32.const 129276) "a") (data (i32.const 129279) "a") (data (i32.const 129282) "a") (data (i32.const 129285) "a") (data (i32.const 129288) "a") (data (i32.const 129291) "a") (data (i32.const 129294) "a") (data (i32.const 129297) "a") (data (i32.const 129300) "a") (data (i32.const 129303) "a") (data (i32.const 129306) "a") (data (i32.const 129309) "a") (data (i32.const 129312) "a") (data (i32.const 129315) "a") (data (i32.const 129318) "a") (data (i32.const 129321) "a") (data (i32.const 129324) "a") (data (i32.const 129327) "a") (data (i32.const 129330) "a") (data (i32.const 129333) "a") (data (i32.const 129336) "a") (data (i32.const 129339) "a") (data (i32.const 129342) "a") (data (i32.const 129345) "a") (data (i32.const 129348) "a") (data (i32.const 129351) "a") (data (i32.const 129354) "a") (data (i32.const 129357) "a") (data (i32.const 129360) "a") (data (i32.const 129363) "a") (data (i32.const 129366) "a") (data (i32.const 129369) "a") (data (i32.const 129372) "a") (data (i32.const 129375) "a") (data (i32.const 129378) "a") (data (i32.const 129381) "a") (data (i32.const 129384) "a") (data (i32.const 129387) "a") (data (i32.const 129390) "a") (data (i32.const 129393) "a") (data (i32.const 129396) "a") (data (i32.const 129399) "a") (data (i32.const 129402) "a") (data (i32.const 129405) "a") (data (i32.const 129408) "a") (data (i32.const 129411) "a") (data (i32.const 129414) "a") (data (i32.const 129417) "a") (data (i32.const 129420) "a") (data (i32.const 129423) "a") (data (i32.const 129426) "a") (data (i32.const 129429) "a") (data (i32.const 129432) "a") (data (i32.const 129435) "a") (data (i32.const 129438) "a") (data (i32.const 129441) "a") (data (i32.const 129444) "a") (data (i32.const 129447) "a") (data (i32.const 129450) "a") (data (i32.const 129453) "a") (data (i32.const 129456) "a") (data (i32.const 129459) "a") (data (i32.const 129462) "a") (data (i32.const 129465) "a") (data (i32.const 129468) "a") (data (i32.const 129471) "a") (data (i32.const 129474) "a") (data (i32.const 129477) "a") (data (i32.const 129480) "a") (data (i32.const 129483) "a") (data (i32.const 129486) "a") (data (i32.const 129489) "a") (data (i32.const 129492) "a") (data (i32.const 129495) "a") (data (i32.const 129498) "a") (data (i32.const 129501) "a") (data (i32.const 129504) "a") (data (i32.const 129507) "a") (data (i32.const 129510) "a") (data (i32.const 129513) "a") (data (i32.const 129516) "a") (data (i32.const 129519) "a") (data (i32.const 129522) "a") (data (i32.const 129525) "a") (data (i32.const 129528) "a") (data (i32.const 129531) "a") (data (i32.const 129534) "a") (data (i32.const 129537) "a") (data (i32.const 129540) "a") (data (i32.const 129543) "a") (data (i32.const 129546) "a") (data (i32.const 129549) "a") (data (i32.const 129552) "a") (data (i32.const 129555) "a") (data (i32.const 129558) "a") (data (i32.const 129561) "a") (data (i32.const 129564) "a") (data (i32.const 129567) "a") (data (i32.const 129570) "a") (data (i32.const 129573) "a") (data (i32.const 129576) "a") (data (i32.const 129579) "a") (data (i32.const 129582) "a") (data (i32.const 129585) "a") (data (i32.const 129588) "a") (data (i32.const 129591) "a") (data (i32.const 129594) "a") (data (i32.const 129597) "a") (data (i32.const 129600) "a") (data (i32.const 129603) "a") (data (i32.const 129606) "a") (data (i32.const 129609) "a") (data (i32.const 129612) "a") (data (i32.const 129615) "a") (data (i32.const 129618) "a") (data (i32.const 129621) "a") (data (i32.const 129624) "a") (data (i32.const 129627) "a") (data (i32.const 129630) "a") (data (i32.const 129633) "a") (data (i32.const 129636) "a") (data (i32.const 129639) "a") (data (i32.const 129642) "a") (data (i32.const 129645) "a") (data (i32.const 129648) "a") (data (i32.const 129651) "a") (data (i32.const 129654) "a") (data (i32.const 129657) "a") (data (i32.const 129660) "a") (data (i32.const 129663) "a") (data (i32.const 129666) "a") (data (i32.const 129669) "a") (data (i32.const 129672) "a") (data (i32.const 129675) "a") (data (i32.const 129678) "a") (data (i32.const 129681) "a") (data (i32.const 129684) "a") (data (i32.const 129687) "a") (data (i32.const 129690) "a") (data (i32.const 129693) "a") (data (i32.const 129696) "a") (data (i32.const 129699) "a") (data (i32.const 129702) "a") (data (i32.const 129705) "a") (data (i32.const 129708) "a") (data (i32.const 129711) "a") (data (i32.const 129714) "a") (data (i32.const 129717) "a") (data (i32.const 129720) "a") (data (i32.const 129723) "a") (data (i32.const 129726) "a") (data (i32.const 129729) "a") (data (i32.const 129732) "a") (data (i32.const 129735) "a") (data (i32.const 129738) "a") (data (i32.const 129741) "a") (data (i32.const 129744) "a") (data (i32.const 129747) "a") (data (i32.const 129750) "a") (data (i32.const 129753) "a") (data (i32.const 129756) "a") (data (i32.const 129759) "a") (data (i32.const 129762) "a") (data (i32.const 129765) "a") (data (i32.const 129768) "a") (data (i32.const 129771) "a") (data (i32.const 129774) "a") (data (i32.const 129777) "a") (data (i32.const 129780) "a") (data (i32.const 129783) "a") (data (i32.const 129786) "a") (data (i32.const 129789) "a") (data (i32.const 129792) "a") (data (i32.const 129795) "a") (data (i32.const 129798) "a") (data (i32.const 129801) "a") (data (i32.const 129804) "a") (data (i32.const 129807) "a") (data (i32.const 129810) "a") (data (i32.const 129813) "a") (data (i32.const 129816) "a") (data (i32.const 129819) "a") (data (i32.const 129822) "a") (data (i32.const 129825) "a") (data (i32.const 129828) "a") (data (i32.const 129831) "a") (data (i32.const 129834) "a") (data (i32.const 129837) "a") (data (i32.const 129840) "a") (data (i32.const 129843) "a") (data (i32.const 129846) "a") (data (i32.const 129849) "a") (data (i32.const 129852) "a") (data (i32.const 129855) "a") (data (i32.const 129858) "a") (data (i32.const 129861) "a") (data (i32.const 129864) "a") (data (i32.const 129867) "a") (data (i32.const 129870) "a") (data (i32.const 129873) "a") (data (i32.const 129876) "a") (data (i32.const 129879) "a") (data (i32.const 129882) "a") (data (i32.const 129885) "a") (data (i32.const 129888) "a") (data (i32.const 129891) "a") (data (i32.const 129894) "a") (data (i32.const 129897) "a") (data (i32.const 129900) "a") (data (i32.const 129903) "a") (data (i32.const 129906) "a") (data (i32.const 129909) "a") (data (i32.const 129912) "a") (data (i32.const 129915) "a") (data (i32.const 129918) "a") (data (i32.const 129921) "a") (data (i32.const 129924) "a") (data (i32.const 129927) "a") (data (i32.const 129930) "a") (data (i32.const 129933) "a") (data (i32.const 129936) "a") (data (i32.const 129939) "a") (data (i32.const 129942) "a") (data (i32.const 129945) "a") (data (i32.const 129948) "a") (data (i32.const 129951) "a") (data (i32.const 129954) "a") (data (i32.const 129957) "a") (data (i32.const 129960) "a") (data (i32.const 129963) "a") (data (i32.const 129966) "a") (data (i32.const 129969) "a") (data (i32.const 129972) "a") (data (i32.const 129975) "a") (data (i32.const 129978) "a") (data (i32.const 129981) "a") (data (i32.const 129984) "a") (data (i32.const 129987) "a") (data (i32.const 129990) "a") (data (i32.const 129993) "a") (data (i32.const 129996) "a") (data (i32.const 129999) "a") (data (i32.const 130002) "a") (data (i32.const 130005) "a") (data (i32.const 130008) "a") (data (i32.const 130011) "a") (data (i32.const 130014) "a") (data (i32.const 130017) "a") (data (i32.const 130020) "a") (data (i32.const 130023) "a") (data (i32.const 130026) "a") (data (i32.const 130029) "a") (data (i32.const 130032) "a") (data (i32.const 130035) "a") (data (i32.const 130038) "a") (data (i32.const 130041) "a") (data (i32.const 130044) "a") (data (i32.const 130047) "a") (data (i32.const 130050) "a") (data (i32.const 130053) "a") (data (i32.const 130056) "a") (data (i32.const 130059) "a") (data (i32.const 130062) "a") (data (i32.const 130065) "a") (data (i32.const 130068) "a") (data (i32.const 130071) "a") (data (i32.const 130074) "a") (data (i32.const 130077) "a") (data (i32.const 130080) "a") (data (i32.const 130083) "a") (data (i32.const 130086) "a") (data (i32.const 130089) "a") (data (i32.const 130092) "a") (data (i32.const 130095) "a") (data (i32.const 130098) "a") (data (i32.const 130101) "a") (data (i32.const 130104) "a") (data (i32.const 130107) "a") (data (i32.const 130110) "a") (data (i32.const 130113) "a") (data (i32.const 130116) "a") (data (i32.const 130119) "a") (data (i32.const 130122) "a") (data (i32.const 130125) "a") (data (i32.const 130128) "a") (data (i32.const 130131) "a") (data (i32.const 130134) "a") (data (i32.const 130137) "a") (data (i32.const 130140) "a") (data (i32.const 130143) "a") (data (i32.const 130146) "a") (data (i32.const 130149) "a") (data (i32.const 130152) "a") (data (i32.const 130155) "a") (data (i32.const 130158) "a") (data (i32.const 130161) "a") (data (i32.const 130164) "a") (data (i32.const 130167) "a") (data (i32.const 130170) "a") (data (i32.const 130173) "a") (data (i32.const 130176) "a") (data (i32.const 130179) "a") (data (i32.const 130182) "a") (data (i32.const 130185) "a") (data (i32.const 130188) "a") (data (i32.const 130191) "a") (data (i32.const 130194) "a") (data (i32.const 130197) "a") (data (i32.const 130200) "a") (data (i32.const 130203) "a") (data (i32.const 130206) "a") (data (i32.const 130209) "a") (data (i32.const 130212) "a") (data (i32.const 130215) "a") (data (i32.const 130218) "a") (data (i32.const 130221) "a") (data (i32.const 130224) "a") (data (i32.const 130227) "a") (data (i32.const 130230) "a") (data (i32.const 130233) "a") (data (i32.const 130236) "a") (data (i32.const 130239) "a") (data (i32.const 130242) "a") (data (i32.const 130245) "a") (data (i32.const 130248) "a") (data (i32.const 130251) "a") (data (i32.const 130254) "a") (data (i32.const 130257) "a") (data (i32.const 130260) "a") (data (i32.const 130263) "a") (data (i32.const 130266) "a") (data (i32.const 130269) "a") (data (i32.const 130272) "a") (data (i32.const 130275) "a") (data (i32.const 130278) "a") (data (i32.const 130281) "a") (data (i32.const 130284) "a") (data (i32.const 130287) "a") (data (i32.const 130290) "a") (data (i32.const 130293) "a") (data (i32.const 130296) "a") (data (i32.const 130299) "a") (data (i32.const 130302) "a") (data (i32.const 130305) "a") (data (i32.const 130308) "a") (data (i32.const 130311) "a") (data (i32.const 130314) "a") (data (i32.const 130317) "a") (data (i32.const 130320) "a") (data (i32.const 130323) "a") (data (i32.const 130326) "a") (data (i32.const 130329) "a") (data (i32.const 130332) "a") (data (i32.const 130335) "a") (data (i32.const 130338) "a") (data (i32.const 130341) "a") (data (i32.const 130344) "a") (data (i32.const 130347) "a") (data (i32.const 130350) "a") (data (i32.const 130353) "a") (data (i32.const 130356) "a") (data (i32.const 130359) "a") (data (i32.const 130362) "a") (data (i32.const 130365) "a") (data (i32.const 130368) "a") (data (i32.const 130371) "a") (data (i32.const 130374) "a") (data (i32.const 130377) "a") (data (i32.const 130380) "a") (data (i32.const 130383) "a") (data (i32.const 130386) "a") (data (i32.const 130389) "a") (data (i32.const 130392) "a") (data (i32.const 130395) "a") (data (i32.const 130398) "a") (data (i32.const 130401) "a") (data (i32.const 130404) "a") (data (i32.const 130407) "a") (data (i32.const 130410) "a") (data (i32.const 130413) "a") (data (i32.const 130416) "a") (data (i32.const 130419) "a") (data (i32.const 130422) "a") (data (i32.const 130425) "a") (data (i32.const 130428) "a") (data (i32.const 130431) "a") (data (i32.const 130434) "a") (data (i32.const 130437) "a") (data (i32.const 130440) "a") (data (i32.const 130443) "a") (data (i32.const 130446) "a") (data (i32.const 130449) "a") (data (i32.const 130452) "a") (data (i32.const 130455) "a") (data (i32.const 130458) "a") (data (i32.const 130461) "a") (data (i32.const 130464) "a") (data (i32.const 130467) "a") (data (i32.const 130470) "a") (data (i32.const 130473) "a") (data (i32.const 130476) "a") (data (i32.const 130479) "a") (data (i32.const 130482) "a") (data (i32.const 130485) "a") (data (i32.const 130488) "a") (data (i32.const 130491) "a") (data (i32.const 130494) "a") (data (i32.const 130497) "a") (data (i32.const 130500) "a") (data (i32.const 130503) "a") (data (i32.const 130506) "a") (data (i32.const 130509) "a") (data (i32.const 130512) "a") (data (i32.const 130515) "a") (data (i32.const 130518) "a") (data (i32.const 130521) "a") (data (i32.const 130524) "a") (data (i32.const 130527) "a") (data (i32.const 130530) "a") (data (i32.const 130533) "a") (data (i32.const 130536) "a") (data (i32.const 130539) "a") (data (i32.const 130542) "a") (data (i32.const 130545) "a") (data (i32.const 130548) "a") (data (i32.const 130551) "a") (data (i32.const 130554) "a") (data (i32.const 130557) "a") (data (i32.const 130560) "a") (data (i32.const 130563) "a") (data (i32.const 130566) "a") (data (i32.const 130569) "a") (data (i32.const 130572) "a") (data (i32.const 130575) "a") (data (i32.const 130578) "a") (data (i32.const 130581) "a") (data (i32.const 130584) "a") (data (i32.const 130587) "a") (data (i32.const 130590) "a") (data (i32.const 130593) "a") (data (i32.const 130596) "a") (data (i32.const 130599) "a") (data (i32.const 130602) "a") (data (i32.const 130605) "a") (data (i32.const 130608) "a") (data (i32.const 130611) "a") (data (i32.const 130614) "a") (data (i32.const 130617) "a") (data (i32.const 130620) "a") (data (i32.const 130623) "a") (data (i32.const 130626) "a") (data (i32.const 130629) "a") (data (i32.const 130632) "a") (data (i32.const 130635) "a") (data (i32.const 130638) "a") (data (i32.const 130641) "a") (data (i32.const 130644) "a") (data (i32.const 130647) "a") (data (i32.const 130650) "a") (data (i32.const 130653) "a") (data (i32.const 130656) "a") (data (i32.const 130659) "a") (data (i32.const 130662) "a") (data (i32.const 130665) "a") (data (i32.const 130668) "a") (data (i32.const 130671) "a") (data (i32.const 130674) "a") (data (i32.const 130677) "a") (data (i32.const 130680) "a") (data (i32.const 130683) "a") (data (i32.const 130686) "a") (data (i32.const 130689) "a") (data (i32.const 130692) "a") (data (i32.const 130695) "a") (data (i32.const 130698) "a") (data (i32.const 130701) "a") (data (i32.const 130704) "a") (data (i32.const 130707) "a") (data (i32.const 130710) "a") (data (i32.const 130713) "a") (data (i32.const 130716) "a") (data (i32.const 130719) "a") (data (i32.const 130722) "a") (data (i32.const 130725) "a") (data (i32.const 130728) "a") (data (i32.const 130731) "a") (data (i32.const 130734) "a") (data (i32.const 130737) "a") (data (i32.const 130740) "a") (data (i32.const 130743) "a") (data (i32.const 130746) "a") (data (i32.const 130749) "a") (data (i32.const 130752) "a") (data (i32.const 130755) "a") (data (i32.const 130758) "a") (data (i32.const 130761) "a") (data (i32.const 130764) "a") (data (i32.const 130767) "a") (data (i32.const 130770) "a") (data (i32.const 130773) "a") (data (i32.const 130776) "a") (data (i32.const 130779) "a") (data (i32.const 130782) "a") (data (i32.const 130785) "a") (data (i32.const 130788) "a") (data (i32.const 130791) "a") (data (i32.const 130794) "a") (data (i32.const 130797) "a") (data (i32.const 130800) "a") (data (i32.const 130803) "a") (data (i32.const 130806) "a") (data (i32.const 130809) "a") (data (i32.const 130812) "a") (data (i32.const 130815) "a") (data (i32.const 130818) "a") (data (i32.const 130821) "a") (data (i32.const 130824) "a") (data (i32.const 130827) "a") (data (i32.const 130830) "a") (data (i32.const 130833) "a") (data (i32.const 130836) "a") (data (i32.const 130839) "a") (data (i32.const 130842) "a") (data (i32.const 130845) "a") (data (i32.const 130848) "a") (data (i32.const 130851) "a") (data (i32.const 130854) "a") (data (i32.const 130857) "a") (data (i32.const 130860) "a") (data (i32.const 130863) "a") (data (i32.const 130866) "a") (data (i32.const 130869) "a") (data (i32.const 130872) "a") (data (i32.const 130875) "a") (data (i32.const 130878) "a") (data (i32.const 130881) "a") (data (i32.const 130884) "a") (data (i32.const 130887) "a") (data (i32.const 130890) "a") (data (i32.const 130893) "a") (data (i32.const 130896) "a") (data (i32.const 130899) "a") (data (i32.const 130902) "a") (data (i32.const 130905) "a") (data (i32.const 130908) "a") (data (i32.const 130911) "a") (data (i32.const 130914) "a") (data (i32.const 130917) "a") (data (i32.const 130920) "a") (data (i32.const 130923) "a") (data (i32.const 130926) "a") (data (i32.const 130929) "a") (data (i32.const 130932) "a") (data (i32.const 130935) "a") (data (i32.const 130938) "a") (data (i32.const 130941) "a") (data (i32.const 130944) "a") (data (i32.const 130947) "a") (data (i32.const 130950) "a") (data (i32.const 130953) "a") (data (i32.const 130956) "a") (data (i32.const 130959) "a") (data (i32.const 130962) "a") (data (i32.const 130965) "a") (data (i32.const 130968) "a") (data (i32.const 130971) "a") (data (i32.const 130974) "a") (data (i32.const 130977) "a") (data (i32.const 130980) "a") (data (i32.const 130983) "a") (data (i32.const 130986) "a") (data (i32.const 130989) "a") (data (i32.const 130992) "a") (data (i32.const 130995) "a") (data (i32.const 130998) "a") (data (i32.const 131001) "a") (data (i32.const 131004) "a") (data (i32.const 131007) "a") (data (i32.const 131010) "a") (data (i32.const 131013) "a") (data (i32.const 131016) "a") (data (i32.const 131019) "a") (data (i32.const 131022) "a") (data (i32.const 131025) "a") (data (i32.const 131028) "a") (data (i32.const 131031) "a") (data (i32.const 131034) "a") (data (i32.const 131037) "a") (data (i32.const 131040) "a") (data (i32.const 131043) "a") (data (i32.const 131046) "a") (data (i32.const 131049) "a") (data (i32.const 131052) "a") (data (i32.const 131055) "a") (data (i32.const 131058) "a") (data (i32.const 131061) "a") (data (i32.const 131064) "a") (data (i32.const 131067) "a") (data (i32.const 131070) "a") (data (i32.const 131073) "a") (data (i32.const 131076) "a") (data (i32.const 131079) "a") (data (i32.const 131082) "a") (data (i32.const 131085) "a") (data (i32.const 131088) "a") (data (i32.const 131091) "a") (data (i32.const 131094) "a") (data (i32.const 131097) "a") (data (i32.const 131100) "a") (data (i32.const 131103) "a") (data (i32.const 131106) "a") (data (i32.const 131109) "a") (data (i32.const 131112) "a") (data (i32.const 131115) "a") (data (i32.const 131118) "a") (data (i32.const 131121) "a") (data (i32.const 131124) "a") (data (i32.const 131127) "a") (data (i32.const 131130) "a") (data (i32.const 131133) "a") (data (i32.const 131136) "a") (data (i32.const 131139) "a") (data (i32.const 131142) "a") (data (i32.const 131145) "a") (data (i32.const 131148) "a") (data (i32.const 131151) "a") (data (i32.const 131154) "a") (data (i32.const 131157) "a") (data (i32.const 131160) "a") (data (i32.const 131163) "a") (data (i32.const 131166) "a") (data (i32.const 131169) "a") (data (i32.const 131172) "a") (data (i32.const 131175) "a") (data (i32.const 131178) "a") (data (i32.const 131181) "a") (data (i32.const 131184) "a") (data (i32.const 131187) "a") (data (i32.const 131190) "a") (data (i32.const 131193) "a") (data (i32.const 131196) "a") (data (i32.const 131199) "a") (data (i32.const 131202) "a") (data (i32.const 131205) "a") (data (i32.const 131208) "a") (data (i32.const 131211) "a") (data (i32.const 131214) "a") (data (i32.const 131217) "a") (data (i32.const 131220) "a") (data (i32.const 131223) "a") (data (i32.const 131226) "a") (data (i32.const 131229) "a") (data (i32.const 131232) "a") (data (i32.const 131235) "a") (data (i32.const 131238) "a") (data (i32.const 131241) "a") (data (i32.const 131244) "a") (data (i32.const 131247) "a") (data (i32.const 131250) "a") (data (i32.const 131253) "a") (data (i32.const 131256) "a") (data (i32.const 131259) "a") (data (i32.const 131262) "a") (data (i32.const 131265) "a") (data (i32.const 131268) "a") (data (i32.const 131271) "a") (data (i32.const 131274) "a") (data (i32.const 131277) "a") (data (i32.const 131280) "a") (data (i32.const 131283) "a") (data (i32.const 131286) "a") (data (i32.const 131289) "a") (data (i32.const 131292) "a") (data (i32.const 131295) "a") (data (i32.const 131298) "a") (data (i32.const 131301) "a") (data (i32.const 131304) "a") (data (i32.const 131307) "a") (data (i32.const 131310) "a") (data (i32.const 131313) "a") (data (i32.const 131316) "a") (data (i32.const 131319) "a") (data (i32.const 131322) "a") (data (i32.const 131325) "a") (data (i32.const 131328) "a") (data (i32.const 131331) "a") (data (i32.const 131334) "a") (data (i32.const 131337) "a") (data (i32.const 131340) "a") (data (i32.const 131343) "a") (data (i32.const 131346) "a") (data (i32.const 131349) "a") (data (i32.const 131352) "a") (data (i32.const 131355) "a") (data (i32.const 131358) "a") (data (i32.const 131361) "a") (data (i32.const 131364) "a") (data (i32.const 131367) "a") (data (i32.const 131370) "a") (data (i32.const 131373) "a") (data (i32.const 131376) "a") (data (i32.const 131379) "a") (data (i32.const 131382) "a") (data (i32.const 131385) "a") (data (i32.const 131388) "a") (data (i32.const 131391) "a") (data (i32.const 131394) "a") (data (i32.const 131397) "a") (data (i32.const 131400) "a") (data (i32.const 131403) "a") (data (i32.const 131406) "a") (data (i32.const 131409) "a") (data (i32.const 131412) "a") (data (i32.const 131415) "a") (data (i32.const 131418) "a") (data (i32.const 131421) "a") (data (i32.const 131424) "a") (data (i32.const 131427) "a") (data (i32.const 131430) "a") (data (i32.const 131433) "a") (data (i32.const 131436) "a") (data (i32.const 131439) "a") (data (i32.const 131442) "a") (data (i32.const 131445) "a") (data (i32.const 131448) "a") (data (i32.const 131451) "a") (data (i32.const 131454) "a") (data (i32.const 131457) "a") (data (i32.const 131460) "a") (data (i32.const 131463) "a") (data (i32.const 131466) "a") (data (i32.const 131469) "a") (data (i32.const 131472) "a") (data (i32.const 131475) "a") (data (i32.const 131478) "a") (data (i32.const 131481) "a") (data (i32.const 131484) "a") (data (i32.const 131487) "a") (data (i32.const 131490) "a") (data (i32.const 131493) "a") (data (i32.const 131496) "a") (data (i32.const 131499) "a") (data (i32.const 131502) "a") (data (i32.const 131505) "a") (data (i32.const 131508) "a") (data (i32.const 131511) "a") (data (i32.const 131514) "a") (data (i32.const 131517) "a") (data (i32.const 131520) "a") (data (i32.const 131523) "a") (data (i32.const 131526) "a") (data (i32.const 131529) "a") (data (i32.const 131532) "a") (data (i32.const 131535) "a") (data (i32.const 131538) "a") (data (i32.const 131541) "a") (data (i32.const 131544) "a") (data (i32.const 131547) "a") (data (i32.const 131550) "a") (data (i32.const 131553) "a") (data (i32.const 131556) "a") (data (i32.const 131559) "a") (data (i32.const 131562) "a") (data (i32.const 131565) "a") (data (i32.const 131568) "a") (data (i32.const 131571) "a") (data (i32.const 131574) "a") (data (i32.const 131577) "a") (data (i32.const 131580) "a") (data (i32.const 131583) "a") (data (i32.const 131586) "a") (data (i32.const 131589) "a") (data (i32.const 131592) "a") (data (i32.const 131595) "a") (data (i32.const 131598) "a") (data (i32.const 131601) "a") (data (i32.const 131604) "a") (data (i32.const 131607) "a") (data (i32.const 131610) "a") (data (i32.const 131613) "a") (data (i32.const 131616) "a") (data (i32.const 131619) "a") (data (i32.const 131622) "a") (data (i32.const 131625) "a") (data (i32.const 131628) "a") (data (i32.const 131631) "a") (data (i32.const 131634) "a") (data (i32.const 131637) "a") (data (i32.const 131640) "a") (data (i32.const 131643) "a") (data (i32.const 131646) "a") (data (i32.const 131649) "a") (data (i32.const 131652) "a") (data (i32.const 131655) "a") (data (i32.const 131658) "a") (data (i32.const 131661) "a") (data (i32.const 131664) "a") (data (i32.const 131667) "a") (data (i32.const 131670) "a") (data (i32.const 131673) "a") (data (i32.const 131676) "a") (data (i32.const 131679) "a") (data (i32.const 131682) "a") (data (i32.const 131685) "a") (data (i32.const 131688) "a") (data (i32.const 131691) "a") (data (i32.const 131694) "a") (data (i32.const 131697) "a") (data (i32.const 131700) "a") (data (i32.const 131703) "a") (data (i32.const 131706) "a") (data (i32.const 131709) "a") (data (i32.const 131712) "a") (data (i32.const 131715) "a") (data (i32.const 131718) "a") (data (i32.const 131721) "a") (data (i32.const 131724) "a") (data (i32.const 131727) "a") (data (i32.const 131730) "a") (data (i32.const 131733) "a") (data (i32.const 131736) "a") (data (i32.const 131739) "a") (data (i32.const 131742) "a") (data (i32.const 131745) "a") (data (i32.const 131748) "a") (data (i32.const 131751) "a") (data (i32.const 131754) "a") (data (i32.const 131757) "a") (data (i32.const 131760) "a") (data (i32.const 131763) "a") (data (i32.const 131766) "a") (data (i32.const 131769) "a") (data (i32.const 131772) "a") (data (i32.const 131775) "a") (data (i32.const 131778) "a") (data (i32.const 131781) "a") (data (i32.const 131784) "a") (data (i32.const 131787) "a") (data (i32.const 131790) "a") (data (i32.const 131793) "a") (data (i32.const 131796) "a") (data (i32.const 131799) "a") (data (i32.const 131802) "a") (data (i32.const 131805) "a") (data (i32.const 131808) "a") (data (i32.const 131811) "a") (data (i32.const 131814) "a") (data (i32.const 131817) "a") (data (i32.const 131820) "a") (data (i32.const 131823) "a") (data (i32.const 131826) "a") (data (i32.const 131829) "a") (data (i32.const 131832) "a") (data (i32.const 131835) "a") (data (i32.const 131838) "a") (data (i32.const 131841) "a") (data (i32.const 131844) "a") (data (i32.const 131847) "a") (data (i32.const 131850) "a") (data (i32.const 131853) "a") (data (i32.const 131856) "a") (data (i32.const 131859) "a") (data (i32.const 131862) "a") (data (i32.const 131865) "a") (data (i32.const 131868) "a") (data (i32.const 131871) "a") (data (i32.const 131874) "a") (data (i32.const 131877) "a") (data (i32.const 131880) "a") (data (i32.const 131883) "a") (data (i32.const 131886) "a") (data (i32.const 131889) "a") (data (i32.const 131892) "a") (data (i32.const 131895) "a") (data (i32.const 131898) "a") (data (i32.const 131901) "a") (data (i32.const 131904) "a") (data (i32.const 131907) "a") (data (i32.const 131910) "a") (data (i32.const 131913) "a") (data (i32.const 131916) "a") (data (i32.const 131919) "a") (data (i32.const 131922) "a") (data (i32.const 131925) "a") (data (i32.const 131928) "a") (data (i32.const 131931) "a") (data (i32.const 131934) "a") (data (i32.const 131937) "a") (data (i32.const 131940) "a") (data (i32.const 131943) "a") (data (i32.const 131946) "a") (data (i32.const 131949) "a") (data (i32.const 131952) "a") (data (i32.const 131955) "a") (data (i32.const 131958) "a") (data (i32.const 131961) "a") (data (i32.const 131964) "a") (data (i32.const 131967) "a") (data (i32.const 131970) "a") (data (i32.const 131973) "a") (data (i32.const 131976) "a") (data (i32.const 131979) "a") (data (i32.const 131982) "a") (data (i32.const 131985) "a") (data (i32.const 131988) "a") (data (i32.const 131991) "a") (data (i32.const 131994) "a") (data (i32.const 131997) "a") (data (i32.const 132000) "a") (data (i32.const 132003) "a") (data (i32.const 132006) "a") (data (i32.const 132009) "a") (data (i32.const 132012) "a") (data (i32.const 132015) "a") (data (i32.const 132018) "a") (data (i32.const 132021) "a") (data (i32.const 132024) "a") (data (i32.const 132027) "a") (data (i32.const 132030) "a") (data (i32.const 132033) "a") (data (i32.const 132036) "a") (data (i32.const 132039) "a") (data (i32.const 132042) "a") (data (i32.const 132045) "a") (data (i32.const 132048) "a") (data (i32.const 132051) "a") (data (i32.const 132054) "a") (data (i32.const 132057) "a") (data (i32.const 132060) "a") (data (i32.const 132063) "a") (data (i32.const 132066) "a") (data (i32.const 132069) "a") (data (i32.const 132072) "a") (data (i32.const 132075) "a") (data (i32.const 132078) "a") (data (i32.const 132081) "a") (data (i32.const 132084) "a") (data (i32.const 132087) "a") (data (i32.const 132090) "a") (data (i32.const 132093) "a") (data (i32.const 132096) "a") (data (i32.const 132099) "a") (data (i32.const 132102) "a") (data (i32.const 132105) "a") (data (i32.const 132108) "a") (data (i32.const 132111) "a") (data (i32.const 132114) "a") (data (i32.const 132117) "a") (data (i32.const 132120) "a") (data (i32.const 132123) "a") (data (i32.const 132126) "a") (data (i32.const 132129) "a") (data (i32.const 132132) "a") (data (i32.const 132135) "a") (data (i32.const 132138) "a") (data (i32.const 132141) "a") (data (i32.const 132144) "a") (data (i32.const 132147) "a") (data (i32.const 132150) "a") (data (i32.const 132153) "a") (data (i32.const 132156) "a") (data (i32.const 132159) "a") (data (i32.const 132162) "a") (data (i32.const 132165) "a") (data (i32.const 132168) "a") (data (i32.const 132171) "a") (data (i32.const 132174) "a") (data (i32.const 132177) "a") (data (i32.const 132180) "a") (data (i32.const 132183) "a") (data (i32.const 132186) "a") (data (i32.const 132189) "a") (data (i32.const 132192) "a") (data (i32.const 132195) "a") (data (i32.const 132198) "a") (data (i32.const 132201) "a") (data (i32.const 132204) "a") (data (i32.const 132207) "a") (data (i32.const 132210) "a") (data (i32.const 132213) "a") (data (i32.const 132216) "a") (data (i32.const 132219) "a") (data (i32.const 132222) "a") (data (i32.const 132225) "a") (data (i32.const 132228) "a") (data (i32.const 132231) "a") (data (i32.const 132234) "a") (data (i32.const 132237) "a") (data (i32.const 132240) "a") (data (i32.const 132243) "a") (data (i32.const 132246) "a") (data (i32.const 132249) "a") (data (i32.const 132252) "a") (data (i32.const 132255) "a") (data (i32.const 132258) "a") (data (i32.const 132261) "a") (data (i32.const 132264) "a") (data (i32.const 132267) "a") (data (i32.const 132270) "a") (data (i32.const 132273) "a") (data (i32.const 132276) "a") (data (i32.const 132279) "a") (data (i32.const 132282) "a") (data (i32.const 132285) "a") (data (i32.const 132288) "a") (data (i32.const 132291) "a") (data (i32.const 132294) "a") (data (i32.const 132297) "a") (data (i32.const 132300) "a") (data (i32.const 132303) "a") (data (i32.const 132306) "a") (data (i32.const 132309) "a") (data (i32.const 132312) "a") (data (i32.const 132315) "a") (data (i32.const 132318) "a") (data (i32.const 132321) "a") (data (i32.const 132324) "a") (data (i32.const 132327) "a") (data (i32.const 132330) "a") (data (i32.const 132333) "a") (data (i32.const 132336) "a") (data (i32.const 132339) "a") (data (i32.const 132342) "a") (data (i32.const 132345) "a") (data (i32.const 132348) "a") (data (i32.const 132351) "a") (data (i32.const 132354) "a") (data (i32.const 132357) "a") (data (i32.const 132360) "a") (data (i32.const 132363) "a") (data (i32.const 132366) "a") (data (i32.const 132369) "a") (data (i32.const 132372) "a") (data (i32.const 132375) "a") (data (i32.const 132378) "a") (data (i32.const 132381) "a") (data (i32.const 132384) "a") (data (i32.const 132387) "a") (data (i32.const 132390) "a") (data (i32.const 132393) "a") (data (i32.const 132396) "a") (data (i32.const 132399) "a") (data (i32.const 132402) "a") (data (i32.const 132405) "a") (data (i32.const 132408) "a") (data (i32.const 132411) "a") (data (i32.const 132414) "a") (data (i32.const 132417) "a") (data (i32.const 132420) "a") (data (i32.const 132423) "a") (data (i32.const 132426) "a") (data (i32.const 132429) "a") (data (i32.const 132432) "a") (data (i32.const 132435) "a") (data (i32.const 132438) "a") (data (i32.const 132441) "a") (data (i32.const 132444) "a") (data (i32.const 132447) "a") (data (i32.const 132450) "a") (data (i32.const 132453) "a") (data (i32.const 132456) "a") (data (i32.const 132459) "a") (data (i32.const 132462) "a") (data (i32.const 132465) "a") (data (i32.const 132468) "a") (data (i32.const 132471) "a") (data (i32.const 132474) "a") (data (i32.const 132477) "a") (data (i32.const 132480) "a") (data (i32.const 132483) "a") (data (i32.const 132486) "a") (data (i32.const 132489) "a") (data (i32.const 132492) "a") (data (i32.const 132495) "a") (data (i32.const 132498) "a") (data (i32.const 132501) "a") (data (i32.const 132504) "a") (data (i32.const 132507) "a") (data (i32.const 132510) "a") (data (i32.const 132513) "a") (data (i32.const 132516) "a") (data (i32.const 132519) "a") (data (i32.const 132522) "a") (data (i32.const 132525) "a") (data (i32.const 132528) "a") (data (i32.const 132531) "a") (data (i32.const 132534) "a") (data (i32.const 132537) "a") (data (i32.const 132540) "a") (data (i32.const 132543) "a") (data (i32.const 132546) "a") (data (i32.const 132549) "a") (data (i32.const 132552) "a") (data (i32.const 132555) "a") (data (i32.const 132558) "a") (data (i32.const 132561) "a") (data (i32.const 132564) "a") (data (i32.const 132567) "a") (data (i32.const 132570) "a") (data (i32.const 132573) "a") (data (i32.const 132576) "a") (data (i32.const 132579) "a") (data (i32.const 132582) "a") (data (i32.const 132585) "a") (data (i32.const 132588) "a") (data (i32.const 132591) "a") (data (i32.const 132594) "a") (data (i32.const 132597) "a") (data (i32.const 132600) "a") (data (i32.const 132603) "a") (data (i32.const 132606) "a") (data (i32.const 132609) "a") (data (i32.const 132612) "a") (data (i32.const 132615) "a") (data (i32.const 132618) "a") (data (i32.const 132621) "a") (data (i32.const 132624) "a") (data (i32.const 132627) "a") (data (i32.const 132630) "a") (data (i32.const 132633) "a") (data (i32.const 132636) "a") (data (i32.const 132639) "a") (data (i32.const 132642) "a") (data (i32.const 132645) "a") (data (i32.const 132648) "a") (data (i32.const 132651) "a") (data (i32.const 132654) "a") (data (i32.const 132657) "a") (data (i32.const 132660) "a") (data (i32.const 132663) "a") (data (i32.const 132666) "a") (data (i32.const 132669) "a") (data (i32.const 132672) "a") (data (i32.const 132675) "a") (data (i32.const 132678) "a") (data (i32.const 132681) "a") (data (i32.const 132684) "a") (data (i32.const 132687) "a") (data (i32.const 132690) "a") (data (i32.const 132693) "a") (data (i32.const 132696) "a") (data (i32.const 132699) "a") (data (i32.const 132702) "a") (data (i32.const 132705) "a") (data (i32.const 132708) "a") (data (i32.const 132711) "a") (data (i32.const 132714) "a") (data (i32.const 132717) "a") (data (i32.const 132720) "a") (data (i32.const 132723) "a") (data (i32.const 132726) "a") (data (i32.const 132729) "a") (data (i32.const 132732) "a") (data (i32.const 132735) "a") (data (i32.const 132738) "a") (data (i32.const 132741) "a") (data (i32.const 132744) "a") (data (i32.const 132747) "a") (data (i32.const 132750) "a") (data (i32.const 132753) "a") (data (i32.const 132756) "a") (data (i32.const 132759) "a") (data (i32.const 132762) "a") (data (i32.const 132765) "a") (data (i32.const 132768) "a") (data (i32.const 132771) "a") (data (i32.const 132774) "a") (data (i32.const 132777) "a") (data (i32.const 132780) "a") (data (i32.const 132783) "a") (data (i32.const 132786) "a") (data (i32.const 132789) "a") (data (i32.const 132792) "a") (data (i32.const 132795) "a") (data (i32.const 132798) "a") (data (i32.const 132801) "a") (data (i32.const 132804) "a") (data (i32.const 132807) "a") (data (i32.const 132810) "a") (data (i32.const 132813) "a") (data (i32.const 132816) "a") (data (i32.const 132819) "a") (data (i32.const 132822) "a") (data (i32.const 132825) "a") (data (i32.const 132828) "a") (data (i32.const 132831) "a") (data (i32.const 132834) "a") (data (i32.const 132837) "a") (data (i32.const 132840) "a") (data (i32.const 132843) "a") (data (i32.const 132846) "a") (data (i32.const 132849) "a") (data (i32.const 132852) "a") (data (i32.const 132855) "a") (data (i32.const 132858) "a") (data (i32.const 132861) "a") (data (i32.const 132864) "a") (data (i32.const 132867) "a") (data (i32.const 132870) "a") (data (i32.const 132873) "a") (data (i32.const 132876) "a") (data (i32.const 132879) "a") (data (i32.const 132882) "a") (data (i32.const 132885) "a") (data (i32.const 132888) "a") (data (i32.const 132891) "a") (data (i32.const 132894) "a") (data (i32.const 132897) "a") (data (i32.const 132900) "a") (data (i32.const 132903) "a") (data (i32.const 132906) "a") (data (i32.const 132909) "a") (data (i32.const 132912) "a") (data (i32.const 132915) "a") (data (i32.const 132918) "a") (data (i32.const 132921) "a") (data (i32.const 132924) "a") (data (i32.const 132927) "a") (data (i32.const 132930) "a") (data (i32.const 132933) "a") (data (i32.const 132936) "a") (data (i32.const 132939) "a") (data (i32.const 132942) "a") (data (i32.const 132945) "a") (data (i32.const 132948) "a") (data (i32.const 132951) "a") (data (i32.const 132954) "a") (data (i32.const 132957) "a") (data (i32.const 132960) "a") (data (i32.const 132963) "a") (data (i32.const 132966) "a") (data (i32.const 132969) "a") (data (i32.const 132972) "a") (data (i32.const 132975) "a") (data (i32.const 132978) "a") (data (i32.const 132981) "a") (data (i32.const 132984) "a") (data (i32.const 132987) "a") (data (i32.const 132990) "a") (data (i32.const 132993) "a") (data (i32.const 132996) "a") (data (i32.const 132999) "a") (data (i32.const 133002) "a") (data (i32.const 133005) "a") (data (i32.const 133008) "a") (data (i32.const 133011) "a") (data (i32.const 133014) "a") (data (i32.const 133017) "a") (data (i32.const 133020) "a") (data (i32.const 133023) "a") (data (i32.const 133026) "a") (data (i32.const 133029) "a") (data (i32.const 133032) "a") (data (i32.const 133035) "a") (data (i32.const 133038) "a") (data (i32.const 133041) "a") (data (i32.const 133044) "a") (data (i32.const 133047) "a") (data (i32.const 133050) "a") (data (i32.const 133053) "a") (data (i32.const 133056) "a") (data (i32.const 133059) "a") (data (i32.const 133062) "a") (data (i32.const 133065) "a") (data (i32.const 133068) "a") (data (i32.const 133071) "a") (data (i32.const 133074) "a") (data (i32.const 133077) "a") (data (i32.const 133080) "a") (data (i32.const 133083) "a") (data (i32.const 133086) "a") (data (i32.const 133089) "a") (data (i32.const 133092) "a") (data (i32.const 133095) "a") (data (i32.const 133098) "a") (data (i32.const 133101) "a") (data (i32.const 133104) "a") (data (i32.const 133107) "a") (data (i32.const 133110) "a") (data (i32.const 133113) "a") (data (i32.const 133116) "a") (data (i32.const 133119) "a") (data (i32.const 133122) "a") (data (i32.const 133125) "a") (data (i32.const 133128) "a") (data (i32.const 133131) "a") (data (i32.const 133134) "a") (data (i32.const 133137) "a") (data (i32.const 133140) "a") (data (i32.const 133143) "a") (data (i32.const 133146) "a") (data (i32.const 133149) "a") (data (i32.const 133152) "a") (data (i32.const 133155) "a") (data (i32.const 133158) "a") (data (i32.const 133161) "a") (data (i32.const 133164) "a") (data (i32.const 133167) "a") (data (i32.const 133170) "a") (data (i32.const 133173) "a") (data (i32.const 133176) "a") (data (i32.const 133179) "a") (data (i32.const 133182) "a") (data (i32.const 133185) "a") (data (i32.const 133188) "a") (data (i32.const 133191) "a") (data (i32.const 133194) "a") (data (i32.const 133197) "a") (data (i32.const 133200) "a") (data (i32.const 133203) "a") (data (i32.const 133206) "a") (data (i32.const 133209) "a") (data (i32.const 133212) "a") (data (i32.const 133215) "a") (data (i32.const 133218) "a") (data (i32.const 133221) "a") (data (i32.const 133224) "a") (data (i32.const 133227) "a") (data (i32.const 133230) "a") (data (i32.const 133233) "a") (data (i32.const 133236) "a") (data (i32.const 133239) "a") (data (i32.const 133242) "a") (data (i32.const 133245) "a") (data (i32.const 133248) "a") (data (i32.const 133251) "a") (data (i32.const 133254) "a") (data (i32.const 133257) "a") (data (i32.const 133260) "a") (data (i32.const 133263) "a") (data (i32.const 133266) "a") (data (i32.const 133269) "a") (data (i32.const 133272) "a") (data (i32.const 133275) "a") (data (i32.const 133278) "a") (data (i32.const 133281) "a") (data (i32.const 133284) "a") (data (i32.const 133287) "a") (data (i32.const 133290) "a") (data (i32.const 133293) "a") (data (i32.const 133296) "a") (data (i32.const 133299) "a") (data (i32.const 133302) "a") (data (i32.const 133305) "a") (data (i32.const 133308) "a") (data (i32.const 133311) "a") (data (i32.const 133314) "a") (data (i32.const 133317) "a") (data (i32.const 133320) "a") (data (i32.const 133323) "a") (data (i32.const 133326) "a") (data (i32.const 133329) "a") (data (i32.const 133332) "a") (data (i32.const 133335) "a") (data (i32.const 133338) "a") (data (i32.const 133341) "a") (data (i32.const 133344) "a") (data (i32.const 133347) "a") (data (i32.const 133350) "a") (data (i32.const 133353) "a") (data (i32.const 133356) "a") (data (i32.const 133359) "a") (data (i32.const 133362) "a") (data (i32.const 133365) "a") (data (i32.const 133368) "a") (data (i32.const 133371) "a") (data (i32.const 133374) "a") (data (i32.const 133377) "a") (data (i32.const 133380) "a") (data (i32.const 133383) "a") (data (i32.const 133386) "a") (data (i32.const 133389) "a") (data (i32.const 133392) "a") (data (i32.const 133395) "a") (data (i32.const 133398) "a") (data (i32.const 133401) "a") (data (i32.const 133404) "a") (data (i32.const 133407) "a") (data (i32.const 133410) "a") (data (i32.const 133413) "a") (data (i32.const 133416) "a") (data (i32.const 133419) "a") (data (i32.const 133422) "a") (data (i32.const 133425) "a") (data (i32.const 133428) "a") (data (i32.const 133431) "a") (data (i32.const 133434) "a") (data (i32.const 133437) "a") (data (i32.const 133440) "a") (data (i32.const 133443) "a") (data (i32.const 133446) "a") (data (i32.const 133449) "a") (data (i32.const 133452) "a") (data (i32.const 133455) "a") (data (i32.const 133458) "a") (data (i32.const 133461) "a") (data (i32.const 133464) "a") (data (i32.const 133467) "a") (data (i32.const 133470) "a") (data (i32.const 133473) "a") (data (i32.const 133476) "a") (data (i32.const 133479) "a") (data (i32.const 133482) "a") (data (i32.const 133485) "a") (data (i32.const 133488) "a") (data (i32.const 133491) "a") (data (i32.const 133494) "a") (data (i32.const 133497) "a") (data (i32.const 133500) "a") (data (i32.const 133503) "a") (data (i32.const 133506) "a") (data (i32.const 133509) "a") (data (i32.const 133512) "a") (data (i32.const 133515) "a") (data (i32.const 133518) "a") (data (i32.const 133521) "a") (data (i32.const 133524) "a") (data (i32.const 133527) "a") (data (i32.const 133530) "a") (data (i32.const 133533) "a") (data (i32.const 133536) "a") (data (i32.const 133539) "a") (data (i32.const 133542) "a") (data (i32.const 133545) "a") (data (i32.const 133548) "a") (data (i32.const 133551) "a") (data (i32.const 133554) "a") (data (i32.const 133557) "a") (data (i32.const 133560) "a") (data (i32.const 133563) "a") (data (i32.const 133566) "a") (data (i32.const 133569) "a") (data (i32.const 133572) "a") (data (i32.const 133575) "a") (data (i32.const 133578) "a") (data (i32.const 133581) "a") (data (i32.const 133584) "a") (data (i32.const 133587) "a") (data (i32.const 133590) "a") (data (i32.const 133593) "a") (data (i32.const 133596) "a") (data (i32.const 133599) "a") (data (i32.const 133602) "a") (data (i32.const 133605) "a") (data (i32.const 133608) "a") (data (i32.const 133611) "a") (data (i32.const 133614) "a") (data (i32.const 133617) "a") (data (i32.const 133620) "a") (data (i32.const 133623) "a") (data (i32.const 133626) "a") (data (i32.const 133629) "a") (data (i32.const 133632) "a") (data (i32.const 133635) "a") (data (i32.const 133638) "a") (data (i32.const 133641) "a") (data (i32.const 133644) "a") (data (i32.const 133647) "a") (data (i32.const 133650) "a") (data (i32.const 133653) "a") (data (i32.const 133656) "a") (data (i32.const 133659) "a") (data (i32.const 133662) "a") (data (i32.const 133665) "a") (data (i32.const 133668) "a") (data (i32.const 133671) "a") (data (i32.const 133674) "a") (data (i32.const 133677) "a") (data (i32.const 133680) "a") (data (i32.const 133683) "a") (data (i32.const 133686) "a") (data (i32.const 133689) "a") (data (i32.const 133692) "a") (data (i32.const 133695) "a") (data (i32.const 133698) "a") (data (i32.const 133701) "a") (data (i32.const 133704) "a") (data (i32.const 133707) "a") (data (i32.const 133710) "a") (data (i32.const 133713) "a") (data (i32.const 133716) "a") (data (i32.const 133719) "a") (data (i32.const 133722) "a") (data (i32.const 133725) "a") (data (i32.const 133728) "a") (data (i32.const 133731) "a") (data (i32.const 133734) "a") (data (i32.const 133737) "a") (data (i32.const 133740) "a") (data (i32.const 133743) "a") (data (i32.const 133746) "a") (data (i32.const 133749) "a") (data (i32.const 133752) "a") (data (i32.const 133755) "a") (data (i32.const 133758) "a") (data (i32.const 133761) "a") (data (i32.const 133764) "a") (data (i32.const 133767) "a") (data (i32.const 133770) "a") (data (i32.const 133773) "a") (data (i32.const 133776) "a") (data (i32.const 133779) "a") (data (i32.const 133782) "a") (data (i32.const 133785) "a") (data (i32.const 133788) "a") (data (i32.const 133791) "a") (data (i32.const 133794) "a") (data (i32.const 133797) "a") (data (i32.const 133800) "a") (data (i32.const 133803) "a") (data (i32.const 133806) "a") (data (i32.const 133809) "a") (data (i32.const 133812) "a") (data (i32.const 133815) "a") (data (i32.const 133818) "a") (data (i32.const 133821) "a") (data (i32.const 133824) "a") (data (i32.const 133827) "a") (data (i32.const 133830) "a") (data (i32.const 133833) "a") (data (i32.const 133836) "a") (data (i32.const 133839) "a") (data (i32.const 133842) "a") (data (i32.const 133845) "a") (data (i32.const 133848) "a") (data (i32.const 133851) "a") (data (i32.const 133854) "a") (data (i32.const 133857) "a") (data (i32.const 133860) "a") (data (i32.const 133863) "a") (data (i32.const 133866) "a") (data (i32.const 133869) "a") (data (i32.const 133872) "a") (data (i32.const 133875) "a") (data (i32.const 133878) "a") (data (i32.const 133881) "a") (data (i32.const 133884) "a") (data (i32.const 133887) "a") (data (i32.const 133890) "a") (data (i32.const 133893) "a") (data (i32.const 133896) "a") (data (i32.const 133899) "a") (data (i32.const 133902) "a") (data (i32.const 133905) "a") (data (i32.const 133908) "a") (data (i32.const 133911) "a") (data (i32.const 133914) "a") (data (i32.const 133917) "a") (data (i32.const 133920) "a") (data (i32.const 133923) "a") (data (i32.const 133926) "a") (data (i32.const 133929) "a") (data (i32.const 133932) "a") (data (i32.const 133935) "a") (data (i32.const 133938) "a") (data (i32.const 133941) "a") (data (i32.const 133944) "a") (data (i32.const 133947) "a") (data (i32.const 133950) "a") (data (i32.const 133953) "a") (data (i32.const 133956) "a") (data (i32.const 133959) "a") (data (i32.const 133962) "a") (data (i32.const 133965) "a") (data (i32.const 133968) "a") (data (i32.const 133971) "a") (data (i32.const 133974) "a") (data (i32.const 133977) "a") (data (i32.const 133980) "a") (data (i32.const 133983) "a") (data (i32.const 133986) "a") (data (i32.const 133989) "a") (data (i32.const 133992) "a") (data (i32.const 133995) "a") (data (i32.const 133998) "a") (data (i32.const 134001) "a") (data (i32.const 134004) "a") (data (i32.const 134007) "a") (data (i32.const 134010) "a") (data (i32.const 134013) "a") (data (i32.const 134016) "a") (data (i32.const 134019) "a") (data (i32.const 134022) "a") (data (i32.const 134025) "a") (data (i32.const 134028) "a") (data (i32.const 134031) "a") (data (i32.const 134034) "a") (data (i32.const 134037) "a") (data (i32.const 134040) "a") (data (i32.const 134043) "a") (data (i32.const 134046) "a") (data (i32.const 134049) "a") (data (i32.const 134052) "a") (data (i32.const 134055) "a") (data (i32.const 134058) "a") (data (i32.const 134061) "a") (data (i32.const 134064) "a") (data (i32.const 134067) "a") (data (i32.const 134070) "a") (data (i32.const 134073) "a") (data (i32.const 134076) "a") (data (i32.const 134079) "a") (data (i32.const 134082) "a") (data (i32.const 134085) "a") (data (i32.const 134088) "a") (data (i32.const 134091) "a") (data (i32.const 134094) "a") (data (i32.const 134097) "a") (data (i32.const 134100) "a") (data (i32.const 134103) "a") (data (i32.const 134106) "a") (data (i32.const 134109) "a") (data (i32.const 134112) "a") (data (i32.const 134115) "a") (data (i32.const 134118) "a") (data (i32.const 134121) "a") (data (i32.const 134124) "a") (data (i32.const 134127) "a") (data (i32.const 134130) "a") (data (i32.const 134133) "a") (data (i32.const 134136) "a") (data (i32.const 134139) "a") (data (i32.const 134142) "a") (data (i32.const 134145) "a") (data (i32.const 134148) "a") (data (i32.const 134151) "a") (data (i32.const 134154) "a") (data (i32.const 134157) "a") (data (i32.const 134160) "a") (data (i32.const 134163) "a") (data (i32.const 134166) "a") (data (i32.const 134169) "a") (data (i32.const 134172) "a") (data (i32.const 134175) "a") (data (i32.const 134178) "a") (data (i32.const 134181) "a") (data (i32.const 134184) "a") (data (i32.const 134187) "a") (data (i32.const 134190) "a") (data (i32.const 134193) "a") (data (i32.const 134196) "a") (data (i32.const 134199) "a") (data (i32.const 134202) "a") (data (i32.const 134205) "a") (data (i32.const 134208) "a") (data (i32.const 134211) "a") (data (i32.const 134214) "a") (data (i32.const 134217) "a") (data (i32.const 134220) "a") (data (i32.const 134223) "a") (data (i32.const 134226) "a") (data (i32.const 134229) "a") (data (i32.const 134232) "a") (data (i32.const 134235) "a") (data (i32.const 134238) "a") (data (i32.const 134241) "a") (data (i32.const 134244) "a") (data (i32.const 134247) "a") (data (i32.const 134250) "a") (data (i32.const 134253) "a") (data (i32.const 134256) "a") (data (i32.const 134259) "a") (data (i32.const 134262) "a") (data (i32.const 134265) "a") (data (i32.const 134268) "a") (data (i32.const 134271) "a") (data (i32.const 134274) "a") (data (i32.const 134277) "a") (data (i32.const 134280) "a") (data (i32.const 134283) "a") (data (i32.const 134286) "a") (data (i32.const 134289) "a") (data (i32.const 134292) "a") (data (i32.const 134295) "a") (data (i32.const 134298) "a") (data (i32.const 134301) "a") (data (i32.const 134304) "a") (data (i32.const 134307) "a") (data (i32.const 134310) "a") (data (i32.const 134313) "a") (data (i32.const 134316) "a") (data (i32.const 134319) "a") (data (i32.const 134322) "a") (data (i32.const 134325) "a") (data (i32.const 134328) "a") (data (i32.const 134331) "a") (data (i32.const 134334) "a") (data (i32.const 134337) "a") (data (i32.const 134340) "a") (data (i32.const 134343) "a") (data (i32.const 134346) "a") (data (i32.const 134349) "a") (data (i32.const 134352) "a") (data (i32.const 134355) "a") (data (i32.const 134358) "a") (data (i32.const 134361) "a") (data (i32.const 134364) "a") (data (i32.const 134367) "a") (data (i32.const 134370) "a") (data (i32.const 134373) "a") (data (i32.const 134376) "a") (data (i32.const 134379) "a") (data (i32.const 134382) "a") (data (i32.const 134385) "a") (data (i32.const 134388) "a") (data (i32.const 134391) "a") (data (i32.const 134394) "a") (data (i32.const 134397) "a") (data (i32.const 134400) "a") (data (i32.const 134403) "a") (data (i32.const 134406) "a") (data (i32.const 134409) "a") (data (i32.const 134412) "a") (data (i32.const 134415) "a") (data (i32.const 134418) "a") (data (i32.const 134421) "a") (data (i32.const 134424) "a") (data (i32.const 134427) "a") (data (i32.const 134430) "a") (data (i32.const 134433) "a") (data (i32.const 134436) "a") (data (i32.const 134439) "a") (data (i32.const 134442) "a") (data (i32.const 134445) "a") (data (i32.const 134448) "a") (data (i32.const 134451) "a") (data (i32.const 134454) "a") (data (i32.const 134457) "a") (data (i32.const 134460) "a") (data (i32.const 134463) "a") (data (i32.const 134466) "a") (data (i32.const 134469) "a") (data (i32.const 134472) "a") (data (i32.const 134475) "a") (data (i32.const 134478) "a") (data (i32.const 134481) "a") (data (i32.const 134484) "a") (data (i32.const 134487) "a") (data (i32.const 134490) "a") (data (i32.const 134493) "a") (data (i32.const 134496) "a") (data (i32.const 134499) "a") (data (i32.const 134502) "a") (data (i32.const 134505) "a") (data (i32.const 134508) "a") (data (i32.const 134511) "a") (data (i32.const 134514) "a") (data (i32.const 134517) "a") (data (i32.const 134520) "a") (data (i32.const 134523) "a") (data (i32.const 134526) "a") (data (i32.const 134529) "a") (data (i32.const 134532) "a") (data (i32.const 134535) "a") (data (i32.const 134538) "a") (data (i32.const 134541) "a") (data (i32.const 134544) "a") (data (i32.const 134547) "a") (data (i32.const 134550) "a") (data (i32.const 134553) "a") (data (i32.const 134556) "a") (data (i32.const 134559) "a") (data (i32.const 134562) "a") (data (i32.const 134565) "a") (data (i32.const 134568) "a") (data (i32.const 134571) "a") (data (i32.const 134574) "a") (data (i32.const 134577) "a") (data (i32.const 134580) "a") (data (i32.const 134583) "a") (data (i32.const 134586) "a") (data (i32.const 134589) "a") (data (i32.const 134592) "a") (data (i32.const 134595) "a") (data (i32.const 134598) "a") (data (i32.const 134601) "a") (data (i32.const 134604) "a") (data (i32.const 134607) "a") (data (i32.const 134610) "a") (data (i32.const 134613) "a") (data (i32.const 134616) "a") (data (i32.const 134619) "a") (data (i32.const 134622) "a") (data (i32.const 134625) "a") (data (i32.const 134628) "a") (data (i32.const 134631) "a") (data (i32.const 134634) "a") (data (i32.const 134637) "a") (data (i32.const 134640) "a") (data (i32.const 134643) "a") (data (i32.const 134646) "a") (data (i32.const 134649) "a") (data (i32.const 134652) "a") (data (i32.const 134655) "a") (data (i32.const 134658) "a") (data (i32.const 134661) "a") (data (i32.const 134664) "a") (data (i32.const 134667) "a") (data (i32.const 134670) "a") (data (i32.const 134673) "a") (data (i32.const 134676) "a") (data (i32.const 134679) "a") (data (i32.const 134682) "a") (data (i32.const 134685) "a") (data (i32.const 134688) "a") (data (i32.const 134691) "a") (data (i32.const 134694) "a") (data (i32.const 134697) "a") (data (i32.const 134700) "a") (data (i32.const 134703) "a") (data (i32.const 134706) "a") (data (i32.const 134709) "a") (data (i32.const 134712) "a") (data (i32.const 134715) "a") (data (i32.const 134718) "a") (data (i32.const 134721) "a") (data (i32.const 134724) "a") (data (i32.const 134727) "a") (data (i32.const 134730) "a") (data (i32.const 134733) "a") (data (i32.const 134736) "a") (data (i32.const 134739) "a") (data (i32.const 134742) "a") (data (i32.const 134745) "a") (data (i32.const 134748) "a") (data (i32.const 134751) "a") (data (i32.const 134754) "a") (data (i32.const 134757) "a") (data (i32.const 134760) "a") (data (i32.const 134763) "a") (data (i32.const 134766) "a") (data (i32.const 134769) "a") (data (i32.const 134772) "a") (data (i32.const 134775) "a") (data (i32.const 134778) "a") (data (i32.const 134781) "a") (data (i32.const 134784) "a") (data (i32.const 134787) "a") (data (i32.const 134790) "a") (data (i32.const 134793) "a") (data (i32.const 134796) "a") (data (i32.const 134799) "a") (data (i32.const 134802) "a") (data (i32.const 134805) "a") (data (i32.const 134808) "a") (data (i32.const 134811) "a") (data (i32.const 134814) "a") (data (i32.const 134817) "a") (data (i32.const 134820) "a") (data (i32.const 134823) "a") (data (i32.const 134826) "a") (data (i32.const 134829) "a") (data (i32.const 134832) "a") (data (i32.const 134835) "a") (data (i32.const 134838) "a") (data (i32.const 134841) "a") (data (i32.const 134844) "a") (data (i32.const 134847) "a") (data (i32.const 134850) "a") (data (i32.const 134853) "a") (data (i32.const 134856) "a") (data (i32.const 134859) "a") (data (i32.const 134862) "a") (data (i32.const 134865) "a") (data (i32.const 134868) "a") (data (i32.const 134871) "a") (data (i32.const 134874) "a") (data (i32.const 134877) "a") (data (i32.const 134880) "a") (data (i32.const 134883) "a") (data (i32.const 134886) "a") (data (i32.const 134889) "a") (data (i32.const 134892) "a") (data (i32.const 134895) "a") (data (i32.const 134898) "a") (data (i32.const 134901) "a") (data (i32.const 134904) "a") (data (i32.const 134907) "a") (data (i32.const 134910) "a") (data (i32.const 134913) "a") (data (i32.const 134916) "a") (data (i32.const 134919) "a") (data (i32.const 134922) "a") (data (i32.const 134925) "a") (data (i32.const 134928) "a") (data (i32.const 134931) "a") (data (i32.const 134934) "a") (data (i32.const 134937) "a") (data (i32.const 134940) "a") (data (i32.const 134943) "a") (data (i32.const 134946) "a") (data (i32.const 134949) "a") (data (i32.const 134952) "a") (data (i32.const 134955) "a") (data (i32.const 134958) "a") (data (i32.const 134961) "a") (data (i32.const 134964) "a") (data (i32.const 134967) "a") (data (i32.const 134970) "a") (data (i32.const 134973) "a") (data (i32.const 134976) "a") (data (i32.const 134979) "a") (data (i32.const 134982) "a") (data (i32.const 134985) "a") (data (i32.const 134988) "a") (data (i32.const 134991) "a") (data (i32.const 134994) "a") (data (i32.const 134997) "a") (data (i32.const 135000) "a") (data (i32.const 135003) "a") (data (i32.const 135006) "a") (data (i32.const 135009) "a") (data (i32.const 135012) "a") (data (i32.const 135015) "a") (data (i32.const 135018) "a") (data (i32.const 135021) "a") (data (i32.const 135024) "a") (data (i32.const 135027) "a") (data (i32.const 135030) "a") (data (i32.const 135033) "a") (data (i32.const 135036) "a") (data (i32.const 135039) "a") (data (i32.const 135042) "a") (data (i32.const 135045) "a") (data (i32.const 135048) "a") (data (i32.const 135051) "a") (data (i32.const 135054) "a") (data (i32.const 135057) "a") (data (i32.const 135060) "a") (data (i32.const 135063) "a") (data (i32.const 135066) "a") (data (i32.const 135069) "a") (data (i32.const 135072) "a") (data (i32.const 135075) "a") (data (i32.const 135078) "a") (data (i32.const 135081) "a") (data (i32.const 135084) "a") (data (i32.const 135087) "a") (data (i32.const 135090) "a") (data (i32.const 135093) "a") (data (i32.const 135096) "a") (data (i32.const 135099) "a") (data (i32.const 135102) "a") (data (i32.const 135105) "a") (data (i32.const 135108) "a") (data (i32.const 135111) "a") (data (i32.const 135114) "a") (data (i32.const 135117) "a") (data (i32.const 135120) "a") (data (i32.const 135123) "a") (data (i32.const 135126) "a") (data (i32.const 135129) "a") (data (i32.const 135132) "a") (data (i32.const 135135) "a") (data (i32.const 135138) "a") (data (i32.const 135141) "a") (data (i32.const 135144) "a") (data (i32.const 135147) "a") (data (i32.const 135150) "a") (data (i32.const 135153) "a") (data (i32.const 135156) "a") (data (i32.const 135159) "a") (data (i32.const 135162) "a") (data (i32.const 135165) "a") (data (i32.const 135168) "a") (data (i32.const 135171) "a") (data (i32.const 135174) "a") (data (i32.const 135177) "a") (data (i32.const 135180) "a") (data (i32.const 135183) "a") (data (i32.const 135186) "a") (data (i32.const 135189) "a") (data (i32.const 135192) "a") (data (i32.const 135195) "a") (data (i32.const 135198) "a") (data (i32.const 135201) "a") (data (i32.const 135204) "a") (data (i32.const 135207) "a") (data (i32.const 135210) "a") (data (i32.const 135213) "a") (data (i32.const 135216) "a") (data (i32.const 135219) "a") (data (i32.const 135222) "a") (data (i32.const 135225) "a") (data (i32.const 135228) "a") (data (i32.const 135231) "a") (data (i32.const 135234) "a") (data (i32.const 135237) "a") (data (i32.const 135240) "a") (data (i32.const 135243) "a") (data (i32.const 135246) "a") (data (i32.const 135249) "a") (data (i32.const 135252) "a") (data (i32.const 135255) "a") (data (i32.const 135258) "a") (data (i32.const 135261) "a") (data (i32.const 135264) "a") (data (i32.const 135267) "a") (data (i32.const 135270) "a") (data (i32.const 135273) "a") (data (i32.const 135276) "a") (data (i32.const 135279) "a") (data (i32.const 135282) "a") (data (i32.const 135285) "a") (data (i32.const 135288) "a") (data (i32.const 135291) "a") (data (i32.const 135294) "a") (data (i32.const 135297) "a") (data (i32.const 135300) "a") (data (i32.const 135303) "a") (data (i32.const 135306) "a") (data (i32.const 135309) "a") (data (i32.const 135312) "a") (data (i32.const 135315) "a") (data (i32.const 135318) "a") (data (i32.const 135321) "a") (data (i32.const 135324) "a") (data (i32.const 135327) "a") (data (i32.const 135330) "a") (data (i32.const 135333) "a") (data (i32.const 135336) "a") (data (i32.const 135339) "a") (data (i32.const 135342) "a") (data (i32.const 135345) "a") (data (i32.const 135348) "a") (data (i32.const 135351) "a") (data (i32.const 135354) "a") (data (i32.const 135357) "a") (data (i32.const 135360) "a") (data (i32.const 135363) "a") (data (i32.const 135366) "a") (data (i32.const 135369) "a") (data (i32.const 135372) "a") (data (i32.const 135375) "a") (data (i32.const 135378) "a") (data (i32.const 135381) "a") (data (i32.const 135384) "a") (data (i32.const 135387) "a") (data (i32.const 135390) "a") (data (i32.const 135393) "a") (data (i32.const 135396) "a") (data (i32.const 135399) "a") (data (i32.const 135402) "a") (data (i32.const 135405) "a") (data (i32.const 135408) "a") (data (i32.const 135411) "a") (data (i32.const 135414) "a") (data (i32.const 135417) "a") (data (i32.const 135420) "a") (data (i32.const 135423) "a") (data (i32.const 135426) "a") (data (i32.const 135429) "a") (data (i32.const 135432) "a") (data (i32.const 135435) "a") (data (i32.const 135438) "a") (data (i32.const 135441) "a") (data (i32.const 135444) "a") (data (i32.const 135447) "a") (data (i32.const 135450) "a") (data (i32.const 135453) "a") (data (i32.const 135456) "a") (data (i32.const 135459) "a") (data (i32.const 135462) "a") (data (i32.const 135465) "a") (data (i32.const 135468) "a") (data (i32.const 135471) "a") (data (i32.const 135474) "a") (data (i32.const 135477) "a") (data (i32.const 135480) "a") (data (i32.const 135483) "a") (data (i32.const 135486) "a") (data (i32.const 135489) "a") (data (i32.const 135492) "a") (data (i32.const 135495) "a") (data (i32.const 135498) "a") (data (i32.const 135501) "a") (data (i32.const 135504) "a") (data (i32.const 135507) "a") (data (i32.const 135510) "a") (data (i32.const 135513) "a") (data (i32.const 135516) "a") (data (i32.const 135519) "a") (data (i32.const 135522) "a") (data (i32.const 135525) "a") (data (i32.const 135528) "a") (data (i32.const 135531) "a") (data (i32.const 135534) "a") (data (i32.const 135537) "a") (data (i32.const 135540) "a") (data (i32.const 135543) "a") (data (i32.const 135546) "a") (data (i32.const 135549) "a") (data (i32.const 135552) "a") (data (i32.const 135555) "a") (data (i32.const 135558) "a") (data (i32.const 135561) "a") (data (i32.const 135564) "a") (data (i32.const 135567) "a") (data (i32.const 135570) "a") (data (i32.const 135573) "a") (data (i32.const 135576) "a") (data (i32.const 135579) "a") (data (i32.const 135582) "a") (data (i32.const 135585) "a") (data (i32.const 135588) "a") (data (i32.const 135591) "a") (data (i32.const 135594) "a") (data (i32.const 135597) "a") (data (i32.const 135600) "a") (data (i32.const 135603) "a") (data (i32.const 135606) "a") (data (i32.const 135609) "a") (data (i32.const 135612) "a") (data (i32.const 135615) "a") (data (i32.const 135618) "a") (data (i32.const 135621) "a") (data (i32.const 135624) "a") (data (i32.const 135627) "a") (data (i32.const 135630) "a") (data (i32.const 135633) "a") (data (i32.const 135636) "a") (data (i32.const 135639) "a") (data (i32.const 135642) "a") (data (i32.const 135645) "a") (data (i32.const 135648) "a") (data (i32.const 135651) "a") (data (i32.const 135654) "a") (data (i32.const 135657) "a") (data (i32.const 135660) "a") (data (i32.const 135663) "a") (data (i32.const 135666) "a") (data (i32.const 135669) "a") (data (i32.const 135672) "a") (data (i32.const 135675) "a") (data (i32.const 135678) "a") (data (i32.const 135681) "a") (data (i32.const 135684) "a") (data (i32.const 135687) "a") (data (i32.const 135690) "a") (data (i32.const 135693) "a") (data (i32.const 135696) "a") (data (i32.const 135699) "a") (data (i32.const 135702) "a") (data (i32.const 135705) "a") (data (i32.const 135708) "a") (data (i32.const 135711) "a") (data (i32.const 135714) "a") (data (i32.const 135717) "a") (data (i32.const 135720) "a") (data (i32.const 135723) "a") (data (i32.const 135726) "a") (data (i32.const 135729) "a") (data (i32.const 135732) "a") (data (i32.const 135735) "a") (data (i32.const 135738) "a") (data (i32.const 135741) "a") (data (i32.const 135744) "a") (data (i32.const 135747) "a") (data (i32.const 135750) "a") (data (i32.const 135753) "a") (data (i32.const 135756) "a") (data (i32.const 135759) "a") (data (i32.const 135762) "a") (data (i32.const 135765) "a") (data (i32.const 135768) "a") (data (i32.const 135771) "a") (data (i32.const 135774) "a") (data (i32.const 135777) "a") (data (i32.const 135780) "a") (data (i32.const 135783) "a") (data (i32.const 135786) "a") (data (i32.const 135789) "a") (data (i32.const 135792) "a") (data (i32.const 135795) "a") (data (i32.const 135798) "a") (data (i32.const 135801) "a") (data (i32.const 135804) "a") (data (i32.const 135807) "a") (data (i32.const 135810) "a") (data (i32.const 135813) "a") (data (i32.const 135816) "a") (data (i32.const 135819) "a") (data (i32.const 135822) "a") (data (i32.const 135825) "a") (data (i32.const 135828) "a") (data (i32.const 135831) "a") (data (i32.const 135834) "a") (data (i32.const 135837) "a") (data (i32.const 135840) "a") (data (i32.const 135843) "a") (data (i32.const 135846) "a") (data (i32.const 135849) "a") (data (i32.const 135852) "a") (data (i32.const 135855) "a") (data (i32.const 135858) "a") (data (i32.const 135861) "a") (data (i32.const 135864) "a") (data (i32.const 135867) "a") (data (i32.const 135870) "a") (data (i32.const 135873) "a") (data (i32.const 135876) "a") (data (i32.const 135879) "a") (data (i32.const 135882) "a") (data (i32.const 135885) "a") (data (i32.const 135888) "a") (data (i32.const 135891) "a") (data (i32.const 135894) "a") (data (i32.const 135897) "a") (data (i32.const 135900) "a") (data (i32.const 135903) "a") (data (i32.const 135906) "a") (data (i32.const 135909) "a") (data (i32.const 135912) "a") (data (i32.const 135915) "a") (data (i32.const 135918) "a") (data (i32.const 135921) "a") (data (i32.const 135924) "a") (data (i32.const 135927) "a") (data (i32.const 135930) "a") (data (i32.const 135933) "a") (data (i32.const 135936) "a") (data (i32.const 135939) "a") (data (i32.const 135942) "a") (data (i32.const 135945) "a") (data (i32.const 135948) "a") (data (i32.const 135951) "a") (data (i32.const 135954) "a") (data (i32.const 135957) "a") (data (i32.const 135960) "a") (data (i32.const 135963) "a") (data (i32.const 135966) "a") (data (i32.const 135969) "a") (data (i32.const 135972) "a") (data (i32.const 135975) "a") (data (i32.const 135978) "a") (data (i32.const 135981) "a") (data (i32.const 135984) "a") (data (i32.const 135987) "a") (data (i32.const 135990) "a") (data (i32.const 135993) "a") (data (i32.const 135996) "a") (data (i32.const 135999) "a") (data (i32.const 136002) "a") (data (i32.const 136005) "a") (data (i32.const 136008) "a") (data (i32.const 136011) "a") (data (i32.const 136014) "a") (data (i32.const 136017) "a") (data (i32.const 136020) "a") (data (i32.const 136023) "a") (data (i32.const 136026) "a") (data (i32.const 136029) "a") (data (i32.const 136032) "a") (data (i32.const 136035) "a") (data (i32.const 136038) "a") (data (i32.const 136041) "a") (data (i32.const 136044) "a") (data (i32.const 136047) "a") (data (i32.const 136050) "a") (data (i32.const 136053) "a") (data (i32.const 136056) "a") (data (i32.const 136059) "a") (data (i32.const 136062) "a") (data (i32.const 136065) "a") (data (i32.const 136068) "a") (data (i32.const 136071) "a") (data (i32.const 136074) "a") (data (i32.const 136077) "a") (data (i32.const 136080) "a") (data (i32.const 136083) "a") (data (i32.const 136086) "a") (data (i32.const 136089) "a") (data (i32.const 136092) "a") (data (i32.const 136095) "a") (data (i32.const 136098) "a") (data (i32.const 136101) "a") (data (i32.const 136104) "a") (data (i32.const 136107) "a") (data (i32.const 136110) "a") (data (i32.const 136113) "a") (data (i32.const 136116) "a") (data (i32.const 136119) "a") (data (i32.const 136122) "a") (data (i32.const 136125) "a") (data (i32.const 136128) "a") (data (i32.const 136131) "a") (data (i32.const 136134) "a") (data (i32.const 136137) "a") (data (i32.const 136140) "a") (data (i32.const 136143) "a") (data (i32.const 136146) "a") (data (i32.const 136149) "a") (data (i32.const 136152) "a") (data (i32.const 136155) "a") (data (i32.const 136158) "a") (data (i32.const 136161) "a") (data (i32.const 136164) "a") (data (i32.const 136167) "a") (data (i32.const 136170) "a") (data (i32.const 136173) "a") (data (i32.const 136176) "a") (data (i32.const 136179) "a") (data (i32.const 136182) "a") (data (i32.const 136185) "a") (data (i32.const 136188) "a") (data (i32.const 136191) "a") (data (i32.const 136194) "a") (data (i32.const 136197) "a") (data (i32.const 136200) "a") (data (i32.const 136203) "a") (data (i32.const 136206) "a") (data (i32.const 136209) "a") (data (i32.const 136212) "a") (data (i32.const 136215) "a") (data (i32.const 136218) "a") (data (i32.const 136221) "a") (data (i32.const 136224) "a") (data (i32.const 136227) "a") (data (i32.const 136230) "a") (data (i32.const 136233) "a") (data (i32.const 136236) "a") (data (i32.const 136239) "a") (data (i32.const 136242) "a") (data (i32.const 136245) "a") (data (i32.const 136248) "a") (data (i32.const 136251) "a") (data (i32.const 136254) "a") (data (i32.const 136257) "a") (data (i32.const 136260) "a") (data (i32.const 136263) "a") (data (i32.const 136266) "a") (data (i32.const 136269) "a") (data (i32.const 136272) "a") (data (i32.const 136275) "a") (data (i32.const 136278) "a") (data (i32.const 136281) "a") (data (i32.const 136284) "a") (data (i32.const 136287) "a") (data (i32.const 136290) "a") (data (i32.const 136293) "a") (data (i32.const 136296) "a") (data (i32.const 136299) "a") (data (i32.const 136302) "a") (data (i32.const 136305) "a") (data (i32.const 136308) "a") (data (i32.const 136311) "a") (data (i32.const 136314) "a") (data (i32.const 136317) "a") (data (i32.const 136320) "a") (data (i32.const 136323) "a") (data (i32.const 136326) "a") (data (i32.const 136329) "a") (data (i32.const 136332) "a") (data (i32.const 136335) "a") (data (i32.const 136338) "a") (data (i32.const 136341) "a") (data (i32.const 136344) "a") (data (i32.const 136347) "a") (data (i32.const 136350) "a") (data (i32.const 136353) "a") (data (i32.const 136356) "a") (data (i32.const 136359) "a") (data (i32.const 136362) "a") (data (i32.const 136365) "a") (data (i32.const 136368) "a") (data (i32.const 136371) "a") (data (i32.const 136374) "a") (data (i32.const 136377) "a") (data (i32.const 136380) "a") (data (i32.const 136383) "a") (data (i32.const 136386) "a") (data (i32.const 136389) "a") (data (i32.const 136392) "a") (data (i32.const 136395) "a") (data (i32.const 136398) "a") (data (i32.const 136401) "a") (data (i32.const 136404) "a") (data (i32.const 136407) "a") (data (i32.const 136410) "a") (data (i32.const 136413) "a") (data (i32.const 136416) "a") (data (i32.const 136419) "a") (data (i32.const 136422) "a") (data (i32.const 136425) "a") (data (i32.const 136428) "a") (data (i32.const 136431) "a") (data (i32.const 136434) "a") (data (i32.const 136437) "a") (data (i32.const 136440) "a") (data (i32.const 136443) "a") (data (i32.const 136446) "a") (data (i32.const 136449) "a") (data (i32.const 136452) "a") (data (i32.const 136455) "a") (data (i32.const 136458) "a") (data (i32.const 136461) "a") (data (i32.const 136464) "a") (data (i32.const 136467) "a") (data (i32.const 136470) "a") (data (i32.const 136473) "a") (data (i32.const 136476) "a") (data (i32.const 136479) "a") (data (i32.const 136482) "a") (data (i32.const 136485) "a") (data (i32.const 136488) "a") (data (i32.const 136491) "a") (data (i32.const 136494) "a") (data (i32.const 136497) "a") (data (i32.const 136500) "a") (data (i32.const 136503) "a") (data (i32.const 136506) "a") (data (i32.const 136509) "a") (data (i32.const 136512) "a") (data (i32.const 136515) "a") (data (i32.const 136518) "a") (data (i32.const 136521) "a") (data (i32.const 136524) "a") (data (i32.const 136527) "a") (data (i32.const 136530) "a") (data (i32.const 136533) "a") (data (i32.const 136536) "a") (data (i32.const 136539) "a") (data (i32.const 136542) "a") (data (i32.const 136545) "a") (data (i32.const 136548) "a") (data (i32.const 136551) "a") (data (i32.const 136554) "a") (data (i32.const 136557) "a") (data (i32.const 136560) "a") (data (i32.const 136563) "a") (data (i32.const 136566) "a") (data (i32.const 136569) "a") (data (i32.const 136572) "a") (data (i32.const 136575) "a") (data (i32.const 136578) "a") (data (i32.const 136581) "a") (data (i32.const 136584) "a") (data (i32.const 136587) "a") (data (i32.const 136590) "a") (data (i32.const 136593) "a") (data (i32.const 136596) "a") (data (i32.const 136599) "a") (data (i32.const 136602) "a") (data (i32.const 136605) "a") (data (i32.const 136608) "a") (data (i32.const 136611) "a") (data (i32.const 136614) "a") (data (i32.const 136617) "a") (data (i32.const 136620) "a") (data (i32.const 136623) "a") (data (i32.const 136626) "a") (data (i32.const 136629) "a") (data (i32.const 136632) "a") (data (i32.const 136635) "a") (data (i32.const 136638) "a") (data (i32.const 136641) "a") (data (i32.const 136644) "a") (data (i32.const 136647) "a") (data (i32.const 136650) "a") (data (i32.const 136653) "a") (data (i32.const 136656) "a") (data (i32.const 136659) "a") (data (i32.const 136662) "a") (data (i32.const 136665) "a") (data (i32.const 136668) "a") (data (i32.const 136671) "a") (data (i32.const 136674) "a") (data (i32.const 136677) "a") (data (i32.const 136680) "a") (data (i32.const 136683) "a") (data (i32.const 136686) "a") (data (i32.const 136689) "a") (data (i32.const 136692) "a") (data (i32.const 136695) "a") (data (i32.const 136698) "a") (data (i32.const 136701) "a") (data (i32.const 136704) "a") (data (i32.const 136707) "a") (data (i32.const 136710) "a") (data (i32.const 136713) "a") (data (i32.const 136716) "a") (data (i32.const 136719) "a") (data (i32.const 136722) "a") (data (i32.const 136725) "a") (data (i32.const 136728) "a") (data (i32.const 136731) "a") (data (i32.const 136734) "a") (data (i32.const 136737) "a") (data (i32.const 136740) "a") (data (i32.const 136743) "a") (data (i32.const 136746) "a") (data (i32.const 136749) "a") (data (i32.const 136752) "a") (data (i32.const 136755) "a") (data (i32.const 136758) "a") (data (i32.const 136761) "a") (data (i32.const 136764) "a") (data (i32.const 136767) "a") (data (i32.const 136770) "a") (data (i32.const 136773) "a") (data (i32.const 136776) "a") (data (i32.const 136779) "a") (data (i32.const 136782) "a") (data (i32.const 136785) "a") (data (i32.const 136788) "a") (data (i32.const 136791) "a") (data (i32.const 136794) "a") (data (i32.const 136797) "a") (data (i32.const 136800) "a") (data (i32.const 136803) "a") (data (i32.const 136806) "a") (data (i32.const 136809) "a") (data (i32.const 136812) "a") (data (i32.const 136815) "a") (data (i32.const 136818) "a") (data (i32.const 136821) "a") (data (i32.const 136824) "a") (data (i32.const 136827) "a") (data (i32.const 136830) "a") (data (i32.const 136833) "a") (data (i32.const 136836) "a") (data (i32.const 136839) "a") (data (i32.const 136842) "a") (data (i32.const 136845) "a") (data (i32.const 136848) "a") (data (i32.const 136851) "a") (data (i32.const 136854) "a") (data (i32.const 136857) "a") (data (i32.const 136860) "a") (data (i32.const 136863) "a") (data (i32.const 136866) "a") (data (i32.const 136869) "a") (data (i32.const 136872) "a") (data (i32.const 136875) "a") (data (i32.const 136878) "a") (data (i32.const 136881) "a") (data (i32.const 136884) "a") (data (i32.const 136887) "a") (data (i32.const 136890) "a") (data (i32.const 136893) "a") (data (i32.const 136896) "a") (data (i32.const 136899) "a") (data (i32.const 136902) "a") (data (i32.const 136905) "a") (data (i32.const 136908) "a") (data (i32.const 136911) "a") (data (i32.const 136914) "a") (data (i32.const 136917) "a") (data (i32.const 136920) "a") (data (i32.const 136923) "a") (data (i32.const 136926) "a") (data (i32.const 136929) "a") (data (i32.const 136932) "a") (data (i32.const 136935) "a") (data (i32.const 136938) "a") (data (i32.const 136941) "a") (data (i32.const 136944) "a") (data (i32.const 136947) "a") (data (i32.const 136950) "a") (data (i32.const 136953) "a") (data (i32.const 136956) "a") (data (i32.const 136959) "a") (data (i32.const 136962) "a") (data (i32.const 136965) "a") (data (i32.const 136968) "a") (data (i32.const 136971) "a") (data (i32.const 136974) "a") (data (i32.const 136977) "a") (data (i32.const 136980) "a") (data (i32.const 136983) "a") (data (i32.const 136986) "a") (data (i32.const 136989) "a") (data (i32.const 136992) "a") (data (i32.const 136995) "a") (data (i32.const 136998) "a") (data (i32.const 137001) "a") (data (i32.const 137004) "a") (data (i32.const 137007) "a") (data (i32.const 137010) "a") (data (i32.const 137013) "a") (data (i32.const 137016) "a") (data (i32.const 137019) "a") (data (i32.const 137022) "a") (data (i32.const 137025) "a") (data (i32.const 137028) "a") (data (i32.const 137031) "a") (data (i32.const 137034) "a") (data (i32.const 137037) "a") (data (i32.const 137040) "a") (data (i32.const 137043) "a") (data (i32.const 137046) "a") (data (i32.const 137049) "a") (data (i32.const 137052) "a") (data (i32.const 137055) "a") (data (i32.const 137058) "a") (data (i32.const 137061) "a") (data (i32.const 137064) "a") (data (i32.const 137067) "a") (data (i32.const 137070) "a") (data (i32.const 137073) "a") (data (i32.const 137076) "a") (data (i32.const 137079) "a") (data (i32.const 137082) "a") (data (i32.const 137085) "a") (data (i32.const 137088) "a") (data (i32.const 137091) "a") (data (i32.const 137094) "a") (data (i32.const 137097) "a") (data (i32.const 137100) "a") (data (i32.const 137103) "a") (data (i32.const 137106) "a") (data (i32.const 137109) "a") (data (i32.const 137112) "a") (data (i32.const 137115) "a") (data (i32.const 137118) "a") (data (i32.const 137121) "a") (data (i32.const 137124) "a") (data (i32.const 137127) "a") (data (i32.const 137130) "a") (data (i32.const 137133) "a") (data (i32.const 137136) "a") (data (i32.const 137139) "a") (data (i32.const 137142) "a") (data (i32.const 137145) "a") (data (i32.const 137148) "a") (data (i32.const 137151) "a") (data (i32.const 137154) "a") (data (i32.const 137157) "a") (data (i32.const 137160) "a") (data (i32.const 137163) "a") (data (i32.const 137166) "a") (data (i32.const 137169) "a") (data (i32.const 137172) "a") (data (i32.const 137175) "a") (data (i32.const 137178) "a") (data (i32.const 137181) "a") (data (i32.const 137184) "a") (data (i32.const 137187) "a") (data (i32.const 137190) "a") (data (i32.const 137193) "a") (data (i32.const 137196) "a") (data (i32.const 137199) "a") (data (i32.const 137202) "a") (data (i32.const 137205) "a") (data (i32.const 137208) "a") (data (i32.const 137211) "a") (data (i32.const 137214) "a") (data (i32.const 137217) "a") (data (i32.const 137220) "a") (data (i32.const 137223) "a") (data (i32.const 137226) "a") (data (i32.const 137229) "a") (data (i32.const 137232) "a") (data (i32.const 137235) "a") (data (i32.const 137238) "a") (data (i32.const 137241) "a") (data (i32.const 137244) "a") (data (i32.const 137247) "a") (data (i32.const 137250) "a") (data (i32.const 137253) "a") (data (i32.const 137256) "a") (data (i32.const 137259) "a") (data (i32.const 137262) "a") (data (i32.const 137265) "a") (data (i32.const 137268) "a") (data (i32.const 137271) "a") (data (i32.const 137274) "a") (data (i32.const 137277) "a") (data (i32.const 137280) "a") (data (i32.const 137283) "a") (data (i32.const 137286) "a") (data (i32.const 137289) "a") (data (i32.const 137292) "a") (data (i32.const 137295) "a") (data (i32.const 137298) "a") (data (i32.const 137301) "a") (data (i32.const 137304) "a") (data (i32.const 137307) "a") (data (i32.const 137310) "a") (data (i32.const 137313) "a") (data (i32.const 137316) "a") (data (i32.const 137319) "a") (data (i32.const 137322) "a") (data (i32.const 137325) "a") (data (i32.const 137328) "a") (data (i32.const 137331) "a") (data (i32.const 137334) "a") (data (i32.const 137337) "a") (data (i32.const 137340) "a") (data (i32.const 137343) "a") (data (i32.const 137346) "a") (data (i32.const 137349) "a") (data (i32.const 137352) "a") (data (i32.const 137355) "a") (data (i32.const 137358) "a") (data (i32.const 137361) "a") (data (i32.const 137364) "a") (data (i32.const 137367) "a") (data (i32.const 137370) "a") (data (i32.const 137373) "a") (data (i32.const 137376) "a") (data (i32.const 137379) "a") (data (i32.const 137382) "a") (data (i32.const 137385) "a") (data (i32.const 137388) "a") (data (i32.const 137391) "a") (data (i32.const 137394) "a") (data (i32.const 137397) "a") (data (i32.const 137400) "a") (data (i32.const 137403) "a") (data (i32.const 137406) "a") (data (i32.const 137409) "a") (data (i32.const 137412) "a") (data (i32.const 137415) "a") (data (i32.const 137418) "a") (data (i32.const 137421) "a") (data (i32.const 137424) "a") (data (i32.const 137427) "a") (data (i32.const 137430) "a") (data (i32.const 137433) "a") (data (i32.const 137436) "a") (data (i32.const 137439) "a") (data (i32.const 137442) "a") (data (i32.const 137445) "a") (data (i32.const 137448) "a") (data (i32.const 137451) "a") (data (i32.const 137454) "a") (data (i32.const 137457) "a") (data (i32.const 137460) "a") (data (i32.const 137463) "a") (data (i32.const 137466) "a") (data (i32.const 137469) "a") (data (i32.const 137472) "a") (data (i32.const 137475) "a") (data (i32.const 137478) "a") (data (i32.const 137481) "a") (data (i32.const 137484) "a") (data (i32.const 137487) "a") (data (i32.const 137490) "a") (data (i32.const 137493) "a") (data (i32.const 137496) "a") (data (i32.const 137499) "a") (data (i32.const 137502) "a") (data (i32.const 137505) "a") (data (i32.const 137508) "a") (data (i32.const 137511) "a") (data (i32.const 137514) "a") (data (i32.const 137517) "a") (data (i32.const 137520) "a") (data (i32.const 137523) "a") (data (i32.const 137526) "a") (data (i32.const 137529) "a") (data (i32.const 137532) "a") (data (i32.const 137535) "a") (data (i32.const 137538) "a") (data (i32.const 137541) "a") (data (i32.const 137544) "a") (data (i32.const 137547) "a") (data (i32.const 137550) "a") (data (i32.const 137553) "a") (data (i32.const 137556) "a") (data (i32.const 137559) "a") (data (i32.const 137562) "a") (data (i32.const 137565) "a") (data (i32.const 137568) "a") (data (i32.const 137571) "a") (data (i32.const 137574) "a") (data (i32.const 137577) "a") (data (i32.const 137580) "a") (data (i32.const 137583) "a") (data (i32.const 137586) "a") (data (i32.const 137589) "a") (data (i32.const 137592) "a") (data (i32.const 137595) "a") (data (i32.const 137598) "a") (data (i32.const 137601) "a") (data (i32.const 137604) "a") (data (i32.const 137607) "a") (data (i32.const 137610) "a") (data (i32.const 137613) "a") (data (i32.const 137616) "a") (data (i32.const 137619) "a") (data (i32.const 137622) "a") (data (i32.const 137625) "a") (data (i32.const 137628) "a") (data (i32.const 137631) "a") (data (i32.const 137634) "a") (data (i32.const 137637) "a") (data (i32.const 137640) "a") (data (i32.const 137643) "a") (data (i32.const 137646) "a") (data (i32.const 137649) "a") (data (i32.const 137652) "a") (data (i32.const 137655) "a") (data (i32.const 137658) "a") (data (i32.const 137661) "a") (data (i32.const 137664) "a") (data (i32.const 137667) "a") (data (i32.const 137670) "a") (data (i32.const 137673) "a") (data (i32.const 137676) "a") (data (i32.const 137679) "a") (data (i32.const 137682) "a") (data (i32.const 137685) "a") (data (i32.const 137688) "a") (data (i32.const 137691) "a") (data (i32.const 137694) "a") (data (i32.const 137697) "a") (data (i32.const 137700) "a") (data (i32.const 137703) "a") (data (i32.const 137706) "a") (data (i32.const 137709) "a") (data (i32.const 137712) "a") (data (i32.const 137715) "a") (data (i32.const 137718) "a") (data (i32.const 137721) "a") (data (i32.const 137724) "a") (data (i32.const 137727) "a") (data (i32.const 137730) "a") (data (i32.const 137733) "a") (data (i32.const 137736) "a") (data (i32.const 137739) "a") (data (i32.const 137742) "a") (data (i32.const 137745) "a") (data (i32.const 137748) "a") (data (i32.const 137751) "a") (data (i32.const 137754) "a") (data (i32.const 137757) "a") (data (i32.const 137760) "a") (data (i32.const 137763) "a") (data (i32.const 137766) "a") (data (i32.const 137769) "a") (data (i32.const 137772) "a") (data (i32.const 137775) "a") (data (i32.const 137778) "a") (data (i32.const 137781) "a") (data (i32.const 137784) "a") (data (i32.const 137787) "a") (data (i32.const 137790) "a") (data (i32.const 137793) "a") (data (i32.const 137796) "a") (data (i32.const 137799) "a") (data (i32.const 137802) "a") (data (i32.const 137805) "a") (data (i32.const 137808) "a") (data (i32.const 137811) "a") (data (i32.const 137814) "a") (data (i32.const 137817) "a") (data (i32.const 137820) "a") (data (i32.const 137823) "a") (data (i32.const 137826) "a") (data (i32.const 137829) "a") (data (i32.const 137832) "a") (data (i32.const 137835) "a") (data (i32.const 137838) "a") (data (i32.const 137841) "a") (data (i32.const 137844) "a") (data (i32.const 137847) "a") (data (i32.const 137850) "a") (data (i32.const 137853) "a") (data (i32.const 137856) "a") (data (i32.const 137859) "a") (data (i32.const 137862) "a") (data (i32.const 137865) "a") (data (i32.const 137868) "a") (data (i32.const 137871) "a") (data (i32.const 137874) "a") (data (i32.const 137877) "a") (data (i32.const 137880) "a") (data (i32.const 137883) "a") (data (i32.const 137886) "a") (data (i32.const 137889) "a") (data (i32.const 137892) "a") (data (i32.const 137895) "a") (data (i32.const 137898) "a") (data (i32.const 137901) "a") (data (i32.const 137904) "a") (data (i32.const 137907) "a") (data (i32.const 137910) "a") (data (i32.const 137913) "a") (data (i32.const 137916) "a") (data (i32.const 137919) "a") (data (i32.const 137922) "a") (data (i32.const 137925) "a") (data (i32.const 137928) "a") (data (i32.const 137931) "a") (data (i32.const 137934) "a") (data (i32.const 137937) "a") (data (i32.const 137940) "a") (data (i32.const 137943) "a") (data (i32.const 137946) "a") (data (i32.const 137949) "a") (data (i32.const 137952) "a") (data (i32.const 137955) "a") (data (i32.const 137958) "a") (data (i32.const 137961) "a") (data (i32.const 137964) "a") (data (i32.const 137967) "a") (data (i32.const 137970) "a") (data (i32.const 137973) "a") (data (i32.const 137976) "a") (data (i32.const 137979) "a") (data (i32.const 137982) "a") (data (i32.const 137985) "a") (data (i32.const 137988) "a") (data (i32.const 137991) "a") (data (i32.const 137994) "a") (data (i32.const 137997) "a") (data (i32.const 138000) "a") (data (i32.const 138003) "a") (data (i32.const 138006) "a") (data (i32.const 138009) "a") (data (i32.const 138012) "a") (data (i32.const 138015) "a") (data (i32.const 138018) "a") (data (i32.const 138021) "a") (data (i32.const 138024) "a") (data (i32.const 138027) "a") (data (i32.const 138030) "a") (data (i32.const 138033) "a") (data (i32.const 138036) "a") (data (i32.const 138039) "a") (data (i32.const 138042) "a") (data (i32.const 138045) "a") (data (i32.const 138048) "a") (data (i32.const 138051) "a") (data (i32.const 138054) "a") (data (i32.const 138057) "a") (data (i32.const 138060) "a") (data (i32.const 138063) "a") (data (i32.const 138066) "a") (data (i32.const 138069) "a") (data (i32.const 138072) "a") (data (i32.const 138075) "a") (data (i32.const 138078) "a") (data (i32.const 138081) "a") (data (i32.const 138084) "a") (data (i32.const 138087) "a") (data (i32.const 138090) "a") (data (i32.const 138093) "a") (data (i32.const 138096) "a") (data (i32.const 138099) "a") (data (i32.const 138102) "a") (data (i32.const 138105) "a") (data (i32.const 138108) "a") (data (i32.const 138111) "a") (data (i32.const 138114) "a") (data (i32.const 138117) "a") (data (i32.const 138120) "a") (data (i32.const 138123) "a") (data (i32.const 138126) "a") (data (i32.const 138129) "a") (data (i32.const 138132) "a") (data (i32.const 138135) "a") (data (i32.const 138138) "a") (data (i32.const 138141) "a") (data (i32.const 138144) "a") (data (i32.const 138147) "a") (data (i32.const 138150) "a") (data (i32.const 138153) "a") (data (i32.const 138156) "a") (data (i32.const 138159) "a") (data (i32.const 138162) "a") (data (i32.const 138165) "a") (data (i32.const 138168) "a") (data (i32.const 138171) "a") (data (i32.const 138174) "a") (data (i32.const 138177) "a") (data (i32.const 138180) "a") (data (i32.const 138183) "a") (data (i32.const 138186) "a") (data (i32.const 138189) "a") (data (i32.const 138192) "a") (data (i32.const 138195) "a") (data (i32.const 138198) "a") (data (i32.const 138201) "a") (data (i32.const 138204) "a") (data (i32.const 138207) "a") (data (i32.const 138210) "a") (data (i32.const 138213) "a") (data (i32.const 138216) "a") (data (i32.const 138219) "a") (data (i32.const 138222) "a") (data (i32.const 138225) "a") (data (i32.const 138228) "a") (data (i32.const 138231) "a") (data (i32.const 138234) "a") (data (i32.const 138237) "a") (data (i32.const 138240) "a") (data (i32.const 138243) "a") (data (i32.const 138246) "a") (data (i32.const 138249) "a") (data (i32.const 138252) "a") (data (i32.const 138255) "a") (data (i32.const 138258) "a") (data (i32.const 138261) "a") (data (i32.const 138264) "a") (data (i32.const 138267) "a") (data (i32.const 138270) "a") (data (i32.const 138273) "a") (data (i32.const 138276) "a") (data (i32.const 138279) "a") (data (i32.const 138282) "a") (data (i32.const 138285) "a") (data (i32.const 138288) "a") (data (i32.const 138291) "a") (data (i32.const 138294) "a") (data (i32.const 138297) "a") (data (i32.const 138300) "a") (data (i32.const 138303) "a") (data (i32.const 138306) "a") (data (i32.const 138309) "a") (data (i32.const 138312) "a") (data (i32.const 138315) "a") (data (i32.const 138318) "a") (data (i32.const 138321) "a") (data (i32.const 138324) "a") (data (i32.const 138327) "a") (data (i32.const 138330) "a") (data (i32.const 138333) "a") (data (i32.const 138336) "a") (data (i32.const 138339) "a") (data (i32.const 138342) "a") (data (i32.const 138345) "a") (data (i32.const 138348) "a") (data (i32.const 138351) "a") (data (i32.const 138354) "a") (data (i32.const 138357) "a") (data (i32.const 138360) "a") (data (i32.const 138363) "a") (data (i32.const 138366) "a") (data (i32.const 138369) "a") (data (i32.const 138372) "a") (data (i32.const 138375) "a") (data (i32.const 138378) "a") (data (i32.const 138381) "a") (data (i32.const 138384) "a") (data (i32.const 138387) "a") (data (i32.const 138390) "a") (data (i32.const 138393) "a") (data (i32.const 138396) "a") (data (i32.const 138399) "a") (data (i32.const 138402) "a") (data (i32.const 138405) "a") (data (i32.const 138408) "a") (data (i32.const 138411) "a") (data (i32.const 138414) "a") (data (i32.const 138417) "a") (data (i32.const 138420) "a") (data (i32.const 138423) "a") (data (i32.const 138426) "a") (data (i32.const 138429) "a") (data (i32.const 138432) "a") (data (i32.const 138435) "a") (data (i32.const 138438) "a") (data (i32.const 138441) "a") (data (i32.const 138444) "a") (data (i32.const 138447) "a") (data (i32.const 138450) "a") (data (i32.const 138453) "a") (data (i32.const 138456) "a") (data (i32.const 138459) "a") (data (i32.const 138462) "a") (data (i32.const 138465) "a") (data (i32.const 138468) "a") (data (i32.const 138471) "a") (data (i32.const 138474) "a") (data (i32.const 138477) "a") (data (i32.const 138480) "a") (data (i32.const 138483) "a") (data (i32.const 138486) "a") (data (i32.const 138489) "a") (data (i32.const 138492) "a") (data (i32.const 138495) "a") (data (i32.const 138498) "a") (data (i32.const 138501) "a") (data (i32.const 138504) "a") (data (i32.const 138507) "a") (data (i32.const 138510) "a") (data (i32.const 138513) "a") (data (i32.const 138516) "a") (data (i32.const 138519) "a") (data (i32.const 138522) "a") (data (i32.const 138525) "a") (data (i32.const 138528) "a") (data (i32.const 138531) "a") (data (i32.const 138534) "a") (data (i32.const 138537) "a") (data (i32.const 138540) "a") (data (i32.const 138543) "a") (data (i32.const 138546) "a") (data (i32.const 138549) "a") (data (i32.const 138552) "a") (data (i32.const 138555) "a") (data (i32.const 138558) "a") (data (i32.const 138561) "a") (data (i32.const 138564) "a") (data (i32.const 138567) "a") (data (i32.const 138570) "a") (data (i32.const 138573) "a") (data (i32.const 138576) "a") (data (i32.const 138579) "a") (data (i32.const 138582) "a") (data (i32.const 138585) "a") (data (i32.const 138588) "a") (data (i32.const 138591) "a") (data (i32.const 138594) "a") (data (i32.const 138597) "a") (data (i32.const 138600) "a") (data (i32.const 138603) "a") (data (i32.const 138606) "a") (data (i32.const 138609) "a") (data (i32.const 138612) "a") (data (i32.const 138615) "a") (data (i32.const 138618) "a") (data (i32.const 138621) "a") (data (i32.const 138624) "a") (data (i32.const 138627) "a") (data (i32.const 138630) "a") (data (i32.const 138633) "a") (data (i32.const 138636) "a") (data (i32.const 138639) "a") (data (i32.const 138642) "a") (data (i32.const 138645) "a") (data (i32.const 138648) "a") (data (i32.const 138651) "a") (data (i32.const 138654) "a") (data (i32.const 138657) "a") (data (i32.const 138660) "a") (data (i32.const 138663) "a") (data (i32.const 138666) "a") (data (i32.const 138669) "a") (data (i32.const 138672) "a") (data (i32.const 138675) "a") (data (i32.const 138678) "a") (data (i32.const 138681) "a") (data (i32.const 138684) "a") (data (i32.const 138687) "a") (data (i32.const 138690) "a") (data (i32.const 138693) "a") (data (i32.const 138696) "a") (data (i32.const 138699) "a") (data (i32.const 138702) "a") (data (i32.const 138705) "a") (data (i32.const 138708) "a") (data (i32.const 138711) "a") (data (i32.const 138714) "a") (data (i32.const 138717) "a") (data (i32.const 138720) "a") (data (i32.const 138723) "a") (data (i32.const 138726) "a") (data (i32.const 138729) "a") (data (i32.const 138732) "a") (data (i32.const 138735) "a") (data (i32.const 138738) "a") (data (i32.const 138741) "a") (data (i32.const 138744) "a") (data (i32.const 138747) "a") (data (i32.const 138750) "a") (data (i32.const 138753) "a") (data (i32.const 138756) "a") (data (i32.const 138759) "a") (data (i32.const 138762) "a") (data (i32.const 138765) "a") (data (i32.const 138768) "a") (data (i32.const 138771) "a") (data (i32.const 138774) "a") (data (i32.const 138777) "a") (data (i32.const 138780) "a") (data (i32.const 138783) "a") (data (i32.const 138786) "a") (data (i32.const 138789) "a") (data (i32.const 138792) "a") (data (i32.const 138795) "a") (data (i32.const 138798) "a") (data (i32.const 138801) "a") (data (i32.const 138804) "a") (data (i32.const 138807) "a") (data (i32.const 138810) "a") (data (i32.const 138813) "a") (data (i32.const 138816) "a") (data (i32.const 138819) "a") (data (i32.const 138822) "a") (data (i32.const 138825) "a") (data (i32.const 138828) "a") (data (i32.const 138831) "a") (data (i32.const 138834) "a") (data (i32.const 138837) "a") (data (i32.const 138840) "a") (data (i32.const 138843) "a") (data (i32.const 138846) "a") (data (i32.const 138849) "a") (data (i32.const 138852) "a") (data (i32.const 138855) "a") (data (i32.const 138858) "a") (data (i32.const 138861) "a") (data (i32.const 138864) "a") (data (i32.const 138867) "a") (data (i32.const 138870) "a") (data (i32.const 138873) "a") (data (i32.const 138876) "a") (data (i32.const 138879) "a") (data (i32.const 138882) "a") (data (i32.const 138885) "a") (data (i32.const 138888) "a") (data (i32.const 138891) "a") (data (i32.const 138894) "a") (data (i32.const 138897) "a") (data (i32.const 138900) "a") (data (i32.const 138903) "a") (data (i32.const 138906) "a") (data (i32.const 138909) "a") (data (i32.const 138912) "a") (data (i32.const 138915) "a") (data (i32.const 138918) "a") (data (i32.const 138921) "a") (data (i32.const 138924) "a") (data (i32.const 138927) "a") (data (i32.const 138930) "a") (data (i32.const 138933) "a") (data (i32.const 138936) "a") (data (i32.const 138939) "a") (data (i32.const 138942) "a") (data (i32.const 138945) "a") (data (i32.const 138948) "a") (data (i32.const 138951) "a") (data (i32.const 138954) "a") (data (i32.const 138957) "a") (data (i32.const 138960) "a") (data (i32.const 138963) "a") (data (i32.const 138966) "a") (data (i32.const 138969) "a") (data (i32.const 138972) "a") (data (i32.const 138975) "a") (data (i32.const 138978) "a") (data (i32.const 138981) "a") (data (i32.const 138984) "a") (data (i32.const 138987) "a") (data (i32.const 138990) "a") (data (i32.const 138993) "a") (data (i32.const 138996) "a") (data (i32.const 138999) "a") (data (i32.const 139002) "a") (data (i32.const 139005) "a") (data (i32.const 139008) "a") (data (i32.const 139011) "a") (data (i32.const 139014) "a") (data (i32.const 139017) "a") (data (i32.const 139020) "a") (data (i32.const 139023) "a") (data (i32.const 139026) "a") (data (i32.const 139029) "a") (data (i32.const 139032) "a") (data (i32.const 139035) "a") (data (i32.const 139038) "a") (data (i32.const 139041) "a") (data (i32.const 139044) "a") (data (i32.const 139047) "a") (data (i32.const 139050) "a") (data (i32.const 139053) "a") (data (i32.const 139056) "a") (data (i32.const 139059) "a") (data (i32.const 139062) "a") (data (i32.const 139065) "a") (data (i32.const 139068) "a") (data (i32.const 139071) "a") (data (i32.const 139074) "a") (data (i32.const 139077) "a") (data (i32.const 139080) "a") (data (i32.const 139083) "a") (data (i32.const 139086) "a") (data (i32.const 139089) "a") (data (i32.const 139092) "a") (data (i32.const 139095) "a") (data (i32.const 139098) "a") (data (i32.const 139101) "a") (data (i32.const 139104) "a") (data (i32.const 139107) "a") (data (i32.const 139110) "a") (data (i32.const 139113) "a") (data (i32.const 139116) "a") (data (i32.const 139119) "a") (data (i32.const 139122) "a") (data (i32.const 139125) "a") (data (i32.const 139128) "a") (data (i32.const 139131) "a") (data (i32.const 139134) "a") (data (i32.const 139137) "a") (data (i32.const 139140) "a") (data (i32.const 139143) "a") (data (i32.const 139146) "a") (data (i32.const 139149) "a") (data (i32.const 139152) "a") (data (i32.const 139155) "a") (data (i32.const 139158) "a") (data (i32.const 139161) "a") (data (i32.const 139164) "a") (data (i32.const 139167) "a") (data (i32.const 139170) "a") (data (i32.const 139173) "a") (data (i32.const 139176) "a") (data (i32.const 139179) "a") (data (i32.const 139182) "a") (data (i32.const 139185) "a") (data (i32.const 139188) "a") (data (i32.const 139191) "a") (data (i32.const 139194) "a") (data (i32.const 139197) "a") (data (i32.const 139200) "a") (data (i32.const 139203) "a") (data (i32.const 139206) "a") (data (i32.const 139209) "a") (data (i32.const 139212) "a") (data (i32.const 139215) "a") (data (i32.const 139218) "a") (data (i32.const 139221) "a") (data (i32.const 139224) "a") (data (i32.const 139227) "a") (data (i32.const 139230) "a") (data (i32.const 139233) "a") (data (i32.const 139236) "a") (data (i32.const 139239) "a") (data (i32.const 139242) "a") (data (i32.const 139245) "a") (data (i32.const 139248) "a") (data (i32.const 139251) "a") (data (i32.const 139254) "a") (data (i32.const 139257) "a") (data (i32.const 139260) "a") (data (i32.const 139263) "a") (data (i32.const 139266) "a") (data (i32.const 139269) "a") (data (i32.const 139272) "a") (data (i32.const 139275) "a") (data (i32.const 139278) "a") (data (i32.const 139281) "a") (data (i32.const 139284) "a") (data (i32.const 139287) "a") (data (i32.const 139290) "a") (data (i32.const 139293) "a") (data (i32.const 139296) "a") (data (i32.const 139299) "a") (data (i32.const 139302) "a") (data (i32.const 139305) "a") (data (i32.const 139308) "a") (data (i32.const 139311) "a") (data (i32.const 139314) "a") (data (i32.const 139317) "a") (data (i32.const 139320) "a") (data (i32.const 139323) "a") (data (i32.const 139326) "a") (data (i32.const 139329) "a") (data (i32.const 139332) "a") (data (i32.const 139335) "a") (data (i32.const 139338) "a") (data (i32.const 139341) "a") (data (i32.const 139344) "a") (data (i32.const 139347) "a") (data (i32.const 139350) "a") (data (i32.const 139353) "a") (data (i32.const 139356) "a") (data (i32.const 139359) "a") (data (i32.const 139362) "a") (data (i32.const 139365) "a") (data (i32.const 139368) "a") (data (i32.const 139371) "a") (data (i32.const 139374) "a") (data (i32.const 139377) "a") (data (i32.const 139380) "a") (data (i32.const 139383) "a") (data (i32.const 139386) "a") (data (i32.const 139389) "a") (data (i32.const 139392) "a") (data (i32.const 139395) "a") (data (i32.const 139398) "a") (data (i32.const 139401) "a") (data (i32.const 139404) "a") (data (i32.const 139407) "a") (data (i32.const 139410) "a") (data (i32.const 139413) "a") (data (i32.const 139416) "a") (data (i32.const 139419) "a") (data (i32.const 139422) "a") (data (i32.const 139425) "a") (data (i32.const 139428) "a") (data (i32.const 139431) "a") (data (i32.const 139434) "a") (data (i32.const 139437) "a") (data (i32.const 139440) "a") (data (i32.const 139443) "a") (data (i32.const 139446) "a") (data (i32.const 139449) "a") (data (i32.const 139452) "a") (data (i32.const 139455) "a") (data (i32.const 139458) "a") (data (i32.const 139461) "a") (data (i32.const 139464) "a") (data (i32.const 139467) "a") (data (i32.const 139470) "a") (data (i32.const 139473) "a") (data (i32.const 139476) "a") (data (i32.const 139479) "a") (data (i32.const 139482) "a") (data (i32.const 139485) "a") (data (i32.const 139488) "a") (data (i32.const 139491) "a") (data (i32.const 139494) "a") (data (i32.const 139497) "a") (data (i32.const 139500) "a") (data (i32.const 139503) "a") (data (i32.const 139506) "a") (data (i32.const 139509) "a") (data (i32.const 139512) "a") (data (i32.const 139515) "a") (data (i32.const 139518) "a") (data (i32.const 139521) "a") (data (i32.const 139524) "a") (data (i32.const 139527) "a") (data (i32.const 139530) "a") (data (i32.const 139533) "a") (data (i32.const 139536) "a") (data (i32.const 139539) "a") (data (i32.const 139542) "a") (data (i32.const 139545) "a") (data (i32.const 139548) "a") (data (i32.const 139551) "a") (data (i32.const 139554) "a") (data (i32.const 139557) "a") (data (i32.const 139560) "a") (data (i32.const 139563) "a") (data (i32.const 139566) "a") (data (i32.const 139569) "a") (data (i32.const 139572) "a") (data (i32.const 139575) "a") (data (i32.const 139578) "a") (data (i32.const 139581) "a") (data (i32.const 139584) "a") (data (i32.const 139587) "a") (data (i32.const 139590) "a") (data (i32.const 139593) "a") (data (i32.const 139596) "a") (data (i32.const 139599) "a") (data (i32.const 139602) "a") (data (i32.const 139605) "a") (data (i32.const 139608) "a") (data (i32.const 139611) "a") (data (i32.const 139614) "a") (data (i32.const 139617) "a") (data (i32.const 139620) "a") (data (i32.const 139623) "a") (data (i32.const 139626) "a") (data (i32.const 139629) "a") (data (i32.const 139632) "a") (data (i32.const 139635) "a") (data (i32.const 139638) "a") (data (i32.const 139641) "a") (data (i32.const 139644) "a") (data (i32.const 139647) "a") (data (i32.const 139650) "a") (data (i32.const 139653) "a") (data (i32.const 139656) "a") (data (i32.const 139659) "a") (data (i32.const 139662) "a") (data (i32.const 139665) "a") (data (i32.const 139668) "a") (data (i32.const 139671) "a") (data (i32.const 139674) "a") (data (i32.const 139677) "a") (data (i32.const 139680) "a") (data (i32.const 139683) "a") (data (i32.const 139686) "a") (data (i32.const 139689) "a") (data (i32.const 139692) "a") (data (i32.const 139695) "a") (data (i32.const 139698) "a") (data (i32.const 139701) "a") (data (i32.const 139704) "a") (data (i32.const 139707) "a") (data (i32.const 139710) "a") (data (i32.const 139713) "a") (data (i32.const 139716) "a") (data (i32.const 139719) "a") (data (i32.const 139722) "a") (data (i32.const 139725) "a") (data (i32.const 139728) "a") (data (i32.const 139731) "a") (data (i32.const 139734) "a") (data (i32.const 139737) "a") (data (i32.const 139740) "a") (data (i32.const 139743) "a") (data (i32.const 139746) "a") (data (i32.const 139749) "a") (data (i32.const 139752) "a") (data (i32.const 139755) "a") (data (i32.const 139758) "a") (data (i32.const 139761) "a") (data (i32.const 139764) "a") (data (i32.const 139767) "a") (data (i32.const 139770) "a") (data (i32.const 139773) "a") (data (i32.const 139776) "a") (data (i32.const 139779) "a") (data (i32.const 139782) "a") (data (i32.const 139785) "a") (data (i32.const 139788) "a") (data (i32.const 139791) "a") (data (i32.const 139794) "a") (data (i32.const 139797) "a") (data (i32.const 139800) "a") (data (i32.const 139803) "a") (data (i32.const 139806) "a") (data (i32.const 139809) "a") (data (i32.const 139812) "a") (data (i32.const 139815) "a") (data (i32.const 139818) "a") (data (i32.const 139821) "a") (data (i32.const 139824) "a") (data (i32.const 139827) "a") (data (i32.const 139830) "a") (data (i32.const 139833) "a") (data (i32.const 139836) "a") (data (i32.const 139839) "a") (data (i32.const 139842) "a") (data (i32.const 139845) "a") (data (i32.const 139848) "a") (data (i32.const 139851) "a") (data (i32.const 139854) "a") (data (i32.const 139857) "a") (data (i32.const 139860) "a") (data (i32.const 139863) "a") (data (i32.const 139866) "a") (data (i32.const 139869) "a") (data (i32.const 139872) "a") (data (i32.const 139875) "a") (data (i32.const 139878) "a") (data (i32.const 139881) "a") (data (i32.const 139884) "a") (data (i32.const 139887) "a") (data (i32.const 139890) "a") (data (i32.const 139893) "a") (data (i32.const 139896) "a") (data (i32.const 139899) "a") (data (i32.const 139902) "a") (data (i32.const 139905) "a") (data (i32.const 139908) "a") (data (i32.const 139911) "a") (data (i32.const 139914) "a") (data (i32.const 139917) "a") (data (i32.const 139920) "a") (data (i32.const 139923) "a") (data (i32.const 139926) "a") (data (i32.const 139929) "a") (data (i32.const 139932) "a") (data (i32.const 139935) "a") (data (i32.const 139938) "a") (data (i32.const 139941) "a") (data (i32.const 139944) "a") (data (i32.const 139947) "a") (data (i32.const 139950) "a") (data (i32.const 139953) "a") (data (i32.const 139956) "a") (data (i32.const 139959) "a") (data (i32.const 139962) "a") (data (i32.const 139965) "a") (data (i32.const 139968) "a") (data (i32.const 139971) "a") (data (i32.const 139974) "a") (data (i32.const 139977) "a") (data (i32.const 139980) "a") (data (i32.const 139983) "a") (data (i32.const 139986) "a") (data (i32.const 139989) "a") (data (i32.const 139992) "a") (data (i32.const 139995) "a") (data (i32.const 139998) "a") (data (i32.const 140001) "a") (data (i32.const 140004) "a") (data (i32.const 140007) "a") (data (i32.const 140010) "a") (data (i32.const 140013) "a") (data (i32.const 140016) "a") (data (i32.const 140019) "a") (data (i32.const 140022) "a") (data (i32.const 140025) "a") (data (i32.const 140028) "a") (data (i32.const 140031) "a") (data (i32.const 140034) "a") (data (i32.const 140037) "a") (data (i32.const 140040) "a") (data (i32.const 140043) "a") (data (i32.const 140046) "a") (data (i32.const 140049) "a") (data (i32.const 140052) "a") (data (i32.const 140055) "a") (data (i32.const 140058) "a") (data (i32.const 140061) "a") (data (i32.const 140064) "a") (data (i32.const 140067) "a") (data (i32.const 140070) "a") (data (i32.const 140073) "a") (data (i32.const 140076) "a") (data (i32.const 140079) "a") (data (i32.const 140082) "a") (data (i32.const 140085) "a") (data (i32.const 140088) "a") (data (i32.const 140091) "a") (data (i32.const 140094) "a") (data (i32.const 140097) "a") (data (i32.const 140100) "a") (data (i32.const 140103) "a") (data (i32.const 140106) "a") (data (i32.const 140109) "a") (data (i32.const 140112) "a") (data (i32.const 140115) "a") (data (i32.const 140118) "a") (data (i32.const 140121) "a") (data (i32.const 140124) "a") (data (i32.const 140127) "a") (data (i32.const 140130) "a") (data (i32.const 140133) "a") (data (i32.const 140136) "a") (data (i32.const 140139) "a") (data (i32.const 140142) "a") (data (i32.const 140145) "a") (data (i32.const 140148) "a") (data (i32.const 140151) "a") (data (i32.const 140154) "a") (data (i32.const 140157) "a") (data (i32.const 140160) "a") (data (i32.const 140163) "a") (data (i32.const 140166) "a") (data (i32.const 140169) "a") (data (i32.const 140172) "a") (data (i32.const 140175) "a") (data (i32.const 140178) "a") (data (i32.const 140181) "a") (data (i32.const 140184) "a") (data (i32.const 140187) "a") (data (i32.const 140190) "a") (data (i32.const 140193) "a") (data (i32.const 140196) "a") (data (i32.const 140199) "a") (data (i32.const 140202) "a") (data (i32.const 140205) "a") (data (i32.const 140208) "a") (data (i32.const 140211) "a") (data (i32.const 140214) "a") (data (i32.const 140217) "a") (data (i32.const 140220) "a") (data (i32.const 140223) "a") (data (i32.const 140226) "a") (data (i32.const 140229) "a") (data (i32.const 140232) "a") (data (i32.const 140235) "a") (data (i32.const 140238) "a") (data (i32.const 140241) "a") (data (i32.const 140244) "a") (data (i32.const 140247) "a") (data (i32.const 140250) "a") (data (i32.const 140253) "a") (data (i32.const 140256) "a") (data (i32.const 140259) "a") (data (i32.const 140262) "a") (data (i32.const 140265) "a") (data (i32.const 140268) "a") (data (i32.const 140271) "a") (data (i32.const 140274) "a") (data (i32.const 140277) "a") (data (i32.const 140280) "a") (data (i32.const 140283) "a") (data (i32.const 140286) "a") (data (i32.const 140289) "a") (data (i32.const 140292) "a") (data (i32.const 140295) "a") (data (i32.const 140298) "a") (data (i32.const 140301) "a") (data (i32.const 140304) "a") (data (i32.const 140307) "a") (data (i32.const 140310) "a") (data (i32.const 140313) "a") (data (i32.const 140316) "a") (data (i32.const 140319) "a") (data (i32.const 140322) "a") (data (i32.const 140325) "a") (data (i32.const 140328) "a") (data (i32.const 140331) "a") (data (i32.const 140334) "a") (data (i32.const 140337) "a") (data (i32.const 140340) "a") (data (i32.const 140343) "a") (data (i32.const 140346) "a") (data (i32.const 140349) "a") (data (i32.const 140352) "a") (data (i32.const 140355) "a") (data (i32.const 140358) "a") (data (i32.const 140361) "a") (data (i32.const 140364) "a") (data (i32.const 140367) "a") (data (i32.const 140370) "a") (data (i32.const 140373) "a") (data (i32.const 140376) "a") (data (i32.const 140379) "a") (data (i32.const 140382) "a") (data (i32.const 140385) "a") (data (i32.const 140388) "a") (data (i32.const 140391) "a") (data (i32.const 140394) "a") (data (i32.const 140397) "a") (data (i32.const 140400) "a") (data (i32.const 140403) "a") (data (i32.const 140406) "a") (data (i32.const 140409) "a") (data (i32.const 140412) "a") (data (i32.const 140415) "a") (data (i32.const 140418) "a") (data (i32.const 140421) "a") (data (i32.const 140424) "a") (data (i32.const 140427) "a") (data (i32.const 140430) "a") (data (i32.const 140433) "a") (data (i32.const 140436) "a") (data (i32.const 140439) "a") (data (i32.const 140442) "a") (data (i32.const 140445) "a") (data (i32.const 140448) "a") (data (i32.const 140451) "a") (data (i32.const 140454) "a") (data (i32.const 140457) "a") (data (i32.const 140460) "a") (data (i32.const 140463) "a") (data (i32.const 140466) "a") (data (i32.const 140469) "a") (data (i32.const 140472) "a") (data (i32.const 140475) "a") (data (i32.const 140478) "a") (data (i32.const 140481) "a") (data (i32.const 140484) "a") (data (i32.const 140487) "a") (data (i32.const 140490) "a") (data (i32.const 140493) "a") (data (i32.const 140496) "a") (data (i32.const 140499) "a") (data (i32.const 140502) "a") (data (i32.const 140505) "a") (data (i32.const 140508) "a") (data (i32.const 140511) "a") (data (i32.const 140514) "a") (data (i32.const 140517) "a") (data (i32.const 140520) "a") (data (i32.const 140523) "a") (data (i32.const 140526) "a") (data (i32.const 140529) "a") (data (i32.const 140532) "a") (data (i32.const 140535) "a") (data (i32.const 140538) "a") (data (i32.const 140541) "a") (data (i32.const 140544) "a") (data (i32.const 140547) "a") (data (i32.const 140550) "a") (data (i32.const 140553) "a") (data (i32.const 140556) "a") (data (i32.const 140559) "a") (data (i32.const 140562) "a") (data (i32.const 140565) "a") (data (i32.const 140568) "a") (data (i32.const 140571) "a") (data (i32.const 140574) "a") (data (i32.const 140577) "a") (data (i32.const 140580) "a") (data (i32.const 140583) "a") (data (i32.const 140586) "a") (data (i32.const 140589) "a") (data (i32.const 140592) "a") (data (i32.const 140595) "a") (data (i32.const 140598) "a") (data (i32.const 140601) "a") (data (i32.const 140604) "a") (data (i32.const 140607) "a") (data (i32.const 140610) "a") (data (i32.const 140613) "a") (data (i32.const 140616) "a") (data (i32.const 140619) "a") (data (i32.const 140622) "a") (data (i32.const 140625) "a") (data (i32.const 140628) "a") (data (i32.const 140631) "a") (data (i32.const 140634) "a") (data (i32.const 140637) "a") (data (i32.const 140640) "a") (data (i32.const 140643) "a") (data (i32.const 140646) "a") (data (i32.const 140649) "a") (data (i32.const 140652) "a") (data (i32.const 140655) "a") (data (i32.const 140658) "a") (data (i32.const 140661) "a") (data (i32.const 140664) "a") (data (i32.const 140667) "a") (data (i32.const 140670) "a") (data (i32.const 140673) "a") (data (i32.const 140676) "a") (data (i32.const 140679) "a") (data (i32.const 140682) "a") (data (i32.const 140685) "a") (data (i32.const 140688) "a") (data (i32.const 140691) "a") (data (i32.const 140694) "a") (data (i32.const 140697) "a") (data (i32.const 140700) "a") (data (i32.const 140703) "a") (data (i32.const 140706) "a") (data (i32.const 140709) "a") (data (i32.const 140712) "a") (data (i32.const 140715) "a") (data (i32.const 140718) "a") (data (i32.const 140721) "a") (data (i32.const 140724) "a") (data (i32.const 140727) "a") (data (i32.const 140730) "a") (data (i32.const 140733) "a") (data (i32.const 140736) "a") (data (i32.const 140739) "a") (data (i32.const 140742) "a") (data (i32.const 140745) "a") (data (i32.const 140748) "a") (data (i32.const 140751) "a") (data (i32.const 140754) "a") (data (i32.const 140757) "a") (data (i32.const 140760) "a") (data (i32.const 140763) "a") (data (i32.const 140766) "a") (data (i32.const 140769) "a") (data (i32.const 140772) "a") (data (i32.const 140775) "a") (data (i32.const 140778) "a") (data (i32.const 140781) "a") (data (i32.const 140784) "a") (data (i32.const 140787) "a") (data (i32.const 140790) "a") (data (i32.const 140793) "a") (data (i32.const 140796) "a") (data (i32.const 140799) "a") (data (i32.const 140802) "a") (data (i32.const 140805) "a") (data (i32.const 140808) "a") (data (i32.const 140811) "a") (data (i32.const 140814) "a") (data (i32.const 140817) "a") (data (i32.const 140820) "a") (data (i32.const 140823) "a") (data (i32.const 140826) "a") (data (i32.const 140829) "a") (data (i32.const 140832) "a") (data (i32.const 140835) "a") (data (i32.const 140838) "a") (data (i32.const 140841) "a") (data (i32.const 140844) "a") (data (i32.const 140847) "a") (data (i32.const 140850) "a") (data (i32.const 140853) "a") (data (i32.const 140856) "a") (data (i32.const 140859) "a") (data (i32.const 140862) "a") (data (i32.const 140865) "a") (data (i32.const 140868) "a") (data (i32.const 140871) "a") (data (i32.const 140874) "a") (data (i32.const 140877) "a") (data (i32.const 140880) "a") (data (i32.const 140883) "a") (data (i32.const 140886) "a") (data (i32.const 140889) "a") (data (i32.const 140892) "a") (data (i32.const 140895) "a") (data (i32.const 140898) "a") (data (i32.const 140901) "a") (data (i32.const 140904) "a") (data (i32.const 140907) "a") (data (i32.const 140910) "a") (data (i32.const 140913) "a") (data (i32.const 140916) "a") (data (i32.const 140919) "a") (data (i32.const 140922) "a") (data (i32.const 140925) "a") (data (i32.const 140928) "a") (data (i32.const 140931) "a") (data (i32.const 140934) "a") (data (i32.const 140937) "a") (data (i32.const 140940) "a") (data (i32.const 140943) "a") (data (i32.const 140946) "a") (data (i32.const 140949) "a") (data (i32.const 140952) "a") (data (i32.const 140955) "a") (data (i32.const 140958) "a") (data (i32.const 140961) "a") (data (i32.const 140964) "a") (data (i32.const 140967) "a") (data (i32.const 140970) "a") (data (i32.const 140973) "a") (data (i32.const 140976) "a") (data (i32.const 140979) "a") (data (i32.const 140982) "a") (data (i32.const 140985) "a") (data (i32.const 140988) "a") (data (i32.const 140991) "a") (data (i32.const 140994) "a") (data (i32.const 140997) "a") (data (i32.const 141000) "a") (data (i32.const 141003) "a") (data (i32.const 141006) "a") (data (i32.const 141009) "a") (data (i32.const 141012) "a") (data (i32.const 141015) "a") (data (i32.const 141018) "a") (data (i32.const 141021) "a") (data (i32.const 141024) "a") (data (i32.const 141027) "a") (data (i32.const 141030) "a") (data (i32.const 141033) "a") (data (i32.const 141036) "a") (data (i32.const 141039) "a") (data (i32.const 141042) "a") (data (i32.const 141045) "a") (data (i32.const 141048) "a") (data (i32.const 141051) "a") (data (i32.const 141054) "a") (data (i32.const 141057) "a") (data (i32.const 141060) "a") (data (i32.const 141063) "a") (data (i32.const 141066) "a") (data (i32.const 141069) "a") (data (i32.const 141072) "a") (data (i32.const 141075) "a") (data (i32.const 141078) "a") (data (i32.const 141081) "a") (data (i32.const 141084) "a") (data (i32.const 141087) "a") (data (i32.const 141090) "a") (data (i32.const 141093) "a") (data (i32.const 141096) "a") (data (i32.const 141099) "a") (data (i32.const 141102) "a") (data (i32.const 141105) "a") (data (i32.const 141108) "a") (data (i32.const 141111) "a") (data (i32.const 141114) "a") (data (i32.const 141117) "a") (data (i32.const 141120) "a") (data (i32.const 141123) "a") (data (i32.const 141126) "a") (data (i32.const 141129) "a") (data (i32.const 141132) "a") (data (i32.const 141135) "a") (data (i32.const 141138) "a") (data (i32.const 141141) "a") (data (i32.const 141144) "a") (data (i32.const 141147) "a") (data (i32.const 141150) "a") (data (i32.const 141153) "a") (data (i32.const 141156) "a") (data (i32.const 141159) "a") (data (i32.const 141162) "a") (data (i32.const 141165) "a") (data (i32.const 141168) "a") (data (i32.const 141171) "a") (data (i32.const 141174) "a") (data (i32.const 141177) "a") (data (i32.const 141180) "a") (data (i32.const 141183) "a") (data (i32.const 141186) "a") (data (i32.const 141189) "a") (data (i32.const 141192) "a") (data (i32.const 141195) "a") (data (i32.const 141198) "a") (data (i32.const 141201) "a") (data (i32.const 141204) "a") (data (i32.const 141207) "a") (data (i32.const 141210) "a") (data (i32.const 141213) "a") (data (i32.const 141216) "a") (data (i32.const 141219) "a") (data (i32.const 141222) "a") (data (i32.const 141225) "a") (data (i32.const 141228) "a") (data (i32.const 141231) "a") (data (i32.const 141234) "a") (data (i32.const 141237) "a") (data (i32.const 141240) "a") (data (i32.const 141243) "a") (data (i32.const 141246) "a") (data (i32.const 141249) "a") (data (i32.const 141252) "a") (data (i32.const 141255) "a") (data (i32.const 141258) "a") (data (i32.const 141261) "a") (data (i32.const 141264) "a") (data (i32.const 141267) "a") (data (i32.const 141270) "a") (data (i32.const 141273) "a") (data (i32.const 141276) "a") (data (i32.const 141279) "a") (data (i32.const 141282) "a") (data (i32.const 141285) "a") (data (i32.const 141288) "a") (data (i32.const 141291) "a") (data (i32.const 141294) "a") (data (i32.const 141297) "a") (data (i32.const 141300) "a") (data (i32.const 141303) "a") (data (i32.const 141306) "a") (data (i32.const 141309) "a") (data (i32.const 141312) "a") (data (i32.const 141315) "a") (data (i32.const 141318) "a") (data (i32.const 141321) "a") (data (i32.const 141324) "a") (data (i32.const 141327) "a") (data (i32.const 141330) "a") (data (i32.const 141333) "a") (data (i32.const 141336) "a") (data (i32.const 141339) "a") (data (i32.const 141342) "a") (data (i32.const 141345) "a") (data (i32.const 141348) "a") (data (i32.const 141351) "a") (data (i32.const 141354) "a") (data (i32.const 141357) "a") (data (i32.const 141360) "a") (data (i32.const 141363) "a") (data (i32.const 141366) "a") (data (i32.const 141369) "a") (data (i32.const 141372) "a") (data (i32.const 141375) "a") (data (i32.const 141378) "a") (data (i32.const 141381) "a") (data (i32.const 141384) "a") (data (i32.const 141387) "a") (data (i32.const 141390) "a") (data (i32.const 141393) "a") (data (i32.const 141396) "a") (data (i32.const 141399) "a") (data (i32.const 141402) "a") (data (i32.const 141405) "a") (data (i32.const 141408) "a") (data (i32.const 141411) "a") (data (i32.const 141414) "a") (data (i32.const 141417) "a") (data (i32.const 141420) "a") (data (i32.const 141423) "a") (data (i32.const 141426) "a") (data (i32.const 141429) "a") (data (i32.const 141432) "a") (data (i32.const 141435) "a") (data (i32.const 141438) "a") (data (i32.const 141441) "a") (data (i32.const 141444) "a") (data (i32.const 141447) "a") (data (i32.const 141450) "a") (data (i32.const 141453) "a") (data (i32.const 141456) "a") (data (i32.const 141459) "a") (data (i32.const 141462) "a") (data (i32.const 141465) "a") (data (i32.const 141468) "a") (data (i32.const 141471) "a") (data (i32.const 141474) "a") (data (i32.const 141477) "a") (data (i32.const 141480) "a") (data (i32.const 141483) "a") (data (i32.const 141486) "a") (data (i32.const 141489) "a") (data (i32.const 141492) "a") (data (i32.const 141495) "a") (data (i32.const 141498) "a") (data (i32.const 141501) "a") (data (i32.const 141504) "a") (data (i32.const 141507) "a") (data (i32.const 141510) "a") (data (i32.const 141513) "a") (data (i32.const 141516) "a") (data (i32.const 141519) "a") (data (i32.const 141522) "a") (data (i32.const 141525) "a") (data (i32.const 141528) "a") (data (i32.const 141531) "a") (data (i32.const 141534) "a") (data (i32.const 141537) "a") (data (i32.const 141540) "a") (data (i32.const 141543) "a") (data (i32.const 141546) "a") (data (i32.const 141549) "a") (data (i32.const 141552) "a") (data (i32.const 141555) "a") (data (i32.const 141558) "a") (data (i32.const 141561) "a") (data (i32.const 141564) "a") (data (i32.const 141567) "a") (data (i32.const 141570) "a") (data (i32.const 141573) "a") (data (i32.const 141576) "a") (data (i32.const 141579) "a") (data (i32.const 141582) "a") (data (i32.const 141585) "a") (data (i32.const 141588) "a") (data (i32.const 141591) "a") (data (i32.const 141594) "a") (data (i32.const 141597) "a") (data (i32.const 141600) "a") (data (i32.const 141603) "a") (data (i32.const 141606) "a") (data (i32.const 141609) "a") (data (i32.const 141612) "a") (data (i32.const 141615) "a") (data (i32.const 141618) "a") (data (i32.const 141621) "a") (data (i32.const 141624) "a") (data (i32.const 141627) "a") (data (i32.const 141630) "a") (data (i32.const 141633) "a") (data (i32.const 141636) "a") (data (i32.const 141639) "a") (data (i32.const 141642) "a") (data (i32.const 141645) "a") (data (i32.const 141648) "a") (data (i32.const 141651) "a") (data (i32.const 141654) "a") (data (i32.const 141657) "a") (data (i32.const 141660) "a") (data (i32.const 141663) "a") (data (i32.const 141666) "a") (data (i32.const 141669) "a") (data (i32.const 141672) "a") (data (i32.const 141675) "a") (data (i32.const 141678) "a") (data (i32.const 141681) "a") (data (i32.const 141684) "a") (data (i32.const 141687) "a") (data (i32.const 141690) "a") (data (i32.const 141693) "a") (data (i32.const 141696) "a") (data (i32.const 141699) "a") (data (i32.const 141702) "a") (data (i32.const 141705) "a") (data (i32.const 141708) "a") (data (i32.const 141711) "a") (data (i32.const 141714) "a") (data (i32.const 141717) "a") (data (i32.const 141720) "a") (data (i32.const 141723) "a") (data (i32.const 141726) "a") (data (i32.const 141729) "a") (data (i32.const 141732) "a") (data (i32.const 141735) "a") (data (i32.const 141738) "a") (data (i32.const 141741) "a") (data (i32.const 141744) "a") (data (i32.const 141747) "a") (data (i32.const 141750) "a") (data (i32.const 141753) "a") (data (i32.const 141756) "a") (data (i32.const 141759) "a") (data (i32.const 141762) "a") (data (i32.const 141765) "a") (data (i32.const 141768) "a") (data (i32.const 141771) "a") (data (i32.const 141774) "a") (data (i32.const 141777) "a") (data (i32.const 141780) "a") (data (i32.const 141783) "a") (data (i32.const 141786) "a") (data (i32.const 141789) "a") (data (i32.const 141792) "a") (data (i32.const 141795) "a") (data (i32.const 141798) "a") (data (i32.const 141801) "a") (data (i32.const 141804) "a") (data (i32.const 141807) "a") (data (i32.const 141810) "a") (data (i32.const 141813) "a") (data (i32.const 141816) "a") (data (i32.const 141819) "a") (data (i32.const 141822) "a") (data (i32.const 141825) "a") (data (i32.const 141828) "a") (data (i32.const 141831) "a") (data (i32.const 141834) "a") (data (i32.const 141837) "a") (data (i32.const 141840) "a") (data (i32.const 141843) "a") (data (i32.const 141846) "a") (data (i32.const 141849) "a") (data (i32.const 141852) "a") (data (i32.const 141855) "a") (data (i32.const 141858) "a") (data (i32.const 141861) "a") (data (i32.const 141864) "a") (data (i32.const 141867) "a") (data (i32.const 141870) "a") (data (i32.const 141873) "a") (data (i32.const 141876) "a") (data (i32.const 141879) "a") (data (i32.const 141882) "a") (data (i32.const 141885) "a") (data (i32.const 141888) "a") (data (i32.const 141891) "a") (data (i32.const 141894) "a") (data (i32.const 141897) "a") (data (i32.const 141900) "a") (data (i32.const 141903) "a") (data (i32.const 141906) "a") (data (i32.const 141909) "a") (data (i32.const 141912) "a") (data (i32.const 141915) "a") (data (i32.const 141918) "a") (data (i32.const 141921) "a") (data (i32.const 141924) "a") (data (i32.const 141927) "a") (data (i32.const 141930) "a") (data (i32.const 141933) "a") (data (i32.const 141936) "a") (data (i32.const 141939) "a") (data (i32.const 141942) "a") (data (i32.const 141945) "a") (data (i32.const 141948) "a") (data (i32.const 141951) "a") (data (i32.const 141954) "a") (data (i32.const 141957) "a") (data (i32.const 141960) "a") (data (i32.const 141963) "a") (data (i32.const 141966) "a") (data (i32.const 141969) "a") (data (i32.const 141972) "a") (data (i32.const 141975) "a") (data (i32.const 141978) "a") (data (i32.const 141981) "a") (data (i32.const 141984) "a") (data (i32.const 141987) "a") (data (i32.const 141990) "a") (data (i32.const 141993) "a") (data (i32.const 141996) "a") (data (i32.const 141999) "a") (data (i32.const 142002) "a") (data (i32.const 142005) "a") (data (i32.const 142008) "a") (data (i32.const 142011) "a") (data (i32.const 142014) "a") (data (i32.const 142017) "a") (data (i32.const 142020) "a") (data (i32.const 142023) "a") (data (i32.const 142026) "a") (data (i32.const 142029) "a") (data (i32.const 142032) "a") (data (i32.const 142035) "a") (data (i32.const 142038) "a") (data (i32.const 142041) "a") (data (i32.const 142044) "a") (data (i32.const 142047) "a") (data (i32.const 142050) "a") (data (i32.const 142053) "a") (data (i32.const 142056) "a") (data (i32.const 142059) "a") (data (i32.const 142062) "a") (data (i32.const 142065) "a") (data (i32.const 142068) "a") (data (i32.const 142071) "a") (data (i32.const 142074) "a") (data (i32.const 142077) "a") (data (i32.const 142080) "a") (data (i32.const 142083) "a") (data (i32.const 142086) "a") (data (i32.const 142089) "a") (data (i32.const 142092) "a") (data (i32.const 142095) "a") (data (i32.const 142098) "a") (data (i32.const 142101) "a") (data (i32.const 142104) "a") (data (i32.const 142107) "a") (data (i32.const 142110) "a") (data (i32.const 142113) "a") (data (i32.const 142116) "a") (data (i32.const 142119) "a") (data (i32.const 142122) "a") (data (i32.const 142125) "a") (data (i32.const 142128) "a") (data (i32.const 142131) "a") (data (i32.const 142134) "a") (data (i32.const 142137) "a") (data (i32.const 142140) "a") (data (i32.const 142143) "a") (data (i32.const 142146) "a") (data (i32.const 142149) "a") (data (i32.const 142152) "a") (data (i32.const 142155) "a") (data (i32.const 142158) "a") (data (i32.const 142161) "a") (data (i32.const 142164) "a") (data (i32.const 142167) "a") (data (i32.const 142170) "a") (data (i32.const 142173) "a") (data (i32.const 142176) "a") (data (i32.const 142179) "a") (data (i32.const 142182) "a") (data (i32.const 142185) "a") (data (i32.const 142188) "a") (data (i32.const 142191) "a") (data (i32.const 142194) "a") (data (i32.const 142197) "a") (data (i32.const 142200) "a") (data (i32.const 142203) "a") (data (i32.const 142206) "a") (data (i32.const 142209) "a") (data (i32.const 142212) "a") (data (i32.const 142215) "a") (data (i32.const 142218) "a") (data (i32.const 142221) "a") (data (i32.const 142224) "a") (data (i32.const 142227) "a") (data (i32.const 142230) "a") (data (i32.const 142233) "a") (data (i32.const 142236) "a") (data (i32.const 142239) "a") (data (i32.const 142242) "a") (data (i32.const 142245) "a") (data (i32.const 142248) "a") (data (i32.const 142251) "a") (data (i32.const 142254) "a") (data (i32.const 142257) "a") (data (i32.const 142260) "a") (data (i32.const 142263) "a") (data (i32.const 142266) "a") (data (i32.const 142269) "a") (data (i32.const 142272) "a") (data (i32.const 142275) "a") (data (i32.const 142278) "a") (data (i32.const 142281) "a") (data (i32.const 142284) "a") (data (i32.const 142287) "a") (data (i32.const 142290) "a") (data (i32.const 142293) "a") (data (i32.const 142296) "a") (data (i32.const 142299) "a") (data (i32.const 142302) "a") (data (i32.const 142305) "a") (data (i32.const 142308) "a") (data (i32.const 142311) "a") (data (i32.const 142314) "a") (data (i32.const 142317) "a") (data (i32.const 142320) "a") (data (i32.const 142323) "a") (data (i32.const 142326) "a") (data (i32.const 142329) "a") (data (i32.const 142332) "a") (data (i32.const 142335) "a") (data (i32.const 142338) "a") (data (i32.const 142341) "a") (data (i32.const 142344) "a") (data (i32.const 142347) "a") (data (i32.const 142350) "a") (data (i32.const 142353) "a") (data (i32.const 142356) "a") (data (i32.const 142359) "a") (data (i32.const 142362) "a") (data (i32.const 142365) "a") (data (i32.const 142368) "a") (data (i32.const 142371) "a") (data (i32.const 142374) "a") (data (i32.const 142377) "a") (data (i32.const 142380) "a") (data (i32.const 142383) "a") (data (i32.const 142386) "a") (data (i32.const 142389) "a") (data (i32.const 142392) "a") (data (i32.const 142395) "a") (data (i32.const 142398) "a") (data (i32.const 142401) "a") (data (i32.const 142404) "a") (data (i32.const 142407) "a") (data (i32.const 142410) "a") (data (i32.const 142413) "a") (data (i32.const 142416) "a") (data (i32.const 142419) "a") (data (i32.const 142422) "a") (data (i32.const 142425) "a") (data (i32.const 142428) "a") (data (i32.const 142431) "a") (data (i32.const 142434) "a") (data (i32.const 142437) "a") (data (i32.const 142440) "a") (data (i32.const 142443) "a") (data (i32.const 142446) "a") (data (i32.const 142449) "a") (data (i32.const 142452) "a") (data (i32.const 142455) "a") (data (i32.const 142458) "a") (data (i32.const 142461) "a") (data (i32.const 142464) "a") (data (i32.const 142467) "a") (data (i32.const 142470) "a") (data (i32.const 142473) "a") (data (i32.const 142476) "a") (data (i32.const 142479) "a") (data (i32.const 142482) "a") (data (i32.const 142485) "a") (data (i32.const 142488) "a") (data (i32.const 142491) "a") (data (i32.const 142494) "a") (data (i32.const 142497) "a") (data (i32.const 142500) "a") (data (i32.const 142503) "a") (data (i32.const 142506) "a") (data (i32.const 142509) "a") (data (i32.const 142512) "a") (data (i32.const 142515) "a") (data (i32.const 142518) "a") (data (i32.const 142521) "a") (data (i32.const 142524) "a") (data (i32.const 142527) "a") (data (i32.const 142530) "a") (data (i32.const 142533) "a") (data (i32.const 142536) "a") (data (i32.const 142539) "a") (data (i32.const 142542) "a") (data (i32.const 142545) "a") (data (i32.const 142548) "a") (data (i32.const 142551) "a") (data (i32.const 142554) "a") (data (i32.const 142557) "a") (data (i32.const 142560) "a") (data (i32.const 142563) "a") (data (i32.const 142566) "a") (data (i32.const 142569) "a") (data (i32.const 142572) "a") (data (i32.const 142575) "a") (data (i32.const 142578) "a") (data (i32.const 142581) "a") (data (i32.const 142584) "a") (data (i32.const 142587) "a") (data (i32.const 142590) "a") (data (i32.const 142593) "a") (data (i32.const 142596) "a") (data (i32.const 142599) "a") (data (i32.const 142602) "a") (data (i32.const 142605) "a") (data (i32.const 142608) "a") (data (i32.const 142611) "a") (data (i32.const 142614) "a") (data (i32.const 142617) "a") (data (i32.const 142620) "a") (data (i32.const 142623) "a") (data (i32.const 142626) "a") (data (i32.const 142629) "a") (data (i32.const 142632) "a") (data (i32.const 142635) "a") (data (i32.const 142638) "a") (data (i32.const 142641) "a") (data (i32.const 142644) "a") (data (i32.const 142647) "a") (data (i32.const 142650) "a") (data (i32.const 142653) "a") (data (i32.const 142656) "a") (data (i32.const 142659) "a") (data (i32.const 142662) "a") (data (i32.const 142665) "a") (data (i32.const 142668) "a") (data (i32.const 142671) "a") (data (i32.const 142674) "a") (data (i32.const 142677) "a") (data (i32.const 142680) "a") (data (i32.const 142683) "a") (data (i32.const 142686) "a") (data (i32.const 142689) "a") (data (i32.const 142692) "a") (data (i32.const 142695) "a") (data (i32.const 142698) "a") (data (i32.const 142701) "a") (data (i32.const 142704) "a") (data (i32.const 142707) "a") (data (i32.const 142710) "a") (data (i32.const 142713) "a") (data (i32.const 142716) "a") (data (i32.const 142719) "a") (data (i32.const 142722) "a") (data (i32.const 142725) "a") (data (i32.const 142728) "a") (data (i32.const 142731) "a") (data (i32.const 142734) "a") (data (i32.const 142737) "a") (data (i32.const 142740) "a") (data (i32.const 142743) "a") (data (i32.const 142746) "a") (data (i32.const 142749) "a") (data (i32.const 142752) "a") (data (i32.const 142755) "a") (data (i32.const 142758) "a") (data (i32.const 142761) "a") (data (i32.const 142764) "a") (data (i32.const 142767) "a") (data (i32.const 142770) "a") (data (i32.const 142773) "a") (data (i32.const 142776) "a") (data (i32.const 142779) "a") (data (i32.const 142782) "a") (data (i32.const 142785) "a") (data (i32.const 142788) "a") (data (i32.const 142791) "a") (data (i32.const 142794) "a") (data (i32.const 142797) "a") (data (i32.const 142800) "a") (data (i32.const 142803) "a") (data (i32.const 142806) "a") (data (i32.const 142809) "a") (data (i32.const 142812) "a") (data (i32.const 142815) "a") (data (i32.const 142818) "a") (data (i32.const 142821) "a") (data (i32.const 142824) "a") (data (i32.const 142827) "a") (data (i32.const 142830) "a") (data (i32.const 142833) "a") (data (i32.const 142836) "a") (data (i32.const 142839) "a") (data (i32.const 142842) "a") (data (i32.const 142845) "a") (data (i32.const 142848) "a") (data (i32.const 142851) "a") (data (i32.const 142854) "a") (data (i32.const 142857) "a") (data (i32.const 142860) "a") (data (i32.const 142863) "a") (data (i32.const 142866) "a") (data (i32.const 142869) "a") (data (i32.const 142872) "a") (data (i32.const 142875) "a") (data (i32.const 142878) "a") (data (i32.const 142881) "a") (data (i32.const 142884) "a") (data (i32.const 142887) "a") (data (i32.const 142890) "a") (data (i32.const 142893) "a") (data (i32.const 142896) "a") (data (i32.const 142899) "a") (data (i32.const 142902) "a") (data (i32.const 142905) "a") (data (i32.const 142908) "a") (data (i32.const 142911) "a") (data (i32.const 142914) "a") (data (i32.const 142917) "a") (data (i32.const 142920) "a") (data (i32.const 142923) "a") (data (i32.const 142926) "a") (data (i32.const 142929) "a") (data (i32.const 142932) "a") (data (i32.const 142935) "a") (data (i32.const 142938) "a") (data (i32.const 142941) "a") (data (i32.const 142944) "a") (data (i32.const 142947) "a") (data (i32.const 142950) "a") (data (i32.const 142953) "a") (data (i32.const 142956) "a") (data (i32.const 142959) "a") (data (i32.const 142962) "a") (data (i32.const 142965) "a") (data (i32.const 142968) "a") (data (i32.const 142971) "a") (data (i32.const 142974) "a") (data (i32.const 142977) "a") (data (i32.const 142980) "a") (data (i32.const 142983) "a") (data (i32.const 142986) "a") (data (i32.const 142989) "a") (data (i32.const 142992) "a") (data (i32.const 142995) "a") (data (i32.const 142998) "a") (data (i32.const 143001) "a") (data (i32.const 143004) "a") (data (i32.const 143007) "a") (data (i32.const 143010) "a") (data (i32.const 143013) "a") (data (i32.const 143016) "a") (data (i32.const 143019) "a") (data (i32.const 143022) "a") (data (i32.const 143025) "a") (data (i32.const 143028) "a") (data (i32.const 143031) "a") (data (i32.const 143034) "a") (data (i32.const 143037) "a") (data (i32.const 143040) "a") (data (i32.const 143043) "a") (data (i32.const 143046) "a") (data (i32.const 143049) "a") (data (i32.const 143052) "a") (data (i32.const 143055) "a") (data (i32.const 143058) "a") (data (i32.const 143061) "a") (data (i32.const 143064) "a") (data (i32.const 143067) "a") (data (i32.const 143070) "a") (data (i32.const 143073) "a") (data (i32.const 143076) "a") (data (i32.const 143079) "a") (data (i32.const 143082) "a") (data (i32.const 143085) "a") (data (i32.const 143088) "a") (data (i32.const 143091) "a") (data (i32.const 143094) "a") (data (i32.const 143097) "a") (data (i32.const 143100) "a") (data (i32.const 143103) "a") (data (i32.const 143106) "a") (data (i32.const 143109) "a") (data (i32.const 143112) "a") (data (i32.const 143115) "a") (data (i32.const 143118) "a") (data (i32.const 143121) "a") (data (i32.const 143124) "a") (data (i32.const 143127) "a") (data (i32.const 143130) "a") (data (i32.const 143133) "a") (data (i32.const 143136) "a") (data (i32.const 143139) "a") (data (i32.const 143142) "a") (data (i32.const 143145) "a") (data (i32.const 143148) "a") (data (i32.const 143151) "a") (data (i32.const 143154) "a") (data (i32.const 143157) "a") (data (i32.const 143160) "a") (data (i32.const 143163) "a") (data (i32.const 143166) "a") (data (i32.const 143169) "a") (data (i32.const 143172) "a") (data (i32.const 143175) "a") (data (i32.const 143178) "a") (data (i32.const 143181) "a") (data (i32.const 143184) "a") (data (i32.const 143187) "a") (data (i32.const 143190) "a") (data (i32.const 143193) "a") (data (i32.const 143196) "a") (data (i32.const 143199) "a") (data (i32.const 143202) "a") (data (i32.const 143205) "a") (data (i32.const 143208) "a") (data (i32.const 143211) "a") (data (i32.const 143214) "a") (data (i32.const 143217) "a") (data (i32.const 143220) "a") (data (i32.const 143223) "a") (data (i32.const 143226) "a") (data (i32.const 143229) "a") (data (i32.const 143232) "a") (data (i32.const 143235) "a") (data (i32.const 143238) "a") (data (i32.const 143241) "a") (data (i32.const 143244) "a") (data (i32.const 143247) "a") (data (i32.const 143250) "a") (data (i32.const 143253) "a") (data (i32.const 143256) "a") (data (i32.const 143259) "a") (data (i32.const 143262) "a") (data (i32.const 143265) "a") (data (i32.const 143268) "a") (data (i32.const 143271) "a") (data (i32.const 143274) "a") (data (i32.const 143277) "a") (data (i32.const 143280) "a") (data (i32.const 143283) "a") (data (i32.const 143286) "a") (data (i32.const 143289) "a") (data (i32.const 143292) "a") (data (i32.const 143295) "a") (data (i32.const 143298) "a") (data (i32.const 143301) "a") (data (i32.const 143304) "a") (data (i32.const 143307) "a") (data (i32.const 143310) "a") (data (i32.const 143313) "a") (data (i32.const 143316) "a") (data (i32.const 143319) "a") (data (i32.const 143322) "a") (data (i32.const 143325) "a") (data (i32.const 143328) "a") (data (i32.const 143331) "a") (data (i32.const 143334) "a") (data (i32.const 143337) "a") (data (i32.const 143340) "a") (data (i32.const 143343) "a") (data (i32.const 143346) "a") (data (i32.const 143349) "a") (data (i32.const 143352) "a") (data (i32.const 143355) "a") (data (i32.const 143358) "a") (data (i32.const 143361) "a") (data (i32.const 143364) "a") (data (i32.const 143367) "a") (data (i32.const 143370) "a") (data (i32.const 143373) "a") (data (i32.const 143376) "a") (data (i32.const 143379) "a") (data (i32.const 143382) "a") (data (i32.const 143385) "a") (data (i32.const 143388) "a") (data (i32.const 143391) "a") (data (i32.const 143394) "a") (data (i32.const 143397) "a") (data (i32.const 143400) "a") (data (i32.const 143403) "a") (data (i32.const 143406) "a") (data (i32.const 143409) "a") (data (i32.const 143412) "a") (data (i32.const 143415) "a") (data (i32.const 143418) "a") (data (i32.const 143421) "a") (data (i32.const 143424) "a") (data (i32.const 143427) "a") (data (i32.const 143430) "a") (data (i32.const 143433) "a") (data (i32.const 143436) "a") (data (i32.const 143439) "a") (data (i32.const 143442) "a") (data (i32.const 143445) "a") (data (i32.const 143448) "a") (data (i32.const 143451) "a") (data (i32.const 143454) "a") (data (i32.const 143457) "a") (data (i32.const 143460) "a") (data (i32.const 143463) "a") (data (i32.const 143466) "a") (data (i32.const 143469) "a") (data (i32.const 143472) "a") (data (i32.const 143475) "a") (data (i32.const 143478) "a") (data (i32.const 143481) "a") (data (i32.const 143484) "a") (data (i32.const 143487) "a") (data (i32.const 143490) "a") (data (i32.const 143493) "a") (data (i32.const 143496) "a") (data (i32.const 143499) "a") (data (i32.const 143502) "a") (data (i32.const 143505) "a") (data (i32.const 143508) "a") (data (i32.const 143511) "a") (data (i32.const 143514) "a") (data (i32.const 143517) "a") (data (i32.const 143520) "a") (data (i32.const 143523) "a") (data (i32.const 143526) "a") (data (i32.const 143529) "a") (data (i32.const 143532) "a") (data (i32.const 143535) "a") (data (i32.const 143538) "a") (data (i32.const 143541) "a") (data (i32.const 143544) "a") (data (i32.const 143547) "a") (data (i32.const 143550) "a") (data (i32.const 143553) "a") (data (i32.const 143556) "a") (data (i32.const 143559) "a") (data (i32.const 143562) "a") (data (i32.const 143565) "a") (data (i32.const 143568) "a") (data (i32.const 143571) "a") (data (i32.const 143574) "a") (data (i32.const 143577) "a") (data (i32.const 143580) "a") (data (i32.const 143583) "a") (data (i32.const 143586) "a") (data (i32.const 143589) "a") (data (i32.const 143592) "a") (data (i32.const 143595) "a") (data (i32.const 143598) "a") (data (i32.const 143601) "a") (data (i32.const 143604) "a") (data (i32.const 143607) "a") (data (i32.const 143610) "a") (data (i32.const 143613) "a") (data (i32.const 143616) "a") (data (i32.const 143619) "a") (data (i32.const 143622) "a") (data (i32.const 143625) "a") (data (i32.const 143628) "a") (data (i32.const 143631) "a") (data (i32.const 143634) "a") (data (i32.const 143637) "a") (data (i32.const 143640) "a") (data (i32.const 143643) "a") (data (i32.const 143646) "a") (data (i32.const 143649) "a") (data (i32.const 143652) "a") (data (i32.const 143655) "a") (data (i32.const 143658) "a") (data (i32.const 143661) "a") (data (i32.const 143664) "a") (data (i32.const 143667) "a") (data (i32.const 143670) "a") (data (i32.const 143673) "a") (data (i32.const 143676) "a") (data (i32.const 143679) "a") (data (i32.const 143682) "a") (data (i32.const 143685) "a") (data (i32.const 143688) "a") (data (i32.const 143691) "a") (data (i32.const 143694) "a") (data (i32.const 143697) "a") (data (i32.const 143700) "a") (data (i32.const 143703) "a") (data (i32.const 143706) "a") (data (i32.const 143709) "a") (data (i32.const 143712) "a") (data (i32.const 143715) "a") (data (i32.const 143718) "a") (data (i32.const 143721) "a") (data (i32.const 143724) "a") (data (i32.const 143727) "a") (data (i32.const 143730) "a") (data (i32.const 143733) "a") (data (i32.const 143736) "a") (data (i32.const 143739) "a") (data (i32.const 143742) "a") (data (i32.const 143745) "a") (data (i32.const 143748) "a") (data (i32.const 143751) "a") (data (i32.const 143754) "a") (data (i32.const 143757) "a") (data (i32.const 143760) "a") (data (i32.const 143763) "a") (data (i32.const 143766) "a") (data (i32.const 143769) "a") (data (i32.const 143772) "a") (data (i32.const 143775) "a") (data (i32.const 143778) "a") (data (i32.const 143781) "a") (data (i32.const 143784) "a") (data (i32.const 143787) "a") (data (i32.const 143790) "a") (data (i32.const 143793) "a") (data (i32.const 143796) "a") (data (i32.const 143799) "a") (data (i32.const 143802) "a") (data (i32.const 143805) "a") (data (i32.const 143808) "a") (data (i32.const 143811) "a") (data (i32.const 143814) "a") (data (i32.const 143817) "a") (data (i32.const 143820) "a") (data (i32.const 143823) "a") (data (i32.const 143826) "a") (data (i32.const 143829) "a") (data (i32.const 143832) "a") (data (i32.const 143835) "a") (data (i32.const 143838) "a") (data (i32.const 143841) "a") (data (i32.const 143844) "a") (data (i32.const 143847) "a") (data (i32.const 143850) "a") (data (i32.const 143853) "a") (data (i32.const 143856) "a") (data (i32.const 143859) "a") (data (i32.const 143862) "a") (data (i32.const 143865) "a") (data (i32.const 143868) "a") (data (i32.const 143871) "a") (data (i32.const 143874) "a") (data (i32.const 143877) "a") (data (i32.const 143880) "a") (data (i32.const 143883) "a") (data (i32.const 143886) "a") (data (i32.const 143889) "a") (data (i32.const 143892) "a") (data (i32.const 143895) "a") (data (i32.const 143898) "a") (data (i32.const 143901) "a") (data (i32.const 143904) "a") (data (i32.const 143907) "a") (data (i32.const 143910) "a") (data (i32.const 143913) "a") (data (i32.const 143916) "a") (data (i32.const 143919) "a") (data (i32.const 143922) "a") (data (i32.const 143925) "a") (data (i32.const 143928) "a") (data (i32.const 143931) "a") (data (i32.const 143934) "a") (data (i32.const 143937) "a") (data (i32.const 143940) "a") (data (i32.const 143943) "a") (data (i32.const 143946) "a") (data (i32.const 143949) "a") (data (i32.const 143952) "a") (data (i32.const 143955) "a") (data (i32.const 143958) "a") (data (i32.const 143961) "a") (data (i32.const 143964) "a") (data (i32.const 143967) "a") (data (i32.const 143970) "a") (data (i32.const 143973) "a") (data (i32.const 143976) "a") (data (i32.const 143979) "a") (data (i32.const 143982) "a") (data (i32.const 143985) "a") (data (i32.const 143988) "a") (data (i32.const 143991) "a") (data (i32.const 143994) "a") (data (i32.const 143997) "a") (data (i32.const 144000) "a") (data (i32.const 144003) "a") (data (i32.const 144006) "a") (data (i32.const 144009) "a") (data (i32.const 144012) "a") (data (i32.const 144015) "a") (data (i32.const 144018) "a") (data (i32.const 144021) "a") (data (i32.const 144024) "a") (data (i32.const 144027) "a") (data (i32.const 144030) "a") (data (i32.const 144033) "a") (data (i32.const 144036) "a") (data (i32.const 144039) "a") (data (i32.const 144042) "a") (data (i32.const 144045) "a") (data (i32.const 144048) "a") (data (i32.const 144051) "a") (data (i32.const 144054) "a") (data (i32.const 144057) "a") (data (i32.const 144060) "a") (data (i32.const 144063) "a") (data (i32.const 144066) "a") (data (i32.const 144069) "a") (data (i32.const 144072) "a") (data (i32.const 144075) "a") (data (i32.const 144078) "a") (data (i32.const 144081) "a") (data (i32.const 144084) "a") (data (i32.const 144087) "a") (data (i32.const 144090) "a") (data (i32.const 144093) "a") (data (i32.const 144096) "a") (data (i32.const 144099) "a") (data (i32.const 144102) "a") (data (i32.const 144105) "a") (data (i32.const 144108) "a") (data (i32.const 144111) "a") (data (i32.const 144114) "a") (data (i32.const 144117) "a") (data (i32.const 144120) "a") (data (i32.const 144123) "a") (data (i32.const 144126) "a") (data (i32.const 144129) "a") (data (i32.const 144132) "a") (data (i32.const 144135) "a") (data (i32.const 144138) "a") (data (i32.const 144141) "a") (data (i32.const 144144) "a") (data (i32.const 144147) "a") (data (i32.const 144150) "a") (data (i32.const 144153) "a") (data (i32.const 144156) "a") (data (i32.const 144159) "a") (data (i32.const 144162) "a") (data (i32.const 144165) "a") (data (i32.const 144168) "a") (data (i32.const 144171) "a") (data (i32.const 144174) "a") (data (i32.const 144177) "a") (data (i32.const 144180) "a") (data (i32.const 144183) "a") (data (i32.const 144186) "a") (data (i32.const 144189) "a") (data (i32.const 144192) "a") (data (i32.const 144195) "a") (data (i32.const 144198) "a") (data (i32.const 144201) "a") (data (i32.const 144204) "a") (data (i32.const 144207) "a") (data (i32.const 144210) "a") (data (i32.const 144213) "a") (data (i32.const 144216) "a") (data (i32.const 144219) "a") (data (i32.const 144222) "a") (data (i32.const 144225) "a") (data (i32.const 144228) "a") (data (i32.const 144231) "a") (data (i32.const 144234) "a") (data (i32.const 144237) "a") (data (i32.const 144240) "a") (data (i32.const 144243) "a") (data (i32.const 144246) "a") (data (i32.const 144249) "a") (data (i32.const 144252) "a") (data (i32.const 144255) "a") (data (i32.const 144258) "a") (data (i32.const 144261) "a") (data (i32.const 144264) "a") (data (i32.const 144267) "a") (data (i32.const 144270) "a") (data (i32.const 144273) "a") (data (i32.const 144276) "a") (data (i32.const 144279) "a") (data (i32.const 144282) "a") (data (i32.const 144285) "a") (data (i32.const 144288) "a") (data (i32.const 144291) "a") (data (i32.const 144294) "a") (data (i32.const 144297) "a") (data (i32.const 144300) "a") (data (i32.const 144303) "a") (data (i32.const 144306) "a") (data (i32.const 144309) "a") (data (i32.const 144312) "a") (data (i32.const 144315) "a") (data (i32.const 144318) "a") (data (i32.const 144321) "a") (data (i32.const 144324) "a") (data (i32.const 144327) "a") (data (i32.const 144330) "a") (data (i32.const 144333) "a") (data (i32.const 144336) "a") (data (i32.const 144339) "a") (data (i32.const 144342) "a") (data (i32.const 144345) "a") (data (i32.const 144348) "a") (data (i32.const 144351) "a") (data (i32.const 144354) "a") (data (i32.const 144357) "a") (data (i32.const 144360) "a") (data (i32.const 144363) "a") (data (i32.const 144366) "a") (data (i32.const 144369) "a") (data (i32.const 144372) "a") (data (i32.const 144375) "a") (data (i32.const 144378) "a") (data (i32.const 144381) "a") (data (i32.const 144384) "a") (data (i32.const 144387) "a") (data (i32.const 144390) "a") (data (i32.const 144393) "a") (data (i32.const 144396) "a") (data (i32.const 144399) "a") (data (i32.const 144402) "a") (data (i32.const 144405) "a") (data (i32.const 144408) "a") (data (i32.const 144411) "a") (data (i32.const 144414) "a") (data (i32.const 144417) "a") (data (i32.const 144420) "a") (data (i32.const 144423) "a") (data (i32.const 144426) "a") (data (i32.const 144429) "a") (data (i32.const 144432) "a") (data (i32.const 144435) "a") (data (i32.const 144438) "a") (data (i32.const 144441) "a") (data (i32.const 144444) "a") (data (i32.const 144447) "a") (data (i32.const 144450) "a") (data (i32.const 144453) "a") (data (i32.const 144456) "a") (data (i32.const 144459) "a") (data (i32.const 144462) "a") (data (i32.const 144465) "a") (data (i32.const 144468) "a") (data (i32.const 144471) "a") (data (i32.const 144474) "a") (data (i32.const 144477) "a") (data (i32.const 144480) "a") (data (i32.const 144483) "a") (data (i32.const 144486) "a") (data (i32.const 144489) "a") (data (i32.const 144492) "a") (data (i32.const 144495) "a") (data (i32.const 144498) "a") (data (i32.const 144501) "a") (data (i32.const 144504) "a") (data (i32.const 144507) "a") (data (i32.const 144510) "a") (data (i32.const 144513) "a") (data (i32.const 144516) "a") (data (i32.const 144519) "a") (data (i32.const 144522) "a") (data (i32.const 144525) "a") (data (i32.const 144528) "a") (data (i32.const 144531) "a") (data (i32.const 144534) "a") (data (i32.const 144537) "a") (data (i32.const 144540) "a") (data (i32.const 144543) "a") (data (i32.const 144546) "a") (data (i32.const 144549) "a") (data (i32.const 144552) "a") (data (i32.const 144555) "a") (data (i32.const 144558) "a") (data (i32.const 144561) "a") (data (i32.const 144564) "a") (data (i32.const 144567) "a") (data (i32.const 144570) "a") (data (i32.const 144573) "a") (data (i32.const 144576) "a") (data (i32.const 144579) "a") (data (i32.const 144582) "a") (data (i32.const 144585) "a") (data (i32.const 144588) "a") (data (i32.const 144591) "a") (data (i32.const 144594) "a") (data (i32.const 144597) "a") (data (i32.const 144600) "a") (data (i32.const 144603) "a") (data (i32.const 144606) "a") (data (i32.const 144609) "a") (data (i32.const 144612) "a") (data (i32.const 144615) "a") (data (i32.const 144618) "a") (data (i32.const 144621) "a") (data (i32.const 144624) "a") (data (i32.const 144627) "a") (data (i32.const 144630) "a") (data (i32.const 144633) "a") (data (i32.const 144636) "a") (data (i32.const 144639) "a") (data (i32.const 144642) "a") (data (i32.const 144645) "a") (data (i32.const 144648) "a") (data (i32.const 144651) "a") (data (i32.const 144654) "a") (data (i32.const 144657) "a") (data (i32.const 144660) "a") (data (i32.const 144663) "a") (data (i32.const 144666) "a") (data (i32.const 144669) "a") (data (i32.const 144672) "a") (data (i32.const 144675) "a") (data (i32.const 144678) "a") (data (i32.const 144681) "a") (data (i32.const 144684) "a") (data (i32.const 144687) "a") (data (i32.const 144690) "a") (data (i32.const 144693) "a") (data (i32.const 144696) "a") (data (i32.const 144699) "a") (data (i32.const 144702) "a") (data (i32.const 144705) "a") (data (i32.const 144708) "a") (data (i32.const 144711) "a") (data (i32.const 144714) "a") (data (i32.const 144717) "a") (data (i32.const 144720) "a") (data (i32.const 144723) "a") (data (i32.const 144726) "a") (data (i32.const 144729) "a") (data (i32.const 144732) "a") (data (i32.const 144735) "a") (data (i32.const 144738) "a") (data (i32.const 144741) "a") (data (i32.const 144744) "a") (data (i32.const 144747) "a") (data (i32.const 144750) "a") (data (i32.const 144753) "a") (data (i32.const 144756) "a") (data (i32.const 144759) "a") (data (i32.const 144762) "a") (data (i32.const 144765) "a") (data (i32.const 144768) "a") (data (i32.const 144771) "a") (data (i32.const 144774) "a") (data (i32.const 144777) "a") (data (i32.const 144780) "a") (data (i32.const 144783) "a") (data (i32.const 144786) "a") (data (i32.const 144789) "a") (data (i32.const 144792) "a") (data (i32.const 144795) "a") (data (i32.const 144798) "a") (data (i32.const 144801) "a") (data (i32.const 144804) "a") (data (i32.const 144807) "a") (data (i32.const 144810) "a") (data (i32.const 144813) "a") (data (i32.const 144816) "a") (data (i32.const 144819) "a") (data (i32.const 144822) "a") (data (i32.const 144825) "a") (data (i32.const 144828) "a") (data (i32.const 144831) "a") (data (i32.const 144834) "a") (data (i32.const 144837) "a") (data (i32.const 144840) "a") (data (i32.const 144843) "a") (data (i32.const 144846) "a") (data (i32.const 144849) "a") (data (i32.const 144852) "a") (data (i32.const 144855) "a") (data (i32.const 144858) "a") (data (i32.const 144861) "a") (data (i32.const 144864) "a") (data (i32.const 144867) "a") (data (i32.const 144870) "a") (data (i32.const 144873) "a") (data (i32.const 144876) "a") (data (i32.const 144879) "a") (data (i32.const 144882) "a") (data (i32.const 144885) "a") (data (i32.const 144888) "a") (data (i32.const 144891) "a") (data (i32.const 144894) "a") (data (i32.const 144897) "a") (data (i32.const 144900) "a") (data (i32.const 144903) "a") (data (i32.const 144906) "a") (data (i32.const 144909) "a") (data (i32.const 144912) "a") (data (i32.const 144915) "a") (data (i32.const 144918) "a") (data (i32.const 144921) "a") (data (i32.const 144924) "a") (data (i32.const 144927) "a") (data (i32.const 144930) "a") (data (i32.const 144933) "a") (data (i32.const 144936) "a") (data (i32.const 144939) "a") (data (i32.const 144942) "a") (data (i32.const 144945) "a") (data (i32.const 144948) "a") (data (i32.const 144951) "a") (data (i32.const 144954) "a") (data (i32.const 144957) "a") (data (i32.const 144960) "a") (data (i32.const 144963) "a") (data (i32.const 144966) "a") (data (i32.const 144969) "a") (data (i32.const 144972) "a") (data (i32.const 144975) "a") (data (i32.const 144978) "a") (data (i32.const 144981) "a") (data (i32.const 144984) "a") (data (i32.const 144987) "a") (data (i32.const 144990) "a") (data (i32.const 144993) "a") (data (i32.const 144996) "a") (data (i32.const 144999) "a") (data (i32.const 145002) "a") (data (i32.const 145005) "a") (data (i32.const 145008) "a") (data (i32.const 145011) "a") (data (i32.const 145014) "a") (data (i32.const 145017) "a") (data (i32.const 145020) "a") (data (i32.const 145023) "a") (data (i32.const 145026) "a") (data (i32.const 145029) "a") (data (i32.const 145032) "a") (data (i32.const 145035) "a") (data (i32.const 145038) "a") (data (i32.const 145041) "a") (data (i32.const 145044) "a") (data (i32.const 145047) "a") (data (i32.const 145050) "a") (data (i32.const 145053) "a") (data (i32.const 145056) "a") (data (i32.const 145059) "a") (data (i32.const 145062) "a") (data (i32.const 145065) "a") (data (i32.const 145068) "a") (data (i32.const 145071) "a") (data (i32.const 145074) "a") (data (i32.const 145077) "a") (data (i32.const 145080) "a") (data (i32.const 145083) "a") (data (i32.const 145086) "a") (data (i32.const 145089) "a") (data (i32.const 145092) "a") (data (i32.const 145095) "a") (data (i32.const 145098) "a") (data (i32.const 145101) "a") (data (i32.const 145104) "a") (data (i32.const 145107) "a") (data (i32.const 145110) "a") (data (i32.const 145113) "a") (data (i32.const 145116) "a") (data (i32.const 145119) "a") (data (i32.const 145122) "a") (data (i32.const 145125) "a") (data (i32.const 145128) "a") (data (i32.const 145131) "a") (data (i32.const 145134) "a") (data (i32.const 145137) "a") (data (i32.const 145140) "a") (data (i32.const 145143) "a") (data (i32.const 145146) "a") (data (i32.const 145149) "a") (data (i32.const 145152) "a") (data (i32.const 145155) "a") (data (i32.const 145158) "a") (data (i32.const 145161) "a") (data (i32.const 145164) "a") (data (i32.const 145167) "a") (data (i32.const 145170) "a") (data (i32.const 145173) "a") (data (i32.const 145176) "a") (data (i32.const 145179) "a") (data (i32.const 145182) "a") (data (i32.const 145185) "a") (data (i32.const 145188) "a") (data (i32.const 145191) "a") (data (i32.const 145194) "a") (data (i32.const 145197) "a") (data (i32.const 145200) "a") (data (i32.const 145203) "a") (data (i32.const 145206) "a") (data (i32.const 145209) "a") (data (i32.const 145212) "a") (data (i32.const 145215) "a") (data (i32.const 145218) "a") (data (i32.const 145221) "a") (data (i32.const 145224) "a") (data (i32.const 145227) "a") (data (i32.const 145230) "a") (data (i32.const 145233) "a") (data (i32.const 145236) "a") (data (i32.const 145239) "a") (data (i32.const 145242) "a") (data (i32.const 145245) "a") (data (i32.const 145248) "a") (data (i32.const 145251) "a") (data (i32.const 145254) "a") (data (i32.const 145257) "a") (data (i32.const 145260) "a") (data (i32.const 145263) "a") (data (i32.const 145266) "a") (data (i32.const 145269) "a") (data (i32.const 145272) "a") (data (i32.const 145275) "a") (data (i32.const 145278) "a") (data (i32.const 145281) "a") (data (i32.const 145284) "a") (data (i32.const 145287) "a") (data (i32.const 145290) "a") (data (i32.const 145293) "a") (data (i32.const 145296) "a") (data (i32.const 145299) "a") (data (i32.const 145302) "a") (data (i32.const 145305) "a") (data (i32.const 145308) "a") (data (i32.const 145311) "a") (data (i32.const 145314) "a") (data (i32.const 145317) "a") (data (i32.const 145320) "a") (data (i32.const 145323) "a") (data (i32.const 145326) "a") (data (i32.const 145329) "a") (data (i32.const 145332) "a") (data (i32.const 145335) "a") (data (i32.const 145338) "a") (data (i32.const 145341) "a") (data (i32.const 145344) "a") (data (i32.const 145347) "a") (data (i32.const 145350) "a") (data (i32.const 145353) "a") (data (i32.const 145356) "a") (data (i32.const 145359) "a") (data (i32.const 145362) "a") (data (i32.const 145365) "a") (data (i32.const 145368) "a") (data (i32.const 145371) "a") (data (i32.const 145374) "a") (data (i32.const 145377) "a") (data (i32.const 145380) "a") (data (i32.const 145383) "a") (data (i32.const 145386) "a") (data (i32.const 145389) "a") (data (i32.const 145392) "a") (data (i32.const 145395) "a") (data (i32.const 145398) "a") (data (i32.const 145401) "a") (data (i32.const 145404) "a") (data (i32.const 145407) "a") (data (i32.const 145410) "a") (data (i32.const 145413) "a") (data (i32.const 145416) "a") (data (i32.const 145419) "a") (data (i32.const 145422) "a") (data (i32.const 145425) "a") (data (i32.const 145428) "a") (data (i32.const 145431) "a") (data (i32.const 145434) "a") (data (i32.const 145437) "a") (data (i32.const 145440) "a") (data (i32.const 145443) "a") (data (i32.const 145446) "a") (data (i32.const 145449) "a") (data (i32.const 145452) "a") (data (i32.const 145455) "a") (data (i32.const 145458) "a") (data (i32.const 145461) "a") (data (i32.const 145464) "a") (data (i32.const 145467) "a") (data (i32.const 145470) "a") (data (i32.const 145473) "a") (data (i32.const 145476) "a") (data (i32.const 145479) "a") (data (i32.const 145482) "a") (data (i32.const 145485) "a") (data (i32.const 145488) "a") (data (i32.const 145491) "a") (data (i32.const 145494) "a") (data (i32.const 145497) "a") (data (i32.const 145500) "a") (data (i32.const 145503) "a") (data (i32.const 145506) "a") (data (i32.const 145509) "a") (data (i32.const 145512) "a") (data (i32.const 145515) "a") (data (i32.const 145518) "a") (data (i32.const 145521) "a") (data (i32.const 145524) "a") (data (i32.const 145527) "a") (data (i32.const 145530) "a") (data (i32.const 145533) "a") (data (i32.const 145536) "a") (data (i32.const 145539) "a") (data (i32.const 145542) "a") (data (i32.const 145545) "a") (data (i32.const 145548) "a") (data (i32.const 145551) "a") (data (i32.const 145554) "a") (data (i32.const 145557) "a") (data (i32.const 145560) "a") (data (i32.const 145563) "a") (data (i32.const 145566) "a") (data (i32.const 145569) "a") (data (i32.const 145572) "a") (data (i32.const 145575) "a") (data (i32.const 145578) "a") (data (i32.const 145581) "a") (data (i32.const 145584) "a") (data (i32.const 145587) "a") (data (i32.const 145590) "a") (data (i32.const 145593) "a") (data (i32.const 145596) "a") (data (i32.const 145599) "a") (data (i32.const 145602) "a") (data (i32.const 145605) "a") (data (i32.const 145608) "a") (data (i32.const 145611) "a") (data (i32.const 145614) "a") (data (i32.const 145617) "a") (data (i32.const 145620) "a") (data (i32.const 145623) "a") (data (i32.const 145626) "a") (data (i32.const 145629) "a") (data (i32.const 145632) "a") (data (i32.const 145635) "a") (data (i32.const 145638) "a") (data (i32.const 145641) "a") (data (i32.const 145644) "a") (data (i32.const 145647) "a") (data (i32.const 145650) "a") (data (i32.const 145653) "a") (data (i32.const 145656) "a") (data (i32.const 145659) "a") (data (i32.const 145662) "a") (data (i32.const 145665) "a") (data (i32.const 145668) "a") (data (i32.const 145671) "a") (data (i32.const 145674) "a") (data (i32.const 145677) "a") (data (i32.const 145680) "a") (data (i32.const 145683) "a") (data (i32.const 145686) "a") (data (i32.const 145689) "a") (data (i32.const 145692) "a") (data (i32.const 145695) "a") (data (i32.const 145698) "a") (data (i32.const 145701) "a") (data (i32.const 145704) "a") (data (i32.const 145707) "a") (data (i32.const 145710) "a") (data (i32.const 145713) "a") (data (i32.const 145716) "a") (data (i32.const 145719) "a") (data (i32.const 145722) "a") (data (i32.const 145725) "a") (data (i32.const 145728) "a") (data (i32.const 145731) "a") (data (i32.const 145734) "a") (data (i32.const 145737) "a") (data (i32.const 145740) "a") (data (i32.const 145743) "a") (data (i32.const 145746) "a") (data (i32.const 145749) "a") (data (i32.const 145752) "a") (data (i32.const 145755) "a") (data (i32.const 145758) "a") (data (i32.const 145761) "a") (data (i32.const 145764) "a") (data (i32.const 145767) "a") (data (i32.const 145770) "a") (data (i32.const 145773) "a") (data (i32.const 145776) "a") (data (i32.const 145779) "a") (data (i32.const 145782) "a") (data (i32.const 145785) "a") (data (i32.const 145788) "a") (data (i32.const 145791) "a") (data (i32.const 145794) "a") (data (i32.const 145797) "a") (data (i32.const 145800) "a") (data (i32.const 145803) "a") (data (i32.const 145806) "a") (data (i32.const 145809) "a") (data (i32.const 145812) "a") (data (i32.const 145815) "a") (data (i32.const 145818) "a") (data (i32.const 145821) "a") (data (i32.const 145824) "a") (data (i32.const 145827) "a") (data (i32.const 145830) "a") (data (i32.const 145833) "a") (data (i32.const 145836) "a") (data (i32.const 145839) "a") (data (i32.const 145842) "a") (data (i32.const 145845) "a") (data (i32.const 145848) "a") (data (i32.const 145851) "a") (data (i32.const 145854) "a") (data (i32.const 145857) "a") (data (i32.const 145860) "a") (data (i32.const 145863) "a") (data (i32.const 145866) "a") (data (i32.const 145869) "a") (data (i32.const 145872) "a") (data (i32.const 145875) "a") (data (i32.const 145878) "a") (data (i32.const 145881) "a") (data (i32.const 145884) "a") (data (i32.const 145887) "a") (data (i32.const 145890) "a") (data (i32.const 145893) "a") (data (i32.const 145896) "a") (data (i32.const 145899) "a") (data (i32.const 145902) "a") (data (i32.const 145905) "a") (data (i32.const 145908) "a") (data (i32.const 145911) "a") (data (i32.const 145914) "a") (data (i32.const 145917) "a") (data (i32.const 145920) "a") (data (i32.const 145923) "a") (data (i32.const 145926) "a") (data (i32.const 145929) "a") (data (i32.const 145932) "a") (data (i32.const 145935) "a") (data (i32.const 145938) "a") (data (i32.const 145941) "a") (data (i32.const 145944) "a") (data (i32.const 145947) "a") (data (i32.const 145950) "a") (data (i32.const 145953) "a") (data (i32.const 145956) "a") (data (i32.const 145959) "a") (data (i32.const 145962) "a") (data (i32.const 145965) "a") (data (i32.const 145968) "a") (data (i32.const 145971) "a") (data (i32.const 145974) "a") (data (i32.const 145977) "a") (data (i32.const 145980) "a") (data (i32.const 145983) "a") (data (i32.const 145986) "a") (data (i32.const 145989) "a") (data (i32.const 145992) "a") (data (i32.const 145995) "a") (data (i32.const 145998) "a") (data (i32.const 146001) "a") (data (i32.const 146004) "a") (data (i32.const 146007) "a") (data (i32.const 146010) "a") (data (i32.const 146013) "a") (data (i32.const 146016) "a") (data (i32.const 146019) "a") (data (i32.const 146022) "a") (data (i32.const 146025) "a") (data (i32.const 146028) "a") (data (i32.const 146031) "a") (data (i32.const 146034) "a") (data (i32.const 146037) "a") (data (i32.const 146040) "a") (data (i32.const 146043) "a") (data (i32.const 146046) "a") (data (i32.const 146049) "a") (data (i32.const 146052) "a") (data (i32.const 146055) "a") (data (i32.const 146058) "a") (data (i32.const 146061) "a") (data (i32.const 146064) "a") (data (i32.const 146067) "a") (data (i32.const 146070) "a") (data (i32.const 146073) "a") (data (i32.const 146076) "a") (data (i32.const 146079) "a") (data (i32.const 146082) "a") (data (i32.const 146085) "a") (data (i32.const 146088) "a") (data (i32.const 146091) "a") (data (i32.const 146094) "a") (data (i32.const 146097) "a") (data (i32.const 146100) "a") (data (i32.const 146103) "a") (data (i32.const 146106) "a") (data (i32.const 146109) "a") (data (i32.const 146112) "a") (data (i32.const 146115) "a") (data (i32.const 146118) "a") (data (i32.const 146121) "a") (data (i32.const 146124) "a") (data (i32.const 146127) "a") (data (i32.const 146130) "a") (data (i32.const 146133) "a") (data (i32.const 146136) "a") (data (i32.const 146139) "a") (data (i32.const 146142) "a") (data (i32.const 146145) "a") (data (i32.const 146148) "a") (data (i32.const 146151) "a") (data (i32.const 146154) "a") (data (i32.const 146157) "a") (data (i32.const 146160) "a") (data (i32.const 146163) "a") (data (i32.const 146166) "a") (data (i32.const 146169) "a") (data (i32.const 146172) "a") (data (i32.const 146175) "a") (data (i32.const 146178) "a") (data (i32.const 146181) "a") (data (i32.const 146184) "a") (data (i32.const 146187) "a") (data (i32.const 146190) "a") (data (i32.const 146193) "a") (data (i32.const 146196) "a") (data (i32.const 146199) "a") (data (i32.const 146202) "a") (data (i32.const 146205) "a") (data (i32.const 146208) "a") (data (i32.const 146211) "a") (data (i32.const 146214) "a") (data (i32.const 146217) "a") (data (i32.const 146220) "a") (data (i32.const 146223) "a") (data (i32.const 146226) "a") (data (i32.const 146229) "a") (data (i32.const 146232) "a") (data (i32.const 146235) "a") (data (i32.const 146238) "a") (data (i32.const 146241) "a") (data (i32.const 146244) "a") (data (i32.const 146247) "a") (data (i32.const 146250) "a") (data (i32.const 146253) "a") (data (i32.const 146256) "a") (data (i32.const 146259) "a") (data (i32.const 146262) "a") (data (i32.const 146265) "a") (data (i32.const 146268) "a") (data (i32.const 146271) "a") (data (i32.const 146274) "a") (data (i32.const 146277) "a") (data (i32.const 146280) "a") (data (i32.const 146283) "a") (data (i32.const 146286) "a") (data (i32.const 146289) "a") (data (i32.const 146292) "a") (data (i32.const 146295) "a") (data (i32.const 146298) "a") (data (i32.const 146301) "a") (data (i32.const 146304) "a") (data (i32.const 146307) "a") (data (i32.const 146310) "a") (data (i32.const 146313) "a") (data (i32.const 146316) "a") (data (i32.const 146319) "a") (data (i32.const 146322) "a") (data (i32.const 146325) "a") (data (i32.const 146328) "a") (data (i32.const 146331) "a") (data (i32.const 146334) "a") (data (i32.const 146337) "a") (data (i32.const 146340) "a") (data (i32.const 146343) "a") (data (i32.const 146346) "a") (data (i32.const 146349) "a") (data (i32.const 146352) "a") (data (i32.const 146355) "a") (data (i32.const 146358) "a") (data (i32.const 146361) "a") (data (i32.const 146364) "a") (data (i32.const 146367) "a") (data (i32.const 146370) "a") (data (i32.const 146373) "a") (data (i32.const 146376) "a") (data (i32.const 146379) "a") (data (i32.const 146382) "a") (data (i32.const 146385) "a") (data (i32.const 146388) "a") (data (i32.const 146391) "a") (data (i32.const 146394) "a") (data (i32.const 146397) "a") (data (i32.const 146400) "a") (data (i32.const 146403) "a") (data (i32.const 146406) "a") (data (i32.const 146409) "a") (data (i32.const 146412) "a") (data (i32.const 146415) "a") (data (i32.const 146418) "a") (data (i32.const 146421) "a") (data (i32.const 146424) "a") (data (i32.const 146427) "a") (data (i32.const 146430) "a") (data (i32.const 146433) "a") (data (i32.const 146436) "a") (data (i32.const 146439) "a") (data (i32.const 146442) "a") (data (i32.const 146445) "a") (data (i32.const 146448) "a") (data (i32.const 146451) "a") (data (i32.const 146454) "a") (data (i32.const 146457) "a") (data (i32.const 146460) "a") (data (i32.const 146463) "a") (data (i32.const 146466) "a") (data (i32.const 146469) "a") (data (i32.const 146472) "a") (data (i32.const 146475) "a") (data (i32.const 146478) "a") (data (i32.const 146481) "a") (data (i32.const 146484) "a") (data (i32.const 146487) "a") (data (i32.const 146490) "a") (data (i32.const 146493) "a") (data (i32.const 146496) "a") (data (i32.const 146499) "a") (data (i32.const 146502) "a") (data (i32.const 146505) "a") (data (i32.const 146508) "a") (data (i32.const 146511) "a") (data (i32.const 146514) "a") (data (i32.const 146517) "a") (data (i32.const 146520) "a") (data (i32.const 146523) "a") (data (i32.const 146526) "a") (data (i32.const 146529) "a") (data (i32.const 146532) "a") (data (i32.const 146535) "a") (data (i32.const 146538) "a") (data (i32.const 146541) "a") (data (i32.const 146544) "a") (data (i32.const 146547) "a") (data (i32.const 146550) "a") (data (i32.const 146553) "a") (data (i32.const 146556) "a") (data (i32.const 146559) "a") (data (i32.const 146562) "a") (data (i32.const 146565) "a") (data (i32.const 146568) "a") (data (i32.const 146571) "a") (data (i32.const 146574) "a") (data (i32.const 146577) "a") (data (i32.const 146580) "a") (data (i32.const 146583) "a") (data (i32.const 146586) "a") (data (i32.const 146589) "a") (data (i32.const 146592) "a") (data (i32.const 146595) "a") (data (i32.const 146598) "a") (data (i32.const 146601) "a") (data (i32.const 146604) "a") (data (i32.const 146607) "a") (data (i32.const 146610) "a") (data (i32.const 146613) "a") (data (i32.const 146616) "a") (data (i32.const 146619) "a") (data (i32.const 146622) "a") (data (i32.const 146625) "a") (data (i32.const 146628) "a") (data (i32.const 146631) "a") (data (i32.const 146634) "a") (data (i32.const 146637) "a") (data (i32.const 146640) "a") (data (i32.const 146643) "a") (data (i32.const 146646) "a") (data (i32.const 146649) "a") (data (i32.const 146652) "a") (data (i32.const 146655) "a") (data (i32.const 146658) "a") (data (i32.const 146661) "a") (data (i32.const 146664) "a") (data (i32.const 146667) "a") (data (i32.const 146670) "a") (data (i32.const 146673) "a") (data (i32.const 146676) "a") (data (i32.const 146679) "a") (data (i32.const 146682) "a") (data (i32.const 146685) "a") (data (i32.const 146688) "a") (data (i32.const 146691) "a") (data (i32.const 146694) "a") (data (i32.const 146697) "a") (data (i32.const 146700) "a") (data (i32.const 146703) "a") (data (i32.const 146706) "a") (data (i32.const 146709) "a") (data (i32.const 146712) "a") (data (i32.const 146715) "a") (data (i32.const 146718) "a") (data (i32.const 146721) "a") (data (i32.const 146724) "a") (data (i32.const 146727) "a") (data (i32.const 146730) "a") (data (i32.const 146733) "a") (data (i32.const 146736) "a") (data (i32.const 146739) "a") (data (i32.const 146742) "a") (data (i32.const 146745) "a") (data (i32.const 146748) "a") (data (i32.const 146751) "a") (data (i32.const 146754) "a") (data (i32.const 146757) "a") (data (i32.const 146760) "a") (data (i32.const 146763) "a") (data (i32.const 146766) "a") (data (i32.const 146769) "a") (data (i32.const 146772) "a") (data (i32.const 146775) "a") (data (i32.const 146778) "a") (data (i32.const 146781) "a") (data (i32.const 146784) "a") (data (i32.const 146787) "a") (data (i32.const 146790) "a") (data (i32.const 146793) "a") (data (i32.const 146796) "a") (data (i32.const 146799) "a") (data (i32.const 146802) "a") (data (i32.const 146805) "a") (data (i32.const 146808) "a") (data (i32.const 146811) "a") (data (i32.const 146814) "a") (data (i32.const 146817) "a") (data (i32.const 146820) "a") (data (i32.const 146823) "a") (data (i32.const 146826) "a") (data (i32.const 146829) "a") (data (i32.const 146832) "a") (data (i32.const 146835) "a") (data (i32.const 146838) "a") (data (i32.const 146841) "a") (data (i32.const 146844) "a") (data (i32.const 146847) "a") (data (i32.const 146850) "a") (data (i32.const 146853) "a") (data (i32.const 146856) "a") (data (i32.const 146859) "a") (data (i32.const 146862) "a") (data (i32.const 146865) "a") (data (i32.const 146868) "a") (data (i32.const 146871) "a") (data (i32.const 146874) "a") (data (i32.const 146877) "a") (data (i32.const 146880) "a") (data (i32.const 146883) "a") (data (i32.const 146886) "a") (data (i32.const 146889) "a") (data (i32.const 146892) "a") (data (i32.const 146895) "a") (data (i32.const 146898) "a") (data (i32.const 146901) "a") (data (i32.const 146904) "a") (data (i32.const 146907) "a") (data (i32.const 146910) "a") (data (i32.const 146913) "a") (data (i32.const 146916) "a") (data (i32.const 146919) "a") (data (i32.const 146922) "a") (data (i32.const 146925) "a") (data (i32.const 146928) "a") (data (i32.const 146931) "a") (data (i32.const 146934) "a") (data (i32.const 146937) "a") (data (i32.const 146940) "a") (data (i32.const 146943) "a") (data (i32.const 146946) "a") (data (i32.const 146949) "a") (data (i32.const 146952) "a") (data (i32.const 146955) "a") (data (i32.const 146958) "a") (data (i32.const 146961) "a") (data (i32.const 146964) "a") (data (i32.const 146967) "a") (data (i32.const 146970) "a") (data (i32.const 146973) "a") (data (i32.const 146976) "a") (data (i32.const 146979) "a") (data (i32.const 146982) "a") (data (i32.const 146985) "a") (data (i32.const 146988) "a") (data (i32.const 146991) "a") (data (i32.const 146994) "a") (data (i32.const 146997) "a") (data (i32.const 147000) "a") (data (i32.const 147003) "a") (data (i32.const 147006) "a") (data (i32.const 147009) "a") (data (i32.const 147012) "a") (data (i32.const 147015) "a") (data (i32.const 147018) "a") (data (i32.const 147021) "a") (data (i32.const 147024) "a") (data (i32.const 147027) "a") (data (i32.const 147030) "a") (data (i32.const 147033) "a") (data (i32.const 147036) "a") (data (i32.const 147039) "a") (data (i32.const 147042) "a") (data (i32.const 147045) "a") (data (i32.const 147048) "a") (data (i32.const 147051) "a") (data (i32.const 147054) "a") (data (i32.const 147057) "a") (data (i32.const 147060) "a") (data (i32.const 147063) "a") (data (i32.const 147066) "a") (data (i32.const 147069) "a") (data (i32.const 147072) "a") (data (i32.const 147075) "a") (data (i32.const 147078) "a") (data (i32.const 147081) "a") (data (i32.const 147084) "a") (data (i32.const 147087) "a") (data (i32.const 147090) "a") (data (i32.const 147093) "a") (data (i32.const 147096) "a") (data (i32.const 147099) "a") (data (i32.const 147102) "a") (data (i32.const 147105) "a") (data (i32.const 147108) "a") (data (i32.const 147111) "a") (data (i32.const 147114) "a") (data (i32.const 147117) "a") (data (i32.const 147120) "a") (data (i32.const 147123) "a") (data (i32.const 147126) "a") (data (i32.const 147129) "a") (data (i32.const 147132) "a") (data (i32.const 147135) "a") (data (i32.const 147138) "a") (data (i32.const 147141) "a") (data (i32.const 147144) "a") (data (i32.const 147147) "a") (data (i32.const 147150) "a") (data (i32.const 147153) "a") (data (i32.const 147156) "a") (data (i32.const 147159) "a") (data (i32.const 147162) "a") (data (i32.const 147165) "a") (data (i32.const 147168) "a") (data (i32.const 147171) "a") (data (i32.const 147174) "a") (data (i32.const 147177) "a") (data (i32.const 147180) "a") (data (i32.const 147183) "a") (data (i32.const 147186) "a") (data (i32.const 147189) "a") (data (i32.const 147192) "a") (data (i32.const 147195) "a") (data (i32.const 147198) "a") (data (i32.const 147201) "a") (data (i32.const 147204) "a") (data (i32.const 147207) "a") (data (i32.const 147210) "a") (data (i32.const 147213) "a") (data (i32.const 147216) "a") (data (i32.const 147219) "a") (data (i32.const 147222) "a") (data (i32.const 147225) "a") (data (i32.const 147228) "a") (data (i32.const 147231) "a") (data (i32.const 147234) "a") (data (i32.const 147237) "a") (data (i32.const 147240) "a") (data (i32.const 147243) "a") (data (i32.const 147246) "a") (data (i32.const 147249) "a") (data (i32.const 147252) "a") (data (i32.const 147255) "a") (data (i32.const 147258) "a") (data (i32.const 147261) "a") (data (i32.const 147264) "a") (data (i32.const 147267) "a") (data (i32.const 147270) "a") (data (i32.const 147273) "a") (data (i32.const 147276) "a") (data (i32.const 147279) "a") (data (i32.const 147282) "a") (data (i32.const 147285) "a") (data (i32.const 147288) "a") (data (i32.const 147291) "a") (data (i32.const 147294) "a") (data (i32.const 147297) "a") (data (i32.const 147300) "a") (data (i32.const 147303) "a") (data (i32.const 147306) "a") (data (i32.const 147309) "a") (data (i32.const 147312) "a") (data (i32.const 147315) "a") (data (i32.const 147318) "a") (data (i32.const 147321) "a") (data (i32.const 147324) "a") (data (i32.const 147327) "a") (data (i32.const 147330) "a") (data (i32.const 147333) "a") (data (i32.const 147336) "a") (data (i32.const 147339) "a") (data (i32.const 147342) "a") (data (i32.const 147345) "a") (data (i32.const 147348) "a") (data (i32.const 147351) "a") (data (i32.const 147354) "a") (data (i32.const 147357) "a") (data (i32.const 147360) "a") (data (i32.const 147363) "a") (data (i32.const 147366) "a") (data (i32.const 147369) "a") (data (i32.const 147372) "a") (data (i32.const 147375) "a") (data (i32.const 147378) "a") (data (i32.const 147381) "a") (data (i32.const 147384) "a") (data (i32.const 147387) "a") (data (i32.const 147390) "a") (data (i32.const 147393) "a") (data (i32.const 147396) "a") (data (i32.const 147399) "a") (data (i32.const 147402) "a") (data (i32.const 147405) "a") (data (i32.const 147408) "a") (data (i32.const 147411) "a") (data (i32.const 147414) "a") (data (i32.const 147417) "a") (data (i32.const 147420) "a") (data (i32.const 147423) "a") (data (i32.const 147426) "a") (data (i32.const 147429) "a") (data (i32.const 147432) "a") (data (i32.const 147435) "a") (data (i32.const 147438) "a") (data (i32.const 147441) "a") (data (i32.const 147444) "a") (data (i32.const 147447) "a") (data (i32.const 147450) "a") (data (i32.const 147453) "a") (data (i32.const 147456) "a") (data (i32.const 147459) "a") (data (i32.const 147462) "a") (data (i32.const 147465) "a") (data (i32.const 147468) "a") (data (i32.const 147471) "a") (data (i32.const 147474) "a") (data (i32.const 147477) "a") (data (i32.const 147480) "a") (data (i32.const 147483) "a") (data (i32.const 147486) "a") (data (i32.const 147489) "a") (data (i32.const 147492) "a") (data (i32.const 147495) "a") (data (i32.const 147498) "a") (data (i32.const 147501) "a") (data (i32.const 147504) "a") (data (i32.const 147507) "a") (data (i32.const 147510) "a") (data (i32.const 147513) "a") (data (i32.const 147516) "a") (data (i32.const 147519) "a") (data (i32.const 147522) "a") (data (i32.const 147525) "a") (data (i32.const 147528) "a") (data (i32.const 147531) "a") (data (i32.const 147534) "a") (data (i32.const 147537) "a") (data (i32.const 147540) "a") (data (i32.const 147543) "a") (data (i32.const 147546) "a") (data (i32.const 147549) "a") (data (i32.const 147552) "a") (data (i32.const 147555) "a") (data (i32.const 147558) "a") (data (i32.const 147561) "a") (data (i32.const 147564) "a") (data (i32.const 147567) "a") (data (i32.const 147570) "a") (data (i32.const 147573) "a") (data (i32.const 147576) "a") (data (i32.const 147579) "a") (data (i32.const 147582) "a") (data (i32.const 147585) "a") (data (i32.const 147588) "a") (data (i32.const 147591) "a") (data (i32.const 147594) "a") (data (i32.const 147597) "a") (data (i32.const 147600) "a") (data (i32.const 147603) "a") (data (i32.const 147606) "a") (data (i32.const 147609) "a") (data (i32.const 147612) "a") (data (i32.const 147615) "a") (data (i32.const 147618) "a") (data (i32.const 147621) "a") (data (i32.const 147624) "a") (data (i32.const 147627) "a") (data (i32.const 147630) "a") (data (i32.const 147633) "a") (data (i32.const 147636) "a") (data (i32.const 147639) "a") (data (i32.const 147642) "a") (data (i32.const 147645) "a") (data (i32.const 147648) "a") (data (i32.const 147651) "a") (data (i32.const 147654) "a") (data (i32.const 147657) "a") (data (i32.const 147660) "a") (data (i32.const 147663) "a") (data (i32.const 147666) "a") (data (i32.const 147669) "a") (data (i32.const 147672) "a") (data (i32.const 147675) "a") (data (i32.const 147678) "a") (data (i32.const 147681) "a") (data (i32.const 147684) "a") (data (i32.const 147687) "a") (data (i32.const 147690) "a") (data (i32.const 147693) "a") (data (i32.const 147696) "a") (data (i32.const 147699) "a") (data (i32.const 147702) "a") (data (i32.const 147705) "a") (data (i32.const 147708) "a") (data (i32.const 147711) "a") (data (i32.const 147714) "a") (data (i32.const 147717) "a") (data (i32.const 147720) "a") (data (i32.const 147723) "a") (data (i32.const 147726) "a") (data (i32.const 147729) "a") (data (i32.const 147732) "a") (data (i32.const 147735) "a") (data (i32.const 147738) "a") (data (i32.const 147741) "a") (data (i32.const 147744) "a") (data (i32.const 147747) "a") (data (i32.const 147750) "a") (data (i32.const 147753) "a") (data (i32.const 147756) "a") (data (i32.const 147759) "a") (data (i32.const 147762) "a") (data (i32.const 147765) "a") (data (i32.const 147768) "a") (data (i32.const 147771) "a") (data (i32.const 147774) "a") (data (i32.const 147777) "a") (data (i32.const 147780) "a") (data (i32.const 147783) "a") (data (i32.const 147786) "a") (data (i32.const 147789) "a") (data (i32.const 147792) "a") (data (i32.const 147795) "a") (data (i32.const 147798) "a") (data (i32.const 147801) "a") (data (i32.const 147804) "a") (data (i32.const 147807) "a") (data (i32.const 147810) "a") (data (i32.const 147813) "a") (data (i32.const 147816) "a") (data (i32.const 147819) "a") (data (i32.const 147822) "a") (data (i32.const 147825) "a") (data (i32.const 147828) "a") (data (i32.const 147831) "a") (data (i32.const 147834) "a") (data (i32.const 147837) "a") (data (i32.const 147840) "a") (data (i32.const 147843) "a") (data (i32.const 147846) "a") (data (i32.const 147849) "a") (data (i32.const 147852) "a") (data (i32.const 147855) "a") (data (i32.const 147858) "a") (data (i32.const 147861) "a") (data (i32.const 147864) "a") (data (i32.const 147867) "a") (data (i32.const 147870) "a") (data (i32.const 147873) "a") (data (i32.const 147876) "a") (data (i32.const 147879) "a") (data (i32.const 147882) "a") (data (i32.const 147885) "a") (data (i32.const 147888) "a") (data (i32.const 147891) "a") (data (i32.const 147894) "a") (data (i32.const 147897) "a") (data (i32.const 147900) "a") (data (i32.const 147903) "a") (data (i32.const 147906) "a") (data (i32.const 147909) "a") (data (i32.const 147912) "a") (data (i32.const 147915) "a") (data (i32.const 147918) "a") (data (i32.const 147921) "a") (data (i32.const 147924) "a") (data (i32.const 147927) "a") (data (i32.const 147930) "a") (data (i32.const 147933) "a") (data (i32.const 147936) "a") (data (i32.const 147939) "a") (data (i32.const 147942) "a") (data (i32.const 147945) "a") (data (i32.const 147948) "a") (data (i32.const 147951) "a") (data (i32.const 147954) "a") (data (i32.const 147957) "a") (data (i32.const 147960) "a") (data (i32.const 147963) "a") (data (i32.const 147966) "a") (data (i32.const 147969) "a") (data (i32.const 147972) "a") (data (i32.const 147975) "a") (data (i32.const 147978) "a") (data (i32.const 147981) "a") (data (i32.const 147984) "a") (data (i32.const 147987) "a") (data (i32.const 147990) "a") (data (i32.const 147993) "a") (data (i32.const 147996) "a") (data (i32.const 147999) "a") (data (i32.const 148002) "a") (data (i32.const 148005) "a") (data (i32.const 148008) "a") (data (i32.const 148011) "a") (data (i32.const 148014) "a") (data (i32.const 148017) "a") (data (i32.const 148020) "a") (data (i32.const 148023) "a") (data (i32.const 148026) "a") (data (i32.const 148029) "a") (data (i32.const 148032) "a") (data (i32.const 148035) "a") (data (i32.const 148038) "a") (data (i32.const 148041) "a") (data (i32.const 148044) "a") (data (i32.const 148047) "a") (data (i32.const 148050) "a") (data (i32.const 148053) "a") (data (i32.const 148056) "a") (data (i32.const 148059) "a") (data (i32.const 148062) "a") (data (i32.const 148065) "a") (data (i32.const 148068) "a") (data (i32.const 148071) "a") (data (i32.const 148074) "a") (data (i32.const 148077) "a") (data (i32.const 148080) "a") (data (i32.const 148083) "a") (data (i32.const 148086) "a") (data (i32.const 148089) "a") (data (i32.const 148092) "a") (data (i32.const 148095) "a") (data (i32.const 148098) "a") (data (i32.const 148101) "a") (data (i32.const 148104) "a") (data (i32.const 148107) "a") (data (i32.const 148110) "a") (data (i32.const 148113) "a") (data (i32.const 148116) "a") (data (i32.const 148119) "a") (data (i32.const 148122) "a") (data (i32.const 148125) "a") (data (i32.const 148128) "a") (data (i32.const 148131) "a") (data (i32.const 148134) "a") (data (i32.const 148137) "a") (data (i32.const 148140) "a") (data (i32.const 148143) "a") (data (i32.const 148146) "a") (data (i32.const 148149) "a") (data (i32.const 148152) "a") (data (i32.const 148155) "a") (data (i32.const 148158) "a") (data (i32.const 148161) "a") (data (i32.const 148164) "a") (data (i32.const 148167) "a") (data (i32.const 148170) "a") (data (i32.const 148173) "a") (data (i32.const 148176) "a") (data (i32.const 148179) "a") (data (i32.const 148182) "a") (data (i32.const 148185) "a") (data (i32.const 148188) "a") (data (i32.const 148191) "a") (data (i32.const 148194) "a") (data (i32.const 148197) "a") (data (i32.const 148200) "a") (data (i32.const 148203) "a") (data (i32.const 148206) "a") (data (i32.const 148209) "a") (data (i32.const 148212) "a") (data (i32.const 148215) "a") (data (i32.const 148218) "a") (data (i32.const 148221) "a") (data (i32.const 148224) "a") (data (i32.const 148227) "a") (data (i32.const 148230) "a") (data (i32.const 148233) "a") (data (i32.const 148236) "a") (data (i32.const 148239) "a") (data (i32.const 148242) "a") (data (i32.const 148245) "a") (data (i32.const 148248) "a") (data (i32.const 148251) "a") (data (i32.const 148254) "a") (data (i32.const 148257) "a") (data (i32.const 148260) "a") (data (i32.const 148263) "a") (data (i32.const 148266) "a") (data (i32.const 148269) "a") (data (i32.const 148272) "a") (data (i32.const 148275) "a") (data (i32.const 148278) "a") (data (i32.const 148281) "a") (data (i32.const 148284) "a") (data (i32.const 148287) "a") (data (i32.const 148290) "a") (data (i32.const 148293) "a") (data (i32.const 148296) "a") (data (i32.const 148299) "a") (data (i32.const 148302) "a") (data (i32.const 148305) "a") (data (i32.const 148308) "a") (data (i32.const 148311) "a") (data (i32.const 148314) "a") (data (i32.const 148317) "a") (data (i32.const 148320) "a") (data (i32.const 148323) "a") (data (i32.const 148326) "a") (data (i32.const 148329) "a") (data (i32.const 148332) "a") (data (i32.const 148335) "a") (data (i32.const 148338) "a") (data (i32.const 148341) "a") (data (i32.const 148344) "a") (data (i32.const 148347) "a") (data (i32.const 148350) "a") (data (i32.const 148353) "a") (data (i32.const 148356) "a") (data (i32.const 148359) "a") (data (i32.const 148362) "a") (data (i32.const 148365) "a") (data (i32.const 148368) "a") (data (i32.const 148371) "a") (data (i32.const 148374) "a") (data (i32.const 148377) "a") (data (i32.const 148380) "a") (data (i32.const 148383) "a") (data (i32.const 148386) "a") (data (i32.const 148389) "a") (data (i32.const 148392) "a") (data (i32.const 148395) "a") (data (i32.const 148398) "a") (data (i32.const 148401) "a") (data (i32.const 148404) "a") (data (i32.const 148407) "a") (data (i32.const 148410) "a") (data (i32.const 148413) "a") (data (i32.const 148416) "a") (data (i32.const 148419) "a") (data (i32.const 148422) "a") (data (i32.const 148425) "a") (data (i32.const 148428) "a") (data (i32.const 148431) "a") (data (i32.const 148434) "a") (data (i32.const 148437) "a") (data (i32.const 148440) "a") (data (i32.const 148443) "a") (data (i32.const 148446) "a") (data (i32.const 148449) "a") (data (i32.const 148452) "a") (data (i32.const 148455) "a") (data (i32.const 148458) "a") (data (i32.const 148461) "a") (data (i32.const 148464) "a") (data (i32.const 148467) "a") (data (i32.const 148470) "a") (data (i32.const 148473) "a") (data (i32.const 148476) "a") (data (i32.const 148479) "a") (data (i32.const 148482) "a") (data (i32.const 148485) "a") (data (i32.const 148488) "a") (data (i32.const 148491) "a") (data (i32.const 148494) "a") (data (i32.const 148497) "a") (data (i32.const 148500) "a") (data (i32.const 148503) "a") (data (i32.const 148506) "a") (data (i32.const 148509) "a") (data (i32.const 148512) "a") (data (i32.const 148515) "a") (data (i32.const 148518) "a") (data (i32.const 148521) "a") (data (i32.const 148524) "a") (data (i32.const 148527) "a") (data (i32.const 148530) "a") (data (i32.const 148533) "a") (data (i32.const 148536) "a") (data (i32.const 148539) "a") (data (i32.const 148542) "a") (data (i32.const 148545) "a") (data (i32.const 148548) "a") (data (i32.const 148551) "a") (data (i32.const 148554) "a") (data (i32.const 148557) "a") (data (i32.const 148560) "a") (data (i32.const 148563) "a") (data (i32.const 148566) "a") (data (i32.const 148569) "a") (data (i32.const 148572) "a") (data (i32.const 148575) "a") (data (i32.const 148578) "a") (data (i32.const 148581) "a") (data (i32.const 148584) "a") (data (i32.const 148587) "a") (data (i32.const 148590) "a") (data (i32.const 148593) "a") (data (i32.const 148596) "a") (data (i32.const 148599) "a") (data (i32.const 148602) "a") (data (i32.const 148605) "a") (data (i32.const 148608) "a") (data (i32.const 148611) "a") (data (i32.const 148614) "a") (data (i32.const 148617) "a") (data (i32.const 148620) "a") (data (i32.const 148623) "a") (data (i32.const 148626) "a") (data (i32.const 148629) "a") (data (i32.const 148632) "a") (data (i32.const 148635) "a") (data (i32.const 148638) "a") (data (i32.const 148641) "a") (data (i32.const 148644) "a") (data (i32.const 148647) "a") (data (i32.const 148650) "a") (data (i32.const 148653) "a") (data (i32.const 148656) "a") (data (i32.const 148659) "a") (data (i32.const 148662) "a") (data (i32.const 148665) "a") (data (i32.const 148668) "a") (data (i32.const 148671) "a") (data (i32.const 148674) "a") (data (i32.const 148677) "a") (data (i32.const 148680) "a") (data (i32.const 148683) "a") (data (i32.const 148686) "a") (data (i32.const 148689) "a") (data (i32.const 148692) "a") (data (i32.const 148695) "a") (data (i32.const 148698) "a") (data (i32.const 148701) "a") (data (i32.const 148704) "a") (data (i32.const 148707) "a") (data (i32.const 148710) "a") (data (i32.const 148713) "a") (data (i32.const 148716) "a") (data (i32.const 148719) "a") (data (i32.const 148722) "a") (data (i32.const 148725) "a") (data (i32.const 148728) "a") (data (i32.const 148731) "a") (data (i32.const 148734) "a") (data (i32.const 148737) "a") (data (i32.const 148740) "a") (data (i32.const 148743) "a") (data (i32.const 148746) "a") (data (i32.const 148749) "a") (data (i32.const 148752) "a") (data (i32.const 148755) "a") (data (i32.const 148758) "a") (data (i32.const 148761) "a") (data (i32.const 148764) "a") (data (i32.const 148767) "a") (data (i32.const 148770) "a") (data (i32.const 148773) "a") (data (i32.const 148776) "a") (data (i32.const 148779) "a") (data (i32.const 148782) "a") (data (i32.const 148785) "a") (data (i32.const 148788) "a") (data (i32.const 148791) "a") (data (i32.const 148794) "a") (data (i32.const 148797) "a") (data (i32.const 148800) "a") (data (i32.const 148803) "a") (data (i32.const 148806) "a") (data (i32.const 148809) "a") (data (i32.const 148812) "a") (data (i32.const 148815) "a") (data (i32.const 148818) "a") (data (i32.const 148821) "a") (data (i32.const 148824) "a") (data (i32.const 148827) "a") (data (i32.const 148830) "a") (data (i32.const 148833) "a") (data (i32.const 148836) "a") (data (i32.const 148839) "a") (data (i32.const 148842) "a") (data (i32.const 148845) "a") (data (i32.const 148848) "a") (data (i32.const 148851) "a") (data (i32.const 148854) "a") (data (i32.const 148857) "a") (data (i32.const 148860) "a") (data (i32.const 148863) "a") (data (i32.const 148866) "a") (data (i32.const 148869) "a") (data (i32.const 148872) "a") (data (i32.const 148875) "a") (data (i32.const 148878) "a") (data (i32.const 148881) "a") (data (i32.const 148884) "a") (data (i32.const 148887) "a") (data (i32.const 148890) "a") (data (i32.const 148893) "a") (data (i32.const 148896) "a") (data (i32.const 148899) "a") (data (i32.const 148902) "a") (data (i32.const 148905) "a") (data (i32.const 148908) "a") (data (i32.const 148911) "a") (data (i32.const 148914) "a") (data (i32.const 148917) "a") (data (i32.const 148920) "a") (data (i32.const 148923) "a") (data (i32.const 148926) "a") (data (i32.const 148929) "a") (data (i32.const 148932) "a") (data (i32.const 148935) "a") (data (i32.const 148938) "a") (data (i32.const 148941) "a") (data (i32.const 148944) "a") (data (i32.const 148947) "a") (data (i32.const 148950) "a") (data (i32.const 148953) "a") (data (i32.const 148956) "a") (data (i32.const 148959) "a") (data (i32.const 148962) "a") (data (i32.const 148965) "a") (data (i32.const 148968) "a") (data (i32.const 148971) "a") (data (i32.const 148974) "a") (data (i32.const 148977) "a") (data (i32.const 148980) "a") (data (i32.const 148983) "a") (data (i32.const 148986) "a") (data (i32.const 148989) "a") (data (i32.const 148992) "a") (data (i32.const 148995) "a") (data (i32.const 148998) "a") (data (i32.const 149001) "a") (data (i32.const 149004) "a") (data (i32.const 149007) "a") (data (i32.const 149010) "a") (data (i32.const 149013) "a") (data (i32.const 149016) "a") (data (i32.const 149019) "a") (data (i32.const 149022) "a") (data (i32.const 149025) "a") (data (i32.const 149028) "a") (data (i32.const 149031) "a") (data (i32.const 149034) "a") (data (i32.const 149037) "a") (data (i32.const 149040) "a") (data (i32.const 149043) "a") (data (i32.const 149046) "a") (data (i32.const 149049) "a") (data (i32.const 149052) "a") (data (i32.const 149055) "a") (data (i32.const 149058) "a") (data (i32.const 149061) "a") (data (i32.const 149064) "a") (data (i32.const 149067) "a") (data (i32.const 149070) "a") (data (i32.const 149073) "a") (data (i32.const 149076) "a") (data (i32.const 149079) "a") (data (i32.const 149082) "a") (data (i32.const 149085) "a") (data (i32.const 149088) "a") (data (i32.const 149091) "a") (data (i32.const 149094) "a") (data (i32.const 149097) "a") (data (i32.const 149100) "a") (data (i32.const 149103) "a") (data (i32.const 149106) "a") (data (i32.const 149109) "a") (data (i32.const 149112) "a") (data (i32.const 149115) "a") (data (i32.const 149118) "a") (data (i32.const 149121) "a") (data (i32.const 149124) "a") (data (i32.const 149127) "a") (data (i32.const 149130) "a") (data (i32.const 149133) "a") (data (i32.const 149136) "a") (data (i32.const 149139) "a") (data (i32.const 149142) "a") (data (i32.const 149145) "a") (data (i32.const 149148) "a") (data (i32.const 149151) "a") (data (i32.const 149154) "a") (data (i32.const 149157) "a") (data (i32.const 149160) "a") (data (i32.const 149163) "a") (data (i32.const 149166) "a") (data (i32.const 149169) "a") (data (i32.const 149172) "a") (data (i32.const 149175) "a") (data (i32.const 149178) "a") (data (i32.const 149181) "a") (data (i32.const 149184) "a") (data (i32.const 149187) "a") (data (i32.const 149190) "a") (data (i32.const 149193) "a") (data (i32.const 149196) "a") (data (i32.const 149199) "a") (data (i32.const 149202) "a") (data (i32.const 149205) "a") (data (i32.const 149208) "a") (data (i32.const 149211) "a") (data (i32.const 149214) "a") (data (i32.const 149217) "a") (data (i32.const 149220) "a") (data (i32.const 149223) "a") (data (i32.const 149226) "a") (data (i32.const 149229) "a") (data (i32.const 149232) "a") (data (i32.const 149235) "a") (data (i32.const 149238) "a") (data (i32.const 149241) "a") (data (i32.const 149244) "a") (data (i32.const 149247) "a") (data (i32.const 149250) "a") (data (i32.const 149253) "a") (data (i32.const 149256) "a") (data (i32.const 149259) "a") (data (i32.const 149262) "a") (data (i32.const 149265) "a") (data (i32.const 149268) "a") (data (i32.const 149271) "a") (data (i32.const 149274) "a") (data (i32.const 149277) "a") (data (i32.const 149280) "a") (data (i32.const 149283) "a") (data (i32.const 149286) "a") (data (i32.const 149289) "a") (data (i32.const 149292) "a") (data (i32.const 149295) "a") (data (i32.const 149298) "a") (data (i32.const 149301) "a") (data (i32.const 149304) "a") (data (i32.const 149307) "a") (data (i32.const 149310) "a") (data (i32.const 149313) "a") (data (i32.const 149316) "a") (data (i32.const 149319) "a") (data (i32.const 149322) "a") (data (i32.const 149325) "a") (data (i32.const 149328) "a") (data (i32.const 149331) "a") (data (i32.const 149334) "a") (data (i32.const 149337) "a") (data (i32.const 149340) "a") (data (i32.const 149343) "a") (data (i32.const 149346) "a") (data (i32.const 149349) "a") (data (i32.const 149352) "a") (data (i32.const 149355) "a") (data (i32.const 149358) "a") (data (i32.const 149361) "a") (data (i32.const 149364) "a") (data (i32.const 149367) "a") (data (i32.const 149370) "a") (data (i32.const 149373) "a") (data (i32.const 149376) "a") (data (i32.const 149379) "a") (data (i32.const 149382) "a") (data (i32.const 149385) "a") (data (i32.const 149388) "a") (data (i32.const 149391) "a") (data (i32.const 149394) "a") (data (i32.const 149397) "a") (data (i32.const 149400) "a") (data (i32.const 149403) "a") (data (i32.const 149406) "a") (data (i32.const 149409) "a") (data (i32.const 149412) "a") (data (i32.const 149415) "a") (data (i32.const 149418) "a") (data (i32.const 149421) "a") (data (i32.const 149424) "a") (data (i32.const 149427) "a") (data (i32.const 149430) "a") (data (i32.const 149433) "a") (data (i32.const 149436) "a") (data (i32.const 149439) "a") (data (i32.const 149442) "a") (data (i32.const 149445) "a") (data (i32.const 149448) "a") (data (i32.const 149451) "a") (data (i32.const 149454) "a") (data (i32.const 149457) "a") (data (i32.const 149460) "a") (data (i32.const 149463) "a") (data (i32.const 149466) "a") (data (i32.const 149469) "a") (data (i32.const 149472) "a") (data (i32.const 149475) "a") (data (i32.const 149478) "a") (data (i32.const 149481) "a") (data (i32.const 149484) "a") (data (i32.const 149487) "a") (data (i32.const 149490) "a") (data (i32.const 149493) "a") (data (i32.const 149496) "a") (data (i32.const 149499) "a") (data (i32.const 149502) "a") (data (i32.const 149505) "a") (data (i32.const 149508) "a") (data (i32.const 149511) "a") (data (i32.const 149514) "a") (data (i32.const 149517) "a") (data (i32.const 149520) "a") (data (i32.const 149523) "a") (data (i32.const 149526) "a") (data (i32.const 149529) "a") (data (i32.const 149532) "a") (data (i32.const 149535) "a") (data (i32.const 149538) "a") (data (i32.const 149541) "a") (data (i32.const 149544) "a") (data (i32.const 149547) "a") (data (i32.const 149550) "a") (data (i32.const 149553) "a") (data (i32.const 149556) "a") (data (i32.const 149559) "a") (data (i32.const 149562) "a") (data (i32.const 149565) "a") (data (i32.const 149568) "a") (data (i32.const 149571) "a") (data (i32.const 149574) "a") (data (i32.const 149577) "a") (data (i32.const 149580) "a") (data (i32.const 149583) "a") (data (i32.const 149586) "a") (data (i32.const 149589) "a") (data (i32.const 149592) "a") (data (i32.const 149595) "a") (data (i32.const 149598) "a") (data (i32.const 149601) "a") (data (i32.const 149604) "a") (data (i32.const 149607) "a") (data (i32.const 149610) "a") (data (i32.const 149613) "a") (data (i32.const 149616) "a") (data (i32.const 149619) "a") (data (i32.const 149622) "a") (data (i32.const 149625) "a") (data (i32.const 149628) "a") (data (i32.const 149631) "a") (data (i32.const 149634) "a") (data (i32.const 149637) "a") (data (i32.const 149640) "a") (data (i32.const 149643) "a") (data (i32.const 149646) "a") (data (i32.const 149649) "a") (data (i32.const 149652) "a") (data (i32.const 149655) "a") (data (i32.const 149658) "a") (data (i32.const 149661) "a") (data (i32.const 149664) "a") (data (i32.const 149667) "a") (data (i32.const 149670) "a") (data (i32.const 149673) "a") (data (i32.const 149676) "a") (data (i32.const 149679) "a") (data (i32.const 149682) "a") (data (i32.const 149685) "a") (data (i32.const 149688) "a") (data (i32.const 149691) "a") (data (i32.const 149694) "a") (data (i32.const 149697) "a") (data (i32.const 149700) "a") (data (i32.const 149703) "a") (data (i32.const 149706) "a") (data (i32.const 149709) "a") (data (i32.const 149712) "a") (data (i32.const 149715) "a") (data (i32.const 149718) "a") (data (i32.const 149721) "a") (data (i32.const 149724) "a") (data (i32.const 149727) "a") (data (i32.const 149730) "a") (data (i32.const 149733) "a") (data (i32.const 149736) "a") (data (i32.const 149739) "a") (data (i32.const 149742) "a") (data (i32.const 149745) "a") (data (i32.const 149748) "a") (data (i32.const 149751) "a") (data (i32.const 149754) "a") (data (i32.const 149757) "a") (data (i32.const 149760) "a") (data (i32.const 149763) "a") (data (i32.const 149766) "a") (data (i32.const 149769) "a") (data (i32.const 149772) "a") (data (i32.const 149775) "a") (data (i32.const 149778) "a") (data (i32.const 149781) "a") (data (i32.const 149784) "a") (data (i32.const 149787) "a") (data (i32.const 149790) "a") (data (i32.const 149793) "a") (data (i32.const 149796) "a") (data (i32.const 149799) "a") (data (i32.const 149802) "a") (data (i32.const 149805) "a") (data (i32.const 149808) "a") (data (i32.const 149811) "a") (data (i32.const 149814) "a") (data (i32.const 149817) "a") (data (i32.const 149820) "a") (data (i32.const 149823) "a") (data (i32.const 149826) "a") (data (i32.const 149829) "a") (data (i32.const 149832) "a") (data (i32.const 149835) "a") (data (i32.const 149838) "a") (data (i32.const 149841) "a") (data (i32.const 149844) "a") (data (i32.const 149847) "a") (data (i32.const 149850) "a") (data (i32.const 149853) "a") (data (i32.const 149856) "a") (data (i32.const 149859) "a") (data (i32.const 149862) "a") (data (i32.const 149865) "a") (data (i32.const 149868) "a") (data (i32.const 149871) "a") (data (i32.const 149874) "a") (data (i32.const 149877) "a") (data (i32.const 149880) "a") (data (i32.const 149883) "a") (data (i32.const 149886) "a") (data (i32.const 149889) "a") (data (i32.const 149892) "a") (data (i32.const 149895) "a") (data (i32.const 149898) "a") (data (i32.const 149901) "a") (data (i32.const 149904) "a") (data (i32.const 149907) "a") (data (i32.const 149910) "a") (data (i32.const 149913) "a") (data (i32.const 149916) "a") (data (i32.const 149919) "a") (data (i32.const 149922) "a") (data (i32.const 149925) "a") (data (i32.const 149928) "a") (data (i32.const 149931) "a") (data (i32.const 149934) "a") (data (i32.const 149937) "a") (data (i32.const 149940) "a") (data (i32.const 149943) "a") (data (i32.const 149946) "a") (data (i32.const 149949) "a") (data (i32.const 149952) "a") (data (i32.const 149955) "a") (data (i32.const 149958) "a") (data (i32.const 149961) "a") (data (i32.const 149964) "a") (data (i32.const 149967) "a") (data (i32.const 149970) "a") (data (i32.const 149973) "a") (data (i32.const 149976) "a") (data (i32.const 149979) "a") (data (i32.const 149982) "a") (data (i32.const 149985) "a") (data (i32.const 149988) "a") (data (i32.const 149991) "a") (data (i32.const 149994) "a") (data (i32.const 149997) "a") (data (i32.const 150000) "a") (data (i32.const 150003) "a") (data (i32.const 150006) "a") (data (i32.const 150009) "a") (data (i32.const 150012) "a") (data (i32.const 150015) "a") (data (i32.const 150018) "a") (data (i32.const 150021) "a") (data (i32.const 150024) "a") (data (i32.const 150027) "a") (data (i32.const 150030) "a") (data (i32.const 150033) "a") (data (i32.const 150036) "a") (data (i32.const 150039) "a") (data (i32.const 150042) "a") (data (i32.const 150045) "a") (data (i32.const 150048) "a") (data (i32.const 150051) "a") (data (i32.const 150054) "a") (data (i32.const 150057) "a") (data (i32.const 150060) "a") (data (i32.const 150063) "a") (data (i32.const 150066) "a") (data (i32.const 150069) "a") (data (i32.const 150072) "a") (data (i32.const 150075) "a") (data (i32.const 150078) "a") (data (i32.const 150081) "a") (data (i32.const 150084) "a") (data (i32.const 150087) "a") (data (i32.const 150090) "a") (data (i32.const 150093) "a") (data (i32.const 150096) "a") (data (i32.const 150099) "a") (data (i32.const 150102) "a") (data (i32.const 150105) "a") (data (i32.const 150108) "a") (data (i32.const 150111) "a") (data (i32.const 150114) "a") (data (i32.const 150117) "a") (data (i32.const 150120) "a") (data (i32.const 150123) "a") (data (i32.const 150126) "a") (data (i32.const 150129) "a") (data (i32.const 150132) "a") (data (i32.const 150135) "a") (data (i32.const 150138) "a") (data (i32.const 150141) "a") (data (i32.const 150144) "a") (data (i32.const 150147) "a") (data (i32.const 150150) "a") (data (i32.const 150153) "a") (data (i32.const 150156) "a") (data (i32.const 150159) "a") (data (i32.const 150162) "a") (data (i32.const 150165) "a") (data (i32.const 150168) "a") (data (i32.const 150171) "a") (data (i32.const 150174) "a") (data (i32.const 150177) "a") (data (i32.const 150180) "a") (data (i32.const 150183) "a") (data (i32.const 150186) "a") (data (i32.const 150189) "a") (data (i32.const 150192) "a") (data (i32.const 150195) "a") (data (i32.const 150198) "a") (data (i32.const 150201) "a") (data (i32.const 150204) "a") (data (i32.const 150207) "a") (data (i32.const 150210) "a") (data (i32.const 150213) "a") (data (i32.const 150216) "a") (data (i32.const 150219) "a") (data (i32.const 150222) "a") (data (i32.const 150225) "a") (data (i32.const 150228) "a") (data (i32.const 150231) "a") (data (i32.const 150234) "a") (data (i32.const 150237) "a") (data (i32.const 150240) "a") (data (i32.const 150243) "a") (data (i32.const 150246) "a") (data (i32.const 150249) "a") (data (i32.const 150252) "a") (data (i32.const 150255) "a") (data (i32.const 150258) "a") (data (i32.const 150261) "a") (data (i32.const 150264) "a") (data (i32.const 150267) "a") (data (i32.const 150270) "a") (data (i32.const 150273) "a") (data (i32.const 150276) "a") (data (i32.const 150279) "a") (data (i32.const 150282) "a") (data (i32.const 150285) "a") (data (i32.const 150288) "a") (data (i32.const 150291) "a") (data (i32.const 150294) "a") (data (i32.const 150297) "a") (data (i32.const 150300) "a") (data (i32.const 150303) "a") (data (i32.const 150306) "a") (data (i32.const 150309) "a") (data (i32.const 150312) "a") (data (i32.const 150315) "a") (data (i32.const 150318) "a") (data (i32.const 150321) "a") (data (i32.const 150324) "a") (data (i32.const 150327) "a") (data (i32.const 150330) "a") (data (i32.const 150333) "a") (data (i32.const 150336) "a") (data (i32.const 150339) "a") (data (i32.const 150342) "a") (data (i32.const 150345) "a") (data (i32.const 150348) "a") (data (i32.const 150351) "a") (data (i32.const 150354) "a") (data (i32.const 150357) "a") (data (i32.const 150360) "a") (data (i32.const 150363) "a") (data (i32.const 150366) "a") (data (i32.const 150369) "a") (data (i32.const 150372) "a") (data (i32.const 150375) "a") (data (i32.const 150378) "a") (data (i32.const 150381) "a") (data (i32.const 150384) "a") (data (i32.const 150387) "a") (data (i32.const 150390) "a") (data (i32.const 150393) "a") (data (i32.const 150396) "a") (data (i32.const 150399) "a") (data (i32.const 150402) "a") (data (i32.const 150405) "a") (data (i32.const 150408) "a") (data (i32.const 150411) "a") (data (i32.const 150414) "a") (data (i32.const 150417) "a") (data (i32.const 150420) "a") (data (i32.const 150423) "a") (data (i32.const 150426) "a") (data (i32.const 150429) "a") (data (i32.const 150432) "a") (data (i32.const 150435) "a") (data (i32.const 150438) "a") (data (i32.const 150441) "a") (data (i32.const 150444) "a") (data (i32.const 150447) "a") (data (i32.const 150450) "a") (data (i32.const 150453) "a") (data (i32.const 150456) "a") (data (i32.const 150459) "a") (data (i32.const 150462) "a") (data (i32.const 150465) "a") (data (i32.const 150468) "a") (data (i32.const 150471) "a") (data (i32.const 150474) "a") (data (i32.const 150477) "a") (data (i32.const 150480) "a") (data (i32.const 150483) "a") (data (i32.const 150486) "a") (data (i32.const 150489) "a") (data (i32.const 150492) "a") (data (i32.const 150495) "a") (data (i32.const 150498) "a") (data (i32.const 150501) "a") (data (i32.const 150504) "a") (data (i32.const 150507) "a") (data (i32.const 150510) "a") (data (i32.const 150513) "a") (data (i32.const 150516) "a") (data (i32.const 150519) "a") (data (i32.const 150522) "a") (data (i32.const 150525) "a") (data (i32.const 150528) "a") (data (i32.const 150531) "a") (data (i32.const 150534) "a") (data (i32.const 150537) "a") (data (i32.const 150540) "a") (data (i32.const 150543) "a") (data (i32.const 150546) "a") (data (i32.const 150549) "a") (data (i32.const 150552) "a") (data (i32.const 150555) "a") (data (i32.const 150558) "a") (data (i32.const 150561) "a") (data (i32.const 150564) "a") (data (i32.const 150567) "a") (data (i32.const 150570) "a") (data (i32.const 150573) "a") (data (i32.const 150576) "a") (data (i32.const 150579) "a") (data (i32.const 150582) "a") (data (i32.const 150585) "a") (data (i32.const 150588) "a") (data (i32.const 150591) "a") (data (i32.const 150594) "a") (data (i32.const 150597) "a") (data (i32.const 150600) "a") (data (i32.const 150603) "a") (data (i32.const 150606) "a") (data (i32.const 150609) "a") (data (i32.const 150612) "a") (data (i32.const 150615) "a") (data (i32.const 150618) "a") (data (i32.const 150621) "a") (data (i32.const 150624) "a") (data (i32.const 150627) "a") (data (i32.const 150630) "a") (data (i32.const 150633) "a") (data (i32.const 150636) "a") (data (i32.const 150639) "a") (data (i32.const 150642) "a") (data (i32.const 150645) "a") (data (i32.const 150648) "a") (data (i32.const 150651) "a") (data (i32.const 150654) "a") (data (i32.const 150657) "a") (data (i32.const 150660) "a") (data (i32.const 150663) "a") (data (i32.const 150666) "a") (data (i32.const 150669) "a") (data (i32.const 150672) "a") (data (i32.const 150675) "a") (data (i32.const 150678) "a") (data (i32.const 150681) "a") (data (i32.const 150684) "a") (data (i32.const 150687) "a") (data (i32.const 150690) "a") (data (i32.const 150693) "a") (data (i32.const 150696) "a") (data (i32.const 150699) "a") (data (i32.const 150702) "a") (data (i32.const 150705) "a") (data (i32.const 150708) "a") (data (i32.const 150711) "a") (data (i32.const 150714) "a") (data (i32.const 150717) "a") (data (i32.const 150720) "a") (data (i32.const 150723) "a") (data (i32.const 150726) "a") (data (i32.const 150729) "a") (data (i32.const 150732) "a") (data (i32.const 150735) "a") (data (i32.const 150738) "a") (data (i32.const 150741) "a") (data (i32.const 150744) "a") (data (i32.const 150747) "a") (data (i32.const 150750) "a") (data (i32.const 150753) "a") (data (i32.const 150756) "a") (data (i32.const 150759) "a") (data (i32.const 150762) "a") (data (i32.const 150765) "a") (data (i32.const 150768) "a") (data (i32.const 150771) "a") (data (i32.const 150774) "a") (data (i32.const 150777) "a") (data (i32.const 150780) "a") (data (i32.const 150783) "a") (data (i32.const 150786) "a") (data (i32.const 150789) "a") (data (i32.const 150792) "a") (data (i32.const 150795) "a") (data (i32.const 150798) "a") (data (i32.const 150801) "a") (data (i32.const 150804) "a") (data (i32.const 150807) "a") (data (i32.const 150810) "a") (data (i32.const 150813) "a") (data (i32.const 150816) "a") (data (i32.const 150819) "a") (data (i32.const 150822) "a") (data (i32.const 150825) "a") (data (i32.const 150828) "a") (data (i32.const 150831) "a") (data (i32.const 150834) "a") (data (i32.const 150837) "a") (data (i32.const 150840) "a") (data (i32.const 150843) "a") (data (i32.const 150846) "a") (data (i32.const 150849) "a") (data (i32.const 150852) "a") (data (i32.const 150855) "a") (data (i32.const 150858) "a") (data (i32.const 150861) "a") (data (i32.const 150864) "a") (data (i32.const 150867) "a") (data (i32.const 150870) "a") (data (i32.const 150873) "a") (data (i32.const 150876) "a") (data (i32.const 150879) "a") (data (i32.const 150882) "a") (data (i32.const 150885) "a") (data (i32.const 150888) "a") (data (i32.const 150891) "a") (data (i32.const 150894) "a") (data (i32.const 150897) "a") (data (i32.const 150900) "a") (data (i32.const 150903) "a") (data (i32.const 150906) "a") (data (i32.const 150909) "a") (data (i32.const 150912) "a") (data (i32.const 150915) "a") (data (i32.const 150918) "a") (data (i32.const 150921) "a") (data (i32.const 150924) "a") (data (i32.const 150927) "a") (data (i32.const 150930) "a") (data (i32.const 150933) "a") (data (i32.const 150936) "a") (data (i32.const 150939) "a") (data (i32.const 150942) "a") (data (i32.const 150945) "a") (data (i32.const 150948) "a") (data (i32.const 150951) "a") (data (i32.const 150954) "a") (data (i32.const 150957) "a") (data (i32.const 150960) "a") (data (i32.const 150963) "a") (data (i32.const 150966) "a") (data (i32.const 150969) "a") (data (i32.const 150972) "a") (data (i32.const 150975) "a") (data (i32.const 150978) "a") (data (i32.const 150981) "a") (data (i32.const 150984) "a") (data (i32.const 150987) "a") (data (i32.const 150990) "a") (data (i32.const 150993) "a") (data (i32.const 150996) "a") (data (i32.const 150999) "a") (data (i32.const 151002) "a") (data (i32.const 151005) "a") (data (i32.const 151008) "a") (data (i32.const 151011) "a") (data (i32.const 151014) "a") (data (i32.const 151017) "a") (data (i32.const 151020) "a") (data (i32.const 151023) "a") (data (i32.const 151026) "a") (data (i32.const 151029) "a") (data (i32.const 151032) "a") (data (i32.const 151035) "a") (data (i32.const 151038) "a") (data (i32.const 151041) "a") (data (i32.const 151044) "a") (data (i32.const 151047) "a") (data (i32.const 151050) "a") (data (i32.const 151053) "a") (data (i32.const 151056) "a") (data (i32.const 151059) "a") (data (i32.const 151062) "a") (data (i32.const 151065) "a") (data (i32.const 151068) "a") (data (i32.const 151071) "a") (data (i32.const 151074) "a") (data (i32.const 151077) "a") (data (i32.const 151080) "a") (data (i32.const 151083) "a") (data (i32.const 151086) "a") (data (i32.const 151089) "a") (data (i32.const 151092) "a") (data (i32.const 151095) "a") (data (i32.const 151098) "a") (data (i32.const 151101) "a") (data (i32.const 151104) "a") (data (i32.const 151107) "a") (data (i32.const 151110) "a") (data (i32.const 151113) "a") (data (i32.const 151116) "a") (data (i32.const 151119) "a") (data (i32.const 151122) "a") (data (i32.const 151125) "a") (data (i32.const 151128) "a") (data (i32.const 151131) "a") (data (i32.const 151134) "a") (data (i32.const 151137) "a") (data (i32.const 151140) "a") (data (i32.const 151143) "a") (data (i32.const 151146) "a") (data (i32.const 151149) "a") (data (i32.const 151152) "a") (data (i32.const 151155) "a") (data (i32.const 151158) "a") (data (i32.const 151161) "a") (data (i32.const 151164) "a") (data (i32.const 151167) "a") (data (i32.const 151170) "a") (data (i32.const 151173) "a") (data (i32.const 151176) "a") (data (i32.const 151179) "a") (data (i32.const 151182) "a") (data (i32.const 151185) "a") (data (i32.const 151188) "a") (data (i32.const 151191) "a") (data (i32.const 151194) "a") (data (i32.const 151197) "a") (data (i32.const 151200) "a") (data (i32.const 151203) "a") (data (i32.const 151206) "a") (data (i32.const 151209) "a") (data (i32.const 151212) "a") (data (i32.const 151215) "a") (data (i32.const 151218) "a") (data (i32.const 151221) "a") (data (i32.const 151224) "a") (data (i32.const 151227) "a") (data (i32.const 151230) "a") (data (i32.const 151233) "a") (data (i32.const 151236) "a") (data (i32.const 151239) "a") (data (i32.const 151242) "a") (data (i32.const 151245) "a") (data (i32.const 151248) "a") (data (i32.const 151251) "a") (data (i32.const 151254) "a") (data (i32.const 151257) "a") (data (i32.const 151260) "a") (data (i32.const 151263) "a") (data (i32.const 151266) "a") (data (i32.const 151269) "a") (data (i32.const 151272) "a") (data (i32.const 151275) "a") (data (i32.const 151278) "a") (data (i32.const 151281) "a") (data (i32.const 151284) "a") (data (i32.const 151287) "a") (data (i32.const 151290) "a") (data (i32.const 151293) "a") (data (i32.const 151296) "a") (data (i32.const 151299) "a") (data (i32.const 151302) "a") (data (i32.const 151305) "a") (data (i32.const 151308) "a") (data (i32.const 151311) "a") (data (i32.const 151314) "a") (data (i32.const 151317) "a") (data (i32.const 151320) "a") (data (i32.const 151323) "a") (data (i32.const 151326) "a") (data (i32.const 151329) "a") (data (i32.const 151332) "a") (data (i32.const 151335) "a") (data (i32.const 151338) "a") (data (i32.const 151341) "a") (data (i32.const 151344) "a") (data (i32.const 151347) "a") (data (i32.const 151350) "a") (data (i32.const 151353) "a") (data (i32.const 151356) "a") (data (i32.const 151359) "a") (data (i32.const 151362) "a") (data (i32.const 151365) "a") (data (i32.const 151368) "a") (data (i32.const 151371) "a") (data (i32.const 151374) "a") (data (i32.const 151377) "a") (data (i32.const 151380) "a") (data (i32.const 151383) "a") (data (i32.const 151386) "a") (data (i32.const 151389) "a") (data (i32.const 151392) "a") (data (i32.const 151395) "a") (data (i32.const 151398) "a") (data (i32.const 151401) "a") (data (i32.const 151404) "a") (data (i32.const 151407) "a") (data (i32.const 151410) "a") (data (i32.const 151413) "a") (data (i32.const 151416) "a") (data (i32.const 151419) "a") (data (i32.const 151422) "a") (data (i32.const 151425) "a") (data (i32.const 151428) "a") (data (i32.const 151431) "a") (data (i32.const 151434) "a") (data (i32.const 151437) "a") (data (i32.const 151440) "a") (data (i32.const 151443) "a") (data (i32.const 151446) "a") (data (i32.const 151449) "a") (data (i32.const 151452) "a") (data (i32.const 151455) "a") (data (i32.const 151458) "a") (data (i32.const 151461) "a") (data (i32.const 151464) "a") (data (i32.const 151467) "a") (data (i32.const 151470) "a") (data (i32.const 151473) "a") (data (i32.const 151476) "a") (data (i32.const 151479) "a") (data (i32.const 151482) "a") (data (i32.const 151485) "a") (data (i32.const 151488) "a") (data (i32.const 151491) "a") (data (i32.const 151494) "a") (data (i32.const 151497) "a") (data (i32.const 151500) "a") (data (i32.const 151503) "a") (data (i32.const 151506) "a") (data (i32.const 151509) "a") (data (i32.const 151512) "a") (data (i32.const 151515) "a") (data (i32.const 151518) "a") (data (i32.const 151521) "a") (data (i32.const 151524) "a") (data (i32.const 151527) "a") (data (i32.const 151530) "a") (data (i32.const 151533) "a") (data (i32.const 151536) "a") (data (i32.const 151539) "a") (data (i32.const 151542) "a") (data (i32.const 151545) "a") (data (i32.const 151548) "a") (data (i32.const 151551) "a") (data (i32.const 151554) "a") (data (i32.const 151557) "a") (data (i32.const 151560) "a") (data (i32.const 151563) "a") (data (i32.const 151566) "a") (data (i32.const 151569) "a") (data (i32.const 151572) "a") (data (i32.const 151575) "a") (data (i32.const 151578) "a") (data (i32.const 151581) "a") (data (i32.const 151584) "a") (data (i32.const 151587) "a") (data (i32.const 151590) "a") (data (i32.const 151593) "a") (data (i32.const 151596) "a") (data (i32.const 151599) "a") (data (i32.const 151602) "a") (data (i32.const 151605) "a") (data (i32.const 151608) "a") (data (i32.const 151611) "a") (data (i32.const 151614) "a") (data (i32.const 151617) "a") (data (i32.const 151620) "a") (data (i32.const 151623) "a") (data (i32.const 151626) "a") (data (i32.const 151629) "a") (data (i32.const 151632) "a") (data (i32.const 151635) "a") (data (i32.const 151638) "a") (data (i32.const 151641) "a") (data (i32.const 151644) "a") (data (i32.const 151647) "a") (data (i32.const 151650) "a") (data (i32.const 151653) "a") (data (i32.const 151656) "a") (data (i32.const 151659) "a") (data (i32.const 151662) "a") (data (i32.const 151665) "a") (data (i32.const 151668) "a") (data (i32.const 151671) "a") (data (i32.const 151674) "a") (data (i32.const 151677) "a") (data (i32.const 151680) "a") (data (i32.const 151683) "a") (data (i32.const 151686) "a") (data (i32.const 151689) "a") (data (i32.const 151692) "a") (data (i32.const 151695) "a") (data (i32.const 151698) "a") (data (i32.const 151701) "a") (data (i32.const 151704) "a") (data (i32.const 151707) "a") (data (i32.const 151710) "a") (data (i32.const 151713) "a") (data (i32.const 151716) "a") (data (i32.const 151719) "a") (data (i32.const 151722) "a") (data (i32.const 151725) "a") (data (i32.const 151728) "a") (data (i32.const 151731) "a") (data (i32.const 151734) "a") (data (i32.const 151737) "a") (data (i32.const 151740) "a") (data (i32.const 151743) "a") (data (i32.const 151746) "a") (data (i32.const 151749) "a") (data (i32.const 151752) "a") (data (i32.const 151755) "a") (data (i32.const 151758) "a") (data (i32.const 151761) "a") (data (i32.const 151764) "a") (data (i32.const 151767) "a") (data (i32.const 151770) "a") (data (i32.const 151773) "a") (data (i32.const 151776) "a") (data (i32.const 151779) "a") (data (i32.const 151782) "a") (data (i32.const 151785) "a") (data (i32.const 151788) "a") (data (i32.const 151791) "a") (data (i32.const 151794) "a") (data (i32.const 151797) "a") (data (i32.const 151800) "a") (data (i32.const 151803) "a") (data (i32.const 151806) "a") (data (i32.const 151809) "a") (data (i32.const 151812) "a") (data (i32.const 151815) "a") (data (i32.const 151818) "a") (data (i32.const 151821) "a") (data (i32.const 151824) "a") (data (i32.const 151827) "a") (data (i32.const 151830) "a") (data (i32.const 151833) "a") (data (i32.const 151836) "a") (data (i32.const 151839) "a") (data (i32.const 151842) "a") (data (i32.const 151845) "a") (data (i32.const 151848) "a") (data (i32.const 151851) "a") (data (i32.const 151854) "a") (data (i32.const 151857) "a") (data (i32.const 151860) "a") (data (i32.const 151863) "a") (data (i32.const 151866) "a") (data (i32.const 151869) "a") (data (i32.const 151872) "a") (data (i32.const 151875) "a") (data (i32.const 151878) "a") (data (i32.const 151881) "a") (data (i32.const 151884) "a") (data (i32.const 151887) "a") (data (i32.const 151890) "a") (data (i32.const 151893) "a") (data (i32.const 151896) "a") (data (i32.const 151899) "a") (data (i32.const 151902) "a") (data (i32.const 151905) "a") (data (i32.const 151908) "a") (data (i32.const 151911) "a") (data (i32.const 151914) "a") (data (i32.const 151917) "a") (data (i32.const 151920) "a") (data (i32.const 151923) "a") (data (i32.const 151926) "a") (data (i32.const 151929) "a") (data (i32.const 151932) "a") (data (i32.const 151935) "a") (data (i32.const 151938) "a") (data (i32.const 151941) "a") (data (i32.const 151944) "a") (data (i32.const 151947) "a") (data (i32.const 151950) "a") (data (i32.const 151953) "a") (data (i32.const 151956) "a") (data (i32.const 151959) "a") (data (i32.const 151962) "a") (data (i32.const 151965) "a") (data (i32.const 151968) "a") (data (i32.const 151971) "a") (data (i32.const 151974) "a") (data (i32.const 151977) "a") (data (i32.const 151980) "a") (data (i32.const 151983) "a") (data (i32.const 151986) "a") (data (i32.const 151989) "a") (data (i32.const 151992) "a") (data (i32.const 151995) "a") (data (i32.const 151998) "a") (data (i32.const 152001) "a") (data (i32.const 152004) "a") (data (i32.const 152007) "a") (data (i32.const 152010) "a") (data (i32.const 152013) "a") (data (i32.const 152016) "a") (data (i32.const 152019) "a") (data (i32.const 152022) "a") (data (i32.const 152025) "a") (data (i32.const 152028) "a") (data (i32.const 152031) "a") (data (i32.const 152034) "a") (data (i32.const 152037) "a") (data (i32.const 152040) "a") (data (i32.const 152043) "a") (data (i32.const 152046) "a") (data (i32.const 152049) "a") (data (i32.const 152052) "a") (data (i32.const 152055) "a") (data (i32.const 152058) "a") (data (i32.const 152061) "a") (data (i32.const 152064) "a") (data (i32.const 152067) "a") (data (i32.const 152070) "a") (data (i32.const 152073) "a") (data (i32.const 152076) "a") (data (i32.const 152079) "a") (data (i32.const 152082) "a") (data (i32.const 152085) "a") (data (i32.const 152088) "a") (data (i32.const 152091) "a") (data (i32.const 152094) "a") (data (i32.const 152097) "a") (data (i32.const 152100) "a") (data (i32.const 152103) "a") (data (i32.const 152106) "a") (data (i32.const 152109) "a") (data (i32.const 152112) "a") (data (i32.const 152115) "a") (data (i32.const 152118) "a") (data (i32.const 152121) "a") (data (i32.const 152124) "a") (data (i32.const 152127) "a") (data (i32.const 152130) "a") (data (i32.const 152133) "a") (data (i32.const 152136) "a") (data (i32.const 152139) "a") (data (i32.const 152142) "a") (data (i32.const 152145) "a") (data (i32.const 152148) "a") (data (i32.const 152151) "a") (data (i32.const 152154) "a") (data (i32.const 152157) "a") (data (i32.const 152160) "a") (data (i32.const 152163) "a") (data (i32.const 152166) "a") (data (i32.const 152169) "a") (data (i32.const 152172) "a") (data (i32.const 152175) "a") (data (i32.const 152178) "a") (data (i32.const 152181) "a") (data (i32.const 152184) "a") (data (i32.const 152187) "a") (data (i32.const 152190) "a") (data (i32.const 152193) "a") (data (i32.const 152196) "a") (data (i32.const 152199) "a") (data (i32.const 152202) "a") (data (i32.const 152205) "a") (data (i32.const 152208) "a") (data (i32.const 152211) "a") (data (i32.const 152214) "a") (data (i32.const 152217) "a") (data (i32.const 152220) "a") (data (i32.const 152223) "a") (data (i32.const 152226) "a") (data (i32.const 152229) "a") (data (i32.const 152232) "a") (data (i32.const 152235) "a") (data (i32.const 152238) "a") (data (i32.const 152241) "a") (data (i32.const 152244) "a") (data (i32.const 152247) "a") (data (i32.const 152250) "a") (data (i32.const 152253) "a") (data (i32.const 152256) "a") (data (i32.const 152259) "a") (data (i32.const 152262) "a") (data (i32.const 152265) "a") (data (i32.const 152268) "a") (data (i32.const 152271) "a") (data (i32.const 152274) "a") (data (i32.const 152277) "a") (data (i32.const 152280) "a") (data (i32.const 152283) "a") (data (i32.const 152286) "a") (data (i32.const 152289) "a") (data (i32.const 152292) "a") (data (i32.const 152295) "a") (data (i32.const 152298) "a") (data (i32.const 152301) "a") (data (i32.const 152304) "a") (data (i32.const 152307) "a") (data (i32.const 152310) "a") (data (i32.const 152313) "a") (data (i32.const 152316) "a") (data (i32.const 152319) "a") (data (i32.const 152322) "a") (data (i32.const 152325) "a") (data (i32.const 152328) "a") (data (i32.const 152331) "a") (data (i32.const 152334) "a") (data (i32.const 152337) "a") (data (i32.const 152340) "a") (data (i32.const 152343) "a") (data (i32.const 152346) "a") (data (i32.const 152349) "a") (data (i32.const 152352) "a") (data (i32.const 152355) "a") (data (i32.const 152358) "a") (data (i32.const 152361) "a") (data (i32.const 152364) "a") (data (i32.const 152367) "a") (data (i32.const 152370) "a") (data (i32.const 152373) "a") (data (i32.const 152376) "a") (data (i32.const 152379) "a") (data (i32.const 152382) "a") (data (i32.const 152385) "a") (data (i32.const 152388) "a") (data (i32.const 152391) "a") (data (i32.const 152394) "a") (data (i32.const 152397) "a") (data (i32.const 152400) "a") (data (i32.const 152403) "a") (data (i32.const 152406) "a") (data (i32.const 152409) "a") (data (i32.const 152412) "a") (data (i32.const 152415) "a") (data (i32.const 152418) "a") (data (i32.const 152421) "a") (data (i32.const 152424) "a") (data (i32.const 152427) "a") (data (i32.const 152430) "a") (data (i32.const 152433) "a") (data (i32.const 152436) "a") (data (i32.const 152439) "a") (data (i32.const 152442) "a") (data (i32.const 152445) "a") (data (i32.const 152448) "a") (data (i32.const 152451) "a") (data (i32.const 152454) "a") (data (i32.const 152457) "a") (data (i32.const 152460) "a") (data (i32.const 152463) "a") (data (i32.const 152466) "a") (data (i32.const 152469) "a") (data (i32.const 152472) "a") (data (i32.const 152475) "a") (data (i32.const 152478) "a") (data (i32.const 152481) "a") (data (i32.const 152484) "a") (data (i32.const 152487) "a") (data (i32.const 152490) "a") (data (i32.const 152493) "a") (data (i32.const 152496) "a") (data (i32.const 152499) "a") (data (i32.const 152502) "a") (data (i32.const 152505) "a") (data (i32.const 152508) "a") (data (i32.const 152511) "a") (data (i32.const 152514) "a") (data (i32.const 152517) "a") (data (i32.const 152520) "a") (data (i32.const 152523) "a") (data (i32.const 152526) "a") (data (i32.const 152529) "a") (data (i32.const 152532) "a") (data (i32.const 152535) "a") (data (i32.const 152538) "a") (data (i32.const 152541) "a") (data (i32.const 152544) "a") (data (i32.const 152547) "a") (data (i32.const 152550) "a") (data (i32.const 152553) "a") (data (i32.const 152556) "a") (data (i32.const 152559) "a") (data (i32.const 152562) "a") (data (i32.const 152565) "a") (data (i32.const 152568) "a") (data (i32.const 152571) "a") (data (i32.const 152574) "a") (data (i32.const 152577) "a") (data (i32.const 152580) "a") (data (i32.const 152583) "a") (data (i32.const 152586) "a") (data (i32.const 152589) "a") (data (i32.const 152592) "a") (data (i32.const 152595) "a") (data (i32.const 152598) "a") (data (i32.const 152601) "a") (data (i32.const 152604) "a") (data (i32.const 152607) "a") (data (i32.const 152610) "a") (data (i32.const 152613) "a") (data (i32.const 152616) "a") (data (i32.const 152619) "a") (data (i32.const 152622) "a") (data (i32.const 152625) "a") (data (i32.const 152628) "a") (data (i32.const 152631) "a") (data (i32.const 152634) "a") (data (i32.const 152637) "a") (data (i32.const 152640) "a") (data (i32.const 152643) "a") (data (i32.const 152646) "a") (data (i32.const 152649) "a") (data (i32.const 152652) "a") (data (i32.const 152655) "a") (data (i32.const 152658) "a") (data (i32.const 152661) "a") (data (i32.const 152664) "a") (data (i32.const 152667) "a") (data (i32.const 152670) "a") (data (i32.const 152673) "a") (data (i32.const 152676) "a") (data (i32.const 152679) "a") (data (i32.const 152682) "a") (data (i32.const 152685) "a") (data (i32.const 152688) "a") (data (i32.const 152691) "a") (data (i32.const 152694) "a") (data (i32.const 152697) "a") (data (i32.const 152700) "a") (data (i32.const 152703) "a") (data (i32.const 152706) "a") (data (i32.const 152709) "a") (data (i32.const 152712) "a") (data (i32.const 152715) "a") (data (i32.const 152718) "a") (data (i32.const 152721) "a") (data (i32.const 152724) "a") (data (i32.const 152727) "a") (data (i32.const 152730) "a") (data (i32.const 152733) "a") (data (i32.const 152736) "a") (data (i32.const 152739) "a") (data (i32.const 152742) "a") (data (i32.const 152745) "a") (data (i32.const 152748) "a") (data (i32.const 152751) "a") (data (i32.const 152754) "a") (data (i32.const 152757) "a") (data (i32.const 152760) "a") (data (i32.const 152763) "a") (data (i32.const 152766) "a") (data (i32.const 152769) "a") (data (i32.const 152772) "a") (data (i32.const 152775) "a") (data (i32.const 152778) "a") (data (i32.const 152781) "a") (data (i32.const 152784) "a") (data (i32.const 152787) "a") (data (i32.const 152790) "a") (data (i32.const 152793) "a") (data (i32.const 152796) "a") (data (i32.const 152799) "a") (data (i32.const 152802) "a") (data (i32.const 152805) "a") (data (i32.const 152808) "a") (data (i32.const 152811) "a") (data (i32.const 152814) "a") (data (i32.const 152817) "a") (data (i32.const 152820) "a") (data (i32.const 152823) "a") (data (i32.const 152826) "a") (data (i32.const 152829) "a") (data (i32.const 152832) "a") (data (i32.const 152835) "a") (data (i32.const 152838) "a") (data (i32.const 152841) "a") (data (i32.const 152844) "a") (data (i32.const 152847) "a") (data (i32.const 152850) "a") (data (i32.const 152853) "a") (data (i32.const 152856) "a") (data (i32.const 152859) "a") (data (i32.const 152862) "a") (data (i32.const 152865) "a") (data (i32.const 152868) "a") (data (i32.const 152871) "a") (data (i32.const 152874) "a") (data (i32.const 152877) "a") (data (i32.const 152880) "a") (data (i32.const 152883) "a") (data (i32.const 152886) "a") (data (i32.const 152889) "a") (data (i32.const 152892) "a") (data (i32.const 152895) "a") (data (i32.const 152898) "a") (data (i32.const 152901) "a") (data (i32.const 152904) "a") (data (i32.const 152907) "a") (data (i32.const 152910) "a") (data (i32.const 152913) "a") (data (i32.const 152916) "a") (data (i32.const 152919) "a") (data (i32.const 152922) "a") (data (i32.const 152925) "a") (data (i32.const 152928) "a") (data (i32.const 152931) "a") (data (i32.const 152934) "a") (data (i32.const 152937) "a") (data (i32.const 152940) "a") (data (i32.const 152943) "a") (data (i32.const 152946) "a") (data (i32.const 152949) "a") (data (i32.const 152952) "a") (data (i32.const 152955) "a") (data (i32.const 152958) "a") (data (i32.const 152961) "a") (data (i32.const 152964) "a") (data (i32.const 152967) "a") (data (i32.const 152970) "a") (data (i32.const 152973) "a") (data (i32.const 152976) "a") (data (i32.const 152979) "a") (data (i32.const 152982) "a") (data (i32.const 152985) "a") (data (i32.const 152988) "a") (data (i32.const 152991) "a") (data (i32.const 152994) "a") (data (i32.const 152997) "a") (data (i32.const 153000) "a") (data (i32.const 153003) "a") (data (i32.const 153006) "a") (data (i32.const 153009) "a") (data (i32.const 153012) "a") (data (i32.const 153015) "a") (data (i32.const 153018) "a") (data (i32.const 153021) "a") (data (i32.const 153024) "a") (data (i32.const 153027) "a") (data (i32.const 153030) "a") (data (i32.const 153033) "a") (data (i32.const 153036) "a") (data (i32.const 153039) "a") (data (i32.const 153042) "a") (data (i32.const 153045) "a") (data (i32.const 153048) "a") (data (i32.const 153051) "a") (data (i32.const 153054) "a") (data (i32.const 153057) "a") (data (i32.const 153060) "a") (data (i32.const 153063) "a") (data (i32.const 153066) "a") (data (i32.const 153069) "a") (data (i32.const 153072) "a") (data (i32.const 153075) "a") (data (i32.const 153078) "a") (data (i32.const 153081) "a") (data (i32.const 153084) "a") (data (i32.const 153087) "a") (data (i32.const 153090) "a") (data (i32.const 153093) "a") (data (i32.const 153096) "a") (data (i32.const 153099) "a") (data (i32.const 153102) "a") (data (i32.const 153105) "a") (data (i32.const 153108) "a") (data (i32.const 153111) "a") (data (i32.const 153114) "a") (data (i32.const 153117) "a") (data (i32.const 153120) "a") (data (i32.const 153123) "a") (data (i32.const 153126) "a") (data (i32.const 153129) "a") (data (i32.const 153132) "a") (data (i32.const 153135) "a") (data (i32.const 153138) "a") (data (i32.const 153141) "a") (data (i32.const 153144) "a") (data (i32.const 153147) "a") (data (i32.const 153150) "a") (data (i32.const 153153) "a") (data (i32.const 153156) "a") (data (i32.const 153159) "a") (data (i32.const 153162) "a") (data (i32.const 153165) "a") (data (i32.const 153168) "a") (data (i32.const 153171) "a") (data (i32.const 153174) "a") (data (i32.const 153177) "a") (data (i32.const 153180) "a") (data (i32.const 153183) "a") (data (i32.const 153186) "a") (data (i32.const 153189) "a") (data (i32.const 153192) "a") (data (i32.const 153195) "a") (data (i32.const 153198) "a") (data (i32.const 153201) "a") (data (i32.const 153204) "a") (data (i32.const 153207) "a") (data (i32.const 153210) "a") (data (i32.const 153213) "a") (data (i32.const 153216) "a") (data (i32.const 153219) "a") (data (i32.const 153222) "a") (data (i32.const 153225) "a") (data (i32.const 153228) "a") (data (i32.const 153231) "a") (data (i32.const 153234) "a") (data (i32.const 153237) "a") (data (i32.const 153240) "a") (data (i32.const 153243) "a") (data (i32.const 153246) "a") (data (i32.const 153249) "a") (data (i32.const 153252) "a") (data (i32.const 153255) "a") (data (i32.const 153258) "a") (data (i32.const 153261) "a") (data (i32.const 153264) "a") (data (i32.const 153267) "a") (data (i32.const 153270) "a") (data (i32.const 153273) "a") (data (i32.const 153276) "a") (data (i32.const 153279) "a") (data (i32.const 153282) "a") (data (i32.const 153285) "a") (data (i32.const 153288) "a") (data (i32.const 153291) "a") (data (i32.const 153294) "a") (data (i32.const 153297) "a") (data (i32.const 153300) "a") (data (i32.const 153303) "a") (data (i32.const 153306) "a") (data (i32.const 153309) "a") (data (i32.const 153312) "a") (data (i32.const 153315) "a") (data (i32.const 153318) "a") (data (i32.const 153321) "a") (data (i32.const 153324) "a") (data (i32.const 153327) "a") (data (i32.const 153330) "a") (data (i32.const 153333) "a") (data (i32.const 153336) "a") (data (i32.const 153339) "a") (data (i32.const 153342) "a") (data (i32.const 153345) "a") (data (i32.const 153348) "a") (data (i32.const 153351) "a") (data (i32.const 153354) "a") (data (i32.const 153357) "a") (data (i32.const 153360) "a") (data (i32.const 153363) "a") (data (i32.const 153366) "a") (data (i32.const 153369) "a") (data (i32.const 153372) "a") (data (i32.const 153375) "a") (data (i32.const 153378) "a") (data (i32.const 153381) "a") (data (i32.const 153384) "a") (data (i32.const 153387) "a") (data (i32.const 153390) "a") (data (i32.const 153393) "a") (data (i32.const 153396) "a") (data (i32.const 153399) "a") (data (i32.const 153402) "a") (data (i32.const 153405) "a") (data (i32.const 153408) "a") (data (i32.const 153411) "a") (data (i32.const 153414) "a") (data (i32.const 153417) "a") (data (i32.const 153420) "a") (data (i32.const 153423) "a") (data (i32.const 153426) "a") (data (i32.const 153429) "a") (data (i32.const 153432) "a") (data (i32.const 153435) "a") (data (i32.const 153438) "a") (data (i32.const 153441) "a") (data (i32.const 153444) "a") (data (i32.const 153447) "a") (data (i32.const 153450) "a") (data (i32.const 153453) "a") (data (i32.const 153456) "a") (data (i32.const 153459) "a") (data (i32.const 153462) "a") (data (i32.const 153465) "a") (data (i32.const 153468) "a") (data (i32.const 153471) "a") (data (i32.const 153474) "a") (data (i32.const 153477) "a") (data (i32.const 153480) "a") (data (i32.const 153483) "a") (data (i32.const 153486) "a") (data (i32.const 153489) "a") (data (i32.const 153492) "a") (data (i32.const 153495) "a") (data (i32.const 153498) "a") (data (i32.const 153501) "a") (data (i32.const 153504) "a") (data (i32.const 153507) "a") (data (i32.const 153510) "a") (data (i32.const 153513) "a") (data (i32.const 153516) "a") (data (i32.const 153519) "a") (data (i32.const 153522) "a") (data (i32.const 153525) "a") (data (i32.const 153528) "a") (data (i32.const 153531) "a") (data (i32.const 153534) "a") (data (i32.const 153537) "a") (data (i32.const 153540) "a") (data (i32.const 153543) "a") (data (i32.const 153546) "a") (data (i32.const 153549) "a") (data (i32.const 153552) "a") (data (i32.const 153555) "a") (data (i32.const 153558) "a") (data (i32.const 153561) "a") (data (i32.const 153564) "a") (data (i32.const 153567) "a") (data (i32.const 153570) "a") (data (i32.const 153573) "a") (data (i32.const 153576) "a") (data (i32.const 153579) "a") (data (i32.const 153582) "a") (data (i32.const 153585) "a") (data (i32.const 153588) "a") (data (i32.const 153591) "a") (data (i32.const 153594) "a") (data (i32.const 153597) "a") (data (i32.const 153600) "a") (data (i32.const 153603) "a") (data (i32.const 153606) "a") (data (i32.const 153609) "a") (data (i32.const 153612) "a") (data (i32.const 153615) "a") (data (i32.const 153618) "a") (data (i32.const 153621) "a") (data (i32.const 153624) "a") (data (i32.const 153627) "a") (data (i32.const 153630) "a") (data (i32.const 153633) "a") (data (i32.const 153636) "a") (data (i32.const 153639) "a") (data (i32.const 153642) "a") (data (i32.const 153645) "a") (data (i32.const 153648) "a") (data (i32.const 153651) "a") (data (i32.const 153654) "a") (data (i32.const 153657) "a") (data (i32.const 153660) "a") (data (i32.const 153663) "a") (data (i32.const 153666) "a") (data (i32.const 153669) "a") (data (i32.const 153672) "a") (data (i32.const 153675) "a") (data (i32.const 153678) "a") (data (i32.const 153681) "a") (data (i32.const 153684) "a") (data (i32.const 153687) "a") (data (i32.const 153690) "a") (data (i32.const 153693) "a") (data (i32.const 153696) "a") (data (i32.const 153699) "a") (data (i32.const 153702) "a") (data (i32.const 153705) "a") (data (i32.const 153708) "a") (data (i32.const 153711) "a") (data (i32.const 153714) "a") (data (i32.const 153717) "a") (data (i32.const 153720) "a") (data (i32.const 153723) "a") (data (i32.const 153726) "a") (data (i32.const 153729) "a") (data (i32.const 153732) "a") (data (i32.const 153735) "a") (data (i32.const 153738) "a") (data (i32.const 153741) "a") (data (i32.const 153744) "a") (data (i32.const 153747) "a") (data (i32.const 153750) "a") (data (i32.const 153753) "a") (data (i32.const 153756) "a") (data (i32.const 153759) "a") (data (i32.const 153762) "a") (data (i32.const 153765) "a") (data (i32.const 153768) "a") (data (i32.const 153771) "a") (data (i32.const 153774) "a") (data (i32.const 153777) "a") (data (i32.const 153780) "a") (data (i32.const 153783) "a") (data (i32.const 153786) "a") (data (i32.const 153789) "a") (data (i32.const 153792) "a") (data (i32.const 153795) "a") (data (i32.const 153798) "a") (data (i32.const 153801) "a") (data (i32.const 153804) "a") (data (i32.const 153807) "a") (data (i32.const 153810) "a") (data (i32.const 153813) "a") (data (i32.const 153816) "a") (data (i32.const 153819) "a") (data (i32.const 153822) "a") (data (i32.const 153825) "a") (data (i32.const 153828) "a") (data (i32.const 153831) "a") (data (i32.const 153834) "a") (data (i32.const 153837) "a") (data (i32.const 153840) "a") (data (i32.const 153843) "a") (data (i32.const 153846) "a") (data (i32.const 153849) "a") (data (i32.const 153852) "a") (data (i32.const 153855) "a") (data (i32.const 153858) "a") (data (i32.const 153861) "a") (data (i32.const 153864) "a") (data (i32.const 153867) "a") (data (i32.const 153870) "a") (data (i32.const 153873) "a") (data (i32.const 153876) "a") (data (i32.const 153879) "a") (data (i32.const 153882) "a") (data (i32.const 153885) "a") (data (i32.const 153888) "a") (data (i32.const 153891) "a") (data (i32.const 153894) "a") (data (i32.const 153897) "a") (data (i32.const 153900) "a") (data (i32.const 153903) "a") (data (i32.const 153906) "a") (data (i32.const 153909) "a") (data (i32.const 153912) "a") (data (i32.const 153915) "a") (data (i32.const 153918) "a") (data (i32.const 153921) "a") (data (i32.const 153924) "a") (data (i32.const 153927) "a") (data (i32.const 153930) "a") (data (i32.const 153933) "a") (data (i32.const 153936) "a") (data (i32.const 153939) "a") (data (i32.const 153942) "a") (data (i32.const 153945) "a") (data (i32.const 153948) "a") (data (i32.const 153951) "a") (data (i32.const 153954) "a") (data (i32.const 153957) "a") (data (i32.const 153960) "a") (data (i32.const 153963) "a") (data (i32.const 153966) "a") (data (i32.const 153969) "a") (data (i32.const 153972) "a") (data (i32.const 153975) "a") (data (i32.const 153978) "a") (data (i32.const 153981) "a") (data (i32.const 153984) "a") (data (i32.const 153987) "a") (data (i32.const 153990) "a") (data (i32.const 153993) "a") (data (i32.const 153996) "a") (data (i32.const 153999) "a") (data (i32.const 154002) "a") (data (i32.const 154005) "a") (data (i32.const 154008) "a") (data (i32.const 154011) "a") (data (i32.const 154014) "a") (data (i32.const 154017) "a") (data (i32.const 154020) "a") (data (i32.const 154023) "a") (data (i32.const 154026) "a") (data (i32.const 154029) "a") (data (i32.const 154032) "a") (data (i32.const 154035) "a") (data (i32.const 154038) "a") (data (i32.const 154041) "a") (data (i32.const 154044) "a") (data (i32.const 154047) "a") (data (i32.const 154050) "a") (data (i32.const 154053) "a") (data (i32.const 154056) "a") (data (i32.const 154059) "a") (data (i32.const 154062) "a") (data (i32.const 154065) "a") (data (i32.const 154068) "a") (data (i32.const 154071) "a") (data (i32.const 154074) "a") (data (i32.const 154077) "a") (data (i32.const 154080) "a") (data (i32.const 154083) "a") (data (i32.const 154086) "a") (data (i32.const 154089) "a") (data (i32.const 154092) "a") (data (i32.const 154095) "a") (data (i32.const 154098) "a") (data (i32.const 154101) "a") (data (i32.const 154104) "a") (data (i32.const 154107) "a") (data (i32.const 154110) "a") (data (i32.const 154113) "a") (data (i32.const 154116) "a") (data (i32.const 154119) "a") (data (i32.const 154122) "a") (data (i32.const 154125) "a") (data (i32.const 154128) "a") (data (i32.const 154131) "a") (data (i32.const 154134) "a") (data (i32.const 154137) "a") (data (i32.const 154140) "a") (data (i32.const 154143) "a") (data (i32.const 154146) "a") (data (i32.const 154149) "a") (data (i32.const 154152) "a") (data (i32.const 154155) "a") (data (i32.const 154158) "a") (data (i32.const 154161) "a") (data (i32.const 154164) "a") (data (i32.const 154167) "a") (data (i32.const 154170) "a") (data (i32.const 154173) "a") (data (i32.const 154176) "a") (data (i32.const 154179) "a") (data (i32.const 154182) "a") (data (i32.const 154185) "a") (data (i32.const 154188) "a") (data (i32.const 154191) "a") (data (i32.const 154194) "a") (data (i32.const 154197) "a") (data (i32.const 154200) "a") (data (i32.const 154203) "a") (data (i32.const 154206) "a") (data (i32.const 154209) "a") (data (i32.const 154212) "a") (data (i32.const 154215) "a") (data (i32.const 154218) "a") (data (i32.const 154221) "a") (data (i32.const 154224) "a") (data (i32.const 154227) "a") (data (i32.const 154230) "a") (data (i32.const 154233) "a") (data (i32.const 154236) "a") (data (i32.const 154239) "a") (data (i32.const 154242) "a") (data (i32.const 154245) "a") (data (i32.const 154248) "a") (data (i32.const 154251) "a") (data (i32.const 154254) "a") (data (i32.const 154257) "a") (data (i32.const 154260) "a") (data (i32.const 154263) "a") (data (i32.const 154266) "a") (data (i32.const 154269) "a") (data (i32.const 154272) "a") (data (i32.const 154275) "a") (data (i32.const 154278) "a") (data (i32.const 154281) "a") (data (i32.const 154284) "a") (data (i32.const 154287) "a") (data (i32.const 154290) "a") (data (i32.const 154293) "a") (data (i32.const 154296) "a") (data (i32.const 154299) "a") (data (i32.const 154302) "a") (data (i32.const 154305) "a") (data (i32.const 154308) "a") (data (i32.const 154311) "a") (data (i32.const 154314) "a") (data (i32.const 154317) "a") (data (i32.const 154320) "a") (data (i32.const 154323) "a") (data (i32.const 154326) "a") (data (i32.const 154329) "a") (data (i32.const 154332) "a") (data (i32.const 154335) "a") (data (i32.const 154338) "a") (data (i32.const 154341) "a") (data (i32.const 154344) "a") (data (i32.const 154347) "a") (data (i32.const 154350) "a") (data (i32.const 154353) "a") (data (i32.const 154356) "a") (data (i32.const 154359) "a") (data (i32.const 154362) "a") (data (i32.const 154365) "a") (data (i32.const 154368) "a") (data (i32.const 154371) "a") (data (i32.const 154374) "a") (data (i32.const 154377) "a") (data (i32.const 154380) "a") (data (i32.const 154383) "a") (data (i32.const 154386) "a") (data (i32.const 154389) "a") (data (i32.const 154392) "a") (data (i32.const 154395) "a") (data (i32.const 154398) "a") (data (i32.const 154401) "a") (data (i32.const 154404) "a") (data (i32.const 154407) "a") (data (i32.const 154410) "a") (data (i32.const 154413) "a") (data (i32.const 154416) "a") (data (i32.const 154419) "a") (data (i32.const 154422) "a") (data (i32.const 154425) "a") (data (i32.const 154428) "a") (data (i32.const 154431) "a") (data (i32.const 154434) "a") (data (i32.const 154437) "a") (data (i32.const 154440) "a") (data (i32.const 154443) "a") (data (i32.const 154446) "a") (data (i32.const 154449) "a") (data (i32.const 154452) "a") (data (i32.const 154455) "a") (data (i32.const 154458) "a") (data (i32.const 154461) "a") (data (i32.const 154464) "a") (data (i32.const 154467) "a") (data (i32.const 154470) "a") (data (i32.const 154473) "a") (data (i32.const 154476) "a") (data (i32.const 154479) "a") (data (i32.const 154482) "a") (data (i32.const 154485) "a") (data (i32.const 154488) "a") (data (i32.const 154491) "a") (data (i32.const 154494) "a") (data (i32.const 154497) "a") (data (i32.const 154500) "a") (data (i32.const 154503) "a") (data (i32.const 154506) "a") (data (i32.const 154509) "a") (data (i32.const 154512) "a") (data (i32.const 154515) "a") (data (i32.const 154518) "a") (data (i32.const 154521) "a") (data (i32.const 154524) "a") (data (i32.const 154527) "a") (data (i32.const 154530) "a") (data (i32.const 154533) "a") (data (i32.const 154536) "a") (data (i32.const 154539) "a") (data (i32.const 154542) "a") (data (i32.const 154545) "a") (data (i32.const 154548) "a") (data (i32.const 154551) "a") (data (i32.const 154554) "a") (data (i32.const 154557) "a") (data (i32.const 154560) "a") (data (i32.const 154563) "a") (data (i32.const 154566) "a") (data (i32.const 154569) "a") (data (i32.const 154572) "a") (data (i32.const 154575) "a") (data (i32.const 154578) "a") (data (i32.const 154581) "a") (data (i32.const 154584) "a") (data (i32.const 154587) "a") (data (i32.const 154590) "a") (data (i32.const 154593) "a") (data (i32.const 154596) "a") (data (i32.const 154599) "a") (data (i32.const 154602) "a") (data (i32.const 154605) "a") (data (i32.const 154608) "a") (data (i32.const 154611) "a") (data (i32.const 154614) "a") (data (i32.const 154617) "a") (data (i32.const 154620) "a") (data (i32.const 154623) "a") (data (i32.const 154626) "a") (data (i32.const 154629) "a") (data (i32.const 154632) "a") (data (i32.const 154635) "a") (data (i32.const 154638) "a") (data (i32.const 154641) "a") (data (i32.const 154644) "a") (data (i32.const 154647) "a") (data (i32.const 154650) "a") (data (i32.const 154653) "a") (data (i32.const 154656) "a") (data (i32.const 154659) "a") (data (i32.const 154662) "a") (data (i32.const 154665) "a") (data (i32.const 154668) "a") (data (i32.const 154671) "a") (data (i32.const 154674) "a") (data (i32.const 154677) "a") (data (i32.const 154680) "a") (data (i32.const 154683) "a") (data (i32.const 154686) "a") (data (i32.const 154689) "a") (data (i32.const 154692) "a") (data (i32.const 154695) "a") (data (i32.const 154698) "a") (data (i32.const 154701) "a") (data (i32.const 154704) "a") (data (i32.const 154707) "a") (data (i32.const 154710) "a") (data (i32.const 154713) "a") (data (i32.const 154716) "a") (data (i32.const 154719) "a") (data (i32.const 154722) "a") (data (i32.const 154725) "a") (data (i32.const 154728) "a") (data (i32.const 154731) "a") (data (i32.const 154734) "a") (data (i32.const 154737) "a") (data (i32.const 154740) "a") (data (i32.const 154743) "a") (data (i32.const 154746) "a") (data (i32.const 154749) "a") (data (i32.const 154752) "a") (data (i32.const 154755) "a") (data (i32.const 154758) "a") (data (i32.const 154761) "a") (data (i32.const 154764) "a") (data (i32.const 154767) "a") (data (i32.const 154770) "a") (data (i32.const 154773) "a") (data (i32.const 154776) "a") (data (i32.const 154779) "a") (data (i32.const 154782) "a") (data (i32.const 154785) "a") (data (i32.const 154788) "a") (data (i32.const 154791) "a") (data (i32.const 154794) "a") (data (i32.const 154797) "a") (data (i32.const 154800) "a") (data (i32.const 154803) "a") (data (i32.const 154806) "a") (data (i32.const 154809) "a") (data (i32.const 154812) "a") (data (i32.const 154815) "a") (data (i32.const 154818) "a") (data (i32.const 154821) "a") (data (i32.const 154824) "a") (data (i32.const 154827) "a") (data (i32.const 154830) "a") (data (i32.const 154833) "a") (data (i32.const 154836) "a") (data (i32.const 154839) "a") (data (i32.const 154842) "a") (data (i32.const 154845) "a") (data (i32.const 154848) "a") (data (i32.const 154851) "a") (data (i32.const 154854) "a") (data (i32.const 154857) "a") (data (i32.const 154860) "a") (data (i32.const 154863) "a") (data (i32.const 154866) "a") (data (i32.const 154869) "a") (data (i32.const 154872) "a") (data (i32.const 154875) "a") (data (i32.const 154878) "a") (data (i32.const 154881) "a") (data (i32.const 154884) "a") (data (i32.const 154887) "a") (data (i32.const 154890) "a") (data (i32.const 154893) "a") (data (i32.const 154896) "a") (data (i32.const 154899) "a") (data (i32.const 154902) "a") (data (i32.const 154905) "a") (data (i32.const 154908) "a") (data (i32.const 154911) "a") (data (i32.const 154914) "a") (data (i32.const 154917) "a") (data (i32.const 154920) "a") (data (i32.const 154923) "a") (data (i32.const 154926) "a") (data (i32.const 154929) "a") (data (i32.const 154932) "a") (data (i32.const 154935) "a") (data (i32.const 154938) "a") (data (i32.const 154941) "a") (data (i32.const 154944) "a") (data (i32.const 154947) "a") (data (i32.const 154950) "a") (data (i32.const 154953) "a") (data (i32.const 154956) "a") (data (i32.const 154959) "a") (data (i32.const 154962) "a") (data (i32.const 154965) "a") (data (i32.const 154968) "a") (data (i32.const 154971) "a") (data (i32.const 154974) "a") (data (i32.const 154977) "a") (data (i32.const 154980) "a") (data (i32.const 154983) "a") (data (i32.const 154986) "a") (data (i32.const 154989) "a") (data (i32.const 154992) "a") (data (i32.const 154995) "a") (data (i32.const 154998) "a") (data (i32.const 155001) "a") (data (i32.const 155004) "a") (data (i32.const 155007) "a") (data (i32.const 155010) "a") (data (i32.const 155013) "a") (data (i32.const 155016) "a") (data (i32.const 155019) "a") (data (i32.const 155022) "a") (data (i32.const 155025) "a") (data (i32.const 155028) "a") (data (i32.const 155031) "a") (data (i32.const 155034) "a") (data (i32.const 155037) "a") (data (i32.const 155040) "a") (data (i32.const 155043) "a") (data (i32.const 155046) "a") (data (i32.const 155049) "a") (data (i32.const 155052) "a") (data (i32.const 155055) "a") (data (i32.const 155058) "a") (data (i32.const 155061) "a") (data (i32.const 155064) "a") (data (i32.const 155067) "a") (data (i32.const 155070) "a") (data (i32.const 155073) "a") (data (i32.const 155076) "a") (data (i32.const 155079) "a") (data (i32.const 155082) "a") (data (i32.const 155085) "a") (data (i32.const 155088) "a") (data (i32.const 155091) "a") (data (i32.const 155094) "a") (data (i32.const 155097) "a") (data (i32.const 155100) "a") (data (i32.const 155103) "a") (data (i32.const 155106) "a") (data (i32.const 155109) "a") (data (i32.const 155112) "a") (data (i32.const 155115) "a") (data (i32.const 155118) "a") (data (i32.const 155121) "a") (data (i32.const 155124) "a") (data (i32.const 155127) "a") (data (i32.const 155130) "a") (data (i32.const 155133) "a") (data (i32.const 155136) "a") (data (i32.const 155139) "a") (data (i32.const 155142) "a") (data (i32.const 155145) "a") (data (i32.const 155148) "a") (data (i32.const 155151) "a") (data (i32.const 155154) "a") (data (i32.const 155157) "a") (data (i32.const 155160) "a") (data (i32.const 155163) "a") (data (i32.const 155166) "a") (data (i32.const 155169) "a") (data (i32.const 155172) "a") (data (i32.const 155175) "a") (data (i32.const 155178) "a") (data (i32.const 155181) "a") (data (i32.const 155184) "a") (data (i32.const 155187) "a") (data (i32.const 155190) "a") (data (i32.const 155193) "a") (data (i32.const 155196) "a") (data (i32.const 155199) "a") (data (i32.const 155202) "a") (data (i32.const 155205) "a") (data (i32.const 155208) "a") (data (i32.const 155211) "a") (data (i32.const 155214) "a") (data (i32.const 155217) "a") (data (i32.const 155220) "a") (data (i32.const 155223) "a") (data (i32.const 155226) "a") (data (i32.const 155229) "a") (data (i32.const 155232) "a") (data (i32.const 155235) "a") (data (i32.const 155238) "a") (data (i32.const 155241) "a") (data (i32.const 155244) "a") (data (i32.const 155247) "a") (data (i32.const 155250) "a") (data (i32.const 155253) "a") (data (i32.const 155256) "a") (data (i32.const 155259) "a") (data (i32.const 155262) "a") (data (i32.const 155265) "a") (data (i32.const 155268) "a") (data (i32.const 155271) "a") (data (i32.const 155274) "a") (data (i32.const 155277) "a") (data (i32.const 155280) "a") (data (i32.const 155283) "a") (data (i32.const 155286) "a") (data (i32.const 155289) "a") (data (i32.const 155292) "a") (data (i32.const 155295) "a") (data (i32.const 155298) "a") (data (i32.const 155301) "a") (data (i32.const 155304) "a") (data (i32.const 155307) "a") (data (i32.const 155310) "a") (data (i32.const 155313) "a") (data (i32.const 155316) "a") (data (i32.const 155319) "a") (data (i32.const 155322) "a") (data (i32.const 155325) "a") (data (i32.const 155328) "a") (data (i32.const 155331) "a") (data (i32.const 155334) "a") (data (i32.const 155337) "a") (data (i32.const 155340) "a") (data (i32.const 155343) "a") (data (i32.const 155346) "a") (data (i32.const 155349) "a") (data (i32.const 155352) "a") (data (i32.const 155355) "a") (data (i32.const 155358) "a") (data (i32.const 155361) "a") (data (i32.const 155364) "a") (data (i32.const 155367) "a") (data (i32.const 155370) "a") (data (i32.const 155373) "a") (data (i32.const 155376) "a") (data (i32.const 155379) "a") (data (i32.const 155382) "a") (data (i32.const 155385) "a") (data (i32.const 155388) "a") (data (i32.const 155391) "a") (data (i32.const 155394) "a") (data (i32.const 155397) "a") (data (i32.const 155400) "a") (data (i32.const 155403) "a") (data (i32.const 155406) "a") (data (i32.const 155409) "a") (data (i32.const 155412) "a") (data (i32.const 155415) "a") (data (i32.const 155418) "a") (data (i32.const 155421) "a") (data (i32.const 155424) "a") (data (i32.const 155427) "a") (data (i32.const 155430) "a") (data (i32.const 155433) "a") (data (i32.const 155436) "a") (data (i32.const 155439) "a") (data (i32.const 155442) "a") (data (i32.const 155445) "a") (data (i32.const 155448) "a") (data (i32.const 155451) "a") (data (i32.const 155454) "a") (data (i32.const 155457) "a") (data (i32.const 155460) "a") (data (i32.const 155463) "a") (data (i32.const 155466) "a") (data (i32.const 155469) "a") (data (i32.const 155472) "a") (data (i32.const 155475) "a") (data (i32.const 155478) "a") (data (i32.const 155481) "a") (data (i32.const 155484) "a") (data (i32.const 155487) "a") (data (i32.const 155490) "a") (data (i32.const 155493) "a") (data (i32.const 155496) "a") (data (i32.const 155499) "a") (data (i32.const 155502) "a") (data (i32.const 155505) "a") (data (i32.const 155508) "a") (data (i32.const 155511) "a") (data (i32.const 155514) "a") (data (i32.const 155517) "a") (data (i32.const 155520) "a") (data (i32.const 155523) "a") (data (i32.const 155526) "a") (data (i32.const 155529) "a") (data (i32.const 155532) "a") (data (i32.const 155535) "a") (data (i32.const 155538) "a") (data (i32.const 155541) "a") (data (i32.const 155544) "a") (data (i32.const 155547) "a") (data (i32.const 155550) "a") (data (i32.const 155553) "a") (data (i32.const 155556) "a") (data (i32.const 155559) "a") (data (i32.const 155562) "a") (data (i32.const 155565) "a") (data (i32.const 155568) "a") (data (i32.const 155571) "a") (data (i32.const 155574) "a") (data (i32.const 155577) "a") (data (i32.const 155580) "a") (data (i32.const 155583) "a") (data (i32.const 155586) "a") (data (i32.const 155589) "a") (data (i32.const 155592) "a") (data (i32.const 155595) "a") (data (i32.const 155598) "a") (data (i32.const 155601) "a") (data (i32.const 155604) "a") (data (i32.const 155607) "a") (data (i32.const 155610) "a") (data (i32.const 155613) "a") (data (i32.const 155616) "a") (data (i32.const 155619) "a") (data (i32.const 155622) "a") (data (i32.const 155625) "a") (data (i32.const 155628) "a") (data (i32.const 155631) "a") (data (i32.const 155634) "a") (data (i32.const 155637) "a") (data (i32.const 155640) "a") (data (i32.const 155643) "a") (data (i32.const 155646) "a") (data (i32.const 155649) "a") (data (i32.const 155652) "a") (data (i32.const 155655) "a") (data (i32.const 155658) "a") (data (i32.const 155661) "a") (data (i32.const 155664) "a") (data (i32.const 155667) "a") (data (i32.const 155670) "a") (data (i32.const 155673) "a") (data (i32.const 155676) "a") (data (i32.const 155679) "a") (data (i32.const 155682) "a") (data (i32.const 155685) "a") (data (i32.const 155688) "a") (data (i32.const 155691) "a") (data (i32.const 155694) "a") (data (i32.const 155697) "a") (data (i32.const 155700) "a") (data (i32.const 155703) "a") (data (i32.const 155706) "a") (data (i32.const 155709) "a") (data (i32.const 155712) "a") (data (i32.const 155715) "a") (data (i32.const 155718) "a") (data (i32.const 155721) "a") (data (i32.const 155724) "a") (data (i32.const 155727) "a") (data (i32.const 155730) "a") (data (i32.const 155733) "a") (data (i32.const 155736) "a") (data (i32.const 155739) "a") (data (i32.const 155742) "a") (data (i32.const 155745) "a") (data (i32.const 155748) "a") (data (i32.const 155751) "a") (data (i32.const 155754) "a") (data (i32.const 155757) "a") (data (i32.const 155760) "a") (data (i32.const 155763) "a") (data (i32.const 155766) "a") (data (i32.const 155769) "a") (data (i32.const 155772) "a") (data (i32.const 155775) "a") (data (i32.const 155778) "a") (data (i32.const 155781) "a") (data (i32.const 155784) "a") (data (i32.const 155787) "a") (data (i32.const 155790) "a") (data (i32.const 155793) "a") (data (i32.const 155796) "a") (data (i32.const 155799) "a") (data (i32.const 155802) "a") (data (i32.const 155805) "a") (data (i32.const 155808) "a") (data (i32.const 155811) "a") (data (i32.const 155814) "a") (data (i32.const 155817) "a") (data (i32.const 155820) "a") (data (i32.const 155823) "a") (data (i32.const 155826) "a") (data (i32.const 155829) "a") (data (i32.const 155832) "a") (data (i32.const 155835) "a") (data (i32.const 155838) "a") (data (i32.const 155841) "a") (data (i32.const 155844) "a") (data (i32.const 155847) "a") (data (i32.const 155850) "a") (data (i32.const 155853) "a") (data (i32.const 155856) "a") (data (i32.const 155859) "a") (data (i32.const 155862) "a") (data (i32.const 155865) "a") (data (i32.const 155868) "a") (data (i32.const 155871) "a") (data (i32.const 155874) "a") (data (i32.const 155877) "a") (data (i32.const 155880) "a") (data (i32.const 155883) "a") (data (i32.const 155886) "a") (data (i32.const 155889) "a") (data (i32.const 155892) "a") (data (i32.const 155895) "a") (data (i32.const 155898) "a") (data (i32.const 155901) "a") (data (i32.const 155904) "a") (data (i32.const 155907) "a") (data (i32.const 155910) "a") (data (i32.const 155913) "a") (data (i32.const 155916) "a") (data (i32.const 155919) "a") (data (i32.const 155922) "a") (data (i32.const 155925) "a") (data (i32.const 155928) "a") (data (i32.const 155931) "a") (data (i32.const 155934) "a") (data (i32.const 155937) "a") (data (i32.const 155940) "a") (data (i32.const 155943) "a") (data (i32.const 155946) "a") (data (i32.const 155949) "a") (data (i32.const 155952) "a") (data (i32.const 155955) "a") (data (i32.const 155958) "a") (data (i32.const 155961) "a") (data (i32.const 155964) "a") (data (i32.const 155967) "a") (data (i32.const 155970) "a") (data (i32.const 155973) "a") (data (i32.const 155976) "a") (data (i32.const 155979) "a") (data (i32.const 155982) "a") (data (i32.const 155985) "a") (data (i32.const 155988) "a") (data (i32.const 155991) "a") (data (i32.const 155994) "a") (data (i32.const 155997) "a") (data (i32.const 156000) "a") (data (i32.const 156003) "a") (data (i32.const 156006) "a") (data (i32.const 156009) "a") (data (i32.const 156012) "a") (data (i32.const 156015) "a") (data (i32.const 156018) "a") (data (i32.const 156021) "a") (data (i32.const 156024) "a") (data (i32.const 156027) "a") (data (i32.const 156030) "a") (data (i32.const 156033) "a") (data (i32.const 156036) "a") (data (i32.const 156039) "a") (data (i32.const 156042) "a") (data (i32.const 156045) "a") (data (i32.const 156048) "a") (data (i32.const 156051) "a") (data (i32.const 156054) "a") (data (i32.const 156057) "a") (data (i32.const 156060) "a") (data (i32.const 156063) "a") (data (i32.const 156066) "a") (data (i32.const 156069) "a") (data (i32.const 156072) "a") (data (i32.const 156075) "a") (data (i32.const 156078) "a") (data (i32.const 156081) "a") (data (i32.const 156084) "a") (data (i32.const 156087) "a") (data (i32.const 156090) "a") (data (i32.const 156093) "a") (data (i32.const 156096) "a") (data (i32.const 156099) "a") (data (i32.const 156102) "a") (data (i32.const 156105) "a") (data (i32.const 156108) "a") (data (i32.const 156111) "a") (data (i32.const 156114) "a") (data (i32.const 156117) "a") (data (i32.const 156120) "a") (data (i32.const 156123) "a") (data (i32.const 156126) "a") (data (i32.const 156129) "a") (data (i32.const 156132) "a") (data (i32.const 156135) "a") (data (i32.const 156138) "a") (data (i32.const 156141) "a") (data (i32.const 156144) "a") (data (i32.const 156147) "a") (data (i32.const 156150) "a") (data (i32.const 156153) "a") (data (i32.const 156156) "a") (data (i32.const 156159) "a") (data (i32.const 156162) "a") (data (i32.const 156165) "a") (data (i32.const 156168) "a") (data (i32.const 156171) "a") (data (i32.const 156174) "a") (data (i32.const 156177) "a") (data (i32.const 156180) "a") (data (i32.const 156183) "a") (data (i32.const 156186) "a") (data (i32.const 156189) "a") (data (i32.const 156192) "a") (data (i32.const 156195) "a") (data (i32.const 156198) "a") (data (i32.const 156201) "a") (data (i32.const 156204) "a") (data (i32.const 156207) "a") (data (i32.const 156210) "a") (data (i32.const 156213) "a") (data (i32.const 156216) "a") (data (i32.const 156219) "a") (data (i32.const 156222) "a") (data (i32.const 156225) "a") (data (i32.const 156228) "a") (data (i32.const 156231) "a") (data (i32.const 156234) "a") (data (i32.const 156237) "a") (data (i32.const 156240) "a") (data (i32.const 156243) "a") (data (i32.const 156246) "a") (data (i32.const 156249) "a") (data (i32.const 156252) "a") (data (i32.const 156255) "a") (data (i32.const 156258) "a") (data (i32.const 156261) "a") (data (i32.const 156264) "a") (data (i32.const 156267) "a") (data (i32.const 156270) "a") (data (i32.const 156273) "a") (data (i32.const 156276) "a") (data (i32.const 156279) "a") (data (i32.const 156282) "a") (data (i32.const 156285) "a") (data (i32.const 156288) "a") (data (i32.const 156291) "a") (data (i32.const 156294) "a") (data (i32.const 156297) "a") (data (i32.const 156300) "a") (data (i32.const 156303) "a") (data (i32.const 156306) "a") (data (i32.const 156309) "a") (data (i32.const 156312) "a") (data (i32.const 156315) "a") (data (i32.const 156318) "a") (data (i32.const 156321) "a") (data (i32.const 156324) "a") (data (i32.const 156327) "a") (data (i32.const 156330) "a") (data (i32.const 156333) "a") (data (i32.const 156336) "a") (data (i32.const 156339) "a") (data (i32.const 156342) "a") (data (i32.const 156345) "a") (data (i32.const 156348) "a") (data (i32.const 156351) "a") (data (i32.const 156354) "a") (data (i32.const 156357) "a") (data (i32.const 156360) "a") (data (i32.const 156363) "a") (data (i32.const 156366) "a") (data (i32.const 156369) "a") (data (i32.const 156372) "a") (data (i32.const 156375) "a") (data (i32.const 156378) "a") (data (i32.const 156381) "a") (data (i32.const 156384) "a") (data (i32.const 156387) "a") (data (i32.const 156390) "a") (data (i32.const 156393) "a") (data (i32.const 156396) "a") (data (i32.const 156399) "a") (data (i32.const 156402) "a") (data (i32.const 156405) "a") (data (i32.const 156408) "a") (data (i32.const 156411) "a") (data (i32.const 156414) "a") (data (i32.const 156417) "a") (data (i32.const 156420) "a") (data (i32.const 156423) "a") (data (i32.const 156426) "a") (data (i32.const 156429) "a") (data (i32.const 156432) "a") (data (i32.const 156435) "a") (data (i32.const 156438) "a") (data (i32.const 156441) "a") (data (i32.const 156444) "a") (data (i32.const 156447) "a") (data (i32.const 156450) "a") (data (i32.const 156453) "a") (data (i32.const 156456) "a") (data (i32.const 156459) "a") (data (i32.const 156462) "a") (data (i32.const 156465) "a") (data (i32.const 156468) "a") (data (i32.const 156471) "a") (data (i32.const 156474) "a") (data (i32.const 156477) "a") (data (i32.const 156480) "a") (data (i32.const 156483) "a") (data (i32.const 156486) "a") (data (i32.const 156489) "a") (data (i32.const 156492) "a") (data (i32.const 156495) "a") (data (i32.const 156498) "a") (data (i32.const 156501) "a") (data (i32.const 156504) "a") (data (i32.const 156507) "a") (data (i32.const 156510) "a") (data (i32.const 156513) "a") (data (i32.const 156516) "a") (data (i32.const 156519) "a") (data (i32.const 156522) "a") (data (i32.const 156525) "a") (data (i32.const 156528) "a") (data (i32.const 156531) "a") (data (i32.const 156534) "a") (data (i32.const 156537) "a") (data (i32.const 156540) "a") (data (i32.const 156543) "a") (data (i32.const 156546) "a") (data (i32.const 156549) "a") (data (i32.const 156552) "a") (data (i32.const 156555) "a") (data (i32.const 156558) "a") (data (i32.const 156561) "a") (data (i32.const 156564) "a") (data (i32.const 156567) "a") (data (i32.const 156570) "a") (data (i32.const 156573) "a") (data (i32.const 156576) "a") (data (i32.const 156579) "a") (data (i32.const 156582) "a") (data (i32.const 156585) "a") (data (i32.const 156588) "a") (data (i32.const 156591) "a") (data (i32.const 156594) "a") (data (i32.const 156597) "a") (data (i32.const 156600) "a") (data (i32.const 156603) "a") (data (i32.const 156606) "a") (data (i32.const 156609) "a") (data (i32.const 156612) "a") (data (i32.const 156615) "a") (data (i32.const 156618) "a") (data (i32.const 156621) "a") (data (i32.const 156624) "a") (data (i32.const 156627) "a") (data (i32.const 156630) "a") (data (i32.const 156633) "a") (data (i32.const 156636) "a") (data (i32.const 156639) "a") (data (i32.const 156642) "a") (data (i32.const 156645) "a") (data (i32.const 156648) "a") (data (i32.const 156651) "a") (data (i32.const 156654) "a") (data (i32.const 156657) "a") (data (i32.const 156660) "a") (data (i32.const 156663) "a") (data (i32.const 156666) "a") (data (i32.const 156669) "a") (data (i32.const 156672) "a") (data (i32.const 156675) "a") (data (i32.const 156678) "a") (data (i32.const 156681) "a") (data (i32.const 156684) "a") (data (i32.const 156687) "a") (data (i32.const 156690) "a") (data (i32.const 156693) "a") (data (i32.const 156696) "a") (data (i32.const 156699) "a") (data (i32.const 156702) "a") (data (i32.const 156705) "a") (data (i32.const 156708) "a") (data (i32.const 156711) "a") (data (i32.const 156714) "a") (data (i32.const 156717) "a") (data (i32.const 156720) "a") (data (i32.const 156723) "a") (data (i32.const 156726) "a") (data (i32.const 156729) "a") (data (i32.const 156732) "a") (data (i32.const 156735) "a") (data (i32.const 156738) "a") (data (i32.const 156741) "a") (data (i32.const 156744) "a") (data (i32.const 156747) "a") (data (i32.const 156750) "a") (data (i32.const 156753) "a") (data (i32.const 156756) "a") (data (i32.const 156759) "a") (data (i32.const 156762) "a") (data (i32.const 156765) "a") (data (i32.const 156768) "a") (data (i32.const 156771) "a") (data (i32.const 156774) "a") (data (i32.const 156777) "a") (data (i32.const 156780) "a") (data (i32.const 156783) "a") (data (i32.const 156786) "a") (data (i32.const 156789) "a") (data (i32.const 156792) "a") (data (i32.const 156795) "a") (data (i32.const 156798) "a") (data (i32.const 156801) "a") (data (i32.const 156804) "a") (data (i32.const 156807) "a") (data (i32.const 156810) "a") (data (i32.const 156813) "a") (data (i32.const 156816) "a") (data (i32.const 156819) "a") (data (i32.const 156822) "a") (data (i32.const 156825) "a") (data (i32.const 156828) "a") (data (i32.const 156831) "a") (data (i32.const 156834) "a") (data (i32.const 156837) "a") (data (i32.const 156840) "a") (data (i32.const 156843) "a") (data (i32.const 156846) "a") (data (i32.const 156849) "a") (data (i32.const 156852) "a") (data (i32.const 156855) "a") (data (i32.const 156858) "a") (data (i32.const 156861) "a") (data (i32.const 156864) "a") (data (i32.const 156867) "a") (data (i32.const 156870) "a") (data (i32.const 156873) "a") (data (i32.const 156876) "a") (data (i32.const 156879) "a") (data (i32.const 156882) "a") (data (i32.const 156885) "a") (data (i32.const 156888) "a") (data (i32.const 156891) "a") (data (i32.const 156894) "a") (data (i32.const 156897) "a") (data (i32.const 156900) "a") (data (i32.const 156903) "a") (data (i32.const 156906) "a") (data (i32.const 156909) "a") (data (i32.const 156912) "a") (data (i32.const 156915) "a") (data (i32.const 156918) "a") (data (i32.const 156921) "a") (data (i32.const 156924) "a") (data (i32.const 156927) "a") (data (i32.const 156930) "a") (data (i32.const 156933) "a") (data (i32.const 156936) "a") (data (i32.const 156939) "a") (data (i32.const 156942) "a") (data (i32.const 156945) "a") (data (i32.const 156948) "a") (data (i32.const 156951) "a") (data (i32.const 156954) "a") (data (i32.const 156957) "a") (data (i32.const 156960) "a") (data (i32.const 156963) "a") (data (i32.const 156966) "a") (data (i32.const 156969) "a") (data (i32.const 156972) "a") (data (i32.const 156975) "a") (data (i32.const 156978) "a") (data (i32.const 156981) "a") (data (i32.const 156984) "a") (data (i32.const 156987) "a") (data (i32.const 156990) "a") (data (i32.const 156993) "a") (data (i32.const 156996) "a") (data (i32.const 156999) "a") (data (i32.const 157002) "a") (data (i32.const 157005) "a") (data (i32.const 157008) "a") (data (i32.const 157011) "a") (data (i32.const 157014) "a") (data (i32.const 157017) "a") (data (i32.const 157020) "a") (data (i32.const 157023) "a") (data (i32.const 157026) "a") (data (i32.const 157029) "a") (data (i32.const 157032) "a") (data (i32.const 157035) "a") (data (i32.const 157038) "a") (data (i32.const 157041) "a") (data (i32.const 157044) "a") (data (i32.const 157047) "a") (data (i32.const 157050) "a") (data (i32.const 157053) "a") (data (i32.const 157056) "a") (data (i32.const 157059) "a") (data (i32.const 157062) "a") (data (i32.const 157065) "a") (data (i32.const 157068) "a") (data (i32.const 157071) "a") (data (i32.const 157074) "a") (data (i32.const 157077) "a") (data (i32.const 157080) "a") (data (i32.const 157083) "a") (data (i32.const 157086) "a") (data (i32.const 157089) "a") (data (i32.const 157092) "a") (data (i32.const 157095) "a") (data (i32.const 157098) "a") (data (i32.const 157101) "a") (data (i32.const 157104) "a") (data (i32.const 157107) "a") (data (i32.const 157110) "a") (data (i32.const 157113) "a") (data (i32.const 157116) "a") (data (i32.const 157119) "a") (data (i32.const 157122) "a") (data (i32.const 157125) "a") (data (i32.const 157128) "a") (data (i32.const 157131) "a") (data (i32.const 157134) "a") (data (i32.const 157137) "a") (data (i32.const 157140) "a") (data (i32.const 157143) "a") (data (i32.const 157146) "a") (data (i32.const 157149) "a") (data (i32.const 157152) "a") (data (i32.const 157155) "a") (data (i32.const 157158) "a") (data (i32.const 157161) "a") (data (i32.const 157164) "a") (data (i32.const 157167) "a") (data (i32.const 157170) "a") (data (i32.const 157173) "a") (data (i32.const 157176) "a") (data (i32.const 157179) "a") (data (i32.const 157182) "a") (data (i32.const 157185) "a") (data (i32.const 157188) "a") (data (i32.const 157191) "a") (data (i32.const 157194) "a") (data (i32.const 157197) "a") (data (i32.const 157200) "a") (data (i32.const 157203) "a") (data (i32.const 157206) "a") (data (i32.const 157209) "a") (data (i32.const 157212) "a") (data (i32.const 157215) "a") (data (i32.const 157218) "a") (data (i32.const 157221) "a") (data (i32.const 157224) "a") (data (i32.const 157227) "a") (data (i32.const 157230) "a") (data (i32.const 157233) "a") (data (i32.const 157236) "a") (data (i32.const 157239) "a") (data (i32.const 157242) "a") (data (i32.const 157245) "a") (data (i32.const 157248) "a") (data (i32.const 157251) "a") (data (i32.const 157254) "a") (data (i32.const 157257) "a") (data (i32.const 157260) "a") (data (i32.const 157263) "a") (data (i32.const 157266) "a") (data (i32.const 157269) "a") (data (i32.const 157272) "a") (data (i32.const 157275) "a") (data (i32.const 157278) "a") (data (i32.const 157281) "a") (data (i32.const 157284) "a") (data (i32.const 157287) "a") (data (i32.const 157290) "a") (data (i32.const 157293) "a") (data (i32.const 157296) "a") (data (i32.const 157299) "a") (data (i32.const 157302) "a") (data (i32.const 157305) "a") (data (i32.const 157308) "a") (data (i32.const 157311) "a") (data (i32.const 157314) "a") (data (i32.const 157317) "a") (data (i32.const 157320) "a") (data (i32.const 157323) "a") (data (i32.const 157326) "a") (data (i32.const 157329) "a") (data (i32.const 157332) "a") (data (i32.const 157335) "a") (data (i32.const 157338) "a") (data (i32.const 157341) "a") (data (i32.const 157344) "a") (data (i32.const 157347) "a") (data (i32.const 157350) "a") (data (i32.const 157353) "a") (data (i32.const 157356) "a") (data (i32.const 157359) "a") (data (i32.const 157362) "a") (data (i32.const 157365) "a") (data (i32.const 157368) "a") (data (i32.const 157371) "a") (data (i32.const 157374) "a") (data (i32.const 157377) "a") (data (i32.const 157380) "a") (data (i32.const 157383) "a") (data (i32.const 157386) "a") (data (i32.const 157389) "a") (data (i32.const 157392) "a") (data (i32.const 157395) "a") (data (i32.const 157398) "a") (data (i32.const 157401) "a") (data (i32.const 157404) "a") (data (i32.const 157407) "a") (data (i32.const 157410) "a") (data (i32.const 157413) "a") (data (i32.const 157416) "a") (data (i32.const 157419) "a") (data (i32.const 157422) "a") (data (i32.const 157425) "a") (data (i32.const 157428) "a") (data (i32.const 157431) "a") (data (i32.const 157434) "a") (data (i32.const 157437) "a") (data (i32.const 157440) "a") (data (i32.const 157443) "a") (data (i32.const 157446) "a") (data (i32.const 157449) "a") (data (i32.const 157452) "a") (data (i32.const 157455) "a") (data (i32.const 157458) "a") (data (i32.const 157461) "a") (data (i32.const 157464) "a") (data (i32.const 157467) "a") (data (i32.const 157470) "a") (data (i32.const 157473) "a") (data (i32.const 157476) "a") (data (i32.const 157479) "a") (data (i32.const 157482) "a") (data (i32.const 157485) "a") (data (i32.const 157488) "a") (data (i32.const 157491) "a") (data (i32.const 157494) "a") (data (i32.const 157497) "a") (data (i32.const 157500) "a") (data (i32.const 157503) "a") (data (i32.const 157506) "a") (data (i32.const 157509) "a") (data (i32.const 157512) "a") (data (i32.const 157515) "a") (data (i32.const 157518) "a") (data (i32.const 157521) "a") (data (i32.const 157524) "a") (data (i32.const 157527) "a") (data (i32.const 157530) "a") (data (i32.const 157533) "a") (data (i32.const 157536) "a") (data (i32.const 157539) "a") (data (i32.const 157542) "a") (data (i32.const 157545) "a") (data (i32.const 157548) "a") (data (i32.const 157551) "a") (data (i32.const 157554) "a") (data (i32.const 157557) "a") (data (i32.const 157560) "a") (data (i32.const 157563) "a") (data (i32.const 157566) "a") (data (i32.const 157569) "a") (data (i32.const 157572) "a") (data (i32.const 157575) "a") (data (i32.const 157578) "a") (data (i32.const 157581) "a") (data (i32.const 157584) "a") (data (i32.const 157587) "a") (data (i32.const 157590) "a") (data (i32.const 157593) "a") (data (i32.const 157596) "a") (data (i32.const 157599) "a") (data (i32.const 157602) "a") (data (i32.const 157605) "a") (data (i32.const 157608) "a") (data (i32.const 157611) "a") (data (i32.const 157614) "a") (data (i32.const 157617) "a") (data (i32.const 157620) "a") (data (i32.const 157623) "a") (data (i32.const 157626) "a") (data (i32.const 157629) "a") (data (i32.const 157632) "a") (data (i32.const 157635) "a") (data (i32.const 157638) "a") (data (i32.const 157641) "a") (data (i32.const 157644) "a") (data (i32.const 157647) "a") (data (i32.const 157650) "a") (data (i32.const 157653) "a") (data (i32.const 157656) "a") (data (i32.const 157659) "a") (data (i32.const 157662) "a") (data (i32.const 157665) "a") (data (i32.const 157668) "a") (data (i32.const 157671) "a") (data (i32.const 157674) "a") (data (i32.const 157677) "a") (data (i32.const 157680) "a") (data (i32.const 157683) "a") (data (i32.const 157686) "a") (data (i32.const 157689) "a") (data (i32.const 157692) "a") (data (i32.const 157695) "a") (data (i32.const 157698) "a") (data (i32.const 157701) "a") (data (i32.const 157704) "a") (data (i32.const 157707) "a") (data (i32.const 157710) "a") (data (i32.const 157713) "a") (data (i32.const 157716) "a") (data (i32.const 157719) "a") (data (i32.const 157722) "a") (data (i32.const 157725) "a") (data (i32.const 157728) "a") (data (i32.const 157731) "a") (data (i32.const 157734) "a") (data (i32.const 157737) "a") (data (i32.const 157740) "a") (data (i32.const 157743) "a") (data (i32.const 157746) "a") (data (i32.const 157749) "a") (data (i32.const 157752) "a") (data (i32.const 157755) "a") (data (i32.const 157758) "a") (data (i32.const 157761) "a") (data (i32.const 157764) "a") (data (i32.const 157767) "a") (data (i32.const 157770) "a") (data (i32.const 157773) "a") (data (i32.const 157776) "a") (data (i32.const 157779) "a") (data (i32.const 157782) "a") (data (i32.const 157785) "a") (data (i32.const 157788) "a") (data (i32.const 157791) "a") (data (i32.const 157794) "a") (data (i32.const 157797) "a") (data (i32.const 157800) "a") (data (i32.const 157803) "a") (data (i32.const 157806) "a") (data (i32.const 157809) "a") (data (i32.const 157812) "a") (data (i32.const 157815) "a") (data (i32.const 157818) "a") (data (i32.const 157821) "a") (data (i32.const 157824) "a") (data (i32.const 157827) "a") (data (i32.const 157830) "a") (data (i32.const 157833) "a") (data (i32.const 157836) "a") (data (i32.const 157839) "a") (data (i32.const 157842) "a") (data (i32.const 157845) "a") (data (i32.const 157848) "a") (data (i32.const 157851) "a") (data (i32.const 157854) "a") (data (i32.const 157857) "a") (data (i32.const 157860) "a") (data (i32.const 157863) "a") (data (i32.const 157866) "a") (data (i32.const 157869) "a") (data (i32.const 157872) "a") (data (i32.const 157875) "a") (data (i32.const 157878) "a") (data (i32.const 157881) "a") (data (i32.const 157884) "a") (data (i32.const 157887) "a") (data (i32.const 157890) "a") (data (i32.const 157893) "a") (data (i32.const 157896) "a") (data (i32.const 157899) "a") (data (i32.const 157902) "a") (data (i32.const 157905) "a") (data (i32.const 157908) "a") (data (i32.const 157911) "a") (data (i32.const 157914) "a") (data (i32.const 157917) "a") (data (i32.const 157920) "a") (data (i32.const 157923) "a") (data (i32.const 157926) "a") (data (i32.const 157929) "a") (data (i32.const 157932) "a") (data (i32.const 157935) "a") (data (i32.const 157938) "a") (data (i32.const 157941) "a") (data (i32.const 157944) "a") (data (i32.const 157947) "a") (data (i32.const 157950) "a") (data (i32.const 157953) "a") (data (i32.const 157956) "a") (data (i32.const 157959) "a") (data (i32.const 157962) "a") (data (i32.const 157965) "a") (data (i32.const 157968) "a") (data (i32.const 157971) "a") (data (i32.const 157974) "a") (data (i32.const 157977) "a") (data (i32.const 157980) "a") (data (i32.const 157983) "a") (data (i32.const 157986) "a") (data (i32.const 157989) "a") (data (i32.const 157992) "a") (data (i32.const 157995) "a") (data (i32.const 157998) "a") (data (i32.const 158001) "a") (data (i32.const 158004) "a") (data (i32.const 158007) "a") (data (i32.const 158010) "a") (data (i32.const 158013) "a") (data (i32.const 158016) "a") (data (i32.const 158019) "a") (data (i32.const 158022) "a") (data (i32.const 158025) "a") (data (i32.const 158028) "a") (data (i32.const 158031) "a") (data (i32.const 158034) "a") (data (i32.const 158037) "a") (data (i32.const 158040) "a") (data (i32.const 158043) "a") (data (i32.const 158046) "a") (data (i32.const 158049) "a") (data (i32.const 158052) "a") (data (i32.const 158055) "a") (data (i32.const 158058) "a") (data (i32.const 158061) "a") (data (i32.const 158064) "a") (data (i32.const 158067) "a") (data (i32.const 158070) "a") (data (i32.const 158073) "a") (data (i32.const 158076) "a") (data (i32.const 158079) "a") (data (i32.const 158082) "a") (data (i32.const 158085) "a") (data (i32.const 158088) "a") (data (i32.const 158091) "a") (data (i32.const 158094) "a") (data (i32.const 158097) "a") (data (i32.const 158100) "a") (data (i32.const 158103) "a") (data (i32.const 158106) "a") (data (i32.const 158109) "a") (data (i32.const 158112) "a") (data (i32.const 158115) "a") (data (i32.const 158118) "a") (data (i32.const 158121) "a") (data (i32.const 158124) "a") (data (i32.const 158127) "a") (data (i32.const 158130) "a") (data (i32.const 158133) "a") (data (i32.const 158136) "a") (data (i32.const 158139) "a") (data (i32.const 158142) "a") (data (i32.const 158145) "a") (data (i32.const 158148) "a") (data (i32.const 158151) "a") (data (i32.const 158154) "a") (data (i32.const 158157) "a") (data (i32.const 158160) "a") (data (i32.const 158163) "a") (data (i32.const 158166) "a") (data (i32.const 158169) "a") (data (i32.const 158172) "a") (data (i32.const 158175) "a") (data (i32.const 158178) "a") (data (i32.const 158181) "a") (data (i32.const 158184) "a") (data (i32.const 158187) "a") (data (i32.const 158190) "a") (data (i32.const 158193) "a") (data (i32.const 158196) "a") (data (i32.const 158199) "a") (data (i32.const 158202) "a") (data (i32.const 158205) "a") (data (i32.const 158208) "a") (data (i32.const 158211) "a") (data (i32.const 158214) "a") (data (i32.const 158217) "a") (data (i32.const 158220) "a") (data (i32.const 158223) "a") (data (i32.const 158226) "a") (data (i32.const 158229) "a") (data (i32.const 158232) "a") (data (i32.const 158235) "a") (data (i32.const 158238) "a") (data (i32.const 158241) "a") (data (i32.const 158244) "a") (data (i32.const 158247) "a") (data (i32.const 158250) "a") (data (i32.const 158253) "a") (data (i32.const 158256) "a") (data (i32.const 158259) "a") (data (i32.const 158262) "a") (data (i32.const 158265) "a") (data (i32.const 158268) "a") (data (i32.const 158271) "a") (data (i32.const 158274) "a") (data (i32.const 158277) "a") (data (i32.const 158280) "a") (data (i32.const 158283) "a") (data (i32.const 158286) "a") (data (i32.const 158289) "a") (data (i32.const 158292) "a") (data (i32.const 158295) "a") (data (i32.const 158298) "a") (data (i32.const 158301) "a") (data (i32.const 158304) "a") (data (i32.const 158307) "a") (data (i32.const 158310) "a") (data (i32.const 158313) "a") (data (i32.const 158316) "a") (data (i32.const 158319) "a") (data (i32.const 158322) "a") (data (i32.const 158325) "a") (data (i32.const 158328) "a") (data (i32.const 158331) "a") (data (i32.const 158334) "a") (data (i32.const 158337) "a") (data (i32.const 158340) "a") (data (i32.const 158343) "a") (data (i32.const 158346) "a") (data (i32.const 158349) "a") (data (i32.const 158352) "a") (data (i32.const 158355) "a") (data (i32.const 158358) "a") (data (i32.const 158361) "a") (data (i32.const 158364) "a") (data (i32.const 158367) "a") (data (i32.const 158370) "a") (data (i32.const 158373) "a") (data (i32.const 158376) "a") (data (i32.const 158379) "a") (data (i32.const 158382) "a") (data (i32.const 158385) "a") (data (i32.const 158388) "a") (data (i32.const 158391) "a") (data (i32.const 158394) "a") (data (i32.const 158397) "a") (data (i32.const 158400) "a") (data (i32.const 158403) "a") (data (i32.const 158406) "a") (data (i32.const 158409) "a") (data (i32.const 158412) "a") (data (i32.const 158415) "a") (data (i32.const 158418) "a") (data (i32.const 158421) "a") (data (i32.const 158424) "a") (data (i32.const 158427) "a") (data (i32.const 158430) "a") (data (i32.const 158433) "a") (data (i32.const 158436) "a") (data (i32.const 158439) "a") (data (i32.const 158442) "a") (data (i32.const 158445) "a") (data (i32.const 158448) "a") (data (i32.const 158451) "a") (data (i32.const 158454) "a") (data (i32.const 158457) "a") (data (i32.const 158460) "a") (data (i32.const 158463) "a") (data (i32.const 158466) "a") (data (i32.const 158469) "a") (data (i32.const 158472) "a") (data (i32.const 158475) "a") (data (i32.const 158478) "a") (data (i32.const 158481) "a") (data (i32.const 158484) "a") (data (i32.const 158487) "a") (data (i32.const 158490) "a") (data (i32.const 158493) "a") (data (i32.const 158496) "a") (data (i32.const 158499) "a") (data (i32.const 158502) "a") (data (i32.const 158505) "a") (data (i32.const 158508) "a") (data (i32.const 158511) "a") (data (i32.const 158514) "a") (data (i32.const 158517) "a") (data (i32.const 158520) "a") (data (i32.const 158523) "a") (data (i32.const 158526) "a") (data (i32.const 158529) "a") (data (i32.const 158532) "a") (data (i32.const 158535) "a") (data (i32.const 158538) "a") (data (i32.const 158541) "a") (data (i32.const 158544) "a") (data (i32.const 158547) "a") (data (i32.const 158550) "a") (data (i32.const 158553) "a") (data (i32.const 158556) "a") (data (i32.const 158559) "a") (data (i32.const 158562) "a") (data (i32.const 158565) "a") (data (i32.const 158568) "a") (data (i32.const 158571) "a") (data (i32.const 158574) "a") (data (i32.const 158577) "a") (data (i32.const 158580) "a") (data (i32.const 158583) "a") (data (i32.const 158586) "a") (data (i32.const 158589) "a") (data (i32.const 158592) "a") (data (i32.const 158595) "a") (data (i32.const 158598) "a") (data (i32.const 158601) "a") (data (i32.const 158604) "a") (data (i32.const 158607) "a") (data (i32.const 158610) "a") (data (i32.const 158613) "a") (data (i32.const 158616) "a") (data (i32.const 158619) "a") (data (i32.const 158622) "a") (data (i32.const 158625) "a") (data (i32.const 158628) "a") (data (i32.const 158631) "a") (data (i32.const 158634) "a") (data (i32.const 158637) "a") (data (i32.const 158640) "a") (data (i32.const 158643) "a") (data (i32.const 158646) "a") (data (i32.const 158649) "a") (data (i32.const 158652) "a") (data (i32.const 158655) "a") (data (i32.const 158658) "a") (data (i32.const 158661) "a") (data (i32.const 158664) "a") (data (i32.const 158667) "a") (data (i32.const 158670) "a") (data (i32.const 158673) "a") (data (i32.const 158676) "a") (data (i32.const 158679) "a") (data (i32.const 158682) "a") (data (i32.const 158685) "a") (data (i32.const 158688) "a") (data (i32.const 158691) "a") (data (i32.const 158694) "a") (data (i32.const 158697) "a") (data (i32.const 158700) "a") (data (i32.const 158703) "a") (data (i32.const 158706) "a") (data (i32.const 158709) "a") (data (i32.const 158712) "a") (data (i32.const 158715) "a") (data (i32.const 158718) "a") (data (i32.const 158721) "a") (data (i32.const 158724) "a") (data (i32.const 158727) "a") (data (i32.const 158730) "a") (data (i32.const 158733) "a") (data (i32.const 158736) "a") (data (i32.const 158739) "a") (data (i32.const 158742) "a") (data (i32.const 158745) "a") (data (i32.const 158748) "a") (data (i32.const 158751) "a") (data (i32.const 158754) "a") (data (i32.const 158757) "a") (data (i32.const 158760) "a") (data (i32.const 158763) "a") (data (i32.const 158766) "a") (data (i32.const 158769) "a") (data (i32.const 158772) "a") (data (i32.const 158775) "a") (data (i32.const 158778) "a") (data (i32.const 158781) "a") (data (i32.const 158784) "a") (data (i32.const 158787) "a") (data (i32.const 158790) "a") (data (i32.const 158793) "a") (data (i32.const 158796) "a") (data (i32.const 158799) "a") (data (i32.const 158802) "a") (data (i32.const 158805) "a") (data (i32.const 158808) "a") (data (i32.const 158811) "a") (data (i32.const 158814) "a") (data (i32.const 158817) "a") (data (i32.const 158820) "a") (data (i32.const 158823) "a") (data (i32.const 158826) "a") (data (i32.const 158829) "a") (data (i32.const 158832) "a") (data (i32.const 158835) "a") (data (i32.const 158838) "a") (data (i32.const 158841) "a") (data (i32.const 158844) "a") (data (i32.const 158847) "a") (data (i32.const 158850) "a") (data (i32.const 158853) "a") (data (i32.const 158856) "a") (data (i32.const 158859) "a") (data (i32.const 158862) "a") (data (i32.const 158865) "a") (data (i32.const 158868) "a") (data (i32.const 158871) "a") (data (i32.const 158874) "a") (data (i32.const 158877) "a") (data (i32.const 158880) "a") (data (i32.const 158883) "a") (data (i32.const 158886) "a") (data (i32.const 158889) "a") (data (i32.const 158892) "a") (data (i32.const 158895) "a") (data (i32.const 158898) "a") (data (i32.const 158901) "a") (data (i32.const 158904) "a") (data (i32.const 158907) "a") (data (i32.const 158910) "a") (data (i32.const 158913) "a") (data (i32.const 158916) "a") (data (i32.const 158919) "a") (data (i32.const 158922) "a") (data (i32.const 158925) "a") (data (i32.const 158928) "a") (data (i32.const 158931) "a") (data (i32.const 158934) "a") (data (i32.const 158937) "a") (data (i32.const 158940) "a") (data (i32.const 158943) "a") (data (i32.const 158946) "a") (data (i32.const 158949) "a") (data (i32.const 158952) "a") (data (i32.const 158955) "a") (data (i32.const 158958) "a") (data (i32.const 158961) "a") (data (i32.const 158964) "a") (data (i32.const 158967) "a") (data (i32.const 158970) "a") (data (i32.const 158973) "a") (data (i32.const 158976) "a") (data (i32.const 158979) "a") (data (i32.const 158982) "a") (data (i32.const 158985) "a") (data (i32.const 158988) "a") (data (i32.const 158991) "a") (data (i32.const 158994) "a") (data (i32.const 158997) "a") (data (i32.const 159000) "a") (data (i32.const 159003) "a") (data (i32.const 159006) "a") (data (i32.const 159009) "a") (data (i32.const 159012) "a") (data (i32.const 159015) "a") (data (i32.const 159018) "a") (data (i32.const 159021) "a") (data (i32.const 159024) "a") (data (i32.const 159027) "a") (data (i32.const 159030) "a") (data (i32.const 159033) "a") (data (i32.const 159036) "a") (data (i32.const 159039) "a") (data (i32.const 159042) "a") (data (i32.const 159045) "a") (data (i32.const 159048) "a") (data (i32.const 159051) "a") (data (i32.const 159054) "a") (data (i32.const 159057) "a") (data (i32.const 159060) "a") (data (i32.const 159063) "a") (data (i32.const 159066) "a") (data (i32.const 159069) "a") (data (i32.const 159072) "a") (data (i32.const 159075) "a") (data (i32.const 159078) "a") (data (i32.const 159081) "a") (data (i32.const 159084) "a") (data (i32.const 159087) "a") (data (i32.const 159090) "a") (data (i32.const 159093) "a") (data (i32.const 159096) "a") (data (i32.const 159099) "a") (data (i32.const 159102) "a") (data (i32.const 159105) "a") (data (i32.const 159108) "a") (data (i32.const 159111) "a") (data (i32.const 159114) "a") (data (i32.const 159117) "a") (data (i32.const 159120) "a") (data (i32.const 159123) "a") (data (i32.const 159126) "a") (data (i32.const 159129) "a") (data (i32.const 159132) "a") (data (i32.const 159135) "a") (data (i32.const 159138) "a") (data (i32.const 159141) "a") (data (i32.const 159144) "a") (data (i32.const 159147) "a") (data (i32.const 159150) "a") (data (i32.const 159153) "a") (data (i32.const 159156) "a") (data (i32.const 159159) "a") (data (i32.const 159162) "a") (data (i32.const 159165) "a") (data (i32.const 159168) "a") (data (i32.const 159171) "a") (data (i32.const 159174) "a") (data (i32.const 159177) "a") (data (i32.const 159180) "a") (data (i32.const 159183) "a") (data (i32.const 159186) "a") (data (i32.const 159189) "a") (data (i32.const 159192) "a") (data (i32.const 159195) "a") (data (i32.const 159198) "a") (data (i32.const 159201) "a") (data (i32.const 159204) "a") (data (i32.const 159207) "a") (data (i32.const 159210) "a") (data (i32.const 159213) "a") (data (i32.const 159216) "a") (data (i32.const 159219) "a") (data (i32.const 159222) "a") (data (i32.const 159225) "a") (data (i32.const 159228) "a") (data (i32.const 159231) "a") (data (i32.const 159234) "a") (data (i32.const 159237) "a") (data (i32.const 159240) "a") (data (i32.const 159243) "a") (data (i32.const 159246) "a") (data (i32.const 159249) "a") (data (i32.const 159252) "a") (data (i32.const 159255) "a") (data (i32.const 159258) "a") (data (i32.const 159261) "a") (data (i32.const 159264) "a") (data (i32.const 159267) "a") (data (i32.const 159270) "a") (data (i32.const 159273) "a") (data (i32.const 159276) "a") (data (i32.const 159279) "a") (data (i32.const 159282) "a") (data (i32.const 159285) "a") (data (i32.const 159288) "a") (data (i32.const 159291) "a") (data (i32.const 159294) "a") (data (i32.const 159297) "a") (data (i32.const 159300) "a") (data (i32.const 159303) "a") (data (i32.const 159306) "a") (data (i32.const 159309) "a") (data (i32.const 159312) "a") (data (i32.const 159315) "a") (data (i32.const 159318) "a") (data (i32.const 159321) "a") (data (i32.const 159324) "a") (data (i32.const 159327) "a") (data (i32.const 159330) "a") (data (i32.const 159333) "a") (data (i32.const 159336) "a") (data (i32.const 159339) "a") (data (i32.const 159342) "a") (data (i32.const 159345) "a") (data (i32.const 159348) "a") (data (i32.const 159351) "a") (data (i32.const 159354) "a") (data (i32.const 159357) "a") (data (i32.const 159360) "a") (data (i32.const 159363) "a") (data (i32.const 159366) "a") (data (i32.const 159369) "a") (data (i32.const 159372) "a") (data (i32.const 159375) "a") (data (i32.const 159378) "a") (data (i32.const 159381) "a") (data (i32.const 159384) "a") (data (i32.const 159387) "a") (data (i32.const 159390) "a") (data (i32.const 159393) "a") (data (i32.const 159396) "a") (data (i32.const 159399) "a") (data (i32.const 159402) "a") (data (i32.const 159405) "a") (data (i32.const 159408) "a") (data (i32.const 159411) "a") (data (i32.const 159414) "a") (data (i32.const 159417) "a") (data (i32.const 159420) "a") (data (i32.const 159423) "a") (data (i32.const 159426) "a") (data (i32.const 159429) "a") (data (i32.const 159432) "a") (data (i32.const 159435) "a") (data (i32.const 159438) "a") (data (i32.const 159441) "a") (data (i32.const 159444) "a") (data (i32.const 159447) "a") (data (i32.const 159450) "a") (data (i32.const 159453) "a") (data (i32.const 159456) "a") (data (i32.const 159459) "a") (data (i32.const 159462) "a") (data (i32.const 159465) "a") (data (i32.const 159468) "a") (data (i32.const 159471) "a") (data (i32.const 159474) "a") (data (i32.const 159477) "a") (data (i32.const 159480) "a") (data (i32.const 159483) "a") (data (i32.const 159486) "a") (data (i32.const 159489) "a") (data (i32.const 159492) "a") (data (i32.const 159495) "a") (data (i32.const 159498) "a") (data (i32.const 159501) "a") (data (i32.const 159504) "a") (data (i32.const 159507) "a") (data (i32.const 159510) "a") (data (i32.const 159513) "a") (data (i32.const 159516) "a") (data (i32.const 159519) "a") (data (i32.const 159522) "a") (data (i32.const 159525) "a") (data (i32.const 159528) "a") (data (i32.const 159531) "a") (data (i32.const 159534) "a") (data (i32.const 159537) "a") (data (i32.const 159540) "a") (data (i32.const 159543) "a") (data (i32.const 159546) "a") (data (i32.const 159549) "a") (data (i32.const 159552) "a") (data (i32.const 159555) "a") (data (i32.const 159558) "a") (data (i32.const 159561) "a") (data (i32.const 159564) "a") (data (i32.const 159567) "a") (data (i32.const 159570) "a") (data (i32.const 159573) "a") (data (i32.const 159576) "a") (data (i32.const 159579) "a") (data (i32.const 159582) "a") (data (i32.const 159585) "a") (data (i32.const 159588) "a") (data (i32.const 159591) "a") (data (i32.const 159594) "a") (data (i32.const 159597) "a") (data (i32.const 159600) "a") (data (i32.const 159603) "a") (data (i32.const 159606) "a") (data (i32.const 159609) "a") (data (i32.const 159612) "a") (data (i32.const 159615) "a") (data (i32.const 159618) "a") (data (i32.const 159621) "a") (data (i32.const 159624) "a") (data (i32.const 159627) "a") (data (i32.const 159630) "a") (data (i32.const 159633) "a") (data (i32.const 159636) "a") (data (i32.const 159639) "a") (data (i32.const 159642) "a") (data (i32.const 159645) "a") (data (i32.const 159648) "a") (data (i32.const 159651) "a") (data (i32.const 159654) "a") (data (i32.const 159657) "a") (data (i32.const 159660) "a") (data (i32.const 159663) "a") (data (i32.const 159666) "a") (data (i32.const 159669) "a") (data (i32.const 159672) "a") (data (i32.const 159675) "a") (data (i32.const 159678) "a") (data (i32.const 159681) "a") (data (i32.const 159684) "a") (data (i32.const 159687) "a") (data (i32.const 159690) "a") (data (i32.const 159693) "a") (data (i32.const 159696) "a") (data (i32.const 159699) "a") (data (i32.const 159702) "a") (data (i32.const 159705) "a") (data (i32.const 159708) "a") (data (i32.const 159711) "a") (data (i32.const 159714) "a") (data (i32.const 159717) "a") (data (i32.const 159720) "a") (data (i32.const 159723) "a") (data (i32.const 159726) "a") (data (i32.const 159729) "a") (data (i32.const 159732) "a") (data (i32.const 159735) "a") (data (i32.const 159738) "a") (data (i32.const 159741) "a") (data (i32.const 159744) "a") (data (i32.const 159747) "a") (data (i32.const 159750) "a") (data (i32.const 159753) "a") (data (i32.const 159756) "a") (data (i32.const 159759) "a") (data (i32.const 159762) "a") (data (i32.const 159765) "a") (data (i32.const 159768) "a") (data (i32.const 159771) "a") (data (i32.const 159774) "a") (data (i32.const 159777) "a") (data (i32.const 159780) "a") (data (i32.const 159783) "a") (data (i32.const 159786) "a") (data (i32.const 159789) "a") (data (i32.const 159792) "a") (data (i32.const 159795) "a") (data (i32.const 159798) "a") (data (i32.const 159801) "a") (data (i32.const 159804) "a") (data (i32.const 159807) "a") (data (i32.const 159810) "a") (data (i32.const 159813) "a") (data (i32.const 159816) "a") (data (i32.const 159819) "a") (data (i32.const 159822) "a") (data (i32.const 159825) "a") (data (i32.const 159828) "a") (data (i32.const 159831) "a") (data (i32.const 159834) "a") (data (i32.const 159837) "a") (data (i32.const 159840) "a") (data (i32.const 159843) "a") (data (i32.const 159846) "a") (data (i32.const 159849) "a") (data (i32.const 159852) "a") (data (i32.const 159855) "a") (data (i32.const 159858) "a") (data (i32.const 159861) "a") (data (i32.const 159864) "a") (data (i32.const 159867) "a") (data (i32.const 159870) "a") (data (i32.const 159873) "a") (data (i32.const 159876) "a") (data (i32.const 159879) "a") (data (i32.const 159882) "a") (data (i32.const 159885) "a") (data (i32.const 159888) "a") (data (i32.const 159891) "a") (data (i32.const 159894) "a") (data (i32.const 159897) "a") (data (i32.const 159900) "a") (data (i32.const 159903) "a") (data (i32.const 159906) "a") (data (i32.const 159909) "a") (data (i32.const 159912) "a") (data (i32.const 159915) "a") (data (i32.const 159918) "a") (data (i32.const 159921) "a") (data (i32.const 159924) "a") (data (i32.const 159927) "a") (data (i32.const 159930) "a") (data (i32.const 159933) "a") (data (i32.const 159936) "a") (data (i32.const 159939) "a") (data (i32.const 159942) "a") (data (i32.const 159945) "a") (data (i32.const 159948) "a") (data (i32.const 159951) "a") (data (i32.const 159954) "a") (data (i32.const 159957) "a") (data (i32.const 159960) "a") (data (i32.const 159963) "a") (data (i32.const 159966) "a") (data (i32.const 159969) "a") (data (i32.const 159972) "a") (data (i32.const 159975) "a") (data (i32.const 159978) "a") (data (i32.const 159981) "a") (data (i32.const 159984) "a") (data (i32.const 159987) "a") (data (i32.const 159990) "a") (data (i32.const 159993) "a") (data (i32.const 159996) "a") (data (i32.const 159999) "a") (data (i32.const 160002) "a") (data (i32.const 160005) "a") (data (i32.const 160008) "a") (data (i32.const 160011) "a") (data (i32.const 160014) "a") (data (i32.const 160017) "a") (data (i32.const 160020) "a") (data (i32.const 160023) "a") (data (i32.const 160026) "a") (data (i32.const 160029) "a") (data (i32.const 160032) "a") (data (i32.const 160035) "a") (data (i32.const 160038) "a") (data (i32.const 160041) "a") (data (i32.const 160044) "a") (data (i32.const 160047) "a") (data (i32.const 160050) "a") (data (i32.const 160053) "a") (data (i32.const 160056) "a") (data (i32.const 160059) "a") (data (i32.const 160062) "a") (data (i32.const 160065) "a") (data (i32.const 160068) "a") (data (i32.const 160071) "a") (data (i32.const 160074) "a") (data (i32.const 160077) "a") (data (i32.const 160080) "a") (data (i32.const 160083) "a") (data (i32.const 160086) "a") (data (i32.const 160089) "a") (data (i32.const 160092) "a") (data (i32.const 160095) "a") (data (i32.const 160098) "a") (data (i32.const 160101) "a") (data (i32.const 160104) "a") (data (i32.const 160107) "a") (data (i32.const 160110) "a") (data (i32.const 160113) "a") (data (i32.const 160116) "a") (data (i32.const 160119) "a") (data (i32.const 160122) "a") (data (i32.const 160125) "a") (data (i32.const 160128) "a") (data (i32.const 160131) "a") (data (i32.const 160134) "a") (data (i32.const 160137) "a") (data (i32.const 160140) "a") (data (i32.const 160143) "a") (data (i32.const 160146) "a") (data (i32.const 160149) "a") (data (i32.const 160152) "a") (data (i32.const 160155) "a") (data (i32.const 160158) "a") (data (i32.const 160161) "a") (data (i32.const 160164) "a") (data (i32.const 160167) "a") (data (i32.const 160170) "a") (data (i32.const 160173) "a") (data (i32.const 160176) "a") (data (i32.const 160179) "a") (data (i32.const 160182) "a") (data (i32.const 160185) "a") (data (i32.const 160188) "a") (data (i32.const 160191) "a") (data (i32.const 160194) "a") (data (i32.const 160197) "a") (data (i32.const 160200) "a") (data (i32.const 160203) "a") (data (i32.const 160206) "a") (data (i32.const 160209) "a") (data (i32.const 160212) "a") (data (i32.const 160215) "a") (data (i32.const 160218) "a") (data (i32.const 160221) "a") (data (i32.const 160224) "a") (data (i32.const 160227) "a") (data (i32.const 160230) "a") (data (i32.const 160233) "a") (data (i32.const 160236) "a") (data (i32.const 160239) "a") (data (i32.const 160242) "a") (data (i32.const 160245) "a") (data (i32.const 160248) "a") (data (i32.const 160251) "a") (data (i32.const 160254) "a") (data (i32.const 160257) "a") (data (i32.const 160260) "a") (data (i32.const 160263) "a") (data (i32.const 160266) "a") (data (i32.const 160269) "a") (data (i32.const 160272) "a") (data (i32.const 160275) "a") (data (i32.const 160278) "a") (data (i32.const 160281) "a") (data (i32.const 160284) "a") (data (i32.const 160287) "a") (data (i32.const 160290) "a") (data (i32.const 160293) "a") (data (i32.const 160296) "a") (data (i32.const 160299) "a") (data (i32.const 160302) "a") (data (i32.const 160305) "a") (data (i32.const 160308) "a") (data (i32.const 160311) "a") (data (i32.const 160314) "a") (data (i32.const 160317) "a") (data (i32.const 160320) "a") (data (i32.const 160323) "a") (data (i32.const 160326) "a") (data (i32.const 160329) "a") (data (i32.const 160332) "a") (data (i32.const 160335) "a") (data (i32.const 160338) "a") (data (i32.const 160341) "a") (data (i32.const 160344) "a") (data (i32.const 160347) "a") (data (i32.const 160350) "a") (data (i32.const 160353) "a") (data (i32.const 160356) "a") (data (i32.const 160359) "a") (data (i32.const 160362) "a") (data (i32.const 160365) "a") (data (i32.const 160368) "a") (data (i32.const 160371) "a") (data (i32.const 160374) "a") (data (i32.const 160377) "a") (data (i32.const 160380) "a") (data (i32.const 160383) "a") (data (i32.const 160386) "a") (data (i32.const 160389) "a") (data (i32.const 160392) "a") (data (i32.const 160395) "a") (data (i32.const 160398) "a") (data (i32.const 160401) "a") (data (i32.const 160404) "a") (data (i32.const 160407) "a") (data (i32.const 160410) "a") (data (i32.const 160413) "a") (data (i32.const 160416) "a") (data (i32.const 160419) "a") (data (i32.const 160422) "a") (data (i32.const 160425) "a") (data (i32.const 160428) "a") (data (i32.const 160431) "a") (data (i32.const 160434) "a") (data (i32.const 160437) "a") (data (i32.const 160440) "a") (data (i32.const 160443) "a") (data (i32.const 160446) "a") (data (i32.const 160449) "a") (data (i32.const 160452) "a") (data (i32.const 160455) "a") (data (i32.const 160458) "a") (data (i32.const 160461) "a") (data (i32.const 160464) "a") (data (i32.const 160467) "a") (data (i32.const 160470) "a") (data (i32.const 160473) "a") (data (i32.const 160476) "a") (data (i32.const 160479) "a") (data (i32.const 160482) "a") (data (i32.const 160485) "a") (data (i32.const 160488) "a") (data (i32.const 160491) "a") (data (i32.const 160494) "a") (data (i32.const 160497) "a") (data (i32.const 160500) "a") (data (i32.const 160503) "a") (data (i32.const 160506) "a") (data (i32.const 160509) "a") (data (i32.const 160512) "a") (data (i32.const 160515) "a") (data (i32.const 160518) "a") (data (i32.const 160521) "a") (data (i32.const 160524) "a") (data (i32.const 160527) "a") (data (i32.const 160530) "a") (data (i32.const 160533) "a") (data (i32.const 160536) "a") (data (i32.const 160539) "a") (data (i32.const 160542) "a") (data (i32.const 160545) "a") (data (i32.const 160548) "a") (data (i32.const 160551) "a") (data (i32.const 160554) "a") (data (i32.const 160557) "a") (data (i32.const 160560) "a") (data (i32.const 160563) "a") (data (i32.const 160566) "a") (data (i32.const 160569) "a") (data (i32.const 160572) "a") (data (i32.const 160575) "a") (data (i32.const 160578) "a") (data (i32.const 160581) "a") (data (i32.const 160584) "a") (data (i32.const 160587) "a") (data (i32.const 160590) "a") (data (i32.const 160593) "a") (data (i32.const 160596) "a") (data (i32.const 160599) "a") (data (i32.const 160602) "a") (data (i32.const 160605) "a") (data (i32.const 160608) "a") (data (i32.const 160611) "a") (data (i32.const 160614) "a") (data (i32.const 160617) "a") (data (i32.const 160620) "a") (data (i32.const 160623) "a") (data (i32.const 160626) "a") (data (i32.const 160629) "a") (data (i32.const 160632) "a") (data (i32.const 160635) "a") (data (i32.const 160638) "a") (data (i32.const 160641) "a") (data (i32.const 160644) "a") (data (i32.const 160647) "a") (data (i32.const 160650) "a") (data (i32.const 160653) "a") (data (i32.const 160656) "a") (data (i32.const 160659) "a") (data (i32.const 160662) "a") (data (i32.const 160665) "a") (data (i32.const 160668) "a") (data (i32.const 160671) "a") (data (i32.const 160674) "a") (data (i32.const 160677) "a") (data (i32.const 160680) "a") (data (i32.const 160683) "a") (data (i32.const 160686) "a") (data (i32.const 160689) "a") (data (i32.const 160692) "a") (data (i32.const 160695) "a") (data (i32.const 160698) "a") (data (i32.const 160701) "a") (data (i32.const 160704) "a") (data (i32.const 160707) "a") (data (i32.const 160710) "a") (data (i32.const 160713) "a") (data (i32.const 160716) "a") (data (i32.const 160719) "a") (data (i32.const 160722) "a") (data (i32.const 160725) "a") (data (i32.const 160728) "a") (data (i32.const 160731) "a") (data (i32.const 160734) "a") (data (i32.const 160737) "a") (data (i32.const 160740) "a") (data (i32.const 160743) "a") (data (i32.const 160746) "a") (data (i32.const 160749) "a") (data (i32.const 160752) "a") (data (i32.const 160755) "a") (data (i32.const 160758) "a") (data (i32.const 160761) "a") (data (i32.const 160764) "a") (data (i32.const 160767) "a") (data (i32.const 160770) "a") (data (i32.const 160773) "a") (data (i32.const 160776) "a") (data (i32.const 160779) "a") (data (i32.const 160782) "a") (data (i32.const 160785) "a") (data (i32.const 160788) "a") (data (i32.const 160791) "a") (data (i32.const 160794) "a") (data (i32.const 160797) "a") (data (i32.const 160800) "a") (data (i32.const 160803) "a") (data (i32.const 160806) "a") (data (i32.const 160809) "a") (data (i32.const 160812) "a") (data (i32.const 160815) "a") (data (i32.const 160818) "a") (data (i32.const 160821) "a") (data (i32.const 160824) "a") (data (i32.const 160827) "a") (data (i32.const 160830) "a") (data (i32.const 160833) "a") (data (i32.const 160836) "a") (data (i32.const 160839) "a") (data (i32.const 160842) "a") (data (i32.const 160845) "a") (data (i32.const 160848) "a") (data (i32.const 160851) "a") (data (i32.const 160854) "a") (data (i32.const 160857) "a") (data (i32.const 160860) "a") (data (i32.const 160863) "a") (data (i32.const 160866) "a") (data (i32.const 160869) "a") (data (i32.const 160872) "a") (data (i32.const 160875) "a") (data (i32.const 160878) "a") (data (i32.const 160881) "a") (data (i32.const 160884) "a") (data (i32.const 160887) "a") (data (i32.const 160890) "a") (data (i32.const 160893) "a") (data (i32.const 160896) "a") (data (i32.const 160899) "a") (data (i32.const 160902) "a") (data (i32.const 160905) "a") (data (i32.const 160908) "a") (data (i32.const 160911) "a") (data (i32.const 160914) "a") (data (i32.const 160917) "a") (data (i32.const 160920) "a") (data (i32.const 160923) "a") (data (i32.const 160926) "a") (data (i32.const 160929) "a") (data (i32.const 160932) "a") (data (i32.const 160935) "a") (data (i32.const 160938) "a") (data (i32.const 160941) "a") (data (i32.const 160944) "a") (data (i32.const 160947) "a") (data (i32.const 160950) "a") (data (i32.const 160953) "a") (data (i32.const 160956) "a") (data (i32.const 160959) "a") (data (i32.const 160962) "a") (data (i32.const 160965) "a") (data (i32.const 160968) "a") (data (i32.const 160971) "a") (data (i32.const 160974) "a") (data (i32.const 160977) "a") (data (i32.const 160980) "a") (data (i32.const 160983) "a") (data (i32.const 160986) "a") (data (i32.const 160989) "a") (data (i32.const 160992) "a") (data (i32.const 160995) "a") (data (i32.const 160998) "a") (data (i32.const 161001) "a") (data (i32.const 161004) "a") (data (i32.const 161007) "a") (data (i32.const 161010) "a") (data (i32.const 161013) "a") (data (i32.const 161016) "a") (data (i32.const 161019) "a") (data (i32.const 161022) "a") (data (i32.const 161025) "a") (data (i32.const 161028) "a") (data (i32.const 161031) "a") (data (i32.const 161034) "a") (data (i32.const 161037) "a") (data (i32.const 161040) "a") (data (i32.const 161043) "a") (data (i32.const 161046) "a") (data (i32.const 161049) "a") (data (i32.const 161052) "a") (data (i32.const 161055) "a") (data (i32.const 161058) "a") (data (i32.const 161061) "a") (data (i32.const 161064) "a") (data (i32.const 161067) "a") (data (i32.const 161070) "a") (data (i32.const 161073) "a") (data (i32.const 161076) "a") (data (i32.const 161079) "a") (data (i32.const 161082) "a") (data (i32.const 161085) "a") (data (i32.const 161088) "a") (data (i32.const 161091) "a") (data (i32.const 161094) "a") (data (i32.const 161097) "a") (data (i32.const 161100) "a") (data (i32.const 161103) "a") (data (i32.const 161106) "a") (data (i32.const 161109) "a") (data (i32.const 161112) "a") (data (i32.const 161115) "a") (data (i32.const 161118) "a") (data (i32.const 161121) "a") (data (i32.const 161124) "a") (data (i32.const 161127) "a") (data (i32.const 161130) "a") (data (i32.const 161133) "a") (data (i32.const 161136) "a") (data (i32.const 161139) "a") (data (i32.const 161142) "a") (data (i32.const 161145) "a") (data (i32.const 161148) "a") (data (i32.const 161151) "a") (data (i32.const 161154) "a") (data (i32.const 161157) "a") (data (i32.const 161160) "a") (data (i32.const 161163) "a") (data (i32.const 161166) "a") (data (i32.const 161169) "a") (data (i32.const 161172) "a") (data (i32.const 161175) "a") (data (i32.const 161178) "a") (data (i32.const 161181) "a") (data (i32.const 161184) "a") (data (i32.const 161187) "a") (data (i32.const 161190) "a") (data (i32.const 161193) "a") (data (i32.const 161196) "a") (data (i32.const 161199) "a") (data (i32.const 161202) "a") (data (i32.const 161205) "a") (data (i32.const 161208) "a") (data (i32.const 161211) "a") (data (i32.const 161214) "a") (data (i32.const 161217) "a") (data (i32.const 161220) "a") (data (i32.const 161223) "a") (data (i32.const 161226) "a") (data (i32.const 161229) "a") (data (i32.const 161232) "a") (data (i32.const 161235) "a") (data (i32.const 161238) "a") (data (i32.const 161241) "a") (data (i32.const 161244) "a") (data (i32.const 161247) "a") (data (i32.const 161250) "a") (data (i32.const 161253) "a") (data (i32.const 161256) "a") (data (i32.const 161259) "a") (data (i32.const 161262) "a") (data (i32.const 161265) "a") (data (i32.const 161268) "a") (data (i32.const 161271) "a") (data (i32.const 161274) "a") (data (i32.const 161277) "a") (data (i32.const 161280) "a") (data (i32.const 161283) "a") (data (i32.const 161286) "a") (data (i32.const 161289) "a") (data (i32.const 161292) "a") (data (i32.const 161295) "a") (data (i32.const 161298) "a") (data (i32.const 161301) "a") (data (i32.const 161304) "a") (data (i32.const 161307) "a") (data (i32.const 161310) "a") (data (i32.const 161313) "a") (data (i32.const 161316) "a") (data (i32.const 161319) "a") (data (i32.const 161322) "a") (data (i32.const 161325) "a") (data (i32.const 161328) "a") (data (i32.const 161331) "a") (data (i32.const 161334) "a") (data (i32.const 161337) "a") (data (i32.const 161340) "a") (data (i32.const 161343) "a") (data (i32.const 161346) "a") (data (i32.const 161349) "a") (data (i32.const 161352) "a") (data (i32.const 161355) "a") (data (i32.const 161358) "a") (data (i32.const 161361) "a") (data (i32.const 161364) "a") (data (i32.const 161367) "a") (data (i32.const 161370) "a") (data (i32.const 161373) "a") (data (i32.const 161376) "a") (data (i32.const 161379) "a") (data (i32.const 161382) "a") (data (i32.const 161385) "a") (data (i32.const 161388) "a") (data (i32.const 161391) "a") (data (i32.const 161394) "a") (data (i32.const 161397) "a") (data (i32.const 161400) "a") (data (i32.const 161403) "a") (data (i32.const 161406) "a") (data (i32.const 161409) "a") (data (i32.const 161412) "a") (data (i32.const 161415) "a") (data (i32.const 161418) "a") (data (i32.const 161421) "a") (data (i32.const 161424) "a") (data (i32.const 161427) "a") (data (i32.const 161430) "a") (data (i32.const 161433) "a") (data (i32.const 161436) "a") (data (i32.const 161439) "a") (data (i32.const 161442) "a") (data (i32.const 161445) "a") (data (i32.const 161448) "a") (data (i32.const 161451) "a") (data (i32.const 161454) "a") (data (i32.const 161457) "a") (data (i32.const 161460) "a") (data (i32.const 161463) "a") (data (i32.const 161466) "a") (data (i32.const 161469) "a") (data (i32.const 161472) "a") (data (i32.const 161475) "a") (data (i32.const 161478) "a") (data (i32.const 161481) "a") (data (i32.const 161484) "a") (data (i32.const 161487) "a") (data (i32.const 161490) "a") (data (i32.const 161493) "a") (data (i32.const 161496) "a") (data (i32.const 161499) "a") (data (i32.const 161502) "a") (data (i32.const 161505) "a") (data (i32.const 161508) "a") (data (i32.const 161511) "a") (data (i32.const 161514) "a") (data (i32.const 161517) "a") (data (i32.const 161520) "a") (data (i32.const 161523) "a") (data (i32.const 161526) "a") (data (i32.const 161529) "a") (data (i32.const 161532) "a") (data (i32.const 161535) "a") (data (i32.const 161538) "a") (data (i32.const 161541) "a") (data (i32.const 161544) "a") (data (i32.const 161547) "a") (data (i32.const 161550) "a") (data (i32.const 161553) "a") (data (i32.const 161556) "a") (data (i32.const 161559) "a") (data (i32.const 161562) "a") (data (i32.const 161565) "a") (data (i32.const 161568) "a") (data (i32.const 161571) "a") (data (i32.const 161574) "a") (data (i32.const 161577) "a") (data (i32.const 161580) "a") (data (i32.const 161583) "a") (data (i32.const 161586) "a") (data (i32.const 161589) "a") (data (i32.const 161592) "a") (data (i32.const 161595) "a") (data (i32.const 161598) "a") (data (i32.const 161601) "a") (data (i32.const 161604) "a") (data (i32.const 161607) "a") (data (i32.const 161610) "a") (data (i32.const 161613) "a") (data (i32.const 161616) "a") (data (i32.const 161619) "a") (data (i32.const 161622) "a") (data (i32.const 161625) "a") (data (i32.const 161628) "a") (data (i32.const 161631) "a") (data (i32.const 161634) "a") (data (i32.const 161637) "a") (data (i32.const 161640) "a") (data (i32.const 161643) "a") (data (i32.const 161646) "a") (data (i32.const 161649) "a") (data (i32.const 161652) "a") (data (i32.const 161655) "a") (data (i32.const 161658) "a") (data (i32.const 161661) "a") (data (i32.const 161664) "a") (data (i32.const 161667) "a") (data (i32.const 161670) "a") (data (i32.const 161673) "a") (data (i32.const 161676) "a") (data (i32.const 161679) "a") (data (i32.const 161682) "a") (data (i32.const 161685) "a") (data (i32.const 161688) "a") (data (i32.const 161691) "a") (data (i32.const 161694) "a") (data (i32.const 161697) "a") (data (i32.const 161700) "a") (data (i32.const 161703) "a") (data (i32.const 161706) "a") (data (i32.const 161709) "a") (data (i32.const 161712) "a") (data (i32.const 161715) "a") (data (i32.const 161718) "a") (data (i32.const 161721) "a") (data (i32.const 161724) "a") (data (i32.const 161727) "a") (data (i32.const 161730) "a") (data (i32.const 161733) "a") (data (i32.const 161736) "a") (data (i32.const 161739) "a") (data (i32.const 161742) "a") (data (i32.const 161745) "a") (data (i32.const 161748) "a") (data (i32.const 161751) "a") (data (i32.const 161754) "a") (data (i32.const 161757) "a") (data (i32.const 161760) "a") (data (i32.const 161763) "a") (data (i32.const 161766) "a") (data (i32.const 161769) "a") (data (i32.const 161772) "a") (data (i32.const 161775) "a") (data (i32.const 161778) "a") (data (i32.const 161781) "a") (data (i32.const 161784) "a") (data (i32.const 161787) "a") (data (i32.const 161790) "a") (data (i32.const 161793) "a") (data (i32.const 161796) "a") (data (i32.const 161799) "a") (data (i32.const 161802) "a") (data (i32.const 161805) "a") (data (i32.const 161808) "a") (data (i32.const 161811) "a") (data (i32.const 161814) "a") (data (i32.const 161817) "a") (data (i32.const 161820) "a") (data (i32.const 161823) "a") (data (i32.const 161826) "a") (data (i32.const 161829) "a") (data (i32.const 161832) "a") (data (i32.const 161835) "a") (data (i32.const 161838) "a") (data (i32.const 161841) "a") (data (i32.const 161844) "a") (data (i32.const 161847) "a") (data (i32.const 161850) "a") (data (i32.const 161853) "a") (data (i32.const 161856) "a") (data (i32.const 161859) "a") (data (i32.const 161862) "a") (data (i32.const 161865) "a") (data (i32.const 161868) "a") (data (i32.const 161871) "a") (data (i32.const 161874) "a") (data (i32.const 161877) "a") (data (i32.const 161880) "a") (data (i32.const 161883) "a") (data (i32.const 161886) "a") (data (i32.const 161889) "a") (data (i32.const 161892) "a") (data (i32.const 161895) "a") (data (i32.const 161898) "a") (data (i32.const 161901) "a") (data (i32.const 161904) "a") (data (i32.const 161907) "a") (data (i32.const 161910) "a") (data (i32.const 161913) "a") (data (i32.const 161916) "a") (data (i32.const 161919) "a") (data (i32.const 161922) "a") (data (i32.const 161925) "a") (data (i32.const 161928) "a") (data (i32.const 161931) "a") (data (i32.const 161934) "a") (data (i32.const 161937) "a") (data (i32.const 161940) "a") (data (i32.const 161943) "a") (data (i32.const 161946) "a") (data (i32.const 161949) "a") (data (i32.const 161952) "a") (data (i32.const 161955) "a") (data (i32.const 161958) "a") (data (i32.const 161961) "a") (data (i32.const 161964) "a") (data (i32.const 161967) "a") (data (i32.const 161970) "a") (data (i32.const 161973) "a") (data (i32.const 161976) "a") (data (i32.const 161979) "a") (data (i32.const 161982) "a") (data (i32.const 161985) "a") (data (i32.const 161988) "a") (data (i32.const 161991) "a") (data (i32.const 161994) "a") (data (i32.const 161997) "a") (data (i32.const 162000) "a") (data (i32.const 162003) "a") (data (i32.const 162006) "a") (data (i32.const 162009) "a") (data (i32.const 162012) "a") (data (i32.const 162015) "a") (data (i32.const 162018) "a") (data (i32.const 162021) "a") (data (i32.const 162024) "a") (data (i32.const 162027) "a") (data (i32.const 162030) "a") (data (i32.const 162033) "a") (data (i32.const 162036) "a") (data (i32.const 162039) "a") (data (i32.const 162042) "a") (data (i32.const 162045) "a") (data (i32.const 162048) "a") (data (i32.const 162051) "a") (data (i32.const 162054) "a") (data (i32.const 162057) "a") (data (i32.const 162060) "a") (data (i32.const 162063) "a") (data (i32.const 162066) "a") (data (i32.const 162069) "a") (data (i32.const 162072) "a") (data (i32.const 162075) "a") (data (i32.const 162078) "a") (data (i32.const 162081) "a") (data (i32.const 162084) "a") (data (i32.const 162087) "a") (data (i32.const 162090) "a") (data (i32.const 162093) "a") (data (i32.const 162096) "a") (data (i32.const 162099) "a") (data (i32.const 162102) "a") (data (i32.const 162105) "a") (data (i32.const 162108) "a") (data (i32.const 162111) "a") (data (i32.const 162114) "a") (data (i32.const 162117) "a") (data (i32.const 162120) "a") (data (i32.const 162123) "a") (data (i32.const 162126) "a") (data (i32.const 162129) "a") (data (i32.const 162132) "a") (data (i32.const 162135) "a") (data (i32.const 162138) "a") (data (i32.const 162141) "a") (data (i32.const 162144) "a") (data (i32.const 162147) "a") (data (i32.const 162150) "a") (data (i32.const 162153) "a") (data (i32.const 162156) "a") (data (i32.const 162159) "a") (data (i32.const 162162) "a") (data (i32.const 162165) "a") (data (i32.const 162168) "a") (data (i32.const 162171) "a") (data (i32.const 162174) "a") (data (i32.const 162177) "a") (data (i32.const 162180) "a") (data (i32.const 162183) "a") (data (i32.const 162186) "a") (data (i32.const 162189) "a") (data (i32.const 162192) "a") (data (i32.const 162195) "a") (data (i32.const 162198) "a") (data (i32.const 162201) "a") (data (i32.const 162204) "a") (data (i32.const 162207) "a") (data (i32.const 162210) "a") (data (i32.const 162213) "a") (data (i32.const 162216) "a") (data (i32.const 162219) "a") (data (i32.const 162222) "a") (data (i32.const 162225) "a") (data (i32.const 162228) "a") (data (i32.const 162231) "a") (data (i32.const 162234) "a") (data (i32.const 162237) "a") (data (i32.const 162240) "a") (data (i32.const 162243) "a") (data (i32.const 162246) "a") (data (i32.const 162249) "a") (data (i32.const 162252) "a") (data (i32.const 162255) "a") (data (i32.const 162258) "a") (data (i32.const 162261) "a") (data (i32.const 162264) "a") (data (i32.const 162267) "a") (data (i32.const 162270) "a") (data (i32.const 162273) "a") (data (i32.const 162276) "a") (data (i32.const 162279) "a") (data (i32.const 162282) "a") (data (i32.const 162285) "a") (data (i32.const 162288) "a") (data (i32.const 162291) "a") (data (i32.const 162294) "a") (data (i32.const 162297) "a") (data (i32.const 162300) "a") (data (i32.const 162303) "a") (data (i32.const 162306) "a") (data (i32.const 162309) "a") (data (i32.const 162312) "a") (data (i32.const 162315) "a") (data (i32.const 162318) "a") (data (i32.const 162321) "a") (data (i32.const 162324) "a") (data (i32.const 162327) "a") (data (i32.const 162330) "a") (data (i32.const 162333) "a") (data (i32.const 162336) "a") (data (i32.const 162339) "a") (data (i32.const 162342) "a") (data (i32.const 162345) "a") (data (i32.const 162348) "a") (data (i32.const 162351) "a") (data (i32.const 162354) "a") (data (i32.const 162357) "a") (data (i32.const 162360) "a") (data (i32.const 162363) "a") (data (i32.const 162366) "a") (data (i32.const 162369) "a") (data (i32.const 162372) "a") (data (i32.const 162375) "a") (data (i32.const 162378) "a") (data (i32.const 162381) "a") (data (i32.const 162384) "a") (data (i32.const 162387) "a") (data (i32.const 162390) "a") (data (i32.const 162393) "a") (data (i32.const 162396) "a") (data (i32.const 162399) "a") (data (i32.const 162402) "a") (data (i32.const 162405) "a") (data (i32.const 162408) "a") (data (i32.const 162411) "a") (data (i32.const 162414) "a") (data (i32.const 162417) "a") (data (i32.const 162420) "a") (data (i32.const 162423) "a") (data (i32.const 162426) "a") (data (i32.const 162429) "a") (data (i32.const 162432) "a") (data (i32.const 162435) "a") (data (i32.const 162438) "a") (data (i32.const 162441) "a") (data (i32.const 162444) "a") (data (i32.const 162447) "a") (data (i32.const 162450) "a") (data (i32.const 162453) "a") (data (i32.const 162456) "a") (data (i32.const 162459) "a") (data (i32.const 162462) "a") (data (i32.const 162465) "a") (data (i32.const 162468) "a") (data (i32.const 162471) "a") (data (i32.const 162474) "a") (data (i32.const 162477) "a") (data (i32.const 162480) "a") (data (i32.const 162483) "a") (data (i32.const 162486) "a") (data (i32.const 162489) "a") (data (i32.const 162492) "a") (data (i32.const 162495) "a") (data (i32.const 162498) "a") (data (i32.const 162501) "a") (data (i32.const 162504) "a") (data (i32.const 162507) "a") (data (i32.const 162510) "a") (data (i32.const 162513) "a") (data (i32.const 162516) "a") (data (i32.const 162519) "a") (data (i32.const 162522) "a") (data (i32.const 162525) "a") (data (i32.const 162528) "a") (data (i32.const 162531) "a") (data (i32.const 162534) "a") (data (i32.const 162537) "a") (data (i32.const 162540) "a") (data (i32.const 162543) "a") (data (i32.const 162546) "a") (data (i32.const 162549) "a") (data (i32.const 162552) "a") (data (i32.const 162555) "a") (data (i32.const 162558) "a") (data (i32.const 162561) "a") (data (i32.const 162564) "a") (data (i32.const 162567) "a") (data (i32.const 162570) "a") (data (i32.const 162573) "a") (data (i32.const 162576) "a") (data (i32.const 162579) "a") (data (i32.const 162582) "a") (data (i32.const 162585) "a") (data (i32.const 162588) "a") (data (i32.const 162591) "a") (data (i32.const 162594) "a") (data (i32.const 162597) "a") (data (i32.const 162600) "a") (data (i32.const 162603) "a") (data (i32.const 162606) "a") (data (i32.const 162609) "a") (data (i32.const 162612) "a") (data (i32.const 162615) "a") (data (i32.const 162618) "a") (data (i32.const 162621) "a") (data (i32.const 162624) "a") (data (i32.const 162627) "a") (data (i32.const 162630) "a") (data (i32.const 162633) "a") (data (i32.const 162636) "a") (data (i32.const 162639) "a") (data (i32.const 162642) "a") (data (i32.const 162645) "a") (data (i32.const 162648) "a") (data (i32.const 162651) "a") (data (i32.const 162654) "a") (data (i32.const 162657) "a") (data (i32.const 162660) "a") (data (i32.const 162663) "a") (data (i32.const 162666) "a") (data (i32.const 162669) "a") (data (i32.const 162672) "a") (data (i32.const 162675) "a") (data (i32.const 162678) "a") (data (i32.const 162681) "a") (data (i32.const 162684) "a") (data (i32.const 162687) "a") (data (i32.const 162690) "a") (data (i32.const 162693) "a") (data (i32.const 162696) "a") (data (i32.const 162699) "a") (data (i32.const 162702) "a") (data (i32.const 162705) "a") (data (i32.const 162708) "a") (data (i32.const 162711) "a") (data (i32.const 162714) "a") (data (i32.const 162717) "a") (data (i32.const 162720) "a") (data (i32.const 162723) "a") (data (i32.const 162726) "a") (data (i32.const 162729) "a") (data (i32.const 162732) "a") (data (i32.const 162735) "a") (data (i32.const 162738) "a") (data (i32.const 162741) "a") (data (i32.const 162744) "a") (data (i32.const 162747) "a") (data (i32.const 162750) "a") (data (i32.const 162753) "a") (data (i32.const 162756) "a") (data (i32.const 162759) "a") (data (i32.const 162762) "a") (data (i32.const 162765) "a") (data (i32.const 162768) "a") (data (i32.const 162771) "a") (data (i32.const 162774) "a") (data (i32.const 162777) "a") (data (i32.const 162780) "a") (data (i32.const 162783) "a") (data (i32.const 162786) "a") (data (i32.const 162789) "a") (data (i32.const 162792) "a") (data (i32.const 162795) "a") (data (i32.const 162798) "a") (data (i32.const 162801) "a") (data (i32.const 162804) "a") (data (i32.const 162807) "a") (data (i32.const 162810) "a") (data (i32.const 162813) "a") (data (i32.const 162816) "a") (data (i32.const 162819) "a") (data (i32.const 162822) "a") (data (i32.const 162825) "a") (data (i32.const 162828) "a") (data (i32.const 162831) "a") (data (i32.const 162834) "a") (data (i32.const 162837) "a") (data (i32.const 162840) "a") (data (i32.const 162843) "a") (data (i32.const 162846) "a") (data (i32.const 162849) "a") (data (i32.const 162852) "a") (data (i32.const 162855) "a") (data (i32.const 162858) "a") (data (i32.const 162861) "a") (data (i32.const 162864) "a") (data (i32.const 162867) "a") (data (i32.const 162870) "a") (data (i32.const 162873) "a") (data (i32.const 162876) "a") (data (i32.const 162879) "a") (data (i32.const 162882) "a") (data (i32.const 162885) "a") (data (i32.const 162888) "a") (data (i32.const 162891) "a") (data (i32.const 162894) "a") (data (i32.const 162897) "a") (data (i32.const 162900) "a") (data (i32.const 162903) "a") (data (i32.const 162906) "a") (data (i32.const 162909) "a") (data (i32.const 162912) "a") (data (i32.const 162915) "a") (data (i32.const 162918) "a") (data (i32.const 162921) "a") (data (i32.const 162924) "a") (data (i32.const 162927) "a") (data (i32.const 162930) "a") (data (i32.const 162933) "a") (data (i32.const 162936) "a") (data (i32.const 162939) "a") (data (i32.const 162942) "a") (data (i32.const 162945) "a") (data (i32.const 162948) "a") (data (i32.const 162951) "a") (data (i32.const 162954) "a") (data (i32.const 162957) "a") (data (i32.const 162960) "a") (data (i32.const 162963) "a") (data (i32.const 162966) "a") (data (i32.const 162969) "a") (data (i32.const 162972) "a") (data (i32.const 162975) "a") (data (i32.const 162978) "a") (data (i32.const 162981) "a") (data (i32.const 162984) "a") (data (i32.const 162987) "a") (data (i32.const 162990) "a") (data (i32.const 162993) "a") (data (i32.const 162996) "a") (data (i32.const 162999) "a") (data (i32.const 163002) "a") (data (i32.const 163005) "a") (data (i32.const 163008) "a") (data (i32.const 163011) "a") (data (i32.const 163014) "a") (data (i32.const 163017) "a") (data (i32.const 163020) "a") (data (i32.const 163023) "a") (data (i32.const 163026) "a") (data (i32.const 163029) "a") (data (i32.const 163032) "a") (data (i32.const 163035) "a") (data (i32.const 163038) "a") (data (i32.const 163041) "a") (data (i32.const 163044) "a") (data (i32.const 163047) "a") (data (i32.const 163050) "a") (data (i32.const 163053) "a") (data (i32.const 163056) "a") (data (i32.const 163059) "a") (data (i32.const 163062) "a") (data (i32.const 163065) "a") (data (i32.const 163068) "a") (data (i32.const 163071) "a") (data (i32.const 163074) "a") (data (i32.const 163077) "a") (data (i32.const 163080) "a") (data (i32.const 163083) "a") (data (i32.const 163086) "a") (data (i32.const 163089) "a") (data (i32.const 163092) "a") (data (i32.const 163095) "a") (data (i32.const 163098) "a") (data (i32.const 163101) "a") (data (i32.const 163104) "a") (data (i32.const 163107) "a") (data (i32.const 163110) "a") (data (i32.const 163113) "a") (data (i32.const 163116) "a") (data (i32.const 163119) "a") (data (i32.const 163122) "a") (data (i32.const 163125) "a") (data (i32.const 163128) "a") (data (i32.const 163131) "a") (data (i32.const 163134) "a") (data (i32.const 163137) "a") (data (i32.const 163140) "a") (data (i32.const 163143) "a") (data (i32.const 163146) "a") (data (i32.const 163149) "a") (data (i32.const 163152) "a") (data (i32.const 163155) "a") (data (i32.const 163158) "a") (data (i32.const 163161) "a") (data (i32.const 163164) "a") (data (i32.const 163167) "a") (data (i32.const 163170) "a") (data (i32.const 163173) "a") (data (i32.const 163176) "a") (data (i32.const 163179) "a") (data (i32.const 163182) "a") (data (i32.const 163185) "a") (data (i32.const 163188) "a") (data (i32.const 163191) "a") (data (i32.const 163194) "a") (data (i32.const 163197) "a") (data (i32.const 163200) "a") (data (i32.const 163203) "a") (data (i32.const 163206) "a") (data (i32.const 163209) "a") (data (i32.const 163212) "a") (data (i32.const 163215) "a") (data (i32.const 163218) "a") (data (i32.const 163221) "a") (data (i32.const 163224) "a") (data (i32.const 163227) "a") (data (i32.const 163230) "a") (data (i32.const 163233) "a") (data (i32.const 163236) "a") (data (i32.const 163239) "a") (data (i32.const 163242) "a") (data (i32.const 163245) "a") (data (i32.const 163248) "a") (data (i32.const 163251) "a") (data (i32.const 163254) "a") (data (i32.const 163257) "a") (data (i32.const 163260) "a") (data (i32.const 163263) "a") (data (i32.const 163266) "a") (data (i32.const 163269) "a") (data (i32.const 163272) "a") (data (i32.const 163275) "a") (data (i32.const 163278) "a") (data (i32.const 163281) "a") (data (i32.const 163284) "a") (data (i32.const 163287) "a") (data (i32.const 163290) "a") (data (i32.const 163293) "a") (data (i32.const 163296) "a") (data (i32.const 163299) "a") (data (i32.const 163302) "a") (data (i32.const 163305) "a") (data (i32.const 163308) "a") (data (i32.const 163311) "a") (data (i32.const 163314) "a") (data (i32.const 163317) "a") (data (i32.const 163320) "a") (data (i32.const 163323) "a") (data (i32.const 163326) "a") (data (i32.const 163329) "a") (data (i32.const 163332) "a") (data (i32.const 163335) "a") (data (i32.const 163338) "a") (data (i32.const 163341) "a") (data (i32.const 163344) "a") (data (i32.const 163347) "a") (data (i32.const 163350) "a") (data (i32.const 163353) "a") (data (i32.const 163356) "a") (data (i32.const 163359) "a") (data (i32.const 163362) "a") (data (i32.const 163365) "a") (data (i32.const 163368) "a") (data (i32.const 163371) "a") (data (i32.const 163374) "a") (data (i32.const 163377) "a") (data (i32.const 163380) "a") (data (i32.const 163383) "a") (data (i32.const 163386) "a") (data (i32.const 163389) "a") (data (i32.const 163392) "a") (data (i32.const 163395) "a") (data (i32.const 163398) "a") (data (i32.const 163401) "a") (data (i32.const 163404) "a") (data (i32.const 163407) "a") (data (i32.const 163410) "a") (data (i32.const 163413) "a") (data (i32.const 163416) "a") (data (i32.const 163419) "a") (data (i32.const 163422) "a") (data (i32.const 163425) "a") (data (i32.const 163428) "a") (data (i32.const 163431) "a") (data (i32.const 163434) "a") (data (i32.const 163437) "a") (data (i32.const 163440) "a") (data (i32.const 163443) "a") (data (i32.const 163446) "a") (data (i32.const 163449) "a") (data (i32.const 163452) "a") (data (i32.const 163455) "a") (data (i32.const 163458) "a") (data (i32.const 163461) "a") (data (i32.const 163464) "a") (data (i32.const 163467) "a") (data (i32.const 163470) "a") (data (i32.const 163473) "a") (data (i32.const 163476) "a") (data (i32.const 163479) "a") (data (i32.const 163482) "a") (data (i32.const 163485) "a") (data (i32.const 163488) "a") (data (i32.const 163491) "a") (data (i32.const 163494) "a") (data (i32.const 163497) "a") (data (i32.const 163500) "a") (data (i32.const 163503) "a") (data (i32.const 163506) "a") (data (i32.const 163509) "a") (data (i32.const 163512) "a") (data (i32.const 163515) "a") (data (i32.const 163518) "a") (data (i32.const 163521) "a") (data (i32.const 163524) "a") (data (i32.const 163527) "a") (data (i32.const 163530) "a") (data (i32.const 163533) "a") (data (i32.const 163536) "a") (data (i32.const 163539) "a") (data (i32.const 163542) "a") (data (i32.const 163545) "a") (data (i32.const 163548) "a") (data (i32.const 163551) "a") (data (i32.const 163554) "a") (data (i32.const 163557) "a") (data (i32.const 163560) "a") (data (i32.const 163563) "a") (data (i32.const 163566) "a") (data (i32.const 163569) "a") (data (i32.const 163572) "a") (data (i32.const 163575) "a") (data (i32.const 163578) "a") (data (i32.const 163581) "a") (data (i32.const 163584) "a") (data (i32.const 163587) "a") (data (i32.const 163590) "a") (data (i32.const 163593) "a") (data (i32.const 163596) "a") (data (i32.const 163599) "a") (data (i32.const 163602) "a") (data (i32.const 163605) "a") (data (i32.const 163608) "a") (data (i32.const 163611) "a") (data (i32.const 163614) "a") (data (i32.const 163617) "a") (data (i32.const 163620) "a") (data (i32.const 163623) "a") (data (i32.const 163626) "a") (data (i32.const 163629) "a") (data (i32.const 163632) "a") (data (i32.const 163635) "a") (data (i32.const 163638) "a") (data (i32.const 163641) "a") (data (i32.const 163644) "a") (data (i32.const 163647) "a") (data (i32.const 163650) "a") (data (i32.const 163653) "a") (data (i32.const 163656) "a") (data (i32.const 163659) "a") (data (i32.const 163662) "a") (data (i32.const 163665) "a") (data (i32.const 163668) "a") (data (i32.const 163671) "a") (data (i32.const 163674) "a") (data (i32.const 163677) "a") (data (i32.const 163680) "a") (data (i32.const 163683) "a") (data (i32.const 163686) "a") (data (i32.const 163689) "a") (data (i32.const 163692) "a") (data (i32.const 163695) "a") (data (i32.const 163698) "a") (data (i32.const 163701) "a") (data (i32.const 163704) "a") (data (i32.const 163707) "a") (data (i32.const 163710) "a") (data (i32.const 163713) "a") (data (i32.const 163716) "a") (data (i32.const 163719) "a") (data (i32.const 163722) "a") (data (i32.const 163725) "a") (data (i32.const 163728) "a") (data (i32.const 163731) "a") (data (i32.const 163734) "a") (data (i32.const 163737) "a") (data (i32.const 163740) "a") (data (i32.const 163743) "a") (data (i32.const 163746) "a") (data (i32.const 163749) "a") (data (i32.const 163752) "a") (data (i32.const 163755) "a") (data (i32.const 163758) "a") (data (i32.const 163761) "a") (data (i32.const 163764) "a") (data (i32.const 163767) "a") (data (i32.const 163770) "a") (data (i32.const 163773) "a") (data (i32.const 163776) "a") (data (i32.const 163779) "a") (data (i32.const 163782) "a") (data (i32.const 163785) "a") (data (i32.const 163788) "a") (data (i32.const 163791) "a") (data (i32.const 163794) "a") (data (i32.const 163797) "a") (data (i32.const 163800) "a") (data (i32.const 163803) "a") (data (i32.const 163806) "a") (data (i32.const 163809) "a") (data (i32.const 163812) "a") (data (i32.const 163815) "a") (data (i32.const 163818) "a") (data (i32.const 163821) "a") (data (i32.const 163824) "a") (data (i32.const 163827) "a") (data (i32.const 163830) "a") (data (i32.const 163833) "a") (data (i32.const 163836) "a") (data (i32.const 163839) "a") (data (i32.const 163842) "a") (data (i32.const 163845) "a") (data (i32.const 163848) "a") (data (i32.const 163851) "a") (data (i32.const 163854) "a") (data (i32.const 163857) "a") (data (i32.const 163860) "a") (data (i32.const 163863) "a") (data (i32.const 163866) "a") (data (i32.const 163869) "a") (data (i32.const 163872) "a") (data (i32.const 163875) "a") (data (i32.const 163878) "a") (data (i32.const 163881) "a") (data (i32.const 163884) "a") (data (i32.const 163887) "a") (data (i32.const 163890) "a") (data (i32.const 163893) "a") (data (i32.const 163896) "a") (data (i32.const 163899) "a") (data (i32.const 163902) "a") (data (i32.const 163905) "a") (data (i32.const 163908) "a") (data (i32.const 163911) "a") (data (i32.const 163914) "a") (data (i32.const 163917) "a") (data (i32.const 163920) "a") (data (i32.const 163923) "a") (data (i32.const 163926) "a") (data (i32.const 163929) "a") (data (i32.const 163932) "a") (data (i32.const 163935) "a") (data (i32.const 163938) "a") (data (i32.const 163941) "a") (data (i32.const 163944) "a") (data (i32.const 163947) "a") (data (i32.const 163950) "a") (data (i32.const 163953) "a") (data (i32.const 163956) "a") (data (i32.const 163959) "a") (data (i32.const 163962) "a") (data (i32.const 163965) "a") (data (i32.const 163968) "a") (data (i32.const 163971) "a") (data (i32.const 163974) "a") (data (i32.const 163977) "a") (data (i32.const 163980) "a") (data (i32.const 163983) "a") (data (i32.const 163986) "a") (data (i32.const 163989) "a") (data (i32.const 163992) "a") (data (i32.const 163995) "a") (data (i32.const 163998) "a") (data (i32.const 164001) "a") (data (i32.const 164004) "a") (data (i32.const 164007) "a") (data (i32.const 164010) "a") (data (i32.const 164013) "a") (data (i32.const 164016) "a") (data (i32.const 164019) "a") (data (i32.const 164022) "a") (data (i32.const 164025) "a") (data (i32.const 164028) "a") (data (i32.const 164031) "a") (data (i32.const 164034) "a") (data (i32.const 164037) "a") (data (i32.const 164040) "a") (data (i32.const 164043) "a") (data (i32.const 164046) "a") (data (i32.const 164049) "a") (data (i32.const 164052) "a") (data (i32.const 164055) "a") (data (i32.const 164058) "a") (data (i32.const 164061) "a") (data (i32.const 164064) "a") (data (i32.const 164067) "a") (data (i32.const 164070) "a") (data (i32.const 164073) "a") (data (i32.const 164076) "a") (data (i32.const 164079) "a") (data (i32.const 164082) "a") (data (i32.const 164085) "a") (data (i32.const 164088) "a") (data (i32.const 164091) "a") (data (i32.const 164094) "a") (data (i32.const 164097) "a") (data (i32.const 164100) "a") (data (i32.const 164103) "a") (data (i32.const 164106) "a") (data (i32.const 164109) "a") (data (i32.const 164112) "a") (data (i32.const 164115) "a") (data (i32.const 164118) "a") (data (i32.const 164121) "a") (data (i32.const 164124) "a") (data (i32.const 164127) "a") (data (i32.const 164130) "a") (data (i32.const 164133) "a") (data (i32.const 164136) "a") (data (i32.const 164139) "a") (data (i32.const 164142) "a") (data (i32.const 164145) "a") (data (i32.const 164148) "a") (data (i32.const 164151) "a") (data (i32.const 164154) "a") (data (i32.const 164157) "a") (data (i32.const 164160) "a") (data (i32.const 164163) "a") (data (i32.const 164166) "a") (data (i32.const 164169) "a") (data (i32.const 164172) "a") (data (i32.const 164175) "a") (data (i32.const 164178) "a") (data (i32.const 164181) "a") (data (i32.const 164184) "a") (data (i32.const 164187) "a") (data (i32.const 164190) "a") (data (i32.const 164193) "a") (data (i32.const 164196) "a") (data (i32.const 164199) "a") (data (i32.const 164202) "a") (data (i32.const 164205) "a") (data (i32.const 164208) "a") (data (i32.const 164211) "a") (data (i32.const 164214) "a") (data (i32.const 164217) "a") (data (i32.const 164220) "a") (data (i32.const 164223) "a") (data (i32.const 164226) "a") (data (i32.const 164229) "a") (data (i32.const 164232) "a") (data (i32.const 164235) "a") (data (i32.const 164238) "a") (data (i32.const 164241) "a") (data (i32.const 164244) "a") (data (i32.const 164247) "a") (data (i32.const 164250) "a") (data (i32.const 164253) "a") (data (i32.const 164256) "a") (data (i32.const 164259) "a") (data (i32.const 164262) "a") (data (i32.const 164265) "a") (data (i32.const 164268) "a") (data (i32.const 164271) "a") (data (i32.const 164274) "a") (data (i32.const 164277) "a") (data (i32.const 164280) "a") (data (i32.const 164283) "a") (data (i32.const 164286) "a") (data (i32.const 164289) "a") (data (i32.const 164292) "a") (data (i32.const 164295) "a") (data (i32.const 164298) "a") (data (i32.const 164301) "a") (data (i32.const 164304) "a") (data (i32.const 164307) "a") (data (i32.const 164310) "a") (data (i32.const 164313) "a") (data (i32.const 164316) "a") (data (i32.const 164319) "a") (data (i32.const 164322) "a") (data (i32.const 164325) "a") (data (i32.const 164328) "a") (data (i32.const 164331) "a") (data (i32.const 164334) "a") (data (i32.const 164337) "a") (data (i32.const 164340) "a") (data (i32.const 164343) "a") (data (i32.const 164346) "a") (data (i32.const 164349) "a") (data (i32.const 164352) "a") (data (i32.const 164355) "a") (data (i32.const 164358) "a") (data (i32.const 164361) "a") (data (i32.const 164364) "a") (data (i32.const 164367) "a") (data (i32.const 164370) "a") (data (i32.const 164373) "a") (data (i32.const 164376) "a") (data (i32.const 164379) "a") (data (i32.const 164382) "a") (data (i32.const 164385) "a") (data (i32.const 164388) "a") (data (i32.const 164391) "a") (data (i32.const 164394) "a") (data (i32.const 164397) "a") (data (i32.const 164400) "a") (data (i32.const 164403) "a") (data (i32.const 164406) "a") (data (i32.const 164409) "a") (data (i32.const 164412) "a") (data (i32.const 164415) "a") (data (i32.const 164418) "a") (data (i32.const 164421) "a") (data (i32.const 164424) "a") (data (i32.const 164427) "a") (data (i32.const 164430) "a") (data (i32.const 164433) "a") (data (i32.const 164436) "a") (data (i32.const 164439) "a") (data (i32.const 164442) "a") (data (i32.const 164445) "a") (data (i32.const 164448) "a") (data (i32.const 164451) "a") (data (i32.const 164454) "a") (data (i32.const 164457) "a") (data (i32.const 164460) "a") (data (i32.const 164463) "a") (data (i32.const 164466) "a") (data (i32.const 164469) "a") (data (i32.const 164472) "a") (data (i32.const 164475) "a") (data (i32.const 164478) "a") (data (i32.const 164481) "a") (data (i32.const 164484) "a") (data (i32.const 164487) "a") (data (i32.const 164490) "a") (data (i32.const 164493) "a") (data (i32.const 164496) "a") (data (i32.const 164499) "a") (data (i32.const 164502) "a") (data (i32.const 164505) "a") (data (i32.const 164508) "a") (data (i32.const 164511) "a") (data (i32.const 164514) "a") (data (i32.const 164517) "a") (data (i32.const 164520) "a") (data (i32.const 164523) "a") (data (i32.const 164526) "a") (data (i32.const 164529) "a") (data (i32.const 164532) "a") (data (i32.const 164535) "a") (data (i32.const 164538) "a") (data (i32.const 164541) "a") (data (i32.const 164544) "a") (data (i32.const 164547) "a") (data (i32.const 164550) "a") (data (i32.const 164553) "a") (data (i32.const 164556) "a") (data (i32.const 164559) "a") (data (i32.const 164562) "a") (data (i32.const 164565) "a") (data (i32.const 164568) "a") (data (i32.const 164571) "a") (data (i32.const 164574) "a") (data (i32.const 164577) "a") (data (i32.const 164580) "a") (data (i32.const 164583) "a") (data (i32.const 164586) "a") (data (i32.const 164589) "a") (data (i32.const 164592) "a") (data (i32.const 164595) "a") (data (i32.const 164598) "a") (data (i32.const 164601) "a") (data (i32.const 164604) "a") (data (i32.const 164607) "a") (data (i32.const 164610) "a") (data (i32.const 164613) "a") (data (i32.const 164616) "a") (data (i32.const 164619) "a") (data (i32.const 164622) "a") (data (i32.const 164625) "a") (data (i32.const 164628) "a") (data (i32.const 164631) "a") (data (i32.const 164634) "a") (data (i32.const 164637) "a") (data (i32.const 164640) "a") (data (i32.const 164643) "a") (data (i32.const 164646) "a") (data (i32.const 164649) "a") (data (i32.const 164652) "a") (data (i32.const 164655) "a") (data (i32.const 164658) "a") (data (i32.const 164661) "a") (data (i32.const 164664) "a") (data (i32.const 164667) "a") (data (i32.const 164670) "a") (data (i32.const 164673) "a") (data (i32.const 164676) "a") (data (i32.const 164679) "a") (data (i32.const 164682) "a") (data (i32.const 164685) "a") (data (i32.const 164688) "a") (data (i32.const 164691) "a") (data (i32.const 164694) "a") (data (i32.const 164697) "a") (data (i32.const 164700) "a") (data (i32.const 164703) "a") (data (i32.const 164706) "a") (data (i32.const 164709) "a") (data (i32.const 164712) "a") (data (i32.const 164715) "a") (data (i32.const 164718) "a") (data (i32.const 164721) "a") (data (i32.const 164724) "a") (data (i32.const 164727) "a") (data (i32.const 164730) "a") (data (i32.const 164733) "a") (data (i32.const 164736) "a") (data (i32.const 164739) "a") (data (i32.const 164742) "a") (data (i32.const 164745) "a") (data (i32.const 164748) "a") (data (i32.const 164751) "a") (data (i32.const 164754) "a") (data (i32.const 164757) "a") (data (i32.const 164760) "a") (data (i32.const 164763) "a") (data (i32.const 164766) "a") (data (i32.const 164769) "a") (data (i32.const 164772) "a") (data (i32.const 164775) "a") (data (i32.const 164778) "a") (data (i32.const 164781) "a") (data (i32.const 164784) "a") (data (i32.const 164787) "a") (data (i32.const 164790) "a") (data (i32.const 164793) "a") (data (i32.const 164796) "a") (data (i32.const 164799) "a") (data (i32.const 164802) "a") (data (i32.const 164805) "a") (data (i32.const 164808) "a") (data (i32.const 164811) "a") (data (i32.const 164814) "a") (data (i32.const 164817) "a") (data (i32.const 164820) "a") (data (i32.const 164823) "a") (data (i32.const 164826) "a") (data (i32.const 164829) "a") (data (i32.const 164832) "a") (data (i32.const 164835) "a") (data (i32.const 164838) "a") (data (i32.const 164841) "a") (data (i32.const 164844) "a") (data (i32.const 164847) "a") (data (i32.const 164850) "a") (data (i32.const 164853) "a") (data (i32.const 164856) "a") (data (i32.const 164859) "a") (data (i32.const 164862) "a") (data (i32.const 164865) "a") (data (i32.const 164868) "a") (data (i32.const 164871) "a") (data (i32.const 164874) "a") (data (i32.const 164877) "a") (data (i32.const 164880) "a") (data (i32.const 164883) "a") (data (i32.const 164886) "a") (data (i32.const 164889) "a") (data (i32.const 164892) "a") (data (i32.const 164895) "a") (data (i32.const 164898) "a") (data (i32.const 164901) "a") (data (i32.const 164904) "a") (data (i32.const 164907) "a") (data (i32.const 164910) "a") (data (i32.const 164913) "a") (data (i32.const 164916) "a") (data (i32.const 164919) "a") (data (i32.const 164922) "a") (data (i32.const 164925) "a") (data (i32.const 164928) "a") (data (i32.const 164931) "a") (data (i32.const 164934) "a") (data (i32.const 164937) "a") (data (i32.const 164940) "a") (data (i32.const 164943) "a") (data (i32.const 164946) "a") (data (i32.const 164949) "a") (data (i32.const 164952) "a") (data (i32.const 164955) "a") (data (i32.const 164958) "a") (data (i32.const 164961) "a") (data (i32.const 164964) "a") (data (i32.const 164967) "a") (data (i32.const 164970) "a") (data (i32.const 164973) "a") (data (i32.const 164976) "a") (data (i32.const 164979) "a") (data (i32.const 164982) "a") (data (i32.const 164985) "a") (data (i32.const 164988) "a") (data (i32.const 164991) "a") (data (i32.const 164994) "a") (data (i32.const 164997) "a") (data (i32.const 165000) "a") (data (i32.const 165003) "a") (data (i32.const 165006) "a") (data (i32.const 165009) "a") (data (i32.const 165012) "a") (data (i32.const 165015) "a") (data (i32.const 165018) "a") (data (i32.const 165021) "a") (data (i32.const 165024) "a") (data (i32.const 165027) "a") (data (i32.const 165030) "a") (data (i32.const 165033) "a") (data (i32.const 165036) "a") (data (i32.const 165039) "a") (data (i32.const 165042) "a") (data (i32.const 165045) "a") (data (i32.const 165048) "a") (data (i32.const 165051) "a") (data (i32.const 165054) "a") (data (i32.const 165057) "a") (data (i32.const 165060) "a") (data (i32.const 165063) "a") (data (i32.const 165066) "a") (data (i32.const 165069) "a") (data (i32.const 165072) "a") (data (i32.const 165075) "a") (data (i32.const 165078) "a") (data (i32.const 165081) "a") (data (i32.const 165084) "a") (data (i32.const 165087) "a") (data (i32.const 165090) "a") (data (i32.const 165093) "a") (data (i32.const 165096) "a") (data (i32.const 165099) "a") (data (i32.const 165102) "a") (data (i32.const 165105) "a") (data (i32.const 165108) "a") (data (i32.const 165111) "a") (data (i32.const 165114) "a") (data (i32.const 165117) "a") (data (i32.const 165120) "a") (data (i32.const 165123) "a") (data (i32.const 165126) "a") (data (i32.const 165129) "a") (data (i32.const 165132) "a") (data (i32.const 165135) "a") (data (i32.const 165138) "a") (data (i32.const 165141) "a") (data (i32.const 165144) "a") (data (i32.const 165147) "a") (data (i32.const 165150) "a") (data (i32.const 165153) "a") (data (i32.const 165156) "a") (data (i32.const 165159) "a") (data (i32.const 165162) "a") (data (i32.const 165165) "a") (data (i32.const 165168) "a") (data (i32.const 165171) "a") (data (i32.const 165174) "a") (data (i32.const 165177) "a") (data (i32.const 165180) "a") (data (i32.const 165183) "a") (data (i32.const 165186) "a") (data (i32.const 165189) "a") (data (i32.const 165192) "a") (data (i32.const 165195) "a") (data (i32.const 165198) "a") (data (i32.const 165201) "a") (data (i32.const 165204) "a") (data (i32.const 165207) "a") (data (i32.const 165210) "a") (data (i32.const 165213) "a") (data (i32.const 165216) "a") (data (i32.const 165219) "a") (data (i32.const 165222) "a") (data (i32.const 165225) "a") (data (i32.const 165228) "a") (data (i32.const 165231) "a") (data (i32.const 165234) "a") (data (i32.const 165237) "a") (data (i32.const 165240) "a") (data (i32.const 165243) "a") (data (i32.const 165246) "a") (data (i32.const 165249) "a") (data (i32.const 165252) "a") (data (i32.const 165255) "a") (data (i32.const 165258) "a") (data (i32.const 165261) "a") (data (i32.const 165264) "a") (data (i32.const 165267) "a") (data (i32.const 165270) "a") (data (i32.const 165273) "a") (data (i32.const 165276) "a") (data (i32.const 165279) "a") (data (i32.const 165282) "a") (data (i32.const 165285) "a") (data (i32.const 165288) "a") (data (i32.const 165291) "a") (data (i32.const 165294) "a") (data (i32.const 165297) "a") (data (i32.const 165300) "a") (data (i32.const 165303) "a") (data (i32.const 165306) "a") (data (i32.const 165309) "a") (data (i32.const 165312) "a") (data (i32.const 165315) "a") (data (i32.const 165318) "a") (data (i32.const 165321) "a") (data (i32.const 165324) "a") (data (i32.const 165327) "a") (data (i32.const 165330) "a") (data (i32.const 165333) "a") (data (i32.const 165336) "a") (data (i32.const 165339) "a") (data (i32.const 165342) "a") (data (i32.const 165345) "a") (data (i32.const 165348) "a") (data (i32.const 165351) "a") (data (i32.const 165354) "a") (data (i32.const 165357) "a") (data (i32.const 165360) "a") (data (i32.const 165363) "a") (data (i32.const 165366) "a") (data (i32.const 165369) "a") (data (i32.const 165372) "a") (data (i32.const 165375) "a") (data (i32.const 165378) "a") (data (i32.const 165381) "a") (data (i32.const 165384) "a") (data (i32.const 165387) "a") (data (i32.const 165390) "a") (data (i32.const 165393) "a") (data (i32.const 165396) "a") (data (i32.const 165399) "a") (data (i32.const 165402) "a") (data (i32.const 165405) "a") (data (i32.const 165408) "a") (data (i32.const 165411) "a") (data (i32.const 165414) "a") (data (i32.const 165417) "a") (data (i32.const 165420) "a") (data (i32.const 165423) "a") (data (i32.const 165426) "a") (data (i32.const 165429) "a") (data (i32.const 165432) "a") (data (i32.const 165435) "a") (data (i32.const 165438) "a") (data (i32.const 165441) "a") (data (i32.const 165444) "a") (data (i32.const 165447) "a") (data (i32.const 165450) "a") (data (i32.const 165453) "a") (data (i32.const 165456) "a") (data (i32.const 165459) "a") (data (i32.const 165462) "a") (data (i32.const 165465) "a") (data (i32.const 165468) "a") (data (i32.const 165471) "a") (data (i32.const 165474) "a") (data (i32.const 165477) "a") (data (i32.const 165480) "a") (data (i32.const 165483) "a") (data (i32.const 165486) "a") (data (i32.const 165489) "a") (data (i32.const 165492) "a") (data (i32.const 165495) "a") (data (i32.const 165498) "a") (data (i32.const 165501) "a") (data (i32.const 165504) "a") (data (i32.const 165507) "a") (data (i32.const 165510) "a") (data (i32.const 165513) "a") (data (i32.const 165516) "a") (data (i32.const 165519) "a") (data (i32.const 165522) "a") (data (i32.const 165525) "a") (data (i32.const 165528) "a") (data (i32.const 165531) "a") (data (i32.const 165534) "a") (data (i32.const 165537) "a") (data (i32.const 165540) "a") (data (i32.const 165543) "a") (data (i32.const 165546) "a") (data (i32.const 165549) "a") (data (i32.const 165552) "a") (data (i32.const 165555) "a") (data (i32.const 165558) "a") (data (i32.const 165561) "a") (data (i32.const 165564) "a") (data (i32.const 165567) "a") (data (i32.const 165570) "a") (data (i32.const 165573) "a") (data (i32.const 165576) "a") (data (i32.const 165579) "a") (data (i32.const 165582) "a") (data (i32.const 165585) "a") (data (i32.const 165588) "a") (data (i32.const 165591) "a") (data (i32.const 165594) "a") (data (i32.const 165597) "a") (data (i32.const 165600) "a") (data (i32.const 165603) "a") (data (i32.const 165606) "a") (data (i32.const 165609) "a") (data (i32.const 165612) "a") (data (i32.const 165615) "a") (data (i32.const 165618) "a") (data (i32.const 165621) "a") (data (i32.const 165624) "a") (data (i32.const 165627) "a") (data (i32.const 165630) "a") (data (i32.const 165633) "a") (data (i32.const 165636) "a") (data (i32.const 165639) "a") (data (i32.const 165642) "a") (data (i32.const 165645) "a") (data (i32.const 165648) "a") (data (i32.const 165651) "a") (data (i32.const 165654) "a") (data (i32.const 165657) "a") (data (i32.const 165660) "a") (data (i32.const 165663) "a") (data (i32.const 165666) "a") (data (i32.const 165669) "a") (data (i32.const 165672) "a") (data (i32.const 165675) "a") (data (i32.const 165678) "a") (data (i32.const 165681) "a") (data (i32.const 165684) "a") (data (i32.const 165687) "a") (data (i32.const 165690) "a") (data (i32.const 165693) "a") (data (i32.const 165696) "a") (data (i32.const 165699) "a") (data (i32.const 165702) "a") (data (i32.const 165705) "a") (data (i32.const 165708) "a") (data (i32.const 165711) "a") (data (i32.const 165714) "a") (data (i32.const 165717) "a") (data (i32.const 165720) "a") (data (i32.const 165723) "a") (data (i32.const 165726) "a") (data (i32.const 165729) "a") (data (i32.const 165732) "a") (data (i32.const 165735) "a") (data (i32.const 165738) "a") (data (i32.const 165741) "a") (data (i32.const 165744) "a") (data (i32.const 165747) "a") (data (i32.const 165750) "a") (data (i32.const 165753) "a") (data (i32.const 165756) "a") (data (i32.const 165759) "a") (data (i32.const 165762) "a") (data (i32.const 165765) "a") (data (i32.const 165768) "a") (data (i32.const 165771) "a") (data (i32.const 165774) "a") (data (i32.const 165777) "a") (data (i32.const 165780) "a") (data (i32.const 165783) "a") (data (i32.const 165786) "a") (data (i32.const 165789) "a") (data (i32.const 165792) "a") (data (i32.const 165795) "a") (data (i32.const 165798) "a") (data (i32.const 165801) "a") (data (i32.const 165804) "a") (data (i32.const 165807) "a") (data (i32.const 165810) "a") (data (i32.const 165813) "a") (data (i32.const 165816) "a") (data (i32.const 165819) "a") (data (i32.const 165822) "a") (data (i32.const 165825) "a") (data (i32.const 165828) "a") (data (i32.const 165831) "a") (data (i32.const 165834) "a") (data (i32.const 165837) "a") (data (i32.const 165840) "a") (data (i32.const 165843) "a") (data (i32.const 165846) "a") (data (i32.const 165849) "a") (data (i32.const 165852) "a") (data (i32.const 165855) "a") (data (i32.const 165858) "a") (data (i32.const 165861) "a") (data (i32.const 165864) "a") (data (i32.const 165867) "a") (data (i32.const 165870) "a") (data (i32.const 165873) "a") (data (i32.const 165876) "a") (data (i32.const 165879) "a") (data (i32.const 165882) "a") (data (i32.const 165885) "a") (data (i32.const 165888) "a") (data (i32.const 165891) "a") (data (i32.const 165894) "a") (data (i32.const 165897) "a") (data (i32.const 165900) "a") (data (i32.const 165903) "a") (data (i32.const 165906) "a") (data (i32.const 165909) "a") (data (i32.const 165912) "a") (data (i32.const 165915) "a") (data (i32.const 165918) "a") (data (i32.const 165921) "a") (data (i32.const 165924) "a") (data (i32.const 165927) "a") (data (i32.const 165930) "a") (data (i32.const 165933) "a") (data (i32.const 165936) "a") (data (i32.const 165939) "a") (data (i32.const 165942) "a") (data (i32.const 165945) "a") (data (i32.const 165948) "a") (data (i32.const 165951) "a") (data (i32.const 165954) "a") (data (i32.const 165957) "a") (data (i32.const 165960) "a") (data (i32.const 165963) "a") (data (i32.const 165966) "a") (data (i32.const 165969) "a") (data (i32.const 165972) "a") (data (i32.const 165975) "a") (data (i32.const 165978) "a") (data (i32.const 165981) "a") (data (i32.const 165984) "a") (data (i32.const 165987) "a") (data (i32.const 165990) "a") (data (i32.const 165993) "a") (data (i32.const 165996) "a") (data (i32.const 165999) "a") (data (i32.const 166002) "a") (data (i32.const 166005) "a") (data (i32.const 166008) "a") (data (i32.const 166011) "a") (data (i32.const 166014) "a") (data (i32.const 166017) "a") (data (i32.const 166020) "a") (data (i32.const 166023) "a") (data (i32.const 166026) "a") (data (i32.const 166029) "a") (data (i32.const 166032) "a") (data (i32.const 166035) "a") (data (i32.const 166038) "a") (data (i32.const 166041) "a") (data (i32.const 166044) "a") (data (i32.const 166047) "a") (data (i32.const 166050) "a") (data (i32.const 166053) "a") (data (i32.const 166056) "a") (data (i32.const 166059) "a") (data (i32.const 166062) "a") (data (i32.const 166065) "a") (data (i32.const 166068) "a") (data (i32.const 166071) "a") (data (i32.const 166074) "a") (data (i32.const 166077) "a") (data (i32.const 166080) "a") (data (i32.const 166083) "a") (data (i32.const 166086) "a") (data (i32.const 166089) "a") (data (i32.const 166092) "a") (data (i32.const 166095) "a") (data (i32.const 166098) "a") (data (i32.const 166101) "a") (data (i32.const 166104) "a") (data (i32.const 166107) "a") (data (i32.const 166110) "a") (data (i32.const 166113) "a") (data (i32.const 166116) "a") (data (i32.const 166119) "a") (data (i32.const 166122) "a") (data (i32.const 166125) "a") (data (i32.const 166128) "a") (data (i32.const 166131) "a") (data (i32.const 166134) "a") (data (i32.const 166137) "a") (data (i32.const 166140) "a") (data (i32.const 166143) "a") (data (i32.const 166146) "a") (data (i32.const 166149) "a") (data (i32.const 166152) "a") (data (i32.const 166155) "a") (data (i32.const 166158) "a") (data (i32.const 166161) "a") (data (i32.const 166164) "a") (data (i32.const 166167) "a") (data (i32.const 166170) "a") (data (i32.const 166173) "a") (data (i32.const 166176) "a") (data (i32.const 166179) "a") (data (i32.const 166182) "a") (data (i32.const 166185) "a") (data (i32.const 166188) "a") (data (i32.const 166191) "a") (data (i32.const 166194) "a") (data (i32.const 166197) "a") (data (i32.const 166200) "a") (data (i32.const 166203) "a") (data (i32.const 166206) "a") (data (i32.const 166209) "a") (data (i32.const 166212) "a") (data (i32.const 166215) "a") (data (i32.const 166218) "a") (data (i32.const 166221) "a") (data (i32.const 166224) "a") (data (i32.const 166227) "a") (data (i32.const 166230) "a") (data (i32.const 166233) "a") (data (i32.const 166236) "a") (data (i32.const 166239) "a") (data (i32.const 166242) "a") (data (i32.const 166245) "a") (data (i32.const 166248) "a") (data (i32.const 166251) "a") (data (i32.const 166254) "a") (data (i32.const 166257) "a") (data (i32.const 166260) "a") (data (i32.const 166263) "a") (data (i32.const 166266) "a") (data (i32.const 166269) "a") (data (i32.const 166272) "a") (data (i32.const 166275) "a") (data (i32.const 166278) "a") (data (i32.const 166281) "a") (data (i32.const 166284) "a") (data (i32.const 166287) "a") (data (i32.const 166290) "a") (data (i32.const 166293) "a") (data (i32.const 166296) "a") (data (i32.const 166299) "a") (data (i32.const 166302) "a") (data (i32.const 166305) "a") (data (i32.const 166308) "a") (data (i32.const 166311) "a") (data (i32.const 166314) "a") (data (i32.const 166317) "a") (data (i32.const 166320) "a") (data (i32.const 166323) "a") (data (i32.const 166326) "a") (data (i32.const 166329) "a") (data (i32.const 166332) "a") (data (i32.const 166335) "a") (data (i32.const 166338) "a") (data (i32.const 166341) "a") (data (i32.const 166344) "a") (data (i32.const 166347) "a") (data (i32.const 166350) "a") (data (i32.const 166353) "a") (data (i32.const 166356) "a") (data (i32.const 166359) "a") (data (i32.const 166362) "a") (data (i32.const 166365) "a") (data (i32.const 166368) "a") (data (i32.const 166371) "a") (data (i32.const 166374) "a") (data (i32.const 166377) "a") (data (i32.const 166380) "a") (data (i32.const 166383) "a") (data (i32.const 166386) "a") (data (i32.const 166389) "a") (data (i32.const 166392) "a") (data (i32.const 166395) "a") (data (i32.const 166398) "a") (data (i32.const 166401) "a") (data (i32.const 166404) "a") (data (i32.const 166407) "a") (data (i32.const 166410) "a") (data (i32.const 166413) "a") (data (i32.const 166416) "a") (data (i32.const 166419) "a") (data (i32.const 166422) "a") (data (i32.const 166425) "a") (data (i32.const 166428) "a") (data (i32.const 166431) "a") (data (i32.const 166434) "a") (data (i32.const 166437) "a") (data (i32.const 166440) "a") (data (i32.const 166443) "a") (data (i32.const 166446) "a") (data (i32.const 166449) "a") (data (i32.const 166452) "a") (data (i32.const 166455) "a") (data (i32.const 166458) "a") (data (i32.const 166461) "a") (data (i32.const 166464) "a") (data (i32.const 166467) "a") (data (i32.const 166470) "a") (data (i32.const 166473) "a") (data (i32.const 166476) "a") (data (i32.const 166479) "a") (data (i32.const 166482) "a") (data (i32.const 166485) "a") (data (i32.const 166488) "a") (data (i32.const 166491) "a") (data (i32.const 166494) "a") (data (i32.const 166497) "a") (data (i32.const 166500) "a") (data (i32.const 166503) "a") (data (i32.const 166506) "a") (data (i32.const 166509) "a") (data (i32.const 166512) "a") (data (i32.const 166515) "a") (data (i32.const 166518) "a") (data (i32.const 166521) "a") (data (i32.const 166524) "a") (data (i32.const 166527) "a") (data (i32.const 166530) "a") (data (i32.const 166533) "a") (data (i32.const 166536) "a") (data (i32.const 166539) "a") (data (i32.const 166542) "a") (data (i32.const 166545) "a") (data (i32.const 166548) "a") (data (i32.const 166551) "a") (data (i32.const 166554) "a") (data (i32.const 166557) "a") (data (i32.const 166560) "a") (data (i32.const 166563) "a") (data (i32.const 166566) "a") (data (i32.const 166569) "a") (data (i32.const 166572) "a") (data (i32.const 166575) "a") (data (i32.const 166578) "a") (data (i32.const 166581) "a") (data (i32.const 166584) "a") (data (i32.const 166587) "a") (data (i32.const 166590) "a") (data (i32.const 166593) "a") (data (i32.const 166596) "a") (data (i32.const 166599) "a") (data (i32.const 166602) "a") (data (i32.const 166605) "a") (data (i32.const 166608) "a") (data (i32.const 166611) "a") (data (i32.const 166614) "a") (data (i32.const 166617) "a") (data (i32.const 166620) "a") (data (i32.const 166623) "a") (data (i32.const 166626) "a") (data (i32.const 166629) "a") (data (i32.const 166632) "a") (data (i32.const 166635) "a") (data (i32.const 166638) "a") (data (i32.const 166641) "a") (data (i32.const 166644) "a") (data (i32.const 166647) "a") (data (i32.const 166650) "a") (data (i32.const 166653) "a") (data (i32.const 166656) "a") (data (i32.const 166659) "a") (data (i32.const 166662) "a") (data (i32.const 166665) "a") (data (i32.const 166668) "a") (data (i32.const 166671) "a") (data (i32.const 166674) "a") (data (i32.const 166677) "a") (data (i32.const 166680) "a") (data (i32.const 166683) "a") (data (i32.const 166686) "a") (data (i32.const 166689) "a") (data (i32.const 166692) "a") (data (i32.const 166695) "a") (data (i32.const 166698) "a") (data (i32.const 166701) "a") (data (i32.const 166704) "a") (data (i32.const 166707) "a") (data (i32.const 166710) "a") (data (i32.const 166713) "a") (data (i32.const 166716) "a") (data (i32.const 166719) "a") (data (i32.const 166722) "a") (data (i32.const 166725) "a") (data (i32.const 166728) "a") (data (i32.const 166731) "a") (data (i32.const 166734) "a") (data (i32.const 166737) "a") (data (i32.const 166740) "a") (data (i32.const 166743) "a") (data (i32.const 166746) "a") (data (i32.const 166749) "a") (data (i32.const 166752) "a") (data (i32.const 166755) "a") (data (i32.const 166758) "a") (data (i32.const 166761) "a") (data (i32.const 166764) "a") (data (i32.const 166767) "a") (data (i32.const 166770) "a") (data (i32.const 166773) "a") (data (i32.const 166776) "a") (data (i32.const 166779) "a") (data (i32.const 166782) "a") (data (i32.const 166785) "a") (data (i32.const 166788) "a") (data (i32.const 166791) "a") (data (i32.const 166794) "a") (data (i32.const 166797) "a") (data (i32.const 166800) "a") (data (i32.const 166803) "a") (data (i32.const 166806) "a") (data (i32.const 166809) "a") (data (i32.const 166812) "a") (data (i32.const 166815) "a") (data (i32.const 166818) "a") (data (i32.const 166821) "a") (data (i32.const 166824) "a") (data (i32.const 166827) "a") (data (i32.const 166830) "a") (data (i32.const 166833) "a") (data (i32.const 166836) "a") (data (i32.const 166839) "a") (data (i32.const 166842) "a") (data (i32.const 166845) "a") (data (i32.const 166848) "a") (data (i32.const 166851) "a") (data (i32.const 166854) "a") (data (i32.const 166857) "a") (data (i32.const 166860) "a") (data (i32.const 166863) "a") (data (i32.const 166866) "a") (data (i32.const 166869) "a") (data (i32.const 166872) "a") (data (i32.const 166875) "a") (data (i32.const 166878) "a") (data (i32.const 166881) "a") (data (i32.const 166884) "a") (data (i32.const 166887) "a") (data (i32.const 166890) "a") (data (i32.const 166893) "a") (data (i32.const 166896) "a") (data (i32.const 166899) "a") (data (i32.const 166902) "a") (data (i32.const 166905) "a") (data (i32.const 166908) "a") (data (i32.const 166911) "a") (data (i32.const 166914) "a") (data (i32.const 166917) "a") (data (i32.const 166920) "a") (data (i32.const 166923) "a") (data (i32.const 166926) "a") (data (i32.const 166929) "a") (data (i32.const 166932) "a") (data (i32.const 166935) "a") (data (i32.const 166938) "a") (data (i32.const 166941) "a") (data (i32.const 166944) "a") (data (i32.const 166947) "a") (data (i32.const 166950) "a") (data (i32.const 166953) "a") (data (i32.const 166956) "a") (data (i32.const 166959) "a") (data (i32.const 166962) "a") (data (i32.const 166965) "a") (data (i32.const 166968) "a") (data (i32.const 166971) "a") (data (i32.const 166974) "a") (data (i32.const 166977) "a") (data (i32.const 166980) "a") (data (i32.const 166983) "a") (data (i32.const 166986) "a") (data (i32.const 166989) "a") (data (i32.const 166992) "a") (data (i32.const 166995) "a") (data (i32.const 166998) "a") (data (i32.const 167001) "a") (data (i32.const 167004) "a") (data (i32.const 167007) "a") (data (i32.const 167010) "a") (data (i32.const 167013) "a") (data (i32.const 167016) "a") (data (i32.const 167019) "a") (data (i32.const 167022) "a") (data (i32.const 167025) "a") (data (i32.const 167028) "a") (data (i32.const 167031) "a") (data (i32.const 167034) "a") (data (i32.const 167037) "a") (data (i32.const 167040) "a") (data (i32.const 167043) "a") (data (i32.const 167046) "a") (data (i32.const 167049) "a") (data (i32.const 167052) "a") (data (i32.const 167055) "a") (data (i32.const 167058) "a") (data (i32.const 167061) "a") (data (i32.const 167064) "a") (data (i32.const 167067) "a") (data (i32.const 167070) "a") (data (i32.const 167073) "a") (data (i32.const 167076) "a") (data (i32.const 167079) "a") (data (i32.const 167082) "a") (data (i32.const 167085) "a") (data (i32.const 167088) "a") (data (i32.const 167091) "a") (data (i32.const 167094) "a") (data (i32.const 167097) "a") (data (i32.const 167100) "a") (data (i32.const 167103) "a") (data (i32.const 167106) "a") (data (i32.const 167109) "a") (data (i32.const 167112) "a") (data (i32.const 167115) "a") (data (i32.const 167118) "a") (data (i32.const 167121) "a") (data (i32.const 167124) "a") (data (i32.const 167127) "a") (data (i32.const 167130) "a") (data (i32.const 167133) "a") (data (i32.const 167136) "a") (data (i32.const 167139) "a") (data (i32.const 167142) "a") (data (i32.const 167145) "a") (data (i32.const 167148) "a") (data (i32.const 167151) "a") (data (i32.const 167154) "a") (data (i32.const 167157) "a") (data (i32.const 167160) "a") (data (i32.const 167163) "a") (data (i32.const 167166) "a") (data (i32.const 167169) "a") (data (i32.const 167172) "a") (data (i32.const 167175) "a") (data (i32.const 167178) "a") (data (i32.const 167181) "a") (data (i32.const 167184) "a") (data (i32.const 167187) "a") (data (i32.const 167190) "a") (data (i32.const 167193) "a") (data (i32.const 167196) "a") (data (i32.const 167199) "a") (data (i32.const 167202) "a") (data (i32.const 167205) "a") (data (i32.const 167208) "a") (data (i32.const 167211) "a") (data (i32.const 167214) "a") (data (i32.const 167217) "a") (data (i32.const 167220) "a") (data (i32.const 167223) "a") (data (i32.const 167226) "a") (data (i32.const 167229) "a") (data (i32.const 167232) "a") (data (i32.const 167235) "a") (data (i32.const 167238) "a") (data (i32.const 167241) "a") (data (i32.const 167244) "a") (data (i32.const 167247) "a") (data (i32.const 167250) "a") (data (i32.const 167253) "a") (data (i32.const 167256) "a") (data (i32.const 167259) "a") (data (i32.const 167262) "a") (data (i32.const 167265) "a") (data (i32.const 167268) "a") (data (i32.const 167271) "a") (data (i32.const 167274) "a") (data (i32.const 167277) "a") (data (i32.const 167280) "a") (data (i32.const 167283) "a") (data (i32.const 167286) "a") (data (i32.const 167289) "a") (data (i32.const 167292) "a") (data (i32.const 167295) "a") (data (i32.const 167298) "a") (data (i32.const 167301) "a") (data (i32.const 167304) "a") (data (i32.const 167307) "a") (data (i32.const 167310) "a") (data (i32.const 167313) "a") (data (i32.const 167316) "a") (data (i32.const 167319) "a") (data (i32.const 167322) "a") (data (i32.const 167325) "a") (data (i32.const 167328) "a") (data (i32.const 167331) "a") (data (i32.const 167334) "a") (data (i32.const 167337) "a") (data (i32.const 167340) "a") (data (i32.const 167343) "a") (data (i32.const 167346) "a") (data (i32.const 167349) "a") (data (i32.const 167352) "a") (data (i32.const 167355) "a") (data (i32.const 167358) "a") (data (i32.const 167361) "a") (data (i32.const 167364) "a") (data (i32.const 167367) "a") (data (i32.const 167370) "a") (data (i32.const 167373) "a") (data (i32.const 167376) "a") (data (i32.const 167379) "a") (data (i32.const 167382) "a") (data (i32.const 167385) "a") (data (i32.const 167388) "a") (data (i32.const 167391) "a") (data (i32.const 167394) "a") (data (i32.const 167397) "a") (data (i32.const 167400) "a") (data (i32.const 167403) "a") (data (i32.const 167406) "a") (data (i32.const 167409) "a") (data (i32.const 167412) "a") (data (i32.const 167415) "a") (data (i32.const 167418) "a") (data (i32.const 167421) "a") (data (i32.const 167424) "a") (data (i32.const 167427) "a") (data (i32.const 167430) "a") (data (i32.const 167433) "a") (data (i32.const 167436) "a") (data (i32.const 167439) "a") (data (i32.const 167442) "a") (data (i32.const 167445) "a") (data (i32.const 167448) "a") (data (i32.const 167451) "a") (data (i32.const 167454) "a") (data (i32.const 167457) "a") (data (i32.const 167460) "a") (data (i32.const 167463) "a") (data (i32.const 167466) "a") (data (i32.const 167469) "a") (data (i32.const 167472) "a") (data (i32.const 167475) "a") (data (i32.const 167478) "a") (data (i32.const 167481) "a") (data (i32.const 167484) "a") (data (i32.const 167487) "a") (data (i32.const 167490) "a") (data (i32.const 167493) "a") (data (i32.const 167496) "a") (data (i32.const 167499) "a") (data (i32.const 167502) "a") (data (i32.const 167505) "a") (data (i32.const 167508) "a") (data (i32.const 167511) "a") (data (i32.const 167514) "a") (data (i32.const 167517) "a") (data (i32.const 167520) "a") (data (i32.const 167523) "a") (data (i32.const 167526) "a") (data (i32.const 167529) "a") (data (i32.const 167532) "a") (data (i32.const 167535) "a") (data (i32.const 167538) "a") (data (i32.const 167541) "a") (data (i32.const 167544) "a") (data (i32.const 167547) "a") (data (i32.const 167550) "a") (data (i32.const 167553) "a") (data (i32.const 167556) "a") (data (i32.const 167559) "a") (data (i32.const 167562) "a") (data (i32.const 167565) "a") (data (i32.const 167568) "a") (data (i32.const 167571) "a") (data (i32.const 167574) "a") (data (i32.const 167577) "a") (data (i32.const 167580) "a") (data (i32.const 167583) "a") (data (i32.const 167586) "a") (data (i32.const 167589) "a") (data (i32.const 167592) "a") (data (i32.const 167595) "a") (data (i32.const 167598) "a") (data (i32.const 167601) "a") (data (i32.const 167604) "a") (data (i32.const 167607) "a") (data (i32.const 167610) "a") (data (i32.const 167613) "a") (data (i32.const 167616) "a") (data (i32.const 167619) "a") (data (i32.const 167622) "a") (data (i32.const 167625) "a") (data (i32.const 167628) "a") (data (i32.const 167631) "a") (data (i32.const 167634) "a") (data (i32.const 167637) "a") (data (i32.const 167640) "a") (data (i32.const 167643) "a") (data (i32.const 167646) "a") (data (i32.const 167649) "a") (data (i32.const 167652) "a") (data (i32.const 167655) "a") (data (i32.const 167658) "a") (data (i32.const 167661) "a") (data (i32.const 167664) "a") (data (i32.const 167667) "a") (data (i32.const 167670) "a") (data (i32.const 167673) "a") (data (i32.const 167676) "a") (data (i32.const 167679) "a") (data (i32.const 167682) "a") (data (i32.const 167685) "a") (data (i32.const 167688) "a") (data (i32.const 167691) "a") (data (i32.const 167694) "a") (data (i32.const 167697) "a") (data (i32.const 167700) "a") (data (i32.const 167703) "a") (data (i32.const 167706) "a") (data (i32.const 167709) "a") (data (i32.const 167712) "a") (data (i32.const 167715) "a") (data (i32.const 167718) "a") (data (i32.const 167721) "a") (data (i32.const 167724) "a") (data (i32.const 167727) "a") (data (i32.const 167730) "a") (data (i32.const 167733) "a") (data (i32.const 167736) "a") (data (i32.const 167739) "a") (data (i32.const 167742) "a") (data (i32.const 167745) "a") (data (i32.const 167748) "a") (data (i32.const 167751) "a") (data (i32.const 167754) "a") (data (i32.const 167757) "a") (data (i32.const 167760) "a") (data (i32.const 167763) "a") (data (i32.const 167766) "a") (data (i32.const 167769) "a") (data (i32.const 167772) "a") (data (i32.const 167775) "a") (data (i32.const 167778) "a") (data (i32.const 167781) "a") (data (i32.const 167784) "a") (data (i32.const 167787) "a") (data (i32.const 167790) "a") (data (i32.const 167793) "a") (data (i32.const 167796) "a") (data (i32.const 167799) "a") (data (i32.const 167802) "a") (data (i32.const 167805) "a") (data (i32.const 167808) "a") (data (i32.const 167811) "a") (data (i32.const 167814) "a") (data (i32.const 167817) "a") (data (i32.const 167820) "a") (data (i32.const 167823) "a") (data (i32.const 167826) "a") (data (i32.const 167829) "a") (data (i32.const 167832) "a") (data (i32.const 167835) "a") (data (i32.const 167838) "a") (data (i32.const 167841) "a") (data (i32.const 167844) "a") (data (i32.const 167847) "a") (data (i32.const 167850) "a") (data (i32.const 167853) "a") (data (i32.const 167856) "a") (data (i32.const 167859) "a") (data (i32.const 167862) "a") (data (i32.const 167865) "a") (data (i32.const 167868) "a") (data (i32.const 167871) "a") (data (i32.const 167874) "a") (data (i32.const 167877) "a") (data (i32.const 167880) "a") (data (i32.const 167883) "a") (data (i32.const 167886) "a") (data (i32.const 167889) "a") (data (i32.const 167892) "a") (data (i32.const 167895) "a") (data (i32.const 167898) "a") (data (i32.const 167901) "a") (data (i32.const 167904) "a") (data (i32.const 167907) "a") (data (i32.const 167910) "a") (data (i32.const 167913) "a") (data (i32.const 167916) "a") (data (i32.const 167919) "a") (data (i32.const 167922) "a") (data (i32.const 167925) "a") (data (i32.const 167928) "a") (data (i32.const 167931) "a") (data (i32.const 167934) "a") (data (i32.const 167937) "a") (data (i32.const 167940) "a") (data (i32.const 167943) "a") (data (i32.const 167946) "a") (data (i32.const 167949) "a") (data (i32.const 167952) "a") (data (i32.const 167955) "a") (data (i32.const 167958) "a") (data (i32.const 167961) "a") (data (i32.const 167964) "a") (data (i32.const 167967) "a") (data (i32.const 167970) "a") (data (i32.const 167973) "a") (data (i32.const 167976) "a") (data (i32.const 167979) "a") (data (i32.const 167982) "a") (data (i32.const 167985) "a") (data (i32.const 167988) "a") (data (i32.const 167991) "a") (data (i32.const 167994) "a") (data (i32.const 167997) "a") (data (i32.const 168000) "a") (data (i32.const 168003) "a") (data (i32.const 168006) "a") (data (i32.const 168009) "a") (data (i32.const 168012) "a") (data (i32.const 168015) "a") (data (i32.const 168018) "a") (data (i32.const 168021) "a") (data (i32.const 168024) "a") (data (i32.const 168027) "a") (data (i32.const 168030) "a") (data (i32.const 168033) "a") (data (i32.const 168036) "a") (data (i32.const 168039) "a") (data (i32.const 168042) "a") (data (i32.const 168045) "a") (data (i32.const 168048) "a") (data (i32.const 168051) "a") (data (i32.const 168054) "a") (data (i32.const 168057) "a") (data (i32.const 168060) "a") (data (i32.const 168063) "a") (data (i32.const 168066) "a") (data (i32.const 168069) "a") (data (i32.const 168072) "a") (data (i32.const 168075) "a") (data (i32.const 168078) "a") (data (i32.const 168081) "a") (data (i32.const 168084) "a") (data (i32.const 168087) "a") (data (i32.const 168090) "a") (data (i32.const 168093) "a") (data (i32.const 168096) "a") (data (i32.const 168099) "a") (data (i32.const 168102) "a") (data (i32.const 168105) "a") (data (i32.const 168108) "a") (data (i32.const 168111) "a") (data (i32.const 168114) "a") (data (i32.const 168117) "a") (data (i32.const 168120) "a") (data (i32.const 168123) "a") (data (i32.const 168126) "a") (data (i32.const 168129) "a") (data (i32.const 168132) "a") (data (i32.const 168135) "a") (data (i32.const 168138) "a") (data (i32.const 168141) "a") (data (i32.const 168144) "a") (data (i32.const 168147) "a") (data (i32.const 168150) "a") (data (i32.const 168153) "a") (data (i32.const 168156) "a") (data (i32.const 168159) "a") (data (i32.const 168162) "a") (data (i32.const 168165) "a") (data (i32.const 168168) "a") (data (i32.const 168171) "a") (data (i32.const 168174) "a") (data (i32.const 168177) "a") (data (i32.const 168180) "a") (data (i32.const 168183) "a") (data (i32.const 168186) "a") (data (i32.const 168189) "a") (data (i32.const 168192) "a") (data (i32.const 168195) "a") (data (i32.const 168198) "a") (data (i32.const 168201) "a") (data (i32.const 168204) "a") (data (i32.const 168207) "a") (data (i32.const 168210) "a") (data (i32.const 168213) "a") (data (i32.const 168216) "a") (data (i32.const 168219) "a") (data (i32.const 168222) "a") (data (i32.const 168225) "a") (data (i32.const 168228) "a") (data (i32.const 168231) "a") (data (i32.const 168234) "a") (data (i32.const 168237) "a") (data (i32.const 168240) "a") (data (i32.const 168243) "a") (data (i32.const 168246) "a") (data (i32.const 168249) "a") (data (i32.const 168252) "a") (data (i32.const 168255) "a") (data (i32.const 168258) "a") (data (i32.const 168261) "a") (data (i32.const 168264) "a") (data (i32.const 168267) "a") (data (i32.const 168270) "a") (data (i32.const 168273) "a") (data (i32.const 168276) "a") (data (i32.const 168279) "a") (data (i32.const 168282) "a") (data (i32.const 168285) "a") (data (i32.const 168288) "a") (data (i32.const 168291) "a") (data (i32.const 168294) "a") (data (i32.const 168297) "a") (data (i32.const 168300) "a") (data (i32.const 168303) "a") (data (i32.const 168306) "a") (data (i32.const 168309) "a") (data (i32.const 168312) "a") (data (i32.const 168315) "a") (data (i32.const 168318) "a") (data (i32.const 168321) "a") (data (i32.const 168324) "a") (data (i32.const 168327) "a") (data (i32.const 168330) "a") (data (i32.const 168333) "a") (data (i32.const 168336) "a") (data (i32.const 168339) "a") (data (i32.const 168342) "a") (data (i32.const 168345) "a") (data (i32.const 168348) "a") (data (i32.const 168351) "a") (data (i32.const 168354) "a") (data (i32.const 168357) "a") (data (i32.const 168360) "a") (data (i32.const 168363) "a") (data (i32.const 168366) "a") (data (i32.const 168369) "a") (data (i32.const 168372) "a") (data (i32.const 168375) "a") (data (i32.const 168378) "a") (data (i32.const 168381) "a") (data (i32.const 168384) "a") (data (i32.const 168387) "a") (data (i32.const 168390) "a") (data (i32.const 168393) "a") (data (i32.const 168396) "a") (data (i32.const 168399) "a") (data (i32.const 168402) "a") (data (i32.const 168405) "a") (data (i32.const 168408) "a") (data (i32.const 168411) "a") (data (i32.const 168414) "a") (data (i32.const 168417) "a") (data (i32.const 168420) "a") (data (i32.const 168423) "a") (data (i32.const 168426) "a") (data (i32.const 168429) "a") (data (i32.const 168432) "a") (data (i32.const 168435) "a") (data (i32.const 168438) "a") (data (i32.const 168441) "a") (data (i32.const 168444) "a") (data (i32.const 168447) "a") (data (i32.const 168450) "a") (data (i32.const 168453) "a") (data (i32.const 168456) "a") (data (i32.const 168459) "a") (data (i32.const 168462) "a") (data (i32.const 168465) "a") (data (i32.const 168468) "a") (data (i32.const 168471) "a") (data (i32.const 168474) "a") (data (i32.const 168477) "a") (data (i32.const 168480) "a") (data (i32.const 168483) "a") (data (i32.const 168486) "a") (data (i32.const 168489) "a") (data (i32.const 168492) "a") (data (i32.const 168495) "a") (data (i32.const 168498) "a") (data (i32.const 168501) "a") (data (i32.const 168504) "a") (data (i32.const 168507) "a") (data (i32.const 168510) "a") (data (i32.const 168513) "a") (data (i32.const 168516) "a") (data (i32.const 168519) "a") (data (i32.const 168522) "a") (data (i32.const 168525) "a") (data (i32.const 168528) "a") (data (i32.const 168531) "a") (data (i32.const 168534) "a") (data (i32.const 168537) "a") (data (i32.const 168540) "a") (data (i32.const 168543) "a") (data (i32.const 168546) "a") (data (i32.const 168549) "a") (data (i32.const 168552) "a") (data (i32.const 168555) "a") (data (i32.const 168558) "a") (data (i32.const 168561) "a") (data (i32.const 168564) "a") (data (i32.const 168567) "a") (data (i32.const 168570) "a") (data (i32.const 168573) "a") (data (i32.const 168576) "a") (data (i32.const 168579) "a") (data (i32.const 168582) "a") (data (i32.const 168585) "a") (data (i32.const 168588) "a") (data (i32.const 168591) "a") (data (i32.const 168594) "a") (data (i32.const 168597) "a") (data (i32.const 168600) "a") (data (i32.const 168603) "a") (data (i32.const 168606) "a") (data (i32.const 168609) "a") (data (i32.const 168612) "a") (data (i32.const 168615) "a") (data (i32.const 168618) "a") (data (i32.const 168621) "a") (data (i32.const 168624) "a") (data (i32.const 168627) "a") (data (i32.const 168630) "a") (data (i32.const 168633) "a") (data (i32.const 168636) "a") (data (i32.const 168639) "a") (data (i32.const 168642) "a") (data (i32.const 168645) "a") (data (i32.const 168648) "a") (data (i32.const 168651) "a") (data (i32.const 168654) "a") (data (i32.const 168657) "a") (data (i32.const 168660) "a") (data (i32.const 168663) "a") (data (i32.const 168666) "a") (data (i32.const 168669) "a") (data (i32.const 168672) "a") (data (i32.const 168675) "a") (data (i32.const 168678) "a") (data (i32.const 168681) "a") (data (i32.const 168684) "a") (data (i32.const 168687) "a") (data (i32.const 168690) "a") (data (i32.const 168693) "a") (data (i32.const 168696) "a") (data (i32.const 168699) "a") (data (i32.const 168702) "a") (data (i32.const 168705) "a") (data (i32.const 168708) "a") (data (i32.const 168711) "a") (data (i32.const 168714) "a") (data (i32.const 168717) "a") (data (i32.const 168720) "a") (data (i32.const 168723) "a") (data (i32.const 168726) "a") (data (i32.const 168729) "a") (data (i32.const 168732) "a") (data (i32.const 168735) "a") (data (i32.const 168738) "a") (data (i32.const 168741) "a") (data (i32.const 168744) "a") (data (i32.const 168747) "a") (data (i32.const 168750) "a") (data (i32.const 168753) "a") (data (i32.const 168756) "a") (data (i32.const 168759) "a") (data (i32.const 168762) "a") (data (i32.const 168765) "a") (data (i32.const 168768) "a") (data (i32.const 168771) "a") (data (i32.const 168774) "a") (data (i32.const 168777) "a") (data (i32.const 168780) "a") (data (i32.const 168783) "a") (data (i32.const 168786) "a") (data (i32.const 168789) "a") (data (i32.const 168792) "a") (data (i32.const 168795) "a") (data (i32.const 168798) "a") (data (i32.const 168801) "a") (data (i32.const 168804) "a") (data (i32.const 168807) "a") (data (i32.const 168810) "a") (data (i32.const 168813) "a") (data (i32.const 168816) "a") (data (i32.const 168819) "a") (data (i32.const 168822) "a") (data (i32.const 168825) "a") (data (i32.const 168828) "a") (data (i32.const 168831) "a") (data (i32.const 168834) "a") (data (i32.const 168837) "a") (data (i32.const 168840) "a") (data (i32.const 168843) "a") (data (i32.const 168846) "a") (data (i32.const 168849) "a") (data (i32.const 168852) "a") (data (i32.const 168855) "a") (data (i32.const 168858) "a") (data (i32.const 168861) "a") (data (i32.const 168864) "a") (data (i32.const 168867) "a") (data (i32.const 168870) "a") (data (i32.const 168873) "a") (data (i32.const 168876) "a") (data (i32.const 168879) "a") (data (i32.const 168882) "a") (data (i32.const 168885) "a") (data (i32.const 168888) "a") (data (i32.const 168891) "a") (data (i32.const 168894) "a") (data (i32.const 168897) "a") (data (i32.const 168900) "a") (data (i32.const 168903) "a") (data (i32.const 168906) "a") (data (i32.const 168909) "a") (data (i32.const 168912) "a") (data (i32.const 168915) "a") (data (i32.const 168918) "a") (data (i32.const 168921) "a") (data (i32.const 168924) "a") (data (i32.const 168927) "a") (data (i32.const 168930) "a") (data (i32.const 168933) "a") (data (i32.const 168936) "a") (data (i32.const 168939) "a") (data (i32.const 168942) "a") (data (i32.const 168945) "a") (data (i32.const 168948) "a") (data (i32.const 168951) "a") (data (i32.const 168954) "a") (data (i32.const 168957) "a") (data (i32.const 168960) "a") (data (i32.const 168963) "a") (data (i32.const 168966) "a") (data (i32.const 168969) "a") (data (i32.const 168972) "a") (data (i32.const 168975) "a") (data (i32.const 168978) "a") (data (i32.const 168981) "a") (data (i32.const 168984) "a") (data (i32.const 168987) "a") (data (i32.const 168990) "a") (data (i32.const 168993) "a") (data (i32.const 168996) "a") (data (i32.const 168999) "a") (data (i32.const 169002) "a") (data (i32.const 169005) "a") (data (i32.const 169008) "a") (data (i32.const 169011) "a") (data (i32.const 169014) "a") (data (i32.const 169017) "a") (data (i32.const 169020) "a") (data (i32.const 169023) "a") (data (i32.const 169026) "a") (data (i32.const 169029) "a") (data (i32.const 169032) "a") (data (i32.const 169035) "a") (data (i32.const 169038) "a") (data (i32.const 169041) "a") (data (i32.const 169044) "a") (data (i32.const 169047) "a") (data (i32.const 169050) "a") (data (i32.const 169053) "a") (data (i32.const 169056) "a") (data (i32.const 169059) "a") (data (i32.const 169062) "a") (data (i32.const 169065) "a") (data (i32.const 169068) "a") (data (i32.const 169071) "a") (data (i32.const 169074) "a") (data (i32.const 169077) "a") (data (i32.const 169080) "a") (data (i32.const 169083) "a") (data (i32.const 169086) "a") (data (i32.const 169089) "a") (data (i32.const 169092) "a") (data (i32.const 169095) "a") (data (i32.const 169098) "a") (data (i32.const 169101) "a") (data (i32.const 169104) "a") (data (i32.const 169107) "a") (data (i32.const 169110) "a") (data (i32.const 169113) "a") (data (i32.const 169116) "a") (data (i32.const 169119) "a") (data (i32.const 169122) "a") (data (i32.const 169125) "a") (data (i32.const 169128) "a") (data (i32.const 169131) "a") (data (i32.const 169134) "a") (data (i32.const 169137) "a") (data (i32.const 169140) "a") (data (i32.const 169143) "a") (data (i32.const 169146) "a") (data (i32.const 169149) "a") (data (i32.const 169152) "a") (data (i32.const 169155) "a") (data (i32.const 169158) "a") (data (i32.const 169161) "a") (data (i32.const 169164) "a") (data (i32.const 169167) "a") (data (i32.const 169170) "a") (data (i32.const 169173) "a") (data (i32.const 169176) "a") (data (i32.const 169179) "a") (data (i32.const 169182) "a") (data (i32.const 169185) "a") (data (i32.const 169188) "a") (data (i32.const 169191) "a") (data (i32.const 169194) "a") (data (i32.const 169197) "a") (data (i32.const 169200) "a") (data (i32.const 169203) "a") (data (i32.const 169206) "a") (data (i32.const 169209) "a") (data (i32.const 169212) "a") (data (i32.const 169215) "a") (data (i32.const 169218) "a") (data (i32.const 169221) "a") (data (i32.const 169224) "a") (data (i32.const 169227) "a") (data (i32.const 169230) "a") (data (i32.const 169233) "a") (data (i32.const 169236) "a") (data (i32.const 169239) "a") (data (i32.const 169242) "a") (data (i32.const 169245) "a") (data (i32.const 169248) "a") (data (i32.const 169251) "a") (data (i32.const 169254) "a") (data (i32.const 169257) "a") (data (i32.const 169260) "a") (data (i32.const 169263) "a") (data (i32.const 169266) "a") (data (i32.const 169269) "a") (data (i32.const 169272) "a") (data (i32.const 169275) "a") (data (i32.const 169278) "a") (data (i32.const 169281) "a") (data (i32.const 169284) "a") (data (i32.const 169287) "a") (data (i32.const 169290) "a") (data (i32.const 169293) "a") (data (i32.const 169296) "a") (data (i32.const 169299) "a") (data (i32.const 169302) "a") (data (i32.const 169305) "a") (data (i32.const 169308) "a") (data (i32.const 169311) "a") (data (i32.const 169314) "a") (data (i32.const 169317) "a") (data (i32.const 169320) "a") (data (i32.const 169323) "a") (data (i32.const 169326) "a") (data (i32.const 169329) "a") (data (i32.const 169332) "a") (data (i32.const 169335) "a") (data (i32.const 169338) "a") (data (i32.const 169341) "a") (data (i32.const 169344) "a") (data (i32.const 169347) "a") (data (i32.const 169350) "a") (data (i32.const 169353) "a") (data (i32.const 169356) "a") (data (i32.const 169359) "a") (data (i32.const 169362) "a") (data (i32.const 169365) "a") (data (i32.const 169368) "a") (data (i32.const 169371) "a") (data (i32.const 169374) "a") (data (i32.const 169377) "a") (data (i32.const 169380) "a") (data (i32.const 169383) "a") (data (i32.const 169386) "a") (data (i32.const 169389) "a") (data (i32.const 169392) "a") (data (i32.const 169395) "a") (data (i32.const 169398) "a") (data (i32.const 169401) "a") (data (i32.const 169404) "a") (data (i32.const 169407) "a") (data (i32.const 169410) "a") (data (i32.const 169413) "a") (data (i32.const 169416) "a") (data (i32.const 169419) "a") (data (i32.const 169422) "a") (data (i32.const 169425) "a") (data (i32.const 169428) "a") (data (i32.const 169431) "a") (data (i32.const 169434) "a") (data (i32.const 169437) "a") (data (i32.const 169440) "a") (data (i32.const 169443) "a") (data (i32.const 169446) "a") (data (i32.const 169449) "a") (data (i32.const 169452) "a") (data (i32.const 169455) "a") (data (i32.const 169458) "a") (data (i32.const 169461) "a") (data (i32.const 169464) "a") (data (i32.const 169467) "a") (data (i32.const 169470) "a") (data (i32.const 169473) "a") (data (i32.const 169476) "a") (data (i32.const 169479) "a") (data (i32.const 169482) "a") (data (i32.const 169485) "a") (data (i32.const 169488) "a") (data (i32.const 169491) "a") (data (i32.const 169494) "a") (data (i32.const 169497) "a") (data (i32.const 169500) "a") (data (i32.const 169503) "a") (data (i32.const 169506) "a") (data (i32.const 169509) "a") (data (i32.const 169512) "a") (data (i32.const 169515) "a") (data (i32.const 169518) "a") (data (i32.const 169521) "a") (data (i32.const 169524) "a") (data (i32.const 169527) "a") (data (i32.const 169530) "a") (data (i32.const 169533) "a") (data (i32.const 169536) "a") (data (i32.const 169539) "a") (data (i32.const 169542) "a") (data (i32.const 169545) "a") (data (i32.const 169548) "a") (data (i32.const 169551) "a") (data (i32.const 169554) "a") (data (i32.const 169557) "a") (data (i32.const 169560) "a") (data (i32.const 169563) "a") (data (i32.const 169566) "a") (data (i32.const 169569) "a") (data (i32.const 169572) "a") (data (i32.const 169575) "a") (data (i32.const 169578) "a") (data (i32.const 169581) "a") (data (i32.const 169584) "a") (data (i32.const 169587) "a") (data (i32.const 169590) "a") (data (i32.const 169593) "a") (data (i32.const 169596) "a") (data (i32.const 169599) "a") (data (i32.const 169602) "a") (data (i32.const 169605) "a") (data (i32.const 169608) "a") (data (i32.const 169611) "a") (data (i32.const 169614) "a") (data (i32.const 169617) "a") (data (i32.const 169620) "a") (data (i32.const 169623) "a") (data (i32.const 169626) "a") (data (i32.const 169629) "a") (data (i32.const 169632) "a") (data (i32.const 169635) "a") (data (i32.const 169638) "a") (data (i32.const 169641) "a") (data (i32.const 169644) "a") (data (i32.const 169647) "a") (data (i32.const 169650) "a") (data (i32.const 169653) "a") (data (i32.const 169656) "a") (data (i32.const 169659) "a") (data (i32.const 169662) "a") (data (i32.const 169665) "a") (data (i32.const 169668) "a") (data (i32.const 169671) "a") (data (i32.const 169674) "a") (data (i32.const 169677) "a") (data (i32.const 169680) "a") (data (i32.const 169683) "a") (data (i32.const 169686) "a") (data (i32.const 169689) "a") (data (i32.const 169692) "a") (data (i32.const 169695) "a") (data (i32.const 169698) "a") (data (i32.const 169701) "a") (data (i32.const 169704) "a") (data (i32.const 169707) "a") (data (i32.const 169710) "a") (data (i32.const 169713) "a") (data (i32.const 169716) "a") (data (i32.const 169719) "a") (data (i32.const 169722) "a") (data (i32.const 169725) "a") (data (i32.const 169728) "a") (data (i32.const 169731) "a") (data (i32.const 169734) "a") (data (i32.const 169737) "a") (data (i32.const 169740) "a") (data (i32.const 169743) "a") (data (i32.const 169746) "a") (data (i32.const 169749) "a") (data (i32.const 169752) "a") (data (i32.const 169755) "a") (data (i32.const 169758) "a") (data (i32.const 169761) "a") (data (i32.const 169764) "a") (data (i32.const 169767) "a") (data (i32.const 169770) "a") (data (i32.const 169773) "a") (data (i32.const 169776) "a") (data (i32.const 169779) "a") (data (i32.const 169782) "a") (data (i32.const 169785) "a") (data (i32.const 169788) "a") (data (i32.const 169791) "a") (data (i32.const 169794) "a") (data (i32.const 169797) "a") (data (i32.const 169800) "a") (data (i32.const 169803) "a") (data (i32.const 169806) "a") (data (i32.const 169809) "a") (data (i32.const 169812) "a") (data (i32.const 169815) "a") (data (i32.const 169818) "a") (data (i32.const 169821) "a") (data (i32.const 169824) "a") (data (i32.const 169827) "a") (data (i32.const 169830) "a") (data (i32.const 169833) "a") (data (i32.const 169836) "a") (data (i32.const 169839) "a") (data (i32.const 169842) "a") (data (i32.const 169845) "a") (data (i32.const 169848) "a") (data (i32.const 169851) "a") (data (i32.const 169854) "a") (data (i32.const 169857) "a") (data (i32.const 169860) "a") (data (i32.const 169863) "a") (data (i32.const 169866) "a") (data (i32.const 169869) "a") (data (i32.const 169872) "a") (data (i32.const 169875) "a") (data (i32.const 169878) "a") (data (i32.const 169881) "a") (data (i32.const 169884) "a") (data (i32.const 169887) "a") (data (i32.const 169890) "a") (data (i32.const 169893) "a") (data (i32.const 169896) "a") (data (i32.const 169899) "a") (data (i32.const 169902) "a") (data (i32.const 169905) "a") (data (i32.const 169908) "a") (data (i32.const 169911) "a") (data (i32.const 169914) "a") (data (i32.const 169917) "a") (data (i32.const 169920) "a") (data (i32.const 169923) "a") (data (i32.const 169926) "a") (data (i32.const 169929) "a") (data (i32.const 169932) "a") (data (i32.const 169935) "a") (data (i32.const 169938) "a") (data (i32.const 169941) "a") (data (i32.const 169944) "a") (data (i32.const 169947) "a") (data (i32.const 169950) "a") (data (i32.const 169953) "a") (data (i32.const 169956) "a") (data (i32.const 169959) "a") (data (i32.const 169962) "a") (data (i32.const 169965) "a") (data (i32.const 169968) "a") (data (i32.const 169971) "a") (data (i32.const 169974) "a") (data (i32.const 169977) "a") (data (i32.const 169980) "a") (data (i32.const 169983) "a") (data (i32.const 169986) "a") (data (i32.const 169989) "a") (data (i32.const 169992) "a") (data (i32.const 169995) "a") (data (i32.const 169998) "a") (data (i32.const 170001) "a") (data (i32.const 170004) "a") (data (i32.const 170007) "a") (data (i32.const 170010) "a") (data (i32.const 170013) "a") (data (i32.const 170016) "a") (data (i32.const 170019) "a") (data (i32.const 170022) "a") (data (i32.const 170025) "a") (data (i32.const 170028) "a") (data (i32.const 170031) "a") (data (i32.const 170034) "a") (data (i32.const 170037) "a") (data (i32.const 170040) "a") (data (i32.const 170043) "a") (data (i32.const 170046) "a") (data (i32.const 170049) "a") (data (i32.const 170052) "a") (data (i32.const 170055) "a") (data (i32.const 170058) "a") (data (i32.const 170061) "a") (data (i32.const 170064) "a") (data (i32.const 170067) "a") (data (i32.const 170070) "a") (data (i32.const 170073) "a") (data (i32.const 170076) "a") (data (i32.const 170079) "a") (data (i32.const 170082) "a") (data (i32.const 170085) "a") (data (i32.const 170088) "a") (data (i32.const 170091) "a") (data (i32.const 170094) "a") (data (i32.const 170097) "a") (data (i32.const 170100) "a") (data (i32.const 170103) "a") (data (i32.const 170106) "a") (data (i32.const 170109) "a") (data (i32.const 170112) "a") (data (i32.const 170115) "a") (data (i32.const 170118) "a") (data (i32.const 170121) "a") (data (i32.const 170124) "a") (data (i32.const 170127) "a") (data (i32.const 170130) "a") (data (i32.const 170133) "a") (data (i32.const 170136) "a") (data (i32.const 170139) "a") (data (i32.const 170142) "a") (data (i32.const 170145) "a") (data (i32.const 170148) "a") (data (i32.const 170151) "a") (data (i32.const 170154) "a") (data (i32.const 170157) "a") (data (i32.const 170160) "a") (data (i32.const 170163) "a") (data (i32.const 170166) "a") (data (i32.const 170169) "a") (data (i32.const 170172) "a") (data (i32.const 170175) "a") (data (i32.const 170178) "a") (data (i32.const 170181) "a") (data (i32.const 170184) "a") (data (i32.const 170187) "a") (data (i32.const 170190) "a") (data (i32.const 170193) "a") (data (i32.const 170196) "a") (data (i32.const 170199) "a") (data (i32.const 170202) "a") (data (i32.const 170205) "a") (data (i32.const 170208) "a") (data (i32.const 170211) "a") (data (i32.const 170214) "a") (data (i32.const 170217) "a") (data (i32.const 170220) "a") (data (i32.const 170223) "a") (data (i32.const 170226) "a") (data (i32.const 170229) "a") (data (i32.const 170232) "a") (data (i32.const 170235) "a") (data (i32.const 170238) "a") (data (i32.const 170241) "a") (data (i32.const 170244) "a") (data (i32.const 170247) "a") (data (i32.const 170250) "a") (data (i32.const 170253) "a") (data (i32.const 170256) "a") (data (i32.const 170259) "a") (data (i32.const 170262) "a") (data (i32.const 170265) "a") (data (i32.const 170268) "a") (data (i32.const 170271) "a") (data (i32.const 170274) "a") (data (i32.const 170277) "a") (data (i32.const 170280) "a") (data (i32.const 170283) "a") (data (i32.const 170286) "a") (data (i32.const 170289) "a") (data (i32.const 170292) "a") (data (i32.const 170295) "a") (data (i32.const 170298) "a") (data (i32.const 170301) "a") (data (i32.const 170304) "a") (data (i32.const 170307) "a") (data (i32.const 170310) "a") (data (i32.const 170313) "a") (data (i32.const 170316) "a") (data (i32.const 170319) "a") (data (i32.const 170322) "a") (data (i32.const 170325) "a") (data (i32.const 170328) "a") (data (i32.const 170331) "a") (data (i32.const 170334) "a") (data (i32.const 170337) "a") (data (i32.const 170340) "a") (data (i32.const 170343) "a") (data (i32.const 170346) "a") (data (i32.const 170349) "a") (data (i32.const 170352) "a") (data (i32.const 170355) "a") (data (i32.const 170358) "a") (data (i32.const 170361) "a") (data (i32.const 170364) "a") (data (i32.const 170367) "a") (data (i32.const 170370) "a") (data (i32.const 170373) "a") (data (i32.const 170376) "a") (data (i32.const 170379) "a") (data (i32.const 170382) "a") (data (i32.const 170385) "a") (data (i32.const 170388) "a") (data (i32.const 170391) "a") (data (i32.const 170394) "a") (data (i32.const 170397) "a") (data (i32.const 170400) "a") (data (i32.const 170403) "a") (data (i32.const 170406) "a") (data (i32.const 170409) "a") (data (i32.const 170412) "a") (data (i32.const 170415) "a") (data (i32.const 170418) "a") (data (i32.const 170421) "a") (data (i32.const 170424) "a") (data (i32.const 170427) "a") (data (i32.const 170430) "a") (data (i32.const 170433) "a") (data (i32.const 170436) "a") (data (i32.const 170439) "a") (data (i32.const 170442) "a") (data (i32.const 170445) "a") (data (i32.const 170448) "a") (data (i32.const 170451) "a") (data (i32.const 170454) "a") (data (i32.const 170457) "a") (data (i32.const 170460) "a") (data (i32.const 170463) "a") (data (i32.const 170466) "a") (data (i32.const 170469) "a") (data (i32.const 170472) "a") (data (i32.const 170475) "a") (data (i32.const 170478) "a") (data (i32.const 170481) "a") (data (i32.const 170484) "a") (data (i32.const 170487) "a") (data (i32.const 170490) "a") (data (i32.const 170493) "a") (data (i32.const 170496) "a") (data (i32.const 170499) "a") (data (i32.const 170502) "a") (data (i32.const 170505) "a") (data (i32.const 170508) "a") (data (i32.const 170511) "a") (data (i32.const 170514) "a") (data (i32.const 170517) "a") (data (i32.const 170520) "a") (data (i32.const 170523) "a") (data (i32.const 170526) "a") (data (i32.const 170529) "a") (data (i32.const 170532) "a") (data (i32.const 170535) "a") (data (i32.const 170538) "a") (data (i32.const 170541) "a") (data (i32.const 170544) "a") (data (i32.const 170547) "a") (data (i32.const 170550) "a") (data (i32.const 170553) "a") (data (i32.const 170556) "a") (data (i32.const 170559) "a") (data (i32.const 170562) "a") (data (i32.const 170565) "a") (data (i32.const 170568) "a") (data (i32.const 170571) "a") (data (i32.const 170574) "a") (data (i32.const 170577) "a") (data (i32.const 170580) "a") (data (i32.const 170583) "a") (data (i32.const 170586) "a") (data (i32.const 170589) "a") (data (i32.const 170592) "a") (data (i32.const 170595) "a") (data (i32.const 170598) "a") (data (i32.const 170601) "a") (data (i32.const 170604) "a") (data (i32.const 170607) "a") (data (i32.const 170610) "a") (data (i32.const 170613) "a") (data (i32.const 170616) "a") (data (i32.const 170619) "a") (data (i32.const 170622) "a") (data (i32.const 170625) "a") (data (i32.const 170628) "a") (data (i32.const 170631) "a") (data (i32.const 170634) "a") (data (i32.const 170637) "a") (data (i32.const 170640) "a") (data (i32.const 170643) "a") (data (i32.const 170646) "a") (data (i32.const 170649) "a") (data (i32.const 170652) "a") (data (i32.const 170655) "a") (data (i32.const 170658) "a") (data (i32.const 170661) "a") (data (i32.const 170664) "a") (data (i32.const 170667) "a") (data (i32.const 170670) "a") (data (i32.const 170673) "a") (data (i32.const 170676) "a") (data (i32.const 170679) "a") (data (i32.const 170682) "a") (data (i32.const 170685) "a") (data (i32.const 170688) "a") (data (i32.const 170691) "a") (data (i32.const 170694) "a") (data (i32.const 170697) "a") (data (i32.const 170700) "a") (data (i32.const 170703) "a") (data (i32.const 170706) "a") (data (i32.const 170709) "a") (data (i32.const 170712) "a") (data (i32.const 170715) "a") (data (i32.const 170718) "a") (data (i32.const 170721) "a") (data (i32.const 170724) "a") (data (i32.const 170727) "a") (data (i32.const 170730) "a") (data (i32.const 170733) "a") (data (i32.const 170736) "a") (data (i32.const 170739) "a") (data (i32.const 170742) "a") (data (i32.const 170745) "a") (data (i32.const 170748) "a") (data (i32.const 170751) "a") (data (i32.const 170754) "a") (data (i32.const 170757) "a") (data (i32.const 170760) "a") (data (i32.const 170763) "a") (data (i32.const 170766) "a") (data (i32.const 170769) "a") (data (i32.const 170772) "a") (data (i32.const 170775) "a") (data (i32.const 170778) "a") (data (i32.const 170781) "a") (data (i32.const 170784) "a") (data (i32.const 170787) "a") (data (i32.const 170790) "a") (data (i32.const 170793) "a") (data (i32.const 170796) "a") (data (i32.const 170799) "a") (data (i32.const 170802) "a") (data (i32.const 170805) "a") (data (i32.const 170808) "a") (data (i32.const 170811) "a") (data (i32.const 170814) "a") (data (i32.const 170817) "a") (data (i32.const 170820) "a") (data (i32.const 170823) "a") (data (i32.const 170826) "a") (data (i32.const 170829) "a") (data (i32.const 170832) "a") (data (i32.const 170835) "a") (data (i32.const 170838) "a") (data (i32.const 170841) "a") (data (i32.const 170844) "a") (data (i32.const 170847) "a") (data (i32.const 170850) "a") (data (i32.const 170853) "a") (data (i32.const 170856) "a") (data (i32.const 170859) "a") (data (i32.const 170862) "a") (data (i32.const 170865) "a") (data (i32.const 170868) "a") (data (i32.const 170871) "a") (data (i32.const 170874) "a") (data (i32.const 170877) "a") (data (i32.const 170880) "a") (data (i32.const 170883) "a") (data (i32.const 170886) "a") (data (i32.const 170889) "a") (data (i32.const 170892) "a") (data (i32.const 170895) "a") (data (i32.const 170898) "a") (data (i32.const 170901) "a") (data (i32.const 170904) "a") (data (i32.const 170907) "a") (data (i32.const 170910) "a") (data (i32.const 170913) "a") (data (i32.const 170916) "a") (data (i32.const 170919) "a") (data (i32.const 170922) "a") (data (i32.const 170925) "a") (data (i32.const 170928) "a") (data (i32.const 170931) "a") (data (i32.const 170934) "a") (data (i32.const 170937) "a") (data (i32.const 170940) "a") (data (i32.const 170943) "a") (data (i32.const 170946) "a") (data (i32.const 170949) "a") (data (i32.const 170952) "a") (data (i32.const 170955) "a") (data (i32.const 170958) "a") (data (i32.const 170961) "a") (data (i32.const 170964) "a") (data (i32.const 170967) "a") (data (i32.const 170970) "a") (data (i32.const 170973) "a") (data (i32.const 170976) "a") (data (i32.const 170979) "a") (data (i32.const 170982) "a") (data (i32.const 170985) "a") (data (i32.const 170988) "a") (data (i32.const 170991) "a") (data (i32.const 170994) "a") (data (i32.const 170997) "a") (data (i32.const 171000) "a") (data (i32.const 171003) "a") (data (i32.const 171006) "a") (data (i32.const 171009) "a") (data (i32.const 171012) "a") (data (i32.const 171015) "a") (data (i32.const 171018) "a") (data (i32.const 171021) "a") (data (i32.const 171024) "a") (data (i32.const 171027) "a") (data (i32.const 171030) "a") (data (i32.const 171033) "a") (data (i32.const 171036) "a") (data (i32.const 171039) "a") (data (i32.const 171042) "a") (data (i32.const 171045) "a") (data (i32.const 171048) "a") (data (i32.const 171051) "a") (data (i32.const 171054) "a") (data (i32.const 171057) "a") (data (i32.const 171060) "a") (data (i32.const 171063) "a") (data (i32.const 171066) "a") (data (i32.const 171069) "a") (data (i32.const 171072) "a") (data (i32.const 171075) "a") (data (i32.const 171078) "a") (data (i32.const 171081) "a") (data (i32.const 171084) "a") (data (i32.const 171087) "a") (data (i32.const 171090) "a") (data (i32.const 171093) "a") (data (i32.const 171096) "a") (data (i32.const 171099) "a") (data (i32.const 171102) "a") (data (i32.const 171105) "a") (data (i32.const 171108) "a") (data (i32.const 171111) "a") (data (i32.const 171114) "a") (data (i32.const 171117) "a") (data (i32.const 171120) "a") (data (i32.const 171123) "a") (data (i32.const 171126) "a") (data (i32.const 171129) "a") (data (i32.const 171132) "a") (data (i32.const 171135) "a") (data (i32.const 171138) "a") (data (i32.const 171141) "a") (data (i32.const 171144) "a") (data (i32.const 171147) "a") (data (i32.const 171150) "a") (data (i32.const 171153) "a") (data (i32.const 171156) "a") (data (i32.const 171159) "a") (data (i32.const 171162) "a") (data (i32.const 171165) "a") (data (i32.const 171168) "a") (data (i32.const 171171) "a") (data (i32.const 171174) "a") (data (i32.const 171177) "a") (data (i32.const 171180) "a") (data (i32.const 171183) "a") (data (i32.const 171186) "a") (data (i32.const 171189) "a") (data (i32.const 171192) "a") (data (i32.const 171195) "a") (data (i32.const 171198) "a") (data (i32.const 171201) "a") (data (i32.const 171204) "a") (data (i32.const 171207) "a") (data (i32.const 171210) "a") (data (i32.const 171213) "a") (data (i32.const 171216) "a") (data (i32.const 171219) "a") (data (i32.const 171222) "a") (data (i32.const 171225) "a") (data (i32.const 171228) "a") (data (i32.const 171231) "a") (data (i32.const 171234) "a") (data (i32.const 171237) "a") (data (i32.const 171240) "a") (data (i32.const 171243) "a") (data (i32.const 171246) "a") (data (i32.const 171249) "a") (data (i32.const 171252) "a") (data (i32.const 171255) "a") (data (i32.const 171258) "a") (data (i32.const 171261) "a") (data (i32.const 171264) "a") (data (i32.const 171267) "a") (data (i32.const 171270) "a") (data (i32.const 171273) "a") (data (i32.const 171276) "a") (data (i32.const 171279) "a") (data (i32.const 171282) "a") (data (i32.const 171285) "a") (data (i32.const 171288) "a") (data (i32.const 171291) "a") (data (i32.const 171294) "a") (data (i32.const 171297) "a") (data (i32.const 171300) "a") (data (i32.const 171303) "a") (data (i32.const 171306) "a") (data (i32.const 171309) "a") (data (i32.const 171312) "a") (data (i32.const 171315) "a") (data (i32.const 171318) "a") (data (i32.const 171321) "a") (data (i32.const 171324) "a") (data (i32.const 171327) "a") (data (i32.const 171330) "a") (data (i32.const 171333) "a") (data (i32.const 171336) "a") (data (i32.const 171339) "a") (data (i32.const 171342) "a") (data (i32.const 171345) "a") (data (i32.const 171348) "a") (data (i32.const 171351) "a") (data (i32.const 171354) "a") (data (i32.const 171357) "a") (data (i32.const 171360) "a") (data (i32.const 171363) "a") (data (i32.const 171366) "a") (data (i32.const 171369) "a") (data (i32.const 171372) "a") (data (i32.const 171375) "a") (data (i32.const 171378) "a") (data (i32.const 171381) "a") (data (i32.const 171384) "a") (data (i32.const 171387) "a") (data (i32.const 171390) "a") (data (i32.const 171393) "a") (data (i32.const 171396) "a") (data (i32.const 171399) "a") (data (i32.const 171402) "a") (data (i32.const 171405) "a") (data (i32.const 171408) "a") (data (i32.const 171411) "a") (data (i32.const 171414) "a") (data (i32.const 171417) "a") (data (i32.const 171420) "a") (data (i32.const 171423) "a") (data (i32.const 171426) "a") (data (i32.const 171429) "a") (data (i32.const 171432) "a") (data (i32.const 171435) "a") (data (i32.const 171438) "a") (data (i32.const 171441) "a") (data (i32.const 171444) "a") (data (i32.const 171447) "a") (data (i32.const 171450) "a") (data (i32.const 171453) "a") (data (i32.const 171456) "a") (data (i32.const 171459) "a") (data (i32.const 171462) "a") (data (i32.const 171465) "a") (data (i32.const 171468) "a") (data (i32.const 171471) "a") (data (i32.const 171474) "a") (data (i32.const 171477) "a") (data (i32.const 171480) "a") (data (i32.const 171483) "a") (data (i32.const 171486) "a") (data (i32.const 171489) "a") (data (i32.const 171492) "a") (data (i32.const 171495) "a") (data (i32.const 171498) "a") (data (i32.const 171501) "a") (data (i32.const 171504) "a") (data (i32.const 171507) "a") (data (i32.const 171510) "a") (data (i32.const 171513) "a") (data (i32.const 171516) "a") (data (i32.const 171519) "a") (data (i32.const 171522) "a") (data (i32.const 171525) "a") (data (i32.const 171528) "a") (data (i32.const 171531) "a") (data (i32.const 171534) "a") (data (i32.const 171537) "a") (data (i32.const 171540) "a") (data (i32.const 171543) "a") (data (i32.const 171546) "a") (data (i32.const 171549) "a") (data (i32.const 171552) "a") (data (i32.const 171555) "a") (data (i32.const 171558) "a") (data (i32.const 171561) "a") (data (i32.const 171564) "a") (data (i32.const 171567) "a") (data (i32.const 171570) "a") (data (i32.const 171573) "a") (data (i32.const 171576) "a") (data (i32.const 171579) "a") (data (i32.const 171582) "a") (data (i32.const 171585) "a") (data (i32.const 171588) "a") (data (i32.const 171591) "a") (data (i32.const 171594) "a") (data (i32.const 171597) "a") (data (i32.const 171600) "a") (data (i32.const 171603) "a") (data (i32.const 171606) "a") (data (i32.const 171609) "a") (data (i32.const 171612) "a") (data (i32.const 171615) "a") (data (i32.const 171618) "a") (data (i32.const 171621) "a") (data (i32.const 171624) "a") (data (i32.const 171627) "a") (data (i32.const 171630) "a") (data (i32.const 171633) "a") (data (i32.const 171636) "a") (data (i32.const 171639) "a") (data (i32.const 171642) "a") (data (i32.const 171645) "a") (data (i32.const 171648) "a") (data (i32.const 171651) "a") (data (i32.const 171654) "a") (data (i32.const 171657) "a") (data (i32.const 171660) "a") (data (i32.const 171663) "a") (data (i32.const 171666) "a") (data (i32.const 171669) "a") (data (i32.const 171672) "a") (data (i32.const 171675) "a") (data (i32.const 171678) "a") (data (i32.const 171681) "a") (data (i32.const 171684) "a") (data (i32.const 171687) "a") (data (i32.const 171690) "a") (data (i32.const 171693) "a") (data (i32.const 171696) "a") (data (i32.const 171699) "a") (data (i32.const 171702) "a") (data (i32.const 171705) "a") (data (i32.const 171708) "a") (data (i32.const 171711) "a") (data (i32.const 171714) "a") (data (i32.const 171717) "a") (data (i32.const 171720) "a") (data (i32.const 171723) "a") (data (i32.const 171726) "a") (data (i32.const 171729) "a") (data (i32.const 171732) "a") (data (i32.const 171735) "a") (data (i32.const 171738) "a") (data (i32.const 171741) "a") (data (i32.const 171744) "a") (data (i32.const 171747) "a") (data (i32.const 171750) "a") (data (i32.const 171753) "a") (data (i32.const 171756) "a") (data (i32.const 171759) "a") (data (i32.const 171762) "a") (data (i32.const 171765) "a") (data (i32.const 171768) "a") (data (i32.const 171771) "a") (data (i32.const 171774) "a") (data (i32.const 171777) "a") (data (i32.const 171780) "a") (data (i32.const 171783) "a") (data (i32.const 171786) "a") (data (i32.const 171789) "a") (data (i32.const 171792) "a") (data (i32.const 171795) "a") (data (i32.const 171798) "a") (data (i32.const 171801) "a") (data (i32.const 171804) "a") (data (i32.const 171807) "a") (data (i32.const 171810) "a") (data (i32.const 171813) "a") (data (i32.const 171816) "a") (data (i32.const 171819) "a") (data (i32.const 171822) "a") (data (i32.const 171825) "a") (data (i32.const 171828) "a") (data (i32.const 171831) "a") (data (i32.const 171834) "a") (data (i32.const 171837) "a") (data (i32.const 171840) "a") (data (i32.const 171843) "a") (data (i32.const 171846) "a") (data (i32.const 171849) "a") (data (i32.const 171852) "a") (data (i32.const 171855) "a") (data (i32.const 171858) "a") (data (i32.const 171861) "a") (data (i32.const 171864) "a") (data (i32.const 171867) "a") (data (i32.const 171870) "a") (data (i32.const 171873) "a") (data (i32.const 171876) "a") (data (i32.const 171879) "a") (data (i32.const 171882) "a") (data (i32.const 171885) "a") (data (i32.const 171888) "a") (data (i32.const 171891) "a") (data (i32.const 171894) "a") (data (i32.const 171897) "a") (data (i32.const 171900) "a") (data (i32.const 171903) "a") (data (i32.const 171906) "a") (data (i32.const 171909) "a") (data (i32.const 171912) "a") (data (i32.const 171915) "a") (data (i32.const 171918) "a") (data (i32.const 171921) "a") (data (i32.const 171924) "a") (data (i32.const 171927) "a") (data (i32.const 171930) "a") (data (i32.const 171933) "a") (data (i32.const 171936) "a") (data (i32.const 171939) "a") (data (i32.const 171942) "a") (data (i32.const 171945) "a") (data (i32.const 171948) "a") (data (i32.const 171951) "a") (data (i32.const 171954) "a") (data (i32.const 171957) "a") (data (i32.const 171960) "a") (data (i32.const 171963) "a") (data (i32.const 171966) "a") (data (i32.const 171969) "a") (data (i32.const 171972) "a") (data (i32.const 171975) "a") (data (i32.const 171978) "a") (data (i32.const 171981) "a") (data (i32.const 171984) "a") (data (i32.const 171987) "a") (data (i32.const 171990) "a") (data (i32.const 171993) "a") (data (i32.const 171996) "a") (data (i32.const 171999) "a") (data (i32.const 172002) "a") (data (i32.const 172005) "a") (data (i32.const 172008) "a") (data (i32.const 172011) "a") (data (i32.const 172014) "a") (data (i32.const 172017) "a") (data (i32.const 172020) "a") (data (i32.const 172023) "a") (data (i32.const 172026) "a") (data (i32.const 172029) "a") (data (i32.const 172032) "a") (data (i32.const 172035) "a") (data (i32.const 172038) "a") (data (i32.const 172041) "a") (data (i32.const 172044) "a") (data (i32.const 172047) "a") (data (i32.const 172050) "a") (data (i32.const 172053) "a") (data (i32.const 172056) "a") (data (i32.const 172059) "a") (data (i32.const 172062) "a") (data (i32.const 172065) "a") (data (i32.const 172068) "a") (data (i32.const 172071) "a") (data (i32.const 172074) "a") (data (i32.const 172077) "a") (data (i32.const 172080) "a") (data (i32.const 172083) "a") (data (i32.const 172086) "a") (data (i32.const 172089) "a") (data (i32.const 172092) "a") (data (i32.const 172095) "a") (data (i32.const 172098) "a") (data (i32.const 172101) "a") (data (i32.const 172104) "a") (data (i32.const 172107) "a") (data (i32.const 172110) "a") (data (i32.const 172113) "a") (data (i32.const 172116) "a") (data (i32.const 172119) "a") (data (i32.const 172122) "a") (data (i32.const 172125) "a") (data (i32.const 172128) "a") (data (i32.const 172131) "a") (data (i32.const 172134) "a") (data (i32.const 172137) "a") (data (i32.const 172140) "a") (data (i32.const 172143) "a") (data (i32.const 172146) "a") (data (i32.const 172149) "a") (data (i32.const 172152) "a") (data (i32.const 172155) "a") (data (i32.const 172158) "a") (data (i32.const 172161) "a") (data (i32.const 172164) "a") (data (i32.const 172167) "a") (data (i32.const 172170) "a") (data (i32.const 172173) "a") (data (i32.const 172176) "a") (data (i32.const 172179) "a") (data (i32.const 172182) "a") (data (i32.const 172185) "a") (data (i32.const 172188) "a") (data (i32.const 172191) "a") (data (i32.const 172194) "a") (data (i32.const 172197) "a") (data (i32.const 172200) "a") (data (i32.const 172203) "a") (data (i32.const 172206) "a") (data (i32.const 172209) "a") (data (i32.const 172212) "a") (data (i32.const 172215) "a") (data (i32.const 172218) "a") (data (i32.const 172221) "a") (data (i32.const 172224) "a") (data (i32.const 172227) "a") (data (i32.const 172230) "a") (data (i32.const 172233) "a") (data (i32.const 172236) "a") (data (i32.const 172239) "a") (data (i32.const 172242) "a") (data (i32.const 172245) "a") (data (i32.const 172248) "a") (data (i32.const 172251) "a") (data (i32.const 172254) "a") (data (i32.const 172257) "a") (data (i32.const 172260) "a") (data (i32.const 172263) "a") (data (i32.const 172266) "a") (data (i32.const 172269) "a") (data (i32.const 172272) "a") (data (i32.const 172275) "a") (data (i32.const 172278) "a") (data (i32.const 172281) "a") (data (i32.const 172284) "a") (data (i32.const 172287) "a") (data (i32.const 172290) "a") (data (i32.const 172293) "a") (data (i32.const 172296) "a") (data (i32.const 172299) "a") (data (i32.const 172302) "a") (data (i32.const 172305) "a") (data (i32.const 172308) "a") (data (i32.const 172311) "a") (data (i32.const 172314) "a") (data (i32.const 172317) "a") (data (i32.const 172320) "a") (data (i32.const 172323) "a") (data (i32.const 172326) "a") (data (i32.const 172329) "a") (data (i32.const 172332) "a") (data (i32.const 172335) "a") (data (i32.const 172338) "a") (data (i32.const 172341) "a") (data (i32.const 172344) "a") (data (i32.const 172347) "a") (data (i32.const 172350) "a") (data (i32.const 172353) "a") (data (i32.const 172356) "a") (data (i32.const 172359) "a") (data (i32.const 172362) "a") (data (i32.const 172365) "a") (data (i32.const 172368) "a") (data (i32.const 172371) "a") (data (i32.const 172374) "a") (data (i32.const 172377) "a") (data (i32.const 172380) "a") (data (i32.const 172383) "a") (data (i32.const 172386) "a") (data (i32.const 172389) "a") (data (i32.const 172392) "a") (data (i32.const 172395) "a") (data (i32.const 172398) "a") (data (i32.const 172401) "a") (data (i32.const 172404) "a") (data (i32.const 172407) "a") (data (i32.const 172410) "a") (data (i32.const 172413) "a") (data (i32.const 172416) "a") (data (i32.const 172419) "a") (data (i32.const 172422) "a") (data (i32.const 172425) "a") (data (i32.const 172428) "a") (data (i32.const 172431) "a") (data (i32.const 172434) "a") (data (i32.const 172437) "a") (data (i32.const 172440) "a") (data (i32.const 172443) "a") (data (i32.const 172446) "a") (data (i32.const 172449) "a") (data (i32.const 172452) "a") (data (i32.const 172455) "a") (data (i32.const 172458) "a") (data (i32.const 172461) "a") (data (i32.const 172464) "a") (data (i32.const 172467) "a") (data (i32.const 172470) "a") (data (i32.const 172473) "a") (data (i32.const 172476) "a") (data (i32.const 172479) "a") (data (i32.const 172482) "a") (data (i32.const 172485) "a") (data (i32.const 172488) "a") (data (i32.const 172491) "a") (data (i32.const 172494) "a") (data (i32.const 172497) "a") (data (i32.const 172500) "a") (data (i32.const 172503) "a") (data (i32.const 172506) "a") (data (i32.const 172509) "a") (data (i32.const 172512) "a") (data (i32.const 172515) "a") (data (i32.const 172518) "a") (data (i32.const 172521) "a") (data (i32.const 172524) "a") (data (i32.const 172527) "a") (data (i32.const 172530) "a") (data (i32.const 172533) "a") (data (i32.const 172536) "a") (data (i32.const 172539) "a") (data (i32.const 172542) "a") (data (i32.const 172545) "a") (data (i32.const 172548) "a") (data (i32.const 172551) "a") (data (i32.const 172554) "a") (data (i32.const 172557) "a") (data (i32.const 172560) "a") (data (i32.const 172563) "a") (data (i32.const 172566) "a") (data (i32.const 172569) "a") (data (i32.const 172572) "a") (data (i32.const 172575) "a") (data (i32.const 172578) "a") (data (i32.const 172581) "a") (data (i32.const 172584) "a") (data (i32.const 172587) "a") (data (i32.const 172590) "a") (data (i32.const 172593) "a") (data (i32.const 172596) "a") (data (i32.const 172599) "a") (data (i32.const 172602) "a") (data (i32.const 172605) "a") (data (i32.const 172608) "a") (data (i32.const 172611) "a") (data (i32.const 172614) "a") (data (i32.const 172617) "a") (data (i32.const 172620) "a") (data (i32.const 172623) "a") (data (i32.const 172626) "a") (data (i32.const 172629) "a") (data (i32.const 172632) "a") (data (i32.const 172635) "a") (data (i32.const 172638) "a") (data (i32.const 172641) "a") (data (i32.const 172644) "a") (data (i32.const 172647) "a") (data (i32.const 172650) "a") (data (i32.const 172653) "a") (data (i32.const 172656) "a") (data (i32.const 172659) "a") (data (i32.const 172662) "a") (data (i32.const 172665) "a") (data (i32.const 172668) "a") (data (i32.const 172671) "a") (data (i32.const 172674) "a") (data (i32.const 172677) "a") (data (i32.const 172680) "a") (data (i32.const 172683) "a") (data (i32.const 172686) "a") (data (i32.const 172689) "a") (data (i32.const 172692) "a") (data (i32.const 172695) "a") (data (i32.const 172698) "a") (data (i32.const 172701) "a") (data (i32.const 172704) "a") (data (i32.const 172707) "a") (data (i32.const 172710) "a") (data (i32.const 172713) "a") (data (i32.const 172716) "a") (data (i32.const 172719) "a") (data (i32.const 172722) "a") (data (i32.const 172725) "a") (data (i32.const 172728) "a") (data (i32.const 172731) "a") (data (i32.const 172734) "a") (data (i32.const 172737) "a") (data (i32.const 172740) "a") (data (i32.const 172743) "a") (data (i32.const 172746) "a") (data (i32.const 172749) "a") (data (i32.const 172752) "a") (data (i32.const 172755) "a") (data (i32.const 172758) "a") (data (i32.const 172761) "a") (data (i32.const 172764) "a") (data (i32.const 172767) "a") (data (i32.const 172770) "a") (data (i32.const 172773) "a") (data (i32.const 172776) "a") (data (i32.const 172779) "a") (data (i32.const 172782) "a") (data (i32.const 172785) "a") (data (i32.const 172788) "a") (data (i32.const 172791) "a") (data (i32.const 172794) "a") (data (i32.const 172797) "a") (data (i32.const 172800) "a") (data (i32.const 172803) "a") (data (i32.const 172806) "a") (data (i32.const 172809) "a") (data (i32.const 172812) "a") (data (i32.const 172815) "a") (data (i32.const 172818) "a") (data (i32.const 172821) "a") (data (i32.const 172824) "a") (data (i32.const 172827) "a") (data (i32.const 172830) "a") (data (i32.const 172833) "a") (data (i32.const 172836) "a") (data (i32.const 172839) "a") (data (i32.const 172842) "a") (data (i32.const 172845) "a") (data (i32.const 172848) "a") (data (i32.const 172851) "a") (data (i32.const 172854) "a") (data (i32.const 172857) "a") (data (i32.const 172860) "a") (data (i32.const 172863) "a") (data (i32.const 172866) "a") (data (i32.const 172869) "a") (data (i32.const 172872) "a") (data (i32.const 172875) "a") (data (i32.const 172878) "a") (data (i32.const 172881) "a") (data (i32.const 172884) "a") (data (i32.const 172887) "a") (data (i32.const 172890) "a") (data (i32.const 172893) "a") (data (i32.const 172896) "a") (data (i32.const 172899) "a") (data (i32.const 172902) "a") (data (i32.const 172905) "a") (data (i32.const 172908) "a") (data (i32.const 172911) "a") (data (i32.const 172914) "a") (data (i32.const 172917) "a") (data (i32.const 172920) "a") (data (i32.const 172923) "a") (data (i32.const 172926) "a") (data (i32.const 172929) "a") (data (i32.const 172932) "a") (data (i32.const 172935) "a") (data (i32.const 172938) "a") (data (i32.const 172941) "a") (data (i32.const 172944) "a") (data (i32.const 172947) "a") (data (i32.const 172950) "a") (data (i32.const 172953) "a") (data (i32.const 172956) "a") (data (i32.const 172959) "a") (data (i32.const 172962) "a") (data (i32.const 172965) "a") (data (i32.const 172968) "a") (data (i32.const 172971) "a") (data (i32.const 172974) "a") (data (i32.const 172977) "a") (data (i32.const 172980) "a") (data (i32.const 172983) "a") (data (i32.const 172986) "a") (data (i32.const 172989) "a") (data (i32.const 172992) "a") (data (i32.const 172995) "a") (data (i32.const 172998) "a") (data (i32.const 173001) "a") (data (i32.const 173004) "a") (data (i32.const 173007) "a") (data (i32.const 173010) "a") (data (i32.const 173013) "a") (data (i32.const 173016) "a") (data (i32.const 173019) "a") (data (i32.const 173022) "a") (data (i32.const 173025) "a") (data (i32.const 173028) "a") (data (i32.const 173031) "a") (data (i32.const 173034) "a") (data (i32.const 173037) "a") (data (i32.const 173040) "a") (data (i32.const 173043) "a") (data (i32.const 173046) "a") (data (i32.const 173049) "a") (data (i32.const 173052) "a") (data (i32.const 173055) "a") (data (i32.const 173058) "a") (data (i32.const 173061) "a") (data (i32.const 173064) "a") (data (i32.const 173067) "a") (data (i32.const 173070) "a") (data (i32.const 173073) "a") (data (i32.const 173076) "a") (data (i32.const 173079) "a") (data (i32.const 173082) "a") (data (i32.const 173085) "a") (data (i32.const 173088) "a") (data (i32.const 173091) "a") (data (i32.const 173094) "a") (data (i32.const 173097) "a") (data (i32.const 173100) "a") (data (i32.const 173103) "a") (data (i32.const 173106) "a") (data (i32.const 173109) "a") (data (i32.const 173112) "a") (data (i32.const 173115) "a") (data (i32.const 173118) "a") (data (i32.const 173121) "a") (data (i32.const 173124) "a") (data (i32.const 173127) "a") (data (i32.const 173130) "a") (data (i32.const 173133) "a") (data (i32.const 173136) "a") (data (i32.const 173139) "a") (data (i32.const 173142) "a") (data (i32.const 173145) "a") (data (i32.const 173148) "a") (data (i32.const 173151) "a") (data (i32.const 173154) "a") (data (i32.const 173157) "a") (data (i32.const 173160) "a") (data (i32.const 173163) "a") (data (i32.const 173166) "a") (data (i32.const 173169) "a") (data (i32.const 173172) "a") (data (i32.const 173175) "a") (data (i32.const 173178) "a") (data (i32.const 173181) "a") (data (i32.const 173184) "a") (data (i32.const 173187) "a") (data (i32.const 173190) "a") (data (i32.const 173193) "a") (data (i32.const 173196) "a") (data (i32.const 173199) "a") (data (i32.const 173202) "a") (data (i32.const 173205) "a") (data (i32.const 173208) "a") (data (i32.const 173211) "a") (data (i32.const 173214) "a") (data (i32.const 173217) "a") (data (i32.const 173220) "a") (data (i32.const 173223) "a") (data (i32.const 173226) "a") (data (i32.const 173229) "a") (data (i32.const 173232) "a") (data (i32.const 173235) "a") (data (i32.const 173238) "a") (data (i32.const 173241) "a") (data (i32.const 173244) "a") (data (i32.const 173247) "a") (data (i32.const 173250) "a") (data (i32.const 173253) "a") (data (i32.const 173256) "a") (data (i32.const 173259) "a") (data (i32.const 173262) "a") (data (i32.const 173265) "a") (data (i32.const 173268) "a") (data (i32.const 173271) "a") (data (i32.const 173274) "a") (data (i32.const 173277) "a") (data (i32.const 173280) "a") (data (i32.const 173283) "a") (data (i32.const 173286) "a") (data (i32.const 173289) "a") (data (i32.const 173292) "a") (data (i32.const 173295) "a") (data (i32.const 173298) "a") (data (i32.const 173301) "a") (data (i32.const 173304) "a") (data (i32.const 173307) "a") (data (i32.const 173310) "a") (data (i32.const 173313) "a") (data (i32.const 173316) "a") (data (i32.const 173319) "a") (data (i32.const 173322) "a") (data (i32.const 173325) "a") (data (i32.const 173328) "a") (data (i32.const 173331) "a") (data (i32.const 173334) "a") (data (i32.const 173337) "a") (data (i32.const 173340) "a") (data (i32.const 173343) "a") (data (i32.const 173346) "a") (data (i32.const 173349) "a") (data (i32.const 173352) "a") (data (i32.const 173355) "a") (data (i32.const 173358) "a") (data (i32.const 173361) "a") (data (i32.const 173364) "a") (data (i32.const 173367) "a") (data (i32.const 173370) "a") (data (i32.const 173373) "a") (data (i32.const 173376) "a") (data (i32.const 173379) "a") (data (i32.const 173382) "a") (data (i32.const 173385) "a") (data (i32.const 173388) "a") (data (i32.const 173391) "a") (data (i32.const 173394) "a") (data (i32.const 173397) "a") (data (i32.const 173400) "a") (data (i32.const 173403) "a") (data (i32.const 173406) "a") (data (i32.const 173409) "a") (data (i32.const 173412) "a") (data (i32.const 173415) "a") (data (i32.const 173418) "a") (data (i32.const 173421) "a") (data (i32.const 173424) "a") (data (i32.const 173427) "a") (data (i32.const 173430) "a") (data (i32.const 173433) "a") (data (i32.const 173436) "a") (data (i32.const 173439) "a") (data (i32.const 173442) "a") (data (i32.const 173445) "a") (data (i32.const 173448) "a") (data (i32.const 173451) "a") (data (i32.const 173454) "a") (data (i32.const 173457) "a") (data (i32.const 173460) "a") (data (i32.const 173463) "a") (data (i32.const 173466) "a") (data (i32.const 173469) "a") (data (i32.const 173472) "a") (data (i32.const 173475) "a") (data (i32.const 173478) "a") (data (i32.const 173481) "a") (data (i32.const 173484) "a") (data (i32.const 173487) "a") (data (i32.const 173490) "a") (data (i32.const 173493) "a") (data (i32.const 173496) "a") (data (i32.const 173499) "a") (data (i32.const 173502) "a") (data (i32.const 173505) "a") (data (i32.const 173508) "a") (data (i32.const 173511) "a") (data (i32.const 173514) "a") (data (i32.const 173517) "a") (data (i32.const 173520) "a") (data (i32.const 173523) "a") (data (i32.const 173526) "a") (data (i32.const 173529) "a") (data (i32.const 173532) "a") (data (i32.const 173535) "a") (data (i32.const 173538) "a") (data (i32.const 173541) "a") (data (i32.const 173544) "a") (data (i32.const 173547) "a") (data (i32.const 173550) "a") (data (i32.const 173553) "a") (data (i32.const 173556) "a") (data (i32.const 173559) "a") (data (i32.const 173562) "a") (data (i32.const 173565) "a") (data (i32.const 173568) "a") (data (i32.const 173571) "a") (data (i32.const 173574) "a") (data (i32.const 173577) "a") (data (i32.const 173580) "a") (data (i32.const 173583) "a") (data (i32.const 173586) "a") (data (i32.const 173589) "a") (data (i32.const 173592) "a") (data (i32.const 173595) "a") (data (i32.const 173598) "a") (data (i32.const 173601) "a") (data (i32.const 173604) "a") (data (i32.const 173607) "a") (data (i32.const 173610) "a") (data (i32.const 173613) "a") (data (i32.const 173616) "a") (data (i32.const 173619) "a") (data (i32.const 173622) "a") (data (i32.const 173625) "a") (data (i32.const 173628) "a") (data (i32.const 173631) "a") (data (i32.const 173634) "a") (data (i32.const 173637) "a") (data (i32.const 173640) "a") (data (i32.const 173643) "a") (data (i32.const 173646) "a") (data (i32.const 173649) "a") (data (i32.const 173652) "a") (data (i32.const 173655) "a") (data (i32.const 173658) "a") (data (i32.const 173661) "a") (data (i32.const 173664) "a") (data (i32.const 173667) "a") (data (i32.const 173670) "a") (data (i32.const 173673) "a") (data (i32.const 173676) "a") (data (i32.const 173679) "a") (data (i32.const 173682) "a") (data (i32.const 173685) "a") (data (i32.const 173688) "a") (data (i32.const 173691) "a") (data (i32.const 173694) "a") (data (i32.const 173697) "a") (data (i32.const 173700) "a") (data (i32.const 173703) "a") (data (i32.const 173706) "a") (data (i32.const 173709) "a") (data (i32.const 173712) "a") (data (i32.const 173715) "a") (data (i32.const 173718) "a") (data (i32.const 173721) "a") (data (i32.const 173724) "a") (data (i32.const 173727) "a") (data (i32.const 173730) "a") (data (i32.const 173733) "a") (data (i32.const 173736) "a") (data (i32.const 173739) "a") (data (i32.const 173742) "a") (data (i32.const 173745) "a") (data (i32.const 173748) "a") (data (i32.const 173751) "a") (data (i32.const 173754) "a") (data (i32.const 173757) "a") (data (i32.const 173760) "a") (data (i32.const 173763) "a") (data (i32.const 173766) "a") (data (i32.const 173769) "a") (data (i32.const 173772) "a") (data (i32.const 173775) "a") (data (i32.const 173778) "a") (data (i32.const 173781) "a") (data (i32.const 173784) "a") (data (i32.const 173787) "a") (data (i32.const 173790) "a") (data (i32.const 173793) "a") (data (i32.const 173796) "a") (data (i32.const 173799) "a") (data (i32.const 173802) "a") (data (i32.const 173805) "a") (data (i32.const 173808) "a") (data (i32.const 173811) "a") (data (i32.const 173814) "a") (data (i32.const 173817) "a") (data (i32.const 173820) "a") (data (i32.const 173823) "a") (data (i32.const 173826) "a") (data (i32.const 173829) "a") (data (i32.const 173832) "a") (data (i32.const 173835) "a") (data (i32.const 173838) "a") (data (i32.const 173841) "a") (data (i32.const 173844) "a") (data (i32.const 173847) "a") (data (i32.const 173850) "a") (data (i32.const 173853) "a") (data (i32.const 173856) "a") (data (i32.const 173859) "a") (data (i32.const 173862) "a") (data (i32.const 173865) "a") (data (i32.const 173868) "a") (data (i32.const 173871) "a") (data (i32.const 173874) "a") (data (i32.const 173877) "a") (data (i32.const 173880) "a") (data (i32.const 173883) "a") (data (i32.const 173886) "a") (data (i32.const 173889) "a") (data (i32.const 173892) "a") (data (i32.const 173895) "a") (data (i32.const 173898) "a") (data (i32.const 173901) "a") (data (i32.const 173904) "a") (data (i32.const 173907) "a") (data (i32.const 173910) "a") (data (i32.const 173913) "a") (data (i32.const 173916) "a") (data (i32.const 173919) "a") (data (i32.const 173922) "a") (data (i32.const 173925) "a") (data (i32.const 173928) "a") (data (i32.const 173931) "a") (data (i32.const 173934) "a") (data (i32.const 173937) "a") (data (i32.const 173940) "a") (data (i32.const 173943) "a") (data (i32.const 173946) "a") (data (i32.const 173949) "a") (data (i32.const 173952) "a") (data (i32.const 173955) "a") (data (i32.const 173958) "a") (data (i32.const 173961) "a") (data (i32.const 173964) "a") (data (i32.const 173967) "a") (data (i32.const 173970) "a") (data (i32.const 173973) "a") (data (i32.const 173976) "a") (data (i32.const 173979) "a") (data (i32.const 173982) "a") (data (i32.const 173985) "a") (data (i32.const 173988) "a") (data (i32.const 173991) "a") (data (i32.const 173994) "a") (data (i32.const 173997) "a") (data (i32.const 174000) "a") (data (i32.const 174003) "a") (data (i32.const 174006) "a") (data (i32.const 174009) "a") (data (i32.const 174012) "a") (data (i32.const 174015) "a") (data (i32.const 174018) "a") (data (i32.const 174021) "a") (data (i32.const 174024) "a") (data (i32.const 174027) "a") (data (i32.const 174030) "a") (data (i32.const 174033) "a") (data (i32.const 174036) "a") (data (i32.const 174039) "a") (data (i32.const 174042) "a") (data (i32.const 174045) "a") (data (i32.const 174048) "a") (data (i32.const 174051) "a") (data (i32.const 174054) "a") (data (i32.const 174057) "a") (data (i32.const 174060) "a") (data (i32.const 174063) "a") (data (i32.const 174066) "a") (data (i32.const 174069) "a") (data (i32.const 174072) "a") (data (i32.const 174075) "a") (data (i32.const 174078) "a") (data (i32.const 174081) "a") (data (i32.const 174084) "a") (data (i32.const 174087) "a") (data (i32.const 174090) "a") (data (i32.const 174093) "a") (data (i32.const 174096) "a") (data (i32.const 174099) "a") (data (i32.const 174102) "a") (data (i32.const 174105) "a") (data (i32.const 174108) "a") (data (i32.const 174111) "a") (data (i32.const 174114) "a") (data (i32.const 174117) "a") (data (i32.const 174120) "a") (data (i32.const 174123) "a") (data (i32.const 174126) "a") (data (i32.const 174129) "a") (data (i32.const 174132) "a") (data (i32.const 174135) "a") (data (i32.const 174138) "a") (data (i32.const 174141) "a") (data (i32.const 174144) "a") (data (i32.const 174147) "a") (data (i32.const 174150) "a") (data (i32.const 174153) "a") (data (i32.const 174156) "a") (data (i32.const 174159) "a") (data (i32.const 174162) "a") (data (i32.const 174165) "a") (data (i32.const 174168) "a") (data (i32.const 174171) "a") (data (i32.const 174174) "a") (data (i32.const 174177) "a") (data (i32.const 174180) "a") (data (i32.const 174183) "a") (data (i32.const 174186) "a") (data (i32.const 174189) "a") (data (i32.const 174192) "a") (data (i32.const 174195) "a") (data (i32.const 174198) "a") (data (i32.const 174201) "a") (data (i32.const 174204) "a") (data (i32.const 174207) "a") (data (i32.const 174210) "a") (data (i32.const 174213) "a") (data (i32.const 174216) "a") (data (i32.const 174219) "a") (data (i32.const 174222) "a") (data (i32.const 174225) "a") (data (i32.const 174228) "a") (data (i32.const 174231) "a") (data (i32.const 174234) "a") (data (i32.const 174237) "a") (data (i32.const 174240) "a") (data (i32.const 174243) "a") (data (i32.const 174246) "a") (data (i32.const 174249) "a") (data (i32.const 174252) "a") (data (i32.const 174255) "a") (data (i32.const 174258) "a") (data (i32.const 174261) "a") (data (i32.const 174264) "a") (data (i32.const 174267) "a") (data (i32.const 174270) "a") (data (i32.const 174273) "a") (data (i32.const 174276) "a") (data (i32.const 174279) "a") (data (i32.const 174282) "a") (data (i32.const 174285) "a") (data (i32.const 174288) "a") (data (i32.const 174291) "a") (data (i32.const 174294) "a") (data (i32.const 174297) "a") (data (i32.const 174300) "a") (data (i32.const 174303) "a") (data (i32.const 174306) "a") (data (i32.const 174309) "a") (data (i32.const 174312) "a") (data (i32.const 174315) "a") (data (i32.const 174318) "a") (data (i32.const 174321) "a") (data (i32.const 174324) "a") (data (i32.const 174327) "a") (data (i32.const 174330) "a") (data (i32.const 174333) "a") (data (i32.const 174336) "a") (data (i32.const 174339) "a") (data (i32.const 174342) "a") (data (i32.const 174345) "a") (data (i32.const 174348) "a") (data (i32.const 174351) "a") (data (i32.const 174354) "a") (data (i32.const 174357) "a") (data (i32.const 174360) "a") (data (i32.const 174363) "a") (data (i32.const 174366) "a") (data (i32.const 174369) "a") (data (i32.const 174372) "a") (data (i32.const 174375) "a") (data (i32.const 174378) "a") (data (i32.const 174381) "a") (data (i32.const 174384) "a") (data (i32.const 174387) "a") (data (i32.const 174390) "a") (data (i32.const 174393) "a") (data (i32.const 174396) "a") (data (i32.const 174399) "a") (data (i32.const 174402) "a") (data (i32.const 174405) "a") (data (i32.const 174408) "a") (data (i32.const 174411) "a") (data (i32.const 174414) "a") (data (i32.const 174417) "a") (data (i32.const 174420) "a") (data (i32.const 174423) "a") (data (i32.const 174426) "a") (data (i32.const 174429) "a") (data (i32.const 174432) "a") (data (i32.const 174435) "a") (data (i32.const 174438) "a") (data (i32.const 174441) "a") (data (i32.const 174444) "a") (data (i32.const 174447) "a") (data (i32.const 174450) "a") (data (i32.const 174453) "a") (data (i32.const 174456) "a") (data (i32.const 174459) "a") (data (i32.const 174462) "a") (data (i32.const 174465) "a") (data (i32.const 174468) "a") (data (i32.const 174471) "a") (data (i32.const 174474) "a") (data (i32.const 174477) "a") (data (i32.const 174480) "a") (data (i32.const 174483) "a") (data (i32.const 174486) "a") (data (i32.const 174489) "a") (data (i32.const 174492) "a") (data (i32.const 174495) "a") (data (i32.const 174498) "a") (data (i32.const 174501) "a") (data (i32.const 174504) "a") (data (i32.const 174507) "a") (data (i32.const 174510) "a") (data (i32.const 174513) "a") (data (i32.const 174516) "a") (data (i32.const 174519) "a") (data (i32.const 174522) "a") (data (i32.const 174525) "a") (data (i32.const 174528) "a") (data (i32.const 174531) "a") (data (i32.const 174534) "a") (data (i32.const 174537) "a") (data (i32.const 174540) "a") (data (i32.const 174543) "a") (data (i32.const 174546) "a") (data (i32.const 174549) "a") (data (i32.const 174552) "a") (data (i32.const 174555) "a") (data (i32.const 174558) "a") (data (i32.const 174561) "a") (data (i32.const 174564) "a") (data (i32.const 174567) "a") (data (i32.const 174570) "a") (data (i32.const 174573) "a") (data (i32.const 174576) "a") (data (i32.const 174579) "a") (data (i32.const 174582) "a") (data (i32.const 174585) "a") (data (i32.const 174588) "a") (data (i32.const 174591) "a") (data (i32.const 174594) "a") (data (i32.const 174597) "a") (data (i32.const 174600) "a") (data (i32.const 174603) "a") (data (i32.const 174606) "a") (data (i32.const 174609) "a") (data (i32.const 174612) "a") (data (i32.const 174615) "a") (data (i32.const 174618) "a") (data (i32.const 174621) "a") (data (i32.const 174624) "a") (data (i32.const 174627) "a") (data (i32.const 174630) "a") (data (i32.const 174633) "a") (data (i32.const 174636) "a") (data (i32.const 174639) "a") (data (i32.const 174642) "a") (data (i32.const 174645) "a") (data (i32.const 174648) "a") (data (i32.const 174651) "a") (data (i32.const 174654) "a") (data (i32.const 174657) "a") (data (i32.const 174660) "a") (data (i32.const 174663) "a") (data (i32.const 174666) "a") (data (i32.const 174669) "a") (data (i32.const 174672) "a") (data (i32.const 174675) "a") (data (i32.const 174678) "a") (data (i32.const 174681) "a") (data (i32.const 174684) "a") (data (i32.const 174687) "a") (data (i32.const 174690) "a") (data (i32.const 174693) "a") (data (i32.const 174696) "a") (data (i32.const 174699) "a") (data (i32.const 174702) "a") (data (i32.const 174705) "a") (data (i32.const 174708) "a") (data (i32.const 174711) "a") (data (i32.const 174714) "a") (data (i32.const 174717) "a") (data (i32.const 174720) "a") (data (i32.const 174723) "a") (data (i32.const 174726) "a") (data (i32.const 174729) "a") (data (i32.const 174732) "a") (data (i32.const 174735) "a") (data (i32.const 174738) "a") (data (i32.const 174741) "a") (data (i32.const 174744) "a") (data (i32.const 174747) "a") (data (i32.const 174750) "a") (data (i32.const 174753) "a") (data (i32.const 174756) "a") (data (i32.const 174759) "a") (data (i32.const 174762) "a") (data (i32.const 174765) "a") (data (i32.const 174768) "a") (data (i32.const 174771) "a") (data (i32.const 174774) "a") (data (i32.const 174777) "a") (data (i32.const 174780) "a") (data (i32.const 174783) "a") (data (i32.const 174786) "a") (data (i32.const 174789) "a") (data (i32.const 174792) "a") (data (i32.const 174795) "a") (data (i32.const 174798) "a") (data (i32.const 174801) "a") (data (i32.const 174804) "a") (data (i32.const 174807) "a") (data (i32.const 174810) "a") (data (i32.const 174813) "a") (data (i32.const 174816) "a") (data (i32.const 174819) "a") (data (i32.const 174822) "a") (data (i32.const 174825) "a") (data (i32.const 174828) "a") (data (i32.const 174831) "a") (data (i32.const 174834) "a") (data (i32.const 174837) "a") (data (i32.const 174840) "a") (data (i32.const 174843) "a") (data (i32.const 174846) "a") (data (i32.const 174849) "a") (data (i32.const 174852) "a") (data (i32.const 174855) "a") (data (i32.const 174858) "a") (data (i32.const 174861) "a") (data (i32.const 174864) "a") (data (i32.const 174867) "a") (data (i32.const 174870) "a") (data (i32.const 174873) "a") (data (i32.const 174876) "a") (data (i32.const 174879) "a") (data (i32.const 174882) "a") (data (i32.const 174885) "a") (data (i32.const 174888) "a") (data (i32.const 174891) "a") (data (i32.const 174894) "a") (data (i32.const 174897) "a") (data (i32.const 174900) "a") (data (i32.const 174903) "a") (data (i32.const 174906) "a") (data (i32.const 174909) "a") (data (i32.const 174912) "a") (data (i32.const 174915) "a") (data (i32.const 174918) "a") (data (i32.const 174921) "a") (data (i32.const 174924) "a") (data (i32.const 174927) "a") (data (i32.const 174930) "a") (data (i32.const 174933) "a") (data (i32.const 174936) "a") (data (i32.const 174939) "a") (data (i32.const 174942) "a") (data (i32.const 174945) "a") (data (i32.const 174948) "a") (data (i32.const 174951) "a") (data (i32.const 174954) "a") (data (i32.const 174957) "a") (data (i32.const 174960) "a") (data (i32.const 174963) "a") (data (i32.const 174966) "a") (data (i32.const 174969) "a") (data (i32.const 174972) "a") (data (i32.const 174975) "a") (data (i32.const 174978) "a") (data (i32.const 174981) "a") (data (i32.const 174984) "a") (data (i32.const 174987) "a") (data (i32.const 174990) "a") (data (i32.const 174993) "a") (data (i32.const 174996) "a") (data (i32.const 174999) "a") (data (i32.const 175002) "a") (data (i32.const 175005) "a") (data (i32.const 175008) "a") (data (i32.const 175011) "a") (data (i32.const 175014) "a") (data (i32.const 175017) "a") (data (i32.const 175020) "a") (data (i32.const 175023) "a") (data (i32.const 175026) "a") (data (i32.const 175029) "a") (data (i32.const 175032) "a") (data (i32.const 175035) "a") (data (i32.const 175038) "a") (data (i32.const 175041) "a") (data (i32.const 175044) "a") (data (i32.const 175047) "a") (data (i32.const 175050) "a") (data (i32.const 175053) "a") (data (i32.const 175056) "a") (data (i32.const 175059) "a") (data (i32.const 175062) "a") (data (i32.const 175065) "a") (data (i32.const 175068) "a") (data (i32.const 175071) "a") (data (i32.const 175074) "a") (data (i32.const 175077) "a") (data (i32.const 175080) "a") (data (i32.const 175083) "a") (data (i32.const 175086) "a") (data (i32.const 175089) "a") (data (i32.const 175092) "a") (data (i32.const 175095) "a") (data (i32.const 175098) "a") (data (i32.const 175101) "a") (data (i32.const 175104) "a") (data (i32.const 175107) "a") (data (i32.const 175110) "a") (data (i32.const 175113) "a") (data (i32.const 175116) "a") (data (i32.const 175119) "a") (data (i32.const 175122) "a") (data (i32.const 175125) "a") (data (i32.const 175128) "a") (data (i32.const 175131) "a") (data (i32.const 175134) "a") (data (i32.const 175137) "a") (data (i32.const 175140) "a") (data (i32.const 175143) "a") (data (i32.const 175146) "a") (data (i32.const 175149) "a") (data (i32.const 175152) "a") (data (i32.const 175155) "a") (data (i32.const 175158) "a") (data (i32.const 175161) "a") (data (i32.const 175164) "a") (data (i32.const 175167) "a") (data (i32.const 175170) "a") (data (i32.const 175173) "a") (data (i32.const 175176) "a") (data (i32.const 175179) "a") (data (i32.const 175182) "a") (data (i32.const 175185) "a") (data (i32.const 175188) "a") (data (i32.const 175191) "a") (data (i32.const 175194) "a") (data (i32.const 175197) "a") (data (i32.const 175200) "a") (data (i32.const 175203) "a") (data (i32.const 175206) "a") (data (i32.const 175209) "a") (data (i32.const 175212) "a") (data (i32.const 175215) "a") (data (i32.const 175218) "a") (data (i32.const 175221) "a") (data (i32.const 175224) "a") (data (i32.const 175227) "a") (data (i32.const 175230) "a") (data (i32.const 175233) "a") (data (i32.const 175236) "a") (data (i32.const 175239) "a") (data (i32.const 175242) "a") (data (i32.const 175245) "a") (data (i32.const 175248) "a") (data (i32.const 175251) "a") (data (i32.const 175254) "a") (data (i32.const 175257) "a") (data (i32.const 175260) "a") (data (i32.const 175263) "a") (data (i32.const 175266) "a") (data (i32.const 175269) "a") (data (i32.const 175272) "a") (data (i32.const 175275) "a") (data (i32.const 175278) "a") (data (i32.const 175281) "a") (data (i32.const 175284) "a") (data (i32.const 175287) "a") (data (i32.const 175290) "a") (data (i32.const 175293) "a") (data (i32.const 175296) "a") (data (i32.const 175299) "a") (data (i32.const 175302) "a") (data (i32.const 175305) "a") (data (i32.const 175308) "a") (data (i32.const 175311) "a") (data (i32.const 175314) "a") (data (i32.const 175317) "a") (data (i32.const 175320) "a") (data (i32.const 175323) "a") (data (i32.const 175326) "a") (data (i32.const 175329) "a") (data (i32.const 175332) "a") (data (i32.const 175335) "a") (data (i32.const 175338) "a") (data (i32.const 175341) "a") (data (i32.const 175344) "a") (data (i32.const 175347) "a") (data (i32.const 175350) "a") (data (i32.const 175353) "a") (data (i32.const 175356) "a") (data (i32.const 175359) "a") (data (i32.const 175362) "a") (data (i32.const 175365) "a") (data (i32.const 175368) "a") (data (i32.const 175371) "a") (data (i32.const 175374) "a") (data (i32.const 175377) "a") (data (i32.const 175380) "a") (data (i32.const 175383) "a") (data (i32.const 175386) "a") (data (i32.const 175389) "a") (data (i32.const 175392) "a") (data (i32.const 175395) "a") (data (i32.const 175398) "a") (data (i32.const 175401) "a") (data (i32.const 175404) "a") (data (i32.const 175407) "a") (data (i32.const 175410) "a") (data (i32.const 175413) "a") (data (i32.const 175416) "a") (data (i32.const 175419) "a") (data (i32.const 175422) "a") (data (i32.const 175425) "a") (data (i32.const 175428) "a") (data (i32.const 175431) "a") (data (i32.const 175434) "a") (data (i32.const 175437) "a") (data (i32.const 175440) "a") (data (i32.const 175443) "a") (data (i32.const 175446) "a") (data (i32.const 175449) "a") (data (i32.const 175452) "a") (data (i32.const 175455) "a") (data (i32.const 175458) "a") (data (i32.const 175461) "a") (data (i32.const 175464) "a") (data (i32.const 175467) "a") (data (i32.const 175470) "a") (data (i32.const 175473) "a") (data (i32.const 175476) "a") (data (i32.const 175479) "a") (data (i32.const 175482) "a") (data (i32.const 175485) "a") (data (i32.const 175488) "a") (data (i32.const 175491) "a") (data (i32.const 175494) "a") (data (i32.const 175497) "a") (data (i32.const 175500) "a") (data (i32.const 175503) "a") (data (i32.const 175506) "a") (data (i32.const 175509) "a") (data (i32.const 175512) "a") (data (i32.const 175515) "a") (data (i32.const 175518) "a") (data (i32.const 175521) "a") (data (i32.const 175524) "a") (data (i32.const 175527) "a") (data (i32.const 175530) "a") (data (i32.const 175533) "a") (data (i32.const 175536) "a") (data (i32.const 175539) "a") (data (i32.const 175542) "a") (data (i32.const 175545) "a") (data (i32.const 175548) "a") (data (i32.const 175551) "a") (data (i32.const 175554) "a") (data (i32.const 175557) "a") (data (i32.const 175560) "a") (data (i32.const 175563) "a") (data (i32.const 175566) "a") (data (i32.const 175569) "a") (data (i32.const 175572) "a") (data (i32.const 175575) "a") (data (i32.const 175578) "a") (data (i32.const 175581) "a") (data (i32.const 175584) "a") (data (i32.const 175587) "a") (data (i32.const 175590) "a") (data (i32.const 175593) "a") (data (i32.const 175596) "a") (data (i32.const 175599) "a") (data (i32.const 175602) "a") (data (i32.const 175605) "a") (data (i32.const 175608) "a") (data (i32.const 175611) "a") (data (i32.const 175614) "a") (data (i32.const 175617) "a") (data (i32.const 175620) "a") (data (i32.const 175623) "a") (data (i32.const 175626) "a") (data (i32.const 175629) "a") (data (i32.const 175632) "a") (data (i32.const 175635) "a") (data (i32.const 175638) "a") (data (i32.const 175641) "a") (data (i32.const 175644) "a") (data (i32.const 175647) "a") (data (i32.const 175650) "a") (data (i32.const 175653) "a") (data (i32.const 175656) "a") (data (i32.const 175659) "a") (data (i32.const 175662) "a") (data (i32.const 175665) "a") (data (i32.const 175668) "a") (data (i32.const 175671) "a") (data (i32.const 175674) "a") (data (i32.const 175677) "a") (data (i32.const 175680) "a") (data (i32.const 175683) "a") (data (i32.const 175686) "a") (data (i32.const 175689) "a") (data (i32.const 175692) "a") (data (i32.const 175695) "a") (data (i32.const 175698) "a") (data (i32.const 175701) "a") (data (i32.const 175704) "a") (data (i32.const 175707) "a") (data (i32.const 175710) "a") (data (i32.const 175713) "a") (data (i32.const 175716) "a") (data (i32.const 175719) "a") (data (i32.const 175722) "a") (data (i32.const 175725) "a") (data (i32.const 175728) "a") (data (i32.const 175731) "a") (data (i32.const 175734) "a") (data (i32.const 175737) "a") (data (i32.const 175740) "a") (data (i32.const 175743) "a") (data (i32.const 175746) "a") (data (i32.const 175749) "a") (data (i32.const 175752) "a") (data (i32.const 175755) "a") (data (i32.const 175758) "a") (data (i32.const 175761) "a") (data (i32.const 175764) "a") (data (i32.const 175767) "a") (data (i32.const 175770) "a") (data (i32.const 175773) "a") (data (i32.const 175776) "a") (data (i32.const 175779) "a") (data (i32.const 175782) "a") (data (i32.const 175785) "a") (data (i32.const 175788) "a") (data (i32.const 175791) "a") (data (i32.const 175794) "a") (data (i32.const 175797) "a") (data (i32.const 175800) "a") (data (i32.const 175803) "a") (data (i32.const 175806) "a") (data (i32.const 175809) "a") (data (i32.const 175812) "a") (data (i32.const 175815) "a") (data (i32.const 175818) "a") (data (i32.const 175821) "a") (data (i32.const 175824) "a") (data (i32.const 175827) "a") (data (i32.const 175830) "a") (data (i32.const 175833) "a") (data (i32.const 175836) "a") (data (i32.const 175839) "a") (data (i32.const 175842) "a") (data (i32.const 175845) "a") (data (i32.const 175848) "a") (data (i32.const 175851) "a") (data (i32.const 175854) "a") (data (i32.const 175857) "a") (data (i32.const 175860) "a") (data (i32.const 175863) "a") (data (i32.const 175866) "a") (data (i32.const 175869) "a") (data (i32.const 175872) "a") (data (i32.const 175875) "a") (data (i32.const 175878) "a") (data (i32.const 175881) "a") (data (i32.const 175884) "a") (data (i32.const 175887) "a") (data (i32.const 175890) "a") (data (i32.const 175893) "a") (data (i32.const 175896) "a") (data (i32.const 175899) "a") (data (i32.const 175902) "a") (data (i32.const 175905) "a") (data (i32.const 175908) "a") (data (i32.const 175911) "a") (data (i32.const 175914) "a") (data (i32.const 175917) "a") (data (i32.const 175920) "a") (data (i32.const 175923) "a") (data (i32.const 175926) "a") (data (i32.const 175929) "a") (data (i32.const 175932) "a") (data (i32.const 175935) "a") (data (i32.const 175938) "a") (data (i32.const 175941) "a") (data (i32.const 175944) "a") (data (i32.const 175947) "a") (data (i32.const 175950) "a") (data (i32.const 175953) "a") (data (i32.const 175956) "a") (data (i32.const 175959) "a") (data (i32.const 175962) "a") (data (i32.const 175965) "a") (data (i32.const 175968) "a") (data (i32.const 175971) "a") (data (i32.const 175974) "a") (data (i32.const 175977) "a") (data (i32.const 175980) "a") (data (i32.const 175983) "a") (data (i32.const 175986) "a") (data (i32.const 175989) "a") (data (i32.const 175992) "a") (data (i32.const 175995) "a") (data (i32.const 175998) "a") (data (i32.const 176001) "a") (data (i32.const 176004) "a") (data (i32.const 176007) "a") (data (i32.const 176010) "a") (data (i32.const 176013) "a") (data (i32.const 176016) "a") (data (i32.const 176019) "a") (data (i32.const 176022) "a") (data (i32.const 176025) "a") (data (i32.const 176028) "a") (data (i32.const 176031) "a") (data (i32.const 176034) "a") (data (i32.const 176037) "a") (data (i32.const 176040) "a") (data (i32.const 176043) "a") (data (i32.const 176046) "a") (data (i32.const 176049) "a") (data (i32.const 176052) "a") (data (i32.const 176055) "a") (data (i32.const 176058) "a") (data (i32.const 176061) "a") (data (i32.const 176064) "a") (data (i32.const 176067) "a") (data (i32.const 176070) "a") (data (i32.const 176073) "a") (data (i32.const 176076) "a") (data (i32.const 176079) "a") (data (i32.const 176082) "a") (data (i32.const 176085) "a") (data (i32.const 176088) "a") (data (i32.const 176091) "a") (data (i32.const 176094) "a") (data (i32.const 176097) "a") (data (i32.const 176100) "a") (data (i32.const 176103) "a") (data (i32.const 176106) "a") (data (i32.const 176109) "a") (data (i32.const 176112) "a") (data (i32.const 176115) "a") (data (i32.const 176118) "a") (data (i32.const 176121) "a") (data (i32.const 176124) "a") (data (i32.const 176127) "a") (data (i32.const 176130) "a") (data (i32.const 176133) "a") (data (i32.const 176136) "a") (data (i32.const 176139) "a") (data (i32.const 176142) "a") (data (i32.const 176145) "a") (data (i32.const 176148) "a") (data (i32.const 176151) "a") (data (i32.const 176154) "a") (data (i32.const 176157) "a") (data (i32.const 176160) "a") (data (i32.const 176163) "a") (data (i32.const 176166) "a") (data (i32.const 176169) "a") (data (i32.const 176172) "a") (data (i32.const 176175) "a") (data (i32.const 176178) "a") (data (i32.const 176181) "a") (data (i32.const 176184) "a") (data (i32.const 176187) "a") (data (i32.const 176190) "a") (data (i32.const 176193) "a") (data (i32.const 176196) "a") (data (i32.const 176199) "a") (data (i32.const 176202) "a") (data (i32.const 176205) "a") (data (i32.const 176208) "a") (data (i32.const 176211) "a") (data (i32.const 176214) "a") (data (i32.const 176217) "a") (data (i32.const 176220) "a") (data (i32.const 176223) "a") (data (i32.const 176226) "a") (data (i32.const 176229) "a") (data (i32.const 176232) "a") (data (i32.const 176235) "a") (data (i32.const 176238) "a") (data (i32.const 176241) "a") (data (i32.const 176244) "a") (data (i32.const 176247) "a") (data (i32.const 176250) "a") (data (i32.const 176253) "a") (data (i32.const 176256) "a") (data (i32.const 176259) "a") (data (i32.const 176262) "a") (data (i32.const 176265) "a") (data (i32.const 176268) "a") (data (i32.const 176271) "a") (data (i32.const 176274) "a") (data (i32.const 176277) "a") (data (i32.const 176280) "a") (data (i32.const 176283) "a") (data (i32.const 176286) "a") (data (i32.const 176289) "a") (data (i32.const 176292) "a") (data (i32.const 176295) "a") (data (i32.const 176298) "a") (data (i32.const 176301) "a") (data (i32.const 176304) "a") (data (i32.const 176307) "a") (data (i32.const 176310) "a") (data (i32.const 176313) "a") (data (i32.const 176316) "a") (data (i32.const 176319) "a") (data (i32.const 176322) "a") (data (i32.const 176325) "a") (data (i32.const 176328) "a") (data (i32.const 176331) "a") (data (i32.const 176334) "a") (data (i32.const 176337) "a") (data (i32.const 176340) "a") (data (i32.const 176343) "a") (data (i32.const 176346) "a") (data (i32.const 176349) "a") (data (i32.const 176352) "a") (data (i32.const 176355) "a") (data (i32.const 176358) "a") (data (i32.const 176361) "a") (data (i32.const 176364) "a") (data (i32.const 176367) "a") (data (i32.const 176370) "a") (data (i32.const 176373) "a") (data (i32.const 176376) "a") (data (i32.const 176379) "a") (data (i32.const 176382) "a") (data (i32.const 176385) "a") (data (i32.const 176388) "a") (data (i32.const 176391) "a") (data (i32.const 176394) "a") (data (i32.const 176397) "a") (data (i32.const 176400) "a") (data (i32.const 176403) "a") (data (i32.const 176406) "a") (data (i32.const 176409) "a") (data (i32.const 176412) "a") (data (i32.const 176415) "a") (data (i32.const 176418) "a") (data (i32.const 176421) "a") (data (i32.const 176424) "a") (data (i32.const 176427) "a") (data (i32.const 176430) "a") (data (i32.const 176433) "a") (data (i32.const 176436) "a") (data (i32.const 176439) "a") (data (i32.const 176442) "a") (data (i32.const 176445) "a") (data (i32.const 176448) "a") (data (i32.const 176451) "a") (data (i32.const 176454) "a") (data (i32.const 176457) "a") (data (i32.const 176460) "a") (data (i32.const 176463) "a") (data (i32.const 176466) "a") (data (i32.const 176469) "a") (data (i32.const 176472) "a") (data (i32.const 176475) "a") (data (i32.const 176478) "a") (data (i32.const 176481) "a") (data (i32.const 176484) "a") (data (i32.const 176487) "a") (data (i32.const 176490) "a") (data (i32.const 176493) "a") (data (i32.const 176496) "a") (data (i32.const 176499) "a") (data (i32.const 176502) "a") (data (i32.const 176505) "a") (data (i32.const 176508) "a") (data (i32.const 176511) "a") (data (i32.const 176514) "a") (data (i32.const 176517) "a") (data (i32.const 176520) "a") (data (i32.const 176523) "a") (data (i32.const 176526) "a") (data (i32.const 176529) "a") (data (i32.const 176532) "a") (data (i32.const 176535) "a") (data (i32.const 176538) "a") (data (i32.const 176541) "a") (data (i32.const 176544) "a") (data (i32.const 176547) "a") (data (i32.const 176550) "a") (data (i32.const 176553) "a") (data (i32.const 176556) "a") (data (i32.const 176559) "a") (data (i32.const 176562) "a") (data (i32.const 176565) "a") (data (i32.const 176568) "a") (data (i32.const 176571) "a") (data (i32.const 176574) "a") (data (i32.const 176577) "a") (data (i32.const 176580) "a") (data (i32.const 176583) "a") (data (i32.const 176586) "a") (data (i32.const 176589) "a") (data (i32.const 176592) "a") (data (i32.const 176595) "a") (data (i32.const 176598) "a") (data (i32.const 176601) "a") (data (i32.const 176604) "a") (data (i32.const 176607) "a") (data (i32.const 176610) "a") (data (i32.const 176613) "a") (data (i32.const 176616) "a") (data (i32.const 176619) "a") (data (i32.const 176622) "a") (data (i32.const 176625) "a") (data (i32.const 176628) "a") (data (i32.const 176631) "a") (data (i32.const 176634) "a") (data (i32.const 176637) "a") (data (i32.const 176640) "a") (data (i32.const 176643) "a") (data (i32.const 176646) "a") (data (i32.const 176649) "a") (data (i32.const 176652) "a") (data (i32.const 176655) "a") (data (i32.const 176658) "a") (data (i32.const 176661) "a") (data (i32.const 176664) "a") (data (i32.const 176667) "a") (data (i32.const 176670) "a") (data (i32.const 176673) "a") (data (i32.const 176676) "a") (data (i32.const 176679) "a") (data (i32.const 176682) "a") (data (i32.const 176685) "a") (data (i32.const 176688) "a") (data (i32.const 176691) "a") (data (i32.const 176694) "a") (data (i32.const 176697) "a") (data (i32.const 176700) "a") (data (i32.const 176703) "a") (data (i32.const 176706) "a") (data (i32.const 176709) "a") (data (i32.const 176712) "a") (data (i32.const 176715) "a") (data (i32.const 176718) "a") (data (i32.const 176721) "a") (data (i32.const 176724) "a") (data (i32.const 176727) "a") (data (i32.const 176730) "a") (data (i32.const 176733) "a") (data (i32.const 176736) "a") (data (i32.const 176739) "a") (data (i32.const 176742) "a") (data (i32.const 176745) "a") (data (i32.const 176748) "a") (data (i32.const 176751) "a") (data (i32.const 176754) "a") (data (i32.const 176757) "a") (data (i32.const 176760) "a") (data (i32.const 176763) "a") (data (i32.const 176766) "a") (data (i32.const 176769) "a") (data (i32.const 176772) "a") (data (i32.const 176775) "a") (data (i32.const 176778) "a") (data (i32.const 176781) "a") (data (i32.const 176784) "a") (data (i32.const 176787) "a") (data (i32.const 176790) "a") (data (i32.const 176793) "a") (data (i32.const 176796) "a") (data (i32.const 176799) "a") (data (i32.const 176802) "a") (data (i32.const 176805) "a") (data (i32.const 176808) "a") (data (i32.const 176811) "a") (data (i32.const 176814) "a") (data (i32.const 176817) "a") (data (i32.const 176820) "a") (data (i32.const 176823) "a") (data (i32.const 176826) "a") (data (i32.const 176829) "a") (data (i32.const 176832) "a") (data (i32.const 176835) "a") (data (i32.const 176838) "a") (data (i32.const 176841) "a") (data (i32.const 176844) "a") (data (i32.const 176847) "a") (data (i32.const 176850) "a") (data (i32.const 176853) "a") (data (i32.const 176856) "a") (data (i32.const 176859) "a") (data (i32.const 176862) "a") (data (i32.const 176865) "a") (data (i32.const 176868) "a") (data (i32.const 176871) "a") (data (i32.const 176874) "a") (data (i32.const 176877) "a") (data (i32.const 176880) "a") (data (i32.const 176883) "a") (data (i32.const 176886) "a") (data (i32.const 176889) "a") (data (i32.const 176892) "a") (data (i32.const 176895) "a") (data (i32.const 176898) "a") (data (i32.const 176901) "a") (data (i32.const 176904) "a") (data (i32.const 176907) "a") (data (i32.const 176910) "a") (data (i32.const 176913) "a") (data (i32.const 176916) "a") (data (i32.const 176919) "a") (data (i32.const 176922) "a") (data (i32.const 176925) "a") (data (i32.const 176928) "a") (data (i32.const 176931) "a") (data (i32.const 176934) "a") (data (i32.const 176937) "a") (data (i32.const 176940) "a") (data (i32.const 176943) "a") (data (i32.const 176946) "a") (data (i32.const 176949) "a") (data (i32.const 176952) "a") (data (i32.const 176955) "a") (data (i32.const 176958) "a") (data (i32.const 176961) "a") (data (i32.const 176964) "a") (data (i32.const 176967) "a") (data (i32.const 176970) "a") (data (i32.const 176973) "a") (data (i32.const 176976) "a") (data (i32.const 176979) "a") (data (i32.const 176982) "a") (data (i32.const 176985) "a") (data (i32.const 176988) "a") (data (i32.const 176991) "a") (data (i32.const 176994) "a") (data (i32.const 176997) "a") (data (i32.const 177000) "a") (data (i32.const 177003) "a") (data (i32.const 177006) "a") (data (i32.const 177009) "a") (data (i32.const 177012) "a") (data (i32.const 177015) "a") (data (i32.const 177018) "a") (data (i32.const 177021) "a") (data (i32.const 177024) "a") (data (i32.const 177027) "a") (data (i32.const 177030) "a") (data (i32.const 177033) "a") (data (i32.const 177036) "a") (data (i32.const 177039) "a") (data (i32.const 177042) "a") (data (i32.const 177045) "a") (data (i32.const 177048) "a") (data (i32.const 177051) "a") (data (i32.const 177054) "a") (data (i32.const 177057) "a") (data (i32.const 177060) "a") (data (i32.const 177063) "a") (data (i32.const 177066) "a") (data (i32.const 177069) "a") (data (i32.const 177072) "a") (data (i32.const 177075) "a") (data (i32.const 177078) "a") (data (i32.const 177081) "a") (data (i32.const 177084) "a") (data (i32.const 177087) "a") (data (i32.const 177090) "a") (data (i32.const 177093) "a") (data (i32.const 177096) "a") (data (i32.const 177099) "a") (data (i32.const 177102) "a") (data (i32.const 177105) "a") (data (i32.const 177108) "a") (data (i32.const 177111) "a") (data (i32.const 177114) "a") (data (i32.const 177117) "a") (data (i32.const 177120) "a") (data (i32.const 177123) "a") (data (i32.const 177126) "a") (data (i32.const 177129) "a") (data (i32.const 177132) "a") (data (i32.const 177135) "a") (data (i32.const 177138) "a") (data (i32.const 177141) "a") (data (i32.const 177144) "a") (data (i32.const 177147) "a") (data (i32.const 177150) "a") (data (i32.const 177153) "a") (data (i32.const 177156) "a") (data (i32.const 177159) "a") (data (i32.const 177162) "a") (data (i32.const 177165) "a") (data (i32.const 177168) "a") (data (i32.const 177171) "a") (data (i32.const 177174) "a") (data (i32.const 177177) "a") (data (i32.const 177180) "a") (data (i32.const 177183) "a") (data (i32.const 177186) "a") (data (i32.const 177189) "a") (data (i32.const 177192) "a") (data (i32.const 177195) "a") (data (i32.const 177198) "a") (data (i32.const 177201) "a") (data (i32.const 177204) "a") (data (i32.const 177207) "a") (data (i32.const 177210) "a") (data (i32.const 177213) "a") (data (i32.const 177216) "a") (data (i32.const 177219) "a") (data (i32.const 177222) "a") (data (i32.const 177225) "a") (data (i32.const 177228) "a") (data (i32.const 177231) "a") (data (i32.const 177234) "a") (data (i32.const 177237) "a") (data (i32.const 177240) "a") (data (i32.const 177243) "a") (data (i32.const 177246) "a") (data (i32.const 177249) "a") (data (i32.const 177252) "a") (data (i32.const 177255) "a") (data (i32.const 177258) "a") (data (i32.const 177261) "a") (data (i32.const 177264) "a") (data (i32.const 177267) "a") (data (i32.const 177270) "a") (data (i32.const 177273) "a") (data (i32.const 177276) "a") (data (i32.const 177279) "a") (data (i32.const 177282) "a") (data (i32.const 177285) "a") (data (i32.const 177288) "a") (data (i32.const 177291) "a") (data (i32.const 177294) "a") (data (i32.const 177297) "a") (data (i32.const 177300) "a") (data (i32.const 177303) "a") (data (i32.const 177306) "a") (data (i32.const 177309) "a") (data (i32.const 177312) "a") (data (i32.const 177315) "a") (data (i32.const 177318) "a") (data (i32.const 177321) "a") (data (i32.const 177324) "a") (data (i32.const 177327) "a") (data (i32.const 177330) "a") (data (i32.const 177333) "a") (data (i32.const 177336) "a") (data (i32.const 177339) "a") (data (i32.const 177342) "a") (data (i32.const 177345) "a") (data (i32.const 177348) "a") (data (i32.const 177351) "a") (data (i32.const 177354) "a") (data (i32.const 177357) "a") (data (i32.const 177360) "a") (data (i32.const 177363) "a") (data (i32.const 177366) "a") (data (i32.const 177369) "a") (data (i32.const 177372) "a") (data (i32.const 177375) "a") (data (i32.const 177378) "a") (data (i32.const 177381) "a") (data (i32.const 177384) "a") (data (i32.const 177387) "a") (data (i32.const 177390) "a") (data (i32.const 177393) "a") (data (i32.const 177396) "a") (data (i32.const 177399) "a") (data (i32.const 177402) "a") (data (i32.const 177405) "a") (data (i32.const 177408) "a") (data (i32.const 177411) "a") (data (i32.const 177414) "a") (data (i32.const 177417) "a") (data (i32.const 177420) "a") (data (i32.const 177423) "a") (data (i32.const 177426) "a") (data (i32.const 177429) "a") (data (i32.const 177432) "a") (data (i32.const 177435) "a") (data (i32.const 177438) "a") (data (i32.const 177441) "a") (data (i32.const 177444) "a") (data (i32.const 177447) "a") (data (i32.const 177450) "a") (data (i32.const 177453) "a") (data (i32.const 177456) "a") (data (i32.const 177459) "a") (data (i32.const 177462) "a") (data (i32.const 177465) "a") (data (i32.const 177468) "a") (data (i32.const 177471) "a") (data (i32.const 177474) "a") (data (i32.const 177477) "a") (data (i32.const 177480) "a") (data (i32.const 177483) "a") (data (i32.const 177486) "a") (data (i32.const 177489) "a") (data (i32.const 177492) "a") (data (i32.const 177495) "a") (data (i32.const 177498) "a") (data (i32.const 177501) "a") (data (i32.const 177504) "a") (data (i32.const 177507) "a") (data (i32.const 177510) "a") (data (i32.const 177513) "a") (data (i32.const 177516) "a") (data (i32.const 177519) "a") (data (i32.const 177522) "a") (data (i32.const 177525) "a") (data (i32.const 177528) "a") (data (i32.const 177531) "a") (data (i32.const 177534) "a") (data (i32.const 177537) "a") (data (i32.const 177540) "a") (data (i32.const 177543) "a") (data (i32.const 177546) "a") (data (i32.const 177549) "a") (data (i32.const 177552) "a") (data (i32.const 177555) "a") (data (i32.const 177558) "a") (data (i32.const 177561) "a") (data (i32.const 177564) "a") (data (i32.const 177567) "a") (data (i32.const 177570) "a") (data (i32.const 177573) "a") (data (i32.const 177576) "a") (data (i32.const 177579) "a") (data (i32.const 177582) "a") (data (i32.const 177585) "a") (data (i32.const 177588) "a") (data (i32.const 177591) "a") (data (i32.const 177594) "a") (data (i32.const 177597) "a") (data (i32.const 177600) "a") (data (i32.const 177603) "a") (data (i32.const 177606) "a") (data (i32.const 177609) "a") (data (i32.const 177612) "a") (data (i32.const 177615) "a") (data (i32.const 177618) "a") (data (i32.const 177621) "a") (data (i32.const 177624) "a") (data (i32.const 177627) "a") (data (i32.const 177630) "a") (data (i32.const 177633) "a") (data (i32.const 177636) "a") (data (i32.const 177639) "a") (data (i32.const 177642) "a") (data (i32.const 177645) "a") (data (i32.const 177648) "a") (data (i32.const 177651) "a") (data (i32.const 177654) "a") (data (i32.const 177657) "a") (data (i32.const 177660) "a") (data (i32.const 177663) "a") (data (i32.const 177666) "a") (data (i32.const 177669) "a") (data (i32.const 177672) "a") (data (i32.const 177675) "a") (data (i32.const 177678) "a") (data (i32.const 177681) "a") (data (i32.const 177684) "a") (data (i32.const 177687) "a") (data (i32.const 177690) "a") (data (i32.const 177693) "a") (data (i32.const 177696) "a") (data (i32.const 177699) "a") (data (i32.const 177702) "a") (data (i32.const 177705) "a") (data (i32.const 177708) "a") (data (i32.const 177711) "a") (data (i32.const 177714) "a") (data (i32.const 177717) "a") (data (i32.const 177720) "a") (data (i32.const 177723) "a") (data (i32.const 177726) "a") (data (i32.const 177729) "a") (data (i32.const 177732) "a") (data (i32.const 177735) "a") (data (i32.const 177738) "a") (data (i32.const 177741) "a") (data (i32.const 177744) "a") (data (i32.const 177747) "a") (data (i32.const 177750) "a") (data (i32.const 177753) "a") (data (i32.const 177756) "a") (data (i32.const 177759) "a") (data (i32.const 177762) "a") (data (i32.const 177765) "a") (data (i32.const 177768) "a") (data (i32.const 177771) "a") (data (i32.const 177774) "a") (data (i32.const 177777) "a") (data (i32.const 177780) "a") (data (i32.const 177783) "a") (data (i32.const 177786) "a") (data (i32.const 177789) "a") (data (i32.const 177792) "a") (data (i32.const 177795) "a") (data (i32.const 177798) "a") (data (i32.const 177801) "a") (data (i32.const 177804) "a") (data (i32.const 177807) "a") (data (i32.const 177810) "a") (data (i32.const 177813) "a") (data (i32.const 177816) "a") (data (i32.const 177819) "a") (data (i32.const 177822) "a") (data (i32.const 177825) "a") (data (i32.const 177828) "a") (data (i32.const 177831) "a") (data (i32.const 177834) "a") (data (i32.const 177837) "a") (data (i32.const 177840) "a") (data (i32.const 177843) "a") (data (i32.const 177846) "a") (data (i32.const 177849) "a") (data (i32.const 177852) "a") (data (i32.const 177855) "a") (data (i32.const 177858) "a") (data (i32.const 177861) "a") (data (i32.const 177864) "a") (data (i32.const 177867) "a") (data (i32.const 177870) "a") (data (i32.const 177873) "a") (data (i32.const 177876) "a") (data (i32.const 177879) "a") (data (i32.const 177882) "a") (data (i32.const 177885) "a") (data (i32.const 177888) "a") (data (i32.const 177891) "a") (data (i32.const 177894) "a") (data (i32.const 177897) "a") (data (i32.const 177900) "a") (data (i32.const 177903) "a") (data (i32.const 177906) "a") (data (i32.const 177909) "a") (data (i32.const 177912) "a") (data (i32.const 177915) "a") (data (i32.const 177918) "a") (data (i32.const 177921) "a") (data (i32.const 177924) "a") (data (i32.const 177927) "a") (data (i32.const 177930) "a") (data (i32.const 177933) "a") (data (i32.const 177936) "a") (data (i32.const 177939) "a") (data (i32.const 177942) "a") (data (i32.const 177945) "a") (data (i32.const 177948) "a") (data (i32.const 177951) "a") (data (i32.const 177954) "a") (data (i32.const 177957) "a") (data (i32.const 177960) "a") (data (i32.const 177963) "a") (data (i32.const 177966) "a") (data (i32.const 177969) "a") (data (i32.const 177972) "a") (data (i32.const 177975) "a") (data (i32.const 177978) "a") (data (i32.const 177981) "a") (data (i32.const 177984) "a") (data (i32.const 177987) "a") (data (i32.const 177990) "a") (data (i32.const 177993) "a") (data (i32.const 177996) "a") (data (i32.const 177999) "a") (data (i32.const 178002) "a") (data (i32.const 178005) "a") (data (i32.const 178008) "a") (data (i32.const 178011) "a") (data (i32.const 178014) "a") (data (i32.const 178017) "a") (data (i32.const 178020) "a") (data (i32.const 178023) "a") (data (i32.const 178026) "a") (data (i32.const 178029) "a") (data (i32.const 178032) "a") (data (i32.const 178035) "a") (data (i32.const 178038) "a") (data (i32.const 178041) "a") (data (i32.const 178044) "a") (data (i32.const 178047) "a") (data (i32.const 178050) "a") (data (i32.const 178053) "a") (data (i32.const 178056) "a") (data (i32.const 178059) "a") (data (i32.const 178062) "a") (data (i32.const 178065) "a") (data (i32.const 178068) "a") (data (i32.const 178071) "a") (data (i32.const 178074) "a") (data (i32.const 178077) "a") (data (i32.const 178080) "a") (data (i32.const 178083) "a") (data (i32.const 178086) "a") (data (i32.const 178089) "a") (data (i32.const 178092) "a") (data (i32.const 178095) "a") (data (i32.const 178098) "a") (data (i32.const 178101) "a") (data (i32.const 178104) "a") (data (i32.const 178107) "a") (data (i32.const 178110) "a") (data (i32.const 178113) "a") (data (i32.const 178116) "a") (data (i32.const 178119) "a") (data (i32.const 178122) "a") (data (i32.const 178125) "a") (data (i32.const 178128) "a") (data (i32.const 178131) "a") (data (i32.const 178134) "a") (data (i32.const 178137) "a") (data (i32.const 178140) "a") (data (i32.const 178143) "a") (data (i32.const 178146) "a") (data (i32.const 178149) "a") (data (i32.const 178152) "a") (data (i32.const 178155) "a") (data (i32.const 178158) "a") (data (i32.const 178161) "a") (data (i32.const 178164) "a") (data (i32.const 178167) "a") (data (i32.const 178170) "a") (data (i32.const 178173) "a") (data (i32.const 178176) "a") (data (i32.const 178179) "a") (data (i32.const 178182) "a") (data (i32.const 178185) "a") (data (i32.const 178188) "a") (data (i32.const 178191) "a") (data (i32.const 178194) "a") (data (i32.const 178197) "a") (data (i32.const 178200) "a") (data (i32.const 178203) "a") (data (i32.const 178206) "a") (data (i32.const 178209) "a") (data (i32.const 178212) "a") (data (i32.const 178215) "a") (data (i32.const 178218) "a") (data (i32.const 178221) "a") (data (i32.const 178224) "a") (data (i32.const 178227) "a") (data (i32.const 178230) "a") (data (i32.const 178233) "a") (data (i32.const 178236) "a") (data (i32.const 178239) "a") (data (i32.const 178242) "a") (data (i32.const 178245) "a") (data (i32.const 178248) "a") (data (i32.const 178251) "a") (data (i32.const 178254) "a") (data (i32.const 178257) "a") (data (i32.const 178260) "a") (data (i32.const 178263) "a") (data (i32.const 178266) "a") (data (i32.const 178269) "a") (data (i32.const 178272) "a") (data (i32.const 178275) "a") (data (i32.const 178278) "a") (data (i32.const 178281) "a") (data (i32.const 178284) "a") (data (i32.const 178287) "a") (data (i32.const 178290) "a") (data (i32.const 178293) "a") (data (i32.const 178296) "a") (data (i32.const 178299) "a") (data (i32.const 178302) "a") (data (i32.const 178305) "a") (data (i32.const 178308) "a") (data (i32.const 178311) "a") (data (i32.const 178314) "a") (data (i32.const 178317) "a") (data (i32.const 178320) "a") (data (i32.const 178323) "a") (data (i32.const 178326) "a") (data (i32.const 178329) "a") (data (i32.const 178332) "a") (data (i32.const 178335) "a") (data (i32.const 178338) "a") (data (i32.const 178341) "a") (data (i32.const 178344) "a") (data (i32.const 178347) "a") (data (i32.const 178350) "a") (data (i32.const 178353) "a") (data (i32.const 178356) "a") (data (i32.const 178359) "a") (data (i32.const 178362) "a") (data (i32.const 178365) "a") (data (i32.const 178368) "a") (data (i32.const 178371) "a") (data (i32.const 178374) "a") (data (i32.const 178377) "a") (data (i32.const 178380) "a") (data (i32.const 178383) "a") (data (i32.const 178386) "a") (data (i32.const 178389) "a") (data (i32.const 178392) "a") (data (i32.const 178395) "a") (data (i32.const 178398) "a") (data (i32.const 178401) "a") (data (i32.const 178404) "a") (data (i32.const 178407) "a") (data (i32.const 178410) "a") (data (i32.const 178413) "a") (data (i32.const 178416) "a") (data (i32.const 178419) "a") (data (i32.const 178422) "a") (data (i32.const 178425) "a") (data (i32.const 178428) "a") (data (i32.const 178431) "a") (data (i32.const 178434) "a") (data (i32.const 178437) "a") (data (i32.const 178440) "a") (data (i32.const 178443) "a") (data (i32.const 178446) "a") (data (i32.const 178449) "a") (data (i32.const 178452) "a") (data (i32.const 178455) "a") (data (i32.const 178458) "a") (data (i32.const 178461) "a") (data (i32.const 178464) "a") (data (i32.const 178467) "a") (data (i32.const 178470) "a") (data (i32.const 178473) "a") (data (i32.const 178476) "a") (data (i32.const 178479) "a") (data (i32.const 178482) "a") (data (i32.const 178485) "a") (data (i32.const 178488) "a") (data (i32.const 178491) "a") (data (i32.const 178494) "a") (data (i32.const 178497) "a") (data (i32.const 178500) "a") (data (i32.const 178503) "a") (data (i32.const 178506) "a") (data (i32.const 178509) "a") (data (i32.const 178512) "a") (data (i32.const 178515) "a") (data (i32.const 178518) "a") (data (i32.const 178521) "a") (data (i32.const 178524) "a") (data (i32.const 178527) "a") (data (i32.const 178530) "a") (data (i32.const 178533) "a") (data (i32.const 178536) "a") (data (i32.const 178539) "a") (data (i32.const 178542) "a") (data (i32.const 178545) "a") (data (i32.const 178548) "a") (data (i32.const 178551) "a") (data (i32.const 178554) "a") (data (i32.const 178557) "a") (data (i32.const 178560) "a") (data (i32.const 178563) "a") (data (i32.const 178566) "a") (data (i32.const 178569) "a") (data (i32.const 178572) "a") (data (i32.const 178575) "a") (data (i32.const 178578) "a") (data (i32.const 178581) "a") (data (i32.const 178584) "a") (data (i32.const 178587) "a") (data (i32.const 178590) "a") (data (i32.const 178593) "a") (data (i32.const 178596) "a") (data (i32.const 178599) "a") (data (i32.const 178602) "a") (data (i32.const 178605) "a") (data (i32.const 178608) "a") (data (i32.const 178611) "a") (data (i32.const 178614) "a") (data (i32.const 178617) "a") (data (i32.const 178620) "a") (data (i32.const 178623) "a") (data (i32.const 178626) "a") (data (i32.const 178629) "a") (data (i32.const 178632) "a") (data (i32.const 178635) "a") (data (i32.const 178638) "a") (data (i32.const 178641) "a") (data (i32.const 178644) "a") (data (i32.const 178647) "a") (data (i32.const 178650) "a") (data (i32.const 178653) "a") (data (i32.const 178656) "a") (data (i32.const 178659) "a") (data (i32.const 178662) "a") (data (i32.const 178665) "a") (data (i32.const 178668) "a") (data (i32.const 178671) "a") (data (i32.const 178674) "a") (data (i32.const 178677) "a") (data (i32.const 178680) "a") (data (i32.const 178683) "a") (data (i32.const 178686) "a") (data (i32.const 178689) "a") (data (i32.const 178692) "a") (data (i32.const 178695) "a") (data (i32.const 178698) "a") (data (i32.const 178701) "a") (data (i32.const 178704) "a") (data (i32.const 178707) "a") (data (i32.const 178710) "a") (data (i32.const 178713) "a") (data (i32.const 178716) "a") (data (i32.const 178719) "a") (data (i32.const 178722) "a") (data (i32.const 178725) "a") (data (i32.const 178728) "a") (data (i32.const 178731) "a") (data (i32.const 178734) "a") (data (i32.const 178737) "a") (data (i32.const 178740) "a") (data (i32.const 178743) "a") (data (i32.const 178746) "a") (data (i32.const 178749) "a") (data (i32.const 178752) "a") (data (i32.const 178755) "a") (data (i32.const 178758) "a") (data (i32.const 178761) "a") (data (i32.const 178764) "a") (data (i32.const 178767) "a") (data (i32.const 178770) "a") (data (i32.const 178773) "a") (data (i32.const 178776) "a") (data (i32.const 178779) "a") (data (i32.const 178782) "a") (data (i32.const 178785) "a") (data (i32.const 178788) "a") (data (i32.const 178791) "a") (data (i32.const 178794) "a") (data (i32.const 178797) "a") (data (i32.const 178800) "a") (data (i32.const 178803) "a") (data (i32.const 178806) "a") (data (i32.const 178809) "a") (data (i32.const 178812) "a") (data (i32.const 178815) "a") (data (i32.const 178818) "a") (data (i32.const 178821) "a") (data (i32.const 178824) "a") (data (i32.const 178827) "a") (data (i32.const 178830) "a") (data (i32.const 178833) "a") (data (i32.const 178836) "a") (data (i32.const 178839) "a") (data (i32.const 178842) "a") (data (i32.const 178845) "a") (data (i32.const 178848) "a") (data (i32.const 178851) "a") (data (i32.const 178854) "a") (data (i32.const 178857) "a") (data (i32.const 178860) "a") (data (i32.const 178863) "a") (data (i32.const 178866) "a") (data (i32.const 178869) "a") (data (i32.const 178872) "a") (data (i32.const 178875) "a") (data (i32.const 178878) "a") (data (i32.const 178881) "a") (data (i32.const 178884) "a") (data (i32.const 178887) "a") (data (i32.const 178890) "a") (data (i32.const 178893) "a") (data (i32.const 178896) "a") (data (i32.const 178899) "a") (data (i32.const 178902) "a") (data (i32.const 178905) "a") (data (i32.const 178908) "a") (data (i32.const 178911) "a") (data (i32.const 178914) "a") (data (i32.const 178917) "a") (data (i32.const 178920) "a") (data (i32.const 178923) "a") (data (i32.const 178926) "a") (data (i32.const 178929) "a") (data (i32.const 178932) "a") (data (i32.const 178935) "a") (data (i32.const 178938) "a") (data (i32.const 178941) "a") (data (i32.const 178944) "a") (data (i32.const 178947) "a") (data (i32.const 178950) "a") (data (i32.const 178953) "a") (data (i32.const 178956) "a") (data (i32.const 178959) "a") (data (i32.const 178962) "a") (data (i32.const 178965) "a") (data (i32.const 178968) "a") (data (i32.const 178971) "a") (data (i32.const 178974) "a") (data (i32.const 178977) "a") (data (i32.const 178980) "a") (data (i32.const 178983) "a") (data (i32.const 178986) "a") (data (i32.const 178989) "a") (data (i32.const 178992) "a") (data (i32.const 178995) "a") (data (i32.const 178998) "a") (data (i32.const 179001) "a") (data (i32.const 179004) "a") (data (i32.const 179007) "a") (data (i32.const 179010) "a") (data (i32.const 179013) "a") (data (i32.const 179016) "a") (data (i32.const 179019) "a") (data (i32.const 179022) "a") (data (i32.const 179025) "a") (data (i32.const 179028) "a") (data (i32.const 179031) "a") (data (i32.const 179034) "a") (data (i32.const 179037) "a") (data (i32.const 179040) "a") (data (i32.const 179043) "a") (data (i32.const 179046) "a") (data (i32.const 179049) "a") (data (i32.const 179052) "a") (data (i32.const 179055) "a") (data (i32.const 179058) "a") (data (i32.const 179061) "a") (data (i32.const 179064) "a") (data (i32.const 179067) "a") (data (i32.const 179070) "a") (data (i32.const 179073) "a") (data (i32.const 179076) "a") (data (i32.const 179079) "a") (data (i32.const 179082) "a") (data (i32.const 179085) "a") (data (i32.const 179088) "a") (data (i32.const 179091) "a") (data (i32.const 179094) "a") (data (i32.const 179097) "a") (data (i32.const 179100) "a") (data (i32.const 179103) "a") (data (i32.const 179106) "a") (data (i32.const 179109) "a") (data (i32.const 179112) "a") (data (i32.const 179115) "a") (data (i32.const 179118) "a") (data (i32.const 179121) "a") (data (i32.const 179124) "a") (data (i32.const 179127) "a") (data (i32.const 179130) "a") (data (i32.const 179133) "a") (data (i32.const 179136) "a") (data (i32.const 179139) "a") (data (i32.const 179142) "a") (data (i32.const 179145) "a") (data (i32.const 179148) "a") (data (i32.const 179151) "a") (data (i32.const 179154) "a") (data (i32.const 179157) "a") (data (i32.const 179160) "a") (data (i32.const 179163) "a") (data (i32.const 179166) "a") (data (i32.const 179169) "a") (data (i32.const 179172) "a") (data (i32.const 179175) "a") (data (i32.const 179178) "a") (data (i32.const 179181) "a") (data (i32.const 179184) "a") (data (i32.const 179187) "a") (data (i32.const 179190) "a") (data (i32.const 179193) "a") (data (i32.const 179196) "a") (data (i32.const 179199) "a") (data (i32.const 179202) "a") (data (i32.const 179205) "a") (data (i32.const 179208) "a") (data (i32.const 179211) "a") (data (i32.const 179214) "a") (data (i32.const 179217) "a") (data (i32.const 179220) "a") (data (i32.const 179223) "a") (data (i32.const 179226) "a") (data (i32.const 179229) "a") (data (i32.const 179232) "a") (data (i32.const 179235) "a") (data (i32.const 179238) "a") (data (i32.const 179241) "a") (data (i32.const 179244) "a") (data (i32.const 179247) "a") (data (i32.const 179250) "a") (data (i32.const 179253) "a") (data (i32.const 179256) "a") (data (i32.const 179259) "a") (data (i32.const 179262) "a") (data (i32.const 179265) "a") (data (i32.const 179268) "a") (data (i32.const 179271) "a") (data (i32.const 179274) "a") (data (i32.const 179277) "a") (data (i32.const 179280) "a") (data (i32.const 179283) "a") (data (i32.const 179286) "a") (data (i32.const 179289) "a") (data (i32.const 179292) "a") (data (i32.const 179295) "a") (data (i32.const 179298) "a") (data (i32.const 179301) "a") (data (i32.const 179304) "a") (data (i32.const 179307) "a") (data (i32.const 179310) "a") (data (i32.const 179313) "a") (data (i32.const 179316) "a") (data (i32.const 179319) "a") (data (i32.const 179322) "a") (data (i32.const 179325) "a") (data (i32.const 179328) "a") (data (i32.const 179331) "a") (data (i32.const 179334) "a") (data (i32.const 179337) "a") (data (i32.const 179340) "a") (data (i32.const 179343) "a") (data (i32.const 179346) "a") (data (i32.const 179349) "a") (data (i32.const 179352) "a") (data (i32.const 179355) "a") (data (i32.const 179358) "a") (data (i32.const 179361) "a") (data (i32.const 179364) "a") (data (i32.const 179367) "a") (data (i32.const 179370) "a") (data (i32.const 179373) "a") (data (i32.const 179376) "a") (data (i32.const 179379) "a") (data (i32.const 179382) "a") (data (i32.const 179385) "a") (data (i32.const 179388) "a") (data (i32.const 179391) "a") (data (i32.const 179394) "a") (data (i32.const 179397) "a") (data (i32.const 179400) "a") (data (i32.const 179403) "a") (data (i32.const 179406) "a") (data (i32.const 179409) "a") (data (i32.const 179412) "a") (data (i32.const 179415) "a") (data (i32.const 179418) "a") (data (i32.const 179421) "a") (data (i32.const 179424) "a") (data (i32.const 179427) "a") (data (i32.const 179430) "a") (data (i32.const 179433) "a") (data (i32.const 179436) "a") (data (i32.const 179439) "a") (data (i32.const 179442) "a") (data (i32.const 179445) "a") (data (i32.const 179448) "a") (data (i32.const 179451) "a") (data (i32.const 179454) "a") (data (i32.const 179457) "a") (data (i32.const 179460) "a") (data (i32.const 179463) "a") (data (i32.const 179466) "a") (data (i32.const 179469) "a") (data (i32.const 179472) "a") (data (i32.const 179475) "a") (data (i32.const 179478) "a") (data (i32.const 179481) "a") (data (i32.const 179484) "a") (data (i32.const 179487) "a") (data (i32.const 179490) "a") (data (i32.const 179493) "a") (data (i32.const 179496) "a") (data (i32.const 179499) "a") (data (i32.const 179502) "a") (data (i32.const 179505) "a") (data (i32.const 179508) "a") (data (i32.const 179511) "a") (data (i32.const 179514) "a") (data (i32.const 179517) "a") (data (i32.const 179520) "a") (data (i32.const 179523) "a") (data (i32.const 179526) "a") (data (i32.const 179529) "a") (data (i32.const 179532) "a") (data (i32.const 179535) "a") (data (i32.const 179538) "a") (data (i32.const 179541) "a") (data (i32.const 179544) "a") (data (i32.const 179547) "a") (data (i32.const 179550) "a") (data (i32.const 179553) "a") (data (i32.const 179556) "a") (data (i32.const 179559) "a") (data (i32.const 179562) "a") (data (i32.const 179565) "a") (data (i32.const 179568) "a") (data (i32.const 179571) "a") (data (i32.const 179574) "a") (data (i32.const 179577) "a") (data (i32.const 179580) "a") (data (i32.const 179583) "a") (data (i32.const 179586) "a") (data (i32.const 179589) "a") (data (i32.const 179592) "a") (data (i32.const 179595) "a") (data (i32.const 179598) "a") (data (i32.const 179601) "a") (data (i32.const 179604) "a") (data (i32.const 179607) "a") (data (i32.const 179610) "a") (data (i32.const 179613) "a") (data (i32.const 179616) "a") (data (i32.const 179619) "a") (data (i32.const 179622) "a") (data (i32.const 179625) "a") (data (i32.const 179628) "a") (data (i32.const 179631) "a") (data (i32.const 179634) "a") (data (i32.const 179637) "a") (data (i32.const 179640) "a") (data (i32.const 179643) "a") (data (i32.const 179646) "a") (data (i32.const 179649) "a") (data (i32.const 179652) "a") (data (i32.const 179655) "a") (data (i32.const 179658) "a") (data (i32.const 179661) "a") (data (i32.const 179664) "a") (data (i32.const 179667) "a") (data (i32.const 179670) "a") (data (i32.const 179673) "a") (data (i32.const 179676) "a") (data (i32.const 179679) "a") (data (i32.const 179682) "a") (data (i32.const 179685) "a") (data (i32.const 179688) "a") (data (i32.const 179691) "a") (data (i32.const 179694) "a") (data (i32.const 179697) "a") (data (i32.const 179700) "a") (data (i32.const 179703) "a") (data (i32.const 179706) "a") (data (i32.const 179709) "a") (data (i32.const 179712) "a") (data (i32.const 179715) "a") (data (i32.const 179718) "a") (data (i32.const 179721) "a") (data (i32.const 179724) "a") (data (i32.const 179727) "a") (data (i32.const 179730) "a") (data (i32.const 179733) "a") (data (i32.const 179736) "a") (data (i32.const 179739) "a") (data (i32.const 179742) "a") (data (i32.const 179745) "a") (data (i32.const 179748) "a") (data (i32.const 179751) "a") (data (i32.const 179754) "a") (data (i32.const 179757) "a") (data (i32.const 179760) "a") (data (i32.const 179763) "a") (data (i32.const 179766) "a") (data (i32.const 179769) "a") (data (i32.const 179772) "a") (data (i32.const 179775) "a") (data (i32.const 179778) "a") (data (i32.const 179781) "a") (data (i32.const 179784) "a") (data (i32.const 179787) "a") (data (i32.const 179790) "a") (data (i32.const 179793) "a") (data (i32.const 179796) "a") (data (i32.const 179799) "a") (data (i32.const 179802) "a") (data (i32.const 179805) "a") (data (i32.const 179808) "a") (data (i32.const 179811) "a") (data (i32.const 179814) "a") (data (i32.const 179817) "a") (data (i32.const 179820) "a") (data (i32.const 179823) "a") (data (i32.const 179826) "a") (data (i32.const 179829) "a") (data (i32.const 179832) "a") (data (i32.const 179835) "a") (data (i32.const 179838) "a") (data (i32.const 179841) "a") (data (i32.const 179844) "a") (data (i32.const 179847) "a") (data (i32.const 179850) "a") (data (i32.const 179853) "a") (data (i32.const 179856) "a") (data (i32.const 179859) "a") (data (i32.const 179862) "a") (data (i32.const 179865) "a") (data (i32.const 179868) "a") (data (i32.const 179871) "a") (data (i32.const 179874) "a") (data (i32.const 179877) "a") (data (i32.const 179880) "a") (data (i32.const 179883) "a") (data (i32.const 179886) "a") (data (i32.const 179889) "a") (data (i32.const 179892) "a") (data (i32.const 179895) "a") (data (i32.const 179898) "a") (data (i32.const 179901) "a") (data (i32.const 179904) "a") (data (i32.const 179907) "a") (data (i32.const 179910) "a") (data (i32.const 179913) "a") (data (i32.const 179916) "a") (data (i32.const 179919) "a") (data (i32.const 179922) "a") (data (i32.const 179925) "a") (data (i32.const 179928) "a") (data (i32.const 179931) "a") (data (i32.const 179934) "a") (data (i32.const 179937) "a") (data (i32.const 179940) "a") (data (i32.const 179943) "a") (data (i32.const 179946) "a") (data (i32.const 179949) "a") (data (i32.const 179952) "a") (data (i32.const 179955) "a") (data (i32.const 179958) "a") (data (i32.const 179961) "a") (data (i32.const 179964) "a") (data (i32.const 179967) "a") (data (i32.const 179970) "a") (data (i32.const 179973) "a") (data (i32.const 179976) "a") (data (i32.const 179979) "a") (data (i32.const 179982) "a") (data (i32.const 179985) "a") (data (i32.const 179988) "a") (data (i32.const 179991) "a") (data (i32.const 179994) "a") (data (i32.const 179997) "a") (data (i32.const 180000) "a") (data (i32.const 180003) "a") (data (i32.const 180006) "a") (data (i32.const 180009) "a") (data (i32.const 180012) "a") (data (i32.const 180015) "a") (data (i32.const 180018) "a") (data (i32.const 180021) "a") (data (i32.const 180024) "a") (data (i32.const 180027) "a") (data (i32.const 180030) "a") (data (i32.const 180033) "a") (data (i32.const 180036) "a") (data (i32.const 180039) "a") (data (i32.const 180042) "a") (data (i32.const 180045) "a") (data (i32.const 180048) "a") (data (i32.const 180051) "a") (data (i32.const 180054) "a") (data (i32.const 180057) "a") (data (i32.const 180060) "a") (data (i32.const 180063) "a") (data (i32.const 180066) "a") (data (i32.const 180069) "a") (data (i32.const 180072) "a") (data (i32.const 180075) "a") (data (i32.const 180078) "a") (data (i32.const 180081) "a") (data (i32.const 180084) "a") (data (i32.const 180087) "a") (data (i32.const 180090) "a") (data (i32.const 180093) "a") (data (i32.const 180096) "a") (data (i32.const 180099) "a") (data (i32.const 180102) "a") (data (i32.const 180105) "a") (data (i32.const 180108) "a") (data (i32.const 180111) "a") (data (i32.const 180114) "a") (data (i32.const 180117) "a") (data (i32.const 180120) "a") (data (i32.const 180123) "a") (data (i32.const 180126) "a") (data (i32.const 180129) "a") (data (i32.const 180132) "a") (data (i32.const 180135) "a") (data (i32.const 180138) "a") (data (i32.const 180141) "a") (data (i32.const 180144) "a") (data (i32.const 180147) "a") (data (i32.const 180150) "a") (data (i32.const 180153) "a") (data (i32.const 180156) "a") (data (i32.const 180159) "a") (data (i32.const 180162) "a") (data (i32.const 180165) "a") (data (i32.const 180168) "a") (data (i32.const 180171) "a") (data (i32.const 180174) "a") (data (i32.const 180177) "a") (data (i32.const 180180) "a") (data (i32.const 180183) "a") (data (i32.const 180186) "a") (data (i32.const 180189) "a") (data (i32.const 180192) "a") (data (i32.const 180195) "a") (data (i32.const 180198) "a") (data (i32.const 180201) "a") (data (i32.const 180204) "a") (data (i32.const 180207) "a") (data (i32.const 180210) "a") (data (i32.const 180213) "a") (data (i32.const 180216) "a") (data (i32.const 180219) "a") (data (i32.const 180222) "a") (data (i32.const 180225) "a") (data (i32.const 180228) "a") (data (i32.const 180231) "a") (data (i32.const 180234) "a") (data (i32.const 180237) "a") (data (i32.const 180240) "a") (data (i32.const 180243) "a") (data (i32.const 180246) "a") (data (i32.const 180249) "a") (data (i32.const 180252) "a") (data (i32.const 180255) "a") (data (i32.const 180258) "a") (data (i32.const 180261) "a") (data (i32.const 180264) "a") (data (i32.const 180267) "a") (data (i32.const 180270) "a") (data (i32.const 180273) "a") (data (i32.const 180276) "a") (data (i32.const 180279) "a") (data (i32.const 180282) "a") (data (i32.const 180285) "a") (data (i32.const 180288) "a") (data (i32.const 180291) "a") (data (i32.const 180294) "a") (data (i32.const 180297) "a") (data (i32.const 180300) "a") (data (i32.const 180303) "a") (data (i32.const 180306) "a") (data (i32.const 180309) "a") (data (i32.const 180312) "a") (data (i32.const 180315) "a") (data (i32.const 180318) "a") (data (i32.const 180321) "a") (data (i32.const 180324) "a") (data (i32.const 180327) "a") (data (i32.const 180330) "a") (data (i32.const 180333) "a") (data (i32.const 180336) "a") (data (i32.const 180339) "a") (data (i32.const 180342) "a") (data (i32.const 180345) "a") (data (i32.const 180348) "a") (data (i32.const 180351) "a") (data (i32.const 180354) "a") (data (i32.const 180357) "a") (data (i32.const 180360) "a") (data (i32.const 180363) "a") (data (i32.const 180366) "a") (data (i32.const 180369) "a") (data (i32.const 180372) "a") (data (i32.const 180375) "a") (data (i32.const 180378) "a") (data (i32.const 180381) "a") (data (i32.const 180384) "a") (data (i32.const 180387) "a") (data (i32.const 180390) "a") (data (i32.const 180393) "a") (data (i32.const 180396) "a") (data (i32.const 180399) "a") (data (i32.const 180402) "a") (data (i32.const 180405) "a") (data (i32.const 180408) "a") (data (i32.const 180411) "a") (data (i32.const 180414) "a") (data (i32.const 180417) "a") (data (i32.const 180420) "a") (data (i32.const 180423) "a") (data (i32.const 180426) "a") (data (i32.const 180429) "a") (data (i32.const 180432) "a") (data (i32.const 180435) "a") (data (i32.const 180438) "a") (data (i32.const 180441) "a") (data (i32.const 180444) "a") (data (i32.const 180447) "a") (data (i32.const 180450) "a") (data (i32.const 180453) "a") (data (i32.const 180456) "a") (data (i32.const 180459) "a") (data (i32.const 180462) "a") (data (i32.const 180465) "a") (data (i32.const 180468) "a") (data (i32.const 180471) "a") (data (i32.const 180474) "a") (data (i32.const 180477) "a") (data (i32.const 180480) "a") (data (i32.const 180483) "a") (data (i32.const 180486) "a") (data (i32.const 180489) "a") (data (i32.const 180492) "a") (data (i32.const 180495) "a") (data (i32.const 180498) "a") (data (i32.const 180501) "a") (data (i32.const 180504) "a") (data (i32.const 180507) "a") (data (i32.const 180510) "a") (data (i32.const 180513) "a") (data (i32.const 180516) "a") (data (i32.const 180519) "a") (data (i32.const 180522) "a") (data (i32.const 180525) "a") (data (i32.const 180528) "a") (data (i32.const 180531) "a") (data (i32.const 180534) "a") (data (i32.const 180537) "a") (data (i32.const 180540) "a") (data (i32.const 180543) "a") (data (i32.const 180546) "a") (data (i32.const 180549) "a") (data (i32.const 180552) "a") (data (i32.const 180555) "a") (data (i32.const 180558) "a") (data (i32.const 180561) "a") (data (i32.const 180564) "a") (data (i32.const 180567) "a") (data (i32.const 180570) "a") (data (i32.const 180573) "a") (data (i32.const 180576) "a") (data (i32.const 180579) "a") (data (i32.const 180582) "a") (data (i32.const 180585) "a") (data (i32.const 180588) "a") (data (i32.const 180591) "a") (data (i32.const 180594) "a") (data (i32.const 180597) "a") (data (i32.const 180600) "a") (data (i32.const 180603) "a") (data (i32.const 180606) "a") (data (i32.const 180609) "a") (data (i32.const 180612) "a") (data (i32.const 180615) "a") (data (i32.const 180618) "a") (data (i32.const 180621) "a") (data (i32.const 180624) "a") (data (i32.const 180627) "a") (data (i32.const 180630) "a") (data (i32.const 180633) "a") (data (i32.const 180636) "a") (data (i32.const 180639) "a") (data (i32.const 180642) "a") (data (i32.const 180645) "a") (data (i32.const 180648) "a") (data (i32.const 180651) "a") (data (i32.const 180654) "a") (data (i32.const 180657) "a") (data (i32.const 180660) "a") (data (i32.const 180663) "a") (data (i32.const 180666) "a") (data (i32.const 180669) "a") (data (i32.const 180672) "a") (data (i32.const 180675) "a") (data (i32.const 180678) "a") (data (i32.const 180681) "a") (data (i32.const 180684) "a") (data (i32.const 180687) "a") (data (i32.const 180690) "a") (data (i32.const 180693) "a") (data (i32.const 180696) "a") (data (i32.const 180699) "a") (data (i32.const 180702) "a") (data (i32.const 180705) "a") (data (i32.const 180708) "a") (data (i32.const 180711) "a") (data (i32.const 180714) "a") (data (i32.const 180717) "a") (data (i32.const 180720) "a") (data (i32.const 180723) "a") (data (i32.const 180726) "a") (data (i32.const 180729) "a") (data (i32.const 180732) "a") (data (i32.const 180735) "a") (data (i32.const 180738) "a") (data (i32.const 180741) "a") (data (i32.const 180744) "a") (data (i32.const 180747) "a") (data (i32.const 180750) "a") (data (i32.const 180753) "a") (data (i32.const 180756) "a") (data (i32.const 180759) "a") (data (i32.const 180762) "a") (data (i32.const 180765) "a") (data (i32.const 180768) "a") (data (i32.const 180771) "a") (data (i32.const 180774) "a") (data (i32.const 180777) "a") (data (i32.const 180780) "a") (data (i32.const 180783) "a") (data (i32.const 180786) "a") (data (i32.const 180789) "a") (data (i32.const 180792) "a") (data (i32.const 180795) "a") (data (i32.const 180798) "a") (data (i32.const 180801) "a") (data (i32.const 180804) "a") (data (i32.const 180807) "a") (data (i32.const 180810) "a") (data (i32.const 180813) "a") (data (i32.const 180816) "a") (data (i32.const 180819) "a") (data (i32.const 180822) "a") (data (i32.const 180825) "a") (data (i32.const 180828) "a") (data (i32.const 180831) "a") (data (i32.const 180834) "a") (data (i32.const 180837) "a") (data (i32.const 180840) "a") (data (i32.const 180843) "a") (data (i32.const 180846) "a") (data (i32.const 180849) "a") (data (i32.const 180852) "a") (data (i32.const 180855) "a") (data (i32.const 180858) "a") (data (i32.const 180861) "a") (data (i32.const 180864) "a") (data (i32.const 180867) "a") (data (i32.const 180870) "a") (data (i32.const 180873) "a") (data (i32.const 180876) "a") (data (i32.const 180879) "a") (data (i32.const 180882) "a") (data (i32.const 180885) "a") (data (i32.const 180888) "a") (data (i32.const 180891) "a") (data (i32.const 180894) "a") (data (i32.const 180897) "a") (data (i32.const 180900) "a") (data (i32.const 180903) "a") (data (i32.const 180906) "a") (data (i32.const 180909) "a") (data (i32.const 180912) "a") (data (i32.const 180915) "a") (data (i32.const 180918) "a") (data (i32.const 180921) "a") (data (i32.const 180924) "a") (data (i32.const 180927) "a") (data (i32.const 180930) "a") (data (i32.const 180933) "a") (data (i32.const 180936) "a") (data (i32.const 180939) "a") (data (i32.const 180942) "a") (data (i32.const 180945) "a") (data (i32.const 180948) "a") (data (i32.const 180951) "a") (data (i32.const 180954) "a") (data (i32.const 180957) "a") (data (i32.const 180960) "a") (data (i32.const 180963) "a") (data (i32.const 180966) "a") (data (i32.const 180969) "a") (data (i32.const 180972) "a") (data (i32.const 180975) "a") (data (i32.const 180978) "a") (data (i32.const 180981) "a") (data (i32.const 180984) "a") (data (i32.const 180987) "a") (data (i32.const 180990) "a") (data (i32.const 180993) "a") (data (i32.const 180996) "a") (data (i32.const 180999) "a") (data (i32.const 181002) "a") (data (i32.const 181005) "a") (data (i32.const 181008) "a") (data (i32.const 181011) "a") (data (i32.const 181014) "a") (data (i32.const 181017) "a") (data (i32.const 181020) "a") (data (i32.const 181023) "a") (data (i32.const 181026) "a") (data (i32.const 181029) "a") (data (i32.const 181032) "a") (data (i32.const 181035) "a") (data (i32.const 181038) "a") (data (i32.const 181041) "a") (data (i32.const 181044) "a") (data (i32.const 181047) "a") (data (i32.const 181050) "a") (data (i32.const 181053) "a") (data (i32.const 181056) "a") (data (i32.const 181059) "a") (data (i32.const 181062) "a") (data (i32.const 181065) "a") (data (i32.const 181068) "a") (data (i32.const 181071) "a") (data (i32.const 181074) "a") (data (i32.const 181077) "a") (data (i32.const 181080) "a") (data (i32.const 181083) "a") (data (i32.const 181086) "a") (data (i32.const 181089) "a") (data (i32.const 181092) "a") (data (i32.const 181095) "a") (data (i32.const 181098) "a") (data (i32.const 181101) "a") (data (i32.const 181104) "a") (data (i32.const 181107) "a") (data (i32.const 181110) "a") (data (i32.const 181113) "a") (data (i32.const 181116) "a") (data (i32.const 181119) "a") (data (i32.const 181122) "a") (data (i32.const 181125) "a") (data (i32.const 181128) "a") (data (i32.const 181131) "a") (data (i32.const 181134) "a") (data (i32.const 181137) "a") (data (i32.const 181140) "a") (data (i32.const 181143) "a") (data (i32.const 181146) "a") (data (i32.const 181149) "a") (data (i32.const 181152) "a") (data (i32.const 181155) "a") (data (i32.const 181158) "a") (data (i32.const 181161) "a") (data (i32.const 181164) "a") (data (i32.const 181167) "a") (data (i32.const 181170) "a") (data (i32.const 181173) "a") (data (i32.const 181176) "a") (data (i32.const 181179) "a") (data (i32.const 181182) "a") (data (i32.const 181185) "a") (data (i32.const 181188) "a") (data (i32.const 181191) "a") (data (i32.const 181194) "a") (data (i32.const 181197) "a") (data (i32.const 181200) "a") (data (i32.const 181203) "a") (data (i32.const 181206) "a") (data (i32.const 181209) "a") (data (i32.const 181212) "a") (data (i32.const 181215) "a") (data (i32.const 181218) "a") (data (i32.const 181221) "a") (data (i32.const 181224) "a") (data (i32.const 181227) "a") (data (i32.const 181230) "a") (data (i32.const 181233) "a") (data (i32.const 181236) "a") (data (i32.const 181239) "a") (data (i32.const 181242) "a") (data (i32.const 181245) "a") (data (i32.const 181248) "a") (data (i32.const 181251) "a") (data (i32.const 181254) "a") (data (i32.const 181257) "a") (data (i32.const 181260) "a") (data (i32.const 181263) "a") (data (i32.const 181266) "a") (data (i32.const 181269) "a") (data (i32.const 181272) "a") (data (i32.const 181275) "a") (data (i32.const 181278) "a") (data (i32.const 181281) "a") (data (i32.const 181284) "a") (data (i32.const 181287) "a") (data (i32.const 181290) "a") (data (i32.const 181293) "a") (data (i32.const 181296) "a") (data (i32.const 181299) "a") (data (i32.const 181302) "a") (data (i32.const 181305) "a") (data (i32.const 181308) "a") (data (i32.const 181311) "a") (data (i32.const 181314) "a") (data (i32.const 181317) "a") (data (i32.const 181320) "a") (data (i32.const 181323) "a") (data (i32.const 181326) "a") (data (i32.const 181329) "a") (data (i32.const 181332) "a") (data (i32.const 181335) "a") (data (i32.const 181338) "a") (data (i32.const 181341) "a") (data (i32.const 181344) "a") (data (i32.const 181347) "a") (data (i32.const 181350) "a") (data (i32.const 181353) "a") (data (i32.const 181356) "a") (data (i32.const 181359) "a") (data (i32.const 181362) "a") (data (i32.const 181365) "a") (data (i32.const 181368) "a") (data (i32.const 181371) "a") (data (i32.const 181374) "a") (data (i32.const 181377) "a") (data (i32.const 181380) "a") (data (i32.const 181383) "a") (data (i32.const 181386) "a") (data (i32.const 181389) "a") (data (i32.const 181392) "a") (data (i32.const 181395) "a") (data (i32.const 181398) "a") (data (i32.const 181401) "a") (data (i32.const 181404) "a") (data (i32.const 181407) "a") (data (i32.const 181410) "a") (data (i32.const 181413) "a") (data (i32.const 181416) "a") (data (i32.const 181419) "a") (data (i32.const 181422) "a") (data (i32.const 181425) "a") (data (i32.const 181428) "a") (data (i32.const 181431) "a") (data (i32.const 181434) "a") (data (i32.const 181437) "a") (data (i32.const 181440) "a") (data (i32.const 181443) "a") (data (i32.const 181446) "a") (data (i32.const 181449) "a") (data (i32.const 181452) "a") (data (i32.const 181455) "a") (data (i32.const 181458) "a") (data (i32.const 181461) "a") (data (i32.const 181464) "a") (data (i32.const 181467) "a") (data (i32.const 181470) "a") (data (i32.const 181473) "a") (data (i32.const 181476) "a") (data (i32.const 181479) "a") (data (i32.const 181482) "a") (data (i32.const 181485) "a") (data (i32.const 181488) "a") (data (i32.const 181491) "a") (data (i32.const 181494) "a") (data (i32.const 181497) "a") (data (i32.const 181500) "a") (data (i32.const 181503) "a") (data (i32.const 181506) "a") (data (i32.const 181509) "a") (data (i32.const 181512) "a") (data (i32.const 181515) "a") (data (i32.const 181518) "a") (data (i32.const 181521) "a") (data (i32.const 181524) "a") (data (i32.const 181527) "a") (data (i32.const 181530) "a") (data (i32.const 181533) "a") (data (i32.const 181536) "a") (data (i32.const 181539) "a") (data (i32.const 181542) "a") (data (i32.const 181545) "a") (data (i32.const 181548) "a") (data (i32.const 181551) "a") (data (i32.const 181554) "a") (data (i32.const 181557) "a") (data (i32.const 181560) "a") (data (i32.const 181563) "a") (data (i32.const 181566) "a") (data (i32.const 181569) "a") (data (i32.const 181572) "a") (data (i32.const 181575) "a") (data (i32.const 181578) "a") (data (i32.const 181581) "a") (data (i32.const 181584) "a") (data (i32.const 181587) "a") (data (i32.const 181590) "a") (data (i32.const 181593) "a") (data (i32.const 181596) "a") (data (i32.const 181599) "a") (data (i32.const 181602) "a") (data (i32.const 181605) "a") (data (i32.const 181608) "a") (data (i32.const 181611) "a") (data (i32.const 181614) "a") (data (i32.const 181617) "a") (data (i32.const 181620) "a") (data (i32.const 181623) "a") (data (i32.const 181626) "a") (data (i32.const 181629) "a") (data (i32.const 181632) "a") (data (i32.const 181635) "a") (data (i32.const 181638) "a") (data (i32.const 181641) "a") (data (i32.const 181644) "a") (data (i32.const 181647) "a") (data (i32.const 181650) "a") (data (i32.const 181653) "a") (data (i32.const 181656) "a") (data (i32.const 181659) "a") (data (i32.const 181662) "a") (data (i32.const 181665) "a") (data (i32.const 181668) "a") (data (i32.const 181671) "a") (data (i32.const 181674) "a") (data (i32.const 181677) "a") (data (i32.const 181680) "a") (data (i32.const 181683) "a") (data (i32.const 181686) "a") (data (i32.const 181689) "a") (data (i32.const 181692) "a") (data (i32.const 181695) "a") (data (i32.const 181698) "a") (data (i32.const 181701) "a") (data (i32.const 181704) "a") (data (i32.const 181707) "a") (data (i32.const 181710) "a") (data (i32.const 181713) "a") (data (i32.const 181716) "a") (data (i32.const 181719) "a") (data (i32.const 181722) "a") (data (i32.const 181725) "a") (data (i32.const 181728) "a") (data (i32.const 181731) "a") (data (i32.const 181734) "a") (data (i32.const 181737) "a") (data (i32.const 181740) "a") (data (i32.const 181743) "a") (data (i32.const 181746) "a") (data (i32.const 181749) "a") (data (i32.const 181752) "a") (data (i32.const 181755) "a") (data (i32.const 181758) "a") (data (i32.const 181761) "a") (data (i32.const 181764) "a") (data (i32.const 181767) "a") (data (i32.const 181770) "a") (data (i32.const 181773) "a") (data (i32.const 181776) "a") (data (i32.const 181779) "a") (data (i32.const 181782) "a") (data (i32.const 181785) "a") (data (i32.const 181788) "a") (data (i32.const 181791) "a") (data (i32.const 181794) "a") (data (i32.const 181797) "a") (data (i32.const 181800) "a") (data (i32.const 181803) "a") (data (i32.const 181806) "a") (data (i32.const 181809) "a") (data (i32.const 181812) "a") (data (i32.const 181815) "a") (data (i32.const 181818) "a") (data (i32.const 181821) "a") (data (i32.const 181824) "a") (data (i32.const 181827) "a") (data (i32.const 181830) "a") (data (i32.const 181833) "a") (data (i32.const 181836) "a") (data (i32.const 181839) "a") (data (i32.const 181842) "a") (data (i32.const 181845) "a") (data (i32.const 181848) "a") (data (i32.const 181851) "a") (data (i32.const 181854) "a") (data (i32.const 181857) "a") (data (i32.const 181860) "a") (data (i32.const 181863) "a") (data (i32.const 181866) "a") (data (i32.const 181869) "a") (data (i32.const 181872) "a") (data (i32.const 181875) "a") (data (i32.const 181878) "a") (data (i32.const 181881) "a") (data (i32.const 181884) "a") (data (i32.const 181887) "a") (data (i32.const 181890) "a") (data (i32.const 181893) "a") (data (i32.const 181896) "a") (data (i32.const 181899) "a") (data (i32.const 181902) "a") (data (i32.const 181905) "a") (data (i32.const 181908) "a") (data (i32.const 181911) "a") (data (i32.const 181914) "a") (data (i32.const 181917) "a") (data (i32.const 181920) "a") (data (i32.const 181923) "a") (data (i32.const 181926) "a") (data (i32.const 181929) "a") (data (i32.const 181932) "a") (data (i32.const 181935) "a") (data (i32.const 181938) "a") (data (i32.const 181941) "a") (data (i32.const 181944) "a") (data (i32.const 181947) "a") (data (i32.const 181950) "a") (data (i32.const 181953) "a") (data (i32.const 181956) "a") (data (i32.const 181959) "a") (data (i32.const 181962) "a") (data (i32.const 181965) "a") (data (i32.const 181968) "a") (data (i32.const 181971) "a") (data (i32.const 181974) "a") (data (i32.const 181977) "a") (data (i32.const 181980) "a") (data (i32.const 181983) "a") (data (i32.const 181986) "a") (data (i32.const 181989) "a") (data (i32.const 181992) "a") (data (i32.const 181995) "a") (data (i32.const 181998) "a") (data (i32.const 182001) "a") (data (i32.const 182004) "a") (data (i32.const 182007) "a") (data (i32.const 182010) "a") (data (i32.const 182013) "a") (data (i32.const 182016) "a") (data (i32.const 182019) "a") (data (i32.const 182022) "a") (data (i32.const 182025) "a") (data (i32.const 182028) "a") (data (i32.const 182031) "a") (data (i32.const 182034) "a") (data (i32.const 182037) "a") (data (i32.const 182040) "a") (data (i32.const 182043) "a") (data (i32.const 182046) "a") (data (i32.const 182049) "a") (data (i32.const 182052) "a") (data (i32.const 182055) "a") (data (i32.const 182058) "a") (data (i32.const 182061) "a") (data (i32.const 182064) "a") (data (i32.const 182067) "a") (data (i32.const 182070) "a") (data (i32.const 182073) "a") (data (i32.const 182076) "a") (data (i32.const 182079) "a") (data (i32.const 182082) "a") (data (i32.const 182085) "a") (data (i32.const 182088) "a") (data (i32.const 182091) "a") (data (i32.const 182094) "a") (data (i32.const 182097) "a") (data (i32.const 182100) "a") (data (i32.const 182103) "a") (data (i32.const 182106) "a") (data (i32.const 182109) "a") (data (i32.const 182112) "a") (data (i32.const 182115) "a") (data (i32.const 182118) "a") (data (i32.const 182121) "a") (data (i32.const 182124) "a") (data (i32.const 182127) "a") (data (i32.const 182130) "a") (data (i32.const 182133) "a") (data (i32.const 182136) "a") (data (i32.const 182139) "a") (data (i32.const 182142) "a") (data (i32.const 182145) "a") (data (i32.const 182148) "a") (data (i32.const 182151) "a") (data (i32.const 182154) "a") (data (i32.const 182157) "a") (data (i32.const 182160) "a") (data (i32.const 182163) "a") (data (i32.const 182166) "a") (data (i32.const 182169) "a") (data (i32.const 182172) "a") (data (i32.const 182175) "a") (data (i32.const 182178) "a") (data (i32.const 182181) "a") (data (i32.const 182184) "a") (data (i32.const 182187) "a") (data (i32.const 182190) "a") (data (i32.const 182193) "a") (data (i32.const 182196) "a") (data (i32.const 182199) "a") (data (i32.const 182202) "a") (data (i32.const 182205) "a") (data (i32.const 182208) "a") (data (i32.const 182211) "a") (data (i32.const 182214) "a") (data (i32.const 182217) "a") (data (i32.const 182220) "a") (data (i32.const 182223) "a") (data (i32.const 182226) "a") (data (i32.const 182229) "a") (data (i32.const 182232) "a") (data (i32.const 182235) "a") (data (i32.const 182238) "a") (data (i32.const 182241) "a") (data (i32.const 182244) "a") (data (i32.const 182247) "a") (data (i32.const 182250) "a") (data (i32.const 182253) "a") (data (i32.const 182256) "a") (data (i32.const 182259) "a") (data (i32.const 182262) "a") (data (i32.const 182265) "a") (data (i32.const 182268) "a") (data (i32.const 182271) "a") (data (i32.const 182274) "a") (data (i32.const 182277) "a") (data (i32.const 182280) "a") (data (i32.const 182283) "a") (data (i32.const 182286) "a") (data (i32.const 182289) "a") (data (i32.const 182292) "a") (data (i32.const 182295) "a") (data (i32.const 182298) "a") (data (i32.const 182301) "a") (data (i32.const 182304) "a") (data (i32.const 182307) "a") (data (i32.const 182310) "a") (data (i32.const 182313) "a") (data (i32.const 182316) "a") (data (i32.const 182319) "a") (data (i32.const 182322) "a") (data (i32.const 182325) "a") (data (i32.const 182328) "a") (data (i32.const 182331) "a") (data (i32.const 182334) "a") (data (i32.const 182337) "a") (data (i32.const 182340) "a") (data (i32.const 182343) "a") (data (i32.const 182346) "a") (data (i32.const 182349) "a") (data (i32.const 182352) "a") (data (i32.const 182355) "a") (data (i32.const 182358) "a") (data (i32.const 182361) "a") (data (i32.const 182364) "a") (data (i32.const 182367) "a") (data (i32.const 182370) "a") (data (i32.const 182373) "a") (data (i32.const 182376) "a") (data (i32.const 182379) "a") (data (i32.const 182382) "a") (data (i32.const 182385) "a") (data (i32.const 182388) "a") (data (i32.const 182391) "a") (data (i32.const 182394) "a") (data (i32.const 182397) "a") (data (i32.const 182400) "a") (data (i32.const 182403) "a") (data (i32.const 182406) "a") (data (i32.const 182409) "a") (data (i32.const 182412) "a") (data (i32.const 182415) "a") (data (i32.const 182418) "a") (data (i32.const 182421) "a") (data (i32.const 182424) "a") (data (i32.const 182427) "a") (data (i32.const 182430) "a") (data (i32.const 182433) "a") (data (i32.const 182436) "a") (data (i32.const 182439) "a") (data (i32.const 182442) "a") (data (i32.const 182445) "a") (data (i32.const 182448) "a") (data (i32.const 182451) "a") (data (i32.const 182454) "a") (data (i32.const 182457) "a") (data (i32.const 182460) "a") (data (i32.const 182463) "a") (data (i32.const 182466) "a") (data (i32.const 182469) "a") (data (i32.const 182472) "a") (data (i32.const 182475) "a") (data (i32.const 182478) "a") (data (i32.const 182481) "a") (data (i32.const 182484) "a") (data (i32.const 182487) "a") (data (i32.const 182490) "a") (data (i32.const 182493) "a") (data (i32.const 182496) "a") (data (i32.const 182499) "a") (data (i32.const 182502) "a") (data (i32.const 182505) "a") (data (i32.const 182508) "a") (data (i32.const 182511) "a") (data (i32.const 182514) "a") (data (i32.const 182517) "a") (data (i32.const 182520) "a") (data (i32.const 182523) "a") (data (i32.const 182526) "a") (data (i32.const 182529) "a") (data (i32.const 182532) "a") (data (i32.const 182535) "a") (data (i32.const 182538) "a") (data (i32.const 182541) "a") (data (i32.const 182544) "a") (data (i32.const 182547) "a") (data (i32.const 182550) "a") (data (i32.const 182553) "a") (data (i32.const 182556) "a") (data (i32.const 182559) "a") (data (i32.const 182562) "a") (data (i32.const 182565) "a") (data (i32.const 182568) "a") (data (i32.const 182571) "a") (data (i32.const 182574) "a") (data (i32.const 182577) "a") (data (i32.const 182580) "a") (data (i32.const 182583) "a") (data (i32.const 182586) "a") (data (i32.const 182589) "a") (data (i32.const 182592) "a") (data (i32.const 182595) "a") (data (i32.const 182598) "a") (data (i32.const 182601) "a") (data (i32.const 182604) "a") (data (i32.const 182607) "a") (data (i32.const 182610) "a") (data (i32.const 182613) "a") (data (i32.const 182616) "a") (data (i32.const 182619) "a") (data (i32.const 182622) "a") (data (i32.const 182625) "a") (data (i32.const 182628) "a") (data (i32.const 182631) "a") (data (i32.const 182634) "a") (data (i32.const 182637) "a") (data (i32.const 182640) "a") (data (i32.const 182643) "a") (data (i32.const 182646) "a") (data (i32.const 182649) "a") (data (i32.const 182652) "a") (data (i32.const 182655) "a") (data (i32.const 182658) "a") (data (i32.const 182661) "a") (data (i32.const 182664) "a") (data (i32.const 182667) "a") (data (i32.const 182670) "a") (data (i32.const 182673) "a") (data (i32.const 182676) "a") (data (i32.const 182679) "a") (data (i32.const 182682) "a") (data (i32.const 182685) "a") (data (i32.const 182688) "a") (data (i32.const 182691) "a") (data (i32.const 182694) "a") (data (i32.const 182697) "a") (data (i32.const 182700) "a") (data (i32.const 182703) "a") (data (i32.const 182706) "a") (data (i32.const 182709) "a") (data (i32.const 182712) "a") (data (i32.const 182715) "a") (data (i32.const 182718) "a") (data (i32.const 182721) "a") (data (i32.const 182724) "a") (data (i32.const 182727) "a") (data (i32.const 182730) "a") (data (i32.const 182733) "a") (data (i32.const 182736) "a") (data (i32.const 182739) "a") (data (i32.const 182742) "a") (data (i32.const 182745) "a") (data (i32.const 182748) "a") (data (i32.const 182751) "a") (data (i32.const 182754) "a") (data (i32.const 182757) "a") (data (i32.const 182760) "a") (data (i32.const 182763) "a") (data (i32.const 182766) "a") (data (i32.const 182769) "a") (data (i32.const 182772) "a") (data (i32.const 182775) "a") (data (i32.const 182778) "a") (data (i32.const 182781) "a") (data (i32.const 182784) "a") (data (i32.const 182787) "a") (data (i32.const 182790) "a") (data (i32.const 182793) "a") (data (i32.const 182796) "a") (data (i32.const 182799) "a") (data (i32.const 182802) "a") (data (i32.const 182805) "a") (data (i32.const 182808) "a") (data (i32.const 182811) "a") (data (i32.const 182814) "a") (data (i32.const 182817) "a") (data (i32.const 182820) "a") (data (i32.const 182823) "a") (data (i32.const 182826) "a") (data (i32.const 182829) "a") (data (i32.const 182832) "a") (data (i32.const 182835) "a") (data (i32.const 182838) "a") (data (i32.const 182841) "a") (data (i32.const 182844) "a") (data (i32.const 182847) "a") (data (i32.const 182850) "a") (data (i32.const 182853) "a") (data (i32.const 182856) "a") (data (i32.const 182859) "a") (data (i32.const 182862) "a") (data (i32.const 182865) "a") (data (i32.const 182868) "a") (data (i32.const 182871) "a") (data (i32.const 182874) "a") (data (i32.const 182877) "a") (data (i32.const 182880) "a") (data (i32.const 182883) "a") (data (i32.const 182886) "a") (data (i32.const 182889) "a") (data (i32.const 182892) "a") (data (i32.const 182895) "a") (data (i32.const 182898) "a") (data (i32.const 182901) "a") (data (i32.const 182904) "a") (data (i32.const 182907) "a") (data (i32.const 182910) "a") (data (i32.const 182913) "a") (data (i32.const 182916) "a") (data (i32.const 182919) "a") (data (i32.const 182922) "a") (data (i32.const 182925) "a") (data (i32.const 182928) "a") (data (i32.const 182931) "a") (data (i32.const 182934) "a") (data (i32.const 182937) "a") (data (i32.const 182940) "a") (data (i32.const 182943) "a") (data (i32.const 182946) "a") (data (i32.const 182949) "a") (data (i32.const 182952) "a") (data (i32.const 182955) "a") (data (i32.const 182958) "a") (data (i32.const 182961) "a") (data (i32.const 182964) "a") (data (i32.const 182967) "a") (data (i32.const 182970) "a") (data (i32.const 182973) "a") (data (i32.const 182976) "a") (data (i32.const 182979) "a") (data (i32.const 182982) "a") (data (i32.const 182985) "a") (data (i32.const 182988) "a") (data (i32.const 182991) "a") (data (i32.const 182994) "a") (data (i32.const 182997) "a") (data (i32.const 183000) "a") (data (i32.const 183003) "a") (data (i32.const 183006) "a") (data (i32.const 183009) "a") (data (i32.const 183012) "a") (data (i32.const 183015) "a") (data (i32.const 183018) "a") (data (i32.const 183021) "a") (data (i32.const 183024) "a") (data (i32.const 183027) "a") (data (i32.const 183030) "a") (data (i32.const 183033) "a") (data (i32.const 183036) "a") (data (i32.const 183039) "a") (data (i32.const 183042) "a") (data (i32.const 183045) "a") (data (i32.const 183048) "a") (data (i32.const 183051) "a") (data (i32.const 183054) "a") (data (i32.const 183057) "a") (data (i32.const 183060) "a") (data (i32.const 183063) "a") (data (i32.const 183066) "a") (data (i32.const 183069) "a") (data (i32.const 183072) "a") (data (i32.const 183075) "a") (data (i32.const 183078) "a") (data (i32.const 183081) "a") (data (i32.const 183084) "a") (data (i32.const 183087) "a") (data (i32.const 183090) "a") (data (i32.const 183093) "a") (data (i32.const 183096) "a") (data (i32.const 183099) "a") (data (i32.const 183102) "a") (data (i32.const 183105) "a") (data (i32.const 183108) "a") (data (i32.const 183111) "a") (data (i32.const 183114) "a") (data (i32.const 183117) "a") (data (i32.const 183120) "a") (data (i32.const 183123) "a") (data (i32.const 183126) "a") (data (i32.const 183129) "a") (data (i32.const 183132) "a") (data (i32.const 183135) "a") (data (i32.const 183138) "a") (data (i32.const 183141) "a") (data (i32.const 183144) "a") (data (i32.const 183147) "a") (data (i32.const 183150) "a") (data (i32.const 183153) "a") (data (i32.const 183156) "a") (data (i32.const 183159) "a") (data (i32.const 183162) "a") (data (i32.const 183165) "a") (data (i32.const 183168) "a") (data (i32.const 183171) "a") (data (i32.const 183174) "a") (data (i32.const 183177) "a") (data (i32.const 183180) "a") (data (i32.const 183183) "a") (data (i32.const 183186) "a") (data (i32.const 183189) "a") (data (i32.const 183192) "a") (data (i32.const 183195) "a") (data (i32.const 183198) "a") (data (i32.const 183201) "a") (data (i32.const 183204) "a") (data (i32.const 183207) "a") (data (i32.const 183210) "a") (data (i32.const 183213) "a") (data (i32.const 183216) "a") (data (i32.const 183219) "a") (data (i32.const 183222) "a") (data (i32.const 183225) "a") (data (i32.const 183228) "a") (data (i32.const 183231) "a") (data (i32.const 183234) "a") (data (i32.const 183237) "a") (data (i32.const 183240) "a") (data (i32.const 183243) "a") (data (i32.const 183246) "a") (data (i32.const 183249) "a") (data (i32.const 183252) "a") (data (i32.const 183255) "a") (data (i32.const 183258) "a") (data (i32.const 183261) "a") (data (i32.const 183264) "a") (data (i32.const 183267) "a") (data (i32.const 183270) "a") (data (i32.const 183273) "a") (data (i32.const 183276) "a") (data (i32.const 183279) "a") (data (i32.const 183282) "a") (data (i32.const 183285) "a") (data (i32.const 183288) "a") (data (i32.const 183291) "a") (data (i32.const 183294) "a") (data (i32.const 183297) "a") (data (i32.const 183300) "a") (data (i32.const 183303) "a") (data (i32.const 183306) "a") (data (i32.const 183309) "a") (data (i32.const 183312) "a") (data (i32.const 183315) "a") (data (i32.const 183318) "a") (data (i32.const 183321) "a") (data (i32.const 183324) "a") (data (i32.const 183327) "a") (data (i32.const 183330) "a") (data (i32.const 183333) "a") (data (i32.const 183336) "a") (data (i32.const 183339) "a") (data (i32.const 183342) "a") (data (i32.const 183345) "a") (data (i32.const 183348) "a") (data (i32.const 183351) "a") (data (i32.const 183354) "a") (data (i32.const 183357) "a") (data (i32.const 183360) "a") (data (i32.const 183363) "a") (data (i32.const 183366) "a") (data (i32.const 183369) "a") (data (i32.const 183372) "a") (data (i32.const 183375) "a") (data (i32.const 183378) "a") (data (i32.const 183381) "a") (data (i32.const 183384) "a") (data (i32.const 183387) "a") (data (i32.const 183390) "a") (data (i32.const 183393) "a") (data (i32.const 183396) "a") (data (i32.const 183399) "a") (data (i32.const 183402) "a") (data (i32.const 183405) "a") (data (i32.const 183408) "a") (data (i32.const 183411) "a") (data (i32.const 183414) "a") (data (i32.const 183417) "a") (data (i32.const 183420) "a") (data (i32.const 183423) "a") (data (i32.const 183426) "a") (data (i32.const 183429) "a") (data (i32.const 183432) "a") (data (i32.const 183435) "a") (data (i32.const 183438) "a") (data (i32.const 183441) "a") (data (i32.const 183444) "a") (data (i32.const 183447) "a") (data (i32.const 183450) "a") (data (i32.const 183453) "a") (data (i32.const 183456) "a") (data (i32.const 183459) "a") (data (i32.const 183462) "a") (data (i32.const 183465) "a") (data (i32.const 183468) "a") (data (i32.const 183471) "a") (data (i32.const 183474) "a") (data (i32.const 183477) "a") (data (i32.const 183480) "a") (data (i32.const 183483) "a") (data (i32.const 183486) "a") (data (i32.const 183489) "a") (data (i32.const 183492) "a") (data (i32.const 183495) "a") (data (i32.const 183498) "a") (data (i32.const 183501) "a") (data (i32.const 183504) "a") (data (i32.const 183507) "a") (data (i32.const 183510) "a") (data (i32.const 183513) "a") (data (i32.const 183516) "a") (data (i32.const 183519) "a") (data (i32.const 183522) "a") (data (i32.const 183525) "a") (data (i32.const 183528) "a") (data (i32.const 183531) "a") (data (i32.const 183534) "a") (data (i32.const 183537) "a") (data (i32.const 183540) "a") (data (i32.const 183543) "a") (data (i32.const 183546) "a") (data (i32.const 183549) "a") (data (i32.const 183552) "a") (data (i32.const 183555) "a") (data (i32.const 183558) "a") (data (i32.const 183561) "a") (data (i32.const 183564) "a") (data (i32.const 183567) "a") (data (i32.const 183570) "a") (data (i32.const 183573) "a") (data (i32.const 183576) "a") (data (i32.const 183579) "a") (data (i32.const 183582) "a") (data (i32.const 183585) "a") (data (i32.const 183588) "a") (data (i32.const 183591) "a") (data (i32.const 183594) "a") (data (i32.const 183597) "a") (data (i32.const 183600) "a") (data (i32.const 183603) "a") (data (i32.const 183606) "a") (data (i32.const 183609) "a") (data (i32.const 183612) "a") (data (i32.const 183615) "a") (data (i32.const 183618) "a") (data (i32.const 183621) "a") (data (i32.const 183624) "a") (data (i32.const 183627) "a") (data (i32.const 183630) "a") (data (i32.const 183633) "a") (data (i32.const 183636) "a") (data (i32.const 183639) "a") (data (i32.const 183642) "a") (data (i32.const 183645) "a") (data (i32.const 183648) "a") (data (i32.const 183651) "a") (data (i32.const 183654) "a") (data (i32.const 183657) "a") (data (i32.const 183660) "a") (data (i32.const 183663) "a") (data (i32.const 183666) "a") (data (i32.const 183669) "a") (data (i32.const 183672) "a") (data (i32.const 183675) "a") (data (i32.const 183678) "a") (data (i32.const 183681) "a") (data (i32.const 183684) "a") (data (i32.const 183687) "a") (data (i32.const 183690) "a") (data (i32.const 183693) "a") (data (i32.const 183696) "a") (data (i32.const 183699) "a") (data (i32.const 183702) "a") (data (i32.const 183705) "a") (data (i32.const 183708) "a") (data (i32.const 183711) "a") (data (i32.const 183714) "a") (data (i32.const 183717) "a") (data (i32.const 183720) "a") (data (i32.const 183723) "a") (data (i32.const 183726) "a") (data (i32.const 183729) "a") (data (i32.const 183732) "a") (data (i32.const 183735) "a") (data (i32.const 183738) "a") (data (i32.const 183741) "a") (data (i32.const 183744) "a") (data (i32.const 183747) "a") (data (i32.const 183750) "a") (data (i32.const 183753) "a") (data (i32.const 183756) "a") (data (i32.const 183759) "a") (data (i32.const 183762) "a") (data (i32.const 183765) "a") (data (i32.const 183768) "a") (data (i32.const 183771) "a") (data (i32.const 183774) "a") (data (i32.const 183777) "a") (data (i32.const 183780) "a") (data (i32.const 183783) "a") (data (i32.const 183786) "a") (data (i32.const 183789) "a") (data (i32.const 183792) "a") (data (i32.const 183795) "a") (data (i32.const 183798) "a") (data (i32.const 183801) "a") (data (i32.const 183804) "a") (data (i32.const 183807) "a") (data (i32.const 183810) "a") (data (i32.const 183813) "a") (data (i32.const 183816) "a") (data (i32.const 183819) "a") (data (i32.const 183822) "a") (data (i32.const 183825) "a") (data (i32.const 183828) "a") (data (i32.const 183831) "a") (data (i32.const 183834) "a") (data (i32.const 183837) "a") (data (i32.const 183840) "a") (data (i32.const 183843) "a") (data (i32.const 183846) "a") (data (i32.const 183849) "a") (data (i32.const 183852) "a") (data (i32.const 183855) "a") (data (i32.const 183858) "a") (data (i32.const 183861) "a") (data (i32.const 183864) "a") (data (i32.const 183867) "a") (data (i32.const 183870) "a") (data (i32.const 183873) "a") (data (i32.const 183876) "a") (data (i32.const 183879) "a") (data (i32.const 183882) "a") (data (i32.const 183885) "a") (data (i32.const 183888) "a") (data (i32.const 183891) "a") (data (i32.const 183894) "a") (data (i32.const 183897) "a") (data (i32.const 183900) "a") (data (i32.const 183903) "a") (data (i32.const 183906) "a") (data (i32.const 183909) "a") (data (i32.const 183912) "a") (data (i32.const 183915) "a") (data (i32.const 183918) "a") (data (i32.const 183921) "a") (data (i32.const 183924) "a") (data (i32.const 183927) "a") (data (i32.const 183930) "a") (data (i32.const 183933) "a") (data (i32.const 183936) "a") (data (i32.const 183939) "a") (data (i32.const 183942) "a") (data (i32.const 183945) "a") (data (i32.const 183948) "a") (data (i32.const 183951) "a") (data (i32.const 183954) "a") (data (i32.const 183957) "a") (data (i32.const 183960) "a") (data (i32.const 183963) "a") (data (i32.const 183966) "a") (data (i32.const 183969) "a") (data (i32.const 183972) "a") (data (i32.const 183975) "a") (data (i32.const 183978) "a") (data (i32.const 183981) "a") (data (i32.const 183984) "a") (data (i32.const 183987) "a") (data (i32.const 183990) "a") (data (i32.const 183993) "a") (data (i32.const 183996) "a") (data (i32.const 183999) "a") (data (i32.const 184002) "a") (data (i32.const 184005) "a") (data (i32.const 184008) "a") (data (i32.const 184011) "a") (data (i32.const 184014) "a") (data (i32.const 184017) "a") (data (i32.const 184020) "a") (data (i32.const 184023) "a") (data (i32.const 184026) "a") (data (i32.const 184029) "a") (data (i32.const 184032) "a") (data (i32.const 184035) "a") (data (i32.const 184038) "a") (data (i32.const 184041) "a") (data (i32.const 184044) "a") (data (i32.const 184047) "a") (data (i32.const 184050) "a") (data (i32.const 184053) "a") (data (i32.const 184056) "a") (data (i32.const 184059) "a") (data (i32.const 184062) "a") (data (i32.const 184065) "a") (data (i32.const 184068) "a") (data (i32.const 184071) "a") (data (i32.const 184074) "a") (data (i32.const 184077) "a") (data (i32.const 184080) "a") (data (i32.const 184083) "a") (data (i32.const 184086) "a") (data (i32.const 184089) "a") (data (i32.const 184092) "a") (data (i32.const 184095) "a") (data (i32.const 184098) "a") (data (i32.const 184101) "a") (data (i32.const 184104) "a") (data (i32.const 184107) "a") (data (i32.const 184110) "a") (data (i32.const 184113) "a") (data (i32.const 184116) "a") (data (i32.const 184119) "a") (data (i32.const 184122) "a") (data (i32.const 184125) "a") (data (i32.const 184128) "a") (data (i32.const 184131) "a") (data (i32.const 184134) "a") (data (i32.const 184137) "a") (data (i32.const 184140) "a") (data (i32.const 184143) "a") (data (i32.const 184146) "a") (data (i32.const 184149) "a") (data (i32.const 184152) "a") (data (i32.const 184155) "a") (data (i32.const 184158) "a") (data (i32.const 184161) "a") (data (i32.const 184164) "a") (data (i32.const 184167) "a") (data (i32.const 184170) "a") (data (i32.const 184173) "a") (data (i32.const 184176) "a") (data (i32.const 184179) "a") (data (i32.const 184182) "a") (data (i32.const 184185) "a") (data (i32.const 184188) "a") (data (i32.const 184191) "a") (data (i32.const 184194) "a") (data (i32.const 184197) "a") (data (i32.const 184200) "a") (data (i32.const 184203) "a") (data (i32.const 184206) "a") (data (i32.const 184209) "a") (data (i32.const 184212) "a") (data (i32.const 184215) "a") (data (i32.const 184218) "a") (data (i32.const 184221) "a") (data (i32.const 184224) "a") (data (i32.const 184227) "a") (data (i32.const 184230) "a") (data (i32.const 184233) "a") (data (i32.const 184236) "a") (data (i32.const 184239) "a") (data (i32.const 184242) "a") (data (i32.const 184245) "a") (data (i32.const 184248) "a") (data (i32.const 184251) "a") (data (i32.const 184254) "a") (data (i32.const 184257) "a") (data (i32.const 184260) "a") (data (i32.const 184263) "a") (data (i32.const 184266) "a") (data (i32.const 184269) "a") (data (i32.const 184272) "a") (data (i32.const 184275) "a") (data (i32.const 184278) "a") (data (i32.const 184281) "a") (data (i32.const 184284) "a") (data (i32.const 184287) "a") (data (i32.const 184290) "a") (data (i32.const 184293) "a") (data (i32.const 184296) "a") (data (i32.const 184299) "a") (data (i32.const 184302) "a") (data (i32.const 184305) "a") (data (i32.const 184308) "a") (data (i32.const 184311) "a") (data (i32.const 184314) "a") (data (i32.const 184317) "a") (data (i32.const 184320) "a") (data (i32.const 184323) "a") (data (i32.const 184326) "a") (data (i32.const 184329) "a") (data (i32.const 184332) "a") (data (i32.const 184335) "a") (data (i32.const 184338) "a") (data (i32.const 184341) "a") (data (i32.const 184344) "a") (data (i32.const 184347) "a") (data (i32.const 184350) "a") (data (i32.const 184353) "a") (data (i32.const 184356) "a") (data (i32.const 184359) "a") (data (i32.const 184362) "a") (data (i32.const 184365) "a") (data (i32.const 184368) "a") (data (i32.const 184371) "a") (data (i32.const 184374) "a") (data (i32.const 184377) "a") (data (i32.const 184380) "a") (data (i32.const 184383) "a") (data (i32.const 184386) "a") (data (i32.const 184389) "a") (data (i32.const 184392) "a") (data (i32.const 184395) "a") (data (i32.const 184398) "a") (data (i32.const 184401) "a") (data (i32.const 184404) "a") (data (i32.const 184407) "a") (data (i32.const 184410) "a") (data (i32.const 184413) "a") (data (i32.const 184416) "a") (data (i32.const 184419) "a") (data (i32.const 184422) "a") (data (i32.const 184425) "a") (data (i32.const 184428) "a") (data (i32.const 184431) "a") (data (i32.const 184434) "a") (data (i32.const 184437) "a") (data (i32.const 184440) "a") (data (i32.const 184443) "a") (data (i32.const 184446) "a") (data (i32.const 184449) "a") (data (i32.const 184452) "a") (data (i32.const 184455) "a") (data (i32.const 184458) "a") (data (i32.const 184461) "a") (data (i32.const 184464) "a") (data (i32.const 184467) "a") (data (i32.const 184470) "a") (data (i32.const 184473) "a") (data (i32.const 184476) "a") (data (i32.const 184479) "a") (data (i32.const 184482) "a") (data (i32.const 184485) "a") (data (i32.const 184488) "a") (data (i32.const 184491) "a") (data (i32.const 184494) "a") (data (i32.const 184497) "a") (data (i32.const 184500) "a") (data (i32.const 184503) "a") (data (i32.const 184506) "a") (data (i32.const 184509) "a") (data (i32.const 184512) "a") (data (i32.const 184515) "a") (data (i32.const 184518) "a") (data (i32.const 184521) "a") (data (i32.const 184524) "a") (data (i32.const 184527) "a") (data (i32.const 184530) "a") (data (i32.const 184533) "a") (data (i32.const 184536) "a") (data (i32.const 184539) "a") (data (i32.const 184542) "a") (data (i32.const 184545) "a") (data (i32.const 184548) "a") (data (i32.const 184551) "a") (data (i32.const 184554) "a") (data (i32.const 184557) "a") (data (i32.const 184560) "a") (data (i32.const 184563) "a") (data (i32.const 184566) "a") (data (i32.const 184569) "a") (data (i32.const 184572) "a") (data (i32.const 184575) "a") (data (i32.const 184578) "a") (data (i32.const 184581) "a") (data (i32.const 184584) "a") (data (i32.const 184587) "a") (data (i32.const 184590) "a") (data (i32.const 184593) "a") (data (i32.const 184596) "a") (data (i32.const 184599) "a") (data (i32.const 184602) "a") (data (i32.const 184605) "a") (data (i32.const 184608) "a") (data (i32.const 184611) "a") (data (i32.const 184614) "a") (data (i32.const 184617) "a") (data (i32.const 184620) "a") (data (i32.const 184623) "a") (data (i32.const 184626) "a") (data (i32.const 184629) "a") (data (i32.const 184632) "a") (data (i32.const 184635) "a") (data (i32.const 184638) "a") (data (i32.const 184641) "a") (data (i32.const 184644) "a") (data (i32.const 184647) "a") (data (i32.const 184650) "a") (data (i32.const 184653) "a") (data (i32.const 184656) "a") (data (i32.const 184659) "a") (data (i32.const 184662) "a") (data (i32.const 184665) "a") (data (i32.const 184668) "a") (data (i32.const 184671) "a") (data (i32.const 184674) "a") (data (i32.const 184677) "a") (data (i32.const 184680) "a") (data (i32.const 184683) "a") (data (i32.const 184686) "a") (data (i32.const 184689) "a") (data (i32.const 184692) "a") (data (i32.const 184695) "a") (data (i32.const 184698) "a") (data (i32.const 184701) "a") (data (i32.const 184704) "a") (data (i32.const 184707) "a") (data (i32.const 184710) "a") (data (i32.const 184713) "a") (data (i32.const 184716) "a") (data (i32.const 184719) "a") (data (i32.const 184722) "a") (data (i32.const 184725) "a") (data (i32.const 184728) "a") (data (i32.const 184731) "a") (data (i32.const 184734) "a") (data (i32.const 184737) "a") (data (i32.const 184740) "a") (data (i32.const 184743) "a") (data (i32.const 184746) "a") (data (i32.const 184749) "a") (data (i32.const 184752) "a") (data (i32.const 184755) "a") (data (i32.const 184758) "a") (data (i32.const 184761) "a") (data (i32.const 184764) "a") (data (i32.const 184767) "a") (data (i32.const 184770) "a") (data (i32.const 184773) "a") (data (i32.const 184776) "a") (data (i32.const 184779) "a") (data (i32.const 184782) "a") (data (i32.const 184785) "a") (data (i32.const 184788) "a") (data (i32.const 184791) "a") (data (i32.const 184794) "a") (data (i32.const 184797) "a") (data (i32.const 184800) "a") (data (i32.const 184803) "a") (data (i32.const 184806) "a") (data (i32.const 184809) "a") (data (i32.const 184812) "a") (data (i32.const 184815) "a") (data (i32.const 184818) "a") (data (i32.const 184821) "a") (data (i32.const 184824) "a") (data (i32.const 184827) "a") (data (i32.const 184830) "a") (data (i32.const 184833) "a") (data (i32.const 184836) "a") (data (i32.const 184839) "a") (data (i32.const 184842) "a") (data (i32.const 184845) "a") (data (i32.const 184848) "a") (data (i32.const 184851) "a") (data (i32.const 184854) "a") (data (i32.const 184857) "a") (data (i32.const 184860) "a") (data (i32.const 184863) "a") (data (i32.const 184866) "a") (data (i32.const 184869) "a") (data (i32.const 184872) "a") (data (i32.const 184875) "a") (data (i32.const 184878) "a") (data (i32.const 184881) "a") (data (i32.const 184884) "a") (data (i32.const 184887) "a") (data (i32.const 184890) "a") (data (i32.const 184893) "a") (data (i32.const 184896) "a") (data (i32.const 184899) "a") (data (i32.const 184902) "a") (data (i32.const 184905) "a") (data (i32.const 184908) "a") (data (i32.const 184911) "a") (data (i32.const 184914) "a") (data (i32.const 184917) "a") (data (i32.const 184920) "a") (data (i32.const 184923) "a") (data (i32.const 184926) "a") (data (i32.const 184929) "a") (data (i32.const 184932) "a") (data (i32.const 184935) "a") (data (i32.const 184938) "a") (data (i32.const 184941) "a") (data (i32.const 184944) "a") (data (i32.const 184947) "a") (data (i32.const 184950) "a") (data (i32.const 184953) "a") (data (i32.const 184956) "a") (data (i32.const 184959) "a") (data (i32.const 184962) "a") (data (i32.const 184965) "a") (data (i32.const 184968) "a") (data (i32.const 184971) "a") (data (i32.const 184974) "a") (data (i32.const 184977) "a") (data (i32.const 184980) "a") (data (i32.const 184983) "a") (data (i32.const 184986) "a") (data (i32.const 184989) "a") (data (i32.const 184992) "a") (data (i32.const 184995) "a") (data (i32.const 184998) "a") (data (i32.const 185001) "a") (data (i32.const 185004) "a") (data (i32.const 185007) "a") (data (i32.const 185010) "a") (data (i32.const 185013) "a") (data (i32.const 185016) "a") (data (i32.const 185019) "a") (data (i32.const 185022) "a") (data (i32.const 185025) "a") (data (i32.const 185028) "a") (data (i32.const 185031) "a") (data (i32.const 185034) "a") (data (i32.const 185037) "a") (data (i32.const 185040) "a") (data (i32.const 185043) "a") (data (i32.const 185046) "a") (data (i32.const 185049) "a") (data (i32.const 185052) "a") (data (i32.const 185055) "a") (data (i32.const 185058) "a") (data (i32.const 185061) "a") (data (i32.const 185064) "a") (data (i32.const 185067) "a") (data (i32.const 185070) "a") (data (i32.const 185073) "a") (data (i32.const 185076) "a") (data (i32.const 185079) "a") (data (i32.const 185082) "a") (data (i32.const 185085) "a") (data (i32.const 185088) "a") (data (i32.const 185091) "a") (data (i32.const 185094) "a") (data (i32.const 185097) "a") (data (i32.const 185100) "a") (data (i32.const 185103) "a") (data (i32.const 185106) "a") (data (i32.const 185109) "a") (data (i32.const 185112) "a") (data (i32.const 185115) "a") (data (i32.const 185118) "a") (data (i32.const 185121) "a") (data (i32.const 185124) "a") (data (i32.const 185127) "a") (data (i32.const 185130) "a") (data (i32.const 185133) "a") (data (i32.const 185136) "a") (data (i32.const 185139) "a") (data (i32.const 185142) "a") (data (i32.const 185145) "a") (data (i32.const 185148) "a") (data (i32.const 185151) "a") (data (i32.const 185154) "a") (data (i32.const 185157) "a") (data (i32.const 185160) "a") (data (i32.const 185163) "a") (data (i32.const 185166) "a") (data (i32.const 185169) "a") (data (i32.const 185172) "a") (data (i32.const 185175) "a") (data (i32.const 185178) "a") (data (i32.const 185181) "a") (data (i32.const 185184) "a") (data (i32.const 185187) "a") (data (i32.const 185190) "a") (data (i32.const 185193) "a") (data (i32.const 185196) "a") (data (i32.const 185199) "a") (data (i32.const 185202) "a") (data (i32.const 185205) "a") (data (i32.const 185208) "a") (data (i32.const 185211) "a") (data (i32.const 185214) "a") (data (i32.const 185217) "a") (data (i32.const 185220) "a") (data (i32.const 185223) "a") (data (i32.const 185226) "a") (data (i32.const 185229) "a") (data (i32.const 185232) "a") (data (i32.const 185235) "a") (data (i32.const 185238) "a") (data (i32.const 185241) "a") (data (i32.const 185244) "a") (data (i32.const 185247) "a") (data (i32.const 185250) "a") (data (i32.const 185253) "a") (data (i32.const 185256) "a") (data (i32.const 185259) "a") (data (i32.const 185262) "a") (data (i32.const 185265) "a") (data (i32.const 185268) "a") (data (i32.const 185271) "a") (data (i32.const 185274) "a") (data (i32.const 185277) "a") (data (i32.const 185280) "a") (data (i32.const 185283) "a") (data (i32.const 185286) "a") (data (i32.const 185289) "a") (data (i32.const 185292) "a") (data (i32.const 185295) "a") (data (i32.const 185298) "a") (data (i32.const 185301) "a") (data (i32.const 185304) "a") (data (i32.const 185307) "a") (data (i32.const 185310) "a") (data (i32.const 185313) "a") (data (i32.const 185316) "a") (data (i32.const 185319) "a") (data (i32.const 185322) "a") (data (i32.const 185325) "a") (data (i32.const 185328) "a") (data (i32.const 185331) "a") (data (i32.const 185334) "a") (data (i32.const 185337) "a") (data (i32.const 185340) "a") (data (i32.const 185343) "a") (data (i32.const 185346) "a") (data (i32.const 185349) "a") (data (i32.const 185352) "a") (data (i32.const 185355) "a") (data (i32.const 185358) "a") (data (i32.const 185361) "a") (data (i32.const 185364) "a") (data (i32.const 185367) "a") (data (i32.const 185370) "a") (data (i32.const 185373) "a") (data (i32.const 185376) "a") (data (i32.const 185379) "a") (data (i32.const 185382) "a") (data (i32.const 185385) "a") (data (i32.const 185388) "a") (data (i32.const 185391) "a") (data (i32.const 185394) "a") (data (i32.const 185397) "a") (data (i32.const 185400) "a") (data (i32.const 185403) "a") (data (i32.const 185406) "a") (data (i32.const 185409) "a") (data (i32.const 185412) "a") (data (i32.const 185415) "a") (data (i32.const 185418) "a") (data (i32.const 185421) "a") (data (i32.const 185424) "a") (data (i32.const 185427) "a") (data (i32.const 185430) "a") (data (i32.const 185433) "a") (data (i32.const 185436) "a") (data (i32.const 185439) "a") (data (i32.const 185442) "a") (data (i32.const 185445) "a") (data (i32.const 185448) "a") (data (i32.const 185451) "a") (data (i32.const 185454) "a") (data (i32.const 185457) "a") (data (i32.const 185460) "a") (data (i32.const 185463) "a") (data (i32.const 185466) "a") (data (i32.const 185469) "a") (data (i32.const 185472) "a") (data (i32.const 185475) "a") (data (i32.const 185478) "a") (data (i32.const 185481) "a") (data (i32.const 185484) "a") (data (i32.const 185487) "a") (data (i32.const 185490) "a") (data (i32.const 185493) "a") (data (i32.const 185496) "a") (data (i32.const 185499) "a") (data (i32.const 185502) "a") (data (i32.const 185505) "a") (data (i32.const 185508) "a") (data (i32.const 185511) "a") (data (i32.const 185514) "a") (data (i32.const 185517) "a") (data (i32.const 185520) "a") (data (i32.const 185523) "a") (data (i32.const 185526) "a") (data (i32.const 185529) "a") (data (i32.const 185532) "a") (data (i32.const 185535) "a") (data (i32.const 185538) "a") (data (i32.const 185541) "a") (data (i32.const 185544) "a") (data (i32.const 185547) "a") (data (i32.const 185550) "a") (data (i32.const 185553) "a") (data (i32.const 185556) "a") (data (i32.const 185559) "a") (data (i32.const 185562) "a") (data (i32.const 185565) "a") (data (i32.const 185568) "a") (data (i32.const 185571) "a") (data (i32.const 185574) "a") (data (i32.const 185577) "a") (data (i32.const 185580) "a") (data (i32.const 185583) "a") (data (i32.const 185586) "a") (data (i32.const 185589) "a") (data (i32.const 185592) "a") (data (i32.const 185595) "a") (data (i32.const 185598) "a") (data (i32.const 185601) "a") (data (i32.const 185604) "a") (data (i32.const 185607) "a") (data (i32.const 185610) "a") (data (i32.const 185613) "a") (data (i32.const 185616) "a") (data (i32.const 185619) "a") (data (i32.const 185622) "a") (data (i32.const 185625) "a") (data (i32.const 185628) "a") (data (i32.const 185631) "a") (data (i32.const 185634) "a") (data (i32.const 185637) "a") (data (i32.const 185640) "a") (data (i32.const 185643) "a") (data (i32.const 185646) "a") (data (i32.const 185649) "a") (data (i32.const 185652) "a") (data (i32.const 185655) "a") (data (i32.const 185658) "a") (data (i32.const 185661) "a") (data (i32.const 185664) "a") (data (i32.const 185667) "a") (data (i32.const 185670) "a") (data (i32.const 185673) "a") (data (i32.const 185676) "a") (data (i32.const 185679) "a") (data (i32.const 185682) "a") (data (i32.const 185685) "a") (data (i32.const 185688) "a") (data (i32.const 185691) "a") (data (i32.const 185694) "a") (data (i32.const 185697) "a") (data (i32.const 185700) "a") (data (i32.const 185703) "a") (data (i32.const 185706) "a") (data (i32.const 185709) "a") (data (i32.const 185712) "a") (data (i32.const 185715) "a") (data (i32.const 185718) "a") (data (i32.const 185721) "a") (data (i32.const 185724) "a") (data (i32.const 185727) "a") (data (i32.const 185730) "a") (data (i32.const 185733) "a") (data (i32.const 185736) "a") (data (i32.const 185739) "a") (data (i32.const 185742) "a") (data (i32.const 185745) "a") (data (i32.const 185748) "a") (data (i32.const 185751) "a") (data (i32.const 185754) "a") (data (i32.const 185757) "a") (data (i32.const 185760) "a") (data (i32.const 185763) "a") (data (i32.const 185766) "a") (data (i32.const 185769) "a") (data (i32.const 185772) "a") (data (i32.const 185775) "a") (data (i32.const 185778) "a") (data (i32.const 185781) "a") (data (i32.const 185784) "a") (data (i32.const 185787) "a") (data (i32.const 185790) "a") (data (i32.const 185793) "a") (data (i32.const 185796) "a") (data (i32.const 185799) "a") (data (i32.const 185802) "a") (data (i32.const 185805) "a") (data (i32.const 185808) "a") (data (i32.const 185811) "a") (data (i32.const 185814) "a") (data (i32.const 185817) "a") (data (i32.const 185820) "a") (data (i32.const 185823) "a") (data (i32.const 185826) "a") (data (i32.const 185829) "a") (data (i32.const 185832) "a") (data (i32.const 185835) "a") (data (i32.const 185838) "a") (data (i32.const 185841) "a") (data (i32.const 185844) "a") (data (i32.const 185847) "a") (data (i32.const 185850) "a") (data (i32.const 185853) "a") (data (i32.const 185856) "a") (data (i32.const 185859) "a") (data (i32.const 185862) "a") (data (i32.const 185865) "a") (data (i32.const 185868) "a") (data (i32.const 185871) "a") (data (i32.const 185874) "a") (data (i32.const 185877) "a") (data (i32.const 185880) "a") (data (i32.const 185883) "a") (data (i32.const 185886) "a") (data (i32.const 185889) "a") (data (i32.const 185892) "a") (data (i32.const 185895) "a") (data (i32.const 185898) "a") (data (i32.const 185901) "a") (data (i32.const 185904) "a") (data (i32.const 185907) "a") (data (i32.const 185910) "a") (data (i32.const 185913) "a") (data (i32.const 185916) "a") (data (i32.const 185919) "a") (data (i32.const 185922) "a") (data (i32.const 185925) "a") (data (i32.const 185928) "a") (data (i32.const 185931) "a") (data (i32.const 185934) "a") (data (i32.const 185937) "a") (data (i32.const 185940) "a") (data (i32.const 185943) "a") (data (i32.const 185946) "a") (data (i32.const 185949) "a") (data (i32.const 185952) "a") (data (i32.const 185955) "a") (data (i32.const 185958) "a") (data (i32.const 185961) "a") (data (i32.const 185964) "a") (data (i32.const 185967) "a") (data (i32.const 185970) "a") (data (i32.const 185973) "a") (data (i32.const 185976) "a") (data (i32.const 185979) "a") (data (i32.const 185982) "a") (data (i32.const 185985) "a") (data (i32.const 185988) "a") (data (i32.const 185991) "a") (data (i32.const 185994) "a") (data (i32.const 185997) "a") (data (i32.const 186000) "a") (data (i32.const 186003) "a") (data (i32.const 186006) "a") (data (i32.const 186009) "a") (data (i32.const 186012) "a") (data (i32.const 186015) "a") (data (i32.const 186018) "a") (data (i32.const 186021) "a") (data (i32.const 186024) "a") (data (i32.const 186027) "a") (data (i32.const 186030) "a") (data (i32.const 186033) "a") (data (i32.const 186036) "a") (data (i32.const 186039) "a") (data (i32.const 186042) "a") (data (i32.const 186045) "a") (data (i32.const 186048) "a") (data (i32.const 186051) "a") (data (i32.const 186054) "a") (data (i32.const 186057) "a") (data (i32.const 186060) "a") (data (i32.const 186063) "a") (data (i32.const 186066) "a") (data (i32.const 186069) "a") (data (i32.const 186072) "a") (data (i32.const 186075) "a") (data (i32.const 186078) "a") (data (i32.const 186081) "a") (data (i32.const 186084) "a") (data (i32.const 186087) "a") (data (i32.const 186090) "a") (data (i32.const 186093) "a") (data (i32.const 186096) "a") (data (i32.const 186099) "a") (data (i32.const 186102) "a") (data (i32.const 186105) "a") (data (i32.const 186108) "a") (data (i32.const 186111) "a") (data (i32.const 186114) "a") (data (i32.const 186117) "a") (data (i32.const 186120) "a") (data (i32.const 186123) "a") (data (i32.const 186126) "a") (data (i32.const 186129) "a") (data (i32.const 186132) "a") (data (i32.const 186135) "a") (data (i32.const 186138) "a") (data (i32.const 186141) "a") (data (i32.const 186144) "a") (data (i32.const 186147) "a") (data (i32.const 186150) "a") (data (i32.const 186153) "a") (data (i32.const 186156) "a") (data (i32.const 186159) "a") (data (i32.const 186162) "a") (data (i32.const 186165) "a") (data (i32.const 186168) "a") (data (i32.const 186171) "a") (data (i32.const 186174) "a") (data (i32.const 186177) "a") (data (i32.const 186180) "a") (data (i32.const 186183) "a") (data (i32.const 186186) "a") (data (i32.const 186189) "a") (data (i32.const 186192) "a") (data (i32.const 186195) "a") (data (i32.const 186198) "a") (data (i32.const 186201) "a") (data (i32.const 186204) "a") (data (i32.const 186207) "a") (data (i32.const 186210) "a") (data (i32.const 186213) "a") (data (i32.const 186216) "a") (data (i32.const 186219) "a") (data (i32.const 186222) "a") (data (i32.const 186225) "a") (data (i32.const 186228) "a") (data (i32.const 186231) "a") (data (i32.const 186234) "a") (data (i32.const 186237) "a") (data (i32.const 186240) "a") (data (i32.const 186243) "a") (data (i32.const 186246) "a") (data (i32.const 186249) "a") (data (i32.const 186252) "a") (data (i32.const 186255) "a") (data (i32.const 186258) "a") (data (i32.const 186261) "a") (data (i32.const 186264) "a") (data (i32.const 186267) "a") (data (i32.const 186270) "a") (data (i32.const 186273) "a") (data (i32.const 186276) "a") (data (i32.const 186279) "a") (data (i32.const 186282) "a") (data (i32.const 186285) "a") (data (i32.const 186288) "a") (data (i32.const 186291) "a") (data (i32.const 186294) "a") (data (i32.const 186297) "a") (data (i32.const 186300) "a") (data (i32.const 186303) "a") (data (i32.const 186306) "a") (data (i32.const 186309) "a") (data (i32.const 186312) "a") (data (i32.const 186315) "a") (data (i32.const 186318) "a") (data (i32.const 186321) "a") (data (i32.const 186324) "a") (data (i32.const 186327) "a") (data (i32.const 186330) "a") (data (i32.const 186333) "a") (data (i32.const 186336) "a") (data (i32.const 186339) "a") (data (i32.const 186342) "a") (data (i32.const 186345) "a") (data (i32.const 186348) "a") (data (i32.const 186351) "a") (data (i32.const 186354) "a") (data (i32.const 186357) "a") (data (i32.const 186360) "a") (data (i32.const 186363) "a") (data (i32.const 186366) "a") (data (i32.const 186369) "a") (data (i32.const 186372) "a") (data (i32.const 186375) "a") (data (i32.const 186378) "a") (data (i32.const 186381) "a") (data (i32.const 186384) "a") (data (i32.const 186387) "a") (data (i32.const 186390) "a") (data (i32.const 186393) "a") (data (i32.const 186396) "a") (data (i32.const 186399) "a") (data (i32.const 186402) "a") (data (i32.const 186405) "a") (data (i32.const 186408) "a") (data (i32.const 186411) "a") (data (i32.const 186414) "a") (data (i32.const 186417) "a") (data (i32.const 186420) "a") (data (i32.const 186423) "a") (data (i32.const 186426) "a") (data (i32.const 186429) "a") (data (i32.const 186432) "a") (data (i32.const 186435) "a") (data (i32.const 186438) "a") (data (i32.const 186441) "a") (data (i32.const 186444) "a") (data (i32.const 186447) "a") (data (i32.const 186450) "a") (data (i32.const 186453) "a") (data (i32.const 186456) "a") (data (i32.const 186459) "a") (data (i32.const 186462) "a") (data (i32.const 186465) "a") (data (i32.const 186468) "a") (data (i32.const 186471) "a") (data (i32.const 186474) "a") (data (i32.const 186477) "a") (data (i32.const 186480) "a") (data (i32.const 186483) "a") (data (i32.const 186486) "a") (data (i32.const 186489) "a") (data (i32.const 186492) "a") (data (i32.const 186495) "a") (data (i32.const 186498) "a") (data (i32.const 186501) "a") (data (i32.const 186504) "a") (data (i32.const 186507) "a") (data (i32.const 186510) "a") (data (i32.const 186513) "a") (data (i32.const 186516) "a") (data (i32.const 186519) "a") (data (i32.const 186522) "a") (data (i32.const 186525) "a") (data (i32.const 186528) "a") (data (i32.const 186531) "a") (data (i32.const 186534) "a") (data (i32.const 186537) "a") (data (i32.const 186540) "a") (data (i32.const 186543) "a") (data (i32.const 186546) "a") (data (i32.const 186549) "a") (data (i32.const 186552) "a") (data (i32.const 186555) "a") (data (i32.const 186558) "a") (data (i32.const 186561) "a") (data (i32.const 186564) "a") (data (i32.const 186567) "a") (data (i32.const 186570) "a") (data (i32.const 186573) "a") (data (i32.const 186576) "a") (data (i32.const 186579) "a") (data (i32.const 186582) "a") (data (i32.const 186585) "a") (data (i32.const 186588) "a") (data (i32.const 186591) "a") (data (i32.const 186594) "a") (data (i32.const 186597) "a") (data (i32.const 186600) "a") (data (i32.const 186603) "a") (data (i32.const 186606) "a") (data (i32.const 186609) "a") (data (i32.const 186612) "a") (data (i32.const 186615) "a") (data (i32.const 186618) "a") (data (i32.const 186621) "a") (data (i32.const 186624) "a") (data (i32.const 186627) "a") (data (i32.const 186630) "a") (data (i32.const 186633) "a") (data (i32.const 186636) "a") (data (i32.const 186639) "a") (data (i32.const 186642) "a") (data (i32.const 186645) "a") (data (i32.const 186648) "a") (data (i32.const 186651) "a") (data (i32.const 186654) "a") (data (i32.const 186657) "a") (data (i32.const 186660) "a") (data (i32.const 186663) "a") (data (i32.const 186666) "a") (data (i32.const 186669) "a") (data (i32.const 186672) "a") (data (i32.const 186675) "a") (data (i32.const 186678) "a") (data (i32.const 186681) "a") (data (i32.const 186684) "a") (data (i32.const 186687) "a") (data (i32.const 186690) "a") (data (i32.const 186693) "a") (data (i32.const 186696) "a") (data (i32.const 186699) "a") (data (i32.const 186702) "a") (data (i32.const 186705) "a") (data (i32.const 186708) "a") (data (i32.const 186711) "a") (data (i32.const 186714) "a") (data (i32.const 186717) "a") (data (i32.const 186720) "a") (data (i32.const 186723) "a") (data (i32.const 186726) "a") (data (i32.const 186729) "a") (data (i32.const 186732) "a") (data (i32.const 186735) "a") (data (i32.const 186738) "a") (data (i32.const 186741) "a") (data (i32.const 186744) "a") (data (i32.const 186747) "a") (data (i32.const 186750) "a") (data (i32.const 186753) "a") (data (i32.const 186756) "a") (data (i32.const 186759) "a") (data (i32.const 186762) "a") (data (i32.const 186765) "a") (data (i32.const 186768) "a") (data (i32.const 186771) "a") (data (i32.const 186774) "a") (data (i32.const 186777) "a") (data (i32.const 186780) "a") (data (i32.const 186783) "a") (data (i32.const 186786) "a") (data (i32.const 186789) "a") (data (i32.const 186792) "a") (data (i32.const 186795) "a") (data (i32.const 186798) "a") (data (i32.const 186801) "a") (data (i32.const 186804) "a") (data (i32.const 186807) "a") (data (i32.const 186810) "a") (data (i32.const 186813) "a") (data (i32.const 186816) "a") (data (i32.const 186819) "a") (data (i32.const 186822) "a") (data (i32.const 186825) "a") (data (i32.const 186828) "a") (data (i32.const 186831) "a") (data (i32.const 186834) "a") (data (i32.const 186837) "a") (data (i32.const 186840) "a") (data (i32.const 186843) "a") (data (i32.const 186846) "a") (data (i32.const 186849) "a") (data (i32.const 186852) "a") (data (i32.const 186855) "a") (data (i32.const 186858) "a") (data (i32.const 186861) "a") (data (i32.const 186864) "a") (data (i32.const 186867) "a") (data (i32.const 186870) "a") (data (i32.const 186873) "a") (data (i32.const 186876) "a") (data (i32.const 186879) "a") (data (i32.const 186882) "a") (data (i32.const 186885) "a") (data (i32.const 186888) "a") (data (i32.const 186891) "a") (data (i32.const 186894) "a") (data (i32.const 186897) "a") (data (i32.const 186900) "a") (data (i32.const 186903) "a") (data (i32.const 186906) "a") (data (i32.const 186909) "a") (data (i32.const 186912) "a") (data (i32.const 186915) "a") (data (i32.const 186918) "a") (data (i32.const 186921) "a") (data (i32.const 186924) "a") (data (i32.const 186927) "a") (data (i32.const 186930) "a") (data (i32.const 186933) "a") (data (i32.const 186936) "a") (data (i32.const 186939) "a") (data (i32.const 186942) "a") (data (i32.const 186945) "a") (data (i32.const 186948) "a") (data (i32.const 186951) "a") (data (i32.const 186954) "a") (data (i32.const 186957) "a") (data (i32.const 186960) "a") (data (i32.const 186963) "a") (data (i32.const 186966) "a") (data (i32.const 186969) "a") (data (i32.const 186972) "a") (data (i32.const 186975) "a") (data (i32.const 186978) "a") (data (i32.const 186981) "a") (data (i32.const 186984) "a") (data (i32.const 186987) "a") (data (i32.const 186990) "a") (data (i32.const 186993) "a") (data (i32.const 186996) "a") (data (i32.const 186999) "a") (data (i32.const 187002) "a") (data (i32.const 187005) "a") (data (i32.const 187008) "a") (data (i32.const 187011) "a") (data (i32.const 187014) "a") (data (i32.const 187017) "a") (data (i32.const 187020) "a") (data (i32.const 187023) "a") (data (i32.const 187026) "a") (data (i32.const 187029) "a") (data (i32.const 187032) "a") (data (i32.const 187035) "a") (data (i32.const 187038) "a") (data (i32.const 187041) "a") (data (i32.const 187044) "a") (data (i32.const 187047) "a") (data (i32.const 187050) "a") (data (i32.const 187053) "a") (data (i32.const 187056) "a") (data (i32.const 187059) "a") (data (i32.const 187062) "a") (data (i32.const 187065) "a") (data (i32.const 187068) "a") (data (i32.const 187071) "a") (data (i32.const 187074) "a") (data (i32.const 187077) "a") (data (i32.const 187080) "a") (data (i32.const 187083) "a") (data (i32.const 187086) "a") (data (i32.const 187089) "a") (data (i32.const 187092) "a") (data (i32.const 187095) "a") (data (i32.const 187098) "a") (data (i32.const 187101) "a") (data (i32.const 187104) "a") (data (i32.const 187107) "a") (data (i32.const 187110) "a") (data (i32.const 187113) "a") (data (i32.const 187116) "a") (data (i32.const 187119) "a") (data (i32.const 187122) "a") (data (i32.const 187125) "a") (data (i32.const 187128) "a") (data (i32.const 187131) "a") (data (i32.const 187134) "a") (data (i32.const 187137) "a") (data (i32.const 187140) "a") (data (i32.const 187143) "a") (data (i32.const 187146) "a") (data (i32.const 187149) "a") (data (i32.const 187152) "a") (data (i32.const 187155) "a") (data (i32.const 187158) "a") (data (i32.const 187161) "a") (data (i32.const 187164) "a") (data (i32.const 187167) "a") (data (i32.const 187170) "a") (data (i32.const 187173) "a") (data (i32.const 187176) "a") (data (i32.const 187179) "a") (data (i32.const 187182) "a") (data (i32.const 187185) "a") (data (i32.const 187188) "a") (data (i32.const 187191) "a") (data (i32.const 187194) "a") (data (i32.const 187197) "a") (data (i32.const 187200) "a") (data (i32.const 187203) "a") (data (i32.const 187206) "a") (data (i32.const 187209) "a") (data (i32.const 187212) "a") (data (i32.const 187215) "a") (data (i32.const 187218) "a") (data (i32.const 187221) "a") (data (i32.const 187224) "a") (data (i32.const 187227) "a") (data (i32.const 187230) "a") (data (i32.const 187233) "a") (data (i32.const 187236) "a") (data (i32.const 187239) "a") (data (i32.const 187242) "a") (data (i32.const 187245) "a") (data (i32.const 187248) "a") (data (i32.const 187251) "a") (data (i32.const 187254) "a") (data (i32.const 187257) "a") (data (i32.const 187260) "a") (data (i32.const 187263) "a") (data (i32.const 187266) "a") (data (i32.const 187269) "a") (data (i32.const 187272) "a") (data (i32.const 187275) "a") (data (i32.const 187278) "a") (data (i32.const 187281) "a") (data (i32.const 187284) "a") (data (i32.const 187287) "a") (data (i32.const 187290) "a") (data (i32.const 187293) "a") (data (i32.const 187296) "a") (data (i32.const 187299) "a") (data (i32.const 187302) "a") (data (i32.const 187305) "a") (data (i32.const 187308) "a") (data (i32.const 187311) "a") (data (i32.const 187314) "a") (data (i32.const 187317) "a") (data (i32.const 187320) "a") (data (i32.const 187323) "a") (data (i32.const 187326) "a") (data (i32.const 187329) "a") (data (i32.const 187332) "a") (data (i32.const 187335) "a") (data (i32.const 187338) "a") (data (i32.const 187341) "a") (data (i32.const 187344) "a") (data (i32.const 187347) "a") (data (i32.const 187350) "a") (data (i32.const 187353) "a") (data (i32.const 187356) "a") (data (i32.const 187359) "a") (data (i32.const 187362) "a") (data (i32.const 187365) "a") (data (i32.const 187368) "a") (data (i32.const 187371) "a") (data (i32.const 187374) "a") (data (i32.const 187377) "a") (data (i32.const 187380) "a") (data (i32.const 187383) "a") (data (i32.const 187386) "a") (data (i32.const 187389) "a") (data (i32.const 187392) "a") (data (i32.const 187395) "a") (data (i32.const 187398) "a") (data (i32.const 187401) "a") (data (i32.const 187404) "a") (data (i32.const 187407) "a") (data (i32.const 187410) "a") (data (i32.const 187413) "a") (data (i32.const 187416) "a") (data (i32.const 187419) "a") (data (i32.const 187422) "a") (data (i32.const 187425) "a") (data (i32.const 187428) "a") (data (i32.const 187431) "a") (data (i32.const 187434) "a") (data (i32.const 187437) "a") (data (i32.const 187440) "a") (data (i32.const 187443) "a") (data (i32.const 187446) "a") (data (i32.const 187449) "a") (data (i32.const 187452) "a") (data (i32.const 187455) "a") (data (i32.const 187458) "a") (data (i32.const 187461) "a") (data (i32.const 187464) "a") (data (i32.const 187467) "a") (data (i32.const 187470) "a") (data (i32.const 187473) "a") (data (i32.const 187476) "a") (data (i32.const 187479) "a") (data (i32.const 187482) "a") (data (i32.const 187485) "a") (data (i32.const 187488) "a") (data (i32.const 187491) "a") (data (i32.const 187494) "a") (data (i32.const 187497) "a") (data (i32.const 187500) "a") (data (i32.const 187503) "a") (data (i32.const 187506) "a") (data (i32.const 187509) "a") (data (i32.const 187512) "a") (data (i32.const 187515) "a") (data (i32.const 187518) "a") (data (i32.const 187521) "a") (data (i32.const 187524) "a") (data (i32.const 187527) "a") (data (i32.const 187530) "a") (data (i32.const 187533) "a") (data (i32.const 187536) "a") (data (i32.const 187539) "a") (data (i32.const 187542) "a") (data (i32.const 187545) "a") (data (i32.const 187548) "a") (data (i32.const 187551) "a") (data (i32.const 187554) "a") (data (i32.const 187557) "a") (data (i32.const 187560) "a") (data (i32.const 187563) "a") (data (i32.const 187566) "a") (data (i32.const 187569) "a") (data (i32.const 187572) "a") (data (i32.const 187575) "a") (data (i32.const 187578) "a") (data (i32.const 187581) "a") (data (i32.const 187584) "a") (data (i32.const 187587) "a") (data (i32.const 187590) "a") (data (i32.const 187593) "a") (data (i32.const 187596) "a") (data (i32.const 187599) "a") (data (i32.const 187602) "a") (data (i32.const 187605) "a") (data (i32.const 187608) "a") (data (i32.const 187611) "a") (data (i32.const 187614) "a") (data (i32.const 187617) "a") (data (i32.const 187620) "a") (data (i32.const 187623) "a") (data (i32.const 187626) "a") (data (i32.const 187629) "a") (data (i32.const 187632) "a") (data (i32.const 187635) "a") (data (i32.const 187638) "a") (data (i32.const 187641) "a") (data (i32.const 187644) "a") (data (i32.const 187647) "a") (data (i32.const 187650) "a") (data (i32.const 187653) "a") (data (i32.const 187656) "a") (data (i32.const 187659) "a") (data (i32.const 187662) "a") (data (i32.const 187665) "a") (data (i32.const 187668) "a") (data (i32.const 187671) "a") (data (i32.const 187674) "a") (data (i32.const 187677) "a") (data (i32.const 187680) "a") (data (i32.const 187683) "a") (data (i32.const 187686) "a") (data (i32.const 187689) "a") (data (i32.const 187692) "a") (data (i32.const 187695) "a") (data (i32.const 187698) "a") (data (i32.const 187701) "a") (data (i32.const 187704) "a") (data (i32.const 187707) "a") (data (i32.const 187710) "a") (data (i32.const 187713) "a") (data (i32.const 187716) "a") (data (i32.const 187719) "a") (data (i32.const 187722) "a") (data (i32.const 187725) "a") (data (i32.const 187728) "a") (data (i32.const 187731) "a") (data (i32.const 187734) "a") (data (i32.const 187737) "a") (data (i32.const 187740) "a") (data (i32.const 187743) "a") (data (i32.const 187746) "a") (data (i32.const 187749) "a") (data (i32.const 187752) "a") (data (i32.const 187755) "a") (data (i32.const 187758) "a") (data (i32.const 187761) "a") (data (i32.const 187764) "a") (data (i32.const 187767) "a") (data (i32.const 187770) "a") (data (i32.const 187773) "a") (data (i32.const 187776) "a") (data (i32.const 187779) "a") (data (i32.const 187782) "a") (data (i32.const 187785) "a") (data (i32.const 187788) "a") (data (i32.const 187791) "a") (data (i32.const 187794) "a") (data (i32.const 187797) "a") (data (i32.const 187800) "a") (data (i32.const 187803) "a") (data (i32.const 187806) "a") (data (i32.const 187809) "a") (data (i32.const 187812) "a") (data (i32.const 187815) "a") (data (i32.const 187818) "a") (data (i32.const 187821) "a") (data (i32.const 187824) "a") (data (i32.const 187827) "a") (data (i32.const 187830) "a") (data (i32.const 187833) "a") (data (i32.const 187836) "a") (data (i32.const 187839) "a") (data (i32.const 187842) "a") (data (i32.const 187845) "a") (data (i32.const 187848) "a") (data (i32.const 187851) "a") (data (i32.const 187854) "a") (data (i32.const 187857) "a") (data (i32.const 187860) "a") (data (i32.const 187863) "a") (data (i32.const 187866) "a") (data (i32.const 187869) "a") (data (i32.const 187872) "a") (data (i32.const 187875) "a") (data (i32.const 187878) "a") (data (i32.const 187881) "a") (data (i32.const 187884) "a") (data (i32.const 187887) "a") (data (i32.const 187890) "a") (data (i32.const 187893) "a") (data (i32.const 187896) "a") (data (i32.const 187899) "a") (data (i32.const 187902) "a") (data (i32.const 187905) "a") (data (i32.const 187908) "a") (data (i32.const 187911) "a") (data (i32.const 187914) "a") (data (i32.const 187917) "a") (data (i32.const 187920) "a") (data (i32.const 187923) "a") (data (i32.const 187926) "a") (data (i32.const 187929) "a") (data (i32.const 187932) "a") (data (i32.const 187935) "a") (data (i32.const 187938) "a") (data (i32.const 187941) "a") (data (i32.const 187944) "a") (data (i32.const 187947) "a") (data (i32.const 187950) "a") (data (i32.const 187953) "a") (data (i32.const 187956) "a") (data (i32.const 187959) "a") (data (i32.const 187962) "a") (data (i32.const 187965) "a") (data (i32.const 187968) "a") (data (i32.const 187971) "a") (data (i32.const 187974) "a") (data (i32.const 187977) "a") (data (i32.const 187980) "a") (data (i32.const 187983) "a") (data (i32.const 187986) "a") (data (i32.const 187989) "a") (data (i32.const 187992) "a") (data (i32.const 187995) "a") (data (i32.const 187998) "a") (data (i32.const 188001) "a") (data (i32.const 188004) "a") (data (i32.const 188007) "a") (data (i32.const 188010) "a") (data (i32.const 188013) "a") (data (i32.const 188016) "a") (data (i32.const 188019) "a") (data (i32.const 188022) "a") (data (i32.const 188025) "a") (data (i32.const 188028) "a") (data (i32.const 188031) "a") (data (i32.const 188034) "a") (data (i32.const 188037) "a") (data (i32.const 188040) "a") (data (i32.const 188043) "a") (data (i32.const 188046) "a") (data (i32.const 188049) "a") (data (i32.const 188052) "a") (data (i32.const 188055) "a") (data (i32.const 188058) "a") (data (i32.const 188061) "a") (data (i32.const 188064) "a") (data (i32.const 188067) "a") (data (i32.const 188070) "a") (data (i32.const 188073) "a") (data (i32.const 188076) "a") (data (i32.const 188079) "a") (data (i32.const 188082) "a") (data (i32.const 188085) "a") (data (i32.const 188088) "a") (data (i32.const 188091) "a") (data (i32.const 188094) "a") (data (i32.const 188097) "a") (data (i32.const 188100) "a") (data (i32.const 188103) "a") (data (i32.const 188106) "a") (data (i32.const 188109) "a") (data (i32.const 188112) "a") (data (i32.const 188115) "a") (data (i32.const 188118) "a") (data (i32.const 188121) "a") (data (i32.const 188124) "a") (data (i32.const 188127) "a") (data (i32.const 188130) "a") (data (i32.const 188133) "a") (data (i32.const 188136) "a") (data (i32.const 188139) "a") (data (i32.const 188142) "a") (data (i32.const 188145) "a") (data (i32.const 188148) "a") (data (i32.const 188151) "a") (data (i32.const 188154) "a") (data (i32.const 188157) "a") (data (i32.const 188160) "a") (data (i32.const 188163) "a") (data (i32.const 188166) "a") (data (i32.const 188169) "a") (data (i32.const 188172) "a") (data (i32.const 188175) "a") (data (i32.const 188178) "a") (data (i32.const 188181) "a") (data (i32.const 188184) "a") (data (i32.const 188187) "a") (data (i32.const 188190) "a") (data (i32.const 188193) "a") (data (i32.const 188196) "a") (data (i32.const 188199) "a") (data (i32.const 188202) "a") (data (i32.const 188205) "a") (data (i32.const 188208) "a") (data (i32.const 188211) "a") (data (i32.const 188214) "a") (data (i32.const 188217) "a") (data (i32.const 188220) "a") (data (i32.const 188223) "a") (data (i32.const 188226) "a") (data (i32.const 188229) "a") (data (i32.const 188232) "a") (data (i32.const 188235) "a") (data (i32.const 188238) "a") (data (i32.const 188241) "a") (data (i32.const 188244) "a") (data (i32.const 188247) "a") (data (i32.const 188250) "a") (data (i32.const 188253) "a") (data (i32.const 188256) "a") (data (i32.const 188259) "a") (data (i32.const 188262) "a") (data (i32.const 188265) "a") (data (i32.const 188268) "a") (data (i32.const 188271) "a") (data (i32.const 188274) "a") (data (i32.const 188277) "a") (data (i32.const 188280) "a") (data (i32.const 188283) "a") (data (i32.const 188286) "a") (data (i32.const 188289) "a") (data (i32.const 188292) "a") (data (i32.const 188295) "a") (data (i32.const 188298) "a") (data (i32.const 188301) "a") (data (i32.const 188304) "a") (data (i32.const 188307) "a") (data (i32.const 188310) "a") (data (i32.const 188313) "a") (data (i32.const 188316) "a") (data (i32.const 188319) "a") (data (i32.const 188322) "a") (data (i32.const 188325) "a") (data (i32.const 188328) "a") (data (i32.const 188331) "a") (data (i32.const 188334) "a") (data (i32.const 188337) "a") (data (i32.const 188340) "a") (data (i32.const 188343) "a") (data (i32.const 188346) "a") (data (i32.const 188349) "a") (data (i32.const 188352) "a") (data (i32.const 188355) "a") (data (i32.const 188358) "a") (data (i32.const 188361) "a") (data (i32.const 188364) "a") (data (i32.const 188367) "a") (data (i32.const 188370) "a") (data (i32.const 188373) "a") (data (i32.const 188376) "a") (data (i32.const 188379) "a") (data (i32.const 188382) "a") (data (i32.const 188385) "a") (data (i32.const 188388) "a") (data (i32.const 188391) "a") (data (i32.const 188394) "a") (data (i32.const 188397) "a") (data (i32.const 188400) "a") (data (i32.const 188403) "a") (data (i32.const 188406) "a") (data (i32.const 188409) "a") (data (i32.const 188412) "a") (data (i32.const 188415) "a") (data (i32.const 188418) "a") (data (i32.const 188421) "a") (data (i32.const 188424) "a") (data (i32.const 188427) "a") (data (i32.const 188430) "a") (data (i32.const 188433) "a") (data (i32.const 188436) "a") (data (i32.const 188439) "a") (data (i32.const 188442) "a") (data (i32.const 188445) "a") (data (i32.const 188448) "a") (data (i32.const 188451) "a") (data (i32.const 188454) "a") (data (i32.const 188457) "a") (data (i32.const 188460) "a") (data (i32.const 188463) "a") (data (i32.const 188466) "a") (data (i32.const 188469) "a") (data (i32.const 188472) "a") (data (i32.const 188475) "a") (data (i32.const 188478) "a") (data (i32.const 188481) "a") (data (i32.const 188484) "a") (data (i32.const 188487) "a") (data (i32.const 188490) "a") (data (i32.const 188493) "a") (data (i32.const 188496) "a") (data (i32.const 188499) "a") (data (i32.const 188502) "a") (data (i32.const 188505) "a") (data (i32.const 188508) "a") (data (i32.const 188511) "a") (data (i32.const 188514) "a") (data (i32.const 188517) "a") (data (i32.const 188520) "a") (data (i32.const 188523) "a") (data (i32.const 188526) "a") (data (i32.const 188529) "a") (data (i32.const 188532) "a") (data (i32.const 188535) "a") (data (i32.const 188538) "a") (data (i32.const 188541) "a") (data (i32.const 188544) "a") (data (i32.const 188547) "a") (data (i32.const 188550) "a") (data (i32.const 188553) "a") (data (i32.const 188556) "a") (data (i32.const 188559) "a") (data (i32.const 188562) "a") (data (i32.const 188565) "a") (data (i32.const 188568) "a") (data (i32.const 188571) "a") (data (i32.const 188574) "a") (data (i32.const 188577) "a") (data (i32.const 188580) "a") (data (i32.const 188583) "a") (data (i32.const 188586) "a") (data (i32.const 188589) "a") (data (i32.const 188592) "a") (data (i32.const 188595) "a") (data (i32.const 188598) "a") (data (i32.const 188601) "a") (data (i32.const 188604) "a") (data (i32.const 188607) "a") (data (i32.const 188610) "a") (data (i32.const 188613) "a") (data (i32.const 188616) "a") (data (i32.const 188619) "a") (data (i32.const 188622) "a") (data (i32.const 188625) "a") (data (i32.const 188628) "a") (data (i32.const 188631) "a") (data (i32.const 188634) "a") (data (i32.const 188637) "a") (data (i32.const 188640) "a") (data (i32.const 188643) "a") (data (i32.const 188646) "a") (data (i32.const 188649) "a") (data (i32.const 188652) "a") (data (i32.const 188655) "a") (data (i32.const 188658) "a") (data (i32.const 188661) "a") (data (i32.const 188664) "a") (data (i32.const 188667) "a") (data (i32.const 188670) "a") (data (i32.const 188673) "a") (data (i32.const 188676) "a") (data (i32.const 188679) "a") (data (i32.const 188682) "a") (data (i32.const 188685) "a") (data (i32.const 188688) "a") (data (i32.const 188691) "a") (data (i32.const 188694) "a") (data (i32.const 188697) "a") (data (i32.const 188700) "a") (data (i32.const 188703) "a") (data (i32.const 188706) "a") (data (i32.const 188709) "a") (data (i32.const 188712) "a") (data (i32.const 188715) "a") (data (i32.const 188718) "a") (data (i32.const 188721) "a") (data (i32.const 188724) "a") (data (i32.const 188727) "a") (data (i32.const 188730) "a") (data (i32.const 188733) "a") (data (i32.const 188736) "a") (data (i32.const 188739) "a") (data (i32.const 188742) "a") (data (i32.const 188745) "a") (data (i32.const 188748) "a") (data (i32.const 188751) "a") (data (i32.const 188754) "a") (data (i32.const 188757) "a") (data (i32.const 188760) "a") (data (i32.const 188763) "a") (data (i32.const 188766) "a") (data (i32.const 188769) "a") (data (i32.const 188772) "a") (data (i32.const 188775) "a") (data (i32.const 188778) "a") (data (i32.const 188781) "a") (data (i32.const 188784) "a") (data (i32.const 188787) "a") (data (i32.const 188790) "a") (data (i32.const 188793) "a") (data (i32.const 188796) "a") (data (i32.const 188799) "a") (data (i32.const 188802) "a") (data (i32.const 188805) "a") (data (i32.const 188808) "a") (data (i32.const 188811) "a") (data (i32.const 188814) "a") (data (i32.const 188817) "a") (data (i32.const 188820) "a") (data (i32.const 188823) "a") (data (i32.const 188826) "a") (data (i32.const 188829) "a") (data (i32.const 188832) "a") (data (i32.const 188835) "a") (data (i32.const 188838) "a") (data (i32.const 188841) "a") (data (i32.const 188844) "a") (data (i32.const 188847) "a") (data (i32.const 188850) "a") (data (i32.const 188853) "a") (data (i32.const 188856) "a") (data (i32.const 188859) "a") (data (i32.const 188862) "a") (data (i32.const 188865) "a") (data (i32.const 188868) "a") (data (i32.const 188871) "a") (data (i32.const 188874) "a") (data (i32.const 188877) "a") (data (i32.const 188880) "a") (data (i32.const 188883) "a") (data (i32.const 188886) "a") (data (i32.const 188889) "a") (data (i32.const 188892) "a") (data (i32.const 188895) "a") (data (i32.const 188898) "a") (data (i32.const 188901) "a") (data (i32.const 188904) "a") (data (i32.const 188907) "a") (data (i32.const 188910) "a") (data (i32.const 188913) "a") (data (i32.const 188916) "a") (data (i32.const 188919) "a") (data (i32.const 188922) "a") (data (i32.const 188925) "a") (data (i32.const 188928) "a") (data (i32.const 188931) "a") (data (i32.const 188934) "a") (data (i32.const 188937) "a") (data (i32.const 188940) "a") (data (i32.const 188943) "a") (data (i32.const 188946) "a") (data (i32.const 188949) "a") (data (i32.const 188952) "a") (data (i32.const 188955) "a") (data (i32.const 188958) "a") (data (i32.const 188961) "a") (data (i32.const 188964) "a") (data (i32.const 188967) "a") (data (i32.const 188970) "a") (data (i32.const 188973) "a") (data (i32.const 188976) "a") (data (i32.const 188979) "a") (data (i32.const 188982) "a") (data (i32.const 188985) "a") (data (i32.const 188988) "a") (data (i32.const 188991) "a") (data (i32.const 188994) "a") (data (i32.const 188997) "a") (data (i32.const 189000) "a") (data (i32.const 189003) "a") (data (i32.const 189006) "a") (data (i32.const 189009) "a") (data (i32.const 189012) "a") (data (i32.const 189015) "a") (data (i32.const 189018) "a") (data (i32.const 189021) "a") (data (i32.const 189024) "a") (data (i32.const 189027) "a") (data (i32.const 189030) "a") (data (i32.const 189033) "a") (data (i32.const 189036) "a") (data (i32.const 189039) "a") (data (i32.const 189042) "a") (data (i32.const 189045) "a") (data (i32.const 189048) "a") (data (i32.const 189051) "a") (data (i32.const 189054) "a") (data (i32.const 189057) "a") (data (i32.const 189060) "a") (data (i32.const 189063) "a") (data (i32.const 189066) "a") (data (i32.const 189069) "a") (data (i32.const 189072) "a") (data (i32.const 189075) "a") (data (i32.const 189078) "a") (data (i32.const 189081) "a") (data (i32.const 189084) "a") (data (i32.const 189087) "a") (data (i32.const 189090) "a") (data (i32.const 189093) "a") (data (i32.const 189096) "a") (data (i32.const 189099) "a") (data (i32.const 189102) "a") (data (i32.const 189105) "a") (data (i32.const 189108) "a") (data (i32.const 189111) "a") (data (i32.const 189114) "a") (data (i32.const 189117) "a") (data (i32.const 189120) "a") (data (i32.const 189123) "a") (data (i32.const 189126) "a") (data (i32.const 189129) "a") (data (i32.const 189132) "a") (data (i32.const 189135) "a") (data (i32.const 189138) "a") (data (i32.const 189141) "a") (data (i32.const 189144) "a") (data (i32.const 189147) "a") (data (i32.const 189150) "a") (data (i32.const 189153) "a") (data (i32.const 189156) "a") (data (i32.const 189159) "a") (data (i32.const 189162) "a") (data (i32.const 189165) "a") (data (i32.const 189168) "a") (data (i32.const 189171) "a") (data (i32.const 189174) "a") (data (i32.const 189177) "a") (data (i32.const 189180) "a") (data (i32.const 189183) "a") (data (i32.const 189186) "a") (data (i32.const 189189) "a") (data (i32.const 189192) "a") (data (i32.const 189195) "a") (data (i32.const 189198) "a") (data (i32.const 189201) "a") (data (i32.const 189204) "a") (data (i32.const 189207) "a") (data (i32.const 189210) "a") (data (i32.const 189213) "a") (data (i32.const 189216) "a") (data (i32.const 189219) "a") (data (i32.const 189222) "a") (data (i32.const 189225) "a") (data (i32.const 189228) "a") (data (i32.const 189231) "a") (data (i32.const 189234) "a") (data (i32.const 189237) "a") (data (i32.const 189240) "a") (data (i32.const 189243) "a") (data (i32.const 189246) "a") (data (i32.const 189249) "a") (data (i32.const 189252) "a") (data (i32.const 189255) "a") (data (i32.const 189258) "a") (data (i32.const 189261) "a") (data (i32.const 189264) "a") (data (i32.const 189267) "a") (data (i32.const 189270) "a") (data (i32.const 189273) "a") (data (i32.const 189276) "a") (data (i32.const 189279) "a") (data (i32.const 189282) "a") (data (i32.const 189285) "a") (data (i32.const 189288) "a") (data (i32.const 189291) "a") (data (i32.const 189294) "a") (data (i32.const 189297) "a") (data (i32.const 189300) "a") (data (i32.const 189303) "a") (data (i32.const 189306) "a") (data (i32.const 189309) "a") (data (i32.const 189312) "a") (data (i32.const 189315) "a") (data (i32.const 189318) "a") (data (i32.const 189321) "a") (data (i32.const 189324) "a") (data (i32.const 189327) "a") (data (i32.const 189330) "a") (data (i32.const 189333) "a") (data (i32.const 189336) "a") (data (i32.const 189339) "a") (data (i32.const 189342) "a") (data (i32.const 189345) "a") (data (i32.const 189348) "a") (data (i32.const 189351) "a") (data (i32.const 189354) "a") (data (i32.const 189357) "a") (data (i32.const 189360) "a") (data (i32.const 189363) "a") (data (i32.const 189366) "a") (data (i32.const 189369) "a") (data (i32.const 189372) "a") (data (i32.const 189375) "a") (data (i32.const 189378) "a") (data (i32.const 189381) "a") (data (i32.const 189384) "a") (data (i32.const 189387) "a") (data (i32.const 189390) "a") (data (i32.const 189393) "a") (data (i32.const 189396) "a") (data (i32.const 189399) "a") (data (i32.const 189402) "a") (data (i32.const 189405) "a") (data (i32.const 189408) "a") (data (i32.const 189411) "a") (data (i32.const 189414) "a") (data (i32.const 189417) "a") (data (i32.const 189420) "a") (data (i32.const 189423) "a") (data (i32.const 189426) "a") (data (i32.const 189429) "a") (data (i32.const 189432) "a") (data (i32.const 189435) "a") (data (i32.const 189438) "a") (data (i32.const 189441) "a") (data (i32.const 189444) "a") (data (i32.const 189447) "a") (data (i32.const 189450) "a") (data (i32.const 189453) "a") (data (i32.const 189456) "a") (data (i32.const 189459) "a") (data (i32.const 189462) "a") (data (i32.const 189465) "a") (data (i32.const 189468) "a") (data (i32.const 189471) "a") (data (i32.const 189474) "a") (data (i32.const 189477) "a") (data (i32.const 189480) "a") (data (i32.const 189483) "a") (data (i32.const 189486) "a") (data (i32.const 189489) "a") (data (i32.const 189492) "a") (data (i32.const 189495) "a") (data (i32.const 189498) "a") (data (i32.const 189501) "a") (data (i32.const 189504) "a") (data (i32.const 189507) "a") (data (i32.const 189510) "a") (data (i32.const 189513) "a") (data (i32.const 189516) "a") (data (i32.const 189519) "a") (data (i32.const 189522) "a") (data (i32.const 189525) "a") (data (i32.const 189528) "a") (data (i32.const 189531) "a") (data (i32.const 189534) "a") (data (i32.const 189537) "a") (data (i32.const 189540) "a") (data (i32.const 189543) "a") (data (i32.const 189546) "a") (data (i32.const 189549) "a") (data (i32.const 189552) "a") (data (i32.const 189555) "a") (data (i32.const 189558) "a") (data (i32.const 189561) "a") (data (i32.const 189564) "a") (data (i32.const 189567) "a") (data (i32.const 189570) "a") (data (i32.const 189573) "a") (data (i32.const 189576) "a") (data (i32.const 189579) "a") (data (i32.const 189582) "a") (data (i32.const 189585) "a") (data (i32.const 189588) "a") (data (i32.const 189591) "a") (data (i32.const 189594) "a") (data (i32.const 189597) "a") (data (i32.const 189600) "a") (data (i32.const 189603) "a") (data (i32.const 189606) "a") (data (i32.const 189609) "a") (data (i32.const 189612) "a") (data (i32.const 189615) "a") (data (i32.const 189618) "a") (data (i32.const 189621) "a") (data (i32.const 189624) "a") (data (i32.const 189627) "a") (data (i32.const 189630) "a") (data (i32.const 189633) "a") (data (i32.const 189636) "a") (data (i32.const 189639) "a") (data (i32.const 189642) "a") (data (i32.const 189645) "a") (data (i32.const 189648) "a") (data (i32.const 189651) "a") (data (i32.const 189654) "a") (data (i32.const 189657) "a") (data (i32.const 189660) "a") (data (i32.const 189663) "a") (data (i32.const 189666) "a") (data (i32.const 189669) "a") (data (i32.const 189672) "a") (data (i32.const 189675) "a") (data (i32.const 189678) "a") (data (i32.const 189681) "a") (data (i32.const 189684) "a") (data (i32.const 189687) "a") (data (i32.const 189690) "a") (data (i32.const 189693) "a") (data (i32.const 189696) "a") (data (i32.const 189699) "a") (data (i32.const 189702) "a") (data (i32.const 189705) "a") (data (i32.const 189708) "a") (data (i32.const 189711) "a") (data (i32.const 189714) "a") (data (i32.const 189717) "a") (data (i32.const 189720) "a") (data (i32.const 189723) "a") (data (i32.const 189726) "a") (data (i32.const 189729) "a") (data (i32.const 189732) "a") (data (i32.const 189735) "a") (data (i32.const 189738) "a") (data (i32.const 189741) "a") (data (i32.const 189744) "a") (data (i32.const 189747) "a") (data (i32.const 189750) "a") (data (i32.const 189753) "a") (data (i32.const 189756) "a") (data (i32.const 189759) "a") (data (i32.const 189762) "a") (data (i32.const 189765) "a") (data (i32.const 189768) "a") (data (i32.const 189771) "a") (data (i32.const 189774) "a") (data (i32.const 189777) "a") (data (i32.const 189780) "a") (data (i32.const 189783) "a") (data (i32.const 189786) "a") (data (i32.const 189789) "a") (data (i32.const 189792) "a") (data (i32.const 189795) "a") (data (i32.const 189798) "a") (data (i32.const 189801) "a") (data (i32.const 189804) "a") (data (i32.const 189807) "a") (data (i32.const 189810) "a") (data (i32.const 189813) "a") (data (i32.const 189816) "a") (data (i32.const 189819) "a") (data (i32.const 189822) "a") (data (i32.const 189825) "a") (data (i32.const 189828) "a") (data (i32.const 189831) "a") (data (i32.const 189834) "a") (data (i32.const 189837) "a") (data (i32.const 189840) "a") (data (i32.const 189843) "a") (data (i32.const 189846) "a") (data (i32.const 189849) "a") (data (i32.const 189852) "a") (data (i32.const 189855) "a") (data (i32.const 189858) "a") (data (i32.const 189861) "a") (data (i32.const 189864) "a") (data (i32.const 189867) "a") (data (i32.const 189870) "a") (data (i32.const 189873) "a") (data (i32.const 189876) "a") (data (i32.const 189879) "a") (data (i32.const 189882) "a") (data (i32.const 189885) "a") (data (i32.const 189888) "a") (data (i32.const 189891) "a") (data (i32.const 189894) "a") (data (i32.const 189897) "a") (data (i32.const 189900) "a") (data (i32.const 189903) "a") (data (i32.const 189906) "a") (data (i32.const 189909) "a") (data (i32.const 189912) "a") (data (i32.const 189915) "a") (data (i32.const 189918) "a") (data (i32.const 189921) "a") (data (i32.const 189924) "a") (data (i32.const 189927) "a") (data (i32.const 189930) "a") (data (i32.const 189933) "a") (data (i32.const 189936) "a") (data (i32.const 189939) "a") (data (i32.const 189942) "a") (data (i32.const 189945) "a") (data (i32.const 189948) "a") (data (i32.const 189951) "a") (data (i32.const 189954) "a") (data (i32.const 189957) "a") (data (i32.const 189960) "a") (data (i32.const 189963) "a") (data (i32.const 189966) "a") (data (i32.const 189969) "a") (data (i32.const 189972) "a") (data (i32.const 189975) "a") (data (i32.const 189978) "a") (data (i32.const 189981) "a") (data (i32.const 189984) "a") (data (i32.const 189987) "a") (data (i32.const 189990) "a") (data (i32.const 189993) "a") (data (i32.const 189996) "a") (data (i32.const 189999) "a") (data (i32.const 190002) "a") (data (i32.const 190005) "a") (data (i32.const 190008) "a") (data (i32.const 190011) "a") (data (i32.const 190014) "a") (data (i32.const 190017) "a") (data (i32.const 190020) "a") (data (i32.const 190023) "a") (data (i32.const 190026) "a") (data (i32.const 190029) "a") (data (i32.const 190032) "a") (data (i32.const 190035) "a") (data (i32.const 190038) "a") (data (i32.const 190041) "a") (data (i32.const 190044) "a") (data (i32.const 190047) "a") (data (i32.const 190050) "a") (data (i32.const 190053) "a") (data (i32.const 190056) "a") (data (i32.const 190059) "a") (data (i32.const 190062) "a") (data (i32.const 190065) "a") (data (i32.const 190068) "a") (data (i32.const 190071) "a") (data (i32.const 190074) "a") (data (i32.const 190077) "a") (data (i32.const 190080) "a") (data (i32.const 190083) "a") (data (i32.const 190086) "a") (data (i32.const 190089) "a") (data (i32.const 190092) "a") (data (i32.const 190095) "a") (data (i32.const 190098) "a") (data (i32.const 190101) "a") (data (i32.const 190104) "a") (data (i32.const 190107) "a") (data (i32.const 190110) "a") (data (i32.const 190113) "a") (data (i32.const 190116) "a") (data (i32.const 190119) "a") (data (i32.const 190122) "a") (data (i32.const 190125) "a") (data (i32.const 190128) "a") (data (i32.const 190131) "a") (data (i32.const 190134) "a") (data (i32.const 190137) "a") (data (i32.const 190140) "a") (data (i32.const 190143) "a") (data (i32.const 190146) "a") (data (i32.const 190149) "a") (data (i32.const 190152) "a") (data (i32.const 190155) "a") (data (i32.const 190158) "a") (data (i32.const 190161) "a") (data (i32.const 190164) "a") (data (i32.const 190167) "a") (data (i32.const 190170) "a") (data (i32.const 190173) "a") (data (i32.const 190176) "a") (data (i32.const 190179) "a") (data (i32.const 190182) "a") (data (i32.const 190185) "a") (data (i32.const 190188) "a") (data (i32.const 190191) "a") (data (i32.const 190194) "a") (data (i32.const 190197) "a") (data (i32.const 190200) "a") (data (i32.const 190203) "a") (data (i32.const 190206) "a") (data (i32.const 190209) "a") (data (i32.const 190212) "a") (data (i32.const 190215) "a") (data (i32.const 190218) "a") (data (i32.const 190221) "a") (data (i32.const 190224) "a") (data (i32.const 190227) "a") (data (i32.const 190230) "a") (data (i32.const 190233) "a") (data (i32.const 190236) "a") (data (i32.const 190239) "a") (data (i32.const 190242) "a") (data (i32.const 190245) "a") (data (i32.const 190248) "a") (data (i32.const 190251) "a") (data (i32.const 190254) "a") (data (i32.const 190257) "a") (data (i32.const 190260) "a") (data (i32.const 190263) "a") (data (i32.const 190266) "a") (data (i32.const 190269) "a") (data (i32.const 190272) "a") (data (i32.const 190275) "a") (data (i32.const 190278) "a") (data (i32.const 190281) "a") (data (i32.const 190284) "a") (data (i32.const 190287) "a") (data (i32.const 190290) "a") (data (i32.const 190293) "a") (data (i32.const 190296) "a") (data (i32.const 190299) "a") (data (i32.const 190302) "a") (data (i32.const 190305) "a") (data (i32.const 190308) "a") (data (i32.const 190311) "a") (data (i32.const 190314) "a") (data (i32.const 190317) "a") (data (i32.const 190320) "a") (data (i32.const 190323) "a") (data (i32.const 190326) "a") (data (i32.const 190329) "a") (data (i32.const 190332) "a") (data (i32.const 190335) "a") (data (i32.const 190338) "a") (data (i32.const 190341) "a") (data (i32.const 190344) "a") (data (i32.const 190347) "a") (data (i32.const 190350) "a") (data (i32.const 190353) "a") (data (i32.const 190356) "a") (data (i32.const 190359) "a") (data (i32.const 190362) "a") (data (i32.const 190365) "a") (data (i32.const 190368) "a") (data (i32.const 190371) "a") (data (i32.const 190374) "a") (data (i32.const 190377) "a") (data (i32.const 190380) "a") (data (i32.const 190383) "a") (data (i32.const 190386) "a") (data (i32.const 190389) "a") (data (i32.const 190392) "a") (data (i32.const 190395) "a") (data (i32.const 190398) "a") (data (i32.const 190401) "a") (data (i32.const 190404) "a") (data (i32.const 190407) "a") (data (i32.const 190410) "a") (data (i32.const 190413) "a") (data (i32.const 190416) "a") (data (i32.const 190419) "a") (data (i32.const 190422) "a") (data (i32.const 190425) "a") (data (i32.const 190428) "a") (data (i32.const 190431) "a") (data (i32.const 190434) "a") (data (i32.const 190437) "a") (data (i32.const 190440) "a") (data (i32.const 190443) "a") (data (i32.const 190446) "a") (data (i32.const 190449) "a") (data (i32.const 190452) "a") (data (i32.const 190455) "a") (data (i32.const 190458) "a") (data (i32.const 190461) "a") (data (i32.const 190464) "a") (data (i32.const 190467) "a") (data (i32.const 190470) "a") (data (i32.const 190473) "a") (data (i32.const 190476) "a") (data (i32.const 190479) "a") (data (i32.const 190482) "a") (data (i32.const 190485) "a") (data (i32.const 190488) "a") (data (i32.const 190491) "a") (data (i32.const 190494) "a") (data (i32.const 190497) "a") (data (i32.const 190500) "a") (data (i32.const 190503) "a") (data (i32.const 190506) "a") (data (i32.const 190509) "a") (data (i32.const 190512) "a") (data (i32.const 190515) "a") (data (i32.const 190518) "a") (data (i32.const 190521) "a") (data (i32.const 190524) "a") (data (i32.const 190527) "a") (data (i32.const 190530) "a") (data (i32.const 190533) "a") (data (i32.const 190536) "a") (data (i32.const 190539) "a") (data (i32.const 190542) "a") (data (i32.const 190545) "a") (data (i32.const 190548) "a") (data (i32.const 190551) "a") (data (i32.const 190554) "a") (data (i32.const 190557) "a") (data (i32.const 190560) "a") (data (i32.const 190563) "a") (data (i32.const 190566) "a") (data (i32.const 190569) "a") (data (i32.const 190572) "a") (data (i32.const 190575) "a") (data (i32.const 190578) "a") (data (i32.const 190581) "a") (data (i32.const 190584) "a") (data (i32.const 190587) "a") (data (i32.const 190590) "a") (data (i32.const 190593) "a") (data (i32.const 190596) "a") (data (i32.const 190599) "a") (data (i32.const 190602) "a") (data (i32.const 190605) "a") (data (i32.const 190608) "a") (data (i32.const 190611) "a") (data (i32.const 190614) "a") (data (i32.const 190617) "a") (data (i32.const 190620) "a") (data (i32.const 190623) "a") (data (i32.const 190626) "a") (data (i32.const 190629) "a") (data (i32.const 190632) "a") (data (i32.const 190635) "a") (data (i32.const 190638) "a") (data (i32.const 190641) "a") (data (i32.const 190644) "a") (data (i32.const 190647) "a") (data (i32.const 190650) "a") (data (i32.const 190653) "a") (data (i32.const 190656) "a") (data (i32.const 190659) "a") (data (i32.const 190662) "a") (data (i32.const 190665) "a") (data (i32.const 190668) "a") (data (i32.const 190671) "a") (data (i32.const 190674) "a") (data (i32.const 190677) "a") (data (i32.const 190680) "a") (data (i32.const 190683) "a") (data (i32.const 190686) "a") (data (i32.const 190689) "a") (data (i32.const 190692) "a") (data (i32.const 190695) "a") (data (i32.const 190698) "a") (data (i32.const 190701) "a") (data (i32.const 190704) "a") (data (i32.const 190707) "a") (data (i32.const 190710) "a") (data (i32.const 190713) "a") (data (i32.const 190716) "a") (data (i32.const 190719) "a") (data (i32.const 190722) "a") (data (i32.const 190725) "a") (data (i32.const 190728) "a") (data (i32.const 190731) "a") (data (i32.const 190734) "a") (data (i32.const 190737) "a") (data (i32.const 190740) "a") (data (i32.const 190743) "a") (data (i32.const 190746) "a") (data (i32.const 190749) "a") (data (i32.const 190752) "a") (data (i32.const 190755) "a") (data (i32.const 190758) "a") (data (i32.const 190761) "a") (data (i32.const 190764) "a") (data (i32.const 190767) "a") (data (i32.const 190770) "a") (data (i32.const 190773) "a") (data (i32.const 190776) "a") (data (i32.const 190779) "a") (data (i32.const 190782) "a") (data (i32.const 190785) "a") (data (i32.const 190788) "a") (data (i32.const 190791) "a") (data (i32.const 190794) "a") (data (i32.const 190797) "a") (data (i32.const 190800) "a") (data (i32.const 190803) "a") (data (i32.const 190806) "a") (data (i32.const 190809) "a") (data (i32.const 190812) "a") (data (i32.const 190815) "a") (data (i32.const 190818) "a") (data (i32.const 190821) "a") (data (i32.const 190824) "a") (data (i32.const 190827) "a") (data (i32.const 190830) "a") (data (i32.const 190833) "a") (data (i32.const 190836) "a") (data (i32.const 190839) "a") (data (i32.const 190842) "a") (data (i32.const 190845) "a") (data (i32.const 190848) "a") (data (i32.const 190851) "a") (data (i32.const 190854) "a") (data (i32.const 190857) "a") (data (i32.const 190860) "a") (data (i32.const 190863) "a") (data (i32.const 190866) "a") (data (i32.const 190869) "a") (data (i32.const 190872) "a") (data (i32.const 190875) "a") (data (i32.const 190878) "a") (data (i32.const 190881) "a") (data (i32.const 190884) "a") (data (i32.const 190887) "a") (data (i32.const 190890) "a") (data (i32.const 190893) "a") (data (i32.const 190896) "a") (data (i32.const 190899) "a") (data (i32.const 190902) "a") (data (i32.const 190905) "a") (data (i32.const 190908) "a") (data (i32.const 190911) "a") (data (i32.const 190914) "a") (data (i32.const 190917) "a") (data (i32.const 190920) "a") (data (i32.const 190923) "a") (data (i32.const 190926) "a") (data (i32.const 190929) "a") (data (i32.const 190932) "a") (data (i32.const 190935) "a") (data (i32.const 190938) "a") (data (i32.const 190941) "a") (data (i32.const 190944) "a") (data (i32.const 190947) "a") (data (i32.const 190950) "a") (data (i32.const 190953) "a") (data (i32.const 190956) "a") (data (i32.const 190959) "a") (data (i32.const 190962) "a") (data (i32.const 190965) "a") (data (i32.const 190968) "a") (data (i32.const 190971) "a") (data (i32.const 190974) "a") (data (i32.const 190977) "a") (data (i32.const 190980) "a") (data (i32.const 190983) "a") (data (i32.const 190986) "a") (data (i32.const 190989) "a") (data (i32.const 190992) "a") (data (i32.const 190995) "a") (data (i32.const 190998) "a") (data (i32.const 191001) "a") (data (i32.const 191004) "a") (data (i32.const 191007) "a") (data (i32.const 191010) "a") (data (i32.const 191013) "a") (data (i32.const 191016) "a") (data (i32.const 191019) "a") (data (i32.const 191022) "a") (data (i32.const 191025) "a") (data (i32.const 191028) "a") (data (i32.const 191031) "a") (data (i32.const 191034) "a") (data (i32.const 191037) "a") (data (i32.const 191040) "a") (data (i32.const 191043) "a") (data (i32.const 191046) "a") (data (i32.const 191049) "a") (data (i32.const 191052) "a") (data (i32.const 191055) "a") (data (i32.const 191058) "a") (data (i32.const 191061) "a") (data (i32.const 191064) "a") (data (i32.const 191067) "a") (data (i32.const 191070) "a") (data (i32.const 191073) "a") (data (i32.const 191076) "a") (data (i32.const 191079) "a") (data (i32.const 191082) "a") (data (i32.const 191085) "a") (data (i32.const 191088) "a") (data (i32.const 191091) "a") (data (i32.const 191094) "a") (data (i32.const 191097) "a") (data (i32.const 191100) "a") (data (i32.const 191103) "a") (data (i32.const 191106) "a") (data (i32.const 191109) "a") (data (i32.const 191112) "a") (data (i32.const 191115) "a") (data (i32.const 191118) "a") (data (i32.const 191121) "a") (data (i32.const 191124) "a") (data (i32.const 191127) "a") (data (i32.const 191130) "a") (data (i32.const 191133) "a") (data (i32.const 191136) "a") (data (i32.const 191139) "a") (data (i32.const 191142) "a") (data (i32.const 191145) "a") (data (i32.const 191148) "a") (data (i32.const 191151) "a") (data (i32.const 191154) "a") (data (i32.const 191157) "a") (data (i32.const 191160) "a") (data (i32.const 191163) "a") (data (i32.const 191166) "a") (data (i32.const 191169) "a") (data (i32.const 191172) "a") (data (i32.const 191175) "a") (data (i32.const 191178) "a") (data (i32.const 191181) "a") (data (i32.const 191184) "a") (data (i32.const 191187) "a") (data (i32.const 191190) "a") (data (i32.const 191193) "a") (data (i32.const 191196) "a") (data (i32.const 191199) "a") (data (i32.const 191202) "a") (data (i32.const 191205) "a") (data (i32.const 191208) "a") (data (i32.const 191211) "a") (data (i32.const 191214) "a") (data (i32.const 191217) "a") (data (i32.const 191220) "a") (data (i32.const 191223) "a") (data (i32.const 191226) "a") (data (i32.const 191229) "a") (data (i32.const 191232) "a") (data (i32.const 191235) "a") (data (i32.const 191238) "a") (data (i32.const 191241) "a") (data (i32.const 191244) "a") (data (i32.const 191247) "a") (data (i32.const 191250) "a") (data (i32.const 191253) "a") (data (i32.const 191256) "a") (data (i32.const 191259) "a") (data (i32.const 191262) "a") (data (i32.const 191265) "a") (data (i32.const 191268) "a") (data (i32.const 191271) "a") (data (i32.const 191274) "a") (data (i32.const 191277) "a") (data (i32.const 191280) "a") (data (i32.const 191283) "a") (data (i32.const 191286) "a") (data (i32.const 191289) "a") (data (i32.const 191292) "a") (data (i32.const 191295) "a") (data (i32.const 191298) "a") (data (i32.const 191301) "a") (data (i32.const 191304) "a") (data (i32.const 191307) "a") (data (i32.const 191310) "a") (data (i32.const 191313) "a") (data (i32.const 191316) "a") (data (i32.const 191319) "a") (data (i32.const 191322) "a") (data (i32.const 191325) "a") (data (i32.const 191328) "a") (data (i32.const 191331) "a") (data (i32.const 191334) "a") (data (i32.const 191337) "a") (data (i32.const 191340) "a") (data (i32.const 191343) "a") (data (i32.const 191346) "a") (data (i32.const 191349) "a") (data (i32.const 191352) "a") (data (i32.const 191355) "a") (data (i32.const 191358) "a") (data (i32.const 191361) "a") (data (i32.const 191364) "a") (data (i32.const 191367) "a") (data (i32.const 191370) "a") (data (i32.const 191373) "a") (data (i32.const 191376) "a") (data (i32.const 191379) "a") (data (i32.const 191382) "a") (data (i32.const 191385) "a") (data (i32.const 191388) "a") (data (i32.const 191391) "a") (data (i32.const 191394) "a") (data (i32.const 191397) "a") (data (i32.const 191400) "a") (data (i32.const 191403) "a") (data (i32.const 191406) "a") (data (i32.const 191409) "a") (data (i32.const 191412) "a") (data (i32.const 191415) "a") (data (i32.const 191418) "a") (data (i32.const 191421) "a") (data (i32.const 191424) "a") (data (i32.const 191427) "a") (data (i32.const 191430) "a") (data (i32.const 191433) "a") (data (i32.const 191436) "a") (data (i32.const 191439) "a") (data (i32.const 191442) "a") (data (i32.const 191445) "a") (data (i32.const 191448) "a") (data (i32.const 191451) "a") (data (i32.const 191454) "a") (data (i32.const 191457) "a") (data (i32.const 191460) "a") (data (i32.const 191463) "a") (data (i32.const 191466) "a") (data (i32.const 191469) "a") (data (i32.const 191472) "a") (data (i32.const 191475) "a") (data (i32.const 191478) "a") (data (i32.const 191481) "a") (data (i32.const 191484) "a") (data (i32.const 191487) "a") (data (i32.const 191490) "a") (data (i32.const 191493) "a") (data (i32.const 191496) "a") (data (i32.const 191499) "a") (data (i32.const 191502) "a") (data (i32.const 191505) "a") (data (i32.const 191508) "a") (data (i32.const 191511) "a") (data (i32.const 191514) "a") (data (i32.const 191517) "a") (data (i32.const 191520) "a") (data (i32.const 191523) "a") (data (i32.const 191526) "a") (data (i32.const 191529) "a") (data (i32.const 191532) "a") (data (i32.const 191535) "a") (data (i32.const 191538) "a") (data (i32.const 191541) "a") (data (i32.const 191544) "a") (data (i32.const 191547) "a") (data (i32.const 191550) "a") (data (i32.const 191553) "a") (data (i32.const 191556) "a") (data (i32.const 191559) "a") (data (i32.const 191562) "a") (data (i32.const 191565) "a") (data (i32.const 191568) "a") (data (i32.const 191571) "a") (data (i32.const 191574) "a") (data (i32.const 191577) "a") (data (i32.const 191580) "a") (data (i32.const 191583) "a") (data (i32.const 191586) "a") (data (i32.const 191589) "a") (data (i32.const 191592) "a") (data (i32.const 191595) "a") (data (i32.const 191598) "a") (data (i32.const 191601) "a") (data (i32.const 191604) "a") (data (i32.const 191607) "a") (data (i32.const 191610) "a") (data (i32.const 191613) "a") (data (i32.const 191616) "a") (data (i32.const 191619) "a") (data (i32.const 191622) "a") (data (i32.const 191625) "a") (data (i32.const 191628) "a") (data (i32.const 191631) "a") (data (i32.const 191634) "a") (data (i32.const 191637) "a") (data (i32.const 191640) "a") (data (i32.const 191643) "a") (data (i32.const 191646) "a") (data (i32.const 191649) "a") (data (i32.const 191652) "a") (data (i32.const 191655) "a") (data (i32.const 191658) "a") (data (i32.const 191661) "a") (data (i32.const 191664) "a") (data (i32.const 191667) "a") (data (i32.const 191670) "a") (data (i32.const 191673) "a") (data (i32.const 191676) "a") (data (i32.const 191679) "a") (data (i32.const 191682) "a") (data (i32.const 191685) "a") (data (i32.const 191688) "a") (data (i32.const 191691) "a") (data (i32.const 191694) "a") (data (i32.const 191697) "a") (data (i32.const 191700) "a") (data (i32.const 191703) "a") (data (i32.const 191706) "a") (data (i32.const 191709) "a") (data (i32.const 191712) "a") (data (i32.const 191715) "a") (data (i32.const 191718) "a") (data (i32.const 191721) "a") (data (i32.const 191724) "a") (data (i32.const 191727) "a") (data (i32.const 191730) "a") (data (i32.const 191733) "a") (data (i32.const 191736) "a") (data (i32.const 191739) "a") (data (i32.const 191742) "a") (data (i32.const 191745) "a") (data (i32.const 191748) "a") (data (i32.const 191751) "a") (data (i32.const 191754) "a") (data (i32.const 191757) "a") (data (i32.const 191760) "a") (data (i32.const 191763) "a") (data (i32.const 191766) "a") (data (i32.const 191769) "a") (data (i32.const 191772) "a") (data (i32.const 191775) "a") (data (i32.const 191778) "a") (data (i32.const 191781) "a") (data (i32.const 191784) "a") (data (i32.const 191787) "a") (data (i32.const 191790) "a") (data (i32.const 191793) "a") (data (i32.const 191796) "a") (data (i32.const 191799) "a") (data (i32.const 191802) "a") (data (i32.const 191805) "a") (data (i32.const 191808) "a") (data (i32.const 191811) "a") (data (i32.const 191814) "a") (data (i32.const 191817) "a") (data (i32.const 191820) "a") (data (i32.const 191823) "a") (data (i32.const 191826) "a") (data (i32.const 191829) "a") (data (i32.const 191832) "a") (data (i32.const 191835) "a") (data (i32.const 191838) "a") (data (i32.const 191841) "a") (data (i32.const 191844) "a") (data (i32.const 191847) "a") (data (i32.const 191850) "a") (data (i32.const 191853) "a") (data (i32.const 191856) "a") (data (i32.const 191859) "a") (data (i32.const 191862) "a") (data (i32.const 191865) "a") (data (i32.const 191868) "a") (data (i32.const 191871) "a") (data (i32.const 191874) "a") (data (i32.const 191877) "a") (data (i32.const 191880) "a") (data (i32.const 191883) "a") (data (i32.const 191886) "a") (data (i32.const 191889) "a") (data (i32.const 191892) "a") (data (i32.const 191895) "a") (data (i32.const 191898) "a") (data (i32.const 191901) "a") (data (i32.const 191904) "a") (data (i32.const 191907) "a") (data (i32.const 191910) "a") (data (i32.const 191913) "a") (data (i32.const 191916) "a") (data (i32.const 191919) "a") (data (i32.const 191922) "a") (data (i32.const 191925) "a") (data (i32.const 191928) "a") (data (i32.const 191931) "a") (data (i32.const 191934) "a") (data (i32.const 191937) "a") (data (i32.const 191940) "a") (data (i32.const 191943) "a") (data (i32.const 191946) "a") (data (i32.const 191949) "a") (data (i32.const 191952) "a") (data (i32.const 191955) "a") (data (i32.const 191958) "a") (data (i32.const 191961) "a") (data (i32.const 191964) "a") (data (i32.const 191967) "a") (data (i32.const 191970) "a") (data (i32.const 191973) "a") (data (i32.const 191976) "a") (data (i32.const 191979) "a") (data (i32.const 191982) "a") (data (i32.const 191985) "a") (data (i32.const 191988) "a") (data (i32.const 191991) "a") (data (i32.const 191994) "a") (data (i32.const 191997) "a") (data (i32.const 192000) "a") (data (i32.const 192003) "a") (data (i32.const 192006) "a") (data (i32.const 192009) "a") (data (i32.const 192012) "a") (data (i32.const 192015) "a") (data (i32.const 192018) "a") (data (i32.const 192021) "a") (data (i32.const 192024) "a") (data (i32.const 192027) "a") (data (i32.const 192030) "a") (data (i32.const 192033) "a") (data (i32.const 192036) "a") (data (i32.const 192039) "a") (data (i32.const 192042) "a") (data (i32.const 192045) "a") (data (i32.const 192048) "a") (data (i32.const 192051) "a") (data (i32.const 192054) "a") (data (i32.const 192057) "a") (data (i32.const 192060) "a") (data (i32.const 192063) "a") (data (i32.const 192066) "a") (data (i32.const 192069) "a") (data (i32.const 192072) "a") (data (i32.const 192075) "a") (data (i32.const 192078) "a") (data (i32.const 192081) "a") (data (i32.const 192084) "a") (data (i32.const 192087) "a") (data (i32.const 192090) "a") (data (i32.const 192093) "a") (data (i32.const 192096) "a") (data (i32.const 192099) "a") (data (i32.const 192102) "a") (data (i32.const 192105) "a") (data (i32.const 192108) "a") (data (i32.const 192111) "a") (data (i32.const 192114) "a") (data (i32.const 192117) "a") (data (i32.const 192120) "a") (data (i32.const 192123) "a") (data (i32.const 192126) "a") (data (i32.const 192129) "a") (data (i32.const 192132) "a") (data (i32.const 192135) "a") (data (i32.const 192138) "a") (data (i32.const 192141) "a") (data (i32.const 192144) "a") (data (i32.const 192147) "a") (data (i32.const 192150) "a") (data (i32.const 192153) "a") (data (i32.const 192156) "a") (data (i32.const 192159) "a") (data (i32.const 192162) "a") (data (i32.const 192165) "a") (data (i32.const 192168) "a") (data (i32.const 192171) "a") (data (i32.const 192174) "a") (data (i32.const 192177) "a") (data (i32.const 192180) "a") (data (i32.const 192183) "a") (data (i32.const 192186) "a") (data (i32.const 192189) "a") (data (i32.const 192192) "a") (data (i32.const 192195) "a") (data (i32.const 192198) "a") (data (i32.const 192201) "a") (data (i32.const 192204) "a") (data (i32.const 192207) "a") (data (i32.const 192210) "a") (data (i32.const 192213) "a") (data (i32.const 192216) "a") (data (i32.const 192219) "a") (data (i32.const 192222) "a") (data (i32.const 192225) "a") (data (i32.const 192228) "a") (data (i32.const 192231) "a") (data (i32.const 192234) "a") (data (i32.const 192237) "a") (data (i32.const 192240) "a") (data (i32.const 192243) "a") (data (i32.const 192246) "a") (data (i32.const 192249) "a") (data (i32.const 192252) "a") (data (i32.const 192255) "a") (data (i32.const 192258) "a") (data (i32.const 192261) "a") (data (i32.const 192264) "a") (data (i32.const 192267) "a") (data (i32.const 192270) "a") (data (i32.const 192273) "a") (data (i32.const 192276) "a") (data (i32.const 192279) "a") (data (i32.const 192282) "a") (data (i32.const 192285) "a") (data (i32.const 192288) "a") (data (i32.const 192291) "a") (data (i32.const 192294) "a") (data (i32.const 192297) "a") (data (i32.const 192300) "a") (data (i32.const 192303) "a") (data (i32.const 192306) "a") (data (i32.const 192309) "a") (data (i32.const 192312) "a") (data (i32.const 192315) "a") (data (i32.const 192318) "a") (data (i32.const 192321) "a") (data (i32.const 192324) "a") (data (i32.const 192327) "a") (data (i32.const 192330) "a") (data (i32.const 192333) "a") (data (i32.const 192336) "a") (data (i32.const 192339) "a") (data (i32.const 192342) "a") (data (i32.const 192345) "a") (data (i32.const 192348) "a") (data (i32.const 192351) "a") (data (i32.const 192354) "a") (data (i32.const 192357) "a") (data (i32.const 192360) "a") (data (i32.const 192363) "a") (data (i32.const 192366) "a") (data (i32.const 192369) "a") (data (i32.const 192372) "a") (data (i32.const 192375) "a") (data (i32.const 192378) "a") (data (i32.const 192381) "a") (data (i32.const 192384) "a") (data (i32.const 192387) "a") (data (i32.const 192390) "a") (data (i32.const 192393) "a") (data (i32.const 192396) "a") (data (i32.const 192399) "a") (data (i32.const 192402) "a") (data (i32.const 192405) "a") (data (i32.const 192408) "a") (data (i32.const 192411) "a") (data (i32.const 192414) "a") (data (i32.const 192417) "a") (data (i32.const 192420) "a") (data (i32.const 192423) "a") (data (i32.const 192426) "a") (data (i32.const 192429) "a") (data (i32.const 192432) "a") (data (i32.const 192435) "a") (data (i32.const 192438) "a") (data (i32.const 192441) "a") (data (i32.const 192444) "a") (data (i32.const 192447) "a") (data (i32.const 192450) "a") (data (i32.const 192453) "a") (data (i32.const 192456) "a") (data (i32.const 192459) "a") (data (i32.const 192462) "a") (data (i32.const 192465) "a") (data (i32.const 192468) "a") (data (i32.const 192471) "a") (data (i32.const 192474) "a") (data (i32.const 192477) "a") (data (i32.const 192480) "a") (data (i32.const 192483) "a") (data (i32.const 192486) "a") (data (i32.const 192489) "a") (data (i32.const 192492) "a") (data (i32.const 192495) "a") (data (i32.const 192498) "a") (data (i32.const 192501) "a") (data (i32.const 192504) "a") (data (i32.const 192507) "a") (data (i32.const 192510) "a") (data (i32.const 192513) "a") (data (i32.const 192516) "a") (data (i32.const 192519) "a") (data (i32.const 192522) "a") (data (i32.const 192525) "a") (data (i32.const 192528) "a") (data (i32.const 192531) "a") (data (i32.const 192534) "a") (data (i32.const 192537) "a") (data (i32.const 192540) "a") (data (i32.const 192543) "a") (data (i32.const 192546) "a") (data (i32.const 192549) "a") (data (i32.const 192552) "a") (data (i32.const 192555) "a") (data (i32.const 192558) "a") (data (i32.const 192561) "a") (data (i32.const 192564) "a") (data (i32.const 192567) "a") (data (i32.const 192570) "a") (data (i32.const 192573) "a") (data (i32.const 192576) "a") (data (i32.const 192579) "a") (data (i32.const 192582) "a") (data (i32.const 192585) "a") (data (i32.const 192588) "a") (data (i32.const 192591) "a") (data (i32.const 192594) "a") (data (i32.const 192597) "a") (data (i32.const 192600) "a") (data (i32.const 192603) "a") (data (i32.const 192606) "a") (data (i32.const 192609) "a") (data (i32.const 192612) "a") (data (i32.const 192615) "a") (data (i32.const 192618) "a") (data (i32.const 192621) "a") (data (i32.const 192624) "a") (data (i32.const 192627) "a") (data (i32.const 192630) "a") (data (i32.const 192633) "a") (data (i32.const 192636) "a") (data (i32.const 192639) "a") (data (i32.const 192642) "a") (data (i32.const 192645) "a") (data (i32.const 192648) "a") (data (i32.const 192651) "a") (data (i32.const 192654) "a") (data (i32.const 192657) "a") (data (i32.const 192660) "a") (data (i32.const 192663) "a") (data (i32.const 192666) "a") (data (i32.const 192669) "a") (data (i32.const 192672) "a") (data (i32.const 192675) "a") (data (i32.const 192678) "a") (data (i32.const 192681) "a") (data (i32.const 192684) "a") (data (i32.const 192687) "a") (data (i32.const 192690) "a") (data (i32.const 192693) "a") (data (i32.const 192696) "a") (data (i32.const 192699) "a") (data (i32.const 192702) "a") (data (i32.const 192705) "a") (data (i32.const 192708) "a") (data (i32.const 192711) "a") (data (i32.const 192714) "a") (data (i32.const 192717) "a") (data (i32.const 192720) "a") (data (i32.const 192723) "a") (data (i32.const 192726) "a") (data (i32.const 192729) "a") (data (i32.const 192732) "a") (data (i32.const 192735) "a") (data (i32.const 192738) "a") (data (i32.const 192741) "a") (data (i32.const 192744) "a") (data (i32.const 192747) "a") (data (i32.const 192750) "a") (data (i32.const 192753) "a") (data (i32.const 192756) "a") (data (i32.const 192759) "a") (data (i32.const 192762) "a") (data (i32.const 192765) "a") (data (i32.const 192768) "a") (data (i32.const 192771) "a") (data (i32.const 192774) "a") (data (i32.const 192777) "a") (data (i32.const 192780) "a") (data (i32.const 192783) "a") (data (i32.const 192786) "a") (data (i32.const 192789) "a") (data (i32.const 192792) "a") (data (i32.const 192795) "a") (data (i32.const 192798) "a") (data (i32.const 192801) "a") (data (i32.const 192804) "a") (data (i32.const 192807) "a") (data (i32.const 192810) "a") (data (i32.const 192813) "a") (data (i32.const 192816) "a") (data (i32.const 192819) "a") (data (i32.const 192822) "a") (data (i32.const 192825) "a") (data (i32.const 192828) "a") (data (i32.const 192831) "a") (data (i32.const 192834) "a") (data (i32.const 192837) "a") (data (i32.const 192840) "a") (data (i32.const 192843) "a") (data (i32.const 192846) "a") (data (i32.const 192849) "a") (data (i32.const 192852) "a") (data (i32.const 192855) "a") (data (i32.const 192858) "a") (data (i32.const 192861) "a") (data (i32.const 192864) "a") (data (i32.const 192867) "a") (data (i32.const 192870) "a") (data (i32.const 192873) "a") (data (i32.const 192876) "a") (data (i32.const 192879) "a") (data (i32.const 192882) "a") (data (i32.const 192885) "a") (data (i32.const 192888) "a") (data (i32.const 192891) "a") (data (i32.const 192894) "a") (data (i32.const 192897) "a") (data (i32.const 192900) "a") (data (i32.const 192903) "a") (data (i32.const 192906) "a") (data (i32.const 192909) "a") (data (i32.const 192912) "a") (data (i32.const 192915) "a") (data (i32.const 192918) "a") (data (i32.const 192921) "a") (data (i32.const 192924) "a") (data (i32.const 192927) "a") (data (i32.const 192930) "a") (data (i32.const 192933) "a") (data (i32.const 192936) "a") (data (i32.const 192939) "a") (data (i32.const 192942) "a") (data (i32.const 192945) "a") (data (i32.const 192948) "a") (data (i32.const 192951) "a") (data (i32.const 192954) "a") (data (i32.const 192957) "a") (data (i32.const 192960) "a") (data (i32.const 192963) "a") (data (i32.const 192966) "a") (data (i32.const 192969) "a") (data (i32.const 192972) "a") (data (i32.const 192975) "a") (data (i32.const 192978) "a") (data (i32.const 192981) "a") (data (i32.const 192984) "a") (data (i32.const 192987) "a") (data (i32.const 192990) "a") (data (i32.const 192993) "a") (data (i32.const 192996) "a") (data (i32.const 192999) "a") (data (i32.const 193002) "a") (data (i32.const 193005) "a") (data (i32.const 193008) "a") (data (i32.const 193011) "a") (data (i32.const 193014) "a") (data (i32.const 193017) "a") (data (i32.const 193020) "a") (data (i32.const 193023) "a") (data (i32.const 193026) "a") (data (i32.const 193029) "a") (data (i32.const 193032) "a") (data (i32.const 193035) "a") (data (i32.const 193038) "a") (data (i32.const 193041) "a") (data (i32.const 193044) "a") (data (i32.const 193047) "a") (data (i32.const 193050) "a") (data (i32.const 193053) "a") (data (i32.const 193056) "a") (data (i32.const 193059) "a") (data (i32.const 193062) "a") (data (i32.const 193065) "a") (data (i32.const 193068) "a") (data (i32.const 193071) "a") (data (i32.const 193074) "a") (data (i32.const 193077) "a") (data (i32.const 193080) "a") (data (i32.const 193083) "a") (data (i32.const 193086) "a") (data (i32.const 193089) "a") (data (i32.const 193092) "a") (data (i32.const 193095) "a") (data (i32.const 193098) "a") (data (i32.const 193101) "a") (data (i32.const 193104) "a") (data (i32.const 193107) "a") (data (i32.const 193110) "a") (data (i32.const 193113) "a") (data (i32.const 193116) "a") (data (i32.const 193119) "a") (data (i32.const 193122) "a") (data (i32.const 193125) "a") (data (i32.const 193128) "a") (data (i32.const 193131) "a") (data (i32.const 193134) "a") (data (i32.const 193137) "a") (data (i32.const 193140) "a") (data (i32.const 193143) "a") (data (i32.const 193146) "a") (data (i32.const 193149) "a") (data (i32.const 193152) "a") (data (i32.const 193155) "a") (data (i32.const 193158) "a") (data (i32.const 193161) "a") (data (i32.const 193164) "a") (data (i32.const 193167) "a") (data (i32.const 193170) "a") (data (i32.const 193173) "a") (data (i32.const 193176) "a") (data (i32.const 193179) "a") (data (i32.const 193182) "a") (data (i32.const 193185) "a") (data (i32.const 193188) "a") (data (i32.const 193191) "a") (data (i32.const 193194) "a") (data (i32.const 193197) "a") (data (i32.const 193200) "a") (data (i32.const 193203) "a") (data (i32.const 193206) "a") (data (i32.const 193209) "a") (data (i32.const 193212) "a") (data (i32.const 193215) "a") (data (i32.const 193218) "a") (data (i32.const 193221) "a") (data (i32.const 193224) "a") (data (i32.const 193227) "a") (data (i32.const 193230) "a") (data (i32.const 193233) "a") (data (i32.const 193236) "a") (data (i32.const 193239) "a") (data (i32.const 193242) "a") (data (i32.const 193245) "a") (data (i32.const 193248) "a") (data (i32.const 193251) "a") (data (i32.const 193254) "a") (data (i32.const 193257) "a") (data (i32.const 193260) "a") (data (i32.const 193263) "a") (data (i32.const 193266) "a") (data (i32.const 193269) "a") (data (i32.const 193272) "a") (data (i32.const 193275) "a") (data (i32.const 193278) "a") (data (i32.const 193281) "a") (data (i32.const 193284) "a") (data (i32.const 193287) "a") (data (i32.const 193290) "a") (data (i32.const 193293) "a") (data (i32.const 193296) "a") (data (i32.const 193299) "a") (data (i32.const 193302) "a") (data (i32.const 193305) "a") (data (i32.const 193308) "a") (data (i32.const 193311) "a") (data (i32.const 193314) "a") (data (i32.const 193317) "a") (data (i32.const 193320) "a") (data (i32.const 193323) "a") (data (i32.const 193326) "a") (data (i32.const 193329) "a") (data (i32.const 193332) "a") (data (i32.const 193335) "a") (data (i32.const 193338) "a") (data (i32.const 193341) "a") (data (i32.const 193344) "a") (data (i32.const 193347) "a") (data (i32.const 193350) "a") (data (i32.const 193353) "a") (data (i32.const 193356) "a") (data (i32.const 193359) "a") (data (i32.const 193362) "a") (data (i32.const 193365) "a") (data (i32.const 193368) "a") (data (i32.const 193371) "a") (data (i32.const 193374) "a") (data (i32.const 193377) "a") (data (i32.const 193380) "a") (data (i32.const 193383) "a") (data (i32.const 193386) "a") (data (i32.const 193389) "a") (data (i32.const 193392) "a") (data (i32.const 193395) "a") (data (i32.const 193398) "a") (data (i32.const 193401) "a") (data (i32.const 193404) "a") (data (i32.const 193407) "a") (data (i32.const 193410) "a") (data (i32.const 193413) "a") (data (i32.const 193416) "a") (data (i32.const 193419) "a") (data (i32.const 193422) "a") (data (i32.const 193425) "a") (data (i32.const 193428) "a") (data (i32.const 193431) "a") (data (i32.const 193434) "a") (data (i32.const 193437) "a") (data (i32.const 193440) "a") (data (i32.const 193443) "a") (data (i32.const 193446) "a") (data (i32.const 193449) "a") (data (i32.const 193452) "a") (data (i32.const 193455) "a") (data (i32.const 193458) "a") (data (i32.const 193461) "a") (data (i32.const 193464) "a") (data (i32.const 193467) "a") (data (i32.const 193470) "a") (data (i32.const 193473) "a") (data (i32.const 193476) "a") (data (i32.const 193479) "a") (data (i32.const 193482) "a") (data (i32.const 193485) "a") (data (i32.const 193488) "a") (data (i32.const 193491) "a") (data (i32.const 193494) "a") (data (i32.const 193497) "a") (data (i32.const 193500) "a") (data (i32.const 193503) "a") (data (i32.const 193506) "a") (data (i32.const 193509) "a") (data (i32.const 193512) "a") (data (i32.const 193515) "a") (data (i32.const 193518) "a") (data (i32.const 193521) "a") (data (i32.const 193524) "a") (data (i32.const 193527) "a") (data (i32.const 193530) "a") (data (i32.const 193533) "a") (data (i32.const 193536) "a") (data (i32.const 193539) "a") (data (i32.const 193542) "a") (data (i32.const 193545) "a") (data (i32.const 193548) "a") (data (i32.const 193551) "a") (data (i32.const 193554) "a") (data (i32.const 193557) "a") (data (i32.const 193560) "a") (data (i32.const 193563) "a") (data (i32.const 193566) "a") (data (i32.const 193569) "a") (data (i32.const 193572) "a") (data (i32.const 193575) "a") (data (i32.const 193578) "a") (data (i32.const 193581) "a") (data (i32.const 193584) "a") (data (i32.const 193587) "a") (data (i32.const 193590) "a") (data (i32.const 193593) "a") (data (i32.const 193596) "a") (data (i32.const 193599) "a") (data (i32.const 193602) "a") (data (i32.const 193605) "a") (data (i32.const 193608) "a") (data (i32.const 193611) "a") (data (i32.const 193614) "a") (data (i32.const 193617) "a") (data (i32.const 193620) "a") (data (i32.const 193623) "a") (data (i32.const 193626) "a") (data (i32.const 193629) "a") (data (i32.const 193632) "a") (data (i32.const 193635) "a") (data (i32.const 193638) "a") (data (i32.const 193641) "a") (data (i32.const 193644) "a") (data (i32.const 193647) "a") (data (i32.const 193650) "a") (data (i32.const 193653) "a") (data (i32.const 193656) "a") (data (i32.const 193659) "a") (data (i32.const 193662) "a") (data (i32.const 193665) "a") (data (i32.const 193668) "a") (data (i32.const 193671) "a") (data (i32.const 193674) "a") (data (i32.const 193677) "a") (data (i32.const 193680) "a") (data (i32.const 193683) "a") (data (i32.const 193686) "a") (data (i32.const 193689) "a") (data (i32.const 193692) "a") (data (i32.const 193695) "a") (data (i32.const 193698) "a") (data (i32.const 193701) "a") (data (i32.const 193704) "a") (data (i32.const 193707) "a") (data (i32.const 193710) "a") (data (i32.const 193713) "a") (data (i32.const 193716) "a") (data (i32.const 193719) "a") (data (i32.const 193722) "a") (data (i32.const 193725) "a") (data (i32.const 193728) "a") (data (i32.const 193731) "a") (data (i32.const 193734) "a") (data (i32.const 193737) "a") (data (i32.const 193740) "a") (data (i32.const 193743) "a") (data (i32.const 193746) "a") (data (i32.const 193749) "a") (data (i32.const 193752) "a") (data (i32.const 193755) "a") (data (i32.const 193758) "a") (data (i32.const 193761) "a") (data (i32.const 193764) "a") (data (i32.const 193767) "a") (data (i32.const 193770) "a") (data (i32.const 193773) "a") (data (i32.const 193776) "a") (data (i32.const 193779) "a") (data (i32.const 193782) "a") (data (i32.const 193785) "a") (data (i32.const 193788) "a") (data (i32.const 193791) "a") (data (i32.const 193794) "a") (data (i32.const 193797) "a") (data (i32.const 193800) "a") (data (i32.const 193803) "a") (data (i32.const 193806) "a") (data (i32.const 193809) "a") (data (i32.const 193812) "a") (data (i32.const 193815) "a") (data (i32.const 193818) "a") (data (i32.const 193821) "a") (data (i32.const 193824) "a") (data (i32.const 193827) "a") (data (i32.const 193830) "a") (data (i32.const 193833) "a") (data (i32.const 193836) "a") (data (i32.const 193839) "a") (data (i32.const 193842) "a") (data (i32.const 193845) "a") (data (i32.const 193848) "a") (data (i32.const 193851) "a") (data (i32.const 193854) "a") (data (i32.const 193857) "a") (data (i32.const 193860) "a") (data (i32.const 193863) "a") (data (i32.const 193866) "a") (data (i32.const 193869) "a") (data (i32.const 193872) "a") (data (i32.const 193875) "a") (data (i32.const 193878) "a") (data (i32.const 193881) "a") (data (i32.const 193884) "a") (data (i32.const 193887) "a") (data (i32.const 193890) "a") (data (i32.const 193893) "a") (data (i32.const 193896) "a") (data (i32.const 193899) "a") (data (i32.const 193902) "a") (data (i32.const 193905) "a") (data (i32.const 193908) "a") (data (i32.const 193911) "a") (data (i32.const 193914) "a") (data (i32.const 193917) "a") (data (i32.const 193920) "a") (data (i32.const 193923) "a") (data (i32.const 193926) "a") (data (i32.const 193929) "a") (data (i32.const 193932) "a") (data (i32.const 193935) "a") (data (i32.const 193938) "a") (data (i32.const 193941) "a") (data (i32.const 193944) "a") (data (i32.const 193947) "a") (data (i32.const 193950) "a") (data (i32.const 193953) "a") (data (i32.const 193956) "a") (data (i32.const 193959) "a") (data (i32.const 193962) "a") (data (i32.const 193965) "a") (data (i32.const 193968) "a") (data (i32.const 193971) "a") (data (i32.const 193974) "a") (data (i32.const 193977) "a") (data (i32.const 193980) "a") (data (i32.const 193983) "a") (data (i32.const 193986) "a") (data (i32.const 193989) "a") (data (i32.const 193992) "a") (data (i32.const 193995) "a") (data (i32.const 193998) "a") (data (i32.const 194001) "a") (data (i32.const 194004) "a") (data (i32.const 194007) "a") (data (i32.const 194010) "a") (data (i32.const 194013) "a") (data (i32.const 194016) "a") (data (i32.const 194019) "a") (data (i32.const 194022) "a") (data (i32.const 194025) "a") (data (i32.const 194028) "a") (data (i32.const 194031) "a") (data (i32.const 194034) "a") (data (i32.const 194037) "a") (data (i32.const 194040) "a") (data (i32.const 194043) "a") (data (i32.const 194046) "a") (data (i32.const 194049) "a") (data (i32.const 194052) "a") (data (i32.const 194055) "a") (data (i32.const 194058) "a") (data (i32.const 194061) "a") (data (i32.const 194064) "a") (data (i32.const 194067) "a") (data (i32.const 194070) "a") (data (i32.const 194073) "a") (data (i32.const 194076) "a") (data (i32.const 194079) "a") (data (i32.const 194082) "a") (data (i32.const 194085) "a") (data (i32.const 194088) "a") (data (i32.const 194091) "a") (data (i32.const 194094) "a") (data (i32.const 194097) "a") (data (i32.const 194100) "a") (data (i32.const 194103) "a") (data (i32.const 194106) "a") (data (i32.const 194109) "a") (data (i32.const 194112) "a") (data (i32.const 194115) "a") (data (i32.const 194118) "a") (data (i32.const 194121) "a") (data (i32.const 194124) "a") (data (i32.const 194127) "a") (data (i32.const 194130) "a") (data (i32.const 194133) "a") (data (i32.const 194136) "a") (data (i32.const 194139) "a") (data (i32.const 194142) "a") (data (i32.const 194145) "a") (data (i32.const 194148) "a") (data (i32.const 194151) "a") (data (i32.const 194154) "a") (data (i32.const 194157) "a") (data (i32.const 194160) "a") (data (i32.const 194163) "a") (data (i32.const 194166) "a") (data (i32.const 194169) "a") (data (i32.const 194172) "a") (data (i32.const 194175) "a") (data (i32.const 194178) "a") (data (i32.const 194181) "a") (data (i32.const 194184) "a") (data (i32.const 194187) "a") (data (i32.const 194190) "a") (data (i32.const 194193) "a") (data (i32.const 194196) "a") (data (i32.const 194199) "a") (data (i32.const 194202) "a") (data (i32.const 194205) "a") (data (i32.const 194208) "a") (data (i32.const 194211) "a") (data (i32.const 194214) "a") (data (i32.const 194217) "a") (data (i32.const 194220) "a") (data (i32.const 194223) "a") (data (i32.const 194226) "a") (data (i32.const 194229) "a") (data (i32.const 194232) "a") (data (i32.const 194235) "a") (data (i32.const 194238) "a") (data (i32.const 194241) "a") (data (i32.const 194244) "a") (data (i32.const 194247) "a") (data (i32.const 194250) "a") (data (i32.const 194253) "a") (data (i32.const 194256) "a") (data (i32.const 194259) "a") (data (i32.const 194262) "a") (data (i32.const 194265) "a") (data (i32.const 194268) "a") (data (i32.const 194271) "a") (data (i32.const 194274) "a") (data (i32.const 194277) "a") (data (i32.const 194280) "a") (data (i32.const 194283) "a") (data (i32.const 194286) "a") (data (i32.const 194289) "a") (data (i32.const 194292) "a") (data (i32.const 194295) "a") (data (i32.const 194298) "a") (data (i32.const 194301) "a") (data (i32.const 194304) "a") (data (i32.const 194307) "a") (data (i32.const 194310) "a") (data (i32.const 194313) "a") (data (i32.const 194316) "a") (data (i32.const 194319) "a") (data (i32.const 194322) "a") (data (i32.const 194325) "a") (data (i32.const 194328) "a") (data (i32.const 194331) "a") (data (i32.const 194334) "a") (data (i32.const 194337) "a") (data (i32.const 194340) "a") (data (i32.const 194343) "a") (data (i32.const 194346) "a") (data (i32.const 194349) "a") (data (i32.const 194352) "a") (data (i32.const 194355) "a") (data (i32.const 194358) "a") (data (i32.const 194361) "a") (data (i32.const 194364) "a") (data (i32.const 194367) "a") (data (i32.const 194370) "a") (data (i32.const 194373) "a") (data (i32.const 194376) "a") (data (i32.const 194379) "a") (data (i32.const 194382) "a") (data (i32.const 194385) "a") (data (i32.const 194388) "a") (data (i32.const 194391) "a") (data (i32.const 194394) "a") (data (i32.const 194397) "a") (data (i32.const 194400) "a") (data (i32.const 194403) "a") (data (i32.const 194406) "a") (data (i32.const 194409) "a") (data (i32.const 194412) "a") (data (i32.const 194415) "a") (data (i32.const 194418) "a") (data (i32.const 194421) "a") (data (i32.const 194424) "a") (data (i32.const 194427) "a") (data (i32.const 194430) "a") (data (i32.const 194433) "a") (data (i32.const 194436) "a") (data (i32.const 194439) "a") (data (i32.const 194442) "a") (data (i32.const 194445) "a") (data (i32.const 194448) "a") (data (i32.const 194451) "a") (data (i32.const 194454) "a") (data (i32.const 194457) "a") (data (i32.const 194460) "a") (data (i32.const 194463) "a") (data (i32.const 194466) "a") (data (i32.const 194469) "a") (data (i32.const 194472) "a") (data (i32.const 194475) "a") (data (i32.const 194478) "a") (data (i32.const 194481) "a") (data (i32.const 194484) "a") (data (i32.const 194487) "a") (data (i32.const 194490) "a") (data (i32.const 194493) "a") (data (i32.const 194496) "a") (data (i32.const 194499) "a") (data (i32.const 194502) "a") (data (i32.const 194505) "a") (data (i32.const 194508) "a") (data (i32.const 194511) "a") (data (i32.const 194514) "a") (data (i32.const 194517) "a") (data (i32.const 194520) "a") (data (i32.const 194523) "a") (data (i32.const 194526) "a") (data (i32.const 194529) "a") (data (i32.const 194532) "a") (data (i32.const 194535) "a") (data (i32.const 194538) "a") (data (i32.const 194541) "a") (data (i32.const 194544) "a") (data (i32.const 194547) "a") (data (i32.const 194550) "a") (data (i32.const 194553) "a") (data (i32.const 194556) "a") (data (i32.const 194559) "a") (data (i32.const 194562) "a") (data (i32.const 194565) "a") (data (i32.const 194568) "a") (data (i32.const 194571) "a") (data (i32.const 194574) "a") (data (i32.const 194577) "a") (data (i32.const 194580) "a") (data (i32.const 194583) "a") (data (i32.const 194586) "a") (data (i32.const 194589) "a") (data (i32.const 194592) "a") (data (i32.const 194595) "a") (data (i32.const 194598) "a") (data (i32.const 194601) "a") (data (i32.const 194604) "a") (data (i32.const 194607) "a") (data (i32.const 194610) "a") (data (i32.const 194613) "a") (data (i32.const 194616) "a") (data (i32.const 194619) "a") (data (i32.const 194622) "a") (data (i32.const 194625) "a") (data (i32.const 194628) "a") (data (i32.const 194631) "a") (data (i32.const 194634) "a") (data (i32.const 194637) "a") (data (i32.const 194640) "a") (data (i32.const 194643) "a") (data (i32.const 194646) "a") (data (i32.const 194649) "a") (data (i32.const 194652) "a") (data (i32.const 194655) "a") (data (i32.const 194658) "a") (data (i32.const 194661) "a") (data (i32.const 194664) "a") (data (i32.const 194667) "a") (data (i32.const 194670) "a") (data (i32.const 194673) "a") (data (i32.const 194676) "a") (data (i32.const 194679) "a") (data (i32.const 194682) "a") (data (i32.const 194685) "a") (data (i32.const 194688) "a") (data (i32.const 194691) "a") (data (i32.const 194694) "a") (data (i32.const 194697) "a") (data (i32.const 194700) "a") (data (i32.const 194703) "a") (data (i32.const 194706) "a") (data (i32.const 194709) "a") (data (i32.const 194712) "a") (data (i32.const 194715) "a") (data (i32.const 194718) "a") (data (i32.const 194721) "a") (data (i32.const 194724) "a") (data (i32.const 194727) "a") (data (i32.const 194730) "a") (data (i32.const 194733) "a") (data (i32.const 194736) "a") (data (i32.const 194739) "a") (data (i32.const 194742) "a") (data (i32.const 194745) "a") (data (i32.const 194748) "a") (data (i32.const 194751) "a") (data (i32.const 194754) "a") (data (i32.const 194757) "a") (data (i32.const 194760) "a") (data (i32.const 194763) "a") (data (i32.const 194766) "a") (data (i32.const 194769) "a") (data (i32.const 194772) "a") (data (i32.const 194775) "a") (data (i32.const 194778) "a") (data (i32.const 194781) "a") (data (i32.const 194784) "a") (data (i32.const 194787) "a") (data (i32.const 194790) "a") (data (i32.const 194793) "a") (data (i32.const 194796) "a") (data (i32.const 194799) "a") (data (i32.const 194802) "a") (data (i32.const 194805) "a") (data (i32.const 194808) "a") (data (i32.const 194811) "a") (data (i32.const 194814) "a") (data (i32.const 194817) "a") (data (i32.const 194820) "a") (data (i32.const 194823) "a") (data (i32.const 194826) "a") (data (i32.const 194829) "a") (data (i32.const 194832) "a") (data (i32.const 194835) "a") (data (i32.const 194838) "a") (data (i32.const 194841) "a") (data (i32.const 194844) "a") (data (i32.const 194847) "a") (data (i32.const 194850) "a") (data (i32.const 194853) "a") (data (i32.const 194856) "a") (data (i32.const 194859) "a") (data (i32.const 194862) "a") (data (i32.const 194865) "a") (data (i32.const 194868) "a") (data (i32.const 194871) "a") (data (i32.const 194874) "a") (data (i32.const 194877) "a") (data (i32.const 194880) "a") (data (i32.const 194883) "a") (data (i32.const 194886) "a") (data (i32.const 194889) "a") (data (i32.const 194892) "a") (data (i32.const 194895) "a") (data (i32.const 194898) "a") (data (i32.const 194901) "a") (data (i32.const 194904) "a") (data (i32.const 194907) "a") (data (i32.const 194910) "a") (data (i32.const 194913) "a") (data (i32.const 194916) "a") (data (i32.const 194919) "a") (data (i32.const 194922) "a") (data (i32.const 194925) "a") (data (i32.const 194928) "a") (data (i32.const 194931) "a") (data (i32.const 194934) "a") (data (i32.const 194937) "a") (data (i32.const 194940) "a") (data (i32.const 194943) "a") (data (i32.const 194946) "a") (data (i32.const 194949) "a") (data (i32.const 194952) "a") (data (i32.const 194955) "a") (data (i32.const 194958) "a") (data (i32.const 194961) "a") (data (i32.const 194964) "a") (data (i32.const 194967) "a") (data (i32.const 194970) "a") (data (i32.const 194973) "a") (data (i32.const 194976) "a") (data (i32.const 194979) "a") (data (i32.const 194982) "a") (data (i32.const 194985) "a") (data (i32.const 194988) "a") (data (i32.const 194991) "a") (data (i32.const 194994) "a") (data (i32.const 194997) "a") (data (i32.const 195000) "a") (data (i32.const 195003) "a") (data (i32.const 195006) "a") (data (i32.const 195009) "a") (data (i32.const 195012) "a") (data (i32.const 195015) "a") (data (i32.const 195018) "a") (data (i32.const 195021) "a") (data (i32.const 195024) "a") (data (i32.const 195027) "a") (data (i32.const 195030) "a") (data (i32.const 195033) "a") (data (i32.const 195036) "a") (data (i32.const 195039) "a") (data (i32.const 195042) "a") (data (i32.const 195045) "a") (data (i32.const 195048) "a") (data (i32.const 195051) "a") (data (i32.const 195054) "a") (data (i32.const 195057) "a") (data (i32.const 195060) "a") (data (i32.const 195063) "a") (data (i32.const 195066) "a") (data (i32.const 195069) "a") (data (i32.const 195072) "a") (data (i32.const 195075) "a") (data (i32.const 195078) "a") (data (i32.const 195081) "a") (data (i32.const 195084) "a") (data (i32.const 195087) "a") (data (i32.const 195090) "a") (data (i32.const 195093) "a") (data (i32.const 195096) "a") (data (i32.const 195099) "a") (data (i32.const 195102) "a") (data (i32.const 195105) "a") (data (i32.const 195108) "a") (data (i32.const 195111) "a") (data (i32.const 195114) "a") (data (i32.const 195117) "a") (data (i32.const 195120) "a") (data (i32.const 195123) "a") (data (i32.const 195126) "a") (data (i32.const 195129) "a") (data (i32.const 195132) "a") (data (i32.const 195135) "a") (data (i32.const 195138) "a") (data (i32.const 195141) "a") (data (i32.const 195144) "a") (data (i32.const 195147) "a") (data (i32.const 195150) "a") (data (i32.const 195153) "a") (data (i32.const 195156) "a") (data (i32.const 195159) "a") (data (i32.const 195162) "a") (data (i32.const 195165) "a") (data (i32.const 195168) "a") (data (i32.const 195171) "a") (data (i32.const 195174) "a") (data (i32.const 195177) "a") (data (i32.const 195180) "a") (data (i32.const 195183) "a") (data (i32.const 195186) "a") (data (i32.const 195189) "a") (data (i32.const 195192) "a") (data (i32.const 195195) "a") (data (i32.const 195198) "a") (data (i32.const 195201) "a") (data (i32.const 195204) "a") (data (i32.const 195207) "a") (data (i32.const 195210) "a") (data (i32.const 195213) "a") (data (i32.const 195216) "a") (data (i32.const 195219) "a") (data (i32.const 195222) "a") (data (i32.const 195225) "a") (data (i32.const 195228) "a") (data (i32.const 195231) "a") (data (i32.const 195234) "a") (data (i32.const 195237) "a") (data (i32.const 195240) "a") (data (i32.const 195243) "a") (data (i32.const 195246) "a") (data (i32.const 195249) "a") (data (i32.const 195252) "a") (data (i32.const 195255) "a") (data (i32.const 195258) "a") (data (i32.const 195261) "a") (data (i32.const 195264) "a") (data (i32.const 195267) "a") (data (i32.const 195270) "a") (data (i32.const 195273) "a") (data (i32.const 195276) "a") (data (i32.const 195279) "a") (data (i32.const 195282) "a") (data (i32.const 195285) "a") (data (i32.const 195288) "a") (data (i32.const 195291) "a") (data (i32.const 195294) "a") (data (i32.const 195297) "a") (data (i32.const 195300) "a") (data (i32.const 195303) "a") (data (i32.const 195306) "a") (data (i32.const 195309) "a") (data (i32.const 195312) "a") (data (i32.const 195315) "a") (data (i32.const 195318) "a") (data (i32.const 195321) "a") (data (i32.const 195324) "a") (data (i32.const 195327) "a") (data (i32.const 195330) "a") (data (i32.const 195333) "a") (data (i32.const 195336) "a") (data (i32.const 195339) "a") (data (i32.const 195342) "a") (data (i32.const 195345) "a") (data (i32.const 195348) "a") (data (i32.const 195351) "a") (data (i32.const 195354) "a") (data (i32.const 195357) "a") (data (i32.const 195360) "a") (data (i32.const 195363) "a") (data (i32.const 195366) "a") (data (i32.const 195369) "a") (data (i32.const 195372) "a") (data (i32.const 195375) "a") (data (i32.const 195378) "a") (data (i32.const 195381) "a") (data (i32.const 195384) "a") (data (i32.const 195387) "a") (data (i32.const 195390) "a") (data (i32.const 195393) "a") (data (i32.const 195396) "a") (data (i32.const 195399) "a") (data (i32.const 195402) "a") (data (i32.const 195405) "a") (data (i32.const 195408) "a") (data (i32.const 195411) "a") (data (i32.const 195414) "a") (data (i32.const 195417) "a") (data (i32.const 195420) "a") (data (i32.const 195423) "a") (data (i32.const 195426) "a") (data (i32.const 195429) "a") (data (i32.const 195432) "a") (data (i32.const 195435) "a") (data (i32.const 195438) "a") (data (i32.const 195441) "a") (data (i32.const 195444) "a") (data (i32.const 195447) "a") (data (i32.const 195450) "a") (data (i32.const 195453) "a") (data (i32.const 195456) "a") (data (i32.const 195459) "a") (data (i32.const 195462) "a") (data (i32.const 195465) "a") (data (i32.const 195468) "a") (data (i32.const 195471) "a") (data (i32.const 195474) "a") (data (i32.const 195477) "a") (data (i32.const 195480) "a") (data (i32.const 195483) "a") (data (i32.const 195486) "a") (data (i32.const 195489) "a") (data (i32.const 195492) "a") (data (i32.const 195495) "a") (data (i32.const 195498) "a") (data (i32.const 195501) "a") (data (i32.const 195504) "a") (data (i32.const 195507) "a") (data (i32.const 195510) "a") (data (i32.const 195513) "a") (data (i32.const 195516) "a") (data (i32.const 195519) "a") (data (i32.const 195522) "a") (data (i32.const 195525) "a") (data (i32.const 195528) "a") (data (i32.const 195531) "a") (data (i32.const 195534) "a") (data (i32.const 195537) "a") (data (i32.const 195540) "a") (data (i32.const 195543) "a") (data (i32.const 195546) "a") (data (i32.const 195549) "a") (data (i32.const 195552) "a") (data (i32.const 195555) "a") (data (i32.const 195558) "a") (data (i32.const 195561) "a") (data (i32.const 195564) "a") (data (i32.const 195567) "a") (data (i32.const 195570) "a") (data (i32.const 195573) "a") (data (i32.const 195576) "a") (data (i32.const 195579) "a") (data (i32.const 195582) "a") (data (i32.const 195585) "a") (data (i32.const 195588) "a") (data (i32.const 195591) "a") (data (i32.const 195594) "a") (data (i32.const 195597) "a") (data (i32.const 195600) "a") (data (i32.const 195603) "a") (data (i32.const 195606) "a") (data (i32.const 195609) "a") (data (i32.const 195612) "a") (data (i32.const 195615) "a") (data (i32.const 195618) "a") (data (i32.const 195621) "a") (data (i32.const 195624) "a") (data (i32.const 195627) "a") (data (i32.const 195630) "a") (data (i32.const 195633) "a") (data (i32.const 195636) "a") (data (i32.const 195639) "a") (data (i32.const 195642) "a") (data (i32.const 195645) "a") (data (i32.const 195648) "a") (data (i32.const 195651) "a") (data (i32.const 195654) "a") (data (i32.const 195657) "a") (data (i32.const 195660) "a") (data (i32.const 195663) "a") (data (i32.const 195666) "a") (data (i32.const 195669) "a") (data (i32.const 195672) "a") (data (i32.const 195675) "a") (data (i32.const 195678) "a") (data (i32.const 195681) "a") (data (i32.const 195684) "a") (data (i32.const 195687) "a") (data (i32.const 195690) "a") (data (i32.const 195693) "a") (data (i32.const 195696) "a") (data (i32.const 195699) "a") (data (i32.const 195702) "a") (data (i32.const 195705) "a") (data (i32.const 195708) "a") (data (i32.const 195711) "a") (data (i32.const 195714) "a") (data (i32.const 195717) "a") (data (i32.const 195720) "a") (data (i32.const 195723) "a") (data (i32.const 195726) "a") (data (i32.const 195729) "a") (data (i32.const 195732) "a") (data (i32.const 195735) "a") (data (i32.const 195738) "a") (data (i32.const 195741) "a") (data (i32.const 195744) "a") (data (i32.const 195747) "a") (data (i32.const 195750) "a") (data (i32.const 195753) "a") (data (i32.const 195756) "a") (data (i32.const 195759) "a") (data (i32.const 195762) "a") (data (i32.const 195765) "a") (data (i32.const 195768) "a") (data (i32.const 195771) "a") (data (i32.const 195774) "a") (data (i32.const 195777) "a") (data (i32.const 195780) "a") (data (i32.const 195783) "a") (data (i32.const 195786) "a") (data (i32.const 195789) "a") (data (i32.const 195792) "a") (data (i32.const 195795) "a") (data (i32.const 195798) "a") (data (i32.const 195801) "a") (data (i32.const 195804) "a") (data (i32.const 195807) "a") (data (i32.const 195810) "a") (data (i32.const 195813) "a") (data (i32.const 195816) "a") (data (i32.const 195819) "a") (data (i32.const 195822) "a") (data (i32.const 195825) "a") (data (i32.const 195828) "a") (data (i32.const 195831) "a") (data (i32.const 195834) "a") (data (i32.const 195837) "a") (data (i32.const 195840) "a") (data (i32.const 195843) "a") (data (i32.const 195846) "a") (data (i32.const 195849) "a") (data (i32.const 195852) "a") (data (i32.const 195855) "a") (data (i32.const 195858) "a") (data (i32.const 195861) "a") (data (i32.const 195864) "a") (data (i32.const 195867) "a") (data (i32.const 195870) "a") (data (i32.const 195873) "a") (data (i32.const 195876) "a") (data (i32.const 195879) "a") (data (i32.const 195882) "a") (data (i32.const 195885) "a") (data (i32.const 195888) "a") (data (i32.const 195891) "a") (data (i32.const 195894) "a") (data (i32.const 195897) "a") (data (i32.const 195900) "a") (data (i32.const 195903) "a") (data (i32.const 195906) "a") (data (i32.const 195909) "a") (data (i32.const 195912) "a") (data (i32.const 195915) "a") (data (i32.const 195918) "a") (data (i32.const 195921) "a") (data (i32.const 195924) "a") (data (i32.const 195927) "a") (data (i32.const 195930) "a") (data (i32.const 195933) "a") (data (i32.const 195936) "a") (data (i32.const 195939) "a") (data (i32.const 195942) "a") (data (i32.const 195945) "a") (data (i32.const 195948) "a") (data (i32.const 195951) "a") (data (i32.const 195954) "a") (data (i32.const 195957) "a") (data (i32.const 195960) "a") (data (i32.const 195963) "a") (data (i32.const 195966) "a") (data (i32.const 195969) "a") (data (i32.const 195972) "a") (data (i32.const 195975) "a") (data (i32.const 195978) "a") (data (i32.const 195981) "a") (data (i32.const 195984) "a") (data (i32.const 195987) "a") (data (i32.const 195990) "a") (data (i32.const 195993) "a") (data (i32.const 195996) "a") (data (i32.const 195999) "a") (data (i32.const 196002) "a") (data (i32.const 196005) "a") (data (i32.const 196008) "a") (data (i32.const 196011) "a") (data (i32.const 196014) "a") (data (i32.const 196017) "a") (data (i32.const 196020) "a") (data (i32.const 196023) "a") (data (i32.const 196026) "a") (data (i32.const 196029) "a") (data (i32.const 196032) "a") (data (i32.const 196035) "a") (data (i32.const 196038) "a") (data (i32.const 196041) "a") (data (i32.const 196044) "a") (data (i32.const 196047) "a") (data (i32.const 196050) "a") (data (i32.const 196053) "a") (data (i32.const 196056) "a") (data (i32.const 196059) "a") (data (i32.const 196062) "a") (data (i32.const 196065) "a") (data (i32.const 196068) "a") (data (i32.const 196071) "a") (data (i32.const 196074) "a") (data (i32.const 196077) "a") (data (i32.const 196080) "a") (data (i32.const 196083) "a") (data (i32.const 196086) "a") (data (i32.const 196089) "a") (data (i32.const 196092) "a") (data (i32.const 196095) "a") (data (i32.const 196098) "a") (data (i32.const 196101) "a") (data (i32.const 196104) "a") (data (i32.const 196107) "a") (data (i32.const 196110) "a") (data (i32.const 196113) "a") (data (i32.const 196116) "a") (data (i32.const 196119) "a") (data (i32.const 196122) "a") (data (i32.const 196125) "a") (data (i32.const 196128) "a") (data (i32.const 196131) "a") (data (i32.const 196134) "a") (data (i32.const 196137) "a") (data (i32.const 196140) "a") (data (i32.const 196143) "a") (data (i32.const 196146) "a") (data (i32.const 196149) "a") (data (i32.const 196152) "a") (data (i32.const 196155) "a") (data (i32.const 196158) "a") (data (i32.const 196161) "a") (data (i32.const 196164) "a") (data (i32.const 196167) "a") (data (i32.const 196170) "a") (data (i32.const 196173) "a") (data (i32.const 196176) "a") (data (i32.const 196179) "a") (data (i32.const 196182) "a") (data (i32.const 196185) "a") (data (i32.const 196188) "a") (data (i32.const 196191) "a") (data (i32.const 196194) "a") (data (i32.const 196197) "a") (data (i32.const 196200) "a") (data (i32.const 196203) "a") (data (i32.const 196206) "a") (data (i32.const 196209) "a") (data (i32.const 196212) "a") (data (i32.const 196215) "a") (data (i32.const 196218) "a") (data (i32.const 196221) "a") (data (i32.const 196224) "a") (data (i32.const 196227) "a") (data (i32.const 196230) "a") (data (i32.const 196233) "a") (data (i32.const 196236) "a") (data (i32.const 196239) "a") (data (i32.const 196242) "a") (data (i32.const 196245) "a") (data (i32.const 196248) "a") (data (i32.const 196251) "a") (data (i32.const 196254) "a") (data (i32.const 196257) "a") (data (i32.const 196260) "a") (data (i32.const 196263) "a") (data (i32.const 196266) "a") (data (i32.const 196269) "a") (data (i32.const 196272) "a") (data (i32.const 196275) "a") (data (i32.const 196278) "a") (data (i32.const 196281) "a") (data (i32.const 196284) "a") (data (i32.const 196287) "a") (data (i32.const 196290) "a") (data (i32.const 196293) "a") (data (i32.const 196296) "a") (data (i32.const 196299) "a") (data (i32.const 196302) "a") (data (i32.const 196305) "a") (data (i32.const 196308) "a") (data (i32.const 196311) "a") (data (i32.const 196314) "a") (data (i32.const 196317) "a") (data (i32.const 196320) "a") (data (i32.const 196323) "a") (data (i32.const 196326) "a") (data (i32.const 196329) "a") (data (i32.const 196332) "a") (data (i32.const 196335) "a") (data (i32.const 196338) "a") (data (i32.const 196341) "a") (data (i32.const 196344) "a") (data (i32.const 196347) "a") (data (i32.const 196350) "a") (data (i32.const 196353) "a") (data (i32.const 196356) "a") (data (i32.const 196359) "a") (data (i32.const 196362) "a") (data (i32.const 196365) "a") (data (i32.const 196368) "a") (data (i32.const 196371) "a") (data (i32.const 196374) "a") (data (i32.const 196377) "a") (data (i32.const 196380) "a") (data (i32.const 196383) "a") (data (i32.const 196386) "a") (data (i32.const 196389) "a") (data (i32.const 196392) "a") (data (i32.const 196395) "a") (data (i32.const 196398) "a") (data (i32.const 196401) "a") (data (i32.const 196404) "a") (data (i32.const 196407) "a") (data (i32.const 196410) "a") (data (i32.const 196413) "a") (data (i32.const 196416) "a") (data (i32.const 196419) "a") (data (i32.const 196422) "a") (data (i32.const 196425) "a") (data (i32.const 196428) "a") (data (i32.const 196431) "a") (data (i32.const 196434) "a") (data (i32.const 196437) "a") (data (i32.const 196440) "a") (data (i32.const 196443) "a") (data (i32.const 196446) "a") (data (i32.const 196449) "a") (data (i32.const 196452) "a") (data (i32.const 196455) "a") (data (i32.const 196458) "a") (data (i32.const 196461) "a") (data (i32.const 196464) "a") (data (i32.const 196467) "a") (data (i32.const 196470) "a") (data (i32.const 196473) "a") (data (i32.const 196476) "a") (data (i32.const 196479) "a") (data (i32.const 196482) "a") (data (i32.const 196485) "a") (data (i32.const 196488) "a") (data (i32.const 196491) "a") (data (i32.const 196494) "a") (data (i32.const 196497) "a") (data (i32.const 196500) "a") (data (i32.const 196503) "a") (data (i32.const 196506) "a") (data (i32.const 196509) "a") (data (i32.const 196512) "a") (data (i32.const 196515) "a") (data (i32.const 196518) "a") (data (i32.const 196521) "a") (data (i32.const 196524) "a") (data (i32.const 196527) "a") (data (i32.const 196530) "a") (data (i32.const 196533) "a") (data (i32.const 196536) "a") (data (i32.const 196539) "a") (data (i32.const 196542) "a") (data (i32.const 196545) "a") (data (i32.const 196548) "a") (data (i32.const 196551) "a") (data (i32.const 196554) "a") (data (i32.const 196557) "a") (data (i32.const 196560) "a") (data (i32.const 196563) "a") (data (i32.const 196566) "a") (data (i32.const 196569) "a") (data (i32.const 196572) "a") (data (i32.const 196575) "a") (data (i32.const 196578) "a") (data (i32.const 196581) "a") (data (i32.const 196584) "a") (data (i32.const 196587) "a") (data (i32.const 196590) "a") (data (i32.const 196593) "a") (data (i32.const 196596) "a") (data (i32.const 196599) "a") (data (i32.const 196602) "a") (data (i32.const 196605) "a") (data (i32.const 196608) "a") (data (i32.const 196611) "a") (data (i32.const 196614) "a") (data (i32.const 196617) "a") (data (i32.const 196620) "a") (data (i32.const 196623) "a") (data (i32.const 196626) "a") (data (i32.const 196629) "a") (data (i32.const 196632) "a") (data (i32.const 196635) "a") (data (i32.const 196638) "a") (data (i32.const 196641) "a") (data (i32.const 196644) "a") (data (i32.const 196647) "a") (data (i32.const 196650) "a") (data (i32.const 196653) "a") (data (i32.const 196656) "a") (data (i32.const 196659) "a") (data (i32.const 196662) "a") (data (i32.const 196665) "a") (data (i32.const 196668) "a") (data (i32.const 196671) "a") (data (i32.const 196674) "a") (data (i32.const 196677) "a") (data (i32.const 196680) "a") (data (i32.const 196683) "a") (data (i32.const 196686) "a") (data (i32.const 196689) "a") (data (i32.const 196692) "a") (data (i32.const 196695) "a") (data (i32.const 196698) "a") (data (i32.const 196701) "a") (data (i32.const 196704) "a") (data (i32.const 196707) "a") (data (i32.const 196710) "a") (data (i32.const 196713) "a") (data (i32.const 196716) "a") (data (i32.const 196719) "a") (data (i32.const 196722) "a") (data (i32.const 196725) "a") (data (i32.const 196728) "a") (data (i32.const 196731) "a") (data (i32.const 196734) "a") (data (i32.const 196737) "a") (data (i32.const 196740) "a") (data (i32.const 196743) "a") (data (i32.const 196746) "a") (data (i32.const 196749) "a") (data (i32.const 196752) "a") (data (i32.const 196755) "a") (data (i32.const 196758) "a") (data (i32.const 196761) "a") (data (i32.const 196764) "a") (data (i32.const 196767) "a") (data (i32.const 196770) "a") (data (i32.const 196773) "a") (data (i32.const 196776) "a") (data (i32.const 196779) "a") (data (i32.const 196782) "a") (data (i32.const 196785) "a") (data (i32.const 196788) "a") (data (i32.const 196791) "a") (data (i32.const 196794) "a") (data (i32.const 196797) "a") (data (i32.const 196800) "a") (data (i32.const 196803) "a") (data (i32.const 196806) "a") (data (i32.const 196809) "a") (data (i32.const 196812) "a") (data (i32.const 196815) "a") (data (i32.const 196818) "a") (data (i32.const 196821) "a") (data (i32.const 196824) "a") (data (i32.const 196827) "a") (data (i32.const 196830) "a") (data (i32.const 196833) "a") (data (i32.const 196836) "a") (data (i32.const 196839) "a") (data (i32.const 196842) "a") (data (i32.const 196845) "a") (data (i32.const 196848) "a") (data (i32.const 196851) "a") (data (i32.const 196854) "a") (data (i32.const 196857) "a") (data (i32.const 196860) "a") (data (i32.const 196863) "a") (data (i32.const 196866) "a") (data (i32.const 196869) "a") (data (i32.const 196872) "a") (data (i32.const 196875) "a") (data (i32.const 196878) "a") (data (i32.const 196881) "a") (data (i32.const 196884) "a") (data (i32.const 196887) "a") (data (i32.const 196890) "a") (data (i32.const 196893) "a") (data (i32.const 196896) "a") (data (i32.const 196899) "a") (data (i32.const 196902) "a") (data (i32.const 196905) "a") (data (i32.const 196908) "a") (data (i32.const 196911) "a") (data (i32.const 196914) "a") (data (i32.const 196917) "a") (data (i32.const 196920) "a") (data (i32.const 196923) "a") (data (i32.const 196926) "a") (data (i32.const 196929) "a") (data (i32.const 196932) "a") (data (i32.const 196935) "a") (data (i32.const 196938) "a") (data (i32.const 196941) "a") (data (i32.const 196944) "a") (data (i32.const 196947) "a") (data (i32.const 196950) "a") (data (i32.const 196953) "a") (data (i32.const 196956) "a") (data (i32.const 196959) "a") (data (i32.const 196962) "a") (data (i32.const 196965) "a") (data (i32.const 196968) "a") (data (i32.const 196971) "a") (data (i32.const 196974) "a") (data (i32.const 196977) "a") (data (i32.const 196980) "a") (data (i32.const 196983) "a") (data (i32.const 196986) "a") (data (i32.const 196989) "a") (data (i32.const 196992) "a") (data (i32.const 196995) "a") (data (i32.const 196998) "a") (data (i32.const 197001) "a") (data (i32.const 197004) "a") (data (i32.const 197007) "a") (data (i32.const 197010) "a") (data (i32.const 197013) "a") (data (i32.const 197016) "a") (data (i32.const 197019) "a") (data (i32.const 197022) "a") (data (i32.const 197025) "a") (data (i32.const 197028) "a") (data (i32.const 197031) "a") (data (i32.const 197034) "a") (data (i32.const 197037) "a") (data (i32.const 197040) "a") (data (i32.const 197043) "a") (data (i32.const 197046) "a") (data (i32.const 197049) "a") (data (i32.const 197052) "a") (data (i32.const 197055) "a") (data (i32.const 197058) "a") (data (i32.const 197061) "a") (data (i32.const 197064) "a") (data (i32.const 197067) "a") (data (i32.const 197070) "a") (data (i32.const 197073) "a") (data (i32.const 197076) "a") (data (i32.const 197079) "a") (data (i32.const 197082) "a") (data (i32.const 197085) "a") (data (i32.const 197088) "a") (data (i32.const 197091) "a") (data (i32.const 197094) "a") (data (i32.const 197097) "a") (data (i32.const 197100) "a") (data (i32.const 197103) "a") (data (i32.const 197106) "a") (data (i32.const 197109) "a") (data (i32.const 197112) "a") (data (i32.const 197115) "a") (data (i32.const 197118) "a") (data (i32.const 197121) "a") (data (i32.const 197124) "a") (data (i32.const 197127) "a") (data (i32.const 197130) "a") (data (i32.const 197133) "a") (data (i32.const 197136) "a") (data (i32.const 197139) "a") (data (i32.const 197142) "a") (data (i32.const 197145) "a") (data (i32.const 197148) "a") (data (i32.const 197151) "a") (data (i32.const 197154) "a") (data (i32.const 197157) "a") (data (i32.const 197160) "a") (data (i32.const 197163) "a") (data (i32.const 197166) "a") (data (i32.const 197169) "a") (data (i32.const 197172) "a") (data (i32.const 197175) "a") (data (i32.const 197178) "a") (data (i32.const 197181) "a") (data (i32.const 197184) "a") (data (i32.const 197187) "a") (data (i32.const 197190) "a") (data (i32.const 197193) "a") (data (i32.const 197196) "a") (data (i32.const 197199) "a") (data (i32.const 197202) "a") (data (i32.const 197205) "a") (data (i32.const 197208) "a") (data (i32.const 197211) "a") (data (i32.const 197214) "a") (data (i32.const 197217) "a") (data (i32.const 197220) "a") (data (i32.const 197223) "a") (data (i32.const 197226) "a") (data (i32.const 197229) "a") (data (i32.const 197232) "a") (data (i32.const 197235) "a") (data (i32.const 197238) "a") (data (i32.const 197241) "a") (data (i32.const 197244) "a") (data (i32.const 197247) "a") (data (i32.const 197250) "a") (data (i32.const 197253) "a") (data (i32.const 197256) "a") (data (i32.const 197259) "a") (data (i32.const 197262) "a") (data (i32.const 197265) "a") (data (i32.const 197268) "a") (data (i32.const 197271) "a") (data (i32.const 197274) "a") (data (i32.const 197277) "a") (data (i32.const 197280) "a") (data (i32.const 197283) "a") (data (i32.const 197286) "a") (data (i32.const 197289) "a") (data (i32.const 197292) "a") (data (i32.const 197295) "a") (data (i32.const 197298) "a") (data (i32.const 197301) "a") (data (i32.const 197304) "a") (data (i32.const 197307) "a") (data (i32.const 197310) "a") (data (i32.const 197313) "a") (data (i32.const 197316) "a") (data (i32.const 197319) "a") (data (i32.const 197322) "a") (data (i32.const 197325) "a") (data (i32.const 197328) "a") (data (i32.const 197331) "a") (data (i32.const 197334) "a") (data (i32.const 197337) "a") (data (i32.const 197340) "a") (data (i32.const 197343) "a") (data (i32.const 197346) "a") (data (i32.const 197349) "a") (data (i32.const 197352) "a") (data (i32.const 197355) "a") (data (i32.const 197358) "a") (data (i32.const 197361) "a") (data (i32.const 197364) "a") (data (i32.const 197367) "a") (data (i32.const 197370) "a") (data (i32.const 197373) "a") (data (i32.const 197376) "a") (data (i32.const 197379) "a") (data (i32.const 197382) "a") (data (i32.const 197385) "a") (data (i32.const 197388) "a") (data (i32.const 197391) "a") (data (i32.const 197394) "a") (data (i32.const 197397) "a") (data (i32.const 197400) "a") (data (i32.const 197403) "a") (data (i32.const 197406) "a") (data (i32.const 197409) "a") (data (i32.const 197412) "a") (data (i32.const 197415) "a") (data (i32.const 197418) "a") (data (i32.const 197421) "a") (data (i32.const 197424) "a") (data (i32.const 197427) "a") (data (i32.const 197430) "a") (data (i32.const 197433) "a") (data (i32.const 197436) "a") (data (i32.const 197439) "a") (data (i32.const 197442) "a") (data (i32.const 197445) "a") (data (i32.const 197448) "a") (data (i32.const 197451) "a") (data (i32.const 197454) "a") (data (i32.const 197457) "a") (data (i32.const 197460) "a") (data (i32.const 197463) "a") (data (i32.const 197466) "a") (data (i32.const 197469) "a") (data (i32.const 197472) "a") (data (i32.const 197475) "a") (data (i32.const 197478) "a") (data (i32.const 197481) "a") (data (i32.const 197484) "a") (data (i32.const 197487) "a") (data (i32.const 197490) "a") (data (i32.const 197493) "a") (data (i32.const 197496) "a") (data (i32.const 197499) "a") (data (i32.const 197502) "a") (data (i32.const 197505) "a") (data (i32.const 197508) "a") (data (i32.const 197511) "a") (data (i32.const 197514) "a") (data (i32.const 197517) "a") (data (i32.const 197520) "a") (data (i32.const 197523) "a") (data (i32.const 197526) "a") (data (i32.const 197529) "a") (data (i32.const 197532) "a") (data (i32.const 197535) "a") (data (i32.const 197538) "a") (data (i32.const 197541) "a") (data (i32.const 197544) "a") (data (i32.const 197547) "a") (data (i32.const 197550) "a") (data (i32.const 197553) "a") (data (i32.const 197556) "a") (data (i32.const 197559) "a") (data (i32.const 197562) "a") (data (i32.const 197565) "a") (data (i32.const 197568) "a") (data (i32.const 197571) "a") (data (i32.const 197574) "a") (data (i32.const 197577) "a") (data (i32.const 197580) "a") (data (i32.const 197583) "a") (data (i32.const 197586) "a") (data (i32.const 197589) "a") (data (i32.const 197592) "a") (data (i32.const 197595) "a") (data (i32.const 197598) "a") (data (i32.const 197601) "a") (data (i32.const 197604) "a") (data (i32.const 197607) "a") (data (i32.const 197610) "a") (data (i32.const 197613) "a") (data (i32.const 197616) "a") (data (i32.const 197619) "a") (data (i32.const 197622) "a") (data (i32.const 197625) "a") (data (i32.const 197628) "a") (data (i32.const 197631) "a") (data (i32.const 197634) "a") (data (i32.const 197637) "a") (data (i32.const 197640) "a") (data (i32.const 197643) "a") (data (i32.const 197646) "a") (data (i32.const 197649) "a") (data (i32.const 197652) "a") (data (i32.const 197655) "a") (data (i32.const 197658) "a") (data (i32.const 197661) "a") (data (i32.const 197664) "a") (data (i32.const 197667) "a") (data (i32.const 197670) "a") (data (i32.const 197673) "a") (data (i32.const 197676) "a") (data (i32.const 197679) "a") (data (i32.const 197682) "a") (data (i32.const 197685) "a") (data (i32.const 197688) "a") (data (i32.const 197691) "a") (data (i32.const 197694) "a") (data (i32.const 197697) "a") (data (i32.const 197700) "a") (data (i32.const 197703) "a") (data (i32.const 197706) "a") (data (i32.const 197709) "a") (data (i32.const 197712) "a") (data (i32.const 197715) "a") (data (i32.const 197718) "a") (data (i32.const 197721) "a") (data (i32.const 197724) "a") (data (i32.const 197727) "a") (data (i32.const 197730) "a") (data (i32.const 197733) "a") (data (i32.const 197736) "a") (data (i32.const 197739) "a") (data (i32.const 197742) "a") (data (i32.const 197745) "a") (data (i32.const 197748) "a") (data (i32.const 197751) "a") (data (i32.const 197754) "a") (data (i32.const 197757) "a") (data (i32.const 197760) "a") (data (i32.const 197763) "a") (data (i32.const 197766) "a") (data (i32.const 197769) "a") (data (i32.const 197772) "a") (data (i32.const 197775) "a") (data (i32.const 197778) "a") (data (i32.const 197781) "a") (data (i32.const 197784) "a") (data (i32.const 197787) "a") (data (i32.const 197790) "a") (data (i32.const 197793) "a") (data (i32.const 197796) "a") (data (i32.const 197799) "a") (data (i32.const 197802) "a") (data (i32.const 197805) "a") (data (i32.const 197808) "a") (data (i32.const 197811) "a") (data (i32.const 197814) "a") (data (i32.const 197817) "a") (data (i32.const 197820) "a") (data (i32.const 197823) "a") (data (i32.const 197826) "a") (data (i32.const 197829) "a") (data (i32.const 197832) "a") (data (i32.const 197835) "a") (data (i32.const 197838) "a") (data (i32.const 197841) "a") (data (i32.const 197844) "a") (data (i32.const 197847) "a") (data (i32.const 197850) "a") (data (i32.const 197853) "a") (data (i32.const 197856) "a") (data (i32.const 197859) "a") (data (i32.const 197862) "a") (data (i32.const 197865) "a") (data (i32.const 197868) "a") (data (i32.const 197871) "a") (data (i32.const 197874) "a") (data (i32.const 197877) "a") (data (i32.const 197880) "a") (data (i32.const 197883) "a") (data (i32.const 197886) "a") (data (i32.const 197889) "a") (data (i32.const 197892) "a") (data (i32.const 197895) "a") (data (i32.const 197898) "a") (data (i32.const 197901) "a") (data (i32.const 197904) "a") (data (i32.const 197907) "a") (data (i32.const 197910) "a") (data (i32.const 197913) "a") (data (i32.const 197916) "a") (data (i32.const 197919) "a") (data (i32.const 197922) "a") (data (i32.const 197925) "a") (data (i32.const 197928) "a") (data (i32.const 197931) "a") (data (i32.const 197934) "a") (data (i32.const 197937) "a") (data (i32.const 197940) "a") (data (i32.const 197943) "a") (data (i32.const 197946) "a") (data (i32.const 197949) "a") (data (i32.const 197952) "a") (data (i32.const 197955) "a") (data (i32.const 197958) "a") (data (i32.const 197961) "a") (data (i32.const 197964) "a") (data (i32.const 197967) "a") (data (i32.const 197970) "a") (data (i32.const 197973) "a") (data (i32.const 197976) "a") (data (i32.const 197979) "a") (data (i32.const 197982) "a") (data (i32.const 197985) "a") (data (i32.const 197988) "a") (data (i32.const 197991) "a") (data (i32.const 197994) "a") (data (i32.const 197997) "a") (data (i32.const 198000) "a") (data (i32.const 198003) "a") (data (i32.const 198006) "a") (data (i32.const 198009) "a") (data (i32.const 198012) "a") (data (i32.const 198015) "a") (data (i32.const 198018) "a") (data (i32.const 198021) "a") (data (i32.const 198024) "a") (data (i32.const 198027) "a") (data (i32.const 198030) "a") (data (i32.const 198033) "a") (data (i32.const 198036) "a") (data (i32.const 198039) "a") (data (i32.const 198042) "a") (data (i32.const 198045) "a") (data (i32.const 198048) "a") (data (i32.const 198051) "a") (data (i32.const 198054) "a") (data (i32.const 198057) "a") (data (i32.const 198060) "a") (data (i32.const 198063) "a") (data (i32.const 198066) "a") (data (i32.const 198069) "a") (data (i32.const 198072) "a") (data (i32.const 198075) "a") (data (i32.const 198078) "a") (data (i32.const 198081) "a") (data (i32.const 198084) "a") (data (i32.const 198087) "a") (data (i32.const 198090) "a") (data (i32.const 198093) "a") (data (i32.const 198096) "a") (data (i32.const 198099) "a") (data (i32.const 198102) "a") (data (i32.const 198105) "a") (data (i32.const 198108) "a") (data (i32.const 198111) "a") (data (i32.const 198114) "a") (data (i32.const 198117) "a") (data (i32.const 198120) "a") (data (i32.const 198123) "a") (data (i32.const 198126) "a") (data (i32.const 198129) "a") (data (i32.const 198132) "a") (data (i32.const 198135) "a") (data (i32.const 198138) "a") (data (i32.const 198141) "a") (data (i32.const 198144) "a") (data (i32.const 198147) "a") (data (i32.const 198150) "a") (data (i32.const 198153) "a") (data (i32.const 198156) "a") (data (i32.const 198159) "a") (data (i32.const 198162) "a") (data (i32.const 198165) "a") (data (i32.const 198168) "a") (data (i32.const 198171) "a") (data (i32.const 198174) "a") (data (i32.const 198177) "a") (data (i32.const 198180) "a") (data (i32.const 198183) "a") (data (i32.const 198186) "a") (data (i32.const 198189) "a") (data (i32.const 198192) "a") (data (i32.const 198195) "a") (data (i32.const 198198) "a") (data (i32.const 198201) "a") (data (i32.const 198204) "a") (data (i32.const 198207) "a") (data (i32.const 198210) "a") (data (i32.const 198213) "a") (data (i32.const 198216) "a") (data (i32.const 198219) "a") (data (i32.const 198222) "a") (data (i32.const 198225) "a") (data (i32.const 198228) "a") (data (i32.const 198231) "a") (data (i32.const 198234) "a") (data (i32.const 198237) "a") (data (i32.const 198240) "a") (data (i32.const 198243) "a") (data (i32.const 198246) "a") (data (i32.const 198249) "a") (data (i32.const 198252) "a") (data (i32.const 198255) "a") (data (i32.const 198258) "a") (data (i32.const 198261) "a") (data (i32.const 198264) "a") (data (i32.const 198267) "a") (data (i32.const 198270) "a") (data (i32.const 198273) "a") (data (i32.const 198276) "a") (data (i32.const 198279) "a") (data (i32.const 198282) "a") (data (i32.const 198285) "a") (data (i32.const 198288) "a") (data (i32.const 198291) "a") (data (i32.const 198294) "a") (data (i32.const 198297) "a") (data (i32.const 198300) "a") (data (i32.const 198303) "a") (data (i32.const 198306) "a") (data (i32.const 198309) "a") (data (i32.const 198312) "a") (data (i32.const 198315) "a") (data (i32.const 198318) "a") (data (i32.const 198321) "a") (data (i32.const 198324) "a") (data (i32.const 198327) "a") (data (i32.const 198330) "a") (data (i32.const 198333) "a") (data (i32.const 198336) "a") (data (i32.const 198339) "a") (data (i32.const 198342) "a") (data (i32.const 198345) "a") (data (i32.const 198348) "a") (data (i32.const 198351) "a") (data (i32.const 198354) "a") (data (i32.const 198357) "a") (data (i32.const 198360) "a") (data (i32.const 198363) "a") (data (i32.const 198366) "a") (data (i32.const 198369) "a") (data (i32.const 198372) "a") (data (i32.const 198375) "a") (data (i32.const 198378) "a") (data (i32.const 198381) "a") (data (i32.const 198384) "a") (data (i32.const 198387) "a") (data (i32.const 198390) "a") (data (i32.const 198393) "a") (data (i32.const 198396) "a") (data (i32.const 198399) "a") (data (i32.const 198402) "a") (data (i32.const 198405) "a") (data (i32.const 198408) "a") (data (i32.const 198411) "a") (data (i32.const 198414) "a") (data (i32.const 198417) "a") (data (i32.const 198420) "a") (data (i32.const 198423) "a") (data (i32.const 198426) "a") (data (i32.const 198429) "a") (data (i32.const 198432) "a") (data (i32.const 198435) "a") (data (i32.const 198438) "a") (data (i32.const 198441) "a") (data (i32.const 198444) "a") (data (i32.const 198447) "a") (data (i32.const 198450) "a") (data (i32.const 198453) "a") (data (i32.const 198456) "a") (data (i32.const 198459) "a") (data (i32.const 198462) "a") (data (i32.const 198465) "a") (data (i32.const 198468) "a") (data (i32.const 198471) "a") (data (i32.const 198474) "a") (data (i32.const 198477) "a") (data (i32.const 198480) "a") (data (i32.const 198483) "a") (data (i32.const 198486) "a") (data (i32.const 198489) "a") (data (i32.const 198492) "a") (data (i32.const 198495) "a") (data (i32.const 198498) "a") (data (i32.const 198501) "a") (data (i32.const 198504) "a") (data (i32.const 198507) "a") (data (i32.const 198510) "a") (data (i32.const 198513) "a") (data (i32.const 198516) "a") (data (i32.const 198519) "a") (data (i32.const 198522) "a") (data (i32.const 198525) "a") (data (i32.const 198528) "a") (data (i32.const 198531) "a") (data (i32.const 198534) "a") (data (i32.const 198537) "a") (data (i32.const 198540) "a") (data (i32.const 198543) "a") (data (i32.const 198546) "a") (data (i32.const 198549) "a") (data (i32.const 198552) "a") (data (i32.const 198555) "a") (data (i32.const 198558) "a") (data (i32.const 198561) "a") (data (i32.const 198564) "a") (data (i32.const 198567) "a") (data (i32.const 198570) "a") (data (i32.const 198573) "a") (data (i32.const 198576) "a") (data (i32.const 198579) "a") (data (i32.const 198582) "a") (data (i32.const 198585) "a") (data (i32.const 198588) "a") (data (i32.const 198591) "a") (data (i32.const 198594) "a") (data (i32.const 198597) "a") (data (i32.const 198600) "a") (data (i32.const 198603) "a") (data (i32.const 198606) "a") (data (i32.const 198609) "a") (data (i32.const 198612) "a") (data (i32.const 198615) "a") (data (i32.const 198618) "a") (data (i32.const 198621) "a") (data (i32.const 198624) "a") (data (i32.const 198627) "a") (data (i32.const 198630) "a") (data (i32.const 198633) "a") (data (i32.const 198636) "a") (data (i32.const 198639) "a") (data (i32.const 198642) "a") (data (i32.const 198645) "a") (data (i32.const 198648) "a") (data (i32.const 198651) "a") (data (i32.const 198654) "a") (data (i32.const 198657) "a") (data (i32.const 198660) "a") (data (i32.const 198663) "a") (data (i32.const 198666) "a") (data (i32.const 198669) "a") (data (i32.const 198672) "a") (data (i32.const 198675) "a") (data (i32.const 198678) "a") (data (i32.const 198681) "a") (data (i32.const 198684) "a") (data (i32.const 198687) "a") (data (i32.const 198690) "a") (data (i32.const 198693) "a") (data (i32.const 198696) "a") (data (i32.const 198699) "a") (data (i32.const 198702) "a") (data (i32.const 198705) "a") (data (i32.const 198708) "a") (data (i32.const 198711) "a") (data (i32.const 198714) "a") (data (i32.const 198717) "a") (data (i32.const 198720) "a") (data (i32.const 198723) "a") (data (i32.const 198726) "a") (data (i32.const 198729) "a") (data (i32.const 198732) "a") (data (i32.const 198735) "a") (data (i32.const 198738) "a") (data (i32.const 198741) "a") (data (i32.const 198744) "a") (data (i32.const 198747) "a") (data (i32.const 198750) "a") (data (i32.const 198753) "a") (data (i32.const 198756) "a") (data (i32.const 198759) "a") (data (i32.const 198762) "a") (data (i32.const 198765) "a") (data (i32.const 198768) "a") (data (i32.const 198771) "a") (data (i32.const 198774) "a") (data (i32.const 198777) "a") (data (i32.const 198780) "a") (data (i32.const 198783) "a") (data (i32.const 198786) "a") (data (i32.const 198789) "a") (data (i32.const 198792) "a") (data (i32.const 198795) "a") (data (i32.const 198798) "a") (data (i32.const 198801) "a") (data (i32.const 198804) "a") (data (i32.const 198807) "a") (data (i32.const 198810) "a") (data (i32.const 198813) "a") (data (i32.const 198816) "a") (data (i32.const 198819) "a") (data (i32.const 198822) "a") (data (i32.const 198825) "a") (data (i32.const 198828) "a") (data (i32.const 198831) "a") (data (i32.const 198834) "a") (data (i32.const 198837) "a") (data (i32.const 198840) "a") (data (i32.const 198843) "a") (data (i32.const 198846) "a") (data (i32.const 198849) "a") (data (i32.const 198852) "a") (data (i32.const 198855) "a") (data (i32.const 198858) "a") (data (i32.const 198861) "a") (data (i32.const 198864) "a") (data (i32.const 198867) "a") (data (i32.const 198870) "a") (data (i32.const 198873) "a") (data (i32.const 198876) "a") (data (i32.const 198879) "a") (data (i32.const 198882) "a") (data (i32.const 198885) "a") (data (i32.const 198888) "a") (data (i32.const 198891) "a") (data (i32.const 198894) "a") (data (i32.const 198897) "a") (data (i32.const 198900) "a") (data (i32.const 198903) "a") (data (i32.const 198906) "a") (data (i32.const 198909) "a") (data (i32.const 198912) "a") (data (i32.const 198915) "a") (data (i32.const 198918) "a") (data (i32.const 198921) "a") (data (i32.const 198924) "a") (data (i32.const 198927) "a") (data (i32.const 198930) "a") (data (i32.const 198933) "a") (data (i32.const 198936) "a") (data (i32.const 198939) "a") (data (i32.const 198942) "a") (data (i32.const 198945) "a") (data (i32.const 198948) "a") (data (i32.const 198951) "a") (data (i32.const 198954) "a") (data (i32.const 198957) "a") (data (i32.const 198960) "a") (data (i32.const 198963) "a") (data (i32.const 198966) "a") (data (i32.const 198969) "a") (data (i32.const 198972) "a") (data (i32.const 198975) "a") (data (i32.const 198978) "a") (data (i32.const 198981) "a") (data (i32.const 198984) "a") (data (i32.const 198987) "a") (data (i32.const 198990) "a") (data (i32.const 198993) "a") (data (i32.const 198996) "a") (data (i32.const 198999) "a") (data (i32.const 199002) "a") (data (i32.const 199005) "a") (data (i32.const 199008) "a") (data (i32.const 199011) "a") (data (i32.const 199014) "a") (data (i32.const 199017) "a") (data (i32.const 199020) "a") (data (i32.const 199023) "a") (data (i32.const 199026) "a") (data (i32.const 199029) "a") (data (i32.const 199032) "a") (data (i32.const 199035) "a") (data (i32.const 199038) "a") (data (i32.const 199041) "a") (data (i32.const 199044) "a") (data (i32.const 199047) "a") (data (i32.const 199050) "a") (data (i32.const 199053) "a") (data (i32.const 199056) "a") (data (i32.const 199059) "a") (data (i32.const 199062) "a") (data (i32.const 199065) "a") (data (i32.const 199068) "a") (data (i32.const 199071) "a") (data (i32.const 199074) "a") (data (i32.const 199077) "a") (data (i32.const 199080) "a") (data (i32.const 199083) "a") (data (i32.const 199086) "a") (data (i32.const 199089) "a") (data (i32.const 199092) "a") (data (i32.const 199095) "a") (data (i32.const 199098) "a") (data (i32.const 199101) "a") (data (i32.const 199104) "a") (data (i32.const 199107) "a") (data (i32.const 199110) "a") (data (i32.const 199113) "a") (data (i32.const 199116) "a") (data (i32.const 199119) "a") (data (i32.const 199122) "a") (data (i32.const 199125) "a") (data (i32.const 199128) "a") (data (i32.const 199131) "a") (data (i32.const 199134) "a") (data (i32.const 199137) "a") (data (i32.const 199140) "a") (data (i32.const 199143) "a") (data (i32.const 199146) "a") (data (i32.const 199149) "a") (data (i32.const 199152) "a") (data (i32.const 199155) "a") (data (i32.const 199158) "a") (data (i32.const 199161) "a") (data (i32.const 199164) "a") (data (i32.const 199167) "a") (data (i32.const 199170) "a") (data (i32.const 199173) "a") (data (i32.const 199176) "a") (data (i32.const 199179) "a") (data (i32.const 199182) "a") (data (i32.const 199185) "a") (data (i32.const 199188) "a") (data (i32.const 199191) "a") (data (i32.const 199194) "a") (data (i32.const 199197) "a") (data (i32.const 199200) "a") (data (i32.const 199203) "a") (data (i32.const 199206) "a") (data (i32.const 199209) "a") (data (i32.const 199212) "a") (data (i32.const 199215) "a") (data (i32.const 199218) "a") (data (i32.const 199221) "a") (data (i32.const 199224) "a") (data (i32.const 199227) "a") (data (i32.const 199230) "a") (data (i32.const 199233) "a") (data (i32.const 199236) "a") (data (i32.const 199239) "a") (data (i32.const 199242) "a") (data (i32.const 199245) "a") (data (i32.const 199248) "a") (data (i32.const 199251) "a") (data (i32.const 199254) "a") (data (i32.const 199257) "a") (data (i32.const 199260) "a") (data (i32.const 199263) "a") (data (i32.const 199266) "a") (data (i32.const 199269) "a") (data (i32.const 199272) "a") (data (i32.const 199275) "a") (data (i32.const 199278) "a") (data (i32.const 199281) "a") (data (i32.const 199284) "a") (data (i32.const 199287) "a") (data (i32.const 199290) "a") (data (i32.const 199293) "a") (data (i32.const 199296) "a") (data (i32.const 199299) "a") (data (i32.const 199302) "a") (data (i32.const 199305) "a") (data (i32.const 199308) "a") (data (i32.const 199311) "a") (data (i32.const 199314) "a") (data (i32.const 199317) "a") (data (i32.const 199320) "a") (data (i32.const 199323) "a") (data (i32.const 199326) "a") (data (i32.const 199329) "a") (data (i32.const 199332) "a") (data (i32.const 199335) "a") (data (i32.const 199338) "a") (data (i32.const 199341) "a") (data (i32.const 199344) "a") (data (i32.const 199347) "a") (data (i32.const 199350) "a") (data (i32.const 199353) "a") (data (i32.const 199356) "a") (data (i32.const 199359) "a") (data (i32.const 199362) "a") (data (i32.const 199365) "a") (data (i32.const 199368) "a") (data (i32.const 199371) "a") (data (i32.const 199374) "a") (data (i32.const 199377) "a") (data (i32.const 199380) "a") (data (i32.const 199383) "a") (data (i32.const 199386) "a") (data (i32.const 199389) "a") (data (i32.const 199392) "a") (data (i32.const 199395) "a") (data (i32.const 199398) "a") (data (i32.const 199401) "a") (data (i32.const 199404) "a") (data (i32.const 199407) "a") (data (i32.const 199410) "a") (data (i32.const 199413) "a") (data (i32.const 199416) "a") (data (i32.const 199419) "a") (data (i32.const 199422) "a") (data (i32.const 199425) "a") (data (i32.const 199428) "a") (data (i32.const 199431) "a") (data (i32.const 199434) "a") (data (i32.const 199437) "a") (data (i32.const 199440) "a") (data (i32.const 199443) "a") (data (i32.const 199446) "a") (data (i32.const 199449) "a") (data (i32.const 199452) "a") (data (i32.const 199455) "a") (data (i32.const 199458) "a") (data (i32.const 199461) "a") (data (i32.const 199464) "a") (data (i32.const 199467) "a") (data (i32.const 199470) "a") (data (i32.const 199473) "a") (data (i32.const 199476) "a") (data (i32.const 199479) "a") (data (i32.const 199482) "a") (data (i32.const 199485) "a") (data (i32.const 199488) "a") (data (i32.const 199491) "a") (data (i32.const 199494) "a") (data (i32.const 199497) "a") (data (i32.const 199500) "a") (data (i32.const 199503) "a") (data (i32.const 199506) "a") (data (i32.const 199509) "a") (data (i32.const 199512) "a") (data (i32.const 199515) "a") (data (i32.const 199518) "a") (data (i32.const 199521) "a") (data (i32.const 199524) "a") (data (i32.const 199527) "a") (data (i32.const 199530) "a") (data (i32.const 199533) "a") (data (i32.const 199536) "a") (data (i32.const 199539) "a") (data (i32.const 199542) "a") (data (i32.const 199545) "a") (data (i32.const 199548) "a") (data (i32.const 199551) "a") (data (i32.const 199554) "a") (data (i32.const 199557) "a") (data (i32.const 199560) "a") (data (i32.const 199563) "a") (data (i32.const 199566) "a") (data (i32.const 199569) "a") (data (i32.const 199572) "a") (data (i32.const 199575) "a") (data (i32.const 199578) "a") (data (i32.const 199581) "a") (data (i32.const 199584) "a") (data (i32.const 199587) "a") (data (i32.const 199590) "a") (data (i32.const 199593) "a") (data (i32.const 199596) "a") (data (i32.const 199599) "a") (data (i32.const 199602) "a") (data (i32.const 199605) "a") (data (i32.const 199608) "a") (data (i32.const 199611) "a") (data (i32.const 199614) "a") (data (i32.const 199617) "a") (data (i32.const 199620) "a") (data (i32.const 199623) "a") (data (i32.const 199626) "a") (data (i32.const 199629) "a") (data (i32.const 199632) "a") (data (i32.const 199635) "a") (data (i32.const 199638) "a") (data (i32.const 199641) "a") (data (i32.const 199644) "a") (data (i32.const 199647) "a") (data (i32.const 199650) "a") (data (i32.const 199653) "a") (data (i32.const 199656) "a") (data (i32.const 199659) "a") (data (i32.const 199662) "a") (data (i32.const 199665) "a") (data (i32.const 199668) "a") (data (i32.const 199671) "a") (data (i32.const 199674) "a") (data (i32.const 199677) "a") (data (i32.const 199680) "a") (data (i32.const 199683) "a") (data (i32.const 199686) "a") (data (i32.const 199689) "a") (data (i32.const 199692) "a") (data (i32.const 199695) "a") (data (i32.const 199698) "a") (data (i32.const 199701) "a") (data (i32.const 199704) "a") (data (i32.const 199707) "a") (data (i32.const 199710) "a") (data (i32.const 199713) "a") (data (i32.const 199716) "a") (data (i32.const 199719) "a") (data (i32.const 199722) "a") (data (i32.const 199725) "a") (data (i32.const 199728) "a") (data (i32.const 199731) "a") (data (i32.const 199734) "a") (data (i32.const 199737) "a") (data (i32.const 199740) "a") (data (i32.const 199743) "a") (data (i32.const 199746) "a") (data (i32.const 199749) "a") (data (i32.const 199752) "a") (data (i32.const 199755) "a") (data (i32.const 199758) "a") (data (i32.const 199761) "a") (data (i32.const 199764) "a") (data (i32.const 199767) "a") (data (i32.const 199770) "a") (data (i32.const 199773) "a") (data (i32.const 199776) "a") (data (i32.const 199779) "a") (data (i32.const 199782) "a") (data (i32.const 199785) "a") (data (i32.const 199788) "a") (data (i32.const 199791) "a") (data (i32.const 199794) "a") (data (i32.const 199797) "a") (data (i32.const 199800) "a") (data (i32.const 199803) "a") (data (i32.const 199806) "a") (data (i32.const 199809) "a") (data (i32.const 199812) "a") (data (i32.const 199815) "a") (data (i32.const 199818) "a") (data (i32.const 199821) "a") (data (i32.const 199824) "a") (data (i32.const 199827) "a") (data (i32.const 199830) "a") (data (i32.const 199833) "a") (data (i32.const 199836) "a") (data (i32.const 199839) "a") (data (i32.const 199842) "a") (data (i32.const 199845) "a") (data (i32.const 199848) "a") (data (i32.const 199851) "a") (data (i32.const 199854) "a") (data (i32.const 199857) "a") (data (i32.const 199860) "a") (data (i32.const 199863) "a") (data (i32.const 199866) "a") (data (i32.const 199869) "a") (data (i32.const 199872) "a") (data (i32.const 199875) "a") (data (i32.const 199878) "a") (data (i32.const 199881) "a") (data (i32.const 199884) "a") (data (i32.const 199887) "a") (data (i32.const 199890) "a") (data (i32.const 199893) "a") (data (i32.const 199896) "a") (data (i32.const 199899) "a") (data (i32.const 199902) "a") (data (i32.const 199905) "a") (data (i32.const 199908) "a") (data (i32.const 199911) "a") (data (i32.const 199914) "a") (data (i32.const 199917) "a") (data (i32.const 199920) "a") (data (i32.const 199923) "a") (data (i32.const 199926) "a") (data (i32.const 199929) "a") (data (i32.const 199932) "a") (data (i32.const 199935) "a") (data (i32.const 199938) "a") (data (i32.const 199941) "a") (data (i32.const 199944) "a") (data (i32.const 199947) "a") (data (i32.const 199950) "a") (data (i32.const 199953) "a") (data (i32.const 199956) "a") (data (i32.const 199959) "a") (data (i32.const 199962) "a") (data (i32.const 199965) "a") (data (i32.const 199968) "a") (data (i32.const 199971) "a") (data (i32.const 199974) "a") (data (i32.const 199977) "a") (data (i32.const 199980) "a") (data (i32.const 199983) "a") (data (i32.const 199986) "a") (data (i32.const 199989) "a") (data (i32.const 199992) "a") (data (i32.const 199995) "a") (data (i32.const 199998) "a") (data (i32.const 200001) "a") (data (i32.const 200004) "a") (data (i32.const 200007) "a") (data (i32.const 200010) "a") (data (i32.const 200013) "a") (data (i32.const 200016) "a") (data (i32.const 200019) "a") (data (i32.const 200022) "a") (data (i32.const 200025) "a") (data (i32.const 200028) "a") (data (i32.const 200031) "a") (data (i32.const 200034) "a") (data (i32.const 200037) "a") (data (i32.const 200040) "a") (data (i32.const 200043) "a") (data (i32.const 200046) "a") (data (i32.const 200049) "a") (data (i32.const 200052) "a") (data (i32.const 200055) "a") (data (i32.const 200058) "a") (data (i32.const 200061) "a") (data (i32.const 200064) "a") (data (i32.const 200067) "a") (data (i32.const 200070) "a") (data (i32.const 200073) "a") (data (i32.const 200076) "a") (data (i32.const 200079) "a") (data (i32.const 200082) "a") (data (i32.const 200085) "a") (data (i32.const 200088) "a") (data (i32.const 200091) "a") (data (i32.const 200094) "a") (data (i32.const 200097) "a") (data (i32.const 200100) "a") (data (i32.const 200103) "a") (data (i32.const 200106) "a") (data (i32.const 200109) "a") (data (i32.const 200112) "a") (data (i32.const 200115) "a") (data (i32.const 200118) "a") (data (i32.const 200121) "a") (data (i32.const 200124) "a") (data (i32.const 200127) "a") (data (i32.const 200130) "a") (data (i32.const 200133) "a") (data (i32.const 200136) "a") (data (i32.const 200139) "a") (data (i32.const 200142) "a") (data (i32.const 200145) "a") (data (i32.const 200148) "a") (data (i32.const 200151) "a") (data (i32.const 200154) "a") (data (i32.const 200157) "a") (data (i32.const 200160) "a") (data (i32.const 200163) "a") (data (i32.const 200166) "a") (data (i32.const 200169) "a") (data (i32.const 200172) "a") (data (i32.const 200175) "a") (data (i32.const 200178) "a") (data (i32.const 200181) "a") (data (i32.const 200184) "a") (data (i32.const 200187) "a") (data (i32.const 200190) "a") (data (i32.const 200193) "a") (data (i32.const 200196) "a") (data (i32.const 200199) "a") (data (i32.const 200202) "a") (data (i32.const 200205) "a") (data (i32.const 200208) "a") (data (i32.const 200211) "a") (data (i32.const 200214) "a") (data (i32.const 200217) "a") (data (i32.const 200220) "a") (data (i32.const 200223) "a") (data (i32.const 200226) "a") (data (i32.const 200229) "a") (data (i32.const 200232) "a") (data (i32.const 200235) "a") (data (i32.const 200238) "a") (data (i32.const 200241) "a") (data (i32.const 200244) "a") (data (i32.const 200247) "a") (data (i32.const 200250) "a") (data (i32.const 200253) "a") (data (i32.const 200256) "a") (data (i32.const 200259) "a") (data (i32.const 200262) "a") (data (i32.const 200265) "a") (data (i32.const 200268) "a") (data (i32.const 200271) "a") (data (i32.const 200274) "a") (data (i32.const 200277) "a") (data (i32.const 200280) "a") (data (i32.const 200283) "a") (data (i32.const 200286) "a") (data (i32.const 200289) "a") (data (i32.const 200292) "a") (data (i32.const 200295) "a") (data (i32.const 200298) "a") (data (i32.const 200301) "a") (data (i32.const 200304) "a") (data (i32.const 200307) "a") (data (i32.const 200310) "a") (data (i32.const 200313) "a") (data (i32.const 200316) "a") (data (i32.const 200319) "a") (data (i32.const 200322) "a") (data (i32.const 200325) "a") (data (i32.const 200328) "a") (data (i32.const 200331) "a") (data (i32.const 200334) "a") (data (i32.const 200337) "a") (data (i32.const 200340) "a") (data (i32.const 200343) "a") (data (i32.const 200346) "a") (data (i32.const 200349) "a") (data (i32.const 200352) "a") (data (i32.const 200355) "a") (data (i32.const 200358) "a") (data (i32.const 200361) "a") (data (i32.const 200364) "a") (data (i32.const 200367) "a") (data (i32.const 200370) "a") (data (i32.const 200373) "a") (data (i32.const 200376) "a") (data (i32.const 200379) "a") (data (i32.const 200382) "a") (data (i32.const 200385) "a") (data (i32.const 200388) "a") (data (i32.const 200391) "a") (data (i32.const 200394) "a") (data (i32.const 200397) "a") (data (i32.const 200400) "a") (data (i32.const 200403) "a") (data (i32.const 200406) "a") (data (i32.const 200409) "a") (data (i32.const 200412) "a") (data (i32.const 200415) "a") (data (i32.const 200418) "a") (data (i32.const 200421) "a") (data (i32.const 200424) "a") (data (i32.const 200427) "a") (data (i32.const 200430) "a") (data (i32.const 200433) "a") (data (i32.const 200436) "a") (data (i32.const 200439) "a") (data (i32.const 200442) "a") (data (i32.const 200445) "a") (data (i32.const 200448) "a") (data (i32.const 200451) "a") (data (i32.const 200454) "a") (data (i32.const 200457) "a") (data (i32.const 200460) "a") (data (i32.const 200463) "a") (data (i32.const 200466) "a") (data (i32.const 200469) "a") (data (i32.const 200472) "a") (data (i32.const 200475) "a") (data (i32.const 200478) "a") (data (i32.const 200481) "a") (data (i32.const 200484) "a") (data (i32.const 200487) "a") (data (i32.const 200490) "a") (data (i32.const 200493) "a") (data (i32.const 200496) "a") (data (i32.const 200499) "a") (data (i32.const 200502) "a") (data (i32.const 200505) "a") (data (i32.const 200508) "a") (data (i32.const 200511) "a") (data (i32.const 200514) "a") (data (i32.const 200517) "a") (data (i32.const 200520) "a") (data (i32.const 200523) "a") (data (i32.const 200526) "a") (data (i32.const 200529) "a") (data (i32.const 200532) "a") (data (i32.const 200535) "a") (data (i32.const 200538) "a") (data (i32.const 200541) "a") (data (i32.const 200544) "a") (data (i32.const 200547) "a") (data (i32.const 200550) "a") (data (i32.const 200553) "a") (data (i32.const 200556) "a") (data (i32.const 200559) "a") (data (i32.const 200562) "a") (data (i32.const 200565) "a") (data (i32.const 200568) "a") (data (i32.const 200571) "a") (data (i32.const 200574) "a") (data (i32.const 200577) "a") (data (i32.const 200580) "a") (data (i32.const 200583) "a") (data (i32.const 200586) "a") (data (i32.const 200589) "a") (data (i32.const 200592) "a") (data (i32.const 200595) "a") (data (i32.const 200598) "a") (data (i32.const 200601) "a") (data (i32.const 200604) "a") (data (i32.const 200607) "a") (data (i32.const 200610) "a") (data (i32.const 200613) "a") (data (i32.const 200616) "a") (data (i32.const 200619) "a") (data (i32.const 200622) "a") (data (i32.const 200625) "a") (data (i32.const 200628) "a") (data (i32.const 200631) "a") (data (i32.const 200634) "a") (data (i32.const 200637) "a") (data (i32.const 200640) "a") (data (i32.const 200643) "a") (data (i32.const 200646) "a") (data (i32.const 200649) "a") (data (i32.const 200652) "a") (data (i32.const 200655) "a") (data (i32.const 200658) "a") (data (i32.const 200661) "a") (data (i32.const 200664) "a") (data (i32.const 200667) "a") (data (i32.const 200670) "a") (data (i32.const 200673) "a") (data (i32.const 200676) "a") (data (i32.const 200679) "a") (data (i32.const 200682) "a") (data (i32.const 200685) "a") (data (i32.const 200688) "a") (data (i32.const 200691) "a") (data (i32.const 200694) "a") (data (i32.const 200697) "a") (data (i32.const 200700) "a") (data (i32.const 200703) "a") (data (i32.const 200706) "a") (data (i32.const 200709) "a") (data (i32.const 200712) "a") (data (i32.const 200715) "a") (data (i32.const 200718) "a") (data (i32.const 200721) "a") (data (i32.const 200724) "a") (data (i32.const 200727) "a") (data (i32.const 200730) "a") (data (i32.const 200733) "a") (data (i32.const 200736) "a") (data (i32.const 200739) "a") (data (i32.const 200742) "a") (data (i32.const 200745) "a") (data (i32.const 200748) "a") (data (i32.const 200751) "a") (data (i32.const 200754) "a") (data (i32.const 200757) "a") (data (i32.const 200760) "a") (data (i32.const 200763) "a") (data (i32.const 200766) "a") (data (i32.const 200769) "a") (data (i32.const 200772) "a") (data (i32.const 200775) "a") (data (i32.const 200778) "a") (data (i32.const 200781) "a") (data (i32.const 200784) "a") (data (i32.const 200787) "a") (data (i32.const 200790) "a") (data (i32.const 200793) "a") (data (i32.const 200796) "a") (data (i32.const 200799) "a") (data (i32.const 200802) "a") (data (i32.const 200805) "a") (data (i32.const 200808) "a") (data (i32.const 200811) "a") (data (i32.const 200814) "a") (data (i32.const 200817) "a") (data (i32.const 200820) "a") (data (i32.const 200823) "a") (data (i32.const 200826) "a") (data (i32.const 200829) "a") (data (i32.const 200832) "a") (data (i32.const 200835) "a") (data (i32.const 200838) "a") (data (i32.const 200841) "a") (data (i32.const 200844) "a") (data (i32.const 200847) "a") (data (i32.const 200850) "a") (data (i32.const 200853) "a") (data (i32.const 200856) "a") (data (i32.const 200859) "a") (data (i32.const 200862) "a") (data (i32.const 200865) "a") (data (i32.const 200868) "a") (data (i32.const 200871) "a") (data (i32.const 200874) "a") (data (i32.const 200877) "a") (data (i32.const 200880) "a") (data (i32.const 200883) "a") (data (i32.const 200886) "a") (data (i32.const 200889) "a") (data (i32.const 200892) "a") (data (i32.const 200895) "a") (data (i32.const 200898) "a") (data (i32.const 200901) "a") (data (i32.const 200904) "a") (data (i32.const 200907) "a") (data (i32.const 200910) "a") (data (i32.const 200913) "a") (data (i32.const 200916) "a") (data (i32.const 200919) "a") (data (i32.const 200922) "a") (data (i32.const 200925) "a") (data (i32.const 200928) "a") (data (i32.const 200931) "a") (data (i32.const 200934) "a") (data (i32.const 200937) "a") (data (i32.const 200940) "a") (data (i32.const 200943) "a") (data (i32.const 200946) "a") (data (i32.const 200949) "a") (data (i32.const 200952) "a") (data (i32.const 200955) "a") (data (i32.const 200958) "a") (data (i32.const 200961) "a") (data (i32.const 200964) "a") (data (i32.const 200967) "a") (data (i32.const 200970) "a") (data (i32.const 200973) "a") (data (i32.const 200976) "a") (data (i32.const 200979) "a") (data (i32.const 200982) "a") (data (i32.const 200985) "a") (data (i32.const 200988) "a") (data (i32.const 200991) "a") (data (i32.const 200994) "a") (data (i32.const 200997) "a") (data (i32.const 201000) "a") (data (i32.const 201003) "a") (data (i32.const 201006) "a") (data (i32.const 201009) "a") (data (i32.const 201012) "a") (data (i32.const 201015) "a") (data (i32.const 201018) "a") (data (i32.const 201021) "a") (data (i32.const 201024) "a") (data (i32.const 201027) "a") (data (i32.const 201030) "a") (data (i32.const 201033) "a") (data (i32.const 201036) "a") (data (i32.const 201039) "a") (data (i32.const 201042) "a") (data (i32.const 201045) "a") (data (i32.const 201048) "a") (data (i32.const 201051) "a") (data (i32.const 201054) "a") (data (i32.const 201057) "a") (data (i32.const 201060) "a") (data (i32.const 201063) "a") (data (i32.const 201066) "a") (data (i32.const 201069) "a") (data (i32.const 201072) "a") (data (i32.const 201075) "a") (data (i32.const 201078) "a") (data (i32.const 201081) "a") (data (i32.const 201084) "a") (data (i32.const 201087) "a") (data (i32.const 201090) "a") (data (i32.const 201093) "a") (data (i32.const 201096) "a") (data (i32.const 201099) "a") (data (i32.const 201102) "a") (data (i32.const 201105) "a") (data (i32.const 201108) "a") (data (i32.const 201111) "a") (data (i32.const 201114) "a") (data (i32.const 201117) "a") (data (i32.const 201120) "a") (data (i32.const 201123) "a") (data (i32.const 201126) "a") (data (i32.const 201129) "a") (data (i32.const 201132) "a") (data (i32.const 201135) "a") (data (i32.const 201138) "a") (data (i32.const 201141) "a") (data (i32.const 201144) "a") (data (i32.const 201147) "a") (data (i32.const 201150) "a") (data (i32.const 201153) "a") (data (i32.const 201156) "a") (data (i32.const 201159) "a") (data (i32.const 201162) "a") (data (i32.const 201165) "a") (data (i32.const 201168) "a") (data (i32.const 201171) "a") (data (i32.const 201174) "a") (data (i32.const 201177) "a") (data (i32.const 201180) "a") (data (i32.const 201183) "a") (data (i32.const 201186) "a") (data (i32.const 201189) "a") (data (i32.const 201192) "a") (data (i32.const 201195) "a") (data (i32.const 201198) "a") (data (i32.const 201201) "a") (data (i32.const 201204) "a") (data (i32.const 201207) "a") (data (i32.const 201210) "a") (data (i32.const 201213) "a") (data (i32.const 201216) "a") (data (i32.const 201219) "a") (data (i32.const 201222) "a") (data (i32.const 201225) "a") (data (i32.const 201228) "a") (data (i32.const 201231) "a") (data (i32.const 201234) "a") (data (i32.const 201237) "a") (data (i32.const 201240) "a") (data (i32.const 201243) "a") (data (i32.const 201246) "a") (data (i32.const 201249) "a") (data (i32.const 201252) "a") (data (i32.const 201255) "a") (data (i32.const 201258) "a") (data (i32.const 201261) "a") (data (i32.const 201264) "a") (data (i32.const 201267) "a") (data (i32.const 201270) "a") (data (i32.const 201273) "a") (data (i32.const 201276) "a") (data (i32.const 201279) "a") (data (i32.const 201282) "a") (data (i32.const 201285) "a") (data (i32.const 201288) "a") (data (i32.const 201291) "a") (data (i32.const 201294) "a") (data (i32.const 201297) "a") (data (i32.const 201300) "a") (data (i32.const 201303) "a") (data (i32.const 201306) "a") (data (i32.const 201309) "a") (data (i32.const 201312) "a") (data (i32.const 201315) "a") (data (i32.const 201318) "a") (data (i32.const 201321) "a") (data (i32.const 201324) "a") (data (i32.const 201327) "a") (data (i32.const 201330) "a") (data (i32.const 201333) "a") (data (i32.const 201336) "a") (data (i32.const 201339) "a") (data (i32.const 201342) "a") (data (i32.const 201345) "a") (data (i32.const 201348) "a") (data (i32.const 201351) "a") (data (i32.const 201354) "a") (data (i32.const 201357) "a") (data (i32.const 201360) "a") (data (i32.const 201363) "a") (data (i32.const 201366) "a") (data (i32.const 201369) "a") (data (i32.const 201372) "a") (data (i32.const 201375) "a") (data (i32.const 201378) "a") (data (i32.const 201381) "a") (data (i32.const 201384) "a") (data (i32.const 201387) "a") (data (i32.const 201390) "a") (data (i32.const 201393) "a") (data (i32.const 201396) "a") (data (i32.const 201399) "a") (data (i32.const 201402) "a") (data (i32.const 201405) "a") (data (i32.const 201408) "a") (data (i32.const 201411) "a") (data (i32.const 201414) "a") (data (i32.const 201417) "a") (data (i32.const 201420) "a") (data (i32.const 201423) "a") (data (i32.const 201426) "a") (data (i32.const 201429) "a") (data (i32.const 201432) "a") (data (i32.const 201435) "a") (data (i32.const 201438) "a") (data (i32.const 201441) "a") (data (i32.const 201444) "a") (data (i32.const 201447) "a") (data (i32.const 201450) "a") (data (i32.const 201453) "a") (data (i32.const 201456) "a") (data (i32.const 201459) "a") (data (i32.const 201462) "a") (data (i32.const 201465) "a") (data (i32.const 201468) "a") (data (i32.const 201471) "a") (data (i32.const 201474) "a") (data (i32.const 201477) "a") (data (i32.const 201480) "a") (data (i32.const 201483) "a") (data (i32.const 201486) "a") (data (i32.const 201489) "a") (data (i32.const 201492) "a") (data (i32.const 201495) "a") (data (i32.const 201498) "a") (data (i32.const 201501) "a") (data (i32.const 201504) "a") (data (i32.const 201507) "a") (data (i32.const 201510) "a") (data (i32.const 201513) "a") (data (i32.const 201516) "a") (data (i32.const 201519) "a") (data (i32.const 201522) "a") (data (i32.const 201525) "a") (data (i32.const 201528) "a") (data (i32.const 201531) "a") (data (i32.const 201534) "a") (data (i32.const 201537) "a") (data (i32.const 201540) "a") (data (i32.const 201543) "a") (data (i32.const 201546) "a") (data (i32.const 201549) "a") (data (i32.const 201552) "a") (data (i32.const 201555) "a") (data (i32.const 201558) "a") (data (i32.const 201561) "a") (data (i32.const 201564) "a") (data (i32.const 201567) "a") (data (i32.const 201570) "a") (data (i32.const 201573) "a") (data (i32.const 201576) "a") (data (i32.const 201579) "a") (data (i32.const 201582) "a") (data (i32.const 201585) "a") (data (i32.const 201588) "a") (data (i32.const 201591) "a") (data (i32.const 201594) "a") (data (i32.const 201597) "a") (data (i32.const 201600) "a") (data (i32.const 201603) "a") (data (i32.const 201606) "a") (data (i32.const 201609) "a") (data (i32.const 201612) "a") (data (i32.const 201615) "a") (data (i32.const 201618) "a") (data (i32.const 201621) "a") (data (i32.const 201624) "a") (data (i32.const 201627) "a") (data (i32.const 201630) "a") (data (i32.const 201633) "a") (data (i32.const 201636) "a") (data (i32.const 201639) "a") (data (i32.const 201642) "a") (data (i32.const 201645) "a") (data (i32.const 201648) "a") (data (i32.const 201651) "a") (data (i32.const 201654) "a") (data (i32.const 201657) "a") (data (i32.const 201660) "a") (data (i32.const 201663) "a") (data (i32.const 201666) "a") (data (i32.const 201669) "a") (data (i32.const 201672) "a") (data (i32.const 201675) "a") (data (i32.const 201678) "a") (data (i32.const 201681) "a") (data (i32.const 201684) "a") (data (i32.const 201687) "a") (data (i32.const 201690) "a") (data (i32.const 201693) "a") (data (i32.const 201696) "a") (data (i32.const 201699) "a") (data (i32.const 201702) "a") (data (i32.const 201705) "a") (data (i32.const 201708) "a") (data (i32.const 201711) "a") (data (i32.const 201714) "a") (data (i32.const 201717) "a") (data (i32.const 201720) "a") (data (i32.const 201723) "a") (data (i32.const 201726) "a") (data (i32.const 201729) "a") (data (i32.const 201732) "a") (data (i32.const 201735) "a") (data (i32.const 201738) "a") (data (i32.const 201741) "a") (data (i32.const 201744) "a") (data (i32.const 201747) "a") (data (i32.const 201750) "a") (data (i32.const 201753) "a") (data (i32.const 201756) "a") (data (i32.const 201759) "a") (data (i32.const 201762) "a") (data (i32.const 201765) "a") (data (i32.const 201768) "a") (data (i32.const 201771) "a") (data (i32.const 201774) "a") (data (i32.const 201777) "a") (data (i32.const 201780) "a") (data (i32.const 201783) "a") (data (i32.const 201786) "a") (data (i32.const 201789) "a") (data (i32.const 201792) "a") (data (i32.const 201795) "a") (data (i32.const 201798) "a") (data (i32.const 201801) "a") (data (i32.const 201804) "a") (data (i32.const 201807) "a") (data (i32.const 201810) "a") (data (i32.const 201813) "a") (data (i32.const 201816) "a") (data (i32.const 201819) "a") (data (i32.const 201822) "a") (data (i32.const 201825) "a") (data (i32.const 201828) "a") (data (i32.const 201831) "a") (data (i32.const 201834) "a") (data (i32.const 201837) "a") (data (i32.const 201840) "a") (data (i32.const 201843) "a") (data (i32.const 201846) "a") (data (i32.const 201849) "a") (data (i32.const 201852) "a") (data (i32.const 201855) "a") (data (i32.const 201858) "a") (data (i32.const 201861) "a") (data (i32.const 201864) "a") (data (i32.const 201867) "a") (data (i32.const 201870) "a") (data (i32.const 201873) "a") (data (i32.const 201876) "a") (data (i32.const 201879) "a") (data (i32.const 201882) "a") (data (i32.const 201885) "a") (data (i32.const 201888) "a") (data (i32.const 201891) "a") (data (i32.const 201894) "a") (data (i32.const 201897) "a") (data (i32.const 201900) "a") (data (i32.const 201903) "a") (data (i32.const 201906) "a") (data (i32.const 201909) "a") (data (i32.const 201912) "a") (data (i32.const 201915) "a") (data (i32.const 201918) "a") (data (i32.const 201921) "a") (data (i32.const 201924) "a") (data (i32.const 201927) "a") (data (i32.const 201930) "a") (data (i32.const 201933) "a") (data (i32.const 201936) "a") (data (i32.const 201939) "a") (data (i32.const 201942) "a") (data (i32.const 201945) "a") (data (i32.const 201948) "a") (data (i32.const 201951) "a") (data (i32.const 201954) "a") (data (i32.const 201957) "a") (data (i32.const 201960) "a") (data (i32.const 201963) "a") (data (i32.const 201966) "a") (data (i32.const 201969) "a") (data (i32.const 201972) "a") (data (i32.const 201975) "a") (data (i32.const 201978) "a") (data (i32.const 201981) "a") (data (i32.const 201984) "a") (data (i32.const 201987) "a") (data (i32.const 201990) "a") (data (i32.const 201993) "a") (data (i32.const 201996) "a") (data (i32.const 201999) "a") (data (i32.const 202002) "a") (data (i32.const 202005) "a") (data (i32.const 202008) "a") (data (i32.const 202011) "a") (data (i32.const 202014) "a") (data (i32.const 202017) "a") (data (i32.const 202020) "a") (data (i32.const 202023) "a") (data (i32.const 202026) "a") (data (i32.const 202029) "a") (data (i32.const 202032) "a") (data (i32.const 202035) "a") (data (i32.const 202038) "a") (data (i32.const 202041) "a") (data (i32.const 202044) "a") (data (i32.const 202047) "a") (data (i32.const 202050) "a") (data (i32.const 202053) "a") (data (i32.const 202056) "a") (data (i32.const 202059) "a") (data (i32.const 202062) "a") (data (i32.const 202065) "a") (data (i32.const 202068) "a") (data (i32.const 202071) "a") (data (i32.const 202074) "a") (data (i32.const 202077) "a") (data (i32.const 202080) "a") (data (i32.const 202083) "a") (data (i32.const 202086) "a") (data (i32.const 202089) "a") (data (i32.const 202092) "a") (data (i32.const 202095) "a") (data (i32.const 202098) "a") (data (i32.const 202101) "a") (data (i32.const 202104) "a") (data (i32.const 202107) "a") (data (i32.const 202110) "a") (data (i32.const 202113) "a") (data (i32.const 202116) "a") (data (i32.const 202119) "a") (data (i32.const 202122) "a") (data (i32.const 202125) "a") (data (i32.const 202128) "a") (data (i32.const 202131) "a") (data (i32.const 202134) "a") (data (i32.const 202137) "a") (data (i32.const 202140) "a") (data (i32.const 202143) "a") (data (i32.const 202146) "a") (data (i32.const 202149) "a") (data (i32.const 202152) "a") (data (i32.const 202155) "a") (data (i32.const 202158) "a") (data (i32.const 202161) "a") (data (i32.const 202164) "a") (data (i32.const 202167) "a") (data (i32.const 202170) "a") (data (i32.const 202173) "a") (data (i32.const 202176) "a") (data (i32.const 202179) "a") (data (i32.const 202182) "a") (data (i32.const 202185) "a") (data (i32.const 202188) "a") (data (i32.const 202191) "a") (data (i32.const 202194) "a") (data (i32.const 202197) "a") (data (i32.const 202200) "a") (data (i32.const 202203) "a") (data (i32.const 202206) "a") (data (i32.const 202209) "a") (data (i32.const 202212) "a") (data (i32.const 202215) "a") (data (i32.const 202218) "a") (data (i32.const 202221) "a") (data (i32.const 202224) "a") (data (i32.const 202227) "a") (data (i32.const 202230) "a") (data (i32.const 202233) "a") (data (i32.const 202236) "a") (data (i32.const 202239) "a") (data (i32.const 202242) "a") (data (i32.const 202245) "a") (data (i32.const 202248) "a") (data (i32.const 202251) "a") (data (i32.const 202254) "a") (data (i32.const 202257) "a") (data (i32.const 202260) "a") (data (i32.const 202263) "a") (data (i32.const 202266) "a") (data (i32.const 202269) "a") (data (i32.const 202272) "a") (data (i32.const 202275) "a") (data (i32.const 202278) "a") (data (i32.const 202281) "a") (data (i32.const 202284) "a") (data (i32.const 202287) "a") (data (i32.const 202290) "a") (data (i32.const 202293) "a") (data (i32.const 202296) "a") (data (i32.const 202299) "a") (data (i32.const 202302) "a") (data (i32.const 202305) "a") (data (i32.const 202308) "a") (data (i32.const 202311) "a") (data (i32.const 202314) "a") (data (i32.const 202317) "a") (data (i32.const 202320) "a") (data (i32.const 202323) "a") (data (i32.const 202326) "a") (data (i32.const 202329) "a") (data (i32.const 202332) "a") (data (i32.const 202335) "a") (data (i32.const 202338) "a") (data (i32.const 202341) "a") (data (i32.const 202344) "a") (data (i32.const 202347) "a") (data (i32.const 202350) "a") (data (i32.const 202353) "a") (data (i32.const 202356) "a") (data (i32.const 202359) "a") (data (i32.const 202362) "a") (data (i32.const 202365) "a") (data (i32.const 202368) "a") (data (i32.const 202371) "a") (data (i32.const 202374) "a") (data (i32.const 202377) "a") (data (i32.const 202380) "a") (data (i32.const 202383) "a") (data (i32.const 202386) "a") (data (i32.const 202389) "a") (data (i32.const 202392) "a") (data (i32.const 202395) "a") (data (i32.const 202398) "a") (data (i32.const 202401) "a") (data (i32.const 202404) "a") (data (i32.const 202407) "a") (data (i32.const 202410) "a") (data (i32.const 202413) "a") (data (i32.const 202416) "a") (data (i32.const 202419) "a") (data (i32.const 202422) "a") (data (i32.const 202425) "a") (data (i32.const 202428) "a") (data (i32.const 202431) "a") (data (i32.const 202434) "a") (data (i32.const 202437) "a") (data (i32.const 202440) "a") (data (i32.const 202443) "a") (data (i32.const 202446) "a") (data (i32.const 202449) "a") (data (i32.const 202452) "a") (data (i32.const 202455) "a") (data (i32.const 202458) "a") (data (i32.const 202461) "a") (data (i32.const 202464) "a") (data (i32.const 202467) "a") (data (i32.const 202470) "a") (data (i32.const 202473) "a") (data (i32.const 202476) "a") (data (i32.const 202479) "a") (data (i32.const 202482) "a") (data (i32.const 202485) "a") (data (i32.const 202488) "a") (data (i32.const 202491) "a") (data (i32.const 202494) "a") (data (i32.const 202497) "a") (data (i32.const 202500) "a") (data (i32.const 202503) "a") (data (i32.const 202506) "a") (data (i32.const 202509) "a") (data (i32.const 202512) "a") (data (i32.const 202515) "a") (data (i32.const 202518) "a") (data (i32.const 202521) "a") (data (i32.const 202524) "a") (data (i32.const 202527) "a") (data (i32.const 202530) "a") (data (i32.const 202533) "a") (data (i32.const 202536) "a") (data (i32.const 202539) "a") (data (i32.const 202542) "a") (data (i32.const 202545) "a") (data (i32.const 202548) "a") (data (i32.const 202551) "a") (data (i32.const 202554) "a") (data (i32.const 202557) "a") (data (i32.const 202560) "a") (data (i32.const 202563) "a") (data (i32.const 202566) "a") (data (i32.const 202569) "a") (data (i32.const 202572) "a") (data (i32.const 202575) "a") (data (i32.const 202578) "a") (data (i32.const 202581) "a") (data (i32.const 202584) "a") (data (i32.const 202587) "a") (data (i32.const 202590) "a") (data (i32.const 202593) "a") (data (i32.const 202596) "a") (data (i32.const 202599) "a") (data (i32.const 202602) "a") (data (i32.const 202605) "a") (data (i32.const 202608) "a") (data (i32.const 202611) "a") (data (i32.const 202614) "a") (data (i32.const 202617) "a") (data (i32.const 202620) "a") (data (i32.const 202623) "a") (data (i32.const 202626) "a") (data (i32.const 202629) "a") (data (i32.const 202632) "a") (data (i32.const 202635) "a") (data (i32.const 202638) "a") (data (i32.const 202641) "a") (data (i32.const 202644) "a") (data (i32.const 202647) "a") (data (i32.const 202650) "a") (data (i32.const 202653) "a") (data (i32.const 202656) "a") (data (i32.const 202659) "a") (data (i32.const 202662) "a") (data (i32.const 202665) "a") (data (i32.const 202668) "a") (data (i32.const 202671) "a") (data (i32.const 202674) "a") (data (i32.const 202677) "a") (data (i32.const 202680) "a") (data (i32.const 202683) "a") (data (i32.const 202686) "a") (data (i32.const 202689) "a") (data (i32.const 202692) "a") (data (i32.const 202695) "a") (data (i32.const 202698) "a") (data (i32.const 202701) "a") (data (i32.const 202704) "a") (data (i32.const 202707) "a") (data (i32.const 202710) "a") (data (i32.const 202713) "a") (data (i32.const 202716) "a") (data (i32.const 202719) "a") (data (i32.const 202722) "a") (data (i32.const 202725) "a") (data (i32.const 202728) "a") (data (i32.const 202731) "a") (data (i32.const 202734) "a") (data (i32.const 202737) "a") (data (i32.const 202740) "a") (data (i32.const 202743) "a") (data (i32.const 202746) "a") (data (i32.const 202749) "a") (data (i32.const 202752) "a") (data (i32.const 202755) "a") (data (i32.const 202758) "a") (data (i32.const 202761) "a") (data (i32.const 202764) "a") (data (i32.const 202767) "a") (data (i32.const 202770) "a") (data (i32.const 202773) "a") (data (i32.const 202776) "a") (data (i32.const 202779) "a") (data (i32.const 202782) "a") (data (i32.const 202785) "a") (data (i32.const 202788) "a") (data (i32.const 202791) "a") (data (i32.const 202794) "a") (data (i32.const 202797) "a") (data (i32.const 202800) "a") (data (i32.const 202803) "a") (data (i32.const 202806) "a") (data (i32.const 202809) "a") (data (i32.const 202812) "a") (data (i32.const 202815) "a") (data (i32.const 202818) "a") (data (i32.const 202821) "a") (data (i32.const 202824) "a") (data (i32.const 202827) "a") (data (i32.const 202830) "a") (data (i32.const 202833) "a") (data (i32.const 202836) "a") (data (i32.const 202839) "a") (data (i32.const 202842) "a") (data (i32.const 202845) "a") (data (i32.const 202848) "a") (data (i32.const 202851) "a") (data (i32.const 202854) "a") (data (i32.const 202857) "a") (data (i32.const 202860) "a") (data (i32.const 202863) "a") (data (i32.const 202866) "a") (data (i32.const 202869) "a") (data (i32.const 202872) "a") (data (i32.const 202875) "a") (data (i32.const 202878) "a") (data (i32.const 202881) "a") (data (i32.const 202884) "a") (data (i32.const 202887) "a") (data (i32.const 202890) "a") (data (i32.const 202893) "a") (data (i32.const 202896) "a") (data (i32.const 202899) "a") (data (i32.const 202902) "a") (data (i32.const 202905) "a") (data (i32.const 202908) "a") (data (i32.const 202911) "a") (data (i32.const 202914) "a") (data (i32.const 202917) "a") (data (i32.const 202920) "a") (data (i32.const 202923) "a") (data (i32.const 202926) "a") (data (i32.const 202929) "a") (data (i32.const 202932) "a") (data (i32.const 202935) "a") (data (i32.const 202938) "a") (data (i32.const 202941) "a") (data (i32.const 202944) "a") (data (i32.const 202947) "a") (data (i32.const 202950) "a") (data (i32.const 202953) "a") (data (i32.const 202956) "a") (data (i32.const 202959) "a") (data (i32.const 202962) "a") (data (i32.const 202965) "a") (data (i32.const 202968) "a") (data (i32.const 202971) "a") (data (i32.const 202974) "a") (data (i32.const 202977) "a") (data (i32.const 202980) "a") (data (i32.const 202983) "a") (data (i32.const 202986) "a") (data (i32.const 202989) "a") (data (i32.const 202992) "a") (data (i32.const 202995) "a") (data (i32.const 202998) "a") (data (i32.const 203001) "a") (data (i32.const 203004) "a") (data (i32.const 203007) "a") (data (i32.const 203010) "a") (data (i32.const 203013) "a") (data (i32.const 203016) "a") (data (i32.const 203019) "a") (data (i32.const 203022) "a") (data (i32.const 203025) "a") (data (i32.const 203028) "a") (data (i32.const 203031) "a") (data (i32.const 203034) "a") (data (i32.const 203037) "a") (data (i32.const 203040) "a") (data (i32.const 203043) "a") (data (i32.const 203046) "a") (data (i32.const 203049) "a") (data (i32.const 203052) "a") (data (i32.const 203055) "a") (data (i32.const 203058) "a") (data (i32.const 203061) "a") (data (i32.const 203064) "a") (data (i32.const 203067) "a") (data (i32.const 203070) "a") (data (i32.const 203073) "a") (data (i32.const 203076) "a") (data (i32.const 203079) "a") (data (i32.const 203082) "a") (data (i32.const 203085) "a") (data (i32.const 203088) "a") (data (i32.const 203091) "a") (data (i32.const 203094) "a") (data (i32.const 203097) "a") (data (i32.const 203100) "a") (data (i32.const 203103) "a") (data (i32.const 203106) "a") (data (i32.const 203109) "a") (data (i32.const 203112) "a") (data (i32.const 203115) "a") (data (i32.const 203118) "a") (data (i32.const 203121) "a") (data (i32.const 203124) "a") (data (i32.const 203127) "a") (data (i32.const 203130) "a") (data (i32.const 203133) "a") (data (i32.const 203136) "a") (data (i32.const 203139) "a") (data (i32.const 203142) "a") (data (i32.const 203145) "a") (data (i32.const 203148) "a") (data (i32.const 203151) "a") (data (i32.const 203154) "a") (data (i32.const 203157) "a") (data (i32.const 203160) "a") (data (i32.const 203163) "a") (data (i32.const 203166) "a") (data (i32.const 203169) "a") (data (i32.const 203172) "a") (data (i32.const 203175) "a") (data (i32.const 203178) "a") (data (i32.const 203181) "a") (data (i32.const 203184) "a") (data (i32.const 203187) "a") (data (i32.const 203190) "a") (data (i32.const 203193) "a") (data (i32.const 203196) "a") (data (i32.const 203199) "a") (data (i32.const 203202) "a") (data (i32.const 203205) "a") (data (i32.const 203208) "a") (data (i32.const 203211) "a") (data (i32.const 203214) "a") (data (i32.const 203217) "a") (data (i32.const 203220) "a") (data (i32.const 203223) "a") (data (i32.const 203226) "a") (data (i32.const 203229) "a") (data (i32.const 203232) "a") (data (i32.const 203235) "a") (data (i32.const 203238) "a") (data (i32.const 203241) "a") (data (i32.const 203244) "a") (data (i32.const 203247) "a") (data (i32.const 203250) "a") (data (i32.const 203253) "a") (data (i32.const 203256) "a") (data (i32.const 203259) "a") (data (i32.const 203262) "a") (data (i32.const 203265) "a") (data (i32.const 203268) "a") (data (i32.const 203271) "a") (data (i32.const 203274) "a") (data (i32.const 203277) "a") (data (i32.const 203280) "a") (data (i32.const 203283) "a") (data (i32.const 203286) "a") (data (i32.const 203289) "a") (data (i32.const 203292) "a") (data (i32.const 203295) "a") (data (i32.const 203298) "a") (data (i32.const 203301) "a") (data (i32.const 203304) "a") (data (i32.const 203307) "a") (data (i32.const 203310) "a") (data (i32.const 203313) "a") (data (i32.const 203316) "a") (data (i32.const 203319) "a") (data (i32.const 203322) "a") (data (i32.const 203325) "a") (data (i32.const 203328) "a") (data (i32.const 203331) "a") (data (i32.const 203334) "a") (data (i32.const 203337) "a") (data (i32.const 203340) "a") (data (i32.const 203343) "a") (data (i32.const 203346) "a") (data (i32.const 203349) "a") (data (i32.const 203352) "a") (data (i32.const 203355) "a") (data (i32.const 203358) "a") (data (i32.const 203361) "a") (data (i32.const 203364) "a") (data (i32.const 203367) "a") (data (i32.const 203370) "a") (data (i32.const 203373) "a") (data (i32.const 203376) "a") (data (i32.const 203379) "a") (data (i32.const 203382) "a") (data (i32.const 203385) "a") (data (i32.const 203388) "a") (data (i32.const 203391) "a") (data (i32.const 203394) "a") (data (i32.const 203397) "a") (data (i32.const 203400) "a") (data (i32.const 203403) "a") (data (i32.const 203406) "a") (data (i32.const 203409) "a") (data (i32.const 203412) "a") (data (i32.const 203415) "a") (data (i32.const 203418) "a") (data (i32.const 203421) "a") (data (i32.const 203424) "a") (data (i32.const 203427) "a") (data (i32.const 203430) "a") (data (i32.const 203433) "a") (data (i32.const 203436) "a") (data (i32.const 203439) "a") (data (i32.const 203442) "a") (data (i32.const 203445) "a") (data (i32.const 203448) "a") (data (i32.const 203451) "a") (data (i32.const 203454) "a") (data (i32.const 203457) "a") (data (i32.const 203460) "a") (data (i32.const 203463) "a") (data (i32.const 203466) "a") (data (i32.const 203469) "a") (data (i32.const 203472) "a") (data (i32.const 203475) "a") (data (i32.const 203478) "a") (data (i32.const 203481) "a") (data (i32.const 203484) "a") (data (i32.const 203487) "a") (data (i32.const 203490) "a") (data (i32.const 203493) "a") (data (i32.const 203496) "a") (data (i32.const 203499) "a") (data (i32.const 203502) "a") (data (i32.const 203505) "a") (data (i32.const 203508) "a") (data (i32.const 203511) "a") (data (i32.const 203514) "a") (data (i32.const 203517) "a") (data (i32.const 203520) "a") (data (i32.const 203523) "a") (data (i32.const 203526) "a") (data (i32.const 203529) "a") (data (i32.const 203532) "a") (data (i32.const 203535) "a") (data (i32.const 203538) "a") (data (i32.const 203541) "a") (data (i32.const 203544) "a") (data (i32.const 203547) "a") (data (i32.const 203550) "a") (data (i32.const 203553) "a") (data (i32.const 203556) "a") (data (i32.const 203559) "a") (data (i32.const 203562) "a") (data (i32.const 203565) "a") (data (i32.const 203568) "a") (data (i32.const 203571) "a") (data (i32.const 203574) "a") (data (i32.const 203577) "a") (data (i32.const 203580) "a") (data (i32.const 203583) "a") (data (i32.const 203586) "a") (data (i32.const 203589) "a") (data (i32.const 203592) "a") (data (i32.const 203595) "a") (data (i32.const 203598) "a") (data (i32.const 203601) "a") (data (i32.const 203604) "a") (data (i32.const 203607) "a") (data (i32.const 203610) "a") (data (i32.const 203613) "a") (data (i32.const 203616) "a") (data (i32.const 203619) "a") (data (i32.const 203622) "a") (data (i32.const 203625) "a") (data (i32.const 203628) "a") (data (i32.const 203631) "a") (data (i32.const 203634) "a") (data (i32.const 203637) "a") (data (i32.const 203640) "a") (data (i32.const 203643) "a") (data (i32.const 203646) "a") (data (i32.const 203649) "a") (data (i32.const 203652) "a") (data (i32.const 203655) "a") (data (i32.const 203658) "a") (data (i32.const 203661) "a") (data (i32.const 203664) "a") (data (i32.const 203667) "a") (data (i32.const 203670) "a") (data (i32.const 203673) "a") (data (i32.const 203676) "a") (data (i32.const 203679) "a") (data (i32.const 203682) "a") (data (i32.const 203685) "a") (data (i32.const 203688) "a") (data (i32.const 203691) "a") (data (i32.const 203694) "a") (data (i32.const 203697) "a") (data (i32.const 203700) "a") (data (i32.const 203703) "a") (data (i32.const 203706) "a") (data (i32.const 203709) "a") (data (i32.const 203712) "a") (data (i32.const 203715) "a") (data (i32.const 203718) "a") (data (i32.const 203721) "a") (data (i32.const 203724) "a") (data (i32.const 203727) "a") (data (i32.const 203730) "a") (data (i32.const 203733) "a") (data (i32.const 203736) "a") (data (i32.const 203739) "a") (data (i32.const 203742) "a") (data (i32.const 203745) "a") (data (i32.const 203748) "a") (data (i32.const 203751) "a") (data (i32.const 203754) "a") (data (i32.const 203757) "a") (data (i32.const 203760) "a") (data (i32.const 203763) "a") (data (i32.const 203766) "a") (data (i32.const 203769) "a") (data (i32.const 203772) "a") (data (i32.const 203775) "a") (data (i32.const 203778) "a") (data (i32.const 203781) "a") (data (i32.const 203784) "a") (data (i32.const 203787) "a") (data (i32.const 203790) "a") (data (i32.const 203793) "a") (data (i32.const 203796) "a") (data (i32.const 203799) "a") (data (i32.const 203802) "a") (data (i32.const 203805) "a") (data (i32.const 203808) "a") (data (i32.const 203811) "a") (data (i32.const 203814) "a") (data (i32.const 203817) "a") (data (i32.const 203820) "a") (data (i32.const 203823) "a") (data (i32.const 203826) "a") (data (i32.const 203829) "a") (data (i32.const 203832) "a") (data (i32.const 203835) "a") (data (i32.const 203838) "a") (data (i32.const 203841) "a") (data (i32.const 203844) "a") (data (i32.const 203847) "a") (data (i32.const 203850) "a") (data (i32.const 203853) "a") (data (i32.const 203856) "a") (data (i32.const 203859) "a") (data (i32.const 203862) "a") (data (i32.const 203865) "a") (data (i32.const 203868) "a") (data (i32.const 203871) "a") (data (i32.const 203874) "a") (data (i32.const 203877) "a") (data (i32.const 203880) "a") (data (i32.const 203883) "a") (data (i32.const 203886) "a") (data (i32.const 203889) "a") (data (i32.const 203892) "a") (data (i32.const 203895) "a") (data (i32.const 203898) "a") (data (i32.const 203901) "a") (data (i32.const 203904) "a") (data (i32.const 203907) "a") (data (i32.const 203910) "a") (data (i32.const 203913) "a") (data (i32.const 203916) "a") (data (i32.const 203919) "a") (data (i32.const 203922) "a") (data (i32.const 203925) "a") (data (i32.const 203928) "a") (data (i32.const 203931) "a") (data (i32.const 203934) "a") (data (i32.const 203937) "a") (data (i32.const 203940) "a") (data (i32.const 203943) "a") (data (i32.const 203946) "a") (data (i32.const 203949) "a") (data (i32.const 203952) "a") (data (i32.const 203955) "a") (data (i32.const 203958) "a") (data (i32.const 203961) "a") (data (i32.const 203964) "a") (data (i32.const 203967) "a") (data (i32.const 203970) "a") (data (i32.const 203973) "a") (data (i32.const 203976) "a") (data (i32.const 203979) "a") (data (i32.const 203982) "a") (data (i32.const 203985) "a") (data (i32.const 203988) "a") (data (i32.const 203991) "a") (data (i32.const 203994) "a") (data (i32.const 203997) "a") (data (i32.const 204000) "a") (data (i32.const 204003) "a") (data (i32.const 204006) "a") (data (i32.const 204009) "a") (data (i32.const 204012) "a") (data (i32.const 204015) "a") (data (i32.const 204018) "a") (data (i32.const 204021) "a") (data (i32.const 204024) "a") (data (i32.const 204027) "a") (data (i32.const 204030) "a") (data (i32.const 204033) "a") (data (i32.const 204036) "a") (data (i32.const 204039) "a") (data (i32.const 204042) "a") (data (i32.const 204045) "a") (data (i32.const 204048) "a") (data (i32.const 204051) "a") (data (i32.const 204054) "a") (data (i32.const 204057) "a") (data (i32.const 204060) "a") (data (i32.const 204063) "a") (data (i32.const 204066) "a") (data (i32.const 204069) "a") (data (i32.const 204072) "a") (data (i32.const 204075) "a") (data (i32.const 204078) "a") (data (i32.const 204081) "a") (data (i32.const 204084) "a") (data (i32.const 204087) "a") (data (i32.const 204090) "a") (data (i32.const 204093) "a") (data (i32.const 204096) "a") (data (i32.const 204099) "a") (data (i32.const 204102) "a") (data (i32.const 204105) "a") (data (i32.const 204108) "a") (data (i32.const 204111) "a") (data (i32.const 204114) "a") (data (i32.const 204117) "a") (data (i32.const 204120) "a") (data (i32.const 204123) "a") (data (i32.const 204126) "a") (data (i32.const 204129) "a") (data (i32.const 204132) "a") (data (i32.const 204135) "a") (data (i32.const 204138) "a") (data (i32.const 204141) "a") (data (i32.const 204144) "a") (data (i32.const 204147) "a") (data (i32.const 204150) "a") (data (i32.const 204153) "a") (data (i32.const 204156) "a") (data (i32.const 204159) "a") (data (i32.const 204162) "a") (data (i32.const 204165) "a") (data (i32.const 204168) "a") (data (i32.const 204171) "a") (data (i32.const 204174) "a") (data (i32.const 204177) "a") (data (i32.const 204180) "a") (data (i32.const 204183) "a") (data (i32.const 204186) "a") (data (i32.const 204189) "a") (data (i32.const 204192) "a") (data (i32.const 204195) "a") (data (i32.const 204198) "a") (data (i32.const 204201) "a") (data (i32.const 204204) "a") (data (i32.const 204207) "a") (data (i32.const 204210) "a") (data (i32.const 204213) "a") (data (i32.const 204216) "a") (data (i32.const 204219) "a") (data (i32.const 204222) "a") (data (i32.const 204225) "a") (data (i32.const 204228) "a") (data (i32.const 204231) "a") (data (i32.const 204234) "a") (data (i32.const 204237) "a") (data (i32.const 204240) "a") (data (i32.const 204243) "a") (data (i32.const 204246) "a") (data (i32.const 204249) "a") (data (i32.const 204252) "a") (data (i32.const 204255) "a") (data (i32.const 204258) "a") (data (i32.const 204261) "a") (data (i32.const 204264) "a") (data (i32.const 204267) "a") (data (i32.const 204270) "a") (data (i32.const 204273) "a") (data (i32.const 204276) "a") (data (i32.const 204279) "a") (data (i32.const 204282) "a") (data (i32.const 204285) "a") (data (i32.const 204288) "a") (data (i32.const 204291) "a") (data (i32.const 204294) "a") (data (i32.const 204297) "a") (data (i32.const 204300) "a") (data (i32.const 204303) "a") (data (i32.const 204306) "a") (data (i32.const 204309) "a") (data (i32.const 204312) "a") (data (i32.const 204315) "a") (data (i32.const 204318) "a") (data (i32.const 204321) "a") (data (i32.const 204324) "a") (data (i32.const 204327) "a") (data (i32.const 204330) "a") (data (i32.const 204333) "a") (data (i32.const 204336) "a") (data (i32.const 204339) "a") (data (i32.const 204342) "a") (data (i32.const 204345) "a") (data (i32.const 204348) "a") (data (i32.const 204351) "a") (data (i32.const 204354) "a") (data (i32.const 204357) "a") (data (i32.const 204360) "a") (data (i32.const 204363) "a") (data (i32.const 204366) "a") (data (i32.const 204369) "a") (data (i32.const 204372) "a") (data (i32.const 204375) "a") (data (i32.const 204378) "a") (data (i32.const 204381) "a") (data (i32.const 204384) "a") (data (i32.const 204387) "a") (data (i32.const 204390) "a") (data (i32.const 204393) "a") (data (i32.const 204396) "a") (data (i32.const 204399) "a") (data (i32.const 204402) "a") (data (i32.const 204405) "a") (data (i32.const 204408) "a") (data (i32.const 204411) "a") (data (i32.const 204414) "a") (data (i32.const 204417) "a") (data (i32.const 204420) "a") (data (i32.const 204423) "a") (data (i32.const 204426) "a") (data (i32.const 204429) "a") (data (i32.const 204432) "a") (data (i32.const 204435) "a") (data (i32.const 204438) "a") (data (i32.const 204441) "a") (data (i32.const 204444) "a") (data (i32.const 204447) "a") (data (i32.const 204450) "a") (data (i32.const 204453) "a") (data (i32.const 204456) "a") (data (i32.const 204459) "a") (data (i32.const 204462) "a") (data (i32.const 204465) "a") (data (i32.const 204468) "a") (data (i32.const 204471) "a") (data (i32.const 204474) "a") (data (i32.const 204477) "a") (data (i32.const 204480) "a") (data (i32.const 204483) "a") (data (i32.const 204486) "a") (data (i32.const 204489) "a") (data (i32.const 204492) "a") (data (i32.const 204495) "a") (data (i32.const 204498) "a") (data (i32.const 204501) "a") (data (i32.const 204504) "a") (data (i32.const 204507) "a") (data (i32.const 204510) "a") (data (i32.const 204513) "a") (data (i32.const 204516) "a") (data (i32.const 204519) "a") (data (i32.const 204522) "a") (data (i32.const 204525) "a") (data (i32.const 204528) "a") (data (i32.const 204531) "a") (data (i32.const 204534) "a") (data (i32.const 204537) "a") (data (i32.const 204540) "a") (data (i32.const 204543) "a") (data (i32.const 204546) "a") (data (i32.const 204549) "a") (data (i32.const 204552) "a") (data (i32.const 204555) "a") (data (i32.const 204558) "a") (data (i32.const 204561) "a") (data (i32.const 204564) "a") (data (i32.const 204567) "a") (data (i32.const 204570) "a") (data (i32.const 204573) "a") (data (i32.const 204576) "a") (data (i32.const 204579) "a") (data (i32.const 204582) "a") (data (i32.const 204585) "a") (data (i32.const 204588) "a") (data (i32.const 204591) "a") (data (i32.const 204594) "a") (data (i32.const 204597) "a") (data (i32.const 204600) "a") (data (i32.const 204603) "a") (data (i32.const 204606) "a") (data (i32.const 204609) "a") (data (i32.const 204612) "a") (data (i32.const 204615) "a") (data (i32.const 204618) "a") (data (i32.const 204621) "a") (data (i32.const 204624) "a") (data (i32.const 204627) "a") (data (i32.const 204630) "a") (data (i32.const 204633) "a") (data (i32.const 204636) "a") (data (i32.const 204639) "a") (data (i32.const 204642) "a") (data (i32.const 204645) "a") (data (i32.const 204648) "a") (data (i32.const 204651) "a") (data (i32.const 204654) "a") (data (i32.const 204657) "a") (data (i32.const 204660) "a") (data (i32.const 204663) "a") (data (i32.const 204666) "a") (data (i32.const 204669) "a") (data (i32.const 204672) "a") (data (i32.const 204675) "a") (data (i32.const 204678) "a") (data (i32.const 204681) "a") (data (i32.const 204684) "a") (data (i32.const 204687) "a") (data (i32.const 204690) "a") (data (i32.const 204693) "a") (data (i32.const 204696) "a") (data (i32.const 204699) "a") (data (i32.const 204702) "a") (data (i32.const 204705) "a") (data (i32.const 204708) "a") (data (i32.const 204711) "a") (data (i32.const 204714) "a") (data (i32.const 204717) "a") (data (i32.const 204720) "a") (data (i32.const 204723) "a") (data (i32.const 204726) "a") (data (i32.const 204729) "a") (data (i32.const 204732) "a") (data (i32.const 204735) "a") (data (i32.const 204738) "a") (data (i32.const 204741) "a") (data (i32.const 204744) "a") (data (i32.const 204747) "a") (data (i32.const 204750) "a") (data (i32.const 204753) "a") (data (i32.const 204756) "a") (data (i32.const 204759) "a") (data (i32.const 204762) "a") (data (i32.const 204765) "a") (data (i32.const 204768) "a") (data (i32.const 204771) "a") (data (i32.const 204774) "a") (data (i32.const 204777) "a") (data (i32.const 204780) "a") (data (i32.const 204783) "a") (data (i32.const 204786) "a") (data (i32.const 204789) "a") (data (i32.const 204792) "a") (data (i32.const 204795) "a") (data (i32.const 204798) "a") (data (i32.const 204801) "a") (data (i32.const 204804) "a") (data (i32.const 204807) "a") (data (i32.const 204810) "a") (data (i32.const 204813) "a") (data (i32.const 204816) "a") (data (i32.const 204819) "a") (data (i32.const 204822) "a") (data (i32.const 204825) "a") (data (i32.const 204828) "a") (data (i32.const 204831) "a") (data (i32.const 204834) "a") (data (i32.const 204837) "a") (data (i32.const 204840) "a") (data (i32.const 204843) "a") (data (i32.const 204846) "a") (data (i32.const 204849) "a") (data (i32.const 204852) "a") (data (i32.const 204855) "a") (data (i32.const 204858) "a") (data (i32.const 204861) "a") (data (i32.const 204864) "a") (data (i32.const 204867) "a") (data (i32.const 204870) "a") (data (i32.const 204873) "a") (data (i32.const 204876) "a") (data (i32.const 204879) "a") (data (i32.const 204882) "a") (data (i32.const 204885) "a") (data (i32.const 204888) "a") (data (i32.const 204891) "a") (data (i32.const 204894) "a") (data (i32.const 204897) "a") (data (i32.const 204900) "a") (data (i32.const 204903) "a") (data (i32.const 204906) "a") (data (i32.const 204909) "a") (data (i32.const 204912) "a") (data (i32.const 204915) "a") (data (i32.const 204918) "a") (data (i32.const 204921) "a") (data (i32.const 204924) "a") (data (i32.const 204927) "a") (data (i32.const 204930) "a") (data (i32.const 204933) "a") (data (i32.const 204936) "a") (data (i32.const 204939) "a") (data (i32.const 204942) "a") (data (i32.const 204945) "a") (data (i32.const 204948) "a") (data (i32.const 204951) "a") (data (i32.const 204954) "a") (data (i32.const 204957) "a") (data (i32.const 204960) "a") (data (i32.const 204963) "a") (data (i32.const 204966) "a") (data (i32.const 204969) "a") (data (i32.const 204972) "a") (data (i32.const 204975) "a") (data (i32.const 204978) "a") (data (i32.const 204981) "a") (data (i32.const 204984) "a") (data (i32.const 204987) "a") (data (i32.const 204990) "a") (data (i32.const 204993) "a") (data (i32.const 204996) "a") (data (i32.const 204999) "a") (data (i32.const 205002) "a") (data (i32.const 205005) "a") (data (i32.const 205008) "a") (data (i32.const 205011) "a") (data (i32.const 205014) "a") (data (i32.const 205017) "a") (data (i32.const 205020) "a") (data (i32.const 205023) "a") (data (i32.const 205026) "a") (data (i32.const 205029) "a") (data (i32.const 205032) "a") (data (i32.const 205035) "a") (data (i32.const 205038) "a") (data (i32.const 205041) "a") (data (i32.const 205044) "a") (data (i32.const 205047) "a") (data (i32.const 205050) "a") (data (i32.const 205053) "a") (data (i32.const 205056) "a") (data (i32.const 205059) "a") (data (i32.const 205062) "a") (data (i32.const 205065) "a") (data (i32.const 205068) "a") (data (i32.const 205071) "a") (data (i32.const 205074) "a") (data (i32.const 205077) "a") (data (i32.const 205080) "a") (data (i32.const 205083) "a") (data (i32.const 205086) "a") (data (i32.const 205089) "a") (data (i32.const 205092) "a") (data (i32.const 205095) "a") (data (i32.const 205098) "a") (data (i32.const 205101) "a") (data (i32.const 205104) "a") (data (i32.const 205107) "a") (data (i32.const 205110) "a") (data (i32.const 205113) "a") (data (i32.const 205116) "a") (data (i32.const 205119) "a") (data (i32.const 205122) "a") (data (i32.const 205125) "a") (data (i32.const 205128) "a") (data (i32.const 205131) "a") (data (i32.const 205134) "a") (data (i32.const 205137) "a") (data (i32.const 205140) "a") (data (i32.const 205143) "a") (data (i32.const 205146) "a") (data (i32.const 205149) "a") (data (i32.const 205152) "a") (data (i32.const 205155) "a") (data (i32.const 205158) "a") (data (i32.const 205161) "a") (data (i32.const 205164) "a") (data (i32.const 205167) "a") (data (i32.const 205170) "a") (data (i32.const 205173) "a") (data (i32.const 205176) "a") (data (i32.const 205179) "a") (data (i32.const 205182) "a") (data (i32.const 205185) "a") (data (i32.const 205188) "a") (data (i32.const 205191) "a") (data (i32.const 205194) "a") (data (i32.const 205197) "a") (data (i32.const 205200) "a") (data (i32.const 205203) "a") (data (i32.const 205206) "a") (data (i32.const 205209) "a") (data (i32.const 205212) "a") (data (i32.const 205215) "a") (data (i32.const 205218) "a") (data (i32.const 205221) "a") (data (i32.const 205224) "a") (data (i32.const 205227) "a") (data (i32.const 205230) "a") (data (i32.const 205233) "a") (data (i32.const 205236) "a") (data (i32.const 205239) "a") (data (i32.const 205242) "a") (data (i32.const 205245) "a") (data (i32.const 205248) "a") (data (i32.const 205251) "a") (data (i32.const 205254) "a") (data (i32.const 205257) "a") (data (i32.const 205260) "a") (data (i32.const 205263) "a") (data (i32.const 205266) "a") (data (i32.const 205269) "a") (data (i32.const 205272) "a") (data (i32.const 205275) "a") (data (i32.const 205278) "a") (data (i32.const 205281) "a") (data (i32.const 205284) "a") (data (i32.const 205287) "a") (data (i32.const 205290) "a") (data (i32.const 205293) "a") (data (i32.const 205296) "a") (data (i32.const 205299) "a") (data (i32.const 205302) "a") (data (i32.const 205305) "a") (data (i32.const 205308) "a") (data (i32.const 205311) "a") (data (i32.const 205314) "a") (data (i32.const 205317) "a") (data (i32.const 205320) "a") (data (i32.const 205323) "a") (data (i32.const 205326) "a") (data (i32.const 205329) "a") (data (i32.const 205332) "a") (data (i32.const 205335) "a") (data (i32.const 205338) "a") (data (i32.const 205341) "a") (data (i32.const 205344) "a") (data (i32.const 205347) "a") (data (i32.const 205350) "a") (data (i32.const 205353) "a") (data (i32.const 205356) "a") (data (i32.const 205359) "a") (data (i32.const 205362) "a") (data (i32.const 205365) "a") (data (i32.const 205368) "a") (data (i32.const 205371) "a") (data (i32.const 205374) "a") (data (i32.const 205377) "a") (data (i32.const 205380) "a") (data (i32.const 205383) "a") (data (i32.const 205386) "a") (data (i32.const 205389) "a") (data (i32.const 205392) "a") (data (i32.const 205395) "a") (data (i32.const 205398) "a") (data (i32.const 205401) "a") (data (i32.const 205404) "a") (data (i32.const 205407) "a") (data (i32.const 205410) "a") (data (i32.const 205413) "a") (data (i32.const 205416) "a") (data (i32.const 205419) "a") (data (i32.const 205422) "a") (data (i32.const 205425) "a") (data (i32.const 205428) "a") (data (i32.const 205431) "a") (data (i32.const 205434) "a") (data (i32.const 205437) "a") (data (i32.const 205440) "a") (data (i32.const 205443) "a") (data (i32.const 205446) "a") (data (i32.const 205449) "a") (data (i32.const 205452) "a") (data (i32.const 205455) "a") (data (i32.const 205458) "a") (data (i32.const 205461) "a") (data (i32.const 205464) "a") (data (i32.const 205467) "a") (data (i32.const 205470) "a") (data (i32.const 205473) "a") (data (i32.const 205476) "a") (data (i32.const 205479) "a") (data (i32.const 205482) "a") (data (i32.const 205485) "a") (data (i32.const 205488) "a") (data (i32.const 205491) "a") (data (i32.const 205494) "a") (data (i32.const 205497) "a") (data (i32.const 205500) "a") (data (i32.const 205503) "a") (data (i32.const 205506) "a") (data (i32.const 205509) "a") (data (i32.const 205512) "a") (data (i32.const 205515) "a") (data (i32.const 205518) "a") (data (i32.const 205521) "a") (data (i32.const 205524) "a") (data (i32.const 205527) "a") (data (i32.const 205530) "a") (data (i32.const 205533) "a") (data (i32.const 205536) "a") (data (i32.const 205539) "a") (data (i32.const 205542) "a") (data (i32.const 205545) "a") (data (i32.const 205548) "a") (data (i32.const 205551) "a") (data (i32.const 205554) "a") (data (i32.const 205557) "a") (data (i32.const 205560) "a") (data (i32.const 205563) "a") (data (i32.const 205566) "a") (data (i32.const 205569) "a") (data (i32.const 205572) "a") (data (i32.const 205575) "a") (data (i32.const 205578) "a") (data (i32.const 205581) "a") (data (i32.const 205584) "a") (data (i32.const 205587) "a") (data (i32.const 205590) "a") (data (i32.const 205593) "a") (data (i32.const 205596) "a") (data (i32.const 205599) "a") (data (i32.const 205602) "a") (data (i32.const 205605) "a") (data (i32.const 205608) "a") (data (i32.const 205611) "a") (data (i32.const 205614) "a") (data (i32.const 205617) "a") (data (i32.const 205620) "a") (data (i32.const 205623) "a") (data (i32.const 205626) "a") (data (i32.const 205629) "a") (data (i32.const 205632) "a") (data (i32.const 205635) "a") (data (i32.const 205638) "a") (data (i32.const 205641) "a") (data (i32.const 205644) "a") (data (i32.const 205647) "a") (data (i32.const 205650) "a") (data (i32.const 205653) "a") (data (i32.const 205656) "a") (data (i32.const 205659) "a") (data (i32.const 205662) "a") (data (i32.const 205665) "a") (data (i32.const 205668) "a") (data (i32.const 205671) "a") (data (i32.const 205674) "a") (data (i32.const 205677) "a") (data (i32.const 205680) "a") (data (i32.const 205683) "a") (data (i32.const 205686) "a") (data (i32.const 205689) "a") (data (i32.const 205692) "a") (data (i32.const 205695) "a") (data (i32.const 205698) "a") (data (i32.const 205701) "a") (data (i32.const 205704) "a") (data (i32.const 205707) "a") (data (i32.const 205710) "a") (data (i32.const 205713) "a") (data (i32.const 205716) "a") (data (i32.const 205719) "a") (data (i32.const 205722) "a") (data (i32.const 205725) "a") (data (i32.const 205728) "a") (data (i32.const 205731) "a") (data (i32.const 205734) "a") (data (i32.const 205737) "a") (data (i32.const 205740) "a") (data (i32.const 205743) "a") (data (i32.const 205746) "a") (data (i32.const 205749) "a") (data (i32.const 205752) "a") (data (i32.const 205755) "a") (data (i32.const 205758) "a") (data (i32.const 205761) "a") (data (i32.const 205764) "a") (data (i32.const 205767) "a") (data (i32.const 205770) "a") (data (i32.const 205773) "a") (data (i32.const 205776) "a") (data (i32.const 205779) "a") (data (i32.const 205782) "a") (data (i32.const 205785) "a") (data (i32.const 205788) "a") (data (i32.const 205791) "a") (data (i32.const 205794) "a") (data (i32.const 205797) "a") (data (i32.const 205800) "a") (data (i32.const 205803) "a") (data (i32.const 205806) "a") (data (i32.const 205809) "a") (data (i32.const 205812) "a") (data (i32.const 205815) "a") (data (i32.const 205818) "a") (data (i32.const 205821) "a") (data (i32.const 205824) "a") (data (i32.const 205827) "a") (data (i32.const 205830) "a") (data (i32.const 205833) "a") (data (i32.const 205836) "a") (data (i32.const 205839) "a") (data (i32.const 205842) "a") (data (i32.const 205845) "a") (data (i32.const 205848) "a") (data (i32.const 205851) "a") (data (i32.const 205854) "a") (data (i32.const 205857) "a") (data (i32.const 205860) "a") (data (i32.const 205863) "a") (data (i32.const 205866) "a") (data (i32.const 205869) "a") (data (i32.const 205872) "a") (data (i32.const 205875) "a") (data (i32.const 205878) "a") (data (i32.const 205881) "a") (data (i32.const 205884) "a") (data (i32.const 205887) "a") (data (i32.const 205890) "a") (data (i32.const 205893) "a") (data (i32.const 205896) "a") (data (i32.const 205899) "a") (data (i32.const 205902) "a") (data (i32.const 205905) "a") (data (i32.const 205908) "a") (data (i32.const 205911) "a") (data (i32.const 205914) "a") (data (i32.const 205917) "a") (data (i32.const 205920) "a") (data (i32.const 205923) "a") (data (i32.const 205926) "a") (data (i32.const 205929) "a") (data (i32.const 205932) "a") (data (i32.const 205935) "a") (data (i32.const 205938) "a") (data (i32.const 205941) "a") (data (i32.const 205944) "a") (data (i32.const 205947) "a") (data (i32.const 205950) "a") (data (i32.const 205953) "a") (data (i32.const 205956) "a") (data (i32.const 205959) "a") (data (i32.const 205962) "a") (data (i32.const 205965) "a") (data (i32.const 205968) "a") (data (i32.const 205971) "a") (data (i32.const 205974) "a") (data (i32.const 205977) "a") (data (i32.const 205980) "a") (data (i32.const 205983) "a") (data (i32.const 205986) "a") (data (i32.const 205989) "a") (data (i32.const 205992) "a") (data (i32.const 205995) "a") (data (i32.const 205998) "a") (data (i32.const 206001) "a") (data (i32.const 206004) "a") (data (i32.const 206007) "a") (data (i32.const 206010) "a") (data (i32.const 206013) "a") (data (i32.const 206016) "a") (data (i32.const 206019) "a") (data (i32.const 206022) "a") (data (i32.const 206025) "a") (data (i32.const 206028) "a") (data (i32.const 206031) "a") (data (i32.const 206034) "a") (data (i32.const 206037) "a") (data (i32.const 206040) "a") (data (i32.const 206043) "a") (data (i32.const 206046) "a") (data (i32.const 206049) "a") (data (i32.const 206052) "a") (data (i32.const 206055) "a") (data (i32.const 206058) "a") (data (i32.const 206061) "a") (data (i32.const 206064) "a") (data (i32.const 206067) "a") (data (i32.const 206070) "a") (data (i32.const 206073) "a") (data (i32.const 206076) "a") (data (i32.const 206079) "a") (data (i32.const 206082) "a") (data (i32.const 206085) "a") (data (i32.const 206088) "a") (data (i32.const 206091) "a") (data (i32.const 206094) "a") (data (i32.const 206097) "a") (data (i32.const 206100) "a") (data (i32.const 206103) "a") (data (i32.const 206106) "a") (data (i32.const 206109) "a") (data (i32.const 206112) "a") (data (i32.const 206115) "a") (data (i32.const 206118) "a") (data (i32.const 206121) "a") (data (i32.const 206124) "a") (data (i32.const 206127) "a") (data (i32.const 206130) "a") (data (i32.const 206133) "a") (data (i32.const 206136) "a") (data (i32.const 206139) "a") (data (i32.const 206142) "a") (data (i32.const 206145) "a") (data (i32.const 206148) "a") (data (i32.const 206151) "a") (data (i32.const 206154) "a") (data (i32.const 206157) "a") (data (i32.const 206160) "a") (data (i32.const 206163) "a") (data (i32.const 206166) "a") (data (i32.const 206169) "a") (data (i32.const 206172) "a") (data (i32.const 206175) "a") (data (i32.const 206178) "a") (data (i32.const 206181) "a") (data (i32.const 206184) "a") (data (i32.const 206187) "a") (data (i32.const 206190) "a") (data (i32.const 206193) "a") (data (i32.const 206196) "a") (data (i32.const 206199) "a") (data (i32.const 206202) "a") (data (i32.const 206205) "a") (data (i32.const 206208) "a") (data (i32.const 206211) "a") (data (i32.const 206214) "a") (data (i32.const 206217) "a") (data (i32.const 206220) "a") (data (i32.const 206223) "a") (data (i32.const 206226) "a") (data (i32.const 206229) "a") (data (i32.const 206232) "a") (data (i32.const 206235) "a") (data (i32.const 206238) "a") (data (i32.const 206241) "a") (data (i32.const 206244) "a") (data (i32.const 206247) "a") (data (i32.const 206250) "a") (data (i32.const 206253) "a") (data (i32.const 206256) "a") (data (i32.const 206259) "a") (data (i32.const 206262) "a") (data (i32.const 206265) "a") (data (i32.const 206268) "a") (data (i32.const 206271) "a") (data (i32.const 206274) "a") (data (i32.const 206277) "a") (data (i32.const 206280) "a") (data (i32.const 206283) "a") (data (i32.const 206286) "a") (data (i32.const 206289) "a") (data (i32.const 206292) "a") (data (i32.const 206295) "a") (data (i32.const 206298) "a") (data (i32.const 206301) "a") (data (i32.const 206304) "a") (data (i32.const 206307) "a") (data (i32.const 206310) "a") (data (i32.const 206313) "a") (data (i32.const 206316) "a") (data (i32.const 206319) "a") (data (i32.const 206322) "a") (data (i32.const 206325) "a") (data (i32.const 206328) "a") (data (i32.const 206331) "a") (data (i32.const 206334) "a") (data (i32.const 206337) "a") (data (i32.const 206340) "a") (data (i32.const 206343) "a") (data (i32.const 206346) "a") (data (i32.const 206349) "a") (data (i32.const 206352) "a") (data (i32.const 206355) "a") (data (i32.const 206358) "a") (data (i32.const 206361) "a") (data (i32.const 206364) "a") (data (i32.const 206367) "a") (data (i32.const 206370) "a") (data (i32.const 206373) "a") (data (i32.const 206376) "a") (data (i32.const 206379) "a") (data (i32.const 206382) "a") (data (i32.const 206385) "a") (data (i32.const 206388) "a") (data (i32.const 206391) "a") (data (i32.const 206394) "a") (data (i32.const 206397) "a") (data (i32.const 206400) "a") (data (i32.const 206403) "a") (data (i32.const 206406) "a") (data (i32.const 206409) "a") (data (i32.const 206412) "a") (data (i32.const 206415) "a") (data (i32.const 206418) "a") (data (i32.const 206421) "a") (data (i32.const 206424) "a") (data (i32.const 206427) "a") (data (i32.const 206430) "a") (data (i32.const 206433) "a") (data (i32.const 206436) "a") (data (i32.const 206439) "a") (data (i32.const 206442) "a") (data (i32.const 206445) "a") (data (i32.const 206448) "a") (data (i32.const 206451) "a") (data (i32.const 206454) "a") (data (i32.const 206457) "a") (data (i32.const 206460) "a") (data (i32.const 206463) "a") (data (i32.const 206466) "a") (data (i32.const 206469) "a") (data (i32.const 206472) "a") (data (i32.const 206475) "a") (data (i32.const 206478) "a") (data (i32.const 206481) "a") (data (i32.const 206484) "a") (data (i32.const 206487) "a") (data (i32.const 206490) "a") (data (i32.const 206493) "a") (data (i32.const 206496) "a") (data (i32.const 206499) "a") (data (i32.const 206502) "a") (data (i32.const 206505) "a") (data (i32.const 206508) "a") (data (i32.const 206511) "a") (data (i32.const 206514) "a") (data (i32.const 206517) "a") (data (i32.const 206520) "a") (data (i32.const 206523) "a") (data (i32.const 206526) "a") (data (i32.const 206529) "a") (data (i32.const 206532) "a") (data (i32.const 206535) "a") (data (i32.const 206538) "a") (data (i32.const 206541) "a") (data (i32.const 206544) "a") (data (i32.const 206547) "a") (data (i32.const 206550) "a") (data (i32.const 206553) "a") (data (i32.const 206556) "a") (data (i32.const 206559) "a") (data (i32.const 206562) "a") (data (i32.const 206565) "a") (data (i32.const 206568) "a") (data (i32.const 206571) "a") (data (i32.const 206574) "a") (data (i32.const 206577) "a") (data (i32.const 206580) "a") (data (i32.const 206583) "a") (data (i32.const 206586) "a") (data (i32.const 206589) "a") (data (i32.const 206592) "a") (data (i32.const 206595) "a") (data (i32.const 206598) "a") (data (i32.const 206601) "a") (data (i32.const 206604) "a") (data (i32.const 206607) "a") (data (i32.const 206610) "a") (data (i32.const 206613) "a") (data (i32.const 206616) "a") (data (i32.const 206619) "a") (data (i32.const 206622) "a") (data (i32.const 206625) "a") (data (i32.const 206628) "a") (data (i32.const 206631) "a") (data (i32.const 206634) "a") (data (i32.const 206637) "a") (data (i32.const 206640) "a") (data (i32.const 206643) "a") (data (i32.const 206646) "a") (data (i32.const 206649) "a") (data (i32.const 206652) "a") (data (i32.const 206655) "a") (data (i32.const 206658) "a") (data (i32.const 206661) "a") (data (i32.const 206664) "a") (data (i32.const 206667) "a") (data (i32.const 206670) "a") (data (i32.const 206673) "a") (data (i32.const 206676) "a") (data (i32.const 206679) "a") (data (i32.const 206682) "a") (data (i32.const 206685) "a") (data (i32.const 206688) "a") (data (i32.const 206691) "a") (data (i32.const 206694) "a") (data (i32.const 206697) "a") (data (i32.const 206700) "a") (data (i32.const 206703) "a") (data (i32.const 206706) "a") (data (i32.const 206709) "a") (data (i32.const 206712) "a") (data (i32.const 206715) "a") (data (i32.const 206718) "a") (data (i32.const 206721) "a") (data (i32.const 206724) "a") (data (i32.const 206727) "a") (data (i32.const 206730) "a") (data (i32.const 206733) "a") (data (i32.const 206736) "a") (data (i32.const 206739) "a") (data (i32.const 206742) "a") (data (i32.const 206745) "a") (data (i32.const 206748) "a") (data (i32.const 206751) "a") (data (i32.const 206754) "a") (data (i32.const 206757) "a") (data (i32.const 206760) "a") (data (i32.const 206763) "a") (data (i32.const 206766) "a") (data (i32.const 206769) "a") (data (i32.const 206772) "a") (data (i32.const 206775) "a") (data (i32.const 206778) "a") (data (i32.const 206781) "a") (data (i32.const 206784) "a") (data (i32.const 206787) "a") (data (i32.const 206790) "a") (data (i32.const 206793) "a") (data (i32.const 206796) "a") (data (i32.const 206799) "a") (data (i32.const 206802) "a") (data (i32.const 206805) "a") (data (i32.const 206808) "a") (data (i32.const 206811) "a") (data (i32.const 206814) "a") (data (i32.const 206817) "a") (data (i32.const 206820) "a") (data (i32.const 206823) "a") (data (i32.const 206826) "a") (data (i32.const 206829) "a") (data (i32.const 206832) "a") (data (i32.const 206835) "a") (data (i32.const 206838) "a") (data (i32.const 206841) "a") (data (i32.const 206844) "a") (data (i32.const 206847) "a") (data (i32.const 206850) "a") (data (i32.const 206853) "a") (data (i32.const 206856) "a") (data (i32.const 206859) "a") (data (i32.const 206862) "a") (data (i32.const 206865) "a") (data (i32.const 206868) "a") (data (i32.const 206871) "a") (data (i32.const 206874) "a") (data (i32.const 206877) "a") (data (i32.const 206880) "a") (data (i32.const 206883) "a") (data (i32.const 206886) "a") (data (i32.const 206889) "a") (data (i32.const 206892) "a") (data (i32.const 206895) "a") (data (i32.const 206898) "a") (data (i32.const 206901) "a") (data (i32.const 206904) "a") (data (i32.const 206907) "a") (data (i32.const 206910) "a") (data (i32.const 206913) "a") (data (i32.const 206916) "a") (data (i32.const 206919) "a") (data (i32.const 206922) "a") (data (i32.const 206925) "a") (data (i32.const 206928) "a") (data (i32.const 206931) "a") (data (i32.const 206934) "a") (data (i32.const 206937) "a") (data (i32.const 206940) "a") (data (i32.const 206943) "a") (data (i32.const 206946) "a") (data (i32.const 206949) "a") (data (i32.const 206952) "a") (data (i32.const 206955) "a") (data (i32.const 206958) "a") (data (i32.const 206961) "a") (data (i32.const 206964) "a") (data (i32.const 206967) "a") (data (i32.const 206970) "a") (data (i32.const 206973) "a") (data (i32.const 206976) "a") (data (i32.const 206979) "a") (data (i32.const 206982) "a") (data (i32.const 206985) "a") (data (i32.const 206988) "a") (data (i32.const 206991) "a") (data (i32.const 206994) "a") (data (i32.const 206997) "a") (data (i32.const 207000) "a") (data (i32.const 207003) "a") (data (i32.const 207006) "a") (data (i32.const 207009) "a") (data (i32.const 207012) "a") (data (i32.const 207015) "a") (data (i32.const 207018) "a") (data (i32.const 207021) "a") (data (i32.const 207024) "a") (data (i32.const 207027) "a") (data (i32.const 207030) "a") (data (i32.const 207033) "a") (data (i32.const 207036) "a") (data (i32.const 207039) "a") (data (i32.const 207042) "a") (data (i32.const 207045) "a") (data (i32.const 207048) "a") (data (i32.const 207051) "a") (data (i32.const 207054) "a") (data (i32.const 207057) "a") (data (i32.const 207060) "a") (data (i32.const 207063) "a") (data (i32.const 207066) "a") (data (i32.const 207069) "a") (data (i32.const 207072) "a") (data (i32.const 207075) "a") (data (i32.const 207078) "a") (data (i32.const 207081) "a") (data (i32.const 207084) "a") (data (i32.const 207087) "a") (data (i32.const 207090) "a") (data (i32.const 207093) "a") (data (i32.const 207096) "a") (data (i32.const 207099) "a") (data (i32.const 207102) "a") (data (i32.const 207105) "a") (data (i32.const 207108) "a") (data (i32.const 207111) "a") (data (i32.const 207114) "a") (data (i32.const 207117) "a") (data (i32.const 207120) "a") (data (i32.const 207123) "a") (data (i32.const 207126) "a") (data (i32.const 207129) "a") (data (i32.const 207132) "a") (data (i32.const 207135) "a") (data (i32.const 207138) "a") (data (i32.const 207141) "a") (data (i32.const 207144) "a") (data (i32.const 207147) "a") (data (i32.const 207150) "a") (data (i32.const 207153) "a") (data (i32.const 207156) "a") (data (i32.const 207159) "a") (data (i32.const 207162) "a") (data (i32.const 207165) "a") (data (i32.const 207168) "a") (data (i32.const 207171) "a") (data (i32.const 207174) "a") (data (i32.const 207177) "a") (data (i32.const 207180) "a") (data (i32.const 207183) "a") (data (i32.const 207186) "a") (data (i32.const 207189) "a") (data (i32.const 207192) "a") (data (i32.const 207195) "a") (data (i32.const 207198) "a") (data (i32.const 207201) "a") (data (i32.const 207204) "a") (data (i32.const 207207) "a") (data (i32.const 207210) "a") (data (i32.const 207213) "a") (data (i32.const 207216) "a") (data (i32.const 207219) "a") (data (i32.const 207222) "a") (data (i32.const 207225) "a") (data (i32.const 207228) "a") (data (i32.const 207231) "a") (data (i32.const 207234) "a") (data (i32.const 207237) "a") (data (i32.const 207240) "a") (data (i32.const 207243) "a") (data (i32.const 207246) "a") (data (i32.const 207249) "a") (data (i32.const 207252) "a") (data (i32.const 207255) "a") (data (i32.const 207258) "a") (data (i32.const 207261) "a") (data (i32.const 207264) "a") (data (i32.const 207267) "a") (data (i32.const 207270) "a") (data (i32.const 207273) "a") (data (i32.const 207276) "a") (data (i32.const 207279) "a") (data (i32.const 207282) "a") (data (i32.const 207285) "a") (data (i32.const 207288) "a") (data (i32.const 207291) "a") (data (i32.const 207294) "a") (data (i32.const 207297) "a") (data (i32.const 207300) "a") (data (i32.const 207303) "a") (data (i32.const 207306) "a") (data (i32.const 207309) "a") (data (i32.const 207312) "a") (data (i32.const 207315) "a") (data (i32.const 207318) "a") (data (i32.const 207321) "a") (data (i32.const 207324) "a") (data (i32.const 207327) "a") (data (i32.const 207330) "a") (data (i32.const 207333) "a") (data (i32.const 207336) "a") (data (i32.const 207339) "a") (data (i32.const 207342) "a") (data (i32.const 207345) "a") (data (i32.const 207348) "a") (data (i32.const 207351) "a") (data (i32.const 207354) "a") (data (i32.const 207357) "a") (data (i32.const 207360) "a") (data (i32.const 207363) "a") (data (i32.const 207366) "a") (data (i32.const 207369) "a") (data (i32.const 207372) "a") (data (i32.const 207375) "a") (data (i32.const 207378) "a") (data (i32.const 207381) "a") (data (i32.const 207384) "a") (data (i32.const 207387) "a") (data (i32.const 207390) "a") (data (i32.const 207393) "a") (data (i32.const 207396) "a") (data (i32.const 207399) "a") (data (i32.const 207402) "a") (data (i32.const 207405) "a") (data (i32.const 207408) "a") (data (i32.const 207411) "a") (data (i32.const 207414) "a") (data (i32.const 207417) "a") (data (i32.const 207420) "a") (data (i32.const 207423) "a") (data (i32.const 207426) "a") (data (i32.const 207429) "a") (data (i32.const 207432) "a") (data (i32.const 207435) "a") (data (i32.const 207438) "a") (data (i32.const 207441) "a") (data (i32.const 207444) "a") (data (i32.const 207447) "a") (data (i32.const 207450) "a") (data (i32.const 207453) "a") (data (i32.const 207456) "a") (data (i32.const 207459) "a") (data (i32.const 207462) "a") (data (i32.const 207465) "a") (data (i32.const 207468) "a") (data (i32.const 207471) "a") (data (i32.const 207474) "a") (data (i32.const 207477) "a") (data (i32.const 207480) "a") (data (i32.const 207483) "a") (data (i32.const 207486) "a") (data (i32.const 207489) "a") (data (i32.const 207492) "a") (data (i32.const 207495) "a") (data (i32.const 207498) "a") (data (i32.const 207501) "a") (data (i32.const 207504) "a") (data (i32.const 207507) "a") (data (i32.const 207510) "a") (data (i32.const 207513) "a") (data (i32.const 207516) "a") (data (i32.const 207519) "a") (data (i32.const 207522) "a") (data (i32.const 207525) "a") (data (i32.const 207528) "a") (data (i32.const 207531) "a") (data (i32.const 207534) "a") (data (i32.const 207537) "a") (data (i32.const 207540) "a") (data (i32.const 207543) "a") (data (i32.const 207546) "a") (data (i32.const 207549) "a") (data (i32.const 207552) "a") (data (i32.const 207555) "a") (data (i32.const 207558) "a") (data (i32.const 207561) "a") (data (i32.const 207564) "a") (data (i32.const 207567) "a") (data (i32.const 207570) "a") (data (i32.const 207573) "a") (data (i32.const 207576) "a") (data (i32.const 207579) "a") (data (i32.const 207582) "a") (data (i32.const 207585) "a") (data (i32.const 207588) "a") (data (i32.const 207591) "a") (data (i32.const 207594) "a") (data (i32.const 207597) "a") (data (i32.const 207600) "a") (data (i32.const 207603) "a") (data (i32.const 207606) "a") (data (i32.const 207609) "a") (data (i32.const 207612) "a") (data (i32.const 207615) "a") (data (i32.const 207618) "a") (data (i32.const 207621) "a") (data (i32.const 207624) "a") (data (i32.const 207627) "a") (data (i32.const 207630) "a") (data (i32.const 207633) "a") (data (i32.const 207636) "a") (data (i32.const 207639) "a") (data (i32.const 207642) "a") (data (i32.const 207645) "a") (data (i32.const 207648) "a") (data (i32.const 207651) "a") (data (i32.const 207654) "a") (data (i32.const 207657) "a") (data (i32.const 207660) "a") (data (i32.const 207663) "a") (data (i32.const 207666) "a") (data (i32.const 207669) "a") (data (i32.const 207672) "a") (data (i32.const 207675) "a") (data (i32.const 207678) "a") (data (i32.const 207681) "a") (data (i32.const 207684) "a") (data (i32.const 207687) "a") (data (i32.const 207690) "a") (data (i32.const 207693) "a") (data (i32.const 207696) "a") (data (i32.const 207699) "a") (data (i32.const 207702) "a") (data (i32.const 207705) "a") (data (i32.const 207708) "a") (data (i32.const 207711) "a") (data (i32.const 207714) "a") (data (i32.const 207717) "a") (data (i32.const 207720) "a") (data (i32.const 207723) "a") (data (i32.const 207726) "a") (data (i32.const 207729) "a") (data (i32.const 207732) "a") (data (i32.const 207735) "a") (data (i32.const 207738) "a") (data (i32.const 207741) "a") (data (i32.const 207744) "a") (data (i32.const 207747) "a") (data (i32.const 207750) "a") (data (i32.const 207753) "a") (data (i32.const 207756) "a") (data (i32.const 207759) "a") (data (i32.const 207762) "a") (data (i32.const 207765) "a") (data (i32.const 207768) "a") (data (i32.const 207771) "a") (data (i32.const 207774) "a") (data (i32.const 207777) "a") (data (i32.const 207780) "a") (data (i32.const 207783) "a") (data (i32.const 207786) "a") (data (i32.const 207789) "a") (data (i32.const 207792) "a") (data (i32.const 207795) "a") (data (i32.const 207798) "a") (data (i32.const 207801) "a") (data (i32.const 207804) "a") (data (i32.const 207807) "a") (data (i32.const 207810) "a") (data (i32.const 207813) "a") (data (i32.const 207816) "a") (data (i32.const 207819) "a") (data (i32.const 207822) "a") (data (i32.const 207825) "a") (data (i32.const 207828) "a") (data (i32.const 207831) "a") (data (i32.const 207834) "a") (data (i32.const 207837) "a") (data (i32.const 207840) "a") (data (i32.const 207843) "a") (data (i32.const 207846) "a") (data (i32.const 207849) "a") (data (i32.const 207852) "a") (data (i32.const 207855) "a") (data (i32.const 207858) "a") (data (i32.const 207861) "a") (data (i32.const 207864) "a") (data (i32.const 207867) "a") (data (i32.const 207870) "a") (data (i32.const 207873) "a") (data (i32.const 207876) "a") (data (i32.const 207879) "a") (data (i32.const 207882) "a") (data (i32.const 207885) "a") (data (i32.const 207888) "a") (data (i32.const 207891) "a") (data (i32.const 207894) "a") (data (i32.const 207897) "a") (data (i32.const 207900) "a") (data (i32.const 207903) "a") (data (i32.const 207906) "a") (data (i32.const 207909) "a") (data (i32.const 207912) "a") (data (i32.const 207915) "a") (data (i32.const 207918) "a") (data (i32.const 207921) "a") (data (i32.const 207924) "a") (data (i32.const 207927) "a") (data (i32.const 207930) "a") (data (i32.const 207933) "a") (data (i32.const 207936) "a") (data (i32.const 207939) "a") (data (i32.const 207942) "a") (data (i32.const 207945) "a") (data (i32.const 207948) "a") (data (i32.const 207951) "a") (data (i32.const 207954) "a") (data (i32.const 207957) "a") (data (i32.const 207960) "a") (data (i32.const 207963) "a") (data (i32.const 207966) "a") (data (i32.const 207969) "a") (data (i32.const 207972) "a") (data (i32.const 207975) "a") (data (i32.const 207978) "a") (data (i32.const 207981) "a") (data (i32.const 207984) "a") (data (i32.const 207987) "a") (data (i32.const 207990) "a") (data (i32.const 207993) "a") (data (i32.const 207996) "a") (data (i32.const 207999) "a") (data (i32.const 208002) "a") (data (i32.const 208005) "a") (data (i32.const 208008) "a") (data (i32.const 208011) "a") (data (i32.const 208014) "a") (data (i32.const 208017) "a") (data (i32.const 208020) "a") (data (i32.const 208023) "a") (data (i32.const 208026) "a") (data (i32.const 208029) "a") (data (i32.const 208032) "a") (data (i32.const 208035) "a") (data (i32.const 208038) "a") (data (i32.const 208041) "a") (data (i32.const 208044) "a") (data (i32.const 208047) "a") (data (i32.const 208050) "a") (data (i32.const 208053) "a") (data (i32.const 208056) "a") (data (i32.const 208059) "a") (data (i32.const 208062) "a") (data (i32.const 208065) "a") (data (i32.const 208068) "a") (data (i32.const 208071) "a") (data (i32.const 208074) "a") (data (i32.const 208077) "a") (data (i32.const 208080) "a") (data (i32.const 208083) "a") (data (i32.const 208086) "a") (data (i32.const 208089) "a") (data (i32.const 208092) "a") (data (i32.const 208095) "a") (data (i32.const 208098) "a") (data (i32.const 208101) "a") (data (i32.const 208104) "a") (data (i32.const 208107) "a") (data (i32.const 208110) "a") (data (i32.const 208113) "a") (data (i32.const 208116) "a") (data (i32.const 208119) "a") (data (i32.const 208122) "a") (data (i32.const 208125) "a") (data (i32.const 208128) "a") (data (i32.const 208131) "a") (data (i32.const 208134) "a") (data (i32.const 208137) "a") (data (i32.const 208140) "a") (data (i32.const 208143) "a") (data (i32.const 208146) "a") (data (i32.const 208149) "a") (data (i32.const 208152) "a") (data (i32.const 208155) "a") (data (i32.const 208158) "a") (data (i32.const 208161) "a") (data (i32.const 208164) "a") (data (i32.const 208167) "a") (data (i32.const 208170) "a") (data (i32.const 208173) "a") (data (i32.const 208176) "a") (data (i32.const 208179) "a") (data (i32.const 208182) "a") (data (i32.const 208185) "a") (data (i32.const 208188) "a") (data (i32.const 208191) "a") (data (i32.const 208194) "a") (data (i32.const 208197) "a") (data (i32.const 208200) "a") (data (i32.const 208203) "a") (data (i32.const 208206) "a") (data (i32.const 208209) "a") (data (i32.const 208212) "a") (data (i32.const 208215) "a") (data (i32.const 208218) "a") (data (i32.const 208221) "a") (data (i32.const 208224) "a") (data (i32.const 208227) "a") (data (i32.const 208230) "a") (data (i32.const 208233) "a") (data (i32.const 208236) "a") (data (i32.const 208239) "a") (data (i32.const 208242) "a") (data (i32.const 208245) "a") (data (i32.const 208248) "a") (data (i32.const 208251) "a") (data (i32.const 208254) "a") (data (i32.const 208257) "a") (data (i32.const 208260) "a") (data (i32.const 208263) "a") (data (i32.const 208266) "a") (data (i32.const 208269) "a") (data (i32.const 208272) "a") (data (i32.const 208275) "a") (data (i32.const 208278) "a") (data (i32.const 208281) "a") (data (i32.const 208284) "a") (data (i32.const 208287) "a") (data (i32.const 208290) "a") (data (i32.const 208293) "a") (data (i32.const 208296) "a") (data (i32.const 208299) "a") (data (i32.const 208302) "a") (data (i32.const 208305) "a") (data (i32.const 208308) "a") (data (i32.const 208311) "a") (data (i32.const 208314) "a") (data (i32.const 208317) "a") (data (i32.const 208320) "a") (data (i32.const 208323) "a") (data (i32.const 208326) "a") (data (i32.const 208329) "a") (data (i32.const 208332) "a") (data (i32.const 208335) "a") (data (i32.const 208338) "a") (data (i32.const 208341) "a") (data (i32.const 208344) "a") (data (i32.const 208347) "a") (data (i32.const 208350) "a") (data (i32.const 208353) "a") (data (i32.const 208356) "a") (data (i32.const 208359) "a") (data (i32.const 208362) "a") (data (i32.const 208365) "a") (data (i32.const 208368) "a") (data (i32.const 208371) "a") (data (i32.const 208374) "a") (data (i32.const 208377) "a") (data (i32.const 208380) "a") (data (i32.const 208383) "a") (data (i32.const 208386) "a") (data (i32.const 208389) "a") (data (i32.const 208392) "a") (data (i32.const 208395) "a") (data (i32.const 208398) "a") (data (i32.const 208401) "a") (data (i32.const 208404) "a") (data (i32.const 208407) "a") (data (i32.const 208410) "a") (data (i32.const 208413) "a") (data (i32.const 208416) "a") (data (i32.const 208419) "a") (data (i32.const 208422) "a") (data (i32.const 208425) "a") (data (i32.const 208428) "a") (data (i32.const 208431) "a") (data (i32.const 208434) "a") (data (i32.const 208437) "a") (data (i32.const 208440) "a") (data (i32.const 208443) "a") (data (i32.const 208446) "a") (data (i32.const 208449) "a") (data (i32.const 208452) "a") (data (i32.const 208455) "a") (data (i32.const 208458) "a") (data (i32.const 208461) "a") (data (i32.const 208464) "a") (data (i32.const 208467) "a") (data (i32.const 208470) "a") (data (i32.const 208473) "a") (data (i32.const 208476) "a") (data (i32.const 208479) "a") (data (i32.const 208482) "a") (data (i32.const 208485) "a") (data (i32.const 208488) "a") (data (i32.const 208491) "a") (data (i32.const 208494) "a") (data (i32.const 208497) "a") (data (i32.const 208500) "a") (data (i32.const 208503) "a") (data (i32.const 208506) "a") (data (i32.const 208509) "a") (data (i32.const 208512) "a") (data (i32.const 208515) "a") (data (i32.const 208518) "a") (data (i32.const 208521) "a") (data (i32.const 208524) "a") (data (i32.const 208527) "a") (data (i32.const 208530) "a") (data (i32.const 208533) "a") (data (i32.const 208536) "a") (data (i32.const 208539) "a") (data (i32.const 208542) "a") (data (i32.const 208545) "a") (data (i32.const 208548) "a") (data (i32.const 208551) "a") (data (i32.const 208554) "a") (data (i32.const 208557) "a") (data (i32.const 208560) "a") (data (i32.const 208563) "a") (data (i32.const 208566) "a") (data (i32.const 208569) "a") (data (i32.const 208572) "a") (data (i32.const 208575) "a") (data (i32.const 208578) "a") (data (i32.const 208581) "a") (data (i32.const 208584) "a") (data (i32.const 208587) "a") (data (i32.const 208590) "a") (data (i32.const 208593) "a") (data (i32.const 208596) "a") (data (i32.const 208599) "a") (data (i32.const 208602) "a") (data (i32.const 208605) "a") (data (i32.const 208608) "a") (data (i32.const 208611) "a") (data (i32.const 208614) "a") (data (i32.const 208617) "a") (data (i32.const 208620) "a") (data (i32.const 208623) "a") (data (i32.const 208626) "a") (data (i32.const 208629) "a") (data (i32.const 208632) "a") (data (i32.const 208635) "a") (data (i32.const 208638) "a") (data (i32.const 208641) "a") (data (i32.const 208644) "a") (data (i32.const 208647) "a") (data (i32.const 208650) "a") (data (i32.const 208653) "a") (data (i32.const 208656) "a") (data (i32.const 208659) "a") (data (i32.const 208662) "a") (data (i32.const 208665) "a") (data (i32.const 208668) "a") (data (i32.const 208671) "a") (data (i32.const 208674) "a") (data (i32.const 208677) "a") (data (i32.const 208680) "a") (data (i32.const 208683) "a") (data (i32.const 208686) "a") (data (i32.const 208689) "a") (data (i32.const 208692) "a") (data (i32.const 208695) "a") (data (i32.const 208698) "a") (data (i32.const 208701) "a") (data (i32.const 208704) "a") (data (i32.const 208707) "a") (data (i32.const 208710) "a") (data (i32.const 208713) "a") (data (i32.const 208716) "a") (data (i32.const 208719) "a") (data (i32.const 208722) "a") (data (i32.const 208725) "a") (data (i32.const 208728) "a") (data (i32.const 208731) "a") (data (i32.const 208734) "a") (data (i32.const 208737) "a") (data (i32.const 208740) "a") (data (i32.const 208743) "a") (data (i32.const 208746) "a") (data (i32.const 208749) "a") (data (i32.const 208752) "a") (data (i32.const 208755) "a") (data (i32.const 208758) "a") (data (i32.const 208761) "a") (data (i32.const 208764) "a") (data (i32.const 208767) "a") (data (i32.const 208770) "a") (data (i32.const 208773) "a") (data (i32.const 208776) "a") (data (i32.const 208779) "a") (data (i32.const 208782) "a") (data (i32.const 208785) "a") (data (i32.const 208788) "a") (data (i32.const 208791) "a") (data (i32.const 208794) "a") (data (i32.const 208797) "a") (data (i32.const 208800) "a") (data (i32.const 208803) "a") (data (i32.const 208806) "a") (data (i32.const 208809) "a") (data (i32.const 208812) "a") (data (i32.const 208815) "a") (data (i32.const 208818) "a") (data (i32.const 208821) "a") (data (i32.const 208824) "a") (data (i32.const 208827) "a") (data (i32.const 208830) "a") (data (i32.const 208833) "a") (data (i32.const 208836) "a") (data (i32.const 208839) "a") (data (i32.const 208842) "a") (data (i32.const 208845) "a") (data (i32.const 208848) "a") (data (i32.const 208851) "a") (data (i32.const 208854) "a") (data (i32.const 208857) "a") (data (i32.const 208860) "a") (data (i32.const 208863) "a") (data (i32.const 208866) "a") (data (i32.const 208869) "a") (data (i32.const 208872) "a") (data (i32.const 208875) "a") (data (i32.const 208878) "a") (data (i32.const 208881) "a") (data (i32.const 208884) "a") (data (i32.const 208887) "a") (data (i32.const 208890) "a") (data (i32.const 208893) "a") (data (i32.const 208896) "a") (data (i32.const 208899) "a") (data (i32.const 208902) "a") (data (i32.const 208905) "a") (data (i32.const 208908) "a") (data (i32.const 208911) "a") (data (i32.const 208914) "a") (data (i32.const 208917) "a") (data (i32.const 208920) "a") (data (i32.const 208923) "a") (data (i32.const 208926) "a") (data (i32.const 208929) "a") (data (i32.const 208932) "a") (data (i32.const 208935) "a") (data (i32.const 208938) "a") (data (i32.const 208941) "a") (data (i32.const 208944) "a") (data (i32.const 208947) "a") (data (i32.const 208950) "a") (data (i32.const 208953) "a") (data (i32.const 208956) "a") (data (i32.const 208959) "a") (data (i32.const 208962) "a") (data (i32.const 208965) "a") (data (i32.const 208968) "a") (data (i32.const 208971) "a") (data (i32.const 208974) "a") (data (i32.const 208977) "a") (data (i32.const 208980) "a") (data (i32.const 208983) "a") (data (i32.const 208986) "a") (data (i32.const 208989) "a") (data (i32.const 208992) "a") (data (i32.const 208995) "a") (data (i32.const 208998) "a") (data (i32.const 209001) "a") (data (i32.const 209004) "a") (data (i32.const 209007) "a") (data (i32.const 209010) "a") (data (i32.const 209013) "a") (data (i32.const 209016) "a") (data (i32.const 209019) "a") (data (i32.const 209022) "a") (data (i32.const 209025) "a") (data (i32.const 209028) "a") (data (i32.const 209031) "a") (data (i32.const 209034) "a") (data (i32.const 209037) "a") (data (i32.const 209040) "a") (data (i32.const 209043) "a") (data (i32.const 209046) "a") (data (i32.const 209049) "a") (data (i32.const 209052) "a") (data (i32.const 209055) "a") (data (i32.const 209058) "a") (data (i32.const 209061) "a") (data (i32.const 209064) "a") (data (i32.const 209067) "a") (data (i32.const 209070) "a") (data (i32.const 209073) "a") (data (i32.const 209076) "a") (data (i32.const 209079) "a") (data (i32.const 209082) "a") (data (i32.const 209085) "a") (data (i32.const 209088) "a") (data (i32.const 209091) "a") (data (i32.const 209094) "a") (data (i32.const 209097) "a") (data (i32.const 209100) "a") (data (i32.const 209103) "a") (data (i32.const 209106) "a") (data (i32.const 209109) "a") (data (i32.const 209112) "a") (data (i32.const 209115) "a") (data (i32.const 209118) "a") (data (i32.const 209121) "a") (data (i32.const 209124) "a") (data (i32.const 209127) "a") (data (i32.const 209130) "a") (data (i32.const 209133) "a") (data (i32.const 209136) "a") (data (i32.const 209139) "a") (data (i32.const 209142) "a") (data (i32.const 209145) "a") (data (i32.const 209148) "a") (data (i32.const 209151) "a") (data (i32.const 209154) "a") (data (i32.const 209157) "a") (data (i32.const 209160) "a") (data (i32.const 209163) "a") (data (i32.const 209166) "a") (data (i32.const 209169) "a") (data (i32.const 209172) "a") (data (i32.const 209175) "a") (data (i32.const 209178) "a") (data (i32.const 209181) "a") (data (i32.const 209184) "a") (data (i32.const 209187) "a") (data (i32.const 209190) "a") (data (i32.const 209193) "a") (data (i32.const 209196) "a") (data (i32.const 209199) "a") (data (i32.const 209202) "a") (data (i32.const 209205) "a") (data (i32.const 209208) "a") (data (i32.const 209211) "a") (data (i32.const 209214) "a") (data (i32.const 209217) "a") (data (i32.const 209220) "a") (data (i32.const 209223) "a") (data (i32.const 209226) "a") (data (i32.const 209229) "a") (data (i32.const 209232) "a") (data (i32.const 209235) "a") (data (i32.const 209238) "a") (data (i32.const 209241) "a") (data (i32.const 209244) "a") (data (i32.const 209247) "a") (data (i32.const 209250) "a") (data (i32.const 209253) "a") (data (i32.const 209256) "a") (data (i32.const 209259) "a") (data (i32.const 209262) "a") (data (i32.const 209265) "a") (data (i32.const 209268) "a") (data (i32.const 209271) "a") (data (i32.const 209274) "a") (data (i32.const 209277) "a") (data (i32.const 209280) "a") (data (i32.const 209283) "a") (data (i32.const 209286) "a") (data (i32.const 209289) "a") (data (i32.const 209292) "a") (data (i32.const 209295) "a") (data (i32.const 209298) "a") (data (i32.const 209301) "a") (data (i32.const 209304) "a") (data (i32.const 209307) "a") (data (i32.const 209310) "a") (data (i32.const 209313) "a") (data (i32.const 209316) "a") (data (i32.const 209319) "a") (data (i32.const 209322) "a") (data (i32.const 209325) "a") (data (i32.const 209328) "a") (data (i32.const 209331) "a") (data (i32.const 209334) "a") (data (i32.const 209337) "a") (data (i32.const 209340) "a") (data (i32.const 209343) "a") (data (i32.const 209346) "a") (data (i32.const 209349) "a") (data (i32.const 209352) "a") (data (i32.const 209355) "a") (data (i32.const 209358) "a") (data (i32.const 209361) "a") (data (i32.const 209364) "a") (data (i32.const 209367) "a") (data (i32.const 209370) "a") (data (i32.const 209373) "a") (data (i32.const 209376) "a") (data (i32.const 209379) "a") (data (i32.const 209382) "a") (data (i32.const 209385) "a") (data (i32.const 209388) "a") (data (i32.const 209391) "a") (data (i32.const 209394) "a") (data (i32.const 209397) "a") (data (i32.const 209400) "a") (data (i32.const 209403) "a") (data (i32.const 209406) "a") (data (i32.const 209409) "a") (data (i32.const 209412) "a") (data (i32.const 209415) "a") (data (i32.const 209418) "a") (data (i32.const 209421) "a") (data (i32.const 209424) "a") (data (i32.const 209427) "a") (data (i32.const 209430) "a") (data (i32.const 209433) "a") (data (i32.const 209436) "a") (data (i32.const 209439) "a") (data (i32.const 209442) "a") (data (i32.const 209445) "a") (data (i32.const 209448) "a") (data (i32.const 209451) "a") (data (i32.const 209454) "a") (data (i32.const 209457) "a") (data (i32.const 209460) "a") (data (i32.const 209463) "a") (data (i32.const 209466) "a") (data (i32.const 209469) "a") (data (i32.const 209472) "a") (data (i32.const 209475) "a") (data (i32.const 209478) "a") (data (i32.const 209481) "a") (data (i32.const 209484) "a") (data (i32.const 209487) "a") (data (i32.const 209490) "a") (data (i32.const 209493) "a") (data (i32.const 209496) "a") (data (i32.const 209499) "a") (data (i32.const 209502) "a") (data (i32.const 209505) "a") (data (i32.const 209508) "a") (data (i32.const 209511) "a") (data (i32.const 209514) "a") (data (i32.const 209517) "a") (data (i32.const 209520) "a") (data (i32.const 209523) "a") (data (i32.const 209526) "a") (data (i32.const 209529) "a") (data (i32.const 209532) "a") (data (i32.const 209535) "a") (data (i32.const 209538) "a") (data (i32.const 209541) "a") (data (i32.const 209544) "a") (data (i32.const 209547) "a") (data (i32.const 209550) "a") (data (i32.const 209553) "a") (data (i32.const 209556) "a") (data (i32.const 209559) "a") (data (i32.const 209562) "a") (data (i32.const 209565) "a") (data (i32.const 209568) "a") (data (i32.const 209571) "a") (data (i32.const 209574) "a") (data (i32.const 209577) "a") (data (i32.const 209580) "a") (data (i32.const 209583) "a") (data (i32.const 209586) "a") (data (i32.const 209589) "a") (data (i32.const 209592) "a") (data (i32.const 209595) "a") (data (i32.const 209598) "a") (data (i32.const 209601) "a") (data (i32.const 209604) "a") (data (i32.const 209607) "a") (data (i32.const 209610) "a") (data (i32.const 209613) "a") (data (i32.const 209616) "a") (data (i32.const 209619) "a") (data (i32.const 209622) "a") (data (i32.const 209625) "a") (data (i32.const 209628) "a") (data (i32.const 209631) "a") (data (i32.const 209634) "a") (data (i32.const 209637) "a") (data (i32.const 209640) "a") (data (i32.const 209643) "a") (data (i32.const 209646) "a") (data (i32.const 209649) "a") (data (i32.const 209652) "a") (data (i32.const 209655) "a") (data (i32.const 209658) "a") (data (i32.const 209661) "a") (data (i32.const 209664) "a") (data (i32.const 209667) "a") (data (i32.const 209670) "a") (data (i32.const 209673) "a") (data (i32.const 209676) "a") (data (i32.const 209679) "a") (data (i32.const 209682) "a") (data (i32.const 209685) "a") (data (i32.const 209688) "a") (data (i32.const 209691) "a") (data (i32.const 209694) "a") (data (i32.const 209697) "a") (data (i32.const 209700) "a") (data (i32.const 209703) "a") (data (i32.const 209706) "a") (data (i32.const 209709) "a") (data (i32.const 209712) "a") (data (i32.const 209715) "a") (data (i32.const 209718) "a") (data (i32.const 209721) "a") (data (i32.const 209724) "a") (data (i32.const 209727) "a") (data (i32.const 209730) "a") (data (i32.const 209733) "a") (data (i32.const 209736) "a") (data (i32.const 209739) "a") (data (i32.const 209742) "a") (data (i32.const 209745) "a") (data (i32.const 209748) "a") (data (i32.const 209751) "a") (data (i32.const 209754) "a") (data (i32.const 209757) "a") (data (i32.const 209760) "a") (data (i32.const 209763) "a") (data (i32.const 209766) "a") (data (i32.const 209769) "a") (data (i32.const 209772) "a") (data (i32.const 209775) "a") (data (i32.const 209778) "a") (data (i32.const 209781) "a") (data (i32.const 209784) "a") (data (i32.const 209787) "a") (data (i32.const 209790) "a") (data (i32.const 209793) "a") (data (i32.const 209796) "a") (data (i32.const 209799) "a") (data (i32.const 209802) "a") (data (i32.const 209805) "a") (data (i32.const 209808) "a") (data (i32.const 209811) "a") (data (i32.const 209814) "a") (data (i32.const 209817) "a") (data (i32.const 209820) "a") (data (i32.const 209823) "a") (data (i32.const 209826) "a") (data (i32.const 209829) "a") (data (i32.const 209832) "a") (data (i32.const 209835) "a") (data (i32.const 209838) "a") (data (i32.const 209841) "a") (data (i32.const 209844) "a") (data (i32.const 209847) "a") (data (i32.const 209850) "a") (data (i32.const 209853) "a") (data (i32.const 209856) "a") (data (i32.const 209859) "a") (data (i32.const 209862) "a") (data (i32.const 209865) "a") (data (i32.const 209868) "a") (data (i32.const 209871) "a") (data (i32.const 209874) "a") (data (i32.const 209877) "a") (data (i32.const 209880) "a") (data (i32.const 209883) "a") (data (i32.const 209886) "a") (data (i32.const 209889) "a") (data (i32.const 209892) "a") (data (i32.const 209895) "a") (data (i32.const 209898) "a") (data (i32.const 209901) "a") (data (i32.const 209904) "a") (data (i32.const 209907) "a") (data (i32.const 209910) "a") (data (i32.const 209913) "a") (data (i32.const 209916) "a") (data (i32.const 209919) "a") (data (i32.const 209922) "a") (data (i32.const 209925) "a") (data (i32.const 209928) "a") (data (i32.const 209931) "a") (data (i32.const 209934) "a") (data (i32.const 209937) "a") (data (i32.const 209940) "a") (data (i32.const 209943) "a") (data (i32.const 209946) "a") (data (i32.const 209949) "a") (data (i32.const 209952) "a") (data (i32.const 209955) "a") (data (i32.const 209958) "a") (data (i32.const 209961) "a") (data (i32.const 209964) "a") (data (i32.const 209967) "a") (data (i32.const 209970) "a") (data (i32.const 209973) "a") (data (i32.const 209976) "a") (data (i32.const 209979) "a") (data (i32.const 209982) "a") (data (i32.const 209985) "a") (data (i32.const 209988) "a") (data (i32.const 209991) "a") (data (i32.const 209994) "a") (data (i32.const 209997) "a") (data (i32.const 210000) "a") (data (i32.const 210003) "a") (data (i32.const 210006) "a") (data (i32.const 210009) "a") (data (i32.const 210012) "a") (data (i32.const 210015) "a") (data (i32.const 210018) "a") (data (i32.const 210021) "a") (data (i32.const 210024) "a") (data (i32.const 210027) "a") (data (i32.const 210030) "a") (data (i32.const 210033) "a") (data (i32.const 210036) "a") (data (i32.const 210039) "a") (data (i32.const 210042) "a") (data (i32.const 210045) "a") (data (i32.const 210048) "a") (data (i32.const 210051) "a") (data (i32.const 210054) "a") (data (i32.const 210057) "a") (data (i32.const 210060) "a") (data (i32.const 210063) "a") (data (i32.const 210066) "a") (data (i32.const 210069) "a") (data (i32.const 210072) "a") (data (i32.const 210075) "a") (data (i32.const 210078) "a") (data (i32.const 210081) "a") (data (i32.const 210084) "a") (data (i32.const 210087) "a") (data (i32.const 210090) "a") (data (i32.const 210093) "a") (data (i32.const 210096) "a") (data (i32.const 210099) "a") (data (i32.const 210102) "a") (data (i32.const 210105) "a") (data (i32.const 210108) "a") (data (i32.const 210111) "a") (data (i32.const 210114) "a") (data (i32.const 210117) "a") (data (i32.const 210120) "a") (data (i32.const 210123) "a") (data (i32.const 210126) "a") (data (i32.const 210129) "a") (data (i32.const 210132) "a") (data (i32.const 210135) "a") (data (i32.const 210138) "a") (data (i32.const 210141) "a") (data (i32.const 210144) "a") (data (i32.const 210147) "a") (data (i32.const 210150) "a") (data (i32.const 210153) "a") (data (i32.const 210156) "a") (data (i32.const 210159) "a") (data (i32.const 210162) "a") (data (i32.const 210165) "a") (data (i32.const 210168) "a") (data (i32.const 210171) "a") (data (i32.const 210174) "a") (data (i32.const 210177) "a") (data (i32.const 210180) "a") (data (i32.const 210183) "a") (data (i32.const 210186) "a") (data (i32.const 210189) "a") (data (i32.const 210192) "a") (data (i32.const 210195) "a") (data (i32.const 210198) "a") (data (i32.const 210201) "a") (data (i32.const 210204) "a") (data (i32.const 210207) "a") (data (i32.const 210210) "a") (data (i32.const 210213) "a") (data (i32.const 210216) "a") (data (i32.const 210219) "a") (data (i32.const 210222) "a") (data (i32.const 210225) "a") (data (i32.const 210228) "a") (data (i32.const 210231) "a") (data (i32.const 210234) "a") (data (i32.const 210237) "a") (data (i32.const 210240) "a") (data (i32.const 210243) "a") (data (i32.const 210246) "a") (data (i32.const 210249) "a") (data (i32.const 210252) "a") (data (i32.const 210255) "a") (data (i32.const 210258) "a") (data (i32.const 210261) "a") (data (i32.const 210264) "a") (data (i32.const 210267) "a") (data (i32.const 210270) "a") (data (i32.const 210273) "a") (data (i32.const 210276) "a") (data (i32.const 210279) "a") (data (i32.const 210282) "a") (data (i32.const 210285) "a") (data (i32.const 210288) "a") (data (i32.const 210291) "a") (data (i32.const 210294) "a") (data (i32.const 210297) "a") (data (i32.const 210300) "a") (data (i32.const 210303) "a") (data (i32.const 210306) "a") (data (i32.const 210309) "a") (data (i32.const 210312) "a") (data (i32.const 210315) "a") (data (i32.const 210318) "a") (data (i32.const 210321) "a") (data (i32.const 210324) "a") (data (i32.const 210327) "a") (data (i32.const 210330) "a") (data (i32.const 210333) "a") (data (i32.const 210336) "a") (data (i32.const 210339) "a") (data (i32.const 210342) "a") (data (i32.const 210345) "a") (data (i32.const 210348) "a") (data (i32.const 210351) "a") (data (i32.const 210354) "a") (data (i32.const 210357) "a") (data (i32.const 210360) "a") (data (i32.const 210363) "a") (data (i32.const 210366) "a") (data (i32.const 210369) "a") (data (i32.const 210372) "a") (data (i32.const 210375) "a") (data (i32.const 210378) "a") (data (i32.const 210381) "a") (data (i32.const 210384) "a") (data (i32.const 210387) "a") (data (i32.const 210390) "a") (data (i32.const 210393) "a") (data (i32.const 210396) "a") (data (i32.const 210399) "a") (data (i32.const 210402) "a") (data (i32.const 210405) "a") (data (i32.const 210408) "a") (data (i32.const 210411) "a") (data (i32.const 210414) "a") (data (i32.const 210417) "a") (data (i32.const 210420) "a") (data (i32.const 210423) "a") (data (i32.const 210426) "a") (data (i32.const 210429) "a") (data (i32.const 210432) "a") (data (i32.const 210435) "a") (data (i32.const 210438) "a") (data (i32.const 210441) "a") (data (i32.const 210444) "a") (data (i32.const 210447) "a") (data (i32.const 210450) "a") (data (i32.const 210453) "a") (data (i32.const 210456) "a") (data (i32.const 210459) "a") (data (i32.const 210462) "a") (data (i32.const 210465) "a") (data (i32.const 210468) "a") (data (i32.const 210471) "a") (data (i32.const 210474) "a") (data (i32.const 210477) "a") (data (i32.const 210480) "a") (data (i32.const 210483) "a") (data (i32.const 210486) "a") (data (i32.const 210489) "a") (data (i32.const 210492) "a") (data (i32.const 210495) "a") (data (i32.const 210498) "a") (data (i32.const 210501) "a") (data (i32.const 210504) "a") (data (i32.const 210507) "a") (data (i32.const 210510) "a") (data (i32.const 210513) "a") (data (i32.const 210516) "a") (data (i32.const 210519) "a") (data (i32.const 210522) "a") (data (i32.const 210525) "a") (data (i32.const 210528) "a") (data (i32.const 210531) "a") (data (i32.const 210534) "a") (data (i32.const 210537) "a") (data (i32.const 210540) "a") (data (i32.const 210543) "a") (data (i32.const 210546) "a") (data (i32.const 210549) "a") (data (i32.const 210552) "a") (data (i32.const 210555) "a") (data (i32.const 210558) "a") (data (i32.const 210561) "a") (data (i32.const 210564) "a") (data (i32.const 210567) "a") (data (i32.const 210570) "a") (data (i32.const 210573) "a") (data (i32.const 210576) "a") (data (i32.const 210579) "a") (data (i32.const 210582) "a") (data (i32.const 210585) "a") (data (i32.const 210588) "a") (data (i32.const 210591) "a") (data (i32.const 210594) "a") (data (i32.const 210597) "a") (data (i32.const 210600) "a") (data (i32.const 210603) "a") (data (i32.const 210606) "a") (data (i32.const 210609) "a") (data (i32.const 210612) "a") (data (i32.const 210615) "a") (data (i32.const 210618) "a") (data (i32.const 210621) "a") (data (i32.const 210624) "a") (data (i32.const 210627) "a") (data (i32.const 210630) "a") (data (i32.const 210633) "a") (data (i32.const 210636) "a") (data (i32.const 210639) "a") (data (i32.const 210642) "a") (data (i32.const 210645) "a") (data (i32.const 210648) "a") (data (i32.const 210651) "a") (data (i32.const 210654) "a") (data (i32.const 210657) "a") (data (i32.const 210660) "a") (data (i32.const 210663) "a") (data (i32.const 210666) "a") (data (i32.const 210669) "a") (data (i32.const 210672) "a") (data (i32.const 210675) "a") (data (i32.const 210678) "a") (data (i32.const 210681) "a") (data (i32.const 210684) "a") (data (i32.const 210687) "a") (data (i32.const 210690) "a") (data (i32.const 210693) "a") (data (i32.const 210696) "a") (data (i32.const 210699) "a") (data (i32.const 210702) "a") (data (i32.const 210705) "a") (data (i32.const 210708) "a") (data (i32.const 210711) "a") (data (i32.const 210714) "a") (data (i32.const 210717) "a") (data (i32.const 210720) "a") (data (i32.const 210723) "a") (data (i32.const 210726) "a") (data (i32.const 210729) "a") (data (i32.const 210732) "a") (data (i32.const 210735) "a") (data (i32.const 210738) "a") (data (i32.const 210741) "a") (data (i32.const 210744) "a") (data (i32.const 210747) "a") (data (i32.const 210750) "a") (data (i32.const 210753) "a") (data (i32.const 210756) "a") (data (i32.const 210759) "a") (data (i32.const 210762) "a") (data (i32.const 210765) "a") (data (i32.const 210768) "a") (data (i32.const 210771) "a") (data (i32.const 210774) "a") (data (i32.const 210777) "a") (data (i32.const 210780) "a") (data (i32.const 210783) "a") (data (i32.const 210786) "a") (data (i32.const 210789) "a") (data (i32.const 210792) "a") (data (i32.const 210795) "a") (data (i32.const 210798) "a") (data (i32.const 210801) "a") (data (i32.const 210804) "a") (data (i32.const 210807) "a") (data (i32.const 210810) "a") (data (i32.const 210813) "a") (data (i32.const 210816) "a") (data (i32.const 210819) "a") (data (i32.const 210822) "a") (data (i32.const 210825) "a") (data (i32.const 210828) "a") (data (i32.const 210831) "a") (data (i32.const 210834) "a") (data (i32.const 210837) "a") (data (i32.const 210840) "a") (data (i32.const 210843) "a") (data (i32.const 210846) "a") (data (i32.const 210849) "a") (data (i32.const 210852) "a") (data (i32.const 210855) "a") (data (i32.const 210858) "a") (data (i32.const 210861) "a") (data (i32.const 210864) "a") (data (i32.const 210867) "a") (data (i32.const 210870) "a") (data (i32.const 210873) "a") (data (i32.const 210876) "a") (data (i32.const 210879) "a") (data (i32.const 210882) "a") (data (i32.const 210885) "a") (data (i32.const 210888) "a") (data (i32.const 210891) "a") (data (i32.const 210894) "a") (data (i32.const 210897) "a") (data (i32.const 210900) "a") (data (i32.const 210903) "a") (data (i32.const 210906) "a") (data (i32.const 210909) "a") (data (i32.const 210912) "a") (data (i32.const 210915) "a") (data (i32.const 210918) "a") (data (i32.const 210921) "a") (data (i32.const 210924) "a") (data (i32.const 210927) "a") (data (i32.const 210930) "a") (data (i32.const 210933) "a") (data (i32.const 210936) "a") (data (i32.const 210939) "a") (data (i32.const 210942) "a") (data (i32.const 210945) "a") (data (i32.const 210948) "a") (data (i32.const 210951) "a") (data (i32.const 210954) "a") (data (i32.const 210957) "a") (data (i32.const 210960) "a") (data (i32.const 210963) "a") (data (i32.const 210966) "a") (data (i32.const 210969) "a") (data (i32.const 210972) "a") (data (i32.const 210975) "a") (data (i32.const 210978) "a") (data (i32.const 210981) "a") (data (i32.const 210984) "a") (data (i32.const 210987) "a") (data (i32.const 210990) "a") (data (i32.const 210993) "a") (data (i32.const 210996) "a") (data (i32.const 210999) "a") (data (i32.const 211002) "a") (data (i32.const 211005) "a") (data (i32.const 211008) "a") (data (i32.const 211011) "a") (data (i32.const 211014) "a") (data (i32.const 211017) "a") (data (i32.const 211020) "a") (data (i32.const 211023) "a") (data (i32.const 211026) "a") (data (i32.const 211029) "a") (data (i32.const 211032) "a") (data (i32.const 211035) "a") (data (i32.const 211038) "a") (data (i32.const 211041) "a") (data (i32.const 211044) "a") (data (i32.const 211047) "a") (data (i32.const 211050) "a") (data (i32.const 211053) "a") (data (i32.const 211056) "a") (data (i32.const 211059) "a") (data (i32.const 211062) "a") (data (i32.const 211065) "a") (data (i32.const 211068) "a") (data (i32.const 211071) "a") (data (i32.const 211074) "a") (data (i32.const 211077) "a") (data (i32.const 211080) "a") (data (i32.const 211083) "a") (data (i32.const 211086) "a") (data (i32.const 211089) "a") (data (i32.const 211092) "a") (data (i32.const 211095) "a") (data (i32.const 211098) "a") (data (i32.const 211101) "a") (data (i32.const 211104) "a") (data (i32.const 211107) "a") (data (i32.const 211110) "a") (data (i32.const 211113) "a") (data (i32.const 211116) "a") (data (i32.const 211119) "a") (data (i32.const 211122) "a") (data (i32.const 211125) "a") (data (i32.const 211128) "a") (data (i32.const 211131) "a") (data (i32.const 211134) "a") (data (i32.const 211137) "a") (data (i32.const 211140) "a") (data (i32.const 211143) "a") (data (i32.const 211146) "a") (data (i32.const 211149) "a") (data (i32.const 211152) "a") (data (i32.const 211155) "a") (data (i32.const 211158) "a") (data (i32.const 211161) "a") (data (i32.const 211164) "a") (data (i32.const 211167) "a") (data (i32.const 211170) "a") (data (i32.const 211173) "a") (data (i32.const 211176) "a") (data (i32.const 211179) "a") (data (i32.const 211182) "a") (data (i32.const 211185) "a") (data (i32.const 211188) "a") (data (i32.const 211191) "a") (data (i32.const 211194) "a") (data (i32.const 211197) "a") (data (i32.const 211200) "a") (data (i32.const 211203) "a") (data (i32.const 211206) "a") (data (i32.const 211209) "a") (data (i32.const 211212) "a") (data (i32.const 211215) "a") (data (i32.const 211218) "a") (data (i32.const 211221) "a") (data (i32.const 211224) "a") (data (i32.const 211227) "a") (data (i32.const 211230) "a") (data (i32.const 211233) "a") (data (i32.const 211236) "a") (data (i32.const 211239) "a") (data (i32.const 211242) "a") (data (i32.const 211245) "a") (data (i32.const 211248) "a") (data (i32.const 211251) "a") (data (i32.const 211254) "a") (data (i32.const 211257) "a") (data (i32.const 211260) "a") (data (i32.const 211263) "a") (data (i32.const 211266) "a") (data (i32.const 211269) "a") (data (i32.const 211272) "a") (data (i32.const 211275) "a") (data (i32.const 211278) "a") (data (i32.const 211281) "a") (data (i32.const 211284) "a") (data (i32.const 211287) "a") (data (i32.const 211290) "a") (data (i32.const 211293) "a") (data (i32.const 211296) "a") (data (i32.const 211299) "a") (data (i32.const 211302) "a") (data (i32.const 211305) "a") (data (i32.const 211308) "a") (data (i32.const 211311) "a") (data (i32.const 211314) "a") (data (i32.const 211317) "a") (data (i32.const 211320) "a") (data (i32.const 211323) "a") (data (i32.const 211326) "a") (data (i32.const 211329) "a") (data (i32.const 211332) "a") (data (i32.const 211335) "a") (data (i32.const 211338) "a") (data (i32.const 211341) "a") (data (i32.const 211344) "a") (data (i32.const 211347) "a") (data (i32.const 211350) "a") (data (i32.const 211353) "a") (data (i32.const 211356) "a") (data (i32.const 211359) "a") (data (i32.const 211362) "a") (data (i32.const 211365) "a") (data (i32.const 211368) "a") (data (i32.const 211371) "a") (data (i32.const 211374) "a") (data (i32.const 211377) "a") (data (i32.const 211380) "a") (data (i32.const 211383) "a") (data (i32.const 211386) "a") (data (i32.const 211389) "a") (data (i32.const 211392) "a") (data (i32.const 211395) "a") (data (i32.const 211398) "a") (data (i32.const 211401) "a") (data (i32.const 211404) "a") (data (i32.const 211407) "a") (data (i32.const 211410) "a") (data (i32.const 211413) "a") (data (i32.const 211416) "a") (data (i32.const 211419) "a") (data (i32.const 211422) "a") (data (i32.const 211425) "a") (data (i32.const 211428) "a") (data (i32.const 211431) "a") (data (i32.const 211434) "a") (data (i32.const 211437) "a") (data (i32.const 211440) "a") (data (i32.const 211443) "a") (data (i32.const 211446) "a") (data (i32.const 211449) "a") (data (i32.const 211452) "a") (data (i32.const 211455) "a") (data (i32.const 211458) "a") (data (i32.const 211461) "a") (data (i32.const 211464) "a") (data (i32.const 211467) "a") (data (i32.const 211470) "a") (data (i32.const 211473) "a") (data (i32.const 211476) "a") (data (i32.const 211479) "a") (data (i32.const 211482) "a") (data (i32.const 211485) "a") (data (i32.const 211488) "a") (data (i32.const 211491) "a") (data (i32.const 211494) "a") (data (i32.const 211497) "a") (data (i32.const 211500) "a") (data (i32.const 211503) "a") (data (i32.const 211506) "a") (data (i32.const 211509) "a") (data (i32.const 211512) "a") (data (i32.const 211515) "a") (data (i32.const 211518) "a") (data (i32.const 211521) "a") (data (i32.const 211524) "a") (data (i32.const 211527) "a") (data (i32.const 211530) "a") (data (i32.const 211533) "a") (data (i32.const 211536) "a") (data (i32.const 211539) "a") (data (i32.const 211542) "a") (data (i32.const 211545) "a") (data (i32.const 211548) "a") (data (i32.const 211551) "a") (data (i32.const 211554) "a") (data (i32.const 211557) "a") (data (i32.const 211560) "a") (data (i32.const 211563) "a") (data (i32.const 211566) "a") (data (i32.const 211569) "a") (data (i32.const 211572) "a") (data (i32.const 211575) "a") (data (i32.const 211578) "a") (data (i32.const 211581) "a") (data (i32.const 211584) "a") (data (i32.const 211587) "a") (data (i32.const 211590) "a") (data (i32.const 211593) "a") (data (i32.const 211596) "a") (data (i32.const 211599) "a") (data (i32.const 211602) "a") (data (i32.const 211605) "a") (data (i32.const 211608) "a") (data (i32.const 211611) "a") (data (i32.const 211614) "a") (data (i32.const 211617) "a") (data (i32.const 211620) "a") (data (i32.const 211623) "a") (data (i32.const 211626) "a") (data (i32.const 211629) "a") (data (i32.const 211632) "a") (data (i32.const 211635) "a") (data (i32.const 211638) "a") (data (i32.const 211641) "a") (data (i32.const 211644) "a") (data (i32.const 211647) "a") (data (i32.const 211650) "a") (data (i32.const 211653) "a") (data (i32.const 211656) "a") (data (i32.const 211659) "a") (data (i32.const 211662) "a") (data (i32.const 211665) "a") (data (i32.const 211668) "a") (data (i32.const 211671) "a") (data (i32.const 211674) "a") (data (i32.const 211677) "a") (data (i32.const 211680) "a") (data (i32.const 211683) "a") (data (i32.const 211686) "a") (data (i32.const 211689) "a") (data (i32.const 211692) "a") (data (i32.const 211695) "a") (data (i32.const 211698) "a") (data (i32.const 211701) "a") (data (i32.const 211704) "a") (data (i32.const 211707) "a") (data (i32.const 211710) "a") (data (i32.const 211713) "a") (data (i32.const 211716) "a") (data (i32.const 211719) "a") (data (i32.const 211722) "a") (data (i32.const 211725) "a") (data (i32.const 211728) "a") (data (i32.const 211731) "a") (data (i32.const 211734) "a") (data (i32.const 211737) "a") (data (i32.const 211740) "a") (data (i32.const 211743) "a") (data (i32.const 211746) "a") (data (i32.const 211749) "a") (data (i32.const 211752) "a") (data (i32.const 211755) "a") (data (i32.const 211758) "a") (data (i32.const 211761) "a") (data (i32.const 211764) "a") (data (i32.const 211767) "a") (data (i32.const 211770) "a") (data (i32.const 211773) "a") (data (i32.const 211776) "a") (data (i32.const 211779) "a") (data (i32.const 211782) "a") (data (i32.const 211785) "a") (data (i32.const 211788) "a") (data (i32.const 211791) "a") (data (i32.const 211794) "a") (data (i32.const 211797) "a") (data (i32.const 211800) "a") (data (i32.const 211803) "a") (data (i32.const 211806) "a") (data (i32.const 211809) "a") (data (i32.const 211812) "a") (data (i32.const 211815) "a") (data (i32.const 211818) "a") (data (i32.const 211821) "a") (data (i32.const 211824) "a") (data (i32.const 211827) "a") (data (i32.const 211830) "a") (data (i32.const 211833) "a") (data (i32.const 211836) "a") (data (i32.const 211839) "a") (data (i32.const 211842) "a") (data (i32.const 211845) "a") (data (i32.const 211848) "a") (data (i32.const 211851) "a") (data (i32.const 211854) "a") (data (i32.const 211857) "a") (data (i32.const 211860) "a") (data (i32.const 211863) "a") (data (i32.const 211866) "a") (data (i32.const 211869) "a") (data (i32.const 211872) "a") (data (i32.const 211875) "a") (data (i32.const 211878) "a") (data (i32.const 211881) "a") (data (i32.const 211884) "a") (data (i32.const 211887) "a") (data (i32.const 211890) "a") (data (i32.const 211893) "a") (data (i32.const 211896) "a") (data (i32.const 211899) "a") (data (i32.const 211902) "a") (data (i32.const 211905) "a") (data (i32.const 211908) "a") (data (i32.const 211911) "a") (data (i32.const 211914) "a") (data (i32.const 211917) "a") (data (i32.const 211920) "a") (data (i32.const 211923) "a") (data (i32.const 211926) "a") (data (i32.const 211929) "a") (data (i32.const 211932) "a") (data (i32.const 211935) "a") (data (i32.const 211938) "a") (data (i32.const 211941) "a") (data (i32.const 211944) "a") (data (i32.const 211947) "a") (data (i32.const 211950) "a") (data (i32.const 211953) "a") (data (i32.const 211956) "a") (data (i32.const 211959) "a") (data (i32.const 211962) "a") (data (i32.const 211965) "a") (data (i32.const 211968) "a") (data (i32.const 211971) "a") (data (i32.const 211974) "a") (data (i32.const 211977) "a") (data (i32.const 211980) "a") (data (i32.const 211983) "a") (data (i32.const 211986) "a") (data (i32.const 211989) "a") (data (i32.const 211992) "a") (data (i32.const 211995) "a") (data (i32.const 211998) "a") (data (i32.const 212001) "a") (data (i32.const 212004) "a") (data (i32.const 212007) "a") (data (i32.const 212010) "a") (data (i32.const 212013) "a") (data (i32.const 212016) "a") (data (i32.const 212019) "a") (data (i32.const 212022) "a") (data (i32.const 212025) "a") (data (i32.const 212028) "a") (data (i32.const 212031) "a") (data (i32.const 212034) "a") (data (i32.const 212037) "a") (data (i32.const 212040) "a") (data (i32.const 212043) "a") (data (i32.const 212046) "a") (data (i32.const 212049) "a") (data (i32.const 212052) "a") (data (i32.const 212055) "a") (data (i32.const 212058) "a") (data (i32.const 212061) "a") (data (i32.const 212064) "a") (data (i32.const 212067) "a") (data (i32.const 212070) "a") (data (i32.const 212073) "a") (data (i32.const 212076) "a") (data (i32.const 212079) "a") (data (i32.const 212082) "a") (data (i32.const 212085) "a") (data (i32.const 212088) "a") (data (i32.const 212091) "a") (data (i32.const 212094) "a") (data (i32.const 212097) "a") (data (i32.const 212100) "a") (data (i32.const 212103) "a") (data (i32.const 212106) "a") (data (i32.const 212109) "a") (data (i32.const 212112) "a") (data (i32.const 212115) "a") (data (i32.const 212118) "a") (data (i32.const 212121) "a") (data (i32.const 212124) "a") (data (i32.const 212127) "a") (data (i32.const 212130) "a") (data (i32.const 212133) "a") (data (i32.const 212136) "a") (data (i32.const 212139) "a") (data (i32.const 212142) "a") (data (i32.const 212145) "a") (data (i32.const 212148) "a") (data (i32.const 212151) "a") (data (i32.const 212154) "a") (data (i32.const 212157) "a") (data (i32.const 212160) "a") (data (i32.const 212163) "a") (data (i32.const 212166) "a") (data (i32.const 212169) "a") (data (i32.const 212172) "a") (data (i32.const 212175) "a") (data (i32.const 212178) "a") (data (i32.const 212181) "a") (data (i32.const 212184) "a") (data (i32.const 212187) "a") (data (i32.const 212190) "a") (data (i32.const 212193) "a") (data (i32.const 212196) "a") (data (i32.const 212199) "a") (data (i32.const 212202) "a") (data (i32.const 212205) "a") (data (i32.const 212208) "a") (data (i32.const 212211) "a") (data (i32.const 212214) "a") (data (i32.const 212217) "a") (data (i32.const 212220) "a") (data (i32.const 212223) "a") (data (i32.const 212226) "a") (data (i32.const 212229) "a") (data (i32.const 212232) "a") (data (i32.const 212235) "a") (data (i32.const 212238) "a") (data (i32.const 212241) "a") (data (i32.const 212244) "a") (data (i32.const 212247) "a") (data (i32.const 212250) "a") (data (i32.const 212253) "a") (data (i32.const 212256) "a") (data (i32.const 212259) "a") (data (i32.const 212262) "a") (data (i32.const 212265) "a") (data (i32.const 212268) "a") (data (i32.const 212271) "a") (data (i32.const 212274) "a") (data (i32.const 212277) "a") (data (i32.const 212280) "a") (data (i32.const 212283) "a") (data (i32.const 212286) "a") (data (i32.const 212289) "a") (data (i32.const 212292) "a") (data (i32.const 212295) "a") (data (i32.const 212298) "a") (data (i32.const 212301) "a") (data (i32.const 212304) "a") (data (i32.const 212307) "a") (data (i32.const 212310) "a") (data (i32.const 212313) "a") (data (i32.const 212316) "a") (data (i32.const 212319) "a") (data (i32.const 212322) "a") (data (i32.const 212325) "a") (data (i32.const 212328) "a") (data (i32.const 212331) "a") (data (i32.const 212334) "a") (data (i32.const 212337) "a") (data (i32.const 212340) "a") (data (i32.const 212343) "a") (data (i32.const 212346) "a") (data (i32.const 212349) "a") (data (i32.const 212352) "a") (data (i32.const 212355) "a") (data (i32.const 212358) "a") (data (i32.const 212361) "a") (data (i32.const 212364) "a") (data (i32.const 212367) "a") (data (i32.const 212370) "a") (data (i32.const 212373) "a") (data (i32.const 212376) "a") (data (i32.const 212379) "a") (data (i32.const 212382) "a") (data (i32.const 212385) "a") (data (i32.const 212388) "a") (data (i32.const 212391) "a") (data (i32.const 212394) "a") (data (i32.const 212397) "a") (data (i32.const 212400) "a") (data (i32.const 212403) "a") (data (i32.const 212406) "a") (data (i32.const 212409) "a") (data (i32.const 212412) "a") (data (i32.const 212415) "a") (data (i32.const 212418) "a") (data (i32.const 212421) "a") (data (i32.const 212424) "a") (data (i32.const 212427) "a") (data (i32.const 212430) "a") (data (i32.const 212433) "a") (data (i32.const 212436) "a") (data (i32.const 212439) "a") (data (i32.const 212442) "a") (data (i32.const 212445) "a") (data (i32.const 212448) "a") (data (i32.const 212451) "a") (data (i32.const 212454) "a") (data (i32.const 212457) "a") (data (i32.const 212460) "a") (data (i32.const 212463) "a") (data (i32.const 212466) "a") (data (i32.const 212469) "a") (data (i32.const 212472) "a") (data (i32.const 212475) "a") (data (i32.const 212478) "a") (data (i32.const 212481) "a") (data (i32.const 212484) "a") (data (i32.const 212487) "a") (data (i32.const 212490) "a") (data (i32.const 212493) "a") (data (i32.const 212496) "a") (data (i32.const 212499) "a") (data (i32.const 212502) "a") (data (i32.const 212505) "a") (data (i32.const 212508) "a") (data (i32.const 212511) "a") (data (i32.const 212514) "a") (data (i32.const 212517) "a") (data (i32.const 212520) "a") (data (i32.const 212523) "a") (data (i32.const 212526) "a") (data (i32.const 212529) "a") (data (i32.const 212532) "a") (data (i32.const 212535) "a") (data (i32.const 212538) "a") (data (i32.const 212541) "a") (data (i32.const 212544) "a") (data (i32.const 212547) "a") (data (i32.const 212550) "a") (data (i32.const 212553) "a") (data (i32.const 212556) "a") (data (i32.const 212559) "a") (data (i32.const 212562) "a") (data (i32.const 212565) "a") (data (i32.const 212568) "a") (data (i32.const 212571) "a") (data (i32.const 212574) "a") (data (i32.const 212577) "a") (data (i32.const 212580) "a") (data (i32.const 212583) "a") (data (i32.const 212586) "a") (data (i32.const 212589) "a") (data (i32.const 212592) "a") (data (i32.const 212595) "a") (data (i32.const 212598) "a") (data (i32.const 212601) "a") (data (i32.const 212604) "a") (data (i32.const 212607) "a") (data (i32.const 212610) "a") (data (i32.const 212613) "a") (data (i32.const 212616) "a") (data (i32.const 212619) "a") (data (i32.const 212622) "a") (data (i32.const 212625) "a") (data (i32.const 212628) "a") (data (i32.const 212631) "a") (data (i32.const 212634) "a") (data (i32.const 212637) "a") (data (i32.const 212640) "a") (data (i32.const 212643) "a") (data (i32.const 212646) "a") (data (i32.const 212649) "a") (data (i32.const 212652) "a") (data (i32.const 212655) "a") (data (i32.const 212658) "a") (data (i32.const 212661) "a") (data (i32.const 212664) "a") (data (i32.const 212667) "a") (data (i32.const 212670) "a") (data (i32.const 212673) "a") (data (i32.const 212676) "a") (data (i32.const 212679) "a") (data (i32.const 212682) "a") (data (i32.const 212685) "a") (data (i32.const 212688) "a") (data (i32.const 212691) "a") (data (i32.const 212694) "a") (data (i32.const 212697) "a") (data (i32.const 212700) "a") (data (i32.const 212703) "a") (data (i32.const 212706) "a") (data (i32.const 212709) "a") (data (i32.const 212712) "a") (data (i32.const 212715) "a") (data (i32.const 212718) "a") (data (i32.const 212721) "a") (data (i32.const 212724) "a") (data (i32.const 212727) "a") (data (i32.const 212730) "a") (data (i32.const 212733) "a") (data (i32.const 212736) "a") (data (i32.const 212739) "a") (data (i32.const 212742) "a") (data (i32.const 212745) "a") (data (i32.const 212748) "a") (data (i32.const 212751) "a") (data (i32.const 212754) "a") (data (i32.const 212757) "a") (data (i32.const 212760) "a") (data (i32.const 212763) "a") (data (i32.const 212766) "a") (data (i32.const 212769) "a") (data (i32.const 212772) "a") (data (i32.const 212775) "a") (data (i32.const 212778) "a") (data (i32.const 212781) "a") (data (i32.const 212784) "a") (data (i32.const 212787) "a") (data (i32.const 212790) "a") (data (i32.const 212793) "a") (data (i32.const 212796) "a") (data (i32.const 212799) "a") (data (i32.const 212802) "a") (data (i32.const 212805) "a") (data (i32.const 212808) "a") (data (i32.const 212811) "a") (data (i32.const 212814) "a") (data (i32.const 212817) "a") (data (i32.const 212820) "a") (data (i32.const 212823) "a") (data (i32.const 212826) "a") (data (i32.const 212829) "a") (data (i32.const 212832) "a") (data (i32.const 212835) "a") (data (i32.const 212838) "a") (data (i32.const 212841) "a") (data (i32.const 212844) "a") (data (i32.const 212847) "a") (data (i32.const 212850) "a") (data (i32.const 212853) "a") (data (i32.const 212856) "a") (data (i32.const 212859) "a") (data (i32.const 212862) "a") (data (i32.const 212865) "a") (data (i32.const 212868) "a") (data (i32.const 212871) "a") (data (i32.const 212874) "a") (data (i32.const 212877) "a") (data (i32.const 212880) "a") (data (i32.const 212883) "a") (data (i32.const 212886) "a") (data (i32.const 212889) "a") (data (i32.const 212892) "a") (data (i32.const 212895) "a") (data (i32.const 212898) "a") (data (i32.const 212901) "a") (data (i32.const 212904) "a") (data (i32.const 212907) "a") (data (i32.const 212910) "a") (data (i32.const 212913) "a") (data (i32.const 212916) "a") (data (i32.const 212919) "a") (data (i32.const 212922) "a") (data (i32.const 212925) "a") (data (i32.const 212928) "a") (data (i32.const 212931) "a") (data (i32.const 212934) "a") (data (i32.const 212937) "a") (data (i32.const 212940) "a") (data (i32.const 212943) "a") (data (i32.const 212946) "a") (data (i32.const 212949) "a") (data (i32.const 212952) "a") (data (i32.const 212955) "a") (data (i32.const 212958) "a") (data (i32.const 212961) "a") (data (i32.const 212964) "a") (data (i32.const 212967) "a") (data (i32.const 212970) "a") (data (i32.const 212973) "a") (data (i32.const 212976) "a") (data (i32.const 212979) "a") (data (i32.const 212982) "a") (data (i32.const 212985) "a") (data (i32.const 212988) "a") (data (i32.const 212991) "a") (data (i32.const 212994) "a") (data (i32.const 212997) "a") (data (i32.const 213000) "a") (data (i32.const 213003) "a") (data (i32.const 213006) "a") (data (i32.const 213009) "a") (data (i32.const 213012) "a") (data (i32.const 213015) "a") (data (i32.const 213018) "a") (data (i32.const 213021) "a") (data (i32.const 213024) "a") (data (i32.const 213027) "a") (data (i32.const 213030) "a") (data (i32.const 213033) "a") (data (i32.const 213036) "a") (data (i32.const 213039) "a") (data (i32.const 213042) "a") (data (i32.const 213045) "a") (data (i32.const 213048) "a") (data (i32.const 213051) "a") (data (i32.const 213054) "a") (data (i32.const 213057) "a") (data (i32.const 213060) "a") (data (i32.const 213063) "a") (data (i32.const 213066) "a") (data (i32.const 213069) "a") (data (i32.const 213072) "a") (data (i32.const 213075) "a") (data (i32.const 213078) "a") (data (i32.const 213081) "a") (data (i32.const 213084) "a") (data (i32.const 213087) "a") (data (i32.const 213090) "a") (data (i32.const 213093) "a") (data (i32.const 213096) "a") (data (i32.const 213099) "a") (data (i32.const 213102) "a") (data (i32.const 213105) "a") (data (i32.const 213108) "a") (data (i32.const 213111) "a") (data (i32.const 213114) "a") (data (i32.const 213117) "a") (data (i32.const 213120) "a") (data (i32.const 213123) "a") (data (i32.const 213126) "a") (data (i32.const 213129) "a") (data (i32.const 213132) "a") (data (i32.const 213135) "a") (data (i32.const 213138) "a") (data (i32.const 213141) "a") (data (i32.const 213144) "a") (data (i32.const 213147) "a") (data (i32.const 213150) "a") (data (i32.const 213153) "a") (data (i32.const 213156) "a") (data (i32.const 213159) "a") (data (i32.const 213162) "a") (data (i32.const 213165) "a") (data (i32.const 213168) "a") (data (i32.const 213171) "a") (data (i32.const 213174) "a") (data (i32.const 213177) "a") (data (i32.const 213180) "a") (data (i32.const 213183) "a") (data (i32.const 213186) "a") (data (i32.const 213189) "a") (data (i32.const 213192) "a") (data (i32.const 213195) "a") (data (i32.const 213198) "a") (data (i32.const 213201) "a") (data (i32.const 213204) "a") (data (i32.const 213207) "a") (data (i32.const 213210) "a") (data (i32.const 213213) "a") (data (i32.const 213216) "a") (data (i32.const 213219) "a") (data (i32.const 213222) "a") (data (i32.const 213225) "a") (data (i32.const 213228) "a") (data (i32.const 213231) "a") (data (i32.const 213234) "a") (data (i32.const 213237) "a") (data (i32.const 213240) "a") (data (i32.const 213243) "a") (data (i32.const 213246) "a") (data (i32.const 213249) "a") (data (i32.const 213252) "a") (data (i32.const 213255) "a") (data (i32.const 213258) "a") (data (i32.const 213261) "a") (data (i32.const 213264) "a") (data (i32.const 213267) "a") (data (i32.const 213270) "a") (data (i32.const 213273) "a") (data (i32.const 213276) "a") (data (i32.const 213279) "a") (data (i32.const 213282) "a") (data (i32.const 213285) "a") (data (i32.const 213288) "a") (data (i32.const 213291) "a") (data (i32.const 213294) "a") (data (i32.const 213297) "a") (data (i32.const 213300) "a") (data (i32.const 213303) "a") (data (i32.const 213306) "a") (data (i32.const 213309) "a") (data (i32.const 213312) "a") (data (i32.const 213315) "a") (data (i32.const 213318) "a") (data (i32.const 213321) "a") (data (i32.const 213324) "a") (data (i32.const 213327) "a") (data (i32.const 213330) "a") (data (i32.const 213333) "a") (data (i32.const 213336) "a") (data (i32.const 213339) "a") (data (i32.const 213342) "a") (data (i32.const 213345) "a") (data (i32.const 213348) "a") (data (i32.const 213351) "a") (data (i32.const 213354) "a") (data (i32.const 213357) "a") (data (i32.const 213360) "a") (data (i32.const 213363) "a") (data (i32.const 213366) "a") (data (i32.const 213369) "a") (data (i32.const 213372) "a") (data (i32.const 213375) "a") (data (i32.const 213378) "a") (data (i32.const 213381) "a") (data (i32.const 213384) "a") (data (i32.const 213387) "a") (data (i32.const 213390) "a") (data (i32.const 213393) "a") (data (i32.const 213396) "a") (data (i32.const 213399) "a") (data (i32.const 213402) "a") (data (i32.const 213405) "a") (data (i32.const 213408) "a") (data (i32.const 213411) "a") (data (i32.const 213414) "a") (data (i32.const 213417) "a") (data (i32.const 213420) "a") (data (i32.const 213423) "a") (data (i32.const 213426) "a") (data (i32.const 213429) "a") (data (i32.const 213432) "a") (data (i32.const 213435) "a") (data (i32.const 213438) "a") (data (i32.const 213441) "a") (data (i32.const 213444) "a") (data (i32.const 213447) "a") (data (i32.const 213450) "a") (data (i32.const 213453) "a") (data (i32.const 213456) "a") (data (i32.const 213459) "a") (data (i32.const 213462) "a") (data (i32.const 213465) "a") (data (i32.const 213468) "a") (data (i32.const 213471) "a") (data (i32.const 213474) "a") (data (i32.const 213477) "a") (data (i32.const 213480) "a") (data (i32.const 213483) "a") (data (i32.const 213486) "a") (data (i32.const 213489) "a") (data (i32.const 213492) "a") (data (i32.const 213495) "a") (data (i32.const 213498) "a") (data (i32.const 213501) "a") (data (i32.const 213504) "a") (data (i32.const 213507) "a") (data (i32.const 213510) "a") (data (i32.const 213513) "a") (data (i32.const 213516) "a") (data (i32.const 213519) "a") (data (i32.const 213522) "a") (data (i32.const 213525) "a") (data (i32.const 213528) "a") (data (i32.const 213531) "a") (data (i32.const 213534) "a") (data (i32.const 213537) "a") (data (i32.const 213540) "a") (data (i32.const 213543) "a") (data (i32.const 213546) "a") (data (i32.const 213549) "a") (data (i32.const 213552) "a") (data (i32.const 213555) "a") (data (i32.const 213558) "a") (data (i32.const 213561) "a") (data (i32.const 213564) "a") (data (i32.const 213567) "a") (data (i32.const 213570) "a") (data (i32.const 213573) "a") (data (i32.const 213576) "a") (data (i32.const 213579) "a") (data (i32.const 213582) "a") (data (i32.const 213585) "a") (data (i32.const 213588) "a") (data (i32.const 213591) "a") (data (i32.const 213594) "a") (data (i32.const 213597) "a") (data (i32.const 213600) "a") (data (i32.const 213603) "a") (data (i32.const 213606) "a") (data (i32.const 213609) "a") (data (i32.const 213612) "a") (data (i32.const 213615) "a") (data (i32.const 213618) "a") (data (i32.const 213621) "a") (data (i32.const 213624) "a") (data (i32.const 213627) "a") (data (i32.const 213630) "a") (data (i32.const 213633) "a") (data (i32.const 213636) "a") (data (i32.const 213639) "a") (data (i32.const 213642) "a") (data (i32.const 213645) "a") (data (i32.const 213648) "a") (data (i32.const 213651) "a") (data (i32.const 213654) "a") (data (i32.const 213657) "a") (data (i32.const 213660) "a") (data (i32.const 213663) "a") (data (i32.const 213666) "a") (data (i32.const 213669) "a") (data (i32.const 213672) "a") (data (i32.const 213675) "a") (data (i32.const 213678) "a") (data (i32.const 213681) "a") (data (i32.const 213684) "a") (data (i32.const 213687) "a") (data (i32.const 213690) "a") (data (i32.const 213693) "a") (data (i32.const 213696) "a") (data (i32.const 213699) "a") (data (i32.const 213702) "a") (data (i32.const 213705) "a") (data (i32.const 213708) "a") (data (i32.const 213711) "a") (data (i32.const 213714) "a") (data (i32.const 213717) "a") (data (i32.const 213720) "a") (data (i32.const 213723) "a") (data (i32.const 213726) "a") (data (i32.const 213729) "a") (data (i32.const 213732) "a") (data (i32.const 213735) "a") (data (i32.const 213738) "a") (data (i32.const 213741) "a") (data (i32.const 213744) "a") (data (i32.const 213747) "a") (data (i32.const 213750) "a") (data (i32.const 213753) "a") (data (i32.const 213756) "a") (data (i32.const 213759) "a") (data (i32.const 213762) "a") (data (i32.const 213765) "a") (data (i32.const 213768) "a") (data (i32.const 213771) "a") (data (i32.const 213774) "a") (data (i32.const 213777) "a") (data (i32.const 213780) "a") (data (i32.const 213783) "a") (data (i32.const 213786) "a") (data (i32.const 213789) "a") (data (i32.const 213792) "a") (data (i32.const 213795) "a") (data (i32.const 213798) "a") (data (i32.const 213801) "a") (data (i32.const 213804) "a") (data (i32.const 213807) "a") (data (i32.const 213810) "a") (data (i32.const 213813) "a") (data (i32.const 213816) "a") (data (i32.const 213819) "a") (data (i32.const 213822) "a") (data (i32.const 213825) "a") (data (i32.const 213828) "a") (data (i32.const 213831) "a") (data (i32.const 213834) "a") (data (i32.const 213837) "a") (data (i32.const 213840) "a") (data (i32.const 213843) "a") (data (i32.const 213846) "a") (data (i32.const 213849) "a") (data (i32.const 213852) "a") (data (i32.const 213855) "a") (data (i32.const 213858) "a") (data (i32.const 213861) "a") (data (i32.const 213864) "a") (data (i32.const 213867) "a") (data (i32.const 213870) "a") (data (i32.const 213873) "a") (data (i32.const 213876) "a") (data (i32.const 213879) "a") (data (i32.const 213882) "a") (data (i32.const 213885) "a") (data (i32.const 213888) "a") (data (i32.const 213891) "a") (data (i32.const 213894) "a") (data (i32.const 213897) "a") (data (i32.const 213900) "a") (data (i32.const 213903) "a") (data (i32.const 213906) "a") (data (i32.const 213909) "a") (data (i32.const 213912) "a") (data (i32.const 213915) "a") (data (i32.const 213918) "a") (data (i32.const 213921) "a") (data (i32.const 213924) "a") (data (i32.const 213927) "a") (data (i32.const 213930) "a") (data (i32.const 213933) "a") (data (i32.const 213936) "a") (data (i32.const 213939) "a") (data (i32.const 213942) "a") (data (i32.const 213945) "a") (data (i32.const 213948) "a") (data (i32.const 213951) "a") (data (i32.const 213954) "a") (data (i32.const 213957) "a") (data (i32.const 213960) "a") (data (i32.const 213963) "a") (data (i32.const 213966) "a") (data (i32.const 213969) "a") (data (i32.const 213972) "a") (data (i32.const 213975) "a") (data (i32.const 213978) "a") (data (i32.const 213981) "a") (data (i32.const 213984) "a") (data (i32.const 213987) "a") (data (i32.const 213990) "a") (data (i32.const 213993) "a") (data (i32.const 213996) "a") (data (i32.const 213999) "a") (data (i32.const 214002) "a") (data (i32.const 214005) "a") (data (i32.const 214008) "a") (data (i32.const 214011) "a") (data (i32.const 214014) "a") (data (i32.const 214017) "a") (data (i32.const 214020) "a") (data (i32.const 214023) "a") (data (i32.const 214026) "a") (data (i32.const 214029) "a") (data (i32.const 214032) "a") (data (i32.const 214035) "a") (data (i32.const 214038) "a") (data (i32.const 214041) "a") (data (i32.const 214044) "a") (data (i32.const 214047) "a") (data (i32.const 214050) "a") (data (i32.const 214053) "a") (data (i32.const 214056) "a") (data (i32.const 214059) "a") (data (i32.const 214062) "a") (data (i32.const 214065) "a") (data (i32.const 214068) "a") (data (i32.const 214071) "a") (data (i32.const 214074) "a") (data (i32.const 214077) "a") (data (i32.const 214080) "a") (data (i32.const 214083) "a") (data (i32.const 214086) "a") (data (i32.const 214089) "a") (data (i32.const 214092) "a") (data (i32.const 214095) "a") (data (i32.const 214098) "a") (data (i32.const 214101) "a") (data (i32.const 214104) "a") (data (i32.const 214107) "a") (data (i32.const 214110) "a") (data (i32.const 214113) "a") (data (i32.const 214116) "a") (data (i32.const 214119) "a") (data (i32.const 214122) "a") (data (i32.const 214125) "a") (data (i32.const 214128) "a") (data (i32.const 214131) "a") (data (i32.const 214134) "a") (data (i32.const 214137) "a") (data (i32.const 214140) "a") (data (i32.const 214143) "a") (data (i32.const 214146) "a") (data (i32.const 214149) "a") (data (i32.const 214152) "a") (data (i32.const 214155) "a") (data (i32.const 214158) "a") (data (i32.const 214161) "a") (data (i32.const 214164) "a") (data (i32.const 214167) "a") (data (i32.const 214170) "a") (data (i32.const 214173) "a") (data (i32.const 214176) "a") (data (i32.const 214179) "a") (data (i32.const 214182) "a") (data (i32.const 214185) "a") (data (i32.const 214188) "a") (data (i32.const 214191) "a") (data (i32.const 214194) "a") (data (i32.const 214197) "a") (data (i32.const 214200) "a") (data (i32.const 214203) "a") (data (i32.const 214206) "a") (data (i32.const 214209) "a") (data (i32.const 214212) "a") (data (i32.const 214215) "a") (data (i32.const 214218) "a") (data (i32.const 214221) "a") (data (i32.const 214224) "a") (data (i32.const 214227) "a") (data (i32.const 214230) "a") (data (i32.const 214233) "a") (data (i32.const 214236) "a") (data (i32.const 214239) "a") (data (i32.const 214242) "a") (data (i32.const 214245) "a") (data (i32.const 214248) "a") (data (i32.const 214251) "a") (data (i32.const 214254) "a") (data (i32.const 214257) "a") (data (i32.const 214260) "a") (data (i32.const 214263) "a") (data (i32.const 214266) "a") (data (i32.const 214269) "a") (data (i32.const 214272) "a") (data (i32.const 214275) "a") (data (i32.const 214278) "a") (data (i32.const 214281) "a") (data (i32.const 214284) "a") (data (i32.const 214287) "a") (data (i32.const 214290) "a") (data (i32.const 214293) "a") (data (i32.const 214296) "a") (data (i32.const 214299) "a") (data (i32.const 214302) "a") (data (i32.const 214305) "a") (data (i32.const 214308) "a") (data (i32.const 214311) "a") (data (i32.const 214314) "a") (data (i32.const 214317) "a") (data (i32.const 214320) "a") (data (i32.const 214323) "a") (data (i32.const 214326) "a") (data (i32.const 214329) "a") (data (i32.const 214332) "a") (data (i32.const 214335) "a") (data (i32.const 214338) "a") (data (i32.const 214341) "a") (data (i32.const 214344) "a") (data (i32.const 214347) "a") (data (i32.const 214350) "a") (data (i32.const 214353) "a") (data (i32.const 214356) "a") (data (i32.const 214359) "a") (data (i32.const 214362) "a") (data (i32.const 214365) "a") (data (i32.const 214368) "a") (data (i32.const 214371) "a") (data (i32.const 214374) "a") (data (i32.const 214377) "a") (data (i32.const 214380) "a") (data (i32.const 214383) "a") (data (i32.const 214386) "a") (data (i32.const 214389) "a") (data (i32.const 214392) "a") (data (i32.const 214395) "a") (data (i32.const 214398) "a") (data (i32.const 214401) "a") (data (i32.const 214404) "a") (data (i32.const 214407) "a") (data (i32.const 214410) "a") (data (i32.const 214413) "a") (data (i32.const 214416) "a") (data (i32.const 214419) "a") (data (i32.const 214422) "a") (data (i32.const 214425) "a") (data (i32.const 214428) "a") (data (i32.const 214431) "a") (data (i32.const 214434) "a") (data (i32.const 214437) "a") (data (i32.const 214440) "a") (data (i32.const 214443) "a") (data (i32.const 214446) "a") (data (i32.const 214449) "a") (data (i32.const 214452) "a") (data (i32.const 214455) "a") (data (i32.const 214458) "a") (data (i32.const 214461) "a") (data (i32.const 214464) "a") (data (i32.const 214467) "a") (data (i32.const 214470) "a") (data (i32.const 214473) "a") (data (i32.const 214476) "a") (data (i32.const 214479) "a") (data (i32.const 214482) "a") (data (i32.const 214485) "a") (data (i32.const 214488) "a") (data (i32.const 214491) "a") (data (i32.const 214494) "a") (data (i32.const 214497) "a") (data (i32.const 214500) "a") (data (i32.const 214503) "a") (data (i32.const 214506) "a") (data (i32.const 214509) "a") (data (i32.const 214512) "a") (data (i32.const 214515) "a") (data (i32.const 214518) "a") (data (i32.const 214521) "a") (data (i32.const 214524) "a") (data (i32.const 214527) "a") (data (i32.const 214530) "a") (data (i32.const 214533) "a") (data (i32.const 214536) "a") (data (i32.const 214539) "a") (data (i32.const 214542) "a") (data (i32.const 214545) "a") (data (i32.const 214548) "a") (data (i32.const 214551) "a") (data (i32.const 214554) "a") (data (i32.const 214557) "a") (data (i32.const 214560) "a") (data (i32.const 214563) "a") (data (i32.const 214566) "a") (data (i32.const 214569) "a") (data (i32.const 214572) "a") (data (i32.const 214575) "a") (data (i32.const 214578) "a") (data (i32.const 214581) "a") (data (i32.const 214584) "a") (data (i32.const 214587) "a") (data (i32.const 214590) "a") (data (i32.const 214593) "a") (data (i32.const 214596) "a") (data (i32.const 214599) "a") (data (i32.const 214602) "a") (data (i32.const 214605) "a") (data (i32.const 214608) "a") (data (i32.const 214611) "a") (data (i32.const 214614) "a") (data (i32.const 214617) "a") (data (i32.const 214620) "a") (data (i32.const 214623) "a") (data (i32.const 214626) "a") (data (i32.const 214629) "a") (data (i32.const 214632) "a") (data (i32.const 214635) "a") (data (i32.const 214638) "a") (data (i32.const 214641) "a") (data (i32.const 214644) "a") (data (i32.const 214647) "a") (data (i32.const 214650) "a") (data (i32.const 214653) "a") (data (i32.const 214656) "a") (data (i32.const 214659) "a") (data (i32.const 214662) "a") (data (i32.const 214665) "a") (data (i32.const 214668) "a") (data (i32.const 214671) "a") (data (i32.const 214674) "a") (data (i32.const 214677) "a") (data (i32.const 214680) "a") (data (i32.const 214683) "a") (data (i32.const 214686) "a") (data (i32.const 214689) "a") (data (i32.const 214692) "a") (data (i32.const 214695) "a") (data (i32.const 214698) "a") (data (i32.const 214701) "a") (data (i32.const 214704) "a") (data (i32.const 214707) "a") (data (i32.const 214710) "a") (data (i32.const 214713) "a") (data (i32.const 214716) "a") (data (i32.const 214719) "a") (data (i32.const 214722) "a") (data (i32.const 214725) "a") (data (i32.const 214728) "a") (data (i32.const 214731) "a") (data (i32.const 214734) "a") (data (i32.const 214737) "a") (data (i32.const 214740) "a") (data (i32.const 214743) "a") (data (i32.const 214746) "a") (data (i32.const 214749) "a") (data (i32.const 214752) "a") (data (i32.const 214755) "a") (data (i32.const 214758) "a") (data (i32.const 214761) "a") (data (i32.const 214764) "a") (data (i32.const 214767) "a") (data (i32.const 214770) "a") (data (i32.const 214773) "a") (data (i32.const 214776) "a") (data (i32.const 214779) "a") (data (i32.const 214782) "a") (data (i32.const 214785) "a") (data (i32.const 214788) "a") (data (i32.const 214791) "a") (data (i32.const 214794) "a") (data (i32.const 214797) "a") (data (i32.const 214800) "a") (data (i32.const 214803) "a") (data (i32.const 214806) "a") (data (i32.const 214809) "a") (data (i32.const 214812) "a") (data (i32.const 214815) "a") (data (i32.const 214818) "a") (data (i32.const 214821) "a") (data (i32.const 214824) "a") (data (i32.const 214827) "a") (data (i32.const 214830) "a") (data (i32.const 214833) "a") (data (i32.const 214836) "a") (data (i32.const 214839) "a") (data (i32.const 214842) "a") (data (i32.const 214845) "a") (data (i32.const 214848) "a") (data (i32.const 214851) "a") (data (i32.const 214854) "a") (data (i32.const 214857) "a") (data (i32.const 214860) "a") (data (i32.const 214863) "a") (data (i32.const 214866) "a") (data (i32.const 214869) "a") (data (i32.const 214872) "a") (data (i32.const 214875) "a") (data (i32.const 214878) "a") (data (i32.const 214881) "a") (data (i32.const 214884) "a") (data (i32.const 214887) "a") (data (i32.const 214890) "a") (data (i32.const 214893) "a") (data (i32.const 214896) "a") (data (i32.const 214899) "a") (data (i32.const 214902) "a") (data (i32.const 214905) "a") (data (i32.const 214908) "a") (data (i32.const 214911) "a") (data (i32.const 214914) "a") (data (i32.const 214917) "a") (data (i32.const 214920) "a") (data (i32.const 214923) "a") (data (i32.const 214926) "a") (data (i32.const 214929) "a") (data (i32.const 214932) "a") (data (i32.const 214935) "a") (data (i32.const 214938) "a") (data (i32.const 214941) "a") (data (i32.const 214944) "a") (data (i32.const 214947) "a") (data (i32.const 214950) "a") (data (i32.const 214953) "a") (data (i32.const 214956) "a") (data (i32.const 214959) "a") (data (i32.const 214962) "a") (data (i32.const 214965) "a") (data (i32.const 214968) "a") (data (i32.const 214971) "a") (data (i32.const 214974) "a") (data (i32.const 214977) "a") (data (i32.const 214980) "a") (data (i32.const 214983) "a") (data (i32.const 214986) "a") (data (i32.const 214989) "a") (data (i32.const 214992) "a") (data (i32.const 214995) "a") (data (i32.const 214998) "a") (data (i32.const 215001) "a") (data (i32.const 215004) "a") (data (i32.const 215007) "a") (data (i32.const 215010) "a") (data (i32.const 215013) "a") (data (i32.const 215016) "a") (data (i32.const 215019) "a") (data (i32.const 215022) "a") (data (i32.const 215025) "a") (data (i32.const 215028) "a") (data (i32.const 215031) "a") (data (i32.const 215034) "a") (data (i32.const 215037) "a") (data (i32.const 215040) "a") (data (i32.const 215043) "a") (data (i32.const 215046) "a") (data (i32.const 215049) "a") (data (i32.const 215052) "a") (data (i32.const 215055) "a") (data (i32.const 215058) "a") (data (i32.const 215061) "a") (data (i32.const 215064) "a") (data (i32.const 215067) "a") (data (i32.const 215070) "a") (data (i32.const 215073) "a") (data (i32.const 215076) "a") (data (i32.const 215079) "a") (data (i32.const 215082) "a") (data (i32.const 215085) "a") (data (i32.const 215088) "a") (data (i32.const 215091) "a") (data (i32.const 215094) "a") (data (i32.const 215097) "a") (data (i32.const 215100) "a") (data (i32.const 215103) "a") (data (i32.const 215106) "a") (data (i32.const 215109) "a") (data (i32.const 215112) "a") (data (i32.const 215115) "a") (data (i32.const 215118) "a") (data (i32.const 215121) "a") (data (i32.const 215124) "a") (data (i32.const 215127) "a") (data (i32.const 215130) "a") (data (i32.const 215133) "a") (data (i32.const 215136) "a") (data (i32.const 215139) "a") (data (i32.const 215142) "a") (data (i32.const 215145) "a") (data (i32.const 215148) "a") (data (i32.const 215151) "a") (data (i32.const 215154) "a") (data (i32.const 215157) "a") (data (i32.const 215160) "a") (data (i32.const 215163) "a") (data (i32.const 215166) "a") (data (i32.const 215169) "a") (data (i32.const 215172) "a") (data (i32.const 215175) "a") (data (i32.const 215178) "a") (data (i32.const 215181) "a") (data (i32.const 215184) "a") (data (i32.const 215187) "a") (data (i32.const 215190) "a") (data (i32.const 215193) "a") (data (i32.const 215196) "a") (data (i32.const 215199) "a") (data (i32.const 215202) "a") (data (i32.const 215205) "a") (data (i32.const 215208) "a") (data (i32.const 215211) "a") (data (i32.const 215214) "a") (data (i32.const 215217) "a") (data (i32.const 215220) "a") (data (i32.const 215223) "a") (data (i32.const 215226) "a") (data (i32.const 215229) "a") (data (i32.const 215232) "a") (data (i32.const 215235) "a") (data (i32.const 215238) "a") (data (i32.const 215241) "a") (data (i32.const 215244) "a") (data (i32.const 215247) "a") (data (i32.const 215250) "a") (data (i32.const 215253) "a") (data (i32.const 215256) "a") (data (i32.const 215259) "a") (data (i32.const 215262) "a") (data (i32.const 215265) "a") (data (i32.const 215268) "a") (data (i32.const 215271) "a") (data (i32.const 215274) "a") (data (i32.const 215277) "a") (data (i32.const 215280) "a") (data (i32.const 215283) "a") (data (i32.const 215286) "a") (data (i32.const 215289) "a") (data (i32.const 215292) "a") (data (i32.const 215295) "a") (data (i32.const 215298) "a") (data (i32.const 215301) "a") (data (i32.const 215304) "a") (data (i32.const 215307) "a") (data (i32.const 215310) "a") (data (i32.const 215313) "a") (data (i32.const 215316) "a") (data (i32.const 215319) "a") (data (i32.const 215322) "a") (data (i32.const 215325) "a") (data (i32.const 215328) "a") (data (i32.const 215331) "a") (data (i32.const 215334) "a") (data (i32.const 215337) "a") (data (i32.const 215340) "a") (data (i32.const 215343) "a") (data (i32.const 215346) "a") (data (i32.const 215349) "a") (data (i32.const 215352) "a") (data (i32.const 215355) "a") (data (i32.const 215358) "a") (data (i32.const 215361) "a") (data (i32.const 215364) "a") (data (i32.const 215367) "a") (data (i32.const 215370) "a") (data (i32.const 215373) "a") (data (i32.const 215376) "a") (data (i32.const 215379) "a") (data (i32.const 215382) "a") (data (i32.const 215385) "a") (data (i32.const 215388) "a") (data (i32.const 215391) "a") (data (i32.const 215394) "a") (data (i32.const 215397) "a") (data (i32.const 215400) "a") (data (i32.const 215403) "a") (data (i32.const 215406) "a") (data (i32.const 215409) "a") (data (i32.const 215412) "a") (data (i32.const 215415) "a") (data (i32.const 215418) "a") (data (i32.const 215421) "a") (data (i32.const 215424) "a") (data (i32.const 215427) "a") (data (i32.const 215430) "a") (data (i32.const 215433) "a") (data (i32.const 215436) "a") (data (i32.const 215439) "a") (data (i32.const 215442) "a") (data (i32.const 215445) "a") (data (i32.const 215448) "a") (data (i32.const 215451) "a") (data (i32.const 215454) "a") (data (i32.const 215457) "a") (data (i32.const 215460) "a") (data (i32.const 215463) "a") (data (i32.const 215466) "a") (data (i32.const 215469) "a") (data (i32.const 215472) "a") (data (i32.const 215475) "a") (data (i32.const 215478) "a") (data (i32.const 215481) "a") (data (i32.const 215484) "a") (data (i32.const 215487) "a") (data (i32.const 215490) "a") (data (i32.const 215493) "a") (data (i32.const 215496) "a") (data (i32.const 215499) "a") (data (i32.const 215502) "a") (data (i32.const 215505) "a") (data (i32.const 215508) "a") (data (i32.const 215511) "a") (data (i32.const 215514) "a") (data (i32.const 215517) "a") (data (i32.const 215520) "a") (data (i32.const 215523) "a") (data (i32.const 215526) "a") (data (i32.const 215529) "a") (data (i32.const 215532) "a") (data (i32.const 215535) "a") (data (i32.const 215538) "a") (data (i32.const 215541) "a") (data (i32.const 215544) "a") (data (i32.const 215547) "a") (data (i32.const 215550) "a") (data (i32.const 215553) "a") (data (i32.const 215556) "a") (data (i32.const 215559) "a") (data (i32.const 215562) "a") (data (i32.const 215565) "a") (data (i32.const 215568) "a") (data (i32.const 215571) "a") (data (i32.const 215574) "a") (data (i32.const 215577) "a") (data (i32.const 215580) "a") (data (i32.const 215583) "a") (data (i32.const 215586) "a") (data (i32.const 215589) "a") (data (i32.const 215592) "a") (data (i32.const 215595) "a") (data (i32.const 215598) "a") (data (i32.const 215601) "a") (data (i32.const 215604) "a") (data (i32.const 215607) "a") (data (i32.const 215610) "a") (data (i32.const 215613) "a") (data (i32.const 215616) "a") (data (i32.const 215619) "a") (data (i32.const 215622) "a") (data (i32.const 215625) "a") (data (i32.const 215628) "a") (data (i32.const 215631) "a") (data (i32.const 215634) "a") (data (i32.const 215637) "a") (data (i32.const 215640) "a") (data (i32.const 215643) "a") (data (i32.const 215646) "a") (data (i32.const 215649) "a") (data (i32.const 215652) "a") (data (i32.const 215655) "a") (data (i32.const 215658) "a") (data (i32.const 215661) "a") (data (i32.const 215664) "a") (data (i32.const 215667) "a") (data (i32.const 215670) "a") (data (i32.const 215673) "a") (data (i32.const 215676) "a") (data (i32.const 215679) "a") (data (i32.const 215682) "a") (data (i32.const 215685) "a") (data (i32.const 215688) "a") (data (i32.const 215691) "a") (data (i32.const 215694) "a") (data (i32.const 215697) "a") (data (i32.const 215700) "a") (data (i32.const 215703) "a") (data (i32.const 215706) "a") (data (i32.const 215709) "a") (data (i32.const 215712) "a") (data (i32.const 215715) "a") (data (i32.const 215718) "a") (data (i32.const 215721) "a") (data (i32.const 215724) "a") (data (i32.const 215727) "a") (data (i32.const 215730) "a") (data (i32.const 215733) "a") (data (i32.const 215736) "a") (data (i32.const 215739) "a") (data (i32.const 215742) "a") (data (i32.const 215745) "a") (data (i32.const 215748) "a") (data (i32.const 215751) "a") (data (i32.const 215754) "a") (data (i32.const 215757) "a") (data (i32.const 215760) "a") (data (i32.const 215763) "a") (data (i32.const 215766) "a") (data (i32.const 215769) "a") (data (i32.const 215772) "a") (data (i32.const 215775) "a") (data (i32.const 215778) "a") (data (i32.const 215781) "a") (data (i32.const 215784) "a") (data (i32.const 215787) "a") (data (i32.const 215790) "a") (data (i32.const 215793) "a") (data (i32.const 215796) "a") (data (i32.const 215799) "a") (data (i32.const 215802) "a") (data (i32.const 215805) "a") (data (i32.const 215808) "a") (data (i32.const 215811) "a") (data (i32.const 215814) "a") (data (i32.const 215817) "a") (data (i32.const 215820) "a") (data (i32.const 215823) "a") (data (i32.const 215826) "a") (data (i32.const 215829) "a") (data (i32.const 215832) "a") (data (i32.const 215835) "a") (data (i32.const 215838) "a") (data (i32.const 215841) "a") (data (i32.const 215844) "a") (data (i32.const 215847) "a") (data (i32.const 215850) "a") (data (i32.const 215853) "a") (data (i32.const 215856) "a") (data (i32.const 215859) "a") (data (i32.const 215862) "a") (data (i32.const 215865) "a") (data (i32.const 215868) "a") (data (i32.const 215871) "a") (data (i32.const 215874) "a") (data (i32.const 215877) "a") (data (i32.const 215880) "a") (data (i32.const 215883) "a") (data (i32.const 215886) "a") (data (i32.const 215889) "a") (data (i32.const 215892) "a") (data (i32.const 215895) "a") (data (i32.const 215898) "a") (data (i32.const 215901) "a") (data (i32.const 215904) "a") (data (i32.const 215907) "a") (data (i32.const 215910) "a") (data (i32.const 215913) "a") (data (i32.const 215916) "a") (data (i32.const 215919) "a") (data (i32.const 215922) "a") (data (i32.const 215925) "a") (data (i32.const 215928) "a") (data (i32.const 215931) "a") (data (i32.const 215934) "a") (data (i32.const 215937) "a") (data (i32.const 215940) "a") (data (i32.const 215943) "a") (data (i32.const 215946) "a") (data (i32.const 215949) "a") (data (i32.const 215952) "a") (data (i32.const 215955) "a") (data (i32.const 215958) "a") (data (i32.const 215961) "a") (data (i32.const 215964) "a") (data (i32.const 215967) "a") (data (i32.const 215970) "a") (data (i32.const 215973) "a") (data (i32.const 215976) "a") (data (i32.const 215979) "a") (data (i32.const 215982) "a") (data (i32.const 215985) "a") (data (i32.const 215988) "a") (data (i32.const 215991) "a") (data (i32.const 215994) "a") (data (i32.const 215997) "a") (data (i32.const 216000) "a") (data (i32.const 216003) "a") (data (i32.const 216006) "a") (data (i32.const 216009) "a") (data (i32.const 216012) "a") (data (i32.const 216015) "a") (data (i32.const 216018) "a") (data (i32.const 216021) "a") (data (i32.const 216024) "a") (data (i32.const 216027) "a") (data (i32.const 216030) "a") (data (i32.const 216033) "a") (data (i32.const 216036) "a") (data (i32.const 216039) "a") (data (i32.const 216042) "a") (data (i32.const 216045) "a") (data (i32.const 216048) "a") (data (i32.const 216051) "a") (data (i32.const 216054) "a") (data (i32.const 216057) "a") (data (i32.const 216060) "a") (data (i32.const 216063) "a") (data (i32.const 216066) "a") (data (i32.const 216069) "a") (data (i32.const 216072) "a") (data (i32.const 216075) "a") (data (i32.const 216078) "a") (data (i32.const 216081) "a") (data (i32.const 216084) "a") (data (i32.const 216087) "a") (data (i32.const 216090) "a") (data (i32.const 216093) "a") (data (i32.const 216096) "a") (data (i32.const 216099) "a") (data (i32.const 216102) "a") (data (i32.const 216105) "a") (data (i32.const 216108) "a") (data (i32.const 216111) "a") (data (i32.const 216114) "a") (data (i32.const 216117) "a") (data (i32.const 216120) "a") (data (i32.const 216123) "a") (data (i32.const 216126) "a") (data (i32.const 216129) "a") (data (i32.const 216132) "a") (data (i32.const 216135) "a") (data (i32.const 216138) "a") (data (i32.const 216141) "a") (data (i32.const 216144) "a") (data (i32.const 216147) "a") (data (i32.const 216150) "a") (data (i32.const 216153) "a") (data (i32.const 216156) "a") (data (i32.const 216159) "a") (data (i32.const 216162) "a") (data (i32.const 216165) "a") (data (i32.const 216168) "a") (data (i32.const 216171) "a") (data (i32.const 216174) "a") (data (i32.const 216177) "a") (data (i32.const 216180) "a") (data (i32.const 216183) "a") (data (i32.const 216186) "a") (data (i32.const 216189) "a") (data (i32.const 216192) "a") (data (i32.const 216195) "a") (data (i32.const 216198) "a") (data (i32.const 216201) "a") (data (i32.const 216204) "a") (data (i32.const 216207) "a") (data (i32.const 216210) "a") (data (i32.const 216213) "a") (data (i32.const 216216) "a") (data (i32.const 216219) "a") (data (i32.const 216222) "a") (data (i32.const 216225) "a") (data (i32.const 216228) "a") (data (i32.const 216231) "a") (data (i32.const 216234) "a") (data (i32.const 216237) "a") (data (i32.const 216240) "a") (data (i32.const 216243) "a") (data (i32.const 216246) "a") (data (i32.const 216249) "a") (data (i32.const 216252) "a") (data (i32.const 216255) "a") (data (i32.const 216258) "a") (data (i32.const 216261) "a") (data (i32.const 216264) "a") (data (i32.const 216267) "a") (data (i32.const 216270) "a") (data (i32.const 216273) "a") (data (i32.const 216276) "a") (data (i32.const 216279) "a") (data (i32.const 216282) "a") (data (i32.const 216285) "a") (data (i32.const 216288) "a") (data (i32.const 216291) "a") (data (i32.const 216294) "a") (data (i32.const 216297) "a") (data (i32.const 216300) "a") (data (i32.const 216303) "a") (data (i32.const 216306) "a") (data (i32.const 216309) "a") (data (i32.const 216312) "a") (data (i32.const 216315) "a") (data (i32.const 216318) "a") (data (i32.const 216321) "a") (data (i32.const 216324) "a") (data (i32.const 216327) "a") (data (i32.const 216330) "a") (data (i32.const 216333) "a") (data (i32.const 216336) "a") (data (i32.const 216339) "a") (data (i32.const 216342) "a") (data (i32.const 216345) "a") (data (i32.const 216348) "a") (data (i32.const 216351) "a") (data (i32.const 216354) "a") (data (i32.const 216357) "a") (data (i32.const 216360) "a") (data (i32.const 216363) "a") (data (i32.const 216366) "a") (data (i32.const 216369) "a") (data (i32.const 216372) "a") (data (i32.const 216375) "a") (data (i32.const 216378) "a") (data (i32.const 216381) "a") (data (i32.const 216384) "a") (data (i32.const 216387) "a") (data (i32.const 216390) "a") (data (i32.const 216393) "a") (data (i32.const 216396) "a") (data (i32.const 216399) "a") (data (i32.const 216402) "a") (data (i32.const 216405) "a") (data (i32.const 216408) "a") (data (i32.const 216411) "a") (data (i32.const 216414) "a") (data (i32.const 216417) "a") (data (i32.const 216420) "a") (data (i32.const 216423) "a") (data (i32.const 216426) "a") (data (i32.const 216429) "a") (data (i32.const 216432) "a") (data (i32.const 216435) "a") (data (i32.const 216438) "a") (data (i32.const 216441) "a") (data (i32.const 216444) "a") (data (i32.const 216447) "a") (data (i32.const 216450) "a") (data (i32.const 216453) "a") (data (i32.const 216456) "a") (data (i32.const 216459) "a") (data (i32.const 216462) "a") (data (i32.const 216465) "a") (data (i32.const 216468) "a") (data (i32.const 216471) "a") (data (i32.const 216474) "a") (data (i32.const 216477) "a") (data (i32.const 216480) "a") (data (i32.const 216483) "a") (data (i32.const 216486) "a") (data (i32.const 216489) "a") (data (i32.const 216492) "a") (data (i32.const 216495) "a") (data (i32.const 216498) "a") (data (i32.const 216501) "a") (data (i32.const 216504) "a") (data (i32.const 216507) "a") (data (i32.const 216510) "a") (data (i32.const 216513) "a") (data (i32.const 216516) "a") (data (i32.const 216519) "a") (data (i32.const 216522) "a") (data (i32.const 216525) "a") (data (i32.const 216528) "a") (data (i32.const 216531) "a") (data (i32.const 216534) "a") (data (i32.const 216537) "a") (data (i32.const 216540) "a") (data (i32.const 216543) "a") (data (i32.const 216546) "a") (data (i32.const 216549) "a") (data (i32.const 216552) "a") (data (i32.const 216555) "a") (data (i32.const 216558) "a") (data (i32.const 216561) "a") (data (i32.const 216564) "a") (data (i32.const 216567) "a") (data (i32.const 216570) "a") (data (i32.const 216573) "a") (data (i32.const 216576) "a") (data (i32.const 216579) "a") (data (i32.const 216582) "a") (data (i32.const 216585) "a") (data (i32.const 216588) "a") (data (i32.const 216591) "a") (data (i32.const 216594) "a") (data (i32.const 216597) "a") (data (i32.const 216600) "a") (data (i32.const 216603) "a") (data (i32.const 216606) "a") (data (i32.const 216609) "a") (data (i32.const 216612) "a") (data (i32.const 216615) "a") (data (i32.const 216618) "a") (data (i32.const 216621) "a") (data (i32.const 216624) "a") (data (i32.const 216627) "a") (data (i32.const 216630) "a") (data (i32.const 216633) "a") (data (i32.const 216636) "a") (data (i32.const 216639) "a") (data (i32.const 216642) "a") (data (i32.const 216645) "a") (data (i32.const 216648) "a") (data (i32.const 216651) "a") (data (i32.const 216654) "a") (data (i32.const 216657) "a") (data (i32.const 216660) "a") (data (i32.const 216663) "a") (data (i32.const 216666) "a") (data (i32.const 216669) "a") (data (i32.const 216672) "a") (data (i32.const 216675) "a") (data (i32.const 216678) "a") (data (i32.const 216681) "a") (data (i32.const 216684) "a") (data (i32.const 216687) "a") (data (i32.const 216690) "a") (data (i32.const 216693) "a") (data (i32.const 216696) "a") (data (i32.const 216699) "a") (data (i32.const 216702) "a") (data (i32.const 216705) "a") (data (i32.const 216708) "a") (data (i32.const 216711) "a") (data (i32.const 216714) "a") (data (i32.const 216717) "a") (data (i32.const 216720) "a") (data (i32.const 216723) "a") (data (i32.const 216726) "a") (data (i32.const 216729) "a") (data (i32.const 216732) "a") (data (i32.const 216735) "a") (data (i32.const 216738) "a") (data (i32.const 216741) "a") (data (i32.const 216744) "a") (data (i32.const 216747) "a") (data (i32.const 216750) "a") (data (i32.const 216753) "a") (data (i32.const 216756) "a") (data (i32.const 216759) "a") (data (i32.const 216762) "a") (data (i32.const 216765) "a") (data (i32.const 216768) "a") (data (i32.const 216771) "a") (data (i32.const 216774) "a") (data (i32.const 216777) "a") (data (i32.const 216780) "a") (data (i32.const 216783) "a") (data (i32.const 216786) "a") (data (i32.const 216789) "a") (data (i32.const 216792) "a") (data (i32.const 216795) "a") (data (i32.const 216798) "a") (data (i32.const 216801) "a") (data (i32.const 216804) "a") (data (i32.const 216807) "a") (data (i32.const 216810) "a") (data (i32.const 216813) "a") (data (i32.const 216816) "a") (data (i32.const 216819) "a") (data (i32.const 216822) "a") (data (i32.const 216825) "a") (data (i32.const 216828) "a") (data (i32.const 216831) "a") (data (i32.const 216834) "a") (data (i32.const 216837) "a") (data (i32.const 216840) "a") (data (i32.const 216843) "a") (data (i32.const 216846) "a") (data (i32.const 216849) "a") (data (i32.const 216852) "a") (data (i32.const 216855) "a") (data (i32.const 216858) "a") (data (i32.const 216861) "a") (data (i32.const 216864) "a") (data (i32.const 216867) "a") (data (i32.const 216870) "a") (data (i32.const 216873) "a") (data (i32.const 216876) "a") (data (i32.const 216879) "a") (data (i32.const 216882) "a") (data (i32.const 216885) "a") (data (i32.const 216888) "a") (data (i32.const 216891) "a") (data (i32.const 216894) "a") (data (i32.const 216897) "a") (data (i32.const 216900) "a") (data (i32.const 216903) "a") (data (i32.const 216906) "a") (data (i32.const 216909) "a") (data (i32.const 216912) "a") (data (i32.const 216915) "a") (data (i32.const 216918) "a") (data (i32.const 216921) "a") (data (i32.const 216924) "a") (data (i32.const 216927) "a") (data (i32.const 216930) "a") (data (i32.const 216933) "a") (data (i32.const 216936) "a") (data (i32.const 216939) "a") (data (i32.const 216942) "a") (data (i32.const 216945) "a") (data (i32.const 216948) "a") (data (i32.const 216951) "a") (data (i32.const 216954) "a") (data (i32.const 216957) "a") (data (i32.const 216960) "a") (data (i32.const 216963) "a") (data (i32.const 216966) "a") (data (i32.const 216969) "a") (data (i32.const 216972) "a") (data (i32.const 216975) "a") (data (i32.const 216978) "a") (data (i32.const 216981) "a") (data (i32.const 216984) "a") (data (i32.const 216987) "a") (data (i32.const 216990) "a") (data (i32.const 216993) "a") (data (i32.const 216996) "a") (data (i32.const 216999) "a") (data (i32.const 217002) "a") (data (i32.const 217005) "a") (data (i32.const 217008) "a") (data (i32.const 217011) "a") (data (i32.const 217014) "a") (data (i32.const 217017) "a") (data (i32.const 217020) "a") (data (i32.const 217023) "a") (data (i32.const 217026) "a") (data (i32.const 217029) "a") (data (i32.const 217032) "a") (data (i32.const 217035) "a") (data (i32.const 217038) "a") (data (i32.const 217041) "a") (data (i32.const 217044) "a") (data (i32.const 217047) "a") (data (i32.const 217050) "a") (data (i32.const 217053) "a") (data (i32.const 217056) "a") (data (i32.const 217059) "a") (data (i32.const 217062) "a") (data (i32.const 217065) "a") (data (i32.const 217068) "a") (data (i32.const 217071) "a") (data (i32.const 217074) "a") (data (i32.const 217077) "a") (data (i32.const 217080) "a") (data (i32.const 217083) "a") (data (i32.const 217086) "a") (data (i32.const 217089) "a") (data (i32.const 217092) "a") (data (i32.const 217095) "a") (data (i32.const 217098) "a") (data (i32.const 217101) "a") (data (i32.const 217104) "a") (data (i32.const 217107) "a") (data (i32.const 217110) "a") (data (i32.const 217113) "a") (data (i32.const 217116) "a") (data (i32.const 217119) "a") (data (i32.const 217122) "a") (data (i32.const 217125) "a") (data (i32.const 217128) "a") (data (i32.const 217131) "a") (data (i32.const 217134) "a") (data (i32.const 217137) "a") (data (i32.const 217140) "a") (data (i32.const 217143) "a") (data (i32.const 217146) "a") (data (i32.const 217149) "a") (data (i32.const 217152) "a") (data (i32.const 217155) "a") (data (i32.const 217158) "a") (data (i32.const 217161) "a") (data (i32.const 217164) "a") (data (i32.const 217167) "a") (data (i32.const 217170) "a") (data (i32.const 217173) "a") (data (i32.const 217176) "a") (data (i32.const 217179) "a") (data (i32.const 217182) "a") (data (i32.const 217185) "a") (data (i32.const 217188) "a") (data (i32.const 217191) "a") (data (i32.const 217194) "a") (data (i32.const 217197) "a") (data (i32.const 217200) "a") (data (i32.const 217203) "a") (data (i32.const 217206) "a") (data (i32.const 217209) "a") (data (i32.const 217212) "a") (data (i32.const 217215) "a") (data (i32.const 217218) "a") (data (i32.const 217221) "a") (data (i32.const 217224) "a") (data (i32.const 217227) "a") (data (i32.const 217230) "a") (data (i32.const 217233) "a") (data (i32.const 217236) "a") (data (i32.const 217239) "a") (data (i32.const 217242) "a") (data (i32.const 217245) "a") (data (i32.const 217248) "a") (data (i32.const 217251) "a") (data (i32.const 217254) "a") (data (i32.const 217257) "a") (data (i32.const 217260) "a") (data (i32.const 217263) "a") (data (i32.const 217266) "a") (data (i32.const 217269) "a") (data (i32.const 217272) "a") (data (i32.const 217275) "a") (data (i32.const 217278) "a") (data (i32.const 217281) "a") (data (i32.const 217284) "a") (data (i32.const 217287) "a") (data (i32.const 217290) "a") (data (i32.const 217293) "a") (data (i32.const 217296) "a") (data (i32.const 217299) "a") (data (i32.const 217302) "a") (data (i32.const 217305) "a") (data (i32.const 217308) "a") (data (i32.const 217311) "a") (data (i32.const 217314) "a") (data (i32.const 217317) "a") (data (i32.const 217320) "a") (data (i32.const 217323) "a") (data (i32.const 217326) "a") (data (i32.const 217329) "a") (data (i32.const 217332) "a") (data (i32.const 217335) "a") (data (i32.const 217338) "a") (data (i32.const 217341) "a") (data (i32.const 217344) "a") (data (i32.const 217347) "a") (data (i32.const 217350) "a") (data (i32.const 217353) "a") (data (i32.const 217356) "a") (data (i32.const 217359) "a") (data (i32.const 217362) "a") (data (i32.const 217365) "a") (data (i32.const 217368) "a") (data (i32.const 217371) "a") (data (i32.const 217374) "a") (data (i32.const 217377) "a") (data (i32.const 217380) "a") (data (i32.const 217383) "a") (data (i32.const 217386) "a") (data (i32.const 217389) "a") (data (i32.const 217392) "a") (data (i32.const 217395) "a") (data (i32.const 217398) "a") (data (i32.const 217401) "a") (data (i32.const 217404) "a") (data (i32.const 217407) "a") (data (i32.const 217410) "a") (data (i32.const 217413) "a") (data (i32.const 217416) "a") (data (i32.const 217419) "a") (data (i32.const 217422) "a") (data (i32.const 217425) "a") (data (i32.const 217428) "a") (data (i32.const 217431) "a") (data (i32.const 217434) "a") (data (i32.const 217437) "a") (data (i32.const 217440) "a") (data (i32.const 217443) "a") (data (i32.const 217446) "a") (data (i32.const 217449) "a") (data (i32.const 217452) "a") (data (i32.const 217455) "a") (data (i32.const 217458) "a") (data (i32.const 217461) "a") (data (i32.const 217464) "a") (data (i32.const 217467) "a") (data (i32.const 217470) "a") (data (i32.const 217473) "a") (data (i32.const 217476) "a") (data (i32.const 217479) "a") (data (i32.const 217482) "a") (data (i32.const 217485) "a") (data (i32.const 217488) "a") (data (i32.const 217491) "a") (data (i32.const 217494) "a") (data (i32.const 217497) "a") (data (i32.const 217500) "a") (data (i32.const 217503) "a") (data (i32.const 217506) "a") (data (i32.const 217509) "a") (data (i32.const 217512) "a") (data (i32.const 217515) "a") (data (i32.const 217518) "a") (data (i32.const 217521) "a") (data (i32.const 217524) "a") (data (i32.const 217527) "a") (data (i32.const 217530) "a") (data (i32.const 217533) "a") (data (i32.const 217536) "a") (data (i32.const 217539) "a") (data (i32.const 217542) "a") (data (i32.const 217545) "a") (data (i32.const 217548) "a") (data (i32.const 217551) "a") (data (i32.const 217554) "a") (data (i32.const 217557) "a") (data (i32.const 217560) "a") (data (i32.const 217563) "a") (data (i32.const 217566) "a") (data (i32.const 217569) "a") (data (i32.const 217572) "a") (data (i32.const 217575) "a") (data (i32.const 217578) "a") (data (i32.const 217581) "a") (data (i32.const 217584) "a") (data (i32.const 217587) "a") (data (i32.const 217590) "a") (data (i32.const 217593) "a") (data (i32.const 217596) "a") (data (i32.const 217599) "a") (data (i32.const 217602) "a") (data (i32.const 217605) "a") (data (i32.const 217608) "a") (data (i32.const 217611) "a") (data (i32.const 217614) "a") (data (i32.const 217617) "a") (data (i32.const 217620) "a") (data (i32.const 217623) "a") (data (i32.const 217626) "a") (data (i32.const 217629) "a") (data (i32.const 217632) "a") (data (i32.const 217635) "a") (data (i32.const 217638) "a") (data (i32.const 217641) "a") (data (i32.const 217644) "a") (data (i32.const 217647) "a") (data (i32.const 217650) "a") (data (i32.const 217653) "a") (data (i32.const 217656) "a") (data (i32.const 217659) "a") (data (i32.const 217662) "a") (data (i32.const 217665) "a") (data (i32.const 217668) "a") (data (i32.const 217671) "a") (data (i32.const 217674) "a") (data (i32.const 217677) "a") (data (i32.const 217680) "a") (data (i32.const 217683) "a") (data (i32.const 217686) "a") (data (i32.const 217689) "a") (data (i32.const 217692) "a") (data (i32.const 217695) "a") (data (i32.const 217698) "a") (data (i32.const 217701) "a") (data (i32.const 217704) "a") (data (i32.const 217707) "a") (data (i32.const 217710) "a") (data (i32.const 217713) "a") (data (i32.const 217716) "a") (data (i32.const 217719) "a") (data (i32.const 217722) "a") (data (i32.const 217725) "a") (data (i32.const 217728) "a") (data (i32.const 217731) "a") (data (i32.const 217734) "a") (data (i32.const 217737) "a") (data (i32.const 217740) "a") (data (i32.const 217743) "a") (data (i32.const 217746) "a") (data (i32.const 217749) "a") (data (i32.const 217752) "a") (data (i32.const 217755) "a") (data (i32.const 217758) "a") (data (i32.const 217761) "a") (data (i32.const 217764) "a") (data (i32.const 217767) "a") (data (i32.const 217770) "a") (data (i32.const 217773) "a") (data (i32.const 217776) "a") (data (i32.const 217779) "a") (data (i32.const 217782) "a") (data (i32.const 217785) "a") (data (i32.const 217788) "a") (data (i32.const 217791) "a") (data (i32.const 217794) "a") (data (i32.const 217797) "a") (data (i32.const 217800) "a") (data (i32.const 217803) "a") (data (i32.const 217806) "a") (data (i32.const 217809) "a") (data (i32.const 217812) "a") (data (i32.const 217815) "a") (data (i32.const 217818) "a") (data (i32.const 217821) "a") (data (i32.const 217824) "a") (data (i32.const 217827) "a") (data (i32.const 217830) "a") (data (i32.const 217833) "a") (data (i32.const 217836) "a") (data (i32.const 217839) "a") (data (i32.const 217842) "a") (data (i32.const 217845) "a") (data (i32.const 217848) "a") (data (i32.const 217851) "a") (data (i32.const 217854) "a") (data (i32.const 217857) "a") (data (i32.const 217860) "a") (data (i32.const 217863) "a") (data (i32.const 217866) "a") (data (i32.const 217869) "a") (data (i32.const 217872) "a") (data (i32.const 217875) "a") (data (i32.const 217878) "a") (data (i32.const 217881) "a") (data (i32.const 217884) "a") (data (i32.const 217887) "a") (data (i32.const 217890) "a") (data (i32.const 217893) "a") (data (i32.const 217896) "a") (data (i32.const 217899) "a") (data (i32.const 217902) "a") (data (i32.const 217905) "a") (data (i32.const 217908) "a") (data (i32.const 217911) "a") (data (i32.const 217914) "a") (data (i32.const 217917) "a") (data (i32.const 217920) "a") (data (i32.const 217923) "a") (data (i32.const 217926) "a") (data (i32.const 217929) "a") (data (i32.const 217932) "a") (data (i32.const 217935) "a") (data (i32.const 217938) "a") (data (i32.const 217941) "a") (data (i32.const 217944) "a") (data (i32.const 217947) "a") (data (i32.const 217950) "a") (data (i32.const 217953) "a") (data (i32.const 217956) "a") (data (i32.const 217959) "a") (data (i32.const 217962) "a") (data (i32.const 217965) "a") (data (i32.const 217968) "a") (data (i32.const 217971) "a") (data (i32.const 217974) "a") (data (i32.const 217977) "a") (data (i32.const 217980) "a") (data (i32.const 217983) "a") (data (i32.const 217986) "a") (data (i32.const 217989) "a") (data (i32.const 217992) "a") (data (i32.const 217995) "a") (data (i32.const 217998) "a") (data (i32.const 218001) "a") (data (i32.const 218004) "a") (data (i32.const 218007) "a") (data (i32.const 218010) "a") (data (i32.const 218013) "a") (data (i32.const 218016) "a") (data (i32.const 218019) "a") (data (i32.const 218022) "a") (data (i32.const 218025) "a") (data (i32.const 218028) "a") (data (i32.const 218031) "a") (data (i32.const 218034) "a") (data (i32.const 218037) "a") (data (i32.const 218040) "a") (data (i32.const 218043) "a") (data (i32.const 218046) "a") (data (i32.const 218049) "a") (data (i32.const 218052) "a") (data (i32.const 218055) "a") (data (i32.const 218058) "a") (data (i32.const 218061) "a") (data (i32.const 218064) "a") (data (i32.const 218067) "a") (data (i32.const 218070) "a") (data (i32.const 218073) "a") (data (i32.const 218076) "a") (data (i32.const 218079) "a") (data (i32.const 218082) "a") (data (i32.const 218085) "a") (data (i32.const 218088) "a") (data (i32.const 218091) "a") (data (i32.const 218094) "a") (data (i32.const 218097) "a") (data (i32.const 218100) "a") (data (i32.const 218103) "a") (data (i32.const 218106) "a") (data (i32.const 218109) "a") (data (i32.const 218112) "a") (data (i32.const 218115) "a") (data (i32.const 218118) "a") (data (i32.const 218121) "a") (data (i32.const 218124) "a") (data (i32.const 218127) "a") (data (i32.const 218130) "a") (data (i32.const 218133) "a") (data (i32.const 218136) "a") (data (i32.const 218139) "a") (data (i32.const 218142) "a") (data (i32.const 218145) "a") (data (i32.const 218148) "a") (data (i32.const 218151) "a") (data (i32.const 218154) "a") (data (i32.const 218157) "a") (data (i32.const 218160) "a") (data (i32.const 218163) "a") (data (i32.const 218166) "a") (data (i32.const 218169) "a") (data (i32.const 218172) "a") (data (i32.const 218175) "a") (data (i32.const 218178) "a") (data (i32.const 218181) "a") (data (i32.const 218184) "a") (data (i32.const 218187) "a") (data (i32.const 218190) "a") (data (i32.const 218193) "a") (data (i32.const 218196) "a") (data (i32.const 218199) "a") (data (i32.const 218202) "a") (data (i32.const 218205) "a") (data (i32.const 218208) "a") (data (i32.const 218211) "a") (data (i32.const 218214) "a") (data (i32.const 218217) "a") (data (i32.const 218220) "a") (data (i32.const 218223) "a") (data (i32.const 218226) "a") (data (i32.const 218229) "a") (data (i32.const 218232) "a") (data (i32.const 218235) "a") (data (i32.const 218238) "a") (data (i32.const 218241) "a") (data (i32.const 218244) "a") (data (i32.const 218247) "a") (data (i32.const 218250) "a") (data (i32.const 218253) "a") (data (i32.const 218256) "a") (data (i32.const 218259) "a") (data (i32.const 218262) "a") (data (i32.const 218265) "a") (data (i32.const 218268) "a") (data (i32.const 218271) "a") (data (i32.const 218274) "a") (data (i32.const 218277) "a") (data (i32.const 218280) "a") (data (i32.const 218283) "a") (data (i32.const 218286) "a") (data (i32.const 218289) "a") (data (i32.const 218292) "a") (data (i32.const 218295) "a") (data (i32.const 218298) "a") (data (i32.const 218301) "a") (data (i32.const 218304) "a") (data (i32.const 218307) "a") (data (i32.const 218310) "a") (data (i32.const 218313) "a") (data (i32.const 218316) "a") (data (i32.const 218319) "a") (data (i32.const 218322) "a") (data (i32.const 218325) "a") (data (i32.const 218328) "a") (data (i32.const 218331) "a") (data (i32.const 218334) "a") (data (i32.const 218337) "a") (data (i32.const 218340) "a") (data (i32.const 218343) "a") (data (i32.const 218346) "a") (data (i32.const 218349) "a") (data (i32.const 218352) "a") (data (i32.const 218355) "a") (data (i32.const 218358) "a") (data (i32.const 218361) "a") (data (i32.const 218364) "a") (data (i32.const 218367) "a") (data (i32.const 218370) "a") (data (i32.const 218373) "a") (data (i32.const 218376) "a") (data (i32.const 218379) "a") (data (i32.const 218382) "a") (data (i32.const 218385) "a") (data (i32.const 218388) "a") (data (i32.const 218391) "a") (data (i32.const 218394) "a") (data (i32.const 218397) "a") (data (i32.const 218400) "a") (data (i32.const 218403) "a") (data (i32.const 218406) "a") (data (i32.const 218409) "a") (data (i32.const 218412) "a") (data (i32.const 218415) "a") (data (i32.const 218418) "a") (data (i32.const 218421) "a") (data (i32.const 218424) "a") (data (i32.const 218427) "a") (data (i32.const 218430) "a") (data (i32.const 218433) "a") (data (i32.const 218436) "a") (data (i32.const 218439) "a") (data (i32.const 218442) "a") (data (i32.const 218445) "a") (data (i32.const 218448) "a") (data (i32.const 218451) "a") (data (i32.const 218454) "a") (data (i32.const 218457) "a") (data (i32.const 218460) "a") (data (i32.const 218463) "a") (data (i32.const 218466) "a") (data (i32.const 218469) "a") (data (i32.const 218472) "a") (data (i32.const 218475) "a") (data (i32.const 218478) "a") (data (i32.const 218481) "a") (data (i32.const 218484) "a") (data (i32.const 218487) "a") (data (i32.const 218490) "a") (data (i32.const 218493) "a") (data (i32.const 218496) "a") (data (i32.const 218499) "a") (data (i32.const 218502) "a") (data (i32.const 218505) "a") (data (i32.const 218508) "a") (data (i32.const 218511) "a") (data (i32.const 218514) "a") (data (i32.const 218517) "a") (data (i32.const 218520) "a") (data (i32.const 218523) "a") (data (i32.const 218526) "a") (data (i32.const 218529) "a") (data (i32.const 218532) "a") (data (i32.const 218535) "a") (data (i32.const 218538) "a") (data (i32.const 218541) "a") (data (i32.const 218544) "a") (data (i32.const 218547) "a") (data (i32.const 218550) "a") (data (i32.const 218553) "a") (data (i32.const 218556) "a") (data (i32.const 218559) "a") (data (i32.const 218562) "a") (data (i32.const 218565) "a") (data (i32.const 218568) "a") (data (i32.const 218571) "a") (data (i32.const 218574) "a") (data (i32.const 218577) "a") (data (i32.const 218580) "a") (data (i32.const 218583) "a") (data (i32.const 218586) "a") (data (i32.const 218589) "a") (data (i32.const 218592) "a") (data (i32.const 218595) "a") (data (i32.const 218598) "a") (data (i32.const 218601) "a") (data (i32.const 218604) "a") (data (i32.const 218607) "a") (data (i32.const 218610) "a") (data (i32.const 218613) "a") (data (i32.const 218616) "a") (data (i32.const 218619) "a") (data (i32.const 218622) "a") (data (i32.const 218625) "a") (data (i32.const 218628) "a") (data (i32.const 218631) "a") (data (i32.const 218634) "a") (data (i32.const 218637) "a") (data (i32.const 218640) "a") (data (i32.const 218643) "a") (data (i32.const 218646) "a") (data (i32.const 218649) "a") (data (i32.const 218652) "a") (data (i32.const 218655) "a") (data (i32.const 218658) "a") (data (i32.const 218661) "a") (data (i32.const 218664) "a") (data (i32.const 218667) "a") (data (i32.const 218670) "a") (data (i32.const 218673) "a") (data (i32.const 218676) "a") (data (i32.const 218679) "a") (data (i32.const 218682) "a") (data (i32.const 218685) "a") (data (i32.const 218688) "a") (data (i32.const 218691) "a") (data (i32.const 218694) "a") (data (i32.const 218697) "a") (data (i32.const 218700) "a") (data (i32.const 218703) "a") (data (i32.const 218706) "a") (data (i32.const 218709) "a") (data (i32.const 218712) "a") (data (i32.const 218715) "a") (data (i32.const 218718) "a") (data (i32.const 218721) "a") (data (i32.const 218724) "a") (data (i32.const 218727) "a") (data (i32.const 218730) "a") (data (i32.const 218733) "a") (data (i32.const 218736) "a") (data (i32.const 218739) "a") (data (i32.const 218742) "a") (data (i32.const 218745) "a") (data (i32.const 218748) "a") (data (i32.const 218751) "a") (data (i32.const 218754) "a") (data (i32.const 218757) "a") (data (i32.const 218760) "a") (data (i32.const 218763) "a") (data (i32.const 218766) "a") (data (i32.const 218769) "a") (data (i32.const 218772) "a") (data (i32.const 218775) "a") (data (i32.const 218778) "a") (data (i32.const 218781) "a") (data (i32.const 218784) "a") (data (i32.const 218787) "a") (data (i32.const 218790) "a") (data (i32.const 218793) "a") (data (i32.const 218796) "a") (data (i32.const 218799) "a") (data (i32.const 218802) "a") (data (i32.const 218805) "a") (data (i32.const 218808) "a") (data (i32.const 218811) "a") (data (i32.const 218814) "a") (data (i32.const 218817) "a") (data (i32.const 218820) "a") (data (i32.const 218823) "a") (data (i32.const 218826) "a") (data (i32.const 218829) "a") (data (i32.const 218832) "a") (data (i32.const 218835) "a") (data (i32.const 218838) "a") (data (i32.const 218841) "a") (data (i32.const 218844) "a") (data (i32.const 218847) "a") (data (i32.const 218850) "a") (data (i32.const 218853) "a") (data (i32.const 218856) "a") (data (i32.const 218859) "a") (data (i32.const 218862) "a") (data (i32.const 218865) "a") (data (i32.const 218868) "a") (data (i32.const 218871) "a") (data (i32.const 218874) "a") (data (i32.const 218877) "a") (data (i32.const 218880) "a") (data (i32.const 218883) "a") (data (i32.const 218886) "a") (data (i32.const 218889) "a") (data (i32.const 218892) "a") (data (i32.const 218895) "a") (data (i32.const 218898) "a") (data (i32.const 218901) "a") (data (i32.const 218904) "a") (data (i32.const 218907) "a") (data (i32.const 218910) "a") (data (i32.const 218913) "a") (data (i32.const 218916) "a") (data (i32.const 218919) "a") (data (i32.const 218922) "a") (data (i32.const 218925) "a") (data (i32.const 218928) "a") (data (i32.const 218931) "a") (data (i32.const 218934) "a") (data (i32.const 218937) "a") (data (i32.const 218940) "a") (data (i32.const 218943) "a") (data (i32.const 218946) "a") (data (i32.const 218949) "a") (data (i32.const 218952) "a") (data (i32.const 218955) "a") (data (i32.const 218958) "a") (data (i32.const 218961) "a") (data (i32.const 218964) "a") (data (i32.const 218967) "a") (data (i32.const 218970) "a") (data (i32.const 218973) "a") (data (i32.const 218976) "a") (data (i32.const 218979) "a") (data (i32.const 218982) "a") (data (i32.const 218985) "a") (data (i32.const 218988) "a") (data (i32.const 218991) "a") (data (i32.const 218994) "a") (data (i32.const 218997) "a") (data (i32.const 219000) "a") (data (i32.const 219003) "a") (data (i32.const 219006) "a") (data (i32.const 219009) "a") (data (i32.const 219012) "a") (data (i32.const 219015) "a") (data (i32.const 219018) "a") (data (i32.const 219021) "a") (data (i32.const 219024) "a") (data (i32.const 219027) "a") (data (i32.const 219030) "a") (data (i32.const 219033) "a") (data (i32.const 219036) "a") (data (i32.const 219039) "a") (data (i32.const 219042) "a") (data (i32.const 219045) "a") (data (i32.const 219048) "a") (data (i32.const 219051) "a") (data (i32.const 219054) "a") (data (i32.const 219057) "a") (data (i32.const 219060) "a") (data (i32.const 219063) "a") (data (i32.const 219066) "a") (data (i32.const 219069) "a") (data (i32.const 219072) "a") (data (i32.const 219075) "a") (data (i32.const 219078) "a") (data (i32.const 219081) "a") (data (i32.const 219084) "a") (data (i32.const 219087) "a") (data (i32.const 219090) "a") (data (i32.const 219093) "a") (data (i32.const 219096) "a") (data (i32.const 219099) "a") (data (i32.const 219102) "a") (data (i32.const 219105) "a") (data (i32.const 219108) "a") (data (i32.const 219111) "a") (data (i32.const 219114) "a") (data (i32.const 219117) "a") (data (i32.const 219120) "a") (data (i32.const 219123) "a") (data (i32.const 219126) "a") (data (i32.const 219129) "a") (data (i32.const 219132) "a") (data (i32.const 219135) "a") (data (i32.const 219138) "a") (data (i32.const 219141) "a") (data (i32.const 219144) "a") (data (i32.const 219147) "a") (data (i32.const 219150) "a") (data (i32.const 219153) "a") (data (i32.const 219156) "a") (data (i32.const 219159) "a") (data (i32.const 219162) "a") (data (i32.const 219165) "a") (data (i32.const 219168) "a") (data (i32.const 219171) "a") (data (i32.const 219174) "a") (data (i32.const 219177) "a") (data (i32.const 219180) "a") (data (i32.const 219183) "a") (data (i32.const 219186) "a") (data (i32.const 219189) "a") (data (i32.const 219192) "a") (data (i32.const 219195) "a") (data (i32.const 219198) "a") (data (i32.const 219201) "a") (data (i32.const 219204) "a") (data (i32.const 219207) "a") (data (i32.const 219210) "a") (data (i32.const 219213) "a") (data (i32.const 219216) "a") (data (i32.const 219219) "a") (data (i32.const 219222) "a") (data (i32.const 219225) "a") (data (i32.const 219228) "a") (data (i32.const 219231) "a") (data (i32.const 219234) "a") (data (i32.const 219237) "a") (data (i32.const 219240) "a") (data (i32.const 219243) "a") (data (i32.const 219246) "a") (data (i32.const 219249) "a") (data (i32.const 219252) "a") (data (i32.const 219255) "a") (data (i32.const 219258) "a") (data (i32.const 219261) "a") (data (i32.const 219264) "a") (data (i32.const 219267) "a") (data (i32.const 219270) "a") (data (i32.const 219273) "a") (data (i32.const 219276) "a") (data (i32.const 219279) "a") (data (i32.const 219282) "a") (data (i32.const 219285) "a") (data (i32.const 219288) "a") (data (i32.const 219291) "a") (data (i32.const 219294) "a") (data (i32.const 219297) "a") (data (i32.const 219300) "a") (data (i32.const 219303) "a") (data (i32.const 219306) "a") (data (i32.const 219309) "a") (data (i32.const 219312) "a") (data (i32.const 219315) "a") (data (i32.const 219318) "a") (data (i32.const 219321) "a") (data (i32.const 219324) "a") (data (i32.const 219327) "a") (data (i32.const 219330) "a") (data (i32.const 219333) "a") (data (i32.const 219336) "a") (data (i32.const 219339) "a") (data (i32.const 219342) "a") (data (i32.const 219345) "a") (data (i32.const 219348) "a") (data (i32.const 219351) "a") (data (i32.const 219354) "a") (data (i32.const 219357) "a") (data (i32.const 219360) "a") (data (i32.const 219363) "a") (data (i32.const 219366) "a") (data (i32.const 219369) "a") (data (i32.const 219372) "a") (data (i32.const 219375) "a") (data (i32.const 219378) "a") (data (i32.const 219381) "a") (data (i32.const 219384) "a") (data (i32.const 219387) "a") (data (i32.const 219390) "a") (data (i32.const 219393) "a") (data (i32.const 219396) "a") (data (i32.const 219399) "a") (data (i32.const 219402) "a") (data (i32.const 219405) "a") (data (i32.const 219408) "a") (data (i32.const 219411) "a") (data (i32.const 219414) "a") (data (i32.const 219417) "a") (data (i32.const 219420) "a") (data (i32.const 219423) "a") (data (i32.const 219426) "a") (data (i32.const 219429) "a") (data (i32.const 219432) "a") (data (i32.const 219435) "a") (data (i32.const 219438) "a") (data (i32.const 219441) "a") (data (i32.const 219444) "a") (data (i32.const 219447) "a") (data (i32.const 219450) "a") (data (i32.const 219453) "a") (data (i32.const 219456) "a") (data (i32.const 219459) "a") (data (i32.const 219462) "a") (data (i32.const 219465) "a") (data (i32.const 219468) "a") (data (i32.const 219471) "a") (data (i32.const 219474) "a") (data (i32.const 219477) "a") (data (i32.const 219480) "a") (data (i32.const 219483) "a") (data (i32.const 219486) "a") (data (i32.const 219489) "a") (data (i32.const 219492) "a") (data (i32.const 219495) "a") (data (i32.const 219498) "a") (data (i32.const 219501) "a") (data (i32.const 219504) "a") (data (i32.const 219507) "a") (data (i32.const 219510) "a") (data (i32.const 219513) "a") (data (i32.const 219516) "a") (data (i32.const 219519) "a") (data (i32.const 219522) "a") (data (i32.const 219525) "a") (data (i32.const 219528) "a") (data (i32.const 219531) "a") (data (i32.const 219534) "a") (data (i32.const 219537) "a") (data (i32.const 219540) "a") (data (i32.const 219543) "a") (data (i32.const 219546) "a") (data (i32.const 219549) "a") (data (i32.const 219552) "a") (data (i32.const 219555) "a") (data (i32.const 219558) "a") (data (i32.const 219561) "a") (data (i32.const 219564) "a") (data (i32.const 219567) "a") (data (i32.const 219570) "a") (data (i32.const 219573) "a") (data (i32.const 219576) "a") (data (i32.const 219579) "a") (data (i32.const 219582) "a") (data (i32.const 219585) "a") (data (i32.const 219588) "a") (data (i32.const 219591) "a") (data (i32.const 219594) "a") (data (i32.const 219597) "a") (data (i32.const 219600) "a") (data (i32.const 219603) "a") (data (i32.const 219606) "a") (data (i32.const 219609) "a") (data (i32.const 219612) "a") (data (i32.const 219615) "a") (data (i32.const 219618) "a") (data (i32.const 219621) "a") (data (i32.const 219624) "a") (data (i32.const 219627) "a") (data (i32.const 219630) "a") (data (i32.const 219633) "a") (data (i32.const 219636) "a") (data (i32.const 219639) "a") (data (i32.const 219642) "a") (data (i32.const 219645) "a") (data (i32.const 219648) "a") (data (i32.const 219651) "a") (data (i32.const 219654) "a") (data (i32.const 219657) "a") (data (i32.const 219660) "a") (data (i32.const 219663) "a") (data (i32.const 219666) "a") (data (i32.const 219669) "a") (data (i32.const 219672) "a") (data (i32.const 219675) "a") (data (i32.const 219678) "a") (data (i32.const 219681) "a") (data (i32.const 219684) "a") (data (i32.const 219687) "a") (data (i32.const 219690) "a") (data (i32.const 219693) "a") (data (i32.const 219696) "a") (data (i32.const 219699) "a") (data (i32.const 219702) "a") (data (i32.const 219705) "a") (data (i32.const 219708) "a") (data (i32.const 219711) "a") (data (i32.const 219714) "a") (data (i32.const 219717) "a") (data (i32.const 219720) "a") (data (i32.const 219723) "a") (data (i32.const 219726) "a") (data (i32.const 219729) "a") (data (i32.const 219732) "a") (data (i32.const 219735) "a") (data (i32.const 219738) "a") (data (i32.const 219741) "a") (data (i32.const 219744) "a") (data (i32.const 219747) "a") (data (i32.const 219750) "a") (data (i32.const 219753) "a") (data (i32.const 219756) "a") (data (i32.const 219759) "a") (data (i32.const 219762) "a") (data (i32.const 219765) "a") (data (i32.const 219768) "a") (data (i32.const 219771) "a") (data (i32.const 219774) "a") (data (i32.const 219777) "a") (data (i32.const 219780) "a") (data (i32.const 219783) "a") (data (i32.const 219786) "a") (data (i32.const 219789) "a") (data (i32.const 219792) "a") (data (i32.const 219795) "a") (data (i32.const 219798) "a") (data (i32.const 219801) "a") (data (i32.const 219804) "a") (data (i32.const 219807) "a") (data (i32.const 219810) "a") (data (i32.const 219813) "a") (data (i32.const 219816) "a") (data (i32.const 219819) "a") (data (i32.const 219822) "a") (data (i32.const 219825) "a") (data (i32.const 219828) "a") (data (i32.const 219831) "a") (data (i32.const 219834) "a") (data (i32.const 219837) "a") (data (i32.const 219840) "a") (data (i32.const 219843) "a") (data (i32.const 219846) "a") (data (i32.const 219849) "a") (data (i32.const 219852) "a") (data (i32.const 219855) "a") (data (i32.const 219858) "a") (data (i32.const 219861) "a") (data (i32.const 219864) "a") (data (i32.const 219867) "a") (data (i32.const 219870) "a") (data (i32.const 219873) "a") (data (i32.const 219876) "a") (data (i32.const 219879) "a") (data (i32.const 219882) "a") (data (i32.const 219885) "a") (data (i32.const 219888) "a") (data (i32.const 219891) "a") (data (i32.const 219894) "a") (data (i32.const 219897) "a") (data (i32.const 219900) "a") (data (i32.const 219903) "a") (data (i32.const 219906) "a") (data (i32.const 219909) "a") (data (i32.const 219912) "a") (data (i32.const 219915) "a") (data (i32.const 219918) "a") (data (i32.const 219921) "a") (data (i32.const 219924) "a") (data (i32.const 219927) "a") (data (i32.const 219930) "a") (data (i32.const 219933) "a") (data (i32.const 219936) "a") (data (i32.const 219939) "a") (data (i32.const 219942) "a") (data (i32.const 219945) "a") (data (i32.const 219948) "a") (data (i32.const 219951) "a") (data (i32.const 219954) "a") (data (i32.const 219957) "a") (data (i32.const 219960) "a") (data (i32.const 219963) "a") (data (i32.const 219966) "a") (data (i32.const 219969) "a") (data (i32.const 219972) "a") (data (i32.const 219975) "a") (data (i32.const 219978) "a") (data (i32.const 219981) "a") (data (i32.const 219984) "a") (data (i32.const 219987) "a") (data (i32.const 219990) "a") (data (i32.const 219993) "a") (data (i32.const 219996) "a") (data (i32.const 219999) "a") (data (i32.const 220002) "a") (data (i32.const 220005) "a") (data (i32.const 220008) "a") (data (i32.const 220011) "a") (data (i32.const 220014) "a") (data (i32.const 220017) "a") (data (i32.const 220020) "a") (data (i32.const 220023) "a") (data (i32.const 220026) "a") (data (i32.const 220029) "a") (data (i32.const 220032) "a") (data (i32.const 220035) "a") (data (i32.const 220038) "a") (data (i32.const 220041) "a") (data (i32.const 220044) "a") (data (i32.const 220047) "a") (data (i32.const 220050) "a") (data (i32.const 220053) "a") (data (i32.const 220056) "a") (data (i32.const 220059) "a") (data (i32.const 220062) "a") (data (i32.const 220065) "a") (data (i32.const 220068) "a") (data (i32.const 220071) "a") (data (i32.const 220074) "a") (data (i32.const 220077) "a") (data (i32.const 220080) "a") (data (i32.const 220083) "a") (data (i32.const 220086) "a") (data (i32.const 220089) "a") (data (i32.const 220092) "a") (data (i32.const 220095) "a") (data (i32.const 220098) "a") (data (i32.const 220101) "a") (data (i32.const 220104) "a") (data (i32.const 220107) "a") (data (i32.const 220110) "a") (data (i32.const 220113) "a") (data (i32.const 220116) "a") (data (i32.const 220119) "a") (data (i32.const 220122) "a") (data (i32.const 220125) "a") (data (i32.const 220128) "a") (data (i32.const 220131) "a") (data (i32.const 220134) "a") (data (i32.const 220137) "a") (data (i32.const 220140) "a") (data (i32.const 220143) "a") (data (i32.const 220146) "a") (data (i32.const 220149) "a") (data (i32.const 220152) "a") (data (i32.const 220155) "a") (data (i32.const 220158) "a") (data (i32.const 220161) "a") (data (i32.const 220164) "a") (data (i32.const 220167) "a") (data (i32.const 220170) "a") (data (i32.const 220173) "a") (data (i32.const 220176) "a") (data (i32.const 220179) "a") (data (i32.const 220182) "a") (data (i32.const 220185) "a") (data (i32.const 220188) "a") (data (i32.const 220191) "a") (data (i32.const 220194) "a") (data (i32.const 220197) "a") (data (i32.const 220200) "a") (data (i32.const 220203) "a") (data (i32.const 220206) "a") (data (i32.const 220209) "a") (data (i32.const 220212) "a") (data (i32.const 220215) "a") (data (i32.const 220218) "a") (data (i32.const 220221) "a") (data (i32.const 220224) "a") (data (i32.const 220227) "a") (data (i32.const 220230) "a") (data (i32.const 220233) "a") (data (i32.const 220236) "a") (data (i32.const 220239) "a") (data (i32.const 220242) "a") (data (i32.const 220245) "a") (data (i32.const 220248) "a") (data (i32.const 220251) "a") (data (i32.const 220254) "a") (data (i32.const 220257) "a") (data (i32.const 220260) "a") (data (i32.const 220263) "a") (data (i32.const 220266) "a") (data (i32.const 220269) "a") (data (i32.const 220272) "a") (data (i32.const 220275) "a") (data (i32.const 220278) "a") (data (i32.const 220281) "a") (data (i32.const 220284) "a") (data (i32.const 220287) "a") (data (i32.const 220290) "a") (data (i32.const 220293) "a") (data (i32.const 220296) "a") (data (i32.const 220299) "a") (data (i32.const 220302) "a") (data (i32.const 220305) "a") (data (i32.const 220308) "a") (data (i32.const 220311) "a") (data (i32.const 220314) "a") (data (i32.const 220317) "a") (data (i32.const 220320) "a") (data (i32.const 220323) "a") (data (i32.const 220326) "a") (data (i32.const 220329) "a") (data (i32.const 220332) "a") (data (i32.const 220335) "a") (data (i32.const 220338) "a") (data (i32.const 220341) "a") (data (i32.const 220344) "a") (data (i32.const 220347) "a") (data (i32.const 220350) "a") (data (i32.const 220353) "a") (data (i32.const 220356) "a") (data (i32.const 220359) "a") (data (i32.const 220362) "a") (data (i32.const 220365) "a") (data (i32.const 220368) "a") (data (i32.const 220371) "a") (data (i32.const 220374) "a") (data (i32.const 220377) "a") (data (i32.const 220380) "a") (data (i32.const 220383) "a") (data (i32.const 220386) "a") (data (i32.const 220389) "a") (data (i32.const 220392) "a") (data (i32.const 220395) "a") (data (i32.const 220398) "a") (data (i32.const 220401) "a") (data (i32.const 220404) "a") (data (i32.const 220407) "a") (data (i32.const 220410) "a") (data (i32.const 220413) "a") (data (i32.const 220416) "a") (data (i32.const 220419) "a") (data (i32.const 220422) "a") (data (i32.const 220425) "a") (data (i32.const 220428) "a") (data (i32.const 220431) "a") (data (i32.const 220434) "a") (data (i32.const 220437) "a") (data (i32.const 220440) "a") (data (i32.const 220443) "a") (data (i32.const 220446) "a") (data (i32.const 220449) "a") (data (i32.const 220452) "a") (data (i32.const 220455) "a") (data (i32.const 220458) "a") (data (i32.const 220461) "a") (data (i32.const 220464) "a") (data (i32.const 220467) "a") (data (i32.const 220470) "a") (data (i32.const 220473) "a") (data (i32.const 220476) "a") (data (i32.const 220479) "a") (data (i32.const 220482) "a") (data (i32.const 220485) "a") (data (i32.const 220488) "a") (data (i32.const 220491) "a") (data (i32.const 220494) "a") (data (i32.const 220497) "a") (data (i32.const 220500) "a") (data (i32.const 220503) "a") (data (i32.const 220506) "a") (data (i32.const 220509) "a") (data (i32.const 220512) "a") (data (i32.const 220515) "a") (data (i32.const 220518) "a") (data (i32.const 220521) "a") (data (i32.const 220524) "a") (data (i32.const 220527) "a") (data (i32.const 220530) "a") (data (i32.const 220533) "a") (data (i32.const 220536) "a") (data (i32.const 220539) "a") (data (i32.const 220542) "a") (data (i32.const 220545) "a") (data (i32.const 220548) "a") (data (i32.const 220551) "a") (data (i32.const 220554) "a") (data (i32.const 220557) "a") (data (i32.const 220560) "a") (data (i32.const 220563) "a") (data (i32.const 220566) "a") (data (i32.const 220569) "a") (data (i32.const 220572) "a") (data (i32.const 220575) "a") (data (i32.const 220578) "a") (data (i32.const 220581) "a") (data (i32.const 220584) "a") (data (i32.const 220587) "a") (data (i32.const 220590) "a") (data (i32.const 220593) "a") (data (i32.const 220596) "a") (data (i32.const 220599) "a") (data (i32.const 220602) "a") (data (i32.const 220605) "a") (data (i32.const 220608) "a") (data (i32.const 220611) "a") (data (i32.const 220614) "a") (data (i32.const 220617) "a") (data (i32.const 220620) "a") (data (i32.const 220623) "a") (data (i32.const 220626) "a") (data (i32.const 220629) "a") (data (i32.const 220632) "a") (data (i32.const 220635) "a") (data (i32.const 220638) "a") (data (i32.const 220641) "a") (data (i32.const 220644) "a") (data (i32.const 220647) "a") (data (i32.const 220650) "a") (data (i32.const 220653) "a") (data (i32.const 220656) "a") (data (i32.const 220659) "a") (data (i32.const 220662) "a") (data (i32.const 220665) "a") (data (i32.const 220668) "a") (data (i32.const 220671) "a") (data (i32.const 220674) "a") (data (i32.const 220677) "a") (data (i32.const 220680) "a") (data (i32.const 220683) "a") (data (i32.const 220686) "a") (data (i32.const 220689) "a") (data (i32.const 220692) "a") (data (i32.const 220695) "a") (data (i32.const 220698) "a") (data (i32.const 220701) "a") (data (i32.const 220704) "a") (data (i32.const 220707) "a") (data (i32.const 220710) "a") (data (i32.const 220713) "a") (data (i32.const 220716) "a") (data (i32.const 220719) "a") (data (i32.const 220722) "a") (data (i32.const 220725) "a") (data (i32.const 220728) "a") (data (i32.const 220731) "a") (data (i32.const 220734) "a") (data (i32.const 220737) "a") (data (i32.const 220740) "a") (data (i32.const 220743) "a") (data (i32.const 220746) "a") (data (i32.const 220749) "a") (data (i32.const 220752) "a") (data (i32.const 220755) "a") (data (i32.const 220758) "a") (data (i32.const 220761) "a") (data (i32.const 220764) "a") (data (i32.const 220767) "a") (data (i32.const 220770) "a") (data (i32.const 220773) "a") (data (i32.const 220776) "a") (data (i32.const 220779) "a") (data (i32.const 220782) "a") (data (i32.const 220785) "a") (data (i32.const 220788) "a") (data (i32.const 220791) "a") (data (i32.const 220794) "a") (data (i32.const 220797) "a") (data (i32.const 220800) "a") (data (i32.const 220803) "a") (data (i32.const 220806) "a") (data (i32.const 220809) "a") (data (i32.const 220812) "a") (data (i32.const 220815) "a") (data (i32.const 220818) "a") (data (i32.const 220821) "a") (data (i32.const 220824) "a") (data (i32.const 220827) "a") (data (i32.const 220830) "a") (data (i32.const 220833) "a") (data (i32.const 220836) "a") (data (i32.const 220839) "a") (data (i32.const 220842) "a") (data (i32.const 220845) "a") (data (i32.const 220848) "a") (data (i32.const 220851) "a") (data (i32.const 220854) "a") (data (i32.const 220857) "a") (data (i32.const 220860) "a") (data (i32.const 220863) "a") (data (i32.const 220866) "a") (data (i32.const 220869) "a") (data (i32.const 220872) "a") (data (i32.const 220875) "a") (data (i32.const 220878) "a") (data (i32.const 220881) "a") (data (i32.const 220884) "a") (data (i32.const 220887) "a") (data (i32.const 220890) "a") (data (i32.const 220893) "a") (data (i32.const 220896) "a") (data (i32.const 220899) "a") (data (i32.const 220902) "a") (data (i32.const 220905) "a") (data (i32.const 220908) "a") (data (i32.const 220911) "a") (data (i32.const 220914) "a") (data (i32.const 220917) "a") (data (i32.const 220920) "a") (data (i32.const 220923) "a") (data (i32.const 220926) "a") (data (i32.const 220929) "a") (data (i32.const 220932) "a") (data (i32.const 220935) "a") (data (i32.const 220938) "a") (data (i32.const 220941) "a") (data (i32.const 220944) "a") (data (i32.const 220947) "a") (data (i32.const 220950) "a") (data (i32.const 220953) "a") (data (i32.const 220956) "a") (data (i32.const 220959) "a") (data (i32.const 220962) "a") (data (i32.const 220965) "a") (data (i32.const 220968) "a") (data (i32.const 220971) "a") (data (i32.const 220974) "a") (data (i32.const 220977) "a") (data (i32.const 220980) "a") (data (i32.const 220983) "a") (data (i32.const 220986) "a") (data (i32.const 220989) "a") (data (i32.const 220992) "a") (data (i32.const 220995) "a") (data (i32.const 220998) "a") (data (i32.const 221001) "a") (data (i32.const 221004) "a") (data (i32.const 221007) "a") (data (i32.const 221010) "a") (data (i32.const 221013) "a") (data (i32.const 221016) "a") (data (i32.const 221019) "a") (data (i32.const 221022) "a") (data (i32.const 221025) "a") (data (i32.const 221028) "a") (data (i32.const 221031) "a") (data (i32.const 221034) "a") (data (i32.const 221037) "a") (data (i32.const 221040) "a") (data (i32.const 221043) "a") (data (i32.const 221046) "a") (data (i32.const 221049) "a") (data (i32.const 221052) "a") (data (i32.const 221055) "a") (data (i32.const 221058) "a") (data (i32.const 221061) "a") (data (i32.const 221064) "a") (data (i32.const 221067) "a") (data (i32.const 221070) "a") (data (i32.const 221073) "a") (data (i32.const 221076) "a") (data (i32.const 221079) "a") (data (i32.const 221082) "a") (data (i32.const 221085) "a") (data (i32.const 221088) "a") (data (i32.const 221091) "a") (data (i32.const 221094) "a") (data (i32.const 221097) "a") (data (i32.const 221100) "a") (data (i32.const 221103) "a") (data (i32.const 221106) "a") (data (i32.const 221109) "a") (data (i32.const 221112) "a") (data (i32.const 221115) "a") (data (i32.const 221118) "a") (data (i32.const 221121) "a") (data (i32.const 221124) "a") (data (i32.const 221127) "a") (data (i32.const 221130) "a") (data (i32.const 221133) "a") (data (i32.const 221136) "a") (data (i32.const 221139) "a") (data (i32.const 221142) "a") (data (i32.const 221145) "a") (data (i32.const 221148) "a") (data (i32.const 221151) "a") (data (i32.const 221154) "a") (data (i32.const 221157) "a") (data (i32.const 221160) "a") (data (i32.const 221163) "a") (data (i32.const 221166) "a") (data (i32.const 221169) "a") (data (i32.const 221172) "a") (data (i32.const 221175) "a") (data (i32.const 221178) "a") (data (i32.const 221181) "a") (data (i32.const 221184) "a") (data (i32.const 221187) "a") (data (i32.const 221190) "a") (data (i32.const 221193) "a") (data (i32.const 221196) "a") (data (i32.const 221199) "a") (data (i32.const 221202) "a") (data (i32.const 221205) "a") (data (i32.const 221208) "a") (data (i32.const 221211) "a") (data (i32.const 221214) "a") (data (i32.const 221217) "a") (data (i32.const 221220) "a") (data (i32.const 221223) "a") (data (i32.const 221226) "a") (data (i32.const 221229) "a") (data (i32.const 221232) "a") (data (i32.const 221235) "a") (data (i32.const 221238) "a") (data (i32.const 221241) "a") (data (i32.const 221244) "a") (data (i32.const 221247) "a") (data (i32.const 221250) "a") (data (i32.const 221253) "a") (data (i32.const 221256) "a") (data (i32.const 221259) "a") (data (i32.const 221262) "a") (data (i32.const 221265) "a") (data (i32.const 221268) "a") (data (i32.const 221271) "a") (data (i32.const 221274) "a") (data (i32.const 221277) "a") (data (i32.const 221280) "a") (data (i32.const 221283) "a") (data (i32.const 221286) "a") (data (i32.const 221289) "a") (data (i32.const 221292) "a") (data (i32.const 221295) "a") (data (i32.const 221298) "a") (data (i32.const 221301) "a") (data (i32.const 221304) "a") (data (i32.const 221307) "a") (data (i32.const 221310) "a") (data (i32.const 221313) "a") (data (i32.const 221316) "a") (data (i32.const 221319) "a") (data (i32.const 221322) "a") (data (i32.const 221325) "a") (data (i32.const 221328) "a") (data (i32.const 221331) "a") (data (i32.const 221334) "a") (data (i32.const 221337) "a") (data (i32.const 221340) "a") (data (i32.const 221343) "a") (data (i32.const 221346) "a") (data (i32.const 221349) "a") (data (i32.const 221352) "a") (data (i32.const 221355) "a") (data (i32.const 221358) "a") (data (i32.const 221361) "a") (data (i32.const 221364) "a") (data (i32.const 221367) "a") (data (i32.const 221370) "a") (data (i32.const 221373) "a") (data (i32.const 221376) "a") (data (i32.const 221379) "a") (data (i32.const 221382) "a") (data (i32.const 221385) "a") (data (i32.const 221388) "a") (data (i32.const 221391) "a") (data (i32.const 221394) "a") (data (i32.const 221397) "a") (data (i32.const 221400) "a") (data (i32.const 221403) "a") (data (i32.const 221406) "a") (data (i32.const 221409) "a") (data (i32.const 221412) "a") (data (i32.const 221415) "a") (data (i32.const 221418) "a") (data (i32.const 221421) "a") (data (i32.const 221424) "a") (data (i32.const 221427) "a") (data (i32.const 221430) "a") (data (i32.const 221433) "a") (data (i32.const 221436) "a") (data (i32.const 221439) "a") (data (i32.const 221442) "a") (data (i32.const 221445) "a") (data (i32.const 221448) "a") (data (i32.const 221451) "a") (data (i32.const 221454) "a") (data (i32.const 221457) "a") (data (i32.const 221460) "a") (data (i32.const 221463) "a") (data (i32.const 221466) "a") (data (i32.const 221469) "a") (data (i32.const 221472) "a") (data (i32.const 221475) "a") (data (i32.const 221478) "a") (data (i32.const 221481) "a") (data (i32.const 221484) "a") (data (i32.const 221487) "a") (data (i32.const 221490) "a") (data (i32.const 221493) "a") (data (i32.const 221496) "a") (data (i32.const 221499) "a") (data (i32.const 221502) "a") (data (i32.const 221505) "a") (data (i32.const 221508) "a") (data (i32.const 221511) "a") (data (i32.const 221514) "a") (data (i32.const 221517) "a") (data (i32.const 221520) "a") (data (i32.const 221523) "a") (data (i32.const 221526) "a") (data (i32.const 221529) "a") (data (i32.const 221532) "a") (data (i32.const 221535) "a") (data (i32.const 221538) "a") (data (i32.const 221541) "a") (data (i32.const 221544) "a") (data (i32.const 221547) "a") (data (i32.const 221550) "a") (data (i32.const 221553) "a") (data (i32.const 221556) "a") (data (i32.const 221559) "a") (data (i32.const 221562) "a") (data (i32.const 221565) "a") (data (i32.const 221568) "a") (data (i32.const 221571) "a") (data (i32.const 221574) "a") (data (i32.const 221577) "a") (data (i32.const 221580) "a") (data (i32.const 221583) "a") (data (i32.const 221586) "a") (data (i32.const 221589) "a") (data (i32.const 221592) "a") (data (i32.const 221595) "a") (data (i32.const 221598) "a") (data (i32.const 221601) "a") (data (i32.const 221604) "a") (data (i32.const 221607) "a") (data (i32.const 221610) "a") (data (i32.const 221613) "a") (data (i32.const 221616) "a") (data (i32.const 221619) "a") (data (i32.const 221622) "a") (data (i32.const 221625) "a") (data (i32.const 221628) "a") (data (i32.const 221631) "a") (data (i32.const 221634) "a") (data (i32.const 221637) "a") (data (i32.const 221640) "a") (data (i32.const 221643) "a") (data (i32.const 221646) "a") (data (i32.const 221649) "a") (data (i32.const 221652) "a") (data (i32.const 221655) "a") (data (i32.const 221658) "a") (data (i32.const 221661) "a") (data (i32.const 221664) "a") (data (i32.const 221667) "a") (data (i32.const 221670) "a") (data (i32.const 221673) "a") (data (i32.const 221676) "a") (data (i32.const 221679) "a") (data (i32.const 221682) "a") (data (i32.const 221685) "a") (data (i32.const 221688) "a") (data (i32.const 221691) "a") (data (i32.const 221694) "a") (data (i32.const 221697) "a") (data (i32.const 221700) "a") (data (i32.const 221703) "a") (data (i32.const 221706) "a") (data (i32.const 221709) "a") (data (i32.const 221712) "a") (data (i32.const 221715) "a") (data (i32.const 221718) "a") (data (i32.const 221721) "a") (data (i32.const 221724) "a") (data (i32.const 221727) "a") (data (i32.const 221730) "a") (data (i32.const 221733) "a") (data (i32.const 221736) "a") (data (i32.const 221739) "a") (data (i32.const 221742) "a") (data (i32.const 221745) "a") (data (i32.const 221748) "a") (data (i32.const 221751) "a") (data (i32.const 221754) "a") (data (i32.const 221757) "a") (data (i32.const 221760) "a") (data (i32.const 221763) "a") (data (i32.const 221766) "a") (data (i32.const 221769) "a") (data (i32.const 221772) "a") (data (i32.const 221775) "a") (data (i32.const 221778) "a") (data (i32.const 221781) "a") (data (i32.const 221784) "a") (data (i32.const 221787) "a") (data (i32.const 221790) "a") (data (i32.const 221793) "a") (data (i32.const 221796) "a") (data (i32.const 221799) "a") (data (i32.const 221802) "a") (data (i32.const 221805) "a") (data (i32.const 221808) "a") (data (i32.const 221811) "a") (data (i32.const 221814) "a") (data (i32.const 221817) "a") (data (i32.const 221820) "a") (data (i32.const 221823) "a") (data (i32.const 221826) "a") (data (i32.const 221829) "a") (data (i32.const 221832) "a") (data (i32.const 221835) "a") (data (i32.const 221838) "a") (data (i32.const 221841) "a") (data (i32.const 221844) "a") (data (i32.const 221847) "a") (data (i32.const 221850) "a") (data (i32.const 221853) "a") (data (i32.const 221856) "a") (data (i32.const 221859) "a") (data (i32.const 221862) "a") (data (i32.const 221865) "a") (data (i32.const 221868) "a") (data (i32.const 221871) "a") (data (i32.const 221874) "a") (data (i32.const 221877) "a") (data (i32.const 221880) "a") (data (i32.const 221883) "a") (data (i32.const 221886) "a") (data (i32.const 221889) "a") (data (i32.const 221892) "a") (data (i32.const 221895) "a") (data (i32.const 221898) "a") (data (i32.const 221901) "a") (data (i32.const 221904) "a") (data (i32.const 221907) "a") (data (i32.const 221910) "a") (data (i32.const 221913) "a") (data (i32.const 221916) "a") (data (i32.const 221919) "a") (data (i32.const 221922) "a") (data (i32.const 221925) "a") (data (i32.const 221928) "a") (data (i32.const 221931) "a") (data (i32.const 221934) "a") (data (i32.const 221937) "a") (data (i32.const 221940) "a") (data (i32.const 221943) "a") (data (i32.const 221946) "a") (data (i32.const 221949) "a") (data (i32.const 221952) "a") (data (i32.const 221955) "a") (data (i32.const 221958) "a") (data (i32.const 221961) "a") (data (i32.const 221964) "a") (data (i32.const 221967) "a") (data (i32.const 221970) "a") (data (i32.const 221973) "a") (data (i32.const 221976) "a") (data (i32.const 221979) "a") (data (i32.const 221982) "a") (data (i32.const 221985) "a") (data (i32.const 221988) "a") (data (i32.const 221991) "a") (data (i32.const 221994) "a") (data (i32.const 221997) "a") (data (i32.const 222000) "a") (data (i32.const 222003) "a") (data (i32.const 222006) "a") (data (i32.const 222009) "a") (data (i32.const 222012) "a") (data (i32.const 222015) "a") (data (i32.const 222018) "a") (data (i32.const 222021) "a") (data (i32.const 222024) "a") (data (i32.const 222027) "a") (data (i32.const 222030) "a") (data (i32.const 222033) "a") (data (i32.const 222036) "a") (data (i32.const 222039) "a") (data (i32.const 222042) "a") (data (i32.const 222045) "a") (data (i32.const 222048) "a") (data (i32.const 222051) "a") (data (i32.const 222054) "a") (data (i32.const 222057) "a") (data (i32.const 222060) "a") (data (i32.const 222063) "a") (data (i32.const 222066) "a") (data (i32.const 222069) "a") (data (i32.const 222072) "a") (data (i32.const 222075) "a") (data (i32.const 222078) "a") (data (i32.const 222081) "a") (data (i32.const 222084) "a") (data (i32.const 222087) "a") (data (i32.const 222090) "a") (data (i32.const 222093) "a") (data (i32.const 222096) "a") (data (i32.const 222099) "a") (data (i32.const 222102) "a") (data (i32.const 222105) "a") (data (i32.const 222108) "a") (data (i32.const 222111) "a") (data (i32.const 222114) "a") (data (i32.const 222117) "a") (data (i32.const 222120) "a") (data (i32.const 222123) "a") (data (i32.const 222126) "a") (data (i32.const 222129) "a") (data (i32.const 222132) "a") (data (i32.const 222135) "a") (data (i32.const 222138) "a") (data (i32.const 222141) "a") (data (i32.const 222144) "a") (data (i32.const 222147) "a") (data (i32.const 222150) "a") (data (i32.const 222153) "a") (data (i32.const 222156) "a") (data (i32.const 222159) "a") (data (i32.const 222162) "a") (data (i32.const 222165) "a") (data (i32.const 222168) "a") (data (i32.const 222171) "a") (data (i32.const 222174) "a") (data (i32.const 222177) "a") (data (i32.const 222180) "a") (data (i32.const 222183) "a") (data (i32.const 222186) "a") (data (i32.const 222189) "a") (data (i32.const 222192) "a") (data (i32.const 222195) "a") (data (i32.const 222198) "a") (data (i32.const 222201) "a") (data (i32.const 222204) "a") (data (i32.const 222207) "a") (data (i32.const 222210) "a") (data (i32.const 222213) "a") (data (i32.const 222216) "a") (data (i32.const 222219) "a") (data (i32.const 222222) "a") (data (i32.const 222225) "a") (data (i32.const 222228) "a") (data (i32.const 222231) "a") (data (i32.const 222234) "a") (data (i32.const 222237) "a") (data (i32.const 222240) "a") (data (i32.const 222243) "a") (data (i32.const 222246) "a") (data (i32.const 222249) "a") (data (i32.const 222252) "a") (data (i32.const 222255) "a") (data (i32.const 222258) "a") (data (i32.const 222261) "a") (data (i32.const 222264) "a") (data (i32.const 222267) "a") (data (i32.const 222270) "a") (data (i32.const 222273) "a") (data (i32.const 222276) "a") (data (i32.const 222279) "a") (data (i32.const 222282) "a") (data (i32.const 222285) "a") (data (i32.const 222288) "a") (data (i32.const 222291) "a") (data (i32.const 222294) "a") (data (i32.const 222297) "a") (data (i32.const 222300) "a") (data (i32.const 222303) "a") (data (i32.const 222306) "a") (data (i32.const 222309) "a") (data (i32.const 222312) "a") (data (i32.const 222315) "a") (data (i32.const 222318) "a") (data (i32.const 222321) "a") (data (i32.const 222324) "a") (data (i32.const 222327) "a") (data (i32.const 222330) "a") (data (i32.const 222333) "a") (data (i32.const 222336) "a") (data (i32.const 222339) "a") (data (i32.const 222342) "a") (data (i32.const 222345) "a") (data (i32.const 222348) "a") (data (i32.const 222351) "a") (data (i32.const 222354) "a") (data (i32.const 222357) "a") (data (i32.const 222360) "a") (data (i32.const 222363) "a") (data (i32.const 222366) "a") (data (i32.const 222369) "a") (data (i32.const 222372) "a") (data (i32.const 222375) "a") (data (i32.const 222378) "a") (data (i32.const 222381) "a") (data (i32.const 222384) "a") (data (i32.const 222387) "a") (data (i32.const 222390) "a") (data (i32.const 222393) "a") (data (i32.const 222396) "a") (data (i32.const 222399) "a") (data (i32.const 222402) "a") (data (i32.const 222405) "a") (data (i32.const 222408) "a") (data (i32.const 222411) "a") (data (i32.const 222414) "a") (data (i32.const 222417) "a") (data (i32.const 222420) "a") (data (i32.const 222423) "a") (data (i32.const 222426) "a") (data (i32.const 222429) "a") (data (i32.const 222432) "a") (data (i32.const 222435) "a") (data (i32.const 222438) "a") (data (i32.const 222441) "a") (data (i32.const 222444) "a") (data (i32.const 222447) "a") (data (i32.const 222450) "a") (data (i32.const 222453) "a") (data (i32.const 222456) "a") (data (i32.const 222459) "a") (data (i32.const 222462) "a") (data (i32.const 222465) "a") (data (i32.const 222468) "a") (data (i32.const 222471) "a") (data (i32.const 222474) "a") (data (i32.const 222477) "a") (data (i32.const 222480) "a") (data (i32.const 222483) "a") (data (i32.const 222486) "a") (data (i32.const 222489) "a") (data (i32.const 222492) "a") (data (i32.const 222495) "a") (data (i32.const 222498) "a") (data (i32.const 222501) "a") (data (i32.const 222504) "a") (data (i32.const 222507) "a") (data (i32.const 222510) "a") (data (i32.const 222513) "a") (data (i32.const 222516) "a") (data (i32.const 222519) "a") (data (i32.const 222522) "a") (data (i32.const 222525) "a") (data (i32.const 222528) "a") (data (i32.const 222531) "a") (data (i32.const 222534) "a") (data (i32.const 222537) "a") (data (i32.const 222540) "a") (data (i32.const 222543) "a") (data (i32.const 222546) "a") (data (i32.const 222549) "a") (data (i32.const 222552) "a") (data (i32.const 222555) "a") (data (i32.const 222558) "a") (data (i32.const 222561) "a") (data (i32.const 222564) "a") (data (i32.const 222567) "a") (data (i32.const 222570) "a") (data (i32.const 222573) "a") (data (i32.const 222576) "a") (data (i32.const 222579) "a") (data (i32.const 222582) "a") (data (i32.const 222585) "a") (data (i32.const 222588) "a") (data (i32.const 222591) "a") (data (i32.const 222594) "a") (data (i32.const 222597) "a") (data (i32.const 222600) "a") (data (i32.const 222603) "a") (data (i32.const 222606) "a") (data (i32.const 222609) "a") (data (i32.const 222612) "a") (data (i32.const 222615) "a") (data (i32.const 222618) "a") (data (i32.const 222621) "a") (data (i32.const 222624) "a") (data (i32.const 222627) "a") (data (i32.const 222630) "a") (data (i32.const 222633) "a") (data (i32.const 222636) "a") (data (i32.const 222639) "a") (data (i32.const 222642) "a") (data (i32.const 222645) "a") (data (i32.const 222648) "a") (data (i32.const 222651) "a") (data (i32.const 222654) "a") (data (i32.const 222657) "a") (data (i32.const 222660) "a") (data (i32.const 222663) "a") (data (i32.const 222666) "a") (data (i32.const 222669) "a") (data (i32.const 222672) "a") (data (i32.const 222675) "a") (data (i32.const 222678) "a") (data (i32.const 222681) "a") (data (i32.const 222684) "a") (data (i32.const 222687) "a") (data (i32.const 222690) "a") (data (i32.const 222693) "a") (data (i32.const 222696) "a") (data (i32.const 222699) "a") (data (i32.const 222702) "a") (data (i32.const 222705) "a") (data (i32.const 222708) "a") (data (i32.const 222711) "a") (data (i32.const 222714) "a") (data (i32.const 222717) "a") (data (i32.const 222720) "a") (data (i32.const 222723) "a") (data (i32.const 222726) "a") (data (i32.const 222729) "a") (data (i32.const 222732) "a") (data (i32.const 222735) "a") (data (i32.const 222738) "a") (data (i32.const 222741) "a") (data (i32.const 222744) "a") (data (i32.const 222747) "a") (data (i32.const 222750) "a") (data (i32.const 222753) "a") (data (i32.const 222756) "a") (data (i32.const 222759) "a") (data (i32.const 222762) "a") (data (i32.const 222765) "a") (data (i32.const 222768) "a") (data (i32.const 222771) "a") (data (i32.const 222774) "a") (data (i32.const 222777) "a") (data (i32.const 222780) "a") (data (i32.const 222783) "a") (data (i32.const 222786) "a") (data (i32.const 222789) "a") (data (i32.const 222792) "a") (data (i32.const 222795) "a") (data (i32.const 222798) "a") (data (i32.const 222801) "a") (data (i32.const 222804) "a") (data (i32.const 222807) "a") (data (i32.const 222810) "a") (data (i32.const 222813) "a") (data (i32.const 222816) "a") (data (i32.const 222819) "a") (data (i32.const 222822) "a") (data (i32.const 222825) "a") (data (i32.const 222828) "a") (data (i32.const 222831) "a") (data (i32.const 222834) "a") (data (i32.const 222837) "a") (data (i32.const 222840) "a") (data (i32.const 222843) "a") (data (i32.const 222846) "a") (data (i32.const 222849) "a") (data (i32.const 222852) "a") (data (i32.const 222855) "a") (data (i32.const 222858) "a") (data (i32.const 222861) "a") (data (i32.const 222864) "a") (data (i32.const 222867) "a") (data (i32.const 222870) "a") (data (i32.const 222873) "a") (data (i32.const 222876) "a") (data (i32.const 222879) "a") (data (i32.const 222882) "a") (data (i32.const 222885) "a") (data (i32.const 222888) "a") (data (i32.const 222891) "a") (data (i32.const 222894) "a") (data (i32.const 222897) "a") (data (i32.const 222900) "a") (data (i32.const 222903) "a") (data (i32.const 222906) "a") (data (i32.const 222909) "a") (data (i32.const 222912) "a") (data (i32.const 222915) "a") (data (i32.const 222918) "a") (data (i32.const 222921) "a") (data (i32.const 222924) "a") (data (i32.const 222927) "a") (data (i32.const 222930) "a") (data (i32.const 222933) "a") (data (i32.const 222936) "a") (data (i32.const 222939) "a") (data (i32.const 222942) "a") (data (i32.const 222945) "a") (data (i32.const 222948) "a") (data (i32.const 222951) "a") (data (i32.const 222954) "a") (data (i32.const 222957) "a") (data (i32.const 222960) "a") (data (i32.const 222963) "a") (data (i32.const 222966) "a") (data (i32.const 222969) "a") (data (i32.const 222972) "a") (data (i32.const 222975) "a") (data (i32.const 222978) "a") (data (i32.const 222981) "a") (data (i32.const 222984) "a") (data (i32.const 222987) "a") (data (i32.const 222990) "a") (data (i32.const 222993) "a") (data (i32.const 222996) "a") (data (i32.const 222999) "a") (data (i32.const 223002) "a") (data (i32.const 223005) "a") (data (i32.const 223008) "a") (data (i32.const 223011) "a") (data (i32.const 223014) "a") (data (i32.const 223017) "a") (data (i32.const 223020) "a") (data (i32.const 223023) "a") (data (i32.const 223026) "a") (data (i32.const 223029) "a") (data (i32.const 223032) "a") (data (i32.const 223035) "a") (data (i32.const 223038) "a") (data (i32.const 223041) "a") (data (i32.const 223044) "a") (data (i32.const 223047) "a") (data (i32.const 223050) "a") (data (i32.const 223053) "a") (data (i32.const 223056) "a") (data (i32.const 223059) "a") (data (i32.const 223062) "a") (data (i32.const 223065) "a") (data (i32.const 223068) "a") (data (i32.const 223071) "a") (data (i32.const 223074) "a") (data (i32.const 223077) "a") (data (i32.const 223080) "a") (data (i32.const 223083) "a") (data (i32.const 223086) "a") (data (i32.const 223089) "a") (data (i32.const 223092) "a") (data (i32.const 223095) "a") (data (i32.const 223098) "a") (data (i32.const 223101) "a") (data (i32.const 223104) "a") (data (i32.const 223107) "a") (data (i32.const 223110) "a") (data (i32.const 223113) "a") (data (i32.const 223116) "a") (data (i32.const 223119) "a") (data (i32.const 223122) "a") (data (i32.const 223125) "a") (data (i32.const 223128) "a") (data (i32.const 223131) "a") (data (i32.const 223134) "a") (data (i32.const 223137) "a") (data (i32.const 223140) "a") (data (i32.const 223143) "a") (data (i32.const 223146) "a") (data (i32.const 223149) "a") (data (i32.const 223152) "a") (data (i32.const 223155) "a") (data (i32.const 223158) "a") (data (i32.const 223161) "a") (data (i32.const 223164) "a") (data (i32.const 223167) "a") (data (i32.const 223170) "a") (data (i32.const 223173) "a") (data (i32.const 223176) "a") (data (i32.const 223179) "a") (data (i32.const 223182) "a") (data (i32.const 223185) "a") (data (i32.const 223188) "a") (data (i32.const 223191) "a") (data (i32.const 223194) "a") (data (i32.const 223197) "a") (data (i32.const 223200) "a") (data (i32.const 223203) "a") (data (i32.const 223206) "a") (data (i32.const 223209) "a") (data (i32.const 223212) "a") (data (i32.const 223215) "a") (data (i32.const 223218) "a") (data (i32.const 223221) "a") (data (i32.const 223224) "a") (data (i32.const 223227) "a") (data (i32.const 223230) "a") (data (i32.const 223233) "a") (data (i32.const 223236) "a") (data (i32.const 223239) "a") (data (i32.const 223242) "a") (data (i32.const 223245) "a") (data (i32.const 223248) "a") (data (i32.const 223251) "a") (data (i32.const 223254) "a") (data (i32.const 223257) "a") (data (i32.const 223260) "a") (data (i32.const 223263) "a") (data (i32.const 223266) "a") (data (i32.const 223269) "a") (data (i32.const 223272) "a") (data (i32.const 223275) "a") (data (i32.const 223278) "a") (data (i32.const 223281) "a") (data (i32.const 223284) "a") (data (i32.const 223287) "a") (data (i32.const 223290) "a") (data (i32.const 223293) "a") (data (i32.const 223296) "a") (data (i32.const 223299) "a") (data (i32.const 223302) "a") (data (i32.const 223305) "a") (data (i32.const 223308) "a") (data (i32.const 223311) "a") (data (i32.const 223314) "a") (data (i32.const 223317) "a") (data (i32.const 223320) "a") (data (i32.const 223323) "a") (data (i32.const 223326) "a") (data (i32.const 223329) "a") (data (i32.const 223332) "a") (data (i32.const 223335) "a") (data (i32.const 223338) "a") (data (i32.const 223341) "a") (data (i32.const 223344) "a") (data (i32.const 223347) "a") (data (i32.const 223350) "a") (data (i32.const 223353) "a") (data (i32.const 223356) "a") (data (i32.const 223359) "a") (data (i32.const 223362) "a") (data (i32.const 223365) "a") (data (i32.const 223368) "a") (data (i32.const 223371) "a") (data (i32.const 223374) "a") (data (i32.const 223377) "a") (data (i32.const 223380) "a") (data (i32.const 223383) "a") (data (i32.const 223386) "a") (data (i32.const 223389) "a") (data (i32.const 223392) "a") (data (i32.const 223395) "a") (data (i32.const 223398) "a") (data (i32.const 223401) "a") (data (i32.const 223404) "a") (data (i32.const 223407) "a") (data (i32.const 223410) "a") (data (i32.const 223413) "a") (data (i32.const 223416) "a") (data (i32.const 223419) "a") (data (i32.const 223422) "a") (data (i32.const 223425) "a") (data (i32.const 223428) "a") (data (i32.const 223431) "a") (data (i32.const 223434) "a") (data (i32.const 223437) "a") (data (i32.const 223440) "a") (data (i32.const 223443) "a") (data (i32.const 223446) "a") (data (i32.const 223449) "a") (data (i32.const 223452) "a") (data (i32.const 223455) "a") (data (i32.const 223458) "a") (data (i32.const 223461) "a") (data (i32.const 223464) "a") (data (i32.const 223467) "a") (data (i32.const 223470) "a") (data (i32.const 223473) "a") (data (i32.const 223476) "a") (data (i32.const 223479) "a") (data (i32.const 223482) "a") (data (i32.const 223485) "a") (data (i32.const 223488) "a") (data (i32.const 223491) "a") (data (i32.const 223494) "a") (data (i32.const 223497) "a") (data (i32.const 223500) "a") (data (i32.const 223503) "a") (data (i32.const 223506) "a") (data (i32.const 223509) "a") (data (i32.const 223512) "a") (data (i32.const 223515) "a") (data (i32.const 223518) "a") (data (i32.const 223521) "a") (data (i32.const 223524) "a") (data (i32.const 223527) "a") (data (i32.const 223530) "a") (data (i32.const 223533) "a") (data (i32.const 223536) "a") (data (i32.const 223539) "a") (data (i32.const 223542) "a") (data (i32.const 223545) "a") (data (i32.const 223548) "a") (data (i32.const 223551) "a") (data (i32.const 223554) "a") (data (i32.const 223557) "a") (data (i32.const 223560) "a") (data (i32.const 223563) "a") (data (i32.const 223566) "a") (data (i32.const 223569) "a") (data (i32.const 223572) "a") (data (i32.const 223575) "a") (data (i32.const 223578) "a") (data (i32.const 223581) "a") (data (i32.const 223584) "a") (data (i32.const 223587) "a") (data (i32.const 223590) "a") (data (i32.const 223593) "a") (data (i32.const 223596) "a") (data (i32.const 223599) "a") (data (i32.const 223602) "a") (data (i32.const 223605) "a") (data (i32.const 223608) "a") (data (i32.const 223611) "a") (data (i32.const 223614) "a") (data (i32.const 223617) "a") (data (i32.const 223620) "a") (data (i32.const 223623) "a") (data (i32.const 223626) "a") (data (i32.const 223629) "a") (data (i32.const 223632) "a") (data (i32.const 223635) "a") (data (i32.const 223638) "a") (data (i32.const 223641) "a") (data (i32.const 223644) "a") (data (i32.const 223647) "a") (data (i32.const 223650) "a") (data (i32.const 223653) "a") (data (i32.const 223656) "a") (data (i32.const 223659) "a") (data (i32.const 223662) "a") (data (i32.const 223665) "a") (data (i32.const 223668) "a") (data (i32.const 223671) "a") (data (i32.const 223674) "a") (data (i32.const 223677) "a") (data (i32.const 223680) "a") (data (i32.const 223683) "a") (data (i32.const 223686) "a") (data (i32.const 223689) "a") (data (i32.const 223692) "a") (data (i32.const 223695) "a") (data (i32.const 223698) "a") (data (i32.const 223701) "a") (data (i32.const 223704) "a") (data (i32.const 223707) "a") (data (i32.const 223710) "a") (data (i32.const 223713) "a") (data (i32.const 223716) "a") (data (i32.const 223719) "a") (data (i32.const 223722) "a") (data (i32.const 223725) "a") (data (i32.const 223728) "a") (data (i32.const 223731) "a") (data (i32.const 223734) "a") (data (i32.const 223737) "a") (data (i32.const 223740) "a") (data (i32.const 223743) "a") (data (i32.const 223746) "a") (data (i32.const 223749) "a") (data (i32.const 223752) "a") (data (i32.const 223755) "a") (data (i32.const 223758) "a") (data (i32.const 223761) "a") (data (i32.const 223764) "a") (data (i32.const 223767) "a") (data (i32.const 223770) "a") (data (i32.const 223773) "a") (data (i32.const 223776) "a") (data (i32.const 223779) "a") (data (i32.const 223782) "a") (data (i32.const 223785) "a") (data (i32.const 223788) "a") (data (i32.const 223791) "a") (data (i32.const 223794) "a") (data (i32.const 223797) "a") (data (i32.const 223800) "a") (data (i32.const 223803) "a") (data (i32.const 223806) "a") (data (i32.const 223809) "a") (data (i32.const 223812) "a") (data (i32.const 223815) "a") (data (i32.const 223818) "a") (data (i32.const 223821) "a") (data (i32.const 223824) "a") (data (i32.const 223827) "a") (data (i32.const 223830) "a") (data (i32.const 223833) "a") (data (i32.const 223836) "a") (data (i32.const 223839) "a") (data (i32.const 223842) "a") (data (i32.const 223845) "a") (data (i32.const 223848) "a") (data (i32.const 223851) "a") (data (i32.const 223854) "a") (data (i32.const 223857) "a") (data (i32.const 223860) "a") (data (i32.const 223863) "a") (data (i32.const 223866) "a") (data (i32.const 223869) "a") (data (i32.const 223872) "a") (data (i32.const 223875) "a") (data (i32.const 223878) "a") (data (i32.const 223881) "a") (data (i32.const 223884) "a") (data (i32.const 223887) "a") (data (i32.const 223890) "a") (data (i32.const 223893) "a") (data (i32.const 223896) "a") (data (i32.const 223899) "a") (data (i32.const 223902) "a") (data (i32.const 223905) "a") (data (i32.const 223908) "a") (data (i32.const 223911) "a") (data (i32.const 223914) "a") (data (i32.const 223917) "a") (data (i32.const 223920) "a") (data (i32.const 223923) "a") (data (i32.const 223926) "a") (data (i32.const 223929) "a") (data (i32.const 223932) "a") (data (i32.const 223935) "a") (data (i32.const 223938) "a") (data (i32.const 223941) "a") (data (i32.const 223944) "a") (data (i32.const 223947) "a") (data (i32.const 223950) "a") (data (i32.const 223953) "a") (data (i32.const 223956) "a") (data (i32.const 223959) "a") (data (i32.const 223962) "a") (data (i32.const 223965) "a") (data (i32.const 223968) "a") (data (i32.const 223971) "a") (data (i32.const 223974) "a") (data (i32.const 223977) "a") (data (i32.const 223980) "a") (data (i32.const 223983) "a") (data (i32.const 223986) "a") (data (i32.const 223989) "a") (data (i32.const 223992) "a") (data (i32.const 223995) "a") (data (i32.const 223998) "a") (data (i32.const 224001) "a") (data (i32.const 224004) "a") (data (i32.const 224007) "a") (data (i32.const 224010) "a") (data (i32.const 224013) "a") (data (i32.const 224016) "a") (data (i32.const 224019) "a") (data (i32.const 224022) "a") (data (i32.const 224025) "a") (data (i32.const 224028) "a") (data (i32.const 224031) "a") (data (i32.const 224034) "a") (data (i32.const 224037) "a") (data (i32.const 224040) "a") (data (i32.const 224043) "a") (data (i32.const 224046) "a") (data (i32.const 224049) "a") (data (i32.const 224052) "a") (data (i32.const 224055) "a") (data (i32.const 224058) "a") (data (i32.const 224061) "a") (data (i32.const 224064) "a") (data (i32.const 224067) "a") (data (i32.const 224070) "a") (data (i32.const 224073) "a") (data (i32.const 224076) "a") (data (i32.const 224079) "a") (data (i32.const 224082) "a") (data (i32.const 224085) "a") (data (i32.const 224088) "a") (data (i32.const 224091) "a") (data (i32.const 224094) "a") (data (i32.const 224097) "a") (data (i32.const 224100) "a") (data (i32.const 224103) "a") (data (i32.const 224106) "a") (data (i32.const 224109) "a") (data (i32.const 224112) "a") (data (i32.const 224115) "a") (data (i32.const 224118) "a") (data (i32.const 224121) "a") (data (i32.const 224124) "a") (data (i32.const 224127) "a") (data (i32.const 224130) "a") (data (i32.const 224133) "a") (data (i32.const 224136) "a") (data (i32.const 224139) "a") (data (i32.const 224142) "a") (data (i32.const 224145) "a") (data (i32.const 224148) "a") (data (i32.const 224151) "a") (data (i32.const 224154) "a") (data (i32.const 224157) "a") (data (i32.const 224160) "a") (data (i32.const 224163) "a") (data (i32.const 224166) "a") (data (i32.const 224169) "a") (data (i32.const 224172) "a") (data (i32.const 224175) "a") (data (i32.const 224178) "a") (data (i32.const 224181) "a") (data (i32.const 224184) "a") (data (i32.const 224187) "a") (data (i32.const 224190) "a") (data (i32.const 224193) "a") (data (i32.const 224196) "a") (data (i32.const 224199) "a") (data (i32.const 224202) "a") (data (i32.const 224205) "a") (data (i32.const 224208) "a") (data (i32.const 224211) "a") (data (i32.const 224214) "a") (data (i32.const 224217) "a") (data (i32.const 224220) "a") (data (i32.const 224223) "a") (data (i32.const 224226) "a") (data (i32.const 224229) "a") (data (i32.const 224232) "a") (data (i32.const 224235) "a") (data (i32.const 224238) "a") (data (i32.const 224241) "a") (data (i32.const 224244) "a") (data (i32.const 224247) "a") (data (i32.const 224250) "a") (data (i32.const 224253) "a") (data (i32.const 224256) "a") (data (i32.const 224259) "a") (data (i32.const 224262) "a") (data (i32.const 224265) "a") (data (i32.const 224268) "a") (data (i32.const 224271) "a") (data (i32.const 224274) "a") (data (i32.const 224277) "a") (data (i32.const 224280) "a") (data (i32.const 224283) "a") (data (i32.const 224286) "a") (data (i32.const 224289) "a") (data (i32.const 224292) "a") (data (i32.const 224295) "a") (data (i32.const 224298) "a") (data (i32.const 224301) "a") (data (i32.const 224304) "a") (data (i32.const 224307) "a") (data (i32.const 224310) "a") (data (i32.const 224313) "a") (data (i32.const 224316) "a") (data (i32.const 224319) "a") (data (i32.const 224322) "a") (data (i32.const 224325) "a") (data (i32.const 224328) "a") (data (i32.const 224331) "a") (data (i32.const 224334) "a") (data (i32.const 224337) "a") (data (i32.const 224340) "a") (data (i32.const 224343) "a") (data (i32.const 224346) "a") (data (i32.const 224349) "a") (data (i32.const 224352) "a") (data (i32.const 224355) "a") (data (i32.const 224358) "a") (data (i32.const 224361) "a") (data (i32.const 224364) "a") (data (i32.const 224367) "a") (data (i32.const 224370) "a") (data (i32.const 224373) "a") (data (i32.const 224376) "a") (data (i32.const 224379) "a") (data (i32.const 224382) "a") (data (i32.const 224385) "a") (data (i32.const 224388) "a") (data (i32.const 224391) "a") (data (i32.const 224394) "a") (data (i32.const 224397) "a") (data (i32.const 224400) "a") (data (i32.const 224403) "a") (data (i32.const 224406) "a") (data (i32.const 224409) "a") (data (i32.const 224412) "a") (data (i32.const 224415) "a") (data (i32.const 224418) "a") (data (i32.const 224421) "a") (data (i32.const 224424) "a") (data (i32.const 224427) "a") (data (i32.const 224430) "a") (data (i32.const 224433) "a") (data (i32.const 224436) "a") (data (i32.const 224439) "a") (data (i32.const 224442) "a") (data (i32.const 224445) "a") (data (i32.const 224448) "a") (data (i32.const 224451) "a") (data (i32.const 224454) "a") (data (i32.const 224457) "a") (data (i32.const 224460) "a") (data (i32.const 224463) "a") (data (i32.const 224466) "a") (data (i32.const 224469) "a") (data (i32.const 224472) "a") (data (i32.const 224475) "a") (data (i32.const 224478) "a") (data (i32.const 224481) "a") (data (i32.const 224484) "a") (data (i32.const 224487) "a") (data (i32.const 224490) "a") (data (i32.const 224493) "a") (data (i32.const 224496) "a") (data (i32.const 224499) "a") (data (i32.const 224502) "a") (data (i32.const 224505) "a") (data (i32.const 224508) "a") (data (i32.const 224511) "a") (data (i32.const 224514) "a") (data (i32.const 224517) "a") (data (i32.const 224520) "a") (data (i32.const 224523) "a") (data (i32.const 224526) "a") (data (i32.const 224529) "a") (data (i32.const 224532) "a") (data (i32.const 224535) "a") (data (i32.const 224538) "a") (data (i32.const 224541) "a") (data (i32.const 224544) "a") (data (i32.const 224547) "a") (data (i32.const 224550) "a") (data (i32.const 224553) "a") (data (i32.const 224556) "a") (data (i32.const 224559) "a") (data (i32.const 224562) "a") (data (i32.const 224565) "a") (data (i32.const 224568) "a") (data (i32.const 224571) "a") (data (i32.const 224574) "a") (data (i32.const 224577) "a") (data (i32.const 224580) "a") (data (i32.const 224583) "a") (data (i32.const 224586) "a") (data (i32.const 224589) "a") (data (i32.const 224592) "a") (data (i32.const 224595) "a") (data (i32.const 224598) "a") (data (i32.const 224601) "a") (data (i32.const 224604) "a") (data (i32.const 224607) "a") (data (i32.const 224610) "a") (data (i32.const 224613) "a") (data (i32.const 224616) "a") (data (i32.const 224619) "a") (data (i32.const 224622) "a") (data (i32.const 224625) "a") (data (i32.const 224628) "a") (data (i32.const 224631) "a") (data (i32.const 224634) "a") (data (i32.const 224637) "a") (data (i32.const 224640) "a") (data (i32.const 224643) "a") (data (i32.const 224646) "a") (data (i32.const 224649) "a") (data (i32.const 224652) "a") (data (i32.const 224655) "a") (data (i32.const 224658) "a") (data (i32.const 224661) "a") (data (i32.const 224664) "a") (data (i32.const 224667) "a") (data (i32.const 224670) "a") (data (i32.const 224673) "a") (data (i32.const 224676) "a") (data (i32.const 224679) "a") (data (i32.const 224682) "a") (data (i32.const 224685) "a") (data (i32.const 224688) "a") (data (i32.const 224691) "a") (data (i32.const 224694) "a") (data (i32.const 224697) "a") (data (i32.const 224700) "a") (data (i32.const 224703) "a") (data (i32.const 224706) "a") (data (i32.const 224709) "a") (data (i32.const 224712) "a") (data (i32.const 224715) "a") (data (i32.const 224718) "a") (data (i32.const 224721) "a") (data (i32.const 224724) "a") (data (i32.const 224727) "a") (data (i32.const 224730) "a") (data (i32.const 224733) "a") (data (i32.const 224736) "a") (data (i32.const 224739) "a") (data (i32.const 224742) "a") (data (i32.const 224745) "a") (data (i32.const 224748) "a") (data (i32.const 224751) "a") (data (i32.const 224754) "a") (data (i32.const 224757) "a") (data (i32.const 224760) "a") (data (i32.const 224763) "a") (data (i32.const 224766) "a") (data (i32.const 224769) "a") (data (i32.const 224772) "a") (data (i32.const 224775) "a") (data (i32.const 224778) "a") (data (i32.const 224781) "a") (data (i32.const 224784) "a") (data (i32.const 224787) "a") (data (i32.const 224790) "a") (data (i32.const 224793) "a") (data (i32.const 224796) "a") (data (i32.const 224799) "a") (data (i32.const 224802) "a") (data (i32.const 224805) "a") (data (i32.const 224808) "a") (data (i32.const 224811) "a") (data (i32.const 224814) "a") (data (i32.const 224817) "a") (data (i32.const 224820) "a") (data (i32.const 224823) "a") (data (i32.const 224826) "a") (data (i32.const 224829) "a") (data (i32.const 224832) "a") (data (i32.const 224835) "a") (data (i32.const 224838) "a") (data (i32.const 224841) "a") (data (i32.const 224844) "a") (data (i32.const 224847) "a") (data (i32.const 224850) "a") (data (i32.const 224853) "a") (data (i32.const 224856) "a") (data (i32.const 224859) "a") (data (i32.const 224862) "a") (data (i32.const 224865) "a") (data (i32.const 224868) "a") (data (i32.const 224871) "a") (data (i32.const 224874) "a") (data (i32.const 224877) "a") (data (i32.const 224880) "a") (data (i32.const 224883) "a") (data (i32.const 224886) "a") (data (i32.const 224889) "a") (data (i32.const 224892) "a") (data (i32.const 224895) "a") (data (i32.const 224898) "a") (data (i32.const 224901) "a") (data (i32.const 224904) "a") (data (i32.const 224907) "a") (data (i32.const 224910) "a") (data (i32.const 224913) "a") (data (i32.const 224916) "a") (data (i32.const 224919) "a") (data (i32.const 224922) "a") (data (i32.const 224925) "a") (data (i32.const 224928) "a") (data (i32.const 224931) "a") (data (i32.const 224934) "a") (data (i32.const 224937) "a") (data (i32.const 224940) "a") (data (i32.const 224943) "a") (data (i32.const 224946) "a") (data (i32.const 224949) "a") (data (i32.const 224952) "a") (data (i32.const 224955) "a") (data (i32.const 224958) "a") (data (i32.const 224961) "a") (data (i32.const 224964) "a") (data (i32.const 224967) "a") (data (i32.const 224970) "a") (data (i32.const 224973) "a") (data (i32.const 224976) "a") (data (i32.const 224979) "a") (data (i32.const 224982) "a") (data (i32.const 224985) "a") (data (i32.const 224988) "a") (data (i32.const 224991) "a") (data (i32.const 224994) "a") (data (i32.const 224997) "a") (data (i32.const 225000) "a") (data (i32.const 225003) "a") (data (i32.const 225006) "a") (data (i32.const 225009) "a") (data (i32.const 225012) "a") (data (i32.const 225015) "a") (data (i32.const 225018) "a") (data (i32.const 225021) "a") (data (i32.const 225024) "a") (data (i32.const 225027) "a") (data (i32.const 225030) "a") (data (i32.const 225033) "a") (data (i32.const 225036) "a") (data (i32.const 225039) "a") (data (i32.const 225042) "a") (data (i32.const 225045) "a") (data (i32.const 225048) "a") (data (i32.const 225051) "a") (data (i32.const 225054) "a") (data (i32.const 225057) "a") (data (i32.const 225060) "a") (data (i32.const 225063) "a") (data (i32.const 225066) "a") (data (i32.const 225069) "a") (data (i32.const 225072) "a") (data (i32.const 225075) "a") (data (i32.const 225078) "a") (data (i32.const 225081) "a") (data (i32.const 225084) "a") (data (i32.const 225087) "a") (data (i32.const 225090) "a") (data (i32.const 225093) "a") (data (i32.const 225096) "a") (data (i32.const 225099) "a") (data (i32.const 225102) "a") (data (i32.const 225105) "a") (data (i32.const 225108) "a") (data (i32.const 225111) "a") (data (i32.const 225114) "a") (data (i32.const 225117) "a") (data (i32.const 225120) "a") (data (i32.const 225123) "a") (data (i32.const 225126) "a") (data (i32.const 225129) "a") (data (i32.const 225132) "a") (data (i32.const 225135) "a") (data (i32.const 225138) "a") (data (i32.const 225141) "a") (data (i32.const 225144) "a") (data (i32.const 225147) "a") (data (i32.const 225150) "a") (data (i32.const 225153) "a") (data (i32.const 225156) "a") (data (i32.const 225159) "a") (data (i32.const 225162) "a") (data (i32.const 225165) "a") (data (i32.const 225168) "a") (data (i32.const 225171) "a") (data (i32.const 225174) "a") (data (i32.const 225177) "a") (data (i32.const 225180) "a") (data (i32.const 225183) "a") (data (i32.const 225186) "a") (data (i32.const 225189) "a") (data (i32.const 225192) "a") (data (i32.const 225195) "a") (data (i32.const 225198) "a") (data (i32.const 225201) "a") (data (i32.const 225204) "a") (data (i32.const 225207) "a") (data (i32.const 225210) "a") (data (i32.const 225213) "a") (data (i32.const 225216) "a") (data (i32.const 225219) "a") (data (i32.const 225222) "a") (data (i32.const 225225) "a") (data (i32.const 225228) "a") (data (i32.const 225231) "a") (data (i32.const 225234) "a") (data (i32.const 225237) "a") (data (i32.const 225240) "a") (data (i32.const 225243) "a") (data (i32.const 225246) "a") (data (i32.const 225249) "a") (data (i32.const 225252) "a") (data (i32.const 225255) "a") (data (i32.const 225258) "a") (data (i32.const 225261) "a") (data (i32.const 225264) "a") (data (i32.const 225267) "a") (data (i32.const 225270) "a") (data (i32.const 225273) "a") (data (i32.const 225276) "a") (data (i32.const 225279) "a") (data (i32.const 225282) "a") (data (i32.const 225285) "a") (data (i32.const 225288) "a") (data (i32.const 225291) "a") (data (i32.const 225294) "a") (data (i32.const 225297) "a") (data (i32.const 225300) "a") (data (i32.const 225303) "a") (data (i32.const 225306) "a") (data (i32.const 225309) "a") (data (i32.const 225312) "a") (data (i32.const 225315) "a") (data (i32.const 225318) "a") (data (i32.const 225321) "a") (data (i32.const 225324) "a") (data (i32.const 225327) "a") (data (i32.const 225330) "a") (data (i32.const 225333) "a") (data (i32.const 225336) "a") (data (i32.const 225339) "a") (data (i32.const 225342) "a") (data (i32.const 225345) "a") (data (i32.const 225348) "a") (data (i32.const 225351) "a") (data (i32.const 225354) "a") (data (i32.const 225357) "a") (data (i32.const 225360) "a") (data (i32.const 225363) "a") (data (i32.const 225366) "a") (data (i32.const 225369) "a") (data (i32.const 225372) "a") (data (i32.const 225375) "a") (data (i32.const 225378) "a") (data (i32.const 225381) "a") (data (i32.const 225384) "a") (data (i32.const 225387) "a") (data (i32.const 225390) "a") (data (i32.const 225393) "a") (data (i32.const 225396) "a") (data (i32.const 225399) "a") (data (i32.const 225402) "a") (data (i32.const 225405) "a") (data (i32.const 225408) "a") (data (i32.const 225411) "a") (data (i32.const 225414) "a") (data (i32.const 225417) "a") (data (i32.const 225420) "a") (data (i32.const 225423) "a") (data (i32.const 225426) "a") (data (i32.const 225429) "a") (data (i32.const 225432) "a") (data (i32.const 225435) "a") (data (i32.const 225438) "a") (data (i32.const 225441) "a") (data (i32.const 225444) "a") (data (i32.const 225447) "a") (data (i32.const 225450) "a") (data (i32.const 225453) "a") (data (i32.const 225456) "a") (data (i32.const 225459) "a") (data (i32.const 225462) "a") (data (i32.const 225465) "a") (data (i32.const 225468) "a") (data (i32.const 225471) "a") (data (i32.const 225474) "a") (data (i32.const 225477) "a") (data (i32.const 225480) "a") (data (i32.const 225483) "a") (data (i32.const 225486) "a") (data (i32.const 225489) "a") (data (i32.const 225492) "a") (data (i32.const 225495) "a") (data (i32.const 225498) "a") (data (i32.const 225501) "a") (data (i32.const 225504) "a") (data (i32.const 225507) "a") (data (i32.const 225510) "a") (data (i32.const 225513) "a") (data (i32.const 225516) "a") (data (i32.const 225519) "a") (data (i32.const 225522) "a") (data (i32.const 225525) "a") (data (i32.const 225528) "a") (data (i32.const 225531) "a") (data (i32.const 225534) "a") (data (i32.const 225537) "a") (data (i32.const 225540) "a") (data (i32.const 225543) "a") (data (i32.const 225546) "a") (data (i32.const 225549) "a") (data (i32.const 225552) "a") (data (i32.const 225555) "a") (data (i32.const 225558) "a") (data (i32.const 225561) "a") (data (i32.const 225564) "a") (data (i32.const 225567) "a") (data (i32.const 225570) "a") (data (i32.const 225573) "a") (data (i32.const 225576) "a") (data (i32.const 225579) "a") (data (i32.const 225582) "a") (data (i32.const 225585) "a") (data (i32.const 225588) "a") (data (i32.const 225591) "a") (data (i32.const 225594) "a") (data (i32.const 225597) "a") (data (i32.const 225600) "a") (data (i32.const 225603) "a") (data (i32.const 225606) "a") (data (i32.const 225609) "a") (data (i32.const 225612) "a") (data (i32.const 225615) "a") (data (i32.const 225618) "a") (data (i32.const 225621) "a") (data (i32.const 225624) "a") (data (i32.const 225627) "a") (data (i32.const 225630) "a") (data (i32.const 225633) "a") (data (i32.const 225636) "a") (data (i32.const 225639) "a") (data (i32.const 225642) "a") (data (i32.const 225645) "a") (data (i32.const 225648) "a") (data (i32.const 225651) "a") (data (i32.const 225654) "a") (data (i32.const 225657) "a") (data (i32.const 225660) "a") (data (i32.const 225663) "a") (data (i32.const 225666) "a") (data (i32.const 225669) "a") (data (i32.const 225672) "a") (data (i32.const 225675) "a") (data (i32.const 225678) "a") (data (i32.const 225681) "a") (data (i32.const 225684) "a") (data (i32.const 225687) "a") (data (i32.const 225690) "a") (data (i32.const 225693) "a") (data (i32.const 225696) "a") (data (i32.const 225699) "a") (data (i32.const 225702) "a") (data (i32.const 225705) "a") (data (i32.const 225708) "a") (data (i32.const 225711) "a") (data (i32.const 225714) "a") (data (i32.const 225717) "a") (data (i32.const 225720) "a") (data (i32.const 225723) "a") (data (i32.const 225726) "a") (data (i32.const 225729) "a") (data (i32.const 225732) "a") (data (i32.const 225735) "a") (data (i32.const 225738) "a") (data (i32.const 225741) "a") (data (i32.const 225744) "a") (data (i32.const 225747) "a") (data (i32.const 225750) "a") (data (i32.const 225753) "a") (data (i32.const 225756) "a") (data (i32.const 225759) "a") (data (i32.const 225762) "a") (data (i32.const 225765) "a") (data (i32.const 225768) "a") (data (i32.const 225771) "a") (data (i32.const 225774) "a") (data (i32.const 225777) "a") (data (i32.const 225780) "a") (data (i32.const 225783) "a") (data (i32.const 225786) "a") (data (i32.const 225789) "a") (data (i32.const 225792) "a") (data (i32.const 225795) "a") (data (i32.const 225798) "a") (data (i32.const 225801) "a") (data (i32.const 225804) "a") (data (i32.const 225807) "a") (data (i32.const 225810) "a") (data (i32.const 225813) "a") (data (i32.const 225816) "a") (data (i32.const 225819) "a") (data (i32.const 225822) "a") (data (i32.const 225825) "a") (data (i32.const 225828) "a") (data (i32.const 225831) "a") (data (i32.const 225834) "a") (data (i32.const 225837) "a") (data (i32.const 225840) "a") (data (i32.const 225843) "a") (data (i32.const 225846) "a") (data (i32.const 225849) "a") (data (i32.const 225852) "a") (data (i32.const 225855) "a") (data (i32.const 225858) "a") (data (i32.const 225861) "a") (data (i32.const 225864) "a") (data (i32.const 225867) "a") (data (i32.const 225870) "a") (data (i32.const 225873) "a") (data (i32.const 225876) "a") (data (i32.const 225879) "a") (data (i32.const 225882) "a") (data (i32.const 225885) "a") (data (i32.const 225888) "a") (data (i32.const 225891) "a") (data (i32.const 225894) "a") (data (i32.const 225897) "a") (data (i32.const 225900) "a") (data (i32.const 225903) "a") (data (i32.const 225906) "a") (data (i32.const 225909) "a") (data (i32.const 225912) "a") (data (i32.const 225915) "a") (data (i32.const 225918) "a") (data (i32.const 225921) "a") (data (i32.const 225924) "a") (data (i32.const 225927) "a") (data (i32.const 225930) "a") (data (i32.const 225933) "a") (data (i32.const 225936) "a") (data (i32.const 225939) "a") (data (i32.const 225942) "a") (data (i32.const 225945) "a") (data (i32.const 225948) "a") (data (i32.const 225951) "a") (data (i32.const 225954) "a") (data (i32.const 225957) "a") (data (i32.const 225960) "a") (data (i32.const 225963) "a") (data (i32.const 225966) "a") (data (i32.const 225969) "a") (data (i32.const 225972) "a") (data (i32.const 225975) "a") (data (i32.const 225978) "a") (data (i32.const 225981) "a") (data (i32.const 225984) "a") (data (i32.const 225987) "a") (data (i32.const 225990) "a") (data (i32.const 225993) "a") (data (i32.const 225996) "a") (data (i32.const 225999) "a") (data (i32.const 226002) "a") (data (i32.const 226005) "a") (data (i32.const 226008) "a") (data (i32.const 226011) "a") (data (i32.const 226014) "a") (data (i32.const 226017) "a") (data (i32.const 226020) "a") (data (i32.const 226023) "a") (data (i32.const 226026) "a") (data (i32.const 226029) "a") (data (i32.const 226032) "a") (data (i32.const 226035) "a") (data (i32.const 226038) "a") (data (i32.const 226041) "a") (data (i32.const 226044) "a") (data (i32.const 226047) "a") (data (i32.const 226050) "a") (data (i32.const 226053) "a") (data (i32.const 226056) "a") (data (i32.const 226059) "a") (data (i32.const 226062) "a") (data (i32.const 226065) "a") (data (i32.const 226068) "a") (data (i32.const 226071) "a") (data (i32.const 226074) "a") (data (i32.const 226077) "a") (data (i32.const 226080) "a") (data (i32.const 226083) "a") (data (i32.const 226086) "a") (data (i32.const 226089) "a") (data (i32.const 226092) "a") (data (i32.const 226095) "a") (data (i32.const 226098) "a") (data (i32.const 226101) "a") (data (i32.const 226104) "a") (data (i32.const 226107) "a") (data (i32.const 226110) "a") (data (i32.const 226113) "a") (data (i32.const 226116) "a") (data (i32.const 226119) "a") (data (i32.const 226122) "a") (data (i32.const 226125) "a") (data (i32.const 226128) "a") (data (i32.const 226131) "a") (data (i32.const 226134) "a") (data (i32.const 226137) "a") (data (i32.const 226140) "a") (data (i32.const 226143) "a") (data (i32.const 226146) "a") (data (i32.const 226149) "a") (data (i32.const 226152) "a") (data (i32.const 226155) "a") (data (i32.const 226158) "a") (data (i32.const 226161) "a") (data (i32.const 226164) "a") (data (i32.const 226167) "a") (data (i32.const 226170) "a") (data (i32.const 226173) "a") (data (i32.const 226176) "a") (data (i32.const 226179) "a") (data (i32.const 226182) "a") (data (i32.const 226185) "a") (data (i32.const 226188) "a") (data (i32.const 226191) "a") (data (i32.const 226194) "a") (data (i32.const 226197) "a") (data (i32.const 226200) "a") (data (i32.const 226203) "a") (data (i32.const 226206) "a") (data (i32.const 226209) "a") (data (i32.const 226212) "a") (data (i32.const 226215) "a") (data (i32.const 226218) "a") (data (i32.const 226221) "a") (data (i32.const 226224) "a") (data (i32.const 226227) "a") (data (i32.const 226230) "a") (data (i32.const 226233) "a") (data (i32.const 226236) "a") (data (i32.const 226239) "a") (data (i32.const 226242) "a") (data (i32.const 226245) "a") (data (i32.const 226248) "a") (data (i32.const 226251) "a") (data (i32.const 226254) "a") (data (i32.const 226257) "a") (data (i32.const 226260) "a") (data (i32.const 226263) "a") (data (i32.const 226266) "a") (data (i32.const 226269) "a") (data (i32.const 226272) "a") (data (i32.const 226275) "a") (data (i32.const 226278) "a") (data (i32.const 226281) "a") (data (i32.const 226284) "a") (data (i32.const 226287) "a") (data (i32.const 226290) "a") (data (i32.const 226293) "a") (data (i32.const 226296) "a") (data (i32.const 226299) "a") (data (i32.const 226302) "a") (data (i32.const 226305) "a") (data (i32.const 226308) "a") (data (i32.const 226311) "a") (data (i32.const 226314) "a") (data (i32.const 226317) "a") (data (i32.const 226320) "a") (data (i32.const 226323) "a") (data (i32.const 226326) "a") (data (i32.const 226329) "a") (data (i32.const 226332) "a") (data (i32.const 226335) "a") (data (i32.const 226338) "a") (data (i32.const 226341) "a") (data (i32.const 226344) "a") (data (i32.const 226347) "a") (data (i32.const 226350) "a") (data (i32.const 226353) "a") (data (i32.const 226356) "a") (data (i32.const 226359) "a") (data (i32.const 226362) "a") (data (i32.const 226365) "a") (data (i32.const 226368) "a") (data (i32.const 226371) "a") (data (i32.const 226374) "a") (data (i32.const 226377) "a") (data (i32.const 226380) "a") (data (i32.const 226383) "a") (data (i32.const 226386) "a") (data (i32.const 226389) "a") (data (i32.const 226392) "a") (data (i32.const 226395) "a") (data (i32.const 226398) "a") (data (i32.const 226401) "a") (data (i32.const 226404) "a") (data (i32.const 226407) "a") (data (i32.const 226410) "a") (data (i32.const 226413) "a") (data (i32.const 226416) "a") (data (i32.const 226419) "a") (data (i32.const 226422) "a") (data (i32.const 226425) "a") (data (i32.const 226428) "a") (data (i32.const 226431) "a") (data (i32.const 226434) "a") (data (i32.const 226437) "a") (data (i32.const 226440) "a") (data (i32.const 226443) "a") (data (i32.const 226446) "a") (data (i32.const 226449) "a") (data (i32.const 226452) "a") (data (i32.const 226455) "a") (data (i32.const 226458) "a") (data (i32.const 226461) "a") (data (i32.const 226464) "a") (data (i32.const 226467) "a") (data (i32.const 226470) "a") (data (i32.const 226473) "a") (data (i32.const 226476) "a") (data (i32.const 226479) "a") (data (i32.const 226482) "a") (data (i32.const 226485) "a") (data (i32.const 226488) "a") (data (i32.const 226491) "a") (data (i32.const 226494) "a") (data (i32.const 226497) "a") (data (i32.const 226500) "a") (data (i32.const 226503) "a") (data (i32.const 226506) "a") (data (i32.const 226509) "a") (data (i32.const 226512) "a") (data (i32.const 226515) "a") (data (i32.const 226518) "a") (data (i32.const 226521) "a") (data (i32.const 226524) "a") (data (i32.const 226527) "a") (data (i32.const 226530) "a") (data (i32.const 226533) "a") (data (i32.const 226536) "a") (data (i32.const 226539) "a") (data (i32.const 226542) "a") (data (i32.const 226545) "a") (data (i32.const 226548) "a") (data (i32.const 226551) "a") (data (i32.const 226554) "a") (data (i32.const 226557) "a") (data (i32.const 226560) "a") (data (i32.const 226563) "a") (data (i32.const 226566) "a") (data (i32.const 226569) "a") (data (i32.const 226572) "a") (data (i32.const 226575) "a") (data (i32.const 226578) "a") (data (i32.const 226581) "a") (data (i32.const 226584) "a") (data (i32.const 226587) "a") (data (i32.const 226590) "a") (data (i32.const 226593) "a") (data (i32.const 226596) "a") (data (i32.const 226599) "a") (data (i32.const 226602) "a") (data (i32.const 226605) "a") (data (i32.const 226608) "a") (data (i32.const 226611) "a") (data (i32.const 226614) "a") (data (i32.const 226617) "a") (data (i32.const 226620) "a") (data (i32.const 226623) "a") (data (i32.const 226626) "a") (data (i32.const 226629) "a") (data (i32.const 226632) "a") (data (i32.const 226635) "a") (data (i32.const 226638) "a") (data (i32.const 226641) "a") (data (i32.const 226644) "a") (data (i32.const 226647) "a") (data (i32.const 226650) "a") (data (i32.const 226653) "a") (data (i32.const 226656) "a") (data (i32.const 226659) "a") (data (i32.const 226662) "a") (data (i32.const 226665) "a") (data (i32.const 226668) "a") (data (i32.const 226671) "a") (data (i32.const 226674) "a") (data (i32.const 226677) "a") (data (i32.const 226680) "a") (data (i32.const 226683) "a") (data (i32.const 226686) "a") (data (i32.const 226689) "a") (data (i32.const 226692) "a") (data (i32.const 226695) "a") (data (i32.const 226698) "a") (data (i32.const 226701) "a") (data (i32.const 226704) "a") (data (i32.const 226707) "a") (data (i32.const 226710) "a") (data (i32.const 226713) "a") (data (i32.const 226716) "a") (data (i32.const 226719) "a") (data (i32.const 226722) "a") (data (i32.const 226725) "a") (data (i32.const 226728) "a") (data (i32.const 226731) "a") (data (i32.const 226734) "a") (data (i32.const 226737) "a") (data (i32.const 226740) "a") (data (i32.const 226743) "a") (data (i32.const 226746) "a") (data (i32.const 226749) "a") (data (i32.const 226752) "a") (data (i32.const 226755) "a") (data (i32.const 226758) "a") (data (i32.const 226761) "a") (data (i32.const 226764) "a") (data (i32.const 226767) "a") (data (i32.const 226770) "a") (data (i32.const 226773) "a") (data (i32.const 226776) "a") (data (i32.const 226779) "a") (data (i32.const 226782) "a") (data (i32.const 226785) "a") (data (i32.const 226788) "a") (data (i32.const 226791) "a") (data (i32.const 226794) "a") (data (i32.const 226797) "a") (data (i32.const 226800) "a") (data (i32.const 226803) "a") (data (i32.const 226806) "a") (data (i32.const 226809) "a") (data (i32.const 226812) "a") (data (i32.const 226815) "a") (data (i32.const 226818) "a") (data (i32.const 226821) "a") (data (i32.const 226824) "a") (data (i32.const 226827) "a") (data (i32.const 226830) "a") (data (i32.const 226833) "a") (data (i32.const 226836) "a") (data (i32.const 226839) "a") (data (i32.const 226842) "a") (data (i32.const 226845) "a") (data (i32.const 226848) "a") (data (i32.const 226851) "a") (data (i32.const 226854) "a") (data (i32.const 226857) "a") (data (i32.const 226860) "a") (data (i32.const 226863) "a") (data (i32.const 226866) "a") (data (i32.const 226869) "a") (data (i32.const 226872) "a") (data (i32.const 226875) "a") (data (i32.const 226878) "a") (data (i32.const 226881) "a") (data (i32.const 226884) "a") (data (i32.const 226887) "a") (data (i32.const 226890) "a") (data (i32.const 226893) "a") (data (i32.const 226896) "a") (data (i32.const 226899) "a") (data (i32.const 226902) "a") (data (i32.const 226905) "a") (data (i32.const 226908) "a") (data (i32.const 226911) "a") (data (i32.const 226914) "a") (data (i32.const 226917) "a") (data (i32.const 226920) "a") (data (i32.const 226923) "a") (data (i32.const 226926) "a") (data (i32.const 226929) "a") (data (i32.const 226932) "a") (data (i32.const 226935) "a") (data (i32.const 226938) "a") (data (i32.const 226941) "a") (data (i32.const 226944) "a") (data (i32.const 226947) "a") (data (i32.const 226950) "a") (data (i32.const 226953) "a") (data (i32.const 226956) "a") (data (i32.const 226959) "a") (data (i32.const 226962) "a") (data (i32.const 226965) "a") (data (i32.const 226968) "a") (data (i32.const 226971) "a") (data (i32.const 226974) "a") (data (i32.const 226977) "a") (data (i32.const 226980) "a") (data (i32.const 226983) "a") (data (i32.const 226986) "a") (data (i32.const 226989) "a") (data (i32.const 226992) "a") (data (i32.const 226995) "a") (data (i32.const 226998) "a") (data (i32.const 227001) "a") (data (i32.const 227004) "a") (data (i32.const 227007) "a") (data (i32.const 227010) "a") (data (i32.const 227013) "a") (data (i32.const 227016) "a") (data (i32.const 227019) "a") (data (i32.const 227022) "a") (data (i32.const 227025) "a") (data (i32.const 227028) "a") (data (i32.const 227031) "a") (data (i32.const 227034) "a") (data (i32.const 227037) "a") (data (i32.const 227040) "a") (data (i32.const 227043) "a") (data (i32.const 227046) "a") (data (i32.const 227049) "a") (data (i32.const 227052) "a") (data (i32.const 227055) "a") (data (i32.const 227058) "a") (data (i32.const 227061) "a") (data (i32.const 227064) "a") (data (i32.const 227067) "a") (data (i32.const 227070) "a") (data (i32.const 227073) "a") (data (i32.const 227076) "a") (data (i32.const 227079) "a") (data (i32.const 227082) "a") (data (i32.const 227085) "a") (data (i32.const 227088) "a") (data (i32.const 227091) "a") (data (i32.const 227094) "a") (data (i32.const 227097) "a") (data (i32.const 227100) "a") (data (i32.const 227103) "a") (data (i32.const 227106) "a") (data (i32.const 227109) "a") (data (i32.const 227112) "a") (data (i32.const 227115) "a") (data (i32.const 227118) "a") (data (i32.const 227121) "a") (data (i32.const 227124) "a") (data (i32.const 227127) "a") (data (i32.const 227130) "a") (data (i32.const 227133) "a") (data (i32.const 227136) "a") (data (i32.const 227139) "a") (data (i32.const 227142) "a") (data (i32.const 227145) "a") (data (i32.const 227148) "a") (data (i32.const 227151) "a") (data (i32.const 227154) "a") (data (i32.const 227157) "a") (data (i32.const 227160) "a") (data (i32.const 227163) "a") (data (i32.const 227166) "a") (data (i32.const 227169) "a") (data (i32.const 227172) "a") (data (i32.const 227175) "a") (data (i32.const 227178) "a") (data (i32.const 227181) "a") (data (i32.const 227184) "a") (data (i32.const 227187) "a") (data (i32.const 227190) "a") (data (i32.const 227193) "a") (data (i32.const 227196) "a") (data (i32.const 227199) "a") (data (i32.const 227202) "a") (data (i32.const 227205) "a") (data (i32.const 227208) "a") (data (i32.const 227211) "a") (data (i32.const 227214) "a") (data (i32.const 227217) "a") (data (i32.const 227220) "a") (data (i32.const 227223) "a") (data (i32.const 227226) "a") (data (i32.const 227229) "a") (data (i32.const 227232) "a") (data (i32.const 227235) "a") (data (i32.const 227238) "a") (data (i32.const 227241) "a") (data (i32.const 227244) "a") (data (i32.const 227247) "a") (data (i32.const 227250) "a") (data (i32.const 227253) "a") (data (i32.const 227256) "a") (data (i32.const 227259) "a") (data (i32.const 227262) "a") (data (i32.const 227265) "a") (data (i32.const 227268) "a") (data (i32.const 227271) "a") (data (i32.const 227274) "a") (data (i32.const 227277) "a") (data (i32.const 227280) "a") (data (i32.const 227283) "a") (data (i32.const 227286) "a") (data (i32.const 227289) "a") (data (i32.const 227292) "a") (data (i32.const 227295) "a") (data (i32.const 227298) "a") (data (i32.const 227301) "a") (data (i32.const 227304) "a") (data (i32.const 227307) "a") (data (i32.const 227310) "a") (data (i32.const 227313) "a") (data (i32.const 227316) "a") (data (i32.const 227319) "a") (data (i32.const 227322) "a") (data (i32.const 227325) "a") (data (i32.const 227328) "a") (data (i32.const 227331) "a") (data (i32.const 227334) "a") (data (i32.const 227337) "a") (data (i32.const 227340) "a") (data (i32.const 227343) "a") (data (i32.const 227346) "a") (data (i32.const 227349) "a") (data (i32.const 227352) "a") (data (i32.const 227355) "a") (data (i32.const 227358) "a") (data (i32.const 227361) "a") (data (i32.const 227364) "a") (data (i32.const 227367) "a") (data (i32.const 227370) "a") (data (i32.const 227373) "a") (data (i32.const 227376) "a") (data (i32.const 227379) "a") (data (i32.const 227382) "a") (data (i32.const 227385) "a") (data (i32.const 227388) "a") (data (i32.const 227391) "a") (data (i32.const 227394) "a") (data (i32.const 227397) "a") (data (i32.const 227400) "a") (data (i32.const 227403) "a") (data (i32.const 227406) "a") (data (i32.const 227409) "a") (data (i32.const 227412) "a") (data (i32.const 227415) "a") (data (i32.const 227418) "a") (data (i32.const 227421) "a") (data (i32.const 227424) "a") (data (i32.const 227427) "a") (data (i32.const 227430) "a") (data (i32.const 227433) "a") (data (i32.const 227436) "a") (data (i32.const 227439) "a") (data (i32.const 227442) "a") (data (i32.const 227445) "a") (data (i32.const 227448) "a") (data (i32.const 227451) "a") (data (i32.const 227454) "a") (data (i32.const 227457) "a") (data (i32.const 227460) "a") (data (i32.const 227463) "a") (data (i32.const 227466) "a") (data (i32.const 227469) "a") (data (i32.const 227472) "a") (data (i32.const 227475) "a") (data (i32.const 227478) "a") (data (i32.const 227481) "a") (data (i32.const 227484) "a") (data (i32.const 227487) "a") (data (i32.const 227490) "a") (data (i32.const 227493) "a") (data (i32.const 227496) "a") (data (i32.const 227499) "a") (data (i32.const 227502) "a") (data (i32.const 227505) "a") (data (i32.const 227508) "a") (data (i32.const 227511) "a") (data (i32.const 227514) "a") (data (i32.const 227517) "a") (data (i32.const 227520) "a") (data (i32.const 227523) "a") (data (i32.const 227526) "a") (data (i32.const 227529) "a") (data (i32.const 227532) "a") (data (i32.const 227535) "a") (data (i32.const 227538) "a") (data (i32.const 227541) "a") (data (i32.const 227544) "a") (data (i32.const 227547) "a") (data (i32.const 227550) "a") (data (i32.const 227553) "a") (data (i32.const 227556) "a") (data (i32.const 227559) "a") (data (i32.const 227562) "a") (data (i32.const 227565) "a") (data (i32.const 227568) "a") (data (i32.const 227571) "a") (data (i32.const 227574) "a") (data (i32.const 227577) "a") (data (i32.const 227580) "a") (data (i32.const 227583) "a") (data (i32.const 227586) "a") (data (i32.const 227589) "a") (data (i32.const 227592) "a") (data (i32.const 227595) "a") (data (i32.const 227598) "a") (data (i32.const 227601) "a") (data (i32.const 227604) "a") (data (i32.const 227607) "a") (data (i32.const 227610) "a") (data (i32.const 227613) "a") (data (i32.const 227616) "a") (data (i32.const 227619) "a") (data (i32.const 227622) "a") (data (i32.const 227625) "a") (data (i32.const 227628) "a") (data (i32.const 227631) "a") (data (i32.const 227634) "a") (data (i32.const 227637) "a") (data (i32.const 227640) "a") (data (i32.const 227643) "a") (data (i32.const 227646) "a") (data (i32.const 227649) "a") (data (i32.const 227652) "a") (data (i32.const 227655) "a") (data (i32.const 227658) "a") (data (i32.const 227661) "a") (data (i32.const 227664) "a") (data (i32.const 227667) "a") (data (i32.const 227670) "a") (data (i32.const 227673) "a") (data (i32.const 227676) "a") (data (i32.const 227679) "a") (data (i32.const 227682) "a") (data (i32.const 227685) "a") (data (i32.const 227688) "a") (data (i32.const 227691) "a") (data (i32.const 227694) "a") (data (i32.const 227697) "a") (data (i32.const 227700) "a") (data (i32.const 227703) "a") (data (i32.const 227706) "a") (data (i32.const 227709) "a") (data (i32.const 227712) "a") (data (i32.const 227715) "a") (data (i32.const 227718) "a") (data (i32.const 227721) "a") (data (i32.const 227724) "a") (data (i32.const 227727) "a") (data (i32.const 227730) "a") (data (i32.const 227733) "a") (data (i32.const 227736) "a") (data (i32.const 227739) "a") (data (i32.const 227742) "a") (data (i32.const 227745) "a") (data (i32.const 227748) "a") (data (i32.const 227751) "a") (data (i32.const 227754) "a") (data (i32.const 227757) "a") (data (i32.const 227760) "a") (data (i32.const 227763) "a") (data (i32.const 227766) "a") (data (i32.const 227769) "a") (data (i32.const 227772) "a") (data (i32.const 227775) "a") (data (i32.const 227778) "a") (data (i32.const 227781) "a") (data (i32.const 227784) "a") (data (i32.const 227787) "a") (data (i32.const 227790) "a") (data (i32.const 227793) "a") (data (i32.const 227796) "a") (data (i32.const 227799) "a") (data (i32.const 227802) "a") (data (i32.const 227805) "a") (data (i32.const 227808) "a") (data (i32.const 227811) "a") (data (i32.const 227814) "a") (data (i32.const 227817) "a") (data (i32.const 227820) "a") (data (i32.const 227823) "a") (data (i32.const 227826) "a") (data (i32.const 227829) "a") (data (i32.const 227832) "a") (data (i32.const 227835) "a") (data (i32.const 227838) "a") (data (i32.const 227841) "a") (data (i32.const 227844) "a") (data (i32.const 227847) "a") (data (i32.const 227850) "a") (data (i32.const 227853) "a") (data (i32.const 227856) "a") (data (i32.const 227859) "a") (data (i32.const 227862) "a") (data (i32.const 227865) "a") (data (i32.const 227868) "a") (data (i32.const 227871) "a") (data (i32.const 227874) "a") (data (i32.const 227877) "a") (data (i32.const 227880) "a") (data (i32.const 227883) "a") (data (i32.const 227886) "a") (data (i32.const 227889) "a") (data (i32.const 227892) "a") (data (i32.const 227895) "a") (data (i32.const 227898) "a") (data (i32.const 227901) "a") (data (i32.const 227904) "a") (data (i32.const 227907) "a") (data (i32.const 227910) "a") (data (i32.const 227913) "a") (data (i32.const 227916) "a") (data (i32.const 227919) "a") (data (i32.const 227922) "a") (data (i32.const 227925) "a") (data (i32.const 227928) "a") (data (i32.const 227931) "a") (data (i32.const 227934) "a") (data (i32.const 227937) "a") (data (i32.const 227940) "a") (data (i32.const 227943) "a") (data (i32.const 227946) "a") (data (i32.const 227949) "a") (data (i32.const 227952) "a") (data (i32.const 227955) "a") (data (i32.const 227958) "a") (data (i32.const 227961) "a") (data (i32.const 227964) "a") (data (i32.const 227967) "a") (data (i32.const 227970) "a") (data (i32.const 227973) "a") (data (i32.const 227976) "a") (data (i32.const 227979) "a") (data (i32.const 227982) "a") (data (i32.const 227985) "a") (data (i32.const 227988) "a") (data (i32.const 227991) "a") (data (i32.const 227994) "a") (data (i32.const 227997) "a") (data (i32.const 228000) "a") (data (i32.const 228003) "a") (data (i32.const 228006) "a") (data (i32.const 228009) "a") (data (i32.const 228012) "a") (data (i32.const 228015) "a") (data (i32.const 228018) "a") (data (i32.const 228021) "a") (data (i32.const 228024) "a") (data (i32.const 228027) "a") (data (i32.const 228030) "a") (data (i32.const 228033) "a") (data (i32.const 228036) "a") (data (i32.const 228039) "a") (data (i32.const 228042) "a") (data (i32.const 228045) "a") (data (i32.const 228048) "a") (data (i32.const 228051) "a") (data (i32.const 228054) "a") (data (i32.const 228057) "a") (data (i32.const 228060) "a") (data (i32.const 228063) "a") (data (i32.const 228066) "a") (data (i32.const 228069) "a") (data (i32.const 228072) "a") (data (i32.const 228075) "a") (data (i32.const 228078) "a") (data (i32.const 228081) "a") (data (i32.const 228084) "a") (data (i32.const 228087) "a") (data (i32.const 228090) "a") (data (i32.const 228093) "a") (data (i32.const 228096) "a") (data (i32.const 228099) "a") (data (i32.const 228102) "a") (data (i32.const 228105) "a") (data (i32.const 228108) "a") (data (i32.const 228111) "a") (data (i32.const 228114) "a") (data (i32.const 228117) "a") (data (i32.const 228120) "a") (data (i32.const 228123) "a") (data (i32.const 228126) "a") (data (i32.const 228129) "a") (data (i32.const 228132) "a") (data (i32.const 228135) "a") (data (i32.const 228138) "a") (data (i32.const 228141) "a") (data (i32.const 228144) "a") (data (i32.const 228147) "a") (data (i32.const 228150) "a") (data (i32.const 228153) "a") (data (i32.const 228156) "a") (data (i32.const 228159) "a") (data (i32.const 228162) "a") (data (i32.const 228165) "a") (data (i32.const 228168) "a") (data (i32.const 228171) "a") (data (i32.const 228174) "a") (data (i32.const 228177) "a") (data (i32.const 228180) "a") (data (i32.const 228183) "a") (data (i32.const 228186) "a") (data (i32.const 228189) "a") (data (i32.const 228192) "a") (data (i32.const 228195) "a") (data (i32.const 228198) "a") (data (i32.const 228201) "a") (data (i32.const 228204) "a") (data (i32.const 228207) "a") (data (i32.const 228210) "a") (data (i32.const 228213) "a") (data (i32.const 228216) "a") (data (i32.const 228219) "a") (data (i32.const 228222) "a") (data (i32.const 228225) "a") (data (i32.const 228228) "a") (data (i32.const 228231) "a") (data (i32.const 228234) "a") (data (i32.const 228237) "a") (data (i32.const 228240) "a") (data (i32.const 228243) "a") (data (i32.const 228246) "a") (data (i32.const 228249) "a") (data (i32.const 228252) "a") (data (i32.const 228255) "a") (data (i32.const 228258) "a") (data (i32.const 228261) "a") (data (i32.const 228264) "a") (data (i32.const 228267) "a") (data (i32.const 228270) "a") (data (i32.const 228273) "a") (data (i32.const 228276) "a") (data (i32.const 228279) "a") (data (i32.const 228282) "a") (data (i32.const 228285) "a") (data (i32.const 228288) "a") (data (i32.const 228291) "a") (data (i32.const 228294) "a") (data (i32.const 228297) "a") (data (i32.const 228300) "a") (data (i32.const 228303) "a") (data (i32.const 228306) "a") (data (i32.const 228309) "a") (data (i32.const 228312) "a") (data (i32.const 228315) "a") (data (i32.const 228318) "a") (data (i32.const 228321) "a") (data (i32.const 228324) "a") (data (i32.const 228327) "a") (data (i32.const 228330) "a") (data (i32.const 228333) "a") (data (i32.const 228336) "a") (data (i32.const 228339) "a") (data (i32.const 228342) "a") (data (i32.const 228345) "a") (data (i32.const 228348) "a") (data (i32.const 228351) "a") (data (i32.const 228354) "a") (data (i32.const 228357) "a") (data (i32.const 228360) "a") (data (i32.const 228363) "a") (data (i32.const 228366) "a") (data (i32.const 228369) "a") (data (i32.const 228372) "a") (data (i32.const 228375) "a") (data (i32.const 228378) "a") (data (i32.const 228381) "a") (data (i32.const 228384) "a") (data (i32.const 228387) "a") (data (i32.const 228390) "a") (data (i32.const 228393) "a") (data (i32.const 228396) "a") (data (i32.const 228399) "a") (data (i32.const 228402) "a") (data (i32.const 228405) "a") (data (i32.const 228408) "a") (data (i32.const 228411) "a") (data (i32.const 228414) "a") (data (i32.const 228417) "a") (data (i32.const 228420) "a") (data (i32.const 228423) "a") (data (i32.const 228426) "a") (data (i32.const 228429) "a") (data (i32.const 228432) "a") (data (i32.const 228435) "a") (data (i32.const 228438) "a") (data (i32.const 228441) "a") (data (i32.const 228444) "a") (data (i32.const 228447) "a") (data (i32.const 228450) "a") (data (i32.const 228453) "a") (data (i32.const 228456) "a") (data (i32.const 228459) "a") (data (i32.const 228462) "a") (data (i32.const 228465) "a") (data (i32.const 228468) "a") (data (i32.const 228471) "a") (data (i32.const 228474) "a") (data (i32.const 228477) "a") (data (i32.const 228480) "a") (data (i32.const 228483) "a") (data (i32.const 228486) "a") (data (i32.const 228489) "a") (data (i32.const 228492) "a") (data (i32.const 228495) "a") (data (i32.const 228498) "a") (data (i32.const 228501) "a") (data (i32.const 228504) "a") (data (i32.const 228507) "a") (data (i32.const 228510) "a") (data (i32.const 228513) "a") (data (i32.const 228516) "a") (data (i32.const 228519) "a") (data (i32.const 228522) "a") (data (i32.const 228525) "a") (data (i32.const 228528) "a") (data (i32.const 228531) "a") (data (i32.const 228534) "a") (data (i32.const 228537) "a") (data (i32.const 228540) "a") (data (i32.const 228543) "a") (data (i32.const 228546) "a") (data (i32.const 228549) "a") (data (i32.const 228552) "a") (data (i32.const 228555) "a") (data (i32.const 228558) "a") (data (i32.const 228561) "a") (data (i32.const 228564) "a") (data (i32.const 228567) "a") (data (i32.const 228570) "a") (data (i32.const 228573) "a") (data (i32.const 228576) "a") (data (i32.const 228579) "a") (data (i32.const 228582) "a") (data (i32.const 228585) "a") (data (i32.const 228588) "a") (data (i32.const 228591) "a") (data (i32.const 228594) "a") (data (i32.const 228597) "a") (data (i32.const 228600) "a") (data (i32.const 228603) "a") (data (i32.const 228606) "a") (data (i32.const 228609) "a") (data (i32.const 228612) "a") (data (i32.const 228615) "a") (data (i32.const 228618) "a") (data (i32.const 228621) "a") (data (i32.const 228624) "a") (data (i32.const 228627) "a") (data (i32.const 228630) "a") (data (i32.const 228633) "a") (data (i32.const 228636) "a") (data (i32.const 228639) "a") (data (i32.const 228642) "a") (data (i32.const 228645) "a") (data (i32.const 228648) "a") (data (i32.const 228651) "a") (data (i32.const 228654) "a") (data (i32.const 228657) "a") (data (i32.const 228660) "a") (data (i32.const 228663) "a") (data (i32.const 228666) "a") (data (i32.const 228669) "a") (data (i32.const 228672) "a") (data (i32.const 228675) "a") (data (i32.const 228678) "a") (data (i32.const 228681) "a") (data (i32.const 228684) "a") (data (i32.const 228687) "a") (data (i32.const 228690) "a") (data (i32.const 228693) "a") (data (i32.const 228696) "a") (data (i32.const 228699) "a") (data (i32.const 228702) "a") (data (i32.const 228705) "a") (data (i32.const 228708) "a") (data (i32.const 228711) "a") (data (i32.const 228714) "a") (data (i32.const 228717) "a") (data (i32.const 228720) "a") (data (i32.const 228723) "a") (data (i32.const 228726) "a") (data (i32.const 228729) "a") (data (i32.const 228732) "a") (data (i32.const 228735) "a") (data (i32.const 228738) "a") (data (i32.const 228741) "a") (data (i32.const 228744) "a") (data (i32.const 228747) "a") (data (i32.const 228750) "a") (data (i32.const 228753) "a") (data (i32.const 228756) "a") (data (i32.const 228759) "a") (data (i32.const 228762) "a") (data (i32.const 228765) "a") (data (i32.const 228768) "a") (data (i32.const 228771) "a") (data (i32.const 228774) "a") (data (i32.const 228777) "a") (data (i32.const 228780) "a") (data (i32.const 228783) "a") (data (i32.const 228786) "a") (data (i32.const 228789) "a") (data (i32.const 228792) "a") (data (i32.const 228795) "a") (data (i32.const 228798) "a") (data (i32.const 228801) "a") (data (i32.const 228804) "a") (data (i32.const 228807) "a") (data (i32.const 228810) "a") (data (i32.const 228813) "a") (data (i32.const 228816) "a") (data (i32.const 228819) "a") (data (i32.const 228822) "a") (data (i32.const 228825) "a") (data (i32.const 228828) "a") (data (i32.const 228831) "a") (data (i32.const 228834) "a") (data (i32.const 228837) "a") (data (i32.const 228840) "a") (data (i32.const 228843) "a") (data (i32.const 228846) "a") (data (i32.const 228849) "a") (data (i32.const 228852) "a") (data (i32.const 228855) "a") (data (i32.const 228858) "a") (data (i32.const 228861) "a") (data (i32.const 228864) "a") (data (i32.const 228867) "a") (data (i32.const 228870) "a") (data (i32.const 228873) "a") (data (i32.const 228876) "a") (data (i32.const 228879) "a") (data (i32.const 228882) "a") (data (i32.const 228885) "a") (data (i32.const 228888) "a") (data (i32.const 228891) "a") (data (i32.const 228894) "a") (data (i32.const 228897) "a") (data (i32.const 228900) "a") (data (i32.const 228903) "a") (data (i32.const 228906) "a") (data (i32.const 228909) "a") (data (i32.const 228912) "a") (data (i32.const 228915) "a") (data (i32.const 228918) "a") (data (i32.const 228921) "a") (data (i32.const 228924) "a") (data (i32.const 228927) "a") (data (i32.const 228930) "a") (data (i32.const 228933) "a") (data (i32.const 228936) "a") (data (i32.const 228939) "a") (data (i32.const 228942) "a") (data (i32.const 228945) "a") (data (i32.const 228948) "a") (data (i32.const 228951) "a") (data (i32.const 228954) "a") (data (i32.const 228957) "a") (data (i32.const 228960) "a") (data (i32.const 228963) "a") (data (i32.const 228966) "a") (data (i32.const 228969) "a") (data (i32.const 228972) "a") (data (i32.const 228975) "a") (data (i32.const 228978) "a") (data (i32.const 228981) "a") (data (i32.const 228984) "a") (data (i32.const 228987) "a") (data (i32.const 228990) "a") (data (i32.const 228993) "a") (data (i32.const 228996) "a") (data (i32.const 228999) "a") (data (i32.const 229002) "a") (data (i32.const 229005) "a") (data (i32.const 229008) "a") (data (i32.const 229011) "a") (data (i32.const 229014) "a") (data (i32.const 229017) "a") (data (i32.const 229020) "a") (data (i32.const 229023) "a") (data (i32.const 229026) "a") (data (i32.const 229029) "a") (data (i32.const 229032) "a") (data (i32.const 229035) "a") (data (i32.const 229038) "a") (data (i32.const 229041) "a") (data (i32.const 229044) "a") (data (i32.const 229047) "a") (data (i32.const 229050) "a") (data (i32.const 229053) "a") (data (i32.const 229056) "a") (data (i32.const 229059) "a") (data (i32.const 229062) "a") (data (i32.const 229065) "a") (data (i32.const 229068) "a") (data (i32.const 229071) "a") (data (i32.const 229074) "a") (data (i32.const 229077) "a") (data (i32.const 229080) "a") (data (i32.const 229083) "a") (data (i32.const 229086) "a") (data (i32.const 229089) "a") (data (i32.const 229092) "a") (data (i32.const 229095) "a") (data (i32.const 229098) "a") (data (i32.const 229101) "a") (data (i32.const 229104) "a") (data (i32.const 229107) "a") (data (i32.const 229110) "a") (data (i32.const 229113) "a") (data (i32.const 229116) "a") (data (i32.const 229119) "a") (data (i32.const 229122) "a") (data (i32.const 229125) "a") (data (i32.const 229128) "a") (data (i32.const 229131) "a") (data (i32.const 229134) "a") (data (i32.const 229137) "a") (data (i32.const 229140) "a") (data (i32.const 229143) "a") (data (i32.const 229146) "a") (data (i32.const 229149) "a") (data (i32.const 229152) "a") (data (i32.const 229155) "a") (data (i32.const 229158) "a") (data (i32.const 229161) "a") (data (i32.const 229164) "a") (data (i32.const 229167) "a") (data (i32.const 229170) "a") (data (i32.const 229173) "a") (data (i32.const 229176) "a") (data (i32.const 229179) "a") (data (i32.const 229182) "a") (data (i32.const 229185) "a") (data (i32.const 229188) "a") (data (i32.const 229191) "a") (data (i32.const 229194) "a") (data (i32.const 229197) "a") (data (i32.const 229200) "a") (data (i32.const 229203) "a") (data (i32.const 229206) "a") (data (i32.const 229209) "a") (data (i32.const 229212) "a") (data (i32.const 229215) "a") (data (i32.const 229218) "a") (data (i32.const 229221) "a") (data (i32.const 229224) "a") (data (i32.const 229227) "a") (data (i32.const 229230) "a") (data (i32.const 229233) "a") (data (i32.const 229236) "a") (data (i32.const 229239) "a") (data (i32.const 229242) "a") (data (i32.const 229245) "a") (data (i32.const 229248) "a") (data (i32.const 229251) "a") (data (i32.const 229254) "a") (data (i32.const 229257) "a") (data (i32.const 229260) "a") (data (i32.const 229263) "a") (data (i32.const 229266) "a") (data (i32.const 229269) "a") (data (i32.const 229272) "a") (data (i32.const 229275) "a") (data (i32.const 229278) "a") (data (i32.const 229281) "a") (data (i32.const 229284) "a") (data (i32.const 229287) "a") (data (i32.const 229290) "a") (data (i32.const 229293) "a") (data (i32.const 229296) "a") (data (i32.const 229299) "a") (data (i32.const 229302) "a") (data (i32.const 229305) "a") (data (i32.const 229308) "a") (data (i32.const 229311) "a") (data (i32.const 229314) "a") (data (i32.const 229317) "a") (data (i32.const 229320) "a") (data (i32.const 229323) "a") (data (i32.const 229326) "a") (data (i32.const 229329) "a") (data (i32.const 229332) "a") (data (i32.const 229335) "a") (data (i32.const 229338) "a") (data (i32.const 229341) "a") (data (i32.const 229344) "a") (data (i32.const 229347) "a") (data (i32.const 229350) "a") (data (i32.const 229353) "a") (data (i32.const 229356) "a") (data (i32.const 229359) "a") (data (i32.const 229362) "a") (data (i32.const 229365) "a") (data (i32.const 229368) "a") (data (i32.const 229371) "a") (data (i32.const 229374) "a") (data (i32.const 229377) "a") (data (i32.const 229380) "a") (data (i32.const 229383) "a") (data (i32.const 229386) "a") (data (i32.const 229389) "a") (data (i32.const 229392) "a") (data (i32.const 229395) "a") (data (i32.const 229398) "a") (data (i32.const 229401) "a") (data (i32.const 229404) "a") (data (i32.const 229407) "a") (data (i32.const 229410) "a") (data (i32.const 229413) "a") (data (i32.const 229416) "a") (data (i32.const 229419) "a") (data (i32.const 229422) "a") (data (i32.const 229425) "a") (data (i32.const 229428) "a") (data (i32.const 229431) "a") (data (i32.const 229434) "a") (data (i32.const 229437) "a") (data (i32.const 229440) "a") (data (i32.const 229443) "a") (data (i32.const 229446) "a") (data (i32.const 229449) "a") (data (i32.const 229452) "a") (data (i32.const 229455) "a") (data (i32.const 229458) "a") (data (i32.const 229461) "a") (data (i32.const 229464) "a") (data (i32.const 229467) "a") (data (i32.const 229470) "a") (data (i32.const 229473) "a") (data (i32.const 229476) "a") (data (i32.const 229479) "a") (data (i32.const 229482) "a") (data (i32.const 229485) "a") (data (i32.const 229488) "a") (data (i32.const 229491) "a") (data (i32.const 229494) "a") (data (i32.const 229497) "a") (data (i32.const 229500) "a") (data (i32.const 229503) "a") (data (i32.const 229506) "a") (data (i32.const 229509) "a") (data (i32.const 229512) "a") (data (i32.const 229515) "a") (data (i32.const 229518) "a") (data (i32.const 229521) "a") (data (i32.const 229524) "a") (data (i32.const 229527) "a") (data (i32.const 229530) "a") (data (i32.const 229533) "a") (data (i32.const 229536) "a") (data (i32.const 229539) "a") (data (i32.const 229542) "a") (data (i32.const 229545) "a") (data (i32.const 229548) "a") (data (i32.const 229551) "a") (data (i32.const 229554) "a") (data (i32.const 229557) "a") (data (i32.const 229560) "a") (data (i32.const 229563) "a") (data (i32.const 229566) "a") (data (i32.const 229569) "a") (data (i32.const 229572) "a") (data (i32.const 229575) "a") (data (i32.const 229578) "a") (data (i32.const 229581) "a") (data (i32.const 229584) "a") (data (i32.const 229587) "a") (data (i32.const 229590) "a") (data (i32.const 229593) "a") (data (i32.const 229596) "a") (data (i32.const 229599) "a") (data (i32.const 229602) "a") (data (i32.const 229605) "a") (data (i32.const 229608) "a") (data (i32.const 229611) "a") (data (i32.const 229614) "a") (data (i32.const 229617) "a") (data (i32.const 229620) "a") (data (i32.const 229623) "a") (data (i32.const 229626) "a") (data (i32.const 229629) "a") (data (i32.const 229632) "a") (data (i32.const 229635) "a") (data (i32.const 229638) "a") (data (i32.const 229641) "a") (data (i32.const 229644) "a") (data (i32.const 229647) "a") (data (i32.const 229650) "a") (data (i32.const 229653) "a") (data (i32.const 229656) "a") (data (i32.const 229659) "a") (data (i32.const 229662) "a") (data (i32.const 229665) "a") (data (i32.const 229668) "a") (data (i32.const 229671) "a") (data (i32.const 229674) "a") (data (i32.const 229677) "a") (data (i32.const 229680) "a") (data (i32.const 229683) "a") (data (i32.const 229686) "a") (data (i32.const 229689) "a") (data (i32.const 229692) "a") (data (i32.const 229695) "a") (data (i32.const 229698) "a") (data (i32.const 229701) "a") (data (i32.const 229704) "a") (data (i32.const 229707) "a") (data (i32.const 229710) "a") (data (i32.const 229713) "a") (data (i32.const 229716) "a") (data (i32.const 229719) "a") (data (i32.const 229722) "a") (data (i32.const 229725) "a") (data (i32.const 229728) "a") (data (i32.const 229731) "a") (data (i32.const 229734) "a") (data (i32.const 229737) "a") (data (i32.const 229740) "a") (data (i32.const 229743) "a") (data (i32.const 229746) "a") (data (i32.const 229749) "a") (data (i32.const 229752) "a") (data (i32.const 229755) "a") (data (i32.const 229758) "a") (data (i32.const 229761) "a") (data (i32.const 229764) "a") (data (i32.const 229767) "a") (data (i32.const 229770) "a") (data (i32.const 229773) "a") (data (i32.const 229776) "a") (data (i32.const 229779) "a") (data (i32.const 229782) "a") (data (i32.const 229785) "a") (data (i32.const 229788) "a") (data (i32.const 229791) "a") (data (i32.const 229794) "a") (data (i32.const 229797) "a") (data (i32.const 229800) "a") (data (i32.const 229803) "a") (data (i32.const 229806) "a") (data (i32.const 229809) "a") (data (i32.const 229812) "a") (data (i32.const 229815) "a") (data (i32.const 229818) "a") (data (i32.const 229821) "a") (data (i32.const 229824) "a") (data (i32.const 229827) "a") (data (i32.const 229830) "a") (data (i32.const 229833) "a") (data (i32.const 229836) "a") (data (i32.const 229839) "a") (data (i32.const 229842) "a") (data (i32.const 229845) "a") (data (i32.const 229848) "a") (data (i32.const 229851) "a") (data (i32.const 229854) "a") (data (i32.const 229857) "a") (data (i32.const 229860) "a") (data (i32.const 229863) "a") (data (i32.const 229866) "a") (data (i32.const 229869) "a") (data (i32.const 229872) "a") (data (i32.const 229875) "a") (data (i32.const 229878) "a") (data (i32.const 229881) "a") (data (i32.const 229884) "a") (data (i32.const 229887) "a") (data (i32.const 229890) "a") (data (i32.const 229893) "a") (data (i32.const 229896) "a") (data (i32.const 229899) "a") (data (i32.const 229902) "a") (data (i32.const 229905) "a") (data (i32.const 229908) "a") (data (i32.const 229911) "a") (data (i32.const 229914) "a") (data (i32.const 229917) "a") (data (i32.const 229920) "a") (data (i32.const 229923) "a") (data (i32.const 229926) "a") (data (i32.const 229929) "a") (data (i32.const 229932) "a") (data (i32.const 229935) "a") (data (i32.const 229938) "a") (data (i32.const 229941) "a") (data (i32.const 229944) "a") (data (i32.const 229947) "a") (data (i32.const 229950) "a") (data (i32.const 229953) "a") (data (i32.const 229956) "a") (data (i32.const 229959) "a") (data (i32.const 229962) "a") (data (i32.const 229965) "a") (data (i32.const 229968) "a") (data (i32.const 229971) "a") (data (i32.const 229974) "a") (data (i32.const 229977) "a") (data (i32.const 229980) "a") (data (i32.const 229983) "a") (data (i32.const 229986) "a") (data (i32.const 229989) "a") (data (i32.const 229992) "a") (data (i32.const 229995) "a") (data (i32.const 229998) "a") (data (i32.const 230001) "a") (data (i32.const 230004) "a") (data (i32.const 230007) "a") (data (i32.const 230010) "a") (data (i32.const 230013) "a") (data (i32.const 230016) "a") (data (i32.const 230019) "a") (data (i32.const 230022) "a") (data (i32.const 230025) "a") (data (i32.const 230028) "a") (data (i32.const 230031) "a") (data (i32.const 230034) "a") (data (i32.const 230037) "a") (data (i32.const 230040) "a") (data (i32.const 230043) "a") (data (i32.const 230046) "a") (data (i32.const 230049) "a") (data (i32.const 230052) "a") (data (i32.const 230055) "a") (data (i32.const 230058) "a") (data (i32.const 230061) "a") (data (i32.const 230064) "a") (data (i32.const 230067) "a") (data (i32.const 230070) "a") (data (i32.const 230073) "a") (data (i32.const 230076) "a") (data (i32.const 230079) "a") (data (i32.const 230082) "a") (data (i32.const 230085) "a") (data (i32.const 230088) "a") (data (i32.const 230091) "a") (data (i32.const 230094) "a") (data (i32.const 230097) "a") (data (i32.const 230100) "a") (data (i32.const 230103) "a") (data (i32.const 230106) "a") (data (i32.const 230109) "a") (data (i32.const 230112) "a") (data (i32.const 230115) "a") (data (i32.const 230118) "a") (data (i32.const 230121) "a") (data (i32.const 230124) "a") (data (i32.const 230127) "a") (data (i32.const 230130) "a") (data (i32.const 230133) "a") (data (i32.const 230136) "a") (data (i32.const 230139) "a") (data (i32.const 230142) "a") (data (i32.const 230145) "a") (data (i32.const 230148) "a") (data (i32.const 230151) "a") (data (i32.const 230154) "a") (data (i32.const 230157) "a") (data (i32.const 230160) "a") (data (i32.const 230163) "a") (data (i32.const 230166) "a") (data (i32.const 230169) "a") (data (i32.const 230172) "a") (data (i32.const 230175) "a") (data (i32.const 230178) "a") (data (i32.const 230181) "a") (data (i32.const 230184) "a") (data (i32.const 230187) "a") (data (i32.const 230190) "a") (data (i32.const 230193) "a") (data (i32.const 230196) "a") (data (i32.const 230199) "a") (data (i32.const 230202) "a") (data (i32.const 230205) "a") (data (i32.const 230208) "a") (data (i32.const 230211) "a") (data (i32.const 230214) "a") (data (i32.const 230217) "a") (data (i32.const 230220) "a") (data (i32.const 230223) "a") (data (i32.const 230226) "a") (data (i32.const 230229) "a") (data (i32.const 230232) "a") (data (i32.const 230235) "a") (data (i32.const 230238) "a") (data (i32.const 230241) "a") (data (i32.const 230244) "a") (data (i32.const 230247) "a") (data (i32.const 230250) "a") (data (i32.const 230253) "a") (data (i32.const 230256) "a") (data (i32.const 230259) "a") (data (i32.const 230262) "a") (data (i32.const 230265) "a") (data (i32.const 230268) "a") (data (i32.const 230271) "a") (data (i32.const 230274) "a") (data (i32.const 230277) "a") (data (i32.const 230280) "a") (data (i32.const 230283) "a") (data (i32.const 230286) "a") (data (i32.const 230289) "a") (data (i32.const 230292) "a") (data (i32.const 230295) "a") (data (i32.const 230298) "a") (data (i32.const 230301) "a") (data (i32.const 230304) "a") (data (i32.const 230307) "a") (data (i32.const 230310) "a") (data (i32.const 230313) "a") (data (i32.const 230316) "a") (data (i32.const 230319) "a") (data (i32.const 230322) "a") (data (i32.const 230325) "a") (data (i32.const 230328) "a") (data (i32.const 230331) "a") (data (i32.const 230334) "a") (data (i32.const 230337) "a") (data (i32.const 230340) "a") (data (i32.const 230343) "a") (data (i32.const 230346) "a") (data (i32.const 230349) "a") (data (i32.const 230352) "a") (data (i32.const 230355) "a") (data (i32.const 230358) "a") (data (i32.const 230361) "a") (data (i32.const 230364) "a") (data (i32.const 230367) "a") (data (i32.const 230370) "a") (data (i32.const 230373) "a") (data (i32.const 230376) "a") (data (i32.const 230379) "a") (data (i32.const 230382) "a") (data (i32.const 230385) "a") (data (i32.const 230388) "a") (data (i32.const 230391) "a") (data (i32.const 230394) "a") (data (i32.const 230397) "a") (data (i32.const 230400) "a") (data (i32.const 230403) "a") (data (i32.const 230406) "a") (data (i32.const 230409) "a") (data (i32.const 230412) "a") (data (i32.const 230415) "a") (data (i32.const 230418) "a") (data (i32.const 230421) "a") (data (i32.const 230424) "a") (data (i32.const 230427) "a") (data (i32.const 230430) "a") (data (i32.const 230433) "a") (data (i32.const 230436) "a") (data (i32.const 230439) "a") (data (i32.const 230442) "a") (data (i32.const 230445) "a") (data (i32.const 230448) "a") (data (i32.const 230451) "a") (data (i32.const 230454) "a") (data (i32.const 230457) "a") (data (i32.const 230460) "a") (data (i32.const 230463) "a") (data (i32.const 230466) "a") (data (i32.const 230469) "a") (data (i32.const 230472) "a") (data (i32.const 230475) "a") (data (i32.const 230478) "a") (data (i32.const 230481) "a") (data (i32.const 230484) "a") (data (i32.const 230487) "a") (data (i32.const 230490) "a") (data (i32.const 230493) "a") (data (i32.const 230496) "a") (data (i32.const 230499) "a") (data (i32.const 230502) "a") (data (i32.const 230505) "a") (data (i32.const 230508) "a") (data (i32.const 230511) "a") (data (i32.const 230514) "a") (data (i32.const 230517) "a") (data (i32.const 230520) "a") (data (i32.const 230523) "a") (data (i32.const 230526) "a") (data (i32.const 230529) "a") (data (i32.const 230532) "a") (data (i32.const 230535) "a") (data (i32.const 230538) "a") (data (i32.const 230541) "a") (data (i32.const 230544) "a") (data (i32.const 230547) "a") (data (i32.const 230550) "a") (data (i32.const 230553) "a") (data (i32.const 230556) "a") (data (i32.const 230559) "a") (data (i32.const 230562) "a") (data (i32.const 230565) "a") (data (i32.const 230568) "a") (data (i32.const 230571) "a") (data (i32.const 230574) "a") (data (i32.const 230577) "a") (data (i32.const 230580) "a") (data (i32.const 230583) "a") (data (i32.const 230586) "a") (data (i32.const 230589) "a") (data (i32.const 230592) "a") (data (i32.const 230595) "a") (data (i32.const 230598) "a") (data (i32.const 230601) "a") (data (i32.const 230604) "a") (data (i32.const 230607) "a") (data (i32.const 230610) "a") (data (i32.const 230613) "a") (data (i32.const 230616) "a") (data (i32.const 230619) "a") (data (i32.const 230622) "a") (data (i32.const 230625) "a") (data (i32.const 230628) "a") (data (i32.const 230631) "a") (data (i32.const 230634) "a") (data (i32.const 230637) "a") (data (i32.const 230640) "a") (data (i32.const 230643) "a") (data (i32.const 230646) "a") (data (i32.const 230649) "a") (data (i32.const 230652) "a") (data (i32.const 230655) "a") (data (i32.const 230658) "a") (data (i32.const 230661) "a") (data (i32.const 230664) "a") (data (i32.const 230667) "a") (data (i32.const 230670) "a") (data (i32.const 230673) "a") (data (i32.const 230676) "a") (data (i32.const 230679) "a") (data (i32.const 230682) "a") (data (i32.const 230685) "a") (data (i32.const 230688) "a") (data (i32.const 230691) "a") (data (i32.const 230694) "a") (data (i32.const 230697) "a") (data (i32.const 230700) "a") (data (i32.const 230703) "a") (data (i32.const 230706) "a") (data (i32.const 230709) "a") (data (i32.const 230712) "a") (data (i32.const 230715) "a") (data (i32.const 230718) "a") (data (i32.const 230721) "a") (data (i32.const 230724) "a") (data (i32.const 230727) "a") (data (i32.const 230730) "a") (data (i32.const 230733) "a") (data (i32.const 230736) "a") (data (i32.const 230739) "a") (data (i32.const 230742) "a") (data (i32.const 230745) "a") (data (i32.const 230748) "a") (data (i32.const 230751) "a") (data (i32.const 230754) "a") (data (i32.const 230757) "a") (data (i32.const 230760) "a") (data (i32.const 230763) "a") (data (i32.const 230766) "a") (data (i32.const 230769) "a") (data (i32.const 230772) "a") (data (i32.const 230775) "a") (data (i32.const 230778) "a") (data (i32.const 230781) "a") (data (i32.const 230784) "a") (data (i32.const 230787) "a") (data (i32.const 230790) "a") (data (i32.const 230793) "a") (data (i32.const 230796) "a") (data (i32.const 230799) "a") (data (i32.const 230802) "a") (data (i32.const 230805) "a") (data (i32.const 230808) "a") (data (i32.const 230811) "a") (data (i32.const 230814) "a") (data (i32.const 230817) "a") (data (i32.const 230820) "a") (data (i32.const 230823) "a") (data (i32.const 230826) "a") (data (i32.const 230829) "a") (data (i32.const 230832) "a") (data (i32.const 230835) "a") (data (i32.const 230838) "a") (data (i32.const 230841) "a") (data (i32.const 230844) "a") (data (i32.const 230847) "a") (data (i32.const 230850) "a") (data (i32.const 230853) "a") (data (i32.const 230856) "a") (data (i32.const 230859) "a") (data (i32.const 230862) "a") (data (i32.const 230865) "a") (data (i32.const 230868) "a") (data (i32.const 230871) "a") (data (i32.const 230874) "a") (data (i32.const 230877) "a") (data (i32.const 230880) "a") (data (i32.const 230883) "a") (data (i32.const 230886) "a") (data (i32.const 230889) "a") (data (i32.const 230892) "a") (data (i32.const 230895) "a") (data (i32.const 230898) "a") (data (i32.const 230901) "a") (data (i32.const 230904) "a") (data (i32.const 230907) "a") (data (i32.const 230910) "a") (data (i32.const 230913) "a") (data (i32.const 230916) "a") (data (i32.const 230919) "a") (data (i32.const 230922) "a") (data (i32.const 230925) "a") (data (i32.const 230928) "a") (data (i32.const 230931) "a") (data (i32.const 230934) "a") (data (i32.const 230937) "a") (data (i32.const 230940) "a") (data (i32.const 230943) "a") (data (i32.const 230946) "a") (data (i32.const 230949) "a") (data (i32.const 230952) "a") (data (i32.const 230955) "a") (data (i32.const 230958) "a") (data (i32.const 230961) "a") (data (i32.const 230964) "a") (data (i32.const 230967) "a") (data (i32.const 230970) "a") (data (i32.const 230973) "a") (data (i32.const 230976) "a") (data (i32.const 230979) "a") (data (i32.const 230982) "a") (data (i32.const 230985) "a") (data (i32.const 230988) "a") (data (i32.const 230991) "a") (data (i32.const 230994) "a") (data (i32.const 230997) "a") (data (i32.const 231000) "a") (data (i32.const 231003) "a") (data (i32.const 231006) "a") (data (i32.const 231009) "a") (data (i32.const 231012) "a") (data (i32.const 231015) "a") (data (i32.const 231018) "a") (data (i32.const 231021) "a") (data (i32.const 231024) "a") (data (i32.const 231027) "a") (data (i32.const 231030) "a") (data (i32.const 231033) "a") (data (i32.const 231036) "a") (data (i32.const 231039) "a") (data (i32.const 231042) "a") (data (i32.const 231045) "a") (data (i32.const 231048) "a") (data (i32.const 231051) "a") (data (i32.const 231054) "a") (data (i32.const 231057) "a") (data (i32.const 231060) "a") (data (i32.const 231063) "a") (data (i32.const 231066) "a") (data (i32.const 231069) "a") (data (i32.const 231072) "a") (data (i32.const 231075) "a") (data (i32.const 231078) "a") (data (i32.const 231081) "a") (data (i32.const 231084) "a") (data (i32.const 231087) "a") (data (i32.const 231090) "a") (data (i32.const 231093) "a") (data (i32.const 231096) "a") (data (i32.const 231099) "a") (data (i32.const 231102) "a") (data (i32.const 231105) "a") (data (i32.const 231108) "a") (data (i32.const 231111) "a") (data (i32.const 231114) "a") (data (i32.const 231117) "a") (data (i32.const 231120) "a") (data (i32.const 231123) "a") (data (i32.const 231126) "a") (data (i32.const 231129) "a") (data (i32.const 231132) "a") (data (i32.const 231135) "a") (data (i32.const 231138) "a") (data (i32.const 231141) "a") (data (i32.const 231144) "a") (data (i32.const 231147) "a") (data (i32.const 231150) "a") (data (i32.const 231153) "a") (data (i32.const 231156) "a") (data (i32.const 231159) "a") (data (i32.const 231162) "a") (data (i32.const 231165) "a") (data (i32.const 231168) "a") (data (i32.const 231171) "a") (data (i32.const 231174) "a") (data (i32.const 231177) "a") (data (i32.const 231180) "a") (data (i32.const 231183) "a") (data (i32.const 231186) "a") (data (i32.const 231189) "a") (data (i32.const 231192) "a") (data (i32.const 231195) "a") (data (i32.const 231198) "a") (data (i32.const 231201) "a") (data (i32.const 231204) "a") (data (i32.const 231207) "a") (data (i32.const 231210) "a") (data (i32.const 231213) "a") (data (i32.const 231216) "a") (data (i32.const 231219) "a") (data (i32.const 231222) "a") (data (i32.const 231225) "a") (data (i32.const 231228) "a") (data (i32.const 231231) "a") (data (i32.const 231234) "a") (data (i32.const 231237) "a") (data (i32.const 231240) "a") (data (i32.const 231243) "a") (data (i32.const 231246) "a") (data (i32.const 231249) "a") (data (i32.const 231252) "a") (data (i32.const 231255) "a") (data (i32.const 231258) "a") (data (i32.const 231261) "a") (data (i32.const 231264) "a") (data (i32.const 231267) "a") (data (i32.const 231270) "a") (data (i32.const 231273) "a") (data (i32.const 231276) "a") (data (i32.const 231279) "a") (data (i32.const 231282) "a") (data (i32.const 231285) "a") (data (i32.const 231288) "a") (data (i32.const 231291) "a") (data (i32.const 231294) "a") (data (i32.const 231297) "a") (data (i32.const 231300) "a") (data (i32.const 231303) "a") (data (i32.const 231306) "a") (data (i32.const 231309) "a") (data (i32.const 231312) "a") (data (i32.const 231315) "a") (data (i32.const 231318) "a") (data (i32.const 231321) "a") (data (i32.const 231324) "a") (data (i32.const 231327) "a") (data (i32.const 231330) "a") (data (i32.const 231333) "a") (data (i32.const 231336) "a") (data (i32.const 231339) "a") (data (i32.const 231342) "a") (data (i32.const 231345) "a") (data (i32.const 231348) "a") (data (i32.const 231351) "a") (data (i32.const 231354) "a") (data (i32.const 231357) "a") (data (i32.const 231360) "a") (data (i32.const 231363) "a") (data (i32.const 231366) "a") (data (i32.const 231369) "a") (data (i32.const 231372) "a") (data (i32.const 231375) "a") (data (i32.const 231378) "a") (data (i32.const 231381) "a") (data (i32.const 231384) "a") (data (i32.const 231387) "a") (data (i32.const 231390) "a") (data (i32.const 231393) "a") (data (i32.const 231396) "a") (data (i32.const 231399) "a") (data (i32.const 231402) "a") (data (i32.const 231405) "a") (data (i32.const 231408) "a") (data (i32.const 231411) "a") (data (i32.const 231414) "a") (data (i32.const 231417) "a") (data (i32.const 231420) "a") (data (i32.const 231423) "a") (data (i32.const 231426) "a") (data (i32.const 231429) "a") (data (i32.const 231432) "a") (data (i32.const 231435) "a") (data (i32.const 231438) "a") (data (i32.const 231441) "a") (data (i32.const 231444) "a") (data (i32.const 231447) "a") (data (i32.const 231450) "a") (data (i32.const 231453) "a") (data (i32.const 231456) "a") (data (i32.const 231459) "a") (data (i32.const 231462) "a") (data (i32.const 231465) "a") (data (i32.const 231468) "a") (data (i32.const 231471) "a") (data (i32.const 231474) "a") (data (i32.const 231477) "a") (data (i32.const 231480) "a") (data (i32.const 231483) "a") (data (i32.const 231486) "a") (data (i32.const 231489) "a") (data (i32.const 231492) "a") (data (i32.const 231495) "a") (data (i32.const 231498) "a") (data (i32.const 231501) "a") (data (i32.const 231504) "a") (data (i32.const 231507) "a") (data (i32.const 231510) "a") (data (i32.const 231513) "a") (data (i32.const 231516) "a") (data (i32.const 231519) "a") (data (i32.const 231522) "a") (data (i32.const 231525) "a") (data (i32.const 231528) "a") (data (i32.const 231531) "a") (data (i32.const 231534) "a") (data (i32.const 231537) "a") (data (i32.const 231540) "a") (data (i32.const 231543) "a") (data (i32.const 231546) "a") (data (i32.const 231549) "a") (data (i32.const 231552) "a") (data (i32.const 231555) "a") (data (i32.const 231558) "a") (data (i32.const 231561) "a") (data (i32.const 231564) "a") (data (i32.const 231567) "a") (data (i32.const 231570) "a") (data (i32.const 231573) "a") (data (i32.const 231576) "a") (data (i32.const 231579) "a") (data (i32.const 231582) "a") (data (i32.const 231585) "a") (data (i32.const 231588) "a") (data (i32.const 231591) "a") (data (i32.const 231594) "a") (data (i32.const 231597) "a") (data (i32.const 231600) "a") (data (i32.const 231603) "a") (data (i32.const 231606) "a") (data (i32.const 231609) "a") (data (i32.const 231612) "a") (data (i32.const 231615) "a") (data (i32.const 231618) "a") (data (i32.const 231621) "a") (data (i32.const 231624) "a") (data (i32.const 231627) "a") (data (i32.const 231630) "a") (data (i32.const 231633) "a") (data (i32.const 231636) "a") (data (i32.const 231639) "a") (data (i32.const 231642) "a") (data (i32.const 231645) "a") (data (i32.const 231648) "a") (data (i32.const 231651) "a") (data (i32.const 231654) "a") (data (i32.const 231657) "a") (data (i32.const 231660) "a") (data (i32.const 231663) "a") (data (i32.const 231666) "a") (data (i32.const 231669) "a") (data (i32.const 231672) "a") (data (i32.const 231675) "a") (data (i32.const 231678) "a") (data (i32.const 231681) "a") (data (i32.const 231684) "a") (data (i32.const 231687) "a") (data (i32.const 231690) "a") (data (i32.const 231693) "a") (data (i32.const 231696) "a") (data (i32.const 231699) "a") (data (i32.const 231702) "a") (data (i32.const 231705) "a") (data (i32.const 231708) "a") (data (i32.const 231711) "a") (data (i32.const 231714) "a") (data (i32.const 231717) "a") (data (i32.const 231720) "a") (data (i32.const 231723) "a") (data (i32.const 231726) "a") (data (i32.const 231729) "a") (data (i32.const 231732) "a") (data (i32.const 231735) "a") (data (i32.const 231738) "a") (data (i32.const 231741) "a") (data (i32.const 231744) "a") (data (i32.const 231747) "a") (data (i32.const 231750) "a") (data (i32.const 231753) "a") (data (i32.const 231756) "a") (data (i32.const 231759) "a") (data (i32.const 231762) "a") (data (i32.const 231765) "a") (data (i32.const 231768) "a") (data (i32.const 231771) "a") (data (i32.const 231774) "a") (data (i32.const 231777) "a") (data (i32.const 231780) "a") (data (i32.const 231783) "a") (data (i32.const 231786) "a") (data (i32.const 231789) "a") (data (i32.const 231792) "a") (data (i32.const 231795) "a") (data (i32.const 231798) "a") (data (i32.const 231801) "a") (data (i32.const 231804) "a") (data (i32.const 231807) "a") (data (i32.const 231810) "a") (data (i32.const 231813) "a") (data (i32.const 231816) "a") (data (i32.const 231819) "a") (data (i32.const 231822) "a") (data (i32.const 231825) "a") (data (i32.const 231828) "a") (data (i32.const 231831) "a") (data (i32.const 231834) "a") (data (i32.const 231837) "a") (data (i32.const 231840) "a") (data (i32.const 231843) "a") (data (i32.const 231846) "a") (data (i32.const 231849) "a") (data (i32.const 231852) "a") (data (i32.const 231855) "a") (data (i32.const 231858) "a") (data (i32.const 231861) "a") (data (i32.const 231864) "a") (data (i32.const 231867) "a") (data (i32.const 231870) "a") (data (i32.const 231873) "a") (data (i32.const 231876) "a") (data (i32.const 231879) "a") (data (i32.const 231882) "a") (data (i32.const 231885) "a") (data (i32.const 231888) "a") (data (i32.const 231891) "a") (data (i32.const 231894) "a") (data (i32.const 231897) "a") (data (i32.const 231900) "a") (data (i32.const 231903) "a") (data (i32.const 231906) "a") (data (i32.const 231909) "a") (data (i32.const 231912) "a") (data (i32.const 231915) "a") (data (i32.const 231918) "a") (data (i32.const 231921) "a") (data (i32.const 231924) "a") (data (i32.const 231927) "a") (data (i32.const 231930) "a") (data (i32.const 231933) "a") (data (i32.const 231936) "a") (data (i32.const 231939) "a") (data (i32.const 231942) "a") (data (i32.const 231945) "a") (data (i32.const 231948) "a") (data (i32.const 231951) "a") (data (i32.const 231954) "a") (data (i32.const 231957) "a") (data (i32.const 231960) "a") (data (i32.const 231963) "a") (data (i32.const 231966) "a") (data (i32.const 231969) "a") (data (i32.const 231972) "a") (data (i32.const 231975) "a") (data (i32.const 231978) "a") (data (i32.const 231981) "a") (data (i32.const 231984) "a") (data (i32.const 231987) "a") (data (i32.const 231990) "a") (data (i32.const 231993) "a") (data (i32.const 231996) "a") (data (i32.const 231999) "a") (data (i32.const 232002) "a") (data (i32.const 232005) "a") (data (i32.const 232008) "a") (data (i32.const 232011) "a") (data (i32.const 232014) "a") (data (i32.const 232017) "a") (data (i32.const 232020) "a") (data (i32.const 232023) "a") (data (i32.const 232026) "a") (data (i32.const 232029) "a") (data (i32.const 232032) "a") (data (i32.const 232035) "a") (data (i32.const 232038) "a") (data (i32.const 232041) "a") (data (i32.const 232044) "a") (data (i32.const 232047) "a") (data (i32.const 232050) "a") (data (i32.const 232053) "a") (data (i32.const 232056) "a") (data (i32.const 232059) "a") (data (i32.const 232062) "a") (data (i32.const 232065) "a") (data (i32.const 232068) "a") (data (i32.const 232071) "a") (data (i32.const 232074) "a") (data (i32.const 232077) "a") (data (i32.const 232080) "a") (data (i32.const 232083) "a") (data (i32.const 232086) "a") (data (i32.const 232089) "a") (data (i32.const 232092) "a") (data (i32.const 232095) "a") (data (i32.const 232098) "a") (data (i32.const 232101) "a") (data (i32.const 232104) "a") (data (i32.const 232107) "a") (data (i32.const 232110) "a") (data (i32.const 232113) "a") (data (i32.const 232116) "a") (data (i32.const 232119) "a") (data (i32.const 232122) "a") (data (i32.const 232125) "a") (data (i32.const 232128) "a") (data (i32.const 232131) "a") (data (i32.const 232134) "a") (data (i32.const 232137) "a") (data (i32.const 232140) "a") (data (i32.const 232143) "a") (data (i32.const 232146) "a") (data (i32.const 232149) "a") (data (i32.const 232152) "a") (data (i32.const 232155) "a") (data (i32.const 232158) "a") (data (i32.const 232161) "a") (data (i32.const 232164) "a") (data (i32.const 232167) "a") (data (i32.const 232170) "a") (data (i32.const 232173) "a") (data (i32.const 232176) "a") (data (i32.const 232179) "a") (data (i32.const 232182) "a") (data (i32.const 232185) "a") (data (i32.const 232188) "a") (data (i32.const 232191) "a") (data (i32.const 232194) "a") (data (i32.const 232197) "a") (data (i32.const 232200) "a") (data (i32.const 232203) "a") (data (i32.const 232206) "a") (data (i32.const 232209) "a") (data (i32.const 232212) "a") (data (i32.const 232215) "a") (data (i32.const 232218) "a") (data (i32.const 232221) "a") (data (i32.const 232224) "a") (data (i32.const 232227) "a") (data (i32.const 232230) "a") (data (i32.const 232233) "a") (data (i32.const 232236) "a") (data (i32.const 232239) "a") (data (i32.const 232242) "a") (data (i32.const 232245) "a") (data (i32.const 232248) "a") (data (i32.const 232251) "a") (data (i32.const 232254) "a") (data (i32.const 232257) "a") (data (i32.const 232260) "a") (data (i32.const 232263) "a") (data (i32.const 232266) "a") (data (i32.const 232269) "a") (data (i32.const 232272) "a") (data (i32.const 232275) "a") (data (i32.const 232278) "a") (data (i32.const 232281) "a") (data (i32.const 232284) "a") (data (i32.const 232287) "a") (data (i32.const 232290) "a") (data (i32.const 232293) "a") (data (i32.const 232296) "a") (data (i32.const 232299) "a") (data (i32.const 232302) "a") (data (i32.const 232305) "a") (data (i32.const 232308) "a") (data (i32.const 232311) "a") (data (i32.const 232314) "a") (data (i32.const 232317) "a") (data (i32.const 232320) "a") (data (i32.const 232323) "a") (data (i32.const 232326) "a") (data (i32.const 232329) "a") (data (i32.const 232332) "a") (data (i32.const 232335) "a") (data (i32.const 232338) "a") (data (i32.const 232341) "a") (data (i32.const 232344) "a") (data (i32.const 232347) "a") (data (i32.const 232350) "a") (data (i32.const 232353) "a") (data (i32.const 232356) "a") (data (i32.const 232359) "a") (data (i32.const 232362) "a") (data (i32.const 232365) "a") (data (i32.const 232368) "a") (data (i32.const 232371) "a") (data (i32.const 232374) "a") (data (i32.const 232377) "a") (data (i32.const 232380) "a") (data (i32.const 232383) "a") (data (i32.const 232386) "a") (data (i32.const 232389) "a") (data (i32.const 232392) "a") (data (i32.const 232395) "a") (data (i32.const 232398) "a") (data (i32.const 232401) "a") (data (i32.const 232404) "a") (data (i32.const 232407) "a") (data (i32.const 232410) "a") (data (i32.const 232413) "a") (data (i32.const 232416) "a") (data (i32.const 232419) "a") (data (i32.const 232422) "a") (data (i32.const 232425) "a") (data (i32.const 232428) "a") (data (i32.const 232431) "a") (data (i32.const 232434) "a") (data (i32.const 232437) "a") (data (i32.const 232440) "a") (data (i32.const 232443) "a") (data (i32.const 232446) "a") (data (i32.const 232449) "a") (data (i32.const 232452) "a") (data (i32.const 232455) "a") (data (i32.const 232458) "a") (data (i32.const 232461) "a") (data (i32.const 232464) "a") (data (i32.const 232467) "a") (data (i32.const 232470) "a") (data (i32.const 232473) "a") (data (i32.const 232476) "a") (data (i32.const 232479) "a") (data (i32.const 232482) "a") (data (i32.const 232485) "a") (data (i32.const 232488) "a") (data (i32.const 232491) "a") (data (i32.const 232494) "a") (data (i32.const 232497) "a") (data (i32.const 232500) "a") (data (i32.const 232503) "a") (data (i32.const 232506) "a") (data (i32.const 232509) "a") (data (i32.const 232512) "a") (data (i32.const 232515) "a") (data (i32.const 232518) "a") (data (i32.const 232521) "a") (data (i32.const 232524) "a") (data (i32.const 232527) "a") (data (i32.const 232530) "a") (data (i32.const 232533) "a") (data (i32.const 232536) "a") (data (i32.const 232539) "a") (data (i32.const 232542) "a") (data (i32.const 232545) "a") (data (i32.const 232548) "a") (data (i32.const 232551) "a") (data (i32.const 232554) "a") (data (i32.const 232557) "a") (data (i32.const 232560) "a") (data (i32.const 232563) "a") (data (i32.const 232566) "a") (data (i32.const 232569) "a") (data (i32.const 232572) "a") (data (i32.const 232575) "a") (data (i32.const 232578) "a") (data (i32.const 232581) "a") (data (i32.const 232584) "a") (data (i32.const 232587) "a") (data (i32.const 232590) "a") (data (i32.const 232593) "a") (data (i32.const 232596) "a") (data (i32.const 232599) "a") (data (i32.const 232602) "a") (data (i32.const 232605) "a") (data (i32.const 232608) "a") (data (i32.const 232611) "a") (data (i32.const 232614) "a") (data (i32.const 232617) "a") (data (i32.const 232620) "a") (data (i32.const 232623) "a") (data (i32.const 232626) "a") (data (i32.const 232629) "a") (data (i32.const 232632) "a") (data (i32.const 232635) "a") (data (i32.const 232638) "a") (data (i32.const 232641) "a") (data (i32.const 232644) "a") (data (i32.const 232647) "a") (data (i32.const 232650) "a") (data (i32.const 232653) "a") (data (i32.const 232656) "a") (data (i32.const 232659) "a") (data (i32.const 232662) "a") (data (i32.const 232665) "a") (data (i32.const 232668) "a") (data (i32.const 232671) "a") (data (i32.const 232674) "a") (data (i32.const 232677) "a") (data (i32.const 232680) "a") (data (i32.const 232683) "a") (data (i32.const 232686) "a") (data (i32.const 232689) "a") (data (i32.const 232692) "a") (data (i32.const 232695) "a") (data (i32.const 232698) "a") (data (i32.const 232701) "a") (data (i32.const 232704) "a") (data (i32.const 232707) "a") (data (i32.const 232710) "a") (data (i32.const 232713) "a") (data (i32.const 232716) "a") (data (i32.const 232719) "a") (data (i32.const 232722) "a") (data (i32.const 232725) "a") (data (i32.const 232728) "a") (data (i32.const 232731) "a") (data (i32.const 232734) "a") (data (i32.const 232737) "a") (data (i32.const 232740) "a") (data (i32.const 232743) "a") (data (i32.const 232746) "a") (data (i32.const 232749) "a") (data (i32.const 232752) "a") (data (i32.const 232755) "a") (data (i32.const 232758) "a") (data (i32.const 232761) "a") (data (i32.const 232764) "a") (data (i32.const 232767) "a") (data (i32.const 232770) "a") (data (i32.const 232773) "a") (data (i32.const 232776) "a") (data (i32.const 232779) "a") (data (i32.const 232782) "a") (data (i32.const 232785) "a") (data (i32.const 232788) "a") (data (i32.const 232791) "a") (data (i32.const 232794) "a") (data (i32.const 232797) "a") (data (i32.const 232800) "a") (data (i32.const 232803) "a") (data (i32.const 232806) "a") (data (i32.const 232809) "a") (data (i32.const 232812) "a") (data (i32.const 232815) "a") (data (i32.const 232818) "a") (data (i32.const 232821) "a") (data (i32.const 232824) "a") (data (i32.const 232827) "a") (data (i32.const 232830) "a") (data (i32.const 232833) "a") (data (i32.const 232836) "a") (data (i32.const 232839) "a") (data (i32.const 232842) "a") (data (i32.const 232845) "a") (data (i32.const 232848) "a") (data (i32.const 232851) "a") (data (i32.const 232854) "a") (data (i32.const 232857) "a") (data (i32.const 232860) "a") (data (i32.const 232863) "a") (data (i32.const 232866) "a") (data (i32.const 232869) "a") (data (i32.const 232872) "a") (data (i32.const 232875) "a") (data (i32.const 232878) "a") (data (i32.const 232881) "a") (data (i32.const 232884) "a") (data (i32.const 232887) "a") (data (i32.const 232890) "a") (data (i32.const 232893) "a") (data (i32.const 232896) "a") (data (i32.const 232899) "a") (data (i32.const 232902) "a") (data (i32.const 232905) "a") (data (i32.const 232908) "a") (data (i32.const 232911) "a") (data (i32.const 232914) "a") (data (i32.const 232917) "a") (data (i32.const 232920) "a") (data (i32.const 232923) "a") (data (i32.const 232926) "a") (data (i32.const 232929) "a") (data (i32.const 232932) "a") (data (i32.const 232935) "a") (data (i32.const 232938) "a") (data (i32.const 232941) "a") (data (i32.const 232944) "a") (data (i32.const 232947) "a") (data (i32.const 232950) "a") (data (i32.const 232953) "a") (data (i32.const 232956) "a") (data (i32.const 232959) "a") (data (i32.const 232962) "a") (data (i32.const 232965) "a") (data (i32.const 232968) "a") (data (i32.const 232971) "a") (data (i32.const 232974) "a") (data (i32.const 232977) "a") (data (i32.const 232980) "a") (data (i32.const 232983) "a") (data (i32.const 232986) "a") (data (i32.const 232989) "a") (data (i32.const 232992) "a") (data (i32.const 232995) "a") (data (i32.const 232998) "a") (data (i32.const 233001) "a") (data (i32.const 233004) "a") (data (i32.const 233007) "a") (data (i32.const 233010) "a") (data (i32.const 233013) "a") (data (i32.const 233016) "a") (data (i32.const 233019) "a") (data (i32.const 233022) "a") (data (i32.const 233025) "a") (data (i32.const 233028) "a") (data (i32.const 233031) "a") (data (i32.const 233034) "a") (data (i32.const 233037) "a") (data (i32.const 233040) "a") (data (i32.const 233043) "a") (data (i32.const 233046) "a") (data (i32.const 233049) "a") (data (i32.const 233052) "a") (data (i32.const 233055) "a") (data (i32.const 233058) "a") (data (i32.const 233061) "a") (data (i32.const 233064) "a") (data (i32.const 233067) "a") (data (i32.const 233070) "a") (data (i32.const 233073) "a") (data (i32.const 233076) "a") (data (i32.const 233079) "a") (data (i32.const 233082) "a") (data (i32.const 233085) "a") (data (i32.const 233088) "a") (data (i32.const 233091) "a") (data (i32.const 233094) "a") (data (i32.const 233097) "a") (data (i32.const 233100) "a") (data (i32.const 233103) "a") (data (i32.const 233106) "a") (data (i32.const 233109) "a") (data (i32.const 233112) "a") (data (i32.const 233115) "a") (data (i32.const 233118) "a") (data (i32.const 233121) "a") (data (i32.const 233124) "a") (data (i32.const 233127) "a") (data (i32.const 233130) "a") (data (i32.const 233133) "a") (data (i32.const 233136) "a") (data (i32.const 233139) "a") (data (i32.const 233142) "a") (data (i32.const 233145) "a") (data (i32.const 233148) "a") (data (i32.const 233151) "a") (data (i32.const 233154) "a") (data (i32.const 233157) "a") (data (i32.const 233160) "a") (data (i32.const 233163) "a") (data (i32.const 233166) "a") (data (i32.const 233169) "a") (data (i32.const 233172) "a") (data (i32.const 233175) "a") (data (i32.const 233178) "a") (data (i32.const 233181) "a") (data (i32.const 233184) "a") (data (i32.const 233187) "a") (data (i32.const 233190) "a") (data (i32.const 233193) "a") (data (i32.const 233196) "a") (data (i32.const 233199) "a") (data (i32.const 233202) "a") (data (i32.const 233205) "a") (data (i32.const 233208) "a") (data (i32.const 233211) "a") (data (i32.const 233214) "a") (data (i32.const 233217) "a") (data (i32.const 233220) "a") (data (i32.const 233223) "a") (data (i32.const 233226) "a") (data (i32.const 233229) "a") (data (i32.const 233232) "a") (data (i32.const 233235) "a") (data (i32.const 233238) "a") (data (i32.const 233241) "a") (data (i32.const 233244) "a") (data (i32.const 233247) "a") (data (i32.const 233250) "a") (data (i32.const 233253) "a") (data (i32.const 233256) "a") (data (i32.const 233259) "a") (data (i32.const 233262) "a") (data (i32.const 233265) "a") (data (i32.const 233268) "a") (data (i32.const 233271) "a") (data (i32.const 233274) "a") (data (i32.const 233277) "a") (data (i32.const 233280) "a") (data (i32.const 233283) "a") (data (i32.const 233286) "a") (data (i32.const 233289) "a") (data (i32.const 233292) "a") (data (i32.const 233295) "a") (data (i32.const 233298) "a") (data (i32.const 233301) "a") (data (i32.const 233304) "a") (data (i32.const 233307) "a") (data (i32.const 233310) "a") (data (i32.const 233313) "a") (data (i32.const 233316) "a") (data (i32.const 233319) "a") (data (i32.const 233322) "a") (data (i32.const 233325) "a") (data (i32.const 233328) "a") (data (i32.const 233331) "a") (data (i32.const 233334) "a") (data (i32.const 233337) "a") (data (i32.const 233340) "a") (data (i32.const 233343) "a") (data (i32.const 233346) "a") (data (i32.const 233349) "a") (data (i32.const 233352) "a") (data (i32.const 233355) "a") (data (i32.const 233358) "a") (data (i32.const 233361) "a") (data (i32.const 233364) "a") (data (i32.const 233367) "a") (data (i32.const 233370) "a") (data (i32.const 233373) "a") (data (i32.const 233376) "a") (data (i32.const 233379) "a") (data (i32.const 233382) "a") (data (i32.const 233385) "a") (data (i32.const 233388) "a") (data (i32.const 233391) "a") (data (i32.const 233394) "a") (data (i32.const 233397) "a") (data (i32.const 233400) "a") (data (i32.const 233403) "a") (data (i32.const 233406) "a") (data (i32.const 233409) "a") (data (i32.const 233412) "a") (data (i32.const 233415) "a") (data (i32.const 233418) "a") (data (i32.const 233421) "a") (data (i32.const 233424) "a") (data (i32.const 233427) "a") (data (i32.const 233430) "a") (data (i32.const 233433) "a") (data (i32.const 233436) "a") (data (i32.const 233439) "a") (data (i32.const 233442) "a") (data (i32.const 233445) "a") (data (i32.const 233448) "a") (data (i32.const 233451) "a") (data (i32.const 233454) "a") (data (i32.const 233457) "a") (data (i32.const 233460) "a") (data (i32.const 233463) "a") (data (i32.const 233466) "a") (data (i32.const 233469) "a") (data (i32.const 233472) "a") (data (i32.const 233475) "a") (data (i32.const 233478) "a") (data (i32.const 233481) "a") (data (i32.const 233484) "a") (data (i32.const 233487) "a") (data (i32.const 233490) "a") (data (i32.const 233493) "a") (data (i32.const 233496) "a") (data (i32.const 233499) "a") (data (i32.const 233502) "a") (data (i32.const 233505) "a") (data (i32.const 233508) "a") (data (i32.const 233511) "a") (data (i32.const 233514) "a") (data (i32.const 233517) "a") (data (i32.const 233520) "a") (data (i32.const 233523) "a") (data (i32.const 233526) "a") (data (i32.const 233529) "a") (data (i32.const 233532) "a") (data (i32.const 233535) "a") (data (i32.const 233538) "a") (data (i32.const 233541) "a") (data (i32.const 233544) "a") (data (i32.const 233547) "a") (data (i32.const 233550) "a") (data (i32.const 233553) "a") (data (i32.const 233556) "a") (data (i32.const 233559) "a") (data (i32.const 233562) "a") (data (i32.const 233565) "a") (data (i32.const 233568) "a") (data (i32.const 233571) "a") (data (i32.const 233574) "a") (data (i32.const 233577) "a") (data (i32.const 233580) "a") (data (i32.const 233583) "a") (data (i32.const 233586) "a") (data (i32.const 233589) "a") (data (i32.const 233592) "a") (data (i32.const 233595) "a") (data (i32.const 233598) "a") (data (i32.const 233601) "a") (data (i32.const 233604) "a") (data (i32.const 233607) "a") (data (i32.const 233610) "a") (data (i32.const 233613) "a") (data (i32.const 233616) "a") (data (i32.const 233619) "a") (data (i32.const 233622) "a") (data (i32.const 233625) "a") (data (i32.const 233628) "a") (data (i32.const 233631) "a") (data (i32.const 233634) "a") (data (i32.const 233637) "a") (data (i32.const 233640) "a") (data (i32.const 233643) "a") (data (i32.const 233646) "a") (data (i32.const 233649) "a") (data (i32.const 233652) "a") (data (i32.const 233655) "a") (data (i32.const 233658) "a") (data (i32.const 233661) "a") (data (i32.const 233664) "a") (data (i32.const 233667) "a") (data (i32.const 233670) "a") (data (i32.const 233673) "a") (data (i32.const 233676) "a") (data (i32.const 233679) "a") (data (i32.const 233682) "a") (data (i32.const 233685) "a") (data (i32.const 233688) "a") (data (i32.const 233691) "a") (data (i32.const 233694) "a") (data (i32.const 233697) "a") (data (i32.const 233700) "a") (data (i32.const 233703) "a") (data (i32.const 233706) "a") (data (i32.const 233709) "a") (data (i32.const 233712) "a") (data (i32.const 233715) "a") (data (i32.const 233718) "a") (data (i32.const 233721) "a") (data (i32.const 233724) "a") (data (i32.const 233727) "a") (data (i32.const 233730) "a") (data (i32.const 233733) "a") (data (i32.const 233736) "a") (data (i32.const 233739) "a") (data (i32.const 233742) "a") (data (i32.const 233745) "a") (data (i32.const 233748) "a") (data (i32.const 233751) "a") (data (i32.const 233754) "a") (data (i32.const 233757) "a") (data (i32.const 233760) "a") (data (i32.const 233763) "a") (data (i32.const 233766) "a") (data (i32.const 233769) "a") (data (i32.const 233772) "a") (data (i32.const 233775) "a") (data (i32.const 233778) "a") (data (i32.const 233781) "a") (data (i32.const 233784) "a") (data (i32.const 233787) "a") (data (i32.const 233790) "a") (data (i32.const 233793) "a") (data (i32.const 233796) "a") (data (i32.const 233799) "a") (data (i32.const 233802) "a") (data (i32.const 233805) "a") (data (i32.const 233808) "a") (data (i32.const 233811) "a") (data (i32.const 233814) "a") (data (i32.const 233817) "a") (data (i32.const 233820) "a") (data (i32.const 233823) "a") (data (i32.const 233826) "a") (data (i32.const 233829) "a") (data (i32.const 233832) "a") (data (i32.const 233835) "a") (data (i32.const 233838) "a") (data (i32.const 233841) "a") (data (i32.const 233844) "a") (data (i32.const 233847) "a") (data (i32.const 233850) "a") (data (i32.const 233853) "a") (data (i32.const 233856) "a") (data (i32.const 233859) "a") (data (i32.const 233862) "a") (data (i32.const 233865) "a") (data (i32.const 233868) "a") (data (i32.const 233871) "a") (data (i32.const 233874) "a") (data (i32.const 233877) "a") (data (i32.const 233880) "a") (data (i32.const 233883) "a") (data (i32.const 233886) "a") (data (i32.const 233889) "a") (data (i32.const 233892) "a") (data (i32.const 233895) "a") (data (i32.const 233898) "a") (data (i32.const 233901) "a") (data (i32.const 233904) "a") (data (i32.const 233907) "a") (data (i32.const 233910) "a") (data (i32.const 233913) "a") (data (i32.const 233916) "a") (data (i32.const 233919) "a") (data (i32.const 233922) "a") (data (i32.const 233925) "a") (data (i32.const 233928) "a") (data (i32.const 233931) "a") (data (i32.const 233934) "a") (data (i32.const 233937) "a") (data (i32.const 233940) "a") (data (i32.const 233943) "a") (data (i32.const 233946) "a") (data (i32.const 233949) "a") (data (i32.const 233952) "a") (data (i32.const 233955) "a") (data (i32.const 233958) "a") (data (i32.const 233961) "a") (data (i32.const 233964) "a") (data (i32.const 233967) "a") (data (i32.const 233970) "a") (data (i32.const 233973) "a") (data (i32.const 233976) "a") (data (i32.const 233979) "a") (data (i32.const 233982) "a") (data (i32.const 233985) "a") (data (i32.const 233988) "a") (data (i32.const 233991) "a") (data (i32.const 233994) "a") (data (i32.const 233997) "a") (data (i32.const 234000) "a") (data (i32.const 234003) "a") (data (i32.const 234006) "a") (data (i32.const 234009) "a") (data (i32.const 234012) "a") (data (i32.const 234015) "a") (data (i32.const 234018) "a") (data (i32.const 234021) "a") (data (i32.const 234024) "a") (data (i32.const 234027) "a") (data (i32.const 234030) "a") (data (i32.const 234033) "a") (data (i32.const 234036) "a") (data (i32.const 234039) "a") (data (i32.const 234042) "a") (data (i32.const 234045) "a") (data (i32.const 234048) "a") (data (i32.const 234051) "a") (data (i32.const 234054) "a") (data (i32.const 234057) "a") (data (i32.const 234060) "a") (data (i32.const 234063) "a") (data (i32.const 234066) "a") (data (i32.const 234069) "a") (data (i32.const 234072) "a") (data (i32.const 234075) "a") (data (i32.const 234078) "a") (data (i32.const 234081) "a") (data (i32.const 234084) "a") (data (i32.const 234087) "a") (data (i32.const 234090) "a") (data (i32.const 234093) "a") (data (i32.const 234096) "a") (data (i32.const 234099) "a") (data (i32.const 234102) "a") (data (i32.const 234105) "a") (data (i32.const 234108) "a") (data (i32.const 234111) "a") (data (i32.const 234114) "a") (data (i32.const 234117) "a") (data (i32.const 234120) "a") (data (i32.const 234123) "a") (data (i32.const 234126) "a") (data (i32.const 234129) "a") (data (i32.const 234132) "a") (data (i32.const 234135) "a") (data (i32.const 234138) "a") (data (i32.const 234141) "a") (data (i32.const 234144) "a") (data (i32.const 234147) "a") (data (i32.const 234150) "a") (data (i32.const 234153) "a") (data (i32.const 234156) "a") (data (i32.const 234159) "a") (data (i32.const 234162) "a") (data (i32.const 234165) "a") (data (i32.const 234168) "a") (data (i32.const 234171) "a") (data (i32.const 234174) "a") (data (i32.const 234177) "a") (data (i32.const 234180) "a") (data (i32.const 234183) "a") (data (i32.const 234186) "a") (data (i32.const 234189) "a") (data (i32.const 234192) "a") (data (i32.const 234195) "a") (data (i32.const 234198) "a") (data (i32.const 234201) "a") (data (i32.const 234204) "a") (data (i32.const 234207) "a") (data (i32.const 234210) "a") (data (i32.const 234213) "a") (data (i32.const 234216) "a") (data (i32.const 234219) "a") (data (i32.const 234222) "a") (data (i32.const 234225) "a") (data (i32.const 234228) "a") (data (i32.const 234231) "a") (data (i32.const 234234) "a") (data (i32.const 234237) "a") (data (i32.const 234240) "a") (data (i32.const 234243) "a") (data (i32.const 234246) "a") (data (i32.const 234249) "a") (data (i32.const 234252) "a") (data (i32.const 234255) "a") (data (i32.const 234258) "a") (data (i32.const 234261) "a") (data (i32.const 234264) "a") (data (i32.const 234267) "a") (data (i32.const 234270) "a") (data (i32.const 234273) "a") (data (i32.const 234276) "a") (data (i32.const 234279) "a") (data (i32.const 234282) "a") (data (i32.const 234285) "a") (data (i32.const 234288) "a") (data (i32.const 234291) "a") (data (i32.const 234294) "a") (data (i32.const 234297) "a") (data (i32.const 234300) "a") (data (i32.const 234303) "a") (data (i32.const 234306) "a") (data (i32.const 234309) "a") (data (i32.const 234312) "a") (data (i32.const 234315) "a") (data (i32.const 234318) "a") (data (i32.const 234321) "a") (data (i32.const 234324) "a") (data (i32.const 234327) "a") (data (i32.const 234330) "a") (data (i32.const 234333) "a") (data (i32.const 234336) "a") (data (i32.const 234339) "a") (data (i32.const 234342) "a") (data (i32.const 234345) "a") (data (i32.const 234348) "a") (data (i32.const 234351) "a") (data (i32.const 234354) "a") (data (i32.const 234357) "a") (data (i32.const 234360) "a") (data (i32.const 234363) "a") (data (i32.const 234366) "a") (data (i32.const 234369) "a") (data (i32.const 234372) "a") (data (i32.const 234375) "a") (data (i32.const 234378) "a") (data (i32.const 234381) "a") (data (i32.const 234384) "a") (data (i32.const 234387) "a") (data (i32.const 234390) "a") (data (i32.const 234393) "a") (data (i32.const 234396) "a") (data (i32.const 234399) "a") (data (i32.const 234402) "a") (data (i32.const 234405) "a") (data (i32.const 234408) "a") (data (i32.const 234411) "a") (data (i32.const 234414) "a") (data (i32.const 234417) "a") (data (i32.const 234420) "a") (data (i32.const 234423) "a") (data (i32.const 234426) "a") (data (i32.const 234429) "a") (data (i32.const 234432) "a") (data (i32.const 234435) "a") (data (i32.const 234438) "a") (data (i32.const 234441) "a") (data (i32.const 234444) "a") (data (i32.const 234447) "a") (data (i32.const 234450) "a") (data (i32.const 234453) "a") (data (i32.const 234456) "a") (data (i32.const 234459) "a") (data (i32.const 234462) "a") (data (i32.const 234465) "a") (data (i32.const 234468) "a") (data (i32.const 234471) "a") (data (i32.const 234474) "a") (data (i32.const 234477) "a") (data (i32.const 234480) "a") (data (i32.const 234483) "a") (data (i32.const 234486) "a") (data (i32.const 234489) "a") (data (i32.const 234492) "a") (data (i32.const 234495) "a") (data (i32.const 234498) "a") (data (i32.const 234501) "a") (data (i32.const 234504) "a") (data (i32.const 234507) "a") (data (i32.const 234510) "a") (data (i32.const 234513) "a") (data (i32.const 234516) "a") (data (i32.const 234519) "a") (data (i32.const 234522) "a") (data (i32.const 234525) "a") (data (i32.const 234528) "a") (data (i32.const 234531) "a") (data (i32.const 234534) "a") (data (i32.const 234537) "a") (data (i32.const 234540) "a") (data (i32.const 234543) "a") (data (i32.const 234546) "a") (data (i32.const 234549) "a") (data (i32.const 234552) "a") (data (i32.const 234555) "a") (data (i32.const 234558) "a") (data (i32.const 234561) "a") (data (i32.const 234564) "a") (data (i32.const 234567) "a") (data (i32.const 234570) "a") (data (i32.const 234573) "a") (data (i32.const 234576) "a") (data (i32.const 234579) "a") (data (i32.const 234582) "a") (data (i32.const 234585) "a") (data (i32.const 234588) "a") (data (i32.const 234591) "a") (data (i32.const 234594) "a") (data (i32.const 234597) "a") (data (i32.const 234600) "a") (data (i32.const 234603) "a") (data (i32.const 234606) "a") (data (i32.const 234609) "a") (data (i32.const 234612) "a") (data (i32.const 234615) "a") (data (i32.const 234618) "a") (data (i32.const 234621) "a") (data (i32.const 234624) "a") (data (i32.const 234627) "a") (data (i32.const 234630) "a") (data (i32.const 234633) "a") (data (i32.const 234636) "a") (data (i32.const 234639) "a") (data (i32.const 234642) "a") (data (i32.const 234645) "a") (data (i32.const 234648) "a") (data (i32.const 234651) "a") (data (i32.const 234654) "a") (data (i32.const 234657) "a") (data (i32.const 234660) "a") (data (i32.const 234663) "a") (data (i32.const 234666) "a") (data (i32.const 234669) "a") (data (i32.const 234672) "a") (data (i32.const 234675) "a") (data (i32.const 234678) "a") (data (i32.const 234681) "a") (data (i32.const 234684) "a") (data (i32.const 234687) "a") (data (i32.const 234690) "a") (data (i32.const 234693) "a") (data (i32.const 234696) "a") (data (i32.const 234699) "a") (data (i32.const 234702) "a") (data (i32.const 234705) "a") (data (i32.const 234708) "a") (data (i32.const 234711) "a") (data (i32.const 234714) "a") (data (i32.const 234717) "a") (data (i32.const 234720) "a") (data (i32.const 234723) "a") (data (i32.const 234726) "a") (data (i32.const 234729) "a") (data (i32.const 234732) "a") (data (i32.const 234735) "a") (data (i32.const 234738) "a") (data (i32.const 234741) "a") (data (i32.const 234744) "a") (data (i32.const 234747) "a") (data (i32.const 234750) "a") (data (i32.const 234753) "a") (data (i32.const 234756) "a") (data (i32.const 234759) "a") (data (i32.const 234762) "a") (data (i32.const 234765) "a") (data (i32.const 234768) "a") (data (i32.const 234771) "a") (data (i32.const 234774) "a") (data (i32.const 234777) "a") (data (i32.const 234780) "a") (data (i32.const 234783) "a") (data (i32.const 234786) "a") (data (i32.const 234789) "a") (data (i32.const 234792) "a") (data (i32.const 234795) "a") (data (i32.const 234798) "a") (data (i32.const 234801) "a") (data (i32.const 234804) "a") (data (i32.const 234807) "a") (data (i32.const 234810) "a") (data (i32.const 234813) "a") (data (i32.const 234816) "a") (data (i32.const 234819) "a") (data (i32.const 234822) "a") (data (i32.const 234825) "a") (data (i32.const 234828) "a") (data (i32.const 234831) "a") (data (i32.const 234834) "a") (data (i32.const 234837) "a") (data (i32.const 234840) "a") (data (i32.const 234843) "a") (data (i32.const 234846) "a") (data (i32.const 234849) "a") (data (i32.const 234852) "a") (data (i32.const 234855) "a") (data (i32.const 234858) "a") (data (i32.const 234861) "a") (data (i32.const 234864) "a") (data (i32.const 234867) "a") (data (i32.const 234870) "a") (data (i32.const 234873) "a") (data (i32.const 234876) "a") (data (i32.const 234879) "a") (data (i32.const 234882) "a") (data (i32.const 234885) "a") (data (i32.const 234888) "a") (data (i32.const 234891) "a") (data (i32.const 234894) "a") (data (i32.const 234897) "a") (data (i32.const 234900) "a") (data (i32.const 234903) "a") (data (i32.const 234906) "a") (data (i32.const 234909) "a") (data (i32.const 234912) "a") (data (i32.const 234915) "a") (data (i32.const 234918) "a") (data (i32.const 234921) "a") (data (i32.const 234924) "a") (data (i32.const 234927) "a") (data (i32.const 234930) "a") (data (i32.const 234933) "a") (data (i32.const 234936) "a") (data (i32.const 234939) "a") (data (i32.const 234942) "a") (data (i32.const 234945) "a") (data (i32.const 234948) "a") (data (i32.const 234951) "a") (data (i32.const 234954) "a") (data (i32.const 234957) "a") (data (i32.const 234960) "a") (data (i32.const 234963) "a") (data (i32.const 234966) "a") (data (i32.const 234969) "a") (data (i32.const 234972) "a") (data (i32.const 234975) "a") (data (i32.const 234978) "a") (data (i32.const 234981) "a") (data (i32.const 234984) "a") (data (i32.const 234987) "a") (data (i32.const 234990) "a") (data (i32.const 234993) "a") (data (i32.const 234996) "a") (data (i32.const 234999) "a") (data (i32.const 235002) "a") (data (i32.const 235005) "a") (data (i32.const 235008) "a") (data (i32.const 235011) "a") (data (i32.const 235014) "a") (data (i32.const 235017) "a") (data (i32.const 235020) "a") (data (i32.const 235023) "a") (data (i32.const 235026) "a") (data (i32.const 235029) "a") (data (i32.const 235032) "a") (data (i32.const 235035) "a") (data (i32.const 235038) "a") (data (i32.const 235041) "a") (data (i32.const 235044) "a") (data (i32.const 235047) "a") (data (i32.const 235050) "a") (data (i32.const 235053) "a") (data (i32.const 235056) "a") (data (i32.const 235059) "a") (data (i32.const 235062) "a") (data (i32.const 235065) "a") (data (i32.const 235068) "a") (data (i32.const 235071) "a") (data (i32.const 235074) "a") (data (i32.const 235077) "a") (data (i32.const 235080) "a") (data (i32.const 235083) "a") (data (i32.const 235086) "a") (data (i32.const 235089) "a") (data (i32.const 235092) "a") (data (i32.const 235095) "a") (data (i32.const 235098) "a") (data (i32.const 235101) "a") (data (i32.const 235104) "a") (data (i32.const 235107) "a") (data (i32.const 235110) "a") (data (i32.const 235113) "a") (data (i32.const 235116) "a") (data (i32.const 235119) "a") (data (i32.const 235122) "a") (data (i32.const 235125) "a") (data (i32.const 235128) "a") (data (i32.const 235131) "a") (data (i32.const 235134) "a") (data (i32.const 235137) "a") (data (i32.const 235140) "a") (data (i32.const 235143) "a") (data (i32.const 235146) "a") (data (i32.const 235149) "a") (data (i32.const 235152) "a") (data (i32.const 235155) "a") (data (i32.const 235158) "a") (data (i32.const 235161) "a") (data (i32.const 235164) "a") (data (i32.const 235167) "a") (data (i32.const 235170) "a") (data (i32.const 235173) "a") (data (i32.const 235176) "a") (data (i32.const 235179) "a") (data (i32.const 235182) "a") (data (i32.const 235185) "a") (data (i32.const 235188) "a") (data (i32.const 235191) "a") (data (i32.const 235194) "a") (data (i32.const 235197) "a") (data (i32.const 235200) "a") (data (i32.const 235203) "a") (data (i32.const 235206) "a") (data (i32.const 235209) "a") (data (i32.const 235212) "a") (data (i32.const 235215) "a") (data (i32.const 235218) "a") (data (i32.const 235221) "a") (data (i32.const 235224) "a") (data (i32.const 235227) "a") (data (i32.const 235230) "a") (data (i32.const 235233) "a") (data (i32.const 235236) "a") (data (i32.const 235239) "a") (data (i32.const 235242) "a") (data (i32.const 235245) "a") (data (i32.const 235248) "a") (data (i32.const 235251) "a") (data (i32.const 235254) "a") (data (i32.const 235257) "a") (data (i32.const 235260) "a") (data (i32.const 235263) "a") (data (i32.const 235266) "a") (data (i32.const 235269) "a") (data (i32.const 235272) "a") (data (i32.const 235275) "a") (data (i32.const 235278) "a") (data (i32.const 235281) "a") (data (i32.const 235284) "a") (data (i32.const 235287) "a") (data (i32.const 235290) "a") (data (i32.const 235293) "a") (data (i32.const 235296) "a") (data (i32.const 235299) "a") (data (i32.const 235302) "a") (data (i32.const 235305) "a") (data (i32.const 235308) "a") (data (i32.const 235311) "a") (data (i32.const 235314) "a") (data (i32.const 235317) "a") (data (i32.const 235320) "a") (data (i32.const 235323) "a") (data (i32.const 235326) "a") (data (i32.const 235329) "a") (data (i32.const 235332) "a") (data (i32.const 235335) "a") (data (i32.const 235338) "a") (data (i32.const 235341) "a") (data (i32.const 235344) "a") (data (i32.const 235347) "a") (data (i32.const 235350) "a") (data (i32.const 235353) "a") (data (i32.const 235356) "a") (data (i32.const 235359) "a") (data (i32.const 235362) "a") (data (i32.const 235365) "a") (data (i32.const 235368) "a") (data (i32.const 235371) "a") (data (i32.const 235374) "a") (data (i32.const 235377) "a") (data (i32.const 235380) "a") (data (i32.const 235383) "a") (data (i32.const 235386) "a") (data (i32.const 235389) "a") (data (i32.const 235392) "a") (data (i32.const 235395) "a") (data (i32.const 235398) "a") (data (i32.const 235401) "a") (data (i32.const 235404) "a") (data (i32.const 235407) "a") (data (i32.const 235410) "a") (data (i32.const 235413) "a") (data (i32.const 235416) "a") (data (i32.const 235419) "a") (data (i32.const 235422) "a") (data (i32.const 235425) "a") (data (i32.const 235428) "a") (data (i32.const 235431) "a") (data (i32.const 235434) "a") (data (i32.const 235437) "a") (data (i32.const 235440) "a") (data (i32.const 235443) "a") (data (i32.const 235446) "a") (data (i32.const 235449) "a") (data (i32.const 235452) "a") (data (i32.const 235455) "a") (data (i32.const 235458) "a") (data (i32.const 235461) "a") (data (i32.const 235464) "a") (data (i32.const 235467) "a") (data (i32.const 235470) "a") (data (i32.const 235473) "a") (data (i32.const 235476) "a") (data (i32.const 235479) "a") (data (i32.const 235482) "a") (data (i32.const 235485) "a") (data (i32.const 235488) "a") (data (i32.const 235491) "a") (data (i32.const 235494) "a") (data (i32.const 235497) "a") (data (i32.const 235500) "a") (data (i32.const 235503) "a") (data (i32.const 235506) "a") (data (i32.const 235509) "a") (data (i32.const 235512) "a") (data (i32.const 235515) "a") (data (i32.const 235518) "a") (data (i32.const 235521) "a") (data (i32.const 235524) "a") (data (i32.const 235527) "a") (data (i32.const 235530) "a") (data (i32.const 235533) "a") (data (i32.const 235536) "a") (data (i32.const 235539) "a") (data (i32.const 235542) "a") (data (i32.const 235545) "a") (data (i32.const 235548) "a") (data (i32.const 235551) "a") (data (i32.const 235554) "a") (data (i32.const 235557) "a") (data (i32.const 235560) "a") (data (i32.const 235563) "a") (data (i32.const 235566) "a") (data (i32.const 235569) "a") (data (i32.const 235572) "a") (data (i32.const 235575) "a") (data (i32.const 235578) "a") (data (i32.const 235581) "a") (data (i32.const 235584) "a") (data (i32.const 235587) "a") (data (i32.const 235590) "a") (data (i32.const 235593) "a") (data (i32.const 235596) "a") (data (i32.const 235599) "a") (data (i32.const 235602) "a") (data (i32.const 235605) "a") (data (i32.const 235608) "a") (data (i32.const 235611) "a") (data (i32.const 235614) "a") (data (i32.const 235617) "a") (data (i32.const 235620) "a") (data (i32.const 235623) "a") (data (i32.const 235626) "a") (data (i32.const 235629) "a") (data (i32.const 235632) "a") (data (i32.const 235635) "a") (data (i32.const 235638) "a") (data (i32.const 235641) "a") (data (i32.const 235644) "a") (data (i32.const 235647) "a") (data (i32.const 235650) "a") (data (i32.const 235653) "a") (data (i32.const 235656) "a") (data (i32.const 235659) "a") (data (i32.const 235662) "a") (data (i32.const 235665) "a") (data (i32.const 235668) "a") (data (i32.const 235671) "a") (data (i32.const 235674) "a") (data (i32.const 235677) "a") (data (i32.const 235680) "a") (data (i32.const 235683) "a") (data (i32.const 235686) "a") (data (i32.const 235689) "a") (data (i32.const 235692) "a") (data (i32.const 235695) "a") (data (i32.const 235698) "a") (data (i32.const 235701) "a") (data (i32.const 235704) "a") (data (i32.const 235707) "a") (data (i32.const 235710) "a") (data (i32.const 235713) "a") (data (i32.const 235716) "a") (data (i32.const 235719) "a") (data (i32.const 235722) "a") (data (i32.const 235725) "a") (data (i32.const 235728) "a") (data (i32.const 235731) "a") (data (i32.const 235734) "a") (data (i32.const 235737) "a") (data (i32.const 235740) "a") (data (i32.const 235743) "a") (data (i32.const 235746) "a") (data (i32.const 235749) "a") (data (i32.const 235752) "a") (data (i32.const 235755) "a") (data (i32.const 235758) "a") (data (i32.const 235761) "a") (data (i32.const 235764) "a") (data (i32.const 235767) "a") (data (i32.const 235770) "a") (data (i32.const 235773) "a") (data (i32.const 235776) "a") (data (i32.const 235779) "a") (data (i32.const 235782) "a") (data (i32.const 235785) "a") (data (i32.const 235788) "a") (data (i32.const 235791) "a") (data (i32.const 235794) "a") (data (i32.const 235797) "a") (data (i32.const 235800) "a") (data (i32.const 235803) "a") (data (i32.const 235806) "a") (data (i32.const 235809) "a") (data (i32.const 235812) "a") (data (i32.const 235815) "a") (data (i32.const 235818) "a") (data (i32.const 235821) "a") (data (i32.const 235824) "a") (data (i32.const 235827) "a") (data (i32.const 235830) "a") (data (i32.const 235833) "a") (data (i32.const 235836) "a") (data (i32.const 235839) "a") (data (i32.const 235842) "a") (data (i32.const 235845) "a") (data (i32.const 235848) "a") (data (i32.const 235851) "a") (data (i32.const 235854) "a") (data (i32.const 235857) "a") (data (i32.const 235860) "a") (data (i32.const 235863) "a") (data (i32.const 235866) "a") (data (i32.const 235869) "a") (data (i32.const 235872) "a") (data (i32.const 235875) "a") (data (i32.const 235878) "a") (data (i32.const 235881) "a") (data (i32.const 235884) "a") (data (i32.const 235887) "a") (data (i32.const 235890) "a") (data (i32.const 235893) "a") (data (i32.const 235896) "a") (data (i32.const 235899) "a") (data (i32.const 235902) "a") (data (i32.const 235905) "a") (data (i32.const 235908) "a") (data (i32.const 235911) "a") (data (i32.const 235914) "a") (data (i32.const 235917) "a") (data (i32.const 235920) "a") (data (i32.const 235923) "a") (data (i32.const 235926) "a") (data (i32.const 235929) "a") (data (i32.const 235932) "a") (data (i32.const 235935) "a") (data (i32.const 235938) "a") (data (i32.const 235941) "a") (data (i32.const 235944) "a") (data (i32.const 235947) "a") (data (i32.const 235950) "a") (data (i32.const 235953) "a") (data (i32.const 235956) "a") (data (i32.const 235959) "a") (data (i32.const 235962) "a") (data (i32.const 235965) "a") (data (i32.const 235968) "a") (data (i32.const 235971) "a") (data (i32.const 235974) "a") (data (i32.const 235977) "a") (data (i32.const 235980) "a") (data (i32.const 235983) "a") (data (i32.const 235986) "a") (data (i32.const 235989) "a") (data (i32.const 235992) "a") (data (i32.const 235995) "a") (data (i32.const 235998) "a") (data (i32.const 236001) "a") (data (i32.const 236004) "a") (data (i32.const 236007) "a") (data (i32.const 236010) "a") (data (i32.const 236013) "a") (data (i32.const 236016) "a") (data (i32.const 236019) "a") (data (i32.const 236022) "a") (data (i32.const 236025) "a") (data (i32.const 236028) "a") (data (i32.const 236031) "a") (data (i32.const 236034) "a") (data (i32.const 236037) "a") (data (i32.const 236040) "a") (data (i32.const 236043) "a") (data (i32.const 236046) "a") (data (i32.const 236049) "a") (data (i32.const 236052) "a") (data (i32.const 236055) "a") (data (i32.const 236058) "a") (data (i32.const 236061) "a") (data (i32.const 236064) "a") (data (i32.const 236067) "a") (data (i32.const 236070) "a") (data (i32.const 236073) "a") (data (i32.const 236076) "a") (data (i32.const 236079) "a") (data (i32.const 236082) "a") (data (i32.const 236085) "a") (data (i32.const 236088) "a") (data (i32.const 236091) "a") (data (i32.const 236094) "a") (data (i32.const 236097) "a") (data (i32.const 236100) "a") (data (i32.const 236103) "a") (data (i32.const 236106) "a") (data (i32.const 236109) "a") (data (i32.const 236112) "a") (data (i32.const 236115) "a") (data (i32.const 236118) "a") (data (i32.const 236121) "a") (data (i32.const 236124) "a") (data (i32.const 236127) "a") (data (i32.const 236130) "a") (data (i32.const 236133) "a") (data (i32.const 236136) "a") (data (i32.const 236139) "a") (data (i32.const 236142) "a") (data (i32.const 236145) "a") (data (i32.const 236148) "a") (data (i32.const 236151) "a") (data (i32.const 236154) "a") (data (i32.const 236157) "a") (data (i32.const 236160) "a") (data (i32.const 236163) "a") (data (i32.const 236166) "a") (data (i32.const 236169) "a") (data (i32.const 236172) "a") (data (i32.const 236175) "a") (data (i32.const 236178) "a") (data (i32.const 236181) "a") (data (i32.const 236184) "a") (data (i32.const 236187) "a") (data (i32.const 236190) "a") (data (i32.const 236193) "a") (data (i32.const 236196) "a") (data (i32.const 236199) "a") (data (i32.const 236202) "a") (data (i32.const 236205) "a") (data (i32.const 236208) "a") (data (i32.const 236211) "a") (data (i32.const 236214) "a") (data (i32.const 236217) "a") (data (i32.const 236220) "a") (data (i32.const 236223) "a") (data (i32.const 236226) "a") (data (i32.const 236229) "a") (data (i32.const 236232) "a") (data (i32.const 236235) "a") (data (i32.const 236238) "a") (data (i32.const 236241) "a") (data (i32.const 236244) "a") (data (i32.const 236247) "a") (data (i32.const 236250) "a") (data (i32.const 236253) "a") (data (i32.const 236256) "a") (data (i32.const 236259) "a") (data (i32.const 236262) "a") (data (i32.const 236265) "a") (data (i32.const 236268) "a") (data (i32.const 236271) "a") (data (i32.const 236274) "a") (data (i32.const 236277) "a") (data (i32.const 236280) "a") (data (i32.const 236283) "a") (data (i32.const 236286) "a") (data (i32.const 236289) "a") (data (i32.const 236292) "a") (data (i32.const 236295) "a") (data (i32.const 236298) "a") (data (i32.const 236301) "a") (data (i32.const 236304) "a") (data (i32.const 236307) "a") (data (i32.const 236310) "a") (data (i32.const 236313) "a") (data (i32.const 236316) "a") (data (i32.const 236319) "a") (data (i32.const 236322) "a") (data (i32.const 236325) "a") (data (i32.const 236328) "a") (data (i32.const 236331) "a") (data (i32.const 236334) "a") (data (i32.const 236337) "a") (data (i32.const 236340) "a") (data (i32.const 236343) "a") (data (i32.const 236346) "a") (data (i32.const 236349) "a") (data (i32.const 236352) "a") (data (i32.const 236355) "a") (data (i32.const 236358) "a") (data (i32.const 236361) "a") (data (i32.const 236364) "a") (data (i32.const 236367) "a") (data (i32.const 236370) "a") (data (i32.const 236373) "a") (data (i32.const 236376) "a") (data (i32.const 236379) "a") (data (i32.const 236382) "a") (data (i32.const 236385) "a") (data (i32.const 236388) "a") (data (i32.const 236391) "a") (data (i32.const 236394) "a") (data (i32.const 236397) "a") (data (i32.const 236400) "a") (data (i32.const 236403) "a") (data (i32.const 236406) "a") (data (i32.const 236409) "a") (data (i32.const 236412) "a") (data (i32.const 236415) "a") (data (i32.const 236418) "a") (data (i32.const 236421) "a") (data (i32.const 236424) "a") (data (i32.const 236427) "a") (data (i32.const 236430) "a") (data (i32.const 236433) "a") (data (i32.const 236436) "a") (data (i32.const 236439) "a") (data (i32.const 236442) "a") (data (i32.const 236445) "a") (data (i32.const 236448) "a") (data (i32.const 236451) "a") (data (i32.const 236454) "a") (data (i32.const 236457) "a") (data (i32.const 236460) "a") (data (i32.const 236463) "a") (data (i32.const 236466) "a") (data (i32.const 236469) "a") (data (i32.const 236472) "a") (data (i32.const 236475) "a") (data (i32.const 236478) "a") (data (i32.const 236481) "a") (data (i32.const 236484) "a") (data (i32.const 236487) "a") (data (i32.const 236490) "a") (data (i32.const 236493) "a") (data (i32.const 236496) "a") (data (i32.const 236499) "a") (data (i32.const 236502) "a") (data (i32.const 236505) "a") (data (i32.const 236508) "a") (data (i32.const 236511) "a") (data (i32.const 236514) "a") (data (i32.const 236517) "a") (data (i32.const 236520) "a") (data (i32.const 236523) "a") (data (i32.const 236526) "a") (data (i32.const 236529) "a") (data (i32.const 236532) "a") (data (i32.const 236535) "a") (data (i32.const 236538) "a") (data (i32.const 236541) "a") (data (i32.const 236544) "a") (data (i32.const 236547) "a") (data (i32.const 236550) "a") (data (i32.const 236553) "a") (data (i32.const 236556) "a") (data (i32.const 236559) "a") (data (i32.const 236562) "a") (data (i32.const 236565) "a") (data (i32.const 236568) "a") (data (i32.const 236571) "a") (data (i32.const 236574) "a") (data (i32.const 236577) "a") (data (i32.const 236580) "a") (data (i32.const 236583) "a") (data (i32.const 236586) "a") (data (i32.const 236589) "a") (data (i32.const 236592) "a") (data (i32.const 236595) "a") (data (i32.const 236598) "a") (data (i32.const 236601) "a") (data (i32.const 236604) "a") (data (i32.const 236607) "a") (data (i32.const 236610) "a") (data (i32.const 236613) "a") (data (i32.const 236616) "a") (data (i32.const 236619) "a") (data (i32.const 236622) "a") (data (i32.const 236625) "a") (data (i32.const 236628) "a") (data (i32.const 236631) "a") (data (i32.const 236634) "a") (data (i32.const 236637) "a") (data (i32.const 236640) "a") (data (i32.const 236643) "a") (data (i32.const 236646) "a") (data (i32.const 236649) "a") (data (i32.const 236652) "a") (data (i32.const 236655) "a") (data (i32.const 236658) "a") (data (i32.const 236661) "a") (data (i32.const 236664) "a") (data (i32.const 236667) "a") (data (i32.const 236670) "a") (data (i32.const 236673) "a") (data (i32.const 236676) "a") (data (i32.const 236679) "a") (data (i32.const 236682) "a") (data (i32.const 236685) "a") (data (i32.const 236688) "a") (data (i32.const 236691) "a") (data (i32.const 236694) "a") (data (i32.const 236697) "a") (data (i32.const 236700) "a") (data (i32.const 236703) "a") (data (i32.const 236706) "a") (data (i32.const 236709) "a") (data (i32.const 236712) "a") (data (i32.const 236715) "a") (data (i32.const 236718) "a") (data (i32.const 236721) "a") (data (i32.const 236724) "a") (data (i32.const 236727) "a") (data (i32.const 236730) "a") (data (i32.const 236733) "a") (data (i32.const 236736) "a") (data (i32.const 236739) "a") (data (i32.const 236742) "a") (data (i32.const 236745) "a") (data (i32.const 236748) "a") (data (i32.const 236751) "a") (data (i32.const 236754) "a") (data (i32.const 236757) "a") (data (i32.const 236760) "a") (data (i32.const 236763) "a") (data (i32.const 236766) "a") (data (i32.const 236769) "a") (data (i32.const 236772) "a") (data (i32.const 236775) "a") (data (i32.const 236778) "a") (data (i32.const 236781) "a") (data (i32.const 236784) "a") (data (i32.const 236787) "a") (data (i32.const 236790) "a") (data (i32.const 236793) "a") (data (i32.const 236796) "a") (data (i32.const 236799) "a") (data (i32.const 236802) "a") (data (i32.const 236805) "a") (data (i32.const 236808) "a") (data (i32.const 236811) "a") (data (i32.const 236814) "a") (data (i32.const 236817) "a") (data (i32.const 236820) "a") (data (i32.const 236823) "a") (data (i32.const 236826) "a") (data (i32.const 236829) "a") (data (i32.const 236832) "a") (data (i32.const 236835) "a") (data (i32.const 236838) "a") (data (i32.const 236841) "a") (data (i32.const 236844) "a") (data (i32.const 236847) "a") (data (i32.const 236850) "a") (data (i32.const 236853) "a") (data (i32.const 236856) "a") (data (i32.const 236859) "a") (data (i32.const 236862) "a") (data (i32.const 236865) "a") (data (i32.const 236868) "a") (data (i32.const 236871) "a") (data (i32.const 236874) "a") (data (i32.const 236877) "a") (data (i32.const 236880) "a") (data (i32.const 236883) "a") (data (i32.const 236886) "a") (data (i32.const 236889) "a") (data (i32.const 236892) "a") (data (i32.const 236895) "a") (data (i32.const 236898) "a") (data (i32.const 236901) "a") (data (i32.const 236904) "a") (data (i32.const 236907) "a") (data (i32.const 236910) "a") (data (i32.const 236913) "a") (data (i32.const 236916) "a") (data (i32.const 236919) "a") (data (i32.const 236922) "a") (data (i32.const 236925) "a") (data (i32.const 236928) "a") (data (i32.const 236931) "a") (data (i32.const 236934) "a") (data (i32.const 236937) "a") (data (i32.const 236940) "a") (data (i32.const 236943) "a") (data (i32.const 236946) "a") (data (i32.const 236949) "a") (data (i32.const 236952) "a") (data (i32.const 236955) "a") (data (i32.const 236958) "a") (data (i32.const 236961) "a") (data (i32.const 236964) "a") (data (i32.const 236967) "a") (data (i32.const 236970) "a") (data (i32.const 236973) "a") (data (i32.const 236976) "a") (data (i32.const 236979) "a") (data (i32.const 236982) "a") (data (i32.const 236985) "a") (data (i32.const 236988) "a") (data (i32.const 236991) "a") (data (i32.const 236994) "a") (data (i32.const 236997) "a") (data (i32.const 237000) "a") (data (i32.const 237003) "a") (data (i32.const 237006) "a") (data (i32.const 237009) "a") (data (i32.const 237012) "a") (data (i32.const 237015) "a") (data (i32.const 237018) "a") (data (i32.const 237021) "a") (data (i32.const 237024) "a") (data (i32.const 237027) "a") (data (i32.const 237030) "a") (data (i32.const 237033) "a") (data (i32.const 237036) "a") (data (i32.const 237039) "a") (data (i32.const 237042) "a") (data (i32.const 237045) "a") (data (i32.const 237048) "a") (data (i32.const 237051) "a") (data (i32.const 237054) "a") (data (i32.const 237057) "a") (data (i32.const 237060) "a") (data (i32.const 237063) "a") (data (i32.const 237066) "a") (data (i32.const 237069) "a") (data (i32.const 237072) "a") (data (i32.const 237075) "a") (data (i32.const 237078) "a") (data (i32.const 237081) "a") (data (i32.const 237084) "a") (data (i32.const 237087) "a") (data (i32.const 237090) "a") (data (i32.const 237093) "a") (data (i32.const 237096) "a") (data (i32.const 237099) "a") (data (i32.const 237102) "a") (data (i32.const 237105) "a") (data (i32.const 237108) "a") (data (i32.const 237111) "a") (data (i32.const 237114) "a") (data (i32.const 237117) "a") (data (i32.const 237120) "a") (data (i32.const 237123) "a") (data (i32.const 237126) "a") (data (i32.const 237129) "a") (data (i32.const 237132) "a") (data (i32.const 237135) "a") (data (i32.const 237138) "a") (data (i32.const 237141) "a") (data (i32.const 237144) "a") (data (i32.const 237147) "a") (data (i32.const 237150) "a") (data (i32.const 237153) "a") (data (i32.const 237156) "a") (data (i32.const 237159) "a") (data (i32.const 237162) "a") (data (i32.const 237165) "a") (data (i32.const 237168) "a") (data (i32.const 237171) "a") (data (i32.const 237174) "a") (data (i32.const 237177) "a") (data (i32.const 237180) "a") (data (i32.const 237183) "a") (data (i32.const 237186) "a") (data (i32.const 237189) "a") (data (i32.const 237192) "a") (data (i32.const 237195) "a") (data (i32.const 237198) "a") (data (i32.const 237201) "a") (data (i32.const 237204) "a") (data (i32.const 237207) "a") (data (i32.const 237210) "a") (data (i32.const 237213) "a") (data (i32.const 237216) "a") (data (i32.const 237219) "a") (data (i32.const 237222) "a") (data (i32.const 237225) "a") (data (i32.const 237228) "a") (data (i32.const 237231) "a") (data (i32.const 237234) "a") (data (i32.const 237237) "a") (data (i32.const 237240) "a") (data (i32.const 237243) "a") (data (i32.const 237246) "a") (data (i32.const 237249) "a") (data (i32.const 237252) "a") (data (i32.const 237255) "a") (data (i32.const 237258) "a") (data (i32.const 237261) "a") (data (i32.const 237264) "a") (data (i32.const 237267) "a") (data (i32.const 237270) "a") (data (i32.const 237273) "a") (data (i32.const 237276) "a") (data (i32.const 237279) "a") (data (i32.const 237282) "a") (data (i32.const 237285) "a") (data (i32.const 237288) "a") (data (i32.const 237291) "a") (data (i32.const 237294) "a") (data (i32.const 237297) "a") (data (i32.const 237300) "a") (data (i32.const 237303) "a") (data (i32.const 237306) "a") (data (i32.const 237309) "a") (data (i32.const 237312) "a") (data (i32.const 237315) "a") (data (i32.const 237318) "a") (data (i32.const 237321) "a") (data (i32.const 237324) "a") (data (i32.const 237327) "a") (data (i32.const 237330) "a") (data (i32.const 237333) "a") (data (i32.const 237336) "a") (data (i32.const 237339) "a") (data (i32.const 237342) "a") (data (i32.const 237345) "a") (data (i32.const 237348) "a") (data (i32.const 237351) "a") (data (i32.const 237354) "a") (data (i32.const 237357) "a") (data (i32.const 237360) "a") (data (i32.const 237363) "a") (data (i32.const 237366) "a") (data (i32.const 237369) "a") (data (i32.const 237372) "a") (data (i32.const 237375) "a") (data (i32.const 237378) "a") (data (i32.const 237381) "a") (data (i32.const 237384) "a") (data (i32.const 237387) "a") (data (i32.const 237390) "a") (data (i32.const 237393) "a") (data (i32.const 237396) "a") (data (i32.const 237399) "a") (data (i32.const 237402) "a") (data (i32.const 237405) "a") (data (i32.const 237408) "a") (data (i32.const 237411) "a") (data (i32.const 237414) "a") (data (i32.const 237417) "a") (data (i32.const 237420) "a") (data (i32.const 237423) "a") (data (i32.const 237426) "a") (data (i32.const 237429) "a") (data (i32.const 237432) "a") (data (i32.const 237435) "a") (data (i32.const 237438) "a") (data (i32.const 237441) "a") (data (i32.const 237444) "a") (data (i32.const 237447) "a") (data (i32.const 237450) "a") (data (i32.const 237453) "a") (data (i32.const 237456) "a") (data (i32.const 237459) "a") (data (i32.const 237462) "a") (data (i32.const 237465) "a") (data (i32.const 237468) "a") (data (i32.const 237471) "a") (data (i32.const 237474) "a") (data (i32.const 237477) "a") (data (i32.const 237480) "a") (data (i32.const 237483) "a") (data (i32.const 237486) "a") (data (i32.const 237489) "a") (data (i32.const 237492) "a") (data (i32.const 237495) "a") (data (i32.const 237498) "a") (data (i32.const 237501) "a") (data (i32.const 237504) "a") (data (i32.const 237507) "a") (data (i32.const 237510) "a") (data (i32.const 237513) "a") (data (i32.const 237516) "a") (data (i32.const 237519) "a") (data (i32.const 237522) "a") (data (i32.const 237525) "a") (data (i32.const 237528) "a") (data (i32.const 237531) "a") (data (i32.const 237534) "a") (data (i32.const 237537) "a") (data (i32.const 237540) "a") (data (i32.const 237543) "a") (data (i32.const 237546) "a") (data (i32.const 237549) "a") (data (i32.const 237552) "a") (data (i32.const 237555) "a") (data (i32.const 237558) "a") (data (i32.const 237561) "a") (data (i32.const 237564) "a") (data (i32.const 237567) "a") (data (i32.const 237570) "a") (data (i32.const 237573) "a") (data (i32.const 237576) "a") (data (i32.const 237579) "a") (data (i32.const 237582) "a") (data (i32.const 237585) "a") (data (i32.const 237588) "a") (data (i32.const 237591) "a") (data (i32.const 237594) "a") (data (i32.const 237597) "a") (data (i32.const 237600) "a") (data (i32.const 237603) "a") (data (i32.const 237606) "a") (data (i32.const 237609) "a") (data (i32.const 237612) "a") (data (i32.const 237615) "a") (data (i32.const 237618) "a") (data (i32.const 237621) "a") (data (i32.const 237624) "a") (data (i32.const 237627) "a") (data (i32.const 237630) "a") (data (i32.const 237633) "a") (data (i32.const 237636) "a") (data (i32.const 237639) "a") (data (i32.const 237642) "a") (data (i32.const 237645) "a") (data (i32.const 237648) "a") (data (i32.const 237651) "a") (data (i32.const 237654) "a") (data (i32.const 237657) "a") (data (i32.const 237660) "a") (data (i32.const 237663) "a") (data (i32.const 237666) "a") (data (i32.const 237669) "a") (data (i32.const 237672) "a") (data (i32.const 237675) "a") (data (i32.const 237678) "a") (data (i32.const 237681) "a") (data (i32.const 237684) "a") (data (i32.const 237687) "a") (data (i32.const 237690) "a") (data (i32.const 237693) "a") (data (i32.const 237696) "a") (data (i32.const 237699) "a") (data (i32.const 237702) "a") (data (i32.const 237705) "a") (data (i32.const 237708) "a") (data (i32.const 237711) "a") (data (i32.const 237714) "a") (data (i32.const 237717) "a") (data (i32.const 237720) "a") (data (i32.const 237723) "a") (data (i32.const 237726) "a") (data (i32.const 237729) "a") (data (i32.const 237732) "a") (data (i32.const 237735) "a") (data (i32.const 237738) "a") (data (i32.const 237741) "a") (data (i32.const 237744) "a") (data (i32.const 237747) "a") (data (i32.const 237750) "a") (data (i32.const 237753) "a") (data (i32.const 237756) "a") (data (i32.const 237759) "a") (data (i32.const 237762) "a") (data (i32.const 237765) "a") (data (i32.const 237768) "a") (data (i32.const 237771) "a") (data (i32.const 237774) "a") (data (i32.const 237777) "a") (data (i32.const 237780) "a") (data (i32.const 237783) "a") (data (i32.const 237786) "a") (data (i32.const 237789) "a") (data (i32.const 237792) "a") (data (i32.const 237795) "a") (data (i32.const 237798) "a") (data (i32.const 237801) "a") (data (i32.const 237804) "a") (data (i32.const 237807) "a") (data (i32.const 237810) "a") (data (i32.const 237813) "a") (data (i32.const 237816) "a") (data (i32.const 237819) "a") (data (i32.const 237822) "a") (data (i32.const 237825) "a") (data (i32.const 237828) "a") (data (i32.const 237831) "a") (data (i32.const 237834) "a") (data (i32.const 237837) "a") (data (i32.const 237840) "a") (data (i32.const 237843) "a") (data (i32.const 237846) "a") (data (i32.const 237849) "a") (data (i32.const 237852) "a") (data (i32.const 237855) "a") (data (i32.const 237858) "a") (data (i32.const 237861) "a") (data (i32.const 237864) "a") (data (i32.const 237867) "a") (data (i32.const 237870) "a") (data (i32.const 237873) "a") (data (i32.const 237876) "a") (data (i32.const 237879) "a") (data (i32.const 237882) "a") (data (i32.const 237885) "a") (data (i32.const 237888) "a") (data (i32.const 237891) "a") (data (i32.const 237894) "a") (data (i32.const 237897) "a") (data (i32.const 237900) "a") (data (i32.const 237903) "a") (data (i32.const 237906) "a") (data (i32.const 237909) "a") (data (i32.const 237912) "a") (data (i32.const 237915) "a") (data (i32.const 237918) "a") (data (i32.const 237921) "a") (data (i32.const 237924) "a") (data (i32.const 237927) "a") (data (i32.const 237930) "a") (data (i32.const 237933) "a") (data (i32.const 237936) "a") (data (i32.const 237939) "a") (data (i32.const 237942) "a") (data (i32.const 237945) "a") (data (i32.const 237948) "a") (data (i32.const 237951) "a") (data (i32.const 237954) "a") (data (i32.const 237957) "a") (data (i32.const 237960) "a") (data (i32.const 237963) "a") (data (i32.const 237966) "a") (data (i32.const 237969) "a") (data (i32.const 237972) "a") (data (i32.const 237975) "a") (data (i32.const 237978) "a") (data (i32.const 237981) "a") (data (i32.const 237984) "a") (data (i32.const 237987) "a") (data (i32.const 237990) "a") (data (i32.const 237993) "a") (data (i32.const 237996) "a") (data (i32.const 237999) "a") (data (i32.const 238002) "a") (data (i32.const 238005) "a") (data (i32.const 238008) "a") (data (i32.const 238011) "a") (data (i32.const 238014) "a") (data (i32.const 238017) "a") (data (i32.const 238020) "a") (data (i32.const 238023) "a") (data (i32.const 238026) "a") (data (i32.const 238029) "a") (data (i32.const 238032) "a") (data (i32.const 238035) "a") (data (i32.const 238038) "a") (data (i32.const 238041) "a") (data (i32.const 238044) "a") (data (i32.const 238047) "a") (data (i32.const 238050) "a") (data (i32.const 238053) "a") (data (i32.const 238056) "a") (data (i32.const 238059) "a") (data (i32.const 238062) "a") (data (i32.const 238065) "a") (data (i32.const 238068) "a") (data (i32.const 238071) "a") (data (i32.const 238074) "a") (data (i32.const 238077) "a") (data (i32.const 238080) "a") (data (i32.const 238083) "a") (data (i32.const 238086) "a") (data (i32.const 238089) "a") (data (i32.const 238092) "a") (data (i32.const 238095) "a") (data (i32.const 238098) "a") (data (i32.const 238101) "a") (data (i32.const 238104) "a") (data (i32.const 238107) "a") (data (i32.const 238110) "a") (data (i32.const 238113) "a") (data (i32.const 238116) "a") (data (i32.const 238119) "a") (data (i32.const 238122) "a") (data (i32.const 238125) "a") (data (i32.const 238128) "a") (data (i32.const 238131) "a") (data (i32.const 238134) "a") (data (i32.const 238137) "a") (data (i32.const 238140) "a") (data (i32.const 238143) "a") (data (i32.const 238146) "a") (data (i32.const 238149) "a") (data (i32.const 238152) "a") (data (i32.const 238155) "a") (data (i32.const 238158) "a") (data (i32.const 238161) "a") (data (i32.const 238164) "a") (data (i32.const 238167) "a") (data (i32.const 238170) "a") (data (i32.const 238173) "a") (data (i32.const 238176) "a") (data (i32.const 238179) "a") (data (i32.const 238182) "a") (data (i32.const 238185) "a") (data (i32.const 238188) "a") (data (i32.const 238191) "a") (data (i32.const 238194) "a") (data (i32.const 238197) "a") (data (i32.const 238200) "a") (data (i32.const 238203) "a") (data (i32.const 238206) "a") (data (i32.const 238209) "a") (data (i32.const 238212) "a") (data (i32.const 238215) "a") (data (i32.const 238218) "a") (data (i32.const 238221) "a") (data (i32.const 238224) "a") (data (i32.const 238227) "a") (data (i32.const 238230) "a") (data (i32.const 238233) "a") (data (i32.const 238236) "a") (data (i32.const 238239) "a") (data (i32.const 238242) "a") (data (i32.const 238245) "a") (data (i32.const 238248) "a") (data (i32.const 238251) "a") (data (i32.const 238254) "a") (data (i32.const 238257) "a") (data (i32.const 238260) "a") (data (i32.const 238263) "a") (data (i32.const 238266) "a") (data (i32.const 238269) "a") (data (i32.const 238272) "a") (data (i32.const 238275) "a") (data (i32.const 238278) "a") (data (i32.const 238281) "a") (data (i32.const 238284) "a") (data (i32.const 238287) "a") (data (i32.const 238290) "a") (data (i32.const 238293) "a") (data (i32.const 238296) "a") (data (i32.const 238299) "a") (data (i32.const 238302) "a") (data (i32.const 238305) "a") (data (i32.const 238308) "a") (data (i32.const 238311) "a") (data (i32.const 238314) "a") (data (i32.const 238317) "a") (data (i32.const 238320) "a") (data (i32.const 238323) "a") (data (i32.const 238326) "a") (data (i32.const 238329) "a") (data (i32.const 238332) "a") (data (i32.const 238335) "a") (data (i32.const 238338) "a") (data (i32.const 238341) "a") (data (i32.const 238344) "a") (data (i32.const 238347) "a") (data (i32.const 238350) "a") (data (i32.const 238353) "a") (data (i32.const 238356) "a") (data (i32.const 238359) "a") (data (i32.const 238362) "a") (data (i32.const 238365) "a") (data (i32.const 238368) "a") (data (i32.const 238371) "a") (data (i32.const 238374) "a") (data (i32.const 238377) "a") (data (i32.const 238380) "a") (data (i32.const 238383) "a") (data (i32.const 238386) "a") (data (i32.const 238389) "a") (data (i32.const 238392) "a") (data (i32.const 238395) "a") (data (i32.const 238398) "a") (data (i32.const 238401) "a") (data (i32.const 238404) "a") (data (i32.const 238407) "a") (data (i32.const 238410) "a") (data (i32.const 238413) "a") (data (i32.const 238416) "a") (data (i32.const 238419) "a") (data (i32.const 238422) "a") (data (i32.const 238425) "a") (data (i32.const 238428) "a") (data (i32.const 238431) "a") (data (i32.const 238434) "a") (data (i32.const 238437) "a") (data (i32.const 238440) "a") (data (i32.const 238443) "a") (data (i32.const 238446) "a") (data (i32.const 238449) "a") (data (i32.const 238452) "a") (data (i32.const 238455) "a") (data (i32.const 238458) "a") (data (i32.const 238461) "a") (data (i32.const 238464) "a") (data (i32.const 238467) "a") (data (i32.const 238470) "a") (data (i32.const 238473) "a") (data (i32.const 238476) "a") (data (i32.const 238479) "a") (data (i32.const 238482) "a") (data (i32.const 238485) "a") (data (i32.const 238488) "a") (data (i32.const 238491) "a") (data (i32.const 238494) "a") (data (i32.const 238497) "a") (data (i32.const 238500) "a") (data (i32.const 238503) "a") (data (i32.const 238506) "a") (data (i32.const 238509) "a") (data (i32.const 238512) "a") (data (i32.const 238515) "a") (data (i32.const 238518) "a") (data (i32.const 238521) "a") (data (i32.const 238524) "a") (data (i32.const 238527) "a") (data (i32.const 238530) "a") (data (i32.const 238533) "a") (data (i32.const 238536) "a") (data (i32.const 238539) "a") (data (i32.const 238542) "a") (data (i32.const 238545) "a") (data (i32.const 238548) "a") (data (i32.const 238551) "a") (data (i32.const 238554) "a") (data (i32.const 238557) "a") (data (i32.const 238560) "a") (data (i32.const 238563) "a") (data (i32.const 238566) "a") (data (i32.const 238569) "a") (data (i32.const 238572) "a") (data (i32.const 238575) "a") (data (i32.const 238578) "a") (data (i32.const 238581) "a") (data (i32.const 238584) "a") (data (i32.const 238587) "a") (data (i32.const 238590) "a") (data (i32.const 238593) "a") (data (i32.const 238596) "a") (data (i32.const 238599) "a") (data (i32.const 238602) "a") (data (i32.const 238605) "a") (data (i32.const 238608) "a") (data (i32.const 238611) "a") (data (i32.const 238614) "a") (data (i32.const 238617) "a") (data (i32.const 238620) "a") (data (i32.const 238623) "a") (data (i32.const 238626) "a") (data (i32.const 238629) "a") (data (i32.const 238632) "a") (data (i32.const 238635) "a") (data (i32.const 238638) "a") (data (i32.const 238641) "a") (data (i32.const 238644) "a") (data (i32.const 238647) "a") (data (i32.const 238650) "a") (data (i32.const 238653) "a") (data (i32.const 238656) "a") (data (i32.const 238659) "a") (data (i32.const 238662) "a") (data (i32.const 238665) "a") (data (i32.const 238668) "a") (data (i32.const 238671) "a") (data (i32.const 238674) "a") (data (i32.const 238677) "a") (data (i32.const 238680) "a") (data (i32.const 238683) "a") (data (i32.const 238686) "a") (data (i32.const 238689) "a") (data (i32.const 238692) "a") (data (i32.const 238695) "a") (data (i32.const 238698) "a") (data (i32.const 238701) "a") (data (i32.const 238704) "a") (data (i32.const 238707) "a") (data (i32.const 238710) "a") (data (i32.const 238713) "a") (data (i32.const 238716) "a") (data (i32.const 238719) "a") (data (i32.const 238722) "a") (data (i32.const 238725) "a") (data (i32.const 238728) "a") (data (i32.const 238731) "a") (data (i32.const 238734) "a") (data (i32.const 238737) "a") (data (i32.const 238740) "a") (data (i32.const 238743) "a") (data (i32.const 238746) "a") (data (i32.const 238749) "a") (data (i32.const 238752) "a") (data (i32.const 238755) "a") (data (i32.const 238758) "a") (data (i32.const 238761) "a") (data (i32.const 238764) "a") (data (i32.const 238767) "a") (data (i32.const 238770) "a") (data (i32.const 238773) "a") (data (i32.const 238776) "a") (data (i32.const 238779) "a") (data (i32.const 238782) "a") (data (i32.const 238785) "a") (data (i32.const 238788) "a") (data (i32.const 238791) "a") (data (i32.const 238794) "a") (data (i32.const 238797) "a") (data (i32.const 238800) "a") (data (i32.const 238803) "a") (data (i32.const 238806) "a") (data (i32.const 238809) "a") (data (i32.const 238812) "a") (data (i32.const 238815) "a") (data (i32.const 238818) "a") (data (i32.const 238821) "a") (data (i32.const 238824) "a") (data (i32.const 238827) "a") (data (i32.const 238830) "a") (data (i32.const 238833) "a") (data (i32.const 238836) "a") (data (i32.const 238839) "a") (data (i32.const 238842) "a") (data (i32.const 238845) "a") (data (i32.const 238848) "a") (data (i32.const 238851) "a") (data (i32.const 238854) "a") (data (i32.const 238857) "a") (data (i32.const 238860) "a") (data (i32.const 238863) "a") (data (i32.const 238866) "a") (data (i32.const 238869) "a") (data (i32.const 238872) "a") (data (i32.const 238875) "a") (data (i32.const 238878) "a") (data (i32.const 238881) "a") (data (i32.const 238884) "a") (data (i32.const 238887) "a") (data (i32.const 238890) "a") (data (i32.const 238893) "a") (data (i32.const 238896) "a") (data (i32.const 238899) "a") (data (i32.const 238902) "a") (data (i32.const 238905) "a") (data (i32.const 238908) "a") (data (i32.const 238911) "a") (data (i32.const 238914) "a") (data (i32.const 238917) "a") (data (i32.const 238920) "a") (data (i32.const 238923) "a") (data (i32.const 238926) "a") (data (i32.const 238929) "a") (data (i32.const 238932) "a") (data (i32.const 238935) "a") (data (i32.const 238938) "a") (data (i32.const 238941) "a") (data (i32.const 238944) "a") (data (i32.const 238947) "a") (data (i32.const 238950) "a") (data (i32.const 238953) "a") (data (i32.const 238956) "a") (data (i32.const 238959) "a") (data (i32.const 238962) "a") (data (i32.const 238965) "a") (data (i32.const 238968) "a") (data (i32.const 238971) "a") (data (i32.const 238974) "a") (data (i32.const 238977) "a") (data (i32.const 238980) "a") (data (i32.const 238983) "a") (data (i32.const 238986) "a") (data (i32.const 238989) "a") (data (i32.const 238992) "a") (data (i32.const 238995) "a") (data (i32.const 238998) "a") (data (i32.const 239001) "a") (data (i32.const 239004) "a") (data (i32.const 239007) "a") (data (i32.const 239010) "a") (data (i32.const 239013) "a") (data (i32.const 239016) "a") (data (i32.const 239019) "a") (data (i32.const 239022) "a") (data (i32.const 239025) "a") (data (i32.const 239028) "a") (data (i32.const 239031) "a") (data (i32.const 239034) "a") (data (i32.const 239037) "a") (data (i32.const 239040) "a") (data (i32.const 239043) "a") (data (i32.const 239046) "a") (data (i32.const 239049) "a") (data (i32.const 239052) "a") (data (i32.const 239055) "a") (data (i32.const 239058) "a") (data (i32.const 239061) "a") (data (i32.const 239064) "a") (data (i32.const 239067) "a") (data (i32.const 239070) "a") (data (i32.const 239073) "a") (data (i32.const 239076) "a") (data (i32.const 239079) "a") (data (i32.const 239082) "a") (data (i32.const 239085) "a") (data (i32.const 239088) "a") (data (i32.const 239091) "a") (data (i32.const 239094) "a") (data (i32.const 239097) "a") (data (i32.const 239100) "a") (data (i32.const 239103) "a") (data (i32.const 239106) "a") (data (i32.const 239109) "a") (data (i32.const 239112) "a") (data (i32.const 239115) "a") (data (i32.const 239118) "a") (data (i32.const 239121) "a") (data (i32.const 239124) "a") (data (i32.const 239127) "a") (data (i32.const 239130) "a") (data (i32.const 239133) "a") (data (i32.const 239136) "a") (data (i32.const 239139) "a") (data (i32.const 239142) "a") (data (i32.const 239145) "a") (data (i32.const 239148) "a") (data (i32.const 239151) "a") (data (i32.const 239154) "a") (data (i32.const 239157) "a") (data (i32.const 239160) "a") (data (i32.const 239163) "a") (data (i32.const 239166) "a") (data (i32.const 239169) "a") (data (i32.const 239172) "a") (data (i32.const 239175) "a") (data (i32.const 239178) "a") (data (i32.const 239181) "a") (data (i32.const 239184) "a") (data (i32.const 239187) "a") (data (i32.const 239190) "a") (data (i32.const 239193) "a") (data (i32.const 239196) "a") (data (i32.const 239199) "a") (data (i32.const 239202) "a") (data (i32.const 239205) "a") (data (i32.const 239208) "a") (data (i32.const 239211) "a") (data (i32.const 239214) "a") (data (i32.const 239217) "a") (data (i32.const 239220) "a") (data (i32.const 239223) "a") (data (i32.const 239226) "a") (data (i32.const 239229) "a") (data (i32.const 239232) "a") (data (i32.const 239235) "a") (data (i32.const 239238) "a") (data (i32.const 239241) "a") (data (i32.const 239244) "a") (data (i32.const 239247) "a") (data (i32.const 239250) "a") (data (i32.const 239253) "a") (data (i32.const 239256) "a") (data (i32.const 239259) "a") (data (i32.const 239262) "a") (data (i32.const 239265) "a") (data (i32.const 239268) "a") (data (i32.const 239271) "a") (data (i32.const 239274) "a") (data (i32.const 239277) "a") (data (i32.const 239280) "a") (data (i32.const 239283) "a") (data (i32.const 239286) "a") (data (i32.const 239289) "a") (data (i32.const 239292) "a") (data (i32.const 239295) "a") (data (i32.const 239298) "a") (data (i32.const 239301) "a") (data (i32.const 239304) "a") (data (i32.const 239307) "a") (data (i32.const 239310) "a") (data (i32.const 239313) "a") (data (i32.const 239316) "a") (data (i32.const 239319) "a") (data (i32.const 239322) "a") (data (i32.const 239325) "a") (data (i32.const 239328) "a") (data (i32.const 239331) "a") (data (i32.const 239334) "a") (data (i32.const 239337) "a") (data (i32.const 239340) "a") (data (i32.const 239343) "a") (data (i32.const 239346) "a") (data (i32.const 239349) "a") (data (i32.const 239352) "a") (data (i32.const 239355) "a") (data (i32.const 239358) "a") (data (i32.const 239361) "a") (data (i32.const 239364) "a") (data (i32.const 239367) "a") (data (i32.const 239370) "a") (data (i32.const 239373) "a") (data (i32.const 239376) "a") (data (i32.const 239379) "a") (data (i32.const 239382) "a") (data (i32.const 239385) "a") (data (i32.const 239388) "a") (data (i32.const 239391) "a") (data (i32.const 239394) "a") (data (i32.const 239397) "a") (data (i32.const 239400) "a") (data (i32.const 239403) "a") (data (i32.const 239406) "a") (data (i32.const 239409) "a") (data (i32.const 239412) "a") (data (i32.const 239415) "a") (data (i32.const 239418) "a") (data (i32.const 239421) "a") (data (i32.const 239424) "a") (data (i32.const 239427) "a") (data (i32.const 239430) "a") (data (i32.const 239433) "a") (data (i32.const 239436) "a") (data (i32.const 239439) "a") (data (i32.const 239442) "a") (data (i32.const 239445) "a") (data (i32.const 239448) "a") (data (i32.const 239451) "a") (data (i32.const 239454) "a") (data (i32.const 239457) "a") (data (i32.const 239460) "a") (data (i32.const 239463) "a") (data (i32.const 239466) "a") (data (i32.const 239469) "a") (data (i32.const 239472) "a") (data (i32.const 239475) "a") (data (i32.const 239478) "a") (data (i32.const 239481) "a") (data (i32.const 239484) "a") (data (i32.const 239487) "a") (data (i32.const 239490) "a") (data (i32.const 239493) "a") (data (i32.const 239496) "a") (data (i32.const 239499) "a") (data (i32.const 239502) "a") (data (i32.const 239505) "a") (data (i32.const 239508) "a") (data (i32.const 239511) "a") (data (i32.const 239514) "a") (data (i32.const 239517) "a") (data (i32.const 239520) "a") (data (i32.const 239523) "a") (data (i32.const 239526) "a") (data (i32.const 239529) "a") (data (i32.const 239532) "a") (data (i32.const 239535) "a") (data (i32.const 239538) "a") (data (i32.const 239541) "a") (data (i32.const 239544) "a") (data (i32.const 239547) "a") (data (i32.const 239550) "a") (data (i32.const 239553) "a") (data (i32.const 239556) "a") (data (i32.const 239559) "a") (data (i32.const 239562) "a") (data (i32.const 239565) "a") (data (i32.const 239568) "a") (data (i32.const 239571) "a") (data (i32.const 239574) "a") (data (i32.const 239577) "a") (data (i32.const 239580) "a") (data (i32.const 239583) "a") (data (i32.const 239586) "a") (data (i32.const 239589) "a") (data (i32.const 239592) "a") (data (i32.const 239595) "a") (data (i32.const 239598) "a") (data (i32.const 239601) "a") (data (i32.const 239604) "a") (data (i32.const 239607) "a") (data (i32.const 239610) "a") (data (i32.const 239613) "a") (data (i32.const 239616) "a") (data (i32.const 239619) "a") (data (i32.const 239622) "a") (data (i32.const 239625) "a") (data (i32.const 239628) "a") (data (i32.const 239631) "a") (data (i32.const 239634) "a") (data (i32.const 239637) "a") (data (i32.const 239640) "a") (data (i32.const 239643) "a") (data (i32.const 239646) "a") (data (i32.const 239649) "a") (data (i32.const 239652) "a") (data (i32.const 239655) "a") (data (i32.const 239658) "a") (data (i32.const 239661) "a") (data (i32.const 239664) "a") (data (i32.const 239667) "a") (data (i32.const 239670) "a") (data (i32.const 239673) "a") (data (i32.const 239676) "a") (data (i32.const 239679) "a") (data (i32.const 239682) "a") (data (i32.const 239685) "a") (data (i32.const 239688) "a") (data (i32.const 239691) "a") (data (i32.const 239694) "a") (data (i32.const 239697) "a") (data (i32.const 239700) "a") (data (i32.const 239703) "a") (data (i32.const 239706) "a") (data (i32.const 239709) "a") (data (i32.const 239712) "a") (data (i32.const 239715) "a") (data (i32.const 239718) "a") (data (i32.const 239721) "a") (data (i32.const 239724) "a") (data (i32.const 239727) "a") (data (i32.const 239730) "a") (data (i32.const 239733) "a") (data (i32.const 239736) "a") (data (i32.const 239739) "a") (data (i32.const 239742) "a") (data (i32.const 239745) "a") (data (i32.const 239748) "a") (data (i32.const 239751) "a") (data (i32.const 239754) "a") (data (i32.const 239757) "a") (data (i32.const 239760) "a") (data (i32.const 239763) "a") (data (i32.const 239766) "a") (data (i32.const 239769) "a") (data (i32.const 239772) "a") (data (i32.const 239775) "a") (data (i32.const 239778) "a") (data (i32.const 239781) "a") (data (i32.const 239784) "a") (data (i32.const 239787) "a") (data (i32.const 239790) "a") (data (i32.const 239793) "a") (data (i32.const 239796) "a") (data (i32.const 239799) "a") (data (i32.const 239802) "a") (data (i32.const 239805) "a") (data (i32.const 239808) "a") (data (i32.const 239811) "a") (data (i32.const 239814) "a") (data (i32.const 239817) "a") (data (i32.const 239820) "a") (data (i32.const 239823) "a") (data (i32.const 239826) "a") (data (i32.const 239829) "a") (data (i32.const 239832) "a") (data (i32.const 239835) "a") (data (i32.const 239838) "a") (data (i32.const 239841) "a") (data (i32.const 239844) "a") (data (i32.const 239847) "a") (data (i32.const 239850) "a") (data (i32.const 239853) "a") (data (i32.const 239856) "a") (data (i32.const 239859) "a") (data (i32.const 239862) "a") (data (i32.const 239865) "a") (data (i32.const 239868) "a") (data (i32.const 239871) "a") (data (i32.const 239874) "a") (data (i32.const 239877) "a") (data (i32.const 239880) "a") (data (i32.const 239883) "a") (data (i32.const 239886) "a") (data (i32.const 239889) "a") (data (i32.const 239892) "a") (data (i32.const 239895) "a") (data (i32.const 239898) "a") (data (i32.const 239901) "a") (data (i32.const 239904) "a") (data (i32.const 239907) "a") (data (i32.const 239910) "a") (data (i32.const 239913) "a") (data (i32.const 239916) "a") (data (i32.const 239919) "a") (data (i32.const 239922) "a") (data (i32.const 239925) "a") (data (i32.const 239928) "a") (data (i32.const 239931) "a") (data (i32.const 239934) "a") (data (i32.const 239937) "a") (data (i32.const 239940) "a") (data (i32.const 239943) "a") (data (i32.const 239946) "a") (data (i32.const 239949) "a") (data (i32.const 239952) "a") (data (i32.const 239955) "a") (data (i32.const 239958) "a") (data (i32.const 239961) "a") (data (i32.const 239964) "a") (data (i32.const 239967) "a") (data (i32.const 239970) "a") (data (i32.const 239973) "a") (data (i32.const 239976) "a") (data (i32.const 239979) "a") (data (i32.const 239982) "a") (data (i32.const 239985) "a") (data (i32.const 239988) "a") (data (i32.const 239991) "a") (data (i32.const 239994) "a") (data (i32.const 239997) "a") (data (i32.const 240000) "a") (data (i32.const 240003) "a") (data (i32.const 240006) "a") (data (i32.const 240009) "a") (data (i32.const 240012) "a") (data (i32.const 240015) "a") (data (i32.const 240018) "a") (data (i32.const 240021) "a") (data (i32.const 240024) "a") (data (i32.const 240027) "a") (data (i32.const 240030) "a") (data (i32.const 240033) "a") (data (i32.const 240036) "a") (data (i32.const 240039) "a") (data (i32.const 240042) "a") (data (i32.const 240045) "a") (data (i32.const 240048) "a") (data (i32.const 240051) "a") (data (i32.const 240054) "a") (data (i32.const 240057) "a") (data (i32.const 240060) "a") (data (i32.const 240063) "a") (data (i32.const 240066) "a") (data (i32.const 240069) "a") (data (i32.const 240072) "a") (data (i32.const 240075) "a") (data (i32.const 240078) "a") (data (i32.const 240081) "a") (data (i32.const 240084) "a") (data (i32.const 240087) "a") (data (i32.const 240090) "a") (data (i32.const 240093) "a") (data (i32.const 240096) "a") (data (i32.const 240099) "a") (data (i32.const 240102) "a") (data (i32.const 240105) "a") (data (i32.const 240108) "a") (data (i32.const 240111) "a") (data (i32.const 240114) "a") (data (i32.const 240117) "a") (data (i32.const 240120) "a") (data (i32.const 240123) "a") (data (i32.const 240126) "a") (data (i32.const 240129) "a") (data (i32.const 240132) "a") (data (i32.const 240135) "a") (data (i32.const 240138) "a") (data (i32.const 240141) "a") (data (i32.const 240144) "a") (data (i32.const 240147) "a") (data (i32.const 240150) "a") (data (i32.const 240153) "a") (data (i32.const 240156) "a") (data (i32.const 240159) "a") (data (i32.const 240162) "a") (data (i32.const 240165) "a") (data (i32.const 240168) "a") (data (i32.const 240171) "a") (data (i32.const 240174) "a") (data (i32.const 240177) "a") (data (i32.const 240180) "a") (data (i32.const 240183) "a") (data (i32.const 240186) "a") (data (i32.const 240189) "a") (data (i32.const 240192) "a") (data (i32.const 240195) "a") (data (i32.const 240198) "a") (data (i32.const 240201) "a") (data (i32.const 240204) "a") (data (i32.const 240207) "a") (data (i32.const 240210) "a") (data (i32.const 240213) "a") (data (i32.const 240216) "a") (data (i32.const 240219) "a") (data (i32.const 240222) "a") (data (i32.const 240225) "a") (data (i32.const 240228) "a") (data (i32.const 240231) "a") (data (i32.const 240234) "a") (data (i32.const 240237) "a") (data (i32.const 240240) "a") (data (i32.const 240243) "a") (data (i32.const 240246) "a") (data (i32.const 240249) "a") (data (i32.const 240252) "a") (data (i32.const 240255) "a") (data (i32.const 240258) "a") (data (i32.const 240261) "a") (data (i32.const 240264) "a") (data (i32.const 240267) "a") (data (i32.const 240270) "a") (data (i32.const 240273) "a") (data (i32.const 240276) "a") (data (i32.const 240279) "a") (data (i32.const 240282) "a") (data (i32.const 240285) "a") (data (i32.const 240288) "a") (data (i32.const 240291) "a") (data (i32.const 240294) "a") (data (i32.const 240297) "a") (data (i32.const 240300) "a") (data (i32.const 240303) "a") (data (i32.const 240306) "a") (data (i32.const 240309) "a") (data (i32.const 240312) "a") (data (i32.const 240315) "a") (data (i32.const 240318) "a") (data (i32.const 240321) "a") (data (i32.const 240324) "a") (data (i32.const 240327) "a") (data (i32.const 240330) "a") (data (i32.const 240333) "a") (data (i32.const 240336) "a") (data (i32.const 240339) "a") (data (i32.const 240342) "a") (data (i32.const 240345) "a") (data (i32.const 240348) "a") (data (i32.const 240351) "a") (data (i32.const 240354) "a") (data (i32.const 240357) "a") (data (i32.const 240360) "a") (data (i32.const 240363) "a") (data (i32.const 240366) "a") (data (i32.const 240369) "a") (data (i32.const 240372) "a") (data (i32.const 240375) "a") (data (i32.const 240378) "a") (data (i32.const 240381) "a") (data (i32.const 240384) "a") (data (i32.const 240387) "a") (data (i32.const 240390) "a") (data (i32.const 240393) "a") (data (i32.const 240396) "a") (data (i32.const 240399) "a") (data (i32.const 240402) "a") (data (i32.const 240405) "a") (data (i32.const 240408) "a") (data (i32.const 240411) "a") (data (i32.const 240414) "a") (data (i32.const 240417) "a") (data (i32.const 240420) "a") (data (i32.const 240423) "a") (data (i32.const 240426) "a") (data (i32.const 240429) "a") (data (i32.const 240432) "a") (data (i32.const 240435) "a") (data (i32.const 240438) "a") (data (i32.const 240441) "a") (data (i32.const 240444) "a") (data (i32.const 240447) "a") (data (i32.const 240450) "a") (data (i32.const 240453) "a") (data (i32.const 240456) "a") (data (i32.const 240459) "a") (data (i32.const 240462) "a") (data (i32.const 240465) "a") (data (i32.const 240468) "a") (data (i32.const 240471) "a") (data (i32.const 240474) "a") (data (i32.const 240477) "a") (data (i32.const 240480) "a") (data (i32.const 240483) "a") (data (i32.const 240486) "a") (data (i32.const 240489) "a") (data (i32.const 240492) "a") (data (i32.const 240495) "a") (data (i32.const 240498) "a") (data (i32.const 240501) "a") (data (i32.const 240504) "a") (data (i32.const 240507) "a") (data (i32.const 240510) "a") (data (i32.const 240513) "a") (data (i32.const 240516) "a") (data (i32.const 240519) "a") (data (i32.const 240522) "a") (data (i32.const 240525) "a") (data (i32.const 240528) "a") (data (i32.const 240531) "a") (data (i32.const 240534) "a") (data (i32.const 240537) "a") (data (i32.const 240540) "a") (data (i32.const 240543) "a") (data (i32.const 240546) "a") (data (i32.const 240549) "a") (data (i32.const 240552) "a") (data (i32.const 240555) "a") (data (i32.const 240558) "a") (data (i32.const 240561) "a") (data (i32.const 240564) "a") (data (i32.const 240567) "a") (data (i32.const 240570) "a") (data (i32.const 240573) "a") (data (i32.const 240576) "a") (data (i32.const 240579) "a") (data (i32.const 240582) "a") (data (i32.const 240585) "a") (data (i32.const 240588) "a") (data (i32.const 240591) "a") (data (i32.const 240594) "a") (data (i32.const 240597) "a") (data (i32.const 240600) "a") (data (i32.const 240603) "a") (data (i32.const 240606) "a") (data (i32.const 240609) "a") (data (i32.const 240612) "a") (data (i32.const 240615) "a") (data (i32.const 240618) "a") (data (i32.const 240621) "a") (data (i32.const 240624) "a") (data (i32.const 240627) "a") (data (i32.const 240630) "a") (data (i32.const 240633) "a") (data (i32.const 240636) "a") (data (i32.const 240639) "a") (data (i32.const 240642) "a") (data (i32.const 240645) "a") (data (i32.const 240648) "a") (data (i32.const 240651) "a") (data (i32.const 240654) "a") (data (i32.const 240657) "a") (data (i32.const 240660) "a") (data (i32.const 240663) "a") (data (i32.const 240666) "a") (data (i32.const 240669) "a") (data (i32.const 240672) "a") (data (i32.const 240675) "a") (data (i32.const 240678) "a") (data (i32.const 240681) "a") (data (i32.const 240684) "a") (data (i32.const 240687) "a") (data (i32.const 240690) "a") (data (i32.const 240693) "a") (data (i32.const 240696) "a") (data (i32.const 240699) "a") (data (i32.const 240702) "a") (data (i32.const 240705) "a") (data (i32.const 240708) "a") (data (i32.const 240711) "a") (data (i32.const 240714) "a") (data (i32.const 240717) "a") (data (i32.const 240720) "a") (data (i32.const 240723) "a") (data (i32.const 240726) "a") (data (i32.const 240729) "a") (data (i32.const 240732) "a") (data (i32.const 240735) "a") (data (i32.const 240738) "a") (data (i32.const 240741) "a") (data (i32.const 240744) "a") (data (i32.const 240747) "a") (data (i32.const 240750) "a") (data (i32.const 240753) "a") (data (i32.const 240756) "a") (data (i32.const 240759) "a") (data (i32.const 240762) "a") (data (i32.const 240765) "a") (data (i32.const 240768) "a") (data (i32.const 240771) "a") (data (i32.const 240774) "a") (data (i32.const 240777) "a") (data (i32.const 240780) "a") (data (i32.const 240783) "a") (data (i32.const 240786) "a") (data (i32.const 240789) "a") (data (i32.const 240792) "a") (data (i32.const 240795) "a") (data (i32.const 240798) "a") (data (i32.const 240801) "a") (data (i32.const 240804) "a") (data (i32.const 240807) "a") (data (i32.const 240810) "a") (data (i32.const 240813) "a") (data (i32.const 240816) "a") (data (i32.const 240819) "a") (data (i32.const 240822) "a") (data (i32.const 240825) "a") (data (i32.const 240828) "a") (data (i32.const 240831) "a") (data (i32.const 240834) "a") (data (i32.const 240837) "a") (data (i32.const 240840) "a") (data (i32.const 240843) "a") (data (i32.const 240846) "a") (data (i32.const 240849) "a") (data (i32.const 240852) "a") (data (i32.const 240855) "a") (data (i32.const 240858) "a") (data (i32.const 240861) "a") (data (i32.const 240864) "a") (data (i32.const 240867) "a") (data (i32.const 240870) "a") (data (i32.const 240873) "a") (data (i32.const 240876) "a") (data (i32.const 240879) "a") (data (i32.const 240882) "a") (data (i32.const 240885) "a") (data (i32.const 240888) "a") (data (i32.const 240891) "a") (data (i32.const 240894) "a") (data (i32.const 240897) "a") (data (i32.const 240900) "a") (data (i32.const 240903) "a") (data (i32.const 240906) "a") (data (i32.const 240909) "a") (data (i32.const 240912) "a") (data (i32.const 240915) "a") (data (i32.const 240918) "a") (data (i32.const 240921) "a") (data (i32.const 240924) "a") (data (i32.const 240927) "a") (data (i32.const 240930) "a") (data (i32.const 240933) "a") (data (i32.const 240936) "a") (data (i32.const 240939) "a") (data (i32.const 240942) "a") (data (i32.const 240945) "a") (data (i32.const 240948) "a") (data (i32.const 240951) "a") (data (i32.const 240954) "a") (data (i32.const 240957) "a") (data (i32.const 240960) "a") (data (i32.const 240963) "a") (data (i32.const 240966) "a") (data (i32.const 240969) "a") (data (i32.const 240972) "a") (data (i32.const 240975) "a") (data (i32.const 240978) "a") (data (i32.const 240981) "a") (data (i32.const 240984) "a") (data (i32.const 240987) "a") (data (i32.const 240990) "a") (data (i32.const 240993) "a") (data (i32.const 240996) "a") (data (i32.const 240999) "a") (data (i32.const 241002) "a") (data (i32.const 241005) "a") (data (i32.const 241008) "a") (data (i32.const 241011) "a") (data (i32.const 241014) "a") (data (i32.const 241017) "a") (data (i32.const 241020) "a") (data (i32.const 241023) "a") (data (i32.const 241026) "a") (data (i32.const 241029) "a") (data (i32.const 241032) "a") (data (i32.const 241035) "a") (data (i32.const 241038) "a") (data (i32.const 241041) "a") (data (i32.const 241044) "a") (data (i32.const 241047) "a") (data (i32.const 241050) "a") (data (i32.const 241053) "a") (data (i32.const 241056) "a") (data (i32.const 241059) "a") (data (i32.const 241062) "a") (data (i32.const 241065) "a") (data (i32.const 241068) "a") (data (i32.const 241071) "a") (data (i32.const 241074) "a") (data (i32.const 241077) "a") (data (i32.const 241080) "a") (data (i32.const 241083) "a") (data (i32.const 241086) "a") (data (i32.const 241089) "a") (data (i32.const 241092) "a") (data (i32.const 241095) "a") (data (i32.const 241098) "a") (data (i32.const 241101) "a") (data (i32.const 241104) "a") (data (i32.const 241107) "a") (data (i32.const 241110) "a") (data (i32.const 241113) "a") (data (i32.const 241116) "a") (data (i32.const 241119) "a") (data (i32.const 241122) "a") (data (i32.const 241125) "a") (data (i32.const 241128) "a") (data (i32.const 241131) "a") (data (i32.const 241134) "a") (data (i32.const 241137) "a") (data (i32.const 241140) "a") (data (i32.const 241143) "a") (data (i32.const 241146) "a") (data (i32.const 241149) "a") (data (i32.const 241152) "a") (data (i32.const 241155) "a") (data (i32.const 241158) "a") (data (i32.const 241161) "a") (data (i32.const 241164) "a") (data (i32.const 241167) "a") (data (i32.const 241170) "a") (data (i32.const 241173) "a") (data (i32.const 241176) "a") (data (i32.const 241179) "a") (data (i32.const 241182) "a") (data (i32.const 241185) "a") (data (i32.const 241188) "a") (data (i32.const 241191) "a") (data (i32.const 241194) "a") (data (i32.const 241197) "a") (data (i32.const 241200) "a") (data (i32.const 241203) "a") (data (i32.const 241206) "a") (data (i32.const 241209) "a") (data (i32.const 241212) "a") (data (i32.const 241215) "a") (data (i32.const 241218) "a") (data (i32.const 241221) "a") (data (i32.const 241224) "a") (data (i32.const 241227) "a") (data (i32.const 241230) "a") (data (i32.const 241233) "a") (data (i32.const 241236) "a") (data (i32.const 241239) "a") (data (i32.const 241242) "a") (data (i32.const 241245) "a") (data (i32.const 241248) "a") (data (i32.const 241251) "a") (data (i32.const 241254) "a") (data (i32.const 241257) "a") (data (i32.const 241260) "a") (data (i32.const 241263) "a") (data (i32.const 241266) "a") (data (i32.const 241269) "a") (data (i32.const 241272) "a") (data (i32.const 241275) "a") (data (i32.const 241278) "a") (data (i32.const 241281) "a") (data (i32.const 241284) "a") (data (i32.const 241287) "a") (data (i32.const 241290) "a") (data (i32.const 241293) "a") (data (i32.const 241296) "a") (data (i32.const 241299) "a") (data (i32.const 241302) "a") (data (i32.const 241305) "a") (data (i32.const 241308) "a") (data (i32.const 241311) "a") (data (i32.const 241314) "a") (data (i32.const 241317) "a") (data (i32.const 241320) "a") (data (i32.const 241323) "a") (data (i32.const 241326) "a") (data (i32.const 241329) "a") (data (i32.const 241332) "a") (data (i32.const 241335) "a") (data (i32.const 241338) "a") (data (i32.const 241341) "a") (data (i32.const 241344) "a") (data (i32.const 241347) "a") (data (i32.const 241350) "a") (data (i32.const 241353) "a") (data (i32.const 241356) "a") (data (i32.const 241359) "a") (data (i32.const 241362) "a") (data (i32.const 241365) "a") (data (i32.const 241368) "a") (data (i32.const 241371) "a") (data (i32.const 241374) "a") (data (i32.const 241377) "a") (data (i32.const 241380) "a") (data (i32.const 241383) "a") (data (i32.const 241386) "a") (data (i32.const 241389) "a") (data (i32.const 241392) "a") (data (i32.const 241395) "a") (data (i32.const 241398) "a") (data (i32.const 241401) "a") (data (i32.const 241404) "a") (data (i32.const 241407) "a") (data (i32.const 241410) "a") (data (i32.const 241413) "a") (data (i32.const 241416) "a") (data (i32.const 241419) "a") (data (i32.const 241422) "a") (data (i32.const 241425) "a") (data (i32.const 241428) "a") (data (i32.const 241431) "a") (data (i32.const 241434) "a") (data (i32.const 241437) "a") (data (i32.const 241440) "a") (data (i32.const 241443) "a") (data (i32.const 241446) "a") (data (i32.const 241449) "a") (data (i32.const 241452) "a") (data (i32.const 241455) "a") (data (i32.const 241458) "a") (data (i32.const 241461) "a") (data (i32.const 241464) "a") (data (i32.const 241467) "a") (data (i32.const 241470) "a") (data (i32.const 241473) "a") (data (i32.const 241476) "a") (data (i32.const 241479) "a") (data (i32.const 241482) "a") (data (i32.const 241485) "a") (data (i32.const 241488) "a") (data (i32.const 241491) "a") (data (i32.const 241494) "a") (data (i32.const 241497) "a") (data (i32.const 241500) "a") (data (i32.const 241503) "a") (data (i32.const 241506) "a") (data (i32.const 241509) "a") (data (i32.const 241512) "a") (data (i32.const 241515) "a") (data (i32.const 241518) "a") (data (i32.const 241521) "a") (data (i32.const 241524) "a") (data (i32.const 241527) "a") (data (i32.const 241530) "a") (data (i32.const 241533) "a") (data (i32.const 241536) "a") (data (i32.const 241539) "a") (data (i32.const 241542) "a") (data (i32.const 241545) "a") (data (i32.const 241548) "a") (data (i32.const 241551) "a") (data (i32.const 241554) "a") (data (i32.const 241557) "a") (data (i32.const 241560) "a") (data (i32.const 241563) "a") (data (i32.const 241566) "a") (data (i32.const 241569) "a") (data (i32.const 241572) "a") (data (i32.const 241575) "a") (data (i32.const 241578) "a") (data (i32.const 241581) "a") (data (i32.const 241584) "a") (data (i32.const 241587) "a") (data (i32.const 241590) "a") (data (i32.const 241593) "a") (data (i32.const 241596) "a") (data (i32.const 241599) "a") (data (i32.const 241602) "a") (data (i32.const 241605) "a") (data (i32.const 241608) "a") (data (i32.const 241611) "a") (data (i32.const 241614) "a") (data (i32.const 241617) "a") (data (i32.const 241620) "a") (data (i32.const 241623) "a") (data (i32.const 241626) "a") (data (i32.const 241629) "a") (data (i32.const 241632) "a") (data (i32.const 241635) "a") (data (i32.const 241638) "a") (data (i32.const 241641) "a") (data (i32.const 241644) "a") (data (i32.const 241647) "a") (data (i32.const 241650) "a") (data (i32.const 241653) "a") (data (i32.const 241656) "a") (data (i32.const 241659) "a") (data (i32.const 241662) "a") (data (i32.const 241665) "a") (data (i32.const 241668) "a") (data (i32.const 241671) "a") (data (i32.const 241674) "a") (data (i32.const 241677) "a") (data (i32.const 241680) "a") (data (i32.const 241683) "a") (data (i32.const 241686) "a") (data (i32.const 241689) "a") (data (i32.const 241692) "a") (data (i32.const 241695) "a") (data (i32.const 241698) "a") (data (i32.const 241701) "a") (data (i32.const 241704) "a") (data (i32.const 241707) "a") (data (i32.const 241710) "a") (data (i32.const 241713) "a") (data (i32.const 241716) "a") (data (i32.const 241719) "a") (data (i32.const 241722) "a") (data (i32.const 241725) "a") (data (i32.const 241728) "a") (data (i32.const 241731) "a") (data (i32.const 241734) "a") (data (i32.const 241737) "a") (data (i32.const 241740) "a") (data (i32.const 241743) "a") (data (i32.const 241746) "a") (data (i32.const 241749) "a") (data (i32.const 241752) "a") (data (i32.const 241755) "a") (data (i32.const 241758) "a") (data (i32.const 241761) "a") (data (i32.const 241764) "a") (data (i32.const 241767) "a") (data (i32.const 241770) "a") (data (i32.const 241773) "a") (data (i32.const 241776) "a") (data (i32.const 241779) "a") (data (i32.const 241782) "a") (data (i32.const 241785) "a") (data (i32.const 241788) "a") (data (i32.const 241791) "a") (data (i32.const 241794) "a") (data (i32.const 241797) "a") (data (i32.const 241800) "a") (data (i32.const 241803) "a") (data (i32.const 241806) "a") (data (i32.const 241809) "a") (data (i32.const 241812) "a") (data (i32.const 241815) "a") (data (i32.const 241818) "a") (data (i32.const 241821) "a") (data (i32.const 241824) "a") (data (i32.const 241827) "a") (data (i32.const 241830) "a") (data (i32.const 241833) "a") (data (i32.const 241836) "a") (data (i32.const 241839) "a") (data (i32.const 241842) "a") (data (i32.const 241845) "a") (data (i32.const 241848) "a") (data (i32.const 241851) "a") (data (i32.const 241854) "a") (data (i32.const 241857) "a") (data (i32.const 241860) "a") (data (i32.const 241863) "a") (data (i32.const 241866) "a") (data (i32.const 241869) "a") (data (i32.const 241872) "a") (data (i32.const 241875) "a") (data (i32.const 241878) "a") (data (i32.const 241881) "a") (data (i32.const 241884) "a") (data (i32.const 241887) "a") (data (i32.const 241890) "a") (data (i32.const 241893) "a") (data (i32.const 241896) "a") (data (i32.const 241899) "a") (data (i32.const 241902) "a") (data (i32.const 241905) "a") (data (i32.const 241908) "a") (data (i32.const 241911) "a") (data (i32.const 241914) "a") (data (i32.const 241917) "a") (data (i32.const 241920) "a") (data (i32.const 241923) "a") (data (i32.const 241926) "a") (data (i32.const 241929) "a") (data (i32.const 241932) "a") (data (i32.const 241935) "a") (data (i32.const 241938) "a") (data (i32.const 241941) "a") (data (i32.const 241944) "a") (data (i32.const 241947) "a") (data (i32.const 241950) "a") (data (i32.const 241953) "a") (data (i32.const 241956) "a") (data (i32.const 241959) "a") (data (i32.const 241962) "a") (data (i32.const 241965) "a") (data (i32.const 241968) "a") (data (i32.const 241971) "a") (data (i32.const 241974) "a") (data (i32.const 241977) "a") (data (i32.const 241980) "a") (data (i32.const 241983) "a") (data (i32.const 241986) "a") (data (i32.const 241989) "a") (data (i32.const 241992) "a") (data (i32.const 241995) "a") (data (i32.const 241998) "a") (data (i32.const 242001) "a") (data (i32.const 242004) "a") (data (i32.const 242007) "a") (data (i32.const 242010) "a") (data (i32.const 242013) "a") (data (i32.const 242016) "a") (data (i32.const 242019) "a") (data (i32.const 242022) "a") (data (i32.const 242025) "a") (data (i32.const 242028) "a") (data (i32.const 242031) "a") (data (i32.const 242034) "a") (data (i32.const 242037) "a") (data (i32.const 242040) "a") (data (i32.const 242043) "a") (data (i32.const 242046) "a") (data (i32.const 242049) "a") (data (i32.const 242052) "a") (data (i32.const 242055) "a") (data (i32.const 242058) "a") (data (i32.const 242061) "a") (data (i32.const 242064) "a") (data (i32.const 242067) "a") (data (i32.const 242070) "a") (data (i32.const 242073) "a") (data (i32.const 242076) "a") (data (i32.const 242079) "a") (data (i32.const 242082) "a") (data (i32.const 242085) "a") (data (i32.const 242088) "a") (data (i32.const 242091) "a") (data (i32.const 242094) "a") (data (i32.const 242097) "a") (data (i32.const 242100) "a") (data (i32.const 242103) "a") (data (i32.const 242106) "a") (data (i32.const 242109) "a") (data (i32.const 242112) "a") (data (i32.const 242115) "a") (data (i32.const 242118) "a") (data (i32.const 242121) "a") (data (i32.const 242124) "a") (data (i32.const 242127) "a") (data (i32.const 242130) "a") (data (i32.const 242133) "a") (data (i32.const 242136) "a") (data (i32.const 242139) "a") (data (i32.const 242142) "a") (data (i32.const 242145) "a") (data (i32.const 242148) "a") (data (i32.const 242151) "a") (data (i32.const 242154) "a") (data (i32.const 242157) "a") (data (i32.const 242160) "a") (data (i32.const 242163) "a") (data (i32.const 242166) "a") (data (i32.const 242169) "a") (data (i32.const 242172) "a") (data (i32.const 242175) "a") (data (i32.const 242178) "a") (data (i32.const 242181) "a") (data (i32.const 242184) "a") (data (i32.const 242187) "a") (data (i32.const 242190) "a") (data (i32.const 242193) "a") (data (i32.const 242196) "a") (data (i32.const 242199) "a") (data (i32.const 242202) "a") (data (i32.const 242205) "a") (data (i32.const 242208) "a") (data (i32.const 242211) "a") (data (i32.const 242214) "a") (data (i32.const 242217) "a") (data (i32.const 242220) "a") (data (i32.const 242223) "a") (data (i32.const 242226) "a") (data (i32.const 242229) "a") (data (i32.const 242232) "a") (data (i32.const 242235) "a") (data (i32.const 242238) "a") (data (i32.const 242241) "a") (data (i32.const 242244) "a") (data (i32.const 242247) "a") (data (i32.const 242250) "a") (data (i32.const 242253) "a") (data (i32.const 242256) "a") (data (i32.const 242259) "a") (data (i32.const 242262) "a") (data (i32.const 242265) "a") (data (i32.const 242268) "a") (data (i32.const 242271) "a") (data (i32.const 242274) "a") (data (i32.const 242277) "a") (data (i32.const 242280) "a") (data (i32.const 242283) "a") (data (i32.const 242286) "a") (data (i32.const 242289) "a") (data (i32.const 242292) "a") (data (i32.const 242295) "a") (data (i32.const 242298) "a") (data (i32.const 242301) "a") (data (i32.const 242304) "a") (data (i32.const 242307) "a") (data (i32.const 242310) "a") (data (i32.const 242313) "a") (data (i32.const 242316) "a") (data (i32.const 242319) "a") (data (i32.const 242322) "a") (data (i32.const 242325) "a") (data (i32.const 242328) "a") (data (i32.const 242331) "a") (data (i32.const 242334) "a") (data (i32.const 242337) "a") (data (i32.const 242340) "a") (data (i32.const 242343) "a") (data (i32.const 242346) "a") (data (i32.const 242349) "a") (data (i32.const 242352) "a") (data (i32.const 242355) "a") (data (i32.const 242358) "a") (data (i32.const 242361) "a") (data (i32.const 242364) "a") (data (i32.const 242367) "a") (data (i32.const 242370) "a") (data (i32.const 242373) "a") (data (i32.const 242376) "a") (data (i32.const 242379) "a") (data (i32.const 242382) "a") (data (i32.const 242385) "a") (data (i32.const 242388) "a") (data (i32.const 242391) "a") (data (i32.const 242394) "a") (data (i32.const 242397) "a") (data (i32.const 242400) "a") (data (i32.const 242403) "a") (data (i32.const 242406) "a") (data (i32.const 242409) "a") (data (i32.const 242412) "a") (data (i32.const 242415) "a") (data (i32.const 242418) "a") (data (i32.const 242421) "a") (data (i32.const 242424) "a") (data (i32.const 242427) "a") (data (i32.const 242430) "a") (data (i32.const 242433) "a") (data (i32.const 242436) "a") (data (i32.const 242439) "a") (data (i32.const 242442) "a") (data (i32.const 242445) "a") (data (i32.const 242448) "a") (data (i32.const 242451) "a") (data (i32.const 242454) "a") (data (i32.const 242457) "a") (data (i32.const 242460) "a") (data (i32.const 242463) "a") (data (i32.const 242466) "a") (data (i32.const 242469) "a") (data (i32.const 242472) "a") (data (i32.const 242475) "a") (data (i32.const 242478) "a") (data (i32.const 242481) "a") (data (i32.const 242484) "a") (data (i32.const 242487) "a") (data (i32.const 242490) "a") (data (i32.const 242493) "a") (data (i32.const 242496) "a") (data (i32.const 242499) "a") (data (i32.const 242502) "a") (data (i32.const 242505) "a") (data (i32.const 242508) "a") (data (i32.const 242511) "a") (data (i32.const 242514) "a") (data (i32.const 242517) "a") (data (i32.const 242520) "a") (data (i32.const 242523) "a") (data (i32.const 242526) "a") (data (i32.const 242529) "a") (data (i32.const 242532) "a") (data (i32.const 242535) "a") (data (i32.const 242538) "a") (data (i32.const 242541) "a") (data (i32.const 242544) "a") (data (i32.const 242547) "a") (data (i32.const 242550) "a") (data (i32.const 242553) "a") (data (i32.const 242556) "a") (data (i32.const 242559) "a") (data (i32.const 242562) "a") (data (i32.const 242565) "a") (data (i32.const 242568) "a") (data (i32.const 242571) "a") (data (i32.const 242574) "a") (data (i32.const 242577) "a") (data (i32.const 242580) "a") (data (i32.const 242583) "a") (data (i32.const 242586) "a") (data (i32.const 242589) "a") (data (i32.const 242592) "a") (data (i32.const 242595) "a") (data (i32.const 242598) "a") (data (i32.const 242601) "a") (data (i32.const 242604) "a") (data (i32.const 242607) "a") (data (i32.const 242610) "a") (data (i32.const 242613) "a") (data (i32.const 242616) "a") (data (i32.const 242619) "a") (data (i32.const 242622) "a") (data (i32.const 242625) "a") (data (i32.const 242628) "a") (data (i32.const 242631) "a") (data (i32.const 242634) "a") (data (i32.const 242637) "a") (data (i32.const 242640) "a") (data (i32.const 242643) "a") (data (i32.const 242646) "a") (data (i32.const 242649) "a") (data (i32.const 242652) "a") (data (i32.const 242655) "a") (data (i32.const 242658) "a") (data (i32.const 242661) "a") (data (i32.const 242664) "a") (data (i32.const 242667) "a") (data (i32.const 242670) "a") (data (i32.const 242673) "a") (data (i32.const 242676) "a") (data (i32.const 242679) "a") (data (i32.const 242682) "a") (data (i32.const 242685) "a") (data (i32.const 242688) "a") (data (i32.const 242691) "a") (data (i32.const 242694) "a") (data (i32.const 242697) "a") (data (i32.const 242700) "a") (data (i32.const 242703) "a") (data (i32.const 242706) "a") (data (i32.const 242709) "a") (data (i32.const 242712) "a") (data (i32.const 242715) "a") (data (i32.const 242718) "a") (data (i32.const 242721) "a") (data (i32.const 242724) "a") (data (i32.const 242727) "a") (data (i32.const 242730) "a") (data (i32.const 242733) "a") (data (i32.const 242736) "a") (data (i32.const 242739) "a") (data (i32.const 242742) "a") (data (i32.const 242745) "a") (data (i32.const 242748) "a") (data (i32.const 242751) "a") (data (i32.const 242754) "a") (data (i32.const 242757) "a") (data (i32.const 242760) "a") (data (i32.const 242763) "a") (data (i32.const 242766) "a") (data (i32.const 242769) "a") (data (i32.const 242772) "a") (data (i32.const 242775) "a") (data (i32.const 242778) "a") (data (i32.const 242781) "a") (data (i32.const 242784) "a") (data (i32.const 242787) "a") (data (i32.const 242790) "a") (data (i32.const 242793) "a") (data (i32.const 242796) "a") (data (i32.const 242799) "a") (data (i32.const 242802) "a") (data (i32.const 242805) "a") (data (i32.const 242808) "a") (data (i32.const 242811) "a") (data (i32.const 242814) "a") (data (i32.const 242817) "a") (data (i32.const 242820) "a") (data (i32.const 242823) "a") (data (i32.const 242826) "a") (data (i32.const 242829) "a") (data (i32.const 242832) "a") (data (i32.const 242835) "a") (data (i32.const 242838) "a") (data (i32.const 242841) "a") (data (i32.const 242844) "a") (data (i32.const 242847) "a") (data (i32.const 242850) "a") (data (i32.const 242853) "a") (data (i32.const 242856) "a") (data (i32.const 242859) "a") (data (i32.const 242862) "a") (data (i32.const 242865) "a") (data (i32.const 242868) "a") (data (i32.const 242871) "a") (data (i32.const 242874) "a") (data (i32.const 242877) "a") (data (i32.const 242880) "a") (data (i32.const 242883) "a") (data (i32.const 242886) "a") (data (i32.const 242889) "a") (data (i32.const 242892) "a") (data (i32.const 242895) "a") (data (i32.const 242898) "a") (data (i32.const 242901) "a") (data (i32.const 242904) "a") (data (i32.const 242907) "a") (data (i32.const 242910) "a") (data (i32.const 242913) "a") (data (i32.const 242916) "a") (data (i32.const 242919) "a") (data (i32.const 242922) "a") (data (i32.const 242925) "a") (data (i32.const 242928) "a") (data (i32.const 242931) "a") (data (i32.const 242934) "a") (data (i32.const 242937) "a") (data (i32.const 242940) "a") (data (i32.const 242943) "a") (data (i32.const 242946) "a") (data (i32.const 242949) "a") (data (i32.const 242952) "a") (data (i32.const 242955) "a") (data (i32.const 242958) "a") (data (i32.const 242961) "a") (data (i32.const 242964) "a") (data (i32.const 242967) "a") (data (i32.const 242970) "a") (data (i32.const 242973) "a") (data (i32.const 242976) "a") (data (i32.const 242979) "a") (data (i32.const 242982) "a") (data (i32.const 242985) "a") (data (i32.const 242988) "a") (data (i32.const 242991) "a") (data (i32.const 242994) "a") (data (i32.const 242997) "a") (data (i32.const 243000) "a") (data (i32.const 243003) "a") (data (i32.const 243006) "a") (data (i32.const 243009) "a") (data (i32.const 243012) "a") (data (i32.const 243015) "a") (data (i32.const 243018) "a") (data (i32.const 243021) "a") (data (i32.const 243024) "a") (data (i32.const 243027) "a") (data (i32.const 243030) "a") (data (i32.const 243033) "a") (data (i32.const 243036) "a") (data (i32.const 243039) "a") (data (i32.const 243042) "a") (data (i32.const 243045) "a") (data (i32.const 243048) "a") (data (i32.const 243051) "a") (data (i32.const 243054) "a") (data (i32.const 243057) "a") (data (i32.const 243060) "a") (data (i32.const 243063) "a") (data (i32.const 243066) "a") (data (i32.const 243069) "a") (data (i32.const 243072) "a") (data (i32.const 243075) "a") (data (i32.const 243078) "a") (data (i32.const 243081) "a") (data (i32.const 243084) "a") (data (i32.const 243087) "a") (data (i32.const 243090) "a") (data (i32.const 243093) "a") (data (i32.const 243096) "a") (data (i32.const 243099) "a") (data (i32.const 243102) "a") (data (i32.const 243105) "a") (data (i32.const 243108) "a") (data (i32.const 243111) "a") (data (i32.const 243114) "a") (data (i32.const 243117) "a") (data (i32.const 243120) "a") (data (i32.const 243123) "a") (data (i32.const 243126) "a") (data (i32.const 243129) "a") (data (i32.const 243132) "a") (data (i32.const 243135) "a") (data (i32.const 243138) "a") (data (i32.const 243141) "a") (data (i32.const 243144) "a") (data (i32.const 243147) "a") (data (i32.const 243150) "a") (data (i32.const 243153) "a") (data (i32.const 243156) "a") (data (i32.const 243159) "a") (data (i32.const 243162) "a") (data (i32.const 243165) "a") (data (i32.const 243168) "a") (data (i32.const 243171) "a") (data (i32.const 243174) "a") (data (i32.const 243177) "a") (data (i32.const 243180) "a") (data (i32.const 243183) "a") (data (i32.const 243186) "a") (data (i32.const 243189) "a") (data (i32.const 243192) "a") (data (i32.const 243195) "a") (data (i32.const 243198) "a") (data (i32.const 243201) "a") (data (i32.const 243204) "a") (data (i32.const 243207) "a") (data (i32.const 243210) "a") (data (i32.const 243213) "a") (data (i32.const 243216) "a") (data (i32.const 243219) "a") (data (i32.const 243222) "a") (data (i32.const 243225) "a") (data (i32.const 243228) "a") (data (i32.const 243231) "a") (data (i32.const 243234) "a") (data (i32.const 243237) "a") (data (i32.const 243240) "a") (data (i32.const 243243) "a") (data (i32.const 243246) "a") (data (i32.const 243249) "a") (data (i32.const 243252) "a") (data (i32.const 243255) "a") (data (i32.const 243258) "a") (data (i32.const 243261) "a") (data (i32.const 243264) "a") (data (i32.const 243267) "a") (data (i32.const 243270) "a") (data (i32.const 243273) "a") (data (i32.const 243276) "a") (data (i32.const 243279) "a") (data (i32.const 243282) "a") (data (i32.const 243285) "a") (data (i32.const 243288) "a") (data (i32.const 243291) "a") (data (i32.const 243294) "a") (data (i32.const 243297) "a") (data (i32.const 243300) "a") (data (i32.const 243303) "a") (data (i32.const 243306) "a") (data (i32.const 243309) "a") (data (i32.const 243312) "a") (data (i32.const 243315) "a") (data (i32.const 243318) "a") (data (i32.const 243321) "a") (data (i32.const 243324) "a") (data (i32.const 243327) "a") (data (i32.const 243330) "a") (data (i32.const 243333) "a") (data (i32.const 243336) "a") (data (i32.const 243339) "a") (data (i32.const 243342) "a") (data (i32.const 243345) "a") (data (i32.const 243348) "a") (data (i32.const 243351) "a") (data (i32.const 243354) "a") (data (i32.const 243357) "a") (data (i32.const 243360) "a") (data (i32.const 243363) "a") (data (i32.const 243366) "a") (data (i32.const 243369) "a") (data (i32.const 243372) "a") (data (i32.const 243375) "a") (data (i32.const 243378) "a") (data (i32.const 243381) "a") (data (i32.const 243384) "a") (data (i32.const 243387) "a") (data (i32.const 243390) "a") (data (i32.const 243393) "a") (data (i32.const 243396) "a") (data (i32.const 243399) "a") (data (i32.const 243402) "a") (data (i32.const 243405) "a") (data (i32.const 243408) "a") (data (i32.const 243411) "a") (data (i32.const 243414) "a") (data (i32.const 243417) "a") (data (i32.const 243420) "a") (data (i32.const 243423) "a") (data (i32.const 243426) "a") (data (i32.const 243429) "a") (data (i32.const 243432) "a") (data (i32.const 243435) "a") (data (i32.const 243438) "a") (data (i32.const 243441) "a") (data (i32.const 243444) "a") (data (i32.const 243447) "a") (data (i32.const 243450) "a") (data (i32.const 243453) "a") (data (i32.const 243456) "a") (data (i32.const 243459) "a") (data (i32.const 243462) "a") (data (i32.const 243465) "a") (data (i32.const 243468) "a") (data (i32.const 243471) "a") (data (i32.const 243474) "a") (data (i32.const 243477) "a") (data (i32.const 243480) "a") (data (i32.const 243483) "a") (data (i32.const 243486) "a") (data (i32.const 243489) "a") (data (i32.const 243492) "a") (data (i32.const 243495) "a") (data (i32.const 243498) "a") (data (i32.const 243501) "a") (data (i32.const 243504) "a") (data (i32.const 243507) "a") (data (i32.const 243510) "a") (data (i32.const 243513) "a") (data (i32.const 243516) "a") (data (i32.const 243519) "a") (data (i32.const 243522) "a") (data (i32.const 243525) "a") (data (i32.const 243528) "a") (data (i32.const 243531) "a") (data (i32.const 243534) "a") (data (i32.const 243537) "a") (data (i32.const 243540) "a") (data (i32.const 243543) "a") (data (i32.const 243546) "a") (data (i32.const 243549) "a") (data (i32.const 243552) "a") (data (i32.const 243555) "a") (data (i32.const 243558) "a") (data (i32.const 243561) "a") (data (i32.const 243564) "a") (data (i32.const 243567) "a") (data (i32.const 243570) "a") (data (i32.const 243573) "a") (data (i32.const 243576) "a") (data (i32.const 243579) "a") (data (i32.const 243582) "a") (data (i32.const 243585) "a") (data (i32.const 243588) "a") (data (i32.const 243591) "a") (data (i32.const 243594) "a") (data (i32.const 243597) "a") (data (i32.const 243600) "a") (data (i32.const 243603) "a") (data (i32.const 243606) "a") (data (i32.const 243609) "a") (data (i32.const 243612) "a") (data (i32.const 243615) "a") (data (i32.const 243618) "a") (data (i32.const 243621) "a") (data (i32.const 243624) "a") (data (i32.const 243627) "a") (data (i32.const 243630) "a") (data (i32.const 243633) "a") (data (i32.const 243636) "a") (data (i32.const 243639) "a") (data (i32.const 243642) "a") (data (i32.const 243645) "a") (data (i32.const 243648) "a") (data (i32.const 243651) "a") (data (i32.const 243654) "a") (data (i32.const 243657) "a") (data (i32.const 243660) "a") (data (i32.const 243663) "a") (data (i32.const 243666) "a") (data (i32.const 243669) "a") (data (i32.const 243672) "a") (data (i32.const 243675) "a") (data (i32.const 243678) "a") (data (i32.const 243681) "a") (data (i32.const 243684) "a") (data (i32.const 243687) "a") (data (i32.const 243690) "a") (data (i32.const 243693) "a") (data (i32.const 243696) "a") (data (i32.const 243699) "a") (data (i32.const 243702) "a") (data (i32.const 243705) "a") (data (i32.const 243708) "a") (data (i32.const 243711) "a") (data (i32.const 243714) "a") (data (i32.const 243717) "a") (data (i32.const 243720) "a") (data (i32.const 243723) "a") (data (i32.const 243726) "a") (data (i32.const 243729) "a") (data (i32.const 243732) "a") (data (i32.const 243735) "a") (data (i32.const 243738) "a") (data (i32.const 243741) "a") (data (i32.const 243744) "a") (data (i32.const 243747) "a") (data (i32.const 243750) "a") (data (i32.const 243753) "a") (data (i32.const 243756) "a") (data (i32.const 243759) "a") (data (i32.const 243762) "a") (data (i32.const 243765) "a") (data (i32.const 243768) "a") (data (i32.const 243771) "a") (data (i32.const 243774) "a") (data (i32.const 243777) "a") (data (i32.const 243780) "a") (data (i32.const 243783) "a") (data (i32.const 243786) "a") (data (i32.const 243789) "a") (data (i32.const 243792) "a") (data (i32.const 243795) "a") (data (i32.const 243798) "a") (data (i32.const 243801) "a") (data (i32.const 243804) "a") (data (i32.const 243807) "a") (data (i32.const 243810) "a") (data (i32.const 243813) "a") (data (i32.const 243816) "a") (data (i32.const 243819) "a") (data (i32.const 243822) "a") (data (i32.const 243825) "a") (data (i32.const 243828) "a") (data (i32.const 243831) "a") (data (i32.const 243834) "a") (data (i32.const 243837) "a") (data (i32.const 243840) "a") (data (i32.const 243843) "a") (data (i32.const 243846) "a") (data (i32.const 243849) "a") (data (i32.const 243852) "a") (data (i32.const 243855) "a") (data (i32.const 243858) "a") (data (i32.const 243861) "a") (data (i32.const 243864) "a") (data (i32.const 243867) "a") (data (i32.const 243870) "a") (data (i32.const 243873) "a") (data (i32.const 243876) "a") (data (i32.const 243879) "a") (data (i32.const 243882) "a") (data (i32.const 243885) "a") (data (i32.const 243888) "a") (data (i32.const 243891) "a") (data (i32.const 243894) "a") (data (i32.const 243897) "a") (data (i32.const 243900) "a") (data (i32.const 243903) "a") (data (i32.const 243906) "a") (data (i32.const 243909) "a") (data (i32.const 243912) "a") (data (i32.const 243915) "a") (data (i32.const 243918) "a") (data (i32.const 243921) "a") (data (i32.const 243924) "a") (data (i32.const 243927) "a") (data (i32.const 243930) "a") (data (i32.const 243933) "a") (data (i32.const 243936) "a") (data (i32.const 243939) "a") (data (i32.const 243942) "a") (data (i32.const 243945) "a") (data (i32.const 243948) "a") (data (i32.const 243951) "a") (data (i32.const 243954) "a") (data (i32.const 243957) "a") (data (i32.const 243960) "a") (data (i32.const 243963) "a") (data (i32.const 243966) "a") (data (i32.const 243969) "a") (data (i32.const 243972) "a") (data (i32.const 243975) "a") (data (i32.const 243978) "a") (data (i32.const 243981) "a") (data (i32.const 243984) "a") (data (i32.const 243987) "a") (data (i32.const 243990) "a") (data (i32.const 243993) "a") (data (i32.const 243996) "a") (data (i32.const 243999) "a") (data (i32.const 244002) "a") (data (i32.const 244005) "a") (data (i32.const 244008) "a") (data (i32.const 244011) "a") (data (i32.const 244014) "a") (data (i32.const 244017) "a") (data (i32.const 244020) "a") (data (i32.const 244023) "a") (data (i32.const 244026) "a") (data (i32.const 244029) "a") (data (i32.const 244032) "a") (data (i32.const 244035) "a") (data (i32.const 244038) "a") (data (i32.const 244041) "a") (data (i32.const 244044) "a") (data (i32.const 244047) "a") (data (i32.const 244050) "a") (data (i32.const 244053) "a") (data (i32.const 244056) "a") (data (i32.const 244059) "a") (data (i32.const 244062) "a") (data (i32.const 244065) "a") (data (i32.const 244068) "a") (data (i32.const 244071) "a") (data (i32.const 244074) "a") (data (i32.const 244077) "a") (data (i32.const 244080) "a") (data (i32.const 244083) "a") (data (i32.const 244086) "a") (data (i32.const 244089) "a") (data (i32.const 244092) "a") (data (i32.const 244095) "a") (data (i32.const 244098) "a") (data (i32.const 244101) "a") (data (i32.const 244104) "a") (data (i32.const 244107) "a") (data (i32.const 244110) "a") (data (i32.const 244113) "a") (data (i32.const 244116) "a") (data (i32.const 244119) "a") (data (i32.const 244122) "a") (data (i32.const 244125) "a") (data (i32.const 244128) "a") (data (i32.const 244131) "a") (data (i32.const 244134) "a") (data (i32.const 244137) "a") (data (i32.const 244140) "a") (data (i32.const 244143) "a") (data (i32.const 244146) "a") (data (i32.const 244149) "a") (data (i32.const 244152) "a") (data (i32.const 244155) "a") (data (i32.const 244158) "a") (data (i32.const 244161) "a") (data (i32.const 244164) "a") (data (i32.const 244167) "a") (data (i32.const 244170) "a") (data (i32.const 244173) "a") (data (i32.const 244176) "a") (data (i32.const 244179) "a") (data (i32.const 244182) "a") (data (i32.const 244185) "a") (data (i32.const 244188) "a") (data (i32.const 244191) "a") (data (i32.const 244194) "a") (data (i32.const 244197) "a") (data (i32.const 244200) "a") (data (i32.const 244203) "a") (data (i32.const 244206) "a") (data (i32.const 244209) "a") (data (i32.const 244212) "a") (data (i32.const 244215) "a") (data (i32.const 244218) "a") (data (i32.const 244221) "a") (data (i32.const 244224) "a") (data (i32.const 244227) "a") (data (i32.const 244230) "a") (data (i32.const 244233) "a") (data (i32.const 244236) "a") (data (i32.const 244239) "a") (data (i32.const 244242) "a") (data (i32.const 244245) "a") (data (i32.const 244248) "a") (data (i32.const 244251) "a") (data (i32.const 244254) "a") (data (i32.const 244257) "a") (data (i32.const 244260) "a") (data (i32.const 244263) "a") (data (i32.const 244266) "a") (data (i32.const 244269) "a") (data (i32.const 244272) "a") (data (i32.const 244275) "a") (data (i32.const 244278) "a") (data (i32.const 244281) "a") (data (i32.const 244284) "a") (data (i32.const 244287) "a") (data (i32.const 244290) "a") (data (i32.const 244293) "a") (data (i32.const 244296) "a") (data (i32.const 244299) "a") (data (i32.const 244302) "a") (data (i32.const 244305) "a") (data (i32.const 244308) "a") (data (i32.const 244311) "a") (data (i32.const 244314) "a") (data (i32.const 244317) "a") (data (i32.const 244320) "a") (data (i32.const 244323) "a") (data (i32.const 244326) "a") (data (i32.const 244329) "a") (data (i32.const 244332) "a") (data (i32.const 244335) "a") (data (i32.const 244338) "a") (data (i32.const 244341) "a") (data (i32.const 244344) "a") (data (i32.const 244347) "a") (data (i32.const 244350) "a") (data (i32.const 244353) "a") (data (i32.const 244356) "a") (data (i32.const 244359) "a") (data (i32.const 244362) "a") (data (i32.const 244365) "a") (data (i32.const 244368) "a") (data (i32.const 244371) "a") (data (i32.const 244374) "a") (data (i32.const 244377) "a") (data (i32.const 244380) "a") (data (i32.const 244383) "a") (data (i32.const 244386) "a") (data (i32.const 244389) "a") (data (i32.const 244392) "a") (data (i32.const 244395) "a") (data (i32.const 244398) "a") (data (i32.const 244401) "a") (data (i32.const 244404) "a") (data (i32.const 244407) "a") (data (i32.const 244410) "a") (data (i32.const 244413) "a") (data (i32.const 244416) "a") (data (i32.const 244419) "a") (data (i32.const 244422) "a") (data (i32.const 244425) "a") (data (i32.const 244428) "a") (data (i32.const 244431) "a") (data (i32.const 244434) "a") (data (i32.const 244437) "a") (data (i32.const 244440) "a") (data (i32.const 244443) "a") (data (i32.const 244446) "a") (data (i32.const 244449) "a") (data (i32.const 244452) "a") (data (i32.const 244455) "a") (data (i32.const 244458) "a") (data (i32.const 244461) "a") (data (i32.const 244464) "a") (data (i32.const 244467) "a") (data (i32.const 244470) "a") (data (i32.const 244473) "a") (data (i32.const 244476) "a") (data (i32.const 244479) "a") (data (i32.const 244482) "a") (data (i32.const 244485) "a") (data (i32.const 244488) "a") (data (i32.const 244491) "a") (data (i32.const 244494) "a") (data (i32.const 244497) "a") (data (i32.const 244500) "a") (data (i32.const 244503) "a") (data (i32.const 244506) "a") (data (i32.const 244509) "a") (data (i32.const 244512) "a") (data (i32.const 244515) "a") (data (i32.const 244518) "a") (data (i32.const 244521) "a") (data (i32.const 244524) "a") (data (i32.const 244527) "a") (data (i32.const 244530) "a") (data (i32.const 244533) "a") (data (i32.const 244536) "a") (data (i32.const 244539) "a") (data (i32.const 244542) "a") (data (i32.const 244545) "a") (data (i32.const 244548) "a") (data (i32.const 244551) "a") (data (i32.const 244554) "a") (data (i32.const 244557) "a") (data (i32.const 244560) "a") (data (i32.const 244563) "a") (data (i32.const 244566) "a") (data (i32.const 244569) "a") (data (i32.const 244572) "a") (data (i32.const 244575) "a") (data (i32.const 244578) "a") (data (i32.const 244581) "a") (data (i32.const 244584) "a") (data (i32.const 244587) "a") (data (i32.const 244590) "a") (data (i32.const 244593) "a") (data (i32.const 244596) "a") (data (i32.const 244599) "a") (data (i32.const 244602) "a") (data (i32.const 244605) "a") (data (i32.const 244608) "a") (data (i32.const 244611) "a") (data (i32.const 244614) "a") (data (i32.const 244617) "a") (data (i32.const 244620) "a") (data (i32.const 244623) "a") (data (i32.const 244626) "a") (data (i32.const 244629) "a") (data (i32.const 244632) "a") (data (i32.const 244635) "a") (data (i32.const 244638) "a") (data (i32.const 244641) "a") (data (i32.const 244644) "a") (data (i32.const 244647) "a") (data (i32.const 244650) "a") (data (i32.const 244653) "a") (data (i32.const 244656) "a") (data (i32.const 244659) "a") (data (i32.const 244662) "a") (data (i32.const 244665) "a") (data (i32.const 244668) "a") (data (i32.const 244671) "a") (data (i32.const 244674) "a") (data (i32.const 244677) "a") (data (i32.const 244680) "a") (data (i32.const 244683) "a") (data (i32.const 244686) "a") (data (i32.const 244689) "a") (data (i32.const 244692) "a") (data (i32.const 244695) "a") (data (i32.const 244698) "a") (data (i32.const 244701) "a") (data (i32.const 244704) "a") (data (i32.const 244707) "a") (data (i32.const 244710) "a") (data (i32.const 244713) "a") (data (i32.const 244716) "a") (data (i32.const 244719) "a") (data (i32.const 244722) "a") (data (i32.const 244725) "a") (data (i32.const 244728) "a") (data (i32.const 244731) "a") (data (i32.const 244734) "a") (data (i32.const 244737) "a") (data (i32.const 244740) "a") (data (i32.const 244743) "a") (data (i32.const 244746) "a") (data (i32.const 244749) "a") (data (i32.const 244752) "a") (data (i32.const 244755) "a") (data (i32.const 244758) "a") (data (i32.const 244761) "a") (data (i32.const 244764) "a") (data (i32.const 244767) "a") (data (i32.const 244770) "a") (data (i32.const 244773) "a") (data (i32.const 244776) "a") (data (i32.const 244779) "a") (data (i32.const 244782) "a") (data (i32.const 244785) "a") (data (i32.const 244788) "a") (data (i32.const 244791) "a") (data (i32.const 244794) "a") (data (i32.const 244797) "a") (data (i32.const 244800) "a") (data (i32.const 244803) "a") (data (i32.const 244806) "a") (data (i32.const 244809) "a") (data (i32.const 244812) "a") (data (i32.const 244815) "a") (data (i32.const 244818) "a") (data (i32.const 244821) "a") (data (i32.const 244824) "a") (data (i32.const 244827) "a") (data (i32.const 244830) "a") (data (i32.const 244833) "a") (data (i32.const 244836) "a") (data (i32.const 244839) "a") (data (i32.const 244842) "a") (data (i32.const 244845) "a") (data (i32.const 244848) "a") (data (i32.const 244851) "a") (data (i32.const 244854) "a") (data (i32.const 244857) "a") (data (i32.const 244860) "a") (data (i32.const 244863) "a") (data (i32.const 244866) "a") (data (i32.const 244869) "a") (data (i32.const 244872) "a") (data (i32.const 244875) "a") (data (i32.const 244878) "a") (data (i32.const 244881) "a") (data (i32.const 244884) "a") (data (i32.const 244887) "a") (data (i32.const 244890) "a") (data (i32.const 244893) "a") (data (i32.const 244896) "a") (data (i32.const 244899) "a") (data (i32.const 244902) "a") (data (i32.const 244905) "a") (data (i32.const 244908) "a") (data (i32.const 244911) "a") (data (i32.const 244914) "a") (data (i32.const 244917) "a") (data (i32.const 244920) "a") (data (i32.const 244923) "a") (data (i32.const 244926) "a") (data (i32.const 244929) "a") (data (i32.const 244932) "a") (data (i32.const 244935) "a") (data (i32.const 244938) "a") (data (i32.const 244941) "a") (data (i32.const 244944) "a") (data (i32.const 244947) "a") (data (i32.const 244950) "a") (data (i32.const 244953) "a") (data (i32.const 244956) "a") (data (i32.const 244959) "a") (data (i32.const 244962) "a") (data (i32.const 244965) "a") (data (i32.const 244968) "a") (data (i32.const 244971) "a") (data (i32.const 244974) "a") (data (i32.const 244977) "a") (data (i32.const 244980) "a") (data (i32.const 244983) "a") (data (i32.const 244986) "a") (data (i32.const 244989) "a") (data (i32.const 244992) "a") (data (i32.const 244995) "a") (data (i32.const 244998) "a") (data (i32.const 245001) "a") (data (i32.const 245004) "a") (data (i32.const 245007) "a") (data (i32.const 245010) "a") (data (i32.const 245013) "a") (data (i32.const 245016) "a") (data (i32.const 245019) "a") (data (i32.const 245022) "a") (data (i32.const 245025) "a") (data (i32.const 245028) "a") (data (i32.const 245031) "a") (data (i32.const 245034) "a") (data (i32.const 245037) "a") (data (i32.const 245040) "a") (data (i32.const 245043) "a") (data (i32.const 245046) "a") (data (i32.const 245049) "a") (data (i32.const 245052) "a") (data (i32.const 245055) "a") (data (i32.const 245058) "a") (data (i32.const 245061) "a") (data (i32.const 245064) "a") (data (i32.const 245067) "a") (data (i32.const 245070) "a") (data (i32.const 245073) "a") (data (i32.const 245076) "a") (data (i32.const 245079) "a") (data (i32.const 245082) "a") (data (i32.const 245085) "a") (data (i32.const 245088) "a") (data (i32.const 245091) "a") (data (i32.const 245094) "a") (data (i32.const 245097) "a") (data (i32.const 245100) "a") (data (i32.const 245103) "a") (data (i32.const 245106) "a") (data (i32.const 245109) "a") (data (i32.const 245112) "a") (data (i32.const 245115) "a") (data (i32.const 245118) "a") (data (i32.const 245121) "a") (data (i32.const 245124) "a") (data (i32.const 245127) "a") (data (i32.const 245130) "a") (data (i32.const 245133) "a") (data (i32.const 245136) "a") (data (i32.const 245139) "a") (data (i32.const 245142) "a") (data (i32.const 245145) "a") (data (i32.const 245148) "a") (data (i32.const 245151) "a") (data (i32.const 245154) "a") (data (i32.const 245157) "a") (data (i32.const 245160) "a") (data (i32.const 245163) "a") (data (i32.const 245166) "a") (data (i32.const 245169) "a") (data (i32.const 245172) "a") (data (i32.const 245175) "a") (data (i32.const 245178) "a") (data (i32.const 245181) "a") (data (i32.const 245184) "a") (data (i32.const 245187) "a") (data (i32.const 245190) "a") (data (i32.const 245193) "a") (data (i32.const 245196) "a") (data (i32.const 245199) "a") (data (i32.const 245202) "a") (data (i32.const 245205) "a") (data (i32.const 245208) "a") (data (i32.const 245211) "a") (data (i32.const 245214) "a") (data (i32.const 245217) "a") (data (i32.const 245220) "a") (data (i32.const 245223) "a") (data (i32.const 245226) "a") (data (i32.const 245229) "a") (data (i32.const 245232) "a") (data (i32.const 245235) "a") (data (i32.const 245238) "a") (data (i32.const 245241) "a") (data (i32.const 245244) "a") (data (i32.const 245247) "a") (data (i32.const 245250) "a") (data (i32.const 245253) "a") (data (i32.const 245256) "a") (data (i32.const 245259) "a") (data (i32.const 245262) "a") (data (i32.const 245265) "a") (data (i32.const 245268) "a") (data (i32.const 245271) "a") (data (i32.const 245274) "a") (data (i32.const 245277) "a") (data (i32.const 245280) "a") (data (i32.const 245283) "a") (data (i32.const 245286) "a") (data (i32.const 245289) "a") (data (i32.const 245292) "a") (data (i32.const 245295) "a") (data (i32.const 245298) "a") (data (i32.const 245301) "a") (data (i32.const 245304) "a") (data (i32.const 245307) "a") (data (i32.const 245310) "a") (data (i32.const 245313) "a") (data (i32.const 245316) "a") (data (i32.const 245319) "a") (data (i32.const 245322) "a") (data (i32.const 245325) "a") (data (i32.const 245328) "a") (data (i32.const 245331) "a") (data (i32.const 245334) "a") (data (i32.const 245337) "a") (data (i32.const 245340) "a") (data (i32.const 245343) "a") (data (i32.const 245346) "a") (data (i32.const 245349) "a") (data (i32.const 245352) "a") (data (i32.const 245355) "a") (data (i32.const 245358) "a") (data (i32.const 245361) "a") (data (i32.const 245364) "a") (data (i32.const 245367) "a") (data (i32.const 245370) "a") (data (i32.const 245373) "a") (data (i32.const 245376) "a") (data (i32.const 245379) "a") (data (i32.const 245382) "a") (data (i32.const 245385) "a") (data (i32.const 245388) "a") (data (i32.const 245391) "a") (data (i32.const 245394) "a") (data (i32.const 245397) "a") (data (i32.const 245400) "a") (data (i32.const 245403) "a") (data (i32.const 245406) "a") (data (i32.const 245409) "a") (data (i32.const 245412) "a") (data (i32.const 245415) "a") (data (i32.const 245418) "a") (data (i32.const 245421) "a") (data (i32.const 245424) "a") (data (i32.const 245427) "a") (data (i32.const 245430) "a") (data (i32.const 245433) "a") (data (i32.const 245436) "a") (data (i32.const 245439) "a") (data (i32.const 245442) "a") (data (i32.const 245445) "a") (data (i32.const 245448) "a") (data (i32.const 245451) "a") (data (i32.const 245454) "a") (data (i32.const 245457) "a") (data (i32.const 245460) "a") (data (i32.const 245463) "a") (data (i32.const 245466) "a") (data (i32.const 245469) "a") (data (i32.const 245472) "a") (data (i32.const 245475) "a") (data (i32.const 245478) "a") (data (i32.const 245481) "a") (data (i32.const 245484) "a") (data (i32.const 245487) "a") (data (i32.const 245490) "a") (data (i32.const 245493) "a") (data (i32.const 245496) "a") (data (i32.const 245499) "a") (data (i32.const 245502) "a") (data (i32.const 245505) "a") (data (i32.const 245508) "a") (data (i32.const 245511) "a") (data (i32.const 245514) "a") (data (i32.const 245517) "a") (data (i32.const 245520) "a") (data (i32.const 245523) "a") (data (i32.const 245526) "a") (data (i32.const 245529) "a") (data (i32.const 245532) "a") (data (i32.const 245535) "a") (data (i32.const 245538) "a") (data (i32.const 245541) "a") (data (i32.const 245544) "a") (data (i32.const 245547) "a") (data (i32.const 245550) "a") (data (i32.const 245553) "a") (data (i32.const 245556) "a") (data (i32.const 245559) "a") (data (i32.const 245562) "a") (data (i32.const 245565) "a") (data (i32.const 245568) "a") (data (i32.const 245571) "a") (data (i32.const 245574) "a") (data (i32.const 245577) "a") (data (i32.const 245580) "a") (data (i32.const 245583) "a") (data (i32.const 245586) "a") (data (i32.const 245589) "a") (data (i32.const 245592) "a") (data (i32.const 245595) "a") (data (i32.const 245598) "a") (data (i32.const 245601) "a") (data (i32.const 245604) "a") (data (i32.const 245607) "a") (data (i32.const 245610) "a") (data (i32.const 245613) "a") (data (i32.const 245616) "a") (data (i32.const 245619) "a") (data (i32.const 245622) "a") (data (i32.const 245625) "a") (data (i32.const 245628) "a") (data (i32.const 245631) "a") (data (i32.const 245634) "a") (data (i32.const 245637) "a") (data (i32.const 245640) "a") (data (i32.const 245643) "a") (data (i32.const 245646) "a") (data (i32.const 245649) "a") (data (i32.const 245652) "a") (data (i32.const 245655) "a") (data (i32.const 245658) "a") (data (i32.const 245661) "a") (data (i32.const 245664) "a") (data (i32.const 245667) "a") (data (i32.const 245670) "a") (data (i32.const 245673) "a") (data (i32.const 245676) "a") (data (i32.const 245679) "a") (data (i32.const 245682) "a") (data (i32.const 245685) "a") (data (i32.const 245688) "a") (data (i32.const 245691) "a") (data (i32.const 245694) "a") (data (i32.const 245697) "a") (data (i32.const 245700) "a") (data (i32.const 245703) "a") (data (i32.const 245706) "a") (data (i32.const 245709) "a") (data (i32.const 245712) "a") (data (i32.const 245715) "a") (data (i32.const 245718) "a") (data (i32.const 245721) "a") (data (i32.const 245724) "a") (data (i32.const 245727) "a") (data (i32.const 245730) "a") (data (i32.const 245733) "a") (data (i32.const 245736) "a") (data (i32.const 245739) "a") (data (i32.const 245742) "a") (data (i32.const 245745) "a") (data (i32.const 245748) "a") (data (i32.const 245751) "a") (data (i32.const 245754) "a") (data (i32.const 245757) "a") (data (i32.const 245760) "a") (data (i32.const 245763) "a") (data (i32.const 245766) "a") (data (i32.const 245769) "a") (data (i32.const 245772) "a") (data (i32.const 245775) "a") (data (i32.const 245778) "a") (data (i32.const 245781) "a") (data (i32.const 245784) "a") (data (i32.const 245787) "a") (data (i32.const 245790) "a") (data (i32.const 245793) "a") (data (i32.const 245796) "a") (data (i32.const 245799) "a") (data (i32.const 245802) "a") (data (i32.const 245805) "a") (data (i32.const 245808) "a") (data (i32.const 245811) "a") (data (i32.const 245814) "a") (data (i32.const 245817) "a") (data (i32.const 245820) "a") (data (i32.const 245823) "a") (data (i32.const 245826) "a") (data (i32.const 245829) "a") (data (i32.const 245832) "a") (data (i32.const 245835) "a") (data (i32.const 245838) "a") (data (i32.const 245841) "a") (data (i32.const 245844) "a") (data (i32.const 245847) "a") (data (i32.const 245850) "a") (data (i32.const 245853) "a") (data (i32.const 245856) "a") (data (i32.const 245859) "a") (data (i32.const 245862) "a") (data (i32.const 245865) "a") (data (i32.const 245868) "a") (data (i32.const 245871) "a") (data (i32.const 245874) "a") (data (i32.const 245877) "a") (data (i32.const 245880) "a") (data (i32.const 245883) "a") (data (i32.const 245886) "a") (data (i32.const 245889) "a") (data (i32.const 245892) "a") (data (i32.const 245895) "a") (data (i32.const 245898) "a") (data (i32.const 245901) "a") (data (i32.const 245904) "a") (data (i32.const 245907) "a") (data (i32.const 245910) "a") (data (i32.const 245913) "a") (data (i32.const 245916) "a") (data (i32.const 245919) "a") (data (i32.const 245922) "a") (data (i32.const 245925) "a") (data (i32.const 245928) "a") (data (i32.const 245931) "a") (data (i32.const 245934) "a") (data (i32.const 245937) "a") (data (i32.const 245940) "a") (data (i32.const 245943) "a") (data (i32.const 245946) "a") (data (i32.const 245949) "a") (data (i32.const 245952) "a") (data (i32.const 245955) "a") (data (i32.const 245958) "a") (data (i32.const 245961) "a") (data (i32.const 245964) "a") (data (i32.const 245967) "a") (data (i32.const 245970) "a") (data (i32.const 245973) "a") (data (i32.const 245976) "a") (data (i32.const 245979) "a") (data (i32.const 245982) "a") (data (i32.const 245985) "a") (data (i32.const 245988) "a") (data (i32.const 245991) "a") (data (i32.const 245994) "a") (data (i32.const 245997) "a") (data (i32.const 246000) "a") (data (i32.const 246003) "a") (data (i32.const 246006) "a") (data (i32.const 246009) "a") (data (i32.const 246012) "a") (data (i32.const 246015) "a") (data (i32.const 246018) "a") (data (i32.const 246021) "a") (data (i32.const 246024) "a") (data (i32.const 246027) "a") (data (i32.const 246030) "a") (data (i32.const 246033) "a") (data (i32.const 246036) "a") (data (i32.const 246039) "a") (data (i32.const 246042) "a") (data (i32.const 246045) "a") (data (i32.const 246048) "a") (data (i32.const 246051) "a") (data (i32.const 246054) "a") (data (i32.const 246057) "a") (data (i32.const 246060) "a") (data (i32.const 246063) "a") (data (i32.const 246066) "a") (data (i32.const 246069) "a") (data (i32.const 246072) "a") (data (i32.const 246075) "a") (data (i32.const 246078) "a") (data (i32.const 246081) "a") (data (i32.const 246084) "a") (data (i32.const 246087) "a") (data (i32.const 246090) "a") (data (i32.const 246093) "a") (data (i32.const 246096) "a") (data (i32.const 246099) "a") (data (i32.const 246102) "a") (data (i32.const 246105) "a") (data (i32.const 246108) "a") (data (i32.const 246111) "a") (data (i32.const 246114) "a") (data (i32.const 246117) "a") (data (i32.const 246120) "a") (data (i32.const 246123) "a") (data (i32.const 246126) "a") (data (i32.const 246129) "a") (data (i32.const 246132) "a") (data (i32.const 246135) "a") (data (i32.const 246138) "a") (data (i32.const 246141) "a") (data (i32.const 246144) "a") (data (i32.const 246147) "a") (data (i32.const 246150) "a") (data (i32.const 246153) "a") (data (i32.const 246156) "a") (data (i32.const 246159) "a") (data (i32.const 246162) "a") (data (i32.const 246165) "a") (data (i32.const 246168) "a") (data (i32.const 246171) "a") (data (i32.const 246174) "a") (data (i32.const 246177) "a") (data (i32.const 246180) "a") (data (i32.const 246183) "a") (data (i32.const 246186) "a") (data (i32.const 246189) "a") (data (i32.const 246192) "a") (data (i32.const 246195) "a") (data (i32.const 246198) "a") (data (i32.const 246201) "a") (data (i32.const 246204) "a") (data (i32.const 246207) "a") (data (i32.const 246210) "a") (data (i32.const 246213) "a") (data (i32.const 246216) "a") (data (i32.const 246219) "a") (data (i32.const 246222) "a") (data (i32.const 246225) "a") (data (i32.const 246228) "a") (data (i32.const 246231) "a") (data (i32.const 246234) "a") (data (i32.const 246237) "a") (data (i32.const 246240) "a") (data (i32.const 246243) "a") (data (i32.const 246246) "a") (data (i32.const 246249) "a") (data (i32.const 246252) "a") (data (i32.const 246255) "a") (data (i32.const 246258) "a") (data (i32.const 246261) "a") (data (i32.const 246264) "a") (data (i32.const 246267) "a") (data (i32.const 246270) "a") (data (i32.const 246273) "a") (data (i32.const 246276) "a") (data (i32.const 246279) "a") (data (i32.const 246282) "a") (data (i32.const 246285) "a") (data (i32.const 246288) "a") (data (i32.const 246291) "a") (data (i32.const 246294) "a") (data (i32.const 246297) "a") (data (i32.const 246300) "a") (data (i32.const 246303) "a") (data (i32.const 246306) "a") (data (i32.const 246309) "a") (data (i32.const 246312) "a") (data (i32.const 246315) "a") (data (i32.const 246318) "a") (data (i32.const 246321) "a") (data (i32.const 246324) "a") (data (i32.const 246327) "a") (data (i32.const 246330) "a") (data (i32.const 246333) "a") (data (i32.const 246336) "a") (data (i32.const 246339) "a") (data (i32.const 246342) "a") (data (i32.const 246345) "a") (data (i32.const 246348) "a") (data (i32.const 246351) "a") (data (i32.const 246354) "a") (data (i32.const 246357) "a") (data (i32.const 246360) "a") (data (i32.const 246363) "a") (data (i32.const 246366) "a") (data (i32.const 246369) "a") (data (i32.const 246372) "a") (data (i32.const 246375) "a") (data (i32.const 246378) "a") (data (i32.const 246381) "a") (data (i32.const 246384) "a") (data (i32.const 246387) "a") (data (i32.const 246390) "a") (data (i32.const 246393) "a") (data (i32.const 246396) "a") (data (i32.const 246399) "a") (data (i32.const 246402) "a") (data (i32.const 246405) "a") (data (i32.const 246408) "a") (data (i32.const 246411) "a") (data (i32.const 246414) "a") (data (i32.const 246417) "a") (data (i32.const 246420) "a") (data (i32.const 246423) "a") (data (i32.const 246426) "a") (data (i32.const 246429) "a") (data (i32.const 246432) "a") (data (i32.const 246435) "a") (data (i32.const 246438) "a") (data (i32.const 246441) "a") (data (i32.const 246444) "a") (data (i32.const 246447) "a") (data (i32.const 246450) "a") (data (i32.const 246453) "a") (data (i32.const 246456) "a") (data (i32.const 246459) "a") (data (i32.const 246462) "a") (data (i32.const 246465) "a") (data (i32.const 246468) "a") (data (i32.const 246471) "a") (data (i32.const 246474) "a") (data (i32.const 246477) "a") (data (i32.const 246480) "a") (data (i32.const 246483) "a") (data (i32.const 246486) "a") (data (i32.const 246489) "a") (data (i32.const 246492) "a") (data (i32.const 246495) "a") (data (i32.const 246498) "a") (data (i32.const 246501) "a") (data (i32.const 246504) "a") (data (i32.const 246507) "a") (data (i32.const 246510) "a") (data (i32.const 246513) "a") (data (i32.const 246516) "a") (data (i32.const 246519) "a") (data (i32.const 246522) "a") (data (i32.const 246525) "a") (data (i32.const 246528) "a") (data (i32.const 246531) "a") (data (i32.const 246534) "a") (data (i32.const 246537) "a") (data (i32.const 246540) "a") (data (i32.const 246543) "a") (data (i32.const 246546) "a") (data (i32.const 246549) "a") (data (i32.const 246552) "a") (data (i32.const 246555) "a") (data (i32.const 246558) "a") (data (i32.const 246561) "a") (data (i32.const 246564) "a") (data (i32.const 246567) "a") (data (i32.const 246570) "a") (data (i32.const 246573) "a") (data (i32.const 246576) "a") (data (i32.const 246579) "a") (data (i32.const 246582) "a") (data (i32.const 246585) "a") (data (i32.const 246588) "a") (data (i32.const 246591) "a") (data (i32.const 246594) "a") (data (i32.const 246597) "a") (data (i32.const 246600) "a") (data (i32.const 246603) "a") (data (i32.const 246606) "a") (data (i32.const 246609) "a") (data (i32.const 246612) "a") (data (i32.const 246615) "a") (data (i32.const 246618) "a") (data (i32.const 246621) "a") (data (i32.const 246624) "a") (data (i32.const 246627) "a") (data (i32.const 246630) "a") (data (i32.const 246633) "a") (data (i32.const 246636) "a") (data (i32.const 246639) "a") (data (i32.const 246642) "a") (data (i32.const 246645) "a") (data (i32.const 246648) "a") (data (i32.const 246651) "a") (data (i32.const 246654) "a") (data (i32.const 246657) "a") (data (i32.const 246660) "a") (data (i32.const 246663) "a") (data (i32.const 246666) "a") (data (i32.const 246669) "a") (data (i32.const 246672) "a") (data (i32.const 246675) "a") (data (i32.const 246678) "a") (data (i32.const 246681) "a") (data (i32.const 246684) "a") (data (i32.const 246687) "a") (data (i32.const 246690) "a") (data (i32.const 246693) "a") (data (i32.const 246696) "a") (data (i32.const 246699) "a") (data (i32.const 246702) "a") (data (i32.const 246705) "a") (data (i32.const 246708) "a") (data (i32.const 246711) "a") (data (i32.const 246714) "a") (data (i32.const 246717) "a") (data (i32.const 246720) "a") (data (i32.const 246723) "a") (data (i32.const 246726) "a") (data (i32.const 246729) "a") (data (i32.const 246732) "a") (data (i32.const 246735) "a") (data (i32.const 246738) "a") (data (i32.const 246741) "a") (data (i32.const 246744) "a") (data (i32.const 246747) "a") (data (i32.const 246750) "a") (data (i32.const 246753) "a") (data (i32.const 246756) "a") (data (i32.const 246759) "a") (data (i32.const 246762) "a") (data (i32.const 246765) "a") (data (i32.const 246768) "a") (data (i32.const 246771) "a") (data (i32.const 246774) "a") (data (i32.const 246777) "a") (data (i32.const 246780) "a") (data (i32.const 246783) "a") (data (i32.const 246786) "a") (data (i32.const 246789) "a") (data (i32.const 246792) "a") (data (i32.const 246795) "a") (data (i32.const 246798) "a") (data (i32.const 246801) "a") (data (i32.const 246804) "a") (data (i32.const 246807) "a") (data (i32.const 246810) "a") (data (i32.const 246813) "a") (data (i32.const 246816) "a") (data (i32.const 246819) "a") (data (i32.const 246822) "a") (data (i32.const 246825) "a") (data (i32.const 246828) "a") (data (i32.const 246831) "a") (data (i32.const 246834) "a") (data (i32.const 246837) "a") (data (i32.const 246840) "a") (data (i32.const 246843) "a") (data (i32.const 246846) "a") (data (i32.const 246849) "a") (data (i32.const 246852) "a") (data (i32.const 246855) "a") (data (i32.const 246858) "a") (data (i32.const 246861) "a") (data (i32.const 246864) "a") (data (i32.const 246867) "a") (data (i32.const 246870) "a") (data (i32.const 246873) "a") (data (i32.const 246876) "a") (data (i32.const 246879) "a") (data (i32.const 246882) "a") (data (i32.const 246885) "a") (data (i32.const 246888) "a") (data (i32.const 246891) "a") (data (i32.const 246894) "a") (data (i32.const 246897) "a") (data (i32.const 246900) "a") (data (i32.const 246903) "a") (data (i32.const 246906) "a") (data (i32.const 246909) "a") (data (i32.const 246912) "a") (data (i32.const 246915) "a") (data (i32.const 246918) "a") (data (i32.const 246921) "a") (data (i32.const 246924) "a") (data (i32.const 246927) "a") (data (i32.const 246930) "a") (data (i32.const 246933) "a") (data (i32.const 246936) "a") (data (i32.const 246939) "a") (data (i32.const 246942) "a") (data (i32.const 246945) "a") (data (i32.const 246948) "a") (data (i32.const 246951) "a") (data (i32.const 246954) "a") (data (i32.const 246957) "a") (data (i32.const 246960) "a") (data (i32.const 246963) "a") (data (i32.const 246966) "a") (data (i32.const 246969) "a") (data (i32.const 246972) "a") (data (i32.const 246975) "a") (data (i32.const 246978) "a") (data (i32.const 246981) "a") (data (i32.const 246984) "a") (data (i32.const 246987) "a") (data (i32.const 246990) "a") (data (i32.const 246993) "a") (data (i32.const 246996) "a") (data (i32.const 246999) "a") (data (i32.const 247002) "a") (data (i32.const 247005) "a") (data (i32.const 247008) "a") (data (i32.const 247011) "a") (data (i32.const 247014) "a") (data (i32.const 247017) "a") (data (i32.const 247020) "a") (data (i32.const 247023) "a") (data (i32.const 247026) "a") (data (i32.const 247029) "a") (data (i32.const 247032) "a") (data (i32.const 247035) "a") (data (i32.const 247038) "a") (data (i32.const 247041) "a") (data (i32.const 247044) "a") (data (i32.const 247047) "a") (data (i32.const 247050) "a") (data (i32.const 247053) "a") (data (i32.const 247056) "a") (data (i32.const 247059) "a") (data (i32.const 247062) "a") (data (i32.const 247065) "a") (data (i32.const 247068) "a") (data (i32.const 247071) "a") (data (i32.const 247074) "a") (data (i32.const 247077) "a") (data (i32.const 247080) "a") (data (i32.const 247083) "a") (data (i32.const 247086) "a") (data (i32.const 247089) "a") (data (i32.const 247092) "a") (data (i32.const 247095) "a") (data (i32.const 247098) "a") (data (i32.const 247101) "a") (data (i32.const 247104) "a") (data (i32.const 247107) "a") (data (i32.const 247110) "a") (data (i32.const 247113) "a") (data (i32.const 247116) "a") (data (i32.const 247119) "a") (data (i32.const 247122) "a") (data (i32.const 247125) "a") (data (i32.const 247128) "a") (data (i32.const 247131) "a") (data (i32.const 247134) "a") (data (i32.const 247137) "a") (data (i32.const 247140) "a") (data (i32.const 247143) "a") (data (i32.const 247146) "a") (data (i32.const 247149) "a") (data (i32.const 247152) "a") (data (i32.const 247155) "a") (data (i32.const 247158) "a") (data (i32.const 247161) "a") (data (i32.const 247164) "a") (data (i32.const 247167) "a") (data (i32.const 247170) "a") (data (i32.const 247173) "a") (data (i32.const 247176) "a") (data (i32.const 247179) "a") (data (i32.const 247182) "a") (data (i32.const 247185) "a") (data (i32.const 247188) "a") (data (i32.const 247191) "a") (data (i32.const 247194) "a") (data (i32.const 247197) "a") (data (i32.const 247200) "a") (data (i32.const 247203) "a") (data (i32.const 247206) "a") (data (i32.const 247209) "a") (data (i32.const 247212) "a") (data (i32.const 247215) "a") (data (i32.const 247218) "a") (data (i32.const 247221) "a") (data (i32.const 247224) "a") (data (i32.const 247227) "a") (data (i32.const 247230) "a") (data (i32.const 247233) "a") (data (i32.const 247236) "a") (data (i32.const 247239) "a") (data (i32.const 247242) "a") (data (i32.const 247245) "a") (data (i32.const 247248) "a") (data (i32.const 247251) "a") (data (i32.const 247254) "a") (data (i32.const 247257) "a") (data (i32.const 247260) "a") (data (i32.const 247263) "a") (data (i32.const 247266) "a") (data (i32.const 247269) "a") (data (i32.const 247272) "a") (data (i32.const 247275) "a") (data (i32.const 247278) "a") (data (i32.const 247281) "a") (data (i32.const 247284) "a") (data (i32.const 247287) "a") (data (i32.const 247290) "a") (data (i32.const 247293) "a") (data (i32.const 247296) "a") (data (i32.const 247299) "a") (data (i32.const 247302) "a") (data (i32.const 247305) "a") (data (i32.const 247308) "a") (data (i32.const 247311) "a") (data (i32.const 247314) "a") (data (i32.const 247317) "a") (data (i32.const 247320) "a") (data (i32.const 247323) "a") (data (i32.const 247326) "a") (data (i32.const 247329) "a") (data (i32.const 247332) "a") (data (i32.const 247335) "a") (data (i32.const 247338) "a") (data (i32.const 247341) "a") (data (i32.const 247344) "a") (data (i32.const 247347) "a") (data (i32.const 247350) "a") (data (i32.const 247353) "a") (data (i32.const 247356) "a") (data (i32.const 247359) "a") (data (i32.const 247362) "a") (data (i32.const 247365) "a") (data (i32.const 247368) "a") (data (i32.const 247371) "a") (data (i32.const 247374) "a") (data (i32.const 247377) "a") (data (i32.const 247380) "a") (data (i32.const 247383) "a") (data (i32.const 247386) "a") (data (i32.const 247389) "a") (data (i32.const 247392) "a") (data (i32.const 247395) "a") (data (i32.const 247398) "a") (data (i32.const 247401) "a") (data (i32.const 247404) "a") (data (i32.const 247407) "a") (data (i32.const 247410) "a") (data (i32.const 247413) "a") (data (i32.const 247416) "a") (data (i32.const 247419) "a") (data (i32.const 247422) "a") (data (i32.const 247425) "a") (data (i32.const 247428) "a") (data (i32.const 247431) "a") (data (i32.const 247434) "a") (data (i32.const 247437) "a") (data (i32.const 247440) "a") (data (i32.const 247443) "a") (data (i32.const 247446) "a") (data (i32.const 247449) "a") (data (i32.const 247452) "a") (data (i32.const 247455) "a") (data (i32.const 247458) "a") (data (i32.const 247461) "a") (data (i32.const 247464) "a") (data (i32.const 247467) "a") (data (i32.const 247470) "a") (data (i32.const 247473) "a") (data (i32.const 247476) "a") (data (i32.const 247479) "a") (data (i32.const 247482) "a") (data (i32.const 247485) "a") (data (i32.const 247488) "a") (data (i32.const 247491) "a") (data (i32.const 247494) "a") (data (i32.const 247497) "a") (data (i32.const 247500) "a") (data (i32.const 247503) "a") (data (i32.const 247506) "a") (data (i32.const 247509) "a") (data (i32.const 247512) "a") (data (i32.const 247515) "a") (data (i32.const 247518) "a") (data (i32.const 247521) "a") (data (i32.const 247524) "a") (data (i32.const 247527) "a") (data (i32.const 247530) "a") (data (i32.const 247533) "a") (data (i32.const 247536) "a") (data (i32.const 247539) "a") (data (i32.const 247542) "a") (data (i32.const 247545) "a") (data (i32.const 247548) "a") (data (i32.const 247551) "a") (data (i32.const 247554) "a") (data (i32.const 247557) "a") (data (i32.const 247560) "a") (data (i32.const 247563) "a") (data (i32.const 247566) "a") (data (i32.const 247569) "a") (data (i32.const 247572) "a") (data (i32.const 247575) "a") (data (i32.const 247578) "a") (data (i32.const 247581) "a") (data (i32.const 247584) "a") (data (i32.const 247587) "a") (data (i32.const 247590) "a") (data (i32.const 247593) "a") (data (i32.const 247596) "a") (data (i32.const 247599) "a") (data (i32.const 247602) "a") (data (i32.const 247605) "a") (data (i32.const 247608) "a") (data (i32.const 247611) "a") (data (i32.const 247614) "a") (data (i32.const 247617) "a") (data (i32.const 247620) "a") (data (i32.const 247623) "a") (data (i32.const 247626) "a") (data (i32.const 247629) "a") (data (i32.const 247632) "a") (data (i32.const 247635) "a") (data (i32.const 247638) "a") (data (i32.const 247641) "a") (data (i32.const 247644) "a") (data (i32.const 247647) "a") (data (i32.const 247650) "a") (data (i32.const 247653) "a") (data (i32.const 247656) "a") (data (i32.const 247659) "a") (data (i32.const 247662) "a") (data (i32.const 247665) "a") (data (i32.const 247668) "a") (data (i32.const 247671) "a") (data (i32.const 247674) "a") (data (i32.const 247677) "a") (data (i32.const 247680) "a") (data (i32.const 247683) "a") (data (i32.const 247686) "a") (data (i32.const 247689) "a") (data (i32.const 247692) "a") (data (i32.const 247695) "a") (data (i32.const 247698) "a") (data (i32.const 247701) "a") (data (i32.const 247704) "a") (data (i32.const 247707) "a") (data (i32.const 247710) "a") (data (i32.const 247713) "a") (data (i32.const 247716) "a") (data (i32.const 247719) "a") (data (i32.const 247722) "a") (data (i32.const 247725) "a") (data (i32.const 247728) "a") (data (i32.const 247731) "a") (data (i32.const 247734) "a") (data (i32.const 247737) "a") (data (i32.const 247740) "a") (data (i32.const 247743) "a") (data (i32.const 247746) "a") (data (i32.const 247749) "a") (data (i32.const 247752) "a") (data (i32.const 247755) "a") (data (i32.const 247758) "a") (data (i32.const 247761) "a") (data (i32.const 247764) "a") (data (i32.const 247767) "a") (data (i32.const 247770) "a") (data (i32.const 247773) "a") (data (i32.const 247776) "a") (data (i32.const 247779) "a") (data (i32.const 247782) "a") (data (i32.const 247785) "a") (data (i32.const 247788) "a") (data (i32.const 247791) "a") (data (i32.const 247794) "a") (data (i32.const 247797) "a") (data (i32.const 247800) "a") (data (i32.const 247803) "a") (data (i32.const 247806) "a") (data (i32.const 247809) "a") (data (i32.const 247812) "a") (data (i32.const 247815) "a") (data (i32.const 247818) "a") (data (i32.const 247821) "a") (data (i32.const 247824) "a") (data (i32.const 247827) "a") (data (i32.const 247830) "a") (data (i32.const 247833) "a") (data (i32.const 247836) "a") (data (i32.const 247839) "a") (data (i32.const 247842) "a") (data (i32.const 247845) "a") (data (i32.const 247848) "a") (data (i32.const 247851) "a") (data (i32.const 247854) "a") (data (i32.const 247857) "a") (data (i32.const 247860) "a") (data (i32.const 247863) "a") (data (i32.const 247866) "a") (data (i32.const 247869) "a") (data (i32.const 247872) "a") (data (i32.const 247875) "a") (data (i32.const 247878) "a") (data (i32.const 247881) "a") (data (i32.const 247884) "a") (data (i32.const 247887) "a") (data (i32.const 247890) "a") (data (i32.const 247893) "a") (data (i32.const 247896) "a") (data (i32.const 247899) "a") (data (i32.const 247902) "a") (data (i32.const 247905) "a") (data (i32.const 247908) "a") (data (i32.const 247911) "a") (data (i32.const 247914) "a") (data (i32.const 247917) "a") (data (i32.const 247920) "a") (data (i32.const 247923) "a") (data (i32.const 247926) "a") (data (i32.const 247929) "a") (data (i32.const 247932) "a") (data (i32.const 247935) "a") (data (i32.const 247938) "a") (data (i32.const 247941) "a") (data (i32.const 247944) "a") (data (i32.const 247947) "a") (data (i32.const 247950) "a") (data (i32.const 247953) "a") (data (i32.const 247956) "a") (data (i32.const 247959) "a") (data (i32.const 247962) "a") (data (i32.const 247965) "a") (data (i32.const 247968) "a") (data (i32.const 247971) "a") (data (i32.const 247974) "a") (data (i32.const 247977) "a") (data (i32.const 247980) "a") (data (i32.const 247983) "a") (data (i32.const 247986) "a") (data (i32.const 247989) "a") (data (i32.const 247992) "a") (data (i32.const 247995) "a") (data (i32.const 247998) "a") (data (i32.const 248001) "a") (data (i32.const 248004) "a") (data (i32.const 248007) "a") (data (i32.const 248010) "a") (data (i32.const 248013) "a") (data (i32.const 248016) "a") (data (i32.const 248019) "a") (data (i32.const 248022) "a") (data (i32.const 248025) "a") (data (i32.const 248028) "a") (data (i32.const 248031) "a") (data (i32.const 248034) "a") (data (i32.const 248037) "a") (data (i32.const 248040) "a") (data (i32.const 248043) "a") (data (i32.const 248046) "a") (data (i32.const 248049) "a") (data (i32.const 248052) "a") (data (i32.const 248055) "a") (data (i32.const 248058) "a") (data (i32.const 248061) "a") (data (i32.const 248064) "a") (data (i32.const 248067) "a") (data (i32.const 248070) "a") (data (i32.const 248073) "a") (data (i32.const 248076) "a") (data (i32.const 248079) "a") (data (i32.const 248082) "a") (data (i32.const 248085) "a") (data (i32.const 248088) "a") (data (i32.const 248091) "a") (data (i32.const 248094) "a") (data (i32.const 248097) "a") (data (i32.const 248100) "a") (data (i32.const 248103) "a") (data (i32.const 248106) "a") (data (i32.const 248109) "a") (data (i32.const 248112) "a") (data (i32.const 248115) "a") (data (i32.const 248118) "a") (data (i32.const 248121) "a") (data (i32.const 248124) "a") (data (i32.const 248127) "a") (data (i32.const 248130) "a") (data (i32.const 248133) "a") (data (i32.const 248136) "a") (data (i32.const 248139) "a") (data (i32.const 248142) "a") (data (i32.const 248145) "a") (data (i32.const 248148) "a") (data (i32.const 248151) "a") (data (i32.const 248154) "a") (data (i32.const 248157) "a") (data (i32.const 248160) "a") (data (i32.const 248163) "a") (data (i32.const 248166) "a") (data (i32.const 248169) "a") (data (i32.const 248172) "a") (data (i32.const 248175) "a") (data (i32.const 248178) "a") (data (i32.const 248181) "a") (data (i32.const 248184) "a") (data (i32.const 248187) "a") (data (i32.const 248190) "a") (data (i32.const 248193) "a") (data (i32.const 248196) "a") (data (i32.const 248199) "a") (data (i32.const 248202) "a") (data (i32.const 248205) "a") (data (i32.const 248208) "a") (data (i32.const 248211) "a") (data (i32.const 248214) "a") (data (i32.const 248217) "a") (data (i32.const 248220) "a") (data (i32.const 248223) "a") (data (i32.const 248226) "a") (data (i32.const 248229) "a") (data (i32.const 248232) "a") (data (i32.const 248235) "a") (data (i32.const 248238) "a") (data (i32.const 248241) "a") (data (i32.const 248244) "a") (data (i32.const 248247) "a") (data (i32.const 248250) "a") (data (i32.const 248253) "a") (data (i32.const 248256) "a") (data (i32.const 248259) "a") (data (i32.const 248262) "a") (data (i32.const 248265) "a") (data (i32.const 248268) "a") (data (i32.const 248271) "a") (data (i32.const 248274) "a") (data (i32.const 248277) "a") (data (i32.const 248280) "a") (data (i32.const 248283) "a") (data (i32.const 248286) "a") (data (i32.const 248289) "a") (data (i32.const 248292) "a") (data (i32.const 248295) "a") (data (i32.const 248298) "a") (data (i32.const 248301) "a") (data (i32.const 248304) "a") (data (i32.const 248307) "a") (data (i32.const 248310) "a") (data (i32.const 248313) "a") (data (i32.const 248316) "a") (data (i32.const 248319) "a") (data (i32.const 248322) "a") (data (i32.const 248325) "a") (data (i32.const 248328) "a") (data (i32.const 248331) "a") (data (i32.const 248334) "a") (data (i32.const 248337) "a") (data (i32.const 248340) "a") (data (i32.const 248343) "a") (data (i32.const 248346) "a") (data (i32.const 248349) "a") (data (i32.const 248352) "a") (data (i32.const 248355) "a") (data (i32.const 248358) "a") (data (i32.const 248361) "a") (data (i32.const 248364) "a") (data (i32.const 248367) "a") (data (i32.const 248370) "a") (data (i32.const 248373) "a") (data (i32.const 248376) "a") (data (i32.const 248379) "a") (data (i32.const 248382) "a") (data (i32.const 248385) "a") (data (i32.const 248388) "a") (data (i32.const 248391) "a") (data (i32.const 248394) "a") (data (i32.const 248397) "a") (data (i32.const 248400) "a") (data (i32.const 248403) "a") (data (i32.const 248406) "a") (data (i32.const 248409) "a") (data (i32.const 248412) "a") (data (i32.const 248415) "a") (data (i32.const 248418) "a") (data (i32.const 248421) "a") (data (i32.const 248424) "a") (data (i32.const 248427) "a") (data (i32.const 248430) "a") (data (i32.const 248433) "a") (data (i32.const 248436) "a") (data (i32.const 248439) "a") (data (i32.const 248442) "a") (data (i32.const 248445) "a") (data (i32.const 248448) "a") (data (i32.const 248451) "a") (data (i32.const 248454) "a") (data (i32.const 248457) "a") (data (i32.const 248460) "a") (data (i32.const 248463) "a") (data (i32.const 248466) "a") (data (i32.const 248469) "a") (data (i32.const 248472) "a") (data (i32.const 248475) "a") (data (i32.const 248478) "a") (data (i32.const 248481) "a") (data (i32.const 248484) "a") (data (i32.const 248487) "a") (data (i32.const 248490) "a") (data (i32.const 248493) "a") (data (i32.const 248496) "a") (data (i32.const 248499) "a") (data (i32.const 248502) "a") (data (i32.const 248505) "a") (data (i32.const 248508) "a") (data (i32.const 248511) "a") (data (i32.const 248514) "a") (data (i32.const 248517) "a") (data (i32.const 248520) "a") (data (i32.const 248523) "a") (data (i32.const 248526) "a") (data (i32.const 248529) "a") (data (i32.const 248532) "a") (data (i32.const 248535) "a") (data (i32.const 248538) "a") (data (i32.const 248541) "a") (data (i32.const 248544) "a") (data (i32.const 248547) "a") (data (i32.const 248550) "a") (data (i32.const 248553) "a") (data (i32.const 248556) "a") (data (i32.const 248559) "a") (data (i32.const 248562) "a") (data (i32.const 248565) "a") (data (i32.const 248568) "a") (data (i32.const 248571) "a") (data (i32.const 248574) "a") (data (i32.const 248577) "a") (data (i32.const 248580) "a") (data (i32.const 248583) "a") (data (i32.const 248586) "a") (data (i32.const 248589) "a") (data (i32.const 248592) "a") (data (i32.const 248595) "a") (data (i32.const 248598) "a") (data (i32.const 248601) "a") (data (i32.const 248604) "a") (data (i32.const 248607) "a") (data (i32.const 248610) "a") (data (i32.const 248613) "a") (data (i32.const 248616) "a") (data (i32.const 248619) "a") (data (i32.const 248622) "a") (data (i32.const 248625) "a") (data (i32.const 248628) "a") (data (i32.const 248631) "a") (data (i32.const 248634) "a") (data (i32.const 248637) "a") (data (i32.const 248640) "a") (data (i32.const 248643) "a") (data (i32.const 248646) "a") (data (i32.const 248649) "a") (data (i32.const 248652) "a") (data (i32.const 248655) "a") (data (i32.const 248658) "a") (data (i32.const 248661) "a") (data (i32.const 248664) "a") (data (i32.const 248667) "a") (data (i32.const 248670) "a") (data (i32.const 248673) "a") (data (i32.const 248676) "a") (data (i32.const 248679) "a") (data (i32.const 248682) "a") (data (i32.const 248685) "a") (data (i32.const 248688) "a") (data (i32.const 248691) "a") (data (i32.const 248694) "a") (data (i32.const 248697) "a") (data (i32.const 248700) "a") (data (i32.const 248703) "a") (data (i32.const 248706) "a") (data (i32.const 248709) "a") (data (i32.const 248712) "a") (data (i32.const 248715) "a") (data (i32.const 248718) "a") (data (i32.const 248721) "a") (data (i32.const 248724) "a") (data (i32.const 248727) "a") (data (i32.const 248730) "a") (data (i32.const 248733) "a") (data (i32.const 248736) "a") (data (i32.const 248739) "a") (data (i32.const 248742) "a") (data (i32.const 248745) "a") (data (i32.const 248748) "a") (data (i32.const 248751) "a") (data (i32.const 248754) "a") (data (i32.const 248757) "a") (data (i32.const 248760) "a") (data (i32.const 248763) "a") (data (i32.const 248766) "a") (data (i32.const 248769) "a") (data (i32.const 248772) "a") (data (i32.const 248775) "a") (data (i32.const 248778) "a") (data (i32.const 248781) "a") (data (i32.const 248784) "a") (data (i32.const 248787) "a") (data (i32.const 248790) "a") (data (i32.const 248793) "a") (data (i32.const 248796) "a") (data (i32.const 248799) "a") (data (i32.const 248802) "a") (data (i32.const 248805) "a") (data (i32.const 248808) "a") (data (i32.const 248811) "a") (data (i32.const 248814) "a") (data (i32.const 248817) "a") (data (i32.const 248820) "a") (data (i32.const 248823) "a") (data (i32.const 248826) "a") (data (i32.const 248829) "a") (data (i32.const 248832) "a") (data (i32.const 248835) "a") (data (i32.const 248838) "a") (data (i32.const 248841) "a") (data (i32.const 248844) "a") (data (i32.const 248847) "a") (data (i32.const 248850) "a") (data (i32.const 248853) "a") (data (i32.const 248856) "a") (data (i32.const 248859) "a") (data (i32.const 248862) "a") (data (i32.const 248865) "a") (data (i32.const 248868) "a") (data (i32.const 248871) "a") (data (i32.const 248874) "a") (data (i32.const 248877) "a") (data (i32.const 248880) "a") (data (i32.const 248883) "a") (data (i32.const 248886) "a") (data (i32.const 248889) "a") (data (i32.const 248892) "a") (data (i32.const 248895) "a") (data (i32.const 248898) "a") (data (i32.const 248901) "a") (data (i32.const 248904) "a") (data (i32.const 248907) "a") (data (i32.const 248910) "a") (data (i32.const 248913) "a") (data (i32.const 248916) "a") (data (i32.const 248919) "a") (data (i32.const 248922) "a") (data (i32.const 248925) "a") (data (i32.const 248928) "a") (data (i32.const 248931) "a") (data (i32.const 248934) "a") (data (i32.const 248937) "a") (data (i32.const 248940) "a") (data (i32.const 248943) "a") (data (i32.const 248946) "a") (data (i32.const 248949) "a") (data (i32.const 248952) "a") (data (i32.const 248955) "a") (data (i32.const 248958) "a") (data (i32.const 248961) "a") (data (i32.const 248964) "a") (data (i32.const 248967) "a") (data (i32.const 248970) "a") (data (i32.const 248973) "a") (data (i32.const 248976) "a") (data (i32.const 248979) "a") (data (i32.const 248982) "a") (data (i32.const 248985) "a") (data (i32.const 248988) "a") (data (i32.const 248991) "a") (data (i32.const 248994) "a") (data (i32.const 248997) "a") (data (i32.const 249000) "a") (data (i32.const 249003) "a") (data (i32.const 249006) "a") (data (i32.const 249009) "a") (data (i32.const 249012) "a") (data (i32.const 249015) "a") (data (i32.const 249018) "a") (data (i32.const 249021) "a") (data (i32.const 249024) "a") (data (i32.const 249027) "a") (data (i32.const 249030) "a") (data (i32.const 249033) "a") (data (i32.const 249036) "a") (data (i32.const 249039) "a") (data (i32.const 249042) "a") (data (i32.const 249045) "a") (data (i32.const 249048) "a") (data (i32.const 249051) "a") (data (i32.const 249054) "a") (data (i32.const 249057) "a") (data (i32.const 249060) "a") (data (i32.const 249063) "a") (data (i32.const 249066) "a") (data (i32.const 249069) "a") (data (i32.const 249072) "a") (data (i32.const 249075) "a") (data (i32.const 249078) "a") (data (i32.const 249081) "a") (data (i32.const 249084) "a") (data (i32.const 249087) "a") (data (i32.const 249090) "a") (data (i32.const 249093) "a") (data (i32.const 249096) "a") (data (i32.const 249099) "a") (data (i32.const 249102) "a") (data (i32.const 249105) "a") (data (i32.const 249108) "a") (data (i32.const 249111) "a") (data (i32.const 249114) "a") (data (i32.const 249117) "a") (data (i32.const 249120) "a") (data (i32.const 249123) "a") (data (i32.const 249126) "a") (data (i32.const 249129) "a") (data (i32.const 249132) "a") (data (i32.const 249135) "a") (data (i32.const 249138) "a") (data (i32.const 249141) "a") (data (i32.const 249144) "a") (data (i32.const 249147) "a") (data (i32.const 249150) "a") (data (i32.const 249153) "a") (data (i32.const 249156) "a") (data (i32.const 249159) "a") (data (i32.const 249162) "a") (data (i32.const 249165) "a") (data (i32.const 249168) "a") (data (i32.const 249171) "a") (data (i32.const 249174) "a") (data (i32.const 249177) "a") (data (i32.const 249180) "a") (data (i32.const 249183) "a") (data (i32.const 249186) "a") (data (i32.const 249189) "a") (data (i32.const 249192) "a") (data (i32.const 249195) "a") (data (i32.const 249198) "a") (data (i32.const 249201) "a") (data (i32.const 249204) "a") (data (i32.const 249207) "a") (data (i32.const 249210) "a") (data (i32.const 249213) "a") (data (i32.const 249216) "a") (data (i32.const 249219) "a") (data (i32.const 249222) "a") (data (i32.const 249225) "a") (data (i32.const 249228) "a") (data (i32.const 249231) "a") (data (i32.const 249234) "a") (data (i32.const 249237) "a") (data (i32.const 249240) "a") (data (i32.const 249243) "a") (data (i32.const 249246) "a") (data (i32.const 249249) "a") (data (i32.const 249252) "a") (data (i32.const 249255) "a") (data (i32.const 249258) "a") (data (i32.const 249261) "a") (data (i32.const 249264) "a") (data (i32.const 249267) "a") (data (i32.const 249270) "a") (data (i32.const 249273) "a") (data (i32.const 249276) "a") (data (i32.const 249279) "a") (data (i32.const 249282) "a") (data (i32.const 249285) "a") (data (i32.const 249288) "a") (data (i32.const 249291) "a") (data (i32.const 249294) "a") (data (i32.const 249297) "a") (data (i32.const 249300) "a") (data (i32.const 249303) "a") (data (i32.const 249306) "a") (data (i32.const 249309) "a") (data (i32.const 249312) "a") (data (i32.const 249315) "a") (data (i32.const 249318) "a") (data (i32.const 249321) "a") (data (i32.const 249324) "a") (data (i32.const 249327) "a") (data (i32.const 249330) "a") (data (i32.const 249333) "a") (data (i32.const 249336) "a") (data (i32.const 249339) "a") (data (i32.const 249342) "a") (data (i32.const 249345) "a") (data (i32.const 249348) "a") (data (i32.const 249351) "a") (data (i32.const 249354) "a") (data (i32.const 249357) "a") (data (i32.const 249360) "a") (data (i32.const 249363) "a") (data (i32.const 249366) "a") (data (i32.const 249369) "a") (data (i32.const 249372) "a") (data (i32.const 249375) "a") (data (i32.const 249378) "a") (data (i32.const 249381) "a") (data (i32.const 249384) "a") (data (i32.const 249387) "a") (data (i32.const 249390) "a") (data (i32.const 249393) "a") (data (i32.const 249396) "a") (data (i32.const 249399) "a") (data (i32.const 249402) "a") (data (i32.const 249405) "a") (data (i32.const 249408) "a") (data (i32.const 249411) "a") (data (i32.const 249414) "a") (data (i32.const 249417) "a") (data (i32.const 249420) "a") (data (i32.const 249423) "a") (data (i32.const 249426) "a") (data (i32.const 249429) "a") (data (i32.const 249432) "a") (data (i32.const 249435) "a") (data (i32.const 249438) "a") (data (i32.const 249441) "a") (data (i32.const 249444) "a") (data (i32.const 249447) "a") (data (i32.const 249450) "a") (data (i32.const 249453) "a") (data (i32.const 249456) "a") (data (i32.const 249459) "a") (data (i32.const 249462) "a") (data (i32.const 249465) "a") (data (i32.const 249468) "a") (data (i32.const 249471) "a") (data (i32.const 249474) "a") (data (i32.const 249477) "a") (data (i32.const 249480) "a") (data (i32.const 249483) "a") (data (i32.const 249486) "a") (data (i32.const 249489) "a") (data (i32.const 249492) "a") (data (i32.const 249495) "a") (data (i32.const 249498) "a") (data (i32.const 249501) "a") (data (i32.const 249504) "a") (data (i32.const 249507) "a") (data (i32.const 249510) "a") (data (i32.const 249513) "a") (data (i32.const 249516) "a") (data (i32.const 249519) "a") (data (i32.const 249522) "a") (data (i32.const 249525) "a") (data (i32.const 249528) "a") (data (i32.const 249531) "a") (data (i32.const 249534) "a") (data (i32.const 249537) "a") (data (i32.const 249540) "a") (data (i32.const 249543) "a") (data (i32.const 249546) "a") (data (i32.const 249549) "a") (data (i32.const 249552) "a") (data (i32.const 249555) "a") (data (i32.const 249558) "a") (data (i32.const 249561) "a") (data (i32.const 249564) "a") (data (i32.const 249567) "a") (data (i32.const 249570) "a") (data (i32.const 249573) "a") (data (i32.const 249576) "a") (data (i32.const 249579) "a") (data (i32.const 249582) "a") (data (i32.const 249585) "a") (data (i32.const 249588) "a") (data (i32.const 249591) "a") (data (i32.const 249594) "a") (data (i32.const 249597) "a") (data (i32.const 249600) "a") (data (i32.const 249603) "a") (data (i32.const 249606) "a") (data (i32.const 249609) "a") (data (i32.const 249612) "a") (data (i32.const 249615) "a") (data (i32.const 249618) "a") (data (i32.const 249621) "a") (data (i32.const 249624) "a") (data (i32.const 249627) "a") (data (i32.const 249630) "a") (data (i32.const 249633) "a") (data (i32.const 249636) "a") (data (i32.const 249639) "a") (data (i32.const 249642) "a") (data (i32.const 249645) "a") (data (i32.const 249648) "a") (data (i32.const 249651) "a") (data (i32.const 249654) "a") (data (i32.const 249657) "a") (data (i32.const 249660) "a") (data (i32.const 249663) "a") (data (i32.const 249666) "a") (data (i32.const 249669) "a") (data (i32.const 249672) "a") (data (i32.const 249675) "a") (data (i32.const 249678) "a") (data (i32.const 249681) "a") (data (i32.const 249684) "a") (data (i32.const 249687) "a") (data (i32.const 249690) "a") (data (i32.const 249693) "a") (data (i32.const 249696) "a") (data (i32.const 249699) "a") (data (i32.const 249702) "a") (data (i32.const 249705) "a") (data (i32.const 249708) "a") (data (i32.const 249711) "a") (data (i32.const 249714) "a") (data (i32.const 249717) "a") (data (i32.const 249720) "a") (data (i32.const 249723) "a") (data (i32.const 249726) "a") (data (i32.const 249729) "a") (data (i32.const 249732) "a") (data (i32.const 249735) "a") (data (i32.const 249738) "a") (data (i32.const 249741) "a") (data (i32.const 249744) "a") (data (i32.const 249747) "a") (data (i32.const 249750) "a") (data (i32.const 249753) "a") (data (i32.const 249756) "a") (data (i32.const 249759) "a") (data (i32.const 249762) "a") (data (i32.const 249765) "a") (data (i32.const 249768) "a") (data (i32.const 249771) "a") (data (i32.const 249774) "a") (data (i32.const 249777) "a") (data (i32.const 249780) "a") (data (i32.const 249783) "a") (data (i32.const 249786) "a") (data (i32.const 249789) "a") (data (i32.const 249792) "a") (data (i32.const 249795) "a") (data (i32.const 249798) "a") (data (i32.const 249801) "a") (data (i32.const 249804) "a") (data (i32.const 249807) "a") (data (i32.const 249810) "a") (data (i32.const 249813) "a") (data (i32.const 249816) "a") (data (i32.const 249819) "a") (data (i32.const 249822) "a") (data (i32.const 249825) "a") (data (i32.const 249828) "a") (data (i32.const 249831) "a") (data (i32.const 249834) "a") (data (i32.const 249837) "a") (data (i32.const 249840) "a") (data (i32.const 249843) "a") (data (i32.const 249846) "a") (data (i32.const 249849) "a") (data (i32.const 249852) "a") (data (i32.const 249855) "a") (data (i32.const 249858) "a") (data (i32.const 249861) "a") (data (i32.const 249864) "a") (data (i32.const 249867) "a") (data (i32.const 249870) "a") (data (i32.const 249873) "a") (data (i32.const 249876) "a") (data (i32.const 249879) "a") (data (i32.const 249882) "a") (data (i32.const 249885) "a") (data (i32.const 249888) "a") (data (i32.const 249891) "a") (data (i32.const 249894) "a") (data (i32.const 249897) "a") (data (i32.const 249900) "a") (data (i32.const 249903) "a") (data (i32.const 249906) "a") (data (i32.const 249909) "a") (data (i32.const 249912) "a") (data (i32.const 249915) "a") (data (i32.const 249918) "a") (data (i32.const 249921) "a") (data (i32.const 249924) "a") (data (i32.const 249927) "a") (data (i32.const 249930) "a") (data (i32.const 249933) "a") (data (i32.const 249936) "a") (data (i32.const 249939) "a") (data (i32.const 249942) "a") (data (i32.const 249945) "a") (data (i32.const 249948) "a") (data (i32.const 249951) "a") (data (i32.const 249954) "a") (data (i32.const 249957) "a") (data (i32.const 249960) "a") (data (i32.const 249963) "a") (data (i32.const 249966) "a") (data (i32.const 249969) "a") (data (i32.const 249972) "a") (data (i32.const 249975) "a") (data (i32.const 249978) "a") (data (i32.const 249981) "a") (data (i32.const 249984) "a") (data (i32.const 249987) "a") (data (i32.const 249990) "a") (data (i32.const 249993) "a") (data (i32.const 249996) "a") (data (i32.const 249999) "a") (data (i32.const 250002) "a") (data (i32.const 250005) "a") (data (i32.const 250008) "a") (data (i32.const 250011) "a") (data (i32.const 250014) "a") (data (i32.const 250017) "a") (data (i32.const 250020) "a") (data (i32.const 250023) "a") (data (i32.const 250026) "a") (data (i32.const 250029) "a") (data (i32.const 250032) "a") (data (i32.const 250035) "a") (data (i32.const 250038) "a") (data (i32.const 250041) "a") (data (i32.const 250044) "a") (data (i32.const 250047) "a") (data (i32.const 250050) "a") (data (i32.const 250053) "a") (data (i32.const 250056) "a") (data (i32.const 250059) "a") (data (i32.const 250062) "a") (data (i32.const 250065) "a") (data (i32.const 250068) "a") (data (i32.const 250071) "a") (data (i32.const 250074) "a") (data (i32.const 250077) "a") (data (i32.const 250080) "a") (data (i32.const 250083) "a") (data (i32.const 250086) "a") (data (i32.const 250089) "a") (data (i32.const 250092) "a") (data (i32.const 250095) "a") (data (i32.const 250098) "a") (data (i32.const 250101) "a") (data (i32.const 250104) "a") (data (i32.const 250107) "a") (data (i32.const 250110) "a") (data (i32.const 250113) "a") (data (i32.const 250116) "a") (data (i32.const 250119) "a") (data (i32.const 250122) "a") (data (i32.const 250125) "a") (data (i32.const 250128) "a") (data (i32.const 250131) "a") (data (i32.const 250134) "a") (data (i32.const 250137) "a") (data (i32.const 250140) "a") (data (i32.const 250143) "a") (data (i32.const 250146) "a") (data (i32.const 250149) "a") (data (i32.const 250152) "a") (data (i32.const 250155) "a") (data (i32.const 250158) "a") (data (i32.const 250161) "a") (data (i32.const 250164) "a") (data (i32.const 250167) "a") (data (i32.const 250170) "a") (data (i32.const 250173) "a") (data (i32.const 250176) "a") (data (i32.const 250179) "a") (data (i32.const 250182) "a") (data (i32.const 250185) "a") (data (i32.const 250188) "a") (data (i32.const 250191) "a") (data (i32.const 250194) "a") (data (i32.const 250197) "a") (data (i32.const 250200) "a") (data (i32.const 250203) "a") (data (i32.const 250206) "a") (data (i32.const 250209) "a") (data (i32.const 250212) "a") (data (i32.const 250215) "a") (data (i32.const 250218) "a") (data (i32.const 250221) "a") (data (i32.const 250224) "a") (data (i32.const 250227) "a") (data (i32.const 250230) "a") (data (i32.const 250233) "a") (data (i32.const 250236) "a") (data (i32.const 250239) "a") (data (i32.const 250242) "a") (data (i32.const 250245) "a") (data (i32.const 250248) "a") (data (i32.const 250251) "a") (data (i32.const 250254) "a") (data (i32.const 250257) "a") (data (i32.const 250260) "a") (data (i32.const 250263) "a") (data (i32.const 250266) "a") (data (i32.const 250269) "a") (data (i32.const 250272) "a") (data (i32.const 250275) "a") (data (i32.const 250278) "a") (data (i32.const 250281) "a") (data (i32.const 250284) "a") (data (i32.const 250287) "a") (data (i32.const 250290) "a") (data (i32.const 250293) "a") (data (i32.const 250296) "a") (data (i32.const 250299) "a") (data (i32.const 250302) "a") (data (i32.const 250305) "a") (data (i32.const 250308) "a") (data (i32.const 250311) "a") (data (i32.const 250314) "a") (data (i32.const 250317) "a") (data (i32.const 250320) "a") (data (i32.const 250323) "a") (data (i32.const 250326) "a") (data (i32.const 250329) "a") (data (i32.const 250332) "a") (data (i32.const 250335) "a") (data (i32.const 250338) "a") (data (i32.const 250341) "a") (data (i32.const 250344) "a") (data (i32.const 250347) "a") (data (i32.const 250350) "a") (data (i32.const 250353) "a") (data (i32.const 250356) "a") (data (i32.const 250359) "a") (data (i32.const 250362) "a") (data (i32.const 250365) "a") (data (i32.const 250368) "a") (data (i32.const 250371) "a") (data (i32.const 250374) "a") (data (i32.const 250377) "a") (data (i32.const 250380) "a") (data (i32.const 250383) "a") (data (i32.const 250386) "a") (data (i32.const 250389) "a") (data (i32.const 250392) "a") (data (i32.const 250395) "a") (data (i32.const 250398) "a") (data (i32.const 250401) "a") (data (i32.const 250404) "a") (data (i32.const 250407) "a") (data (i32.const 250410) "a") (data (i32.const 250413) "a") (data (i32.const 250416) "a") (data (i32.const 250419) "a") (data (i32.const 250422) "a") (data (i32.const 250425) "a") (data (i32.const 250428) "a") (data (i32.const 250431) "a") (data (i32.const 250434) "a") (data (i32.const 250437) "a") (data (i32.const 250440) "a") (data (i32.const 250443) "a") (data (i32.const 250446) "a") (data (i32.const 250449) "a") (data (i32.const 250452) "a") (data (i32.const 250455) "a") (data (i32.const 250458) "a") (data (i32.const 250461) "a") (data (i32.const 250464) "a") (data (i32.const 250467) "a") (data (i32.const 250470) "a") (data (i32.const 250473) "a") (data (i32.const 250476) "a") (data (i32.const 250479) "a") (data (i32.const 250482) "a") (data (i32.const 250485) "a") (data (i32.const 250488) "a") (data (i32.const 250491) "a") (data (i32.const 250494) "a") (data (i32.const 250497) "a") (data (i32.const 250500) "a") (data (i32.const 250503) "a") (data (i32.const 250506) "a") (data (i32.const 250509) "a") (data (i32.const 250512) "a") (data (i32.const 250515) "a") (data (i32.const 250518) "a") (data (i32.const 250521) "a") (data (i32.const 250524) "a") (data (i32.const 250527) "a") (data (i32.const 250530) "a") (data (i32.const 250533) "a") (data (i32.const 250536) "a") (data (i32.const 250539) "a") (data (i32.const 250542) "a") (data (i32.const 250545) "a") (data (i32.const 250548) "a") (data (i32.const 250551) "a") (data (i32.const 250554) "a") (data (i32.const 250557) "a") (data (i32.const 250560) "a") (data (i32.const 250563) "a") (data (i32.const 250566) "a") (data (i32.const 250569) "a") (data (i32.const 250572) "a") (data (i32.const 250575) "a") (data (i32.const 250578) "a") (data (i32.const 250581) "a") (data (i32.const 250584) "a") (data (i32.const 250587) "a") (data (i32.const 250590) "a") (data (i32.const 250593) "a") (data (i32.const 250596) "a") (data (i32.const 250599) "a") (data (i32.const 250602) "a") (data (i32.const 250605) "a") (data (i32.const 250608) "a") (data (i32.const 250611) "a") (data (i32.const 250614) "a") (data (i32.const 250617) "a") (data (i32.const 250620) "a") (data (i32.const 250623) "a") (data (i32.const 250626) "a") (data (i32.const 250629) "a") (data (i32.const 250632) "a") (data (i32.const 250635) "a") (data (i32.const 250638) "a") (data (i32.const 250641) "a") (data (i32.const 250644) "a") (data (i32.const 250647) "a") (data (i32.const 250650) "a") (data (i32.const 250653) "a") (data (i32.const 250656) "a") (data (i32.const 250659) "a") (data (i32.const 250662) "a") (data (i32.const 250665) "a") (data (i32.const 250668) "a") (data (i32.const 250671) "a") (data (i32.const 250674) "a") (data (i32.const 250677) "a") (data (i32.const 250680) "a") (data (i32.const 250683) "a") (data (i32.const 250686) "a") (data (i32.const 250689) "a") (data (i32.const 250692) "a") (data (i32.const 250695) "a") (data (i32.const 250698) "a") (data (i32.const 250701) "a") (data (i32.const 250704) "a") (data (i32.const 250707) "a") (data (i32.const 250710) "a") (data (i32.const 250713) "a") (data (i32.const 250716) "a") (data (i32.const 250719) "a") (data (i32.const 250722) "a") (data (i32.const 250725) "a") (data (i32.const 250728) "a") (data (i32.const 250731) "a") (data (i32.const 250734) "a") (data (i32.const 250737) "a") (data (i32.const 250740) "a") (data (i32.const 250743) "a") (data (i32.const 250746) "a") (data (i32.const 250749) "a") (data (i32.const 250752) "a") (data (i32.const 250755) "a") (data (i32.const 250758) "a") (data (i32.const 250761) "a") (data (i32.const 250764) "a") (data (i32.const 250767) "a") (data (i32.const 250770) "a") (data (i32.const 250773) "a") (data (i32.const 250776) "a") (data (i32.const 250779) "a") (data (i32.const 250782) "a") (data (i32.const 250785) "a") (data (i32.const 250788) "a") (data (i32.const 250791) "a") (data (i32.const 250794) "a") (data (i32.const 250797) "a") (data (i32.const 250800) "a") (data (i32.const 250803) "a") (data (i32.const 250806) "a") (data (i32.const 250809) "a") (data (i32.const 250812) "a") (data (i32.const 250815) "a") (data (i32.const 250818) "a") (data (i32.const 250821) "a") (data (i32.const 250824) "a") (data (i32.const 250827) "a") (data (i32.const 250830) "a") (data (i32.const 250833) "a") (data (i32.const 250836) "a") (data (i32.const 250839) "a") (data (i32.const 250842) "a") (data (i32.const 250845) "a") (data (i32.const 250848) "a") (data (i32.const 250851) "a") (data (i32.const 250854) "a") (data (i32.const 250857) "a") (data (i32.const 250860) "a") (data (i32.const 250863) "a") (data (i32.const 250866) "a") (data (i32.const 250869) "a") (data (i32.const 250872) "a") (data (i32.const 250875) "a") (data (i32.const 250878) "a") (data (i32.const 250881) "a") (data (i32.const 250884) "a") (data (i32.const 250887) "a") (data (i32.const 250890) "a") (data (i32.const 250893) "a") (data (i32.const 250896) "a") (data (i32.const 250899) "a") (data (i32.const 250902) "a") (data (i32.const 250905) "a") (data (i32.const 250908) "a") (data (i32.const 250911) "a") (data (i32.const 250914) "a") (data (i32.const 250917) "a") (data (i32.const 250920) "a") (data (i32.const 250923) "a") (data (i32.const 250926) "a") (data (i32.const 250929) "a") (data (i32.const 250932) "a") (data (i32.const 250935) "a") (data (i32.const 250938) "a") (data (i32.const 250941) "a") (data (i32.const 250944) "a") (data (i32.const 250947) "a") (data (i32.const 250950) "a") (data (i32.const 250953) "a") (data (i32.const 250956) "a") (data (i32.const 250959) "a") (data (i32.const 250962) "a") (data (i32.const 250965) "a") (data (i32.const 250968) "a") (data (i32.const 250971) "a") (data (i32.const 250974) "a") (data (i32.const 250977) "a") (data (i32.const 250980) "a") (data (i32.const 250983) "a") (data (i32.const 250986) "a") (data (i32.const 250989) "a") (data (i32.const 250992) "a") (data (i32.const 250995) "a") (data (i32.const 250998) "a") (data (i32.const 251001) "a") (data (i32.const 251004) "a") (data (i32.const 251007) "a") (data (i32.const 251010) "a") (data (i32.const 251013) "a") (data (i32.const 251016) "a") (data (i32.const 251019) "a") (data (i32.const 251022) "a") (data (i32.const 251025) "a") (data (i32.const 251028) "a") (data (i32.const 251031) "a") (data (i32.const 251034) "a") (data (i32.const 251037) "a") (data (i32.const 251040) "a") (data (i32.const 251043) "a") (data (i32.const 251046) "a") (data (i32.const 251049) "a") (data (i32.const 251052) "a") (data (i32.const 251055) "a") (data (i32.const 251058) "a") (data (i32.const 251061) "a") (data (i32.const 251064) "a") (data (i32.const 251067) "a") (data (i32.const 251070) "a") (data (i32.const 251073) "a") (data (i32.const 251076) "a") (data (i32.const 251079) "a") (data (i32.const 251082) "a") (data (i32.const 251085) "a") (data (i32.const 251088) "a") (data (i32.const 251091) "a") (data (i32.const 251094) "a") (data (i32.const 251097) "a") (data (i32.const 251100) "a") (data (i32.const 251103) "a") (data (i32.const 251106) "a") (data (i32.const 251109) "a") (data (i32.const 251112) "a") (data (i32.const 251115) "a") (data (i32.const 251118) "a") (data (i32.const 251121) "a") (data (i32.const 251124) "a") (data (i32.const 251127) "a") (data (i32.const 251130) "a") (data (i32.const 251133) "a") (data (i32.const 251136) "a") (data (i32.const 251139) "a") (data (i32.const 251142) "a") (data (i32.const 251145) "a") (data (i32.const 251148) "a") (data (i32.const 251151) "a") (data (i32.const 251154) "a") (data (i32.const 251157) "a") (data (i32.const 251160) "a") (data (i32.const 251163) "a") (data (i32.const 251166) "a") (data (i32.const 251169) "a") (data (i32.const 251172) "a") (data (i32.const 251175) "a") (data (i32.const 251178) "a") (data (i32.const 251181) "a") (data (i32.const 251184) "a") (data (i32.const 251187) "a") (data (i32.const 251190) "a") (data (i32.const 251193) "a") (data (i32.const 251196) "a") (data (i32.const 251199) "a") (data (i32.const 251202) "a") (data (i32.const 251205) "a") (data (i32.const 251208) "a") (data (i32.const 251211) "a") (data (i32.const 251214) "a") (data (i32.const 251217) "a") (data (i32.const 251220) "a") (data (i32.const 251223) "a") (data (i32.const 251226) "a") (data (i32.const 251229) "a") (data (i32.const 251232) "a") (data (i32.const 251235) "a") (data (i32.const 251238) "a") (data (i32.const 251241) "a") (data (i32.const 251244) "a") (data (i32.const 251247) "a") (data (i32.const 251250) "a") (data (i32.const 251253) "a") (data (i32.const 251256) "a") (data (i32.const 251259) "a") (data (i32.const 251262) "a") (data (i32.const 251265) "a") (data (i32.const 251268) "a") (data (i32.const 251271) "a") (data (i32.const 251274) "a") (data (i32.const 251277) "a") (data (i32.const 251280) "a") (data (i32.const 251283) "a") (data (i32.const 251286) "a") (data (i32.const 251289) "a") (data (i32.const 251292) "a") (data (i32.const 251295) "a") (data (i32.const 251298) "a") (data (i32.const 251301) "a") (data (i32.const 251304) "a") (data (i32.const 251307) "a") (data (i32.const 251310) "a") (data (i32.const 251313) "a") (data (i32.const 251316) "a") (data (i32.const 251319) "a") (data (i32.const 251322) "a") (data (i32.const 251325) "a") (data (i32.const 251328) "a") (data (i32.const 251331) "a") (data (i32.const 251334) "a") (data (i32.const 251337) "a") (data (i32.const 251340) "a") (data (i32.const 251343) "a") (data (i32.const 251346) "a") (data (i32.const 251349) "a") (data (i32.const 251352) "a") (data (i32.const 251355) "a") (data (i32.const 251358) "a") (data (i32.const 251361) "a") (data (i32.const 251364) "a") (data (i32.const 251367) "a") (data (i32.const 251370) "a") (data (i32.const 251373) "a") (data (i32.const 251376) "a") (data (i32.const 251379) "a") (data (i32.const 251382) "a") (data (i32.const 251385) "a") (data (i32.const 251388) "a") (data (i32.const 251391) "a") (data (i32.const 251394) "a") (data (i32.const 251397) "a") (data (i32.const 251400) "a") (data (i32.const 251403) "a") (data (i32.const 251406) "a") (data (i32.const 251409) "a") (data (i32.const 251412) "a") (data (i32.const 251415) "a") (data (i32.const 251418) "a") (data (i32.const 251421) "a") (data (i32.const 251424) "a") (data (i32.const 251427) "a") (data (i32.const 251430) "a") (data (i32.const 251433) "a") (data (i32.const 251436) "a") (data (i32.const 251439) "a") (data (i32.const 251442) "a") (data (i32.const 251445) "a") (data (i32.const 251448) "a") (data (i32.const 251451) "a") (data (i32.const 251454) "a") (data (i32.const 251457) "a") (data (i32.const 251460) "a") (data (i32.const 251463) "a") (data (i32.const 251466) "a") (data (i32.const 251469) "a") (data (i32.const 251472) "a") (data (i32.const 251475) "a") (data (i32.const 251478) "a") (data (i32.const 251481) "a") (data (i32.const 251484) "a") (data (i32.const 251487) "a") (data (i32.const 251490) "a") (data (i32.const 251493) "a") (data (i32.const 251496) "a") (data (i32.const 251499) "a") (data (i32.const 251502) "a") (data (i32.const 251505) "a") (data (i32.const 251508) "a") (data (i32.const 251511) "a") (data (i32.const 251514) "a") (data (i32.const 251517) "a") (data (i32.const 251520) "a") (data (i32.const 251523) "a") (data (i32.const 251526) "a") (data (i32.const 251529) "a") (data (i32.const 251532) "a") (data (i32.const 251535) "a") (data (i32.const 251538) "a") (data (i32.const 251541) "a") (data (i32.const 251544) "a") (data (i32.const 251547) "a") (data (i32.const 251550) "a") (data (i32.const 251553) "a") (data (i32.const 251556) "a") (data (i32.const 251559) "a") (data (i32.const 251562) "a") (data (i32.const 251565) "a") (data (i32.const 251568) "a") (data (i32.const 251571) "a") (data (i32.const 251574) "a") (data (i32.const 251577) "a") (data (i32.const 251580) "a") (data (i32.const 251583) "a") (data (i32.const 251586) "a") (data (i32.const 251589) "a") (data (i32.const 251592) "a") (data (i32.const 251595) "a") (data (i32.const 251598) "a") (data (i32.const 251601) "a") (data (i32.const 251604) "a") (data (i32.const 251607) "a") (data (i32.const 251610) "a") (data (i32.const 251613) "a") (data (i32.const 251616) "a") (data (i32.const 251619) "a") (data (i32.const 251622) "a") (data (i32.const 251625) "a") (data (i32.const 251628) "a") (data (i32.const 251631) "a") (data (i32.const 251634) "a") (data (i32.const 251637) "a") (data (i32.const 251640) "a") (data (i32.const 251643) "a") (data (i32.const 251646) "a") (data (i32.const 251649) "a") (data (i32.const 251652) "a") (data (i32.const 251655) "a") (data (i32.const 251658) "a") (data (i32.const 251661) "a") (data (i32.const 251664) "a") (data (i32.const 251667) "a") (data (i32.const 251670) "a") (data (i32.const 251673) "a") (data (i32.const 251676) "a") (data (i32.const 251679) "a") (data (i32.const 251682) "a") (data (i32.const 251685) "a") (data (i32.const 251688) "a") (data (i32.const 251691) "a") (data (i32.const 251694) "a") (data (i32.const 251697) "a") (data (i32.const 251700) "a") (data (i32.const 251703) "a") (data (i32.const 251706) "a") (data (i32.const 251709) "a") (data (i32.const 251712) "a") (data (i32.const 251715) "a") (data (i32.const 251718) "a") (data (i32.const 251721) "a") (data (i32.const 251724) "a") (data (i32.const 251727) "a") (data (i32.const 251730) "a") (data (i32.const 251733) "a") (data (i32.const 251736) "a") (data (i32.const 251739) "a") (data (i32.const 251742) "a") (data (i32.const 251745) "a") (data (i32.const 251748) "a") (data (i32.const 251751) "a") (data (i32.const 251754) "a") (data (i32.const 251757) "a") (data (i32.const 251760) "a") (data (i32.const 251763) "a") (data (i32.const 251766) "a") (data (i32.const 251769) "a") (data (i32.const 251772) "a") (data (i32.const 251775) "a") (data (i32.const 251778) "a") (data (i32.const 251781) "a") (data (i32.const 251784) "a") (data (i32.const 251787) "a") (data (i32.const 251790) "a") (data (i32.const 251793) "a") (data (i32.const 251796) "a") (data (i32.const 251799) "a") (data (i32.const 251802) "a") (data (i32.const 251805) "a") (data (i32.const 251808) "a") (data (i32.const 251811) "a") (data (i32.const 251814) "a") (data (i32.const 251817) "a") (data (i32.const 251820) "a") (data (i32.const 251823) "a") (data (i32.const 251826) "a") (data (i32.const 251829) "a") (data (i32.const 251832) "a") (data (i32.const 251835) "a") (data (i32.const 251838) "a") (data (i32.const 251841) "a") (data (i32.const 251844) "a") (data (i32.const 251847) "a") (data (i32.const 251850) "a") (data (i32.const 251853) "a") (data (i32.const 251856) "a") (data (i32.const 251859) "a") (data (i32.const 251862) "a") (data (i32.const 251865) "a") (data (i32.const 251868) "a") (data (i32.const 251871) "a") (data (i32.const 251874) "a") (data (i32.const 251877) "a") (data (i32.const 251880) "a") (data (i32.const 251883) "a") (data (i32.const 251886) "a") (data (i32.const 251889) "a") (data (i32.const 251892) "a") (data (i32.const 251895) "a") (data (i32.const 251898) "a") (data (i32.const 251901) "a") (data (i32.const 251904) "a") (data (i32.const 251907) "a") (data (i32.const 251910) "a") (data (i32.const 251913) "a") (data (i32.const 251916) "a") (data (i32.const 251919) "a") (data (i32.const 251922) "a") (data (i32.const 251925) "a") (data (i32.const 251928) "a") (data (i32.const 251931) "a") (data (i32.const 251934) "a") (data (i32.const 251937) "a") (data (i32.const 251940) "a") (data (i32.const 251943) "a") (data (i32.const 251946) "a") (data (i32.const 251949) "a") (data (i32.const 251952) "a") (data (i32.const 251955) "a") (data (i32.const 251958) "a") (data (i32.const 251961) "a") (data (i32.const 251964) "a") (data (i32.const 251967) "a") (data (i32.const 251970) "a") (data (i32.const 251973) "a") (data (i32.const 251976) "a") (data (i32.const 251979) "a") (data (i32.const 251982) "a") (data (i32.const 251985) "a") (data (i32.const 251988) "a") (data (i32.const 251991) "a") (data (i32.const 251994) "a") (data (i32.const 251997) "a") (data (i32.const 252000) "a") (data (i32.const 252003) "a") (data (i32.const 252006) "a") (data (i32.const 252009) "a") (data (i32.const 252012) "a") (data (i32.const 252015) "a") (data (i32.const 252018) "a") (data (i32.const 252021) "a") (data (i32.const 252024) "a") (data (i32.const 252027) "a") (data (i32.const 252030) "a") (data (i32.const 252033) "a") (data (i32.const 252036) "a") (data (i32.const 252039) "a") (data (i32.const 252042) "a") (data (i32.const 252045) "a") (data (i32.const 252048) "a") (data (i32.const 252051) "a") (data (i32.const 252054) "a") (data (i32.const 252057) "a") (data (i32.const 252060) "a") (data (i32.const 252063) "a") (data (i32.const 252066) "a") (data (i32.const 252069) "a") (data (i32.const 252072) "a") (data (i32.const 252075) "a") (data (i32.const 252078) "a") (data (i32.const 252081) "a") (data (i32.const 252084) "a") (data (i32.const 252087) "a") (data (i32.const 252090) "a") (data (i32.const 252093) "a") (data (i32.const 252096) "a") (data (i32.const 252099) "a") (data (i32.const 252102) "a") (data (i32.const 252105) "a") (data (i32.const 252108) "a") (data (i32.const 252111) "a") (data (i32.const 252114) "a") (data (i32.const 252117) "a") (data (i32.const 252120) "a") (data (i32.const 252123) "a") (data (i32.const 252126) "a") (data (i32.const 252129) "a") (data (i32.const 252132) "a") (data (i32.const 252135) "a") (data (i32.const 252138) "a") (data (i32.const 252141) "a") (data (i32.const 252144) "a") (data (i32.const 252147) "a") (data (i32.const 252150) "a") (data (i32.const 252153) "a") (data (i32.const 252156) "a") (data (i32.const 252159) "a") (data (i32.const 252162) "a") (data (i32.const 252165) "a") (data (i32.const 252168) "a") (data (i32.const 252171) "a") (data (i32.const 252174) "a") (data (i32.const 252177) "a") (data (i32.const 252180) "a") (data (i32.const 252183) "a") (data (i32.const 252186) "a") (data (i32.const 252189) "a") (data (i32.const 252192) "a") (data (i32.const 252195) "a") (data (i32.const 252198) "a") (data (i32.const 252201) "a") (data (i32.const 252204) "a") (data (i32.const 252207) "a") (data (i32.const 252210) "a") (data (i32.const 252213) "a") (data (i32.const 252216) "a") (data (i32.const 252219) "a") (data (i32.const 252222) "a") (data (i32.const 252225) "a") (data (i32.const 252228) "a") (data (i32.const 252231) "a") (data (i32.const 252234) "a") (data (i32.const 252237) "a") (data (i32.const 252240) "a") (data (i32.const 252243) "a") (data (i32.const 252246) "a") (data (i32.const 252249) "a") (data (i32.const 252252) "a") (data (i32.const 252255) "a") (data (i32.const 252258) "a") (data (i32.const 252261) "a") (data (i32.const 252264) "a") (data (i32.const 252267) "a") (data (i32.const 252270) "a") (data (i32.const 252273) "a") (data (i32.const 252276) "a") (data (i32.const 252279) "a") (data (i32.const 252282) "a") (data (i32.const 252285) "a") (data (i32.const 252288) "a") (data (i32.const 252291) "a") (data (i32.const 252294) "a") (data (i32.const 252297) "a") (data (i32.const 252300) "a") (data (i32.const 252303) "a") (data (i32.const 252306) "a") (data (i32.const 252309) "a") (data (i32.const 252312) "a") (data (i32.const 252315) "a") (data (i32.const 252318) "a") (data (i32.const 252321) "a") (data (i32.const 252324) "a") (data (i32.const 252327) "a") (data (i32.const 252330) "a") (data (i32.const 252333) "a") (data (i32.const 252336) "a") (data (i32.const 252339) "a") (data (i32.const 252342) "a") (data (i32.const 252345) "a") (data (i32.const 252348) "a") (data (i32.const 252351) "a") (data (i32.const 252354) "a") (data (i32.const 252357) "a") (data (i32.const 252360) "a") (data (i32.const 252363) "a") (data (i32.const 252366) "a") (data (i32.const 252369) "a") (data (i32.const 252372) "a") (data (i32.const 252375) "a") (data (i32.const 252378) "a") (data (i32.const 252381) "a") (data (i32.const 252384) "a") (data (i32.const 252387) "a") (data (i32.const 252390) "a") (data (i32.const 252393) "a") (data (i32.const 252396) "a") (data (i32.const 252399) "a") (data (i32.const 252402) "a") (data (i32.const 252405) "a") (data (i32.const 252408) "a") (data (i32.const 252411) "a") (data (i32.const 252414) "a") (data (i32.const 252417) "a") (data (i32.const 252420) "a") (data (i32.const 252423) "a") (data (i32.const 252426) "a") (data (i32.const 252429) "a") (data (i32.const 252432) "a") (data (i32.const 252435) "a") (data (i32.const 252438) "a") (data (i32.const 252441) "a") (data (i32.const 252444) "a") (data (i32.const 252447) "a") (data (i32.const 252450) "a") (data (i32.const 252453) "a") (data (i32.const 252456) "a") (data (i32.const 252459) "a") (data (i32.const 252462) "a") (data (i32.const 252465) "a") (data (i32.const 252468) "a") (data (i32.const 252471) "a") (data (i32.const 252474) "a") (data (i32.const 252477) "a") (data (i32.const 252480) "a") (data (i32.const 252483) "a") (data (i32.const 252486) "a") (data (i32.const 252489) "a") (data (i32.const 252492) "a") (data (i32.const 252495) "a") (data (i32.const 252498) "a") (data (i32.const 252501) "a") (data (i32.const 252504) "a") (data (i32.const 252507) "a") (data (i32.const 252510) "a") (data (i32.const 252513) "a") (data (i32.const 252516) "a") (data (i32.const 252519) "a") (data (i32.const 252522) "a") (data (i32.const 252525) "a") (data (i32.const 252528) "a") (data (i32.const 252531) "a") (data (i32.const 252534) "a") (data (i32.const 252537) "a") (data (i32.const 252540) "a") (data (i32.const 252543) "a") (data (i32.const 252546) "a") (data (i32.const 252549) "a") (data (i32.const 252552) "a") (data (i32.const 252555) "a") (data (i32.const 252558) "a") (data (i32.const 252561) "a") (data (i32.const 252564) "a") (data (i32.const 252567) "a") (data (i32.const 252570) "a") (data (i32.const 252573) "a") (data (i32.const 252576) "a") (data (i32.const 252579) "a") (data (i32.const 252582) "a") (data (i32.const 252585) "a") (data (i32.const 252588) "a") (data (i32.const 252591) "a") (data (i32.const 252594) "a") (data (i32.const 252597) "a") (data (i32.const 252600) "a") (data (i32.const 252603) "a") (data (i32.const 252606) "a") (data (i32.const 252609) "a") (data (i32.const 252612) "a") (data (i32.const 252615) "a") (data (i32.const 252618) "a") (data (i32.const 252621) "a") (data (i32.const 252624) "a") (data (i32.const 252627) "a") (data (i32.const 252630) "a") (data (i32.const 252633) "a") (data (i32.const 252636) "a") (data (i32.const 252639) "a") (data (i32.const 252642) "a") (data (i32.const 252645) "a") (data (i32.const 252648) "a") (data (i32.const 252651) "a") (data (i32.const 252654) "a") (data (i32.const 252657) "a") (data (i32.const 252660) "a") (data (i32.const 252663) "a") (data (i32.const 252666) "a") (data (i32.const 252669) "a") (data (i32.const 252672) "a") (data (i32.const 252675) "a") (data (i32.const 252678) "a") (data (i32.const 252681) "a") (data (i32.const 252684) "a") (data (i32.const 252687) "a") (data (i32.const 252690) "a") (data (i32.const 252693) "a") (data (i32.const 252696) "a") (data (i32.const 252699) "a") (data (i32.const 252702) "a") (data (i32.const 252705) "a") (data (i32.const 252708) "a") (data (i32.const 252711) "a") (data (i32.const 252714) "a") (data (i32.const 252717) "a") (data (i32.const 252720) "a") (data (i32.const 252723) "a") (data (i32.const 252726) "a") (data (i32.const 252729) "a") (data (i32.const 252732) "a") (data (i32.const 252735) "a") (data (i32.const 252738) "a") (data (i32.const 252741) "a") (data (i32.const 252744) "a") (data (i32.const 252747) "a") (data (i32.const 252750) "a") (data (i32.const 252753) "a") (data (i32.const 252756) "a") (data (i32.const 252759) "a") (data (i32.const 252762) "a") (data (i32.const 252765) "a") (data (i32.const 252768) "a") (data (i32.const 252771) "a") (data (i32.const 252774) "a") (data (i32.const 252777) "a") (data (i32.const 252780) "a") (data (i32.const 252783) "a") (data (i32.const 252786) "a") (data (i32.const 252789) "a") (data (i32.const 252792) "a") (data (i32.const 252795) "a") (data (i32.const 252798) "a") (data (i32.const 252801) "a") (data (i32.const 252804) "a") (data (i32.const 252807) "a") (data (i32.const 252810) "a") (data (i32.const 252813) "a") (data (i32.const 252816) "a") (data (i32.const 252819) "a") (data (i32.const 252822) "a") (data (i32.const 252825) "a") (data (i32.const 252828) "a") (data (i32.const 252831) "a") (data (i32.const 252834) "a") (data (i32.const 252837) "a") (data (i32.const 252840) "a") (data (i32.const 252843) "a") (data (i32.const 252846) "a") (data (i32.const 252849) "a") (data (i32.const 252852) "a") (data (i32.const 252855) "a") (data (i32.const 252858) "a") (data (i32.const 252861) "a") (data (i32.const 252864) "a") (data (i32.const 252867) "a") (data (i32.const 252870) "a") (data (i32.const 252873) "a") (data (i32.const 252876) "a") (data (i32.const 252879) "a") (data (i32.const 252882) "a") (data (i32.const 252885) "a") (data (i32.const 252888) "a") (data (i32.const 252891) "a") (data (i32.const 252894) "a") (data (i32.const 252897) "a") (data (i32.const 252900) "a") (data (i32.const 252903) "a") (data (i32.const 252906) "a") (data (i32.const 252909) "a") (data (i32.const 252912) "a") (data (i32.const 252915) "a") (data (i32.const 252918) "a") (data (i32.const 252921) "a") (data (i32.const 252924) "a") (data (i32.const 252927) "a") (data (i32.const 252930) "a") (data (i32.const 252933) "a") (data (i32.const 252936) "a") (data (i32.const 252939) "a") (data (i32.const 252942) "a") (data (i32.const 252945) "a") (data (i32.const 252948) "a") (data (i32.const 252951) "a") (data (i32.const 252954) "a") (data (i32.const 252957) "a") (data (i32.const 252960) "a") (data (i32.const 252963) "a") (data (i32.const 252966) "a") (data (i32.const 252969) "a") (data (i32.const 252972) "a") (data (i32.const 252975) "a") (data (i32.const 252978) "a") (data (i32.const 252981) "a") (data (i32.const 252984) "a") (data (i32.const 252987) "a") (data (i32.const 252990) "a") (data (i32.const 252993) "a") (data (i32.const 252996) "a") (data (i32.const 252999) "a") (data (i32.const 253002) "a") (data (i32.const 253005) "a") (data (i32.const 253008) "a") (data (i32.const 253011) "a") (data (i32.const 253014) "a") (data (i32.const 253017) "a") (data (i32.const 253020) "a") (data (i32.const 253023) "a") (data (i32.const 253026) "a") (data (i32.const 253029) "a") (data (i32.const 253032) "a") (data (i32.const 253035) "a") (data (i32.const 253038) "a") (data (i32.const 253041) "a") (data (i32.const 253044) "a") (data (i32.const 253047) "a") (data (i32.const 253050) "a") (data (i32.const 253053) "a") (data (i32.const 253056) "a") (data (i32.const 253059) "a") (data (i32.const 253062) "a") (data (i32.const 253065) "a") (data (i32.const 253068) "a") (data (i32.const 253071) "a") (data (i32.const 253074) "a") (data (i32.const 253077) "a") (data (i32.const 253080) "a") (data (i32.const 253083) "a") (data (i32.const 253086) "a") (data (i32.const 253089) "a") (data (i32.const 253092) "a") (data (i32.const 253095) "a") (data (i32.const 253098) "a") (data (i32.const 253101) "a") (data (i32.const 253104) "a") (data (i32.const 253107) "a") (data (i32.const 253110) "a") (data (i32.const 253113) "a") (data (i32.const 253116) "a") (data (i32.const 253119) "a") (data (i32.const 253122) "a") (data (i32.const 253125) "a") (data (i32.const 253128) "a") (data (i32.const 253131) "a") (data (i32.const 253134) "a") (data (i32.const 253137) "a") (data (i32.const 253140) "a") (data (i32.const 253143) "a") (data (i32.const 253146) "a") (data (i32.const 253149) "a") (data (i32.const 253152) "a") (data (i32.const 253155) "a") (data (i32.const 253158) "a") (data (i32.const 253161) "a") (data (i32.const 253164) "a") (data (i32.const 253167) "a") (data (i32.const 253170) "a") (data (i32.const 253173) "a") (data (i32.const 253176) "a") (data (i32.const 253179) "a") (data (i32.const 253182) "a") (data (i32.const 253185) "a") (data (i32.const 253188) "a") (data (i32.const 253191) "a") (data (i32.const 253194) "a") (data (i32.const 253197) "a") (data (i32.const 253200) "a") (data (i32.const 253203) "a") (data (i32.const 253206) "a") (data (i32.const 253209) "a") (data (i32.const 253212) "a") (data (i32.const 253215) "a") (data (i32.const 253218) "a") (data (i32.const 253221) "a") (data (i32.const 253224) "a") (data (i32.const 253227) "a") (data (i32.const 253230) "a") (data (i32.const 253233) "a") (data (i32.const 253236) "a") (data (i32.const 253239) "a") (data (i32.const 253242) "a") (data (i32.const 253245) "a") (data (i32.const 253248) "a") (data (i32.const 253251) "a") (data (i32.const 253254) "a") (data (i32.const 253257) "a") (data (i32.const 253260) "a") (data (i32.const 253263) "a") (data (i32.const 253266) "a") (data (i32.const 253269) "a") (data (i32.const 253272) "a") (data (i32.const 253275) "a") (data (i32.const 253278) "a") (data (i32.const 253281) "a") (data (i32.const 253284) "a") (data (i32.const 253287) "a") (data (i32.const 253290) "a") (data (i32.const 253293) "a") (data (i32.const 253296) "a") (data (i32.const 253299) "a") (data (i32.const 253302) "a") (data (i32.const 253305) "a") (data (i32.const 253308) "a") (data (i32.const 253311) "a") (data (i32.const 253314) "a") (data (i32.const 253317) "a") (data (i32.const 253320) "a") (data (i32.const 253323) "a") (data (i32.const 253326) "a") (data (i32.const 253329) "a") (data (i32.const 253332) "a") (data (i32.const 253335) "a") (data (i32.const 253338) "a") (data (i32.const 253341) "a") (data (i32.const 253344) "a") (data (i32.const 253347) "a") (data (i32.const 253350) "a") (data (i32.const 253353) "a") (data (i32.const 253356) "a") (data (i32.const 253359) "a") (data (i32.const 253362) "a") (data (i32.const 253365) "a") (data (i32.const 253368) "a") (data (i32.const 253371) "a") (data (i32.const 253374) "a") (data (i32.const 253377) "a") (data (i32.const 253380) "a") (data (i32.const 253383) "a") (data (i32.const 253386) "a") (data (i32.const 253389) "a") (data (i32.const 253392) "a") (data (i32.const 253395) "a") (data (i32.const 253398) "a") (data (i32.const 253401) "a") (data (i32.const 253404) "a") (data (i32.const 253407) "a") (data (i32.const 253410) "a") (data (i32.const 253413) "a") (data (i32.const 253416) "a") (data (i32.const 253419) "a") (data (i32.const 253422) "a") (data (i32.const 253425) "a") (data (i32.const 253428) "a") (data (i32.const 253431) "a") (data (i32.const 253434) "a") (data (i32.const 253437) "a") (data (i32.const 253440) "a") (data (i32.const 253443) "a") (data (i32.const 253446) "a") (data (i32.const 253449) "a") (data (i32.const 253452) "a") (data (i32.const 253455) "a") (data (i32.const 253458) "a") (data (i32.const 253461) "a") (data (i32.const 253464) "a") (data (i32.const 253467) "a") (data (i32.const 253470) "a") (data (i32.const 253473) "a") (data (i32.const 253476) "a") (data (i32.const 253479) "a") (data (i32.const 253482) "a") (data (i32.const 253485) "a") (data (i32.const 253488) "a") (data (i32.const 253491) "a") (data (i32.const 253494) "a") (data (i32.const 253497) "a") (data (i32.const 253500) "a") (data (i32.const 253503) "a") (data (i32.const 253506) "a") (data (i32.const 253509) "a") (data (i32.const 253512) "a") (data (i32.const 253515) "a") (data (i32.const 253518) "a") (data (i32.const 253521) "a") (data (i32.const 253524) "a") (data (i32.const 253527) "a") (data (i32.const 253530) "a") (data (i32.const 253533) "a") (data (i32.const 253536) "a") (data (i32.const 253539) "a") (data (i32.const 253542) "a") (data (i32.const 253545) "a") (data (i32.const 253548) "a") (data (i32.const 253551) "a") (data (i32.const 253554) "a") (data (i32.const 253557) "a") (data (i32.const 253560) "a") (data (i32.const 253563) "a") (data (i32.const 253566) "a") (data (i32.const 253569) "a") (data (i32.const 253572) "a") (data (i32.const 253575) "a") (data (i32.const 253578) "a") (data (i32.const 253581) "a") (data (i32.const 253584) "a") (data (i32.const 253587) "a") (data (i32.const 253590) "a") (data (i32.const 253593) "a") (data (i32.const 253596) "a") (data (i32.const 253599) "a") (data (i32.const 253602) "a") (data (i32.const 253605) "a") (data (i32.const 253608) "a") (data (i32.const 253611) "a") (data (i32.const 253614) "a") (data (i32.const 253617) "a") (data (i32.const 253620) "a") (data (i32.const 253623) "a") (data (i32.const 253626) "a") (data (i32.const 253629) "a") (data (i32.const 253632) "a") (data (i32.const 253635) "a") (data (i32.const 253638) "a") (data (i32.const 253641) "a") (data (i32.const 253644) "a") (data (i32.const 253647) "a") (data (i32.const 253650) "a") (data (i32.const 253653) "a") (data (i32.const 253656) "a") (data (i32.const 253659) "a") (data (i32.const 253662) "a") (data (i32.const 253665) "a") (data (i32.const 253668) "a") (data (i32.const 253671) "a") (data (i32.const 253674) "a") (data (i32.const 253677) "a") (data (i32.const 253680) "a") (data (i32.const 253683) "a") (data (i32.const 253686) "a") (data (i32.const 253689) "a") (data (i32.const 253692) "a") (data (i32.const 253695) "a") (data (i32.const 253698) "a") (data (i32.const 253701) "a") (data (i32.const 253704) "a") (data (i32.const 253707) "a") (data (i32.const 253710) "a") (data (i32.const 253713) "a") (data (i32.const 253716) "a") (data (i32.const 253719) "a") (data (i32.const 253722) "a") (data (i32.const 253725) "a") (data (i32.const 253728) "a") (data (i32.const 253731) "a") (data (i32.const 253734) "a") (data (i32.const 253737) "a") (data (i32.const 253740) "a") (data (i32.const 253743) "a") (data (i32.const 253746) "a") (data (i32.const 253749) "a") (data (i32.const 253752) "a") (data (i32.const 253755) "a") (data (i32.const 253758) "a") (data (i32.const 253761) "a") (data (i32.const 253764) "a") (data (i32.const 253767) "a") (data (i32.const 253770) "a") (data (i32.const 253773) "a") (data (i32.const 253776) "a") (data (i32.const 253779) "a") (data (i32.const 253782) "a") (data (i32.const 253785) "a") (data (i32.const 253788) "a") (data (i32.const 253791) "a") (data (i32.const 253794) "a") (data (i32.const 253797) "a") (data (i32.const 253800) "a") (data (i32.const 253803) "a") (data (i32.const 253806) "a") (data (i32.const 253809) "a") (data (i32.const 253812) "a") (data (i32.const 253815) "a") (data (i32.const 253818) "a") (data (i32.const 253821) "a") (data (i32.const 253824) "a") (data (i32.const 253827) "a") (data (i32.const 253830) "a") (data (i32.const 253833) "a") (data (i32.const 253836) "a") (data (i32.const 253839) "a") (data (i32.const 253842) "a") (data (i32.const 253845) "a") (data (i32.const 253848) "a") (data (i32.const 253851) "a") (data (i32.const 253854) "a") (data (i32.const 253857) "a") (data (i32.const 253860) "a") (data (i32.const 253863) "a") (data (i32.const 253866) "a") (data (i32.const 253869) "a") (data (i32.const 253872) "a") (data (i32.const 253875) "a") (data (i32.const 253878) "a") (data (i32.const 253881) "a") (data (i32.const 253884) "a") (data (i32.const 253887) "a") (data (i32.const 253890) "a") (data (i32.const 253893) "a") (data (i32.const 253896) "a") (data (i32.const 253899) "a") (data (i32.const 253902) "a") (data (i32.const 253905) "a") (data (i32.const 253908) "a") (data (i32.const 253911) "a") (data (i32.const 253914) "a") (data (i32.const 253917) "a") (data (i32.const 253920) "a") (data (i32.const 253923) "a") (data (i32.const 253926) "a") (data (i32.const 253929) "a") (data (i32.const 253932) "a") (data (i32.const 253935) "a") (data (i32.const 253938) "a") (data (i32.const 253941) "a") (data (i32.const 253944) "a") (data (i32.const 253947) "a") (data (i32.const 253950) "a") (data (i32.const 253953) "a") (data (i32.const 253956) "a") (data (i32.const 253959) "a") (data (i32.const 253962) "a") (data (i32.const 253965) "a") (data (i32.const 253968) "a") (data (i32.const 253971) "a") (data (i32.const 253974) "a") (data (i32.const 253977) "a") (data (i32.const 253980) "a") (data (i32.const 253983) "a") (data (i32.const 253986) "a") (data (i32.const 253989) "a") (data (i32.const 253992) "a") (data (i32.const 253995) "a") (data (i32.const 253998) "a") (data (i32.const 254001) "a") (data (i32.const 254004) "a") (data (i32.const 254007) "a") (data (i32.const 254010) "a") (data (i32.const 254013) "a") (data (i32.const 254016) "a") (data (i32.const 254019) "a") (data (i32.const 254022) "a") (data (i32.const 254025) "a") (data (i32.const 254028) "a") (data (i32.const 254031) "a") (data (i32.const 254034) "a") (data (i32.const 254037) "a") (data (i32.const 254040) "a") (data (i32.const 254043) "a") (data (i32.const 254046) "a") (data (i32.const 254049) "a") (data (i32.const 254052) "a") (data (i32.const 254055) "a") (data (i32.const 254058) "a") (data (i32.const 254061) "a") (data (i32.const 254064) "a") (data (i32.const 254067) "a") (data (i32.const 254070) "a") (data (i32.const 254073) "a") (data (i32.const 254076) "a") (data (i32.const 254079) "a") (data (i32.const 254082) "a") (data (i32.const 254085) "a") (data (i32.const 254088) "a") (data (i32.const 254091) "a") (data (i32.const 254094) "a") (data (i32.const 254097) "a") (data (i32.const 254100) "a") (data (i32.const 254103) "a") (data (i32.const 254106) "a") (data (i32.const 254109) "a") (data (i32.const 254112) "a") (data (i32.const 254115) "a") (data (i32.const 254118) "a") (data (i32.const 254121) "a") (data (i32.const 254124) "a") (data (i32.const 254127) "a") (data (i32.const 254130) "a") (data (i32.const 254133) "a") (data (i32.const 254136) "a") (data (i32.const 254139) "a") (data (i32.const 254142) "a") (data (i32.const 254145) "a") (data (i32.const 254148) "a") (data (i32.const 254151) "a") (data (i32.const 254154) "a") (data (i32.const 254157) "a") (data (i32.const 254160) "a") (data (i32.const 254163) "a") (data (i32.const 254166) "a") (data (i32.const 254169) "a") (data (i32.const 254172) "a") (data (i32.const 254175) "a") (data (i32.const 254178) "a") (data (i32.const 254181) "a") (data (i32.const 254184) "a") (data (i32.const 254187) "a") (data (i32.const 254190) "a") (data (i32.const 254193) "a") (data (i32.const 254196) "a") (data (i32.const 254199) "a") (data (i32.const 254202) "a") (data (i32.const 254205) "a") (data (i32.const 254208) "a") (data (i32.const 254211) "a") (data (i32.const 254214) "a") (data (i32.const 254217) "a") (data (i32.const 254220) "a") (data (i32.const 254223) "a") (data (i32.const 254226) "a") (data (i32.const 254229) "a") (data (i32.const 254232) "a") (data (i32.const 254235) "a") (data (i32.const 254238) "a") (data (i32.const 254241) "a") (data (i32.const 254244) "a") (data (i32.const 254247) "a") (data (i32.const 254250) "a") (data (i32.const 254253) "a") (data (i32.const 254256) "a") (data (i32.const 254259) "a") (data (i32.const 254262) "a") (data (i32.const 254265) "a") (data (i32.const 254268) "a") (data (i32.const 254271) "a") (data (i32.const 254274) "a") (data (i32.const 254277) "a") (data (i32.const 254280) "a") (data (i32.const 254283) "a") (data (i32.const 254286) "a") (data (i32.const 254289) "a") (data (i32.const 254292) "a") (data (i32.const 254295) "a") (data (i32.const 254298) "a") (data (i32.const 254301) "a") (data (i32.const 254304) "a") (data (i32.const 254307) "a") (data (i32.const 254310) "a") (data (i32.const 254313) "a") (data (i32.const 254316) "a") (data (i32.const 254319) "a") (data (i32.const 254322) "a") (data (i32.const 254325) "a") (data (i32.const 254328) "a") (data (i32.const 254331) "a") (data (i32.const 254334) "a") (data (i32.const 254337) "a") (data (i32.const 254340) "a") (data (i32.const 254343) "a") (data (i32.const 254346) "a") (data (i32.const 254349) "a") (data (i32.const 254352) "a") (data (i32.const 254355) "a") (data (i32.const 254358) "a") (data (i32.const 254361) "a") (data (i32.const 254364) "a") (data (i32.const 254367) "a") (data (i32.const 254370) "a") (data (i32.const 254373) "a") (data (i32.const 254376) "a") (data (i32.const 254379) "a") (data (i32.const 254382) "a") (data (i32.const 254385) "a") (data (i32.const 254388) "a") (data (i32.const 254391) "a") (data (i32.const 254394) "a") (data (i32.const 254397) "a") (data (i32.const 254400) "a") (data (i32.const 254403) "a") (data (i32.const 254406) "a") (data (i32.const 254409) "a") (data (i32.const 254412) "a") (data (i32.const 254415) "a") (data (i32.const 254418) "a") (data (i32.const 254421) "a") (data (i32.const 254424) "a") (data (i32.const 254427) "a") (data (i32.const 254430) "a") (data (i32.const 254433) "a") (data (i32.const 254436) "a") (data (i32.const 254439) "a") (data (i32.const 254442) "a") (data (i32.const 254445) "a") (data (i32.const 254448) "a") (data (i32.const 254451) "a") (data (i32.const 254454) "a") (data (i32.const 254457) "a") (data (i32.const 254460) "a") (data (i32.const 254463) "a") (data (i32.const 254466) "a") (data (i32.const 254469) "a") (data (i32.const 254472) "a") (data (i32.const 254475) "a") (data (i32.const 254478) "a") (data (i32.const 254481) "a") (data (i32.const 254484) "a") (data (i32.const 254487) "a") (data (i32.const 254490) "a") (data (i32.const 254493) "a") (data (i32.const 254496) "a") (data (i32.const 254499) "a") (data (i32.const 254502) "a") (data (i32.const 254505) "a") (data (i32.const 254508) "a") (data (i32.const 254511) "a") (data (i32.const 254514) "a") (data (i32.const 254517) "a") (data (i32.const 254520) "a") (data (i32.const 254523) "a") (data (i32.const 254526) "a") (data (i32.const 254529) "a") (data (i32.const 254532) "a") (data (i32.const 254535) "a") (data (i32.const 254538) "a") (data (i32.const 254541) "a") (data (i32.const 254544) "a") (data (i32.const 254547) "a") (data (i32.const 254550) "a") (data (i32.const 254553) "a") (data (i32.const 254556) "a") (data (i32.const 254559) "a") (data (i32.const 254562) "a") (data (i32.const 254565) "a") (data (i32.const 254568) "a") (data (i32.const 254571) "a") (data (i32.const 254574) "a") (data (i32.const 254577) "a") (data (i32.const 254580) "a") (data (i32.const 254583) "a") (data (i32.const 254586) "a") (data (i32.const 254589) "a") (data (i32.const 254592) "a") (data (i32.const 254595) "a") (data (i32.const 254598) "a") (data (i32.const 254601) "a") (data (i32.const 254604) "a") (data (i32.const 254607) "a") (data (i32.const 254610) "a") (data (i32.const 254613) "a") (data (i32.const 254616) "a") (data (i32.const 254619) "a") (data (i32.const 254622) "a") (data (i32.const 254625) "a") (data (i32.const 254628) "a") (data (i32.const 254631) "a") (data (i32.const 254634) "a") (data (i32.const 254637) "a") (data (i32.const 254640) "a") (data (i32.const 254643) "a") (data (i32.const 254646) "a") (data (i32.const 254649) "a") (data (i32.const 254652) "a") (data (i32.const 254655) "a") (data (i32.const 254658) "a") (data (i32.const 254661) "a") (data (i32.const 254664) "a") (data (i32.const 254667) "a") (data (i32.const 254670) "a") (data (i32.const 254673) "a") (data (i32.const 254676) "a") (data (i32.const 254679) "a") (data (i32.const 254682) "a") (data (i32.const 254685) "a") (data (i32.const 254688) "a") (data (i32.const 254691) "a") (data (i32.const 254694) "a") (data (i32.const 254697) "a") (data (i32.const 254700) "a") (data (i32.const 254703) "a") (data (i32.const 254706) "a") (data (i32.const 254709) "a") (data (i32.const 254712) "a") (data (i32.const 254715) "a") (data (i32.const 254718) "a") (data (i32.const 254721) "a") (data (i32.const 254724) "a") (data (i32.const 254727) "a") (data (i32.const 254730) "a") (data (i32.const 254733) "a") (data (i32.const 254736) "a") (data (i32.const 254739) "a") (data (i32.const 254742) "a") (data (i32.const 254745) "a") (data (i32.const 254748) "a") (data (i32.const 254751) "a") (data (i32.const 254754) "a") (data (i32.const 254757) "a") (data (i32.const 254760) "a") (data (i32.const 254763) "a") (data (i32.const 254766) "a") (data (i32.const 254769) "a") (data (i32.const 254772) "a") (data (i32.const 254775) "a") (data (i32.const 254778) "a") (data (i32.const 254781) "a") (data (i32.const 254784) "a") (data (i32.const 254787) "a") (data (i32.const 254790) "a") (data (i32.const 254793) "a") (data (i32.const 254796) "a") (data (i32.const 254799) "a") (data (i32.const 254802) "a") (data (i32.const 254805) "a") (data (i32.const 254808) "a") (data (i32.const 254811) "a") (data (i32.const 254814) "a") (data (i32.const 254817) "a") (data (i32.const 254820) "a") (data (i32.const 254823) "a") (data (i32.const 254826) "a") (data (i32.const 254829) "a") (data (i32.const 254832) "a") (data (i32.const 254835) "a") (data (i32.const 254838) "a") (data (i32.const 254841) "a") (data (i32.const 254844) "a") (data (i32.const 254847) "a") (data (i32.const 254850) "a") (data (i32.const 254853) "a") (data (i32.const 254856) "a") (data (i32.const 254859) "a") (data (i32.const 254862) "a") (data (i32.const 254865) "a") (data (i32.const 254868) "a") (data (i32.const 254871) "a") (data (i32.const 254874) "a") (data (i32.const 254877) "a") (data (i32.const 254880) "a") (data (i32.const 254883) "a") (data (i32.const 254886) "a") (data (i32.const 254889) "a") (data (i32.const 254892) "a") (data (i32.const 254895) "a") (data (i32.const 254898) "a") (data (i32.const 254901) "a") (data (i32.const 254904) "a") (data (i32.const 254907) "a") (data (i32.const 254910) "a") (data (i32.const 254913) "a") (data (i32.const 254916) "a") (data (i32.const 254919) "a") (data (i32.const 254922) "a") (data (i32.const 254925) "a") (data (i32.const 254928) "a") (data (i32.const 254931) "a") (data (i32.const 254934) "a") (data (i32.const 254937) "a") (data (i32.const 254940) "a") (data (i32.const 254943) "a") (data (i32.const 254946) "a") (data (i32.const 254949) "a") (data (i32.const 254952) "a") (data (i32.const 254955) "a") (data (i32.const 254958) "a") (data (i32.const 254961) "a") (data (i32.const 254964) "a") (data (i32.const 254967) "a") (data (i32.const 254970) "a") (data (i32.const 254973) "a") (data (i32.const 254976) "a") (data (i32.const 254979) "a") (data (i32.const 254982) "a") (data (i32.const 254985) "a") (data (i32.const 254988) "a") (data (i32.const 254991) "a") (data (i32.const 254994) "a") (data (i32.const 254997) "a") (data (i32.const 255000) "a") (data (i32.const 255003) "a") (data (i32.const 255006) "a") (data (i32.const 255009) "a") (data (i32.const 255012) "a") (data (i32.const 255015) "a") (data (i32.const 255018) "a") (data (i32.const 255021) "a") (data (i32.const 255024) "a") (data (i32.const 255027) "a") (data (i32.const 255030) "a") (data (i32.const 255033) "a") (data (i32.const 255036) "a") (data (i32.const 255039) "a") (data (i32.const 255042) "a") (data (i32.const 255045) "a") (data (i32.const 255048) "a") (data (i32.const 255051) "a") (data (i32.const 255054) "a") (data (i32.const 255057) "a") (data (i32.const 255060) "a") (data (i32.const 255063) "a") (data (i32.const 255066) "a") (data (i32.const 255069) "a") (data (i32.const 255072) "a") (data (i32.const 255075) "a") (data (i32.const 255078) "a") (data (i32.const 255081) "a") (data (i32.const 255084) "a") (data (i32.const 255087) "a") (data (i32.const 255090) "a") (data (i32.const 255093) "a") (data (i32.const 255096) "a") (data (i32.const 255099) "a") (data (i32.const 255102) "a") (data (i32.const 255105) "a") (data (i32.const 255108) "a") (data (i32.const 255111) "a") (data (i32.const 255114) "a") (data (i32.const 255117) "a") (data (i32.const 255120) "a") (data (i32.const 255123) "a") (data (i32.const 255126) "a") (data (i32.const 255129) "a") (data (i32.const 255132) "a") (data (i32.const 255135) "a") (data (i32.const 255138) "a") (data (i32.const 255141) "a") (data (i32.const 255144) "a") (data (i32.const 255147) "a") (data (i32.const 255150) "a") (data (i32.const 255153) "a") (data (i32.const 255156) "a") (data (i32.const 255159) "a") (data (i32.const 255162) "a") (data (i32.const 255165) "a") (data (i32.const 255168) "a") (data (i32.const 255171) "a") (data (i32.const 255174) "a") (data (i32.const 255177) "a") (data (i32.const 255180) "a") (data (i32.const 255183) "a") (data (i32.const 255186) "a") (data (i32.const 255189) "a") (data (i32.const 255192) "a") (data (i32.const 255195) "a") (data (i32.const 255198) "a") (data (i32.const 255201) "a") (data (i32.const 255204) "a") (data (i32.const 255207) "a") (data (i32.const 255210) "a") (data (i32.const 255213) "a") (data (i32.const 255216) "a") (data (i32.const 255219) "a") (data (i32.const 255222) "a") (data (i32.const 255225) "a") (data (i32.const 255228) "a") (data (i32.const 255231) "a") (data (i32.const 255234) "a") (data (i32.const 255237) "a") (data (i32.const 255240) "a") (data (i32.const 255243) "a") (data (i32.const 255246) "a") (data (i32.const 255249) "a") (data (i32.const 255252) "a") (data (i32.const 255255) "a") (data (i32.const 255258) "a") (data (i32.const 255261) "a") (data (i32.const 255264) "a") (data (i32.const 255267) "a") (data (i32.const 255270) "a") (data (i32.const 255273) "a") (data (i32.const 255276) "a") (data (i32.const 255279) "a") (data (i32.const 255282) "a") (data (i32.const 255285) "a") (data (i32.const 255288) "a") (data (i32.const 255291) "a") (data (i32.const 255294) "a") (data (i32.const 255297) "a") (data (i32.const 255300) "a") (data (i32.const 255303) "a") (data (i32.const 255306) "a") (data (i32.const 255309) "a") (data (i32.const 255312) "a") (data (i32.const 255315) "a") (data (i32.const 255318) "a") (data (i32.const 255321) "a") (data (i32.const 255324) "a") (data (i32.const 255327) "a") (data (i32.const 255330) "a") (data (i32.const 255333) "a") (data (i32.const 255336) "a") (data (i32.const 255339) "a") (data (i32.const 255342) "a") (data (i32.const 255345) "a") (data (i32.const 255348) "a") (data (i32.const 255351) "a") (data (i32.const 255354) "a") (data (i32.const 255357) "a") (data (i32.const 255360) "a") (data (i32.const 255363) "a") (data (i32.const 255366) "a") (data (i32.const 255369) "a") (data (i32.const 255372) "a") (data (i32.const 255375) "a") (data (i32.const 255378) "a") (data (i32.const 255381) "a") (data (i32.const 255384) "a") (data (i32.const 255387) "a") (data (i32.const 255390) "a") (data (i32.const 255393) "a") (data (i32.const 255396) "a") (data (i32.const 255399) "a") (data (i32.const 255402) "a") (data (i32.const 255405) "a") (data (i32.const 255408) "a") (data (i32.const 255411) "a") (data (i32.const 255414) "a") (data (i32.const 255417) "a") (data (i32.const 255420) "a") (data (i32.const 255423) "a") (data (i32.const 255426) "a") (data (i32.const 255429) "a") (data (i32.const 255432) "a") (data (i32.const 255435) "a") (data (i32.const 255438) "a") (data (i32.const 255441) "a") (data (i32.const 255444) "a") (data (i32.const 255447) "a") (data (i32.const 255450) "a") (data (i32.const 255453) "a") (data (i32.const 255456) "a") (data (i32.const 255459) "a") (data (i32.const 255462) "a") (data (i32.const 255465) "a") (data (i32.const 255468) "a") (data (i32.const 255471) "a") (data (i32.const 255474) "a") (data (i32.const 255477) "a") (data (i32.const 255480) "a") (data (i32.const 255483) "a") (data (i32.const 255486) "a") (data (i32.const 255489) "a") (data (i32.const 255492) "a") (data (i32.const 255495) "a") (data (i32.const 255498) "a") (data (i32.const 255501) "a") (data (i32.const 255504) "a") (data (i32.const 255507) "a") (data (i32.const 255510) "a") (data (i32.const 255513) "a") (data (i32.const 255516) "a") (data (i32.const 255519) "a") (data (i32.const 255522) "a") (data (i32.const 255525) "a") (data (i32.const 255528) "a") (data (i32.const 255531) "a") (data (i32.const 255534) "a") (data (i32.const 255537) "a") (data (i32.const 255540) "a") (data (i32.const 255543) "a") (data (i32.const 255546) "a") (data (i32.const 255549) "a") (data (i32.const 255552) "a") (data (i32.const 255555) "a") (data (i32.const 255558) "a") (data (i32.const 255561) "a") (data (i32.const 255564) "a") (data (i32.const 255567) "a") (data (i32.const 255570) "a") (data (i32.const 255573) "a") (data (i32.const 255576) "a") (data (i32.const 255579) "a") (data (i32.const 255582) "a") (data (i32.const 255585) "a") (data (i32.const 255588) "a") (data (i32.const 255591) "a") (data (i32.const 255594) "a") (data (i32.const 255597) "a") (data (i32.const 255600) "a") (data (i32.const 255603) "a") (data (i32.const 255606) "a") (data (i32.const 255609) "a") (data (i32.const 255612) "a") (data (i32.const 255615) "a") (data (i32.const 255618) "a") (data (i32.const 255621) "a") (data (i32.const 255624) "a") (data (i32.const 255627) "a") (data (i32.const 255630) "a") (data (i32.const 255633) "a") (data (i32.const 255636) "a") (data (i32.const 255639) "a") (data (i32.const 255642) "a") (data (i32.const 255645) "a") (data (i32.const 255648) "a") (data (i32.const 255651) "a") (data (i32.const 255654) "a") (data (i32.const 255657) "a") (data (i32.const 255660) "a") (data (i32.const 255663) "a") (data (i32.const 255666) "a") (data (i32.const 255669) "a") (data (i32.const 255672) "a") (data (i32.const 255675) "a") (data (i32.const 255678) "a") (data (i32.const 255681) "a") (data (i32.const 255684) "a") (data (i32.const 255687) "a") (data (i32.const 255690) "a") (data (i32.const 255693) "a") (data (i32.const 255696) "a") (data (i32.const 255699) "a") (data (i32.const 255702) "a") (data (i32.const 255705) "a") (data (i32.const 255708) "a") (data (i32.const 255711) "a") (data (i32.const 255714) "a") (data (i32.const 255717) "a") (data (i32.const 255720) "a") (data (i32.const 255723) "a") (data (i32.const 255726) "a") (data (i32.const 255729) "a") (data (i32.const 255732) "a") (data (i32.const 255735) "a") (data (i32.const 255738) "a") (data (i32.const 255741) "a") (data (i32.const 255744) "a") (data (i32.const 255747) "a") (data (i32.const 255750) "a") (data (i32.const 255753) "a") (data (i32.const 255756) "a") (data (i32.const 255759) "a") (data (i32.const 255762) "a") (data (i32.const 255765) "a") (data (i32.const 255768) "a") (data (i32.const 255771) "a") (data (i32.const 255774) "a") (data (i32.const 255777) "a") (data (i32.const 255780) "a") (data (i32.const 255783) "a") (data (i32.const 255786) "a") (data (i32.const 255789) "a") (data (i32.const 255792) "a") (data (i32.const 255795) "a") (data (i32.const 255798) "a") (data (i32.const 255801) "a") (data (i32.const 255804) "a") (data (i32.const 255807) "a") (data (i32.const 255810) "a") (data (i32.const 255813) "a") (data (i32.const 255816) "a") (data (i32.const 255819) "a") (data (i32.const 255822) "a") (data (i32.const 255825) "a") (data (i32.const 255828) "a") (data (i32.const 255831) "a") (data (i32.const 255834) "a") (data (i32.const 255837) "a") (data (i32.const 255840) "a") (data (i32.const 255843) "a") (data (i32.const 255846) "a") (data (i32.const 255849) "a") (data (i32.const 255852) "a") (data (i32.const 255855) "a") (data (i32.const 255858) "a") (data (i32.const 255861) "a") (data (i32.const 255864) "a") (data (i32.const 255867) "a") (data (i32.const 255870) "a") (data (i32.const 255873) "a") (data (i32.const 255876) "a") (data (i32.const 255879) "a") (data (i32.const 255882) "a") (data (i32.const 255885) "a") (data (i32.const 255888) "a") (data (i32.const 255891) "a") (data (i32.const 255894) "a") (data (i32.const 255897) "a") (data (i32.const 255900) "a") (data (i32.const 255903) "a") (data (i32.const 255906) "a") (data (i32.const 255909) "a") (data (i32.const 255912) "a") (data (i32.const 255915) "a") (data (i32.const 255918) "a") (data (i32.const 255921) "a") (data (i32.const 255924) "a") (data (i32.const 255927) "a") (data (i32.const 255930) "a") (data (i32.const 255933) "a") (data (i32.const 255936) "a") (data (i32.const 255939) "a") (data (i32.const 255942) "a") (data (i32.const 255945) "a") (data (i32.const 255948) "a") (data (i32.const 255951) "a") (data (i32.const 255954) "a") (data (i32.const 255957) "a") (data (i32.const 255960) "a") (data (i32.const 255963) "a") (data (i32.const 255966) "a") (data (i32.const 255969) "a") (data (i32.const 255972) "a") (data (i32.const 255975) "a") (data (i32.const 255978) "a") (data (i32.const 255981) "a") (data (i32.const 255984) "a") (data (i32.const 255987) "a") (data (i32.const 255990) "a") (data (i32.const 255993) "a") (data (i32.const 255996) "a") (data (i32.const 255999) "a") (data (i32.const 256002) "a") (data (i32.const 256005) "a") (data (i32.const 256008) "a") (data (i32.const 256011) "a") (data (i32.const 256014) "a") (data (i32.const 256017) "a") (data (i32.const 256020) "a") (data (i32.const 256023) "a") (data (i32.const 256026) "a") (data (i32.const 256029) "a") (data (i32.const 256032) "a") (data (i32.const 256035) "a") (data (i32.const 256038) "a") (data (i32.const 256041) "a") (data (i32.const 256044) "a") (data (i32.const 256047) "a") (data (i32.const 256050) "a") (data (i32.const 256053) "a") (data (i32.const 256056) "a") (data (i32.const 256059) "a") (data (i32.const 256062) "a") (data (i32.const 256065) "a") (data (i32.const 256068) "a") (data (i32.const 256071) "a") (data (i32.const 256074) "a") (data (i32.const 256077) "a") (data (i32.const 256080) "a") (data (i32.const 256083) "a") (data (i32.const 256086) "a") (data (i32.const 256089) "a") (data (i32.const 256092) "a") (data (i32.const 256095) "a") (data (i32.const 256098) "a") (data (i32.const 256101) "a") (data (i32.const 256104) "a") (data (i32.const 256107) "a") (data (i32.const 256110) "a") (data (i32.const 256113) "a") (data (i32.const 256116) "a") (data (i32.const 256119) "a") (data (i32.const 256122) "a") (data (i32.const 256125) "a") (data (i32.const 256128) "a") (data (i32.const 256131) "a") (data (i32.const 256134) "a") (data (i32.const 256137) "a") (data (i32.const 256140) "a") (data (i32.const 256143) "a") (data (i32.const 256146) "a") (data (i32.const 256149) "a") (data (i32.const 256152) "a") (data (i32.const 256155) "a") (data (i32.const 256158) "a") (data (i32.const 256161) "a") (data (i32.const 256164) "a") (data (i32.const 256167) "a") (data (i32.const 256170) "a") (data (i32.const 256173) "a") (data (i32.const 256176) "a") (data (i32.const 256179) "a") (data (i32.const 256182) "a") (data (i32.const 256185) "a") (data (i32.const 256188) "a") (data (i32.const 256191) "a") (data (i32.const 256194) "a") (data (i32.const 256197) "a") (data (i32.const 256200) "a") (data (i32.const 256203) "a") (data (i32.const 256206) "a") (data (i32.const 256209) "a") (data (i32.const 256212) "a") (data (i32.const 256215) "a") (data (i32.const 256218) "a") (data (i32.const 256221) "a") (data (i32.const 256224) "a") (data (i32.const 256227) "a") (data (i32.const 256230) "a") (data (i32.const 256233) "a") (data (i32.const 256236) "a") (data (i32.const 256239) "a") (data (i32.const 256242) "a") (data (i32.const 256245) "a") (data (i32.const 256248) "a") (data (i32.const 256251) "a") (data (i32.const 256254) "a") (data (i32.const 256257) "a") (data (i32.const 256260) "a") (data (i32.const 256263) "a") (data (i32.const 256266) "a") (data (i32.const 256269) "a") (data (i32.const 256272) "a") (data (i32.const 256275) "a") (data (i32.const 256278) "a") (data (i32.const 256281) "a") (data (i32.const 256284) "a") (data (i32.const 256287) "a") (data (i32.const 256290) "a") (data (i32.const 256293) "a") (data (i32.const 256296) "a") (data (i32.const 256299) "a") (data (i32.const 256302) "a") (data (i32.const 256305) "a") (data (i32.const 256308) "a") (data (i32.const 256311) "a") (data (i32.const 256314) "a") (data (i32.const 256317) "a") (data (i32.const 256320) "a") (data (i32.const 256323) "a") (data (i32.const 256326) "a") (data (i32.const 256329) "a") (data (i32.const 256332) "a") (data (i32.const 256335) "a") (data (i32.const 256338) "a") (data (i32.const 256341) "a") (data (i32.const 256344) "a") (data (i32.const 256347) "a") (data (i32.const 256350) "a") (data (i32.const 256353) "a") (data (i32.const 256356) "a") (data (i32.const 256359) "a") (data (i32.const 256362) "a") (data (i32.const 256365) "a") (data (i32.const 256368) "a") (data (i32.const 256371) "a") (data (i32.const 256374) "a") (data (i32.const 256377) "a") (data (i32.const 256380) "a") (data (i32.const 256383) "a") (data (i32.const 256386) "a") (data (i32.const 256389) "a") (data (i32.const 256392) "a") (data (i32.const 256395) "a") (data (i32.const 256398) "a") (data (i32.const 256401) "a") (data (i32.const 256404) "a") (data (i32.const 256407) "a") (data (i32.const 256410) "a") (data (i32.const 256413) "a") (data (i32.const 256416) "a") (data (i32.const 256419) "a") (data (i32.const 256422) "a") (data (i32.const 256425) "a") (data (i32.const 256428) "a") (data (i32.const 256431) "a") (data (i32.const 256434) "a") (data (i32.const 256437) "a") (data (i32.const 256440) "a") (data (i32.const 256443) "a") (data (i32.const 256446) "a") (data (i32.const 256449) "a") (data (i32.const 256452) "a") (data (i32.const 256455) "a") (data (i32.const 256458) "a") (data (i32.const 256461) "a") (data (i32.const 256464) "a") (data (i32.const 256467) "a") (data (i32.const 256470) "a") (data (i32.const 256473) "a") (data (i32.const 256476) "a") (data (i32.const 256479) "a") (data (i32.const 256482) "a") (data (i32.const 256485) "a") (data (i32.const 256488) "a") (data (i32.const 256491) "a") (data (i32.const 256494) "a") (data (i32.const 256497) "a") (data (i32.const 256500) "a") (data (i32.const 256503) "a") (data (i32.const 256506) "a") (data (i32.const 256509) "a") (data (i32.const 256512) "a") (data (i32.const 256515) "a") (data (i32.const 256518) "a") (data (i32.const 256521) "a") (data (i32.const 256524) "a") (data (i32.const 256527) "a") (data (i32.const 256530) "a") (data (i32.const 256533) "a") (data (i32.const 256536) "a") (data (i32.const 256539) "a") (data (i32.const 256542) "a") (data (i32.const 256545) "a") (data (i32.const 256548) "a") (data (i32.const 256551) "a") (data (i32.const 256554) "a") (data (i32.const 256557) "a") (data (i32.const 256560) "a") (data (i32.const 256563) "a") (data (i32.const 256566) "a") (data (i32.const 256569) "a") (data (i32.const 256572) "a") (data (i32.const 256575) "a") (data (i32.const 256578) "a") (data (i32.const 256581) "a") (data (i32.const 256584) "a") (data (i32.const 256587) "a") (data (i32.const 256590) "a") (data (i32.const 256593) "a") (data (i32.const 256596) "a") (data (i32.const 256599) "a") (data (i32.const 256602) "a") (data (i32.const 256605) "a") (data (i32.const 256608) "a") (data (i32.const 256611) "a") (data (i32.const 256614) "a") (data (i32.const 256617) "a") (data (i32.const 256620) "a") (data (i32.const 256623) "a") (data (i32.const 256626) "a") (data (i32.const 256629) "a") (data (i32.const 256632) "a") (data (i32.const 256635) "a") (data (i32.const 256638) "a") (data (i32.const 256641) "a") (data (i32.const 256644) "a") (data (i32.const 256647) "a") (data (i32.const 256650) "a") (data (i32.const 256653) "a") (data (i32.const 256656) "a") (data (i32.const 256659) "a") (data (i32.const 256662) "a") (data (i32.const 256665) "a") (data (i32.const 256668) "a") (data (i32.const 256671) "a") (data (i32.const 256674) "a") (data (i32.const 256677) "a") (data (i32.const 256680) "a") (data (i32.const 256683) "a") (data (i32.const 256686) "a") (data (i32.const 256689) "a") (data (i32.const 256692) "a") (data (i32.const 256695) "a") (data (i32.const 256698) "a") (data (i32.const 256701) "a") (data (i32.const 256704) "a") (data (i32.const 256707) "a") (data (i32.const 256710) "a") (data (i32.const 256713) "a") (data (i32.const 256716) "a") (data (i32.const 256719) "a") (data (i32.const 256722) "a") (data (i32.const 256725) "a") (data (i32.const 256728) "a") (data (i32.const 256731) "a") (data (i32.const 256734) "a") (data (i32.const 256737) "a") (data (i32.const 256740) "a") (data (i32.const 256743) "a") (data (i32.const 256746) "a") (data (i32.const 256749) "a") (data (i32.const 256752) "a") (data (i32.const 256755) "a") (data (i32.const 256758) "a") (data (i32.const 256761) "a") (data (i32.const 256764) "a") (data (i32.const 256767) "a") (data (i32.const 256770) "a") (data (i32.const 256773) "a") (data (i32.const 256776) "a") (data (i32.const 256779) "a") (data (i32.const 256782) "a") (data (i32.const 256785) "a") (data (i32.const 256788) "a") (data (i32.const 256791) "a") (data (i32.const 256794) "a") (data (i32.const 256797) "a") (data (i32.const 256800) "a") (data (i32.const 256803) "a") (data (i32.const 256806) "a") (data (i32.const 256809) "a") (data (i32.const 256812) "a") (data (i32.const 256815) "a") (data (i32.const 256818) "a") (data (i32.const 256821) "a") (data (i32.const 256824) "a") (data (i32.const 256827) "a") (data (i32.const 256830) "a") (data (i32.const 256833) "a") (data (i32.const 256836) "a") (data (i32.const 256839) "a") (data (i32.const 256842) "a") (data (i32.const 256845) "a") (data (i32.const 256848) "a") (data (i32.const 256851) "a") (data (i32.const 256854) "a") (data (i32.const 256857) "a") (data (i32.const 256860) "a") (data (i32.const 256863) "a") (data (i32.const 256866) "a") (data (i32.const 256869) "a") (data (i32.const 256872) "a") (data (i32.const 256875) "a") (data (i32.const 256878) "a") (data (i32.const 256881) "a") (data (i32.const 256884) "a") (data (i32.const 256887) "a") (data (i32.const 256890) "a") (data (i32.const 256893) "a") (data (i32.const 256896) "a") (data (i32.const 256899) "a") (data (i32.const 256902) "a") (data (i32.const 256905) "a") (data (i32.const 256908) "a") (data (i32.const 256911) "a") (data (i32.const 256914) "a") (data (i32.const 256917) "a") (data (i32.const 256920) "a") (data (i32.const 256923) "a") (data (i32.const 256926) "a") (data (i32.const 256929) "a") (data (i32.const 256932) "a") (data (i32.const 256935) "a") (data (i32.const 256938) "a") (data (i32.const 256941) "a") (data (i32.const 256944) "a") (data (i32.const 256947) "a") (data (i32.const 256950) "a") (data (i32.const 256953) "a") (data (i32.const 256956) "a") (data (i32.const 256959) "a") (data (i32.const 256962) "a") (data (i32.const 256965) "a") (data (i32.const 256968) "a") (data (i32.const 256971) "a") (data (i32.const 256974) "a") (data (i32.const 256977) "a") (data (i32.const 256980) "a") (data (i32.const 256983) "a") (data (i32.const 256986) "a") (data (i32.const 256989) "a") (data (i32.const 256992) "a") (data (i32.const 256995) "a") (data (i32.const 256998) "a") (data (i32.const 257001) "a") (data (i32.const 257004) "a") (data (i32.const 257007) "a") (data (i32.const 257010) "a") (data (i32.const 257013) "a") (data (i32.const 257016) "a") (data (i32.const 257019) "a") (data (i32.const 257022) "a") (data (i32.const 257025) "a") (data (i32.const 257028) "a") (data (i32.const 257031) "a") (data (i32.const 257034) "a") (data (i32.const 257037) "a") (data (i32.const 257040) "a") (data (i32.const 257043) "a") (data (i32.const 257046) "a") (data (i32.const 257049) "a") (data (i32.const 257052) "a") (data (i32.const 257055) "a") (data (i32.const 257058) "a") (data (i32.const 257061) "a") (data (i32.const 257064) "a") (data (i32.const 257067) "a") (data (i32.const 257070) "a") (data (i32.const 257073) "a") (data (i32.const 257076) "a") (data (i32.const 257079) "a") (data (i32.const 257082) "a") (data (i32.const 257085) "a") (data (i32.const 257088) "a") (data (i32.const 257091) "a") (data (i32.const 257094) "a") (data (i32.const 257097) "a") (data (i32.const 257100) "a") (data (i32.const 257103) "a") (data (i32.const 257106) "a") (data (i32.const 257109) "a") (data (i32.const 257112) "a") (data (i32.const 257115) "a") (data (i32.const 257118) "a") (data (i32.const 257121) "a") (data (i32.const 257124) "a") (data (i32.const 257127) "a") (data (i32.const 257130) "a") (data (i32.const 257133) "a") (data (i32.const 257136) "a") (data (i32.const 257139) "a") (data (i32.const 257142) "a") (data (i32.const 257145) "a") (data (i32.const 257148) "a") (data (i32.const 257151) "a") (data (i32.const 257154) "a") (data (i32.const 257157) "a") (data (i32.const 257160) "a") (data (i32.const 257163) "a") (data (i32.const 257166) "a") (data (i32.const 257169) "a") (data (i32.const 257172) "a") (data (i32.const 257175) "a") (data (i32.const 257178) "a") (data (i32.const 257181) "a") (data (i32.const 257184) "a") (data (i32.const 257187) "a") (data (i32.const 257190) "a") (data (i32.const 257193) "a") (data (i32.const 257196) "a") (data (i32.const 257199) "a") (data (i32.const 257202) "a") (data (i32.const 257205) "a") (data (i32.const 257208) "a") (data (i32.const 257211) "a") (data (i32.const 257214) "a") (data (i32.const 257217) "a") (data (i32.const 257220) "a") (data (i32.const 257223) "a") (data (i32.const 257226) "a") (data (i32.const 257229) "a") (data (i32.const 257232) "a") (data (i32.const 257235) "a") (data (i32.const 257238) "a") (data (i32.const 257241) "a") (data (i32.const 257244) "a") (data (i32.const 257247) "a") (data (i32.const 257250) "a") (data (i32.const 257253) "a") (data (i32.const 257256) "a") (data (i32.const 257259) "a") (data (i32.const 257262) "a") (data (i32.const 257265) "a") (data (i32.const 257268) "a") (data (i32.const 257271) "a") (data (i32.const 257274) "a") (data (i32.const 257277) "a") (data (i32.const 257280) "a") (data (i32.const 257283) "a") (data (i32.const 257286) "a") (data (i32.const 257289) "a") (data (i32.const 257292) "a") (data (i32.const 257295) "a") (data (i32.const 257298) "a") (data (i32.const 257301) "a") (data (i32.const 257304) "a") (data (i32.const 257307) "a") (data (i32.const 257310) "a") (data (i32.const 257313) "a") (data (i32.const 257316) "a") (data (i32.const 257319) "a") (data (i32.const 257322) "a") (data (i32.const 257325) "a") (data (i32.const 257328) "a") (data (i32.const 257331) "a") (data (i32.const 257334) "a") (data (i32.const 257337) "a") (data (i32.const 257340) "a") (data (i32.const 257343) "a") (data (i32.const 257346) "a") (data (i32.const 257349) "a") (data (i32.const 257352) "a") (data (i32.const 257355) "a") (data (i32.const 257358) "a") (data (i32.const 257361) "a") (data (i32.const 257364) "a") (data (i32.const 257367) "a") (data (i32.const 257370) "a") (data (i32.const 257373) "a") (data (i32.const 257376) "a") (data (i32.const 257379) "a") (data (i32.const 257382) "a") (data (i32.const 257385) "a") (data (i32.const 257388) "a") (data (i32.const 257391) "a") (data (i32.const 257394) "a") (data (i32.const 257397) "a") (data (i32.const 257400) "a") (data (i32.const 257403) "a") (data (i32.const 257406) "a") (data (i32.const 257409) "a") (data (i32.const 257412) "a") (data (i32.const 257415) "a") (data (i32.const 257418) "a") (data (i32.const 257421) "a") (data (i32.const 257424) "a") (data (i32.const 257427) "a") (data (i32.const 257430) "a") (data (i32.const 257433) "a") (data (i32.const 257436) "a") (data (i32.const 257439) "a") (data (i32.const 257442) "a") (data (i32.const 257445) "a") (data (i32.const 257448) "a") (data (i32.const 257451) "a") (data (i32.const 257454) "a") (data (i32.const 257457) "a") (data (i32.const 257460) "a") (data (i32.const 257463) "a") (data (i32.const 257466) "a") (data (i32.const 257469) "a") (data (i32.const 257472) "a") (data (i32.const 257475) "a") (data (i32.const 257478) "a") (data (i32.const 257481) "a") (data (i32.const 257484) "a") (data (i32.const 257487) "a") (data (i32.const 257490) "a") (data (i32.const 257493) "a") (data (i32.const 257496) "a") (data (i32.const 257499) "a") (data (i32.const 257502) "a") (data (i32.const 257505) "a") (data (i32.const 257508) "a") (data (i32.const 257511) "a") (data (i32.const 257514) "a") (data (i32.const 257517) "a") (data (i32.const 257520) "a") (data (i32.const 257523) "a") (data (i32.const 257526) "a") (data (i32.const 257529) "a") (data (i32.const 257532) "a") (data (i32.const 257535) "a") (data (i32.const 257538) "a") (data (i32.const 257541) "a") (data (i32.const 257544) "a") (data (i32.const 257547) "a") (data (i32.const 257550) "a") (data (i32.const 257553) "a") (data (i32.const 257556) "a") (data (i32.const 257559) "a") (data (i32.const 257562) "a") (data (i32.const 257565) "a") (data (i32.const 257568) "a") (data (i32.const 257571) "a") (data (i32.const 257574) "a") (data (i32.const 257577) "a") (data (i32.const 257580) "a") (data (i32.const 257583) "a") (data (i32.const 257586) "a") (data (i32.const 257589) "a") (data (i32.const 257592) "a") (data (i32.const 257595) "a") (data (i32.const 257598) "a") (data (i32.const 257601) "a") (data (i32.const 257604) "a") (data (i32.const 257607) "a") (data (i32.const 257610) "a") (data (i32.const 257613) "a") (data (i32.const 257616) "a") (data (i32.const 257619) "a") (data (i32.const 257622) "a") (data (i32.const 257625) "a") (data (i32.const 257628) "a") (data (i32.const 257631) "a") (data (i32.const 257634) "a") (data (i32.const 257637) "a") (data (i32.const 257640) "a") (data (i32.const 257643) "a") (data (i32.const 257646) "a") (data (i32.const 257649) "a") (data (i32.const 257652) "a") (data (i32.const 257655) "a") (data (i32.const 257658) "a") (data (i32.const 257661) "a") (data (i32.const 257664) "a") (data (i32.const 257667) "a") (data (i32.const 257670) "a") (data (i32.const 257673) "a") (data (i32.const 257676) "a") (data (i32.const 257679) "a") (data (i32.const 257682) "a") (data (i32.const 257685) "a") (data (i32.const 257688) "a") (data (i32.const 257691) "a") (data (i32.const 257694) "a") (data (i32.const 257697) "a") (data (i32.const 257700) "a") (data (i32.const 257703) "a") (data (i32.const 257706) "a") (data (i32.const 257709) "a") (data (i32.const 257712) "a") (data (i32.const 257715) "a") (data (i32.const 257718) "a") (data (i32.const 257721) "a") (data (i32.const 257724) "a") (data (i32.const 257727) "a") (data (i32.const 257730) "a") (data (i32.const 257733) "a") (data (i32.const 257736) "a") (data (i32.const 257739) "a") (data (i32.const 257742) "a") (data (i32.const 257745) "a") (data (i32.const 257748) "a") (data (i32.const 257751) "a") (data (i32.const 257754) "a") (data (i32.const 257757) "a") (data (i32.const 257760) "a") (data (i32.const 257763) "a") (data (i32.const 257766) "a") (data (i32.const 257769) "a") (data (i32.const 257772) "a") (data (i32.const 257775) "a") (data (i32.const 257778) "a") (data (i32.const 257781) "a") (data (i32.const 257784) "a") (data (i32.const 257787) "a") (data (i32.const 257790) "a") (data (i32.const 257793) "a") (data (i32.const 257796) "a") (data (i32.const 257799) "a") (data (i32.const 257802) "a") (data (i32.const 257805) "a") (data (i32.const 257808) "a") (data (i32.const 257811) "a") (data (i32.const 257814) "a") (data (i32.const 257817) "a") (data (i32.const 257820) "a") (data (i32.const 257823) "a") (data (i32.const 257826) "a") (data (i32.const 257829) "a") (data (i32.const 257832) "a") (data (i32.const 257835) "a") (data (i32.const 257838) "a") (data (i32.const 257841) "a") (data (i32.const 257844) "a") (data (i32.const 257847) "a") (data (i32.const 257850) "a") (data (i32.const 257853) "a") (data (i32.const 257856) "a") (data (i32.const 257859) "a") (data (i32.const 257862) "a") (data (i32.const 257865) "a") (data (i32.const 257868) "a") (data (i32.const 257871) "a") (data (i32.const 257874) "a") (data (i32.const 257877) "a") (data (i32.const 257880) "a") (data (i32.const 257883) "a") (data (i32.const 257886) "a") (data (i32.const 257889) "a") (data (i32.const 257892) "a") (data (i32.const 257895) "a") (data (i32.const 257898) "a") (data (i32.const 257901) "a") (data (i32.const 257904) "a") (data (i32.const 257907) "a") (data (i32.const 257910) "a") (data (i32.const 257913) "a") (data (i32.const 257916) "a") (data (i32.const 257919) "a") (data (i32.const 257922) "a") (data (i32.const 257925) "a") (data (i32.const 257928) "a") (data (i32.const 257931) "a") (data (i32.const 257934) "a") (data (i32.const 257937) "a") (data (i32.const 257940) "a") (data (i32.const 257943) "a") (data (i32.const 257946) "a") (data (i32.const 257949) "a") (data (i32.const 257952) "a") (data (i32.const 257955) "a") (data (i32.const 257958) "a") (data (i32.const 257961) "a") (data (i32.const 257964) "a") (data (i32.const 257967) "a") (data (i32.const 257970) "a") (data (i32.const 257973) "a") (data (i32.const 257976) "a") (data (i32.const 257979) "a") (data (i32.const 257982) "a") (data (i32.const 257985) "a") (data (i32.const 257988) "a") (data (i32.const 257991) "a") (data (i32.const 257994) "a") (data (i32.const 257997) "a") (data (i32.const 258000) "a") (data (i32.const 258003) "a") (data (i32.const 258006) "a") (data (i32.const 258009) "a") (data (i32.const 258012) "a") (data (i32.const 258015) "a") (data (i32.const 258018) "a") (data (i32.const 258021) "a") (data (i32.const 258024) "a") (data (i32.const 258027) "a") (data (i32.const 258030) "a") (data (i32.const 258033) "a") (data (i32.const 258036) "a") (data (i32.const 258039) "a") (data (i32.const 258042) "a") (data (i32.const 258045) "a") (data (i32.const 258048) "a") (data (i32.const 258051) "a") (data (i32.const 258054) "a") (data (i32.const 258057) "a") (data (i32.const 258060) "a") (data (i32.const 258063) "a") (data (i32.const 258066) "a") (data (i32.const 258069) "a") (data (i32.const 258072) "a") (data (i32.const 258075) "a") (data (i32.const 258078) "a") (data (i32.const 258081) "a") (data (i32.const 258084) "a") (data (i32.const 258087) "a") (data (i32.const 258090) "a") (data (i32.const 258093) "a") (data (i32.const 258096) "a") (data (i32.const 258099) "a") (data (i32.const 258102) "a") (data (i32.const 258105) "a") (data (i32.const 258108) "a") (data (i32.const 258111) "a") (data (i32.const 258114) "a") (data (i32.const 258117) "a") (data (i32.const 258120) "a") (data (i32.const 258123) "a") (data (i32.const 258126) "a") (data (i32.const 258129) "a") (data (i32.const 258132) "a") (data (i32.const 258135) "a") (data (i32.const 258138) "a") (data (i32.const 258141) "a") (data (i32.const 258144) "a") (data (i32.const 258147) "a") (data (i32.const 258150) "a") (data (i32.const 258153) "a") (data (i32.const 258156) "a") (data (i32.const 258159) "a") (data (i32.const 258162) "a") (data (i32.const 258165) "a") (data (i32.const 258168) "a") (data (i32.const 258171) "a") (data (i32.const 258174) "a") (data (i32.const 258177) "a") (data (i32.const 258180) "a") (data (i32.const 258183) "a") (data (i32.const 258186) "a") (data (i32.const 258189) "a") (data (i32.const 258192) "a") (data (i32.const 258195) "a") (data (i32.const 258198) "a") (data (i32.const 258201) "a") (data (i32.const 258204) "a") (data (i32.const 258207) "a") (data (i32.const 258210) "a") (data (i32.const 258213) "a") (data (i32.const 258216) "a") (data (i32.const 258219) "a") (data (i32.const 258222) "a") (data (i32.const 258225) "a") (data (i32.const 258228) "a") (data (i32.const 258231) "a") (data (i32.const 258234) "a") (data (i32.const 258237) "a") (data (i32.const 258240) "a") (data (i32.const 258243) "a") (data (i32.const 258246) "a") (data (i32.const 258249) "a") (data (i32.const 258252) "a") (data (i32.const 258255) "a") (data (i32.const 258258) "a") (data (i32.const 258261) "a") (data (i32.const 258264) "a") (data (i32.const 258267) "a") (data (i32.const 258270) "a") (data (i32.const 258273) "a") (data (i32.const 258276) "a") (data (i32.const 258279) "a") (data (i32.const 258282) "a") (data (i32.const 258285) "a") (data (i32.const 258288) "a") (data (i32.const 258291) "a") (data (i32.const 258294) "a") (data (i32.const 258297) "a") (data (i32.const 258300) "a") (data (i32.const 258303) "a") (data (i32.const 258306) "a") (data (i32.const 258309) "a") (data (i32.const 258312) "a") (data (i32.const 258315) "a") (data (i32.const 258318) "a") (data (i32.const 258321) "a") (data (i32.const 258324) "a") (data (i32.const 258327) "a") (data (i32.const 258330) "a") (data (i32.const 258333) "a") (data (i32.const 258336) "a") (data (i32.const 258339) "a") (data (i32.const 258342) "a") (data (i32.const 258345) "a") (data (i32.const 258348) "a") (data (i32.const 258351) "a") (data (i32.const 258354) "a") (data (i32.const 258357) "a") (data (i32.const 258360) "a") (data (i32.const 258363) "a") (data (i32.const 258366) "a") (data (i32.const 258369) "a") (data (i32.const 258372) "a") (data (i32.const 258375) "a") (data (i32.const 258378) "a") (data (i32.const 258381) "a") (data (i32.const 258384) "a") (data (i32.const 258387) "a") (data (i32.const 258390) "a") (data (i32.const 258393) "a") (data (i32.const 258396) "a") (data (i32.const 258399) "a") (data (i32.const 258402) "a") (data (i32.const 258405) "a") (data (i32.const 258408) "a") (data (i32.const 258411) "a") (data (i32.const 258414) "a") (data (i32.const 258417) "a") (data (i32.const 258420) "a") (data (i32.const 258423) "a") (data (i32.const 258426) "a") (data (i32.const 258429) "a") (data (i32.const 258432) "a") (data (i32.const 258435) "a") (data (i32.const 258438) "a") (data (i32.const 258441) "a") (data (i32.const 258444) "a") (data (i32.const 258447) "a") (data (i32.const 258450) "a") (data (i32.const 258453) "a") (data (i32.const 258456) "a") (data (i32.const 258459) "a") (data (i32.const 258462) "a") (data (i32.const 258465) "a") (data (i32.const 258468) "a") (data (i32.const 258471) "a") (data (i32.const 258474) "a") (data (i32.const 258477) "a") (data (i32.const 258480) "a") (data (i32.const 258483) "a") (data (i32.const 258486) "a") (data (i32.const 258489) "a") (data (i32.const 258492) "a") (data (i32.const 258495) "a") (data (i32.const 258498) "a") (data (i32.const 258501) "a") (data (i32.const 258504) "a") (data (i32.const 258507) "a") (data (i32.const 258510) "a") (data (i32.const 258513) "a") (data (i32.const 258516) "a") (data (i32.const 258519) "a") (data (i32.const 258522) "a") (data (i32.const 258525) "a") (data (i32.const 258528) "a") (data (i32.const 258531) "a") (data (i32.const 258534) "a") (data (i32.const 258537) "a") (data (i32.const 258540) "a") (data (i32.const 258543) "a") (data (i32.const 258546) "a") (data (i32.const 258549) "a") (data (i32.const 258552) "a") (data (i32.const 258555) "a") (data (i32.const 258558) "a") (data (i32.const 258561) "a") (data (i32.const 258564) "a") (data (i32.const 258567) "a") (data (i32.const 258570) "a") (data (i32.const 258573) "a") (data (i32.const 258576) "a") (data (i32.const 258579) "a") (data (i32.const 258582) "a") (data (i32.const 258585) "a") (data (i32.const 258588) "a") (data (i32.const 258591) "a") (data (i32.const 258594) "a") (data (i32.const 258597) "a") (data (i32.const 258600) "a") (data (i32.const 258603) "a") (data (i32.const 258606) "a") (data (i32.const 258609) "a") (data (i32.const 258612) "a") (data (i32.const 258615) "a") (data (i32.const 258618) "a") (data (i32.const 258621) "a") (data (i32.const 258624) "a") (data (i32.const 258627) "a") (data (i32.const 258630) "a") (data (i32.const 258633) "a") (data (i32.const 258636) "a") (data (i32.const 258639) "a") (data (i32.const 258642) "a") (data (i32.const 258645) "a") (data (i32.const 258648) "a") (data (i32.const 258651) "a") (data (i32.const 258654) "a") (data (i32.const 258657) "a") (data (i32.const 258660) "a") (data (i32.const 258663) "a") (data (i32.const 258666) "a") (data (i32.const 258669) "a") (data (i32.const 258672) "a") (data (i32.const 258675) "a") (data (i32.const 258678) "a") (data (i32.const 258681) "a") (data (i32.const 258684) "a") (data (i32.const 258687) "a") (data (i32.const 258690) "a") (data (i32.const 258693) "a") (data (i32.const 258696) "a") (data (i32.const 258699) "a") (data (i32.const 258702) "a") (data (i32.const 258705) "a") (data (i32.const 258708) "a") (data (i32.const 258711) "a") (data (i32.const 258714) "a") (data (i32.const 258717) "a") (data (i32.const 258720) "a") (data (i32.const 258723) "a") (data (i32.const 258726) "a") (data (i32.const 258729) "a") (data (i32.const 258732) "a") (data (i32.const 258735) "a") (data (i32.const 258738) "a") (data (i32.const 258741) "a") (data (i32.const 258744) "a") (data (i32.const 258747) "a") (data (i32.const 258750) "a") (data (i32.const 258753) "a") (data (i32.const 258756) "a") (data (i32.const 258759) "a") (data (i32.const 258762) "a") (data (i32.const 258765) "a") (data (i32.const 258768) "a") (data (i32.const 258771) "a") (data (i32.const 258774) "a") (data (i32.const 258777) "a") (data (i32.const 258780) "a") (data (i32.const 258783) "a") (data (i32.const 258786) "a") (data (i32.const 258789) "a") (data (i32.const 258792) "a") (data (i32.const 258795) "a") (data (i32.const 258798) "a") (data (i32.const 258801) "a") (data (i32.const 258804) "a") (data (i32.const 258807) "a") (data (i32.const 258810) "a") (data (i32.const 258813) "a") (data (i32.const 258816) "a") (data (i32.const 258819) "a") (data (i32.const 258822) "a") (data (i32.const 258825) "a") (data (i32.const 258828) "a") (data (i32.const 258831) "a") (data (i32.const 258834) "a") (data (i32.const 258837) "a") (data (i32.const 258840) "a") (data (i32.const 258843) "a") (data (i32.const 258846) "a") (data (i32.const 258849) "a") (data (i32.const 258852) "a") (data (i32.const 258855) "a") (data (i32.const 258858) "a") (data (i32.const 258861) "a") (data (i32.const 258864) "a") (data (i32.const 258867) "a") (data (i32.const 258870) "a") (data (i32.const 258873) "a") (data (i32.const 258876) "a") (data (i32.const 258879) "a") (data (i32.const 258882) "a") (data (i32.const 258885) "a") (data (i32.const 258888) "a") (data (i32.const 258891) "a") (data (i32.const 258894) "a") (data (i32.const 258897) "a") (data (i32.const 258900) "a") (data (i32.const 258903) "a") (data (i32.const 258906) "a") (data (i32.const 258909) "a") (data (i32.const 258912) "a") (data (i32.const 258915) "a") (data (i32.const 258918) "a") (data (i32.const 258921) "a") (data (i32.const 258924) "a") (data (i32.const 258927) "a") (data (i32.const 258930) "a") (data (i32.const 258933) "a") (data (i32.const 258936) "a") (data (i32.const 258939) "a") (data (i32.const 258942) "a") (data (i32.const 258945) "a") (data (i32.const 258948) "a") (data (i32.const 258951) "a") (data (i32.const 258954) "a") (data (i32.const 258957) "a") (data (i32.const 258960) "a") (data (i32.const 258963) "a") (data (i32.const 258966) "a") (data (i32.const 258969) "a") (data (i32.const 258972) "a") (data (i32.const 258975) "a") (data (i32.const 258978) "a") (data (i32.const 258981) "a") (data (i32.const 258984) "a") (data (i32.const 258987) "a") (data (i32.const 258990) "a") (data (i32.const 258993) "a") (data (i32.const 258996) "a") (data (i32.const 258999) "a") (data (i32.const 259002) "a") (data (i32.const 259005) "a") (data (i32.const 259008) "a") (data (i32.const 259011) "a") (data (i32.const 259014) "a") (data (i32.const 259017) "a") (data (i32.const 259020) "a") (data (i32.const 259023) "a") (data (i32.const 259026) "a") (data (i32.const 259029) "a") (data (i32.const 259032) "a") (data (i32.const 259035) "a") (data (i32.const 259038) "a") (data (i32.const 259041) "a") (data (i32.const 259044) "a") (data (i32.const 259047) "a") (data (i32.const 259050) "a") (data (i32.const 259053) "a") (data (i32.const 259056) "a") (data (i32.const 259059) "a") (data (i32.const 259062) "a") (data (i32.const 259065) "a") (data (i32.const 259068) "a") (data (i32.const 259071) "a") (data (i32.const 259074) "a") (data (i32.const 259077) "a") (data (i32.const 259080) "a") (data (i32.const 259083) "a") (data (i32.const 259086) "a") (data (i32.const 259089) "a") (data (i32.const 259092) "a") (data (i32.const 259095) "a") (data (i32.const 259098) "a") (data (i32.const 259101) "a") (data (i32.const 259104) "a") (data (i32.const 259107) "a") (data (i32.const 259110) "a") (data (i32.const 259113) "a") (data (i32.const 259116) "a") (data (i32.const 259119) "a") (data (i32.const 259122) "a") (data (i32.const 259125) "a") (data (i32.const 259128) "a") (data (i32.const 259131) "a") (data (i32.const 259134) "a") (data (i32.const 259137) "a") (data (i32.const 259140) "a") (data (i32.const 259143) "a") (data (i32.const 259146) "a") (data (i32.const 259149) "a") (data (i32.const 259152) "a") (data (i32.const 259155) "a") (data (i32.const 259158) "a") (data (i32.const 259161) "a") (data (i32.const 259164) "a") (data (i32.const 259167) "a") (data (i32.const 259170) "a") (data (i32.const 259173) "a") (data (i32.const 259176) "a") (data (i32.const 259179) "a") (data (i32.const 259182) "a") (data (i32.const 259185) "a") (data (i32.const 259188) "a") (data (i32.const 259191) "a") (data (i32.const 259194) "a") (data (i32.const 259197) "a") (data (i32.const 259200) "a") (data (i32.const 259203) "a") (data (i32.const 259206) "a") (data (i32.const 259209) "a") (data (i32.const 259212) "a") (data (i32.const 259215) "a") (data (i32.const 259218) "a") (data (i32.const 259221) "a") (data (i32.const 259224) "a") (data (i32.const 259227) "a") (data (i32.const 259230) "a") (data (i32.const 259233) "a") (data (i32.const 259236) "a") (data (i32.const 259239) "a") (data (i32.const 259242) "a") (data (i32.const 259245) "a") (data (i32.const 259248) "a") (data (i32.const 259251) "a") (data (i32.const 259254) "a") (data (i32.const 259257) "a") (data (i32.const 259260) "a") (data (i32.const 259263) "a") (data (i32.const 259266) "a") (data (i32.const 259269) "a") (data (i32.const 259272) "a") (data (i32.const 259275) "a") (data (i32.const 259278) "a") (data (i32.const 259281) "a") (data (i32.const 259284) "a") (data (i32.const 259287) "a") (data (i32.const 259290) "a") (data (i32.const 259293) "a") (data (i32.const 259296) "a") (data (i32.const 259299) "a") (data (i32.const 259302) "a") (data (i32.const 259305) "a") (data (i32.const 259308) "a") (data (i32.const 259311) "a") (data (i32.const 259314) "a") (data (i32.const 259317) "a") (data (i32.const 259320) "a") (data (i32.const 259323) "a") (data (i32.const 259326) "a") (data (i32.const 259329) "a") (data (i32.const 259332) "a") (data (i32.const 259335) "a") (data (i32.const 259338) "a") (data (i32.const 259341) "a") (data (i32.const 259344) "a") (data (i32.const 259347) "a") (data (i32.const 259350) "a") (data (i32.const 259353) "a") (data (i32.const 259356) "a") (data (i32.const 259359) "a") (data (i32.const 259362) "a") (data (i32.const 259365) "a") (data (i32.const 259368) "a") (data (i32.const 259371) "a") (data (i32.const 259374) "a") (data (i32.const 259377) "a") (data (i32.const 259380) "a") (data (i32.const 259383) "a") (data (i32.const 259386) "a") (data (i32.const 259389) "a") (data (i32.const 259392) "a") (data (i32.const 259395) "a") (data (i32.const 259398) "a") (data (i32.const 259401) "a") (data (i32.const 259404) "a") (data (i32.const 259407) "a") (data (i32.const 259410) "a") (data (i32.const 259413) "a") (data (i32.const 259416) "a") (data (i32.const 259419) "a") (data (i32.const 259422) "a") (data (i32.const 259425) "a") (data (i32.const 259428) "a") (data (i32.const 259431) "a") (data (i32.const 259434) "a") (data (i32.const 259437) "a") (data (i32.const 259440) "a") (data (i32.const 259443) "a") (data (i32.const 259446) "a") (data (i32.const 259449) "a") (data (i32.const 259452) "a") (data (i32.const 259455) "a") (data (i32.const 259458) "a") (data (i32.const 259461) "a") (data (i32.const 259464) "a") (data (i32.const 259467) "a") (data (i32.const 259470) "a") (data (i32.const 259473) "a") (data (i32.const 259476) "a") (data (i32.const 259479) "a") (data (i32.const 259482) "a") (data (i32.const 259485) "a") (data (i32.const 259488) "a") (data (i32.const 259491) "a") (data (i32.const 259494) "a") (data (i32.const 259497) "a") (data (i32.const 259500) "a") (data (i32.const 259503) "a") (data (i32.const 259506) "a") (data (i32.const 259509) "a") (data (i32.const 259512) "a") (data (i32.const 259515) "a") (data (i32.const 259518) "a") (data (i32.const 259521) "a") (data (i32.const 259524) "a") (data (i32.const 259527) "a") (data (i32.const 259530) "a") (data (i32.const 259533) "a") (data (i32.const 259536) "a") (data (i32.const 259539) "a") (data (i32.const 259542) "a") (data (i32.const 259545) "a") (data (i32.const 259548) "a") (data (i32.const 259551) "a") (data (i32.const 259554) "a") (data (i32.const 259557) "a") (data (i32.const 259560) "a") (data (i32.const 259563) "a") (data (i32.const 259566) "a") (data (i32.const 259569) "a") (data (i32.const 259572) "a") (data (i32.const 259575) "a") (data (i32.const 259578) "a") (data (i32.const 259581) "a") (data (i32.const 259584) "a") (data (i32.const 259587) "a") (data (i32.const 259590) "a") (data (i32.const 259593) "a") (data (i32.const 259596) "a") (data (i32.const 259599) "a") (data (i32.const 259602) "a") (data (i32.const 259605) "a") (data (i32.const 259608) "a") (data (i32.const 259611) "a") (data (i32.const 259614) "a") (data (i32.const 259617) "a") (data (i32.const 259620) "a") (data (i32.const 259623) "a") (data (i32.const 259626) "a") (data (i32.const 259629) "a") (data (i32.const 259632) "a") (data (i32.const 259635) "a") (data (i32.const 259638) "a") (data (i32.const 259641) "a") (data (i32.const 259644) "a") (data (i32.const 259647) "a") (data (i32.const 259650) "a") (data (i32.const 259653) "a") (data (i32.const 259656) "a") (data (i32.const 259659) "a") (data (i32.const 259662) "a") (data (i32.const 259665) "a") (data (i32.const 259668) "a") (data (i32.const 259671) "a") (data (i32.const 259674) "a") (data (i32.const 259677) "a") (data (i32.const 259680) "a") (data (i32.const 259683) "a") (data (i32.const 259686) "a") (data (i32.const 259689) "a") (data (i32.const 259692) "a") (data (i32.const 259695) "a") (data (i32.const 259698) "a") (data (i32.const 259701) "a") (data (i32.const 259704) "a") (data (i32.const 259707) "a") (data (i32.const 259710) "a") (data (i32.const 259713) "a") (data (i32.const 259716) "a") (data (i32.const 259719) "a") (data (i32.const 259722) "a") (data (i32.const 259725) "a") (data (i32.const 259728) "a") (data (i32.const 259731) "a") (data (i32.const 259734) "a") (data (i32.const 259737) "a") (data (i32.const 259740) "a") (data (i32.const 259743) "a") (data (i32.const 259746) "a") (data (i32.const 259749) "a") (data (i32.const 259752) "a") (data (i32.const 259755) "a") (data (i32.const 259758) "a") (data (i32.const 259761) "a") (data (i32.const 259764) "a") (data (i32.const 259767) "a") (data (i32.const 259770) "a") (data (i32.const 259773) "a") (data (i32.const 259776) "a") (data (i32.const 259779) "a") (data (i32.const 259782) "a") (data (i32.const 259785) "a") (data (i32.const 259788) "a") (data (i32.const 259791) "a") (data (i32.const 259794) "a") (data (i32.const 259797) "a") (data (i32.const 259800) "a") (data (i32.const 259803) "a") (data (i32.const 259806) "a") (data (i32.const 259809) "a") (data (i32.const 259812) "a") (data (i32.const 259815) "a") (data (i32.const 259818) "a") (data (i32.const 259821) "a") (data (i32.const 259824) "a") (data (i32.const 259827) "a") (data (i32.const 259830) "a") (data (i32.const 259833) "a") (data (i32.const 259836) "a") (data (i32.const 259839) "a") (data (i32.const 259842) "a") (data (i32.const 259845) "a") (data (i32.const 259848) "a") (data (i32.const 259851) "a") (data (i32.const 259854) "a") (data (i32.const 259857) "a") (data (i32.const 259860) "a") (data (i32.const 259863) "a") (data (i32.const 259866) "a") (data (i32.const 259869) "a") (data (i32.const 259872) "a") (data (i32.const 259875) "a") (data (i32.const 259878) "a") (data (i32.const 259881) "a") (data (i32.const 259884) "a") (data (i32.const 259887) "a") (data (i32.const 259890) "a") (data (i32.const 259893) "a") (data (i32.const 259896) "a") (data (i32.const 259899) "a") (data (i32.const 259902) "a") (data (i32.const 259905) "a") (data (i32.const 259908) "a") (data (i32.const 259911) "a") (data (i32.const 259914) "a") (data (i32.const 259917) "a") (data (i32.const 259920) "a") (data (i32.const 259923) "a") (data (i32.const 259926) "a") (data (i32.const 259929) "a") (data (i32.const 259932) "a") (data (i32.const 259935) "a") (data (i32.const 259938) "a") (data (i32.const 259941) "a") (data (i32.const 259944) "a") (data (i32.const 259947) "a") (data (i32.const 259950) "a") (data (i32.const 259953) "a") (data (i32.const 259956) "a") (data (i32.const 259959) "a") (data (i32.const 259962) "a") (data (i32.const 259965) "a") (data (i32.const 259968) "a") (data (i32.const 259971) "a") (data (i32.const 259974) "a") (data (i32.const 259977) "a") (data (i32.const 259980) "a") (data (i32.const 259983) "a") (data (i32.const 259986) "a") (data (i32.const 259989) "a") (data (i32.const 259992) "a") (data (i32.const 259995) "a") (data (i32.const 259998) "a") (data (i32.const 260001) "a") (data (i32.const 260004) "a") (data (i32.const 260007) "a") (data (i32.const 260010) "a") (data (i32.const 260013) "a") (data (i32.const 260016) "a") (data (i32.const 260019) "a") (data (i32.const 260022) "a") (data (i32.const 260025) "a") (data (i32.const 260028) "a") (data (i32.const 260031) "a") (data (i32.const 260034) "a") (data (i32.const 260037) "a") (data (i32.const 260040) "a") (data (i32.const 260043) "a") (data (i32.const 260046) "a") (data (i32.const 260049) "a") (data (i32.const 260052) "a") (data (i32.const 260055) "a") (data (i32.const 260058) "a") (data (i32.const 260061) "a") (data (i32.const 260064) "a") (data (i32.const 260067) "a") (data (i32.const 260070) "a") (data (i32.const 260073) "a") (data (i32.const 260076) "a") (data (i32.const 260079) "a") (data (i32.const 260082) "a") (data (i32.const 260085) "a") (data (i32.const 260088) "a") (data (i32.const 260091) "a") (data (i32.const 260094) "a") (data (i32.const 260097) "a") (data (i32.const 260100) "a") (data (i32.const 260103) "a") (data (i32.const 260106) "a") (data (i32.const 260109) "a") (data (i32.const 260112) "a") (data (i32.const 260115) "a") (data (i32.const 260118) "a") (data (i32.const 260121) "a") (data (i32.const 260124) "a") (data (i32.const 260127) "a") (data (i32.const 260130) "a") (data (i32.const 260133) "a") (data (i32.const 260136) "a") (data (i32.const 260139) "a") (data (i32.const 260142) "a") (data (i32.const 260145) "a") (data (i32.const 260148) "a") (data (i32.const 260151) "a") (data (i32.const 260154) "a") (data (i32.const 260157) "a") (data (i32.const 260160) "a") (data (i32.const 260163) "a") (data (i32.const 260166) "a") (data (i32.const 260169) "a") (data (i32.const 260172) "a") (data (i32.const 260175) "a") (data (i32.const 260178) "a") (data (i32.const 260181) "a") (data (i32.const 260184) "a") (data (i32.const 260187) "a") (data (i32.const 260190) "a") (data (i32.const 260193) "a") (data (i32.const 260196) "a") (data (i32.const 260199) "a") (data (i32.const 260202) "a") (data (i32.const 260205) "a") (data (i32.const 260208) "a") (data (i32.const 260211) "a") (data (i32.const 260214) "a") (data (i32.const 260217) "a") (data (i32.const 260220) "a") (data (i32.const 260223) "a") (data (i32.const 260226) "a") (data (i32.const 260229) "a") (data (i32.const 260232) "a") (data (i32.const 260235) "a") (data (i32.const 260238) "a") (data (i32.const 260241) "a") (data (i32.const 260244) "a") (data (i32.const 260247) "a") (data (i32.const 260250) "a") (data (i32.const 260253) "a") (data (i32.const 260256) "a") (data (i32.const 260259) "a") (data (i32.const 260262) "a") (data (i32.const 260265) "a") (data (i32.const 260268) "a") (data (i32.const 260271) "a") (data (i32.const 260274) "a") (data (i32.const 260277) "a") (data (i32.const 260280) "a") (data (i32.const 260283) "a") (data (i32.const 260286) "a") (data (i32.const 260289) "a") (data (i32.const 260292) "a") (data (i32.const 260295) "a") (data (i32.const 260298) "a") (data (i32.const 260301) "a") (data (i32.const 260304) "a") (data (i32.const 260307) "a") (data (i32.const 260310) "a") (data (i32.const 260313) "a") (data (i32.const 260316) "a") (data (i32.const 260319) "a") (data (i32.const 260322) "a") (data (i32.const 260325) "a") (data (i32.const 260328) "a") (data (i32.const 260331) "a") (data (i32.const 260334) "a") (data (i32.const 260337) "a") (data (i32.const 260340) "a") (data (i32.const 260343) "a") (data (i32.const 260346) "a") (data (i32.const 260349) "a") (data (i32.const 260352) "a") (data (i32.const 260355) "a") (data (i32.const 260358) "a") (data (i32.const 260361) "a") (data (i32.const 260364) "a") (data (i32.const 260367) "a") (data (i32.const 260370) "a") (data (i32.const 260373) "a") (data (i32.const 260376) "a") (data (i32.const 260379) "a") (data (i32.const 260382) "a") (data (i32.const 260385) "a") (data (i32.const 260388) "a") (data (i32.const 260391) "a") (data (i32.const 260394) "a") (data (i32.const 260397) "a") (data (i32.const 260400) "a") (data (i32.const 260403) "a") (data (i32.const 260406) "a") (data (i32.const 260409) "a") (data (i32.const 260412) "a") (data (i32.const 260415) "a") (data (i32.const 260418) "a") (data (i32.const 260421) "a") (data (i32.const 260424) "a") (data (i32.const 260427) "a") (data (i32.const 260430) "a") (data (i32.const 260433) "a") (data (i32.const 260436) "a") (data (i32.const 260439) "a") (data (i32.const 260442) "a") (data (i32.const 260445) "a") (data (i32.const 260448) "a") (data (i32.const 260451) "a") (data (i32.const 260454) "a") (data (i32.const 260457) "a") (data (i32.const 260460) "a") (data (i32.const 260463) "a") (data (i32.const 260466) "a") (data (i32.const 260469) "a") (data (i32.const 260472) "a") (data (i32.const 260475) "a") (data (i32.const 260478) "a") (data (i32.const 260481) "a") (data (i32.const 260484) "a") (data (i32.const 260487) "a") (data (i32.const 260490) "a") (data (i32.const 260493) "a") (data (i32.const 260496) "a") (data (i32.const 260499) "a") (data (i32.const 260502) "a") (data (i32.const 260505) "a") (data (i32.const 260508) "a") (data (i32.const 260511) "a") (data (i32.const 260514) "a") (data (i32.const 260517) "a") (data (i32.const 260520) "a") (data (i32.const 260523) "a") (data (i32.const 260526) "a") (data (i32.const 260529) "a") (data (i32.const 260532) "a") (data (i32.const 260535) "a") (data (i32.const 260538) "a") (data (i32.const 260541) "a") (data (i32.const 260544) "a") (data (i32.const 260547) "a") (data (i32.const 260550) "a") (data (i32.const 260553) "a") (data (i32.const 260556) "a") (data (i32.const 260559) "a") (data (i32.const 260562) "a") (data (i32.const 260565) "a") (data (i32.const 260568) "a") (data (i32.const 260571) "a") (data (i32.const 260574) "a") (data (i32.const 260577) "a") (data (i32.const 260580) "a") (data (i32.const 260583) "a") (data (i32.const 260586) "a") (data (i32.const 260589) "a") (data (i32.const 260592) "a") (data (i32.const 260595) "a") (data (i32.const 260598) "a") (data (i32.const 260601) "a") (data (i32.const 260604) "a") (data (i32.const 260607) "a") (data (i32.const 260610) "a") (data (i32.const 260613) "a") (data (i32.const 260616) "a") (data (i32.const 260619) "a") (data (i32.const 260622) "a") (data (i32.const 260625) "a") (data (i32.const 260628) "a") (data (i32.const 260631) "a") (data (i32.const 260634) "a") (data (i32.const 260637) "a") (data (i32.const 260640) "a") (data (i32.const 260643) "a") (data (i32.const 260646) "a") (data (i32.const 260649) "a") (data (i32.const 260652) "a") (data (i32.const 260655) "a") (data (i32.const 260658) "a") (data (i32.const 260661) "a") (data (i32.const 260664) "a") (data (i32.const 260667) "a") (data (i32.const 260670) "a") (data (i32.const 260673) "a") (data (i32.const 260676) "a") (data (i32.const 260679) "a") (data (i32.const 260682) "a") (data (i32.const 260685) "a") (data (i32.const 260688) "a") (data (i32.const 260691) "a") (data (i32.const 260694) "a") (data (i32.const 260697) "a") (data (i32.const 260700) "a") (data (i32.const 260703) "a") (data (i32.const 260706) "a") (data (i32.const 260709) "a") (data (i32.const 260712) "a") (data (i32.const 260715) "a") (data (i32.const 260718) "a") (data (i32.const 260721) "a") (data (i32.const 260724) "a") (data (i32.const 260727) "a") (data (i32.const 260730) "a") (data (i32.const 260733) "a") (data (i32.const 260736) "a") (data (i32.const 260739) "a") (data (i32.const 260742) "a") (data (i32.const 260745) "a") (data (i32.const 260748) "a") (data (i32.const 260751) "a") (data (i32.const 260754) "a") (data (i32.const 260757) "a") (data (i32.const 260760) "a") (data (i32.const 260763) "a") (data (i32.const 260766) "a") (data (i32.const 260769) "a") (data (i32.const 260772) "a") (data (i32.const 260775) "a") (data (i32.const 260778) "a") (data (i32.const 260781) "a") (data (i32.const 260784) "a") (data (i32.const 260787) "a") (data (i32.const 260790) "a") (data (i32.const 260793) "a") (data (i32.const 260796) "a") (data (i32.const 260799) "a") (data (i32.const 260802) "a") (data (i32.const 260805) "a") (data (i32.const 260808) "a") (data (i32.const 260811) "a") (data (i32.const 260814) "a") (data (i32.const 260817) "a") (data (i32.const 260820) "a") (data (i32.const 260823) "a") (data (i32.const 260826) "a") (data (i32.const 260829) "a") (data (i32.const 260832) "a") (data (i32.const 260835) "a") (data (i32.const 260838) "a") (data (i32.const 260841) "a") (data (i32.const 260844) "a") (data (i32.const 260847) "a") (data (i32.const 260850) "a") (data (i32.const 260853) "a") (data (i32.const 260856) "a") (data (i32.const 260859) "a") (data (i32.const 260862) "a") (data (i32.const 260865) "a") (data (i32.const 260868) "a") (data (i32.const 260871) "a") (data (i32.const 260874) "a") (data (i32.const 260877) "a") (data (i32.const 260880) "a") (data (i32.const 260883) "a") (data (i32.const 260886) "a") (data (i32.const 260889) "a") (data (i32.const 260892) "a") (data (i32.const 260895) "a") (data (i32.const 260898) "a") (data (i32.const 260901) "a") (data (i32.const 260904) "a") (data (i32.const 260907) "a") (data (i32.const 260910) "a") (data (i32.const 260913) "a") (data (i32.const 260916) "a") (data (i32.const 260919) "a") (data (i32.const 260922) "a") (data (i32.const 260925) "a") (data (i32.const 260928) "a") (data (i32.const 260931) "a") (data (i32.const 260934) "a") (data (i32.const 260937) "a") (data (i32.const 260940) "a") (data (i32.const 260943) "a") (data (i32.const 260946) "a") (data (i32.const 260949) "a") (data (i32.const 260952) "a") (data (i32.const 260955) "a") (data (i32.const 260958) "a") (data (i32.const 260961) "a") (data (i32.const 260964) "a") (data (i32.const 260967) "a") (data (i32.const 260970) "a") (data (i32.const 260973) "a") (data (i32.const 260976) "a") (data (i32.const 260979) "a") (data (i32.const 260982) "a") (data (i32.const 260985) "a") (data (i32.const 260988) "a") (data (i32.const 260991) "a") (data (i32.const 260994) "a") (data (i32.const 260997) "a") (data (i32.const 261000) "a") (data (i32.const 261003) "a") (data (i32.const 261006) "a") (data (i32.const 261009) "a") (data (i32.const 261012) "a") (data (i32.const 261015) "a") (data (i32.const 261018) "a") (data (i32.const 261021) "a") (data (i32.const 261024) "a") (data (i32.const 261027) "a") (data (i32.const 261030) "a") (data (i32.const 261033) "a") (data (i32.const 261036) "a") (data (i32.const 261039) "a") (data (i32.const 261042) "a") (data (i32.const 261045) "a") (data (i32.const 261048) "a") (data (i32.const 261051) "a") (data (i32.const 261054) "a") (data (i32.const 261057) "a") (data (i32.const 261060) "a") (data (i32.const 261063) "a") (data (i32.const 261066) "a") (data (i32.const 261069) "a") (data (i32.const 261072) "a") (data (i32.const 261075) "a") (data (i32.const 261078) "a") (data (i32.const 261081) "a") (data (i32.const 261084) "a") (data (i32.const 261087) "a") (data (i32.const 261090) "a") (data (i32.const 261093) "a") (data (i32.const 261096) "a") (data (i32.const 261099) "a") (data (i32.const 261102) "a") (data (i32.const 261105) "a") (data (i32.const 261108) "a") (data (i32.const 261111) "a") (data (i32.const 261114) "a") (data (i32.const 261117) "a") (data (i32.const 261120) "a") (data (i32.const 261123) "a") (data (i32.const 261126) "a") (data (i32.const 261129) "a") (data (i32.const 261132) "a") (data (i32.const 261135) "a") (data (i32.const 261138) "a") (data (i32.const 261141) "a") (data (i32.const 261144) "a") (data (i32.const 261147) "a") (data (i32.const 261150) "a") (data (i32.const 261153) "a") (data (i32.const 261156) "a") (data (i32.const 261159) "a") (data (i32.const 261162) "a") (data (i32.const 261165) "a") (data (i32.const 261168) "a") (data (i32.const 261171) "a") (data (i32.const 261174) "a") (data (i32.const 261177) "a") (data (i32.const 261180) "a") (data (i32.const 261183) "a") (data (i32.const 261186) "a") (data (i32.const 261189) "a") (data (i32.const 261192) "a") (data (i32.const 261195) "a") (data (i32.const 261198) "a") (data (i32.const 261201) "a") (data (i32.const 261204) "a") (data (i32.const 261207) "a") (data (i32.const 261210) "a") (data (i32.const 261213) "a") (data (i32.const 261216) "a") (data (i32.const 261219) "a") (data (i32.const 261222) "a") (data (i32.const 261225) "a") (data (i32.const 261228) "a") (data (i32.const 261231) "a") (data (i32.const 261234) "a") (data (i32.const 261237) "a") (data (i32.const 261240) "a") (data (i32.const 261243) "a") (data (i32.const 261246) "a") (data (i32.const 261249) "a") (data (i32.const 261252) "a") (data (i32.const 261255) "a") (data (i32.const 261258) "a") (data (i32.const 261261) "a") (data (i32.const 261264) "a") (data (i32.const 261267) "a") (data (i32.const 261270) "a") (data (i32.const 261273) "a") (data (i32.const 261276) "a") (data (i32.const 261279) "a") (data (i32.const 261282) "a") (data (i32.const 261285) "a") (data (i32.const 261288) "a") (data (i32.const 261291) "a") (data (i32.const 261294) "a") (data (i32.const 261297) "a") (data (i32.const 261300) "a") (data (i32.const 261303) "a") (data (i32.const 261306) "a") (data (i32.const 261309) "a") (data (i32.const 261312) "a") (data (i32.const 261315) "a") (data (i32.const 261318) "a") (data (i32.const 261321) "a") (data (i32.const 261324) "a") (data (i32.const 261327) "a") (data (i32.const 261330) "a") (data (i32.const 261333) "a") (data (i32.const 261336) "a") (data (i32.const 261339) "a") (data (i32.const 261342) "a") (data (i32.const 261345) "a") (data (i32.const 261348) "a") (data (i32.const 261351) "a") (data (i32.const 261354) "a") (data (i32.const 261357) "a") (data (i32.const 261360) "a") (data (i32.const 261363) "a") (data (i32.const 261366) "a") (data (i32.const 261369) "a") (data (i32.const 261372) "a") (data (i32.const 261375) "a") (data (i32.const 261378) "a") (data (i32.const 261381) "a") (data (i32.const 261384) "a") (data (i32.const 261387) "a") (data (i32.const 261390) "a") (data (i32.const 261393) "a") (data (i32.const 261396) "a") (data (i32.const 261399) "a") (data (i32.const 261402) "a") (data (i32.const 261405) "a") (data (i32.const 261408) "a") (data (i32.const 261411) "a") (data (i32.const 261414) "a") (data (i32.const 261417) "a") (data (i32.const 261420) "a") (data (i32.const 261423) "a") (data (i32.const 261426) "a") (data (i32.const 261429) "a") (data (i32.const 261432) "a") (data (i32.const 261435) "a") (data (i32.const 261438) "a") (data (i32.const 261441) "a") (data (i32.const 261444) "a") (data (i32.const 261447) "a") (data (i32.const 261450) "a") (data (i32.const 261453) "a") (data (i32.const 261456) "a") (data (i32.const 261459) "a") (data (i32.const 261462) "a") (data (i32.const 261465) "a") (data (i32.const 261468) "a") (data (i32.const 261471) "a") (data (i32.const 261474) "a") (data (i32.const 261477) "a") (data (i32.const 261480) "a") (data (i32.const 261483) "a") (data (i32.const 261486) "a") (data (i32.const 261489) "a") (data (i32.const 261492) "a") (data (i32.const 261495) "a") (data (i32.const 261498) "a") (data (i32.const 261501) "a") (data (i32.const 261504) "a") (data (i32.const 261507) "a") (data (i32.const 261510) "a") (data (i32.const 261513) "a") (data (i32.const 261516) "a") (data (i32.const 261519) "a") (data (i32.const 261522) "a") (data (i32.const 261525) "a") (data (i32.const 261528) "a") (data (i32.const 261531) "a") (data (i32.const 261534) "a") (data (i32.const 261537) "a") (data (i32.const 261540) "a") (data (i32.const 261543) "a") (data (i32.const 261546) "a") (data (i32.const 261549) "a") (data (i32.const 261552) "a") (data (i32.const 261555) "a") (data (i32.const 261558) "a") (data (i32.const 261561) "a") (data (i32.const 261564) "a") (data (i32.const 261567) "a") (data (i32.const 261570) "a") (data (i32.const 261573) "a") (data (i32.const 261576) "a") (data (i32.const 261579) "a") (data (i32.const 261582) "a") (data (i32.const 261585) "a") (data (i32.const 261588) "a") (data (i32.const 261591) "a") (data (i32.const 261594) "a") (data (i32.const 261597) "a") (data (i32.const 261600) "a") (data (i32.const 261603) "a") (data (i32.const 261606) "a") (data (i32.const 261609) "a") (data (i32.const 261612) "a") (data (i32.const 261615) "a") (data (i32.const 261618) "a") (data (i32.const 261621) "a") (data (i32.const 261624) "a") (data (i32.const 261627) "a") (data (i32.const 261630) "a") (data (i32.const 261633) "a") (data (i32.const 261636) "a") (data (i32.const 261639) "a") (data (i32.const 261642) "a") (data (i32.const 261645) "a") (data (i32.const 261648) "a") (data (i32.const 261651) "a") (data (i32.const 261654) "a") (data (i32.const 261657) "a") (data (i32.const 261660) "a") (data (i32.const 261663) "a") (data (i32.const 261666) "a") (data (i32.const 261669) "a") (data (i32.const 261672) "a") (data (i32.const 261675) "a") (data (i32.const 261678) "a") (data (i32.const 261681) "a") (data (i32.const 261684) "a") (data (i32.const 261687) "a") (data (i32.const 261690) "a") (data (i32.const 261693) "a") (data (i32.const 261696) "a") (data (i32.const 261699) "a") (data (i32.const 261702) "a") (data (i32.const 261705) "a") (data (i32.const 261708) "a") (data (i32.const 261711) "a") (data (i32.const 261714) "a") (data (i32.const 261717) "a") (data (i32.const 261720) "a") (data (i32.const 261723) "a") (data (i32.const 261726) "a") (data (i32.const 261729) "a") (data (i32.const 261732) "a") (data (i32.const 261735) "a") (data (i32.const 261738) "a") (data (i32.const 261741) "a") (data (i32.const 261744) "a") (data (i32.const 261747) "a") (data (i32.const 261750) "a") (data (i32.const 261753) "a") (data (i32.const 261756) "a") (data (i32.const 261759) "a") (data (i32.const 261762) "a") (data (i32.const 261765) "a") (data (i32.const 261768) "a") (data (i32.const 261771) "a") (data (i32.const 261774) "a") (data (i32.const 261777) "a") (data (i32.const 261780) "a") (data (i32.const 261783) "a") (data (i32.const 261786) "a") (data (i32.const 261789) "a") (data (i32.const 261792) "a") (data (i32.const 261795) "a") (data (i32.const 261798) "a") (data (i32.const 261801) "a") (data (i32.const 261804) "a") (data (i32.const 261807) "a") (data (i32.const 261810) "a") (data (i32.const 261813) "a") (data (i32.const 261816) "a") (data (i32.const 261819) "a") (data (i32.const 261822) "a") (data (i32.const 261825) "a") (data (i32.const 261828) "a") (data (i32.const 261831) "a") (data (i32.const 261834) "a") (data (i32.const 261837) "a") (data (i32.const 261840) "a") (data (i32.const 261843) "a") (data (i32.const 261846) "a") (data (i32.const 261849) "a") (data (i32.const 261852) "a") (data (i32.const 261855) "a") (data (i32.const 261858) "a") (data (i32.const 261861) "a") (data (i32.const 261864) "a") (data (i32.const 261867) "a") (data (i32.const 261870) "a") (data (i32.const 261873) "a") (data (i32.const 261876) "a") (data (i32.const 261879) "a") (data (i32.const 261882) "a") (data (i32.const 261885) "a") (data (i32.const 261888) "a") (data (i32.const 261891) "a") (data (i32.const 261894) "a") (data (i32.const 261897) "a") (data (i32.const 261900) "a") (data (i32.const 261903) "a") (data (i32.const 261906) "a") (data (i32.const 261909) "a") (data (i32.const 261912) "a") (data (i32.const 261915) "a") (data (i32.const 261918) "a") (data (i32.const 261921) "a") (data (i32.const 261924) "a") (data (i32.const 261927) "a") (data (i32.const 261930) "a") (data (i32.const 261933) "a") (data (i32.const 261936) "a") (data (i32.const 261939) "a") (data (i32.const 261942) "a") (data (i32.const 261945) "a") (data (i32.const 261948) "a") (data (i32.const 261951) "a") (data (i32.const 261954) "a") (data (i32.const 261957) "a") (data (i32.const 261960) "a") (data (i32.const 261963) "a") (data (i32.const 261966) "a") (data (i32.const 261969) "a") (data (i32.const 261972) "a") (data (i32.const 261975) "a") (data (i32.const 261978) "a") (data (i32.const 261981) "a") (data (i32.const 261984) "a") (data (i32.const 261987) "a") (data (i32.const 261990) "a") (data (i32.const 261993) "a") (data (i32.const 261996) "a") (data (i32.const 261999) "a") (data (i32.const 262002) "a") (data (i32.const 262005) "a") (data (i32.const 262008) "a") (data (i32.const 262011) "a") (data (i32.const 262014) "a") (data (i32.const 262017) "a") (data (i32.const 262020) "a") (data (i32.const 262023) "a") (data (i32.const 262026) "a") (data (i32.const 262029) "a") (data (i32.const 262032) "a") (data (i32.const 262035) "a") (data (i32.const 262038) "a") (data (i32.const 262041) "a") (data (i32.const 262044) "a") (data (i32.const 262047) "a") (data (i32.const 262050) "a") (data (i32.const 262053) "a") (data (i32.const 262056) "a") (data (i32.const 262059) "a") (data (i32.const 262062) "a") (data (i32.const 262065) "a") (data (i32.const 262068) "a") (data (i32.const 262071) "a") (data (i32.const 262074) "a") (data (i32.const 262077) "a") (data (i32.const 262080) "a") (data (i32.const 262083) "a") (data (i32.const 262086) "a") (data (i32.const 262089) "a") (data (i32.const 262092) "a") (data (i32.const 262095) "a") (data (i32.const 262098) "a") (data (i32.const 262101) "a") (data (i32.const 262104) "a") (data (i32.const 262107) "a") (data (i32.const 262110) "a") (data (i32.const 262113) "a") (data (i32.const 262116) "a") (data (i32.const 262119) "a") (data (i32.const 262122) "a") (data (i32.const 262125) "a") (data (i32.const 262128) "a") (data (i32.const 262131) "a") (data (i32.const 262134) "a") (data (i32.const 262137) "a") (data (i32.const 262140) "a") (data (i32.const 262143) "a") (data (i32.const 262146) "a") (data (i32.const 262149) "a") (data (i32.const 262152) "a") (data (i32.const 262155) "a") (data (i32.const 262158) "a") (data (i32.const 262161) "a") (data (i32.const 262164) "a") (data (i32.const 262167) "a") (data (i32.const 262170) "a") (data (i32.const 262173) "a") (data (i32.const 262176) "a") (data (i32.const 262179) "a") (data (i32.const 262182) "a") (data (i32.const 262185) "a") (data (i32.const 262188) "a") (data (i32.const 262191) "a") (data (i32.const 262194) "a") (data (i32.const 262197) "a") (data (i32.const 262200) "a") (data (i32.const 262203) "a") (data (i32.const 262206) "a") (data (i32.const 262209) "a") (data (i32.const 262212) "a") (data (i32.const 262215) "a") (data (i32.const 262218) "a") (data (i32.const 262221) "a") (data (i32.const 262224) "a") (data (i32.const 262227) "a") (data (i32.const 262230) "a") (data (i32.const 262233) "a") (data (i32.const 262236) "a") (data (i32.const 262239) "a") (data (i32.const 262242) "a") (data (i32.const 262245) "a") (data (i32.const 262248) "a") (data (i32.const 262251) "a") (data (i32.const 262254) "a") (data (i32.const 262257) "a") (data (i32.const 262260) "a") (data (i32.const 262263) "a") (data (i32.const 262266) "a") (data (i32.const 262269) "a") (data (i32.const 262272) "a") (data (i32.const 262275) "a") (data (i32.const 262278) "a") (data (i32.const 262281) "a") (data (i32.const 262284) "a") (data (i32.const 262287) "a") (data (i32.const 262290) "a") (data (i32.const 262293) "a") (data (i32.const 262296) "a") (data (i32.const 262299) "a") (data (i32.const 262302) "a") (data (i32.const 262305) "a") (data (i32.const 262308) "a") (data (i32.const 262311) "a") (data (i32.const 262314) "a") (data (i32.const 262317) "a") (data (i32.const 262320) "a") (data (i32.const 262323) "a") (data (i32.const 262326) "a") (data (i32.const 262329) "a") (data (i32.const 262332) "a") (data (i32.const 262335) "a") (data (i32.const 262338) "a") (data (i32.const 262341) "a") (data (i32.const 262344) "a") (data (i32.const 262347) "a") (data (i32.const 262350) "a") (data (i32.const 262353) "a") (data (i32.const 262356) "a") (data (i32.const 262359) "a") (data (i32.const 262362) "a") (data (i32.const 262365) "a") (data (i32.const 262368) "a") (data (i32.const 262371) "a") (data (i32.const 262374) "a") (data (i32.const 262377) "a") (data (i32.const 262380) "a") (data (i32.const 262383) "a") (data (i32.const 262386) "a") (data (i32.const 262389) "a") (data (i32.const 262392) "a") (data (i32.const 262395) "a") (data (i32.const 262398) "a") (data (i32.const 262401) "a") (data (i32.const 262404) "a") (data (i32.const 262407) "a") (data (i32.const 262410) "a") (data (i32.const 262413) "a") (data (i32.const 262416) "a") (data (i32.const 262419) "a") (data (i32.const 262422) "a") (data (i32.const 262425) "a") (data (i32.const 262428) "a") (data (i32.const 262431) "a") (data (i32.const 262434) "a") (data (i32.const 262437) "a") (data (i32.const 262440) "a") (data (i32.const 262443) "a") (data (i32.const 262446) "a") (data (i32.const 262449) "a") (data (i32.const 262452) "a") (data (i32.const 262455) "a") (data (i32.const 262458) "a") (data (i32.const 262461) "a") (data (i32.const 262464) "a") (data (i32.const 262467) "a") (data (i32.const 262470) "a") (data (i32.const 262473) "a") (data (i32.const 262476) "a") (data (i32.const 262479) "a") (data (i32.const 262482) "a") (data (i32.const 262485) "a") (data (i32.const 262488) "a") (data (i32.const 262491) "a") (data (i32.const 262494) "a") (data (i32.const 262497) "a") (data (i32.const 262500) "a") (data (i32.const 262503) "a") (data (i32.const 262506) "a") (data (i32.const 262509) "a") (data (i32.const 262512) "a") (data (i32.const 262515) "a") (data (i32.const 262518) "a") (data (i32.const 262521) "a") (data (i32.const 262524) "a") (data (i32.const 262527) "a") (data (i32.const 262530) "a") (data (i32.const 262533) "a") (data (i32.const 262536) "a") (data (i32.const 262539) "a") (data (i32.const 262542) "a") (data (i32.const 262545) "a") (data (i32.const 262548) "a") (data (i32.const 262551) "a") (data (i32.const 262554) "a") (data (i32.const 262557) "a") (data (i32.const 262560) "a") (data (i32.const 262563) "a") (data (i32.const 262566) "a") (data (i32.const 262569) "a") (data (i32.const 262572) "a") (data (i32.const 262575) "a") (data (i32.const 262578) "a") (data (i32.const 262581) "a") (data (i32.const 262584) "a") (data (i32.const 262587) "a") (data (i32.const 262590) "a") (data (i32.const 262593) "a") (data (i32.const 262596) "a") (data (i32.const 262599) "a") (data (i32.const 262602) "a") (data (i32.const 262605) "a") (data (i32.const 262608) "a") (data (i32.const 262611) "a") (data (i32.const 262614) "a") (data (i32.const 262617) "a") (data (i32.const 262620) "a") (data (i32.const 262623) "a") (data (i32.const 262626) "a") (data (i32.const 262629) "a") (data (i32.const 262632) "a") (data (i32.const 262635) "a") (data (i32.const 262638) "a") (data (i32.const 262641) "a") (data (i32.const 262644) "a") (data (i32.const 262647) "a") (data (i32.const 262650) "a") (data (i32.const 262653) "a") (data (i32.const 262656) "a") (data (i32.const 262659) "a") (data (i32.const 262662) "a") (data (i32.const 262665) "a") (data (i32.const 262668) "a") (data (i32.const 262671) "a") (data (i32.const 262674) "a") (data (i32.const 262677) "a") (data (i32.const 262680) "a") (data (i32.const 262683) "a") (data (i32.const 262686) "a") (data (i32.const 262689) "a") (data (i32.const 262692) "a") (data (i32.const 262695) "a") (data (i32.const 262698) "a") (data (i32.const 262701) "a") (data (i32.const 262704) "a") (data (i32.const 262707) "a") (data (i32.const 262710) "a") (data (i32.const 262713) "a") (data (i32.const 262716) "a") (data (i32.const 262719) "a") (data (i32.const 262722) "a") (data (i32.const 262725) "a") (data (i32.const 262728) "a") (data (i32.const 262731) "a") (data (i32.const 262734) "a") (data (i32.const 262737) "a") (data (i32.const 262740) "a") (data (i32.const 262743) "a") (data (i32.const 262746) "a") (data (i32.const 262749) "a") (data (i32.const 262752) "a") (data (i32.const 262755) "a") (data (i32.const 262758) "a") (data (i32.const 262761) "a") (data (i32.const 262764) "a") (data (i32.const 262767) "a") (data (i32.const 262770) "a") (data (i32.const 262773) "a") (data (i32.const 262776) "a") (data (i32.const 262779) "a") (data (i32.const 262782) "a") (data (i32.const 262785) "a") (data (i32.const 262788) "a") (data (i32.const 262791) "a") (data (i32.const 262794) "a") (data (i32.const 262797) "a") (data (i32.const 262800) "a") (data (i32.const 262803) "a") (data (i32.const 262806) "a") (data (i32.const 262809) "a") (data (i32.const 262812) "a") (data (i32.const 262815) "a") (data (i32.const 262818) "a") (data (i32.const 262821) "a") (data (i32.const 262824) "a") (data (i32.const 262827) "a") (data (i32.const 262830) "a") (data (i32.const 262833) "a") (data (i32.const 262836) "a") (data (i32.const 262839) "a") (data (i32.const 262842) "a") (data (i32.const 262845) "a") (data (i32.const 262848) "a") (data (i32.const 262851) "a") (data (i32.const 262854) "a") (data (i32.const 262857) "a") (data (i32.const 262860) "a") (data (i32.const 262863) "a") (data (i32.const 262866) "a") (data (i32.const 262869) "a") (data (i32.const 262872) "a") (data (i32.const 262875) "a") (data (i32.const 262878) "a") (data (i32.const 262881) "a") (data (i32.const 262884) "a") (data (i32.const 262887) "a") (data (i32.const 262890) "a") (data (i32.const 262893) "a") (data (i32.const 262896) "a") (data (i32.const 262899) "a") (data (i32.const 262902) "a") (data (i32.const 262905) "a") (data (i32.const 262908) "a") (data (i32.const 262911) "a") (data (i32.const 262914) "a") (data (i32.const 262917) "a") (data (i32.const 262920) "a") (data (i32.const 262923) "a") (data (i32.const 262926) "a") (data (i32.const 262929) "a") (data (i32.const 262932) "a") (data (i32.const 262935) "a") (data (i32.const 262938) "a") (data (i32.const 262941) "a") (data (i32.const 262944) "a") (data (i32.const 262947) "a") (data (i32.const 262950) "a") (data (i32.const 262953) "a") (data (i32.const 262956) "a") (data (i32.const 262959) "a") (data (i32.const 262962) "a") (data (i32.const 262965) "a") (data (i32.const 262968) "a") (data (i32.const 262971) "a") (data (i32.const 262974) "a") (data (i32.const 262977) "a") (data (i32.const 262980) "a") (data (i32.const 262983) "a") (data (i32.const 262986) "a") (data (i32.const 262989) "a") (data (i32.const 262992) "a") (data (i32.const 262995) "a") (data (i32.const 262998) "a") (data (i32.const 263001) "a") (data (i32.const 263004) "a") (data (i32.const 263007) "a") (data (i32.const 263010) "a") (data (i32.const 263013) "a") (data (i32.const 263016) "a") (data (i32.const 263019) "a") (data (i32.const 263022) "a") (data (i32.const 263025) "a") (data (i32.const 263028) "a") (data (i32.const 263031) "a") (data (i32.const 263034) "a") (data (i32.const 263037) "a") (data (i32.const 263040) "a") (data (i32.const 263043) "a") (data (i32.const 263046) "a") (data (i32.const 263049) "a") (data (i32.const 263052) "a") (data (i32.const 263055) "a") (data (i32.const 263058) "a") (data (i32.const 263061) "a") (data (i32.const 263064) "a") (data (i32.const 263067) "a") (data (i32.const 263070) "a") (data (i32.const 263073) "a") (data (i32.const 263076) "a") (data (i32.const 263079) "a") (data (i32.const 263082) "a") (data (i32.const 263085) "a") (data (i32.const 263088) "a") (data (i32.const 263091) "a") (data (i32.const 263094) "a") (data (i32.const 263097) "a") (data (i32.const 263100) "a") (data (i32.const 263103) "a") (data (i32.const 263106) "a") (data (i32.const 263109) "a") (data (i32.const 263112) "a") (data (i32.const 263115) "a") (data (i32.const 263118) "a") (data (i32.const 263121) "a") (data (i32.const 263124) "a") (data (i32.const 263127) "a") (data (i32.const 263130) "a") (data (i32.const 263133) "a") (data (i32.const 263136) "a") (data (i32.const 263139) "a") (data (i32.const 263142) "a") (data (i32.const 263145) "a") (data (i32.const 263148) "a") (data (i32.const 263151) "a") (data (i32.const 263154) "a") (data (i32.const 263157) "a") (data (i32.const 263160) "a") (data (i32.const 263163) "a") (data (i32.const 263166) "a") (data (i32.const 263169) "a") (data (i32.const 263172) "a") (data (i32.const 263175) "a") (data (i32.const 263178) "a") (data (i32.const 263181) "a") (data (i32.const 263184) "a") (data (i32.const 263187) "a") (data (i32.const 263190) "a") (data (i32.const 263193) "a") (data (i32.const 263196) "a") (data (i32.const 263199) "a") (data (i32.const 263202) "a") (data (i32.const 263205) "a") (data (i32.const 263208) "a") (data (i32.const 263211) "a") (data (i32.const 263214) "a") (data (i32.const 263217) "a") (data (i32.const 263220) "a") (data (i32.const 263223) "a") (data (i32.const 263226) "a") (data (i32.const 263229) "a") (data (i32.const 263232) "a") (data (i32.const 263235) "a") (data (i32.const 263238) "a") (data (i32.const 263241) "a") (data (i32.const 263244) "a") (data (i32.const 263247) "a") (data (i32.const 263250) "a") (data (i32.const 263253) "a") (data (i32.const 263256) "a") (data (i32.const 263259) "a") (data (i32.const 263262) "a") (data (i32.const 263265) "a") (data (i32.const 263268) "a") (data (i32.const 263271) "a") (data (i32.const 263274) "a") (data (i32.const 263277) "a") (data (i32.const 263280) "a") (data (i32.const 263283) "a") (data (i32.const 263286) "a") (data (i32.const 263289) "a") (data (i32.const 263292) "a") (data (i32.const 263295) "a") (data (i32.const 263298) "a") (data (i32.const 263301) "a") (data (i32.const 263304) "a") (data (i32.const 263307) "a") (data (i32.const 263310) "a") (data (i32.const 263313) "a") (data (i32.const 263316) "a") (data (i32.const 263319) "a") (data (i32.const 263322) "a") (data (i32.const 263325) "a") (data (i32.const 263328) "a") (data (i32.const 263331) "a") (data (i32.const 263334) "a") (data (i32.const 263337) "a") (data (i32.const 263340) "a") (data (i32.const 263343) "a") (data (i32.const 263346) "a") (data (i32.const 263349) "a") (data (i32.const 263352) "a") (data (i32.const 263355) "a") (data (i32.const 263358) "a") (data (i32.const 263361) "a") (data (i32.const 263364) "a") (data (i32.const 263367) "a") (data (i32.const 263370) "a") (data (i32.const 263373) "a") (data (i32.const 263376) "a") (data (i32.const 263379) "a") (data (i32.const 263382) "a") (data (i32.const 263385) "a") (data (i32.const 263388) "a") (data (i32.const 263391) "a") (data (i32.const 263394) "a") (data (i32.const 263397) "a") (data (i32.const 263400) "a") (data (i32.const 263403) "a") (data (i32.const 263406) "a") (data (i32.const 263409) "a") (data (i32.const 263412) "a") (data (i32.const 263415) "a") (data (i32.const 263418) "a") (data (i32.const 263421) "a") (data (i32.const 263424) "a") (data (i32.const 263427) "a") (data (i32.const 263430) "a") (data (i32.const 263433) "a") (data (i32.const 263436) "a") (data (i32.const 263439) "a") (data (i32.const 263442) "a") (data (i32.const 263445) "a") (data (i32.const 263448) "a") (data (i32.const 263451) "a") (data (i32.const 263454) "a") (data (i32.const 263457) "a") (data (i32.const 263460) "a") (data (i32.const 263463) "a") (data (i32.const 263466) "a") (data (i32.const 263469) "a") (data (i32.const 263472) "a") (data (i32.const 263475) "a") (data (i32.const 263478) "a") (data (i32.const 263481) "a") (data (i32.const 263484) "a") (data (i32.const 263487) "a") (data (i32.const 263490) "a") (data (i32.const 263493) "a") (data (i32.const 263496) "a") (data (i32.const 263499) "a") (data (i32.const 263502) "a") (data (i32.const 263505) "a") (data (i32.const 263508) "a") (data (i32.const 263511) "a") (data (i32.const 263514) "a") (data (i32.const 263517) "a") (data (i32.const 263520) "a") (data (i32.const 263523) "a") (data (i32.const 263526) "a") (data (i32.const 263529) "a") (data (i32.const 263532) "a") (data (i32.const 263535) "a") (data (i32.const 263538) "a") (data (i32.const 263541) "a") (data (i32.const 263544) "a") (data (i32.const 263547) "a") (data (i32.const 263550) "a") (data (i32.const 263553) "a") (data (i32.const 263556) "a") (data (i32.const 263559) "a") (data (i32.const 263562) "a") (data (i32.const 263565) "a") (data (i32.const 263568) "a") (data (i32.const 263571) "a") (data (i32.const 263574) "a") (data (i32.const 263577) "a") (data (i32.const 263580) "a") (data (i32.const 263583) "a") (data (i32.const 263586) "a") (data (i32.const 263589) "a") (data (i32.const 263592) "a") (data (i32.const 263595) "a") (data (i32.const 263598) "a") (data (i32.const 263601) "a") (data (i32.const 263604) "a") (data (i32.const 263607) "a") (data (i32.const 263610) "a") (data (i32.const 263613) "a") (data (i32.const 263616) "a") (data (i32.const 263619) "a") (data (i32.const 263622) "a") (data (i32.const 263625) "a") (data (i32.const 263628) "a") (data (i32.const 263631) "a") (data (i32.const 263634) "a") (data (i32.const 263637) "a") (data (i32.const 263640) "a") (data (i32.const 263643) "a") (data (i32.const 263646) "a") (data (i32.const 263649) "a") (data (i32.const 263652) "a") (data (i32.const 263655) "a") (data (i32.const 263658) "a") (data (i32.const 263661) "a") (data (i32.const 263664) "a") (data (i32.const 263667) "a") (data (i32.const 263670) "a") (data (i32.const 263673) "a") (data (i32.const 263676) "a") (data (i32.const 263679) "a") (data (i32.const 263682) "a") (data (i32.const 263685) "a") (data (i32.const 263688) "a") (data (i32.const 263691) "a") (data (i32.const 263694) "a") (data (i32.const 263697) "a") (data (i32.const 263700) "a") (data (i32.const 263703) "a") (data (i32.const 263706) "a") (data (i32.const 263709) "a") (data (i32.const 263712) "a") (data (i32.const 263715) "a") (data (i32.const 263718) "a") (data (i32.const 263721) "a") (data (i32.const 263724) "a") (data (i32.const 263727) "a") (data (i32.const 263730) "a") (data (i32.const 263733) "a") (data (i32.const 263736) "a") (data (i32.const 263739) "a") (data (i32.const 263742) "a") (data (i32.const 263745) "a") (data (i32.const 263748) "a") (data (i32.const 263751) "a") (data (i32.const 263754) "a") (data (i32.const 263757) "a") (data (i32.const 263760) "a") (data (i32.const 263763) "a") (data (i32.const 263766) "a") (data (i32.const 263769) "a") (data (i32.const 263772) "a") (data (i32.const 263775) "a") (data (i32.const 263778) "a") (data (i32.const 263781) "a") (data (i32.const 263784) "a") (data (i32.const 263787) "a") (data (i32.const 263790) "a") (data (i32.const 263793) "a") (data (i32.const 263796) "a") (data (i32.const 263799) "a") (data (i32.const 263802) "a") (data (i32.const 263805) "a") (data (i32.const 263808) "a") (data (i32.const 263811) "a") (data (i32.const 263814) "a") (data (i32.const 263817) "a") (data (i32.const 263820) "a") (data (i32.const 263823) "a") (data (i32.const 263826) "a") (data (i32.const 263829) "a") (data (i32.const 263832) "a") (data (i32.const 263835) "a") (data (i32.const 263838) "a") (data (i32.const 263841) "a") (data (i32.const 263844) "a") (data (i32.const 263847) "a") (data (i32.const 263850) "a") (data (i32.const 263853) "a") (data (i32.const 263856) "a") (data (i32.const 263859) "a") (data (i32.const 263862) "a") (data (i32.const 263865) "a") (data (i32.const 263868) "a") (data (i32.const 263871) "a") (data (i32.const 263874) "a") (data (i32.const 263877) "a") (data (i32.const 263880) "a") (data (i32.const 263883) "a") (data (i32.const 263886) "a") (data (i32.const 263889) "a") (data (i32.const 263892) "a") (data (i32.const 263895) "a") (data (i32.const 263898) "a") (data (i32.const 263901) "a") (data (i32.const 263904) "a") (data (i32.const 263907) "a") (data (i32.const 263910) "a") (data (i32.const 263913) "a") (data (i32.const 263916) "a") (data (i32.const 263919) "a") (data (i32.const 263922) "a") (data (i32.const 263925) "a") (data (i32.const 263928) "a") (data (i32.const 263931) "a") (data (i32.const 263934) "a") (data (i32.const 263937) "a") (data (i32.const 263940) "a") (data (i32.const 263943) "a") (data (i32.const 263946) "a") (data (i32.const 263949) "a") (data (i32.const 263952) "a") (data (i32.const 263955) "a") (data (i32.const 263958) "a") (data (i32.const 263961) "a") (data (i32.const 263964) "a") (data (i32.const 263967) "a") (data (i32.const 263970) "a") (data (i32.const 263973) "a") (data (i32.const 263976) "a") (data (i32.const 263979) "a") (data (i32.const 263982) "a") (data (i32.const 263985) "a") (data (i32.const 263988) "a") (data (i32.const 263991) "a") (data (i32.const 263994) "a") (data (i32.const 263997) "a") (data (i32.const 264000) "a") (data (i32.const 264003) "a") (data (i32.const 264006) "a") (data (i32.const 264009) "a") (data (i32.const 264012) "a") (data (i32.const 264015) "a") (data (i32.const 264018) "a") (data (i32.const 264021) "a") (data (i32.const 264024) "a") (data (i32.const 264027) "a") (data (i32.const 264030) "a") (data (i32.const 264033) "a") (data (i32.const 264036) "a") (data (i32.const 264039) "a") (data (i32.const 264042) "a") (data (i32.const 264045) "a") (data (i32.const 264048) "a") (data (i32.const 264051) "a") (data (i32.const 264054) "a") (data (i32.const 264057) "a") (data (i32.const 264060) "a") (data (i32.const 264063) "a") (data (i32.const 264066) "a") (data (i32.const 264069) "a") (data (i32.const 264072) "a") (data (i32.const 264075) "a") (data (i32.const 264078) "a") (data (i32.const 264081) "a") (data (i32.const 264084) "a") (data (i32.const 264087) "a") (data (i32.const 264090) "a") (data (i32.const 264093) "a") (data (i32.const 264096) "a") (data (i32.const 264099) "a") (data (i32.const 264102) "a") (data (i32.const 264105) "a") (data (i32.const 264108) "a") (data (i32.const 264111) "a") (data (i32.const 264114) "a") (data (i32.const 264117) "a") (data (i32.const 264120) "a") (data (i32.const 264123) "a") (data (i32.const 264126) "a") (data (i32.const 264129) "a") (data (i32.const 264132) "a") (data (i32.const 264135) "a") (data (i32.const 264138) "a") (data (i32.const 264141) "a") (data (i32.const 264144) "a") (data (i32.const 264147) "a") (data (i32.const 264150) "a") (data (i32.const 264153) "a") (data (i32.const 264156) "a") (data (i32.const 264159) "a") (data (i32.const 264162) "a") (data (i32.const 264165) "a") (data (i32.const 264168) "a") (data (i32.const 264171) "a") (data (i32.const 264174) "a") (data (i32.const 264177) "a") (data (i32.const 264180) "a") (data (i32.const 264183) "a") (data (i32.const 264186) "a") (data (i32.const 264189) "a") (data (i32.const 264192) "a") (data (i32.const 264195) "a") (data (i32.const 264198) "a") (data (i32.const 264201) "a") (data (i32.const 264204) "a") (data (i32.const 264207) "a") (data (i32.const 264210) "a") (data (i32.const 264213) "a") (data (i32.const 264216) "a") (data (i32.const 264219) "a") (data (i32.const 264222) "a") (data (i32.const 264225) "a") (data (i32.const 264228) "a") (data (i32.const 264231) "a") (data (i32.const 264234) "a") (data (i32.const 264237) "a") (data (i32.const 264240) "a") (data (i32.const 264243) "a") (data (i32.const 264246) "a") (data (i32.const 264249) "a") (data (i32.const 264252) "a") (data (i32.const 264255) "a") (data (i32.const 264258) "a") (data (i32.const 264261) "a") (data (i32.const 264264) "a") (data (i32.const 264267) "a") (data (i32.const 264270) "a") (data (i32.const 264273) "a") (data (i32.const 264276) "a") (data (i32.const 264279) "a") (data (i32.const 264282) "a") (data (i32.const 264285) "a") (data (i32.const 264288) "a") (data (i32.const 264291) "a") (data (i32.const 264294) "a") (data (i32.const 264297) "a") (data (i32.const 264300) "a") (data (i32.const 264303) "a") (data (i32.const 264306) "a") (data (i32.const 264309) "a") (data (i32.const 264312) "a") (data (i32.const 264315) "a") (data (i32.const 264318) "a") (data (i32.const 264321) "a") (data (i32.const 264324) "a") (data (i32.const 264327) "a") (data (i32.const 264330) "a") (data (i32.const 264333) "a") (data (i32.const 264336) "a") (data (i32.const 264339) "a") (data (i32.const 264342) "a") (data (i32.const 264345) "a") (data (i32.const 264348) "a") (data (i32.const 264351) "a") (data (i32.const 264354) "a") (data (i32.const 264357) "a") (data (i32.const 264360) "a") (data (i32.const 264363) "a") (data (i32.const 264366) "a") (data (i32.const 264369) "a") (data (i32.const 264372) "a") (data (i32.const 264375) "a") (data (i32.const 264378) "a") (data (i32.const 264381) "a") (data (i32.const 264384) "a") (data (i32.const 264387) "a") (data (i32.const 264390) "a") (data (i32.const 264393) "a") (data (i32.const 264396) "a") (data (i32.const 264399) "a") (data (i32.const 264402) "a") (data (i32.const 264405) "a") (data (i32.const 264408) "a") (data (i32.const 264411) "a") (data (i32.const 264414) "a") (data (i32.const 264417) "a") (data (i32.const 264420) "a") (data (i32.const 264423) "a") (data (i32.const 264426) "a") (data (i32.const 264429) "a") (data (i32.const 264432) "a") (data (i32.const 264435) "a") (data (i32.const 264438) "a") (data (i32.const 264441) "a") (data (i32.const 264444) "a") (data (i32.const 264447) "a") (data (i32.const 264450) "a") (data (i32.const 264453) "a") (data (i32.const 264456) "a") (data (i32.const 264459) "a") (data (i32.const 264462) "a") (data (i32.const 264465) "a") (data (i32.const 264468) "a") (data (i32.const 264471) "a") (data (i32.const 264474) "a") (data (i32.const 264477) "a") (data (i32.const 264480) "a") (data (i32.const 264483) "a") (data (i32.const 264486) "a") (data (i32.const 264489) "a") (data (i32.const 264492) "a") (data (i32.const 264495) "a") (data (i32.const 264498) "a") (data (i32.const 264501) "a") (data (i32.const 264504) "a") (data (i32.const 264507) "a") (data (i32.const 264510) "a") (data (i32.const 264513) "a") (data (i32.const 264516) "a") (data (i32.const 264519) "a") (data (i32.const 264522) "a") (data (i32.const 264525) "a") (data (i32.const 264528) "a") (data (i32.const 264531) "a") (data (i32.const 264534) "a") (data (i32.const 264537) "a") (data (i32.const 264540) "a") (data (i32.const 264543) "a") (data (i32.const 264546) "a") (data (i32.const 264549) "a") (data (i32.const 264552) "a") (data (i32.const 264555) "a") (data (i32.const 264558) "a") (data (i32.const 264561) "a") (data (i32.const 264564) "a") (data (i32.const 264567) "a") (data (i32.const 264570) "a") (data (i32.const 264573) "a") (data (i32.const 264576) "a") (data (i32.const 264579) "a") (data (i32.const 264582) "a") (data (i32.const 264585) "a") (data (i32.const 264588) "a") (data (i32.const 264591) "a") (data (i32.const 264594) "a") (data (i32.const 264597) "a") (data (i32.const 264600) "a") (data (i32.const 264603) "a") (data (i32.const 264606) "a") (data (i32.const 264609) "a") (data (i32.const 264612) "a") (data (i32.const 264615) "a") (data (i32.const 264618) "a") (data (i32.const 264621) "a") (data (i32.const 264624) "a") (data (i32.const 264627) "a") (data (i32.const 264630) "a") (data (i32.const 264633) "a") (data (i32.const 264636) "a") (data (i32.const 264639) "a") (data (i32.const 264642) "a") (data (i32.const 264645) "a") (data (i32.const 264648) "a") (data (i32.const 264651) "a") (data (i32.const 264654) "a") (data (i32.const 264657) "a") (data (i32.const 264660) "a") (data (i32.const 264663) "a") (data (i32.const 264666) "a") (data (i32.const 264669) "a") (data (i32.const 264672) "a") (data (i32.const 264675) "a") (data (i32.const 264678) "a") (data (i32.const 264681) "a") (data (i32.const 264684) "a") (data (i32.const 264687) "a") (data (i32.const 264690) "a") (data (i32.const 264693) "a") (data (i32.const 264696) "a") (data (i32.const 264699) "a") (data (i32.const 264702) "a") (data (i32.const 264705) "a") (data (i32.const 264708) "a") (data (i32.const 264711) "a") (data (i32.const 264714) "a") (data (i32.const 264717) "a") (data (i32.const 264720) "a") (data (i32.const 264723) "a") (data (i32.const 264726) "a") (data (i32.const 264729) "a") (data (i32.const 264732) "a") (data (i32.const 264735) "a") (data (i32.const 264738) "a") (data (i32.const 264741) "a") (data (i32.const 264744) "a") (data (i32.const 264747) "a") (data (i32.const 264750) "a") (data (i32.const 264753) "a") (data (i32.const 264756) "a") (data (i32.const 264759) "a") (data (i32.const 264762) "a") (data (i32.const 264765) "a") (data (i32.const 264768) "a") (data (i32.const 264771) "a") (data (i32.const 264774) "a") (data (i32.const 264777) "a") (data (i32.const 264780) "a") (data (i32.const 264783) "a") (data (i32.const 264786) "a") (data (i32.const 264789) "a") (data (i32.const 264792) "a") (data (i32.const 264795) "a") (data (i32.const 264798) "a") (data (i32.const 264801) "a") (data (i32.const 264804) "a") (data (i32.const 264807) "a") (data (i32.const 264810) "a") (data (i32.const 264813) "a") (data (i32.const 264816) "a") (data (i32.const 264819) "a") (data (i32.const 264822) "a") (data (i32.const 264825) "a") (data (i32.const 264828) "a") (data (i32.const 264831) "a") (data (i32.const 264834) "a") (data (i32.const 264837) "a") (data (i32.const 264840) "a") (data (i32.const 264843) "a") (data (i32.const 264846) "a") (data (i32.const 264849) "a") (data (i32.const 264852) "a") (data (i32.const 264855) "a") (data (i32.const 264858) "a") (data (i32.const 264861) "a") (data (i32.const 264864) "a") (data (i32.const 264867) "a") (data (i32.const 264870) "a") (data (i32.const 264873) "a") (data (i32.const 264876) "a") (data (i32.const 264879) "a") (data (i32.const 264882) "a") (data (i32.const 264885) "a") (data (i32.const 264888) "a") (data (i32.const 264891) "a") (data (i32.const 264894) "a") (data (i32.const 264897) "a") (data (i32.const 264900) "a") (data (i32.const 264903) "a") (data (i32.const 264906) "a") (data (i32.const 264909) "a") (data (i32.const 264912) "a") (data (i32.const 264915) "a") (data (i32.const 264918) "a") (data (i32.const 264921) "a") (data (i32.const 264924) "a") (data (i32.const 264927) "a") (data (i32.const 264930) "a") (data (i32.const 264933) "a") (data (i32.const 264936) "a") (data (i32.const 264939) "a") (data (i32.const 264942) "a") (data (i32.const 264945) "a") (data (i32.const 264948) "a") (data (i32.const 264951) "a") (data (i32.const 264954) "a") (data (i32.const 264957) "a") (data (i32.const 264960) "a") (data (i32.const 264963) "a") (data (i32.const 264966) "a") (data (i32.const 264969) "a") (data (i32.const 264972) "a") (data (i32.const 264975) "a") (data (i32.const 264978) "a") (data (i32.const 264981) "a") (data (i32.const 264984) "a") (data (i32.const 264987) "a") (data (i32.const 264990) "a") (data (i32.const 264993) "a") (data (i32.const 264996) "a") (data (i32.const 264999) "a") (data (i32.const 265002) "a") (data (i32.const 265005) "a") (data (i32.const 265008) "a") (data (i32.const 265011) "a") (data (i32.const 265014) "a") (data (i32.const 265017) "a") (data (i32.const 265020) "a") (data (i32.const 265023) "a") (data (i32.const 265026) "a") (data (i32.const 265029) "a") (data (i32.const 265032) "a") (data (i32.const 265035) "a") (data (i32.const 265038) "a") (data (i32.const 265041) "a") (data (i32.const 265044) "a") (data (i32.const 265047) "a") (data (i32.const 265050) "a") (data (i32.const 265053) "a") (data (i32.const 265056) "a") (data (i32.const 265059) "a") (data (i32.const 265062) "a") (data (i32.const 265065) "a") (data (i32.const 265068) "a") (data (i32.const 265071) "a") (data (i32.const 265074) "a") (data (i32.const 265077) "a") (data (i32.const 265080) "a") (data (i32.const 265083) "a") (data (i32.const 265086) "a") (data (i32.const 265089) "a") (data (i32.const 265092) "a") (data (i32.const 265095) "a") (data (i32.const 265098) "a") (data (i32.const 265101) "a") (data (i32.const 265104) "a") (data (i32.const 265107) "a") (data (i32.const 265110) "a") (data (i32.const 265113) "a") (data (i32.const 265116) "a") (data (i32.const 265119) "a") (data (i32.const 265122) "a") (data (i32.const 265125) "a") (data (i32.const 265128) "a") (data (i32.const 265131) "a") (data (i32.const 265134) "a") (data (i32.const 265137) "a") (data (i32.const 265140) "a") (data (i32.const 265143) "a") (data (i32.const 265146) "a") (data (i32.const 265149) "a") (data (i32.const 265152) "a") (data (i32.const 265155) "a") (data (i32.const 265158) "a") (data (i32.const 265161) "a") (data (i32.const 265164) "a") (data (i32.const 265167) "a") (data (i32.const 265170) "a") (data (i32.const 265173) "a") (data (i32.const 265176) "a") (data (i32.const 265179) "a") (data (i32.const 265182) "a") (data (i32.const 265185) "a") (data (i32.const 265188) "a") (data (i32.const 265191) "a") (data (i32.const 265194) "a") (data (i32.const 265197) "a") (data (i32.const 265200) "a") (data (i32.const 265203) "a") (data (i32.const 265206) "a") (data (i32.const 265209) "a") (data (i32.const 265212) "a") (data (i32.const 265215) "a") (data (i32.const 265218) "a") (data (i32.const 265221) "a") (data (i32.const 265224) "a") (data (i32.const 265227) "a") (data (i32.const 265230) "a") (data (i32.const 265233) "a") (data (i32.const 265236) "a") (data (i32.const 265239) "a") (data (i32.const 265242) "a") (data (i32.const 265245) "a") (data (i32.const 265248) "a") (data (i32.const 265251) "a") (data (i32.const 265254) "a") (data (i32.const 265257) "a") (data (i32.const 265260) "a") (data (i32.const 265263) "a") (data (i32.const 265266) "a") (data (i32.const 265269) "a") (data (i32.const 265272) "a") (data (i32.const 265275) "a") (data (i32.const 265278) "a") (data (i32.const 265281) "a") (data (i32.const 265284) "a") (data (i32.const 265287) "a") (data (i32.const 265290) "a") (data (i32.const 265293) "a") (data (i32.const 265296) "a") (data (i32.const 265299) "a") (data (i32.const 265302) "a") (data (i32.const 265305) "a") (data (i32.const 265308) "a") (data (i32.const 265311) "a") (data (i32.const 265314) "a") (data (i32.const 265317) "a") (data (i32.const 265320) "a") (data (i32.const 265323) "a") (data (i32.const 265326) "a") (data (i32.const 265329) "a") (data (i32.const 265332) "a") (data (i32.const 265335) "a") (data (i32.const 265338) "a") (data (i32.const 265341) "a") (data (i32.const 265344) "a") (data (i32.const 265347) "a") (data (i32.const 265350) "a") (data (i32.const 265353) "a") (data (i32.const 265356) "a") (data (i32.const 265359) "a") (data (i32.const 265362) "a") (data (i32.const 265365) "a") (data (i32.const 265368) "a") (data (i32.const 265371) "a") (data (i32.const 265374) "a") (data (i32.const 265377) "a") (data (i32.const 265380) "a") (data (i32.const 265383) "a") (data (i32.const 265386) "a") (data (i32.const 265389) "a") (data (i32.const 265392) "a") (data (i32.const 265395) "a") (data (i32.const 265398) "a") (data (i32.const 265401) "a") (data (i32.const 265404) "a") (data (i32.const 265407) "a") (data (i32.const 265410) "a") (data (i32.const 265413) "a") (data (i32.const 265416) "a") (data (i32.const 265419) "a") (data (i32.const 265422) "a") (data (i32.const 265425) "a") (data (i32.const 265428) "a") (data (i32.const 265431) "a") (data (i32.const 265434) "a") (data (i32.const 265437) "a") (data (i32.const 265440) "a") (data (i32.const 265443) "a") (data (i32.const 265446) "a") (data (i32.const 265449) "a") (data (i32.const 265452) "a") (data (i32.const 265455) "a") (data (i32.const 265458) "a") (data (i32.const 265461) "a") (data (i32.const 265464) "a") (data (i32.const 265467) "a") (data (i32.const 265470) "a") (data (i32.const 265473) "a") (data (i32.const 265476) "a") (data (i32.const 265479) "a") (data (i32.const 265482) "a") (data (i32.const 265485) "a") (data (i32.const 265488) "a") (data (i32.const 265491) "a") (data (i32.const 265494) "a") (data (i32.const 265497) "a") (data (i32.const 265500) "a") (data (i32.const 265503) "a") (data (i32.const 265506) "a") (data (i32.const 265509) "a") (data (i32.const 265512) "a") (data (i32.const 265515) "a") (data (i32.const 265518) "a") (data (i32.const 265521) "a") (data (i32.const 265524) "a") (data (i32.const 265527) "a") (data (i32.const 265530) "a") (data (i32.const 265533) "a") (data (i32.const 265536) "a") (data (i32.const 265539) "a") (data (i32.const 265542) "a") (data (i32.const 265545) "a") (data (i32.const 265548) "a") (data (i32.const 265551) "a") (data (i32.const 265554) "a") (data (i32.const 265557) "a") (data (i32.const 265560) "a") (data (i32.const 265563) "a") (data (i32.const 265566) "a") (data (i32.const 265569) "a") (data (i32.const 265572) "a") (data (i32.const 265575) "a") (data (i32.const 265578) "a") (data (i32.const 265581) "a") (data (i32.const 265584) "a") (data (i32.const 265587) "a") (data (i32.const 265590) "a") (data (i32.const 265593) "a") (data (i32.const 265596) "a") (data (i32.const 265599) "a") (data (i32.const 265602) "a") (data (i32.const 265605) "a") (data (i32.const 265608) "a") (data (i32.const 265611) "a") (data (i32.const 265614) "a") (data (i32.const 265617) "a") (data (i32.const 265620) "a") (data (i32.const 265623) "a") (data (i32.const 265626) "a") (data (i32.const 265629) "a") (data (i32.const 265632) "a") (data (i32.const 265635) "a") (data (i32.const 265638) "a") (data (i32.const 265641) "a") (data (i32.const 265644) "a") (data (i32.const 265647) "a") (data (i32.const 265650) "a") (data (i32.const 265653) "a") (data (i32.const 265656) "a") (data (i32.const 265659) "a") (data (i32.const 265662) "a") (data (i32.const 265665) "a") (data (i32.const 265668) "a") (data (i32.const 265671) "a") (data (i32.const 265674) "a") (data (i32.const 265677) "a") (data (i32.const 265680) "a") (data (i32.const 265683) "a") (data (i32.const 265686) "a") (data (i32.const 265689) "a") (data (i32.const 265692) "a") (data (i32.const 265695) "a") (data (i32.const 265698) "a") (data (i32.const 265701) "a") (data (i32.const 265704) "a") (data (i32.const 265707) "a") (data (i32.const 265710) "a") (data (i32.const 265713) "a") (data (i32.const 265716) "a") (data (i32.const 265719) "a") (data (i32.const 265722) "a") (data (i32.const 265725) "a") (data (i32.const 265728) "a") (data (i32.const 265731) "a") (data (i32.const 265734) "a") (data (i32.const 265737) "a") (data (i32.const 265740) "a") (data (i32.const 265743) "a") (data (i32.const 265746) "a") (data (i32.const 265749) "a") (data (i32.const 265752) "a") (data (i32.const 265755) "a") (data (i32.const 265758) "a") (data (i32.const 265761) "a") (data (i32.const 265764) "a") (data (i32.const 265767) "a") (data (i32.const 265770) "a") (data (i32.const 265773) "a") (data (i32.const 265776) "a") (data (i32.const 265779) "a") (data (i32.const 265782) "a") (data (i32.const 265785) "a") (data (i32.const 265788) "a") (data (i32.const 265791) "a") (data (i32.const 265794) "a") (data (i32.const 265797) "a") (data (i32.const 265800) "a") (data (i32.const 265803) "a") (data (i32.const 265806) "a") (data (i32.const 265809) "a") (data (i32.const 265812) "a") (data (i32.const 265815) "a") (data (i32.const 265818) "a") (data (i32.const 265821) "a") (data (i32.const 265824) "a") (data (i32.const 265827) "a") (data (i32.const 265830) "a") (data (i32.const 265833) "a") (data (i32.const 265836) "a") (data (i32.const 265839) "a") (data (i32.const 265842) "a") (data (i32.const 265845) "a") (data (i32.const 265848) "a") (data (i32.const 265851) "a") (data (i32.const 265854) "a") (data (i32.const 265857) "a") (data (i32.const 265860) "a") (data (i32.const 265863) "a") (data (i32.const 265866) "a") (data (i32.const 265869) "a") (data (i32.const 265872) "a") (data (i32.const 265875) "a") (data (i32.const 265878) "a") (data (i32.const 265881) "a") (data (i32.const 265884) "a") (data (i32.const 265887) "a") (data (i32.const 265890) "a") (data (i32.const 265893) "a") (data (i32.const 265896) "a") (data (i32.const 265899) "a") (data (i32.const 265902) "a") (data (i32.const 265905) "a") (data (i32.const 265908) "a") (data (i32.const 265911) "a") (data (i32.const 265914) "a") (data (i32.const 265917) "a") (data (i32.const 265920) "a") (data (i32.const 265923) "a") (data (i32.const 265926) "a") (data (i32.const 265929) "a") (data (i32.const 265932) "a") (data (i32.const 265935) "a") (data (i32.const 265938) "a") (data (i32.const 265941) "a") (data (i32.const 265944) "a") (data (i32.const 265947) "a") (data (i32.const 265950) "a") (data (i32.const 265953) "a") (data (i32.const 265956) "a") (data (i32.const 265959) "a") (data (i32.const 265962) "a") (data (i32.const 265965) "a") (data (i32.const 265968) "a") (data (i32.const 265971) "a") (data (i32.const 265974) "a") (data (i32.const 265977) "a") (data (i32.const 265980) "a") (data (i32.const 265983) "a") (data (i32.const 265986) "a") (data (i32.const 265989) "a") (data (i32.const 265992) "a") (data (i32.const 265995) "a") (data (i32.const 265998) "a") (data (i32.const 266001) "a") (data (i32.const 266004) "a") (data (i32.const 266007) "a") (data (i32.const 266010) "a") (data (i32.const 266013) "a") (data (i32.const 266016) "a") (data (i32.const 266019) "a") (data (i32.const 266022) "a") (data (i32.const 266025) "a") (data (i32.const 266028) "a") (data (i32.const 266031) "a") (data (i32.const 266034) "a") (data (i32.const 266037) "a") (data (i32.const 266040) "a") (data (i32.const 266043) "a") (data (i32.const 266046) "a") (data (i32.const 266049) "a") (data (i32.const 266052) "a") (data (i32.const 266055) "a") (data (i32.const 266058) "a") (data (i32.const 266061) "a") (data (i32.const 266064) "a") (data (i32.const 266067) "a") (data (i32.const 266070) "a") (data (i32.const 266073) "a") (data (i32.const 266076) "a") (data (i32.const 266079) "a") (data (i32.const 266082) "a") (data (i32.const 266085) "a") (data (i32.const 266088) "a") (data (i32.const 266091) "a") (data (i32.const 266094) "a") (data (i32.const 266097) "a") (data (i32.const 266100) "a") (data (i32.const 266103) "a") (data (i32.const 266106) "a") (data (i32.const 266109) "a") (data (i32.const 266112) "a") (data (i32.const 266115) "a") (data (i32.const 266118) "a") (data (i32.const 266121) "a") (data (i32.const 266124) "a") (data (i32.const 266127) "a") (data (i32.const 266130) "a") (data (i32.const 266133) "a") (data (i32.const 266136) "a") (data (i32.const 266139) "a") (data (i32.const 266142) "a") (data (i32.const 266145) "a") (data (i32.const 266148) "a") (data (i32.const 266151) "a") (data (i32.const 266154) "a") (data (i32.const 266157) "a") (data (i32.const 266160) "a") (data (i32.const 266163) "a") (data (i32.const 266166) "a") (data (i32.const 266169) "a") (data (i32.const 266172) "a") (data (i32.const 266175) "a") (data (i32.const 266178) "a") (data (i32.const 266181) "a") (data (i32.const 266184) "a") (data (i32.const 266187) "a") (data (i32.const 266190) "a") (data (i32.const 266193) "a") (data (i32.const 266196) "a") (data (i32.const 266199) "a") (data (i32.const 266202) "a") (data (i32.const 266205) "a") (data (i32.const 266208) "a") (data (i32.const 266211) "a") (data (i32.const 266214) "a") (data (i32.const 266217) "a") (data (i32.const 266220) "a") (data (i32.const 266223) "a") (data (i32.const 266226) "a") (data (i32.const 266229) "a") (data (i32.const 266232) "a") (data (i32.const 266235) "a") (data (i32.const 266238) "a") (data (i32.const 266241) "a") (data (i32.const 266244) "a") (data (i32.const 266247) "a") (data (i32.const 266250) "a") (data (i32.const 266253) "a") (data (i32.const 266256) "a") (data (i32.const 266259) "a") (data (i32.const 266262) "a") (data (i32.const 266265) "a") (data (i32.const 266268) "a") (data (i32.const 266271) "a") (data (i32.const 266274) "a") (data (i32.const 266277) "a") (data (i32.const 266280) "a") (data (i32.const 266283) "a") (data (i32.const 266286) "a") (data (i32.const 266289) "a") (data (i32.const 266292) "a") (data (i32.const 266295) "a") (data (i32.const 266298) "a") (data (i32.const 266301) "a") (data (i32.const 266304) "a") (data (i32.const 266307) "a") (data (i32.const 266310) "a") (data (i32.const 266313) "a") (data (i32.const 266316) "a") (data (i32.const 266319) "a") (data (i32.const 266322) "a") (data (i32.const 266325) "a") (data (i32.const 266328) "a") (data (i32.const 266331) "a") (data (i32.const 266334) "a") (data (i32.const 266337) "a") (data (i32.const 266340) "a") (data (i32.const 266343) "a") (data (i32.const 266346) "a") (data (i32.const 266349) "a") (data (i32.const 266352) "a") (data (i32.const 266355) "a") (data (i32.const 266358) "a") (data (i32.const 266361) "a") (data (i32.const 266364) "a") (data (i32.const 266367) "a") (data (i32.const 266370) "a") (data (i32.const 266373) "a") (data (i32.const 266376) "a") (data (i32.const 266379) "a") (data (i32.const 266382) "a") (data (i32.const 266385) "a") (data (i32.const 266388) "a") (data (i32.const 266391) "a") (data (i32.const 266394) "a") (data (i32.const 266397) "a") (data (i32.const 266400) "a") (data (i32.const 266403) "a") (data (i32.const 266406) "a") (data (i32.const 266409) "a") (data (i32.const 266412) "a") (data (i32.const 266415) "a") (data (i32.const 266418) "a") (data (i32.const 266421) "a") (data (i32.const 266424) "a") (data (i32.const 266427) "a") (data (i32.const 266430) "a") (data (i32.const 266433) "a") (data (i32.const 266436) "a") (data (i32.const 266439) "a") (data (i32.const 266442) "a") (data (i32.const 266445) "a") (data (i32.const 266448) "a") (data (i32.const 266451) "a") (data (i32.const 266454) "a") (data (i32.const 266457) "a") (data (i32.const 266460) "a") (data (i32.const 266463) "a") (data (i32.const 266466) "a") (data (i32.const 266469) "a") (data (i32.const 266472) "a") (data (i32.const 266475) "a") (data (i32.const 266478) "a") (data (i32.const 266481) "a") (data (i32.const 266484) "a") (data (i32.const 266487) "a") (data (i32.const 266490) "a") (data (i32.const 266493) "a") (data (i32.const 266496) "a") (data (i32.const 266499) "a") (data (i32.const 266502) "a") (data (i32.const 266505) "a") (data (i32.const 266508) "a") (data (i32.const 266511) "a") (data (i32.const 266514) "a") (data (i32.const 266517) "a") (data (i32.const 266520) "a") (data (i32.const 266523) "a") (data (i32.const 266526) "a") (data (i32.const 266529) "a") (data (i32.const 266532) "a") (data (i32.const 266535) "a") (data (i32.const 266538) "a") (data (i32.const 266541) "a") (data (i32.const 266544) "a") (data (i32.const 266547) "a") (data (i32.const 266550) "a") (data (i32.const 266553) "a") (data (i32.const 266556) "a") (data (i32.const 266559) "a") (data (i32.const 266562) "a") (data (i32.const 266565) "a") (data (i32.const 266568) "a") (data (i32.const 266571) "a") (data (i32.const 266574) "a") (data (i32.const 266577) "a") (data (i32.const 266580) "a") (data (i32.const 266583) "a") (data (i32.const 266586) "a") (data (i32.const 266589) "a") (data (i32.const 266592) "a") (data (i32.const 266595) "a") (data (i32.const 266598) "a") (data (i32.const 266601) "a") (data (i32.const 266604) "a") (data (i32.const 266607) "a") (data (i32.const 266610) "a") (data (i32.const 266613) "a") (data (i32.const 266616) "a") (data (i32.const 266619) "a") (data (i32.const 266622) "a") (data (i32.const 266625) "a") (data (i32.const 266628) "a") (data (i32.const 266631) "a") (data (i32.const 266634) "a") (data (i32.const 266637) "a") (data (i32.const 266640) "a") (data (i32.const 266643) "a") (data (i32.const 266646) "a") (data (i32.const 266649) "a") (data (i32.const 266652) "a") (data (i32.const 266655) "a") (data (i32.const 266658) "a") (data (i32.const 266661) "a") (data (i32.const 266664) "a") (data (i32.const 266667) "a") (data (i32.const 266670) "a") (data (i32.const 266673) "a") (data (i32.const 266676) "a") (data (i32.const 266679) "a") (data (i32.const 266682) "a") (data (i32.const 266685) "a") (data (i32.const 266688) "a") (data (i32.const 266691) "a") (data (i32.const 266694) "a") (data (i32.const 266697) "a") (data (i32.const 266700) "a") (data (i32.const 266703) "a") (data (i32.const 266706) "a") (data (i32.const 266709) "a") (data (i32.const 266712) "a") (data (i32.const 266715) "a") (data (i32.const 266718) "a") (data (i32.const 266721) "a") (data (i32.const 266724) "a") (data (i32.const 266727) "a") (data (i32.const 266730) "a") (data (i32.const 266733) "a") (data (i32.const 266736) "a") (data (i32.const 266739) "a") (data (i32.const 266742) "a") (data (i32.const 266745) "a") (data (i32.const 266748) "a") (data (i32.const 266751) "a") (data (i32.const 266754) "a") (data (i32.const 266757) "a") (data (i32.const 266760) "a") (data (i32.const 266763) "a") (data (i32.const 266766) "a") (data (i32.const 266769) "a") (data (i32.const 266772) "a") (data (i32.const 266775) "a") (data (i32.const 266778) "a") (data (i32.const 266781) "a") (data (i32.const 266784) "a") (data (i32.const 266787) "a") (data (i32.const 266790) "a") (data (i32.const 266793) "a") (data (i32.const 266796) "a") (data (i32.const 266799) "a") (data (i32.const 266802) "a") (data (i32.const 266805) "a") (data (i32.const 266808) "a") (data (i32.const 266811) "a") (data (i32.const 266814) "a") (data (i32.const 266817) "a") (data (i32.const 266820) "a") (data (i32.const 266823) "a") (data (i32.const 266826) "a") (data (i32.const 266829) "a") (data (i32.const 266832) "a") (data (i32.const 266835) "a") (data (i32.const 266838) "a") (data (i32.const 266841) "a") (data (i32.const 266844) "a") (data (i32.const 266847) "a") (data (i32.const 266850) "a") (data (i32.const 266853) "a") (data (i32.const 266856) "a") (data (i32.const 266859) "a") (data (i32.const 266862) "a") (data (i32.const 266865) "a") (data (i32.const 266868) "a") (data (i32.const 266871) "a") (data (i32.const 266874) "a") (data (i32.const 266877) "a") (data (i32.const 266880) "a") (data (i32.const 266883) "a") (data (i32.const 266886) "a") (data (i32.const 266889) "a") (data (i32.const 266892) "a") (data (i32.const 266895) "a") (data (i32.const 266898) "a") (data (i32.const 266901) "a") (data (i32.const 266904) "a") (data (i32.const 266907) "a") (data (i32.const 266910) "a") (data (i32.const 266913) "a") (data (i32.const 266916) "a") (data (i32.const 266919) "a") (data (i32.const 266922) "a") (data (i32.const 266925) "a") (data (i32.const 266928) "a") (data (i32.const 266931) "a") (data (i32.const 266934) "a") (data (i32.const 266937) "a") (data (i32.const 266940) "a") (data (i32.const 266943) "a") (data (i32.const 266946) "a") (data (i32.const 266949) "a") (data (i32.const 266952) "a") (data (i32.const 266955) "a") (data (i32.const 266958) "a") (data (i32.const 266961) "a") (data (i32.const 266964) "a") (data (i32.const 266967) "a") (data (i32.const 266970) "a") (data (i32.const 266973) "a") (data (i32.const 266976) "a") (data (i32.const 266979) "a") (data (i32.const 266982) "a") (data (i32.const 266985) "a") (data (i32.const 266988) "a") (data (i32.const 266991) "a") (data (i32.const 266994) "a") (data (i32.const 266997) "a") (data (i32.const 267000) "a") (data (i32.const 267003) "a") (data (i32.const 267006) "a") (data (i32.const 267009) "a") (data (i32.const 267012) "a") (data (i32.const 267015) "a") (data (i32.const 267018) "a") (data (i32.const 267021) "a") (data (i32.const 267024) "a") (data (i32.const 267027) "a") (data (i32.const 267030) "a") (data (i32.const 267033) "a") (data (i32.const 267036) "a") (data (i32.const 267039) "a") (data (i32.const 267042) "a") (data (i32.const 267045) "a") (data (i32.const 267048) "a") (data (i32.const 267051) "a") (data (i32.const 267054) "a") (data (i32.const 267057) "a") (data (i32.const 267060) "a") (data (i32.const 267063) "a") (data (i32.const 267066) "a") (data (i32.const 267069) "a") (data (i32.const 267072) "a") (data (i32.const 267075) "a") (data (i32.const 267078) "a") (data (i32.const 267081) "a") (data (i32.const 267084) "a") (data (i32.const 267087) "a") (data (i32.const 267090) "a") (data (i32.const 267093) "a") (data (i32.const 267096) "a") (data (i32.const 267099) "a") (data (i32.const 267102) "a") (data (i32.const 267105) "a") (data (i32.const 267108) "a") (data (i32.const 267111) "a") (data (i32.const 267114) "a") (data (i32.const 267117) "a") (data (i32.const 267120) "a") (data (i32.const 267123) "a") (data (i32.const 267126) "a") (data (i32.const 267129) "a") (data (i32.const 267132) "a") (data (i32.const 267135) "a") (data (i32.const 267138) "a") (data (i32.const 267141) "a") (data (i32.const 267144) "a") (data (i32.const 267147) "a") (data (i32.const 267150) "a") (data (i32.const 267153) "a") (data (i32.const 267156) "a") (data (i32.const 267159) "a") (data (i32.const 267162) "a") (data (i32.const 267165) "a") (data (i32.const 267168) "a") (data (i32.const 267171) "a") (data (i32.const 267174) "a") (data (i32.const 267177) "a") (data (i32.const 267180) "a") (data (i32.const 267183) "a") (data (i32.const 267186) "a") (data (i32.const 267189) "a") (data (i32.const 267192) "a") (data (i32.const 267195) "a") (data (i32.const 267198) "a") (data (i32.const 267201) "a") (data (i32.const 267204) "a") (data (i32.const 267207) "a") (data (i32.const 267210) "a") (data (i32.const 267213) "a") (data (i32.const 267216) "a") (data (i32.const 267219) "a") (data (i32.const 267222) "a") (data (i32.const 267225) "a") (data (i32.const 267228) "a") (data (i32.const 267231) "a") (data (i32.const 267234) "a") (data (i32.const 267237) "a") (data (i32.const 267240) "a") (data (i32.const 267243) "a") (data (i32.const 267246) "a") (data (i32.const 267249) "a") (data (i32.const 267252) "a") (data (i32.const 267255) "a") (data (i32.const 267258) "a") (data (i32.const 267261) "a") (data (i32.const 267264) "a") (data (i32.const 267267) "a") (data (i32.const 267270) "a") (data (i32.const 267273) "a") (data (i32.const 267276) "a") (data (i32.const 267279) "a") (data (i32.const 267282) "a") (data (i32.const 267285) "a") (data (i32.const 267288) "a") (data (i32.const 267291) "a") (data (i32.const 267294) "a") (data (i32.const 267297) "a") (data (i32.const 267300) "a") (data (i32.const 267303) "a") (data (i32.const 267306) "a") (data (i32.const 267309) "a") (data (i32.const 267312) "a") (data (i32.const 267315) "a") (data (i32.const 267318) "a") (data (i32.const 267321) "a") (data (i32.const 267324) "a") (data (i32.const 267327) "a") (data (i32.const 267330) "a") (data (i32.const 267333) "a") (data (i32.const 267336) "a") (data (i32.const 267339) "a") (data (i32.const 267342) "a") (data (i32.const 267345) "a") (data (i32.const 267348) "a") (data (i32.const 267351) "a") (data (i32.const 267354) "a") (data (i32.const 267357) "a") (data (i32.const 267360) "a") (data (i32.const 267363) "a") (data (i32.const 267366) "a") (data (i32.const 267369) "a") (data (i32.const 267372) "a") (data (i32.const 267375) "a") (data (i32.const 267378) "a") (data (i32.const 267381) "a") (data (i32.const 267384) "a") (data (i32.const 267387) "a") (data (i32.const 267390) "a") (data (i32.const 267393) "a") (data (i32.const 267396) "a") (data (i32.const 267399) "a") (data (i32.const 267402) "a") (data (i32.const 267405) "a") (data (i32.const 267408) "a") (data (i32.const 267411) "a") (data (i32.const 267414) "a") (data (i32.const 267417) "a") (data (i32.const 267420) "a") (data (i32.const 267423) "a") (data (i32.const 267426) "a") (data (i32.const 267429) "a") (data (i32.const 267432) "a") (data (i32.const 267435) "a") (data (i32.const 267438) "a") (data (i32.const 267441) "a") (data (i32.const 267444) "a") (data (i32.const 267447) "a") (data (i32.const 267450) "a") (data (i32.const 267453) "a") (data (i32.const 267456) "a") (data (i32.const 267459) "a") (data (i32.const 267462) "a") (data (i32.const 267465) "a") (data (i32.const 267468) "a") (data (i32.const 267471) "a") (data (i32.const 267474) "a") (data (i32.const 267477) "a") (data (i32.const 267480) "a") (data (i32.const 267483) "a") (data (i32.const 267486) "a") (data (i32.const 267489) "a") (data (i32.const 267492) "a") (data (i32.const 267495) "a") (data (i32.const 267498) "a") (data (i32.const 267501) "a") (data (i32.const 267504) "a") (data (i32.const 267507) "a") (data (i32.const 267510) "a") (data (i32.const 267513) "a") (data (i32.const 267516) "a") (data (i32.const 267519) "a") (data (i32.const 267522) "a") (data (i32.const 267525) "a") (data (i32.const 267528) "a") (data (i32.const 267531) "a") (data (i32.const 267534) "a") (data (i32.const 267537) "a") (data (i32.const 267540) "a") (data (i32.const 267543) "a") (data (i32.const 267546) "a") (data (i32.const 267549) "a") (data (i32.const 267552) "a") (data (i32.const 267555) "a") (data (i32.const 267558) "a") (data (i32.const 267561) "a") (data (i32.const 267564) "a") (data (i32.const 267567) "a") (data (i32.const 267570) "a") (data (i32.const 267573) "a") (data (i32.const 267576) "a") (data (i32.const 267579) "a") (data (i32.const 267582) "a") (data (i32.const 267585) "a") (data (i32.const 267588) "a") (data (i32.const 267591) "a") (data (i32.const 267594) "a") (data (i32.const 267597) "a") (data (i32.const 267600) "a") (data (i32.const 267603) "a") (data (i32.const 267606) "a") (data (i32.const 267609) "a") (data (i32.const 267612) "a") (data (i32.const 267615) "a") (data (i32.const 267618) "a") (data (i32.const 267621) "a") (data (i32.const 267624) "a") (data (i32.const 267627) "a") (data (i32.const 267630) "a") (data (i32.const 267633) "a") (data (i32.const 267636) "a") (data (i32.const 267639) "a") (data (i32.const 267642) "a") (data (i32.const 267645) "a") (data (i32.const 267648) "a") (data (i32.const 267651) "a") (data (i32.const 267654) "a") (data (i32.const 267657) "a") (data (i32.const 267660) "a") (data (i32.const 267663) "a") (data (i32.const 267666) "a") (data (i32.const 267669) "a") (data (i32.const 267672) "a") (data (i32.const 267675) "a") (data (i32.const 267678) "a") (data (i32.const 267681) "a") (data (i32.const 267684) "a") (data (i32.const 267687) "a") (data (i32.const 267690) "a") (data (i32.const 267693) "a") (data (i32.const 267696) "a") (data (i32.const 267699) "a") (data (i32.const 267702) "a") (data (i32.const 267705) "a") (data (i32.const 267708) "a") (data (i32.const 267711) "a") (data (i32.const 267714) "a") (data (i32.const 267717) "a") (data (i32.const 267720) "a") (data (i32.const 267723) "a") (data (i32.const 267726) "a") (data (i32.const 267729) "a") (data (i32.const 267732) "a") (data (i32.const 267735) "a") (data (i32.const 267738) "a") (data (i32.const 267741) "a") (data (i32.const 267744) "a") (data (i32.const 267747) "a") (data (i32.const 267750) "a") (data (i32.const 267753) "a") (data (i32.const 267756) "a") (data (i32.const 267759) "a") (data (i32.const 267762) "a") (data (i32.const 267765) "a") (data (i32.const 267768) "a") (data (i32.const 267771) "a") (data (i32.const 267774) "a") (data (i32.const 267777) "a") (data (i32.const 267780) "a") (data (i32.const 267783) "a") (data (i32.const 267786) "a") (data (i32.const 267789) "a") (data (i32.const 267792) "a") (data (i32.const 267795) "a") (data (i32.const 267798) "a") (data (i32.const 267801) "a") (data (i32.const 267804) "a") (data (i32.const 267807) "a") (data (i32.const 267810) "a") (data (i32.const 267813) "a") (data (i32.const 267816) "a") (data (i32.const 267819) "a") (data (i32.const 267822) "a") (data (i32.const 267825) "a") (data (i32.const 267828) "a") (data (i32.const 267831) "a") (data (i32.const 267834) "a") (data (i32.const 267837) "a") (data (i32.const 267840) "a") (data (i32.const 267843) "a") (data (i32.const 267846) "a") (data (i32.const 267849) "a") (data (i32.const 267852) "a") (data (i32.const 267855) "a") (data (i32.const 267858) "a") (data (i32.const 267861) "a") (data (i32.const 267864) "a") (data (i32.const 267867) "a") (data (i32.const 267870) "a") (data (i32.const 267873) "a") (data (i32.const 267876) "a") (data (i32.const 267879) "a") (data (i32.const 267882) "a") (data (i32.const 267885) "a") (data (i32.const 267888) "a") (data (i32.const 267891) "a") (data (i32.const 267894) "a") (data (i32.const 267897) "a") (data (i32.const 267900) "a") (data (i32.const 267903) "a") (data (i32.const 267906) "a") (data (i32.const 267909) "a") (data (i32.const 267912) "a") (data (i32.const 267915) "a") (data (i32.const 267918) "a") (data (i32.const 267921) "a") (data (i32.const 267924) "a") (data (i32.const 267927) "a") (data (i32.const 267930) "a") (data (i32.const 267933) "a") (data (i32.const 267936) "a") (data (i32.const 267939) "a") (data (i32.const 267942) "a") (data (i32.const 267945) "a") (data (i32.const 267948) "a") (data (i32.const 267951) "a") (data (i32.const 267954) "a") (data (i32.const 267957) "a") (data (i32.const 267960) "a") (data (i32.const 267963) "a") (data (i32.const 267966) "a") (data (i32.const 267969) "a") (data (i32.const 267972) "a") (data (i32.const 267975) "a") (data (i32.const 267978) "a") (data (i32.const 267981) "a") (data (i32.const 267984) "a") (data (i32.const 267987) "a") (data (i32.const 267990) "a") (data (i32.const 267993) "a") (data (i32.const 267996) "a") (data (i32.const 267999) "a") (data (i32.const 268002) "a") (data (i32.const 268005) "a") (data (i32.const 268008) "a") (data (i32.const 268011) "a") (data (i32.const 268014) "a") (data (i32.const 268017) "a") (data (i32.const 268020) "a") (data (i32.const 268023) "a") (data (i32.const 268026) "a") (data (i32.const 268029) "a") (data (i32.const 268032) "a") (data (i32.const 268035) "a") (data (i32.const 268038) "a") (data (i32.const 268041) "a") (data (i32.const 268044) "a") (data (i32.const 268047) "a") (data (i32.const 268050) "a") (data (i32.const 268053) "a") (data (i32.const 268056) "a") (data (i32.const 268059) "a") (data (i32.const 268062) "a") (data (i32.const 268065) "a") (data (i32.const 268068) "a") (data (i32.const 268071) "a") (data (i32.const 268074) "a") (data (i32.const 268077) "a") (data (i32.const 268080) "a") (data (i32.const 268083) "a") (data (i32.const 268086) "a") (data (i32.const 268089) "a") (data (i32.const 268092) "a") (data (i32.const 268095) "a") (data (i32.const 268098) "a") (data (i32.const 268101) "a") (data (i32.const 268104) "a") (data (i32.const 268107) "a") (data (i32.const 268110) "a") (data (i32.const 268113) "a") (data (i32.const 268116) "a") (data (i32.const 268119) "a") (data (i32.const 268122) "a") (data (i32.const 268125) "a") (data (i32.const 268128) "a") (data (i32.const 268131) "a") (data (i32.const 268134) "a") (data (i32.const 268137) "a") (data (i32.const 268140) "a") (data (i32.const 268143) "a") (data (i32.const 268146) "a") (data (i32.const 268149) "a") (data (i32.const 268152) "a") (data (i32.const 268155) "a") (data (i32.const 268158) "a") (data (i32.const 268161) "a") (data (i32.const 268164) "a") (data (i32.const 268167) "a") (data (i32.const 268170) "a") (data (i32.const 268173) "a") (data (i32.const 268176) "a") (data (i32.const 268179) "a") (data (i32.const 268182) "a") (data (i32.const 268185) "a") (data (i32.const 268188) "a") (data (i32.const 268191) "a") (data (i32.const 268194) "a") (data (i32.const 268197) "a") (data (i32.const 268200) "a") (data (i32.const 268203) "a") (data (i32.const 268206) "a") (data (i32.const 268209) "a") (data (i32.const 268212) "a") (data (i32.const 268215) "a") (data (i32.const 268218) "a") (data (i32.const 268221) "a") (data (i32.const 268224) "a") (data (i32.const 268227) "a") (data (i32.const 268230) "a") (data (i32.const 268233) "a") (data (i32.const 268236) "a") (data (i32.const 268239) "a") (data (i32.const 268242) "a") (data (i32.const 268245) "a") (data (i32.const 268248) "a") (data (i32.const 268251) "a") (data (i32.const 268254) "a") (data (i32.const 268257) "a") (data (i32.const 268260) "a") (data (i32.const 268263) "a") (data (i32.const 268266) "a") (data (i32.const 268269) "a") (data (i32.const 268272) "a") (data (i32.const 268275) "a") (data (i32.const 268278) "a") (data (i32.const 268281) "a") (data (i32.const 268284) "a") (data (i32.const 268287) "a") (data (i32.const 268290) "a") (data (i32.const 268293) "a") (data (i32.const 268296) "a") (data (i32.const 268299) "a") (data (i32.const 268302) "a") (data (i32.const 268305) "a") (data (i32.const 268308) "a") (data (i32.const 268311) "a") (data (i32.const 268314) "a") (data (i32.const 268317) "a") (data (i32.const 268320) "a") (data (i32.const 268323) "a") (data (i32.const 268326) "a") (data (i32.const 268329) "a") (data (i32.const 268332) "a") (data (i32.const 268335) "a") (data (i32.const 268338) "a") (data (i32.const 268341) "a") (data (i32.const 268344) "a") (data (i32.const 268347) "a") (data (i32.const 268350) "a") (data (i32.const 268353) "a") (data (i32.const 268356) "a") (data (i32.const 268359) "a") (data (i32.const 268362) "a") (data (i32.const 268365) "a") (data (i32.const 268368) "a") (data (i32.const 268371) "a") (data (i32.const 268374) "a") (data (i32.const 268377) "a") (data (i32.const 268380) "a") (data (i32.const 268383) "a") (data (i32.const 268386) "a") (data (i32.const 268389) "a") (data (i32.const 268392) "a") (data (i32.const 268395) "a") (data (i32.const 268398) "a") (data (i32.const 268401) "a") (data (i32.const 268404) "a") (data (i32.const 268407) "a") (data (i32.const 268410) "a") (data (i32.const 268413) "a") (data (i32.const 268416) "a") (data (i32.const 268419) "a") (data (i32.const 268422) "a") (data (i32.const 268425) "a") (data (i32.const 268428) "a") (data (i32.const 268431) "a") (data (i32.const 268434) "a") (data (i32.const 268437) "a") (data (i32.const 268440) "a") (data (i32.const 268443) "a") (data (i32.const 268446) "a") (data (i32.const 268449) "a") (data (i32.const 268452) "a") (data (i32.const 268455) "a") (data (i32.const 268458) "a") (data (i32.const 268461) "a") (data (i32.const 268464) "a") (data (i32.const 268467) "a") (data (i32.const 268470) "a") (data (i32.const 268473) "a") (data (i32.const 268476) "a") (data (i32.const 268479) "a") (data (i32.const 268482) "a") (data (i32.const 268485) "a") (data (i32.const 268488) "a") (data (i32.const 268491) "a") (data (i32.const 268494) "a") (data (i32.const 268497) "a") (data (i32.const 268500) "a") (data (i32.const 268503) "a") (data (i32.const 268506) "a") (data (i32.const 268509) "a") (data (i32.const 268512) "a") (data (i32.const 268515) "a") (data (i32.const 268518) "a") (data (i32.const 268521) "a") (data (i32.const 268524) "a") (data (i32.const 268527) "a") (data (i32.const 268530) "a") (data (i32.const 268533) "a") (data (i32.const 268536) "a") (data (i32.const 268539) "a") (data (i32.const 268542) "a") (data (i32.const 268545) "a") (data (i32.const 268548) "a") (data (i32.const 268551) "a") (data (i32.const 268554) "a") (data (i32.const 268557) "a") (data (i32.const 268560) "a") (data (i32.const 268563) "a") (data (i32.const 268566) "a") (data (i32.const 268569) "a") (data (i32.const 268572) "a") (data (i32.const 268575) "a") (data (i32.const 268578) "a") (data (i32.const 268581) "a") (data (i32.const 268584) "a") (data (i32.const 268587) "a") (data (i32.const 268590) "a") (data (i32.const 268593) "a") (data (i32.const 268596) "a") (data (i32.const 268599) "a") (data (i32.const 268602) "a") (data (i32.const 268605) "a") (data (i32.const 268608) "a") (data (i32.const 268611) "a") (data (i32.const 268614) "a") (data (i32.const 268617) "a") (data (i32.const 268620) "a") (data (i32.const 268623) "a") (data (i32.const 268626) "a") (data (i32.const 268629) "a") (data (i32.const 268632) "a") (data (i32.const 268635) "a") (data (i32.const 268638) "a") (data (i32.const 268641) "a") (data (i32.const 268644) "a") (data (i32.const 268647) "a") (data (i32.const 268650) "a") (data (i32.const 268653) "a") (data (i32.const 268656) "a") (data (i32.const 268659) "a") (data (i32.const 268662) "a") (data (i32.const 268665) "a") (data (i32.const 268668) "a") (data (i32.const 268671) "a") (data (i32.const 268674) "a") (data (i32.const 268677) "a") (data (i32.const 268680) "a") (data (i32.const 268683) "a") (data (i32.const 268686) "a") (data (i32.const 268689) "a") (data (i32.const 268692) "a") (data (i32.const 268695) "a") (data (i32.const 268698) "a") (data (i32.const 268701) "a") (data (i32.const 268704) "a") (data (i32.const 268707) "a") (data (i32.const 268710) "a") (data (i32.const 268713) "a") (data (i32.const 268716) "a") (data (i32.const 268719) "a") (data (i32.const 268722) "a") (data (i32.const 268725) "a") (data (i32.const 268728) "a") (data (i32.const 268731) "a") (data (i32.const 268734) "a") (data (i32.const 268737) "a") (data (i32.const 268740) "a") (data (i32.const 268743) "a") (data (i32.const 268746) "a") (data (i32.const 268749) "a") (data (i32.const 268752) "a") (data (i32.const 268755) "a") (data (i32.const 268758) "a") (data (i32.const 268761) "a") (data (i32.const 268764) "a") (data (i32.const 268767) "a") (data (i32.const 268770) "a") (data (i32.const 268773) "a") (data (i32.const 268776) "a") (data (i32.const 268779) "a") (data (i32.const 268782) "a") (data (i32.const 268785) "a") (data (i32.const 268788) "a") (data (i32.const 268791) "a") (data (i32.const 268794) "a") (data (i32.const 268797) "a") (data (i32.const 268800) "a") (data (i32.const 268803) "a") (data (i32.const 268806) "a") (data (i32.const 268809) "a") (data (i32.const 268812) "a") (data (i32.const 268815) "a") (data (i32.const 268818) "a") (data (i32.const 268821) "a") (data (i32.const 268824) "a") (data (i32.const 268827) "a") (data (i32.const 268830) "a") (data (i32.const 268833) "a") (data (i32.const 268836) "a") (data (i32.const 268839) "a") (data (i32.const 268842) "a") (data (i32.const 268845) "a") (data (i32.const 268848) "a") (data (i32.const 268851) "a") (data (i32.const 268854) "a") (data (i32.const 268857) "a") (data (i32.const 268860) "a") (data (i32.const 268863) "a") (data (i32.const 268866) "a") (data (i32.const 268869) "a") (data (i32.const 268872) "a") (data (i32.const 268875) "a") (data (i32.const 268878) "a") (data (i32.const 268881) "a") (data (i32.const 268884) "a") (data (i32.const 268887) "a") (data (i32.const 268890) "a") (data (i32.const 268893) "a") (data (i32.const 268896) "a") (data (i32.const 268899) "a") (data (i32.const 268902) "a") (data (i32.const 268905) "a") (data (i32.const 268908) "a") (data (i32.const 268911) "a") (data (i32.const 268914) "a") (data (i32.const 268917) "a") (data (i32.const 268920) "a") (data (i32.const 268923) "a") (data (i32.const 268926) "a") (data (i32.const 268929) "a") (data (i32.const 268932) "a") (data (i32.const 268935) "a") (data (i32.const 268938) "a") (data (i32.const 268941) "a") (data (i32.const 268944) "a") (data (i32.const 268947) "a") (data (i32.const 268950) "a") (data (i32.const 268953) "a") (data (i32.const 268956) "a") (data (i32.const 268959) "a") (data (i32.const 268962) "a") (data (i32.const 268965) "a") (data (i32.const 268968) "a") (data (i32.const 268971) "a") (data (i32.const 268974) "a") (data (i32.const 268977) "a") (data (i32.const 268980) "a") (data (i32.const 268983) "a") (data (i32.const 268986) "a") (data (i32.const 268989) "a") (data (i32.const 268992) "a") (data (i32.const 268995) "a") (data (i32.const 268998) "a") (data (i32.const 269001) "a") (data (i32.const 269004) "a") (data (i32.const 269007) "a") (data (i32.const 269010) "a") (data (i32.const 269013) "a") (data (i32.const 269016) "a") (data (i32.const 269019) "a") (data (i32.const 269022) "a") (data (i32.const 269025) "a") (data (i32.const 269028) "a") (data (i32.const 269031) "a") (data (i32.const 269034) "a") (data (i32.const 269037) "a") (data (i32.const 269040) "a") (data (i32.const 269043) "a") (data (i32.const 269046) "a") (data (i32.const 269049) "a") (data (i32.const 269052) "a") (data (i32.const 269055) "a") (data (i32.const 269058) "a") (data (i32.const 269061) "a") (data (i32.const 269064) "a") (data (i32.const 269067) "a") (data (i32.const 269070) "a") (data (i32.const 269073) "a") (data (i32.const 269076) "a") (data (i32.const 269079) "a") (data (i32.const 269082) "a") (data (i32.const 269085) "a") (data (i32.const 269088) "a") (data (i32.const 269091) "a") (data (i32.const 269094) "a") (data (i32.const 269097) "a") (data (i32.const 269100) "a") (data (i32.const 269103) "a") (data (i32.const 269106) "a") (data (i32.const 269109) "a") (data (i32.const 269112) "a") (data (i32.const 269115) "a") (data (i32.const 269118) "a") (data (i32.const 269121) "a") (data (i32.const 269124) "a") (data (i32.const 269127) "a") (data (i32.const 269130) "a") (data (i32.const 269133) "a") (data (i32.const 269136) "a") (data (i32.const 269139) "a") (data (i32.const 269142) "a") (data (i32.const 269145) "a") (data (i32.const 269148) "a") (data (i32.const 269151) "a") (data (i32.const 269154) "a") (data (i32.const 269157) "a") (data (i32.const 269160) "a") (data (i32.const 269163) "a") (data (i32.const 269166) "a") (data (i32.const 269169) "a") (data (i32.const 269172) "a") (data (i32.const 269175) "a") (data (i32.const 269178) "a") (data (i32.const 269181) "a") (data (i32.const 269184) "a") (data (i32.const 269187) "a") (data (i32.const 269190) "a") (data (i32.const 269193) "a") (data (i32.const 269196) "a") (data (i32.const 269199) "a") (data (i32.const 269202) "a") (data (i32.const 269205) "a") (data (i32.const 269208) "a") (data (i32.const 269211) "a") (data (i32.const 269214) "a") (data (i32.const 269217) "a") (data (i32.const 269220) "a") (data (i32.const 269223) "a") (data (i32.const 269226) "a") (data (i32.const 269229) "a") (data (i32.const 269232) "a") (data (i32.const 269235) "a") (data (i32.const 269238) "a") (data (i32.const 269241) "a") (data (i32.const 269244) "a") (data (i32.const 269247) "a") (data (i32.const 269250) "a") (data (i32.const 269253) "a") (data (i32.const 269256) "a") (data (i32.const 269259) "a") (data (i32.const 269262) "a") (data (i32.const 269265) "a") (data (i32.const 269268) "a") (data (i32.const 269271) "a") (data (i32.const 269274) "a") (data (i32.const 269277) "a") (data (i32.const 269280) "a") (data (i32.const 269283) "a") (data (i32.const 269286) "a") (data (i32.const 269289) "a") (data (i32.const 269292) "a") (data (i32.const 269295) "a") (data (i32.const 269298) "a") (data (i32.const 269301) "a") (data (i32.const 269304) "a") (data (i32.const 269307) "a") (data (i32.const 269310) "a") (data (i32.const 269313) "a") (data (i32.const 269316) "a") (data (i32.const 269319) "a") (data (i32.const 269322) "a") (data (i32.const 269325) "a") (data (i32.const 269328) "a") (data (i32.const 269331) "a") (data (i32.const 269334) "a") (data (i32.const 269337) "a") (data (i32.const 269340) "a") (data (i32.const 269343) "a") (data (i32.const 269346) "a") (data (i32.const 269349) "a") (data (i32.const 269352) "a") (data (i32.const 269355) "a") (data (i32.const 269358) "a") (data (i32.const 269361) "a") (data (i32.const 269364) "a") (data (i32.const 269367) "a") (data (i32.const 269370) "a") (data (i32.const 269373) "a") (data (i32.const 269376) "a") (data (i32.const 269379) "a") (data (i32.const 269382) "a") (data (i32.const 269385) "a") (data (i32.const 269388) "a") (data (i32.const 269391) "a") (data (i32.const 269394) "a") (data (i32.const 269397) "a") (data (i32.const 269400) "a") (data (i32.const 269403) "a") (data (i32.const 269406) "a") (data (i32.const 269409) "a") (data (i32.const 269412) "a") (data (i32.const 269415) "a") (data (i32.const 269418) "a") (data (i32.const 269421) "a") (data (i32.const 269424) "a") (data (i32.const 269427) "a") (data (i32.const 269430) "a") (data (i32.const 269433) "a") (data (i32.const 269436) "a") (data (i32.const 269439) "a") (data (i32.const 269442) "a") (data (i32.const 269445) "a") (data (i32.const 269448) "a") (data (i32.const 269451) "a") (data (i32.const 269454) "a") (data (i32.const 269457) "a") (data (i32.const 269460) "a") (data (i32.const 269463) "a") (data (i32.const 269466) "a") (data (i32.const 269469) "a") (data (i32.const 269472) "a") (data (i32.const 269475) "a") (data (i32.const 269478) "a") (data (i32.const 269481) "a") (data (i32.const 269484) "a") (data (i32.const 269487) "a") (data (i32.const 269490) "a") (data (i32.const 269493) "a") (data (i32.const 269496) "a") (data (i32.const 269499) "a") (data (i32.const 269502) "a") (data (i32.const 269505) "a") (data (i32.const 269508) "a") (data (i32.const 269511) "a") (data (i32.const 269514) "a") (data (i32.const 269517) "a") (data (i32.const 269520) "a") (data (i32.const 269523) "a") (data (i32.const 269526) "a") (data (i32.const 269529) "a") (data (i32.const 269532) "a") (data (i32.const 269535) "a") (data (i32.const 269538) "a") (data (i32.const 269541) "a") (data (i32.const 269544) "a") (data (i32.const 269547) "a") (data (i32.const 269550) "a") (data (i32.const 269553) "a") (data (i32.const 269556) "a") (data (i32.const 269559) "a") (data (i32.const 269562) "a") (data (i32.const 269565) "a") (data (i32.const 269568) "a") (data (i32.const 269571) "a") (data (i32.const 269574) "a") (data (i32.const 269577) "a") (data (i32.const 269580) "a") (data (i32.const 269583) "a") (data (i32.const 269586) "a") (data (i32.const 269589) "a") (data (i32.const 269592) "a") (data (i32.const 269595) "a") (data (i32.const 269598) "a") (data (i32.const 269601) "a") (data (i32.const 269604) "a") (data (i32.const 269607) "a") (data (i32.const 269610) "a") (data (i32.const 269613) "a") (data (i32.const 269616) "a") (data (i32.const 269619) "a") (data (i32.const 269622) "a") (data (i32.const 269625) "a") (data (i32.const 269628) "a") (data (i32.const 269631) "a") (data (i32.const 269634) "a") (data (i32.const 269637) "a") (data (i32.const 269640) "a") (data (i32.const 269643) "a") (data (i32.const 269646) "a") (data (i32.const 269649) "a") (data (i32.const 269652) "a") (data (i32.const 269655) "a") (data (i32.const 269658) "a") (data (i32.const 269661) "a") (data (i32.const 269664) "a") (data (i32.const 269667) "a") (data (i32.const 269670) "a") (data (i32.const 269673) "a") (data (i32.const 269676) "a") (data (i32.const 269679) "a") (data (i32.const 269682) "a") (data (i32.const 269685) "a") (data (i32.const 269688) "a") (data (i32.const 269691) "a") (data (i32.const 269694) "a") (data (i32.const 269697) "a") (data (i32.const 269700) "a") (data (i32.const 269703) "a") (data (i32.const 269706) "a") (data (i32.const 269709) "a") (data (i32.const 269712) "a") (data (i32.const 269715) "a") (data (i32.const 269718) "a") (data (i32.const 269721) "a") (data (i32.const 269724) "a") (data (i32.const 269727) "a") (data (i32.const 269730) "a") (data (i32.const 269733) "a") (data (i32.const 269736) "a") (data (i32.const 269739) "a") (data (i32.const 269742) "a") (data (i32.const 269745) "a") (data (i32.const 269748) "a") (data (i32.const 269751) "a") (data (i32.const 269754) "a") (data (i32.const 269757) "a") (data (i32.const 269760) "a") (data (i32.const 269763) "a") (data (i32.const 269766) "a") (data (i32.const 269769) "a") (data (i32.const 269772) "a") (data (i32.const 269775) "a") (data (i32.const 269778) "a") (data (i32.const 269781) "a") (data (i32.const 269784) "a") (data (i32.const 269787) "a") (data (i32.const 269790) "a") (data (i32.const 269793) "a") (data (i32.const 269796) "a") (data (i32.const 269799) "a") (data (i32.const 269802) "a") (data (i32.const 269805) "a") (data (i32.const 269808) "a") (data (i32.const 269811) "a") (data (i32.const 269814) "a") (data (i32.const 269817) "a") (data (i32.const 269820) "a") (data (i32.const 269823) "a") (data (i32.const 269826) "a") (data (i32.const 269829) "a") (data (i32.const 269832) "a") (data (i32.const 269835) "a") (data (i32.const 269838) "a") (data (i32.const 269841) "a") (data (i32.const 269844) "a") (data (i32.const 269847) "a") (data (i32.const 269850) "a") (data (i32.const 269853) "a") (data (i32.const 269856) "a") (data (i32.const 269859) "a") (data (i32.const 269862) "a") (data (i32.const 269865) "a") (data (i32.const 269868) "a") (data (i32.const 269871) "a") (data (i32.const 269874) "a") (data (i32.const 269877) "a") (data (i32.const 269880) "a") (data (i32.const 269883) "a") (data (i32.const 269886) "a") (data (i32.const 269889) "a") (data (i32.const 269892) "a") (data (i32.const 269895) "a") (data (i32.const 269898) "a") (data (i32.const 269901) "a") (data (i32.const 269904) "a") (data (i32.const 269907) "a") (data (i32.const 269910) "a") (data (i32.const 269913) "a") (data (i32.const 269916) "a") (data (i32.const 269919) "a") (data (i32.const 269922) "a") (data (i32.const 269925) "a") (data (i32.const 269928) "a") (data (i32.const 269931) "a") (data (i32.const 269934) "a") (data (i32.const 269937) "a") (data (i32.const 269940) "a") (data (i32.const 269943) "a") (data (i32.const 269946) "a") (data (i32.const 269949) "a") (data (i32.const 269952) "a") (data (i32.const 269955) "a") (data (i32.const 269958) "a") (data (i32.const 269961) "a") (data (i32.const 269964) "a") (data (i32.const 269967) "a") (data (i32.const 269970) "a") (data (i32.const 269973) "a") (data (i32.const 269976) "a") (data (i32.const 269979) "a") (data (i32.const 269982) "a") (data (i32.const 269985) "a") (data (i32.const 269988) "a") (data (i32.const 269991) "a") (data (i32.const 269994) "a") (data (i32.const 269997) "a") (data (i32.const 270000) "a") (data (i32.const 270003) "a") (data (i32.const 270006) "a") (data (i32.const 270009) "a") (data (i32.const 270012) "a") (data (i32.const 270015) "a") (data (i32.const 270018) "a") (data (i32.const 270021) "a") (data (i32.const 270024) "a") (data (i32.const 270027) "a") (data (i32.const 270030) "a") (data (i32.const 270033) "a") (data (i32.const 270036) "a") (data (i32.const 270039) "a") (data (i32.const 270042) "a") (data (i32.const 270045) "a") (data (i32.const 270048) "a") (data (i32.const 270051) "a") (data (i32.const 270054) "a") (data (i32.const 270057) "a") (data (i32.const 270060) "a") (data (i32.const 270063) "a") (data (i32.const 270066) "a") (data (i32.const 270069) "a") (data (i32.const 270072) "a") (data (i32.const 270075) "a") (data (i32.const 270078) "a") (data (i32.const 270081) "a") (data (i32.const 270084) "a") (data (i32.const 270087) "a") (data (i32.const 270090) "a") (data (i32.const 270093) "a") (data (i32.const 270096) "a") (data (i32.const 270099) "a") (data (i32.const 270102) "a") (data (i32.const 270105) "a") (data (i32.const 270108) "a") (data (i32.const 270111) "a") (data (i32.const 270114) "a") (data (i32.const 270117) "a") (data (i32.const 270120) "a") (data (i32.const 270123) "a") (data (i32.const 270126) "a") (data (i32.const 270129) "a") (data (i32.const 270132) "a") (data (i32.const 270135) "a") (data (i32.const 270138) "a") (data (i32.const 270141) "a") (data (i32.const 270144) "a") (data (i32.const 270147) "a") (data (i32.const 270150) "a") (data (i32.const 270153) "a") (data (i32.const 270156) "a") (data (i32.const 270159) "a") (data (i32.const 270162) "a") (data (i32.const 270165) "a") (data (i32.const 270168) "a") (data (i32.const 270171) "a") (data (i32.const 270174) "a") (data (i32.const 270177) "a") (data (i32.const 270180) "a") (data (i32.const 270183) "a") (data (i32.const 270186) "a") (data (i32.const 270189) "a") (data (i32.const 270192) "a") (data (i32.const 270195) "a") (data (i32.const 270198) "a") (data (i32.const 270201) "a") (data (i32.const 270204) "a") (data (i32.const 270207) "a") (data (i32.const 270210) "a") (data (i32.const 270213) "a") (data (i32.const 270216) "a") (data (i32.const 270219) "a") (data (i32.const 270222) "a") (data (i32.const 270225) "a") (data (i32.const 270228) "a") (data (i32.const 270231) "a") (data (i32.const 270234) "a") (data (i32.const 270237) "a") (data (i32.const 270240) "a") (data (i32.const 270243) "a") (data (i32.const 270246) "a") (data (i32.const 270249) "a") (data (i32.const 270252) "a") (data (i32.const 270255) "a") (data (i32.const 270258) "a") (data (i32.const 270261) "a") (data (i32.const 270264) "a") (data (i32.const 270267) "a") (data (i32.const 270270) "a") (data (i32.const 270273) "a") (data (i32.const 270276) "a") (data (i32.const 270279) "a") (data (i32.const 270282) "a") (data (i32.const 270285) "a") (data (i32.const 270288) "a") (data (i32.const 270291) "a") (data (i32.const 270294) "a") (data (i32.const 270297) "a") (data (i32.const 270300) "a") (data (i32.const 270303) "a") (data (i32.const 270306) "a") (data (i32.const 270309) "a") (data (i32.const 270312) "a") (data (i32.const 270315) "a") (data (i32.const 270318) "a") (data (i32.const 270321) "a") (data (i32.const 270324) "a") (data (i32.const 270327) "a") (data (i32.const 270330) "a") (data (i32.const 270333) "a") (data (i32.const 270336) "a") (data (i32.const 270339) "a") (data (i32.const 270342) "a") (data (i32.const 270345) "a") (data (i32.const 270348) "a") (data (i32.const 270351) "a") (data (i32.const 270354) "a") (data (i32.const 270357) "a") (data (i32.const 270360) "a") (data (i32.const 270363) "a") (data (i32.const 270366) "a") (data (i32.const 270369) "a") (data (i32.const 270372) "a") (data (i32.const 270375) "a") (data (i32.const 270378) "a") (data (i32.const 270381) "a") (data (i32.const 270384) "a") (data (i32.const 270387) "a") (data (i32.const 270390) "a") (data (i32.const 270393) "a") (data (i32.const 270396) "a") (data (i32.const 270399) "a") (data (i32.const 270402) "a") (data (i32.const 270405) "a") (data (i32.const 270408) "a") (data (i32.const 270411) "a") (data (i32.const 270414) "a") (data (i32.const 270417) "a") (data (i32.const 270420) "a") (data (i32.const 270423) "a") (data (i32.const 270426) "a") (data (i32.const 270429) "a") (data (i32.const 270432) "a") (data (i32.const 270435) "a") (data (i32.const 270438) "a") (data (i32.const 270441) "a") (data (i32.const 270444) "a") (data (i32.const 270447) "a") (data (i32.const 270450) "a") (data (i32.const 270453) "a") (data (i32.const 270456) "a") (data (i32.const 270459) "a") (data (i32.const 270462) "a") (data (i32.const 270465) "a") (data (i32.const 270468) "a") (data (i32.const 270471) "a") (data (i32.const 270474) "a") (data (i32.const 270477) "a") (data (i32.const 270480) "a") (data (i32.const 270483) "a") (data (i32.const 270486) "a") (data (i32.const 270489) "a") (data (i32.const 270492) "a") (data (i32.const 270495) "a") (data (i32.const 270498) "a") (data (i32.const 270501) "a") (data (i32.const 270504) "a") (data (i32.const 270507) "a") (data (i32.const 270510) "a") (data (i32.const 270513) "a") (data (i32.const 270516) "a") (data (i32.const 270519) "a") (data (i32.const 270522) "a") (data (i32.const 270525) "a") (data (i32.const 270528) "a") (data (i32.const 270531) "a") (data (i32.const 270534) "a") (data (i32.const 270537) "a") (data (i32.const 270540) "a") (data (i32.const 270543) "a") (data (i32.const 270546) "a") (data (i32.const 270549) "a") (data (i32.const 270552) "a") (data (i32.const 270555) "a") (data (i32.const 270558) "a") (data (i32.const 270561) "a") (data (i32.const 270564) "a") (data (i32.const 270567) "a") (data (i32.const 270570) "a") (data (i32.const 270573) "a") (data (i32.const 270576) "a") (data (i32.const 270579) "a") (data (i32.const 270582) "a") (data (i32.const 270585) "a") (data (i32.const 270588) "a") (data (i32.const 270591) "a") (data (i32.const 270594) "a") (data (i32.const 270597) "a") (data (i32.const 270600) "a") (data (i32.const 270603) "a") (data (i32.const 270606) "a") (data (i32.const 270609) "a") (data (i32.const 270612) "a") (data (i32.const 270615) "a") (data (i32.const 270618) "a") (data (i32.const 270621) "a") (data (i32.const 270624) "a") (data (i32.const 270627) "a") (data (i32.const 270630) "a") (data (i32.const 270633) "a") (data (i32.const 270636) "a") (data (i32.const 270639) "a") (data (i32.const 270642) "a") (data (i32.const 270645) "a") (data (i32.const 270648) "a") (data (i32.const 270651) "a") (data (i32.const 270654) "a") (data (i32.const 270657) "a") (data (i32.const 270660) "a") (data (i32.const 270663) "a") (data (i32.const 270666) "a") (data (i32.const 270669) "a") (data (i32.const 270672) "a") (data (i32.const 270675) "a") (data (i32.const 270678) "a") (data (i32.const 270681) "a") (data (i32.const 270684) "a") (data (i32.const 270687) "a") (data (i32.const 270690) "a") (data (i32.const 270693) "a") (data (i32.const 270696) "a") (data (i32.const 270699) "a") (data (i32.const 270702) "a") (data (i32.const 270705) "a") (data (i32.const 270708) "a") (data (i32.const 270711) "a") (data (i32.const 270714) "a") (data (i32.const 270717) "a") (data (i32.const 270720) "a") (data (i32.const 270723) "a") (data (i32.const 270726) "a") (data (i32.const 270729) "a") (data (i32.const 270732) "a") (data (i32.const 270735) "a") (data (i32.const 270738) "a") (data (i32.const 270741) "a") (data (i32.const 270744) "a") (data (i32.const 270747) "a") (data (i32.const 270750) "a") (data (i32.const 270753) "a") (data (i32.const 270756) "a") (data (i32.const 270759) "a") (data (i32.const 270762) "a") (data (i32.const 270765) "a") (data (i32.const 270768) "a") (data (i32.const 270771) "a") (data (i32.const 270774) "a") (data (i32.const 270777) "a") (data (i32.const 270780) "a") (data (i32.const 270783) "a") (data (i32.const 270786) "a") (data (i32.const 270789) "a") (data (i32.const 270792) "a") (data (i32.const 270795) "a") (data (i32.const 270798) "a") (data (i32.const 270801) "a") (data (i32.const 270804) "a") (data (i32.const 270807) "a") (data (i32.const 270810) "a") (data (i32.const 270813) "a") (data (i32.const 270816) "a") (data (i32.const 270819) "a") (data (i32.const 270822) "a") (data (i32.const 270825) "a") (data (i32.const 270828) "a") (data (i32.const 270831) "a") (data (i32.const 270834) "a") (data (i32.const 270837) "a") (data (i32.const 270840) "a") (data (i32.const 270843) "a") (data (i32.const 270846) "a") (data (i32.const 270849) "a") (data (i32.const 270852) "a") (data (i32.const 270855) "a") (data (i32.const 270858) "a") (data (i32.const 270861) "a") (data (i32.const 270864) "a") (data (i32.const 270867) "a") (data (i32.const 270870) "a") (data (i32.const 270873) "a") (data (i32.const 270876) "a") (data (i32.const 270879) "a") (data (i32.const 270882) "a") (data (i32.const 270885) "a") (data (i32.const 270888) "a") (data (i32.const 270891) "a") (data (i32.const 270894) "a") (data (i32.const 270897) "a") (data (i32.const 270900) "a") (data (i32.const 270903) "a") (data (i32.const 270906) "a") (data (i32.const 270909) "a") (data (i32.const 270912) "a") (data (i32.const 270915) "a") (data (i32.const 270918) "a") (data (i32.const 270921) "a") (data (i32.const 270924) "a") (data (i32.const 270927) "a") (data (i32.const 270930) "a") (data (i32.const 270933) "a") (data (i32.const 270936) "a") (data (i32.const 270939) "a") (data (i32.const 270942) "a") (data (i32.const 270945) "a") (data (i32.const 270948) "a") (data (i32.const 270951) "a") (data (i32.const 270954) "a") (data (i32.const 270957) "a") (data (i32.const 270960) "a") (data (i32.const 270963) "a") (data (i32.const 270966) "a") (data (i32.const 270969) "a") (data (i32.const 270972) "a") (data (i32.const 270975) "a") (data (i32.const 270978) "a") (data (i32.const 270981) "a") (data (i32.const 270984) "a") (data (i32.const 270987) "a") (data (i32.const 270990) "a") (data (i32.const 270993) "a") (data (i32.const 270996) "a") (data (i32.const 270999) "a") (data (i32.const 271002) "a") (data (i32.const 271005) "a") (data (i32.const 271008) "a") (data (i32.const 271011) "a") (data (i32.const 271014) "a") (data (i32.const 271017) "a") (data (i32.const 271020) "a") (data (i32.const 271023) "a") (data (i32.const 271026) "a") (data (i32.const 271029) "a") (data (i32.const 271032) "a") (data (i32.const 271035) "a") (data (i32.const 271038) "a") (data (i32.const 271041) "a") (data (i32.const 271044) "a") (data (i32.const 271047) "a") (data (i32.const 271050) "a") (data (i32.const 271053) "a") (data (i32.const 271056) "a") (data (i32.const 271059) "a") (data (i32.const 271062) "a") (data (i32.const 271065) "a") (data (i32.const 271068) "a") (data (i32.const 271071) "a") (data (i32.const 271074) "a") (data (i32.const 271077) "a") (data (i32.const 271080) "a") (data (i32.const 271083) "a") (data (i32.const 271086) "a") (data (i32.const 271089) "a") (data (i32.const 271092) "a") (data (i32.const 271095) "a") (data (i32.const 271098) "a") (data (i32.const 271101) "a") (data (i32.const 271104) "a") (data (i32.const 271107) "a") (data (i32.const 271110) "a") (data (i32.const 271113) "a") (data (i32.const 271116) "a") (data (i32.const 271119) "a") (data (i32.const 271122) "a") (data (i32.const 271125) "a") (data (i32.const 271128) "a") (data (i32.const 271131) "a") (data (i32.const 271134) "a") (data (i32.const 271137) "a") (data (i32.const 271140) "a") (data (i32.const 271143) "a") (data (i32.const 271146) "a") (data (i32.const 271149) "a") (data (i32.const 271152) "a") (data (i32.const 271155) "a") (data (i32.const 271158) "a") (data (i32.const 271161) "a") (data (i32.const 271164) "a") (data (i32.const 271167) "a") (data (i32.const 271170) "a") (data (i32.const 271173) "a") (data (i32.const 271176) "a") (data (i32.const 271179) "a") (data (i32.const 271182) "a") (data (i32.const 271185) "a") (data (i32.const 271188) "a") (data (i32.const 271191) "a") (data (i32.const 271194) "a") (data (i32.const 271197) "a") (data (i32.const 271200) "a") (data (i32.const 271203) "a") (data (i32.const 271206) "a") (data (i32.const 271209) "a") (data (i32.const 271212) "a") (data (i32.const 271215) "a") (data (i32.const 271218) "a") (data (i32.const 271221) "a") (data (i32.const 271224) "a") (data (i32.const 271227) "a") (data (i32.const 271230) "a") (data (i32.const 271233) "a") (data (i32.const 271236) "a") (data (i32.const 271239) "a") (data (i32.const 271242) "a") (data (i32.const 271245) "a") (data (i32.const 271248) "a") (data (i32.const 271251) "a") (data (i32.const 271254) "a") (data (i32.const 271257) "a") (data (i32.const 271260) "a") (data (i32.const 271263) "a") (data (i32.const 271266) "a") (data (i32.const 271269) "a") (data (i32.const 271272) "a") (data (i32.const 271275) "a") (data (i32.const 271278) "a") (data (i32.const 271281) "a") (data (i32.const 271284) "a") (data (i32.const 271287) "a") (data (i32.const 271290) "a") (data (i32.const 271293) "a") (data (i32.const 271296) "a") (data (i32.const 271299) "a") (data (i32.const 271302) "a") (data (i32.const 271305) "a") (data (i32.const 271308) "a") (data (i32.const 271311) "a") (data (i32.const 271314) "a") (data (i32.const 271317) "a") (data (i32.const 271320) "a") (data (i32.const 271323) "a") (data (i32.const 271326) "a") (data (i32.const 271329) "a") (data (i32.const 271332) "a") (data (i32.const 271335) "a") (data (i32.const 271338) "a") (data (i32.const 271341) "a") (data (i32.const 271344) "a") (data (i32.const 271347) "a") (data (i32.const 271350) "a") (data (i32.const 271353) "a") (data (i32.const 271356) "a") (data (i32.const 271359) "a") (data (i32.const 271362) "a") (data (i32.const 271365) "a") (data (i32.const 271368) "a") (data (i32.const 271371) "a") (data (i32.const 271374) "a") (data (i32.const 271377) "a") (data (i32.const 271380) "a") (data (i32.const 271383) "a") (data (i32.const 271386) "a") (data (i32.const 271389) "a") (data (i32.const 271392) "a") (data (i32.const 271395) "a") (data (i32.const 271398) "a") (data (i32.const 271401) "a") (data (i32.const 271404) "a") (data (i32.const 271407) "a") (data (i32.const 271410) "a") (data (i32.const 271413) "a") (data (i32.const 271416) "a") (data (i32.const 271419) "a") (data (i32.const 271422) "a") (data (i32.const 271425) "a") (data (i32.const 271428) "a") (data (i32.const 271431) "a") (data (i32.const 271434) "a") (data (i32.const 271437) "a") (data (i32.const 271440) "a") (data (i32.const 271443) "a") (data (i32.const 271446) "a") (data (i32.const 271449) "a") (data (i32.const 271452) "a") (data (i32.const 271455) "a") (data (i32.const 271458) "a") (data (i32.const 271461) "a") (data (i32.const 271464) "a") (data (i32.const 271467) "a") (data (i32.const 271470) "a") (data (i32.const 271473) "a") (data (i32.const 271476) "a") (data (i32.const 271479) "a") (data (i32.const 271482) "a") (data (i32.const 271485) "a") (data (i32.const 271488) "a") (data (i32.const 271491) "a") (data (i32.const 271494) "a") (data (i32.const 271497) "a") (data (i32.const 271500) "a") (data (i32.const 271503) "a") (data (i32.const 271506) "a") (data (i32.const 271509) "a") (data (i32.const 271512) "a") (data (i32.const 271515) "a") (data (i32.const 271518) "a") (data (i32.const 271521) "a") (data (i32.const 271524) "a") (data (i32.const 271527) "a") (data (i32.const 271530) "a") (data (i32.const 271533) "a") (data (i32.const 271536) "a") (data (i32.const 271539) "a") (data (i32.const 271542) "a") (data (i32.const 271545) "a") (data (i32.const 271548) "a") (data (i32.const 271551) "a") (data (i32.const 271554) "a") (data (i32.const 271557) "a") (data (i32.const 271560) "a") (data (i32.const 271563) "a") (data (i32.const 271566) "a") (data (i32.const 271569) "a") (data (i32.const 271572) "a") (data (i32.const 271575) "a") (data (i32.const 271578) "a") (data (i32.const 271581) "a") (data (i32.const 271584) "a") (data (i32.const 271587) "a") (data (i32.const 271590) "a") (data (i32.const 271593) "a") (data (i32.const 271596) "a") (data (i32.const 271599) "a") (data (i32.const 271602) "a") (data (i32.const 271605) "a") (data (i32.const 271608) "a") (data (i32.const 271611) "a") (data (i32.const 271614) "a") (data (i32.const 271617) "a") (data (i32.const 271620) "a") (data (i32.const 271623) "a") (data (i32.const 271626) "a") (data (i32.const 271629) "a") (data (i32.const 271632) "a") (data (i32.const 271635) "a") (data (i32.const 271638) "a") (data (i32.const 271641) "a") (data (i32.const 271644) "a") (data (i32.const 271647) "a") (data (i32.const 271650) "a") (data (i32.const 271653) "a") (data (i32.const 271656) "a") (data (i32.const 271659) "a") (data (i32.const 271662) "a") (data (i32.const 271665) "a") (data (i32.const 271668) "a") (data (i32.const 271671) "a") (data (i32.const 271674) "a") (data (i32.const 271677) "a") (data (i32.const 271680) "a") (data (i32.const 271683) "a") (data (i32.const 271686) "a") (data (i32.const 271689) "a") (data (i32.const 271692) "a") (data (i32.const 271695) "a") (data (i32.const 271698) "a") (data (i32.const 271701) "a") (data (i32.const 271704) "a") (data (i32.const 271707) "a") (data (i32.const 271710) "a") (data (i32.const 271713) "a") (data (i32.const 271716) "a") (data (i32.const 271719) "a") (data (i32.const 271722) "a") (data (i32.const 271725) "a") (data (i32.const 271728) "a") (data (i32.const 271731) "a") (data (i32.const 271734) "a") (data (i32.const 271737) "a") (data (i32.const 271740) "a") (data (i32.const 271743) "a") (data (i32.const 271746) "a") (data (i32.const 271749) "a") (data (i32.const 271752) "a") (data (i32.const 271755) "a") (data (i32.const 271758) "a") (data (i32.const 271761) "a") (data (i32.const 271764) "a") (data (i32.const 271767) "a") (data (i32.const 271770) "a") (data (i32.const 271773) "a") (data (i32.const 271776) "a") (data (i32.const 271779) "a") (data (i32.const 271782) "a") (data (i32.const 271785) "a") (data (i32.const 271788) "a") (data (i32.const 271791) "a") (data (i32.const 271794) "a") (data (i32.const 271797) "a") (data (i32.const 271800) "a") (data (i32.const 271803) "a") (data (i32.const 271806) "a") (data (i32.const 271809) "a") (data (i32.const 271812) "a") (data (i32.const 271815) "a") (data (i32.const 271818) "a") (data (i32.const 271821) "a") (data (i32.const 271824) "a") (data (i32.const 271827) "a") (data (i32.const 271830) "a") (data (i32.const 271833) "a") (data (i32.const 271836) "a") (data (i32.const 271839) "a") (data (i32.const 271842) "a") (data (i32.const 271845) "a") (data (i32.const 271848) "a") (data (i32.const 271851) "a") (data (i32.const 271854) "a") (data (i32.const 271857) "a") (data (i32.const 271860) "a") (data (i32.const 271863) "a") (data (i32.const 271866) "a") (data (i32.const 271869) "a") (data (i32.const 271872) "a") (data (i32.const 271875) "a") (data (i32.const 271878) "a") (data (i32.const 271881) "a") (data (i32.const 271884) "a") (data (i32.const 271887) "a") (data (i32.const 271890) "a") (data (i32.const 271893) "a") (data (i32.const 271896) "a") (data (i32.const 271899) "a") (data (i32.const 271902) "a") (data (i32.const 271905) "a") (data (i32.const 271908) "a") (data (i32.const 271911) "a") (data (i32.const 271914) "a") (data (i32.const 271917) "a") (data (i32.const 271920) "a") (data (i32.const 271923) "a") (data (i32.const 271926) "a") (data (i32.const 271929) "a") (data (i32.const 271932) "a") (data (i32.const 271935) "a") (data (i32.const 271938) "a") (data (i32.const 271941) "a") (data (i32.const 271944) "a") (data (i32.const 271947) "a") (data (i32.const 271950) "a") (data (i32.const 271953) "a") (data (i32.const 271956) "a") (data (i32.const 271959) "a") (data (i32.const 271962) "a") (data (i32.const 271965) "a") (data (i32.const 271968) "a") (data (i32.const 271971) "a") (data (i32.const 271974) "a") (data (i32.const 271977) "a") (data (i32.const 271980) "a") (data (i32.const 271983) "a") (data (i32.const 271986) "a") (data (i32.const 271989) "a") (data (i32.const 271992) "a") (data (i32.const 271995) "a") (data (i32.const 271998) "a") (data (i32.const 272001) "a") (data (i32.const 272004) "a") (data (i32.const 272007) "a") (data (i32.const 272010) "a") (data (i32.const 272013) "a") (data (i32.const 272016) "a") (data (i32.const 272019) "a") (data (i32.const 272022) "a") (data (i32.const 272025) "a") (data (i32.const 272028) "a") (data (i32.const 272031) "a") (data (i32.const 272034) "a") (data (i32.const 272037) "a") (data (i32.const 272040) "a") (data (i32.const 272043) "a") (data (i32.const 272046) "a") (data (i32.const 272049) "a") (data (i32.const 272052) "a") (data (i32.const 272055) "a") (data (i32.const 272058) "a") (data (i32.const 272061) "a") (data (i32.const 272064) "a") (data (i32.const 272067) "a") (data (i32.const 272070) "a") (data (i32.const 272073) "a") (data (i32.const 272076) "a") (data (i32.const 272079) "a") (data (i32.const 272082) "a") (data (i32.const 272085) "a") (data (i32.const 272088) "a") (data (i32.const 272091) "a") (data (i32.const 272094) "a") (data (i32.const 272097) "a") (data (i32.const 272100) "a") (data (i32.const 272103) "a") (data (i32.const 272106) "a") (data (i32.const 272109) "a") (data (i32.const 272112) "a") (data (i32.const 272115) "a") (data (i32.const 272118) "a") (data (i32.const 272121) "a") (data (i32.const 272124) "a") (data (i32.const 272127) "a") (data (i32.const 272130) "a") (data (i32.const 272133) "a") (data (i32.const 272136) "a") (data (i32.const 272139) "a") (data (i32.const 272142) "a") (data (i32.const 272145) "a") (data (i32.const 272148) "a") (data (i32.const 272151) "a") (data (i32.const 272154) "a") (data (i32.const 272157) "a") (data (i32.const 272160) "a") (data (i32.const 272163) "a") (data (i32.const 272166) "a") (data (i32.const 272169) "a") (data (i32.const 272172) "a") (data (i32.const 272175) "a") (data (i32.const 272178) "a") (data (i32.const 272181) "a") (data (i32.const 272184) "a") (data (i32.const 272187) "a") (data (i32.const 272190) "a") (data (i32.const 272193) "a") (data (i32.const 272196) "a") (data (i32.const 272199) "a") (data (i32.const 272202) "a") (data (i32.const 272205) "a") (data (i32.const 272208) "a") (data (i32.const 272211) "a") (data (i32.const 272214) "a") (data (i32.const 272217) "a") (data (i32.const 272220) "a") (data (i32.const 272223) "a") (data (i32.const 272226) "a") (data (i32.const 272229) "a") (data (i32.const 272232) "a") (data (i32.const 272235) "a") (data (i32.const 272238) "a") (data (i32.const 272241) "a") (data (i32.const 272244) "a") (data (i32.const 272247) "a") (data (i32.const 272250) "a") (data (i32.const 272253) "a") (data (i32.const 272256) "a") (data (i32.const 272259) "a") (data (i32.const 272262) "a") (data (i32.const 272265) "a") (data (i32.const 272268) "a") (data (i32.const 272271) "a") (data (i32.const 272274) "a") (data (i32.const 272277) "a") (data (i32.const 272280) "a") (data (i32.const 272283) "a") (data (i32.const 272286) "a") (data (i32.const 272289) "a") (data (i32.const 272292) "a") (data (i32.const 272295) "a") (data (i32.const 272298) "a") (data (i32.const 272301) "a") (data (i32.const 272304) "a") (data (i32.const 272307) "a") (data (i32.const 272310) "a") (data (i32.const 272313) "a") (data (i32.const 272316) "a") (data (i32.const 272319) "a") (data (i32.const 272322) "a") (data (i32.const 272325) "a") (data (i32.const 272328) "a") (data (i32.const 272331) "a") (data (i32.const 272334) "a") (data (i32.const 272337) "a") (data (i32.const 272340) "a") (data (i32.const 272343) "a") (data (i32.const 272346) "a") (data (i32.const 272349) "a") (data (i32.const 272352) "a") (data (i32.const 272355) "a") (data (i32.const 272358) "a") (data (i32.const 272361) "a") (data (i32.const 272364) "a") (data (i32.const 272367) "a") (data (i32.const 272370) "a") (data (i32.const 272373) "a") (data (i32.const 272376) "a") (data (i32.const 272379) "a") (data (i32.const 272382) "a") (data (i32.const 272385) "a") (data (i32.const 272388) "a") (data (i32.const 272391) "a") (data (i32.const 272394) "a") (data (i32.const 272397) "a") (data (i32.const 272400) "a") (data (i32.const 272403) "a") (data (i32.const 272406) "a") (data (i32.const 272409) "a") (data (i32.const 272412) "a") (data (i32.const 272415) "a") (data (i32.const 272418) "a") (data (i32.const 272421) "a") (data (i32.const 272424) "a") (data (i32.const 272427) "a") (data (i32.const 272430) "a") (data (i32.const 272433) "a") (data (i32.const 272436) "a") (data (i32.const 272439) "a") (data (i32.const 272442) "a") (data (i32.const 272445) "a") (data (i32.const 272448) "a") (data (i32.const 272451) "a") (data (i32.const 272454) "a") (data (i32.const 272457) "a") (data (i32.const 272460) "a") (data (i32.const 272463) "a") (data (i32.const 272466) "a") (data (i32.const 272469) "a") (data (i32.const 272472) "a") (data (i32.const 272475) "a") (data (i32.const 272478) "a") (data (i32.const 272481) "a") (data (i32.const 272484) "a") (data (i32.const 272487) "a") (data (i32.const 272490) "a") (data (i32.const 272493) "a") (data (i32.const 272496) "a") (data (i32.const 272499) "a") (data (i32.const 272502) "a") (data (i32.const 272505) "a") (data (i32.const 272508) "a") (data (i32.const 272511) "a") (data (i32.const 272514) "a") (data (i32.const 272517) "a") (data (i32.const 272520) "a") (data (i32.const 272523) "a") (data (i32.const 272526) "a") (data (i32.const 272529) "a") (data (i32.const 272532) "a") (data (i32.const 272535) "a") (data (i32.const 272538) "a") (data (i32.const 272541) "a") (data (i32.const 272544) "a") (data (i32.const 272547) "a") (data (i32.const 272550) "a") (data (i32.const 272553) "a") (data (i32.const 272556) "a") (data (i32.const 272559) "a") (data (i32.const 272562) "a") (data (i32.const 272565) "a") (data (i32.const 272568) "a") (data (i32.const 272571) "a") (data (i32.const 272574) "a") (data (i32.const 272577) "a") (data (i32.const 272580) "a") (data (i32.const 272583) "a") (data (i32.const 272586) "a") (data (i32.const 272589) "a") (data (i32.const 272592) "a") (data (i32.const 272595) "a") (data (i32.const 272598) "a") (data (i32.const 272601) "a") (data (i32.const 272604) "a") (data (i32.const 272607) "a") (data (i32.const 272610) "a") (data (i32.const 272613) "a") (data (i32.const 272616) "a") (data (i32.const 272619) "a") (data (i32.const 272622) "a") (data (i32.const 272625) "a") (data (i32.const 272628) "a") (data (i32.const 272631) "a") (data (i32.const 272634) "a") (data (i32.const 272637) "a") (data (i32.const 272640) "a") (data (i32.const 272643) "a") (data (i32.const 272646) "a") (data (i32.const 272649) "a") (data (i32.const 272652) "a") (data (i32.const 272655) "a") (data (i32.const 272658) "a") (data (i32.const 272661) "a") (data (i32.const 272664) "a") (data (i32.const 272667) "a") (data (i32.const 272670) "a") (data (i32.const 272673) "a") (data (i32.const 272676) "a") (data (i32.const 272679) "a") (data (i32.const 272682) "a") (data (i32.const 272685) "a") (data (i32.const 272688) "a") (data (i32.const 272691) "a") (data (i32.const 272694) "a") (data (i32.const 272697) "a") (data (i32.const 272700) "a") (data (i32.const 272703) "a") (data (i32.const 272706) "a") (data (i32.const 272709) "a") (data (i32.const 272712) "a") (data (i32.const 272715) "a") (data (i32.const 272718) "a") (data (i32.const 272721) "a") (data (i32.const 272724) "a") (data (i32.const 272727) "a") (data (i32.const 272730) "a") (data (i32.const 272733) "a") (data (i32.const 272736) "a") (data (i32.const 272739) "a") (data (i32.const 272742) "a") (data (i32.const 272745) "a") (data (i32.const 272748) "a") (data (i32.const 272751) "a") (data (i32.const 272754) "a") (data (i32.const 272757) "a") (data (i32.const 272760) "a") (data (i32.const 272763) "a") (data (i32.const 272766) "a") (data (i32.const 272769) "a") (data (i32.const 272772) "a") (data (i32.const 272775) "a") (data (i32.const 272778) "a") (data (i32.const 272781) "a") (data (i32.const 272784) "a") (data (i32.const 272787) "a") (data (i32.const 272790) "a") (data (i32.const 272793) "a") (data (i32.const 272796) "a") (data (i32.const 272799) "a") (data (i32.const 272802) "a") (data (i32.const 272805) "a") (data (i32.const 272808) "a") (data (i32.const 272811) "a") (data (i32.const 272814) "a") (data (i32.const 272817) "a") (data (i32.const 272820) "a") (data (i32.const 272823) "a") (data (i32.const 272826) "a") (data (i32.const 272829) "a") (data (i32.const 272832) "a") (data (i32.const 272835) "a") (data (i32.const 272838) "a") (data (i32.const 272841) "a") (data (i32.const 272844) "a") (data (i32.const 272847) "a") (data (i32.const 272850) "a") (data (i32.const 272853) "a") (data (i32.const 272856) "a") (data (i32.const 272859) "a") (data (i32.const 272862) "a") (data (i32.const 272865) "a") (data (i32.const 272868) "a") (data (i32.const 272871) "a") (data (i32.const 272874) "a") (data (i32.const 272877) "a") (data (i32.const 272880) "a") (data (i32.const 272883) "a") (data (i32.const 272886) "a") (data (i32.const 272889) "a") (data (i32.const 272892) "a") (data (i32.const 272895) "a") (data (i32.const 272898) "a") (data (i32.const 272901) "a") (data (i32.const 272904) "a") (data (i32.const 272907) "a") (data (i32.const 272910) "a") (data (i32.const 272913) "a") (data (i32.const 272916) "a") (data (i32.const 272919) "a") (data (i32.const 272922) "a") (data (i32.const 272925) "a") (data (i32.const 272928) "a") (data (i32.const 272931) "a") (data (i32.const 272934) "a") (data (i32.const 272937) "a") (data (i32.const 272940) "a") (data (i32.const 272943) "a") (data (i32.const 272946) "a") (data (i32.const 272949) "a") (data (i32.const 272952) "a") (data (i32.const 272955) "a") (data (i32.const 272958) "a") (data (i32.const 272961) "a") (data (i32.const 272964) "a") (data (i32.const 272967) "a") (data (i32.const 272970) "a") (data (i32.const 272973) "a") (data (i32.const 272976) "a") (data (i32.const 272979) "a") (data (i32.const 272982) "a") (data (i32.const 272985) "a") (data (i32.const 272988) "a") (data (i32.const 272991) "a") (data (i32.const 272994) "a") (data (i32.const 272997) "a") (data (i32.const 273000) "a") (data (i32.const 273003) "a") (data (i32.const 273006) "a") (data (i32.const 273009) "a") (data (i32.const 273012) "a") (data (i32.const 273015) "a") (data (i32.const 273018) "a") (data (i32.const 273021) "a") (data (i32.const 273024) "a") (data (i32.const 273027) "a") (data (i32.const 273030) "a") (data (i32.const 273033) "a") (data (i32.const 273036) "a") (data (i32.const 273039) "a") (data (i32.const 273042) "a") (data (i32.const 273045) "a") (data (i32.const 273048) "a") (data (i32.const 273051) "a") (data (i32.const 273054) "a") (data (i32.const 273057) "a") (data (i32.const 273060) "a") (data (i32.const 273063) "a") (data (i32.const 273066) "a") (data (i32.const 273069) "a") (data (i32.const 273072) "a") (data (i32.const 273075) "a") (data (i32.const 273078) "a") (data (i32.const 273081) "a") (data (i32.const 273084) "a") (data (i32.const 273087) "a") (data (i32.const 273090) "a") (data (i32.const 273093) "a") (data (i32.const 273096) "a") (data (i32.const 273099) "a") (data (i32.const 273102) "a") (data (i32.const 273105) "a") (data (i32.const 273108) "a") (data (i32.const 273111) "a") (data (i32.const 273114) "a") (data (i32.const 273117) "a") (data (i32.const 273120) "a") (data (i32.const 273123) "a") (data (i32.const 273126) "a") (data (i32.const 273129) "a") (data (i32.const 273132) "a") (data (i32.const 273135) "a") (data (i32.const 273138) "a") (data (i32.const 273141) "a") (data (i32.const 273144) "a") (data (i32.const 273147) "a") (data (i32.const 273150) "a") (data (i32.const 273153) "a") (data (i32.const 273156) "a") (data (i32.const 273159) "a") (data (i32.const 273162) "a") (data (i32.const 273165) "a") (data (i32.const 273168) "a") (data (i32.const 273171) "a") (data (i32.const 273174) "a") (data (i32.const 273177) "a") (data (i32.const 273180) "a") (data (i32.const 273183) "a") (data (i32.const 273186) "a") (data (i32.const 273189) "a") (data (i32.const 273192) "a") (data (i32.const 273195) "a") (data (i32.const 273198) "a") (data (i32.const 273201) "a") (data (i32.const 273204) "a") (data (i32.const 273207) "a") (data (i32.const 273210) "a") (data (i32.const 273213) "a") (data (i32.const 273216) "a") (data (i32.const 273219) "a") (data (i32.const 273222) "a") (data (i32.const 273225) "a") (data (i32.const 273228) "a") (data (i32.const 273231) "a") (data (i32.const 273234) "a") (data (i32.const 273237) "a") (data (i32.const 273240) "a") (data (i32.const 273243) "a") (data (i32.const 273246) "a") (data (i32.const 273249) "a") (data (i32.const 273252) "a") (data (i32.const 273255) "a") (data (i32.const 273258) "a") (data (i32.const 273261) "a") (data (i32.const 273264) "a") (data (i32.const 273267) "a") (data (i32.const 273270) "a") (data (i32.const 273273) "a") (data (i32.const 273276) "a") (data (i32.const 273279) "a") (data (i32.const 273282) "a") (data (i32.const 273285) "a") (data (i32.const 273288) "a") (data (i32.const 273291) "a") (data (i32.const 273294) "a") (data (i32.const 273297) "a") (data (i32.const 273300) "a") (data (i32.const 273303) "a") (data (i32.const 273306) "a") (data (i32.const 273309) "a") (data (i32.const 273312) "a") (data (i32.const 273315) "a") (data (i32.const 273318) "a") (data (i32.const 273321) "a") (data (i32.const 273324) "a") (data (i32.const 273327) "a") (data (i32.const 273330) "a") (data (i32.const 273333) "a") (data (i32.const 273336) "a") (data (i32.const 273339) "a") (data (i32.const 273342) "a") (data (i32.const 273345) "a") (data (i32.const 273348) "a") (data (i32.const 273351) "a") (data (i32.const 273354) "a") (data (i32.const 273357) "a") (data (i32.const 273360) "a") (data (i32.const 273363) "a") (data (i32.const 273366) "a") (data (i32.const 273369) "a") (data (i32.const 273372) "a") (data (i32.const 273375) "a") (data (i32.const 273378) "a") (data (i32.const 273381) "a") (data (i32.const 273384) "a") (data (i32.const 273387) "a") (data (i32.const 273390) "a") (data (i32.const 273393) "a") (data (i32.const 273396) "a") (data (i32.const 273399) "a") (data (i32.const 273402) "a") (data (i32.const 273405) "a") (data (i32.const 273408) "a") (data (i32.const 273411) "a") (data (i32.const 273414) "a") (data (i32.const 273417) "a") (data (i32.const 273420) "a") (data (i32.const 273423) "a") (data (i32.const 273426) "a") (data (i32.const 273429) "a") (data (i32.const 273432) "a") (data (i32.const 273435) "a") (data (i32.const 273438) "a") (data (i32.const 273441) "a") (data (i32.const 273444) "a") (data (i32.const 273447) "a") (data (i32.const 273450) "a") (data (i32.const 273453) "a") (data (i32.const 273456) "a") (data (i32.const 273459) "a") (data (i32.const 273462) "a") (data (i32.const 273465) "a") (data (i32.const 273468) "a") (data (i32.const 273471) "a") (data (i32.const 273474) "a") (data (i32.const 273477) "a") (data (i32.const 273480) "a") (data (i32.const 273483) "a") (data (i32.const 273486) "a") (data (i32.const 273489) "a") (data (i32.const 273492) "a") (data (i32.const 273495) "a") (data (i32.const 273498) "a") (data (i32.const 273501) "a") (data (i32.const 273504) "a") (data (i32.const 273507) "a") (data (i32.const 273510) "a") (data (i32.const 273513) "a") (data (i32.const 273516) "a") (data (i32.const 273519) "a") (data (i32.const 273522) "a") (data (i32.const 273525) "a") (data (i32.const 273528) "a") (data (i32.const 273531) "a") (data (i32.const 273534) "a") (data (i32.const 273537) "a") (data (i32.const 273540) "a") (data (i32.const 273543) "a") (data (i32.const 273546) "a") (data (i32.const 273549) "a") (data (i32.const 273552) "a") (data (i32.const 273555) "a") (data (i32.const 273558) "a") (data (i32.const 273561) "a") (data (i32.const 273564) "a") (data (i32.const 273567) "a") (data (i32.const 273570) "a") (data (i32.const 273573) "a") (data (i32.const 273576) "a") (data (i32.const 273579) "a") (data (i32.const 273582) "a") (data (i32.const 273585) "a") (data (i32.const 273588) "a") (data (i32.const 273591) "a") (data (i32.const 273594) "a") (data (i32.const 273597) "a") (data (i32.const 273600) "a") (data (i32.const 273603) "a") (data (i32.const 273606) "a") (data (i32.const 273609) "a") (data (i32.const 273612) "a") (data (i32.const 273615) "a") (data (i32.const 273618) "a") (data (i32.const 273621) "a") (data (i32.const 273624) "a") (data (i32.const 273627) "a") (data (i32.const 273630) "a") (data (i32.const 273633) "a") (data (i32.const 273636) "a") (data (i32.const 273639) "a") (data (i32.const 273642) "a") (data (i32.const 273645) "a") (data (i32.const 273648) "a") (data (i32.const 273651) "a") (data (i32.const 273654) "a") (data (i32.const 273657) "a") (data (i32.const 273660) "a") (data (i32.const 273663) "a") (data (i32.const 273666) "a") (data (i32.const 273669) "a") (data (i32.const 273672) "a") (data (i32.const 273675) "a") (data (i32.const 273678) "a") (data (i32.const 273681) "a") (data (i32.const 273684) "a") (data (i32.const 273687) "a") (data (i32.const 273690) "a") (data (i32.const 273693) "a") (data (i32.const 273696) "a") (data (i32.const 273699) "a") (data (i32.const 273702) "a") (data (i32.const 273705) "a") (data (i32.const 273708) "a") (data (i32.const 273711) "a") (data (i32.const 273714) "a") (data (i32.const 273717) "a") (data (i32.const 273720) "a") (data (i32.const 273723) "a") (data (i32.const 273726) "a") (data (i32.const 273729) "a") (data (i32.const 273732) "a") (data (i32.const 273735) "a") (data (i32.const 273738) "a") (data (i32.const 273741) "a") (data (i32.const 273744) "a") (data (i32.const 273747) "a") (data (i32.const 273750) "a") (data (i32.const 273753) "a") (data (i32.const 273756) "a") (data (i32.const 273759) "a") (data (i32.const 273762) "a") (data (i32.const 273765) "a") (data (i32.const 273768) "a") (data (i32.const 273771) "a") (data (i32.const 273774) "a") (data (i32.const 273777) "a") (data (i32.const 273780) "a") (data (i32.const 273783) "a") (data (i32.const 273786) "a") (data (i32.const 273789) "a") (data (i32.const 273792) "a") (data (i32.const 273795) "a") (data (i32.const 273798) "a") (data (i32.const 273801) "a") (data (i32.const 273804) "a") (data (i32.const 273807) "a") (data (i32.const 273810) "a") (data (i32.const 273813) "a") (data (i32.const 273816) "a") (data (i32.const 273819) "a") (data (i32.const 273822) "a") (data (i32.const 273825) "a") (data (i32.const 273828) "a") (data (i32.const 273831) "a") (data (i32.const 273834) "a") (data (i32.const 273837) "a") (data (i32.const 273840) "a") (data (i32.const 273843) "a") (data (i32.const 273846) "a") (data (i32.const 273849) "a") (data (i32.const 273852) "a") (data (i32.const 273855) "a") (data (i32.const 273858) "a") (data (i32.const 273861) "a") (data (i32.const 273864) "a") (data (i32.const 273867) "a") (data (i32.const 273870) "a") (data (i32.const 273873) "a") (data (i32.const 273876) "a") (data (i32.const 273879) "a") (data (i32.const 273882) "a") (data (i32.const 273885) "a") (data (i32.const 273888) "a") (data (i32.const 273891) "a") (data (i32.const 273894) "a") (data (i32.const 273897) "a") (data (i32.const 273900) "a") (data (i32.const 273903) "a") (data (i32.const 273906) "a") (data (i32.const 273909) "a") (data (i32.const 273912) "a") (data (i32.const 273915) "a") (data (i32.const 273918) "a") (data (i32.const 273921) "a") (data (i32.const 273924) "a") (data (i32.const 273927) "a") (data (i32.const 273930) "a") (data (i32.const 273933) "a") (data (i32.const 273936) "a") (data (i32.const 273939) "a") (data (i32.const 273942) "a") (data (i32.const 273945) "a") (data (i32.const 273948) "a") (data (i32.const 273951) "a") (data (i32.const 273954) "a") (data (i32.const 273957) "a") (data (i32.const 273960) "a") (data (i32.const 273963) "a") (data (i32.const 273966) "a") (data (i32.const 273969) "a") (data (i32.const 273972) "a") (data (i32.const 273975) "a") (data (i32.const 273978) "a") (data (i32.const 273981) "a") (data (i32.const 273984) "a") (data (i32.const 273987) "a") (data (i32.const 273990) "a") (data (i32.const 273993) "a") (data (i32.const 273996) "a") (data (i32.const 273999) "a") (data (i32.const 274002) "a") (data (i32.const 274005) "a") (data (i32.const 274008) "a") (data (i32.const 274011) "a") (data (i32.const 274014) "a") (data (i32.const 274017) "a") (data (i32.const 274020) "a") (data (i32.const 274023) "a") (data (i32.const 274026) "a") (data (i32.const 274029) "a") (data (i32.const 274032) "a") (data (i32.const 274035) "a") (data (i32.const 274038) "a") (data (i32.const 274041) "a") (data (i32.const 274044) "a") (data (i32.const 274047) "a") (data (i32.const 274050) "a") (data (i32.const 274053) "a") (data (i32.const 274056) "a") (data (i32.const 274059) "a") (data (i32.const 274062) "a") (data (i32.const 274065) "a") (data (i32.const 274068) "a") (data (i32.const 274071) "a") (data (i32.const 274074) "a") (data (i32.const 274077) "a") (data (i32.const 274080) "a") (data (i32.const 274083) "a") (data (i32.const 274086) "a") (data (i32.const 274089) "a") (data (i32.const 274092) "a") (data (i32.const 274095) "a") (data (i32.const 274098) "a") (data (i32.const 274101) "a") (data (i32.const 274104) "a") (data (i32.const 274107) "a") (data (i32.const 274110) "a") (data (i32.const 274113) "a") (data (i32.const 274116) "a") (data (i32.const 274119) "a") (data (i32.const 274122) "a") (data (i32.const 274125) "a") (data (i32.const 274128) "a") (data (i32.const 274131) "a") (data (i32.const 274134) "a") (data (i32.const 274137) "a") (data (i32.const 274140) "a") (data (i32.const 274143) "a") (data (i32.const 274146) "a") (data (i32.const 274149) "a") (data (i32.const 274152) "a") (data (i32.const 274155) "a") (data (i32.const 274158) "a") (data (i32.const 274161) "a") (data (i32.const 274164) "a") (data (i32.const 274167) "a") (data (i32.const 274170) "a") (data (i32.const 274173) "a") (data (i32.const 274176) "a") (data (i32.const 274179) "a") (data (i32.const 274182) "a") (data (i32.const 274185) "a") (data (i32.const 274188) "a") (data (i32.const 274191) "a") (data (i32.const 274194) "a") (data (i32.const 274197) "a") (data (i32.const 274200) "a") (data (i32.const 274203) "a") (data (i32.const 274206) "a") (data (i32.const 274209) "a") (data (i32.const 274212) "a") (data (i32.const 274215) "a") (data (i32.const 274218) "a") (data (i32.const 274221) "a") (data (i32.const 274224) "a") (data (i32.const 274227) "a") (data (i32.const 274230) "a") (data (i32.const 274233) "a") (data (i32.const 274236) "a") (data (i32.const 274239) "a") (data (i32.const 274242) "a") (data (i32.const 274245) "a") (data (i32.const 274248) "a") (data (i32.const 274251) "a") (data (i32.const 274254) "a") (data (i32.const 274257) "a") (data (i32.const 274260) "a") (data (i32.const 274263) "a") (data (i32.const 274266) "a") (data (i32.const 274269) "a") (data (i32.const 274272) "a") (data (i32.const 274275) "a") (data (i32.const 274278) "a") (data (i32.const 274281) "a") (data (i32.const 274284) "a") (data (i32.const 274287) "a") (data (i32.const 274290) "a") (data (i32.const 274293) "a") (data (i32.const 274296) "a") (data (i32.const 274299) "a") (data (i32.const 274302) "a") (data (i32.const 274305) "a") (data (i32.const 274308) "a") (data (i32.const 274311) "a") (data (i32.const 274314) "a") (data (i32.const 274317) "a") (data (i32.const 274320) "a") (data (i32.const 274323) "a") (data (i32.const 274326) "a") (data (i32.const 274329) "a") (data (i32.const 274332) "a") (data (i32.const 274335) "a") (data (i32.const 274338) "a") (data (i32.const 274341) "a") (data (i32.const 274344) "a") (data (i32.const 274347) "a") (data (i32.const 274350) "a") (data (i32.const 274353) "a") (data (i32.const 274356) "a") (data (i32.const 274359) "a") (data (i32.const 274362) "a") (data (i32.const 274365) "a") (data (i32.const 274368) "a") (data (i32.const 274371) "a") (data (i32.const 274374) "a") (data (i32.const 274377) "a") (data (i32.const 274380) "a") (data (i32.const 274383) "a") (data (i32.const 274386) "a") (data (i32.const 274389) "a") (data (i32.const 274392) "a") (data (i32.const 274395) "a") (data (i32.const 274398) "a") (data (i32.const 274401) "a") (data (i32.const 274404) "a") (data (i32.const 274407) "a") (data (i32.const 274410) "a") (data (i32.const 274413) "a") (data (i32.const 274416) "a") (data (i32.const 274419) "a") (data (i32.const 274422) "a") (data (i32.const 274425) "a") (data (i32.const 274428) "a") (data (i32.const 274431) "a") (data (i32.const 274434) "a") (data (i32.const 274437) "a") (data (i32.const 274440) "a") (data (i32.const 274443) "a") (data (i32.const 274446) "a") (data (i32.const 274449) "a") (data (i32.const 274452) "a") (data (i32.const 274455) "a") (data (i32.const 274458) "a") (data (i32.const 274461) "a") (data (i32.const 274464) "a") (data (i32.const 274467) "a") (data (i32.const 274470) "a") (data (i32.const 274473) "a") (data (i32.const 274476) "a") (data (i32.const 274479) "a") (data (i32.const 274482) "a") (data (i32.const 274485) "a") (data (i32.const 274488) "a") (data (i32.const 274491) "a") (data (i32.const 274494) "a") (data (i32.const 274497) "a") (data (i32.const 274500) "a") (data (i32.const 274503) "a") (data (i32.const 274506) "a") (data (i32.const 274509) "a") (data (i32.const 274512) "a") (data (i32.const 274515) "a") (data (i32.const 274518) "a") (data (i32.const 274521) "a") (data (i32.const 274524) "a") (data (i32.const 274527) "a") (data (i32.const 274530) "a") (data (i32.const 274533) "a") (data (i32.const 274536) "a") (data (i32.const 274539) "a") (data (i32.const 274542) "a") (data (i32.const 274545) "a") (data (i32.const 274548) "a") (data (i32.const 274551) "a") (data (i32.const 274554) "a") (data (i32.const 274557) "a") (data (i32.const 274560) "a") (data (i32.const 274563) "a") (data (i32.const 274566) "a") (data (i32.const 274569) "a") (data (i32.const 274572) "a") (data (i32.const 274575) "a") (data (i32.const 274578) "a") (data (i32.const 274581) "a") (data (i32.const 274584) "a") (data (i32.const 274587) "a") (data (i32.const 274590) "a") (data (i32.const 274593) "a") (data (i32.const 274596) "a") (data (i32.const 274599) "a") (data (i32.const 274602) "a") (data (i32.const 274605) "a") (data (i32.const 274608) "a") (data (i32.const 274611) "a") (data (i32.const 274614) "a") (data (i32.const 274617) "a") (data (i32.const 274620) "a") (data (i32.const 274623) "a") (data (i32.const 274626) "a") (data (i32.const 274629) "a") (data (i32.const 274632) "a") (data (i32.const 274635) "a") (data (i32.const 274638) "a") (data (i32.const 274641) "a") (data (i32.const 274644) "a") (data (i32.const 274647) "a") (data (i32.const 274650) "a") (data (i32.const 274653) "a") (data (i32.const 274656) "a") (data (i32.const 274659) "a") (data (i32.const 274662) "a") (data (i32.const 274665) "a") (data (i32.const 274668) "a") (data (i32.const 274671) "a") (data (i32.const 274674) "a") (data (i32.const 274677) "a") (data (i32.const 274680) "a") (data (i32.const 274683) "a") (data (i32.const 274686) "a") (data (i32.const 274689) "a") (data (i32.const 274692) "a") (data (i32.const 274695) "a") (data (i32.const 274698) "a") (data (i32.const 274701) "a") (data (i32.const 274704) "a") (data (i32.const 274707) "a") (data (i32.const 274710) "a") (data (i32.const 274713) "a") (data (i32.const 274716) "a") (data (i32.const 274719) "a") (data (i32.const 274722) "a") (data (i32.const 274725) "a") (data (i32.const 274728) "a") (data (i32.const 274731) "a") (data (i32.const 274734) "a") (data (i32.const 274737) "a") (data (i32.const 274740) "a") (data (i32.const 274743) "a") (data (i32.const 274746) "a") (data (i32.const 274749) "a") (data (i32.const 274752) "a") (data (i32.const 274755) "a") (data (i32.const 274758) "a") (data (i32.const 274761) "a") (data (i32.const 274764) "a") (data (i32.const 274767) "a") (data (i32.const 274770) "a") (data (i32.const 274773) "a") (data (i32.const 274776) "a") (data (i32.const 274779) "a") (data (i32.const 274782) "a") (data (i32.const 274785) "a") (data (i32.const 274788) "a") (data (i32.const 274791) "a") (data (i32.const 274794) "a") (data (i32.const 274797) "a") (data (i32.const 274800) "a") (data (i32.const 274803) "a") (data (i32.const 274806) "a") (data (i32.const 274809) "a") (data (i32.const 274812) "a") (data (i32.const 274815) "a") (data (i32.const 274818) "a") (data (i32.const 274821) "a") (data (i32.const 274824) "a") (data (i32.const 274827) "a") (data (i32.const 274830) "a") (data (i32.const 274833) "a") (data (i32.const 274836) "a") (data (i32.const 274839) "a") (data (i32.const 274842) "a") (data (i32.const 274845) "a") (data (i32.const 274848) "a") (data (i32.const 274851) "a") (data (i32.const 274854) "a") (data (i32.const 274857) "a") (data (i32.const 274860) "a") (data (i32.const 274863) "a") (data (i32.const 274866) "a") (data (i32.const 274869) "a") (data (i32.const 274872) "a") (data (i32.const 274875) "a") (data (i32.const 274878) "a") (data (i32.const 274881) "a") (data (i32.const 274884) "a") (data (i32.const 274887) "a") (data (i32.const 274890) "a") (data (i32.const 274893) "a") (data (i32.const 274896) "a") (data (i32.const 274899) "a") (data (i32.const 274902) "a") (data (i32.const 274905) "a") (data (i32.const 274908) "a") (data (i32.const 274911) "a") (data (i32.const 274914) "a") (data (i32.const 274917) "a") (data (i32.const 274920) "a") (data (i32.const 274923) "a") (data (i32.const 274926) "a") (data (i32.const 274929) "a") (data (i32.const 274932) "a") (data (i32.const 274935) "a") (data (i32.const 274938) "a") (data (i32.const 274941) "a") (data (i32.const 274944) "a") (data (i32.const 274947) "a") (data (i32.const 274950) "a") (data (i32.const 274953) "a") (data (i32.const 274956) "a") (data (i32.const 274959) "a") (data (i32.const 274962) "a") (data (i32.const 274965) "a") (data (i32.const 274968) "a") (data (i32.const 274971) "a") (data (i32.const 274974) "a") (data (i32.const 274977) "a") (data (i32.const 274980) "a") (data (i32.const 274983) "a") (data (i32.const 274986) "a") (data (i32.const 274989) "a") (data (i32.const 274992) "a") (data (i32.const 274995) "a") (data (i32.const 274998) "a") (data (i32.const 275001) "a") (data (i32.const 275004) "a") (data (i32.const 275007) "a") (data (i32.const 275010) "a") (data (i32.const 275013) "a") (data (i32.const 275016) "a") (data (i32.const 275019) "a") (data (i32.const 275022) "a") (data (i32.const 275025) "a") (data (i32.const 275028) "a") (data (i32.const 275031) "a") (data (i32.const 275034) "a") (data (i32.const 275037) "a") (data (i32.const 275040) "a") (data (i32.const 275043) "a") (data (i32.const 275046) "a") (data (i32.const 275049) "a") (data (i32.const 275052) "a") (data (i32.const 275055) "a") (data (i32.const 275058) "a") (data (i32.const 275061) "a") (data (i32.const 275064) "a") (data (i32.const 275067) "a") (data (i32.const 275070) "a") (data (i32.const 275073) "a") (data (i32.const 275076) "a") (data (i32.const 275079) "a") (data (i32.const 275082) "a") (data (i32.const 275085) "a") (data (i32.const 275088) "a") (data (i32.const 275091) "a") (data (i32.const 275094) "a") (data (i32.const 275097) "a") (data (i32.const 275100) "a") (data (i32.const 275103) "a") (data (i32.const 275106) "a") (data (i32.const 275109) "a") (data (i32.const 275112) "a") (data (i32.const 275115) "a") (data (i32.const 275118) "a") (data (i32.const 275121) "a") (data (i32.const 275124) "a") (data (i32.const 275127) "a") (data (i32.const 275130) "a") (data (i32.const 275133) "a") (data (i32.const 275136) "a") (data (i32.const 275139) "a") (data (i32.const 275142) "a") (data (i32.const 275145) "a") (data (i32.const 275148) "a") (data (i32.const 275151) "a") (data (i32.const 275154) "a") (data (i32.const 275157) "a") (data (i32.const 275160) "a") (data (i32.const 275163) "a") (data (i32.const 275166) "a") (data (i32.const 275169) "a") (data (i32.const 275172) "a") (data (i32.const 275175) "a") (data (i32.const 275178) "a") (data (i32.const 275181) "a") (data (i32.const 275184) "a") (data (i32.const 275187) "a") (data (i32.const 275190) "a") (data (i32.const 275193) "a") (data (i32.const 275196) "a") (data (i32.const 275199) "a") (data (i32.const 275202) "a") (data (i32.const 275205) "a") (data (i32.const 275208) "a") (data (i32.const 275211) "a") (data (i32.const 275214) "a") (data (i32.const 275217) "a") (data (i32.const 275220) "a") (data (i32.const 275223) "a") (data (i32.const 275226) "a") (data (i32.const 275229) "a") (data (i32.const 275232) "a") (data (i32.const 275235) "a") (data (i32.const 275238) "a") (data (i32.const 275241) "a") (data (i32.const 275244) "a") (data (i32.const 275247) "a") (data (i32.const 275250) "a") (data (i32.const 275253) "a") (data (i32.const 275256) "a") (data (i32.const 275259) "a") (data (i32.const 275262) "a") (data (i32.const 275265) "a") (data (i32.const 275268) "a") (data (i32.const 275271) "a") (data (i32.const 275274) "a") (data (i32.const 275277) "a") (data (i32.const 275280) "a") (data (i32.const 275283) "a") (data (i32.const 275286) "a") (data (i32.const 275289) "a") (data (i32.const 275292) "a") (data (i32.const 275295) "a") (data (i32.const 275298) "a") (data (i32.const 275301) "a") (data (i32.const 275304) "a") (data (i32.const 275307) "a") (data (i32.const 275310) "a") (data (i32.const 275313) "a") (data (i32.const 275316) "a") (data (i32.const 275319) "a") (data (i32.const 275322) "a") (data (i32.const 275325) "a") (data (i32.const 275328) "a") (data (i32.const 275331) "a") (data (i32.const 275334) "a") (data (i32.const 275337) "a") (data (i32.const 275340) "a") (data (i32.const 275343) "a") (data (i32.const 275346) "a") (data (i32.const 275349) "a") (data (i32.const 275352) "a") (data (i32.const 275355) "a") (data (i32.const 275358) "a") (data (i32.const 275361) "a") (data (i32.const 275364) "a") (data (i32.const 275367) "a") (data (i32.const 275370) "a") (data (i32.const 275373) "a") (data (i32.const 275376) "a") (data (i32.const 275379) "a") (data (i32.const 275382) "a") (data (i32.const 275385) "a") (data (i32.const 275388) "a") (data (i32.const 275391) "a") (data (i32.const 275394) "a") (data (i32.const 275397) "a") (data (i32.const 275400) "a") (data (i32.const 275403) "a") (data (i32.const 275406) "a") (data (i32.const 275409) "a") (data (i32.const 275412) "a") (data (i32.const 275415) "a") (data (i32.const 275418) "a") (data (i32.const 275421) "a") (data (i32.const 275424) "a") (data (i32.const 275427) "a") (data (i32.const 275430) "a") (data (i32.const 275433) "a") (data (i32.const 275436) "a") (data (i32.const 275439) "a") (data (i32.const 275442) "a") (data (i32.const 275445) "a") (data (i32.const 275448) "a") (data (i32.const 275451) "a") (data (i32.const 275454) "a") (data (i32.const 275457) "a") (data (i32.const 275460) "a") (data (i32.const 275463) "a") (data (i32.const 275466) "a") (data (i32.const 275469) "a") (data (i32.const 275472) "a") (data (i32.const 275475) "a") (data (i32.const 275478) "a") (data (i32.const 275481) "a") (data (i32.const 275484) "a") (data (i32.const 275487) "a") (data (i32.const 275490) "a") (data (i32.const 275493) "a") (data (i32.const 275496) "a") (data (i32.const 275499) "a") (data (i32.const 275502) "a") (data (i32.const 275505) "a") (data (i32.const 275508) "a") (data (i32.const 275511) "a") (data (i32.const 275514) "a") (data (i32.const 275517) "a") (data (i32.const 275520) "a") (data (i32.const 275523) "a") (data (i32.const 275526) "a") (data (i32.const 275529) "a") (data (i32.const 275532) "a") (data (i32.const 275535) "a") (data (i32.const 275538) "a") (data (i32.const 275541) "a") (data (i32.const 275544) "a") (data (i32.const 275547) "a") (data (i32.const 275550) "a") (data (i32.const 275553) "a") (data (i32.const 275556) "a") (data (i32.const 275559) "a") (data (i32.const 275562) "a") (data (i32.const 275565) "a") (data (i32.const 275568) "a") (data (i32.const 275571) "a") (data (i32.const 275574) "a") (data (i32.const 275577) "a") (data (i32.const 275580) "a") (data (i32.const 275583) "a") (data (i32.const 275586) "a") (data (i32.const 275589) "a") (data (i32.const 275592) "a") (data (i32.const 275595) "a") (data (i32.const 275598) "a") (data (i32.const 275601) "a") (data (i32.const 275604) "a") (data (i32.const 275607) "a") (data (i32.const 275610) "a") (data (i32.const 275613) "a") (data (i32.const 275616) "a") (data (i32.const 275619) "a") (data (i32.const 275622) "a") (data (i32.const 275625) "a") (data (i32.const 275628) "a") (data (i32.const 275631) "a") (data (i32.const 275634) "a") (data (i32.const 275637) "a") (data (i32.const 275640) "a") (data (i32.const 275643) "a") (data (i32.const 275646) "a") (data (i32.const 275649) "a") (data (i32.const 275652) "a") (data (i32.const 275655) "a") (data (i32.const 275658) "a") (data (i32.const 275661) "a") (data (i32.const 275664) "a") (data (i32.const 275667) "a") (data (i32.const 275670) "a") (data (i32.const 275673) "a") (data (i32.const 275676) "a") (data (i32.const 275679) "a") (data (i32.const 275682) "a") (data (i32.const 275685) "a") (data (i32.const 275688) "a") (data (i32.const 275691) "a") (data (i32.const 275694) "a") (data (i32.const 275697) "a") (data (i32.const 275700) "a") (data (i32.const 275703) "a") (data (i32.const 275706) "a") (data (i32.const 275709) "a") (data (i32.const 275712) "a") (data (i32.const 275715) "a") (data (i32.const 275718) "a") (data (i32.const 275721) "a") (data (i32.const 275724) "a") (data (i32.const 275727) "a") (data (i32.const 275730) "a") (data (i32.const 275733) "a") (data (i32.const 275736) "a") (data (i32.const 275739) "a") (data (i32.const 275742) "a") (data (i32.const 275745) "a") (data (i32.const 275748) "a") (data (i32.const 275751) "a") (data (i32.const 275754) "a") (data (i32.const 275757) "a") (data (i32.const 275760) "a") (data (i32.const 275763) "a") (data (i32.const 275766) "a") (data (i32.const 275769) "a") (data (i32.const 275772) "a") (data (i32.const 275775) "a") (data (i32.const 275778) "a") (data (i32.const 275781) "a") (data (i32.const 275784) "a") (data (i32.const 275787) "a") (data (i32.const 275790) "a") (data (i32.const 275793) "a") (data (i32.const 275796) "a") (data (i32.const 275799) "a") (data (i32.const 275802) "a") (data (i32.const 275805) "a") (data (i32.const 275808) "a") (data (i32.const 275811) "a") (data (i32.const 275814) "a") (data (i32.const 275817) "a") (data (i32.const 275820) "a") (data (i32.const 275823) "a") (data (i32.const 275826) "a") (data (i32.const 275829) "a") (data (i32.const 275832) "a") (data (i32.const 275835) "a") (data (i32.const 275838) "a") (data (i32.const 275841) "a") (data (i32.const 275844) "a") (data (i32.const 275847) "a") (data (i32.const 275850) "a") (data (i32.const 275853) "a") (data (i32.const 275856) "a") (data (i32.const 275859) "a") (data (i32.const 275862) "a") (data (i32.const 275865) "a") (data (i32.const 275868) "a") (data (i32.const 275871) "a") (data (i32.const 275874) "a") (data (i32.const 275877) "a") (data (i32.const 275880) "a") (data (i32.const 275883) "a") (data (i32.const 275886) "a") (data (i32.const 275889) "a") (data (i32.const 275892) "a") (data (i32.const 275895) "a") (data (i32.const 275898) "a") (data (i32.const 275901) "a") (data (i32.const 275904) "a") (data (i32.const 275907) "a") (data (i32.const 275910) "a") (data (i32.const 275913) "a") (data (i32.const 275916) "a") (data (i32.const 275919) "a") (data (i32.const 275922) "a") (data (i32.const 275925) "a") (data (i32.const 275928) "a") (data (i32.const 275931) "a") (data (i32.const 275934) "a") (data (i32.const 275937) "a") (data (i32.const 275940) "a") (data (i32.const 275943) "a") (data (i32.const 275946) "a") (data (i32.const 275949) "a") (data (i32.const 275952) "a") (data (i32.const 275955) "a") (data (i32.const 275958) "a") (data (i32.const 275961) "a") (data (i32.const 275964) "a") (data (i32.const 275967) "a") (data (i32.const 275970) "a") (data (i32.const 275973) "a") (data (i32.const 275976) "a") (data (i32.const 275979) "a") (data (i32.const 275982) "a") (data (i32.const 275985) "a") (data (i32.const 275988) "a") (data (i32.const 275991) "a") (data (i32.const 275994) "a") (data (i32.const 275997) "a") (data (i32.const 276000) "a") (data (i32.const 276003) "a") (data (i32.const 276006) "a") (data (i32.const 276009) "a") (data (i32.const 276012) "a") (data (i32.const 276015) "a") (data (i32.const 276018) "a") (data (i32.const 276021) "a") (data (i32.const 276024) "a") (data (i32.const 276027) "a") (data (i32.const 276030) "a") (data (i32.const 276033) "a") (data (i32.const 276036) "a") (data (i32.const 276039) "a") (data (i32.const 276042) "a") (data (i32.const 276045) "a") (data (i32.const 276048) "a") (data (i32.const 276051) "a") (data (i32.const 276054) "a") (data (i32.const 276057) "a") (data (i32.const 276060) "a") (data (i32.const 276063) "a") (data (i32.const 276066) "a") (data (i32.const 276069) "a") (data (i32.const 276072) "a") (data (i32.const 276075) "a") (data (i32.const 276078) "a") (data (i32.const 276081) "a") (data (i32.const 276084) "a") (data (i32.const 276087) "a") (data (i32.const 276090) "a") (data (i32.const 276093) "a") (data (i32.const 276096) "a") (data (i32.const 276099) "a") (data (i32.const 276102) "a") (data (i32.const 276105) "a") (data (i32.const 276108) "a") (data (i32.const 276111) "a") (data (i32.const 276114) "a") (data (i32.const 276117) "a") (data (i32.const 276120) "a") (data (i32.const 276123) "a") (data (i32.const 276126) "a") (data (i32.const 276129) "a") (data (i32.const 276132) "a") (data (i32.const 276135) "a") (data (i32.const 276138) "a") (data (i32.const 276141) "a") (data (i32.const 276144) "a") (data (i32.const 276147) "a") (data (i32.const 276150) "a") (data (i32.const 276153) "a") (data (i32.const 276156) "a") (data (i32.const 276159) "a") (data (i32.const 276162) "a") (data (i32.const 276165) "a") (data (i32.const 276168) "a") (data (i32.const 276171) "a") (data (i32.const 276174) "a") (data (i32.const 276177) "a") (data (i32.const 276180) "a") (data (i32.const 276183) "a") (data (i32.const 276186) "a") (data (i32.const 276189) "a") (data (i32.const 276192) "a") (data (i32.const 276195) "a") (data (i32.const 276198) "a") (data (i32.const 276201) "a") (data (i32.const 276204) "a") (data (i32.const 276207) "a") (data (i32.const 276210) "a") (data (i32.const 276213) "a") (data (i32.const 276216) "a") (data (i32.const 276219) "a") (data (i32.const 276222) "a") (data (i32.const 276225) "a") (data (i32.const 276228) "a") (data (i32.const 276231) "a") (data (i32.const 276234) "a") (data (i32.const 276237) "a") (data (i32.const 276240) "a") (data (i32.const 276243) "a") (data (i32.const 276246) "a") (data (i32.const 276249) "a") (data (i32.const 276252) "a") (data (i32.const 276255) "a") (data (i32.const 276258) "a") (data (i32.const 276261) "a") (data (i32.const 276264) "a") (data (i32.const 276267) "a") (data (i32.const 276270) "a") (data (i32.const 276273) "a") (data (i32.const 276276) "a") (data (i32.const 276279) "a") (data (i32.const 276282) "a") (data (i32.const 276285) "a") (data (i32.const 276288) "a") (data (i32.const 276291) "a") (data (i32.const 276294) "a") (data (i32.const 276297) "a") (data (i32.const 276300) "a") (data (i32.const 276303) "a") (data (i32.const 276306) "a") (data (i32.const 276309) "a") (data (i32.const 276312) "a") (data (i32.const 276315) "a") (data (i32.const 276318) "a") (data (i32.const 276321) "a") (data (i32.const 276324) "a") (data (i32.const 276327) "a") (data (i32.const 276330) "a") (data (i32.const 276333) "a") (data (i32.const 276336) "a") (data (i32.const 276339) "a") (data (i32.const 276342) "a") (data (i32.const 276345) "a") (data (i32.const 276348) "a") (data (i32.const 276351) "a") (data (i32.const 276354) "a") (data (i32.const 276357) "a") (data (i32.const 276360) "a") (data (i32.const 276363) "a") (data (i32.const 276366) "a") (data (i32.const 276369) "a") (data (i32.const 276372) "a") (data (i32.const 276375) "a") (data (i32.const 276378) "a") (data (i32.const 276381) "a") (data (i32.const 276384) "a") (data (i32.const 276387) "a") (data (i32.const 276390) "a") (data (i32.const 276393) "a") (data (i32.const 276396) "a") (data (i32.const 276399) "a") (data (i32.const 276402) "a") (data (i32.const 276405) "a") (data (i32.const 276408) "a") (data (i32.const 276411) "a") (data (i32.const 276414) "a") (data (i32.const 276417) "a") (data (i32.const 276420) "a") (data (i32.const 276423) "a") (data (i32.const 276426) "a") (data (i32.const 276429) "a") (data (i32.const 276432) "a") (data (i32.const 276435) "a") (data (i32.const 276438) "a") (data (i32.const 276441) "a") (data (i32.const 276444) "a") (data (i32.const 276447) "a") (data (i32.const 276450) "a") (data (i32.const 276453) "a") (data (i32.const 276456) "a") (data (i32.const 276459) "a") (data (i32.const 276462) "a") (data (i32.const 276465) "a") (data (i32.const 276468) "a") (data (i32.const 276471) "a") (data (i32.const 276474) "a") (data (i32.const 276477) "a") (data (i32.const 276480) "a") (data (i32.const 276483) "a") (data (i32.const 276486) "a") (data (i32.const 276489) "a") (data (i32.const 276492) "a") (data (i32.const 276495) "a") (data (i32.const 276498) "a") (data (i32.const 276501) "a") (data (i32.const 276504) "a") (data (i32.const 276507) "a") (data (i32.const 276510) "a") (data (i32.const 276513) "a") (data (i32.const 276516) "a") (data (i32.const 276519) "a") (data (i32.const 276522) "a") (data (i32.const 276525) "a") (data (i32.const 276528) "a") (data (i32.const 276531) "a") (data (i32.const 276534) "a") (data (i32.const 276537) "a") (data (i32.const 276540) "a") (data (i32.const 276543) "a") (data (i32.const 276546) "a") (data (i32.const 276549) "a") (data (i32.const 276552) "a") (data (i32.const 276555) "a") (data (i32.const 276558) "a") (data (i32.const 276561) "a") (data (i32.const 276564) "a") (data (i32.const 276567) "a") (data (i32.const 276570) "a") (data (i32.const 276573) "a") (data (i32.const 276576) "a") (data (i32.const 276579) "a") (data (i32.const 276582) "a") (data (i32.const 276585) "a") (data (i32.const 276588) "a") (data (i32.const 276591) "a") (data (i32.const 276594) "a") (data (i32.const 276597) "a") (data (i32.const 276600) "a") (data (i32.const 276603) "a") (data (i32.const 276606) "a") (data (i32.const 276609) "a") (data (i32.const 276612) "a") (data (i32.const 276615) "a") (data (i32.const 276618) "a") (data (i32.const 276621) "a") (data (i32.const 276624) "a") (data (i32.const 276627) "a") (data (i32.const 276630) "a") (data (i32.const 276633) "a") (data (i32.const 276636) "a") (data (i32.const 276639) "a") (data (i32.const 276642) "a") (data (i32.const 276645) "a") (data (i32.const 276648) "a") (data (i32.const 276651) "a") (data (i32.const 276654) "a") (data (i32.const 276657) "a") (data (i32.const 276660) "a") (data (i32.const 276663) "a") (data (i32.const 276666) "a") (data (i32.const 276669) "a") (data (i32.const 276672) "a") (data (i32.const 276675) "a") (data (i32.const 276678) "a") (data (i32.const 276681) "a") (data (i32.const 276684) "a") (data (i32.const 276687) "a") (data (i32.const 276690) "a") (data (i32.const 276693) "a") (data (i32.const 276696) "a") (data (i32.const 276699) "a") (data (i32.const 276702) "a") (data (i32.const 276705) "a") (data (i32.const 276708) "a") (data (i32.const 276711) "a") (data (i32.const 276714) "a") (data (i32.const 276717) "a") (data (i32.const 276720) "a") (data (i32.const 276723) "a") (data (i32.const 276726) "a") (data (i32.const 276729) "a") (data (i32.const 276732) "a") (data (i32.const 276735) "a") (data (i32.const 276738) "a") (data (i32.const 276741) "a") (data (i32.const 276744) "a") (data (i32.const 276747) "a") (data (i32.const 276750) "a") (data (i32.const 276753) "a") (data (i32.const 276756) "a") (data (i32.const 276759) "a") (data (i32.const 276762) "a") (data (i32.const 276765) "a") (data (i32.const 276768) "a") (data (i32.const 276771) "a") (data (i32.const 276774) "a") (data (i32.const 276777) "a") (data (i32.const 276780) "a") (data (i32.const 276783) "a") (data (i32.const 276786) "a") (data (i32.const 276789) "a") (data (i32.const 276792) "a") (data (i32.const 276795) "a") (data (i32.const 276798) "a") (data (i32.const 276801) "a") (data (i32.const 276804) "a") (data (i32.const 276807) "a") (data (i32.const 276810) "a") (data (i32.const 276813) "a") (data (i32.const 276816) "a") (data (i32.const 276819) "a") (data (i32.const 276822) "a") (data (i32.const 276825) "a") (data (i32.const 276828) "a") (data (i32.const 276831) "a") (data (i32.const 276834) "a") (data (i32.const 276837) "a") (data (i32.const 276840) "a") (data (i32.const 276843) "a") (data (i32.const 276846) "a") (data (i32.const 276849) "a") (data (i32.const 276852) "a") (data (i32.const 276855) "a") (data (i32.const 276858) "a") (data (i32.const 276861) "a") (data (i32.const 276864) "a") (data (i32.const 276867) "a") (data (i32.const 276870) "a") (data (i32.const 276873) "a") (data (i32.const 276876) "a") (data (i32.const 276879) "a") (data (i32.const 276882) "a") (data (i32.const 276885) "a") (data (i32.const 276888) "a") (data (i32.const 276891) "a") (data (i32.const 276894) "a") (data (i32.const 276897) "a") (data (i32.const 276900) "a") (data (i32.const 276903) "a") (data (i32.const 276906) "a") (data (i32.const 276909) "a") (data (i32.const 276912) "a") (data (i32.const 276915) "a") (data (i32.const 276918) "a") (data (i32.const 276921) "a") (data (i32.const 276924) "a") (data (i32.const 276927) "a") (data (i32.const 276930) "a") (data (i32.const 276933) "a") (data (i32.const 276936) "a") (data (i32.const 276939) "a") (data (i32.const 276942) "a") (data (i32.const 276945) "a") (data (i32.const 276948) "a") (data (i32.const 276951) "a") (data (i32.const 276954) "a") (data (i32.const 276957) "a") (data (i32.const 276960) "a") (data (i32.const 276963) "a") (data (i32.const 276966) "a") (data (i32.const 276969) "a") (data (i32.const 276972) "a") (data (i32.const 276975) "a") (data (i32.const 276978) "a") (data (i32.const 276981) "a") (data (i32.const 276984) "a") (data (i32.const 276987) "a") (data (i32.const 276990) "a") (data (i32.const 276993) "a") (data (i32.const 276996) "a") (data (i32.const 276999) "a") (data (i32.const 277002) "a") (data (i32.const 277005) "a") (data (i32.const 277008) "a") (data (i32.const 277011) "a") (data (i32.const 277014) "a") (data (i32.const 277017) "a") (data (i32.const 277020) "a") (data (i32.const 277023) "a") (data (i32.const 277026) "a") (data (i32.const 277029) "a") (data (i32.const 277032) "a") (data (i32.const 277035) "a") (data (i32.const 277038) "a") (data (i32.const 277041) "a") (data (i32.const 277044) "a") (data (i32.const 277047) "a") (data (i32.const 277050) "a") (data (i32.const 277053) "a") (data (i32.const 277056) "a") (data (i32.const 277059) "a") (data (i32.const 277062) "a") (data (i32.const 277065) "a") (data (i32.const 277068) "a") (data (i32.const 277071) "a") (data (i32.const 277074) "a") (data (i32.const 277077) "a") (data (i32.const 277080) "a") (data (i32.const 277083) "a") (data (i32.const 277086) "a") (data (i32.const 277089) "a") (data (i32.const 277092) "a") (data (i32.const 277095) "a") (data (i32.const 277098) "a") (data (i32.const 277101) "a") (data (i32.const 277104) "a") (data (i32.const 277107) "a") (data (i32.const 277110) "a") (data (i32.const 277113) "a") (data (i32.const 277116) "a") (data (i32.const 277119) "a") (data (i32.const 277122) "a") (data (i32.const 277125) "a") (data (i32.const 277128) "a") (data (i32.const 277131) "a") (data (i32.const 277134) "a") (data (i32.const 277137) "a") (data (i32.const 277140) "a") (data (i32.const 277143) "a") (data (i32.const 277146) "a") (data (i32.const 277149) "a") (data (i32.const 277152) "a") (data (i32.const 277155) "a") (data (i32.const 277158) "a") (data (i32.const 277161) "a") (data (i32.const 277164) "a") (data (i32.const 277167) "a") (data (i32.const 277170) "a") (data (i32.const 277173) "a") (data (i32.const 277176) "a") (data (i32.const 277179) "a") (data (i32.const 277182) "a") (data (i32.const 277185) "a") (data (i32.const 277188) "a") (data (i32.const 277191) "a") (data (i32.const 277194) "a") (data (i32.const 277197) "a") (data (i32.const 277200) "a") (data (i32.const 277203) "a") (data (i32.const 277206) "a") (data (i32.const 277209) "a") (data (i32.const 277212) "a") (data (i32.const 277215) "a") (data (i32.const 277218) "a") (data (i32.const 277221) "a") (data (i32.const 277224) "a") (data (i32.const 277227) "a") (data (i32.const 277230) "a") (data (i32.const 277233) "a") (data (i32.const 277236) "a") (data (i32.const 277239) "a") (data (i32.const 277242) "a") (data (i32.const 277245) "a") (data (i32.const 277248) "a") (data (i32.const 277251) "a") (data (i32.const 277254) "a") (data (i32.const 277257) "a") (data (i32.const 277260) "a") (data (i32.const 277263) "a") (data (i32.const 277266) "a") (data (i32.const 277269) "a") (data (i32.const 277272) "a") (data (i32.const 277275) "a") (data (i32.const 277278) "a") (data (i32.const 277281) "a") (data (i32.const 277284) "a") (data (i32.const 277287) "a") (data (i32.const 277290) "a") (data (i32.const 277293) "a") (data (i32.const 277296) "a") (data (i32.const 277299) "a") (data (i32.const 277302) "a") (data (i32.const 277305) "a") (data (i32.const 277308) "a") (data (i32.const 277311) "a") (data (i32.const 277314) "a") (data (i32.const 277317) "a") (data (i32.const 277320) "a") (data (i32.const 277323) "a") (data (i32.const 277326) "a") (data (i32.const 277329) "a") (data (i32.const 277332) "a") (data (i32.const 277335) "a") (data (i32.const 277338) "a") (data (i32.const 277341) "a") (data (i32.const 277344) "a") (data (i32.const 277347) "a") (data (i32.const 277350) "a") (data (i32.const 277353) "a") (data (i32.const 277356) "a") (data (i32.const 277359) "a") (data (i32.const 277362) "a") (data (i32.const 277365) "a") (data (i32.const 277368) "a") (data (i32.const 277371) "a") (data (i32.const 277374) "a") (data (i32.const 277377) "a") (data (i32.const 277380) "a") (data (i32.const 277383) "a") (data (i32.const 277386) "a") (data (i32.const 277389) "a") (data (i32.const 277392) "a") (data (i32.const 277395) "a") (data (i32.const 277398) "a") (data (i32.const 277401) "a") (data (i32.const 277404) "a") (data (i32.const 277407) "a") (data (i32.const 277410) "a") (data (i32.const 277413) "a") (data (i32.const 277416) "a") (data (i32.const 277419) "a") (data (i32.const 277422) "a") (data (i32.const 277425) "a") (data (i32.const 277428) "a") (data (i32.const 277431) "a") (data (i32.const 277434) "a") (data (i32.const 277437) "a") (data (i32.const 277440) "a") (data (i32.const 277443) "a") (data (i32.const 277446) "a") (data (i32.const 277449) "a") (data (i32.const 277452) "a") (data (i32.const 277455) "a") (data (i32.const 277458) "a") (data (i32.const 277461) "a") (data (i32.const 277464) "a") (data (i32.const 277467) "a") (data (i32.const 277470) "a") (data (i32.const 277473) "a") (data (i32.const 277476) "a") (data (i32.const 277479) "a") (data (i32.const 277482) "a") (data (i32.const 277485) "a") (data (i32.const 277488) "a") (data (i32.const 277491) "a") (data (i32.const 277494) "a") (data (i32.const 277497) "a") (data (i32.const 277500) "a") (data (i32.const 277503) "a") (data (i32.const 277506) "a") (data (i32.const 277509) "a") (data (i32.const 277512) "a") (data (i32.const 277515) "a") (data (i32.const 277518) "a") (data (i32.const 277521) "a") (data (i32.const 277524) "a") (data (i32.const 277527) "a") (data (i32.const 277530) "a") (data (i32.const 277533) "a") (data (i32.const 277536) "a") (data (i32.const 277539) "a") (data (i32.const 277542) "a") (data (i32.const 277545) "a") (data (i32.const 277548) "a") (data (i32.const 277551) "a") (data (i32.const 277554) "a") (data (i32.const 277557) "a") (data (i32.const 277560) "a") (data (i32.const 277563) "a") (data (i32.const 277566) "a") (data (i32.const 277569) "a") (data (i32.const 277572) "a") (data (i32.const 277575) "a") (data (i32.const 277578) "a") (data (i32.const 277581) "a") (data (i32.const 277584) "a") (data (i32.const 277587) "a") (data (i32.const 277590) "a") (data (i32.const 277593) "a") (data (i32.const 277596) "a") (data (i32.const 277599) "a") (data (i32.const 277602) "a") (data (i32.const 277605) "a") (data (i32.const 277608) "a") (data (i32.const 277611) "a") (data (i32.const 277614) "a") (data (i32.const 277617) "a") (data (i32.const 277620) "a") (data (i32.const 277623) "a") (data (i32.const 277626) "a") (data (i32.const 277629) "a") (data (i32.const 277632) "a") (data (i32.const 277635) "a") (data (i32.const 277638) "a") (data (i32.const 277641) "a") (data (i32.const 277644) "a") (data (i32.const 277647) "a") (data (i32.const 277650) "a") (data (i32.const 277653) "a") (data (i32.const 277656) "a") (data (i32.const 277659) "a") (data (i32.const 277662) "a") (data (i32.const 277665) "a") (data (i32.const 277668) "a") (data (i32.const 277671) "a") (data (i32.const 277674) "a") (data (i32.const 277677) "a") (data (i32.const 277680) "a") (data (i32.const 277683) "a") (data (i32.const 277686) "a") (data (i32.const 277689) "a") (data (i32.const 277692) "a") (data (i32.const 277695) "a") (data (i32.const 277698) "a") (data (i32.const 277701) "a") (data (i32.const 277704) "a") (data (i32.const 277707) "a") (data (i32.const 277710) "a") (data (i32.const 277713) "a") (data (i32.const 277716) "a") (data (i32.const 277719) "a") (data (i32.const 277722) "a") (data (i32.const 277725) "a") (data (i32.const 277728) "a") (data (i32.const 277731) "a") (data (i32.const 277734) "a") (data (i32.const 277737) "a") (data (i32.const 277740) "a") (data (i32.const 277743) "a") (data (i32.const 277746) "a") (data (i32.const 277749) "a") (data (i32.const 277752) "a") (data (i32.const 277755) "a") (data (i32.const 277758) "a") (data (i32.const 277761) "a") (data (i32.const 277764) "a") (data (i32.const 277767) "a") (data (i32.const 277770) "a") (data (i32.const 277773) "a") (data (i32.const 277776) "a") (data (i32.const 277779) "a") (data (i32.const 277782) "a") (data (i32.const 277785) "a") (data (i32.const 277788) "a") (data (i32.const 277791) "a") (data (i32.const 277794) "a") (data (i32.const 277797) "a") (data (i32.const 277800) "a") (data (i32.const 277803) "a") (data (i32.const 277806) "a") (data (i32.const 277809) "a") (data (i32.const 277812) "a") (data (i32.const 277815) "a") (data (i32.const 277818) "a") (data (i32.const 277821) "a") (data (i32.const 277824) "a") (data (i32.const 277827) "a") (data (i32.const 277830) "a") (data (i32.const 277833) "a") (data (i32.const 277836) "a") (data (i32.const 277839) "a") (data (i32.const 277842) "a") (data (i32.const 277845) "a") (data (i32.const 277848) "a") (data (i32.const 277851) "a") (data (i32.const 277854) "a") (data (i32.const 277857) "a") (data (i32.const 277860) "a") (data (i32.const 277863) "a") (data (i32.const 277866) "a") (data (i32.const 277869) "a") (data (i32.const 277872) "a") (data (i32.const 277875) "a") (data (i32.const 277878) "a") (data (i32.const 277881) "a") (data (i32.const 277884) "a") (data (i32.const 277887) "a") (data (i32.const 277890) "a") (data (i32.const 277893) "a") (data (i32.const 277896) "a") (data (i32.const 277899) "a") (data (i32.const 277902) "a") (data (i32.const 277905) "a") (data (i32.const 277908) "a") (data (i32.const 277911) "a") (data (i32.const 277914) "a") (data (i32.const 277917) "a") (data (i32.const 277920) "a") (data (i32.const 277923) "a") (data (i32.const 277926) "a") (data (i32.const 277929) "a") (data (i32.const 277932) "a") (data (i32.const 277935) "a") (data (i32.const 277938) "a") (data (i32.const 277941) "a") (data (i32.const 277944) "a") (data (i32.const 277947) "a") (data (i32.const 277950) "a") (data (i32.const 277953) "a") (data (i32.const 277956) "a") (data (i32.const 277959) "a") (data (i32.const 277962) "a") (data (i32.const 277965) "a") (data (i32.const 277968) "a") (data (i32.const 277971) "a") (data (i32.const 277974) "a") (data (i32.const 277977) "a") (data (i32.const 277980) "a") (data (i32.const 277983) "a") (data (i32.const 277986) "a") (data (i32.const 277989) "a") (data (i32.const 277992) "a") (data (i32.const 277995) "a") (data (i32.const 277998) "a") (data (i32.const 278001) "a") (data (i32.const 278004) "a") (data (i32.const 278007) "a") (data (i32.const 278010) "a") (data (i32.const 278013) "a") (data (i32.const 278016) "a") (data (i32.const 278019) "a") (data (i32.const 278022) "a") (data (i32.const 278025) "a") (data (i32.const 278028) "a") (data (i32.const 278031) "a") (data (i32.const 278034) "a") (data (i32.const 278037) "a") (data (i32.const 278040) "a") (data (i32.const 278043) "a") (data (i32.const 278046) "a") (data (i32.const 278049) "a") (data (i32.const 278052) "a") (data (i32.const 278055) "a") (data (i32.const 278058) "a") (data (i32.const 278061) "a") (data (i32.const 278064) "a") (data (i32.const 278067) "a") (data (i32.const 278070) "a") (data (i32.const 278073) "a") (data (i32.const 278076) "a") (data (i32.const 278079) "a") (data (i32.const 278082) "a") (data (i32.const 278085) "a") (data (i32.const 278088) "a") (data (i32.const 278091) "a") (data (i32.const 278094) "a") (data (i32.const 278097) "a") (data (i32.const 278100) "a") (data (i32.const 278103) "a") (data (i32.const 278106) "a") (data (i32.const 278109) "a") (data (i32.const 278112) "a") (data (i32.const 278115) "a") (data (i32.const 278118) "a") (data (i32.const 278121) "a") (data (i32.const 278124) "a") (data (i32.const 278127) "a") (data (i32.const 278130) "a") (data (i32.const 278133) "a") (data (i32.const 278136) "a") (data (i32.const 278139) "a") (data (i32.const 278142) "a") (data (i32.const 278145) "a") (data (i32.const 278148) "a") (data (i32.const 278151) "a") (data (i32.const 278154) "a") (data (i32.const 278157) "a") (data (i32.const 278160) "a") (data (i32.const 278163) "a") (data (i32.const 278166) "a") (data (i32.const 278169) "a") (data (i32.const 278172) "a") (data (i32.const 278175) "a") (data (i32.const 278178) "a") (data (i32.const 278181) "a") (data (i32.const 278184) "a") (data (i32.const 278187) "a") (data (i32.const 278190) "a") (data (i32.const 278193) "a") (data (i32.const 278196) "a") (data (i32.const 278199) "a") (data (i32.const 278202) "a") (data (i32.const 278205) "a") (data (i32.const 278208) "a") (data (i32.const 278211) "a") (data (i32.const 278214) "a") (data (i32.const 278217) "a") (data (i32.const 278220) "a") (data (i32.const 278223) "a") (data (i32.const 278226) "a") (data (i32.const 278229) "a") (data (i32.const 278232) "a") (data (i32.const 278235) "a") (data (i32.const 278238) "a") (data (i32.const 278241) "a") (data (i32.const 278244) "a") (data (i32.const 278247) "a") (data (i32.const 278250) "a") (data (i32.const 278253) "a") (data (i32.const 278256) "a") (data (i32.const 278259) "a") (data (i32.const 278262) "a") (data (i32.const 278265) "a") (data (i32.const 278268) "a") (data (i32.const 278271) "a") (data (i32.const 278274) "a") (data (i32.const 278277) "a") (data (i32.const 278280) "a") (data (i32.const 278283) "a") (data (i32.const 278286) "a") (data (i32.const 278289) "a") (data (i32.const 278292) "a") (data (i32.const 278295) "a") (data (i32.const 278298) "a") (data (i32.const 278301) "a") (data (i32.const 278304) "a") (data (i32.const 278307) "a") (data (i32.const 278310) "a") (data (i32.const 278313) "a") (data (i32.const 278316) "a") (data (i32.const 278319) "a") (data (i32.const 278322) "a") (data (i32.const 278325) "a") (data (i32.const 278328) "a") (data (i32.const 278331) "a") (data (i32.const 278334) "a") (data (i32.const 278337) "a") (data (i32.const 278340) "a") (data (i32.const 278343) "a") (data (i32.const 278346) "a") (data (i32.const 278349) "a") (data (i32.const 278352) "a") (data (i32.const 278355) "a") (data (i32.const 278358) "a") (data (i32.const 278361) "a") (data (i32.const 278364) "a") (data (i32.const 278367) "a") (data (i32.const 278370) "a") (data (i32.const 278373) "a") (data (i32.const 278376) "a") (data (i32.const 278379) "a") (data (i32.const 278382) "a") (data (i32.const 278385) "a") (data (i32.const 278388) "a") (data (i32.const 278391) "a") (data (i32.const 278394) "a") (data (i32.const 278397) "a") (data (i32.const 278400) "a") (data (i32.const 278403) "a") (data (i32.const 278406) "a") (data (i32.const 278409) "a") (data (i32.const 278412) "a") (data (i32.const 278415) "a") (data (i32.const 278418) "a") (data (i32.const 278421) "a") (data (i32.const 278424) "a") (data (i32.const 278427) "a") (data (i32.const 278430) "a") (data (i32.const 278433) "a") (data (i32.const 278436) "a") (data (i32.const 278439) "a") (data (i32.const 278442) "a") (data (i32.const 278445) "a") (data (i32.const 278448) "a") (data (i32.const 278451) "a") (data (i32.const 278454) "a") (data (i32.const 278457) "a") (data (i32.const 278460) "a") (data (i32.const 278463) "a") (data (i32.const 278466) "a") (data (i32.const 278469) "a") (data (i32.const 278472) "a") (data (i32.const 278475) "a") (data (i32.const 278478) "a") (data (i32.const 278481) "a") (data (i32.const 278484) "a") (data (i32.const 278487) "a") (data (i32.const 278490) "a") (data (i32.const 278493) "a") (data (i32.const 278496) "a") (data (i32.const 278499) "a") (data (i32.const 278502) "a") (data (i32.const 278505) "a") (data (i32.const 278508) "a") (data (i32.const 278511) "a") (data (i32.const 278514) "a") (data (i32.const 278517) "a") (data (i32.const 278520) "a") (data (i32.const 278523) "a") (data (i32.const 278526) "a") (data (i32.const 278529) "a") (data (i32.const 278532) "a") (data (i32.const 278535) "a") (data (i32.const 278538) "a") (data (i32.const 278541) "a") (data (i32.const 278544) "a") (data (i32.const 278547) "a") (data (i32.const 278550) "a") (data (i32.const 278553) "a") (data (i32.const 278556) "a") (data (i32.const 278559) "a") (data (i32.const 278562) "a") (data (i32.const 278565) "a") (data (i32.const 278568) "a") (data (i32.const 278571) "a") (data (i32.const 278574) "a") (data (i32.const 278577) "a") (data (i32.const 278580) "a") (data (i32.const 278583) "a") (data (i32.const 278586) "a") (data (i32.const 278589) "a") (data (i32.const 278592) "a") (data (i32.const 278595) "a") (data (i32.const 278598) "a") (data (i32.const 278601) "a") (data (i32.const 278604) "a") (data (i32.const 278607) "a") (data (i32.const 278610) "a") (data (i32.const 278613) "a") (data (i32.const 278616) "a") (data (i32.const 278619) "a") (data (i32.const 278622) "a") (data (i32.const 278625) "a") (data (i32.const 278628) "a") (data (i32.const 278631) "a") (data (i32.const 278634) "a") (data (i32.const 278637) "a") (data (i32.const 278640) "a") (data (i32.const 278643) "a") (data (i32.const 278646) "a") (data (i32.const 278649) "a") (data (i32.const 278652) "a") (data (i32.const 278655) "a") (data (i32.const 278658) "a") (data (i32.const 278661) "a") (data (i32.const 278664) "a") (data (i32.const 278667) "a") (data (i32.const 278670) "a") (data (i32.const 278673) "a") (data (i32.const 278676) "a") (data (i32.const 278679) "a") (data (i32.const 278682) "a") (data (i32.const 278685) "a") (data (i32.const 278688) "a") (data (i32.const 278691) "a") (data (i32.const 278694) "a") (data (i32.const 278697) "a") (data (i32.const 278700) "a") (data (i32.const 278703) "a") (data (i32.const 278706) "a") (data (i32.const 278709) "a") (data (i32.const 278712) "a") (data (i32.const 278715) "a") (data (i32.const 278718) "a") (data (i32.const 278721) "a") (data (i32.const 278724) "a") (data (i32.const 278727) "a") (data (i32.const 278730) "a") (data (i32.const 278733) "a") (data (i32.const 278736) "a") (data (i32.const 278739) "a") (data (i32.const 278742) "a") (data (i32.const 278745) "a") (data (i32.const 278748) "a") (data (i32.const 278751) "a") (data (i32.const 278754) "a") (data (i32.const 278757) "a") (data (i32.const 278760) "a") (data (i32.const 278763) "a") (data (i32.const 278766) "a") (data (i32.const 278769) "a") (data (i32.const 278772) "a") (data (i32.const 278775) "a") (data (i32.const 278778) "a") (data (i32.const 278781) "a") (data (i32.const 278784) "a") (data (i32.const 278787) "a") (data (i32.const 278790) "a") (data (i32.const 278793) "a") (data (i32.const 278796) "a") (data (i32.const 278799) "a") (data (i32.const 278802) "a") (data (i32.const 278805) "a") (data (i32.const 278808) "a") (data (i32.const 278811) "a") (data (i32.const 278814) "a") (data (i32.const 278817) "a") (data (i32.const 278820) "a") (data (i32.const 278823) "a") (data (i32.const 278826) "a") (data (i32.const 278829) "a") (data (i32.const 278832) "a") (data (i32.const 278835) "a") (data (i32.const 278838) "a") (data (i32.const 278841) "a") (data (i32.const 278844) "a") (data (i32.const 278847) "a") (data (i32.const 278850) "a") (data (i32.const 278853) "a") (data (i32.const 278856) "a") (data (i32.const 278859) "a") (data (i32.const 278862) "a") (data (i32.const 278865) "a") (data (i32.const 278868) "a") (data (i32.const 278871) "a") (data (i32.const 278874) "a") (data (i32.const 278877) "a") (data (i32.const 278880) "a") (data (i32.const 278883) "a") (data (i32.const 278886) "a") (data (i32.const 278889) "a") (data (i32.const 278892) "a") (data (i32.const 278895) "a") (data (i32.const 278898) "a") (data (i32.const 278901) "a") (data (i32.const 278904) "a") (data (i32.const 278907) "a") (data (i32.const 278910) "a") (data (i32.const 278913) "a") (data (i32.const 278916) "a") (data (i32.const 278919) "a") (data (i32.const 278922) "a") (data (i32.const 278925) "a") (data (i32.const 278928) "a") (data (i32.const 278931) "a") (data (i32.const 278934) "a") (data (i32.const 278937) "a") (data (i32.const 278940) "a") (data (i32.const 278943) "a") (data (i32.const 278946) "a") (data (i32.const 278949) "a") (data (i32.const 278952) "a") (data (i32.const 278955) "a") (data (i32.const 278958) "a") (data (i32.const 278961) "a") (data (i32.const 278964) "a") (data (i32.const 278967) "a") (data (i32.const 278970) "a") (data (i32.const 278973) "a") (data (i32.const 278976) "a") (data (i32.const 278979) "a") (data (i32.const 278982) "a") (data (i32.const 278985) "a") (data (i32.const 278988) "a") (data (i32.const 278991) "a") (data (i32.const 278994) "a") (data (i32.const 278997) "a") (data (i32.const 279000) "a") (data (i32.const 279003) "a") (data (i32.const 279006) "a") (data (i32.const 279009) "a") (data (i32.const 279012) "a") (data (i32.const 279015) "a") (data (i32.const 279018) "a") (data (i32.const 279021) "a") (data (i32.const 279024) "a") (data (i32.const 279027) "a") (data (i32.const 279030) "a") (data (i32.const 279033) "a") (data (i32.const 279036) "a") (data (i32.const 279039) "a") (data (i32.const 279042) "a") (data (i32.const 279045) "a") (data (i32.const 279048) "a") (data (i32.const 279051) "a") (data (i32.const 279054) "a") (data (i32.const 279057) "a") (data (i32.const 279060) "a") (data (i32.const 279063) "a") (data (i32.const 279066) "a") (data (i32.const 279069) "a") (data (i32.const 279072) "a") (data (i32.const 279075) "a") (data (i32.const 279078) "a") (data (i32.const 279081) "a") (data (i32.const 279084) "a") (data (i32.const 279087) "a") (data (i32.const 279090) "a") (data (i32.const 279093) "a") (data (i32.const 279096) "a") (data (i32.const 279099) "a") (data (i32.const 279102) "a") (data (i32.const 279105) "a") (data (i32.const 279108) "a") (data (i32.const 279111) "a") (data (i32.const 279114) "a") (data (i32.const 279117) "a") (data (i32.const 279120) "a") (data (i32.const 279123) "a") (data (i32.const 279126) "a") (data (i32.const 279129) "a") (data (i32.const 279132) "a") (data (i32.const 279135) "a") (data (i32.const 279138) "a") (data (i32.const 279141) "a") (data (i32.const 279144) "a") (data (i32.const 279147) "a") (data (i32.const 279150) "a") (data (i32.const 279153) "a") (data (i32.const 279156) "a") (data (i32.const 279159) "a") (data (i32.const 279162) "a") (data (i32.const 279165) "a") (data (i32.const 279168) "a") (data (i32.const 279171) "a") (data (i32.const 279174) "a") (data (i32.const 279177) "a") (data (i32.const 279180) "a") (data (i32.const 279183) "a") (data (i32.const 279186) "a") (data (i32.const 279189) "a") (data (i32.const 279192) "a") (data (i32.const 279195) "a") (data (i32.const 279198) "a") (data (i32.const 279201) "a") (data (i32.const 279204) "a") (data (i32.const 279207) "a") (data (i32.const 279210) "a") (data (i32.const 279213) "a") (data (i32.const 279216) "a") (data (i32.const 279219) "a") (data (i32.const 279222) "a") (data (i32.const 279225) "a") (data (i32.const 279228) "a") (data (i32.const 279231) "a") (data (i32.const 279234) "a") (data (i32.const 279237) "a") (data (i32.const 279240) "a") (data (i32.const 279243) "a") (data (i32.const 279246) "a") (data (i32.const 279249) "a") (data (i32.const 279252) "a") (data (i32.const 279255) "a") (data (i32.const 279258) "a") (data (i32.const 279261) "a") (data (i32.const 279264) "a") (data (i32.const 279267) "a") (data (i32.const 279270) "a") (data (i32.const 279273) "a") (data (i32.const 279276) "a") (data (i32.const 279279) "a") (data (i32.const 279282) "a") (data (i32.const 279285) "a") (data (i32.const 279288) "a") (data (i32.const 279291) "a") (data (i32.const 279294) "a") (data (i32.const 279297) "a") (data (i32.const 279300) "a") (data (i32.const 279303) "a") (data (i32.const 279306) "a") (data (i32.const 279309) "a") (data (i32.const 279312) "a") (data (i32.const 279315) "a") (data (i32.const 279318) "a") (data (i32.const 279321) "a") (data (i32.const 279324) "a") (data (i32.const 279327) "a") (data (i32.const 279330) "a") (data (i32.const 279333) "a") (data (i32.const 279336) "a") (data (i32.const 279339) "a") (data (i32.const 279342) "a") (data (i32.const 279345) "a") (data (i32.const 279348) "a") (data (i32.const 279351) "a") (data (i32.const 279354) "a") (data (i32.const 279357) "a") (data (i32.const 279360) "a") (data (i32.const 279363) "a") (data (i32.const 279366) "a") (data (i32.const 279369) "a") (data (i32.const 279372) "a") (data (i32.const 279375) "a") (data (i32.const 279378) "a") (data (i32.const 279381) "a") (data (i32.const 279384) "a") (data (i32.const 279387) "a") (data (i32.const 279390) "a") (data (i32.const 279393) "a") (data (i32.const 279396) "a") (data (i32.const 279399) "a") (data (i32.const 279402) "a") (data (i32.const 279405) "a") (data (i32.const 279408) "a") (data (i32.const 279411) "a") (data (i32.const 279414) "a") (data (i32.const 279417) "a") (data (i32.const 279420) "a") (data (i32.const 279423) "a") (data (i32.const 279426) "a") (data (i32.const 279429) "a") (data (i32.const 279432) "a") (data (i32.const 279435) "a") (data (i32.const 279438) "a") (data (i32.const 279441) "a") (data (i32.const 279444) "a") (data (i32.const 279447) "a") (data (i32.const 279450) "a") (data (i32.const 279453) "a") (data (i32.const 279456) "a") (data (i32.const 279459) "a") (data (i32.const 279462) "a") (data (i32.const 279465) "a") (data (i32.const 279468) "a") (data (i32.const 279471) "a") (data (i32.const 279474) "a") (data (i32.const 279477) "a") (data (i32.const 279480) "a") (data (i32.const 279483) "a") (data (i32.const 279486) "a") (data (i32.const 279489) "a") (data (i32.const 279492) "a") (data (i32.const 279495) "a") (data (i32.const 279498) "a") (data (i32.const 279501) "a") (data (i32.const 279504) "a") (data (i32.const 279507) "a") (data (i32.const 279510) "a") (data (i32.const 279513) "a") (data (i32.const 279516) "a") (data (i32.const 279519) "a") (data (i32.const 279522) "a") (data (i32.const 279525) "a") (data (i32.const 279528) "a") (data (i32.const 279531) "a") (data (i32.const 279534) "a") (data (i32.const 279537) "a") (data (i32.const 279540) "a") (data (i32.const 279543) "a") (data (i32.const 279546) "a") (data (i32.const 279549) "a") (data (i32.const 279552) "a") (data (i32.const 279555) "a") (data (i32.const 279558) "a") (data (i32.const 279561) "a") (data (i32.const 279564) "a") (data (i32.const 279567) "a") (data (i32.const 279570) "a") (data (i32.const 279573) "a") (data (i32.const 279576) "a") (data (i32.const 279579) "a") (data (i32.const 279582) "a") (data (i32.const 279585) "a") (data (i32.const 279588) "a") (data (i32.const 279591) "a") (data (i32.const 279594) "a") (data (i32.const 279597) "a") (data (i32.const 279600) "a") (data (i32.const 279603) "a") (data (i32.const 279606) "a") (data (i32.const 279609) "a") (data (i32.const 279612) "a") (data (i32.const 279615) "a") (data (i32.const 279618) "a") (data (i32.const 279621) "a") (data (i32.const 279624) "a") (data (i32.const 279627) "a") (data (i32.const 279630) "a") (data (i32.const 279633) "a") (data (i32.const 279636) "a") (data (i32.const 279639) "a") (data (i32.const 279642) "a") (data (i32.const 279645) "a") (data (i32.const 279648) "a") (data (i32.const 279651) "a") (data (i32.const 279654) "a") (data (i32.const 279657) "a") (data (i32.const 279660) "a") (data (i32.const 279663) "a") (data (i32.const 279666) "a") (data (i32.const 279669) "a") (data (i32.const 279672) "a") (data (i32.const 279675) "a") (data (i32.const 279678) "a") (data (i32.const 279681) "a") (data (i32.const 279684) "a") (data (i32.const 279687) "a") (data (i32.const 279690) "a") (data (i32.const 279693) "a") (data (i32.const 279696) "a") (data (i32.const 279699) "a") (data (i32.const 279702) "a") (data (i32.const 279705) "a") (data (i32.const 279708) "a") (data (i32.const 279711) "a") (data (i32.const 279714) "a") (data (i32.const 279717) "a") (data (i32.const 279720) "a") (data (i32.const 279723) "a") (data (i32.const 279726) "a") (data (i32.const 279729) "a") (data (i32.const 279732) "a") (data (i32.const 279735) "a") (data (i32.const 279738) "a") (data (i32.const 279741) "a") (data (i32.const 279744) "a") (data (i32.const 279747) "a") (data (i32.const 279750) "a") (data (i32.const 279753) "a") (data (i32.const 279756) "a") (data (i32.const 279759) "a") (data (i32.const 279762) "a") (data (i32.const 279765) "a") (data (i32.const 279768) "a") (data (i32.const 279771) "a") (data (i32.const 279774) "a") (data (i32.const 279777) "a") (data (i32.const 279780) "a") (data (i32.const 279783) "a") (data (i32.const 279786) "a") (data (i32.const 279789) "a") (data (i32.const 279792) "a") (data (i32.const 279795) "a") (data (i32.const 279798) "a") (data (i32.const 279801) "a") (data (i32.const 279804) "a") (data (i32.const 279807) "a") (data (i32.const 279810) "a") (data (i32.const 279813) "a") (data (i32.const 279816) "a") (data (i32.const 279819) "a") (data (i32.const 279822) "a") (data (i32.const 279825) "a") (data (i32.const 279828) "a") (data (i32.const 279831) "a") (data (i32.const 279834) "a") (data (i32.const 279837) "a") (data (i32.const 279840) "a") (data (i32.const 279843) "a") (data (i32.const 279846) "a") (data (i32.const 279849) "a") (data (i32.const 279852) "a") (data (i32.const 279855) "a") (data (i32.const 279858) "a") (data (i32.const 279861) "a") (data (i32.const 279864) "a") (data (i32.const 279867) "a") (data (i32.const 279870) "a") (data (i32.const 279873) "a") (data (i32.const 279876) "a") (data (i32.const 279879) "a") (data (i32.const 279882) "a") (data (i32.const 279885) "a") (data (i32.const 279888) "a") (data (i32.const 279891) "a") (data (i32.const 279894) "a") (data (i32.const 279897) "a") (data (i32.const 279900) "a") (data (i32.const 279903) "a") (data (i32.const 279906) "a") (data (i32.const 279909) "a") (data (i32.const 279912) "a") (data (i32.const 279915) "a") (data (i32.const 279918) "a") (data (i32.const 279921) "a") (data (i32.const 279924) "a") (data (i32.const 279927) "a") (data (i32.const 279930) "a") (data (i32.const 279933) "a") (data (i32.const 279936) "a") (data (i32.const 279939) "a") (data (i32.const 279942) "a") (data (i32.const 279945) "a") (data (i32.const 279948) "a") (data (i32.const 279951) "a") (data (i32.const 279954) "a") (data (i32.const 279957) "a") (data (i32.const 279960) "a") (data (i32.const 279963) "a") (data (i32.const 279966) "a") (data (i32.const 279969) "a") (data (i32.const 279972) "a") (data (i32.const 279975) "a") (data (i32.const 279978) "a") (data (i32.const 279981) "a") (data (i32.const 279984) "a") (data (i32.const 279987) "a") (data (i32.const 279990) "a") (data (i32.const 279993) "a") (data (i32.const 279996) "a") (data (i32.const 279999) "a") (data (i32.const 280002) "a") (data (i32.const 280005) "a") (data (i32.const 280008) "a") (data (i32.const 280011) "a") (data (i32.const 280014) "a") (data (i32.const 280017) "a") (data (i32.const 280020) "a") (data (i32.const 280023) "a") (data (i32.const 280026) "a") (data (i32.const 280029) "a") (data (i32.const 280032) "a") (data (i32.const 280035) "a") (data (i32.const 280038) "a") (data (i32.const 280041) "a") (data (i32.const 280044) "a") (data (i32.const 280047) "a") (data (i32.const 280050) "a") (data (i32.const 280053) "a") (data (i32.const 280056) "a") (data (i32.const 280059) "a") (data (i32.const 280062) "a") (data (i32.const 280065) "a") (data (i32.const 280068) "a") (data (i32.const 280071) "a") (data (i32.const 280074) "a") (data (i32.const 280077) "a") (data (i32.const 280080) "a") (data (i32.const 280083) "a") (data (i32.const 280086) "a") (data (i32.const 280089) "a") (data (i32.const 280092) "a") (data (i32.const 280095) "a") (data (i32.const 280098) "a") (data (i32.const 280101) "a") (data (i32.const 280104) "a") (data (i32.const 280107) "a") (data (i32.const 280110) "a") (data (i32.const 280113) "a") (data (i32.const 280116) "a") (data (i32.const 280119) "a") (data (i32.const 280122) "a") (data (i32.const 280125) "a") (data (i32.const 280128) "a") (data (i32.const 280131) "a") (data (i32.const 280134) "a") (data (i32.const 280137) "a") (data (i32.const 280140) "a") (data (i32.const 280143) "a") (data (i32.const 280146) "a") (data (i32.const 280149) "a") (data (i32.const 280152) "a") (data (i32.const 280155) "a") (data (i32.const 280158) "a") (data (i32.const 280161) "a") (data (i32.const 280164) "a") (data (i32.const 280167) "a") (data (i32.const 280170) "a") (data (i32.const 280173) "a") (data (i32.const 280176) "a") (data (i32.const 280179) "a") (data (i32.const 280182) "a") (data (i32.const 280185) "a") (data (i32.const 280188) "a") (data (i32.const 280191) "a") (data (i32.const 280194) "a") (data (i32.const 280197) "a") (data (i32.const 280200) "a") (data (i32.const 280203) "a") (data (i32.const 280206) "a") (data (i32.const 280209) "a") (data (i32.const 280212) "a") (data (i32.const 280215) "a") (data (i32.const 280218) "a") (data (i32.const 280221) "a") (data (i32.const 280224) "a") (data (i32.const 280227) "a") (data (i32.const 280230) "a") (data (i32.const 280233) "a") (data (i32.const 280236) "a") (data (i32.const 280239) "a") (data (i32.const 280242) "a") (data (i32.const 280245) "a") (data (i32.const 280248) "a") (data (i32.const 280251) "a") (data (i32.const 280254) "a") (data (i32.const 280257) "a") (data (i32.const 280260) "a") (data (i32.const 280263) "a") (data (i32.const 280266) "a") (data (i32.const 280269) "a") (data (i32.const 280272) "a") (data (i32.const 280275) "a") (data (i32.const 280278) "a") (data (i32.const 280281) "a") (data (i32.const 280284) "a") (data (i32.const 280287) "a") (data (i32.const 280290) "a") (data (i32.const 280293) "a") (data (i32.const 280296) "a") (data (i32.const 280299) "a") (data (i32.const 280302) "a") (data (i32.const 280305) "a") (data (i32.const 280308) "a") (data (i32.const 280311) "a") (data (i32.const 280314) "a") (data (i32.const 280317) "a") (data (i32.const 280320) "a") (data (i32.const 280323) "a") (data (i32.const 280326) "a") (data (i32.const 280329) "a") (data (i32.const 280332) "a") (data (i32.const 280335) "a") (data (i32.const 280338) "a") (data (i32.const 280341) "a") (data (i32.const 280344) "a") (data (i32.const 280347) "a") (data (i32.const 280350) "a") (data (i32.const 280353) "a") (data (i32.const 280356) "a") (data (i32.const 280359) "a") (data (i32.const 280362) "a") (data (i32.const 280365) "a") (data (i32.const 280368) "a") (data (i32.const 280371) "a") (data (i32.const 280374) "a") (data (i32.const 280377) "a") (data (i32.const 280380) "a") (data (i32.const 280383) "a") (data (i32.const 280386) "a") (data (i32.const 280389) "a") (data (i32.const 280392) "a") (data (i32.const 280395) "a") (data (i32.const 280398) "a") (data (i32.const 280401) "a") (data (i32.const 280404) "a") (data (i32.const 280407) "a") (data (i32.const 280410) "a") (data (i32.const 280413) "a") (data (i32.const 280416) "a") (data (i32.const 280419) "a") (data (i32.const 280422) "a") (data (i32.const 280425) "a") (data (i32.const 280428) "a") (data (i32.const 280431) "a") (data (i32.const 280434) "a") (data (i32.const 280437) "a") (data (i32.const 280440) "a") (data (i32.const 280443) "a") (data (i32.const 280446) "a") (data (i32.const 280449) "a") (data (i32.const 280452) "a") (data (i32.const 280455) "a") (data (i32.const 280458) "a") (data (i32.const 280461) "a") (data (i32.const 280464) "a") (data (i32.const 280467) "a") (data (i32.const 280470) "a") (data (i32.const 280473) "a") (data (i32.const 280476) "a") (data (i32.const 280479) "a") (data (i32.const 280482) "a") (data (i32.const 280485) "a") (data (i32.const 280488) "a") (data (i32.const 280491) "a") (data (i32.const 280494) "a") (data (i32.const 280497) "a") (data (i32.const 280500) "a") (data (i32.const 280503) "a") (data (i32.const 280506) "a") (data (i32.const 280509) "a") (data (i32.const 280512) "a") (data (i32.const 280515) "a") (data (i32.const 280518) "a") (data (i32.const 280521) "a") (data (i32.const 280524) "a") (data (i32.const 280527) "a") (data (i32.const 280530) "a") (data (i32.const 280533) "a") (data (i32.const 280536) "a") (data (i32.const 280539) "a") (data (i32.const 280542) "a") (data (i32.const 280545) "a") (data (i32.const 280548) "a") (data (i32.const 280551) "a") (data (i32.const 280554) "a") (data (i32.const 280557) "a") (data (i32.const 280560) "a") (data (i32.const 280563) "a") (data (i32.const 280566) "a") (data (i32.const 280569) "a") (data (i32.const 280572) "a") (data (i32.const 280575) "a") (data (i32.const 280578) "a") (data (i32.const 280581) "a") (data (i32.const 280584) "a") (data (i32.const 280587) "a") (data (i32.const 280590) "a") (data (i32.const 280593) "a") (data (i32.const 280596) "a") (data (i32.const 280599) "a") (data (i32.const 280602) "a") (data (i32.const 280605) "a") (data (i32.const 280608) "a") (data (i32.const 280611) "a") (data (i32.const 280614) "a") (data (i32.const 280617) "a") (data (i32.const 280620) "a") (data (i32.const 280623) "a") (data (i32.const 280626) "a") (data (i32.const 280629) "a") (data (i32.const 280632) "a") (data (i32.const 280635) "a") (data (i32.const 280638) "a") (data (i32.const 280641) "a") (data (i32.const 280644) "a") (data (i32.const 280647) "a") (data (i32.const 280650) "a") (data (i32.const 280653) "a") (data (i32.const 280656) "a") (data (i32.const 280659) "a") (data (i32.const 280662) "a") (data (i32.const 280665) "a") (data (i32.const 280668) "a") (data (i32.const 280671) "a") (data (i32.const 280674) "a") (data (i32.const 280677) "a") (data (i32.const 280680) "a") (data (i32.const 280683) "a") (data (i32.const 280686) "a") (data (i32.const 280689) "a") (data (i32.const 280692) "a") (data (i32.const 280695) "a") (data (i32.const 280698) "a") (data (i32.const 280701) "a") (data (i32.const 280704) "a") (data (i32.const 280707) "a") (data (i32.const 280710) "a") (data (i32.const 280713) "a") (data (i32.const 280716) "a") (data (i32.const 280719) "a") (data (i32.const 280722) "a") (data (i32.const 280725) "a") (data (i32.const 280728) "a") (data (i32.const 280731) "a") (data (i32.const 280734) "a") (data (i32.const 280737) "a") (data (i32.const 280740) "a") (data (i32.const 280743) "a") (data (i32.const 280746) "a") (data (i32.const 280749) "a") (data (i32.const 280752) "a") (data (i32.const 280755) "a") (data (i32.const 280758) "a") (data (i32.const 280761) "a") (data (i32.const 280764) "a") (data (i32.const 280767) "a") (data (i32.const 280770) "a") (data (i32.const 280773) "a") (data (i32.const 280776) "a") (data (i32.const 280779) "a") (data (i32.const 280782) "a") (data (i32.const 280785) "a") (data (i32.const 280788) "a") (data (i32.const 280791) "a") (data (i32.const 280794) "a") (data (i32.const 280797) "a") (data (i32.const 280800) "a") (data (i32.const 280803) "a") (data (i32.const 280806) "a") (data (i32.const 280809) "a") (data (i32.const 280812) "a") (data (i32.const 280815) "a") (data (i32.const 280818) "a") (data (i32.const 280821) "a") (data (i32.const 280824) "a") (data (i32.const 280827) "a") (data (i32.const 280830) "a") (data (i32.const 280833) "a") (data (i32.const 280836) "a") (data (i32.const 280839) "a") (data (i32.const 280842) "a") (data (i32.const 280845) "a") (data (i32.const 280848) "a") (data (i32.const 280851) "a") (data (i32.const 280854) "a") (data (i32.const 280857) "a") (data (i32.const 280860) "a") (data (i32.const 280863) "a") (data (i32.const 280866) "a") (data (i32.const 280869) "a") (data (i32.const 280872) "a") (data (i32.const 280875) "a") (data (i32.const 280878) "a") (data (i32.const 280881) "a") (data (i32.const 280884) "a") (data (i32.const 280887) "a") (data (i32.const 280890) "a") (data (i32.const 280893) "a") (data (i32.const 280896) "a") (data (i32.const 280899) "a") (data (i32.const 280902) "a") (data (i32.const 280905) "a") (data (i32.const 280908) "a") (data (i32.const 280911) "a") (data (i32.const 280914) "a") (data (i32.const 280917) "a") (data (i32.const 280920) "a") (data (i32.const 280923) "a") (data (i32.const 280926) "a") (data (i32.const 280929) "a") (data (i32.const 280932) "a") (data (i32.const 280935) "a") (data (i32.const 280938) "a") (data (i32.const 280941) "a") (data (i32.const 280944) "a") (data (i32.const 280947) "a") (data (i32.const 280950) "a") (data (i32.const 280953) "a") (data (i32.const 280956) "a") (data (i32.const 280959) "a") (data (i32.const 280962) "a") (data (i32.const 280965) "a") (data (i32.const 280968) "a") (data (i32.const 280971) "a") (data (i32.const 280974) "a") (data (i32.const 280977) "a") (data (i32.const 280980) "a") (data (i32.const 280983) "a") (data (i32.const 280986) "a") (data (i32.const 280989) "a") (data (i32.const 280992) "a") (data (i32.const 280995) "a") (data (i32.const 280998) "a") (data (i32.const 281001) "a") (data (i32.const 281004) "a") (data (i32.const 281007) "a") (data (i32.const 281010) "a") (data (i32.const 281013) "a") (data (i32.const 281016) "a") (data (i32.const 281019) "a") (data (i32.const 281022) "a") (data (i32.const 281025) "a") (data (i32.const 281028) "a") (data (i32.const 281031) "a") (data (i32.const 281034) "a") (data (i32.const 281037) "a") (data (i32.const 281040) "a") (data (i32.const 281043) "a") (data (i32.const 281046) "a") (data (i32.const 281049) "a") (data (i32.const 281052) "a") (data (i32.const 281055) "a") (data (i32.const 281058) "a") (data (i32.const 281061) "a") (data (i32.const 281064) "a") (data (i32.const 281067) "a") (data (i32.const 281070) "a") (data (i32.const 281073) "a") (data (i32.const 281076) "a") (data (i32.const 281079) "a") (data (i32.const 281082) "a") (data (i32.const 281085) "a") (data (i32.const 281088) "a") (data (i32.const 281091) "a") (data (i32.const 281094) "a") (data (i32.const 281097) "a") (data (i32.const 281100) "a") (data (i32.const 281103) "a") (data (i32.const 281106) "a") (data (i32.const 281109) "a") (data (i32.const 281112) "a") (data (i32.const 281115) "a") (data (i32.const 281118) "a") (data (i32.const 281121) "a") (data (i32.const 281124) "a") (data (i32.const 281127) "a") (data (i32.const 281130) "a") (data (i32.const 281133) "a") (data (i32.const 281136) "a") (data (i32.const 281139) "a") (data (i32.const 281142) "a") (data (i32.const 281145) "a") (data (i32.const 281148) "a") (data (i32.const 281151) "a") (data (i32.const 281154) "a") (data (i32.const 281157) "a") (data (i32.const 281160) "a") (data (i32.const 281163) "a") (data (i32.const 281166) "a") (data (i32.const 281169) "a") (data (i32.const 281172) "a") (data (i32.const 281175) "a") (data (i32.const 281178) "a") (data (i32.const 281181) "a") (data (i32.const 281184) "a") (data (i32.const 281187) "a") (data (i32.const 281190) "a") (data (i32.const 281193) "a") (data (i32.const 281196) "a") (data (i32.const 281199) "a") (data (i32.const 281202) "a") (data (i32.const 281205) "a") (data (i32.const 281208) "a") (data (i32.const 281211) "a") (data (i32.const 281214) "a") (data (i32.const 281217) "a") (data (i32.const 281220) "a") (data (i32.const 281223) "a") (data (i32.const 281226) "a") (data (i32.const 281229) "a") (data (i32.const 281232) "a") (data (i32.const 281235) "a") (data (i32.const 281238) "a") (data (i32.const 281241) "a") (data (i32.const 281244) "a") (data (i32.const 281247) "a") (data (i32.const 281250) "a") (data (i32.const 281253) "a") (data (i32.const 281256) "a") (data (i32.const 281259) "a") (data (i32.const 281262) "a") (data (i32.const 281265) "a") (data (i32.const 281268) "a") (data (i32.const 281271) "a") (data (i32.const 281274) "a") (data (i32.const 281277) "a") (data (i32.const 281280) "a") (data (i32.const 281283) "a") (data (i32.const 281286) "a") (data (i32.const 281289) "a") (data (i32.const 281292) "a") (data (i32.const 281295) "a") (data (i32.const 281298) "a") (data (i32.const 281301) "a") (data (i32.const 281304) "a") (data (i32.const 281307) "a") (data (i32.const 281310) "a") (data (i32.const 281313) "a") (data (i32.const 281316) "a") (data (i32.const 281319) "a") (data (i32.const 281322) "a") (data (i32.const 281325) "a") (data (i32.const 281328) "a") (data (i32.const 281331) "a") (data (i32.const 281334) "a") (data (i32.const 281337) "a") (data (i32.const 281340) "a") (data (i32.const 281343) "a") (data (i32.const 281346) "a") (data (i32.const 281349) "a") (data (i32.const 281352) "a") (data (i32.const 281355) "a") (data (i32.const 281358) "a") (data (i32.const 281361) "a") (data (i32.const 281364) "a") (data (i32.const 281367) "a") (data (i32.const 281370) "a") (data (i32.const 281373) "a") (data (i32.const 281376) "a") (data (i32.const 281379) "a") (data (i32.const 281382) "a") (data (i32.const 281385) "a") (data (i32.const 281388) "a") (data (i32.const 281391) "a") (data (i32.const 281394) "a") (data (i32.const 281397) "a") (data (i32.const 281400) "a") (data (i32.const 281403) "a") (data (i32.const 281406) "a") (data (i32.const 281409) "a") (data (i32.const 281412) "a") (data (i32.const 281415) "a") (data (i32.const 281418) "a") (data (i32.const 281421) "a") (data (i32.const 281424) "a") (data (i32.const 281427) "a") (data (i32.const 281430) "a") (data (i32.const 281433) "a") (data (i32.const 281436) "a") (data (i32.const 281439) "a") (data (i32.const 281442) "a") (data (i32.const 281445) "a") (data (i32.const 281448) "a") (data (i32.const 281451) "a") (data (i32.const 281454) "a") (data (i32.const 281457) "a") (data (i32.const 281460) "a") (data (i32.const 281463) "a") (data (i32.const 281466) "a") (data (i32.const 281469) "a") (data (i32.const 281472) "a") (data (i32.const 281475) "a") (data (i32.const 281478) "a") (data (i32.const 281481) "a") (data (i32.const 281484) "a") (data (i32.const 281487) "a") (data (i32.const 281490) "a") (data (i32.const 281493) "a") (data (i32.const 281496) "a") (data (i32.const 281499) "a") (data (i32.const 281502) "a") (data (i32.const 281505) "a") (data (i32.const 281508) "a") (data (i32.const 281511) "a") (data (i32.const 281514) "a") (data (i32.const 281517) "a") (data (i32.const 281520) "a") (data (i32.const 281523) "a") (data (i32.const 281526) "a") (data (i32.const 281529) "a") (data (i32.const 281532) "a") (data (i32.const 281535) "a") (data (i32.const 281538) "a") (data (i32.const 281541) "a") (data (i32.const 281544) "a") (data (i32.const 281547) "a") (data (i32.const 281550) "a") (data (i32.const 281553) "a") (data (i32.const 281556) "a") (data (i32.const 281559) "a") (data (i32.const 281562) "a") (data (i32.const 281565) "a") (data (i32.const 281568) "a") (data (i32.const 281571) "a") (data (i32.const 281574) "a") (data (i32.const 281577) "a") (data (i32.const 281580) "a") (data (i32.const 281583) "a") (data (i32.const 281586) "a") (data (i32.const 281589) "a") (data (i32.const 281592) "a") (data (i32.const 281595) "a") (data (i32.const 281598) "a") (data (i32.const 281601) "a") (data (i32.const 281604) "a") (data (i32.const 281607) "a") (data (i32.const 281610) "a") (data (i32.const 281613) "a") (data (i32.const 281616) "a") (data (i32.const 281619) "a") (data (i32.const 281622) "a") (data (i32.const 281625) "a") (data (i32.const 281628) "a") (data (i32.const 281631) "a") (data (i32.const 281634) "a") (data (i32.const 281637) "a") (data (i32.const 281640) "a") (data (i32.const 281643) "a") (data (i32.const 281646) "a") (data (i32.const 281649) "a") (data (i32.const 281652) "a") (data (i32.const 281655) "a") (data (i32.const 281658) "a") (data (i32.const 281661) "a") (data (i32.const 281664) "a") (data (i32.const 281667) "a") (data (i32.const 281670) "a") (data (i32.const 281673) "a") (data (i32.const 281676) "a") (data (i32.const 281679) "a") (data (i32.const 281682) "a") (data (i32.const 281685) "a") (data (i32.const 281688) "a") (data (i32.const 281691) "a") (data (i32.const 281694) "a") (data (i32.const 281697) "a") (data (i32.const 281700) "a") (data (i32.const 281703) "a") (data (i32.const 281706) "a") (data (i32.const 281709) "a") (data (i32.const 281712) "a") (data (i32.const 281715) "a") (data (i32.const 281718) "a") (data (i32.const 281721) "a") (data (i32.const 281724) "a") (data (i32.const 281727) "a") (data (i32.const 281730) "a") (data (i32.const 281733) "a") (data (i32.const 281736) "a") (data (i32.const 281739) "a") (data (i32.const 281742) "a") (data (i32.const 281745) "a") (data (i32.const 281748) "a") (data (i32.const 281751) "a") (data (i32.const 281754) "a") (data (i32.const 281757) "a") (data (i32.const 281760) "a") (data (i32.const 281763) "a") (data (i32.const 281766) "a") (data (i32.const 281769) "a") (data (i32.const 281772) "a") (data (i32.const 281775) "a") (data (i32.const 281778) "a") (data (i32.const 281781) "a") (data (i32.const 281784) "a") (data (i32.const 281787) "a") (data (i32.const 281790) "a") (data (i32.const 281793) "a") (data (i32.const 281796) "a") (data (i32.const 281799) "a") (data (i32.const 281802) "a") (data (i32.const 281805) "a") (data (i32.const 281808) "a") (data (i32.const 281811) "a") (data (i32.const 281814) "a") (data (i32.const 281817) "a") (data (i32.const 281820) "a") (data (i32.const 281823) "a") (data (i32.const 281826) "a") (data (i32.const 281829) "a") (data (i32.const 281832) "a") (data (i32.const 281835) "a") (data (i32.const 281838) "a") (data (i32.const 281841) "a") (data (i32.const 281844) "a") (data (i32.const 281847) "a") (data (i32.const 281850) "a") (data (i32.const 281853) "a") (data (i32.const 281856) "a") (data (i32.const 281859) "a") (data (i32.const 281862) "a") (data (i32.const 281865) "a") (data (i32.const 281868) "a") (data (i32.const 281871) "a") (data (i32.const 281874) "a") (data (i32.const 281877) "a") (data (i32.const 281880) "a") (data (i32.const 281883) "a") (data (i32.const 281886) "a") (data (i32.const 281889) "a") (data (i32.const 281892) "a") (data (i32.const 281895) "a") (data (i32.const 281898) "a") (data (i32.const 281901) "a") (data (i32.const 281904) "a") (data (i32.const 281907) "a") (data (i32.const 281910) "a") (data (i32.const 281913) "a") (data (i32.const 281916) "a") (data (i32.const 281919) "a") (data (i32.const 281922) "a") (data (i32.const 281925) "a") (data (i32.const 281928) "a") (data (i32.const 281931) "a") (data (i32.const 281934) "a") (data (i32.const 281937) "a") (data (i32.const 281940) "a") (data (i32.const 281943) "a") (data (i32.const 281946) "a") (data (i32.const 281949) "a") (data (i32.const 281952) "a") (data (i32.const 281955) "a") (data (i32.const 281958) "a") (data (i32.const 281961) "a") (data (i32.const 281964) "a") (data (i32.const 281967) "a") (data (i32.const 281970) "a") (data (i32.const 281973) "a") (data (i32.const 281976) "a") (data (i32.const 281979) "a") (data (i32.const 281982) "a") (data (i32.const 281985) "a") (data (i32.const 281988) "a") (data (i32.const 281991) "a") (data (i32.const 281994) "a") (data (i32.const 281997) "a") (data (i32.const 282000) "a") (data (i32.const 282003) "a") (data (i32.const 282006) "a") (data (i32.const 282009) "a") (data (i32.const 282012) "a") (data (i32.const 282015) "a") (data (i32.const 282018) "a") (data (i32.const 282021) "a") (data (i32.const 282024) "a") (data (i32.const 282027) "a") (data (i32.const 282030) "a") (data (i32.const 282033) "a") (data (i32.const 282036) "a") (data (i32.const 282039) "a") (data (i32.const 282042) "a") (data (i32.const 282045) "a") (data (i32.const 282048) "a") (data (i32.const 282051) "a") (data (i32.const 282054) "a") (data (i32.const 282057) "a") (data (i32.const 282060) "a") (data (i32.const 282063) "a") (data (i32.const 282066) "a") (data (i32.const 282069) "a") (data (i32.const 282072) "a") (data (i32.const 282075) "a") (data (i32.const 282078) "a") (data (i32.const 282081) "a") (data (i32.const 282084) "a") (data (i32.const 282087) "a") (data (i32.const 282090) "a") (data (i32.const 282093) "a") (data (i32.const 282096) "a") (data (i32.const 282099) "a") (data (i32.const 282102) "a") (data (i32.const 282105) "a") (data (i32.const 282108) "a") (data (i32.const 282111) "a") (data (i32.const 282114) "a") (data (i32.const 282117) "a") (data (i32.const 282120) "a") (data (i32.const 282123) "a") (data (i32.const 282126) "a") (data (i32.const 282129) "a") (data (i32.const 282132) "a") (data (i32.const 282135) "a") (data (i32.const 282138) "a") (data (i32.const 282141) "a") (data (i32.const 282144) "a") (data (i32.const 282147) "a") (data (i32.const 282150) "a") (data (i32.const 282153) "a") (data (i32.const 282156) "a") (data (i32.const 282159) "a") (data (i32.const 282162) "a") (data (i32.const 282165) "a") (data (i32.const 282168) "a") (data (i32.const 282171) "a") (data (i32.const 282174) "a") (data (i32.const 282177) "a") (data (i32.const 282180) "a") (data (i32.const 282183) "a") (data (i32.const 282186) "a") (data (i32.const 282189) "a") (data (i32.const 282192) "a") (data (i32.const 282195) "a") (data (i32.const 282198) "a") (data (i32.const 282201) "a") (data (i32.const 282204) "a") (data (i32.const 282207) "a") (data (i32.const 282210) "a") (data (i32.const 282213) "a") (data (i32.const 282216) "a") (data (i32.const 282219) "a") (data (i32.const 282222) "a") (data (i32.const 282225) "a") (data (i32.const 282228) "a") (data (i32.const 282231) "a") (data (i32.const 282234) "a") (data (i32.const 282237) "a") (data (i32.const 282240) "a") (data (i32.const 282243) "a") (data (i32.const 282246) "a") (data (i32.const 282249) "a") (data (i32.const 282252) "a") (data (i32.const 282255) "a") (data (i32.const 282258) "a") (data (i32.const 282261) "a") (data (i32.const 282264) "a") (data (i32.const 282267) "a") (data (i32.const 282270) "a") (data (i32.const 282273) "a") (data (i32.const 282276) "a") (data (i32.const 282279) "a") (data (i32.const 282282) "a") (data (i32.const 282285) "a") (data (i32.const 282288) "a") (data (i32.const 282291) "a") (data (i32.const 282294) "a") (data (i32.const 282297) "a") (data (i32.const 282300) "a") (data (i32.const 282303) "a") (data (i32.const 282306) "a") (data (i32.const 282309) "a") (data (i32.const 282312) "a") (data (i32.const 282315) "a") (data (i32.const 282318) "a") (data (i32.const 282321) "a") (data (i32.const 282324) "a") (data (i32.const 282327) "a") (data (i32.const 282330) "a") (data (i32.const 282333) "a") (data (i32.const 282336) "a") (data (i32.const 282339) "a") (data (i32.const 282342) "a") (data (i32.const 282345) "a") (data (i32.const 282348) "a") (data (i32.const 282351) "a") (data (i32.const 282354) "a") (data (i32.const 282357) "a") (data (i32.const 282360) "a") (data (i32.const 282363) "a") (data (i32.const 282366) "a") (data (i32.const 282369) "a") (data (i32.const 282372) "a") (data (i32.const 282375) "a") (data (i32.const 282378) "a") (data (i32.const 282381) "a") (data (i32.const 282384) "a") (data (i32.const 282387) "a") (data (i32.const 282390) "a") (data (i32.const 282393) "a") (data (i32.const 282396) "a") (data (i32.const 282399) "a") (data (i32.const 282402) "a") (data (i32.const 282405) "a") (data (i32.const 282408) "a") (data (i32.const 282411) "a") (data (i32.const 282414) "a") (data (i32.const 282417) "a") (data (i32.const 282420) "a") (data (i32.const 282423) "a") (data (i32.const 282426) "a") (data (i32.const 282429) "a") (data (i32.const 282432) "a") (data (i32.const 282435) "a") (data (i32.const 282438) "a") (data (i32.const 282441) "a") (data (i32.const 282444) "a") (data (i32.const 282447) "a") (data (i32.const 282450) "a") (data (i32.const 282453) "a") (data (i32.const 282456) "a") (data (i32.const 282459) "a") (data (i32.const 282462) "a") (data (i32.const 282465) "a") (data (i32.const 282468) "a") (data (i32.const 282471) "a") (data (i32.const 282474) "a") (data (i32.const 282477) "a") (data (i32.const 282480) "a") (data (i32.const 282483) "a") (data (i32.const 282486) "a") (data (i32.const 282489) "a") (data (i32.const 282492) "a") (data (i32.const 282495) "a") (data (i32.const 282498) "a") (data (i32.const 282501) "a") (data (i32.const 282504) "a") (data (i32.const 282507) "a") (data (i32.const 282510) "a") (data (i32.const 282513) "a") (data (i32.const 282516) "a") (data (i32.const 282519) "a") (data (i32.const 282522) "a") (data (i32.const 282525) "a") (data (i32.const 282528) "a") (data (i32.const 282531) "a") (data (i32.const 282534) "a") (data (i32.const 282537) "a") (data (i32.const 282540) "a") (data (i32.const 282543) "a") (data (i32.const 282546) "a") (data (i32.const 282549) "a") (data (i32.const 282552) "a") (data (i32.const 282555) "a") (data (i32.const 282558) "a") (data (i32.const 282561) "a") (data (i32.const 282564) "a") (data (i32.const 282567) "a") (data (i32.const 282570) "a") (data (i32.const 282573) "a") (data (i32.const 282576) "a") (data (i32.const 282579) "a") (data (i32.const 282582) "a") (data (i32.const 282585) "a") (data (i32.const 282588) "a") (data (i32.const 282591) "a") (data (i32.const 282594) "a") (data (i32.const 282597) "a") (data (i32.const 282600) "a") (data (i32.const 282603) "a") (data (i32.const 282606) "a") (data (i32.const 282609) "a") (data (i32.const 282612) "a") (data (i32.const 282615) "a") (data (i32.const 282618) "a") (data (i32.const 282621) "a") (data (i32.const 282624) "a") (data (i32.const 282627) "a") (data (i32.const 282630) "a") (data (i32.const 282633) "a") (data (i32.const 282636) "a") (data (i32.const 282639) "a") (data (i32.const 282642) "a") (data (i32.const 282645) "a") (data (i32.const 282648) "a") (data (i32.const 282651) "a") (data (i32.const 282654) "a") (data (i32.const 282657) "a") (data (i32.const 282660) "a") (data (i32.const 282663) "a") (data (i32.const 282666) "a") (data (i32.const 282669) "a") (data (i32.const 282672) "a") (data (i32.const 282675) "a") (data (i32.const 282678) "a") (data (i32.const 282681) "a") (data (i32.const 282684) "a") (data (i32.const 282687) "a") (data (i32.const 282690) "a") (data (i32.const 282693) "a") (data (i32.const 282696) "a") (data (i32.const 282699) "a") (data (i32.const 282702) "a") (data (i32.const 282705) "a") (data (i32.const 282708) "a") (data (i32.const 282711) "a") (data (i32.const 282714) "a") (data (i32.const 282717) "a") (data (i32.const 282720) "a") (data (i32.const 282723) "a") (data (i32.const 282726) "a") (data (i32.const 282729) "a") (data (i32.const 282732) "a") (data (i32.const 282735) "a") (data (i32.const 282738) "a") (data (i32.const 282741) "a") (data (i32.const 282744) "a") (data (i32.const 282747) "a") (data (i32.const 282750) "a") (data (i32.const 282753) "a") (data (i32.const 282756) "a") (data (i32.const 282759) "a") (data (i32.const 282762) "a") (data (i32.const 282765) "a") (data (i32.const 282768) "a") (data (i32.const 282771) "a") (data (i32.const 282774) "a") (data (i32.const 282777) "a") (data (i32.const 282780) "a") (data (i32.const 282783) "a") (data (i32.const 282786) "a") (data (i32.const 282789) "a") (data (i32.const 282792) "a") (data (i32.const 282795) "a") (data (i32.const 282798) "a") (data (i32.const 282801) "a") (data (i32.const 282804) "a") (data (i32.const 282807) "a") (data (i32.const 282810) "a") (data (i32.const 282813) "a") (data (i32.const 282816) "a") (data (i32.const 282819) "a") (data (i32.const 282822) "a") (data (i32.const 282825) "a") (data (i32.const 282828) "a") (data (i32.const 282831) "a") (data (i32.const 282834) "a") (data (i32.const 282837) "a") (data (i32.const 282840) "a") (data (i32.const 282843) "a") (data (i32.const 282846) "a") (data (i32.const 282849) "a") (data (i32.const 282852) "a") (data (i32.const 282855) "a") (data (i32.const 282858) "a") (data (i32.const 282861) "a") (data (i32.const 282864) "a") (data (i32.const 282867) "a") (data (i32.const 282870) "a") (data (i32.const 282873) "a") (data (i32.const 282876) "a") (data (i32.const 282879) "a") (data (i32.const 282882) "a") (data (i32.const 282885) "a") (data (i32.const 282888) "a") (data (i32.const 282891) "a") (data (i32.const 282894) "a") (data (i32.const 282897) "a") (data (i32.const 282900) "a") (data (i32.const 282903) "a") (data (i32.const 282906) "a") (data (i32.const 282909) "a") (data (i32.const 282912) "a") (data (i32.const 282915) "a") (data (i32.const 282918) "a") (data (i32.const 282921) "a") (data (i32.const 282924) "a") (data (i32.const 282927) "a") (data (i32.const 282930) "a") (data (i32.const 282933) "a") (data (i32.const 282936) "a") (data (i32.const 282939) "a") (data (i32.const 282942) "a") (data (i32.const 282945) "a") (data (i32.const 282948) "a") (data (i32.const 282951) "a") (data (i32.const 282954) "a") (data (i32.const 282957) "a") (data (i32.const 282960) "a") (data (i32.const 282963) "a") (data (i32.const 282966) "a") (data (i32.const 282969) "a") (data (i32.const 282972) "a") (data (i32.const 282975) "a") (data (i32.const 282978) "a") (data (i32.const 282981) "a") (data (i32.const 282984) "a") (data (i32.const 282987) "a") (data (i32.const 282990) "a") (data (i32.const 282993) "a") (data (i32.const 282996) "a") (data (i32.const 282999) "a") (data (i32.const 283002) "a") (data (i32.const 283005) "a") (data (i32.const 283008) "a") (data (i32.const 283011) "a") (data (i32.const 283014) "a") (data (i32.const 283017) "a") (data (i32.const 283020) "a") (data (i32.const 283023) "a") (data (i32.const 283026) "a") (data (i32.const 283029) "a") (data (i32.const 283032) "a") (data (i32.const 283035) "a") (data (i32.const 283038) "a") (data (i32.const 283041) "a") (data (i32.const 283044) "a") (data (i32.const 283047) "a") (data (i32.const 283050) "a") (data (i32.const 283053) "a") (data (i32.const 283056) "a") (data (i32.const 283059) "a") (data (i32.const 283062) "a") (data (i32.const 283065) "a") (data (i32.const 283068) "a") (data (i32.const 283071) "a") (data (i32.const 283074) "a") (data (i32.const 283077) "a") (data (i32.const 283080) "a") (data (i32.const 283083) "a") (data (i32.const 283086) "a") (data (i32.const 283089) "a") (data (i32.const 283092) "a") (data (i32.const 283095) "a") (data (i32.const 283098) "a") (data (i32.const 283101) "a") (data (i32.const 283104) "a") (data (i32.const 283107) "a") (data (i32.const 283110) "a") (data (i32.const 283113) "a") (data (i32.const 283116) "a") (data (i32.const 283119) "a") (data (i32.const 283122) "a") (data (i32.const 283125) "a") (data (i32.const 283128) "a") (data (i32.const 283131) "a") (data (i32.const 283134) "a") (data (i32.const 283137) "a") (data (i32.const 283140) "a") (data (i32.const 283143) "a") (data (i32.const 283146) "a") (data (i32.const 283149) "a") (data (i32.const 283152) "a") (data (i32.const 283155) "a") (data (i32.const 283158) "a") (data (i32.const 283161) "a") (data (i32.const 283164) "a") (data (i32.const 283167) "a") (data (i32.const 283170) "a") (data (i32.const 283173) "a") (data (i32.const 283176) "a") (data (i32.const 283179) "a") (data (i32.const 283182) "a") (data (i32.const 283185) "a") (data (i32.const 283188) "a") (data (i32.const 283191) "a") (data (i32.const 283194) "a") (data (i32.const 283197) "a") (data (i32.const 283200) "a") (data (i32.const 283203) "a") (data (i32.const 283206) "a") (data (i32.const 283209) "a") (data (i32.const 283212) "a") (data (i32.const 283215) "a") (data (i32.const 283218) "a") (data (i32.const 283221) "a") (data (i32.const 283224) "a") (data (i32.const 283227) "a") (data (i32.const 283230) "a") (data (i32.const 283233) "a") (data (i32.const 283236) "a") (data (i32.const 283239) "a") (data (i32.const 283242) "a") (data (i32.const 283245) "a") (data (i32.const 283248) "a") (data (i32.const 283251) "a") (data (i32.const 283254) "a") (data (i32.const 283257) "a") (data (i32.const 283260) "a") (data (i32.const 283263) "a") (data (i32.const 283266) "a") (data (i32.const 283269) "a") (data (i32.const 283272) "a") (data (i32.const 283275) "a") (data (i32.const 283278) "a") (data (i32.const 283281) "a") (data (i32.const 283284) "a") (data (i32.const 283287) "a") (data (i32.const 283290) "a") (data (i32.const 283293) "a") (data (i32.const 283296) "a") (data (i32.const 283299) "a") (data (i32.const 283302) "a") (data (i32.const 283305) "a") (data (i32.const 283308) "a") (data (i32.const 283311) "a") (data (i32.const 283314) "a") (data (i32.const 283317) "a") (data (i32.const 283320) "a") (data (i32.const 283323) "a") (data (i32.const 283326) "a") (data (i32.const 283329) "a") (data (i32.const 283332) "a") (data (i32.const 283335) "a") (data (i32.const 283338) "a") (data (i32.const 283341) "a") (data (i32.const 283344) "a") (data (i32.const 283347) "a") (data (i32.const 283350) "a") (data (i32.const 283353) "a") (data (i32.const 283356) "a") (data (i32.const 283359) "a") (data (i32.const 283362) "a") (data (i32.const 283365) "a") (data (i32.const 283368) "a") (data (i32.const 283371) "a") (data (i32.const 283374) "a") (data (i32.const 283377) "a") (data (i32.const 283380) "a") (data (i32.const 283383) "a") (data (i32.const 283386) "a") (data (i32.const 283389) "a") (data (i32.const 283392) "a") (data (i32.const 283395) "a") (data (i32.const 283398) "a") (data (i32.const 283401) "a") (data (i32.const 283404) "a") (data (i32.const 283407) "a") (data (i32.const 283410) "a") (data (i32.const 283413) "a") (data (i32.const 283416) "a") (data (i32.const 283419) "a") (data (i32.const 283422) "a") (data (i32.const 283425) "a") (data (i32.const 283428) "a") (data (i32.const 283431) "a") (data (i32.const 283434) "a") (data (i32.const 283437) "a") (data (i32.const 283440) "a") (data (i32.const 283443) "a") (data (i32.const 283446) "a") (data (i32.const 283449) "a") (data (i32.const 283452) "a") (data (i32.const 283455) "a") (data (i32.const 283458) "a") (data (i32.const 283461) "a") (data (i32.const 283464) "a") (data (i32.const 283467) "a") (data (i32.const 283470) "a") (data (i32.const 283473) "a") (data (i32.const 283476) "a") (data (i32.const 283479) "a") (data (i32.const 283482) "a") (data (i32.const 283485) "a") (data (i32.const 283488) "a") (data (i32.const 283491) "a") (data (i32.const 283494) "a") (data (i32.const 283497) "a") (data (i32.const 283500) "a") (data (i32.const 283503) "a") (data (i32.const 283506) "a") (data (i32.const 283509) "a") (data (i32.const 283512) "a") (data (i32.const 283515) "a") (data (i32.const 283518) "a") (data (i32.const 283521) "a") (data (i32.const 283524) "a") (data (i32.const 283527) "a") (data (i32.const 283530) "a") (data (i32.const 283533) "a") (data (i32.const 283536) "a") (data (i32.const 283539) "a") (data (i32.const 283542) "a") (data (i32.const 283545) "a") (data (i32.const 283548) "a") (data (i32.const 283551) "a") (data (i32.const 283554) "a") (data (i32.const 283557) "a") (data (i32.const 283560) "a") (data (i32.const 283563) "a") (data (i32.const 283566) "a") (data (i32.const 283569) "a") (data (i32.const 283572) "a") (data (i32.const 283575) "a") (data (i32.const 283578) "a") (data (i32.const 283581) "a") (data (i32.const 283584) "a") (data (i32.const 283587) "a") (data (i32.const 283590) "a") (data (i32.const 283593) "a") (data (i32.const 283596) "a") (data (i32.const 283599) "a") (data (i32.const 283602) "a") (data (i32.const 283605) "a") (data (i32.const 283608) "a") (data (i32.const 283611) "a") (data (i32.const 283614) "a") (data (i32.const 283617) "a") (data (i32.const 283620) "a") (data (i32.const 283623) "a") (data (i32.const 283626) "a") (data (i32.const 283629) "a") (data (i32.const 283632) "a") (data (i32.const 283635) "a") (data (i32.const 283638) "a") (data (i32.const 283641) "a") (data (i32.const 283644) "a") (data (i32.const 283647) "a") (data (i32.const 283650) "a") (data (i32.const 283653) "a") (data (i32.const 283656) "a") (data (i32.const 283659) "a") (data (i32.const 283662) "a") (data (i32.const 283665) "a") (data (i32.const 283668) "a") (data (i32.const 283671) "a") (data (i32.const 283674) "a") (data (i32.const 283677) "a") (data (i32.const 283680) "a") (data (i32.const 283683) "a") (data (i32.const 283686) "a") (data (i32.const 283689) "a") (data (i32.const 283692) "a") (data (i32.const 283695) "a") (data (i32.const 283698) "a") (data (i32.const 283701) "a") (data (i32.const 283704) "a") (data (i32.const 283707) "a") (data (i32.const 283710) "a") (data (i32.const 283713) "a") (data (i32.const 283716) "a") (data (i32.const 283719) "a") (data (i32.const 283722) "a") (data (i32.const 283725) "a") (data (i32.const 283728) "a") (data (i32.const 283731) "a") (data (i32.const 283734) "a") (data (i32.const 283737) "a") (data (i32.const 283740) "a") (data (i32.const 283743) "a") (data (i32.const 283746) "a") (data (i32.const 283749) "a") (data (i32.const 283752) "a") (data (i32.const 283755) "a") (data (i32.const 283758) "a") (data (i32.const 283761) "a") (data (i32.const 283764) "a") (data (i32.const 283767) "a") (data (i32.const 283770) "a") (data (i32.const 283773) "a") (data (i32.const 283776) "a") (data (i32.const 283779) "a") (data (i32.const 283782) "a") (data (i32.const 283785) "a") (data (i32.const 283788) "a") (data (i32.const 283791) "a") (data (i32.const 283794) "a") (data (i32.const 283797) "a") (data (i32.const 283800) "a") (data (i32.const 283803) "a") (data (i32.const 283806) "a") (data (i32.const 283809) "a") (data (i32.const 283812) "a") (data (i32.const 283815) "a") (data (i32.const 283818) "a") (data (i32.const 283821) "a") (data (i32.const 283824) "a") (data (i32.const 283827) "a") (data (i32.const 283830) "a") (data (i32.const 283833) "a") (data (i32.const 283836) "a") (data (i32.const 283839) "a") (data (i32.const 283842) "a") (data (i32.const 283845) "a") (data (i32.const 283848) "a") (data (i32.const 283851) "a") (data (i32.const 283854) "a") (data (i32.const 283857) "a") (data (i32.const 283860) "a") (data (i32.const 283863) "a") (data (i32.const 283866) "a") (data (i32.const 283869) "a") (data (i32.const 283872) "a") (data (i32.const 283875) "a") (data (i32.const 283878) "a") (data (i32.const 283881) "a") (data (i32.const 283884) "a") (data (i32.const 283887) "a") (data (i32.const 283890) "a") (data (i32.const 283893) "a") (data (i32.const 283896) "a") (data (i32.const 283899) "a") (data (i32.const 283902) "a") (data (i32.const 283905) "a") (data (i32.const 283908) "a") (data (i32.const 283911) "a") (data (i32.const 283914) "a") (data (i32.const 283917) "a") (data (i32.const 283920) "a") (data (i32.const 283923) "a") (data (i32.const 283926) "a") (data (i32.const 283929) "a") (data (i32.const 283932) "a") (data (i32.const 283935) "a") (data (i32.const 283938) "a") (data (i32.const 283941) "a") (data (i32.const 283944) "a") (data (i32.const 283947) "a") (data (i32.const 283950) "a") (data (i32.const 283953) "a") (data (i32.const 283956) "a") (data (i32.const 283959) "a") (data (i32.const 283962) "a") (data (i32.const 283965) "a") (data (i32.const 283968) "a") (data (i32.const 283971) "a") (data (i32.const 283974) "a") (data (i32.const 283977) "a") (data (i32.const 283980) "a") (data (i32.const 283983) "a") (data (i32.const 283986) "a") (data (i32.const 283989) "a") (data (i32.const 283992) "a") (data (i32.const 283995) "a") (data (i32.const 283998) "a") (data (i32.const 284001) "a") (data (i32.const 284004) "a") (data (i32.const 284007) "a") (data (i32.const 284010) "a") (data (i32.const 284013) "a") (data (i32.const 284016) "a") (data (i32.const 284019) "a") (data (i32.const 284022) "a") (data (i32.const 284025) "a") (data (i32.const 284028) "a") (data (i32.const 284031) "a") (data (i32.const 284034) "a") (data (i32.const 284037) "a") (data (i32.const 284040) "a") (data (i32.const 284043) "a") (data (i32.const 284046) "a") (data (i32.const 284049) "a") (data (i32.const 284052) "a") (data (i32.const 284055) "a") (data (i32.const 284058) "a") (data (i32.const 284061) "a") (data (i32.const 284064) "a") (data (i32.const 284067) "a") (data (i32.const 284070) "a") (data (i32.const 284073) "a") (data (i32.const 284076) "a") (data (i32.const 284079) "a") (data (i32.const 284082) "a") (data (i32.const 284085) "a") (data (i32.const 284088) "a") (data (i32.const 284091) "a") (data (i32.const 284094) "a") (data (i32.const 284097) "a") (data (i32.const 284100) "a") (data (i32.const 284103) "a") (data (i32.const 284106) "a") (data (i32.const 284109) "a") (data (i32.const 284112) "a") (data (i32.const 284115) "a") (data (i32.const 284118) "a") (data (i32.const 284121) "a") (data (i32.const 284124) "a") (data (i32.const 284127) "a") (data (i32.const 284130) "a") (data (i32.const 284133) "a") (data (i32.const 284136) "a") (data (i32.const 284139) "a") (data (i32.const 284142) "a") (data (i32.const 284145) "a") (data (i32.const 284148) "a") (data (i32.const 284151) "a") (data (i32.const 284154) "a") (data (i32.const 284157) "a") (data (i32.const 284160) "a") (data (i32.const 284163) "a") (data (i32.const 284166) "a") (data (i32.const 284169) "a") (data (i32.const 284172) "a") (data (i32.const 284175) "a") (data (i32.const 284178) "a") (data (i32.const 284181) "a") (data (i32.const 284184) "a") (data (i32.const 284187) "a") (data (i32.const 284190) "a") (data (i32.const 284193) "a") (data (i32.const 284196) "a") (data (i32.const 284199) "a") (data (i32.const 284202) "a") (data (i32.const 284205) "a") (data (i32.const 284208) "a") (data (i32.const 284211) "a") (data (i32.const 284214) "a") (data (i32.const 284217) "a") (data (i32.const 284220) "a") (data (i32.const 284223) "a") (data (i32.const 284226) "a") (data (i32.const 284229) "a") (data (i32.const 284232) "a") (data (i32.const 284235) "a") (data (i32.const 284238) "a") (data (i32.const 284241) "a") (data (i32.const 284244) "a") (data (i32.const 284247) "a") (data (i32.const 284250) "a") (data (i32.const 284253) "a") (data (i32.const 284256) "a") (data (i32.const 284259) "a") (data (i32.const 284262) "a") (data (i32.const 284265) "a") (data (i32.const 284268) "a") (data (i32.const 284271) "a") (data (i32.const 284274) "a") (data (i32.const 284277) "a") (data (i32.const 284280) "a") (data (i32.const 284283) "a") (data (i32.const 284286) "a") (data (i32.const 284289) "a") (data (i32.const 284292) "a") (data (i32.const 284295) "a") (data (i32.const 284298) "a") (data (i32.const 284301) "a") (data (i32.const 284304) "a") (data (i32.const 284307) "a") (data (i32.const 284310) "a") (data (i32.const 284313) "a") (data (i32.const 284316) "a") (data (i32.const 284319) "a") (data (i32.const 284322) "a") (data (i32.const 284325) "a") (data (i32.const 284328) "a") (data (i32.const 284331) "a") (data (i32.const 284334) "a") (data (i32.const 284337) "a") (data (i32.const 284340) "a") (data (i32.const 284343) "a") (data (i32.const 284346) "a") (data (i32.const 284349) "a") (data (i32.const 284352) "a") (data (i32.const 284355) "a") (data (i32.const 284358) "a") (data (i32.const 284361) "a") (data (i32.const 284364) "a") (data (i32.const 284367) "a") (data (i32.const 284370) "a") (data (i32.const 284373) "a") (data (i32.const 284376) "a") (data (i32.const 284379) "a") (data (i32.const 284382) "a") (data (i32.const 284385) "a") (data (i32.const 284388) "a") (data (i32.const 284391) "a") (data (i32.const 284394) "a") (data (i32.const 284397) "a") (data (i32.const 284400) "a") (data (i32.const 284403) "a") (data (i32.const 284406) "a") (data (i32.const 284409) "a") (data (i32.const 284412) "a") (data (i32.const 284415) "a") (data (i32.const 284418) "a") (data (i32.const 284421) "a") (data (i32.const 284424) "a") (data (i32.const 284427) "a") (data (i32.const 284430) "a") (data (i32.const 284433) "a") (data (i32.const 284436) "a") (data (i32.const 284439) "a") (data (i32.const 284442) "a") (data (i32.const 284445) "a") (data (i32.const 284448) "a") (data (i32.const 284451) "a") (data (i32.const 284454) "a") (data (i32.const 284457) "a") (data (i32.const 284460) "a") (data (i32.const 284463) "a") (data (i32.const 284466) "a") (data (i32.const 284469) "a") (data (i32.const 284472) "a") (data (i32.const 284475) "a") (data (i32.const 284478) "a") (data (i32.const 284481) "a") (data (i32.const 284484) "a") (data (i32.const 284487) "a") (data (i32.const 284490) "a") (data (i32.const 284493) "a") (data (i32.const 284496) "a") (data (i32.const 284499) "a") (data (i32.const 284502) "a") (data (i32.const 284505) "a") (data (i32.const 284508) "a") (data (i32.const 284511) "a") (data (i32.const 284514) "a") (data (i32.const 284517) "a") (data (i32.const 284520) "a") (data (i32.const 284523) "a") (data (i32.const 284526) "a") (data (i32.const 284529) "a") (data (i32.const 284532) "a") (data (i32.const 284535) "a") (data (i32.const 284538) "a") (data (i32.const 284541) "a") (data (i32.const 284544) "a") (data (i32.const 284547) "a") (data (i32.const 284550) "a") (data (i32.const 284553) "a") (data (i32.const 284556) "a") (data (i32.const 284559) "a") (data (i32.const 284562) "a") (data (i32.const 284565) "a") (data (i32.const 284568) "a") (data (i32.const 284571) "a") (data (i32.const 284574) "a") (data (i32.const 284577) "a") (data (i32.const 284580) "a") (data (i32.const 284583) "a") (data (i32.const 284586) "a") (data (i32.const 284589) "a") (data (i32.const 284592) "a") (data (i32.const 284595) "a") (data (i32.const 284598) "a") (data (i32.const 284601) "a") (data (i32.const 284604) "a") (data (i32.const 284607) "a") (data (i32.const 284610) "a") (data (i32.const 284613) "a") (data (i32.const 284616) "a") (data (i32.const 284619) "a") (data (i32.const 284622) "a") (data (i32.const 284625) "a") (data (i32.const 284628) "a") (data (i32.const 284631) "a") (data (i32.const 284634) "a") (data (i32.const 284637) "a") (data (i32.const 284640) "a") (data (i32.const 284643) "a") (data (i32.const 284646) "a") (data (i32.const 284649) "a") (data (i32.const 284652) "a") (data (i32.const 284655) "a") (data (i32.const 284658) "a") (data (i32.const 284661) "a") (data (i32.const 284664) "a") (data (i32.const 284667) "a") (data (i32.const 284670) "a") (data (i32.const 284673) "a") (data (i32.const 284676) "a") (data (i32.const 284679) "a") (data (i32.const 284682) "a") (data (i32.const 284685) "a") (data (i32.const 284688) "a") (data (i32.const 284691) "a") (data (i32.const 284694) "a") (data (i32.const 284697) "a") (data (i32.const 284700) "a") (data (i32.const 284703) "a") (data (i32.const 284706) "a") (data (i32.const 284709) "a") (data (i32.const 284712) "a") (data (i32.const 284715) "a") (data (i32.const 284718) "a") (data (i32.const 284721) "a") (data (i32.const 284724) "a") (data (i32.const 284727) "a") (data (i32.const 284730) "a") (data (i32.const 284733) "a") (data (i32.const 284736) "a") (data (i32.const 284739) "a") (data (i32.const 284742) "a") (data (i32.const 284745) "a") (data (i32.const 284748) "a") (data (i32.const 284751) "a") (data (i32.const 284754) "a") (data (i32.const 284757) "a") (data (i32.const 284760) "a") (data (i32.const 284763) "a") (data (i32.const 284766) "a") (data (i32.const 284769) "a") (data (i32.const 284772) "a") (data (i32.const 284775) "a") (data (i32.const 284778) "a") (data (i32.const 284781) "a") (data (i32.const 284784) "a") (data (i32.const 284787) "a") (data (i32.const 284790) "a") (data (i32.const 284793) "a") (data (i32.const 284796) "a") (data (i32.const 284799) "a") (data (i32.const 284802) "a") (data (i32.const 284805) "a") (data (i32.const 284808) "a") (data (i32.const 284811) "a") (data (i32.const 284814) "a") (data (i32.const 284817) "a") (data (i32.const 284820) "a") (data (i32.const 284823) "a") (data (i32.const 284826) "a") (data (i32.const 284829) "a") (data (i32.const 284832) "a") (data (i32.const 284835) "a") (data (i32.const 284838) "a") (data (i32.const 284841) "a") (data (i32.const 284844) "a") (data (i32.const 284847) "a") (data (i32.const 284850) "a") (data (i32.const 284853) "a") (data (i32.const 284856) "a") (data (i32.const 284859) "a") (data (i32.const 284862) "a") (data (i32.const 284865) "a") (data (i32.const 284868) "a") (data (i32.const 284871) "a") (data (i32.const 284874) "a") (data (i32.const 284877) "a") (data (i32.const 284880) "a") (data (i32.const 284883) "a") (data (i32.const 284886) "a") (data (i32.const 284889) "a") (data (i32.const 284892) "a") (data (i32.const 284895) "a") (data (i32.const 284898) "a") (data (i32.const 284901) "a") (data (i32.const 284904) "a") (data (i32.const 284907) "a") (data (i32.const 284910) "a") (data (i32.const 284913) "a") (data (i32.const 284916) "a") (data (i32.const 284919) "a") (data (i32.const 284922) "a") (data (i32.const 284925) "a") (data (i32.const 284928) "a") (data (i32.const 284931) "a") (data (i32.const 284934) "a") (data (i32.const 284937) "a") (data (i32.const 284940) "a") (data (i32.const 284943) "a") (data (i32.const 284946) "a") (data (i32.const 284949) "a") (data (i32.const 284952) "a") (data (i32.const 284955) "a") (data (i32.const 284958) "a") (data (i32.const 284961) "a") (data (i32.const 284964) "a") (data (i32.const 284967) "a") (data (i32.const 284970) "a") (data (i32.const 284973) "a") (data (i32.const 284976) "a") (data (i32.const 284979) "a") (data (i32.const 284982) "a") (data (i32.const 284985) "a") (data (i32.const 284988) "a") (data (i32.const 284991) "a") (data (i32.const 284994) "a") (data (i32.const 284997) "a") (data (i32.const 285000) "a") (data (i32.const 285003) "a") (data (i32.const 285006) "a") (data (i32.const 285009) "a") (data (i32.const 285012) "a") (data (i32.const 285015) "a") (data (i32.const 285018) "a") (data (i32.const 285021) "a") (data (i32.const 285024) "a") (data (i32.const 285027) "a") (data (i32.const 285030) "a") (data (i32.const 285033) "a") (data (i32.const 285036) "a") (data (i32.const 285039) "a") (data (i32.const 285042) "a") (data (i32.const 285045) "a") (data (i32.const 285048) "a") (data (i32.const 285051) "a") (data (i32.const 285054) "a") (data (i32.const 285057) "a") (data (i32.const 285060) "a") (data (i32.const 285063) "a") (data (i32.const 285066) "a") (data (i32.const 285069) "a") (data (i32.const 285072) "a") (data (i32.const 285075) "a") (data (i32.const 285078) "a") (data (i32.const 285081) "a") (data (i32.const 285084) "a") (data (i32.const 285087) "a") (data (i32.const 285090) "a") (data (i32.const 285093) "a") (data (i32.const 285096) "a") (data (i32.const 285099) "a") (data (i32.const 285102) "a") (data (i32.const 285105) "a") (data (i32.const 285108) "a") (data (i32.const 285111) "a") (data (i32.const 285114) "a") (data (i32.const 285117) "a") (data (i32.const 285120) "a") (data (i32.const 285123) "a") (data (i32.const 285126) "a") (data (i32.const 285129) "a") (data (i32.const 285132) "a") (data (i32.const 285135) "a") (data (i32.const 285138) "a") (data (i32.const 285141) "a") (data (i32.const 285144) "a") (data (i32.const 285147) "a") (data (i32.const 285150) "a") (data (i32.const 285153) "a") (data (i32.const 285156) "a") (data (i32.const 285159) "a") (data (i32.const 285162) "a") (data (i32.const 285165) "a") (data (i32.const 285168) "a") (data (i32.const 285171) "a") (data (i32.const 285174) "a") (data (i32.const 285177) "a") (data (i32.const 285180) "a") (data (i32.const 285183) "a") (data (i32.const 285186) "a") (data (i32.const 285189) "a") (data (i32.const 285192) "a") (data (i32.const 285195) "a") (data (i32.const 285198) "a") (data (i32.const 285201) "a") (data (i32.const 285204) "a") (data (i32.const 285207) "a") (data (i32.const 285210) "a") (data (i32.const 285213) "a") (data (i32.const 285216) "a") (data (i32.const 285219) "a") (data (i32.const 285222) "a") (data (i32.const 285225) "a") (data (i32.const 285228) "a") (data (i32.const 285231) "a") (data (i32.const 285234) "a") (data (i32.const 285237) "a") (data (i32.const 285240) "a") (data (i32.const 285243) "a") (data (i32.const 285246) "a") (data (i32.const 285249) "a") (data (i32.const 285252) "a") (data (i32.const 285255) "a") (data (i32.const 285258) "a") (data (i32.const 285261) "a") (data (i32.const 285264) "a") (data (i32.const 285267) "a") (data (i32.const 285270) "a") (data (i32.const 285273) "a") (data (i32.const 285276) "a") (data (i32.const 285279) "a") (data (i32.const 285282) "a") (data (i32.const 285285) "a") (data (i32.const 285288) "a") (data (i32.const 285291) "a") (data (i32.const 285294) "a") (data (i32.const 285297) "a") (data (i32.const 285300) "a") (data (i32.const 285303) "a") (data (i32.const 285306) "a") (data (i32.const 285309) "a") (data (i32.const 285312) "a") (data (i32.const 285315) "a") (data (i32.const 285318) "a") (data (i32.const 285321) "a") (data (i32.const 285324) "a") (data (i32.const 285327) "a") (data (i32.const 285330) "a") (data (i32.const 285333) "a") (data (i32.const 285336) "a") (data (i32.const 285339) "a") (data (i32.const 285342) "a") (data (i32.const 285345) "a") (data (i32.const 285348) "a") (data (i32.const 285351) "a") (data (i32.const 285354) "a") (data (i32.const 285357) "a") (data (i32.const 285360) "a") (data (i32.const 285363) "a") (data (i32.const 285366) "a") (data (i32.const 285369) "a") (data (i32.const 285372) "a") (data (i32.const 285375) "a") (data (i32.const 285378) "a") (data (i32.const 285381) "a") (data (i32.const 285384) "a") (data (i32.const 285387) "a") (data (i32.const 285390) "a") (data (i32.const 285393) "a") (data (i32.const 285396) "a") (data (i32.const 285399) "a") (data (i32.const 285402) "a") (data (i32.const 285405) "a") (data (i32.const 285408) "a") (data (i32.const 285411) "a") (data (i32.const 285414) "a") (data (i32.const 285417) "a") (data (i32.const 285420) "a") (data (i32.const 285423) "a") (data (i32.const 285426) "a") (data (i32.const 285429) "a") (data (i32.const 285432) "a") (data (i32.const 285435) "a") (data (i32.const 285438) "a") (data (i32.const 285441) "a") (data (i32.const 285444) "a") (data (i32.const 285447) "a") (data (i32.const 285450) "a") (data (i32.const 285453) "a") (data (i32.const 285456) "a") (data (i32.const 285459) "a") (data (i32.const 285462) "a") (data (i32.const 285465) "a") (data (i32.const 285468) "a") (data (i32.const 285471) "a") (data (i32.const 285474) "a") (data (i32.const 285477) "a") (data (i32.const 285480) "a") (data (i32.const 285483) "a") (data (i32.const 285486) "a") (data (i32.const 285489) "a") (data (i32.const 285492) "a") (data (i32.const 285495) "a") (data (i32.const 285498) "a") (data (i32.const 285501) "a") (data (i32.const 285504) "a") (data (i32.const 285507) "a") (data (i32.const 285510) "a") (data (i32.const 285513) "a") (data (i32.const 285516) "a") (data (i32.const 285519) "a") (data (i32.const 285522) "a") (data (i32.const 285525) "a") (data (i32.const 285528) "a") (data (i32.const 285531) "a") (data (i32.const 285534) "a") (data (i32.const 285537) "a") (data (i32.const 285540) "a") (data (i32.const 285543) "a") (data (i32.const 285546) "a") (data (i32.const 285549) "a") (data (i32.const 285552) "a") (data (i32.const 285555) "a") (data (i32.const 285558) "a") (data (i32.const 285561) "a") (data (i32.const 285564) "a") (data (i32.const 285567) "a") (data (i32.const 285570) "a") (data (i32.const 285573) "a") (data (i32.const 285576) "a") (data (i32.const 285579) "a") (data (i32.const 285582) "a") (data (i32.const 285585) "a") (data (i32.const 285588) "a") (data (i32.const 285591) "a") (data (i32.const 285594) "a") (data (i32.const 285597) "a") (data (i32.const 285600) "a") (data (i32.const 285603) "a") (data (i32.const 285606) "a") (data (i32.const 285609) "a") (data (i32.const 285612) "a") (data (i32.const 285615) "a") (data (i32.const 285618) "a") (data (i32.const 285621) "a") (data (i32.const 285624) "a") (data (i32.const 285627) "a") (data (i32.const 285630) "a") (data (i32.const 285633) "a") (data (i32.const 285636) "a") (data (i32.const 285639) "a") (data (i32.const 285642) "a") (data (i32.const 285645) "a") (data (i32.const 285648) "a") (data (i32.const 285651) "a") (data (i32.const 285654) "a") (data (i32.const 285657) "a") (data (i32.const 285660) "a") (data (i32.const 285663) "a") (data (i32.const 285666) "a") (data (i32.const 285669) "a") (data (i32.const 285672) "a") (data (i32.const 285675) "a") (data (i32.const 285678) "a") (data (i32.const 285681) "a") (data (i32.const 285684) "a") (data (i32.const 285687) "a") (data (i32.const 285690) "a") (data (i32.const 285693) "a") (data (i32.const 285696) "a") (data (i32.const 285699) "a") (data (i32.const 285702) "a") (data (i32.const 285705) "a") (data (i32.const 285708) "a") (data (i32.const 285711) "a") (data (i32.const 285714) "a") (data (i32.const 285717) "a") (data (i32.const 285720) "a") (data (i32.const 285723) "a") (data (i32.const 285726) "a") (data (i32.const 285729) "a") (data (i32.const 285732) "a") (data (i32.const 285735) "a") (data (i32.const 285738) "a") (data (i32.const 285741) "a") (data (i32.const 285744) "a") (data (i32.const 285747) "a") (data (i32.const 285750) "a") (data (i32.const 285753) "a") (data (i32.const 285756) "a") (data (i32.const 285759) "a") (data (i32.const 285762) "a") (data (i32.const 285765) "a") (data (i32.const 285768) "a") (data (i32.const 285771) "a") (data (i32.const 285774) "a") (data (i32.const 285777) "a") (data (i32.const 285780) "a") (data (i32.const 285783) "a") (data (i32.const 285786) "a") (data (i32.const 285789) "a") (data (i32.const 285792) "a") (data (i32.const 285795) "a") (data (i32.const 285798) "a") (data (i32.const 285801) "a") (data (i32.const 285804) "a") (data (i32.const 285807) "a") (data (i32.const 285810) "a") (data (i32.const 285813) "a") (data (i32.const 285816) "a") (data (i32.const 285819) "a") (data (i32.const 285822) "a") (data (i32.const 285825) "a") (data (i32.const 285828) "a") (data (i32.const 285831) "a") (data (i32.const 285834) "a") (data (i32.const 285837) "a") (data (i32.const 285840) "a") (data (i32.const 285843) "a") (data (i32.const 285846) "a") (data (i32.const 285849) "a") (data (i32.const 285852) "a") (data (i32.const 285855) "a") (data (i32.const 285858) "a") (data (i32.const 285861) "a") (data (i32.const 285864) "a") (data (i32.const 285867) "a") (data (i32.const 285870) "a") (data (i32.const 285873) "a") (data (i32.const 285876) "a") (data (i32.const 285879) "a") (data (i32.const 285882) "a") (data (i32.const 285885) "a") (data (i32.const 285888) "a") (data (i32.const 285891) "a") (data (i32.const 285894) "a") (data (i32.const 285897) "a") (data (i32.const 285900) "a") (data (i32.const 285903) "a") (data (i32.const 285906) "a") (data (i32.const 285909) "a") (data (i32.const 285912) "a") (data (i32.const 285915) "a") (data (i32.const 285918) "a") (data (i32.const 285921) "a") (data (i32.const 285924) "a") (data (i32.const 285927) "a") (data (i32.const 285930) "a") (data (i32.const 285933) "a") (data (i32.const 285936) "a") (data (i32.const 285939) "a") (data (i32.const 285942) "a") (data (i32.const 285945) "a") (data (i32.const 285948) "a") (data (i32.const 285951) "a") (data (i32.const 285954) "a") (data (i32.const 285957) "a") (data (i32.const 285960) "a") (data (i32.const 285963) "a") (data (i32.const 285966) "a") (data (i32.const 285969) "a") (data (i32.const 285972) "a") (data (i32.const 285975) "a") (data (i32.const 285978) "a") (data (i32.const 285981) "a") (data (i32.const 285984) "a") (data (i32.const 285987) "a") (data (i32.const 285990) "a") (data (i32.const 285993) "a") (data (i32.const 285996) "a") (data (i32.const 285999) "a") (data (i32.const 286002) "a") (data (i32.const 286005) "a") (data (i32.const 286008) "a") (data (i32.const 286011) "a") (data (i32.const 286014) "a") (data (i32.const 286017) "a") (data (i32.const 286020) "a") (data (i32.const 286023) "a") (data (i32.const 286026) "a") (data (i32.const 286029) "a") (data (i32.const 286032) "a") (data (i32.const 286035) "a") (data (i32.const 286038) "a") (data (i32.const 286041) "a") (data (i32.const 286044) "a") (data (i32.const 286047) "a") (data (i32.const 286050) "a") (data (i32.const 286053) "a") (data (i32.const 286056) "a") (data (i32.const 286059) "a") (data (i32.const 286062) "a") (data (i32.const 286065) "a") (data (i32.const 286068) "a") (data (i32.const 286071) "a") (data (i32.const 286074) "a") (data (i32.const 286077) "a") (data (i32.const 286080) "a") (data (i32.const 286083) "a") (data (i32.const 286086) "a") (data (i32.const 286089) "a") (data (i32.const 286092) "a") (data (i32.const 286095) "a") (data (i32.const 286098) "a") (data (i32.const 286101) "a") (data (i32.const 286104) "a") (data (i32.const 286107) "a") (data (i32.const 286110) "a") (data (i32.const 286113) "a") (data (i32.const 286116) "a") (data (i32.const 286119) "a") (data (i32.const 286122) "a") (data (i32.const 286125) "a") (data (i32.const 286128) "a") (data (i32.const 286131) "a") (data (i32.const 286134) "a") (data (i32.const 286137) "a") (data (i32.const 286140) "a") (data (i32.const 286143) "a") (data (i32.const 286146) "a") (data (i32.const 286149) "a") (data (i32.const 286152) "a") (data (i32.const 286155) "a") (data (i32.const 286158) "a") (data (i32.const 286161) "a") (data (i32.const 286164) "a") (data (i32.const 286167) "a") (data (i32.const 286170) "a") (data (i32.const 286173) "a") (data (i32.const 286176) "a") (data (i32.const 286179) "a") (data (i32.const 286182) "a") (data (i32.const 286185) "a") (data (i32.const 286188) "a") (data (i32.const 286191) "a") (data (i32.const 286194) "a") (data (i32.const 286197) "a") (data (i32.const 286200) "a") (data (i32.const 286203) "a") (data (i32.const 286206) "a") (data (i32.const 286209) "a") (data (i32.const 286212) "a") (data (i32.const 286215) "a") (data (i32.const 286218) "a") (data (i32.const 286221) "a") (data (i32.const 286224) "a") (data (i32.const 286227) "a") (data (i32.const 286230) "a") (data (i32.const 286233) "a") (data (i32.const 286236) "a") (data (i32.const 286239) "a") (data (i32.const 286242) "a") (data (i32.const 286245) "a") (data (i32.const 286248) "a") (data (i32.const 286251) "a") (data (i32.const 286254) "a") (data (i32.const 286257) "a") (data (i32.const 286260) "a") (data (i32.const 286263) "a") (data (i32.const 286266) "a") (data (i32.const 286269) "a") (data (i32.const 286272) "a") (data (i32.const 286275) "a") (data (i32.const 286278) "a") (data (i32.const 286281) "a") (data (i32.const 286284) "a") (data (i32.const 286287) "a") (data (i32.const 286290) "a") (data (i32.const 286293) "a") (data (i32.const 286296) "a") (data (i32.const 286299) "a") (data (i32.const 286302) "a") (data (i32.const 286305) "a") (data (i32.const 286308) "a") (data (i32.const 286311) "a") (data (i32.const 286314) "a") (data (i32.const 286317) "a") (data (i32.const 286320) "a") (data (i32.const 286323) "a") (data (i32.const 286326) "a") (data (i32.const 286329) "a") (data (i32.const 286332) "a") (data (i32.const 286335) "a") (data (i32.const 286338) "a") (data (i32.const 286341) "a") (data (i32.const 286344) "a") (data (i32.const 286347) "a") (data (i32.const 286350) "a") (data (i32.const 286353) "a") (data (i32.const 286356) "a") (data (i32.const 286359) "a") (data (i32.const 286362) "a") (data (i32.const 286365) "a") (data (i32.const 286368) "a") (data (i32.const 286371) "a") (data (i32.const 286374) "a") (data (i32.const 286377) "a") (data (i32.const 286380) "a") (data (i32.const 286383) "a") (data (i32.const 286386) "a") (data (i32.const 286389) "a") (data (i32.const 286392) "a") (data (i32.const 286395) "a") (data (i32.const 286398) "a") (data (i32.const 286401) "a") (data (i32.const 286404) "a") (data (i32.const 286407) "a") (data (i32.const 286410) "a") (data (i32.const 286413) "a") (data (i32.const 286416) "a") (data (i32.const 286419) "a") (data (i32.const 286422) "a") (data (i32.const 286425) "a") (data (i32.const 286428) "a") (data (i32.const 286431) "a") (data (i32.const 286434) "a") (data (i32.const 286437) "a") (data (i32.const 286440) "a") (data (i32.const 286443) "a") (data (i32.const 286446) "a") (data (i32.const 286449) "a") (data (i32.const 286452) "a") (data (i32.const 286455) "a") (data (i32.const 286458) "a") (data (i32.const 286461) "a") (data (i32.const 286464) "a") (data (i32.const 286467) "a") (data (i32.const 286470) "a") (data (i32.const 286473) "a") (data (i32.const 286476) "a") (data (i32.const 286479) "a") (data (i32.const 286482) "a") (data (i32.const 286485) "a") (data (i32.const 286488) "a") (data (i32.const 286491) "a") (data (i32.const 286494) "a") (data (i32.const 286497) "a") (data (i32.const 286500) "a") (data (i32.const 286503) "a") (data (i32.const 286506) "a") (data (i32.const 286509) "a") (data (i32.const 286512) "a") (data (i32.const 286515) "a") (data (i32.const 286518) "a") (data (i32.const 286521) "a") (data (i32.const 286524) "a") (data (i32.const 286527) "a") (data (i32.const 286530) "a") (data (i32.const 286533) "a") (data (i32.const 286536) "a") (data (i32.const 286539) "a") (data (i32.const 286542) "a") (data (i32.const 286545) "a") (data (i32.const 286548) "a") (data (i32.const 286551) "a") (data (i32.const 286554) "a") (data (i32.const 286557) "a") (data (i32.const 286560) "a") (data (i32.const 286563) "a") (data (i32.const 286566) "a") (data (i32.const 286569) "a") (data (i32.const 286572) "a") (data (i32.const 286575) "a") (data (i32.const 286578) "a") (data (i32.const 286581) "a") (data (i32.const 286584) "a") (data (i32.const 286587) "a") (data (i32.const 286590) "a") (data (i32.const 286593) "a") (data (i32.const 286596) "a") (data (i32.const 286599) "a") (data (i32.const 286602) "a") (data (i32.const 286605) "a") (data (i32.const 286608) "a") (data (i32.const 286611) "a") (data (i32.const 286614) "a") (data (i32.const 286617) "a") (data (i32.const 286620) "a") (data (i32.const 286623) "a") (data (i32.const 286626) "a") (data (i32.const 286629) "a") (data (i32.const 286632) "a") (data (i32.const 286635) "a") (data (i32.const 286638) "a") (data (i32.const 286641) "a") (data (i32.const 286644) "a") (data (i32.const 286647) "a") (data (i32.const 286650) "a") (data (i32.const 286653) "a") (data (i32.const 286656) "a") (data (i32.const 286659) "a") (data (i32.const 286662) "a") (data (i32.const 286665) "a") (data (i32.const 286668) "a") (data (i32.const 286671) "a") (data (i32.const 286674) "a") (data (i32.const 286677) "a") (data (i32.const 286680) "a") (data (i32.const 286683) "a") (data (i32.const 286686) "a") (data (i32.const 286689) "a") (data (i32.const 286692) "a") (data (i32.const 286695) "a") (data (i32.const 286698) "a") (data (i32.const 286701) "a") (data (i32.const 286704) "a") (data (i32.const 286707) "a") (data (i32.const 286710) "a") (data (i32.const 286713) "a") (data (i32.const 286716) "a") (data (i32.const 286719) "a") (data (i32.const 286722) "a") (data (i32.const 286725) "a") (data (i32.const 286728) "a") (data (i32.const 286731) "a") (data (i32.const 286734) "a") (data (i32.const 286737) "a") (data (i32.const 286740) "a") (data (i32.const 286743) "a") (data (i32.const 286746) "a") (data (i32.const 286749) "a") (data (i32.const 286752) "a") (data (i32.const 286755) "a") (data (i32.const 286758) "a") (data (i32.const 286761) "a") (data (i32.const 286764) "a") (data (i32.const 286767) "a") (data (i32.const 286770) "a") (data (i32.const 286773) "a") (data (i32.const 286776) "a") (data (i32.const 286779) "a") (data (i32.const 286782) "a") (data (i32.const 286785) "a") (data (i32.const 286788) "a") (data (i32.const 286791) "a") (data (i32.const 286794) "a") (data (i32.const 286797) "a") (data (i32.const 286800) "a") (data (i32.const 286803) "a") (data (i32.const 286806) "a") (data (i32.const 286809) "a") (data (i32.const 286812) "a") (data (i32.const 286815) "a") (data (i32.const 286818) "a") (data (i32.const 286821) "a") (data (i32.const 286824) "a") (data (i32.const 286827) "a") (data (i32.const 286830) "a") (data (i32.const 286833) "a") (data (i32.const 286836) "a") (data (i32.const 286839) "a") (data (i32.const 286842) "a") (data (i32.const 286845) "a") (data (i32.const 286848) "a") (data (i32.const 286851) "a") (data (i32.const 286854) "a") (data (i32.const 286857) "a") (data (i32.const 286860) "a") (data (i32.const 286863) "a") (data (i32.const 286866) "a") (data (i32.const 286869) "a") (data (i32.const 286872) "a") (data (i32.const 286875) "a") (data (i32.const 286878) "a") (data (i32.const 286881) "a") (data (i32.const 286884) "a") (data (i32.const 286887) "a") (data (i32.const 286890) "a") (data (i32.const 286893) "a") (data (i32.const 286896) "a") (data (i32.const 286899) "a") (data (i32.const 286902) "a") (data (i32.const 286905) "a") (data (i32.const 286908) "a") (data (i32.const 286911) "a") (data (i32.const 286914) "a") (data (i32.const 286917) "a") (data (i32.const 286920) "a") (data (i32.const 286923) "a") (data (i32.const 286926) "a") (data (i32.const 286929) "a") (data (i32.const 286932) "a") (data (i32.const 286935) "a") (data (i32.const 286938) "a") (data (i32.const 286941) "a") (data (i32.const 286944) "a") (data (i32.const 286947) "a") (data (i32.const 286950) "a") (data (i32.const 286953) "a") (data (i32.const 286956) "a") (data (i32.const 286959) "a") (data (i32.const 286962) "a") (data (i32.const 286965) "a") (data (i32.const 286968) "a") (data (i32.const 286971) "a") (data (i32.const 286974) "a") (data (i32.const 286977) "a") (data (i32.const 286980) "a") (data (i32.const 286983) "a") (data (i32.const 286986) "a") (data (i32.const 286989) "a") (data (i32.const 286992) "a") (data (i32.const 286995) "a") (data (i32.const 286998) "a") (data (i32.const 287001) "a") (data (i32.const 287004) "a") (data (i32.const 287007) "a") (data (i32.const 287010) "a") (data (i32.const 287013) "a") (data (i32.const 287016) "a") (data (i32.const 287019) "a") (data (i32.const 287022) "a") (data (i32.const 287025) "a") (data (i32.const 287028) "a") (data (i32.const 287031) "a") (data (i32.const 287034) "a") (data (i32.const 287037) "a") (data (i32.const 287040) "a") (data (i32.const 287043) "a") (data (i32.const 287046) "a") (data (i32.const 287049) "a") (data (i32.const 287052) "a") (data (i32.const 287055) "a") (data (i32.const 287058) "a") (data (i32.const 287061) "a") (data (i32.const 287064) "a") (data (i32.const 287067) "a") (data (i32.const 287070) "a") (data (i32.const 287073) "a") (data (i32.const 287076) "a") (data (i32.const 287079) "a") (data (i32.const 287082) "a") (data (i32.const 287085) "a") (data (i32.const 287088) "a") (data (i32.const 287091) "a") (data (i32.const 287094) "a") (data (i32.const 287097) "a") (data (i32.const 287100) "a") (data (i32.const 287103) "a") (data (i32.const 287106) "a") (data (i32.const 287109) "a") (data (i32.const 287112) "a") (data (i32.const 287115) "a") (data (i32.const 287118) "a") (data (i32.const 287121) "a") (data (i32.const 287124) "a") (data (i32.const 287127) "a") (data (i32.const 287130) "a") (data (i32.const 287133) "a") (data (i32.const 287136) "a") (data (i32.const 287139) "a") (data (i32.const 287142) "a") (data (i32.const 287145) "a") (data (i32.const 287148) "a") (data (i32.const 287151) "a") (data (i32.const 287154) "a") (data (i32.const 287157) "a") (data (i32.const 287160) "a") (data (i32.const 287163) "a") (data (i32.const 287166) "a") (data (i32.const 287169) "a") (data (i32.const 287172) "a") (data (i32.const 287175) "a") (data (i32.const 287178) "a") (data (i32.const 287181) "a") (data (i32.const 287184) "a") (data (i32.const 287187) "a") (data (i32.const 287190) "a") (data (i32.const 287193) "a") (data (i32.const 287196) "a") (data (i32.const 287199) "a") (data (i32.const 287202) "a") (data (i32.const 287205) "a") (data (i32.const 287208) "a") (data (i32.const 287211) "a") (data (i32.const 287214) "a") (data (i32.const 287217) "a") (data (i32.const 287220) "a") (data (i32.const 287223) "a") (data (i32.const 287226) "a") (data (i32.const 287229) "a") (data (i32.const 287232) "a") (data (i32.const 287235) "a") (data (i32.const 287238) "a") (data (i32.const 287241) "a") (data (i32.const 287244) "a") (data (i32.const 287247) "a") (data (i32.const 287250) "a") (data (i32.const 287253) "a") (data (i32.const 287256) "a") (data (i32.const 287259) "a") (data (i32.const 287262) "a") (data (i32.const 287265) "a") (data (i32.const 287268) "a") (data (i32.const 287271) "a") (data (i32.const 287274) "a") (data (i32.const 287277) "a") (data (i32.const 287280) "a") (data (i32.const 287283) "a") (data (i32.const 287286) "a") (data (i32.const 287289) "a") (data (i32.const 287292) "a") (data (i32.const 287295) "a") (data (i32.const 287298) "a") (data (i32.const 287301) "a") (data (i32.const 287304) "a") (data (i32.const 287307) "a") (data (i32.const 287310) "a") (data (i32.const 287313) "a") (data (i32.const 287316) "a") (data (i32.const 287319) "a") (data (i32.const 287322) "a") (data (i32.const 287325) "a") (data (i32.const 287328) "a") (data (i32.const 287331) "a") (data (i32.const 287334) "a") (data (i32.const 287337) "a") (data (i32.const 287340) "a") (data (i32.const 287343) "a") (data (i32.const 287346) "a") (data (i32.const 287349) "a") (data (i32.const 287352) "a") (data (i32.const 287355) "a") (data (i32.const 287358) "a") (data (i32.const 287361) "a") (data (i32.const 287364) "a") (data (i32.const 287367) "a") (data (i32.const 287370) "a") (data (i32.const 287373) "a") (data (i32.const 287376) "a") (data (i32.const 287379) "a") (data (i32.const 287382) "a") (data (i32.const 287385) "a") (data (i32.const 287388) "a") (data (i32.const 287391) "a") (data (i32.const 287394) "a") (data (i32.const 287397) "a") (data (i32.const 287400) "a") (data (i32.const 287403) "a") (data (i32.const 287406) "a") (data (i32.const 287409) "a") (data (i32.const 287412) "a") (data (i32.const 287415) "a") (data (i32.const 287418) "a") (data (i32.const 287421) "a") (data (i32.const 287424) "a") (data (i32.const 287427) "a") (data (i32.const 287430) "a") (data (i32.const 287433) "a") (data (i32.const 287436) "a") (data (i32.const 287439) "a") (data (i32.const 287442) "a") (data (i32.const 287445) "a") (data (i32.const 287448) "a") (data (i32.const 287451) "a") (data (i32.const 287454) "a") (data (i32.const 287457) "a") (data (i32.const 287460) "a") (data (i32.const 287463) "a") (data (i32.const 287466) "a") (data (i32.const 287469) "a") (data (i32.const 287472) "a") (data (i32.const 287475) "a") (data (i32.const 287478) "a") (data (i32.const 287481) "a") (data (i32.const 287484) "a") (data (i32.const 287487) "a") (data (i32.const 287490) "a") (data (i32.const 287493) "a") (data (i32.const 287496) "a") (data (i32.const 287499) "a") (data (i32.const 287502) "a") (data (i32.const 287505) "a") (data (i32.const 287508) "a") (data (i32.const 287511) "a") (data (i32.const 287514) "a") (data (i32.const 287517) "a") (data (i32.const 287520) "a") (data (i32.const 287523) "a") (data (i32.const 287526) "a") (data (i32.const 287529) "a") (data (i32.const 287532) "a") (data (i32.const 287535) "a") (data (i32.const 287538) "a") (data (i32.const 287541) "a") (data (i32.const 287544) "a") (data (i32.const 287547) "a") (data (i32.const 287550) "a") (data (i32.const 287553) "a") (data (i32.const 287556) "a") (data (i32.const 287559) "a") (data (i32.const 287562) "a") (data (i32.const 287565) "a") (data (i32.const 287568) "a") (data (i32.const 287571) "a") (data (i32.const 287574) "a") (data (i32.const 287577) "a") (data (i32.const 287580) "a") (data (i32.const 287583) "a") (data (i32.const 287586) "a") (data (i32.const 287589) "a") (data (i32.const 287592) "a") (data (i32.const 287595) "a") (data (i32.const 287598) "a") (data (i32.const 287601) "a") (data (i32.const 287604) "a") (data (i32.const 287607) "a") (data (i32.const 287610) "a") (data (i32.const 287613) "a") (data (i32.const 287616) "a") (data (i32.const 287619) "a") (data (i32.const 287622) "a") (data (i32.const 287625) "a") (data (i32.const 287628) "a") (data (i32.const 287631) "a") (data (i32.const 287634) "a") (data (i32.const 287637) "a") (data (i32.const 287640) "a") (data (i32.const 287643) "a") (data (i32.const 287646) "a") (data (i32.const 287649) "a") (data (i32.const 287652) "a") (data (i32.const 287655) "a") (data (i32.const 287658) "a") (data (i32.const 287661) "a") (data (i32.const 287664) "a") (data (i32.const 287667) "a") (data (i32.const 287670) "a") (data (i32.const 287673) "a") (data (i32.const 287676) "a") (data (i32.const 287679) "a") (data (i32.const 287682) "a") (data (i32.const 287685) "a") (data (i32.const 287688) "a") (data (i32.const 287691) "a") (data (i32.const 287694) "a") (data (i32.const 287697) "a") (data (i32.const 287700) "a") (data (i32.const 287703) "a") (data (i32.const 287706) "a") (data (i32.const 287709) "a") (data (i32.const 287712) "a") (data (i32.const 287715) "a") (data (i32.const 287718) "a") (data (i32.const 287721) "a") (data (i32.const 287724) "a") (data (i32.const 287727) "a") (data (i32.const 287730) "a") (data (i32.const 287733) "a") (data (i32.const 287736) "a") (data (i32.const 287739) "a") (data (i32.const 287742) "a") (data (i32.const 287745) "a") (data (i32.const 287748) "a") (data (i32.const 287751) "a") (data (i32.const 287754) "a") (data (i32.const 287757) "a") (data (i32.const 287760) "a") (data (i32.const 287763) "a") (data (i32.const 287766) "a") (data (i32.const 287769) "a") (data (i32.const 287772) "a") (data (i32.const 287775) "a") (data (i32.const 287778) "a") (data (i32.const 287781) "a") (data (i32.const 287784) "a") (data (i32.const 287787) "a") (data (i32.const 287790) "a") (data (i32.const 287793) "a") (data (i32.const 287796) "a") (data (i32.const 287799) "a") (data (i32.const 287802) "a") (data (i32.const 287805) "a") (data (i32.const 287808) "a") (data (i32.const 287811) "a") (data (i32.const 287814) "a") (data (i32.const 287817) "a") (data (i32.const 287820) "a") (data (i32.const 287823) "a") (data (i32.const 287826) "a") (data (i32.const 287829) "a") (data (i32.const 287832) "a") (data (i32.const 287835) "a") (data (i32.const 287838) "a") (data (i32.const 287841) "a") (data (i32.const 287844) "a") (data (i32.const 287847) "a") (data (i32.const 287850) "a") (data (i32.const 287853) "a") (data (i32.const 287856) "a") (data (i32.const 287859) "a") (data (i32.const 287862) "a") (data (i32.const 287865) "a") (data (i32.const 287868) "a") (data (i32.const 287871) "a") (data (i32.const 287874) "a") (data (i32.const 287877) "a") (data (i32.const 287880) "a") (data (i32.const 287883) "a") (data (i32.const 287886) "a") (data (i32.const 287889) "a") (data (i32.const 287892) "a") (data (i32.const 287895) "a") (data (i32.const 287898) "a") (data (i32.const 287901) "a") (data (i32.const 287904) "a") (data (i32.const 287907) "a") (data (i32.const 287910) "a") (data (i32.const 287913) "a") (data (i32.const 287916) "a") (data (i32.const 287919) "a") (data (i32.const 287922) "a") (data (i32.const 287925) "a") (data (i32.const 287928) "a") (data (i32.const 287931) "a") (data (i32.const 287934) "a") (data (i32.const 287937) "a") (data (i32.const 287940) "a") (data (i32.const 287943) "a") (data (i32.const 287946) "a") (data (i32.const 287949) "a") (data (i32.const 287952) "a") (data (i32.const 287955) "a") (data (i32.const 287958) "a") (data (i32.const 287961) "a") (data (i32.const 287964) "a") (data (i32.const 287967) "a") (data (i32.const 287970) "a") (data (i32.const 287973) "a") (data (i32.const 287976) "a") (data (i32.const 287979) "a") (data (i32.const 287982) "a") (data (i32.const 287985) "a") (data (i32.const 287988) "a") (data (i32.const 287991) "a") (data (i32.const 287994) "a") (data (i32.const 287997) "a") (data (i32.const 288000) "a") (data (i32.const 288003) "a") (data (i32.const 288006) "a") (data (i32.const 288009) "a") (data (i32.const 288012) "a") (data (i32.const 288015) "a") (data (i32.const 288018) "a") (data (i32.const 288021) "a") (data (i32.const 288024) "a") (data (i32.const 288027) "a") (data (i32.const 288030) "a") (data (i32.const 288033) "a") (data (i32.const 288036) "a") (data (i32.const 288039) "a") (data (i32.const 288042) "a") (data (i32.const 288045) "a") (data (i32.const 288048) "a") (data (i32.const 288051) "a") (data (i32.const 288054) "a") (data (i32.const 288057) "a") (data (i32.const 288060) "a") (data (i32.const 288063) "a") (data (i32.const 288066) "a") (data (i32.const 288069) "a") (data (i32.const 288072) "a") (data (i32.const 288075) "a") (data (i32.const 288078) "a") (data (i32.const 288081) "a") (data (i32.const 288084) "a") (data (i32.const 288087) "a") (data (i32.const 288090) "a") (data (i32.const 288093) "a") (data (i32.const 288096) "a") (data (i32.const 288099) "a") (data (i32.const 288102) "a") (data (i32.const 288105) "a") (data (i32.const 288108) "a") (data (i32.const 288111) "a") (data (i32.const 288114) "a") (data (i32.const 288117) "a") (data (i32.const 288120) "a") (data (i32.const 288123) "a") (data (i32.const 288126) "a") (data (i32.const 288129) "a") (data (i32.const 288132) "a") (data (i32.const 288135) "a") (data (i32.const 288138) "a") (data (i32.const 288141) "a") (data (i32.const 288144) "a") (data (i32.const 288147) "a") (data (i32.const 288150) "a") (data (i32.const 288153) "a") (data (i32.const 288156) "a") (data (i32.const 288159) "a") (data (i32.const 288162) "a") (data (i32.const 288165) "a") (data (i32.const 288168) "a") (data (i32.const 288171) "a") (data (i32.const 288174) "a") (data (i32.const 288177) "a") (data (i32.const 288180) "a") (data (i32.const 288183) "a") (data (i32.const 288186) "a") (data (i32.const 288189) "a") (data (i32.const 288192) "a") (data (i32.const 288195) "a") (data (i32.const 288198) "a") (data (i32.const 288201) "a") (data (i32.const 288204) "a") (data (i32.const 288207) "a") (data (i32.const 288210) "a") (data (i32.const 288213) "a") (data (i32.const 288216) "a") (data (i32.const 288219) "a") (data (i32.const 288222) "a") (data (i32.const 288225) "a") (data (i32.const 288228) "a") (data (i32.const 288231) "a") (data (i32.const 288234) "a") (data (i32.const 288237) "a") (data (i32.const 288240) "a") (data (i32.const 288243) "a") (data (i32.const 288246) "a") (data (i32.const 288249) "a") (data (i32.const 288252) "a") (data (i32.const 288255) "a") (data (i32.const 288258) "a") (data (i32.const 288261) "a") (data (i32.const 288264) "a") (data (i32.const 288267) "a") (data (i32.const 288270) "a") (data (i32.const 288273) "a") (data (i32.const 288276) "a") (data (i32.const 288279) "a") (data (i32.const 288282) "a") (data (i32.const 288285) "a") (data (i32.const 288288) "a") (data (i32.const 288291) "a") (data (i32.const 288294) "a") (data (i32.const 288297) "a") (data (i32.const 288300) "a") (data (i32.const 288303) "a") (data (i32.const 288306) "a") (data (i32.const 288309) "a") (data (i32.const 288312) "a") (data (i32.const 288315) "a") (data (i32.const 288318) "a") (data (i32.const 288321) "a") (data (i32.const 288324) "a") (data (i32.const 288327) "a") (data (i32.const 288330) "a") (data (i32.const 288333) "a") (data (i32.const 288336) "a") (data (i32.const 288339) "a") (data (i32.const 288342) "a") (data (i32.const 288345) "a") (data (i32.const 288348) "a") (data (i32.const 288351) "a") (data (i32.const 288354) "a") (data (i32.const 288357) "a") (data (i32.const 288360) "a") (data (i32.const 288363) "a") (data (i32.const 288366) "a") (data (i32.const 288369) "a") (data (i32.const 288372) "a") (data (i32.const 288375) "a") (data (i32.const 288378) "a") (data (i32.const 288381) "a") (data (i32.const 288384) "a") (data (i32.const 288387) "a") (data (i32.const 288390) "a") (data (i32.const 288393) "a") (data (i32.const 288396) "a") (data (i32.const 288399) "a") (data (i32.const 288402) "a") (data (i32.const 288405) "a") (data (i32.const 288408) "a") (data (i32.const 288411) "a") (data (i32.const 288414) "a") (data (i32.const 288417) "a") (data (i32.const 288420) "a") (data (i32.const 288423) "a") (data (i32.const 288426) "a") (data (i32.const 288429) "a") (data (i32.const 288432) "a") (data (i32.const 288435) "a") (data (i32.const 288438) "a") (data (i32.const 288441) "a") (data (i32.const 288444) "a") (data (i32.const 288447) "a") (data (i32.const 288450) "a") (data (i32.const 288453) "a") (data (i32.const 288456) "a") (data (i32.const 288459) "a") (data (i32.const 288462) "a") (data (i32.const 288465) "a") (data (i32.const 288468) "a") (data (i32.const 288471) "a") (data (i32.const 288474) "a") (data (i32.const 288477) "a") (data (i32.const 288480) "a") (data (i32.const 288483) "a") (data (i32.const 288486) "a") (data (i32.const 288489) "a") (data (i32.const 288492) "a") (data (i32.const 288495) "a") (data (i32.const 288498) "a") (data (i32.const 288501) "a") (data (i32.const 288504) "a") (data (i32.const 288507) "a") (data (i32.const 288510) "a") (data (i32.const 288513) "a") (data (i32.const 288516) "a") (data (i32.const 288519) "a") (data (i32.const 288522) "a") (data (i32.const 288525) "a") (data (i32.const 288528) "a") (data (i32.const 288531) "a") (data (i32.const 288534) "a") (data (i32.const 288537) "a") (data (i32.const 288540) "a") (data (i32.const 288543) "a") (data (i32.const 288546) "a") (data (i32.const 288549) "a") (data (i32.const 288552) "a") (data (i32.const 288555) "a") (data (i32.const 288558) "a") (data (i32.const 288561) "a") (data (i32.const 288564) "a") (data (i32.const 288567) "a") (data (i32.const 288570) "a") (data (i32.const 288573) "a") (data (i32.const 288576) "a") (data (i32.const 288579) "a") (data (i32.const 288582) "a") (data (i32.const 288585) "a") (data (i32.const 288588) "a") (data (i32.const 288591) "a") (data (i32.const 288594) "a") (data (i32.const 288597) "a") (data (i32.const 288600) "a") (data (i32.const 288603) "a") (data (i32.const 288606) "a") (data (i32.const 288609) "a") (data (i32.const 288612) "a") (data (i32.const 288615) "a") (data (i32.const 288618) "a") (data (i32.const 288621) "a") (data (i32.const 288624) "a") (data (i32.const 288627) "a") (data (i32.const 288630) "a") (data (i32.const 288633) "a") (data (i32.const 288636) "a") (data (i32.const 288639) "a") (data (i32.const 288642) "a") (data (i32.const 288645) "a") (data (i32.const 288648) "a") (data (i32.const 288651) "a") (data (i32.const 288654) "a") (data (i32.const 288657) "a") (data (i32.const 288660) "a") (data (i32.const 288663) "a") (data (i32.const 288666) "a") (data (i32.const 288669) "a") (data (i32.const 288672) "a") (data (i32.const 288675) "a") (data (i32.const 288678) "a") (data (i32.const 288681) "a") (data (i32.const 288684) "a") (data (i32.const 288687) "a") (data (i32.const 288690) "a") (data (i32.const 288693) "a") (data (i32.const 288696) "a") (data (i32.const 288699) "a") (data (i32.const 288702) "a") (data (i32.const 288705) "a") (data (i32.const 288708) "a") (data (i32.const 288711) "a") (data (i32.const 288714) "a") (data (i32.const 288717) "a") (data (i32.const 288720) "a") (data (i32.const 288723) "a") (data (i32.const 288726) "a") (data (i32.const 288729) "a") (data (i32.const 288732) "a") (data (i32.const 288735) "a") (data (i32.const 288738) "a") (data (i32.const 288741) "a") (data (i32.const 288744) "a") (data (i32.const 288747) "a") (data (i32.const 288750) "a") (data (i32.const 288753) "a") (data (i32.const 288756) "a") (data (i32.const 288759) "a") (data (i32.const 288762) "a") (data (i32.const 288765) "a") (data (i32.const 288768) "a") (data (i32.const 288771) "a") (data (i32.const 288774) "a") (data (i32.const 288777) "a") (data (i32.const 288780) "a") (data (i32.const 288783) "a") (data (i32.const 288786) "a") (data (i32.const 288789) "a") (data (i32.const 288792) "a") (data (i32.const 288795) "a") (data (i32.const 288798) "a") (data (i32.const 288801) "a") (data (i32.const 288804) "a") (data (i32.const 288807) "a") (data (i32.const 288810) "a") (data (i32.const 288813) "a") (data (i32.const 288816) "a") (data (i32.const 288819) "a") (data (i32.const 288822) "a") (data (i32.const 288825) "a") (data (i32.const 288828) "a") (data (i32.const 288831) "a") (data (i32.const 288834) "a") (data (i32.const 288837) "a") (data (i32.const 288840) "a") (data (i32.const 288843) "a") (data (i32.const 288846) "a") (data (i32.const 288849) "a") (data (i32.const 288852) "a") (data (i32.const 288855) "a") (data (i32.const 288858) "a") (data (i32.const 288861) "a") (data (i32.const 288864) "a") (data (i32.const 288867) "a") (data (i32.const 288870) "a") (data (i32.const 288873) "a") (data (i32.const 288876) "a") (data (i32.const 288879) "a") (data (i32.const 288882) "a") (data (i32.const 288885) "a") (data (i32.const 288888) "a") (data (i32.const 288891) "a") (data (i32.const 288894) "a") (data (i32.const 288897) "a") (data (i32.const 288900) "a") (data (i32.const 288903) "a") (data (i32.const 288906) "a") (data (i32.const 288909) "a") (data (i32.const 288912) "a") (data (i32.const 288915) "a") (data (i32.const 288918) "a") (data (i32.const 288921) "a") (data (i32.const 288924) "a") (data (i32.const 288927) "a") (data (i32.const 288930) "a") (data (i32.const 288933) "a") (data (i32.const 288936) "a") (data (i32.const 288939) "a") (data (i32.const 288942) "a") (data (i32.const 288945) "a") (data (i32.const 288948) "a") (data (i32.const 288951) "a") (data (i32.const 288954) "a") (data (i32.const 288957) "a") (data (i32.const 288960) "a") (data (i32.const 288963) "a") (data (i32.const 288966) "a") (data (i32.const 288969) "a") (data (i32.const 288972) "a") (data (i32.const 288975) "a") (data (i32.const 288978) "a") (data (i32.const 288981) "a") (data (i32.const 288984) "a") (data (i32.const 288987) "a") (data (i32.const 288990) "a") (data (i32.const 288993) "a") (data (i32.const 288996) "a") (data (i32.const 288999) "a") (data (i32.const 289002) "a") (data (i32.const 289005) "a") (data (i32.const 289008) "a") (data (i32.const 289011) "a") (data (i32.const 289014) "a") (data (i32.const 289017) "a") (data (i32.const 289020) "a") (data (i32.const 289023) "a") (data (i32.const 289026) "a") (data (i32.const 289029) "a") (data (i32.const 289032) "a") (data (i32.const 289035) "a") (data (i32.const 289038) "a") (data (i32.const 289041) "a") (data (i32.const 289044) "a") (data (i32.const 289047) "a") (data (i32.const 289050) "a") (data (i32.const 289053) "a") (data (i32.const 289056) "a") (data (i32.const 289059) "a") (data (i32.const 289062) "a") (data (i32.const 289065) "a") (data (i32.const 289068) "a") (data (i32.const 289071) "a") (data (i32.const 289074) "a") (data (i32.const 289077) "a") (data (i32.const 289080) "a") (data (i32.const 289083) "a") (data (i32.const 289086) "a") (data (i32.const 289089) "a") (data (i32.const 289092) "a") (data (i32.const 289095) "a") (data (i32.const 289098) "a") (data (i32.const 289101) "a") (data (i32.const 289104) "a") (data (i32.const 289107) "a") (data (i32.const 289110) "a") (data (i32.const 289113) "a") (data (i32.const 289116) "a") (data (i32.const 289119) "a") (data (i32.const 289122) "a") (data (i32.const 289125) "a") (data (i32.const 289128) "a") (data (i32.const 289131) "a") (data (i32.const 289134) "a") (data (i32.const 289137) "a") (data (i32.const 289140) "a") (data (i32.const 289143) "a") (data (i32.const 289146) "a") (data (i32.const 289149) "a") (data (i32.const 289152) "a") (data (i32.const 289155) "a") (data (i32.const 289158) "a") (data (i32.const 289161) "a") (data (i32.const 289164) "a") (data (i32.const 289167) "a") (data (i32.const 289170) "a") (data (i32.const 289173) "a") (data (i32.const 289176) "a") (data (i32.const 289179) "a") (data (i32.const 289182) "a") (data (i32.const 289185) "a") (data (i32.const 289188) "a") (data (i32.const 289191) "a") (data (i32.const 289194) "a") (data (i32.const 289197) "a") (data (i32.const 289200) "a") (data (i32.const 289203) "a") (data (i32.const 289206) "a") (data (i32.const 289209) "a") (data (i32.const 289212) "a") (data (i32.const 289215) "a") (data (i32.const 289218) "a") (data (i32.const 289221) "a") (data (i32.const 289224) "a") (data (i32.const 289227) "a") (data (i32.const 289230) "a") (data (i32.const 289233) "a") (data (i32.const 289236) "a") (data (i32.const 289239) "a") (data (i32.const 289242) "a") (data (i32.const 289245) "a") (data (i32.const 289248) "a") (data (i32.const 289251) "a") (data (i32.const 289254) "a") (data (i32.const 289257) "a") (data (i32.const 289260) "a") (data (i32.const 289263) "a") (data (i32.const 289266) "a") (data (i32.const 289269) "a") (data (i32.const 289272) "a") (data (i32.const 289275) "a") (data (i32.const 289278) "a") (data (i32.const 289281) "a") (data (i32.const 289284) "a") (data (i32.const 289287) "a") (data (i32.const 289290) "a") (data (i32.const 289293) "a") (data (i32.const 289296) "a") (data (i32.const 289299) "a") (data (i32.const 289302) "a") (data (i32.const 289305) "a") (data (i32.const 289308) "a") (data (i32.const 289311) "a") (data (i32.const 289314) "a") (data (i32.const 289317) "a") (data (i32.const 289320) "a") (data (i32.const 289323) "a") (data (i32.const 289326) "a") (data (i32.const 289329) "a") (data (i32.const 289332) "a") (data (i32.const 289335) "a") (data (i32.const 289338) "a") (data (i32.const 289341) "a") (data (i32.const 289344) "a") (data (i32.const 289347) "a") (data (i32.const 289350) "a") (data (i32.const 289353) "a") (data (i32.const 289356) "a") (data (i32.const 289359) "a") (data (i32.const 289362) "a") (data (i32.const 289365) "a") (data (i32.const 289368) "a") (data (i32.const 289371) "a") (data (i32.const 289374) "a") (data (i32.const 289377) "a") (data (i32.const 289380) "a") (data (i32.const 289383) "a") (data (i32.const 289386) "a") (data (i32.const 289389) "a") (data (i32.const 289392) "a") (data (i32.const 289395) "a") (data (i32.const 289398) "a") (data (i32.const 289401) "a") (data (i32.const 289404) "a") (data (i32.const 289407) "a") (data (i32.const 289410) "a") (data (i32.const 289413) "a") (data (i32.const 289416) "a") (data (i32.const 289419) "a") (data (i32.const 289422) "a") (data (i32.const 289425) "a") (data (i32.const 289428) "a") (data (i32.const 289431) "a") (data (i32.const 289434) "a") (data (i32.const 289437) "a") (data (i32.const 289440) "a") (data (i32.const 289443) "a") (data (i32.const 289446) "a") (data (i32.const 289449) "a") (data (i32.const 289452) "a") (data (i32.const 289455) "a") (data (i32.const 289458) "a") (data (i32.const 289461) "a") (data (i32.const 289464) "a") (data (i32.const 289467) "a") (data (i32.const 289470) "a") (data (i32.const 289473) "a") (data (i32.const 289476) "a") (data (i32.const 289479) "a") (data (i32.const 289482) "a") (data (i32.const 289485) "a") (data (i32.const 289488) "a") (data (i32.const 289491) "a") (data (i32.const 289494) "a") (data (i32.const 289497) "a") (data (i32.const 289500) "a") (data (i32.const 289503) "a") (data (i32.const 289506) "a") (data (i32.const 289509) "a") (data (i32.const 289512) "a") (data (i32.const 289515) "a") (data (i32.const 289518) "a") (data (i32.const 289521) "a") (data (i32.const 289524) "a") (data (i32.const 289527) "a") (data (i32.const 289530) "a") (data (i32.const 289533) "a") (data (i32.const 289536) "a") (data (i32.const 289539) "a") (data (i32.const 289542) "a") (data (i32.const 289545) "a") (data (i32.const 289548) "a") (data (i32.const 289551) "a") (data (i32.const 289554) "a") (data (i32.const 289557) "a") (data (i32.const 289560) "a") (data (i32.const 289563) "a") (data (i32.const 289566) "a") (data (i32.const 289569) "a") (data (i32.const 289572) "a") (data (i32.const 289575) "a") (data (i32.const 289578) "a") (data (i32.const 289581) "a") (data (i32.const 289584) "a") (data (i32.const 289587) "a") (data (i32.const 289590) "a") (data (i32.const 289593) "a") (data (i32.const 289596) "a") (data (i32.const 289599) "a") (data (i32.const 289602) "a") (data (i32.const 289605) "a") (data (i32.const 289608) "a") (data (i32.const 289611) "a") (data (i32.const 289614) "a") (data (i32.const 289617) "a") (data (i32.const 289620) "a") (data (i32.const 289623) "a") (data (i32.const 289626) "a") (data (i32.const 289629) "a") (data (i32.const 289632) "a") (data (i32.const 289635) "a") (data (i32.const 289638) "a") (data (i32.const 289641) "a") (data (i32.const 289644) "a") (data (i32.const 289647) "a") (data (i32.const 289650) "a") (data (i32.const 289653) "a") (data (i32.const 289656) "a") (data (i32.const 289659) "a") (data (i32.const 289662) "a") (data (i32.const 289665) "a") (data (i32.const 289668) "a") (data (i32.const 289671) "a") (data (i32.const 289674) "a") (data (i32.const 289677) "a") (data (i32.const 289680) "a") (data (i32.const 289683) "a") (data (i32.const 289686) "a") (data (i32.const 289689) "a") (data (i32.const 289692) "a") (data (i32.const 289695) "a") (data (i32.const 289698) "a") (data (i32.const 289701) "a") (data (i32.const 289704) "a") (data (i32.const 289707) "a") (data (i32.const 289710) "a") (data (i32.const 289713) "a") (data (i32.const 289716) "a") (data (i32.const 289719) "a") (data (i32.const 289722) "a") (data (i32.const 289725) "a") (data (i32.const 289728) "a") (data (i32.const 289731) "a") (data (i32.const 289734) "a") (data (i32.const 289737) "a") (data (i32.const 289740) "a") (data (i32.const 289743) "a") (data (i32.const 289746) "a") (data (i32.const 289749) "a") (data (i32.const 289752) "a") (data (i32.const 289755) "a") (data (i32.const 289758) "a") (data (i32.const 289761) "a") (data (i32.const 289764) "a") (data (i32.const 289767) "a") (data (i32.const 289770) "a") (data (i32.const 289773) "a") (data (i32.const 289776) "a") (data (i32.const 289779) "a") (data (i32.const 289782) "a") (data (i32.const 289785) "a") (data (i32.const 289788) "a") (data (i32.const 289791) "a") (data (i32.const 289794) "a") (data (i32.const 289797) "a") (data (i32.const 289800) "a") (data (i32.const 289803) "a") (data (i32.const 289806) "a") (data (i32.const 289809) "a") (data (i32.const 289812) "a") (data (i32.const 289815) "a") (data (i32.const 289818) "a") (data (i32.const 289821) "a") (data (i32.const 289824) "a") (data (i32.const 289827) "a") (data (i32.const 289830) "a") (data (i32.const 289833) "a") (data (i32.const 289836) "a") (data (i32.const 289839) "a") (data (i32.const 289842) "a") (data (i32.const 289845) "a") (data (i32.const 289848) "a") (data (i32.const 289851) "a") (data (i32.const 289854) "a") (data (i32.const 289857) "a") (data (i32.const 289860) "a") (data (i32.const 289863) "a") (data (i32.const 289866) "a") (data (i32.const 289869) "a") (data (i32.const 289872) "a") (data (i32.const 289875) "a") (data (i32.const 289878) "a") (data (i32.const 289881) "a") (data (i32.const 289884) "a") (data (i32.const 289887) "a") (data (i32.const 289890) "a") (data (i32.const 289893) "a") (data (i32.const 289896) "a") (data (i32.const 289899) "a") (data (i32.const 289902) "a") (data (i32.const 289905) "a") (data (i32.const 289908) "a") (data (i32.const 289911) "a") (data (i32.const 289914) "a") (data (i32.const 289917) "a") (data (i32.const 289920) "a") (data (i32.const 289923) "a") (data (i32.const 289926) "a") (data (i32.const 289929) "a") (data (i32.const 289932) "a") (data (i32.const 289935) "a") (data (i32.const 289938) "a") (data (i32.const 289941) "a") (data (i32.const 289944) "a") (data (i32.const 289947) "a") (data (i32.const 289950) "a") (data (i32.const 289953) "a") (data (i32.const 289956) "a") (data (i32.const 289959) "a") (data (i32.const 289962) "a") (data (i32.const 289965) "a") (data (i32.const 289968) "a") (data (i32.const 289971) "a") (data (i32.const 289974) "a") (data (i32.const 289977) "a") (data (i32.const 289980) "a") (data (i32.const 289983) "a") (data (i32.const 289986) "a") (data (i32.const 289989) "a") (data (i32.const 289992) "a") (data (i32.const 289995) "a") (data (i32.const 289998) "a") (data (i32.const 290001) "a") (data (i32.const 290004) "a") (data (i32.const 290007) "a") (data (i32.const 290010) "a") (data (i32.const 290013) "a") (data (i32.const 290016) "a") (data (i32.const 290019) "a") (data (i32.const 290022) "a") (data (i32.const 290025) "a") (data (i32.const 290028) "a") (data (i32.const 290031) "a") (data (i32.const 290034) "a") (data (i32.const 290037) "a") (data (i32.const 290040) "a") (data (i32.const 290043) "a") (data (i32.const 290046) "a") (data (i32.const 290049) "a") (data (i32.const 290052) "a") (data (i32.const 290055) "a") (data (i32.const 290058) "a") (data (i32.const 290061) "a") (data (i32.const 290064) "a") (data (i32.const 290067) "a") (data (i32.const 290070) "a") (data (i32.const 290073) "a") (data (i32.const 290076) "a") (data (i32.const 290079) "a") (data (i32.const 290082) "a") (data (i32.const 290085) "a") (data (i32.const 290088) "a") (data (i32.const 290091) "a") (data (i32.const 290094) "a") (data (i32.const 290097) "a") (data (i32.const 290100) "a") (data (i32.const 290103) "a") (data (i32.const 290106) "a") (data (i32.const 290109) "a") (data (i32.const 290112) "a") (data (i32.const 290115) "a") (data (i32.const 290118) "a") (data (i32.const 290121) "a") (data (i32.const 290124) "a") (data (i32.const 290127) "a") (data (i32.const 290130) "a") (data (i32.const 290133) "a") (data (i32.const 290136) "a") (data (i32.const 290139) "a") (data (i32.const 290142) "a") (data (i32.const 290145) "a") (data (i32.const 290148) "a") (data (i32.const 290151) "a") (data (i32.const 290154) "a") (data (i32.const 290157) "a") (data (i32.const 290160) "a") (data (i32.const 290163) "a") (data (i32.const 290166) "a") (data (i32.const 290169) "a") (data (i32.const 290172) "a") (data (i32.const 290175) "a") (data (i32.const 290178) "a") (data (i32.const 290181) "a") (data (i32.const 290184) "a") (data (i32.const 290187) "a") (data (i32.const 290190) "a") (data (i32.const 290193) "a") (data (i32.const 290196) "a") (data (i32.const 290199) "a") (data (i32.const 290202) "a") (data (i32.const 290205) "a") (data (i32.const 290208) "a") (data (i32.const 290211) "a") (data (i32.const 290214) "a") (data (i32.const 290217) "a") (data (i32.const 290220) "a") (data (i32.const 290223) "a") (data (i32.const 290226) "a") (data (i32.const 290229) "a") (data (i32.const 290232) "a") (data (i32.const 290235) "a") (data (i32.const 290238) "a") (data (i32.const 290241) "a") (data (i32.const 290244) "a") (data (i32.const 290247) "a") (data (i32.const 290250) "a") (data (i32.const 290253) "a") (data (i32.const 290256) "a") (data (i32.const 290259) "a") (data (i32.const 290262) "a") (data (i32.const 290265) "a") (data (i32.const 290268) "a") (data (i32.const 290271) "a") (data (i32.const 290274) "a") (data (i32.const 290277) "a") (data (i32.const 290280) "a") (data (i32.const 290283) "a") (data (i32.const 290286) "a") (data (i32.const 290289) "a") (data (i32.const 290292) "a") (data (i32.const 290295) "a") (data (i32.const 290298) "a") (data (i32.const 290301) "a") (data (i32.const 290304) "a") (data (i32.const 290307) "a") (data (i32.const 290310) "a") (data (i32.const 290313) "a") (data (i32.const 290316) "a") (data (i32.const 290319) "a") (data (i32.const 290322) "a") (data (i32.const 290325) "a") (data (i32.const 290328) "a") (data (i32.const 290331) "a") (data (i32.const 290334) "a") (data (i32.const 290337) "a") (data (i32.const 290340) "a") (data (i32.const 290343) "a") (data (i32.const 290346) "a") (data (i32.const 290349) "a") (data (i32.const 290352) "a") (data (i32.const 290355) "a") (data (i32.const 290358) "a") (data (i32.const 290361) "a") (data (i32.const 290364) "a") (data (i32.const 290367) "a") (data (i32.const 290370) "a") (data (i32.const 290373) "a") (data (i32.const 290376) "a") (data (i32.const 290379) "a") (data (i32.const 290382) "a") (data (i32.const 290385) "a") (data (i32.const 290388) "a") (data (i32.const 290391) "a") (data (i32.const 290394) "a") (data (i32.const 290397) "a") (data (i32.const 290400) "a") (data (i32.const 290403) "a") (data (i32.const 290406) "a") (data (i32.const 290409) "a") (data (i32.const 290412) "a") (data (i32.const 290415) "a") (data (i32.const 290418) "a") (data (i32.const 290421) "a") (data (i32.const 290424) "a") (data (i32.const 290427) "a") (data (i32.const 290430) "a") (data (i32.const 290433) "a") (data (i32.const 290436) "a") (data (i32.const 290439) "a") (data (i32.const 290442) "a") (data (i32.const 290445) "a") (data (i32.const 290448) "a") (data (i32.const 290451) "a") (data (i32.const 290454) "a") (data (i32.const 290457) "a") (data (i32.const 290460) "a") (data (i32.const 290463) "a") (data (i32.const 290466) "a") (data (i32.const 290469) "a") (data (i32.const 290472) "a") (data (i32.const 290475) "a") (data (i32.const 290478) "a") (data (i32.const 290481) "a") (data (i32.const 290484) "a") (data (i32.const 290487) "a") (data (i32.const 290490) "a") (data (i32.const 290493) "a") (data (i32.const 290496) "a") (data (i32.const 290499) "a") (data (i32.const 290502) "a") (data (i32.const 290505) "a") (data (i32.const 290508) "a") (data (i32.const 290511) "a") (data (i32.const 290514) "a") (data (i32.const 290517) "a") (data (i32.const 290520) "a") (data (i32.const 290523) "a") (data (i32.const 290526) "a") (data (i32.const 290529) "a") (data (i32.const 290532) "a") (data (i32.const 290535) "a") (data (i32.const 290538) "a") (data (i32.const 290541) "a") (data (i32.const 290544) "a") (data (i32.const 290547) "a") (data (i32.const 290550) "a") (data (i32.const 290553) "a") (data (i32.const 290556) "a") (data (i32.const 290559) "a") (data (i32.const 290562) "a") (data (i32.const 290565) "a") (data (i32.const 290568) "a") (data (i32.const 290571) "a") (data (i32.const 290574) "a") (data (i32.const 290577) "a") (data (i32.const 290580) "a") (data (i32.const 290583) "a") (data (i32.const 290586) "a") (data (i32.const 290589) "a") (data (i32.const 290592) "a") (data (i32.const 290595) "a") (data (i32.const 290598) "a") (data (i32.const 290601) "a") (data (i32.const 290604) "a") (data (i32.const 290607) "a") (data (i32.const 290610) "a") (data (i32.const 290613) "a") (data (i32.const 290616) "a") (data (i32.const 290619) "a") (data (i32.const 290622) "a") (data (i32.const 290625) "a") (data (i32.const 290628) "a") (data (i32.const 290631) "a") (data (i32.const 290634) "a") (data (i32.const 290637) "a") (data (i32.const 290640) "a") (data (i32.const 290643) "a") (data (i32.const 290646) "a") (data (i32.const 290649) "a") (data (i32.const 290652) "a") (data (i32.const 290655) "a") (data (i32.const 290658) "a") (data (i32.const 290661) "a") (data (i32.const 290664) "a") (data (i32.const 290667) "a") (data (i32.const 290670) "a") (data (i32.const 290673) "a") (data (i32.const 290676) "a") (data (i32.const 290679) "a") (data (i32.const 290682) "a") (data (i32.const 290685) "a") (data (i32.const 290688) "a") (data (i32.const 290691) "a") (data (i32.const 290694) "a") (data (i32.const 290697) "a") (data (i32.const 290700) "a") (data (i32.const 290703) "a") (data (i32.const 290706) "a") (data (i32.const 290709) "a") (data (i32.const 290712) "a") (data (i32.const 290715) "a") (data (i32.const 290718) "a") (data (i32.const 290721) "a") (data (i32.const 290724) "a") (data (i32.const 290727) "a") (data (i32.const 290730) "a") (data (i32.const 290733) "a") (data (i32.const 290736) "a") (data (i32.const 290739) "a") (data (i32.const 290742) "a") (data (i32.const 290745) "a") (data (i32.const 290748) "a") (data (i32.const 290751) "a") (data (i32.const 290754) "a") (data (i32.const 290757) "a") (data (i32.const 290760) "a") (data (i32.const 290763) "a") (data (i32.const 290766) "a") (data (i32.const 290769) "a") (data (i32.const 290772) "a") (data (i32.const 290775) "a") (data (i32.const 290778) "a") (data (i32.const 290781) "a") (data (i32.const 290784) "a") (data (i32.const 290787) "a") (data (i32.const 290790) "a") (data (i32.const 290793) "a") (data (i32.const 290796) "a") (data (i32.const 290799) "a") (data (i32.const 290802) "a") (data (i32.const 290805) "a") (data (i32.const 290808) "a") (data (i32.const 290811) "a") (data (i32.const 290814) "a") (data (i32.const 290817) "a") (data (i32.const 290820) "a") (data (i32.const 290823) "a") (data (i32.const 290826) "a") (data (i32.const 290829) "a") (data (i32.const 290832) "a") (data (i32.const 290835) "a") (data (i32.const 290838) "a") (data (i32.const 290841) "a") (data (i32.const 290844) "a") (data (i32.const 290847) "a") (data (i32.const 290850) "a") (data (i32.const 290853) "a") (data (i32.const 290856) "a") (data (i32.const 290859) "a") (data (i32.const 290862) "a") (data (i32.const 290865) "a") (data (i32.const 290868) "a") (data (i32.const 290871) "a") (data (i32.const 290874) "a") (data (i32.const 290877) "a") (data (i32.const 290880) "a") (data (i32.const 290883) "a") (data (i32.const 290886) "a") (data (i32.const 290889) "a") (data (i32.const 290892) "a") (data (i32.const 290895) "a") (data (i32.const 290898) "a") (data (i32.const 290901) "a") (data (i32.const 290904) "a") (data (i32.const 290907) "a") (data (i32.const 290910) "a") (data (i32.const 290913) "a") (data (i32.const 290916) "a") (data (i32.const 290919) "a") (data (i32.const 290922) "a") (data (i32.const 290925) "a") (data (i32.const 290928) "a") (data (i32.const 290931) "a") (data (i32.const 290934) "a") (data (i32.const 290937) "a") (data (i32.const 290940) "a") (data (i32.const 290943) "a") (data (i32.const 290946) "a") (data (i32.const 290949) "a") (data (i32.const 290952) "a") (data (i32.const 290955) "a") (data (i32.const 290958) "a") (data (i32.const 290961) "a") (data (i32.const 290964) "a") (data (i32.const 290967) "a") (data (i32.const 290970) "a") (data (i32.const 290973) "a") (data (i32.const 290976) "a") (data (i32.const 290979) "a") (data (i32.const 290982) "a") (data (i32.const 290985) "a") (data (i32.const 290988) "a") (data (i32.const 290991) "a") (data (i32.const 290994) "a") (data (i32.const 290997) "a") (data (i32.const 291000) "a") (data (i32.const 291003) "a") (data (i32.const 291006) "a") (data (i32.const 291009) "a") (data (i32.const 291012) "a") (data (i32.const 291015) "a") (data (i32.const 291018) "a") (data (i32.const 291021) "a") (data (i32.const 291024) "a") (data (i32.const 291027) "a") (data (i32.const 291030) "a") (data (i32.const 291033) "a") (data (i32.const 291036) "a") (data (i32.const 291039) "a") (data (i32.const 291042) "a") (data (i32.const 291045) "a") (data (i32.const 291048) "a") (data (i32.const 291051) "a") (data (i32.const 291054) "a") (data (i32.const 291057) "a") (data (i32.const 291060) "a") (data (i32.const 291063) "a") (data (i32.const 291066) "a") (data (i32.const 291069) "a") (data (i32.const 291072) "a") (data (i32.const 291075) "a") (data (i32.const 291078) "a") (data (i32.const 291081) "a") (data (i32.const 291084) "a") (data (i32.const 291087) "a") (data (i32.const 291090) "a") (data (i32.const 291093) "a") (data (i32.const 291096) "a") (data (i32.const 291099) "a") (data (i32.const 291102) "a") (data (i32.const 291105) "a") (data (i32.const 291108) "a") (data (i32.const 291111) "a") (data (i32.const 291114) "a") (data (i32.const 291117) "a") (data (i32.const 291120) "a") (data (i32.const 291123) "a") (data (i32.const 291126) "a") (data (i32.const 291129) "a") (data (i32.const 291132) "a") (data (i32.const 291135) "a") (data (i32.const 291138) "a") (data (i32.const 291141) "a") (data (i32.const 291144) "a") (data (i32.const 291147) "a") (data (i32.const 291150) "a") (data (i32.const 291153) "a") (data (i32.const 291156) "a") (data (i32.const 291159) "a") (data (i32.const 291162) "a") (data (i32.const 291165) "a") (data (i32.const 291168) "a") (data (i32.const 291171) "a") (data (i32.const 291174) "a") (data (i32.const 291177) "a") (data (i32.const 291180) "a") (data (i32.const 291183) "a") (data (i32.const 291186) "a") (data (i32.const 291189) "a") (data (i32.const 291192) "a") (data (i32.const 291195) "a") (data (i32.const 291198) "a") (data (i32.const 291201) "a") (data (i32.const 291204) "a") (data (i32.const 291207) "a") (data (i32.const 291210) "a") (data (i32.const 291213) "a") (data (i32.const 291216) "a") (data (i32.const 291219) "a") (data (i32.const 291222) "a") (data (i32.const 291225) "a") (data (i32.const 291228) "a") (data (i32.const 291231) "a") (data (i32.const 291234) "a") (data (i32.const 291237) "a") (data (i32.const 291240) "a") (data (i32.const 291243) "a") (data (i32.const 291246) "a") (data (i32.const 291249) "a") (data (i32.const 291252) "a") (data (i32.const 291255) "a") (data (i32.const 291258) "a") (data (i32.const 291261) "a") (data (i32.const 291264) "a") (data (i32.const 291267) "a") (data (i32.const 291270) "a") (data (i32.const 291273) "a") (data (i32.const 291276) "a") (data (i32.const 291279) "a") (data (i32.const 291282) "a") (data (i32.const 291285) "a") (data (i32.const 291288) "a") (data (i32.const 291291) "a") (data (i32.const 291294) "a") (data (i32.const 291297) "a") (data (i32.const 291300) "a") (data (i32.const 291303) "a") (data (i32.const 291306) "a") (data (i32.const 291309) "a") (data (i32.const 291312) "a") (data (i32.const 291315) "a") (data (i32.const 291318) "a") (data (i32.const 291321) "a") (data (i32.const 291324) "a") (data (i32.const 291327) "a") (data (i32.const 291330) "a") (data (i32.const 291333) "a") (data (i32.const 291336) "a") (data (i32.const 291339) "a") (data (i32.const 291342) "a") (data (i32.const 291345) "a") (data (i32.const 291348) "a") (data (i32.const 291351) "a") (data (i32.const 291354) "a") (data (i32.const 291357) "a") (data (i32.const 291360) "a") (data (i32.const 291363) "a") (data (i32.const 291366) "a") (data (i32.const 291369) "a") (data (i32.const 291372) "a") (data (i32.const 291375) "a") (data (i32.const 291378) "a") (data (i32.const 291381) "a") (data (i32.const 291384) "a") (data (i32.const 291387) "a") (data (i32.const 291390) "a") (data (i32.const 291393) "a") (data (i32.const 291396) "a") (data (i32.const 291399) "a") (data (i32.const 291402) "a") (data (i32.const 291405) "a") (data (i32.const 291408) "a") (data (i32.const 291411) "a") (data (i32.const 291414) "a") (data (i32.const 291417) "a") (data (i32.const 291420) "a") (data (i32.const 291423) "a") (data (i32.const 291426) "a") (data (i32.const 291429) "a") (data (i32.const 291432) "a") (data (i32.const 291435) "a") (data (i32.const 291438) "a") (data (i32.const 291441) "a") (data (i32.const 291444) "a") (data (i32.const 291447) "a") (data (i32.const 291450) "a") (data (i32.const 291453) "a") (data (i32.const 291456) "a") (data (i32.const 291459) "a") (data (i32.const 291462) "a") (data (i32.const 291465) "a") (data (i32.const 291468) "a") (data (i32.const 291471) "a") (data (i32.const 291474) "a") (data (i32.const 291477) "a") (data (i32.const 291480) "a") (data (i32.const 291483) "a") (data (i32.const 291486) "a") (data (i32.const 291489) "a") (data (i32.const 291492) "a") (data (i32.const 291495) "a") (data (i32.const 291498) "a") (data (i32.const 291501) "a") (data (i32.const 291504) "a") (data (i32.const 291507) "a") (data (i32.const 291510) "a") (data (i32.const 291513) "a") (data (i32.const 291516) "a") (data (i32.const 291519) "a") (data (i32.const 291522) "a") (data (i32.const 291525) "a") (data (i32.const 291528) "a") (data (i32.const 291531) "a") (data (i32.const 291534) "a") (data (i32.const 291537) "a") (data (i32.const 291540) "a") (data (i32.const 291543) "a") (data (i32.const 291546) "a") (data (i32.const 291549) "a") (data (i32.const 291552) "a") (data (i32.const 291555) "a") (data (i32.const 291558) "a") (data (i32.const 291561) "a") (data (i32.const 291564) "a") (data (i32.const 291567) "a") (data (i32.const 291570) "a") (data (i32.const 291573) "a") (data (i32.const 291576) "a") (data (i32.const 291579) "a") (data (i32.const 291582) "a") (data (i32.const 291585) "a") (data (i32.const 291588) "a") (data (i32.const 291591) "a") (data (i32.const 291594) "a") (data (i32.const 291597) "a") (data (i32.const 291600) "a") (data (i32.const 291603) "a") (data (i32.const 291606) "a") (data (i32.const 291609) "a") (data (i32.const 291612) "a") (data (i32.const 291615) "a") (data (i32.const 291618) "a") (data (i32.const 291621) "a") (data (i32.const 291624) "a") (data (i32.const 291627) "a") (data (i32.const 291630) "a") (data (i32.const 291633) "a") (data (i32.const 291636) "a") (data (i32.const 291639) "a") (data (i32.const 291642) "a") (data (i32.const 291645) "a") (data (i32.const 291648) "a") (data (i32.const 291651) "a") (data (i32.const 291654) "a") (data (i32.const 291657) "a") (data (i32.const 291660) "a") (data (i32.const 291663) "a") (data (i32.const 291666) "a") (data (i32.const 291669) "a") (data (i32.const 291672) "a") (data (i32.const 291675) "a") (data (i32.const 291678) "a") (data (i32.const 291681) "a") (data (i32.const 291684) "a") (data (i32.const 291687) "a") (data (i32.const 291690) "a") (data (i32.const 291693) "a") (data (i32.const 291696) "a") (data (i32.const 291699) "a") (data (i32.const 291702) "a") (data (i32.const 291705) "a") (data (i32.const 291708) "a") (data (i32.const 291711) "a") (data (i32.const 291714) "a") (data (i32.const 291717) "a") (data (i32.const 291720) "a") (data (i32.const 291723) "a") (data (i32.const 291726) "a") (data (i32.const 291729) "a") (data (i32.const 291732) "a") (data (i32.const 291735) "a") (data (i32.const 291738) "a") (data (i32.const 291741) "a") (data (i32.const 291744) "a") (data (i32.const 291747) "a") (data (i32.const 291750) "a") (data (i32.const 291753) "a") (data (i32.const 291756) "a") (data (i32.const 291759) "a") (data (i32.const 291762) "a") (data (i32.const 291765) "a") (data (i32.const 291768) "a") (data (i32.const 291771) "a") (data (i32.const 291774) "a") (data (i32.const 291777) "a") (data (i32.const 291780) "a") (data (i32.const 291783) "a") (data (i32.const 291786) "a") (data (i32.const 291789) "a") (data (i32.const 291792) "a") (data (i32.const 291795) "a") (data (i32.const 291798) "a") (data (i32.const 291801) "a") (data (i32.const 291804) "a") (data (i32.const 291807) "a") (data (i32.const 291810) "a") (data (i32.const 291813) "a") (data (i32.const 291816) "a") (data (i32.const 291819) "a") (data (i32.const 291822) "a") (data (i32.const 291825) "a") (data (i32.const 291828) "a") (data (i32.const 291831) "a") (data (i32.const 291834) "a") (data (i32.const 291837) "a") (data (i32.const 291840) "a") (data (i32.const 291843) "a") (data (i32.const 291846) "a") (data (i32.const 291849) "a") (data (i32.const 291852) "a") (data (i32.const 291855) "a") (data (i32.const 291858) "a") (data (i32.const 291861) "a") (data (i32.const 291864) "a") (data (i32.const 291867) "a") (data (i32.const 291870) "a") (data (i32.const 291873) "a") (data (i32.const 291876) "a") (data (i32.const 291879) "a") (data (i32.const 291882) "a") (data (i32.const 291885) "a") (data (i32.const 291888) "a") (data (i32.const 291891) "a") (data (i32.const 291894) "a") (data (i32.const 291897) "a") (data (i32.const 291900) "a") (data (i32.const 291903) "a") (data (i32.const 291906) "a") (data (i32.const 291909) "a") (data (i32.const 291912) "a") (data (i32.const 291915) "a") (data (i32.const 291918) "a") (data (i32.const 291921) "a") (data (i32.const 291924) "a") (data (i32.const 291927) "a") (data (i32.const 291930) "a") (data (i32.const 291933) "a") (data (i32.const 291936) "a") (data (i32.const 291939) "a") (data (i32.const 291942) "a") (data (i32.const 291945) "a") (data (i32.const 291948) "a") (data (i32.const 291951) "a") (data (i32.const 291954) "a") (data (i32.const 291957) "a") (data (i32.const 291960) "a") (data (i32.const 291963) "a") (data (i32.const 291966) "a") (data (i32.const 291969) "a") (data (i32.const 291972) "a") (data (i32.const 291975) "a") (data (i32.const 291978) "a") (data (i32.const 291981) "a") (data (i32.const 291984) "a") (data (i32.const 291987) "a") (data (i32.const 291990) "a") (data (i32.const 291993) "a") (data (i32.const 291996) "a") (data (i32.const 291999) "a") (data (i32.const 292002) "a") (data (i32.const 292005) "a") (data (i32.const 292008) "a") (data (i32.const 292011) "a") (data (i32.const 292014) "a") (data (i32.const 292017) "a") (data (i32.const 292020) "a") (data (i32.const 292023) "a") (data (i32.const 292026) "a") (data (i32.const 292029) "a") (data (i32.const 292032) "a") (data (i32.const 292035) "a") (data (i32.const 292038) "a") (data (i32.const 292041) "a") (data (i32.const 292044) "a") (data (i32.const 292047) "a") (data (i32.const 292050) "a") (data (i32.const 292053) "a") (data (i32.const 292056) "a") (data (i32.const 292059) "a") (data (i32.const 292062) "a") (data (i32.const 292065) "a") (data (i32.const 292068) "a") (data (i32.const 292071) "a") (data (i32.const 292074) "a") (data (i32.const 292077) "a") (data (i32.const 292080) "a") (data (i32.const 292083) "a") (data (i32.const 292086) "a") (data (i32.const 292089) "a") (data (i32.const 292092) "a") (data (i32.const 292095) "a") (data (i32.const 292098) "a") (data (i32.const 292101) "a") (data (i32.const 292104) "a") (data (i32.const 292107) "a") (data (i32.const 292110) "a") (data (i32.const 292113) "a") (data (i32.const 292116) "a") (data (i32.const 292119) "a") (data (i32.const 292122) "a") (data (i32.const 292125) "a") (data (i32.const 292128) "a") (data (i32.const 292131) "a") (data (i32.const 292134) "a") (data (i32.const 292137) "a") (data (i32.const 292140) "a") (data (i32.const 292143) "a") (data (i32.const 292146) "a") (data (i32.const 292149) "a") (data (i32.const 292152) "a") (data (i32.const 292155) "a") (data (i32.const 292158) "a") (data (i32.const 292161) "a") (data (i32.const 292164) "a") (data (i32.const 292167) "a") (data (i32.const 292170) "a") (data (i32.const 292173) "a") (data (i32.const 292176) "a") (data (i32.const 292179) "a") (data (i32.const 292182) "a") (data (i32.const 292185) "a") (data (i32.const 292188) "a") (data (i32.const 292191) "a") (data (i32.const 292194) "a") (data (i32.const 292197) "a") (data (i32.const 292200) "a") (data (i32.const 292203) "a") (data (i32.const 292206) "a") (data (i32.const 292209) "a") (data (i32.const 292212) "a") (data (i32.const 292215) "a") (data (i32.const 292218) "a") (data (i32.const 292221) "a") (data (i32.const 292224) "a") (data (i32.const 292227) "a") (data (i32.const 292230) "a") (data (i32.const 292233) "a") (data (i32.const 292236) "a") (data (i32.const 292239) "a") (data (i32.const 292242) "a") (data (i32.const 292245) "a") (data (i32.const 292248) "a") (data (i32.const 292251) "a") (data (i32.const 292254) "a") (data (i32.const 292257) "a") (data (i32.const 292260) "a") (data (i32.const 292263) "a") (data (i32.const 292266) "a") (data (i32.const 292269) "a") (data (i32.const 292272) "a") (data (i32.const 292275) "a") (data (i32.const 292278) "a") (data (i32.const 292281) "a") (data (i32.const 292284) "a") (data (i32.const 292287) "a") (data (i32.const 292290) "a") (data (i32.const 292293) "a") (data (i32.const 292296) "a") (data (i32.const 292299) "a") (data (i32.const 292302) "a") (data (i32.const 292305) "a") (data (i32.const 292308) "a") (data (i32.const 292311) "a") (data (i32.const 292314) "a") (data (i32.const 292317) "a") (data (i32.const 292320) "a") (data (i32.const 292323) "a") (data (i32.const 292326) "a") (data (i32.const 292329) "a") (data (i32.const 292332) "a") (data (i32.const 292335) "a") (data (i32.const 292338) "a") (data (i32.const 292341) "a") (data (i32.const 292344) "a") (data (i32.const 292347) "a") (data (i32.const 292350) "a") (data (i32.const 292353) "a") (data (i32.const 292356) "a") (data (i32.const 292359) "a") (data (i32.const 292362) "a") (data (i32.const 292365) "a") (data (i32.const 292368) "a") (data (i32.const 292371) "a") (data (i32.const 292374) "a") (data (i32.const 292377) "a") (data (i32.const 292380) "a") (data (i32.const 292383) "a") (data (i32.const 292386) "a") (data (i32.const 292389) "a") (data (i32.const 292392) "a") (data (i32.const 292395) "a") (data (i32.const 292398) "a") (data (i32.const 292401) "a") (data (i32.const 292404) "a") (data (i32.const 292407) "a") (data (i32.const 292410) "a") (data (i32.const 292413) "a") (data (i32.const 292416) "a") (data (i32.const 292419) "a") (data (i32.const 292422) "a") (data (i32.const 292425) "a") (data (i32.const 292428) "a") (data (i32.const 292431) "a") (data (i32.const 292434) "a") (data (i32.const 292437) "a") (data (i32.const 292440) "a") (data (i32.const 292443) "a") (data (i32.const 292446) "a") (data (i32.const 292449) "a") (data (i32.const 292452) "a") (data (i32.const 292455) "a") (data (i32.const 292458) "a") (data (i32.const 292461) "a") (data (i32.const 292464) "a") (data (i32.const 292467) "a") (data (i32.const 292470) "a") (data (i32.const 292473) "a") (data (i32.const 292476) "a") (data (i32.const 292479) "a") (data (i32.const 292482) "a") (data (i32.const 292485) "a") (data (i32.const 292488) "a") (data (i32.const 292491) "a") (data (i32.const 292494) "a") (data (i32.const 292497) "a") (data (i32.const 292500) "a") (data (i32.const 292503) "a") (data (i32.const 292506) "a") (data (i32.const 292509) "a") (data (i32.const 292512) "a") (data (i32.const 292515) "a") (data (i32.const 292518) "a") (data (i32.const 292521) "a") (data (i32.const 292524) "a") (data (i32.const 292527) "a") (data (i32.const 292530) "a") (data (i32.const 292533) "a") (data (i32.const 292536) "a") (data (i32.const 292539) "a") (data (i32.const 292542) "a") (data (i32.const 292545) "a") (data (i32.const 292548) "a") (data (i32.const 292551) "a") (data (i32.const 292554) "a") (data (i32.const 292557) "a") (data (i32.const 292560) "a") (data (i32.const 292563) "a") (data (i32.const 292566) "a") (data (i32.const 292569) "a") (data (i32.const 292572) "a") (data (i32.const 292575) "a") (data (i32.const 292578) "a") (data (i32.const 292581) "a") (data (i32.const 292584) "a") (data (i32.const 292587) "a") (data (i32.const 292590) "a") (data (i32.const 292593) "a") (data (i32.const 292596) "a") (data (i32.const 292599) "a") (data (i32.const 292602) "a") (data (i32.const 292605) "a") (data (i32.const 292608) "a") (data (i32.const 292611) "a") (data (i32.const 292614) "a") (data (i32.const 292617) "a") (data (i32.const 292620) "a") (data (i32.const 292623) "a") (data (i32.const 292626) "a") (data (i32.const 292629) "a") (data (i32.const 292632) "a") (data (i32.const 292635) "a") (data (i32.const 292638) "a") (data (i32.const 292641) "a") (data (i32.const 292644) "a") (data (i32.const 292647) "a") (data (i32.const 292650) "a") (data (i32.const 292653) "a") (data (i32.const 292656) "a") (data (i32.const 292659) "a") (data (i32.const 292662) "a") (data (i32.const 292665) "a") (data (i32.const 292668) "a") (data (i32.const 292671) "a") (data (i32.const 292674) "a") (data (i32.const 292677) "a") (data (i32.const 292680) "a") (data (i32.const 292683) "a") (data (i32.const 292686) "a") (data (i32.const 292689) "a") (data (i32.const 292692) "a") (data (i32.const 292695) "a") (data (i32.const 292698) "a") (data (i32.const 292701) "a") (data (i32.const 292704) "a") (data (i32.const 292707) "a") (data (i32.const 292710) "a") (data (i32.const 292713) "a") (data (i32.const 292716) "a") (data (i32.const 292719) "a") (data (i32.const 292722) "a") (data (i32.const 292725) "a") (data (i32.const 292728) "a") (data (i32.const 292731) "a") (data (i32.const 292734) "a") (data (i32.const 292737) "a") (data (i32.const 292740) "a") (data (i32.const 292743) "a") (data (i32.const 292746) "a") (data (i32.const 292749) "a") (data (i32.const 292752) "a") (data (i32.const 292755) "a") (data (i32.const 292758) "a") (data (i32.const 292761) "a") (data (i32.const 292764) "a") (data (i32.const 292767) "a") (data (i32.const 292770) "a") (data (i32.const 292773) "a") (data (i32.const 292776) "a") (data (i32.const 292779) "a") (data (i32.const 292782) "a") (data (i32.const 292785) "a") (data (i32.const 292788) "a") (data (i32.const 292791) "a") (data (i32.const 292794) "a") (data (i32.const 292797) "a") (data (i32.const 292800) "a") (data (i32.const 292803) "a") (data (i32.const 292806) "a") (data (i32.const 292809) "a") (data (i32.const 292812) "a") (data (i32.const 292815) "a") (data (i32.const 292818) "a") (data (i32.const 292821) "a") (data (i32.const 292824) "a") (data (i32.const 292827) "a") (data (i32.const 292830) "a") (data (i32.const 292833) "a") (data (i32.const 292836) "a") (data (i32.const 292839) "a") (data (i32.const 292842) "a") (data (i32.const 292845) "a") (data (i32.const 292848) "a") (data (i32.const 292851) "a") (data (i32.const 292854) "a") (data (i32.const 292857) "a") (data (i32.const 292860) "a") (data (i32.const 292863) "a") (data (i32.const 292866) "a") (data (i32.const 292869) "a") (data (i32.const 292872) "a") (data (i32.const 292875) "a") (data (i32.const 292878) "a") (data (i32.const 292881) "a") (data (i32.const 292884) "a") (data (i32.const 292887) "a") (data (i32.const 292890) "a") (data (i32.const 292893) "a") (data (i32.const 292896) "a") (data (i32.const 292899) "a") (data (i32.const 292902) "a") (data (i32.const 292905) "a") (data (i32.const 292908) "a") (data (i32.const 292911) "a") (data (i32.const 292914) "a") (data (i32.const 292917) "a") (data (i32.const 292920) "a") (data (i32.const 292923) "a") (data (i32.const 292926) "a") (data (i32.const 292929) "a") (data (i32.const 292932) "a") (data (i32.const 292935) "a") (data (i32.const 292938) "a") (data (i32.const 292941) "a") (data (i32.const 292944) "a") (data (i32.const 292947) "a") (data (i32.const 292950) "a") (data (i32.const 292953) "a") (data (i32.const 292956) "a") (data (i32.const 292959) "a") (data (i32.const 292962) "a") (data (i32.const 292965) "a") (data (i32.const 292968) "a") (data (i32.const 292971) "a") (data (i32.const 292974) "a") (data (i32.const 292977) "a") (data (i32.const 292980) "a") (data (i32.const 292983) "a") (data (i32.const 292986) "a") (data (i32.const 292989) "a") (data (i32.const 292992) "a") (data (i32.const 292995) "a") (data (i32.const 292998) "a") (data (i32.const 293001) "a") (data (i32.const 293004) "a") (data (i32.const 293007) "a") (data (i32.const 293010) "a") (data (i32.const 293013) "a") (data (i32.const 293016) "a") (data (i32.const 293019) "a") (data (i32.const 293022) "a") (data (i32.const 293025) "a") (data (i32.const 293028) "a") (data (i32.const 293031) "a") (data (i32.const 293034) "a") (data (i32.const 293037) "a") (data (i32.const 293040) "a") (data (i32.const 293043) "a") (data (i32.const 293046) "a") (data (i32.const 293049) "a") (data (i32.const 293052) "a") (data (i32.const 293055) "a") (data (i32.const 293058) "a") (data (i32.const 293061) "a") (data (i32.const 293064) "a") (data (i32.const 293067) "a") (data (i32.const 293070) "a") (data (i32.const 293073) "a") (data (i32.const 293076) "a") (data (i32.const 293079) "a") (data (i32.const 293082) "a") (data (i32.const 293085) "a") (data (i32.const 293088) "a") (data (i32.const 293091) "a") (data (i32.const 293094) "a") (data (i32.const 293097) "a") (data (i32.const 293100) "a") (data (i32.const 293103) "a") (data (i32.const 293106) "a") (data (i32.const 293109) "a") (data (i32.const 293112) "a") (data (i32.const 293115) "a") (data (i32.const 293118) "a") (data (i32.const 293121) "a") (data (i32.const 293124) "a") (data (i32.const 293127) "a") (data (i32.const 293130) "a") (data (i32.const 293133) "a") (data (i32.const 293136) "a") (data (i32.const 293139) "a") (data (i32.const 293142) "a") (data (i32.const 293145) "a") (data (i32.const 293148) "a") (data (i32.const 293151) "a") (data (i32.const 293154) "a") (data (i32.const 293157) "a") (data (i32.const 293160) "a") (data (i32.const 293163) "a") (data (i32.const 293166) "a") (data (i32.const 293169) "a") (data (i32.const 293172) "a") (data (i32.const 293175) "a") (data (i32.const 293178) "a") (data (i32.const 293181) "a") (data (i32.const 293184) "a") (data (i32.const 293187) "a") (data (i32.const 293190) "a") (data (i32.const 293193) "a") (data (i32.const 293196) "a") (data (i32.const 293199) "a") (data (i32.const 293202) "a") (data (i32.const 293205) "a") (data (i32.const 293208) "a") (data (i32.const 293211) "a") (data (i32.const 293214) "a") (data (i32.const 293217) "a") (data (i32.const 293220) "a") (data (i32.const 293223) "a") (data (i32.const 293226) "a") (data (i32.const 293229) "a") (data (i32.const 293232) "a") (data (i32.const 293235) "a") (data (i32.const 293238) "a") (data (i32.const 293241) "a") (data (i32.const 293244) "a") (data (i32.const 293247) "a") (data (i32.const 293250) "a") (data (i32.const 293253) "a") (data (i32.const 293256) "a") (data (i32.const 293259) "a") (data (i32.const 293262) "a") (data (i32.const 293265) "a") (data (i32.const 293268) "a") (data (i32.const 293271) "a") (data (i32.const 293274) "a") (data (i32.const 293277) "a") (data (i32.const 293280) "a") (data (i32.const 293283) "a") (data (i32.const 293286) "a") (data (i32.const 293289) "a") (data (i32.const 293292) "a") (data (i32.const 293295) "a") (data (i32.const 293298) "a") (data (i32.const 293301) "a") (data (i32.const 293304) "a") (data (i32.const 293307) "a") (data (i32.const 293310) "a") (data (i32.const 293313) "a") (data (i32.const 293316) "a") (data (i32.const 293319) "a") (data (i32.const 293322) "a") (data (i32.const 293325) "a") (data (i32.const 293328) "a") (data (i32.const 293331) "a") (data (i32.const 293334) "a") (data (i32.const 293337) "a") (data (i32.const 293340) "a") (data (i32.const 293343) "a") (data (i32.const 293346) "a") (data (i32.const 293349) "a") (data (i32.const 293352) "a") (data (i32.const 293355) "a") (data (i32.const 293358) "a") (data (i32.const 293361) "a") (data (i32.const 293364) "a") (data (i32.const 293367) "a") (data (i32.const 293370) "a") (data (i32.const 293373) "a") (data (i32.const 293376) "a") (data (i32.const 293379) "a") (data (i32.const 293382) "a") (data (i32.const 293385) "a") (data (i32.const 293388) "a") (data (i32.const 293391) "a") (data (i32.const 293394) "a") (data (i32.const 293397) "a") (data (i32.const 293400) "a") (data (i32.const 293403) "a") (data (i32.const 293406) "a") (data (i32.const 293409) "a") (data (i32.const 293412) "a") (data (i32.const 293415) "a") (data (i32.const 293418) "a") (data (i32.const 293421) "a") (data (i32.const 293424) "a") (data (i32.const 293427) "a") (data (i32.const 293430) "a") (data (i32.const 293433) "a") (data (i32.const 293436) "a") (data (i32.const 293439) "a") (data (i32.const 293442) "a") (data (i32.const 293445) "a") (data (i32.const 293448) "a") (data (i32.const 293451) "a") (data (i32.const 293454) "a") (data (i32.const 293457) "a") (data (i32.const 293460) "a") (data (i32.const 293463) "a") (data (i32.const 293466) "a") (data (i32.const 293469) "a") (data (i32.const 293472) "a") (data (i32.const 293475) "a") (data (i32.const 293478) "a") (data (i32.const 293481) "a") (data (i32.const 293484) "a") (data (i32.const 293487) "a") (data (i32.const 293490) "a") (data (i32.const 293493) "a") (data (i32.const 293496) "a") (data (i32.const 293499) "a") (data (i32.const 293502) "a") (data (i32.const 293505) "a") (data (i32.const 293508) "a") (data (i32.const 293511) "a") (data (i32.const 293514) "a") (data (i32.const 293517) "a") (data (i32.const 293520) "a") (data (i32.const 293523) "a") (data (i32.const 293526) "a") (data (i32.const 293529) "a") (data (i32.const 293532) "a") (data (i32.const 293535) "a") (data (i32.const 293538) "a") (data (i32.const 293541) "a") (data (i32.const 293544) "a") (data (i32.const 293547) "a") (data (i32.const 293550) "a") (data (i32.const 293553) "a") (data (i32.const 293556) "a") (data (i32.const 293559) "a") (data (i32.const 293562) "a") (data (i32.const 293565) "a") (data (i32.const 293568) "a") (data (i32.const 293571) "a") (data (i32.const 293574) "a") (data (i32.const 293577) "a") (data (i32.const 293580) "a") (data (i32.const 293583) "a") (data (i32.const 293586) "a") (data (i32.const 293589) "a") (data (i32.const 293592) "a") (data (i32.const 293595) "a") (data (i32.const 293598) "a") (data (i32.const 293601) "a") (data (i32.const 293604) "a") (data (i32.const 293607) "a") (data (i32.const 293610) "a") (data (i32.const 293613) "a") (data (i32.const 293616) "a") (data (i32.const 293619) "a") (data (i32.const 293622) "a") (data (i32.const 293625) "a") (data (i32.const 293628) "a") (data (i32.const 293631) "a") (data (i32.const 293634) "a") (data (i32.const 293637) "a") (data (i32.const 293640) "a") (data (i32.const 293643) "a") (data (i32.const 293646) "a") (data (i32.const 293649) "a") (data (i32.const 293652) "a") (data (i32.const 293655) "a") (data (i32.const 293658) "a") (data (i32.const 293661) "a") (data (i32.const 293664) "a") (data (i32.const 293667) "a") (data (i32.const 293670) "a") (data (i32.const 293673) "a") (data (i32.const 293676) "a") (data (i32.const 293679) "a") (data (i32.const 293682) "a") (data (i32.const 293685) "a") (data (i32.const 293688) "a") (data (i32.const 293691) "a") (data (i32.const 293694) "a") (data (i32.const 293697) "a") (data (i32.const 293700) "a") (data (i32.const 293703) "a") (data (i32.const 293706) "a") (data (i32.const 293709) "a") (data (i32.const 293712) "a") (data (i32.const 293715) "a") (data (i32.const 293718) "a") (data (i32.const 293721) "a") (data (i32.const 293724) "a") (data (i32.const 293727) "a") (data (i32.const 293730) "a") (data (i32.const 293733) "a") (data (i32.const 293736) "a") (data (i32.const 293739) "a") (data (i32.const 293742) "a") (data (i32.const 293745) "a") (data (i32.const 293748) "a") (data (i32.const 293751) "a") (data (i32.const 293754) "a") (data (i32.const 293757) "a") (data (i32.const 293760) "a") (data (i32.const 293763) "a") (data (i32.const 293766) "a") (data (i32.const 293769) "a") (data (i32.const 293772) "a") (data (i32.const 293775) "a") (data (i32.const 293778) "a") (data (i32.const 293781) "a") (data (i32.const 293784) "a") (data (i32.const 293787) "a") (data (i32.const 293790) "a") (data (i32.const 293793) "a") (data (i32.const 293796) "a") (data (i32.const 293799) "a") (data (i32.const 293802) "a") (data (i32.const 293805) "a") (data (i32.const 293808) "a") (data (i32.const 293811) "a") (data (i32.const 293814) "a") (data (i32.const 293817) "a") (data (i32.const 293820) "a") (data (i32.const 293823) "a") (data (i32.const 293826) "a") (data (i32.const 293829) "a") (data (i32.const 293832) "a") (data (i32.const 293835) "a") (data (i32.const 293838) "a") (data (i32.const 293841) "a") (data (i32.const 293844) "a") (data (i32.const 293847) "a") (data (i32.const 293850) "a") (data (i32.const 293853) "a") (data (i32.const 293856) "a") (data (i32.const 293859) "a") (data (i32.const 293862) "a") (data (i32.const 293865) "a") (data (i32.const 293868) "a") (data (i32.const 293871) "a") (data (i32.const 293874) "a") (data (i32.const 293877) "a") (data (i32.const 293880) "a") (data (i32.const 293883) "a") (data (i32.const 293886) "a") (data (i32.const 293889) "a") (data (i32.const 293892) "a") (data (i32.const 293895) "a") (data (i32.const 293898) "a") (data (i32.const 293901) "a") (data (i32.const 293904) "a") (data (i32.const 293907) "a") (data (i32.const 293910) "a") (data (i32.const 293913) "a") (data (i32.const 293916) "a") (data (i32.const 293919) "a") (data (i32.const 293922) "a") (data (i32.const 293925) "a") (data (i32.const 293928) "a") (data (i32.const 293931) "a") (data (i32.const 293934) "a") (data (i32.const 293937) "a") (data (i32.const 293940) "a") (data (i32.const 293943) "a") (data (i32.const 293946) "a") (data (i32.const 293949) "a") (data (i32.const 293952) "a") (data (i32.const 293955) "a") (data (i32.const 293958) "a") (data (i32.const 293961) "a") (data (i32.const 293964) "a") (data (i32.const 293967) "a") (data (i32.const 293970) "a") (data (i32.const 293973) "a") (data (i32.const 293976) "a") (data (i32.const 293979) "a") (data (i32.const 293982) "a") (data (i32.const 293985) "a") (data (i32.const 293988) "a") (data (i32.const 293991) "a") (data (i32.const 293994) "a") (data (i32.const 293997) "a") (data (i32.const 294000) "a") (data (i32.const 294003) "a") (data (i32.const 294006) "a") (data (i32.const 294009) "a") (data (i32.const 294012) "a") (data (i32.const 294015) "a") (data (i32.const 294018) "a") (data (i32.const 294021) "a") (data (i32.const 294024) "a") (data (i32.const 294027) "a") (data (i32.const 294030) "a") (data (i32.const 294033) "a") (data (i32.const 294036) "a") (data (i32.const 294039) "a") (data (i32.const 294042) "a") (data (i32.const 294045) "a") (data (i32.const 294048) "a") (data (i32.const 294051) "a") (data (i32.const 294054) "a") (data (i32.const 294057) "a") (data (i32.const 294060) "a") (data (i32.const 294063) "a") (data (i32.const 294066) "a") (data (i32.const 294069) "a") (data (i32.const 294072) "a") (data (i32.const 294075) "a") (data (i32.const 294078) "a") (data (i32.const 294081) "a") (data (i32.const 294084) "a") (data (i32.const 294087) "a") (data (i32.const 294090) "a") (data (i32.const 294093) "a") (data (i32.const 294096) "a") (data (i32.const 294099) "a") (data (i32.const 294102) "a") (data (i32.const 294105) "a") (data (i32.const 294108) "a") (data (i32.const 294111) "a") (data (i32.const 294114) "a") (data (i32.const 294117) "a") (data (i32.const 294120) "a") (data (i32.const 294123) "a") (data (i32.const 294126) "a") (data (i32.const 294129) "a") (data (i32.const 294132) "a") (data (i32.const 294135) "a") (data (i32.const 294138) "a") (data (i32.const 294141) "a") (data (i32.const 294144) "a") (data (i32.const 294147) "a") (data (i32.const 294150) "a") (data (i32.const 294153) "a") (data (i32.const 294156) "a") (data (i32.const 294159) "a") (data (i32.const 294162) "a") (data (i32.const 294165) "a") (data (i32.const 294168) "a") (data (i32.const 294171) "a") (data (i32.const 294174) "a") (data (i32.const 294177) "a") (data (i32.const 294180) "a") (data (i32.const 294183) "a") (data (i32.const 294186) "a") (data (i32.const 294189) "a") (data (i32.const 294192) "a") (data (i32.const 294195) "a") (data (i32.const 294198) "a") (data (i32.const 294201) "a") (data (i32.const 294204) "a") (data (i32.const 294207) "a") (data (i32.const 294210) "a") (data (i32.const 294213) "a") (data (i32.const 294216) "a") (data (i32.const 294219) "a") (data (i32.const 294222) "a") (data (i32.const 294225) "a") (data (i32.const 294228) "a") (data (i32.const 294231) "a") (data (i32.const 294234) "a") (data (i32.const 294237) "a") (data (i32.const 294240) "a") (data (i32.const 294243) "a") (data (i32.const 294246) "a") (data (i32.const 294249) "a") (data (i32.const 294252) "a") (data (i32.const 294255) "a") (data (i32.const 294258) "a") (data (i32.const 294261) "a") (data (i32.const 294264) "a") (data (i32.const 294267) "a") (data (i32.const 294270) "a") (data (i32.const 294273) "a") (data (i32.const 294276) "a") (data (i32.const 294279) "a") (data (i32.const 294282) "a") (data (i32.const 294285) "a") (data (i32.const 294288) "a") (data (i32.const 294291) "a") (data (i32.const 294294) "a") (data (i32.const 294297) "a") (data (i32.const 294300) "a") (data (i32.const 294303) "a") (data (i32.const 294306) "a") (data (i32.const 294309) "a") (data (i32.const 294312) "a") (data (i32.const 294315) "a") (data (i32.const 294318) "a") (data (i32.const 294321) "a") (data (i32.const 294324) "a") (data (i32.const 294327) "a") (data (i32.const 294330) "a") (data (i32.const 294333) "a") (data (i32.const 294336) "a") (data (i32.const 294339) "a") (data (i32.const 294342) "a") (data (i32.const 294345) "a") (data (i32.const 294348) "a") (data (i32.const 294351) "a") (data (i32.const 294354) "a") (data (i32.const 294357) "a") (data (i32.const 294360) "a") (data (i32.const 294363) "a") (data (i32.const 294366) "a") (data (i32.const 294369) "a") (data (i32.const 294372) "a") (data (i32.const 294375) "a") (data (i32.const 294378) "a") (data (i32.const 294381) "a") (data (i32.const 294384) "a") (data (i32.const 294387) "a") (data (i32.const 294390) "a") (data (i32.const 294393) "a") (data (i32.const 294396) "a") (data (i32.const 294399) "a") (data (i32.const 294402) "a") (data (i32.const 294405) "a") (data (i32.const 294408) "a") (data (i32.const 294411) "a") (data (i32.const 294414) "a") (data (i32.const 294417) "a") (data (i32.const 294420) "a") (data (i32.const 294423) "a") (data (i32.const 294426) "a") (data (i32.const 294429) "a") (data (i32.const 294432) "a") (data (i32.const 294435) "a") (data (i32.const 294438) "a") (data (i32.const 294441) "a") (data (i32.const 294444) "a") (data (i32.const 294447) "a") (data (i32.const 294450) "a") (data (i32.const 294453) "a") (data (i32.const 294456) "a") (data (i32.const 294459) "a") (data (i32.const 294462) "a") (data (i32.const 294465) "a") (data (i32.const 294468) "a") (data (i32.const 294471) "a") (data (i32.const 294474) "a") (data (i32.const 294477) "a") (data (i32.const 294480) "a") (data (i32.const 294483) "a") (data (i32.const 294486) "a") (data (i32.const 294489) "a") (data (i32.const 294492) "a") (data (i32.const 294495) "a") (data (i32.const 294498) "a") (data (i32.const 294501) "a") (data (i32.const 294504) "a") (data (i32.const 294507) "a") (data (i32.const 294510) "a") (data (i32.const 294513) "a") (data (i32.const 294516) "a") (data (i32.const 294519) "a") (data (i32.const 294522) "a") (data (i32.const 294525) "a") (data (i32.const 294528) "a") (data (i32.const 294531) "a") (data (i32.const 294534) "a") (data (i32.const 294537) "a") (data (i32.const 294540) "a") (data (i32.const 294543) "a") (data (i32.const 294546) "a") (data (i32.const 294549) "a") (data (i32.const 294552) "a") (data (i32.const 294555) "a") (data (i32.const 294558) "a") (data (i32.const 294561) "a") (data (i32.const 294564) "a") (data (i32.const 294567) "a") (data (i32.const 294570) "a") (data (i32.const 294573) "a") (data (i32.const 294576) "a") (data (i32.const 294579) "a") (data (i32.const 294582) "a") (data (i32.const 294585) "a") (data (i32.const 294588) "a") (data (i32.const 294591) "a") (data (i32.const 294594) "a") (data (i32.const 294597) "a") (data (i32.const 294600) "a") (data (i32.const 294603) "a") (data (i32.const 294606) "a") (data (i32.const 294609) "a") (data (i32.const 294612) "a") (data (i32.const 294615) "a") (data (i32.const 294618) "a") (data (i32.const 294621) "a") (data (i32.const 294624) "a") (data (i32.const 294627) "a") (data (i32.const 294630) "a") (data (i32.const 294633) "a") (data (i32.const 294636) "a") (data (i32.const 294639) "a") (data (i32.const 294642) "a") (data (i32.const 294645) "a") (data (i32.const 294648) "a") (data (i32.const 294651) "a") (data (i32.const 294654) "a") (data (i32.const 294657) "a") (data (i32.const 294660) "a") (data (i32.const 294663) "a") (data (i32.const 294666) "a") (data (i32.const 294669) "a") (data (i32.const 294672) "a") (data (i32.const 294675) "a") (data (i32.const 294678) "a") (data (i32.const 294681) "a") (data (i32.const 294684) "a") (data (i32.const 294687) "a") (data (i32.const 294690) "a") (data (i32.const 294693) "a") (data (i32.const 294696) "a") (data (i32.const 294699) "a") (data (i32.const 294702) "a") (data (i32.const 294705) "a") (data (i32.const 294708) "a") (data (i32.const 294711) "a") (data (i32.const 294714) "a") (data (i32.const 294717) "a") (data (i32.const 294720) "a") (data (i32.const 294723) "a") (data (i32.const 294726) "a") (data (i32.const 294729) "a") (data (i32.const 294732) "a") (data (i32.const 294735) "a") (data (i32.const 294738) "a") (data (i32.const 294741) "a") (data (i32.const 294744) "a") (data (i32.const 294747) "a") (data (i32.const 294750) "a") (data (i32.const 294753) "a") (data (i32.const 294756) "a") (data (i32.const 294759) "a") (data (i32.const 294762) "a") (data (i32.const 294765) "a") (data (i32.const 294768) "a") (data (i32.const 294771) "a") (data (i32.const 294774) "a") (data (i32.const 294777) "a") (data (i32.const 294780) "a") (data (i32.const 294783) "a") (data (i32.const 294786) "a") (data (i32.const 294789) "a") (data (i32.const 294792) "a") (data (i32.const 294795) "a") (data (i32.const 294798) "a") (data (i32.const 294801) "a") (data (i32.const 294804) "a") (data (i32.const 294807) "a") (data (i32.const 294810) "a") (data (i32.const 294813) "a") (data (i32.const 294816) "a") (data (i32.const 294819) "a") (data (i32.const 294822) "a") (data (i32.const 294825) "a") (data (i32.const 294828) "a") (data (i32.const 294831) "a") (data (i32.const 294834) "a") (data (i32.const 294837) "a") (data (i32.const 294840) "a") (data (i32.const 294843) "a") (data (i32.const 294846) "a") (data (i32.const 294849) "a") (data (i32.const 294852) "a") (data (i32.const 294855) "a") (data (i32.const 294858) "a") (data (i32.const 294861) "a") (data (i32.const 294864) "a") (data (i32.const 294867) "a") (data (i32.const 294870) "a") (data (i32.const 294873) "a") (data (i32.const 294876) "a") (data (i32.const 294879) "a") (data (i32.const 294882) "a") (data (i32.const 294885) "a") (data (i32.const 294888) "a") (data (i32.const 294891) "a") (data (i32.const 294894) "a") (data (i32.const 294897) "a") (data (i32.const 294900) "a") (data (i32.const 294903) "a") (data (i32.const 294906) "a") (data (i32.const 294909) "a") (data (i32.const 294912) "a") (data (i32.const 294915) "a") (data (i32.const 294918) "a") (data (i32.const 294921) "a") (data (i32.const 294924) "a") (data (i32.const 294927) "a") (data (i32.const 294930) "a") (data (i32.const 294933) "a") (data (i32.const 294936) "a") (data (i32.const 294939) "a") (data (i32.const 294942) "a") (data (i32.const 294945) "a") (data (i32.const 294948) "a") (data (i32.const 294951) "a") (data (i32.const 294954) "a") (data (i32.const 294957) "a") (data (i32.const 294960) "a") (data (i32.const 294963) "a") (data (i32.const 294966) "a") (data (i32.const 294969) "a") (data (i32.const 294972) "a") (data (i32.const 294975) "a") (data (i32.const 294978) "a") (data (i32.const 294981) "a") (data (i32.const 294984) "a") (data (i32.const 294987) "a") (data (i32.const 294990) "a") (data (i32.const 294993) "a") (data (i32.const 294996) "a") (data (i32.const 294999) "a") (data (i32.const 295002) "a") (data (i32.const 295005) "a") (data (i32.const 295008) "a") (data (i32.const 295011) "a") (data (i32.const 295014) "a") (data (i32.const 295017) "a") (data (i32.const 295020) "a") (data (i32.const 295023) "a") (data (i32.const 295026) "a") (data (i32.const 295029) "a") (data (i32.const 295032) "a") (data (i32.const 295035) "a") (data (i32.const 295038) "a") (data (i32.const 295041) "a") (data (i32.const 295044) "a") (data (i32.const 295047) "a") (data (i32.const 295050) "a") (data (i32.const 295053) "a") (data (i32.const 295056) "a") (data (i32.const 295059) "a") (data (i32.const 295062) "a") (data (i32.const 295065) "a") (data (i32.const 295068) "a") (data (i32.const 295071) "a") (data (i32.const 295074) "a") (data (i32.const 295077) "a") (data (i32.const 295080) "a") (data (i32.const 295083) "a") (data (i32.const 295086) "a") (data (i32.const 295089) "a") (data (i32.const 295092) "a") (data (i32.const 295095) "a") (data (i32.const 295098) "a") (data (i32.const 295101) "a") (data (i32.const 295104) "a") (data (i32.const 295107) "a") (data (i32.const 295110) "a") (data (i32.const 295113) "a") (data (i32.const 295116) "a") (data (i32.const 295119) "a") (data (i32.const 295122) "a") (data (i32.const 295125) "a") (data (i32.const 295128) "a") (data (i32.const 295131) "a") (data (i32.const 295134) "a") (data (i32.const 295137) "a") (data (i32.const 295140) "a") (data (i32.const 295143) "a") (data (i32.const 295146) "a") (data (i32.const 295149) "a") (data (i32.const 295152) "a") (data (i32.const 295155) "a") (data (i32.const 295158) "a") (data (i32.const 295161) "a") (data (i32.const 295164) "a") (data (i32.const 295167) "a") (data (i32.const 295170) "a") (data (i32.const 295173) "a") (data (i32.const 295176) "a") (data (i32.const 295179) "a") (data (i32.const 295182) "a") (data (i32.const 295185) "a") (data (i32.const 295188) "a") (data (i32.const 295191) "a") (data (i32.const 295194) "a") (data (i32.const 295197) "a") (data (i32.const 295200) "a") (data (i32.const 295203) "a") (data (i32.const 295206) "a") (data (i32.const 295209) "a") (data (i32.const 295212) "a") (data (i32.const 295215) "a") (data (i32.const 295218) "a") (data (i32.const 295221) "a") (data (i32.const 295224) "a") (data (i32.const 295227) "a") (data (i32.const 295230) "a") (data (i32.const 295233) "a") (data (i32.const 295236) "a") (data (i32.const 295239) "a") (data (i32.const 295242) "a") (data (i32.const 295245) "a") (data (i32.const 295248) "a") (data (i32.const 295251) "a") (data (i32.const 295254) "a") (data (i32.const 295257) "a") (data (i32.const 295260) "a") (data (i32.const 295263) "a") (data (i32.const 295266) "a") (data (i32.const 295269) "a") (data (i32.const 295272) "a") (data (i32.const 295275) "a") (data (i32.const 295278) "a") (data (i32.const 295281) "a") (data (i32.const 295284) "a") (data (i32.const 295287) "a") (data (i32.const 295290) "a") (data (i32.const 295293) "a") (data (i32.const 295296) "a") (data (i32.const 295299) "a") (data (i32.const 295302) "a") (data (i32.const 295305) "a") (data (i32.const 295308) "a") (data (i32.const 295311) "a") (data (i32.const 295314) "a") (data (i32.const 295317) "a") (data (i32.const 295320) "a") (data (i32.const 295323) "a") (data (i32.const 295326) "a") (data (i32.const 295329) "a") (data (i32.const 295332) "a") (data (i32.const 295335) "a") (data (i32.const 295338) "a") (data (i32.const 295341) "a") (data (i32.const 295344) "a") (data (i32.const 295347) "a") (data (i32.const 295350) "a") (data (i32.const 295353) "a") (data (i32.const 295356) "a") (data (i32.const 295359) "a") (data (i32.const 295362) "a") (data (i32.const 295365) "a") (data (i32.const 295368) "a") (data (i32.const 295371) "a") (data (i32.const 295374) "a") (data (i32.const 295377) "a") (data (i32.const 295380) "a") (data (i32.const 295383) "a") (data (i32.const 295386) "a") (data (i32.const 295389) "a") (data (i32.const 295392) "a") (data (i32.const 295395) "a") (data (i32.const 295398) "a") (data (i32.const 295401) "a") (data (i32.const 295404) "a") (data (i32.const 295407) "a") (data (i32.const 295410) "a") (data (i32.const 295413) "a") (data (i32.const 295416) "a") (data (i32.const 295419) "a") (data (i32.const 295422) "a") (data (i32.const 295425) "a") (data (i32.const 295428) "a") (data (i32.const 295431) "a") (data (i32.const 295434) "a") (data (i32.const 295437) "a") (data (i32.const 295440) "a") (data (i32.const 295443) "a") (data (i32.const 295446) "a") (data (i32.const 295449) "a") (data (i32.const 295452) "a") (data (i32.const 295455) "a") (data (i32.const 295458) "a") (data (i32.const 295461) "a") (data (i32.const 295464) "a") (data (i32.const 295467) "a") (data (i32.const 295470) "a") (data (i32.const 295473) "a") (data (i32.const 295476) "a") (data (i32.const 295479) "a") (data (i32.const 295482) "a") (data (i32.const 295485) "a") (data (i32.const 295488) "a") (data (i32.const 295491) "a") (data (i32.const 295494) "a") (data (i32.const 295497) "a") (data (i32.const 295500) "a") (data (i32.const 295503) "a") (data (i32.const 295506) "a") (data (i32.const 295509) "a") (data (i32.const 295512) "a") (data (i32.const 295515) "a") (data (i32.const 295518) "a") (data (i32.const 295521) "a") (data (i32.const 295524) "a") (data (i32.const 295527) "a") (data (i32.const 295530) "a") (data (i32.const 295533) "a") (data (i32.const 295536) "a") (data (i32.const 295539) "a") (data (i32.const 295542) "a") (data (i32.const 295545) "a") (data (i32.const 295548) "a") (data (i32.const 295551) "a") (data (i32.const 295554) "a") (data (i32.const 295557) "a") (data (i32.const 295560) "a") (data (i32.const 295563) "a") (data (i32.const 295566) "a") (data (i32.const 295569) "a") (data (i32.const 295572) "a") (data (i32.const 295575) "a") (data (i32.const 295578) "a") (data (i32.const 295581) "a") (data (i32.const 295584) "a") (data (i32.const 295587) "a") (data (i32.const 295590) "a") (data (i32.const 295593) "a") (data (i32.const 295596) "a") (data (i32.const 295599) "a") (data (i32.const 295602) "a") (data (i32.const 295605) "a") (data (i32.const 295608) "a") (data (i32.const 295611) "a") (data (i32.const 295614) "a") (data (i32.const 295617) "a") (data (i32.const 295620) "a") (data (i32.const 295623) "a") (data (i32.const 295626) "a") (data (i32.const 295629) "a") (data (i32.const 295632) "a") (data (i32.const 295635) "a") (data (i32.const 295638) "a") (data (i32.const 295641) "a") (data (i32.const 295644) "a") (data (i32.const 295647) "a") (data (i32.const 295650) "a") (data (i32.const 295653) "a") (data (i32.const 295656) "a") (data (i32.const 295659) "a") (data (i32.const 295662) "a") (data (i32.const 295665) "a") (data (i32.const 295668) "a") (data (i32.const 295671) "a") (data (i32.const 295674) "a") (data (i32.const 295677) "a") (data (i32.const 295680) "a") (data (i32.const 295683) "a") (data (i32.const 295686) "a") (data (i32.const 295689) "a") (data (i32.const 295692) "a") (data (i32.const 295695) "a") (data (i32.const 295698) "a") (data (i32.const 295701) "a") (data (i32.const 295704) "a") (data (i32.const 295707) "a") (data (i32.const 295710) "a") (data (i32.const 295713) "a") (data (i32.const 295716) "a") (data (i32.const 295719) "a") (data (i32.const 295722) "a") (data (i32.const 295725) "a") (data (i32.const 295728) "a") (data (i32.const 295731) "a") (data (i32.const 295734) "a") (data (i32.const 295737) "a") (data (i32.const 295740) "a") (data (i32.const 295743) "a") (data (i32.const 295746) "a") (data (i32.const 295749) "a") (data (i32.const 295752) "a") (data (i32.const 295755) "a") (data (i32.const 295758) "a") (data (i32.const 295761) "a") (data (i32.const 295764) "a") (data (i32.const 295767) "a") (data (i32.const 295770) "a") (data (i32.const 295773) "a") (data (i32.const 295776) "a") (data (i32.const 295779) "a") (data (i32.const 295782) "a") (data (i32.const 295785) "a") (data (i32.const 295788) "a") (data (i32.const 295791) "a") (data (i32.const 295794) "a") (data (i32.const 295797) "a") (data (i32.const 295800) "a") (data (i32.const 295803) "a") (data (i32.const 295806) "a") (data (i32.const 295809) "a") (data (i32.const 295812) "a") (data (i32.const 295815) "a") (data (i32.const 295818) "a") (data (i32.const 295821) "a") (data (i32.const 295824) "a") (data (i32.const 295827) "a") (data (i32.const 295830) "a") (data (i32.const 295833) "a") (data (i32.const 295836) "a") (data (i32.const 295839) "a") (data (i32.const 295842) "a") (data (i32.const 295845) "a") (data (i32.const 295848) "a") (data (i32.const 295851) "a") (data (i32.const 295854) "a") (data (i32.const 295857) "a") (data (i32.const 295860) "a") (data (i32.const 295863) "a") (data (i32.const 295866) "a") (data (i32.const 295869) "a") (data (i32.const 295872) "a") (data (i32.const 295875) "a") (data (i32.const 295878) "a") (data (i32.const 295881) "a") (data (i32.const 295884) "a") (data (i32.const 295887) "a") (data (i32.const 295890) "a") (data (i32.const 295893) "a") (data (i32.const 295896) "a") (data (i32.const 295899) "a") (data (i32.const 295902) "a") (data (i32.const 295905) "a") (data (i32.const 295908) "a") (data (i32.const 295911) "a") (data (i32.const 295914) "a") (data (i32.const 295917) "a") (data (i32.const 295920) "a") (data (i32.const 295923) "a") (data (i32.const 295926) "a") (data (i32.const 295929) "a") (data (i32.const 295932) "a") (data (i32.const 295935) "a") (data (i32.const 295938) "a") (data (i32.const 295941) "a") (data (i32.const 295944) "a") (data (i32.const 295947) "a") (data (i32.const 295950) "a") (data (i32.const 295953) "a") (data (i32.const 295956) "a") (data (i32.const 295959) "a") (data (i32.const 295962) "a") (data (i32.const 295965) "a") (data (i32.const 295968) "a") (data (i32.const 295971) "a") (data (i32.const 295974) "a") (data (i32.const 295977) "a") (data (i32.const 295980) "a") (data (i32.const 295983) "a") (data (i32.const 295986) "a") (data (i32.const 295989) "a") (data (i32.const 295992) "a") (data (i32.const 295995) "a") (data (i32.const 295998) "a") (data (i32.const 296001) "a") (data (i32.const 296004) "a") (data (i32.const 296007) "a") (data (i32.const 296010) "a") (data (i32.const 296013) "a") (data (i32.const 296016) "a") (data (i32.const 296019) "a") (data (i32.const 296022) "a") (data (i32.const 296025) "a") (data (i32.const 296028) "a") (data (i32.const 296031) "a") (data (i32.const 296034) "a") (data (i32.const 296037) "a") (data (i32.const 296040) "a") (data (i32.const 296043) "a") (data (i32.const 296046) "a") (data (i32.const 296049) "a") (data (i32.const 296052) "a") (data (i32.const 296055) "a") (data (i32.const 296058) "a") (data (i32.const 296061) "a") (data (i32.const 296064) "a") (data (i32.const 296067) "a") (data (i32.const 296070) "a") (data (i32.const 296073) "a") (data (i32.const 296076) "a") (data (i32.const 296079) "a") (data (i32.const 296082) "a") (data (i32.const 296085) "a") (data (i32.const 296088) "a") (data (i32.const 296091) "a") (data (i32.const 296094) "a") (data (i32.const 296097) "a") (data (i32.const 296100) "a") (data (i32.const 296103) "a") (data (i32.const 296106) "a") (data (i32.const 296109) "a") (data (i32.const 296112) "a") (data (i32.const 296115) "a") (data (i32.const 296118) "a") (data (i32.const 296121) "a") (data (i32.const 296124) "a") (data (i32.const 296127) "a") (data (i32.const 296130) "a") (data (i32.const 296133) "a") (data (i32.const 296136) "a") (data (i32.const 296139) "a") (data (i32.const 296142) "a") (data (i32.const 296145) "a") (data (i32.const 296148) "a") (data (i32.const 296151) "a") (data (i32.const 296154) "a") (data (i32.const 296157) "a") (data (i32.const 296160) "a") (data (i32.const 296163) "a") (data (i32.const 296166) "a") (data (i32.const 296169) "a") (data (i32.const 296172) "a") (data (i32.const 296175) "a") (data (i32.const 296178) "a") (data (i32.const 296181) "a") (data (i32.const 296184) "a") (data (i32.const 296187) "a") (data (i32.const 296190) "a") (data (i32.const 296193) "a") (data (i32.const 296196) "a") (data (i32.const 296199) "a") (data (i32.const 296202) "a") (data (i32.const 296205) "a") (data (i32.const 296208) "a") (data (i32.const 296211) "a") (data (i32.const 296214) "a") (data (i32.const 296217) "a") (data (i32.const 296220) "a") (data (i32.const 296223) "a") (data (i32.const 296226) "a") (data (i32.const 296229) "a") (data (i32.const 296232) "a") (data (i32.const 296235) "a") (data (i32.const 296238) "a") (data (i32.const 296241) "a") (data (i32.const 296244) "a") (data (i32.const 296247) "a") (data (i32.const 296250) "a") (data (i32.const 296253) "a") (data (i32.const 296256) "a") (data (i32.const 296259) "a") (data (i32.const 296262) "a") (data (i32.const 296265) "a") (data (i32.const 296268) "a") (data (i32.const 296271) "a") (data (i32.const 296274) "a") (data (i32.const 296277) "a") (data (i32.const 296280) "a") (data (i32.const 296283) "a") (data (i32.const 296286) "a") (data (i32.const 296289) "a") (data (i32.const 296292) "a") (data (i32.const 296295) "a") (data (i32.const 296298) "a") (data (i32.const 296301) "a") (data (i32.const 296304) "a") (data (i32.const 296307) "a") (data (i32.const 296310) "a") (data (i32.const 296313) "a") (data (i32.const 296316) "a") (data (i32.const 296319) "a") (data (i32.const 296322) "a") (data (i32.const 296325) "a") (data (i32.const 296328) "a") (data (i32.const 296331) "a") (data (i32.const 296334) "a") (data (i32.const 296337) "a") (data (i32.const 296340) "a") (data (i32.const 296343) "a") (data (i32.const 296346) "a") (data (i32.const 296349) "a") (data (i32.const 296352) "a") (data (i32.const 296355) "a") (data (i32.const 296358) "a") (data (i32.const 296361) "a") (data (i32.const 296364) "a") (data (i32.const 296367) "a") (data (i32.const 296370) "a") (data (i32.const 296373) "a") (data (i32.const 296376) "a") (data (i32.const 296379) "a") (data (i32.const 296382) "a") (data (i32.const 296385) "a") (data (i32.const 296388) "a") (data (i32.const 296391) "a") (data (i32.const 296394) "a") (data (i32.const 296397) "a") (data (i32.const 296400) "a") (data (i32.const 296403) "a") (data (i32.const 296406) "a") (data (i32.const 296409) "a") (data (i32.const 296412) "a") (data (i32.const 296415) "a") (data (i32.const 296418) "a") (data (i32.const 296421) "a") (data (i32.const 296424) "a") (data (i32.const 296427) "a") (data (i32.const 296430) "a") (data (i32.const 296433) "a") (data (i32.const 296436) "a") (data (i32.const 296439) "a") (data (i32.const 296442) "a") (data (i32.const 296445) "a") (data (i32.const 296448) "a") (data (i32.const 296451) "a") (data (i32.const 296454) "a") (data (i32.const 296457) "a") (data (i32.const 296460) "a") (data (i32.const 296463) "a") (data (i32.const 296466) "a") (data (i32.const 296469) "a") (data (i32.const 296472) "a") (data (i32.const 296475) "a") (data (i32.const 296478) "a") (data (i32.const 296481) "a") (data (i32.const 296484) "a") (data (i32.const 296487) "a") (data (i32.const 296490) "a") (data (i32.const 296493) "a") (data (i32.const 296496) "a") (data (i32.const 296499) "a") (data (i32.const 296502) "a") (data (i32.const 296505) "a") (data (i32.const 296508) "a") (data (i32.const 296511) "a") (data (i32.const 296514) "a") (data (i32.const 296517) "a") (data (i32.const 296520) "a") (data (i32.const 296523) "a") (data (i32.const 296526) "a") (data (i32.const 296529) "a") (data (i32.const 296532) "a") (data (i32.const 296535) "a") (data (i32.const 296538) "a") (data (i32.const 296541) "a") (data (i32.const 296544) "a") (data (i32.const 296547) "a") (data (i32.const 296550) "a") (data (i32.const 296553) "a") (data (i32.const 296556) "a") (data (i32.const 296559) "a") (data (i32.const 296562) "a") (data (i32.const 296565) "a") (data (i32.const 296568) "a") (data (i32.const 296571) "a") (data (i32.const 296574) "a") (data (i32.const 296577) "a") (data (i32.const 296580) "a") (data (i32.const 296583) "a") (data (i32.const 296586) "a") (data (i32.const 296589) "a") (data (i32.const 296592) "a") (data (i32.const 296595) "a") (data (i32.const 296598) "a") (data (i32.const 296601) "a") (data (i32.const 296604) "a") (data (i32.const 296607) "a") (data (i32.const 296610) "a") (data (i32.const 296613) "a") (data (i32.const 296616) "a") (data (i32.const 296619) "a") (data (i32.const 296622) "a") (data (i32.const 296625) "a") (data (i32.const 296628) "a") (data (i32.const 296631) "a") (data (i32.const 296634) "a") (data (i32.const 296637) "a") (data (i32.const 296640) "a") (data (i32.const 296643) "a") (data (i32.const 296646) "a") (data (i32.const 296649) "a") (data (i32.const 296652) "a") (data (i32.const 296655) "a") (data (i32.const 296658) "a") (data (i32.const 296661) "a") (data (i32.const 296664) "a") (data (i32.const 296667) "a") (data (i32.const 296670) "a") (data (i32.const 296673) "a") (data (i32.const 296676) "a") (data (i32.const 296679) "a") (data (i32.const 296682) "a") (data (i32.const 296685) "a") (data (i32.const 296688) "a") (data (i32.const 296691) "a") (data (i32.const 296694) "a") (data (i32.const 296697) "a") (data (i32.const 296700) "a") (data (i32.const 296703) "a") (data (i32.const 296706) "a") (data (i32.const 296709) "a") (data (i32.const 296712) "a") (data (i32.const 296715) "a") (data (i32.const 296718) "a") (data (i32.const 296721) "a") (data (i32.const 296724) "a") (data (i32.const 296727) "a") (data (i32.const 296730) "a") (data (i32.const 296733) "a") (data (i32.const 296736) "a") (data (i32.const 296739) "a") (data (i32.const 296742) "a") (data (i32.const 296745) "a") (data (i32.const 296748) "a") (data (i32.const 296751) "a") (data (i32.const 296754) "a") (data (i32.const 296757) "a") (data (i32.const 296760) "a") (data (i32.const 296763) "a") (data (i32.const 296766) "a") (data (i32.const 296769) "a") (data (i32.const 296772) "a") (data (i32.const 296775) "a") (data (i32.const 296778) "a") (data (i32.const 296781) "a") (data (i32.const 296784) "a") (data (i32.const 296787) "a") (data (i32.const 296790) "a") (data (i32.const 296793) "a") (data (i32.const 296796) "a") (data (i32.const 296799) "a") (data (i32.const 296802) "a") (data (i32.const 296805) "a") (data (i32.const 296808) "a") (data (i32.const 296811) "a") (data (i32.const 296814) "a") (data (i32.const 296817) "a") (data (i32.const 296820) "a") (data (i32.const 296823) "a") (data (i32.const 296826) "a") (data (i32.const 296829) "a") (data (i32.const 296832) "a") (data (i32.const 296835) "a") (data (i32.const 296838) "a") (data (i32.const 296841) "a") (data (i32.const 296844) "a") (data (i32.const 296847) "a") (data (i32.const 296850) "a") (data (i32.const 296853) "a") (data (i32.const 296856) "a") (data (i32.const 296859) "a") (data (i32.const 296862) "a") (data (i32.const 296865) "a") (data (i32.const 296868) "a") (data (i32.const 296871) "a") (data (i32.const 296874) "a") (data (i32.const 296877) "a") (data (i32.const 296880) "a") (data (i32.const 296883) "a") (data (i32.const 296886) "a") (data (i32.const 296889) "a") (data (i32.const 296892) "a") (data (i32.const 296895) "a") (data (i32.const 296898) "a") (data (i32.const 296901) "a") (data (i32.const 296904) "a") (data (i32.const 296907) "a") (data (i32.const 296910) "a") (data (i32.const 296913) "a") (data (i32.const 296916) "a") (data (i32.const 296919) "a") (data (i32.const 296922) "a") (data (i32.const 296925) "a") (data (i32.const 296928) "a") (data (i32.const 296931) "a") (data (i32.const 296934) "a") (data (i32.const 296937) "a") (data (i32.const 296940) "a") (data (i32.const 296943) "a") (data (i32.const 296946) "a") (data (i32.const 296949) "a") (data (i32.const 296952) "a") (data (i32.const 296955) "a") (data (i32.const 296958) "a") (data (i32.const 296961) "a") (data (i32.const 296964) "a") (data (i32.const 296967) "a") (data (i32.const 296970) "a") (data (i32.const 296973) "a") (data (i32.const 296976) "a") (data (i32.const 296979) "a") (data (i32.const 296982) "a") (data (i32.const 296985) "a") (data (i32.const 296988) "a") (data (i32.const 296991) "a") (data (i32.const 296994) "a") (data (i32.const 296997) "a") (data (i32.const 297000) "a") (data (i32.const 297003) "a") (data (i32.const 297006) "a") (data (i32.const 297009) "a") (data (i32.const 297012) "a") (data (i32.const 297015) "a") (data (i32.const 297018) "a") (data (i32.const 297021) "a") (data (i32.const 297024) "a") (data (i32.const 297027) "a") (data (i32.const 297030) "a") (data (i32.const 297033) "a") (data (i32.const 297036) "a") (data (i32.const 297039) "a") (data (i32.const 297042) "a") (data (i32.const 297045) "a") (data (i32.const 297048) "a") (data (i32.const 297051) "a") (data (i32.const 297054) "a") (data (i32.const 297057) "a") (data (i32.const 297060) "a") (data (i32.const 297063) "a") (data (i32.const 297066) "a") (data (i32.const 297069) "a") (data (i32.const 297072) "a") (data (i32.const 297075) "a") (data (i32.const 297078) "a") (data (i32.const 297081) "a") (data (i32.const 297084) "a") (data (i32.const 297087) "a") (data (i32.const 297090) "a") (data (i32.const 297093) "a") (data (i32.const 297096) "a") (data (i32.const 297099) "a") (data (i32.const 297102) "a") (data (i32.const 297105) "a") (data (i32.const 297108) "a") (data (i32.const 297111) "a") (data (i32.const 297114) "a") (data (i32.const 297117) "a") (data (i32.const 297120) "a") (data (i32.const 297123) "a") (data (i32.const 297126) "a") (data (i32.const 297129) "a") (data (i32.const 297132) "a") (data (i32.const 297135) "a") (data (i32.const 297138) "a") (data (i32.const 297141) "a") (data (i32.const 297144) "a") (data (i32.const 297147) "a") (data (i32.const 297150) "a") (data (i32.const 297153) "a") (data (i32.const 297156) "a") (data (i32.const 297159) "a") (data (i32.const 297162) "a") (data (i32.const 297165) "a") (data (i32.const 297168) "a") (data (i32.const 297171) "a") (data (i32.const 297174) "a") (data (i32.const 297177) "a") (data (i32.const 297180) "a") (data (i32.const 297183) "a") (data (i32.const 297186) "a") (data (i32.const 297189) "a") (data (i32.const 297192) "a") (data (i32.const 297195) "a") (data (i32.const 297198) "a") (data (i32.const 297201) "a") (data (i32.const 297204) "a") (data (i32.const 297207) "a") (data (i32.const 297210) "a") (data (i32.const 297213) "a") (data (i32.const 297216) "a") (data (i32.const 297219) "a") (data (i32.const 297222) "a") (data (i32.const 297225) "a") (data (i32.const 297228) "a") (data (i32.const 297231) "a") (data (i32.const 297234) "a") (data (i32.const 297237) "a") (data (i32.const 297240) "a") (data (i32.const 297243) "a") (data (i32.const 297246) "a") (data (i32.const 297249) "a") (data (i32.const 297252) "a") (data (i32.const 297255) "a") (data (i32.const 297258) "a") (data (i32.const 297261) "a") (data (i32.const 297264) "a") (data (i32.const 297267) "a") (data (i32.const 297270) "a") (data (i32.const 297273) "a") (data (i32.const 297276) "a") (data (i32.const 297279) "a") (data (i32.const 297282) "a") (data (i32.const 297285) "a") (data (i32.const 297288) "a") (data (i32.const 297291) "a") (data (i32.const 297294) "a") (data (i32.const 297297) "a") (data (i32.const 297300) "a") (data (i32.const 297303) "a") (data (i32.const 297306) "a") (data (i32.const 297309) "a") (data (i32.const 297312) "a") (data (i32.const 297315) "a") (data (i32.const 297318) "a") (data (i32.const 297321) "a") (data (i32.const 297324) "a") (data (i32.const 297327) "a") (data (i32.const 297330) "a") (data (i32.const 297333) "a") (data (i32.const 297336) "a") (data (i32.const 297339) "a") (data (i32.const 297342) "a") (data (i32.const 297345) "a") (data (i32.const 297348) "a") (data (i32.const 297351) "a") (data (i32.const 297354) "a") (data (i32.const 297357) "a") (data (i32.const 297360) "a") (data (i32.const 297363) "a") (data (i32.const 297366) "a") (data (i32.const 297369) "a") (data (i32.const 297372) "a") (data (i32.const 297375) "a") (data (i32.const 297378) "a") (data (i32.const 297381) "a") (data (i32.const 297384) "a") (data (i32.const 297387) "a") (data (i32.const 297390) "a") (data (i32.const 297393) "a") (data (i32.const 297396) "a") (data (i32.const 297399) "a") (data (i32.const 297402) "a") (data (i32.const 297405) "a") (data (i32.const 297408) "a") (data (i32.const 297411) "a") (data (i32.const 297414) "a") (data (i32.const 297417) "a") (data (i32.const 297420) "a") (data (i32.const 297423) "a") (data (i32.const 297426) "a") (data (i32.const 297429) "a") (data (i32.const 297432) "a") (data (i32.const 297435) "a") (data (i32.const 297438) "a") (data (i32.const 297441) "a") (data (i32.const 297444) "a") (data (i32.const 297447) "a") (data (i32.const 297450) "a") (data (i32.const 297453) "a") (data (i32.const 297456) "a") (data (i32.const 297459) "a") (data (i32.const 297462) "a") (data (i32.const 297465) "a") (data (i32.const 297468) "a") (data (i32.const 297471) "a") (data (i32.const 297474) "a") (data (i32.const 297477) "a") (data (i32.const 297480) "a") (data (i32.const 297483) "a") (data (i32.const 297486) "a") (data (i32.const 297489) "a") (data (i32.const 297492) "a") (data (i32.const 297495) "a") (data (i32.const 297498) "a") (data (i32.const 297501) "a") (data (i32.const 297504) "a") (data (i32.const 297507) "a") (data (i32.const 297510) "a") (data (i32.const 297513) "a") (data (i32.const 297516) "a") (data (i32.const 297519) "a") (data (i32.const 297522) "a") (data (i32.const 297525) "a") (data (i32.const 297528) "a") (data (i32.const 297531) "a") (data (i32.const 297534) "a") (data (i32.const 297537) "a") (data (i32.const 297540) "a") (data (i32.const 297543) "a") (data (i32.const 297546) "a") (data (i32.const 297549) "a") (data (i32.const 297552) "a") (data (i32.const 297555) "a") (data (i32.const 297558) "a") (data (i32.const 297561) "a") (data (i32.const 297564) "a") (data (i32.const 297567) "a") (data (i32.const 297570) "a") (data (i32.const 297573) "a") (data (i32.const 297576) "a") (data (i32.const 297579) "a") (data (i32.const 297582) "a") (data (i32.const 297585) "a") (data (i32.const 297588) "a") (data (i32.const 297591) "a") (data (i32.const 297594) "a") (data (i32.const 297597) "a") (data (i32.const 297600) "a") (data (i32.const 297603) "a") (data (i32.const 297606) "a") (data (i32.const 297609) "a") (data (i32.const 297612) "a") (data (i32.const 297615) "a") (data (i32.const 297618) "a") (data (i32.const 297621) "a") (data (i32.const 297624) "a") (data (i32.const 297627) "a") (data (i32.const 297630) "a") (data (i32.const 297633) "a") (data (i32.const 297636) "a") (data (i32.const 297639) "a") (data (i32.const 297642) "a") (data (i32.const 297645) "a") (data (i32.const 297648) "a") (data (i32.const 297651) "a") (data (i32.const 297654) "a") (data (i32.const 297657) "a") (data (i32.const 297660) "a") (data (i32.const 297663) "a") (data (i32.const 297666) "a") (data (i32.const 297669) "a") (data (i32.const 297672) "a") (data (i32.const 297675) "a") (data (i32.const 297678) "a") (data (i32.const 297681) "a") (data (i32.const 297684) "a") (data (i32.const 297687) "a") (data (i32.const 297690) "a") (data (i32.const 297693) "a") (data (i32.const 297696) "a") (data (i32.const 297699) "a") (data (i32.const 297702) "a") (data (i32.const 297705) "a") (data (i32.const 297708) "a") (data (i32.const 297711) "a") (data (i32.const 297714) "a") (data (i32.const 297717) "a") (data (i32.const 297720) "a") (data (i32.const 297723) "a") (data (i32.const 297726) "a") (data (i32.const 297729) "a") (data (i32.const 297732) "a") (data (i32.const 297735) "a") (data (i32.const 297738) "a") (data (i32.const 297741) "a") (data (i32.const 297744) "a") (data (i32.const 297747) "a") (data (i32.const 297750) "a") (data (i32.const 297753) "a") (data (i32.const 297756) "a") (data (i32.const 297759) "a") (data (i32.const 297762) "a") (data (i32.const 297765) "a") (data (i32.const 297768) "a") (data (i32.const 297771) "a") (data (i32.const 297774) "a") (data (i32.const 297777) "a") (data (i32.const 297780) "a") (data (i32.const 297783) "a") (data (i32.const 297786) "a") (data (i32.const 297789) "a") (data (i32.const 297792) "a") (data (i32.const 297795) "a") (data (i32.const 297798) "a") (data (i32.const 297801) "a") (data (i32.const 297804) "a") (data (i32.const 297807) "a") (data (i32.const 297810) "a") (data (i32.const 297813) "a") (data (i32.const 297816) "a") (data (i32.const 297819) "a") (data (i32.const 297822) "a") (data (i32.const 297825) "a") (data (i32.const 297828) "a") (data (i32.const 297831) "a") (data (i32.const 297834) "a") (data (i32.const 297837) "a") (data (i32.const 297840) "a") (data (i32.const 297843) "a") (data (i32.const 297846) "a") (data (i32.const 297849) "a") (data (i32.const 297852) "a") (data (i32.const 297855) "a") (data (i32.const 297858) "a") (data (i32.const 297861) "a") (data (i32.const 297864) "a") (data (i32.const 297867) "a") (data (i32.const 297870) "a") (data (i32.const 297873) "a") (data (i32.const 297876) "a") (data (i32.const 297879) "a") (data (i32.const 297882) "a") (data (i32.const 297885) "a") (data (i32.const 297888) "a") (data (i32.const 297891) "a") (data (i32.const 297894) "a") (data (i32.const 297897) "a") (data (i32.const 297900) "a") (data (i32.const 297903) "a") (data (i32.const 297906) "a") (data (i32.const 297909) "a") (data (i32.const 297912) "a") (data (i32.const 297915) "a") (data (i32.const 297918) "a") (data (i32.const 297921) "a") (data (i32.const 297924) "a") (data (i32.const 297927) "a") (data (i32.const 297930) "a") (data (i32.const 297933) "a") (data (i32.const 297936) "a") (data (i32.const 297939) "a") (data (i32.const 297942) "a") (data (i32.const 297945) "a") (data (i32.const 297948) "a") (data (i32.const 297951) "a") (data (i32.const 297954) "a") (data (i32.const 297957) "a") (data (i32.const 297960) "a") (data (i32.const 297963) "a") (data (i32.const 297966) "a") (data (i32.const 297969) "a") (data (i32.const 297972) "a") (data (i32.const 297975) "a") (data (i32.const 297978) "a") (data (i32.const 297981) "a") (data (i32.const 297984) "a") (data (i32.const 297987) "a") (data (i32.const 297990) "a") (data (i32.const 297993) "a") (data (i32.const 297996) "a") (data (i32.const 297999) "a") (data (i32.const 298002) "a") (data (i32.const 298005) "a") (data (i32.const 298008) "a") (data (i32.const 298011) "a") (data (i32.const 298014) "a") (data (i32.const 298017) "a") (data (i32.const 298020) "a") (data (i32.const 298023) "a") (data (i32.const 298026) "a") (data (i32.const 298029) "a") (data (i32.const 298032) "a") (data (i32.const 298035) "a") (data (i32.const 298038) "a") (data (i32.const 298041) "a") (data (i32.const 298044) "a") (data (i32.const 298047) "a") (data (i32.const 298050) "a") (data (i32.const 298053) "a") (data (i32.const 298056) "a") (data (i32.const 298059) "a") (data (i32.const 298062) "a") (data (i32.const 298065) "a") (data (i32.const 298068) "a") (data (i32.const 298071) "a") (data (i32.const 298074) "a") (data (i32.const 298077) "a") (data (i32.const 298080) "a") (data (i32.const 298083) "a") (data (i32.const 298086) "a") (data (i32.const 298089) "a") (data (i32.const 298092) "a") (data (i32.const 298095) "a") (data (i32.const 298098) "a") (data (i32.const 298101) "a") (data (i32.const 298104) "a") (data (i32.const 298107) "a") (data (i32.const 298110) "a") (data (i32.const 298113) "a") (data (i32.const 298116) "a") (data (i32.const 298119) "a") (data (i32.const 298122) "a") (data (i32.const 298125) "a") (data (i32.const 298128) "a") (data (i32.const 298131) "a") (data (i32.const 298134) "a") (data (i32.const 298137) "a") (data (i32.const 298140) "a") (data (i32.const 298143) "a") (data (i32.const 298146) "a") (data (i32.const 298149) "a") (data (i32.const 298152) "a") (data (i32.const 298155) "a") (data (i32.const 298158) "a") (data (i32.const 298161) "a") (data (i32.const 298164) "a") (data (i32.const 298167) "a") (data (i32.const 298170) "a") (data (i32.const 298173) "a") (data (i32.const 298176) "a") (data (i32.const 298179) "a") (data (i32.const 298182) "a") (data (i32.const 298185) "a") (data (i32.const 298188) "a") (data (i32.const 298191) "a") (data (i32.const 298194) "a") (data (i32.const 298197) "a") (data (i32.const 298200) "a") (data (i32.const 298203) "a") (data (i32.const 298206) "a") (data (i32.const 298209) "a") (data (i32.const 298212) "a") (data (i32.const 298215) "a") (data (i32.const 298218) "a") (data (i32.const 298221) "a") (data (i32.const 298224) "a") (data (i32.const 298227) "a") (data (i32.const 298230) "a") (data (i32.const 298233) "a") (data (i32.const 298236) "a") (data (i32.const 298239) "a") (data (i32.const 298242) "a") (data (i32.const 298245) "a") (data (i32.const 298248) "a") (data (i32.const 298251) "a") (data (i32.const 298254) "a") (data (i32.const 298257) "a") (data (i32.const 298260) "a") (data (i32.const 298263) "a") (data (i32.const 298266) "a") (data (i32.const 298269) "a") (data (i32.const 298272) "a") (data (i32.const 298275) "a") (data (i32.const 298278) "a") (data (i32.const 298281) "a") (data (i32.const 298284) "a") (data (i32.const 298287) "a") (data (i32.const 298290) "a") (data (i32.const 298293) "a") (data (i32.const 298296) "a") (data (i32.const 298299) "a") (data (i32.const 298302) "a") (data (i32.const 298305) "a") (data (i32.const 298308) "a") (data (i32.const 298311) "a") (data (i32.const 298314) "a") (data (i32.const 298317) "a") (data (i32.const 298320) "a") (data (i32.const 298323) "a") (data (i32.const 298326) "a") (data (i32.const 298329) "a") (data (i32.const 298332) "a") (data (i32.const 298335) "a") (data (i32.const 298338) "a") (data (i32.const 298341) "a") (data (i32.const 298344) "a") (data (i32.const 298347) "a") (data (i32.const 298350) "a") (data (i32.const 298353) "a") (data (i32.const 298356) "a") (data (i32.const 298359) "a") (data (i32.const 298362) "a") (data (i32.const 298365) "a") (data (i32.const 298368) "a") (data (i32.const 298371) "a") (data (i32.const 298374) "a") (data (i32.const 298377) "a") (data (i32.const 298380) "a") (data (i32.const 298383) "a") (data (i32.const 298386) "a") (data (i32.const 298389) "a") (data (i32.const 298392) "a") (data (i32.const 298395) "a") (data (i32.const 298398) "a") (data (i32.const 298401) "a") (data (i32.const 298404) "a") (data (i32.const 298407) "a") (data (i32.const 298410) "a") (data (i32.const 298413) "a") (data (i32.const 298416) "a") (data (i32.const 298419) "a") (data (i32.const 298422) "a") (data (i32.const 298425) "a") (data (i32.const 298428) "a") (data (i32.const 298431) "a") (data (i32.const 298434) "a") (data (i32.const 298437) "a") (data (i32.const 298440) "a") (data (i32.const 298443) "a") (data (i32.const 298446) "a") (data (i32.const 298449) "a") (data (i32.const 298452) "a") (data (i32.const 298455) "a") (data (i32.const 298458) "a") (data (i32.const 298461) "a") (data (i32.const 298464) "a") (data (i32.const 298467) "a") (data (i32.const 298470) "a") (data (i32.const 298473) "a") (data (i32.const 298476) "a") (data (i32.const 298479) "a") (data (i32.const 298482) "a") (data (i32.const 298485) "a") (data (i32.const 298488) "a") (data (i32.const 298491) "a") (data (i32.const 298494) "a") (data (i32.const 298497) "a") (data (i32.const 298500) "a") (data (i32.const 298503) "a") (data (i32.const 298506) "a") (data (i32.const 298509) "a") (data (i32.const 298512) "a") (data (i32.const 298515) "a") (data (i32.const 298518) "a") (data (i32.const 298521) "a") (data (i32.const 298524) "a") (data (i32.const 298527) "a") (data (i32.const 298530) "a") (data (i32.const 298533) "a") (data (i32.const 298536) "a") (data (i32.const 298539) "a") (data (i32.const 298542) "a") (data (i32.const 298545) "a") (data (i32.const 298548) "a") (data (i32.const 298551) "a") (data (i32.const 298554) "a") (data (i32.const 298557) "a") (data (i32.const 298560) "a") (data (i32.const 298563) "a") (data (i32.const 298566) "a") (data (i32.const 298569) "a") (data (i32.const 298572) "a") (data (i32.const 298575) "a") (data (i32.const 298578) "a") (data (i32.const 298581) "a") (data (i32.const 298584) "a") (data (i32.const 298587) "a") (data (i32.const 298590) "a") (data (i32.const 298593) "a") (data (i32.const 298596) "a") (data (i32.const 298599) "a") (data (i32.const 298602) "a") (data (i32.const 298605) "a") (data (i32.const 298608) "a") (data (i32.const 298611) "a") (data (i32.const 298614) "a") (data (i32.const 298617) "a") (data (i32.const 298620) "a") (data (i32.const 298623) "a") (data (i32.const 298626) "a") (data (i32.const 298629) "a") (data (i32.const 298632) "a") (data (i32.const 298635) "a") (data (i32.const 298638) "a") (data (i32.const 298641) "a") (data (i32.const 298644) "a") (data (i32.const 298647) "a") (data (i32.const 298650) "a") (data (i32.const 298653) "a") (data (i32.const 298656) "a") (data (i32.const 298659) "a") (data (i32.const 298662) "a") (data (i32.const 298665) "a") (data (i32.const 298668) "a") (data (i32.const 298671) "a") (data (i32.const 298674) "a") (data (i32.const 298677) "a") (data (i32.const 298680) "a") (data (i32.const 298683) "a") (data (i32.const 298686) "a") (data (i32.const 298689) "a") (data (i32.const 298692) "a") (data (i32.const 298695) "a") (data (i32.const 298698) "a") (data (i32.const 298701) "a") (data (i32.const 298704) "a") (data (i32.const 298707) "a") (data (i32.const 298710) "a") (data (i32.const 298713) "a") (data (i32.const 298716) "a") (data (i32.const 298719) "a") (data (i32.const 298722) "a") (data (i32.const 298725) "a") (data (i32.const 298728) "a") (data (i32.const 298731) "a") (data (i32.const 298734) "a") (data (i32.const 298737) "a") (data (i32.const 298740) "a") (data (i32.const 298743) "a") (data (i32.const 298746) "a") (data (i32.const 298749) "a") (data (i32.const 298752) "a") (data (i32.const 298755) "a") (data (i32.const 298758) "a") (data (i32.const 298761) "a") (data (i32.const 298764) "a") (data (i32.const 298767) "a") (data (i32.const 298770) "a") (data (i32.const 298773) "a") (data (i32.const 298776) "a") (data (i32.const 298779) "a") (data (i32.const 298782) "a") (data (i32.const 298785) "a") (data (i32.const 298788) "a") (data (i32.const 298791) "a") (data (i32.const 298794) "a") (data (i32.const 298797) "a") (data (i32.const 298800) "a") (data (i32.const 298803) "a") (data (i32.const 298806) "a") (data (i32.const 298809) "a") (data (i32.const 298812) "a") (data (i32.const 298815) "a") (data (i32.const 298818) "a") (data (i32.const 298821) "a") (data (i32.const 298824) "a") (data (i32.const 298827) "a") (data (i32.const 298830) "a") (data (i32.const 298833) "a") (data (i32.const 298836) "a") (data (i32.const 298839) "a") (data (i32.const 298842) "a") (data (i32.const 298845) "a") (data (i32.const 298848) "a") (data (i32.const 298851) "a") (data (i32.const 298854) "a") (data (i32.const 298857) "a") (data (i32.const 298860) "a") (data (i32.const 298863) "a") (data (i32.const 298866) "a") (data (i32.const 298869) "a") (data (i32.const 298872) "a") (data (i32.const 298875) "a") (data (i32.const 298878) "a") (data (i32.const 298881) "a") (data (i32.const 298884) "a") (data (i32.const 298887) "a") (data (i32.const 298890) "a") (data (i32.const 298893) "a") (data (i32.const 298896) "a") (data (i32.const 298899) "a") (data (i32.const 298902) "a") (data (i32.const 298905) "a") (data (i32.const 298908) "a") (data (i32.const 298911) "a") (data (i32.const 298914) "a") (data (i32.const 298917) "a") (data (i32.const 298920) "a") (data (i32.const 298923) "a") (data (i32.const 298926) "a") (data (i32.const 298929) "a") (data (i32.const 298932) "a") (data (i32.const 298935) "a") (data (i32.const 298938) "a") (data (i32.const 298941) "a") (data (i32.const 298944) "a") (data (i32.const 298947) "a") (data (i32.const 298950) "a") (data (i32.const 298953) "a") (data (i32.const 298956) "a") (data (i32.const 298959) "a") (data (i32.const 298962) "a") (data (i32.const 298965) "a") (data (i32.const 298968) "a") (data (i32.const 298971) "a") (data (i32.const 298974) "a") (data (i32.const 298977) "a") (data (i32.const 298980) "a") (data (i32.const 298983) "a") (data (i32.const 298986) "a") (data (i32.const 298989) "a") (data (i32.const 298992) "a") (data (i32.const 298995) "a") (data (i32.const 298998) "a") (data (i32.const 299001) "a") (data (i32.const 299004) "a") (data (i32.const 299007) "a") (data (i32.const 299010) "a") (data (i32.const 299013) "a") (data (i32.const 299016) "a") (data (i32.const 299019) "a") (data (i32.const 299022) "a") (data (i32.const 299025) "a") (data (i32.const 299028) "a") (data (i32.const 299031) "a") (data (i32.const 299034) "a") (data (i32.const 299037) "a") (data (i32.const 299040) "a") (data (i32.const 299043) "a") (data (i32.const 299046) "a") (data (i32.const 299049) "a") (data (i32.const 299052) "a") (data (i32.const 299055) "a") (data (i32.const 299058) "a") (data (i32.const 299061) "a") (data (i32.const 299064) "a") (data (i32.const 299067) "a") (data (i32.const 299070) "a") (data (i32.const 299073) "a") (data (i32.const 299076) "a") (data (i32.const 299079) "a") (data (i32.const 299082) "a") (data (i32.const 299085) "a") (data (i32.const 299088) "a") (data (i32.const 299091) "a") (data (i32.const 299094) "a") (data (i32.const 299097) "a") (data (i32.const 299100) "a") (data (i32.const 299103) "a") (data (i32.const 299106) "a") (data (i32.const 299109) "a") (data (i32.const 299112) "a") (data (i32.const 299115) "a") (data (i32.const 299118) "a") (data (i32.const 299121) "a") (data (i32.const 299124) "a") (data (i32.const 299127) "a") (data (i32.const 299130) "a") (data (i32.const 299133) "a") (data (i32.const 299136) "a") (data (i32.const 299139) "a") (data (i32.const 299142) "a") (data (i32.const 299145) "a") (data (i32.const 299148) "a") (data (i32.const 299151) "a") (data (i32.const 299154) "a") (data (i32.const 299157) "a") (data (i32.const 299160) "a") (data (i32.const 299163) "a") (data (i32.const 299166) "a") (data (i32.const 299169) "a") (data (i32.const 299172) "a") (data (i32.const 299175) "a") (data (i32.const 299178) "a") (data (i32.const 299181) "a") (data (i32.const 299184) "a") (data (i32.const 299187) "a") (data (i32.const 299190) "a") (data (i32.const 299193) "a") (data (i32.const 299196) "a") (data (i32.const 299199) "a") (data (i32.const 299202) "a") (data (i32.const 299205) "a") (data (i32.const 299208) "a") (data (i32.const 299211) "a") (data (i32.const 299214) "a") (data (i32.const 299217) "a") (data (i32.const 299220) "a") (data (i32.const 299223) "a") (data (i32.const 299226) "a") (data (i32.const 299229) "a") (data (i32.const 299232) "a") (data (i32.const 299235) "a") (data (i32.const 299238) "a") (data (i32.const 299241) "a") (data (i32.const 299244) "a") (data (i32.const 299247) "a") (data (i32.const 299250) "a") (data (i32.const 299253) "a") (data (i32.const 299256) "a") (data (i32.const 299259) "a") (data (i32.const 299262) "a") (data (i32.const 299265) "a") (data (i32.const 299268) "a") (data (i32.const 299271) "a") (data (i32.const 299274) "a") (data (i32.const 299277) "a") (data (i32.const 299280) "a") (data (i32.const 299283) "a") (data (i32.const 299286) "a") (data (i32.const 299289) "a") (data (i32.const 299292) "a") (data (i32.const 299295) "a") (data (i32.const 299298) "a") (data (i32.const 299301) "a") (data (i32.const 299304) "a") (data (i32.const 299307) "a") (data (i32.const 299310) "a") (data (i32.const 299313) "a") (data (i32.const 299316) "a") (data (i32.const 299319) "a") (data (i32.const 299322) "a") (data (i32.const 299325) "a") (data (i32.const 299328) "a") (data (i32.const 299331) "a") (data (i32.const 299334) "a") (data (i32.const 299337) "a") (data (i32.const 299340) "a") (data (i32.const 299343) "a") (data (i32.const 299346) "a") (data (i32.const 299349) "a") (data (i32.const 299352) "a") (data (i32.const 299355) "a") (data (i32.const 299358) "a") (data (i32.const 299361) "a") (data (i32.const 299364) "a") (data (i32.const 299367) "a") (data (i32.const 299370) "a") (data (i32.const 299373) "a") (data (i32.const 299376) "a") (data (i32.const 299379) "a") (data (i32.const 299382) "a") (data (i32.const 299385) "a") (data (i32.const 299388) "a") (data (i32.const 299391) "a") (data (i32.const 299394) "a") (data (i32.const 299397) "a") (data (i32.const 299400) "a") (data (i32.const 299403) "a") (data (i32.const 299406) "a") (data (i32.const 299409) "a") (data (i32.const 299412) "a") (data (i32.const 299415) "a") (data (i32.const 299418) "a") (data (i32.const 299421) "a") (data (i32.const 299424) "a") (data (i32.const 299427) "a") (data (i32.const 299430) "a") (data (i32.const 299433) "a") (data (i32.const 299436) "a") (data (i32.const 299439) "a") (data (i32.const 299442) "a") (data (i32.const 299445) "a") (data (i32.const 299448) "a") (data (i32.const 299451) "a") (data (i32.const 299454) "a") (data (i32.const 299457) "a") (data (i32.const 299460) "a") (data (i32.const 299463) "a") (data (i32.const 299466) "a") (data (i32.const 299469) "a") (data (i32.const 299472) "a") (data (i32.const 299475) "a") (data (i32.const 299478) "a") (data (i32.const 299481) "a") (data (i32.const 299484) "a") (data (i32.const 299487) "a") (data (i32.const 299490) "a") (data (i32.const 299493) "a") (data (i32.const 299496) "a") (data (i32.const 299499) "a") (data (i32.const 299502) "a") (data (i32.const 299505) "a") (data (i32.const 299508) "a") (data (i32.const 299511) "a") (data (i32.const 299514) "a") (data (i32.const 299517) "a") (data (i32.const 299520) "a") (data (i32.const 299523) "a") (data (i32.const 299526) "a") (data (i32.const 299529) "a") (data (i32.const 299532) "a") (data (i32.const 299535) "a") (data (i32.const 299538) "a") (data (i32.const 299541) "a") (data (i32.const 299544) "a") (data (i32.const 299547) "a") (data (i32.const 299550) "a") (data (i32.const 299553) "a") (data (i32.const 299556) "a") (data (i32.const 299559) "a") (data (i32.const 299562) "a") (data (i32.const 299565) "a") (data (i32.const 299568) "a") (data (i32.const 299571) "a") (data (i32.const 299574) "a") (data (i32.const 299577) "a") (data (i32.const 299580) "a") (data (i32.const 299583) "a") (data (i32.const 299586) "a") (data (i32.const 299589) "a") (data (i32.const 299592) "a") (data (i32.const 299595) "a") (data (i32.const 299598) "a") (data (i32.const 299601) "a") (data (i32.const 299604) "a") (data (i32.const 299607) "a") (data (i32.const 299610) "a") (data (i32.const 299613) "a") (data (i32.const 299616) "a") (data (i32.const 299619) "a") (data (i32.const 299622) "a") (data (i32.const 299625) "a") (data (i32.const 299628) "a") (data (i32.const 299631) "a") (data (i32.const 299634) "a") (data (i32.const 299637) "a") (data (i32.const 299640) "a") (data (i32.const 299643) "a") (data (i32.const 299646) "a") (data (i32.const 299649) "a") (data (i32.const 299652) "a") (data (i32.const 299655) "a") (data (i32.const 299658) "a") (data (i32.const 299661) "a") (data (i32.const 299664) "a") (data (i32.const 299667) "a") (data (i32.const 299670) "a") (data (i32.const 299673) "a") (data (i32.const 299676) "a") (data (i32.const 299679) "a") (data (i32.const 299682) "a") (data (i32.const 299685) "a") (data (i32.const 299688) "a") (data (i32.const 299691) "a") (data (i32.const 299694) "a") (data (i32.const 299697) "a") (data (i32.const 299700) "a") (data (i32.const 299703) "a") (data (i32.const 299706) "a") (data (i32.const 299709) "a") (data (i32.const 299712) "a") (data (i32.const 299715) "a") (data (i32.const 299718) "a") (data (i32.const 299721) "a") (data (i32.const 299724) "a") (data (i32.const 299727) "a") (data (i32.const 299730) "a") (data (i32.const 299733) "a") (data (i32.const 299736) "a") (data (i32.const 299739) "a") (data (i32.const 299742) "a") (data (i32.const 299745) "a") (data (i32.const 299748) "a") (data (i32.const 299751) "a") (data (i32.const 299754) "a") (data (i32.const 299757) "a") (data (i32.const 299760) "a") (data (i32.const 299763) "a") (data (i32.const 299766) "a") (data (i32.const 299769) "a") (data (i32.const 299772) "a") (data (i32.const 299775) "a") (data (i32.const 299778) "a") (data (i32.const 299781) "a") (data (i32.const 299784) "a") (data (i32.const 299787) "a") (data (i32.const 299790) "a") (data (i32.const 299793) "a") (data (i32.const 299796) "a") (data (i32.const 299799) "a") (data (i32.const 299802) "a") (data (i32.const 299805) "a") (data (i32.const 299808) "a") (data (i32.const 299811) "a") (data (i32.const 299814) "a") (data (i32.const 299817) "a") (data (i32.const 299820) "a") (data (i32.const 299823) "a") (data (i32.const 299826) "a") (data (i32.const 299829) "a") (data (i32.const 299832) "a") (data (i32.const 299835) "a") (data (i32.const 299838) "a") (data (i32.const 299841) "a") (data (i32.const 299844) "a") (data (i32.const 299847) "a") (data (i32.const 299850) "a") (data (i32.const 299853) "a") (data (i32.const 299856) "a") (data (i32.const 299859) "a") (data (i32.const 299862) "a") (data (i32.const 299865) "a") (data (i32.const 299868) "a") (data (i32.const 299871) "a") (data (i32.const 299874) "a") (data (i32.const 299877) "a") (data (i32.const 299880) "a") (data (i32.const 299883) "a") (data (i32.const 299886) "a") (data (i32.const 299889) "a") (data (i32.const 299892) "a") (data (i32.const 299895) "a") (data (i32.const 299898) "a") (data (i32.const 299901) "a") (data (i32.const 299904) "a") (data (i32.const 299907) "a") (data (i32.const 299910) "a") (data (i32.const 299913) "a") (data (i32.const 299916) "a") (data (i32.const 299919) "a") (data (i32.const 299922) "a") (data (i32.const 299925) "a") (data (i32.const 299928) "a") (data (i32.const 299931) "a") (data (i32.const 299934) "a") (data (i32.const 299937) "a") (data (i32.const 299940) "a") (data (i32.const 299943) "a") (data (i32.const 299946) "a") (data (i32.const 299949) "a") (data (i32.const 299952) "a") (data (i32.const 299955) "a") (data (i32.const 299958) "a") (data (i32.const 299961) "a") (data (i32.const 299964) "a") (data (i32.const 299967) "a") (data (i32.const 299970) "a") (data (i32.const 299973) "a") (data (i32.const 299976) "a") (data (i32.const 299979) "a") (data (i32.const 299982) "a") (data (i32.const 299985) "a") (data (i32.const 299988) "a") (data (i32.const 299991) "a") (data (i32.const 299994) "a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a\00\00a") ) binaryen-version_108/test/passes/limit-segments_disable-bulk-memory.wast000066400000000000000000135436151423707623100270310ustar00rootroot00000000000000;; too many segments for a binary (module (memory 256 256) (data (i32.const 0) "a") (data (i32.const 3) "a") (data (i32.const 6) "a") (data (i32.const 9) "a") (data (i32.const 12) "a") (data (i32.const 15) "a") (data (i32.const 18) "a") (data (i32.const 21) "a") (data (i32.const 24) "a") (data (i32.const 27) "a") (data (i32.const 30) "a") (data (i32.const 33) "a") (data (i32.const 36) "a") (data (i32.const 39) "a") (data (i32.const 42) "a") (data (i32.const 45) "a") (data (i32.const 48) "a") (data (i32.const 51) "a") (data (i32.const 54) "a") (data (i32.const 57) "a") (data (i32.const 60) "a") (data (i32.const 63) "a") (data (i32.const 66) "a") (data (i32.const 69) "a") (data (i32.const 72) "a") (data (i32.const 75) "a") (data (i32.const 78) "a") (data (i32.const 81) "a") (data (i32.const 84) "a") (data (i32.const 87) "a") (data (i32.const 90) "a") (data (i32.const 93) "a") (data (i32.const 96) "a") (data (i32.const 99) "a") (data (i32.const 102) "a") (data (i32.const 105) "a") (data (i32.const 108) "a") (data (i32.const 111) "a") (data (i32.const 114) "a") (data (i32.const 117) "a") (data (i32.const 120) "a") (data (i32.const 123) "a") (data (i32.const 126) "a") (data (i32.const 129) "a") (data (i32.const 132) "a") (data (i32.const 135) "a") (data (i32.const 138) "a") (data (i32.const 141) "a") (data (i32.const 144) "a") (data (i32.const 147) "a") (data (i32.const 150) "a") (data (i32.const 153) "a") (data (i32.const 156) "a") (data (i32.const 159) "a") (data (i32.const 162) "a") (data (i32.const 165) "a") (data (i32.const 168) "a") (data (i32.const 171) "a") (data (i32.const 174) "a") (data (i32.const 177) "a") (data (i32.const 180) "a") (data (i32.const 183) "a") (data (i32.const 186) "a") (data (i32.const 189) "a") (data (i32.const 192) "a") (data (i32.const 195) "a") (data (i32.const 198) "a") (data (i32.const 201) "a") (data (i32.const 204) "a") (data (i32.const 207) "a") (data (i32.const 210) "a") (data (i32.const 213) "a") (data (i32.const 216) "a") (data (i32.const 219) "a") (data (i32.const 222) "a") (data (i32.const 225) "a") (data (i32.const 228) "a") (data (i32.const 231) "a") (data (i32.const 234) "a") (data (i32.const 237) "a") (data (i32.const 240) "a") (data (i32.const 243) "a") (data (i32.const 246) "a") (data (i32.const 249) "a") (data (i32.const 252) "a") (data (i32.const 255) "a") (data (i32.const 258) "a") (data (i32.const 261) "a") (data (i32.const 264) "a") (data (i32.const 267) "a") (data (i32.const 270) "a") (data (i32.const 273) "a") (data (i32.const 276) "a") (data (i32.const 279) "a") (data (i32.const 282) "a") (data (i32.const 285) "a") (data (i32.const 288) "a") (data (i32.const 291) "a") (data (i32.const 294) "a") (data (i32.const 297) "a") (data (i32.const 300) "a") (data (i32.const 303) "a") (data (i32.const 306) "a") (data (i32.const 309) "a") (data (i32.const 312) "a") (data (i32.const 315) "a") (data (i32.const 318) "a") (data (i32.const 321) "a") (data (i32.const 324) "a") (data (i32.const 327) "a") (data (i32.const 330) "a") (data (i32.const 333) "a") (data (i32.const 336) "a") (data (i32.const 339) "a") (data (i32.const 342) "a") (data (i32.const 345) "a") (data (i32.const 348) "a") (data (i32.const 351) "a") (data (i32.const 354) "a") (data (i32.const 357) "a") (data (i32.const 360) "a") (data (i32.const 363) "a") (data (i32.const 366) "a") (data (i32.const 369) "a") (data (i32.const 372) "a") (data (i32.const 375) "a") (data (i32.const 378) "a") (data (i32.const 381) "a") (data (i32.const 384) "a") (data (i32.const 387) "a") (data (i32.const 390) "a") (data (i32.const 393) "a") (data (i32.const 396) "a") (data (i32.const 399) "a") (data (i32.const 402) "a") (data (i32.const 405) "a") (data (i32.const 408) "a") (data (i32.const 411) "a") (data (i32.const 414) "a") (data (i32.const 417) "a") (data (i32.const 420) "a") (data (i32.const 423) "a") (data (i32.const 426) "a") (data (i32.const 429) "a") (data (i32.const 432) "a") (data (i32.const 435) "a") (data (i32.const 438) "a") (data (i32.const 441) "a") (data (i32.const 444) "a") (data (i32.const 447) "a") (data (i32.const 450) "a") (data (i32.const 453) "a") (data (i32.const 456) "a") (data (i32.const 459) "a") (data (i32.const 462) "a") (data (i32.const 465) "a") (data (i32.const 468) "a") (data (i32.const 471) "a") (data (i32.const 474) "a") (data (i32.const 477) "a") (data (i32.const 480) "a") (data (i32.const 483) "a") (data (i32.const 486) "a") (data (i32.const 489) "a") (data (i32.const 492) "a") (data (i32.const 495) "a") (data (i32.const 498) "a") (data (i32.const 501) "a") (data (i32.const 504) "a") (data (i32.const 507) "a") (data (i32.const 510) "a") (data (i32.const 513) "a") (data (i32.const 516) "a") (data (i32.const 519) "a") (data (i32.const 522) "a") (data (i32.const 525) "a") (data (i32.const 528) "a") (data (i32.const 531) "a") (data (i32.const 534) "a") (data (i32.const 537) "a") (data (i32.const 540) "a") (data (i32.const 543) "a") (data (i32.const 546) "a") (data (i32.const 549) "a") (data (i32.const 552) "a") (data (i32.const 555) "a") (data (i32.const 558) "a") (data (i32.const 561) "a") (data (i32.const 564) "a") (data (i32.const 567) "a") (data (i32.const 570) "a") (data (i32.const 573) "a") (data (i32.const 576) "a") (data (i32.const 579) "a") (data (i32.const 582) "a") (data (i32.const 585) "a") (data (i32.const 588) "a") (data (i32.const 591) "a") (data (i32.const 594) "a") (data (i32.const 597) "a") (data (i32.const 600) "a") (data (i32.const 603) "a") (data (i32.const 606) "a") (data (i32.const 609) "a") (data (i32.const 612) "a") (data (i32.const 615) "a") (data (i32.const 618) "a") (data (i32.const 621) "a") (data (i32.const 624) "a") (data (i32.const 627) "a") (data (i32.const 630) "a") (data (i32.const 633) "a") (data (i32.const 636) "a") (data (i32.const 639) "a") (data (i32.const 642) "a") (data (i32.const 645) "a") (data (i32.const 648) "a") (data (i32.const 651) "a") (data (i32.const 654) "a") (data (i32.const 657) "a") (data (i32.const 660) "a") (data (i32.const 663) "a") (data (i32.const 666) "a") (data (i32.const 669) "a") (data (i32.const 672) "a") (data (i32.const 675) "a") (data (i32.const 678) "a") (data (i32.const 681) "a") (data (i32.const 684) "a") (data (i32.const 687) "a") (data (i32.const 690) "a") (data (i32.const 693) "a") (data (i32.const 696) "a") (data (i32.const 699) "a") (data (i32.const 702) "a") (data (i32.const 705) "a") (data (i32.const 708) "a") (data (i32.const 711) "a") (data (i32.const 714) "a") (data (i32.const 717) "a") (data (i32.const 720) "a") (data (i32.const 723) "a") (data (i32.const 726) "a") (data (i32.const 729) "a") (data (i32.const 732) "a") (data (i32.const 735) "a") (data (i32.const 738) "a") (data (i32.const 741) "a") (data (i32.const 744) "a") (data (i32.const 747) "a") (data (i32.const 750) "a") (data (i32.const 753) "a") (data (i32.const 756) "a") (data (i32.const 759) "a") (data (i32.const 762) "a") (data (i32.const 765) "a") (data (i32.const 768) "a") (data (i32.const 771) "a") (data (i32.const 774) "a") (data (i32.const 777) "a") (data (i32.const 780) "a") (data (i32.const 783) "a") (data (i32.const 786) "a") (data (i32.const 789) "a") (data (i32.const 792) "a") (data (i32.const 795) "a") (data (i32.const 798) "a") (data (i32.const 801) "a") (data (i32.const 804) "a") (data (i32.const 807) "a") (data (i32.const 810) "a") (data (i32.const 813) "a") (data (i32.const 816) "a") (data (i32.const 819) "a") (data (i32.const 822) "a") (data (i32.const 825) "a") (data (i32.const 828) "a") (data (i32.const 831) "a") (data (i32.const 834) "a") (data (i32.const 837) "a") (data (i32.const 840) "a") (data (i32.const 843) "a") (data (i32.const 846) "a") (data (i32.const 849) "a") (data (i32.const 852) "a") (data (i32.const 855) "a") (data (i32.const 858) "a") (data (i32.const 861) "a") (data (i32.const 864) "a") (data (i32.const 867) "a") (data (i32.const 870) "a") (data (i32.const 873) "a") (data (i32.const 876) "a") (data (i32.const 879) "a") (data (i32.const 882) "a") (data (i32.const 885) "a") (data (i32.const 888) "a") (data (i32.const 891) "a") (data (i32.const 894) "a") (data (i32.const 897) "a") (data (i32.const 900) "a") (data (i32.const 903) "a") (data (i32.const 906) "a") (data (i32.const 909) "a") (data (i32.const 912) "a") (data (i32.const 915) "a") (data (i32.const 918) "a") (data (i32.const 921) "a") (data (i32.const 924) "a") (data (i32.const 927) "a") (data (i32.const 930) "a") (data (i32.const 933) "a") (data (i32.const 936) "a") (data (i32.const 939) "a") (data (i32.const 942) "a") (data (i32.const 945) "a") (data (i32.const 948) "a") (data (i32.const 951) "a") (data (i32.const 954) "a") (data (i32.const 957) "a") (data (i32.const 960) "a") (data (i32.const 963) "a") (data (i32.const 966) "a") (data (i32.const 969) "a") (data (i32.const 972) "a") (data (i32.const 975) "a") (data (i32.const 978) "a") (data (i32.const 981) "a") (data (i32.const 984) "a") (data (i32.const 987) "a") (data (i32.const 990) "a") (data (i32.const 993) "a") (data (i32.const 996) "a") (data (i32.const 999) "a") (data (i32.const 1002) "a") (data (i32.const 1005) "a") (data (i32.const 1008) "a") (data (i32.const 1011) "a") (data (i32.const 1014) "a") (data (i32.const 1017) "a") (data (i32.const 1020) "a") (data (i32.const 1023) "a") (data (i32.const 1026) "a") (data (i32.const 1029) "a") (data (i32.const 1032) "a") (data (i32.const 1035) "a") (data (i32.const 1038) "a") (data (i32.const 1041) "a") (data (i32.const 1044) "a") (data (i32.const 1047) "a") (data (i32.const 1050) "a") (data (i32.const 1053) "a") (data (i32.const 1056) "a") (data (i32.const 1059) "a") (data (i32.const 1062) "a") (data (i32.const 1065) "a") (data (i32.const 1068) "a") (data (i32.const 1071) "a") (data (i32.const 1074) "a") (data (i32.const 1077) "a") (data (i32.const 1080) "a") (data (i32.const 1083) "a") (data (i32.const 1086) "a") (data (i32.const 1089) "a") (data (i32.const 1092) "a") (data (i32.const 1095) "a") (data (i32.const 1098) "a") (data (i32.const 1101) "a") (data (i32.const 1104) "a") (data (i32.const 1107) "a") (data (i32.const 1110) "a") (data (i32.const 1113) "a") (data (i32.const 1116) "a") (data (i32.const 1119) "a") (data (i32.const 1122) "a") (data (i32.const 1125) "a") (data (i32.const 1128) "a") (data (i32.const 1131) "a") (data (i32.const 1134) "a") (data (i32.const 1137) "a") (data (i32.const 1140) "a") (data (i32.const 1143) "a") (data (i32.const 1146) "a") (data (i32.const 1149) "a") (data (i32.const 1152) "a") (data (i32.const 1155) "a") (data (i32.const 1158) "a") (data (i32.const 1161) "a") (data (i32.const 1164) "a") (data (i32.const 1167) "a") (data (i32.const 1170) "a") (data (i32.const 1173) "a") (data (i32.const 1176) "a") (data (i32.const 1179) "a") (data (i32.const 1182) "a") (data (i32.const 1185) "a") (data (i32.const 1188) "a") (data (i32.const 1191) "a") (data (i32.const 1194) "a") (data (i32.const 1197) "a") (data (i32.const 1200) "a") (data (i32.const 1203) "a") (data (i32.const 1206) "a") (data (i32.const 1209) "a") (data (i32.const 1212) "a") (data (i32.const 1215) "a") (data (i32.const 1218) "a") (data (i32.const 1221) "a") (data (i32.const 1224) "a") (data (i32.const 1227) "a") (data (i32.const 1230) "a") (data (i32.const 1233) "a") (data (i32.const 1236) "a") (data (i32.const 1239) "a") (data (i32.const 1242) "a") (data (i32.const 1245) "a") (data (i32.const 1248) "a") (data (i32.const 1251) "a") (data (i32.const 1254) "a") (data (i32.const 1257) "a") (data (i32.const 1260) "a") (data (i32.const 1263) "a") (data (i32.const 1266) "a") (data (i32.const 1269) "a") (data (i32.const 1272) "a") (data (i32.const 1275) "a") (data (i32.const 1278) "a") (data (i32.const 1281) "a") (data (i32.const 1284) "a") (data (i32.const 1287) "a") (data (i32.const 1290) "a") (data (i32.const 1293) "a") (data (i32.const 1296) "a") (data (i32.const 1299) "a") (data (i32.const 1302) "a") (data (i32.const 1305) "a") (data (i32.const 1308) "a") (data (i32.const 1311) "a") (data (i32.const 1314) "a") (data (i32.const 1317) "a") (data (i32.const 1320) "a") (data (i32.const 1323) "a") (data (i32.const 1326) "a") (data (i32.const 1329) "a") (data (i32.const 1332) "a") (data (i32.const 1335) "a") (data (i32.const 1338) "a") (data (i32.const 1341) "a") (data (i32.const 1344) "a") (data (i32.const 1347) "a") (data (i32.const 1350) "a") (data (i32.const 1353) "a") (data (i32.const 1356) "a") (data (i32.const 1359) "a") (data (i32.const 1362) "a") (data (i32.const 1365) "a") (data (i32.const 1368) "a") (data (i32.const 1371) "a") (data (i32.const 1374) "a") (data (i32.const 1377) "a") (data (i32.const 1380) "a") (data (i32.const 1383) "a") (data (i32.const 1386) "a") (data (i32.const 1389) "a") (data (i32.const 1392) "a") (data (i32.const 1395) "a") (data (i32.const 1398) "a") (data (i32.const 1401) "a") (data (i32.const 1404) "a") (data (i32.const 1407) "a") (data (i32.const 1410) "a") (data (i32.const 1413) "a") (data (i32.const 1416) "a") (data (i32.const 1419) "a") (data (i32.const 1422) "a") (data (i32.const 1425) "a") (data (i32.const 1428) "a") (data (i32.const 1431) "a") (data (i32.const 1434) "a") (data (i32.const 1437) "a") (data (i32.const 1440) "a") (data (i32.const 1443) "a") (data (i32.const 1446) "a") (data (i32.const 1449) "a") (data (i32.const 1452) "a") (data (i32.const 1455) "a") (data (i32.const 1458) "a") (data (i32.const 1461) "a") (data (i32.const 1464) "a") (data (i32.const 1467) "a") (data (i32.const 1470) "a") (data (i32.const 1473) "a") (data (i32.const 1476) "a") (data (i32.const 1479) "a") (data (i32.const 1482) "a") (data (i32.const 1485) "a") (data (i32.const 1488) "a") (data (i32.const 1491) "a") (data (i32.const 1494) "a") (data (i32.const 1497) "a") (data (i32.const 1500) "a") (data (i32.const 1503) "a") (data (i32.const 1506) "a") (data (i32.const 1509) "a") (data (i32.const 1512) "a") (data (i32.const 1515) "a") (data (i32.const 1518) "a") (data (i32.const 1521) "a") (data (i32.const 1524) "a") (data (i32.const 1527) "a") (data (i32.const 1530) "a") (data (i32.const 1533) "a") (data (i32.const 1536) "a") (data (i32.const 1539) "a") (data (i32.const 1542) "a") (data (i32.const 1545) "a") (data (i32.const 1548) "a") (data (i32.const 1551) "a") (data (i32.const 1554) "a") (data (i32.const 1557) "a") (data (i32.const 1560) "a") (data (i32.const 1563) "a") (data (i32.const 1566) "a") (data (i32.const 1569) "a") (data (i32.const 1572) "a") (data (i32.const 1575) "a") (data (i32.const 1578) "a") (data (i32.const 1581) "a") (data (i32.const 1584) "a") (data (i32.const 1587) "a") (data (i32.const 1590) "a") (data (i32.const 1593) "a") (data (i32.const 1596) "a") (data (i32.const 1599) "a") (data (i32.const 1602) "a") (data (i32.const 1605) "a") (data (i32.const 1608) "a") (data (i32.const 1611) "a") (data (i32.const 1614) "a") (data (i32.const 1617) "a") (data (i32.const 1620) "a") (data (i32.const 1623) "a") (data (i32.const 1626) "a") (data (i32.const 1629) "a") (data (i32.const 1632) "a") (data (i32.const 1635) "a") (data (i32.const 1638) "a") (data (i32.const 1641) "a") (data (i32.const 1644) "a") (data (i32.const 1647) "a") (data (i32.const 1650) "a") (data (i32.const 1653) "a") (data (i32.const 1656) "a") (data (i32.const 1659) "a") (data (i32.const 1662) "a") (data (i32.const 1665) "a") (data (i32.const 1668) "a") (data (i32.const 1671) "a") (data (i32.const 1674) "a") (data (i32.const 1677) "a") (data (i32.const 1680) "a") (data (i32.const 1683) "a") (data (i32.const 1686) "a") (data (i32.const 1689) "a") (data (i32.const 1692) "a") (data (i32.const 1695) "a") (data (i32.const 1698) "a") (data (i32.const 1701) "a") (data (i32.const 1704) "a") (data (i32.const 1707) "a") (data (i32.const 1710) "a") (data (i32.const 1713) "a") (data (i32.const 1716) "a") (data (i32.const 1719) "a") (data (i32.const 1722) "a") (data (i32.const 1725) "a") (data (i32.const 1728) "a") (data (i32.const 1731) "a") (data (i32.const 1734) "a") (data (i32.const 1737) "a") (data (i32.const 1740) "a") (data (i32.const 1743) "a") (data (i32.const 1746) "a") (data (i32.const 1749) "a") (data (i32.const 1752) "a") (data (i32.const 1755) "a") (data (i32.const 1758) "a") (data (i32.const 1761) "a") (data (i32.const 1764) "a") (data (i32.const 1767) "a") (data (i32.const 1770) "a") (data (i32.const 1773) "a") (data (i32.const 1776) "a") (data (i32.const 1779) "a") (data (i32.const 1782) "a") (data (i32.const 1785) "a") (data (i32.const 1788) "a") (data (i32.const 1791) "a") (data (i32.const 1794) "a") (data (i32.const 1797) "a") (data (i32.const 1800) "a") (data (i32.const 1803) "a") (data (i32.const 1806) "a") (data (i32.const 1809) "a") (data (i32.const 1812) "a") (data (i32.const 1815) "a") (data (i32.const 1818) "a") (data (i32.const 1821) "a") (data (i32.const 1824) "a") (data (i32.const 1827) "a") (data (i32.const 1830) "a") (data (i32.const 1833) "a") (data (i32.const 1836) "a") (data (i32.const 1839) "a") (data (i32.const 1842) "a") (data (i32.const 1845) "a") (data (i32.const 1848) "a") (data (i32.const 1851) "a") (data (i32.const 1854) "a") (data (i32.const 1857) "a") (data (i32.const 1860) "a") (data (i32.const 1863) "a") (data (i32.const 1866) "a") (data (i32.const 1869) "a") (data (i32.const 1872) "a") (data (i32.const 1875) "a") (data (i32.const 1878) "a") (data (i32.const 1881) "a") (data (i32.const 1884) "a") (data (i32.const 1887) "a") (data (i32.const 1890) "a") (data (i32.const 1893) "a") (data (i32.const 1896) "a") (data (i32.const 1899) "a") (data (i32.const 1902) "a") (data (i32.const 1905) "a") (data (i32.const 1908) "a") (data (i32.const 1911) "a") (data (i32.const 1914) "a") (data (i32.const 1917) "a") (data (i32.const 1920) "a") (data (i32.const 1923) "a") (data (i32.const 1926) "a") (data (i32.const 1929) "a") (data (i32.const 1932) "a") (data (i32.const 1935) "a") (data (i32.const 1938) "a") (data (i32.const 1941) "a") (data (i32.const 1944) "a") (data (i32.const 1947) "a") (data (i32.const 1950) "a") (data (i32.const 1953) "a") (data (i32.const 1956) "a") (data (i32.const 1959) "a") (data (i32.const 1962) "a") (data (i32.const 1965) "a") (data (i32.const 1968) "a") (data (i32.const 1971) "a") (data (i32.const 1974) "a") (data (i32.const 1977) "a") (data (i32.const 1980) "a") (data (i32.const 1983) "a") (data (i32.const 1986) "a") (data (i32.const 1989) "a") (data (i32.const 1992) "a") (data (i32.const 1995) "a") (data (i32.const 1998) "a") (data (i32.const 2001) "a") (data (i32.const 2004) "a") (data (i32.const 2007) "a") (data (i32.const 2010) "a") (data (i32.const 2013) "a") (data (i32.const 2016) "a") (data (i32.const 2019) "a") (data (i32.const 2022) "a") (data (i32.const 2025) "a") (data (i32.const 2028) "a") (data (i32.const 2031) "a") (data (i32.const 2034) "a") (data (i32.const 2037) "a") (data (i32.const 2040) "a") (data (i32.const 2043) "a") (data (i32.const 2046) "a") (data (i32.const 2049) "a") (data (i32.const 2052) "a") (data (i32.const 2055) "a") (data (i32.const 2058) "a") (data (i32.const 2061) "a") (data (i32.const 2064) "a") (data (i32.const 2067) "a") (data (i32.const 2070) "a") (data (i32.const 2073) "a") (data (i32.const 2076) "a") (data (i32.const 2079) "a") (data (i32.const 2082) "a") (data (i32.const 2085) "a") (data (i32.const 2088) "a") (data (i32.const 2091) "a") (data (i32.const 2094) "a") (data (i32.const 2097) "a") (data (i32.const 2100) "a") (data (i32.const 2103) "a") (data (i32.const 2106) "a") (data (i32.const 2109) "a") (data (i32.const 2112) "a") (data (i32.const 2115) "a") (data (i32.const 2118) "a") (data (i32.const 2121) "a") (data (i32.const 2124) "a") (data (i32.const 2127) "a") (data (i32.const 2130) "a") (data (i32.const 2133) "a") (data (i32.const 2136) "a") (data (i32.const 2139) "a") (data (i32.const 2142) "a") (data (i32.const 2145) "a") (data (i32.const 2148) "a") (data (i32.const 2151) "a") (data (i32.const 2154) "a") (data (i32.const 2157) "a") (data (i32.const 2160) "a") (data (i32.const 2163) "a") (data (i32.const 2166) "a") (data (i32.const 2169) "a") (data (i32.const 2172) "a") (data (i32.const 2175) "a") (data (i32.const 2178) "a") (data (i32.const 2181) "a") (data (i32.const 2184) "a") (data (i32.const 2187) "a") (data (i32.const 2190) "a") (data (i32.const 2193) "a") (data (i32.const 2196) "a") (data (i32.const 2199) "a") (data (i32.const 2202) "a") (data (i32.const 2205) "a") (data (i32.const 2208) "a") (data (i32.const 2211) "a") (data (i32.const 2214) "a") (data (i32.const 2217) "a") (data (i32.const 2220) "a") (data (i32.const 2223) "a") (data (i32.const 2226) "a") (data (i32.const 2229) "a") (data (i32.const 2232) "a") (data (i32.const 2235) "a") (data (i32.const 2238) "a") (data (i32.const 2241) "a") (data (i32.const 2244) "a") (data (i32.const 2247) "a") (data (i32.const 2250) "a") (data (i32.const 2253) "a") (data (i32.const 2256) "a") (data (i32.const 2259) "a") (data (i32.const 2262) "a") (data (i32.const 2265) "a") (data (i32.const 2268) "a") (data (i32.const 2271) "a") (data (i32.const 2274) "a") (data (i32.const 2277) "a") (data (i32.const 2280) "a") (data (i32.const 2283) "a") (data (i32.const 2286) "a") (data (i32.const 2289) "a") (data (i32.const 2292) "a") (data (i32.const 2295) "a") (data (i32.const 2298) "a") (data (i32.const 2301) "a") (data (i32.const 2304) "a") (data (i32.const 2307) "a") (data (i32.const 2310) "a") (data (i32.const 2313) "a") (data (i32.const 2316) "a") (data (i32.const 2319) "a") (data (i32.const 2322) "a") (data (i32.const 2325) "a") (data (i32.const 2328) "a") (data (i32.const 2331) "a") (data (i32.const 2334) "a") (data (i32.const 2337) "a") (data (i32.const 2340) "a") (data (i32.const 2343) "a") (data (i32.const 2346) "a") (data (i32.const 2349) "a") (data (i32.const 2352) "a") (data (i32.const 2355) "a") (data (i32.const 2358) "a") (data (i32.const 2361) "a") (data (i32.const 2364) "a") (data (i32.const 2367) "a") (data (i32.const 2370) "a") (data (i32.const 2373) "a") (data (i32.const 2376) "a") (data (i32.const 2379) "a") (data (i32.const 2382) "a") (data (i32.const 2385) "a") (data (i32.const 2388) "a") (data (i32.const 2391) "a") (data (i32.const 2394) "a") (data (i32.const 2397) "a") (data (i32.const 2400) "a") (data (i32.const 2403) "a") (data (i32.const 2406) "a") (data (i32.const 2409) "a") (data (i32.const 2412) "a") (data (i32.const 2415) "a") (data (i32.const 2418) "a") (data (i32.const 2421) "a") (data (i32.const 2424) "a") (data (i32.const 2427) "a") (data (i32.const 2430) "a") (data (i32.const 2433) "a") (data (i32.const 2436) "a") (data (i32.const 2439) "a") (data (i32.const 2442) "a") (data (i32.const 2445) "a") (data (i32.const 2448) "a") (data (i32.const 2451) "a") (data (i32.const 2454) "a") (data (i32.const 2457) "a") (data (i32.const 2460) "a") (data (i32.const 2463) "a") (data (i32.const 2466) "a") (data (i32.const 2469) "a") (data (i32.const 2472) "a") (data (i32.const 2475) "a") (data (i32.const 2478) "a") (data (i32.const 2481) "a") (data (i32.const 2484) "a") (data (i32.const 2487) "a") (data (i32.const 2490) "a") (data (i32.const 2493) "a") (data (i32.const 2496) "a") (data (i32.const 2499) "a") (data (i32.const 2502) "a") (data (i32.const 2505) "a") (data (i32.const 2508) "a") (data (i32.const 2511) "a") (data (i32.const 2514) "a") (data (i32.const 2517) "a") (data (i32.const 2520) "a") (data (i32.const 2523) "a") (data (i32.const 2526) "a") (data (i32.const 2529) "a") (data (i32.const 2532) "a") (data (i32.const 2535) "a") (data (i32.const 2538) "a") (data (i32.const 2541) "a") (data (i32.const 2544) "a") (data (i32.const 2547) "a") (data (i32.const 2550) "a") (data (i32.const 2553) "a") (data (i32.const 2556) "a") (data (i32.const 2559) "a") (data (i32.const 2562) "a") (data (i32.const 2565) "a") (data (i32.const 2568) "a") (data (i32.const 2571) "a") (data (i32.const 2574) "a") (data (i32.const 2577) "a") (data (i32.const 2580) "a") (data (i32.const 2583) "a") (data (i32.const 2586) "a") (data (i32.const 2589) "a") (data (i32.const 2592) "a") (data (i32.const 2595) "a") (data (i32.const 2598) "a") (data (i32.const 2601) "a") (data (i32.const 2604) "a") (data (i32.const 2607) "a") (data (i32.const 2610) "a") (data (i32.const 2613) "a") (data (i32.const 2616) "a") (data (i32.const 2619) "a") (data (i32.const 2622) "a") (data (i32.const 2625) "a") (data (i32.const 2628) "a") (data (i32.const 2631) "a") (data (i32.const 2634) "a") (data (i32.const 2637) "a") (data (i32.const 2640) "a") (data (i32.const 2643) "a") (data (i32.const 2646) "a") (data (i32.const 2649) "a") (data (i32.const 2652) "a") (data (i32.const 2655) "a") (data (i32.const 2658) "a") (data (i32.const 2661) "a") (data (i32.const 2664) "a") (data (i32.const 2667) "a") (data (i32.const 2670) "a") (data (i32.const 2673) "a") (data (i32.const 2676) "a") (data (i32.const 2679) "a") (data (i32.const 2682) "a") (data (i32.const 2685) "a") (data (i32.const 2688) "a") (data (i32.const 2691) "a") (data (i32.const 2694) "a") (data (i32.const 2697) "a") (data (i32.const 2700) "a") (data (i32.const 2703) "a") (data (i32.const 2706) "a") (data (i32.const 2709) "a") (data (i32.const 2712) "a") (data (i32.const 2715) "a") (data (i32.const 2718) "a") (data (i32.const 2721) "a") (data (i32.const 2724) "a") (data (i32.const 2727) "a") (data (i32.const 2730) "a") (data (i32.const 2733) "a") (data (i32.const 2736) "a") (data (i32.const 2739) "a") (data (i32.const 2742) "a") (data (i32.const 2745) "a") (data (i32.const 2748) "a") (data (i32.const 2751) "a") (data (i32.const 2754) "a") (data (i32.const 2757) "a") (data (i32.const 2760) "a") (data (i32.const 2763) "a") (data (i32.const 2766) "a") (data (i32.const 2769) "a") (data (i32.const 2772) "a") (data (i32.const 2775) "a") (data (i32.const 2778) "a") (data (i32.const 2781) "a") (data (i32.const 2784) "a") (data (i32.const 2787) "a") (data (i32.const 2790) "a") (data (i32.const 2793) "a") (data (i32.const 2796) "a") (data (i32.const 2799) "a") (data (i32.const 2802) "a") (data (i32.const 2805) "a") (data (i32.const 2808) "a") (data (i32.const 2811) "a") (data (i32.const 2814) "a") (data (i32.const 2817) "a") (data (i32.const 2820) "a") (data (i32.const 2823) "a") (data (i32.const 2826) "a") (data (i32.const 2829) "a") (data (i32.const 2832) "a") (data (i32.const 2835) "a") (data (i32.const 2838) "a") (data (i32.const 2841) "a") (data (i32.const 2844) "a") (data (i32.const 2847) "a") (data (i32.const 2850) "a") (data (i32.const 2853) "a") (data (i32.const 2856) "a") (data (i32.const 2859) "a") (data (i32.const 2862) "a") (data (i32.const 2865) "a") (data (i32.const 2868) "a") (data (i32.const 2871) "a") (data (i32.const 2874) "a") (data (i32.const 2877) "a") (data (i32.const 2880) "a") (data (i32.const 2883) "a") (data (i32.const 2886) "a") (data (i32.const 2889) "a") (data (i32.const 2892) "a") (data (i32.const 2895) "a") (data (i32.const 2898) "a") (data (i32.const 2901) "a") (data (i32.const 2904) "a") (data (i32.const 2907) "a") (data (i32.const 2910) "a") (data (i32.const 2913) "a") (data (i32.const 2916) "a") (data (i32.const 2919) "a") (data (i32.const 2922) "a") (data (i32.const 2925) "a") (data (i32.const 2928) "a") (data (i32.const 2931) "a") (data (i32.const 2934) "a") (data (i32.const 2937) "a") (data (i32.const 2940) "a") (data (i32.const 2943) "a") (data (i32.const 2946) "a") (data (i32.const 2949) "a") (data (i32.const 2952) "a") (data (i32.const 2955) "a") (data (i32.const 2958) "a") (data (i32.const 2961) "a") (data (i32.const 2964) "a") (data (i32.const 2967) "a") (data (i32.const 2970) "a") (data (i32.const 2973) "a") (data (i32.const 2976) "a") (data (i32.const 2979) "a") (data (i32.const 2982) "a") (data (i32.const 2985) "a") (data (i32.const 2988) "a") (data (i32.const 2991) "a") (data (i32.const 2994) "a") (data (i32.const 2997) "a") (data (i32.const 3000) "a") (data (i32.const 3003) "a") (data (i32.const 3006) "a") (data (i32.const 3009) "a") (data (i32.const 3012) "a") (data (i32.const 3015) "a") (data (i32.const 3018) "a") (data (i32.const 3021) "a") (data (i32.const 3024) "a") (data (i32.const 3027) "a") (data (i32.const 3030) "a") (data (i32.const 3033) "a") (data (i32.const 3036) "a") (data (i32.const 3039) "a") (data (i32.const 3042) "a") (data (i32.const 3045) "a") (data (i32.const 3048) "a") (data (i32.const 3051) "a") (data (i32.const 3054) "a") (data (i32.const 3057) "a") (data (i32.const 3060) "a") (data (i32.const 3063) "a") (data (i32.const 3066) "a") (data (i32.const 3069) "a") (data (i32.const 3072) "a") (data (i32.const 3075) "a") (data (i32.const 3078) "a") (data (i32.const 3081) "a") (data (i32.const 3084) "a") (data (i32.const 3087) "a") (data (i32.const 3090) "a") (data (i32.const 3093) "a") (data (i32.const 3096) "a") (data (i32.const 3099) "a") (data (i32.const 3102) "a") (data (i32.const 3105) "a") (data (i32.const 3108) "a") (data (i32.const 3111) "a") (data (i32.const 3114) "a") (data (i32.const 3117) "a") (data (i32.const 3120) "a") (data (i32.const 3123) "a") (data (i32.const 3126) "a") (data (i32.const 3129) "a") (data (i32.const 3132) "a") (data (i32.const 3135) "a") (data (i32.const 3138) "a") (data (i32.const 3141) "a") (data (i32.const 3144) "a") (data (i32.const 3147) "a") (data (i32.const 3150) "a") (data (i32.const 3153) "a") (data (i32.const 3156) "a") (data (i32.const 3159) "a") (data (i32.const 3162) "a") (data (i32.const 3165) "a") (data (i32.const 3168) "a") (data (i32.const 3171) "a") (data (i32.const 3174) "a") (data (i32.const 3177) "a") (data (i32.const 3180) "a") (data (i32.const 3183) "a") (data (i32.const 3186) "a") (data (i32.const 3189) "a") (data (i32.const 3192) "a") (data (i32.const 3195) "a") (data (i32.const 3198) "a") (data (i32.const 3201) "a") (data (i32.const 3204) "a") (data (i32.const 3207) "a") (data (i32.const 3210) "a") (data (i32.const 3213) "a") (data (i32.const 3216) "a") (data (i32.const 3219) "a") (data (i32.const 3222) "a") (data (i32.const 3225) "a") (data (i32.const 3228) "a") (data (i32.const 3231) "a") (data (i32.const 3234) "a") (data (i32.const 3237) "a") (data (i32.const 3240) "a") (data (i32.const 3243) "a") (data (i32.const 3246) "a") (data (i32.const 3249) "a") (data (i32.const 3252) "a") (data (i32.const 3255) "a") (data (i32.const 3258) "a") (data (i32.const 3261) "a") (data (i32.const 3264) "a") (data (i32.const 3267) "a") (data (i32.const 3270) "a") (data (i32.const 3273) "a") (data (i32.const 3276) "a") (data (i32.const 3279) "a") (data (i32.const 3282) "a") (data (i32.const 3285) "a") (data (i32.const 3288) "a") (data (i32.const 3291) "a") (data (i32.const 3294) "a") (data (i32.const 3297) "a") (data (i32.const 3300) "a") (data (i32.const 3303) "a") (data (i32.const 3306) "a") (data (i32.const 3309) "a") (data (i32.const 3312) "a") (data (i32.const 3315) "a") (data (i32.const 3318) "a") (data (i32.const 3321) "a") (data (i32.const 3324) "a") (data (i32.const 3327) "a") (data (i32.const 3330) "a") (data (i32.const 3333) "a") (data (i32.const 3336) "a") (data (i32.const 3339) "a") (data (i32.const 3342) "a") (data (i32.const 3345) "a") (data (i32.const 3348) "a") (data (i32.const 3351) "a") (data (i32.const 3354) "a") (data (i32.const 3357) "a") (data (i32.const 3360) "a") (data (i32.const 3363) "a") (data (i32.const 3366) "a") (data (i32.const 3369) "a") (data (i32.const 3372) "a") (data (i32.const 3375) "a") (data (i32.const 3378) "a") (data (i32.const 3381) "a") (data (i32.const 3384) "a") (data (i32.const 3387) "a") (data (i32.const 3390) "a") (data (i32.const 3393) "a") (data (i32.const 3396) "a") (data (i32.const 3399) "a") (data (i32.const 3402) "a") (data (i32.const 3405) "a") (data (i32.const 3408) "a") (data (i32.const 3411) "a") (data (i32.const 3414) "a") (data (i32.const 3417) "a") (data (i32.const 3420) "a") (data (i32.const 3423) "a") (data (i32.const 3426) "a") (data (i32.const 3429) "a") (data (i32.const 3432) "a") (data (i32.const 3435) "a") (data (i32.const 3438) "a") (data (i32.const 3441) "a") (data (i32.const 3444) "a") (data (i32.const 3447) "a") (data (i32.const 3450) "a") (data (i32.const 3453) "a") (data (i32.const 3456) "a") (data (i32.const 3459) "a") (data (i32.const 3462) "a") (data (i32.const 3465) "a") (data (i32.const 3468) "a") (data (i32.const 3471) "a") (data (i32.const 3474) "a") (data (i32.const 3477) "a") (data (i32.const 3480) "a") (data (i32.const 3483) "a") (data (i32.const 3486) "a") (data (i32.const 3489) "a") (data (i32.const 3492) "a") (data (i32.const 3495) "a") (data (i32.const 3498) "a") (data (i32.const 3501) "a") (data (i32.const 3504) "a") (data (i32.const 3507) "a") (data (i32.const 3510) "a") (data (i32.const 3513) "a") (data (i32.const 3516) "a") (data (i32.const 3519) "a") (data (i32.const 3522) "a") (data (i32.const 3525) "a") (data (i32.const 3528) "a") (data (i32.const 3531) "a") (data (i32.const 3534) "a") (data (i32.const 3537) "a") (data (i32.const 3540) "a") (data (i32.const 3543) "a") (data (i32.const 3546) "a") (data (i32.const 3549) "a") (data (i32.const 3552) "a") (data (i32.const 3555) "a") (data (i32.const 3558) "a") (data (i32.const 3561) "a") (data (i32.const 3564) "a") (data (i32.const 3567) "a") (data (i32.const 3570) "a") (data (i32.const 3573) "a") (data (i32.const 3576) "a") (data (i32.const 3579) "a") (data (i32.const 3582) "a") (data (i32.const 3585) "a") (data (i32.const 3588) "a") (data (i32.const 3591) "a") (data (i32.const 3594) "a") (data (i32.const 3597) "a") (data (i32.const 3600) "a") (data (i32.const 3603) "a") (data (i32.const 3606) "a") (data (i32.const 3609) "a") (data (i32.const 3612) "a") (data (i32.const 3615) "a") (data (i32.const 3618) "a") (data (i32.const 3621) "a") (data (i32.const 3624) "a") (data (i32.const 3627) "a") (data (i32.const 3630) "a") (data (i32.const 3633) "a") (data (i32.const 3636) "a") (data (i32.const 3639) "a") (data (i32.const 3642) "a") (data (i32.const 3645) "a") (data (i32.const 3648) "a") (data (i32.const 3651) "a") (data (i32.const 3654) "a") (data (i32.const 3657) "a") (data (i32.const 3660) "a") (data (i32.const 3663) "a") (data (i32.const 3666) "a") (data (i32.const 3669) "a") (data (i32.const 3672) "a") (data (i32.const 3675) "a") (data (i32.const 3678) "a") (data (i32.const 3681) "a") (data (i32.const 3684) "a") (data (i32.const 3687) "a") (data (i32.const 3690) "a") (data (i32.const 3693) "a") (data (i32.const 3696) "a") (data (i32.const 3699) "a") (data (i32.const 3702) "a") (data (i32.const 3705) "a") (data (i32.const 3708) "a") (data (i32.const 3711) "a") (data (i32.const 3714) "a") (data (i32.const 3717) "a") (data (i32.const 3720) "a") (data (i32.const 3723) "a") (data (i32.const 3726) "a") (data (i32.const 3729) "a") (data (i32.const 3732) "a") (data (i32.const 3735) "a") (data (i32.const 3738) "a") (data (i32.const 3741) "a") (data (i32.const 3744) "a") (data (i32.const 3747) "a") (data (i32.const 3750) "a") (data (i32.const 3753) "a") (data (i32.const 3756) "a") (data (i32.const 3759) "a") (data (i32.const 3762) "a") (data (i32.const 3765) "a") (data (i32.const 3768) "a") (data (i32.const 3771) "a") (data (i32.const 3774) "a") (data (i32.const 3777) "a") (data (i32.const 3780) "a") (data (i32.const 3783) "a") (data (i32.const 3786) "a") (data (i32.const 3789) "a") (data (i32.const 3792) "a") (data (i32.const 3795) "a") (data (i32.const 3798) "a") (data (i32.const 3801) "a") (data (i32.const 3804) "a") (data (i32.const 3807) "a") (data (i32.const 3810) "a") (data (i32.const 3813) "a") (data (i32.const 3816) "a") (data (i32.const 3819) "a") (data (i32.const 3822) "a") (data (i32.const 3825) "a") (data (i32.const 3828) "a") (data (i32.const 3831) "a") (data (i32.const 3834) "a") (data (i32.const 3837) "a") (data (i32.const 3840) "a") (data (i32.const 3843) "a") (data (i32.const 3846) "a") (data (i32.const 3849) "a") (data (i32.const 3852) "a") (data (i32.const 3855) "a") (data (i32.const 3858) "a") (data (i32.const 3861) "a") (data (i32.const 3864) "a") (data (i32.const 3867) "a") (data (i32.const 3870) "a") (data (i32.const 3873) "a") (data (i32.const 3876) "a") (data (i32.const 3879) "a") (data (i32.const 3882) "a") (data (i32.const 3885) "a") (data (i32.const 3888) "a") (data (i32.const 3891) "a") (data (i32.const 3894) "a") (data (i32.const 3897) "a") (data (i32.const 3900) "a") (data (i32.const 3903) "a") (data (i32.const 3906) "a") (data (i32.const 3909) "a") (data (i32.const 3912) "a") (data (i32.const 3915) "a") (data (i32.const 3918) "a") (data (i32.const 3921) "a") (data (i32.const 3924) "a") (data (i32.const 3927) "a") (data (i32.const 3930) "a") (data (i32.const 3933) "a") (data (i32.const 3936) "a") (data (i32.const 3939) "a") (data (i32.const 3942) "a") (data (i32.const 3945) "a") (data (i32.const 3948) "a") (data (i32.const 3951) "a") (data (i32.const 3954) "a") (data (i32.const 3957) "a") (data (i32.const 3960) "a") (data (i32.const 3963) "a") (data (i32.const 3966) "a") (data (i32.const 3969) "a") (data (i32.const 3972) "a") (data (i32.const 3975) "a") (data (i32.const 3978) "a") (data (i32.const 3981) "a") (data (i32.const 3984) "a") (data (i32.const 3987) "a") (data (i32.const 3990) "a") (data (i32.const 3993) "a") (data (i32.const 3996) "a") (data (i32.const 3999) "a") (data (i32.const 4002) "a") (data (i32.const 4005) "a") (data (i32.const 4008) "a") (data (i32.const 4011) "a") (data (i32.const 4014) "a") (data (i32.const 4017) "a") (data (i32.const 4020) "a") (data (i32.const 4023) "a") (data (i32.const 4026) "a") (data (i32.const 4029) "a") (data (i32.const 4032) "a") (data (i32.const 4035) "a") (data (i32.const 4038) "a") (data (i32.const 4041) "a") (data (i32.const 4044) "a") (data (i32.const 4047) "a") (data (i32.const 4050) "a") (data (i32.const 4053) "a") (data (i32.const 4056) "a") (data (i32.const 4059) "a") (data (i32.const 4062) "a") (data (i32.const 4065) "a") (data (i32.const 4068) "a") (data (i32.const 4071) "a") (data (i32.const 4074) "a") (data (i32.const 4077) "a") (data (i32.const 4080) "a") (data (i32.const 4083) "a") (data (i32.const 4086) "a") (data (i32.const 4089) "a") (data (i32.const 4092) "a") (data (i32.const 4095) "a") (data (i32.const 4098) "a") (data (i32.const 4101) "a") (data (i32.const 4104) "a") (data (i32.const 4107) "a") (data (i32.const 4110) "a") (data (i32.const 4113) "a") (data (i32.const 4116) "a") (data (i32.const 4119) "a") (data (i32.const 4122) "a") (data (i32.const 4125) "a") (data (i32.const 4128) "a") (data (i32.const 4131) "a") (data (i32.const 4134) "a") (data (i32.const 4137) "a") (data (i32.const 4140) "a") (data (i32.const 4143) "a") (data (i32.const 4146) "a") (data (i32.const 4149) "a") (data (i32.const 4152) "a") (data (i32.const 4155) "a") (data (i32.const 4158) "a") (data (i32.const 4161) "a") (data (i32.const 4164) "a") (data (i32.const 4167) "a") (data (i32.const 4170) "a") (data (i32.const 4173) "a") (data (i32.const 4176) "a") (data (i32.const 4179) "a") (data (i32.const 4182) "a") (data (i32.const 4185) "a") (data (i32.const 4188) "a") (data (i32.const 4191) "a") (data (i32.const 4194) "a") (data (i32.const 4197) "a") (data (i32.const 4200) "a") (data (i32.const 4203) "a") (data (i32.const 4206) "a") (data (i32.const 4209) "a") (data (i32.const 4212) "a") (data (i32.const 4215) "a") (data (i32.const 4218) "a") (data (i32.const 4221) "a") (data (i32.const 4224) "a") (data (i32.const 4227) "a") (data (i32.const 4230) "a") (data (i32.const 4233) "a") (data (i32.const 4236) "a") (data (i32.const 4239) "a") (data (i32.const 4242) "a") (data (i32.const 4245) "a") (data (i32.const 4248) "a") (data (i32.const 4251) "a") (data (i32.const 4254) "a") (data (i32.const 4257) "a") (data (i32.const 4260) "a") (data (i32.const 4263) "a") (data (i32.const 4266) "a") (data (i32.const 4269) "a") (data (i32.const 4272) "a") (data (i32.const 4275) "a") (data (i32.const 4278) "a") (data (i32.const 4281) "a") (data (i32.const 4284) "a") (data (i32.const 4287) "a") (data (i32.const 4290) "a") (data (i32.const 4293) "a") (data (i32.const 4296) "a") (data (i32.const 4299) "a") (data (i32.const 4302) "a") (data (i32.const 4305) "a") (data (i32.const 4308) "a") (data (i32.const 4311) "a") (data (i32.const 4314) "a") (data (i32.const 4317) "a") (data (i32.const 4320) "a") (data (i32.const 4323) "a") (data (i32.const 4326) "a") (data (i32.const 4329) "a") (data (i32.const 4332) "a") (data (i32.const 4335) "a") (data (i32.const 4338) "a") (data (i32.const 4341) "a") (data (i32.const 4344) "a") (data (i32.const 4347) "a") (data (i32.const 4350) "a") (data (i32.const 4353) "a") (data (i32.const 4356) "a") (data (i32.const 4359) "a") (data (i32.const 4362) "a") (data (i32.const 4365) "a") (data (i32.const 4368) "a") (data (i32.const 4371) "a") (data (i32.const 4374) "a") (data (i32.const 4377) "a") (data (i32.const 4380) "a") (data (i32.const 4383) "a") (data (i32.const 4386) "a") (data (i32.const 4389) "a") (data (i32.const 4392) "a") (data (i32.const 4395) "a") (data (i32.const 4398) "a") (data (i32.const 4401) "a") (data (i32.const 4404) "a") (data (i32.const 4407) "a") (data (i32.const 4410) "a") (data (i32.const 4413) "a") (data (i32.const 4416) "a") (data (i32.const 4419) "a") (data (i32.const 4422) "a") (data (i32.const 4425) "a") (data (i32.const 4428) "a") (data (i32.const 4431) "a") (data (i32.const 4434) "a") (data (i32.const 4437) "a") (data (i32.const 4440) "a") (data (i32.const 4443) "a") (data (i32.const 4446) "a") (data (i32.const 4449) "a") (data (i32.const 4452) "a") (data (i32.const 4455) "a") (data (i32.const 4458) "a") (data (i32.const 4461) "a") (data (i32.const 4464) "a") (data (i32.const 4467) "a") (data (i32.const 4470) "a") (data (i32.const 4473) "a") (data (i32.const 4476) "a") (data (i32.const 4479) "a") (data (i32.const 4482) "a") (data (i32.const 4485) "a") (data (i32.const 4488) "a") (data (i32.const 4491) "a") (data (i32.const 4494) "a") (data (i32.const 4497) "a") (data (i32.const 4500) "a") (data (i32.const 4503) "a") (data (i32.const 4506) "a") (data (i32.const 4509) "a") (data (i32.const 4512) "a") (data (i32.const 4515) "a") (data (i32.const 4518) "a") (data (i32.const 4521) "a") (data (i32.const 4524) "a") (data (i32.const 4527) "a") (data (i32.const 4530) "a") (data (i32.const 4533) "a") (data (i32.const 4536) "a") (data (i32.const 4539) "a") (data (i32.const 4542) "a") (data (i32.const 4545) "a") (data (i32.const 4548) "a") (data (i32.const 4551) "a") (data (i32.const 4554) "a") (data (i32.const 4557) "a") (data (i32.const 4560) "a") (data (i32.const 4563) "a") (data (i32.const 4566) "a") (data (i32.const 4569) "a") (data (i32.const 4572) "a") (data (i32.const 4575) "a") (data (i32.const 4578) "a") (data (i32.const 4581) "a") (data (i32.const 4584) "a") (data (i32.const 4587) "a") (data (i32.const 4590) "a") (data (i32.const 4593) "a") (data (i32.const 4596) "a") (data (i32.const 4599) "a") (data (i32.const 4602) "a") (data (i32.const 4605) "a") (data (i32.const 4608) "a") (data (i32.const 4611) "a") (data (i32.const 4614) "a") (data (i32.const 4617) "a") (data (i32.const 4620) "a") (data (i32.const 4623) "a") (data (i32.const 4626) "a") (data (i32.const 4629) "a") (data (i32.const 4632) "a") (data (i32.const 4635) "a") (data (i32.const 4638) "a") (data (i32.const 4641) "a") (data (i32.const 4644) "a") (data (i32.const 4647) "a") (data (i32.const 4650) "a") (data (i32.const 4653) "a") (data (i32.const 4656) "a") (data (i32.const 4659) "a") (data (i32.const 4662) "a") (data (i32.const 4665) "a") (data (i32.const 4668) "a") (data (i32.const 4671) "a") (data (i32.const 4674) "a") (data (i32.const 4677) "a") (data (i32.const 4680) "a") (data (i32.const 4683) "a") (data (i32.const 4686) "a") (data (i32.const 4689) "a") (data (i32.const 4692) "a") (data (i32.const 4695) "a") (data (i32.const 4698) "a") (data (i32.const 4701) "a") (data (i32.const 4704) "a") (data (i32.const 4707) "a") (data (i32.const 4710) "a") (data (i32.const 4713) "a") (data (i32.const 4716) "a") (data (i32.const 4719) "a") (data (i32.const 4722) "a") (data (i32.const 4725) "a") (data (i32.const 4728) "a") (data (i32.const 4731) "a") (data (i32.const 4734) "a") (data (i32.const 4737) "a") (data (i32.const 4740) "a") (data (i32.const 4743) "a") (data (i32.const 4746) "a") (data (i32.const 4749) "a") (data (i32.const 4752) "a") (data (i32.const 4755) "a") (data (i32.const 4758) "a") (data (i32.const 4761) "a") (data (i32.const 4764) "a") (data (i32.const 4767) "a") (data (i32.const 4770) "a") (data (i32.const 4773) "a") (data (i32.const 4776) "a") (data (i32.const 4779) "a") (data (i32.const 4782) "a") (data (i32.const 4785) "a") (data (i32.const 4788) "a") (data (i32.const 4791) "a") (data (i32.const 4794) "a") (data (i32.const 4797) "a") (data (i32.const 4800) "a") (data (i32.const 4803) "a") (data (i32.const 4806) "a") (data (i32.const 4809) "a") (data (i32.const 4812) "a") (data (i32.const 4815) "a") (data (i32.const 4818) "a") (data (i32.const 4821) "a") (data (i32.const 4824) "a") (data (i32.const 4827) "a") (data (i32.const 4830) "a") (data (i32.const 4833) "a") (data (i32.const 4836) "a") (data (i32.const 4839) "a") (data (i32.const 4842) "a") (data (i32.const 4845) "a") (data (i32.const 4848) "a") (data (i32.const 4851) "a") (data (i32.const 4854) "a") (data (i32.const 4857) "a") (data (i32.const 4860) "a") (data (i32.const 4863) "a") (data (i32.const 4866) "a") (data (i32.const 4869) "a") (data (i32.const 4872) "a") (data (i32.const 4875) "a") (data (i32.const 4878) "a") (data (i32.const 4881) "a") (data (i32.const 4884) "a") (data (i32.const 4887) "a") (data (i32.const 4890) "a") (data (i32.const 4893) "a") (data (i32.const 4896) "a") (data (i32.const 4899) "a") (data (i32.const 4902) "a") (data (i32.const 4905) "a") (data (i32.const 4908) "a") (data (i32.const 4911) "a") (data (i32.const 4914) "a") (data (i32.const 4917) "a") (data (i32.const 4920) "a") (data (i32.const 4923) "a") (data (i32.const 4926) "a") (data (i32.const 4929) "a") (data (i32.const 4932) "a") (data (i32.const 4935) "a") (data (i32.const 4938) "a") (data (i32.const 4941) "a") (data (i32.const 4944) "a") (data (i32.const 4947) "a") (data (i32.const 4950) "a") (data (i32.const 4953) "a") (data (i32.const 4956) "a") (data (i32.const 4959) "a") (data (i32.const 4962) "a") (data (i32.const 4965) "a") (data (i32.const 4968) "a") (data (i32.const 4971) "a") (data (i32.const 4974) "a") (data (i32.const 4977) "a") (data (i32.const 4980) "a") (data (i32.const 4983) "a") (data (i32.const 4986) "a") (data (i32.const 4989) "a") (data (i32.const 4992) "a") (data (i32.const 4995) "a") (data (i32.const 4998) "a") (data (i32.const 5001) "a") (data (i32.const 5004) "a") (data (i32.const 5007) "a") (data (i32.const 5010) "a") (data (i32.const 5013) "a") (data (i32.const 5016) "a") (data (i32.const 5019) "a") (data (i32.const 5022) "a") (data (i32.const 5025) "a") (data (i32.const 5028) "a") (data (i32.const 5031) "a") (data (i32.const 5034) "a") (data (i32.const 5037) "a") (data (i32.const 5040) "a") (data (i32.const 5043) "a") (data (i32.const 5046) "a") (data (i32.const 5049) "a") (data (i32.const 5052) "a") (data (i32.const 5055) "a") (data (i32.const 5058) "a") (data (i32.const 5061) "a") (data (i32.const 5064) "a") (data (i32.const 5067) "a") (data (i32.const 5070) "a") (data (i32.const 5073) "a") (data (i32.const 5076) "a") (data (i32.const 5079) "a") (data (i32.const 5082) "a") (data (i32.const 5085) "a") (data (i32.const 5088) "a") (data (i32.const 5091) "a") (data (i32.const 5094) "a") (data (i32.const 5097) "a") (data (i32.const 5100) "a") (data (i32.const 5103) "a") (data (i32.const 5106) "a") (data (i32.const 5109) "a") (data (i32.const 5112) "a") (data (i32.const 5115) "a") (data (i32.const 5118) "a") (data (i32.const 5121) "a") (data (i32.const 5124) "a") (data (i32.const 5127) "a") (data (i32.const 5130) "a") (data (i32.const 5133) "a") (data (i32.const 5136) "a") (data (i32.const 5139) "a") (data (i32.const 5142) "a") (data (i32.const 5145) "a") (data (i32.const 5148) "a") (data (i32.const 5151) "a") (data (i32.const 5154) "a") (data (i32.const 5157) "a") (data (i32.const 5160) "a") (data (i32.const 5163) "a") (data (i32.const 5166) "a") (data (i32.const 5169) "a") (data (i32.const 5172) "a") (data (i32.const 5175) "a") (data (i32.const 5178) "a") (data (i32.const 5181) "a") (data (i32.const 5184) "a") (data (i32.const 5187) "a") (data (i32.const 5190) "a") (data (i32.const 5193) "a") (data (i32.const 5196) "a") (data (i32.const 5199) "a") (data (i32.const 5202) "a") (data (i32.const 5205) "a") (data (i32.const 5208) "a") (data (i32.const 5211) "a") (data (i32.const 5214) "a") (data (i32.const 5217) "a") (data (i32.const 5220) "a") (data (i32.const 5223) "a") (data (i32.const 5226) "a") (data (i32.const 5229) "a") (data (i32.const 5232) "a") (data (i32.const 5235) "a") (data (i32.const 5238) "a") (data (i32.const 5241) "a") (data (i32.const 5244) "a") (data (i32.const 5247) "a") (data (i32.const 5250) "a") (data (i32.const 5253) "a") (data (i32.const 5256) "a") (data (i32.const 5259) "a") (data (i32.const 5262) "a") (data (i32.const 5265) "a") (data (i32.const 5268) "a") (data (i32.const 5271) "a") (data (i32.const 5274) "a") (data (i32.const 5277) "a") (data (i32.const 5280) "a") (data (i32.const 5283) "a") (data (i32.const 5286) "a") (data (i32.const 5289) "a") (data (i32.const 5292) "a") (data (i32.const 5295) "a") (data (i32.const 5298) "a") (data (i32.const 5301) "a") (data (i32.const 5304) "a") (data (i32.const 5307) "a") (data (i32.const 5310) "a") (data (i32.const 5313) "a") (data (i32.const 5316) "a") (data (i32.const 5319) "a") (data (i32.const 5322) "a") (data (i32.const 5325) "a") (data (i32.const 5328) "a") (data (i32.const 5331) "a") (data (i32.const 5334) "a") (data (i32.const 5337) "a") (data (i32.const 5340) "a") (data (i32.const 5343) "a") (data (i32.const 5346) "a") (data (i32.const 5349) "a") (data (i32.const 5352) "a") (data (i32.const 5355) "a") (data (i32.const 5358) "a") (data (i32.const 5361) "a") (data (i32.const 5364) "a") (data (i32.const 5367) "a") (data (i32.const 5370) "a") (data (i32.const 5373) "a") (data (i32.const 5376) "a") (data (i32.const 5379) "a") (data (i32.const 5382) "a") (data (i32.const 5385) "a") (data (i32.const 5388) "a") (data (i32.const 5391) "a") (data (i32.const 5394) "a") (data (i32.const 5397) "a") (data (i32.const 5400) "a") (data (i32.const 5403) "a") (data (i32.const 5406) "a") (data (i32.const 5409) "a") (data (i32.const 5412) "a") (data (i32.const 5415) "a") (data (i32.const 5418) "a") (data (i32.const 5421) "a") (data (i32.const 5424) "a") (data (i32.const 5427) "a") (data (i32.const 5430) "a") (data (i32.const 5433) "a") (data (i32.const 5436) "a") (data (i32.const 5439) "a") (data (i32.const 5442) "a") (data (i32.const 5445) "a") (data (i32.const 5448) "a") (data (i32.const 5451) "a") (data (i32.const 5454) "a") (data (i32.const 5457) "a") (data (i32.const 5460) "a") (data (i32.const 5463) "a") (data (i32.const 5466) "a") (data (i32.const 5469) "a") (data (i32.const 5472) "a") (data (i32.const 5475) "a") (data (i32.const 5478) "a") (data (i32.const 5481) "a") (data (i32.const 5484) "a") (data (i32.const 5487) "a") (data (i32.const 5490) "a") (data (i32.const 5493) "a") (data (i32.const 5496) "a") (data (i32.const 5499) "a") (data (i32.const 5502) "a") (data (i32.const 5505) "a") (data (i32.const 5508) "a") (data (i32.const 5511) "a") (data (i32.const 5514) "a") (data (i32.const 5517) "a") (data (i32.const 5520) "a") (data (i32.const 5523) "a") (data (i32.const 5526) "a") (data (i32.const 5529) "a") (data (i32.const 5532) "a") (data (i32.const 5535) "a") (data (i32.const 5538) "a") (data (i32.const 5541) "a") (data (i32.const 5544) "a") (data (i32.const 5547) "a") (data (i32.const 5550) "a") (data (i32.const 5553) "a") (data (i32.const 5556) "a") (data (i32.const 5559) "a") (data (i32.const 5562) "a") (data (i32.const 5565) "a") (data (i32.const 5568) "a") (data (i32.const 5571) "a") (data (i32.const 5574) "a") (data (i32.const 5577) "a") (data (i32.const 5580) "a") (data (i32.const 5583) "a") (data (i32.const 5586) "a") (data (i32.const 5589) "a") (data (i32.const 5592) "a") (data (i32.const 5595) "a") (data (i32.const 5598) "a") (data (i32.const 5601) "a") (data (i32.const 5604) "a") (data (i32.const 5607) "a") (data (i32.const 5610) "a") (data (i32.const 5613) "a") (data (i32.const 5616) "a") (data (i32.const 5619) "a") (data (i32.const 5622) "a") (data (i32.const 5625) "a") (data (i32.const 5628) "a") (data (i32.const 5631) "a") (data (i32.const 5634) "a") (data (i32.const 5637) "a") (data (i32.const 5640) "a") (data (i32.const 5643) "a") (data (i32.const 5646) "a") (data (i32.const 5649) "a") (data (i32.const 5652) "a") (data (i32.const 5655) "a") (data (i32.const 5658) "a") (data (i32.const 5661) "a") (data (i32.const 5664) "a") (data (i32.const 5667) "a") (data (i32.const 5670) "a") (data (i32.const 5673) "a") (data (i32.const 5676) "a") (data (i32.const 5679) "a") (data (i32.const 5682) "a") (data (i32.const 5685) "a") (data (i32.const 5688) "a") (data (i32.const 5691) "a") (data (i32.const 5694) "a") (data (i32.const 5697) "a") (data (i32.const 5700) "a") (data (i32.const 5703) "a") (data (i32.const 5706) "a") (data (i32.const 5709) "a") (data (i32.const 5712) "a") (data (i32.const 5715) "a") (data (i32.const 5718) "a") (data (i32.const 5721) "a") (data (i32.const 5724) "a") (data (i32.const 5727) "a") (data (i32.const 5730) "a") (data (i32.const 5733) "a") (data (i32.const 5736) "a") (data (i32.const 5739) "a") (data (i32.const 5742) "a") (data (i32.const 5745) "a") (data (i32.const 5748) "a") (data (i32.const 5751) "a") (data (i32.const 5754) "a") (data (i32.const 5757) "a") (data (i32.const 5760) "a") (data (i32.const 5763) "a") (data (i32.const 5766) "a") (data (i32.const 5769) "a") (data (i32.const 5772) "a") (data (i32.const 5775) "a") (data (i32.const 5778) "a") (data (i32.const 5781) "a") (data (i32.const 5784) "a") (data (i32.const 5787) "a") (data (i32.const 5790) "a") (data (i32.const 5793) "a") (data (i32.const 5796) "a") (data (i32.const 5799) "a") (data (i32.const 5802) "a") (data (i32.const 5805) "a") (data (i32.const 5808) "a") (data (i32.const 5811) "a") (data (i32.const 5814) "a") (data (i32.const 5817) "a") (data (i32.const 5820) "a") (data (i32.const 5823) "a") (data (i32.const 5826) "a") (data (i32.const 5829) "a") (data (i32.const 5832) "a") (data (i32.const 5835) "a") (data (i32.const 5838) "a") (data (i32.const 5841) "a") (data (i32.const 5844) "a") (data (i32.const 5847) "a") (data (i32.const 5850) "a") (data (i32.const 5853) "a") (data (i32.const 5856) "a") (data (i32.const 5859) "a") (data (i32.const 5862) "a") (data (i32.const 5865) "a") (data (i32.const 5868) "a") (data (i32.const 5871) "a") (data (i32.const 5874) "a") (data (i32.const 5877) "a") (data (i32.const 5880) "a") (data (i32.const 5883) "a") (data (i32.const 5886) "a") (data (i32.const 5889) "a") (data (i32.const 5892) "a") (data (i32.const 5895) "a") (data (i32.const 5898) "a") (data (i32.const 5901) "a") (data (i32.const 5904) "a") (data (i32.const 5907) "a") (data (i32.const 5910) "a") (data (i32.const 5913) "a") (data (i32.const 5916) "a") (data (i32.const 5919) "a") (data (i32.const 5922) "a") (data (i32.const 5925) "a") (data (i32.const 5928) "a") (data (i32.const 5931) "a") (data (i32.const 5934) "a") (data (i32.const 5937) "a") (data (i32.const 5940) "a") (data (i32.const 5943) "a") (data (i32.const 5946) "a") (data (i32.const 5949) "a") (data (i32.const 5952) "a") (data (i32.const 5955) "a") (data (i32.const 5958) "a") (data (i32.const 5961) "a") (data (i32.const 5964) "a") (data (i32.const 5967) "a") (data (i32.const 5970) "a") (data (i32.const 5973) "a") (data (i32.const 5976) "a") (data (i32.const 5979) "a") (data (i32.const 5982) "a") (data (i32.const 5985) "a") (data (i32.const 5988) "a") (data (i32.const 5991) "a") (data (i32.const 5994) "a") (data (i32.const 5997) "a") (data (i32.const 6000) "a") (data (i32.const 6003) "a") (data (i32.const 6006) "a") (data (i32.const 6009) "a") (data (i32.const 6012) "a") (data (i32.const 6015) "a") (data (i32.const 6018) "a") (data (i32.const 6021) "a") (data (i32.const 6024) "a") (data (i32.const 6027) "a") (data (i32.const 6030) "a") (data (i32.const 6033) "a") (data (i32.const 6036) "a") (data (i32.const 6039) "a") (data (i32.const 6042) "a") (data (i32.const 6045) "a") (data (i32.const 6048) "a") (data (i32.const 6051) "a") (data (i32.const 6054) "a") (data (i32.const 6057) "a") (data (i32.const 6060) "a") (data (i32.const 6063) "a") (data (i32.const 6066) "a") (data (i32.const 6069) "a") (data (i32.const 6072) "a") (data (i32.const 6075) "a") (data (i32.const 6078) "a") (data (i32.const 6081) "a") (data (i32.const 6084) "a") (data (i32.const 6087) "a") (data (i32.const 6090) "a") (data (i32.const 6093) "a") (data (i32.const 6096) "a") (data (i32.const 6099) "a") (data (i32.const 6102) "a") (data (i32.const 6105) "a") (data (i32.const 6108) "a") (data (i32.const 6111) "a") (data (i32.const 6114) "a") (data (i32.const 6117) "a") (data (i32.const 6120) "a") (data (i32.const 6123) "a") (data (i32.const 6126) "a") (data (i32.const 6129) "a") (data (i32.const 6132) "a") (data (i32.const 6135) "a") (data (i32.const 6138) "a") (data (i32.const 6141) "a") (data (i32.const 6144) "a") (data (i32.const 6147) "a") (data (i32.const 6150) "a") (data (i32.const 6153) "a") (data (i32.const 6156) "a") (data (i32.const 6159) "a") (data (i32.const 6162) "a") (data (i32.const 6165) "a") (data (i32.const 6168) "a") (data (i32.const 6171) "a") (data (i32.const 6174) "a") (data (i32.const 6177) "a") (data (i32.const 6180) "a") (data (i32.const 6183) "a") (data (i32.const 6186) "a") (data (i32.const 6189) "a") (data (i32.const 6192) "a") (data (i32.const 6195) "a") (data (i32.const 6198) "a") (data (i32.const 6201) "a") (data (i32.const 6204) "a") (data (i32.const 6207) "a") (data (i32.const 6210) "a") (data (i32.const 6213) "a") (data (i32.const 6216) "a") (data (i32.const 6219) "a") (data (i32.const 6222) "a") (data (i32.const 6225) "a") (data (i32.const 6228) "a") (data (i32.const 6231) "a") (data (i32.const 6234) "a") (data (i32.const 6237) "a") (data (i32.const 6240) "a") (data (i32.const 6243) "a") (data (i32.const 6246) "a") (data (i32.const 6249) "a") (data (i32.const 6252) "a") (data (i32.const 6255) "a") (data (i32.const 6258) "a") (data (i32.const 6261) "a") (data (i32.const 6264) "a") (data (i32.const 6267) "a") (data (i32.const 6270) "a") (data (i32.const 6273) "a") (data (i32.const 6276) "a") (data (i32.const 6279) "a") (data (i32.const 6282) "a") (data (i32.const 6285) "a") (data (i32.const 6288) "a") (data (i32.const 6291) "a") (data (i32.const 6294) "a") (data (i32.const 6297) "a") (data (i32.const 6300) "a") (data (i32.const 6303) "a") (data (i32.const 6306) "a") (data (i32.const 6309) "a") (data (i32.const 6312) "a") (data (i32.const 6315) "a") (data (i32.const 6318) "a") (data (i32.const 6321) "a") (data (i32.const 6324) "a") (data (i32.const 6327) "a") (data (i32.const 6330) "a") (data (i32.const 6333) "a") (data (i32.const 6336) "a") (data (i32.const 6339) "a") (data (i32.const 6342) "a") (data (i32.const 6345) "a") (data (i32.const 6348) "a") (data (i32.const 6351) "a") (data (i32.const 6354) "a") (data (i32.const 6357) "a") (data (i32.const 6360) "a") (data (i32.const 6363) "a") (data (i32.const 6366) "a") (data (i32.const 6369) "a") (data (i32.const 6372) "a") (data (i32.const 6375) "a") (data (i32.const 6378) "a") (data (i32.const 6381) "a") (data (i32.const 6384) "a") (data (i32.const 6387) "a") (data (i32.const 6390) "a") (data (i32.const 6393) "a") (data (i32.const 6396) "a") (data (i32.const 6399) "a") (data (i32.const 6402) "a") (data (i32.const 6405) "a") (data (i32.const 6408) "a") (data (i32.const 6411) "a") (data (i32.const 6414) "a") (data (i32.const 6417) "a") (data (i32.const 6420) "a") (data (i32.const 6423) "a") (data (i32.const 6426) "a") (data (i32.const 6429) "a") (data (i32.const 6432) "a") (data (i32.const 6435) "a") (data (i32.const 6438) "a") (data (i32.const 6441) "a") (data (i32.const 6444) "a") (data (i32.const 6447) "a") (data (i32.const 6450) "a") (data (i32.const 6453) "a") (data (i32.const 6456) "a") (data (i32.const 6459) "a") (data (i32.const 6462) "a") (data (i32.const 6465) "a") (data (i32.const 6468) "a") (data (i32.const 6471) "a") (data (i32.const 6474) "a") (data (i32.const 6477) "a") (data (i32.const 6480) "a") (data (i32.const 6483) "a") (data (i32.const 6486) "a") (data (i32.const 6489) "a") (data (i32.const 6492) "a") (data (i32.const 6495) "a") (data (i32.const 6498) "a") (data (i32.const 6501) "a") (data (i32.const 6504) "a") (data (i32.const 6507) "a") (data (i32.const 6510) "a") (data (i32.const 6513) "a") (data (i32.const 6516) "a") (data (i32.const 6519) "a") (data (i32.const 6522) "a") (data (i32.const 6525) "a") (data (i32.const 6528) "a") (data (i32.const 6531) "a") (data (i32.const 6534) "a") (data (i32.const 6537) "a") (data (i32.const 6540) "a") (data (i32.const 6543) "a") (data (i32.const 6546) "a") (data (i32.const 6549) "a") (data (i32.const 6552) "a") (data (i32.const 6555) "a") (data (i32.const 6558) "a") (data (i32.const 6561) "a") (data (i32.const 6564) "a") (data (i32.const 6567) "a") (data (i32.const 6570) "a") (data (i32.const 6573) "a") (data (i32.const 6576) "a") (data (i32.const 6579) "a") (data (i32.const 6582) "a") (data (i32.const 6585) "a") (data (i32.const 6588) "a") (data (i32.const 6591) "a") (data (i32.const 6594) "a") (data (i32.const 6597) "a") (data (i32.const 6600) "a") (data (i32.const 6603) "a") (data (i32.const 6606) "a") (data (i32.const 6609) "a") (data (i32.const 6612) "a") (data (i32.const 6615) "a") (data (i32.const 6618) "a") (data (i32.const 6621) "a") (data (i32.const 6624) "a") (data (i32.const 6627) "a") (data (i32.const 6630) "a") (data (i32.const 6633) "a") (data (i32.const 6636) "a") (data (i32.const 6639) "a") (data (i32.const 6642) "a") (data (i32.const 6645) "a") (data (i32.const 6648) "a") (data (i32.const 6651) "a") (data (i32.const 6654) "a") (data (i32.const 6657) "a") (data (i32.const 6660) "a") (data (i32.const 6663) "a") (data (i32.const 6666) "a") (data (i32.const 6669) "a") (data (i32.const 6672) "a") (data (i32.const 6675) "a") (data (i32.const 6678) "a") (data (i32.const 6681) "a") (data (i32.const 6684) "a") (data (i32.const 6687) "a") (data (i32.const 6690) "a") (data (i32.const 6693) "a") (data (i32.const 6696) "a") (data (i32.const 6699) "a") (data (i32.const 6702) "a") (data (i32.const 6705) "a") (data (i32.const 6708) "a") (data (i32.const 6711) "a") (data (i32.const 6714) "a") (data (i32.const 6717) "a") (data (i32.const 6720) "a") (data (i32.const 6723) "a") (data (i32.const 6726) "a") (data (i32.const 6729) "a") (data (i32.const 6732) "a") (data (i32.const 6735) "a") (data (i32.const 6738) "a") (data (i32.const 6741) "a") (data (i32.const 6744) "a") (data (i32.const 6747) "a") (data (i32.const 6750) "a") (data (i32.const 6753) "a") (data (i32.const 6756) "a") (data (i32.const 6759) "a") (data (i32.const 6762) "a") (data (i32.const 6765) "a") (data (i32.const 6768) "a") (data (i32.const 6771) "a") (data (i32.const 6774) "a") (data (i32.const 6777) "a") (data (i32.const 6780) "a") (data (i32.const 6783) "a") (data (i32.const 6786) "a") (data (i32.const 6789) "a") (data (i32.const 6792) "a") (data (i32.const 6795) "a") (data (i32.const 6798) "a") (data (i32.const 6801) "a") (data (i32.const 6804) "a") (data (i32.const 6807) "a") (data (i32.const 6810) "a") (data (i32.const 6813) "a") (data (i32.const 6816) "a") (data (i32.const 6819) "a") (data (i32.const 6822) "a") (data (i32.const 6825) "a") (data (i32.const 6828) "a") (data (i32.const 6831) "a") (data (i32.const 6834) "a") (data (i32.const 6837) "a") (data (i32.const 6840) "a") (data (i32.const 6843) "a") (data (i32.const 6846) "a") (data (i32.const 6849) "a") (data (i32.const 6852) "a") (data (i32.const 6855) "a") (data (i32.const 6858) "a") (data (i32.const 6861) "a") (data (i32.const 6864) "a") (data (i32.const 6867) "a") (data (i32.const 6870) "a") (data (i32.const 6873) "a") (data (i32.const 6876) "a") (data (i32.const 6879) "a") (data (i32.const 6882) "a") (data (i32.const 6885) "a") (data (i32.const 6888) "a") (data (i32.const 6891) "a") (data (i32.const 6894) "a") (data (i32.const 6897) "a") (data (i32.const 6900) "a") (data (i32.const 6903) "a") (data (i32.const 6906) "a") (data (i32.const 6909) "a") (data (i32.const 6912) "a") (data (i32.const 6915) "a") (data (i32.const 6918) "a") (data (i32.const 6921) "a") (data (i32.const 6924) "a") (data (i32.const 6927) "a") (data (i32.const 6930) "a") (data (i32.const 6933) "a") (data (i32.const 6936) "a") (data (i32.const 6939) "a") (data (i32.const 6942) "a") (data (i32.const 6945) "a") (data (i32.const 6948) "a") (data (i32.const 6951) "a") (data (i32.const 6954) "a") (data (i32.const 6957) "a") (data (i32.const 6960) "a") (data (i32.const 6963) "a") (data (i32.const 6966) "a") (data (i32.const 6969) "a") (data (i32.const 6972) "a") (data (i32.const 6975) "a") (data (i32.const 6978) "a") (data (i32.const 6981) "a") (data (i32.const 6984) "a") (data (i32.const 6987) "a") (data (i32.const 6990) "a") (data (i32.const 6993) "a") (data (i32.const 6996) "a") (data (i32.const 6999) "a") (data (i32.const 7002) "a") (data (i32.const 7005) "a") (data (i32.const 7008) "a") (data (i32.const 7011) "a") (data (i32.const 7014) "a") (data (i32.const 7017) "a") (data (i32.const 7020) "a") (data (i32.const 7023) "a") (data (i32.const 7026) "a") (data (i32.const 7029) "a") (data (i32.const 7032) "a") (data (i32.const 7035) "a") (data (i32.const 7038) "a") (data (i32.const 7041) "a") (data (i32.const 7044) "a") (data (i32.const 7047) "a") (data (i32.const 7050) "a") (data (i32.const 7053) "a") (data (i32.const 7056) "a") (data (i32.const 7059) "a") (data (i32.const 7062) "a") (data (i32.const 7065) "a") (data (i32.const 7068) "a") (data (i32.const 7071) "a") (data (i32.const 7074) "a") (data (i32.const 7077) "a") (data (i32.const 7080) "a") (data (i32.const 7083) "a") (data (i32.const 7086) "a") (data (i32.const 7089) "a") (data (i32.const 7092) "a") (data (i32.const 7095) "a") (data (i32.const 7098) "a") (data (i32.const 7101) "a") (data (i32.const 7104) "a") (data (i32.const 7107) "a") (data (i32.const 7110) "a") (data (i32.const 7113) "a") (data (i32.const 7116) "a") (data (i32.const 7119) "a") (data (i32.const 7122) "a") (data (i32.const 7125) "a") (data (i32.const 7128) "a") (data (i32.const 7131) "a") (data (i32.const 7134) "a") (data (i32.const 7137) "a") (data (i32.const 7140) "a") (data (i32.const 7143) "a") (data (i32.const 7146) "a") (data (i32.const 7149) "a") (data (i32.const 7152) "a") (data (i32.const 7155) "a") (data (i32.const 7158) "a") (data (i32.const 7161) "a") (data (i32.const 7164) "a") (data (i32.const 7167) "a") (data (i32.const 7170) "a") (data (i32.const 7173) "a") (data (i32.const 7176) "a") (data (i32.const 7179) "a") (data (i32.const 7182) "a") (data (i32.const 7185) "a") (data (i32.const 7188) "a") (data (i32.const 7191) "a") (data (i32.const 7194) "a") (data (i32.const 7197) "a") (data (i32.const 7200) "a") (data (i32.const 7203) "a") (data (i32.const 7206) "a") (data (i32.const 7209) "a") (data (i32.const 7212) "a") (data (i32.const 7215) "a") (data (i32.const 7218) "a") (data (i32.const 7221) "a") (data (i32.const 7224) "a") (data (i32.const 7227) "a") (data (i32.const 7230) "a") (data (i32.const 7233) "a") (data (i32.const 7236) "a") (data (i32.const 7239) "a") (data (i32.const 7242) "a") (data (i32.const 7245) "a") (data (i32.const 7248) "a") (data (i32.const 7251) "a") (data (i32.const 7254) "a") (data (i32.const 7257) "a") (data (i32.const 7260) "a") (data (i32.const 7263) "a") (data (i32.const 7266) "a") (data (i32.const 7269) "a") (data (i32.const 7272) "a") (data (i32.const 7275) "a") (data (i32.const 7278) "a") (data (i32.const 7281) "a") (data (i32.const 7284) "a") (data (i32.const 7287) "a") (data (i32.const 7290) "a") (data (i32.const 7293) "a") (data (i32.const 7296) "a") (data (i32.const 7299) "a") (data (i32.const 7302) "a") (data (i32.const 7305) "a") (data (i32.const 7308) "a") (data (i32.const 7311) "a") (data (i32.const 7314) "a") (data (i32.const 7317) "a") (data (i32.const 7320) "a") (data (i32.const 7323) "a") (data (i32.const 7326) "a") (data (i32.const 7329) "a") (data (i32.const 7332) "a") (data (i32.const 7335) "a") (data (i32.const 7338) "a") (data (i32.const 7341) "a") (data (i32.const 7344) "a") (data (i32.const 7347) "a") (data (i32.const 7350) "a") (data (i32.const 7353) "a") (data (i32.const 7356) "a") (data (i32.const 7359) "a") (data (i32.const 7362) "a") (data (i32.const 7365) "a") (data (i32.const 7368) "a") (data (i32.const 7371) "a") (data (i32.const 7374) "a") (data (i32.const 7377) "a") (data (i32.const 7380) "a") (data (i32.const 7383) "a") (data (i32.const 7386) "a") (data (i32.const 7389) "a") (data (i32.const 7392) "a") (data (i32.const 7395) "a") (data (i32.const 7398) "a") (data (i32.const 7401) "a") (data (i32.const 7404) "a") (data (i32.const 7407) "a") (data (i32.const 7410) "a") (data (i32.const 7413) "a") (data (i32.const 7416) "a") (data (i32.const 7419) "a") (data (i32.const 7422) "a") (data (i32.const 7425) "a") (data (i32.const 7428) "a") (data (i32.const 7431) "a") (data (i32.const 7434) "a") (data (i32.const 7437) "a") (data (i32.const 7440) "a") (data (i32.const 7443) "a") (data (i32.const 7446) "a") (data (i32.const 7449) "a") (data (i32.const 7452) "a") (data (i32.const 7455) "a") (data (i32.const 7458) "a") (data (i32.const 7461) "a") (data (i32.const 7464) "a") (data (i32.const 7467) "a") (data (i32.const 7470) "a") (data (i32.const 7473) "a") (data (i32.const 7476) "a") (data (i32.const 7479) "a") (data (i32.const 7482) "a") (data (i32.const 7485) "a") (data (i32.const 7488) "a") (data (i32.const 7491) "a") (data (i32.const 7494) "a") (data (i32.const 7497) "a") (data (i32.const 7500) "a") (data (i32.const 7503) "a") (data (i32.const 7506) "a") (data (i32.const 7509) "a") (data (i32.const 7512) "a") (data (i32.const 7515) "a") (data (i32.const 7518) "a") (data (i32.const 7521) "a") (data (i32.const 7524) "a") (data (i32.const 7527) "a") (data (i32.const 7530) "a") (data (i32.const 7533) "a") (data (i32.const 7536) "a") (data (i32.const 7539) "a") (data (i32.const 7542) "a") (data (i32.const 7545) "a") (data (i32.const 7548) "a") (data (i32.const 7551) "a") (data (i32.const 7554) "a") (data (i32.const 7557) "a") (data (i32.const 7560) "a") (data (i32.const 7563) "a") (data (i32.const 7566) "a") (data (i32.const 7569) "a") (data (i32.const 7572) "a") (data (i32.const 7575) "a") (data (i32.const 7578) "a") (data (i32.const 7581) "a") (data (i32.const 7584) "a") (data (i32.const 7587) "a") (data (i32.const 7590) "a") (data (i32.const 7593) "a") (data (i32.const 7596) "a") (data (i32.const 7599) "a") (data (i32.const 7602) "a") (data (i32.const 7605) "a") (data (i32.const 7608) "a") (data (i32.const 7611) "a") (data (i32.const 7614) "a") (data (i32.const 7617) "a") (data (i32.const 7620) "a") (data (i32.const 7623) "a") (data (i32.const 7626) "a") (data (i32.const 7629) "a") (data (i32.const 7632) "a") (data (i32.const 7635) "a") (data (i32.const 7638) "a") (data (i32.const 7641) "a") (data (i32.const 7644) "a") (data (i32.const 7647) "a") (data (i32.const 7650) "a") (data (i32.const 7653) "a") (data (i32.const 7656) "a") (data (i32.const 7659) "a") (data (i32.const 7662) "a") (data (i32.const 7665) "a") (data (i32.const 7668) "a") (data (i32.const 7671) "a") (data (i32.const 7674) "a") (data (i32.const 7677) "a") (data (i32.const 7680) "a") (data (i32.const 7683) "a") (data (i32.const 7686) "a") (data (i32.const 7689) "a") (data (i32.const 7692) "a") (data (i32.const 7695) "a") (data (i32.const 7698) "a") (data (i32.const 7701) "a") (data (i32.const 7704) "a") (data (i32.const 7707) "a") (data (i32.const 7710) "a") (data (i32.const 7713) "a") (data (i32.const 7716) "a") (data (i32.const 7719) "a") (data (i32.const 7722) "a") (data (i32.const 7725) "a") (data (i32.const 7728) "a") (data (i32.const 7731) "a") (data (i32.const 7734) "a") (data (i32.const 7737) "a") (data (i32.const 7740) "a") (data (i32.const 7743) "a") (data (i32.const 7746) "a") (data (i32.const 7749) "a") (data (i32.const 7752) "a") (data (i32.const 7755) "a") (data (i32.const 7758) "a") (data (i32.const 7761) "a") (data (i32.const 7764) "a") (data (i32.const 7767) "a") (data (i32.const 7770) "a") (data (i32.const 7773) "a") (data (i32.const 7776) "a") (data (i32.const 7779) "a") (data (i32.const 7782) "a") (data (i32.const 7785) "a") (data (i32.const 7788) "a") (data (i32.const 7791) "a") (data (i32.const 7794) "a") (data (i32.const 7797) "a") (data (i32.const 7800) "a") (data (i32.const 7803) "a") (data (i32.const 7806) "a") (data (i32.const 7809) "a") (data (i32.const 7812) "a") (data (i32.const 7815) "a") (data (i32.const 7818) "a") (data (i32.const 7821) "a") (data (i32.const 7824) "a") (data (i32.const 7827) "a") (data (i32.const 7830) "a") (data (i32.const 7833) "a") (data (i32.const 7836) "a") (data (i32.const 7839) "a") (data (i32.const 7842) "a") (data (i32.const 7845) "a") (data (i32.const 7848) "a") (data (i32.const 7851) "a") (data (i32.const 7854) "a") (data (i32.const 7857) "a") (data (i32.const 7860) "a") (data (i32.const 7863) "a") (data (i32.const 7866) "a") (data (i32.const 7869) "a") (data (i32.const 7872) "a") (data (i32.const 7875) "a") (data (i32.const 7878) "a") (data (i32.const 7881) "a") (data (i32.const 7884) "a") (data (i32.const 7887) "a") (data (i32.const 7890) "a") (data (i32.const 7893) "a") (data (i32.const 7896) "a") (data (i32.const 7899) "a") (data (i32.const 7902) "a") (data (i32.const 7905) "a") (data (i32.const 7908) "a") (data (i32.const 7911) "a") (data (i32.const 7914) "a") (data (i32.const 7917) "a") (data (i32.const 7920) "a") (data (i32.const 7923) "a") (data (i32.const 7926) "a") (data (i32.const 7929) "a") (data (i32.const 7932) "a") (data (i32.const 7935) "a") (data (i32.const 7938) "a") (data (i32.const 7941) "a") (data (i32.const 7944) "a") (data (i32.const 7947) "a") (data (i32.const 7950) "a") (data (i32.const 7953) "a") (data (i32.const 7956) "a") (data (i32.const 7959) "a") (data (i32.const 7962) "a") (data (i32.const 7965) "a") (data (i32.const 7968) "a") (data (i32.const 7971) "a") (data (i32.const 7974) "a") (data (i32.const 7977) "a") (data (i32.const 7980) "a") (data (i32.const 7983) "a") (data (i32.const 7986) "a") (data (i32.const 7989) "a") (data (i32.const 7992) "a") (data (i32.const 7995) "a") (data (i32.const 7998) "a") (data (i32.const 8001) "a") (data (i32.const 8004) "a") (data (i32.const 8007) "a") (data (i32.const 8010) "a") (data (i32.const 8013) "a") (data (i32.const 8016) "a") (data (i32.const 8019) "a") (data (i32.const 8022) "a") (data (i32.const 8025) "a") (data (i32.const 8028) "a") (data (i32.const 8031) "a") (data (i32.const 8034) "a") (data (i32.const 8037) "a") (data (i32.const 8040) "a") (data (i32.const 8043) "a") (data (i32.const 8046) "a") (data (i32.const 8049) "a") (data (i32.const 8052) "a") (data (i32.const 8055) "a") (data (i32.const 8058) "a") (data (i32.const 8061) "a") (data (i32.const 8064) "a") (data (i32.const 8067) "a") (data (i32.const 8070) "a") (data (i32.const 8073) "a") (data (i32.const 8076) "a") (data (i32.const 8079) "a") (data (i32.const 8082) "a") (data (i32.const 8085) "a") (data (i32.const 8088) "a") (data (i32.const 8091) "a") (data (i32.const 8094) "a") (data (i32.const 8097) "a") (data (i32.const 8100) "a") (data (i32.const 8103) "a") (data (i32.const 8106) "a") (data (i32.const 8109) "a") (data (i32.const 8112) "a") (data (i32.const 8115) "a") (data (i32.const 8118) "a") (data (i32.const 8121) "a") (data (i32.const 8124) "a") (data (i32.const 8127) "a") (data (i32.const 8130) "a") (data (i32.const 8133) "a") (data (i32.const 8136) "a") (data (i32.const 8139) "a") (data (i32.const 8142) "a") (data (i32.const 8145) "a") (data (i32.const 8148) "a") (data (i32.const 8151) "a") (data (i32.const 8154) "a") (data (i32.const 8157) "a") (data (i32.const 8160) "a") (data (i32.const 8163) "a") (data (i32.const 8166) "a") (data (i32.const 8169) "a") (data (i32.const 8172) "a") (data (i32.const 8175) "a") (data (i32.const 8178) "a") (data (i32.const 8181) "a") (data (i32.const 8184) "a") (data (i32.const 8187) "a") (data (i32.const 8190) "a") (data (i32.const 8193) "a") (data (i32.const 8196) "a") (data (i32.const 8199) "a") (data (i32.const 8202) "a") (data (i32.const 8205) "a") (data (i32.const 8208) "a") (data (i32.const 8211) "a") (data (i32.const 8214) "a") (data (i32.const 8217) "a") (data (i32.const 8220) "a") (data (i32.const 8223) "a") (data (i32.const 8226) "a") (data (i32.const 8229) "a") (data (i32.const 8232) "a") (data (i32.const 8235) "a") (data (i32.const 8238) "a") (data (i32.const 8241) "a") (data (i32.const 8244) "a") (data (i32.const 8247) "a") (data (i32.const 8250) "a") (data (i32.const 8253) "a") (data (i32.const 8256) "a") (data (i32.const 8259) "a") (data (i32.const 8262) "a") (data (i32.const 8265) "a") (data (i32.const 8268) "a") (data (i32.const 8271) "a") (data (i32.const 8274) "a") (data (i32.const 8277) "a") (data (i32.const 8280) "a") (data (i32.const 8283) "a") (data (i32.const 8286) "a") (data (i32.const 8289) "a") (data (i32.const 8292) "a") (data (i32.const 8295) "a") (data (i32.const 8298) "a") (data (i32.const 8301) "a") (data (i32.const 8304) "a") (data (i32.const 8307) "a") (data (i32.const 8310) "a") (data (i32.const 8313) "a") (data (i32.const 8316) "a") (data (i32.const 8319) "a") (data (i32.const 8322) "a") (data (i32.const 8325) "a") (data (i32.const 8328) "a") (data (i32.const 8331) "a") (data (i32.const 8334) "a") (data (i32.const 8337) "a") (data (i32.const 8340) "a") (data (i32.const 8343) "a") (data (i32.const 8346) "a") (data (i32.const 8349) "a") (data (i32.const 8352) "a") (data (i32.const 8355) "a") (data (i32.const 8358) "a") (data (i32.const 8361) "a") (data (i32.const 8364) "a") (data (i32.const 8367) "a") (data (i32.const 8370) "a") (data (i32.const 8373) "a") (data (i32.const 8376) "a") (data (i32.const 8379) "a") (data (i32.const 8382) "a") (data (i32.const 8385) "a") (data (i32.const 8388) "a") (data (i32.const 8391) "a") (data (i32.const 8394) "a") (data (i32.const 8397) "a") (data (i32.const 8400) "a") (data (i32.const 8403) "a") (data (i32.const 8406) "a") (data (i32.const 8409) "a") (data (i32.const 8412) "a") (data (i32.const 8415) "a") (data (i32.const 8418) "a") (data (i32.const 8421) "a") (data (i32.const 8424) "a") (data (i32.const 8427) "a") (data (i32.const 8430) "a") (data (i32.const 8433) "a") (data (i32.const 8436) "a") (data (i32.const 8439) "a") (data (i32.const 8442) "a") (data (i32.const 8445) "a") (data (i32.const 8448) "a") (data (i32.const 8451) "a") (data (i32.const 8454) "a") (data (i32.const 8457) "a") (data (i32.const 8460) "a") (data (i32.const 8463) "a") (data (i32.const 8466) "a") (data (i32.const 8469) "a") (data (i32.const 8472) "a") (data (i32.const 8475) "a") (data (i32.const 8478) "a") (data (i32.const 8481) "a") (data (i32.const 8484) "a") (data (i32.const 8487) "a") (data (i32.const 8490) "a") (data (i32.const 8493) "a") (data (i32.const 8496) "a") (data (i32.const 8499) "a") (data (i32.const 8502) "a") (data (i32.const 8505) "a") (data (i32.const 8508) "a") (data (i32.const 8511) "a") (data (i32.const 8514) "a") (data (i32.const 8517) "a") (data (i32.const 8520) "a") (data (i32.const 8523) "a") (data (i32.const 8526) "a") (data (i32.const 8529) "a") (data (i32.const 8532) "a") (data (i32.const 8535) "a") (data (i32.const 8538) "a") (data (i32.const 8541) "a") (data (i32.const 8544) "a") (data (i32.const 8547) "a") (data (i32.const 8550) "a") (data (i32.const 8553) "a") (data (i32.const 8556) "a") (data (i32.const 8559) "a") (data (i32.const 8562) "a") (data (i32.const 8565) "a") (data (i32.const 8568) "a") (data (i32.const 8571) "a") (data (i32.const 8574) "a") (data (i32.const 8577) "a") (data (i32.const 8580) "a") (data (i32.const 8583) "a") (data (i32.const 8586) "a") (data (i32.const 8589) "a") (data (i32.const 8592) "a") (data (i32.const 8595) "a") (data (i32.const 8598) "a") (data (i32.const 8601) "a") (data (i32.const 8604) "a") (data (i32.const 8607) "a") (data (i32.const 8610) "a") (data (i32.const 8613) "a") (data (i32.const 8616) "a") (data (i32.const 8619) "a") (data (i32.const 8622) "a") (data (i32.const 8625) "a") (data (i32.const 8628) "a") (data (i32.const 8631) "a") (data (i32.const 8634) "a") (data (i32.const 8637) "a") (data (i32.const 8640) "a") (data (i32.const 8643) "a") (data (i32.const 8646) "a") (data (i32.const 8649) "a") (data (i32.const 8652) "a") (data (i32.const 8655) "a") (data (i32.const 8658) "a") (data (i32.const 8661) "a") (data (i32.const 8664) "a") (data (i32.const 8667) "a") (data (i32.const 8670) "a") (data (i32.const 8673) "a") (data (i32.const 8676) "a") (data (i32.const 8679) "a") (data (i32.const 8682) "a") (data (i32.const 8685) "a") (data (i32.const 8688) "a") (data (i32.const 8691) "a") (data (i32.const 8694) "a") (data (i32.const 8697) "a") (data (i32.const 8700) "a") (data (i32.const 8703) "a") (data (i32.const 8706) "a") (data (i32.const 8709) "a") (data (i32.const 8712) "a") (data (i32.const 8715) "a") (data (i32.const 8718) "a") (data (i32.const 8721) "a") (data (i32.const 8724) "a") (data (i32.const 8727) "a") (data (i32.const 8730) "a") (data (i32.const 8733) "a") (data (i32.const 8736) "a") (data (i32.const 8739) "a") (data (i32.const 8742) "a") (data (i32.const 8745) "a") (data (i32.const 8748) "a") (data (i32.const 8751) "a") (data (i32.const 8754) "a") (data (i32.const 8757) "a") (data (i32.const 8760) "a") (data (i32.const 8763) "a") (data (i32.const 8766) "a") (data (i32.const 8769) "a") (data (i32.const 8772) "a") (data (i32.const 8775) "a") (data (i32.const 8778) "a") (data (i32.const 8781) "a") (data (i32.const 8784) "a") (data (i32.const 8787) "a") (data (i32.const 8790) "a") (data (i32.const 8793) "a") (data (i32.const 8796) "a") (data (i32.const 8799) "a") (data (i32.const 8802) "a") (data (i32.const 8805) "a") (data (i32.const 8808) "a") (data (i32.const 8811) "a") (data (i32.const 8814) "a") (data (i32.const 8817) "a") (data (i32.const 8820) "a") (data (i32.const 8823) "a") (data (i32.const 8826) "a") (data (i32.const 8829) "a") (data (i32.const 8832) "a") (data (i32.const 8835) "a") (data (i32.const 8838) "a") (data (i32.const 8841) "a") (data (i32.const 8844) "a") (data (i32.const 8847) "a") (data (i32.const 8850) "a") (data (i32.const 8853) "a") (data (i32.const 8856) "a") (data (i32.const 8859) "a") (data (i32.const 8862) "a") (data (i32.const 8865) "a") (data (i32.const 8868) "a") (data (i32.const 8871) "a") (data (i32.const 8874) "a") (data (i32.const 8877) "a") (data (i32.const 8880) "a") (data (i32.const 8883) "a") (data (i32.const 8886) "a") (data (i32.const 8889) "a") (data (i32.const 8892) "a") (data (i32.const 8895) "a") (data (i32.const 8898) "a") (data (i32.const 8901) "a") (data (i32.const 8904) "a") (data (i32.const 8907) "a") (data (i32.const 8910) "a") (data (i32.const 8913) "a") (data (i32.const 8916) "a") (data (i32.const 8919) "a") (data (i32.const 8922) "a") (data (i32.const 8925) "a") (data (i32.const 8928) "a") (data (i32.const 8931) "a") (data (i32.const 8934) "a") (data (i32.const 8937) "a") (data (i32.const 8940) "a") (data (i32.const 8943) "a") (data (i32.const 8946) "a") (data (i32.const 8949) "a") (data (i32.const 8952) "a") (data (i32.const 8955) "a") (data (i32.const 8958) "a") (data (i32.const 8961) "a") (data (i32.const 8964) "a") (data (i32.const 8967) "a") (data (i32.const 8970) "a") (data (i32.const 8973) "a") (data (i32.const 8976) "a") (data (i32.const 8979) "a") (data (i32.const 8982) "a") (data (i32.const 8985) "a") (data (i32.const 8988) "a") (data (i32.const 8991) "a") (data (i32.const 8994) "a") (data (i32.const 8997) "a") (data (i32.const 9000) "a") (data (i32.const 9003) "a") (data (i32.const 9006) "a") (data (i32.const 9009) "a") (data (i32.const 9012) "a") (data (i32.const 9015) "a") (data (i32.const 9018) "a") (data (i32.const 9021) "a") (data (i32.const 9024) "a") (data (i32.const 9027) "a") (data (i32.const 9030) "a") (data (i32.const 9033) "a") (data (i32.const 9036) "a") (data (i32.const 9039) "a") (data (i32.const 9042) "a") (data (i32.const 9045) "a") (data (i32.const 9048) "a") (data (i32.const 9051) "a") (data (i32.const 9054) "a") (data (i32.const 9057) "a") (data (i32.const 9060) "a") (data (i32.const 9063) "a") (data (i32.const 9066) "a") (data (i32.const 9069) "a") (data (i32.const 9072) "a") (data (i32.const 9075) "a") (data (i32.const 9078) "a") (data (i32.const 9081) "a") (data (i32.const 9084) "a") (data (i32.const 9087) "a") (data (i32.const 9090) "a") (data (i32.const 9093) "a") (data (i32.const 9096) "a") (data (i32.const 9099) "a") (data (i32.const 9102) "a") (data (i32.const 9105) "a") (data (i32.const 9108) "a") (data (i32.const 9111) "a") (data (i32.const 9114) "a") (data (i32.const 9117) "a") (data (i32.const 9120) "a") (data (i32.const 9123) "a") (data (i32.const 9126) "a") (data (i32.const 9129) "a") (data (i32.const 9132) "a") (data (i32.const 9135) "a") (data (i32.const 9138) "a") (data (i32.const 9141) "a") (data (i32.const 9144) "a") (data (i32.const 9147) "a") (data (i32.const 9150) "a") (data (i32.const 9153) "a") (data (i32.const 9156) "a") (data (i32.const 9159) "a") (data (i32.const 9162) "a") (data (i32.const 9165) "a") (data (i32.const 9168) "a") (data (i32.const 9171) "a") (data (i32.const 9174) "a") (data (i32.const 9177) "a") (data (i32.const 9180) "a") (data (i32.const 9183) "a") (data (i32.const 9186) "a") (data (i32.const 9189) "a") (data (i32.const 9192) "a") (data (i32.const 9195) "a") (data (i32.const 9198) "a") (data (i32.const 9201) "a") (data (i32.const 9204) "a") (data (i32.const 9207) "a") (data (i32.const 9210) "a") (data (i32.const 9213) "a") (data (i32.const 9216) "a") (data (i32.const 9219) "a") (data (i32.const 9222) "a") (data (i32.const 9225) "a") (data (i32.const 9228) "a") (data (i32.const 9231) "a") (data (i32.const 9234) "a") (data (i32.const 9237) "a") (data (i32.const 9240) "a") (data (i32.const 9243) "a") (data (i32.const 9246) "a") (data (i32.const 9249) "a") (data (i32.const 9252) "a") (data (i32.const 9255) "a") (data (i32.const 9258) "a") (data (i32.const 9261) "a") (data (i32.const 9264) "a") (data (i32.const 9267) "a") (data (i32.const 9270) "a") (data (i32.const 9273) "a") (data (i32.const 9276) "a") (data (i32.const 9279) "a") (data (i32.const 9282) "a") (data (i32.const 9285) "a") (data (i32.const 9288) "a") (data (i32.const 9291) "a") (data (i32.const 9294) "a") (data (i32.const 9297) "a") (data (i32.const 9300) "a") (data (i32.const 9303) "a") (data (i32.const 9306) "a") (data (i32.const 9309) "a") (data (i32.const 9312) "a") (data (i32.const 9315) "a") (data (i32.const 9318) "a") (data (i32.const 9321) "a") (data (i32.const 9324) "a") (data (i32.const 9327) "a") (data (i32.const 9330) "a") (data (i32.const 9333) "a") (data (i32.const 9336) "a") (data (i32.const 9339) "a") (data (i32.const 9342) "a") (data (i32.const 9345) "a") (data (i32.const 9348) "a") (data (i32.const 9351) "a") (data (i32.const 9354) "a") (data (i32.const 9357) "a") (data (i32.const 9360) "a") (data (i32.const 9363) "a") (data (i32.const 9366) "a") (data (i32.const 9369) "a") (data (i32.const 9372) "a") (data (i32.const 9375) "a") (data (i32.const 9378) "a") (data (i32.const 9381) "a") (data (i32.const 9384) "a") (data (i32.const 9387) "a") (data (i32.const 9390) "a") (data (i32.const 9393) "a") (data (i32.const 9396) "a") (data (i32.const 9399) "a") (data (i32.const 9402) "a") (data (i32.const 9405) "a") (data (i32.const 9408) "a") (data (i32.const 9411) "a") (data (i32.const 9414) "a") (data (i32.const 9417) "a") (data (i32.const 9420) "a") (data (i32.const 9423) "a") (data (i32.const 9426) "a") (data (i32.const 9429) "a") (data (i32.const 9432) "a") (data (i32.const 9435) "a") (data (i32.const 9438) "a") (data (i32.const 9441) "a") (data (i32.const 9444) "a") (data (i32.const 9447) "a") (data (i32.const 9450) "a") (data (i32.const 9453) "a") (data (i32.const 9456) "a") (data (i32.const 9459) "a") (data (i32.const 9462) "a") (data (i32.const 9465) "a") (data (i32.const 9468) "a") (data (i32.const 9471) "a") (data (i32.const 9474) "a") (data (i32.const 9477) "a") (data (i32.const 9480) "a") (data (i32.const 9483) "a") (data (i32.const 9486) "a") (data (i32.const 9489) "a") (data (i32.const 9492) "a") (data (i32.const 9495) "a") (data (i32.const 9498) "a") (data (i32.const 9501) "a") (data (i32.const 9504) "a") (data (i32.const 9507) "a") (data (i32.const 9510) "a") (data (i32.const 9513) "a") (data (i32.const 9516) "a") (data (i32.const 9519) "a") (data (i32.const 9522) "a") (data (i32.const 9525) "a") (data (i32.const 9528) "a") (data (i32.const 9531) "a") (data (i32.const 9534) "a") (data (i32.const 9537) "a") (data (i32.const 9540) "a") (data (i32.const 9543) "a") (data (i32.const 9546) "a") (data (i32.const 9549) "a") (data (i32.const 9552) "a") (data (i32.const 9555) "a") (data (i32.const 9558) "a") (data (i32.const 9561) "a") (data (i32.const 9564) "a") (data (i32.const 9567) "a") (data (i32.const 9570) "a") (data (i32.const 9573) "a") (data (i32.const 9576) "a") (data (i32.const 9579) "a") (data (i32.const 9582) "a") (data (i32.const 9585) "a") (data (i32.const 9588) "a") (data (i32.const 9591) "a") (data (i32.const 9594) "a") (data (i32.const 9597) "a") (data (i32.const 9600) "a") (data (i32.const 9603) "a") (data (i32.const 9606) "a") (data (i32.const 9609) "a") (data (i32.const 9612) "a") (data (i32.const 9615) "a") (data (i32.const 9618) "a") (data (i32.const 9621) "a") (data (i32.const 9624) "a") (data (i32.const 9627) "a") (data (i32.const 9630) "a") (data (i32.const 9633) "a") (data (i32.const 9636) "a") (data (i32.const 9639) "a") (data (i32.const 9642) "a") (data (i32.const 9645) "a") (data (i32.const 9648) "a") (data (i32.const 9651) "a") (data (i32.const 9654) "a") (data (i32.const 9657) "a") (data (i32.const 9660) "a") (data (i32.const 9663) "a") (data (i32.const 9666) "a") (data (i32.const 9669) "a") (data (i32.const 9672) "a") (data (i32.const 9675) "a") (data (i32.const 9678) "a") (data (i32.const 9681) "a") (data (i32.const 9684) "a") (data (i32.const 9687) "a") (data (i32.const 9690) "a") (data (i32.const 9693) "a") (data (i32.const 9696) "a") (data (i32.const 9699) "a") (data (i32.const 9702) "a") (data (i32.const 9705) "a") (data (i32.const 9708) "a") (data (i32.const 9711) "a") (data (i32.const 9714) "a") (data (i32.const 9717) "a") (data (i32.const 9720) "a") (data (i32.const 9723) "a") (data (i32.const 9726) "a") (data (i32.const 9729) "a") (data (i32.const 9732) "a") (data (i32.const 9735) "a") (data (i32.const 9738) "a") (data (i32.const 9741) "a") (data (i32.const 9744) "a") (data (i32.const 9747) "a") (data (i32.const 9750) "a") (data (i32.const 9753) "a") (data (i32.const 9756) "a") (data (i32.const 9759) "a") (data (i32.const 9762) "a") (data (i32.const 9765) "a") (data (i32.const 9768) "a") (data (i32.const 9771) "a") (data (i32.const 9774) "a") (data (i32.const 9777) "a") (data (i32.const 9780) "a") (data (i32.const 9783) "a") (data (i32.const 9786) "a") (data (i32.const 9789) "a") (data (i32.const 9792) "a") (data (i32.const 9795) "a") (data (i32.const 9798) "a") (data (i32.const 9801) "a") (data (i32.const 9804) "a") (data (i32.const 9807) "a") (data (i32.const 9810) "a") (data (i32.const 9813) "a") (data (i32.const 9816) "a") (data (i32.const 9819) "a") (data (i32.const 9822) "a") (data (i32.const 9825) "a") (data (i32.const 9828) "a") (data (i32.const 9831) "a") (data (i32.const 9834) "a") (data (i32.const 9837) "a") (data (i32.const 9840) "a") (data (i32.const 9843) "a") (data (i32.const 9846) "a") (data (i32.const 9849) "a") (data (i32.const 9852) "a") (data (i32.const 9855) "a") (data (i32.const 9858) "a") (data (i32.const 9861) "a") (data (i32.const 9864) "a") (data (i32.const 9867) "a") (data (i32.const 9870) "a") (data (i32.const 9873) "a") (data (i32.const 9876) "a") (data (i32.const 9879) "a") (data (i32.const 9882) "a") (data (i32.const 9885) "a") (data (i32.const 9888) "a") (data (i32.const 9891) "a") (data (i32.const 9894) "a") (data (i32.const 9897) "a") (data (i32.const 9900) "a") (data (i32.const 9903) "a") (data (i32.const 9906) "a") (data (i32.const 9909) "a") (data (i32.const 9912) "a") (data (i32.const 9915) "a") (data (i32.const 9918) "a") (data (i32.const 9921) "a") (data (i32.const 9924) "a") (data (i32.const 9927) "a") (data (i32.const 9930) "a") (data (i32.const 9933) "a") (data (i32.const 9936) "a") (data (i32.const 9939) "a") (data (i32.const 9942) "a") (data (i32.const 9945) "a") (data (i32.const 9948) "a") (data (i32.const 9951) "a") (data (i32.const 9954) "a") (data (i32.const 9957) "a") (data (i32.const 9960) "a") (data (i32.const 9963) "a") (data (i32.const 9966) "a") (data (i32.const 9969) "a") (data (i32.const 9972) "a") (data (i32.const 9975) "a") (data (i32.const 9978) "a") (data (i32.const 9981) "a") (data (i32.const 9984) "a") (data (i32.const 9987) "a") (data (i32.const 9990) "a") (data (i32.const 9993) "a") (data (i32.const 9996) "a") (data (i32.const 9999) "a") (data (i32.const 10002) "a") (data (i32.const 10005) "a") (data (i32.const 10008) "a") (data (i32.const 10011) "a") (data (i32.const 10014) "a") (data (i32.const 10017) "a") (data (i32.const 10020) "a") (data (i32.const 10023) "a") (data (i32.const 10026) "a") (data (i32.const 10029) "a") (data (i32.const 10032) "a") (data (i32.const 10035) "a") (data (i32.const 10038) "a") (data (i32.const 10041) "a") (data (i32.const 10044) "a") (data (i32.const 10047) "a") (data (i32.const 10050) "a") (data (i32.const 10053) "a") (data (i32.const 10056) "a") (data (i32.const 10059) "a") (data (i32.const 10062) "a") (data (i32.const 10065) "a") (data (i32.const 10068) "a") (data (i32.const 10071) "a") (data (i32.const 10074) "a") (data (i32.const 10077) "a") (data (i32.const 10080) "a") (data (i32.const 10083) "a") (data (i32.const 10086) "a") (data (i32.const 10089) "a") (data (i32.const 10092) "a") (data (i32.const 10095) "a") (data (i32.const 10098) "a") (data (i32.const 10101) "a") (data (i32.const 10104) "a") (data (i32.const 10107) "a") (data (i32.const 10110) "a") (data (i32.const 10113) "a") (data (i32.const 10116) "a") (data (i32.const 10119) "a") (data (i32.const 10122) "a") (data (i32.const 10125) "a") (data (i32.const 10128) "a") (data (i32.const 10131) "a") (data (i32.const 10134) "a") (data (i32.const 10137) "a") (data (i32.const 10140) "a") (data (i32.const 10143) "a") (data (i32.const 10146) "a") (data (i32.const 10149) "a") (data (i32.const 10152) "a") (data (i32.const 10155) "a") (data (i32.const 10158) "a") (data (i32.const 10161) "a") (data (i32.const 10164) "a") (data (i32.const 10167) "a") (data (i32.const 10170) "a") (data (i32.const 10173) "a") (data (i32.const 10176) "a") (data (i32.const 10179) "a") (data (i32.const 10182) "a") (data (i32.const 10185) "a") (data (i32.const 10188) "a") (data (i32.const 10191) "a") (data (i32.const 10194) "a") (data (i32.const 10197) "a") (data (i32.const 10200) "a") (data (i32.const 10203) "a") (data (i32.const 10206) "a") (data (i32.const 10209) "a") (data (i32.const 10212) "a") (data (i32.const 10215) "a") (data (i32.const 10218) "a") (data (i32.const 10221) "a") (data (i32.const 10224) "a") (data (i32.const 10227) "a") (data (i32.const 10230) "a") (data (i32.const 10233) "a") (data (i32.const 10236) "a") (data (i32.const 10239) "a") (data (i32.const 10242) "a") (data (i32.const 10245) "a") (data (i32.const 10248) "a") (data (i32.const 10251) "a") (data (i32.const 10254) "a") (data (i32.const 10257) "a") (data (i32.const 10260) "a") (data (i32.const 10263) "a") (data (i32.const 10266) "a") (data (i32.const 10269) "a") (data (i32.const 10272) "a") (data (i32.const 10275) "a") (data (i32.const 10278) "a") (data (i32.const 10281) "a") (data (i32.const 10284) "a") (data (i32.const 10287) "a") (data (i32.const 10290) "a") (data (i32.const 10293) "a") (data (i32.const 10296) "a") (data (i32.const 10299) "a") (data (i32.const 10302) "a") (data (i32.const 10305) "a") (data (i32.const 10308) "a") (data (i32.const 10311) "a") (data (i32.const 10314) "a") (data (i32.const 10317) "a") (data (i32.const 10320) "a") (data (i32.const 10323) "a") (data (i32.const 10326) "a") (data (i32.const 10329) "a") (data (i32.const 10332) "a") (data (i32.const 10335) "a") (data (i32.const 10338) "a") (data (i32.const 10341) "a") (data (i32.const 10344) "a") (data (i32.const 10347) "a") (data (i32.const 10350) "a") (data (i32.const 10353) "a") (data (i32.const 10356) "a") (data (i32.const 10359) "a") (data (i32.const 10362) "a") (data (i32.const 10365) "a") (data (i32.const 10368) "a") (data (i32.const 10371) "a") (data (i32.const 10374) "a") (data (i32.const 10377) "a") (data (i32.const 10380) "a") (data (i32.const 10383) "a") (data (i32.const 10386) "a") (data (i32.const 10389) "a") (data (i32.const 10392) "a") (data (i32.const 10395) "a") (data (i32.const 10398) "a") (data (i32.const 10401) "a") (data (i32.const 10404) "a") (data (i32.const 10407) "a") (data (i32.const 10410) "a") (data (i32.const 10413) "a") (data (i32.const 10416) "a") (data (i32.const 10419) "a") (data (i32.const 10422) "a") (data (i32.const 10425) "a") (data (i32.const 10428) "a") (data (i32.const 10431) "a") (data (i32.const 10434) "a") (data (i32.const 10437) "a") (data (i32.const 10440) "a") (data (i32.const 10443) "a") (data (i32.const 10446) "a") (data (i32.const 10449) "a") (data (i32.const 10452) "a") (data (i32.const 10455) "a") (data (i32.const 10458) "a") (data (i32.const 10461) "a") (data (i32.const 10464) "a") (data (i32.const 10467) "a") (data (i32.const 10470) "a") (data (i32.const 10473) "a") (data (i32.const 10476) "a") (data (i32.const 10479) "a") (data (i32.const 10482) "a") (data (i32.const 10485) "a") (data (i32.const 10488) "a") (data (i32.const 10491) "a") (data (i32.const 10494) "a") (data (i32.const 10497) "a") (data (i32.const 10500) "a") (data (i32.const 10503) "a") (data (i32.const 10506) "a") (data (i32.const 10509) "a") (data (i32.const 10512) "a") (data (i32.const 10515) "a") (data (i32.const 10518) "a") (data (i32.const 10521) "a") (data (i32.const 10524) "a") (data (i32.const 10527) "a") (data (i32.const 10530) "a") (data (i32.const 10533) "a") (data (i32.const 10536) "a") (data (i32.const 10539) "a") (data (i32.const 10542) "a") (data (i32.const 10545) "a") (data (i32.const 10548) "a") (data (i32.const 10551) "a") (data (i32.const 10554) "a") (data (i32.const 10557) "a") (data (i32.const 10560) "a") (data (i32.const 10563) "a") (data (i32.const 10566) "a") (data (i32.const 10569) "a") (data (i32.const 10572) "a") (data (i32.const 10575) "a") (data (i32.const 10578) "a") (data (i32.const 10581) "a") (data (i32.const 10584) "a") (data (i32.const 10587) "a") (data (i32.const 10590) "a") (data (i32.const 10593) "a") (data (i32.const 10596) "a") (data (i32.const 10599) "a") (data (i32.const 10602) "a") (data (i32.const 10605) "a") (data (i32.const 10608) "a") (data (i32.const 10611) "a") (data (i32.const 10614) "a") (data (i32.const 10617) "a") (data (i32.const 10620) "a") (data (i32.const 10623) "a") (data (i32.const 10626) "a") (data (i32.const 10629) "a") (data (i32.const 10632) "a") (data (i32.const 10635) "a") (data (i32.const 10638) "a") (data (i32.const 10641) "a") (data (i32.const 10644) "a") (data (i32.const 10647) "a") (data (i32.const 10650) "a") (data (i32.const 10653) "a") (data (i32.const 10656) "a") (data (i32.const 10659) "a") (data (i32.const 10662) "a") (data (i32.const 10665) "a") (data (i32.const 10668) "a") (data (i32.const 10671) "a") (data (i32.const 10674) "a") (data (i32.const 10677) "a") (data (i32.const 10680) "a") (data (i32.const 10683) "a") (data (i32.const 10686) "a") (data (i32.const 10689) "a") (data (i32.const 10692) "a") (data (i32.const 10695) "a") (data (i32.const 10698) "a") (data (i32.const 10701) "a") (data (i32.const 10704) "a") (data (i32.const 10707) "a") (data (i32.const 10710) "a") (data (i32.const 10713) "a") (data (i32.const 10716) "a") (data (i32.const 10719) "a") (data (i32.const 10722) "a") (data (i32.const 10725) "a") (data (i32.const 10728) "a") (data (i32.const 10731) "a") (data (i32.const 10734) "a") (data (i32.const 10737) "a") (data (i32.const 10740) "a") (data (i32.const 10743) "a") (data (i32.const 10746) "a") (data (i32.const 10749) "a") (data (i32.const 10752) "a") (data (i32.const 10755) "a") (data (i32.const 10758) "a") (data (i32.const 10761) "a") (data (i32.const 10764) "a") (data (i32.const 10767) "a") (data (i32.const 10770) "a") (data (i32.const 10773) "a") (data (i32.const 10776) "a") (data (i32.const 10779) "a") (data (i32.const 10782) "a") (data (i32.const 10785) "a") (data (i32.const 10788) "a") (data (i32.const 10791) "a") (data (i32.const 10794) "a") (data (i32.const 10797) "a") (data (i32.const 10800) "a") (data (i32.const 10803) "a") (data (i32.const 10806) "a") (data (i32.const 10809) "a") (data (i32.const 10812) "a") (data (i32.const 10815) "a") (data (i32.const 10818) "a") (data (i32.const 10821) "a") (data (i32.const 10824) "a") (data (i32.const 10827) "a") (data (i32.const 10830) "a") (data (i32.const 10833) "a") (data (i32.const 10836) "a") (data (i32.const 10839) "a") (data (i32.const 10842) "a") (data (i32.const 10845) "a") (data (i32.const 10848) "a") (data (i32.const 10851) "a") (data (i32.const 10854) "a") (data (i32.const 10857) "a") (data (i32.const 10860) "a") (data (i32.const 10863) "a") (data (i32.const 10866) "a") (data (i32.const 10869) "a") (data (i32.const 10872) "a") (data (i32.const 10875) "a") (data (i32.const 10878) "a") (data (i32.const 10881) "a") (data (i32.const 10884) "a") (data (i32.const 10887) "a") (data (i32.const 10890) "a") (data (i32.const 10893) "a") (data (i32.const 10896) "a") (data (i32.const 10899) "a") (data (i32.const 10902) "a") (data (i32.const 10905) "a") (data (i32.const 10908) "a") (data (i32.const 10911) "a") (data (i32.const 10914) "a") (data (i32.const 10917) "a") (data (i32.const 10920) "a") (data (i32.const 10923) "a") (data (i32.const 10926) "a") (data (i32.const 10929) "a") (data (i32.const 10932) "a") (data (i32.const 10935) "a") (data (i32.const 10938) "a") (data (i32.const 10941) "a") (data (i32.const 10944) "a") (data (i32.const 10947) "a") (data (i32.const 10950) "a") (data (i32.const 10953) "a") (data (i32.const 10956) "a") (data (i32.const 10959) "a") (data (i32.const 10962) "a") (data (i32.const 10965) "a") (data (i32.const 10968) "a") (data (i32.const 10971) "a") (data (i32.const 10974) "a") (data (i32.const 10977) "a") (data (i32.const 10980) "a") (data (i32.const 10983) "a") (data (i32.const 10986) "a") (data (i32.const 10989) "a") (data (i32.const 10992) "a") (data (i32.const 10995) "a") (data (i32.const 10998) "a") (data (i32.const 11001) "a") (data (i32.const 11004) "a") (data (i32.const 11007) "a") (data (i32.const 11010) "a") (data (i32.const 11013) "a") (data (i32.const 11016) "a") (data (i32.const 11019) "a") (data (i32.const 11022) "a") (data (i32.const 11025) "a") (data (i32.const 11028) "a") (data (i32.const 11031) "a") (data (i32.const 11034) "a") (data (i32.const 11037) "a") (data (i32.const 11040) "a") (data (i32.const 11043) "a") (data (i32.const 11046) "a") (data (i32.const 11049) "a") (data (i32.const 11052) "a") (data (i32.const 11055) "a") (data (i32.const 11058) "a") (data (i32.const 11061) "a") (data (i32.const 11064) "a") (data (i32.const 11067) "a") (data (i32.const 11070) "a") (data (i32.const 11073) "a") (data (i32.const 11076) "a") (data (i32.const 11079) "a") (data (i32.const 11082) "a") (data (i32.const 11085) "a") (data (i32.const 11088) "a") (data (i32.const 11091) "a") (data (i32.const 11094) "a") (data (i32.const 11097) "a") (data (i32.const 11100) "a") (data (i32.const 11103) "a") (data (i32.const 11106) "a") (data (i32.const 11109) "a") (data (i32.const 11112) "a") (data (i32.const 11115) "a") (data (i32.const 11118) "a") (data (i32.const 11121) "a") (data (i32.const 11124) "a") (data (i32.const 11127) "a") (data (i32.const 11130) "a") (data (i32.const 11133) "a") (data (i32.const 11136) "a") (data (i32.const 11139) "a") (data (i32.const 11142) "a") (data (i32.const 11145) "a") (data (i32.const 11148) "a") (data (i32.const 11151) "a") (data (i32.const 11154) "a") (data (i32.const 11157) "a") (data (i32.const 11160) "a") (data (i32.const 11163) "a") (data (i32.const 11166) "a") (data (i32.const 11169) "a") (data (i32.const 11172) "a") (data (i32.const 11175) "a") (data (i32.const 11178) "a") (data (i32.const 11181) "a") (data (i32.const 11184) "a") (data (i32.const 11187) "a") (data (i32.const 11190) "a") (data (i32.const 11193) "a") (data (i32.const 11196) "a") (data (i32.const 11199) "a") (data (i32.const 11202) "a") (data (i32.const 11205) "a") (data (i32.const 11208) "a") (data (i32.const 11211) "a") (data (i32.const 11214) "a") (data (i32.const 11217) "a") (data (i32.const 11220) "a") (data (i32.const 11223) "a") (data (i32.const 11226) "a") (data (i32.const 11229) "a") (data (i32.const 11232) "a") (data (i32.const 11235) "a") (data (i32.const 11238) "a") (data (i32.const 11241) "a") (data (i32.const 11244) "a") (data (i32.const 11247) "a") (data (i32.const 11250) "a") (data (i32.const 11253) "a") (data (i32.const 11256) "a") (data (i32.const 11259) "a") (data (i32.const 11262) "a") (data (i32.const 11265) "a") (data (i32.const 11268) "a") (data (i32.const 11271) "a") (data (i32.const 11274) "a") (data (i32.const 11277) "a") (data (i32.const 11280) "a") (data (i32.const 11283) "a") (data (i32.const 11286) "a") (data (i32.const 11289) "a") (data (i32.const 11292) "a") (data (i32.const 11295) "a") (data (i32.const 11298) "a") (data (i32.const 11301) "a") (data (i32.const 11304) "a") (data (i32.const 11307) "a") (data (i32.const 11310) "a") (data (i32.const 11313) "a") (data (i32.const 11316) "a") (data (i32.const 11319) "a") (data (i32.const 11322) "a") (data (i32.const 11325) "a") (data (i32.const 11328) "a") (data (i32.const 11331) "a") (data (i32.const 11334) "a") (data (i32.const 11337) "a") (data (i32.const 11340) "a") (data (i32.const 11343) "a") (data (i32.const 11346) "a") (data (i32.const 11349) "a") (data (i32.const 11352) "a") (data (i32.const 11355) "a") (data (i32.const 11358) "a") (data (i32.const 11361) "a") (data (i32.const 11364) "a") (data (i32.const 11367) "a") (data (i32.const 11370) "a") (data (i32.const 11373) "a") (data (i32.const 11376) "a") (data (i32.const 11379) "a") (data (i32.const 11382) "a") (data (i32.const 11385) "a") (data (i32.const 11388) "a") (data (i32.const 11391) "a") (data (i32.const 11394) "a") (data (i32.const 11397) "a") (data (i32.const 11400) "a") (data (i32.const 11403) "a") (data (i32.const 11406) "a") (data (i32.const 11409) "a") (data (i32.const 11412) "a") (data (i32.const 11415) "a") (data (i32.const 11418) "a") (data (i32.const 11421) "a") (data (i32.const 11424) "a") (data (i32.const 11427) "a") (data (i32.const 11430) "a") (data (i32.const 11433) "a") (data (i32.const 11436) "a") (data (i32.const 11439) "a") (data (i32.const 11442) "a") (data (i32.const 11445) "a") (data (i32.const 11448) "a") (data (i32.const 11451) "a") (data (i32.const 11454) "a") (data (i32.const 11457) "a") (data (i32.const 11460) "a") (data (i32.const 11463) "a") (data (i32.const 11466) "a") (data (i32.const 11469) "a") (data (i32.const 11472) "a") (data (i32.const 11475) "a") (data (i32.const 11478) "a") (data (i32.const 11481) "a") (data (i32.const 11484) "a") (data (i32.const 11487) "a") (data (i32.const 11490) "a") (data (i32.const 11493) "a") (data (i32.const 11496) "a") (data (i32.const 11499) "a") (data (i32.const 11502) "a") (data (i32.const 11505) "a") (data (i32.const 11508) "a") (data (i32.const 11511) "a") (data (i32.const 11514) "a") (data (i32.const 11517) "a") (data (i32.const 11520) "a") (data (i32.const 11523) "a") (data (i32.const 11526) "a") (data (i32.const 11529) "a") (data (i32.const 11532) "a") (data (i32.const 11535) "a") (data (i32.const 11538) "a") (data (i32.const 11541) "a") (data (i32.const 11544) "a") (data (i32.const 11547) "a") (data (i32.const 11550) "a") (data (i32.const 11553) "a") (data (i32.const 11556) "a") (data (i32.const 11559) "a") (data (i32.const 11562) "a") (data (i32.const 11565) "a") (data (i32.const 11568) "a") (data (i32.const 11571) "a") (data (i32.const 11574) "a") (data (i32.const 11577) "a") (data (i32.const 11580) "a") (data (i32.const 11583) "a") (data (i32.const 11586) "a") (data (i32.const 11589) "a") (data (i32.const 11592) "a") (data (i32.const 11595) "a") (data (i32.const 11598) "a") (data (i32.const 11601) "a") (data (i32.const 11604) "a") (data (i32.const 11607) "a") (data (i32.const 11610) "a") (data (i32.const 11613) "a") (data (i32.const 11616) "a") (data (i32.const 11619) "a") (data (i32.const 11622) "a") (data (i32.const 11625) "a") (data (i32.const 11628) "a") (data (i32.const 11631) "a") (data (i32.const 11634) "a") (data (i32.const 11637) "a") (data (i32.const 11640) "a") (data (i32.const 11643) "a") (data (i32.const 11646) "a") (data (i32.const 11649) "a") (data (i32.const 11652) "a") (data (i32.const 11655) "a") (data (i32.const 11658) "a") (data (i32.const 11661) "a") (data (i32.const 11664) "a") (data (i32.const 11667) "a") (data (i32.const 11670) "a") (data (i32.const 11673) "a") (data (i32.const 11676) "a") (data (i32.const 11679) "a") (data (i32.const 11682) "a") (data (i32.const 11685) "a") (data (i32.const 11688) "a") (data (i32.const 11691) "a") (data (i32.const 11694) "a") (data (i32.const 11697) "a") (data (i32.const 11700) "a") (data (i32.const 11703) "a") (data (i32.const 11706) "a") (data (i32.const 11709) "a") (data (i32.const 11712) "a") (data (i32.const 11715) "a") (data (i32.const 11718) "a") (data (i32.const 11721) "a") (data (i32.const 11724) "a") (data (i32.const 11727) "a") (data (i32.const 11730) "a") (data (i32.const 11733) "a") (data (i32.const 11736) "a") (data (i32.const 11739) "a") (data (i32.const 11742) "a") (data (i32.const 11745) "a") (data (i32.const 11748) "a") (data (i32.const 11751) "a") (data (i32.const 11754) "a") (data (i32.const 11757) "a") (data (i32.const 11760) "a") (data (i32.const 11763) "a") (data (i32.const 11766) "a") (data (i32.const 11769) "a") (data (i32.const 11772) "a") (data (i32.const 11775) "a") (data (i32.const 11778) "a") (data (i32.const 11781) "a") (data (i32.const 11784) "a") (data (i32.const 11787) "a") (data (i32.const 11790) "a") (data (i32.const 11793) "a") (data (i32.const 11796) "a") (data (i32.const 11799) "a") (data (i32.const 11802) "a") (data (i32.const 11805) "a") (data (i32.const 11808) "a") (data (i32.const 11811) "a") (data (i32.const 11814) "a") (data (i32.const 11817) "a") (data (i32.const 11820) "a") (data (i32.const 11823) "a") (data (i32.const 11826) "a") (data (i32.const 11829) "a") (data (i32.const 11832) "a") (data (i32.const 11835) "a") (data (i32.const 11838) "a") (data (i32.const 11841) "a") (data (i32.const 11844) "a") (data (i32.const 11847) "a") (data (i32.const 11850) "a") (data (i32.const 11853) "a") (data (i32.const 11856) "a") (data (i32.const 11859) "a") (data (i32.const 11862) "a") (data (i32.const 11865) "a") (data (i32.const 11868) "a") (data (i32.const 11871) "a") (data (i32.const 11874) "a") (data (i32.const 11877) "a") (data (i32.const 11880) "a") (data (i32.const 11883) "a") (data (i32.const 11886) "a") (data (i32.const 11889) "a") (data (i32.const 11892) "a") (data (i32.const 11895) "a") (data (i32.const 11898) "a") (data (i32.const 11901) "a") (data (i32.const 11904) "a") (data (i32.const 11907) "a") (data (i32.const 11910) "a") (data (i32.const 11913) "a") (data (i32.const 11916) "a") (data (i32.const 11919) "a") (data (i32.const 11922) "a") (data (i32.const 11925) "a") (data (i32.const 11928) "a") (data (i32.const 11931) "a") (data (i32.const 11934) "a") (data (i32.const 11937) "a") (data (i32.const 11940) "a") (data (i32.const 11943) "a") (data (i32.const 11946) "a") (data (i32.const 11949) "a") (data (i32.const 11952) "a") (data (i32.const 11955) "a") (data (i32.const 11958) "a") (data (i32.const 11961) "a") (data (i32.const 11964) "a") (data (i32.const 11967) "a") (data (i32.const 11970) "a") (data (i32.const 11973) "a") (data (i32.const 11976) "a") (data (i32.const 11979) "a") (data (i32.const 11982) "a") (data (i32.const 11985) "a") (data (i32.const 11988) "a") (data (i32.const 11991) "a") (data (i32.const 11994) "a") (data (i32.const 11997) "a") (data (i32.const 12000) "a") (data (i32.const 12003) "a") (data (i32.const 12006) "a") (data (i32.const 12009) "a") (data (i32.const 12012) "a") (data (i32.const 12015) "a") (data (i32.const 12018) "a") (data (i32.const 12021) "a") (data (i32.const 12024) "a") (data (i32.const 12027) "a") (data (i32.const 12030) "a") (data (i32.const 12033) "a") (data (i32.const 12036) "a") (data (i32.const 12039) "a") (data (i32.const 12042) "a") (data (i32.const 12045) "a") (data (i32.const 12048) "a") (data (i32.const 12051) "a") (data (i32.const 12054) "a") (data (i32.const 12057) "a") (data (i32.const 12060) "a") (data (i32.const 12063) "a") (data (i32.const 12066) "a") (data (i32.const 12069) "a") (data (i32.const 12072) "a") (data (i32.const 12075) "a") (data (i32.const 12078) "a") (data (i32.const 12081) "a") (data (i32.const 12084) "a") (data (i32.const 12087) "a") (data (i32.const 12090) "a") (data (i32.const 12093) "a") (data (i32.const 12096) "a") (data (i32.const 12099) "a") (data (i32.const 12102) "a") (data (i32.const 12105) "a") (data (i32.const 12108) "a") (data (i32.const 12111) "a") (data (i32.const 12114) "a") (data (i32.const 12117) "a") (data (i32.const 12120) "a") (data (i32.const 12123) "a") (data (i32.const 12126) "a") (data (i32.const 12129) "a") (data (i32.const 12132) "a") (data (i32.const 12135) "a") (data (i32.const 12138) "a") (data (i32.const 12141) "a") (data (i32.const 12144) "a") (data (i32.const 12147) "a") (data (i32.const 12150) "a") (data (i32.const 12153) "a") (data (i32.const 12156) "a") (data (i32.const 12159) "a") (data (i32.const 12162) "a") (data (i32.const 12165) "a") (data (i32.const 12168) "a") (data (i32.const 12171) "a") (data (i32.const 12174) "a") (data (i32.const 12177) "a") (data (i32.const 12180) "a") (data (i32.const 12183) "a") (data (i32.const 12186) "a") (data (i32.const 12189) "a") (data (i32.const 12192) "a") (data (i32.const 12195) "a") (data (i32.const 12198) "a") (data (i32.const 12201) "a") (data (i32.const 12204) "a") (data (i32.const 12207) "a") (data (i32.const 12210) "a") (data (i32.const 12213) "a") (data (i32.const 12216) "a") (data (i32.const 12219) "a") (data (i32.const 12222) "a") (data (i32.const 12225) "a") (data (i32.const 12228) "a") (data (i32.const 12231) "a") (data (i32.const 12234) "a") (data (i32.const 12237) "a") (data (i32.const 12240) "a") (data (i32.const 12243) "a") (data (i32.const 12246) "a") (data (i32.const 12249) "a") (data (i32.const 12252) "a") (data (i32.const 12255) "a") (data (i32.const 12258) "a") (data (i32.const 12261) "a") (data (i32.const 12264) "a") (data (i32.const 12267) "a") (data (i32.const 12270) "a") (data (i32.const 12273) "a") (data (i32.const 12276) "a") (data (i32.const 12279) "a") (data (i32.const 12282) "a") (data (i32.const 12285) "a") (data (i32.const 12288) "a") (data (i32.const 12291) "a") (data (i32.const 12294) "a") (data (i32.const 12297) "a") (data (i32.const 12300) "a") (data (i32.const 12303) "a") (data (i32.const 12306) "a") (data (i32.const 12309) "a") (data (i32.const 12312) "a") (data (i32.const 12315) "a") (data (i32.const 12318) "a") (data (i32.const 12321) "a") (data (i32.const 12324) "a") (data (i32.const 12327) "a") (data (i32.const 12330) "a") (data (i32.const 12333) "a") (data (i32.const 12336) "a") (data (i32.const 12339) "a") (data (i32.const 12342) "a") (data (i32.const 12345) "a") (data (i32.const 12348) "a") (data (i32.const 12351) "a") (data (i32.const 12354) "a") (data (i32.const 12357) "a") (data (i32.const 12360) "a") (data (i32.const 12363) "a") (data (i32.const 12366) "a") (data (i32.const 12369) "a") (data (i32.const 12372) "a") (data (i32.const 12375) "a") (data (i32.const 12378) "a") (data (i32.const 12381) "a") (data (i32.const 12384) "a") (data (i32.const 12387) "a") (data (i32.const 12390) "a") (data (i32.const 12393) "a") (data (i32.const 12396) "a") (data (i32.const 12399) "a") (data (i32.const 12402) "a") (data (i32.const 12405) "a") (data (i32.const 12408) "a") (data (i32.const 12411) "a") (data (i32.const 12414) "a") (data (i32.const 12417) "a") (data (i32.const 12420) "a") (data (i32.const 12423) "a") (data (i32.const 12426) "a") (data (i32.const 12429) "a") (data (i32.const 12432) "a") (data (i32.const 12435) "a") (data (i32.const 12438) "a") (data (i32.const 12441) "a") (data (i32.const 12444) "a") (data (i32.const 12447) "a") (data (i32.const 12450) "a") (data (i32.const 12453) "a") (data (i32.const 12456) "a") (data (i32.const 12459) "a") (data (i32.const 12462) "a") (data (i32.const 12465) "a") (data (i32.const 12468) "a") (data (i32.const 12471) "a") (data (i32.const 12474) "a") (data (i32.const 12477) "a") (data (i32.const 12480) "a") (data (i32.const 12483) "a") (data (i32.const 12486) "a") (data (i32.const 12489) "a") (data (i32.const 12492) "a") (data (i32.const 12495) "a") (data (i32.const 12498) "a") (data (i32.const 12501) "a") (data (i32.const 12504) "a") (data (i32.const 12507) "a") (data (i32.const 12510) "a") (data (i32.const 12513) "a") (data (i32.const 12516) "a") (data (i32.const 12519) "a") (data (i32.const 12522) "a") (data (i32.const 12525) "a") (data (i32.const 12528) "a") (data (i32.const 12531) "a") (data (i32.const 12534) "a") (data (i32.const 12537) "a") (data (i32.const 12540) "a") (data (i32.const 12543) "a") (data (i32.const 12546) "a") (data (i32.const 12549) "a") (data (i32.const 12552) "a") (data (i32.const 12555) "a") (data (i32.const 12558) "a") (data (i32.const 12561) "a") (data (i32.const 12564) "a") (data (i32.const 12567) "a") (data (i32.const 12570) "a") (data (i32.const 12573) "a") (data (i32.const 12576) "a") (data (i32.const 12579) "a") (data (i32.const 12582) "a") (data (i32.const 12585) "a") (data (i32.const 12588) "a") (data (i32.const 12591) "a") (data (i32.const 12594) "a") (data (i32.const 12597) "a") (data (i32.const 12600) "a") (data (i32.const 12603) "a") (data (i32.const 12606) "a") (data (i32.const 12609) "a") (data (i32.const 12612) "a") (data (i32.const 12615) "a") (data (i32.const 12618) "a") (data (i32.const 12621) "a") (data (i32.const 12624) "a") (data (i32.const 12627) "a") (data (i32.const 12630) "a") (data (i32.const 12633) "a") (data (i32.const 12636) "a") (data (i32.const 12639) "a") (data (i32.const 12642) "a") (data (i32.const 12645) "a") (data (i32.const 12648) "a") (data (i32.const 12651) "a") (data (i32.const 12654) "a") (data (i32.const 12657) "a") (data (i32.const 12660) "a") (data (i32.const 12663) "a") (data (i32.const 12666) "a") (data (i32.const 12669) "a") (data (i32.const 12672) "a") (data (i32.const 12675) "a") (data (i32.const 12678) "a") (data (i32.const 12681) "a") (data (i32.const 12684) "a") (data (i32.const 12687) "a") (data (i32.const 12690) "a") (data (i32.const 12693) "a") (data (i32.const 12696) "a") (data (i32.const 12699) "a") (data (i32.const 12702) "a") (data (i32.const 12705) "a") (data (i32.const 12708) "a") (data (i32.const 12711) "a") (data (i32.const 12714) "a") (data (i32.const 12717) "a") (data (i32.const 12720) "a") (data (i32.const 12723) "a") (data (i32.const 12726) "a") (data (i32.const 12729) "a") (data (i32.const 12732) "a") (data (i32.const 12735) "a") (data (i32.const 12738) "a") (data (i32.const 12741) "a") (data (i32.const 12744) "a") (data (i32.const 12747) "a") (data (i32.const 12750) "a") (data (i32.const 12753) "a") (data (i32.const 12756) "a") (data (i32.const 12759) "a") (data (i32.const 12762) "a") (data (i32.const 12765) "a") (data (i32.const 12768) "a") (data (i32.const 12771) "a") (data (i32.const 12774) "a") (data (i32.const 12777) "a") (data (i32.const 12780) "a") (data (i32.const 12783) "a") (data (i32.const 12786) "a") (data (i32.const 12789) "a") (data (i32.const 12792) "a") (data (i32.const 12795) "a") (data (i32.const 12798) "a") (data (i32.const 12801) "a") (data (i32.const 12804) "a") (data (i32.const 12807) "a") (data (i32.const 12810) "a") (data (i32.const 12813) "a") (data (i32.const 12816) "a") (data (i32.const 12819) "a") (data (i32.const 12822) "a") (data (i32.const 12825) "a") (data (i32.const 12828) "a") (data (i32.const 12831) "a") (data (i32.const 12834) "a") (data (i32.const 12837) "a") (data (i32.const 12840) "a") (data (i32.const 12843) "a") (data (i32.const 12846) "a") (data (i32.const 12849) "a") (data (i32.const 12852) "a") (data (i32.const 12855) "a") (data (i32.const 12858) "a") (data (i32.const 12861) "a") (data (i32.const 12864) "a") (data (i32.const 12867) "a") (data (i32.const 12870) "a") (data (i32.const 12873) "a") (data (i32.const 12876) "a") (data (i32.const 12879) "a") (data (i32.const 12882) "a") (data (i32.const 12885) "a") (data (i32.const 12888) "a") (data (i32.const 12891) "a") (data (i32.const 12894) "a") (data (i32.const 12897) "a") (data (i32.const 12900) "a") (data (i32.const 12903) "a") (data (i32.const 12906) "a") (data (i32.const 12909) "a") (data (i32.const 12912) "a") (data (i32.const 12915) "a") (data (i32.const 12918) "a") (data (i32.const 12921) "a") (data (i32.const 12924) "a") (data (i32.const 12927) "a") (data (i32.const 12930) "a") (data (i32.const 12933) "a") (data (i32.const 12936) "a") (data (i32.const 12939) "a") (data (i32.const 12942) "a") (data (i32.const 12945) "a") (data (i32.const 12948) "a") (data (i32.const 12951) "a") (data (i32.const 12954) "a") (data (i32.const 12957) "a") (data (i32.const 12960) "a") (data (i32.const 12963) "a") (data (i32.const 12966) "a") (data (i32.const 12969) "a") (data (i32.const 12972) "a") (data (i32.const 12975) "a") (data (i32.const 12978) "a") (data (i32.const 12981) "a") (data (i32.const 12984) "a") (data (i32.const 12987) "a") (data (i32.const 12990) "a") (data (i32.const 12993) "a") (data (i32.const 12996) "a") (data (i32.const 12999) "a") (data (i32.const 13002) "a") (data (i32.const 13005) "a") (data (i32.const 13008) "a") (data (i32.const 13011) "a") (data (i32.const 13014) "a") (data (i32.const 13017) "a") (data (i32.const 13020) "a") (data (i32.const 13023) "a") (data (i32.const 13026) "a") (data (i32.const 13029) "a") (data (i32.const 13032) "a") (data (i32.const 13035) "a") (data (i32.const 13038) "a") (data (i32.const 13041) "a") (data (i32.const 13044) "a") (data (i32.const 13047) "a") (data (i32.const 13050) "a") (data (i32.const 13053) "a") (data (i32.const 13056) "a") (data (i32.const 13059) "a") (data (i32.const 13062) "a") (data (i32.const 13065) "a") (data (i32.const 13068) "a") (data (i32.const 13071) "a") (data (i32.const 13074) "a") (data (i32.const 13077) "a") (data (i32.const 13080) "a") (data (i32.const 13083) "a") (data (i32.const 13086) "a") (data (i32.const 13089) "a") (data (i32.const 13092) "a") (data (i32.const 13095) "a") (data (i32.const 13098) "a") (data (i32.const 13101) "a") (data (i32.const 13104) "a") (data (i32.const 13107) "a") (data (i32.const 13110) "a") (data (i32.const 13113) "a") (data (i32.const 13116) "a") (data (i32.const 13119) "a") (data (i32.const 13122) "a") (data (i32.const 13125) "a") (data (i32.const 13128) "a") (data (i32.const 13131) "a") (data (i32.const 13134) "a") (data (i32.const 13137) "a") (data (i32.const 13140) "a") (data (i32.const 13143) "a") (data (i32.const 13146) "a") (data (i32.const 13149) "a") (data (i32.const 13152) "a") (data (i32.const 13155) "a") (data (i32.const 13158) "a") (data (i32.const 13161) "a") (data (i32.const 13164) "a") (data (i32.const 13167) "a") (data (i32.const 13170) "a") (data (i32.const 13173) "a") (data (i32.const 13176) "a") (data (i32.const 13179) "a") (data (i32.const 13182) "a") (data (i32.const 13185) "a") (data (i32.const 13188) "a") (data (i32.const 13191) "a") (data (i32.const 13194) "a") (data (i32.const 13197) "a") (data (i32.const 13200) "a") (data (i32.const 13203) "a") (data (i32.const 13206) "a") (data (i32.const 13209) "a") (data (i32.const 13212) "a") (data (i32.const 13215) "a") (data (i32.const 13218) "a") (data (i32.const 13221) "a") (data (i32.const 13224) "a") (data (i32.const 13227) "a") (data (i32.const 13230) "a") (data (i32.const 13233) "a") (data (i32.const 13236) "a") (data (i32.const 13239) "a") (data (i32.const 13242) "a") (data (i32.const 13245) "a") (data (i32.const 13248) "a") (data (i32.const 13251) "a") (data (i32.const 13254) "a") (data (i32.const 13257) "a") (data (i32.const 13260) "a") (data (i32.const 13263) "a") (data (i32.const 13266) "a") (data (i32.const 13269) "a") (data (i32.const 13272) "a") (data (i32.const 13275) "a") (data (i32.const 13278) "a") (data (i32.const 13281) "a") (data (i32.const 13284) "a") (data (i32.const 13287) "a") (data (i32.const 13290) "a") (data (i32.const 13293) "a") (data (i32.const 13296) "a") (data (i32.const 13299) "a") (data (i32.const 13302) "a") (data (i32.const 13305) "a") (data (i32.const 13308) "a") (data (i32.const 13311) "a") (data (i32.const 13314) "a") (data (i32.const 13317) "a") (data (i32.const 13320) "a") (data (i32.const 13323) "a") (data (i32.const 13326) "a") (data (i32.const 13329) "a") (data (i32.const 13332) "a") (data (i32.const 13335) "a") (data (i32.const 13338) "a") (data (i32.const 13341) "a") (data (i32.const 13344) "a") (data (i32.const 13347) "a") (data (i32.const 13350) "a") (data (i32.const 13353) "a") (data (i32.const 13356) "a") (data (i32.const 13359) "a") (data (i32.const 13362) "a") (data (i32.const 13365) "a") (data (i32.const 13368) "a") (data (i32.const 13371) "a") (data (i32.const 13374) "a") (data (i32.const 13377) "a") (data (i32.const 13380) "a") (data (i32.const 13383) "a") (data (i32.const 13386) "a") (data (i32.const 13389) "a") (data (i32.const 13392) "a") (data (i32.const 13395) "a") (data (i32.const 13398) "a") (data (i32.const 13401) "a") (data (i32.const 13404) "a") (data (i32.const 13407) "a") (data (i32.const 13410) "a") (data (i32.const 13413) "a") (data (i32.const 13416) "a") (data (i32.const 13419) "a") (data (i32.const 13422) "a") (data (i32.const 13425) "a") (data (i32.const 13428) "a") (data (i32.const 13431) "a") (data (i32.const 13434) "a") (data (i32.const 13437) "a") (data (i32.const 13440) "a") (data (i32.const 13443) "a") (data (i32.const 13446) "a") (data (i32.const 13449) "a") (data (i32.const 13452) "a") (data (i32.const 13455) "a") (data (i32.const 13458) "a") (data (i32.const 13461) "a") (data (i32.const 13464) "a") (data (i32.const 13467) "a") (data (i32.const 13470) "a") (data (i32.const 13473) "a") (data (i32.const 13476) "a") (data (i32.const 13479) "a") (data (i32.const 13482) "a") (data (i32.const 13485) "a") (data (i32.const 13488) "a") (data (i32.const 13491) "a") (data (i32.const 13494) "a") (data (i32.const 13497) "a") (data (i32.const 13500) "a") (data (i32.const 13503) "a") (data (i32.const 13506) "a") (data (i32.const 13509) "a") (data (i32.const 13512) "a") (data (i32.const 13515) "a") (data (i32.const 13518) "a") (data (i32.const 13521) "a") (data (i32.const 13524) "a") (data (i32.const 13527) "a") (data (i32.const 13530) "a") (data (i32.const 13533) "a") (data (i32.const 13536) "a") (data (i32.const 13539) "a") (data (i32.const 13542) "a") (data (i32.const 13545) "a") (data (i32.const 13548) "a") (data (i32.const 13551) "a") (data (i32.const 13554) "a") (data (i32.const 13557) "a") (data (i32.const 13560) "a") (data (i32.const 13563) "a") (data (i32.const 13566) "a") (data (i32.const 13569) "a") (data (i32.const 13572) "a") (data (i32.const 13575) "a") (data (i32.const 13578) "a") (data (i32.const 13581) "a") (data (i32.const 13584) "a") (data (i32.const 13587) "a") (data (i32.const 13590) "a") (data (i32.const 13593) "a") (data (i32.const 13596) "a") (data (i32.const 13599) "a") (data (i32.const 13602) "a") (data (i32.const 13605) "a") (data (i32.const 13608) "a") (data (i32.const 13611) "a") (data (i32.const 13614) "a") (data (i32.const 13617) "a") (data (i32.const 13620) "a") (data (i32.const 13623) "a") (data (i32.const 13626) "a") (data (i32.const 13629) "a") (data (i32.const 13632) "a") (data (i32.const 13635) "a") (data (i32.const 13638) "a") (data (i32.const 13641) "a") (data (i32.const 13644) "a") (data (i32.const 13647) "a") (data (i32.const 13650) "a") (data (i32.const 13653) "a") (data (i32.const 13656) "a") (data (i32.const 13659) "a") (data (i32.const 13662) "a") (data (i32.const 13665) "a") (data (i32.const 13668) "a") (data (i32.const 13671) "a") (data (i32.const 13674) "a") (data (i32.const 13677) "a") (data (i32.const 13680) "a") (data (i32.const 13683) "a") (data (i32.const 13686) "a") (data (i32.const 13689) "a") (data (i32.const 13692) "a") (data (i32.const 13695) "a") (data (i32.const 13698) "a") (data (i32.const 13701) "a") (data (i32.const 13704) "a") (data (i32.const 13707) "a") (data (i32.const 13710) "a") (data (i32.const 13713) "a") (data (i32.const 13716) "a") (data (i32.const 13719) "a") (data (i32.const 13722) "a") (data (i32.const 13725) "a") (data (i32.const 13728) "a") (data (i32.const 13731) "a") (data (i32.const 13734) "a") (data (i32.const 13737) "a") (data (i32.const 13740) "a") (data (i32.const 13743) "a") (data (i32.const 13746) "a") (data (i32.const 13749) "a") (data (i32.const 13752) "a") (data (i32.const 13755) "a") (data (i32.const 13758) "a") (data (i32.const 13761) "a") (data (i32.const 13764) "a") (data (i32.const 13767) "a") (data (i32.const 13770) "a") (data (i32.const 13773) "a") (data (i32.const 13776) "a") (data (i32.const 13779) "a") (data (i32.const 13782) "a") (data (i32.const 13785) "a") (data (i32.const 13788) "a") (data (i32.const 13791) "a") (data (i32.const 13794) "a") (data (i32.const 13797) "a") (data (i32.const 13800) "a") (data (i32.const 13803) "a") (data (i32.const 13806) "a") (data (i32.const 13809) "a") (data (i32.const 13812) "a") (data (i32.const 13815) "a") (data (i32.const 13818) "a") (data (i32.const 13821) "a") (data (i32.const 13824) "a") (data (i32.const 13827) "a") (data (i32.const 13830) "a") (data (i32.const 13833) "a") (data (i32.const 13836) "a") (data (i32.const 13839) "a") (data (i32.const 13842) "a") (data (i32.const 13845) "a") (data (i32.const 13848) "a") (data (i32.const 13851) "a") (data (i32.const 13854) "a") (data (i32.const 13857) "a") (data (i32.const 13860) "a") (data (i32.const 13863) "a") (data (i32.const 13866) "a") (data (i32.const 13869) "a") (data (i32.const 13872) "a") (data (i32.const 13875) "a") (data (i32.const 13878) "a") (data (i32.const 13881) "a") (data (i32.const 13884) "a") (data (i32.const 13887) "a") (data (i32.const 13890) "a") (data (i32.const 13893) "a") (data (i32.const 13896) "a") (data (i32.const 13899) "a") (data (i32.const 13902) "a") (data (i32.const 13905) "a") (data (i32.const 13908) "a") (data (i32.const 13911) "a") (data (i32.const 13914) "a") (data (i32.const 13917) "a") (data (i32.const 13920) "a") (data (i32.const 13923) "a") (data (i32.const 13926) "a") (data (i32.const 13929) "a") (data (i32.const 13932) "a") (data (i32.const 13935) "a") (data (i32.const 13938) "a") (data (i32.const 13941) "a") (data (i32.const 13944) "a") (data (i32.const 13947) "a") (data (i32.const 13950) "a") (data (i32.const 13953) "a") (data (i32.const 13956) "a") (data (i32.const 13959) "a") (data (i32.const 13962) "a") (data (i32.const 13965) "a") (data (i32.const 13968) "a") (data (i32.const 13971) "a") (data (i32.const 13974) "a") (data (i32.const 13977) "a") (data (i32.const 13980) "a") (data (i32.const 13983) "a") (data (i32.const 13986) "a") (data (i32.const 13989) "a") (data (i32.const 13992) "a") (data (i32.const 13995) "a") (data (i32.const 13998) "a") (data (i32.const 14001) "a") (data (i32.const 14004) "a") (data (i32.const 14007) "a") (data (i32.const 14010) "a") (data (i32.const 14013) "a") (data (i32.const 14016) "a") (data (i32.const 14019) "a") (data (i32.const 14022) "a") (data (i32.const 14025) "a") (data (i32.const 14028) "a") (data (i32.const 14031) "a") (data (i32.const 14034) "a") (data (i32.const 14037) "a") (data (i32.const 14040) "a") (data (i32.const 14043) "a") (data (i32.const 14046) "a") (data (i32.const 14049) "a") (data (i32.const 14052) "a") (data (i32.const 14055) "a") (data (i32.const 14058) "a") (data (i32.const 14061) "a") (data (i32.const 14064) "a") (data (i32.const 14067) "a") (data (i32.const 14070) "a") (data (i32.const 14073) "a") (data (i32.const 14076) "a") (data (i32.const 14079) "a") (data (i32.const 14082) "a") (data (i32.const 14085) "a") (data (i32.const 14088) "a") (data (i32.const 14091) "a") (data (i32.const 14094) "a") (data (i32.const 14097) "a") (data (i32.const 14100) "a") (data (i32.const 14103) "a") (data (i32.const 14106) "a") (data (i32.const 14109) "a") (data (i32.const 14112) "a") (data (i32.const 14115) "a") (data (i32.const 14118) "a") (data (i32.const 14121) "a") (data (i32.const 14124) "a") (data (i32.const 14127) "a") (data (i32.const 14130) "a") (data (i32.const 14133) "a") (data (i32.const 14136) "a") (data (i32.const 14139) "a") (data (i32.const 14142) "a") (data (i32.const 14145) "a") (data (i32.const 14148) "a") (data (i32.const 14151) "a") (data (i32.const 14154) "a") (data (i32.const 14157) "a") (data (i32.const 14160) "a") (data (i32.const 14163) "a") (data (i32.const 14166) "a") (data (i32.const 14169) "a") (data (i32.const 14172) "a") (data (i32.const 14175) "a") (data (i32.const 14178) "a") (data (i32.const 14181) "a") (data (i32.const 14184) "a") (data (i32.const 14187) "a") (data (i32.const 14190) "a") (data (i32.const 14193) "a") (data (i32.const 14196) "a") (data (i32.const 14199) "a") (data (i32.const 14202) "a") (data (i32.const 14205) "a") (data (i32.const 14208) "a") (data (i32.const 14211) "a") (data (i32.const 14214) "a") (data (i32.const 14217) "a") (data (i32.const 14220) "a") (data (i32.const 14223) "a") (data (i32.const 14226) "a") (data (i32.const 14229) "a") (data (i32.const 14232) "a") (data (i32.const 14235) "a") (data (i32.const 14238) "a") (data (i32.const 14241) "a") (data (i32.const 14244) "a") (data (i32.const 14247) "a") (data (i32.const 14250) "a") (data (i32.const 14253) "a") (data (i32.const 14256) "a") (data (i32.const 14259) "a") (data (i32.const 14262) "a") (data (i32.const 14265) "a") (data (i32.const 14268) "a") (data (i32.const 14271) "a") (data (i32.const 14274) "a") (data (i32.const 14277) "a") (data (i32.const 14280) "a") (data (i32.const 14283) "a") (data (i32.const 14286) "a") (data (i32.const 14289) "a") (data (i32.const 14292) "a") (data (i32.const 14295) "a") (data (i32.const 14298) "a") (data (i32.const 14301) "a") (data (i32.const 14304) "a") (data (i32.const 14307) "a") (data (i32.const 14310) "a") (data (i32.const 14313) "a") (data (i32.const 14316) "a") (data (i32.const 14319) "a") (data (i32.const 14322) "a") (data (i32.const 14325) "a") (data (i32.const 14328) "a") (data (i32.const 14331) "a") (data (i32.const 14334) "a") (data (i32.const 14337) "a") (data (i32.const 14340) "a") (data (i32.const 14343) "a") (data (i32.const 14346) "a") (data (i32.const 14349) "a") (data (i32.const 14352) "a") (data (i32.const 14355) "a") (data (i32.const 14358) "a") (data (i32.const 14361) "a") (data (i32.const 14364) "a") (data (i32.const 14367) "a") (data (i32.const 14370) "a") (data (i32.const 14373) "a") (data (i32.const 14376) "a") (data (i32.const 14379) "a") (data (i32.const 14382) "a") (data (i32.const 14385) "a") (data (i32.const 14388) "a") (data (i32.const 14391) "a") (data (i32.const 14394) "a") (data (i32.const 14397) "a") (data (i32.const 14400) "a") (data (i32.const 14403) "a") (data (i32.const 14406) "a") (data (i32.const 14409) "a") (data (i32.const 14412) "a") (data (i32.const 14415) "a") (data (i32.const 14418) "a") (data (i32.const 14421) "a") (data (i32.const 14424) "a") (data (i32.const 14427) "a") (data (i32.const 14430) "a") (data (i32.const 14433) "a") (data (i32.const 14436) "a") (data (i32.const 14439) "a") (data (i32.const 14442) "a") (data (i32.const 14445) "a") (data (i32.const 14448) "a") (data (i32.const 14451) "a") (data (i32.const 14454) "a") (data (i32.const 14457) "a") (data (i32.const 14460) "a") (data (i32.const 14463) "a") (data (i32.const 14466) "a") (data (i32.const 14469) "a") (data (i32.const 14472) "a") (data (i32.const 14475) "a") (data (i32.const 14478) "a") (data (i32.const 14481) "a") (data (i32.const 14484) "a") (data (i32.const 14487) "a") (data (i32.const 14490) "a") (data (i32.const 14493) "a") (data (i32.const 14496) "a") (data (i32.const 14499) "a") (data (i32.const 14502) "a") (data (i32.const 14505) "a") (data (i32.const 14508) "a") (data (i32.const 14511) "a") (data (i32.const 14514) "a") (data (i32.const 14517) "a") (data (i32.const 14520) "a") (data (i32.const 14523) "a") (data (i32.const 14526) "a") (data (i32.const 14529) "a") (data (i32.const 14532) "a") (data (i32.const 14535) "a") (data (i32.const 14538) "a") (data (i32.const 14541) "a") (data (i32.const 14544) "a") (data (i32.const 14547) "a") (data (i32.const 14550) "a") (data (i32.const 14553) "a") (data (i32.const 14556) "a") (data (i32.const 14559) "a") (data (i32.const 14562) "a") (data (i32.const 14565) "a") (data (i32.const 14568) "a") (data (i32.const 14571) "a") (data (i32.const 14574) "a") (data (i32.const 14577) "a") (data (i32.const 14580) "a") (data (i32.const 14583) "a") (data (i32.const 14586) "a") (data (i32.const 14589) "a") (data (i32.const 14592) "a") (data (i32.const 14595) "a") (data (i32.const 14598) "a") (data (i32.const 14601) "a") (data (i32.const 14604) "a") (data (i32.const 14607) "a") (data (i32.const 14610) "a") (data (i32.const 14613) "a") (data (i32.const 14616) "a") (data (i32.const 14619) "a") (data (i32.const 14622) "a") (data (i32.const 14625) "a") (data (i32.const 14628) "a") (data (i32.const 14631) "a") (data (i32.const 14634) "a") (data (i32.const 14637) "a") (data (i32.const 14640) "a") (data (i32.const 14643) "a") (data (i32.const 14646) "a") (data (i32.const 14649) "a") (data (i32.const 14652) "a") (data (i32.const 14655) "a") (data (i32.const 14658) "a") (data (i32.const 14661) "a") (data (i32.const 14664) "a") (data (i32.const 14667) "a") (data (i32.const 14670) "a") (data (i32.const 14673) "a") (data (i32.const 14676) "a") (data (i32.const 14679) "a") (data (i32.const 14682) "a") (data (i32.const 14685) "a") (data (i32.const 14688) "a") (data (i32.const 14691) "a") (data (i32.const 14694) "a") (data (i32.const 14697) "a") (data (i32.const 14700) "a") (data (i32.const 14703) "a") (data (i32.const 14706) "a") (data (i32.const 14709) "a") (data (i32.const 14712) "a") (data (i32.const 14715) "a") (data (i32.const 14718) "a") (data (i32.const 14721) "a") (data (i32.const 14724) "a") (data (i32.const 14727) "a") (data (i32.const 14730) "a") (data (i32.const 14733) "a") (data (i32.const 14736) "a") (data (i32.const 14739) "a") (data (i32.const 14742) "a") (data (i32.const 14745) "a") (data (i32.const 14748) "a") (data (i32.const 14751) "a") (data (i32.const 14754) "a") (data (i32.const 14757) "a") (data (i32.const 14760) "a") (data (i32.const 14763) "a") (data (i32.const 14766) "a") (data (i32.const 14769) "a") (data (i32.const 14772) "a") (data (i32.const 14775) "a") (data (i32.const 14778) "a") (data (i32.const 14781) "a") (data (i32.const 14784) "a") (data (i32.const 14787) "a") (data (i32.const 14790) "a") (data (i32.const 14793) "a") (data (i32.const 14796) "a") (data (i32.const 14799) "a") (data (i32.const 14802) "a") (data (i32.const 14805) "a") (data (i32.const 14808) "a") (data (i32.const 14811) "a") (data (i32.const 14814) "a") (data (i32.const 14817) "a") (data (i32.const 14820) "a") (data (i32.const 14823) "a") (data (i32.const 14826) "a") (data (i32.const 14829) "a") (data (i32.const 14832) "a") (data (i32.const 14835) "a") (data (i32.const 14838) "a") (data (i32.const 14841) "a") (data (i32.const 14844) "a") (data (i32.const 14847) "a") (data (i32.const 14850) "a") (data (i32.const 14853) "a") (data (i32.const 14856) "a") (data (i32.const 14859) "a") (data (i32.const 14862) "a") (data (i32.const 14865) "a") (data (i32.const 14868) "a") (data (i32.const 14871) "a") (data (i32.const 14874) "a") (data (i32.const 14877) "a") (data (i32.const 14880) "a") (data (i32.const 14883) "a") (data (i32.const 14886) "a") (data (i32.const 14889) "a") (data (i32.const 14892) "a") (data (i32.const 14895) "a") (data (i32.const 14898) "a") (data (i32.const 14901) "a") (data (i32.const 14904) "a") (data (i32.const 14907) "a") (data (i32.const 14910) "a") (data (i32.const 14913) "a") (data (i32.const 14916) "a") (data (i32.const 14919) "a") (data (i32.const 14922) "a") (data (i32.const 14925) "a") (data (i32.const 14928) "a") (data (i32.const 14931) "a") (data (i32.const 14934) "a") (data (i32.const 14937) "a") (data (i32.const 14940) "a") (data (i32.const 14943) "a") (data (i32.const 14946) "a") (data (i32.const 14949) "a") (data (i32.const 14952) "a") (data (i32.const 14955) "a") (data (i32.const 14958) "a") (data (i32.const 14961) "a") (data (i32.const 14964) "a") (data (i32.const 14967) "a") (data (i32.const 14970) "a") (data (i32.const 14973) "a") (data (i32.const 14976) "a") (data (i32.const 14979) "a") (data (i32.const 14982) "a") (data (i32.const 14985) "a") (data (i32.const 14988) "a") (data (i32.const 14991) "a") (data (i32.const 14994) "a") (data (i32.const 14997) "a") (data (i32.const 15000) "a") (data (i32.const 15003) "a") (data (i32.const 15006) "a") (data (i32.const 15009) "a") (data (i32.const 15012) "a") (data (i32.const 15015) "a") (data (i32.const 15018) "a") (data (i32.const 15021) "a") (data (i32.const 15024) "a") (data (i32.const 15027) "a") (data (i32.const 15030) "a") (data (i32.const 15033) "a") (data (i32.const 15036) "a") (data (i32.const 15039) "a") (data (i32.const 15042) "a") (data (i32.const 15045) "a") (data (i32.const 15048) "a") (data (i32.const 15051) "a") (data (i32.const 15054) "a") (data (i32.const 15057) "a") (data (i32.const 15060) "a") (data (i32.const 15063) "a") (data (i32.const 15066) "a") (data (i32.const 15069) "a") (data (i32.const 15072) "a") (data (i32.const 15075) "a") (data (i32.const 15078) "a") (data (i32.const 15081) "a") (data (i32.const 15084) "a") (data (i32.const 15087) "a") (data (i32.const 15090) "a") (data (i32.const 15093) "a") (data (i32.const 15096) "a") (data (i32.const 15099) "a") (data (i32.const 15102) "a") (data (i32.const 15105) "a") (data (i32.const 15108) "a") (data (i32.const 15111) "a") (data (i32.const 15114) "a") (data (i32.const 15117) "a") (data (i32.const 15120) "a") (data (i32.const 15123) "a") (data (i32.const 15126) "a") (data (i32.const 15129) "a") (data (i32.const 15132) "a") (data (i32.const 15135) "a") (data (i32.const 15138) "a") (data (i32.const 15141) "a") (data (i32.const 15144) "a") (data (i32.const 15147) "a") (data (i32.const 15150) "a") (data (i32.const 15153) "a") (data (i32.const 15156) "a") (data (i32.const 15159) "a") (data (i32.const 15162) "a") (data (i32.const 15165) "a") (data (i32.const 15168) "a") (data (i32.const 15171) "a") (data (i32.const 15174) "a") (data (i32.const 15177) "a") (data (i32.const 15180) "a") (data (i32.const 15183) "a") (data (i32.const 15186) "a") (data (i32.const 15189) "a") (data (i32.const 15192) "a") (data (i32.const 15195) "a") (data (i32.const 15198) "a") (data (i32.const 15201) "a") (data (i32.const 15204) "a") (data (i32.const 15207) "a") (data (i32.const 15210) "a") (data (i32.const 15213) "a") (data (i32.const 15216) "a") (data (i32.const 15219) "a") (data (i32.const 15222) "a") (data (i32.const 15225) "a") (data (i32.const 15228) "a") (data (i32.const 15231) "a") (data (i32.const 15234) "a") (data (i32.const 15237) "a") (data (i32.const 15240) "a") (data (i32.const 15243) "a") (data (i32.const 15246) "a") (data (i32.const 15249) "a") (data (i32.const 15252) "a") (data (i32.const 15255) "a") (data (i32.const 15258) "a") (data (i32.const 15261) "a") (data (i32.const 15264) "a") (data (i32.const 15267) "a") (data (i32.const 15270) "a") (data (i32.const 15273) "a") (data (i32.const 15276) "a") (data (i32.const 15279) "a") (data (i32.const 15282) "a") (data (i32.const 15285) "a") (data (i32.const 15288) "a") (data (i32.const 15291) "a") (data (i32.const 15294) "a") (data (i32.const 15297) "a") (data (i32.const 15300) "a") (data (i32.const 15303) "a") (data (i32.const 15306) "a") (data (i32.const 15309) "a") (data (i32.const 15312) "a") (data (i32.const 15315) "a") (data (i32.const 15318) "a") (data (i32.const 15321) "a") (data (i32.const 15324) "a") (data (i32.const 15327) "a") (data (i32.const 15330) "a") (data (i32.const 15333) "a") (data (i32.const 15336) "a") (data (i32.const 15339) "a") (data (i32.const 15342) "a") (data (i32.const 15345) "a") (data (i32.const 15348) "a") (data (i32.const 15351) "a") (data (i32.const 15354) "a") (data (i32.const 15357) "a") (data (i32.const 15360) "a") (data (i32.const 15363) "a") (data (i32.const 15366) "a") (data (i32.const 15369) "a") (data (i32.const 15372) "a") (data (i32.const 15375) "a") (data (i32.const 15378) "a") (data (i32.const 15381) "a") (data (i32.const 15384) "a") (data (i32.const 15387) "a") (data (i32.const 15390) "a") (data (i32.const 15393) "a") (data (i32.const 15396) "a") (data (i32.const 15399) "a") (data (i32.const 15402) "a") (data (i32.const 15405) "a") (data (i32.const 15408) "a") (data (i32.const 15411) "a") (data (i32.const 15414) "a") (data (i32.const 15417) "a") (data (i32.const 15420) "a") (data (i32.const 15423) "a") (data (i32.const 15426) "a") (data (i32.const 15429) "a") (data (i32.const 15432) "a") (data (i32.const 15435) "a") (data (i32.const 15438) "a") (data (i32.const 15441) "a") (data (i32.const 15444) "a") (data (i32.const 15447) "a") (data (i32.const 15450) "a") (data (i32.const 15453) "a") (data (i32.const 15456) "a") (data (i32.const 15459) "a") (data (i32.const 15462) "a") (data (i32.const 15465) "a") (data (i32.const 15468) "a") (data (i32.const 15471) "a") (data (i32.const 15474) "a") (data (i32.const 15477) "a") (data (i32.const 15480) "a") (data (i32.const 15483) "a") (data (i32.const 15486) "a") (data (i32.const 15489) "a") (data (i32.const 15492) "a") (data (i32.const 15495) "a") (data (i32.const 15498) "a") (data (i32.const 15501) "a") (data (i32.const 15504) "a") (data (i32.const 15507) "a") (data (i32.const 15510) "a") (data (i32.const 15513) "a") (data (i32.const 15516) "a") (data (i32.const 15519) "a") (data (i32.const 15522) "a") (data (i32.const 15525) "a") (data (i32.const 15528) "a") (data (i32.const 15531) "a") (data (i32.const 15534) "a") (data (i32.const 15537) "a") (data (i32.const 15540) "a") (data (i32.const 15543) "a") (data (i32.const 15546) "a") (data (i32.const 15549) "a") (data (i32.const 15552) "a") (data (i32.const 15555) "a") (data (i32.const 15558) "a") (data (i32.const 15561) "a") (data (i32.const 15564) "a") (data (i32.const 15567) "a") (data (i32.const 15570) "a") (data (i32.const 15573) "a") (data (i32.const 15576) "a") (data (i32.const 15579) "a") (data (i32.const 15582) "a") (data (i32.const 15585) "a") (data (i32.const 15588) "a") (data (i32.const 15591) "a") (data (i32.const 15594) "a") (data (i32.const 15597) "a") (data (i32.const 15600) "a") (data (i32.const 15603) "a") (data (i32.const 15606) "a") (data (i32.const 15609) "a") (data (i32.const 15612) "a") (data (i32.const 15615) "a") (data (i32.const 15618) "a") (data (i32.const 15621) "a") (data (i32.const 15624) "a") (data (i32.const 15627) "a") (data (i32.const 15630) "a") (data (i32.const 15633) "a") (data (i32.const 15636) "a") (data (i32.const 15639) "a") (data (i32.const 15642) "a") (data (i32.const 15645) "a") (data (i32.const 15648) "a") (data (i32.const 15651) "a") (data (i32.const 15654) "a") (data (i32.const 15657) "a") (data (i32.const 15660) "a") (data (i32.const 15663) "a") (data (i32.const 15666) "a") (data (i32.const 15669) "a") (data (i32.const 15672) "a") (data (i32.const 15675) "a") (data (i32.const 15678) "a") (data (i32.const 15681) "a") (data (i32.const 15684) "a") (data (i32.const 15687) "a") (data (i32.const 15690) "a") (data (i32.const 15693) "a") (data (i32.const 15696) "a") (data (i32.const 15699) "a") (data (i32.const 15702) "a") (data (i32.const 15705) "a") (data (i32.const 15708) "a") (data (i32.const 15711) "a") (data (i32.const 15714) "a") (data (i32.const 15717) "a") (data (i32.const 15720) "a") (data (i32.const 15723) "a") (data (i32.const 15726) "a") (data (i32.const 15729) "a") (data (i32.const 15732) "a") (data (i32.const 15735) "a") (data (i32.const 15738) "a") (data (i32.const 15741) "a") (data (i32.const 15744) "a") (data (i32.const 15747) "a") (data (i32.const 15750) "a") (data (i32.const 15753) "a") (data (i32.const 15756) "a") (data (i32.const 15759) "a") (data (i32.const 15762) "a") (data (i32.const 15765) "a") (data (i32.const 15768) "a") (data (i32.const 15771) "a") (data (i32.const 15774) "a") (data (i32.const 15777) "a") (data (i32.const 15780) "a") (data (i32.const 15783) "a") (data (i32.const 15786) "a") (data (i32.const 15789) "a") (data (i32.const 15792) "a") (data (i32.const 15795) "a") (data (i32.const 15798) "a") (data (i32.const 15801) "a") (data (i32.const 15804) "a") (data (i32.const 15807) "a") (data (i32.const 15810) "a") (data (i32.const 15813) "a") (data (i32.const 15816) "a") (data (i32.const 15819) "a") (data (i32.const 15822) "a") (data (i32.const 15825) "a") (data (i32.const 15828) "a") (data (i32.const 15831) "a") (data (i32.const 15834) "a") (data (i32.const 15837) "a") (data (i32.const 15840) "a") (data (i32.const 15843) "a") (data (i32.const 15846) "a") (data (i32.const 15849) "a") (data (i32.const 15852) "a") (data (i32.const 15855) "a") (data (i32.const 15858) "a") (data (i32.const 15861) "a") (data (i32.const 15864) "a") (data (i32.const 15867) "a") (data (i32.const 15870) "a") (data (i32.const 15873) "a") (data (i32.const 15876) "a") (data (i32.const 15879) "a") (data (i32.const 15882) "a") (data (i32.const 15885) "a") (data (i32.const 15888) "a") (data (i32.const 15891) "a") (data (i32.const 15894) "a") (data (i32.const 15897) "a") (data (i32.const 15900) "a") (data (i32.const 15903) "a") (data (i32.const 15906) "a") (data (i32.const 15909) "a") (data (i32.const 15912) "a") (data (i32.const 15915) "a") (data (i32.const 15918) "a") (data (i32.const 15921) "a") (data (i32.const 15924) "a") (data (i32.const 15927) "a") (data (i32.const 15930) "a") (data (i32.const 15933) "a") (data (i32.const 15936) "a") (data (i32.const 15939) "a") (data (i32.const 15942) "a") (data (i32.const 15945) "a") (data (i32.const 15948) "a") (data (i32.const 15951) "a") (data (i32.const 15954) "a") (data (i32.const 15957) "a") (data (i32.const 15960) "a") (data (i32.const 15963) "a") (data (i32.const 15966) "a") (data (i32.const 15969) "a") (data (i32.const 15972) "a") (data (i32.const 15975) "a") (data (i32.const 15978) "a") (data (i32.const 15981) "a") (data (i32.const 15984) "a") (data (i32.const 15987) "a") (data (i32.const 15990) "a") (data (i32.const 15993) "a") (data (i32.const 15996) "a") (data (i32.const 15999) "a") (data (i32.const 16002) "a") (data (i32.const 16005) "a") (data (i32.const 16008) "a") (data (i32.const 16011) "a") (data (i32.const 16014) "a") (data (i32.const 16017) "a") (data (i32.const 16020) "a") (data (i32.const 16023) "a") (data (i32.const 16026) "a") (data (i32.const 16029) "a") (data (i32.const 16032) "a") (data (i32.const 16035) "a") (data (i32.const 16038) "a") (data (i32.const 16041) "a") (data (i32.const 16044) "a") (data (i32.const 16047) "a") (data (i32.const 16050) "a") (data (i32.const 16053) "a") (data (i32.const 16056) "a") (data (i32.const 16059) "a") (data (i32.const 16062) "a") (data (i32.const 16065) "a") (data (i32.const 16068) "a") (data (i32.const 16071) "a") (data (i32.const 16074) "a") (data (i32.const 16077) "a") (data (i32.const 16080) "a") (data (i32.const 16083) "a") (data (i32.const 16086) "a") (data (i32.const 16089) "a") (data (i32.const 16092) "a") (data (i32.const 16095) "a") (data (i32.const 16098) "a") (data (i32.const 16101) "a") (data (i32.const 16104) "a") (data (i32.const 16107) "a") (data (i32.const 16110) "a") (data (i32.const 16113) "a") (data (i32.const 16116) "a") (data (i32.const 16119) "a") (data (i32.const 16122) "a") (data (i32.const 16125) "a") (data (i32.const 16128) "a") (data (i32.const 16131) "a") (data (i32.const 16134) "a") (data (i32.const 16137) "a") (data (i32.const 16140) "a") (data (i32.const 16143) "a") (data (i32.const 16146) "a") (data (i32.const 16149) "a") (data (i32.const 16152) "a") (data (i32.const 16155) "a") (data (i32.const 16158) "a") (data (i32.const 16161) "a") (data (i32.const 16164) "a") (data (i32.const 16167) "a") (data (i32.const 16170) "a") (data (i32.const 16173) "a") (data (i32.const 16176) "a") (data (i32.const 16179) "a") (data (i32.const 16182) "a") (data (i32.const 16185) "a") (data (i32.const 16188) "a") (data (i32.const 16191) "a") (data (i32.const 16194) "a") (data (i32.const 16197) "a") (data (i32.const 16200) "a") (data (i32.const 16203) "a") (data (i32.const 16206) "a") (data (i32.const 16209) "a") (data (i32.const 16212) "a") (data (i32.const 16215) "a") (data (i32.const 16218) "a") (data (i32.const 16221) "a") (data (i32.const 16224) "a") (data (i32.const 16227) "a") (data (i32.const 16230) "a") (data (i32.const 16233) "a") (data (i32.const 16236) "a") (data (i32.const 16239) "a") (data (i32.const 16242) "a") (data (i32.const 16245) "a") (data (i32.const 16248) "a") (data (i32.const 16251) "a") (data (i32.const 16254) "a") (data (i32.const 16257) "a") (data (i32.const 16260) "a") (data (i32.const 16263) "a") (data (i32.const 16266) "a") (data (i32.const 16269) "a") (data (i32.const 16272) "a") (data (i32.const 16275) "a") (data (i32.const 16278) "a") (data (i32.const 16281) "a") (data (i32.const 16284) "a") (data (i32.const 16287) "a") (data (i32.const 16290) "a") (data (i32.const 16293) "a") (data (i32.const 16296) "a") (data (i32.const 16299) "a") (data (i32.const 16302) "a") (data (i32.const 16305) "a") (data (i32.const 16308) "a") (data (i32.const 16311) "a") (data (i32.const 16314) "a") (data (i32.const 16317) "a") (data (i32.const 16320) "a") (data (i32.const 16323) "a") (data (i32.const 16326) "a") (data (i32.const 16329) "a") (data (i32.const 16332) "a") (data (i32.const 16335) "a") (data (i32.const 16338) "a") (data (i32.const 16341) "a") (data (i32.const 16344) "a") (data (i32.const 16347) "a") (data (i32.const 16350) "a") (data (i32.const 16353) "a") (data (i32.const 16356) "a") (data (i32.const 16359) "a") (data (i32.const 16362) "a") (data (i32.const 16365) "a") (data (i32.const 16368) "a") (data (i32.const 16371) "a") (data (i32.const 16374) "a") (data (i32.const 16377) "a") (data (i32.const 16380) "a") (data (i32.const 16383) "a") (data (i32.const 16386) "a") (data (i32.const 16389) "a") (data (i32.const 16392) "a") (data (i32.const 16395) "a") (data (i32.const 16398) "a") (data (i32.const 16401) "a") (data (i32.const 16404) "a") (data (i32.const 16407) "a") (data (i32.const 16410) "a") (data (i32.const 16413) "a") (data (i32.const 16416) "a") (data (i32.const 16419) "a") (data (i32.const 16422) "a") (data (i32.const 16425) "a") (data (i32.const 16428) "a") (data (i32.const 16431) "a") (data (i32.const 16434) "a") (data (i32.const 16437) "a") (data (i32.const 16440) "a") (data (i32.const 16443) "a") (data (i32.const 16446) "a") (data (i32.const 16449) "a") (data (i32.const 16452) "a") (data (i32.const 16455) "a") (data (i32.const 16458) "a") (data (i32.const 16461) "a") (data (i32.const 16464) "a") (data (i32.const 16467) "a") (data (i32.const 16470) "a") (data (i32.const 16473) "a") (data (i32.const 16476) "a") (data (i32.const 16479) "a") (data (i32.const 16482) "a") (data (i32.const 16485) "a") (data (i32.const 16488) "a") (data (i32.const 16491) "a") (data (i32.const 16494) "a") (data (i32.const 16497) "a") (data (i32.const 16500) "a") (data (i32.const 16503) "a") (data (i32.const 16506) "a") (data (i32.const 16509) "a") (data (i32.const 16512) "a") (data (i32.const 16515) "a") (data (i32.const 16518) "a") (data (i32.const 16521) "a") (data (i32.const 16524) "a") (data (i32.const 16527) "a") (data (i32.const 16530) "a") (data (i32.const 16533) "a") (data (i32.const 16536) "a") (data (i32.const 16539) "a") (data (i32.const 16542) "a") (data (i32.const 16545) "a") (data (i32.const 16548) "a") (data (i32.const 16551) "a") (data (i32.const 16554) "a") (data (i32.const 16557) "a") (data (i32.const 16560) "a") (data (i32.const 16563) "a") (data (i32.const 16566) "a") (data (i32.const 16569) "a") (data (i32.const 16572) "a") (data (i32.const 16575) "a") (data (i32.const 16578) "a") (data (i32.const 16581) "a") (data (i32.const 16584) "a") (data (i32.const 16587) "a") (data (i32.const 16590) "a") (data (i32.const 16593) "a") (data (i32.const 16596) "a") (data (i32.const 16599) "a") (data (i32.const 16602) "a") (data (i32.const 16605) "a") (data (i32.const 16608) "a") (data (i32.const 16611) "a") (data (i32.const 16614) "a") (data (i32.const 16617) "a") (data (i32.const 16620) "a") (data (i32.const 16623) "a") (data (i32.const 16626) "a") (data (i32.const 16629) "a") (data (i32.const 16632) "a") (data (i32.const 16635) "a") (data (i32.const 16638) "a") (data (i32.const 16641) "a") (data (i32.const 16644) "a") (data (i32.const 16647) "a") (data (i32.const 16650) "a") (data (i32.const 16653) "a") (data (i32.const 16656) "a") (data (i32.const 16659) "a") (data (i32.const 16662) "a") (data (i32.const 16665) "a") (data (i32.const 16668) "a") (data (i32.const 16671) "a") (data (i32.const 16674) "a") (data (i32.const 16677) "a") (data (i32.const 16680) "a") (data (i32.const 16683) "a") (data (i32.const 16686) "a") (data (i32.const 16689) "a") (data (i32.const 16692) "a") (data (i32.const 16695) "a") (data (i32.const 16698) "a") (data (i32.const 16701) "a") (data (i32.const 16704) "a") (data (i32.const 16707) "a") (data (i32.const 16710) "a") (data (i32.const 16713) "a") (data (i32.const 16716) "a") (data (i32.const 16719) "a") (data (i32.const 16722) "a") (data (i32.const 16725) "a") (data (i32.const 16728) "a") (data (i32.const 16731) "a") (data (i32.const 16734) "a") (data (i32.const 16737) "a") (data (i32.const 16740) "a") (data (i32.const 16743) "a") (data (i32.const 16746) "a") (data (i32.const 16749) "a") (data (i32.const 16752) "a") (data (i32.const 16755) "a") (data (i32.const 16758) "a") (data (i32.const 16761) "a") (data (i32.const 16764) "a") (data (i32.const 16767) "a") (data (i32.const 16770) "a") (data (i32.const 16773) "a") (data (i32.const 16776) "a") (data (i32.const 16779) "a") (data (i32.const 16782) "a") (data (i32.const 16785) "a") (data (i32.const 16788) "a") (data (i32.const 16791) "a") (data (i32.const 16794) "a") (data (i32.const 16797) "a") (data (i32.const 16800) "a") (data (i32.const 16803) "a") (data (i32.const 16806) "a") (data (i32.const 16809) "a") (data (i32.const 16812) "a") (data (i32.const 16815) "a") (data (i32.const 16818) "a") (data (i32.const 16821) "a") (data (i32.const 16824) "a") (data (i32.const 16827) "a") (data (i32.const 16830) "a") (data (i32.const 16833) "a") (data (i32.const 16836) "a") (data (i32.const 16839) "a") (data (i32.const 16842) "a") (data (i32.const 16845) "a") (data (i32.const 16848) "a") (data (i32.const 16851) "a") (data (i32.const 16854) "a") (data (i32.const 16857) "a") (data (i32.const 16860) "a") (data (i32.const 16863) "a") (data (i32.const 16866) "a") (data (i32.const 16869) "a") (data (i32.const 16872) "a") (data (i32.const 16875) "a") (data (i32.const 16878) "a") (data (i32.const 16881) "a") (data (i32.const 16884) "a") (data (i32.const 16887) "a") (data (i32.const 16890) "a") (data (i32.const 16893) "a") (data (i32.const 16896) "a") (data (i32.const 16899) "a") (data (i32.const 16902) "a") (data (i32.const 16905) "a") (data (i32.const 16908) "a") (data (i32.const 16911) "a") (data (i32.const 16914) "a") (data (i32.const 16917) "a") (data (i32.const 16920) "a") (data (i32.const 16923) "a") (data (i32.const 16926) "a") (data (i32.const 16929) "a") (data (i32.const 16932) "a") (data (i32.const 16935) "a") (data (i32.const 16938) "a") (data (i32.const 16941) "a") (data (i32.const 16944) "a") (data (i32.const 16947) "a") (data (i32.const 16950) "a") (data (i32.const 16953) "a") (data (i32.const 16956) "a") (data (i32.const 16959) "a") (data (i32.const 16962) "a") (data (i32.const 16965) "a") (data (i32.const 16968) "a") (data (i32.const 16971) "a") (data (i32.const 16974) "a") (data (i32.const 16977) "a") (data (i32.const 16980) "a") (data (i32.const 16983) "a") (data (i32.const 16986) "a") (data (i32.const 16989) "a") (data (i32.const 16992) "a") (data (i32.const 16995) "a") (data (i32.const 16998) "a") (data (i32.const 17001) "a") (data (i32.const 17004) "a") (data (i32.const 17007) "a") (data (i32.const 17010) "a") (data (i32.const 17013) "a") (data (i32.const 17016) "a") (data (i32.const 17019) "a") (data (i32.const 17022) "a") (data (i32.const 17025) "a") (data (i32.const 17028) "a") (data (i32.const 17031) "a") (data (i32.const 17034) "a") (data (i32.const 17037) "a") (data (i32.const 17040) "a") (data (i32.const 17043) "a") (data (i32.const 17046) "a") (data (i32.const 17049) "a") (data (i32.const 17052) "a") (data (i32.const 17055) "a") (data (i32.const 17058) "a") (data (i32.const 17061) "a") (data (i32.const 17064) "a") (data (i32.const 17067) "a") (data (i32.const 17070) "a") (data (i32.const 17073) "a") (data (i32.const 17076) "a") (data (i32.const 17079) "a") (data (i32.const 17082) "a") (data (i32.const 17085) "a") (data (i32.const 17088) "a") (data (i32.const 17091) "a") (data (i32.const 17094) "a") (data (i32.const 17097) "a") (data (i32.const 17100) "a") (data (i32.const 17103) "a") (data (i32.const 17106) "a") (data (i32.const 17109) "a") (data (i32.const 17112) "a") (data (i32.const 17115) "a") (data (i32.const 17118) "a") (data (i32.const 17121) "a") (data (i32.const 17124) "a") (data (i32.const 17127) "a") (data (i32.const 17130) "a") (data (i32.const 17133) "a") (data (i32.const 17136) "a") (data (i32.const 17139) "a") (data (i32.const 17142) "a") (data (i32.const 17145) "a") (data (i32.const 17148) "a") (data (i32.const 17151) "a") (data (i32.const 17154) "a") (data (i32.const 17157) "a") (data (i32.const 17160) "a") (data (i32.const 17163) "a") (data (i32.const 17166) "a") (data (i32.const 17169) "a") (data (i32.const 17172) "a") (data (i32.const 17175) "a") (data (i32.const 17178) "a") (data (i32.const 17181) "a") (data (i32.const 17184) "a") (data (i32.const 17187) "a") (data (i32.const 17190) "a") (data (i32.const 17193) "a") (data (i32.const 17196) "a") (data (i32.const 17199) "a") (data (i32.const 17202) "a") (data (i32.const 17205) "a") (data (i32.const 17208) "a") (data (i32.const 17211) "a") (data (i32.const 17214) "a") (data (i32.const 17217) "a") (data (i32.const 17220) "a") (data (i32.const 17223) "a") (data (i32.const 17226) "a") (data (i32.const 17229) "a") (data (i32.const 17232) "a") (data (i32.const 17235) "a") (data (i32.const 17238) "a") (data (i32.const 17241) "a") (data (i32.const 17244) "a") (data (i32.const 17247) "a") (data (i32.const 17250) "a") (data (i32.const 17253) "a") (data (i32.const 17256) "a") (data (i32.const 17259) "a") (data (i32.const 17262) "a") (data (i32.const 17265) "a") (data (i32.const 17268) "a") (data (i32.const 17271) "a") (data (i32.const 17274) "a") (data (i32.const 17277) "a") (data (i32.const 17280) "a") (data (i32.const 17283) "a") (data (i32.const 17286) "a") (data (i32.const 17289) "a") (data (i32.const 17292) "a") (data (i32.const 17295) "a") (data (i32.const 17298) "a") (data (i32.const 17301) "a") (data (i32.const 17304) "a") (data (i32.const 17307) "a") (data (i32.const 17310) "a") (data (i32.const 17313) "a") (data (i32.const 17316) "a") (data (i32.const 17319) "a") (data (i32.const 17322) "a") (data (i32.const 17325) "a") (data (i32.const 17328) "a") (data (i32.const 17331) "a") (data (i32.const 17334) "a") (data (i32.const 17337) "a") (data (i32.const 17340) "a") (data (i32.const 17343) "a") (data (i32.const 17346) "a") (data (i32.const 17349) "a") (data (i32.const 17352) "a") (data (i32.const 17355) "a") (data (i32.const 17358) "a") (data (i32.const 17361) "a") (data (i32.const 17364) "a") (data (i32.const 17367) "a") (data (i32.const 17370) "a") (data (i32.const 17373) "a") (data (i32.const 17376) "a") (data (i32.const 17379) "a") (data (i32.const 17382) "a") (data (i32.const 17385) "a") (data (i32.const 17388) "a") (data (i32.const 17391) "a") (data (i32.const 17394) "a") (data (i32.const 17397) "a") (data (i32.const 17400) "a") (data (i32.const 17403) "a") (data (i32.const 17406) "a") (data (i32.const 17409) "a") (data (i32.const 17412) "a") (data (i32.const 17415) "a") (data (i32.const 17418) "a") (data (i32.const 17421) "a") (data (i32.const 17424) "a") (data (i32.const 17427) "a") (data (i32.const 17430) "a") (data (i32.const 17433) "a") (data (i32.const 17436) "a") (data (i32.const 17439) "a") (data (i32.const 17442) "a") (data (i32.const 17445) "a") (data (i32.const 17448) "a") (data (i32.const 17451) "a") (data (i32.const 17454) "a") (data (i32.const 17457) "a") (data (i32.const 17460) "a") (data (i32.const 17463) "a") (data (i32.const 17466) "a") (data (i32.const 17469) "a") (data (i32.const 17472) "a") (data (i32.const 17475) "a") (data (i32.const 17478) "a") (data (i32.const 17481) "a") (data (i32.const 17484) "a") (data (i32.const 17487) "a") (data (i32.const 17490) "a") (data (i32.const 17493) "a") (data (i32.const 17496) "a") (data (i32.const 17499) "a") (data (i32.const 17502) "a") (data (i32.const 17505) "a") (data (i32.const 17508) "a") (data (i32.const 17511) "a") (data (i32.const 17514) "a") (data (i32.const 17517) "a") (data (i32.const 17520) "a") (data (i32.const 17523) "a") (data (i32.const 17526) "a") (data (i32.const 17529) "a") (data (i32.const 17532) "a") (data (i32.const 17535) "a") (data (i32.const 17538) "a") (data (i32.const 17541) "a") (data (i32.const 17544) "a") (data (i32.const 17547) "a") (data (i32.const 17550) "a") (data (i32.const 17553) "a") (data (i32.const 17556) "a") (data (i32.const 17559) "a") (data (i32.const 17562) "a") (data (i32.const 17565) "a") (data (i32.const 17568) "a") (data (i32.const 17571) "a") (data (i32.const 17574) "a") (data (i32.const 17577) "a") (data (i32.const 17580) "a") (data (i32.const 17583) "a") (data (i32.const 17586) "a") (data (i32.const 17589) "a") (data (i32.const 17592) "a") (data (i32.const 17595) "a") (data (i32.const 17598) "a") (data (i32.const 17601) "a") (data (i32.const 17604) "a") (data (i32.const 17607) "a") (data (i32.const 17610) "a") (data (i32.const 17613) "a") (data (i32.const 17616) "a") (data (i32.const 17619) "a") (data (i32.const 17622) "a") (data (i32.const 17625) "a") (data (i32.const 17628) "a") (data (i32.const 17631) "a") (data (i32.const 17634) "a") (data (i32.const 17637) "a") (data (i32.const 17640) "a") (data (i32.const 17643) "a") (data (i32.const 17646) "a") (data (i32.const 17649) "a") (data (i32.const 17652) "a") (data (i32.const 17655) "a") (data (i32.const 17658) "a") (data (i32.const 17661) "a") (data (i32.const 17664) "a") (data (i32.const 17667) "a") (data (i32.const 17670) "a") (data (i32.const 17673) "a") (data (i32.const 17676) "a") (data (i32.const 17679) "a") (data (i32.const 17682) "a") (data (i32.const 17685) "a") (data (i32.const 17688) "a") (data (i32.const 17691) "a") (data (i32.const 17694) "a") (data (i32.const 17697) "a") (data (i32.const 17700) "a") (data (i32.const 17703) "a") (data (i32.const 17706) "a") (data (i32.const 17709) "a") (data (i32.const 17712) "a") (data (i32.const 17715) "a") (data (i32.const 17718) "a") (data (i32.const 17721) "a") (data (i32.const 17724) "a") (data (i32.const 17727) "a") (data (i32.const 17730) "a") (data (i32.const 17733) "a") (data (i32.const 17736) "a") (data (i32.const 17739) "a") (data (i32.const 17742) "a") (data (i32.const 17745) "a") (data (i32.const 17748) "a") (data (i32.const 17751) "a") (data (i32.const 17754) "a") (data (i32.const 17757) "a") (data (i32.const 17760) "a") (data (i32.const 17763) "a") (data (i32.const 17766) "a") (data (i32.const 17769) "a") (data (i32.const 17772) "a") (data (i32.const 17775) "a") (data (i32.const 17778) "a") (data (i32.const 17781) "a") (data (i32.const 17784) "a") (data (i32.const 17787) "a") (data (i32.const 17790) "a") (data (i32.const 17793) "a") (data (i32.const 17796) "a") (data (i32.const 17799) "a") (data (i32.const 17802) "a") (data (i32.const 17805) "a") (data (i32.const 17808) "a") (data (i32.const 17811) "a") (data (i32.const 17814) "a") (data (i32.const 17817) "a") (data (i32.const 17820) "a") (data (i32.const 17823) "a") (data (i32.const 17826) "a") (data (i32.const 17829) "a") (data (i32.const 17832) "a") (data (i32.const 17835) "a") (data (i32.const 17838) "a") (data (i32.const 17841) "a") (data (i32.const 17844) "a") (data (i32.const 17847) "a") (data (i32.const 17850) "a") (data (i32.const 17853) "a") (data (i32.const 17856) "a") (data (i32.const 17859) "a") (data (i32.const 17862) "a") (data (i32.const 17865) "a") (data (i32.const 17868) "a") (data (i32.const 17871) "a") (data (i32.const 17874) "a") (data (i32.const 17877) "a") (data (i32.const 17880) "a") (data (i32.const 17883) "a") (data (i32.const 17886) "a") (data (i32.const 17889) "a") (data (i32.const 17892) "a") (data (i32.const 17895) "a") (data (i32.const 17898) "a") (data (i32.const 17901) "a") (data (i32.const 17904) "a") (data (i32.const 17907) "a") (data (i32.const 17910) "a") (data (i32.const 17913) "a") (data (i32.const 17916) "a") (data (i32.const 17919) "a") (data (i32.const 17922) "a") (data (i32.const 17925) "a") (data (i32.const 17928) "a") (data (i32.const 17931) "a") (data (i32.const 17934) "a") (data (i32.const 17937) "a") (data (i32.const 17940) "a") (data (i32.const 17943) "a") (data (i32.const 17946) "a") (data (i32.const 17949) "a") (data (i32.const 17952) "a") (data (i32.const 17955) "a") (data (i32.const 17958) "a") (data (i32.const 17961) "a") (data (i32.const 17964) "a") (data (i32.const 17967) "a") (data (i32.const 17970) "a") (data (i32.const 17973) "a") (data (i32.const 17976) "a") (data (i32.const 17979) "a") (data (i32.const 17982) "a") (data (i32.const 17985) "a") (data (i32.const 17988) "a") (data (i32.const 17991) "a") (data (i32.const 17994) "a") (data (i32.const 17997) "a") (data (i32.const 18000) "a") (data (i32.const 18003) "a") (data (i32.const 18006) "a") (data (i32.const 18009) "a") (data (i32.const 18012) "a") (data (i32.const 18015) "a") (data (i32.const 18018) "a") (data (i32.const 18021) "a") (data (i32.const 18024) "a") (data (i32.const 18027) "a") (data (i32.const 18030) "a") (data (i32.const 18033) "a") (data (i32.const 18036) "a") (data (i32.const 18039) "a") (data (i32.const 18042) "a") (data (i32.const 18045) "a") (data (i32.const 18048) "a") (data (i32.const 18051) "a") (data (i32.const 18054) "a") (data (i32.const 18057) "a") (data (i32.const 18060) "a") (data (i32.const 18063) "a") (data (i32.const 18066) "a") (data (i32.const 18069) "a") (data (i32.const 18072) "a") (data (i32.const 18075) "a") (data (i32.const 18078) "a") (data (i32.const 18081) "a") (data (i32.const 18084) "a") (data (i32.const 18087) "a") (data (i32.const 18090) "a") (data (i32.const 18093) "a") (data (i32.const 18096) "a") (data (i32.const 18099) "a") (data (i32.const 18102) "a") (data (i32.const 18105) "a") (data (i32.const 18108) "a") (data (i32.const 18111) "a") (data (i32.const 18114) "a") (data (i32.const 18117) "a") (data (i32.const 18120) "a") (data (i32.const 18123) "a") (data (i32.const 18126) "a") (data (i32.const 18129) "a") (data (i32.const 18132) "a") (data (i32.const 18135) "a") (data (i32.const 18138) "a") (data (i32.const 18141) "a") (data (i32.const 18144) "a") (data (i32.const 18147) "a") (data (i32.const 18150) "a") (data (i32.const 18153) "a") (data (i32.const 18156) "a") (data (i32.const 18159) "a") (data (i32.const 18162) "a") (data (i32.const 18165) "a") (data (i32.const 18168) "a") (data (i32.const 18171) "a") (data (i32.const 18174) "a") (data (i32.const 18177) "a") (data (i32.const 18180) "a") (data (i32.const 18183) "a") (data (i32.const 18186) "a") (data (i32.const 18189) "a") (data (i32.const 18192) "a") (data (i32.const 18195) "a") (data (i32.const 18198) "a") (data (i32.const 18201) "a") (data (i32.const 18204) "a") (data (i32.const 18207) "a") (data (i32.const 18210) "a") (data (i32.const 18213) "a") (data (i32.const 18216) "a") (data (i32.const 18219) "a") (data (i32.const 18222) "a") (data (i32.const 18225) "a") (data (i32.const 18228) "a") (data (i32.const 18231) "a") (data (i32.const 18234) "a") (data (i32.const 18237) "a") (data (i32.const 18240) "a") (data (i32.const 18243) "a") (data (i32.const 18246) "a") (data (i32.const 18249) "a") (data (i32.const 18252) "a") (data (i32.const 18255) "a") (data (i32.const 18258) "a") (data (i32.const 18261) "a") (data (i32.const 18264) "a") (data (i32.const 18267) "a") (data (i32.const 18270) "a") (data (i32.const 18273) "a") (data (i32.const 18276) "a") (data (i32.const 18279) "a") (data (i32.const 18282) "a") (data (i32.const 18285) "a") (data (i32.const 18288) "a") (data (i32.const 18291) "a") (data (i32.const 18294) "a") (data (i32.const 18297) "a") (data (i32.const 18300) "a") (data (i32.const 18303) "a") (data (i32.const 18306) "a") (data (i32.const 18309) "a") (data (i32.const 18312) "a") (data (i32.const 18315) "a") (data (i32.const 18318) "a") (data (i32.const 18321) "a") (data (i32.const 18324) "a") (data (i32.const 18327) "a") (data (i32.const 18330) "a") (data (i32.const 18333) "a") (data (i32.const 18336) "a") (data (i32.const 18339) "a") (data (i32.const 18342) "a") (data (i32.const 18345) "a") (data (i32.const 18348) "a") (data (i32.const 18351) "a") (data (i32.const 18354) "a") (data (i32.const 18357) "a") (data (i32.const 18360) "a") (data (i32.const 18363) "a") (data (i32.const 18366) "a") (data (i32.const 18369) "a") (data (i32.const 18372) "a") (data (i32.const 18375) "a") (data (i32.const 18378) "a") (data (i32.const 18381) "a") (data (i32.const 18384) "a") (data (i32.const 18387) "a") (data (i32.const 18390) "a") (data (i32.const 18393) "a") (data (i32.const 18396) "a") (data (i32.const 18399) "a") (data (i32.const 18402) "a") (data (i32.const 18405) "a") (data (i32.const 18408) "a") (data (i32.const 18411) "a") (data (i32.const 18414) "a") (data (i32.const 18417) "a") (data (i32.const 18420) "a") (data (i32.const 18423) "a") (data (i32.const 18426) "a") (data (i32.const 18429) "a") (data (i32.const 18432) "a") (data (i32.const 18435) "a") (data (i32.const 18438) "a") (data (i32.const 18441) "a") (data (i32.const 18444) "a") (data (i32.const 18447) "a") (data (i32.const 18450) "a") (data (i32.const 18453) "a") (data (i32.const 18456) "a") (data (i32.const 18459) "a") (data (i32.const 18462) "a") (data (i32.const 18465) "a") (data (i32.const 18468) "a") (data (i32.const 18471) "a") (data (i32.const 18474) "a") (data (i32.const 18477) "a") (data (i32.const 18480) "a") (data (i32.const 18483) "a") (data (i32.const 18486) "a") (data (i32.const 18489) "a") (data (i32.const 18492) "a") (data (i32.const 18495) "a") (data (i32.const 18498) "a") (data (i32.const 18501) "a") (data (i32.const 18504) "a") (data (i32.const 18507) "a") (data (i32.const 18510) "a") (data (i32.const 18513) "a") (data (i32.const 18516) "a") (data (i32.const 18519) "a") (data (i32.const 18522) "a") (data (i32.const 18525) "a") (data (i32.const 18528) "a") (data (i32.const 18531) "a") (data (i32.const 18534) "a") (data (i32.const 18537) "a") (data (i32.const 18540) "a") (data (i32.const 18543) "a") (data (i32.const 18546) "a") (data (i32.const 18549) "a") (data (i32.const 18552) "a") (data (i32.const 18555) "a") (data (i32.const 18558) "a") (data (i32.const 18561) "a") (data (i32.const 18564) "a") (data (i32.const 18567) "a") (data (i32.const 18570) "a") (data (i32.const 18573) "a") (data (i32.const 18576) "a") (data (i32.const 18579) "a") (data (i32.const 18582) "a") (data (i32.const 18585) "a") (data (i32.const 18588) "a") (data (i32.const 18591) "a") (data (i32.const 18594) "a") (data (i32.const 18597) "a") (data (i32.const 18600) "a") (data (i32.const 18603) "a") (data (i32.const 18606) "a") (data (i32.const 18609) "a") (data (i32.const 18612) "a") (data (i32.const 18615) "a") (data (i32.const 18618) "a") (data (i32.const 18621) "a") (data (i32.const 18624) "a") (data (i32.const 18627) "a") (data (i32.const 18630) "a") (data (i32.const 18633) "a") (data (i32.const 18636) "a") (data (i32.const 18639) "a") (data (i32.const 18642) "a") (data (i32.const 18645) "a") (data (i32.const 18648) "a") (data (i32.const 18651) "a") (data (i32.const 18654) "a") (data (i32.const 18657) "a") (data (i32.const 18660) "a") (data (i32.const 18663) "a") (data (i32.const 18666) "a") (data (i32.const 18669) "a") (data (i32.const 18672) "a") (data (i32.const 18675) "a") (data (i32.const 18678) "a") (data (i32.const 18681) "a") (data (i32.const 18684) "a") (data (i32.const 18687) "a") (data (i32.const 18690) "a") (data (i32.const 18693) "a") (data (i32.const 18696) "a") (data (i32.const 18699) "a") (data (i32.const 18702) "a") (data (i32.const 18705) "a") (data (i32.const 18708) "a") (data (i32.const 18711) "a") (data (i32.const 18714) "a") (data (i32.const 18717) "a") (data (i32.const 18720) "a") (data (i32.const 18723) "a") (data (i32.const 18726) "a") (data (i32.const 18729) "a") (data (i32.const 18732) "a") (data (i32.const 18735) "a") (data (i32.const 18738) "a") (data (i32.const 18741) "a") (data (i32.const 18744) "a") (data (i32.const 18747) "a") (data (i32.const 18750) "a") (data (i32.const 18753) "a") (data (i32.const 18756) "a") (data (i32.const 18759) "a") (data (i32.const 18762) "a") (data (i32.const 18765) "a") (data (i32.const 18768) "a") (data (i32.const 18771) "a") (data (i32.const 18774) "a") (data (i32.const 18777) "a") (data (i32.const 18780) "a") (data (i32.const 18783) "a") (data (i32.const 18786) "a") (data (i32.const 18789) "a") (data (i32.const 18792) "a") (data (i32.const 18795) "a") (data (i32.const 18798) "a") (data (i32.const 18801) "a") (data (i32.const 18804) "a") (data (i32.const 18807) "a") (data (i32.const 18810) "a") (data (i32.const 18813) "a") (data (i32.const 18816) "a") (data (i32.const 18819) "a") (data (i32.const 18822) "a") (data (i32.const 18825) "a") (data (i32.const 18828) "a") (data (i32.const 18831) "a") (data (i32.const 18834) "a") (data (i32.const 18837) "a") (data (i32.const 18840) "a") (data (i32.const 18843) "a") (data (i32.const 18846) "a") (data (i32.const 18849) "a") (data (i32.const 18852) "a") (data (i32.const 18855) "a") (data (i32.const 18858) "a") (data (i32.const 18861) "a") (data (i32.const 18864) "a") (data (i32.const 18867) "a") (data (i32.const 18870) "a") (data (i32.const 18873) "a") (data (i32.const 18876) "a") (data (i32.const 18879) "a") (data (i32.const 18882) "a") (data (i32.const 18885) "a") (data (i32.const 18888) "a") (data (i32.const 18891) "a") (data (i32.const 18894) "a") (data (i32.const 18897) "a") (data (i32.const 18900) "a") (data (i32.const 18903) "a") (data (i32.const 18906) "a") (data (i32.const 18909) "a") (data (i32.const 18912) "a") (data (i32.const 18915) "a") (data (i32.const 18918) "a") (data (i32.const 18921) "a") (data (i32.const 18924) "a") (data (i32.const 18927) "a") (data (i32.const 18930) "a") (data (i32.const 18933) "a") (data (i32.const 18936) "a") (data (i32.const 18939) "a") (data (i32.const 18942) "a") (data (i32.const 18945) "a") (data (i32.const 18948) "a") (data (i32.const 18951) "a") (data (i32.const 18954) "a") (data (i32.const 18957) "a") (data (i32.const 18960) "a") (data (i32.const 18963) "a") (data (i32.const 18966) "a") (data (i32.const 18969) "a") (data (i32.const 18972) "a") (data (i32.const 18975) "a") (data (i32.const 18978) "a") (data (i32.const 18981) "a") (data (i32.const 18984) "a") (data (i32.const 18987) "a") (data (i32.const 18990) "a") (data (i32.const 18993) "a") (data (i32.const 18996) "a") (data (i32.const 18999) "a") (data (i32.const 19002) "a") (data (i32.const 19005) "a") (data (i32.const 19008) "a") (data (i32.const 19011) "a") (data (i32.const 19014) "a") (data (i32.const 19017) "a") (data (i32.const 19020) "a") (data (i32.const 19023) "a") (data (i32.const 19026) "a") (data (i32.const 19029) "a") (data (i32.const 19032) "a") (data (i32.const 19035) "a") (data (i32.const 19038) "a") (data (i32.const 19041) "a") (data (i32.const 19044) "a") (data (i32.const 19047) "a") (data (i32.const 19050) "a") (data (i32.const 19053) "a") (data (i32.const 19056) "a") (data (i32.const 19059) "a") (data (i32.const 19062) "a") (data (i32.const 19065) "a") (data (i32.const 19068) "a") (data (i32.const 19071) "a") (data (i32.const 19074) "a") (data (i32.const 19077) "a") (data (i32.const 19080) "a") (data (i32.const 19083) "a") (data (i32.const 19086) "a") (data (i32.const 19089) "a") (data (i32.const 19092) "a") (data (i32.const 19095) "a") (data (i32.const 19098) "a") (data (i32.const 19101) "a") (data (i32.const 19104) "a") (data (i32.const 19107) "a") (data (i32.const 19110) "a") (data (i32.const 19113) "a") (data (i32.const 19116) "a") (data (i32.const 19119) "a") (data (i32.const 19122) "a") (data (i32.const 19125) "a") (data (i32.const 19128) "a") (data (i32.const 19131) "a") (data (i32.const 19134) "a") (data (i32.const 19137) "a") (data (i32.const 19140) "a") (data (i32.const 19143) "a") (data (i32.const 19146) "a") (data (i32.const 19149) "a") (data (i32.const 19152) "a") (data (i32.const 19155) "a") (data (i32.const 19158) "a") (data (i32.const 19161) "a") (data (i32.const 19164) "a") (data (i32.const 19167) "a") (data (i32.const 19170) "a") (data (i32.const 19173) "a") (data (i32.const 19176) "a") (data (i32.const 19179) "a") (data (i32.const 19182) "a") (data (i32.const 19185) "a") (data (i32.const 19188) "a") (data (i32.const 19191) "a") (data (i32.const 19194) "a") (data (i32.const 19197) "a") (data (i32.const 19200) "a") (data (i32.const 19203) "a") (data (i32.const 19206) "a") (data (i32.const 19209) "a") (data (i32.const 19212) "a") (data (i32.const 19215) "a") (data (i32.const 19218) "a") (data (i32.const 19221) "a") (data (i32.const 19224) "a") (data (i32.const 19227) "a") (data (i32.const 19230) "a") (data (i32.const 19233) "a") (data (i32.const 19236) "a") (data (i32.const 19239) "a") (data (i32.const 19242) "a") (data (i32.const 19245) "a") (data (i32.const 19248) "a") (data (i32.const 19251) "a") (data (i32.const 19254) "a") (data (i32.const 19257) "a") (data (i32.const 19260) "a") (data (i32.const 19263) "a") (data (i32.const 19266) "a") (data (i32.const 19269) "a") (data (i32.const 19272) "a") (data (i32.const 19275) "a") (data (i32.const 19278) "a") (data (i32.const 19281) "a") (data (i32.const 19284) "a") (data (i32.const 19287) "a") (data (i32.const 19290) "a") (data (i32.const 19293) "a") (data (i32.const 19296) "a") (data (i32.const 19299) "a") (data (i32.const 19302) "a") (data (i32.const 19305) "a") (data (i32.const 19308) "a") (data (i32.const 19311) "a") (data (i32.const 19314) "a") (data (i32.const 19317) "a") (data (i32.const 19320) "a") (data (i32.const 19323) "a") (data (i32.const 19326) "a") (data (i32.const 19329) "a") (data (i32.const 19332) "a") (data (i32.const 19335) "a") (data (i32.const 19338) "a") (data (i32.const 19341) "a") (data (i32.const 19344) "a") (data (i32.const 19347) "a") (data (i32.const 19350) "a") (data (i32.const 19353) "a") (data (i32.const 19356) "a") (data (i32.const 19359) "a") (data (i32.const 19362) "a") (data (i32.const 19365) "a") (data (i32.const 19368) "a") (data (i32.const 19371) "a") (data (i32.const 19374) "a") (data (i32.const 19377) "a") (data (i32.const 19380) "a") (data (i32.const 19383) "a") (data (i32.const 19386) "a") (data (i32.const 19389) "a") (data (i32.const 19392) "a") (data (i32.const 19395) "a") (data (i32.const 19398) "a") (data (i32.const 19401) "a") (data (i32.const 19404) "a") (data (i32.const 19407) "a") (data (i32.const 19410) "a") (data (i32.const 19413) "a") (data (i32.const 19416) "a") (data (i32.const 19419) "a") (data (i32.const 19422) "a") (data (i32.const 19425) "a") (data (i32.const 19428) "a") (data (i32.const 19431) "a") (data (i32.const 19434) "a") (data (i32.const 19437) "a") (data (i32.const 19440) "a") (data (i32.const 19443) "a") (data (i32.const 19446) "a") (data (i32.const 19449) "a") (data (i32.const 19452) "a") (data (i32.const 19455) "a") (data (i32.const 19458) "a") (data (i32.const 19461) "a") (data (i32.const 19464) "a") (data (i32.const 19467) "a") (data (i32.const 19470) "a") (data (i32.const 19473) "a") (data (i32.const 19476) "a") (data (i32.const 19479) "a") (data (i32.const 19482) "a") (data (i32.const 19485) "a") (data (i32.const 19488) "a") (data (i32.const 19491) "a") (data (i32.const 19494) "a") (data (i32.const 19497) "a") (data (i32.const 19500) "a") (data (i32.const 19503) "a") (data (i32.const 19506) "a") (data (i32.const 19509) "a") (data (i32.const 19512) "a") (data (i32.const 19515) "a") (data (i32.const 19518) "a") (data (i32.const 19521) "a") (data (i32.const 19524) "a") (data (i32.const 19527) "a") (data (i32.const 19530) "a") (data (i32.const 19533) "a") (data (i32.const 19536) "a") (data (i32.const 19539) "a") (data (i32.const 19542) "a") (data (i32.const 19545) "a") (data (i32.const 19548) "a") (data (i32.const 19551) "a") (data (i32.const 19554) "a") (data (i32.const 19557) "a") (data (i32.const 19560) "a") (data (i32.const 19563) "a") (data (i32.const 19566) "a") (data (i32.const 19569) "a") (data (i32.const 19572) "a") (data (i32.const 19575) "a") (data (i32.const 19578) "a") (data (i32.const 19581) "a") (data (i32.const 19584) "a") (data (i32.const 19587) "a") (data (i32.const 19590) "a") (data (i32.const 19593) "a") (data (i32.const 19596) "a") (data (i32.const 19599) "a") (data (i32.const 19602) "a") (data (i32.const 19605) "a") (data (i32.const 19608) "a") (data (i32.const 19611) "a") (data (i32.const 19614) "a") (data (i32.const 19617) "a") (data (i32.const 19620) "a") (data (i32.const 19623) "a") (data (i32.const 19626) "a") (data (i32.const 19629) "a") (data (i32.const 19632) "a") (data (i32.const 19635) "a") (data (i32.const 19638) "a") (data (i32.const 19641) "a") (data (i32.const 19644) "a") (data (i32.const 19647) "a") (data (i32.const 19650) "a") (data (i32.const 19653) "a") (data (i32.const 19656) "a") (data (i32.const 19659) "a") (data (i32.const 19662) "a") (data (i32.const 19665) "a") (data (i32.const 19668) "a") (data (i32.const 19671) "a") (data (i32.const 19674) "a") (data (i32.const 19677) "a") (data (i32.const 19680) "a") (data (i32.const 19683) "a") (data (i32.const 19686) "a") (data (i32.const 19689) "a") (data (i32.const 19692) "a") (data (i32.const 19695) "a") (data (i32.const 19698) "a") (data (i32.const 19701) "a") (data (i32.const 19704) "a") (data (i32.const 19707) "a") (data (i32.const 19710) "a") (data (i32.const 19713) "a") (data (i32.const 19716) "a") (data (i32.const 19719) "a") (data (i32.const 19722) "a") (data (i32.const 19725) "a") (data (i32.const 19728) "a") (data (i32.const 19731) "a") (data (i32.const 19734) "a") (data (i32.const 19737) "a") (data (i32.const 19740) "a") (data (i32.const 19743) "a") (data (i32.const 19746) "a") (data (i32.const 19749) "a") (data (i32.const 19752) "a") (data (i32.const 19755) "a") (data (i32.const 19758) "a") (data (i32.const 19761) "a") (data (i32.const 19764) "a") (data (i32.const 19767) "a") (data (i32.const 19770) "a") (data (i32.const 19773) "a") (data (i32.const 19776) "a") (data (i32.const 19779) "a") (data (i32.const 19782) "a") (data (i32.const 19785) "a") (data (i32.const 19788) "a") (data (i32.const 19791) "a") (data (i32.const 19794) "a") (data (i32.const 19797) "a") (data (i32.const 19800) "a") (data (i32.const 19803) "a") (data (i32.const 19806) "a") (data (i32.const 19809) "a") (data (i32.const 19812) "a") (data (i32.const 19815) "a") (data (i32.const 19818) "a") (data (i32.const 19821) "a") (data (i32.const 19824) "a") (data (i32.const 19827) "a") (data (i32.const 19830) "a") (data (i32.const 19833) "a") (data (i32.const 19836) "a") (data (i32.const 19839) "a") (data (i32.const 19842) "a") (data (i32.const 19845) "a") (data (i32.const 19848) "a") (data (i32.const 19851) "a") (data (i32.const 19854) "a") (data (i32.const 19857) "a") (data (i32.const 19860) "a") (data (i32.const 19863) "a") (data (i32.const 19866) "a") (data (i32.const 19869) "a") (data (i32.const 19872) "a") (data (i32.const 19875) "a") (data (i32.const 19878) "a") (data (i32.const 19881) "a") (data (i32.const 19884) "a") (data (i32.const 19887) "a") (data (i32.const 19890) "a") (data (i32.const 19893) "a") (data (i32.const 19896) "a") (data (i32.const 19899) "a") (data (i32.const 19902) "a") (data (i32.const 19905) "a") (data (i32.const 19908) "a") (data (i32.const 19911) "a") (data (i32.const 19914) "a") (data (i32.const 19917) "a") (data (i32.const 19920) "a") (data (i32.const 19923) "a") (data (i32.const 19926) "a") (data (i32.const 19929) "a") (data (i32.const 19932) "a") (data (i32.const 19935) "a") (data (i32.const 19938) "a") (data (i32.const 19941) "a") (data (i32.const 19944) "a") (data (i32.const 19947) "a") (data (i32.const 19950) "a") (data (i32.const 19953) "a") (data (i32.const 19956) "a") (data (i32.const 19959) "a") (data (i32.const 19962) "a") (data (i32.const 19965) "a") (data (i32.const 19968) "a") (data (i32.const 19971) "a") (data (i32.const 19974) "a") (data (i32.const 19977) "a") (data (i32.const 19980) "a") (data (i32.const 19983) "a") (data (i32.const 19986) "a") (data (i32.const 19989) "a") (data (i32.const 19992) "a") (data (i32.const 19995) "a") (data (i32.const 19998) "a") (data (i32.const 20001) "a") (data (i32.const 20004) "a") (data (i32.const 20007) "a") (data (i32.const 20010) "a") (data (i32.const 20013) "a") (data (i32.const 20016) "a") (data (i32.const 20019) "a") (data (i32.const 20022) "a") (data (i32.const 20025) "a") (data (i32.const 20028) "a") (data (i32.const 20031) "a") (data (i32.const 20034) "a") (data (i32.const 20037) "a") (data (i32.const 20040) "a") (data (i32.const 20043) "a") (data (i32.const 20046) "a") (data (i32.const 20049) "a") (data (i32.const 20052) "a") (data (i32.const 20055) "a") (data (i32.const 20058) "a") (data (i32.const 20061) "a") (data (i32.const 20064) "a") (data (i32.const 20067) "a") (data (i32.const 20070) "a") (data (i32.const 20073) "a") (data (i32.const 20076) "a") (data (i32.const 20079) "a") (data (i32.const 20082) "a") (data (i32.const 20085) "a") (data (i32.const 20088) "a") (data (i32.const 20091) "a") (data (i32.const 20094) "a") (data (i32.const 20097) "a") (data (i32.const 20100) "a") (data (i32.const 20103) "a") (data (i32.const 20106) "a") (data (i32.const 20109) "a") (data (i32.const 20112) "a") (data (i32.const 20115) "a") (data (i32.const 20118) "a") (data (i32.const 20121) "a") (data (i32.const 20124) "a") (data (i32.const 20127) "a") (data (i32.const 20130) "a") (data (i32.const 20133) "a") (data (i32.const 20136) "a") (data (i32.const 20139) "a") (data (i32.const 20142) "a") (data (i32.const 20145) "a") (data (i32.const 20148) "a") (data (i32.const 20151) "a") (data (i32.const 20154) "a") (data (i32.const 20157) "a") (data (i32.const 20160) "a") (data (i32.const 20163) "a") (data (i32.const 20166) "a") (data (i32.const 20169) "a") (data (i32.const 20172) "a") (data (i32.const 20175) "a") (data (i32.const 20178) "a") (data (i32.const 20181) "a") (data (i32.const 20184) "a") (data (i32.const 20187) "a") (data (i32.const 20190) "a") (data (i32.const 20193) "a") (data (i32.const 20196) "a") (data (i32.const 20199) "a") (data (i32.const 20202) "a") (data (i32.const 20205) "a") (data (i32.const 20208) "a") (data (i32.const 20211) "a") (data (i32.const 20214) "a") (data (i32.const 20217) "a") (data (i32.const 20220) "a") (data (i32.const 20223) "a") (data (i32.const 20226) "a") (data (i32.const 20229) "a") (data (i32.const 20232) "a") (data (i32.const 20235) "a") (data (i32.const 20238) "a") (data (i32.const 20241) "a") (data (i32.const 20244) "a") (data (i32.const 20247) "a") (data (i32.const 20250) "a") (data (i32.const 20253) "a") (data (i32.const 20256) "a") (data (i32.const 20259) "a") (data (i32.const 20262) "a") (data (i32.const 20265) "a") (data (i32.const 20268) "a") (data (i32.const 20271) "a") (data (i32.const 20274) "a") (data (i32.const 20277) "a") (data (i32.const 20280) "a") (data (i32.const 20283) "a") (data (i32.const 20286) "a") (data (i32.const 20289) "a") (data (i32.const 20292) "a") (data (i32.const 20295) "a") (data (i32.const 20298) "a") (data (i32.const 20301) "a") (data (i32.const 20304) "a") (data (i32.const 20307) "a") (data (i32.const 20310) "a") (data (i32.const 20313) "a") (data (i32.const 20316) "a") (data (i32.const 20319) "a") (data (i32.const 20322) "a") (data (i32.const 20325) "a") (data (i32.const 20328) "a") (data (i32.const 20331) "a") (data (i32.const 20334) "a") (data (i32.const 20337) "a") (data (i32.const 20340) "a") (data (i32.const 20343) "a") (data (i32.const 20346) "a") (data (i32.const 20349) "a") (data (i32.const 20352) "a") (data (i32.const 20355) "a") (data (i32.const 20358) "a") (data (i32.const 20361) "a") (data (i32.const 20364) "a") (data (i32.const 20367) "a") (data (i32.const 20370) "a") (data (i32.const 20373) "a") (data (i32.const 20376) "a") (data (i32.const 20379) "a") (data (i32.const 20382) "a") (data (i32.const 20385) "a") (data (i32.const 20388) "a") (data (i32.const 20391) "a") (data (i32.const 20394) "a") (data (i32.const 20397) "a") (data (i32.const 20400) "a") (data (i32.const 20403) "a") (data (i32.const 20406) "a") (data (i32.const 20409) "a") (data (i32.const 20412) "a") (data (i32.const 20415) "a") (data (i32.const 20418) "a") (data (i32.const 20421) "a") (data (i32.const 20424) "a") (data (i32.const 20427) "a") (data (i32.const 20430) "a") (data (i32.const 20433) "a") (data (i32.const 20436) "a") (data (i32.const 20439) "a") (data (i32.const 20442) "a") (data (i32.const 20445) "a") (data (i32.const 20448) "a") (data (i32.const 20451) "a") (data (i32.const 20454) "a") (data (i32.const 20457) "a") (data (i32.const 20460) "a") (data (i32.const 20463) "a") (data (i32.const 20466) "a") (data (i32.const 20469) "a") (data (i32.const 20472) "a") (data (i32.const 20475) "a") (data (i32.const 20478) "a") (data (i32.const 20481) "a") (data (i32.const 20484) "a") (data (i32.const 20487) "a") (data (i32.const 20490) "a") (data (i32.const 20493) "a") (data (i32.const 20496) "a") (data (i32.const 20499) "a") (data (i32.const 20502) "a") (data (i32.const 20505) "a") (data (i32.const 20508) "a") (data (i32.const 20511) "a") (data (i32.const 20514) "a") (data (i32.const 20517) "a") (data (i32.const 20520) "a") (data (i32.const 20523) "a") (data (i32.const 20526) "a") (data (i32.const 20529) "a") (data (i32.const 20532) "a") (data (i32.const 20535) "a") (data (i32.const 20538) "a") (data (i32.const 20541) "a") (data (i32.const 20544) "a") (data (i32.const 20547) "a") (data (i32.const 20550) "a") (data (i32.const 20553) "a") (data (i32.const 20556) "a") (data (i32.const 20559) "a") (data (i32.const 20562) "a") (data (i32.const 20565) "a") (data (i32.const 20568) "a") (data (i32.const 20571) "a") (data (i32.const 20574) "a") (data (i32.const 20577) "a") (data (i32.const 20580) "a") (data (i32.const 20583) "a") (data (i32.const 20586) "a") (data (i32.const 20589) "a") (data (i32.const 20592) "a") (data (i32.const 20595) "a") (data (i32.const 20598) "a") (data (i32.const 20601) "a") (data (i32.const 20604) "a") (data (i32.const 20607) "a") (data (i32.const 20610) "a") (data (i32.const 20613) "a") (data (i32.const 20616) "a") (data (i32.const 20619) "a") (data (i32.const 20622) "a") (data (i32.const 20625) "a") (data (i32.const 20628) "a") (data (i32.const 20631) "a") (data (i32.const 20634) "a") (data (i32.const 20637) "a") (data (i32.const 20640) "a") (data (i32.const 20643) "a") (data (i32.const 20646) "a") (data (i32.const 20649) "a") (data (i32.const 20652) "a") (data (i32.const 20655) "a") (data (i32.const 20658) "a") (data (i32.const 20661) "a") (data (i32.const 20664) "a") (data (i32.const 20667) "a") (data (i32.const 20670) "a") (data (i32.const 20673) "a") (data (i32.const 20676) "a") (data (i32.const 20679) "a") (data (i32.const 20682) "a") (data (i32.const 20685) "a") (data (i32.const 20688) "a") (data (i32.const 20691) "a") (data (i32.const 20694) "a") (data (i32.const 20697) "a") (data (i32.const 20700) "a") (data (i32.const 20703) "a") (data (i32.const 20706) "a") (data (i32.const 20709) "a") (data (i32.const 20712) "a") (data (i32.const 20715) "a") (data (i32.const 20718) "a") (data (i32.const 20721) "a") (data (i32.const 20724) "a") (data (i32.const 20727) "a") (data (i32.const 20730) "a") (data (i32.const 20733) "a") (data (i32.const 20736) "a") (data (i32.const 20739) "a") (data (i32.const 20742) "a") (data (i32.const 20745) "a") (data (i32.const 20748) "a") (data (i32.const 20751) "a") (data (i32.const 20754) "a") (data (i32.const 20757) "a") (data (i32.const 20760) "a") (data (i32.const 20763) "a") (data (i32.const 20766) "a") (data (i32.const 20769) "a") (data (i32.const 20772) "a") (data (i32.const 20775) "a") (data (i32.const 20778) "a") (data (i32.const 20781) "a") (data (i32.const 20784) "a") (data (i32.const 20787) "a") (data (i32.const 20790) "a") (data (i32.const 20793) "a") (data (i32.const 20796) "a") (data (i32.const 20799) "a") (data (i32.const 20802) "a") (data (i32.const 20805) "a") (data (i32.const 20808) "a") (data (i32.const 20811) "a") (data (i32.const 20814) "a") (data (i32.const 20817) "a") (data (i32.const 20820) "a") (data (i32.const 20823) "a") (data (i32.const 20826) "a") (data (i32.const 20829) "a") (data (i32.const 20832) "a") (data (i32.const 20835) "a") (data (i32.const 20838) "a") (data (i32.const 20841) "a") (data (i32.const 20844) "a") (data (i32.const 20847) "a") (data (i32.const 20850) "a") (data (i32.const 20853) "a") (data (i32.const 20856) "a") (data (i32.const 20859) "a") (data (i32.const 20862) "a") (data (i32.const 20865) "a") (data (i32.const 20868) "a") (data (i32.const 20871) "a") (data (i32.const 20874) "a") (data (i32.const 20877) "a") (data (i32.const 20880) "a") (data (i32.const 20883) "a") (data (i32.const 20886) "a") (data (i32.const 20889) "a") (data (i32.const 20892) "a") (data (i32.const 20895) "a") (data (i32.const 20898) "a") (data (i32.const 20901) "a") (data (i32.const 20904) "a") (data (i32.const 20907) "a") (data (i32.const 20910) "a") (data (i32.const 20913) "a") (data (i32.const 20916) "a") (data (i32.const 20919) "a") (data (i32.const 20922) "a") (data (i32.const 20925) "a") (data (i32.const 20928) "a") (data (i32.const 20931) "a") (data (i32.const 20934) "a") (data (i32.const 20937) "a") (data (i32.const 20940) "a") (data (i32.const 20943) "a") (data (i32.const 20946) "a") (data (i32.const 20949) "a") (data (i32.const 20952) "a") (data (i32.const 20955) "a") (data (i32.const 20958) "a") (data (i32.const 20961) "a") (data (i32.const 20964) "a") (data (i32.const 20967) "a") (data (i32.const 20970) "a") (data (i32.const 20973) "a") (data (i32.const 20976) "a") (data (i32.const 20979) "a") (data (i32.const 20982) "a") (data (i32.const 20985) "a") (data (i32.const 20988) "a") (data (i32.const 20991) "a") (data (i32.const 20994) "a") (data (i32.const 20997) "a") (data (i32.const 21000) "a") (data (i32.const 21003) "a") (data (i32.const 21006) "a") (data (i32.const 21009) "a") (data (i32.const 21012) "a") (data (i32.const 21015) "a") (data (i32.const 21018) "a") (data (i32.const 21021) "a") (data (i32.const 21024) "a") (data (i32.const 21027) "a") (data (i32.const 21030) "a") (data (i32.const 21033) "a") (data (i32.const 21036) "a") (data (i32.const 21039) "a") (data (i32.const 21042) "a") (data (i32.const 21045) "a") (data (i32.const 21048) "a") (data (i32.const 21051) "a") (data (i32.const 21054) "a") (data (i32.const 21057) "a") (data (i32.const 21060) "a") (data (i32.const 21063) "a") (data (i32.const 21066) "a") (data (i32.const 21069) "a") (data (i32.const 21072) "a") (data (i32.const 21075) "a") (data (i32.const 21078) "a") (data (i32.const 21081) "a") (data (i32.const 21084) "a") (data (i32.const 21087) "a") (data (i32.const 21090) "a") (data (i32.const 21093) "a") (data (i32.const 21096) "a") (data (i32.const 21099) "a") (data (i32.const 21102) "a") (data (i32.const 21105) "a") (data (i32.const 21108) "a") (data (i32.const 21111) "a") (data (i32.const 21114) "a") (data (i32.const 21117) "a") (data (i32.const 21120) "a") (data (i32.const 21123) "a") (data (i32.const 21126) "a") (data (i32.const 21129) "a") (data (i32.const 21132) "a") (data (i32.const 21135) "a") (data (i32.const 21138) "a") (data (i32.const 21141) "a") (data (i32.const 21144) "a") (data (i32.const 21147) "a") (data (i32.const 21150) "a") (data (i32.const 21153) "a") (data (i32.const 21156) "a") (data (i32.const 21159) "a") (data (i32.const 21162) "a") (data (i32.const 21165) "a") (data (i32.const 21168) "a") (data (i32.const 21171) "a") (data (i32.const 21174) "a") (data (i32.const 21177) "a") (data (i32.const 21180) "a") (data (i32.const 21183) "a") (data (i32.const 21186) "a") (data (i32.const 21189) "a") (data (i32.const 21192) "a") (data (i32.const 21195) "a") (data (i32.const 21198) "a") (data (i32.const 21201) "a") (data (i32.const 21204) "a") (data (i32.const 21207) "a") (data (i32.const 21210) "a") (data (i32.const 21213) "a") (data (i32.const 21216) "a") (data (i32.const 21219) "a") (data (i32.const 21222) "a") (data (i32.const 21225) "a") (data (i32.const 21228) "a") (data (i32.const 21231) "a") (data (i32.const 21234) "a") (data (i32.const 21237) "a") (data (i32.const 21240) "a") (data (i32.const 21243) "a") (data (i32.const 21246) "a") (data (i32.const 21249) "a") (data (i32.const 21252) "a") (data (i32.const 21255) "a") (data (i32.const 21258) "a") (data (i32.const 21261) "a") (data (i32.const 21264) "a") (data (i32.const 21267) "a") (data (i32.const 21270) "a") (data (i32.const 21273) "a") (data (i32.const 21276) "a") (data (i32.const 21279) "a") (data (i32.const 21282) "a") (data (i32.const 21285) "a") (data (i32.const 21288) "a") (data (i32.const 21291) "a") (data (i32.const 21294) "a") (data (i32.const 21297) "a") (data (i32.const 21300) "a") (data (i32.const 21303) "a") (data (i32.const 21306) "a") (data (i32.const 21309) "a") (data (i32.const 21312) "a") (data (i32.const 21315) "a") (data (i32.const 21318) "a") (data (i32.const 21321) "a") (data (i32.const 21324) "a") (data (i32.const 21327) "a") (data (i32.const 21330) "a") (data (i32.const 21333) "a") (data (i32.const 21336) "a") (data (i32.const 21339) "a") (data (i32.const 21342) "a") (data (i32.const 21345) "a") (data (i32.const 21348) "a") (data (i32.const 21351) "a") (data (i32.const 21354) "a") (data (i32.const 21357) "a") (data (i32.const 21360) "a") (data (i32.const 21363) "a") (data (i32.const 21366) "a") (data (i32.const 21369) "a") (data (i32.const 21372) "a") (data (i32.const 21375) "a") (data (i32.const 21378) "a") (data (i32.const 21381) "a") (data (i32.const 21384) "a") (data (i32.const 21387) "a") (data (i32.const 21390) "a") (data (i32.const 21393) "a") (data (i32.const 21396) "a") (data (i32.const 21399) "a") (data (i32.const 21402) "a") (data (i32.const 21405) "a") (data (i32.const 21408) "a") (data (i32.const 21411) "a") (data (i32.const 21414) "a") (data (i32.const 21417) "a") (data (i32.const 21420) "a") (data (i32.const 21423) "a") (data (i32.const 21426) "a") (data (i32.const 21429) "a") (data (i32.const 21432) "a") (data (i32.const 21435) "a") (data (i32.const 21438) "a") (data (i32.const 21441) "a") (data (i32.const 21444) "a") (data (i32.const 21447) "a") (data (i32.const 21450) "a") (data (i32.const 21453) "a") (data (i32.const 21456) "a") (data (i32.const 21459) "a") (data (i32.const 21462) "a") (data (i32.const 21465) "a") (data (i32.const 21468) "a") (data (i32.const 21471) "a") (data (i32.const 21474) "a") (data (i32.const 21477) "a") (data (i32.const 21480) "a") (data (i32.const 21483) "a") (data (i32.const 21486) "a") (data (i32.const 21489) "a") (data (i32.const 21492) "a") (data (i32.const 21495) "a") (data (i32.const 21498) "a") (data (i32.const 21501) "a") (data (i32.const 21504) "a") (data (i32.const 21507) "a") (data (i32.const 21510) "a") (data (i32.const 21513) "a") (data (i32.const 21516) "a") (data (i32.const 21519) "a") (data (i32.const 21522) "a") (data (i32.const 21525) "a") (data (i32.const 21528) "a") (data (i32.const 21531) "a") (data (i32.const 21534) "a") (data (i32.const 21537) "a") (data (i32.const 21540) "a") (data (i32.const 21543) "a") (data (i32.const 21546) "a") (data (i32.const 21549) "a") (data (i32.const 21552) "a") (data (i32.const 21555) "a") (data (i32.const 21558) "a") (data (i32.const 21561) "a") (data (i32.const 21564) "a") (data (i32.const 21567) "a") (data (i32.const 21570) "a") (data (i32.const 21573) "a") (data (i32.const 21576) "a") (data (i32.const 21579) "a") (data (i32.const 21582) "a") (data (i32.const 21585) "a") (data (i32.const 21588) "a") (data (i32.const 21591) "a") (data (i32.const 21594) "a") (data (i32.const 21597) "a") (data (i32.const 21600) "a") (data (i32.const 21603) "a") (data (i32.const 21606) "a") (data (i32.const 21609) "a") (data (i32.const 21612) "a") (data (i32.const 21615) "a") (data (i32.const 21618) "a") (data (i32.const 21621) "a") (data (i32.const 21624) "a") (data (i32.const 21627) "a") (data (i32.const 21630) "a") (data (i32.const 21633) "a") (data (i32.const 21636) "a") (data (i32.const 21639) "a") (data (i32.const 21642) "a") (data (i32.const 21645) "a") (data (i32.const 21648) "a") (data (i32.const 21651) "a") (data (i32.const 21654) "a") (data (i32.const 21657) "a") (data (i32.const 21660) "a") (data (i32.const 21663) "a") (data (i32.const 21666) "a") (data (i32.const 21669) "a") (data (i32.const 21672) "a") (data (i32.const 21675) "a") (data (i32.const 21678) "a") (data (i32.const 21681) "a") (data (i32.const 21684) "a") (data (i32.const 21687) "a") (data (i32.const 21690) "a") (data (i32.const 21693) "a") (data (i32.const 21696) "a") (data (i32.const 21699) "a") (data (i32.const 21702) "a") (data (i32.const 21705) "a") (data (i32.const 21708) "a") (data (i32.const 21711) "a") (data (i32.const 21714) "a") (data (i32.const 21717) "a") (data (i32.const 21720) "a") (data (i32.const 21723) "a") (data (i32.const 21726) "a") (data (i32.const 21729) "a") (data (i32.const 21732) "a") (data (i32.const 21735) "a") (data (i32.const 21738) "a") (data (i32.const 21741) "a") (data (i32.const 21744) "a") (data (i32.const 21747) "a") (data (i32.const 21750) "a") (data (i32.const 21753) "a") (data (i32.const 21756) "a") (data (i32.const 21759) "a") (data (i32.const 21762) "a") (data (i32.const 21765) "a") (data (i32.const 21768) "a") (data (i32.const 21771) "a") (data (i32.const 21774) "a") (data (i32.const 21777) "a") (data (i32.const 21780) "a") (data (i32.const 21783) "a") (data (i32.const 21786) "a") (data (i32.const 21789) "a") (data (i32.const 21792) "a") (data (i32.const 21795) "a") (data (i32.const 21798) "a") (data (i32.const 21801) "a") (data (i32.const 21804) "a") (data (i32.const 21807) "a") (data (i32.const 21810) "a") (data (i32.const 21813) "a") (data (i32.const 21816) "a") (data (i32.const 21819) "a") (data (i32.const 21822) "a") (data (i32.const 21825) "a") (data (i32.const 21828) "a") (data (i32.const 21831) "a") (data (i32.const 21834) "a") (data (i32.const 21837) "a") (data (i32.const 21840) "a") (data (i32.const 21843) "a") (data (i32.const 21846) "a") (data (i32.const 21849) "a") (data (i32.const 21852) "a") (data (i32.const 21855) "a") (data (i32.const 21858) "a") (data (i32.const 21861) "a") (data (i32.const 21864) "a") (data (i32.const 21867) "a") (data (i32.const 21870) "a") (data (i32.const 21873) "a") (data (i32.const 21876) "a") (data (i32.const 21879) "a") (data (i32.const 21882) "a") (data (i32.const 21885) "a") (data (i32.const 21888) "a") (data (i32.const 21891) "a") (data (i32.const 21894) "a") (data (i32.const 21897) "a") (data (i32.const 21900) "a") (data (i32.const 21903) "a") (data (i32.const 21906) "a") (data (i32.const 21909) "a") (data (i32.const 21912) "a") (data (i32.const 21915) "a") (data (i32.const 21918) "a") (data (i32.const 21921) "a") (data (i32.const 21924) "a") (data (i32.const 21927) "a") (data (i32.const 21930) "a") (data (i32.const 21933) "a") (data (i32.const 21936) "a") (data (i32.const 21939) "a") (data (i32.const 21942) "a") (data (i32.const 21945) "a") (data (i32.const 21948) "a") (data (i32.const 21951) "a") (data (i32.const 21954) "a") (data (i32.const 21957) "a") (data (i32.const 21960) "a") (data (i32.const 21963) "a") (data (i32.const 21966) "a") (data (i32.const 21969) "a") (data (i32.const 21972) "a") (data (i32.const 21975) "a") (data (i32.const 21978) "a") (data (i32.const 21981) "a") (data (i32.const 21984) "a") (data (i32.const 21987) "a") (data (i32.const 21990) "a") (data (i32.const 21993) "a") (data (i32.const 21996) "a") (data (i32.const 21999) "a") (data (i32.const 22002) "a") (data (i32.const 22005) "a") (data (i32.const 22008) "a") (data (i32.const 22011) "a") (data (i32.const 22014) "a") (data (i32.const 22017) "a") (data (i32.const 22020) "a") (data (i32.const 22023) "a") (data (i32.const 22026) "a") (data (i32.const 22029) "a") (data (i32.const 22032) "a") (data (i32.const 22035) "a") (data (i32.const 22038) "a") (data (i32.const 22041) "a") (data (i32.const 22044) "a") (data (i32.const 22047) "a") (data (i32.const 22050) "a") (data (i32.const 22053) "a") (data (i32.const 22056) "a") (data (i32.const 22059) "a") (data (i32.const 22062) "a") (data (i32.const 22065) "a") (data (i32.const 22068) "a") (data (i32.const 22071) "a") (data (i32.const 22074) "a") (data (i32.const 22077) "a") (data (i32.const 22080) "a") (data (i32.const 22083) "a") (data (i32.const 22086) "a") (data (i32.const 22089) "a") (data (i32.const 22092) "a") (data (i32.const 22095) "a") (data (i32.const 22098) "a") (data (i32.const 22101) "a") (data (i32.const 22104) "a") (data (i32.const 22107) "a") (data (i32.const 22110) "a") (data (i32.const 22113) "a") (data (i32.const 22116) "a") (data (i32.const 22119) "a") (data (i32.const 22122) "a") (data (i32.const 22125) "a") (data (i32.const 22128) "a") (data (i32.const 22131) "a") (data (i32.const 22134) "a") (data (i32.const 22137) "a") (data (i32.const 22140) "a") (data (i32.const 22143) "a") (data (i32.const 22146) "a") (data (i32.const 22149) "a") (data (i32.const 22152) "a") (data (i32.const 22155) "a") (data (i32.const 22158) "a") (data (i32.const 22161) "a") (data (i32.const 22164) "a") (data (i32.const 22167) "a") (data (i32.const 22170) "a") (data (i32.const 22173) "a") (data (i32.const 22176) "a") (data (i32.const 22179) "a") (data (i32.const 22182) "a") (data (i32.const 22185) "a") (data (i32.const 22188) "a") (data (i32.const 22191) "a") (data (i32.const 22194) "a") (data (i32.const 22197) "a") (data (i32.const 22200) "a") (data (i32.const 22203) "a") (data (i32.const 22206) "a") (data (i32.const 22209) "a") (data (i32.const 22212) "a") (data (i32.const 22215) "a") (data (i32.const 22218) "a") (data (i32.const 22221) "a") (data (i32.const 22224) "a") (data (i32.const 22227) "a") (data (i32.const 22230) "a") (data (i32.const 22233) "a") (data (i32.const 22236) "a") (data (i32.const 22239) "a") (data (i32.const 22242) "a") (data (i32.const 22245) "a") (data (i32.const 22248) "a") (data (i32.const 22251) "a") (data (i32.const 22254) "a") (data (i32.const 22257) "a") (data (i32.const 22260) "a") (data (i32.const 22263) "a") (data (i32.const 22266) "a") (data (i32.const 22269) "a") (data (i32.const 22272) "a") (data (i32.const 22275) "a") (data (i32.const 22278) "a") (data (i32.const 22281) "a") (data (i32.const 22284) "a") (data (i32.const 22287) "a") (data (i32.const 22290) "a") (data (i32.const 22293) "a") (data (i32.const 22296) "a") (data (i32.const 22299) "a") (data (i32.const 22302) "a") (data (i32.const 22305) "a") (data (i32.const 22308) "a") (data (i32.const 22311) "a") (data (i32.const 22314) "a") (data (i32.const 22317) "a") (data (i32.const 22320) "a") (data (i32.const 22323) "a") (data (i32.const 22326) "a") (data (i32.const 22329) "a") (data (i32.const 22332) "a") (data (i32.const 22335) "a") (data (i32.const 22338) "a") (data (i32.const 22341) "a") (data (i32.const 22344) "a") (data (i32.const 22347) "a") (data (i32.const 22350) "a") (data (i32.const 22353) "a") (data (i32.const 22356) "a") (data (i32.const 22359) "a") (data (i32.const 22362) "a") (data (i32.const 22365) "a") (data (i32.const 22368) "a") (data (i32.const 22371) "a") (data (i32.const 22374) "a") (data (i32.const 22377) "a") (data (i32.const 22380) "a") (data (i32.const 22383) "a") (data (i32.const 22386) "a") (data (i32.const 22389) "a") (data (i32.const 22392) "a") (data (i32.const 22395) "a") (data (i32.const 22398) "a") (data (i32.const 22401) "a") (data (i32.const 22404) "a") (data (i32.const 22407) "a") (data (i32.const 22410) "a") (data (i32.const 22413) "a") (data (i32.const 22416) "a") (data (i32.const 22419) "a") (data (i32.const 22422) "a") (data (i32.const 22425) "a") (data (i32.const 22428) "a") (data (i32.const 22431) "a") (data (i32.const 22434) "a") (data (i32.const 22437) "a") (data (i32.const 22440) "a") (data (i32.const 22443) "a") (data (i32.const 22446) "a") (data (i32.const 22449) "a") (data (i32.const 22452) "a") (data (i32.const 22455) "a") (data (i32.const 22458) "a") (data (i32.const 22461) "a") (data (i32.const 22464) "a") (data (i32.const 22467) "a") (data (i32.const 22470) "a") (data (i32.const 22473) "a") (data (i32.const 22476) "a") (data (i32.const 22479) "a") (data (i32.const 22482) "a") (data (i32.const 22485) "a") (data (i32.const 22488) "a") (data (i32.const 22491) "a") (data (i32.const 22494) "a") (data (i32.const 22497) "a") (data (i32.const 22500) "a") (data (i32.const 22503) "a") (data (i32.const 22506) "a") (data (i32.const 22509) "a") (data (i32.const 22512) "a") (data (i32.const 22515) "a") (data (i32.const 22518) "a") (data (i32.const 22521) "a") (data (i32.const 22524) "a") (data (i32.const 22527) "a") (data (i32.const 22530) "a") (data (i32.const 22533) "a") (data (i32.const 22536) "a") (data (i32.const 22539) "a") (data (i32.const 22542) "a") (data (i32.const 22545) "a") (data (i32.const 22548) "a") (data (i32.const 22551) "a") (data (i32.const 22554) "a") (data (i32.const 22557) "a") (data (i32.const 22560) "a") (data (i32.const 22563) "a") (data (i32.const 22566) "a") (data (i32.const 22569) "a") (data (i32.const 22572) "a") (data (i32.const 22575) "a") (data (i32.const 22578) "a") (data (i32.const 22581) "a") (data (i32.const 22584) "a") (data (i32.const 22587) "a") (data (i32.const 22590) "a") (data (i32.const 22593) "a") (data (i32.const 22596) "a") (data (i32.const 22599) "a") (data (i32.const 22602) "a") (data (i32.const 22605) "a") (data (i32.const 22608) "a") (data (i32.const 22611) "a") (data (i32.const 22614) "a") (data (i32.const 22617) "a") (data (i32.const 22620) "a") (data (i32.const 22623) "a") (data (i32.const 22626) "a") (data (i32.const 22629) "a") (data (i32.const 22632) "a") (data (i32.const 22635) "a") (data (i32.const 22638) "a") (data (i32.const 22641) "a") (data (i32.const 22644) "a") (data (i32.const 22647) "a") (data (i32.const 22650) "a") (data (i32.const 22653) "a") (data (i32.const 22656) "a") (data (i32.const 22659) "a") (data (i32.const 22662) "a") (data (i32.const 22665) "a") (data (i32.const 22668) "a") (data (i32.const 22671) "a") (data (i32.const 22674) "a") (data (i32.const 22677) "a") (data (i32.const 22680) "a") (data (i32.const 22683) "a") (data (i32.const 22686) "a") (data (i32.const 22689) "a") (data (i32.const 22692) "a") (data (i32.const 22695) "a") (data (i32.const 22698) "a") (data (i32.const 22701) "a") (data (i32.const 22704) "a") (data (i32.const 22707) "a") (data (i32.const 22710) "a") (data (i32.const 22713) "a") (data (i32.const 22716) "a") (data (i32.const 22719) "a") (data (i32.const 22722) "a") (data (i32.const 22725) "a") (data (i32.const 22728) "a") (data (i32.const 22731) "a") (data (i32.const 22734) "a") (data (i32.const 22737) "a") (data (i32.const 22740) "a") (data (i32.const 22743) "a") (data (i32.const 22746) "a") (data (i32.const 22749) "a") (data (i32.const 22752) "a") (data (i32.const 22755) "a") (data (i32.const 22758) "a") (data (i32.const 22761) "a") (data (i32.const 22764) "a") (data (i32.const 22767) "a") (data (i32.const 22770) "a") (data (i32.const 22773) "a") (data (i32.const 22776) "a") (data (i32.const 22779) "a") (data (i32.const 22782) "a") (data (i32.const 22785) "a") (data (i32.const 22788) "a") (data (i32.const 22791) "a") (data (i32.const 22794) "a") (data (i32.const 22797) "a") (data (i32.const 22800) "a") (data (i32.const 22803) "a") (data (i32.const 22806) "a") (data (i32.const 22809) "a") (data (i32.const 22812) "a") (data (i32.const 22815) "a") (data (i32.const 22818) "a") (data (i32.const 22821) "a") (data (i32.const 22824) "a") (data (i32.const 22827) "a") (data (i32.const 22830) "a") (data (i32.const 22833) "a") (data (i32.const 22836) "a") (data (i32.const 22839) "a") (data (i32.const 22842) "a") (data (i32.const 22845) "a") (data (i32.const 22848) "a") (data (i32.const 22851) "a") (data (i32.const 22854) "a") (data (i32.const 22857) "a") (data (i32.const 22860) "a") (data (i32.const 22863) "a") (data (i32.const 22866) "a") (data (i32.const 22869) "a") (data (i32.const 22872) "a") (data (i32.const 22875) "a") (data (i32.const 22878) "a") (data (i32.const 22881) "a") (data (i32.const 22884) "a") (data (i32.const 22887) "a") (data (i32.const 22890) "a") (data (i32.const 22893) "a") (data (i32.const 22896) "a") (data (i32.const 22899) "a") (data (i32.const 22902) "a") (data (i32.const 22905) "a") (data (i32.const 22908) "a") (data (i32.const 22911) "a") (data (i32.const 22914) "a") (data (i32.const 22917) "a") (data (i32.const 22920) "a") (data (i32.const 22923) "a") (data (i32.const 22926) "a") (data (i32.const 22929) "a") (data (i32.const 22932) "a") (data (i32.const 22935) "a") (data (i32.const 22938) "a") (data (i32.const 22941) "a") (data (i32.const 22944) "a") (data (i32.const 22947) "a") (data (i32.const 22950) "a") (data (i32.const 22953) "a") (data (i32.const 22956) "a") (data (i32.const 22959) "a") (data (i32.const 22962) "a") (data (i32.const 22965) "a") (data (i32.const 22968) "a") (data (i32.const 22971) "a") (data (i32.const 22974) "a") (data (i32.const 22977) "a") (data (i32.const 22980) "a") (data (i32.const 22983) "a") (data (i32.const 22986) "a") (data (i32.const 22989) "a") (data (i32.const 22992) "a") (data (i32.const 22995) "a") (data (i32.const 22998) "a") (data (i32.const 23001) "a") (data (i32.const 23004) "a") (data (i32.const 23007) "a") (data (i32.const 23010) "a") (data (i32.const 23013) "a") (data (i32.const 23016) "a") (data (i32.const 23019) "a") (data (i32.const 23022) "a") (data (i32.const 23025) "a") (data (i32.const 23028) "a") (data (i32.const 23031) "a") (data (i32.const 23034) "a") (data (i32.const 23037) "a") (data (i32.const 23040) "a") (data (i32.const 23043) "a") (data (i32.const 23046) "a") (data (i32.const 23049) "a") (data (i32.const 23052) "a") (data (i32.const 23055) "a") (data (i32.const 23058) "a") (data (i32.const 23061) "a") (data (i32.const 23064) "a") (data (i32.const 23067) "a") (data (i32.const 23070) "a") (data (i32.const 23073) "a") (data (i32.const 23076) "a") (data (i32.const 23079) "a") (data (i32.const 23082) "a") (data (i32.const 23085) "a") (data (i32.const 23088) "a") (data (i32.const 23091) "a") (data (i32.const 23094) "a") (data (i32.const 23097) "a") (data (i32.const 23100) "a") (data (i32.const 23103) "a") (data (i32.const 23106) "a") (data (i32.const 23109) "a") (data (i32.const 23112) "a") (data (i32.const 23115) "a") (data (i32.const 23118) "a") (data (i32.const 23121) "a") (data (i32.const 23124) "a") (data (i32.const 23127) "a") (data (i32.const 23130) "a") (data (i32.const 23133) "a") (data (i32.const 23136) "a") (data (i32.const 23139) "a") (data (i32.const 23142) "a") (data (i32.const 23145) "a") (data (i32.const 23148) "a") (data (i32.const 23151) "a") (data (i32.const 23154) "a") (data (i32.const 23157) "a") (data (i32.const 23160) "a") (data (i32.const 23163) "a") (data (i32.const 23166) "a") (data (i32.const 23169) "a") (data (i32.const 23172) "a") (data (i32.const 23175) "a") (data (i32.const 23178) "a") (data (i32.const 23181) "a") (data (i32.const 23184) "a") (data (i32.const 23187) "a") (data (i32.const 23190) "a") (data (i32.const 23193) "a") (data (i32.const 23196) "a") (data (i32.const 23199) "a") (data (i32.const 23202) "a") (data (i32.const 23205) "a") (data (i32.const 23208) "a") (data (i32.const 23211) "a") (data (i32.const 23214) "a") (data (i32.const 23217) "a") (data (i32.const 23220) "a") (data (i32.const 23223) "a") (data (i32.const 23226) "a") (data (i32.const 23229) "a") (data (i32.const 23232) "a") (data (i32.const 23235) "a") (data (i32.const 23238) "a") (data (i32.const 23241) "a") (data (i32.const 23244) "a") (data (i32.const 23247) "a") (data (i32.const 23250) "a") (data (i32.const 23253) "a") (data (i32.const 23256) "a") (data (i32.const 23259) "a") (data (i32.const 23262) "a") (data (i32.const 23265) "a") (data (i32.const 23268) "a") (data (i32.const 23271) "a") (data (i32.const 23274) "a") (data (i32.const 23277) "a") (data (i32.const 23280) "a") (data (i32.const 23283) "a") (data (i32.const 23286) "a") (data (i32.const 23289) "a") (data (i32.const 23292) "a") (data (i32.const 23295) "a") (data (i32.const 23298) "a") (data (i32.const 23301) "a") (data (i32.const 23304) "a") (data (i32.const 23307) "a") (data (i32.const 23310) "a") (data (i32.const 23313) "a") (data (i32.const 23316) "a") (data (i32.const 23319) "a") (data (i32.const 23322) "a") (data (i32.const 23325) "a") (data (i32.const 23328) "a") (data (i32.const 23331) "a") (data (i32.const 23334) "a") (data (i32.const 23337) "a") (data (i32.const 23340) "a") (data (i32.const 23343) "a") (data (i32.const 23346) "a") (data (i32.const 23349) "a") (data (i32.const 23352) "a") (data (i32.const 23355) "a") (data (i32.const 23358) "a") (data (i32.const 23361) "a") (data (i32.const 23364) "a") (data (i32.const 23367) "a") (data (i32.const 23370) "a") (data (i32.const 23373) "a") (data (i32.const 23376) "a") (data (i32.const 23379) "a") (data (i32.const 23382) "a") (data (i32.const 23385) "a") (data (i32.const 23388) "a") (data (i32.const 23391) "a") (data (i32.const 23394) "a") (data (i32.const 23397) "a") (data (i32.const 23400) "a") (data (i32.const 23403) "a") (data (i32.const 23406) "a") (data (i32.const 23409) "a") (data (i32.const 23412) "a") (data (i32.const 23415) "a") (data (i32.const 23418) "a") (data (i32.const 23421) "a") (data (i32.const 23424) "a") (data (i32.const 23427) "a") (data (i32.const 23430) "a") (data (i32.const 23433) "a") (data (i32.const 23436) "a") (data (i32.const 23439) "a") (data (i32.const 23442) "a") (data (i32.const 23445) "a") (data (i32.const 23448) "a") (data (i32.const 23451) "a") (data (i32.const 23454) "a") (data (i32.const 23457) "a") (data (i32.const 23460) "a") (data (i32.const 23463) "a") (data (i32.const 23466) "a") (data (i32.const 23469) "a") (data (i32.const 23472) "a") (data (i32.const 23475) "a") (data (i32.const 23478) "a") (data (i32.const 23481) "a") (data (i32.const 23484) "a") (data (i32.const 23487) "a") (data (i32.const 23490) "a") (data (i32.const 23493) "a") (data (i32.const 23496) "a") (data (i32.const 23499) "a") (data (i32.const 23502) "a") (data (i32.const 23505) "a") (data (i32.const 23508) "a") (data (i32.const 23511) "a") (data (i32.const 23514) "a") (data (i32.const 23517) "a") (data (i32.const 23520) "a") (data (i32.const 23523) "a") (data (i32.const 23526) "a") (data (i32.const 23529) "a") (data (i32.const 23532) "a") (data (i32.const 23535) "a") (data (i32.const 23538) "a") (data (i32.const 23541) "a") (data (i32.const 23544) "a") (data (i32.const 23547) "a") (data (i32.const 23550) "a") (data (i32.const 23553) "a") (data (i32.const 23556) "a") (data (i32.const 23559) "a") (data (i32.const 23562) "a") (data (i32.const 23565) "a") (data (i32.const 23568) "a") (data (i32.const 23571) "a") (data (i32.const 23574) "a") (data (i32.const 23577) "a") (data (i32.const 23580) "a") (data (i32.const 23583) "a") (data (i32.const 23586) "a") (data (i32.const 23589) "a") (data (i32.const 23592) "a") (data (i32.const 23595) "a") (data (i32.const 23598) "a") (data (i32.const 23601) "a") (data (i32.const 23604) "a") (data (i32.const 23607) "a") (data (i32.const 23610) "a") (data (i32.const 23613) "a") (data (i32.const 23616) "a") (data (i32.const 23619) "a") (data (i32.const 23622) "a") (data (i32.const 23625) "a") (data (i32.const 23628) "a") (data (i32.const 23631) "a") (data (i32.const 23634) "a") (data (i32.const 23637) "a") (data (i32.const 23640) "a") (data (i32.const 23643) "a") (data (i32.const 23646) "a") (data (i32.const 23649) "a") (data (i32.const 23652) "a") (data (i32.const 23655) "a") (data (i32.const 23658) "a") (data (i32.const 23661) "a") (data (i32.const 23664) "a") (data (i32.const 23667) "a") (data (i32.const 23670) "a") (data (i32.const 23673) "a") (data (i32.const 23676) "a") (data (i32.const 23679) "a") (data (i32.const 23682) "a") (data (i32.const 23685) "a") (data (i32.const 23688) "a") (data (i32.const 23691) "a") (data (i32.const 23694) "a") (data (i32.const 23697) "a") (data (i32.const 23700) "a") (data (i32.const 23703) "a") (data (i32.const 23706) "a") (data (i32.const 23709) "a") (data (i32.const 23712) "a") (data (i32.const 23715) "a") (data (i32.const 23718) "a") (data (i32.const 23721) "a") (data (i32.const 23724) "a") (data (i32.const 23727) "a") (data (i32.const 23730) "a") (data (i32.const 23733) "a") (data (i32.const 23736) "a") (data (i32.const 23739) "a") (data (i32.const 23742) "a") (data (i32.const 23745) "a") (data (i32.const 23748) "a") (data (i32.const 23751) "a") (data (i32.const 23754) "a") (data (i32.const 23757) "a") (data (i32.const 23760) "a") (data (i32.const 23763) "a") (data (i32.const 23766) "a") (data (i32.const 23769) "a") (data (i32.const 23772) "a") (data (i32.const 23775) "a") (data (i32.const 23778) "a") (data (i32.const 23781) "a") (data (i32.const 23784) "a") (data (i32.const 23787) "a") (data (i32.const 23790) "a") (data (i32.const 23793) "a") (data (i32.const 23796) "a") (data (i32.const 23799) "a") (data (i32.const 23802) "a") (data (i32.const 23805) "a") (data (i32.const 23808) "a") (data (i32.const 23811) "a") (data (i32.const 23814) "a") (data (i32.const 23817) "a") (data (i32.const 23820) "a") (data (i32.const 23823) "a") (data (i32.const 23826) "a") (data (i32.const 23829) "a") (data (i32.const 23832) "a") (data (i32.const 23835) "a") (data (i32.const 23838) "a") (data (i32.const 23841) "a") (data (i32.const 23844) "a") (data (i32.const 23847) "a") (data (i32.const 23850) "a") (data (i32.const 23853) "a") (data (i32.const 23856) "a") (data (i32.const 23859) "a") (data (i32.const 23862) "a") (data (i32.const 23865) "a") (data (i32.const 23868) "a") (data (i32.const 23871) "a") (data (i32.const 23874) "a") (data (i32.const 23877) "a") (data (i32.const 23880) "a") (data (i32.const 23883) "a") (data (i32.const 23886) "a") (data (i32.const 23889) "a") (data (i32.const 23892) "a") (data (i32.const 23895) "a") (data (i32.const 23898) "a") (data (i32.const 23901) "a") (data (i32.const 23904) "a") (data (i32.const 23907) "a") (data (i32.const 23910) "a") (data (i32.const 23913) "a") (data (i32.const 23916) "a") (data (i32.const 23919) "a") (data (i32.const 23922) "a") (data (i32.const 23925) "a") (data (i32.const 23928) "a") (data (i32.const 23931) "a") (data (i32.const 23934) "a") (data (i32.const 23937) "a") (data (i32.const 23940) "a") (data (i32.const 23943) "a") (data (i32.const 23946) "a") (data (i32.const 23949) "a") (data (i32.const 23952) "a") (data (i32.const 23955) "a") (data (i32.const 23958) "a") (data (i32.const 23961) "a") (data (i32.const 23964) "a") (data (i32.const 23967) "a") (data (i32.const 23970) "a") (data (i32.const 23973) "a") (data (i32.const 23976) "a") (data (i32.const 23979) "a") (data (i32.const 23982) "a") (data (i32.const 23985) "a") (data (i32.const 23988) "a") (data (i32.const 23991) "a") (data (i32.const 23994) "a") (data (i32.const 23997) "a") (data (i32.const 24000) "a") (data (i32.const 24003) "a") (data (i32.const 24006) "a") (data (i32.const 24009) "a") (data (i32.const 24012) "a") (data (i32.const 24015) "a") (data (i32.const 24018) "a") (data (i32.const 24021) "a") (data (i32.const 24024) "a") (data (i32.const 24027) "a") (data (i32.const 24030) "a") (data (i32.const 24033) "a") (data (i32.const 24036) "a") (data (i32.const 24039) "a") (data (i32.const 24042) "a") (data (i32.const 24045) "a") (data (i32.const 24048) "a") (data (i32.const 24051) "a") (data (i32.const 24054) "a") (data (i32.const 24057) "a") (data (i32.const 24060) "a") (data (i32.const 24063) "a") (data (i32.const 24066) "a") (data (i32.const 24069) "a") (data (i32.const 24072) "a") (data (i32.const 24075) "a") (data (i32.const 24078) "a") (data (i32.const 24081) "a") (data (i32.const 24084) "a") (data (i32.const 24087) "a") (data (i32.const 24090) "a") (data (i32.const 24093) "a") (data (i32.const 24096) "a") (data (i32.const 24099) "a") (data (i32.const 24102) "a") (data (i32.const 24105) "a") (data (i32.const 24108) "a") (data (i32.const 24111) "a") (data (i32.const 24114) "a") (data (i32.const 24117) "a") (data (i32.const 24120) "a") (data (i32.const 24123) "a") (data (i32.const 24126) "a") (data (i32.const 24129) "a") (data (i32.const 24132) "a") (data (i32.const 24135) "a") (data (i32.const 24138) "a") (data (i32.const 24141) "a") (data (i32.const 24144) "a") (data (i32.const 24147) "a") (data (i32.const 24150) "a") (data (i32.const 24153) "a") (data (i32.const 24156) "a") (data (i32.const 24159) "a") (data (i32.const 24162) "a") (data (i32.const 24165) "a") (data (i32.const 24168) "a") (data (i32.const 24171) "a") (data (i32.const 24174) "a") (data (i32.const 24177) "a") (data (i32.const 24180) "a") (data (i32.const 24183) "a") (data (i32.const 24186) "a") (data (i32.const 24189) "a") (data (i32.const 24192) "a") (data (i32.const 24195) "a") (data (i32.const 24198) "a") (data (i32.const 24201) "a") (data (i32.const 24204) "a") (data (i32.const 24207) "a") (data (i32.const 24210) "a") (data (i32.const 24213) "a") (data (i32.const 24216) "a") (data (i32.const 24219) "a") (data (i32.const 24222) "a") (data (i32.const 24225) "a") (data (i32.const 24228) "a") (data (i32.const 24231) "a") (data (i32.const 24234) "a") (data (i32.const 24237) "a") (data (i32.const 24240) "a") (data (i32.const 24243) "a") (data (i32.const 24246) "a") (data (i32.const 24249) "a") (data (i32.const 24252) "a") (data (i32.const 24255) "a") (data (i32.const 24258) "a") (data (i32.const 24261) "a") (data (i32.const 24264) "a") (data (i32.const 24267) "a") (data (i32.const 24270) "a") (data (i32.const 24273) "a") (data (i32.const 24276) "a") (data (i32.const 24279) "a") (data (i32.const 24282) "a") (data (i32.const 24285) "a") (data (i32.const 24288) "a") (data (i32.const 24291) "a") (data (i32.const 24294) "a") (data (i32.const 24297) "a") (data (i32.const 24300) "a") (data (i32.const 24303) "a") (data (i32.const 24306) "a") (data (i32.const 24309) "a") (data (i32.const 24312) "a") (data (i32.const 24315) "a") (data (i32.const 24318) "a") (data (i32.const 24321) "a") (data (i32.const 24324) "a") (data (i32.const 24327) "a") (data (i32.const 24330) "a") (data (i32.const 24333) "a") (data (i32.const 24336) "a") (data (i32.const 24339) "a") (data (i32.const 24342) "a") (data (i32.const 24345) "a") (data (i32.const 24348) "a") (data (i32.const 24351) "a") (data (i32.const 24354) "a") (data (i32.const 24357) "a") (data (i32.const 24360) "a") (data (i32.const 24363) "a") (data (i32.const 24366) "a") (data (i32.const 24369) "a") (data (i32.const 24372) "a") (data (i32.const 24375) "a") (data (i32.const 24378) "a") (data (i32.const 24381) "a") (data (i32.const 24384) "a") (data (i32.const 24387) "a") (data (i32.const 24390) "a") (data (i32.const 24393) "a") (data (i32.const 24396) "a") (data (i32.const 24399) "a") (data (i32.const 24402) "a") (data (i32.const 24405) "a") (data (i32.const 24408) "a") (data (i32.const 24411) "a") (data (i32.const 24414) "a") (data (i32.const 24417) "a") (data (i32.const 24420) "a") (data (i32.const 24423) "a") (data (i32.const 24426) "a") (data (i32.const 24429) "a") (data (i32.const 24432) "a") (data (i32.const 24435) "a") (data (i32.const 24438) "a") (data (i32.const 24441) "a") (data (i32.const 24444) "a") (data (i32.const 24447) "a") (data (i32.const 24450) "a") (data (i32.const 24453) "a") (data (i32.const 24456) "a") (data (i32.const 24459) "a") (data (i32.const 24462) "a") (data (i32.const 24465) "a") (data (i32.const 24468) "a") (data (i32.const 24471) "a") (data (i32.const 24474) "a") (data (i32.const 24477) "a") (data (i32.const 24480) "a") (data (i32.const 24483) "a") (data (i32.const 24486) "a") (data (i32.const 24489) "a") (data (i32.const 24492) "a") (data (i32.const 24495) "a") (data (i32.const 24498) "a") (data (i32.const 24501) "a") (data (i32.const 24504) "a") (data (i32.const 24507) "a") (data (i32.const 24510) "a") (data (i32.const 24513) "a") (data (i32.const 24516) "a") (data (i32.const 24519) "a") (data (i32.const 24522) "a") (data (i32.const 24525) "a") (data (i32.const 24528) "a") (data (i32.const 24531) "a") (data (i32.const 24534) "a") (data (i32.const 24537) "a") (data (i32.const 24540) "a") (data (i32.const 24543) "a") (data (i32.const 24546) "a") (data (i32.const 24549) "a") (data (i32.const 24552) "a") (data (i32.const 24555) "a") (data (i32.const 24558) "a") (data (i32.const 24561) "a") (data (i32.const 24564) "a") (data (i32.const 24567) "a") (data (i32.const 24570) "a") (data (i32.const 24573) "a") (data (i32.const 24576) "a") (data (i32.const 24579) "a") (data (i32.const 24582) "a") (data (i32.const 24585) "a") (data (i32.const 24588) "a") (data (i32.const 24591) "a") (data (i32.const 24594) "a") (data (i32.const 24597) "a") (data (i32.const 24600) "a") (data (i32.const 24603) "a") (data (i32.const 24606) "a") (data (i32.const 24609) "a") (data (i32.const 24612) "a") (data (i32.const 24615) "a") (data (i32.const 24618) "a") (data (i32.const 24621) "a") (data (i32.const 24624) "a") (data (i32.const 24627) "a") (data (i32.const 24630) "a") (data (i32.const 24633) "a") (data (i32.const 24636) "a") (data (i32.const 24639) "a") (data (i32.const 24642) "a") (data (i32.const 24645) "a") (data (i32.const 24648) "a") (data (i32.const 24651) "a") (data (i32.const 24654) "a") (data (i32.const 24657) "a") (data (i32.const 24660) "a") (data (i32.const 24663) "a") (data (i32.const 24666) "a") (data (i32.const 24669) "a") (data (i32.const 24672) "a") (data (i32.const 24675) "a") (data (i32.const 24678) "a") (data (i32.const 24681) "a") (data (i32.const 24684) "a") (data (i32.const 24687) "a") (data (i32.const 24690) "a") (data (i32.const 24693) "a") (data (i32.const 24696) "a") (data (i32.const 24699) "a") (data (i32.const 24702) "a") (data (i32.const 24705) "a") (data (i32.const 24708) "a") (data (i32.const 24711) "a") (data (i32.const 24714) "a") (data (i32.const 24717) "a") (data (i32.const 24720) "a") (data (i32.const 24723) "a") (data (i32.const 24726) "a") (data (i32.const 24729) "a") (data (i32.const 24732) "a") (data (i32.const 24735) "a") (data (i32.const 24738) "a") (data (i32.const 24741) "a") (data (i32.const 24744) "a") (data (i32.const 24747) "a") (data (i32.const 24750) "a") (data (i32.const 24753) "a") (data (i32.const 24756) "a") (data (i32.const 24759) "a") (data (i32.const 24762) "a") (data (i32.const 24765) "a") (data (i32.const 24768) "a") (data (i32.const 24771) "a") (data (i32.const 24774) "a") (data (i32.const 24777) "a") (data (i32.const 24780) "a") (data (i32.const 24783) "a") (data (i32.const 24786) "a") (data (i32.const 24789) "a") (data (i32.const 24792) "a") (data (i32.const 24795) "a") (data (i32.const 24798) "a") (data (i32.const 24801) "a") (data (i32.const 24804) "a") (data (i32.const 24807) "a") (data (i32.const 24810) "a") (data (i32.const 24813) "a") (data (i32.const 24816) "a") (data (i32.const 24819) "a") (data (i32.const 24822) "a") (data (i32.const 24825) "a") (data (i32.const 24828) "a") (data (i32.const 24831) "a") (data (i32.const 24834) "a") (data (i32.const 24837) "a") (data (i32.const 24840) "a") (data (i32.const 24843) "a") (data (i32.const 24846) "a") (data (i32.const 24849) "a") (data (i32.const 24852) "a") (data (i32.const 24855) "a") (data (i32.const 24858) "a") (data (i32.const 24861) "a") (data (i32.const 24864) "a") (data (i32.const 24867) "a") (data (i32.const 24870) "a") (data (i32.const 24873) "a") (data (i32.const 24876) "a") (data (i32.const 24879) "a") (data (i32.const 24882) "a") (data (i32.const 24885) "a") (data (i32.const 24888) "a") (data (i32.const 24891) "a") (data (i32.const 24894) "a") (data (i32.const 24897) "a") (data (i32.const 24900) "a") (data (i32.const 24903) "a") (data (i32.const 24906) "a") (data (i32.const 24909) "a") (data (i32.const 24912) "a") (data (i32.const 24915) "a") (data (i32.const 24918) "a") (data (i32.const 24921) "a") (data (i32.const 24924) "a") (data (i32.const 24927) "a") (data (i32.const 24930) "a") (data (i32.const 24933) "a") (data (i32.const 24936) "a") (data (i32.const 24939) "a") (data (i32.const 24942) "a") (data (i32.const 24945) "a") (data (i32.const 24948) "a") (data (i32.const 24951) "a") (data (i32.const 24954) "a") (data (i32.const 24957) "a") (data (i32.const 24960) "a") (data (i32.const 24963) "a") (data (i32.const 24966) "a") (data (i32.const 24969) "a") (data (i32.const 24972) "a") (data (i32.const 24975) "a") (data (i32.const 24978) "a") (data (i32.const 24981) "a") (data (i32.const 24984) "a") (data (i32.const 24987) "a") (data (i32.const 24990) "a") (data (i32.const 24993) "a") (data (i32.const 24996) "a") (data (i32.const 24999) "a") (data (i32.const 25002) "a") (data (i32.const 25005) "a") (data (i32.const 25008) "a") (data (i32.const 25011) "a") (data (i32.const 25014) "a") (data (i32.const 25017) "a") (data (i32.const 25020) "a") (data (i32.const 25023) "a") (data (i32.const 25026) "a") (data (i32.const 25029) "a") (data (i32.const 25032) "a") (data (i32.const 25035) "a") (data (i32.const 25038) "a") (data (i32.const 25041) "a") (data (i32.const 25044) "a") (data (i32.const 25047) "a") (data (i32.const 25050) "a") (data (i32.const 25053) "a") (data (i32.const 25056) "a") (data (i32.const 25059) "a") (data (i32.const 25062) "a") (data (i32.const 25065) "a") (data (i32.const 25068) "a") (data (i32.const 25071) "a") (data (i32.const 25074) "a") (data (i32.const 25077) "a") (data (i32.const 25080) "a") (data (i32.const 25083) "a") (data (i32.const 25086) "a") (data (i32.const 25089) "a") (data (i32.const 25092) "a") (data (i32.const 25095) "a") (data (i32.const 25098) "a") (data (i32.const 25101) "a") (data (i32.const 25104) "a") (data (i32.const 25107) "a") (data (i32.const 25110) "a") (data (i32.const 25113) "a") (data (i32.const 25116) "a") (data (i32.const 25119) "a") (data (i32.const 25122) "a") (data (i32.const 25125) "a") (data (i32.const 25128) "a") (data (i32.const 25131) "a") (data (i32.const 25134) "a") (data (i32.const 25137) "a") (data (i32.const 25140) "a") (data (i32.const 25143) "a") (data (i32.const 25146) "a") (data (i32.const 25149) "a") (data (i32.const 25152) "a") (data (i32.const 25155) "a") (data (i32.const 25158) "a") (data (i32.const 25161) "a") (data (i32.const 25164) "a") (data (i32.const 25167) "a") (data (i32.const 25170) "a") (data (i32.const 25173) "a") (data (i32.const 25176) "a") (data (i32.const 25179) "a") (data (i32.const 25182) "a") (data (i32.const 25185) "a") (data (i32.const 25188) "a") (data (i32.const 25191) "a") (data (i32.const 25194) "a") (data (i32.const 25197) "a") (data (i32.const 25200) "a") (data (i32.const 25203) "a") (data (i32.const 25206) "a") (data (i32.const 25209) "a") (data (i32.const 25212) "a") (data (i32.const 25215) "a") (data (i32.const 25218) "a") (data (i32.const 25221) "a") (data (i32.const 25224) "a") (data (i32.const 25227) "a") (data (i32.const 25230) "a") (data (i32.const 25233) "a") (data (i32.const 25236) "a") (data (i32.const 25239) "a") (data (i32.const 25242) "a") (data (i32.const 25245) "a") (data (i32.const 25248) "a") (data (i32.const 25251) "a") (data (i32.const 25254) "a") (data (i32.const 25257) "a") (data (i32.const 25260) "a") (data (i32.const 25263) "a") (data (i32.const 25266) "a") (data (i32.const 25269) "a") (data (i32.const 25272) "a") (data (i32.const 25275) "a") (data (i32.const 25278) "a") (data (i32.const 25281) "a") (data (i32.const 25284) "a") (data (i32.const 25287) "a") (data (i32.const 25290) "a") (data (i32.const 25293) "a") (data (i32.const 25296) "a") (data (i32.const 25299) "a") (data (i32.const 25302) "a") (data (i32.const 25305) "a") (data (i32.const 25308) "a") (data (i32.const 25311) "a") (data (i32.const 25314) "a") (data (i32.const 25317) "a") (data (i32.const 25320) "a") (data (i32.const 25323) "a") (data (i32.const 25326) "a") (data (i32.const 25329) "a") (data (i32.const 25332) "a") (data (i32.const 25335) "a") (data (i32.const 25338) "a") (data (i32.const 25341) "a") (data (i32.const 25344) "a") (data (i32.const 25347) "a") (data (i32.const 25350) "a") (data (i32.const 25353) "a") (data (i32.const 25356) "a") (data (i32.const 25359) "a") (data (i32.const 25362) "a") (data (i32.const 25365) "a") (data (i32.const 25368) "a") (data (i32.const 25371) "a") (data (i32.const 25374) "a") (data (i32.const 25377) "a") (data (i32.const 25380) "a") (data (i32.const 25383) "a") (data (i32.const 25386) "a") (data (i32.const 25389) "a") (data (i32.const 25392) "a") (data (i32.const 25395) "a") (data (i32.const 25398) "a") (data (i32.const 25401) "a") (data (i32.const 25404) "a") (data (i32.const 25407) "a") (data (i32.const 25410) "a") (data (i32.const 25413) "a") (data (i32.const 25416) "a") (data (i32.const 25419) "a") (data (i32.const 25422) "a") (data (i32.const 25425) "a") (data (i32.const 25428) "a") (data (i32.const 25431) "a") (data (i32.const 25434) "a") (data (i32.const 25437) "a") (data (i32.const 25440) "a") (data (i32.const 25443) "a") (data (i32.const 25446) "a") (data (i32.const 25449) "a") (data (i32.const 25452) "a") (data (i32.const 25455) "a") (data (i32.const 25458) "a") (data (i32.const 25461) "a") (data (i32.const 25464) "a") (data (i32.const 25467) "a") (data (i32.const 25470) "a") (data (i32.const 25473) "a") (data (i32.const 25476) "a") (data (i32.const 25479) "a") (data (i32.const 25482) "a") (data (i32.const 25485) "a") (data (i32.const 25488) "a") (data (i32.const 25491) "a") (data (i32.const 25494) "a") (data (i32.const 25497) "a") (data (i32.const 25500) "a") (data (i32.const 25503) "a") (data (i32.const 25506) "a") (data (i32.const 25509) "a") (data (i32.const 25512) "a") (data (i32.const 25515) "a") (data (i32.const 25518) "a") (data (i32.const 25521) "a") (data (i32.const 25524) "a") (data (i32.const 25527) "a") (data (i32.const 25530) "a") (data (i32.const 25533) "a") (data (i32.const 25536) "a") (data (i32.const 25539) "a") (data (i32.const 25542) "a") (data (i32.const 25545) "a") (data (i32.const 25548) "a") (data (i32.const 25551) "a") (data (i32.const 25554) "a") (data (i32.const 25557) "a") (data (i32.const 25560) "a") (data (i32.const 25563) "a") (data (i32.const 25566) "a") (data (i32.const 25569) "a") (data (i32.const 25572) "a") (data (i32.const 25575) "a") (data (i32.const 25578) "a") (data (i32.const 25581) "a") (data (i32.const 25584) "a") (data (i32.const 25587) "a") (data (i32.const 25590) "a") (data (i32.const 25593) "a") (data (i32.const 25596) "a") (data (i32.const 25599) "a") (data (i32.const 25602) "a") (data (i32.const 25605) "a") (data (i32.const 25608) "a") (data (i32.const 25611) "a") (data (i32.const 25614) "a") (data (i32.const 25617) "a") (data (i32.const 25620) "a") (data (i32.const 25623) "a") (data (i32.const 25626) "a") (data (i32.const 25629) "a") (data (i32.const 25632) "a") (data (i32.const 25635) "a") (data (i32.const 25638) "a") (data (i32.const 25641) "a") (data (i32.const 25644) "a") (data (i32.const 25647) "a") (data (i32.const 25650) "a") (data (i32.const 25653) "a") (data (i32.const 25656) "a") (data (i32.const 25659) "a") (data (i32.const 25662) "a") (data (i32.const 25665) "a") (data (i32.const 25668) "a") (data (i32.const 25671) "a") (data (i32.const 25674) "a") (data (i32.const 25677) "a") (data (i32.const 25680) "a") (data (i32.const 25683) "a") (data (i32.const 25686) "a") (data (i32.const 25689) "a") (data (i32.const 25692) "a") (data (i32.const 25695) "a") (data (i32.const 25698) "a") (data (i32.const 25701) "a") (data (i32.const 25704) "a") (data (i32.const 25707) "a") (data (i32.const 25710) "a") (data (i32.const 25713) "a") (data (i32.const 25716) "a") (data (i32.const 25719) "a") (data (i32.const 25722) "a") (data (i32.const 25725) "a") (data (i32.const 25728) "a") (data (i32.const 25731) "a") (data (i32.const 25734) "a") (data (i32.const 25737) "a") (data (i32.const 25740) "a") (data (i32.const 25743) "a") (data (i32.const 25746) "a") (data (i32.const 25749) "a") (data (i32.const 25752) "a") (data (i32.const 25755) "a") (data (i32.const 25758) "a") (data (i32.const 25761) "a") (data (i32.const 25764) "a") (data (i32.const 25767) "a") (data (i32.const 25770) "a") (data (i32.const 25773) "a") (data (i32.const 25776) "a") (data (i32.const 25779) "a") (data (i32.const 25782) "a") (data (i32.const 25785) "a") (data (i32.const 25788) "a") (data (i32.const 25791) "a") (data (i32.const 25794) "a") (data (i32.const 25797) "a") (data (i32.const 25800) "a") (data (i32.const 25803) "a") (data (i32.const 25806) "a") (data (i32.const 25809) "a") (data (i32.const 25812) "a") (data (i32.const 25815) "a") (data (i32.const 25818) "a") (data (i32.const 25821) "a") (data (i32.const 25824) "a") (data (i32.const 25827) "a") (data (i32.const 25830) "a") (data (i32.const 25833) "a") (data (i32.const 25836) "a") (data (i32.const 25839) "a") (data (i32.const 25842) "a") (data (i32.const 25845) "a") (data (i32.const 25848) "a") (data (i32.const 25851) "a") (data (i32.const 25854) "a") (data (i32.const 25857) "a") (data (i32.const 25860) "a") (data (i32.const 25863) "a") (data (i32.const 25866) "a") (data (i32.const 25869) "a") (data (i32.const 25872) "a") (data (i32.const 25875) "a") (data (i32.const 25878) "a") (data (i32.const 25881) "a") (data (i32.const 25884) "a") (data (i32.const 25887) "a") (data (i32.const 25890) "a") (data (i32.const 25893) "a") (data (i32.const 25896) "a") (data (i32.const 25899) "a") (data (i32.const 25902) "a") (data (i32.const 25905) "a") (data (i32.const 25908) "a") (data (i32.const 25911) "a") (data (i32.const 25914) "a") (data (i32.const 25917) "a") (data (i32.const 25920) "a") (data (i32.const 25923) "a") (data (i32.const 25926) "a") (data (i32.const 25929) "a") (data (i32.const 25932) "a") (data (i32.const 25935) "a") (data (i32.const 25938) "a") (data (i32.const 25941) "a") (data (i32.const 25944) "a") (data (i32.const 25947) "a") (data (i32.const 25950) "a") (data (i32.const 25953) "a") (data (i32.const 25956) "a") (data (i32.const 25959) "a") (data (i32.const 25962) "a") (data (i32.const 25965) "a") (data (i32.const 25968) "a") (data (i32.const 25971) "a") (data (i32.const 25974) "a") (data (i32.const 25977) "a") (data (i32.const 25980) "a") (data (i32.const 25983) "a") (data (i32.const 25986) "a") (data (i32.const 25989) "a") (data (i32.const 25992) "a") (data (i32.const 25995) "a") (data (i32.const 25998) "a") (data (i32.const 26001) "a") (data (i32.const 26004) "a") (data (i32.const 26007) "a") (data (i32.const 26010) "a") (data (i32.const 26013) "a") (data (i32.const 26016) "a") (data (i32.const 26019) "a") (data (i32.const 26022) "a") (data (i32.const 26025) "a") (data (i32.const 26028) "a") (data (i32.const 26031) "a") (data (i32.const 26034) "a") (data (i32.const 26037) "a") (data (i32.const 26040) "a") (data (i32.const 26043) "a") (data (i32.const 26046) "a") (data (i32.const 26049) "a") (data (i32.const 26052) "a") (data (i32.const 26055) "a") (data (i32.const 26058) "a") (data (i32.const 26061) "a") (data (i32.const 26064) "a") (data (i32.const 26067) "a") (data (i32.const 26070) "a") (data (i32.const 26073) "a") (data (i32.const 26076) "a") (data (i32.const 26079) "a") (data (i32.const 26082) "a") (data (i32.const 26085) "a") (data (i32.const 26088) "a") (data (i32.const 26091) "a") (data (i32.const 26094) "a") (data (i32.const 26097) "a") (data (i32.const 26100) "a") (data (i32.const 26103) "a") (data (i32.const 26106) "a") (data (i32.const 26109) "a") (data (i32.const 26112) "a") (data (i32.const 26115) "a") (data (i32.const 26118) "a") (data (i32.const 26121) "a") (data (i32.const 26124) "a") (data (i32.const 26127) "a") (data (i32.const 26130) "a") (data (i32.const 26133) "a") (data (i32.const 26136) "a") (data (i32.const 26139) "a") (data (i32.const 26142) "a") (data (i32.const 26145) "a") (data (i32.const 26148) "a") (data (i32.const 26151) "a") (data (i32.const 26154) "a") (data (i32.const 26157) "a") (data (i32.const 26160) "a") (data (i32.const 26163) "a") (data (i32.const 26166) "a") (data (i32.const 26169) "a") (data (i32.const 26172) "a") (data (i32.const 26175) "a") (data (i32.const 26178) "a") (data (i32.const 26181) "a") (data (i32.const 26184) "a") (data (i32.const 26187) "a") (data (i32.const 26190) "a") (data (i32.const 26193) "a") (data (i32.const 26196) "a") (data (i32.const 26199) "a") (data (i32.const 26202) "a") (data (i32.const 26205) "a") (data (i32.const 26208) "a") (data (i32.const 26211) "a") (data (i32.const 26214) "a") (data (i32.const 26217) "a") (data (i32.const 26220) "a") (data (i32.const 26223) "a") (data (i32.const 26226) "a") (data (i32.const 26229) "a") (data (i32.const 26232) "a") (data (i32.const 26235) "a") (data (i32.const 26238) "a") (data (i32.const 26241) "a") (data (i32.const 26244) "a") (data (i32.const 26247) "a") (data (i32.const 26250) "a") (data (i32.const 26253) "a") (data (i32.const 26256) "a") (data (i32.const 26259) "a") (data (i32.const 26262) "a") (data (i32.const 26265) "a") (data (i32.const 26268) "a") (data (i32.const 26271) "a") (data (i32.const 26274) "a") (data (i32.const 26277) "a") (data (i32.const 26280) "a") (data (i32.const 26283) "a") (data (i32.const 26286) "a") (data (i32.const 26289) "a") (data (i32.const 26292) "a") (data (i32.const 26295) "a") (data (i32.const 26298) "a") (data (i32.const 26301) "a") (data (i32.const 26304) "a") (data (i32.const 26307) "a") (data (i32.const 26310) "a") (data (i32.const 26313) "a") (data (i32.const 26316) "a") (data (i32.const 26319) "a") (data (i32.const 26322) "a") (data (i32.const 26325) "a") (data (i32.const 26328) "a") (data (i32.const 26331) "a") (data (i32.const 26334) "a") (data (i32.const 26337) "a") (data (i32.const 26340) "a") (data (i32.const 26343) "a") (data (i32.const 26346) "a") (data (i32.const 26349) "a") (data (i32.const 26352) "a") (data (i32.const 26355) "a") (data (i32.const 26358) "a") (data (i32.const 26361) "a") (data (i32.const 26364) "a") (data (i32.const 26367) "a") (data (i32.const 26370) "a") (data (i32.const 26373) "a") (data (i32.const 26376) "a") (data (i32.const 26379) "a") (data (i32.const 26382) "a") (data (i32.const 26385) "a") (data (i32.const 26388) "a") (data (i32.const 26391) "a") (data (i32.const 26394) "a") (data (i32.const 26397) "a") (data (i32.const 26400) "a") (data (i32.const 26403) "a") (data (i32.const 26406) "a") (data (i32.const 26409) "a") (data (i32.const 26412) "a") (data (i32.const 26415) "a") (data (i32.const 26418) "a") (data (i32.const 26421) "a") (data (i32.const 26424) "a") (data (i32.const 26427) "a") (data (i32.const 26430) "a") (data (i32.const 26433) "a") (data (i32.const 26436) "a") (data (i32.const 26439) "a") (data (i32.const 26442) "a") (data (i32.const 26445) "a") (data (i32.const 26448) "a") (data (i32.const 26451) "a") (data (i32.const 26454) "a") (data (i32.const 26457) "a") (data (i32.const 26460) "a") (data (i32.const 26463) "a") (data (i32.const 26466) "a") (data (i32.const 26469) "a") (data (i32.const 26472) "a") (data (i32.const 26475) "a") (data (i32.const 26478) "a") (data (i32.const 26481) "a") (data (i32.const 26484) "a") (data (i32.const 26487) "a") (data (i32.const 26490) "a") (data (i32.const 26493) "a") (data (i32.const 26496) "a") (data (i32.const 26499) "a") (data (i32.const 26502) "a") (data (i32.const 26505) "a") (data (i32.const 26508) "a") (data (i32.const 26511) "a") (data (i32.const 26514) "a") (data (i32.const 26517) "a") (data (i32.const 26520) "a") (data (i32.const 26523) "a") (data (i32.const 26526) "a") (data (i32.const 26529) "a") (data (i32.const 26532) "a") (data (i32.const 26535) "a") (data (i32.const 26538) "a") (data (i32.const 26541) "a") (data (i32.const 26544) "a") (data (i32.const 26547) "a") (data (i32.const 26550) "a") (data (i32.const 26553) "a") (data (i32.const 26556) "a") (data (i32.const 26559) "a") (data (i32.const 26562) "a") (data (i32.const 26565) "a") (data (i32.const 26568) "a") (data (i32.const 26571) "a") (data (i32.const 26574) "a") (data (i32.const 26577) "a") (data (i32.const 26580) "a") (data (i32.const 26583) "a") (data (i32.const 26586) "a") (data (i32.const 26589) "a") (data (i32.const 26592) "a") (data (i32.const 26595) "a") (data (i32.const 26598) "a") (data (i32.const 26601) "a") (data (i32.const 26604) "a") (data (i32.const 26607) "a") (data (i32.const 26610) "a") (data (i32.const 26613) "a") (data (i32.const 26616) "a") (data (i32.const 26619) "a") (data (i32.const 26622) "a") (data (i32.const 26625) "a") (data (i32.const 26628) "a") (data (i32.const 26631) "a") (data (i32.const 26634) "a") (data (i32.const 26637) "a") (data (i32.const 26640) "a") (data (i32.const 26643) "a") (data (i32.const 26646) "a") (data (i32.const 26649) "a") (data (i32.const 26652) "a") (data (i32.const 26655) "a") (data (i32.const 26658) "a") (data (i32.const 26661) "a") (data (i32.const 26664) "a") (data (i32.const 26667) "a") (data (i32.const 26670) "a") (data (i32.const 26673) "a") (data (i32.const 26676) "a") (data (i32.const 26679) "a") (data (i32.const 26682) "a") (data (i32.const 26685) "a") (data (i32.const 26688) "a") (data (i32.const 26691) "a") (data (i32.const 26694) "a") (data (i32.const 26697) "a") (data (i32.const 26700) "a") (data (i32.const 26703) "a") (data (i32.const 26706) "a") (data (i32.const 26709) "a") (data (i32.const 26712) "a") (data (i32.const 26715) "a") (data (i32.const 26718) "a") (data (i32.const 26721) "a") (data (i32.const 26724) "a") (data (i32.const 26727) "a") (data (i32.const 26730) "a") (data (i32.const 26733) "a") (data (i32.const 26736) "a") (data (i32.const 26739) "a") (data (i32.const 26742) "a") (data (i32.const 26745) "a") (data (i32.const 26748) "a") (data (i32.const 26751) "a") (data (i32.const 26754) "a") (data (i32.const 26757) "a") (data (i32.const 26760) "a") (data (i32.const 26763) "a") (data (i32.const 26766) "a") (data (i32.const 26769) "a") (data (i32.const 26772) "a") (data (i32.const 26775) "a") (data (i32.const 26778) "a") (data (i32.const 26781) "a") (data (i32.const 26784) "a") (data (i32.const 26787) "a") (data (i32.const 26790) "a") (data (i32.const 26793) "a") (data (i32.const 26796) "a") (data (i32.const 26799) "a") (data (i32.const 26802) "a") (data (i32.const 26805) "a") (data (i32.const 26808) "a") (data (i32.const 26811) "a") (data (i32.const 26814) "a") (data (i32.const 26817) "a") (data (i32.const 26820) "a") (data (i32.const 26823) "a") (data (i32.const 26826) "a") (data (i32.const 26829) "a") (data (i32.const 26832) "a") (data (i32.const 26835) "a") (data (i32.const 26838) "a") (data (i32.const 26841) "a") (data (i32.const 26844) "a") (data (i32.const 26847) "a") (data (i32.const 26850) "a") (data (i32.const 26853) "a") (data (i32.const 26856) "a") (data (i32.const 26859) "a") (data (i32.const 26862) "a") (data (i32.const 26865) "a") (data (i32.const 26868) "a") (data (i32.const 26871) "a") (data (i32.const 26874) "a") (data (i32.const 26877) "a") (data (i32.const 26880) "a") (data (i32.const 26883) "a") (data (i32.const 26886) "a") (data (i32.const 26889) "a") (data (i32.const 26892) "a") (data (i32.const 26895) "a") (data (i32.const 26898) "a") (data (i32.const 26901) "a") (data (i32.const 26904) "a") (data (i32.const 26907) "a") (data (i32.const 26910) "a") (data (i32.const 26913) "a") (data (i32.const 26916) "a") (data (i32.const 26919) "a") (data (i32.const 26922) "a") (data (i32.const 26925) "a") (data (i32.const 26928) "a") (data (i32.const 26931) "a") (data (i32.const 26934) "a") (data (i32.const 26937) "a") (data (i32.const 26940) "a") (data (i32.const 26943) "a") (data (i32.const 26946) "a") (data (i32.const 26949) "a") (data (i32.const 26952) "a") (data (i32.const 26955) "a") (data (i32.const 26958) "a") (data (i32.const 26961) "a") (data (i32.const 26964) "a") (data (i32.const 26967) "a") (data (i32.const 26970) "a") (data (i32.const 26973) "a") (data (i32.const 26976) "a") (data (i32.const 26979) "a") (data (i32.const 26982) "a") (data (i32.const 26985) "a") (data (i32.const 26988) "a") (data (i32.const 26991) "a") (data (i32.const 26994) "a") (data (i32.const 26997) "a") (data (i32.const 27000) "a") (data (i32.const 27003) "a") (data (i32.const 27006) "a") (data (i32.const 27009) "a") (data (i32.const 27012) "a") (data (i32.const 27015) "a") (data (i32.const 27018) "a") (data (i32.const 27021) "a") (data (i32.const 27024) "a") (data (i32.const 27027) "a") (data (i32.const 27030) "a") (data (i32.const 27033) "a") (data (i32.const 27036) "a") (data (i32.const 27039) "a") (data (i32.const 27042) "a") (data (i32.const 27045) "a") (data (i32.const 27048) "a") (data (i32.const 27051) "a") (data (i32.const 27054) "a") (data (i32.const 27057) "a") (data (i32.const 27060) "a") (data (i32.const 27063) "a") (data (i32.const 27066) "a") (data (i32.const 27069) "a") (data (i32.const 27072) "a") (data (i32.const 27075) "a") (data (i32.const 27078) "a") (data (i32.const 27081) "a") (data (i32.const 27084) "a") (data (i32.const 27087) "a") (data (i32.const 27090) "a") (data (i32.const 27093) "a") (data (i32.const 27096) "a") (data (i32.const 27099) "a") (data (i32.const 27102) "a") (data (i32.const 27105) "a") (data (i32.const 27108) "a") (data (i32.const 27111) "a") (data (i32.const 27114) "a") (data (i32.const 27117) "a") (data (i32.const 27120) "a") (data (i32.const 27123) "a") (data (i32.const 27126) "a") (data (i32.const 27129) "a") (data (i32.const 27132) "a") (data (i32.const 27135) "a") (data (i32.const 27138) "a") (data (i32.const 27141) "a") (data (i32.const 27144) "a") (data (i32.const 27147) "a") (data (i32.const 27150) "a") (data (i32.const 27153) "a") (data (i32.const 27156) "a") (data (i32.const 27159) "a") (data (i32.const 27162) "a") (data (i32.const 27165) "a") (data (i32.const 27168) "a") (data (i32.const 27171) "a") (data (i32.const 27174) "a") (data (i32.const 27177) "a") (data (i32.const 27180) "a") (data (i32.const 27183) "a") (data (i32.const 27186) "a") (data (i32.const 27189) "a") (data (i32.const 27192) "a") (data (i32.const 27195) "a") (data (i32.const 27198) "a") (data (i32.const 27201) "a") (data (i32.const 27204) "a") (data (i32.const 27207) "a") (data (i32.const 27210) "a") (data (i32.const 27213) "a") (data (i32.const 27216) "a") (data (i32.const 27219) "a") (data (i32.const 27222) "a") (data (i32.const 27225) "a") (data (i32.const 27228) "a") (data (i32.const 27231) "a") (data (i32.const 27234) "a") (data (i32.const 27237) "a") (data (i32.const 27240) "a") (data (i32.const 27243) "a") (data (i32.const 27246) "a") (data (i32.const 27249) "a") (data (i32.const 27252) "a") (data (i32.const 27255) "a") (data (i32.const 27258) "a") (data (i32.const 27261) "a") (data (i32.const 27264) "a") (data (i32.const 27267) "a") (data (i32.const 27270) "a") (data (i32.const 27273) "a") (data (i32.const 27276) "a") (data (i32.const 27279) "a") (data (i32.const 27282) "a") (data (i32.const 27285) "a") (data (i32.const 27288) "a") (data (i32.const 27291) "a") (data (i32.const 27294) "a") (data (i32.const 27297) "a") (data (i32.const 27300) "a") (data (i32.const 27303) "a") (data (i32.const 27306) "a") (data (i32.const 27309) "a") (data (i32.const 27312) "a") (data (i32.const 27315) "a") (data (i32.const 27318) "a") (data (i32.const 27321) "a") (data (i32.const 27324) "a") (data (i32.const 27327) "a") (data (i32.const 27330) "a") (data (i32.const 27333) "a") (data (i32.const 27336) "a") (data (i32.const 27339) "a") (data (i32.const 27342) "a") (data (i32.const 27345) "a") (data (i32.const 27348) "a") (data (i32.const 27351) "a") (data (i32.const 27354) "a") (data (i32.const 27357) "a") (data (i32.const 27360) "a") (data (i32.const 27363) "a") (data (i32.const 27366) "a") (data (i32.const 27369) "a") (data (i32.const 27372) "a") (data (i32.const 27375) "a") (data (i32.const 27378) "a") (data (i32.const 27381) "a") (data (i32.const 27384) "a") (data (i32.const 27387) "a") (data (i32.const 27390) "a") (data (i32.const 27393) "a") (data (i32.const 27396) "a") (data (i32.const 27399) "a") (data (i32.const 27402) "a") (data (i32.const 27405) "a") (data (i32.const 27408) "a") (data (i32.const 27411) "a") (data (i32.const 27414) "a") (data (i32.const 27417) "a") (data (i32.const 27420) "a") (data (i32.const 27423) "a") (data (i32.const 27426) "a") (data (i32.const 27429) "a") (data (i32.const 27432) "a") (data (i32.const 27435) "a") (data (i32.const 27438) "a") (data (i32.const 27441) "a") (data (i32.const 27444) "a") (data (i32.const 27447) "a") (data (i32.const 27450) "a") (data (i32.const 27453) "a") (data (i32.const 27456) "a") (data (i32.const 27459) "a") (data (i32.const 27462) "a") (data (i32.const 27465) "a") (data (i32.const 27468) "a") (data (i32.const 27471) "a") (data (i32.const 27474) "a") (data (i32.const 27477) "a") (data (i32.const 27480) "a") (data (i32.const 27483) "a") (data (i32.const 27486) "a") (data (i32.const 27489) "a") (data (i32.const 27492) "a") (data (i32.const 27495) "a") (data (i32.const 27498) "a") (data (i32.const 27501) "a") (data (i32.const 27504) "a") (data (i32.const 27507) "a") (data (i32.const 27510) "a") (data (i32.const 27513) "a") (data (i32.const 27516) "a") (data (i32.const 27519) "a") (data (i32.const 27522) "a") (data (i32.const 27525) "a") (data (i32.const 27528) "a") (data (i32.const 27531) "a") (data (i32.const 27534) "a") (data (i32.const 27537) "a") (data (i32.const 27540) "a") (data (i32.const 27543) "a") (data (i32.const 27546) "a") (data (i32.const 27549) "a") (data (i32.const 27552) "a") (data (i32.const 27555) "a") (data (i32.const 27558) "a") (data (i32.const 27561) "a") (data (i32.const 27564) "a") (data (i32.const 27567) "a") (data (i32.const 27570) "a") (data (i32.const 27573) "a") (data (i32.const 27576) "a") (data (i32.const 27579) "a") (data (i32.const 27582) "a") (data (i32.const 27585) "a") (data (i32.const 27588) "a") (data (i32.const 27591) "a") (data (i32.const 27594) "a") (data (i32.const 27597) "a") (data (i32.const 27600) "a") (data (i32.const 27603) "a") (data (i32.const 27606) "a") (data (i32.const 27609) "a") (data (i32.const 27612) "a") (data (i32.const 27615) "a") (data (i32.const 27618) "a") (data (i32.const 27621) "a") (data (i32.const 27624) "a") (data (i32.const 27627) "a") (data (i32.const 27630) "a") (data (i32.const 27633) "a") (data (i32.const 27636) "a") (data (i32.const 27639) "a") (data (i32.const 27642) "a") (data (i32.const 27645) "a") (data (i32.const 27648) "a") (data (i32.const 27651) "a") (data (i32.const 27654) "a") (data (i32.const 27657) "a") (data (i32.const 27660) "a") (data (i32.const 27663) "a") (data (i32.const 27666) "a") (data (i32.const 27669) "a") (data (i32.const 27672) "a") (data (i32.const 27675) "a") (data (i32.const 27678) "a") (data (i32.const 27681) "a") (data (i32.const 27684) "a") (data (i32.const 27687) "a") (data (i32.const 27690) "a") (data (i32.const 27693) "a") (data (i32.const 27696) "a") (data (i32.const 27699) "a") (data (i32.const 27702) "a") (data (i32.const 27705) "a") (data (i32.const 27708) "a") (data (i32.const 27711) "a") (data (i32.const 27714) "a") (data (i32.const 27717) "a") (data (i32.const 27720) "a") (data (i32.const 27723) "a") (data (i32.const 27726) "a") (data (i32.const 27729) "a") (data (i32.const 27732) "a") (data (i32.const 27735) "a") (data (i32.const 27738) "a") (data (i32.const 27741) "a") (data (i32.const 27744) "a") (data (i32.const 27747) "a") (data (i32.const 27750) "a") (data (i32.const 27753) "a") (data (i32.const 27756) "a") (data (i32.const 27759) "a") (data (i32.const 27762) "a") (data (i32.const 27765) "a") (data (i32.const 27768) "a") (data (i32.const 27771) "a") (data (i32.const 27774) "a") (data (i32.const 27777) "a") (data (i32.const 27780) "a") (data (i32.const 27783) "a") (data (i32.const 27786) "a") (data (i32.const 27789) "a") (data (i32.const 27792) "a") (data (i32.const 27795) "a") (data (i32.const 27798) "a") (data (i32.const 27801) "a") (data (i32.const 27804) "a") (data (i32.const 27807) "a") (data (i32.const 27810) "a") (data (i32.const 27813) "a") (data (i32.const 27816) "a") (data (i32.const 27819) "a") (data (i32.const 27822) "a") (data (i32.const 27825) "a") (data (i32.const 27828) "a") (data (i32.const 27831) "a") (data (i32.const 27834) "a") (data (i32.const 27837) "a") (data (i32.const 27840) "a") (data (i32.const 27843) "a") (data (i32.const 27846) "a") (data (i32.const 27849) "a") (data (i32.const 27852) "a") (data (i32.const 27855) "a") (data (i32.const 27858) "a") (data (i32.const 27861) "a") (data (i32.const 27864) "a") (data (i32.const 27867) "a") (data (i32.const 27870) "a") (data (i32.const 27873) "a") (data (i32.const 27876) "a") (data (i32.const 27879) "a") (data (i32.const 27882) "a") (data (i32.const 27885) "a") (data (i32.const 27888) "a") (data (i32.const 27891) "a") (data (i32.const 27894) "a") (data (i32.const 27897) "a") (data (i32.const 27900) "a") (data (i32.const 27903) "a") (data (i32.const 27906) "a") (data (i32.const 27909) "a") (data (i32.const 27912) "a") (data (i32.const 27915) "a") (data (i32.const 27918) "a") (data (i32.const 27921) "a") (data (i32.const 27924) "a") (data (i32.const 27927) "a") (data (i32.const 27930) "a") (data (i32.const 27933) "a") (data (i32.const 27936) "a") (data (i32.const 27939) "a") (data (i32.const 27942) "a") (data (i32.const 27945) "a") (data (i32.const 27948) "a") (data (i32.const 27951) "a") (data (i32.const 27954) "a") (data (i32.const 27957) "a") (data (i32.const 27960) "a") (data (i32.const 27963) "a") (data (i32.const 27966) "a") (data (i32.const 27969) "a") (data (i32.const 27972) "a") (data (i32.const 27975) "a") (data (i32.const 27978) "a") (data (i32.const 27981) "a") (data (i32.const 27984) "a") (data (i32.const 27987) "a") (data (i32.const 27990) "a") (data (i32.const 27993) "a") (data (i32.const 27996) "a") (data (i32.const 27999) "a") (data (i32.const 28002) "a") (data (i32.const 28005) "a") (data (i32.const 28008) "a") (data (i32.const 28011) "a") (data (i32.const 28014) "a") (data (i32.const 28017) "a") (data (i32.const 28020) "a") (data (i32.const 28023) "a") (data (i32.const 28026) "a") (data (i32.const 28029) "a") (data (i32.const 28032) "a") (data (i32.const 28035) "a") (data (i32.const 28038) "a") (data (i32.const 28041) "a") (data (i32.const 28044) "a") (data (i32.const 28047) "a") (data (i32.const 28050) "a") (data (i32.const 28053) "a") (data (i32.const 28056) "a") (data (i32.const 28059) "a") (data (i32.const 28062) "a") (data (i32.const 28065) "a") (data (i32.const 28068) "a") (data (i32.const 28071) "a") (data (i32.const 28074) "a") (data (i32.const 28077) "a") (data (i32.const 28080) "a") (data (i32.const 28083) "a") (data (i32.const 28086) "a") (data (i32.const 28089) "a") (data (i32.const 28092) "a") (data (i32.const 28095) "a") (data (i32.const 28098) "a") (data (i32.const 28101) "a") (data (i32.const 28104) "a") (data (i32.const 28107) "a") (data (i32.const 28110) "a") (data (i32.const 28113) "a") (data (i32.const 28116) "a") (data (i32.const 28119) "a") (data (i32.const 28122) "a") (data (i32.const 28125) "a") (data (i32.const 28128) "a") (data (i32.const 28131) "a") (data (i32.const 28134) "a") (data (i32.const 28137) "a") (data (i32.const 28140) "a") (data (i32.const 28143) "a") (data (i32.const 28146) "a") (data (i32.const 28149) "a") (data (i32.const 28152) "a") (data (i32.const 28155) "a") (data (i32.const 28158) "a") (data (i32.const 28161) "a") (data (i32.const 28164) "a") (data (i32.const 28167) "a") (data (i32.const 28170) "a") (data (i32.const 28173) "a") (data (i32.const 28176) "a") (data (i32.const 28179) "a") (data (i32.const 28182) "a") (data (i32.const 28185) "a") (data (i32.const 28188) "a") (data (i32.const 28191) "a") (data (i32.const 28194) "a") (data (i32.const 28197) "a") (data (i32.const 28200) "a") (data (i32.const 28203) "a") (data (i32.const 28206) "a") (data (i32.const 28209) "a") (data (i32.const 28212) "a") (data (i32.const 28215) "a") (data (i32.const 28218) "a") (data (i32.const 28221) "a") (data (i32.const 28224) "a") (data (i32.const 28227) "a") (data (i32.const 28230) "a") (data (i32.const 28233) "a") (data (i32.const 28236) "a") (data (i32.const 28239) "a") (data (i32.const 28242) "a") (data (i32.const 28245) "a") (data (i32.const 28248) "a") (data (i32.const 28251) "a") (data (i32.const 28254) "a") (data (i32.const 28257) "a") (data (i32.const 28260) "a") (data (i32.const 28263) "a") (data (i32.const 28266) "a") (data (i32.const 28269) "a") (data (i32.const 28272) "a") (data (i32.const 28275) "a") (data (i32.const 28278) "a") (data (i32.const 28281) "a") (data (i32.const 28284) "a") (data (i32.const 28287) "a") (data (i32.const 28290) "a") (data (i32.const 28293) "a") (data (i32.const 28296) "a") (data (i32.const 28299) "a") (data (i32.const 28302) "a") (data (i32.const 28305) "a") (data (i32.const 28308) "a") (data (i32.const 28311) "a") (data (i32.const 28314) "a") (data (i32.const 28317) "a") (data (i32.const 28320) "a") (data (i32.const 28323) "a") (data (i32.const 28326) "a") (data (i32.const 28329) "a") (data (i32.const 28332) "a") (data (i32.const 28335) "a") (data (i32.const 28338) "a") (data (i32.const 28341) "a") (data (i32.const 28344) "a") (data (i32.const 28347) "a") (data (i32.const 28350) "a") (data (i32.const 28353) "a") (data (i32.const 28356) "a") (data (i32.const 28359) "a") (data (i32.const 28362) "a") (data (i32.const 28365) "a") (data (i32.const 28368) "a") (data (i32.const 28371) "a") (data (i32.const 28374) "a") (data (i32.const 28377) "a") (data (i32.const 28380) "a") (data (i32.const 28383) "a") (data (i32.const 28386) "a") (data (i32.const 28389) "a") (data (i32.const 28392) "a") (data (i32.const 28395) "a") (data (i32.const 28398) "a") (data (i32.const 28401) "a") (data (i32.const 28404) "a") (data (i32.const 28407) "a") (data (i32.const 28410) "a") (data (i32.const 28413) "a") (data (i32.const 28416) "a") (data (i32.const 28419) "a") (data (i32.const 28422) "a") (data (i32.const 28425) "a") (data (i32.const 28428) "a") (data (i32.const 28431) "a") (data (i32.const 28434) "a") (data (i32.const 28437) "a") (data (i32.const 28440) "a") (data (i32.const 28443) "a") (data (i32.const 28446) "a") (data (i32.const 28449) "a") (data (i32.const 28452) "a") (data (i32.const 28455) "a") (data (i32.const 28458) "a") (data (i32.const 28461) "a") (data (i32.const 28464) "a") (data (i32.const 28467) "a") (data (i32.const 28470) "a") (data (i32.const 28473) "a") (data (i32.const 28476) "a") (data (i32.const 28479) "a") (data (i32.const 28482) "a") (data (i32.const 28485) "a") (data (i32.const 28488) "a") (data (i32.const 28491) "a") (data (i32.const 28494) "a") (data (i32.const 28497) "a") (data (i32.const 28500) "a") (data (i32.const 28503) "a") (data (i32.const 28506) "a") (data (i32.const 28509) "a") (data (i32.const 28512) "a") (data (i32.const 28515) "a") (data (i32.const 28518) "a") (data (i32.const 28521) "a") (data (i32.const 28524) "a") (data (i32.const 28527) "a") (data (i32.const 28530) "a") (data (i32.const 28533) "a") (data (i32.const 28536) "a") (data (i32.const 28539) "a") (data (i32.const 28542) "a") (data (i32.const 28545) "a") (data (i32.const 28548) "a") (data (i32.const 28551) "a") (data (i32.const 28554) "a") (data (i32.const 28557) "a") (data (i32.const 28560) "a") (data (i32.const 28563) "a") (data (i32.const 28566) "a") (data (i32.const 28569) "a") (data (i32.const 28572) "a") (data (i32.const 28575) "a") (data (i32.const 28578) "a") (data (i32.const 28581) "a") (data (i32.const 28584) "a") (data (i32.const 28587) "a") (data (i32.const 28590) "a") (data (i32.const 28593) "a") (data (i32.const 28596) "a") (data (i32.const 28599) "a") (data (i32.const 28602) "a") (data (i32.const 28605) "a") (data (i32.const 28608) "a") (data (i32.const 28611) "a") (data (i32.const 28614) "a") (data (i32.const 28617) "a") (data (i32.const 28620) "a") (data (i32.const 28623) "a") (data (i32.const 28626) "a") (data (i32.const 28629) "a") (data (i32.const 28632) "a") (data (i32.const 28635) "a") (data (i32.const 28638) "a") (data (i32.const 28641) "a") (data (i32.const 28644) "a") (data (i32.const 28647) "a") (data (i32.const 28650) "a") (data (i32.const 28653) "a") (data (i32.const 28656) "a") (data (i32.const 28659) "a") (data (i32.const 28662) "a") (data (i32.const 28665) "a") (data (i32.const 28668) "a") (data (i32.const 28671) "a") (data (i32.const 28674) "a") (data (i32.const 28677) "a") (data (i32.const 28680) "a") (data (i32.const 28683) "a") (data (i32.const 28686) "a") (data (i32.const 28689) "a") (data (i32.const 28692) "a") (data (i32.const 28695) "a") (data (i32.const 28698) "a") (data (i32.const 28701) "a") (data (i32.const 28704) "a") (data (i32.const 28707) "a") (data (i32.const 28710) "a") (data (i32.const 28713) "a") (data (i32.const 28716) "a") (data (i32.const 28719) "a") (data (i32.const 28722) "a") (data (i32.const 28725) "a") (data (i32.const 28728) "a") (data (i32.const 28731) "a") (data (i32.const 28734) "a") (data (i32.const 28737) "a") (data (i32.const 28740) "a") (data (i32.const 28743) "a") (data (i32.const 28746) "a") (data (i32.const 28749) "a") (data (i32.const 28752) "a") (data (i32.const 28755) "a") (data (i32.const 28758) "a") (data (i32.const 28761) "a") (data (i32.const 28764) "a") (data (i32.const 28767) "a") (data (i32.const 28770) "a") (data (i32.const 28773) "a") (data (i32.const 28776) "a") (data (i32.const 28779) "a") (data (i32.const 28782) "a") (data (i32.const 28785) "a") (data (i32.const 28788) "a") (data (i32.const 28791) "a") (data (i32.const 28794) "a") (data (i32.const 28797) "a") (data (i32.const 28800) "a") (data (i32.const 28803) "a") (data (i32.const 28806) "a") (data (i32.const 28809) "a") (data (i32.const 28812) "a") (data (i32.const 28815) "a") (data (i32.const 28818) "a") (data (i32.const 28821) "a") (data (i32.const 28824) "a") (data (i32.const 28827) "a") (data (i32.const 28830) "a") (data (i32.const 28833) "a") (data (i32.const 28836) "a") (data (i32.const 28839) "a") (data (i32.const 28842) "a") (data (i32.const 28845) "a") (data (i32.const 28848) "a") (data (i32.const 28851) "a") (data (i32.const 28854) "a") (data (i32.const 28857) "a") (data (i32.const 28860) "a") (data (i32.const 28863) "a") (data (i32.const 28866) "a") (data (i32.const 28869) "a") (data (i32.const 28872) "a") (data (i32.const 28875) "a") (data (i32.const 28878) "a") (data (i32.const 28881) "a") (data (i32.const 28884) "a") (data (i32.const 28887) "a") (data (i32.const 28890) "a") (data (i32.const 28893) "a") (data (i32.const 28896) "a") (data (i32.const 28899) "a") (data (i32.const 28902) "a") (data (i32.const 28905) "a") (data (i32.const 28908) "a") (data (i32.const 28911) "a") (data (i32.const 28914) "a") (data (i32.const 28917) "a") (data (i32.const 28920) "a") (data (i32.const 28923) "a") (data (i32.const 28926) "a") (data (i32.const 28929) "a") (data (i32.const 28932) "a") (data (i32.const 28935) "a") (data (i32.const 28938) "a") (data (i32.const 28941) "a") (data (i32.const 28944) "a") (data (i32.const 28947) "a") (data (i32.const 28950) "a") (data (i32.const 28953) "a") (data (i32.const 28956) "a") (data (i32.const 28959) "a") (data (i32.const 28962) "a") (data (i32.const 28965) "a") (data (i32.const 28968) "a") (data (i32.const 28971) "a") (data (i32.const 28974) "a") (data (i32.const 28977) "a") (data (i32.const 28980) "a") (data (i32.const 28983) "a") (data (i32.const 28986) "a") (data (i32.const 28989) "a") (data (i32.const 28992) "a") (data (i32.const 28995) "a") (data (i32.const 28998) "a") (data (i32.const 29001) "a") (data (i32.const 29004) "a") (data (i32.const 29007) "a") (data (i32.const 29010) "a") (data (i32.const 29013) "a") (data (i32.const 29016) "a") (data (i32.const 29019) "a") (data (i32.const 29022) "a") (data (i32.const 29025) "a") (data (i32.const 29028) "a") (data (i32.const 29031) "a") (data (i32.const 29034) "a") (data (i32.const 29037) "a") (data (i32.const 29040) "a") (data (i32.const 29043) "a") (data (i32.const 29046) "a") (data (i32.const 29049) "a") (data (i32.const 29052) "a") (data (i32.const 29055) "a") (data (i32.const 29058) "a") (data (i32.const 29061) "a") (data (i32.const 29064) "a") (data (i32.const 29067) "a") (data (i32.const 29070) "a") (data (i32.const 29073) "a") (data (i32.const 29076) "a") (data (i32.const 29079) "a") (data (i32.const 29082) "a") (data (i32.const 29085) "a") (data (i32.const 29088) "a") (data (i32.const 29091) "a") (data (i32.const 29094) "a") (data (i32.const 29097) "a") (data (i32.const 29100) "a") (data (i32.const 29103) "a") (data (i32.const 29106) "a") (data (i32.const 29109) "a") (data (i32.const 29112) "a") (data (i32.const 29115) "a") (data (i32.const 29118) "a") (data (i32.const 29121) "a") (data (i32.const 29124) "a") (data (i32.const 29127) "a") (data (i32.const 29130) "a") (data (i32.const 29133) "a") (data (i32.const 29136) "a") (data (i32.const 29139) "a") (data (i32.const 29142) "a") (data (i32.const 29145) "a") (data (i32.const 29148) "a") (data (i32.const 29151) "a") (data (i32.const 29154) "a") (data (i32.const 29157) "a") (data (i32.const 29160) "a") (data (i32.const 29163) "a") (data (i32.const 29166) "a") (data (i32.const 29169) "a") (data (i32.const 29172) "a") (data (i32.const 29175) "a") (data (i32.const 29178) "a") (data (i32.const 29181) "a") (data (i32.const 29184) "a") (data (i32.const 29187) "a") (data (i32.const 29190) "a") (data (i32.const 29193) "a") (data (i32.const 29196) "a") (data (i32.const 29199) "a") (data (i32.const 29202) "a") (data (i32.const 29205) "a") (data (i32.const 29208) "a") (data (i32.const 29211) "a") (data (i32.const 29214) "a") (data (i32.const 29217) "a") (data (i32.const 29220) "a") (data (i32.const 29223) "a") (data (i32.const 29226) "a") (data (i32.const 29229) "a") (data (i32.const 29232) "a") (data (i32.const 29235) "a") (data (i32.const 29238) "a") (data (i32.const 29241) "a") (data (i32.const 29244) "a") (data (i32.const 29247) "a") (data (i32.const 29250) "a") (data (i32.const 29253) "a") (data (i32.const 29256) "a") (data (i32.const 29259) "a") (data (i32.const 29262) "a") (data (i32.const 29265) "a") (data (i32.const 29268) "a") (data (i32.const 29271) "a") (data (i32.const 29274) "a") (data (i32.const 29277) "a") (data (i32.const 29280) "a") (data (i32.const 29283) "a") (data (i32.const 29286) "a") (data (i32.const 29289) "a") (data (i32.const 29292) "a") (data (i32.const 29295) "a") (data (i32.const 29298) "a") (data (i32.const 29301) "a") (data (i32.const 29304) "a") (data (i32.const 29307) "a") (data (i32.const 29310) "a") (data (i32.const 29313) "a") (data (i32.const 29316) "a") (data (i32.const 29319) "a") (data (i32.const 29322) "a") (data (i32.const 29325) "a") (data (i32.const 29328) "a") (data (i32.const 29331) "a") (data (i32.const 29334) "a") (data (i32.const 29337) "a") (data (i32.const 29340) "a") (data (i32.const 29343) "a") (data (i32.const 29346) "a") (data (i32.const 29349) "a") (data (i32.const 29352) "a") (data (i32.const 29355) "a") (data (i32.const 29358) "a") (data (i32.const 29361) "a") (data (i32.const 29364) "a") (data (i32.const 29367) "a") (data (i32.const 29370) "a") (data (i32.const 29373) "a") (data (i32.const 29376) "a") (data (i32.const 29379) "a") (data (i32.const 29382) "a") (data (i32.const 29385) "a") (data (i32.const 29388) "a") (data (i32.const 29391) "a") (data (i32.const 29394) "a") (data (i32.const 29397) "a") (data (i32.const 29400) "a") (data (i32.const 29403) "a") (data (i32.const 29406) "a") (data (i32.const 29409) "a") (data (i32.const 29412) "a") (data (i32.const 29415) "a") (data (i32.const 29418) "a") (data (i32.const 29421) "a") (data (i32.const 29424) "a") (data (i32.const 29427) "a") (data (i32.const 29430) "a") (data (i32.const 29433) "a") (data (i32.const 29436) "a") (data (i32.const 29439) "a") (data (i32.const 29442) "a") (data (i32.const 29445) "a") (data (i32.const 29448) "a") (data (i32.const 29451) "a") (data (i32.const 29454) "a") (data (i32.const 29457) "a") (data (i32.const 29460) "a") (data (i32.const 29463) "a") (data (i32.const 29466) "a") (data (i32.const 29469) "a") (data (i32.const 29472) "a") (data (i32.const 29475) "a") (data (i32.const 29478) "a") (data (i32.const 29481) "a") (data (i32.const 29484) "a") (data (i32.const 29487) "a") (data (i32.const 29490) "a") (data (i32.const 29493) "a") (data (i32.const 29496) "a") (data (i32.const 29499) "a") (data (i32.const 29502) "a") (data (i32.const 29505) "a") (data (i32.const 29508) "a") (data (i32.const 29511) "a") (data (i32.const 29514) "a") (data (i32.const 29517) "a") (data (i32.const 29520) "a") (data (i32.const 29523) "a") (data (i32.const 29526) "a") (data (i32.const 29529) "a") (data (i32.const 29532) "a") (data (i32.const 29535) "a") (data (i32.const 29538) "a") (data (i32.const 29541) "a") (data (i32.const 29544) "a") (data (i32.const 29547) "a") (data (i32.const 29550) "a") (data (i32.const 29553) "a") (data (i32.const 29556) "a") (data (i32.const 29559) "a") (data (i32.const 29562) "a") (data (i32.const 29565) "a") (data (i32.const 29568) "a") (data (i32.const 29571) "a") (data (i32.const 29574) "a") (data (i32.const 29577) "a") (data (i32.const 29580) "a") (data (i32.const 29583) "a") (data (i32.const 29586) "a") (data (i32.const 29589) "a") (data (i32.const 29592) "a") (data (i32.const 29595) "a") (data (i32.const 29598) "a") (data (i32.const 29601) "a") (data (i32.const 29604) "a") (data (i32.const 29607) "a") (data (i32.const 29610) "a") (data (i32.const 29613) "a") (data (i32.const 29616) "a") (data (i32.const 29619) "a") (data (i32.const 29622) "a") (data (i32.const 29625) "a") (data (i32.const 29628) "a") (data (i32.const 29631) "a") (data (i32.const 29634) "a") (data (i32.const 29637) "a") (data (i32.const 29640) "a") (data (i32.const 29643) "a") (data (i32.const 29646) "a") (data (i32.const 29649) "a") (data (i32.const 29652) "a") (data (i32.const 29655) "a") (data (i32.const 29658) "a") (data (i32.const 29661) "a") (data (i32.const 29664) "a") (data (i32.const 29667) "a") (data (i32.const 29670) "a") (data (i32.const 29673) "a") (data (i32.const 29676) "a") (data (i32.const 29679) "a") (data (i32.const 29682) "a") (data (i32.const 29685) "a") (data (i32.const 29688) "a") (data (i32.const 29691) "a") (data (i32.const 29694) "a") (data (i32.const 29697) "a") (data (i32.const 29700) "a") (data (i32.const 29703) "a") (data (i32.const 29706) "a") (data (i32.const 29709) "a") (data (i32.const 29712) "a") (data (i32.const 29715) "a") (data (i32.const 29718) "a") (data (i32.const 29721) "a") (data (i32.const 29724) "a") (data (i32.const 29727) "a") (data (i32.const 29730) "a") (data (i32.const 29733) "a") (data (i32.const 29736) "a") (data (i32.const 29739) "a") (data (i32.const 29742) "a") (data (i32.const 29745) "a") (data (i32.const 29748) "a") (data (i32.const 29751) "a") (data (i32.const 29754) "a") (data (i32.const 29757) "a") (data (i32.const 29760) "a") (data (i32.const 29763) "a") (data (i32.const 29766) "a") (data (i32.const 29769) "a") (data (i32.const 29772) "a") (data (i32.const 29775) "a") (data (i32.const 29778) "a") (data (i32.const 29781) "a") (data (i32.const 29784) "a") (data (i32.const 29787) "a") (data (i32.const 29790) "a") (data (i32.const 29793) "a") (data (i32.const 29796) "a") (data (i32.const 29799) "a") (data (i32.const 29802) "a") (data (i32.const 29805) "a") (data (i32.const 29808) "a") (data (i32.const 29811) "a") (data (i32.const 29814) "a") (data (i32.const 29817) "a") (data (i32.const 29820) "a") (data (i32.const 29823) "a") (data (i32.const 29826) "a") (data (i32.const 29829) "a") (data (i32.const 29832) "a") (data (i32.const 29835) "a") (data (i32.const 29838) "a") (data (i32.const 29841) "a") (data (i32.const 29844) "a") (data (i32.const 29847) "a") (data (i32.const 29850) "a") (data (i32.const 29853) "a") (data (i32.const 29856) "a") (data (i32.const 29859) "a") (data (i32.const 29862) "a") (data (i32.const 29865) "a") (data (i32.const 29868) "a") (data (i32.const 29871) "a") (data (i32.const 29874) "a") (data (i32.const 29877) "a") (data (i32.const 29880) "a") (data (i32.const 29883) "a") (data (i32.const 29886) "a") (data (i32.const 29889) "a") (data (i32.const 29892) "a") (data (i32.const 29895) "a") (data (i32.const 29898) "a") (data (i32.const 29901) "a") (data (i32.const 29904) "a") (data (i32.const 29907) "a") (data (i32.const 29910) "a") (data (i32.const 29913) "a") (data (i32.const 29916) "a") (data (i32.const 29919) "a") (data (i32.const 29922) "a") (data (i32.const 29925) "a") (data (i32.const 29928) "a") (data (i32.const 29931) "a") (data (i32.const 29934) "a") (data (i32.const 29937) "a") (data (i32.const 29940) "a") (data (i32.const 29943) "a") (data (i32.const 29946) "a") (data (i32.const 29949) "a") (data (i32.const 29952) "a") (data (i32.const 29955) "a") (data (i32.const 29958) "a") (data (i32.const 29961) "a") (data (i32.const 29964) "a") (data (i32.const 29967) "a") (data (i32.const 29970) "a") (data (i32.const 29973) "a") (data (i32.const 29976) "a") (data (i32.const 29979) "a") (data (i32.const 29982) "a") (data (i32.const 29985) "a") (data (i32.const 29988) "a") (data (i32.const 29991) "a") (data (i32.const 29994) "a") (data (i32.const 29997) "a") (data (i32.const 30000) "a") (data (i32.const 30003) "a") (data (i32.const 30006) "a") (data (i32.const 30009) "a") (data (i32.const 30012) "a") (data (i32.const 30015) "a") (data (i32.const 30018) "a") (data (i32.const 30021) "a") (data (i32.const 30024) "a") (data (i32.const 30027) "a") (data (i32.const 30030) "a") (data (i32.const 30033) "a") (data (i32.const 30036) "a") (data (i32.const 30039) "a") (data (i32.const 30042) "a") (data (i32.const 30045) "a") (data (i32.const 30048) "a") (data (i32.const 30051) "a") (data (i32.const 30054) "a") (data (i32.const 30057) "a") (data (i32.const 30060) "a") (data (i32.const 30063) "a") (data (i32.const 30066) "a") (data (i32.const 30069) "a") (data (i32.const 30072) "a") (data (i32.const 30075) "a") (data (i32.const 30078) "a") (data (i32.const 30081) "a") (data (i32.const 30084) "a") (data (i32.const 30087) "a") (data (i32.const 30090) "a") (data (i32.const 30093) "a") (data (i32.const 30096) "a") (data (i32.const 30099) "a") (data (i32.const 30102) "a") (data (i32.const 30105) "a") (data (i32.const 30108) "a") (data (i32.const 30111) "a") (data (i32.const 30114) "a") (data (i32.const 30117) "a") (data (i32.const 30120) "a") (data (i32.const 30123) "a") (data (i32.const 30126) "a") (data (i32.const 30129) "a") (data (i32.const 30132) "a") (data (i32.const 30135) "a") (data (i32.const 30138) "a") (data (i32.const 30141) "a") (data (i32.const 30144) "a") (data (i32.const 30147) "a") (data (i32.const 30150) "a") (data (i32.const 30153) "a") (data (i32.const 30156) "a") (data (i32.const 30159) "a") (data (i32.const 30162) "a") (data (i32.const 30165) "a") (data (i32.const 30168) "a") (data (i32.const 30171) "a") (data (i32.const 30174) "a") (data (i32.const 30177) "a") (data (i32.const 30180) "a") (data (i32.const 30183) "a") (data (i32.const 30186) "a") (data (i32.const 30189) "a") (data (i32.const 30192) "a") (data (i32.const 30195) "a") (data (i32.const 30198) "a") (data (i32.const 30201) "a") (data (i32.const 30204) "a") (data (i32.const 30207) "a") (data (i32.const 30210) "a") (data (i32.const 30213) "a") (data (i32.const 30216) "a") (data (i32.const 30219) "a") (data (i32.const 30222) "a") (data (i32.const 30225) "a") (data (i32.const 30228) "a") (data (i32.const 30231) "a") (data (i32.const 30234) "a") (data (i32.const 30237) "a") (data (i32.const 30240) "a") (data (i32.const 30243) "a") (data (i32.const 30246) "a") (data (i32.const 30249) "a") (data (i32.const 30252) "a") (data (i32.const 30255) "a") (data (i32.const 30258) "a") (data (i32.const 30261) "a") (data (i32.const 30264) "a") (data (i32.const 30267) "a") (data (i32.const 30270) "a") (data (i32.const 30273) "a") (data (i32.const 30276) "a") (data (i32.const 30279) "a") (data (i32.const 30282) "a") (data (i32.const 30285) "a") (data (i32.const 30288) "a") (data (i32.const 30291) "a") (data (i32.const 30294) "a") (data (i32.const 30297) "a") (data (i32.const 30300) "a") (data (i32.const 30303) "a") (data (i32.const 30306) "a") (data (i32.const 30309) "a") (data (i32.const 30312) "a") (data (i32.const 30315) "a") (data (i32.const 30318) "a") (data (i32.const 30321) "a") (data (i32.const 30324) "a") (data (i32.const 30327) "a") (data (i32.const 30330) "a") (data (i32.const 30333) "a") (data (i32.const 30336) "a") (data (i32.const 30339) "a") (data (i32.const 30342) "a") (data (i32.const 30345) "a") (data (i32.const 30348) "a") (data (i32.const 30351) "a") (data (i32.const 30354) "a") (data (i32.const 30357) "a") (data (i32.const 30360) "a") (data (i32.const 30363) "a") (data (i32.const 30366) "a") (data (i32.const 30369) "a") (data (i32.const 30372) "a") (data (i32.const 30375) "a") (data (i32.const 30378) "a") (data (i32.const 30381) "a") (data (i32.const 30384) "a") (data (i32.const 30387) "a") (data (i32.const 30390) "a") (data (i32.const 30393) "a") (data (i32.const 30396) "a") (data (i32.const 30399) "a") (data (i32.const 30402) "a") (data (i32.const 30405) "a") (data (i32.const 30408) "a") (data (i32.const 30411) "a") (data (i32.const 30414) "a") (data (i32.const 30417) "a") (data (i32.const 30420) "a") (data (i32.const 30423) "a") (data (i32.const 30426) "a") (data (i32.const 30429) "a") (data (i32.const 30432) "a") (data (i32.const 30435) "a") (data (i32.const 30438) "a") (data (i32.const 30441) "a") (data (i32.const 30444) "a") (data (i32.const 30447) "a") (data (i32.const 30450) "a") (data (i32.const 30453) "a") (data (i32.const 30456) "a") (data (i32.const 30459) "a") (data (i32.const 30462) "a") (data (i32.const 30465) "a") (data (i32.const 30468) "a") (data (i32.const 30471) "a") (data (i32.const 30474) "a") (data (i32.const 30477) "a") (data (i32.const 30480) "a") (data (i32.const 30483) "a") (data (i32.const 30486) "a") (data (i32.const 30489) "a") (data (i32.const 30492) "a") (data (i32.const 30495) "a") (data (i32.const 30498) "a") (data (i32.const 30501) "a") (data (i32.const 30504) "a") (data (i32.const 30507) "a") (data (i32.const 30510) "a") (data (i32.const 30513) "a") (data (i32.const 30516) "a") (data (i32.const 30519) "a") (data (i32.const 30522) "a") (data (i32.const 30525) "a") (data (i32.const 30528) "a") (data (i32.const 30531) "a") (data (i32.const 30534) "a") (data (i32.const 30537) "a") (data (i32.const 30540) "a") (data (i32.const 30543) "a") (data (i32.const 30546) "a") (data (i32.const 30549) "a") (data (i32.const 30552) "a") (data (i32.const 30555) "a") (data (i32.const 30558) "a") (data (i32.const 30561) "a") (data (i32.const 30564) "a") (data (i32.const 30567) "a") (data (i32.const 30570) "a") (data (i32.const 30573) "a") (data (i32.const 30576) "a") (data (i32.const 30579) "a") (data (i32.const 30582) "a") (data (i32.const 30585) "a") (data (i32.const 30588) "a") (data (i32.const 30591) "a") (data (i32.const 30594) "a") (data (i32.const 30597) "a") (data (i32.const 30600) "a") (data (i32.const 30603) "a") (data (i32.const 30606) "a") (data (i32.const 30609) "a") (data (i32.const 30612) "a") (data (i32.const 30615) "a") (data (i32.const 30618) "a") (data (i32.const 30621) "a") (data (i32.const 30624) "a") (data (i32.const 30627) "a") (data (i32.const 30630) "a") (data (i32.const 30633) "a") (data (i32.const 30636) "a") (data (i32.const 30639) "a") (data (i32.const 30642) "a") (data (i32.const 30645) "a") (data (i32.const 30648) "a") (data (i32.const 30651) "a") (data (i32.const 30654) "a") (data (i32.const 30657) "a") (data (i32.const 30660) "a") (data (i32.const 30663) "a") (data (i32.const 30666) "a") (data (i32.const 30669) "a") (data (i32.const 30672) "a") (data (i32.const 30675) "a") (data (i32.const 30678) "a") (data (i32.const 30681) "a") (data (i32.const 30684) "a") (data (i32.const 30687) "a") (data (i32.const 30690) "a") (data (i32.const 30693) "a") (data (i32.const 30696) "a") (data (i32.const 30699) "a") (data (i32.const 30702) "a") (data (i32.const 30705) "a") (data (i32.const 30708) "a") (data (i32.const 30711) "a") (data (i32.const 30714) "a") (data (i32.const 30717) "a") (data (i32.const 30720) "a") (data (i32.const 30723) "a") (data (i32.const 30726) "a") (data (i32.const 30729) "a") (data (i32.const 30732) "a") (data (i32.const 30735) "a") (data (i32.const 30738) "a") (data (i32.const 30741) "a") (data (i32.const 30744) "a") (data (i32.const 30747) "a") (data (i32.const 30750) "a") (data (i32.const 30753) "a") (data (i32.const 30756) "a") (data (i32.const 30759) "a") (data (i32.const 30762) "a") (data (i32.const 30765) "a") (data (i32.const 30768) "a") (data (i32.const 30771) "a") (data (i32.const 30774) "a") (data (i32.const 30777) "a") (data (i32.const 30780) "a") (data (i32.const 30783) "a") (data (i32.const 30786) "a") (data (i32.const 30789) "a") (data (i32.const 30792) "a") (data (i32.const 30795) "a") (data (i32.const 30798) "a") (data (i32.const 30801) "a") (data (i32.const 30804) "a") (data (i32.const 30807) "a") (data (i32.const 30810) "a") (data (i32.const 30813) "a") (data (i32.const 30816) "a") (data (i32.const 30819) "a") (data (i32.const 30822) "a") (data (i32.const 30825) "a") (data (i32.const 30828) "a") (data (i32.const 30831) "a") (data (i32.const 30834) "a") (data (i32.const 30837) "a") (data (i32.const 30840) "a") (data (i32.const 30843) "a") (data (i32.const 30846) "a") (data (i32.const 30849) "a") (data (i32.const 30852) "a") (data (i32.const 30855) "a") (data (i32.const 30858) "a") (data (i32.const 30861) "a") (data (i32.const 30864) "a") (data (i32.const 30867) "a") (data (i32.const 30870) "a") (data (i32.const 30873) "a") (data (i32.const 30876) "a") (data (i32.const 30879) "a") (data (i32.const 30882) "a") (data (i32.const 30885) "a") (data (i32.const 30888) "a") (data (i32.const 30891) "a") (data (i32.const 30894) "a") (data (i32.const 30897) "a") (data (i32.const 30900) "a") (data (i32.const 30903) "a") (data (i32.const 30906) "a") (data (i32.const 30909) "a") (data (i32.const 30912) "a") (data (i32.const 30915) "a") (data (i32.const 30918) "a") (data (i32.const 30921) "a") (data (i32.const 30924) "a") (data (i32.const 30927) "a") (data (i32.const 30930) "a") (data (i32.const 30933) "a") (data (i32.const 30936) "a") (data (i32.const 30939) "a") (data (i32.const 30942) "a") (data (i32.const 30945) "a") (data (i32.const 30948) "a") (data (i32.const 30951) "a") (data (i32.const 30954) "a") (data (i32.const 30957) "a") (data (i32.const 30960) "a") (data (i32.const 30963) "a") (data (i32.const 30966) "a") (data (i32.const 30969) "a") (data (i32.const 30972) "a") (data (i32.const 30975) "a") (data (i32.const 30978) "a") (data (i32.const 30981) "a") (data (i32.const 30984) "a") (data (i32.const 30987) "a") (data (i32.const 30990) "a") (data (i32.const 30993) "a") (data (i32.const 30996) "a") (data (i32.const 30999) "a") (data (i32.const 31002) "a") (data (i32.const 31005) "a") (data (i32.const 31008) "a") (data (i32.const 31011) "a") (data (i32.const 31014) "a") (data (i32.const 31017) "a") (data (i32.const 31020) "a") (data (i32.const 31023) "a") (data (i32.const 31026) "a") (data (i32.const 31029) "a") (data (i32.const 31032) "a") (data (i32.const 31035) "a") (data (i32.const 31038) "a") (data (i32.const 31041) "a") (data (i32.const 31044) "a") (data (i32.const 31047) "a") (data (i32.const 31050) "a") (data (i32.const 31053) "a") (data (i32.const 31056) "a") (data (i32.const 31059) "a") (data (i32.const 31062) "a") (data (i32.const 31065) "a") (data (i32.const 31068) "a") (data (i32.const 31071) "a") (data (i32.const 31074) "a") (data (i32.const 31077) "a") (data (i32.const 31080) "a") (data (i32.const 31083) "a") (data (i32.const 31086) "a") (data (i32.const 31089) "a") (data (i32.const 31092) "a") (data (i32.const 31095) "a") (data (i32.const 31098) "a") (data (i32.const 31101) "a") (data (i32.const 31104) "a") (data (i32.const 31107) "a") (data (i32.const 31110) "a") (data (i32.const 31113) "a") (data (i32.const 31116) "a") (data (i32.const 31119) "a") (data (i32.const 31122) "a") (data (i32.const 31125) "a") (data (i32.const 31128) "a") (data (i32.const 31131) "a") (data (i32.const 31134) "a") (data (i32.const 31137) "a") (data (i32.const 31140) "a") (data (i32.const 31143) "a") (data (i32.const 31146) "a") (data (i32.const 31149) "a") (data (i32.const 31152) "a") (data (i32.const 31155) "a") (data (i32.const 31158) "a") (data (i32.const 31161) "a") (data (i32.const 31164) "a") (data (i32.const 31167) "a") (data (i32.const 31170) "a") (data (i32.const 31173) "a") (data (i32.const 31176) "a") (data (i32.const 31179) "a") (data (i32.const 31182) "a") (data (i32.const 31185) "a") (data (i32.const 31188) "a") (data (i32.const 31191) "a") (data (i32.const 31194) "a") (data (i32.const 31197) "a") (data (i32.const 31200) "a") (data (i32.const 31203) "a") (data (i32.const 31206) "a") (data (i32.const 31209) "a") (data (i32.const 31212) "a") (data (i32.const 31215) "a") (data (i32.const 31218) "a") (data (i32.const 31221) "a") (data (i32.const 31224) "a") (data (i32.const 31227) "a") (data (i32.const 31230) "a") (data (i32.const 31233) "a") (data (i32.const 31236) "a") (data (i32.const 31239) "a") (data (i32.const 31242) "a") (data (i32.const 31245) "a") (data (i32.const 31248) "a") (data (i32.const 31251) "a") (data (i32.const 31254) "a") (data (i32.const 31257) "a") (data (i32.const 31260) "a") (data (i32.const 31263) "a") (data (i32.const 31266) "a") (data (i32.const 31269) "a") (data (i32.const 31272) "a") (data (i32.const 31275) "a") (data (i32.const 31278) "a") (data (i32.const 31281) "a") (data (i32.const 31284) "a") (data (i32.const 31287) "a") (data (i32.const 31290) "a") (data (i32.const 31293) "a") (data (i32.const 31296) "a") (data (i32.const 31299) "a") (data (i32.const 31302) "a") (data (i32.const 31305) "a") (data (i32.const 31308) "a") (data (i32.const 31311) "a") (data (i32.const 31314) "a") (data (i32.const 31317) "a") (data (i32.const 31320) "a") (data (i32.const 31323) "a") (data (i32.const 31326) "a") (data (i32.const 31329) "a") (data (i32.const 31332) "a") (data (i32.const 31335) "a") (data (i32.const 31338) "a") (data (i32.const 31341) "a") (data (i32.const 31344) "a") (data (i32.const 31347) "a") (data (i32.const 31350) "a") (data (i32.const 31353) "a") (data (i32.const 31356) "a") (data (i32.const 31359) "a") (data (i32.const 31362) "a") (data (i32.const 31365) "a") (data (i32.const 31368) "a") (data (i32.const 31371) "a") (data (i32.const 31374) "a") (data (i32.const 31377) "a") (data (i32.const 31380) "a") (data (i32.const 31383) "a") (data (i32.const 31386) "a") (data (i32.const 31389) "a") (data (i32.const 31392) "a") (data (i32.const 31395) "a") (data (i32.const 31398) "a") (data (i32.const 31401) "a") (data (i32.const 31404) "a") (data (i32.const 31407) "a") (data (i32.const 31410) "a") (data (i32.const 31413) "a") (data (i32.const 31416) "a") (data (i32.const 31419) "a") (data (i32.const 31422) "a") (data (i32.const 31425) "a") (data (i32.const 31428) "a") (data (i32.const 31431) "a") (data (i32.const 31434) "a") (data (i32.const 31437) "a") (data (i32.const 31440) "a") (data (i32.const 31443) "a") (data (i32.const 31446) "a") (data (i32.const 31449) "a") (data (i32.const 31452) "a") (data (i32.const 31455) "a") (data (i32.const 31458) "a") (data (i32.const 31461) "a") (data (i32.const 31464) "a") (data (i32.const 31467) "a") (data (i32.const 31470) "a") (data (i32.const 31473) "a") (data (i32.const 31476) "a") (data (i32.const 31479) "a") (data (i32.const 31482) "a") (data (i32.const 31485) "a") (data (i32.const 31488) "a") (data (i32.const 31491) "a") (data (i32.const 31494) "a") (data (i32.const 31497) "a") (data (i32.const 31500) "a") (data (i32.const 31503) "a") (data (i32.const 31506) "a") (data (i32.const 31509) "a") (data (i32.const 31512) "a") (data (i32.const 31515) "a") (data (i32.const 31518) "a") (data (i32.const 31521) "a") (data (i32.const 31524) "a") (data (i32.const 31527) "a") (data (i32.const 31530) "a") (data (i32.const 31533) "a") (data (i32.const 31536) "a") (data (i32.const 31539) "a") (data (i32.const 31542) "a") (data (i32.const 31545) "a") (data (i32.const 31548) "a") (data (i32.const 31551) "a") (data (i32.const 31554) "a") (data (i32.const 31557) "a") (data (i32.const 31560) "a") (data (i32.const 31563) "a") (data (i32.const 31566) "a") (data (i32.const 31569) "a") (data (i32.const 31572) "a") (data (i32.const 31575) "a") (data (i32.const 31578) "a") (data (i32.const 31581) "a") (data (i32.const 31584) "a") (data (i32.const 31587) "a") (data (i32.const 31590) "a") (data (i32.const 31593) "a") (data (i32.const 31596) "a") (data (i32.const 31599) "a") (data (i32.const 31602) "a") (data (i32.const 31605) "a") (data (i32.const 31608) "a") (data (i32.const 31611) "a") (data (i32.const 31614) "a") (data (i32.const 31617) "a") (data (i32.const 31620) "a") (data (i32.const 31623) "a") (data (i32.const 31626) "a") (data (i32.const 31629) "a") (data (i32.const 31632) "a") (data (i32.const 31635) "a") (data (i32.const 31638) "a") (data (i32.const 31641) "a") (data (i32.const 31644) "a") (data (i32.const 31647) "a") (data (i32.const 31650) "a") (data (i32.const 31653) "a") (data (i32.const 31656) "a") (data (i32.const 31659) "a") (data (i32.const 31662) "a") (data (i32.const 31665) "a") (data (i32.const 31668) "a") (data (i32.const 31671) "a") (data (i32.const 31674) "a") (data (i32.const 31677) "a") (data (i32.const 31680) "a") (data (i32.const 31683) "a") (data (i32.const 31686) "a") (data (i32.const 31689) "a") (data (i32.const 31692) "a") (data (i32.const 31695) "a") (data (i32.const 31698) "a") (data (i32.const 31701) "a") (data (i32.const 31704) "a") (data (i32.const 31707) "a") (data (i32.const 31710) "a") (data (i32.const 31713) "a") (data (i32.const 31716) "a") (data (i32.const 31719) "a") (data (i32.const 31722) "a") (data (i32.const 31725) "a") (data (i32.const 31728) "a") (data (i32.const 31731) "a") (data (i32.const 31734) "a") (data (i32.const 31737) "a") (data (i32.const 31740) "a") (data (i32.const 31743) "a") (data (i32.const 31746) "a") (data (i32.const 31749) "a") (data (i32.const 31752) "a") (data (i32.const 31755) "a") (data (i32.const 31758) "a") (data (i32.const 31761) "a") (data (i32.const 31764) "a") (data (i32.const 31767) "a") (data (i32.const 31770) "a") (data (i32.const 31773) "a") (data (i32.const 31776) "a") (data (i32.const 31779) "a") (data (i32.const 31782) "a") (data (i32.const 31785) "a") (data (i32.const 31788) "a") (data (i32.const 31791) "a") (data (i32.const 31794) "a") (data (i32.const 31797) "a") (data (i32.const 31800) "a") (data (i32.const 31803) "a") (data (i32.const 31806) "a") (data (i32.const 31809) "a") (data (i32.const 31812) "a") (data (i32.const 31815) "a") (data (i32.const 31818) "a") (data (i32.const 31821) "a") (data (i32.const 31824) "a") (data (i32.const 31827) "a") (data (i32.const 31830) "a") (data (i32.const 31833) "a") (data (i32.const 31836) "a") (data (i32.const 31839) "a") (data (i32.const 31842) "a") (data (i32.const 31845) "a") (data (i32.const 31848) "a") (data (i32.const 31851) "a") (data (i32.const 31854) "a") (data (i32.const 31857) "a") (data (i32.const 31860) "a") (data (i32.const 31863) "a") (data (i32.const 31866) "a") (data (i32.const 31869) "a") (data (i32.const 31872) "a") (data (i32.const 31875) "a") (data (i32.const 31878) "a") (data (i32.const 31881) "a") (data (i32.const 31884) "a") (data (i32.const 31887) "a") (data (i32.const 31890) "a") (data (i32.const 31893) "a") (data (i32.const 31896) "a") (data (i32.const 31899) "a") (data (i32.const 31902) "a") (data (i32.const 31905) "a") (data (i32.const 31908) "a") (data (i32.const 31911) "a") (data (i32.const 31914) "a") (data (i32.const 31917) "a") (data (i32.const 31920) "a") (data (i32.const 31923) "a") (data (i32.const 31926) "a") (data (i32.const 31929) "a") (data (i32.const 31932) "a") (data (i32.const 31935) "a") (data (i32.const 31938) "a") (data (i32.const 31941) "a") (data (i32.const 31944) "a") (data (i32.const 31947) "a") (data (i32.const 31950) "a") (data (i32.const 31953) "a") (data (i32.const 31956) "a") (data (i32.const 31959) "a") (data (i32.const 31962) "a") (data (i32.const 31965) "a") (data (i32.const 31968) "a") (data (i32.const 31971) "a") (data (i32.const 31974) "a") (data (i32.const 31977) "a") (data (i32.const 31980) "a") (data (i32.const 31983) "a") (data (i32.const 31986) "a") (data (i32.const 31989) "a") (data (i32.const 31992) "a") (data (i32.const 31995) "a") (data (i32.const 31998) "a") (data (i32.const 32001) "a") (data (i32.const 32004) "a") (data (i32.const 32007) "a") (data (i32.const 32010) "a") (data (i32.const 32013) "a") (data (i32.const 32016) "a") (data (i32.const 32019) "a") (data (i32.const 32022) "a") (data (i32.const 32025) "a") (data (i32.const 32028) "a") (data (i32.const 32031) "a") (data (i32.const 32034) "a") (data (i32.const 32037) "a") (data (i32.const 32040) "a") (data (i32.const 32043) "a") (data (i32.const 32046) "a") (data (i32.const 32049) "a") (data (i32.const 32052) "a") (data (i32.const 32055) "a") (data (i32.const 32058) "a") (data (i32.const 32061) "a") (data (i32.const 32064) "a") (data (i32.const 32067) "a") (data (i32.const 32070) "a") (data (i32.const 32073) "a") (data (i32.const 32076) "a") (data (i32.const 32079) "a") (data (i32.const 32082) "a") (data (i32.const 32085) "a") (data (i32.const 32088) "a") (data (i32.const 32091) "a") (data (i32.const 32094) "a") (data (i32.const 32097) "a") (data (i32.const 32100) "a") (data (i32.const 32103) "a") (data (i32.const 32106) "a") (data (i32.const 32109) "a") (data (i32.const 32112) "a") (data (i32.const 32115) "a") (data (i32.const 32118) "a") (data (i32.const 32121) "a") (data (i32.const 32124) "a") (data (i32.const 32127) "a") (data (i32.const 32130) "a") (data (i32.const 32133) "a") (data (i32.const 32136) "a") (data (i32.const 32139) "a") (data (i32.const 32142) "a") (data (i32.const 32145) "a") (data (i32.const 32148) "a") (data (i32.const 32151) "a") (data (i32.const 32154) "a") (data (i32.const 32157) "a") (data (i32.const 32160) "a") (data (i32.const 32163) "a") (data (i32.const 32166) "a") (data (i32.const 32169) "a") (data (i32.const 32172) "a") (data (i32.const 32175) "a") (data (i32.const 32178) "a") (data (i32.const 32181) "a") (data (i32.const 32184) "a") (data (i32.const 32187) "a") (data (i32.const 32190) "a") (data (i32.const 32193) "a") (data (i32.const 32196) "a") (data (i32.const 32199) "a") (data (i32.const 32202) "a") (data (i32.const 32205) "a") (data (i32.const 32208) "a") (data (i32.const 32211) "a") (data (i32.const 32214) "a") (data (i32.const 32217) "a") (data (i32.const 32220) "a") (data (i32.const 32223) "a") (data (i32.const 32226) "a") (data (i32.const 32229) "a") (data (i32.const 32232) "a") (data (i32.const 32235) "a") (data (i32.const 32238) "a") (data (i32.const 32241) "a") (data (i32.const 32244) "a") (data (i32.const 32247) "a") (data (i32.const 32250) "a") (data (i32.const 32253) "a") (data (i32.const 32256) "a") (data (i32.const 32259) "a") (data (i32.const 32262) "a") (data (i32.const 32265) "a") (data (i32.const 32268) "a") (data (i32.const 32271) "a") (data (i32.const 32274) "a") (data (i32.const 32277) "a") (data (i32.const 32280) "a") (data (i32.const 32283) "a") (data (i32.const 32286) "a") (data (i32.const 32289) "a") (data (i32.const 32292) "a") (data (i32.const 32295) "a") (data (i32.const 32298) "a") (data (i32.const 32301) "a") (data (i32.const 32304) "a") (data (i32.const 32307) "a") (data (i32.const 32310) "a") (data (i32.const 32313) "a") (data (i32.const 32316) "a") (data (i32.const 32319) "a") (data (i32.const 32322) "a") (data (i32.const 32325) "a") (data (i32.const 32328) "a") (data (i32.const 32331) "a") (data (i32.const 32334) "a") (data (i32.const 32337) "a") (data (i32.const 32340) "a") (data (i32.const 32343) "a") (data (i32.const 32346) "a") (data (i32.const 32349) "a") (data (i32.const 32352) "a") (data (i32.const 32355) "a") (data (i32.const 32358) "a") (data (i32.const 32361) "a") (data (i32.const 32364) "a") (data (i32.const 32367) "a") (data (i32.const 32370) "a") (data (i32.const 32373) "a") (data (i32.const 32376) "a") (data (i32.const 32379) "a") (data (i32.const 32382) "a") (data (i32.const 32385) "a") (data (i32.const 32388) "a") (data (i32.const 32391) "a") (data (i32.const 32394) "a") (data (i32.const 32397) "a") (data (i32.const 32400) "a") (data (i32.const 32403) "a") (data (i32.const 32406) "a") (data (i32.const 32409) "a") (data (i32.const 32412) "a") (data (i32.const 32415) "a") (data (i32.const 32418) "a") (data (i32.const 32421) "a") (data (i32.const 32424) "a") (data (i32.const 32427) "a") (data (i32.const 32430) "a") (data (i32.const 32433) "a") (data (i32.const 32436) "a") (data (i32.const 32439) "a") (data (i32.const 32442) "a") (data (i32.const 32445) "a") (data (i32.const 32448) "a") (data (i32.const 32451) "a") (data (i32.const 32454) "a") (data (i32.const 32457) "a") (data (i32.const 32460) "a") (data (i32.const 32463) "a") (data (i32.const 32466) "a") (data (i32.const 32469) "a") (data (i32.const 32472) "a") (data (i32.const 32475) "a") (data (i32.const 32478) "a") (data (i32.const 32481) "a") (data (i32.const 32484) "a") (data (i32.const 32487) "a") (data (i32.const 32490) "a") (data (i32.const 32493) "a") (data (i32.const 32496) "a") (data (i32.const 32499) "a") (data (i32.const 32502) "a") (data (i32.const 32505) "a") (data (i32.const 32508) "a") (data (i32.const 32511) "a") (data (i32.const 32514) "a") (data (i32.const 32517) "a") (data (i32.const 32520) "a") (data (i32.const 32523) "a") (data (i32.const 32526) "a") (data (i32.const 32529) "a") (data (i32.const 32532) "a") (data (i32.const 32535) "a") (data (i32.const 32538) "a") (data (i32.const 32541) "a") (data (i32.const 32544) "a") (data (i32.const 32547) "a") (data (i32.const 32550) "a") (data (i32.const 32553) "a") (data (i32.const 32556) "a") (data (i32.const 32559) "a") (data (i32.const 32562) "a") (data (i32.const 32565) "a") (data (i32.const 32568) "a") (data (i32.const 32571) "a") (data (i32.const 32574) "a") (data (i32.const 32577) "a") (data (i32.const 32580) "a") (data (i32.const 32583) "a") (data (i32.const 32586) "a") (data (i32.const 32589) "a") (data (i32.const 32592) "a") (data (i32.const 32595) "a") (data (i32.const 32598) "a") (data (i32.const 32601) "a") (data (i32.const 32604) "a") (data (i32.const 32607) "a") (data (i32.const 32610) "a") (data (i32.const 32613) "a") (data (i32.const 32616) "a") (data (i32.const 32619) "a") (data (i32.const 32622) "a") (data (i32.const 32625) "a") (data (i32.const 32628) "a") (data (i32.const 32631) "a") (data (i32.const 32634) "a") (data (i32.const 32637) "a") (data (i32.const 32640) "a") (data (i32.const 32643) "a") (data (i32.const 32646) "a") (data (i32.const 32649) "a") (data (i32.const 32652) "a") (data (i32.const 32655) "a") (data (i32.const 32658) "a") (data (i32.const 32661) "a") (data (i32.const 32664) "a") (data (i32.const 32667) "a") (data (i32.const 32670) "a") (data (i32.const 32673) "a") (data (i32.const 32676) "a") (data (i32.const 32679) "a") (data (i32.const 32682) "a") (data (i32.const 32685) "a") (data (i32.const 32688) "a") (data (i32.const 32691) "a") (data (i32.const 32694) "a") (data (i32.const 32697) "a") (data (i32.const 32700) "a") (data (i32.const 32703) "a") (data (i32.const 32706) "a") (data (i32.const 32709) "a") (data (i32.const 32712) "a") (data (i32.const 32715) "a") (data (i32.const 32718) "a") (data (i32.const 32721) "a") (data (i32.const 32724) "a") (data (i32.const 32727) "a") (data (i32.const 32730) "a") (data (i32.const 32733) "a") (data (i32.const 32736) "a") (data (i32.const 32739) "a") (data (i32.const 32742) "a") (data (i32.const 32745) "a") (data (i32.const 32748) "a") (data (i32.const 32751) "a") (data (i32.const 32754) "a") (data (i32.const 32757) "a") (data (i32.const 32760) "a") (data (i32.const 32763) "a") (data (i32.const 32766) "a") (data (i32.const 32769) "a") (data (i32.const 32772) "a") (data (i32.const 32775) "a") (data (i32.const 32778) "a") (data (i32.const 32781) "a") (data (i32.const 32784) "a") (data (i32.const 32787) "a") (data (i32.const 32790) "a") (data (i32.const 32793) "a") (data (i32.const 32796) "a") (data (i32.const 32799) "a") (data (i32.const 32802) "a") (data (i32.const 32805) "a") (data (i32.const 32808) "a") (data (i32.const 32811) "a") (data (i32.const 32814) "a") (data (i32.const 32817) "a") (data (i32.const 32820) "a") (data (i32.const 32823) "a") (data (i32.const 32826) "a") (data (i32.const 32829) "a") (data (i32.const 32832) "a") (data (i32.const 32835) "a") (data (i32.const 32838) "a") (data (i32.const 32841) "a") (data (i32.const 32844) "a") (data (i32.const 32847) "a") (data (i32.const 32850) "a") (data (i32.const 32853) "a") (data (i32.const 32856) "a") (data (i32.const 32859) "a") (data (i32.const 32862) "a") (data (i32.const 32865) "a") (data (i32.const 32868) "a") (data (i32.const 32871) "a") (data (i32.const 32874) "a") (data (i32.const 32877) "a") (data (i32.const 32880) "a") (data (i32.const 32883) "a") (data (i32.const 32886) "a") (data (i32.const 32889) "a") (data (i32.const 32892) "a") (data (i32.const 32895) "a") (data (i32.const 32898) "a") (data (i32.const 32901) "a") (data (i32.const 32904) "a") (data (i32.const 32907) "a") (data (i32.const 32910) "a") (data (i32.const 32913) "a") (data (i32.const 32916) "a") (data (i32.const 32919) "a") (data (i32.const 32922) "a") (data (i32.const 32925) "a") (data (i32.const 32928) "a") (data (i32.const 32931) "a") (data (i32.const 32934) "a") (data (i32.const 32937) "a") (data (i32.const 32940) "a") (data (i32.const 32943) "a") (data (i32.const 32946) "a") (data (i32.const 32949) "a") (data (i32.const 32952) "a") (data (i32.const 32955) "a") (data (i32.const 32958) "a") (data (i32.const 32961) "a") (data (i32.const 32964) "a") (data (i32.const 32967) "a") (data (i32.const 32970) "a") (data (i32.const 32973) "a") (data (i32.const 32976) "a") (data (i32.const 32979) "a") (data (i32.const 32982) "a") (data (i32.const 32985) "a") (data (i32.const 32988) "a") (data (i32.const 32991) "a") (data (i32.const 32994) "a") (data (i32.const 32997) "a") (data (i32.const 33000) "a") (data (i32.const 33003) "a") (data (i32.const 33006) "a") (data (i32.const 33009) "a") (data (i32.const 33012) "a") (data (i32.const 33015) "a") (data (i32.const 33018) "a") (data (i32.const 33021) "a") (data (i32.const 33024) "a") (data (i32.const 33027) "a") (data (i32.const 33030) "a") (data (i32.const 33033) "a") (data (i32.const 33036) "a") (data (i32.const 33039) "a") (data (i32.const 33042) "a") (data (i32.const 33045) "a") (data (i32.const 33048) "a") (data (i32.const 33051) "a") (data (i32.const 33054) "a") (data (i32.const 33057) "a") (data (i32.const 33060) "a") (data (i32.const 33063) "a") (data (i32.const 33066) "a") (data (i32.const 33069) "a") (data (i32.const 33072) "a") (data (i32.const 33075) "a") (data (i32.const 33078) "a") (data (i32.const 33081) "a") (data (i32.const 33084) "a") (data (i32.const 33087) "a") (data (i32.const 33090) "a") (data (i32.const 33093) "a") (data (i32.const 33096) "a") (data (i32.const 33099) "a") (data (i32.const 33102) "a") (data (i32.const 33105) "a") (data (i32.const 33108) "a") (data (i32.const 33111) "a") (data (i32.const 33114) "a") (data (i32.const 33117) "a") (data (i32.const 33120) "a") (data (i32.const 33123) "a") (data (i32.const 33126) "a") (data (i32.const 33129) "a") (data (i32.const 33132) "a") (data (i32.const 33135) "a") (data (i32.const 33138) "a") (data (i32.const 33141) "a") (data (i32.const 33144) "a") (data (i32.const 33147) "a") (data (i32.const 33150) "a") (data (i32.const 33153) "a") (data (i32.const 33156) "a") (data (i32.const 33159) "a") (data (i32.const 33162) "a") (data (i32.const 33165) "a") (data (i32.const 33168) "a") (data (i32.const 33171) "a") (data (i32.const 33174) "a") (data (i32.const 33177) "a") (data (i32.const 33180) "a") (data (i32.const 33183) "a") (data (i32.const 33186) "a") (data (i32.const 33189) "a") (data (i32.const 33192) "a") (data (i32.const 33195) "a") (data (i32.const 33198) "a") (data (i32.const 33201) "a") (data (i32.const 33204) "a") (data (i32.const 33207) "a") (data (i32.const 33210) "a") (data (i32.const 33213) "a") (data (i32.const 33216) "a") (data (i32.const 33219) "a") (data (i32.const 33222) "a") (data (i32.const 33225) "a") (data (i32.const 33228) "a") (data (i32.const 33231) "a") (data (i32.const 33234) "a") (data (i32.const 33237) "a") (data (i32.const 33240) "a") (data (i32.const 33243) "a") (data (i32.const 33246) "a") (data (i32.const 33249) "a") (data (i32.const 33252) "a") (data (i32.const 33255) "a") (data (i32.const 33258) "a") (data (i32.const 33261) "a") (data (i32.const 33264) "a") (data (i32.const 33267) "a") (data (i32.const 33270) "a") (data (i32.const 33273) "a") (data (i32.const 33276) "a") (data (i32.const 33279) "a") (data (i32.const 33282) "a") (data (i32.const 33285) "a") (data (i32.const 33288) "a") (data (i32.const 33291) "a") (data (i32.const 33294) "a") (data (i32.const 33297) "a") (data (i32.const 33300) "a") (data (i32.const 33303) "a") (data (i32.const 33306) "a") (data (i32.const 33309) "a") (data (i32.const 33312) "a") (data (i32.const 33315) "a") (data (i32.const 33318) "a") (data (i32.const 33321) "a") (data (i32.const 33324) "a") (data (i32.const 33327) "a") (data (i32.const 33330) "a") (data (i32.const 33333) "a") (data (i32.const 33336) "a") (data (i32.const 33339) "a") (data (i32.const 33342) "a") (data (i32.const 33345) "a") (data (i32.const 33348) "a") (data (i32.const 33351) "a") (data (i32.const 33354) "a") (data (i32.const 33357) "a") (data (i32.const 33360) "a") (data (i32.const 33363) "a") (data (i32.const 33366) "a") (data (i32.const 33369) "a") (data (i32.const 33372) "a") (data (i32.const 33375) "a") (data (i32.const 33378) "a") (data (i32.const 33381) "a") (data (i32.const 33384) "a") (data (i32.const 33387) "a") (data (i32.const 33390) "a") (data (i32.const 33393) "a") (data (i32.const 33396) "a") (data (i32.const 33399) "a") (data (i32.const 33402) "a") (data (i32.const 33405) "a") (data (i32.const 33408) "a") (data (i32.const 33411) "a") (data (i32.const 33414) "a") (data (i32.const 33417) "a") (data (i32.const 33420) "a") (data (i32.const 33423) "a") (data (i32.const 33426) "a") (data (i32.const 33429) "a") (data (i32.const 33432) "a") (data (i32.const 33435) "a") (data (i32.const 33438) "a") (data (i32.const 33441) "a") (data (i32.const 33444) "a") (data (i32.const 33447) "a") (data (i32.const 33450) "a") (data (i32.const 33453) "a") (data (i32.const 33456) "a") (data (i32.const 33459) "a") (data (i32.const 33462) "a") (data (i32.const 33465) "a") (data (i32.const 33468) "a") (data (i32.const 33471) "a") (data (i32.const 33474) "a") (data (i32.const 33477) "a") (data (i32.const 33480) "a") (data (i32.const 33483) "a") (data (i32.const 33486) "a") (data (i32.const 33489) "a") (data (i32.const 33492) "a") (data (i32.const 33495) "a") (data (i32.const 33498) "a") (data (i32.const 33501) "a") (data (i32.const 33504) "a") (data (i32.const 33507) "a") (data (i32.const 33510) "a") (data (i32.const 33513) "a") (data (i32.const 33516) "a") (data (i32.const 33519) "a") (data (i32.const 33522) "a") (data (i32.const 33525) "a") (data (i32.const 33528) "a") (data (i32.const 33531) "a") (data (i32.const 33534) "a") (data (i32.const 33537) "a") (data (i32.const 33540) "a") (data (i32.const 33543) "a") (data (i32.const 33546) "a") (data (i32.const 33549) "a") (data (i32.const 33552) "a") (data (i32.const 33555) "a") (data (i32.const 33558) "a") (data (i32.const 33561) "a") (data (i32.const 33564) "a") (data (i32.const 33567) "a") (data (i32.const 33570) "a") (data (i32.const 33573) "a") (data (i32.const 33576) "a") (data (i32.const 33579) "a") (data (i32.const 33582) "a") (data (i32.const 33585) "a") (data (i32.const 33588) "a") (data (i32.const 33591) "a") (data (i32.const 33594) "a") (data (i32.const 33597) "a") (data (i32.const 33600) "a") (data (i32.const 33603) "a") (data (i32.const 33606) "a") (data (i32.const 33609) "a") (data (i32.const 33612) "a") (data (i32.const 33615) "a") (data (i32.const 33618) "a") (data (i32.const 33621) "a") (data (i32.const 33624) "a") (data (i32.const 33627) "a") (data (i32.const 33630) "a") (data (i32.const 33633) "a") (data (i32.const 33636) "a") (data (i32.const 33639) "a") (data (i32.const 33642) "a") (data (i32.const 33645) "a") (data (i32.const 33648) "a") (data (i32.const 33651) "a") (data (i32.const 33654) "a") (data (i32.const 33657) "a") (data (i32.const 33660) "a") (data (i32.const 33663) "a") (data (i32.const 33666) "a") (data (i32.const 33669) "a") (data (i32.const 33672) "a") (data (i32.const 33675) "a") (data (i32.const 33678) "a") (data (i32.const 33681) "a") (data (i32.const 33684) "a") (data (i32.const 33687) "a") (data (i32.const 33690) "a") (data (i32.const 33693) "a") (data (i32.const 33696) "a") (data (i32.const 33699) "a") (data (i32.const 33702) "a") (data (i32.const 33705) "a") (data (i32.const 33708) "a") (data (i32.const 33711) "a") (data (i32.const 33714) "a") (data (i32.const 33717) "a") (data (i32.const 33720) "a") (data (i32.const 33723) "a") (data (i32.const 33726) "a") (data (i32.const 33729) "a") (data (i32.const 33732) "a") (data (i32.const 33735) "a") (data (i32.const 33738) "a") (data (i32.const 33741) "a") (data (i32.const 33744) "a") (data (i32.const 33747) "a") (data (i32.const 33750) "a") (data (i32.const 33753) "a") (data (i32.const 33756) "a") (data (i32.const 33759) "a") (data (i32.const 33762) "a") (data (i32.const 33765) "a") (data (i32.const 33768) "a") (data (i32.const 33771) "a") (data (i32.const 33774) "a") (data (i32.const 33777) "a") (data (i32.const 33780) "a") (data (i32.const 33783) "a") (data (i32.const 33786) "a") (data (i32.const 33789) "a") (data (i32.const 33792) "a") (data (i32.const 33795) "a") (data (i32.const 33798) "a") (data (i32.const 33801) "a") (data (i32.const 33804) "a") (data (i32.const 33807) "a") (data (i32.const 33810) "a") (data (i32.const 33813) "a") (data (i32.const 33816) "a") (data (i32.const 33819) "a") (data (i32.const 33822) "a") (data (i32.const 33825) "a") (data (i32.const 33828) "a") (data (i32.const 33831) "a") (data (i32.const 33834) "a") (data (i32.const 33837) "a") (data (i32.const 33840) "a") (data (i32.const 33843) "a") (data (i32.const 33846) "a") (data (i32.const 33849) "a") (data (i32.const 33852) "a") (data (i32.const 33855) "a") (data (i32.const 33858) "a") (data (i32.const 33861) "a") (data (i32.const 33864) "a") (data (i32.const 33867) "a") (data (i32.const 33870) "a") (data (i32.const 33873) "a") (data (i32.const 33876) "a") (data (i32.const 33879) "a") (data (i32.const 33882) "a") (data (i32.const 33885) "a") (data (i32.const 33888) "a") (data (i32.const 33891) "a") (data (i32.const 33894) "a") (data (i32.const 33897) "a") (data (i32.const 33900) "a") (data (i32.const 33903) "a") (data (i32.const 33906) "a") (data (i32.const 33909) "a") (data (i32.const 33912) "a") (data (i32.const 33915) "a") (data (i32.const 33918) "a") (data (i32.const 33921) "a") (data (i32.const 33924) "a") (data (i32.const 33927) "a") (data (i32.const 33930) "a") (data (i32.const 33933) "a") (data (i32.const 33936) "a") (data (i32.const 33939) "a") (data (i32.const 33942) "a") (data (i32.const 33945) "a") (data (i32.const 33948) "a") (data (i32.const 33951) "a") (data (i32.const 33954) "a") (data (i32.const 33957) "a") (data (i32.const 33960) "a") (data (i32.const 33963) "a") (data (i32.const 33966) "a") (data (i32.const 33969) "a") (data (i32.const 33972) "a") (data (i32.const 33975) "a") (data (i32.const 33978) "a") (data (i32.const 33981) "a") (data (i32.const 33984) "a") (data (i32.const 33987) "a") (data (i32.const 33990) "a") (data (i32.const 33993) "a") (data (i32.const 33996) "a") (data (i32.const 33999) "a") (data (i32.const 34002) "a") (data (i32.const 34005) "a") (data (i32.const 34008) "a") (data (i32.const 34011) "a") (data (i32.const 34014) "a") (data (i32.const 34017) "a") (data (i32.const 34020) "a") (data (i32.const 34023) "a") (data (i32.const 34026) "a") (data (i32.const 34029) "a") (data (i32.const 34032) "a") (data (i32.const 34035) "a") (data (i32.const 34038) "a") (data (i32.const 34041) "a") (data (i32.const 34044) "a") (data (i32.const 34047) "a") (data (i32.const 34050) "a") (data (i32.const 34053) "a") (data (i32.const 34056) "a") (data (i32.const 34059) "a") (data (i32.const 34062) "a") (data (i32.const 34065) "a") (data (i32.const 34068) "a") (data (i32.const 34071) "a") (data (i32.const 34074) "a") (data (i32.const 34077) "a") (data (i32.const 34080) "a") (data (i32.const 34083) "a") (data (i32.const 34086) "a") (data (i32.const 34089) "a") (data (i32.const 34092) "a") (data (i32.const 34095) "a") (data (i32.const 34098) "a") (data (i32.const 34101) "a") (data (i32.const 34104) "a") (data (i32.const 34107) "a") (data (i32.const 34110) "a") (data (i32.const 34113) "a") (data (i32.const 34116) "a") (data (i32.const 34119) "a") (data (i32.const 34122) "a") (data (i32.const 34125) "a") (data (i32.const 34128) "a") (data (i32.const 34131) "a") (data (i32.const 34134) "a") (data (i32.const 34137) "a") (data (i32.const 34140) "a") (data (i32.const 34143) "a") (data (i32.const 34146) "a") (data (i32.const 34149) "a") (data (i32.const 34152) "a") (data (i32.const 34155) "a") (data (i32.const 34158) "a") (data (i32.const 34161) "a") (data (i32.const 34164) "a") (data (i32.const 34167) "a") (data (i32.const 34170) "a") (data (i32.const 34173) "a") (data (i32.const 34176) "a") (data (i32.const 34179) "a") (data (i32.const 34182) "a") (data (i32.const 34185) "a") (data (i32.const 34188) "a") (data (i32.const 34191) "a") (data (i32.const 34194) "a") (data (i32.const 34197) "a") (data (i32.const 34200) "a") (data (i32.const 34203) "a") (data (i32.const 34206) "a") (data (i32.const 34209) "a") (data (i32.const 34212) "a") (data (i32.const 34215) "a") (data (i32.const 34218) "a") (data (i32.const 34221) "a") (data (i32.const 34224) "a") (data (i32.const 34227) "a") (data (i32.const 34230) "a") (data (i32.const 34233) "a") (data (i32.const 34236) "a") (data (i32.const 34239) "a") (data (i32.const 34242) "a") (data (i32.const 34245) "a") (data (i32.const 34248) "a") (data (i32.const 34251) "a") (data (i32.const 34254) "a") (data (i32.const 34257) "a") (data (i32.const 34260) "a") (data (i32.const 34263) "a") (data (i32.const 34266) "a") (data (i32.const 34269) "a") (data (i32.const 34272) "a") (data (i32.const 34275) "a") (data (i32.const 34278) "a") (data (i32.const 34281) "a") (data (i32.const 34284) "a") (data (i32.const 34287) "a") (data (i32.const 34290) "a") (data (i32.const 34293) "a") (data (i32.const 34296) "a") (data (i32.const 34299) "a") (data (i32.const 34302) "a") (data (i32.const 34305) "a") (data (i32.const 34308) "a") (data (i32.const 34311) "a") (data (i32.const 34314) "a") (data (i32.const 34317) "a") (data (i32.const 34320) "a") (data (i32.const 34323) "a") (data (i32.const 34326) "a") (data (i32.const 34329) "a") (data (i32.const 34332) "a") (data (i32.const 34335) "a") (data (i32.const 34338) "a") (data (i32.const 34341) "a") (data (i32.const 34344) "a") (data (i32.const 34347) "a") (data (i32.const 34350) "a") (data (i32.const 34353) "a") (data (i32.const 34356) "a") (data (i32.const 34359) "a") (data (i32.const 34362) "a") (data (i32.const 34365) "a") (data (i32.const 34368) "a") (data (i32.const 34371) "a") (data (i32.const 34374) "a") (data (i32.const 34377) "a") (data (i32.const 34380) "a") (data (i32.const 34383) "a") (data (i32.const 34386) "a") (data (i32.const 34389) "a") (data (i32.const 34392) "a") (data (i32.const 34395) "a") (data (i32.const 34398) "a") (data (i32.const 34401) "a") (data (i32.const 34404) "a") (data (i32.const 34407) "a") (data (i32.const 34410) "a") (data (i32.const 34413) "a") (data (i32.const 34416) "a") (data (i32.const 34419) "a") (data (i32.const 34422) "a") (data (i32.const 34425) "a") (data (i32.const 34428) "a") (data (i32.const 34431) "a") (data (i32.const 34434) "a") (data (i32.const 34437) "a") (data (i32.const 34440) "a") (data (i32.const 34443) "a") (data (i32.const 34446) "a") (data (i32.const 34449) "a") (data (i32.const 34452) "a") (data (i32.const 34455) "a") (data (i32.const 34458) "a") (data (i32.const 34461) "a") (data (i32.const 34464) "a") (data (i32.const 34467) "a") (data (i32.const 34470) "a") (data (i32.const 34473) "a") (data (i32.const 34476) "a") (data (i32.const 34479) "a") (data (i32.const 34482) "a") (data (i32.const 34485) "a") (data (i32.const 34488) "a") (data (i32.const 34491) "a") (data (i32.const 34494) "a") (data (i32.const 34497) "a") (data (i32.const 34500) "a") (data (i32.const 34503) "a") (data (i32.const 34506) "a") (data (i32.const 34509) "a") (data (i32.const 34512) "a") (data (i32.const 34515) "a") (data (i32.const 34518) "a") (data (i32.const 34521) "a") (data (i32.const 34524) "a") (data (i32.const 34527) "a") (data (i32.const 34530) "a") (data (i32.const 34533) "a") (data (i32.const 34536) "a") (data (i32.const 34539) "a") (data (i32.const 34542) "a") (data (i32.const 34545) "a") (data (i32.const 34548) "a") (data (i32.const 34551) "a") (data (i32.const 34554) "a") (data (i32.const 34557) "a") (data (i32.const 34560) "a") (data (i32.const 34563) "a") (data (i32.const 34566) "a") (data (i32.const 34569) "a") (data (i32.const 34572) "a") (data (i32.const 34575) "a") (data (i32.const 34578) "a") (data (i32.const 34581) "a") (data (i32.const 34584) "a") (data (i32.const 34587) "a") (data (i32.const 34590) "a") (data (i32.const 34593) "a") (data (i32.const 34596) "a") (data (i32.const 34599) "a") (data (i32.const 34602) "a") (data (i32.const 34605) "a") (data (i32.const 34608) "a") (data (i32.const 34611) "a") (data (i32.const 34614) "a") (data (i32.const 34617) "a") (data (i32.const 34620) "a") (data (i32.const 34623) "a") (data (i32.const 34626) "a") (data (i32.const 34629) "a") (data (i32.const 34632) "a") (data (i32.const 34635) "a") (data (i32.const 34638) "a") (data (i32.const 34641) "a") (data (i32.const 34644) "a") (data (i32.const 34647) "a") (data (i32.const 34650) "a") (data (i32.const 34653) "a") (data (i32.const 34656) "a") (data (i32.const 34659) "a") (data (i32.const 34662) "a") (data (i32.const 34665) "a") (data (i32.const 34668) "a") (data (i32.const 34671) "a") (data (i32.const 34674) "a") (data (i32.const 34677) "a") (data (i32.const 34680) "a") (data (i32.const 34683) "a") (data (i32.const 34686) "a") (data (i32.const 34689) "a") (data (i32.const 34692) "a") (data (i32.const 34695) "a") (data (i32.const 34698) "a") (data (i32.const 34701) "a") (data (i32.const 34704) "a") (data (i32.const 34707) "a") (data (i32.const 34710) "a") (data (i32.const 34713) "a") (data (i32.const 34716) "a") (data (i32.const 34719) "a") (data (i32.const 34722) "a") (data (i32.const 34725) "a") (data (i32.const 34728) "a") (data (i32.const 34731) "a") (data (i32.const 34734) "a") (data (i32.const 34737) "a") (data (i32.const 34740) "a") (data (i32.const 34743) "a") (data (i32.const 34746) "a") (data (i32.const 34749) "a") (data (i32.const 34752) "a") (data (i32.const 34755) "a") (data (i32.const 34758) "a") (data (i32.const 34761) "a") (data (i32.const 34764) "a") (data (i32.const 34767) "a") (data (i32.const 34770) "a") (data (i32.const 34773) "a") (data (i32.const 34776) "a") (data (i32.const 34779) "a") (data (i32.const 34782) "a") (data (i32.const 34785) "a") (data (i32.const 34788) "a") (data (i32.const 34791) "a") (data (i32.const 34794) "a") (data (i32.const 34797) "a") (data (i32.const 34800) "a") (data (i32.const 34803) "a") (data (i32.const 34806) "a") (data (i32.const 34809) "a") (data (i32.const 34812) "a") (data (i32.const 34815) "a") (data (i32.const 34818) "a") (data (i32.const 34821) "a") (data (i32.const 34824) "a") (data (i32.const 34827) "a") (data (i32.const 34830) "a") (data (i32.const 34833) "a") (data (i32.const 34836) "a") (data (i32.const 34839) "a") (data (i32.const 34842) "a") (data (i32.const 34845) "a") (data (i32.const 34848) "a") (data (i32.const 34851) "a") (data (i32.const 34854) "a") (data (i32.const 34857) "a") (data (i32.const 34860) "a") (data (i32.const 34863) "a") (data (i32.const 34866) "a") (data (i32.const 34869) "a") (data (i32.const 34872) "a") (data (i32.const 34875) "a") (data (i32.const 34878) "a") (data (i32.const 34881) "a") (data (i32.const 34884) "a") (data (i32.const 34887) "a") (data (i32.const 34890) "a") (data (i32.const 34893) "a") (data (i32.const 34896) "a") (data (i32.const 34899) "a") (data (i32.const 34902) "a") (data (i32.const 34905) "a") (data (i32.const 34908) "a") (data (i32.const 34911) "a") (data (i32.const 34914) "a") (data (i32.const 34917) "a") (data (i32.const 34920) "a") (data (i32.const 34923) "a") (data (i32.const 34926) "a") (data (i32.const 34929) "a") (data (i32.const 34932) "a") (data (i32.const 34935) "a") (data (i32.const 34938) "a") (data (i32.const 34941) "a") (data (i32.const 34944) "a") (data (i32.const 34947) "a") (data (i32.const 34950) "a") (data (i32.const 34953) "a") (data (i32.const 34956) "a") (data (i32.const 34959) "a") (data (i32.const 34962) "a") (data (i32.const 34965) "a") (data (i32.const 34968) "a") (data (i32.const 34971) "a") (data (i32.const 34974) "a") (data (i32.const 34977) "a") (data (i32.const 34980) "a") (data (i32.const 34983) "a") (data (i32.const 34986) "a") (data (i32.const 34989) "a") (data (i32.const 34992) "a") (data (i32.const 34995) "a") (data (i32.const 34998) "a") (data (i32.const 35001) "a") (data (i32.const 35004) "a") (data (i32.const 35007) "a") (data (i32.const 35010) "a") (data (i32.const 35013) "a") (data (i32.const 35016) "a") (data (i32.const 35019) "a") (data (i32.const 35022) "a") (data (i32.const 35025) "a") (data (i32.const 35028) "a") (data (i32.const 35031) "a") (data (i32.const 35034) "a") (data (i32.const 35037) "a") (data (i32.const 35040) "a") (data (i32.const 35043) "a") (data (i32.const 35046) "a") (data (i32.const 35049) "a") (data (i32.const 35052) "a") (data (i32.const 35055) "a") (data (i32.const 35058) "a") (data (i32.const 35061) "a") (data (i32.const 35064) "a") (data (i32.const 35067) "a") (data (i32.const 35070) "a") (data (i32.const 35073) "a") (data (i32.const 35076) "a") (data (i32.const 35079) "a") (data (i32.const 35082) "a") (data (i32.const 35085) "a") (data (i32.const 35088) "a") (data (i32.const 35091) "a") (data (i32.const 35094) "a") (data (i32.const 35097) "a") (data (i32.const 35100) "a") (data (i32.const 35103) "a") (data (i32.const 35106) "a") (data (i32.const 35109) "a") (data (i32.const 35112) "a") (data (i32.const 35115) "a") (data (i32.const 35118) "a") (data (i32.const 35121) "a") (data (i32.const 35124) "a") (data (i32.const 35127) "a") (data (i32.const 35130) "a") (data (i32.const 35133) "a") (data (i32.const 35136) "a") (data (i32.const 35139) "a") (data (i32.const 35142) "a") (data (i32.const 35145) "a") (data (i32.const 35148) "a") (data (i32.const 35151) "a") (data (i32.const 35154) "a") (data (i32.const 35157) "a") (data (i32.const 35160) "a") (data (i32.const 35163) "a") (data (i32.const 35166) "a") (data (i32.const 35169) "a") (data (i32.const 35172) "a") (data (i32.const 35175) "a") (data (i32.const 35178) "a") (data (i32.const 35181) "a") (data (i32.const 35184) "a") (data (i32.const 35187) "a") (data (i32.const 35190) "a") (data (i32.const 35193) "a") (data (i32.const 35196) "a") (data (i32.const 35199) "a") (data (i32.const 35202) "a") (data (i32.const 35205) "a") (data (i32.const 35208) "a") (data (i32.const 35211) "a") (data (i32.const 35214) "a") (data (i32.const 35217) "a") (data (i32.const 35220) "a") (data (i32.const 35223) "a") (data (i32.const 35226) "a") (data (i32.const 35229) "a") (data (i32.const 35232) "a") (data (i32.const 35235) "a") (data (i32.const 35238) "a") (data (i32.const 35241) "a") (data (i32.const 35244) "a") (data (i32.const 35247) "a") (data (i32.const 35250) "a") (data (i32.const 35253) "a") (data (i32.const 35256) "a") (data (i32.const 35259) "a") (data (i32.const 35262) "a") (data (i32.const 35265) "a") (data (i32.const 35268) "a") (data (i32.const 35271) "a") (data (i32.const 35274) "a") (data (i32.const 35277) "a") (data (i32.const 35280) "a") (data (i32.const 35283) "a") (data (i32.const 35286) "a") (data (i32.const 35289) "a") (data (i32.const 35292) "a") (data (i32.const 35295) "a") (data (i32.const 35298) "a") (data (i32.const 35301) "a") (data (i32.const 35304) "a") (data (i32.const 35307) "a") (data (i32.const 35310) "a") (data (i32.const 35313) "a") (data (i32.const 35316) "a") (data (i32.const 35319) "a") (data (i32.const 35322) "a") (data (i32.const 35325) "a") (data (i32.const 35328) "a") (data (i32.const 35331) "a") (data (i32.const 35334) "a") (data (i32.const 35337) "a") (data (i32.const 35340) "a") (data (i32.const 35343) "a") (data (i32.const 35346) "a") (data (i32.const 35349) "a") (data (i32.const 35352) "a") (data (i32.const 35355) "a") (data (i32.const 35358) "a") (data (i32.const 35361) "a") (data (i32.const 35364) "a") (data (i32.const 35367) "a") (data (i32.const 35370) "a") (data (i32.const 35373) "a") (data (i32.const 35376) "a") (data (i32.const 35379) "a") (data (i32.const 35382) "a") (data (i32.const 35385) "a") (data (i32.const 35388) "a") (data (i32.const 35391) "a") (data (i32.const 35394) "a") (data (i32.const 35397) "a") (data (i32.const 35400) "a") (data (i32.const 35403) "a") (data (i32.const 35406) "a") (data (i32.const 35409) "a") (data (i32.const 35412) "a") (data (i32.const 35415) "a") (data (i32.const 35418) "a") (data (i32.const 35421) "a") (data (i32.const 35424) "a") (data (i32.const 35427) "a") (data (i32.const 35430) "a") (data (i32.const 35433) "a") (data (i32.const 35436) "a") (data (i32.const 35439) "a") (data (i32.const 35442) "a") (data (i32.const 35445) "a") (data (i32.const 35448) "a") (data (i32.const 35451) "a") (data (i32.const 35454) "a") (data (i32.const 35457) "a") (data (i32.const 35460) "a") (data (i32.const 35463) "a") (data (i32.const 35466) "a") (data (i32.const 35469) "a") (data (i32.const 35472) "a") (data (i32.const 35475) "a") (data (i32.const 35478) "a") (data (i32.const 35481) "a") (data (i32.const 35484) "a") (data (i32.const 35487) "a") (data (i32.const 35490) "a") (data (i32.const 35493) "a") (data (i32.const 35496) "a") (data (i32.const 35499) "a") (data (i32.const 35502) "a") (data (i32.const 35505) "a") (data (i32.const 35508) "a") (data (i32.const 35511) "a") (data (i32.const 35514) "a") (data (i32.const 35517) "a") (data (i32.const 35520) "a") (data (i32.const 35523) "a") (data (i32.const 35526) "a") (data (i32.const 35529) "a") (data (i32.const 35532) "a") (data (i32.const 35535) "a") (data (i32.const 35538) "a") (data (i32.const 35541) "a") (data (i32.const 35544) "a") (data (i32.const 35547) "a") (data (i32.const 35550) "a") (data (i32.const 35553) "a") (data (i32.const 35556) "a") (data (i32.const 35559) "a") (data (i32.const 35562) "a") (data (i32.const 35565) "a") (data (i32.const 35568) "a") (data (i32.const 35571) "a") (data (i32.const 35574) "a") (data (i32.const 35577) "a") (data (i32.const 35580) "a") (data (i32.const 35583) "a") (data (i32.const 35586) "a") (data (i32.const 35589) "a") (data (i32.const 35592) "a") (data (i32.const 35595) "a") (data (i32.const 35598) "a") (data (i32.const 35601) "a") (data (i32.const 35604) "a") (data (i32.const 35607) "a") (data (i32.const 35610) "a") (data (i32.const 35613) "a") (data (i32.const 35616) "a") (data (i32.const 35619) "a") (data (i32.const 35622) "a") (data (i32.const 35625) "a") (data (i32.const 35628) "a") (data (i32.const 35631) "a") (data (i32.const 35634) "a") (data (i32.const 35637) "a") (data (i32.const 35640) "a") (data (i32.const 35643) "a") (data (i32.const 35646) "a") (data (i32.const 35649) "a") (data (i32.const 35652) "a") (data (i32.const 35655) "a") (data (i32.const 35658) "a") (data (i32.const 35661) "a") (data (i32.const 35664) "a") (data (i32.const 35667) "a") (data (i32.const 35670) "a") (data (i32.const 35673) "a") (data (i32.const 35676) "a") (data (i32.const 35679) "a") (data (i32.const 35682) "a") (data (i32.const 35685) "a") (data (i32.const 35688) "a") (data (i32.const 35691) "a") (data (i32.const 35694) "a") (data (i32.const 35697) "a") (data (i32.const 35700) "a") (data (i32.const 35703) "a") (data (i32.const 35706) "a") (data (i32.const 35709) "a") (data (i32.const 35712) "a") (data (i32.const 35715) "a") (data (i32.const 35718) "a") (data (i32.const 35721) "a") (data (i32.const 35724) "a") (data (i32.const 35727) "a") (data (i32.const 35730) "a") (data (i32.const 35733) "a") (data (i32.const 35736) "a") (data (i32.const 35739) "a") (data (i32.const 35742) "a") (data (i32.const 35745) "a") (data (i32.const 35748) "a") (data (i32.const 35751) "a") (data (i32.const 35754) "a") (data (i32.const 35757) "a") (data (i32.const 35760) "a") (data (i32.const 35763) "a") (data (i32.const 35766) "a") (data (i32.const 35769) "a") (data (i32.const 35772) "a") (data (i32.const 35775) "a") (data (i32.const 35778) "a") (data (i32.const 35781) "a") (data (i32.const 35784) "a") (data (i32.const 35787) "a") (data (i32.const 35790) "a") (data (i32.const 35793) "a") (data (i32.const 35796) "a") (data (i32.const 35799) "a") (data (i32.const 35802) "a") (data (i32.const 35805) "a") (data (i32.const 35808) "a") (data (i32.const 35811) "a") (data (i32.const 35814) "a") (data (i32.const 35817) "a") (data (i32.const 35820) "a") (data (i32.const 35823) "a") (data (i32.const 35826) "a") (data (i32.const 35829) "a") (data (i32.const 35832) "a") (data (i32.const 35835) "a") (data (i32.const 35838) "a") (data (i32.const 35841) "a") (data (i32.const 35844) "a") (data (i32.const 35847) "a") (data (i32.const 35850) "a") (data (i32.const 35853) "a") (data (i32.const 35856) "a") (data (i32.const 35859) "a") (data (i32.const 35862) "a") (data (i32.const 35865) "a") (data (i32.const 35868) "a") (data (i32.const 35871) "a") (data (i32.const 35874) "a") (data (i32.const 35877) "a") (data (i32.const 35880) "a") (data (i32.const 35883) "a") (data (i32.const 35886) "a") (data (i32.const 35889) "a") (data (i32.const 35892) "a") (data (i32.const 35895) "a") (data (i32.const 35898) "a") (data (i32.const 35901) "a") (data (i32.const 35904) "a") (data (i32.const 35907) "a") (data (i32.const 35910) "a") (data (i32.const 35913) "a") (data (i32.const 35916) "a") (data (i32.const 35919) "a") (data (i32.const 35922) "a") (data (i32.const 35925) "a") (data (i32.const 35928) "a") (data (i32.const 35931) "a") (data (i32.const 35934) "a") (data (i32.const 35937) "a") (data (i32.const 35940) "a") (data (i32.const 35943) "a") (data (i32.const 35946) "a") (data (i32.const 35949) "a") (data (i32.const 35952) "a") (data (i32.const 35955) "a") (data (i32.const 35958) "a") (data (i32.const 35961) "a") (data (i32.const 35964) "a") (data (i32.const 35967) "a") (data (i32.const 35970) "a") (data (i32.const 35973) "a") (data (i32.const 35976) "a") (data (i32.const 35979) "a") (data (i32.const 35982) "a") (data (i32.const 35985) "a") (data (i32.const 35988) "a") (data (i32.const 35991) "a") (data (i32.const 35994) "a") (data (i32.const 35997) "a") (data (i32.const 36000) "a") (data (i32.const 36003) "a") (data (i32.const 36006) "a") (data (i32.const 36009) "a") (data (i32.const 36012) "a") (data (i32.const 36015) "a") (data (i32.const 36018) "a") (data (i32.const 36021) "a") (data (i32.const 36024) "a") (data (i32.const 36027) "a") (data (i32.const 36030) "a") (data (i32.const 36033) "a") (data (i32.const 36036) "a") (data (i32.const 36039) "a") (data (i32.const 36042) "a") (data (i32.const 36045) "a") (data (i32.const 36048) "a") (data (i32.const 36051) "a") (data (i32.const 36054) "a") (data (i32.const 36057) "a") (data (i32.const 36060) "a") (data (i32.const 36063) "a") (data (i32.const 36066) "a") (data (i32.const 36069) "a") (data (i32.const 36072) "a") (data (i32.const 36075) "a") (data (i32.const 36078) "a") (data (i32.const 36081) "a") (data (i32.const 36084) "a") (data (i32.const 36087) "a") (data (i32.const 36090) "a") (data (i32.const 36093) "a") (data (i32.const 36096) "a") (data (i32.const 36099) "a") (data (i32.const 36102) "a") (data (i32.const 36105) "a") (data (i32.const 36108) "a") (data (i32.const 36111) "a") (data (i32.const 36114) "a") (data (i32.const 36117) "a") (data (i32.const 36120) "a") (data (i32.const 36123) "a") (data (i32.const 36126) "a") (data (i32.const 36129) "a") (data (i32.const 36132) "a") (data (i32.const 36135) "a") (data (i32.const 36138) "a") (data (i32.const 36141) "a") (data (i32.const 36144) "a") (data (i32.const 36147) "a") (data (i32.const 36150) "a") (data (i32.const 36153) "a") (data (i32.const 36156) "a") (data (i32.const 36159) "a") (data (i32.const 36162) "a") (data (i32.const 36165) "a") (data (i32.const 36168) "a") (data (i32.const 36171) "a") (data (i32.const 36174) "a") (data (i32.const 36177) "a") (data (i32.const 36180) "a") (data (i32.const 36183) "a") (data (i32.const 36186) "a") (data (i32.const 36189) "a") (data (i32.const 36192) "a") (data (i32.const 36195) "a") (data (i32.const 36198) "a") (data (i32.const 36201) "a") (data (i32.const 36204) "a") (data (i32.const 36207) "a") (data (i32.const 36210) "a") (data (i32.const 36213) "a") (data (i32.const 36216) "a") (data (i32.const 36219) "a") (data (i32.const 36222) "a") (data (i32.const 36225) "a") (data (i32.const 36228) "a") (data (i32.const 36231) "a") (data (i32.const 36234) "a") (data (i32.const 36237) "a") (data (i32.const 36240) "a") (data (i32.const 36243) "a") (data (i32.const 36246) "a") (data (i32.const 36249) "a") (data (i32.const 36252) "a") (data (i32.const 36255) "a") (data (i32.const 36258) "a") (data (i32.const 36261) "a") (data (i32.const 36264) "a") (data (i32.const 36267) "a") (data (i32.const 36270) "a") (data (i32.const 36273) "a") (data (i32.const 36276) "a") (data (i32.const 36279) "a") (data (i32.const 36282) "a") (data (i32.const 36285) "a") (data (i32.const 36288) "a") (data (i32.const 36291) "a") (data (i32.const 36294) "a") (data (i32.const 36297) "a") (data (i32.const 36300) "a") (data (i32.const 36303) "a") (data (i32.const 36306) "a") (data (i32.const 36309) "a") (data (i32.const 36312) "a") (data (i32.const 36315) "a") (data (i32.const 36318) "a") (data (i32.const 36321) "a") (data (i32.const 36324) "a") (data (i32.const 36327) "a") (data (i32.const 36330) "a") (data (i32.const 36333) "a") (data (i32.const 36336) "a") (data (i32.const 36339) "a") (data (i32.const 36342) "a") (data (i32.const 36345) "a") (data (i32.const 36348) "a") (data (i32.const 36351) "a") (data (i32.const 36354) "a") (data (i32.const 36357) "a") (data (i32.const 36360) "a") (data (i32.const 36363) "a") (data (i32.const 36366) "a") (data (i32.const 36369) "a") (data (i32.const 36372) "a") (data (i32.const 36375) "a") (data (i32.const 36378) "a") (data (i32.const 36381) "a") (data (i32.const 36384) "a") (data (i32.const 36387) "a") (data (i32.const 36390) "a") (data (i32.const 36393) "a") (data (i32.const 36396) "a") (data (i32.const 36399) "a") (data (i32.const 36402) "a") (data (i32.const 36405) "a") (data (i32.const 36408) "a") (data (i32.const 36411) "a") (data (i32.const 36414) "a") (data (i32.const 36417) "a") (data (i32.const 36420) "a") (data (i32.const 36423) "a") (data (i32.const 36426) "a") (data (i32.const 36429) "a") (data (i32.const 36432) "a") (data (i32.const 36435) "a") (data (i32.const 36438) "a") (data (i32.const 36441) "a") (data (i32.const 36444) "a") (data (i32.const 36447) "a") (data (i32.const 36450) "a") (data (i32.const 36453) "a") (data (i32.const 36456) "a") (data (i32.const 36459) "a") (data (i32.const 36462) "a") (data (i32.const 36465) "a") (data (i32.const 36468) "a") (data (i32.const 36471) "a") (data (i32.const 36474) "a") (data (i32.const 36477) "a") (data (i32.const 36480) "a") (data (i32.const 36483) "a") (data (i32.const 36486) "a") (data (i32.const 36489) "a") (data (i32.const 36492) "a") (data (i32.const 36495) "a") (data (i32.const 36498) "a") (data (i32.const 36501) "a") (data (i32.const 36504) "a") (data (i32.const 36507) "a") (data (i32.const 36510) "a") (data (i32.const 36513) "a") (data (i32.const 36516) "a") (data (i32.const 36519) "a") (data (i32.const 36522) "a") (data (i32.const 36525) "a") (data (i32.const 36528) "a") (data (i32.const 36531) "a") (data (i32.const 36534) "a") (data (i32.const 36537) "a") (data (i32.const 36540) "a") (data (i32.const 36543) "a") (data (i32.const 36546) "a") (data (i32.const 36549) "a") (data (i32.const 36552) "a") (data (i32.const 36555) "a") (data (i32.const 36558) "a") (data (i32.const 36561) "a") (data (i32.const 36564) "a") (data (i32.const 36567) "a") (data (i32.const 36570) "a") (data (i32.const 36573) "a") (data (i32.const 36576) "a") (data (i32.const 36579) "a") (data (i32.const 36582) "a") (data (i32.const 36585) "a") (data (i32.const 36588) "a") (data (i32.const 36591) "a") (data (i32.const 36594) "a") (data (i32.const 36597) "a") (data (i32.const 36600) "a") (data (i32.const 36603) "a") (data (i32.const 36606) "a") (data (i32.const 36609) "a") (data (i32.const 36612) "a") (data (i32.const 36615) "a") (data (i32.const 36618) "a") (data (i32.const 36621) "a") (data (i32.const 36624) "a") (data (i32.const 36627) "a") (data (i32.const 36630) "a") (data (i32.const 36633) "a") (data (i32.const 36636) "a") (data (i32.const 36639) "a") (data (i32.const 36642) "a") (data (i32.const 36645) "a") (data (i32.const 36648) "a") (data (i32.const 36651) "a") (data (i32.const 36654) "a") (data (i32.const 36657) "a") (data (i32.const 36660) "a") (data (i32.const 36663) "a") (data (i32.const 36666) "a") (data (i32.const 36669) "a") (data (i32.const 36672) "a") (data (i32.const 36675) "a") (data (i32.const 36678) "a") (data (i32.const 36681) "a") (data (i32.const 36684) "a") (data (i32.const 36687) "a") (data (i32.const 36690) "a") (data (i32.const 36693) "a") (data (i32.const 36696) "a") (data (i32.const 36699) "a") (data (i32.const 36702) "a") (data (i32.const 36705) "a") (data (i32.const 36708) "a") (data (i32.const 36711) "a") (data (i32.const 36714) "a") (data (i32.const 36717) "a") (data (i32.const 36720) "a") (data (i32.const 36723) "a") (data (i32.const 36726) "a") (data (i32.const 36729) "a") (data (i32.const 36732) "a") (data (i32.const 36735) "a") (data (i32.const 36738) "a") (data (i32.const 36741) "a") (data (i32.const 36744) "a") (data (i32.const 36747) "a") (data (i32.const 36750) "a") (data (i32.const 36753) "a") (data (i32.const 36756) "a") (data (i32.const 36759) "a") (data (i32.const 36762) "a") (data (i32.const 36765) "a") (data (i32.const 36768) "a") (data (i32.const 36771) "a") (data (i32.const 36774) "a") (data (i32.const 36777) "a") (data (i32.const 36780) "a") (data (i32.const 36783) "a") (data (i32.const 36786) "a") (data (i32.const 36789) "a") (data (i32.const 36792) "a") (data (i32.const 36795) "a") (data (i32.const 36798) "a") (data (i32.const 36801) "a") (data (i32.const 36804) "a") (data (i32.const 36807) "a") (data (i32.const 36810) "a") (data (i32.const 36813) "a") (data (i32.const 36816) "a") (data (i32.const 36819) "a") (data (i32.const 36822) "a") (data (i32.const 36825) "a") (data (i32.const 36828) "a") (data (i32.const 36831) "a") (data (i32.const 36834) "a") (data (i32.const 36837) "a") (data (i32.const 36840) "a") (data (i32.const 36843) "a") (data (i32.const 36846) "a") (data (i32.const 36849) "a") (data (i32.const 36852) "a") (data (i32.const 36855) "a") (data (i32.const 36858) "a") (data (i32.const 36861) "a") (data (i32.const 36864) "a") (data (i32.const 36867) "a") (data (i32.const 36870) "a") (data (i32.const 36873) "a") (data (i32.const 36876) "a") (data (i32.const 36879) "a") (data (i32.const 36882) "a") (data (i32.const 36885) "a") (data (i32.const 36888) "a") (data (i32.const 36891) "a") (data (i32.const 36894) "a") (data (i32.const 36897) "a") (data (i32.const 36900) "a") (data (i32.const 36903) "a") (data (i32.const 36906) "a") (data (i32.const 36909) "a") (data (i32.const 36912) "a") (data (i32.const 36915) "a") (data (i32.const 36918) "a") (data (i32.const 36921) "a") (data (i32.const 36924) "a") (data (i32.const 36927) "a") (data (i32.const 36930) "a") (data (i32.const 36933) "a") (data (i32.const 36936) "a") (data (i32.const 36939) "a") (data (i32.const 36942) "a") (data (i32.const 36945) "a") (data (i32.const 36948) "a") (data (i32.const 36951) "a") (data (i32.const 36954) "a") (data (i32.const 36957) "a") (data (i32.const 36960) "a") (data (i32.const 36963) "a") (data (i32.const 36966) "a") (data (i32.const 36969) "a") (data (i32.const 36972) "a") (data (i32.const 36975) "a") (data (i32.const 36978) "a") (data (i32.const 36981) "a") (data (i32.const 36984) "a") (data (i32.const 36987) "a") (data (i32.const 36990) "a") (data (i32.const 36993) "a") (data (i32.const 36996) "a") (data (i32.const 36999) "a") (data (i32.const 37002) "a") (data (i32.const 37005) "a") (data (i32.const 37008) "a") (data (i32.const 37011) "a") (data (i32.const 37014) "a") (data (i32.const 37017) "a") (data (i32.const 37020) "a") (data (i32.const 37023) "a") (data (i32.const 37026) "a") (data (i32.const 37029) "a") (data (i32.const 37032) "a") (data (i32.const 37035) "a") (data (i32.const 37038) "a") (data (i32.const 37041) "a") (data (i32.const 37044) "a") (data (i32.const 37047) "a") (data (i32.const 37050) "a") (data (i32.const 37053) "a") (data (i32.const 37056) "a") (data (i32.const 37059) "a") (data (i32.const 37062) "a") (data (i32.const 37065) "a") (data (i32.const 37068) "a") (data (i32.const 37071) "a") (data (i32.const 37074) "a") (data (i32.const 37077) "a") (data (i32.const 37080) "a") (data (i32.const 37083) "a") (data (i32.const 37086) "a") (data (i32.const 37089) "a") (data (i32.const 37092) "a") (data (i32.const 37095) "a") (data (i32.const 37098) "a") (data (i32.const 37101) "a") (data (i32.const 37104) "a") (data (i32.const 37107) "a") (data (i32.const 37110) "a") (data (i32.const 37113) "a") (data (i32.const 37116) "a") (data (i32.const 37119) "a") (data (i32.const 37122) "a") (data (i32.const 37125) "a") (data (i32.const 37128) "a") (data (i32.const 37131) "a") (data (i32.const 37134) "a") (data (i32.const 37137) "a") (data (i32.const 37140) "a") (data (i32.const 37143) "a") (data (i32.const 37146) "a") (data (i32.const 37149) "a") (data (i32.const 37152) "a") (data (i32.const 37155) "a") (data (i32.const 37158) "a") (data (i32.const 37161) "a") (data (i32.const 37164) "a") (data (i32.const 37167) "a") (data (i32.const 37170) "a") (data (i32.const 37173) "a") (data (i32.const 37176) "a") (data (i32.const 37179) "a") (data (i32.const 37182) "a") (data (i32.const 37185) "a") (data (i32.const 37188) "a") (data (i32.const 37191) "a") (data (i32.const 37194) "a") (data (i32.const 37197) "a") (data (i32.const 37200) "a") (data (i32.const 37203) "a") (data (i32.const 37206) "a") (data (i32.const 37209) "a") (data (i32.const 37212) "a") (data (i32.const 37215) "a") (data (i32.const 37218) "a") (data (i32.const 37221) "a") (data (i32.const 37224) "a") (data (i32.const 37227) "a") (data (i32.const 37230) "a") (data (i32.const 37233) "a") (data (i32.const 37236) "a") (data (i32.const 37239) "a") (data (i32.const 37242) "a") (data (i32.const 37245) "a") (data (i32.const 37248) "a") (data (i32.const 37251) "a") (data (i32.const 37254) "a") (data (i32.const 37257) "a") (data (i32.const 37260) "a") (data (i32.const 37263) "a") (data (i32.const 37266) "a") (data (i32.const 37269) "a") (data (i32.const 37272) "a") (data (i32.const 37275) "a") (data (i32.const 37278) "a") (data (i32.const 37281) "a") (data (i32.const 37284) "a") (data (i32.const 37287) "a") (data (i32.const 37290) "a") (data (i32.const 37293) "a") (data (i32.const 37296) "a") (data (i32.const 37299) "a") (data (i32.const 37302) "a") (data (i32.const 37305) "a") (data (i32.const 37308) "a") (data (i32.const 37311) "a") (data (i32.const 37314) "a") (data (i32.const 37317) "a") (data (i32.const 37320) "a") (data (i32.const 37323) "a") (data (i32.const 37326) "a") (data (i32.const 37329) "a") (data (i32.const 37332) "a") (data (i32.const 37335) "a") (data (i32.const 37338) "a") (data (i32.const 37341) "a") (data (i32.const 37344) "a") (data (i32.const 37347) "a") (data (i32.const 37350) "a") (data (i32.const 37353) "a") (data (i32.const 37356) "a") (data (i32.const 37359) "a") (data (i32.const 37362) "a") (data (i32.const 37365) "a") (data (i32.const 37368) "a") (data (i32.const 37371) "a") (data (i32.const 37374) "a") (data (i32.const 37377) "a") (data (i32.const 37380) "a") (data (i32.const 37383) "a") (data (i32.const 37386) "a") (data (i32.const 37389) "a") (data (i32.const 37392) "a") (data (i32.const 37395) "a") (data (i32.const 37398) "a") (data (i32.const 37401) "a") (data (i32.const 37404) "a") (data (i32.const 37407) "a") (data (i32.const 37410) "a") (data (i32.const 37413) "a") (data (i32.const 37416) "a") (data (i32.const 37419) "a") (data (i32.const 37422) "a") (data (i32.const 37425) "a") (data (i32.const 37428) "a") (data (i32.const 37431) "a") (data (i32.const 37434) "a") (data (i32.const 37437) "a") (data (i32.const 37440) "a") (data (i32.const 37443) "a") (data (i32.const 37446) "a") (data (i32.const 37449) "a") (data (i32.const 37452) "a") (data (i32.const 37455) "a") (data (i32.const 37458) "a") (data (i32.const 37461) "a") (data (i32.const 37464) "a") (data (i32.const 37467) "a") (data (i32.const 37470) "a") (data (i32.const 37473) "a") (data (i32.const 37476) "a") (data (i32.const 37479) "a") (data (i32.const 37482) "a") (data (i32.const 37485) "a") (data (i32.const 37488) "a") (data (i32.const 37491) "a") (data (i32.const 37494) "a") (data (i32.const 37497) "a") (data (i32.const 37500) "a") (data (i32.const 37503) "a") (data (i32.const 37506) "a") (data (i32.const 37509) "a") (data (i32.const 37512) "a") (data (i32.const 37515) "a") (data (i32.const 37518) "a") (data (i32.const 37521) "a") (data (i32.const 37524) "a") (data (i32.const 37527) "a") (data (i32.const 37530) "a") (data (i32.const 37533) "a") (data (i32.const 37536) "a") (data (i32.const 37539) "a") (data (i32.const 37542) "a") (data (i32.const 37545) "a") (data (i32.const 37548) "a") (data (i32.const 37551) "a") (data (i32.const 37554) "a") (data (i32.const 37557) "a") (data (i32.const 37560) "a") (data (i32.const 37563) "a") (data (i32.const 37566) "a") (data (i32.const 37569) "a") (data (i32.const 37572) "a") (data (i32.const 37575) "a") (data (i32.const 37578) "a") (data (i32.const 37581) "a") (data (i32.const 37584) "a") (data (i32.const 37587) "a") (data (i32.const 37590) "a") (data (i32.const 37593) "a") (data (i32.const 37596) "a") (data (i32.const 37599) "a") (data (i32.const 37602) "a") (data (i32.const 37605) "a") (data (i32.const 37608) "a") (data (i32.const 37611) "a") (data (i32.const 37614) "a") (data (i32.const 37617) "a") (data (i32.const 37620) "a") (data (i32.const 37623) "a") (data (i32.const 37626) "a") (data (i32.const 37629) "a") (data (i32.const 37632) "a") (data (i32.const 37635) "a") (data (i32.const 37638) "a") (data (i32.const 37641) "a") (data (i32.const 37644) "a") (data (i32.const 37647) "a") (data (i32.const 37650) "a") (data (i32.const 37653) "a") (data (i32.const 37656) "a") (data (i32.const 37659) "a") (data (i32.const 37662) "a") (data (i32.const 37665) "a") (data (i32.const 37668) "a") (data (i32.const 37671) "a") (data (i32.const 37674) "a") (data (i32.const 37677) "a") (data (i32.const 37680) "a") (data (i32.const 37683) "a") (data (i32.const 37686) "a") (data (i32.const 37689) "a") (data (i32.const 37692) "a") (data (i32.const 37695) "a") (data (i32.const 37698) "a") (data (i32.const 37701) "a") (data (i32.const 37704) "a") (data (i32.const 37707) "a") (data (i32.const 37710) "a") (data (i32.const 37713) "a") (data (i32.const 37716) "a") (data (i32.const 37719) "a") (data (i32.const 37722) "a") (data (i32.const 37725) "a") (data (i32.const 37728) "a") (data (i32.const 37731) "a") (data (i32.const 37734) "a") (data (i32.const 37737) "a") (data (i32.const 37740) "a") (data (i32.const 37743) "a") (data (i32.const 37746) "a") (data (i32.const 37749) "a") (data (i32.const 37752) "a") (data (i32.const 37755) "a") (data (i32.const 37758) "a") (data (i32.const 37761) "a") (data (i32.const 37764) "a") (data (i32.const 37767) "a") (data (i32.const 37770) "a") (data (i32.const 37773) "a") (data (i32.const 37776) "a") (data (i32.const 37779) "a") (data (i32.const 37782) "a") (data (i32.const 37785) "a") (data (i32.const 37788) "a") (data (i32.const 37791) "a") (data (i32.const 37794) "a") (data (i32.const 37797) "a") (data (i32.const 37800) "a") (data (i32.const 37803) "a") (data (i32.const 37806) "a") (data (i32.const 37809) "a") (data (i32.const 37812) "a") (data (i32.const 37815) "a") (data (i32.const 37818) "a") (data (i32.const 37821) "a") (data (i32.const 37824) "a") (data (i32.const 37827) "a") (data (i32.const 37830) "a") (data (i32.const 37833) "a") (data (i32.const 37836) "a") (data (i32.const 37839) "a") (data (i32.const 37842) "a") (data (i32.const 37845) "a") (data (i32.const 37848) "a") (data (i32.const 37851) "a") (data (i32.const 37854) "a") (data (i32.const 37857) "a") (data (i32.const 37860) "a") (data (i32.const 37863) "a") (data (i32.const 37866) "a") (data (i32.const 37869) "a") (data (i32.const 37872) "a") (data (i32.const 37875) "a") (data (i32.const 37878) "a") (data (i32.const 37881) "a") (data (i32.const 37884) "a") (data (i32.const 37887) "a") (data (i32.const 37890) "a") (data (i32.const 37893) "a") (data (i32.const 37896) "a") (data (i32.const 37899) "a") (data (i32.const 37902) "a") (data (i32.const 37905) "a") (data (i32.const 37908) "a") (data (i32.const 37911) "a") (data (i32.const 37914) "a") (data (i32.const 37917) "a") (data (i32.const 37920) "a") (data (i32.const 37923) "a") (data (i32.const 37926) "a") (data (i32.const 37929) "a") (data (i32.const 37932) "a") (data (i32.const 37935) "a") (data (i32.const 37938) "a") (data (i32.const 37941) "a") (data (i32.const 37944) "a") (data (i32.const 37947) "a") (data (i32.const 37950) "a") (data (i32.const 37953) "a") (data (i32.const 37956) "a") (data (i32.const 37959) "a") (data (i32.const 37962) "a") (data (i32.const 37965) "a") (data (i32.const 37968) "a") (data (i32.const 37971) "a") (data (i32.const 37974) "a") (data (i32.const 37977) "a") (data (i32.const 37980) "a") (data (i32.const 37983) "a") (data (i32.const 37986) "a") (data (i32.const 37989) "a") (data (i32.const 37992) "a") (data (i32.const 37995) "a") (data (i32.const 37998) "a") (data (i32.const 38001) "a") (data (i32.const 38004) "a") (data (i32.const 38007) "a") (data (i32.const 38010) "a") (data (i32.const 38013) "a") (data (i32.const 38016) "a") (data (i32.const 38019) "a") (data (i32.const 38022) "a") (data (i32.const 38025) "a") (data (i32.const 38028) "a") (data (i32.const 38031) "a") (data (i32.const 38034) "a") (data (i32.const 38037) "a") (data (i32.const 38040) "a") (data (i32.const 38043) "a") (data (i32.const 38046) "a") (data (i32.const 38049) "a") (data (i32.const 38052) "a") (data (i32.const 38055) "a") (data (i32.const 38058) "a") (data (i32.const 38061) "a") (data (i32.const 38064) "a") (data (i32.const 38067) "a") (data (i32.const 38070) "a") (data (i32.const 38073) "a") (data (i32.const 38076) "a") (data (i32.const 38079) "a") (data (i32.const 38082) "a") (data (i32.const 38085) "a") (data (i32.const 38088) "a") (data (i32.const 38091) "a") (data (i32.const 38094) "a") (data (i32.const 38097) "a") (data (i32.const 38100) "a") (data (i32.const 38103) "a") (data (i32.const 38106) "a") (data (i32.const 38109) "a") (data (i32.const 38112) "a") (data (i32.const 38115) "a") (data (i32.const 38118) "a") (data (i32.const 38121) "a") (data (i32.const 38124) "a") (data (i32.const 38127) "a") (data (i32.const 38130) "a") (data (i32.const 38133) "a") (data (i32.const 38136) "a") (data (i32.const 38139) "a") (data (i32.const 38142) "a") (data (i32.const 38145) "a") (data (i32.const 38148) "a") (data (i32.const 38151) "a") (data (i32.const 38154) "a") (data (i32.const 38157) "a") (data (i32.const 38160) "a") (data (i32.const 38163) "a") (data (i32.const 38166) "a") (data (i32.const 38169) "a") (data (i32.const 38172) "a") (data (i32.const 38175) "a") (data (i32.const 38178) "a") (data (i32.const 38181) "a") (data (i32.const 38184) "a") (data (i32.const 38187) "a") (data (i32.const 38190) "a") (data (i32.const 38193) "a") (data (i32.const 38196) "a") (data (i32.const 38199) "a") (data (i32.const 38202) "a") (data (i32.const 38205) "a") (data (i32.const 38208) "a") (data (i32.const 38211) "a") (data (i32.const 38214) "a") (data (i32.const 38217) "a") (data (i32.const 38220) "a") (data (i32.const 38223) "a") (data (i32.const 38226) "a") (data (i32.const 38229) "a") (data (i32.const 38232) "a") (data (i32.const 38235) "a") (data (i32.const 38238) "a") (data (i32.const 38241) "a") (data (i32.const 38244) "a") (data (i32.const 38247) "a") (data (i32.const 38250) "a") (data (i32.const 38253) "a") (data (i32.const 38256) "a") (data (i32.const 38259) "a") (data (i32.const 38262) "a") (data (i32.const 38265) "a") (data (i32.const 38268) "a") (data (i32.const 38271) "a") (data (i32.const 38274) "a") (data (i32.const 38277) "a") (data (i32.const 38280) "a") (data (i32.const 38283) "a") (data (i32.const 38286) "a") (data (i32.const 38289) "a") (data (i32.const 38292) "a") (data (i32.const 38295) "a") (data (i32.const 38298) "a") (data (i32.const 38301) "a") (data (i32.const 38304) "a") (data (i32.const 38307) "a") (data (i32.const 38310) "a") (data (i32.const 38313) "a") (data (i32.const 38316) "a") (data (i32.const 38319) "a") (data (i32.const 38322) "a") (data (i32.const 38325) "a") (data (i32.const 38328) "a") (data (i32.const 38331) "a") (data (i32.const 38334) "a") (data (i32.const 38337) "a") (data (i32.const 38340) "a") (data (i32.const 38343) "a") (data (i32.const 38346) "a") (data (i32.const 38349) "a") (data (i32.const 38352) "a") (data (i32.const 38355) "a") (data (i32.const 38358) "a") (data (i32.const 38361) "a") (data (i32.const 38364) "a") (data (i32.const 38367) "a") (data (i32.const 38370) "a") (data (i32.const 38373) "a") (data (i32.const 38376) "a") (data (i32.const 38379) "a") (data (i32.const 38382) "a") (data (i32.const 38385) "a") (data (i32.const 38388) "a") (data (i32.const 38391) "a") (data (i32.const 38394) "a") (data (i32.const 38397) "a") (data (i32.const 38400) "a") (data (i32.const 38403) "a") (data (i32.const 38406) "a") (data (i32.const 38409) "a") (data (i32.const 38412) "a") (data (i32.const 38415) "a") (data (i32.const 38418) "a") (data (i32.const 38421) "a") (data (i32.const 38424) "a") (data (i32.const 38427) "a") (data (i32.const 38430) "a") (data (i32.const 38433) "a") (data (i32.const 38436) "a") (data (i32.const 38439) "a") (data (i32.const 38442) "a") (data (i32.const 38445) "a") (data (i32.const 38448) "a") (data (i32.const 38451) "a") (data (i32.const 38454) "a") (data (i32.const 38457) "a") (data (i32.const 38460) "a") (data (i32.const 38463) "a") (data (i32.const 38466) "a") (data (i32.const 38469) "a") (data (i32.const 38472) "a") (data (i32.const 38475) "a") (data (i32.const 38478) "a") (data (i32.const 38481) "a") (data (i32.const 38484) "a") (data (i32.const 38487) "a") (data (i32.const 38490) "a") (data (i32.const 38493) "a") (data (i32.const 38496) "a") (data (i32.const 38499) "a") (data (i32.const 38502) "a") (data (i32.const 38505) "a") (data (i32.const 38508) "a") (data (i32.const 38511) "a") (data (i32.const 38514) "a") (data (i32.const 38517) "a") (data (i32.const 38520) "a") (data (i32.const 38523) "a") (data (i32.const 38526) "a") (data (i32.const 38529) "a") (data (i32.const 38532) "a") (data (i32.const 38535) "a") (data (i32.const 38538) "a") (data (i32.const 38541) "a") (data (i32.const 38544) "a") (data (i32.const 38547) "a") (data (i32.const 38550) "a") (data (i32.const 38553) "a") (data (i32.const 38556) "a") (data (i32.const 38559) "a") (data (i32.const 38562) "a") (data (i32.const 38565) "a") (data (i32.const 38568) "a") (data (i32.const 38571) "a") (data (i32.const 38574) "a") (data (i32.const 38577) "a") (data (i32.const 38580) "a") (data (i32.const 38583) "a") (data (i32.const 38586) "a") (data (i32.const 38589) "a") (data (i32.const 38592) "a") (data (i32.const 38595) "a") (data (i32.const 38598) "a") (data (i32.const 38601) "a") (data (i32.const 38604) "a") (data (i32.const 38607) "a") (data (i32.const 38610) "a") (data (i32.const 38613) "a") (data (i32.const 38616) "a") (data (i32.const 38619) "a") (data (i32.const 38622) "a") (data (i32.const 38625) "a") (data (i32.const 38628) "a") (data (i32.const 38631) "a") (data (i32.const 38634) "a") (data (i32.const 38637) "a") (data (i32.const 38640) "a") (data (i32.const 38643) "a") (data (i32.const 38646) "a") (data (i32.const 38649) "a") (data (i32.const 38652) "a") (data (i32.const 38655) "a") (data (i32.const 38658) "a") (data (i32.const 38661) "a") (data (i32.const 38664) "a") (data (i32.const 38667) "a") (data (i32.const 38670) "a") (data (i32.const 38673) "a") (data (i32.const 38676) "a") (data (i32.const 38679) "a") (data (i32.const 38682) "a") (data (i32.const 38685) "a") (data (i32.const 38688) "a") (data (i32.const 38691) "a") (data (i32.const 38694) "a") (data (i32.const 38697) "a") (data (i32.const 38700) "a") (data (i32.const 38703) "a") (data (i32.const 38706) "a") (data (i32.const 38709) "a") (data (i32.const 38712) "a") (data (i32.const 38715) "a") (data (i32.const 38718) "a") (data (i32.const 38721) "a") (data (i32.const 38724) "a") (data (i32.const 38727) "a") (data (i32.const 38730) "a") (data (i32.const 38733) "a") (data (i32.const 38736) "a") (data (i32.const 38739) "a") (data (i32.const 38742) "a") (data (i32.const 38745) "a") (data (i32.const 38748) "a") (data (i32.const 38751) "a") (data (i32.const 38754) "a") (data (i32.const 38757) "a") (data (i32.const 38760) "a") (data (i32.const 38763) "a") (data (i32.const 38766) "a") (data (i32.const 38769) "a") (data (i32.const 38772) "a") (data (i32.const 38775) "a") (data (i32.const 38778) "a") (data (i32.const 38781) "a") (data (i32.const 38784) "a") (data (i32.const 38787) "a") (data (i32.const 38790) "a") (data (i32.const 38793) "a") (data (i32.const 38796) "a") (data (i32.const 38799) "a") (data (i32.const 38802) "a") (data (i32.const 38805) "a") (data (i32.const 38808) "a") (data (i32.const 38811) "a") (data (i32.const 38814) "a") (data (i32.const 38817) "a") (data (i32.const 38820) "a") (data (i32.const 38823) "a") (data (i32.const 38826) "a") (data (i32.const 38829) "a") (data (i32.const 38832) "a") (data (i32.const 38835) "a") (data (i32.const 38838) "a") (data (i32.const 38841) "a") (data (i32.const 38844) "a") (data (i32.const 38847) "a") (data (i32.const 38850) "a") (data (i32.const 38853) "a") (data (i32.const 38856) "a") (data (i32.const 38859) "a") (data (i32.const 38862) "a") (data (i32.const 38865) "a") (data (i32.const 38868) "a") (data (i32.const 38871) "a") (data (i32.const 38874) "a") (data (i32.const 38877) "a") (data (i32.const 38880) "a") (data (i32.const 38883) "a") (data (i32.const 38886) "a") (data (i32.const 38889) "a") (data (i32.const 38892) "a") (data (i32.const 38895) "a") (data (i32.const 38898) "a") (data (i32.const 38901) "a") (data (i32.const 38904) "a") (data (i32.const 38907) "a") (data (i32.const 38910) "a") (data (i32.const 38913) "a") (data (i32.const 38916) "a") (data (i32.const 38919) "a") (data (i32.const 38922) "a") (data (i32.const 38925) "a") (data (i32.const 38928) "a") (data (i32.const 38931) "a") (data (i32.const 38934) "a") (data (i32.const 38937) "a") (data (i32.const 38940) "a") (data (i32.const 38943) "a") (data (i32.const 38946) "a") (data (i32.const 38949) "a") (data (i32.const 38952) "a") (data (i32.const 38955) "a") (data (i32.const 38958) "a") (data (i32.const 38961) "a") (data (i32.const 38964) "a") (data (i32.const 38967) "a") (data (i32.const 38970) "a") (data (i32.const 38973) "a") (data (i32.const 38976) "a") (data (i32.const 38979) "a") (data (i32.const 38982) "a") (data (i32.const 38985) "a") (data (i32.const 38988) "a") (data (i32.const 38991) "a") (data (i32.const 38994) "a") (data (i32.const 38997) "a") (data (i32.const 39000) "a") (data (i32.const 39003) "a") (data (i32.const 39006) "a") (data (i32.const 39009) "a") (data (i32.const 39012) "a") (data (i32.const 39015) "a") (data (i32.const 39018) "a") (data (i32.const 39021) "a") (data (i32.const 39024) "a") (data (i32.const 39027) "a") (data (i32.const 39030) "a") (data (i32.const 39033) "a") (data (i32.const 39036) "a") (data (i32.const 39039) "a") (data (i32.const 39042) "a") (data (i32.const 39045) "a") (data (i32.const 39048) "a") (data (i32.const 39051) "a") (data (i32.const 39054) "a") (data (i32.const 39057) "a") (data (i32.const 39060) "a") (data (i32.const 39063) "a") (data (i32.const 39066) "a") (data (i32.const 39069) "a") (data (i32.const 39072) "a") (data (i32.const 39075) "a") (data (i32.const 39078) "a") (data (i32.const 39081) "a") (data (i32.const 39084) "a") (data (i32.const 39087) "a") (data (i32.const 39090) "a") (data (i32.const 39093) "a") (data (i32.const 39096) "a") (data (i32.const 39099) "a") (data (i32.const 39102) "a") (data (i32.const 39105) "a") (data (i32.const 39108) "a") (data (i32.const 39111) "a") (data (i32.const 39114) "a") (data (i32.const 39117) "a") (data (i32.const 39120) "a") (data (i32.const 39123) "a") (data (i32.const 39126) "a") (data (i32.const 39129) "a") (data (i32.const 39132) "a") (data (i32.const 39135) "a") (data (i32.const 39138) "a") (data (i32.const 39141) "a") (data (i32.const 39144) "a") (data (i32.const 39147) "a") (data (i32.const 39150) "a") (data (i32.const 39153) "a") (data (i32.const 39156) "a") (data (i32.const 39159) "a") (data (i32.const 39162) "a") (data (i32.const 39165) "a") (data (i32.const 39168) "a") (data (i32.const 39171) "a") (data (i32.const 39174) "a") (data (i32.const 39177) "a") (data (i32.const 39180) "a") (data (i32.const 39183) "a") (data (i32.const 39186) "a") (data (i32.const 39189) "a") (data (i32.const 39192) "a") (data (i32.const 39195) "a") (data (i32.const 39198) "a") (data (i32.const 39201) "a") (data (i32.const 39204) "a") (data (i32.const 39207) "a") (data (i32.const 39210) "a") (data (i32.const 39213) "a") (data (i32.const 39216) "a") (data (i32.const 39219) "a") (data (i32.const 39222) "a") (data (i32.const 39225) "a") (data (i32.const 39228) "a") (data (i32.const 39231) "a") (data (i32.const 39234) "a") (data (i32.const 39237) "a") (data (i32.const 39240) "a") (data (i32.const 39243) "a") (data (i32.const 39246) "a") (data (i32.const 39249) "a") (data (i32.const 39252) "a") (data (i32.const 39255) "a") (data (i32.const 39258) "a") (data (i32.const 39261) "a") (data (i32.const 39264) "a") (data (i32.const 39267) "a") (data (i32.const 39270) "a") (data (i32.const 39273) "a") (data (i32.const 39276) "a") (data (i32.const 39279) "a") (data (i32.const 39282) "a") (data (i32.const 39285) "a") (data (i32.const 39288) "a") (data (i32.const 39291) "a") (data (i32.const 39294) "a") (data (i32.const 39297) "a") (data (i32.const 39300) "a") (data (i32.const 39303) "a") (data (i32.const 39306) "a") (data (i32.const 39309) "a") (data (i32.const 39312) "a") (data (i32.const 39315) "a") (data (i32.const 39318) "a") (data (i32.const 39321) "a") (data (i32.const 39324) "a") (data (i32.const 39327) "a") (data (i32.const 39330) "a") (data (i32.const 39333) "a") (data (i32.const 39336) "a") (data (i32.const 39339) "a") (data (i32.const 39342) "a") (data (i32.const 39345) "a") (data (i32.const 39348) "a") (data (i32.const 39351) "a") (data (i32.const 39354) "a") (data (i32.const 39357) "a") (data (i32.const 39360) "a") (data (i32.const 39363) "a") (data (i32.const 39366) "a") (data (i32.const 39369) "a") (data (i32.const 39372) "a") (data (i32.const 39375) "a") (data (i32.const 39378) "a") (data (i32.const 39381) "a") (data (i32.const 39384) "a") (data (i32.const 39387) "a") (data (i32.const 39390) "a") (data (i32.const 39393) "a") (data (i32.const 39396) "a") (data (i32.const 39399) "a") (data (i32.const 39402) "a") (data (i32.const 39405) "a") (data (i32.const 39408) "a") (data (i32.const 39411) "a") (data (i32.const 39414) "a") (data (i32.const 39417) "a") (data (i32.const 39420) "a") (data (i32.const 39423) "a") (data (i32.const 39426) "a") (data (i32.const 39429) "a") (data (i32.const 39432) "a") (data (i32.const 39435) "a") (data (i32.const 39438) "a") (data (i32.const 39441) "a") (data (i32.const 39444) "a") (data (i32.const 39447) "a") (data (i32.const 39450) "a") (data (i32.const 39453) "a") (data (i32.const 39456) "a") (data (i32.const 39459) "a") (data (i32.const 39462) "a") (data (i32.const 39465) "a") (data (i32.const 39468) "a") (data (i32.const 39471) "a") (data (i32.const 39474) "a") (data (i32.const 39477) "a") (data (i32.const 39480) "a") (data (i32.const 39483) "a") (data (i32.const 39486) "a") (data (i32.const 39489) "a") (data (i32.const 39492) "a") (data (i32.const 39495) "a") (data (i32.const 39498) "a") (data (i32.const 39501) "a") (data (i32.const 39504) "a") (data (i32.const 39507) "a") (data (i32.const 39510) "a") (data (i32.const 39513) "a") (data (i32.const 39516) "a") (data (i32.const 39519) "a") (data (i32.const 39522) "a") (data (i32.const 39525) "a") (data (i32.const 39528) "a") (data (i32.const 39531) "a") (data (i32.const 39534) "a") (data (i32.const 39537) "a") (data (i32.const 39540) "a") (data (i32.const 39543) "a") (data (i32.const 39546) "a") (data (i32.const 39549) "a") (data (i32.const 39552) "a") (data (i32.const 39555) "a") (data (i32.const 39558) "a") (data (i32.const 39561) "a") (data (i32.const 39564) "a") (data (i32.const 39567) "a") (data (i32.const 39570) "a") (data (i32.const 39573) "a") (data (i32.const 39576) "a") (data (i32.const 39579) "a") (data (i32.const 39582) "a") (data (i32.const 39585) "a") (data (i32.const 39588) "a") (data (i32.const 39591) "a") (data (i32.const 39594) "a") (data (i32.const 39597) "a") (data (i32.const 39600) "a") (data (i32.const 39603) "a") (data (i32.const 39606) "a") (data (i32.const 39609) "a") (data (i32.const 39612) "a") (data (i32.const 39615) "a") (data (i32.const 39618) "a") (data (i32.const 39621) "a") (data (i32.const 39624) "a") (data (i32.const 39627) "a") (data (i32.const 39630) "a") (data (i32.const 39633) "a") (data (i32.const 39636) "a") (data (i32.const 39639) "a") (data (i32.const 39642) "a") (data (i32.const 39645) "a") (data (i32.const 39648) "a") (data (i32.const 39651) "a") (data (i32.const 39654) "a") (data (i32.const 39657) "a") (data (i32.const 39660) "a") (data (i32.const 39663) "a") (data (i32.const 39666) "a") (data (i32.const 39669) "a") (data (i32.const 39672) "a") (data (i32.const 39675) "a") (data (i32.const 39678) "a") (data (i32.const 39681) "a") (data (i32.const 39684) "a") (data (i32.const 39687) "a") (data (i32.const 39690) "a") (data (i32.const 39693) "a") (data (i32.const 39696) "a") (data (i32.const 39699) "a") (data (i32.const 39702) "a") (data (i32.const 39705) "a") (data (i32.const 39708) "a") (data (i32.const 39711) "a") (data (i32.const 39714) "a") (data (i32.const 39717) "a") (data (i32.const 39720) "a") (data (i32.const 39723) "a") (data (i32.const 39726) "a") (data (i32.const 39729) "a") (data (i32.const 39732) "a") (data (i32.const 39735) "a") (data (i32.const 39738) "a") (data (i32.const 39741) "a") (data (i32.const 39744) "a") (data (i32.const 39747) "a") (data (i32.const 39750) "a") (data (i32.const 39753) "a") (data (i32.const 39756) "a") (data (i32.const 39759) "a") (data (i32.const 39762) "a") (data (i32.const 39765) "a") (data (i32.const 39768) "a") (data (i32.const 39771) "a") (data (i32.const 39774) "a") (data (i32.const 39777) "a") (data (i32.const 39780) "a") (data (i32.const 39783) "a") (data (i32.const 39786) "a") (data (i32.const 39789) "a") (data (i32.const 39792) "a") (data (i32.const 39795) "a") (data (i32.const 39798) "a") (data (i32.const 39801) "a") (data (i32.const 39804) "a") (data (i32.const 39807) "a") (data (i32.const 39810) "a") (data (i32.const 39813) "a") (data (i32.const 39816) "a") (data (i32.const 39819) "a") (data (i32.const 39822) "a") (data (i32.const 39825) "a") (data (i32.const 39828) "a") (data (i32.const 39831) "a") (data (i32.const 39834) "a") (data (i32.const 39837) "a") (data (i32.const 39840) "a") (data (i32.const 39843) "a") (data (i32.const 39846) "a") (data (i32.const 39849) "a") (data (i32.const 39852) "a") (data (i32.const 39855) "a") (data (i32.const 39858) "a") (data (i32.const 39861) "a") (data (i32.const 39864) "a") (data (i32.const 39867) "a") (data (i32.const 39870) "a") (data (i32.const 39873) "a") (data (i32.const 39876) "a") (data (i32.const 39879) "a") (data (i32.const 39882) "a") (data (i32.const 39885) "a") (data (i32.const 39888) "a") (data (i32.const 39891) "a") (data (i32.const 39894) "a") (data (i32.const 39897) "a") (data (i32.const 39900) "a") (data (i32.const 39903) "a") (data (i32.const 39906) "a") (data (i32.const 39909) "a") (data (i32.const 39912) "a") (data (i32.const 39915) "a") (data (i32.const 39918) "a") (data (i32.const 39921) "a") (data (i32.const 39924) "a") (data (i32.const 39927) "a") (data (i32.const 39930) "a") (data (i32.const 39933) "a") (data (i32.const 39936) "a") (data (i32.const 39939) "a") (data (i32.const 39942) "a") (data (i32.const 39945) "a") (data (i32.const 39948) "a") (data (i32.const 39951) "a") (data (i32.const 39954) "a") (data (i32.const 39957) "a") (data (i32.const 39960) "a") (data (i32.const 39963) "a") (data (i32.const 39966) "a") (data (i32.const 39969) "a") (data (i32.const 39972) "a") (data (i32.const 39975) "a") (data (i32.const 39978) "a") (data (i32.const 39981) "a") (data (i32.const 39984) "a") (data (i32.const 39987) "a") (data (i32.const 39990) "a") (data (i32.const 39993) "a") (data (i32.const 39996) "a") (data (i32.const 39999) "a") (data (i32.const 40002) "a") (data (i32.const 40005) "a") (data (i32.const 40008) "a") (data (i32.const 40011) "a") (data (i32.const 40014) "a") (data (i32.const 40017) "a") (data (i32.const 40020) "a") (data (i32.const 40023) "a") (data (i32.const 40026) "a") (data (i32.const 40029) "a") (data (i32.const 40032) "a") (data (i32.const 40035) "a") (data (i32.const 40038) "a") (data (i32.const 40041) "a") (data (i32.const 40044) "a") (data (i32.const 40047) "a") (data (i32.const 40050) "a") (data (i32.const 40053) "a") (data (i32.const 40056) "a") (data (i32.const 40059) "a") (data (i32.const 40062) "a") (data (i32.const 40065) "a") (data (i32.const 40068) "a") (data (i32.const 40071) "a") (data (i32.const 40074) "a") (data (i32.const 40077) "a") (data (i32.const 40080) "a") (data (i32.const 40083) "a") (data (i32.const 40086) "a") (data (i32.const 40089) "a") (data (i32.const 40092) "a") (data (i32.const 40095) "a") (data (i32.const 40098) "a") (data (i32.const 40101) "a") (data (i32.const 40104) "a") (data (i32.const 40107) "a") (data (i32.const 40110) "a") (data (i32.const 40113) "a") (data (i32.const 40116) "a") (data (i32.const 40119) "a") (data (i32.const 40122) "a") (data (i32.const 40125) "a") (data (i32.const 40128) "a") (data (i32.const 40131) "a") (data (i32.const 40134) "a") (data (i32.const 40137) "a") (data (i32.const 40140) "a") (data (i32.const 40143) "a") (data (i32.const 40146) "a") (data (i32.const 40149) "a") (data (i32.const 40152) "a") (data (i32.const 40155) "a") (data (i32.const 40158) "a") (data (i32.const 40161) "a") (data (i32.const 40164) "a") (data (i32.const 40167) "a") (data (i32.const 40170) "a") (data (i32.const 40173) "a") (data (i32.const 40176) "a") (data (i32.const 40179) "a") (data (i32.const 40182) "a") (data (i32.const 40185) "a") (data (i32.const 40188) "a") (data (i32.const 40191) "a") (data (i32.const 40194) "a") (data (i32.const 40197) "a") (data (i32.const 40200) "a") (data (i32.const 40203) "a") (data (i32.const 40206) "a") (data (i32.const 40209) "a") (data (i32.const 40212) "a") (data (i32.const 40215) "a") (data (i32.const 40218) "a") (data (i32.const 40221) "a") (data (i32.const 40224) "a") (data (i32.const 40227) "a") (data (i32.const 40230) "a") (data (i32.const 40233) "a") (data (i32.const 40236) "a") (data (i32.const 40239) "a") (data (i32.const 40242) "a") (data (i32.const 40245) "a") (data (i32.const 40248) "a") (data (i32.const 40251) "a") (data (i32.const 40254) "a") (data (i32.const 40257) "a") (data (i32.const 40260) "a") (data (i32.const 40263) "a") (data (i32.const 40266) "a") (data (i32.const 40269) "a") (data (i32.const 40272) "a") (data (i32.const 40275) "a") (data (i32.const 40278) "a") (data (i32.const 40281) "a") (data (i32.const 40284) "a") (data (i32.const 40287) "a") (data (i32.const 40290) "a") (data (i32.const 40293) "a") (data (i32.const 40296) "a") (data (i32.const 40299) "a") (data (i32.const 40302) "a") (data (i32.const 40305) "a") (data (i32.const 40308) "a") (data (i32.const 40311) "a") (data (i32.const 40314) "a") (data (i32.const 40317) "a") (data (i32.const 40320) "a") (data (i32.const 40323) "a") (data (i32.const 40326) "a") (data (i32.const 40329) "a") (data (i32.const 40332) "a") (data (i32.const 40335) "a") (data (i32.const 40338) "a") (data (i32.const 40341) "a") (data (i32.const 40344) "a") (data (i32.const 40347) "a") (data (i32.const 40350) "a") (data (i32.const 40353) "a") (data (i32.const 40356) "a") (data (i32.const 40359) "a") (data (i32.const 40362) "a") (data (i32.const 40365) "a") (data (i32.const 40368) "a") (data (i32.const 40371) "a") (data (i32.const 40374) "a") (data (i32.const 40377) "a") (data (i32.const 40380) "a") (data (i32.const 40383) "a") (data (i32.const 40386) "a") (data (i32.const 40389) "a") (data (i32.const 40392) "a") (data (i32.const 40395) "a") (data (i32.const 40398) "a") (data (i32.const 40401) "a") (data (i32.const 40404) "a") (data (i32.const 40407) "a") (data (i32.const 40410) "a") (data (i32.const 40413) "a") (data (i32.const 40416) "a") (data (i32.const 40419) "a") (data (i32.const 40422) "a") (data (i32.const 40425) "a") (data (i32.const 40428) "a") (data (i32.const 40431) "a") (data (i32.const 40434) "a") (data (i32.const 40437) "a") (data (i32.const 40440) "a") (data (i32.const 40443) "a") (data (i32.const 40446) "a") (data (i32.const 40449) "a") (data (i32.const 40452) "a") (data (i32.const 40455) "a") (data (i32.const 40458) "a") (data (i32.const 40461) "a") (data (i32.const 40464) "a") (data (i32.const 40467) "a") (data (i32.const 40470) "a") (data (i32.const 40473) "a") (data (i32.const 40476) "a") (data (i32.const 40479) "a") (data (i32.const 40482) "a") (data (i32.const 40485) "a") (data (i32.const 40488) "a") (data (i32.const 40491) "a") (data (i32.const 40494) "a") (data (i32.const 40497) "a") (data (i32.const 40500) "a") (data (i32.const 40503) "a") (data (i32.const 40506) "a") (data (i32.const 40509) "a") (data (i32.const 40512) "a") (data (i32.const 40515) "a") (data (i32.const 40518) "a") (data (i32.const 40521) "a") (data (i32.const 40524) "a") (data (i32.const 40527) "a") (data (i32.const 40530) "a") (data (i32.const 40533) "a") (data (i32.const 40536) "a") (data (i32.const 40539) "a") (data (i32.const 40542) "a") (data (i32.const 40545) "a") (data (i32.const 40548) "a") (data (i32.const 40551) "a") (data (i32.const 40554) "a") (data (i32.const 40557) "a") (data (i32.const 40560) "a") (data (i32.const 40563) "a") (data (i32.const 40566) "a") (data (i32.const 40569) "a") (data (i32.const 40572) "a") (data (i32.const 40575) "a") (data (i32.const 40578) "a") (data (i32.const 40581) "a") (data (i32.const 40584) "a") (data (i32.const 40587) "a") (data (i32.const 40590) "a") (data (i32.const 40593) "a") (data (i32.const 40596) "a") (data (i32.const 40599) "a") (data (i32.const 40602) "a") (data (i32.const 40605) "a") (data (i32.const 40608) "a") (data (i32.const 40611) "a") (data (i32.const 40614) "a") (data (i32.const 40617) "a") (data (i32.const 40620) "a") (data (i32.const 40623) "a") (data (i32.const 40626) "a") (data (i32.const 40629) "a") (data (i32.const 40632) "a") (data (i32.const 40635) "a") (data (i32.const 40638) "a") (data (i32.const 40641) "a") (data (i32.const 40644) "a") (data (i32.const 40647) "a") (data (i32.const 40650) "a") (data (i32.const 40653) "a") (data (i32.const 40656) "a") (data (i32.const 40659) "a") (data (i32.const 40662) "a") (data (i32.const 40665) "a") (data (i32.const 40668) "a") (data (i32.const 40671) "a") (data (i32.const 40674) "a") (data (i32.const 40677) "a") (data (i32.const 40680) "a") (data (i32.const 40683) "a") (data (i32.const 40686) "a") (data (i32.const 40689) "a") (data (i32.const 40692) "a") (data (i32.const 40695) "a") (data (i32.const 40698) "a") (data (i32.const 40701) "a") (data (i32.const 40704) "a") (data (i32.const 40707) "a") (data (i32.const 40710) "a") (data (i32.const 40713) "a") (data (i32.const 40716) "a") (data (i32.const 40719) "a") (data (i32.const 40722) "a") (data (i32.const 40725) "a") (data (i32.const 40728) "a") (data (i32.const 40731) "a") (data (i32.const 40734) "a") (data (i32.const 40737) "a") (data (i32.const 40740) "a") (data (i32.const 40743) "a") (data (i32.const 40746) "a") (data (i32.const 40749) "a") (data (i32.const 40752) "a") (data (i32.const 40755) "a") (data (i32.const 40758) "a") (data (i32.const 40761) "a") (data (i32.const 40764) "a") (data (i32.const 40767) "a") (data (i32.const 40770) "a") (data (i32.const 40773) "a") (data (i32.const 40776) "a") (data (i32.const 40779) "a") (data (i32.const 40782) "a") (data (i32.const 40785) "a") (data (i32.const 40788) "a") (data (i32.const 40791) "a") (data (i32.const 40794) "a") (data (i32.const 40797) "a") (data (i32.const 40800) "a") (data (i32.const 40803) "a") (data (i32.const 40806) "a") (data (i32.const 40809) "a") (data (i32.const 40812) "a") (data (i32.const 40815) "a") (data (i32.const 40818) "a") (data (i32.const 40821) "a") (data (i32.const 40824) "a") (data (i32.const 40827) "a") (data (i32.const 40830) "a") (data (i32.const 40833) "a") (data (i32.const 40836) "a") (data (i32.const 40839) "a") (data (i32.const 40842) "a") (data (i32.const 40845) "a") (data (i32.const 40848) "a") (data (i32.const 40851) "a") (data (i32.const 40854) "a") (data (i32.const 40857) "a") (data (i32.const 40860) "a") (data (i32.const 40863) "a") (data (i32.const 40866) "a") (data (i32.const 40869) "a") (data (i32.const 40872) "a") (data (i32.const 40875) "a") (data (i32.const 40878) "a") (data (i32.const 40881) "a") (data (i32.const 40884) "a") (data (i32.const 40887) "a") (data (i32.const 40890) "a") (data (i32.const 40893) "a") (data (i32.const 40896) "a") (data (i32.const 40899) "a") (data (i32.const 40902) "a") (data (i32.const 40905) "a") (data (i32.const 40908) "a") (data (i32.const 40911) "a") (data (i32.const 40914) "a") (data (i32.const 40917) "a") (data (i32.const 40920) "a") (data (i32.const 40923) "a") (data (i32.const 40926) "a") (data (i32.const 40929) "a") (data (i32.const 40932) "a") (data (i32.const 40935) "a") (data (i32.const 40938) "a") (data (i32.const 40941) "a") (data (i32.const 40944) "a") (data (i32.const 40947) "a") (data (i32.const 40950) "a") (data (i32.const 40953) "a") (data (i32.const 40956) "a") (data (i32.const 40959) "a") (data (i32.const 40962) "a") (data (i32.const 40965) "a") (data (i32.const 40968) "a") (data (i32.const 40971) "a") (data (i32.const 40974) "a") (data (i32.const 40977) "a") (data (i32.const 40980) "a") (data (i32.const 40983) "a") (data (i32.const 40986) "a") (data (i32.const 40989) "a") (data (i32.const 40992) "a") (data (i32.const 40995) "a") (data (i32.const 40998) "a") (data (i32.const 41001) "a") (data (i32.const 41004) "a") (data (i32.const 41007) "a") (data (i32.const 41010) "a") (data (i32.const 41013) "a") (data (i32.const 41016) "a") (data (i32.const 41019) "a") (data (i32.const 41022) "a") (data (i32.const 41025) "a") (data (i32.const 41028) "a") (data (i32.const 41031) "a") (data (i32.const 41034) "a") (data (i32.const 41037) "a") (data (i32.const 41040) "a") (data (i32.const 41043) "a") (data (i32.const 41046) "a") (data (i32.const 41049) "a") (data (i32.const 41052) "a") (data (i32.const 41055) "a") (data (i32.const 41058) "a") (data (i32.const 41061) "a") (data (i32.const 41064) "a") (data (i32.const 41067) "a") (data (i32.const 41070) "a") (data (i32.const 41073) "a") (data (i32.const 41076) "a") (data (i32.const 41079) "a") (data (i32.const 41082) "a") (data (i32.const 41085) "a") (data (i32.const 41088) "a") (data (i32.const 41091) "a") (data (i32.const 41094) "a") (data (i32.const 41097) "a") (data (i32.const 41100) "a") (data (i32.const 41103) "a") (data (i32.const 41106) "a") (data (i32.const 41109) "a") (data (i32.const 41112) "a") (data (i32.const 41115) "a") (data (i32.const 41118) "a") (data (i32.const 41121) "a") (data (i32.const 41124) "a") (data (i32.const 41127) "a") (data (i32.const 41130) "a") (data (i32.const 41133) "a") (data (i32.const 41136) "a") (data (i32.const 41139) "a") (data (i32.const 41142) "a") (data (i32.const 41145) "a") (data (i32.const 41148) "a") (data (i32.const 41151) "a") (data (i32.const 41154) "a") (data (i32.const 41157) "a") (data (i32.const 41160) "a") (data (i32.const 41163) "a") (data (i32.const 41166) "a") (data (i32.const 41169) "a") (data (i32.const 41172) "a") (data (i32.const 41175) "a") (data (i32.const 41178) "a") (data (i32.const 41181) "a") (data (i32.const 41184) "a") (data (i32.const 41187) "a") (data (i32.const 41190) "a") (data (i32.const 41193) "a") (data (i32.const 41196) "a") (data (i32.const 41199) "a") (data (i32.const 41202) "a") (data (i32.const 41205) "a") (data (i32.const 41208) "a") (data (i32.const 41211) "a") (data (i32.const 41214) "a") (data (i32.const 41217) "a") (data (i32.const 41220) "a") (data (i32.const 41223) "a") (data (i32.const 41226) "a") (data (i32.const 41229) "a") (data (i32.const 41232) "a") (data (i32.const 41235) "a") (data (i32.const 41238) "a") (data (i32.const 41241) "a") (data (i32.const 41244) "a") (data (i32.const 41247) "a") (data (i32.const 41250) "a") (data (i32.const 41253) "a") (data (i32.const 41256) "a") (data (i32.const 41259) "a") (data (i32.const 41262) "a") (data (i32.const 41265) "a") (data (i32.const 41268) "a") (data (i32.const 41271) "a") (data (i32.const 41274) "a") (data (i32.const 41277) "a") (data (i32.const 41280) "a") (data (i32.const 41283) "a") (data (i32.const 41286) "a") (data (i32.const 41289) "a") (data (i32.const 41292) "a") (data (i32.const 41295) "a") (data (i32.const 41298) "a") (data (i32.const 41301) "a") (data (i32.const 41304) "a") (data (i32.const 41307) "a") (data (i32.const 41310) "a") (data (i32.const 41313) "a") (data (i32.const 41316) "a") (data (i32.const 41319) "a") (data (i32.const 41322) "a") (data (i32.const 41325) "a") (data (i32.const 41328) "a") (data (i32.const 41331) "a") (data (i32.const 41334) "a") (data (i32.const 41337) "a") (data (i32.const 41340) "a") (data (i32.const 41343) "a") (data (i32.const 41346) "a") (data (i32.const 41349) "a") (data (i32.const 41352) "a") (data (i32.const 41355) "a") (data (i32.const 41358) "a") (data (i32.const 41361) "a") (data (i32.const 41364) "a") (data (i32.const 41367) "a") (data (i32.const 41370) "a") (data (i32.const 41373) "a") (data (i32.const 41376) "a") (data (i32.const 41379) "a") (data (i32.const 41382) "a") (data (i32.const 41385) "a") (data (i32.const 41388) "a") (data (i32.const 41391) "a") (data (i32.const 41394) "a") (data (i32.const 41397) "a") (data (i32.const 41400) "a") (data (i32.const 41403) "a") (data (i32.const 41406) "a") (data (i32.const 41409) "a") (data (i32.const 41412) "a") (data (i32.const 41415) "a") (data (i32.const 41418) "a") (data (i32.const 41421) "a") (data (i32.const 41424) "a") (data (i32.const 41427) "a") (data (i32.const 41430) "a") (data (i32.const 41433) "a") (data (i32.const 41436) "a") (data (i32.const 41439) "a") (data (i32.const 41442) "a") (data (i32.const 41445) "a") (data (i32.const 41448) "a") (data (i32.const 41451) "a") (data (i32.const 41454) "a") (data (i32.const 41457) "a") (data (i32.const 41460) "a") (data (i32.const 41463) "a") (data (i32.const 41466) "a") (data (i32.const 41469) "a") (data (i32.const 41472) "a") (data (i32.const 41475) "a") (data (i32.const 41478) "a") (data (i32.const 41481) "a") (data (i32.const 41484) "a") (data (i32.const 41487) "a") (data (i32.const 41490) "a") (data (i32.const 41493) "a") (data (i32.const 41496) "a") (data (i32.const 41499) "a") (data (i32.const 41502) "a") (data (i32.const 41505) "a") (data (i32.const 41508) "a") (data (i32.const 41511) "a") (data (i32.const 41514) "a") (data (i32.const 41517) "a") (data (i32.const 41520) "a") (data (i32.const 41523) "a") (data (i32.const 41526) "a") (data (i32.const 41529) "a") (data (i32.const 41532) "a") (data (i32.const 41535) "a") (data (i32.const 41538) "a") (data (i32.const 41541) "a") (data (i32.const 41544) "a") (data (i32.const 41547) "a") (data (i32.const 41550) "a") (data (i32.const 41553) "a") (data (i32.const 41556) "a") (data (i32.const 41559) "a") (data (i32.const 41562) "a") (data (i32.const 41565) "a") (data (i32.const 41568) "a") (data (i32.const 41571) "a") (data (i32.const 41574) "a") (data (i32.const 41577) "a") (data (i32.const 41580) "a") (data (i32.const 41583) "a") (data (i32.const 41586) "a") (data (i32.const 41589) "a") (data (i32.const 41592) "a") (data (i32.const 41595) "a") (data (i32.const 41598) "a") (data (i32.const 41601) "a") (data (i32.const 41604) "a") (data (i32.const 41607) "a") (data (i32.const 41610) "a") (data (i32.const 41613) "a") (data (i32.const 41616) "a") (data (i32.const 41619) "a") (data (i32.const 41622) "a") (data (i32.const 41625) "a") (data (i32.const 41628) "a") (data (i32.const 41631) "a") (data (i32.const 41634) "a") (data (i32.const 41637) "a") (data (i32.const 41640) "a") (data (i32.const 41643) "a") (data (i32.const 41646) "a") (data (i32.const 41649) "a") (data (i32.const 41652) "a") (data (i32.const 41655) "a") (data (i32.const 41658) "a") (data (i32.const 41661) "a") (data (i32.const 41664) "a") (data (i32.const 41667) "a") (data (i32.const 41670) "a") (data (i32.const 41673) "a") (data (i32.const 41676) "a") (data (i32.const 41679) "a") (data (i32.const 41682) "a") (data (i32.const 41685) "a") (data (i32.const 41688) "a") (data (i32.const 41691) "a") (data (i32.const 41694) "a") (data (i32.const 41697) "a") (data (i32.const 41700) "a") (data (i32.const 41703) "a") (data (i32.const 41706) "a") (data (i32.const 41709) "a") (data (i32.const 41712) "a") (data (i32.const 41715) "a") (data (i32.const 41718) "a") (data (i32.const 41721) "a") (data (i32.const 41724) "a") (data (i32.const 41727) "a") (data (i32.const 41730) "a") (data (i32.const 41733) "a") (data (i32.const 41736) "a") (data (i32.const 41739) "a") (data (i32.const 41742) "a") (data (i32.const 41745) "a") (data (i32.const 41748) "a") (data (i32.const 41751) "a") (data (i32.const 41754) "a") (data (i32.const 41757) "a") (data (i32.const 41760) "a") (data (i32.const 41763) "a") (data (i32.const 41766) "a") (data (i32.const 41769) "a") (data (i32.const 41772) "a") (data (i32.const 41775) "a") (data (i32.const 41778) "a") (data (i32.const 41781) "a") (data (i32.const 41784) "a") (data (i32.const 41787) "a") (data (i32.const 41790) "a") (data (i32.const 41793) "a") (data (i32.const 41796) "a") (data (i32.const 41799) "a") (data (i32.const 41802) "a") (data (i32.const 41805) "a") (data (i32.const 41808) "a") (data (i32.const 41811) "a") (data (i32.const 41814) "a") (data (i32.const 41817) "a") (data (i32.const 41820) "a") (data (i32.const 41823) "a") (data (i32.const 41826) "a") (data (i32.const 41829) "a") (data (i32.const 41832) "a") (data (i32.const 41835) "a") (data (i32.const 41838) "a") (data (i32.const 41841) "a") (data (i32.const 41844) "a") (data (i32.const 41847) "a") (data (i32.const 41850) "a") (data (i32.const 41853) "a") (data (i32.const 41856) "a") (data (i32.const 41859) "a") (data (i32.const 41862) "a") (data (i32.const 41865) "a") (data (i32.const 41868) "a") (data (i32.const 41871) "a") (data (i32.const 41874) "a") (data (i32.const 41877) "a") (data (i32.const 41880) "a") (data (i32.const 41883) "a") (data (i32.const 41886) "a") (data (i32.const 41889) "a") (data (i32.const 41892) "a") (data (i32.const 41895) "a") (data (i32.const 41898) "a") (data (i32.const 41901) "a") (data (i32.const 41904) "a") (data (i32.const 41907) "a") (data (i32.const 41910) "a") (data (i32.const 41913) "a") (data (i32.const 41916) "a") (data (i32.const 41919) "a") (data (i32.const 41922) "a") (data (i32.const 41925) "a") (data (i32.const 41928) "a") (data (i32.const 41931) "a") (data (i32.const 41934) "a") (data (i32.const 41937) "a") (data (i32.const 41940) "a") (data (i32.const 41943) "a") (data (i32.const 41946) "a") (data (i32.const 41949) "a") (data (i32.const 41952) "a") (data (i32.const 41955) "a") (data (i32.const 41958) "a") (data (i32.const 41961) "a") (data (i32.const 41964) "a") (data (i32.const 41967) "a") (data (i32.const 41970) "a") (data (i32.const 41973) "a") (data (i32.const 41976) "a") (data (i32.const 41979) "a") (data (i32.const 41982) "a") (data (i32.const 41985) "a") (data (i32.const 41988) "a") (data (i32.const 41991) "a") (data (i32.const 41994) "a") (data (i32.const 41997) "a") (data (i32.const 42000) "a") (data (i32.const 42003) "a") (data (i32.const 42006) "a") (data (i32.const 42009) "a") (data (i32.const 42012) "a") (data (i32.const 42015) "a") (data (i32.const 42018) "a") (data (i32.const 42021) "a") (data (i32.const 42024) "a") (data (i32.const 42027) "a") (data (i32.const 42030) "a") (data (i32.const 42033) "a") (data (i32.const 42036) "a") (data (i32.const 42039) "a") (data (i32.const 42042) "a") (data (i32.const 42045) "a") (data (i32.const 42048) "a") (data (i32.const 42051) "a") (data (i32.const 42054) "a") (data (i32.const 42057) "a") (data (i32.const 42060) "a") (data (i32.const 42063) "a") (data (i32.const 42066) "a") (data (i32.const 42069) "a") (data (i32.const 42072) "a") (data (i32.const 42075) "a") (data (i32.const 42078) "a") (data (i32.const 42081) "a") (data (i32.const 42084) "a") (data (i32.const 42087) "a") (data (i32.const 42090) "a") (data (i32.const 42093) "a") (data (i32.const 42096) "a") (data (i32.const 42099) "a") (data (i32.const 42102) "a") (data (i32.const 42105) "a") (data (i32.const 42108) "a") (data (i32.const 42111) "a") (data (i32.const 42114) "a") (data (i32.const 42117) "a") (data (i32.const 42120) "a") (data (i32.const 42123) "a") (data (i32.const 42126) "a") (data (i32.const 42129) "a") (data (i32.const 42132) "a") (data (i32.const 42135) "a") (data (i32.const 42138) "a") (data (i32.const 42141) "a") (data (i32.const 42144) "a") (data (i32.const 42147) "a") (data (i32.const 42150) "a") (data (i32.const 42153) "a") (data (i32.const 42156) "a") (data (i32.const 42159) "a") (data (i32.const 42162) "a") (data (i32.const 42165) "a") (data (i32.const 42168) "a") (data (i32.const 42171) "a") (data (i32.const 42174) "a") (data (i32.const 42177) "a") (data (i32.const 42180) "a") (data (i32.const 42183) "a") (data (i32.const 42186) "a") (data (i32.const 42189) "a") (data (i32.const 42192) "a") (data (i32.const 42195) "a") (data (i32.const 42198) "a") (data (i32.const 42201) "a") (data (i32.const 42204) "a") (data (i32.const 42207) "a") (data (i32.const 42210) "a") (data (i32.const 42213) "a") (data (i32.const 42216) "a") (data (i32.const 42219) "a") (data (i32.const 42222) "a") (data (i32.const 42225) "a") (data (i32.const 42228) "a") (data (i32.const 42231) "a") (data (i32.const 42234) "a") (data (i32.const 42237) "a") (data (i32.const 42240) "a") (data (i32.const 42243) "a") (data (i32.const 42246) "a") (data (i32.const 42249) "a") (data (i32.const 42252) "a") (data (i32.const 42255) "a") (data (i32.const 42258) "a") (data (i32.const 42261) "a") (data (i32.const 42264) "a") (data (i32.const 42267) "a") (data (i32.const 42270) "a") (data (i32.const 42273) "a") (data (i32.const 42276) "a") (data (i32.const 42279) "a") (data (i32.const 42282) "a") (data (i32.const 42285) "a") (data (i32.const 42288) "a") (data (i32.const 42291) "a") (data (i32.const 42294) "a") (data (i32.const 42297) "a") (data (i32.const 42300) "a") (data (i32.const 42303) "a") (data (i32.const 42306) "a") (data (i32.const 42309) "a") (data (i32.const 42312) "a") (data (i32.const 42315) "a") (data (i32.const 42318) "a") (data (i32.const 42321) "a") (data (i32.const 42324) "a") (data (i32.const 42327) "a") (data (i32.const 42330) "a") (data (i32.const 42333) "a") (data (i32.const 42336) "a") (data (i32.const 42339) "a") (data (i32.const 42342) "a") (data (i32.const 42345) "a") (data (i32.const 42348) "a") (data (i32.const 42351) "a") (data (i32.const 42354) "a") (data (i32.const 42357) "a") (data (i32.const 42360) "a") (data (i32.const 42363) "a") (data (i32.const 42366) "a") (data (i32.const 42369) "a") (data (i32.const 42372) "a") (data (i32.const 42375) "a") (data (i32.const 42378) "a") (data (i32.const 42381) "a") (data (i32.const 42384) "a") (data (i32.const 42387) "a") (data (i32.const 42390) "a") (data (i32.const 42393) "a") (data (i32.const 42396) "a") (data (i32.const 42399) "a") (data (i32.const 42402) "a") (data (i32.const 42405) "a") (data (i32.const 42408) "a") (data (i32.const 42411) "a") (data (i32.const 42414) "a") (data (i32.const 42417) "a") (data (i32.const 42420) "a") (data (i32.const 42423) "a") (data (i32.const 42426) "a") (data (i32.const 42429) "a") (data (i32.const 42432) "a") (data (i32.const 42435) "a") (data (i32.const 42438) "a") (data (i32.const 42441) "a") (data (i32.const 42444) "a") (data (i32.const 42447) "a") (data (i32.const 42450) "a") (data (i32.const 42453) "a") (data (i32.const 42456) "a") (data (i32.const 42459) "a") (data (i32.const 42462) "a") (data (i32.const 42465) "a") (data (i32.const 42468) "a") (data (i32.const 42471) "a") (data (i32.const 42474) "a") (data (i32.const 42477) "a") (data (i32.const 42480) "a") (data (i32.const 42483) "a") (data (i32.const 42486) "a") (data (i32.const 42489) "a") (data (i32.const 42492) "a") (data (i32.const 42495) "a") (data (i32.const 42498) "a") (data (i32.const 42501) "a") (data (i32.const 42504) "a") (data (i32.const 42507) "a") (data (i32.const 42510) "a") (data (i32.const 42513) "a") (data (i32.const 42516) "a") (data (i32.const 42519) "a") (data (i32.const 42522) "a") (data (i32.const 42525) "a") (data (i32.const 42528) "a") (data (i32.const 42531) "a") (data (i32.const 42534) "a") (data (i32.const 42537) "a") (data (i32.const 42540) "a") (data (i32.const 42543) "a") (data (i32.const 42546) "a") (data (i32.const 42549) "a") (data (i32.const 42552) "a") (data (i32.const 42555) "a") (data (i32.const 42558) "a") (data (i32.const 42561) "a") (data (i32.const 42564) "a") (data (i32.const 42567) "a") (data (i32.const 42570) "a") (data (i32.const 42573) "a") (data (i32.const 42576) "a") (data (i32.const 42579) "a") (data (i32.const 42582) "a") (data (i32.const 42585) "a") (data (i32.const 42588) "a") (data (i32.const 42591) "a") (data (i32.const 42594) "a") (data (i32.const 42597) "a") (data (i32.const 42600) "a") (data (i32.const 42603) "a") (data (i32.const 42606) "a") (data (i32.const 42609) "a") (data (i32.const 42612) "a") (data (i32.const 42615) "a") (data (i32.const 42618) "a") (data (i32.const 42621) "a") (data (i32.const 42624) "a") (data (i32.const 42627) "a") (data (i32.const 42630) "a") (data (i32.const 42633) "a") (data (i32.const 42636) "a") (data (i32.const 42639) "a") (data (i32.const 42642) "a") (data (i32.const 42645) "a") (data (i32.const 42648) "a") (data (i32.const 42651) "a") (data (i32.const 42654) "a") (data (i32.const 42657) "a") (data (i32.const 42660) "a") (data (i32.const 42663) "a") (data (i32.const 42666) "a") (data (i32.const 42669) "a") (data (i32.const 42672) "a") (data (i32.const 42675) "a") (data (i32.const 42678) "a") (data (i32.const 42681) "a") (data (i32.const 42684) "a") (data (i32.const 42687) "a") (data (i32.const 42690) "a") (data (i32.const 42693) "a") (data (i32.const 42696) "a") (data (i32.const 42699) "a") (data (i32.const 42702) "a") (data (i32.const 42705) "a") (data (i32.const 42708) "a") (data (i32.const 42711) "a") (data (i32.const 42714) "a") (data (i32.const 42717) "a") (data (i32.const 42720) "a") (data (i32.const 42723) "a") (data (i32.const 42726) "a") (data (i32.const 42729) "a") (data (i32.const 42732) "a") (data (i32.const 42735) "a") (data (i32.const 42738) "a") (data (i32.const 42741) "a") (data (i32.const 42744) "a") (data (i32.const 42747) "a") (data (i32.const 42750) "a") (data (i32.const 42753) "a") (data (i32.const 42756) "a") (data (i32.const 42759) "a") (data (i32.const 42762) "a") (data (i32.const 42765) "a") (data (i32.const 42768) "a") (data (i32.const 42771) "a") (data (i32.const 42774) "a") (data (i32.const 42777) "a") (data (i32.const 42780) "a") (data (i32.const 42783) "a") (data (i32.const 42786) "a") (data (i32.const 42789) "a") (data (i32.const 42792) "a") (data (i32.const 42795) "a") (data (i32.const 42798) "a") (data (i32.const 42801) "a") (data (i32.const 42804) "a") (data (i32.const 42807) "a") (data (i32.const 42810) "a") (data (i32.const 42813) "a") (data (i32.const 42816) "a") (data (i32.const 42819) "a") (data (i32.const 42822) "a") (data (i32.const 42825) "a") (data (i32.const 42828) "a") (data (i32.const 42831) "a") (data (i32.const 42834) "a") (data (i32.const 42837) "a") (data (i32.const 42840) "a") (data (i32.const 42843) "a") (data (i32.const 42846) "a") (data (i32.const 42849) "a") (data (i32.const 42852) "a") (data (i32.const 42855) "a") (data (i32.const 42858) "a") (data (i32.const 42861) "a") (data (i32.const 42864) "a") (data (i32.const 42867) "a") (data (i32.const 42870) "a") (data (i32.const 42873) "a") (data (i32.const 42876) "a") (data (i32.const 42879) "a") (data (i32.const 42882) "a") (data (i32.const 42885) "a") (data (i32.const 42888) "a") (data (i32.const 42891) "a") (data (i32.const 42894) "a") (data (i32.const 42897) "a") (data (i32.const 42900) "a") (data (i32.const 42903) "a") (data (i32.const 42906) "a") (data (i32.const 42909) "a") (data (i32.const 42912) "a") (data (i32.const 42915) "a") (data (i32.const 42918) "a") (data (i32.const 42921) "a") (data (i32.const 42924) "a") (data (i32.const 42927) "a") (data (i32.const 42930) "a") (data (i32.const 42933) "a") (data (i32.const 42936) "a") (data (i32.const 42939) "a") (data (i32.const 42942) "a") (data (i32.const 42945) "a") (data (i32.const 42948) "a") (data (i32.const 42951) "a") (data (i32.const 42954) "a") (data (i32.const 42957) "a") (data (i32.const 42960) "a") (data (i32.const 42963) "a") (data (i32.const 42966) "a") (data (i32.const 42969) "a") (data (i32.const 42972) "a") (data (i32.const 42975) "a") (data (i32.const 42978) "a") (data (i32.const 42981) "a") (data (i32.const 42984) "a") (data (i32.const 42987) "a") (data (i32.const 42990) "a") (data (i32.const 42993) "a") (data (i32.const 42996) "a") (data (i32.const 42999) "a") (data (i32.const 43002) "a") (data (i32.const 43005) "a") (data (i32.const 43008) "a") (data (i32.const 43011) "a") (data (i32.const 43014) "a") (data (i32.const 43017) "a") (data (i32.const 43020) "a") (data (i32.const 43023) "a") (data (i32.const 43026) "a") (data (i32.const 43029) "a") (data (i32.const 43032) "a") (data (i32.const 43035) "a") (data (i32.const 43038) "a") (data (i32.const 43041) "a") (data (i32.const 43044) "a") (data (i32.const 43047) "a") (data (i32.const 43050) "a") (data (i32.const 43053) "a") (data (i32.const 43056) "a") (data (i32.const 43059) "a") (data (i32.const 43062) "a") (data (i32.const 43065) "a") (data (i32.const 43068) "a") (data (i32.const 43071) "a") (data (i32.const 43074) "a") (data (i32.const 43077) "a") (data (i32.const 43080) "a") (data (i32.const 43083) "a") (data (i32.const 43086) "a") (data (i32.const 43089) "a") (data (i32.const 43092) "a") (data (i32.const 43095) "a") (data (i32.const 43098) "a") (data (i32.const 43101) "a") (data (i32.const 43104) "a") (data (i32.const 43107) "a") (data (i32.const 43110) "a") (data (i32.const 43113) "a") (data (i32.const 43116) "a") (data (i32.const 43119) "a") (data (i32.const 43122) "a") (data (i32.const 43125) "a") (data (i32.const 43128) "a") (data (i32.const 43131) "a") (data (i32.const 43134) "a") (data (i32.const 43137) "a") (data (i32.const 43140) "a") (data (i32.const 43143) "a") (data (i32.const 43146) "a") (data (i32.const 43149) "a") (data (i32.const 43152) "a") (data (i32.const 43155) "a") (data (i32.const 43158) "a") (data (i32.const 43161) "a") (data (i32.const 43164) "a") (data (i32.const 43167) "a") (data (i32.const 43170) "a") (data (i32.const 43173) "a") (data (i32.const 43176) "a") (data (i32.const 43179) "a") (data (i32.const 43182) "a") (data (i32.const 43185) "a") (data (i32.const 43188) "a") (data (i32.const 43191) "a") (data (i32.const 43194) "a") (data (i32.const 43197) "a") (data (i32.const 43200) "a") (data (i32.const 43203) "a") (data (i32.const 43206) "a") (data (i32.const 43209) "a") (data (i32.const 43212) "a") (data (i32.const 43215) "a") (data (i32.const 43218) "a") (data (i32.const 43221) "a") (data (i32.const 43224) "a") (data (i32.const 43227) "a") (data (i32.const 43230) "a") (data (i32.const 43233) "a") (data (i32.const 43236) "a") (data (i32.const 43239) "a") (data (i32.const 43242) "a") (data (i32.const 43245) "a") (data (i32.const 43248) "a") (data (i32.const 43251) "a") (data (i32.const 43254) "a") (data (i32.const 43257) "a") (data (i32.const 43260) "a") (data (i32.const 43263) "a") (data (i32.const 43266) "a") (data (i32.const 43269) "a") (data (i32.const 43272) "a") (data (i32.const 43275) "a") (data (i32.const 43278) "a") (data (i32.const 43281) "a") (data (i32.const 43284) "a") (data (i32.const 43287) "a") (data (i32.const 43290) "a") (data (i32.const 43293) "a") (data (i32.const 43296) "a") (data (i32.const 43299) "a") (data (i32.const 43302) "a") (data (i32.const 43305) "a") (data (i32.const 43308) "a") (data (i32.const 43311) "a") (data (i32.const 43314) "a") (data (i32.const 43317) "a") (data (i32.const 43320) "a") (data (i32.const 43323) "a") (data (i32.const 43326) "a") (data (i32.const 43329) "a") (data (i32.const 43332) "a") (data (i32.const 43335) "a") (data (i32.const 43338) "a") (data (i32.const 43341) "a") (data (i32.const 43344) "a") (data (i32.const 43347) "a") (data (i32.const 43350) "a") (data (i32.const 43353) "a") (data (i32.const 43356) "a") (data (i32.const 43359) "a") (data (i32.const 43362) "a") (data (i32.const 43365) "a") (data (i32.const 43368) "a") (data (i32.const 43371) "a") (data (i32.const 43374) "a") (data (i32.const 43377) "a") (data (i32.const 43380) "a") (data (i32.const 43383) "a") (data (i32.const 43386) "a") (data (i32.const 43389) "a") (data (i32.const 43392) "a") (data (i32.const 43395) "a") (data (i32.const 43398) "a") (data (i32.const 43401) "a") (data (i32.const 43404) "a") (data (i32.const 43407) "a") (data (i32.const 43410) "a") (data (i32.const 43413) "a") (data (i32.const 43416) "a") (data (i32.const 43419) "a") (data (i32.const 43422) "a") (data (i32.const 43425) "a") (data (i32.const 43428) "a") (data (i32.const 43431) "a") (data (i32.const 43434) "a") (data (i32.const 43437) "a") (data (i32.const 43440) "a") (data (i32.const 43443) "a") (data (i32.const 43446) "a") (data (i32.const 43449) "a") (data (i32.const 43452) "a") (data (i32.const 43455) "a") (data (i32.const 43458) "a") (data (i32.const 43461) "a") (data (i32.const 43464) "a") (data (i32.const 43467) "a") (data (i32.const 43470) "a") (data (i32.const 43473) "a") (data (i32.const 43476) "a") (data (i32.const 43479) "a") (data (i32.const 43482) "a") (data (i32.const 43485) "a") (data (i32.const 43488) "a") (data (i32.const 43491) "a") (data (i32.const 43494) "a") (data (i32.const 43497) "a") (data (i32.const 43500) "a") (data (i32.const 43503) "a") (data (i32.const 43506) "a") (data (i32.const 43509) "a") (data (i32.const 43512) "a") (data (i32.const 43515) "a") (data (i32.const 43518) "a") (data (i32.const 43521) "a") (data (i32.const 43524) "a") (data (i32.const 43527) "a") (data (i32.const 43530) "a") (data (i32.const 43533) "a") (data (i32.const 43536) "a") (data (i32.const 43539) "a") (data (i32.const 43542) "a") (data (i32.const 43545) "a") (data (i32.const 43548) "a") (data (i32.const 43551) "a") (data (i32.const 43554) "a") (data (i32.const 43557) "a") (data (i32.const 43560) "a") (data (i32.const 43563) "a") (data (i32.const 43566) "a") (data (i32.const 43569) "a") (data (i32.const 43572) "a") (data (i32.const 43575) "a") (data (i32.const 43578) "a") (data (i32.const 43581) "a") (data (i32.const 43584) "a") (data (i32.const 43587) "a") (data (i32.const 43590) "a") (data (i32.const 43593) "a") (data (i32.const 43596) "a") (data (i32.const 43599) "a") (data (i32.const 43602) "a") (data (i32.const 43605) "a") (data (i32.const 43608) "a") (data (i32.const 43611) "a") (data (i32.const 43614) "a") (data (i32.const 43617) "a") (data (i32.const 43620) "a") (data (i32.const 43623) "a") (data (i32.const 43626) "a") (data (i32.const 43629) "a") (data (i32.const 43632) "a") (data (i32.const 43635) "a") (data (i32.const 43638) "a") (data (i32.const 43641) "a") (data (i32.const 43644) "a") (data (i32.const 43647) "a") (data (i32.const 43650) "a") (data (i32.const 43653) "a") (data (i32.const 43656) "a") (data (i32.const 43659) "a") (data (i32.const 43662) "a") (data (i32.const 43665) "a") (data (i32.const 43668) "a") (data (i32.const 43671) "a") (data (i32.const 43674) "a") (data (i32.const 43677) "a") (data (i32.const 43680) "a") (data (i32.const 43683) "a") (data (i32.const 43686) "a") (data (i32.const 43689) "a") (data (i32.const 43692) "a") (data (i32.const 43695) "a") (data (i32.const 43698) "a") (data (i32.const 43701) "a") (data (i32.const 43704) "a") (data (i32.const 43707) "a") (data (i32.const 43710) "a") (data (i32.const 43713) "a") (data (i32.const 43716) "a") (data (i32.const 43719) "a") (data (i32.const 43722) "a") (data (i32.const 43725) "a") (data (i32.const 43728) "a") (data (i32.const 43731) "a") (data (i32.const 43734) "a") (data (i32.const 43737) "a") (data (i32.const 43740) "a") (data (i32.const 43743) "a") (data (i32.const 43746) "a") (data (i32.const 43749) "a") (data (i32.const 43752) "a") (data (i32.const 43755) "a") (data (i32.const 43758) "a") (data (i32.const 43761) "a") (data (i32.const 43764) "a") (data (i32.const 43767) "a") (data (i32.const 43770) "a") (data (i32.const 43773) "a") (data (i32.const 43776) "a") (data (i32.const 43779) "a") (data (i32.const 43782) "a") (data (i32.const 43785) "a") (data (i32.const 43788) "a") (data (i32.const 43791) "a") (data (i32.const 43794) "a") (data (i32.const 43797) "a") (data (i32.const 43800) "a") (data (i32.const 43803) "a") (data (i32.const 43806) "a") (data (i32.const 43809) "a") (data (i32.const 43812) "a") (data (i32.const 43815) "a") (data (i32.const 43818) "a") (data (i32.const 43821) "a") (data (i32.const 43824) "a") (data (i32.const 43827) "a") (data (i32.const 43830) "a") (data (i32.const 43833) "a") (data (i32.const 43836) "a") (data (i32.const 43839) "a") (data (i32.const 43842) "a") (data (i32.const 43845) "a") (data (i32.const 43848) "a") (data (i32.const 43851) "a") (data (i32.const 43854) "a") (data (i32.const 43857) "a") (data (i32.const 43860) "a") (data (i32.const 43863) "a") (data (i32.const 43866) "a") (data (i32.const 43869) "a") (data (i32.const 43872) "a") (data (i32.const 43875) "a") (data (i32.const 43878) "a") (data (i32.const 43881) "a") (data (i32.const 43884) "a") (data (i32.const 43887) "a") (data (i32.const 43890) "a") (data (i32.const 43893) "a") (data (i32.const 43896) "a") (data (i32.const 43899) "a") (data (i32.const 43902) "a") (data (i32.const 43905) "a") (data (i32.const 43908) "a") (data (i32.const 43911) "a") (data (i32.const 43914) "a") (data (i32.const 43917) "a") (data (i32.const 43920) "a") (data (i32.const 43923) "a") (data (i32.const 43926) "a") (data (i32.const 43929) "a") (data (i32.const 43932) "a") (data (i32.const 43935) "a") (data (i32.const 43938) "a") (data (i32.const 43941) "a") (data (i32.const 43944) "a") (data (i32.const 43947) "a") (data (i32.const 43950) "a") (data (i32.const 43953) "a") (data (i32.const 43956) "a") (data (i32.const 43959) "a") (data (i32.const 43962) "a") (data (i32.const 43965) "a") (data (i32.const 43968) "a") (data (i32.const 43971) "a") (data (i32.const 43974) "a") (data (i32.const 43977) "a") (data (i32.const 43980) "a") (data (i32.const 43983) "a") (data (i32.const 43986) "a") (data (i32.const 43989) "a") (data (i32.const 43992) "a") (data (i32.const 43995) "a") (data (i32.const 43998) "a") (data (i32.const 44001) "a") (data (i32.const 44004) "a") (data (i32.const 44007) "a") (data (i32.const 44010) "a") (data (i32.const 44013) "a") (data (i32.const 44016) "a") (data (i32.const 44019) "a") (data (i32.const 44022) "a") (data (i32.const 44025) "a") (data (i32.const 44028) "a") (data (i32.const 44031) "a") (data (i32.const 44034) "a") (data (i32.const 44037) "a") (data (i32.const 44040) "a") (data (i32.const 44043) "a") (data (i32.const 44046) "a") (data (i32.const 44049) "a") (data (i32.const 44052) "a") (data (i32.const 44055) "a") (data (i32.const 44058) "a") (data (i32.const 44061) "a") (data (i32.const 44064) "a") (data (i32.const 44067) "a") (data (i32.const 44070) "a") (data (i32.const 44073) "a") (data (i32.const 44076) "a") (data (i32.const 44079) "a") (data (i32.const 44082) "a") (data (i32.const 44085) "a") (data (i32.const 44088) "a") (data (i32.const 44091) "a") (data (i32.const 44094) "a") (data (i32.const 44097) "a") (data (i32.const 44100) "a") (data (i32.const 44103) "a") (data (i32.const 44106) "a") (data (i32.const 44109) "a") (data (i32.const 44112) "a") (data (i32.const 44115) "a") (data (i32.const 44118) "a") (data (i32.const 44121) "a") (data (i32.const 44124) "a") (data (i32.const 44127) "a") (data (i32.const 44130) "a") (data (i32.const 44133) "a") (data (i32.const 44136) "a") (data (i32.const 44139) "a") (data (i32.const 44142) "a") (data (i32.const 44145) "a") (data (i32.const 44148) "a") (data (i32.const 44151) "a") (data (i32.const 44154) "a") (data (i32.const 44157) "a") (data (i32.const 44160) "a") (data (i32.const 44163) "a") (data (i32.const 44166) "a") (data (i32.const 44169) "a") (data (i32.const 44172) "a") (data (i32.const 44175) "a") (data (i32.const 44178) "a") (data (i32.const 44181) "a") (data (i32.const 44184) "a") (data (i32.const 44187) "a") (data (i32.const 44190) "a") (data (i32.const 44193) "a") (data (i32.const 44196) "a") (data (i32.const 44199) "a") (data (i32.const 44202) "a") (data (i32.const 44205) "a") (data (i32.const 44208) "a") (data (i32.const 44211) "a") (data (i32.const 44214) "a") (data (i32.const 44217) "a") (data (i32.const 44220) "a") (data (i32.const 44223) "a") (data (i32.const 44226) "a") (data (i32.const 44229) "a") (data (i32.const 44232) "a") (data (i32.const 44235) "a") (data (i32.const 44238) "a") (data (i32.const 44241) "a") (data (i32.const 44244) "a") (data (i32.const 44247) "a") (data (i32.const 44250) "a") (data (i32.const 44253) "a") (data (i32.const 44256) "a") (data (i32.const 44259) "a") (data (i32.const 44262) "a") (data (i32.const 44265) "a") (data (i32.const 44268) "a") (data (i32.const 44271) "a") (data (i32.const 44274) "a") (data (i32.const 44277) "a") (data (i32.const 44280) "a") (data (i32.const 44283) "a") (data (i32.const 44286) "a") (data (i32.const 44289) "a") (data (i32.const 44292) "a") (data (i32.const 44295) "a") (data (i32.const 44298) "a") (data (i32.const 44301) "a") (data (i32.const 44304) "a") (data (i32.const 44307) "a") (data (i32.const 44310) "a") (data (i32.const 44313) "a") (data (i32.const 44316) "a") (data (i32.const 44319) "a") (data (i32.const 44322) "a") (data (i32.const 44325) "a") (data (i32.const 44328) "a") (data (i32.const 44331) "a") (data (i32.const 44334) "a") (data (i32.const 44337) "a") (data (i32.const 44340) "a") (data (i32.const 44343) "a") (data (i32.const 44346) "a") (data (i32.const 44349) "a") (data (i32.const 44352) "a") (data (i32.const 44355) "a") (data (i32.const 44358) "a") (data (i32.const 44361) "a") (data (i32.const 44364) "a") (data (i32.const 44367) "a") (data (i32.const 44370) "a") (data (i32.const 44373) "a") (data (i32.const 44376) "a") (data (i32.const 44379) "a") (data (i32.const 44382) "a") (data (i32.const 44385) "a") (data (i32.const 44388) "a") (data (i32.const 44391) "a") (data (i32.const 44394) "a") (data (i32.const 44397) "a") (data (i32.const 44400) "a") (data (i32.const 44403) "a") (data (i32.const 44406) "a") (data (i32.const 44409) "a") (data (i32.const 44412) "a") (data (i32.const 44415) "a") (data (i32.const 44418) "a") (data (i32.const 44421) "a") (data (i32.const 44424) "a") (data (i32.const 44427) "a") (data (i32.const 44430) "a") (data (i32.const 44433) "a") (data (i32.const 44436) "a") (data (i32.const 44439) "a") (data (i32.const 44442) "a") (data (i32.const 44445) "a") (data (i32.const 44448) "a") (data (i32.const 44451) "a") (data (i32.const 44454) "a") (data (i32.const 44457) "a") (data (i32.const 44460) "a") (data (i32.const 44463) "a") (data (i32.const 44466) "a") (data (i32.const 44469) "a") (data (i32.const 44472) "a") (data (i32.const 44475) "a") (data (i32.const 44478) "a") (data (i32.const 44481) "a") (data (i32.const 44484) "a") (data (i32.const 44487) "a") (data (i32.const 44490) "a") (data (i32.const 44493) "a") (data (i32.const 44496) "a") (data (i32.const 44499) "a") (data (i32.const 44502) "a") (data (i32.const 44505) "a") (data (i32.const 44508) "a") (data (i32.const 44511) "a") (data (i32.const 44514) "a") (data (i32.const 44517) "a") (data (i32.const 44520) "a") (data (i32.const 44523) "a") (data (i32.const 44526) "a") (data (i32.const 44529) "a") (data (i32.const 44532) "a") (data (i32.const 44535) "a") (data (i32.const 44538) "a") (data (i32.const 44541) "a") (data (i32.const 44544) "a") (data (i32.const 44547) "a") (data (i32.const 44550) "a") (data (i32.const 44553) "a") (data (i32.const 44556) "a") (data (i32.const 44559) "a") (data (i32.const 44562) "a") (data (i32.const 44565) "a") (data (i32.const 44568) "a") (data (i32.const 44571) "a") (data (i32.const 44574) "a") (data (i32.const 44577) "a") (data (i32.const 44580) "a") (data (i32.const 44583) "a") (data (i32.const 44586) "a") (data (i32.const 44589) "a") (data (i32.const 44592) "a") (data (i32.const 44595) "a") (data (i32.const 44598) "a") (data (i32.const 44601) "a") (data (i32.const 44604) "a") (data (i32.const 44607) "a") (data (i32.const 44610) "a") (data (i32.const 44613) "a") (data (i32.const 44616) "a") (data (i32.const 44619) "a") (data (i32.const 44622) "a") (data (i32.const 44625) "a") (data (i32.const 44628) "a") (data (i32.const 44631) "a") (data (i32.const 44634) "a") (data (i32.const 44637) "a") (data (i32.const 44640) "a") (data (i32.const 44643) "a") (data (i32.const 44646) "a") (data (i32.const 44649) "a") (data (i32.const 44652) "a") (data (i32.const 44655) "a") (data (i32.const 44658) "a") (data (i32.const 44661) "a") (data (i32.const 44664) "a") (data (i32.const 44667) "a") (data (i32.const 44670) "a") (data (i32.const 44673) "a") (data (i32.const 44676) "a") (data (i32.const 44679) "a") (data (i32.const 44682) "a") (data (i32.const 44685) "a") (data (i32.const 44688) "a") (data (i32.const 44691) "a") (data (i32.const 44694) "a") (data (i32.const 44697) "a") (data (i32.const 44700) "a") (data (i32.const 44703) "a") (data (i32.const 44706) "a") (data (i32.const 44709) "a") (data (i32.const 44712) "a") (data (i32.const 44715) "a") (data (i32.const 44718) "a") (data (i32.const 44721) "a") (data (i32.const 44724) "a") (data (i32.const 44727) "a") (data (i32.const 44730) "a") (data (i32.const 44733) "a") (data (i32.const 44736) "a") (data (i32.const 44739) "a") (data (i32.const 44742) "a") (data (i32.const 44745) "a") (data (i32.const 44748) "a") (data (i32.const 44751) "a") (data (i32.const 44754) "a") (data (i32.const 44757) "a") (data (i32.const 44760) "a") (data (i32.const 44763) "a") (data (i32.const 44766) "a") (data (i32.const 44769) "a") (data (i32.const 44772) "a") (data (i32.const 44775) "a") (data (i32.const 44778) "a") (data (i32.const 44781) "a") (data (i32.const 44784) "a") (data (i32.const 44787) "a") (data (i32.const 44790) "a") (data (i32.const 44793) "a") (data (i32.const 44796) "a") (data (i32.const 44799) "a") (data (i32.const 44802) "a") (data (i32.const 44805) "a") (data (i32.const 44808) "a") (data (i32.const 44811) "a") (data (i32.const 44814) "a") (data (i32.const 44817) "a") (data (i32.const 44820) "a") (data (i32.const 44823) "a") (data (i32.const 44826) "a") (data (i32.const 44829) "a") (data (i32.const 44832) "a") (data (i32.const 44835) "a") (data (i32.const 44838) "a") (data (i32.const 44841) "a") (data (i32.const 44844) "a") (data (i32.const 44847) "a") (data (i32.const 44850) "a") (data (i32.const 44853) "a") (data (i32.const 44856) "a") (data (i32.const 44859) "a") (data (i32.const 44862) "a") (data (i32.const 44865) "a") (data (i32.const 44868) "a") (data (i32.const 44871) "a") (data (i32.const 44874) "a") (data (i32.const 44877) "a") (data (i32.const 44880) "a") (data (i32.const 44883) "a") (data (i32.const 44886) "a") (data (i32.const 44889) "a") (data (i32.const 44892) "a") (data (i32.const 44895) "a") (data (i32.const 44898) "a") (data (i32.const 44901) "a") (data (i32.const 44904) "a") (data (i32.const 44907) "a") (data (i32.const 44910) "a") (data (i32.const 44913) "a") (data (i32.const 44916) "a") (data (i32.const 44919) "a") (data (i32.const 44922) "a") (data (i32.const 44925) "a") (data (i32.const 44928) "a") (data (i32.const 44931) "a") (data (i32.const 44934) "a") (data (i32.const 44937) "a") (data (i32.const 44940) "a") (data (i32.const 44943) "a") (data (i32.const 44946) "a") (data (i32.const 44949) "a") (data (i32.const 44952) "a") (data (i32.const 44955) "a") (data (i32.const 44958) "a") (data (i32.const 44961) "a") (data (i32.const 44964) "a") (data (i32.const 44967) "a") (data (i32.const 44970) "a") (data (i32.const 44973) "a") (data (i32.const 44976) "a") (data (i32.const 44979) "a") (data (i32.const 44982) "a") (data (i32.const 44985) "a") (data (i32.const 44988) "a") (data (i32.const 44991) "a") (data (i32.const 44994) "a") (data (i32.const 44997) "a") (data (i32.const 45000) "a") (data (i32.const 45003) "a") (data (i32.const 45006) "a") (data (i32.const 45009) "a") (data (i32.const 45012) "a") (data (i32.const 45015) "a") (data (i32.const 45018) "a") (data (i32.const 45021) "a") (data (i32.const 45024) "a") (data (i32.const 45027) "a") (data (i32.const 45030) "a") (data (i32.const 45033) "a") (data (i32.const 45036) "a") (data (i32.const 45039) "a") (data (i32.const 45042) "a") (data (i32.const 45045) "a") (data (i32.const 45048) "a") (data (i32.const 45051) "a") (data (i32.const 45054) "a") (data (i32.const 45057) "a") (data (i32.const 45060) "a") (data (i32.const 45063) "a") (data (i32.const 45066) "a") (data (i32.const 45069) "a") (data (i32.const 45072) "a") (data (i32.const 45075) "a") (data (i32.const 45078) "a") (data (i32.const 45081) "a") (data (i32.const 45084) "a") (data (i32.const 45087) "a") (data (i32.const 45090) "a") (data (i32.const 45093) "a") (data (i32.const 45096) "a") (data (i32.const 45099) "a") (data (i32.const 45102) "a") (data (i32.const 45105) "a") (data (i32.const 45108) "a") (data (i32.const 45111) "a") (data (i32.const 45114) "a") (data (i32.const 45117) "a") (data (i32.const 45120) "a") (data (i32.const 45123) "a") (data (i32.const 45126) "a") (data (i32.const 45129) "a") (data (i32.const 45132) "a") (data (i32.const 45135) "a") (data (i32.const 45138) "a") (data (i32.const 45141) "a") (data (i32.const 45144) "a") (data (i32.const 45147) "a") (data (i32.const 45150) "a") (data (i32.const 45153) "a") (data (i32.const 45156) "a") (data (i32.const 45159) "a") (data (i32.const 45162) "a") (data (i32.const 45165) "a") (data (i32.const 45168) "a") (data (i32.const 45171) "a") (data (i32.const 45174) "a") (data (i32.const 45177) "a") (data (i32.const 45180) "a") (data (i32.const 45183) "a") (data (i32.const 45186) "a") (data (i32.const 45189) "a") (data (i32.const 45192) "a") (data (i32.const 45195) "a") (data (i32.const 45198) "a") (data (i32.const 45201) "a") (data (i32.const 45204) "a") (data (i32.const 45207) "a") (data (i32.const 45210) "a") (data (i32.const 45213) "a") (data (i32.const 45216) "a") (data (i32.const 45219) "a") (data (i32.const 45222) "a") (data (i32.const 45225) "a") (data (i32.const 45228) "a") (data (i32.const 45231) "a") (data (i32.const 45234) "a") (data (i32.const 45237) "a") (data (i32.const 45240) "a") (data (i32.const 45243) "a") (data (i32.const 45246) "a") (data (i32.const 45249) "a") (data (i32.const 45252) "a") (data (i32.const 45255) "a") (data (i32.const 45258) "a") (data (i32.const 45261) "a") (data (i32.const 45264) "a") (data (i32.const 45267) "a") (data (i32.const 45270) "a") (data (i32.const 45273) "a") (data (i32.const 45276) "a") (data (i32.const 45279) "a") (data (i32.const 45282) "a") (data (i32.const 45285) "a") (data (i32.const 45288) "a") (data (i32.const 45291) "a") (data (i32.const 45294) "a") (data (i32.const 45297) "a") (data (i32.const 45300) "a") (data (i32.const 45303) "a") (data (i32.const 45306) "a") (data (i32.const 45309) "a") (data (i32.const 45312) "a") (data (i32.const 45315) "a") (data (i32.const 45318) "a") (data (i32.const 45321) "a") (data (i32.const 45324) "a") (data (i32.const 45327) "a") (data (i32.const 45330) "a") (data (i32.const 45333) "a") (data (i32.const 45336) "a") (data (i32.const 45339) "a") (data (i32.const 45342) "a") (data (i32.const 45345) "a") (data (i32.const 45348) "a") (data (i32.const 45351) "a") (data (i32.const 45354) "a") (data (i32.const 45357) "a") (data (i32.const 45360) "a") (data (i32.const 45363) "a") (data (i32.const 45366) "a") (data (i32.const 45369) "a") (data (i32.const 45372) "a") (data (i32.const 45375) "a") (data (i32.const 45378) "a") (data (i32.const 45381) "a") (data (i32.const 45384) "a") (data (i32.const 45387) "a") (data (i32.const 45390) "a") (data (i32.const 45393) "a") (data (i32.const 45396) "a") (data (i32.const 45399) "a") (data (i32.const 45402) "a") (data (i32.const 45405) "a") (data (i32.const 45408) "a") (data (i32.const 45411) "a") (data (i32.const 45414) "a") (data (i32.const 45417) "a") (data (i32.const 45420) "a") (data (i32.const 45423) "a") (data (i32.const 45426) "a") (data (i32.const 45429) "a") (data (i32.const 45432) "a") (data (i32.const 45435) "a") (data (i32.const 45438) "a") (data (i32.const 45441) "a") (data (i32.const 45444) "a") (data (i32.const 45447) "a") (data (i32.const 45450) "a") (data (i32.const 45453) "a") (data (i32.const 45456) "a") (data (i32.const 45459) "a") (data (i32.const 45462) "a") (data (i32.const 45465) "a") (data (i32.const 45468) "a") (data (i32.const 45471) "a") (data (i32.const 45474) "a") (data (i32.const 45477) "a") (data (i32.const 45480) "a") (data (i32.const 45483) "a") (data (i32.const 45486) "a") (data (i32.const 45489) "a") (data (i32.const 45492) "a") (data (i32.const 45495) "a") (data (i32.const 45498) "a") (data (i32.const 45501) "a") (data (i32.const 45504) "a") (data (i32.const 45507) "a") (data (i32.const 45510) "a") (data (i32.const 45513) "a") (data (i32.const 45516) "a") (data (i32.const 45519) "a") (data (i32.const 45522) "a") (data (i32.const 45525) "a") (data (i32.const 45528) "a") (data (i32.const 45531) "a") (data (i32.const 45534) "a") (data (i32.const 45537) "a") (data (i32.const 45540) "a") (data (i32.const 45543) "a") (data (i32.const 45546) "a") (data (i32.const 45549) "a") (data (i32.const 45552) "a") (data (i32.const 45555) "a") (data (i32.const 45558) "a") (data (i32.const 45561) "a") (data (i32.const 45564) "a") (data (i32.const 45567) "a") (data (i32.const 45570) "a") (data (i32.const 45573) "a") (data (i32.const 45576) "a") (data (i32.const 45579) "a") (data (i32.const 45582) "a") (data (i32.const 45585) "a") (data (i32.const 45588) "a") (data (i32.const 45591) "a") (data (i32.const 45594) "a") (data (i32.const 45597) "a") (data (i32.const 45600) "a") (data (i32.const 45603) "a") (data (i32.const 45606) "a") (data (i32.const 45609) "a") (data (i32.const 45612) "a") (data (i32.const 45615) "a") (data (i32.const 45618) "a") (data (i32.const 45621) "a") (data (i32.const 45624) "a") (data (i32.const 45627) "a") (data (i32.const 45630) "a") (data (i32.const 45633) "a") (data (i32.const 45636) "a") (data (i32.const 45639) "a") (data (i32.const 45642) "a") (data (i32.const 45645) "a") (data (i32.const 45648) "a") (data (i32.const 45651) "a") (data (i32.const 45654) "a") (data (i32.const 45657) "a") (data (i32.const 45660) "a") (data (i32.const 45663) "a") (data (i32.const 45666) "a") (data (i32.const 45669) "a") (data (i32.const 45672) "a") (data (i32.const 45675) "a") (data (i32.const 45678) "a") (data (i32.const 45681) "a") (data (i32.const 45684) "a") (data (i32.const 45687) "a") (data (i32.const 45690) "a") (data (i32.const 45693) "a") (data (i32.const 45696) "a") (data (i32.const 45699) "a") (data (i32.const 45702) "a") (data (i32.const 45705) "a") (data (i32.const 45708) "a") (data (i32.const 45711) "a") (data (i32.const 45714) "a") (data (i32.const 45717) "a") (data (i32.const 45720) "a") (data (i32.const 45723) "a") (data (i32.const 45726) "a") (data (i32.const 45729) "a") (data (i32.const 45732) "a") (data (i32.const 45735) "a") (data (i32.const 45738) "a") (data (i32.const 45741) "a") (data (i32.const 45744) "a") (data (i32.const 45747) "a") (data (i32.const 45750) "a") (data (i32.const 45753) "a") (data (i32.const 45756) "a") (data (i32.const 45759) "a") (data (i32.const 45762) "a") (data (i32.const 45765) "a") (data (i32.const 45768) "a") (data (i32.const 45771) "a") (data (i32.const 45774) "a") (data (i32.const 45777) "a") (data (i32.const 45780) "a") (data (i32.const 45783) "a") (data (i32.const 45786) "a") (data (i32.const 45789) "a") (data (i32.const 45792) "a") (data (i32.const 45795) "a") (data (i32.const 45798) "a") (data (i32.const 45801) "a") (data (i32.const 45804) "a") (data (i32.const 45807) "a") (data (i32.const 45810) "a") (data (i32.const 45813) "a") (data (i32.const 45816) "a") (data (i32.const 45819) "a") (data (i32.const 45822) "a") (data (i32.const 45825) "a") (data (i32.const 45828) "a") (data (i32.const 45831) "a") (data (i32.const 45834) "a") (data (i32.const 45837) "a") (data (i32.const 45840) "a") (data (i32.const 45843) "a") (data (i32.const 45846) "a") (data (i32.const 45849) "a") (data (i32.const 45852) "a") (data (i32.const 45855) "a") (data (i32.const 45858) "a") (data (i32.const 45861) "a") (data (i32.const 45864) "a") (data (i32.const 45867) "a") (data (i32.const 45870) "a") (data (i32.const 45873) "a") (data (i32.const 45876) "a") (data (i32.const 45879) "a") (data (i32.const 45882) "a") (data (i32.const 45885) "a") (data (i32.const 45888) "a") (data (i32.const 45891) "a") (data (i32.const 45894) "a") (data (i32.const 45897) "a") (data (i32.const 45900) "a") (data (i32.const 45903) "a") (data (i32.const 45906) "a") (data (i32.const 45909) "a") (data (i32.const 45912) "a") (data (i32.const 45915) "a") (data (i32.const 45918) "a") (data (i32.const 45921) "a") (data (i32.const 45924) "a") (data (i32.const 45927) "a") (data (i32.const 45930) "a") (data (i32.const 45933) "a") (data (i32.const 45936) "a") (data (i32.const 45939) "a") (data (i32.const 45942) "a") (data (i32.const 45945) "a") (data (i32.const 45948) "a") (data (i32.const 45951) "a") (data (i32.const 45954) "a") (data (i32.const 45957) "a") (data (i32.const 45960) "a") (data (i32.const 45963) "a") (data (i32.const 45966) "a") (data (i32.const 45969) "a") (data (i32.const 45972) "a") (data (i32.const 45975) "a") (data (i32.const 45978) "a") (data (i32.const 45981) "a") (data (i32.const 45984) "a") (data (i32.const 45987) "a") (data (i32.const 45990) "a") (data (i32.const 45993) "a") (data (i32.const 45996) "a") (data (i32.const 45999) "a") (data (i32.const 46002) "a") (data (i32.const 46005) "a") (data (i32.const 46008) "a") (data (i32.const 46011) "a") (data (i32.const 46014) "a") (data (i32.const 46017) "a") (data (i32.const 46020) "a") (data (i32.const 46023) "a") (data (i32.const 46026) "a") (data (i32.const 46029) "a") (data (i32.const 46032) "a") (data (i32.const 46035) "a") (data (i32.const 46038) "a") (data (i32.const 46041) "a") (data (i32.const 46044) "a") (data (i32.const 46047) "a") (data (i32.const 46050) "a") (data (i32.const 46053) "a") (data (i32.const 46056) "a") (data (i32.const 46059) "a") (data (i32.const 46062) "a") (data (i32.const 46065) "a") (data (i32.const 46068) "a") (data (i32.const 46071) "a") (data (i32.const 46074) "a") (data (i32.const 46077) "a") (data (i32.const 46080) "a") (data (i32.const 46083) "a") (data (i32.const 46086) "a") (data (i32.const 46089) "a") (data (i32.const 46092) "a") (data (i32.const 46095) "a") (data (i32.const 46098) "a") (data (i32.const 46101) "a") (data (i32.const 46104) "a") (data (i32.const 46107) "a") (data (i32.const 46110) "a") (data (i32.const 46113) "a") (data (i32.const 46116) "a") (data (i32.const 46119) "a") (data (i32.const 46122) "a") (data (i32.const 46125) "a") (data (i32.const 46128) "a") (data (i32.const 46131) "a") (data (i32.const 46134) "a") (data (i32.const 46137) "a") (data (i32.const 46140) "a") (data (i32.const 46143) "a") (data (i32.const 46146) "a") (data (i32.const 46149) "a") (data (i32.const 46152) "a") (data (i32.const 46155) "a") (data (i32.const 46158) "a") (data (i32.const 46161) "a") (data (i32.const 46164) "a") (data (i32.const 46167) "a") (data (i32.const 46170) "a") (data (i32.const 46173) "a") (data (i32.const 46176) "a") (data (i32.const 46179) "a") (data (i32.const 46182) "a") (data (i32.const 46185) "a") (data (i32.const 46188) "a") (data (i32.const 46191) "a") (data (i32.const 46194) "a") (data (i32.const 46197) "a") (data (i32.const 46200) "a") (data (i32.const 46203) "a") (data (i32.const 46206) "a") (data (i32.const 46209) "a") (data (i32.const 46212) "a") (data (i32.const 46215) "a") (data (i32.const 46218) "a") (data (i32.const 46221) "a") (data (i32.const 46224) "a") (data (i32.const 46227) "a") (data (i32.const 46230) "a") (data (i32.const 46233) "a") (data (i32.const 46236) "a") (data (i32.const 46239) "a") (data (i32.const 46242) "a") (data (i32.const 46245) "a") (data (i32.const 46248) "a") (data (i32.const 46251) "a") (data (i32.const 46254) "a") (data (i32.const 46257) "a") (data (i32.const 46260) "a") (data (i32.const 46263) "a") (data (i32.const 46266) "a") (data (i32.const 46269) "a") (data (i32.const 46272) "a") (data (i32.const 46275) "a") (data (i32.const 46278) "a") (data (i32.const 46281) "a") (data (i32.const 46284) "a") (data (i32.const 46287) "a") (data (i32.const 46290) "a") (data (i32.const 46293) "a") (data (i32.const 46296) "a") (data (i32.const 46299) "a") (data (i32.const 46302) "a") (data (i32.const 46305) "a") (data (i32.const 46308) "a") (data (i32.const 46311) "a") (data (i32.const 46314) "a") (data (i32.const 46317) "a") (data (i32.const 46320) "a") (data (i32.const 46323) "a") (data (i32.const 46326) "a") (data (i32.const 46329) "a") (data (i32.const 46332) "a") (data (i32.const 46335) "a") (data (i32.const 46338) "a") (data (i32.const 46341) "a") (data (i32.const 46344) "a") (data (i32.const 46347) "a") (data (i32.const 46350) "a") (data (i32.const 46353) "a") (data (i32.const 46356) "a") (data (i32.const 46359) "a") (data (i32.const 46362) "a") (data (i32.const 46365) "a") (data (i32.const 46368) "a") (data (i32.const 46371) "a") (data (i32.const 46374) "a") (data (i32.const 46377) "a") (data (i32.const 46380) "a") (data (i32.const 46383) "a") (data (i32.const 46386) "a") (data (i32.const 46389) "a") (data (i32.const 46392) "a") (data (i32.const 46395) "a") (data (i32.const 46398) "a") (data (i32.const 46401) "a") (data (i32.const 46404) "a") (data (i32.const 46407) "a") (data (i32.const 46410) "a") (data (i32.const 46413) "a") (data (i32.const 46416) "a") (data (i32.const 46419) "a") (data (i32.const 46422) "a") (data (i32.const 46425) "a") (data (i32.const 46428) "a") (data (i32.const 46431) "a") (data (i32.const 46434) "a") (data (i32.const 46437) "a") (data (i32.const 46440) "a") (data (i32.const 46443) "a") (data (i32.const 46446) "a") (data (i32.const 46449) "a") (data (i32.const 46452) "a") (data (i32.const 46455) "a") (data (i32.const 46458) "a") (data (i32.const 46461) "a") (data (i32.const 46464) "a") (data (i32.const 46467) "a") (data (i32.const 46470) "a") (data (i32.const 46473) "a") (data (i32.const 46476) "a") (data (i32.const 46479) "a") (data (i32.const 46482) "a") (data (i32.const 46485) "a") (data (i32.const 46488) "a") (data (i32.const 46491) "a") (data (i32.const 46494) "a") (data (i32.const 46497) "a") (data (i32.const 46500) "a") (data (i32.const 46503) "a") (data (i32.const 46506) "a") (data (i32.const 46509) "a") (data (i32.const 46512) "a") (data (i32.const 46515) "a") (data (i32.const 46518) "a") (data (i32.const 46521) "a") (data (i32.const 46524) "a") (data (i32.const 46527) "a") (data (i32.const 46530) "a") (data (i32.const 46533) "a") (data (i32.const 46536) "a") (data (i32.const 46539) "a") (data (i32.const 46542) "a") (data (i32.const 46545) "a") (data (i32.const 46548) "a") (data (i32.const 46551) "a") (data (i32.const 46554) "a") (data (i32.const 46557) "a") (data (i32.const 46560) "a") (data (i32.const 46563) "a") (data (i32.const 46566) "a") (data (i32.const 46569) "a") (data (i32.const 46572) "a") (data (i32.const 46575) "a") (data (i32.const 46578) "a") (data (i32.const 46581) "a") (data (i32.const 46584) "a") (data (i32.const 46587) "a") (data (i32.const 46590) "a") (data (i32.const 46593) "a") (data (i32.const 46596) "a") (data (i32.const 46599) "a") (data (i32.const 46602) "a") (data (i32.const 46605) "a") (data (i32.const 46608) "a") (data (i32.const 46611) "a") (data (i32.const 46614) "a") (data (i32.const 46617) "a") (data (i32.const 46620) "a") (data (i32.const 46623) "a") (data (i32.const 46626) "a") (data (i32.const 46629) "a") (data (i32.const 46632) "a") (data (i32.const 46635) "a") (data (i32.const 46638) "a") (data (i32.const 46641) "a") (data (i32.const 46644) "a") (data (i32.const 46647) "a") (data (i32.const 46650) "a") (data (i32.const 46653) "a") (data (i32.const 46656) "a") (data (i32.const 46659) "a") (data (i32.const 46662) "a") (data (i32.const 46665) "a") (data (i32.const 46668) "a") (data (i32.const 46671) "a") (data (i32.const 46674) "a") (data (i32.const 46677) "a") (data (i32.const 46680) "a") (data (i32.const 46683) "a") (data (i32.const 46686) "a") (data (i32.const 46689) "a") (data (i32.const 46692) "a") (data (i32.const 46695) "a") (data (i32.const 46698) "a") (data (i32.const 46701) "a") (data (i32.const 46704) "a") (data (i32.const 46707) "a") (data (i32.const 46710) "a") (data (i32.const 46713) "a") (data (i32.const 46716) "a") (data (i32.const 46719) "a") (data (i32.const 46722) "a") (data (i32.const 46725) "a") (data (i32.const 46728) "a") (data (i32.const 46731) "a") (data (i32.const 46734) "a") (data (i32.const 46737) "a") (data (i32.const 46740) "a") (data (i32.const 46743) "a") (data (i32.const 46746) "a") (data (i32.const 46749) "a") (data (i32.const 46752) "a") (data (i32.const 46755) "a") (data (i32.const 46758) "a") (data (i32.const 46761) "a") (data (i32.const 46764) "a") (data (i32.const 46767) "a") (data (i32.const 46770) "a") (data (i32.const 46773) "a") (data (i32.const 46776) "a") (data (i32.const 46779) "a") (data (i32.const 46782) "a") (data (i32.const 46785) "a") (data (i32.const 46788) "a") (data (i32.const 46791) "a") (data (i32.const 46794) "a") (data (i32.const 46797) "a") (data (i32.const 46800) "a") (data (i32.const 46803) "a") (data (i32.const 46806) "a") (data (i32.const 46809) "a") (data (i32.const 46812) "a") (data (i32.const 46815) "a") (data (i32.const 46818) "a") (data (i32.const 46821) "a") (data (i32.const 46824) "a") (data (i32.const 46827) "a") (data (i32.const 46830) "a") (data (i32.const 46833) "a") (data (i32.const 46836) "a") (data (i32.const 46839) "a") (data (i32.const 46842) "a") (data (i32.const 46845) "a") (data (i32.const 46848) "a") (data (i32.const 46851) "a") (data (i32.const 46854) "a") (data (i32.const 46857) "a") (data (i32.const 46860) "a") (data (i32.const 46863) "a") (data (i32.const 46866) "a") (data (i32.const 46869) "a") (data (i32.const 46872) "a") (data (i32.const 46875) "a") (data (i32.const 46878) "a") (data (i32.const 46881) "a") (data (i32.const 46884) "a") (data (i32.const 46887) "a") (data (i32.const 46890) "a") (data (i32.const 46893) "a") (data (i32.const 46896) "a") (data (i32.const 46899) "a") (data (i32.const 46902) "a") (data (i32.const 46905) "a") (data (i32.const 46908) "a") (data (i32.const 46911) "a") (data (i32.const 46914) "a") (data (i32.const 46917) "a") (data (i32.const 46920) "a") (data (i32.const 46923) "a") (data (i32.const 46926) "a") (data (i32.const 46929) "a") (data (i32.const 46932) "a") (data (i32.const 46935) "a") (data (i32.const 46938) "a") (data (i32.const 46941) "a") (data (i32.const 46944) "a") (data (i32.const 46947) "a") (data (i32.const 46950) "a") (data (i32.const 46953) "a") (data (i32.const 46956) "a") (data (i32.const 46959) "a") (data (i32.const 46962) "a") (data (i32.const 46965) "a") (data (i32.const 46968) "a") (data (i32.const 46971) "a") (data (i32.const 46974) "a") (data (i32.const 46977) "a") (data (i32.const 46980) "a") (data (i32.const 46983) "a") (data (i32.const 46986) "a") (data (i32.const 46989) "a") (data (i32.const 46992) "a") (data (i32.const 46995) "a") (data (i32.const 46998) "a") (data (i32.const 47001) "a") (data (i32.const 47004) "a") (data (i32.const 47007) "a") (data (i32.const 47010) "a") (data (i32.const 47013) "a") (data (i32.const 47016) "a") (data (i32.const 47019) "a") (data (i32.const 47022) "a") (data (i32.const 47025) "a") (data (i32.const 47028) "a") (data (i32.const 47031) "a") (data (i32.const 47034) "a") (data (i32.const 47037) "a") (data (i32.const 47040) "a") (data (i32.const 47043) "a") (data (i32.const 47046) "a") (data (i32.const 47049) "a") (data (i32.const 47052) "a") (data (i32.const 47055) "a") (data (i32.const 47058) "a") (data (i32.const 47061) "a") (data (i32.const 47064) "a") (data (i32.const 47067) "a") (data (i32.const 47070) "a") (data (i32.const 47073) "a") (data (i32.const 47076) "a") (data (i32.const 47079) "a") (data (i32.const 47082) "a") (data (i32.const 47085) "a") (data (i32.const 47088) "a") (data (i32.const 47091) "a") (data (i32.const 47094) "a") (data (i32.const 47097) "a") (data (i32.const 47100) "a") (data (i32.const 47103) "a") (data (i32.const 47106) "a") (data (i32.const 47109) "a") (data (i32.const 47112) "a") (data (i32.const 47115) "a") (data (i32.const 47118) "a") (data (i32.const 47121) "a") (data (i32.const 47124) "a") (data (i32.const 47127) "a") (data (i32.const 47130) "a") (data (i32.const 47133) "a") (data (i32.const 47136) "a") (data (i32.const 47139) "a") (data (i32.const 47142) "a") (data (i32.const 47145) "a") (data (i32.const 47148) "a") (data (i32.const 47151) "a") (data (i32.const 47154) "a") (data (i32.const 47157) "a") (data (i32.const 47160) "a") (data (i32.const 47163) "a") (data (i32.const 47166) "a") (data (i32.const 47169) "a") (data (i32.const 47172) "a") (data (i32.const 47175) "a") (data (i32.const 47178) "a") (data (i32.const 47181) "a") (data (i32.const 47184) "a") (data (i32.const 47187) "a") (data (i32.const 47190) "a") (data (i32.const 47193) "a") (data (i32.const 47196) "a") (data (i32.const 47199) "a") (data (i32.const 47202) "a") (data (i32.const 47205) "a") (data (i32.const 47208) "a") (data (i32.const 47211) "a") (data (i32.const 47214) "a") (data (i32.const 47217) "a") (data (i32.const 47220) "a") (data (i32.const 47223) "a") (data (i32.const 47226) "a") (data (i32.const 47229) "a") (data (i32.const 47232) "a") (data (i32.const 47235) "a") (data (i32.const 47238) "a") (data (i32.const 47241) "a") (data (i32.const 47244) "a") (data (i32.const 47247) "a") (data (i32.const 47250) "a") (data (i32.const 47253) "a") (data (i32.const 47256) "a") (data (i32.const 47259) "a") (data (i32.const 47262) "a") (data (i32.const 47265) "a") (data (i32.const 47268) "a") (data (i32.const 47271) "a") (data (i32.const 47274) "a") (data (i32.const 47277) "a") (data (i32.const 47280) "a") (data (i32.const 47283) "a") (data (i32.const 47286) "a") (data (i32.const 47289) "a") (data (i32.const 47292) "a") (data (i32.const 47295) "a") (data (i32.const 47298) "a") (data (i32.const 47301) "a") (data (i32.const 47304) "a") (data (i32.const 47307) "a") (data (i32.const 47310) "a") (data (i32.const 47313) "a") (data (i32.const 47316) "a") (data (i32.const 47319) "a") (data (i32.const 47322) "a") (data (i32.const 47325) "a") (data (i32.const 47328) "a") (data (i32.const 47331) "a") (data (i32.const 47334) "a") (data (i32.const 47337) "a") (data (i32.const 47340) "a") (data (i32.const 47343) "a") (data (i32.const 47346) "a") (data (i32.const 47349) "a") (data (i32.const 47352) "a") (data (i32.const 47355) "a") (data (i32.const 47358) "a") (data (i32.const 47361) "a") (data (i32.const 47364) "a") (data (i32.const 47367) "a") (data (i32.const 47370) "a") (data (i32.const 47373) "a") (data (i32.const 47376) "a") (data (i32.const 47379) "a") (data (i32.const 47382) "a") (data (i32.const 47385) "a") (data (i32.const 47388) "a") (data (i32.const 47391) "a") (data (i32.const 47394) "a") (data (i32.const 47397) "a") (data (i32.const 47400) "a") (data (i32.const 47403) "a") (data (i32.const 47406) "a") (data (i32.const 47409) "a") (data (i32.const 47412) "a") (data (i32.const 47415) "a") (data (i32.const 47418) "a") (data (i32.const 47421) "a") (data (i32.const 47424) "a") (data (i32.const 47427) "a") (data (i32.const 47430) "a") (data (i32.const 47433) "a") (data (i32.const 47436) "a") (data (i32.const 47439) "a") (data (i32.const 47442) "a") (data (i32.const 47445) "a") (data (i32.const 47448) "a") (data (i32.const 47451) "a") (data (i32.const 47454) "a") (data (i32.const 47457) "a") (data (i32.const 47460) "a") (data (i32.const 47463) "a") (data (i32.const 47466) "a") (data (i32.const 47469) "a") (data (i32.const 47472) "a") (data (i32.const 47475) "a") (data (i32.const 47478) "a") (data (i32.const 47481) "a") (data (i32.const 47484) "a") (data (i32.const 47487) "a") (data (i32.const 47490) "a") (data (i32.const 47493) "a") (data (i32.const 47496) "a") (data (i32.const 47499) "a") (data (i32.const 47502) "a") (data (i32.const 47505) "a") (data (i32.const 47508) "a") (data (i32.const 47511) "a") (data (i32.const 47514) "a") (data (i32.const 47517) "a") (data (i32.const 47520) "a") (data (i32.const 47523) "a") (data (i32.const 47526) "a") (data (i32.const 47529) "a") (data (i32.const 47532) "a") (data (i32.const 47535) "a") (data (i32.const 47538) "a") (data (i32.const 47541) "a") (data (i32.const 47544) "a") (data (i32.const 47547) "a") (data (i32.const 47550) "a") (data (i32.const 47553) "a") (data (i32.const 47556) "a") (data (i32.const 47559) "a") (data (i32.const 47562) "a") (data (i32.const 47565) "a") (data (i32.const 47568) "a") (data (i32.const 47571) "a") (data (i32.const 47574) "a") (data (i32.const 47577) "a") (data (i32.const 47580) "a") (data (i32.const 47583) "a") (data (i32.const 47586) "a") (data (i32.const 47589) "a") (data (i32.const 47592) "a") (data (i32.const 47595) "a") (data (i32.const 47598) "a") (data (i32.const 47601) "a") (data (i32.const 47604) "a") (data (i32.const 47607) "a") (data (i32.const 47610) "a") (data (i32.const 47613) "a") (data (i32.const 47616) "a") (data (i32.const 47619) "a") (data (i32.const 47622) "a") (data (i32.const 47625) "a") (data (i32.const 47628) "a") (data (i32.const 47631) "a") (data (i32.const 47634) "a") (data (i32.const 47637) "a") (data (i32.const 47640) "a") (data (i32.const 47643) "a") (data (i32.const 47646) "a") (data (i32.const 47649) "a") (data (i32.const 47652) "a") (data (i32.const 47655) "a") (data (i32.const 47658) "a") (data (i32.const 47661) "a") (data (i32.const 47664) "a") (data (i32.const 47667) "a") (data (i32.const 47670) "a") (data (i32.const 47673) "a") (data (i32.const 47676) "a") (data (i32.const 47679) "a") (data (i32.const 47682) "a") (data (i32.const 47685) "a") (data (i32.const 47688) "a") (data (i32.const 47691) "a") (data (i32.const 47694) "a") (data (i32.const 47697) "a") (data (i32.const 47700) "a") (data (i32.const 47703) "a") (data (i32.const 47706) "a") (data (i32.const 47709) "a") (data (i32.const 47712) "a") (data (i32.const 47715) "a") (data (i32.const 47718) "a") (data (i32.const 47721) "a") (data (i32.const 47724) "a") (data (i32.const 47727) "a") (data (i32.const 47730) "a") (data (i32.const 47733) "a") (data (i32.const 47736) "a") (data (i32.const 47739) "a") (data (i32.const 47742) "a") (data (i32.const 47745) "a") (data (i32.const 47748) "a") (data (i32.const 47751) "a") (data (i32.const 47754) "a") (data (i32.const 47757) "a") (data (i32.const 47760) "a") (data (i32.const 47763) "a") (data (i32.const 47766) "a") (data (i32.const 47769) "a") (data (i32.const 47772) "a") (data (i32.const 47775) "a") (data (i32.const 47778) "a") (data (i32.const 47781) "a") (data (i32.const 47784) "a") (data (i32.const 47787) "a") (data (i32.const 47790) "a") (data (i32.const 47793) "a") (data (i32.const 47796) "a") (data (i32.const 47799) "a") (data (i32.const 47802) "a") (data (i32.const 47805) "a") (data (i32.const 47808) "a") (data (i32.const 47811) "a") (data (i32.const 47814) "a") (data (i32.const 47817) "a") (data (i32.const 47820) "a") (data (i32.const 47823) "a") (data (i32.const 47826) "a") (data (i32.const 47829) "a") (data (i32.const 47832) "a") (data (i32.const 47835) "a") (data (i32.const 47838) "a") (data (i32.const 47841) "a") (data (i32.const 47844) "a") (data (i32.const 47847) "a") (data (i32.const 47850) "a") (data (i32.const 47853) "a") (data (i32.const 47856) "a") (data (i32.const 47859) "a") (data (i32.const 47862) "a") (data (i32.const 47865) "a") (data (i32.const 47868) "a") (data (i32.const 47871) "a") (data (i32.const 47874) "a") (data (i32.const 47877) "a") (data (i32.const 47880) "a") (data (i32.const 47883) "a") (data (i32.const 47886) "a") (data (i32.const 47889) "a") (data (i32.const 47892) "a") (data (i32.const 47895) "a") (data (i32.const 47898) "a") (data (i32.const 47901) "a") (data (i32.const 47904) "a") (data (i32.const 47907) "a") (data (i32.const 47910) "a") (data (i32.const 47913) "a") (data (i32.const 47916) "a") (data (i32.const 47919) "a") (data (i32.const 47922) "a") (data (i32.const 47925) "a") (data (i32.const 47928) "a") (data (i32.const 47931) "a") (data (i32.const 47934) "a") (data (i32.const 47937) "a") (data (i32.const 47940) "a") (data (i32.const 47943) "a") (data (i32.const 47946) "a") (data (i32.const 47949) "a") (data (i32.const 47952) "a") (data (i32.const 47955) "a") (data (i32.const 47958) "a") (data (i32.const 47961) "a") (data (i32.const 47964) "a") (data (i32.const 47967) "a") (data (i32.const 47970) "a") (data (i32.const 47973) "a") (data (i32.const 47976) "a") (data (i32.const 47979) "a") (data (i32.const 47982) "a") (data (i32.const 47985) "a") (data (i32.const 47988) "a") (data (i32.const 47991) "a") (data (i32.const 47994) "a") (data (i32.const 47997) "a") (data (i32.const 48000) "a") (data (i32.const 48003) "a") (data (i32.const 48006) "a") (data (i32.const 48009) "a") (data (i32.const 48012) "a") (data (i32.const 48015) "a") (data (i32.const 48018) "a") (data (i32.const 48021) "a") (data (i32.const 48024) "a") (data (i32.const 48027) "a") (data (i32.const 48030) "a") (data (i32.const 48033) "a") (data (i32.const 48036) "a") (data (i32.const 48039) "a") (data (i32.const 48042) "a") (data (i32.const 48045) "a") (data (i32.const 48048) "a") (data (i32.const 48051) "a") (data (i32.const 48054) "a") (data (i32.const 48057) "a") (data (i32.const 48060) "a") (data (i32.const 48063) "a") (data (i32.const 48066) "a") (data (i32.const 48069) "a") (data (i32.const 48072) "a") (data (i32.const 48075) "a") (data (i32.const 48078) "a") (data (i32.const 48081) "a") (data (i32.const 48084) "a") (data (i32.const 48087) "a") (data (i32.const 48090) "a") (data (i32.const 48093) "a") (data (i32.const 48096) "a") (data (i32.const 48099) "a") (data (i32.const 48102) "a") (data (i32.const 48105) "a") (data (i32.const 48108) "a") (data (i32.const 48111) "a") (data (i32.const 48114) "a") (data (i32.const 48117) "a") (data (i32.const 48120) "a") (data (i32.const 48123) "a") (data (i32.const 48126) "a") (data (i32.const 48129) "a") (data (i32.const 48132) "a") (data (i32.const 48135) "a") (data (i32.const 48138) "a") (data (i32.const 48141) "a") (data (i32.const 48144) "a") (data (i32.const 48147) "a") (data (i32.const 48150) "a") (data (i32.const 48153) "a") (data (i32.const 48156) "a") (data (i32.const 48159) "a") (data (i32.const 48162) "a") (data (i32.const 48165) "a") (data (i32.const 48168) "a") (data (i32.const 48171) "a") (data (i32.const 48174) "a") (data (i32.const 48177) "a") (data (i32.const 48180) "a") (data (i32.const 48183) "a") (data (i32.const 48186) "a") (data (i32.const 48189) "a") (data (i32.const 48192) "a") (data (i32.const 48195) "a") (data (i32.const 48198) "a") (data (i32.const 48201) "a") (data (i32.const 48204) "a") (data (i32.const 48207) "a") (data (i32.const 48210) "a") (data (i32.const 48213) "a") (data (i32.const 48216) "a") (data (i32.const 48219) "a") (data (i32.const 48222) "a") (data (i32.const 48225) "a") (data (i32.const 48228) "a") (data (i32.const 48231) "a") (data (i32.const 48234) "a") (data (i32.const 48237) "a") (data (i32.const 48240) "a") (data (i32.const 48243) "a") (data (i32.const 48246) "a") (data (i32.const 48249) "a") (data (i32.const 48252) "a") (data (i32.const 48255) "a") (data (i32.const 48258) "a") (data (i32.const 48261) "a") (data (i32.const 48264) "a") (data (i32.const 48267) "a") (data (i32.const 48270) "a") (data (i32.const 48273) "a") (data (i32.const 48276) "a") (data (i32.const 48279) "a") (data (i32.const 48282) "a") (data (i32.const 48285) "a") (data (i32.const 48288) "a") (data (i32.const 48291) "a") (data (i32.const 48294) "a") (data (i32.const 48297) "a") (data (i32.const 48300) "a") (data (i32.const 48303) "a") (data (i32.const 48306) "a") (data (i32.const 48309) "a") (data (i32.const 48312) "a") (data (i32.const 48315) "a") (data (i32.const 48318) "a") (data (i32.const 48321) "a") (data (i32.const 48324) "a") (data (i32.const 48327) "a") (data (i32.const 48330) "a") (data (i32.const 48333) "a") (data (i32.const 48336) "a") (data (i32.const 48339) "a") (data (i32.const 48342) "a") (data (i32.const 48345) "a") (data (i32.const 48348) "a") (data (i32.const 48351) "a") (data (i32.const 48354) "a") (data (i32.const 48357) "a") (data (i32.const 48360) "a") (data (i32.const 48363) "a") (data (i32.const 48366) "a") (data (i32.const 48369) "a") (data (i32.const 48372) "a") (data (i32.const 48375) "a") (data (i32.const 48378) "a") (data (i32.const 48381) "a") (data (i32.const 48384) "a") (data (i32.const 48387) "a") (data (i32.const 48390) "a") (data (i32.const 48393) "a") (data (i32.const 48396) "a") (data (i32.const 48399) "a") (data (i32.const 48402) "a") (data (i32.const 48405) "a") (data (i32.const 48408) "a") (data (i32.const 48411) "a") (data (i32.const 48414) "a") (data (i32.const 48417) "a") (data (i32.const 48420) "a") (data (i32.const 48423) "a") (data (i32.const 48426) "a") (data (i32.const 48429) "a") (data (i32.const 48432) "a") (data (i32.const 48435) "a") (data (i32.const 48438) "a") (data (i32.const 48441) "a") (data (i32.const 48444) "a") (data (i32.const 48447) "a") (data (i32.const 48450) "a") (data (i32.const 48453) "a") (data (i32.const 48456) "a") (data (i32.const 48459) "a") (data (i32.const 48462) "a") (data (i32.const 48465) "a") (data (i32.const 48468) "a") (data (i32.const 48471) "a") (data (i32.const 48474) "a") (data (i32.const 48477) "a") (data (i32.const 48480) "a") (data (i32.const 48483) "a") (data (i32.const 48486) "a") (data (i32.const 48489) "a") (data (i32.const 48492) "a") (data (i32.const 48495) "a") (data (i32.const 48498) "a") (data (i32.const 48501) "a") (data (i32.const 48504) "a") (data (i32.const 48507) "a") (data (i32.const 48510) "a") (data (i32.const 48513) "a") (data (i32.const 48516) "a") (data (i32.const 48519) "a") (data (i32.const 48522) "a") (data (i32.const 48525) "a") (data (i32.const 48528) "a") (data (i32.const 48531) "a") (data (i32.const 48534) "a") (data (i32.const 48537) "a") (data (i32.const 48540) "a") (data (i32.const 48543) "a") (data (i32.const 48546) "a") (data (i32.const 48549) "a") (data (i32.const 48552) "a") (data (i32.const 48555) "a") (data (i32.const 48558) "a") (data (i32.const 48561) "a") (data (i32.const 48564) "a") (data (i32.const 48567) "a") (data (i32.const 48570) "a") (data (i32.const 48573) "a") (data (i32.const 48576) "a") (data (i32.const 48579) "a") (data (i32.const 48582) "a") (data (i32.const 48585) "a") (data (i32.const 48588) "a") (data (i32.const 48591) "a") (data (i32.const 48594) "a") (data (i32.const 48597) "a") (data (i32.const 48600) "a") (data (i32.const 48603) "a") (data (i32.const 48606) "a") (data (i32.const 48609) "a") (data (i32.const 48612) "a") (data (i32.const 48615) "a") (data (i32.const 48618) "a") (data (i32.const 48621) "a") (data (i32.const 48624) "a") (data (i32.const 48627) "a") (data (i32.const 48630) "a") (data (i32.const 48633) "a") (data (i32.const 48636) "a") (data (i32.const 48639) "a") (data (i32.const 48642) "a") (data (i32.const 48645) "a") (data (i32.const 48648) "a") (data (i32.const 48651) "a") (data (i32.const 48654) "a") (data (i32.const 48657) "a") (data (i32.const 48660) "a") (data (i32.const 48663) "a") (data (i32.const 48666) "a") (data (i32.const 48669) "a") (data (i32.const 48672) "a") (data (i32.const 48675) "a") (data (i32.const 48678) "a") (data (i32.const 48681) "a") (data (i32.const 48684) "a") (data (i32.const 48687) "a") (data (i32.const 48690) "a") (data (i32.const 48693) "a") (data (i32.const 48696) "a") (data (i32.const 48699) "a") (data (i32.const 48702) "a") (data (i32.const 48705) "a") (data (i32.const 48708) "a") (data (i32.const 48711) "a") (data (i32.const 48714) "a") (data (i32.const 48717) "a") (data (i32.const 48720) "a") (data (i32.const 48723) "a") (data (i32.const 48726) "a") (data (i32.const 48729) "a") (data (i32.const 48732) "a") (data (i32.const 48735) "a") (data (i32.const 48738) "a") (data (i32.const 48741) "a") (data (i32.const 48744) "a") (data (i32.const 48747) "a") (data (i32.const 48750) "a") (data (i32.const 48753) "a") (data (i32.const 48756) "a") (data (i32.const 48759) "a") (data (i32.const 48762) "a") (data (i32.const 48765) "a") (data (i32.const 48768) "a") (data (i32.const 48771) "a") (data (i32.const 48774) "a") (data (i32.const 48777) "a") (data (i32.const 48780) "a") (data (i32.const 48783) "a") (data (i32.const 48786) "a") (data (i32.const 48789) "a") (data (i32.const 48792) "a") (data (i32.const 48795) "a") (data (i32.const 48798) "a") (data (i32.const 48801) "a") (data (i32.const 48804) "a") (data (i32.const 48807) "a") (data (i32.const 48810) "a") (data (i32.const 48813) "a") (data (i32.const 48816) "a") (data (i32.const 48819) "a") (data (i32.const 48822) "a") (data (i32.const 48825) "a") (data (i32.const 48828) "a") (data (i32.const 48831) "a") (data (i32.const 48834) "a") (data (i32.const 48837) "a") (data (i32.const 48840) "a") (data (i32.const 48843) "a") (data (i32.const 48846) "a") (data (i32.const 48849) "a") (data (i32.const 48852) "a") (data (i32.const 48855) "a") (data (i32.const 48858) "a") (data (i32.const 48861) "a") (data (i32.const 48864) "a") (data (i32.const 48867) "a") (data (i32.const 48870) "a") (data (i32.const 48873) "a") (data (i32.const 48876) "a") (data (i32.const 48879) "a") (data (i32.const 48882) "a") (data (i32.const 48885) "a") (data (i32.const 48888) "a") (data (i32.const 48891) "a") (data (i32.const 48894) "a") (data (i32.const 48897) "a") (data (i32.const 48900) "a") (data (i32.const 48903) "a") (data (i32.const 48906) "a") (data (i32.const 48909) "a") (data (i32.const 48912) "a") (data (i32.const 48915) "a") (data (i32.const 48918) "a") (data (i32.const 48921) "a") (data (i32.const 48924) "a") (data (i32.const 48927) "a") (data (i32.const 48930) "a") (data (i32.const 48933) "a") (data (i32.const 48936) "a") (data (i32.const 48939) "a") (data (i32.const 48942) "a") (data (i32.const 48945) "a") (data (i32.const 48948) "a") (data (i32.const 48951) "a") (data (i32.const 48954) "a") (data (i32.const 48957) "a") (data (i32.const 48960) "a") (data (i32.const 48963) "a") (data (i32.const 48966) "a") (data (i32.const 48969) "a") (data (i32.const 48972) "a") (data (i32.const 48975) "a") (data (i32.const 48978) "a") (data (i32.const 48981) "a") (data (i32.const 48984) "a") (data (i32.const 48987) "a") (data (i32.const 48990) "a") (data (i32.const 48993) "a") (data (i32.const 48996) "a") (data (i32.const 48999) "a") (data (i32.const 49002) "a") (data (i32.const 49005) "a") (data (i32.const 49008) "a") (data (i32.const 49011) "a") (data (i32.const 49014) "a") (data (i32.const 49017) "a") (data (i32.const 49020) "a") (data (i32.const 49023) "a") (data (i32.const 49026) "a") (data (i32.const 49029) "a") (data (i32.const 49032) "a") (data (i32.const 49035) "a") (data (i32.const 49038) "a") (data (i32.const 49041) "a") (data (i32.const 49044) "a") (data (i32.const 49047) "a") (data (i32.const 49050) "a") (data (i32.const 49053) "a") (data (i32.const 49056) "a") (data (i32.const 49059) "a") (data (i32.const 49062) "a") (data (i32.const 49065) "a") (data (i32.const 49068) "a") (data (i32.const 49071) "a") (data (i32.const 49074) "a") (data (i32.const 49077) "a") (data (i32.const 49080) "a") (data (i32.const 49083) "a") (data (i32.const 49086) "a") (data (i32.const 49089) "a") (data (i32.const 49092) "a") (data (i32.const 49095) "a") (data (i32.const 49098) "a") (data (i32.const 49101) "a") (data (i32.const 49104) "a") (data (i32.const 49107) "a") (data (i32.const 49110) "a") (data (i32.const 49113) "a") (data (i32.const 49116) "a") (data (i32.const 49119) "a") (data (i32.const 49122) "a") (data (i32.const 49125) "a") (data (i32.const 49128) "a") (data (i32.const 49131) "a") (data (i32.const 49134) "a") (data (i32.const 49137) "a") (data (i32.const 49140) "a") (data (i32.const 49143) "a") (data (i32.const 49146) "a") (data (i32.const 49149) "a") (data (i32.const 49152) "a") (data (i32.const 49155) "a") (data (i32.const 49158) "a") (data (i32.const 49161) "a") (data (i32.const 49164) "a") (data (i32.const 49167) "a") (data (i32.const 49170) "a") (data (i32.const 49173) "a") (data (i32.const 49176) "a") (data (i32.const 49179) "a") (data (i32.const 49182) "a") (data (i32.const 49185) "a") (data (i32.const 49188) "a") (data (i32.const 49191) "a") (data (i32.const 49194) "a") (data (i32.const 49197) "a") (data (i32.const 49200) "a") (data (i32.const 49203) "a") (data (i32.const 49206) "a") (data (i32.const 49209) "a") (data (i32.const 49212) "a") (data (i32.const 49215) "a") (data (i32.const 49218) "a") (data (i32.const 49221) "a") (data (i32.const 49224) "a") (data (i32.const 49227) "a") (data (i32.const 49230) "a") (data (i32.const 49233) "a") (data (i32.const 49236) "a") (data (i32.const 49239) "a") (data (i32.const 49242) "a") (data (i32.const 49245) "a") (data (i32.const 49248) "a") (data (i32.const 49251) "a") (data (i32.const 49254) "a") (data (i32.const 49257) "a") (data (i32.const 49260) "a") (data (i32.const 49263) "a") (data (i32.const 49266) "a") (data (i32.const 49269) "a") (data (i32.const 49272) "a") (data (i32.const 49275) "a") (data (i32.const 49278) "a") (data (i32.const 49281) "a") (data (i32.const 49284) "a") (data (i32.const 49287) "a") (data (i32.const 49290) "a") (data (i32.const 49293) "a") (data (i32.const 49296) "a") (data (i32.const 49299) "a") (data (i32.const 49302) "a") (data (i32.const 49305) "a") (data (i32.const 49308) "a") (data (i32.const 49311) "a") (data (i32.const 49314) "a") (data (i32.const 49317) "a") (data (i32.const 49320) "a") (data (i32.const 49323) "a") (data (i32.const 49326) "a") (data (i32.const 49329) "a") (data (i32.const 49332) "a") (data (i32.const 49335) "a") (data (i32.const 49338) "a") (data (i32.const 49341) "a") (data (i32.const 49344) "a") (data (i32.const 49347) "a") (data (i32.const 49350) "a") (data (i32.const 49353) "a") (data (i32.const 49356) "a") (data (i32.const 49359) "a") (data (i32.const 49362) "a") (data (i32.const 49365) "a") (data (i32.const 49368) "a") (data (i32.const 49371) "a") (data (i32.const 49374) "a") (data (i32.const 49377) "a") (data (i32.const 49380) "a") (data (i32.const 49383) "a") (data (i32.const 49386) "a") (data (i32.const 49389) "a") (data (i32.const 49392) "a") (data (i32.const 49395) "a") (data (i32.const 49398) "a") (data (i32.const 49401) "a") (data (i32.const 49404) "a") (data (i32.const 49407) "a") (data (i32.const 49410) "a") (data (i32.const 49413) "a") (data (i32.const 49416) "a") (data (i32.const 49419) "a") (data (i32.const 49422) "a") (data (i32.const 49425) "a") (data (i32.const 49428) "a") (data (i32.const 49431) "a") (data (i32.const 49434) "a") (data (i32.const 49437) "a") (data (i32.const 49440) "a") (data (i32.const 49443) "a") (data (i32.const 49446) "a") (data (i32.const 49449) "a") (data (i32.const 49452) "a") (data (i32.const 49455) "a") (data (i32.const 49458) "a") (data (i32.const 49461) "a") (data (i32.const 49464) "a") (data (i32.const 49467) "a") (data (i32.const 49470) "a") (data (i32.const 49473) "a") (data (i32.const 49476) "a") (data (i32.const 49479) "a") (data (i32.const 49482) "a") (data (i32.const 49485) "a") (data (i32.const 49488) "a") (data (i32.const 49491) "a") (data (i32.const 49494) "a") (data (i32.const 49497) "a") (data (i32.const 49500) "a") (data (i32.const 49503) "a") (data (i32.const 49506) "a") (data (i32.const 49509) "a") (data (i32.const 49512) "a") (data (i32.const 49515) "a") (data (i32.const 49518) "a") (data (i32.const 49521) "a") (data (i32.const 49524) "a") (data (i32.const 49527) "a") (data (i32.const 49530) "a") (data (i32.const 49533) "a") (data (i32.const 49536) "a") (data (i32.const 49539) "a") (data (i32.const 49542) "a") (data (i32.const 49545) "a") (data (i32.const 49548) "a") (data (i32.const 49551) "a") (data (i32.const 49554) "a") (data (i32.const 49557) "a") (data (i32.const 49560) "a") (data (i32.const 49563) "a") (data (i32.const 49566) "a") (data (i32.const 49569) "a") (data (i32.const 49572) "a") (data (i32.const 49575) "a") (data (i32.const 49578) "a") (data (i32.const 49581) "a") (data (i32.const 49584) "a") (data (i32.const 49587) "a") (data (i32.const 49590) "a") (data (i32.const 49593) "a") (data (i32.const 49596) "a") (data (i32.const 49599) "a") (data (i32.const 49602) "a") (data (i32.const 49605) "a") (data (i32.const 49608) "a") (data (i32.const 49611) "a") (data (i32.const 49614) "a") (data (i32.const 49617) "a") (data (i32.const 49620) "a") (data (i32.const 49623) "a") (data (i32.const 49626) "a") (data (i32.const 49629) "a") (data (i32.const 49632) "a") (data (i32.const 49635) "a") (data (i32.const 49638) "a") (data (i32.const 49641) "a") (data (i32.const 49644) "a") (data (i32.const 49647) "a") (data (i32.const 49650) "a") (data (i32.const 49653) "a") (data (i32.const 49656) "a") (data (i32.const 49659) "a") (data (i32.const 49662) "a") (data (i32.const 49665) "a") (data (i32.const 49668) "a") (data (i32.const 49671) "a") (data (i32.const 49674) "a") (data (i32.const 49677) "a") (data (i32.const 49680) "a") (data (i32.const 49683) "a") (data (i32.const 49686) "a") (data (i32.const 49689) "a") (data (i32.const 49692) "a") (data (i32.const 49695) "a") (data (i32.const 49698) "a") (data (i32.const 49701) "a") (data (i32.const 49704) "a") (data (i32.const 49707) "a") (data (i32.const 49710) "a") (data (i32.const 49713) "a") (data (i32.const 49716) "a") (data (i32.const 49719) "a") (data (i32.const 49722) "a") (data (i32.const 49725) "a") (data (i32.const 49728) "a") (data (i32.const 49731) "a") (data (i32.const 49734) "a") (data (i32.const 49737) "a") (data (i32.const 49740) "a") (data (i32.const 49743) "a") (data (i32.const 49746) "a") (data (i32.const 49749) "a") (data (i32.const 49752) "a") (data (i32.const 49755) "a") (data (i32.const 49758) "a") (data (i32.const 49761) "a") (data (i32.const 49764) "a") (data (i32.const 49767) "a") (data (i32.const 49770) "a") (data (i32.const 49773) "a") (data (i32.const 49776) "a") (data (i32.const 49779) "a") (data (i32.const 49782) "a") (data (i32.const 49785) "a") (data (i32.const 49788) "a") (data (i32.const 49791) "a") (data (i32.const 49794) "a") (data (i32.const 49797) "a") (data (i32.const 49800) "a") (data (i32.const 49803) "a") (data (i32.const 49806) "a") (data (i32.const 49809) "a") (data (i32.const 49812) "a") (data (i32.const 49815) "a") (data (i32.const 49818) "a") (data (i32.const 49821) "a") (data (i32.const 49824) "a") (data (i32.const 49827) "a") (data (i32.const 49830) "a") (data (i32.const 49833) "a") (data (i32.const 49836) "a") (data (i32.const 49839) "a") (data (i32.const 49842) "a") (data (i32.const 49845) "a") (data (i32.const 49848) "a") (data (i32.const 49851) "a") (data (i32.const 49854) "a") (data (i32.const 49857) "a") (data (i32.const 49860) "a") (data (i32.const 49863) "a") (data (i32.const 49866) "a") (data (i32.const 49869) "a") (data (i32.const 49872) "a") (data (i32.const 49875) "a") (data (i32.const 49878) "a") (data (i32.const 49881) "a") (data (i32.const 49884) "a") (data (i32.const 49887) "a") (data (i32.const 49890) "a") (data (i32.const 49893) "a") (data (i32.const 49896) "a") (data (i32.const 49899) "a") (data (i32.const 49902) "a") (data (i32.const 49905) "a") (data (i32.const 49908) "a") (data (i32.const 49911) "a") (data (i32.const 49914) "a") (data (i32.const 49917) "a") (data (i32.const 49920) "a") (data (i32.const 49923) "a") (data (i32.const 49926) "a") (data (i32.const 49929) "a") (data (i32.const 49932) "a") (data (i32.const 49935) "a") (data (i32.const 49938) "a") (data (i32.const 49941) "a") (data (i32.const 49944) "a") (data (i32.const 49947) "a") (data (i32.const 49950) "a") (data (i32.const 49953) "a") (data (i32.const 49956) "a") (data (i32.const 49959) "a") (data (i32.const 49962) "a") (data (i32.const 49965) "a") (data (i32.const 49968) "a") (data (i32.const 49971) "a") (data (i32.const 49974) "a") (data (i32.const 49977) "a") (data (i32.const 49980) "a") (data (i32.const 49983) "a") (data (i32.const 49986) "a") (data (i32.const 49989) "a") (data (i32.const 49992) "a") (data (i32.const 49995) "a") (data (i32.const 49998) "a") (data (i32.const 50001) "a") (data (i32.const 50004) "a") (data (i32.const 50007) "a") (data (i32.const 50010) "a") (data (i32.const 50013) "a") (data (i32.const 50016) "a") (data (i32.const 50019) "a") (data (i32.const 50022) "a") (data (i32.const 50025) "a") (data (i32.const 50028) "a") (data (i32.const 50031) "a") (data (i32.const 50034) "a") (data (i32.const 50037) "a") (data (i32.const 50040) "a") (data (i32.const 50043) "a") (data (i32.const 50046) "a") (data (i32.const 50049) "a") (data (i32.const 50052) "a") (data (i32.const 50055) "a") (data (i32.const 50058) "a") (data (i32.const 50061) "a") (data (i32.const 50064) "a") (data (i32.const 50067) "a") (data (i32.const 50070) "a") (data (i32.const 50073) "a") (data (i32.const 50076) "a") (data (i32.const 50079) "a") (data (i32.const 50082) "a") (data (i32.const 50085) "a") (data (i32.const 50088) "a") (data (i32.const 50091) "a") (data (i32.const 50094) "a") (data (i32.const 50097) "a") (data (i32.const 50100) "a") (data (i32.const 50103) "a") (data (i32.const 50106) "a") (data (i32.const 50109) "a") (data (i32.const 50112) "a") (data (i32.const 50115) "a") (data (i32.const 50118) "a") (data (i32.const 50121) "a") (data (i32.const 50124) "a") (data (i32.const 50127) "a") (data (i32.const 50130) "a") (data (i32.const 50133) "a") (data (i32.const 50136) "a") (data (i32.const 50139) "a") (data (i32.const 50142) "a") (data (i32.const 50145) "a") (data (i32.const 50148) "a") (data (i32.const 50151) "a") (data (i32.const 50154) "a") (data (i32.const 50157) "a") (data (i32.const 50160) "a") (data (i32.const 50163) "a") (data (i32.const 50166) "a") (data (i32.const 50169) "a") (data (i32.const 50172) "a") (data (i32.const 50175) "a") (data (i32.const 50178) "a") (data (i32.const 50181) "a") (data (i32.const 50184) "a") (data (i32.const 50187) "a") (data (i32.const 50190) "a") (data (i32.const 50193) "a") (data (i32.const 50196) "a") (data (i32.const 50199) "a") (data (i32.const 50202) "a") (data (i32.const 50205) "a") (data (i32.const 50208) "a") (data (i32.const 50211) "a") (data (i32.const 50214) "a") (data (i32.const 50217) "a") (data (i32.const 50220) "a") (data (i32.const 50223) "a") (data (i32.const 50226) "a") (data (i32.const 50229) "a") (data (i32.const 50232) "a") (data (i32.const 50235) "a") (data (i32.const 50238) "a") (data (i32.const 50241) "a") (data (i32.const 50244) "a") (data (i32.const 50247) "a") (data (i32.const 50250) "a") (data (i32.const 50253) "a") (data (i32.const 50256) "a") (data (i32.const 50259) "a") (data (i32.const 50262) "a") (data (i32.const 50265) "a") (data (i32.const 50268) "a") (data (i32.const 50271) "a") (data (i32.const 50274) "a") (data (i32.const 50277) "a") (data (i32.const 50280) "a") (data (i32.const 50283) "a") (data (i32.const 50286) "a") (data (i32.const 50289) "a") (data (i32.const 50292) "a") (data (i32.const 50295) "a") (data (i32.const 50298) "a") (data (i32.const 50301) "a") (data (i32.const 50304) "a") (data (i32.const 50307) "a") (data (i32.const 50310) "a") (data (i32.const 50313) "a") (data (i32.const 50316) "a") (data (i32.const 50319) "a") (data (i32.const 50322) "a") (data (i32.const 50325) "a") (data (i32.const 50328) "a") (data (i32.const 50331) "a") (data (i32.const 50334) "a") (data (i32.const 50337) "a") (data (i32.const 50340) "a") (data (i32.const 50343) "a") (data (i32.const 50346) "a") (data (i32.const 50349) "a") (data (i32.const 50352) "a") (data (i32.const 50355) "a") (data (i32.const 50358) "a") (data (i32.const 50361) "a") (data (i32.const 50364) "a") (data (i32.const 50367) "a") (data (i32.const 50370) "a") (data (i32.const 50373) "a") (data (i32.const 50376) "a") (data (i32.const 50379) "a") (data (i32.const 50382) "a") (data (i32.const 50385) "a") (data (i32.const 50388) "a") (data (i32.const 50391) "a") (data (i32.const 50394) "a") (data (i32.const 50397) "a") (data (i32.const 50400) "a") (data (i32.const 50403) "a") (data (i32.const 50406) "a") (data (i32.const 50409) "a") (data (i32.const 50412) "a") (data (i32.const 50415) "a") (data (i32.const 50418) "a") (data (i32.const 50421) "a") (data (i32.const 50424) "a") (data (i32.const 50427) "a") (data (i32.const 50430) "a") (data (i32.const 50433) "a") (data (i32.const 50436) "a") (data (i32.const 50439) "a") (data (i32.const 50442) "a") (data (i32.const 50445) "a") (data (i32.const 50448) "a") (data (i32.const 50451) "a") (data (i32.const 50454) "a") (data (i32.const 50457) "a") (data (i32.const 50460) "a") (data (i32.const 50463) "a") (data (i32.const 50466) "a") (data (i32.const 50469) "a") (data (i32.const 50472) "a") (data (i32.const 50475) "a") (data (i32.const 50478) "a") (data (i32.const 50481) "a") (data (i32.const 50484) "a") (data (i32.const 50487) "a") (data (i32.const 50490) "a") (data (i32.const 50493) "a") (data (i32.const 50496) "a") (data (i32.const 50499) "a") (data (i32.const 50502) "a") (data (i32.const 50505) "a") (data (i32.const 50508) "a") (data (i32.const 50511) "a") (data (i32.const 50514) "a") (data (i32.const 50517) "a") (data (i32.const 50520) "a") (data (i32.const 50523) "a") (data (i32.const 50526) "a") (data (i32.const 50529) "a") (data (i32.const 50532) "a") (data (i32.const 50535) "a") (data (i32.const 50538) "a") (data (i32.const 50541) "a") (data (i32.const 50544) "a") (data (i32.const 50547) "a") (data (i32.const 50550) "a") (data (i32.const 50553) "a") (data (i32.const 50556) "a") (data (i32.const 50559) "a") (data (i32.const 50562) "a") (data (i32.const 50565) "a") (data (i32.const 50568) "a") (data (i32.const 50571) "a") (data (i32.const 50574) "a") (data (i32.const 50577) "a") (data (i32.const 50580) "a") (data (i32.const 50583) "a") (data (i32.const 50586) "a") (data (i32.const 50589) "a") (data (i32.const 50592) "a") (data (i32.const 50595) "a") (data (i32.const 50598) "a") (data (i32.const 50601) "a") (data (i32.const 50604) "a") (data (i32.const 50607) "a") (data (i32.const 50610) "a") (data (i32.const 50613) "a") (data (i32.const 50616) "a") (data (i32.const 50619) "a") (data (i32.const 50622) "a") (data (i32.const 50625) "a") (data (i32.const 50628) "a") (data (i32.const 50631) "a") (data (i32.const 50634) "a") (data (i32.const 50637) "a") (data (i32.const 50640) "a") (data (i32.const 50643) "a") (data (i32.const 50646) "a") (data (i32.const 50649) "a") (data (i32.const 50652) "a") (data (i32.const 50655) "a") (data (i32.const 50658) "a") (data (i32.const 50661) "a") (data (i32.const 50664) "a") (data (i32.const 50667) "a") (data (i32.const 50670) "a") (data (i32.const 50673) "a") (data (i32.const 50676) "a") (data (i32.const 50679) "a") (data (i32.const 50682) "a") (data (i32.const 50685) "a") (data (i32.const 50688) "a") (data (i32.const 50691) "a") (data (i32.const 50694) "a") (data (i32.const 50697) "a") (data (i32.const 50700) "a") (data (i32.const 50703) "a") (data (i32.const 50706) "a") (data (i32.const 50709) "a") (data (i32.const 50712) "a") (data (i32.const 50715) "a") (data (i32.const 50718) "a") (data (i32.const 50721) "a") (data (i32.const 50724) "a") (data (i32.const 50727) "a") (data (i32.const 50730) "a") (data (i32.const 50733) "a") (data (i32.const 50736) "a") (data (i32.const 50739) "a") (data (i32.const 50742) "a") (data (i32.const 50745) "a") (data (i32.const 50748) "a") (data (i32.const 50751) "a") (data (i32.const 50754) "a") (data (i32.const 50757) "a") (data (i32.const 50760) "a") (data (i32.const 50763) "a") (data (i32.const 50766) "a") (data (i32.const 50769) "a") (data (i32.const 50772) "a") (data (i32.const 50775) "a") (data (i32.const 50778) "a") (data (i32.const 50781) "a") (data (i32.const 50784) "a") (data (i32.const 50787) "a") (data (i32.const 50790) "a") (data (i32.const 50793) "a") (data (i32.const 50796) "a") (data (i32.const 50799) "a") (data (i32.const 50802) "a") (data (i32.const 50805) "a") (data (i32.const 50808) "a") (data (i32.const 50811) "a") (data (i32.const 50814) "a") (data (i32.const 50817) "a") (data (i32.const 50820) "a") (data (i32.const 50823) "a") (data (i32.const 50826) "a") (data (i32.const 50829) "a") (data (i32.const 50832) "a") (data (i32.const 50835) "a") (data (i32.const 50838) "a") (data (i32.const 50841) "a") (data (i32.const 50844) "a") (data (i32.const 50847) "a") (data (i32.const 50850) "a") (data (i32.const 50853) "a") (data (i32.const 50856) "a") (data (i32.const 50859) "a") (data (i32.const 50862) "a") (data (i32.const 50865) "a") (data (i32.const 50868) "a") (data (i32.const 50871) "a") (data (i32.const 50874) "a") (data (i32.const 50877) "a") (data (i32.const 50880) "a") (data (i32.const 50883) "a") (data (i32.const 50886) "a") (data (i32.const 50889) "a") (data (i32.const 50892) "a") (data (i32.const 50895) "a") (data (i32.const 50898) "a") (data (i32.const 50901) "a") (data (i32.const 50904) "a") (data (i32.const 50907) "a") (data (i32.const 50910) "a") (data (i32.const 50913) "a") (data (i32.const 50916) "a") (data (i32.const 50919) "a") (data (i32.const 50922) "a") (data (i32.const 50925) "a") (data (i32.const 50928) "a") (data (i32.const 50931) "a") (data (i32.const 50934) "a") (data (i32.const 50937) "a") (data (i32.const 50940) "a") (data (i32.const 50943) "a") (data (i32.const 50946) "a") (data (i32.const 50949) "a") (data (i32.const 50952) "a") (data (i32.const 50955) "a") (data (i32.const 50958) "a") (data (i32.const 50961) "a") (data (i32.const 50964) "a") (data (i32.const 50967) "a") (data (i32.const 50970) "a") (data (i32.const 50973) "a") (data (i32.const 50976) "a") (data (i32.const 50979) "a") (data (i32.const 50982) "a") (data (i32.const 50985) "a") (data (i32.const 50988) "a") (data (i32.const 50991) "a") (data (i32.const 50994) "a") (data (i32.const 50997) "a") (data (i32.const 51000) "a") (data (i32.const 51003) "a") (data (i32.const 51006) "a") (data (i32.const 51009) "a") (data (i32.const 51012) "a") (data (i32.const 51015) "a") (data (i32.const 51018) "a") (data (i32.const 51021) "a") (data (i32.const 51024) "a") (data (i32.const 51027) "a") (data (i32.const 51030) "a") (data (i32.const 51033) "a") (data (i32.const 51036) "a") (data (i32.const 51039) "a") (data (i32.const 51042) "a") (data (i32.const 51045) "a") (data (i32.const 51048) "a") (data (i32.const 51051) "a") (data (i32.const 51054) "a") (data (i32.const 51057) "a") (data (i32.const 51060) "a") (data (i32.const 51063) "a") (data (i32.const 51066) "a") (data (i32.const 51069) "a") (data (i32.const 51072) "a") (data (i32.const 51075) "a") (data (i32.const 51078) "a") (data (i32.const 51081) "a") (data (i32.const 51084) "a") (data (i32.const 51087) "a") (data (i32.const 51090) "a") (data (i32.const 51093) "a") (data (i32.const 51096) "a") (data (i32.const 51099) "a") (data (i32.const 51102) "a") (data (i32.const 51105) "a") (data (i32.const 51108) "a") (data (i32.const 51111) "a") (data (i32.const 51114) "a") (data (i32.const 51117) "a") (data (i32.const 51120) "a") (data (i32.const 51123) "a") (data (i32.const 51126) "a") (data (i32.const 51129) "a") (data (i32.const 51132) "a") (data (i32.const 51135) "a") (data (i32.const 51138) "a") (data (i32.const 51141) "a") (data (i32.const 51144) "a") (data (i32.const 51147) "a") (data (i32.const 51150) "a") (data (i32.const 51153) "a") (data (i32.const 51156) "a") (data (i32.const 51159) "a") (data (i32.const 51162) "a") (data (i32.const 51165) "a") (data (i32.const 51168) "a") (data (i32.const 51171) "a") (data (i32.const 51174) "a") (data (i32.const 51177) "a") (data (i32.const 51180) "a") (data (i32.const 51183) "a") (data (i32.const 51186) "a") (data (i32.const 51189) "a") (data (i32.const 51192) "a") (data (i32.const 51195) "a") (data (i32.const 51198) "a") (data (i32.const 51201) "a") (data (i32.const 51204) "a") (data (i32.const 51207) "a") (data (i32.const 51210) "a") (data (i32.const 51213) "a") (data (i32.const 51216) "a") (data (i32.const 51219) "a") (data (i32.const 51222) "a") (data (i32.const 51225) "a") (data (i32.const 51228) "a") (data (i32.const 51231) "a") (data (i32.const 51234) "a") (data (i32.const 51237) "a") (data (i32.const 51240) "a") (data (i32.const 51243) "a") (data (i32.const 51246) "a") (data (i32.const 51249) "a") (data (i32.const 51252) "a") (data (i32.const 51255) "a") (data (i32.const 51258) "a") (data (i32.const 51261) "a") (data (i32.const 51264) "a") (data (i32.const 51267) "a") (data (i32.const 51270) "a") (data (i32.const 51273) "a") (data (i32.const 51276) "a") (data (i32.const 51279) "a") (data (i32.const 51282) "a") (data (i32.const 51285) "a") (data (i32.const 51288) "a") (data (i32.const 51291) "a") (data (i32.const 51294) "a") (data (i32.const 51297) "a") (data (i32.const 51300) "a") (data (i32.const 51303) "a") (data (i32.const 51306) "a") (data (i32.const 51309) "a") (data (i32.const 51312) "a") (data (i32.const 51315) "a") (data (i32.const 51318) "a") (data (i32.const 51321) "a") (data (i32.const 51324) "a") (data (i32.const 51327) "a") (data (i32.const 51330) "a") (data (i32.const 51333) "a") (data (i32.const 51336) "a") (data (i32.const 51339) "a") (data (i32.const 51342) "a") (data (i32.const 51345) "a") (data (i32.const 51348) "a") (data (i32.const 51351) "a") (data (i32.const 51354) "a") (data (i32.const 51357) "a") (data (i32.const 51360) "a") (data (i32.const 51363) "a") (data (i32.const 51366) "a") (data (i32.const 51369) "a") (data (i32.const 51372) "a") (data (i32.const 51375) "a") (data (i32.const 51378) "a") (data (i32.const 51381) "a") (data (i32.const 51384) "a") (data (i32.const 51387) "a") (data (i32.const 51390) "a") (data (i32.const 51393) "a") (data (i32.const 51396) "a") (data (i32.const 51399) "a") (data (i32.const 51402) "a") (data (i32.const 51405) "a") (data (i32.const 51408) "a") (data (i32.const 51411) "a") (data (i32.const 51414) "a") (data (i32.const 51417) "a") (data (i32.const 51420) "a") (data (i32.const 51423) "a") (data (i32.const 51426) "a") (data (i32.const 51429) "a") (data (i32.const 51432) "a") (data (i32.const 51435) "a") (data (i32.const 51438) "a") (data (i32.const 51441) "a") (data (i32.const 51444) "a") (data (i32.const 51447) "a") (data (i32.const 51450) "a") (data (i32.const 51453) "a") (data (i32.const 51456) "a") (data (i32.const 51459) "a") (data (i32.const 51462) "a") (data (i32.const 51465) "a") (data (i32.const 51468) "a") (data (i32.const 51471) "a") (data (i32.const 51474) "a") (data (i32.const 51477) "a") (data (i32.const 51480) "a") (data (i32.const 51483) "a") (data (i32.const 51486) "a") (data (i32.const 51489) "a") (data (i32.const 51492) "a") (data (i32.const 51495) "a") (data (i32.const 51498) "a") (data (i32.const 51501) "a") (data (i32.const 51504) "a") (data (i32.const 51507) "a") (data (i32.const 51510) "a") (data (i32.const 51513) "a") (data (i32.const 51516) "a") (data (i32.const 51519) "a") (data (i32.const 51522) "a") (data (i32.const 51525) "a") (data (i32.const 51528) "a") (data (i32.const 51531) "a") (data (i32.const 51534) "a") (data (i32.const 51537) "a") (data (i32.const 51540) "a") (data (i32.const 51543) "a") (data (i32.const 51546) "a") (data (i32.const 51549) "a") (data (i32.const 51552) "a") (data (i32.const 51555) "a") (data (i32.const 51558) "a") (data (i32.const 51561) "a") (data (i32.const 51564) "a") (data (i32.const 51567) "a") (data (i32.const 51570) "a") (data (i32.const 51573) "a") (data (i32.const 51576) "a") (data (i32.const 51579) "a") (data (i32.const 51582) "a") (data (i32.const 51585) "a") (data (i32.const 51588) "a") (data (i32.const 51591) "a") (data (i32.const 51594) "a") (data (i32.const 51597) "a") (data (i32.const 51600) "a") (data (i32.const 51603) "a") (data (i32.const 51606) "a") (data (i32.const 51609) "a") (data (i32.const 51612) "a") (data (i32.const 51615) "a") (data (i32.const 51618) "a") (data (i32.const 51621) "a") (data (i32.const 51624) "a") (data (i32.const 51627) "a") (data (i32.const 51630) "a") (data (i32.const 51633) "a") (data (i32.const 51636) "a") (data (i32.const 51639) "a") (data (i32.const 51642) "a") (data (i32.const 51645) "a") (data (i32.const 51648) "a") (data (i32.const 51651) "a") (data (i32.const 51654) "a") (data (i32.const 51657) "a") (data (i32.const 51660) "a") (data (i32.const 51663) "a") (data (i32.const 51666) "a") (data (i32.const 51669) "a") (data (i32.const 51672) "a") (data (i32.const 51675) "a") (data (i32.const 51678) "a") (data (i32.const 51681) "a") (data (i32.const 51684) "a") (data (i32.const 51687) "a") (data (i32.const 51690) "a") (data (i32.const 51693) "a") (data (i32.const 51696) "a") (data (i32.const 51699) "a") (data (i32.const 51702) "a") (data (i32.const 51705) "a") (data (i32.const 51708) "a") (data (i32.const 51711) "a") (data (i32.const 51714) "a") (data (i32.const 51717) "a") (data (i32.const 51720) "a") (data (i32.const 51723) "a") (data (i32.const 51726) "a") (data (i32.const 51729) "a") (data (i32.const 51732) "a") (data (i32.const 51735) "a") (data (i32.const 51738) "a") (data (i32.const 51741) "a") (data (i32.const 51744) "a") (data (i32.const 51747) "a") (data (i32.const 51750) "a") (data (i32.const 51753) "a") (data (i32.const 51756) "a") (data (i32.const 51759) "a") (data (i32.const 51762) "a") (data (i32.const 51765) "a") (data (i32.const 51768) "a") (data (i32.const 51771) "a") (data (i32.const 51774) "a") (data (i32.const 51777) "a") (data (i32.const 51780) "a") (data (i32.const 51783) "a") (data (i32.const 51786) "a") (data (i32.const 51789) "a") (data (i32.const 51792) "a") (data (i32.const 51795) "a") (data (i32.const 51798) "a") (data (i32.const 51801) "a") (data (i32.const 51804) "a") (data (i32.const 51807) "a") (data (i32.const 51810) "a") (data (i32.const 51813) "a") (data (i32.const 51816) "a") (data (i32.const 51819) "a") (data (i32.const 51822) "a") (data (i32.const 51825) "a") (data (i32.const 51828) "a") (data (i32.const 51831) "a") (data (i32.const 51834) "a") (data (i32.const 51837) "a") (data (i32.const 51840) "a") (data (i32.const 51843) "a") (data (i32.const 51846) "a") (data (i32.const 51849) "a") (data (i32.const 51852) "a") (data (i32.const 51855) "a") (data (i32.const 51858) "a") (data (i32.const 51861) "a") (data (i32.const 51864) "a") (data (i32.const 51867) "a") (data (i32.const 51870) "a") (data (i32.const 51873) "a") (data (i32.const 51876) "a") (data (i32.const 51879) "a") (data (i32.const 51882) "a") (data (i32.const 51885) "a") (data (i32.const 51888) "a") (data (i32.const 51891) "a") (data (i32.const 51894) "a") (data (i32.const 51897) "a") (data (i32.const 51900) "a") (data (i32.const 51903) "a") (data (i32.const 51906) "a") (data (i32.const 51909) "a") (data (i32.const 51912) "a") (data (i32.const 51915) "a") (data (i32.const 51918) "a") (data (i32.const 51921) "a") (data (i32.const 51924) "a") (data (i32.const 51927) "a") (data (i32.const 51930) "a") (data (i32.const 51933) "a") (data (i32.const 51936) "a") (data (i32.const 51939) "a") (data (i32.const 51942) "a") (data (i32.const 51945) "a") (data (i32.const 51948) "a") (data (i32.const 51951) "a") (data (i32.const 51954) "a") (data (i32.const 51957) "a") (data (i32.const 51960) "a") (data (i32.const 51963) "a") (data (i32.const 51966) "a") (data (i32.const 51969) "a") (data (i32.const 51972) "a") (data (i32.const 51975) "a") (data (i32.const 51978) "a") (data (i32.const 51981) "a") (data (i32.const 51984) "a") (data (i32.const 51987) "a") (data (i32.const 51990) "a") (data (i32.const 51993) "a") (data (i32.const 51996) "a") (data (i32.const 51999) "a") (data (i32.const 52002) "a") (data (i32.const 52005) "a") (data (i32.const 52008) "a") (data (i32.const 52011) "a") (data (i32.const 52014) "a") (data (i32.const 52017) "a") (data (i32.const 52020) "a") (data (i32.const 52023) "a") (data (i32.const 52026) "a") (data (i32.const 52029) "a") (data (i32.const 52032) "a") (data (i32.const 52035) "a") (data (i32.const 52038) "a") (data (i32.const 52041) "a") (data (i32.const 52044) "a") (data (i32.const 52047) "a") (data (i32.const 52050) "a") (data (i32.const 52053) "a") (data (i32.const 52056) "a") (data (i32.const 52059) "a") (data (i32.const 52062) "a") (data (i32.const 52065) "a") (data (i32.const 52068) "a") (data (i32.const 52071) "a") (data (i32.const 52074) "a") (data (i32.const 52077) "a") (data (i32.const 52080) "a") (data (i32.const 52083) "a") (data (i32.const 52086) "a") (data (i32.const 52089) "a") (data (i32.const 52092) "a") (data (i32.const 52095) "a") (data (i32.const 52098) "a") (data (i32.const 52101) "a") (data (i32.const 52104) "a") (data (i32.const 52107) "a") (data (i32.const 52110) "a") (data (i32.const 52113) "a") (data (i32.const 52116) "a") (data (i32.const 52119) "a") (data (i32.const 52122) "a") (data (i32.const 52125) "a") (data (i32.const 52128) "a") (data (i32.const 52131) "a") (data (i32.const 52134) "a") (data (i32.const 52137) "a") (data (i32.const 52140) "a") (data (i32.const 52143) "a") (data (i32.const 52146) "a") (data (i32.const 52149) "a") (data (i32.const 52152) "a") (data (i32.const 52155) "a") (data (i32.const 52158) "a") (data (i32.const 52161) "a") (data (i32.const 52164) "a") (data (i32.const 52167) "a") (data (i32.const 52170) "a") (data (i32.const 52173) "a") (data (i32.const 52176) "a") (data (i32.const 52179) "a") (data (i32.const 52182) "a") (data (i32.const 52185) "a") (data (i32.const 52188) "a") (data (i32.const 52191) "a") (data (i32.const 52194) "a") (data (i32.const 52197) "a") (data (i32.const 52200) "a") (data (i32.const 52203) "a") (data (i32.const 52206) "a") (data (i32.const 52209) "a") (data (i32.const 52212) "a") (data (i32.const 52215) "a") (data (i32.const 52218) "a") (data (i32.const 52221) "a") (data (i32.const 52224) "a") (data (i32.const 52227) "a") (data (i32.const 52230) "a") (data (i32.const 52233) "a") (data (i32.const 52236) "a") (data (i32.const 52239) "a") (data (i32.const 52242) "a") (data (i32.const 52245) "a") (data (i32.const 52248) "a") (data (i32.const 52251) "a") (data (i32.const 52254) "a") (data (i32.const 52257) "a") (data (i32.const 52260) "a") (data (i32.const 52263) "a") (data (i32.const 52266) "a") (data (i32.const 52269) "a") (data (i32.const 52272) "a") (data (i32.const 52275) "a") (data (i32.const 52278) "a") (data (i32.const 52281) "a") (data (i32.const 52284) "a") (data (i32.const 52287) "a") (data (i32.const 52290) "a") (data (i32.const 52293) "a") (data (i32.const 52296) "a") (data (i32.const 52299) "a") (data (i32.const 52302) "a") (data (i32.const 52305) "a") (data (i32.const 52308) "a") (data (i32.const 52311) "a") (data (i32.const 52314) "a") (data (i32.const 52317) "a") (data (i32.const 52320) "a") (data (i32.const 52323) "a") (data (i32.const 52326) "a") (data (i32.const 52329) "a") (data (i32.const 52332) "a") (data (i32.const 52335) "a") (data (i32.const 52338) "a") (data (i32.const 52341) "a") (data (i32.const 52344) "a") (data (i32.const 52347) "a") (data (i32.const 52350) "a") (data (i32.const 52353) "a") (data (i32.const 52356) "a") (data (i32.const 52359) "a") (data (i32.const 52362) "a") (data (i32.const 52365) "a") (data (i32.const 52368) "a") (data (i32.const 52371) "a") (data (i32.const 52374) "a") (data (i32.const 52377) "a") (data (i32.const 52380) "a") (data (i32.const 52383) "a") (data (i32.const 52386) "a") (data (i32.const 52389) "a") (data (i32.const 52392) "a") (data (i32.const 52395) "a") (data (i32.const 52398) "a") (data (i32.const 52401) "a") (data (i32.const 52404) "a") (data (i32.const 52407) "a") (data (i32.const 52410) "a") (data (i32.const 52413) "a") (data (i32.const 52416) "a") (data (i32.const 52419) "a") (data (i32.const 52422) "a") (data (i32.const 52425) "a") (data (i32.const 52428) "a") (data (i32.const 52431) "a") (data (i32.const 52434) "a") (data (i32.const 52437) "a") (data (i32.const 52440) "a") (data (i32.const 52443) "a") (data (i32.const 52446) "a") (data (i32.const 52449) "a") (data (i32.const 52452) "a") (data (i32.const 52455) "a") (data (i32.const 52458) "a") (data (i32.const 52461) "a") (data (i32.const 52464) "a") (data (i32.const 52467) "a") (data (i32.const 52470) "a") (data (i32.const 52473) "a") (data (i32.const 52476) "a") (data (i32.const 52479) "a") (data (i32.const 52482) "a") (data (i32.const 52485) "a") (data (i32.const 52488) "a") (data (i32.const 52491) "a") (data (i32.const 52494) "a") (data (i32.const 52497) "a") (data (i32.const 52500) "a") (data (i32.const 52503) "a") (data (i32.const 52506) "a") (data (i32.const 52509) "a") (data (i32.const 52512) "a") (data (i32.const 52515) "a") (data (i32.const 52518) "a") (data (i32.const 52521) "a") (data (i32.const 52524) "a") (data (i32.const 52527) "a") (data (i32.const 52530) "a") (data (i32.const 52533) "a") (data (i32.const 52536) "a") (data (i32.const 52539) "a") (data (i32.const 52542) "a") (data (i32.const 52545) "a") (data (i32.const 52548) "a") (data (i32.const 52551) "a") (data (i32.const 52554) "a") (data (i32.const 52557) "a") (data (i32.const 52560) "a") (data (i32.const 52563) "a") (data (i32.const 52566) "a") (data (i32.const 52569) "a") (data (i32.const 52572) "a") (data (i32.const 52575) "a") (data (i32.const 52578) "a") (data (i32.const 52581) "a") (data (i32.const 52584) "a") (data (i32.const 52587) "a") (data (i32.const 52590) "a") (data (i32.const 52593) "a") (data (i32.const 52596) "a") (data (i32.const 52599) "a") (data (i32.const 52602) "a") (data (i32.const 52605) "a") (data (i32.const 52608) "a") (data (i32.const 52611) "a") (data (i32.const 52614) "a") (data (i32.const 52617) "a") (data (i32.const 52620) "a") (data (i32.const 52623) "a") (data (i32.const 52626) "a") (data (i32.const 52629) "a") (data (i32.const 52632) "a") (data (i32.const 52635) "a") (data (i32.const 52638) "a") (data (i32.const 52641) "a") (data (i32.const 52644) "a") (data (i32.const 52647) "a") (data (i32.const 52650) "a") (data (i32.const 52653) "a") (data (i32.const 52656) "a") (data (i32.const 52659) "a") (data (i32.const 52662) "a") (data (i32.const 52665) "a") (data (i32.const 52668) "a") (data (i32.const 52671) "a") (data (i32.const 52674) "a") (data (i32.const 52677) "a") (data (i32.const 52680) "a") (data (i32.const 52683) "a") (data (i32.const 52686) "a") (data (i32.const 52689) "a") (data (i32.const 52692) "a") (data (i32.const 52695) "a") (data (i32.const 52698) "a") (data (i32.const 52701) "a") (data (i32.const 52704) "a") (data (i32.const 52707) "a") (data (i32.const 52710) "a") (data (i32.const 52713) "a") (data (i32.const 52716) "a") (data (i32.const 52719) "a") (data (i32.const 52722) "a") (data (i32.const 52725) "a") (data (i32.const 52728) "a") (data (i32.const 52731) "a") (data (i32.const 52734) "a") (data (i32.const 52737) "a") (data (i32.const 52740) "a") (data (i32.const 52743) "a") (data (i32.const 52746) "a") (data (i32.const 52749) "a") (data (i32.const 52752) "a") (data (i32.const 52755) "a") (data (i32.const 52758) "a") (data (i32.const 52761) "a") (data (i32.const 52764) "a") (data (i32.const 52767) "a") (data (i32.const 52770) "a") (data (i32.const 52773) "a") (data (i32.const 52776) "a") (data (i32.const 52779) "a") (data (i32.const 52782) "a") (data (i32.const 52785) "a") (data (i32.const 52788) "a") (data (i32.const 52791) "a") (data (i32.const 52794) "a") (data (i32.const 52797) "a") (data (i32.const 52800) "a") (data (i32.const 52803) "a") (data (i32.const 52806) "a") (data (i32.const 52809) "a") (data (i32.const 52812) "a") (data (i32.const 52815) "a") (data (i32.const 52818) "a") (data (i32.const 52821) "a") (data (i32.const 52824) "a") (data (i32.const 52827) "a") (data (i32.const 52830) "a") (data (i32.const 52833) "a") (data (i32.const 52836) "a") (data (i32.const 52839) "a") (data (i32.const 52842) "a") (data (i32.const 52845) "a") (data (i32.const 52848) "a") (data (i32.const 52851) "a") (data (i32.const 52854) "a") (data (i32.const 52857) "a") (data (i32.const 52860) "a") (data (i32.const 52863) "a") (data (i32.const 52866) "a") (data (i32.const 52869) "a") (data (i32.const 52872) "a") (data (i32.const 52875) "a") (data (i32.const 52878) "a") (data (i32.const 52881) "a") (data (i32.const 52884) "a") (data (i32.const 52887) "a") (data (i32.const 52890) "a") (data (i32.const 52893) "a") (data (i32.const 52896) "a") (data (i32.const 52899) "a") (data (i32.const 52902) "a") (data (i32.const 52905) "a") (data (i32.const 52908) "a") (data (i32.const 52911) "a") (data (i32.const 52914) "a") (data (i32.const 52917) "a") (data (i32.const 52920) "a") (data (i32.const 52923) "a") (data (i32.const 52926) "a") (data (i32.const 52929) "a") (data (i32.const 52932) "a") (data (i32.const 52935) "a") (data (i32.const 52938) "a") (data (i32.const 52941) "a") (data (i32.const 52944) "a") (data (i32.const 52947) "a") (data (i32.const 52950) "a") (data (i32.const 52953) "a") (data (i32.const 52956) "a") (data (i32.const 52959) "a") (data (i32.const 52962) "a") (data (i32.const 52965) "a") (data (i32.const 52968) "a") (data (i32.const 52971) "a") (data (i32.const 52974) "a") (data (i32.const 52977) "a") (data (i32.const 52980) "a") (data (i32.const 52983) "a") (data (i32.const 52986) "a") (data (i32.const 52989) "a") (data (i32.const 52992) "a") (data (i32.const 52995) "a") (data (i32.const 52998) "a") (data (i32.const 53001) "a") (data (i32.const 53004) "a") (data (i32.const 53007) "a") (data (i32.const 53010) "a") (data (i32.const 53013) "a") (data (i32.const 53016) "a") (data (i32.const 53019) "a") (data (i32.const 53022) "a") (data (i32.const 53025) "a") (data (i32.const 53028) "a") (data (i32.const 53031) "a") (data (i32.const 53034) "a") (data (i32.const 53037) "a") (data (i32.const 53040) "a") (data (i32.const 53043) "a") (data (i32.const 53046) "a") (data (i32.const 53049) "a") (data (i32.const 53052) "a") (data (i32.const 53055) "a") (data (i32.const 53058) "a") (data (i32.const 53061) "a") (data (i32.const 53064) "a") (data (i32.const 53067) "a") (data (i32.const 53070) "a") (data (i32.const 53073) "a") (data (i32.const 53076) "a") (data (i32.const 53079) "a") (data (i32.const 53082) "a") (data (i32.const 53085) "a") (data (i32.const 53088) "a") (data (i32.const 53091) "a") (data (i32.const 53094) "a") (data (i32.const 53097) "a") (data (i32.const 53100) "a") (data (i32.const 53103) "a") (data (i32.const 53106) "a") (data (i32.const 53109) "a") (data (i32.const 53112) "a") (data (i32.const 53115) "a") (data (i32.const 53118) "a") (data (i32.const 53121) "a") (data (i32.const 53124) "a") (data (i32.const 53127) "a") (data (i32.const 53130) "a") (data (i32.const 53133) "a") (data (i32.const 53136) "a") (data (i32.const 53139) "a") (data (i32.const 53142) "a") (data (i32.const 53145) "a") (data (i32.const 53148) "a") (data (i32.const 53151) "a") (data (i32.const 53154) "a") (data (i32.const 53157) "a") (data (i32.const 53160) "a") (data (i32.const 53163) "a") (data (i32.const 53166) "a") (data (i32.const 53169) "a") (data (i32.const 53172) "a") (data (i32.const 53175) "a") (data (i32.const 53178) "a") (data (i32.const 53181) "a") (data (i32.const 53184) "a") (data (i32.const 53187) "a") (data (i32.const 53190) "a") (data (i32.const 53193) "a") (data (i32.const 53196) "a") (data (i32.const 53199) "a") (data (i32.const 53202) "a") (data (i32.const 53205) "a") (data (i32.const 53208) "a") (data (i32.const 53211) "a") (data (i32.const 53214) "a") (data (i32.const 53217) "a") (data (i32.const 53220) "a") (data (i32.const 53223) "a") (data (i32.const 53226) "a") (data (i32.const 53229) "a") (data (i32.const 53232) "a") (data (i32.const 53235) "a") (data (i32.const 53238) "a") (data (i32.const 53241) "a") (data (i32.const 53244) "a") (data (i32.const 53247) "a") (data (i32.const 53250) "a") (data (i32.const 53253) "a") (data (i32.const 53256) "a") (data (i32.const 53259) "a") (data (i32.const 53262) "a") (data (i32.const 53265) "a") (data (i32.const 53268) "a") (data (i32.const 53271) "a") (data (i32.const 53274) "a") (data (i32.const 53277) "a") (data (i32.const 53280) "a") (data (i32.const 53283) "a") (data (i32.const 53286) "a") (data (i32.const 53289) "a") (data (i32.const 53292) "a") (data (i32.const 53295) "a") (data (i32.const 53298) "a") (data (i32.const 53301) "a") (data (i32.const 53304) "a") (data (i32.const 53307) "a") (data (i32.const 53310) "a") (data (i32.const 53313) "a") (data (i32.const 53316) "a") (data (i32.const 53319) "a") (data (i32.const 53322) "a") (data (i32.const 53325) "a") (data (i32.const 53328) "a") (data (i32.const 53331) "a") (data (i32.const 53334) "a") (data (i32.const 53337) "a") (data (i32.const 53340) "a") (data (i32.const 53343) "a") (data (i32.const 53346) "a") (data (i32.const 53349) "a") (data (i32.const 53352) "a") (data (i32.const 53355) "a") (data (i32.const 53358) "a") (data (i32.const 53361) "a") (data (i32.const 53364) "a") (data (i32.const 53367) "a") (data (i32.const 53370) "a") (data (i32.const 53373) "a") (data (i32.const 53376) "a") (data (i32.const 53379) "a") (data (i32.const 53382) "a") (data (i32.const 53385) "a") (data (i32.const 53388) "a") (data (i32.const 53391) "a") (data (i32.const 53394) "a") (data (i32.const 53397) "a") (data (i32.const 53400) "a") (data (i32.const 53403) "a") (data (i32.const 53406) "a") (data (i32.const 53409) "a") (data (i32.const 53412) "a") (data (i32.const 53415) "a") (data (i32.const 53418) "a") (data (i32.const 53421) "a") (data (i32.const 53424) "a") (data (i32.const 53427) "a") (data (i32.const 53430) "a") (data (i32.const 53433) "a") (data (i32.const 53436) "a") (data (i32.const 53439) "a") (data (i32.const 53442) "a") (data (i32.const 53445) "a") (data (i32.const 53448) "a") (data (i32.const 53451) "a") (data (i32.const 53454) "a") (data (i32.const 53457) "a") (data (i32.const 53460) "a") (data (i32.const 53463) "a") (data (i32.const 53466) "a") (data (i32.const 53469) "a") (data (i32.const 53472) "a") (data (i32.const 53475) "a") (data (i32.const 53478) "a") (data (i32.const 53481) "a") (data (i32.const 53484) "a") (data (i32.const 53487) "a") (data (i32.const 53490) "a") (data (i32.const 53493) "a") (data (i32.const 53496) "a") (data (i32.const 53499) "a") (data (i32.const 53502) "a") (data (i32.const 53505) "a") (data (i32.const 53508) "a") (data (i32.const 53511) "a") (data (i32.const 53514) "a") (data (i32.const 53517) "a") (data (i32.const 53520) "a") (data (i32.const 53523) "a") (data (i32.const 53526) "a") (data (i32.const 53529) "a") (data (i32.const 53532) "a") (data (i32.const 53535) "a") (data (i32.const 53538) "a") (data (i32.const 53541) "a") (data (i32.const 53544) "a") (data (i32.const 53547) "a") (data (i32.const 53550) "a") (data (i32.const 53553) "a") (data (i32.const 53556) "a") (data (i32.const 53559) "a") (data (i32.const 53562) "a") (data (i32.const 53565) "a") (data (i32.const 53568) "a") (data (i32.const 53571) "a") (data (i32.const 53574) "a") (data (i32.const 53577) "a") (data (i32.const 53580) "a") (data (i32.const 53583) "a") (data (i32.const 53586) "a") (data (i32.const 53589) "a") (data (i32.const 53592) "a") (data (i32.const 53595) "a") (data (i32.const 53598) "a") (data (i32.const 53601) "a") (data (i32.const 53604) "a") (data (i32.const 53607) "a") (data (i32.const 53610) "a") (data (i32.const 53613) "a") (data (i32.const 53616) "a") (data (i32.const 53619) "a") (data (i32.const 53622) "a") (data (i32.const 53625) "a") (data (i32.const 53628) "a") (data (i32.const 53631) "a") (data (i32.const 53634) "a") (data (i32.const 53637) "a") (data (i32.const 53640) "a") (data (i32.const 53643) "a") (data (i32.const 53646) "a") (data (i32.const 53649) "a") (data (i32.const 53652) "a") (data (i32.const 53655) "a") (data (i32.const 53658) "a") (data (i32.const 53661) "a") (data (i32.const 53664) "a") (data (i32.const 53667) "a") (data (i32.const 53670) "a") (data (i32.const 53673) "a") (data (i32.const 53676) "a") (data (i32.const 53679) "a") (data (i32.const 53682) "a") (data (i32.const 53685) "a") (data (i32.const 53688) "a") (data (i32.const 53691) "a") (data (i32.const 53694) "a") (data (i32.const 53697) "a") (data (i32.const 53700) "a") (data (i32.const 53703) "a") (data (i32.const 53706) "a") (data (i32.const 53709) "a") (data (i32.const 53712) "a") (data (i32.const 53715) "a") (data (i32.const 53718) "a") (data (i32.const 53721) "a") (data (i32.const 53724) "a") (data (i32.const 53727) "a") (data (i32.const 53730) "a") (data (i32.const 53733) "a") (data (i32.const 53736) "a") (data (i32.const 53739) "a") (data (i32.const 53742) "a") (data (i32.const 53745) "a") (data (i32.const 53748) "a") (data (i32.const 53751) "a") (data (i32.const 53754) "a") (data (i32.const 53757) "a") (data (i32.const 53760) "a") (data (i32.const 53763) "a") (data (i32.const 53766) "a") (data (i32.const 53769) "a") (data (i32.const 53772) "a") (data (i32.const 53775) "a") (data (i32.const 53778) "a") (data (i32.const 53781) "a") (data (i32.const 53784) "a") (data (i32.const 53787) "a") (data (i32.const 53790) "a") (data (i32.const 53793) "a") (data (i32.const 53796) "a") (data (i32.const 53799) "a") (data (i32.const 53802) "a") (data (i32.const 53805) "a") (data (i32.const 53808) "a") (data (i32.const 53811) "a") (data (i32.const 53814) "a") (data (i32.const 53817) "a") (data (i32.const 53820) "a") (data (i32.const 53823) "a") (data (i32.const 53826) "a") (data (i32.const 53829) "a") (data (i32.const 53832) "a") (data (i32.const 53835) "a") (data (i32.const 53838) "a") (data (i32.const 53841) "a") (data (i32.const 53844) "a") (data (i32.const 53847) "a") (data (i32.const 53850) "a") (data (i32.const 53853) "a") (data (i32.const 53856) "a") (data (i32.const 53859) "a") (data (i32.const 53862) "a") (data (i32.const 53865) "a") (data (i32.const 53868) "a") (data (i32.const 53871) "a") (data (i32.const 53874) "a") (data (i32.const 53877) "a") (data (i32.const 53880) "a") (data (i32.const 53883) "a") (data (i32.const 53886) "a") (data (i32.const 53889) "a") (data (i32.const 53892) "a") (data (i32.const 53895) "a") (data (i32.const 53898) "a") (data (i32.const 53901) "a") (data (i32.const 53904) "a") (data (i32.const 53907) "a") (data (i32.const 53910) "a") (data (i32.const 53913) "a") (data (i32.const 53916) "a") (data (i32.const 53919) "a") (data (i32.const 53922) "a") (data (i32.const 53925) "a") (data (i32.const 53928) "a") (data (i32.const 53931) "a") (data (i32.const 53934) "a") (data (i32.const 53937) "a") (data (i32.const 53940) "a") (data (i32.const 53943) "a") (data (i32.const 53946) "a") (data (i32.const 53949) "a") (data (i32.const 53952) "a") (data (i32.const 53955) "a") (data (i32.const 53958) "a") (data (i32.const 53961) "a") (data (i32.const 53964) "a") (data (i32.const 53967) "a") (data (i32.const 53970) "a") (data (i32.const 53973) "a") (data (i32.const 53976) "a") (data (i32.const 53979) "a") (data (i32.const 53982) "a") (data (i32.const 53985) "a") (data (i32.const 53988) "a") (data (i32.const 53991) "a") (data (i32.const 53994) "a") (data (i32.const 53997) "a") (data (i32.const 54000) "a") (data (i32.const 54003) "a") (data (i32.const 54006) "a") (data (i32.const 54009) "a") (data (i32.const 54012) "a") (data (i32.const 54015) "a") (data (i32.const 54018) "a") (data (i32.const 54021) "a") (data (i32.const 54024) "a") (data (i32.const 54027) "a") (data (i32.const 54030) "a") (data (i32.const 54033) "a") (data (i32.const 54036) "a") (data (i32.const 54039) "a") (data (i32.const 54042) "a") (data (i32.const 54045) "a") (data (i32.const 54048) "a") (data (i32.const 54051) "a") (data (i32.const 54054) "a") (data (i32.const 54057) "a") (data (i32.const 54060) "a") (data (i32.const 54063) "a") (data (i32.const 54066) "a") (data (i32.const 54069) "a") (data (i32.const 54072) "a") (data (i32.const 54075) "a") (data (i32.const 54078) "a") (data (i32.const 54081) "a") (data (i32.const 54084) "a") (data (i32.const 54087) "a") (data (i32.const 54090) "a") (data (i32.const 54093) "a") (data (i32.const 54096) "a") (data (i32.const 54099) "a") (data (i32.const 54102) "a") (data (i32.const 54105) "a") (data (i32.const 54108) "a") (data (i32.const 54111) "a") (data (i32.const 54114) "a") (data (i32.const 54117) "a") (data (i32.const 54120) "a") (data (i32.const 54123) "a") (data (i32.const 54126) "a") (data (i32.const 54129) "a") (data (i32.const 54132) "a") (data (i32.const 54135) "a") (data (i32.const 54138) "a") (data (i32.const 54141) "a") (data (i32.const 54144) "a") (data (i32.const 54147) "a") (data (i32.const 54150) "a") (data (i32.const 54153) "a") (data (i32.const 54156) "a") (data (i32.const 54159) "a") (data (i32.const 54162) "a") (data (i32.const 54165) "a") (data (i32.const 54168) "a") (data (i32.const 54171) "a") (data (i32.const 54174) "a") (data (i32.const 54177) "a") (data (i32.const 54180) "a") (data (i32.const 54183) "a") (data (i32.const 54186) "a") (data (i32.const 54189) "a") (data (i32.const 54192) "a") (data (i32.const 54195) "a") (data (i32.const 54198) "a") (data (i32.const 54201) "a") (data (i32.const 54204) "a") (data (i32.const 54207) "a") (data (i32.const 54210) "a") (data (i32.const 54213) "a") (data (i32.const 54216) "a") (data (i32.const 54219) "a") (data (i32.const 54222) "a") (data (i32.const 54225) "a") (data (i32.const 54228) "a") (data (i32.const 54231) "a") (data (i32.const 54234) "a") (data (i32.const 54237) "a") (data (i32.const 54240) "a") (data (i32.const 54243) "a") (data (i32.const 54246) "a") (data (i32.const 54249) "a") (data (i32.const 54252) "a") (data (i32.const 54255) "a") (data (i32.const 54258) "a") (data (i32.const 54261) "a") (data (i32.const 54264) "a") (data (i32.const 54267) "a") (data (i32.const 54270) "a") (data (i32.const 54273) "a") (data (i32.const 54276) "a") (data (i32.const 54279) "a") (data (i32.const 54282) "a") (data (i32.const 54285) "a") (data (i32.const 54288) "a") (data (i32.const 54291) "a") (data (i32.const 54294) "a") (data (i32.const 54297) "a") (data (i32.const 54300) "a") (data (i32.const 54303) "a") (data (i32.const 54306) "a") (data (i32.const 54309) "a") (data (i32.const 54312) "a") (data (i32.const 54315) "a") (data (i32.const 54318) "a") (data (i32.const 54321) "a") (data (i32.const 54324) "a") (data (i32.const 54327) "a") (data (i32.const 54330) "a") (data (i32.const 54333) "a") (data (i32.const 54336) "a") (data (i32.const 54339) "a") (data (i32.const 54342) "a") (data (i32.const 54345) "a") (data (i32.const 54348) "a") (data (i32.const 54351) "a") (data (i32.const 54354) "a") (data (i32.const 54357) "a") (data (i32.const 54360) "a") (data (i32.const 54363) "a") (data (i32.const 54366) "a") (data (i32.const 54369) "a") (data (i32.const 54372) "a") (data (i32.const 54375) "a") (data (i32.const 54378) "a") (data (i32.const 54381) "a") (data (i32.const 54384) "a") (data (i32.const 54387) "a") (data (i32.const 54390) "a") (data (i32.const 54393) "a") (data (i32.const 54396) "a") (data (i32.const 54399) "a") (data (i32.const 54402) "a") (data (i32.const 54405) "a") (data (i32.const 54408) "a") (data (i32.const 54411) "a") (data (i32.const 54414) "a") (data (i32.const 54417) "a") (data (i32.const 54420) "a") (data (i32.const 54423) "a") (data (i32.const 54426) "a") (data (i32.const 54429) "a") (data (i32.const 54432) "a") (data (i32.const 54435) "a") (data (i32.const 54438) "a") (data (i32.const 54441) "a") (data (i32.const 54444) "a") (data (i32.const 54447) "a") (data (i32.const 54450) "a") (data (i32.const 54453) "a") (data (i32.const 54456) "a") (data (i32.const 54459) "a") (data (i32.const 54462) "a") (data (i32.const 54465) "a") (data (i32.const 54468) "a") (data (i32.const 54471) "a") (data (i32.const 54474) "a") (data (i32.const 54477) "a") (data (i32.const 54480) "a") (data (i32.const 54483) "a") (data (i32.const 54486) "a") (data (i32.const 54489) "a") (data (i32.const 54492) "a") (data (i32.const 54495) "a") (data (i32.const 54498) "a") (data (i32.const 54501) "a") (data (i32.const 54504) "a") (data (i32.const 54507) "a") (data (i32.const 54510) "a") (data (i32.const 54513) "a") (data (i32.const 54516) "a") (data (i32.const 54519) "a") (data (i32.const 54522) "a") (data (i32.const 54525) "a") (data (i32.const 54528) "a") (data (i32.const 54531) "a") (data (i32.const 54534) "a") (data (i32.const 54537) "a") (data (i32.const 54540) "a") (data (i32.const 54543) "a") (data (i32.const 54546) "a") (data (i32.const 54549) "a") (data (i32.const 54552) "a") (data (i32.const 54555) "a") (data (i32.const 54558) "a") (data (i32.const 54561) "a") (data (i32.const 54564) "a") (data (i32.const 54567) "a") (data (i32.const 54570) "a") (data (i32.const 54573) "a") (data (i32.const 54576) "a") (data (i32.const 54579) "a") (data (i32.const 54582) "a") (data (i32.const 54585) "a") (data (i32.const 54588) "a") (data (i32.const 54591) "a") (data (i32.const 54594) "a") (data (i32.const 54597) "a") (data (i32.const 54600) "a") (data (i32.const 54603) "a") (data (i32.const 54606) "a") (data (i32.const 54609) "a") (data (i32.const 54612) "a") (data (i32.const 54615) "a") (data (i32.const 54618) "a") (data (i32.const 54621) "a") (data (i32.const 54624) "a") (data (i32.const 54627) "a") (data (i32.const 54630) "a") (data (i32.const 54633) "a") (data (i32.const 54636) "a") (data (i32.const 54639) "a") (data (i32.const 54642) "a") (data (i32.const 54645) "a") (data (i32.const 54648) "a") (data (i32.const 54651) "a") (data (i32.const 54654) "a") (data (i32.const 54657) "a") (data (i32.const 54660) "a") (data (i32.const 54663) "a") (data (i32.const 54666) "a") (data (i32.const 54669) "a") (data (i32.const 54672) "a") (data (i32.const 54675) "a") (data (i32.const 54678) "a") (data (i32.const 54681) "a") (data (i32.const 54684) "a") (data (i32.const 54687) "a") (data (i32.const 54690) "a") (data (i32.const 54693) "a") (data (i32.const 54696) "a") (data (i32.const 54699) "a") (data (i32.const 54702) "a") (data (i32.const 54705) "a") (data (i32.const 54708) "a") (data (i32.const 54711) "a") (data (i32.const 54714) "a") (data (i32.const 54717) "a") (data (i32.const 54720) "a") (data (i32.const 54723) "a") (data (i32.const 54726) "a") (data (i32.const 54729) "a") (data (i32.const 54732) "a") (data (i32.const 54735) "a") (data (i32.const 54738) "a") (data (i32.const 54741) "a") (data (i32.const 54744) "a") (data (i32.const 54747) "a") (data (i32.const 54750) "a") (data (i32.const 54753) "a") (data (i32.const 54756) "a") (data (i32.const 54759) "a") (data (i32.const 54762) "a") (data (i32.const 54765) "a") (data (i32.const 54768) "a") (data (i32.const 54771) "a") (data (i32.const 54774) "a") (data (i32.const 54777) "a") (data (i32.const 54780) "a") (data (i32.const 54783) "a") (data (i32.const 54786) "a") (data (i32.const 54789) "a") (data (i32.const 54792) "a") (data (i32.const 54795) "a") (data (i32.const 54798) "a") (data (i32.const 54801) "a") (data (i32.const 54804) "a") (data (i32.const 54807) "a") (data (i32.const 54810) "a") (data (i32.const 54813) "a") (data (i32.const 54816) "a") (data (i32.const 54819) "a") (data (i32.const 54822) "a") (data (i32.const 54825) "a") (data (i32.const 54828) "a") (data (i32.const 54831) "a") (data (i32.const 54834) "a") (data (i32.const 54837) "a") (data (i32.const 54840) "a") (data (i32.const 54843) "a") (data (i32.const 54846) "a") (data (i32.const 54849) "a") (data (i32.const 54852) "a") (data (i32.const 54855) "a") (data (i32.const 54858) "a") (data (i32.const 54861) "a") (data (i32.const 54864) "a") (data (i32.const 54867) "a") (data (i32.const 54870) "a") (data (i32.const 54873) "a") (data (i32.const 54876) "a") (data (i32.const 54879) "a") (data (i32.const 54882) "a") (data (i32.const 54885) "a") (data (i32.const 54888) "a") (data (i32.const 54891) "a") (data (i32.const 54894) "a") (data (i32.const 54897) "a") (data (i32.const 54900) "a") (data (i32.const 54903) "a") (data (i32.const 54906) "a") (data (i32.const 54909) "a") (data (i32.const 54912) "a") (data (i32.const 54915) "a") (data (i32.const 54918) "a") (data (i32.const 54921) "a") (data (i32.const 54924) "a") (data (i32.const 54927) "a") (data (i32.const 54930) "a") (data (i32.const 54933) "a") (data (i32.const 54936) "a") (data (i32.const 54939) "a") (data (i32.const 54942) "a") (data (i32.const 54945) "a") (data (i32.const 54948) "a") (data (i32.const 54951) "a") (data (i32.const 54954) "a") (data (i32.const 54957) "a") (data (i32.const 54960) "a") (data (i32.const 54963) "a") (data (i32.const 54966) "a") (data (i32.const 54969) "a") (data (i32.const 54972) "a") (data (i32.const 54975) "a") (data (i32.const 54978) "a") (data (i32.const 54981) "a") (data (i32.const 54984) "a") (data (i32.const 54987) "a") (data (i32.const 54990) "a") (data (i32.const 54993) "a") (data (i32.const 54996) "a") (data (i32.const 54999) "a") (data (i32.const 55002) "a") (data (i32.const 55005) "a") (data (i32.const 55008) "a") (data (i32.const 55011) "a") (data (i32.const 55014) "a") (data (i32.const 55017) "a") (data (i32.const 55020) "a") (data (i32.const 55023) "a") (data (i32.const 55026) "a") (data (i32.const 55029) "a") (data (i32.const 55032) "a") (data (i32.const 55035) "a") (data (i32.const 55038) "a") (data (i32.const 55041) "a") (data (i32.const 55044) "a") (data (i32.const 55047) "a") (data (i32.const 55050) "a") (data (i32.const 55053) "a") (data (i32.const 55056) "a") (data (i32.const 55059) "a") (data (i32.const 55062) "a") (data (i32.const 55065) "a") (data (i32.const 55068) "a") (data (i32.const 55071) "a") (data (i32.const 55074) "a") (data (i32.const 55077) "a") (data (i32.const 55080) "a") (data (i32.const 55083) "a") (data (i32.const 55086) "a") (data (i32.const 55089) "a") (data (i32.const 55092) "a") (data (i32.const 55095) "a") (data (i32.const 55098) "a") (data (i32.const 55101) "a") (data (i32.const 55104) "a") (data (i32.const 55107) "a") (data (i32.const 55110) "a") (data (i32.const 55113) "a") (data (i32.const 55116) "a") (data (i32.const 55119) "a") (data (i32.const 55122) "a") (data (i32.const 55125) "a") (data (i32.const 55128) "a") (data (i32.const 55131) "a") (data (i32.const 55134) "a") (data (i32.const 55137) "a") (data (i32.const 55140) "a") (data (i32.const 55143) "a") (data (i32.const 55146) "a") (data (i32.const 55149) "a") (data (i32.const 55152) "a") (data (i32.const 55155) "a") (data (i32.const 55158) "a") (data (i32.const 55161) "a") (data (i32.const 55164) "a") (data (i32.const 55167) "a") (data (i32.const 55170) "a") (data (i32.const 55173) "a") (data (i32.const 55176) "a") (data (i32.const 55179) "a") (data (i32.const 55182) "a") (data (i32.const 55185) "a") (data (i32.const 55188) "a") (data (i32.const 55191) "a") (data (i32.const 55194) "a") (data (i32.const 55197) "a") (data (i32.const 55200) "a") (data (i32.const 55203) "a") (data (i32.const 55206) "a") (data (i32.const 55209) "a") (data (i32.const 55212) "a") (data (i32.const 55215) "a") (data (i32.const 55218) "a") (data (i32.const 55221) "a") (data (i32.const 55224) "a") (data (i32.const 55227) "a") (data (i32.const 55230) "a") (data (i32.const 55233) "a") (data (i32.const 55236) "a") (data (i32.const 55239) "a") (data (i32.const 55242) "a") (data (i32.const 55245) "a") (data (i32.const 55248) "a") (data (i32.const 55251) "a") (data (i32.const 55254) "a") (data (i32.const 55257) "a") (data (i32.const 55260) "a") (data (i32.const 55263) "a") (data (i32.const 55266) "a") (data (i32.const 55269) "a") (data (i32.const 55272) "a") (data (i32.const 55275) "a") (data (i32.const 55278) "a") (data (i32.const 55281) "a") (data (i32.const 55284) "a") (data (i32.const 55287) "a") (data (i32.const 55290) "a") (data (i32.const 55293) "a") (data (i32.const 55296) "a") (data (i32.const 55299) "a") (data (i32.const 55302) "a") (data (i32.const 55305) "a") (data (i32.const 55308) "a") (data (i32.const 55311) "a") (data (i32.const 55314) "a") (data (i32.const 55317) "a") (data (i32.const 55320) "a") (data (i32.const 55323) "a") (data (i32.const 55326) "a") (data (i32.const 55329) "a") (data (i32.const 55332) "a") (data (i32.const 55335) "a") (data (i32.const 55338) "a") (data (i32.const 55341) "a") (data (i32.const 55344) "a") (data (i32.const 55347) "a") (data (i32.const 55350) "a") (data (i32.const 55353) "a") (data (i32.const 55356) "a") (data (i32.const 55359) "a") (data (i32.const 55362) "a") (data (i32.const 55365) "a") (data (i32.const 55368) "a") (data (i32.const 55371) "a") (data (i32.const 55374) "a") (data (i32.const 55377) "a") (data (i32.const 55380) "a") (data (i32.const 55383) "a") (data (i32.const 55386) "a") (data (i32.const 55389) "a") (data (i32.const 55392) "a") (data (i32.const 55395) "a") (data (i32.const 55398) "a") (data (i32.const 55401) "a") (data (i32.const 55404) "a") (data (i32.const 55407) "a") (data (i32.const 55410) "a") (data (i32.const 55413) "a") (data (i32.const 55416) "a") (data (i32.const 55419) "a") (data (i32.const 55422) "a") (data (i32.const 55425) "a") (data (i32.const 55428) "a") (data (i32.const 55431) "a") (data (i32.const 55434) "a") (data (i32.const 55437) "a") (data (i32.const 55440) "a") (data (i32.const 55443) "a") (data (i32.const 55446) "a") (data (i32.const 55449) "a") (data (i32.const 55452) "a") (data (i32.const 55455) "a") (data (i32.const 55458) "a") (data (i32.const 55461) "a") (data (i32.const 55464) "a") (data (i32.const 55467) "a") (data (i32.const 55470) "a") (data (i32.const 55473) "a") (data (i32.const 55476) "a") (data (i32.const 55479) "a") (data (i32.const 55482) "a") (data (i32.const 55485) "a") (data (i32.const 55488) "a") (data (i32.const 55491) "a") (data (i32.const 55494) "a") (data (i32.const 55497) "a") (data (i32.const 55500) "a") (data (i32.const 55503) "a") (data (i32.const 55506) "a") (data (i32.const 55509) "a") (data (i32.const 55512) "a") (data (i32.const 55515) "a") (data (i32.const 55518) "a") (data (i32.const 55521) "a") (data (i32.const 55524) "a") (data (i32.const 55527) "a") (data (i32.const 55530) "a") (data (i32.const 55533) "a") (data (i32.const 55536) "a") (data (i32.const 55539) "a") (data (i32.const 55542) "a") (data (i32.const 55545) "a") (data (i32.const 55548) "a") (data (i32.const 55551) "a") (data (i32.const 55554) "a") (data (i32.const 55557) "a") (data (i32.const 55560) "a") (data (i32.const 55563) "a") (data (i32.const 55566) "a") (data (i32.const 55569) "a") (data (i32.const 55572) "a") (data (i32.const 55575) "a") (data (i32.const 55578) "a") (data (i32.const 55581) "a") (data (i32.const 55584) "a") (data (i32.const 55587) "a") (data (i32.const 55590) "a") (data (i32.const 55593) "a") (data (i32.const 55596) "a") (data (i32.const 55599) "a") (data (i32.const 55602) "a") (data (i32.const 55605) "a") (data (i32.const 55608) "a") (data (i32.const 55611) "a") (data (i32.const 55614) "a") (data (i32.const 55617) "a") (data (i32.const 55620) "a") (data (i32.const 55623) "a") (data (i32.const 55626) "a") (data (i32.const 55629) "a") (data (i32.const 55632) "a") (data (i32.const 55635) "a") (data (i32.const 55638) "a") (data (i32.const 55641) "a") (data (i32.const 55644) "a") (data (i32.const 55647) "a") (data (i32.const 55650) "a") (data (i32.const 55653) "a") (data (i32.const 55656) "a") (data (i32.const 55659) "a") (data (i32.const 55662) "a") (data (i32.const 55665) "a") (data (i32.const 55668) "a") (data (i32.const 55671) "a") (data (i32.const 55674) "a") (data (i32.const 55677) "a") (data (i32.const 55680) "a") (data (i32.const 55683) "a") (data (i32.const 55686) "a") (data (i32.const 55689) "a") (data (i32.const 55692) "a") (data (i32.const 55695) "a") (data (i32.const 55698) "a") (data (i32.const 55701) "a") (data (i32.const 55704) "a") (data (i32.const 55707) "a") (data (i32.const 55710) "a") (data (i32.const 55713) "a") (data (i32.const 55716) "a") (data (i32.const 55719) "a") (data (i32.const 55722) "a") (data (i32.const 55725) "a") (data (i32.const 55728) "a") (data (i32.const 55731) "a") (data (i32.const 55734) "a") (data (i32.const 55737) "a") (data (i32.const 55740) "a") (data (i32.const 55743) "a") (data (i32.const 55746) "a") (data (i32.const 55749) "a") (data (i32.const 55752) "a") (data (i32.const 55755) "a") (data (i32.const 55758) "a") (data (i32.const 55761) "a") (data (i32.const 55764) "a") (data (i32.const 55767) "a") (data (i32.const 55770) "a") (data (i32.const 55773) "a") (data (i32.const 55776) "a") (data (i32.const 55779) "a") (data (i32.const 55782) "a") (data (i32.const 55785) "a") (data (i32.const 55788) "a") (data (i32.const 55791) "a") (data (i32.const 55794) "a") (data (i32.const 55797) "a") (data (i32.const 55800) "a") (data (i32.const 55803) "a") (data (i32.const 55806) "a") (data (i32.const 55809) "a") (data (i32.const 55812) "a") (data (i32.const 55815) "a") (data (i32.const 55818) "a") (data (i32.const 55821) "a") (data (i32.const 55824) "a") (data (i32.const 55827) "a") (data (i32.const 55830) "a") (data (i32.const 55833) "a") (data (i32.const 55836) "a") (data (i32.const 55839) "a") (data (i32.const 55842) "a") (data (i32.const 55845) "a") (data (i32.const 55848) "a") (data (i32.const 55851) "a") (data (i32.const 55854) "a") (data (i32.const 55857) "a") (data (i32.const 55860) "a") (data (i32.const 55863) "a") (data (i32.const 55866) "a") (data (i32.const 55869) "a") (data (i32.const 55872) "a") (data (i32.const 55875) "a") (data (i32.const 55878) "a") (data (i32.const 55881) "a") (data (i32.const 55884) "a") (data (i32.const 55887) "a") (data (i32.const 55890) "a") (data (i32.const 55893) "a") (data (i32.const 55896) "a") (data (i32.const 55899) "a") (data (i32.const 55902) "a") (data (i32.const 55905) "a") (data (i32.const 55908) "a") (data (i32.const 55911) "a") (data (i32.const 55914) "a") (data (i32.const 55917) "a") (data (i32.const 55920) "a") (data (i32.const 55923) "a") (data (i32.const 55926) "a") (data (i32.const 55929) "a") (data (i32.const 55932) "a") (data (i32.const 55935) "a") (data (i32.const 55938) "a") (data (i32.const 55941) "a") (data (i32.const 55944) "a") (data (i32.const 55947) "a") (data (i32.const 55950) "a") (data (i32.const 55953) "a") (data (i32.const 55956) "a") (data (i32.const 55959) "a") (data (i32.const 55962) "a") (data (i32.const 55965) "a") (data (i32.const 55968) "a") (data (i32.const 55971) "a") (data (i32.const 55974) "a") (data (i32.const 55977) "a") (data (i32.const 55980) "a") (data (i32.const 55983) "a") (data (i32.const 55986) "a") (data (i32.const 55989) "a") (data (i32.const 55992) "a") (data (i32.const 55995) "a") (data (i32.const 55998) "a") (data (i32.const 56001) "a") (data (i32.const 56004) "a") (data (i32.const 56007) "a") (data (i32.const 56010) "a") (data (i32.const 56013) "a") (data (i32.const 56016) "a") (data (i32.const 56019) "a") (data (i32.const 56022) "a") (data (i32.const 56025) "a") (data (i32.const 56028) "a") (data (i32.const 56031) "a") (data (i32.const 56034) "a") (data (i32.const 56037) "a") (data (i32.const 56040) "a") (data (i32.const 56043) "a") (data (i32.const 56046) "a") (data (i32.const 56049) "a") (data (i32.const 56052) "a") (data (i32.const 56055) "a") (data (i32.const 56058) "a") (data (i32.const 56061) "a") (data (i32.const 56064) "a") (data (i32.const 56067) "a") (data (i32.const 56070) "a") (data (i32.const 56073) "a") (data (i32.const 56076) "a") (data (i32.const 56079) "a") (data (i32.const 56082) "a") (data (i32.const 56085) "a") (data (i32.const 56088) "a") (data (i32.const 56091) "a") (data (i32.const 56094) "a") (data (i32.const 56097) "a") (data (i32.const 56100) "a") (data (i32.const 56103) "a") (data (i32.const 56106) "a") (data (i32.const 56109) "a") (data (i32.const 56112) "a") (data (i32.const 56115) "a") (data (i32.const 56118) "a") (data (i32.const 56121) "a") (data (i32.const 56124) "a") (data (i32.const 56127) "a") (data (i32.const 56130) "a") (data (i32.const 56133) "a") (data (i32.const 56136) "a") (data (i32.const 56139) "a") (data (i32.const 56142) "a") (data (i32.const 56145) "a") (data (i32.const 56148) "a") (data (i32.const 56151) "a") (data (i32.const 56154) "a") (data (i32.const 56157) "a") (data (i32.const 56160) "a") (data (i32.const 56163) "a") (data (i32.const 56166) "a") (data (i32.const 56169) "a") (data (i32.const 56172) "a") (data (i32.const 56175) "a") (data (i32.const 56178) "a") (data (i32.const 56181) "a") (data (i32.const 56184) "a") (data (i32.const 56187) "a") (data (i32.const 56190) "a") (data (i32.const 56193) "a") (data (i32.const 56196) "a") (data (i32.const 56199) "a") (data (i32.const 56202) "a") (data (i32.const 56205) "a") (data (i32.const 56208) "a") (data (i32.const 56211) "a") (data (i32.const 56214) "a") (data (i32.const 56217) "a") (data (i32.const 56220) "a") (data (i32.const 56223) "a") (data (i32.const 56226) "a") (data (i32.const 56229) "a") (data (i32.const 56232) "a") (data (i32.const 56235) "a") (data (i32.const 56238) "a") (data (i32.const 56241) "a") (data (i32.const 56244) "a") (data (i32.const 56247) "a") (data (i32.const 56250) "a") (data (i32.const 56253) "a") (data (i32.const 56256) "a") (data (i32.const 56259) "a") (data (i32.const 56262) "a") (data (i32.const 56265) "a") (data (i32.const 56268) "a") (data (i32.const 56271) "a") (data (i32.const 56274) "a") (data (i32.const 56277) "a") (data (i32.const 56280) "a") (data (i32.const 56283) "a") (data (i32.const 56286) "a") (data (i32.const 56289) "a") (data (i32.const 56292) "a") (data (i32.const 56295) "a") (data (i32.const 56298) "a") (data (i32.const 56301) "a") (data (i32.const 56304) "a") (data (i32.const 56307) "a") (data (i32.const 56310) "a") (data (i32.const 56313) "a") (data (i32.const 56316) "a") (data (i32.const 56319) "a") (data (i32.const 56322) "a") (data (i32.const 56325) "a") (data (i32.const 56328) "a") (data (i32.const 56331) "a") (data (i32.const 56334) "a") (data (i32.const 56337) "a") (data (i32.const 56340) "a") (data (i32.const 56343) "a") (data (i32.const 56346) "a") (data (i32.const 56349) "a") (data (i32.const 56352) "a") (data (i32.const 56355) "a") (data (i32.const 56358) "a") (data (i32.const 56361) "a") (data (i32.const 56364) "a") (data (i32.const 56367) "a") (data (i32.const 56370) "a") (data (i32.const 56373) "a") (data (i32.const 56376) "a") (data (i32.const 56379) "a") (data (i32.const 56382) "a") (data (i32.const 56385) "a") (data (i32.const 56388) "a") (data (i32.const 56391) "a") (data (i32.const 56394) "a") (data (i32.const 56397) "a") (data (i32.const 56400) "a") (data (i32.const 56403) "a") (data (i32.const 56406) "a") (data (i32.const 56409) "a") (data (i32.const 56412) "a") (data (i32.const 56415) "a") (data (i32.const 56418) "a") (data (i32.const 56421) "a") (data (i32.const 56424) "a") (data (i32.const 56427) "a") (data (i32.const 56430) "a") (data (i32.const 56433) "a") (data (i32.const 56436) "a") (data (i32.const 56439) "a") (data (i32.const 56442) "a") (data (i32.const 56445) "a") (data (i32.const 56448) "a") (data (i32.const 56451) "a") (data (i32.const 56454) "a") (data (i32.const 56457) "a") (data (i32.const 56460) "a") (data (i32.const 56463) "a") (data (i32.const 56466) "a") (data (i32.const 56469) "a") (data (i32.const 56472) "a") (data (i32.const 56475) "a") (data (i32.const 56478) "a") (data (i32.const 56481) "a") (data (i32.const 56484) "a") (data (i32.const 56487) "a") (data (i32.const 56490) "a") (data (i32.const 56493) "a") (data (i32.const 56496) "a") (data (i32.const 56499) "a") (data (i32.const 56502) "a") (data (i32.const 56505) "a") (data (i32.const 56508) "a") (data (i32.const 56511) "a") (data (i32.const 56514) "a") (data (i32.const 56517) "a") (data (i32.const 56520) "a") (data (i32.const 56523) "a") (data (i32.const 56526) "a") (data (i32.const 56529) "a") (data (i32.const 56532) "a") (data (i32.const 56535) "a") (data (i32.const 56538) "a") (data (i32.const 56541) "a") (data (i32.const 56544) "a") (data (i32.const 56547) "a") (data (i32.const 56550) "a") (data (i32.const 56553) "a") (data (i32.const 56556) "a") (data (i32.const 56559) "a") (data (i32.const 56562) "a") (data (i32.const 56565) "a") (data (i32.const 56568) "a") (data (i32.const 56571) "a") (data (i32.const 56574) "a") (data (i32.const 56577) "a") (data (i32.const 56580) "a") (data (i32.const 56583) "a") (data (i32.const 56586) "a") (data (i32.const 56589) "a") (data (i32.const 56592) "a") (data (i32.const 56595) "a") (data (i32.const 56598) "a") (data (i32.const 56601) "a") (data (i32.const 56604) "a") (data (i32.const 56607) "a") (data (i32.const 56610) "a") (data (i32.const 56613) "a") (data (i32.const 56616) "a") (data (i32.const 56619) "a") (data (i32.const 56622) "a") (data (i32.const 56625) "a") (data (i32.const 56628) "a") (data (i32.const 56631) "a") (data (i32.const 56634) "a") (data (i32.const 56637) "a") (data (i32.const 56640) "a") (data (i32.const 56643) "a") (data (i32.const 56646) "a") (data (i32.const 56649) "a") (data (i32.const 56652) "a") (data (i32.const 56655) "a") (data (i32.const 56658) "a") (data (i32.const 56661) "a") (data (i32.const 56664) "a") (data (i32.const 56667) "a") (data (i32.const 56670) "a") (data (i32.const 56673) "a") (data (i32.const 56676) "a") (data (i32.const 56679) "a") (data (i32.const 56682) "a") (data (i32.const 56685) "a") (data (i32.const 56688) "a") (data (i32.const 56691) "a") (data (i32.const 56694) "a") (data (i32.const 56697) "a") (data (i32.const 56700) "a") (data (i32.const 56703) "a") (data (i32.const 56706) "a") (data (i32.const 56709) "a") (data (i32.const 56712) "a") (data (i32.const 56715) "a") (data (i32.const 56718) "a") (data (i32.const 56721) "a") (data (i32.const 56724) "a") (data (i32.const 56727) "a") (data (i32.const 56730) "a") (data (i32.const 56733) "a") (data (i32.const 56736) "a") (data (i32.const 56739) "a") (data (i32.const 56742) "a") (data (i32.const 56745) "a") (data (i32.const 56748) "a") (data (i32.const 56751) "a") (data (i32.const 56754) "a") (data (i32.const 56757) "a") (data (i32.const 56760) "a") (data (i32.const 56763) "a") (data (i32.const 56766) "a") (data (i32.const 56769) "a") (data (i32.const 56772) "a") (data (i32.const 56775) "a") (data (i32.const 56778) "a") (data (i32.const 56781) "a") (data (i32.const 56784) "a") (data (i32.const 56787) "a") (data (i32.const 56790) "a") (data (i32.const 56793) "a") (data (i32.const 56796) "a") (data (i32.const 56799) "a") (data (i32.const 56802) "a") (data (i32.const 56805) "a") (data (i32.const 56808) "a") (data (i32.const 56811) "a") (data (i32.const 56814) "a") (data (i32.const 56817) "a") (data (i32.const 56820) "a") (data (i32.const 56823) "a") (data (i32.const 56826) "a") (data (i32.const 56829) "a") (data (i32.const 56832) "a") (data (i32.const 56835) "a") (data (i32.const 56838) "a") (data (i32.const 56841) "a") (data (i32.const 56844) "a") (data (i32.const 56847) "a") (data (i32.const 56850) "a") (data (i32.const 56853) "a") (data (i32.const 56856) "a") (data (i32.const 56859) "a") (data (i32.const 56862) "a") (data (i32.const 56865) "a") (data (i32.const 56868) "a") (data (i32.const 56871) "a") (data (i32.const 56874) "a") (data (i32.const 56877) "a") (data (i32.const 56880) "a") (data (i32.const 56883) "a") (data (i32.const 56886) "a") (data (i32.const 56889) "a") (data (i32.const 56892) "a") (data (i32.const 56895) "a") (data (i32.const 56898) "a") (data (i32.const 56901) "a") (data (i32.const 56904) "a") (data (i32.const 56907) "a") (data (i32.const 56910) "a") (data (i32.const 56913) "a") (data (i32.const 56916) "a") (data (i32.const 56919) "a") (data (i32.const 56922) "a") (data (i32.const 56925) "a") (data (i32.const 56928) "a") (data (i32.const 56931) "a") (data (i32.const 56934) "a") (data (i32.const 56937) "a") (data (i32.const 56940) "a") (data (i32.const 56943) "a") (data (i32.const 56946) "a") (data (i32.const 56949) "a") (data (i32.const 56952) "a") (data (i32.const 56955) "a") (data (i32.const 56958) "a") (data (i32.const 56961) "a") (data (i32.const 56964) "a") (data (i32.const 56967) "a") (data (i32.const 56970) "a") (data (i32.const 56973) "a") (data (i32.const 56976) "a") (data (i32.const 56979) "a") (data (i32.const 56982) "a") (data (i32.const 56985) "a") (data (i32.const 56988) "a") (data (i32.const 56991) "a") (data (i32.const 56994) "a") (data (i32.const 56997) "a") (data (i32.const 57000) "a") (data (i32.const 57003) "a") (data (i32.const 57006) "a") (data (i32.const 57009) "a") (data (i32.const 57012) "a") (data (i32.const 57015) "a") (data (i32.const 57018) "a") (data (i32.const 57021) "a") (data (i32.const 57024) "a") (data (i32.const 57027) "a") (data (i32.const 57030) "a") (data (i32.const 57033) "a") (data (i32.const 57036) "a") (data (i32.const 57039) "a") (data (i32.const 57042) "a") (data (i32.const 57045) "a") (data (i32.const 57048) "a") (data (i32.const 57051) "a") (data (i32.const 57054) "a") (data (i32.const 57057) "a") (data (i32.const 57060) "a") (data (i32.const 57063) "a") (data (i32.const 57066) "a") (data (i32.const 57069) "a") (data (i32.const 57072) "a") (data (i32.const 57075) "a") (data (i32.const 57078) "a") (data (i32.const 57081) "a") (data (i32.const 57084) "a") (data (i32.const 57087) "a") (data (i32.const 57090) "a") (data (i32.const 57093) "a") (data (i32.const 57096) "a") (data (i32.const 57099) "a") (data (i32.const 57102) "a") (data (i32.const 57105) "a") (data (i32.const 57108) "a") (data (i32.const 57111) "a") (data (i32.const 57114) "a") (data (i32.const 57117) "a") (data (i32.const 57120) "a") (data (i32.const 57123) "a") (data (i32.const 57126) "a") (data (i32.const 57129) "a") (data (i32.const 57132) "a") (data (i32.const 57135) "a") (data (i32.const 57138) "a") (data (i32.const 57141) "a") (data (i32.const 57144) "a") (data (i32.const 57147) "a") (data (i32.const 57150) "a") (data (i32.const 57153) "a") (data (i32.const 57156) "a") (data (i32.const 57159) "a") (data (i32.const 57162) "a") (data (i32.const 57165) "a") (data (i32.const 57168) "a") (data (i32.const 57171) "a") (data (i32.const 57174) "a") (data (i32.const 57177) "a") (data (i32.const 57180) "a") (data (i32.const 57183) "a") (data (i32.const 57186) "a") (data (i32.const 57189) "a") (data (i32.const 57192) "a") (data (i32.const 57195) "a") (data (i32.const 57198) "a") (data (i32.const 57201) "a") (data (i32.const 57204) "a") (data (i32.const 57207) "a") (data (i32.const 57210) "a") (data (i32.const 57213) "a") (data (i32.const 57216) "a") (data (i32.const 57219) "a") (data (i32.const 57222) "a") (data (i32.const 57225) "a") (data (i32.const 57228) "a") (data (i32.const 57231) "a") (data (i32.const 57234) "a") (data (i32.const 57237) "a") (data (i32.const 57240) "a") (data (i32.const 57243) "a") (data (i32.const 57246) "a") (data (i32.const 57249) "a") (data (i32.const 57252) "a") (data (i32.const 57255) "a") (data (i32.const 57258) "a") (data (i32.const 57261) "a") (data (i32.const 57264) "a") (data (i32.const 57267) "a") (data (i32.const 57270) "a") (data (i32.const 57273) "a") (data (i32.const 57276) "a") (data (i32.const 57279) "a") (data (i32.const 57282) "a") (data (i32.const 57285) "a") (data (i32.const 57288) "a") (data (i32.const 57291) "a") (data (i32.const 57294) "a") (data (i32.const 57297) "a") (data (i32.const 57300) "a") (data (i32.const 57303) "a") (data (i32.const 57306) "a") (data (i32.const 57309) "a") (data (i32.const 57312) "a") (data (i32.const 57315) "a") (data (i32.const 57318) "a") (data (i32.const 57321) "a") (data (i32.const 57324) "a") (data (i32.const 57327) "a") (data (i32.const 57330) "a") (data (i32.const 57333) "a") (data (i32.const 57336) "a") (data (i32.const 57339) "a") (data (i32.const 57342) "a") (data (i32.const 57345) "a") (data (i32.const 57348) "a") (data (i32.const 57351) "a") (data (i32.const 57354) "a") (data (i32.const 57357) "a") (data (i32.const 57360) "a") (data (i32.const 57363) "a") (data (i32.const 57366) "a") (data (i32.const 57369) "a") (data (i32.const 57372) "a") (data (i32.const 57375) "a") (data (i32.const 57378) "a") (data (i32.const 57381) "a") (data (i32.const 57384) "a") (data (i32.const 57387) "a") (data (i32.const 57390) "a") (data (i32.const 57393) "a") (data (i32.const 57396) "a") (data (i32.const 57399) "a") (data (i32.const 57402) "a") (data (i32.const 57405) "a") (data (i32.const 57408) "a") (data (i32.const 57411) "a") (data (i32.const 57414) "a") (data (i32.const 57417) "a") (data (i32.const 57420) "a") (data (i32.const 57423) "a") (data (i32.const 57426) "a") (data (i32.const 57429) "a") (data (i32.const 57432) "a") (data (i32.const 57435) "a") (data (i32.const 57438) "a") (data (i32.const 57441) "a") (data (i32.const 57444) "a") (data (i32.const 57447) "a") (data (i32.const 57450) "a") (data (i32.const 57453) "a") (data (i32.const 57456) "a") (data (i32.const 57459) "a") (data (i32.const 57462) "a") (data (i32.const 57465) "a") (data (i32.const 57468) "a") (data (i32.const 57471) "a") (data (i32.const 57474) "a") (data (i32.const 57477) "a") (data (i32.const 57480) "a") (data (i32.const 57483) "a") (data (i32.const 57486) "a") (data (i32.const 57489) "a") (data (i32.const 57492) "a") (data (i32.const 57495) "a") (data (i32.const 57498) "a") (data (i32.const 57501) "a") (data (i32.const 57504) "a") (data (i32.const 57507) "a") (data (i32.const 57510) "a") (data (i32.const 57513) "a") (data (i32.const 57516) "a") (data (i32.const 57519) "a") (data (i32.const 57522) "a") (data (i32.const 57525) "a") (data (i32.const 57528) "a") (data (i32.const 57531) "a") (data (i32.const 57534) "a") (data (i32.const 57537) "a") (data (i32.const 57540) "a") (data (i32.const 57543) "a") (data (i32.const 57546) "a") (data (i32.const 57549) "a") (data (i32.const 57552) "a") (data (i32.const 57555) "a") (data (i32.const 57558) "a") (data (i32.const 57561) "a") (data (i32.const 57564) "a") (data (i32.const 57567) "a") (data (i32.const 57570) "a") (data (i32.const 57573) "a") (data (i32.const 57576) "a") (data (i32.const 57579) "a") (data (i32.const 57582) "a") (data (i32.const 57585) "a") (data (i32.const 57588) "a") (data (i32.const 57591) "a") (data (i32.const 57594) "a") (data (i32.const 57597) "a") (data (i32.const 57600) "a") (data (i32.const 57603) "a") (data (i32.const 57606) "a") (data (i32.const 57609) "a") (data (i32.const 57612) "a") (data (i32.const 57615) "a") (data (i32.const 57618) "a") (data (i32.const 57621) "a") (data (i32.const 57624) "a") (data (i32.const 57627) "a") (data (i32.const 57630) "a") (data (i32.const 57633) "a") (data (i32.const 57636) "a") (data (i32.const 57639) "a") (data (i32.const 57642) "a") (data (i32.const 57645) "a") (data (i32.const 57648) "a") (data (i32.const 57651) "a") (data (i32.const 57654) "a") (data (i32.const 57657) "a") (data (i32.const 57660) "a") (data (i32.const 57663) "a") (data (i32.const 57666) "a") (data (i32.const 57669) "a") (data (i32.const 57672) "a") (data (i32.const 57675) "a") (data (i32.const 57678) "a") (data (i32.const 57681) "a") (data (i32.const 57684) "a") (data (i32.const 57687) "a") (data (i32.const 57690) "a") (data (i32.const 57693) "a") (data (i32.const 57696) "a") (data (i32.const 57699) "a") (data (i32.const 57702) "a") (data (i32.const 57705) "a") (data (i32.const 57708) "a") (data (i32.const 57711) "a") (data (i32.const 57714) "a") (data (i32.const 57717) "a") (data (i32.const 57720) "a") (data (i32.const 57723) "a") (data (i32.const 57726) "a") (data (i32.const 57729) "a") (data (i32.const 57732) "a") (data (i32.const 57735) "a") (data (i32.const 57738) "a") (data (i32.const 57741) "a") (data (i32.const 57744) "a") (data (i32.const 57747) "a") (data (i32.const 57750) "a") (data (i32.const 57753) "a") (data (i32.const 57756) "a") (data (i32.const 57759) "a") (data (i32.const 57762) "a") (data (i32.const 57765) "a") (data (i32.const 57768) "a") (data (i32.const 57771) "a") (data (i32.const 57774) "a") (data (i32.const 57777) "a") (data (i32.const 57780) "a") (data (i32.const 57783) "a") (data (i32.const 57786) "a") (data (i32.const 57789) "a") (data (i32.const 57792) "a") (data (i32.const 57795) "a") (data (i32.const 57798) "a") (data (i32.const 57801) "a") (data (i32.const 57804) "a") (data (i32.const 57807) "a") (data (i32.const 57810) "a") (data (i32.const 57813) "a") (data (i32.const 57816) "a") (data (i32.const 57819) "a") (data (i32.const 57822) "a") (data (i32.const 57825) "a") (data (i32.const 57828) "a") (data (i32.const 57831) "a") (data (i32.const 57834) "a") (data (i32.const 57837) "a") (data (i32.const 57840) "a") (data (i32.const 57843) "a") (data (i32.const 57846) "a") (data (i32.const 57849) "a") (data (i32.const 57852) "a") (data (i32.const 57855) "a") (data (i32.const 57858) "a") (data (i32.const 57861) "a") (data (i32.const 57864) "a") (data (i32.const 57867) "a") (data (i32.const 57870) "a") (data (i32.const 57873) "a") (data (i32.const 57876) "a") (data (i32.const 57879) "a") (data (i32.const 57882) "a") (data (i32.const 57885) "a") (data (i32.const 57888) "a") (data (i32.const 57891) "a") (data (i32.const 57894) "a") (data (i32.const 57897) "a") (data (i32.const 57900) "a") (data (i32.const 57903) "a") (data (i32.const 57906) "a") (data (i32.const 57909) "a") (data (i32.const 57912) "a") (data (i32.const 57915) "a") (data (i32.const 57918) "a") (data (i32.const 57921) "a") (data (i32.const 57924) "a") (data (i32.const 57927) "a") (data (i32.const 57930) "a") (data (i32.const 57933) "a") (data (i32.const 57936) "a") (data (i32.const 57939) "a") (data (i32.const 57942) "a") (data (i32.const 57945) "a") (data (i32.const 57948) "a") (data (i32.const 57951) "a") (data (i32.const 57954) "a") (data (i32.const 57957) "a") (data (i32.const 57960) "a") (data (i32.const 57963) "a") (data (i32.const 57966) "a") (data (i32.const 57969) "a") (data (i32.const 57972) "a") (data (i32.const 57975) "a") (data (i32.const 57978) "a") (data (i32.const 57981) "a") (data (i32.const 57984) "a") (data (i32.const 57987) "a") (data (i32.const 57990) "a") (data (i32.const 57993) "a") (data (i32.const 57996) "a") (data (i32.const 57999) "a") (data (i32.const 58002) "a") (data (i32.const 58005) "a") (data (i32.const 58008) "a") (data (i32.const 58011) "a") (data (i32.const 58014) "a") (data (i32.const 58017) "a") (data (i32.const 58020) "a") (data (i32.const 58023) "a") (data (i32.const 58026) "a") (data (i32.const 58029) "a") (data (i32.const 58032) "a") (data (i32.const 58035) "a") (data (i32.const 58038) "a") (data (i32.const 58041) "a") (data (i32.const 58044) "a") (data (i32.const 58047) "a") (data (i32.const 58050) "a") (data (i32.const 58053) "a") (data (i32.const 58056) "a") (data (i32.const 58059) "a") (data (i32.const 58062) "a") (data (i32.const 58065) "a") (data (i32.const 58068) "a") (data (i32.const 58071) "a") (data (i32.const 58074) "a") (data (i32.const 58077) "a") (data (i32.const 58080) "a") (data (i32.const 58083) "a") (data (i32.const 58086) "a") (data (i32.const 58089) "a") (data (i32.const 58092) "a") (data (i32.const 58095) "a") (data (i32.const 58098) "a") (data (i32.const 58101) "a") (data (i32.const 58104) "a") (data (i32.const 58107) "a") (data (i32.const 58110) "a") (data (i32.const 58113) "a") (data (i32.const 58116) "a") (data (i32.const 58119) "a") (data (i32.const 58122) "a") (data (i32.const 58125) "a") (data (i32.const 58128) "a") (data (i32.const 58131) "a") (data (i32.const 58134) "a") (data (i32.const 58137) "a") (data (i32.const 58140) "a") (data (i32.const 58143) "a") (data (i32.const 58146) "a") (data (i32.const 58149) "a") (data (i32.const 58152) "a") (data (i32.const 58155) "a") (data (i32.const 58158) "a") (data (i32.const 58161) "a") (data (i32.const 58164) "a") (data (i32.const 58167) "a") (data (i32.const 58170) "a") (data (i32.const 58173) "a") (data (i32.const 58176) "a") (data (i32.const 58179) "a") (data (i32.const 58182) "a") (data (i32.const 58185) "a") (data (i32.const 58188) "a") (data (i32.const 58191) "a") (data (i32.const 58194) "a") (data (i32.const 58197) "a") (data (i32.const 58200) "a") (data (i32.const 58203) "a") (data (i32.const 58206) "a") (data (i32.const 58209) "a") (data (i32.const 58212) "a") (data (i32.const 58215) "a") (data (i32.const 58218) "a") (data (i32.const 58221) "a") (data (i32.const 58224) "a") (data (i32.const 58227) "a") (data (i32.const 58230) "a") (data (i32.const 58233) "a") (data (i32.const 58236) "a") (data (i32.const 58239) "a") (data (i32.const 58242) "a") (data (i32.const 58245) "a") (data (i32.const 58248) "a") (data (i32.const 58251) "a") (data (i32.const 58254) "a") (data (i32.const 58257) "a") (data (i32.const 58260) "a") (data (i32.const 58263) "a") (data (i32.const 58266) "a") (data (i32.const 58269) "a") (data (i32.const 58272) "a") (data (i32.const 58275) "a") (data (i32.const 58278) "a") (data (i32.const 58281) "a") (data (i32.const 58284) "a") (data (i32.const 58287) "a") (data (i32.const 58290) "a") (data (i32.const 58293) "a") (data (i32.const 58296) "a") (data (i32.const 58299) "a") (data (i32.const 58302) "a") (data (i32.const 58305) "a") (data (i32.const 58308) "a") (data (i32.const 58311) "a") (data (i32.const 58314) "a") (data (i32.const 58317) "a") (data (i32.const 58320) "a") (data (i32.const 58323) "a") (data (i32.const 58326) "a") (data (i32.const 58329) "a") (data (i32.const 58332) "a") (data (i32.const 58335) "a") (data (i32.const 58338) "a") (data (i32.const 58341) "a") (data (i32.const 58344) "a") (data (i32.const 58347) "a") (data (i32.const 58350) "a") (data (i32.const 58353) "a") (data (i32.const 58356) "a") (data (i32.const 58359) "a") (data (i32.const 58362) "a") (data (i32.const 58365) "a") (data (i32.const 58368) "a") (data (i32.const 58371) "a") (data (i32.const 58374) "a") (data (i32.const 58377) "a") (data (i32.const 58380) "a") (data (i32.const 58383) "a") (data (i32.const 58386) "a") (data (i32.const 58389) "a") (data (i32.const 58392) "a") (data (i32.const 58395) "a") (data (i32.const 58398) "a") (data (i32.const 58401) "a") (data (i32.const 58404) "a") (data (i32.const 58407) "a") (data (i32.const 58410) "a") (data (i32.const 58413) "a") (data (i32.const 58416) "a") (data (i32.const 58419) "a") (data (i32.const 58422) "a") (data (i32.const 58425) "a") (data (i32.const 58428) "a") (data (i32.const 58431) "a") (data (i32.const 58434) "a") (data (i32.const 58437) "a") (data (i32.const 58440) "a") (data (i32.const 58443) "a") (data (i32.const 58446) "a") (data (i32.const 58449) "a") (data (i32.const 58452) "a") (data (i32.const 58455) "a") (data (i32.const 58458) "a") (data (i32.const 58461) "a") (data (i32.const 58464) "a") (data (i32.const 58467) "a") (data (i32.const 58470) "a") (data (i32.const 58473) "a") (data (i32.const 58476) "a") (data (i32.const 58479) "a") (data (i32.const 58482) "a") (data (i32.const 58485) "a") (data (i32.const 58488) "a") (data (i32.const 58491) "a") (data (i32.const 58494) "a") (data (i32.const 58497) "a") (data (i32.const 58500) "a") (data (i32.const 58503) "a") (data (i32.const 58506) "a") (data (i32.const 58509) "a") (data (i32.const 58512) "a") (data (i32.const 58515) "a") (data (i32.const 58518) "a") (data (i32.const 58521) "a") (data (i32.const 58524) "a") (data (i32.const 58527) "a") (data (i32.const 58530) "a") (data (i32.const 58533) "a") (data (i32.const 58536) "a") (data (i32.const 58539) "a") (data (i32.const 58542) "a") (data (i32.const 58545) "a") (data (i32.const 58548) "a") (data (i32.const 58551) "a") (data (i32.const 58554) "a") (data (i32.const 58557) "a") (data (i32.const 58560) "a") (data (i32.const 58563) "a") (data (i32.const 58566) "a") (data (i32.const 58569) "a") (data (i32.const 58572) "a") (data (i32.const 58575) "a") (data (i32.const 58578) "a") (data (i32.const 58581) "a") (data (i32.const 58584) "a") (data (i32.const 58587) "a") (data (i32.const 58590) "a") (data (i32.const 58593) "a") (data (i32.const 58596) "a") (data (i32.const 58599) "a") (data (i32.const 58602) "a") (data (i32.const 58605) "a") (data (i32.const 58608) "a") (data (i32.const 58611) "a") (data (i32.const 58614) "a") (data (i32.const 58617) "a") (data (i32.const 58620) "a") (data (i32.const 58623) "a") (data (i32.const 58626) "a") (data (i32.const 58629) "a") (data (i32.const 58632) "a") (data (i32.const 58635) "a") (data (i32.const 58638) "a") (data (i32.const 58641) "a") (data (i32.const 58644) "a") (data (i32.const 58647) "a") (data (i32.const 58650) "a") (data (i32.const 58653) "a") (data (i32.const 58656) "a") (data (i32.const 58659) "a") (data (i32.const 58662) "a") (data (i32.const 58665) "a") (data (i32.const 58668) "a") (data (i32.const 58671) "a") (data (i32.const 58674) "a") (data (i32.const 58677) "a") (data (i32.const 58680) "a") (data (i32.const 58683) "a") (data (i32.const 58686) "a") (data (i32.const 58689) "a") (data (i32.const 58692) "a") (data (i32.const 58695) "a") (data (i32.const 58698) "a") (data (i32.const 58701) "a") (data (i32.const 58704) "a") (data (i32.const 58707) "a") (data (i32.const 58710) "a") (data (i32.const 58713) "a") (data (i32.const 58716) "a") (data (i32.const 58719) "a") (data (i32.const 58722) "a") (data (i32.const 58725) "a") (data (i32.const 58728) "a") (data (i32.const 58731) "a") (data (i32.const 58734) "a") (data (i32.const 58737) "a") (data (i32.const 58740) "a") (data (i32.const 58743) "a") (data (i32.const 58746) "a") (data (i32.const 58749) "a") (data (i32.const 58752) "a") (data (i32.const 58755) "a") (data (i32.const 58758) "a") (data (i32.const 58761) "a") (data (i32.const 58764) "a") (data (i32.const 58767) "a") (data (i32.const 58770) "a") (data (i32.const 58773) "a") (data (i32.const 58776) "a") (data (i32.const 58779) "a") (data (i32.const 58782) "a") (data (i32.const 58785) "a") (data (i32.const 58788) "a") (data (i32.const 58791) "a") (data (i32.const 58794) "a") (data (i32.const 58797) "a") (data (i32.const 58800) "a") (data (i32.const 58803) "a") (data (i32.const 58806) "a") (data (i32.const 58809) "a") (data (i32.const 58812) "a") (data (i32.const 58815) "a") (data (i32.const 58818) "a") (data (i32.const 58821) "a") (data (i32.const 58824) "a") (data (i32.const 58827) "a") (data (i32.const 58830) "a") (data (i32.const 58833) "a") (data (i32.const 58836) "a") (data (i32.const 58839) "a") (data (i32.const 58842) "a") (data (i32.const 58845) "a") (data (i32.const 58848) "a") (data (i32.const 58851) "a") (data (i32.const 58854) "a") (data (i32.const 58857) "a") (data (i32.const 58860) "a") (data (i32.const 58863) "a") (data (i32.const 58866) "a") (data (i32.const 58869) "a") (data (i32.const 58872) "a") (data (i32.const 58875) "a") (data (i32.const 58878) "a") (data (i32.const 58881) "a") (data (i32.const 58884) "a") (data (i32.const 58887) "a") (data (i32.const 58890) "a") (data (i32.const 58893) "a") (data (i32.const 58896) "a") (data (i32.const 58899) "a") (data (i32.const 58902) "a") (data (i32.const 58905) "a") (data (i32.const 58908) "a") (data (i32.const 58911) "a") (data (i32.const 58914) "a") (data (i32.const 58917) "a") (data (i32.const 58920) "a") (data (i32.const 58923) "a") (data (i32.const 58926) "a") (data (i32.const 58929) "a") (data (i32.const 58932) "a") (data (i32.const 58935) "a") (data (i32.const 58938) "a") (data (i32.const 58941) "a") (data (i32.const 58944) "a") (data (i32.const 58947) "a") (data (i32.const 58950) "a") (data (i32.const 58953) "a") (data (i32.const 58956) "a") (data (i32.const 58959) "a") (data (i32.const 58962) "a") (data (i32.const 58965) "a") (data (i32.const 58968) "a") (data (i32.const 58971) "a") (data (i32.const 58974) "a") (data (i32.const 58977) "a") (data (i32.const 58980) "a") (data (i32.const 58983) "a") (data (i32.const 58986) "a") (data (i32.const 58989) "a") (data (i32.const 58992) "a") (data (i32.const 58995) "a") (data (i32.const 58998) "a") (data (i32.const 59001) "a") (data (i32.const 59004) "a") (data (i32.const 59007) "a") (data (i32.const 59010) "a") (data (i32.const 59013) "a") (data (i32.const 59016) "a") (data (i32.const 59019) "a") (data (i32.const 59022) "a") (data (i32.const 59025) "a") (data (i32.const 59028) "a") (data (i32.const 59031) "a") (data (i32.const 59034) "a") (data (i32.const 59037) "a") (data (i32.const 59040) "a") (data (i32.const 59043) "a") (data (i32.const 59046) "a") (data (i32.const 59049) "a") (data (i32.const 59052) "a") (data (i32.const 59055) "a") (data (i32.const 59058) "a") (data (i32.const 59061) "a") (data (i32.const 59064) "a") (data (i32.const 59067) "a") (data (i32.const 59070) "a") (data (i32.const 59073) "a") (data (i32.const 59076) "a") (data (i32.const 59079) "a") (data (i32.const 59082) "a") (data (i32.const 59085) "a") (data (i32.const 59088) "a") (data (i32.const 59091) "a") (data (i32.const 59094) "a") (data (i32.const 59097) "a") (data (i32.const 59100) "a") (data (i32.const 59103) "a") (data (i32.const 59106) "a") (data (i32.const 59109) "a") (data (i32.const 59112) "a") (data (i32.const 59115) "a") (data (i32.const 59118) "a") (data (i32.const 59121) "a") (data (i32.const 59124) "a") (data (i32.const 59127) "a") (data (i32.const 59130) "a") (data (i32.const 59133) "a") (data (i32.const 59136) "a") (data (i32.const 59139) "a") (data (i32.const 59142) "a") (data (i32.const 59145) "a") (data (i32.const 59148) "a") (data (i32.const 59151) "a") (data (i32.const 59154) "a") (data (i32.const 59157) "a") (data (i32.const 59160) "a") (data (i32.const 59163) "a") (data (i32.const 59166) "a") (data (i32.const 59169) "a") (data (i32.const 59172) "a") (data (i32.const 59175) "a") (data (i32.const 59178) "a") (data (i32.const 59181) "a") (data (i32.const 59184) "a") (data (i32.const 59187) "a") (data (i32.const 59190) "a") (data (i32.const 59193) "a") (data (i32.const 59196) "a") (data (i32.const 59199) "a") (data (i32.const 59202) "a") (data (i32.const 59205) "a") (data (i32.const 59208) "a") (data (i32.const 59211) "a") (data (i32.const 59214) "a") (data (i32.const 59217) "a") (data (i32.const 59220) "a") (data (i32.const 59223) "a") (data (i32.const 59226) "a") (data (i32.const 59229) "a") (data (i32.const 59232) "a") (data (i32.const 59235) "a") (data (i32.const 59238) "a") (data (i32.const 59241) "a") (data (i32.const 59244) "a") (data (i32.const 59247) "a") (data (i32.const 59250) "a") (data (i32.const 59253) "a") (data (i32.const 59256) "a") (data (i32.const 59259) "a") (data (i32.const 59262) "a") (data (i32.const 59265) "a") (data (i32.const 59268) "a") (data (i32.const 59271) "a") (data (i32.const 59274) "a") (data (i32.const 59277) "a") (data (i32.const 59280) "a") (data (i32.const 59283) "a") (data (i32.const 59286) "a") (data (i32.const 59289) "a") (data (i32.const 59292) "a") (data (i32.const 59295) "a") (data (i32.const 59298) "a") (data (i32.const 59301) "a") (data (i32.const 59304) "a") (data (i32.const 59307) "a") (data (i32.const 59310) "a") (data (i32.const 59313) "a") (data (i32.const 59316) "a") (data (i32.const 59319) "a") (data (i32.const 59322) "a") (data (i32.const 59325) "a") (data (i32.const 59328) "a") (data (i32.const 59331) "a") (data (i32.const 59334) "a") (data (i32.const 59337) "a") (data (i32.const 59340) "a") (data (i32.const 59343) "a") (data (i32.const 59346) "a") (data (i32.const 59349) "a") (data (i32.const 59352) "a") (data (i32.const 59355) "a") (data (i32.const 59358) "a") (data (i32.const 59361) "a") (data (i32.const 59364) "a") (data (i32.const 59367) "a") (data (i32.const 59370) "a") (data (i32.const 59373) "a") (data (i32.const 59376) "a") (data (i32.const 59379) "a") (data (i32.const 59382) "a") (data (i32.const 59385) "a") (data (i32.const 59388) "a") (data (i32.const 59391) "a") (data (i32.const 59394) "a") (data (i32.const 59397) "a") (data (i32.const 59400) "a") (data (i32.const 59403) "a") (data (i32.const 59406) "a") (data (i32.const 59409) "a") (data (i32.const 59412) "a") (data (i32.const 59415) "a") (data (i32.const 59418) "a") (data (i32.const 59421) "a") (data (i32.const 59424) "a") (data (i32.const 59427) "a") (data (i32.const 59430) "a") (data (i32.const 59433) "a") (data (i32.const 59436) "a") (data (i32.const 59439) "a") (data (i32.const 59442) "a") (data (i32.const 59445) "a") (data (i32.const 59448) "a") (data (i32.const 59451) "a") (data (i32.const 59454) "a") (data (i32.const 59457) "a") (data (i32.const 59460) "a") (data (i32.const 59463) "a") (data (i32.const 59466) "a") (data (i32.const 59469) "a") (data (i32.const 59472) "a") (data (i32.const 59475) "a") (data (i32.const 59478) "a") (data (i32.const 59481) "a") (data (i32.const 59484) "a") (data (i32.const 59487) "a") (data (i32.const 59490) "a") (data (i32.const 59493) "a") (data (i32.const 59496) "a") (data (i32.const 59499) "a") (data (i32.const 59502) "a") (data (i32.const 59505) "a") (data (i32.const 59508) "a") (data (i32.const 59511) "a") (data (i32.const 59514) "a") (data (i32.const 59517) "a") (data (i32.const 59520) "a") (data (i32.const 59523) "a") (data (i32.const 59526) "a") (data (i32.const 59529) "a") (data (i32.const 59532) "a") (data (i32.const 59535) "a") (data (i32.const 59538) "a") (data (i32.const 59541) "a") (data (i32.const 59544) "a") (data (i32.const 59547) "a") (data (i32.const 59550) "a") (data (i32.const 59553) "a") (data (i32.const 59556) "a") (data (i32.const 59559) "a") (data (i32.const 59562) "a") (data (i32.const 59565) "a") (data (i32.const 59568) "a") (data (i32.const 59571) "a") (data (i32.const 59574) "a") (data (i32.const 59577) "a") (data (i32.const 59580) "a") (data (i32.const 59583) "a") (data (i32.const 59586) "a") (data (i32.const 59589) "a") (data (i32.const 59592) "a") (data (i32.const 59595) "a") (data (i32.const 59598) "a") (data (i32.const 59601) "a") (data (i32.const 59604) "a") (data (i32.const 59607) "a") (data (i32.const 59610) "a") (data (i32.const 59613) "a") (data (i32.const 59616) "a") (data (i32.const 59619) "a") (data (i32.const 59622) "a") (data (i32.const 59625) "a") (data (i32.const 59628) "a") (data (i32.const 59631) "a") (data (i32.const 59634) "a") (data (i32.const 59637) "a") (data (i32.const 59640) "a") (data (i32.const 59643) "a") (data (i32.const 59646) "a") (data (i32.const 59649) "a") (data (i32.const 59652) "a") (data (i32.const 59655) "a") (data (i32.const 59658) "a") (data (i32.const 59661) "a") (data (i32.const 59664) "a") (data (i32.const 59667) "a") (data (i32.const 59670) "a") (data (i32.const 59673) "a") (data (i32.const 59676) "a") (data (i32.const 59679) "a") (data (i32.const 59682) "a") (data (i32.const 59685) "a") (data (i32.const 59688) "a") (data (i32.const 59691) "a") (data (i32.const 59694) "a") (data (i32.const 59697) "a") (data (i32.const 59700) "a") (data (i32.const 59703) "a") (data (i32.const 59706) "a") (data (i32.const 59709) "a") (data (i32.const 59712) "a") (data (i32.const 59715) "a") (data (i32.const 59718) "a") (data (i32.const 59721) "a") (data (i32.const 59724) "a") (data (i32.const 59727) "a") (data (i32.const 59730) "a") (data (i32.const 59733) "a") (data (i32.const 59736) "a") (data (i32.const 59739) "a") (data (i32.const 59742) "a") (data (i32.const 59745) "a") (data (i32.const 59748) "a") (data (i32.const 59751) "a") (data (i32.const 59754) "a") (data (i32.const 59757) "a") (data (i32.const 59760) "a") (data (i32.const 59763) "a") (data (i32.const 59766) "a") (data (i32.const 59769) "a") (data (i32.const 59772) "a") (data (i32.const 59775) "a") (data (i32.const 59778) "a") (data (i32.const 59781) "a") (data (i32.const 59784) "a") (data (i32.const 59787) "a") (data (i32.const 59790) "a") (data (i32.const 59793) "a") (data (i32.const 59796) "a") (data (i32.const 59799) "a") (data (i32.const 59802) "a") (data (i32.const 59805) "a") (data (i32.const 59808) "a") (data (i32.const 59811) "a") (data (i32.const 59814) "a") (data (i32.const 59817) "a") (data (i32.const 59820) "a") (data (i32.const 59823) "a") (data (i32.const 59826) "a") (data (i32.const 59829) "a") (data (i32.const 59832) "a") (data (i32.const 59835) "a") (data (i32.const 59838) "a") (data (i32.const 59841) "a") (data (i32.const 59844) "a") (data (i32.const 59847) "a") (data (i32.const 59850) "a") (data (i32.const 59853) "a") (data (i32.const 59856) "a") (data (i32.const 59859) "a") (data (i32.const 59862) "a") (data (i32.const 59865) "a") (data (i32.const 59868) "a") (data (i32.const 59871) "a") (data (i32.const 59874) "a") (data (i32.const 59877) "a") (data (i32.const 59880) "a") (data (i32.const 59883) "a") (data (i32.const 59886) "a") (data (i32.const 59889) "a") (data (i32.const 59892) "a") (data (i32.const 59895) "a") (data (i32.const 59898) "a") (data (i32.const 59901) "a") (data (i32.const 59904) "a") (data (i32.const 59907) "a") (data (i32.const 59910) "a") (data (i32.const 59913) "a") (data (i32.const 59916) "a") (data (i32.const 59919) "a") (data (i32.const 59922) "a") (data (i32.const 59925) "a") (data (i32.const 59928) "a") (data (i32.const 59931) "a") (data (i32.const 59934) "a") (data (i32.const 59937) "a") (data (i32.const 59940) "a") (data (i32.const 59943) "a") (data (i32.const 59946) "a") (data (i32.const 59949) "a") (data (i32.const 59952) "a") (data (i32.const 59955) "a") (data (i32.const 59958) "a") (data (i32.const 59961) "a") (data (i32.const 59964) "a") (data (i32.const 59967) "a") (data (i32.const 59970) "a") (data (i32.const 59973) "a") (data (i32.const 59976) "a") (data (i32.const 59979) "a") (data (i32.const 59982) "a") (data (i32.const 59985) "a") (data (i32.const 59988) "a") (data (i32.const 59991) "a") (data (i32.const 59994) "a") (data (i32.const 59997) "a") (data (i32.const 60000) "a") (data (i32.const 60003) "a") (data (i32.const 60006) "a") (data (i32.const 60009) "a") (data (i32.const 60012) "a") (data (i32.const 60015) "a") (data (i32.const 60018) "a") (data (i32.const 60021) "a") (data (i32.const 60024) "a") (data (i32.const 60027) "a") (data (i32.const 60030) "a") (data (i32.const 60033) "a") (data (i32.const 60036) "a") (data (i32.const 60039) "a") (data (i32.const 60042) "a") (data (i32.const 60045) "a") (data (i32.const 60048) "a") (data (i32.const 60051) "a") (data (i32.const 60054) "a") (data (i32.const 60057) "a") (data (i32.const 60060) "a") (data (i32.const 60063) "a") (data (i32.const 60066) "a") (data (i32.const 60069) "a") (data (i32.const 60072) "a") (data (i32.const 60075) "a") (data (i32.const 60078) "a") (data (i32.const 60081) "a") (data (i32.const 60084) "a") (data (i32.const 60087) "a") (data (i32.const 60090) "a") (data (i32.const 60093) "a") (data (i32.const 60096) "a") (data (i32.const 60099) "a") (data (i32.const 60102) "a") (data (i32.const 60105) "a") (data (i32.const 60108) "a") (data (i32.const 60111) "a") (data (i32.const 60114) "a") (data (i32.const 60117) "a") (data (i32.const 60120) "a") (data (i32.const 60123) "a") (data (i32.const 60126) "a") (data (i32.const 60129) "a") (data (i32.const 60132) "a") (data (i32.const 60135) "a") (data (i32.const 60138) "a") (data (i32.const 60141) "a") (data (i32.const 60144) "a") (data (i32.const 60147) "a") (data (i32.const 60150) "a") (data (i32.const 60153) "a") (data (i32.const 60156) "a") (data (i32.const 60159) "a") (data (i32.const 60162) "a") (data (i32.const 60165) "a") (data (i32.const 60168) "a") (data (i32.const 60171) "a") (data (i32.const 60174) "a") (data (i32.const 60177) "a") (data (i32.const 60180) "a") (data (i32.const 60183) "a") (data (i32.const 60186) "a") (data (i32.const 60189) "a") (data (i32.const 60192) "a") (data (i32.const 60195) "a") (data (i32.const 60198) "a") (data (i32.const 60201) "a") (data (i32.const 60204) "a") (data (i32.const 60207) "a") (data (i32.const 60210) "a") (data (i32.const 60213) "a") (data (i32.const 60216) "a") (data (i32.const 60219) "a") (data (i32.const 60222) "a") (data (i32.const 60225) "a") (data (i32.const 60228) "a") (data (i32.const 60231) "a") (data (i32.const 60234) "a") (data (i32.const 60237) "a") (data (i32.const 60240) "a") (data (i32.const 60243) "a") (data (i32.const 60246) "a") (data (i32.const 60249) "a") (data (i32.const 60252) "a") (data (i32.const 60255) "a") (data (i32.const 60258) "a") (data (i32.const 60261) "a") (data (i32.const 60264) "a") (data (i32.const 60267) "a") (data (i32.const 60270) "a") (data (i32.const 60273) "a") (data (i32.const 60276) "a") (data (i32.const 60279) "a") (data (i32.const 60282) "a") (data (i32.const 60285) "a") (data (i32.const 60288) "a") (data (i32.const 60291) "a") (data (i32.const 60294) "a") (data (i32.const 60297) "a") (data (i32.const 60300) "a") (data (i32.const 60303) "a") (data (i32.const 60306) "a") (data (i32.const 60309) "a") (data (i32.const 60312) "a") (data (i32.const 60315) "a") (data (i32.const 60318) "a") (data (i32.const 60321) "a") (data (i32.const 60324) "a") (data (i32.const 60327) "a") (data (i32.const 60330) "a") (data (i32.const 60333) "a") (data (i32.const 60336) "a") (data (i32.const 60339) "a") (data (i32.const 60342) "a") (data (i32.const 60345) "a") (data (i32.const 60348) "a") (data (i32.const 60351) "a") (data (i32.const 60354) "a") (data (i32.const 60357) "a") (data (i32.const 60360) "a") (data (i32.const 60363) "a") (data (i32.const 60366) "a") (data (i32.const 60369) "a") (data (i32.const 60372) "a") (data (i32.const 60375) "a") (data (i32.const 60378) "a") (data (i32.const 60381) "a") (data (i32.const 60384) "a") (data (i32.const 60387) "a") (data (i32.const 60390) "a") (data (i32.const 60393) "a") (data (i32.const 60396) "a") (data (i32.const 60399) "a") (data (i32.const 60402) "a") (data (i32.const 60405) "a") (data (i32.const 60408) "a") (data (i32.const 60411) "a") (data (i32.const 60414) "a") (data (i32.const 60417) "a") (data (i32.const 60420) "a") (data (i32.const 60423) "a") (data (i32.const 60426) "a") (data (i32.const 60429) "a") (data (i32.const 60432) "a") (data (i32.const 60435) "a") (data (i32.const 60438) "a") (data (i32.const 60441) "a") (data (i32.const 60444) "a") (data (i32.const 60447) "a") (data (i32.const 60450) "a") (data (i32.const 60453) "a") (data (i32.const 60456) "a") (data (i32.const 60459) "a") (data (i32.const 60462) "a") (data (i32.const 60465) "a") (data (i32.const 60468) "a") (data (i32.const 60471) "a") (data (i32.const 60474) "a") (data (i32.const 60477) "a") (data (i32.const 60480) "a") (data (i32.const 60483) "a") (data (i32.const 60486) "a") (data (i32.const 60489) "a") (data (i32.const 60492) "a") (data (i32.const 60495) "a") (data (i32.const 60498) "a") (data (i32.const 60501) "a") (data (i32.const 60504) "a") (data (i32.const 60507) "a") (data (i32.const 60510) "a") (data (i32.const 60513) "a") (data (i32.const 60516) "a") (data (i32.const 60519) "a") (data (i32.const 60522) "a") (data (i32.const 60525) "a") (data (i32.const 60528) "a") (data (i32.const 60531) "a") (data (i32.const 60534) "a") (data (i32.const 60537) "a") (data (i32.const 60540) "a") (data (i32.const 60543) "a") (data (i32.const 60546) "a") (data (i32.const 60549) "a") (data (i32.const 60552) "a") (data (i32.const 60555) "a") (data (i32.const 60558) "a") (data (i32.const 60561) "a") (data (i32.const 60564) "a") (data (i32.const 60567) "a") (data (i32.const 60570) "a") (data (i32.const 60573) "a") (data (i32.const 60576) "a") (data (i32.const 60579) "a") (data (i32.const 60582) "a") (data (i32.const 60585) "a") (data (i32.const 60588) "a") (data (i32.const 60591) "a") (data (i32.const 60594) "a") (data (i32.const 60597) "a") (data (i32.const 60600) "a") (data (i32.const 60603) "a") (data (i32.const 60606) "a") (data (i32.const 60609) "a") (data (i32.const 60612) "a") (data (i32.const 60615) "a") (data (i32.const 60618) "a") (data (i32.const 60621) "a") (data (i32.const 60624) "a") (data (i32.const 60627) "a") (data (i32.const 60630) "a") (data (i32.const 60633) "a") (data (i32.const 60636) "a") (data (i32.const 60639) "a") (data (i32.const 60642) "a") (data (i32.const 60645) "a") (data (i32.const 60648) "a") (data (i32.const 60651) "a") (data (i32.const 60654) "a") (data (i32.const 60657) "a") (data (i32.const 60660) "a") (data (i32.const 60663) "a") (data (i32.const 60666) "a") (data (i32.const 60669) "a") (data (i32.const 60672) "a") (data (i32.const 60675) "a") (data (i32.const 60678) "a") (data (i32.const 60681) "a") (data (i32.const 60684) "a") (data (i32.const 60687) "a") (data (i32.const 60690) "a") (data (i32.const 60693) "a") (data (i32.const 60696) "a") (data (i32.const 60699) "a") (data (i32.const 60702) "a") (data (i32.const 60705) "a") (data (i32.const 60708) "a") (data (i32.const 60711) "a") (data (i32.const 60714) "a") (data (i32.const 60717) "a") (data (i32.const 60720) "a") (data (i32.const 60723) "a") (data (i32.const 60726) "a") (data (i32.const 60729) "a") (data (i32.const 60732) "a") (data (i32.const 60735) "a") (data (i32.const 60738) "a") (data (i32.const 60741) "a") (data (i32.const 60744) "a") (data (i32.const 60747) "a") (data (i32.const 60750) "a") (data (i32.const 60753) "a") (data (i32.const 60756) "a") (data (i32.const 60759) "a") (data (i32.const 60762) "a") (data (i32.const 60765) "a") (data (i32.const 60768) "a") (data (i32.const 60771) "a") (data (i32.const 60774) "a") (data (i32.const 60777) "a") (data (i32.const 60780) "a") (data (i32.const 60783) "a") (data (i32.const 60786) "a") (data (i32.const 60789) "a") (data (i32.const 60792) "a") (data (i32.const 60795) "a") (data (i32.const 60798) "a") (data (i32.const 60801) "a") (data (i32.const 60804) "a") (data (i32.const 60807) "a") (data (i32.const 60810) "a") (data (i32.const 60813) "a") (data (i32.const 60816) "a") (data (i32.const 60819) "a") (data (i32.const 60822) "a") (data (i32.const 60825) "a") (data (i32.const 60828) "a") (data (i32.const 60831) "a") (data (i32.const 60834) "a") (data (i32.const 60837) "a") (data (i32.const 60840) "a") (data (i32.const 60843) "a") (data (i32.const 60846) "a") (data (i32.const 60849) "a") (data (i32.const 60852) "a") (data (i32.const 60855) "a") (data (i32.const 60858) "a") (data (i32.const 60861) "a") (data (i32.const 60864) "a") (data (i32.const 60867) "a") (data (i32.const 60870) "a") (data (i32.const 60873) "a") (data (i32.const 60876) "a") (data (i32.const 60879) "a") (data (i32.const 60882) "a") (data (i32.const 60885) "a") (data (i32.const 60888) "a") (data (i32.const 60891) "a") (data (i32.const 60894) "a") (data (i32.const 60897) "a") (data (i32.const 60900) "a") (data (i32.const 60903) "a") (data (i32.const 60906) "a") (data (i32.const 60909) "a") (data (i32.const 60912) "a") (data (i32.const 60915) "a") (data (i32.const 60918) "a") (data (i32.const 60921) "a") (data (i32.const 60924) "a") (data (i32.const 60927) "a") (data (i32.const 60930) "a") (data (i32.const 60933) "a") (data (i32.const 60936) "a") (data (i32.const 60939) "a") (data (i32.const 60942) "a") (data (i32.const 60945) "a") (data (i32.const 60948) "a") (data (i32.const 60951) "a") (data (i32.const 60954) "a") (data (i32.const 60957) "a") (data (i32.const 60960) "a") (data (i32.const 60963) "a") (data (i32.const 60966) "a") (data (i32.const 60969) "a") (data (i32.const 60972) "a") (data (i32.const 60975) "a") (data (i32.const 60978) "a") (data (i32.const 60981) "a") (data (i32.const 60984) "a") (data (i32.const 60987) "a") (data (i32.const 60990) "a") (data (i32.const 60993) "a") (data (i32.const 60996) "a") (data (i32.const 60999) "a") (data (i32.const 61002) "a") (data (i32.const 61005) "a") (data (i32.const 61008) "a") (data (i32.const 61011) "a") (data (i32.const 61014) "a") (data (i32.const 61017) "a") (data (i32.const 61020) "a") (data (i32.const 61023) "a") (data (i32.const 61026) "a") (data (i32.const 61029) "a") (data (i32.const 61032) "a") (data (i32.const 61035) "a") (data (i32.const 61038) "a") (data (i32.const 61041) "a") (data (i32.const 61044) "a") (data (i32.const 61047) "a") (data (i32.const 61050) "a") (data (i32.const 61053) "a") (data (i32.const 61056) "a") (data (i32.const 61059) "a") (data (i32.const 61062) "a") (data (i32.const 61065) "a") (data (i32.const 61068) "a") (data (i32.const 61071) "a") (data (i32.const 61074) "a") (data (i32.const 61077) "a") (data (i32.const 61080) "a") (data (i32.const 61083) "a") (data (i32.const 61086) "a") (data (i32.const 61089) "a") (data (i32.const 61092) "a") (data (i32.const 61095) "a") (data (i32.const 61098) "a") (data (i32.const 61101) "a") (data (i32.const 61104) "a") (data (i32.const 61107) "a") (data (i32.const 61110) "a") (data (i32.const 61113) "a") (data (i32.const 61116) "a") (data (i32.const 61119) "a") (data (i32.const 61122) "a") (data (i32.const 61125) "a") (data (i32.const 61128) "a") (data (i32.const 61131) "a") (data (i32.const 61134) "a") (data (i32.const 61137) "a") (data (i32.const 61140) "a") (data (i32.const 61143) "a") (data (i32.const 61146) "a") (data (i32.const 61149) "a") (data (i32.const 61152) "a") (data (i32.const 61155) "a") (data (i32.const 61158) "a") (data (i32.const 61161) "a") (data (i32.const 61164) "a") (data (i32.const 61167) "a") (data (i32.const 61170) "a") (data (i32.const 61173) "a") (data (i32.const 61176) "a") (data (i32.const 61179) "a") (data (i32.const 61182) "a") (data (i32.const 61185) "a") (data (i32.const 61188) "a") (data (i32.const 61191) "a") (data (i32.const 61194) "a") (data (i32.const 61197) "a") (data (i32.const 61200) "a") (data (i32.const 61203) "a") (data (i32.const 61206) "a") (data (i32.const 61209) "a") (data (i32.const 61212) "a") (data (i32.const 61215) "a") (data (i32.const 61218) "a") (data (i32.const 61221) "a") (data (i32.const 61224) "a") (data (i32.const 61227) "a") (data (i32.const 61230) "a") (data (i32.const 61233) "a") (data (i32.const 61236) "a") (data (i32.const 61239) "a") (data (i32.const 61242) "a") (data (i32.const 61245) "a") (data (i32.const 61248) "a") (data (i32.const 61251) "a") (data (i32.const 61254) "a") (data (i32.const 61257) "a") (data (i32.const 61260) "a") (data (i32.const 61263) "a") (data (i32.const 61266) "a") (data (i32.const 61269) "a") (data (i32.const 61272) "a") (data (i32.const 61275) "a") (data (i32.const 61278) "a") (data (i32.const 61281) "a") (data (i32.const 61284) "a") (data (i32.const 61287) "a") (data (i32.const 61290) "a") (data (i32.const 61293) "a") (data (i32.const 61296) "a") (data (i32.const 61299) "a") (data (i32.const 61302) "a") (data (i32.const 61305) "a") (data (i32.const 61308) "a") (data (i32.const 61311) "a") (data (i32.const 61314) "a") (data (i32.const 61317) "a") (data (i32.const 61320) "a") (data (i32.const 61323) "a") (data (i32.const 61326) "a") (data (i32.const 61329) "a") (data (i32.const 61332) "a") (data (i32.const 61335) "a") (data (i32.const 61338) "a") (data (i32.const 61341) "a") (data (i32.const 61344) "a") (data (i32.const 61347) "a") (data (i32.const 61350) "a") (data (i32.const 61353) "a") (data (i32.const 61356) "a") (data (i32.const 61359) "a") (data (i32.const 61362) "a") (data (i32.const 61365) "a") (data (i32.const 61368) "a") (data (i32.const 61371) "a") (data (i32.const 61374) "a") (data (i32.const 61377) "a") (data (i32.const 61380) "a") (data (i32.const 61383) "a") (data (i32.const 61386) "a") (data (i32.const 61389) "a") (data (i32.const 61392) "a") (data (i32.const 61395) "a") (data (i32.const 61398) "a") (data (i32.const 61401) "a") (data (i32.const 61404) "a") (data (i32.const 61407) "a") (data (i32.const 61410) "a") (data (i32.const 61413) "a") (data (i32.const 61416) "a") (data (i32.const 61419) "a") (data (i32.const 61422) "a") (data (i32.const 61425) "a") (data (i32.const 61428) "a") (data (i32.const 61431) "a") (data (i32.const 61434) "a") (data (i32.const 61437) "a") (data (i32.const 61440) "a") (data (i32.const 61443) "a") (data (i32.const 61446) "a") (data (i32.const 61449) "a") (data (i32.const 61452) "a") (data (i32.const 61455) "a") (data (i32.const 61458) "a") (data (i32.const 61461) "a") (data (i32.const 61464) "a") (data (i32.const 61467) "a") (data (i32.const 61470) "a") (data (i32.const 61473) "a") (data (i32.const 61476) "a") (data (i32.const 61479) "a") (data (i32.const 61482) "a") (data (i32.const 61485) "a") (data (i32.const 61488) "a") (data (i32.const 61491) "a") (data (i32.const 61494) "a") (data (i32.const 61497) "a") (data (i32.const 61500) "a") (data (i32.const 61503) "a") (data (i32.const 61506) "a") (data (i32.const 61509) "a") (data (i32.const 61512) "a") (data (i32.const 61515) "a") (data (i32.const 61518) "a") (data (i32.const 61521) "a") (data (i32.const 61524) "a") (data (i32.const 61527) "a") (data (i32.const 61530) "a") (data (i32.const 61533) "a") (data (i32.const 61536) "a") (data (i32.const 61539) "a") (data (i32.const 61542) "a") (data (i32.const 61545) "a") (data (i32.const 61548) "a") (data (i32.const 61551) "a") (data (i32.const 61554) "a") (data (i32.const 61557) "a") (data (i32.const 61560) "a") (data (i32.const 61563) "a") (data (i32.const 61566) "a") (data (i32.const 61569) "a") (data (i32.const 61572) "a") (data (i32.const 61575) "a") (data (i32.const 61578) "a") (data (i32.const 61581) "a") (data (i32.const 61584) "a") (data (i32.const 61587) "a") (data (i32.const 61590) "a") (data (i32.const 61593) "a") (data (i32.const 61596) "a") (data (i32.const 61599) "a") (data (i32.const 61602) "a") (data (i32.const 61605) "a") (data (i32.const 61608) "a") (data (i32.const 61611) "a") (data (i32.const 61614) "a") (data (i32.const 61617) "a") (data (i32.const 61620) "a") (data (i32.const 61623) "a") (data (i32.const 61626) "a") (data (i32.const 61629) "a") (data (i32.const 61632) "a") (data (i32.const 61635) "a") (data (i32.const 61638) "a") (data (i32.const 61641) "a") (data (i32.const 61644) "a") (data (i32.const 61647) "a") (data (i32.const 61650) "a") (data (i32.const 61653) "a") (data (i32.const 61656) "a") (data (i32.const 61659) "a") (data (i32.const 61662) "a") (data (i32.const 61665) "a") (data (i32.const 61668) "a") (data (i32.const 61671) "a") (data (i32.const 61674) "a") (data (i32.const 61677) "a") (data (i32.const 61680) "a") (data (i32.const 61683) "a") (data (i32.const 61686) "a") (data (i32.const 61689) "a") (data (i32.const 61692) "a") (data (i32.const 61695) "a") (data (i32.const 61698) "a") (data (i32.const 61701) "a") (data (i32.const 61704) "a") (data (i32.const 61707) "a") (data (i32.const 61710) "a") (data (i32.const 61713) "a") (data (i32.const 61716) "a") (data (i32.const 61719) "a") (data (i32.const 61722) "a") (data (i32.const 61725) "a") (data (i32.const 61728) "a") (data (i32.const 61731) "a") (data (i32.const 61734) "a") (data (i32.const 61737) "a") (data (i32.const 61740) "a") (data (i32.const 61743) "a") (data (i32.const 61746) "a") (data (i32.const 61749) "a") (data (i32.const 61752) "a") (data (i32.const 61755) "a") (data (i32.const 61758) "a") (data (i32.const 61761) "a") (data (i32.const 61764) "a") (data (i32.const 61767) "a") (data (i32.const 61770) "a") (data (i32.const 61773) "a") (data (i32.const 61776) "a") (data (i32.const 61779) "a") (data (i32.const 61782) "a") (data (i32.const 61785) "a") (data (i32.const 61788) "a") (data (i32.const 61791) "a") (data (i32.const 61794) "a") (data (i32.const 61797) "a") (data (i32.const 61800) "a") (data (i32.const 61803) "a") (data (i32.const 61806) "a") (data (i32.const 61809) "a") (data (i32.const 61812) "a") (data (i32.const 61815) "a") (data (i32.const 61818) "a") (data (i32.const 61821) "a") (data (i32.const 61824) "a") (data (i32.const 61827) "a") (data (i32.const 61830) "a") (data (i32.const 61833) "a") (data (i32.const 61836) "a") (data (i32.const 61839) "a") (data (i32.const 61842) "a") (data (i32.const 61845) "a") (data (i32.const 61848) "a") (data (i32.const 61851) "a") (data (i32.const 61854) "a") (data (i32.const 61857) "a") (data (i32.const 61860) "a") (data (i32.const 61863) "a") (data (i32.const 61866) "a") (data (i32.const 61869) "a") (data (i32.const 61872) "a") (data (i32.const 61875) "a") (data (i32.const 61878) "a") (data (i32.const 61881) "a") (data (i32.const 61884) "a") (data (i32.const 61887) "a") (data (i32.const 61890) "a") (data (i32.const 61893) "a") (data (i32.const 61896) "a") (data (i32.const 61899) "a") (data (i32.const 61902) "a") (data (i32.const 61905) "a") (data (i32.const 61908) "a") (data (i32.const 61911) "a") (data (i32.const 61914) "a") (data (i32.const 61917) "a") (data (i32.const 61920) "a") (data (i32.const 61923) "a") (data (i32.const 61926) "a") (data (i32.const 61929) "a") (data (i32.const 61932) "a") (data (i32.const 61935) "a") (data (i32.const 61938) "a") (data (i32.const 61941) "a") (data (i32.const 61944) "a") (data (i32.const 61947) "a") (data (i32.const 61950) "a") (data (i32.const 61953) "a") (data (i32.const 61956) "a") (data (i32.const 61959) "a") (data (i32.const 61962) "a") (data (i32.const 61965) "a") (data (i32.const 61968) "a") (data (i32.const 61971) "a") (data (i32.const 61974) "a") (data (i32.const 61977) "a") (data (i32.const 61980) "a") (data (i32.const 61983) "a") (data (i32.const 61986) "a") (data (i32.const 61989) "a") (data (i32.const 61992) "a") (data (i32.const 61995) "a") (data (i32.const 61998) "a") (data (i32.const 62001) "a") (data (i32.const 62004) "a") (data (i32.const 62007) "a") (data (i32.const 62010) "a") (data (i32.const 62013) "a") (data (i32.const 62016) "a") (data (i32.const 62019) "a") (data (i32.const 62022) "a") (data (i32.const 62025) "a") (data (i32.const 62028) "a") (data (i32.const 62031) "a") (data (i32.const 62034) "a") (data (i32.const 62037) "a") (data (i32.const 62040) "a") (data (i32.const 62043) "a") (data (i32.const 62046) "a") (data (i32.const 62049) "a") (data (i32.const 62052) "a") (data (i32.const 62055) "a") (data (i32.const 62058) "a") (data (i32.const 62061) "a") (data (i32.const 62064) "a") (data (i32.const 62067) "a") (data (i32.const 62070) "a") (data (i32.const 62073) "a") (data (i32.const 62076) "a") (data (i32.const 62079) "a") (data (i32.const 62082) "a") (data (i32.const 62085) "a") (data (i32.const 62088) "a") (data (i32.const 62091) "a") (data (i32.const 62094) "a") (data (i32.const 62097) "a") (data (i32.const 62100) "a") (data (i32.const 62103) "a") (data (i32.const 62106) "a") (data (i32.const 62109) "a") (data (i32.const 62112) "a") (data (i32.const 62115) "a") (data (i32.const 62118) "a") (data (i32.const 62121) "a") (data (i32.const 62124) "a") (data (i32.const 62127) "a") (data (i32.const 62130) "a") (data (i32.const 62133) "a") (data (i32.const 62136) "a") (data (i32.const 62139) "a") (data (i32.const 62142) "a") (data (i32.const 62145) "a") (data (i32.const 62148) "a") (data (i32.const 62151) "a") (data (i32.const 62154) "a") (data (i32.const 62157) "a") (data (i32.const 62160) "a") (data (i32.const 62163) "a") (data (i32.const 62166) "a") (data (i32.const 62169) "a") (data (i32.const 62172) "a") (data (i32.const 62175) "a") (data (i32.const 62178) "a") (data (i32.const 62181) "a") (data (i32.const 62184) "a") (data (i32.const 62187) "a") (data (i32.const 62190) "a") (data (i32.const 62193) "a") (data (i32.const 62196) "a") (data (i32.const 62199) "a") (data (i32.const 62202) "a") (data (i32.const 62205) "a") (data (i32.const 62208) "a") (data (i32.const 62211) "a") (data (i32.const 62214) "a") (data (i32.const 62217) "a") (data (i32.const 62220) "a") (data (i32.const 62223) "a") (data (i32.const 62226) "a") (data (i32.const 62229) "a") (data (i32.const 62232) "a") (data (i32.const 62235) "a") (data (i32.const 62238) "a") (data (i32.const 62241) "a") (data (i32.const 62244) "a") (data (i32.const 62247) "a") (data (i32.const 62250) "a") (data (i32.const 62253) "a") (data (i32.const 62256) "a") (data (i32.const 62259) "a") (data (i32.const 62262) "a") (data (i32.const 62265) "a") (data (i32.const 62268) "a") (data (i32.const 62271) "a") (data (i32.const 62274) "a") (data (i32.const 62277) "a") (data (i32.const 62280) "a") (data (i32.const 62283) "a") (data (i32.const 62286) "a") (data (i32.const 62289) "a") (data (i32.const 62292) "a") (data (i32.const 62295) "a") (data (i32.const 62298) "a") (data (i32.const 62301) "a") (data (i32.const 62304) "a") (data (i32.const 62307) "a") (data (i32.const 62310) "a") (data (i32.const 62313) "a") (data (i32.const 62316) "a") (data (i32.const 62319) "a") (data (i32.const 62322) "a") (data (i32.const 62325) "a") (data (i32.const 62328) "a") (data (i32.const 62331) "a") (data (i32.const 62334) "a") (data (i32.const 62337) "a") (data (i32.const 62340) "a") (data (i32.const 62343) "a") (data (i32.const 62346) "a") (data (i32.const 62349) "a") (data (i32.const 62352) "a") (data (i32.const 62355) "a") (data (i32.const 62358) "a") (data (i32.const 62361) "a") (data (i32.const 62364) "a") (data (i32.const 62367) "a") (data (i32.const 62370) "a") (data (i32.const 62373) "a") (data (i32.const 62376) "a") (data (i32.const 62379) "a") (data (i32.const 62382) "a") (data (i32.const 62385) "a") (data (i32.const 62388) "a") (data (i32.const 62391) "a") (data (i32.const 62394) "a") (data (i32.const 62397) "a") (data (i32.const 62400) "a") (data (i32.const 62403) "a") (data (i32.const 62406) "a") (data (i32.const 62409) "a") (data (i32.const 62412) "a") (data (i32.const 62415) "a") (data (i32.const 62418) "a") (data (i32.const 62421) "a") (data (i32.const 62424) "a") (data (i32.const 62427) "a") (data (i32.const 62430) "a") (data (i32.const 62433) "a") (data (i32.const 62436) "a") (data (i32.const 62439) "a") (data (i32.const 62442) "a") (data (i32.const 62445) "a") (data (i32.const 62448) "a") (data (i32.const 62451) "a") (data (i32.const 62454) "a") (data (i32.const 62457) "a") (data (i32.const 62460) "a") (data (i32.const 62463) "a") (data (i32.const 62466) "a") (data (i32.const 62469) "a") (data (i32.const 62472) "a") (data (i32.const 62475) "a") (data (i32.const 62478) "a") (data (i32.const 62481) "a") (data (i32.const 62484) "a") (data (i32.const 62487) "a") (data (i32.const 62490) "a") (data (i32.const 62493) "a") (data (i32.const 62496) "a") (data (i32.const 62499) "a") (data (i32.const 62502) "a") (data (i32.const 62505) "a") (data (i32.const 62508) "a") (data (i32.const 62511) "a") (data (i32.const 62514) "a") (data (i32.const 62517) "a") (data (i32.const 62520) "a") (data (i32.const 62523) "a") (data (i32.const 62526) "a") (data (i32.const 62529) "a") (data (i32.const 62532) "a") (data (i32.const 62535) "a") (data (i32.const 62538) "a") (data (i32.const 62541) "a") (data (i32.const 62544) "a") (data (i32.const 62547) "a") (data (i32.const 62550) "a") (data (i32.const 62553) "a") (data (i32.const 62556) "a") (data (i32.const 62559) "a") (data (i32.const 62562) "a") (data (i32.const 62565) "a") (data (i32.const 62568) "a") (data (i32.const 62571) "a") (data (i32.const 62574) "a") (data (i32.const 62577) "a") (data (i32.const 62580) "a") (data (i32.const 62583) "a") (data (i32.const 62586) "a") (data (i32.const 62589) "a") (data (i32.const 62592) "a") (data (i32.const 62595) "a") (data (i32.const 62598) "a") (data (i32.const 62601) "a") (data (i32.const 62604) "a") (data (i32.const 62607) "a") (data (i32.const 62610) "a") (data (i32.const 62613) "a") (data (i32.const 62616) "a") (data (i32.const 62619) "a") (data (i32.const 62622) "a") (data (i32.const 62625) "a") (data (i32.const 62628) "a") (data (i32.const 62631) "a") (data (i32.const 62634) "a") (data (i32.const 62637) "a") (data (i32.const 62640) "a") (data (i32.const 62643) "a") (data (i32.const 62646) "a") (data (i32.const 62649) "a") (data (i32.const 62652) "a") (data (i32.const 62655) "a") (data (i32.const 62658) "a") (data (i32.const 62661) "a") (data (i32.const 62664) "a") (data (i32.const 62667) "a") (data (i32.const 62670) "a") (data (i32.const 62673) "a") (data (i32.const 62676) "a") (data (i32.const 62679) "a") (data (i32.const 62682) "a") (data (i32.const 62685) "a") (data (i32.const 62688) "a") (data (i32.const 62691) "a") (data (i32.const 62694) "a") (data (i32.const 62697) "a") (data (i32.const 62700) "a") (data (i32.const 62703) "a") (data (i32.const 62706) "a") (data (i32.const 62709) "a") (data (i32.const 62712) "a") (data (i32.const 62715) "a") (data (i32.const 62718) "a") (data (i32.const 62721) "a") (data (i32.const 62724) "a") (data (i32.const 62727) "a") (data (i32.const 62730) "a") (data (i32.const 62733) "a") (data (i32.const 62736) "a") (data (i32.const 62739) "a") (data (i32.const 62742) "a") (data (i32.const 62745) "a") (data (i32.const 62748) "a") (data (i32.const 62751) "a") (data (i32.const 62754) "a") (data (i32.const 62757) "a") (data (i32.const 62760) "a") (data (i32.const 62763) "a") (data (i32.const 62766) "a") (data (i32.const 62769) "a") (data (i32.const 62772) "a") (data (i32.const 62775) "a") (data (i32.const 62778) "a") (data (i32.const 62781) "a") (data (i32.const 62784) "a") (data (i32.const 62787) "a") (data (i32.const 62790) "a") (data (i32.const 62793) "a") (data (i32.const 62796) "a") (data (i32.const 62799) "a") (data (i32.const 62802) "a") (data (i32.const 62805) "a") (data (i32.const 62808) "a") (data (i32.const 62811) "a") (data (i32.const 62814) "a") (data (i32.const 62817) "a") (data (i32.const 62820) "a") (data (i32.const 62823) "a") (data (i32.const 62826) "a") (data (i32.const 62829) "a") (data (i32.const 62832) "a") (data (i32.const 62835) "a") (data (i32.const 62838) "a") (data (i32.const 62841) "a") (data (i32.const 62844) "a") (data (i32.const 62847) "a") (data (i32.const 62850) "a") (data (i32.const 62853) "a") (data (i32.const 62856) "a") (data (i32.const 62859) "a") (data (i32.const 62862) "a") (data (i32.const 62865) "a") (data (i32.const 62868) "a") (data (i32.const 62871) "a") (data (i32.const 62874) "a") (data (i32.const 62877) "a") (data (i32.const 62880) "a") (data (i32.const 62883) "a") (data (i32.const 62886) "a") (data (i32.const 62889) "a") (data (i32.const 62892) "a") (data (i32.const 62895) "a") (data (i32.const 62898) "a") (data (i32.const 62901) "a") (data (i32.const 62904) "a") (data (i32.const 62907) "a") (data (i32.const 62910) "a") (data (i32.const 62913) "a") (data (i32.const 62916) "a") (data (i32.const 62919) "a") (data (i32.const 62922) "a") (data (i32.const 62925) "a") (data (i32.const 62928) "a") (data (i32.const 62931) "a") (data (i32.const 62934) "a") (data (i32.const 62937) "a") (data (i32.const 62940) "a") (data (i32.const 62943) "a") (data (i32.const 62946) "a") (data (i32.const 62949) "a") (data (i32.const 62952) "a") (data (i32.const 62955) "a") (data (i32.const 62958) "a") (data (i32.const 62961) "a") (data (i32.const 62964) "a") (data (i32.const 62967) "a") (data (i32.const 62970) "a") (data (i32.const 62973) "a") (data (i32.const 62976) "a") (data (i32.const 62979) "a") (data (i32.const 62982) "a") (data (i32.const 62985) "a") (data (i32.const 62988) "a") (data (i32.const 62991) "a") (data (i32.const 62994) "a") (data (i32.const 62997) "a") (data (i32.const 63000) "a") (data (i32.const 63003) "a") (data (i32.const 63006) "a") (data (i32.const 63009) "a") (data (i32.const 63012) "a") (data (i32.const 63015) "a") (data (i32.const 63018) "a") (data (i32.const 63021) "a") (data (i32.const 63024) "a") (data (i32.const 63027) "a") (data (i32.const 63030) "a") (data (i32.const 63033) "a") (data (i32.const 63036) "a") (data (i32.const 63039) "a") (data (i32.const 63042) "a") (data (i32.const 63045) "a") (data (i32.const 63048) "a") (data (i32.const 63051) "a") (data (i32.const 63054) "a") (data (i32.const 63057) "a") (data (i32.const 63060) "a") (data (i32.const 63063) "a") (data (i32.const 63066) "a") (data (i32.const 63069) "a") (data (i32.const 63072) "a") (data (i32.const 63075) "a") (data (i32.const 63078) "a") (data (i32.const 63081) "a") (data (i32.const 63084) "a") (data (i32.const 63087) "a") (data (i32.const 63090) "a") (data (i32.const 63093) "a") (data (i32.const 63096) "a") (data (i32.const 63099) "a") (data (i32.const 63102) "a") (data (i32.const 63105) "a") (data (i32.const 63108) "a") (data (i32.const 63111) "a") (data (i32.const 63114) "a") (data (i32.const 63117) "a") (data (i32.const 63120) "a") (data (i32.const 63123) "a") (data (i32.const 63126) "a") (data (i32.const 63129) "a") (data (i32.const 63132) "a") (data (i32.const 63135) "a") (data (i32.const 63138) "a") (data (i32.const 63141) "a") (data (i32.const 63144) "a") (data (i32.const 63147) "a") (data (i32.const 63150) "a") (data (i32.const 63153) "a") (data (i32.const 63156) "a") (data (i32.const 63159) "a") (data (i32.const 63162) "a") (data (i32.const 63165) "a") (data (i32.const 63168) "a") (data (i32.const 63171) "a") (data (i32.const 63174) "a") (data (i32.const 63177) "a") (data (i32.const 63180) "a") (data (i32.const 63183) "a") (data (i32.const 63186) "a") (data (i32.const 63189) "a") (data (i32.const 63192) "a") (data (i32.const 63195) "a") (data (i32.const 63198) "a") (data (i32.const 63201) "a") (data (i32.const 63204) "a") (data (i32.const 63207) "a") (data (i32.const 63210) "a") (data (i32.const 63213) "a") (data (i32.const 63216) "a") (data (i32.const 63219) "a") (data (i32.const 63222) "a") (data (i32.const 63225) "a") (data (i32.const 63228) "a") (data (i32.const 63231) "a") (data (i32.const 63234) "a") (data (i32.const 63237) "a") (data (i32.const 63240) "a") (data (i32.const 63243) "a") (data (i32.const 63246) "a") (data (i32.const 63249) "a") (data (i32.const 63252) "a") (data (i32.const 63255) "a") (data (i32.const 63258) "a") (data (i32.const 63261) "a") (data (i32.const 63264) "a") (data (i32.const 63267) "a") (data (i32.const 63270) "a") (data (i32.const 63273) "a") (data (i32.const 63276) "a") (data (i32.const 63279) "a") (data (i32.const 63282) "a") (data (i32.const 63285) "a") (data (i32.const 63288) "a") (data (i32.const 63291) "a") (data (i32.const 63294) "a") (data (i32.const 63297) "a") (data (i32.const 63300) "a") (data (i32.const 63303) "a") (data (i32.const 63306) "a") (data (i32.const 63309) "a") (data (i32.const 63312) "a") (data (i32.const 63315) "a") (data (i32.const 63318) "a") (data (i32.const 63321) "a") (data (i32.const 63324) "a") (data (i32.const 63327) "a") (data (i32.const 63330) "a") (data (i32.const 63333) "a") (data (i32.const 63336) "a") (data (i32.const 63339) "a") (data (i32.const 63342) "a") (data (i32.const 63345) "a") (data (i32.const 63348) "a") (data (i32.const 63351) "a") (data (i32.const 63354) "a") (data (i32.const 63357) "a") (data (i32.const 63360) "a") (data (i32.const 63363) "a") (data (i32.const 63366) "a") (data (i32.const 63369) "a") (data (i32.const 63372) "a") (data (i32.const 63375) "a") (data (i32.const 63378) "a") (data (i32.const 63381) "a") (data (i32.const 63384) "a") (data (i32.const 63387) "a") (data (i32.const 63390) "a") (data (i32.const 63393) "a") (data (i32.const 63396) "a") (data (i32.const 63399) "a") (data (i32.const 63402) "a") (data (i32.const 63405) "a") (data (i32.const 63408) "a") (data (i32.const 63411) "a") (data (i32.const 63414) "a") (data (i32.const 63417) "a") (data (i32.const 63420) "a") (data (i32.const 63423) "a") (data (i32.const 63426) "a") (data (i32.const 63429) "a") (data (i32.const 63432) "a") (data (i32.const 63435) "a") (data (i32.const 63438) "a") (data (i32.const 63441) "a") (data (i32.const 63444) "a") (data (i32.const 63447) "a") (data (i32.const 63450) "a") (data (i32.const 63453) "a") (data (i32.const 63456) "a") (data (i32.const 63459) "a") (data (i32.const 63462) "a") (data (i32.const 63465) "a") (data (i32.const 63468) "a") (data (i32.const 63471) "a") (data (i32.const 63474) "a") (data (i32.const 63477) "a") (data (i32.const 63480) "a") (data (i32.const 63483) "a") (data (i32.const 63486) "a") (data (i32.const 63489) "a") (data (i32.const 63492) "a") (data (i32.const 63495) "a") (data (i32.const 63498) "a") (data (i32.const 63501) "a") (data (i32.const 63504) "a") (data (i32.const 63507) "a") (data (i32.const 63510) "a") (data (i32.const 63513) "a") (data (i32.const 63516) "a") (data (i32.const 63519) "a") (data (i32.const 63522) "a") (data (i32.const 63525) "a") (data (i32.const 63528) "a") (data (i32.const 63531) "a") (data (i32.const 63534) "a") (data (i32.const 63537) "a") (data (i32.const 63540) "a") (data (i32.const 63543) "a") (data (i32.const 63546) "a") (data (i32.const 63549) "a") (data (i32.const 63552) "a") (data (i32.const 63555) "a") (data (i32.const 63558) "a") (data (i32.const 63561) "a") (data (i32.const 63564) "a") (data (i32.const 63567) "a") (data (i32.const 63570) "a") (data (i32.const 63573) "a") (data (i32.const 63576) "a") (data (i32.const 63579) "a") (data (i32.const 63582) "a") (data (i32.const 63585) "a") (data (i32.const 63588) "a") (data (i32.const 63591) "a") (data (i32.const 63594) "a") (data (i32.const 63597) "a") (data (i32.const 63600) "a") (data (i32.const 63603) "a") (data (i32.const 63606) "a") (data (i32.const 63609) "a") (data (i32.const 63612) "a") (data (i32.const 63615) "a") (data (i32.const 63618) "a") (data (i32.const 63621) "a") (data (i32.const 63624) "a") (data (i32.const 63627) "a") (data (i32.const 63630) "a") (data (i32.const 63633) "a") (data (i32.const 63636) "a") (data (i32.const 63639) "a") (data (i32.const 63642) "a") (data (i32.const 63645) "a") (data (i32.const 63648) "a") (data (i32.const 63651) "a") (data (i32.const 63654) "a") (data (i32.const 63657) "a") (data (i32.const 63660) "a") (data (i32.const 63663) "a") (data (i32.const 63666) "a") (data (i32.const 63669) "a") (data (i32.const 63672) "a") (data (i32.const 63675) "a") (data (i32.const 63678) "a") (data (i32.const 63681) "a") (data (i32.const 63684) "a") (data (i32.const 63687) "a") (data (i32.const 63690) "a") (data (i32.const 63693) "a") (data (i32.const 63696) "a") (data (i32.const 63699) "a") (data (i32.const 63702) "a") (data (i32.const 63705) "a") (data (i32.const 63708) "a") (data (i32.const 63711) "a") (data (i32.const 63714) "a") (data (i32.const 63717) "a") (data (i32.const 63720) "a") (data (i32.const 63723) "a") (data (i32.const 63726) "a") (data (i32.const 63729) "a") (data (i32.const 63732) "a") (data (i32.const 63735) "a") (data (i32.const 63738) "a") (data (i32.const 63741) "a") (data (i32.const 63744) "a") (data (i32.const 63747) "a") (data (i32.const 63750) "a") (data (i32.const 63753) "a") (data (i32.const 63756) "a") (data (i32.const 63759) "a") (data (i32.const 63762) "a") (data (i32.const 63765) "a") (data (i32.const 63768) "a") (data (i32.const 63771) "a") (data (i32.const 63774) "a") (data (i32.const 63777) "a") (data (i32.const 63780) "a") (data (i32.const 63783) "a") (data (i32.const 63786) "a") (data (i32.const 63789) "a") (data (i32.const 63792) "a") (data (i32.const 63795) "a") (data (i32.const 63798) "a") (data (i32.const 63801) "a") (data (i32.const 63804) "a") (data (i32.const 63807) "a") (data (i32.const 63810) "a") (data (i32.const 63813) "a") (data (i32.const 63816) "a") (data (i32.const 63819) "a") (data (i32.const 63822) "a") (data (i32.const 63825) "a") (data (i32.const 63828) "a") (data (i32.const 63831) "a") (data (i32.const 63834) "a") (data (i32.const 63837) "a") (data (i32.const 63840) "a") (data (i32.const 63843) "a") (data (i32.const 63846) "a") (data (i32.const 63849) "a") (data (i32.const 63852) "a") (data (i32.const 63855) "a") (data (i32.const 63858) "a") (data (i32.const 63861) "a") (data (i32.const 63864) "a") (data (i32.const 63867) "a") (data (i32.const 63870) "a") (data (i32.const 63873) "a") (data (i32.const 63876) "a") (data (i32.const 63879) "a") (data (i32.const 63882) "a") (data (i32.const 63885) "a") (data (i32.const 63888) "a") (data (i32.const 63891) "a") (data (i32.const 63894) "a") (data (i32.const 63897) "a") (data (i32.const 63900) "a") (data (i32.const 63903) "a") (data (i32.const 63906) "a") (data (i32.const 63909) "a") (data (i32.const 63912) "a") (data (i32.const 63915) "a") (data (i32.const 63918) "a") (data (i32.const 63921) "a") (data (i32.const 63924) "a") (data (i32.const 63927) "a") (data (i32.const 63930) "a") (data (i32.const 63933) "a") (data (i32.const 63936) "a") (data (i32.const 63939) "a") (data (i32.const 63942) "a") (data (i32.const 63945) "a") (data (i32.const 63948) "a") (data (i32.const 63951) "a") (data (i32.const 63954) "a") (data (i32.const 63957) "a") (data (i32.const 63960) "a") (data (i32.const 63963) "a") (data (i32.const 63966) "a") (data (i32.const 63969) "a") (data (i32.const 63972) "a") (data (i32.const 63975) "a") (data (i32.const 63978) "a") (data (i32.const 63981) "a") (data (i32.const 63984) "a") (data (i32.const 63987) "a") (data (i32.const 63990) "a") (data (i32.const 63993) "a") (data (i32.const 63996) "a") (data (i32.const 63999) "a") (data (i32.const 64002) "a") (data (i32.const 64005) "a") (data (i32.const 64008) "a") (data (i32.const 64011) "a") (data (i32.const 64014) "a") (data (i32.const 64017) "a") (data (i32.const 64020) "a") (data (i32.const 64023) "a") (data (i32.const 64026) "a") (data (i32.const 64029) "a") (data (i32.const 64032) "a") (data (i32.const 64035) "a") (data (i32.const 64038) "a") (data (i32.const 64041) "a") (data (i32.const 64044) "a") (data (i32.const 64047) "a") (data (i32.const 64050) "a") (data (i32.const 64053) "a") (data (i32.const 64056) "a") (data (i32.const 64059) "a") (data (i32.const 64062) "a") (data (i32.const 64065) "a") (data (i32.const 64068) "a") (data (i32.const 64071) "a") (data (i32.const 64074) "a") (data (i32.const 64077) "a") (data (i32.const 64080) "a") (data (i32.const 64083) "a") (data (i32.const 64086) "a") (data (i32.const 64089) "a") (data (i32.const 64092) "a") (data (i32.const 64095) "a") (data (i32.const 64098) "a") (data (i32.const 64101) "a") (data (i32.const 64104) "a") (data (i32.const 64107) "a") (data (i32.const 64110) "a") (data (i32.const 64113) "a") (data (i32.const 64116) "a") (data (i32.const 64119) "a") (data (i32.const 64122) "a") (data (i32.const 64125) "a") (data (i32.const 64128) "a") (data (i32.const 64131) "a") (data (i32.const 64134) "a") (data (i32.const 64137) "a") (data (i32.const 64140) "a") (data (i32.const 64143) "a") (data (i32.const 64146) "a") (data (i32.const 64149) "a") (data (i32.const 64152) "a") (data (i32.const 64155) "a") (data (i32.const 64158) "a") (data (i32.const 64161) "a") (data (i32.const 64164) "a") (data (i32.const 64167) "a") (data (i32.const 64170) "a") (data (i32.const 64173) "a") (data (i32.const 64176) "a") (data (i32.const 64179) "a") (data (i32.const 64182) "a") (data (i32.const 64185) "a") (data (i32.const 64188) "a") (data (i32.const 64191) "a") (data (i32.const 64194) "a") (data (i32.const 64197) "a") (data (i32.const 64200) "a") (data (i32.const 64203) "a") (data (i32.const 64206) "a") (data (i32.const 64209) "a") (data (i32.const 64212) "a") (data (i32.const 64215) "a") (data (i32.const 64218) "a") (data (i32.const 64221) "a") (data (i32.const 64224) "a") (data (i32.const 64227) "a") (data (i32.const 64230) "a") (data (i32.const 64233) "a") (data (i32.const 64236) "a") (data (i32.const 64239) "a") (data (i32.const 64242) "a") (data (i32.const 64245) "a") (data (i32.const 64248) "a") (data (i32.const 64251) "a") (data (i32.const 64254) "a") (data (i32.const 64257) "a") (data (i32.const 64260) "a") (data (i32.const 64263) "a") (data (i32.const 64266) "a") (data (i32.const 64269) "a") (data (i32.const 64272) "a") (data (i32.const 64275) "a") (data (i32.const 64278) "a") (data (i32.const 64281) "a") (data (i32.const 64284) "a") (data (i32.const 64287) "a") (data (i32.const 64290) "a") (data (i32.const 64293) "a") (data (i32.const 64296) "a") (data (i32.const 64299) "a") (data (i32.const 64302) "a") (data (i32.const 64305) "a") (data (i32.const 64308) "a") (data (i32.const 64311) "a") (data (i32.const 64314) "a") (data (i32.const 64317) "a") (data (i32.const 64320) "a") (data (i32.const 64323) "a") (data (i32.const 64326) "a") (data (i32.const 64329) "a") (data (i32.const 64332) "a") (data (i32.const 64335) "a") (data (i32.const 64338) "a") (data (i32.const 64341) "a") (data (i32.const 64344) "a") (data (i32.const 64347) "a") (data (i32.const 64350) "a") (data (i32.const 64353) "a") (data (i32.const 64356) "a") (data (i32.const 64359) "a") (data (i32.const 64362) "a") (data (i32.const 64365) "a") (data (i32.const 64368) "a") (data (i32.const 64371) "a") (data (i32.const 64374) "a") (data (i32.const 64377) "a") (data (i32.const 64380) "a") (data (i32.const 64383) "a") (data (i32.const 64386) "a") (data (i32.const 64389) "a") (data (i32.const 64392) "a") (data (i32.const 64395) "a") (data (i32.const 64398) "a") (data (i32.const 64401) "a") (data (i32.const 64404) "a") (data (i32.const 64407) "a") (data (i32.const 64410) "a") (data (i32.const 64413) "a") (data (i32.const 64416) "a") (data (i32.const 64419) "a") (data (i32.const 64422) "a") (data (i32.const 64425) "a") (data (i32.const 64428) "a") (data (i32.const 64431) "a") (data (i32.const 64434) "a") (data (i32.const 64437) "a") (data (i32.const 64440) "a") (data (i32.const 64443) "a") (data (i32.const 64446) "a") (data (i32.const 64449) "a") (data (i32.const 64452) "a") (data (i32.const 64455) "a") (data (i32.const 64458) "a") (data (i32.const 64461) "a") (data (i32.const 64464) "a") (data (i32.const 64467) "a") (data (i32.const 64470) "a") (data (i32.const 64473) "a") (data (i32.const 64476) "a") (data (i32.const 64479) "a") (data (i32.const 64482) "a") (data (i32.const 64485) "a") (data (i32.const 64488) "a") (data (i32.const 64491) "a") (data (i32.const 64494) "a") (data (i32.const 64497) "a") (data (i32.const 64500) "a") (data (i32.const 64503) "a") (data (i32.const 64506) "a") (data (i32.const 64509) "a") (data (i32.const 64512) "a") (data (i32.const 64515) "a") (data (i32.const 64518) "a") (data (i32.const 64521) "a") (data (i32.const 64524) "a") (data (i32.const 64527) "a") (data (i32.const 64530) "a") (data (i32.const 64533) "a") (data (i32.const 64536) "a") (data (i32.const 64539) "a") (data (i32.const 64542) "a") (data (i32.const 64545) "a") (data (i32.const 64548) "a") (data (i32.const 64551) "a") (data (i32.const 64554) "a") (data (i32.const 64557) "a") (data (i32.const 64560) "a") (data (i32.const 64563) "a") (data (i32.const 64566) "a") (data (i32.const 64569) "a") (data (i32.const 64572) "a") (data (i32.const 64575) "a") (data (i32.const 64578) "a") (data (i32.const 64581) "a") (data (i32.const 64584) "a") (data (i32.const 64587) "a") (data (i32.const 64590) "a") (data (i32.const 64593) "a") (data (i32.const 64596) "a") (data (i32.const 64599) "a") (data (i32.const 64602) "a") (data (i32.const 64605) "a") (data (i32.const 64608) "a") (data (i32.const 64611) "a") (data (i32.const 64614) "a") (data (i32.const 64617) "a") (data (i32.const 64620) "a") (data (i32.const 64623) "a") (data (i32.const 64626) "a") (data (i32.const 64629) "a") (data (i32.const 64632) "a") (data (i32.const 64635) "a") (data (i32.const 64638) "a") (data (i32.const 64641) "a") (data (i32.const 64644) "a") (data (i32.const 64647) "a") (data (i32.const 64650) "a") (data (i32.const 64653) "a") (data (i32.const 64656) "a") (data (i32.const 64659) "a") (data (i32.const 64662) "a") (data (i32.const 64665) "a") (data (i32.const 64668) "a") (data (i32.const 64671) "a") (data (i32.const 64674) "a") (data (i32.const 64677) "a") (data (i32.const 64680) "a") (data (i32.const 64683) "a") (data (i32.const 64686) "a") (data (i32.const 64689) "a") (data (i32.const 64692) "a") (data (i32.const 64695) "a") (data (i32.const 64698) "a") (data (i32.const 64701) "a") (data (i32.const 64704) "a") (data (i32.const 64707) "a") (data (i32.const 64710) "a") (data (i32.const 64713) "a") (data (i32.const 64716) "a") (data (i32.const 64719) "a") (data (i32.const 64722) "a") (data (i32.const 64725) "a") (data (i32.const 64728) "a") (data (i32.const 64731) "a") (data (i32.const 64734) "a") (data (i32.const 64737) "a") (data (i32.const 64740) "a") (data (i32.const 64743) "a") (data (i32.const 64746) "a") (data (i32.const 64749) "a") (data (i32.const 64752) "a") (data (i32.const 64755) "a") (data (i32.const 64758) "a") (data (i32.const 64761) "a") (data (i32.const 64764) "a") (data (i32.const 64767) "a") (data (i32.const 64770) "a") (data (i32.const 64773) "a") (data (i32.const 64776) "a") (data (i32.const 64779) "a") (data (i32.const 64782) "a") (data (i32.const 64785) "a") (data (i32.const 64788) "a") (data (i32.const 64791) "a") (data (i32.const 64794) "a") (data (i32.const 64797) "a") (data (i32.const 64800) "a") (data (i32.const 64803) "a") (data (i32.const 64806) "a") (data (i32.const 64809) "a") (data (i32.const 64812) "a") (data (i32.const 64815) "a") (data (i32.const 64818) "a") (data (i32.const 64821) "a") (data (i32.const 64824) "a") (data (i32.const 64827) "a") (data (i32.const 64830) "a") (data (i32.const 64833) "a") (data (i32.const 64836) "a") (data (i32.const 64839) "a") (data (i32.const 64842) "a") (data (i32.const 64845) "a") (data (i32.const 64848) "a") (data (i32.const 64851) "a") (data (i32.const 64854) "a") (data (i32.const 64857) "a") (data (i32.const 64860) "a") (data (i32.const 64863) "a") (data (i32.const 64866) "a") (data (i32.const 64869) "a") (data (i32.const 64872) "a") (data (i32.const 64875) "a") (data (i32.const 64878) "a") (data (i32.const 64881) "a") (data (i32.const 64884) "a") (data (i32.const 64887) "a") (data (i32.const 64890) "a") (data (i32.const 64893) "a") (data (i32.const 64896) "a") (data (i32.const 64899) "a") (data (i32.const 64902) "a") (data (i32.const 64905) "a") (data (i32.const 64908) "a") (data (i32.const 64911) "a") (data (i32.const 64914) "a") (data (i32.const 64917) "a") (data (i32.const 64920) "a") (data (i32.const 64923) "a") (data (i32.const 64926) "a") (data (i32.const 64929) "a") (data (i32.const 64932) "a") (data (i32.const 64935) "a") (data (i32.const 64938) "a") (data (i32.const 64941) "a") (data (i32.const 64944) "a") (data (i32.const 64947) "a") (data (i32.const 64950) "a") (data (i32.const 64953) "a") (data (i32.const 64956) "a") (data (i32.const 64959) "a") (data (i32.const 64962) "a") (data (i32.const 64965) "a") (data (i32.const 64968) "a") (data (i32.const 64971) "a") (data (i32.const 64974) "a") (data (i32.const 64977) "a") (data (i32.const 64980) "a") (data (i32.const 64983) "a") (data (i32.const 64986) "a") (data (i32.const 64989) "a") (data (i32.const 64992) "a") (data (i32.const 64995) "a") (data (i32.const 64998) "a") (data (i32.const 65001) "a") (data (i32.const 65004) "a") (data (i32.const 65007) "a") (data (i32.const 65010) "a") (data (i32.const 65013) "a") (data (i32.const 65016) "a") (data (i32.const 65019) "a") (data (i32.const 65022) "a") (data (i32.const 65025) "a") (data (i32.const 65028) "a") (data (i32.const 65031) "a") (data (i32.const 65034) "a") (data (i32.const 65037) "a") (data (i32.const 65040) "a") (data (i32.const 65043) "a") (data (i32.const 65046) "a") (data (i32.const 65049) "a") (data (i32.const 65052) "a") (data (i32.const 65055) "a") (data (i32.const 65058) "a") (data (i32.const 65061) "a") (data (i32.const 65064) "a") (data (i32.const 65067) "a") (data (i32.const 65070) "a") (data (i32.const 65073) "a") (data (i32.const 65076) "a") (data (i32.const 65079) "a") (data (i32.const 65082) "a") (data (i32.const 65085) "a") (data (i32.const 65088) "a") (data (i32.const 65091) "a") (data (i32.const 65094) "a") (data (i32.const 65097) "a") (data (i32.const 65100) "a") (data (i32.const 65103) "a") (data (i32.const 65106) "a") (data (i32.const 65109) "a") (data (i32.const 65112) "a") (data (i32.const 65115) "a") (data (i32.const 65118) "a") (data (i32.const 65121) "a") (data (i32.const 65124) "a") (data (i32.const 65127) "a") (data (i32.const 65130) "a") (data (i32.const 65133) "a") (data (i32.const 65136) "a") (data (i32.const 65139) "a") (data (i32.const 65142) "a") (data (i32.const 65145) "a") (data (i32.const 65148) "a") (data (i32.const 65151) "a") (data (i32.const 65154) "a") (data (i32.const 65157) "a") (data (i32.const 65160) "a") (data (i32.const 65163) "a") (data (i32.const 65166) "a") (data (i32.const 65169) "a") (data (i32.const 65172) "a") (data (i32.const 65175) "a") (data (i32.const 65178) "a") (data (i32.const 65181) "a") (data (i32.const 65184) "a") (data (i32.const 65187) "a") (data (i32.const 65190) "a") (data (i32.const 65193) "a") (data (i32.const 65196) "a") (data (i32.const 65199) "a") (data (i32.const 65202) "a") (data (i32.const 65205) "a") (data (i32.const 65208) "a") (data (i32.const 65211) "a") (data (i32.const 65214) "a") (data (i32.const 65217) "a") (data (i32.const 65220) "a") (data (i32.const 65223) "a") (data (i32.const 65226) "a") (data (i32.const 65229) "a") (data (i32.const 65232) "a") (data (i32.const 65235) "a") (data (i32.const 65238) "a") (data (i32.const 65241) "a") (data (i32.const 65244) "a") (data (i32.const 65247) "a") (data (i32.const 65250) "a") (data (i32.const 65253) "a") (data (i32.const 65256) "a") (data (i32.const 65259) "a") (data (i32.const 65262) "a") (data (i32.const 65265) "a") (data (i32.const 65268) "a") (data (i32.const 65271) "a") (data (i32.const 65274) "a") (data (i32.const 65277) "a") (data (i32.const 65280) "a") (data (i32.const 65283) "a") (data (i32.const 65286) "a") (data (i32.const 65289) "a") (data (i32.const 65292) "a") (data (i32.const 65295) "a") (data (i32.const 65298) "a") (data (i32.const 65301) "a") (data (i32.const 65304) "a") (data (i32.const 65307) "a") (data (i32.const 65310) "a") (data (i32.const 65313) "a") (data (i32.const 65316) "a") (data (i32.const 65319) "a") (data (i32.const 65322) "a") (data (i32.const 65325) "a") (data (i32.const 65328) "a") (data (i32.const 65331) "a") (data (i32.const 65334) "a") (data (i32.const 65337) "a") (data (i32.const 65340) "a") (data (i32.const 65343) "a") (data (i32.const 65346) "a") (data (i32.const 65349) "a") (data (i32.const 65352) "a") (data (i32.const 65355) "a") (data (i32.const 65358) "a") (data (i32.const 65361) "a") (data (i32.const 65364) "a") (data (i32.const 65367) "a") (data (i32.const 65370) "a") (data (i32.const 65373) "a") (data (i32.const 65376) "a") (data (i32.const 65379) "a") (data (i32.const 65382) "a") (data (i32.const 65385) "a") (data (i32.const 65388) "a") (data (i32.const 65391) "a") (data (i32.const 65394) "a") (data (i32.const 65397) "a") (data (i32.const 65400) "a") (data (i32.const 65403) "a") (data (i32.const 65406) "a") (data (i32.const 65409) "a") (data (i32.const 65412) "a") (data (i32.const 65415) "a") (data (i32.const 65418) "a") (data (i32.const 65421) "a") (data (i32.const 65424) "a") (data (i32.const 65427) "a") (data (i32.const 65430) "a") (data (i32.const 65433) "a") (data (i32.const 65436) "a") (data (i32.const 65439) "a") (data (i32.const 65442) "a") (data (i32.const 65445) "a") (data (i32.const 65448) "a") (data (i32.const 65451) "a") (data (i32.const 65454) "a") (data (i32.const 65457) "a") (data (i32.const 65460) "a") (data (i32.const 65463) "a") (data (i32.const 65466) "a") (data (i32.const 65469) "a") (data (i32.const 65472) "a") (data (i32.const 65475) "a") (data (i32.const 65478) "a") (data (i32.const 65481) "a") (data (i32.const 65484) "a") (data (i32.const 65487) "a") (data (i32.const 65490) "a") (data (i32.const 65493) "a") (data (i32.const 65496) "a") (data (i32.const 65499) "a") (data (i32.const 65502) "a") (data (i32.const 65505) "a") (data (i32.const 65508) "a") (data (i32.const 65511) "a") (data (i32.const 65514) "a") (data (i32.const 65517) "a") (data (i32.const 65520) "a") (data (i32.const 65523) "a") (data (i32.const 65526) "a") (data (i32.const 65529) "a") (data (i32.const 65532) "a") (data (i32.const 65535) "a") (data (i32.const 65538) "a") (data (i32.const 65541) "a") (data (i32.const 65544) "a") (data (i32.const 65547) "a") (data (i32.const 65550) "a") (data (i32.const 65553) "a") (data (i32.const 65556) "a") (data (i32.const 65559) "a") (data (i32.const 65562) "a") (data (i32.const 65565) "a") (data (i32.const 65568) "a") (data (i32.const 65571) "a") (data (i32.const 65574) "a") (data (i32.const 65577) "a") (data (i32.const 65580) "a") (data (i32.const 65583) "a") (data (i32.const 65586) "a") (data (i32.const 65589) "a") (data (i32.const 65592) "a") (data (i32.const 65595) "a") (data (i32.const 65598) "a") (data (i32.const 65601) "a") (data (i32.const 65604) "a") (data (i32.const 65607) "a") (data (i32.const 65610) "a") (data (i32.const 65613) "a") (data (i32.const 65616) "a") (data (i32.const 65619) "a") (data (i32.const 65622) "a") (data (i32.const 65625) "a") (data (i32.const 65628) "a") (data (i32.const 65631) "a") (data (i32.const 65634) "a") (data (i32.const 65637) "a") (data (i32.const 65640) "a") (data (i32.const 65643) "a") (data (i32.const 65646) "a") (data (i32.const 65649) "a") (data (i32.const 65652) "a") (data (i32.const 65655) "a") (data (i32.const 65658) "a") (data (i32.const 65661) "a") (data (i32.const 65664) "a") (data (i32.const 65667) "a") (data (i32.const 65670) "a") (data (i32.const 65673) "a") (data (i32.const 65676) "a") (data (i32.const 65679) "a") (data (i32.const 65682) "a") (data (i32.const 65685) "a") (data (i32.const 65688) "a") (data (i32.const 65691) "a") (data (i32.const 65694) "a") (data (i32.const 65697) "a") (data (i32.const 65700) "a") (data (i32.const 65703) "a") (data (i32.const 65706) "a") (data (i32.const 65709) "a") (data (i32.const 65712) "a") (data (i32.const 65715) "a") (data (i32.const 65718) "a") (data (i32.const 65721) "a") (data (i32.const 65724) "a") (data (i32.const 65727) "a") (data (i32.const 65730) "a") (data (i32.const 65733) "a") (data (i32.const 65736) "a") (data (i32.const 65739) "a") (data (i32.const 65742) "a") (data (i32.const 65745) "a") (data (i32.const 65748) "a") (data (i32.const 65751) "a") (data (i32.const 65754) "a") (data (i32.const 65757) "a") (data (i32.const 65760) "a") (data (i32.const 65763) "a") (data (i32.const 65766) "a") (data (i32.const 65769) "a") (data (i32.const 65772) "a") (data (i32.const 65775) "a") (data (i32.const 65778) "a") (data (i32.const 65781) "a") (data (i32.const 65784) "a") (data (i32.const 65787) "a") (data (i32.const 65790) "a") (data (i32.const 65793) "a") (data (i32.const 65796) "a") (data (i32.const 65799) "a") (data (i32.const 65802) "a") (data (i32.const 65805) "a") (data (i32.const 65808) "a") (data (i32.const 65811) "a") (data (i32.const 65814) "a") (data (i32.const 65817) "a") (data (i32.const 65820) "a") (data (i32.const 65823) "a") (data (i32.const 65826) "a") (data (i32.const 65829) "a") (data (i32.const 65832) "a") (data (i32.const 65835) "a") (data (i32.const 65838) "a") (data (i32.const 65841) "a") (data (i32.const 65844) "a") (data (i32.const 65847) "a") (data (i32.const 65850) "a") (data (i32.const 65853) "a") (data (i32.const 65856) "a") (data (i32.const 65859) "a") (data (i32.const 65862) "a") (data (i32.const 65865) "a") (data (i32.const 65868) "a") (data (i32.const 65871) "a") (data (i32.const 65874) "a") (data (i32.const 65877) "a") (data (i32.const 65880) "a") (data (i32.const 65883) "a") (data (i32.const 65886) "a") (data (i32.const 65889) "a") (data (i32.const 65892) "a") (data (i32.const 65895) "a") (data (i32.const 65898) "a") (data (i32.const 65901) "a") (data (i32.const 65904) "a") (data (i32.const 65907) "a") (data (i32.const 65910) "a") (data (i32.const 65913) "a") (data (i32.const 65916) "a") (data (i32.const 65919) "a") (data (i32.const 65922) "a") (data (i32.const 65925) "a") (data (i32.const 65928) "a") (data (i32.const 65931) "a") (data (i32.const 65934) "a") (data (i32.const 65937) "a") (data (i32.const 65940) "a") (data (i32.const 65943) "a") (data (i32.const 65946) "a") (data (i32.const 65949) "a") (data (i32.const 65952) "a") (data (i32.const 65955) "a") (data (i32.const 65958) "a") (data (i32.const 65961) "a") (data (i32.const 65964) "a") (data (i32.const 65967) "a") (data (i32.const 65970) "a") (data (i32.const 65973) "a") (data (i32.const 65976) "a") (data (i32.const 65979) "a") (data (i32.const 65982) "a") (data (i32.const 65985) "a") (data (i32.const 65988) "a") (data (i32.const 65991) "a") (data (i32.const 65994) "a") (data (i32.const 65997) "a") (data (i32.const 66000) "a") (data (i32.const 66003) "a") (data (i32.const 66006) "a") (data (i32.const 66009) "a") (data (i32.const 66012) "a") (data (i32.const 66015) "a") (data (i32.const 66018) "a") (data (i32.const 66021) "a") (data (i32.const 66024) "a") (data (i32.const 66027) "a") (data (i32.const 66030) "a") (data (i32.const 66033) "a") (data (i32.const 66036) "a") (data (i32.const 66039) "a") (data (i32.const 66042) "a") (data (i32.const 66045) "a") (data (i32.const 66048) "a") (data (i32.const 66051) "a") (data (i32.const 66054) "a") (data (i32.const 66057) "a") (data (i32.const 66060) "a") (data (i32.const 66063) "a") (data (i32.const 66066) "a") (data (i32.const 66069) "a") (data (i32.const 66072) "a") (data (i32.const 66075) "a") (data (i32.const 66078) "a") (data (i32.const 66081) "a") (data (i32.const 66084) "a") (data (i32.const 66087) "a") (data (i32.const 66090) "a") (data (i32.const 66093) "a") (data (i32.const 66096) "a") (data (i32.const 66099) "a") (data (i32.const 66102) "a") (data (i32.const 66105) "a") (data (i32.const 66108) "a") (data (i32.const 66111) "a") (data (i32.const 66114) "a") (data (i32.const 66117) "a") (data (i32.const 66120) "a") (data (i32.const 66123) "a") (data (i32.const 66126) "a") (data (i32.const 66129) "a") (data (i32.const 66132) "a") (data (i32.const 66135) "a") (data (i32.const 66138) "a") (data (i32.const 66141) "a") (data (i32.const 66144) "a") (data (i32.const 66147) "a") (data (i32.const 66150) "a") (data (i32.const 66153) "a") (data (i32.const 66156) "a") (data (i32.const 66159) "a") (data (i32.const 66162) "a") (data (i32.const 66165) "a") (data (i32.const 66168) "a") (data (i32.const 66171) "a") (data (i32.const 66174) "a") (data (i32.const 66177) "a") (data (i32.const 66180) "a") (data (i32.const 66183) "a") (data (i32.const 66186) "a") (data (i32.const 66189) "a") (data (i32.const 66192) "a") (data (i32.const 66195) "a") (data (i32.const 66198) "a") (data (i32.const 66201) "a") (data (i32.const 66204) "a") (data (i32.const 66207) "a") (data (i32.const 66210) "a") (data (i32.const 66213) "a") (data (i32.const 66216) "a") (data (i32.const 66219) "a") (data (i32.const 66222) "a") (data (i32.const 66225) "a") (data (i32.const 66228) "a") (data (i32.const 66231) "a") (data (i32.const 66234) "a") (data (i32.const 66237) "a") (data (i32.const 66240) "a") (data (i32.const 66243) "a") (data (i32.const 66246) "a") (data (i32.const 66249) "a") (data (i32.const 66252) "a") (data (i32.const 66255) "a") (data (i32.const 66258) "a") (data (i32.const 66261) "a") (data (i32.const 66264) "a") (data (i32.const 66267) "a") (data (i32.const 66270) "a") (data (i32.const 66273) "a") (data (i32.const 66276) "a") (data (i32.const 66279) "a") (data (i32.const 66282) "a") (data (i32.const 66285) "a") (data (i32.const 66288) "a") (data (i32.const 66291) "a") (data (i32.const 66294) "a") (data (i32.const 66297) "a") (data (i32.const 66300) "a") (data (i32.const 66303) "a") (data (i32.const 66306) "a") (data (i32.const 66309) "a") (data (i32.const 66312) "a") (data (i32.const 66315) "a") (data (i32.const 66318) "a") (data (i32.const 66321) "a") (data (i32.const 66324) "a") (data (i32.const 66327) "a") (data (i32.const 66330) "a") (data (i32.const 66333) "a") (data (i32.const 66336) "a") (data (i32.const 66339) "a") (data (i32.const 66342) "a") (data (i32.const 66345) "a") (data (i32.const 66348) "a") (data (i32.const 66351) "a") (data (i32.const 66354) "a") (data (i32.const 66357) "a") (data (i32.const 66360) "a") (data (i32.const 66363) "a") (data (i32.const 66366) "a") (data (i32.const 66369) "a") (data (i32.const 66372) "a") (data (i32.const 66375) "a") (data (i32.const 66378) "a") (data (i32.const 66381) "a") (data (i32.const 66384) "a") (data (i32.const 66387) "a") (data (i32.const 66390) "a") (data (i32.const 66393) "a") (data (i32.const 66396) "a") (data (i32.const 66399) "a") (data (i32.const 66402) "a") (data (i32.const 66405) "a") (data (i32.const 66408) "a") (data (i32.const 66411) "a") (data (i32.const 66414) "a") (data (i32.const 66417) "a") (data (i32.const 66420) "a") (data (i32.const 66423) "a") (data (i32.const 66426) "a") (data (i32.const 66429) "a") (data (i32.const 66432) "a") (data (i32.const 66435) "a") (data (i32.const 66438) "a") (data (i32.const 66441) "a") (data (i32.const 66444) "a") (data (i32.const 66447) "a") (data (i32.const 66450) "a") (data (i32.const 66453) "a") (data (i32.const 66456) "a") (data (i32.const 66459) "a") (data (i32.const 66462) "a") (data (i32.const 66465) "a") (data (i32.const 66468) "a") (data (i32.const 66471) "a") (data (i32.const 66474) "a") (data (i32.const 66477) "a") (data (i32.const 66480) "a") (data (i32.const 66483) "a") (data (i32.const 66486) "a") (data (i32.const 66489) "a") (data (i32.const 66492) "a") (data (i32.const 66495) "a") (data (i32.const 66498) "a") (data (i32.const 66501) "a") (data (i32.const 66504) "a") (data (i32.const 66507) "a") (data (i32.const 66510) "a") (data (i32.const 66513) "a") (data (i32.const 66516) "a") (data (i32.const 66519) "a") (data (i32.const 66522) "a") (data (i32.const 66525) "a") (data (i32.const 66528) "a") (data (i32.const 66531) "a") (data (i32.const 66534) "a") (data (i32.const 66537) "a") (data (i32.const 66540) "a") (data (i32.const 66543) "a") (data (i32.const 66546) "a") (data (i32.const 66549) "a") (data (i32.const 66552) "a") (data (i32.const 66555) "a") (data (i32.const 66558) "a") (data (i32.const 66561) "a") (data (i32.const 66564) "a") (data (i32.const 66567) "a") (data (i32.const 66570) "a") (data (i32.const 66573) "a") (data (i32.const 66576) "a") (data (i32.const 66579) "a") (data (i32.const 66582) "a") (data (i32.const 66585) "a") (data (i32.const 66588) "a") (data (i32.const 66591) "a") (data (i32.const 66594) "a") (data (i32.const 66597) "a") (data (i32.const 66600) "a") (data (i32.const 66603) "a") (data (i32.const 66606) "a") (data (i32.const 66609) "a") (data (i32.const 66612) "a") (data (i32.const 66615) "a") (data (i32.const 66618) "a") (data (i32.const 66621) "a") (data (i32.const 66624) "a") (data (i32.const 66627) "a") (data (i32.const 66630) "a") (data (i32.const 66633) "a") (data (i32.const 66636) "a") (data (i32.const 66639) "a") (data (i32.const 66642) "a") (data (i32.const 66645) "a") (data (i32.const 66648) "a") (data (i32.const 66651) "a") (data (i32.const 66654) "a") (data (i32.const 66657) "a") (data (i32.const 66660) "a") (data (i32.const 66663) "a") (data (i32.const 66666) "a") (data (i32.const 66669) "a") (data (i32.const 66672) "a") (data (i32.const 66675) "a") (data (i32.const 66678) "a") (data (i32.const 66681) "a") (data (i32.const 66684) "a") (data (i32.const 66687) "a") (data (i32.const 66690) "a") (data (i32.const 66693) "a") (data (i32.const 66696) "a") (data (i32.const 66699) "a") (data (i32.const 66702) "a") (data (i32.const 66705) "a") (data (i32.const 66708) "a") (data (i32.const 66711) "a") (data (i32.const 66714) "a") (data (i32.const 66717) "a") (data (i32.const 66720) "a") (data (i32.const 66723) "a") (data (i32.const 66726) "a") (data (i32.const 66729) "a") (data (i32.const 66732) "a") (data (i32.const 66735) "a") (data (i32.const 66738) "a") (data (i32.const 66741) "a") (data (i32.const 66744) "a") (data (i32.const 66747) "a") (data (i32.const 66750) "a") (data (i32.const 66753) "a") (data (i32.const 66756) "a") (data (i32.const 66759) "a") (data (i32.const 66762) "a") (data (i32.const 66765) "a") (data (i32.const 66768) "a") (data (i32.const 66771) "a") (data (i32.const 66774) "a") (data (i32.const 66777) "a") (data (i32.const 66780) "a") (data (i32.const 66783) "a") (data (i32.const 66786) "a") (data (i32.const 66789) "a") (data (i32.const 66792) "a") (data (i32.const 66795) "a") (data (i32.const 66798) "a") (data (i32.const 66801) "a") (data (i32.const 66804) "a") (data (i32.const 66807) "a") (data (i32.const 66810) "a") (data (i32.const 66813) "a") (data (i32.const 66816) "a") (data (i32.const 66819) "a") (data (i32.const 66822) "a") (data (i32.const 66825) "a") (data (i32.const 66828) "a") (data (i32.const 66831) "a") (data (i32.const 66834) "a") (data (i32.const 66837) "a") (data (i32.const 66840) "a") (data (i32.const 66843) "a") (data (i32.const 66846) "a") (data (i32.const 66849) "a") (data (i32.const 66852) "a") (data (i32.const 66855) "a") (data (i32.const 66858) "a") (data (i32.const 66861) "a") (data (i32.const 66864) "a") (data (i32.const 66867) "a") (data (i32.const 66870) "a") (data (i32.const 66873) "a") (data (i32.const 66876) "a") (data (i32.const 66879) "a") (data (i32.const 66882) "a") (data (i32.const 66885) "a") (data (i32.const 66888) "a") (data (i32.const 66891) "a") (data (i32.const 66894) "a") (data (i32.const 66897) "a") (data (i32.const 66900) "a") (data (i32.const 66903) "a") (data (i32.const 66906) "a") (data (i32.const 66909) "a") (data (i32.const 66912) "a") (data (i32.const 66915) "a") (data (i32.const 66918) "a") (data (i32.const 66921) "a") (data (i32.const 66924) "a") (data (i32.const 66927) "a") (data (i32.const 66930) "a") (data (i32.const 66933) "a") (data (i32.const 66936) "a") (data (i32.const 66939) "a") (data (i32.const 66942) "a") (data (i32.const 66945) "a") (data (i32.const 66948) "a") (data (i32.const 66951) "a") (data (i32.const 66954) "a") (data (i32.const 66957) "a") (data (i32.const 66960) "a") (data (i32.const 66963) "a") (data (i32.const 66966) "a") (data (i32.const 66969) "a") (data (i32.const 66972) "a") (data (i32.const 66975) "a") (data (i32.const 66978) "a") (data (i32.const 66981) "a") (data (i32.const 66984) "a") (data (i32.const 66987) "a") (data (i32.const 66990) "a") (data (i32.const 66993) "a") (data (i32.const 66996) "a") (data (i32.const 66999) "a") (data (i32.const 67002) "a") (data (i32.const 67005) "a") (data (i32.const 67008) "a") (data (i32.const 67011) "a") (data (i32.const 67014) "a") (data (i32.const 67017) "a") (data (i32.const 67020) "a") (data (i32.const 67023) "a") (data (i32.const 67026) "a") (data (i32.const 67029) "a") (data (i32.const 67032) "a") (data (i32.const 67035) "a") (data (i32.const 67038) "a") (data (i32.const 67041) "a") (data (i32.const 67044) "a") (data (i32.const 67047) "a") (data (i32.const 67050) "a") (data (i32.const 67053) "a") (data (i32.const 67056) "a") (data (i32.const 67059) "a") (data (i32.const 67062) "a") (data (i32.const 67065) "a") (data (i32.const 67068) "a") (data (i32.const 67071) "a") (data (i32.const 67074) "a") (data (i32.const 67077) "a") (data (i32.const 67080) "a") (data (i32.const 67083) "a") (data (i32.const 67086) "a") (data (i32.const 67089) "a") (data (i32.const 67092) "a") (data (i32.const 67095) "a") (data (i32.const 67098) "a") (data (i32.const 67101) "a") (data (i32.const 67104) "a") (data (i32.const 67107) "a") (data (i32.const 67110) "a") (data (i32.const 67113) "a") (data (i32.const 67116) "a") (data (i32.const 67119) "a") (data (i32.const 67122) "a") (data (i32.const 67125) "a") (data (i32.const 67128) "a") (data (i32.const 67131) "a") (data (i32.const 67134) "a") (data (i32.const 67137) "a") (data (i32.const 67140) "a") (data (i32.const 67143) "a") (data (i32.const 67146) "a") (data (i32.const 67149) "a") (data (i32.const 67152) "a") (data (i32.const 67155) "a") (data (i32.const 67158) "a") (data (i32.const 67161) "a") (data (i32.const 67164) "a") (data (i32.const 67167) "a") (data (i32.const 67170) "a") (data (i32.const 67173) "a") (data (i32.const 67176) "a") (data (i32.const 67179) "a") (data (i32.const 67182) "a") (data (i32.const 67185) "a") (data (i32.const 67188) "a") (data (i32.const 67191) "a") (data (i32.const 67194) "a") (data (i32.const 67197) "a") (data (i32.const 67200) "a") (data (i32.const 67203) "a") (data (i32.const 67206) "a") (data (i32.const 67209) "a") (data (i32.const 67212) "a") (data (i32.const 67215) "a") (data (i32.const 67218) "a") (data (i32.const 67221) "a") (data (i32.const 67224) "a") (data (i32.const 67227) "a") (data (i32.const 67230) "a") (data (i32.const 67233) "a") (data (i32.const 67236) "a") (data (i32.const 67239) "a") (data (i32.const 67242) "a") (data (i32.const 67245) "a") (data (i32.const 67248) "a") (data (i32.const 67251) "a") (data (i32.const 67254) "a") (data (i32.const 67257) "a") (data (i32.const 67260) "a") (data (i32.const 67263) "a") (data (i32.const 67266) "a") (data (i32.const 67269) "a") (data (i32.const 67272) "a") (data (i32.const 67275) "a") (data (i32.const 67278) "a") (data (i32.const 67281) "a") (data (i32.const 67284) "a") (data (i32.const 67287) "a") (data (i32.const 67290) "a") (data (i32.const 67293) "a") (data (i32.const 67296) "a") (data (i32.const 67299) "a") (data (i32.const 67302) "a") (data (i32.const 67305) "a") (data (i32.const 67308) "a") (data (i32.const 67311) "a") (data (i32.const 67314) "a") (data (i32.const 67317) "a") (data (i32.const 67320) "a") (data (i32.const 67323) "a") (data (i32.const 67326) "a") (data (i32.const 67329) "a") (data (i32.const 67332) "a") (data (i32.const 67335) "a") (data (i32.const 67338) "a") (data (i32.const 67341) "a") (data (i32.const 67344) "a") (data (i32.const 67347) "a") (data (i32.const 67350) "a") (data (i32.const 67353) "a") (data (i32.const 67356) "a") (data (i32.const 67359) "a") (data (i32.const 67362) "a") (data (i32.const 67365) "a") (data (i32.const 67368) "a") (data (i32.const 67371) "a") (data (i32.const 67374) "a") (data (i32.const 67377) "a") (data (i32.const 67380) "a") (data (i32.const 67383) "a") (data (i32.const 67386) "a") (data (i32.const 67389) "a") (data (i32.const 67392) "a") (data (i32.const 67395) "a") (data (i32.const 67398) "a") (data (i32.const 67401) "a") (data (i32.const 67404) "a") (data (i32.const 67407) "a") (data (i32.const 67410) "a") (data (i32.const 67413) "a") (data (i32.const 67416) "a") (data (i32.const 67419) "a") (data (i32.const 67422) "a") (data (i32.const 67425) "a") (data (i32.const 67428) "a") (data (i32.const 67431) "a") (data (i32.const 67434) "a") (data (i32.const 67437) "a") (data (i32.const 67440) "a") (data (i32.const 67443) "a") (data (i32.const 67446) "a") (data (i32.const 67449) "a") (data (i32.const 67452) "a") (data (i32.const 67455) "a") (data (i32.const 67458) "a") (data (i32.const 67461) "a") (data (i32.const 67464) "a") (data (i32.const 67467) "a") (data (i32.const 67470) "a") (data (i32.const 67473) "a") (data (i32.const 67476) "a") (data (i32.const 67479) "a") (data (i32.const 67482) "a") (data (i32.const 67485) "a") (data (i32.const 67488) "a") (data (i32.const 67491) "a") (data (i32.const 67494) "a") (data (i32.const 67497) "a") (data (i32.const 67500) "a") (data (i32.const 67503) "a") (data (i32.const 67506) "a") (data (i32.const 67509) "a") (data (i32.const 67512) "a") (data (i32.const 67515) "a") (data (i32.const 67518) "a") (data (i32.const 67521) "a") (data (i32.const 67524) "a") (data (i32.const 67527) "a") (data (i32.const 67530) "a") (data (i32.const 67533) "a") (data (i32.const 67536) "a") (data (i32.const 67539) "a") (data (i32.const 67542) "a") (data (i32.const 67545) "a") (data (i32.const 67548) "a") (data (i32.const 67551) "a") (data (i32.const 67554) "a") (data (i32.const 67557) "a") (data (i32.const 67560) "a") (data (i32.const 67563) "a") (data (i32.const 67566) "a") (data (i32.const 67569) "a") (data (i32.const 67572) "a") (data (i32.const 67575) "a") (data (i32.const 67578) "a") (data (i32.const 67581) "a") (data (i32.const 67584) "a") (data (i32.const 67587) "a") (data (i32.const 67590) "a") (data (i32.const 67593) "a") (data (i32.const 67596) "a") (data (i32.const 67599) "a") (data (i32.const 67602) "a") (data (i32.const 67605) "a") (data (i32.const 67608) "a") (data (i32.const 67611) "a") (data (i32.const 67614) "a") (data (i32.const 67617) "a") (data (i32.const 67620) "a") (data (i32.const 67623) "a") (data (i32.const 67626) "a") (data (i32.const 67629) "a") (data (i32.const 67632) "a") (data (i32.const 67635) "a") (data (i32.const 67638) "a") (data (i32.const 67641) "a") (data (i32.const 67644) "a") (data (i32.const 67647) "a") (data (i32.const 67650) "a") (data (i32.const 67653) "a") (data (i32.const 67656) "a") (data (i32.const 67659) "a") (data (i32.const 67662) "a") (data (i32.const 67665) "a") (data (i32.const 67668) "a") (data (i32.const 67671) "a") (data (i32.const 67674) "a") (data (i32.const 67677) "a") (data (i32.const 67680) "a") (data (i32.const 67683) "a") (data (i32.const 67686) "a") (data (i32.const 67689) "a") (data (i32.const 67692) "a") (data (i32.const 67695) "a") (data (i32.const 67698) "a") (data (i32.const 67701) "a") (data (i32.const 67704) "a") (data (i32.const 67707) "a") (data (i32.const 67710) "a") (data (i32.const 67713) "a") (data (i32.const 67716) "a") (data (i32.const 67719) "a") (data (i32.const 67722) "a") (data (i32.const 67725) "a") (data (i32.const 67728) "a") (data (i32.const 67731) "a") (data (i32.const 67734) "a") (data (i32.const 67737) "a") (data (i32.const 67740) "a") (data (i32.const 67743) "a") (data (i32.const 67746) "a") (data (i32.const 67749) "a") (data (i32.const 67752) "a") (data (i32.const 67755) "a") (data (i32.const 67758) "a") (data (i32.const 67761) "a") (data (i32.const 67764) "a") (data (i32.const 67767) "a") (data (i32.const 67770) "a") (data (i32.const 67773) "a") (data (i32.const 67776) "a") (data (i32.const 67779) "a") (data (i32.const 67782) "a") (data (i32.const 67785) "a") (data (i32.const 67788) "a") (data (i32.const 67791) "a") (data (i32.const 67794) "a") (data (i32.const 67797) "a") (data (i32.const 67800) "a") (data (i32.const 67803) "a") (data (i32.const 67806) "a") (data (i32.const 67809) "a") (data (i32.const 67812) "a") (data (i32.const 67815) "a") (data (i32.const 67818) "a") (data (i32.const 67821) "a") (data (i32.const 67824) "a") (data (i32.const 67827) "a") (data (i32.const 67830) "a") (data (i32.const 67833) "a") (data (i32.const 67836) "a") (data (i32.const 67839) "a") (data (i32.const 67842) "a") (data (i32.const 67845) "a") (data (i32.const 67848) "a") (data (i32.const 67851) "a") (data (i32.const 67854) "a") (data (i32.const 67857) "a") (data (i32.const 67860) "a") (data (i32.const 67863) "a") (data (i32.const 67866) "a") (data (i32.const 67869) "a") (data (i32.const 67872) "a") (data (i32.const 67875) "a") (data (i32.const 67878) "a") (data (i32.const 67881) "a") (data (i32.const 67884) "a") (data (i32.const 67887) "a") (data (i32.const 67890) "a") (data (i32.const 67893) "a") (data (i32.const 67896) "a") (data (i32.const 67899) "a") (data (i32.const 67902) "a") (data (i32.const 67905) "a") (data (i32.const 67908) "a") (data (i32.const 67911) "a") (data (i32.const 67914) "a") (data (i32.const 67917) "a") (data (i32.const 67920) "a") (data (i32.const 67923) "a") (data (i32.const 67926) "a") (data (i32.const 67929) "a") (data (i32.const 67932) "a") (data (i32.const 67935) "a") (data (i32.const 67938) "a") (data (i32.const 67941) "a") (data (i32.const 67944) "a") (data (i32.const 67947) "a") (data (i32.const 67950) "a") (data (i32.const 67953) "a") (data (i32.const 67956) "a") (data (i32.const 67959) "a") (data (i32.const 67962) "a") (data (i32.const 67965) "a") (data (i32.const 67968) "a") (data (i32.const 67971) "a") (data (i32.const 67974) "a") (data (i32.const 67977) "a") (data (i32.const 67980) "a") (data (i32.const 67983) "a") (data (i32.const 67986) "a") (data (i32.const 67989) "a") (data (i32.const 67992) "a") (data (i32.const 67995) "a") (data (i32.const 67998) "a") (data (i32.const 68001) "a") (data (i32.const 68004) "a") (data (i32.const 68007) "a") (data (i32.const 68010) "a") (data (i32.const 68013) "a") (data (i32.const 68016) "a") (data (i32.const 68019) "a") (data (i32.const 68022) "a") (data (i32.const 68025) "a") (data (i32.const 68028) "a") (data (i32.const 68031) "a") (data (i32.const 68034) "a") (data (i32.const 68037) "a") (data (i32.const 68040) "a") (data (i32.const 68043) "a") (data (i32.const 68046) "a") (data (i32.const 68049) "a") (data (i32.const 68052) "a") (data (i32.const 68055) "a") (data (i32.const 68058) "a") (data (i32.const 68061) "a") (data (i32.const 68064) "a") (data (i32.const 68067) "a") (data (i32.const 68070) "a") (data (i32.const 68073) "a") (data (i32.const 68076) "a") (data (i32.const 68079) "a") (data (i32.const 68082) "a") (data (i32.const 68085) "a") (data (i32.const 68088) "a") (data (i32.const 68091) "a") (data (i32.const 68094) "a") (data (i32.const 68097) "a") (data (i32.const 68100) "a") (data (i32.const 68103) "a") (data (i32.const 68106) "a") (data (i32.const 68109) "a") (data (i32.const 68112) "a") (data (i32.const 68115) "a") (data (i32.const 68118) "a") (data (i32.const 68121) "a") (data (i32.const 68124) "a") (data (i32.const 68127) "a") (data (i32.const 68130) "a") (data (i32.const 68133) "a") (data (i32.const 68136) "a") (data (i32.const 68139) "a") (data (i32.const 68142) "a") (data (i32.const 68145) "a") (data (i32.const 68148) "a") (data (i32.const 68151) "a") (data (i32.const 68154) "a") (data (i32.const 68157) "a") (data (i32.const 68160) "a") (data (i32.const 68163) "a") (data (i32.const 68166) "a") (data (i32.const 68169) "a") (data (i32.const 68172) "a") (data (i32.const 68175) "a") (data (i32.const 68178) "a") (data (i32.const 68181) "a") (data (i32.const 68184) "a") (data (i32.const 68187) "a") (data (i32.const 68190) "a") (data (i32.const 68193) "a") (data (i32.const 68196) "a") (data (i32.const 68199) "a") (data (i32.const 68202) "a") (data (i32.const 68205) "a") (data (i32.const 68208) "a") (data (i32.const 68211) "a") (data (i32.const 68214) "a") (data (i32.const 68217) "a") (data (i32.const 68220) "a") (data (i32.const 68223) "a") (data (i32.const 68226) "a") (data (i32.const 68229) "a") (data (i32.const 68232) "a") (data (i32.const 68235) "a") (data (i32.const 68238) "a") (data (i32.const 68241) "a") (data (i32.const 68244) "a") (data (i32.const 68247) "a") (data (i32.const 68250) "a") (data (i32.const 68253) "a") (data (i32.const 68256) "a") (data (i32.const 68259) "a") (data (i32.const 68262) "a") (data (i32.const 68265) "a") (data (i32.const 68268) "a") (data (i32.const 68271) "a") (data (i32.const 68274) "a") (data (i32.const 68277) "a") (data (i32.const 68280) "a") (data (i32.const 68283) "a") (data (i32.const 68286) "a") (data (i32.const 68289) "a") (data (i32.const 68292) "a") (data (i32.const 68295) "a") (data (i32.const 68298) "a") (data (i32.const 68301) "a") (data (i32.const 68304) "a") (data (i32.const 68307) "a") (data (i32.const 68310) "a") (data (i32.const 68313) "a") (data (i32.const 68316) "a") (data (i32.const 68319) "a") (data (i32.const 68322) "a") (data (i32.const 68325) "a") (data (i32.const 68328) "a") (data (i32.const 68331) "a") (data (i32.const 68334) "a") (data (i32.const 68337) "a") (data (i32.const 68340) "a") (data (i32.const 68343) "a") (data (i32.const 68346) "a") (data (i32.const 68349) "a") (data (i32.const 68352) "a") (data (i32.const 68355) "a") (data (i32.const 68358) "a") (data (i32.const 68361) "a") (data (i32.const 68364) "a") (data (i32.const 68367) "a") (data (i32.const 68370) "a") (data (i32.const 68373) "a") (data (i32.const 68376) "a") (data (i32.const 68379) "a") (data (i32.const 68382) "a") (data (i32.const 68385) "a") (data (i32.const 68388) "a") (data (i32.const 68391) "a") (data (i32.const 68394) "a") (data (i32.const 68397) "a") (data (i32.const 68400) "a") (data (i32.const 68403) "a") (data (i32.const 68406) "a") (data (i32.const 68409) "a") (data (i32.const 68412) "a") (data (i32.const 68415) "a") (data (i32.const 68418) "a") (data (i32.const 68421) "a") (data (i32.const 68424) "a") (data (i32.const 68427) "a") (data (i32.const 68430) "a") (data (i32.const 68433) "a") (data (i32.const 68436) "a") (data (i32.const 68439) "a") (data (i32.const 68442) "a") (data (i32.const 68445) "a") (data (i32.const 68448) "a") (data (i32.const 68451) "a") (data (i32.const 68454) "a") (data (i32.const 68457) "a") (data (i32.const 68460) "a") (data (i32.const 68463) "a") (data (i32.const 68466) "a") (data (i32.const 68469) "a") (data (i32.const 68472) "a") (data (i32.const 68475) "a") (data (i32.const 68478) "a") (data (i32.const 68481) "a") (data (i32.const 68484) "a") (data (i32.const 68487) "a") (data (i32.const 68490) "a") (data (i32.const 68493) "a") (data (i32.const 68496) "a") (data (i32.const 68499) "a") (data (i32.const 68502) "a") (data (i32.const 68505) "a") (data (i32.const 68508) "a") (data (i32.const 68511) "a") (data (i32.const 68514) "a") (data (i32.const 68517) "a") (data (i32.const 68520) "a") (data (i32.const 68523) "a") (data (i32.const 68526) "a") (data (i32.const 68529) "a") (data (i32.const 68532) "a") (data (i32.const 68535) "a") (data (i32.const 68538) "a") (data (i32.const 68541) "a") (data (i32.const 68544) "a") (data (i32.const 68547) "a") (data (i32.const 68550) "a") (data (i32.const 68553) "a") (data (i32.const 68556) "a") (data (i32.const 68559) "a") (data (i32.const 68562) "a") (data (i32.const 68565) "a") (data (i32.const 68568) "a") (data (i32.const 68571) "a") (data (i32.const 68574) "a") (data (i32.const 68577) "a") (data (i32.const 68580) "a") (data (i32.const 68583) "a") (data (i32.const 68586) "a") (data (i32.const 68589) "a") (data (i32.const 68592) "a") (data (i32.const 68595) "a") (data (i32.const 68598) "a") (data (i32.const 68601) "a") (data (i32.const 68604) "a") (data (i32.const 68607) "a") (data (i32.const 68610) "a") (data (i32.const 68613) "a") (data (i32.const 68616) "a") (data (i32.const 68619) "a") (data (i32.const 68622) "a") (data (i32.const 68625) "a") (data (i32.const 68628) "a") (data (i32.const 68631) "a") (data (i32.const 68634) "a") (data (i32.const 68637) "a") (data (i32.const 68640) "a") (data (i32.const 68643) "a") (data (i32.const 68646) "a") (data (i32.const 68649) "a") (data (i32.const 68652) "a") (data (i32.const 68655) "a") (data (i32.const 68658) "a") (data (i32.const 68661) "a") (data (i32.const 68664) "a") (data (i32.const 68667) "a") (data (i32.const 68670) "a") (data (i32.const 68673) "a") (data (i32.const 68676) "a") (data (i32.const 68679) "a") (data (i32.const 68682) "a") (data (i32.const 68685) "a") (data (i32.const 68688) "a") (data (i32.const 68691) "a") (data (i32.const 68694) "a") (data (i32.const 68697) "a") (data (i32.const 68700) "a") (data (i32.const 68703) "a") (data (i32.const 68706) "a") (data (i32.const 68709) "a") (data (i32.const 68712) "a") (data (i32.const 68715) "a") (data (i32.const 68718) "a") (data (i32.const 68721) "a") (data (i32.const 68724) "a") (data (i32.const 68727) "a") (data (i32.const 68730) "a") (data (i32.const 68733) "a") (data (i32.const 68736) "a") (data (i32.const 68739) "a") (data (i32.const 68742) "a") (data (i32.const 68745) "a") (data (i32.const 68748) "a") (data (i32.const 68751) "a") (data (i32.const 68754) "a") (data (i32.const 68757) "a") (data (i32.const 68760) "a") (data (i32.const 68763) "a") (data (i32.const 68766) "a") (data (i32.const 68769) "a") (data (i32.const 68772) "a") (data (i32.const 68775) "a") (data (i32.const 68778) "a") (data (i32.const 68781) "a") (data (i32.const 68784) "a") (data (i32.const 68787) "a") (data (i32.const 68790) "a") (data (i32.const 68793) "a") (data (i32.const 68796) "a") (data (i32.const 68799) "a") (data (i32.const 68802) "a") (data (i32.const 68805) "a") (data (i32.const 68808) "a") (data (i32.const 68811) "a") (data (i32.const 68814) "a") (data (i32.const 68817) "a") (data (i32.const 68820) "a") (data (i32.const 68823) "a") (data (i32.const 68826) "a") (data (i32.const 68829) "a") (data (i32.const 68832) "a") (data (i32.const 68835) "a") (data (i32.const 68838) "a") (data (i32.const 68841) "a") (data (i32.const 68844) "a") (data (i32.const 68847) "a") (data (i32.const 68850) "a") (data (i32.const 68853) "a") (data (i32.const 68856) "a") (data (i32.const 68859) "a") (data (i32.const 68862) "a") (data (i32.const 68865) "a") (data (i32.const 68868) "a") (data (i32.const 68871) "a") (data (i32.const 68874) "a") (data (i32.const 68877) "a") (data (i32.const 68880) "a") (data (i32.const 68883) "a") (data (i32.const 68886) "a") (data (i32.const 68889) "a") (data (i32.const 68892) "a") (data (i32.const 68895) "a") (data (i32.const 68898) "a") (data (i32.const 68901) "a") (data (i32.const 68904) "a") (data (i32.const 68907) "a") (data (i32.const 68910) "a") (data (i32.const 68913) "a") (data (i32.const 68916) "a") (data (i32.const 68919) "a") (data (i32.const 68922) "a") (data (i32.const 68925) "a") (data (i32.const 68928) "a") (data (i32.const 68931) "a") (data (i32.const 68934) "a") (data (i32.const 68937) "a") (data (i32.const 68940) "a") (data (i32.const 68943) "a") (data (i32.const 68946) "a") (data (i32.const 68949) "a") (data (i32.const 68952) "a") (data (i32.const 68955) "a") (data (i32.const 68958) "a") (data (i32.const 68961) "a") (data (i32.const 68964) "a") (data (i32.const 68967) "a") (data (i32.const 68970) "a") (data (i32.const 68973) "a") (data (i32.const 68976) "a") (data (i32.const 68979) "a") (data (i32.const 68982) "a") (data (i32.const 68985) "a") (data (i32.const 68988) "a") (data (i32.const 68991) "a") (data (i32.const 68994) "a") (data (i32.const 68997) "a") (data (i32.const 69000) "a") (data (i32.const 69003) "a") (data (i32.const 69006) "a") (data (i32.const 69009) "a") (data (i32.const 69012) "a") (data (i32.const 69015) "a") (data (i32.const 69018) "a") (data (i32.const 69021) "a") (data (i32.const 69024) "a") (data (i32.const 69027) "a") (data (i32.const 69030) "a") (data (i32.const 69033) "a") (data (i32.const 69036) "a") (data (i32.const 69039) "a") (data (i32.const 69042) "a") (data (i32.const 69045) "a") (data (i32.const 69048) "a") (data (i32.const 69051) "a") (data (i32.const 69054) "a") (data (i32.const 69057) "a") (data (i32.const 69060) "a") (data (i32.const 69063) "a") (data (i32.const 69066) "a") (data (i32.const 69069) "a") (data (i32.const 69072) "a") (data (i32.const 69075) "a") (data (i32.const 69078) "a") (data (i32.const 69081) "a") (data (i32.const 69084) "a") (data (i32.const 69087) "a") (data (i32.const 69090) "a") (data (i32.const 69093) "a") (data (i32.const 69096) "a") (data (i32.const 69099) "a") (data (i32.const 69102) "a") (data (i32.const 69105) "a") (data (i32.const 69108) "a") (data (i32.const 69111) "a") (data (i32.const 69114) "a") (data (i32.const 69117) "a") (data (i32.const 69120) "a") (data (i32.const 69123) "a") (data (i32.const 69126) "a") (data (i32.const 69129) "a") (data (i32.const 69132) "a") (data (i32.const 69135) "a") (data (i32.const 69138) "a") (data (i32.const 69141) "a") (data (i32.const 69144) "a") (data (i32.const 69147) "a") (data (i32.const 69150) "a") (data (i32.const 69153) "a") (data (i32.const 69156) "a") (data (i32.const 69159) "a") (data (i32.const 69162) "a") (data (i32.const 69165) "a") (data (i32.const 69168) "a") (data (i32.const 69171) "a") (data (i32.const 69174) "a") (data (i32.const 69177) "a") (data (i32.const 69180) "a") (data (i32.const 69183) "a") (data (i32.const 69186) "a") (data (i32.const 69189) "a") (data (i32.const 69192) "a") (data (i32.const 69195) "a") (data (i32.const 69198) "a") (data (i32.const 69201) "a") (data (i32.const 69204) "a") (data (i32.const 69207) "a") (data (i32.const 69210) "a") (data (i32.const 69213) "a") (data (i32.const 69216) "a") (data (i32.const 69219) "a") (data (i32.const 69222) "a") (data (i32.const 69225) "a") (data (i32.const 69228) "a") (data (i32.const 69231) "a") (data (i32.const 69234) "a") (data (i32.const 69237) "a") (data (i32.const 69240) "a") (data (i32.const 69243) "a") (data (i32.const 69246) "a") (data (i32.const 69249) "a") (data (i32.const 69252) "a") (data (i32.const 69255) "a") (data (i32.const 69258) "a") (data (i32.const 69261) "a") (data (i32.const 69264) "a") (data (i32.const 69267) "a") (data (i32.const 69270) "a") (data (i32.const 69273) "a") (data (i32.const 69276) "a") (data (i32.const 69279) "a") (data (i32.const 69282) "a") (data (i32.const 69285) "a") (data (i32.const 69288) "a") (data (i32.const 69291) "a") (data (i32.const 69294) "a") (data (i32.const 69297) "a") (data (i32.const 69300) "a") (data (i32.const 69303) "a") (data (i32.const 69306) "a") (data (i32.const 69309) "a") (data (i32.const 69312) "a") (data (i32.const 69315) "a") (data (i32.const 69318) "a") (data (i32.const 69321) "a") (data (i32.const 69324) "a") (data (i32.const 69327) "a") (data (i32.const 69330) "a") (data (i32.const 69333) "a") (data (i32.const 69336) "a") (data (i32.const 69339) "a") (data (i32.const 69342) "a") (data (i32.const 69345) "a") (data (i32.const 69348) "a") (data (i32.const 69351) "a") (data (i32.const 69354) "a") (data (i32.const 69357) "a") (data (i32.const 69360) "a") (data (i32.const 69363) "a") (data (i32.const 69366) "a") (data (i32.const 69369) "a") (data (i32.const 69372) "a") (data (i32.const 69375) "a") (data (i32.const 69378) "a") (data (i32.const 69381) "a") (data (i32.const 69384) "a") (data (i32.const 69387) "a") (data (i32.const 69390) "a") (data (i32.const 69393) "a") (data (i32.const 69396) "a") (data (i32.const 69399) "a") (data (i32.const 69402) "a") (data (i32.const 69405) "a") (data (i32.const 69408) "a") (data (i32.const 69411) "a") (data (i32.const 69414) "a") (data (i32.const 69417) "a") (data (i32.const 69420) "a") (data (i32.const 69423) "a") (data (i32.const 69426) "a") (data (i32.const 69429) "a") (data (i32.const 69432) "a") (data (i32.const 69435) "a") (data (i32.const 69438) "a") (data (i32.const 69441) "a") (data (i32.const 69444) "a") (data (i32.const 69447) "a") (data (i32.const 69450) "a") (data (i32.const 69453) "a") (data (i32.const 69456) "a") (data (i32.const 69459) "a") (data (i32.const 69462) "a") (data (i32.const 69465) "a") (data (i32.const 69468) "a") (data (i32.const 69471) "a") (data (i32.const 69474) "a") (data (i32.const 69477) "a") (data (i32.const 69480) "a") (data (i32.const 69483) "a") (data (i32.const 69486) "a") (data (i32.const 69489) "a") (data (i32.const 69492) "a") (data (i32.const 69495) "a") (data (i32.const 69498) "a") (data (i32.const 69501) "a") (data (i32.const 69504) "a") (data (i32.const 69507) "a") (data (i32.const 69510) "a") (data (i32.const 69513) "a") (data (i32.const 69516) "a") (data (i32.const 69519) "a") (data (i32.const 69522) "a") (data (i32.const 69525) "a") (data (i32.const 69528) "a") (data (i32.const 69531) "a") (data (i32.const 69534) "a") (data (i32.const 69537) "a") (data (i32.const 69540) "a") (data (i32.const 69543) "a") (data (i32.const 69546) "a") (data (i32.const 69549) "a") (data (i32.const 69552) "a") (data (i32.const 69555) "a") (data (i32.const 69558) "a") (data (i32.const 69561) "a") (data (i32.const 69564) "a") (data (i32.const 69567) "a") (data (i32.const 69570) "a") (data (i32.const 69573) "a") (data (i32.const 69576) "a") (data (i32.const 69579) "a") (data (i32.const 69582) "a") (data (i32.const 69585) "a") (data (i32.const 69588) "a") (data (i32.const 69591) "a") (data (i32.const 69594) "a") (data (i32.const 69597) "a") (data (i32.const 69600) "a") (data (i32.const 69603) "a") (data (i32.const 69606) "a") (data (i32.const 69609) "a") (data (i32.const 69612) "a") (data (i32.const 69615) "a") (data (i32.const 69618) "a") (data (i32.const 69621) "a") (data (i32.const 69624) "a") (data (i32.const 69627) "a") (data (i32.const 69630) "a") (data (i32.const 69633) "a") (data (i32.const 69636) "a") (data (i32.const 69639) "a") (data (i32.const 69642) "a") (data (i32.const 69645) "a") (data (i32.const 69648) "a") (data (i32.const 69651) "a") (data (i32.const 69654) "a") (data (i32.const 69657) "a") (data (i32.const 69660) "a") (data (i32.const 69663) "a") (data (i32.const 69666) "a") (data (i32.const 69669) "a") (data (i32.const 69672) "a") (data (i32.const 69675) "a") (data (i32.const 69678) "a") (data (i32.const 69681) "a") (data (i32.const 69684) "a") (data (i32.const 69687) "a") (data (i32.const 69690) "a") (data (i32.const 69693) "a") (data (i32.const 69696) "a") (data (i32.const 69699) "a") (data (i32.const 69702) "a") (data (i32.const 69705) "a") (data (i32.const 69708) "a") (data (i32.const 69711) "a") (data (i32.const 69714) "a") (data (i32.const 69717) "a") (data (i32.const 69720) "a") (data (i32.const 69723) "a") (data (i32.const 69726) "a") (data (i32.const 69729) "a") (data (i32.const 69732) "a") (data (i32.const 69735) "a") (data (i32.const 69738) "a") (data (i32.const 69741) "a") (data (i32.const 69744) "a") (data (i32.const 69747) "a") (data (i32.const 69750) "a") (data (i32.const 69753) "a") (data (i32.const 69756) "a") (data (i32.const 69759) "a") (data (i32.const 69762) "a") (data (i32.const 69765) "a") (data (i32.const 69768) "a") (data (i32.const 69771) "a") (data (i32.const 69774) "a") (data (i32.const 69777) "a") (data (i32.const 69780) "a") (data (i32.const 69783) "a") (data (i32.const 69786) "a") (data (i32.const 69789) "a") (data (i32.const 69792) "a") (data (i32.const 69795) "a") (data (i32.const 69798) "a") (data (i32.const 69801) "a") (data (i32.const 69804) "a") (data (i32.const 69807) "a") (data (i32.const 69810) "a") (data (i32.const 69813) "a") (data (i32.const 69816) "a") (data (i32.const 69819) "a") (data (i32.const 69822) "a") (data (i32.const 69825) "a") (data (i32.const 69828) "a") (data (i32.const 69831) "a") (data (i32.const 69834) "a") (data (i32.const 69837) "a") (data (i32.const 69840) "a") (data (i32.const 69843) "a") (data (i32.const 69846) "a") (data (i32.const 69849) "a") (data (i32.const 69852) "a") (data (i32.const 69855) "a") (data (i32.const 69858) "a") (data (i32.const 69861) "a") (data (i32.const 69864) "a") (data (i32.const 69867) "a") (data (i32.const 69870) "a") (data (i32.const 69873) "a") (data (i32.const 69876) "a") (data (i32.const 69879) "a") (data (i32.const 69882) "a") (data (i32.const 69885) "a") (data (i32.const 69888) "a") (data (i32.const 69891) "a") (data (i32.const 69894) "a") (data (i32.const 69897) "a") (data (i32.const 69900) "a") (data (i32.const 69903) "a") (data (i32.const 69906) "a") (data (i32.const 69909) "a") (data (i32.const 69912) "a") (data (i32.const 69915) "a") (data (i32.const 69918) "a") (data (i32.const 69921) "a") (data (i32.const 69924) "a") (data (i32.const 69927) "a") (data (i32.const 69930) "a") (data (i32.const 69933) "a") (data (i32.const 69936) "a") (data (i32.const 69939) "a") (data (i32.const 69942) "a") (data (i32.const 69945) "a") (data (i32.const 69948) "a") (data (i32.const 69951) "a") (data (i32.const 69954) "a") (data (i32.const 69957) "a") (data (i32.const 69960) "a") (data (i32.const 69963) "a") (data (i32.const 69966) "a") (data (i32.const 69969) "a") (data (i32.const 69972) "a") (data (i32.const 69975) "a") (data (i32.const 69978) "a") (data (i32.const 69981) "a") (data (i32.const 69984) "a") (data (i32.const 69987) "a") (data (i32.const 69990) "a") (data (i32.const 69993) "a") (data (i32.const 69996) "a") (data (i32.const 69999) "a") (data (i32.const 70002) "a") (data (i32.const 70005) "a") (data (i32.const 70008) "a") (data (i32.const 70011) "a") (data (i32.const 70014) "a") (data (i32.const 70017) "a") (data (i32.const 70020) "a") (data (i32.const 70023) "a") (data (i32.const 70026) "a") (data (i32.const 70029) "a") (data (i32.const 70032) "a") (data (i32.const 70035) "a") (data (i32.const 70038) "a") (data (i32.const 70041) "a") (data (i32.const 70044) "a") (data (i32.const 70047) "a") (data (i32.const 70050) "a") (data (i32.const 70053) "a") (data (i32.const 70056) "a") (data (i32.const 70059) "a") (data (i32.const 70062) "a") (data (i32.const 70065) "a") (data (i32.const 70068) "a") (data (i32.const 70071) "a") (data (i32.const 70074) "a") (data (i32.const 70077) "a") (data (i32.const 70080) "a") (data (i32.const 70083) "a") (data (i32.const 70086) "a") (data (i32.const 70089) "a") (data (i32.const 70092) "a") (data (i32.const 70095) "a") (data (i32.const 70098) "a") (data (i32.const 70101) "a") (data (i32.const 70104) "a") (data (i32.const 70107) "a") (data (i32.const 70110) "a") (data (i32.const 70113) "a") (data (i32.const 70116) "a") (data (i32.const 70119) "a") (data (i32.const 70122) "a") (data (i32.const 70125) "a") (data (i32.const 70128) "a") (data (i32.const 70131) "a") (data (i32.const 70134) "a") (data (i32.const 70137) "a") (data (i32.const 70140) "a") (data (i32.const 70143) "a") (data (i32.const 70146) "a") (data (i32.const 70149) "a") (data (i32.const 70152) "a") (data (i32.const 70155) "a") (data (i32.const 70158) "a") (data (i32.const 70161) "a") (data (i32.const 70164) "a") (data (i32.const 70167) "a") (data (i32.const 70170) "a") (data (i32.const 70173) "a") (data (i32.const 70176) "a") (data (i32.const 70179) "a") (data (i32.const 70182) "a") (data (i32.const 70185) "a") (data (i32.const 70188) "a") (data (i32.const 70191) "a") (data (i32.const 70194) "a") (data (i32.const 70197) "a") (data (i32.const 70200) "a") (data (i32.const 70203) "a") (data (i32.const 70206) "a") (data (i32.const 70209) "a") (data (i32.const 70212) "a") (data (i32.const 70215) "a") (data (i32.const 70218) "a") (data (i32.const 70221) "a") (data (i32.const 70224) "a") (data (i32.const 70227) "a") (data (i32.const 70230) "a") (data (i32.const 70233) "a") (data (i32.const 70236) "a") (data (i32.const 70239) "a") (data (i32.const 70242) "a") (data (i32.const 70245) "a") (data (i32.const 70248) "a") (data (i32.const 70251) "a") (data (i32.const 70254) "a") (data (i32.const 70257) "a") (data (i32.const 70260) "a") (data (i32.const 70263) "a") (data (i32.const 70266) "a") (data (i32.const 70269) "a") (data (i32.const 70272) "a") (data (i32.const 70275) "a") (data (i32.const 70278) "a") (data (i32.const 70281) "a") (data (i32.const 70284) "a") (data (i32.const 70287) "a") (data (i32.const 70290) "a") (data (i32.const 70293) "a") (data (i32.const 70296) "a") (data (i32.const 70299) "a") (data (i32.const 70302) "a") (data (i32.const 70305) "a") (data (i32.const 70308) "a") (data (i32.const 70311) "a") (data (i32.const 70314) "a") (data (i32.const 70317) "a") (data (i32.const 70320) "a") (data (i32.const 70323) "a") (data (i32.const 70326) "a") (data (i32.const 70329) "a") (data (i32.const 70332) "a") (data (i32.const 70335) "a") (data (i32.const 70338) "a") (data (i32.const 70341) "a") (data (i32.const 70344) "a") (data (i32.const 70347) "a") (data (i32.const 70350) "a") (data (i32.const 70353) "a") (data (i32.const 70356) "a") (data (i32.const 70359) "a") (data (i32.const 70362) "a") (data (i32.const 70365) "a") (data (i32.const 70368) "a") (data (i32.const 70371) "a") (data (i32.const 70374) "a") (data (i32.const 70377) "a") (data (i32.const 70380) "a") (data (i32.const 70383) "a") (data (i32.const 70386) "a") (data (i32.const 70389) "a") (data (i32.const 70392) "a") (data (i32.const 70395) "a") (data (i32.const 70398) "a") (data (i32.const 70401) "a") (data (i32.const 70404) "a") (data (i32.const 70407) "a") (data (i32.const 70410) "a") (data (i32.const 70413) "a") (data (i32.const 70416) "a") (data (i32.const 70419) "a") (data (i32.const 70422) "a") (data (i32.const 70425) "a") (data (i32.const 70428) "a") (data (i32.const 70431) "a") (data (i32.const 70434) "a") (data (i32.const 70437) "a") (data (i32.const 70440) "a") (data (i32.const 70443) "a") (data (i32.const 70446) "a") (data (i32.const 70449) "a") (data (i32.const 70452) "a") (data (i32.const 70455) "a") (data (i32.const 70458) "a") (data (i32.const 70461) "a") (data (i32.const 70464) "a") (data (i32.const 70467) "a") (data (i32.const 70470) "a") (data (i32.const 70473) "a") (data (i32.const 70476) "a") (data (i32.const 70479) "a") (data (i32.const 70482) "a") (data (i32.const 70485) "a") (data (i32.const 70488) "a") (data (i32.const 70491) "a") (data (i32.const 70494) "a") (data (i32.const 70497) "a") (data (i32.const 70500) "a") (data (i32.const 70503) "a") (data (i32.const 70506) "a") (data (i32.const 70509) "a") (data (i32.const 70512) "a") (data (i32.const 70515) "a") (data (i32.const 70518) "a") (data (i32.const 70521) "a") (data (i32.const 70524) "a") (data (i32.const 70527) "a") (data (i32.const 70530) "a") (data (i32.const 70533) "a") (data (i32.const 70536) "a") (data (i32.const 70539) "a") (data (i32.const 70542) "a") (data (i32.const 70545) "a") (data (i32.const 70548) "a") (data (i32.const 70551) "a") (data (i32.const 70554) "a") (data (i32.const 70557) "a") (data (i32.const 70560) "a") (data (i32.const 70563) "a") (data (i32.const 70566) "a") (data (i32.const 70569) "a") (data (i32.const 70572) "a") (data (i32.const 70575) "a") (data (i32.const 70578) "a") (data (i32.const 70581) "a") (data (i32.const 70584) "a") (data (i32.const 70587) "a") (data (i32.const 70590) "a") (data (i32.const 70593) "a") (data (i32.const 70596) "a") (data (i32.const 70599) "a") (data (i32.const 70602) "a") (data (i32.const 70605) "a") (data (i32.const 70608) "a") (data (i32.const 70611) "a") (data (i32.const 70614) "a") (data (i32.const 70617) "a") (data (i32.const 70620) "a") (data (i32.const 70623) "a") (data (i32.const 70626) "a") (data (i32.const 70629) "a") (data (i32.const 70632) "a") (data (i32.const 70635) "a") (data (i32.const 70638) "a") (data (i32.const 70641) "a") (data (i32.const 70644) "a") (data (i32.const 70647) "a") (data (i32.const 70650) "a") (data (i32.const 70653) "a") (data (i32.const 70656) "a") (data (i32.const 70659) "a") (data (i32.const 70662) "a") (data (i32.const 70665) "a") (data (i32.const 70668) "a") (data (i32.const 70671) "a") (data (i32.const 70674) "a") (data (i32.const 70677) "a") (data (i32.const 70680) "a") (data (i32.const 70683) "a") (data (i32.const 70686) "a") (data (i32.const 70689) "a") (data (i32.const 70692) "a") (data (i32.const 70695) "a") (data (i32.const 70698) "a") (data (i32.const 70701) "a") (data (i32.const 70704) "a") (data (i32.const 70707) "a") (data (i32.const 70710) "a") (data (i32.const 70713) "a") (data (i32.const 70716) "a") (data (i32.const 70719) "a") (data (i32.const 70722) "a") (data (i32.const 70725) "a") (data (i32.const 70728) "a") (data (i32.const 70731) "a") (data (i32.const 70734) "a") (data (i32.const 70737) "a") (data (i32.const 70740) "a") (data (i32.const 70743) "a") (data (i32.const 70746) "a") (data (i32.const 70749) "a") (data (i32.const 70752) "a") (data (i32.const 70755) "a") (data (i32.const 70758) "a") (data (i32.const 70761) "a") (data (i32.const 70764) "a") (data (i32.const 70767) "a") (data (i32.const 70770) "a") (data (i32.const 70773) "a") (data (i32.const 70776) "a") (data (i32.const 70779) "a") (data (i32.const 70782) "a") (data (i32.const 70785) "a") (data (i32.const 70788) "a") (data (i32.const 70791) "a") (data (i32.const 70794) "a") (data (i32.const 70797) "a") (data (i32.const 70800) "a") (data (i32.const 70803) "a") (data (i32.const 70806) "a") (data (i32.const 70809) "a") (data (i32.const 70812) "a") (data (i32.const 70815) "a") (data (i32.const 70818) "a") (data (i32.const 70821) "a") (data (i32.const 70824) "a") (data (i32.const 70827) "a") (data (i32.const 70830) "a") (data (i32.const 70833) "a") (data (i32.const 70836) "a") (data (i32.const 70839) "a") (data (i32.const 70842) "a") (data (i32.const 70845) "a") (data (i32.const 70848) "a") (data (i32.const 70851) "a") (data (i32.const 70854) "a") (data (i32.const 70857) "a") (data (i32.const 70860) "a") (data (i32.const 70863) "a") (data (i32.const 70866) "a") (data (i32.const 70869) "a") (data (i32.const 70872) "a") (data (i32.const 70875) "a") (data (i32.const 70878) "a") (data (i32.const 70881) "a") (data (i32.const 70884) "a") (data (i32.const 70887) "a") (data (i32.const 70890) "a") (data (i32.const 70893) "a") (data (i32.const 70896) "a") (data (i32.const 70899) "a") (data (i32.const 70902) "a") (data (i32.const 70905) "a") (data (i32.const 70908) "a") (data (i32.const 70911) "a") (data (i32.const 70914) "a") (data (i32.const 70917) "a") (data (i32.const 70920) "a") (data (i32.const 70923) "a") (data (i32.const 70926) "a") (data (i32.const 70929) "a") (data (i32.const 70932) "a") (data (i32.const 70935) "a") (data (i32.const 70938) "a") (data (i32.const 70941) "a") (data (i32.const 70944) "a") (data (i32.const 70947) "a") (data (i32.const 70950) "a") (data (i32.const 70953) "a") (data (i32.const 70956) "a") (data (i32.const 70959) "a") (data (i32.const 70962) "a") (data (i32.const 70965) "a") (data (i32.const 70968) "a") (data (i32.const 70971) "a") (data (i32.const 70974) "a") (data (i32.const 70977) "a") (data (i32.const 70980) "a") (data (i32.const 70983) "a") (data (i32.const 70986) "a") (data (i32.const 70989) "a") (data (i32.const 70992) "a") (data (i32.const 70995) "a") (data (i32.const 70998) "a") (data (i32.const 71001) "a") (data (i32.const 71004) "a") (data (i32.const 71007) "a") (data (i32.const 71010) "a") (data (i32.const 71013) "a") (data (i32.const 71016) "a") (data (i32.const 71019) "a") (data (i32.const 71022) "a") (data (i32.const 71025) "a") (data (i32.const 71028) "a") (data (i32.const 71031) "a") (data (i32.const 71034) "a") (data (i32.const 71037) "a") (data (i32.const 71040) "a") (data (i32.const 71043) "a") (data (i32.const 71046) "a") (data (i32.const 71049) "a") (data (i32.const 71052) "a") (data (i32.const 71055) "a") (data (i32.const 71058) "a") (data (i32.const 71061) "a") (data (i32.const 71064) "a") (data (i32.const 71067) "a") (data (i32.const 71070) "a") (data (i32.const 71073) "a") (data (i32.const 71076) "a") (data (i32.const 71079) "a") (data (i32.const 71082) "a") (data (i32.const 71085) "a") (data (i32.const 71088) "a") (data (i32.const 71091) "a") (data (i32.const 71094) "a") (data (i32.const 71097) "a") (data (i32.const 71100) "a") (data (i32.const 71103) "a") (data (i32.const 71106) "a") (data (i32.const 71109) "a") (data (i32.const 71112) "a") (data (i32.const 71115) "a") (data (i32.const 71118) "a") (data (i32.const 71121) "a") (data (i32.const 71124) "a") (data (i32.const 71127) "a") (data (i32.const 71130) "a") (data (i32.const 71133) "a") (data (i32.const 71136) "a") (data (i32.const 71139) "a") (data (i32.const 71142) "a") (data (i32.const 71145) "a") (data (i32.const 71148) "a") (data (i32.const 71151) "a") (data (i32.const 71154) "a") (data (i32.const 71157) "a") (data (i32.const 71160) "a") (data (i32.const 71163) "a") (data (i32.const 71166) "a") (data (i32.const 71169) "a") (data (i32.const 71172) "a") (data (i32.const 71175) "a") (data (i32.const 71178) "a") (data (i32.const 71181) "a") (data (i32.const 71184) "a") (data (i32.const 71187) "a") (data (i32.const 71190) "a") (data (i32.const 71193) "a") (data (i32.const 71196) "a") (data (i32.const 71199) "a") (data (i32.const 71202) "a") (data (i32.const 71205) "a") (data (i32.const 71208) "a") (data (i32.const 71211) "a") (data (i32.const 71214) "a") (data (i32.const 71217) "a") (data (i32.const 71220) "a") (data (i32.const 71223) "a") (data (i32.const 71226) "a") (data (i32.const 71229) "a") (data (i32.const 71232) "a") (data (i32.const 71235) "a") (data (i32.const 71238) "a") (data (i32.const 71241) "a") (data (i32.const 71244) "a") (data (i32.const 71247) "a") (data (i32.const 71250) "a") (data (i32.const 71253) "a") (data (i32.const 71256) "a") (data (i32.const 71259) "a") (data (i32.const 71262) "a") (data (i32.const 71265) "a") (data (i32.const 71268) "a") (data (i32.const 71271) "a") (data (i32.const 71274) "a") (data (i32.const 71277) "a") (data (i32.const 71280) "a") (data (i32.const 71283) "a") (data (i32.const 71286) "a") (data (i32.const 71289) "a") (data (i32.const 71292) "a") (data (i32.const 71295) "a") (data (i32.const 71298) "a") (data (i32.const 71301) "a") (data (i32.const 71304) "a") (data (i32.const 71307) "a") (data (i32.const 71310) "a") (data (i32.const 71313) "a") (data (i32.const 71316) "a") (data (i32.const 71319) "a") (data (i32.const 71322) "a") (data (i32.const 71325) "a") (data (i32.const 71328) "a") (data (i32.const 71331) "a") (data (i32.const 71334) "a") (data (i32.const 71337) "a") (data (i32.const 71340) "a") (data (i32.const 71343) "a") (data (i32.const 71346) "a") (data (i32.const 71349) "a") (data (i32.const 71352) "a") (data (i32.const 71355) "a") (data (i32.const 71358) "a") (data (i32.const 71361) "a") (data (i32.const 71364) "a") (data (i32.const 71367) "a") (data (i32.const 71370) "a") (data (i32.const 71373) "a") (data (i32.const 71376) "a") (data (i32.const 71379) "a") (data (i32.const 71382) "a") (data (i32.const 71385) "a") (data (i32.const 71388) "a") (data (i32.const 71391) "a") (data (i32.const 71394) "a") (data (i32.const 71397) "a") (data (i32.const 71400) "a") (data (i32.const 71403) "a") (data (i32.const 71406) "a") (data (i32.const 71409) "a") (data (i32.const 71412) "a") (data (i32.const 71415) "a") (data (i32.const 71418) "a") (data (i32.const 71421) "a") (data (i32.const 71424) "a") (data (i32.const 71427) "a") (data (i32.const 71430) "a") (data (i32.const 71433) "a") (data (i32.const 71436) "a") (data (i32.const 71439) "a") (data (i32.const 71442) "a") (data (i32.const 71445) "a") (data (i32.const 71448) "a") (data (i32.const 71451) "a") (data (i32.const 71454) "a") (data (i32.const 71457) "a") (data (i32.const 71460) "a") (data (i32.const 71463) "a") (data (i32.const 71466) "a") (data (i32.const 71469) "a") (data (i32.const 71472) "a") (data (i32.const 71475) "a") (data (i32.const 71478) "a") (data (i32.const 71481) "a") (data (i32.const 71484) "a") (data (i32.const 71487) "a") (data (i32.const 71490) "a") (data (i32.const 71493) "a") (data (i32.const 71496) "a") (data (i32.const 71499) "a") (data (i32.const 71502) "a") (data (i32.const 71505) "a") (data (i32.const 71508) "a") (data (i32.const 71511) "a") (data (i32.const 71514) "a") (data (i32.const 71517) "a") (data (i32.const 71520) "a") (data (i32.const 71523) "a") (data (i32.const 71526) "a") (data (i32.const 71529) "a") (data (i32.const 71532) "a") (data (i32.const 71535) "a") (data (i32.const 71538) "a") (data (i32.const 71541) "a") (data (i32.const 71544) "a") (data (i32.const 71547) "a") (data (i32.const 71550) "a") (data (i32.const 71553) "a") (data (i32.const 71556) "a") (data (i32.const 71559) "a") (data (i32.const 71562) "a") (data (i32.const 71565) "a") (data (i32.const 71568) "a") (data (i32.const 71571) "a") (data (i32.const 71574) "a") (data (i32.const 71577) "a") (data (i32.const 71580) "a") (data (i32.const 71583) "a") (data (i32.const 71586) "a") (data (i32.const 71589) "a") (data (i32.const 71592) "a") (data (i32.const 71595) "a") (data (i32.const 71598) "a") (data (i32.const 71601) "a") (data (i32.const 71604) "a") (data (i32.const 71607) "a") (data (i32.const 71610) "a") (data (i32.const 71613) "a") (data (i32.const 71616) "a") (data (i32.const 71619) "a") (data (i32.const 71622) "a") (data (i32.const 71625) "a") (data (i32.const 71628) "a") (data (i32.const 71631) "a") (data (i32.const 71634) "a") (data (i32.const 71637) "a") (data (i32.const 71640) "a") (data (i32.const 71643) "a") (data (i32.const 71646) "a") (data (i32.const 71649) "a") (data (i32.const 71652) "a") (data (i32.const 71655) "a") (data (i32.const 71658) "a") (data (i32.const 71661) "a") (data (i32.const 71664) "a") (data (i32.const 71667) "a") (data (i32.const 71670) "a") (data (i32.const 71673) "a") (data (i32.const 71676) "a") (data (i32.const 71679) "a") (data (i32.const 71682) "a") (data (i32.const 71685) "a") (data (i32.const 71688) "a") (data (i32.const 71691) "a") (data (i32.const 71694) "a") (data (i32.const 71697) "a") (data (i32.const 71700) "a") (data (i32.const 71703) "a") (data (i32.const 71706) "a") (data (i32.const 71709) "a") (data (i32.const 71712) "a") (data (i32.const 71715) "a") (data (i32.const 71718) "a") (data (i32.const 71721) "a") (data (i32.const 71724) "a") (data (i32.const 71727) "a") (data (i32.const 71730) "a") (data (i32.const 71733) "a") (data (i32.const 71736) "a") (data (i32.const 71739) "a") (data (i32.const 71742) "a") (data (i32.const 71745) "a") (data (i32.const 71748) "a") (data (i32.const 71751) "a") (data (i32.const 71754) "a") (data (i32.const 71757) "a") (data (i32.const 71760) "a") (data (i32.const 71763) "a") (data (i32.const 71766) "a") (data (i32.const 71769) "a") (data (i32.const 71772) "a") (data (i32.const 71775) "a") (data (i32.const 71778) "a") (data (i32.const 71781) "a") (data (i32.const 71784) "a") (data (i32.const 71787) "a") (data (i32.const 71790) "a") (data (i32.const 71793) "a") (data (i32.const 71796) "a") (data (i32.const 71799) "a") (data (i32.const 71802) "a") (data (i32.const 71805) "a") (data (i32.const 71808) "a") (data (i32.const 71811) "a") (data (i32.const 71814) "a") (data (i32.const 71817) "a") (data (i32.const 71820) "a") (data (i32.const 71823) "a") (data (i32.const 71826) "a") (data (i32.const 71829) "a") (data (i32.const 71832) "a") (data (i32.const 71835) "a") (data (i32.const 71838) "a") (data (i32.const 71841) "a") (data (i32.const 71844) "a") (data (i32.const 71847) "a") (data (i32.const 71850) "a") (data (i32.const 71853) "a") (data (i32.const 71856) "a") (data (i32.const 71859) "a") (data (i32.const 71862) "a") (data (i32.const 71865) "a") (data (i32.const 71868) "a") (data (i32.const 71871) "a") (data (i32.const 71874) "a") (data (i32.const 71877) "a") (data (i32.const 71880) "a") (data (i32.const 71883) "a") (data (i32.const 71886) "a") (data (i32.const 71889) "a") (data (i32.const 71892) "a") (data (i32.const 71895) "a") (data (i32.const 71898) "a") (data (i32.const 71901) "a") (data (i32.const 71904) "a") (data (i32.const 71907) "a") (data (i32.const 71910) "a") (data (i32.const 71913) "a") (data (i32.const 71916) "a") (data (i32.const 71919) "a") (data (i32.const 71922) "a") (data (i32.const 71925) "a") (data (i32.const 71928) "a") (data (i32.const 71931) "a") (data (i32.const 71934) "a") (data (i32.const 71937) "a") (data (i32.const 71940) "a") (data (i32.const 71943) "a") (data (i32.const 71946) "a") (data (i32.const 71949) "a") (data (i32.const 71952) "a") (data (i32.const 71955) "a") (data (i32.const 71958) "a") (data (i32.const 71961) "a") (data (i32.const 71964) "a") (data (i32.const 71967) "a") (data (i32.const 71970) "a") (data (i32.const 71973) "a") (data (i32.const 71976) "a") (data (i32.const 71979) "a") (data (i32.const 71982) "a") (data (i32.const 71985) "a") (data (i32.const 71988) "a") (data (i32.const 71991) "a") (data (i32.const 71994) "a") (data (i32.const 71997) "a") (data (i32.const 72000) "a") (data (i32.const 72003) "a") (data (i32.const 72006) "a") (data (i32.const 72009) "a") (data (i32.const 72012) "a") (data (i32.const 72015) "a") (data (i32.const 72018) "a") (data (i32.const 72021) "a") (data (i32.const 72024) "a") (data (i32.const 72027) "a") (data (i32.const 72030) "a") (data (i32.const 72033) "a") (data (i32.const 72036) "a") (data (i32.const 72039) "a") (data (i32.const 72042) "a") (data (i32.const 72045) "a") (data (i32.const 72048) "a") (data (i32.const 72051) "a") (data (i32.const 72054) "a") (data (i32.const 72057) "a") (data (i32.const 72060) "a") (data (i32.const 72063) "a") (data (i32.const 72066) "a") (data (i32.const 72069) "a") (data (i32.const 72072) "a") (data (i32.const 72075) "a") (data (i32.const 72078) "a") (data (i32.const 72081) "a") (data (i32.const 72084) "a") (data (i32.const 72087) "a") (data (i32.const 72090) "a") (data (i32.const 72093) "a") (data (i32.const 72096) "a") (data (i32.const 72099) "a") (data (i32.const 72102) "a") (data (i32.const 72105) "a") (data (i32.const 72108) "a") (data (i32.const 72111) "a") (data (i32.const 72114) "a") (data (i32.const 72117) "a") (data (i32.const 72120) "a") (data (i32.const 72123) "a") (data (i32.const 72126) "a") (data (i32.const 72129) "a") (data (i32.const 72132) "a") (data (i32.const 72135) "a") (data (i32.const 72138) "a") (data (i32.const 72141) "a") (data (i32.const 72144) "a") (data (i32.const 72147) "a") (data (i32.const 72150) "a") (data (i32.const 72153) "a") (data (i32.const 72156) "a") (data (i32.const 72159) "a") (data (i32.const 72162) "a") (data (i32.const 72165) "a") (data (i32.const 72168) "a") (data (i32.const 72171) "a") (data (i32.const 72174) "a") (data (i32.const 72177) "a") (data (i32.const 72180) "a") (data (i32.const 72183) "a") (data (i32.const 72186) "a") (data (i32.const 72189) "a") (data (i32.const 72192) "a") (data (i32.const 72195) "a") (data (i32.const 72198) "a") (data (i32.const 72201) "a") (data (i32.const 72204) "a") (data (i32.const 72207) "a") (data (i32.const 72210) "a") (data (i32.const 72213) "a") (data (i32.const 72216) "a") (data (i32.const 72219) "a") (data (i32.const 72222) "a") (data (i32.const 72225) "a") (data (i32.const 72228) "a") (data (i32.const 72231) "a") (data (i32.const 72234) "a") (data (i32.const 72237) "a") (data (i32.const 72240) "a") (data (i32.const 72243) "a") (data (i32.const 72246) "a") (data (i32.const 72249) "a") (data (i32.const 72252) "a") (data (i32.const 72255) "a") (data (i32.const 72258) "a") (data (i32.const 72261) "a") (data (i32.const 72264) "a") (data (i32.const 72267) "a") (data (i32.const 72270) "a") (data (i32.const 72273) "a") (data (i32.const 72276) "a") (data (i32.const 72279) "a") (data (i32.const 72282) "a") (data (i32.const 72285) "a") (data (i32.const 72288) "a") (data (i32.const 72291) "a") (data (i32.const 72294) "a") (data (i32.const 72297) "a") (data (i32.const 72300) "a") (data (i32.const 72303) "a") (data (i32.const 72306) "a") (data (i32.const 72309) "a") (data (i32.const 72312) "a") (data (i32.const 72315) "a") (data (i32.const 72318) "a") (data (i32.const 72321) "a") (data (i32.const 72324) "a") (data (i32.const 72327) "a") (data (i32.const 72330) "a") (data (i32.const 72333) "a") (data (i32.const 72336) "a") (data (i32.const 72339) "a") (data (i32.const 72342) "a") (data (i32.const 72345) "a") (data (i32.const 72348) "a") (data (i32.const 72351) "a") (data (i32.const 72354) "a") (data (i32.const 72357) "a") (data (i32.const 72360) "a") (data (i32.const 72363) "a") (data (i32.const 72366) "a") (data (i32.const 72369) "a") (data (i32.const 72372) "a") (data (i32.const 72375) "a") (data (i32.const 72378) "a") (data (i32.const 72381) "a") (data (i32.const 72384) "a") (data (i32.const 72387) "a") (data (i32.const 72390) "a") (data (i32.const 72393) "a") (data (i32.const 72396) "a") (data (i32.const 72399) "a") (data (i32.const 72402) "a") (data (i32.const 72405) "a") (data (i32.const 72408) "a") (data (i32.const 72411) "a") (data (i32.const 72414) "a") (data (i32.const 72417) "a") (data (i32.const 72420) "a") (data (i32.const 72423) "a") (data (i32.const 72426) "a") (data (i32.const 72429) "a") (data (i32.const 72432) "a") (data (i32.const 72435) "a") (data (i32.const 72438) "a") (data (i32.const 72441) "a") (data (i32.const 72444) "a") (data (i32.const 72447) "a") (data (i32.const 72450) "a") (data (i32.const 72453) "a") (data (i32.const 72456) "a") (data (i32.const 72459) "a") (data (i32.const 72462) "a") (data (i32.const 72465) "a") (data (i32.const 72468) "a") (data (i32.const 72471) "a") (data (i32.const 72474) "a") (data (i32.const 72477) "a") (data (i32.const 72480) "a") (data (i32.const 72483) "a") (data (i32.const 72486) "a") (data (i32.const 72489) "a") (data (i32.const 72492) "a") (data (i32.const 72495) "a") (data (i32.const 72498) "a") (data (i32.const 72501) "a") (data (i32.const 72504) "a") (data (i32.const 72507) "a") (data (i32.const 72510) "a") (data (i32.const 72513) "a") (data (i32.const 72516) "a") (data (i32.const 72519) "a") (data (i32.const 72522) "a") (data (i32.const 72525) "a") (data (i32.const 72528) "a") (data (i32.const 72531) "a") (data (i32.const 72534) "a") (data (i32.const 72537) "a") (data (i32.const 72540) "a") (data (i32.const 72543) "a") (data (i32.const 72546) "a") (data (i32.const 72549) "a") (data (i32.const 72552) "a") (data (i32.const 72555) "a") (data (i32.const 72558) "a") (data (i32.const 72561) "a") (data (i32.const 72564) "a") (data (i32.const 72567) "a") (data (i32.const 72570) "a") (data (i32.const 72573) "a") (data (i32.const 72576) "a") (data (i32.const 72579) "a") (data (i32.const 72582) "a") (data (i32.const 72585) "a") (data (i32.const 72588) "a") (data (i32.const 72591) "a") (data (i32.const 72594) "a") (data (i32.const 72597) "a") (data (i32.const 72600) "a") (data (i32.const 72603) "a") (data (i32.const 72606) "a") (data (i32.const 72609) "a") (data (i32.const 72612) "a") (data (i32.const 72615) "a") (data (i32.const 72618) "a") (data (i32.const 72621) "a") (data (i32.const 72624) "a") (data (i32.const 72627) "a") (data (i32.const 72630) "a") (data (i32.const 72633) "a") (data (i32.const 72636) "a") (data (i32.const 72639) "a") (data (i32.const 72642) "a") (data (i32.const 72645) "a") (data (i32.const 72648) "a") (data (i32.const 72651) "a") (data (i32.const 72654) "a") (data (i32.const 72657) "a") (data (i32.const 72660) "a") (data (i32.const 72663) "a") (data (i32.const 72666) "a") (data (i32.const 72669) "a") (data (i32.const 72672) "a") (data (i32.const 72675) "a") (data (i32.const 72678) "a") (data (i32.const 72681) "a") (data (i32.const 72684) "a") (data (i32.const 72687) "a") (data (i32.const 72690) "a") (data (i32.const 72693) "a") (data (i32.const 72696) "a") (data (i32.const 72699) "a") (data (i32.const 72702) "a") (data (i32.const 72705) "a") (data (i32.const 72708) "a") (data (i32.const 72711) "a") (data (i32.const 72714) "a") (data (i32.const 72717) "a") (data (i32.const 72720) "a") (data (i32.const 72723) "a") (data (i32.const 72726) "a") (data (i32.const 72729) "a") (data (i32.const 72732) "a") (data (i32.const 72735) "a") (data (i32.const 72738) "a") (data (i32.const 72741) "a") (data (i32.const 72744) "a") (data (i32.const 72747) "a") (data (i32.const 72750) "a") (data (i32.const 72753) "a") (data (i32.const 72756) "a") (data (i32.const 72759) "a") (data (i32.const 72762) "a") (data (i32.const 72765) "a") (data (i32.const 72768) "a") (data (i32.const 72771) "a") (data (i32.const 72774) "a") (data (i32.const 72777) "a") (data (i32.const 72780) "a") (data (i32.const 72783) "a") (data (i32.const 72786) "a") (data (i32.const 72789) "a") (data (i32.const 72792) "a") (data (i32.const 72795) "a") (data (i32.const 72798) "a") (data (i32.const 72801) "a") (data (i32.const 72804) "a") (data (i32.const 72807) "a") (data (i32.const 72810) "a") (data (i32.const 72813) "a") (data (i32.const 72816) "a") (data (i32.const 72819) "a") (data (i32.const 72822) "a") (data (i32.const 72825) "a") (data (i32.const 72828) "a") (data (i32.const 72831) "a") (data (i32.const 72834) "a") (data (i32.const 72837) "a") (data (i32.const 72840) "a") (data (i32.const 72843) "a") (data (i32.const 72846) "a") (data (i32.const 72849) "a") (data (i32.const 72852) "a") (data (i32.const 72855) "a") (data (i32.const 72858) "a") (data (i32.const 72861) "a") (data (i32.const 72864) "a") (data (i32.const 72867) "a") (data (i32.const 72870) "a") (data (i32.const 72873) "a") (data (i32.const 72876) "a") (data (i32.const 72879) "a") (data (i32.const 72882) "a") (data (i32.const 72885) "a") (data (i32.const 72888) "a") (data (i32.const 72891) "a") (data (i32.const 72894) "a") (data (i32.const 72897) "a") (data (i32.const 72900) "a") (data (i32.const 72903) "a") (data (i32.const 72906) "a") (data (i32.const 72909) "a") (data (i32.const 72912) "a") (data (i32.const 72915) "a") (data (i32.const 72918) "a") (data (i32.const 72921) "a") (data (i32.const 72924) "a") (data (i32.const 72927) "a") (data (i32.const 72930) "a") (data (i32.const 72933) "a") (data (i32.const 72936) "a") (data (i32.const 72939) "a") (data (i32.const 72942) "a") (data (i32.const 72945) "a") (data (i32.const 72948) "a") (data (i32.const 72951) "a") (data (i32.const 72954) "a") (data (i32.const 72957) "a") (data (i32.const 72960) "a") (data (i32.const 72963) "a") (data (i32.const 72966) "a") (data (i32.const 72969) "a") (data (i32.const 72972) "a") (data (i32.const 72975) "a") (data (i32.const 72978) "a") (data (i32.const 72981) "a") (data (i32.const 72984) "a") (data (i32.const 72987) "a") (data (i32.const 72990) "a") (data (i32.const 72993) "a") (data (i32.const 72996) "a") (data (i32.const 72999) "a") (data (i32.const 73002) "a") (data (i32.const 73005) "a") (data (i32.const 73008) "a") (data (i32.const 73011) "a") (data (i32.const 73014) "a") (data (i32.const 73017) "a") (data (i32.const 73020) "a") (data (i32.const 73023) "a") (data (i32.const 73026) "a") (data (i32.const 73029) "a") (data (i32.const 73032) "a") (data (i32.const 73035) "a") (data (i32.const 73038) "a") (data (i32.const 73041) "a") (data (i32.const 73044) "a") (data (i32.const 73047) "a") (data (i32.const 73050) "a") (data (i32.const 73053) "a") (data (i32.const 73056) "a") (data (i32.const 73059) "a") (data (i32.const 73062) "a") (data (i32.const 73065) "a") (data (i32.const 73068) "a") (data (i32.const 73071) "a") (data (i32.const 73074) "a") (data (i32.const 73077) "a") (data (i32.const 73080) "a") (data (i32.const 73083) "a") (data (i32.const 73086) "a") (data (i32.const 73089) "a") (data (i32.const 73092) "a") (data (i32.const 73095) "a") (data (i32.const 73098) "a") (data (i32.const 73101) "a") (data (i32.const 73104) "a") (data (i32.const 73107) "a") (data (i32.const 73110) "a") (data (i32.const 73113) "a") (data (i32.const 73116) "a") (data (i32.const 73119) "a") (data (i32.const 73122) "a") (data (i32.const 73125) "a") (data (i32.const 73128) "a") (data (i32.const 73131) "a") (data (i32.const 73134) "a") (data (i32.const 73137) "a") (data (i32.const 73140) "a") (data (i32.const 73143) "a") (data (i32.const 73146) "a") (data (i32.const 73149) "a") (data (i32.const 73152) "a") (data (i32.const 73155) "a") (data (i32.const 73158) "a") (data (i32.const 73161) "a") (data (i32.const 73164) "a") (data (i32.const 73167) "a") (data (i32.const 73170) "a") (data (i32.const 73173) "a") (data (i32.const 73176) "a") (data (i32.const 73179) "a") (data (i32.const 73182) "a") (data (i32.const 73185) "a") (data (i32.const 73188) "a") (data (i32.const 73191) "a") (data (i32.const 73194) "a") (data (i32.const 73197) "a") (data (i32.const 73200) "a") (data (i32.const 73203) "a") (data (i32.const 73206) "a") (data (i32.const 73209) "a") (data (i32.const 73212) "a") (data (i32.const 73215) "a") (data (i32.const 73218) "a") (data (i32.const 73221) "a") (data (i32.const 73224) "a") (data (i32.const 73227) "a") (data (i32.const 73230) "a") (data (i32.const 73233) "a") (data (i32.const 73236) "a") (data (i32.const 73239) "a") (data (i32.const 73242) "a") (data (i32.const 73245) "a") (data (i32.const 73248) "a") (data (i32.const 73251) "a") (data (i32.const 73254) "a") (data (i32.const 73257) "a") (data (i32.const 73260) "a") (data (i32.const 73263) "a") (data (i32.const 73266) "a") (data (i32.const 73269) "a") (data (i32.const 73272) "a") (data (i32.const 73275) "a") (data (i32.const 73278) "a") (data (i32.const 73281) "a") (data (i32.const 73284) "a") (data (i32.const 73287) "a") (data (i32.const 73290) "a") (data (i32.const 73293) "a") (data (i32.const 73296) "a") (data (i32.const 73299) "a") (data (i32.const 73302) "a") (data (i32.const 73305) "a") (data (i32.const 73308) "a") (data (i32.const 73311) "a") (data (i32.const 73314) "a") (data (i32.const 73317) "a") (data (i32.const 73320) "a") (data (i32.const 73323) "a") (data (i32.const 73326) "a") (data (i32.const 73329) "a") (data (i32.const 73332) "a") (data (i32.const 73335) "a") (data (i32.const 73338) "a") (data (i32.const 73341) "a") (data (i32.const 73344) "a") (data (i32.const 73347) "a") (data (i32.const 73350) "a") (data (i32.const 73353) "a") (data (i32.const 73356) "a") (data (i32.const 73359) "a") (data (i32.const 73362) "a") (data (i32.const 73365) "a") (data (i32.const 73368) "a") (data (i32.const 73371) "a") (data (i32.const 73374) "a") (data (i32.const 73377) "a") (data (i32.const 73380) "a") (data (i32.const 73383) "a") (data (i32.const 73386) "a") (data (i32.const 73389) "a") (data (i32.const 73392) "a") (data (i32.const 73395) "a") (data (i32.const 73398) "a") (data (i32.const 73401) "a") (data (i32.const 73404) "a") (data (i32.const 73407) "a") (data (i32.const 73410) "a") (data (i32.const 73413) "a") (data (i32.const 73416) "a") (data (i32.const 73419) "a") (data (i32.const 73422) "a") (data (i32.const 73425) "a") (data (i32.const 73428) "a") (data (i32.const 73431) "a") (data (i32.const 73434) "a") (data (i32.const 73437) "a") (data (i32.const 73440) "a") (data (i32.const 73443) "a") (data (i32.const 73446) "a") (data (i32.const 73449) "a") (data (i32.const 73452) "a") (data (i32.const 73455) "a") (data (i32.const 73458) "a") (data (i32.const 73461) "a") (data (i32.const 73464) "a") (data (i32.const 73467) "a") (data (i32.const 73470) "a") (data (i32.const 73473) "a") (data (i32.const 73476) "a") (data (i32.const 73479) "a") (data (i32.const 73482) "a") (data (i32.const 73485) "a") (data (i32.const 73488) "a") (data (i32.const 73491) "a") (data (i32.const 73494) "a") (data (i32.const 73497) "a") (data (i32.const 73500) "a") (data (i32.const 73503) "a") (data (i32.const 73506) "a") (data (i32.const 73509) "a") (data (i32.const 73512) "a") (data (i32.const 73515) "a") (data (i32.const 73518) "a") (data (i32.const 73521) "a") (data (i32.const 73524) "a") (data (i32.const 73527) "a") (data (i32.const 73530) "a") (data (i32.const 73533) "a") (data (i32.const 73536) "a") (data (i32.const 73539) "a") (data (i32.const 73542) "a") (data (i32.const 73545) "a") (data (i32.const 73548) "a") (data (i32.const 73551) "a") (data (i32.const 73554) "a") (data (i32.const 73557) "a") (data (i32.const 73560) "a") (data (i32.const 73563) "a") (data (i32.const 73566) "a") (data (i32.const 73569) "a") (data (i32.const 73572) "a") (data (i32.const 73575) "a") (data (i32.const 73578) "a") (data (i32.const 73581) "a") (data (i32.const 73584) "a") (data (i32.const 73587) "a") (data (i32.const 73590) "a") (data (i32.const 73593) "a") (data (i32.const 73596) "a") (data (i32.const 73599) "a") (data (i32.const 73602) "a") (data (i32.const 73605) "a") (data (i32.const 73608) "a") (data (i32.const 73611) "a") (data (i32.const 73614) "a") (data (i32.const 73617) "a") (data (i32.const 73620) "a") (data (i32.const 73623) "a") (data (i32.const 73626) "a") (data (i32.const 73629) "a") (data (i32.const 73632) "a") (data (i32.const 73635) "a") (data (i32.const 73638) "a") (data (i32.const 73641) "a") (data (i32.const 73644) "a") (data (i32.const 73647) "a") (data (i32.const 73650) "a") (data (i32.const 73653) "a") (data (i32.const 73656) "a") (data (i32.const 73659) "a") (data (i32.const 73662) "a") (data (i32.const 73665) "a") (data (i32.const 73668) "a") (data (i32.const 73671) "a") (data (i32.const 73674) "a") (data (i32.const 73677) "a") (data (i32.const 73680) "a") (data (i32.const 73683) "a") (data (i32.const 73686) "a") (data (i32.const 73689) "a") (data (i32.const 73692) "a") (data (i32.const 73695) "a") (data (i32.const 73698) "a") (data (i32.const 73701) "a") (data (i32.const 73704) "a") (data (i32.const 73707) "a") (data (i32.const 73710) "a") (data (i32.const 73713) "a") (data (i32.const 73716) "a") (data (i32.const 73719) "a") (data (i32.const 73722) "a") (data (i32.const 73725) "a") (data (i32.const 73728) "a") (data (i32.const 73731) "a") (data (i32.const 73734) "a") (data (i32.const 73737) "a") (data (i32.const 73740) "a") (data (i32.const 73743) "a") (data (i32.const 73746) "a") (data (i32.const 73749) "a") (data (i32.const 73752) "a") (data (i32.const 73755) "a") (data (i32.const 73758) "a") (data (i32.const 73761) "a") (data (i32.const 73764) "a") (data (i32.const 73767) "a") (data (i32.const 73770) "a") (data (i32.const 73773) "a") (data (i32.const 73776) "a") (data (i32.const 73779) "a") (data (i32.const 73782) "a") (data (i32.const 73785) "a") (data (i32.const 73788) "a") (data (i32.const 73791) "a") (data (i32.const 73794) "a") (data (i32.const 73797) "a") (data (i32.const 73800) "a") (data (i32.const 73803) "a") (data (i32.const 73806) "a") (data (i32.const 73809) "a") (data (i32.const 73812) "a") (data (i32.const 73815) "a") (data (i32.const 73818) "a") (data (i32.const 73821) "a") (data (i32.const 73824) "a") (data (i32.const 73827) "a") (data (i32.const 73830) "a") (data (i32.const 73833) "a") (data (i32.const 73836) "a") (data (i32.const 73839) "a") (data (i32.const 73842) "a") (data (i32.const 73845) "a") (data (i32.const 73848) "a") (data (i32.const 73851) "a") (data (i32.const 73854) "a") (data (i32.const 73857) "a") (data (i32.const 73860) "a") (data (i32.const 73863) "a") (data (i32.const 73866) "a") (data (i32.const 73869) "a") (data (i32.const 73872) "a") (data (i32.const 73875) "a") (data (i32.const 73878) "a") (data (i32.const 73881) "a") (data (i32.const 73884) "a") (data (i32.const 73887) "a") (data (i32.const 73890) "a") (data (i32.const 73893) "a") (data (i32.const 73896) "a") (data (i32.const 73899) "a") (data (i32.const 73902) "a") (data (i32.const 73905) "a") (data (i32.const 73908) "a") (data (i32.const 73911) "a") (data (i32.const 73914) "a") (data (i32.const 73917) "a") (data (i32.const 73920) "a") (data (i32.const 73923) "a") (data (i32.const 73926) "a") (data (i32.const 73929) "a") (data (i32.const 73932) "a") (data (i32.const 73935) "a") (data (i32.const 73938) "a") (data (i32.const 73941) "a") (data (i32.const 73944) "a") (data (i32.const 73947) "a") (data (i32.const 73950) "a") (data (i32.const 73953) "a") (data (i32.const 73956) "a") (data (i32.const 73959) "a") (data (i32.const 73962) "a") (data (i32.const 73965) "a") (data (i32.const 73968) "a") (data (i32.const 73971) "a") (data (i32.const 73974) "a") (data (i32.const 73977) "a") (data (i32.const 73980) "a") (data (i32.const 73983) "a") (data (i32.const 73986) "a") (data (i32.const 73989) "a") (data (i32.const 73992) "a") (data (i32.const 73995) "a") (data (i32.const 73998) "a") (data (i32.const 74001) "a") (data (i32.const 74004) "a") (data (i32.const 74007) "a") (data (i32.const 74010) "a") (data (i32.const 74013) "a") (data (i32.const 74016) "a") (data (i32.const 74019) "a") (data (i32.const 74022) "a") (data (i32.const 74025) "a") (data (i32.const 74028) "a") (data (i32.const 74031) "a") (data (i32.const 74034) "a") (data (i32.const 74037) "a") (data (i32.const 74040) "a") (data (i32.const 74043) "a") (data (i32.const 74046) "a") (data (i32.const 74049) "a") (data (i32.const 74052) "a") (data (i32.const 74055) "a") (data (i32.const 74058) "a") (data (i32.const 74061) "a") (data (i32.const 74064) "a") (data (i32.const 74067) "a") (data (i32.const 74070) "a") (data (i32.const 74073) "a") (data (i32.const 74076) "a") (data (i32.const 74079) "a") (data (i32.const 74082) "a") (data (i32.const 74085) "a") (data (i32.const 74088) "a") (data (i32.const 74091) "a") (data (i32.const 74094) "a") (data (i32.const 74097) "a") (data (i32.const 74100) "a") (data (i32.const 74103) "a") (data (i32.const 74106) "a") (data (i32.const 74109) "a") (data (i32.const 74112) "a") (data (i32.const 74115) "a") (data (i32.const 74118) "a") (data (i32.const 74121) "a") (data (i32.const 74124) "a") (data (i32.const 74127) "a") (data (i32.const 74130) "a") (data (i32.const 74133) "a") (data (i32.const 74136) "a") (data (i32.const 74139) "a") (data (i32.const 74142) "a") (data (i32.const 74145) "a") (data (i32.const 74148) "a") (data (i32.const 74151) "a") (data (i32.const 74154) "a") (data (i32.const 74157) "a") (data (i32.const 74160) "a") (data (i32.const 74163) "a") (data (i32.const 74166) "a") (data (i32.const 74169) "a") (data (i32.const 74172) "a") (data (i32.const 74175) "a") (data (i32.const 74178) "a") (data (i32.const 74181) "a") (data (i32.const 74184) "a") (data (i32.const 74187) "a") (data (i32.const 74190) "a") (data (i32.const 74193) "a") (data (i32.const 74196) "a") (data (i32.const 74199) "a") (data (i32.const 74202) "a") (data (i32.const 74205) "a") (data (i32.const 74208) "a") (data (i32.const 74211) "a") (data (i32.const 74214) "a") (data (i32.const 74217) "a") (data (i32.const 74220) "a") (data (i32.const 74223) "a") (data (i32.const 74226) "a") (data (i32.const 74229) "a") (data (i32.const 74232) "a") (data (i32.const 74235) "a") (data (i32.const 74238) "a") (data (i32.const 74241) "a") (data (i32.const 74244) "a") (data (i32.const 74247) "a") (data (i32.const 74250) "a") (data (i32.const 74253) "a") (data (i32.const 74256) "a") (data (i32.const 74259) "a") (data (i32.const 74262) "a") (data (i32.const 74265) "a") (data (i32.const 74268) "a") (data (i32.const 74271) "a") (data (i32.const 74274) "a") (data (i32.const 74277) "a") (data (i32.const 74280) "a") (data (i32.const 74283) "a") (data (i32.const 74286) "a") (data (i32.const 74289) "a") (data (i32.const 74292) "a") (data (i32.const 74295) "a") (data (i32.const 74298) "a") (data (i32.const 74301) "a") (data (i32.const 74304) "a") (data (i32.const 74307) "a") (data (i32.const 74310) "a") (data (i32.const 74313) "a") (data (i32.const 74316) "a") (data (i32.const 74319) "a") (data (i32.const 74322) "a") (data (i32.const 74325) "a") (data (i32.const 74328) "a") (data (i32.const 74331) "a") (data (i32.const 74334) "a") (data (i32.const 74337) "a") (data (i32.const 74340) "a") (data (i32.const 74343) "a") (data (i32.const 74346) "a") (data (i32.const 74349) "a") (data (i32.const 74352) "a") (data (i32.const 74355) "a") (data (i32.const 74358) "a") (data (i32.const 74361) "a") (data (i32.const 74364) "a") (data (i32.const 74367) "a") (data (i32.const 74370) "a") (data (i32.const 74373) "a") (data (i32.const 74376) "a") (data (i32.const 74379) "a") (data (i32.const 74382) "a") (data (i32.const 74385) "a") (data (i32.const 74388) "a") (data (i32.const 74391) "a") (data (i32.const 74394) "a") (data (i32.const 74397) "a") (data (i32.const 74400) "a") (data (i32.const 74403) "a") (data (i32.const 74406) "a") (data (i32.const 74409) "a") (data (i32.const 74412) "a") (data (i32.const 74415) "a") (data (i32.const 74418) "a") (data (i32.const 74421) "a") (data (i32.const 74424) "a") (data (i32.const 74427) "a") (data (i32.const 74430) "a") (data (i32.const 74433) "a") (data (i32.const 74436) "a") (data (i32.const 74439) "a") (data (i32.const 74442) "a") (data (i32.const 74445) "a") (data (i32.const 74448) "a") (data (i32.const 74451) "a") (data (i32.const 74454) "a") (data (i32.const 74457) "a") (data (i32.const 74460) "a") (data (i32.const 74463) "a") (data (i32.const 74466) "a") (data (i32.const 74469) "a") (data (i32.const 74472) "a") (data (i32.const 74475) "a") (data (i32.const 74478) "a") (data (i32.const 74481) "a") (data (i32.const 74484) "a") (data (i32.const 74487) "a") (data (i32.const 74490) "a") (data (i32.const 74493) "a") (data (i32.const 74496) "a") (data (i32.const 74499) "a") (data (i32.const 74502) "a") (data (i32.const 74505) "a") (data (i32.const 74508) "a") (data (i32.const 74511) "a") (data (i32.const 74514) "a") (data (i32.const 74517) "a") (data (i32.const 74520) "a") (data (i32.const 74523) "a") (data (i32.const 74526) "a") (data (i32.const 74529) "a") (data (i32.const 74532) "a") (data (i32.const 74535) "a") (data (i32.const 74538) "a") (data (i32.const 74541) "a") (data (i32.const 74544) "a") (data (i32.const 74547) "a") (data (i32.const 74550) "a") (data (i32.const 74553) "a") (data (i32.const 74556) "a") (data (i32.const 74559) "a") (data (i32.const 74562) "a") (data (i32.const 74565) "a") (data (i32.const 74568) "a") (data (i32.const 74571) "a") (data (i32.const 74574) "a") (data (i32.const 74577) "a") (data (i32.const 74580) "a") (data (i32.const 74583) "a") (data (i32.const 74586) "a") (data (i32.const 74589) "a") (data (i32.const 74592) "a") (data (i32.const 74595) "a") (data (i32.const 74598) "a") (data (i32.const 74601) "a") (data (i32.const 74604) "a") (data (i32.const 74607) "a") (data (i32.const 74610) "a") (data (i32.const 74613) "a") (data (i32.const 74616) "a") (data (i32.const 74619) "a") (data (i32.const 74622) "a") (data (i32.const 74625) "a") (data (i32.const 74628) "a") (data (i32.const 74631) "a") (data (i32.const 74634) "a") (data (i32.const 74637) "a") (data (i32.const 74640) "a") (data (i32.const 74643) "a") (data (i32.const 74646) "a") (data (i32.const 74649) "a") (data (i32.const 74652) "a") (data (i32.const 74655) "a") (data (i32.const 74658) "a") (data (i32.const 74661) "a") (data (i32.const 74664) "a") (data (i32.const 74667) "a") (data (i32.const 74670) "a") (data (i32.const 74673) "a") (data (i32.const 74676) "a") (data (i32.const 74679) "a") (data (i32.const 74682) "a") (data (i32.const 74685) "a") (data (i32.const 74688) "a") (data (i32.const 74691) "a") (data (i32.const 74694) "a") (data (i32.const 74697) "a") (data (i32.const 74700) "a") (data (i32.const 74703) "a") (data (i32.const 74706) "a") (data (i32.const 74709) "a") (data (i32.const 74712) "a") (data (i32.const 74715) "a") (data (i32.const 74718) "a") (data (i32.const 74721) "a") (data (i32.const 74724) "a") (data (i32.const 74727) "a") (data (i32.const 74730) "a") (data (i32.const 74733) "a") (data (i32.const 74736) "a") (data (i32.const 74739) "a") (data (i32.const 74742) "a") (data (i32.const 74745) "a") (data (i32.const 74748) "a") (data (i32.const 74751) "a") (data (i32.const 74754) "a") (data (i32.const 74757) "a") (data (i32.const 74760) "a") (data (i32.const 74763) "a") (data (i32.const 74766) "a") (data (i32.const 74769) "a") (data (i32.const 74772) "a") (data (i32.const 74775) "a") (data (i32.const 74778) "a") (data (i32.const 74781) "a") (data (i32.const 74784) "a") (data (i32.const 74787) "a") (data (i32.const 74790) "a") (data (i32.const 74793) "a") (data (i32.const 74796) "a") (data (i32.const 74799) "a") (data (i32.const 74802) "a") (data (i32.const 74805) "a") (data (i32.const 74808) "a") (data (i32.const 74811) "a") (data (i32.const 74814) "a") (data (i32.const 74817) "a") (data (i32.const 74820) "a") (data (i32.const 74823) "a") (data (i32.const 74826) "a") (data (i32.const 74829) "a") (data (i32.const 74832) "a") (data (i32.const 74835) "a") (data (i32.const 74838) "a") (data (i32.const 74841) "a") (data (i32.const 74844) "a") (data (i32.const 74847) "a") (data (i32.const 74850) "a") (data (i32.const 74853) "a") (data (i32.const 74856) "a") (data (i32.const 74859) "a") (data (i32.const 74862) "a") (data (i32.const 74865) "a") (data (i32.const 74868) "a") (data (i32.const 74871) "a") (data (i32.const 74874) "a") (data (i32.const 74877) "a") (data (i32.const 74880) "a") (data (i32.const 74883) "a") (data (i32.const 74886) "a") (data (i32.const 74889) "a") (data (i32.const 74892) "a") (data (i32.const 74895) "a") (data (i32.const 74898) "a") (data (i32.const 74901) "a") (data (i32.const 74904) "a") (data (i32.const 74907) "a") (data (i32.const 74910) "a") (data (i32.const 74913) "a") (data (i32.const 74916) "a") (data (i32.const 74919) "a") (data (i32.const 74922) "a") (data (i32.const 74925) "a") (data (i32.const 74928) "a") (data (i32.const 74931) "a") (data (i32.const 74934) "a") (data (i32.const 74937) "a") (data (i32.const 74940) "a") (data (i32.const 74943) "a") (data (i32.const 74946) "a") (data (i32.const 74949) "a") (data (i32.const 74952) "a") (data (i32.const 74955) "a") (data (i32.const 74958) "a") (data (i32.const 74961) "a") (data (i32.const 74964) "a") (data (i32.const 74967) "a") (data (i32.const 74970) "a") (data (i32.const 74973) "a") (data (i32.const 74976) "a") (data (i32.const 74979) "a") (data (i32.const 74982) "a") (data (i32.const 74985) "a") (data (i32.const 74988) "a") (data (i32.const 74991) "a") (data (i32.const 74994) "a") (data (i32.const 74997) "a") (data (i32.const 75000) "a") (data (i32.const 75003) "a") (data (i32.const 75006) "a") (data (i32.const 75009) "a") (data (i32.const 75012) "a") (data (i32.const 75015) "a") (data (i32.const 75018) "a") (data (i32.const 75021) "a") (data (i32.const 75024) "a") (data (i32.const 75027) "a") (data (i32.const 75030) "a") (data (i32.const 75033) "a") (data (i32.const 75036) "a") (data (i32.const 75039) "a") (data (i32.const 75042) "a") (data (i32.const 75045) "a") (data (i32.const 75048) "a") (data (i32.const 75051) "a") (data (i32.const 75054) "a") (data (i32.const 75057) "a") (data (i32.const 75060) "a") (data (i32.const 75063) "a") (data (i32.const 75066) "a") (data (i32.const 75069) "a") (data (i32.const 75072) "a") (data (i32.const 75075) "a") (data (i32.const 75078) "a") (data (i32.const 75081) "a") (data (i32.const 75084) "a") (data (i32.const 75087) "a") (data (i32.const 75090) "a") (data (i32.const 75093) "a") (data (i32.const 75096) "a") (data (i32.const 75099) "a") (data (i32.const 75102) "a") (data (i32.const 75105) "a") (data (i32.const 75108) "a") (data (i32.const 75111) "a") (data (i32.const 75114) "a") (data (i32.const 75117) "a") (data (i32.const 75120) "a") (data (i32.const 75123) "a") (data (i32.const 75126) "a") (data (i32.const 75129) "a") (data (i32.const 75132) "a") (data (i32.const 75135) "a") (data (i32.const 75138) "a") (data (i32.const 75141) "a") (data (i32.const 75144) "a") (data (i32.const 75147) "a") (data (i32.const 75150) "a") (data (i32.const 75153) "a") (data (i32.const 75156) "a") (data (i32.const 75159) "a") (data (i32.const 75162) "a") (data (i32.const 75165) "a") (data (i32.const 75168) "a") (data (i32.const 75171) "a") (data (i32.const 75174) "a") (data (i32.const 75177) "a") (data (i32.const 75180) "a") (data (i32.const 75183) "a") (data (i32.const 75186) "a") (data (i32.const 75189) "a") (data (i32.const 75192) "a") (data (i32.const 75195) "a") (data (i32.const 75198) "a") (data (i32.const 75201) "a") (data (i32.const 75204) "a") (data (i32.const 75207) "a") (data (i32.const 75210) "a") (data (i32.const 75213) "a") (data (i32.const 75216) "a") (data (i32.const 75219) "a") (data (i32.const 75222) "a") (data (i32.const 75225) "a") (data (i32.const 75228) "a") (data (i32.const 75231) "a") (data (i32.const 75234) "a") (data (i32.const 75237) "a") (data (i32.const 75240) "a") (data (i32.const 75243) "a") (data (i32.const 75246) "a") (data (i32.const 75249) "a") (data (i32.const 75252) "a") (data (i32.const 75255) "a") (data (i32.const 75258) "a") (data (i32.const 75261) "a") (data (i32.const 75264) "a") (data (i32.const 75267) "a") (data (i32.const 75270) "a") (data (i32.const 75273) "a") (data (i32.const 75276) "a") (data (i32.const 75279) "a") (data (i32.const 75282) "a") (data (i32.const 75285) "a") (data (i32.const 75288) "a") (data (i32.const 75291) "a") (data (i32.const 75294) "a") (data (i32.const 75297) "a") (data (i32.const 75300) "a") (data (i32.const 75303) "a") (data (i32.const 75306) "a") (data (i32.const 75309) "a") (data (i32.const 75312) "a") (data (i32.const 75315) "a") (data (i32.const 75318) "a") (data (i32.const 75321) "a") (data (i32.const 75324) "a") (data (i32.const 75327) "a") (data (i32.const 75330) "a") (data (i32.const 75333) "a") (data (i32.const 75336) "a") (data (i32.const 75339) "a") (data (i32.const 75342) "a") (data (i32.const 75345) "a") (data (i32.const 75348) "a") (data (i32.const 75351) "a") (data (i32.const 75354) "a") (data (i32.const 75357) "a") (data (i32.const 75360) "a") (data (i32.const 75363) "a") (data (i32.const 75366) "a") (data (i32.const 75369) "a") (data (i32.const 75372) "a") (data (i32.const 75375) "a") (data (i32.const 75378) "a") (data (i32.const 75381) "a") (data (i32.const 75384) "a") (data (i32.const 75387) "a") (data (i32.const 75390) "a") (data (i32.const 75393) "a") (data (i32.const 75396) "a") (data (i32.const 75399) "a") (data (i32.const 75402) "a") (data (i32.const 75405) "a") (data (i32.const 75408) "a") (data (i32.const 75411) "a") (data (i32.const 75414) "a") (data (i32.const 75417) "a") (data (i32.const 75420) "a") (data (i32.const 75423) "a") (data (i32.const 75426) "a") (data (i32.const 75429) "a") (data (i32.const 75432) "a") (data (i32.const 75435) "a") (data (i32.const 75438) "a") (data (i32.const 75441) "a") (data (i32.const 75444) "a") (data (i32.const 75447) "a") (data (i32.const 75450) "a") (data (i32.const 75453) "a") (data (i32.const 75456) "a") (data (i32.const 75459) "a") (data (i32.const 75462) "a") (data (i32.const 75465) "a") (data (i32.const 75468) "a") (data (i32.const 75471) "a") (data (i32.const 75474) "a") (data (i32.const 75477) "a") (data (i32.const 75480) "a") (data (i32.const 75483) "a") (data (i32.const 75486) "a") (data (i32.const 75489) "a") (data (i32.const 75492) "a") (data (i32.const 75495) "a") (data (i32.const 75498) "a") (data (i32.const 75501) "a") (data (i32.const 75504) "a") (data (i32.const 75507) "a") (data (i32.const 75510) "a") (data (i32.const 75513) "a") (data (i32.const 75516) "a") (data (i32.const 75519) "a") (data (i32.const 75522) "a") (data (i32.const 75525) "a") (data (i32.const 75528) "a") (data (i32.const 75531) "a") (data (i32.const 75534) "a") (data (i32.const 75537) "a") (data (i32.const 75540) "a") (data (i32.const 75543) "a") (data (i32.const 75546) "a") (data (i32.const 75549) "a") (data (i32.const 75552) "a") (data (i32.const 75555) "a") (data (i32.const 75558) "a") (data (i32.const 75561) "a") (data (i32.const 75564) "a") (data (i32.const 75567) "a") (data (i32.const 75570) "a") (data (i32.const 75573) "a") (data (i32.const 75576) "a") (data (i32.const 75579) "a") (data (i32.const 75582) "a") (data (i32.const 75585) "a") (data (i32.const 75588) "a") (data (i32.const 75591) "a") (data (i32.const 75594) "a") (data (i32.const 75597) "a") (data (i32.const 75600) "a") (data (i32.const 75603) "a") (data (i32.const 75606) "a") (data (i32.const 75609) "a") (data (i32.const 75612) "a") (data (i32.const 75615) "a") (data (i32.const 75618) "a") (data (i32.const 75621) "a") (data (i32.const 75624) "a") (data (i32.const 75627) "a") (data (i32.const 75630) "a") (data (i32.const 75633) "a") (data (i32.const 75636) "a") (data (i32.const 75639) "a") (data (i32.const 75642) "a") (data (i32.const 75645) "a") (data (i32.const 75648) "a") (data (i32.const 75651) "a") (data (i32.const 75654) "a") (data (i32.const 75657) "a") (data (i32.const 75660) "a") (data (i32.const 75663) "a") (data (i32.const 75666) "a") (data (i32.const 75669) "a") (data (i32.const 75672) "a") (data (i32.const 75675) "a") (data (i32.const 75678) "a") (data (i32.const 75681) "a") (data (i32.const 75684) "a") (data (i32.const 75687) "a") (data (i32.const 75690) "a") (data (i32.const 75693) "a") (data (i32.const 75696) "a") (data (i32.const 75699) "a") (data (i32.const 75702) "a") (data (i32.const 75705) "a") (data (i32.const 75708) "a") (data (i32.const 75711) "a") (data (i32.const 75714) "a") (data (i32.const 75717) "a") (data (i32.const 75720) "a") (data (i32.const 75723) "a") (data (i32.const 75726) "a") (data (i32.const 75729) "a") (data (i32.const 75732) "a") (data (i32.const 75735) "a") (data (i32.const 75738) "a") (data (i32.const 75741) "a") (data (i32.const 75744) "a") (data (i32.const 75747) "a") (data (i32.const 75750) "a") (data (i32.const 75753) "a") (data (i32.const 75756) "a") (data (i32.const 75759) "a") (data (i32.const 75762) "a") (data (i32.const 75765) "a") (data (i32.const 75768) "a") (data (i32.const 75771) "a") (data (i32.const 75774) "a") (data (i32.const 75777) "a") (data (i32.const 75780) "a") (data (i32.const 75783) "a") (data (i32.const 75786) "a") (data (i32.const 75789) "a") (data (i32.const 75792) "a") (data (i32.const 75795) "a") (data (i32.const 75798) "a") (data (i32.const 75801) "a") (data (i32.const 75804) "a") (data (i32.const 75807) "a") (data (i32.const 75810) "a") (data (i32.const 75813) "a") (data (i32.const 75816) "a") (data (i32.const 75819) "a") (data (i32.const 75822) "a") (data (i32.const 75825) "a") (data (i32.const 75828) "a") (data (i32.const 75831) "a") (data (i32.const 75834) "a") (data (i32.const 75837) "a") (data (i32.const 75840) "a") (data (i32.const 75843) "a") (data (i32.const 75846) "a") (data (i32.const 75849) "a") (data (i32.const 75852) "a") (data (i32.const 75855) "a") (data (i32.const 75858) "a") (data (i32.const 75861) "a") (data (i32.const 75864) "a") (data (i32.const 75867) "a") (data (i32.const 75870) "a") (data (i32.const 75873) "a") (data (i32.const 75876) "a") (data (i32.const 75879) "a") (data (i32.const 75882) "a") (data (i32.const 75885) "a") (data (i32.const 75888) "a") (data (i32.const 75891) "a") (data (i32.const 75894) "a") (data (i32.const 75897) "a") (data (i32.const 75900) "a") (data (i32.const 75903) "a") (data (i32.const 75906) "a") (data (i32.const 75909) "a") (data (i32.const 75912) "a") (data (i32.const 75915) "a") (data (i32.const 75918) "a") (data (i32.const 75921) "a") (data (i32.const 75924) "a") (data (i32.const 75927) "a") (data (i32.const 75930) "a") (data (i32.const 75933) "a") (data (i32.const 75936) "a") (data (i32.const 75939) "a") (data (i32.const 75942) "a") (data (i32.const 75945) "a") (data (i32.const 75948) "a") (data (i32.const 75951) "a") (data (i32.const 75954) "a") (data (i32.const 75957) "a") (data (i32.const 75960) "a") (data (i32.const 75963) "a") (data (i32.const 75966) "a") (data (i32.const 75969) "a") (data (i32.const 75972) "a") (data (i32.const 75975) "a") (data (i32.const 75978) "a") (data (i32.const 75981) "a") (data (i32.const 75984) "a") (data (i32.const 75987) "a") (data (i32.const 75990) "a") (data (i32.const 75993) "a") (data (i32.const 75996) "a") (data (i32.const 75999) "a") (data (i32.const 76002) "a") (data (i32.const 76005) "a") (data (i32.const 76008) "a") (data (i32.const 76011) "a") (data (i32.const 76014) "a") (data (i32.const 76017) "a") (data (i32.const 76020) "a") (data (i32.const 76023) "a") (data (i32.const 76026) "a") (data (i32.const 76029) "a") (data (i32.const 76032) "a") (data (i32.const 76035) "a") (data (i32.const 76038) "a") (data (i32.const 76041) "a") (data (i32.const 76044) "a") (data (i32.const 76047) "a") (data (i32.const 76050) "a") (data (i32.const 76053) "a") (data (i32.const 76056) "a") (data (i32.const 76059) "a") (data (i32.const 76062) "a") (data (i32.const 76065) "a") (data (i32.const 76068) "a") (data (i32.const 76071) "a") (data (i32.const 76074) "a") (data (i32.const 76077) "a") (data (i32.const 76080) "a") (data (i32.const 76083) "a") (data (i32.const 76086) "a") (data (i32.const 76089) "a") (data (i32.const 76092) "a") (data (i32.const 76095) "a") (data (i32.const 76098) "a") (data (i32.const 76101) "a") (data (i32.const 76104) "a") (data (i32.const 76107) "a") (data (i32.const 76110) "a") (data (i32.const 76113) "a") (data (i32.const 76116) "a") (data (i32.const 76119) "a") (data (i32.const 76122) "a") (data (i32.const 76125) "a") (data (i32.const 76128) "a") (data (i32.const 76131) "a") (data (i32.const 76134) "a") (data (i32.const 76137) "a") (data (i32.const 76140) "a") (data (i32.const 76143) "a") (data (i32.const 76146) "a") (data (i32.const 76149) "a") (data (i32.const 76152) "a") (data (i32.const 76155) "a") (data (i32.const 76158) "a") (data (i32.const 76161) "a") (data (i32.const 76164) "a") (data (i32.const 76167) "a") (data (i32.const 76170) "a") (data (i32.const 76173) "a") (data (i32.const 76176) "a") (data (i32.const 76179) "a") (data (i32.const 76182) "a") (data (i32.const 76185) "a") (data (i32.const 76188) "a") (data (i32.const 76191) "a") (data (i32.const 76194) "a") (data (i32.const 76197) "a") (data (i32.const 76200) "a") (data (i32.const 76203) "a") (data (i32.const 76206) "a") (data (i32.const 76209) "a") (data (i32.const 76212) "a") (data (i32.const 76215) "a") (data (i32.const 76218) "a") (data (i32.const 76221) "a") (data (i32.const 76224) "a") (data (i32.const 76227) "a") (data (i32.const 76230) "a") (data (i32.const 76233) "a") (data (i32.const 76236) "a") (data (i32.const 76239) "a") (data (i32.const 76242) "a") (data (i32.const 76245) "a") (data (i32.const 76248) "a") (data (i32.const 76251) "a") (data (i32.const 76254) "a") (data (i32.const 76257) "a") (data (i32.const 76260) "a") (data (i32.const 76263) "a") (data (i32.const 76266) "a") (data (i32.const 76269) "a") (data (i32.const 76272) "a") (data (i32.const 76275) "a") (data (i32.const 76278) "a") (data (i32.const 76281) "a") (data (i32.const 76284) "a") (data (i32.const 76287) "a") (data (i32.const 76290) "a") (data (i32.const 76293) "a") (data (i32.const 76296) "a") (data (i32.const 76299) "a") (data (i32.const 76302) "a") (data (i32.const 76305) "a") (data (i32.const 76308) "a") (data (i32.const 76311) "a") (data (i32.const 76314) "a") (data (i32.const 76317) "a") (data (i32.const 76320) "a") (data (i32.const 76323) "a") (data (i32.const 76326) "a") (data (i32.const 76329) "a") (data (i32.const 76332) "a") (data (i32.const 76335) "a") (data (i32.const 76338) "a") (data (i32.const 76341) "a") (data (i32.const 76344) "a") (data (i32.const 76347) "a") (data (i32.const 76350) "a") (data (i32.const 76353) "a") (data (i32.const 76356) "a") (data (i32.const 76359) "a") (data (i32.const 76362) "a") (data (i32.const 76365) "a") (data (i32.const 76368) "a") (data (i32.const 76371) "a") (data (i32.const 76374) "a") (data (i32.const 76377) "a") (data (i32.const 76380) "a") (data (i32.const 76383) "a") (data (i32.const 76386) "a") (data (i32.const 76389) "a") (data (i32.const 76392) "a") (data (i32.const 76395) "a") (data (i32.const 76398) "a") (data (i32.const 76401) "a") (data (i32.const 76404) "a") (data (i32.const 76407) "a") (data (i32.const 76410) "a") (data (i32.const 76413) "a") (data (i32.const 76416) "a") (data (i32.const 76419) "a") (data (i32.const 76422) "a") (data (i32.const 76425) "a") (data (i32.const 76428) "a") (data (i32.const 76431) "a") (data (i32.const 76434) "a") (data (i32.const 76437) "a") (data (i32.const 76440) "a") (data (i32.const 76443) "a") (data (i32.const 76446) "a") (data (i32.const 76449) "a") (data (i32.const 76452) "a") (data (i32.const 76455) "a") (data (i32.const 76458) "a") (data (i32.const 76461) "a") (data (i32.const 76464) "a") (data (i32.const 76467) "a") (data (i32.const 76470) "a") (data (i32.const 76473) "a") (data (i32.const 76476) "a") (data (i32.const 76479) "a") (data (i32.const 76482) "a") (data (i32.const 76485) "a") (data (i32.const 76488) "a") (data (i32.const 76491) "a") (data (i32.const 76494) "a") (data (i32.const 76497) "a") (data (i32.const 76500) "a") (data (i32.const 76503) "a") (data (i32.const 76506) "a") (data (i32.const 76509) "a") (data (i32.const 76512) "a") (data (i32.const 76515) "a") (data (i32.const 76518) "a") (data (i32.const 76521) "a") (data (i32.const 76524) "a") (data (i32.const 76527) "a") (data (i32.const 76530) "a") (data (i32.const 76533) "a") (data (i32.const 76536) "a") (data (i32.const 76539) "a") (data (i32.const 76542) "a") (data (i32.const 76545) "a") (data (i32.const 76548) "a") (data (i32.const 76551) "a") (data (i32.const 76554) "a") (data (i32.const 76557) "a") (data (i32.const 76560) "a") (data (i32.const 76563) "a") (data (i32.const 76566) "a") (data (i32.const 76569) "a") (data (i32.const 76572) "a") (data (i32.const 76575) "a") (data (i32.const 76578) "a") (data (i32.const 76581) "a") (data (i32.const 76584) "a") (data (i32.const 76587) "a") (data (i32.const 76590) "a") (data (i32.const 76593) "a") (data (i32.const 76596) "a") (data (i32.const 76599) "a") (data (i32.const 76602) "a") (data (i32.const 76605) "a") (data (i32.const 76608) "a") (data (i32.const 76611) "a") (data (i32.const 76614) "a") (data (i32.const 76617) "a") (data (i32.const 76620) "a") (data (i32.const 76623) "a") (data (i32.const 76626) "a") (data (i32.const 76629) "a") (data (i32.const 76632) "a") (data (i32.const 76635) "a") (data (i32.const 76638) "a") (data (i32.const 76641) "a") (data (i32.const 76644) "a") (data (i32.const 76647) "a") (data (i32.const 76650) "a") (data (i32.const 76653) "a") (data (i32.const 76656) "a") (data (i32.const 76659) "a") (data (i32.const 76662) "a") (data (i32.const 76665) "a") (data (i32.const 76668) "a") (data (i32.const 76671) "a") (data (i32.const 76674) "a") (data (i32.const 76677) "a") (data (i32.const 76680) "a") (data (i32.const 76683) "a") (data (i32.const 76686) "a") (data (i32.const 76689) "a") (data (i32.const 76692) "a") (data (i32.const 76695) "a") (data (i32.const 76698) "a") (data (i32.const 76701) "a") (data (i32.const 76704) "a") (data (i32.const 76707) "a") (data (i32.const 76710) "a") (data (i32.const 76713) "a") (data (i32.const 76716) "a") (data (i32.const 76719) "a") (data (i32.const 76722) "a") (data (i32.const 76725) "a") (data (i32.const 76728) "a") (data (i32.const 76731) "a") (data (i32.const 76734) "a") (data (i32.const 76737) "a") (data (i32.const 76740) "a") (data (i32.const 76743) "a") (data (i32.const 76746) "a") (data (i32.const 76749) "a") (data (i32.const 76752) "a") (data (i32.const 76755) "a") (data (i32.const 76758) "a") (data (i32.const 76761) "a") (data (i32.const 76764) "a") (data (i32.const 76767) "a") (data (i32.const 76770) "a") (data (i32.const 76773) "a") (data (i32.const 76776) "a") (data (i32.const 76779) "a") (data (i32.const 76782) "a") (data (i32.const 76785) "a") (data (i32.const 76788) "a") (data (i32.const 76791) "a") (data (i32.const 76794) "a") (data (i32.const 76797) "a") (data (i32.const 76800) "a") (data (i32.const 76803) "a") (data (i32.const 76806) "a") (data (i32.const 76809) "a") (data (i32.const 76812) "a") (data (i32.const 76815) "a") (data (i32.const 76818) "a") (data (i32.const 76821) "a") (data (i32.const 76824) "a") (data (i32.const 76827) "a") (data (i32.const 76830) "a") (data (i32.const 76833) "a") (data (i32.const 76836) "a") (data (i32.const 76839) "a") (data (i32.const 76842) "a") (data (i32.const 76845) "a") (data (i32.const 76848) "a") (data (i32.const 76851) "a") (data (i32.const 76854) "a") (data (i32.const 76857) "a") (data (i32.const 76860) "a") (data (i32.const 76863) "a") (data (i32.const 76866) "a") (data (i32.const 76869) "a") (data (i32.const 76872) "a") (data (i32.const 76875) "a") (data (i32.const 76878) "a") (data (i32.const 76881) "a") (data (i32.const 76884) "a") (data (i32.const 76887) "a") (data (i32.const 76890) "a") (data (i32.const 76893) "a") (data (i32.const 76896) "a") (data (i32.const 76899) "a") (data (i32.const 76902) "a") (data (i32.const 76905) "a") (data (i32.const 76908) "a") (data (i32.const 76911) "a") (data (i32.const 76914) "a") (data (i32.const 76917) "a") (data (i32.const 76920) "a") (data (i32.const 76923) "a") (data (i32.const 76926) "a") (data (i32.const 76929) "a") (data (i32.const 76932) "a") (data (i32.const 76935) "a") (data (i32.const 76938) "a") (data (i32.const 76941) "a") (data (i32.const 76944) "a") (data (i32.const 76947) "a") (data (i32.const 76950) "a") (data (i32.const 76953) "a") (data (i32.const 76956) "a") (data (i32.const 76959) "a") (data (i32.const 76962) "a") (data (i32.const 76965) "a") (data (i32.const 76968) "a") (data (i32.const 76971) "a") (data (i32.const 76974) "a") (data (i32.const 76977) "a") (data (i32.const 76980) "a") (data (i32.const 76983) "a") (data (i32.const 76986) "a") (data (i32.const 76989) "a") (data (i32.const 76992) "a") (data (i32.const 76995) "a") (data (i32.const 76998) "a") (data (i32.const 77001) "a") (data (i32.const 77004) "a") (data (i32.const 77007) "a") (data (i32.const 77010) "a") (data (i32.const 77013) "a") (data (i32.const 77016) "a") (data (i32.const 77019) "a") (data (i32.const 77022) "a") (data (i32.const 77025) "a") (data (i32.const 77028) "a") (data (i32.const 77031) "a") (data (i32.const 77034) "a") (data (i32.const 77037) "a") (data (i32.const 77040) "a") (data (i32.const 77043) "a") (data (i32.const 77046) "a") (data (i32.const 77049) "a") (data (i32.const 77052) "a") (data (i32.const 77055) "a") (data (i32.const 77058) "a") (data (i32.const 77061) "a") (data (i32.const 77064) "a") (data (i32.const 77067) "a") (data (i32.const 77070) "a") (data (i32.const 77073) "a") (data (i32.const 77076) "a") (data (i32.const 77079) "a") (data (i32.const 77082) "a") (data (i32.const 77085) "a") (data (i32.const 77088) "a") (data (i32.const 77091) "a") (data (i32.const 77094) "a") (data (i32.const 77097) "a") (data (i32.const 77100) "a") (data (i32.const 77103) "a") (data (i32.const 77106) "a") (data (i32.const 77109) "a") (data (i32.const 77112) "a") (data (i32.const 77115) "a") (data (i32.const 77118) "a") (data (i32.const 77121) "a") (data (i32.const 77124) "a") (data (i32.const 77127) "a") (data (i32.const 77130) "a") (data (i32.const 77133) "a") (data (i32.const 77136) "a") (data (i32.const 77139) "a") (data (i32.const 77142) "a") (data (i32.const 77145) "a") (data (i32.const 77148) "a") (data (i32.const 77151) "a") (data (i32.const 77154) "a") (data (i32.const 77157) "a") (data (i32.const 77160) "a") (data (i32.const 77163) "a") (data (i32.const 77166) "a") (data (i32.const 77169) "a") (data (i32.const 77172) "a") (data (i32.const 77175) "a") (data (i32.const 77178) "a") (data (i32.const 77181) "a") (data (i32.const 77184) "a") (data (i32.const 77187) "a") (data (i32.const 77190) "a") (data (i32.const 77193) "a") (data (i32.const 77196) "a") (data (i32.const 77199) "a") (data (i32.const 77202) "a") (data (i32.const 77205) "a") (data (i32.const 77208) "a") (data (i32.const 77211) "a") (data (i32.const 77214) "a") (data (i32.const 77217) "a") (data (i32.const 77220) "a") (data (i32.const 77223) "a") (data (i32.const 77226) "a") (data (i32.const 77229) "a") (data (i32.const 77232) "a") (data (i32.const 77235) "a") (data (i32.const 77238) "a") (data (i32.const 77241) "a") (data (i32.const 77244) "a") (data (i32.const 77247) "a") (data (i32.const 77250) "a") (data (i32.const 77253) "a") (data (i32.const 77256) "a") (data (i32.const 77259) "a") (data (i32.const 77262) "a") (data (i32.const 77265) "a") (data (i32.const 77268) "a") (data (i32.const 77271) "a") (data (i32.const 77274) "a") (data (i32.const 77277) "a") (data (i32.const 77280) "a") (data (i32.const 77283) "a") (data (i32.const 77286) "a") (data (i32.const 77289) "a") (data (i32.const 77292) "a") (data (i32.const 77295) "a") (data (i32.const 77298) "a") (data (i32.const 77301) "a") (data (i32.const 77304) "a") (data (i32.const 77307) "a") (data (i32.const 77310) "a") (data (i32.const 77313) "a") (data (i32.const 77316) "a") (data (i32.const 77319) "a") (data (i32.const 77322) "a") (data (i32.const 77325) "a") (data (i32.const 77328) "a") (data (i32.const 77331) "a") (data (i32.const 77334) "a") (data (i32.const 77337) "a") (data (i32.const 77340) "a") (data (i32.const 77343) "a") (data (i32.const 77346) "a") (data (i32.const 77349) "a") (data (i32.const 77352) "a") (data (i32.const 77355) "a") (data (i32.const 77358) "a") (data (i32.const 77361) "a") (data (i32.const 77364) "a") (data (i32.const 77367) "a") (data (i32.const 77370) "a") (data (i32.const 77373) "a") (data (i32.const 77376) "a") (data (i32.const 77379) "a") (data (i32.const 77382) "a") (data (i32.const 77385) "a") (data (i32.const 77388) "a") (data (i32.const 77391) "a") (data (i32.const 77394) "a") (data (i32.const 77397) "a") (data (i32.const 77400) "a") (data (i32.const 77403) "a") (data (i32.const 77406) "a") (data (i32.const 77409) "a") (data (i32.const 77412) "a") (data (i32.const 77415) "a") (data (i32.const 77418) "a") (data (i32.const 77421) "a") (data (i32.const 77424) "a") (data (i32.const 77427) "a") (data (i32.const 77430) "a") (data (i32.const 77433) "a") (data (i32.const 77436) "a") (data (i32.const 77439) "a") (data (i32.const 77442) "a") (data (i32.const 77445) "a") (data (i32.const 77448) "a") (data (i32.const 77451) "a") (data (i32.const 77454) "a") (data (i32.const 77457) "a") (data (i32.const 77460) "a") (data (i32.const 77463) "a") (data (i32.const 77466) "a") (data (i32.const 77469) "a") (data (i32.const 77472) "a") (data (i32.const 77475) "a") (data (i32.const 77478) "a") (data (i32.const 77481) "a") (data (i32.const 77484) "a") (data (i32.const 77487) "a") (data (i32.const 77490) "a") (data (i32.const 77493) "a") (data (i32.const 77496) "a") (data (i32.const 77499) "a") (data (i32.const 77502) "a") (data (i32.const 77505) "a") (data (i32.const 77508) "a") (data (i32.const 77511) "a") (data (i32.const 77514) "a") (data (i32.const 77517) "a") (data (i32.const 77520) "a") (data (i32.const 77523) "a") (data (i32.const 77526) "a") (data (i32.const 77529) "a") (data (i32.const 77532) "a") (data (i32.const 77535) "a") (data (i32.const 77538) "a") (data (i32.const 77541) "a") (data (i32.const 77544) "a") (data (i32.const 77547) "a") (data (i32.const 77550) "a") (data (i32.const 77553) "a") (data (i32.const 77556) "a") (data (i32.const 77559) "a") (data (i32.const 77562) "a") (data (i32.const 77565) "a") (data (i32.const 77568) "a") (data (i32.const 77571) "a") (data (i32.const 77574) "a") (data (i32.const 77577) "a") (data (i32.const 77580) "a") (data (i32.const 77583) "a") (data (i32.const 77586) "a") (data (i32.const 77589) "a") (data (i32.const 77592) "a") (data (i32.const 77595) "a") (data (i32.const 77598) "a") (data (i32.const 77601) "a") (data (i32.const 77604) "a") (data (i32.const 77607) "a") (data (i32.const 77610) "a") (data (i32.const 77613) "a") (data (i32.const 77616) "a") (data (i32.const 77619) "a") (data (i32.const 77622) "a") (data (i32.const 77625) "a") (data (i32.const 77628) "a") (data (i32.const 77631) "a") (data (i32.const 77634) "a") (data (i32.const 77637) "a") (data (i32.const 77640) "a") (data (i32.const 77643) "a") (data (i32.const 77646) "a") (data (i32.const 77649) "a") (data (i32.const 77652) "a") (data (i32.const 77655) "a") (data (i32.const 77658) "a") (data (i32.const 77661) "a") (data (i32.const 77664) "a") (data (i32.const 77667) "a") (data (i32.const 77670) "a") (data (i32.const 77673) "a") (data (i32.const 77676) "a") (data (i32.const 77679) "a") (data (i32.const 77682) "a") (data (i32.const 77685) "a") (data (i32.const 77688) "a") (data (i32.const 77691) "a") (data (i32.const 77694) "a") (data (i32.const 77697) "a") (data (i32.const 77700) "a") (data (i32.const 77703) "a") (data (i32.const 77706) "a") (data (i32.const 77709) "a") (data (i32.const 77712) "a") (data (i32.const 77715) "a") (data (i32.const 77718) "a") (data (i32.const 77721) "a") (data (i32.const 77724) "a") (data (i32.const 77727) "a") (data (i32.const 77730) "a") (data (i32.const 77733) "a") (data (i32.const 77736) "a") (data (i32.const 77739) "a") (data (i32.const 77742) "a") (data (i32.const 77745) "a") (data (i32.const 77748) "a") (data (i32.const 77751) "a") (data (i32.const 77754) "a") (data (i32.const 77757) "a") (data (i32.const 77760) "a") (data (i32.const 77763) "a") (data (i32.const 77766) "a") (data (i32.const 77769) "a") (data (i32.const 77772) "a") (data (i32.const 77775) "a") (data (i32.const 77778) "a") (data (i32.const 77781) "a") (data (i32.const 77784) "a") (data (i32.const 77787) "a") (data (i32.const 77790) "a") (data (i32.const 77793) "a") (data (i32.const 77796) "a") (data (i32.const 77799) "a") (data (i32.const 77802) "a") (data (i32.const 77805) "a") (data (i32.const 77808) "a") (data (i32.const 77811) "a") (data (i32.const 77814) "a") (data (i32.const 77817) "a") (data (i32.const 77820) "a") (data (i32.const 77823) "a") (data (i32.const 77826) "a") (data (i32.const 77829) "a") (data (i32.const 77832) "a") (data (i32.const 77835) "a") (data (i32.const 77838) "a") (data (i32.const 77841) "a") (data (i32.const 77844) "a") (data (i32.const 77847) "a") (data (i32.const 77850) "a") (data (i32.const 77853) "a") (data (i32.const 77856) "a") (data (i32.const 77859) "a") (data (i32.const 77862) "a") (data (i32.const 77865) "a") (data (i32.const 77868) "a") (data (i32.const 77871) "a") (data (i32.const 77874) "a") (data (i32.const 77877) "a") (data (i32.const 77880) "a") (data (i32.const 77883) "a") (data (i32.const 77886) "a") (data (i32.const 77889) "a") (data (i32.const 77892) "a") (data (i32.const 77895) "a") (data (i32.const 77898) "a") (data (i32.const 77901) "a") (data (i32.const 77904) "a") (data (i32.const 77907) "a") (data (i32.const 77910) "a") (data (i32.const 77913) "a") (data (i32.const 77916) "a") (data (i32.const 77919) "a") (data (i32.const 77922) "a") (data (i32.const 77925) "a") (data (i32.const 77928) "a") (data (i32.const 77931) "a") (data (i32.const 77934) "a") (data (i32.const 77937) "a") (data (i32.const 77940) "a") (data (i32.const 77943) "a") (data (i32.const 77946) "a") (data (i32.const 77949) "a") (data (i32.const 77952) "a") (data (i32.const 77955) "a") (data (i32.const 77958) "a") (data (i32.const 77961) "a") (data (i32.const 77964) "a") (data (i32.const 77967) "a") (data (i32.const 77970) "a") (data (i32.const 77973) "a") (data (i32.const 77976) "a") (data (i32.const 77979) "a") (data (i32.const 77982) "a") (data (i32.const 77985) "a") (data (i32.const 77988) "a") (data (i32.const 77991) "a") (data (i32.const 77994) "a") (data (i32.const 77997) "a") (data (i32.const 78000) "a") (data (i32.const 78003) "a") (data (i32.const 78006) "a") (data (i32.const 78009) "a") (data (i32.const 78012) "a") (data (i32.const 78015) "a") (data (i32.const 78018) "a") (data (i32.const 78021) "a") (data (i32.const 78024) "a") (data (i32.const 78027) "a") (data (i32.const 78030) "a") (data (i32.const 78033) "a") (data (i32.const 78036) "a") (data (i32.const 78039) "a") (data (i32.const 78042) "a") (data (i32.const 78045) "a") (data (i32.const 78048) "a") (data (i32.const 78051) "a") (data (i32.const 78054) "a") (data (i32.const 78057) "a") (data (i32.const 78060) "a") (data (i32.const 78063) "a") (data (i32.const 78066) "a") (data (i32.const 78069) "a") (data (i32.const 78072) "a") (data (i32.const 78075) "a") (data (i32.const 78078) "a") (data (i32.const 78081) "a") (data (i32.const 78084) "a") (data (i32.const 78087) "a") (data (i32.const 78090) "a") (data (i32.const 78093) "a") (data (i32.const 78096) "a") (data (i32.const 78099) "a") (data (i32.const 78102) "a") (data (i32.const 78105) "a") (data (i32.const 78108) "a") (data (i32.const 78111) "a") (data (i32.const 78114) "a") (data (i32.const 78117) "a") (data (i32.const 78120) "a") (data (i32.const 78123) "a") (data (i32.const 78126) "a") (data (i32.const 78129) "a") (data (i32.const 78132) "a") (data (i32.const 78135) "a") (data (i32.const 78138) "a") (data (i32.const 78141) "a") (data (i32.const 78144) "a") (data (i32.const 78147) "a") (data (i32.const 78150) "a") (data (i32.const 78153) "a") (data (i32.const 78156) "a") (data (i32.const 78159) "a") (data (i32.const 78162) "a") (data (i32.const 78165) "a") (data (i32.const 78168) "a") (data (i32.const 78171) "a") (data (i32.const 78174) "a") (data (i32.const 78177) "a") (data (i32.const 78180) "a") (data (i32.const 78183) "a") (data (i32.const 78186) "a") (data (i32.const 78189) "a") (data (i32.const 78192) "a") (data (i32.const 78195) "a") (data (i32.const 78198) "a") (data (i32.const 78201) "a") (data (i32.const 78204) "a") (data (i32.const 78207) "a") (data (i32.const 78210) "a") (data (i32.const 78213) "a") (data (i32.const 78216) "a") (data (i32.const 78219) "a") (data (i32.const 78222) "a") (data (i32.const 78225) "a") (data (i32.const 78228) "a") (data (i32.const 78231) "a") (data (i32.const 78234) "a") (data (i32.const 78237) "a") (data (i32.const 78240) "a") (data (i32.const 78243) "a") (data (i32.const 78246) "a") (data (i32.const 78249) "a") (data (i32.const 78252) "a") (data (i32.const 78255) "a") (data (i32.const 78258) "a") (data (i32.const 78261) "a") (data (i32.const 78264) "a") (data (i32.const 78267) "a") (data (i32.const 78270) "a") (data (i32.const 78273) "a") (data (i32.const 78276) "a") (data (i32.const 78279) "a") (data (i32.const 78282) "a") (data (i32.const 78285) "a") (data (i32.const 78288) "a") (data (i32.const 78291) "a") (data (i32.const 78294) "a") (data (i32.const 78297) "a") (data (i32.const 78300) "a") (data (i32.const 78303) "a") (data (i32.const 78306) "a") (data (i32.const 78309) "a") (data (i32.const 78312) "a") (data (i32.const 78315) "a") (data (i32.const 78318) "a") (data (i32.const 78321) "a") (data (i32.const 78324) "a") (data (i32.const 78327) "a") (data (i32.const 78330) "a") (data (i32.const 78333) "a") (data (i32.const 78336) "a") (data (i32.const 78339) "a") (data (i32.const 78342) "a") (data (i32.const 78345) "a") (data (i32.const 78348) "a") (data (i32.const 78351) "a") (data (i32.const 78354) "a") (data (i32.const 78357) "a") (data (i32.const 78360) "a") (data (i32.const 78363) "a") (data (i32.const 78366) "a") (data (i32.const 78369) "a") (data (i32.const 78372) "a") (data (i32.const 78375) "a") (data (i32.const 78378) "a") (data (i32.const 78381) "a") (data (i32.const 78384) "a") (data (i32.const 78387) "a") (data (i32.const 78390) "a") (data (i32.const 78393) "a") (data (i32.const 78396) "a") (data (i32.const 78399) "a") (data (i32.const 78402) "a") (data (i32.const 78405) "a") (data (i32.const 78408) "a") (data (i32.const 78411) "a") (data (i32.const 78414) "a") (data (i32.const 78417) "a") (data (i32.const 78420) "a") (data (i32.const 78423) "a") (data (i32.const 78426) "a") (data (i32.const 78429) "a") (data (i32.const 78432) "a") (data (i32.const 78435) "a") (data (i32.const 78438) "a") (data (i32.const 78441) "a") (data (i32.const 78444) "a") (data (i32.const 78447) "a") (data (i32.const 78450) "a") (data (i32.const 78453) "a") (data (i32.const 78456) "a") (data (i32.const 78459) "a") (data (i32.const 78462) "a") (data (i32.const 78465) "a") (data (i32.const 78468) "a") (data (i32.const 78471) "a") (data (i32.const 78474) "a") (data (i32.const 78477) "a") (data (i32.const 78480) "a") (data (i32.const 78483) "a") (data (i32.const 78486) "a") (data (i32.const 78489) "a") (data (i32.const 78492) "a") (data (i32.const 78495) "a") (data (i32.const 78498) "a") (data (i32.const 78501) "a") (data (i32.const 78504) "a") (data (i32.const 78507) "a") (data (i32.const 78510) "a") (data (i32.const 78513) "a") (data (i32.const 78516) "a") (data (i32.const 78519) "a") (data (i32.const 78522) "a") (data (i32.const 78525) "a") (data (i32.const 78528) "a") (data (i32.const 78531) "a") (data (i32.const 78534) "a") (data (i32.const 78537) "a") (data (i32.const 78540) "a") (data (i32.const 78543) "a") (data (i32.const 78546) "a") (data (i32.const 78549) "a") (data (i32.const 78552) "a") (data (i32.const 78555) "a") (data (i32.const 78558) "a") (data (i32.const 78561) "a") (data (i32.const 78564) "a") (data (i32.const 78567) "a") (data (i32.const 78570) "a") (data (i32.const 78573) "a") (data (i32.const 78576) "a") (data (i32.const 78579) "a") (data (i32.const 78582) "a") (data (i32.const 78585) "a") (data (i32.const 78588) "a") (data (i32.const 78591) "a") (data (i32.const 78594) "a") (data (i32.const 78597) "a") (data (i32.const 78600) "a") (data (i32.const 78603) "a") (data (i32.const 78606) "a") (data (i32.const 78609) "a") (data (i32.const 78612) "a") (data (i32.const 78615) "a") (data (i32.const 78618) "a") (data (i32.const 78621) "a") (data (i32.const 78624) "a") (data (i32.const 78627) "a") (data (i32.const 78630) "a") (data (i32.const 78633) "a") (data (i32.const 78636) "a") (data (i32.const 78639) "a") (data (i32.const 78642) "a") (data (i32.const 78645) "a") (data (i32.const 78648) "a") (data (i32.const 78651) "a") (data (i32.const 78654) "a") (data (i32.const 78657) "a") (data (i32.const 78660) "a") (data (i32.const 78663) "a") (data (i32.const 78666) "a") (data (i32.const 78669) "a") (data (i32.const 78672) "a") (data (i32.const 78675) "a") (data (i32.const 78678) "a") (data (i32.const 78681) "a") (data (i32.const 78684) "a") (data (i32.const 78687) "a") (data (i32.const 78690) "a") (data (i32.const 78693) "a") (data (i32.const 78696) "a") (data (i32.const 78699) "a") (data (i32.const 78702) "a") (data (i32.const 78705) "a") (data (i32.const 78708) "a") (data (i32.const 78711) "a") (data (i32.const 78714) "a") (data (i32.const 78717) "a") (data (i32.const 78720) "a") (data (i32.const 78723) "a") (data (i32.const 78726) "a") (data (i32.const 78729) "a") (data (i32.const 78732) "a") (data (i32.const 78735) "a") (data (i32.const 78738) "a") (data (i32.const 78741) "a") (data (i32.const 78744) "a") (data (i32.const 78747) "a") (data (i32.const 78750) "a") (data (i32.const 78753) "a") (data (i32.const 78756) "a") (data (i32.const 78759) "a") (data (i32.const 78762) "a") (data (i32.const 78765) "a") (data (i32.const 78768) "a") (data (i32.const 78771) "a") (data (i32.const 78774) "a") (data (i32.const 78777) "a") (data (i32.const 78780) "a") (data (i32.const 78783) "a") (data (i32.const 78786) "a") (data (i32.const 78789) "a") (data (i32.const 78792) "a") (data (i32.const 78795) "a") (data (i32.const 78798) "a") (data (i32.const 78801) "a") (data (i32.const 78804) "a") (data (i32.const 78807) "a") (data (i32.const 78810) "a") (data (i32.const 78813) "a") (data (i32.const 78816) "a") (data (i32.const 78819) "a") (data (i32.const 78822) "a") (data (i32.const 78825) "a") (data (i32.const 78828) "a") (data (i32.const 78831) "a") (data (i32.const 78834) "a") (data (i32.const 78837) "a") (data (i32.const 78840) "a") (data (i32.const 78843) "a") (data (i32.const 78846) "a") (data (i32.const 78849) "a") (data (i32.const 78852) "a") (data (i32.const 78855) "a") (data (i32.const 78858) "a") (data (i32.const 78861) "a") (data (i32.const 78864) "a") (data (i32.const 78867) "a") (data (i32.const 78870) "a") (data (i32.const 78873) "a") (data (i32.const 78876) "a") (data (i32.const 78879) "a") (data (i32.const 78882) "a") (data (i32.const 78885) "a") (data (i32.const 78888) "a") (data (i32.const 78891) "a") (data (i32.const 78894) "a") (data (i32.const 78897) "a") (data (i32.const 78900) "a") (data (i32.const 78903) "a") (data (i32.const 78906) "a") (data (i32.const 78909) "a") (data (i32.const 78912) "a") (data (i32.const 78915) "a") (data (i32.const 78918) "a") (data (i32.const 78921) "a") (data (i32.const 78924) "a") (data (i32.const 78927) "a") (data (i32.const 78930) "a") (data (i32.const 78933) "a") (data (i32.const 78936) "a") (data (i32.const 78939) "a") (data (i32.const 78942) "a") (data (i32.const 78945) "a") (data (i32.const 78948) "a") (data (i32.const 78951) "a") (data (i32.const 78954) "a") (data (i32.const 78957) "a") (data (i32.const 78960) "a") (data (i32.const 78963) "a") (data (i32.const 78966) "a") (data (i32.const 78969) "a") (data (i32.const 78972) "a") (data (i32.const 78975) "a") (data (i32.const 78978) "a") (data (i32.const 78981) "a") (data (i32.const 78984) "a") (data (i32.const 78987) "a") (data (i32.const 78990) "a") (data (i32.const 78993) "a") (data (i32.const 78996) "a") (data (i32.const 78999) "a") (data (i32.const 79002) "a") (data (i32.const 79005) "a") (data (i32.const 79008) "a") (data (i32.const 79011) "a") (data (i32.const 79014) "a") (data (i32.const 79017) "a") (data (i32.const 79020) "a") (data (i32.const 79023) "a") (data (i32.const 79026) "a") (data (i32.const 79029) "a") (data (i32.const 79032) "a") (data (i32.const 79035) "a") (data (i32.const 79038) "a") (data (i32.const 79041) "a") (data (i32.const 79044) "a") (data (i32.const 79047) "a") (data (i32.const 79050) "a") (data (i32.const 79053) "a") (data (i32.const 79056) "a") (data (i32.const 79059) "a") (data (i32.const 79062) "a") (data (i32.const 79065) "a") (data (i32.const 79068) "a") (data (i32.const 79071) "a") (data (i32.const 79074) "a") (data (i32.const 79077) "a") (data (i32.const 79080) "a") (data (i32.const 79083) "a") (data (i32.const 79086) "a") (data (i32.const 79089) "a") (data (i32.const 79092) "a") (data (i32.const 79095) "a") (data (i32.const 79098) "a") (data (i32.const 79101) "a") (data (i32.const 79104) "a") (data (i32.const 79107) "a") (data (i32.const 79110) "a") (data (i32.const 79113) "a") (data (i32.const 79116) "a") (data (i32.const 79119) "a") (data (i32.const 79122) "a") (data (i32.const 79125) "a") (data (i32.const 79128) "a") (data (i32.const 79131) "a") (data (i32.const 79134) "a") (data (i32.const 79137) "a") (data (i32.const 79140) "a") (data (i32.const 79143) "a") (data (i32.const 79146) "a") (data (i32.const 79149) "a") (data (i32.const 79152) "a") (data (i32.const 79155) "a") (data (i32.const 79158) "a") (data (i32.const 79161) "a") (data (i32.const 79164) "a") (data (i32.const 79167) "a") (data (i32.const 79170) "a") (data (i32.const 79173) "a") (data (i32.const 79176) "a") (data (i32.const 79179) "a") (data (i32.const 79182) "a") (data (i32.const 79185) "a") (data (i32.const 79188) "a") (data (i32.const 79191) "a") (data (i32.const 79194) "a") (data (i32.const 79197) "a") (data (i32.const 79200) "a") (data (i32.const 79203) "a") (data (i32.const 79206) "a") (data (i32.const 79209) "a") (data (i32.const 79212) "a") (data (i32.const 79215) "a") (data (i32.const 79218) "a") (data (i32.const 79221) "a") (data (i32.const 79224) "a") (data (i32.const 79227) "a") (data (i32.const 79230) "a") (data (i32.const 79233) "a") (data (i32.const 79236) "a") (data (i32.const 79239) "a") (data (i32.const 79242) "a") (data (i32.const 79245) "a") (data (i32.const 79248) "a") (data (i32.const 79251) "a") (data (i32.const 79254) "a") (data (i32.const 79257) "a") (data (i32.const 79260) "a") (data (i32.const 79263) "a") (data (i32.const 79266) "a") (data (i32.const 79269) "a") (data (i32.const 79272) "a") (data (i32.const 79275) "a") (data (i32.const 79278) "a") (data (i32.const 79281) "a") (data (i32.const 79284) "a") (data (i32.const 79287) "a") (data (i32.const 79290) "a") (data (i32.const 79293) "a") (data (i32.const 79296) "a") (data (i32.const 79299) "a") (data (i32.const 79302) "a") (data (i32.const 79305) "a") (data (i32.const 79308) "a") (data (i32.const 79311) "a") (data (i32.const 79314) "a") (data (i32.const 79317) "a") (data (i32.const 79320) "a") (data (i32.const 79323) "a") (data (i32.const 79326) "a") (data (i32.const 79329) "a") (data (i32.const 79332) "a") (data (i32.const 79335) "a") (data (i32.const 79338) "a") (data (i32.const 79341) "a") (data (i32.const 79344) "a") (data (i32.const 79347) "a") (data (i32.const 79350) "a") (data (i32.const 79353) "a") (data (i32.const 79356) "a") (data (i32.const 79359) "a") (data (i32.const 79362) "a") (data (i32.const 79365) "a") (data (i32.const 79368) "a") (data (i32.const 79371) "a") (data (i32.const 79374) "a") (data (i32.const 79377) "a") (data (i32.const 79380) "a") (data (i32.const 79383) "a") (data (i32.const 79386) "a") (data (i32.const 79389) "a") (data (i32.const 79392) "a") (data (i32.const 79395) "a") (data (i32.const 79398) "a") (data (i32.const 79401) "a") (data (i32.const 79404) "a") (data (i32.const 79407) "a") (data (i32.const 79410) "a") (data (i32.const 79413) "a") (data (i32.const 79416) "a") (data (i32.const 79419) "a") (data (i32.const 79422) "a") (data (i32.const 79425) "a") (data (i32.const 79428) "a") (data (i32.const 79431) "a") (data (i32.const 79434) "a") (data (i32.const 79437) "a") (data (i32.const 79440) "a") (data (i32.const 79443) "a") (data (i32.const 79446) "a") (data (i32.const 79449) "a") (data (i32.const 79452) "a") (data (i32.const 79455) "a") (data (i32.const 79458) "a") (data (i32.const 79461) "a") (data (i32.const 79464) "a") (data (i32.const 79467) "a") (data (i32.const 79470) "a") (data (i32.const 79473) "a") (data (i32.const 79476) "a") (data (i32.const 79479) "a") (data (i32.const 79482) "a") (data (i32.const 79485) "a") (data (i32.const 79488) "a") (data (i32.const 79491) "a") (data (i32.const 79494) "a") (data (i32.const 79497) "a") (data (i32.const 79500) "a") (data (i32.const 79503) "a") (data (i32.const 79506) "a") (data (i32.const 79509) "a") (data (i32.const 79512) "a") (data (i32.const 79515) "a") (data (i32.const 79518) "a") (data (i32.const 79521) "a") (data (i32.const 79524) "a") (data (i32.const 79527) "a") (data (i32.const 79530) "a") (data (i32.const 79533) "a") (data (i32.const 79536) "a") (data (i32.const 79539) "a") (data (i32.const 79542) "a") (data (i32.const 79545) "a") (data (i32.const 79548) "a") (data (i32.const 79551) "a") (data (i32.const 79554) "a") (data (i32.const 79557) "a") (data (i32.const 79560) "a") (data (i32.const 79563) "a") (data (i32.const 79566) "a") (data (i32.const 79569) "a") (data (i32.const 79572) "a") (data (i32.const 79575) "a") (data (i32.const 79578) "a") (data (i32.const 79581) "a") (data (i32.const 79584) "a") (data (i32.const 79587) "a") (data (i32.const 79590) "a") (data (i32.const 79593) "a") (data (i32.const 79596) "a") (data (i32.const 79599) "a") (data (i32.const 79602) "a") (data (i32.const 79605) "a") (data (i32.const 79608) "a") (data (i32.const 79611) "a") (data (i32.const 79614) "a") (data (i32.const 79617) "a") (data (i32.const 79620) "a") (data (i32.const 79623) "a") (data (i32.const 79626) "a") (data (i32.const 79629) "a") (data (i32.const 79632) "a") (data (i32.const 79635) "a") (data (i32.const 79638) "a") (data (i32.const 79641) "a") (data (i32.const 79644) "a") (data (i32.const 79647) "a") (data (i32.const 79650) "a") (data (i32.const 79653) "a") (data (i32.const 79656) "a") (data (i32.const 79659) "a") (data (i32.const 79662) "a") (data (i32.const 79665) "a") (data (i32.const 79668) "a") (data (i32.const 79671) "a") (data (i32.const 79674) "a") (data (i32.const 79677) "a") (data (i32.const 79680) "a") (data (i32.const 79683) "a") (data (i32.const 79686) "a") (data (i32.const 79689) "a") (data (i32.const 79692) "a") (data (i32.const 79695) "a") (data (i32.const 79698) "a") (data (i32.const 79701) "a") (data (i32.const 79704) "a") (data (i32.const 79707) "a") (data (i32.const 79710) "a") (data (i32.const 79713) "a") (data (i32.const 79716) "a") (data (i32.const 79719) "a") (data (i32.const 79722) "a") (data (i32.const 79725) "a") (data (i32.const 79728) "a") (data (i32.const 79731) "a") (data (i32.const 79734) "a") (data (i32.const 79737) "a") (data (i32.const 79740) "a") (data (i32.const 79743) "a") (data (i32.const 79746) "a") (data (i32.const 79749) "a") (data (i32.const 79752) "a") (data (i32.const 79755) "a") (data (i32.const 79758) "a") (data (i32.const 79761) "a") (data (i32.const 79764) "a") (data (i32.const 79767) "a") (data (i32.const 79770) "a") (data (i32.const 79773) "a") (data (i32.const 79776) "a") (data (i32.const 79779) "a") (data (i32.const 79782) "a") (data (i32.const 79785) "a") (data (i32.const 79788) "a") (data (i32.const 79791) "a") (data (i32.const 79794) "a") (data (i32.const 79797) "a") (data (i32.const 79800) "a") (data (i32.const 79803) "a") (data (i32.const 79806) "a") (data (i32.const 79809) "a") (data (i32.const 79812) "a") (data (i32.const 79815) "a") (data (i32.const 79818) "a") (data (i32.const 79821) "a") (data (i32.const 79824) "a") (data (i32.const 79827) "a") (data (i32.const 79830) "a") (data (i32.const 79833) "a") (data (i32.const 79836) "a") (data (i32.const 79839) "a") (data (i32.const 79842) "a") (data (i32.const 79845) "a") (data (i32.const 79848) "a") (data (i32.const 79851) "a") (data (i32.const 79854) "a") (data (i32.const 79857) "a") (data (i32.const 79860) "a") (data (i32.const 79863) "a") (data (i32.const 79866) "a") (data (i32.const 79869) "a") (data (i32.const 79872) "a") (data (i32.const 79875) "a") (data (i32.const 79878) "a") (data (i32.const 79881) "a") (data (i32.const 79884) "a") (data (i32.const 79887) "a") (data (i32.const 79890) "a") (data (i32.const 79893) "a") (data (i32.const 79896) "a") (data (i32.const 79899) "a") (data (i32.const 79902) "a") (data (i32.const 79905) "a") (data (i32.const 79908) "a") (data (i32.const 79911) "a") (data (i32.const 79914) "a") (data (i32.const 79917) "a") (data (i32.const 79920) "a") (data (i32.const 79923) "a") (data (i32.const 79926) "a") (data (i32.const 79929) "a") (data (i32.const 79932) "a") (data (i32.const 79935) "a") (data (i32.const 79938) "a") (data (i32.const 79941) "a") (data (i32.const 79944) "a") (data (i32.const 79947) "a") (data (i32.const 79950) "a") (data (i32.const 79953) "a") (data (i32.const 79956) "a") (data (i32.const 79959) "a") (data (i32.const 79962) "a") (data (i32.const 79965) "a") (data (i32.const 79968) "a") (data (i32.const 79971) "a") (data (i32.const 79974) "a") (data (i32.const 79977) "a") (data (i32.const 79980) "a") (data (i32.const 79983) "a") (data (i32.const 79986) "a") (data (i32.const 79989) "a") (data (i32.const 79992) "a") (data (i32.const 79995) "a") (data (i32.const 79998) "a") (data (i32.const 80001) "a") (data (i32.const 80004) "a") (data (i32.const 80007) "a") (data (i32.const 80010) "a") (data (i32.const 80013) "a") (data (i32.const 80016) "a") (data (i32.const 80019) "a") (data (i32.const 80022) "a") (data (i32.const 80025) "a") (data (i32.const 80028) "a") (data (i32.const 80031) "a") (data (i32.const 80034) "a") (data (i32.const 80037) "a") (data (i32.const 80040) "a") (data (i32.const 80043) "a") (data (i32.const 80046) "a") (data (i32.const 80049) "a") (data (i32.const 80052) "a") (data (i32.const 80055) "a") (data (i32.const 80058) "a") (data (i32.const 80061) "a") (data (i32.const 80064) "a") (data (i32.const 80067) "a") (data (i32.const 80070) "a") (data (i32.const 80073) "a") (data (i32.const 80076) "a") (data (i32.const 80079) "a") (data (i32.const 80082) "a") (data (i32.const 80085) "a") (data (i32.const 80088) "a") (data (i32.const 80091) "a") (data (i32.const 80094) "a") (data (i32.const 80097) "a") (data (i32.const 80100) "a") (data (i32.const 80103) "a") (data (i32.const 80106) "a") (data (i32.const 80109) "a") (data (i32.const 80112) "a") (data (i32.const 80115) "a") (data (i32.const 80118) "a") (data (i32.const 80121) "a") (data (i32.const 80124) "a") (data (i32.const 80127) "a") (data (i32.const 80130) "a") (data (i32.const 80133) "a") (data (i32.const 80136) "a") (data (i32.const 80139) "a") (data (i32.const 80142) "a") (data (i32.const 80145) "a") (data (i32.const 80148) "a") (data (i32.const 80151) "a") (data (i32.const 80154) "a") (data (i32.const 80157) "a") (data (i32.const 80160) "a") (data (i32.const 80163) "a") (data (i32.const 80166) "a") (data (i32.const 80169) "a") (data (i32.const 80172) "a") (data (i32.const 80175) "a") (data (i32.const 80178) "a") (data (i32.const 80181) "a") (data (i32.const 80184) "a") (data (i32.const 80187) "a") (data (i32.const 80190) "a") (data (i32.const 80193) "a") (data (i32.const 80196) "a") (data (i32.const 80199) "a") (data (i32.const 80202) "a") (data (i32.const 80205) "a") (data (i32.const 80208) "a") (data (i32.const 80211) "a") (data (i32.const 80214) "a") (data (i32.const 80217) "a") (data (i32.const 80220) "a") (data (i32.const 80223) "a") (data (i32.const 80226) "a") (data (i32.const 80229) "a") (data (i32.const 80232) "a") (data (i32.const 80235) "a") (data (i32.const 80238) "a") (data (i32.const 80241) "a") (data (i32.const 80244) "a") (data (i32.const 80247) "a") (data (i32.const 80250) "a") (data (i32.const 80253) "a") (data (i32.const 80256) "a") (data (i32.const 80259) "a") (data (i32.const 80262) "a") (data (i32.const 80265) "a") (data (i32.const 80268) "a") (data (i32.const 80271) "a") (data (i32.const 80274) "a") (data (i32.const 80277) "a") (data (i32.const 80280) "a") (data (i32.const 80283) "a") (data (i32.const 80286) "a") (data (i32.const 80289) "a") (data (i32.const 80292) "a") (data (i32.const 80295) "a") (data (i32.const 80298) "a") (data (i32.const 80301) "a") (data (i32.const 80304) "a") (data (i32.const 80307) "a") (data (i32.const 80310) "a") (data (i32.const 80313) "a") (data (i32.const 80316) "a") (data (i32.const 80319) "a") (data (i32.const 80322) "a") (data (i32.const 80325) "a") (data (i32.const 80328) "a") (data (i32.const 80331) "a") (data (i32.const 80334) "a") (data (i32.const 80337) "a") (data (i32.const 80340) "a") (data (i32.const 80343) "a") (data (i32.const 80346) "a") (data (i32.const 80349) "a") (data (i32.const 80352) "a") (data (i32.const 80355) "a") (data (i32.const 80358) "a") (data (i32.const 80361) "a") (data (i32.const 80364) "a") (data (i32.const 80367) "a") (data (i32.const 80370) "a") (data (i32.const 80373) "a") (data (i32.const 80376) "a") (data (i32.const 80379) "a") (data (i32.const 80382) "a") (data (i32.const 80385) "a") (data (i32.const 80388) "a") (data (i32.const 80391) "a") (data (i32.const 80394) "a") (data (i32.const 80397) "a") (data (i32.const 80400) "a") (data (i32.const 80403) "a") (data (i32.const 80406) "a") (data (i32.const 80409) "a") (data (i32.const 80412) "a") (data (i32.const 80415) "a") (data (i32.const 80418) "a") (data (i32.const 80421) "a") (data (i32.const 80424) "a") (data (i32.const 80427) "a") (data (i32.const 80430) "a") (data (i32.const 80433) "a") (data (i32.const 80436) "a") (data (i32.const 80439) "a") (data (i32.const 80442) "a") (data (i32.const 80445) "a") (data (i32.const 80448) "a") (data (i32.const 80451) "a") (data (i32.const 80454) "a") (data (i32.const 80457) "a") (data (i32.const 80460) "a") (data (i32.const 80463) "a") (data (i32.const 80466) "a") (data (i32.const 80469) "a") (data (i32.const 80472) "a") (data (i32.const 80475) "a") (data (i32.const 80478) "a") (data (i32.const 80481) "a") (data (i32.const 80484) "a") (data (i32.const 80487) "a") (data (i32.const 80490) "a") (data (i32.const 80493) "a") (data (i32.const 80496) "a") (data (i32.const 80499) "a") (data (i32.const 80502) "a") (data (i32.const 80505) "a") (data (i32.const 80508) "a") (data (i32.const 80511) "a") (data (i32.const 80514) "a") (data (i32.const 80517) "a") (data (i32.const 80520) "a") (data (i32.const 80523) "a") (data (i32.const 80526) "a") (data (i32.const 80529) "a") (data (i32.const 80532) "a") (data (i32.const 80535) "a") (data (i32.const 80538) "a") (data (i32.const 80541) "a") (data (i32.const 80544) "a") (data (i32.const 80547) "a") (data (i32.const 80550) "a") (data (i32.const 80553) "a") (data (i32.const 80556) "a") (data (i32.const 80559) "a") (data (i32.const 80562) "a") (data (i32.const 80565) "a") (data (i32.const 80568) "a") (data (i32.const 80571) "a") (data (i32.const 80574) "a") (data (i32.const 80577) "a") (data (i32.const 80580) "a") (data (i32.const 80583) "a") (data (i32.const 80586) "a") (data (i32.const 80589) "a") (data (i32.const 80592) "a") (data (i32.const 80595) "a") (data (i32.const 80598) "a") (data (i32.const 80601) "a") (data (i32.const 80604) "a") (data (i32.const 80607) "a") (data (i32.const 80610) "a") (data (i32.const 80613) "a") (data (i32.const 80616) "a") (data (i32.const 80619) "a") (data (i32.const 80622) "a") (data (i32.const 80625) "a") (data (i32.const 80628) "a") (data (i32.const 80631) "a") (data (i32.const 80634) "a") (data (i32.const 80637) "a") (data (i32.const 80640) "a") (data (i32.const 80643) "a") (data (i32.const 80646) "a") (data (i32.const 80649) "a") (data (i32.const 80652) "a") (data (i32.const 80655) "a") (data (i32.const 80658) "a") (data (i32.const 80661) "a") (data (i32.const 80664) "a") (data (i32.const 80667) "a") (data (i32.const 80670) "a") (data (i32.const 80673) "a") (data (i32.const 80676) "a") (data (i32.const 80679) "a") (data (i32.const 80682) "a") (data (i32.const 80685) "a") (data (i32.const 80688) "a") (data (i32.const 80691) "a") (data (i32.const 80694) "a") (data (i32.const 80697) "a") (data (i32.const 80700) "a") (data (i32.const 80703) "a") (data (i32.const 80706) "a") (data (i32.const 80709) "a") (data (i32.const 80712) "a") (data (i32.const 80715) "a") (data (i32.const 80718) "a") (data (i32.const 80721) "a") (data (i32.const 80724) "a") (data (i32.const 80727) "a") (data (i32.const 80730) "a") (data (i32.const 80733) "a") (data (i32.const 80736) "a") (data (i32.const 80739) "a") (data (i32.const 80742) "a") (data (i32.const 80745) "a") (data (i32.const 80748) "a") (data (i32.const 80751) "a") (data (i32.const 80754) "a") (data (i32.const 80757) "a") (data (i32.const 80760) "a") (data (i32.const 80763) "a") (data (i32.const 80766) "a") (data (i32.const 80769) "a") (data (i32.const 80772) "a") (data (i32.const 80775) "a") (data (i32.const 80778) "a") (data (i32.const 80781) "a") (data (i32.const 80784) "a") (data (i32.const 80787) "a") (data (i32.const 80790) "a") (data (i32.const 80793) "a") (data (i32.const 80796) "a") (data (i32.const 80799) "a") (data (i32.const 80802) "a") (data (i32.const 80805) "a") (data (i32.const 80808) "a") (data (i32.const 80811) "a") (data (i32.const 80814) "a") (data (i32.const 80817) "a") (data (i32.const 80820) "a") (data (i32.const 80823) "a") (data (i32.const 80826) "a") (data (i32.const 80829) "a") (data (i32.const 80832) "a") (data (i32.const 80835) "a") (data (i32.const 80838) "a") (data (i32.const 80841) "a") (data (i32.const 80844) "a") (data (i32.const 80847) "a") (data (i32.const 80850) "a") (data (i32.const 80853) "a") (data (i32.const 80856) "a") (data (i32.const 80859) "a") (data (i32.const 80862) "a") (data (i32.const 80865) "a") (data (i32.const 80868) "a") (data (i32.const 80871) "a") (data (i32.const 80874) "a") (data (i32.const 80877) "a") (data (i32.const 80880) "a") (data (i32.const 80883) "a") (data (i32.const 80886) "a") (data (i32.const 80889) "a") (data (i32.const 80892) "a") (data (i32.const 80895) "a") (data (i32.const 80898) "a") (data (i32.const 80901) "a") (data (i32.const 80904) "a") (data (i32.const 80907) "a") (data (i32.const 80910) "a") (data (i32.const 80913) "a") (data (i32.const 80916) "a") (data (i32.const 80919) "a") (data (i32.const 80922) "a") (data (i32.const 80925) "a") (data (i32.const 80928) "a") (data (i32.const 80931) "a") (data (i32.const 80934) "a") (data (i32.const 80937) "a") (data (i32.const 80940) "a") (data (i32.const 80943) "a") (data (i32.const 80946) "a") (data (i32.const 80949) "a") (data (i32.const 80952) "a") (data (i32.const 80955) "a") (data (i32.const 80958) "a") (data (i32.const 80961) "a") (data (i32.const 80964) "a") (data (i32.const 80967) "a") (data (i32.const 80970) "a") (data (i32.const 80973) "a") (data (i32.const 80976) "a") (data (i32.const 80979) "a") (data (i32.const 80982) "a") (data (i32.const 80985) "a") (data (i32.const 80988) "a") (data (i32.const 80991) "a") (data (i32.const 80994) "a") (data (i32.const 80997) "a") (data (i32.const 81000) "a") (data (i32.const 81003) "a") (data (i32.const 81006) "a") (data (i32.const 81009) "a") (data (i32.const 81012) "a") (data (i32.const 81015) "a") (data (i32.const 81018) "a") (data (i32.const 81021) "a") (data (i32.const 81024) "a") (data (i32.const 81027) "a") (data (i32.const 81030) "a") (data (i32.const 81033) "a") (data (i32.const 81036) "a") (data (i32.const 81039) "a") (data (i32.const 81042) "a") (data (i32.const 81045) "a") (data (i32.const 81048) "a") (data (i32.const 81051) "a") (data (i32.const 81054) "a") (data (i32.const 81057) "a") (data (i32.const 81060) "a") (data (i32.const 81063) "a") (data (i32.const 81066) "a") (data (i32.const 81069) "a") (data (i32.const 81072) "a") (data (i32.const 81075) "a") (data (i32.const 81078) "a") (data (i32.const 81081) "a") (data (i32.const 81084) "a") (data (i32.const 81087) "a") (data (i32.const 81090) "a") (data (i32.const 81093) "a") (data (i32.const 81096) "a") (data (i32.const 81099) "a") (data (i32.const 81102) "a") (data (i32.const 81105) "a") (data (i32.const 81108) "a") (data (i32.const 81111) "a") (data (i32.const 81114) "a") (data (i32.const 81117) "a") (data (i32.const 81120) "a") (data (i32.const 81123) "a") (data (i32.const 81126) "a") (data (i32.const 81129) "a") (data (i32.const 81132) "a") (data (i32.const 81135) "a") (data (i32.const 81138) "a") (data (i32.const 81141) "a") (data (i32.const 81144) "a") (data (i32.const 81147) "a") (data (i32.const 81150) "a") (data (i32.const 81153) "a") (data (i32.const 81156) "a") (data (i32.const 81159) "a") (data (i32.const 81162) "a") (data (i32.const 81165) "a") (data (i32.const 81168) "a") (data (i32.const 81171) "a") (data (i32.const 81174) "a") (data (i32.const 81177) "a") (data (i32.const 81180) "a") (data (i32.const 81183) "a") (data (i32.const 81186) "a") (data (i32.const 81189) "a") (data (i32.const 81192) "a") (data (i32.const 81195) "a") (data (i32.const 81198) "a") (data (i32.const 81201) "a") (data (i32.const 81204) "a") (data (i32.const 81207) "a") (data (i32.const 81210) "a") (data (i32.const 81213) "a") (data (i32.const 81216) "a") (data (i32.const 81219) "a") (data (i32.const 81222) "a") (data (i32.const 81225) "a") (data (i32.const 81228) "a") (data (i32.const 81231) "a") (data (i32.const 81234) "a") (data (i32.const 81237) "a") (data (i32.const 81240) "a") (data (i32.const 81243) "a") (data (i32.const 81246) "a") (data (i32.const 81249) "a") (data (i32.const 81252) "a") (data (i32.const 81255) "a") (data (i32.const 81258) "a") (data (i32.const 81261) "a") (data (i32.const 81264) "a") (data (i32.const 81267) "a") (data (i32.const 81270) "a") (data (i32.const 81273) "a") (data (i32.const 81276) "a") (data (i32.const 81279) "a") (data (i32.const 81282) "a") (data (i32.const 81285) "a") (data (i32.const 81288) "a") (data (i32.const 81291) "a") (data (i32.const 81294) "a") (data (i32.const 81297) "a") (data (i32.const 81300) "a") (data (i32.const 81303) "a") (data (i32.const 81306) "a") (data (i32.const 81309) "a") (data (i32.const 81312) "a") (data (i32.const 81315) "a") (data (i32.const 81318) "a") (data (i32.const 81321) "a") (data (i32.const 81324) "a") (data (i32.const 81327) "a") (data (i32.const 81330) "a") (data (i32.const 81333) "a") (data (i32.const 81336) "a") (data (i32.const 81339) "a") (data (i32.const 81342) "a") (data (i32.const 81345) "a") (data (i32.const 81348) "a") (data (i32.const 81351) "a") (data (i32.const 81354) "a") (data (i32.const 81357) "a") (data (i32.const 81360) "a") (data (i32.const 81363) "a") (data (i32.const 81366) "a") (data (i32.const 81369) "a") (data (i32.const 81372) "a") (data (i32.const 81375) "a") (data (i32.const 81378) "a") (data (i32.const 81381) "a") (data (i32.const 81384) "a") (data (i32.const 81387) "a") (data (i32.const 81390) "a") (data (i32.const 81393) "a") (data (i32.const 81396) "a") (data (i32.const 81399) "a") (data (i32.const 81402) "a") (data (i32.const 81405) "a") (data (i32.const 81408) "a") (data (i32.const 81411) "a") (data (i32.const 81414) "a") (data (i32.const 81417) "a") (data (i32.const 81420) "a") (data (i32.const 81423) "a") (data (i32.const 81426) "a") (data (i32.const 81429) "a") (data (i32.const 81432) "a") (data (i32.const 81435) "a") (data (i32.const 81438) "a") (data (i32.const 81441) "a") (data (i32.const 81444) "a") (data (i32.const 81447) "a") (data (i32.const 81450) "a") (data (i32.const 81453) "a") (data (i32.const 81456) "a") (data (i32.const 81459) "a") (data (i32.const 81462) "a") (data (i32.const 81465) "a") (data (i32.const 81468) "a") (data (i32.const 81471) "a") (data (i32.const 81474) "a") (data (i32.const 81477) "a") (data (i32.const 81480) "a") (data (i32.const 81483) "a") (data (i32.const 81486) "a") (data (i32.const 81489) "a") (data (i32.const 81492) "a") (data (i32.const 81495) "a") (data (i32.const 81498) "a") (data (i32.const 81501) "a") (data (i32.const 81504) "a") (data (i32.const 81507) "a") (data (i32.const 81510) "a") (data (i32.const 81513) "a") (data (i32.const 81516) "a") (data (i32.const 81519) "a") (data (i32.const 81522) "a") (data (i32.const 81525) "a") (data (i32.const 81528) "a") (data (i32.const 81531) "a") (data (i32.const 81534) "a") (data (i32.const 81537) "a") (data (i32.const 81540) "a") (data (i32.const 81543) "a") (data (i32.const 81546) "a") (data (i32.const 81549) "a") (data (i32.const 81552) "a") (data (i32.const 81555) "a") (data (i32.const 81558) "a") (data (i32.const 81561) "a") (data (i32.const 81564) "a") (data (i32.const 81567) "a") (data (i32.const 81570) "a") (data (i32.const 81573) "a") (data (i32.const 81576) "a") (data (i32.const 81579) "a") (data (i32.const 81582) "a") (data (i32.const 81585) "a") (data (i32.const 81588) "a") (data (i32.const 81591) "a") (data (i32.const 81594) "a") (data (i32.const 81597) "a") (data (i32.const 81600) "a") (data (i32.const 81603) "a") (data (i32.const 81606) "a") (data (i32.const 81609) "a") (data (i32.const 81612) "a") (data (i32.const 81615) "a") (data (i32.const 81618) "a") (data (i32.const 81621) "a") (data (i32.const 81624) "a") (data (i32.const 81627) "a") (data (i32.const 81630) "a") (data (i32.const 81633) "a") (data (i32.const 81636) "a") (data (i32.const 81639) "a") (data (i32.const 81642) "a") (data (i32.const 81645) "a") (data (i32.const 81648) "a") (data (i32.const 81651) "a") (data (i32.const 81654) "a") (data (i32.const 81657) "a") (data (i32.const 81660) "a") (data (i32.const 81663) "a") (data (i32.const 81666) "a") (data (i32.const 81669) "a") (data (i32.const 81672) "a") (data (i32.const 81675) "a") (data (i32.const 81678) "a") (data (i32.const 81681) "a") (data (i32.const 81684) "a") (data (i32.const 81687) "a") (data (i32.const 81690) "a") (data (i32.const 81693) "a") (data (i32.const 81696) "a") (data (i32.const 81699) "a") (data (i32.const 81702) "a") (data (i32.const 81705) "a") (data (i32.const 81708) "a") (data (i32.const 81711) "a") (data (i32.const 81714) "a") (data (i32.const 81717) "a") (data (i32.const 81720) "a") (data (i32.const 81723) "a") (data (i32.const 81726) "a") (data (i32.const 81729) "a") (data (i32.const 81732) "a") (data (i32.const 81735) "a") (data (i32.const 81738) "a") (data (i32.const 81741) "a") (data (i32.const 81744) "a") (data (i32.const 81747) "a") (data (i32.const 81750) "a") (data (i32.const 81753) "a") (data (i32.const 81756) "a") (data (i32.const 81759) "a") (data (i32.const 81762) "a") (data (i32.const 81765) "a") (data (i32.const 81768) "a") (data (i32.const 81771) "a") (data (i32.const 81774) "a") (data (i32.const 81777) "a") (data (i32.const 81780) "a") (data (i32.const 81783) "a") (data (i32.const 81786) "a") (data (i32.const 81789) "a") (data (i32.const 81792) "a") (data (i32.const 81795) "a") (data (i32.const 81798) "a") (data (i32.const 81801) "a") (data (i32.const 81804) "a") (data (i32.const 81807) "a") (data (i32.const 81810) "a") (data (i32.const 81813) "a") (data (i32.const 81816) "a") (data (i32.const 81819) "a") (data (i32.const 81822) "a") (data (i32.const 81825) "a") (data (i32.const 81828) "a") (data (i32.const 81831) "a") (data (i32.const 81834) "a") (data (i32.const 81837) "a") (data (i32.const 81840) "a") (data (i32.const 81843) "a") (data (i32.const 81846) "a") (data (i32.const 81849) "a") (data (i32.const 81852) "a") (data (i32.const 81855) "a") (data (i32.const 81858) "a") (data (i32.const 81861) "a") (data (i32.const 81864) "a") (data (i32.const 81867) "a") (data (i32.const 81870) "a") (data (i32.const 81873) "a") (data (i32.const 81876) "a") (data (i32.const 81879) "a") (data (i32.const 81882) "a") (data (i32.const 81885) "a") (data (i32.const 81888) "a") (data (i32.const 81891) "a") (data (i32.const 81894) "a") (data (i32.const 81897) "a") (data (i32.const 81900) "a") (data (i32.const 81903) "a") (data (i32.const 81906) "a") (data (i32.const 81909) "a") (data (i32.const 81912) "a") (data (i32.const 81915) "a") (data (i32.const 81918) "a") (data (i32.const 81921) "a") (data (i32.const 81924) "a") (data (i32.const 81927) "a") (data (i32.const 81930) "a") (data (i32.const 81933) "a") (data (i32.const 81936) "a") (data (i32.const 81939) "a") (data (i32.const 81942) "a") (data (i32.const 81945) "a") (data (i32.const 81948) "a") (data (i32.const 81951) "a") (data (i32.const 81954) "a") (data (i32.const 81957) "a") (data (i32.const 81960) "a") (data (i32.const 81963) "a") (data (i32.const 81966) "a") (data (i32.const 81969) "a") (data (i32.const 81972) "a") (data (i32.const 81975) "a") (data (i32.const 81978) "a") (data (i32.const 81981) "a") (data (i32.const 81984) "a") (data (i32.const 81987) "a") (data (i32.const 81990) "a") (data (i32.const 81993) "a") (data (i32.const 81996) "a") (data (i32.const 81999) "a") (data (i32.const 82002) "a") (data (i32.const 82005) "a") (data (i32.const 82008) "a") (data (i32.const 82011) "a") (data (i32.const 82014) "a") (data (i32.const 82017) "a") (data (i32.const 82020) "a") (data (i32.const 82023) "a") (data (i32.const 82026) "a") (data (i32.const 82029) "a") (data (i32.const 82032) "a") (data (i32.const 82035) "a") (data (i32.const 82038) "a") (data (i32.const 82041) "a") (data (i32.const 82044) "a") (data (i32.const 82047) "a") (data (i32.const 82050) "a") (data (i32.const 82053) "a") (data (i32.const 82056) "a") (data (i32.const 82059) "a") (data (i32.const 82062) "a") (data (i32.const 82065) "a") (data (i32.const 82068) "a") (data (i32.const 82071) "a") (data (i32.const 82074) "a") (data (i32.const 82077) "a") (data (i32.const 82080) "a") (data (i32.const 82083) "a") (data (i32.const 82086) "a") (data (i32.const 82089) "a") (data (i32.const 82092) "a") (data (i32.const 82095) "a") (data (i32.const 82098) "a") (data (i32.const 82101) "a") (data (i32.const 82104) "a") (data (i32.const 82107) "a") (data (i32.const 82110) "a") (data (i32.const 82113) "a") (data (i32.const 82116) "a") (data (i32.const 82119) "a") (data (i32.const 82122) "a") (data (i32.const 82125) "a") (data (i32.const 82128) "a") (data (i32.const 82131) "a") (data (i32.const 82134) "a") (data (i32.const 82137) "a") (data (i32.const 82140) "a") (data (i32.const 82143) "a") (data (i32.const 82146) "a") (data (i32.const 82149) "a") (data (i32.const 82152) "a") (data (i32.const 82155) "a") (data (i32.const 82158) "a") (data (i32.const 82161) "a") (data (i32.const 82164) "a") (data (i32.const 82167) "a") (data (i32.const 82170) "a") (data (i32.const 82173) "a") (data (i32.const 82176) "a") (data (i32.const 82179) "a") (data (i32.const 82182) "a") (data (i32.const 82185) "a") (data (i32.const 82188) "a") (data (i32.const 82191) "a") (data (i32.const 82194) "a") (data (i32.const 82197) "a") (data (i32.const 82200) "a") (data (i32.const 82203) "a") (data (i32.const 82206) "a") (data (i32.const 82209) "a") (data (i32.const 82212) "a") (data (i32.const 82215) "a") (data (i32.const 82218) "a") (data (i32.const 82221) "a") (data (i32.const 82224) "a") (data (i32.const 82227) "a") (data (i32.const 82230) "a") (data (i32.const 82233) "a") (data (i32.const 82236) "a") (data (i32.const 82239) "a") (data (i32.const 82242) "a") (data (i32.const 82245) "a") (data (i32.const 82248) "a") (data (i32.const 82251) "a") (data (i32.const 82254) "a") (data (i32.const 82257) "a") (data (i32.const 82260) "a") (data (i32.const 82263) "a") (data (i32.const 82266) "a") (data (i32.const 82269) "a") (data (i32.const 82272) "a") (data (i32.const 82275) "a") (data (i32.const 82278) "a") (data (i32.const 82281) "a") (data (i32.const 82284) "a") (data (i32.const 82287) "a") (data (i32.const 82290) "a") (data (i32.const 82293) "a") (data (i32.const 82296) "a") (data (i32.const 82299) "a") (data (i32.const 82302) "a") (data (i32.const 82305) "a") (data (i32.const 82308) "a") (data (i32.const 82311) "a") (data (i32.const 82314) "a") (data (i32.const 82317) "a") (data (i32.const 82320) "a") (data (i32.const 82323) "a") (data (i32.const 82326) "a") (data (i32.const 82329) "a") (data (i32.const 82332) "a") (data (i32.const 82335) "a") (data (i32.const 82338) "a") (data (i32.const 82341) "a") (data (i32.const 82344) "a") (data (i32.const 82347) "a") (data (i32.const 82350) "a") (data (i32.const 82353) "a") (data (i32.const 82356) "a") (data (i32.const 82359) "a") (data (i32.const 82362) "a") (data (i32.const 82365) "a") (data (i32.const 82368) "a") (data (i32.const 82371) "a") (data (i32.const 82374) "a") (data (i32.const 82377) "a") (data (i32.const 82380) "a") (data (i32.const 82383) "a") (data (i32.const 82386) "a") (data (i32.const 82389) "a") (data (i32.const 82392) "a") (data (i32.const 82395) "a") (data (i32.const 82398) "a") (data (i32.const 82401) "a") (data (i32.const 82404) "a") (data (i32.const 82407) "a") (data (i32.const 82410) "a") (data (i32.const 82413) "a") (data (i32.const 82416) "a") (data (i32.const 82419) "a") (data (i32.const 82422) "a") (data (i32.const 82425) "a") (data (i32.const 82428) "a") (data (i32.const 82431) "a") (data (i32.const 82434) "a") (data (i32.const 82437) "a") (data (i32.const 82440) "a") (data (i32.const 82443) "a") (data (i32.const 82446) "a") (data (i32.const 82449) "a") (data (i32.const 82452) "a") (data (i32.const 82455) "a") (data (i32.const 82458) "a") (data (i32.const 82461) "a") (data (i32.const 82464) "a") (data (i32.const 82467) "a") (data (i32.const 82470) "a") (data (i32.const 82473) "a") (data (i32.const 82476) "a") (data (i32.const 82479) "a") (data (i32.const 82482) "a") (data (i32.const 82485) "a") (data (i32.const 82488) "a") (data (i32.const 82491) "a") (data (i32.const 82494) "a") (data (i32.const 82497) "a") (data (i32.const 82500) "a") (data (i32.const 82503) "a") (data (i32.const 82506) "a") (data (i32.const 82509) "a") (data (i32.const 82512) "a") (data (i32.const 82515) "a") (data (i32.const 82518) "a") (data (i32.const 82521) "a") (data (i32.const 82524) "a") (data (i32.const 82527) "a") (data (i32.const 82530) "a") (data (i32.const 82533) "a") (data (i32.const 82536) "a") (data (i32.const 82539) "a") (data (i32.const 82542) "a") (data (i32.const 82545) "a") (data (i32.const 82548) "a") (data (i32.const 82551) "a") (data (i32.const 82554) "a") (data (i32.const 82557) "a") (data (i32.const 82560) "a") (data (i32.const 82563) "a") (data (i32.const 82566) "a") (data (i32.const 82569) "a") (data (i32.const 82572) "a") (data (i32.const 82575) "a") (data (i32.const 82578) "a") (data (i32.const 82581) "a") (data (i32.const 82584) "a") (data (i32.const 82587) "a") (data (i32.const 82590) "a") (data (i32.const 82593) "a") (data (i32.const 82596) "a") (data (i32.const 82599) "a") (data (i32.const 82602) "a") (data (i32.const 82605) "a") (data (i32.const 82608) "a") (data (i32.const 82611) "a") (data (i32.const 82614) "a") (data (i32.const 82617) "a") (data (i32.const 82620) "a") (data (i32.const 82623) "a") (data (i32.const 82626) "a") (data (i32.const 82629) "a") (data (i32.const 82632) "a") (data (i32.const 82635) "a") (data (i32.const 82638) "a") (data (i32.const 82641) "a") (data (i32.const 82644) "a") (data (i32.const 82647) "a") (data (i32.const 82650) "a") (data (i32.const 82653) "a") (data (i32.const 82656) "a") (data (i32.const 82659) "a") (data (i32.const 82662) "a") (data (i32.const 82665) "a") (data (i32.const 82668) "a") (data (i32.const 82671) "a") (data (i32.const 82674) "a") (data (i32.const 82677) "a") (data (i32.const 82680) "a") (data (i32.const 82683) "a") (data (i32.const 82686) "a") (data (i32.const 82689) "a") (data (i32.const 82692) "a") (data (i32.const 82695) "a") (data (i32.const 82698) "a") (data (i32.const 82701) "a") (data (i32.const 82704) "a") (data (i32.const 82707) "a") (data (i32.const 82710) "a") (data (i32.const 82713) "a") (data (i32.const 82716) "a") (data (i32.const 82719) "a") (data (i32.const 82722) "a") (data (i32.const 82725) "a") (data (i32.const 82728) "a") (data (i32.const 82731) "a") (data (i32.const 82734) "a") (data (i32.const 82737) "a") (data (i32.const 82740) "a") (data (i32.const 82743) "a") (data (i32.const 82746) "a") (data (i32.const 82749) "a") (data (i32.const 82752) "a") (data (i32.const 82755) "a") (data (i32.const 82758) "a") (data (i32.const 82761) "a") (data (i32.const 82764) "a") (data (i32.const 82767) "a") (data (i32.const 82770) "a") (data (i32.const 82773) "a") (data (i32.const 82776) "a") (data (i32.const 82779) "a") (data (i32.const 82782) "a") (data (i32.const 82785) "a") (data (i32.const 82788) "a") (data (i32.const 82791) "a") (data (i32.const 82794) "a") (data (i32.const 82797) "a") (data (i32.const 82800) "a") (data (i32.const 82803) "a") (data (i32.const 82806) "a") (data (i32.const 82809) "a") (data (i32.const 82812) "a") (data (i32.const 82815) "a") (data (i32.const 82818) "a") (data (i32.const 82821) "a") (data (i32.const 82824) "a") (data (i32.const 82827) "a") (data (i32.const 82830) "a") (data (i32.const 82833) "a") (data (i32.const 82836) "a") (data (i32.const 82839) "a") (data (i32.const 82842) "a") (data (i32.const 82845) "a") (data (i32.const 82848) "a") (data (i32.const 82851) "a") (data (i32.const 82854) "a") (data (i32.const 82857) "a") (data (i32.const 82860) "a") (data (i32.const 82863) "a") (data (i32.const 82866) "a") (data (i32.const 82869) "a") (data (i32.const 82872) "a") (data (i32.const 82875) "a") (data (i32.const 82878) "a") (data (i32.const 82881) "a") (data (i32.const 82884) "a") (data (i32.const 82887) "a") (data (i32.const 82890) "a") (data (i32.const 82893) "a") (data (i32.const 82896) "a") (data (i32.const 82899) "a") (data (i32.const 82902) "a") (data (i32.const 82905) "a") (data (i32.const 82908) "a") (data (i32.const 82911) "a") (data (i32.const 82914) "a") (data (i32.const 82917) "a") (data (i32.const 82920) "a") (data (i32.const 82923) "a") (data (i32.const 82926) "a") (data (i32.const 82929) "a") (data (i32.const 82932) "a") (data (i32.const 82935) "a") (data (i32.const 82938) "a") (data (i32.const 82941) "a") (data (i32.const 82944) "a") (data (i32.const 82947) "a") (data (i32.const 82950) "a") (data (i32.const 82953) "a") (data (i32.const 82956) "a") (data (i32.const 82959) "a") (data (i32.const 82962) "a") (data (i32.const 82965) "a") (data (i32.const 82968) "a") (data (i32.const 82971) "a") (data (i32.const 82974) "a") (data (i32.const 82977) "a") (data (i32.const 82980) "a") (data (i32.const 82983) "a") (data (i32.const 82986) "a") (data (i32.const 82989) "a") (data (i32.const 82992) "a") (data (i32.const 82995) "a") (data (i32.const 82998) "a") (data (i32.const 83001) "a") (data (i32.const 83004) "a") (data (i32.const 83007) "a") (data (i32.const 83010) "a") (data (i32.const 83013) "a") (data (i32.const 83016) "a") (data (i32.const 83019) "a") (data (i32.const 83022) "a") (data (i32.const 83025) "a") (data (i32.const 83028) "a") (data (i32.const 83031) "a") (data (i32.const 83034) "a") (data (i32.const 83037) "a") (data (i32.const 83040) "a") (data (i32.const 83043) "a") (data (i32.const 83046) "a") (data (i32.const 83049) "a") (data (i32.const 83052) "a") (data (i32.const 83055) "a") (data (i32.const 83058) "a") (data (i32.const 83061) "a") (data (i32.const 83064) "a") (data (i32.const 83067) "a") (data (i32.const 83070) "a") (data (i32.const 83073) "a") (data (i32.const 83076) "a") (data (i32.const 83079) "a") (data (i32.const 83082) "a") (data (i32.const 83085) "a") (data (i32.const 83088) "a") (data (i32.const 83091) "a") (data (i32.const 83094) "a") (data (i32.const 83097) "a") (data (i32.const 83100) "a") (data (i32.const 83103) "a") (data (i32.const 83106) "a") (data (i32.const 83109) "a") (data (i32.const 83112) "a") (data (i32.const 83115) "a") (data (i32.const 83118) "a") (data (i32.const 83121) "a") (data (i32.const 83124) "a") (data (i32.const 83127) "a") (data (i32.const 83130) "a") (data (i32.const 83133) "a") (data (i32.const 83136) "a") (data (i32.const 83139) "a") (data (i32.const 83142) "a") (data (i32.const 83145) "a") (data (i32.const 83148) "a") (data (i32.const 83151) "a") (data (i32.const 83154) "a") (data (i32.const 83157) "a") (data (i32.const 83160) "a") (data (i32.const 83163) "a") (data (i32.const 83166) "a") (data (i32.const 83169) "a") (data (i32.const 83172) "a") (data (i32.const 83175) "a") (data (i32.const 83178) "a") (data (i32.const 83181) "a") (data (i32.const 83184) "a") (data (i32.const 83187) "a") (data (i32.const 83190) "a") (data (i32.const 83193) "a") (data (i32.const 83196) "a") (data (i32.const 83199) "a") (data (i32.const 83202) "a") (data (i32.const 83205) "a") (data (i32.const 83208) "a") (data (i32.const 83211) "a") (data (i32.const 83214) "a") (data (i32.const 83217) "a") (data (i32.const 83220) "a") (data (i32.const 83223) "a") (data (i32.const 83226) "a") (data (i32.const 83229) "a") (data (i32.const 83232) "a") (data (i32.const 83235) "a") (data (i32.const 83238) "a") (data (i32.const 83241) "a") (data (i32.const 83244) "a") (data (i32.const 83247) "a") (data (i32.const 83250) "a") (data (i32.const 83253) "a") (data (i32.const 83256) "a") (data (i32.const 83259) "a") (data (i32.const 83262) "a") (data (i32.const 83265) "a") (data (i32.const 83268) "a") (data (i32.const 83271) "a") (data (i32.const 83274) "a") (data (i32.const 83277) "a") (data (i32.const 83280) "a") (data (i32.const 83283) "a") (data (i32.const 83286) "a") (data (i32.const 83289) "a") (data (i32.const 83292) "a") (data (i32.const 83295) "a") (data (i32.const 83298) "a") (data (i32.const 83301) "a") (data (i32.const 83304) "a") (data (i32.const 83307) "a") (data (i32.const 83310) "a") (data (i32.const 83313) "a") (data (i32.const 83316) "a") (data (i32.const 83319) "a") (data (i32.const 83322) "a") (data (i32.const 83325) "a") (data (i32.const 83328) "a") (data (i32.const 83331) "a") (data (i32.const 83334) "a") (data (i32.const 83337) "a") (data (i32.const 83340) "a") (data (i32.const 83343) "a") (data (i32.const 83346) "a") (data (i32.const 83349) "a") (data (i32.const 83352) "a") (data (i32.const 83355) "a") (data (i32.const 83358) "a") (data (i32.const 83361) "a") (data (i32.const 83364) "a") (data (i32.const 83367) "a") (data (i32.const 83370) "a") (data (i32.const 83373) "a") (data (i32.const 83376) "a") (data (i32.const 83379) "a") (data (i32.const 83382) "a") (data (i32.const 83385) "a") (data (i32.const 83388) "a") (data (i32.const 83391) "a") (data (i32.const 83394) "a") (data (i32.const 83397) "a") (data (i32.const 83400) "a") (data (i32.const 83403) "a") (data (i32.const 83406) "a") (data (i32.const 83409) "a") (data (i32.const 83412) "a") (data (i32.const 83415) "a") (data (i32.const 83418) "a") (data (i32.const 83421) "a") (data (i32.const 83424) "a") (data (i32.const 83427) "a") (data (i32.const 83430) "a") (data (i32.const 83433) "a") (data (i32.const 83436) "a") (data (i32.const 83439) "a") (data (i32.const 83442) "a") (data (i32.const 83445) "a") (data (i32.const 83448) "a") (data (i32.const 83451) "a") (data (i32.const 83454) "a") (data (i32.const 83457) "a") (data (i32.const 83460) "a") (data (i32.const 83463) "a") (data (i32.const 83466) "a") (data (i32.const 83469) "a") (data (i32.const 83472) "a") (data (i32.const 83475) "a") (data (i32.const 83478) "a") (data (i32.const 83481) "a") (data (i32.const 83484) "a") (data (i32.const 83487) "a") (data (i32.const 83490) "a") (data (i32.const 83493) "a") (data (i32.const 83496) "a") (data (i32.const 83499) "a") (data (i32.const 83502) "a") (data (i32.const 83505) "a") (data (i32.const 83508) "a") (data (i32.const 83511) "a") (data (i32.const 83514) "a") (data (i32.const 83517) "a") (data (i32.const 83520) "a") (data (i32.const 83523) "a") (data (i32.const 83526) "a") (data (i32.const 83529) "a") (data (i32.const 83532) "a") (data (i32.const 83535) "a") (data (i32.const 83538) "a") (data (i32.const 83541) "a") (data (i32.const 83544) "a") (data (i32.const 83547) "a") (data (i32.const 83550) "a") (data (i32.const 83553) "a") (data (i32.const 83556) "a") (data (i32.const 83559) "a") (data (i32.const 83562) "a") (data (i32.const 83565) "a") (data (i32.const 83568) "a") (data (i32.const 83571) "a") (data (i32.const 83574) "a") (data (i32.const 83577) "a") (data (i32.const 83580) "a") (data (i32.const 83583) "a") (data (i32.const 83586) "a") (data (i32.const 83589) "a") (data (i32.const 83592) "a") (data (i32.const 83595) "a") (data (i32.const 83598) "a") (data (i32.const 83601) "a") (data (i32.const 83604) "a") (data (i32.const 83607) "a") (data (i32.const 83610) "a") (data (i32.const 83613) "a") (data (i32.const 83616) "a") (data (i32.const 83619) "a") (data (i32.const 83622) "a") (data (i32.const 83625) "a") (data (i32.const 83628) "a") (data (i32.const 83631) "a") (data (i32.const 83634) "a") (data (i32.const 83637) "a") (data (i32.const 83640) "a") (data (i32.const 83643) "a") (data (i32.const 83646) "a") (data (i32.const 83649) "a") (data (i32.const 83652) "a") (data (i32.const 83655) "a") (data (i32.const 83658) "a") (data (i32.const 83661) "a") (data (i32.const 83664) "a") (data (i32.const 83667) "a") (data (i32.const 83670) "a") (data (i32.const 83673) "a") (data (i32.const 83676) "a") (data (i32.const 83679) "a") (data (i32.const 83682) "a") (data (i32.const 83685) "a") (data (i32.const 83688) "a") (data (i32.const 83691) "a") (data (i32.const 83694) "a") (data (i32.const 83697) "a") (data (i32.const 83700) "a") (data (i32.const 83703) "a") (data (i32.const 83706) "a") (data (i32.const 83709) "a") (data (i32.const 83712) "a") (data (i32.const 83715) "a") (data (i32.const 83718) "a") (data (i32.const 83721) "a") (data (i32.const 83724) "a") (data (i32.const 83727) "a") (data (i32.const 83730) "a") (data (i32.const 83733) "a") (data (i32.const 83736) "a") (data (i32.const 83739) "a") (data (i32.const 83742) "a") (data (i32.const 83745) "a") (data (i32.const 83748) "a") (data (i32.const 83751) "a") (data (i32.const 83754) "a") (data (i32.const 83757) "a") (data (i32.const 83760) "a") (data (i32.const 83763) "a") (data (i32.const 83766) "a") (data (i32.const 83769) "a") (data (i32.const 83772) "a") (data (i32.const 83775) "a") (data (i32.const 83778) "a") (data (i32.const 83781) "a") (data (i32.const 83784) "a") (data (i32.const 83787) "a") (data (i32.const 83790) "a") (data (i32.const 83793) "a") (data (i32.const 83796) "a") (data (i32.const 83799) "a") (data (i32.const 83802) "a") (data (i32.const 83805) "a") (data (i32.const 83808) "a") (data (i32.const 83811) "a") (data (i32.const 83814) "a") (data (i32.const 83817) "a") (data (i32.const 83820) "a") (data (i32.const 83823) "a") (data (i32.const 83826) "a") (data (i32.const 83829) "a") (data (i32.const 83832) "a") (data (i32.const 83835) "a") (data (i32.const 83838) "a") (data (i32.const 83841) "a") (data (i32.const 83844) "a") (data (i32.const 83847) "a") (data (i32.const 83850) "a") (data (i32.const 83853) "a") (data (i32.const 83856) "a") (data (i32.const 83859) "a") (data (i32.const 83862) "a") (data (i32.const 83865) "a") (data (i32.const 83868) "a") (data (i32.const 83871) "a") (data (i32.const 83874) "a") (data (i32.const 83877) "a") (data (i32.const 83880) "a") (data (i32.const 83883) "a") (data (i32.const 83886) "a") (data (i32.const 83889) "a") (data (i32.const 83892) "a") (data (i32.const 83895) "a") (data (i32.const 83898) "a") (data (i32.const 83901) "a") (data (i32.const 83904) "a") (data (i32.const 83907) "a") (data (i32.const 83910) "a") (data (i32.const 83913) "a") (data (i32.const 83916) "a") (data (i32.const 83919) "a") (data (i32.const 83922) "a") (data (i32.const 83925) "a") (data (i32.const 83928) "a") (data (i32.const 83931) "a") (data (i32.const 83934) "a") (data (i32.const 83937) "a") (data (i32.const 83940) "a") (data (i32.const 83943) "a") (data (i32.const 83946) "a") (data (i32.const 83949) "a") (data (i32.const 83952) "a") (data (i32.const 83955) "a") (data (i32.const 83958) "a") (data (i32.const 83961) "a") (data (i32.const 83964) "a") (data (i32.const 83967) "a") (data (i32.const 83970) "a") (data (i32.const 83973) "a") (data (i32.const 83976) "a") (data (i32.const 83979) "a") (data (i32.const 83982) "a") (data (i32.const 83985) "a") (data (i32.const 83988) "a") (data (i32.const 83991) "a") (data (i32.const 83994) "a") (data (i32.const 83997) "a") (data (i32.const 84000) "a") (data (i32.const 84003) "a") (data (i32.const 84006) "a") (data (i32.const 84009) "a") (data (i32.const 84012) "a") (data (i32.const 84015) "a") (data (i32.const 84018) "a") (data (i32.const 84021) "a") (data (i32.const 84024) "a") (data (i32.const 84027) "a") (data (i32.const 84030) "a") (data (i32.const 84033) "a") (data (i32.const 84036) "a") (data (i32.const 84039) "a") (data (i32.const 84042) "a") (data (i32.const 84045) "a") (data (i32.const 84048) "a") (data (i32.const 84051) "a") (data (i32.const 84054) "a") (data (i32.const 84057) "a") (data (i32.const 84060) "a") (data (i32.const 84063) "a") (data (i32.const 84066) "a") (data (i32.const 84069) "a") (data (i32.const 84072) "a") (data (i32.const 84075) "a") (data (i32.const 84078) "a") (data (i32.const 84081) "a") (data (i32.const 84084) "a") (data (i32.const 84087) "a") (data (i32.const 84090) "a") (data (i32.const 84093) "a") (data (i32.const 84096) "a") (data (i32.const 84099) "a") (data (i32.const 84102) "a") (data (i32.const 84105) "a") (data (i32.const 84108) "a") (data (i32.const 84111) "a") (data (i32.const 84114) "a") (data (i32.const 84117) "a") (data (i32.const 84120) "a") (data (i32.const 84123) "a") (data (i32.const 84126) "a") (data (i32.const 84129) "a") (data (i32.const 84132) "a") (data (i32.const 84135) "a") (data (i32.const 84138) "a") (data (i32.const 84141) "a") (data (i32.const 84144) "a") (data (i32.const 84147) "a") (data (i32.const 84150) "a") (data (i32.const 84153) "a") (data (i32.const 84156) "a") (data (i32.const 84159) "a") (data (i32.const 84162) "a") (data (i32.const 84165) "a") (data (i32.const 84168) "a") (data (i32.const 84171) "a") (data (i32.const 84174) "a") (data (i32.const 84177) "a") (data (i32.const 84180) "a") (data (i32.const 84183) "a") (data (i32.const 84186) "a") (data (i32.const 84189) "a") (data (i32.const 84192) "a") (data (i32.const 84195) "a") (data (i32.const 84198) "a") (data (i32.const 84201) "a") (data (i32.const 84204) "a") (data (i32.const 84207) "a") (data (i32.const 84210) "a") (data (i32.const 84213) "a") (data (i32.const 84216) "a") (data (i32.const 84219) "a") (data (i32.const 84222) "a") (data (i32.const 84225) "a") (data (i32.const 84228) "a") (data (i32.const 84231) "a") (data (i32.const 84234) "a") (data (i32.const 84237) "a") (data (i32.const 84240) "a") (data (i32.const 84243) "a") (data (i32.const 84246) "a") (data (i32.const 84249) "a") (data (i32.const 84252) "a") (data (i32.const 84255) "a") (data (i32.const 84258) "a") (data (i32.const 84261) "a") (data (i32.const 84264) "a") (data (i32.const 84267) "a") (data (i32.const 84270) "a") (data (i32.const 84273) "a") (data (i32.const 84276) "a") (data (i32.const 84279) "a") (data (i32.const 84282) "a") (data (i32.const 84285) "a") (data (i32.const 84288) "a") (data (i32.const 84291) "a") (data (i32.const 84294) "a") (data (i32.const 84297) "a") (data (i32.const 84300) "a") (data (i32.const 84303) "a") (data (i32.const 84306) "a") (data (i32.const 84309) "a") (data (i32.const 84312) "a") (data (i32.const 84315) "a") (data (i32.const 84318) "a") (data (i32.const 84321) "a") (data (i32.const 84324) "a") (data (i32.const 84327) "a") (data (i32.const 84330) "a") (data (i32.const 84333) "a") (data (i32.const 84336) "a") (data (i32.const 84339) "a") (data (i32.const 84342) "a") (data (i32.const 84345) "a") (data (i32.const 84348) "a") (data (i32.const 84351) "a") (data (i32.const 84354) "a") (data (i32.const 84357) "a") (data (i32.const 84360) "a") (data (i32.const 84363) "a") (data (i32.const 84366) "a") (data (i32.const 84369) "a") (data (i32.const 84372) "a") (data (i32.const 84375) "a") (data (i32.const 84378) "a") (data (i32.const 84381) "a") (data (i32.const 84384) "a") (data (i32.const 84387) "a") (data (i32.const 84390) "a") (data (i32.const 84393) "a") (data (i32.const 84396) "a") (data (i32.const 84399) "a") (data (i32.const 84402) "a") (data (i32.const 84405) "a") (data (i32.const 84408) "a") (data (i32.const 84411) "a") (data (i32.const 84414) "a") (data (i32.const 84417) "a") (data (i32.const 84420) "a") (data (i32.const 84423) "a") (data (i32.const 84426) "a") (data (i32.const 84429) "a") (data (i32.const 84432) "a") (data (i32.const 84435) "a") (data (i32.const 84438) "a") (data (i32.const 84441) "a") (data (i32.const 84444) "a") (data (i32.const 84447) "a") (data (i32.const 84450) "a") (data (i32.const 84453) "a") (data (i32.const 84456) "a") (data (i32.const 84459) "a") (data (i32.const 84462) "a") (data (i32.const 84465) "a") (data (i32.const 84468) "a") (data (i32.const 84471) "a") (data (i32.const 84474) "a") (data (i32.const 84477) "a") (data (i32.const 84480) "a") (data (i32.const 84483) "a") (data (i32.const 84486) "a") (data (i32.const 84489) "a") (data (i32.const 84492) "a") (data (i32.const 84495) "a") (data (i32.const 84498) "a") (data (i32.const 84501) "a") (data (i32.const 84504) "a") (data (i32.const 84507) "a") (data (i32.const 84510) "a") (data (i32.const 84513) "a") (data (i32.const 84516) "a") (data (i32.const 84519) "a") (data (i32.const 84522) "a") (data (i32.const 84525) "a") (data (i32.const 84528) "a") (data (i32.const 84531) "a") (data (i32.const 84534) "a") (data (i32.const 84537) "a") (data (i32.const 84540) "a") (data (i32.const 84543) "a") (data (i32.const 84546) "a") (data (i32.const 84549) "a") (data (i32.const 84552) "a") (data (i32.const 84555) "a") (data (i32.const 84558) "a") (data (i32.const 84561) "a") (data (i32.const 84564) "a") (data (i32.const 84567) "a") (data (i32.const 84570) "a") (data (i32.const 84573) "a") (data (i32.const 84576) "a") (data (i32.const 84579) "a") (data (i32.const 84582) "a") (data (i32.const 84585) "a") (data (i32.const 84588) "a") (data (i32.const 84591) "a") (data (i32.const 84594) "a") (data (i32.const 84597) "a") (data (i32.const 84600) "a") (data (i32.const 84603) "a") (data (i32.const 84606) "a") (data (i32.const 84609) "a") (data (i32.const 84612) "a") (data (i32.const 84615) "a") (data (i32.const 84618) "a") (data (i32.const 84621) "a") (data (i32.const 84624) "a") (data (i32.const 84627) "a") (data (i32.const 84630) "a") (data (i32.const 84633) "a") (data (i32.const 84636) "a") (data (i32.const 84639) "a") (data (i32.const 84642) "a") (data (i32.const 84645) "a") (data (i32.const 84648) "a") (data (i32.const 84651) "a") (data (i32.const 84654) "a") (data (i32.const 84657) "a") (data (i32.const 84660) "a") (data (i32.const 84663) "a") (data (i32.const 84666) "a") (data (i32.const 84669) "a") (data (i32.const 84672) "a") (data (i32.const 84675) "a") (data (i32.const 84678) "a") (data (i32.const 84681) "a") (data (i32.const 84684) "a") (data (i32.const 84687) "a") (data (i32.const 84690) "a") (data (i32.const 84693) "a") (data (i32.const 84696) "a") (data (i32.const 84699) "a") (data (i32.const 84702) "a") (data (i32.const 84705) "a") (data (i32.const 84708) "a") (data (i32.const 84711) "a") (data (i32.const 84714) "a") (data (i32.const 84717) "a") (data (i32.const 84720) "a") (data (i32.const 84723) "a") (data (i32.const 84726) "a") (data (i32.const 84729) "a") (data (i32.const 84732) "a") (data (i32.const 84735) "a") (data (i32.const 84738) "a") (data (i32.const 84741) "a") (data (i32.const 84744) "a") (data (i32.const 84747) "a") (data (i32.const 84750) "a") (data (i32.const 84753) "a") (data (i32.const 84756) "a") (data (i32.const 84759) "a") (data (i32.const 84762) "a") (data (i32.const 84765) "a") (data (i32.const 84768) "a") (data (i32.const 84771) "a") (data (i32.const 84774) "a") (data (i32.const 84777) "a") (data (i32.const 84780) "a") (data (i32.const 84783) "a") (data (i32.const 84786) "a") (data (i32.const 84789) "a") (data (i32.const 84792) "a") (data (i32.const 84795) "a") (data (i32.const 84798) "a") (data (i32.const 84801) "a") (data (i32.const 84804) "a") (data (i32.const 84807) "a") (data (i32.const 84810) "a") (data (i32.const 84813) "a") (data (i32.const 84816) "a") (data (i32.const 84819) "a") (data (i32.const 84822) "a") (data (i32.const 84825) "a") (data (i32.const 84828) "a") (data (i32.const 84831) "a") (data (i32.const 84834) "a") (data (i32.const 84837) "a") (data (i32.const 84840) "a") (data (i32.const 84843) "a") (data (i32.const 84846) "a") (data (i32.const 84849) "a") (data (i32.const 84852) "a") (data (i32.const 84855) "a") (data (i32.const 84858) "a") (data (i32.const 84861) "a") (data (i32.const 84864) "a") (data (i32.const 84867) "a") (data (i32.const 84870) "a") (data (i32.const 84873) "a") (data (i32.const 84876) "a") (data (i32.const 84879) "a") (data (i32.const 84882) "a") (data (i32.const 84885) "a") (data (i32.const 84888) "a") (data (i32.const 84891) "a") (data (i32.const 84894) "a") (data (i32.const 84897) "a") (data (i32.const 84900) "a") (data (i32.const 84903) "a") (data (i32.const 84906) "a") (data (i32.const 84909) "a") (data (i32.const 84912) "a") (data (i32.const 84915) "a") (data (i32.const 84918) "a") (data (i32.const 84921) "a") (data (i32.const 84924) "a") (data (i32.const 84927) "a") (data (i32.const 84930) "a") (data (i32.const 84933) "a") (data (i32.const 84936) "a") (data (i32.const 84939) "a") (data (i32.const 84942) "a") (data (i32.const 84945) "a") (data (i32.const 84948) "a") (data (i32.const 84951) "a") (data (i32.const 84954) "a") (data (i32.const 84957) "a") (data (i32.const 84960) "a") (data (i32.const 84963) "a") (data (i32.const 84966) "a") (data (i32.const 84969) "a") (data (i32.const 84972) "a") (data (i32.const 84975) "a") (data (i32.const 84978) "a") (data (i32.const 84981) "a") (data (i32.const 84984) "a") (data (i32.const 84987) "a") (data (i32.const 84990) "a") (data (i32.const 84993) "a") (data (i32.const 84996) "a") (data (i32.const 84999) "a") (data (i32.const 85002) "a") (data (i32.const 85005) "a") (data (i32.const 85008) "a") (data (i32.const 85011) "a") (data (i32.const 85014) "a") (data (i32.const 85017) "a") (data (i32.const 85020) "a") (data (i32.const 85023) "a") (data (i32.const 85026) "a") (data (i32.const 85029) "a") (data (i32.const 85032) "a") (data (i32.const 85035) "a") (data (i32.const 85038) "a") (data (i32.const 85041) "a") (data (i32.const 85044) "a") (data (i32.const 85047) "a") (data (i32.const 85050) "a") (data (i32.const 85053) "a") (data (i32.const 85056) "a") (data (i32.const 85059) "a") (data (i32.const 85062) "a") (data (i32.const 85065) "a") (data (i32.const 85068) "a") (data (i32.const 85071) "a") (data (i32.const 85074) "a") (data (i32.const 85077) "a") (data (i32.const 85080) "a") (data (i32.const 85083) "a") (data (i32.const 85086) "a") (data (i32.const 85089) "a") (data (i32.const 85092) "a") (data (i32.const 85095) "a") (data (i32.const 85098) "a") (data (i32.const 85101) "a") (data (i32.const 85104) "a") (data (i32.const 85107) "a") (data (i32.const 85110) "a") (data (i32.const 85113) "a") (data (i32.const 85116) "a") (data (i32.const 85119) "a") (data (i32.const 85122) "a") (data (i32.const 85125) "a") (data (i32.const 85128) "a") (data (i32.const 85131) "a") (data (i32.const 85134) "a") (data (i32.const 85137) "a") (data (i32.const 85140) "a") (data (i32.const 85143) "a") (data (i32.const 85146) "a") (data (i32.const 85149) "a") (data (i32.const 85152) "a") (data (i32.const 85155) "a") (data (i32.const 85158) "a") (data (i32.const 85161) "a") (data (i32.const 85164) "a") (data (i32.const 85167) "a") (data (i32.const 85170) "a") (data (i32.const 85173) "a") (data (i32.const 85176) "a") (data (i32.const 85179) "a") (data (i32.const 85182) "a") (data (i32.const 85185) "a") (data (i32.const 85188) "a") (data (i32.const 85191) "a") (data (i32.const 85194) "a") (data (i32.const 85197) "a") (data (i32.const 85200) "a") (data (i32.const 85203) "a") (data (i32.const 85206) "a") (data (i32.const 85209) "a") (data (i32.const 85212) "a") (data (i32.const 85215) "a") (data (i32.const 85218) "a") (data (i32.const 85221) "a") (data (i32.const 85224) "a") (data (i32.const 85227) "a") (data (i32.const 85230) "a") (data (i32.const 85233) "a") (data (i32.const 85236) "a") (data (i32.const 85239) "a") (data (i32.const 85242) "a") (data (i32.const 85245) "a") (data (i32.const 85248) "a") (data (i32.const 85251) "a") (data (i32.const 85254) "a") (data (i32.const 85257) "a") (data (i32.const 85260) "a") (data (i32.const 85263) "a") (data (i32.const 85266) "a") (data (i32.const 85269) "a") (data (i32.const 85272) "a") (data (i32.const 85275) "a") (data (i32.const 85278) "a") (data (i32.const 85281) "a") (data (i32.const 85284) "a") (data (i32.const 85287) "a") (data (i32.const 85290) "a") (data (i32.const 85293) "a") (data (i32.const 85296) "a") (data (i32.const 85299) "a") (data (i32.const 85302) "a") (data (i32.const 85305) "a") (data (i32.const 85308) "a") (data (i32.const 85311) "a") (data (i32.const 85314) "a") (data (i32.const 85317) "a") (data (i32.const 85320) "a") (data (i32.const 85323) "a") (data (i32.const 85326) "a") (data (i32.const 85329) "a") (data (i32.const 85332) "a") (data (i32.const 85335) "a") (data (i32.const 85338) "a") (data (i32.const 85341) "a") (data (i32.const 85344) "a") (data (i32.const 85347) "a") (data (i32.const 85350) "a") (data (i32.const 85353) "a") (data (i32.const 85356) "a") (data (i32.const 85359) "a") (data (i32.const 85362) "a") (data (i32.const 85365) "a") (data (i32.const 85368) "a") (data (i32.const 85371) "a") (data (i32.const 85374) "a") (data (i32.const 85377) "a") (data (i32.const 85380) "a") (data (i32.const 85383) "a") (data (i32.const 85386) "a") (data (i32.const 85389) "a") (data (i32.const 85392) "a") (data (i32.const 85395) "a") (data (i32.const 85398) "a") (data (i32.const 85401) "a") (data (i32.const 85404) "a") (data (i32.const 85407) "a") (data (i32.const 85410) "a") (data (i32.const 85413) "a") (data (i32.const 85416) "a") (data (i32.const 85419) "a") (data (i32.const 85422) "a") (data (i32.const 85425) "a") (data (i32.const 85428) "a") (data (i32.const 85431) "a") (data (i32.const 85434) "a") (data (i32.const 85437) "a") (data (i32.const 85440) "a") (data (i32.const 85443) "a") (data (i32.const 85446) "a") (data (i32.const 85449) "a") (data (i32.const 85452) "a") (data (i32.const 85455) "a") (data (i32.const 85458) "a") (data (i32.const 85461) "a") (data (i32.const 85464) "a") (data (i32.const 85467) "a") (data (i32.const 85470) "a") (data (i32.const 85473) "a") (data (i32.const 85476) "a") (data (i32.const 85479) "a") (data (i32.const 85482) "a") (data (i32.const 85485) "a") (data (i32.const 85488) "a") (data (i32.const 85491) "a") (data (i32.const 85494) "a") (data (i32.const 85497) "a") (data (i32.const 85500) "a") (data (i32.const 85503) "a") (data (i32.const 85506) "a") (data (i32.const 85509) "a") (data (i32.const 85512) "a") (data (i32.const 85515) "a") (data (i32.const 85518) "a") (data (i32.const 85521) "a") (data (i32.const 85524) "a") (data (i32.const 85527) "a") (data (i32.const 85530) "a") (data (i32.const 85533) "a") (data (i32.const 85536) "a") (data (i32.const 85539) "a") (data (i32.const 85542) "a") (data (i32.const 85545) "a") (data (i32.const 85548) "a") (data (i32.const 85551) "a") (data (i32.const 85554) "a") (data (i32.const 85557) "a") (data (i32.const 85560) "a") (data (i32.const 85563) "a") (data (i32.const 85566) "a") (data (i32.const 85569) "a") (data (i32.const 85572) "a") (data (i32.const 85575) "a") (data (i32.const 85578) "a") (data (i32.const 85581) "a") (data (i32.const 85584) "a") (data (i32.const 85587) "a") (data (i32.const 85590) "a") (data (i32.const 85593) "a") (data (i32.const 85596) "a") (data (i32.const 85599) "a") (data (i32.const 85602) "a") (data (i32.const 85605) "a") (data (i32.const 85608) "a") (data (i32.const 85611) "a") (data (i32.const 85614) "a") (data (i32.const 85617) "a") (data (i32.const 85620) "a") (data (i32.const 85623) "a") (data (i32.const 85626) "a") (data (i32.const 85629) "a") (data (i32.const 85632) "a") (data (i32.const 85635) "a") (data (i32.const 85638) "a") (data (i32.const 85641) "a") (data (i32.const 85644) "a") (data (i32.const 85647) "a") (data (i32.const 85650) "a") (data (i32.const 85653) "a") (data (i32.const 85656) "a") (data (i32.const 85659) "a") (data (i32.const 85662) "a") (data (i32.const 85665) "a") (data (i32.const 85668) "a") (data (i32.const 85671) "a") (data (i32.const 85674) "a") (data (i32.const 85677) "a") (data (i32.const 85680) "a") (data (i32.const 85683) "a") (data (i32.const 85686) "a") (data (i32.const 85689) "a") (data (i32.const 85692) "a") (data (i32.const 85695) "a") (data (i32.const 85698) "a") (data (i32.const 85701) "a") (data (i32.const 85704) "a") (data (i32.const 85707) "a") (data (i32.const 85710) "a") (data (i32.const 85713) "a") (data (i32.const 85716) "a") (data (i32.const 85719) "a") (data (i32.const 85722) "a") (data (i32.const 85725) "a") (data (i32.const 85728) "a") (data (i32.const 85731) "a") (data (i32.const 85734) "a") (data (i32.const 85737) "a") (data (i32.const 85740) "a") (data (i32.const 85743) "a") (data (i32.const 85746) "a") (data (i32.const 85749) "a") (data (i32.const 85752) "a") (data (i32.const 85755) "a") (data (i32.const 85758) "a") (data (i32.const 85761) "a") (data (i32.const 85764) "a") (data (i32.const 85767) "a") (data (i32.const 85770) "a") (data (i32.const 85773) "a") (data (i32.const 85776) "a") (data (i32.const 85779) "a") (data (i32.const 85782) "a") (data (i32.const 85785) "a") (data (i32.const 85788) "a") (data (i32.const 85791) "a") (data (i32.const 85794) "a") (data (i32.const 85797) "a") (data (i32.const 85800) "a") (data (i32.const 85803) "a") (data (i32.const 85806) "a") (data (i32.const 85809) "a") (data (i32.const 85812) "a") (data (i32.const 85815) "a") (data (i32.const 85818) "a") (data (i32.const 85821) "a") (data (i32.const 85824) "a") (data (i32.const 85827) "a") (data (i32.const 85830) "a") (data (i32.const 85833) "a") (data (i32.const 85836) "a") (data (i32.const 85839) "a") (data (i32.const 85842) "a") (data (i32.const 85845) "a") (data (i32.const 85848) "a") (data (i32.const 85851) "a") (data (i32.const 85854) "a") (data (i32.const 85857) "a") (data (i32.const 85860) "a") (data (i32.const 85863) "a") (data (i32.const 85866) "a") (data (i32.const 85869) "a") (data (i32.const 85872) "a") (data (i32.const 85875) "a") (data (i32.const 85878) "a") (data (i32.const 85881) "a") (data (i32.const 85884) "a") (data (i32.const 85887) "a") (data (i32.const 85890) "a") (data (i32.const 85893) "a") (data (i32.const 85896) "a") (data (i32.const 85899) "a") (data (i32.const 85902) "a") (data (i32.const 85905) "a") (data (i32.const 85908) "a") (data (i32.const 85911) "a") (data (i32.const 85914) "a") (data (i32.const 85917) "a") (data (i32.const 85920) "a") (data (i32.const 85923) "a") (data (i32.const 85926) "a") (data (i32.const 85929) "a") (data (i32.const 85932) "a") (data (i32.const 85935) "a") (data (i32.const 85938) "a") (data (i32.const 85941) "a") (data (i32.const 85944) "a") (data (i32.const 85947) "a") (data (i32.const 85950) "a") (data (i32.const 85953) "a") (data (i32.const 85956) "a") (data (i32.const 85959) "a") (data (i32.const 85962) "a") (data (i32.const 85965) "a") (data (i32.const 85968) "a") (data (i32.const 85971) "a") (data (i32.const 85974) "a") (data (i32.const 85977) "a") (data (i32.const 85980) "a") (data (i32.const 85983) "a") (data (i32.const 85986) "a") (data (i32.const 85989) "a") (data (i32.const 85992) "a") (data (i32.const 85995) "a") (data (i32.const 85998) "a") (data (i32.const 86001) "a") (data (i32.const 86004) "a") (data (i32.const 86007) "a") (data (i32.const 86010) "a") (data (i32.const 86013) "a") (data (i32.const 86016) "a") (data (i32.const 86019) "a") (data (i32.const 86022) "a") (data (i32.const 86025) "a") (data (i32.const 86028) "a") (data (i32.const 86031) "a") (data (i32.const 86034) "a") (data (i32.const 86037) "a") (data (i32.const 86040) "a") (data (i32.const 86043) "a") (data (i32.const 86046) "a") (data (i32.const 86049) "a") (data (i32.const 86052) "a") (data (i32.const 86055) "a") (data (i32.const 86058) "a") (data (i32.const 86061) "a") (data (i32.const 86064) "a") (data (i32.const 86067) "a") (data (i32.const 86070) "a") (data (i32.const 86073) "a") (data (i32.const 86076) "a") (data (i32.const 86079) "a") (data (i32.const 86082) "a") (data (i32.const 86085) "a") (data (i32.const 86088) "a") (data (i32.const 86091) "a") (data (i32.const 86094) "a") (data (i32.const 86097) "a") (data (i32.const 86100) "a") (data (i32.const 86103) "a") (data (i32.const 86106) "a") (data (i32.const 86109) "a") (data (i32.const 86112) "a") (data (i32.const 86115) "a") (data (i32.const 86118) "a") (data (i32.const 86121) "a") (data (i32.const 86124) "a") (data (i32.const 86127) "a") (data (i32.const 86130) "a") (data (i32.const 86133) "a") (data (i32.const 86136) "a") (data (i32.const 86139) "a") (data (i32.const 86142) "a") (data (i32.const 86145) "a") (data (i32.const 86148) "a") (data (i32.const 86151) "a") (data (i32.const 86154) "a") (data (i32.const 86157) "a") (data (i32.const 86160) "a") (data (i32.const 86163) "a") (data (i32.const 86166) "a") (data (i32.const 86169) "a") (data (i32.const 86172) "a") (data (i32.const 86175) "a") (data (i32.const 86178) "a") (data (i32.const 86181) "a") (data (i32.const 86184) "a") (data (i32.const 86187) "a") (data (i32.const 86190) "a") (data (i32.const 86193) "a") (data (i32.const 86196) "a") (data (i32.const 86199) "a") (data (i32.const 86202) "a") (data (i32.const 86205) "a") (data (i32.const 86208) "a") (data (i32.const 86211) "a") (data (i32.const 86214) "a") (data (i32.const 86217) "a") (data (i32.const 86220) "a") (data (i32.const 86223) "a") (data (i32.const 86226) "a") (data (i32.const 86229) "a") (data (i32.const 86232) "a") (data (i32.const 86235) "a") (data (i32.const 86238) "a") (data (i32.const 86241) "a") (data (i32.const 86244) "a") (data (i32.const 86247) "a") (data (i32.const 86250) "a") (data (i32.const 86253) "a") (data (i32.const 86256) "a") (data (i32.const 86259) "a") (data (i32.const 86262) "a") (data (i32.const 86265) "a") (data (i32.const 86268) "a") (data (i32.const 86271) "a") (data (i32.const 86274) "a") (data (i32.const 86277) "a") (data (i32.const 86280) "a") (data (i32.const 86283) "a") (data (i32.const 86286) "a") (data (i32.const 86289) "a") (data (i32.const 86292) "a") (data (i32.const 86295) "a") (data (i32.const 86298) "a") (data (i32.const 86301) "a") (data (i32.const 86304) "a") (data (i32.const 86307) "a") (data (i32.const 86310) "a") (data (i32.const 86313) "a") (data (i32.const 86316) "a") (data (i32.const 86319) "a") (data (i32.const 86322) "a") (data (i32.const 86325) "a") (data (i32.const 86328) "a") (data (i32.const 86331) "a") (data (i32.const 86334) "a") (data (i32.const 86337) "a") (data (i32.const 86340) "a") (data (i32.const 86343) "a") (data (i32.const 86346) "a") (data (i32.const 86349) "a") (data (i32.const 86352) "a") (data (i32.const 86355) "a") (data (i32.const 86358) "a") (data (i32.const 86361) "a") (data (i32.const 86364) "a") (data (i32.const 86367) "a") (data (i32.const 86370) "a") (data (i32.const 86373) "a") (data (i32.const 86376) "a") (data (i32.const 86379) "a") (data (i32.const 86382) "a") (data (i32.const 86385) "a") (data (i32.const 86388) "a") (data (i32.const 86391) "a") (data (i32.const 86394) "a") (data (i32.const 86397) "a") (data (i32.const 86400) "a") (data (i32.const 86403) "a") (data (i32.const 86406) "a") (data (i32.const 86409) "a") (data (i32.const 86412) "a") (data (i32.const 86415) "a") (data (i32.const 86418) "a") (data (i32.const 86421) "a") (data (i32.const 86424) "a") (data (i32.const 86427) "a") (data (i32.const 86430) "a") (data (i32.const 86433) "a") (data (i32.const 86436) "a") (data (i32.const 86439) "a") (data (i32.const 86442) "a") (data (i32.const 86445) "a") (data (i32.const 86448) "a") (data (i32.const 86451) "a") (data (i32.const 86454) "a") (data (i32.const 86457) "a") (data (i32.const 86460) "a") (data (i32.const 86463) "a") (data (i32.const 86466) "a") (data (i32.const 86469) "a") (data (i32.const 86472) "a") (data (i32.const 86475) "a") (data (i32.const 86478) "a") (data (i32.const 86481) "a") (data (i32.const 86484) "a") (data (i32.const 86487) "a") (data (i32.const 86490) "a") (data (i32.const 86493) "a") (data (i32.const 86496) "a") (data (i32.const 86499) "a") (data (i32.const 86502) "a") (data (i32.const 86505) "a") (data (i32.const 86508) "a") (data (i32.const 86511) "a") (data (i32.const 86514) "a") (data (i32.const 86517) "a") (data (i32.const 86520) "a") (data (i32.const 86523) "a") (data (i32.const 86526) "a") (data (i32.const 86529) "a") (data (i32.const 86532) "a") (data (i32.const 86535) "a") (data (i32.const 86538) "a") (data (i32.const 86541) "a") (data (i32.const 86544) "a") (data (i32.const 86547) "a") (data (i32.const 86550) "a") (data (i32.const 86553) "a") (data (i32.const 86556) "a") (data (i32.const 86559) "a") (data (i32.const 86562) "a") (data (i32.const 86565) "a") (data (i32.const 86568) "a") (data (i32.const 86571) "a") (data (i32.const 86574) "a") (data (i32.const 86577) "a") (data (i32.const 86580) "a") (data (i32.const 86583) "a") (data (i32.const 86586) "a") (data (i32.const 86589) "a") (data (i32.const 86592) "a") (data (i32.const 86595) "a") (data (i32.const 86598) "a") (data (i32.const 86601) "a") (data (i32.const 86604) "a") (data (i32.const 86607) "a") (data (i32.const 86610) "a") (data (i32.const 86613) "a") (data (i32.const 86616) "a") (data (i32.const 86619) "a") (data (i32.const 86622) "a") (data (i32.const 86625) "a") (data (i32.const 86628) "a") (data (i32.const 86631) "a") (data (i32.const 86634) "a") (data (i32.const 86637) "a") (data (i32.const 86640) "a") (data (i32.const 86643) "a") (data (i32.const 86646) "a") (data (i32.const 86649) "a") (data (i32.const 86652) "a") (data (i32.const 86655) "a") (data (i32.const 86658) "a") (data (i32.const 86661) "a") (data (i32.const 86664) "a") (data (i32.const 86667) "a") (data (i32.const 86670) "a") (data (i32.const 86673) "a") (data (i32.const 86676) "a") (data (i32.const 86679) "a") (data (i32.const 86682) "a") (data (i32.const 86685) "a") (data (i32.const 86688) "a") (data (i32.const 86691) "a") (data (i32.const 86694) "a") (data (i32.const 86697) "a") (data (i32.const 86700) "a") (data (i32.const 86703) "a") (data (i32.const 86706) "a") (data (i32.const 86709) "a") (data (i32.const 86712) "a") (data (i32.const 86715) "a") (data (i32.const 86718) "a") (data (i32.const 86721) "a") (data (i32.const 86724) "a") (data (i32.const 86727) "a") (data (i32.const 86730) "a") (data (i32.const 86733) "a") (data (i32.const 86736) "a") (data (i32.const 86739) "a") (data (i32.const 86742) "a") (data (i32.const 86745) "a") (data (i32.const 86748) "a") (data (i32.const 86751) "a") (data (i32.const 86754) "a") (data (i32.const 86757) "a") (data (i32.const 86760) "a") (data (i32.const 86763) "a") (data (i32.const 86766) "a") (data (i32.const 86769) "a") (data (i32.const 86772) "a") (data (i32.const 86775) "a") (data (i32.const 86778) "a") (data (i32.const 86781) "a") (data (i32.const 86784) "a") (data (i32.const 86787) "a") (data (i32.const 86790) "a") (data (i32.const 86793) "a") (data (i32.const 86796) "a") (data (i32.const 86799) "a") (data (i32.const 86802) "a") (data (i32.const 86805) "a") (data (i32.const 86808) "a") (data (i32.const 86811) "a") (data (i32.const 86814) "a") (data (i32.const 86817) "a") (data (i32.const 86820) "a") (data (i32.const 86823) "a") (data (i32.const 86826) "a") (data (i32.const 86829) "a") (data (i32.const 86832) "a") (data (i32.const 86835) "a") (data (i32.const 86838) "a") (data (i32.const 86841) "a") (data (i32.const 86844) "a") (data (i32.const 86847) "a") (data (i32.const 86850) "a") (data (i32.const 86853) "a") (data (i32.const 86856) "a") (data (i32.const 86859) "a") (data (i32.const 86862) "a") (data (i32.const 86865) "a") (data (i32.const 86868) "a") (data (i32.const 86871) "a") (data (i32.const 86874) "a") (data (i32.const 86877) "a") (data (i32.const 86880) "a") (data (i32.const 86883) "a") (data (i32.const 86886) "a") (data (i32.const 86889) "a") (data (i32.const 86892) "a") (data (i32.const 86895) "a") (data (i32.const 86898) "a") (data (i32.const 86901) "a") (data (i32.const 86904) "a") (data (i32.const 86907) "a") (data (i32.const 86910) "a") (data (i32.const 86913) "a") (data (i32.const 86916) "a") (data (i32.const 86919) "a") (data (i32.const 86922) "a") (data (i32.const 86925) "a") (data (i32.const 86928) "a") (data (i32.const 86931) "a") (data (i32.const 86934) "a") (data (i32.const 86937) "a") (data (i32.const 86940) "a") (data (i32.const 86943) "a") (data (i32.const 86946) "a") (data (i32.const 86949) "a") (data (i32.const 86952) "a") (data (i32.const 86955) "a") (data (i32.const 86958) "a") (data (i32.const 86961) "a") (data (i32.const 86964) "a") (data (i32.const 86967) "a") (data (i32.const 86970) "a") (data (i32.const 86973) "a") (data (i32.const 86976) "a") (data (i32.const 86979) "a") (data (i32.const 86982) "a") (data (i32.const 86985) "a") (data (i32.const 86988) "a") (data (i32.const 86991) "a") (data (i32.const 86994) "a") (data (i32.const 86997) "a") (data (i32.const 87000) "a") (data (i32.const 87003) "a") (data (i32.const 87006) "a") (data (i32.const 87009) "a") (data (i32.const 87012) "a") (data (i32.const 87015) "a") (data (i32.const 87018) "a") (data (i32.const 87021) "a") (data (i32.const 87024) "a") (data (i32.const 87027) "a") (data (i32.const 87030) "a") (data (i32.const 87033) "a") (data (i32.const 87036) "a") (data (i32.const 87039) "a") (data (i32.const 87042) "a") (data (i32.const 87045) "a") (data (i32.const 87048) "a") (data (i32.const 87051) "a") (data (i32.const 87054) "a") (data (i32.const 87057) "a") (data (i32.const 87060) "a") (data (i32.const 87063) "a") (data (i32.const 87066) "a") (data (i32.const 87069) "a") (data (i32.const 87072) "a") (data (i32.const 87075) "a") (data (i32.const 87078) "a") (data (i32.const 87081) "a") (data (i32.const 87084) "a") (data (i32.const 87087) "a") (data (i32.const 87090) "a") (data (i32.const 87093) "a") (data (i32.const 87096) "a") (data (i32.const 87099) "a") (data (i32.const 87102) "a") (data (i32.const 87105) "a") (data (i32.const 87108) "a") (data (i32.const 87111) "a") (data (i32.const 87114) "a") (data (i32.const 87117) "a") (data (i32.const 87120) "a") (data (i32.const 87123) "a") (data (i32.const 87126) "a") (data (i32.const 87129) "a") (data (i32.const 87132) "a") (data (i32.const 87135) "a") (data (i32.const 87138) "a") (data (i32.const 87141) "a") (data (i32.const 87144) "a") (data (i32.const 87147) "a") (data (i32.const 87150) "a") (data (i32.const 87153) "a") (data (i32.const 87156) "a") (data (i32.const 87159) "a") (data (i32.const 87162) "a") (data (i32.const 87165) "a") (data (i32.const 87168) "a") (data (i32.const 87171) "a") (data (i32.const 87174) "a") (data (i32.const 87177) "a") (data (i32.const 87180) "a") (data (i32.const 87183) "a") (data (i32.const 87186) "a") (data (i32.const 87189) "a") (data (i32.const 87192) "a") (data (i32.const 87195) "a") (data (i32.const 87198) "a") (data (i32.const 87201) "a") (data (i32.const 87204) "a") (data (i32.const 87207) "a") (data (i32.const 87210) "a") (data (i32.const 87213) "a") (data (i32.const 87216) "a") (data (i32.const 87219) "a") (data (i32.const 87222) "a") (data (i32.const 87225) "a") (data (i32.const 87228) "a") (data (i32.const 87231) "a") (data (i32.const 87234) "a") (data (i32.const 87237) "a") (data (i32.const 87240) "a") (data (i32.const 87243) "a") (data (i32.const 87246) "a") (data (i32.const 87249) "a") (data (i32.const 87252) "a") (data (i32.const 87255) "a") (data (i32.const 87258) "a") (data (i32.const 87261) "a") (data (i32.const 87264) "a") (data (i32.const 87267) "a") (data (i32.const 87270) "a") (data (i32.const 87273) "a") (data (i32.const 87276) "a") (data (i32.const 87279) "a") (data (i32.const 87282) "a") (data (i32.const 87285) "a") (data (i32.const 87288) "a") (data (i32.const 87291) "a") (data (i32.const 87294) "a") (data (i32.const 87297) "a") (data (i32.const 87300) "a") (data (i32.const 87303) "a") (data (i32.const 87306) "a") (data (i32.const 87309) "a") (data (i32.const 87312) "a") (data (i32.const 87315) "a") (data (i32.const 87318) "a") (data (i32.const 87321) "a") (data (i32.const 87324) "a") (data (i32.const 87327) "a") (data (i32.const 87330) "a") (data (i32.const 87333) "a") (data (i32.const 87336) "a") (data (i32.const 87339) "a") (data (i32.const 87342) "a") (data (i32.const 87345) "a") (data (i32.const 87348) "a") (data (i32.const 87351) "a") (data (i32.const 87354) "a") (data (i32.const 87357) "a") (data (i32.const 87360) "a") (data (i32.const 87363) "a") (data (i32.const 87366) "a") (data (i32.const 87369) "a") (data (i32.const 87372) "a") (data (i32.const 87375) "a") (data (i32.const 87378) "a") (data (i32.const 87381) "a") (data (i32.const 87384) "a") (data (i32.const 87387) "a") (data (i32.const 87390) "a") (data (i32.const 87393) "a") (data (i32.const 87396) "a") (data (i32.const 87399) "a") (data (i32.const 87402) "a") (data (i32.const 87405) "a") (data (i32.const 87408) "a") (data (i32.const 87411) "a") (data (i32.const 87414) "a") (data (i32.const 87417) "a") (data (i32.const 87420) "a") (data (i32.const 87423) "a") (data (i32.const 87426) "a") (data (i32.const 87429) "a") (data (i32.const 87432) "a") (data (i32.const 87435) "a") (data (i32.const 87438) "a") (data (i32.const 87441) "a") (data (i32.const 87444) "a") (data (i32.const 87447) "a") (data (i32.const 87450) "a") (data (i32.const 87453) "a") (data (i32.const 87456) "a") (data (i32.const 87459) "a") (data (i32.const 87462) "a") (data (i32.const 87465) "a") (data (i32.const 87468) "a") (data (i32.const 87471) "a") (data (i32.const 87474) "a") (data (i32.const 87477) "a") (data (i32.const 87480) "a") (data (i32.const 87483) "a") (data (i32.const 87486) "a") (data (i32.const 87489) "a") (data (i32.const 87492) "a") (data (i32.const 87495) "a") (data (i32.const 87498) "a") (data (i32.const 87501) "a") (data (i32.const 87504) "a") (data (i32.const 87507) "a") (data (i32.const 87510) "a") (data (i32.const 87513) "a") (data (i32.const 87516) "a") (data (i32.const 87519) "a") (data (i32.const 87522) "a") (data (i32.const 87525) "a") (data (i32.const 87528) "a") (data (i32.const 87531) "a") (data (i32.const 87534) "a") (data (i32.const 87537) "a") (data (i32.const 87540) "a") (data (i32.const 87543) "a") (data (i32.const 87546) "a") (data (i32.const 87549) "a") (data (i32.const 87552) "a") (data (i32.const 87555) "a") (data (i32.const 87558) "a") (data (i32.const 87561) "a") (data (i32.const 87564) "a") (data (i32.const 87567) "a") (data (i32.const 87570) "a") (data (i32.const 87573) "a") (data (i32.const 87576) "a") (data (i32.const 87579) "a") (data (i32.const 87582) "a") (data (i32.const 87585) "a") (data (i32.const 87588) "a") (data (i32.const 87591) "a") (data (i32.const 87594) "a") (data (i32.const 87597) "a") (data (i32.const 87600) "a") (data (i32.const 87603) "a") (data (i32.const 87606) "a") (data (i32.const 87609) "a") (data (i32.const 87612) "a") (data (i32.const 87615) "a") (data (i32.const 87618) "a") (data (i32.const 87621) "a") (data (i32.const 87624) "a") (data (i32.const 87627) "a") (data (i32.const 87630) "a") (data (i32.const 87633) "a") (data (i32.const 87636) "a") (data (i32.const 87639) "a") (data (i32.const 87642) "a") (data (i32.const 87645) "a") (data (i32.const 87648) "a") (data (i32.const 87651) "a") (data (i32.const 87654) "a") (data (i32.const 87657) "a") (data (i32.const 87660) "a") (data (i32.const 87663) "a") (data (i32.const 87666) "a") (data (i32.const 87669) "a") (data (i32.const 87672) "a") (data (i32.const 87675) "a") (data (i32.const 87678) "a") (data (i32.const 87681) "a") (data (i32.const 87684) "a") (data (i32.const 87687) "a") (data (i32.const 87690) "a") (data (i32.const 87693) "a") (data (i32.const 87696) "a") (data (i32.const 87699) "a") (data (i32.const 87702) "a") (data (i32.const 87705) "a") (data (i32.const 87708) "a") (data (i32.const 87711) "a") (data (i32.const 87714) "a") (data (i32.const 87717) "a") (data (i32.const 87720) "a") (data (i32.const 87723) "a") (data (i32.const 87726) "a") (data (i32.const 87729) "a") (data (i32.const 87732) "a") (data (i32.const 87735) "a") (data (i32.const 87738) "a") (data (i32.const 87741) "a") (data (i32.const 87744) "a") (data (i32.const 87747) "a") (data (i32.const 87750) "a") (data (i32.const 87753) "a") (data (i32.const 87756) "a") (data (i32.const 87759) "a") (data (i32.const 87762) "a") (data (i32.const 87765) "a") (data (i32.const 87768) "a") (data (i32.const 87771) "a") (data (i32.const 87774) "a") (data (i32.const 87777) "a") (data (i32.const 87780) "a") (data (i32.const 87783) "a") (data (i32.const 87786) "a") (data (i32.const 87789) "a") (data (i32.const 87792) "a") (data (i32.const 87795) "a") (data (i32.const 87798) "a") (data (i32.const 87801) "a") (data (i32.const 87804) "a") (data (i32.const 87807) "a") (data (i32.const 87810) "a") (data (i32.const 87813) "a") (data (i32.const 87816) "a") (data (i32.const 87819) "a") (data (i32.const 87822) "a") (data (i32.const 87825) "a") (data (i32.const 87828) "a") (data (i32.const 87831) "a") (data (i32.const 87834) "a") (data (i32.const 87837) "a") (data (i32.const 87840) "a") (data (i32.const 87843) "a") (data (i32.const 87846) "a") (data (i32.const 87849) "a") (data (i32.const 87852) "a") (data (i32.const 87855) "a") (data (i32.const 87858) "a") (data (i32.const 87861) "a") (data (i32.const 87864) "a") (data (i32.const 87867) "a") (data (i32.const 87870) "a") (data (i32.const 87873) "a") (data (i32.const 87876) "a") (data (i32.const 87879) "a") (data (i32.const 87882) "a") (data (i32.const 87885) "a") (data (i32.const 87888) "a") (data (i32.const 87891) "a") (data (i32.const 87894) "a") (data (i32.const 87897) "a") (data (i32.const 87900) "a") (data (i32.const 87903) "a") (data (i32.const 87906) "a") (data (i32.const 87909) "a") (data (i32.const 87912) "a") (data (i32.const 87915) "a") (data (i32.const 87918) "a") (data (i32.const 87921) "a") (data (i32.const 87924) "a") (data (i32.const 87927) "a") (data (i32.const 87930) "a") (data (i32.const 87933) "a") (data (i32.const 87936) "a") (data (i32.const 87939) "a") (data (i32.const 87942) "a") (data (i32.const 87945) "a") (data (i32.const 87948) "a") (data (i32.const 87951) "a") (data (i32.const 87954) "a") (data (i32.const 87957) "a") (data (i32.const 87960) "a") (data (i32.const 87963) "a") (data (i32.const 87966) "a") (data (i32.const 87969) "a") (data (i32.const 87972) "a") (data (i32.const 87975) "a") (data (i32.const 87978) "a") (data (i32.const 87981) "a") (data (i32.const 87984) "a") (data (i32.const 87987) "a") (data (i32.const 87990) "a") (data (i32.const 87993) "a") (data (i32.const 87996) "a") (data (i32.const 87999) "a") (data (i32.const 88002) "a") (data (i32.const 88005) "a") (data (i32.const 88008) "a") (data (i32.const 88011) "a") (data (i32.const 88014) "a") (data (i32.const 88017) "a") (data (i32.const 88020) "a") (data (i32.const 88023) "a") (data (i32.const 88026) "a") (data (i32.const 88029) "a") (data (i32.const 88032) "a") (data (i32.const 88035) "a") (data (i32.const 88038) "a") (data (i32.const 88041) "a") (data (i32.const 88044) "a") (data (i32.const 88047) "a") (data (i32.const 88050) "a") (data (i32.const 88053) "a") (data (i32.const 88056) "a") (data (i32.const 88059) "a") (data (i32.const 88062) "a") (data (i32.const 88065) "a") (data (i32.const 88068) "a") (data (i32.const 88071) "a") (data (i32.const 88074) "a") (data (i32.const 88077) "a") (data (i32.const 88080) "a") (data (i32.const 88083) "a") (data (i32.const 88086) "a") (data (i32.const 88089) "a") (data (i32.const 88092) "a") (data (i32.const 88095) "a") (data (i32.const 88098) "a") (data (i32.const 88101) "a") (data (i32.const 88104) "a") (data (i32.const 88107) "a") (data (i32.const 88110) "a") (data (i32.const 88113) "a") (data (i32.const 88116) "a") (data (i32.const 88119) "a") (data (i32.const 88122) "a") (data (i32.const 88125) "a") (data (i32.const 88128) "a") (data (i32.const 88131) "a") (data (i32.const 88134) "a") (data (i32.const 88137) "a") (data (i32.const 88140) "a") (data (i32.const 88143) "a") (data (i32.const 88146) "a") (data (i32.const 88149) "a") (data (i32.const 88152) "a") (data (i32.const 88155) "a") (data (i32.const 88158) "a") (data (i32.const 88161) "a") (data (i32.const 88164) "a") (data (i32.const 88167) "a") (data (i32.const 88170) "a") (data (i32.const 88173) "a") (data (i32.const 88176) "a") (data (i32.const 88179) "a") (data (i32.const 88182) "a") (data (i32.const 88185) "a") (data (i32.const 88188) "a") (data (i32.const 88191) "a") (data (i32.const 88194) "a") (data (i32.const 88197) "a") (data (i32.const 88200) "a") (data (i32.const 88203) "a") (data (i32.const 88206) "a") (data (i32.const 88209) "a") (data (i32.const 88212) "a") (data (i32.const 88215) "a") (data (i32.const 88218) "a") (data (i32.const 88221) "a") (data (i32.const 88224) "a") (data (i32.const 88227) "a") (data (i32.const 88230) "a") (data (i32.const 88233) "a") (data (i32.const 88236) "a") (data (i32.const 88239) "a") (data (i32.const 88242) "a") (data (i32.const 88245) "a") (data (i32.const 88248) "a") (data (i32.const 88251) "a") (data (i32.const 88254) "a") (data (i32.const 88257) "a") (data (i32.const 88260) "a") (data (i32.const 88263) "a") (data (i32.const 88266) "a") (data (i32.const 88269) "a") (data (i32.const 88272) "a") (data (i32.const 88275) "a") (data (i32.const 88278) "a") (data (i32.const 88281) "a") (data (i32.const 88284) "a") (data (i32.const 88287) "a") (data (i32.const 88290) "a") (data (i32.const 88293) "a") (data (i32.const 88296) "a") (data (i32.const 88299) "a") (data (i32.const 88302) "a") (data (i32.const 88305) "a") (data (i32.const 88308) "a") (data (i32.const 88311) "a") (data (i32.const 88314) "a") (data (i32.const 88317) "a") (data (i32.const 88320) "a") (data (i32.const 88323) "a") (data (i32.const 88326) "a") (data (i32.const 88329) "a") (data (i32.const 88332) "a") (data (i32.const 88335) "a") (data (i32.const 88338) "a") (data (i32.const 88341) "a") (data (i32.const 88344) "a") (data (i32.const 88347) "a") (data (i32.const 88350) "a") (data (i32.const 88353) "a") (data (i32.const 88356) "a") (data (i32.const 88359) "a") (data (i32.const 88362) "a") (data (i32.const 88365) "a") (data (i32.const 88368) "a") (data (i32.const 88371) "a") (data (i32.const 88374) "a") (data (i32.const 88377) "a") (data (i32.const 88380) "a") (data (i32.const 88383) "a") (data (i32.const 88386) "a") (data (i32.const 88389) "a") (data (i32.const 88392) "a") (data (i32.const 88395) "a") (data (i32.const 88398) "a") (data (i32.const 88401) "a") (data (i32.const 88404) "a") (data (i32.const 88407) "a") (data (i32.const 88410) "a") (data (i32.const 88413) "a") (data (i32.const 88416) "a") (data (i32.const 88419) "a") (data (i32.const 88422) "a") (data (i32.const 88425) "a") (data (i32.const 88428) "a") (data (i32.const 88431) "a") (data (i32.const 88434) "a") (data (i32.const 88437) "a") (data (i32.const 88440) "a") (data (i32.const 88443) "a") (data (i32.const 88446) "a") (data (i32.const 88449) "a") (data (i32.const 88452) "a") (data (i32.const 88455) "a") (data (i32.const 88458) "a") (data (i32.const 88461) "a") (data (i32.const 88464) "a") (data (i32.const 88467) "a") (data (i32.const 88470) "a") (data (i32.const 88473) "a") (data (i32.const 88476) "a") (data (i32.const 88479) "a") (data (i32.const 88482) "a") (data (i32.const 88485) "a") (data (i32.const 88488) "a") (data (i32.const 88491) "a") (data (i32.const 88494) "a") (data (i32.const 88497) "a") (data (i32.const 88500) "a") (data (i32.const 88503) "a") (data (i32.const 88506) "a") (data (i32.const 88509) "a") (data (i32.const 88512) "a") (data (i32.const 88515) "a") (data (i32.const 88518) "a") (data (i32.const 88521) "a") (data (i32.const 88524) "a") (data (i32.const 88527) "a") (data (i32.const 88530) "a") (data (i32.const 88533) "a") (data (i32.const 88536) "a") (data (i32.const 88539) "a") (data (i32.const 88542) "a") (data (i32.const 88545) "a") (data (i32.const 88548) "a") (data (i32.const 88551) "a") (data (i32.const 88554) "a") (data (i32.const 88557) "a") (data (i32.const 88560) "a") (data (i32.const 88563) "a") (data (i32.const 88566) "a") (data (i32.const 88569) "a") (data (i32.const 88572) "a") (data (i32.const 88575) "a") (data (i32.const 88578) "a") (data (i32.const 88581) "a") (data (i32.const 88584) "a") (data (i32.const 88587) "a") (data (i32.const 88590) "a") (data (i32.const 88593) "a") (data (i32.const 88596) "a") (data (i32.const 88599) "a") (data (i32.const 88602) "a") (data (i32.const 88605) "a") (data (i32.const 88608) "a") (data (i32.const 88611) "a") (data (i32.const 88614) "a") (data (i32.const 88617) "a") (data (i32.const 88620) "a") (data (i32.const 88623) "a") (data (i32.const 88626) "a") (data (i32.const 88629) "a") (data (i32.const 88632) "a") (data (i32.const 88635) "a") (data (i32.const 88638) "a") (data (i32.const 88641) "a") (data (i32.const 88644) "a") (data (i32.const 88647) "a") (data (i32.const 88650) "a") (data (i32.const 88653) "a") (data (i32.const 88656) "a") (data (i32.const 88659) "a") (data (i32.const 88662) "a") (data (i32.const 88665) "a") (data (i32.const 88668) "a") (data (i32.const 88671) "a") (data (i32.const 88674) "a") (data (i32.const 88677) "a") (data (i32.const 88680) "a") (data (i32.const 88683) "a") (data (i32.const 88686) "a") (data (i32.const 88689) "a") (data (i32.const 88692) "a") (data (i32.const 88695) "a") (data (i32.const 88698) "a") (data (i32.const 88701) "a") (data (i32.const 88704) "a") (data (i32.const 88707) "a") (data (i32.const 88710) "a") (data (i32.const 88713) "a") (data (i32.const 88716) "a") (data (i32.const 88719) "a") (data (i32.const 88722) "a") (data (i32.const 88725) "a") (data (i32.const 88728) "a") (data (i32.const 88731) "a") (data (i32.const 88734) "a") (data (i32.const 88737) "a") (data (i32.const 88740) "a") (data (i32.const 88743) "a") (data (i32.const 88746) "a") (data (i32.const 88749) "a") (data (i32.const 88752) "a") (data (i32.const 88755) "a") (data (i32.const 88758) "a") (data (i32.const 88761) "a") (data (i32.const 88764) "a") (data (i32.const 88767) "a") (data (i32.const 88770) "a") (data (i32.const 88773) "a") (data (i32.const 88776) "a") (data (i32.const 88779) "a") (data (i32.const 88782) "a") (data (i32.const 88785) "a") (data (i32.const 88788) "a") (data (i32.const 88791) "a") (data (i32.const 88794) "a") (data (i32.const 88797) "a") (data (i32.const 88800) "a") (data (i32.const 88803) "a") (data (i32.const 88806) "a") (data (i32.const 88809) "a") (data (i32.const 88812) "a") (data (i32.const 88815) "a") (data (i32.const 88818) "a") (data (i32.const 88821) "a") (data (i32.const 88824) "a") (data (i32.const 88827) "a") (data (i32.const 88830) "a") (data (i32.const 88833) "a") (data (i32.const 88836) "a") (data (i32.const 88839) "a") (data (i32.const 88842) "a") (data (i32.const 88845) "a") (data (i32.const 88848) "a") (data (i32.const 88851) "a") (data (i32.const 88854) "a") (data (i32.const 88857) "a") (data (i32.const 88860) "a") (data (i32.const 88863) "a") (data (i32.const 88866) "a") (data (i32.const 88869) "a") (data (i32.const 88872) "a") (data (i32.const 88875) "a") (data (i32.const 88878) "a") (data (i32.const 88881) "a") (data (i32.const 88884) "a") (data (i32.const 88887) "a") (data (i32.const 88890) "a") (data (i32.const 88893) "a") (data (i32.const 88896) "a") (data (i32.const 88899) "a") (data (i32.const 88902) "a") (data (i32.const 88905) "a") (data (i32.const 88908) "a") (data (i32.const 88911) "a") (data (i32.const 88914) "a") (data (i32.const 88917) "a") (data (i32.const 88920) "a") (data (i32.const 88923) "a") (data (i32.const 88926) "a") (data (i32.const 88929) "a") (data (i32.const 88932) "a") (data (i32.const 88935) "a") (data (i32.const 88938) "a") (data (i32.const 88941) "a") (data (i32.const 88944) "a") (data (i32.const 88947) "a") (data (i32.const 88950) "a") (data (i32.const 88953) "a") (data (i32.const 88956) "a") (data (i32.const 88959) "a") (data (i32.const 88962) "a") (data (i32.const 88965) "a") (data (i32.const 88968) "a") (data (i32.const 88971) "a") (data (i32.const 88974) "a") (data (i32.const 88977) "a") (data (i32.const 88980) "a") (data (i32.const 88983) "a") (data (i32.const 88986) "a") (data (i32.const 88989) "a") (data (i32.const 88992) "a") (data (i32.const 88995) "a") (data (i32.const 88998) "a") (data (i32.const 89001) "a") (data (i32.const 89004) "a") (data (i32.const 89007) "a") (data (i32.const 89010) "a") (data (i32.const 89013) "a") (data (i32.const 89016) "a") (data (i32.const 89019) "a") (data (i32.const 89022) "a") (data (i32.const 89025) "a") (data (i32.const 89028) "a") (data (i32.const 89031) "a") (data (i32.const 89034) "a") (data (i32.const 89037) "a") (data (i32.const 89040) "a") (data (i32.const 89043) "a") (data (i32.const 89046) "a") (data (i32.const 89049) "a") (data (i32.const 89052) "a") (data (i32.const 89055) "a") (data (i32.const 89058) "a") (data (i32.const 89061) "a") (data (i32.const 89064) "a") (data (i32.const 89067) "a") (data (i32.const 89070) "a") (data (i32.const 89073) "a") (data (i32.const 89076) "a") (data (i32.const 89079) "a") (data (i32.const 89082) "a") (data (i32.const 89085) "a") (data (i32.const 89088) "a") (data (i32.const 89091) "a") (data (i32.const 89094) "a") (data (i32.const 89097) "a") (data (i32.const 89100) "a") (data (i32.const 89103) "a") (data (i32.const 89106) "a") (data (i32.const 89109) "a") (data (i32.const 89112) "a") (data (i32.const 89115) "a") (data (i32.const 89118) "a") (data (i32.const 89121) "a") (data (i32.const 89124) "a") (data (i32.const 89127) "a") (data (i32.const 89130) "a") (data (i32.const 89133) "a") (data (i32.const 89136) "a") (data (i32.const 89139) "a") (data (i32.const 89142) "a") (data (i32.const 89145) "a") (data (i32.const 89148) "a") (data (i32.const 89151) "a") (data (i32.const 89154) "a") (data (i32.const 89157) "a") (data (i32.const 89160) "a") (data (i32.const 89163) "a") (data (i32.const 89166) "a") (data (i32.const 89169) "a") (data (i32.const 89172) "a") (data (i32.const 89175) "a") (data (i32.const 89178) "a") (data (i32.const 89181) "a") (data (i32.const 89184) "a") (data (i32.const 89187) "a") (data (i32.const 89190) "a") (data (i32.const 89193) "a") (data (i32.const 89196) "a") (data (i32.const 89199) "a") (data (i32.const 89202) "a") (data (i32.const 89205) "a") (data (i32.const 89208) "a") (data (i32.const 89211) "a") (data (i32.const 89214) "a") (data (i32.const 89217) "a") (data (i32.const 89220) "a") (data (i32.const 89223) "a") (data (i32.const 89226) "a") (data (i32.const 89229) "a") (data (i32.const 89232) "a") (data (i32.const 89235) "a") (data (i32.const 89238) "a") (data (i32.const 89241) "a") (data (i32.const 89244) "a") (data (i32.const 89247) "a") (data (i32.const 89250) "a") (data (i32.const 89253) "a") (data (i32.const 89256) "a") (data (i32.const 89259) "a") (data (i32.const 89262) "a") (data (i32.const 89265) "a") (data (i32.const 89268) "a") (data (i32.const 89271) "a") (data (i32.const 89274) "a") (data (i32.const 89277) "a") (data (i32.const 89280) "a") (data (i32.const 89283) "a") (data (i32.const 89286) "a") (data (i32.const 89289) "a") (data (i32.const 89292) "a") (data (i32.const 89295) "a") (data (i32.const 89298) "a") (data (i32.const 89301) "a") (data (i32.const 89304) "a") (data (i32.const 89307) "a") (data (i32.const 89310) "a") (data (i32.const 89313) "a") (data (i32.const 89316) "a") (data (i32.const 89319) "a") (data (i32.const 89322) "a") (data (i32.const 89325) "a") (data (i32.const 89328) "a") (data (i32.const 89331) "a") (data (i32.const 89334) "a") (data (i32.const 89337) "a") (data (i32.const 89340) "a") (data (i32.const 89343) "a") (data (i32.const 89346) "a") (data (i32.const 89349) "a") (data (i32.const 89352) "a") (data (i32.const 89355) "a") (data (i32.const 89358) "a") (data (i32.const 89361) "a") (data (i32.const 89364) "a") (data (i32.const 89367) "a") (data (i32.const 89370) "a") (data (i32.const 89373) "a") (data (i32.const 89376) "a") (data (i32.const 89379) "a") (data (i32.const 89382) "a") (data (i32.const 89385) "a") (data (i32.const 89388) "a") (data (i32.const 89391) "a") (data (i32.const 89394) "a") (data (i32.const 89397) "a") (data (i32.const 89400) "a") (data (i32.const 89403) "a") (data (i32.const 89406) "a") (data (i32.const 89409) "a") (data (i32.const 89412) "a") (data (i32.const 89415) "a") (data (i32.const 89418) "a") (data (i32.const 89421) "a") (data (i32.const 89424) "a") (data (i32.const 89427) "a") (data (i32.const 89430) "a") (data (i32.const 89433) "a") (data (i32.const 89436) "a") (data (i32.const 89439) "a") (data (i32.const 89442) "a") (data (i32.const 89445) "a") (data (i32.const 89448) "a") (data (i32.const 89451) "a") (data (i32.const 89454) "a") (data (i32.const 89457) "a") (data (i32.const 89460) "a") (data (i32.const 89463) "a") (data (i32.const 89466) "a") (data (i32.const 89469) "a") (data (i32.const 89472) "a") (data (i32.const 89475) "a") (data (i32.const 89478) "a") (data (i32.const 89481) "a") (data (i32.const 89484) "a") (data (i32.const 89487) "a") (data (i32.const 89490) "a") (data (i32.const 89493) "a") (data (i32.const 89496) "a") (data (i32.const 89499) "a") (data (i32.const 89502) "a") (data (i32.const 89505) "a") (data (i32.const 89508) "a") (data (i32.const 89511) "a") (data (i32.const 89514) "a") (data (i32.const 89517) "a") (data (i32.const 89520) "a") (data (i32.const 89523) "a") (data (i32.const 89526) "a") (data (i32.const 89529) "a") (data (i32.const 89532) "a") (data (i32.const 89535) "a") (data (i32.const 89538) "a") (data (i32.const 89541) "a") (data (i32.const 89544) "a") (data (i32.const 89547) "a") (data (i32.const 89550) "a") (data (i32.const 89553) "a") (data (i32.const 89556) "a") (data (i32.const 89559) "a") (data (i32.const 89562) "a") (data (i32.const 89565) "a") (data (i32.const 89568) "a") (data (i32.const 89571) "a") (data (i32.const 89574) "a") (data (i32.const 89577) "a") (data (i32.const 89580) "a") (data (i32.const 89583) "a") (data (i32.const 89586) "a") (data (i32.const 89589) "a") (data (i32.const 89592) "a") (data (i32.const 89595) "a") (data (i32.const 89598) "a") (data (i32.const 89601) "a") (data (i32.const 89604) "a") (data (i32.const 89607) "a") (data (i32.const 89610) "a") (data (i32.const 89613) "a") (data (i32.const 89616) "a") (data (i32.const 89619) "a") (data (i32.const 89622) "a") (data (i32.const 89625) "a") (data (i32.const 89628) "a") (data (i32.const 89631) "a") (data (i32.const 89634) "a") (data (i32.const 89637) "a") (data (i32.const 89640) "a") (data (i32.const 89643) "a") (data (i32.const 89646) "a") (data (i32.const 89649) "a") (data (i32.const 89652) "a") (data (i32.const 89655) "a") (data (i32.const 89658) "a") (data (i32.const 89661) "a") (data (i32.const 89664) "a") (data (i32.const 89667) "a") (data (i32.const 89670) "a") (data (i32.const 89673) "a") (data (i32.const 89676) "a") (data (i32.const 89679) "a") (data (i32.const 89682) "a") (data (i32.const 89685) "a") (data (i32.const 89688) "a") (data (i32.const 89691) "a") (data (i32.const 89694) "a") (data (i32.const 89697) "a") (data (i32.const 89700) "a") (data (i32.const 89703) "a") (data (i32.const 89706) "a") (data (i32.const 89709) "a") (data (i32.const 89712) "a") (data (i32.const 89715) "a") (data (i32.const 89718) "a") (data (i32.const 89721) "a") (data (i32.const 89724) "a") (data (i32.const 89727) "a") (data (i32.const 89730) "a") (data (i32.const 89733) "a") (data (i32.const 89736) "a") (data (i32.const 89739) "a") (data (i32.const 89742) "a") (data (i32.const 89745) "a") (data (i32.const 89748) "a") (data (i32.const 89751) "a") (data (i32.const 89754) "a") (data (i32.const 89757) "a") (data (i32.const 89760) "a") (data (i32.const 89763) "a") (data (i32.const 89766) "a") (data (i32.const 89769) "a") (data (i32.const 89772) "a") (data (i32.const 89775) "a") (data (i32.const 89778) "a") (data (i32.const 89781) "a") (data (i32.const 89784) "a") (data (i32.const 89787) "a") (data (i32.const 89790) "a") (data (i32.const 89793) "a") (data (i32.const 89796) "a") (data (i32.const 89799) "a") (data (i32.const 89802) "a") (data (i32.const 89805) "a") (data (i32.const 89808) "a") (data (i32.const 89811) "a") (data (i32.const 89814) "a") (data (i32.const 89817) "a") (data (i32.const 89820) "a") (data (i32.const 89823) "a") (data (i32.const 89826) "a") (data (i32.const 89829) "a") (data (i32.const 89832) "a") (data (i32.const 89835) "a") (data (i32.const 89838) "a") (data (i32.const 89841) "a") (data (i32.const 89844) "a") (data (i32.const 89847) "a") (data (i32.const 89850) "a") (data (i32.const 89853) "a") (data (i32.const 89856) "a") (data (i32.const 89859) "a") (data (i32.const 89862) "a") (data (i32.const 89865) "a") (data (i32.const 89868) "a") (data (i32.const 89871) "a") (data (i32.const 89874) "a") (data (i32.const 89877) "a") (data (i32.const 89880) "a") (data (i32.const 89883) "a") (data (i32.const 89886) "a") (data (i32.const 89889) "a") (data (i32.const 89892) "a") (data (i32.const 89895) "a") (data (i32.const 89898) "a") (data (i32.const 89901) "a") (data (i32.const 89904) "a") (data (i32.const 89907) "a") (data (i32.const 89910) "a") (data (i32.const 89913) "a") (data (i32.const 89916) "a") (data (i32.const 89919) "a") (data (i32.const 89922) "a") (data (i32.const 89925) "a") (data (i32.const 89928) "a") (data (i32.const 89931) "a") (data (i32.const 89934) "a") (data (i32.const 89937) "a") (data (i32.const 89940) "a") (data (i32.const 89943) "a") (data (i32.const 89946) "a") (data (i32.const 89949) "a") (data (i32.const 89952) "a") (data (i32.const 89955) "a") (data (i32.const 89958) "a") (data (i32.const 89961) "a") (data (i32.const 89964) "a") (data (i32.const 89967) "a") (data (i32.const 89970) "a") (data (i32.const 89973) "a") (data (i32.const 89976) "a") (data (i32.const 89979) "a") (data (i32.const 89982) "a") (data (i32.const 89985) "a") (data (i32.const 89988) "a") (data (i32.const 89991) "a") (data (i32.const 89994) "a") (data (i32.const 89997) "a") (data (i32.const 90000) "a") (data (i32.const 90003) "a") (data (i32.const 90006) "a") (data (i32.const 90009) "a") (data (i32.const 90012) "a") (data (i32.const 90015) "a") (data (i32.const 90018) "a") (data (i32.const 90021) "a") (data (i32.const 90024) "a") (data (i32.const 90027) "a") (data (i32.const 90030) "a") (data (i32.const 90033) "a") (data (i32.const 90036) "a") (data (i32.const 90039) "a") (data (i32.const 90042) "a") (data (i32.const 90045) "a") (data (i32.const 90048) "a") (data (i32.const 90051) "a") (data (i32.const 90054) "a") (data (i32.const 90057) "a") (data (i32.const 90060) "a") (data (i32.const 90063) "a") (data (i32.const 90066) "a") (data (i32.const 90069) "a") (data (i32.const 90072) "a") (data (i32.const 90075) "a") (data (i32.const 90078) "a") (data (i32.const 90081) "a") (data (i32.const 90084) "a") (data (i32.const 90087) "a") (data (i32.const 90090) "a") (data (i32.const 90093) "a") (data (i32.const 90096) "a") (data (i32.const 90099) "a") (data (i32.const 90102) "a") (data (i32.const 90105) "a") (data (i32.const 90108) "a") (data (i32.const 90111) "a") (data (i32.const 90114) "a") (data (i32.const 90117) "a") (data (i32.const 90120) "a") (data (i32.const 90123) "a") (data (i32.const 90126) "a") (data (i32.const 90129) "a") (data (i32.const 90132) "a") (data (i32.const 90135) "a") (data (i32.const 90138) "a") (data (i32.const 90141) "a") (data (i32.const 90144) "a") (data (i32.const 90147) "a") (data (i32.const 90150) "a") (data (i32.const 90153) "a") (data (i32.const 90156) "a") (data (i32.const 90159) "a") (data (i32.const 90162) "a") (data (i32.const 90165) "a") (data (i32.const 90168) "a") (data (i32.const 90171) "a") (data (i32.const 90174) "a") (data (i32.const 90177) "a") (data (i32.const 90180) "a") (data (i32.const 90183) "a") (data (i32.const 90186) "a") (data (i32.const 90189) "a") (data (i32.const 90192) "a") (data (i32.const 90195) "a") (data (i32.const 90198) "a") (data (i32.const 90201) "a") (data (i32.const 90204) "a") (data (i32.const 90207) "a") (data (i32.const 90210) "a") (data (i32.const 90213) "a") (data (i32.const 90216) "a") (data (i32.const 90219) "a") (data (i32.const 90222) "a") (data (i32.const 90225) "a") (data (i32.const 90228) "a") (data (i32.const 90231) "a") (data (i32.const 90234) "a") (data (i32.const 90237) "a") (data (i32.const 90240) "a") (data (i32.const 90243) "a") (data (i32.const 90246) "a") (data (i32.const 90249) "a") (data (i32.const 90252) "a") (data (i32.const 90255) "a") (data (i32.const 90258) "a") (data (i32.const 90261) "a") (data (i32.const 90264) "a") (data (i32.const 90267) "a") (data (i32.const 90270) "a") (data (i32.const 90273) "a") (data (i32.const 90276) "a") (data (i32.const 90279) "a") (data (i32.const 90282) "a") (data (i32.const 90285) "a") (data (i32.const 90288) "a") (data (i32.const 90291) "a") (data (i32.const 90294) "a") (data (i32.const 90297) "a") (data (i32.const 90300) "a") (data (i32.const 90303) "a") (data (i32.const 90306) "a") (data (i32.const 90309) "a") (data (i32.const 90312) "a") (data (i32.const 90315) "a") (data (i32.const 90318) "a") (data (i32.const 90321) "a") (data (i32.const 90324) "a") (data (i32.const 90327) "a") (data (i32.const 90330) "a") (data (i32.const 90333) "a") (data (i32.const 90336) "a") (data (i32.const 90339) "a") (data (i32.const 90342) "a") (data (i32.const 90345) "a") (data (i32.const 90348) "a") (data (i32.const 90351) "a") (data (i32.const 90354) "a") (data (i32.const 90357) "a") (data (i32.const 90360) "a") (data (i32.const 90363) "a") (data (i32.const 90366) "a") (data (i32.const 90369) "a") (data (i32.const 90372) "a") (data (i32.const 90375) "a") (data (i32.const 90378) "a") (data (i32.const 90381) "a") (data (i32.const 90384) "a") (data (i32.const 90387) "a") (data (i32.const 90390) "a") (data (i32.const 90393) "a") (data (i32.const 90396) "a") (data (i32.const 90399) "a") (data (i32.const 90402) "a") (data (i32.const 90405) "a") (data (i32.const 90408) "a") (data (i32.const 90411) "a") (data (i32.const 90414) "a") (data (i32.const 90417) "a") (data (i32.const 90420) "a") (data (i32.const 90423) "a") (data (i32.const 90426) "a") (data (i32.const 90429) "a") (data (i32.const 90432) "a") (data (i32.const 90435) "a") (data (i32.const 90438) "a") (data (i32.const 90441) "a") (data (i32.const 90444) "a") (data (i32.const 90447) "a") (data (i32.const 90450) "a") (data (i32.const 90453) "a") (data (i32.const 90456) "a") (data (i32.const 90459) "a") (data (i32.const 90462) "a") (data (i32.const 90465) "a") (data (i32.const 90468) "a") (data (i32.const 90471) "a") (data (i32.const 90474) "a") (data (i32.const 90477) "a") (data (i32.const 90480) "a") (data (i32.const 90483) "a") (data (i32.const 90486) "a") (data (i32.const 90489) "a") (data (i32.const 90492) "a") (data (i32.const 90495) "a") (data (i32.const 90498) "a") (data (i32.const 90501) "a") (data (i32.const 90504) "a") (data (i32.const 90507) "a") (data (i32.const 90510) "a") (data (i32.const 90513) "a") (data (i32.const 90516) "a") (data (i32.const 90519) "a") (data (i32.const 90522) "a") (data (i32.const 90525) "a") (data (i32.const 90528) "a") (data (i32.const 90531) "a") (data (i32.const 90534) "a") (data (i32.const 90537) "a") (data (i32.const 90540) "a") (data (i32.const 90543) "a") (data (i32.const 90546) "a") (data (i32.const 90549) "a") (data (i32.const 90552) "a") (data (i32.const 90555) "a") (data (i32.const 90558) "a") (data (i32.const 90561) "a") (data (i32.const 90564) "a") (data (i32.const 90567) "a") (data (i32.const 90570) "a") (data (i32.const 90573) "a") (data (i32.const 90576) "a") (data (i32.const 90579) "a") (data (i32.const 90582) "a") (data (i32.const 90585) "a") (data (i32.const 90588) "a") (data (i32.const 90591) "a") (data (i32.const 90594) "a") (data (i32.const 90597) "a") (data (i32.const 90600) "a") (data (i32.const 90603) "a") (data (i32.const 90606) "a") (data (i32.const 90609) "a") (data (i32.const 90612) "a") (data (i32.const 90615) "a") (data (i32.const 90618) "a") (data (i32.const 90621) "a") (data (i32.const 90624) "a") (data (i32.const 90627) "a") (data (i32.const 90630) "a") (data (i32.const 90633) "a") (data (i32.const 90636) "a") (data (i32.const 90639) "a") (data (i32.const 90642) "a") (data (i32.const 90645) "a") (data (i32.const 90648) "a") (data (i32.const 90651) "a") (data (i32.const 90654) "a") (data (i32.const 90657) "a") (data (i32.const 90660) "a") (data (i32.const 90663) "a") (data (i32.const 90666) "a") (data (i32.const 90669) "a") (data (i32.const 90672) "a") (data (i32.const 90675) "a") (data (i32.const 90678) "a") (data (i32.const 90681) "a") (data (i32.const 90684) "a") (data (i32.const 90687) "a") (data (i32.const 90690) "a") (data (i32.const 90693) "a") (data (i32.const 90696) "a") (data (i32.const 90699) "a") (data (i32.const 90702) "a") (data (i32.const 90705) "a") (data (i32.const 90708) "a") (data (i32.const 90711) "a") (data (i32.const 90714) "a") (data (i32.const 90717) "a") (data (i32.const 90720) "a") (data (i32.const 90723) "a") (data (i32.const 90726) "a") (data (i32.const 90729) "a") (data (i32.const 90732) "a") (data (i32.const 90735) "a") (data (i32.const 90738) "a") (data (i32.const 90741) "a") (data (i32.const 90744) "a") (data (i32.const 90747) "a") (data (i32.const 90750) "a") (data (i32.const 90753) "a") (data (i32.const 90756) "a") (data (i32.const 90759) "a") (data (i32.const 90762) "a") (data (i32.const 90765) "a") (data (i32.const 90768) "a") (data (i32.const 90771) "a") (data (i32.const 90774) "a") (data (i32.const 90777) "a") (data (i32.const 90780) "a") (data (i32.const 90783) "a") (data (i32.const 90786) "a") (data (i32.const 90789) "a") (data (i32.const 90792) "a") (data (i32.const 90795) "a") (data (i32.const 90798) "a") (data (i32.const 90801) "a") (data (i32.const 90804) "a") (data (i32.const 90807) "a") (data (i32.const 90810) "a") (data (i32.const 90813) "a") (data (i32.const 90816) "a") (data (i32.const 90819) "a") (data (i32.const 90822) "a") (data (i32.const 90825) "a") (data (i32.const 90828) "a") (data (i32.const 90831) "a") (data (i32.const 90834) "a") (data (i32.const 90837) "a") (data (i32.const 90840) "a") (data (i32.const 90843) "a") (data (i32.const 90846) "a") (data (i32.const 90849) "a") (data (i32.const 90852) "a") (data (i32.const 90855) "a") (data (i32.const 90858) "a") (data (i32.const 90861) "a") (data (i32.const 90864) "a") (data (i32.const 90867) "a") (data (i32.const 90870) "a") (data (i32.const 90873) "a") (data (i32.const 90876) "a") (data (i32.const 90879) "a") (data (i32.const 90882) "a") (data (i32.const 90885) "a") (data (i32.const 90888) "a") (data (i32.const 90891) "a") (data (i32.const 90894) "a") (data (i32.const 90897) "a") (data (i32.const 90900) "a") (data (i32.const 90903) "a") (data (i32.const 90906) "a") (data (i32.const 90909) "a") (data (i32.const 90912) "a") (data (i32.const 90915) "a") (data (i32.const 90918) "a") (data (i32.const 90921) "a") (data (i32.const 90924) "a") (data (i32.const 90927) "a") (data (i32.const 90930) "a") (data (i32.const 90933) "a") (data (i32.const 90936) "a") (data (i32.const 90939) "a") (data (i32.const 90942) "a") (data (i32.const 90945) "a") (data (i32.const 90948) "a") (data (i32.const 90951) "a") (data (i32.const 90954) "a") (data (i32.const 90957) "a") (data (i32.const 90960) "a") (data (i32.const 90963) "a") (data (i32.const 90966) "a") (data (i32.const 90969) "a") (data (i32.const 90972) "a") (data (i32.const 90975) "a") (data (i32.const 90978) "a") (data (i32.const 90981) "a") (data (i32.const 90984) "a") (data (i32.const 90987) "a") (data (i32.const 90990) "a") (data (i32.const 90993) "a") (data (i32.const 90996) "a") (data (i32.const 90999) "a") (data (i32.const 91002) "a") (data (i32.const 91005) "a") (data (i32.const 91008) "a") (data (i32.const 91011) "a") (data (i32.const 91014) "a") (data (i32.const 91017) "a") (data (i32.const 91020) "a") (data (i32.const 91023) "a") (data (i32.const 91026) "a") (data (i32.const 91029) "a") (data (i32.const 91032) "a") (data (i32.const 91035) "a") (data (i32.const 91038) "a") (data (i32.const 91041) "a") (data (i32.const 91044) "a") (data (i32.const 91047) "a") (data (i32.const 91050) "a") (data (i32.const 91053) "a") (data (i32.const 91056) "a") (data (i32.const 91059) "a") (data (i32.const 91062) "a") (data (i32.const 91065) "a") (data (i32.const 91068) "a") (data (i32.const 91071) "a") (data (i32.const 91074) "a") (data (i32.const 91077) "a") (data (i32.const 91080) "a") (data (i32.const 91083) "a") (data (i32.const 91086) "a") (data (i32.const 91089) "a") (data (i32.const 91092) "a") (data (i32.const 91095) "a") (data (i32.const 91098) "a") (data (i32.const 91101) "a") (data (i32.const 91104) "a") (data (i32.const 91107) "a") (data (i32.const 91110) "a") (data (i32.const 91113) "a") (data (i32.const 91116) "a") (data (i32.const 91119) "a") (data (i32.const 91122) "a") (data (i32.const 91125) "a") (data (i32.const 91128) "a") (data (i32.const 91131) "a") (data (i32.const 91134) "a") (data (i32.const 91137) "a") (data (i32.const 91140) "a") (data (i32.const 91143) "a") (data (i32.const 91146) "a") (data (i32.const 91149) "a") (data (i32.const 91152) "a") (data (i32.const 91155) "a") (data (i32.const 91158) "a") (data (i32.const 91161) "a") (data (i32.const 91164) "a") (data (i32.const 91167) "a") (data (i32.const 91170) "a") (data (i32.const 91173) "a") (data (i32.const 91176) "a") (data (i32.const 91179) "a") (data (i32.const 91182) "a") (data (i32.const 91185) "a") (data (i32.const 91188) "a") (data (i32.const 91191) "a") (data (i32.const 91194) "a") (data (i32.const 91197) "a") (data (i32.const 91200) "a") (data (i32.const 91203) "a") (data (i32.const 91206) "a") (data (i32.const 91209) "a") (data (i32.const 91212) "a") (data (i32.const 91215) "a") (data (i32.const 91218) "a") (data (i32.const 91221) "a") (data (i32.const 91224) "a") (data (i32.const 91227) "a") (data (i32.const 91230) "a") (data (i32.const 91233) "a") (data (i32.const 91236) "a") (data (i32.const 91239) "a") (data (i32.const 91242) "a") (data (i32.const 91245) "a") (data (i32.const 91248) "a") (data (i32.const 91251) "a") (data (i32.const 91254) "a") (data (i32.const 91257) "a") (data (i32.const 91260) "a") (data (i32.const 91263) "a") (data (i32.const 91266) "a") (data (i32.const 91269) "a") (data (i32.const 91272) "a") (data (i32.const 91275) "a") (data (i32.const 91278) "a") (data (i32.const 91281) "a") (data (i32.const 91284) "a") (data (i32.const 91287) "a") (data (i32.const 91290) "a") (data (i32.const 91293) "a") (data (i32.const 91296) "a") (data (i32.const 91299) "a") (data (i32.const 91302) "a") (data (i32.const 91305) "a") (data (i32.const 91308) "a") (data (i32.const 91311) "a") (data (i32.const 91314) "a") (data (i32.const 91317) "a") (data (i32.const 91320) "a") (data (i32.const 91323) "a") (data (i32.const 91326) "a") (data (i32.const 91329) "a") (data (i32.const 91332) "a") (data (i32.const 91335) "a") (data (i32.const 91338) "a") (data (i32.const 91341) "a") (data (i32.const 91344) "a") (data (i32.const 91347) "a") (data (i32.const 91350) "a") (data (i32.const 91353) "a") (data (i32.const 91356) "a") (data (i32.const 91359) "a") (data (i32.const 91362) "a") (data (i32.const 91365) "a") (data (i32.const 91368) "a") (data (i32.const 91371) "a") (data (i32.const 91374) "a") (data (i32.const 91377) "a") (data (i32.const 91380) "a") (data (i32.const 91383) "a") (data (i32.const 91386) "a") (data (i32.const 91389) "a") (data (i32.const 91392) "a") (data (i32.const 91395) "a") (data (i32.const 91398) "a") (data (i32.const 91401) "a") (data (i32.const 91404) "a") (data (i32.const 91407) "a") (data (i32.const 91410) "a") (data (i32.const 91413) "a") (data (i32.const 91416) "a") (data (i32.const 91419) "a") (data (i32.const 91422) "a") (data (i32.const 91425) "a") (data (i32.const 91428) "a") (data (i32.const 91431) "a") (data (i32.const 91434) "a") (data (i32.const 91437) "a") (data (i32.const 91440) "a") (data (i32.const 91443) "a") (data (i32.const 91446) "a") (data (i32.const 91449) "a") (data (i32.const 91452) "a") (data (i32.const 91455) "a") (data (i32.const 91458) "a") (data (i32.const 91461) "a") (data (i32.const 91464) "a") (data (i32.const 91467) "a") (data (i32.const 91470) "a") (data (i32.const 91473) "a") (data (i32.const 91476) "a") (data (i32.const 91479) "a") (data (i32.const 91482) "a") (data (i32.const 91485) "a") (data (i32.const 91488) "a") (data (i32.const 91491) "a") (data (i32.const 91494) "a") (data (i32.const 91497) "a") (data (i32.const 91500) "a") (data (i32.const 91503) "a") (data (i32.const 91506) "a") (data (i32.const 91509) "a") (data (i32.const 91512) "a") (data (i32.const 91515) "a") (data (i32.const 91518) "a") (data (i32.const 91521) "a") (data (i32.const 91524) "a") (data (i32.const 91527) "a") (data (i32.const 91530) "a") (data (i32.const 91533) "a") (data (i32.const 91536) "a") (data (i32.const 91539) "a") (data (i32.const 91542) "a") (data (i32.const 91545) "a") (data (i32.const 91548) "a") (data (i32.const 91551) "a") (data (i32.const 91554) "a") (data (i32.const 91557) "a") (data (i32.const 91560) "a") (data (i32.const 91563) "a") (data (i32.const 91566) "a") (data (i32.const 91569) "a") (data (i32.const 91572) "a") (data (i32.const 91575) "a") (data (i32.const 91578) "a") (data (i32.const 91581) "a") (data (i32.const 91584) "a") (data (i32.const 91587) "a") (data (i32.const 91590) "a") (data (i32.const 91593) "a") (data (i32.const 91596) "a") (data (i32.const 91599) "a") (data (i32.const 91602) "a") (data (i32.const 91605) "a") (data (i32.const 91608) "a") (data (i32.const 91611) "a") (data (i32.const 91614) "a") (data (i32.const 91617) "a") (data (i32.const 91620) "a") (data (i32.const 91623) "a") (data (i32.const 91626) "a") (data (i32.const 91629) "a") (data (i32.const 91632) "a") (data (i32.const 91635) "a") (data (i32.const 91638) "a") (data (i32.const 91641) "a") (data (i32.const 91644) "a") (data (i32.const 91647) "a") (data (i32.const 91650) "a") (data (i32.const 91653) "a") (data (i32.const 91656) "a") (data (i32.const 91659) "a") (data (i32.const 91662) "a") (data (i32.const 91665) "a") (data (i32.const 91668) "a") (data (i32.const 91671) "a") (data (i32.const 91674) "a") (data (i32.const 91677) "a") (data (i32.const 91680) "a") (data (i32.const 91683) "a") (data (i32.const 91686) "a") (data (i32.const 91689) "a") (data (i32.const 91692) "a") (data (i32.const 91695) "a") (data (i32.const 91698) "a") (data (i32.const 91701) "a") (data (i32.const 91704) "a") (data (i32.const 91707) "a") (data (i32.const 91710) "a") (data (i32.const 91713) "a") (data (i32.const 91716) "a") (data (i32.const 91719) "a") (data (i32.const 91722) "a") (data (i32.const 91725) "a") (data (i32.const 91728) "a") (data (i32.const 91731) "a") (data (i32.const 91734) "a") (data (i32.const 91737) "a") (data (i32.const 91740) "a") (data (i32.const 91743) "a") (data (i32.const 91746) "a") (data (i32.const 91749) "a") (data (i32.const 91752) "a") (data (i32.const 91755) "a") (data (i32.const 91758) "a") (data (i32.const 91761) "a") (data (i32.const 91764) "a") (data (i32.const 91767) "a") (data (i32.const 91770) "a") (data (i32.const 91773) "a") (data (i32.const 91776) "a") (data (i32.const 91779) "a") (data (i32.const 91782) "a") (data (i32.const 91785) "a") (data (i32.const 91788) "a") (data (i32.const 91791) "a") (data (i32.const 91794) "a") (data (i32.const 91797) "a") (data (i32.const 91800) "a") (data (i32.const 91803) "a") (data (i32.const 91806) "a") (data (i32.const 91809) "a") (data (i32.const 91812) "a") (data (i32.const 91815) "a") (data (i32.const 91818) "a") (data (i32.const 91821) "a") (data (i32.const 91824) "a") (data (i32.const 91827) "a") (data (i32.const 91830) "a") (data (i32.const 91833) "a") (data (i32.const 91836) "a") (data (i32.const 91839) "a") (data (i32.const 91842) "a") (data (i32.const 91845) "a") (data (i32.const 91848) "a") (data (i32.const 91851) "a") (data (i32.const 91854) "a") (data (i32.const 91857) "a") (data (i32.const 91860) "a") (data (i32.const 91863) "a") (data (i32.const 91866) "a") (data (i32.const 91869) "a") (data (i32.const 91872) "a") (data (i32.const 91875) "a") (data (i32.const 91878) "a") (data (i32.const 91881) "a") (data (i32.const 91884) "a") (data (i32.const 91887) "a") (data (i32.const 91890) "a") (data (i32.const 91893) "a") (data (i32.const 91896) "a") (data (i32.const 91899) "a") (data (i32.const 91902) "a") (data (i32.const 91905) "a") (data (i32.const 91908) "a") (data (i32.const 91911) "a") (data (i32.const 91914) "a") (data (i32.const 91917) "a") (data (i32.const 91920) "a") (data (i32.const 91923) "a") (data (i32.const 91926) "a") (data (i32.const 91929) "a") (data (i32.const 91932) "a") (data (i32.const 91935) "a") (data (i32.const 91938) "a") (data (i32.const 91941) "a") (data (i32.const 91944) "a") (data (i32.const 91947) "a") (data (i32.const 91950) "a") (data (i32.const 91953) "a") (data (i32.const 91956) "a") (data (i32.const 91959) "a") (data (i32.const 91962) "a") (data (i32.const 91965) "a") (data (i32.const 91968) "a") (data (i32.const 91971) "a") (data (i32.const 91974) "a") (data (i32.const 91977) "a") (data (i32.const 91980) "a") (data (i32.const 91983) "a") (data (i32.const 91986) "a") (data (i32.const 91989) "a") (data (i32.const 91992) "a") (data (i32.const 91995) "a") (data (i32.const 91998) "a") (data (i32.const 92001) "a") (data (i32.const 92004) "a") (data (i32.const 92007) "a") (data (i32.const 92010) "a") (data (i32.const 92013) "a") (data (i32.const 92016) "a") (data (i32.const 92019) "a") (data (i32.const 92022) "a") (data (i32.const 92025) "a") (data (i32.const 92028) "a") (data (i32.const 92031) "a") (data (i32.const 92034) "a") (data (i32.const 92037) "a") (data (i32.const 92040) "a") (data (i32.const 92043) "a") (data (i32.const 92046) "a") (data (i32.const 92049) "a") (data (i32.const 92052) "a") (data (i32.const 92055) "a") (data (i32.const 92058) "a") (data (i32.const 92061) "a") (data (i32.const 92064) "a") (data (i32.const 92067) "a") (data (i32.const 92070) "a") (data (i32.const 92073) "a") (data (i32.const 92076) "a") (data (i32.const 92079) "a") (data (i32.const 92082) "a") (data (i32.const 92085) "a") (data (i32.const 92088) "a") (data (i32.const 92091) "a") (data (i32.const 92094) "a") (data (i32.const 92097) "a") (data (i32.const 92100) "a") (data (i32.const 92103) "a") (data (i32.const 92106) "a") (data (i32.const 92109) "a") (data (i32.const 92112) "a") (data (i32.const 92115) "a") (data (i32.const 92118) "a") (data (i32.const 92121) "a") (data (i32.const 92124) "a") (data (i32.const 92127) "a") (data (i32.const 92130) "a") (data (i32.const 92133) "a") (data (i32.const 92136) "a") (data (i32.const 92139) "a") (data (i32.const 92142) "a") (data (i32.const 92145) "a") (data (i32.const 92148) "a") (data (i32.const 92151) "a") (data (i32.const 92154) "a") (data (i32.const 92157) "a") (data (i32.const 92160) "a") (data (i32.const 92163) "a") (data (i32.const 92166) "a") (data (i32.const 92169) "a") (data (i32.const 92172) "a") (data (i32.const 92175) "a") (data (i32.const 92178) "a") (data (i32.const 92181) "a") (data (i32.const 92184) "a") (data (i32.const 92187) "a") (data (i32.const 92190) "a") (data (i32.const 92193) "a") (data (i32.const 92196) "a") (data (i32.const 92199) "a") (data (i32.const 92202) "a") (data (i32.const 92205) "a") (data (i32.const 92208) "a") (data (i32.const 92211) "a") (data (i32.const 92214) "a") (data (i32.const 92217) "a") (data (i32.const 92220) "a") (data (i32.const 92223) "a") (data (i32.const 92226) "a") (data (i32.const 92229) "a") (data (i32.const 92232) "a") (data (i32.const 92235) "a") (data (i32.const 92238) "a") (data (i32.const 92241) "a") (data (i32.const 92244) "a") (data (i32.const 92247) "a") (data (i32.const 92250) "a") (data (i32.const 92253) "a") (data (i32.const 92256) "a") (data (i32.const 92259) "a") (data (i32.const 92262) "a") (data (i32.const 92265) "a") (data (i32.const 92268) "a") (data (i32.const 92271) "a") (data (i32.const 92274) "a") (data (i32.const 92277) "a") (data (i32.const 92280) "a") (data (i32.const 92283) "a") (data (i32.const 92286) "a") (data (i32.const 92289) "a") (data (i32.const 92292) "a") (data (i32.const 92295) "a") (data (i32.const 92298) "a") (data (i32.const 92301) "a") (data (i32.const 92304) "a") (data (i32.const 92307) "a") (data (i32.const 92310) "a") (data (i32.const 92313) "a") (data (i32.const 92316) "a") (data (i32.const 92319) "a") (data (i32.const 92322) "a") (data (i32.const 92325) "a") (data (i32.const 92328) "a") (data (i32.const 92331) "a") (data (i32.const 92334) "a") (data (i32.const 92337) "a") (data (i32.const 92340) "a") (data (i32.const 92343) "a") (data (i32.const 92346) "a") (data (i32.const 92349) "a") (data (i32.const 92352) "a") (data (i32.const 92355) "a") (data (i32.const 92358) "a") (data (i32.const 92361) "a") (data (i32.const 92364) "a") (data (i32.const 92367) "a") (data (i32.const 92370) "a") (data (i32.const 92373) "a") (data (i32.const 92376) "a") (data (i32.const 92379) "a") (data (i32.const 92382) "a") (data (i32.const 92385) "a") (data (i32.const 92388) "a") (data (i32.const 92391) "a") (data (i32.const 92394) "a") (data (i32.const 92397) "a") (data (i32.const 92400) "a") (data (i32.const 92403) "a") (data (i32.const 92406) "a") (data (i32.const 92409) "a") (data (i32.const 92412) "a") (data (i32.const 92415) "a") (data (i32.const 92418) "a") (data (i32.const 92421) "a") (data (i32.const 92424) "a") (data (i32.const 92427) "a") (data (i32.const 92430) "a") (data (i32.const 92433) "a") (data (i32.const 92436) "a") (data (i32.const 92439) "a") (data (i32.const 92442) "a") (data (i32.const 92445) "a") (data (i32.const 92448) "a") (data (i32.const 92451) "a") (data (i32.const 92454) "a") (data (i32.const 92457) "a") (data (i32.const 92460) "a") (data (i32.const 92463) "a") (data (i32.const 92466) "a") (data (i32.const 92469) "a") (data (i32.const 92472) "a") (data (i32.const 92475) "a") (data (i32.const 92478) "a") (data (i32.const 92481) "a") (data (i32.const 92484) "a") (data (i32.const 92487) "a") (data (i32.const 92490) "a") (data (i32.const 92493) "a") (data (i32.const 92496) "a") (data (i32.const 92499) "a") (data (i32.const 92502) "a") (data (i32.const 92505) "a") (data (i32.const 92508) "a") (data (i32.const 92511) "a") (data (i32.const 92514) "a") (data (i32.const 92517) "a") (data (i32.const 92520) "a") (data (i32.const 92523) "a") (data (i32.const 92526) "a") (data (i32.const 92529) "a") (data (i32.const 92532) "a") (data (i32.const 92535) "a") (data (i32.const 92538) "a") (data (i32.const 92541) "a") (data (i32.const 92544) "a") (data (i32.const 92547) "a") (data (i32.const 92550) "a") (data (i32.const 92553) "a") (data (i32.const 92556) "a") (data (i32.const 92559) "a") (data (i32.const 92562) "a") (data (i32.const 92565) "a") (data (i32.const 92568) "a") (data (i32.const 92571) "a") (data (i32.const 92574) "a") (data (i32.const 92577) "a") (data (i32.const 92580) "a") (data (i32.const 92583) "a") (data (i32.const 92586) "a") (data (i32.const 92589) "a") (data (i32.const 92592) "a") (data (i32.const 92595) "a") (data (i32.const 92598) "a") (data (i32.const 92601) "a") (data (i32.const 92604) "a") (data (i32.const 92607) "a") (data (i32.const 92610) "a") (data (i32.const 92613) "a") (data (i32.const 92616) "a") (data (i32.const 92619) "a") (data (i32.const 92622) "a") (data (i32.const 92625) "a") (data (i32.const 92628) "a") (data (i32.const 92631) "a") (data (i32.const 92634) "a") (data (i32.const 92637) "a") (data (i32.const 92640) "a") (data (i32.const 92643) "a") (data (i32.const 92646) "a") (data (i32.const 92649) "a") (data (i32.const 92652) "a") (data (i32.const 92655) "a") (data (i32.const 92658) "a") (data (i32.const 92661) "a") (data (i32.const 92664) "a") (data (i32.const 92667) "a") (data (i32.const 92670) "a") (data (i32.const 92673) "a") (data (i32.const 92676) "a") (data (i32.const 92679) "a") (data (i32.const 92682) "a") (data (i32.const 92685) "a") (data (i32.const 92688) "a") (data (i32.const 92691) "a") (data (i32.const 92694) "a") (data (i32.const 92697) "a") (data (i32.const 92700) "a") (data (i32.const 92703) "a") (data (i32.const 92706) "a") (data (i32.const 92709) "a") (data (i32.const 92712) "a") (data (i32.const 92715) "a") (data (i32.const 92718) "a") (data (i32.const 92721) "a") (data (i32.const 92724) "a") (data (i32.const 92727) "a") (data (i32.const 92730) "a") (data (i32.const 92733) "a") (data (i32.const 92736) "a") (data (i32.const 92739) "a") (data (i32.const 92742) "a") (data (i32.const 92745) "a") (data (i32.const 92748) "a") (data (i32.const 92751) "a") (data (i32.const 92754) "a") (data (i32.const 92757) "a") (data (i32.const 92760) "a") (data (i32.const 92763) "a") (data (i32.const 92766) "a") (data (i32.const 92769) "a") (data (i32.const 92772) "a") (data (i32.const 92775) "a") (data (i32.const 92778) "a") (data (i32.const 92781) "a") (data (i32.const 92784) "a") (data (i32.const 92787) "a") (data (i32.const 92790) "a") (data (i32.const 92793) "a") (data (i32.const 92796) "a") (data (i32.const 92799) "a") (data (i32.const 92802) "a") (data (i32.const 92805) "a") (data (i32.const 92808) "a") (data (i32.const 92811) "a") (data (i32.const 92814) "a") (data (i32.const 92817) "a") (data (i32.const 92820) "a") (data (i32.const 92823) "a") (data (i32.const 92826) "a") (data (i32.const 92829) "a") (data (i32.const 92832) "a") (data (i32.const 92835) "a") (data (i32.const 92838) "a") (data (i32.const 92841) "a") (data (i32.const 92844) "a") (data (i32.const 92847) "a") (data (i32.const 92850) "a") (data (i32.const 92853) "a") (data (i32.const 92856) "a") (data (i32.const 92859) "a") (data (i32.const 92862) "a") (data (i32.const 92865) "a") (data (i32.const 92868) "a") (data (i32.const 92871) "a") (data (i32.const 92874) "a") (data (i32.const 92877) "a") (data (i32.const 92880) "a") (data (i32.const 92883) "a") (data (i32.const 92886) "a") (data (i32.const 92889) "a") (data (i32.const 92892) "a") (data (i32.const 92895) "a") (data (i32.const 92898) "a") (data (i32.const 92901) "a") (data (i32.const 92904) "a") (data (i32.const 92907) "a") (data (i32.const 92910) "a") (data (i32.const 92913) "a") (data (i32.const 92916) "a") (data (i32.const 92919) "a") (data (i32.const 92922) "a") (data (i32.const 92925) "a") (data (i32.const 92928) "a") (data (i32.const 92931) "a") (data (i32.const 92934) "a") (data (i32.const 92937) "a") (data (i32.const 92940) "a") (data (i32.const 92943) "a") (data (i32.const 92946) "a") (data (i32.const 92949) "a") (data (i32.const 92952) "a") (data (i32.const 92955) "a") (data (i32.const 92958) "a") (data (i32.const 92961) "a") (data (i32.const 92964) "a") (data (i32.const 92967) "a") (data (i32.const 92970) "a") (data (i32.const 92973) "a") (data (i32.const 92976) "a") (data (i32.const 92979) "a") (data (i32.const 92982) "a") (data (i32.const 92985) "a") (data (i32.const 92988) "a") (data (i32.const 92991) "a") (data (i32.const 92994) "a") (data (i32.const 92997) "a") (data (i32.const 93000) "a") (data (i32.const 93003) "a") (data (i32.const 93006) "a") (data (i32.const 93009) "a") (data (i32.const 93012) "a") (data (i32.const 93015) "a") (data (i32.const 93018) "a") (data (i32.const 93021) "a") (data (i32.const 93024) "a") (data (i32.const 93027) "a") (data (i32.const 93030) "a") (data (i32.const 93033) "a") (data (i32.const 93036) "a") (data (i32.const 93039) "a") (data (i32.const 93042) "a") (data (i32.const 93045) "a") (data (i32.const 93048) "a") (data (i32.const 93051) "a") (data (i32.const 93054) "a") (data (i32.const 93057) "a") (data (i32.const 93060) "a") (data (i32.const 93063) "a") (data (i32.const 93066) "a") (data (i32.const 93069) "a") (data (i32.const 93072) "a") (data (i32.const 93075) "a") (data (i32.const 93078) "a") (data (i32.const 93081) "a") (data (i32.const 93084) "a") (data (i32.const 93087) "a") (data (i32.const 93090) "a") (data (i32.const 93093) "a") (data (i32.const 93096) "a") (data (i32.const 93099) "a") (data (i32.const 93102) "a") (data (i32.const 93105) "a") (data (i32.const 93108) "a") (data (i32.const 93111) "a") (data (i32.const 93114) "a") (data (i32.const 93117) "a") (data (i32.const 93120) "a") (data (i32.const 93123) "a") (data (i32.const 93126) "a") (data (i32.const 93129) "a") (data (i32.const 93132) "a") (data (i32.const 93135) "a") (data (i32.const 93138) "a") (data (i32.const 93141) "a") (data (i32.const 93144) "a") (data (i32.const 93147) "a") (data (i32.const 93150) "a") (data (i32.const 93153) "a") (data (i32.const 93156) "a") (data (i32.const 93159) "a") (data (i32.const 93162) "a") (data (i32.const 93165) "a") (data (i32.const 93168) "a") (data (i32.const 93171) "a") (data (i32.const 93174) "a") (data (i32.const 93177) "a") (data (i32.const 93180) "a") (data (i32.const 93183) "a") (data (i32.const 93186) "a") (data (i32.const 93189) "a") (data (i32.const 93192) "a") (data (i32.const 93195) "a") (data (i32.const 93198) "a") (data (i32.const 93201) "a") (data (i32.const 93204) "a") (data (i32.const 93207) "a") (data (i32.const 93210) "a") (data (i32.const 93213) "a") (data (i32.const 93216) "a") (data (i32.const 93219) "a") (data (i32.const 93222) "a") (data (i32.const 93225) "a") (data (i32.const 93228) "a") (data (i32.const 93231) "a") (data (i32.const 93234) "a") (data (i32.const 93237) "a") (data (i32.const 93240) "a") (data (i32.const 93243) "a") (data (i32.const 93246) "a") (data (i32.const 93249) "a") (data (i32.const 93252) "a") (data (i32.const 93255) "a") (data (i32.const 93258) "a") (data (i32.const 93261) "a") (data (i32.const 93264) "a") (data (i32.const 93267) "a") (data (i32.const 93270) "a") (data (i32.const 93273) "a") (data (i32.const 93276) "a") (data (i32.const 93279) "a") (data (i32.const 93282) "a") (data (i32.const 93285) "a") (data (i32.const 93288) "a") (data (i32.const 93291) "a") (data (i32.const 93294) "a") (data (i32.const 93297) "a") (data (i32.const 93300) "a") (data (i32.const 93303) "a") (data (i32.const 93306) "a") (data (i32.const 93309) "a") (data (i32.const 93312) "a") (data (i32.const 93315) "a") (data (i32.const 93318) "a") (data (i32.const 93321) "a") (data (i32.const 93324) "a") (data (i32.const 93327) "a") (data (i32.const 93330) "a") (data (i32.const 93333) "a") (data (i32.const 93336) "a") (data (i32.const 93339) "a") (data (i32.const 93342) "a") (data (i32.const 93345) "a") (data (i32.const 93348) "a") (data (i32.const 93351) "a") (data (i32.const 93354) "a") (data (i32.const 93357) "a") (data (i32.const 93360) "a") (data (i32.const 93363) "a") (data (i32.const 93366) "a") (data (i32.const 93369) "a") (data (i32.const 93372) "a") (data (i32.const 93375) "a") (data (i32.const 93378) "a") (data (i32.const 93381) "a") (data (i32.const 93384) "a") (data (i32.const 93387) "a") (data (i32.const 93390) "a") (data (i32.const 93393) "a") (data (i32.const 93396) "a") (data (i32.const 93399) "a") (data (i32.const 93402) "a") (data (i32.const 93405) "a") (data (i32.const 93408) "a") (data (i32.const 93411) "a") (data (i32.const 93414) "a") (data (i32.const 93417) "a") (data (i32.const 93420) "a") (data (i32.const 93423) "a") (data (i32.const 93426) "a") (data (i32.const 93429) "a") (data (i32.const 93432) "a") (data (i32.const 93435) "a") (data (i32.const 93438) "a") (data (i32.const 93441) "a") (data (i32.const 93444) "a") (data (i32.const 93447) "a") (data (i32.const 93450) "a") (data (i32.const 93453) "a") (data (i32.const 93456) "a") (data (i32.const 93459) "a") (data (i32.const 93462) "a") (data (i32.const 93465) "a") (data (i32.const 93468) "a") (data (i32.const 93471) "a") (data (i32.const 93474) "a") (data (i32.const 93477) "a") (data (i32.const 93480) "a") (data (i32.const 93483) "a") (data (i32.const 93486) "a") (data (i32.const 93489) "a") (data (i32.const 93492) "a") (data (i32.const 93495) "a") (data (i32.const 93498) "a") (data (i32.const 93501) "a") (data (i32.const 93504) "a") (data (i32.const 93507) "a") (data (i32.const 93510) "a") (data (i32.const 93513) "a") (data (i32.const 93516) "a") (data (i32.const 93519) "a") (data (i32.const 93522) "a") (data (i32.const 93525) "a") (data (i32.const 93528) "a") (data (i32.const 93531) "a") (data (i32.const 93534) "a") (data (i32.const 93537) "a") (data (i32.const 93540) "a") (data (i32.const 93543) "a") (data (i32.const 93546) "a") (data (i32.const 93549) "a") (data (i32.const 93552) "a") (data (i32.const 93555) "a") (data (i32.const 93558) "a") (data (i32.const 93561) "a") (data (i32.const 93564) "a") (data (i32.const 93567) "a") (data (i32.const 93570) "a") (data (i32.const 93573) "a") (data (i32.const 93576) "a") (data (i32.const 93579) "a") (data (i32.const 93582) "a") (data (i32.const 93585) "a") (data (i32.const 93588) "a") (data (i32.const 93591) "a") (data (i32.const 93594) "a") (data (i32.const 93597) "a") (data (i32.const 93600) "a") (data (i32.const 93603) "a") (data (i32.const 93606) "a") (data (i32.const 93609) "a") (data (i32.const 93612) "a") (data (i32.const 93615) "a") (data (i32.const 93618) "a") (data (i32.const 93621) "a") (data (i32.const 93624) "a") (data (i32.const 93627) "a") (data (i32.const 93630) "a") (data (i32.const 93633) "a") (data (i32.const 93636) "a") (data (i32.const 93639) "a") (data (i32.const 93642) "a") (data (i32.const 93645) "a") (data (i32.const 93648) "a") (data (i32.const 93651) "a") (data (i32.const 93654) "a") (data (i32.const 93657) "a") (data (i32.const 93660) "a") (data (i32.const 93663) "a") (data (i32.const 93666) "a") (data (i32.const 93669) "a") (data (i32.const 93672) "a") (data (i32.const 93675) "a") (data (i32.const 93678) "a") (data (i32.const 93681) "a") (data (i32.const 93684) "a") (data (i32.const 93687) "a") (data (i32.const 93690) "a") (data (i32.const 93693) "a") (data (i32.const 93696) "a") (data (i32.const 93699) "a") (data (i32.const 93702) "a") (data (i32.const 93705) "a") (data (i32.const 93708) "a") (data (i32.const 93711) "a") (data (i32.const 93714) "a") (data (i32.const 93717) "a") (data (i32.const 93720) "a") (data (i32.const 93723) "a") (data (i32.const 93726) "a") (data (i32.const 93729) "a") (data (i32.const 93732) "a") (data (i32.const 93735) "a") (data (i32.const 93738) "a") (data (i32.const 93741) "a") (data (i32.const 93744) "a") (data (i32.const 93747) "a") (data (i32.const 93750) "a") (data (i32.const 93753) "a") (data (i32.const 93756) "a") (data (i32.const 93759) "a") (data (i32.const 93762) "a") (data (i32.const 93765) "a") (data (i32.const 93768) "a") (data (i32.const 93771) "a") (data (i32.const 93774) "a") (data (i32.const 93777) "a") (data (i32.const 93780) "a") (data (i32.const 93783) "a") (data (i32.const 93786) "a") (data (i32.const 93789) "a") (data (i32.const 93792) "a") (data (i32.const 93795) "a") (data (i32.const 93798) "a") (data (i32.const 93801) "a") (data (i32.const 93804) "a") (data (i32.const 93807) "a") (data (i32.const 93810) "a") (data (i32.const 93813) "a") (data (i32.const 93816) "a") (data (i32.const 93819) "a") (data (i32.const 93822) "a") (data (i32.const 93825) "a") (data (i32.const 93828) "a") (data (i32.const 93831) "a") (data (i32.const 93834) "a") (data (i32.const 93837) "a") (data (i32.const 93840) "a") (data (i32.const 93843) "a") (data (i32.const 93846) "a") (data (i32.const 93849) "a") (data (i32.const 93852) "a") (data (i32.const 93855) "a") (data (i32.const 93858) "a") (data (i32.const 93861) "a") (data (i32.const 93864) "a") (data (i32.const 93867) "a") (data (i32.const 93870) "a") (data (i32.const 93873) "a") (data (i32.const 93876) "a") (data (i32.const 93879) "a") (data (i32.const 93882) "a") (data (i32.const 93885) "a") (data (i32.const 93888) "a") (data (i32.const 93891) "a") (data (i32.const 93894) "a") (data (i32.const 93897) "a") (data (i32.const 93900) "a") (data (i32.const 93903) "a") (data (i32.const 93906) "a") (data (i32.const 93909) "a") (data (i32.const 93912) "a") (data (i32.const 93915) "a") (data (i32.const 93918) "a") (data (i32.const 93921) "a") (data (i32.const 93924) "a") (data (i32.const 93927) "a") (data (i32.const 93930) "a") (data (i32.const 93933) "a") (data (i32.const 93936) "a") (data (i32.const 93939) "a") (data (i32.const 93942) "a") (data (i32.const 93945) "a") (data (i32.const 93948) "a") (data (i32.const 93951) "a") (data (i32.const 93954) "a") (data (i32.const 93957) "a") (data (i32.const 93960) "a") (data (i32.const 93963) "a") (data (i32.const 93966) "a") (data (i32.const 93969) "a") (data (i32.const 93972) "a") (data (i32.const 93975) "a") (data (i32.const 93978) "a") (data (i32.const 93981) "a") (data (i32.const 93984) "a") (data (i32.const 93987) "a") (data (i32.const 93990) "a") (data (i32.const 93993) "a") (data (i32.const 93996) "a") (data (i32.const 93999) "a") (data (i32.const 94002) "a") (data (i32.const 94005) "a") (data (i32.const 94008) "a") (data (i32.const 94011) "a") (data (i32.const 94014) "a") (data (i32.const 94017) "a") (data (i32.const 94020) "a") (data (i32.const 94023) "a") (data (i32.const 94026) "a") (data (i32.const 94029) "a") (data (i32.const 94032) "a") (data (i32.const 94035) "a") (data (i32.const 94038) "a") (data (i32.const 94041) "a") (data (i32.const 94044) "a") (data (i32.const 94047) "a") (data (i32.const 94050) "a") (data (i32.const 94053) "a") (data (i32.const 94056) "a") (data (i32.const 94059) "a") (data (i32.const 94062) "a") (data (i32.const 94065) "a") (data (i32.const 94068) "a") (data (i32.const 94071) "a") (data (i32.const 94074) "a") (data (i32.const 94077) "a") (data (i32.const 94080) "a") (data (i32.const 94083) "a") (data (i32.const 94086) "a") (data (i32.const 94089) "a") (data (i32.const 94092) "a") (data (i32.const 94095) "a") (data (i32.const 94098) "a") (data (i32.const 94101) "a") (data (i32.const 94104) "a") (data (i32.const 94107) "a") (data (i32.const 94110) "a") (data (i32.const 94113) "a") (data (i32.const 94116) "a") (data (i32.const 94119) "a") (data (i32.const 94122) "a") (data (i32.const 94125) "a") (data (i32.const 94128) "a") (data (i32.const 94131) "a") (data (i32.const 94134) "a") (data (i32.const 94137) "a") (data (i32.const 94140) "a") (data (i32.const 94143) "a") (data (i32.const 94146) "a") (data (i32.const 94149) "a") (data (i32.const 94152) "a") (data (i32.const 94155) "a") (data (i32.const 94158) "a") (data (i32.const 94161) "a") (data (i32.const 94164) "a") (data (i32.const 94167) "a") (data (i32.const 94170) "a") (data (i32.const 94173) "a") (data (i32.const 94176) "a") (data (i32.const 94179) "a") (data (i32.const 94182) "a") (data (i32.const 94185) "a") (data (i32.const 94188) "a") (data (i32.const 94191) "a") (data (i32.const 94194) "a") (data (i32.const 94197) "a") (data (i32.const 94200) "a") (data (i32.const 94203) "a") (data (i32.const 94206) "a") (data (i32.const 94209) "a") (data (i32.const 94212) "a") (data (i32.const 94215) "a") (data (i32.const 94218) "a") (data (i32.const 94221) "a") (data (i32.const 94224) "a") (data (i32.const 94227) "a") (data (i32.const 94230) "a") (data (i32.const 94233) "a") (data (i32.const 94236) "a") (data (i32.const 94239) "a") (data (i32.const 94242) "a") (data (i32.const 94245) "a") (data (i32.const 94248) "a") (data (i32.const 94251) "a") (data (i32.const 94254) "a") (data (i32.const 94257) "a") (data (i32.const 94260) "a") (data (i32.const 94263) "a") (data (i32.const 94266) "a") (data (i32.const 94269) "a") (data (i32.const 94272) "a") (data (i32.const 94275) "a") (data (i32.const 94278) "a") (data (i32.const 94281) "a") (data (i32.const 94284) "a") (data (i32.const 94287) "a") (data (i32.const 94290) "a") (data (i32.const 94293) "a") (data (i32.const 94296) "a") (data (i32.const 94299) "a") (data (i32.const 94302) "a") (data (i32.const 94305) "a") (data (i32.const 94308) "a") (data (i32.const 94311) "a") (data (i32.const 94314) "a") (data (i32.const 94317) "a") (data (i32.const 94320) "a") (data (i32.const 94323) "a") (data (i32.const 94326) "a") (data (i32.const 94329) "a") (data (i32.const 94332) "a") (data (i32.const 94335) "a") (data (i32.const 94338) "a") (data (i32.const 94341) "a") (data (i32.const 94344) "a") (data (i32.const 94347) "a") (data (i32.const 94350) "a") (data (i32.const 94353) "a") (data (i32.const 94356) "a") (data (i32.const 94359) "a") (data (i32.const 94362) "a") (data (i32.const 94365) "a") (data (i32.const 94368) "a") (data (i32.const 94371) "a") (data (i32.const 94374) "a") (data (i32.const 94377) "a") (data (i32.const 94380) "a") (data (i32.const 94383) "a") (data (i32.const 94386) "a") (data (i32.const 94389) "a") (data (i32.const 94392) "a") (data (i32.const 94395) "a") (data (i32.const 94398) "a") (data (i32.const 94401) "a") (data (i32.const 94404) "a") (data (i32.const 94407) "a") (data (i32.const 94410) "a") (data (i32.const 94413) "a") (data (i32.const 94416) "a") (data (i32.const 94419) "a") (data (i32.const 94422) "a") (data (i32.const 94425) "a") (data (i32.const 94428) "a") (data (i32.const 94431) "a") (data (i32.const 94434) "a") (data (i32.const 94437) "a") (data (i32.const 94440) "a") (data (i32.const 94443) "a") (data (i32.const 94446) "a") (data (i32.const 94449) "a") (data (i32.const 94452) "a") (data (i32.const 94455) "a") (data (i32.const 94458) "a") (data (i32.const 94461) "a") (data (i32.const 94464) "a") (data (i32.const 94467) "a") (data (i32.const 94470) "a") (data (i32.const 94473) "a") (data (i32.const 94476) "a") (data (i32.const 94479) "a") (data (i32.const 94482) "a") (data (i32.const 94485) "a") (data (i32.const 94488) "a") (data (i32.const 94491) "a") (data (i32.const 94494) "a") (data (i32.const 94497) "a") (data (i32.const 94500) "a") (data (i32.const 94503) "a") (data (i32.const 94506) "a") (data (i32.const 94509) "a") (data (i32.const 94512) "a") (data (i32.const 94515) "a") (data (i32.const 94518) "a") (data (i32.const 94521) "a") (data (i32.const 94524) "a") (data (i32.const 94527) "a") (data (i32.const 94530) "a") (data (i32.const 94533) "a") (data (i32.const 94536) "a") (data (i32.const 94539) "a") (data (i32.const 94542) "a") (data (i32.const 94545) "a") (data (i32.const 94548) "a") (data (i32.const 94551) "a") (data (i32.const 94554) "a") (data (i32.const 94557) "a") (data (i32.const 94560) "a") (data (i32.const 94563) "a") (data (i32.const 94566) "a") (data (i32.const 94569) "a") (data (i32.const 94572) "a") (data (i32.const 94575) "a") (data (i32.const 94578) "a") (data (i32.const 94581) "a") (data (i32.const 94584) "a") (data (i32.const 94587) "a") (data (i32.const 94590) "a") (data (i32.const 94593) "a") (data (i32.const 94596) "a") (data (i32.const 94599) "a") (data (i32.const 94602) "a") (data (i32.const 94605) "a") (data (i32.const 94608) "a") (data (i32.const 94611) "a") (data (i32.const 94614) "a") (data (i32.const 94617) "a") (data (i32.const 94620) "a") (data (i32.const 94623) "a") (data (i32.const 94626) "a") (data (i32.const 94629) "a") (data (i32.const 94632) "a") (data (i32.const 94635) "a") (data (i32.const 94638) "a") (data (i32.const 94641) "a") (data (i32.const 94644) "a") (data (i32.const 94647) "a") (data (i32.const 94650) "a") (data (i32.const 94653) "a") (data (i32.const 94656) "a") (data (i32.const 94659) "a") (data (i32.const 94662) "a") (data (i32.const 94665) "a") (data (i32.const 94668) "a") (data (i32.const 94671) "a") (data (i32.const 94674) "a") (data (i32.const 94677) "a") (data (i32.const 94680) "a") (data (i32.const 94683) "a") (data (i32.const 94686) "a") (data (i32.const 94689) "a") (data (i32.const 94692) "a") (data (i32.const 94695) "a") (data (i32.const 94698) "a") (data (i32.const 94701) "a") (data (i32.const 94704) "a") (data (i32.const 94707) "a") (data (i32.const 94710) "a") (data (i32.const 94713) "a") (data (i32.const 94716) "a") (data (i32.const 94719) "a") (data (i32.const 94722) "a") (data (i32.const 94725) "a") (data (i32.const 94728) "a") (data (i32.const 94731) "a") (data (i32.const 94734) "a") (data (i32.const 94737) "a") (data (i32.const 94740) "a") (data (i32.const 94743) "a") (data (i32.const 94746) "a") (data (i32.const 94749) "a") (data (i32.const 94752) "a") (data (i32.const 94755) "a") (data (i32.const 94758) "a") (data (i32.const 94761) "a") (data (i32.const 94764) "a") (data (i32.const 94767) "a") (data (i32.const 94770) "a") (data (i32.const 94773) "a") (data (i32.const 94776) "a") (data (i32.const 94779) "a") (data (i32.const 94782) "a") (data (i32.const 94785) "a") (data (i32.const 94788) "a") (data (i32.const 94791) "a") (data (i32.const 94794) "a") (data (i32.const 94797) "a") (data (i32.const 94800) "a") (data (i32.const 94803) "a") (data (i32.const 94806) "a") (data (i32.const 94809) "a") (data (i32.const 94812) "a") (data (i32.const 94815) "a") (data (i32.const 94818) "a") (data (i32.const 94821) "a") (data (i32.const 94824) "a") (data (i32.const 94827) "a") (data (i32.const 94830) "a") (data (i32.const 94833) "a") (data (i32.const 94836) "a") (data (i32.const 94839) "a") (data (i32.const 94842) "a") (data (i32.const 94845) "a") (data (i32.const 94848) "a") (data (i32.const 94851) "a") (data (i32.const 94854) "a") (data (i32.const 94857) "a") (data (i32.const 94860) "a") (data (i32.const 94863) "a") (data (i32.const 94866) "a") (data (i32.const 94869) "a") (data (i32.const 94872) "a") (data (i32.const 94875) "a") (data (i32.const 94878) "a") (data (i32.const 94881) "a") (data (i32.const 94884) "a") (data (i32.const 94887) "a") (data (i32.const 94890) "a") (data (i32.const 94893) "a") (data (i32.const 94896) "a") (data (i32.const 94899) "a") (data (i32.const 94902) "a") (data (i32.const 94905) "a") (data (i32.const 94908) "a") (data (i32.const 94911) "a") (data (i32.const 94914) "a") (data (i32.const 94917) "a") (data (i32.const 94920) "a") (data (i32.const 94923) "a") (data (i32.const 94926) "a") (data (i32.const 94929) "a") (data (i32.const 94932) "a") (data (i32.const 94935) "a") (data (i32.const 94938) "a") (data (i32.const 94941) "a") (data (i32.const 94944) "a") (data (i32.const 94947) "a") (data (i32.const 94950) "a") (data (i32.const 94953) "a") (data (i32.const 94956) "a") (data (i32.const 94959) "a") (data (i32.const 94962) "a") (data (i32.const 94965) "a") (data (i32.const 94968) "a") (data (i32.const 94971) "a") (data (i32.const 94974) "a") (data (i32.const 94977) "a") (data (i32.const 94980) "a") (data (i32.const 94983) "a") (data (i32.const 94986) "a") (data (i32.const 94989) "a") (data (i32.const 94992) "a") (data (i32.const 94995) "a") (data (i32.const 94998) "a") (data (i32.const 95001) "a") (data (i32.const 95004) "a") (data (i32.const 95007) "a") (data (i32.const 95010) "a") (data (i32.const 95013) "a") (data (i32.const 95016) "a") (data (i32.const 95019) "a") (data (i32.const 95022) "a") (data (i32.const 95025) "a") (data (i32.const 95028) "a") (data (i32.const 95031) "a") (data (i32.const 95034) "a") (data (i32.const 95037) "a") (data (i32.const 95040) "a") (data (i32.const 95043) "a") (data (i32.const 95046) "a") (data (i32.const 95049) "a") (data (i32.const 95052) "a") (data (i32.const 95055) "a") (data (i32.const 95058) "a") (data (i32.const 95061) "a") (data (i32.const 95064) "a") (data (i32.const 95067) "a") (data (i32.const 95070) "a") (data (i32.const 95073) "a") (data (i32.const 95076) "a") (data (i32.const 95079) "a") (data (i32.const 95082) "a") (data (i32.const 95085) "a") (data (i32.const 95088) "a") (data (i32.const 95091) "a") (data (i32.const 95094) "a") (data (i32.const 95097) "a") (data (i32.const 95100) "a") (data (i32.const 95103) "a") (data (i32.const 95106) "a") (data (i32.const 95109) "a") (data (i32.const 95112) "a") (data (i32.const 95115) "a") (data (i32.const 95118) "a") (data (i32.const 95121) "a") (data (i32.const 95124) "a") (data (i32.const 95127) "a") (data (i32.const 95130) "a") (data (i32.const 95133) "a") (data (i32.const 95136) "a") (data (i32.const 95139) "a") (data (i32.const 95142) "a") (data (i32.const 95145) "a") (data (i32.const 95148) "a") (data (i32.const 95151) "a") (data (i32.const 95154) "a") (data (i32.const 95157) "a") (data (i32.const 95160) "a") (data (i32.const 95163) "a") (data (i32.const 95166) "a") (data (i32.const 95169) "a") (data (i32.const 95172) "a") (data (i32.const 95175) "a") (data (i32.const 95178) "a") (data (i32.const 95181) "a") (data (i32.const 95184) "a") (data (i32.const 95187) "a") (data (i32.const 95190) "a") (data (i32.const 95193) "a") (data (i32.const 95196) "a") (data (i32.const 95199) "a") (data (i32.const 95202) "a") (data (i32.const 95205) "a") (data (i32.const 95208) "a") (data (i32.const 95211) "a") (data (i32.const 95214) "a") (data (i32.const 95217) "a") (data (i32.const 95220) "a") (data (i32.const 95223) "a") (data (i32.const 95226) "a") (data (i32.const 95229) "a") (data (i32.const 95232) "a") (data (i32.const 95235) "a") (data (i32.const 95238) "a") (data (i32.const 95241) "a") (data (i32.const 95244) "a") (data (i32.const 95247) "a") (data (i32.const 95250) "a") (data (i32.const 95253) "a") (data (i32.const 95256) "a") (data (i32.const 95259) "a") (data (i32.const 95262) "a") (data (i32.const 95265) "a") (data (i32.const 95268) "a") (data (i32.const 95271) "a") (data (i32.const 95274) "a") (data (i32.const 95277) "a") (data (i32.const 95280) "a") (data (i32.const 95283) "a") (data (i32.const 95286) "a") (data (i32.const 95289) "a") (data (i32.const 95292) "a") (data (i32.const 95295) "a") (data (i32.const 95298) "a") (data (i32.const 95301) "a") (data (i32.const 95304) "a") (data (i32.const 95307) "a") (data (i32.const 95310) "a") (data (i32.const 95313) "a") (data (i32.const 95316) "a") (data (i32.const 95319) "a") (data (i32.const 95322) "a") (data (i32.const 95325) "a") (data (i32.const 95328) "a") (data (i32.const 95331) "a") (data (i32.const 95334) "a") (data (i32.const 95337) "a") (data (i32.const 95340) "a") (data (i32.const 95343) "a") (data (i32.const 95346) "a") (data (i32.const 95349) "a") (data (i32.const 95352) "a") (data (i32.const 95355) "a") (data (i32.const 95358) "a") (data (i32.const 95361) "a") (data (i32.const 95364) "a") (data (i32.const 95367) "a") (data (i32.const 95370) "a") (data (i32.const 95373) "a") (data (i32.const 95376) "a") (data (i32.const 95379) "a") (data (i32.const 95382) "a") (data (i32.const 95385) "a") (data (i32.const 95388) "a") (data (i32.const 95391) "a") (data (i32.const 95394) "a") (data (i32.const 95397) "a") (data (i32.const 95400) "a") (data (i32.const 95403) "a") (data (i32.const 95406) "a") (data (i32.const 95409) "a") (data (i32.const 95412) "a") (data (i32.const 95415) "a") (data (i32.const 95418) "a") (data (i32.const 95421) "a") (data (i32.const 95424) "a") (data (i32.const 95427) "a") (data (i32.const 95430) "a") (data (i32.const 95433) "a") (data (i32.const 95436) "a") (data (i32.const 95439) "a") (data (i32.const 95442) "a") (data (i32.const 95445) "a") (data (i32.const 95448) "a") (data (i32.const 95451) "a") (data (i32.const 95454) "a") (data (i32.const 95457) "a") (data (i32.const 95460) "a") (data (i32.const 95463) "a") (data (i32.const 95466) "a") (data (i32.const 95469) "a") (data (i32.const 95472) "a") (data (i32.const 95475) "a") (data (i32.const 95478) "a") (data (i32.const 95481) "a") (data (i32.const 95484) "a") (data (i32.const 95487) "a") (data (i32.const 95490) "a") (data (i32.const 95493) "a") (data (i32.const 95496) "a") (data (i32.const 95499) "a") (data (i32.const 95502) "a") (data (i32.const 95505) "a") (data (i32.const 95508) "a") (data (i32.const 95511) "a") (data (i32.const 95514) "a") (data (i32.const 95517) "a") (data (i32.const 95520) "a") (data (i32.const 95523) "a") (data (i32.const 95526) "a") (data (i32.const 95529) "a") (data (i32.const 95532) "a") (data (i32.const 95535) "a") (data (i32.const 95538) "a") (data (i32.const 95541) "a") (data (i32.const 95544) "a") (data (i32.const 95547) "a") (data (i32.const 95550) "a") (data (i32.const 95553) "a") (data (i32.const 95556) "a") (data (i32.const 95559) "a") (data (i32.const 95562) "a") (data (i32.const 95565) "a") (data (i32.const 95568) "a") (data (i32.const 95571) "a") (data (i32.const 95574) "a") (data (i32.const 95577) "a") (data (i32.const 95580) "a") (data (i32.const 95583) "a") (data (i32.const 95586) "a") (data (i32.const 95589) "a") (data (i32.const 95592) "a") (data (i32.const 95595) "a") (data (i32.const 95598) "a") (data (i32.const 95601) "a") (data (i32.const 95604) "a") (data (i32.const 95607) "a") (data (i32.const 95610) "a") (data (i32.const 95613) "a") (data (i32.const 95616) "a") (data (i32.const 95619) "a") (data (i32.const 95622) "a") (data (i32.const 95625) "a") (data (i32.const 95628) "a") (data (i32.const 95631) "a") (data (i32.const 95634) "a") (data (i32.const 95637) "a") (data (i32.const 95640) "a") (data (i32.const 95643) "a") (data (i32.const 95646) "a") (data (i32.const 95649) "a") (data (i32.const 95652) "a") (data (i32.const 95655) "a") (data (i32.const 95658) "a") (data (i32.const 95661) "a") (data (i32.const 95664) "a") (data (i32.const 95667) "a") (data (i32.const 95670) "a") (data (i32.const 95673) "a") (data (i32.const 95676) "a") (data (i32.const 95679) "a") (data (i32.const 95682) "a") (data (i32.const 95685) "a") (data (i32.const 95688) "a") (data (i32.const 95691) "a") (data (i32.const 95694) "a") (data (i32.const 95697) "a") (data (i32.const 95700) "a") (data (i32.const 95703) "a") (data (i32.const 95706) "a") (data (i32.const 95709) "a") (data (i32.const 95712) "a") (data (i32.const 95715) "a") (data (i32.const 95718) "a") (data (i32.const 95721) "a") (data (i32.const 95724) "a") (data (i32.const 95727) "a") (data (i32.const 95730) "a") (data (i32.const 95733) "a") (data (i32.const 95736) "a") (data (i32.const 95739) "a") (data (i32.const 95742) "a") (data (i32.const 95745) "a") (data (i32.const 95748) "a") (data (i32.const 95751) "a") (data (i32.const 95754) "a") (data (i32.const 95757) "a") (data (i32.const 95760) "a") (data (i32.const 95763) "a") (data (i32.const 95766) "a") (data (i32.const 95769) "a") (data (i32.const 95772) "a") (data (i32.const 95775) "a") (data (i32.const 95778) "a") (data (i32.const 95781) "a") (data (i32.const 95784) "a") (data (i32.const 95787) "a") (data (i32.const 95790) "a") (data (i32.const 95793) "a") (data (i32.const 95796) "a") (data (i32.const 95799) "a") (data (i32.const 95802) "a") (data (i32.const 95805) "a") (data (i32.const 95808) "a") (data (i32.const 95811) "a") (data (i32.const 95814) "a") (data (i32.const 95817) "a") (data (i32.const 95820) "a") (data (i32.const 95823) "a") (data (i32.const 95826) "a") (data (i32.const 95829) "a") (data (i32.const 95832) "a") (data (i32.const 95835) "a") (data (i32.const 95838) "a") (data (i32.const 95841) "a") (data (i32.const 95844) "a") (data (i32.const 95847) "a") (data (i32.const 95850) "a") (data (i32.const 95853) "a") (data (i32.const 95856) "a") (data (i32.const 95859) "a") (data (i32.const 95862) "a") (data (i32.const 95865) "a") (data (i32.const 95868) "a") (data (i32.const 95871) "a") (data (i32.const 95874) "a") (data (i32.const 95877) "a") (data (i32.const 95880) "a") (data (i32.const 95883) "a") (data (i32.const 95886) "a") (data (i32.const 95889) "a") (data (i32.const 95892) "a") (data (i32.const 95895) "a") (data (i32.const 95898) "a") (data (i32.const 95901) "a") (data (i32.const 95904) "a") (data (i32.const 95907) "a") (data (i32.const 95910) "a") (data (i32.const 95913) "a") (data (i32.const 95916) "a") (data (i32.const 95919) "a") (data (i32.const 95922) "a") (data (i32.const 95925) "a") (data (i32.const 95928) "a") (data (i32.const 95931) "a") (data (i32.const 95934) "a") (data (i32.const 95937) "a") (data (i32.const 95940) "a") (data (i32.const 95943) "a") (data (i32.const 95946) "a") (data (i32.const 95949) "a") (data (i32.const 95952) "a") (data (i32.const 95955) "a") (data (i32.const 95958) "a") (data (i32.const 95961) "a") (data (i32.const 95964) "a") (data (i32.const 95967) "a") (data (i32.const 95970) "a") (data (i32.const 95973) "a") (data (i32.const 95976) "a") (data (i32.const 95979) "a") (data (i32.const 95982) "a") (data (i32.const 95985) "a") (data (i32.const 95988) "a") (data (i32.const 95991) "a") (data (i32.const 95994) "a") (data (i32.const 95997) "a") (data (i32.const 96000) "a") (data (i32.const 96003) "a") (data (i32.const 96006) "a") (data (i32.const 96009) "a") (data (i32.const 96012) "a") (data (i32.const 96015) "a") (data (i32.const 96018) "a") (data (i32.const 96021) "a") (data (i32.const 96024) "a") (data (i32.const 96027) "a") (data (i32.const 96030) "a") (data (i32.const 96033) "a") (data (i32.const 96036) "a") (data (i32.const 96039) "a") (data (i32.const 96042) "a") (data (i32.const 96045) "a") (data (i32.const 96048) "a") (data (i32.const 96051) "a") (data (i32.const 96054) "a") (data (i32.const 96057) "a") (data (i32.const 96060) "a") (data (i32.const 96063) "a") (data (i32.const 96066) "a") (data (i32.const 96069) "a") (data (i32.const 96072) "a") (data (i32.const 96075) "a") (data (i32.const 96078) "a") (data (i32.const 96081) "a") (data (i32.const 96084) "a") (data (i32.const 96087) "a") (data (i32.const 96090) "a") (data (i32.const 96093) "a") (data (i32.const 96096) "a") (data (i32.const 96099) "a") (data (i32.const 96102) "a") (data (i32.const 96105) "a") (data (i32.const 96108) "a") (data (i32.const 96111) "a") (data (i32.const 96114) "a") (data (i32.const 96117) "a") (data (i32.const 96120) "a") (data (i32.const 96123) "a") (data (i32.const 96126) "a") (data (i32.const 96129) "a") (data (i32.const 96132) "a") (data (i32.const 96135) "a") (data (i32.const 96138) "a") (data (i32.const 96141) "a") (data (i32.const 96144) "a") (data (i32.const 96147) "a") (data (i32.const 96150) "a") (data (i32.const 96153) "a") (data (i32.const 96156) "a") (data (i32.const 96159) "a") (data (i32.const 96162) "a") (data (i32.const 96165) "a") (data (i32.const 96168) "a") (data (i32.const 96171) "a") (data (i32.const 96174) "a") (data (i32.const 96177) "a") (data (i32.const 96180) "a") (data (i32.const 96183) "a") (data (i32.const 96186) "a") (data (i32.const 96189) "a") (data (i32.const 96192) "a") (data (i32.const 96195) "a") (data (i32.const 96198) "a") (data (i32.const 96201) "a") (data (i32.const 96204) "a") (data (i32.const 96207) "a") (data (i32.const 96210) "a") (data (i32.const 96213) "a") (data (i32.const 96216) "a") (data (i32.const 96219) "a") (data (i32.const 96222) "a") (data (i32.const 96225) "a") (data (i32.const 96228) "a") (data (i32.const 96231) "a") (data (i32.const 96234) "a") (data (i32.const 96237) "a") (data (i32.const 96240) "a") (data (i32.const 96243) "a") (data (i32.const 96246) "a") (data (i32.const 96249) "a") (data (i32.const 96252) "a") (data (i32.const 96255) "a") (data (i32.const 96258) "a") (data (i32.const 96261) "a") (data (i32.const 96264) "a") (data (i32.const 96267) "a") (data (i32.const 96270) "a") (data (i32.const 96273) "a") (data (i32.const 96276) "a") (data (i32.const 96279) "a") (data (i32.const 96282) "a") (data (i32.const 96285) "a") (data (i32.const 96288) "a") (data (i32.const 96291) "a") (data (i32.const 96294) "a") (data (i32.const 96297) "a") (data (i32.const 96300) "a") (data (i32.const 96303) "a") (data (i32.const 96306) "a") (data (i32.const 96309) "a") (data (i32.const 96312) "a") (data (i32.const 96315) "a") (data (i32.const 96318) "a") (data (i32.const 96321) "a") (data (i32.const 96324) "a") (data (i32.const 96327) "a") (data (i32.const 96330) "a") (data (i32.const 96333) "a") (data (i32.const 96336) "a") (data (i32.const 96339) "a") (data (i32.const 96342) "a") (data (i32.const 96345) "a") (data (i32.const 96348) "a") (data (i32.const 96351) "a") (data (i32.const 96354) "a") (data (i32.const 96357) "a") (data (i32.const 96360) "a") (data (i32.const 96363) "a") (data (i32.const 96366) "a") (data (i32.const 96369) "a") (data (i32.const 96372) "a") (data (i32.const 96375) "a") (data (i32.const 96378) "a") (data (i32.const 96381) "a") (data (i32.const 96384) "a") (data (i32.const 96387) "a") (data (i32.const 96390) "a") (data (i32.const 96393) "a") (data (i32.const 96396) "a") (data (i32.const 96399) "a") (data (i32.const 96402) "a") (data (i32.const 96405) "a") (data (i32.const 96408) "a") (data (i32.const 96411) "a") (data (i32.const 96414) "a") (data (i32.const 96417) "a") (data (i32.const 96420) "a") (data (i32.const 96423) "a") (data (i32.const 96426) "a") (data (i32.const 96429) "a") (data (i32.const 96432) "a") (data (i32.const 96435) "a") (data (i32.const 96438) "a") (data (i32.const 96441) "a") (data (i32.const 96444) "a") (data (i32.const 96447) "a") (data (i32.const 96450) "a") (data (i32.const 96453) "a") (data (i32.const 96456) "a") (data (i32.const 96459) "a") (data (i32.const 96462) "a") (data (i32.const 96465) "a") (data (i32.const 96468) "a") (data (i32.const 96471) "a") (data (i32.const 96474) "a") (data (i32.const 96477) "a") (data (i32.const 96480) "a") (data (i32.const 96483) "a") (data (i32.const 96486) "a") (data (i32.const 96489) "a") (data (i32.const 96492) "a") (data (i32.const 96495) "a") (data (i32.const 96498) "a") (data (i32.const 96501) "a") (data (i32.const 96504) "a") (data (i32.const 96507) "a") (data (i32.const 96510) "a") (data (i32.const 96513) "a") (data (i32.const 96516) "a") (data (i32.const 96519) "a") (data (i32.const 96522) "a") (data (i32.const 96525) "a") (data (i32.const 96528) "a") (data (i32.const 96531) "a") (data (i32.const 96534) "a") (data (i32.const 96537) "a") (data (i32.const 96540) "a") (data (i32.const 96543) "a") (data (i32.const 96546) "a") (data (i32.const 96549) "a") (data (i32.const 96552) "a") (data (i32.const 96555) "a") (data (i32.const 96558) "a") (data (i32.const 96561) "a") (data (i32.const 96564) "a") (data (i32.const 96567) "a") (data (i32.const 96570) "a") (data (i32.const 96573) "a") (data (i32.const 96576) "a") (data (i32.const 96579) "a") (data (i32.const 96582) "a") (data (i32.const 96585) "a") (data (i32.const 96588) "a") (data (i32.const 96591) "a") (data (i32.const 96594) "a") (data (i32.const 96597) "a") (data (i32.const 96600) "a") (data (i32.const 96603) "a") (data (i32.const 96606) "a") (data (i32.const 96609) "a") (data (i32.const 96612) "a") (data (i32.const 96615) "a") (data (i32.const 96618) "a") (data (i32.const 96621) "a") (data (i32.const 96624) "a") (data (i32.const 96627) "a") (data (i32.const 96630) "a") (data (i32.const 96633) "a") (data (i32.const 96636) "a") (data (i32.const 96639) "a") (data (i32.const 96642) "a") (data (i32.const 96645) "a") (data (i32.const 96648) "a") (data (i32.const 96651) "a") (data (i32.const 96654) "a") (data (i32.const 96657) "a") (data (i32.const 96660) "a") (data (i32.const 96663) "a") (data (i32.const 96666) "a") (data (i32.const 96669) "a") (data (i32.const 96672) "a") (data (i32.const 96675) "a") (data (i32.const 96678) "a") (data (i32.const 96681) "a") (data (i32.const 96684) "a") (data (i32.const 96687) "a") (data (i32.const 96690) "a") (data (i32.const 96693) "a") (data (i32.const 96696) "a") (data (i32.const 96699) "a") (data (i32.const 96702) "a") (data (i32.const 96705) "a") (data (i32.const 96708) "a") (data (i32.const 96711) "a") (data (i32.const 96714) "a") (data (i32.const 96717) "a") (data (i32.const 96720) "a") (data (i32.const 96723) "a") (data (i32.const 96726) "a") (data (i32.const 96729) "a") (data (i32.const 96732) "a") (data (i32.const 96735) "a") (data (i32.const 96738) "a") (data (i32.const 96741) "a") (data (i32.const 96744) "a") (data (i32.const 96747) "a") (data (i32.const 96750) "a") (data (i32.const 96753) "a") (data (i32.const 96756) "a") (data (i32.const 96759) "a") (data (i32.const 96762) "a") (data (i32.const 96765) "a") (data (i32.const 96768) "a") (data (i32.const 96771) "a") (data (i32.const 96774) "a") (data (i32.const 96777) "a") (data (i32.const 96780) "a") (data (i32.const 96783) "a") (data (i32.const 96786) "a") (data (i32.const 96789) "a") (data (i32.const 96792) "a") (data (i32.const 96795) "a") (data (i32.const 96798) "a") (data (i32.const 96801) "a") (data (i32.const 96804) "a") (data (i32.const 96807) "a") (data (i32.const 96810) "a") (data (i32.const 96813) "a") (data (i32.const 96816) "a") (data (i32.const 96819) "a") (data (i32.const 96822) "a") (data (i32.const 96825) "a") (data (i32.const 96828) "a") (data (i32.const 96831) "a") (data (i32.const 96834) "a") (data (i32.const 96837) "a") (data (i32.const 96840) "a") (data (i32.const 96843) "a") (data (i32.const 96846) "a") (data (i32.const 96849) "a") (data (i32.const 96852) "a") (data (i32.const 96855) "a") (data (i32.const 96858) "a") (data (i32.const 96861) "a") (data (i32.const 96864) "a") (data (i32.const 96867) "a") (data (i32.const 96870) "a") (data (i32.const 96873) "a") (data (i32.const 96876) "a") (data (i32.const 96879) "a") (data (i32.const 96882) "a") (data (i32.const 96885) "a") (data (i32.const 96888) "a") (data (i32.const 96891) "a") (data (i32.const 96894) "a") (data (i32.const 96897) "a") (data (i32.const 96900) "a") (data (i32.const 96903) "a") (data (i32.const 96906) "a") (data (i32.const 96909) "a") (data (i32.const 96912) "a") (data (i32.const 96915) "a") (data (i32.const 96918) "a") (data (i32.const 96921) "a") (data (i32.const 96924) "a") (data (i32.const 96927) "a") (data (i32.const 96930) "a") (data (i32.const 96933) "a") (data (i32.const 96936) "a") (data (i32.const 96939) "a") (data (i32.const 96942) "a") (data (i32.const 96945) "a") (data (i32.const 96948) "a") (data (i32.const 96951) "a") (data (i32.const 96954) "a") (data (i32.const 96957) "a") (data (i32.const 96960) "a") (data (i32.const 96963) "a") (data (i32.const 96966) "a") (data (i32.const 96969) "a") (data (i32.const 96972) "a") (data (i32.const 96975) "a") (data (i32.const 96978) "a") (data (i32.const 96981) "a") (data (i32.const 96984) "a") (data (i32.const 96987) "a") (data (i32.const 96990) "a") (data (i32.const 96993) "a") (data (i32.const 96996) "a") (data (i32.const 96999) "a") (data (i32.const 97002) "a") (data (i32.const 97005) "a") (data (i32.const 97008) "a") (data (i32.const 97011) "a") (data (i32.const 97014) "a") (data (i32.const 97017) "a") (data (i32.const 97020) "a") (data (i32.const 97023) "a") (data (i32.const 97026) "a") (data (i32.const 97029) "a") (data (i32.const 97032) "a") (data (i32.const 97035) "a") (data (i32.const 97038) "a") (data (i32.const 97041) "a") (data (i32.const 97044) "a") (data (i32.const 97047) "a") (data (i32.const 97050) "a") (data (i32.const 97053) "a") (data (i32.const 97056) "a") (data (i32.const 97059) "a") (data (i32.const 97062) "a") (data (i32.const 97065) "a") (data (i32.const 97068) "a") (data (i32.const 97071) "a") (data (i32.const 97074) "a") (data (i32.const 97077) "a") (data (i32.const 97080) "a") (data (i32.const 97083) "a") (data (i32.const 97086) "a") (data (i32.const 97089) "a") (data (i32.const 97092) "a") (data (i32.const 97095) "a") (data (i32.const 97098) "a") (data (i32.const 97101) "a") (data (i32.const 97104) "a") (data (i32.const 97107) "a") (data (i32.const 97110) "a") (data (i32.const 97113) "a") (data (i32.const 97116) "a") (data (i32.const 97119) "a") (data (i32.const 97122) "a") (data (i32.const 97125) "a") (data (i32.const 97128) "a") (data (i32.const 97131) "a") (data (i32.const 97134) "a") (data (i32.const 97137) "a") (data (i32.const 97140) "a") (data (i32.const 97143) "a") (data (i32.const 97146) "a") (data (i32.const 97149) "a") (data (i32.const 97152) "a") (data (i32.const 97155) "a") (data (i32.const 97158) "a") (data (i32.const 97161) "a") (data (i32.const 97164) "a") (data (i32.const 97167) "a") (data (i32.const 97170) "a") (data (i32.const 97173) "a") (data (i32.const 97176) "a") (data (i32.const 97179) "a") (data (i32.const 97182) "a") (data (i32.const 97185) "a") (data (i32.const 97188) "a") (data (i32.const 97191) "a") (data (i32.const 97194) "a") (data (i32.const 97197) "a") (data (i32.const 97200) "a") (data (i32.const 97203) "a") (data (i32.const 97206) "a") (data (i32.const 97209) "a") (data (i32.const 97212) "a") (data (i32.const 97215) "a") (data (i32.const 97218) "a") (data (i32.const 97221) "a") (data (i32.const 97224) "a") (data (i32.const 97227) "a") (data (i32.const 97230) "a") (data (i32.const 97233) "a") (data (i32.const 97236) "a") (data (i32.const 97239) "a") (data (i32.const 97242) "a") (data (i32.const 97245) "a") (data (i32.const 97248) "a") (data (i32.const 97251) "a") (data (i32.const 97254) "a") (data (i32.const 97257) "a") (data (i32.const 97260) "a") (data (i32.const 97263) "a") (data (i32.const 97266) "a") (data (i32.const 97269) "a") (data (i32.const 97272) "a") (data (i32.const 97275) "a") (data (i32.const 97278) "a") (data (i32.const 97281) "a") (data (i32.const 97284) "a") (data (i32.const 97287) "a") (data (i32.const 97290) "a") (data (i32.const 97293) "a") (data (i32.const 97296) "a") (data (i32.const 97299) "a") (data (i32.const 97302) "a") (data (i32.const 97305) "a") (data (i32.const 97308) "a") (data (i32.const 97311) "a") (data (i32.const 97314) "a") (data (i32.const 97317) "a") (data (i32.const 97320) "a") (data (i32.const 97323) "a") (data (i32.const 97326) "a") (data (i32.const 97329) "a") (data (i32.const 97332) "a") (data (i32.const 97335) "a") (data (i32.const 97338) "a") (data (i32.const 97341) "a") (data (i32.const 97344) "a") (data (i32.const 97347) "a") (data (i32.const 97350) "a") (data (i32.const 97353) "a") (data (i32.const 97356) "a") (data (i32.const 97359) "a") (data (i32.const 97362) "a") (data (i32.const 97365) "a") (data (i32.const 97368) "a") (data (i32.const 97371) "a") (data (i32.const 97374) "a") (data (i32.const 97377) "a") (data (i32.const 97380) "a") (data (i32.const 97383) "a") (data (i32.const 97386) "a") (data (i32.const 97389) "a") (data (i32.const 97392) "a") (data (i32.const 97395) "a") (data (i32.const 97398) "a") (data (i32.const 97401) "a") (data (i32.const 97404) "a") (data (i32.const 97407) "a") (data (i32.const 97410) "a") (data (i32.const 97413) "a") (data (i32.const 97416) "a") (data (i32.const 97419) "a") (data (i32.const 97422) "a") (data (i32.const 97425) "a") (data (i32.const 97428) "a") (data (i32.const 97431) "a") (data (i32.const 97434) "a") (data (i32.const 97437) "a") (data (i32.const 97440) "a") (data (i32.const 97443) "a") (data (i32.const 97446) "a") (data (i32.const 97449) "a") (data (i32.const 97452) "a") (data (i32.const 97455) "a") (data (i32.const 97458) "a") (data (i32.const 97461) "a") (data (i32.const 97464) "a") (data (i32.const 97467) "a") (data (i32.const 97470) "a") (data (i32.const 97473) "a") (data (i32.const 97476) "a") (data (i32.const 97479) "a") (data (i32.const 97482) "a") (data (i32.const 97485) "a") (data (i32.const 97488) "a") (data (i32.const 97491) "a") (data (i32.const 97494) "a") (data (i32.const 97497) "a") (data (i32.const 97500) "a") (data (i32.const 97503) "a") (data (i32.const 97506) "a") (data (i32.const 97509) "a") (data (i32.const 97512) "a") (data (i32.const 97515) "a") (data (i32.const 97518) "a") (data (i32.const 97521) "a") (data (i32.const 97524) "a") (data (i32.const 97527) "a") (data (i32.const 97530) "a") (data (i32.const 97533) "a") (data (i32.const 97536) "a") (data (i32.const 97539) "a") (data (i32.const 97542) "a") (data (i32.const 97545) "a") (data (i32.const 97548) "a") (data (i32.const 97551) "a") (data (i32.const 97554) "a") (data (i32.const 97557) "a") (data (i32.const 97560) "a") (data (i32.const 97563) "a") (data (i32.const 97566) "a") (data (i32.const 97569) "a") (data (i32.const 97572) "a") (data (i32.const 97575) "a") (data (i32.const 97578) "a") (data (i32.const 97581) "a") (data (i32.const 97584) "a") (data (i32.const 97587) "a") (data (i32.const 97590) "a") (data (i32.const 97593) "a") (data (i32.const 97596) "a") (data (i32.const 97599) "a") (data (i32.const 97602) "a") (data (i32.const 97605) "a") (data (i32.const 97608) "a") (data (i32.const 97611) "a") (data (i32.const 97614) "a") (data (i32.const 97617) "a") (data (i32.const 97620) "a") (data (i32.const 97623) "a") (data (i32.const 97626) "a") (data (i32.const 97629) "a") (data (i32.const 97632) "a") (data (i32.const 97635) "a") (data (i32.const 97638) "a") (data (i32.const 97641) "a") (data (i32.const 97644) "a") (data (i32.const 97647) "a") (data (i32.const 97650) "a") (data (i32.const 97653) "a") (data (i32.const 97656) "a") (data (i32.const 97659) "a") (data (i32.const 97662) "a") (data (i32.const 97665) "a") (data (i32.const 97668) "a") (data (i32.const 97671) "a") (data (i32.const 97674) "a") (data (i32.const 97677) "a") (data (i32.const 97680) "a") (data (i32.const 97683) "a") (data (i32.const 97686) "a") (data (i32.const 97689) "a") (data (i32.const 97692) "a") (data (i32.const 97695) "a") (data (i32.const 97698) "a") (data (i32.const 97701) "a") (data (i32.const 97704) "a") (data (i32.const 97707) "a") (data (i32.const 97710) "a") (data (i32.const 97713) "a") (data (i32.const 97716) "a") (data (i32.const 97719) "a") (data (i32.const 97722) "a") (data (i32.const 97725) "a") (data (i32.const 97728) "a") (data (i32.const 97731) "a") (data (i32.const 97734) "a") (data (i32.const 97737) "a") (data (i32.const 97740) "a") (data (i32.const 97743) "a") (data (i32.const 97746) "a") (data (i32.const 97749) "a") (data (i32.const 97752) "a") (data (i32.const 97755) "a") (data (i32.const 97758) "a") (data (i32.const 97761) "a") (data (i32.const 97764) "a") (data (i32.const 97767) "a") (data (i32.const 97770) "a") (data (i32.const 97773) "a") (data (i32.const 97776) "a") (data (i32.const 97779) "a") (data (i32.const 97782) "a") (data (i32.const 97785) "a") (data (i32.const 97788) "a") (data (i32.const 97791) "a") (data (i32.const 97794) "a") (data (i32.const 97797) "a") (data (i32.const 97800) "a") (data (i32.const 97803) "a") (data (i32.const 97806) "a") (data (i32.const 97809) "a") (data (i32.const 97812) "a") (data (i32.const 97815) "a") (data (i32.const 97818) "a") (data (i32.const 97821) "a") (data (i32.const 97824) "a") (data (i32.const 97827) "a") (data (i32.const 97830) "a") (data (i32.const 97833) "a") (data (i32.const 97836) "a") (data (i32.const 97839) "a") (data (i32.const 97842) "a") (data (i32.const 97845) "a") (data (i32.const 97848) "a") (data (i32.const 97851) "a") (data (i32.const 97854) "a") (data (i32.const 97857) "a") (data (i32.const 97860) "a") (data (i32.const 97863) "a") (data (i32.const 97866) "a") (data (i32.const 97869) "a") (data (i32.const 97872) "a") (data (i32.const 97875) "a") (data (i32.const 97878) "a") (data (i32.const 97881) "a") (data (i32.const 97884) "a") (data (i32.const 97887) "a") (data (i32.const 97890) "a") (data (i32.const 97893) "a") (data (i32.const 97896) "a") (data (i32.const 97899) "a") (data (i32.const 97902) "a") (data (i32.const 97905) "a") (data (i32.const 97908) "a") (data (i32.const 97911) "a") (data (i32.const 97914) "a") (data (i32.const 97917) "a") (data (i32.const 97920) "a") (data (i32.const 97923) "a") (data (i32.const 97926) "a") (data (i32.const 97929) "a") (data (i32.const 97932) "a") (data (i32.const 97935) "a") (data (i32.const 97938) "a") (data (i32.const 97941) "a") (data (i32.const 97944) "a") (data (i32.const 97947) "a") (data (i32.const 97950) "a") (data (i32.const 97953) "a") (data (i32.const 97956) "a") (data (i32.const 97959) "a") (data (i32.const 97962) "a") (data (i32.const 97965) "a") (data (i32.const 97968) "a") (data (i32.const 97971) "a") (data (i32.const 97974) "a") (data (i32.const 97977) "a") (data (i32.const 97980) "a") (data (i32.const 97983) "a") (data (i32.const 97986) "a") (data (i32.const 97989) "a") (data (i32.const 97992) "a") (data (i32.const 97995) "a") (data (i32.const 97998) "a") (data (i32.const 98001) "a") (data (i32.const 98004) "a") (data (i32.const 98007) "a") (data (i32.const 98010) "a") (data (i32.const 98013) "a") (data (i32.const 98016) "a") (data (i32.const 98019) "a") (data (i32.const 98022) "a") (data (i32.const 98025) "a") (data (i32.const 98028) "a") (data (i32.const 98031) "a") (data (i32.const 98034) "a") (data (i32.const 98037) "a") (data (i32.const 98040) "a") (data (i32.const 98043) "a") (data (i32.const 98046) "a") (data (i32.const 98049) "a") (data (i32.const 98052) "a") (data (i32.const 98055) "a") (data (i32.const 98058) "a") (data (i32.const 98061) "a") (data (i32.const 98064) "a") (data (i32.const 98067) "a") (data (i32.const 98070) "a") (data (i32.const 98073) "a") (data (i32.const 98076) "a") (data (i32.const 98079) "a") (data (i32.const 98082) "a") (data (i32.const 98085) "a") (data (i32.const 98088) "a") (data (i32.const 98091) "a") (data (i32.const 98094) "a") (data (i32.const 98097) "a") (data (i32.const 98100) "a") (data (i32.const 98103) "a") (data (i32.const 98106) "a") (data (i32.const 98109) "a") (data (i32.const 98112) "a") (data (i32.const 98115) "a") (data (i32.const 98118) "a") (data (i32.const 98121) "a") (data (i32.const 98124) "a") (data (i32.const 98127) "a") (data (i32.const 98130) "a") (data (i32.const 98133) "a") (data (i32.const 98136) "a") (data (i32.const 98139) "a") (data (i32.const 98142) "a") (data (i32.const 98145) "a") (data (i32.const 98148) "a") (data (i32.const 98151) "a") (data (i32.const 98154) "a") (data (i32.const 98157) "a") (data (i32.const 98160) "a") (data (i32.const 98163) "a") (data (i32.const 98166) "a") (data (i32.const 98169) "a") (data (i32.const 98172) "a") (data (i32.const 98175) "a") (data (i32.const 98178) "a") (data (i32.const 98181) "a") (data (i32.const 98184) "a") (data (i32.const 98187) "a") (data (i32.const 98190) "a") (data (i32.const 98193) "a") (data (i32.const 98196) "a") (data (i32.const 98199) "a") (data (i32.const 98202) "a") (data (i32.const 98205) "a") (data (i32.const 98208) "a") (data (i32.const 98211) "a") (data (i32.const 98214) "a") (data (i32.const 98217) "a") (data (i32.const 98220) "a") (data (i32.const 98223) "a") (data (i32.const 98226) "a") (data (i32.const 98229) "a") (data (i32.const 98232) "a") (data (i32.const 98235) "a") (data (i32.const 98238) "a") (data (i32.const 98241) "a") (data (i32.const 98244) "a") (data (i32.const 98247) "a") (data (i32.const 98250) "a") (data (i32.const 98253) "a") (data (i32.const 98256) "a") (data (i32.const 98259) "a") (data (i32.const 98262) "a") (data (i32.const 98265) "a") (data (i32.const 98268) "a") (data (i32.const 98271) "a") (data (i32.const 98274) "a") (data (i32.const 98277) "a") (data (i32.const 98280) "a") (data (i32.const 98283) "a") (data (i32.const 98286) "a") (data (i32.const 98289) "a") (data (i32.const 98292) "a") (data (i32.const 98295) "a") (data (i32.const 98298) "a") (data (i32.const 98301) "a") (data (i32.const 98304) "a") (data (i32.const 98307) "a") (data (i32.const 98310) "a") (data (i32.const 98313) "a") (data (i32.const 98316) "a") (data (i32.const 98319) "a") (data (i32.const 98322) "a") (data (i32.const 98325) "a") (data (i32.const 98328) "a") (data (i32.const 98331) "a") (data (i32.const 98334) "a") (data (i32.const 98337) "a") (data (i32.const 98340) "a") (data (i32.const 98343) "a") (data (i32.const 98346) "a") (data (i32.const 98349) "a") (data (i32.const 98352) "a") (data (i32.const 98355) "a") (data (i32.const 98358) "a") (data (i32.const 98361) "a") (data (i32.const 98364) "a") (data (i32.const 98367) "a") (data (i32.const 98370) "a") (data (i32.const 98373) "a") (data (i32.const 98376) "a") (data (i32.const 98379) "a") (data (i32.const 98382) "a") (data (i32.const 98385) "a") (data (i32.const 98388) "a") (data (i32.const 98391) "a") (data (i32.const 98394) "a") (data (i32.const 98397) "a") (data (i32.const 98400) "a") (data (i32.const 98403) "a") (data (i32.const 98406) "a") (data (i32.const 98409) "a") (data (i32.const 98412) "a") (data (i32.const 98415) "a") (data (i32.const 98418) "a") (data (i32.const 98421) "a") (data (i32.const 98424) "a") (data (i32.const 98427) "a") (data (i32.const 98430) "a") (data (i32.const 98433) "a") (data (i32.const 98436) "a") (data (i32.const 98439) "a") (data (i32.const 98442) "a") (data (i32.const 98445) "a") (data (i32.const 98448) "a") (data (i32.const 98451) "a") (data (i32.const 98454) "a") (data (i32.const 98457) "a") (data (i32.const 98460) "a") (data (i32.const 98463) "a") (data (i32.const 98466) "a") (data (i32.const 98469) "a") (data (i32.const 98472) "a") (data (i32.const 98475) "a") (data (i32.const 98478) "a") (data (i32.const 98481) "a") (data (i32.const 98484) "a") (data (i32.const 98487) "a") (data (i32.const 98490) "a") (data (i32.const 98493) "a") (data (i32.const 98496) "a") (data (i32.const 98499) "a") (data (i32.const 98502) "a") (data (i32.const 98505) "a") (data (i32.const 98508) "a") (data (i32.const 98511) "a") (data (i32.const 98514) "a") (data (i32.const 98517) "a") (data (i32.const 98520) "a") (data (i32.const 98523) "a") (data (i32.const 98526) "a") (data (i32.const 98529) "a") (data (i32.const 98532) "a") (data (i32.const 98535) "a") (data (i32.const 98538) "a") (data (i32.const 98541) "a") (data (i32.const 98544) "a") (data (i32.const 98547) "a") (data (i32.const 98550) "a") (data (i32.const 98553) "a") (data (i32.const 98556) "a") (data (i32.const 98559) "a") (data (i32.const 98562) "a") (data (i32.const 98565) "a") (data (i32.const 98568) "a") (data (i32.const 98571) "a") (data (i32.const 98574) "a") (data (i32.const 98577) "a") (data (i32.const 98580) "a") (data (i32.const 98583) "a") (data (i32.const 98586) "a") (data (i32.const 98589) "a") (data (i32.const 98592) "a") (data (i32.const 98595) "a") (data (i32.const 98598) "a") (data (i32.const 98601) "a") (data (i32.const 98604) "a") (data (i32.const 98607) "a") (data (i32.const 98610) "a") (data (i32.const 98613) "a") (data (i32.const 98616) "a") (data (i32.const 98619) "a") (data (i32.const 98622) "a") (data (i32.const 98625) "a") (data (i32.const 98628) "a") (data (i32.const 98631) "a") (data (i32.const 98634) "a") (data (i32.const 98637) "a") (data (i32.const 98640) "a") (data (i32.const 98643) "a") (data (i32.const 98646) "a") (data (i32.const 98649) "a") (data (i32.const 98652) "a") (data (i32.const 98655) "a") (data (i32.const 98658) "a") (data (i32.const 98661) "a") (data (i32.const 98664) "a") (data (i32.const 98667) "a") (data (i32.const 98670) "a") (data (i32.const 98673) "a") (data (i32.const 98676) "a") (data (i32.const 98679) "a") (data (i32.const 98682) "a") (data (i32.const 98685) "a") (data (i32.const 98688) "a") (data (i32.const 98691) "a") (data (i32.const 98694) "a") (data (i32.const 98697) "a") (data (i32.const 98700) "a") (data (i32.const 98703) "a") (data (i32.const 98706) "a") (data (i32.const 98709) "a") (data (i32.const 98712) "a") (data (i32.const 98715) "a") (data (i32.const 98718) "a") (data (i32.const 98721) "a") (data (i32.const 98724) "a") (data (i32.const 98727) "a") (data (i32.const 98730) "a") (data (i32.const 98733) "a") (data (i32.const 98736) "a") (data (i32.const 98739) "a") (data (i32.const 98742) "a") (data (i32.const 98745) "a") (data (i32.const 98748) "a") (data (i32.const 98751) "a") (data (i32.const 98754) "a") (data (i32.const 98757) "a") (data (i32.const 98760) "a") (data (i32.const 98763) "a") (data (i32.const 98766) "a") (data (i32.const 98769) "a") (data (i32.const 98772) "a") (data (i32.const 98775) "a") (data (i32.const 98778) "a") (data (i32.const 98781) "a") (data (i32.const 98784) "a") (data (i32.const 98787) "a") (data (i32.const 98790) "a") (data (i32.const 98793) "a") (data (i32.const 98796) "a") (data (i32.const 98799) "a") (data (i32.const 98802) "a") (data (i32.const 98805) "a") (data (i32.const 98808) "a") (data (i32.const 98811) "a") (data (i32.const 98814) "a") (data (i32.const 98817) "a") (data (i32.const 98820) "a") (data (i32.const 98823) "a") (data (i32.const 98826) "a") (data (i32.const 98829) "a") (data (i32.const 98832) "a") (data (i32.const 98835) "a") (data (i32.const 98838) "a") (data (i32.const 98841) "a") (data (i32.const 98844) "a") (data (i32.const 98847) "a") (data (i32.const 98850) "a") (data (i32.const 98853) "a") (data (i32.const 98856) "a") (data (i32.const 98859) "a") (data (i32.const 98862) "a") (data (i32.const 98865) "a") (data (i32.const 98868) "a") (data (i32.const 98871) "a") (data (i32.const 98874) "a") (data (i32.const 98877) "a") (data (i32.const 98880) "a") (data (i32.const 98883) "a") (data (i32.const 98886) "a") (data (i32.const 98889) "a") (data (i32.const 98892) "a") (data (i32.const 98895) "a") (data (i32.const 98898) "a") (data (i32.const 98901) "a") (data (i32.const 98904) "a") (data (i32.const 98907) "a") (data (i32.const 98910) "a") (data (i32.const 98913) "a") (data (i32.const 98916) "a") (data (i32.const 98919) "a") (data (i32.const 98922) "a") (data (i32.const 98925) "a") (data (i32.const 98928) "a") (data (i32.const 98931) "a") (data (i32.const 98934) "a") (data (i32.const 98937) "a") (data (i32.const 98940) "a") (data (i32.const 98943) "a") (data (i32.const 98946) "a") (data (i32.const 98949) "a") (data (i32.const 98952) "a") (data (i32.const 98955) "a") (data (i32.const 98958) "a") (data (i32.const 98961) "a") (data (i32.const 98964) "a") (data (i32.const 98967) "a") (data (i32.const 98970) "a") (data (i32.const 98973) "a") (data (i32.const 98976) "a") (data (i32.const 98979) "a") (data (i32.const 98982) "a") (data (i32.const 98985) "a") (data (i32.const 98988) "a") (data (i32.const 98991) "a") (data (i32.const 98994) "a") (data (i32.const 98997) "a") (data (i32.const 99000) "a") (data (i32.const 99003) "a") (data (i32.const 99006) "a") (data (i32.const 99009) "a") (data (i32.const 99012) "a") (data (i32.const 99015) "a") (data (i32.const 99018) "a") (data (i32.const 99021) "a") (data (i32.const 99024) "a") (data (i32.const 99027) "a") (data (i32.const 99030) "a") (data (i32.const 99033) "a") (data (i32.const 99036) "a") (data (i32.const 99039) "a") (data (i32.const 99042) "a") (data (i32.const 99045) "a") (data (i32.const 99048) "a") (data (i32.const 99051) "a") (data (i32.const 99054) "a") (data (i32.const 99057) "a") (data (i32.const 99060) "a") (data (i32.const 99063) "a") (data (i32.const 99066) "a") (data (i32.const 99069) "a") (data (i32.const 99072) "a") (data (i32.const 99075) "a") (data (i32.const 99078) "a") (data (i32.const 99081) "a") (data (i32.const 99084) "a") (data (i32.const 99087) "a") (data (i32.const 99090) "a") (data (i32.const 99093) "a") (data (i32.const 99096) "a") (data (i32.const 99099) "a") (data (i32.const 99102) "a") (data (i32.const 99105) "a") (data (i32.const 99108) "a") (data (i32.const 99111) "a") (data (i32.const 99114) "a") (data (i32.const 99117) "a") (data (i32.const 99120) "a") (data (i32.const 99123) "a") (data (i32.const 99126) "a") (data (i32.const 99129) "a") (data (i32.const 99132) "a") (data (i32.const 99135) "a") (data (i32.const 99138) "a") (data (i32.const 99141) "a") (data (i32.const 99144) "a") (data (i32.const 99147) "a") (data (i32.const 99150) "a") (data (i32.const 99153) "a") (data (i32.const 99156) "a") (data (i32.const 99159) "a") (data (i32.const 99162) "a") (data (i32.const 99165) "a") (data (i32.const 99168) "a") (data (i32.const 99171) "a") (data (i32.const 99174) "a") (data (i32.const 99177) "a") (data (i32.const 99180) "a") (data (i32.const 99183) "a") (data (i32.const 99186) "a") (data (i32.const 99189) "a") (data (i32.const 99192) "a") (data (i32.const 99195) "a") (data (i32.const 99198) "a") (data (i32.const 99201) "a") (data (i32.const 99204) "a") (data (i32.const 99207) "a") (data (i32.const 99210) "a") (data (i32.const 99213) "a") (data (i32.const 99216) "a") (data (i32.const 99219) "a") (data (i32.const 99222) "a") (data (i32.const 99225) "a") (data (i32.const 99228) "a") (data (i32.const 99231) "a") (data (i32.const 99234) "a") (data (i32.const 99237) "a") (data (i32.const 99240) "a") (data (i32.const 99243) "a") (data (i32.const 99246) "a") (data (i32.const 99249) "a") (data (i32.const 99252) "a") (data (i32.const 99255) "a") (data (i32.const 99258) "a") (data (i32.const 99261) "a") (data (i32.const 99264) "a") (data (i32.const 99267) "a") (data (i32.const 99270) "a") (data (i32.const 99273) "a") (data (i32.const 99276) "a") (data (i32.const 99279) "a") (data (i32.const 99282) "a") (data (i32.const 99285) "a") (data (i32.const 99288) "a") (data (i32.const 99291) "a") (data (i32.const 99294) "a") (data (i32.const 99297) "a") (data (i32.const 99300) "a") (data (i32.const 99303) "a") (data (i32.const 99306) "a") (data (i32.const 99309) "a") (data (i32.const 99312) "a") (data (i32.const 99315) "a") (data (i32.const 99318) "a") (data (i32.const 99321) "a") (data (i32.const 99324) "a") (data (i32.const 99327) "a") (data (i32.const 99330) "a") (data (i32.const 99333) "a") (data (i32.const 99336) "a") (data (i32.const 99339) "a") (data (i32.const 99342) "a") (data (i32.const 99345) "a") (data (i32.const 99348) "a") (data (i32.const 99351) "a") (data (i32.const 99354) "a") (data (i32.const 99357) "a") (data (i32.const 99360) "a") (data (i32.const 99363) "a") (data (i32.const 99366) "a") (data (i32.const 99369) "a") (data (i32.const 99372) "a") (data (i32.const 99375) "a") (data (i32.const 99378) "a") (data (i32.const 99381) "a") (data (i32.const 99384) "a") (data (i32.const 99387) "a") (data (i32.const 99390) "a") (data (i32.const 99393) "a") (data (i32.const 99396) "a") (data (i32.const 99399) "a") (data (i32.const 99402) "a") (data (i32.const 99405) "a") (data (i32.const 99408) "a") (data (i32.const 99411) "a") (data (i32.const 99414) "a") (data (i32.const 99417) "a") (data (i32.const 99420) "a") (data (i32.const 99423) "a") (data (i32.const 99426) "a") (data (i32.const 99429) "a") (data (i32.const 99432) "a") (data (i32.const 99435) "a") (data (i32.const 99438) "a") (data (i32.const 99441) "a") (data (i32.const 99444) "a") (data (i32.const 99447) "a") (data (i32.const 99450) "a") (data (i32.const 99453) "a") (data (i32.const 99456) "a") (data (i32.const 99459) "a") (data (i32.const 99462) "a") (data (i32.const 99465) "a") (data (i32.const 99468) "a") (data (i32.const 99471) "a") (data (i32.const 99474) "a") (data (i32.const 99477) "a") (data (i32.const 99480) "a") (data (i32.const 99483) "a") (data (i32.const 99486) "a") (data (i32.const 99489) "a") (data (i32.const 99492) "a") (data (i32.const 99495) "a") (data (i32.const 99498) "a") (data (i32.const 99501) "a") (data (i32.const 99504) "a") (data (i32.const 99507) "a") (data (i32.const 99510) "a") (data (i32.const 99513) "a") (data (i32.const 99516) "a") (data (i32.const 99519) "a") (data (i32.const 99522) "a") (data (i32.const 99525) "a") (data (i32.const 99528) "a") (data (i32.const 99531) "a") (data (i32.const 99534) "a") (data (i32.const 99537) "a") (data (i32.const 99540) "a") (data (i32.const 99543) "a") (data (i32.const 99546) "a") (data (i32.const 99549) "a") (data (i32.const 99552) "a") (data (i32.const 99555) "a") (data (i32.const 99558) "a") (data (i32.const 99561) "a") (data (i32.const 99564) "a") (data (i32.const 99567) "a") (data (i32.const 99570) "a") (data (i32.const 99573) "a") (data (i32.const 99576) "a") (data (i32.const 99579) "a") (data (i32.const 99582) "a") (data (i32.const 99585) "a") (data (i32.const 99588) "a") (data (i32.const 99591) "a") (data (i32.const 99594) "a") (data (i32.const 99597) "a") (data (i32.const 99600) "a") (data (i32.const 99603) "a") (data (i32.const 99606) "a") (data (i32.const 99609) "a") (data (i32.const 99612) "a") (data (i32.const 99615) "a") (data (i32.const 99618) "a") (data (i32.const 99621) "a") (data (i32.const 99624) "a") (data (i32.const 99627) "a") (data (i32.const 99630) "a") (data (i32.const 99633) "a") (data (i32.const 99636) "a") (data (i32.const 99639) "a") (data (i32.const 99642) "a") (data (i32.const 99645) "a") (data (i32.const 99648) "a") (data (i32.const 99651) "a") (data (i32.const 99654) "a") (data (i32.const 99657) "a") (data (i32.const 99660) "a") (data (i32.const 99663) "a") (data (i32.const 99666) "a") (data (i32.const 99669) "a") (data (i32.const 99672) "a") (data (i32.const 99675) "a") (data (i32.const 99678) "a") (data (i32.const 99681) "a") (data (i32.const 99684) "a") (data (i32.const 99687) "a") (data (i32.const 99690) "a") (data (i32.const 99693) "a") (data (i32.const 99696) "a") (data (i32.const 99699) "a") (data (i32.const 99702) "a") (data (i32.const 99705) "a") (data (i32.const 99708) "a") (data (i32.const 99711) "a") (data (i32.const 99714) "a") (data (i32.const 99717) "a") (data (i32.const 99720) "a") (data (i32.const 99723) "a") (data (i32.const 99726) "a") (data (i32.const 99729) "a") (data (i32.const 99732) "a") (data (i32.const 99735) "a") (data (i32.const 99738) "a") (data (i32.const 99741) "a") (data (i32.const 99744) "a") (data (i32.const 99747) "a") (data (i32.const 99750) "a") (data (i32.const 99753) "a") (data (i32.const 99756) "a") (data (i32.const 99759) "a") (data (i32.const 99762) "a") (data (i32.const 99765) "a") (data (i32.const 99768) "a") (data (i32.const 99771) "a") (data (i32.const 99774) "a") (data (i32.const 99777) "a") (data (i32.const 99780) "a") (data (i32.const 99783) "a") (data (i32.const 99786) "a") (data (i32.const 99789) "a") (data (i32.const 99792) "a") (data (i32.const 99795) "a") (data (i32.const 99798) "a") (data (i32.const 99801) "a") (data (i32.const 99804) "a") (data (i32.const 99807) "a") (data (i32.const 99810) "a") (data (i32.const 99813) "a") (data (i32.const 99816) "a") (data (i32.const 99819) "a") (data (i32.const 99822) "a") (data (i32.const 99825) "a") (data (i32.const 99828) "a") (data (i32.const 99831) "a") (data (i32.const 99834) "a") (data (i32.const 99837) "a") (data (i32.const 99840) "a") (data (i32.const 99843) "a") (data (i32.const 99846) "a") (data (i32.const 99849) "a") (data (i32.const 99852) "a") (data (i32.const 99855) "a") (data (i32.const 99858) "a") (data (i32.const 99861) "a") (data (i32.const 99864) "a") (data (i32.const 99867) "a") (data (i32.const 99870) "a") (data (i32.const 99873) "a") (data (i32.const 99876) "a") (data (i32.const 99879) "a") (data (i32.const 99882) "a") (data (i32.const 99885) "a") (data (i32.const 99888) "a") (data (i32.const 99891) "a") (data (i32.const 99894) "a") (data (i32.const 99897) "a") (data (i32.const 99900) "a") (data (i32.const 99903) "a") (data (i32.const 99906) "a") (data (i32.const 99909) "a") (data (i32.const 99912) "a") (data (i32.const 99915) "a") (data (i32.const 99918) "a") (data (i32.const 99921) "a") (data (i32.const 99924) "a") (data (i32.const 99927) "a") (data (i32.const 99930) "a") (data (i32.const 99933) "a") (data (i32.const 99936) "a") (data (i32.const 99939) "a") (data (i32.const 99942) "a") (data (i32.const 99945) "a") (data (i32.const 99948) "a") (data (i32.const 99951) "a") (data (i32.const 99954) "a") (data (i32.const 99957) "a") (data (i32.const 99960) "a") (data (i32.const 99963) "a") (data (i32.const 99966) "a") (data (i32.const 99969) "a") (data (i32.const 99972) "a") (data (i32.const 99975) "a") (data (i32.const 99978) "a") (data (i32.const 99981) "a") (data (i32.const 99984) "a") (data (i32.const 99987) "a") (data (i32.const 99990) "a") (data (i32.const 99993) "a") (data (i32.const 99996) "a") (data (i32.const 99999) "a") (data (i32.const 100002) "a") (data (i32.const 100005) "a") (data (i32.const 100008) "a") (data (i32.const 100011) "a") (data (i32.const 100014) "a") (data (i32.const 100017) "a") (data (i32.const 100020) "a") (data (i32.const 100023) "a") (data (i32.const 100026) "a") (data (i32.const 100029) "a") (data (i32.const 100032) "a") (data (i32.const 100035) "a") (data (i32.const 100038) "a") (data (i32.const 100041) "a") (data (i32.const 100044) "a") (data (i32.const 100047) "a") (data (i32.const 100050) "a") (data (i32.const 100053) "a") (data (i32.const 100056) "a") (data (i32.const 100059) "a") (data (i32.const 100062) "a") (data (i32.const 100065) "a") (data (i32.const 100068) "a") (data (i32.const 100071) "a") (data (i32.const 100074) "a") (data (i32.const 100077) "a") (data (i32.const 100080) "a") (data (i32.const 100083) "a") (data (i32.const 100086) "a") (data (i32.const 100089) "a") (data (i32.const 100092) "a") (data (i32.const 100095) "a") (data (i32.const 100098) "a") (data (i32.const 100101) "a") (data (i32.const 100104) "a") (data (i32.const 100107) "a") (data (i32.const 100110) "a") (data (i32.const 100113) "a") (data (i32.const 100116) "a") (data (i32.const 100119) "a") (data (i32.const 100122) "a") (data (i32.const 100125) "a") (data (i32.const 100128) "a") (data (i32.const 100131) "a") (data (i32.const 100134) "a") (data (i32.const 100137) "a") (data (i32.const 100140) "a") (data (i32.const 100143) "a") (data (i32.const 100146) "a") (data (i32.const 100149) "a") (data (i32.const 100152) "a") (data (i32.const 100155) "a") (data (i32.const 100158) "a") (data (i32.const 100161) "a") (data (i32.const 100164) "a") (data (i32.const 100167) "a") (data (i32.const 100170) "a") (data (i32.const 100173) "a") (data (i32.const 100176) "a") (data (i32.const 100179) "a") (data (i32.const 100182) "a") (data (i32.const 100185) "a") (data (i32.const 100188) "a") (data (i32.const 100191) "a") (data (i32.const 100194) "a") (data (i32.const 100197) "a") (data (i32.const 100200) "a") (data (i32.const 100203) "a") (data (i32.const 100206) "a") (data (i32.const 100209) "a") (data (i32.const 100212) "a") (data (i32.const 100215) "a") (data (i32.const 100218) "a") (data (i32.const 100221) "a") (data (i32.const 100224) "a") (data (i32.const 100227) "a") (data (i32.const 100230) "a") (data (i32.const 100233) "a") (data (i32.const 100236) "a") (data (i32.const 100239) "a") (data (i32.const 100242) "a") (data (i32.const 100245) "a") (data (i32.const 100248) "a") (data (i32.const 100251) "a") (data (i32.const 100254) "a") (data (i32.const 100257) "a") (data (i32.const 100260) "a") (data (i32.const 100263) "a") (data (i32.const 100266) "a") (data (i32.const 100269) "a") (data (i32.const 100272) "a") (data (i32.const 100275) "a") (data (i32.const 100278) "a") (data (i32.const 100281) "a") (data (i32.const 100284) "a") (data (i32.const 100287) "a") (data (i32.const 100290) "a") (data (i32.const 100293) "a") (data (i32.const 100296) "a") (data (i32.const 100299) "a") (data (i32.const 100302) "a") (data (i32.const 100305) "a") (data (i32.const 100308) "a") (data (i32.const 100311) "a") (data (i32.const 100314) "a") (data (i32.const 100317) "a") (data (i32.const 100320) "a") (data (i32.const 100323) "a") (data (i32.const 100326) "a") (data (i32.const 100329) "a") (data (i32.const 100332) "a") (data (i32.const 100335) "a") (data (i32.const 100338) "a") (data (i32.const 100341) "a") (data (i32.const 100344) "a") (data (i32.const 100347) "a") (data (i32.const 100350) "a") (data (i32.const 100353) "a") (data (i32.const 100356) "a") (data (i32.const 100359) "a") (data (i32.const 100362) "a") (data (i32.const 100365) "a") (data (i32.const 100368) "a") (data (i32.const 100371) "a") (data (i32.const 100374) "a") (data (i32.const 100377) "a") (data (i32.const 100380) "a") (data (i32.const 100383) "a") (data (i32.const 100386) "a") (data (i32.const 100389) "a") (data (i32.const 100392) "a") (data (i32.const 100395) "a") (data (i32.const 100398) "a") (data (i32.const 100401) "a") (data (i32.const 100404) "a") (data (i32.const 100407) "a") (data (i32.const 100410) "a") (data (i32.const 100413) "a") (data (i32.const 100416) "a") (data (i32.const 100419) "a") (data (i32.const 100422) "a") (data (i32.const 100425) "a") (data (i32.const 100428) "a") (data (i32.const 100431) "a") (data (i32.const 100434) "a") (data (i32.const 100437) "a") (data (i32.const 100440) "a") (data (i32.const 100443) "a") (data (i32.const 100446) "a") (data (i32.const 100449) "a") (data (i32.const 100452) "a") (data (i32.const 100455) "a") (data (i32.const 100458) "a") (data (i32.const 100461) "a") (data (i32.const 100464) "a") (data (i32.const 100467) "a") (data (i32.const 100470) "a") (data (i32.const 100473) "a") (data (i32.const 100476) "a") (data (i32.const 100479) "a") (data (i32.const 100482) "a") (data (i32.const 100485) "a") (data (i32.const 100488) "a") (data (i32.const 100491) "a") (data (i32.const 100494) "a") (data (i32.const 100497) "a") (data (i32.const 100500) "a") (data (i32.const 100503) "a") (data (i32.const 100506) "a") (data (i32.const 100509) "a") (data (i32.const 100512) "a") (data (i32.const 100515) "a") (data (i32.const 100518) "a") (data (i32.const 100521) "a") (data (i32.const 100524) "a") (data (i32.const 100527) "a") (data (i32.const 100530) "a") (data (i32.const 100533) "a") (data (i32.const 100536) "a") (data (i32.const 100539) "a") (data (i32.const 100542) "a") (data (i32.const 100545) "a") (data (i32.const 100548) "a") (data (i32.const 100551) "a") (data (i32.const 100554) "a") (data (i32.const 100557) "a") (data (i32.const 100560) "a") (data (i32.const 100563) "a") (data (i32.const 100566) "a") (data (i32.const 100569) "a") (data (i32.const 100572) "a") (data (i32.const 100575) "a") (data (i32.const 100578) "a") (data (i32.const 100581) "a") (data (i32.const 100584) "a") (data (i32.const 100587) "a") (data (i32.const 100590) "a") (data (i32.const 100593) "a") (data (i32.const 100596) "a") (data (i32.const 100599) "a") (data (i32.const 100602) "a") (data (i32.const 100605) "a") (data (i32.const 100608) "a") (data (i32.const 100611) "a") (data (i32.const 100614) "a") (data (i32.const 100617) "a") (data (i32.const 100620) "a") (data (i32.const 100623) "a") (data (i32.const 100626) "a") (data (i32.const 100629) "a") (data (i32.const 100632) "a") (data (i32.const 100635) "a") (data (i32.const 100638) "a") (data (i32.const 100641) "a") (data (i32.const 100644) "a") (data (i32.const 100647) "a") (data (i32.const 100650) "a") (data (i32.const 100653) "a") (data (i32.const 100656) "a") (data (i32.const 100659) "a") (data (i32.const 100662) "a") (data (i32.const 100665) "a") (data (i32.const 100668) "a") (data (i32.const 100671) "a") (data (i32.const 100674) "a") (data (i32.const 100677) "a") (data (i32.const 100680) "a") (data (i32.const 100683) "a") (data (i32.const 100686) "a") (data (i32.const 100689) "a") (data (i32.const 100692) "a") (data (i32.const 100695) "a") (data (i32.const 100698) "a") (data (i32.const 100701) "a") (data (i32.const 100704) "a") (data (i32.const 100707) "a") (data (i32.const 100710) "a") (data (i32.const 100713) "a") (data (i32.const 100716) "a") (data (i32.const 100719) "a") (data (i32.const 100722) "a") (data (i32.const 100725) "a") (data (i32.const 100728) "a") (data (i32.const 100731) "a") (data (i32.const 100734) "a") (data (i32.const 100737) "a") (data (i32.const 100740) "a") (data (i32.const 100743) "a") (data (i32.const 100746) "a") (data (i32.const 100749) "a") (data (i32.const 100752) "a") (data (i32.const 100755) "a") (data (i32.const 100758) "a") (data (i32.const 100761) "a") (data (i32.const 100764) "a") (data (i32.const 100767) "a") (data (i32.const 100770) "a") (data (i32.const 100773) "a") (data (i32.const 100776) "a") (data (i32.const 100779) "a") (data (i32.const 100782) "a") (data (i32.const 100785) "a") (data (i32.const 100788) "a") (data (i32.const 100791) "a") (data (i32.const 100794) "a") (data (i32.const 100797) "a") (data (i32.const 100800) "a") (data (i32.const 100803) "a") (data (i32.const 100806) "a") (data (i32.const 100809) "a") (data (i32.const 100812) "a") (data (i32.const 100815) "a") (data (i32.const 100818) "a") (data (i32.const 100821) "a") (data (i32.const 100824) "a") (data (i32.const 100827) "a") (data (i32.const 100830) "a") (data (i32.const 100833) "a") (data (i32.const 100836) "a") (data (i32.const 100839) "a") (data (i32.const 100842) "a") (data (i32.const 100845) "a") (data (i32.const 100848) "a") (data (i32.const 100851) "a") (data (i32.const 100854) "a") (data (i32.const 100857) "a") (data (i32.const 100860) "a") (data (i32.const 100863) "a") (data (i32.const 100866) "a") (data (i32.const 100869) "a") (data (i32.const 100872) "a") (data (i32.const 100875) "a") (data (i32.const 100878) "a") (data (i32.const 100881) "a") (data (i32.const 100884) "a") (data (i32.const 100887) "a") (data (i32.const 100890) "a") (data (i32.const 100893) "a") (data (i32.const 100896) "a") (data (i32.const 100899) "a") (data (i32.const 100902) "a") (data (i32.const 100905) "a") (data (i32.const 100908) "a") (data (i32.const 100911) "a") (data (i32.const 100914) "a") (data (i32.const 100917) "a") (data (i32.const 100920) "a") (data (i32.const 100923) "a") (data (i32.const 100926) "a") (data (i32.const 100929) "a") (data (i32.const 100932) "a") (data (i32.const 100935) "a") (data (i32.const 100938) "a") (data (i32.const 100941) "a") (data (i32.const 100944) "a") (data (i32.const 100947) "a") (data (i32.const 100950) "a") (data (i32.const 100953) "a") (data (i32.const 100956) "a") (data (i32.const 100959) "a") (data (i32.const 100962) "a") (data (i32.const 100965) "a") (data (i32.const 100968) "a") (data (i32.const 100971) "a") (data (i32.const 100974) "a") (data (i32.const 100977) "a") (data (i32.const 100980) "a") (data (i32.const 100983) "a") (data (i32.const 100986) "a") (data (i32.const 100989) "a") (data (i32.const 100992) "a") (data (i32.const 100995) "a") (data (i32.const 100998) "a") (data (i32.const 101001) "a") (data (i32.const 101004) "a") (data (i32.const 101007) "a") (data (i32.const 101010) "a") (data (i32.const 101013) "a") (data (i32.const 101016) "a") (data (i32.const 101019) "a") (data (i32.const 101022) "a") (data (i32.const 101025) "a") (data (i32.const 101028) "a") (data (i32.const 101031) "a") (data (i32.const 101034) "a") (data (i32.const 101037) "a") (data (i32.const 101040) "a") (data (i32.const 101043) "a") (data (i32.const 101046) "a") (data (i32.const 101049) "a") (data (i32.const 101052) "a") (data (i32.const 101055) "a") (data (i32.const 101058) "a") (data (i32.const 101061) "a") (data (i32.const 101064) "a") (data (i32.const 101067) "a") (data (i32.const 101070) "a") (data (i32.const 101073) "a") (data (i32.const 101076) "a") (data (i32.const 101079) "a") (data (i32.const 101082) "a") (data (i32.const 101085) "a") (data (i32.const 101088) "a") (data (i32.const 101091) "a") (data (i32.const 101094) "a") (data (i32.const 101097) "a") (data (i32.const 101100) "a") (data (i32.const 101103) "a") (data (i32.const 101106) "a") (data (i32.const 101109) "a") (data (i32.const 101112) "a") (data (i32.const 101115) "a") (data (i32.const 101118) "a") (data (i32.const 101121) "a") (data (i32.const 101124) "a") (data (i32.const 101127) "a") (data (i32.const 101130) "a") (data (i32.const 101133) "a") (data (i32.const 101136) "a") (data (i32.const 101139) "a") (data (i32.const 101142) "a") (data (i32.const 101145) "a") (data (i32.const 101148) "a") (data (i32.const 101151) "a") (data (i32.const 101154) "a") (data (i32.const 101157) "a") (data (i32.const 101160) "a") (data (i32.const 101163) "a") (data (i32.const 101166) "a") (data (i32.const 101169) "a") (data (i32.const 101172) "a") (data (i32.const 101175) "a") (data (i32.const 101178) "a") (data (i32.const 101181) "a") (data (i32.const 101184) "a") (data (i32.const 101187) "a") (data (i32.const 101190) "a") (data (i32.const 101193) "a") (data (i32.const 101196) "a") (data (i32.const 101199) "a") (data (i32.const 101202) "a") (data (i32.const 101205) "a") (data (i32.const 101208) "a") (data (i32.const 101211) "a") (data (i32.const 101214) "a") (data (i32.const 101217) "a") (data (i32.const 101220) "a") (data (i32.const 101223) "a") (data (i32.const 101226) "a") (data (i32.const 101229) "a") (data (i32.const 101232) "a") (data (i32.const 101235) "a") (data (i32.const 101238) "a") (data (i32.const 101241) "a") (data (i32.const 101244) "a") (data (i32.const 101247) "a") (data (i32.const 101250) "a") (data (i32.const 101253) "a") (data (i32.const 101256) "a") (data (i32.const 101259) "a") (data (i32.const 101262) "a") (data (i32.const 101265) "a") (data (i32.const 101268) "a") (data (i32.const 101271) "a") (data (i32.const 101274) "a") (data (i32.const 101277) "a") (data (i32.const 101280) "a") (data (i32.const 101283) "a") (data (i32.const 101286) "a") (data (i32.const 101289) "a") (data (i32.const 101292) "a") (data (i32.const 101295) "a") (data (i32.const 101298) "a") (data (i32.const 101301) "a") (data (i32.const 101304) "a") (data (i32.const 101307) "a") (data (i32.const 101310) "a") (data (i32.const 101313) "a") (data (i32.const 101316) "a") (data (i32.const 101319) "a") (data (i32.const 101322) "a") (data (i32.const 101325) "a") (data (i32.const 101328) "a") (data (i32.const 101331) "a") (data (i32.const 101334) "a") (data (i32.const 101337) "a") (data (i32.const 101340) "a") (data (i32.const 101343) "a") (data (i32.const 101346) "a") (data (i32.const 101349) "a") (data (i32.const 101352) "a") (data (i32.const 101355) "a") (data (i32.const 101358) "a") (data (i32.const 101361) "a") (data (i32.const 101364) "a") (data (i32.const 101367) "a") (data (i32.const 101370) "a") (data (i32.const 101373) "a") (data (i32.const 101376) "a") (data (i32.const 101379) "a") (data (i32.const 101382) "a") (data (i32.const 101385) "a") (data (i32.const 101388) "a") (data (i32.const 101391) "a") (data (i32.const 101394) "a") (data (i32.const 101397) "a") (data (i32.const 101400) "a") (data (i32.const 101403) "a") (data (i32.const 101406) "a") (data (i32.const 101409) "a") (data (i32.const 101412) "a") (data (i32.const 101415) "a") (data (i32.const 101418) "a") (data (i32.const 101421) "a") (data (i32.const 101424) "a") (data (i32.const 101427) "a") (data (i32.const 101430) "a") (data (i32.const 101433) "a") (data (i32.const 101436) "a") (data (i32.const 101439) "a") (data (i32.const 101442) "a") (data (i32.const 101445) "a") (data (i32.const 101448) "a") (data (i32.const 101451) "a") (data (i32.const 101454) "a") (data (i32.const 101457) "a") (data (i32.const 101460) "a") (data (i32.const 101463) "a") (data (i32.const 101466) "a") (data (i32.const 101469) "a") (data (i32.const 101472) "a") (data (i32.const 101475) "a") (data (i32.const 101478) "a") (data (i32.const 101481) "a") (data (i32.const 101484) "a") (data (i32.const 101487) "a") (data (i32.const 101490) "a") (data (i32.const 101493) "a") (data (i32.const 101496) "a") (data (i32.const 101499) "a") (data (i32.const 101502) "a") (data (i32.const 101505) "a") (data (i32.const 101508) "a") (data (i32.const 101511) "a") (data (i32.const 101514) "a") (data (i32.const 101517) "a") (data (i32.const 101520) "a") (data (i32.const 101523) "a") (data (i32.const 101526) "a") (data (i32.const 101529) "a") (data (i32.const 101532) "a") (data (i32.const 101535) "a") (data (i32.const 101538) "a") (data (i32.const 101541) "a") (data (i32.const 101544) "a") (data (i32.const 101547) "a") (data (i32.const 101550) "a") (data (i32.const 101553) "a") (data (i32.const 101556) "a") (data (i32.const 101559) "a") (data (i32.const 101562) "a") (data (i32.const 101565) "a") (data (i32.const 101568) "a") (data (i32.const 101571) "a") (data (i32.const 101574) "a") (data (i32.const 101577) "a") (data (i32.const 101580) "a") (data (i32.const 101583) "a") (data (i32.const 101586) "a") (data (i32.const 101589) "a") (data (i32.const 101592) "a") (data (i32.const 101595) "a") (data (i32.const 101598) "a") (data (i32.const 101601) "a") (data (i32.const 101604) "a") (data (i32.const 101607) "a") (data (i32.const 101610) "a") (data (i32.const 101613) "a") (data (i32.const 101616) "a") (data (i32.const 101619) "a") (data (i32.const 101622) "a") (data (i32.const 101625) "a") (data (i32.const 101628) "a") (data (i32.const 101631) "a") (data (i32.const 101634) "a") (data (i32.const 101637) "a") (data (i32.const 101640) "a") (data (i32.const 101643) "a") (data (i32.const 101646) "a") (data (i32.const 101649) "a") (data (i32.const 101652) "a") (data (i32.const 101655) "a") (data (i32.const 101658) "a") (data (i32.const 101661) "a") (data (i32.const 101664) "a") (data (i32.const 101667) "a") (data (i32.const 101670) "a") (data (i32.const 101673) "a") (data (i32.const 101676) "a") (data (i32.const 101679) "a") (data (i32.const 101682) "a") (data (i32.const 101685) "a") (data (i32.const 101688) "a") (data (i32.const 101691) "a") (data (i32.const 101694) "a") (data (i32.const 101697) "a") (data (i32.const 101700) "a") (data (i32.const 101703) "a") (data (i32.const 101706) "a") (data (i32.const 101709) "a") (data (i32.const 101712) "a") (data (i32.const 101715) "a") (data (i32.const 101718) "a") (data (i32.const 101721) "a") (data (i32.const 101724) "a") (data (i32.const 101727) "a") (data (i32.const 101730) "a") (data (i32.const 101733) "a") (data (i32.const 101736) "a") (data (i32.const 101739) "a") (data (i32.const 101742) "a") (data (i32.const 101745) "a") (data (i32.const 101748) "a") (data (i32.const 101751) "a") (data (i32.const 101754) "a") (data (i32.const 101757) "a") (data (i32.const 101760) "a") (data (i32.const 101763) "a") (data (i32.const 101766) "a") (data (i32.const 101769) "a") (data (i32.const 101772) "a") (data (i32.const 101775) "a") (data (i32.const 101778) "a") (data (i32.const 101781) "a") (data (i32.const 101784) "a") (data (i32.const 101787) "a") (data (i32.const 101790) "a") (data (i32.const 101793) "a") (data (i32.const 101796) "a") (data (i32.const 101799) "a") (data (i32.const 101802) "a") (data (i32.const 101805) "a") (data (i32.const 101808) "a") (data (i32.const 101811) "a") (data (i32.const 101814) "a") (data (i32.const 101817) "a") (data (i32.const 101820) "a") (data (i32.const 101823) "a") (data (i32.const 101826) "a") (data (i32.const 101829) "a") (data (i32.const 101832) "a") (data (i32.const 101835) "a") (data (i32.const 101838) "a") (data (i32.const 101841) "a") (data (i32.const 101844) "a") (data (i32.const 101847) "a") (data (i32.const 101850) "a") (data (i32.const 101853) "a") (data (i32.const 101856) "a") (data (i32.const 101859) "a") (data (i32.const 101862) "a") (data (i32.const 101865) "a") (data (i32.const 101868) "a") (data (i32.const 101871) "a") (data (i32.const 101874) "a") (data (i32.const 101877) "a") (data (i32.const 101880) "a") (data (i32.const 101883) "a") (data (i32.const 101886) "a") (data (i32.const 101889) "a") (data (i32.const 101892) "a") (data (i32.const 101895) "a") (data (i32.const 101898) "a") (data (i32.const 101901) "a") (data (i32.const 101904) "a") (data (i32.const 101907) "a") (data (i32.const 101910) "a") (data (i32.const 101913) "a") (data (i32.const 101916) "a") (data (i32.const 101919) "a") (data (i32.const 101922) "a") (data (i32.const 101925) "a") (data (i32.const 101928) "a") (data (i32.const 101931) "a") (data (i32.const 101934) "a") (data (i32.const 101937) "a") (data (i32.const 101940) "a") (data (i32.const 101943) "a") (data (i32.const 101946) "a") (data (i32.const 101949) "a") (data (i32.const 101952) "a") (data (i32.const 101955) "a") (data (i32.const 101958) "a") (data (i32.const 101961) "a") (data (i32.const 101964) "a") (data (i32.const 101967) "a") (data (i32.const 101970) "a") (data (i32.const 101973) "a") (data (i32.const 101976) "a") (data (i32.const 101979) "a") (data (i32.const 101982) "a") (data (i32.const 101985) "a") (data (i32.const 101988) "a") (data (i32.const 101991) "a") (data (i32.const 101994) "a") (data (i32.const 101997) "a") (data (i32.const 102000) "a") (data (i32.const 102003) "a") (data (i32.const 102006) "a") (data (i32.const 102009) "a") (data (i32.const 102012) "a") (data (i32.const 102015) "a") (data (i32.const 102018) "a") (data (i32.const 102021) "a") (data (i32.const 102024) "a") (data (i32.const 102027) "a") (data (i32.const 102030) "a") (data (i32.const 102033) "a") (data (i32.const 102036) "a") (data (i32.const 102039) "a") (data (i32.const 102042) "a") (data (i32.const 102045) "a") (data (i32.const 102048) "a") (data (i32.const 102051) "a") (data (i32.const 102054) "a") (data (i32.const 102057) "a") (data (i32.const 102060) "a") (data (i32.const 102063) "a") (data (i32.const 102066) "a") (data (i32.const 102069) "a") (data (i32.const 102072) "a") (data (i32.const 102075) "a") (data (i32.const 102078) "a") (data (i32.const 102081) "a") (data (i32.const 102084) "a") (data (i32.const 102087) "a") (data (i32.const 102090) "a") (data (i32.const 102093) "a") (data (i32.const 102096) "a") (data (i32.const 102099) "a") (data (i32.const 102102) "a") (data (i32.const 102105) "a") (data (i32.const 102108) "a") (data (i32.const 102111) "a") (data (i32.const 102114) "a") (data (i32.const 102117) "a") (data (i32.const 102120) "a") (data (i32.const 102123) "a") (data (i32.const 102126) "a") (data (i32.const 102129) "a") (data (i32.const 102132) "a") (data (i32.const 102135) "a") (data (i32.const 102138) "a") (data (i32.const 102141) "a") (data (i32.const 102144) "a") (data (i32.const 102147) "a") (data (i32.const 102150) "a") (data (i32.const 102153) "a") (data (i32.const 102156) "a") (data (i32.const 102159) "a") (data (i32.const 102162) "a") (data (i32.const 102165) "a") (data (i32.const 102168) "a") (data (i32.const 102171) "a") (data (i32.const 102174) "a") (data (i32.const 102177) "a") (data (i32.const 102180) "a") (data (i32.const 102183) "a") (data (i32.const 102186) "a") (data (i32.const 102189) "a") (data (i32.const 102192) "a") (data (i32.const 102195) "a") (data (i32.const 102198) "a") (data (i32.const 102201) "a") (data (i32.const 102204) "a") (data (i32.const 102207) "a") (data (i32.const 102210) "a") (data (i32.const 102213) "a") (data (i32.const 102216) "a") (data (i32.const 102219) "a") (data (i32.const 102222) "a") (data (i32.const 102225) "a") (data (i32.const 102228) "a") (data (i32.const 102231) "a") (data (i32.const 102234) "a") (data (i32.const 102237) "a") (data (i32.const 102240) "a") (data (i32.const 102243) "a") (data (i32.const 102246) "a") (data (i32.const 102249) "a") (data (i32.const 102252) "a") (data (i32.const 102255) "a") (data (i32.const 102258) "a") (data (i32.const 102261) "a") (data (i32.const 102264) "a") (data (i32.const 102267) "a") (data (i32.const 102270) "a") (data (i32.const 102273) "a") (data (i32.const 102276) "a") (data (i32.const 102279) "a") (data (i32.const 102282) "a") (data (i32.const 102285) "a") (data (i32.const 102288) "a") (data (i32.const 102291) "a") (data (i32.const 102294) "a") (data (i32.const 102297) "a") (data (i32.const 102300) "a") (data (i32.const 102303) "a") (data (i32.const 102306) "a") (data (i32.const 102309) "a") (data (i32.const 102312) "a") (data (i32.const 102315) "a") (data (i32.const 102318) "a") (data (i32.const 102321) "a") (data (i32.const 102324) "a") (data (i32.const 102327) "a") (data (i32.const 102330) "a") (data (i32.const 102333) "a") (data (i32.const 102336) "a") (data (i32.const 102339) "a") (data (i32.const 102342) "a") (data (i32.const 102345) "a") (data (i32.const 102348) "a") (data (i32.const 102351) "a") (data (i32.const 102354) "a") (data (i32.const 102357) "a") (data (i32.const 102360) "a") (data (i32.const 102363) "a") (data (i32.const 102366) "a") (data (i32.const 102369) "a") (data (i32.const 102372) "a") (data (i32.const 102375) "a") (data (i32.const 102378) "a") (data (i32.const 102381) "a") (data (i32.const 102384) "a") (data (i32.const 102387) "a") (data (i32.const 102390) "a") (data (i32.const 102393) "a") (data (i32.const 102396) "a") (data (i32.const 102399) "a") (data (i32.const 102402) "a") (data (i32.const 102405) "a") (data (i32.const 102408) "a") (data (i32.const 102411) "a") (data (i32.const 102414) "a") (data (i32.const 102417) "a") (data (i32.const 102420) "a") (data (i32.const 102423) "a") (data (i32.const 102426) "a") (data (i32.const 102429) "a") (data (i32.const 102432) "a") (data (i32.const 102435) "a") (data (i32.const 102438) "a") (data (i32.const 102441) "a") (data (i32.const 102444) "a") (data (i32.const 102447) "a") (data (i32.const 102450) "a") (data (i32.const 102453) "a") (data (i32.const 102456) "a") (data (i32.const 102459) "a") (data (i32.const 102462) "a") (data (i32.const 102465) "a") (data (i32.const 102468) "a") (data (i32.const 102471) "a") (data (i32.const 102474) "a") (data (i32.const 102477) "a") (data (i32.const 102480) "a") (data (i32.const 102483) "a") (data (i32.const 102486) "a") (data (i32.const 102489) "a") (data (i32.const 102492) "a") (data (i32.const 102495) "a") (data (i32.const 102498) "a") (data (i32.const 102501) "a") (data (i32.const 102504) "a") (data (i32.const 102507) "a") (data (i32.const 102510) "a") (data (i32.const 102513) "a") (data (i32.const 102516) "a") (data (i32.const 102519) "a") (data (i32.const 102522) "a") (data (i32.const 102525) "a") (data (i32.const 102528) "a") (data (i32.const 102531) "a") (data (i32.const 102534) "a") (data (i32.const 102537) "a") (data (i32.const 102540) "a") (data (i32.const 102543) "a") (data (i32.const 102546) "a") (data (i32.const 102549) "a") (data (i32.const 102552) "a") (data (i32.const 102555) "a") (data (i32.const 102558) "a") (data (i32.const 102561) "a") (data (i32.const 102564) "a") (data (i32.const 102567) "a") (data (i32.const 102570) "a") (data (i32.const 102573) "a") (data (i32.const 102576) "a") (data (i32.const 102579) "a") (data (i32.const 102582) "a") (data (i32.const 102585) "a") (data (i32.const 102588) "a") (data (i32.const 102591) "a") (data (i32.const 102594) "a") (data (i32.const 102597) "a") (data (i32.const 102600) "a") (data (i32.const 102603) "a") (data (i32.const 102606) "a") (data (i32.const 102609) "a") (data (i32.const 102612) "a") (data (i32.const 102615) "a") (data (i32.const 102618) "a") (data (i32.const 102621) "a") (data (i32.const 102624) "a") (data (i32.const 102627) "a") (data (i32.const 102630) "a") (data (i32.const 102633) "a") (data (i32.const 102636) "a") (data (i32.const 102639) "a") (data (i32.const 102642) "a") (data (i32.const 102645) "a") (data (i32.const 102648) "a") (data (i32.const 102651) "a") (data (i32.const 102654) "a") (data (i32.const 102657) "a") (data (i32.const 102660) "a") (data (i32.const 102663) "a") (data (i32.const 102666) "a") (data (i32.const 102669) "a") (data (i32.const 102672) "a") (data (i32.const 102675) "a") (data (i32.const 102678) "a") (data (i32.const 102681) "a") (data (i32.const 102684) "a") (data (i32.const 102687) "a") (data (i32.const 102690) "a") (data (i32.const 102693) "a") (data (i32.const 102696) "a") (data (i32.const 102699) "a") (data (i32.const 102702) "a") (data (i32.const 102705) "a") (data (i32.const 102708) "a") (data (i32.const 102711) "a") (data (i32.const 102714) "a") (data (i32.const 102717) "a") (data (i32.const 102720) "a") (data (i32.const 102723) "a") (data (i32.const 102726) "a") (data (i32.const 102729) "a") (data (i32.const 102732) "a") (data (i32.const 102735) "a") (data (i32.const 102738) "a") (data (i32.const 102741) "a") (data (i32.const 102744) "a") (data (i32.const 102747) "a") (data (i32.const 102750) "a") (data (i32.const 102753) "a") (data (i32.const 102756) "a") (data (i32.const 102759) "a") (data (i32.const 102762) "a") (data (i32.const 102765) "a") (data (i32.const 102768) "a") (data (i32.const 102771) "a") (data (i32.const 102774) "a") (data (i32.const 102777) "a") (data (i32.const 102780) "a") (data (i32.const 102783) "a") (data (i32.const 102786) "a") (data (i32.const 102789) "a") (data (i32.const 102792) "a") (data (i32.const 102795) "a") (data (i32.const 102798) "a") (data (i32.const 102801) "a") (data (i32.const 102804) "a") (data (i32.const 102807) "a") (data (i32.const 102810) "a") (data (i32.const 102813) "a") (data (i32.const 102816) "a") (data (i32.const 102819) "a") (data (i32.const 102822) "a") (data (i32.const 102825) "a") (data (i32.const 102828) "a") (data (i32.const 102831) "a") (data (i32.const 102834) "a") (data (i32.const 102837) "a") (data (i32.const 102840) "a") (data (i32.const 102843) "a") (data (i32.const 102846) "a") (data (i32.const 102849) "a") (data (i32.const 102852) "a") (data (i32.const 102855) "a") (data (i32.const 102858) "a") (data (i32.const 102861) "a") (data (i32.const 102864) "a") (data (i32.const 102867) "a") (data (i32.const 102870) "a") (data (i32.const 102873) "a") (data (i32.const 102876) "a") (data (i32.const 102879) "a") (data (i32.const 102882) "a") (data (i32.const 102885) "a") (data (i32.const 102888) "a") (data (i32.const 102891) "a") (data (i32.const 102894) "a") (data (i32.const 102897) "a") (data (i32.const 102900) "a") (data (i32.const 102903) "a") (data (i32.const 102906) "a") (data (i32.const 102909) "a") (data (i32.const 102912) "a") (data (i32.const 102915) "a") (data (i32.const 102918) "a") (data (i32.const 102921) "a") (data (i32.const 102924) "a") (data (i32.const 102927) "a") (data (i32.const 102930) "a") (data (i32.const 102933) "a") (data (i32.const 102936) "a") (data (i32.const 102939) "a") (data (i32.const 102942) "a") (data (i32.const 102945) "a") (data (i32.const 102948) "a") (data (i32.const 102951) "a") (data (i32.const 102954) "a") (data (i32.const 102957) "a") (data (i32.const 102960) "a") (data (i32.const 102963) "a") (data (i32.const 102966) "a") (data (i32.const 102969) "a") (data (i32.const 102972) "a") (data (i32.const 102975) "a") (data (i32.const 102978) "a") (data (i32.const 102981) "a") (data (i32.const 102984) "a") (data (i32.const 102987) "a") (data (i32.const 102990) "a") (data (i32.const 102993) "a") (data (i32.const 102996) "a") (data (i32.const 102999) "a") (data (i32.const 103002) "a") (data (i32.const 103005) "a") (data (i32.const 103008) "a") (data (i32.const 103011) "a") (data (i32.const 103014) "a") (data (i32.const 103017) "a") (data (i32.const 103020) "a") (data (i32.const 103023) "a") (data (i32.const 103026) "a") (data (i32.const 103029) "a") (data (i32.const 103032) "a") (data (i32.const 103035) "a") (data (i32.const 103038) "a") (data (i32.const 103041) "a") (data (i32.const 103044) "a") (data (i32.const 103047) "a") (data (i32.const 103050) "a") (data (i32.const 103053) "a") (data (i32.const 103056) "a") (data (i32.const 103059) "a") (data (i32.const 103062) "a") (data (i32.const 103065) "a") (data (i32.const 103068) "a") (data (i32.const 103071) "a") (data (i32.const 103074) "a") (data (i32.const 103077) "a") (data (i32.const 103080) "a") (data (i32.const 103083) "a") (data (i32.const 103086) "a") (data (i32.const 103089) "a") (data (i32.const 103092) "a") (data (i32.const 103095) "a") (data (i32.const 103098) "a") (data (i32.const 103101) "a") (data (i32.const 103104) "a") (data (i32.const 103107) "a") (data (i32.const 103110) "a") (data (i32.const 103113) "a") (data (i32.const 103116) "a") (data (i32.const 103119) "a") (data (i32.const 103122) "a") (data (i32.const 103125) "a") (data (i32.const 103128) "a") (data (i32.const 103131) "a") (data (i32.const 103134) "a") (data (i32.const 103137) "a") (data (i32.const 103140) "a") (data (i32.const 103143) "a") (data (i32.const 103146) "a") (data (i32.const 103149) "a") (data (i32.const 103152) "a") (data (i32.const 103155) "a") (data (i32.const 103158) "a") (data (i32.const 103161) "a") (data (i32.const 103164) "a") (data (i32.const 103167) "a") (data (i32.const 103170) "a") (data (i32.const 103173) "a") (data (i32.const 103176) "a") (data (i32.const 103179) "a") (data (i32.const 103182) "a") (data (i32.const 103185) "a") (data (i32.const 103188) "a") (data (i32.const 103191) "a") (data (i32.const 103194) "a") (data (i32.const 103197) "a") (data (i32.const 103200) "a") (data (i32.const 103203) "a") (data (i32.const 103206) "a") (data (i32.const 103209) "a") (data (i32.const 103212) "a") (data (i32.const 103215) "a") (data (i32.const 103218) "a") (data (i32.const 103221) "a") (data (i32.const 103224) "a") (data (i32.const 103227) "a") (data (i32.const 103230) "a") (data (i32.const 103233) "a") (data (i32.const 103236) "a") (data (i32.const 103239) "a") (data (i32.const 103242) "a") (data (i32.const 103245) "a") (data (i32.const 103248) "a") (data (i32.const 103251) "a") (data (i32.const 103254) "a") (data (i32.const 103257) "a") (data (i32.const 103260) "a") (data (i32.const 103263) "a") (data (i32.const 103266) "a") (data (i32.const 103269) "a") (data (i32.const 103272) "a") (data (i32.const 103275) "a") (data (i32.const 103278) "a") (data (i32.const 103281) "a") (data (i32.const 103284) "a") (data (i32.const 103287) "a") (data (i32.const 103290) "a") (data (i32.const 103293) "a") (data (i32.const 103296) "a") (data (i32.const 103299) "a") (data (i32.const 103302) "a") (data (i32.const 103305) "a") (data (i32.const 103308) "a") (data (i32.const 103311) "a") (data (i32.const 103314) "a") (data (i32.const 103317) "a") (data (i32.const 103320) "a") (data (i32.const 103323) "a") (data (i32.const 103326) "a") (data (i32.const 103329) "a") (data (i32.const 103332) "a") (data (i32.const 103335) "a") (data (i32.const 103338) "a") (data (i32.const 103341) "a") (data (i32.const 103344) "a") (data (i32.const 103347) "a") (data (i32.const 103350) "a") (data (i32.const 103353) "a") (data (i32.const 103356) "a") (data (i32.const 103359) "a") (data (i32.const 103362) "a") (data (i32.const 103365) "a") (data (i32.const 103368) "a") (data (i32.const 103371) "a") (data (i32.const 103374) "a") (data (i32.const 103377) "a") (data (i32.const 103380) "a") (data (i32.const 103383) "a") (data (i32.const 103386) "a") (data (i32.const 103389) "a") (data (i32.const 103392) "a") (data (i32.const 103395) "a") (data (i32.const 103398) "a") (data (i32.const 103401) "a") (data (i32.const 103404) "a") (data (i32.const 103407) "a") (data (i32.const 103410) "a") (data (i32.const 103413) "a") (data (i32.const 103416) "a") (data (i32.const 103419) "a") (data (i32.const 103422) "a") (data (i32.const 103425) "a") (data (i32.const 103428) "a") (data (i32.const 103431) "a") (data (i32.const 103434) "a") (data (i32.const 103437) "a") (data (i32.const 103440) "a") (data (i32.const 103443) "a") (data (i32.const 103446) "a") (data (i32.const 103449) "a") (data (i32.const 103452) "a") (data (i32.const 103455) "a") (data (i32.const 103458) "a") (data (i32.const 103461) "a") (data (i32.const 103464) "a") (data (i32.const 103467) "a") (data (i32.const 103470) "a") (data (i32.const 103473) "a") (data (i32.const 103476) "a") (data (i32.const 103479) "a") (data (i32.const 103482) "a") (data (i32.const 103485) "a") (data (i32.const 103488) "a") (data (i32.const 103491) "a") (data (i32.const 103494) "a") (data (i32.const 103497) "a") (data (i32.const 103500) "a") (data (i32.const 103503) "a") (data (i32.const 103506) "a") (data (i32.const 103509) "a") (data (i32.const 103512) "a") (data (i32.const 103515) "a") (data (i32.const 103518) "a") (data (i32.const 103521) "a") (data (i32.const 103524) "a") (data (i32.const 103527) "a") (data (i32.const 103530) "a") (data (i32.const 103533) "a") (data (i32.const 103536) "a") (data (i32.const 103539) "a") (data (i32.const 103542) "a") (data (i32.const 103545) "a") (data (i32.const 103548) "a") (data (i32.const 103551) "a") (data (i32.const 103554) "a") (data (i32.const 103557) "a") (data (i32.const 103560) "a") (data (i32.const 103563) "a") (data (i32.const 103566) "a") (data (i32.const 103569) "a") (data (i32.const 103572) "a") (data (i32.const 103575) "a") (data (i32.const 103578) "a") (data (i32.const 103581) "a") (data (i32.const 103584) "a") (data (i32.const 103587) "a") (data (i32.const 103590) "a") (data (i32.const 103593) "a") (data (i32.const 103596) "a") (data (i32.const 103599) "a") (data (i32.const 103602) "a") (data (i32.const 103605) "a") (data (i32.const 103608) "a") (data (i32.const 103611) "a") (data (i32.const 103614) "a") (data (i32.const 103617) "a") (data (i32.const 103620) "a") (data (i32.const 103623) "a") (data (i32.const 103626) "a") (data (i32.const 103629) "a") (data (i32.const 103632) "a") (data (i32.const 103635) "a") (data (i32.const 103638) "a") (data (i32.const 103641) "a") (data (i32.const 103644) "a") (data (i32.const 103647) "a") (data (i32.const 103650) "a") (data (i32.const 103653) "a") (data (i32.const 103656) "a") (data (i32.const 103659) "a") (data (i32.const 103662) "a") (data (i32.const 103665) "a") (data (i32.const 103668) "a") (data (i32.const 103671) "a") (data (i32.const 103674) "a") (data (i32.const 103677) "a") (data (i32.const 103680) "a") (data (i32.const 103683) "a") (data (i32.const 103686) "a") (data (i32.const 103689) "a") (data (i32.const 103692) "a") (data (i32.const 103695) "a") (data (i32.const 103698) "a") (data (i32.const 103701) "a") (data (i32.const 103704) "a") (data (i32.const 103707) "a") (data (i32.const 103710) "a") (data (i32.const 103713) "a") (data (i32.const 103716) "a") (data (i32.const 103719) "a") (data (i32.const 103722) "a") (data (i32.const 103725) "a") (data (i32.const 103728) "a") (data (i32.const 103731) "a") (data (i32.const 103734) "a") (data (i32.const 103737) "a") (data (i32.const 103740) "a") (data (i32.const 103743) "a") (data (i32.const 103746) "a") (data (i32.const 103749) "a") (data (i32.const 103752) "a") (data (i32.const 103755) "a") (data (i32.const 103758) "a") (data (i32.const 103761) "a") (data (i32.const 103764) "a") (data (i32.const 103767) "a") (data (i32.const 103770) "a") (data (i32.const 103773) "a") (data (i32.const 103776) "a") (data (i32.const 103779) "a") (data (i32.const 103782) "a") (data (i32.const 103785) "a") (data (i32.const 103788) "a") (data (i32.const 103791) "a") (data (i32.const 103794) "a") (data (i32.const 103797) "a") (data (i32.const 103800) "a") (data (i32.const 103803) "a") (data (i32.const 103806) "a") (data (i32.const 103809) "a") (data (i32.const 103812) "a") (data (i32.const 103815) "a") (data (i32.const 103818) "a") (data (i32.const 103821) "a") (data (i32.const 103824) "a") (data (i32.const 103827) "a") (data (i32.const 103830) "a") (data (i32.const 103833) "a") (data (i32.const 103836) "a") (data (i32.const 103839) "a") (data (i32.const 103842) "a") (data (i32.const 103845) "a") (data (i32.const 103848) "a") (data (i32.const 103851) "a") (data (i32.const 103854) "a") (data (i32.const 103857) "a") (data (i32.const 103860) "a") (data (i32.const 103863) "a") (data (i32.const 103866) "a") (data (i32.const 103869) "a") (data (i32.const 103872) "a") (data (i32.const 103875) "a") (data (i32.const 103878) "a") (data (i32.const 103881) "a") (data (i32.const 103884) "a") (data (i32.const 103887) "a") (data (i32.const 103890) "a") (data (i32.const 103893) "a") (data (i32.const 103896) "a") (data (i32.const 103899) "a") (data (i32.const 103902) "a") (data (i32.const 103905) "a") (data (i32.const 103908) "a") (data (i32.const 103911) "a") (data (i32.const 103914) "a") (data (i32.const 103917) "a") (data (i32.const 103920) "a") (data (i32.const 103923) "a") (data (i32.const 103926) "a") (data (i32.const 103929) "a") (data (i32.const 103932) "a") (data (i32.const 103935) "a") (data (i32.const 103938) "a") (data (i32.const 103941) "a") (data (i32.const 103944) "a") (data (i32.const 103947) "a") (data (i32.const 103950) "a") (data (i32.const 103953) "a") (data (i32.const 103956) "a") (data (i32.const 103959) "a") (data (i32.const 103962) "a") (data (i32.const 103965) "a") (data (i32.const 103968) "a") (data (i32.const 103971) "a") (data (i32.const 103974) "a") (data (i32.const 103977) "a") (data (i32.const 103980) "a") (data (i32.const 103983) "a") (data (i32.const 103986) "a") (data (i32.const 103989) "a") (data (i32.const 103992) "a") (data (i32.const 103995) "a") (data (i32.const 103998) "a") (data (i32.const 104001) "a") (data (i32.const 104004) "a") (data (i32.const 104007) "a") (data (i32.const 104010) "a") (data (i32.const 104013) "a") (data (i32.const 104016) "a") (data (i32.const 104019) "a") (data (i32.const 104022) "a") (data (i32.const 104025) "a") (data (i32.const 104028) "a") (data (i32.const 104031) "a") (data (i32.const 104034) "a") (data (i32.const 104037) "a") (data (i32.const 104040) "a") (data (i32.const 104043) "a") (data (i32.const 104046) "a") (data (i32.const 104049) "a") (data (i32.const 104052) "a") (data (i32.const 104055) "a") (data (i32.const 104058) "a") (data (i32.const 104061) "a") (data (i32.const 104064) "a") (data (i32.const 104067) "a") (data (i32.const 104070) "a") (data (i32.const 104073) "a") (data (i32.const 104076) "a") (data (i32.const 104079) "a") (data (i32.const 104082) "a") (data (i32.const 104085) "a") (data (i32.const 104088) "a") (data (i32.const 104091) "a") (data (i32.const 104094) "a") (data (i32.const 104097) "a") (data (i32.const 104100) "a") (data (i32.const 104103) "a") (data (i32.const 104106) "a") (data (i32.const 104109) "a") (data (i32.const 104112) "a") (data (i32.const 104115) "a") (data (i32.const 104118) "a") (data (i32.const 104121) "a") (data (i32.const 104124) "a") (data (i32.const 104127) "a") (data (i32.const 104130) "a") (data (i32.const 104133) "a") (data (i32.const 104136) "a") (data (i32.const 104139) "a") (data (i32.const 104142) "a") (data (i32.const 104145) "a") (data (i32.const 104148) "a") (data (i32.const 104151) "a") (data (i32.const 104154) "a") (data (i32.const 104157) "a") (data (i32.const 104160) "a") (data (i32.const 104163) "a") (data (i32.const 104166) "a") (data (i32.const 104169) "a") (data (i32.const 104172) "a") (data (i32.const 104175) "a") (data (i32.const 104178) "a") (data (i32.const 104181) "a") (data (i32.const 104184) "a") (data (i32.const 104187) "a") (data (i32.const 104190) "a") (data (i32.const 104193) "a") (data (i32.const 104196) "a") (data (i32.const 104199) "a") (data (i32.const 104202) "a") (data (i32.const 104205) "a") (data (i32.const 104208) "a") (data (i32.const 104211) "a") (data (i32.const 104214) "a") (data (i32.const 104217) "a") (data (i32.const 104220) "a") (data (i32.const 104223) "a") (data (i32.const 104226) "a") (data (i32.const 104229) "a") (data (i32.const 104232) "a") (data (i32.const 104235) "a") (data (i32.const 104238) "a") (data (i32.const 104241) "a") (data (i32.const 104244) "a") (data (i32.const 104247) "a") (data (i32.const 104250) "a") (data (i32.const 104253) "a") (data (i32.const 104256) "a") (data (i32.const 104259) "a") (data (i32.const 104262) "a") (data (i32.const 104265) "a") (data (i32.const 104268) "a") (data (i32.const 104271) "a") (data (i32.const 104274) "a") (data (i32.const 104277) "a") (data (i32.const 104280) "a") (data (i32.const 104283) "a") (data (i32.const 104286) "a") (data (i32.const 104289) "a") (data (i32.const 104292) "a") (data (i32.const 104295) "a") (data (i32.const 104298) "a") (data (i32.const 104301) "a") (data (i32.const 104304) "a") (data (i32.const 104307) "a") (data (i32.const 104310) "a") (data (i32.const 104313) "a") (data (i32.const 104316) "a") (data (i32.const 104319) "a") (data (i32.const 104322) "a") (data (i32.const 104325) "a") (data (i32.const 104328) "a") (data (i32.const 104331) "a") (data (i32.const 104334) "a") (data (i32.const 104337) "a") (data (i32.const 104340) "a") (data (i32.const 104343) "a") (data (i32.const 104346) "a") (data (i32.const 104349) "a") (data (i32.const 104352) "a") (data (i32.const 104355) "a") (data (i32.const 104358) "a") (data (i32.const 104361) "a") (data (i32.const 104364) "a") (data (i32.const 104367) "a") (data (i32.const 104370) "a") (data (i32.const 104373) "a") (data (i32.const 104376) "a") (data (i32.const 104379) "a") (data (i32.const 104382) "a") (data (i32.const 104385) "a") (data (i32.const 104388) "a") (data (i32.const 104391) "a") (data (i32.const 104394) "a") (data (i32.const 104397) "a") (data (i32.const 104400) "a") (data (i32.const 104403) "a") (data (i32.const 104406) "a") (data (i32.const 104409) "a") (data (i32.const 104412) "a") (data (i32.const 104415) "a") (data (i32.const 104418) "a") (data (i32.const 104421) "a") (data (i32.const 104424) "a") (data (i32.const 104427) "a") (data (i32.const 104430) "a") (data (i32.const 104433) "a") (data (i32.const 104436) "a") (data (i32.const 104439) "a") (data (i32.const 104442) "a") (data (i32.const 104445) "a") (data (i32.const 104448) "a") (data (i32.const 104451) "a") (data (i32.const 104454) "a") (data (i32.const 104457) "a") (data (i32.const 104460) "a") (data (i32.const 104463) "a") (data (i32.const 104466) "a") (data (i32.const 104469) "a") (data (i32.const 104472) "a") (data (i32.const 104475) "a") (data (i32.const 104478) "a") (data (i32.const 104481) "a") (data (i32.const 104484) "a") (data (i32.const 104487) "a") (data (i32.const 104490) "a") (data (i32.const 104493) "a") (data (i32.const 104496) "a") (data (i32.const 104499) "a") (data (i32.const 104502) "a") (data (i32.const 104505) "a") (data (i32.const 104508) "a") (data (i32.const 104511) "a") (data (i32.const 104514) "a") (data (i32.const 104517) "a") (data (i32.const 104520) "a") (data (i32.const 104523) "a") (data (i32.const 104526) "a") (data (i32.const 104529) "a") (data (i32.const 104532) "a") (data (i32.const 104535) "a") (data (i32.const 104538) "a") (data (i32.const 104541) "a") (data (i32.const 104544) "a") (data (i32.const 104547) "a") (data (i32.const 104550) "a") (data (i32.const 104553) "a") (data (i32.const 104556) "a") (data (i32.const 104559) "a") (data (i32.const 104562) "a") (data (i32.const 104565) "a") (data (i32.const 104568) "a") (data (i32.const 104571) "a") (data (i32.const 104574) "a") (data (i32.const 104577) "a") (data (i32.const 104580) "a") (data (i32.const 104583) "a") (data (i32.const 104586) "a") (data (i32.const 104589) "a") (data (i32.const 104592) "a") (data (i32.const 104595) "a") (data (i32.const 104598) "a") (data (i32.const 104601) "a") (data (i32.const 104604) "a") (data (i32.const 104607) "a") (data (i32.const 104610) "a") (data (i32.const 104613) "a") (data (i32.const 104616) "a") (data (i32.const 104619) "a") (data (i32.const 104622) "a") (data (i32.const 104625) "a") (data (i32.const 104628) "a") (data (i32.const 104631) "a") (data (i32.const 104634) "a") (data (i32.const 104637) "a") (data (i32.const 104640) "a") (data (i32.const 104643) "a") (data (i32.const 104646) "a") (data (i32.const 104649) "a") (data (i32.const 104652) "a") (data (i32.const 104655) "a") (data (i32.const 104658) "a") (data (i32.const 104661) "a") (data (i32.const 104664) "a") (data (i32.const 104667) "a") (data (i32.const 104670) "a") (data (i32.const 104673) "a") (data (i32.const 104676) "a") (data (i32.const 104679) "a") (data (i32.const 104682) "a") (data (i32.const 104685) "a") (data (i32.const 104688) "a") (data (i32.const 104691) "a") (data (i32.const 104694) "a") (data (i32.const 104697) "a") (data (i32.const 104700) "a") (data (i32.const 104703) "a") (data (i32.const 104706) "a") (data (i32.const 104709) "a") (data (i32.const 104712) "a") (data (i32.const 104715) "a") (data (i32.const 104718) "a") (data (i32.const 104721) "a") (data (i32.const 104724) "a") (data (i32.const 104727) "a") (data (i32.const 104730) "a") (data (i32.const 104733) "a") (data (i32.const 104736) "a") (data (i32.const 104739) "a") (data (i32.const 104742) "a") (data (i32.const 104745) "a") (data (i32.const 104748) "a") (data (i32.const 104751) "a") (data (i32.const 104754) "a") (data (i32.const 104757) "a") (data (i32.const 104760) "a") (data (i32.const 104763) "a") (data (i32.const 104766) "a") (data (i32.const 104769) "a") (data (i32.const 104772) "a") (data (i32.const 104775) "a") (data (i32.const 104778) "a") (data (i32.const 104781) "a") (data (i32.const 104784) "a") (data (i32.const 104787) "a") (data (i32.const 104790) "a") (data (i32.const 104793) "a") (data (i32.const 104796) "a") (data (i32.const 104799) "a") (data (i32.const 104802) "a") (data (i32.const 104805) "a") (data (i32.const 104808) "a") (data (i32.const 104811) "a") (data (i32.const 104814) "a") (data (i32.const 104817) "a") (data (i32.const 104820) "a") (data (i32.const 104823) "a") (data (i32.const 104826) "a") (data (i32.const 104829) "a") (data (i32.const 104832) "a") (data (i32.const 104835) "a") (data (i32.const 104838) "a") (data (i32.const 104841) "a") (data (i32.const 104844) "a") (data (i32.const 104847) "a") (data (i32.const 104850) "a") (data (i32.const 104853) "a") (data (i32.const 104856) "a") (data (i32.const 104859) "a") (data (i32.const 104862) "a") (data (i32.const 104865) "a") (data (i32.const 104868) "a") (data (i32.const 104871) "a") (data (i32.const 104874) "a") (data (i32.const 104877) "a") (data (i32.const 104880) "a") (data (i32.const 104883) "a") (data (i32.const 104886) "a") (data (i32.const 104889) "a") (data (i32.const 104892) "a") (data (i32.const 104895) "a") (data (i32.const 104898) "a") (data (i32.const 104901) "a") (data (i32.const 104904) "a") (data (i32.const 104907) "a") (data (i32.const 104910) "a") (data (i32.const 104913) "a") (data (i32.const 104916) "a") (data (i32.const 104919) "a") (data (i32.const 104922) "a") (data (i32.const 104925) "a") (data (i32.const 104928) "a") (data (i32.const 104931) "a") (data (i32.const 104934) "a") (data (i32.const 104937) "a") (data (i32.const 104940) "a") (data (i32.const 104943) "a") (data (i32.const 104946) "a") (data (i32.const 104949) "a") (data (i32.const 104952) "a") (data (i32.const 104955) "a") (data (i32.const 104958) "a") (data (i32.const 104961) "a") (data (i32.const 104964) "a") (data (i32.const 104967) "a") (data (i32.const 104970) "a") (data (i32.const 104973) "a") (data (i32.const 104976) "a") (data (i32.const 104979) "a") (data (i32.const 104982) "a") (data (i32.const 104985) "a") (data (i32.const 104988) "a") (data (i32.const 104991) "a") (data (i32.const 104994) "a") (data (i32.const 104997) "a") (data (i32.const 105000) "a") (data (i32.const 105003) "a") (data (i32.const 105006) "a") (data (i32.const 105009) "a") (data (i32.const 105012) "a") (data (i32.const 105015) "a") (data (i32.const 105018) "a") (data (i32.const 105021) "a") (data (i32.const 105024) "a") (data (i32.const 105027) "a") (data (i32.const 105030) "a") (data (i32.const 105033) "a") (data (i32.const 105036) "a") (data (i32.const 105039) "a") (data (i32.const 105042) "a") (data (i32.const 105045) "a") (data (i32.const 105048) "a") (data (i32.const 105051) "a") (data (i32.const 105054) "a") (data (i32.const 105057) "a") (data (i32.const 105060) "a") (data (i32.const 105063) "a") (data (i32.const 105066) "a") (data (i32.const 105069) "a") (data (i32.const 105072) "a") (data (i32.const 105075) "a") (data (i32.const 105078) "a") (data (i32.const 105081) "a") (data (i32.const 105084) "a") (data (i32.const 105087) "a") (data (i32.const 105090) "a") (data (i32.const 105093) "a") (data (i32.const 105096) "a") (data (i32.const 105099) "a") (data (i32.const 105102) "a") (data (i32.const 105105) "a") (data (i32.const 105108) "a") (data (i32.const 105111) "a") (data (i32.const 105114) "a") (data (i32.const 105117) "a") (data (i32.const 105120) "a") (data (i32.const 105123) "a") (data (i32.const 105126) "a") (data (i32.const 105129) "a") (data (i32.const 105132) "a") (data (i32.const 105135) "a") (data (i32.const 105138) "a") (data (i32.const 105141) "a") (data (i32.const 105144) "a") (data (i32.const 105147) "a") (data (i32.const 105150) "a") (data (i32.const 105153) "a") (data (i32.const 105156) "a") (data (i32.const 105159) "a") (data (i32.const 105162) "a") (data (i32.const 105165) "a") (data (i32.const 105168) "a") (data (i32.const 105171) "a") (data (i32.const 105174) "a") (data (i32.const 105177) "a") (data (i32.const 105180) "a") (data (i32.const 105183) "a") (data (i32.const 105186) "a") (data (i32.const 105189) "a") (data (i32.const 105192) "a") (data (i32.const 105195) "a") (data (i32.const 105198) "a") (data (i32.const 105201) "a") (data (i32.const 105204) "a") (data (i32.const 105207) "a") (data (i32.const 105210) "a") (data (i32.const 105213) "a") (data (i32.const 105216) "a") (data (i32.const 105219) "a") (data (i32.const 105222) "a") (data (i32.const 105225) "a") (data (i32.const 105228) "a") (data (i32.const 105231) "a") (data (i32.const 105234) "a") (data (i32.const 105237) "a") (data (i32.const 105240) "a") (data (i32.const 105243) "a") (data (i32.const 105246) "a") (data (i32.const 105249) "a") (data (i32.const 105252) "a") (data (i32.const 105255) "a") (data (i32.const 105258) "a") (data (i32.const 105261) "a") (data (i32.const 105264) "a") (data (i32.const 105267) "a") (data (i32.const 105270) "a") (data (i32.const 105273) "a") (data (i32.const 105276) "a") (data (i32.const 105279) "a") (data (i32.const 105282) "a") (data (i32.const 105285) "a") (data (i32.const 105288) "a") (data (i32.const 105291) "a") (data (i32.const 105294) "a") (data (i32.const 105297) "a") (data (i32.const 105300) "a") (data (i32.const 105303) "a") (data (i32.const 105306) "a") (data (i32.const 105309) "a") (data (i32.const 105312) "a") (data (i32.const 105315) "a") (data (i32.const 105318) "a") (data (i32.const 105321) "a") (data (i32.const 105324) "a") (data (i32.const 105327) "a") (data (i32.const 105330) "a") (data (i32.const 105333) "a") (data (i32.const 105336) "a") (data (i32.const 105339) "a") (data (i32.const 105342) "a") (data (i32.const 105345) "a") (data (i32.const 105348) "a") (data (i32.const 105351) "a") (data (i32.const 105354) "a") (data (i32.const 105357) "a") (data (i32.const 105360) "a") (data (i32.const 105363) "a") (data (i32.const 105366) "a") (data (i32.const 105369) "a") (data (i32.const 105372) "a") (data (i32.const 105375) "a") (data (i32.const 105378) "a") (data (i32.const 105381) "a") (data (i32.const 105384) "a") (data (i32.const 105387) "a") (data (i32.const 105390) "a") (data (i32.const 105393) "a") (data (i32.const 105396) "a") (data (i32.const 105399) "a") (data (i32.const 105402) "a") (data (i32.const 105405) "a") (data (i32.const 105408) "a") (data (i32.const 105411) "a") (data (i32.const 105414) "a") (data (i32.const 105417) "a") (data (i32.const 105420) "a") (data (i32.const 105423) "a") (data (i32.const 105426) "a") (data (i32.const 105429) "a") (data (i32.const 105432) "a") (data (i32.const 105435) "a") (data (i32.const 105438) "a") (data (i32.const 105441) "a") (data (i32.const 105444) "a") (data (i32.const 105447) "a") (data (i32.const 105450) "a") (data (i32.const 105453) "a") (data (i32.const 105456) "a") (data (i32.const 105459) "a") (data (i32.const 105462) "a") (data (i32.const 105465) "a") (data (i32.const 105468) "a") (data (i32.const 105471) "a") (data (i32.const 105474) "a") (data (i32.const 105477) "a") (data (i32.const 105480) "a") (data (i32.const 105483) "a") (data (i32.const 105486) "a") (data (i32.const 105489) "a") (data (i32.const 105492) "a") (data (i32.const 105495) "a") (data (i32.const 105498) "a") (data (i32.const 105501) "a") (data (i32.const 105504) "a") (data (i32.const 105507) "a") (data (i32.const 105510) "a") (data (i32.const 105513) "a") (data (i32.const 105516) "a") (data (i32.const 105519) "a") (data (i32.const 105522) "a") (data (i32.const 105525) "a") (data (i32.const 105528) "a") (data (i32.const 105531) "a") (data (i32.const 105534) "a") (data (i32.const 105537) "a") (data (i32.const 105540) "a") (data (i32.const 105543) "a") (data (i32.const 105546) "a") (data (i32.const 105549) "a") (data (i32.const 105552) "a") (data (i32.const 105555) "a") (data (i32.const 105558) "a") (data (i32.const 105561) "a") (data (i32.const 105564) "a") (data (i32.const 105567) "a") (data (i32.const 105570) "a") (data (i32.const 105573) "a") (data (i32.const 105576) "a") (data (i32.const 105579) "a") (data (i32.const 105582) "a") (data (i32.const 105585) "a") (data (i32.const 105588) "a") (data (i32.const 105591) "a") (data (i32.const 105594) "a") (data (i32.const 105597) "a") (data (i32.const 105600) "a") (data (i32.const 105603) "a") (data (i32.const 105606) "a") (data (i32.const 105609) "a") (data (i32.const 105612) "a") (data (i32.const 105615) "a") (data (i32.const 105618) "a") (data (i32.const 105621) "a") (data (i32.const 105624) "a") (data (i32.const 105627) "a") (data (i32.const 105630) "a") (data (i32.const 105633) "a") (data (i32.const 105636) "a") (data (i32.const 105639) "a") (data (i32.const 105642) "a") (data (i32.const 105645) "a") (data (i32.const 105648) "a") (data (i32.const 105651) "a") (data (i32.const 105654) "a") (data (i32.const 105657) "a") (data (i32.const 105660) "a") (data (i32.const 105663) "a") (data (i32.const 105666) "a") (data (i32.const 105669) "a") (data (i32.const 105672) "a") (data (i32.const 105675) "a") (data (i32.const 105678) "a") (data (i32.const 105681) "a") (data (i32.const 105684) "a") (data (i32.const 105687) "a") (data (i32.const 105690) "a") (data (i32.const 105693) "a") (data (i32.const 105696) "a") (data (i32.const 105699) "a") (data (i32.const 105702) "a") (data (i32.const 105705) "a") (data (i32.const 105708) "a") (data (i32.const 105711) "a") (data (i32.const 105714) "a") (data (i32.const 105717) "a") (data (i32.const 105720) "a") (data (i32.const 105723) "a") (data (i32.const 105726) "a") (data (i32.const 105729) "a") (data (i32.const 105732) "a") (data (i32.const 105735) "a") (data (i32.const 105738) "a") (data (i32.const 105741) "a") (data (i32.const 105744) "a") (data (i32.const 105747) "a") (data (i32.const 105750) "a") (data (i32.const 105753) "a") (data (i32.const 105756) "a") (data (i32.const 105759) "a") (data (i32.const 105762) "a") (data (i32.const 105765) "a") (data (i32.const 105768) "a") (data (i32.const 105771) "a") (data (i32.const 105774) "a") (data (i32.const 105777) "a") (data (i32.const 105780) "a") (data (i32.const 105783) "a") (data (i32.const 105786) "a") (data (i32.const 105789) "a") (data (i32.const 105792) "a") (data (i32.const 105795) "a") (data (i32.const 105798) "a") (data (i32.const 105801) "a") (data (i32.const 105804) "a") (data (i32.const 105807) "a") (data (i32.const 105810) "a") (data (i32.const 105813) "a") (data (i32.const 105816) "a") (data (i32.const 105819) "a") (data (i32.const 105822) "a") (data (i32.const 105825) "a") (data (i32.const 105828) "a") (data (i32.const 105831) "a") (data (i32.const 105834) "a") (data (i32.const 105837) "a") (data (i32.const 105840) "a") (data (i32.const 105843) "a") (data (i32.const 105846) "a") (data (i32.const 105849) "a") (data (i32.const 105852) "a") (data (i32.const 105855) "a") (data (i32.const 105858) "a") (data (i32.const 105861) "a") (data (i32.const 105864) "a") (data (i32.const 105867) "a") (data (i32.const 105870) "a") (data (i32.const 105873) "a") (data (i32.const 105876) "a") (data (i32.const 105879) "a") (data (i32.const 105882) "a") (data (i32.const 105885) "a") (data (i32.const 105888) "a") (data (i32.const 105891) "a") (data (i32.const 105894) "a") (data (i32.const 105897) "a") (data (i32.const 105900) "a") (data (i32.const 105903) "a") (data (i32.const 105906) "a") (data (i32.const 105909) "a") (data (i32.const 105912) "a") (data (i32.const 105915) "a") (data (i32.const 105918) "a") (data (i32.const 105921) "a") (data (i32.const 105924) "a") (data (i32.const 105927) "a") (data (i32.const 105930) "a") (data (i32.const 105933) "a") (data (i32.const 105936) "a") (data (i32.const 105939) "a") (data (i32.const 105942) "a") (data (i32.const 105945) "a") (data (i32.const 105948) "a") (data (i32.const 105951) "a") (data (i32.const 105954) "a") (data (i32.const 105957) "a") (data (i32.const 105960) "a") (data (i32.const 105963) "a") (data (i32.const 105966) "a") (data (i32.const 105969) "a") (data (i32.const 105972) "a") (data (i32.const 105975) "a") (data (i32.const 105978) "a") (data (i32.const 105981) "a") (data (i32.const 105984) "a") (data (i32.const 105987) "a") (data (i32.const 105990) "a") (data (i32.const 105993) "a") (data (i32.const 105996) "a") (data (i32.const 105999) "a") (data (i32.const 106002) "a") (data (i32.const 106005) "a") (data (i32.const 106008) "a") (data (i32.const 106011) "a") (data (i32.const 106014) "a") (data (i32.const 106017) "a") (data (i32.const 106020) "a") (data (i32.const 106023) "a") (data (i32.const 106026) "a") (data (i32.const 106029) "a") (data (i32.const 106032) "a") (data (i32.const 106035) "a") (data (i32.const 106038) "a") (data (i32.const 106041) "a") (data (i32.const 106044) "a") (data (i32.const 106047) "a") (data (i32.const 106050) "a") (data (i32.const 106053) "a") (data (i32.const 106056) "a") (data (i32.const 106059) "a") (data (i32.const 106062) "a") (data (i32.const 106065) "a") (data (i32.const 106068) "a") (data (i32.const 106071) "a") (data (i32.const 106074) "a") (data (i32.const 106077) "a") (data (i32.const 106080) "a") (data (i32.const 106083) "a") (data (i32.const 106086) "a") (data (i32.const 106089) "a") (data (i32.const 106092) "a") (data (i32.const 106095) "a") (data (i32.const 106098) "a") (data (i32.const 106101) "a") (data (i32.const 106104) "a") (data (i32.const 106107) "a") (data (i32.const 106110) "a") (data (i32.const 106113) "a") (data (i32.const 106116) "a") (data (i32.const 106119) "a") (data (i32.const 106122) "a") (data (i32.const 106125) "a") (data (i32.const 106128) "a") (data (i32.const 106131) "a") (data (i32.const 106134) "a") (data (i32.const 106137) "a") (data (i32.const 106140) "a") (data (i32.const 106143) "a") (data (i32.const 106146) "a") (data (i32.const 106149) "a") (data (i32.const 106152) "a") (data (i32.const 106155) "a") (data (i32.const 106158) "a") (data (i32.const 106161) "a") (data (i32.const 106164) "a") (data (i32.const 106167) "a") (data (i32.const 106170) "a") (data (i32.const 106173) "a") (data (i32.const 106176) "a") (data (i32.const 106179) "a") (data (i32.const 106182) "a") (data (i32.const 106185) "a") (data (i32.const 106188) "a") (data (i32.const 106191) "a") (data (i32.const 106194) "a") (data (i32.const 106197) "a") (data (i32.const 106200) "a") (data (i32.const 106203) "a") (data (i32.const 106206) "a") (data (i32.const 106209) "a") (data (i32.const 106212) "a") (data (i32.const 106215) "a") (data (i32.const 106218) "a") (data (i32.const 106221) "a") (data (i32.const 106224) "a") (data (i32.const 106227) "a") (data (i32.const 106230) "a") (data (i32.const 106233) "a") (data (i32.const 106236) "a") (data (i32.const 106239) "a") (data (i32.const 106242) "a") (data (i32.const 106245) "a") (data (i32.const 106248) "a") (data (i32.const 106251) "a") (data (i32.const 106254) "a") (data (i32.const 106257) "a") (data (i32.const 106260) "a") (data (i32.const 106263) "a") (data (i32.const 106266) "a") (data (i32.const 106269) "a") (data (i32.const 106272) "a") (data (i32.const 106275) "a") (data (i32.const 106278) "a") (data (i32.const 106281) "a") (data (i32.const 106284) "a") (data (i32.const 106287) "a") (data (i32.const 106290) "a") (data (i32.const 106293) "a") (data (i32.const 106296) "a") (data (i32.const 106299) "a") (data (i32.const 106302) "a") (data (i32.const 106305) "a") (data (i32.const 106308) "a") (data (i32.const 106311) "a") (data (i32.const 106314) "a") (data (i32.const 106317) "a") (data (i32.const 106320) "a") (data (i32.const 106323) "a") (data (i32.const 106326) "a") (data (i32.const 106329) "a") (data (i32.const 106332) "a") (data (i32.const 106335) "a") (data (i32.const 106338) "a") (data (i32.const 106341) "a") (data (i32.const 106344) "a") (data (i32.const 106347) "a") (data (i32.const 106350) "a") (data (i32.const 106353) "a") (data (i32.const 106356) "a") (data (i32.const 106359) "a") (data (i32.const 106362) "a") (data (i32.const 106365) "a") (data (i32.const 106368) "a") (data (i32.const 106371) "a") (data (i32.const 106374) "a") (data (i32.const 106377) "a") (data (i32.const 106380) "a") (data (i32.const 106383) "a") (data (i32.const 106386) "a") (data (i32.const 106389) "a") (data (i32.const 106392) "a") (data (i32.const 106395) "a") (data (i32.const 106398) "a") (data (i32.const 106401) "a") (data (i32.const 106404) "a") (data (i32.const 106407) "a") (data (i32.const 106410) "a") (data (i32.const 106413) "a") (data (i32.const 106416) "a") (data (i32.const 106419) "a") (data (i32.const 106422) "a") (data (i32.const 106425) "a") (data (i32.const 106428) "a") (data (i32.const 106431) "a") (data (i32.const 106434) "a") (data (i32.const 106437) "a") (data (i32.const 106440) "a") (data (i32.const 106443) "a") (data (i32.const 106446) "a") (data (i32.const 106449) "a") (data (i32.const 106452) "a") (data (i32.const 106455) "a") (data (i32.const 106458) "a") (data (i32.const 106461) "a") (data (i32.const 106464) "a") (data (i32.const 106467) "a") (data (i32.const 106470) "a") (data (i32.const 106473) "a") (data (i32.const 106476) "a") (data (i32.const 106479) "a") (data (i32.const 106482) "a") (data (i32.const 106485) "a") (data (i32.const 106488) "a") (data (i32.const 106491) "a") (data (i32.const 106494) "a") (data (i32.const 106497) "a") (data (i32.const 106500) "a") (data (i32.const 106503) "a") (data (i32.const 106506) "a") (data (i32.const 106509) "a") (data (i32.const 106512) "a") (data (i32.const 106515) "a") (data (i32.const 106518) "a") (data (i32.const 106521) "a") (data (i32.const 106524) "a") (data (i32.const 106527) "a") (data (i32.const 106530) "a") (data (i32.const 106533) "a") (data (i32.const 106536) "a") (data (i32.const 106539) "a") (data (i32.const 106542) "a") (data (i32.const 106545) "a") (data (i32.const 106548) "a") (data (i32.const 106551) "a") (data (i32.const 106554) "a") (data (i32.const 106557) "a") (data (i32.const 106560) "a") (data (i32.const 106563) "a") (data (i32.const 106566) "a") (data (i32.const 106569) "a") (data (i32.const 106572) "a") (data (i32.const 106575) "a") (data (i32.const 106578) "a") (data (i32.const 106581) "a") (data (i32.const 106584) "a") (data (i32.const 106587) "a") (data (i32.const 106590) "a") (data (i32.const 106593) "a") (data (i32.const 106596) "a") (data (i32.const 106599) "a") (data (i32.const 106602) "a") (data (i32.const 106605) "a") (data (i32.const 106608) "a") (data (i32.const 106611) "a") (data (i32.const 106614) "a") (data (i32.const 106617) "a") (data (i32.const 106620) "a") (data (i32.const 106623) "a") (data (i32.const 106626) "a") (data (i32.const 106629) "a") (data (i32.const 106632) "a") (data (i32.const 106635) "a") (data (i32.const 106638) "a") (data (i32.const 106641) "a") (data (i32.const 106644) "a") (data (i32.const 106647) "a") (data (i32.const 106650) "a") (data (i32.const 106653) "a") (data (i32.const 106656) "a") (data (i32.const 106659) "a") (data (i32.const 106662) "a") (data (i32.const 106665) "a") (data (i32.const 106668) "a") (data (i32.const 106671) "a") (data (i32.const 106674) "a") (data (i32.const 106677) "a") (data (i32.const 106680) "a") (data (i32.const 106683) "a") (data (i32.const 106686) "a") (data (i32.const 106689) "a") (data (i32.const 106692) "a") (data (i32.const 106695) "a") (data (i32.const 106698) "a") (data (i32.const 106701) "a") (data (i32.const 106704) "a") (data (i32.const 106707) "a") (data (i32.const 106710) "a") (data (i32.const 106713) "a") (data (i32.const 106716) "a") (data (i32.const 106719) "a") (data (i32.const 106722) "a") (data (i32.const 106725) "a") (data (i32.const 106728) "a") (data (i32.const 106731) "a") (data (i32.const 106734) "a") (data (i32.const 106737) "a") (data (i32.const 106740) "a") (data (i32.const 106743) "a") (data (i32.const 106746) "a") (data (i32.const 106749) "a") (data (i32.const 106752) "a") (data (i32.const 106755) "a") (data (i32.const 106758) "a") (data (i32.const 106761) "a") (data (i32.const 106764) "a") (data (i32.const 106767) "a") (data (i32.const 106770) "a") (data (i32.const 106773) "a") (data (i32.const 106776) "a") (data (i32.const 106779) "a") (data (i32.const 106782) "a") (data (i32.const 106785) "a") (data (i32.const 106788) "a") (data (i32.const 106791) "a") (data (i32.const 106794) "a") (data (i32.const 106797) "a") (data (i32.const 106800) "a") (data (i32.const 106803) "a") (data (i32.const 106806) "a") (data (i32.const 106809) "a") (data (i32.const 106812) "a") (data (i32.const 106815) "a") (data (i32.const 106818) "a") (data (i32.const 106821) "a") (data (i32.const 106824) "a") (data (i32.const 106827) "a") (data (i32.const 106830) "a") (data (i32.const 106833) "a") (data (i32.const 106836) "a") (data (i32.const 106839) "a") (data (i32.const 106842) "a") (data (i32.const 106845) "a") (data (i32.const 106848) "a") (data (i32.const 106851) "a") (data (i32.const 106854) "a") (data (i32.const 106857) "a") (data (i32.const 106860) "a") (data (i32.const 106863) "a") (data (i32.const 106866) "a") (data (i32.const 106869) "a") (data (i32.const 106872) "a") (data (i32.const 106875) "a") (data (i32.const 106878) "a") (data (i32.const 106881) "a") (data (i32.const 106884) "a") (data (i32.const 106887) "a") (data (i32.const 106890) "a") (data (i32.const 106893) "a") (data (i32.const 106896) "a") (data (i32.const 106899) "a") (data (i32.const 106902) "a") (data (i32.const 106905) "a") (data (i32.const 106908) "a") (data (i32.const 106911) "a") (data (i32.const 106914) "a") (data (i32.const 106917) "a") (data (i32.const 106920) "a") (data (i32.const 106923) "a") (data (i32.const 106926) "a") (data (i32.const 106929) "a") (data (i32.const 106932) "a") (data (i32.const 106935) "a") (data (i32.const 106938) "a") (data (i32.const 106941) "a") (data (i32.const 106944) "a") (data (i32.const 106947) "a") (data (i32.const 106950) "a") (data (i32.const 106953) "a") (data (i32.const 106956) "a") (data (i32.const 106959) "a") (data (i32.const 106962) "a") (data (i32.const 106965) "a") (data (i32.const 106968) "a") (data (i32.const 106971) "a") (data (i32.const 106974) "a") (data (i32.const 106977) "a") (data (i32.const 106980) "a") (data (i32.const 106983) "a") (data (i32.const 106986) "a") (data (i32.const 106989) "a") (data (i32.const 106992) "a") (data (i32.const 106995) "a") (data (i32.const 106998) "a") (data (i32.const 107001) "a") (data (i32.const 107004) "a") (data (i32.const 107007) "a") (data (i32.const 107010) "a") (data (i32.const 107013) "a") (data (i32.const 107016) "a") (data (i32.const 107019) "a") (data (i32.const 107022) "a") (data (i32.const 107025) "a") (data (i32.const 107028) "a") (data (i32.const 107031) "a") (data (i32.const 107034) "a") (data (i32.const 107037) "a") (data (i32.const 107040) "a") (data (i32.const 107043) "a") (data (i32.const 107046) "a") (data (i32.const 107049) "a") (data (i32.const 107052) "a") (data (i32.const 107055) "a") (data (i32.const 107058) "a") (data (i32.const 107061) "a") (data (i32.const 107064) "a") (data (i32.const 107067) "a") (data (i32.const 107070) "a") (data (i32.const 107073) "a") (data (i32.const 107076) "a") (data (i32.const 107079) "a") (data (i32.const 107082) "a") (data (i32.const 107085) "a") (data (i32.const 107088) "a") (data (i32.const 107091) "a") (data (i32.const 107094) "a") (data (i32.const 107097) "a") (data (i32.const 107100) "a") (data (i32.const 107103) "a") (data (i32.const 107106) "a") (data (i32.const 107109) "a") (data (i32.const 107112) "a") (data (i32.const 107115) "a") (data (i32.const 107118) "a") (data (i32.const 107121) "a") (data (i32.const 107124) "a") (data (i32.const 107127) "a") (data (i32.const 107130) "a") (data (i32.const 107133) "a") (data (i32.const 107136) "a") (data (i32.const 107139) "a") (data (i32.const 107142) "a") (data (i32.const 107145) "a") (data (i32.const 107148) "a") (data (i32.const 107151) "a") (data (i32.const 107154) "a") (data (i32.const 107157) "a") (data (i32.const 107160) "a") (data (i32.const 107163) "a") (data (i32.const 107166) "a") (data (i32.const 107169) "a") (data (i32.const 107172) "a") (data (i32.const 107175) "a") (data (i32.const 107178) "a") (data (i32.const 107181) "a") (data (i32.const 107184) "a") (data (i32.const 107187) "a") (data (i32.const 107190) "a") (data (i32.const 107193) "a") (data (i32.const 107196) "a") (data (i32.const 107199) "a") (data (i32.const 107202) "a") (data (i32.const 107205) "a") (data (i32.const 107208) "a") (data (i32.const 107211) "a") (data (i32.const 107214) "a") (data (i32.const 107217) "a") (data (i32.const 107220) "a") (data (i32.const 107223) "a") (data (i32.const 107226) "a") (data (i32.const 107229) "a") (data (i32.const 107232) "a") (data (i32.const 107235) "a") (data (i32.const 107238) "a") (data (i32.const 107241) "a") (data (i32.const 107244) "a") (data (i32.const 107247) "a") (data (i32.const 107250) "a") (data (i32.const 107253) "a") (data (i32.const 107256) "a") (data (i32.const 107259) "a") (data (i32.const 107262) "a") (data (i32.const 107265) "a") (data (i32.const 107268) "a") (data (i32.const 107271) "a") (data (i32.const 107274) "a") (data (i32.const 107277) "a") (data (i32.const 107280) "a") (data (i32.const 107283) "a") (data (i32.const 107286) "a") (data (i32.const 107289) "a") (data (i32.const 107292) "a") (data (i32.const 107295) "a") (data (i32.const 107298) "a") (data (i32.const 107301) "a") (data (i32.const 107304) "a") (data (i32.const 107307) "a") (data (i32.const 107310) "a") (data (i32.const 107313) "a") (data (i32.const 107316) "a") (data (i32.const 107319) "a") (data (i32.const 107322) "a") (data (i32.const 107325) "a") (data (i32.const 107328) "a") (data (i32.const 107331) "a") (data (i32.const 107334) "a") (data (i32.const 107337) "a") (data (i32.const 107340) "a") (data (i32.const 107343) "a") (data (i32.const 107346) "a") (data (i32.const 107349) "a") (data (i32.const 107352) "a") (data (i32.const 107355) "a") (data (i32.const 107358) "a") (data (i32.const 107361) "a") (data (i32.const 107364) "a") (data (i32.const 107367) "a") (data (i32.const 107370) "a") (data (i32.const 107373) "a") (data (i32.const 107376) "a") (data (i32.const 107379) "a") (data (i32.const 107382) "a") (data (i32.const 107385) "a") (data (i32.const 107388) "a") (data (i32.const 107391) "a") (data (i32.const 107394) "a") (data (i32.const 107397) "a") (data (i32.const 107400) "a") (data (i32.const 107403) "a") (data (i32.const 107406) "a") (data (i32.const 107409) "a") (data (i32.const 107412) "a") (data (i32.const 107415) "a") (data (i32.const 107418) "a") (data (i32.const 107421) "a") (data (i32.const 107424) "a") (data (i32.const 107427) "a") (data (i32.const 107430) "a") (data (i32.const 107433) "a") (data (i32.const 107436) "a") (data (i32.const 107439) "a") (data (i32.const 107442) "a") (data (i32.const 107445) "a") (data (i32.const 107448) "a") (data (i32.const 107451) "a") (data (i32.const 107454) "a") (data (i32.const 107457) "a") (data (i32.const 107460) "a") (data (i32.const 107463) "a") (data (i32.const 107466) "a") (data (i32.const 107469) "a") (data (i32.const 107472) "a") (data (i32.const 107475) "a") (data (i32.const 107478) "a") (data (i32.const 107481) "a") (data (i32.const 107484) "a") (data (i32.const 107487) "a") (data (i32.const 107490) "a") (data (i32.const 107493) "a") (data (i32.const 107496) "a") (data (i32.const 107499) "a") (data (i32.const 107502) "a") (data (i32.const 107505) "a") (data (i32.const 107508) "a") (data (i32.const 107511) "a") (data (i32.const 107514) "a") (data (i32.const 107517) "a") (data (i32.const 107520) "a") (data (i32.const 107523) "a") (data (i32.const 107526) "a") (data (i32.const 107529) "a") (data (i32.const 107532) "a") (data (i32.const 107535) "a") (data (i32.const 107538) "a") (data (i32.const 107541) "a") (data (i32.const 107544) "a") (data (i32.const 107547) "a") (data (i32.const 107550) "a") (data (i32.const 107553) "a") (data (i32.const 107556) "a") (data (i32.const 107559) "a") (data (i32.const 107562) "a") (data (i32.const 107565) "a") (data (i32.const 107568) "a") (data (i32.const 107571) "a") (data (i32.const 107574) "a") (data (i32.const 107577) "a") (data (i32.const 107580) "a") (data (i32.const 107583) "a") (data (i32.const 107586) "a") (data (i32.const 107589) "a") (data (i32.const 107592) "a") (data (i32.const 107595) "a") (data (i32.const 107598) "a") (data (i32.const 107601) "a") (data (i32.const 107604) "a") (data (i32.const 107607) "a") (data (i32.const 107610) "a") (data (i32.const 107613) "a") (data (i32.const 107616) "a") (data (i32.const 107619) "a") (data (i32.const 107622) "a") (data (i32.const 107625) "a") (data (i32.const 107628) "a") (data (i32.const 107631) "a") (data (i32.const 107634) "a") (data (i32.const 107637) "a") (data (i32.const 107640) "a") (data (i32.const 107643) "a") (data (i32.const 107646) "a") (data (i32.const 107649) "a") (data (i32.const 107652) "a") (data (i32.const 107655) "a") (data (i32.const 107658) "a") (data (i32.const 107661) "a") (data (i32.const 107664) "a") (data (i32.const 107667) "a") (data (i32.const 107670) "a") (data (i32.const 107673) "a") (data (i32.const 107676) "a") (data (i32.const 107679) "a") (data (i32.const 107682) "a") (data (i32.const 107685) "a") (data (i32.const 107688) "a") (data (i32.const 107691) "a") (data (i32.const 107694) "a") (data (i32.const 107697) "a") (data (i32.const 107700) "a") (data (i32.const 107703) "a") (data (i32.const 107706) "a") (data (i32.const 107709) "a") (data (i32.const 107712) "a") (data (i32.const 107715) "a") (data (i32.const 107718) "a") (data (i32.const 107721) "a") (data (i32.const 107724) "a") (data (i32.const 107727) "a") (data (i32.const 107730) "a") (data (i32.const 107733) "a") (data (i32.const 107736) "a") (data (i32.const 107739) "a") (data (i32.const 107742) "a") (data (i32.const 107745) "a") (data (i32.const 107748) "a") (data (i32.const 107751) "a") (data (i32.const 107754) "a") (data (i32.const 107757) "a") (data (i32.const 107760) "a") (data (i32.const 107763) "a") (data (i32.const 107766) "a") (data (i32.const 107769) "a") (data (i32.const 107772) "a") (data (i32.const 107775) "a") (data (i32.const 107778) "a") (data (i32.const 107781) "a") (data (i32.const 107784) "a") (data (i32.const 107787) "a") (data (i32.const 107790) "a") (data (i32.const 107793) "a") (data (i32.const 107796) "a") (data (i32.const 107799) "a") (data (i32.const 107802) "a") (data (i32.const 107805) "a") (data (i32.const 107808) "a") (data (i32.const 107811) "a") (data (i32.const 107814) "a") (data (i32.const 107817) "a") (data (i32.const 107820) "a") (data (i32.const 107823) "a") (data (i32.const 107826) "a") (data (i32.const 107829) "a") (data (i32.const 107832) "a") (data (i32.const 107835) "a") (data (i32.const 107838) "a") (data (i32.const 107841) "a") (data (i32.const 107844) "a") (data (i32.const 107847) "a") (data (i32.const 107850) "a") (data (i32.const 107853) "a") (data (i32.const 107856) "a") (data (i32.const 107859) "a") (data (i32.const 107862) "a") (data (i32.const 107865) "a") (data (i32.const 107868) "a") (data (i32.const 107871) "a") (data (i32.const 107874) "a") (data (i32.const 107877) "a") (data (i32.const 107880) "a") (data (i32.const 107883) "a") (data (i32.const 107886) "a") (data (i32.const 107889) "a") (data (i32.const 107892) "a") (data (i32.const 107895) "a") (data (i32.const 107898) "a") (data (i32.const 107901) "a") (data (i32.const 107904) "a") (data (i32.const 107907) "a") (data (i32.const 107910) "a") (data (i32.const 107913) "a") (data (i32.const 107916) "a") (data (i32.const 107919) "a") (data (i32.const 107922) "a") (data (i32.const 107925) "a") (data (i32.const 107928) "a") (data (i32.const 107931) "a") (data (i32.const 107934) "a") (data (i32.const 107937) "a") (data (i32.const 107940) "a") (data (i32.const 107943) "a") (data (i32.const 107946) "a") (data (i32.const 107949) "a") (data (i32.const 107952) "a") (data (i32.const 107955) "a") (data (i32.const 107958) "a") (data (i32.const 107961) "a") (data (i32.const 107964) "a") (data (i32.const 107967) "a") (data (i32.const 107970) "a") (data (i32.const 107973) "a") (data (i32.const 107976) "a") (data (i32.const 107979) "a") (data (i32.const 107982) "a") (data (i32.const 107985) "a") (data (i32.const 107988) "a") (data (i32.const 107991) "a") (data (i32.const 107994) "a") (data (i32.const 107997) "a") (data (i32.const 108000) "a") (data (i32.const 108003) "a") (data (i32.const 108006) "a") (data (i32.const 108009) "a") (data (i32.const 108012) "a") (data (i32.const 108015) "a") (data (i32.const 108018) "a") (data (i32.const 108021) "a") (data (i32.const 108024) "a") (data (i32.const 108027) "a") (data (i32.const 108030) "a") (data (i32.const 108033) "a") (data (i32.const 108036) "a") (data (i32.const 108039) "a") (data (i32.const 108042) "a") (data (i32.const 108045) "a") (data (i32.const 108048) "a") (data (i32.const 108051) "a") (data (i32.const 108054) "a") (data (i32.const 108057) "a") (data (i32.const 108060) "a") (data (i32.const 108063) "a") (data (i32.const 108066) "a") (data (i32.const 108069) "a") (data (i32.const 108072) "a") (data (i32.const 108075) "a") (data (i32.const 108078) "a") (data (i32.const 108081) "a") (data (i32.const 108084) "a") (data (i32.const 108087) "a") (data (i32.const 108090) "a") (data (i32.const 108093) "a") (data (i32.const 108096) "a") (data (i32.const 108099) "a") (data (i32.const 108102) "a") (data (i32.const 108105) "a") (data (i32.const 108108) "a") (data (i32.const 108111) "a") (data (i32.const 108114) "a") (data (i32.const 108117) "a") (data (i32.const 108120) "a") (data (i32.const 108123) "a") (data (i32.const 108126) "a") (data (i32.const 108129) "a") (data (i32.const 108132) "a") (data (i32.const 108135) "a") (data (i32.const 108138) "a") (data (i32.const 108141) "a") (data (i32.const 108144) "a") (data (i32.const 108147) "a") (data (i32.const 108150) "a") (data (i32.const 108153) "a") (data (i32.const 108156) "a") (data (i32.const 108159) "a") (data (i32.const 108162) "a") (data (i32.const 108165) "a") (data (i32.const 108168) "a") (data (i32.const 108171) "a") (data (i32.const 108174) "a") (data (i32.const 108177) "a") (data (i32.const 108180) "a") (data (i32.const 108183) "a") (data (i32.const 108186) "a") (data (i32.const 108189) "a") (data (i32.const 108192) "a") (data (i32.const 108195) "a") (data (i32.const 108198) "a") (data (i32.const 108201) "a") (data (i32.const 108204) "a") (data (i32.const 108207) "a") (data (i32.const 108210) "a") (data (i32.const 108213) "a") (data (i32.const 108216) "a") (data (i32.const 108219) "a") (data (i32.const 108222) "a") (data (i32.const 108225) "a") (data (i32.const 108228) "a") (data (i32.const 108231) "a") (data (i32.const 108234) "a") (data (i32.const 108237) "a") (data (i32.const 108240) "a") (data (i32.const 108243) "a") (data (i32.const 108246) "a") (data (i32.const 108249) "a") (data (i32.const 108252) "a") (data (i32.const 108255) "a") (data (i32.const 108258) "a") (data (i32.const 108261) "a") (data (i32.const 108264) "a") (data (i32.const 108267) "a") (data (i32.const 108270) "a") (data (i32.const 108273) "a") (data (i32.const 108276) "a") (data (i32.const 108279) "a") (data (i32.const 108282) "a") (data (i32.const 108285) "a") (data (i32.const 108288) "a") (data (i32.const 108291) "a") (data (i32.const 108294) "a") (data (i32.const 108297) "a") (data (i32.const 108300) "a") (data (i32.const 108303) "a") (data (i32.const 108306) "a") (data (i32.const 108309) "a") (data (i32.const 108312) "a") (data (i32.const 108315) "a") (data (i32.const 108318) "a") (data (i32.const 108321) "a") (data (i32.const 108324) "a") (data (i32.const 108327) "a") (data (i32.const 108330) "a") (data (i32.const 108333) "a") (data (i32.const 108336) "a") (data (i32.const 108339) "a") (data (i32.const 108342) "a") (data (i32.const 108345) "a") (data (i32.const 108348) "a") (data (i32.const 108351) "a") (data (i32.const 108354) "a") (data (i32.const 108357) "a") (data (i32.const 108360) "a") (data (i32.const 108363) "a") (data (i32.const 108366) "a") (data (i32.const 108369) "a") (data (i32.const 108372) "a") (data (i32.const 108375) "a") (data (i32.const 108378) "a") (data (i32.const 108381) "a") (data (i32.const 108384) "a") (data (i32.const 108387) "a") (data (i32.const 108390) "a") (data (i32.const 108393) "a") (data (i32.const 108396) "a") (data (i32.const 108399) "a") (data (i32.const 108402) "a") (data (i32.const 108405) "a") (data (i32.const 108408) "a") (data (i32.const 108411) "a") (data (i32.const 108414) "a") (data (i32.const 108417) "a") (data (i32.const 108420) "a") (data (i32.const 108423) "a") (data (i32.const 108426) "a") (data (i32.const 108429) "a") (data (i32.const 108432) "a") (data (i32.const 108435) "a") (data (i32.const 108438) "a") (data (i32.const 108441) "a") (data (i32.const 108444) "a") (data (i32.const 108447) "a") (data (i32.const 108450) "a") (data (i32.const 108453) "a") (data (i32.const 108456) "a") (data (i32.const 108459) "a") (data (i32.const 108462) "a") (data (i32.const 108465) "a") (data (i32.const 108468) "a") (data (i32.const 108471) "a") (data (i32.const 108474) "a") (data (i32.const 108477) "a") (data (i32.const 108480) "a") (data (i32.const 108483) "a") (data (i32.const 108486) "a") (data (i32.const 108489) "a") (data (i32.const 108492) "a") (data (i32.const 108495) "a") (data (i32.const 108498) "a") (data (i32.const 108501) "a") (data (i32.const 108504) "a") (data (i32.const 108507) "a") (data (i32.const 108510) "a") (data (i32.const 108513) "a") (data (i32.const 108516) "a") (data (i32.const 108519) "a") (data (i32.const 108522) "a") (data (i32.const 108525) "a") (data (i32.const 108528) "a") (data (i32.const 108531) "a") (data (i32.const 108534) "a") (data (i32.const 108537) "a") (data (i32.const 108540) "a") (data (i32.const 108543) "a") (data (i32.const 108546) "a") (data (i32.const 108549) "a") (data (i32.const 108552) "a") (data (i32.const 108555) "a") (data (i32.const 108558) "a") (data (i32.const 108561) "a") (data (i32.const 108564) "a") (data (i32.const 108567) "a") (data (i32.const 108570) "a") (data (i32.const 108573) "a") (data (i32.const 108576) "a") (data (i32.const 108579) "a") (data (i32.const 108582) "a") (data (i32.const 108585) "a") (data (i32.const 108588) "a") (data (i32.const 108591) "a") (data (i32.const 108594) "a") (data (i32.const 108597) "a") (data (i32.const 108600) "a") (data (i32.const 108603) "a") (data (i32.const 108606) "a") (data (i32.const 108609) "a") (data (i32.const 108612) "a") (data (i32.const 108615) "a") (data (i32.const 108618) "a") (data (i32.const 108621) "a") (data (i32.const 108624) "a") (data (i32.const 108627) "a") (data (i32.const 108630) "a") (data (i32.const 108633) "a") (data (i32.const 108636) "a") (data (i32.const 108639) "a") (data (i32.const 108642) "a") (data (i32.const 108645) "a") (data (i32.const 108648) "a") (data (i32.const 108651) "a") (data (i32.const 108654) "a") (data (i32.const 108657) "a") (data (i32.const 108660) "a") (data (i32.const 108663) "a") (data (i32.const 108666) "a") (data (i32.const 108669) "a") (data (i32.const 108672) "a") (data (i32.const 108675) "a") (data (i32.const 108678) "a") (data (i32.const 108681) "a") (data (i32.const 108684) "a") (data (i32.const 108687) "a") (data (i32.const 108690) "a") (data (i32.const 108693) "a") (data (i32.const 108696) "a") (data (i32.const 108699) "a") (data (i32.const 108702) "a") (data (i32.const 108705) "a") (data (i32.const 108708) "a") (data (i32.const 108711) "a") (data (i32.const 108714) "a") (data (i32.const 108717) "a") (data (i32.const 108720) "a") (data (i32.const 108723) "a") (data (i32.const 108726) "a") (data (i32.const 108729) "a") (data (i32.const 108732) "a") (data (i32.const 108735) "a") (data (i32.const 108738) "a") (data (i32.const 108741) "a") (data (i32.const 108744) "a") (data (i32.const 108747) "a") (data (i32.const 108750) "a") (data (i32.const 108753) "a") (data (i32.const 108756) "a") (data (i32.const 108759) "a") (data (i32.const 108762) "a") (data (i32.const 108765) "a") (data (i32.const 108768) "a") (data (i32.const 108771) "a") (data (i32.const 108774) "a") (data (i32.const 108777) "a") (data (i32.const 108780) "a") (data (i32.const 108783) "a") (data (i32.const 108786) "a") (data (i32.const 108789) "a") (data (i32.const 108792) "a") (data (i32.const 108795) "a") (data (i32.const 108798) "a") (data (i32.const 108801) "a") (data (i32.const 108804) "a") (data (i32.const 108807) "a") (data (i32.const 108810) "a") (data (i32.const 108813) "a") (data (i32.const 108816) "a") (data (i32.const 108819) "a") (data (i32.const 108822) "a") (data (i32.const 108825) "a") (data (i32.const 108828) "a") (data (i32.const 108831) "a") (data (i32.const 108834) "a") (data (i32.const 108837) "a") (data (i32.const 108840) "a") (data (i32.const 108843) "a") (data (i32.const 108846) "a") (data (i32.const 108849) "a") (data (i32.const 108852) "a") (data (i32.const 108855) "a") (data (i32.const 108858) "a") (data (i32.const 108861) "a") (data (i32.const 108864) "a") (data (i32.const 108867) "a") (data (i32.const 108870) "a") (data (i32.const 108873) "a") (data (i32.const 108876) "a") (data (i32.const 108879) "a") (data (i32.const 108882) "a") (data (i32.const 108885) "a") (data (i32.const 108888) "a") (data (i32.const 108891) "a") (data (i32.const 108894) "a") (data (i32.const 108897) "a") (data (i32.const 108900) "a") (data (i32.const 108903) "a") (data (i32.const 108906) "a") (data (i32.const 108909) "a") (data (i32.const 108912) "a") (data (i32.const 108915) "a") (data (i32.const 108918) "a") (data (i32.const 108921) "a") (data (i32.const 108924) "a") (data (i32.const 108927) "a") (data (i32.const 108930) "a") (data (i32.const 108933) "a") (data (i32.const 108936) "a") (data (i32.const 108939) "a") (data (i32.const 108942) "a") (data (i32.const 108945) "a") (data (i32.const 108948) "a") (data (i32.const 108951) "a") (data (i32.const 108954) "a") (data (i32.const 108957) "a") (data (i32.const 108960) "a") (data (i32.const 108963) "a") (data (i32.const 108966) "a") (data (i32.const 108969) "a") (data (i32.const 108972) "a") (data (i32.const 108975) "a") (data (i32.const 108978) "a") (data (i32.const 108981) "a") (data (i32.const 108984) "a") (data (i32.const 108987) "a") (data (i32.const 108990) "a") (data (i32.const 108993) "a") (data (i32.const 108996) "a") (data (i32.const 108999) "a") (data (i32.const 109002) "a") (data (i32.const 109005) "a") (data (i32.const 109008) "a") (data (i32.const 109011) "a") (data (i32.const 109014) "a") (data (i32.const 109017) "a") (data (i32.const 109020) "a") (data (i32.const 109023) "a") (data (i32.const 109026) "a") (data (i32.const 109029) "a") (data (i32.const 109032) "a") (data (i32.const 109035) "a") (data (i32.const 109038) "a") (data (i32.const 109041) "a") (data (i32.const 109044) "a") (data (i32.const 109047) "a") (data (i32.const 109050) "a") (data (i32.const 109053) "a") (data (i32.const 109056) "a") (data (i32.const 109059) "a") (data (i32.const 109062) "a") (data (i32.const 109065) "a") (data (i32.const 109068) "a") (data (i32.const 109071) "a") (data (i32.const 109074) "a") (data (i32.const 109077) "a") (data (i32.const 109080) "a") (data (i32.const 109083) "a") (data (i32.const 109086) "a") (data (i32.const 109089) "a") (data (i32.const 109092) "a") (data (i32.const 109095) "a") (data (i32.const 109098) "a") (data (i32.const 109101) "a") (data (i32.const 109104) "a") (data (i32.const 109107) "a") (data (i32.const 109110) "a") (data (i32.const 109113) "a") (data (i32.const 109116) "a") (data (i32.const 109119) "a") (data (i32.const 109122) "a") (data (i32.const 109125) "a") (data (i32.const 109128) "a") (data (i32.const 109131) "a") (data (i32.const 109134) "a") (data (i32.const 109137) "a") (data (i32.const 109140) "a") (data (i32.const 109143) "a") (data (i32.const 109146) "a") (data (i32.const 109149) "a") (data (i32.const 109152) "a") (data (i32.const 109155) "a") (data (i32.const 109158) "a") (data (i32.const 109161) "a") (data (i32.const 109164) "a") (data (i32.const 109167) "a") (data (i32.const 109170) "a") (data (i32.const 109173) "a") (data (i32.const 109176) "a") (data (i32.const 109179) "a") (data (i32.const 109182) "a") (data (i32.const 109185) "a") (data (i32.const 109188) "a") (data (i32.const 109191) "a") (data (i32.const 109194) "a") (data (i32.const 109197) "a") (data (i32.const 109200) "a") (data (i32.const 109203) "a") (data (i32.const 109206) "a") (data (i32.const 109209) "a") (data (i32.const 109212) "a") (data (i32.const 109215) "a") (data (i32.const 109218) "a") (data (i32.const 109221) "a") (data (i32.const 109224) "a") (data (i32.const 109227) "a") (data (i32.const 109230) "a") (data (i32.const 109233) "a") (data (i32.const 109236) "a") (data (i32.const 109239) "a") (data (i32.const 109242) "a") (data (i32.const 109245) "a") (data (i32.const 109248) "a") (data (i32.const 109251) "a") (data (i32.const 109254) "a") (data (i32.const 109257) "a") (data (i32.const 109260) "a") (data (i32.const 109263) "a") (data (i32.const 109266) "a") (data (i32.const 109269) "a") (data (i32.const 109272) "a") (data (i32.const 109275) "a") (data (i32.const 109278) "a") (data (i32.const 109281) "a") (data (i32.const 109284) "a") (data (i32.const 109287) "a") (data (i32.const 109290) "a") (data (i32.const 109293) "a") (data (i32.const 109296) "a") (data (i32.const 109299) "a") (data (i32.const 109302) "a") (data (i32.const 109305) "a") (data (i32.const 109308) "a") (data (i32.const 109311) "a") (data (i32.const 109314) "a") (data (i32.const 109317) "a") (data (i32.const 109320) "a") (data (i32.const 109323) "a") (data (i32.const 109326) "a") (data (i32.const 109329) "a") (data (i32.const 109332) "a") (data (i32.const 109335) "a") (data (i32.const 109338) "a") (data (i32.const 109341) "a") (data (i32.const 109344) "a") (data (i32.const 109347) "a") (data (i32.const 109350) "a") (data (i32.const 109353) "a") (data (i32.const 109356) "a") (data (i32.const 109359) "a") (data (i32.const 109362) "a") (data (i32.const 109365) "a") (data (i32.const 109368) "a") (data (i32.const 109371) "a") (data (i32.const 109374) "a") (data (i32.const 109377) "a") (data (i32.const 109380) "a") (data (i32.const 109383) "a") (data (i32.const 109386) "a") (data (i32.const 109389) "a") (data (i32.const 109392) "a") (data (i32.const 109395) "a") (data (i32.const 109398) "a") (data (i32.const 109401) "a") (data (i32.const 109404) "a") (data (i32.const 109407) "a") (data (i32.const 109410) "a") (data (i32.const 109413) "a") (data (i32.const 109416) "a") (data (i32.const 109419) "a") (data (i32.const 109422) "a") (data (i32.const 109425) "a") (data (i32.const 109428) "a") (data (i32.const 109431) "a") (data (i32.const 109434) "a") (data (i32.const 109437) "a") (data (i32.const 109440) "a") (data (i32.const 109443) "a") (data (i32.const 109446) "a") (data (i32.const 109449) "a") (data (i32.const 109452) "a") (data (i32.const 109455) "a") (data (i32.const 109458) "a") (data (i32.const 109461) "a") (data (i32.const 109464) "a") (data (i32.const 109467) "a") (data (i32.const 109470) "a") (data (i32.const 109473) "a") (data (i32.const 109476) "a") (data (i32.const 109479) "a") (data (i32.const 109482) "a") (data (i32.const 109485) "a") (data (i32.const 109488) "a") (data (i32.const 109491) "a") (data (i32.const 109494) "a") (data (i32.const 109497) "a") (data (i32.const 109500) "a") (data (i32.const 109503) "a") (data (i32.const 109506) "a") (data (i32.const 109509) "a") (data (i32.const 109512) "a") (data (i32.const 109515) "a") (data (i32.const 109518) "a") (data (i32.const 109521) "a") (data (i32.const 109524) "a") (data (i32.const 109527) "a") (data (i32.const 109530) "a") (data (i32.const 109533) "a") (data (i32.const 109536) "a") (data (i32.const 109539) "a") (data (i32.const 109542) "a") (data (i32.const 109545) "a") (data (i32.const 109548) "a") (data (i32.const 109551) "a") (data (i32.const 109554) "a") (data (i32.const 109557) "a") (data (i32.const 109560) "a") (data (i32.const 109563) "a") (data (i32.const 109566) "a") (data (i32.const 109569) "a") (data (i32.const 109572) "a") (data (i32.const 109575) "a") (data (i32.const 109578) "a") (data (i32.const 109581) "a") (data (i32.const 109584) "a") (data (i32.const 109587) "a") (data (i32.const 109590) "a") (data (i32.const 109593) "a") (data (i32.const 109596) "a") (data (i32.const 109599) "a") (data (i32.const 109602) "a") (data (i32.const 109605) "a") (data (i32.const 109608) "a") (data (i32.const 109611) "a") (data (i32.const 109614) "a") (data (i32.const 109617) "a") (data (i32.const 109620) "a") (data (i32.const 109623) "a") (data (i32.const 109626) "a") (data (i32.const 109629) "a") (data (i32.const 109632) "a") (data (i32.const 109635) "a") (data (i32.const 109638) "a") (data (i32.const 109641) "a") (data (i32.const 109644) "a") (data (i32.const 109647) "a") (data (i32.const 109650) "a") (data (i32.const 109653) "a") (data (i32.const 109656) "a") (data (i32.const 109659) "a") (data (i32.const 109662) "a") (data (i32.const 109665) "a") (data (i32.const 109668) "a") (data (i32.const 109671) "a") (data (i32.const 109674) "a") (data (i32.const 109677) "a") (data (i32.const 109680) "a") (data (i32.const 109683) "a") (data (i32.const 109686) "a") (data (i32.const 109689) "a") (data (i32.const 109692) "a") (data (i32.const 109695) "a") (data (i32.const 109698) "a") (data (i32.const 109701) "a") (data (i32.const 109704) "a") (data (i32.const 109707) "a") (data (i32.const 109710) "a") (data (i32.const 109713) "a") (data (i32.const 109716) "a") (data (i32.const 109719) "a") (data (i32.const 109722) "a") (data (i32.const 109725) "a") (data (i32.const 109728) "a") (data (i32.const 109731) "a") (data (i32.const 109734) "a") (data (i32.const 109737) "a") (data (i32.const 109740) "a") (data (i32.const 109743) "a") (data (i32.const 109746) "a") (data (i32.const 109749) "a") (data (i32.const 109752) "a") (data (i32.const 109755) "a") (data (i32.const 109758) "a") (data (i32.const 109761) "a") (data (i32.const 109764) "a") (data (i32.const 109767) "a") (data (i32.const 109770) "a") (data (i32.const 109773) "a") (data (i32.const 109776) "a") (data (i32.const 109779) "a") (data (i32.const 109782) "a") (data (i32.const 109785) "a") (data (i32.const 109788) "a") (data (i32.const 109791) "a") (data (i32.const 109794) "a") (data (i32.const 109797) "a") (data (i32.const 109800) "a") (data (i32.const 109803) "a") (data (i32.const 109806) "a") (data (i32.const 109809) "a") (data (i32.const 109812) "a") (data (i32.const 109815) "a") (data (i32.const 109818) "a") (data (i32.const 109821) "a") (data (i32.const 109824) "a") (data (i32.const 109827) "a") (data (i32.const 109830) "a") (data (i32.const 109833) "a") (data (i32.const 109836) "a") (data (i32.const 109839) "a") (data (i32.const 109842) "a") (data (i32.const 109845) "a") (data (i32.const 109848) "a") (data (i32.const 109851) "a") (data (i32.const 109854) "a") (data (i32.const 109857) "a") (data (i32.const 109860) "a") (data (i32.const 109863) "a") (data (i32.const 109866) "a") (data (i32.const 109869) "a") (data (i32.const 109872) "a") (data (i32.const 109875) "a") (data (i32.const 109878) "a") (data (i32.const 109881) "a") (data (i32.const 109884) "a") (data (i32.const 109887) "a") (data (i32.const 109890) "a") (data (i32.const 109893) "a") (data (i32.const 109896) "a") (data (i32.const 109899) "a") (data (i32.const 109902) "a") (data (i32.const 109905) "a") (data (i32.const 109908) "a") (data (i32.const 109911) "a") (data (i32.const 109914) "a") (data (i32.const 109917) "a") (data (i32.const 109920) "a") (data (i32.const 109923) "a") (data (i32.const 109926) "a") (data (i32.const 109929) "a") (data (i32.const 109932) "a") (data (i32.const 109935) "a") (data (i32.const 109938) "a") (data (i32.const 109941) "a") (data (i32.const 109944) "a") (data (i32.const 109947) "a") (data (i32.const 109950) "a") (data (i32.const 109953) "a") (data (i32.const 109956) "a") (data (i32.const 109959) "a") (data (i32.const 109962) "a") (data (i32.const 109965) "a") (data (i32.const 109968) "a") (data (i32.const 109971) "a") (data (i32.const 109974) "a") (data (i32.const 109977) "a") (data (i32.const 109980) "a") (data (i32.const 109983) "a") (data (i32.const 109986) "a") (data (i32.const 109989) "a") (data (i32.const 109992) "a") (data (i32.const 109995) "a") (data (i32.const 109998) "a") (data (i32.const 110001) "a") (data (i32.const 110004) "a") (data (i32.const 110007) "a") (data (i32.const 110010) "a") (data (i32.const 110013) "a") (data (i32.const 110016) "a") (data (i32.const 110019) "a") (data (i32.const 110022) "a") (data (i32.const 110025) "a") (data (i32.const 110028) "a") (data (i32.const 110031) "a") (data (i32.const 110034) "a") (data (i32.const 110037) "a") (data (i32.const 110040) "a") (data (i32.const 110043) "a") (data (i32.const 110046) "a") (data (i32.const 110049) "a") (data (i32.const 110052) "a") (data (i32.const 110055) "a") (data (i32.const 110058) "a") (data (i32.const 110061) "a") (data (i32.const 110064) "a") (data (i32.const 110067) "a") (data (i32.const 110070) "a") (data (i32.const 110073) "a") (data (i32.const 110076) "a") (data (i32.const 110079) "a") (data (i32.const 110082) "a") (data (i32.const 110085) "a") (data (i32.const 110088) "a") (data (i32.const 110091) "a") (data (i32.const 110094) "a") (data (i32.const 110097) "a") (data (i32.const 110100) "a") (data (i32.const 110103) "a") (data (i32.const 110106) "a") (data (i32.const 110109) "a") (data (i32.const 110112) "a") (data (i32.const 110115) "a") (data (i32.const 110118) "a") (data (i32.const 110121) "a") (data (i32.const 110124) "a") (data (i32.const 110127) "a") (data (i32.const 110130) "a") (data (i32.const 110133) "a") (data (i32.const 110136) "a") (data (i32.const 110139) "a") (data (i32.const 110142) "a") (data (i32.const 110145) "a") (data (i32.const 110148) "a") (data (i32.const 110151) "a") (data (i32.const 110154) "a") (data (i32.const 110157) "a") (data (i32.const 110160) "a") (data (i32.const 110163) "a") (data (i32.const 110166) "a") (data (i32.const 110169) "a") (data (i32.const 110172) "a") (data (i32.const 110175) "a") (data (i32.const 110178) "a") (data (i32.const 110181) "a") (data (i32.const 110184) "a") (data (i32.const 110187) "a") (data (i32.const 110190) "a") (data (i32.const 110193) "a") (data (i32.const 110196) "a") (data (i32.const 110199) "a") (data (i32.const 110202) "a") (data (i32.const 110205) "a") (data (i32.const 110208) "a") (data (i32.const 110211) "a") (data (i32.const 110214) "a") (data (i32.const 110217) "a") (data (i32.const 110220) "a") (data (i32.const 110223) "a") (data (i32.const 110226) "a") (data (i32.const 110229) "a") (data (i32.const 110232) "a") (data (i32.const 110235) "a") (data (i32.const 110238) "a") (data (i32.const 110241) "a") (data (i32.const 110244) "a") (data (i32.const 110247) "a") (data (i32.const 110250) "a") (data (i32.const 110253) "a") (data (i32.const 110256) "a") (data (i32.const 110259) "a") (data (i32.const 110262) "a") (data (i32.const 110265) "a") (data (i32.const 110268) "a") (data (i32.const 110271) "a") (data (i32.const 110274) "a") (data (i32.const 110277) "a") (data (i32.const 110280) "a") (data (i32.const 110283) "a") (data (i32.const 110286) "a") (data (i32.const 110289) "a") (data (i32.const 110292) "a") (data (i32.const 110295) "a") (data (i32.const 110298) "a") (data (i32.const 110301) "a") (data (i32.const 110304) "a") (data (i32.const 110307) "a") (data (i32.const 110310) "a") (data (i32.const 110313) "a") (data (i32.const 110316) "a") (data (i32.const 110319) "a") (data (i32.const 110322) "a") (data (i32.const 110325) "a") (data (i32.const 110328) "a") (data (i32.const 110331) "a") (data (i32.const 110334) "a") (data (i32.const 110337) "a") (data (i32.const 110340) "a") (data (i32.const 110343) "a") (data (i32.const 110346) "a") (data (i32.const 110349) "a") (data (i32.const 110352) "a") (data (i32.const 110355) "a") (data (i32.const 110358) "a") (data (i32.const 110361) "a") (data (i32.const 110364) "a") (data (i32.const 110367) "a") (data (i32.const 110370) "a") (data (i32.const 110373) "a") (data (i32.const 110376) "a") (data (i32.const 110379) "a") (data (i32.const 110382) "a") (data (i32.const 110385) "a") (data (i32.const 110388) "a") (data (i32.const 110391) "a") (data (i32.const 110394) "a") (data (i32.const 110397) "a") (data (i32.const 110400) "a") (data (i32.const 110403) "a") (data (i32.const 110406) "a") (data (i32.const 110409) "a") (data (i32.const 110412) "a") (data (i32.const 110415) "a") (data (i32.const 110418) "a") (data (i32.const 110421) "a") (data (i32.const 110424) "a") (data (i32.const 110427) "a") (data (i32.const 110430) "a") (data (i32.const 110433) "a") (data (i32.const 110436) "a") (data (i32.const 110439) "a") (data (i32.const 110442) "a") (data (i32.const 110445) "a") (data (i32.const 110448) "a") (data (i32.const 110451) "a") (data (i32.const 110454) "a") (data (i32.const 110457) "a") (data (i32.const 110460) "a") (data (i32.const 110463) "a") (data (i32.const 110466) "a") (data (i32.const 110469) "a") (data (i32.const 110472) "a") (data (i32.const 110475) "a") (data (i32.const 110478) "a") (data (i32.const 110481) "a") (data (i32.const 110484) "a") (data (i32.const 110487) "a") (data (i32.const 110490) "a") (data (i32.const 110493) "a") (data (i32.const 110496) "a") (data (i32.const 110499) "a") (data (i32.const 110502) "a") (data (i32.const 110505) "a") (data (i32.const 110508) "a") (data (i32.const 110511) "a") (data (i32.const 110514) "a") (data (i32.const 110517) "a") (data (i32.const 110520) "a") (data (i32.const 110523) "a") (data (i32.const 110526) "a") (data (i32.const 110529) "a") (data (i32.const 110532) "a") (data (i32.const 110535) "a") (data (i32.const 110538) "a") (data (i32.const 110541) "a") (data (i32.const 110544) "a") (data (i32.const 110547) "a") (data (i32.const 110550) "a") (data (i32.const 110553) "a") (data (i32.const 110556) "a") (data (i32.const 110559) "a") (data (i32.const 110562) "a") (data (i32.const 110565) "a") (data (i32.const 110568) "a") (data (i32.const 110571) "a") (data (i32.const 110574) "a") (data (i32.const 110577) "a") (data (i32.const 110580) "a") (data (i32.const 110583) "a") (data (i32.const 110586) "a") (data (i32.const 110589) "a") (data (i32.const 110592) "a") (data (i32.const 110595) "a") (data (i32.const 110598) "a") (data (i32.const 110601) "a") (data (i32.const 110604) "a") (data (i32.const 110607) "a") (data (i32.const 110610) "a") (data (i32.const 110613) "a") (data (i32.const 110616) "a") (data (i32.const 110619) "a") (data (i32.const 110622) "a") (data (i32.const 110625) "a") (data (i32.const 110628) "a") (data (i32.const 110631) "a") (data (i32.const 110634) "a") (data (i32.const 110637) "a") (data (i32.const 110640) "a") (data (i32.const 110643) "a") (data (i32.const 110646) "a") (data (i32.const 110649) "a") (data (i32.const 110652) "a") (data (i32.const 110655) "a") (data (i32.const 110658) "a") (data (i32.const 110661) "a") (data (i32.const 110664) "a") (data (i32.const 110667) "a") (data (i32.const 110670) "a") (data (i32.const 110673) "a") (data (i32.const 110676) "a") (data (i32.const 110679) "a") (data (i32.const 110682) "a") (data (i32.const 110685) "a") (data (i32.const 110688) "a") (data (i32.const 110691) "a") (data (i32.const 110694) "a") (data (i32.const 110697) "a") (data (i32.const 110700) "a") (data (i32.const 110703) "a") (data (i32.const 110706) "a") (data (i32.const 110709) "a") (data (i32.const 110712) "a") (data (i32.const 110715) "a") (data (i32.const 110718) "a") (data (i32.const 110721) "a") (data (i32.const 110724) "a") (data (i32.const 110727) "a") (data (i32.const 110730) "a") (data (i32.const 110733) "a") (data (i32.const 110736) "a") (data (i32.const 110739) "a") (data (i32.const 110742) "a") (data (i32.const 110745) "a") (data (i32.const 110748) "a") (data (i32.const 110751) "a") (data (i32.const 110754) "a") (data (i32.const 110757) "a") (data (i32.const 110760) "a") (data (i32.const 110763) "a") (data (i32.const 110766) "a") (data (i32.const 110769) "a") (data (i32.const 110772) "a") (data (i32.const 110775) "a") (data (i32.const 110778) "a") (data (i32.const 110781) "a") (data (i32.const 110784) "a") (data (i32.const 110787) "a") (data (i32.const 110790) "a") (data (i32.const 110793) "a") (data (i32.const 110796) "a") (data (i32.const 110799) "a") (data (i32.const 110802) "a") (data (i32.const 110805) "a") (data (i32.const 110808) "a") (data (i32.const 110811) "a") (data (i32.const 110814) "a") (data (i32.const 110817) "a") (data (i32.const 110820) "a") (data (i32.const 110823) "a") (data (i32.const 110826) "a") (data (i32.const 110829) "a") (data (i32.const 110832) "a") (data (i32.const 110835) "a") (data (i32.const 110838) "a") (data (i32.const 110841) "a") (data (i32.const 110844) "a") (data (i32.const 110847) "a") (data (i32.const 110850) "a") (data (i32.const 110853) "a") (data (i32.const 110856) "a") (data (i32.const 110859) "a") (data (i32.const 110862) "a") (data (i32.const 110865) "a") (data (i32.const 110868) "a") (data (i32.const 110871) "a") (data (i32.const 110874) "a") (data (i32.const 110877) "a") (data (i32.const 110880) "a") (data (i32.const 110883) "a") (data (i32.const 110886) "a") (data (i32.const 110889) "a") (data (i32.const 110892) "a") (data (i32.const 110895) "a") (data (i32.const 110898) "a") (data (i32.const 110901) "a") (data (i32.const 110904) "a") (data (i32.const 110907) "a") (data (i32.const 110910) "a") (data (i32.const 110913) "a") (data (i32.const 110916) "a") (data (i32.const 110919) "a") (data (i32.const 110922) "a") (data (i32.const 110925) "a") (data (i32.const 110928) "a") (data (i32.const 110931) "a") (data (i32.const 110934) "a") (data (i32.const 110937) "a") (data (i32.const 110940) "a") (data (i32.const 110943) "a") (data (i32.const 110946) "a") (data (i32.const 110949) "a") (data (i32.const 110952) "a") (data (i32.const 110955) "a") (data (i32.const 110958) "a") (data (i32.const 110961) "a") (data (i32.const 110964) "a") (data (i32.const 110967) "a") (data (i32.const 110970) "a") (data (i32.const 110973) "a") (data (i32.const 110976) "a") (data (i32.const 110979) "a") (data (i32.const 110982) "a") (data (i32.const 110985) "a") (data (i32.const 110988) "a") (data (i32.const 110991) "a") (data (i32.const 110994) "a") (data (i32.const 110997) "a") (data (i32.const 111000) "a") (data (i32.const 111003) "a") (data (i32.const 111006) "a") (data (i32.const 111009) "a") (data (i32.const 111012) "a") (data (i32.const 111015) "a") (data (i32.const 111018) "a") (data (i32.const 111021) "a") (data (i32.const 111024) "a") (data (i32.const 111027) "a") (data (i32.const 111030) "a") (data (i32.const 111033) "a") (data (i32.const 111036) "a") (data (i32.const 111039) "a") (data (i32.const 111042) "a") (data (i32.const 111045) "a") (data (i32.const 111048) "a") (data (i32.const 111051) "a") (data (i32.const 111054) "a") (data (i32.const 111057) "a") (data (i32.const 111060) "a") (data (i32.const 111063) "a") (data (i32.const 111066) "a") (data (i32.const 111069) "a") (data (i32.const 111072) "a") (data (i32.const 111075) "a") (data (i32.const 111078) "a") (data (i32.const 111081) "a") (data (i32.const 111084) "a") (data (i32.const 111087) "a") (data (i32.const 111090) "a") (data (i32.const 111093) "a") (data (i32.const 111096) "a") (data (i32.const 111099) "a") (data (i32.const 111102) "a") (data (i32.const 111105) "a") (data (i32.const 111108) "a") (data (i32.const 111111) "a") (data (i32.const 111114) "a") (data (i32.const 111117) "a") (data (i32.const 111120) "a") (data (i32.const 111123) "a") (data (i32.const 111126) "a") (data (i32.const 111129) "a") (data (i32.const 111132) "a") (data (i32.const 111135) "a") (data (i32.const 111138) "a") (data (i32.const 111141) "a") (data (i32.const 111144) "a") (data (i32.const 111147) "a") (data (i32.const 111150) "a") (data (i32.const 111153) "a") (data (i32.const 111156) "a") (data (i32.const 111159) "a") (data (i32.const 111162) "a") (data (i32.const 111165) "a") (data (i32.const 111168) "a") (data (i32.const 111171) "a") (data (i32.const 111174) "a") (data (i32.const 111177) "a") (data (i32.const 111180) "a") (data (i32.const 111183) "a") (data (i32.const 111186) "a") (data (i32.const 111189) "a") (data (i32.const 111192) "a") (data (i32.const 111195) "a") (data (i32.const 111198) "a") (data (i32.const 111201) "a") (data (i32.const 111204) "a") (data (i32.const 111207) "a") (data (i32.const 111210) "a") (data (i32.const 111213) "a") (data (i32.const 111216) "a") (data (i32.const 111219) "a") (data (i32.const 111222) "a") (data (i32.const 111225) "a") (data (i32.const 111228) "a") (data (i32.const 111231) "a") (data (i32.const 111234) "a") (data (i32.const 111237) "a") (data (i32.const 111240) "a") (data (i32.const 111243) "a") (data (i32.const 111246) "a") (data (i32.const 111249) "a") (data (i32.const 111252) "a") (data (i32.const 111255) "a") (data (i32.const 111258) "a") (data (i32.const 111261) "a") (data (i32.const 111264) "a") (data (i32.const 111267) "a") (data (i32.const 111270) "a") (data (i32.const 111273) "a") (data (i32.const 111276) "a") (data (i32.const 111279) "a") (data (i32.const 111282) "a") (data (i32.const 111285) "a") (data (i32.const 111288) "a") (data (i32.const 111291) "a") (data (i32.const 111294) "a") (data (i32.const 111297) "a") (data (i32.const 111300) "a") (data (i32.const 111303) "a") (data (i32.const 111306) "a") (data (i32.const 111309) "a") (data (i32.const 111312) "a") (data (i32.const 111315) "a") (data (i32.const 111318) "a") (data (i32.const 111321) "a") (data (i32.const 111324) "a") (data (i32.const 111327) "a") (data (i32.const 111330) "a") (data (i32.const 111333) "a") (data (i32.const 111336) "a") (data (i32.const 111339) "a") (data (i32.const 111342) "a") (data (i32.const 111345) "a") (data (i32.const 111348) "a") (data (i32.const 111351) "a") (data (i32.const 111354) "a") (data (i32.const 111357) "a") (data (i32.const 111360) "a") (data (i32.const 111363) "a") (data (i32.const 111366) "a") (data (i32.const 111369) "a") (data (i32.const 111372) "a") (data (i32.const 111375) "a") (data (i32.const 111378) "a") (data (i32.const 111381) "a") (data (i32.const 111384) "a") (data (i32.const 111387) "a") (data (i32.const 111390) "a") (data (i32.const 111393) "a") (data (i32.const 111396) "a") (data (i32.const 111399) "a") (data (i32.const 111402) "a") (data (i32.const 111405) "a") (data (i32.const 111408) "a") (data (i32.const 111411) "a") (data (i32.const 111414) "a") (data (i32.const 111417) "a") (data (i32.const 111420) "a") (data (i32.const 111423) "a") (data (i32.const 111426) "a") (data (i32.const 111429) "a") (data (i32.const 111432) "a") (data (i32.const 111435) "a") (data (i32.const 111438) "a") (data (i32.const 111441) "a") (data (i32.const 111444) "a") (data (i32.const 111447) "a") (data (i32.const 111450) "a") (data (i32.const 111453) "a") (data (i32.const 111456) "a") (data (i32.const 111459) "a") (data (i32.const 111462) "a") (data (i32.const 111465) "a") (data (i32.const 111468) "a") (data (i32.const 111471) "a") (data (i32.const 111474) "a") (data (i32.const 111477) "a") (data (i32.const 111480) "a") (data (i32.const 111483) "a") (data (i32.const 111486) "a") (data (i32.const 111489) "a") (data (i32.const 111492) "a") (data (i32.const 111495) "a") (data (i32.const 111498) "a") (data (i32.const 111501) "a") (data (i32.const 111504) "a") (data (i32.const 111507) "a") (data (i32.const 111510) "a") (data (i32.const 111513) "a") (data (i32.const 111516) "a") (data (i32.const 111519) "a") (data (i32.const 111522) "a") (data (i32.const 111525) "a") (data (i32.const 111528) "a") (data (i32.const 111531) "a") (data (i32.const 111534) "a") (data (i32.const 111537) "a") (data (i32.const 111540) "a") (data (i32.const 111543) "a") (data (i32.const 111546) "a") (data (i32.const 111549) "a") (data (i32.const 111552) "a") (data (i32.const 111555) "a") (data (i32.const 111558) "a") (data (i32.const 111561) "a") (data (i32.const 111564) "a") (data (i32.const 111567) "a") (data (i32.const 111570) "a") (data (i32.const 111573) "a") (data (i32.const 111576) "a") (data (i32.const 111579) "a") (data (i32.const 111582) "a") (data (i32.const 111585) "a") (data (i32.const 111588) "a") (data (i32.const 111591) "a") (data (i32.const 111594) "a") (data (i32.const 111597) "a") (data (i32.const 111600) "a") (data (i32.const 111603) "a") (data (i32.const 111606) "a") (data (i32.const 111609) "a") (data (i32.const 111612) "a") (data (i32.const 111615) "a") (data (i32.const 111618) "a") (data (i32.const 111621) "a") (data (i32.const 111624) "a") (data (i32.const 111627) "a") (data (i32.const 111630) "a") (data (i32.const 111633) "a") (data (i32.const 111636) "a") (data (i32.const 111639) "a") (data (i32.const 111642) "a") (data (i32.const 111645) "a") (data (i32.const 111648) "a") (data (i32.const 111651) "a") (data (i32.const 111654) "a") (data (i32.const 111657) "a") (data (i32.const 111660) "a") (data (i32.const 111663) "a") (data (i32.const 111666) "a") (data (i32.const 111669) "a") (data (i32.const 111672) "a") (data (i32.const 111675) "a") (data (i32.const 111678) "a") (data (i32.const 111681) "a") (data (i32.const 111684) "a") (data (i32.const 111687) "a") (data (i32.const 111690) "a") (data (i32.const 111693) "a") (data (i32.const 111696) "a") (data (i32.const 111699) "a") (data (i32.const 111702) "a") (data (i32.const 111705) "a") (data (i32.const 111708) "a") (data (i32.const 111711) "a") (data (i32.const 111714) "a") (data (i32.const 111717) "a") (data (i32.const 111720) "a") (data (i32.const 111723) "a") (data (i32.const 111726) "a") (data (i32.const 111729) "a") (data (i32.const 111732) "a") (data (i32.const 111735) "a") (data (i32.const 111738) "a") (data (i32.const 111741) "a") (data (i32.const 111744) "a") (data (i32.const 111747) "a") (data (i32.const 111750) "a") (data (i32.const 111753) "a") (data (i32.const 111756) "a") (data (i32.const 111759) "a") (data (i32.const 111762) "a") (data (i32.const 111765) "a") (data (i32.const 111768) "a") (data (i32.const 111771) "a") (data (i32.const 111774) "a") (data (i32.const 111777) "a") (data (i32.const 111780) "a") (data (i32.const 111783) "a") (data (i32.const 111786) "a") (data (i32.const 111789) "a") (data (i32.const 111792) "a") (data (i32.const 111795) "a") (data (i32.const 111798) "a") (data (i32.const 111801) "a") (data (i32.const 111804) "a") (data (i32.const 111807) "a") (data (i32.const 111810) "a") (data (i32.const 111813) "a") (data (i32.const 111816) "a") (data (i32.const 111819) "a") (data (i32.const 111822) "a") (data (i32.const 111825) "a") (data (i32.const 111828) "a") (data (i32.const 111831) "a") (data (i32.const 111834) "a") (data (i32.const 111837) "a") (data (i32.const 111840) "a") (data (i32.const 111843) "a") (data (i32.const 111846) "a") (data (i32.const 111849) "a") (data (i32.const 111852) "a") (data (i32.const 111855) "a") (data (i32.const 111858) "a") (data (i32.const 111861) "a") (data (i32.const 111864) "a") (data (i32.const 111867) "a") (data (i32.const 111870) "a") (data (i32.const 111873) "a") (data (i32.const 111876) "a") (data (i32.const 111879) "a") (data (i32.const 111882) "a") (data (i32.const 111885) "a") (data (i32.const 111888) "a") (data (i32.const 111891) "a") (data (i32.const 111894) "a") (data (i32.const 111897) "a") (data (i32.const 111900) "a") (data (i32.const 111903) "a") (data (i32.const 111906) "a") (data (i32.const 111909) "a") (data (i32.const 111912) "a") (data (i32.const 111915) "a") (data (i32.const 111918) "a") (data (i32.const 111921) "a") (data (i32.const 111924) "a") (data (i32.const 111927) "a") (data (i32.const 111930) "a") (data (i32.const 111933) "a") (data (i32.const 111936) "a") (data (i32.const 111939) "a") (data (i32.const 111942) "a") (data (i32.const 111945) "a") (data (i32.const 111948) "a") (data (i32.const 111951) "a") (data (i32.const 111954) "a") (data (i32.const 111957) "a") (data (i32.const 111960) "a") (data (i32.const 111963) "a") (data (i32.const 111966) "a") (data (i32.const 111969) "a") (data (i32.const 111972) "a") (data (i32.const 111975) "a") (data (i32.const 111978) "a") (data (i32.const 111981) "a") (data (i32.const 111984) "a") (data (i32.const 111987) "a") (data (i32.const 111990) "a") (data (i32.const 111993) "a") (data (i32.const 111996) "a") (data (i32.const 111999) "a") (data (i32.const 112002) "a") (data (i32.const 112005) "a") (data (i32.const 112008) "a") (data (i32.const 112011) "a") (data (i32.const 112014) "a") (data (i32.const 112017) "a") (data (i32.const 112020) "a") (data (i32.const 112023) "a") (data (i32.const 112026) "a") (data (i32.const 112029) "a") (data (i32.const 112032) "a") (data (i32.const 112035) "a") (data (i32.const 112038) "a") (data (i32.const 112041) "a") (data (i32.const 112044) "a") (data (i32.const 112047) "a") (data (i32.const 112050) "a") (data (i32.const 112053) "a") (data (i32.const 112056) "a") (data (i32.const 112059) "a") (data (i32.const 112062) "a") (data (i32.const 112065) "a") (data (i32.const 112068) "a") (data (i32.const 112071) "a") (data (i32.const 112074) "a") (data (i32.const 112077) "a") (data (i32.const 112080) "a") (data (i32.const 112083) "a") (data (i32.const 112086) "a") (data (i32.const 112089) "a") (data (i32.const 112092) "a") (data (i32.const 112095) "a") (data (i32.const 112098) "a") (data (i32.const 112101) "a") (data (i32.const 112104) "a") (data (i32.const 112107) "a") (data (i32.const 112110) "a") (data (i32.const 112113) "a") (data (i32.const 112116) "a") (data (i32.const 112119) "a") (data (i32.const 112122) "a") (data (i32.const 112125) "a") (data (i32.const 112128) "a") (data (i32.const 112131) "a") (data (i32.const 112134) "a") (data (i32.const 112137) "a") (data (i32.const 112140) "a") (data (i32.const 112143) "a") (data (i32.const 112146) "a") (data (i32.const 112149) "a") (data (i32.const 112152) "a") (data (i32.const 112155) "a") (data (i32.const 112158) "a") (data (i32.const 112161) "a") (data (i32.const 112164) "a") (data (i32.const 112167) "a") (data (i32.const 112170) "a") (data (i32.const 112173) "a") (data (i32.const 112176) "a") (data (i32.const 112179) "a") (data (i32.const 112182) "a") (data (i32.const 112185) "a") (data (i32.const 112188) "a") (data (i32.const 112191) "a") (data (i32.const 112194) "a") (data (i32.const 112197) "a") (data (i32.const 112200) "a") (data (i32.const 112203) "a") (data (i32.const 112206) "a") (data (i32.const 112209) "a") (data (i32.const 112212) "a") (data (i32.const 112215) "a") (data (i32.const 112218) "a") (data (i32.const 112221) "a") (data (i32.const 112224) "a") (data (i32.const 112227) "a") (data (i32.const 112230) "a") (data (i32.const 112233) "a") (data (i32.const 112236) "a") (data (i32.const 112239) "a") (data (i32.const 112242) "a") (data (i32.const 112245) "a") (data (i32.const 112248) "a") (data (i32.const 112251) "a") (data (i32.const 112254) "a") (data (i32.const 112257) "a") (data (i32.const 112260) "a") (data (i32.const 112263) "a") (data (i32.const 112266) "a") (data (i32.const 112269) "a") (data (i32.const 112272) "a") (data (i32.const 112275) "a") (data (i32.const 112278) "a") (data (i32.const 112281) "a") (data (i32.const 112284) "a") (data (i32.const 112287) "a") (data (i32.const 112290) "a") (data (i32.const 112293) "a") (data (i32.const 112296) "a") (data (i32.const 112299) "a") (data (i32.const 112302) "a") (data (i32.const 112305) "a") (data (i32.const 112308) "a") (data (i32.const 112311) "a") (data (i32.const 112314) "a") (data (i32.const 112317) "a") (data (i32.const 112320) "a") (data (i32.const 112323) "a") (data (i32.const 112326) "a") (data (i32.const 112329) "a") (data (i32.const 112332) "a") (data (i32.const 112335) "a") (data (i32.const 112338) "a") (data (i32.const 112341) "a") (data (i32.const 112344) "a") (data (i32.const 112347) "a") (data (i32.const 112350) "a") (data (i32.const 112353) "a") (data (i32.const 112356) "a") (data (i32.const 112359) "a") (data (i32.const 112362) "a") (data (i32.const 112365) "a") (data (i32.const 112368) "a") (data (i32.const 112371) "a") (data (i32.const 112374) "a") (data (i32.const 112377) "a") (data (i32.const 112380) "a") (data (i32.const 112383) "a") (data (i32.const 112386) "a") (data (i32.const 112389) "a") (data (i32.const 112392) "a") (data (i32.const 112395) "a") (data (i32.const 112398) "a") (data (i32.const 112401) "a") (data (i32.const 112404) "a") (data (i32.const 112407) "a") (data (i32.const 112410) "a") (data (i32.const 112413) "a") (data (i32.const 112416) "a") (data (i32.const 112419) "a") (data (i32.const 112422) "a") (data (i32.const 112425) "a") (data (i32.const 112428) "a") (data (i32.const 112431) "a") (data (i32.const 112434) "a") (data (i32.const 112437) "a") (data (i32.const 112440) "a") (data (i32.const 112443) "a") (data (i32.const 112446) "a") (data (i32.const 112449) "a") (data (i32.const 112452) "a") (data (i32.const 112455) "a") (data (i32.const 112458) "a") (data (i32.const 112461) "a") (data (i32.const 112464) "a") (data (i32.const 112467) "a") (data (i32.const 112470) "a") (data (i32.const 112473) "a") (data (i32.const 112476) "a") (data (i32.const 112479) "a") (data (i32.const 112482) "a") (data (i32.const 112485) "a") (data (i32.const 112488) "a") (data (i32.const 112491) "a") (data (i32.const 112494) "a") (data (i32.const 112497) "a") (data (i32.const 112500) "a") (data (i32.const 112503) "a") (data (i32.const 112506) "a") (data (i32.const 112509) "a") (data (i32.const 112512) "a") (data (i32.const 112515) "a") (data (i32.const 112518) "a") (data (i32.const 112521) "a") (data (i32.const 112524) "a") (data (i32.const 112527) "a") (data (i32.const 112530) "a") (data (i32.const 112533) "a") (data (i32.const 112536) "a") (data (i32.const 112539) "a") (data (i32.const 112542) "a") (data (i32.const 112545) "a") (data (i32.const 112548) "a") (data (i32.const 112551) "a") (data (i32.const 112554) "a") (data (i32.const 112557) "a") (data (i32.const 112560) "a") (data (i32.const 112563) "a") (data (i32.const 112566) "a") (data (i32.const 112569) "a") (data (i32.const 112572) "a") (data (i32.const 112575) "a") (data (i32.const 112578) "a") (data (i32.const 112581) "a") (data (i32.const 112584) "a") (data (i32.const 112587) "a") (data (i32.const 112590) "a") (data (i32.const 112593) "a") (data (i32.const 112596) "a") (data (i32.const 112599) "a") (data (i32.const 112602) "a") (data (i32.const 112605) "a") (data (i32.const 112608) "a") (data (i32.const 112611) "a") (data (i32.const 112614) "a") (data (i32.const 112617) "a") (data (i32.const 112620) "a") (data (i32.const 112623) "a") (data (i32.const 112626) "a") (data (i32.const 112629) "a") (data (i32.const 112632) "a") (data (i32.const 112635) "a") (data (i32.const 112638) "a") (data (i32.const 112641) "a") (data (i32.const 112644) "a") (data (i32.const 112647) "a") (data (i32.const 112650) "a") (data (i32.const 112653) "a") (data (i32.const 112656) "a") (data (i32.const 112659) "a") (data (i32.const 112662) "a") (data (i32.const 112665) "a") (data (i32.const 112668) "a") (data (i32.const 112671) "a") (data (i32.const 112674) "a") (data (i32.const 112677) "a") (data (i32.const 112680) "a") (data (i32.const 112683) "a") (data (i32.const 112686) "a") (data (i32.const 112689) "a") (data (i32.const 112692) "a") (data (i32.const 112695) "a") (data (i32.const 112698) "a") (data (i32.const 112701) "a") (data (i32.const 112704) "a") (data (i32.const 112707) "a") (data (i32.const 112710) "a") (data (i32.const 112713) "a") (data (i32.const 112716) "a") (data (i32.const 112719) "a") (data (i32.const 112722) "a") (data (i32.const 112725) "a") (data (i32.const 112728) "a") (data (i32.const 112731) "a") (data (i32.const 112734) "a") (data (i32.const 112737) "a") (data (i32.const 112740) "a") (data (i32.const 112743) "a") (data (i32.const 112746) "a") (data (i32.const 112749) "a") (data (i32.const 112752) "a") (data (i32.const 112755) "a") (data (i32.const 112758) "a") (data (i32.const 112761) "a") (data (i32.const 112764) "a") (data (i32.const 112767) "a") (data (i32.const 112770) "a") (data (i32.const 112773) "a") (data (i32.const 112776) "a") (data (i32.const 112779) "a") (data (i32.const 112782) "a") (data (i32.const 112785) "a") (data (i32.const 112788) "a") (data (i32.const 112791) "a") (data (i32.const 112794) "a") (data (i32.const 112797) "a") (data (i32.const 112800) "a") (data (i32.const 112803) "a") (data (i32.const 112806) "a") (data (i32.const 112809) "a") (data (i32.const 112812) "a") (data (i32.const 112815) "a") (data (i32.const 112818) "a") (data (i32.const 112821) "a") (data (i32.const 112824) "a") (data (i32.const 112827) "a") (data (i32.const 112830) "a") (data (i32.const 112833) "a") (data (i32.const 112836) "a") (data (i32.const 112839) "a") (data (i32.const 112842) "a") (data (i32.const 112845) "a") (data (i32.const 112848) "a") (data (i32.const 112851) "a") (data (i32.const 112854) "a") (data (i32.const 112857) "a") (data (i32.const 112860) "a") (data (i32.const 112863) "a") (data (i32.const 112866) "a") (data (i32.const 112869) "a") (data (i32.const 112872) "a") (data (i32.const 112875) "a") (data (i32.const 112878) "a") (data (i32.const 112881) "a") (data (i32.const 112884) "a") (data (i32.const 112887) "a") (data (i32.const 112890) "a") (data (i32.const 112893) "a") (data (i32.const 112896) "a") (data (i32.const 112899) "a") (data (i32.const 112902) "a") (data (i32.const 112905) "a") (data (i32.const 112908) "a") (data (i32.const 112911) "a") (data (i32.const 112914) "a") (data (i32.const 112917) "a") (data (i32.const 112920) "a") (data (i32.const 112923) "a") (data (i32.const 112926) "a") (data (i32.const 112929) "a") (data (i32.const 112932) "a") (data (i32.const 112935) "a") (data (i32.const 112938) "a") (data (i32.const 112941) "a") (data (i32.const 112944) "a") (data (i32.const 112947) "a") (data (i32.const 112950) "a") (data (i32.const 112953) "a") (data (i32.const 112956) "a") (data (i32.const 112959) "a") (data (i32.const 112962) "a") (data (i32.const 112965) "a") (data (i32.const 112968) "a") (data (i32.const 112971) "a") (data (i32.const 112974) "a") (data (i32.const 112977) "a") (data (i32.const 112980) "a") (data (i32.const 112983) "a") (data (i32.const 112986) "a") (data (i32.const 112989) "a") (data (i32.const 112992) "a") (data (i32.const 112995) "a") (data (i32.const 112998) "a") (data (i32.const 113001) "a") (data (i32.const 113004) "a") (data (i32.const 113007) "a") (data (i32.const 113010) "a") (data (i32.const 113013) "a") (data (i32.const 113016) "a") (data (i32.const 113019) "a") (data (i32.const 113022) "a") (data (i32.const 113025) "a") (data (i32.const 113028) "a") (data (i32.const 113031) "a") (data (i32.const 113034) "a") (data (i32.const 113037) "a") (data (i32.const 113040) "a") (data (i32.const 113043) "a") (data (i32.const 113046) "a") (data (i32.const 113049) "a") (data (i32.const 113052) "a") (data (i32.const 113055) "a") (data (i32.const 113058) "a") (data (i32.const 113061) "a") (data (i32.const 113064) "a") (data (i32.const 113067) "a") (data (i32.const 113070) "a") (data (i32.const 113073) "a") (data (i32.const 113076) "a") (data (i32.const 113079) "a") (data (i32.const 113082) "a") (data (i32.const 113085) "a") (data (i32.const 113088) "a") (data (i32.const 113091) "a") (data (i32.const 113094) "a") (data (i32.const 113097) "a") (data (i32.const 113100) "a") (data (i32.const 113103) "a") (data (i32.const 113106) "a") (data (i32.const 113109) "a") (data (i32.const 113112) "a") (data (i32.const 113115) "a") (data (i32.const 113118) "a") (data (i32.const 113121) "a") (data (i32.const 113124) "a") (data (i32.const 113127) "a") (data (i32.const 113130) "a") (data (i32.const 113133) "a") (data (i32.const 113136) "a") (data (i32.const 113139) "a") (data (i32.const 113142) "a") (data (i32.const 113145) "a") (data (i32.const 113148) "a") (data (i32.const 113151) "a") (data (i32.const 113154) "a") (data (i32.const 113157) "a") (data (i32.const 113160) "a") (data (i32.const 113163) "a") (data (i32.const 113166) "a") (data (i32.const 113169) "a") (data (i32.const 113172) "a") (data (i32.const 113175) "a") (data (i32.const 113178) "a") (data (i32.const 113181) "a") (data (i32.const 113184) "a") (data (i32.const 113187) "a") (data (i32.const 113190) "a") (data (i32.const 113193) "a") (data (i32.const 113196) "a") (data (i32.const 113199) "a") (data (i32.const 113202) "a") (data (i32.const 113205) "a") (data (i32.const 113208) "a") (data (i32.const 113211) "a") (data (i32.const 113214) "a") (data (i32.const 113217) "a") (data (i32.const 113220) "a") (data (i32.const 113223) "a") (data (i32.const 113226) "a") (data (i32.const 113229) "a") (data (i32.const 113232) "a") (data (i32.const 113235) "a") (data (i32.const 113238) "a") (data (i32.const 113241) "a") (data (i32.const 113244) "a") (data (i32.const 113247) "a") (data (i32.const 113250) "a") (data (i32.const 113253) "a") (data (i32.const 113256) "a") (data (i32.const 113259) "a") (data (i32.const 113262) "a") (data (i32.const 113265) "a") (data (i32.const 113268) "a") (data (i32.const 113271) "a") (data (i32.const 113274) "a") (data (i32.const 113277) "a") (data (i32.const 113280) "a") (data (i32.const 113283) "a") (data (i32.const 113286) "a") (data (i32.const 113289) "a") (data (i32.const 113292) "a") (data (i32.const 113295) "a") (data (i32.const 113298) "a") (data (i32.const 113301) "a") (data (i32.const 113304) "a") (data (i32.const 113307) "a") (data (i32.const 113310) "a") (data (i32.const 113313) "a") (data (i32.const 113316) "a") (data (i32.const 113319) "a") (data (i32.const 113322) "a") (data (i32.const 113325) "a") (data (i32.const 113328) "a") (data (i32.const 113331) "a") (data (i32.const 113334) "a") (data (i32.const 113337) "a") (data (i32.const 113340) "a") (data (i32.const 113343) "a") (data (i32.const 113346) "a") (data (i32.const 113349) "a") (data (i32.const 113352) "a") (data (i32.const 113355) "a") (data (i32.const 113358) "a") (data (i32.const 113361) "a") (data (i32.const 113364) "a") (data (i32.const 113367) "a") (data (i32.const 113370) "a") (data (i32.const 113373) "a") (data (i32.const 113376) "a") (data (i32.const 113379) "a") (data (i32.const 113382) "a") (data (i32.const 113385) "a") (data (i32.const 113388) "a") (data (i32.const 113391) "a") (data (i32.const 113394) "a") (data (i32.const 113397) "a") (data (i32.const 113400) "a") (data (i32.const 113403) "a") (data (i32.const 113406) "a") (data (i32.const 113409) "a") (data (i32.const 113412) "a") (data (i32.const 113415) "a") (data (i32.const 113418) "a") (data (i32.const 113421) "a") (data (i32.const 113424) "a") (data (i32.const 113427) "a") (data (i32.const 113430) "a") (data (i32.const 113433) "a") (data (i32.const 113436) "a") (data (i32.const 113439) "a") (data (i32.const 113442) "a") (data (i32.const 113445) "a") (data (i32.const 113448) "a") (data (i32.const 113451) "a") (data (i32.const 113454) "a") (data (i32.const 113457) "a") (data (i32.const 113460) "a") (data (i32.const 113463) "a") (data (i32.const 113466) "a") (data (i32.const 113469) "a") (data (i32.const 113472) "a") (data (i32.const 113475) "a") (data (i32.const 113478) "a") (data (i32.const 113481) "a") (data (i32.const 113484) "a") (data (i32.const 113487) "a") (data (i32.const 113490) "a") (data (i32.const 113493) "a") (data (i32.const 113496) "a") (data (i32.const 113499) "a") (data (i32.const 113502) "a") (data (i32.const 113505) "a") (data (i32.const 113508) "a") (data (i32.const 113511) "a") (data (i32.const 113514) "a") (data (i32.const 113517) "a") (data (i32.const 113520) "a") (data (i32.const 113523) "a") (data (i32.const 113526) "a") (data (i32.const 113529) "a") (data (i32.const 113532) "a") (data (i32.const 113535) "a") (data (i32.const 113538) "a") (data (i32.const 113541) "a") (data (i32.const 113544) "a") (data (i32.const 113547) "a") (data (i32.const 113550) "a") (data (i32.const 113553) "a") (data (i32.const 113556) "a") (data (i32.const 113559) "a") (data (i32.const 113562) "a") (data (i32.const 113565) "a") (data (i32.const 113568) "a") (data (i32.const 113571) "a") (data (i32.const 113574) "a") (data (i32.const 113577) "a") (data (i32.const 113580) "a") (data (i32.const 113583) "a") (data (i32.const 113586) "a") (data (i32.const 113589) "a") (data (i32.const 113592) "a") (data (i32.const 113595) "a") (data (i32.const 113598) "a") (data (i32.const 113601) "a") (data (i32.const 113604) "a") (data (i32.const 113607) "a") (data (i32.const 113610) "a") (data (i32.const 113613) "a") (data (i32.const 113616) "a") (data (i32.const 113619) "a") (data (i32.const 113622) "a") (data (i32.const 113625) "a") (data (i32.const 113628) "a") (data (i32.const 113631) "a") (data (i32.const 113634) "a") (data (i32.const 113637) "a") (data (i32.const 113640) "a") (data (i32.const 113643) "a") (data (i32.const 113646) "a") (data (i32.const 113649) "a") (data (i32.const 113652) "a") (data (i32.const 113655) "a") (data (i32.const 113658) "a") (data (i32.const 113661) "a") (data (i32.const 113664) "a") (data (i32.const 113667) "a") (data (i32.const 113670) "a") (data (i32.const 113673) "a") (data (i32.const 113676) "a") (data (i32.const 113679) "a") (data (i32.const 113682) "a") (data (i32.const 113685) "a") (data (i32.const 113688) "a") (data (i32.const 113691) "a") (data (i32.const 113694) "a") (data (i32.const 113697) "a") (data (i32.const 113700) "a") (data (i32.const 113703) "a") (data (i32.const 113706) "a") (data (i32.const 113709) "a") (data (i32.const 113712) "a") (data (i32.const 113715) "a") (data (i32.const 113718) "a") (data (i32.const 113721) "a") (data (i32.const 113724) "a") (data (i32.const 113727) "a") (data (i32.const 113730) "a") (data (i32.const 113733) "a") (data (i32.const 113736) "a") (data (i32.const 113739) "a") (data (i32.const 113742) "a") (data (i32.const 113745) "a") (data (i32.const 113748) "a") (data (i32.const 113751) "a") (data (i32.const 113754) "a") (data (i32.const 113757) "a") (data (i32.const 113760) "a") (data (i32.const 113763) "a") (data (i32.const 113766) "a") (data (i32.const 113769) "a") (data (i32.const 113772) "a") (data (i32.const 113775) "a") (data (i32.const 113778) "a") (data (i32.const 113781) "a") (data (i32.const 113784) "a") (data (i32.const 113787) "a") (data (i32.const 113790) "a") (data (i32.const 113793) "a") (data (i32.const 113796) "a") (data (i32.const 113799) "a") (data (i32.const 113802) "a") (data (i32.const 113805) "a") (data (i32.const 113808) "a") (data (i32.const 113811) "a") (data (i32.const 113814) "a") (data (i32.const 113817) "a") (data (i32.const 113820) "a") (data (i32.const 113823) "a") (data (i32.const 113826) "a") (data (i32.const 113829) "a") (data (i32.const 113832) "a") (data (i32.const 113835) "a") (data (i32.const 113838) "a") (data (i32.const 113841) "a") (data (i32.const 113844) "a") (data (i32.const 113847) "a") (data (i32.const 113850) "a") (data (i32.const 113853) "a") (data (i32.const 113856) "a") (data (i32.const 113859) "a") (data (i32.const 113862) "a") (data (i32.const 113865) "a") (data (i32.const 113868) "a") (data (i32.const 113871) "a") (data (i32.const 113874) "a") (data (i32.const 113877) "a") (data (i32.const 113880) "a") (data (i32.const 113883) "a") (data (i32.const 113886) "a") (data (i32.const 113889) "a") (data (i32.const 113892) "a") (data (i32.const 113895) "a") (data (i32.const 113898) "a") (data (i32.const 113901) "a") (data (i32.const 113904) "a") (data (i32.const 113907) "a") (data (i32.const 113910) "a") (data (i32.const 113913) "a") (data (i32.const 113916) "a") (data (i32.const 113919) "a") (data (i32.const 113922) "a") (data (i32.const 113925) "a") (data (i32.const 113928) "a") (data (i32.const 113931) "a") (data (i32.const 113934) "a") (data (i32.const 113937) "a") (data (i32.const 113940) "a") (data (i32.const 113943) "a") (data (i32.const 113946) "a") (data (i32.const 113949) "a") (data (i32.const 113952) "a") (data (i32.const 113955) "a") (data (i32.const 113958) "a") (data (i32.const 113961) "a") (data (i32.const 113964) "a") (data (i32.const 113967) "a") (data (i32.const 113970) "a") (data (i32.const 113973) "a") (data (i32.const 113976) "a") (data (i32.const 113979) "a") (data (i32.const 113982) "a") (data (i32.const 113985) "a") (data (i32.const 113988) "a") (data (i32.const 113991) "a") (data (i32.const 113994) "a") (data (i32.const 113997) "a") (data (i32.const 114000) "a") (data (i32.const 114003) "a") (data (i32.const 114006) "a") (data (i32.const 114009) "a") (data (i32.const 114012) "a") (data (i32.const 114015) "a") (data (i32.const 114018) "a") (data (i32.const 114021) "a") (data (i32.const 114024) "a") (data (i32.const 114027) "a") (data (i32.const 114030) "a") (data (i32.const 114033) "a") (data (i32.const 114036) "a") (data (i32.const 114039) "a") (data (i32.const 114042) "a") (data (i32.const 114045) "a") (data (i32.const 114048) "a") (data (i32.const 114051) "a") (data (i32.const 114054) "a") (data (i32.const 114057) "a") (data (i32.const 114060) "a") (data (i32.const 114063) "a") (data (i32.const 114066) "a") (data (i32.const 114069) "a") (data (i32.const 114072) "a") (data (i32.const 114075) "a") (data (i32.const 114078) "a") (data (i32.const 114081) "a") (data (i32.const 114084) "a") (data (i32.const 114087) "a") (data (i32.const 114090) "a") (data (i32.const 114093) "a") (data (i32.const 114096) "a") (data (i32.const 114099) "a") (data (i32.const 114102) "a") (data (i32.const 114105) "a") (data (i32.const 114108) "a") (data (i32.const 114111) "a") (data (i32.const 114114) "a") (data (i32.const 114117) "a") (data (i32.const 114120) "a") (data (i32.const 114123) "a") (data (i32.const 114126) "a") (data (i32.const 114129) "a") (data (i32.const 114132) "a") (data (i32.const 114135) "a") (data (i32.const 114138) "a") (data (i32.const 114141) "a") (data (i32.const 114144) "a") (data (i32.const 114147) "a") (data (i32.const 114150) "a") (data (i32.const 114153) "a") (data (i32.const 114156) "a") (data (i32.const 114159) "a") (data (i32.const 114162) "a") (data (i32.const 114165) "a") (data (i32.const 114168) "a") (data (i32.const 114171) "a") (data (i32.const 114174) "a") (data (i32.const 114177) "a") (data (i32.const 114180) "a") (data (i32.const 114183) "a") (data (i32.const 114186) "a") (data (i32.const 114189) "a") (data (i32.const 114192) "a") (data (i32.const 114195) "a") (data (i32.const 114198) "a") (data (i32.const 114201) "a") (data (i32.const 114204) "a") (data (i32.const 114207) "a") (data (i32.const 114210) "a") (data (i32.const 114213) "a") (data (i32.const 114216) "a") (data (i32.const 114219) "a") (data (i32.const 114222) "a") (data (i32.const 114225) "a") (data (i32.const 114228) "a") (data (i32.const 114231) "a") (data (i32.const 114234) "a") (data (i32.const 114237) "a") (data (i32.const 114240) "a") (data (i32.const 114243) "a") (data (i32.const 114246) "a") (data (i32.const 114249) "a") (data (i32.const 114252) "a") (data (i32.const 114255) "a") (data (i32.const 114258) "a") (data (i32.const 114261) "a") (data (i32.const 114264) "a") (data (i32.const 114267) "a") (data (i32.const 114270) "a") (data (i32.const 114273) "a") (data (i32.const 114276) "a") (data (i32.const 114279) "a") (data (i32.const 114282) "a") (data (i32.const 114285) "a") (data (i32.const 114288) "a") (data (i32.const 114291) "a") (data (i32.const 114294) "a") (data (i32.const 114297) "a") (data (i32.const 114300) "a") (data (i32.const 114303) "a") (data (i32.const 114306) "a") (data (i32.const 114309) "a") (data (i32.const 114312) "a") (data (i32.const 114315) "a") (data (i32.const 114318) "a") (data (i32.const 114321) "a") (data (i32.const 114324) "a") (data (i32.const 114327) "a") (data (i32.const 114330) "a") (data (i32.const 114333) "a") (data (i32.const 114336) "a") (data (i32.const 114339) "a") (data (i32.const 114342) "a") (data (i32.const 114345) "a") (data (i32.const 114348) "a") (data (i32.const 114351) "a") (data (i32.const 114354) "a") (data (i32.const 114357) "a") (data (i32.const 114360) "a") (data (i32.const 114363) "a") (data (i32.const 114366) "a") (data (i32.const 114369) "a") (data (i32.const 114372) "a") (data (i32.const 114375) "a") (data (i32.const 114378) "a") (data (i32.const 114381) "a") (data (i32.const 114384) "a") (data (i32.const 114387) "a") (data (i32.const 114390) "a") (data (i32.const 114393) "a") (data (i32.const 114396) "a") (data (i32.const 114399) "a") (data (i32.const 114402) "a") (data (i32.const 114405) "a") (data (i32.const 114408) "a") (data (i32.const 114411) "a") (data (i32.const 114414) "a") (data (i32.const 114417) "a") (data (i32.const 114420) "a") (data (i32.const 114423) "a") (data (i32.const 114426) "a") (data (i32.const 114429) "a") (data (i32.const 114432) "a") (data (i32.const 114435) "a") (data (i32.const 114438) "a") (data (i32.const 114441) "a") (data (i32.const 114444) "a") (data (i32.const 114447) "a") (data (i32.const 114450) "a") (data (i32.const 114453) "a") (data (i32.const 114456) "a") (data (i32.const 114459) "a") (data (i32.const 114462) "a") (data (i32.const 114465) "a") (data (i32.const 114468) "a") (data (i32.const 114471) "a") (data (i32.const 114474) "a") (data (i32.const 114477) "a") (data (i32.const 114480) "a") (data (i32.const 114483) "a") (data (i32.const 114486) "a") (data (i32.const 114489) "a") (data (i32.const 114492) "a") (data (i32.const 114495) "a") (data (i32.const 114498) "a") (data (i32.const 114501) "a") (data (i32.const 114504) "a") (data (i32.const 114507) "a") (data (i32.const 114510) "a") (data (i32.const 114513) "a") (data (i32.const 114516) "a") (data (i32.const 114519) "a") (data (i32.const 114522) "a") (data (i32.const 114525) "a") (data (i32.const 114528) "a") (data (i32.const 114531) "a") (data (i32.const 114534) "a") (data (i32.const 114537) "a") (data (i32.const 114540) "a") (data (i32.const 114543) "a") (data (i32.const 114546) "a") (data (i32.const 114549) "a") (data (i32.const 114552) "a") (data (i32.const 114555) "a") (data (i32.const 114558) "a") (data (i32.const 114561) "a") (data (i32.const 114564) "a") (data (i32.const 114567) "a") (data (i32.const 114570) "a") (data (i32.const 114573) "a") (data (i32.const 114576) "a") (data (i32.const 114579) "a") (data (i32.const 114582) "a") (data (i32.const 114585) "a") (data (i32.const 114588) "a") (data (i32.const 114591) "a") (data (i32.const 114594) "a") (data (i32.const 114597) "a") (data (i32.const 114600) "a") (data (i32.const 114603) "a") (data (i32.const 114606) "a") (data (i32.const 114609) "a") (data (i32.const 114612) "a") (data (i32.const 114615) "a") (data (i32.const 114618) "a") (data (i32.const 114621) "a") (data (i32.const 114624) "a") (data (i32.const 114627) "a") (data (i32.const 114630) "a") (data (i32.const 114633) "a") (data (i32.const 114636) "a") (data (i32.const 114639) "a") (data (i32.const 114642) "a") (data (i32.const 114645) "a") (data (i32.const 114648) "a") (data (i32.const 114651) "a") (data (i32.const 114654) "a") (data (i32.const 114657) "a") (data (i32.const 114660) "a") (data (i32.const 114663) "a") (data (i32.const 114666) "a") (data (i32.const 114669) "a") (data (i32.const 114672) "a") (data (i32.const 114675) "a") (data (i32.const 114678) "a") (data (i32.const 114681) "a") (data (i32.const 114684) "a") (data (i32.const 114687) "a") (data (i32.const 114690) "a") (data (i32.const 114693) "a") (data (i32.const 114696) "a") (data (i32.const 114699) "a") (data (i32.const 114702) "a") (data (i32.const 114705) "a") (data (i32.const 114708) "a") (data (i32.const 114711) "a") (data (i32.const 114714) "a") (data (i32.const 114717) "a") (data (i32.const 114720) "a") (data (i32.const 114723) "a") (data (i32.const 114726) "a") (data (i32.const 114729) "a") (data (i32.const 114732) "a") (data (i32.const 114735) "a") (data (i32.const 114738) "a") (data (i32.const 114741) "a") (data (i32.const 114744) "a") (data (i32.const 114747) "a") (data (i32.const 114750) "a") (data (i32.const 114753) "a") (data (i32.const 114756) "a") (data (i32.const 114759) "a") (data (i32.const 114762) "a") (data (i32.const 114765) "a") (data (i32.const 114768) "a") (data (i32.const 114771) "a") (data (i32.const 114774) "a") (data (i32.const 114777) "a") (data (i32.const 114780) "a") (data (i32.const 114783) "a") (data (i32.const 114786) "a") (data (i32.const 114789) "a") (data (i32.const 114792) "a") (data (i32.const 114795) "a") (data (i32.const 114798) "a") (data (i32.const 114801) "a") (data (i32.const 114804) "a") (data (i32.const 114807) "a") (data (i32.const 114810) "a") (data (i32.const 114813) "a") (data (i32.const 114816) "a") (data (i32.const 114819) "a") (data (i32.const 114822) "a") (data (i32.const 114825) "a") (data (i32.const 114828) "a") (data (i32.const 114831) "a") (data (i32.const 114834) "a") (data (i32.const 114837) "a") (data (i32.const 114840) "a") (data (i32.const 114843) "a") (data (i32.const 114846) "a") (data (i32.const 114849) "a") (data (i32.const 114852) "a") (data (i32.const 114855) "a") (data (i32.const 114858) "a") (data (i32.const 114861) "a") (data (i32.const 114864) "a") (data (i32.const 114867) "a") (data (i32.const 114870) "a") (data (i32.const 114873) "a") (data (i32.const 114876) "a") (data (i32.const 114879) "a") (data (i32.const 114882) "a") (data (i32.const 114885) "a") (data (i32.const 114888) "a") (data (i32.const 114891) "a") (data (i32.const 114894) "a") (data (i32.const 114897) "a") (data (i32.const 114900) "a") (data (i32.const 114903) "a") (data (i32.const 114906) "a") (data (i32.const 114909) "a") (data (i32.const 114912) "a") (data (i32.const 114915) "a") (data (i32.const 114918) "a") (data (i32.const 114921) "a") (data (i32.const 114924) "a") (data (i32.const 114927) "a") (data (i32.const 114930) "a") (data (i32.const 114933) "a") (data (i32.const 114936) "a") (data (i32.const 114939) "a") (data (i32.const 114942) "a") (data (i32.const 114945) "a") (data (i32.const 114948) "a") (data (i32.const 114951) "a") (data (i32.const 114954) "a") (data (i32.const 114957) "a") (data (i32.const 114960) "a") (data (i32.const 114963) "a") (data (i32.const 114966) "a") (data (i32.const 114969) "a") (data (i32.const 114972) "a") (data (i32.const 114975) "a") (data (i32.const 114978) "a") (data (i32.const 114981) "a") (data (i32.const 114984) "a") (data (i32.const 114987) "a") (data (i32.const 114990) "a") (data (i32.const 114993) "a") (data (i32.const 114996) "a") (data (i32.const 114999) "a") (data (i32.const 115002) "a") (data (i32.const 115005) "a") (data (i32.const 115008) "a") (data (i32.const 115011) "a") (data (i32.const 115014) "a") (data (i32.const 115017) "a") (data (i32.const 115020) "a") (data (i32.const 115023) "a") (data (i32.const 115026) "a") (data (i32.const 115029) "a") (data (i32.const 115032) "a") (data (i32.const 115035) "a") (data (i32.const 115038) "a") (data (i32.const 115041) "a") (data (i32.const 115044) "a") (data (i32.const 115047) "a") (data (i32.const 115050) "a") (data (i32.const 115053) "a") (data (i32.const 115056) "a") (data (i32.const 115059) "a") (data (i32.const 115062) "a") (data (i32.const 115065) "a") (data (i32.const 115068) "a") (data (i32.const 115071) "a") (data (i32.const 115074) "a") (data (i32.const 115077) "a") (data (i32.const 115080) "a") (data (i32.const 115083) "a") (data (i32.const 115086) "a") (data (i32.const 115089) "a") (data (i32.const 115092) "a") (data (i32.const 115095) "a") (data (i32.const 115098) "a") (data (i32.const 115101) "a") (data (i32.const 115104) "a") (data (i32.const 115107) "a") (data (i32.const 115110) "a") (data (i32.const 115113) "a") (data (i32.const 115116) "a") (data (i32.const 115119) "a") (data (i32.const 115122) "a") (data (i32.const 115125) "a") (data (i32.const 115128) "a") (data (i32.const 115131) "a") (data (i32.const 115134) "a") (data (i32.const 115137) "a") (data (i32.const 115140) "a") (data (i32.const 115143) "a") (data (i32.const 115146) "a") (data (i32.const 115149) "a") (data (i32.const 115152) "a") (data (i32.const 115155) "a") (data (i32.const 115158) "a") (data (i32.const 115161) "a") (data (i32.const 115164) "a") (data (i32.const 115167) "a") (data (i32.const 115170) "a") (data (i32.const 115173) "a") (data (i32.const 115176) "a") (data (i32.const 115179) "a") (data (i32.const 115182) "a") (data (i32.const 115185) "a") (data (i32.const 115188) "a") (data (i32.const 115191) "a") (data (i32.const 115194) "a") (data (i32.const 115197) "a") (data (i32.const 115200) "a") (data (i32.const 115203) "a") (data (i32.const 115206) "a") (data (i32.const 115209) "a") (data (i32.const 115212) "a") (data (i32.const 115215) "a") (data (i32.const 115218) "a") (data (i32.const 115221) "a") (data (i32.const 115224) "a") (data (i32.const 115227) "a") (data (i32.const 115230) "a") (data (i32.const 115233) "a") (data (i32.const 115236) "a") (data (i32.const 115239) "a") (data (i32.const 115242) "a") (data (i32.const 115245) "a") (data (i32.const 115248) "a") (data (i32.const 115251) "a") (data (i32.const 115254) "a") (data (i32.const 115257) "a") (data (i32.const 115260) "a") (data (i32.const 115263) "a") (data (i32.const 115266) "a") (data (i32.const 115269) "a") (data (i32.const 115272) "a") (data (i32.const 115275) "a") (data (i32.const 115278) "a") (data (i32.const 115281) "a") (data (i32.const 115284) "a") (data (i32.const 115287) "a") (data (i32.const 115290) "a") (data (i32.const 115293) "a") (data (i32.const 115296) "a") (data (i32.const 115299) "a") (data (i32.const 115302) "a") (data (i32.const 115305) "a") (data (i32.const 115308) "a") (data (i32.const 115311) "a") (data (i32.const 115314) "a") (data (i32.const 115317) "a") (data (i32.const 115320) "a") (data (i32.const 115323) "a") (data (i32.const 115326) "a") (data (i32.const 115329) "a") (data (i32.const 115332) "a") (data (i32.const 115335) "a") (data (i32.const 115338) "a") (data (i32.const 115341) "a") (data (i32.const 115344) "a") (data (i32.const 115347) "a") (data (i32.const 115350) "a") (data (i32.const 115353) "a") (data (i32.const 115356) "a") (data (i32.const 115359) "a") (data (i32.const 115362) "a") (data (i32.const 115365) "a") (data (i32.const 115368) "a") (data (i32.const 115371) "a") (data (i32.const 115374) "a") (data (i32.const 115377) "a") (data (i32.const 115380) "a") (data (i32.const 115383) "a") (data (i32.const 115386) "a") (data (i32.const 115389) "a") (data (i32.const 115392) "a") (data (i32.const 115395) "a") (data (i32.const 115398) "a") (data (i32.const 115401) "a") (data (i32.const 115404) "a") (data (i32.const 115407) "a") (data (i32.const 115410) "a") (data (i32.const 115413) "a") (data (i32.const 115416) "a") (data (i32.const 115419) "a") (data (i32.const 115422) "a") (data (i32.const 115425) "a") (data (i32.const 115428) "a") (data (i32.const 115431) "a") (data (i32.const 115434) "a") (data (i32.const 115437) "a") (data (i32.const 115440) "a") (data (i32.const 115443) "a") (data (i32.const 115446) "a") (data (i32.const 115449) "a") (data (i32.const 115452) "a") (data (i32.const 115455) "a") (data (i32.const 115458) "a") (data (i32.const 115461) "a") (data (i32.const 115464) "a") (data (i32.const 115467) "a") (data (i32.const 115470) "a") (data (i32.const 115473) "a") (data (i32.const 115476) "a") (data (i32.const 115479) "a") (data (i32.const 115482) "a") (data (i32.const 115485) "a") (data (i32.const 115488) "a") (data (i32.const 115491) "a") (data (i32.const 115494) "a") (data (i32.const 115497) "a") (data (i32.const 115500) "a") (data (i32.const 115503) "a") (data (i32.const 115506) "a") (data (i32.const 115509) "a") (data (i32.const 115512) "a") (data (i32.const 115515) "a") (data (i32.const 115518) "a") (data (i32.const 115521) "a") (data (i32.const 115524) "a") (data (i32.const 115527) "a") (data (i32.const 115530) "a") (data (i32.const 115533) "a") (data (i32.const 115536) "a") (data (i32.const 115539) "a") (data (i32.const 115542) "a") (data (i32.const 115545) "a") (data (i32.const 115548) "a") (data (i32.const 115551) "a") (data (i32.const 115554) "a") (data (i32.const 115557) "a") (data (i32.const 115560) "a") (data (i32.const 115563) "a") (data (i32.const 115566) "a") (data (i32.const 115569) "a") (data (i32.const 115572) "a") (data (i32.const 115575) "a") (data (i32.const 115578) "a") (data (i32.const 115581) "a") (data (i32.const 115584) "a") (data (i32.const 115587) "a") (data (i32.const 115590) "a") (data (i32.const 115593) "a") (data (i32.const 115596) "a") (data (i32.const 115599) "a") (data (i32.const 115602) "a") (data (i32.const 115605) "a") (data (i32.const 115608) "a") (data (i32.const 115611) "a") (data (i32.const 115614) "a") (data (i32.const 115617) "a") (data (i32.const 115620) "a") (data (i32.const 115623) "a") (data (i32.const 115626) "a") (data (i32.const 115629) "a") (data (i32.const 115632) "a") (data (i32.const 115635) "a") (data (i32.const 115638) "a") (data (i32.const 115641) "a") (data (i32.const 115644) "a") (data (i32.const 115647) "a") (data (i32.const 115650) "a") (data (i32.const 115653) "a") (data (i32.const 115656) "a") (data (i32.const 115659) "a") (data (i32.const 115662) "a") (data (i32.const 115665) "a") (data (i32.const 115668) "a") (data (i32.const 115671) "a") (data (i32.const 115674) "a") (data (i32.const 115677) "a") (data (i32.const 115680) "a") (data (i32.const 115683) "a") (data (i32.const 115686) "a") (data (i32.const 115689) "a") (data (i32.const 115692) "a") (data (i32.const 115695) "a") (data (i32.const 115698) "a") (data (i32.const 115701) "a") (data (i32.const 115704) "a") (data (i32.const 115707) "a") (data (i32.const 115710) "a") (data (i32.const 115713) "a") (data (i32.const 115716) "a") (data (i32.const 115719) "a") (data (i32.const 115722) "a") (data (i32.const 115725) "a") (data (i32.const 115728) "a") (data (i32.const 115731) "a") (data (i32.const 115734) "a") (data (i32.const 115737) "a") (data (i32.const 115740) "a") (data (i32.const 115743) "a") (data (i32.const 115746) "a") (data (i32.const 115749) "a") (data (i32.const 115752) "a") (data (i32.const 115755) "a") (data (i32.const 115758) "a") (data (i32.const 115761) "a") (data (i32.const 115764) "a") (data (i32.const 115767) "a") (data (i32.const 115770) "a") (data (i32.const 115773) "a") (data (i32.const 115776) "a") (data (i32.const 115779) "a") (data (i32.const 115782) "a") (data (i32.const 115785) "a") (data (i32.const 115788) "a") (data (i32.const 115791) "a") (data (i32.const 115794) "a") (data (i32.const 115797) "a") (data (i32.const 115800) "a") (data (i32.const 115803) "a") (data (i32.const 115806) "a") (data (i32.const 115809) "a") (data (i32.const 115812) "a") (data (i32.const 115815) "a") (data (i32.const 115818) "a") (data (i32.const 115821) "a") (data (i32.const 115824) "a") (data (i32.const 115827) "a") (data (i32.const 115830) "a") (data (i32.const 115833) "a") (data (i32.const 115836) "a") (data (i32.const 115839) "a") (data (i32.const 115842) "a") (data (i32.const 115845) "a") (data (i32.const 115848) "a") (data (i32.const 115851) "a") (data (i32.const 115854) "a") (data (i32.const 115857) "a") (data (i32.const 115860) "a") (data (i32.const 115863) "a") (data (i32.const 115866) "a") (data (i32.const 115869) "a") (data (i32.const 115872) "a") (data (i32.const 115875) "a") (data (i32.const 115878) "a") (data (i32.const 115881) "a") (data (i32.const 115884) "a") (data (i32.const 115887) "a") (data (i32.const 115890) "a") (data (i32.const 115893) "a") (data (i32.const 115896) "a") (data (i32.const 115899) "a") (data (i32.const 115902) "a") (data (i32.const 115905) "a") (data (i32.const 115908) "a") (data (i32.const 115911) "a") (data (i32.const 115914) "a") (data (i32.const 115917) "a") (data (i32.const 115920) "a") (data (i32.const 115923) "a") (data (i32.const 115926) "a") (data (i32.const 115929) "a") (data (i32.const 115932) "a") (data (i32.const 115935) "a") (data (i32.const 115938) "a") (data (i32.const 115941) "a") (data (i32.const 115944) "a") (data (i32.const 115947) "a") (data (i32.const 115950) "a") (data (i32.const 115953) "a") (data (i32.const 115956) "a") (data (i32.const 115959) "a") (data (i32.const 115962) "a") (data (i32.const 115965) "a") (data (i32.const 115968) "a") (data (i32.const 115971) "a") (data (i32.const 115974) "a") (data (i32.const 115977) "a") (data (i32.const 115980) "a") (data (i32.const 115983) "a") (data (i32.const 115986) "a") (data (i32.const 115989) "a") (data (i32.const 115992) "a") (data (i32.const 115995) "a") (data (i32.const 115998) "a") (data (i32.const 116001) "a") (data (i32.const 116004) "a") (data (i32.const 116007) "a") (data (i32.const 116010) "a") (data (i32.const 116013) "a") (data (i32.const 116016) "a") (data (i32.const 116019) "a") (data (i32.const 116022) "a") (data (i32.const 116025) "a") (data (i32.const 116028) "a") (data (i32.const 116031) "a") (data (i32.const 116034) "a") (data (i32.const 116037) "a") (data (i32.const 116040) "a") (data (i32.const 116043) "a") (data (i32.const 116046) "a") (data (i32.const 116049) "a") (data (i32.const 116052) "a") (data (i32.const 116055) "a") (data (i32.const 116058) "a") (data (i32.const 116061) "a") (data (i32.const 116064) "a") (data (i32.const 116067) "a") (data (i32.const 116070) "a") (data (i32.const 116073) "a") (data (i32.const 116076) "a") (data (i32.const 116079) "a") (data (i32.const 116082) "a") (data (i32.const 116085) "a") (data (i32.const 116088) "a") (data (i32.const 116091) "a") (data (i32.const 116094) "a") (data (i32.const 116097) "a") (data (i32.const 116100) "a") (data (i32.const 116103) "a") (data (i32.const 116106) "a") (data (i32.const 116109) "a") (data (i32.const 116112) "a") (data (i32.const 116115) "a") (data (i32.const 116118) "a") (data (i32.const 116121) "a") (data (i32.const 116124) "a") (data (i32.const 116127) "a") (data (i32.const 116130) "a") (data (i32.const 116133) "a") (data (i32.const 116136) "a") (data (i32.const 116139) "a") (data (i32.const 116142) "a") (data (i32.const 116145) "a") (data (i32.const 116148) "a") (data (i32.const 116151) "a") (data (i32.const 116154) "a") (data (i32.const 116157) "a") (data (i32.const 116160) "a") (data (i32.const 116163) "a") (data (i32.const 116166) "a") (data (i32.const 116169) "a") (data (i32.const 116172) "a") (data (i32.const 116175) "a") (data (i32.const 116178) "a") (data (i32.const 116181) "a") (data (i32.const 116184) "a") (data (i32.const 116187) "a") (data (i32.const 116190) "a") (data (i32.const 116193) "a") (data (i32.const 116196) "a") (data (i32.const 116199) "a") (data (i32.const 116202) "a") (data (i32.const 116205) "a") (data (i32.const 116208) "a") (data (i32.const 116211) "a") (data (i32.const 116214) "a") (data (i32.const 116217) "a") (data (i32.const 116220) "a") (data (i32.const 116223) "a") (data (i32.const 116226) "a") (data (i32.const 116229) "a") (data (i32.const 116232) "a") (data (i32.const 116235) "a") (data (i32.const 116238) "a") (data (i32.const 116241) "a") (data (i32.const 116244) "a") (data (i32.const 116247) "a") (data (i32.const 116250) "a") (data (i32.const 116253) "a") (data (i32.const 116256) "a") (data (i32.const 116259) "a") (data (i32.const 116262) "a") (data (i32.const 116265) "a") (data (i32.const 116268) "a") (data (i32.const 116271) "a") (data (i32.const 116274) "a") (data (i32.const 116277) "a") (data (i32.const 116280) "a") (data (i32.const 116283) "a") (data (i32.const 116286) "a") (data (i32.const 116289) "a") (data (i32.const 116292) "a") (data (i32.const 116295) "a") (data (i32.const 116298) "a") (data (i32.const 116301) "a") (data (i32.const 116304) "a") (data (i32.const 116307) "a") (data (i32.const 116310) "a") (data (i32.const 116313) "a") (data (i32.const 116316) "a") (data (i32.const 116319) "a") (data (i32.const 116322) "a") (data (i32.const 116325) "a") (data (i32.const 116328) "a") (data (i32.const 116331) "a") (data (i32.const 116334) "a") (data (i32.const 116337) "a") (data (i32.const 116340) "a") (data (i32.const 116343) "a") (data (i32.const 116346) "a") (data (i32.const 116349) "a") (data (i32.const 116352) "a") (data (i32.const 116355) "a") (data (i32.const 116358) "a") (data (i32.const 116361) "a") (data (i32.const 116364) "a") (data (i32.const 116367) "a") (data (i32.const 116370) "a") (data (i32.const 116373) "a") (data (i32.const 116376) "a") (data (i32.const 116379) "a") (data (i32.const 116382) "a") (data (i32.const 116385) "a") (data (i32.const 116388) "a") (data (i32.const 116391) "a") (data (i32.const 116394) "a") (data (i32.const 116397) "a") (data (i32.const 116400) "a") (data (i32.const 116403) "a") (data (i32.const 116406) "a") (data (i32.const 116409) "a") (data (i32.const 116412) "a") (data (i32.const 116415) "a") (data (i32.const 116418) "a") (data (i32.const 116421) "a") (data (i32.const 116424) "a") (data (i32.const 116427) "a") (data (i32.const 116430) "a") (data (i32.const 116433) "a") (data (i32.const 116436) "a") (data (i32.const 116439) "a") (data (i32.const 116442) "a") (data (i32.const 116445) "a") (data (i32.const 116448) "a") (data (i32.const 116451) "a") (data (i32.const 116454) "a") (data (i32.const 116457) "a") (data (i32.const 116460) "a") (data (i32.const 116463) "a") (data (i32.const 116466) "a") (data (i32.const 116469) "a") (data (i32.const 116472) "a") (data (i32.const 116475) "a") (data (i32.const 116478) "a") (data (i32.const 116481) "a") (data (i32.const 116484) "a") (data (i32.const 116487) "a") (data (i32.const 116490) "a") (data (i32.const 116493) "a") (data (i32.const 116496) "a") (data (i32.const 116499) "a") (data (i32.const 116502) "a") (data (i32.const 116505) "a") (data (i32.const 116508) "a") (data (i32.const 116511) "a") (data (i32.const 116514) "a") (data (i32.const 116517) "a") (data (i32.const 116520) "a") (data (i32.const 116523) "a") (data (i32.const 116526) "a") (data (i32.const 116529) "a") (data (i32.const 116532) "a") (data (i32.const 116535) "a") (data (i32.const 116538) "a") (data (i32.const 116541) "a") (data (i32.const 116544) "a") (data (i32.const 116547) "a") (data (i32.const 116550) "a") (data (i32.const 116553) "a") (data (i32.const 116556) "a") (data (i32.const 116559) "a") (data (i32.const 116562) "a") (data (i32.const 116565) "a") (data (i32.const 116568) "a") (data (i32.const 116571) "a") (data (i32.const 116574) "a") (data (i32.const 116577) "a") (data (i32.const 116580) "a") (data (i32.const 116583) "a") (data (i32.const 116586) "a") (data (i32.const 116589) "a") (data (i32.const 116592) "a") (data (i32.const 116595) "a") (data (i32.const 116598) "a") (data (i32.const 116601) "a") (data (i32.const 116604) "a") (data (i32.const 116607) "a") (data (i32.const 116610) "a") (data (i32.const 116613) "a") (data (i32.const 116616) "a") (data (i32.const 116619) "a") (data (i32.const 116622) "a") (data (i32.const 116625) "a") (data (i32.const 116628) "a") (data (i32.const 116631) "a") (data (i32.const 116634) "a") (data (i32.const 116637) "a") (data (i32.const 116640) "a") (data (i32.const 116643) "a") (data (i32.const 116646) "a") (data (i32.const 116649) "a") (data (i32.const 116652) "a") (data (i32.const 116655) "a") (data (i32.const 116658) "a") (data (i32.const 116661) "a") (data (i32.const 116664) "a") (data (i32.const 116667) "a") (data (i32.const 116670) "a") (data (i32.const 116673) "a") (data (i32.const 116676) "a") (data (i32.const 116679) "a") (data (i32.const 116682) "a") (data (i32.const 116685) "a") (data (i32.const 116688) "a") (data (i32.const 116691) "a") (data (i32.const 116694) "a") (data (i32.const 116697) "a") (data (i32.const 116700) "a") (data (i32.const 116703) "a") (data (i32.const 116706) "a") (data (i32.const 116709) "a") (data (i32.const 116712) "a") (data (i32.const 116715) "a") (data (i32.const 116718) "a") (data (i32.const 116721) "a") (data (i32.const 116724) "a") (data (i32.const 116727) "a") (data (i32.const 116730) "a") (data (i32.const 116733) "a") (data (i32.const 116736) "a") (data (i32.const 116739) "a") (data (i32.const 116742) "a") (data (i32.const 116745) "a") (data (i32.const 116748) "a") (data (i32.const 116751) "a") (data (i32.const 116754) "a") (data (i32.const 116757) "a") (data (i32.const 116760) "a") (data (i32.const 116763) "a") (data (i32.const 116766) "a") (data (i32.const 116769) "a") (data (i32.const 116772) "a") (data (i32.const 116775) "a") (data (i32.const 116778) "a") (data (i32.const 116781) "a") (data (i32.const 116784) "a") (data (i32.const 116787) "a") (data (i32.const 116790) "a") (data (i32.const 116793) "a") (data (i32.const 116796) "a") (data (i32.const 116799) "a") (data (i32.const 116802) "a") (data (i32.const 116805) "a") (data (i32.const 116808) "a") (data (i32.const 116811) "a") (data (i32.const 116814) "a") (data (i32.const 116817) "a") (data (i32.const 116820) "a") (data (i32.const 116823) "a") (data (i32.const 116826) "a") (data (i32.const 116829) "a") (data (i32.const 116832) "a") (data (i32.const 116835) "a") (data (i32.const 116838) "a") (data (i32.const 116841) "a") (data (i32.const 116844) "a") (data (i32.const 116847) "a") (data (i32.const 116850) "a") (data (i32.const 116853) "a") (data (i32.const 116856) "a") (data (i32.const 116859) "a") (data (i32.const 116862) "a") (data (i32.const 116865) "a") (data (i32.const 116868) "a") (data (i32.const 116871) "a") (data (i32.const 116874) "a") (data (i32.const 116877) "a") (data (i32.const 116880) "a") (data (i32.const 116883) "a") (data (i32.const 116886) "a") (data (i32.const 116889) "a") (data (i32.const 116892) "a") (data (i32.const 116895) "a") (data (i32.const 116898) "a") (data (i32.const 116901) "a") (data (i32.const 116904) "a") (data (i32.const 116907) "a") (data (i32.const 116910) "a") (data (i32.const 116913) "a") (data (i32.const 116916) "a") (data (i32.const 116919) "a") (data (i32.const 116922) "a") (data (i32.const 116925) "a") (data (i32.const 116928) "a") (data (i32.const 116931) "a") (data (i32.const 116934) "a") (data (i32.const 116937) "a") (data (i32.const 116940) "a") (data (i32.const 116943) "a") (data (i32.const 116946) "a") (data (i32.const 116949) "a") (data (i32.const 116952) "a") (data (i32.const 116955) "a") (data (i32.const 116958) "a") (data (i32.const 116961) "a") (data (i32.const 116964) "a") (data (i32.const 116967) "a") (data (i32.const 116970) "a") (data (i32.const 116973) "a") (data (i32.const 116976) "a") (data (i32.const 116979) "a") (data (i32.const 116982) "a") (data (i32.const 116985) "a") (data (i32.const 116988) "a") (data (i32.const 116991) "a") (data (i32.const 116994) "a") (data (i32.const 116997) "a") (data (i32.const 117000) "a") (data (i32.const 117003) "a") (data (i32.const 117006) "a") (data (i32.const 117009) "a") (data (i32.const 117012) "a") (data (i32.const 117015) "a") (data (i32.const 117018) "a") (data (i32.const 117021) "a") (data (i32.const 117024) "a") (data (i32.const 117027) "a") (data (i32.const 117030) "a") (data (i32.const 117033) "a") (data (i32.const 117036) "a") (data (i32.const 117039) "a") (data (i32.const 117042) "a") (data (i32.const 117045) "a") (data (i32.const 117048) "a") (data (i32.const 117051) "a") (data (i32.const 117054) "a") (data (i32.const 117057) "a") (data (i32.const 117060) "a") (data (i32.const 117063) "a") (data (i32.const 117066) "a") (data (i32.const 117069) "a") (data (i32.const 117072) "a") (data (i32.const 117075) "a") (data (i32.const 117078) "a") (data (i32.const 117081) "a") (data (i32.const 117084) "a") (data (i32.const 117087) "a") (data (i32.const 117090) "a") (data (i32.const 117093) "a") (data (i32.const 117096) "a") (data (i32.const 117099) "a") (data (i32.const 117102) "a") (data (i32.const 117105) "a") (data (i32.const 117108) "a") (data (i32.const 117111) "a") (data (i32.const 117114) "a") (data (i32.const 117117) "a") (data (i32.const 117120) "a") (data (i32.const 117123) "a") (data (i32.const 117126) "a") (data (i32.const 117129) "a") (data (i32.const 117132) "a") (data (i32.const 117135) "a") (data (i32.const 117138) "a") (data (i32.const 117141) "a") (data (i32.const 117144) "a") (data (i32.const 117147) "a") (data (i32.const 117150) "a") (data (i32.const 117153) "a") (data (i32.const 117156) "a") (data (i32.const 117159) "a") (data (i32.const 117162) "a") (data (i32.const 117165) "a") (data (i32.const 117168) "a") (data (i32.const 117171) "a") (data (i32.const 117174) "a") (data (i32.const 117177) "a") (data (i32.const 117180) "a") (data (i32.const 117183) "a") (data (i32.const 117186) "a") (data (i32.const 117189) "a") (data (i32.const 117192) "a") (data (i32.const 117195) "a") (data (i32.const 117198) "a") (data (i32.const 117201) "a") (data (i32.const 117204) "a") (data (i32.const 117207) "a") (data (i32.const 117210) "a") (data (i32.const 117213) "a") (data (i32.const 117216) "a") (data (i32.const 117219) "a") (data (i32.const 117222) "a") (data (i32.const 117225) "a") (data (i32.const 117228) "a") (data (i32.const 117231) "a") (data (i32.const 117234) "a") (data (i32.const 117237) "a") (data (i32.const 117240) "a") (data (i32.const 117243) "a") (data (i32.const 117246) "a") (data (i32.const 117249) "a") (data (i32.const 117252) "a") (data (i32.const 117255) "a") (data (i32.const 117258) "a") (data (i32.const 117261) "a") (data (i32.const 117264) "a") (data (i32.const 117267) "a") (data (i32.const 117270) "a") (data (i32.const 117273) "a") (data (i32.const 117276) "a") (data (i32.const 117279) "a") (data (i32.const 117282) "a") (data (i32.const 117285) "a") (data (i32.const 117288) "a") (data (i32.const 117291) "a") (data (i32.const 117294) "a") (data (i32.const 117297) "a") (data (i32.const 117300) "a") (data (i32.const 117303) "a") (data (i32.const 117306) "a") (data (i32.const 117309) "a") (data (i32.const 117312) "a") (data (i32.const 117315) "a") (data (i32.const 117318) "a") (data (i32.const 117321) "a") (data (i32.const 117324) "a") (data (i32.const 117327) "a") (data (i32.const 117330) "a") (data (i32.const 117333) "a") (data (i32.const 117336) "a") (data (i32.const 117339) "a") (data (i32.const 117342) "a") (data (i32.const 117345) "a") (data (i32.const 117348) "a") (data (i32.const 117351) "a") (data (i32.const 117354) "a") (data (i32.const 117357) "a") (data (i32.const 117360) "a") (data (i32.const 117363) "a") (data (i32.const 117366) "a") (data (i32.const 117369) "a") (data (i32.const 117372) "a") (data (i32.const 117375) "a") (data (i32.const 117378) "a") (data (i32.const 117381) "a") (data (i32.const 117384) "a") (data (i32.const 117387) "a") (data (i32.const 117390) "a") (data (i32.const 117393) "a") (data (i32.const 117396) "a") (data (i32.const 117399) "a") (data (i32.const 117402) "a") (data (i32.const 117405) "a") (data (i32.const 117408) "a") (data (i32.const 117411) "a") (data (i32.const 117414) "a") (data (i32.const 117417) "a") (data (i32.const 117420) "a") (data (i32.const 117423) "a") (data (i32.const 117426) "a") (data (i32.const 117429) "a") (data (i32.const 117432) "a") (data (i32.const 117435) "a") (data (i32.const 117438) "a") (data (i32.const 117441) "a") (data (i32.const 117444) "a") (data (i32.const 117447) "a") (data (i32.const 117450) "a") (data (i32.const 117453) "a") (data (i32.const 117456) "a") (data (i32.const 117459) "a") (data (i32.const 117462) "a") (data (i32.const 117465) "a") (data (i32.const 117468) "a") (data (i32.const 117471) "a") (data (i32.const 117474) "a") (data (i32.const 117477) "a") (data (i32.const 117480) "a") (data (i32.const 117483) "a") (data (i32.const 117486) "a") (data (i32.const 117489) "a") (data (i32.const 117492) "a") (data (i32.const 117495) "a") (data (i32.const 117498) "a") (data (i32.const 117501) "a") (data (i32.const 117504) "a") (data (i32.const 117507) "a") (data (i32.const 117510) "a") (data (i32.const 117513) "a") (data (i32.const 117516) "a") (data (i32.const 117519) "a") (data (i32.const 117522) "a") (data (i32.const 117525) "a") (data (i32.const 117528) "a") (data (i32.const 117531) "a") (data (i32.const 117534) "a") (data (i32.const 117537) "a") (data (i32.const 117540) "a") (data (i32.const 117543) "a") (data (i32.const 117546) "a") (data (i32.const 117549) "a") (data (i32.const 117552) "a") (data (i32.const 117555) "a") (data (i32.const 117558) "a") (data (i32.const 117561) "a") (data (i32.const 117564) "a") (data (i32.const 117567) "a") (data (i32.const 117570) "a") (data (i32.const 117573) "a") (data (i32.const 117576) "a") (data (i32.const 117579) "a") (data (i32.const 117582) "a") (data (i32.const 117585) "a") (data (i32.const 117588) "a") (data (i32.const 117591) "a") (data (i32.const 117594) "a") (data (i32.const 117597) "a") (data (i32.const 117600) "a") (data (i32.const 117603) "a") (data (i32.const 117606) "a") (data (i32.const 117609) "a") (data (i32.const 117612) "a") (data (i32.const 117615) "a") (data (i32.const 117618) "a") (data (i32.const 117621) "a") (data (i32.const 117624) "a") (data (i32.const 117627) "a") (data (i32.const 117630) "a") (data (i32.const 117633) "a") (data (i32.const 117636) "a") (data (i32.const 117639) "a") (data (i32.const 117642) "a") (data (i32.const 117645) "a") (data (i32.const 117648) "a") (data (i32.const 117651) "a") (data (i32.const 117654) "a") (data (i32.const 117657) "a") (data (i32.const 117660) "a") (data (i32.const 117663) "a") (data (i32.const 117666) "a") (data (i32.const 117669) "a") (data (i32.const 117672) "a") (data (i32.const 117675) "a") (data (i32.const 117678) "a") (data (i32.const 117681) "a") (data (i32.const 117684) "a") (data (i32.const 117687) "a") (data (i32.const 117690) "a") (data (i32.const 117693) "a") (data (i32.const 117696) "a") (data (i32.const 117699) "a") (data (i32.const 117702) "a") (data (i32.const 117705) "a") (data (i32.const 117708) "a") (data (i32.const 117711) "a") (data (i32.const 117714) "a") (data (i32.const 117717) "a") (data (i32.const 117720) "a") (data (i32.const 117723) "a") (data (i32.const 117726) "a") (data (i32.const 117729) "a") (data (i32.const 117732) "a") (data (i32.const 117735) "a") (data (i32.const 117738) "a") (data (i32.const 117741) "a") (data (i32.const 117744) "a") (data (i32.const 117747) "a") (data (i32.const 117750) "a") (data (i32.const 117753) "a") (data (i32.const 117756) "a") (data (i32.const 117759) "a") (data (i32.const 117762) "a") (data (i32.const 117765) "a") (data (i32.const 117768) "a") (data (i32.const 117771) "a") (data (i32.const 117774) "a") (data (i32.const 117777) "a") (data (i32.const 117780) "a") (data (i32.const 117783) "a") (data (i32.const 117786) "a") (data (i32.const 117789) "a") (data (i32.const 117792) "a") (data (i32.const 117795) "a") (data (i32.const 117798) "a") (data (i32.const 117801) "a") (data (i32.const 117804) "a") (data (i32.const 117807) "a") (data (i32.const 117810) "a") (data (i32.const 117813) "a") (data (i32.const 117816) "a") (data (i32.const 117819) "a") (data (i32.const 117822) "a") (data (i32.const 117825) "a") (data (i32.const 117828) "a") (data (i32.const 117831) "a") (data (i32.const 117834) "a") (data (i32.const 117837) "a") (data (i32.const 117840) "a") (data (i32.const 117843) "a") (data (i32.const 117846) "a") (data (i32.const 117849) "a") (data (i32.const 117852) "a") (data (i32.const 117855) "a") (data (i32.const 117858) "a") (data (i32.const 117861) "a") (data (i32.const 117864) "a") (data (i32.const 117867) "a") (data (i32.const 117870) "a") (data (i32.const 117873) "a") (data (i32.const 117876) "a") (data (i32.const 117879) "a") (data (i32.const 117882) "a") (data (i32.const 117885) "a") (data (i32.const 117888) "a") (data (i32.const 117891) "a") (data (i32.const 117894) "a") (data (i32.const 117897) "a") (data (i32.const 117900) "a") (data (i32.const 117903) "a") (data (i32.const 117906) "a") (data (i32.const 117909) "a") (data (i32.const 117912) "a") (data (i32.const 117915) "a") (data (i32.const 117918) "a") (data (i32.const 117921) "a") (data (i32.const 117924) "a") (data (i32.const 117927) "a") (data (i32.const 117930) "a") (data (i32.const 117933) "a") (data (i32.const 117936) "a") (data (i32.const 117939) "a") (data (i32.const 117942) "a") (data (i32.const 117945) "a") (data (i32.const 117948) "a") (data (i32.const 117951) "a") (data (i32.const 117954) "a") (data (i32.const 117957) "a") (data (i32.const 117960) "a") (data (i32.const 117963) "a") (data (i32.const 117966) "a") (data (i32.const 117969) "a") (data (i32.const 117972) "a") (data (i32.const 117975) "a") (data (i32.const 117978) "a") (data (i32.const 117981) "a") (data (i32.const 117984) "a") (data (i32.const 117987) "a") (data (i32.const 117990) "a") (data (i32.const 117993) "a") (data (i32.const 117996) "a") (data (i32.const 117999) "a") (data (i32.const 118002) "a") (data (i32.const 118005) "a") (data (i32.const 118008) "a") (data (i32.const 118011) "a") (data (i32.const 118014) "a") (data (i32.const 118017) "a") (data (i32.const 118020) "a") (data (i32.const 118023) "a") (data (i32.const 118026) "a") (data (i32.const 118029) "a") (data (i32.const 118032) "a") (data (i32.const 118035) "a") (data (i32.const 118038) "a") (data (i32.const 118041) "a") (data (i32.const 118044) "a") (data (i32.const 118047) "a") (data (i32.const 118050) "a") (data (i32.const 118053) "a") (data (i32.const 118056) "a") (data (i32.const 118059) "a") (data (i32.const 118062) "a") (data (i32.const 118065) "a") (data (i32.const 118068) "a") (data (i32.const 118071) "a") (data (i32.const 118074) "a") (data (i32.const 118077) "a") (data (i32.const 118080) "a") (data (i32.const 118083) "a") (data (i32.const 118086) "a") (data (i32.const 118089) "a") (data (i32.const 118092) "a") (data (i32.const 118095) "a") (data (i32.const 118098) "a") (data (i32.const 118101) "a") (data (i32.const 118104) "a") (data (i32.const 118107) "a") (data (i32.const 118110) "a") (data (i32.const 118113) "a") (data (i32.const 118116) "a") (data (i32.const 118119) "a") (data (i32.const 118122) "a") (data (i32.const 118125) "a") (data (i32.const 118128) "a") (data (i32.const 118131) "a") (data (i32.const 118134) "a") (data (i32.const 118137) "a") (data (i32.const 118140) "a") (data (i32.const 118143) "a") (data (i32.const 118146) "a") (data (i32.const 118149) "a") (data (i32.const 118152) "a") (data (i32.const 118155) "a") (data (i32.const 118158) "a") (data (i32.const 118161) "a") (data (i32.const 118164) "a") (data (i32.const 118167) "a") (data (i32.const 118170) "a") (data (i32.const 118173) "a") (data (i32.const 118176) "a") (data (i32.const 118179) "a") (data (i32.const 118182) "a") (data (i32.const 118185) "a") (data (i32.const 118188) "a") (data (i32.const 118191) "a") (data (i32.const 118194) "a") (data (i32.const 118197) "a") (data (i32.const 118200) "a") (data (i32.const 118203) "a") (data (i32.const 118206) "a") (data (i32.const 118209) "a") (data (i32.const 118212) "a") (data (i32.const 118215) "a") (data (i32.const 118218) "a") (data (i32.const 118221) "a") (data (i32.const 118224) "a") (data (i32.const 118227) "a") (data (i32.const 118230) "a") (data (i32.const 118233) "a") (data (i32.const 118236) "a") (data (i32.const 118239) "a") (data (i32.const 118242) "a") (data (i32.const 118245) "a") (data (i32.const 118248) "a") (data (i32.const 118251) "a") (data (i32.const 118254) "a") (data (i32.const 118257) "a") (data (i32.const 118260) "a") (data (i32.const 118263) "a") (data (i32.const 118266) "a") (data (i32.const 118269) "a") (data (i32.const 118272) "a") (data (i32.const 118275) "a") (data (i32.const 118278) "a") (data (i32.const 118281) "a") (data (i32.const 118284) "a") (data (i32.const 118287) "a") (data (i32.const 118290) "a") (data (i32.const 118293) "a") (data (i32.const 118296) "a") (data (i32.const 118299) "a") (data (i32.const 118302) "a") (data (i32.const 118305) "a") (data (i32.const 118308) "a") (data (i32.const 118311) "a") (data (i32.const 118314) "a") (data (i32.const 118317) "a") (data (i32.const 118320) "a") (data (i32.const 118323) "a") (data (i32.const 118326) "a") (data (i32.const 118329) "a") (data (i32.const 118332) "a") (data (i32.const 118335) "a") (data (i32.const 118338) "a") (data (i32.const 118341) "a") (data (i32.const 118344) "a") (data (i32.const 118347) "a") (data (i32.const 118350) "a") (data (i32.const 118353) "a") (data (i32.const 118356) "a") (data (i32.const 118359) "a") (data (i32.const 118362) "a") (data (i32.const 118365) "a") (data (i32.const 118368) "a") (data (i32.const 118371) "a") (data (i32.const 118374) "a") (data (i32.const 118377) "a") (data (i32.const 118380) "a") (data (i32.const 118383) "a") (data (i32.const 118386) "a") (data (i32.const 118389) "a") (data (i32.const 118392) "a") (data (i32.const 118395) "a") (data (i32.const 118398) "a") (data (i32.const 118401) "a") (data (i32.const 118404) "a") (data (i32.const 118407) "a") (data (i32.const 118410) "a") (data (i32.const 118413) "a") (data (i32.const 118416) "a") (data (i32.const 118419) "a") (data (i32.const 118422) "a") (data (i32.const 118425) "a") (data (i32.const 118428) "a") (data (i32.const 118431) "a") (data (i32.const 118434) "a") (data (i32.const 118437) "a") (data (i32.const 118440) "a") (data (i32.const 118443) "a") (data (i32.const 118446) "a") (data (i32.const 118449) "a") (data (i32.const 118452) "a") (data (i32.const 118455) "a") (data (i32.const 118458) "a") (data (i32.const 118461) "a") (data (i32.const 118464) "a") (data (i32.const 118467) "a") (data (i32.const 118470) "a") (data (i32.const 118473) "a") (data (i32.const 118476) "a") (data (i32.const 118479) "a") (data (i32.const 118482) "a") (data (i32.const 118485) "a") (data (i32.const 118488) "a") (data (i32.const 118491) "a") (data (i32.const 118494) "a") (data (i32.const 118497) "a") (data (i32.const 118500) "a") (data (i32.const 118503) "a") (data (i32.const 118506) "a") (data (i32.const 118509) "a") (data (i32.const 118512) "a") (data (i32.const 118515) "a") (data (i32.const 118518) "a") (data (i32.const 118521) "a") (data (i32.const 118524) "a") (data (i32.const 118527) "a") (data (i32.const 118530) "a") (data (i32.const 118533) "a") (data (i32.const 118536) "a") (data (i32.const 118539) "a") (data (i32.const 118542) "a") (data (i32.const 118545) "a") (data (i32.const 118548) "a") (data (i32.const 118551) "a") (data (i32.const 118554) "a") (data (i32.const 118557) "a") (data (i32.const 118560) "a") (data (i32.const 118563) "a") (data (i32.const 118566) "a") (data (i32.const 118569) "a") (data (i32.const 118572) "a") (data (i32.const 118575) "a") (data (i32.const 118578) "a") (data (i32.const 118581) "a") (data (i32.const 118584) "a") (data (i32.const 118587) "a") (data (i32.const 118590) "a") (data (i32.const 118593) "a") (data (i32.const 118596) "a") (data (i32.const 118599) "a") (data (i32.const 118602) "a") (data (i32.const 118605) "a") (data (i32.const 118608) "a") (data (i32.const 118611) "a") (data (i32.const 118614) "a") (data (i32.const 118617) "a") (data (i32.const 118620) "a") (data (i32.const 118623) "a") (data (i32.const 118626) "a") (data (i32.const 118629) "a") (data (i32.const 118632) "a") (data (i32.const 118635) "a") (data (i32.const 118638) "a") (data (i32.const 118641) "a") (data (i32.const 118644) "a") (data (i32.const 118647) "a") (data (i32.const 118650) "a") (data (i32.const 118653) "a") (data (i32.const 118656) "a") (data (i32.const 118659) "a") (data (i32.const 118662) "a") (data (i32.const 118665) "a") (data (i32.const 118668) "a") (data (i32.const 118671) "a") (data (i32.const 118674) "a") (data (i32.const 118677) "a") (data (i32.const 118680) "a") (data (i32.const 118683) "a") (data (i32.const 118686) "a") (data (i32.const 118689) "a") (data (i32.const 118692) "a") (data (i32.const 118695) "a") (data (i32.const 118698) "a") (data (i32.const 118701) "a") (data (i32.const 118704) "a") (data (i32.const 118707) "a") (data (i32.const 118710) "a") (data (i32.const 118713) "a") (data (i32.const 118716) "a") (data (i32.const 118719) "a") (data (i32.const 118722) "a") (data (i32.const 118725) "a") (data (i32.const 118728) "a") (data (i32.const 118731) "a") (data (i32.const 118734) "a") (data (i32.const 118737) "a") (data (i32.const 118740) "a") (data (i32.const 118743) "a") (data (i32.const 118746) "a") (data (i32.const 118749) "a") (data (i32.const 118752) "a") (data (i32.const 118755) "a") (data (i32.const 118758) "a") (data (i32.const 118761) "a") (data (i32.const 118764) "a") (data (i32.const 118767) "a") (data (i32.const 118770) "a") (data (i32.const 118773) "a") (data (i32.const 118776) "a") (data (i32.const 118779) "a") (data (i32.const 118782) "a") (data (i32.const 118785) "a") (data (i32.const 118788) "a") (data (i32.const 118791) "a") (data (i32.const 118794) "a") (data (i32.const 118797) "a") (data (i32.const 118800) "a") (data (i32.const 118803) "a") (data (i32.const 118806) "a") (data (i32.const 118809) "a") (data (i32.const 118812) "a") (data (i32.const 118815) "a") (data (i32.const 118818) "a") (data (i32.const 118821) "a") (data (i32.const 118824) "a") (data (i32.const 118827) "a") (data (i32.const 118830) "a") (data (i32.const 118833) "a") (data (i32.const 118836) "a") (data (i32.const 118839) "a") (data (i32.const 118842) "a") (data (i32.const 118845) "a") (data (i32.const 118848) "a") (data (i32.const 118851) "a") (data (i32.const 118854) "a") (data (i32.const 118857) "a") (data (i32.const 118860) "a") (data (i32.const 118863) "a") (data (i32.const 118866) "a") (data (i32.const 118869) "a") (data (i32.const 118872) "a") (data (i32.const 118875) "a") (data (i32.const 118878) "a") (data (i32.const 118881) "a") (data (i32.const 118884) "a") (data (i32.const 118887) "a") (data (i32.const 118890) "a") (data (i32.const 118893) "a") (data (i32.const 118896) "a") (data (i32.const 118899) "a") (data (i32.const 118902) "a") (data (i32.const 118905) "a") (data (i32.const 118908) "a") (data (i32.const 118911) "a") (data (i32.const 118914) "a") (data (i32.const 118917) "a") (data (i32.const 118920) "a") (data (i32.const 118923) "a") (data (i32.const 118926) "a") (data (i32.const 118929) "a") (data (i32.const 118932) "a") (data (i32.const 118935) "a") (data (i32.const 118938) "a") (data (i32.const 118941) "a") (data (i32.const 118944) "a") (data (i32.const 118947) "a") (data (i32.const 118950) "a") (data (i32.const 118953) "a") (data (i32.const 118956) "a") (data (i32.const 118959) "a") (data (i32.const 118962) "a") (data (i32.const 118965) "a") (data (i32.const 118968) "a") (data (i32.const 118971) "a") (data (i32.const 118974) "a") (data (i32.const 118977) "a") (data (i32.const 118980) "a") (data (i32.const 118983) "a") (data (i32.const 118986) "a") (data (i32.const 118989) "a") (data (i32.const 118992) "a") (data (i32.const 118995) "a") (data (i32.const 118998) "a") (data (i32.const 119001) "a") (data (i32.const 119004) "a") (data (i32.const 119007) "a") (data (i32.const 119010) "a") (data (i32.const 119013) "a") (data (i32.const 119016) "a") (data (i32.const 119019) "a") (data (i32.const 119022) "a") (data (i32.const 119025) "a") (data (i32.const 119028) "a") (data (i32.const 119031) "a") (data (i32.const 119034) "a") (data (i32.const 119037) "a") (data (i32.const 119040) "a") (data (i32.const 119043) "a") (data (i32.const 119046) "a") (data (i32.const 119049) "a") (data (i32.const 119052) "a") (data (i32.const 119055) "a") (data (i32.const 119058) "a") (data (i32.const 119061) "a") (data (i32.const 119064) "a") (data (i32.const 119067) "a") (data (i32.const 119070) "a") (data (i32.const 119073) "a") (data (i32.const 119076) "a") (data (i32.const 119079) "a") (data (i32.const 119082) "a") (data (i32.const 119085) "a") (data (i32.const 119088) "a") (data (i32.const 119091) "a") (data (i32.const 119094) "a") (data (i32.const 119097) "a") (data (i32.const 119100) "a") (data (i32.const 119103) "a") (data (i32.const 119106) "a") (data (i32.const 119109) "a") (data (i32.const 119112) "a") (data (i32.const 119115) "a") (data (i32.const 119118) "a") (data (i32.const 119121) "a") (data (i32.const 119124) "a") (data (i32.const 119127) "a") (data (i32.const 119130) "a") (data (i32.const 119133) "a") (data (i32.const 119136) "a") (data (i32.const 119139) "a") (data (i32.const 119142) "a") (data (i32.const 119145) "a") (data (i32.const 119148) "a") (data (i32.const 119151) "a") (data (i32.const 119154) "a") (data (i32.const 119157) "a") (data (i32.const 119160) "a") (data (i32.const 119163) "a") (data (i32.const 119166) "a") (data (i32.const 119169) "a") (data (i32.const 119172) "a") (data (i32.const 119175) "a") (data (i32.const 119178) "a") (data (i32.const 119181) "a") (data (i32.const 119184) "a") (data (i32.const 119187) "a") (data (i32.const 119190) "a") (data (i32.const 119193) "a") (data (i32.const 119196) "a") (data (i32.const 119199) "a") (data (i32.const 119202) "a") (data (i32.const 119205) "a") (data (i32.const 119208) "a") (data (i32.const 119211) "a") (data (i32.const 119214) "a") (data (i32.const 119217) "a") (data (i32.const 119220) "a") (data (i32.const 119223) "a") (data (i32.const 119226) "a") (data (i32.const 119229) "a") (data (i32.const 119232) "a") (data (i32.const 119235) "a") (data (i32.const 119238) "a") (data (i32.const 119241) "a") (data (i32.const 119244) "a") (data (i32.const 119247) "a") (data (i32.const 119250) "a") (data (i32.const 119253) "a") (data (i32.const 119256) "a") (data (i32.const 119259) "a") (data (i32.const 119262) "a") (data (i32.const 119265) "a") (data (i32.const 119268) "a") (data (i32.const 119271) "a") (data (i32.const 119274) "a") (data (i32.const 119277) "a") (data (i32.const 119280) "a") (data (i32.const 119283) "a") (data (i32.const 119286) "a") (data (i32.const 119289) "a") (data (i32.const 119292) "a") (data (i32.const 119295) "a") (data (i32.const 119298) "a") (data (i32.const 119301) "a") (data (i32.const 119304) "a") (data (i32.const 119307) "a") (data (i32.const 119310) "a") (data (i32.const 119313) "a") (data (i32.const 119316) "a") (data (i32.const 119319) "a") (data (i32.const 119322) "a") (data (i32.const 119325) "a") (data (i32.const 119328) "a") (data (i32.const 119331) "a") (data (i32.const 119334) "a") (data (i32.const 119337) "a") (data (i32.const 119340) "a") (data (i32.const 119343) "a") (data (i32.const 119346) "a") (data (i32.const 119349) "a") (data (i32.const 119352) "a") (data (i32.const 119355) "a") (data (i32.const 119358) "a") (data (i32.const 119361) "a") (data (i32.const 119364) "a") (data (i32.const 119367) "a") (data (i32.const 119370) "a") (data (i32.const 119373) "a") (data (i32.const 119376) "a") (data (i32.const 119379) "a") (data (i32.const 119382) "a") (data (i32.const 119385) "a") (data (i32.const 119388) "a") (data (i32.const 119391) "a") (data (i32.const 119394) "a") (data (i32.const 119397) "a") (data (i32.const 119400) "a") (data (i32.const 119403) "a") (data (i32.const 119406) "a") (data (i32.const 119409) "a") (data (i32.const 119412) "a") (data (i32.const 119415) "a") (data (i32.const 119418) "a") (data (i32.const 119421) "a") (data (i32.const 119424) "a") (data (i32.const 119427) "a") (data (i32.const 119430) "a") (data (i32.const 119433) "a") (data (i32.const 119436) "a") (data (i32.const 119439) "a") (data (i32.const 119442) "a") (data (i32.const 119445) "a") (data (i32.const 119448) "a") (data (i32.const 119451) "a") (data (i32.const 119454) "a") (data (i32.const 119457) "a") (data (i32.const 119460) "a") (data (i32.const 119463) "a") (data (i32.const 119466) "a") (data (i32.const 119469) "a") (data (i32.const 119472) "a") (data (i32.const 119475) "a") (data (i32.const 119478) "a") (data (i32.const 119481) "a") (data (i32.const 119484) "a") (data (i32.const 119487) "a") (data (i32.const 119490) "a") (data (i32.const 119493) "a") (data (i32.const 119496) "a") (data (i32.const 119499) "a") (data (i32.const 119502) "a") (data (i32.const 119505) "a") (data (i32.const 119508) "a") (data (i32.const 119511) "a") (data (i32.const 119514) "a") (data (i32.const 119517) "a") (data (i32.const 119520) "a") (data (i32.const 119523) "a") (data (i32.const 119526) "a") (data (i32.const 119529) "a") (data (i32.const 119532) "a") (data (i32.const 119535) "a") (data (i32.const 119538) "a") (data (i32.const 119541) "a") (data (i32.const 119544) "a") (data (i32.const 119547) "a") (data (i32.const 119550) "a") (data (i32.const 119553) "a") (data (i32.const 119556) "a") (data (i32.const 119559) "a") (data (i32.const 119562) "a") (data (i32.const 119565) "a") (data (i32.const 119568) "a") (data (i32.const 119571) "a") (data (i32.const 119574) "a") (data (i32.const 119577) "a") (data (i32.const 119580) "a") (data (i32.const 119583) "a") (data (i32.const 119586) "a") (data (i32.const 119589) "a") (data (i32.const 119592) "a") (data (i32.const 119595) "a") (data (i32.const 119598) "a") (data (i32.const 119601) "a") (data (i32.const 119604) "a") (data (i32.const 119607) "a") (data (i32.const 119610) "a") (data (i32.const 119613) "a") (data (i32.const 119616) "a") (data (i32.const 119619) "a") (data (i32.const 119622) "a") (data (i32.const 119625) "a") (data (i32.const 119628) "a") (data (i32.const 119631) "a") (data (i32.const 119634) "a") (data (i32.const 119637) "a") (data (i32.const 119640) "a") (data (i32.const 119643) "a") (data (i32.const 119646) "a") (data (i32.const 119649) "a") (data (i32.const 119652) "a") (data (i32.const 119655) "a") (data (i32.const 119658) "a") (data (i32.const 119661) "a") (data (i32.const 119664) "a") (data (i32.const 119667) "a") (data (i32.const 119670) "a") (data (i32.const 119673) "a") (data (i32.const 119676) "a") (data (i32.const 119679) "a") (data (i32.const 119682) "a") (data (i32.const 119685) "a") (data (i32.const 119688) "a") (data (i32.const 119691) "a") (data (i32.const 119694) "a") (data (i32.const 119697) "a") (data (i32.const 119700) "a") (data (i32.const 119703) "a") (data (i32.const 119706) "a") (data (i32.const 119709) "a") (data (i32.const 119712) "a") (data (i32.const 119715) "a") (data (i32.const 119718) "a") (data (i32.const 119721) "a") (data (i32.const 119724) "a") (data (i32.const 119727) "a") (data (i32.const 119730) "a") (data (i32.const 119733) "a") (data (i32.const 119736) "a") (data (i32.const 119739) "a") (data (i32.const 119742) "a") (data (i32.const 119745) "a") (data (i32.const 119748) "a") (data (i32.const 119751) "a") (data (i32.const 119754) "a") (data (i32.const 119757) "a") (data (i32.const 119760) "a") (data (i32.const 119763) "a") (data (i32.const 119766) "a") (data (i32.const 119769) "a") (data (i32.const 119772) "a") (data (i32.const 119775) "a") (data (i32.const 119778) "a") (data (i32.const 119781) "a") (data (i32.const 119784) "a") (data (i32.const 119787) "a") (data (i32.const 119790) "a") (data (i32.const 119793) "a") (data (i32.const 119796) "a") (data (i32.const 119799) "a") (data (i32.const 119802) "a") (data (i32.const 119805) "a") (data (i32.const 119808) "a") (data (i32.const 119811) "a") (data (i32.const 119814) "a") (data (i32.const 119817) "a") (data (i32.const 119820) "a") (data (i32.const 119823) "a") (data (i32.const 119826) "a") (data (i32.const 119829) "a") (data (i32.const 119832) "a") (data (i32.const 119835) "a") (data (i32.const 119838) "a") (data (i32.const 119841) "a") (data (i32.const 119844) "a") (data (i32.const 119847) "a") (data (i32.const 119850) "a") (data (i32.const 119853) "a") (data (i32.const 119856) "a") (data (i32.const 119859) "a") (data (i32.const 119862) "a") (data (i32.const 119865) "a") (data (i32.const 119868) "a") (data (i32.const 119871) "a") (data (i32.const 119874) "a") (data (i32.const 119877) "a") (data (i32.const 119880) "a") (data (i32.const 119883) "a") (data (i32.const 119886) "a") (data (i32.const 119889) "a") (data (i32.const 119892) "a") (data (i32.const 119895) "a") (data (i32.const 119898) "a") (data (i32.const 119901) "a") (data (i32.const 119904) "a") (data (i32.const 119907) "a") (data (i32.const 119910) "a") (data (i32.const 119913) "a") (data (i32.const 119916) "a") (data (i32.const 119919) "a") (data (i32.const 119922) "a") (data (i32.const 119925) "a") (data (i32.const 119928) "a") (data (i32.const 119931) "a") (data (i32.const 119934) "a") (data (i32.const 119937) "a") (data (i32.const 119940) "a") (data (i32.const 119943) "a") (data (i32.const 119946) "a") (data (i32.const 119949) "a") (data (i32.const 119952) "a") (data (i32.const 119955) "a") (data (i32.const 119958) "a") (data (i32.const 119961) "a") (data (i32.const 119964) "a") (data (i32.const 119967) "a") (data (i32.const 119970) "a") (data (i32.const 119973) "a") (data (i32.const 119976) "a") (data (i32.const 119979) "a") (data (i32.const 119982) "a") (data (i32.const 119985) "a") (data (i32.const 119988) "a") (data (i32.const 119991) "a") (data (i32.const 119994) "a") (data (i32.const 119997) "a") (data (i32.const 120000) "a") (data (i32.const 120003) "a") (data (i32.const 120006) "a") (data (i32.const 120009) "a") (data (i32.const 120012) "a") (data (i32.const 120015) "a") (data (i32.const 120018) "a") (data (i32.const 120021) "a") (data (i32.const 120024) "a") (data (i32.const 120027) "a") (data (i32.const 120030) "a") (data (i32.const 120033) "a") (data (i32.const 120036) "a") (data (i32.const 120039) "a") (data (i32.const 120042) "a") (data (i32.const 120045) "a") (data (i32.const 120048) "a") (data (i32.const 120051) "a") (data (i32.const 120054) "a") (data (i32.const 120057) "a") (data (i32.const 120060) "a") (data (i32.const 120063) "a") (data (i32.const 120066) "a") (data (i32.const 120069) "a") (data (i32.const 120072) "a") (data (i32.const 120075) "a") (data (i32.const 120078) "a") (data (i32.const 120081) "a") (data (i32.const 120084) "a") (data (i32.const 120087) "a") (data (i32.const 120090) "a") (data (i32.const 120093) "a") (data (i32.const 120096) "a") (data (i32.const 120099) "a") (data (i32.const 120102) "a") (data (i32.const 120105) "a") (data (i32.const 120108) "a") (data (i32.const 120111) "a") (data (i32.const 120114) "a") (data (i32.const 120117) "a") (data (i32.const 120120) "a") (data (i32.const 120123) "a") (data (i32.const 120126) "a") (data (i32.const 120129) "a") (data (i32.const 120132) "a") (data (i32.const 120135) "a") (data (i32.const 120138) "a") (data (i32.const 120141) "a") (data (i32.const 120144) "a") (data (i32.const 120147) "a") (data (i32.const 120150) "a") (data (i32.const 120153) "a") (data (i32.const 120156) "a") (data (i32.const 120159) "a") (data (i32.const 120162) "a") (data (i32.const 120165) "a") (data (i32.const 120168) "a") (data (i32.const 120171) "a") (data (i32.const 120174) "a") (data (i32.const 120177) "a") (data (i32.const 120180) "a") (data (i32.const 120183) "a") (data (i32.const 120186) "a") (data (i32.const 120189) "a") (data (i32.const 120192) "a") (data (i32.const 120195) "a") (data (i32.const 120198) "a") (data (i32.const 120201) "a") (data (i32.const 120204) "a") (data (i32.const 120207) "a") (data (i32.const 120210) "a") (data (i32.const 120213) "a") (data (i32.const 120216) "a") (data (i32.const 120219) "a") (data (i32.const 120222) "a") (data (i32.const 120225) "a") (data (i32.const 120228) "a") (data (i32.const 120231) "a") (data (i32.const 120234) "a") (data (i32.const 120237) "a") (data (i32.const 120240) "a") (data (i32.const 120243) "a") (data (i32.const 120246) "a") (data (i32.const 120249) "a") (data (i32.const 120252) "a") (data (i32.const 120255) "a") (data (i32.const 120258) "a") (data (i32.const 120261) "a") (data (i32.const 120264) "a") (data (i32.const 120267) "a") (data (i32.const 120270) "a") (data (i32.const 120273) "a") (data (i32.const 120276) "a") (data (i32.const 120279) "a") (data (i32.const 120282) "a") (data (i32.const 120285) "a") (data (i32.const 120288) "a") (data (i32.const 120291) "a") (data (i32.const 120294) "a") (data (i32.const 120297) "a") (data (i32.const 120300) "a") (data (i32.const 120303) "a") (data (i32.const 120306) "a") (data (i32.const 120309) "a") (data (i32.const 120312) "a") (data (i32.const 120315) "a") (data (i32.const 120318) "a") (data (i32.const 120321) "a") (data (i32.const 120324) "a") (data (i32.const 120327) "a") (data (i32.const 120330) "a") (data (i32.const 120333) "a") (data (i32.const 120336) "a") (data (i32.const 120339) "a") (data (i32.const 120342) "a") (data (i32.const 120345) "a") (data (i32.const 120348) "a") (data (i32.const 120351) "a") (data (i32.const 120354) "a") (data (i32.const 120357) "a") (data (i32.const 120360) "a") (data (i32.const 120363) "a") (data (i32.const 120366) "a") (data (i32.const 120369) "a") (data (i32.const 120372) "a") (data (i32.const 120375) "a") (data (i32.const 120378) "a") (data (i32.const 120381) "a") (data (i32.const 120384) "a") (data (i32.const 120387) "a") (data (i32.const 120390) "a") (data (i32.const 120393) "a") (data (i32.const 120396) "a") (data (i32.const 120399) "a") (data (i32.const 120402) "a") (data (i32.const 120405) "a") (data (i32.const 120408) "a") (data (i32.const 120411) "a") (data (i32.const 120414) "a") (data (i32.const 120417) "a") (data (i32.const 120420) "a") (data (i32.const 120423) "a") (data (i32.const 120426) "a") (data (i32.const 120429) "a") (data (i32.const 120432) "a") (data (i32.const 120435) "a") (data (i32.const 120438) "a") (data (i32.const 120441) "a") (data (i32.const 120444) "a") (data (i32.const 120447) "a") (data (i32.const 120450) "a") (data (i32.const 120453) "a") (data (i32.const 120456) "a") (data (i32.const 120459) "a") (data (i32.const 120462) "a") (data (i32.const 120465) "a") (data (i32.const 120468) "a") (data (i32.const 120471) "a") (data (i32.const 120474) "a") (data (i32.const 120477) "a") (data (i32.const 120480) "a") (data (i32.const 120483) "a") (data (i32.const 120486) "a") (data (i32.const 120489) "a") (data (i32.const 120492) "a") (data (i32.const 120495) "a") (data (i32.const 120498) "a") (data (i32.const 120501) "a") (data (i32.const 120504) "a") (data (i32.const 120507) "a") (data (i32.const 120510) "a") (data (i32.const 120513) "a") (data (i32.const 120516) "a") (data (i32.const 120519) "a") (data (i32.const 120522) "a") (data (i32.const 120525) "a") (data (i32.const 120528) "a") (data (i32.const 120531) "a") (data (i32.const 120534) "a") (data (i32.const 120537) "a") (data (i32.const 120540) "a") (data (i32.const 120543) "a") (data (i32.const 120546) "a") (data (i32.const 120549) "a") (data (i32.const 120552) "a") (data (i32.const 120555) "a") (data (i32.const 120558) "a") (data (i32.const 120561) "a") (data (i32.const 120564) "a") (data (i32.const 120567) "a") (data (i32.const 120570) "a") (data (i32.const 120573) "a") (data (i32.const 120576) "a") (data (i32.const 120579) "a") (data (i32.const 120582) "a") (data (i32.const 120585) "a") (data (i32.const 120588) "a") (data (i32.const 120591) "a") (data (i32.const 120594) "a") (data (i32.const 120597) "a") (data (i32.const 120600) "a") (data (i32.const 120603) "a") (data (i32.const 120606) "a") (data (i32.const 120609) "a") (data (i32.const 120612) "a") (data (i32.const 120615) "a") (data (i32.const 120618) "a") (data (i32.const 120621) "a") (data (i32.const 120624) "a") (data (i32.const 120627) "a") (data (i32.const 120630) "a") (data (i32.const 120633) "a") (data (i32.const 120636) "a") (data (i32.const 120639) "a") (data (i32.const 120642) "a") (data (i32.const 120645) "a") (data (i32.const 120648) "a") (data (i32.const 120651) "a") (data (i32.const 120654) "a") (data (i32.const 120657) "a") (data (i32.const 120660) "a") (data (i32.const 120663) "a") (data (i32.const 120666) "a") (data (i32.const 120669) "a") (data (i32.const 120672) "a") (data (i32.const 120675) "a") (data (i32.const 120678) "a") (data (i32.const 120681) "a") (data (i32.const 120684) "a") (data (i32.const 120687) "a") (data (i32.const 120690) "a") (data (i32.const 120693) "a") (data (i32.const 120696) "a") (data (i32.const 120699) "a") (data (i32.const 120702) "a") (data (i32.const 120705) "a") (data (i32.const 120708) "a") (data (i32.const 120711) "a") (data (i32.const 120714) "a") (data (i32.const 120717) "a") (data (i32.const 120720) "a") (data (i32.const 120723) "a") (data (i32.const 120726) "a") (data (i32.const 120729) "a") (data (i32.const 120732) "a") (data (i32.const 120735) "a") (data (i32.const 120738) "a") (data (i32.const 120741) "a") (data (i32.const 120744) "a") (data (i32.const 120747) "a") (data (i32.const 120750) "a") (data (i32.const 120753) "a") (data (i32.const 120756) "a") (data (i32.const 120759) "a") (data (i32.const 120762) "a") (data (i32.const 120765) "a") (data (i32.const 120768) "a") (data (i32.const 120771) "a") (data (i32.const 120774) "a") (data (i32.const 120777) "a") (data (i32.const 120780) "a") (data (i32.const 120783) "a") (data (i32.const 120786) "a") (data (i32.const 120789) "a") (data (i32.const 120792) "a") (data (i32.const 120795) "a") (data (i32.const 120798) "a") (data (i32.const 120801) "a") (data (i32.const 120804) "a") (data (i32.const 120807) "a") (data (i32.const 120810) "a") (data (i32.const 120813) "a") (data (i32.const 120816) "a") (data (i32.const 120819) "a") (data (i32.const 120822) "a") (data (i32.const 120825) "a") (data (i32.const 120828) "a") (data (i32.const 120831) "a") (data (i32.const 120834) "a") (data (i32.const 120837) "a") (data (i32.const 120840) "a") (data (i32.const 120843) "a") (data (i32.const 120846) "a") (data (i32.const 120849) "a") (data (i32.const 120852) "a") (data (i32.const 120855) "a") (data (i32.const 120858) "a") (data (i32.const 120861) "a") (data (i32.const 120864) "a") (data (i32.const 120867) "a") (data (i32.const 120870) "a") (data (i32.const 120873) "a") (data (i32.const 120876) "a") (data (i32.const 120879) "a") (data (i32.const 120882) "a") (data (i32.const 120885) "a") (data (i32.const 120888) "a") (data (i32.const 120891) "a") (data (i32.const 120894) "a") (data (i32.const 120897) "a") (data (i32.const 120900) "a") (data (i32.const 120903) "a") (data (i32.const 120906) "a") (data (i32.const 120909) "a") (data (i32.const 120912) "a") (data (i32.const 120915) "a") (data (i32.const 120918) "a") (data (i32.const 120921) "a") (data (i32.const 120924) "a") (data (i32.const 120927) "a") (data (i32.const 120930) "a") (data (i32.const 120933) "a") (data (i32.const 120936) "a") (data (i32.const 120939) "a") (data (i32.const 120942) "a") (data (i32.const 120945) "a") (data (i32.const 120948) "a") (data (i32.const 120951) "a") (data (i32.const 120954) "a") (data (i32.const 120957) "a") (data (i32.const 120960) "a") (data (i32.const 120963) "a") (data (i32.const 120966) "a") (data (i32.const 120969) "a") (data (i32.const 120972) "a") (data (i32.const 120975) "a") (data (i32.const 120978) "a") (data (i32.const 120981) "a") (data (i32.const 120984) "a") (data (i32.const 120987) "a") (data (i32.const 120990) "a") (data (i32.const 120993) "a") (data (i32.const 120996) "a") (data (i32.const 120999) "a") (data (i32.const 121002) "a") (data (i32.const 121005) "a") (data (i32.const 121008) "a") (data (i32.const 121011) "a") (data (i32.const 121014) "a") (data (i32.const 121017) "a") (data (i32.const 121020) "a") (data (i32.const 121023) "a") (data (i32.const 121026) "a") (data (i32.const 121029) "a") (data (i32.const 121032) "a") (data (i32.const 121035) "a") (data (i32.const 121038) "a") (data (i32.const 121041) "a") (data (i32.const 121044) "a") (data (i32.const 121047) "a") (data (i32.const 121050) "a") (data (i32.const 121053) "a") (data (i32.const 121056) "a") (data (i32.const 121059) "a") (data (i32.const 121062) "a") (data (i32.const 121065) "a") (data (i32.const 121068) "a") (data (i32.const 121071) "a") (data (i32.const 121074) "a") (data (i32.const 121077) "a") (data (i32.const 121080) "a") (data (i32.const 121083) "a") (data (i32.const 121086) "a") (data (i32.const 121089) "a") (data (i32.const 121092) "a") (data (i32.const 121095) "a") (data (i32.const 121098) "a") (data (i32.const 121101) "a") (data (i32.const 121104) "a") (data (i32.const 121107) "a") (data (i32.const 121110) "a") (data (i32.const 121113) "a") (data (i32.const 121116) "a") (data (i32.const 121119) "a") (data (i32.const 121122) "a") (data (i32.const 121125) "a") (data (i32.const 121128) "a") (data (i32.const 121131) "a") (data (i32.const 121134) "a") (data (i32.const 121137) "a") (data (i32.const 121140) "a") (data (i32.const 121143) "a") (data (i32.const 121146) "a") (data (i32.const 121149) "a") (data (i32.const 121152) "a") (data (i32.const 121155) "a") (data (i32.const 121158) "a") (data (i32.const 121161) "a") (data (i32.const 121164) "a") (data (i32.const 121167) "a") (data (i32.const 121170) "a") (data (i32.const 121173) "a") (data (i32.const 121176) "a") (data (i32.const 121179) "a") (data (i32.const 121182) "a") (data (i32.const 121185) "a") (data (i32.const 121188) "a") (data (i32.const 121191) "a") (data (i32.const 121194) "a") (data (i32.const 121197) "a") (data (i32.const 121200) "a") (data (i32.const 121203) "a") (data (i32.const 121206) "a") (data (i32.const 121209) "a") (data (i32.const 121212) "a") (data (i32.const 121215) "a") (data (i32.const 121218) "a") (data (i32.const 121221) "a") (data (i32.const 121224) "a") (data (i32.const 121227) "a") (data (i32.const 121230) "a") (data (i32.const 121233) "a") (data (i32.const 121236) "a") (data (i32.const 121239) "a") (data (i32.const 121242) "a") (data (i32.const 121245) "a") (data (i32.const 121248) "a") (data (i32.const 121251) "a") (data (i32.const 121254) "a") (data (i32.const 121257) "a") (data (i32.const 121260) "a") (data (i32.const 121263) "a") (data (i32.const 121266) "a") (data (i32.const 121269) "a") (data (i32.const 121272) "a") (data (i32.const 121275) "a") (data (i32.const 121278) "a") (data (i32.const 121281) "a") (data (i32.const 121284) "a") (data (i32.const 121287) "a") (data (i32.const 121290) "a") (data (i32.const 121293) "a") (data (i32.const 121296) "a") (data (i32.const 121299) "a") (data (i32.const 121302) "a") (data (i32.const 121305) "a") (data (i32.const 121308) "a") (data (i32.const 121311) "a") (data (i32.const 121314) "a") (data (i32.const 121317) "a") (data (i32.const 121320) "a") (data (i32.const 121323) "a") (data (i32.const 121326) "a") (data (i32.const 121329) "a") (data (i32.const 121332) "a") (data (i32.const 121335) "a") (data (i32.const 121338) "a") (data (i32.const 121341) "a") (data (i32.const 121344) "a") (data (i32.const 121347) "a") (data (i32.const 121350) "a") (data (i32.const 121353) "a") (data (i32.const 121356) "a") (data (i32.const 121359) "a") (data (i32.const 121362) "a") (data (i32.const 121365) "a") (data (i32.const 121368) "a") (data (i32.const 121371) "a") (data (i32.const 121374) "a") (data (i32.const 121377) "a") (data (i32.const 121380) "a") (data (i32.const 121383) "a") (data (i32.const 121386) "a") (data (i32.const 121389) "a") (data (i32.const 121392) "a") (data (i32.const 121395) "a") (data (i32.const 121398) "a") (data (i32.const 121401) "a") (data (i32.const 121404) "a") (data (i32.const 121407) "a") (data (i32.const 121410) "a") (data (i32.const 121413) "a") (data (i32.const 121416) "a") (data (i32.const 121419) "a") (data (i32.const 121422) "a") (data (i32.const 121425) "a") (data (i32.const 121428) "a") (data (i32.const 121431) "a") (data (i32.const 121434) "a") (data (i32.const 121437) "a") (data (i32.const 121440) "a") (data (i32.const 121443) "a") (data (i32.const 121446) "a") (data (i32.const 121449) "a") (data (i32.const 121452) "a") (data (i32.const 121455) "a") (data (i32.const 121458) "a") (data (i32.const 121461) "a") (data (i32.const 121464) "a") (data (i32.const 121467) "a") (data (i32.const 121470) "a") (data (i32.const 121473) "a") (data (i32.const 121476) "a") (data (i32.const 121479) "a") (data (i32.const 121482) "a") (data (i32.const 121485) "a") (data (i32.const 121488) "a") (data (i32.const 121491) "a") (data (i32.const 121494) "a") (data (i32.const 121497) "a") (data (i32.const 121500) "a") (data (i32.const 121503) "a") (data (i32.const 121506) "a") (data (i32.const 121509) "a") (data (i32.const 121512) "a") (data (i32.const 121515) "a") (data (i32.const 121518) "a") (data (i32.const 121521) "a") (data (i32.const 121524) "a") (data (i32.const 121527) "a") (data (i32.const 121530) "a") (data (i32.const 121533) "a") (data (i32.const 121536) "a") (data (i32.const 121539) "a") (data (i32.const 121542) "a") (data (i32.const 121545) "a") (data (i32.const 121548) "a") (data (i32.const 121551) "a") (data (i32.const 121554) "a") (data (i32.const 121557) "a") (data (i32.const 121560) "a") (data (i32.const 121563) "a") (data (i32.const 121566) "a") (data (i32.const 121569) "a") (data (i32.const 121572) "a") (data (i32.const 121575) "a") (data (i32.const 121578) "a") (data (i32.const 121581) "a") (data (i32.const 121584) "a") (data (i32.const 121587) "a") (data (i32.const 121590) "a") (data (i32.const 121593) "a") (data (i32.const 121596) "a") (data (i32.const 121599) "a") (data (i32.const 121602) "a") (data (i32.const 121605) "a") (data (i32.const 121608) "a") (data (i32.const 121611) "a") (data (i32.const 121614) "a") (data (i32.const 121617) "a") (data (i32.const 121620) "a") (data (i32.const 121623) "a") (data (i32.const 121626) "a") (data (i32.const 121629) "a") (data (i32.const 121632) "a") (data (i32.const 121635) "a") (data (i32.const 121638) "a") (data (i32.const 121641) "a") (data (i32.const 121644) "a") (data (i32.const 121647) "a") (data (i32.const 121650) "a") (data (i32.const 121653) "a") (data (i32.const 121656) "a") (data (i32.const 121659) "a") (data (i32.const 121662) "a") (data (i32.const 121665) "a") (data (i32.const 121668) "a") (data (i32.const 121671) "a") (data (i32.const 121674) "a") (data (i32.const 121677) "a") (data (i32.const 121680) "a") (data (i32.const 121683) "a") (data (i32.const 121686) "a") (data (i32.const 121689) "a") (data (i32.const 121692) "a") (data (i32.const 121695) "a") (data (i32.const 121698) "a") (data (i32.const 121701) "a") (data (i32.const 121704) "a") (data (i32.const 121707) "a") (data (i32.const 121710) "a") (data (i32.const 121713) "a") (data (i32.const 121716) "a") (data (i32.const 121719) "a") (data (i32.const 121722) "a") (data (i32.const 121725) "a") (data (i32.const 121728) "a") (data (i32.const 121731) "a") (data (i32.const 121734) "a") (data (i32.const 121737) "a") (data (i32.const 121740) "a") (data (i32.const 121743) "a") (data (i32.const 121746) "a") (data (i32.const 121749) "a") (data (i32.const 121752) "a") (data (i32.const 121755) "a") (data (i32.const 121758) "a") (data (i32.const 121761) "a") (data (i32.const 121764) "a") (data (i32.const 121767) "a") (data (i32.const 121770) "a") (data (i32.const 121773) "a") (data (i32.const 121776) "a") (data (i32.const 121779) "a") (data (i32.const 121782) "a") (data (i32.const 121785) "a") (data (i32.const 121788) "a") (data (i32.const 121791) "a") (data (i32.const 121794) "a") (data (i32.const 121797) "a") (data (i32.const 121800) "a") (data (i32.const 121803) "a") (data (i32.const 121806) "a") (data (i32.const 121809) "a") (data (i32.const 121812) "a") (data (i32.const 121815) "a") (data (i32.const 121818) "a") (data (i32.const 121821) "a") (data (i32.const 121824) "a") (data (i32.const 121827) "a") (data (i32.const 121830) "a") (data (i32.const 121833) "a") (data (i32.const 121836) "a") (data (i32.const 121839) "a") (data (i32.const 121842) "a") (data (i32.const 121845) "a") (data (i32.const 121848) "a") (data (i32.const 121851) "a") (data (i32.const 121854) "a") (data (i32.const 121857) "a") (data (i32.const 121860) "a") (data (i32.const 121863) "a") (data (i32.const 121866) "a") (data (i32.const 121869) "a") (data (i32.const 121872) "a") (data (i32.const 121875) "a") (data (i32.const 121878) "a") (data (i32.const 121881) "a") (data (i32.const 121884) "a") (data (i32.const 121887) "a") (data (i32.const 121890) "a") (data (i32.const 121893) "a") (data (i32.const 121896) "a") (data (i32.const 121899) "a") (data (i32.const 121902) "a") (data (i32.const 121905) "a") (data (i32.const 121908) "a") (data (i32.const 121911) "a") (data (i32.const 121914) "a") (data (i32.const 121917) "a") (data (i32.const 121920) "a") (data (i32.const 121923) "a") (data (i32.const 121926) "a") (data (i32.const 121929) "a") (data (i32.const 121932) "a") (data (i32.const 121935) "a") (data (i32.const 121938) "a") (data (i32.const 121941) "a") (data (i32.const 121944) "a") (data (i32.const 121947) "a") (data (i32.const 121950) "a") (data (i32.const 121953) "a") (data (i32.const 121956) "a") (data (i32.const 121959) "a") (data (i32.const 121962) "a") (data (i32.const 121965) "a") (data (i32.const 121968) "a") (data (i32.const 121971) "a") (data (i32.const 121974) "a") (data (i32.const 121977) "a") (data (i32.const 121980) "a") (data (i32.const 121983) "a") (data (i32.const 121986) "a") (data (i32.const 121989) "a") (data (i32.const 121992) "a") (data (i32.const 121995) "a") (data (i32.const 121998) "a") (data (i32.const 122001) "a") (data (i32.const 122004) "a") (data (i32.const 122007) "a") (data (i32.const 122010) "a") (data (i32.const 122013) "a") (data (i32.const 122016) "a") (data (i32.const 122019) "a") (data (i32.const 122022) "a") (data (i32.const 122025) "a") (data (i32.const 122028) "a") (data (i32.const 122031) "a") (data (i32.const 122034) "a") (data (i32.const 122037) "a") (data (i32.const 122040) "a") (data (i32.const 122043) "a") (data (i32.const 122046) "a") (data (i32.const 122049) "a") (data (i32.const 122052) "a") (data (i32.const 122055) "a") (data (i32.const 122058) "a") (data (i32.const 122061) "a") (data (i32.const 122064) "a") (data (i32.const 122067) "a") (data (i32.const 122070) "a") (data (i32.const 122073) "a") (data (i32.const 122076) "a") (data (i32.const 122079) "a") (data (i32.const 122082) "a") (data (i32.const 122085) "a") (data (i32.const 122088) "a") (data (i32.const 122091) "a") (data (i32.const 122094) "a") (data (i32.const 122097) "a") (data (i32.const 122100) "a") (data (i32.const 122103) "a") (data (i32.const 122106) "a") (data (i32.const 122109) "a") (data (i32.const 122112) "a") (data (i32.const 122115) "a") (data (i32.const 122118) "a") (data (i32.const 122121) "a") (data (i32.const 122124) "a") (data (i32.const 122127) "a") (data (i32.const 122130) "a") (data (i32.const 122133) "a") (data (i32.const 122136) "a") (data (i32.const 122139) "a") (data (i32.const 122142) "a") (data (i32.const 122145) "a") (data (i32.const 122148) "a") (data (i32.const 122151) "a") (data (i32.const 122154) "a") (data (i32.const 122157) "a") (data (i32.const 122160) "a") (data (i32.const 122163) "a") (data (i32.const 122166) "a") (data (i32.const 122169) "a") (data (i32.const 122172) "a") (data (i32.const 122175) "a") (data (i32.const 122178) "a") (data (i32.const 122181) "a") (data (i32.const 122184) "a") (data (i32.const 122187) "a") (data (i32.const 122190) "a") (data (i32.const 122193) "a") (data (i32.const 122196) "a") (data (i32.const 122199) "a") (data (i32.const 122202) "a") (data (i32.const 122205) "a") (data (i32.const 122208) "a") (data (i32.const 122211) "a") (data (i32.const 122214) "a") (data (i32.const 122217) "a") (data (i32.const 122220) "a") (data (i32.const 122223) "a") (data (i32.const 122226) "a") (data (i32.const 122229) "a") (data (i32.const 122232) "a") (data (i32.const 122235) "a") (data (i32.const 122238) "a") (data (i32.const 122241) "a") (data (i32.const 122244) "a") (data (i32.const 122247) "a") (data (i32.const 122250) "a") (data (i32.const 122253) "a") (data (i32.const 122256) "a") (data (i32.const 122259) "a") (data (i32.const 122262) "a") (data (i32.const 122265) "a") (data (i32.const 122268) "a") (data (i32.const 122271) "a") (data (i32.const 122274) "a") (data (i32.const 122277) "a") (data (i32.const 122280) "a") (data (i32.const 122283) "a") (data (i32.const 122286) "a") (data (i32.const 122289) "a") (data (i32.const 122292) "a") (data (i32.const 122295) "a") (data (i32.const 122298) "a") (data (i32.const 122301) "a") (data (i32.const 122304) "a") (data (i32.const 122307) "a") (data (i32.const 122310) "a") (data (i32.const 122313) "a") (data (i32.const 122316) "a") (data (i32.const 122319) "a") (data (i32.const 122322) "a") (data (i32.const 122325) "a") (data (i32.const 122328) "a") (data (i32.const 122331) "a") (data (i32.const 122334) "a") (data (i32.const 122337) "a") (data (i32.const 122340) "a") (data (i32.const 122343) "a") (data (i32.const 122346) "a") (data (i32.const 122349) "a") (data (i32.const 122352) "a") (data (i32.const 122355) "a") (data (i32.const 122358) "a") (data (i32.const 122361) "a") (data (i32.const 122364) "a") (data (i32.const 122367) "a") (data (i32.const 122370) "a") (data (i32.const 122373) "a") (data (i32.const 122376) "a") (data (i32.const 122379) "a") (data (i32.const 122382) "a") (data (i32.const 122385) "a") (data (i32.const 122388) "a") (data (i32.const 122391) "a") (data (i32.const 122394) "a") (data (i32.const 122397) "a") (data (i32.const 122400) "a") (data (i32.const 122403) "a") (data (i32.const 122406) "a") (data (i32.const 122409) "a") (data (i32.const 122412) "a") (data (i32.const 122415) "a") (data (i32.const 122418) "a") (data (i32.const 122421) "a") (data (i32.const 122424) "a") (data (i32.const 122427) "a") (data (i32.const 122430) "a") (data (i32.const 122433) "a") (data (i32.const 122436) "a") (data (i32.const 122439) "a") (data (i32.const 122442) "a") (data (i32.const 122445) "a") (data (i32.const 122448) "a") (data (i32.const 122451) "a") (data (i32.const 122454) "a") (data (i32.const 122457) "a") (data (i32.const 122460) "a") (data (i32.const 122463) "a") (data (i32.const 122466) "a") (data (i32.const 122469) "a") (data (i32.const 122472) "a") (data (i32.const 122475) "a") (data (i32.const 122478) "a") (data (i32.const 122481) "a") (data (i32.const 122484) "a") (data (i32.const 122487) "a") (data (i32.const 122490) "a") (data (i32.const 122493) "a") (data (i32.const 122496) "a") (data (i32.const 122499) "a") (data (i32.const 122502) "a") (data (i32.const 122505) "a") (data (i32.const 122508) "a") (data (i32.const 122511) "a") (data (i32.const 122514) "a") (data (i32.const 122517) "a") (data (i32.const 122520) "a") (data (i32.const 122523) "a") (data (i32.const 122526) "a") (data (i32.const 122529) "a") (data (i32.const 122532) "a") (data (i32.const 122535) "a") (data (i32.const 122538) "a") (data (i32.const 122541) "a") (data (i32.const 122544) "a") (data (i32.const 122547) "a") (data (i32.const 122550) "a") (data (i32.const 122553) "a") (data (i32.const 122556) "a") (data (i32.const 122559) "a") (data (i32.const 122562) "a") (data (i32.const 122565) "a") (data (i32.const 122568) "a") (data (i32.const 122571) "a") (data (i32.const 122574) "a") (data (i32.const 122577) "a") (data (i32.const 122580) "a") (data (i32.const 122583) "a") (data (i32.const 122586) "a") (data (i32.const 122589) "a") (data (i32.const 122592) "a") (data (i32.const 122595) "a") (data (i32.const 122598) "a") (data (i32.const 122601) "a") (data (i32.const 122604) "a") (data (i32.const 122607) "a") (data (i32.const 122610) "a") (data (i32.const 122613) "a") (data (i32.const 122616) "a") (data (i32.const 122619) "a") (data (i32.const 122622) "a") (data (i32.const 122625) "a") (data (i32.const 122628) "a") (data (i32.const 122631) "a") (data (i32.const 122634) "a") (data (i32.const 122637) "a") (data (i32.const 122640) "a") (data (i32.const 122643) "a") (data (i32.const 122646) "a") (data (i32.const 122649) "a") (data (i32.const 122652) "a") (data (i32.const 122655) "a") (data (i32.const 122658) "a") (data (i32.const 122661) "a") (data (i32.const 122664) "a") (data (i32.const 122667) "a") (data (i32.const 122670) "a") (data (i32.const 122673) "a") (data (i32.const 122676) "a") (data (i32.const 122679) "a") (data (i32.const 122682) "a") (data (i32.const 122685) "a") (data (i32.const 122688) "a") (data (i32.const 122691) "a") (data (i32.const 122694) "a") (data (i32.const 122697) "a") (data (i32.const 122700) "a") (data (i32.const 122703) "a") (data (i32.const 122706) "a") (data (i32.const 122709) "a") (data (i32.const 122712) "a") (data (i32.const 122715) "a") (data (i32.const 122718) "a") (data (i32.const 122721) "a") (data (i32.const 122724) "a") (data (i32.const 122727) "a") (data (i32.const 122730) "a") (data (i32.const 122733) "a") (data (i32.const 122736) "a") (data (i32.const 122739) "a") (data (i32.const 122742) "a") (data (i32.const 122745) "a") (data (i32.const 122748) "a") (data (i32.const 122751) "a") (data (i32.const 122754) "a") (data (i32.const 122757) "a") (data (i32.const 122760) "a") (data (i32.const 122763) "a") (data (i32.const 122766) "a") (data (i32.const 122769) "a") (data (i32.const 122772) "a") (data (i32.const 122775) "a") (data (i32.const 122778) "a") (data (i32.const 122781) "a") (data (i32.const 122784) "a") (data (i32.const 122787) "a") (data (i32.const 122790) "a") (data (i32.const 122793) "a") (data (i32.const 122796) "a") (data (i32.const 122799) "a") (data (i32.const 122802) "a") (data (i32.const 122805) "a") (data (i32.const 122808) "a") (data (i32.const 122811) "a") (data (i32.const 122814) "a") (data (i32.const 122817) "a") (data (i32.const 122820) "a") (data (i32.const 122823) "a") (data (i32.const 122826) "a") (data (i32.const 122829) "a") (data (i32.const 122832) "a") (data (i32.const 122835) "a") (data (i32.const 122838) "a") (data (i32.const 122841) "a") (data (i32.const 122844) "a") (data (i32.const 122847) "a") (data (i32.const 122850) "a") (data (i32.const 122853) "a") (data (i32.const 122856) "a") (data (i32.const 122859) "a") (data (i32.const 122862) "a") (data (i32.const 122865) "a") (data (i32.const 122868) "a") (data (i32.const 122871) "a") (data (i32.const 122874) "a") (data (i32.const 122877) "a") (data (i32.const 122880) "a") (data (i32.const 122883) "a") (data (i32.const 122886) "a") (data (i32.const 122889) "a") (data (i32.const 122892) "a") (data (i32.const 122895) "a") (data (i32.const 122898) "a") (data (i32.const 122901) "a") (data (i32.const 122904) "a") (data (i32.const 122907) "a") (data (i32.const 122910) "a") (data (i32.const 122913) "a") (data (i32.const 122916) "a") (data (i32.const 122919) "a") (data (i32.const 122922) "a") (data (i32.const 122925) "a") (data (i32.const 122928) "a") (data (i32.const 122931) "a") (data (i32.const 122934) "a") (data (i32.const 122937) "a") (data (i32.const 122940) "a") (data (i32.const 122943) "a") (data (i32.const 122946) "a") (data (i32.const 122949) "a") (data (i32.const 122952) "a") (data (i32.const 122955) "a") (data (i32.const 122958) "a") (data (i32.const 122961) "a") (data (i32.const 122964) "a") (data (i32.const 122967) "a") (data (i32.const 122970) "a") (data (i32.const 122973) "a") (data (i32.const 122976) "a") (data (i32.const 122979) "a") (data (i32.const 122982) "a") (data (i32.const 122985) "a") (data (i32.const 122988) "a") (data (i32.const 122991) "a") (data (i32.const 122994) "a") (data (i32.const 122997) "a") (data (i32.const 123000) "a") (data (i32.const 123003) "a") (data (i32.const 123006) "a") (data (i32.const 123009) "a") (data (i32.const 123012) "a") (data (i32.const 123015) "a") (data (i32.const 123018) "a") (data (i32.const 123021) "a") (data (i32.const 123024) "a") (data (i32.const 123027) "a") (data (i32.const 123030) "a") (data (i32.const 123033) "a") (data (i32.const 123036) "a") (data (i32.const 123039) "a") (data (i32.const 123042) "a") (data (i32.const 123045) "a") (data (i32.const 123048) "a") (data (i32.const 123051) "a") (data (i32.const 123054) "a") (data (i32.const 123057) "a") (data (i32.const 123060) "a") (data (i32.const 123063) "a") (data (i32.const 123066) "a") (data (i32.const 123069) "a") (data (i32.const 123072) "a") (data (i32.const 123075) "a") (data (i32.const 123078) "a") (data (i32.const 123081) "a") (data (i32.const 123084) "a") (data (i32.const 123087) "a") (data (i32.const 123090) "a") (data (i32.const 123093) "a") (data (i32.const 123096) "a") (data (i32.const 123099) "a") (data (i32.const 123102) "a") (data (i32.const 123105) "a") (data (i32.const 123108) "a") (data (i32.const 123111) "a") (data (i32.const 123114) "a") (data (i32.const 123117) "a") (data (i32.const 123120) "a") (data (i32.const 123123) "a") (data (i32.const 123126) "a") (data (i32.const 123129) "a") (data (i32.const 123132) "a") (data (i32.const 123135) "a") (data (i32.const 123138) "a") (data (i32.const 123141) "a") (data (i32.const 123144) "a") (data (i32.const 123147) "a") (data (i32.const 123150) "a") (data (i32.const 123153) "a") (data (i32.const 123156) "a") (data (i32.const 123159) "a") (data (i32.const 123162) "a") (data (i32.const 123165) "a") (data (i32.const 123168) "a") (data (i32.const 123171) "a") (data (i32.const 123174) "a") (data (i32.const 123177) "a") (data (i32.const 123180) "a") (data (i32.const 123183) "a") (data (i32.const 123186) "a") (data (i32.const 123189) "a") (data (i32.const 123192) "a") (data (i32.const 123195) "a") (data (i32.const 123198) "a") (data (i32.const 123201) "a") (data (i32.const 123204) "a") (data (i32.const 123207) "a") (data (i32.const 123210) "a") (data (i32.const 123213) "a") (data (i32.const 123216) "a") (data (i32.const 123219) "a") (data (i32.const 123222) "a") (data (i32.const 123225) "a") (data (i32.const 123228) "a") (data (i32.const 123231) "a") (data (i32.const 123234) "a") (data (i32.const 123237) "a") (data (i32.const 123240) "a") (data (i32.const 123243) "a") (data (i32.const 123246) "a") (data (i32.const 123249) "a") (data (i32.const 123252) "a") (data (i32.const 123255) "a") (data (i32.const 123258) "a") (data (i32.const 123261) "a") (data (i32.const 123264) "a") (data (i32.const 123267) "a") (data (i32.const 123270) "a") (data (i32.const 123273) "a") (data (i32.const 123276) "a") (data (i32.const 123279) "a") (data (i32.const 123282) "a") (data (i32.const 123285) "a") (data (i32.const 123288) "a") (data (i32.const 123291) "a") (data (i32.const 123294) "a") (data (i32.const 123297) "a") (data (i32.const 123300) "a") (data (i32.const 123303) "a") (data (i32.const 123306) "a") (data (i32.const 123309) "a") (data (i32.const 123312) "a") (data (i32.const 123315) "a") (data (i32.const 123318) "a") (data (i32.const 123321) "a") (data (i32.const 123324) "a") (data (i32.const 123327) "a") (data (i32.const 123330) "a") (data (i32.const 123333) "a") (data (i32.const 123336) "a") (data (i32.const 123339) "a") (data (i32.const 123342) "a") (data (i32.const 123345) "a") (data (i32.const 123348) "a") (data (i32.const 123351) "a") (data (i32.const 123354) "a") (data (i32.const 123357) "a") (data (i32.const 123360) "a") (data (i32.const 123363) "a") (data (i32.const 123366) "a") (data (i32.const 123369) "a") (data (i32.const 123372) "a") (data (i32.const 123375) "a") (data (i32.const 123378) "a") (data (i32.const 123381) "a") (data (i32.const 123384) "a") (data (i32.const 123387) "a") (data (i32.const 123390) "a") (data (i32.const 123393) "a") (data (i32.const 123396) "a") (data (i32.const 123399) "a") (data (i32.const 123402) "a") (data (i32.const 123405) "a") (data (i32.const 123408) "a") (data (i32.const 123411) "a") (data (i32.const 123414) "a") (data (i32.const 123417) "a") (data (i32.const 123420) "a") (data (i32.const 123423) "a") (data (i32.const 123426) "a") (data (i32.const 123429) "a") (data (i32.const 123432) "a") (data (i32.const 123435) "a") (data (i32.const 123438) "a") (data (i32.const 123441) "a") (data (i32.const 123444) "a") (data (i32.const 123447) "a") (data (i32.const 123450) "a") (data (i32.const 123453) "a") (data (i32.const 123456) "a") (data (i32.const 123459) "a") (data (i32.const 123462) "a") (data (i32.const 123465) "a") (data (i32.const 123468) "a") (data (i32.const 123471) "a") (data (i32.const 123474) "a") (data (i32.const 123477) "a") (data (i32.const 123480) "a") (data (i32.const 123483) "a") (data (i32.const 123486) "a") (data (i32.const 123489) "a") (data (i32.const 123492) "a") (data (i32.const 123495) "a") (data (i32.const 123498) "a") (data (i32.const 123501) "a") (data (i32.const 123504) "a") (data (i32.const 123507) "a") (data (i32.const 123510) "a") (data (i32.const 123513) "a") (data (i32.const 123516) "a") (data (i32.const 123519) "a") (data (i32.const 123522) "a") (data (i32.const 123525) "a") (data (i32.const 123528) "a") (data (i32.const 123531) "a") (data (i32.const 123534) "a") (data (i32.const 123537) "a") (data (i32.const 123540) "a") (data (i32.const 123543) "a") (data (i32.const 123546) "a") (data (i32.const 123549) "a") (data (i32.const 123552) "a") (data (i32.const 123555) "a") (data (i32.const 123558) "a") (data (i32.const 123561) "a") (data (i32.const 123564) "a") (data (i32.const 123567) "a") (data (i32.const 123570) "a") (data (i32.const 123573) "a") (data (i32.const 123576) "a") (data (i32.const 123579) "a") (data (i32.const 123582) "a") (data (i32.const 123585) "a") (data (i32.const 123588) "a") (data (i32.const 123591) "a") (data (i32.const 123594) "a") (data (i32.const 123597) "a") (data (i32.const 123600) "a") (data (i32.const 123603) "a") (data (i32.const 123606) "a") (data (i32.const 123609) "a") (data (i32.const 123612) "a") (data (i32.const 123615) "a") (data (i32.const 123618) "a") (data (i32.const 123621) "a") (data (i32.const 123624) "a") (data (i32.const 123627) "a") (data (i32.const 123630) "a") (data (i32.const 123633) "a") (data (i32.const 123636) "a") (data (i32.const 123639) "a") (data (i32.const 123642) "a") (data (i32.const 123645) "a") (data (i32.const 123648) "a") (data (i32.const 123651) "a") (data (i32.const 123654) "a") (data (i32.const 123657) "a") (data (i32.const 123660) "a") (data (i32.const 123663) "a") (data (i32.const 123666) "a") (data (i32.const 123669) "a") (data (i32.const 123672) "a") (data (i32.const 123675) "a") (data (i32.const 123678) "a") (data (i32.const 123681) "a") (data (i32.const 123684) "a") (data (i32.const 123687) "a") (data (i32.const 123690) "a") (data (i32.const 123693) "a") (data (i32.const 123696) "a") (data (i32.const 123699) "a") (data (i32.const 123702) "a") (data (i32.const 123705) "a") (data (i32.const 123708) "a") (data (i32.const 123711) "a") (data (i32.const 123714) "a") (data (i32.const 123717) "a") (data (i32.const 123720) "a") (data (i32.const 123723) "a") (data (i32.const 123726) "a") (data (i32.const 123729) "a") (data (i32.const 123732) "a") (data (i32.const 123735) "a") (data (i32.const 123738) "a") (data (i32.const 123741) "a") (data (i32.const 123744) "a") (data (i32.const 123747) "a") (data (i32.const 123750) "a") (data (i32.const 123753) "a") (data (i32.const 123756) "a") (data (i32.const 123759) "a") (data (i32.const 123762) "a") (data (i32.const 123765) "a") (data (i32.const 123768) "a") (data (i32.const 123771) "a") (data (i32.const 123774) "a") (data (i32.const 123777) "a") (data (i32.const 123780) "a") (data (i32.const 123783) "a") (data (i32.const 123786) "a") (data (i32.const 123789) "a") (data (i32.const 123792) "a") (data (i32.const 123795) "a") (data (i32.const 123798) "a") (data (i32.const 123801) "a") (data (i32.const 123804) "a") (data (i32.const 123807) "a") (data (i32.const 123810) "a") (data (i32.const 123813) "a") (data (i32.const 123816) "a") (data (i32.const 123819) "a") (data (i32.const 123822) "a") (data (i32.const 123825) "a") (data (i32.const 123828) "a") (data (i32.const 123831) "a") (data (i32.const 123834) "a") (data (i32.const 123837) "a") (data (i32.const 123840) "a") (data (i32.const 123843) "a") (data (i32.const 123846) "a") (data (i32.const 123849) "a") (data (i32.const 123852) "a") (data (i32.const 123855) "a") (data (i32.const 123858) "a") (data (i32.const 123861) "a") (data (i32.const 123864) "a") (data (i32.const 123867) "a") (data (i32.const 123870) "a") (data (i32.const 123873) "a") (data (i32.const 123876) "a") (data (i32.const 123879) "a") (data (i32.const 123882) "a") (data (i32.const 123885) "a") (data (i32.const 123888) "a") (data (i32.const 123891) "a") (data (i32.const 123894) "a") (data (i32.const 123897) "a") (data (i32.const 123900) "a") (data (i32.const 123903) "a") (data (i32.const 123906) "a") (data (i32.const 123909) "a") (data (i32.const 123912) "a") (data (i32.const 123915) "a") (data (i32.const 123918) "a") (data (i32.const 123921) "a") (data (i32.const 123924) "a") (data (i32.const 123927) "a") (data (i32.const 123930) "a") (data (i32.const 123933) "a") (data (i32.const 123936) "a") (data (i32.const 123939) "a") (data (i32.const 123942) "a") (data (i32.const 123945) "a") (data (i32.const 123948) "a") (data (i32.const 123951) "a") (data (i32.const 123954) "a") (data (i32.const 123957) "a") (data (i32.const 123960) "a") (data (i32.const 123963) "a") (data (i32.const 123966) "a") (data (i32.const 123969) "a") (data (i32.const 123972) "a") (data (i32.const 123975) "a") (data (i32.const 123978) "a") (data (i32.const 123981) "a") (data (i32.const 123984) "a") (data (i32.const 123987) "a") (data (i32.const 123990) "a") (data (i32.const 123993) "a") (data (i32.const 123996) "a") (data (i32.const 123999) "a") (data (i32.const 124002) "a") (data (i32.const 124005) "a") (data (i32.const 124008) "a") (data (i32.const 124011) "a") (data (i32.const 124014) "a") (data (i32.const 124017) "a") (data (i32.const 124020) "a") (data (i32.const 124023) "a") (data (i32.const 124026) "a") (data (i32.const 124029) "a") (data (i32.const 124032) "a") (data (i32.const 124035) "a") (data (i32.const 124038) "a") (data (i32.const 124041) "a") (data (i32.const 124044) "a") (data (i32.const 124047) "a") (data (i32.const 124050) "a") (data (i32.const 124053) "a") (data (i32.const 124056) "a") (data (i32.const 124059) "a") (data (i32.const 124062) "a") (data (i32.const 124065) "a") (data (i32.const 124068) "a") (data (i32.const 124071) "a") (data (i32.const 124074) "a") (data (i32.const 124077) "a") (data (i32.const 124080) "a") (data (i32.const 124083) "a") (data (i32.const 124086) "a") (data (i32.const 124089) "a") (data (i32.const 124092) "a") (data (i32.const 124095) "a") (data (i32.const 124098) "a") (data (i32.const 124101) "a") (data (i32.const 124104) "a") (data (i32.const 124107) "a") (data (i32.const 124110) "a") (data (i32.const 124113) "a") (data (i32.const 124116) "a") (data (i32.const 124119) "a") (data (i32.const 124122) "a") (data (i32.const 124125) "a") (data (i32.const 124128) "a") (data (i32.const 124131) "a") (data (i32.const 124134) "a") (data (i32.const 124137) "a") (data (i32.const 124140) "a") (data (i32.const 124143) "a") (data (i32.const 124146) "a") (data (i32.const 124149) "a") (data (i32.const 124152) "a") (data (i32.const 124155) "a") (data (i32.const 124158) "a") (data (i32.const 124161) "a") (data (i32.const 124164) "a") (data (i32.const 124167) "a") (data (i32.const 124170) "a") (data (i32.const 124173) "a") (data (i32.const 124176) "a") (data (i32.const 124179) "a") (data (i32.const 124182) "a") (data (i32.const 124185) "a") (data (i32.const 124188) "a") (data (i32.const 124191) "a") (data (i32.const 124194) "a") (data (i32.const 124197) "a") (data (i32.const 124200) "a") (data (i32.const 124203) "a") (data (i32.const 124206) "a") (data (i32.const 124209) "a") (data (i32.const 124212) "a") (data (i32.const 124215) "a") (data (i32.const 124218) "a") (data (i32.const 124221) "a") (data (i32.const 124224) "a") (data (i32.const 124227) "a") (data (i32.const 124230) "a") (data (i32.const 124233) "a") (data (i32.const 124236) "a") (data (i32.const 124239) "a") (data (i32.const 124242) "a") (data (i32.const 124245) "a") (data (i32.const 124248) "a") (data (i32.const 124251) "a") (data (i32.const 124254) "a") (data (i32.const 124257) "a") (data (i32.const 124260) "a") (data (i32.const 124263) "a") (data (i32.const 124266) "a") (data (i32.const 124269) "a") (data (i32.const 124272) "a") (data (i32.const 124275) "a") (data (i32.const 124278) "a") (data (i32.const 124281) "a") (data (i32.const 124284) "a") (data (i32.const 124287) "a") (data (i32.const 124290) "a") (data (i32.const 124293) "a") (data (i32.const 124296) "a") (data (i32.const 124299) "a") (data (i32.const 124302) "a") (data (i32.const 124305) "a") (data (i32.const 124308) "a") (data (i32.const 124311) "a") (data (i32.const 124314) "a") (data (i32.const 124317) "a") (data (i32.const 124320) "a") (data (i32.const 124323) "a") (data (i32.const 124326) "a") (data (i32.const 124329) "a") (data (i32.const 124332) "a") (data (i32.const 124335) "a") (data (i32.const 124338) "a") (data (i32.const 124341) "a") (data (i32.const 124344) "a") (data (i32.const 124347) "a") (data (i32.const 124350) "a") (data (i32.const 124353) "a") (data (i32.const 124356) "a") (data (i32.const 124359) "a") (data (i32.const 124362) "a") (data (i32.const 124365) "a") (data (i32.const 124368) "a") (data (i32.const 124371) "a") (data (i32.const 124374) "a") (data (i32.const 124377) "a") (data (i32.const 124380) "a") (data (i32.const 124383) "a") (data (i32.const 124386) "a") (data (i32.const 124389) "a") (data (i32.const 124392) "a") (data (i32.const 124395) "a") (data (i32.const 124398) "a") (data (i32.const 124401) "a") (data (i32.const 124404) "a") (data (i32.const 124407) "a") (data (i32.const 124410) "a") (data (i32.const 124413) "a") (data (i32.const 124416) "a") (data (i32.const 124419) "a") (data (i32.const 124422) "a") (data (i32.const 124425) "a") (data (i32.const 124428) "a") (data (i32.const 124431) "a") (data (i32.const 124434) "a") (data (i32.const 124437) "a") (data (i32.const 124440) "a") (data (i32.const 124443) "a") (data (i32.const 124446) "a") (data (i32.const 124449) "a") (data (i32.const 124452) "a") (data (i32.const 124455) "a") (data (i32.const 124458) "a") (data (i32.const 124461) "a") (data (i32.const 124464) "a") (data (i32.const 124467) "a") (data (i32.const 124470) "a") (data (i32.const 124473) "a") (data (i32.const 124476) "a") (data (i32.const 124479) "a") (data (i32.const 124482) "a") (data (i32.const 124485) "a") (data (i32.const 124488) "a") (data (i32.const 124491) "a") (data (i32.const 124494) "a") (data (i32.const 124497) "a") (data (i32.const 124500) "a") (data (i32.const 124503) "a") (data (i32.const 124506) "a") (data (i32.const 124509) "a") (data (i32.const 124512) "a") (data (i32.const 124515) "a") (data (i32.const 124518) "a") (data (i32.const 124521) "a") (data (i32.const 124524) "a") (data (i32.const 124527) "a") (data (i32.const 124530) "a") (data (i32.const 124533) "a") (data (i32.const 124536) "a") (data (i32.const 124539) "a") (data (i32.const 124542) "a") (data (i32.const 124545) "a") (data (i32.const 124548) "a") (data (i32.const 124551) "a") (data (i32.const 124554) "a") (data (i32.const 124557) "a") (data (i32.const 124560) "a") (data (i32.const 124563) "a") (data (i32.const 124566) "a") (data (i32.const 124569) "a") (data (i32.const 124572) "a") (data (i32.const 124575) "a") (data (i32.const 124578) "a") (data (i32.const 124581) "a") (data (i32.const 124584) "a") (data (i32.const 124587) "a") (data (i32.const 124590) "a") (data (i32.const 124593) "a") (data (i32.const 124596) "a") (data (i32.const 124599) "a") (data (i32.const 124602) "a") (data (i32.const 124605) "a") (data (i32.const 124608) "a") (data (i32.const 124611) "a") (data (i32.const 124614) "a") (data (i32.const 124617) "a") (data (i32.const 124620) "a") (data (i32.const 124623) "a") (data (i32.const 124626) "a") (data (i32.const 124629) "a") (data (i32.const 124632) "a") (data (i32.const 124635) "a") (data (i32.const 124638) "a") (data (i32.const 124641) "a") (data (i32.const 124644) "a") (data (i32.const 124647) "a") (data (i32.const 124650) "a") (data (i32.const 124653) "a") (data (i32.const 124656) "a") (data (i32.const 124659) "a") (data (i32.const 124662) "a") (data (i32.const 124665) "a") (data (i32.const 124668) "a") (data (i32.const 124671) "a") (data (i32.const 124674) "a") (data (i32.const 124677) "a") (data (i32.const 124680) "a") (data (i32.const 124683) "a") (data (i32.const 124686) "a") (data (i32.const 124689) "a") (data (i32.const 124692) "a") (data (i32.const 124695) "a") (data (i32.const 124698) "a") (data (i32.const 124701) "a") (data (i32.const 124704) "a") (data (i32.const 124707) "a") (data (i32.const 124710) "a") (data (i32.const 124713) "a") (data (i32.const 124716) "a") (data (i32.const 124719) "a") (data (i32.const 124722) "a") (data (i32.const 124725) "a") (data (i32.const 124728) "a") (data (i32.const 124731) "a") (data (i32.const 124734) "a") (data (i32.const 124737) "a") (data (i32.const 124740) "a") (data (i32.const 124743) "a") (data (i32.const 124746) "a") (data (i32.const 124749) "a") (data (i32.const 124752) "a") (data (i32.const 124755) "a") (data (i32.const 124758) "a") (data (i32.const 124761) "a") (data (i32.const 124764) "a") (data (i32.const 124767) "a") (data (i32.const 124770) "a") (data (i32.const 124773) "a") (data (i32.const 124776) "a") (data (i32.const 124779) "a") (data (i32.const 124782) "a") (data (i32.const 124785) "a") (data (i32.const 124788) "a") (data (i32.const 124791) "a") (data (i32.const 124794) "a") (data (i32.const 124797) "a") (data (i32.const 124800) "a") (data (i32.const 124803) "a") (data (i32.const 124806) "a") (data (i32.const 124809) "a") (data (i32.const 124812) "a") (data (i32.const 124815) "a") (data (i32.const 124818) "a") (data (i32.const 124821) "a") (data (i32.const 124824) "a") (data (i32.const 124827) "a") (data (i32.const 124830) "a") (data (i32.const 124833) "a") (data (i32.const 124836) "a") (data (i32.const 124839) "a") (data (i32.const 124842) "a") (data (i32.const 124845) "a") (data (i32.const 124848) "a") (data (i32.const 124851) "a") (data (i32.const 124854) "a") (data (i32.const 124857) "a") (data (i32.const 124860) "a") (data (i32.const 124863) "a") (data (i32.const 124866) "a") (data (i32.const 124869) "a") (data (i32.const 124872) "a") (data (i32.const 124875) "a") (data (i32.const 124878) "a") (data (i32.const 124881) "a") (data (i32.const 124884) "a") (data (i32.const 124887) "a") (data (i32.const 124890) "a") (data (i32.const 124893) "a") (data (i32.const 124896) "a") (data (i32.const 124899) "a") (data (i32.const 124902) "a") (data (i32.const 124905) "a") (data (i32.const 124908) "a") (data (i32.const 124911) "a") (data (i32.const 124914) "a") (data (i32.const 124917) "a") (data (i32.const 124920) "a") (data (i32.const 124923) "a") (data (i32.const 124926) "a") (data (i32.const 124929) "a") (data (i32.const 124932) "a") (data (i32.const 124935) "a") (data (i32.const 124938) "a") (data (i32.const 124941) "a") (data (i32.const 124944) "a") (data (i32.const 124947) "a") (data (i32.const 124950) "a") (data (i32.const 124953) "a") (data (i32.const 124956) "a") (data (i32.const 124959) "a") (data (i32.const 124962) "a") (data (i32.const 124965) "a") (data (i32.const 124968) "a") (data (i32.const 124971) "a") (data (i32.const 124974) "a") (data (i32.const 124977) "a") (data (i32.const 124980) "a") (data (i32.const 124983) "a") (data (i32.const 124986) "a") (data (i32.const 124989) "a") (data (i32.const 124992) "a") (data (i32.const 124995) "a") (data (i32.const 124998) "a") (data (i32.const 125001) "a") (data (i32.const 125004) "a") (data (i32.const 125007) "a") (data (i32.const 125010) "a") (data (i32.const 125013) "a") (data (i32.const 125016) "a") (data (i32.const 125019) "a") (data (i32.const 125022) "a") (data (i32.const 125025) "a") (data (i32.const 125028) "a") (data (i32.const 125031) "a") (data (i32.const 125034) "a") (data (i32.const 125037) "a") (data (i32.const 125040) "a") (data (i32.const 125043) "a") (data (i32.const 125046) "a") (data (i32.const 125049) "a") (data (i32.const 125052) "a") (data (i32.const 125055) "a") (data (i32.const 125058) "a") (data (i32.const 125061) "a") (data (i32.const 125064) "a") (data (i32.const 125067) "a") (data (i32.const 125070) "a") (data (i32.const 125073) "a") (data (i32.const 125076) "a") (data (i32.const 125079) "a") (data (i32.const 125082) "a") (data (i32.const 125085) "a") (data (i32.const 125088) "a") (data (i32.const 125091) "a") (data (i32.const 125094) "a") (data (i32.const 125097) "a") (data (i32.const 125100) "a") (data (i32.const 125103) "a") (data (i32.const 125106) "a") (data (i32.const 125109) "a") (data (i32.const 125112) "a") (data (i32.const 125115) "a") (data (i32.const 125118) "a") (data (i32.const 125121) "a") (data (i32.const 125124) "a") (data (i32.const 125127) "a") (data (i32.const 125130) "a") (data (i32.const 125133) "a") (data (i32.const 125136) "a") (data (i32.const 125139) "a") (data (i32.const 125142) "a") (data (i32.const 125145) "a") (data (i32.const 125148) "a") (data (i32.const 125151) "a") (data (i32.const 125154) "a") (data (i32.const 125157) "a") (data (i32.const 125160) "a") (data (i32.const 125163) "a") (data (i32.const 125166) "a") (data (i32.const 125169) "a") (data (i32.const 125172) "a") (data (i32.const 125175) "a") (data (i32.const 125178) "a") (data (i32.const 125181) "a") (data (i32.const 125184) "a") (data (i32.const 125187) "a") (data (i32.const 125190) "a") (data (i32.const 125193) "a") (data (i32.const 125196) "a") (data (i32.const 125199) "a") (data (i32.const 125202) "a") (data (i32.const 125205) "a") (data (i32.const 125208) "a") (data (i32.const 125211) "a") (data (i32.const 125214) "a") (data (i32.const 125217) "a") (data (i32.const 125220) "a") (data (i32.const 125223) "a") (data (i32.const 125226) "a") (data (i32.const 125229) "a") (data (i32.const 125232) "a") (data (i32.const 125235) "a") (data (i32.const 125238) "a") (data (i32.const 125241) "a") (data (i32.const 125244) "a") (data (i32.const 125247) "a") (data (i32.const 125250) "a") (data (i32.const 125253) "a") (data (i32.const 125256) "a") (data (i32.const 125259) "a") (data (i32.const 125262) "a") (data (i32.const 125265) "a") (data (i32.const 125268) "a") (data (i32.const 125271) "a") (data (i32.const 125274) "a") (data (i32.const 125277) "a") (data (i32.const 125280) "a") (data (i32.const 125283) "a") (data (i32.const 125286) "a") (data (i32.const 125289) "a") (data (i32.const 125292) "a") (data (i32.const 125295) "a") (data (i32.const 125298) "a") (data (i32.const 125301) "a") (data (i32.const 125304) "a") (data (i32.const 125307) "a") (data (i32.const 125310) "a") (data (i32.const 125313) "a") (data (i32.const 125316) "a") (data (i32.const 125319) "a") (data (i32.const 125322) "a") (data (i32.const 125325) "a") (data (i32.const 125328) "a") (data (i32.const 125331) "a") (data (i32.const 125334) "a") (data (i32.const 125337) "a") (data (i32.const 125340) "a") (data (i32.const 125343) "a") (data (i32.const 125346) "a") (data (i32.const 125349) "a") (data (i32.const 125352) "a") (data (i32.const 125355) "a") (data (i32.const 125358) "a") (data (i32.const 125361) "a") (data (i32.const 125364) "a") (data (i32.const 125367) "a") (data (i32.const 125370) "a") (data (i32.const 125373) "a") (data (i32.const 125376) "a") (data (i32.const 125379) "a") (data (i32.const 125382) "a") (data (i32.const 125385) "a") (data (i32.const 125388) "a") (data (i32.const 125391) "a") (data (i32.const 125394) "a") (data (i32.const 125397) "a") (data (i32.const 125400) "a") (data (i32.const 125403) "a") (data (i32.const 125406) "a") (data (i32.const 125409) "a") (data (i32.const 125412) "a") (data (i32.const 125415) "a") (data (i32.const 125418) "a") (data (i32.const 125421) "a") (data (i32.const 125424) "a") (data (i32.const 125427) "a") (data (i32.const 125430) "a") (data (i32.const 125433) "a") (data (i32.const 125436) "a") (data (i32.const 125439) "a") (data (i32.const 125442) "a") (data (i32.const 125445) "a") (data (i32.const 125448) "a") (data (i32.const 125451) "a") (data (i32.const 125454) "a") (data (i32.const 125457) "a") (data (i32.const 125460) "a") (data (i32.const 125463) "a") (data (i32.const 125466) "a") (data (i32.const 125469) "a") (data (i32.const 125472) "a") (data (i32.const 125475) "a") (data (i32.const 125478) "a") (data (i32.const 125481) "a") (data (i32.const 125484) "a") (data (i32.const 125487) "a") (data (i32.const 125490) "a") (data (i32.const 125493) "a") (data (i32.const 125496) "a") (data (i32.const 125499) "a") (data (i32.const 125502) "a") (data (i32.const 125505) "a") (data (i32.const 125508) "a") (data (i32.const 125511) "a") (data (i32.const 125514) "a") (data (i32.const 125517) "a") (data (i32.const 125520) "a") (data (i32.const 125523) "a") (data (i32.const 125526) "a") (data (i32.const 125529) "a") (data (i32.const 125532) "a") (data (i32.const 125535) "a") (data (i32.const 125538) "a") (data (i32.const 125541) "a") (data (i32.const 125544) "a") (data (i32.const 125547) "a") (data (i32.const 125550) "a") (data (i32.const 125553) "a") (data (i32.const 125556) "a") (data (i32.const 125559) "a") (data (i32.const 125562) "a") (data (i32.const 125565) "a") (data (i32.const 125568) "a") (data (i32.const 125571) "a") (data (i32.const 125574) "a") (data (i32.const 125577) "a") (data (i32.const 125580) "a") (data (i32.const 125583) "a") (data (i32.const 125586) "a") (data (i32.const 125589) "a") (data (i32.const 125592) "a") (data (i32.const 125595) "a") (data (i32.const 125598) "a") (data (i32.const 125601) "a") (data (i32.const 125604) "a") (data (i32.const 125607) "a") (data (i32.const 125610) "a") (data (i32.const 125613) "a") (data (i32.const 125616) "a") (data (i32.const 125619) "a") (data (i32.const 125622) "a") (data (i32.const 125625) "a") (data (i32.const 125628) "a") (data (i32.const 125631) "a") (data (i32.const 125634) "a") (data (i32.const 125637) "a") (data (i32.const 125640) "a") (data (i32.const 125643) "a") (data (i32.const 125646) "a") (data (i32.const 125649) "a") (data (i32.const 125652) "a") (data (i32.const 125655) "a") (data (i32.const 125658) "a") (data (i32.const 125661) "a") (data (i32.const 125664) "a") (data (i32.const 125667) "a") (data (i32.const 125670) "a") (data (i32.const 125673) "a") (data (i32.const 125676) "a") (data (i32.const 125679) "a") (data (i32.const 125682) "a") (data (i32.const 125685) "a") (data (i32.const 125688) "a") (data (i32.const 125691) "a") (data (i32.const 125694) "a") (data (i32.const 125697) "a") (data (i32.const 125700) "a") (data (i32.const 125703) "a") (data (i32.const 125706) "a") (data (i32.const 125709) "a") (data (i32.const 125712) "a") (data (i32.const 125715) "a") (data (i32.const 125718) "a") (data (i32.const 125721) "a") (data (i32.const 125724) "a") (data (i32.const 125727) "a") (data (i32.const 125730) "a") (data (i32.const 125733) "a") (data (i32.const 125736) "a") (data (i32.const 125739) "a") (data (i32.const 125742) "a") (data (i32.const 125745) "a") (data (i32.const 125748) "a") (data (i32.const 125751) "a") (data (i32.const 125754) "a") (data (i32.const 125757) "a") (data (i32.const 125760) "a") (data (i32.const 125763) "a") (data (i32.const 125766) "a") (data (i32.const 125769) "a") (data (i32.const 125772) "a") (data (i32.const 125775) "a") (data (i32.const 125778) "a") (data (i32.const 125781) "a") (data (i32.const 125784) "a") (data (i32.const 125787) "a") (data (i32.const 125790) "a") (data (i32.const 125793) "a") (data (i32.const 125796) "a") (data (i32.const 125799) "a") (data (i32.const 125802) "a") (data (i32.const 125805) "a") (data (i32.const 125808) "a") (data (i32.const 125811) "a") (data (i32.const 125814) "a") (data (i32.const 125817) "a") (data (i32.const 125820) "a") (data (i32.const 125823) "a") (data (i32.const 125826) "a") (data (i32.const 125829) "a") (data (i32.const 125832) "a") (data (i32.const 125835) "a") (data (i32.const 125838) "a") (data (i32.const 125841) "a") (data (i32.const 125844) "a") (data (i32.const 125847) "a") (data (i32.const 125850) "a") (data (i32.const 125853) "a") (data (i32.const 125856) "a") (data (i32.const 125859) "a") (data (i32.const 125862) "a") (data (i32.const 125865) "a") (data (i32.const 125868) "a") (data (i32.const 125871) "a") (data (i32.const 125874) "a") (data (i32.const 125877) "a") (data (i32.const 125880) "a") (data (i32.const 125883) "a") (data (i32.const 125886) "a") (data (i32.const 125889) "a") (data (i32.const 125892) "a") (data (i32.const 125895) "a") (data (i32.const 125898) "a") (data (i32.const 125901) "a") (data (i32.const 125904) "a") (data (i32.const 125907) "a") (data (i32.const 125910) "a") (data (i32.const 125913) "a") (data (i32.const 125916) "a") (data (i32.const 125919) "a") (data (i32.const 125922) "a") (data (i32.const 125925) "a") (data (i32.const 125928) "a") (data (i32.const 125931) "a") (data (i32.const 125934) "a") (data (i32.const 125937) "a") (data (i32.const 125940) "a") (data (i32.const 125943) "a") (data (i32.const 125946) "a") (data (i32.const 125949) "a") (data (i32.const 125952) "a") (data (i32.const 125955) "a") (data (i32.const 125958) "a") (data (i32.const 125961) "a") (data (i32.const 125964) "a") (data (i32.const 125967) "a") (data (i32.const 125970) "a") (data (i32.const 125973) "a") (data (i32.const 125976) "a") (data (i32.const 125979) "a") (data (i32.const 125982) "a") (data (i32.const 125985) "a") (data (i32.const 125988) "a") (data (i32.const 125991) "a") (data (i32.const 125994) "a") (data (i32.const 125997) "a") (data (i32.const 126000) "a") (data (i32.const 126003) "a") (data (i32.const 126006) "a") (data (i32.const 126009) "a") (data (i32.const 126012) "a") (data (i32.const 126015) "a") (data (i32.const 126018) "a") (data (i32.const 126021) "a") (data (i32.const 126024) "a") (data (i32.const 126027) "a") (data (i32.const 126030) "a") (data (i32.const 126033) "a") (data (i32.const 126036) "a") (data (i32.const 126039) "a") (data (i32.const 126042) "a") (data (i32.const 126045) "a") (data (i32.const 126048) "a") (data (i32.const 126051) "a") (data (i32.const 126054) "a") (data (i32.const 126057) "a") (data (i32.const 126060) "a") (data (i32.const 126063) "a") (data (i32.const 126066) "a") (data (i32.const 126069) "a") (data (i32.const 126072) "a") (data (i32.const 126075) "a") (data (i32.const 126078) "a") (data (i32.const 126081) "a") (data (i32.const 126084) "a") (data (i32.const 126087) "a") (data (i32.const 126090) "a") (data (i32.const 126093) "a") (data (i32.const 126096) "a") (data (i32.const 126099) "a") (data (i32.const 126102) "a") (data (i32.const 126105) "a") (data (i32.const 126108) "a") (data (i32.const 126111) "a") (data (i32.const 126114) "a") (data (i32.const 126117) "a") (data (i32.const 126120) "a") (data (i32.const 126123) "a") (data (i32.const 126126) "a") (data (i32.const 126129) "a") (data (i32.const 126132) "a") (data (i32.const 126135) "a") (data (i32.const 126138) "a") (data (i32.const 126141) "a") (data (i32.const 126144) "a") (data (i32.const 126147) "a") (data (i32.const 126150) "a") (data (i32.const 126153) "a") (data (i32.const 126156) "a") (data (i32.const 126159) "a") (data (i32.const 126162) "a") (data (i32.const 126165) "a") (data (i32.const 126168) "a") (data (i32.const 126171) "a") (data (i32.const 126174) "a") (data (i32.const 126177) "a") (data (i32.const 126180) "a") (data (i32.const 126183) "a") (data (i32.const 126186) "a") (data (i32.const 126189) "a") (data (i32.const 126192) "a") (data (i32.const 126195) "a") (data (i32.const 126198) "a") (data (i32.const 126201) "a") (data (i32.const 126204) "a") (data (i32.const 126207) "a") (data (i32.const 126210) "a") (data (i32.const 126213) "a") (data (i32.const 126216) "a") (data (i32.const 126219) "a") (data (i32.const 126222) "a") (data (i32.const 126225) "a") (data (i32.const 126228) "a") (data (i32.const 126231) "a") (data (i32.const 126234) "a") (data (i32.const 126237) "a") (data (i32.const 126240) "a") (data (i32.const 126243) "a") (data (i32.const 126246) "a") (data (i32.const 126249) "a") (data (i32.const 126252) "a") (data (i32.const 126255) "a") (data (i32.const 126258) "a") (data (i32.const 126261) "a") (data (i32.const 126264) "a") (data (i32.const 126267) "a") (data (i32.const 126270) "a") (data (i32.const 126273) "a") (data (i32.const 126276) "a") (data (i32.const 126279) "a") (data (i32.const 126282) "a") (data (i32.const 126285) "a") (data (i32.const 126288) "a") (data (i32.const 126291) "a") (data (i32.const 126294) "a") (data (i32.const 126297) "a") (data (i32.const 126300) "a") (data (i32.const 126303) "a") (data (i32.const 126306) "a") (data (i32.const 126309) "a") (data (i32.const 126312) "a") (data (i32.const 126315) "a") (data (i32.const 126318) "a") (data (i32.const 126321) "a") (data (i32.const 126324) "a") (data (i32.const 126327) "a") (data (i32.const 126330) "a") (data (i32.const 126333) "a") (data (i32.const 126336) "a") (data (i32.const 126339) "a") (data (i32.const 126342) "a") (data (i32.const 126345) "a") (data (i32.const 126348) "a") (data (i32.const 126351) "a") (data (i32.const 126354) "a") (data (i32.const 126357) "a") (data (i32.const 126360) "a") (data (i32.const 126363) "a") (data (i32.const 126366) "a") (data (i32.const 126369) "a") (data (i32.const 126372) "a") (data (i32.const 126375) "a") (data (i32.const 126378) "a") (data (i32.const 126381) "a") (data (i32.const 126384) "a") (data (i32.const 126387) "a") (data (i32.const 126390) "a") (data (i32.const 126393) "a") (data (i32.const 126396) "a") (data (i32.const 126399) "a") (data (i32.const 126402) "a") (data (i32.const 126405) "a") (data (i32.const 126408) "a") (data (i32.const 126411) "a") (data (i32.const 126414) "a") (data (i32.const 126417) "a") (data (i32.const 126420) "a") (data (i32.const 126423) "a") (data (i32.const 126426) "a") (data (i32.const 126429) "a") (data (i32.const 126432) "a") (data (i32.const 126435) "a") (data (i32.const 126438) "a") (data (i32.const 126441) "a") (data (i32.const 126444) "a") (data (i32.const 126447) "a") (data (i32.const 126450) "a") (data (i32.const 126453) "a") (data (i32.const 126456) "a") (data (i32.const 126459) "a") (data (i32.const 126462) "a") (data (i32.const 126465) "a") (data (i32.const 126468) "a") (data (i32.const 126471) "a") (data (i32.const 126474) "a") (data (i32.const 126477) "a") (data (i32.const 126480) "a") (data (i32.const 126483) "a") (data (i32.const 126486) "a") (data (i32.const 126489) "a") (data (i32.const 126492) "a") (data (i32.const 126495) "a") (data (i32.const 126498) "a") (data (i32.const 126501) "a") (data (i32.const 126504) "a") (data (i32.const 126507) "a") (data (i32.const 126510) "a") (data (i32.const 126513) "a") (data (i32.const 126516) "a") (data (i32.const 126519) "a") (data (i32.const 126522) "a") (data (i32.const 126525) "a") (data (i32.const 126528) "a") (data (i32.const 126531) "a") (data (i32.const 126534) "a") (data (i32.const 126537) "a") (data (i32.const 126540) "a") (data (i32.const 126543) "a") (data (i32.const 126546) "a") (data (i32.const 126549) "a") (data (i32.const 126552) "a") (data (i32.const 126555) "a") (data (i32.const 126558) "a") (data (i32.const 126561) "a") (data (i32.const 126564) "a") (data (i32.const 126567) "a") (data (i32.const 126570) "a") (data (i32.const 126573) "a") (data (i32.const 126576) "a") (data (i32.const 126579) "a") (data (i32.const 126582) "a") (data (i32.const 126585) "a") (data (i32.const 126588) "a") (data (i32.const 126591) "a") (data (i32.const 126594) "a") (data (i32.const 126597) "a") (data (i32.const 126600) "a") (data (i32.const 126603) "a") (data (i32.const 126606) "a") (data (i32.const 126609) "a") (data (i32.const 126612) "a") (data (i32.const 126615) "a") (data (i32.const 126618) "a") (data (i32.const 126621) "a") (data (i32.const 126624) "a") (data (i32.const 126627) "a") (data (i32.const 126630) "a") (data (i32.const 126633) "a") (data (i32.const 126636) "a") (data (i32.const 126639) "a") (data (i32.const 126642) "a") (data (i32.const 126645) "a") (data (i32.const 126648) "a") (data (i32.const 126651) "a") (data (i32.const 126654) "a") (data (i32.const 126657) "a") (data (i32.const 126660) "a") (data (i32.const 126663) "a") (data (i32.const 126666) "a") (data (i32.const 126669) "a") (data (i32.const 126672) "a") (data (i32.const 126675) "a") (data (i32.const 126678) "a") (data (i32.const 126681) "a") (data (i32.const 126684) "a") (data (i32.const 126687) "a") (data (i32.const 126690) "a") (data (i32.const 126693) "a") (data (i32.const 126696) "a") (data (i32.const 126699) "a") (data (i32.const 126702) "a") (data (i32.const 126705) "a") (data (i32.const 126708) "a") (data (i32.const 126711) "a") (data (i32.const 126714) "a") (data (i32.const 126717) "a") (data (i32.const 126720) "a") (data (i32.const 126723) "a") (data (i32.const 126726) "a") (data (i32.const 126729) "a") (data (i32.const 126732) "a") (data (i32.const 126735) "a") (data (i32.const 126738) "a") (data (i32.const 126741) "a") (data (i32.const 126744) "a") (data (i32.const 126747) "a") (data (i32.const 126750) "a") (data (i32.const 126753) "a") (data (i32.const 126756) "a") (data (i32.const 126759) "a") (data (i32.const 126762) "a") (data (i32.const 126765) "a") (data (i32.const 126768) "a") (data (i32.const 126771) "a") (data (i32.const 126774) "a") (data (i32.const 126777) "a") (data (i32.const 126780) "a") (data (i32.const 126783) "a") (data (i32.const 126786) "a") (data (i32.const 126789) "a") (data (i32.const 126792) "a") (data (i32.const 126795) "a") (data (i32.const 126798) "a") (data (i32.const 126801) "a") (data (i32.const 126804) "a") (data (i32.const 126807) "a") (data (i32.const 126810) "a") (data (i32.const 126813) "a") (data (i32.const 126816) "a") (data (i32.const 126819) "a") (data (i32.const 126822) "a") (data (i32.const 126825) "a") (data (i32.const 126828) "a") (data (i32.const 126831) "a") (data (i32.const 126834) "a") (data (i32.const 126837) "a") (data (i32.const 126840) "a") (data (i32.const 126843) "a") (data (i32.const 126846) "a") (data (i32.const 126849) "a") (data (i32.const 126852) "a") (data (i32.const 126855) "a") (data (i32.const 126858) "a") (data (i32.const 126861) "a") (data (i32.const 126864) "a") (data (i32.const 126867) "a") (data (i32.const 126870) "a") (data (i32.const 126873) "a") (data (i32.const 126876) "a") (data (i32.const 126879) "a") (data (i32.const 126882) "a") (data (i32.const 126885) "a") (data (i32.const 126888) "a") (data (i32.const 126891) "a") (data (i32.const 126894) "a") (data (i32.const 126897) "a") (data (i32.const 126900) "a") (data (i32.const 126903) "a") (data (i32.const 126906) "a") (data (i32.const 126909) "a") (data (i32.const 126912) "a") (data (i32.const 126915) "a") (data (i32.const 126918) "a") (data (i32.const 126921) "a") (data (i32.const 126924) "a") (data (i32.const 126927) "a") (data (i32.const 126930) "a") (data (i32.const 126933) "a") (data (i32.const 126936) "a") (data (i32.const 126939) "a") (data (i32.const 126942) "a") (data (i32.const 126945) "a") (data (i32.const 126948) "a") (data (i32.const 126951) "a") (data (i32.const 126954) "a") (data (i32.const 126957) "a") (data (i32.const 126960) "a") (data (i32.const 126963) "a") (data (i32.const 126966) "a") (data (i32.const 126969) "a") (data (i32.const 126972) "a") (data (i32.const 126975) "a") (data (i32.const 126978) "a") (data (i32.const 126981) "a") (data (i32.const 126984) "a") (data (i32.const 126987) "a") (data (i32.const 126990) "a") (data (i32.const 126993) "a") (data (i32.const 126996) "a") (data (i32.const 126999) "a") (data (i32.const 127002) "a") (data (i32.const 127005) "a") (data (i32.const 127008) "a") (data (i32.const 127011) "a") (data (i32.const 127014) "a") (data (i32.const 127017) "a") (data (i32.const 127020) "a") (data (i32.const 127023) "a") (data (i32.const 127026) "a") (data (i32.const 127029) "a") (data (i32.const 127032) "a") (data (i32.const 127035) "a") (data (i32.const 127038) "a") (data (i32.const 127041) "a") (data (i32.const 127044) "a") (data (i32.const 127047) "a") (data (i32.const 127050) "a") (data (i32.const 127053) "a") (data (i32.const 127056) "a") (data (i32.const 127059) "a") (data (i32.const 127062) "a") (data (i32.const 127065) "a") (data (i32.const 127068) "a") (data (i32.const 127071) "a") (data (i32.const 127074) "a") (data (i32.const 127077) "a") (data (i32.const 127080) "a") (data (i32.const 127083) "a") (data (i32.const 127086) "a") (data (i32.const 127089) "a") (data (i32.const 127092) "a") (data (i32.const 127095) "a") (data (i32.const 127098) "a") (data (i32.const 127101) "a") (data (i32.const 127104) "a") (data (i32.const 127107) "a") (data (i32.const 127110) "a") (data (i32.const 127113) "a") (data (i32.const 127116) "a") (data (i32.const 127119) "a") (data (i32.const 127122) "a") (data (i32.const 127125) "a") (data (i32.const 127128) "a") (data (i32.const 127131) "a") (data (i32.const 127134) "a") (data (i32.const 127137) "a") (data (i32.const 127140) "a") (data (i32.const 127143) "a") (data (i32.const 127146) "a") (data (i32.const 127149) "a") (data (i32.const 127152) "a") (data (i32.const 127155) "a") (data (i32.const 127158) "a") (data (i32.const 127161) "a") (data (i32.const 127164) "a") (data (i32.const 127167) "a") (data (i32.const 127170) "a") (data (i32.const 127173) "a") (data (i32.const 127176) "a") (data (i32.const 127179) "a") (data (i32.const 127182) "a") (data (i32.const 127185) "a") (data (i32.const 127188) "a") (data (i32.const 127191) "a") (data (i32.const 127194) "a") (data (i32.const 127197) "a") (data (i32.const 127200) "a") (data (i32.const 127203) "a") (data (i32.const 127206) "a") (data (i32.const 127209) "a") (data (i32.const 127212) "a") (data (i32.const 127215) "a") (data (i32.const 127218) "a") (data (i32.const 127221) "a") (data (i32.const 127224) "a") (data (i32.const 127227) "a") (data (i32.const 127230) "a") (data (i32.const 127233) "a") (data (i32.const 127236) "a") (data (i32.const 127239) "a") (data (i32.const 127242) "a") (data (i32.const 127245) "a") (data (i32.const 127248) "a") (data (i32.const 127251) "a") (data (i32.const 127254) "a") (data (i32.const 127257) "a") (data (i32.const 127260) "a") (data (i32.const 127263) "a") (data (i32.const 127266) "a") (data (i32.const 127269) "a") (data (i32.const 127272) "a") (data (i32.const 127275) "a") (data (i32.const 127278) "a") (data (i32.const 127281) "a") (data (i32.const 127284) "a") (data (i32.const 127287) "a") (data (i32.const 127290) "a") (data (i32.const 127293) "a") (data (i32.const 127296) "a") (data (i32.const 127299) "a") (data (i32.const 127302) "a") (data (i32.const 127305) "a") (data (i32.const 127308) "a") (data (i32.const 127311) "a") (data (i32.const 127314) "a") (data (i32.const 127317) "a") (data (i32.const 127320) "a") (data (i32.const 127323) "a") (data (i32.const 127326) "a") (data (i32.const 127329) "a") (data (i32.const 127332) "a") (data (i32.const 127335) "a") (data (i32.const 127338) "a") (data (i32.const 127341) "a") (data (i32.const 127344) "a") (data (i32.const 127347) "a") (data (i32.const 127350) "a") (data (i32.const 127353) "a") (data (i32.const 127356) "a") (data (i32.const 127359) "a") (data (i32.const 127362) "a") (data (i32.const 127365) "a") (data (i32.const 127368) "a") (data (i32.const 127371) "a") (data (i32.const 127374) "a") (data (i32.const 127377) "a") (data (i32.const 127380) "a") (data (i32.const 127383) "a") (data (i32.const 127386) "a") (data (i32.const 127389) "a") (data (i32.const 127392) "a") (data (i32.const 127395) "a") (data (i32.const 127398) "a") (data (i32.const 127401) "a") (data (i32.const 127404) "a") (data (i32.const 127407) "a") (data (i32.const 127410) "a") (data (i32.const 127413) "a") (data (i32.const 127416) "a") (data (i32.const 127419) "a") (data (i32.const 127422) "a") (data (i32.const 127425) "a") (data (i32.const 127428) "a") (data (i32.const 127431) "a") (data (i32.const 127434) "a") (data (i32.const 127437) "a") (data (i32.const 127440) "a") (data (i32.const 127443) "a") (data (i32.const 127446) "a") (data (i32.const 127449) "a") (data (i32.const 127452) "a") (data (i32.const 127455) "a") (data (i32.const 127458) "a") (data (i32.const 127461) "a") (data (i32.const 127464) "a") (data (i32.const 127467) "a") (data (i32.const 127470) "a") (data (i32.const 127473) "a") (data (i32.const 127476) "a") (data (i32.const 127479) "a") (data (i32.const 127482) "a") (data (i32.const 127485) "a") (data (i32.const 127488) "a") (data (i32.const 127491) "a") (data (i32.const 127494) "a") (data (i32.const 127497) "a") (data (i32.const 127500) "a") (data (i32.const 127503) "a") (data (i32.const 127506) "a") (data (i32.const 127509) "a") (data (i32.const 127512) "a") (data (i32.const 127515) "a") (data (i32.const 127518) "a") (data (i32.const 127521) "a") (data (i32.const 127524) "a") (data (i32.const 127527) "a") (data (i32.const 127530) "a") (data (i32.const 127533) "a") (data (i32.const 127536) "a") (data (i32.const 127539) "a") (data (i32.const 127542) "a") (data (i32.const 127545) "a") (data (i32.const 127548) "a") (data (i32.const 127551) "a") (data (i32.const 127554) "a") (data (i32.const 127557) "a") (data (i32.const 127560) "a") (data (i32.const 127563) "a") (data (i32.const 127566) "a") (data (i32.const 127569) "a") (data (i32.const 127572) "a") (data (i32.const 127575) "a") (data (i32.const 127578) "a") (data (i32.const 127581) "a") (data (i32.const 127584) "a") (data (i32.const 127587) "a") (data (i32.const 127590) "a") (data (i32.const 127593) "a") (data (i32.const 127596) "a") (data (i32.const 127599) "a") (data (i32.const 127602) "a") (data (i32.const 127605) "a") (data (i32.const 127608) "a") (data (i32.const 127611) "a") (data (i32.const 127614) "a") (data (i32.const 127617) "a") (data (i32.const 127620) "a") (data (i32.const 127623) "a") (data (i32.const 127626) "a") (data (i32.const 127629) "a") (data (i32.const 127632) "a") (data (i32.const 127635) "a") (data (i32.const 127638) "a") (data (i32.const 127641) "a") (data (i32.const 127644) "a") (data (i32.const 127647) "a") (data (i32.const 127650) "a") (data (i32.const 127653) "a") (data (i32.const 127656) "a") (data (i32.const 127659) "a") (data (i32.const 127662) "a") (data (i32.const 127665) "a") (data (i32.const 127668) "a") (data (i32.const 127671) "a") (data (i32.const 127674) "a") (data (i32.const 127677) "a") (data (i32.const 127680) "a") (data (i32.const 127683) "a") (data (i32.const 127686) "a") (data (i32.const 127689) "a") (data (i32.const 127692) "a") (data (i32.const 127695) "a") (data (i32.const 127698) "a") (data (i32.const 127701) "a") (data (i32.const 127704) "a") (data (i32.const 127707) "a") (data (i32.const 127710) "a") (data (i32.const 127713) "a") (data (i32.const 127716) "a") (data (i32.const 127719) "a") (data (i32.const 127722) "a") (data (i32.const 127725) "a") (data (i32.const 127728) "a") (data (i32.const 127731) "a") (data (i32.const 127734) "a") (data (i32.const 127737) "a") (data (i32.const 127740) "a") (data (i32.const 127743) "a") (data (i32.const 127746) "a") (data (i32.const 127749) "a") (data (i32.const 127752) "a") (data (i32.const 127755) "a") (data (i32.const 127758) "a") (data (i32.const 127761) "a") (data (i32.const 127764) "a") (data (i32.const 127767) "a") (data (i32.const 127770) "a") (data (i32.const 127773) "a") (data (i32.const 127776) "a") (data (i32.const 127779) "a") (data (i32.const 127782) "a") (data (i32.const 127785) "a") (data (i32.const 127788) "a") (data (i32.const 127791) "a") (data (i32.const 127794) "a") (data (i32.const 127797) "a") (data (i32.const 127800) "a") (data (i32.const 127803) "a") (data (i32.const 127806) "a") (data (i32.const 127809) "a") (data (i32.const 127812) "a") (data (i32.const 127815) "a") (data (i32.const 127818) "a") (data (i32.const 127821) "a") (data (i32.const 127824) "a") (data (i32.const 127827) "a") (data (i32.const 127830) "a") (data (i32.const 127833) "a") (data (i32.const 127836) "a") (data (i32.const 127839) "a") (data (i32.const 127842) "a") (data (i32.const 127845) "a") (data (i32.const 127848) "a") (data (i32.const 127851) "a") (data (i32.const 127854) "a") (data (i32.const 127857) "a") (data (i32.const 127860) "a") (data (i32.const 127863) "a") (data (i32.const 127866) "a") (data (i32.const 127869) "a") (data (i32.const 127872) "a") (data (i32.const 127875) "a") (data (i32.const 127878) "a") (data (i32.const 127881) "a") (data (i32.const 127884) "a") (data (i32.const 127887) "a") (data (i32.const 127890) "a") (data (i32.const 127893) "a") (data (i32.const 127896) "a") (data (i32.const 127899) "a") (data (i32.const 127902) "a") (data (i32.const 127905) "a") (data (i32.const 127908) "a") (data (i32.const 127911) "a") (data (i32.const 127914) "a") (data (i32.const 127917) "a") (data (i32.const 127920) "a") (data (i32.const 127923) "a") (data (i32.const 127926) "a") (data (i32.const 127929) "a") (data (i32.const 127932) "a") (data (i32.const 127935) "a") (data (i32.const 127938) "a") (data (i32.const 127941) "a") (data (i32.const 127944) "a") (data (i32.const 127947) "a") (data (i32.const 127950) "a") (data (i32.const 127953) "a") (data (i32.const 127956) "a") (data (i32.const 127959) "a") (data (i32.const 127962) "a") (data (i32.const 127965) "a") (data (i32.const 127968) "a") (data (i32.const 127971) "a") (data (i32.const 127974) "a") (data (i32.const 127977) "a") (data (i32.const 127980) "a") (data (i32.const 127983) "a") (data (i32.const 127986) "a") (data (i32.const 127989) "a") (data (i32.const 127992) "a") (data (i32.const 127995) "a") (data (i32.const 127998) "a") (data (i32.const 128001) "a") (data (i32.const 128004) "a") (data (i32.const 128007) "a") (data (i32.const 128010) "a") (data (i32.const 128013) "a") (data (i32.const 128016) "a") (data (i32.const 128019) "a") (data (i32.const 128022) "a") (data (i32.const 128025) "a") (data (i32.const 128028) "a") (data (i32.const 128031) "a") (data (i32.const 128034) "a") (data (i32.const 128037) "a") (data (i32.const 128040) "a") (data (i32.const 128043) "a") (data (i32.const 128046) "a") (data (i32.const 128049) "a") (data (i32.const 128052) "a") (data (i32.const 128055) "a") (data (i32.const 128058) "a") (data (i32.const 128061) "a") (data (i32.const 128064) "a") (data (i32.const 128067) "a") (data (i32.const 128070) "a") (data (i32.const 128073) "a") (data (i32.const 128076) "a") (data (i32.const 128079) "a") (data (i32.const 128082) "a") (data (i32.const 128085) "a") (data (i32.const 128088) "a") (data (i32.const 128091) "a") (data (i32.const 128094) "a") (data (i32.const 128097) "a") (data (i32.const 128100) "a") (data (i32.const 128103) "a") (data (i32.const 128106) "a") (data (i32.const 128109) "a") (data (i32.const 128112) "a") (data (i32.const 128115) "a") (data (i32.const 128118) "a") (data (i32.const 128121) "a") (data (i32.const 128124) "a") (data (i32.const 128127) "a") (data (i32.const 128130) "a") (data (i32.const 128133) "a") (data (i32.const 128136) "a") (data (i32.const 128139) "a") (data (i32.const 128142) "a") (data (i32.const 128145) "a") (data (i32.const 128148) "a") (data (i32.const 128151) "a") (data (i32.const 128154) "a") (data (i32.const 128157) "a") (data (i32.const 128160) "a") (data (i32.const 128163) "a") (data (i32.const 128166) "a") (data (i32.const 128169) "a") (data (i32.const 128172) "a") (data (i32.const 128175) "a") (data (i32.const 128178) "a") (data (i32.const 128181) "a") (data (i32.const 128184) "a") (data (i32.const 128187) "a") (data (i32.const 128190) "a") (data (i32.const 128193) "a") (data (i32.const 128196) "a") (data (i32.const 128199) "a") (data (i32.const 128202) "a") (data (i32.const 128205) "a") (data (i32.const 128208) "a") (data (i32.const 128211) "a") (data (i32.const 128214) "a") (data (i32.const 128217) "a") (data (i32.const 128220) "a") (data (i32.const 128223) "a") (data (i32.const 128226) "a") (data (i32.const 128229) "a") (data (i32.const 128232) "a") (data (i32.const 128235) "a") (data (i32.const 128238) "a") (data (i32.const 128241) "a") (data (i32.const 128244) "a") (data (i32.const 128247) "a") (data (i32.const 128250) "a") (data (i32.const 128253) "a") (data (i32.const 128256) "a") (data (i32.const 128259) "a") (data (i32.const 128262) "a") (data (i32.const 128265) "a") (data (i32.const 128268) "a") (data (i32.const 128271) "a") (data (i32.const 128274) "a") (data (i32.const 128277) "a") (data (i32.const 128280) "a") (data (i32.const 128283) "a") (data (i32.const 128286) "a") (data (i32.const 128289) "a") (data (i32.const 128292) "a") (data (i32.const 128295) "a") (data (i32.const 128298) "a") (data (i32.const 128301) "a") (data (i32.const 128304) "a") (data (i32.const 128307) "a") (data (i32.const 128310) "a") (data (i32.const 128313) "a") (data (i32.const 128316) "a") (data (i32.const 128319) "a") (data (i32.const 128322) "a") (data (i32.const 128325) "a") (data (i32.const 128328) "a") (data (i32.const 128331) "a") (data (i32.const 128334) "a") (data (i32.const 128337) "a") (data (i32.const 128340) "a") (data (i32.const 128343) "a") (data (i32.const 128346) "a") (data (i32.const 128349) "a") (data (i32.const 128352) "a") (data (i32.const 128355) "a") (data (i32.const 128358) "a") (data (i32.const 128361) "a") (data (i32.const 128364) "a") (data (i32.const 128367) "a") (data (i32.const 128370) "a") (data (i32.const 128373) "a") (data (i32.const 128376) "a") (data (i32.const 128379) "a") (data (i32.const 128382) "a") (data (i32.const 128385) "a") (data (i32.const 128388) "a") (data (i32.const 128391) "a") (data (i32.const 128394) "a") (data (i32.const 128397) "a") (data (i32.const 128400) "a") (data (i32.const 128403) "a") (data (i32.const 128406) "a") (data (i32.const 128409) "a") (data (i32.const 128412) "a") (data (i32.const 128415) "a") (data (i32.const 128418) "a") (data (i32.const 128421) "a") (data (i32.const 128424) "a") (data (i32.const 128427) "a") (data (i32.const 128430) "a") (data (i32.const 128433) "a") (data (i32.const 128436) "a") (data (i32.const 128439) "a") (data (i32.const 128442) "a") (data (i32.const 128445) "a") (data (i32.const 128448) "a") (data (i32.const 128451) "a") (data (i32.const 128454) "a") (data (i32.const 128457) "a") (data (i32.const 128460) "a") (data (i32.const 128463) "a") (data (i32.const 128466) "a") (data (i32.const 128469) "a") (data (i32.const 128472) "a") (data (i32.const 128475) "a") (data (i32.const 128478) "a") (data (i32.const 128481) "a") (data (i32.const 128484) "a") (data (i32.const 128487) "a") (data (i32.const 128490) "a") (data (i32.const 128493) "a") (data (i32.const 128496) "a") (data (i32.const 128499) "a") (data (i32.const 128502) "a") (data (i32.const 128505) "a") (data (i32.const 128508) "a") (data (i32.const 128511) "a") (data (i32.const 128514) "a") (data (i32.const 128517) "a") (data (i32.const 128520) "a") (data (i32.const 128523) "a") (data (i32.const 128526) "a") (data (i32.const 128529) "a") (data (i32.const 128532) "a") (data (i32.const 128535) "a") (data (i32.const 128538) "a") (data (i32.const 128541) "a") (data (i32.const 128544) "a") (data (i32.const 128547) "a") (data (i32.const 128550) "a") (data (i32.const 128553) "a") (data (i32.const 128556) "a") (data (i32.const 128559) "a") (data (i32.const 128562) "a") (data (i32.const 128565) "a") (data (i32.const 128568) "a") (data (i32.const 128571) "a") (data (i32.const 128574) "a") (data (i32.const 128577) "a") (data (i32.const 128580) "a") (data (i32.const 128583) "a") (data (i32.const 128586) "a") (data (i32.const 128589) "a") (data (i32.const 128592) "a") (data (i32.const 128595) "a") (data (i32.const 128598) "a") (data (i32.const 128601) "a") (data (i32.const 128604) "a") (data (i32.const 128607) "a") (data (i32.const 128610) "a") (data (i32.const 128613) "a") (data (i32.const 128616) "a") (data (i32.const 128619) "a") (data (i32.const 128622) "a") (data (i32.const 128625) "a") (data (i32.const 128628) "a") (data (i32.const 128631) "a") (data (i32.const 128634) "a") (data (i32.const 128637) "a") (data (i32.const 128640) "a") (data (i32.const 128643) "a") (data (i32.const 128646) "a") (data (i32.const 128649) "a") (data (i32.const 128652) "a") (data (i32.const 128655) "a") (data (i32.const 128658) "a") (data (i32.const 128661) "a") (data (i32.const 128664) "a") (data (i32.const 128667) "a") (data (i32.const 128670) "a") (data (i32.const 128673) "a") (data (i32.const 128676) "a") (data (i32.const 128679) "a") (data (i32.const 128682) "a") (data (i32.const 128685) "a") (data (i32.const 128688) "a") (data (i32.const 128691) "a") (data (i32.const 128694) "a") (data (i32.const 128697) "a") (data (i32.const 128700) "a") (data (i32.const 128703) "a") (data (i32.const 128706) "a") (data (i32.const 128709) "a") (data (i32.const 128712) "a") (data (i32.const 128715) "a") (data (i32.const 128718) "a") (data (i32.const 128721) "a") (data (i32.const 128724) "a") (data (i32.const 128727) "a") (data (i32.const 128730) "a") (data (i32.const 128733) "a") (data (i32.const 128736) "a") (data (i32.const 128739) "a") (data (i32.const 128742) "a") (data (i32.const 128745) "a") (data (i32.const 128748) "a") (data (i32.const 128751) "a") (data (i32.const 128754) "a") (data (i32.const 128757) "a") (data (i32.const 128760) "a") (data (i32.const 128763) "a") (data (i32.const 128766) "a") (data (i32.const 128769) "a") (data (i32.const 128772) "a") (data (i32.const 128775) "a") (data (i32.const 128778) "a") (data (i32.const 128781) "a") (data (i32.const 128784) "a") (data (i32.const 128787) "a") (data (i32.const 128790) "a") (data (i32.const 128793) "a") (data (i32.const 128796) "a") (data (i32.const 128799) "a") (data (i32.const 128802) "a") (data (i32.const 128805) "a") (data (i32.const 128808) "a") (data (i32.const 128811) "a") (data (i32.const 128814) "a") (data (i32.const 128817) "a") (data (i32.const 128820) "a") (data (i32.const 128823) "a") (data (i32.const 128826) "a") (data (i32.const 128829) "a") (data (i32.const 128832) "a") (data (i32.const 128835) "a") (data (i32.const 128838) "a") (data (i32.const 128841) "a") (data (i32.const 128844) "a") (data (i32.const 128847) "a") (data (i32.const 128850) "a") (data (i32.const 128853) "a") (data (i32.const 128856) "a") (data (i32.const 128859) "a") (data (i32.const 128862) "a") (data (i32.const 128865) "a") (data (i32.const 128868) "a") (data (i32.const 128871) "a") (data (i32.const 128874) "a") (data (i32.const 128877) "a") (data (i32.const 128880) "a") (data (i32.const 128883) "a") (data (i32.const 128886) "a") (data (i32.const 128889) "a") (data (i32.const 128892) "a") (data (i32.const 128895) "a") (data (i32.const 128898) "a") (data (i32.const 128901) "a") (data (i32.const 128904) "a") (data (i32.const 128907) "a") (data (i32.const 128910) "a") (data (i32.const 128913) "a") (data (i32.const 128916) "a") (data (i32.const 128919) "a") (data (i32.const 128922) "a") (data (i32.const 128925) "a") (data (i32.const 128928) "a") (data (i32.const 128931) "a") (data (i32.const 128934) "a") (data (i32.const 128937) "a") (data (i32.const 128940) "a") (data (i32.const 128943) "a") (data (i32.const 128946) "a") (data (i32.const 128949) "a") (data (i32.const 128952) "a") (data (i32.const 128955) "a") (data (i32.const 128958) "a") (data (i32.const 128961) "a") (data (i32.const 128964) "a") (data (i32.const 128967) "a") (data (i32.const 128970) "a") (data (i32.const 128973) "a") (data (i32.const 128976) "a") (data (i32.const 128979) "a") (data (i32.const 128982) "a") (data (i32.const 128985) "a") (data (i32.const 128988) "a") (data (i32.const 128991) "a") (data (i32.const 128994) "a") (data (i32.const 128997) "a") (data (i32.const 129000) "a") (data (i32.const 129003) "a") (data (i32.const 129006) "a") (data (i32.const 129009) "a") (data (i32.const 129012) "a") (data (i32.const 129015) "a") (data (i32.const 129018) "a") (data (i32.const 129021) "a") (data (i32.const 129024) "a") (data (i32.const 129027) "a") (data (i32.const 129030) "a") (data (i32.const 129033) "a") (data (i32.const 129036) "a") (data (i32.const 129039) "a") (data (i32.const 129042) "a") (data (i32.const 129045) "a") (data (i32.const 129048) "a") (data (i32.const 129051) "a") (data (i32.const 129054) "a") (data (i32.const 129057) "a") (data (i32.const 129060) "a") (data (i32.const 129063) "a") (data (i32.const 129066) "a") (data (i32.const 129069) "a") (data (i32.const 129072) "a") (data (i32.const 129075) "a") (data (i32.const 129078) "a") (data (i32.const 129081) "a") (data (i32.const 129084) "a") (data (i32.const 129087) "a") (data (i32.const 129090) "a") (data (i32.const 129093) "a") (data (i32.const 129096) "a") (data (i32.const 129099) "a") (data (i32.const 129102) "a") (data (i32.const 129105) "a") (data (i32.const 129108) "a") (data (i32.const 129111) "a") (data (i32.const 129114) "a") (data (i32.const 129117) "a") (data (i32.const 129120) "a") (data (i32.const 129123) "a") (data (i32.const 129126) "a") (data (i32.const 129129) "a") (data (i32.const 129132) "a") (data (i32.const 129135) "a") (data (i32.const 129138) "a") (data (i32.const 129141) "a") (data (i32.const 129144) "a") (data (i32.const 129147) "a") (data (i32.const 129150) "a") (data (i32.const 129153) "a") (data (i32.const 129156) "a") (data (i32.const 129159) "a") (data (i32.const 129162) "a") (data (i32.const 129165) "a") (data (i32.const 129168) "a") (data (i32.const 129171) "a") (data (i32.const 129174) "a") (data (i32.const 129177) "a") (data (i32.const 129180) "a") (data (i32.const 129183) "a") (data (i32.const 129186) "a") (data (i32.const 129189) "a") (data (i32.const 129192) "a") (data (i32.const 129195) "a") (data (i32.const 129198) "a") (data (i32.const 129201) "a") (data (i32.const 129204) "a") (data (i32.const 129207) "a") (data (i32.const 129210) "a") (data (i32.const 129213) "a") (data (i32.const 129216) "a") (data (i32.const 129219) "a") (data (i32.const 129222) "a") (data (i32.const 129225) "a") (data (i32.const 129228) "a") (data (i32.const 129231) "a") (data (i32.const 129234) "a") (data (i32.const 129237) "a") (data (i32.const 129240) "a") (data (i32.const 129243) "a") (data (i32.const 129246) "a") (data (i32.const 129249) "a") (data (i32.const 129252) "a") (data (i32.const 129255) "a") (data (i32.const 129258) "a") (data (i32.const 129261) "a") (data (i32.const 129264) "a") (data (i32.const 129267) "a") (data (i32.const 129270) "a") (data (i32.const 129273) "a") (data (i32.const 129276) "a") (data (i32.const 129279) "a") (data (i32.const 129282) "a") (data (i32.const 129285) "a") (data (i32.const 129288) "a") (data (i32.const 129291) "a") (data (i32.const 129294) "a") (data (i32.const 129297) "a") (data (i32.const 129300) "a") (data (i32.const 129303) "a") (data (i32.const 129306) "a") (data (i32.const 129309) "a") (data (i32.const 129312) "a") (data (i32.const 129315) "a") (data (i32.const 129318) "a") (data (i32.const 129321) "a") (data (i32.const 129324) "a") (data (i32.const 129327) "a") (data (i32.const 129330) "a") (data (i32.const 129333) "a") (data (i32.const 129336) "a") (data (i32.const 129339) "a") (data (i32.const 129342) "a") (data (i32.const 129345) "a") (data (i32.const 129348) "a") (data (i32.const 129351) "a") (data (i32.const 129354) "a") (data (i32.const 129357) "a") (data (i32.const 129360) "a") (data (i32.const 129363) "a") (data (i32.const 129366) "a") (data (i32.const 129369) "a") (data (i32.const 129372) "a") (data (i32.const 129375) "a") (data (i32.const 129378) "a") (data (i32.const 129381) "a") (data (i32.const 129384) "a") (data (i32.const 129387) "a") (data (i32.const 129390) "a") (data (i32.const 129393) "a") (data (i32.const 129396) "a") (data (i32.const 129399) "a") (data (i32.const 129402) "a") (data (i32.const 129405) "a") (data (i32.const 129408) "a") (data (i32.const 129411) "a") (data (i32.const 129414) "a") (data (i32.const 129417) "a") (data (i32.const 129420) "a") (data (i32.const 129423) "a") (data (i32.const 129426) "a") (data (i32.const 129429) "a") (data (i32.const 129432) "a") (data (i32.const 129435) "a") (data (i32.const 129438) "a") (data (i32.const 129441) "a") (data (i32.const 129444) "a") (data (i32.const 129447) "a") (data (i32.const 129450) "a") (data (i32.const 129453) "a") (data (i32.const 129456) "a") (data (i32.const 129459) "a") (data (i32.const 129462) "a") (data (i32.const 129465) "a") (data (i32.const 129468) "a") (data (i32.const 129471) "a") (data (i32.const 129474) "a") (data (i32.const 129477) "a") (data (i32.const 129480) "a") (data (i32.const 129483) "a") (data (i32.const 129486) "a") (data (i32.const 129489) "a") (data (i32.const 129492) "a") (data (i32.const 129495) "a") (data (i32.const 129498) "a") (data (i32.const 129501) "a") (data (i32.const 129504) "a") (data (i32.const 129507) "a") (data (i32.const 129510) "a") (data (i32.const 129513) "a") (data (i32.const 129516) "a") (data (i32.const 129519) "a") (data (i32.const 129522) "a") (data (i32.const 129525) "a") (data (i32.const 129528) "a") (data (i32.const 129531) "a") (data (i32.const 129534) "a") (data (i32.const 129537) "a") (data (i32.const 129540) "a") (data (i32.const 129543) "a") (data (i32.const 129546) "a") (data (i32.const 129549) "a") (data (i32.const 129552) "a") (data (i32.const 129555) "a") (data (i32.const 129558) "a") (data (i32.const 129561) "a") (data (i32.const 129564) "a") (data (i32.const 129567) "a") (data (i32.const 129570) "a") (data (i32.const 129573) "a") (data (i32.const 129576) "a") (data (i32.const 129579) "a") (data (i32.const 129582) "a") (data (i32.const 129585) "a") (data (i32.const 129588) "a") (data (i32.const 129591) "a") (data (i32.const 129594) "a") (data (i32.const 129597) "a") (data (i32.const 129600) "a") (data (i32.const 129603) "a") (data (i32.const 129606) "a") (data (i32.const 129609) "a") (data (i32.const 129612) "a") (data (i32.const 129615) "a") (data (i32.const 129618) "a") (data (i32.const 129621) "a") (data (i32.const 129624) "a") (data (i32.const 129627) "a") (data (i32.const 129630) "a") (data (i32.const 129633) "a") (data (i32.const 129636) "a") (data (i32.const 129639) "a") (data (i32.const 129642) "a") (data (i32.const 129645) "a") (data (i32.const 129648) "a") (data (i32.const 129651) "a") (data (i32.const 129654) "a") (data (i32.const 129657) "a") (data (i32.const 129660) "a") (data (i32.const 129663) "a") (data (i32.const 129666) "a") (data (i32.const 129669) "a") (data (i32.const 129672) "a") (data (i32.const 129675) "a") (data (i32.const 129678) "a") (data (i32.const 129681) "a") (data (i32.const 129684) "a") (data (i32.const 129687) "a") (data (i32.const 129690) "a") (data (i32.const 129693) "a") (data (i32.const 129696) "a") (data (i32.const 129699) "a") (data (i32.const 129702) "a") (data (i32.const 129705) "a") (data (i32.const 129708) "a") (data (i32.const 129711) "a") (data (i32.const 129714) "a") (data (i32.const 129717) "a") (data (i32.const 129720) "a") (data (i32.const 129723) "a") (data (i32.const 129726) "a") (data (i32.const 129729) "a") (data (i32.const 129732) "a") (data (i32.const 129735) "a") (data (i32.const 129738) "a") (data (i32.const 129741) "a") (data (i32.const 129744) "a") (data (i32.const 129747) "a") (data (i32.const 129750) "a") (data (i32.const 129753) "a") (data (i32.const 129756) "a") (data (i32.const 129759) "a") (data (i32.const 129762) "a") (data (i32.const 129765) "a") (data (i32.const 129768) "a") (data (i32.const 129771) "a") (data (i32.const 129774) "a") (data (i32.const 129777) "a") (data (i32.const 129780) "a") (data (i32.const 129783) "a") (data (i32.const 129786) "a") (data (i32.const 129789) "a") (data (i32.const 129792) "a") (data (i32.const 129795) "a") (data (i32.const 129798) "a") (data (i32.const 129801) "a") (data (i32.const 129804) "a") (data (i32.const 129807) "a") (data (i32.const 129810) "a") (data (i32.const 129813) "a") (data (i32.const 129816) "a") (data (i32.const 129819) "a") (data (i32.const 129822) "a") (data (i32.const 129825) "a") (data (i32.const 129828) "a") (data (i32.const 129831) "a") (data (i32.const 129834) "a") (data (i32.const 129837) "a") (data (i32.const 129840) "a") (data (i32.const 129843) "a") (data (i32.const 129846) "a") (data (i32.const 129849) "a") (data (i32.const 129852) "a") (data (i32.const 129855) "a") (data (i32.const 129858) "a") (data (i32.const 129861) "a") (data (i32.const 129864) "a") (data (i32.const 129867) "a") (data (i32.const 129870) "a") (data (i32.const 129873) "a") (data (i32.const 129876) "a") (data (i32.const 129879) "a") (data (i32.const 129882) "a") (data (i32.const 129885) "a") (data (i32.const 129888) "a") (data (i32.const 129891) "a") (data (i32.const 129894) "a") (data (i32.const 129897) "a") (data (i32.const 129900) "a") (data (i32.const 129903) "a") (data (i32.const 129906) "a") (data (i32.const 129909) "a") (data (i32.const 129912) "a") (data (i32.const 129915) "a") (data (i32.const 129918) "a") (data (i32.const 129921) "a") (data (i32.const 129924) "a") (data (i32.const 129927) "a") (data (i32.const 129930) "a") (data (i32.const 129933) "a") (data (i32.const 129936) "a") (data (i32.const 129939) "a") (data (i32.const 129942) "a") (data (i32.const 129945) "a") (data (i32.const 129948) "a") (data (i32.const 129951) "a") (data (i32.const 129954) "a") (data (i32.const 129957) "a") (data (i32.const 129960) "a") (data (i32.const 129963) "a") (data (i32.const 129966) "a") (data (i32.const 129969) "a") (data (i32.const 129972) "a") (data (i32.const 129975) "a") (data (i32.const 129978) "a") (data (i32.const 129981) "a") (data (i32.const 129984) "a") (data (i32.const 129987) "a") (data (i32.const 129990) "a") (data (i32.const 129993) "a") (data (i32.const 129996) "a") (data (i32.const 129999) "a") (data (i32.const 130002) "a") (data (i32.const 130005) "a") (data (i32.const 130008) "a") (data (i32.const 130011) "a") (data (i32.const 130014) "a") (data (i32.const 130017) "a") (data (i32.const 130020) "a") (data (i32.const 130023) "a") (data (i32.const 130026) "a") (data (i32.const 130029) "a") (data (i32.const 130032) "a") (data (i32.const 130035) "a") (data (i32.const 130038) "a") (data (i32.const 130041) "a") (data (i32.const 130044) "a") (data (i32.const 130047) "a") (data (i32.const 130050) "a") (data (i32.const 130053) "a") (data (i32.const 130056) "a") (data (i32.const 130059) "a") (data (i32.const 130062) "a") (data (i32.const 130065) "a") (data (i32.const 130068) "a") (data (i32.const 130071) "a") (data (i32.const 130074) "a") (data (i32.const 130077) "a") (data (i32.const 130080) "a") (data (i32.const 130083) "a") (data (i32.const 130086) "a") (data (i32.const 130089) "a") (data (i32.const 130092) "a") (data (i32.const 130095) "a") (data (i32.const 130098) "a") (data (i32.const 130101) "a") (data (i32.const 130104) "a") (data (i32.const 130107) "a") (data (i32.const 130110) "a") (data (i32.const 130113) "a") (data (i32.const 130116) "a") (data (i32.const 130119) "a") (data (i32.const 130122) "a") (data (i32.const 130125) "a") (data (i32.const 130128) "a") (data (i32.const 130131) "a") (data (i32.const 130134) "a") (data (i32.const 130137) "a") (data (i32.const 130140) "a") (data (i32.const 130143) "a") (data (i32.const 130146) "a") (data (i32.const 130149) "a") (data (i32.const 130152) "a") (data (i32.const 130155) "a") (data (i32.const 130158) "a") (data (i32.const 130161) "a") (data (i32.const 130164) "a") (data (i32.const 130167) "a") (data (i32.const 130170) "a") (data (i32.const 130173) "a") (data (i32.const 130176) "a") (data (i32.const 130179) "a") (data (i32.const 130182) "a") (data (i32.const 130185) "a") (data (i32.const 130188) "a") (data (i32.const 130191) "a") (data (i32.const 130194) "a") (data (i32.const 130197) "a") (data (i32.const 130200) "a") (data (i32.const 130203) "a") (data (i32.const 130206) "a") (data (i32.const 130209) "a") (data (i32.const 130212) "a") (data (i32.const 130215) "a") (data (i32.const 130218) "a") (data (i32.const 130221) "a") (data (i32.const 130224) "a") (data (i32.const 130227) "a") (data (i32.const 130230) "a") (data (i32.const 130233) "a") (data (i32.const 130236) "a") (data (i32.const 130239) "a") (data (i32.const 130242) "a") (data (i32.const 130245) "a") (data (i32.const 130248) "a") (data (i32.const 130251) "a") (data (i32.const 130254) "a") (data (i32.const 130257) "a") (data (i32.const 130260) "a") (data (i32.const 130263) "a") (data (i32.const 130266) "a") (data (i32.const 130269) "a") (data (i32.const 130272) "a") (data (i32.const 130275) "a") (data (i32.const 130278) "a") (data (i32.const 130281) "a") (data (i32.const 130284) "a") (data (i32.const 130287) "a") (data (i32.const 130290) "a") (data (i32.const 130293) "a") (data (i32.const 130296) "a") (data (i32.const 130299) "a") (data (i32.const 130302) "a") (data (i32.const 130305) "a") (data (i32.const 130308) "a") (data (i32.const 130311) "a") (data (i32.const 130314) "a") (data (i32.const 130317) "a") (data (i32.const 130320) "a") (data (i32.const 130323) "a") (data (i32.const 130326) "a") (data (i32.const 130329) "a") (data (i32.const 130332) "a") (data (i32.const 130335) "a") (data (i32.const 130338) "a") (data (i32.const 130341) "a") (data (i32.const 130344) "a") (data (i32.const 130347) "a") (data (i32.const 130350) "a") (data (i32.const 130353) "a") (data (i32.const 130356) "a") (data (i32.const 130359) "a") (data (i32.const 130362) "a") (data (i32.const 130365) "a") (data (i32.const 130368) "a") (data (i32.const 130371) "a") (data (i32.const 130374) "a") (data (i32.const 130377) "a") (data (i32.const 130380) "a") (data (i32.const 130383) "a") (data (i32.const 130386) "a") (data (i32.const 130389) "a") (data (i32.const 130392) "a") (data (i32.const 130395) "a") (data (i32.const 130398) "a") (data (i32.const 130401) "a") (data (i32.const 130404) "a") (data (i32.const 130407) "a") (data (i32.const 130410) "a") (data (i32.const 130413) "a") (data (i32.const 130416) "a") (data (i32.const 130419) "a") (data (i32.const 130422) "a") (data (i32.const 130425) "a") (data (i32.const 130428) "a") (data (i32.const 130431) "a") (data (i32.const 130434) "a") (data (i32.const 130437) "a") (data (i32.const 130440) "a") (data (i32.const 130443) "a") (data (i32.const 130446) "a") (data (i32.const 130449) "a") (data (i32.const 130452) "a") (data (i32.const 130455) "a") (data (i32.const 130458) "a") (data (i32.const 130461) "a") (data (i32.const 130464) "a") (data (i32.const 130467) "a") (data (i32.const 130470) "a") (data (i32.const 130473) "a") (data (i32.const 130476) "a") (data (i32.const 130479) "a") (data (i32.const 130482) "a") (data (i32.const 130485) "a") (data (i32.const 130488) "a") (data (i32.const 130491) "a") (data (i32.const 130494) "a") (data (i32.const 130497) "a") (data (i32.const 130500) "a") (data (i32.const 130503) "a") (data (i32.const 130506) "a") (data (i32.const 130509) "a") (data (i32.const 130512) "a") (data (i32.const 130515) "a") (data (i32.const 130518) "a") (data (i32.const 130521) "a") (data (i32.const 130524) "a") (data (i32.const 130527) "a") (data (i32.const 130530) "a") (data (i32.const 130533) "a") (data (i32.const 130536) "a") (data (i32.const 130539) "a") (data (i32.const 130542) "a") (data (i32.const 130545) "a") (data (i32.const 130548) "a") (data (i32.const 130551) "a") (data (i32.const 130554) "a") (data (i32.const 130557) "a") (data (i32.const 130560) "a") (data (i32.const 130563) "a") (data (i32.const 130566) "a") (data (i32.const 130569) "a") (data (i32.const 130572) "a") (data (i32.const 130575) "a") (data (i32.const 130578) "a") (data (i32.const 130581) "a") (data (i32.const 130584) "a") (data (i32.const 130587) "a") (data (i32.const 130590) "a") (data (i32.const 130593) "a") (data (i32.const 130596) "a") (data (i32.const 130599) "a") (data (i32.const 130602) "a") (data (i32.const 130605) "a") (data (i32.const 130608) "a") (data (i32.const 130611) "a") (data (i32.const 130614) "a") (data (i32.const 130617) "a") (data (i32.const 130620) "a") (data (i32.const 130623) "a") (data (i32.const 130626) "a") (data (i32.const 130629) "a") (data (i32.const 130632) "a") (data (i32.const 130635) "a") (data (i32.const 130638) "a") (data (i32.const 130641) "a") (data (i32.const 130644) "a") (data (i32.const 130647) "a") (data (i32.const 130650) "a") (data (i32.const 130653) "a") (data (i32.const 130656) "a") (data (i32.const 130659) "a") (data (i32.const 130662) "a") (data (i32.const 130665) "a") (data (i32.const 130668) "a") (data (i32.const 130671) "a") (data (i32.const 130674) "a") (data (i32.const 130677) "a") (data (i32.const 130680) "a") (data (i32.const 130683) "a") (data (i32.const 130686) "a") (data (i32.const 130689) "a") (data (i32.const 130692) "a") (data (i32.const 130695) "a") (data (i32.const 130698) "a") (data (i32.const 130701) "a") (data (i32.const 130704) "a") (data (i32.const 130707) "a") (data (i32.const 130710) "a") (data (i32.const 130713) "a") (data (i32.const 130716) "a") (data (i32.const 130719) "a") (data (i32.const 130722) "a") (data (i32.const 130725) "a") (data (i32.const 130728) "a") (data (i32.const 130731) "a") (data (i32.const 130734) "a") (data (i32.const 130737) "a") (data (i32.const 130740) "a") (data (i32.const 130743) "a") (data (i32.const 130746) "a") (data (i32.const 130749) "a") (data (i32.const 130752) "a") (data (i32.const 130755) "a") (data (i32.const 130758) "a") (data (i32.const 130761) "a") (data (i32.const 130764) "a") (data (i32.const 130767) "a") (data (i32.const 130770) "a") (data (i32.const 130773) "a") (data (i32.const 130776) "a") (data (i32.const 130779) "a") (data (i32.const 130782) "a") (data (i32.const 130785) "a") (data (i32.const 130788) "a") (data (i32.const 130791) "a") (data (i32.const 130794) "a") (data (i32.const 130797) "a") (data (i32.const 130800) "a") (data (i32.const 130803) "a") (data (i32.const 130806) "a") (data (i32.const 130809) "a") (data (i32.const 130812) "a") (data (i32.const 130815) "a") (data (i32.const 130818) "a") (data (i32.const 130821) "a") (data (i32.const 130824) "a") (data (i32.const 130827) "a") (data (i32.const 130830) "a") (data (i32.const 130833) "a") (data (i32.const 130836) "a") (data (i32.const 130839) "a") (data (i32.const 130842) "a") (data (i32.const 130845) "a") (data (i32.const 130848) "a") (data (i32.const 130851) "a") (data (i32.const 130854) "a") (data (i32.const 130857) "a") (data (i32.const 130860) "a") (data (i32.const 130863) "a") (data (i32.const 130866) "a") (data (i32.const 130869) "a") (data (i32.const 130872) "a") (data (i32.const 130875) "a") (data (i32.const 130878) "a") (data (i32.const 130881) "a") (data (i32.const 130884) "a") (data (i32.const 130887) "a") (data (i32.const 130890) "a") (data (i32.const 130893) "a") (data (i32.const 130896) "a") (data (i32.const 130899) "a") (data (i32.const 130902) "a") (data (i32.const 130905) "a") (data (i32.const 130908) "a") (data (i32.const 130911) "a") (data (i32.const 130914) "a") (data (i32.const 130917) "a") (data (i32.const 130920) "a") (data (i32.const 130923) "a") (data (i32.const 130926) "a") (data (i32.const 130929) "a") (data (i32.const 130932) "a") (data (i32.const 130935) "a") (data (i32.const 130938) "a") (data (i32.const 130941) "a") (data (i32.const 130944) "a") (data (i32.const 130947) "a") (data (i32.const 130950) "a") (data (i32.const 130953) "a") (data (i32.const 130956) "a") (data (i32.const 130959) "a") (data (i32.const 130962) "a") (data (i32.const 130965) "a") (data (i32.const 130968) "a") (data (i32.const 130971) "a") (data (i32.const 130974) "a") (data (i32.const 130977) "a") (data (i32.const 130980) "a") (data (i32.const 130983) "a") (data (i32.const 130986) "a") (data (i32.const 130989) "a") (data (i32.const 130992) "a") (data (i32.const 130995) "a") (data (i32.const 130998) "a") (data (i32.const 131001) "a") (data (i32.const 131004) "a") (data (i32.const 131007) "a") (data (i32.const 131010) "a") (data (i32.const 131013) "a") (data (i32.const 131016) "a") (data (i32.const 131019) "a") (data (i32.const 131022) "a") (data (i32.const 131025) "a") (data (i32.const 131028) "a") (data (i32.const 131031) "a") (data (i32.const 131034) "a") (data (i32.const 131037) "a") (data (i32.const 131040) "a") (data (i32.const 131043) "a") (data (i32.const 131046) "a") (data (i32.const 131049) "a") (data (i32.const 131052) "a") (data (i32.const 131055) "a") (data (i32.const 131058) "a") (data (i32.const 131061) "a") (data (i32.const 131064) "a") (data (i32.const 131067) "a") (data (i32.const 131070) "a") (data (i32.const 131073) "a") (data (i32.const 131076) "a") (data (i32.const 131079) "a") (data (i32.const 131082) "a") (data (i32.const 131085) "a") (data (i32.const 131088) "a") (data (i32.const 131091) "a") (data (i32.const 131094) "a") (data (i32.const 131097) "a") (data (i32.const 131100) "a") (data (i32.const 131103) "a") (data (i32.const 131106) "a") (data (i32.const 131109) "a") (data (i32.const 131112) "a") (data (i32.const 131115) "a") (data (i32.const 131118) "a") (data (i32.const 131121) "a") (data (i32.const 131124) "a") (data (i32.const 131127) "a") (data (i32.const 131130) "a") (data (i32.const 131133) "a") (data (i32.const 131136) "a") (data (i32.const 131139) "a") (data (i32.const 131142) "a") (data (i32.const 131145) "a") (data (i32.const 131148) "a") (data (i32.const 131151) "a") (data (i32.const 131154) "a") (data (i32.const 131157) "a") (data (i32.const 131160) "a") (data (i32.const 131163) "a") (data (i32.const 131166) "a") (data (i32.const 131169) "a") (data (i32.const 131172) "a") (data (i32.const 131175) "a") (data (i32.const 131178) "a") (data (i32.const 131181) "a") (data (i32.const 131184) "a") (data (i32.const 131187) "a") (data (i32.const 131190) "a") (data (i32.const 131193) "a") (data (i32.const 131196) "a") (data (i32.const 131199) "a") (data (i32.const 131202) "a") (data (i32.const 131205) "a") (data (i32.const 131208) "a") (data (i32.const 131211) "a") (data (i32.const 131214) "a") (data (i32.const 131217) "a") (data (i32.const 131220) "a") (data (i32.const 131223) "a") (data (i32.const 131226) "a") (data (i32.const 131229) "a") (data (i32.const 131232) "a") (data (i32.const 131235) "a") (data (i32.const 131238) "a") (data (i32.const 131241) "a") (data (i32.const 131244) "a") (data (i32.const 131247) "a") (data (i32.const 131250) "a") (data (i32.const 131253) "a") (data (i32.const 131256) "a") (data (i32.const 131259) "a") (data (i32.const 131262) "a") (data (i32.const 131265) "a") (data (i32.const 131268) "a") (data (i32.const 131271) "a") (data (i32.const 131274) "a") (data (i32.const 131277) "a") (data (i32.const 131280) "a") (data (i32.const 131283) "a") (data (i32.const 131286) "a") (data (i32.const 131289) "a") (data (i32.const 131292) "a") (data (i32.const 131295) "a") (data (i32.const 131298) "a") (data (i32.const 131301) "a") (data (i32.const 131304) "a") (data (i32.const 131307) "a") (data (i32.const 131310) "a") (data (i32.const 131313) "a") (data (i32.const 131316) "a") (data (i32.const 131319) "a") (data (i32.const 131322) "a") (data (i32.const 131325) "a") (data (i32.const 131328) "a") (data (i32.const 131331) "a") (data (i32.const 131334) "a") (data (i32.const 131337) "a") (data (i32.const 131340) "a") (data (i32.const 131343) "a") (data (i32.const 131346) "a") (data (i32.const 131349) "a") (data (i32.const 131352) "a") (data (i32.const 131355) "a") (data (i32.const 131358) "a") (data (i32.const 131361) "a") (data (i32.const 131364) "a") (data (i32.const 131367) "a") (data (i32.const 131370) "a") (data (i32.const 131373) "a") (data (i32.const 131376) "a") (data (i32.const 131379) "a") (data (i32.const 131382) "a") (data (i32.const 131385) "a") (data (i32.const 131388) "a") (data (i32.const 131391) "a") (data (i32.const 131394) "a") (data (i32.const 131397) "a") (data (i32.const 131400) "a") (data (i32.const 131403) "a") (data (i32.const 131406) "a") (data (i32.const 131409) "a") (data (i32.const 131412) "a") (data (i32.const 131415) "a") (data (i32.const 131418) "a") (data (i32.const 131421) "a") (data (i32.const 131424) "a") (data (i32.const 131427) "a") (data (i32.const 131430) "a") (data (i32.const 131433) "a") (data (i32.const 131436) "a") (data (i32.const 131439) "a") (data (i32.const 131442) "a") (data (i32.const 131445) "a") (data (i32.const 131448) "a") (data (i32.const 131451) "a") (data (i32.const 131454) "a") (data (i32.const 131457) "a") (data (i32.const 131460) "a") (data (i32.const 131463) "a") (data (i32.const 131466) "a") (data (i32.const 131469) "a") (data (i32.const 131472) "a") (data (i32.const 131475) "a") (data (i32.const 131478) "a") (data (i32.const 131481) "a") (data (i32.const 131484) "a") (data (i32.const 131487) "a") (data (i32.const 131490) "a") (data (i32.const 131493) "a") (data (i32.const 131496) "a") (data (i32.const 131499) "a") (data (i32.const 131502) "a") (data (i32.const 131505) "a") (data (i32.const 131508) "a") (data (i32.const 131511) "a") (data (i32.const 131514) "a") (data (i32.const 131517) "a") (data (i32.const 131520) "a") (data (i32.const 131523) "a") (data (i32.const 131526) "a") (data (i32.const 131529) "a") (data (i32.const 131532) "a") (data (i32.const 131535) "a") (data (i32.const 131538) "a") (data (i32.const 131541) "a") (data (i32.const 131544) "a") (data (i32.const 131547) "a") (data (i32.const 131550) "a") (data (i32.const 131553) "a") (data (i32.const 131556) "a") (data (i32.const 131559) "a") (data (i32.const 131562) "a") (data (i32.const 131565) "a") (data (i32.const 131568) "a") (data (i32.const 131571) "a") (data (i32.const 131574) "a") (data (i32.const 131577) "a") (data (i32.const 131580) "a") (data (i32.const 131583) "a") (data (i32.const 131586) "a") (data (i32.const 131589) "a") (data (i32.const 131592) "a") (data (i32.const 131595) "a") (data (i32.const 131598) "a") (data (i32.const 131601) "a") (data (i32.const 131604) "a") (data (i32.const 131607) "a") (data (i32.const 131610) "a") (data (i32.const 131613) "a") (data (i32.const 131616) "a") (data (i32.const 131619) "a") (data (i32.const 131622) "a") (data (i32.const 131625) "a") (data (i32.const 131628) "a") (data (i32.const 131631) "a") (data (i32.const 131634) "a") (data (i32.const 131637) "a") (data (i32.const 131640) "a") (data (i32.const 131643) "a") (data (i32.const 131646) "a") (data (i32.const 131649) "a") (data (i32.const 131652) "a") (data (i32.const 131655) "a") (data (i32.const 131658) "a") (data (i32.const 131661) "a") (data (i32.const 131664) "a") (data (i32.const 131667) "a") (data (i32.const 131670) "a") (data (i32.const 131673) "a") (data (i32.const 131676) "a") (data (i32.const 131679) "a") (data (i32.const 131682) "a") (data (i32.const 131685) "a") (data (i32.const 131688) "a") (data (i32.const 131691) "a") (data (i32.const 131694) "a") (data (i32.const 131697) "a") (data (i32.const 131700) "a") (data (i32.const 131703) "a") (data (i32.const 131706) "a") (data (i32.const 131709) "a") (data (i32.const 131712) "a") (data (i32.const 131715) "a") (data (i32.const 131718) "a") (data (i32.const 131721) "a") (data (i32.const 131724) "a") (data (i32.const 131727) "a") (data (i32.const 131730) "a") (data (i32.const 131733) "a") (data (i32.const 131736) "a") (data (i32.const 131739) "a") (data (i32.const 131742) "a") (data (i32.const 131745) "a") (data (i32.const 131748) "a") (data (i32.const 131751) "a") (data (i32.const 131754) "a") (data (i32.const 131757) "a") (data (i32.const 131760) "a") (data (i32.const 131763) "a") (data (i32.const 131766) "a") (data (i32.const 131769) "a") (data (i32.const 131772) "a") (data (i32.const 131775) "a") (data (i32.const 131778) "a") (data (i32.const 131781) "a") (data (i32.const 131784) "a") (data (i32.const 131787) "a") (data (i32.const 131790) "a") (data (i32.const 131793) "a") (data (i32.const 131796) "a") (data (i32.const 131799) "a") (data (i32.const 131802) "a") (data (i32.const 131805) "a") (data (i32.const 131808) "a") (data (i32.const 131811) "a") (data (i32.const 131814) "a") (data (i32.const 131817) "a") (data (i32.const 131820) "a") (data (i32.const 131823) "a") (data (i32.const 131826) "a") (data (i32.const 131829) "a") (data (i32.const 131832) "a") (data (i32.const 131835) "a") (data (i32.const 131838) "a") (data (i32.const 131841) "a") (data (i32.const 131844) "a") (data (i32.const 131847) "a") (data (i32.const 131850) "a") (data (i32.const 131853) "a") (data (i32.const 131856) "a") (data (i32.const 131859) "a") (data (i32.const 131862) "a") (data (i32.const 131865) "a") (data (i32.const 131868) "a") (data (i32.const 131871) "a") (data (i32.const 131874) "a") (data (i32.const 131877) "a") (data (i32.const 131880) "a") (data (i32.const 131883) "a") (data (i32.const 131886) "a") (data (i32.const 131889) "a") (data (i32.const 131892) "a") (data (i32.const 131895) "a") (data (i32.const 131898) "a") (data (i32.const 131901) "a") (data (i32.const 131904) "a") (data (i32.const 131907) "a") (data (i32.const 131910) "a") (data (i32.const 131913) "a") (data (i32.const 131916) "a") (data (i32.const 131919) "a") (data (i32.const 131922) "a") (data (i32.const 131925) "a") (data (i32.const 131928) "a") (data (i32.const 131931) "a") (data (i32.const 131934) "a") (data (i32.const 131937) "a") (data (i32.const 131940) "a") (data (i32.const 131943) "a") (data (i32.const 131946) "a") (data (i32.const 131949) "a") (data (i32.const 131952) "a") (data (i32.const 131955) "a") (data (i32.const 131958) "a") (data (i32.const 131961) "a") (data (i32.const 131964) "a") (data (i32.const 131967) "a") (data (i32.const 131970) "a") (data (i32.const 131973) "a") (data (i32.const 131976) "a") (data (i32.const 131979) "a") (data (i32.const 131982) "a") (data (i32.const 131985) "a") (data (i32.const 131988) "a") (data (i32.const 131991) "a") (data (i32.const 131994) "a") (data (i32.const 131997) "a") (data (i32.const 132000) "a") (data (i32.const 132003) "a") (data (i32.const 132006) "a") (data (i32.const 132009) "a") (data (i32.const 132012) "a") (data (i32.const 132015) "a") (data (i32.const 132018) "a") (data (i32.const 132021) "a") (data (i32.const 132024) "a") (data (i32.const 132027) "a") (data (i32.const 132030) "a") (data (i32.const 132033) "a") (data (i32.const 132036) "a") (data (i32.const 132039) "a") (data (i32.const 132042) "a") (data (i32.const 132045) "a") (data (i32.const 132048) "a") (data (i32.const 132051) "a") (data (i32.const 132054) "a") (data (i32.const 132057) "a") (data (i32.const 132060) "a") (data (i32.const 132063) "a") (data (i32.const 132066) "a") (data (i32.const 132069) "a") (data (i32.const 132072) "a") (data (i32.const 132075) "a") (data (i32.const 132078) "a") (data (i32.const 132081) "a") (data (i32.const 132084) "a") (data (i32.const 132087) "a") (data (i32.const 132090) "a") (data (i32.const 132093) "a") (data (i32.const 132096) "a") (data (i32.const 132099) "a") (data (i32.const 132102) "a") (data (i32.const 132105) "a") (data (i32.const 132108) "a") (data (i32.const 132111) "a") (data (i32.const 132114) "a") (data (i32.const 132117) "a") (data (i32.const 132120) "a") (data (i32.const 132123) "a") (data (i32.const 132126) "a") (data (i32.const 132129) "a") (data (i32.const 132132) "a") (data (i32.const 132135) "a") (data (i32.const 132138) "a") (data (i32.const 132141) "a") (data (i32.const 132144) "a") (data (i32.const 132147) "a") (data (i32.const 132150) "a") (data (i32.const 132153) "a") (data (i32.const 132156) "a") (data (i32.const 132159) "a") (data (i32.const 132162) "a") (data (i32.const 132165) "a") (data (i32.const 132168) "a") (data (i32.const 132171) "a") (data (i32.const 132174) "a") (data (i32.const 132177) "a") (data (i32.const 132180) "a") (data (i32.const 132183) "a") (data (i32.const 132186) "a") (data (i32.const 132189) "a") (data (i32.const 132192) "a") (data (i32.const 132195) "a") (data (i32.const 132198) "a") (data (i32.const 132201) "a") (data (i32.const 132204) "a") (data (i32.const 132207) "a") (data (i32.const 132210) "a") (data (i32.const 132213) "a") (data (i32.const 132216) "a") (data (i32.const 132219) "a") (data (i32.const 132222) "a") (data (i32.const 132225) "a") (data (i32.const 132228) "a") (data (i32.const 132231) "a") (data (i32.const 132234) "a") (data (i32.const 132237) "a") (data (i32.const 132240) "a") (data (i32.const 132243) "a") (data (i32.const 132246) "a") (data (i32.const 132249) "a") (data (i32.const 132252) "a") (data (i32.const 132255) "a") (data (i32.const 132258) "a") (data (i32.const 132261) "a") (data (i32.const 132264) "a") (data (i32.const 132267) "a") (data (i32.const 132270) "a") (data (i32.const 132273) "a") (data (i32.const 132276) "a") (data (i32.const 132279) "a") (data (i32.const 132282) "a") (data (i32.const 132285) "a") (data (i32.const 132288) "a") (data (i32.const 132291) "a") (data (i32.const 132294) "a") (data (i32.const 132297) "a") (data (i32.const 132300) "a") (data (i32.const 132303) "a") (data (i32.const 132306) "a") (data (i32.const 132309) "a") (data (i32.const 132312) "a") (data (i32.const 132315) "a") (data (i32.const 132318) "a") (data (i32.const 132321) "a") (data (i32.const 132324) "a") (data (i32.const 132327) "a") (data (i32.const 132330) "a") (data (i32.const 132333) "a") (data (i32.const 132336) "a") (data (i32.const 132339) "a") (data (i32.const 132342) "a") (data (i32.const 132345) "a") (data (i32.const 132348) "a") (data (i32.const 132351) "a") (data (i32.const 132354) "a") (data (i32.const 132357) "a") (data (i32.const 132360) "a") (data (i32.const 132363) "a") (data (i32.const 132366) "a") (data (i32.const 132369) "a") (data (i32.const 132372) "a") (data (i32.const 132375) "a") (data (i32.const 132378) "a") (data (i32.const 132381) "a") (data (i32.const 132384) "a") (data (i32.const 132387) "a") (data (i32.const 132390) "a") (data (i32.const 132393) "a") (data (i32.const 132396) "a") (data (i32.const 132399) "a") (data (i32.const 132402) "a") (data (i32.const 132405) "a") (data (i32.const 132408) "a") (data (i32.const 132411) "a") (data (i32.const 132414) "a") (data (i32.const 132417) "a") (data (i32.const 132420) "a") (data (i32.const 132423) "a") (data (i32.const 132426) "a") (data (i32.const 132429) "a") (data (i32.const 132432) "a") (data (i32.const 132435) "a") (data (i32.const 132438) "a") (data (i32.const 132441) "a") (data (i32.const 132444) "a") (data (i32.const 132447) "a") (data (i32.const 132450) "a") (data (i32.const 132453) "a") (data (i32.const 132456) "a") (data (i32.const 132459) "a") (data (i32.const 132462) "a") (data (i32.const 132465) "a") (data (i32.const 132468) "a") (data (i32.const 132471) "a") (data (i32.const 132474) "a") (data (i32.const 132477) "a") (data (i32.const 132480) "a") (data (i32.const 132483) "a") (data (i32.const 132486) "a") (data (i32.const 132489) "a") (data (i32.const 132492) "a") (data (i32.const 132495) "a") (data (i32.const 132498) "a") (data (i32.const 132501) "a") (data (i32.const 132504) "a") (data (i32.const 132507) "a") (data (i32.const 132510) "a") (data (i32.const 132513) "a") (data (i32.const 132516) "a") (data (i32.const 132519) "a") (data (i32.const 132522) "a") (data (i32.const 132525) "a") (data (i32.const 132528) "a") (data (i32.const 132531) "a") (data (i32.const 132534) "a") (data (i32.const 132537) "a") (data (i32.const 132540) "a") (data (i32.const 132543) "a") (data (i32.const 132546) "a") (data (i32.const 132549) "a") (data (i32.const 132552) "a") (data (i32.const 132555) "a") (data (i32.const 132558) "a") (data (i32.const 132561) "a") (data (i32.const 132564) "a") (data (i32.const 132567) "a") (data (i32.const 132570) "a") (data (i32.const 132573) "a") (data (i32.const 132576) "a") (data (i32.const 132579) "a") (data (i32.const 132582) "a") (data (i32.const 132585) "a") (data (i32.const 132588) "a") (data (i32.const 132591) "a") (data (i32.const 132594) "a") (data (i32.const 132597) "a") (data (i32.const 132600) "a") (data (i32.const 132603) "a") (data (i32.const 132606) "a") (data (i32.const 132609) "a") (data (i32.const 132612) "a") (data (i32.const 132615) "a") (data (i32.const 132618) "a") (data (i32.const 132621) "a") (data (i32.const 132624) "a") (data (i32.const 132627) "a") (data (i32.const 132630) "a") (data (i32.const 132633) "a") (data (i32.const 132636) "a") (data (i32.const 132639) "a") (data (i32.const 132642) "a") (data (i32.const 132645) "a") (data (i32.const 132648) "a") (data (i32.const 132651) "a") (data (i32.const 132654) "a") (data (i32.const 132657) "a") (data (i32.const 132660) "a") (data (i32.const 132663) "a") (data (i32.const 132666) "a") (data (i32.const 132669) "a") (data (i32.const 132672) "a") (data (i32.const 132675) "a") (data (i32.const 132678) "a") (data (i32.const 132681) "a") (data (i32.const 132684) "a") (data (i32.const 132687) "a") (data (i32.const 132690) "a") (data (i32.const 132693) "a") (data (i32.const 132696) "a") (data (i32.const 132699) "a") (data (i32.const 132702) "a") (data (i32.const 132705) "a") (data (i32.const 132708) "a") (data (i32.const 132711) "a") (data (i32.const 132714) "a") (data (i32.const 132717) "a") (data (i32.const 132720) "a") (data (i32.const 132723) "a") (data (i32.const 132726) "a") (data (i32.const 132729) "a") (data (i32.const 132732) "a") (data (i32.const 132735) "a") (data (i32.const 132738) "a") (data (i32.const 132741) "a") (data (i32.const 132744) "a") (data (i32.const 132747) "a") (data (i32.const 132750) "a") (data (i32.const 132753) "a") (data (i32.const 132756) "a") (data (i32.const 132759) "a") (data (i32.const 132762) "a") (data (i32.const 132765) "a") (data (i32.const 132768) "a") (data (i32.const 132771) "a") (data (i32.const 132774) "a") (data (i32.const 132777) "a") (data (i32.const 132780) "a") (data (i32.const 132783) "a") (data (i32.const 132786) "a") (data (i32.const 132789) "a") (data (i32.const 132792) "a") (data (i32.const 132795) "a") (data (i32.const 132798) "a") (data (i32.const 132801) "a") (data (i32.const 132804) "a") (data (i32.const 132807) "a") (data (i32.const 132810) "a") (data (i32.const 132813) "a") (data (i32.const 132816) "a") (data (i32.const 132819) "a") (data (i32.const 132822) "a") (data (i32.const 132825) "a") (data (i32.const 132828) "a") (data (i32.const 132831) "a") (data (i32.const 132834) "a") (data (i32.const 132837) "a") (data (i32.const 132840) "a") (data (i32.const 132843) "a") (data (i32.const 132846) "a") (data (i32.const 132849) "a") (data (i32.const 132852) "a") (data (i32.const 132855) "a") (data (i32.const 132858) "a") (data (i32.const 132861) "a") (data (i32.const 132864) "a") (data (i32.const 132867) "a") (data (i32.const 132870) "a") (data (i32.const 132873) "a") (data (i32.const 132876) "a") (data (i32.const 132879) "a") (data (i32.const 132882) "a") (data (i32.const 132885) "a") (data (i32.const 132888) "a") (data (i32.const 132891) "a") (data (i32.const 132894) "a") (data (i32.const 132897) "a") (data (i32.const 132900) "a") (data (i32.const 132903) "a") (data (i32.const 132906) "a") (data (i32.const 132909) "a") (data (i32.const 132912) "a") (data (i32.const 132915) "a") (data (i32.const 132918) "a") (data (i32.const 132921) "a") (data (i32.const 132924) "a") (data (i32.const 132927) "a") (data (i32.const 132930) "a") (data (i32.const 132933) "a") (data (i32.const 132936) "a") (data (i32.const 132939) "a") (data (i32.const 132942) "a") (data (i32.const 132945) "a") (data (i32.const 132948) "a") (data (i32.const 132951) "a") (data (i32.const 132954) "a") (data (i32.const 132957) "a") (data (i32.const 132960) "a") (data (i32.const 132963) "a") (data (i32.const 132966) "a") (data (i32.const 132969) "a") (data (i32.const 132972) "a") (data (i32.const 132975) "a") (data (i32.const 132978) "a") (data (i32.const 132981) "a") (data (i32.const 132984) "a") (data (i32.const 132987) "a") (data (i32.const 132990) "a") (data (i32.const 132993) "a") (data (i32.const 132996) "a") (data (i32.const 132999) "a") (data (i32.const 133002) "a") (data (i32.const 133005) "a") (data (i32.const 133008) "a") (data (i32.const 133011) "a") (data (i32.const 133014) "a") (data (i32.const 133017) "a") (data (i32.const 133020) "a") (data (i32.const 133023) "a") (data (i32.const 133026) "a") (data (i32.const 133029) "a") (data (i32.const 133032) "a") (data (i32.const 133035) "a") (data (i32.const 133038) "a") (data (i32.const 133041) "a") (data (i32.const 133044) "a") (data (i32.const 133047) "a") (data (i32.const 133050) "a") (data (i32.const 133053) "a") (data (i32.const 133056) "a") (data (i32.const 133059) "a") (data (i32.const 133062) "a") (data (i32.const 133065) "a") (data (i32.const 133068) "a") (data (i32.const 133071) "a") (data (i32.const 133074) "a") (data (i32.const 133077) "a") (data (i32.const 133080) "a") (data (i32.const 133083) "a") (data (i32.const 133086) "a") (data (i32.const 133089) "a") (data (i32.const 133092) "a") (data (i32.const 133095) "a") (data (i32.const 133098) "a") (data (i32.const 133101) "a") (data (i32.const 133104) "a") (data (i32.const 133107) "a") (data (i32.const 133110) "a") (data (i32.const 133113) "a") (data (i32.const 133116) "a") (data (i32.const 133119) "a") (data (i32.const 133122) "a") (data (i32.const 133125) "a") (data (i32.const 133128) "a") (data (i32.const 133131) "a") (data (i32.const 133134) "a") (data (i32.const 133137) "a") (data (i32.const 133140) "a") (data (i32.const 133143) "a") (data (i32.const 133146) "a") (data (i32.const 133149) "a") (data (i32.const 133152) "a") (data (i32.const 133155) "a") (data (i32.const 133158) "a") (data (i32.const 133161) "a") (data (i32.const 133164) "a") (data (i32.const 133167) "a") (data (i32.const 133170) "a") (data (i32.const 133173) "a") (data (i32.const 133176) "a") (data (i32.const 133179) "a") (data (i32.const 133182) "a") (data (i32.const 133185) "a") (data (i32.const 133188) "a") (data (i32.const 133191) "a") (data (i32.const 133194) "a") (data (i32.const 133197) "a") (data (i32.const 133200) "a") (data (i32.const 133203) "a") (data (i32.const 133206) "a") (data (i32.const 133209) "a") (data (i32.const 133212) "a") (data (i32.const 133215) "a") (data (i32.const 133218) "a") (data (i32.const 133221) "a") (data (i32.const 133224) "a") (data (i32.const 133227) "a") (data (i32.const 133230) "a") (data (i32.const 133233) "a") (data (i32.const 133236) "a") (data (i32.const 133239) "a") (data (i32.const 133242) "a") (data (i32.const 133245) "a") (data (i32.const 133248) "a") (data (i32.const 133251) "a") (data (i32.const 133254) "a") (data (i32.const 133257) "a") (data (i32.const 133260) "a") (data (i32.const 133263) "a") (data (i32.const 133266) "a") (data (i32.const 133269) "a") (data (i32.const 133272) "a") (data (i32.const 133275) "a") (data (i32.const 133278) "a") (data (i32.const 133281) "a") (data (i32.const 133284) "a") (data (i32.const 133287) "a") (data (i32.const 133290) "a") (data (i32.const 133293) "a") (data (i32.const 133296) "a") (data (i32.const 133299) "a") (data (i32.const 133302) "a") (data (i32.const 133305) "a") (data (i32.const 133308) "a") (data (i32.const 133311) "a") (data (i32.const 133314) "a") (data (i32.const 133317) "a") (data (i32.const 133320) "a") (data (i32.const 133323) "a") (data (i32.const 133326) "a") (data (i32.const 133329) "a") (data (i32.const 133332) "a") (data (i32.const 133335) "a") (data (i32.const 133338) "a") (data (i32.const 133341) "a") (data (i32.const 133344) "a") (data (i32.const 133347) "a") (data (i32.const 133350) "a") (data (i32.const 133353) "a") (data (i32.const 133356) "a") (data (i32.const 133359) "a") (data (i32.const 133362) "a") (data (i32.const 133365) "a") (data (i32.const 133368) "a") (data (i32.const 133371) "a") (data (i32.const 133374) "a") (data (i32.const 133377) "a") (data (i32.const 133380) "a") (data (i32.const 133383) "a") (data (i32.const 133386) "a") (data (i32.const 133389) "a") (data (i32.const 133392) "a") (data (i32.const 133395) "a") (data (i32.const 133398) "a") (data (i32.const 133401) "a") (data (i32.const 133404) "a") (data (i32.const 133407) "a") (data (i32.const 133410) "a") (data (i32.const 133413) "a") (data (i32.const 133416) "a") (data (i32.const 133419) "a") (data (i32.const 133422) "a") (data (i32.const 133425) "a") (data (i32.const 133428) "a") (data (i32.const 133431) "a") (data (i32.const 133434) "a") (data (i32.const 133437) "a") (data (i32.const 133440) "a") (data (i32.const 133443) "a") (data (i32.const 133446) "a") (data (i32.const 133449) "a") (data (i32.const 133452) "a") (data (i32.const 133455) "a") (data (i32.const 133458) "a") (data (i32.const 133461) "a") (data (i32.const 133464) "a") (data (i32.const 133467) "a") (data (i32.const 133470) "a") (data (i32.const 133473) "a") (data (i32.const 133476) "a") (data (i32.const 133479) "a") (data (i32.const 133482) "a") (data (i32.const 133485) "a") (data (i32.const 133488) "a") (data (i32.const 133491) "a") (data (i32.const 133494) "a") (data (i32.const 133497) "a") (data (i32.const 133500) "a") (data (i32.const 133503) "a") (data (i32.const 133506) "a") (data (i32.const 133509) "a") (data (i32.const 133512) "a") (data (i32.const 133515) "a") (data (i32.const 133518) "a") (data (i32.const 133521) "a") (data (i32.const 133524) "a") (data (i32.const 133527) "a") (data (i32.const 133530) "a") (data (i32.const 133533) "a") (data (i32.const 133536) "a") (data (i32.const 133539) "a") (data (i32.const 133542) "a") (data (i32.const 133545) "a") (data (i32.const 133548) "a") (data (i32.const 133551) "a") (data (i32.const 133554) "a") (data (i32.const 133557) "a") (data (i32.const 133560) "a") (data (i32.const 133563) "a") (data (i32.const 133566) "a") (data (i32.const 133569) "a") (data (i32.const 133572) "a") (data (i32.const 133575) "a") (data (i32.const 133578) "a") (data (i32.const 133581) "a") (data (i32.const 133584) "a") (data (i32.const 133587) "a") (data (i32.const 133590) "a") (data (i32.const 133593) "a") (data (i32.const 133596) "a") (data (i32.const 133599) "a") (data (i32.const 133602) "a") (data (i32.const 133605) "a") (data (i32.const 133608) "a") (data (i32.const 133611) "a") (data (i32.const 133614) "a") (data (i32.const 133617) "a") (data (i32.const 133620) "a") (data (i32.const 133623) "a") (data (i32.const 133626) "a") (data (i32.const 133629) "a") (data (i32.const 133632) "a") (data (i32.const 133635) "a") (data (i32.const 133638) "a") (data (i32.const 133641) "a") (data (i32.const 133644) "a") (data (i32.const 133647) "a") (data (i32.const 133650) "a") (data (i32.const 133653) "a") (data (i32.const 133656) "a") (data (i32.const 133659) "a") (data (i32.const 133662) "a") (data (i32.const 133665) "a") (data (i32.const 133668) "a") (data (i32.const 133671) "a") (data (i32.const 133674) "a") (data (i32.const 133677) "a") (data (i32.const 133680) "a") (data (i32.const 133683) "a") (data (i32.const 133686) "a") (data (i32.const 133689) "a") (data (i32.const 133692) "a") (data (i32.const 133695) "a") (data (i32.const 133698) "a") (data (i32.const 133701) "a") (data (i32.const 133704) "a") (data (i32.const 133707) "a") (data (i32.const 133710) "a") (data (i32.const 133713) "a") (data (i32.const 133716) "a") (data (i32.const 133719) "a") (data (i32.const 133722) "a") (data (i32.const 133725) "a") (data (i32.const 133728) "a") (data (i32.const 133731) "a") (data (i32.const 133734) "a") (data (i32.const 133737) "a") (data (i32.const 133740) "a") (data (i32.const 133743) "a") (data (i32.const 133746) "a") (data (i32.const 133749) "a") (data (i32.const 133752) "a") (data (i32.const 133755) "a") (data (i32.const 133758) "a") (data (i32.const 133761) "a") (data (i32.const 133764) "a") (data (i32.const 133767) "a") (data (i32.const 133770) "a") (data (i32.const 133773) "a") (data (i32.const 133776) "a") (data (i32.const 133779) "a") (data (i32.const 133782) "a") (data (i32.const 133785) "a") (data (i32.const 133788) "a") (data (i32.const 133791) "a") (data (i32.const 133794) "a") (data (i32.const 133797) "a") (data (i32.const 133800) "a") (data (i32.const 133803) "a") (data (i32.const 133806) "a") (data (i32.const 133809) "a") (data (i32.const 133812) "a") (data (i32.const 133815) "a") (data (i32.const 133818) "a") (data (i32.const 133821) "a") (data (i32.const 133824) "a") (data (i32.const 133827) "a") (data (i32.const 133830) "a") (data (i32.const 133833) "a") (data (i32.const 133836) "a") (data (i32.const 133839) "a") (data (i32.const 133842) "a") (data (i32.const 133845) "a") (data (i32.const 133848) "a") (data (i32.const 133851) "a") (data (i32.const 133854) "a") (data (i32.const 133857) "a") (data (i32.const 133860) "a") (data (i32.const 133863) "a") (data (i32.const 133866) "a") (data (i32.const 133869) "a") (data (i32.const 133872) "a") (data (i32.const 133875) "a") (data (i32.const 133878) "a") (data (i32.const 133881) "a") (data (i32.const 133884) "a") (data (i32.const 133887) "a") (data (i32.const 133890) "a") (data (i32.const 133893) "a") (data (i32.const 133896) "a") (data (i32.const 133899) "a") (data (i32.const 133902) "a") (data (i32.const 133905) "a") (data (i32.const 133908) "a") (data (i32.const 133911) "a") (data (i32.const 133914) "a") (data (i32.const 133917) "a") (data (i32.const 133920) "a") (data (i32.const 133923) "a") (data (i32.const 133926) "a") (data (i32.const 133929) "a") (data (i32.const 133932) "a") (data (i32.const 133935) "a") (data (i32.const 133938) "a") (data (i32.const 133941) "a") (data (i32.const 133944) "a") (data (i32.const 133947) "a") (data (i32.const 133950) "a") (data (i32.const 133953) "a") (data (i32.const 133956) "a") (data (i32.const 133959) "a") (data (i32.const 133962) "a") (data (i32.const 133965) "a") (data (i32.const 133968) "a") (data (i32.const 133971) "a") (data (i32.const 133974) "a") (data (i32.const 133977) "a") (data (i32.const 133980) "a") (data (i32.const 133983) "a") (data (i32.const 133986) "a") (data (i32.const 133989) "a") (data (i32.const 133992) "a") (data (i32.const 133995) "a") (data (i32.const 133998) "a") (data (i32.const 134001) "a") (data (i32.const 134004) "a") (data (i32.const 134007) "a") (data (i32.const 134010) "a") (data (i32.const 134013) "a") (data (i32.const 134016) "a") (data (i32.const 134019) "a") (data (i32.const 134022) "a") (data (i32.const 134025) "a") (data (i32.const 134028) "a") (data (i32.const 134031) "a") (data (i32.const 134034) "a") (data (i32.const 134037) "a") (data (i32.const 134040) "a") (data (i32.const 134043) "a") (data (i32.const 134046) "a") (data (i32.const 134049) "a") (data (i32.const 134052) "a") (data (i32.const 134055) "a") (data (i32.const 134058) "a") (data (i32.const 134061) "a") (data (i32.const 134064) "a") (data (i32.const 134067) "a") (data (i32.const 134070) "a") (data (i32.const 134073) "a") (data (i32.const 134076) "a") (data (i32.const 134079) "a") (data (i32.const 134082) "a") (data (i32.const 134085) "a") (data (i32.const 134088) "a") (data (i32.const 134091) "a") (data (i32.const 134094) "a") (data (i32.const 134097) "a") (data (i32.const 134100) "a") (data (i32.const 134103) "a") (data (i32.const 134106) "a") (data (i32.const 134109) "a") (data (i32.const 134112) "a") (data (i32.const 134115) "a") (data (i32.const 134118) "a") (data (i32.const 134121) "a") (data (i32.const 134124) "a") (data (i32.const 134127) "a") (data (i32.const 134130) "a") (data (i32.const 134133) "a") (data (i32.const 134136) "a") (data (i32.const 134139) "a") (data (i32.const 134142) "a") (data (i32.const 134145) "a") (data (i32.const 134148) "a") (data (i32.const 134151) "a") (data (i32.const 134154) "a") (data (i32.const 134157) "a") (data (i32.const 134160) "a") (data (i32.const 134163) "a") (data (i32.const 134166) "a") (data (i32.const 134169) "a") (data (i32.const 134172) "a") (data (i32.const 134175) "a") (data (i32.const 134178) "a") (data (i32.const 134181) "a") (data (i32.const 134184) "a") (data (i32.const 134187) "a") (data (i32.const 134190) "a") (data (i32.const 134193) "a") (data (i32.const 134196) "a") (data (i32.const 134199) "a") (data (i32.const 134202) "a") (data (i32.const 134205) "a") (data (i32.const 134208) "a") (data (i32.const 134211) "a") (data (i32.const 134214) "a") (data (i32.const 134217) "a") (data (i32.const 134220) "a") (data (i32.const 134223) "a") (data (i32.const 134226) "a") (data (i32.const 134229) "a") (data (i32.const 134232) "a") (data (i32.const 134235) "a") (data (i32.const 134238) "a") (data (i32.const 134241) "a") (data (i32.const 134244) "a") (data (i32.const 134247) "a") (data (i32.const 134250) "a") (data (i32.const 134253) "a") (data (i32.const 134256) "a") (data (i32.const 134259) "a") (data (i32.const 134262) "a") (data (i32.const 134265) "a") (data (i32.const 134268) "a") (data (i32.const 134271) "a") (data (i32.const 134274) "a") (data (i32.const 134277) "a") (data (i32.const 134280) "a") (data (i32.const 134283) "a") (data (i32.const 134286) "a") (data (i32.const 134289) "a") (data (i32.const 134292) "a") (data (i32.const 134295) "a") (data (i32.const 134298) "a") (data (i32.const 134301) "a") (data (i32.const 134304) "a") (data (i32.const 134307) "a") (data (i32.const 134310) "a") (data (i32.const 134313) "a") (data (i32.const 134316) "a") (data (i32.const 134319) "a") (data (i32.const 134322) "a") (data (i32.const 134325) "a") (data (i32.const 134328) "a") (data (i32.const 134331) "a") (data (i32.const 134334) "a") (data (i32.const 134337) "a") (data (i32.const 134340) "a") (data (i32.const 134343) "a") (data (i32.const 134346) "a") (data (i32.const 134349) "a") (data (i32.const 134352) "a") (data (i32.const 134355) "a") (data (i32.const 134358) "a") (data (i32.const 134361) "a") (data (i32.const 134364) "a") (data (i32.const 134367) "a") (data (i32.const 134370) "a") (data (i32.const 134373) "a") (data (i32.const 134376) "a") (data (i32.const 134379) "a") (data (i32.const 134382) "a") (data (i32.const 134385) "a") (data (i32.const 134388) "a") (data (i32.const 134391) "a") (data (i32.const 134394) "a") (data (i32.const 134397) "a") (data (i32.const 134400) "a") (data (i32.const 134403) "a") (data (i32.const 134406) "a") (data (i32.const 134409) "a") (data (i32.const 134412) "a") (data (i32.const 134415) "a") (data (i32.const 134418) "a") (data (i32.const 134421) "a") (data (i32.const 134424) "a") (data (i32.const 134427) "a") (data (i32.const 134430) "a") (data (i32.const 134433) "a") (data (i32.const 134436) "a") (data (i32.const 134439) "a") (data (i32.const 134442) "a") (data (i32.const 134445) "a") (data (i32.const 134448) "a") (data (i32.const 134451) "a") (data (i32.const 134454) "a") (data (i32.const 134457) "a") (data (i32.const 134460) "a") (data (i32.const 134463) "a") (data (i32.const 134466) "a") (data (i32.const 134469) "a") (data (i32.const 134472) "a") (data (i32.const 134475) "a") (data (i32.const 134478) "a") (data (i32.const 134481) "a") (data (i32.const 134484) "a") (data (i32.const 134487) "a") (data (i32.const 134490) "a") (data (i32.const 134493) "a") (data (i32.const 134496) "a") (data (i32.const 134499) "a") (data (i32.const 134502) "a") (data (i32.const 134505) "a") (data (i32.const 134508) "a") (data (i32.const 134511) "a") (data (i32.const 134514) "a") (data (i32.const 134517) "a") (data (i32.const 134520) "a") (data (i32.const 134523) "a") (data (i32.const 134526) "a") (data (i32.const 134529) "a") (data (i32.const 134532) "a") (data (i32.const 134535) "a") (data (i32.const 134538) "a") (data (i32.const 134541) "a") (data (i32.const 134544) "a") (data (i32.const 134547) "a") (data (i32.const 134550) "a") (data (i32.const 134553) "a") (data (i32.const 134556) "a") (data (i32.const 134559) "a") (data (i32.const 134562) "a") (data (i32.const 134565) "a") (data (i32.const 134568) "a") (data (i32.const 134571) "a") (data (i32.const 134574) "a") (data (i32.const 134577) "a") (data (i32.const 134580) "a") (data (i32.const 134583) "a") (data (i32.const 134586) "a") (data (i32.const 134589) "a") (data (i32.const 134592) "a") (data (i32.const 134595) "a") (data (i32.const 134598) "a") (data (i32.const 134601) "a") (data (i32.const 134604) "a") (data (i32.const 134607) "a") (data (i32.const 134610) "a") (data (i32.const 134613) "a") (data (i32.const 134616) "a") (data (i32.const 134619) "a") (data (i32.const 134622) "a") (data (i32.const 134625) "a") (data (i32.const 134628) "a") (data (i32.const 134631) "a") (data (i32.const 134634) "a") (data (i32.const 134637) "a") (data (i32.const 134640) "a") (data (i32.const 134643) "a") (data (i32.const 134646) "a") (data (i32.const 134649) "a") (data (i32.const 134652) "a") (data (i32.const 134655) "a") (data (i32.const 134658) "a") (data (i32.const 134661) "a") (data (i32.const 134664) "a") (data (i32.const 134667) "a") (data (i32.const 134670) "a") (data (i32.const 134673) "a") (data (i32.const 134676) "a") (data (i32.const 134679) "a") (data (i32.const 134682) "a") (data (i32.const 134685) "a") (data (i32.const 134688) "a") (data (i32.const 134691) "a") (data (i32.const 134694) "a") (data (i32.const 134697) "a") (data (i32.const 134700) "a") (data (i32.const 134703) "a") (data (i32.const 134706) "a") (data (i32.const 134709) "a") (data (i32.const 134712) "a") (data (i32.const 134715) "a") (data (i32.const 134718) "a") (data (i32.const 134721) "a") (data (i32.const 134724) "a") (data (i32.const 134727) "a") (data (i32.const 134730) "a") (data (i32.const 134733) "a") (data (i32.const 134736) "a") (data (i32.const 134739) "a") (data (i32.const 134742) "a") (data (i32.const 134745) "a") (data (i32.const 134748) "a") (data (i32.const 134751) "a") (data (i32.const 134754) "a") (data (i32.const 134757) "a") (data (i32.const 134760) "a") (data (i32.const 134763) "a") (data (i32.const 134766) "a") (data (i32.const 134769) "a") (data (i32.const 134772) "a") (data (i32.const 134775) "a") (data (i32.const 134778) "a") (data (i32.const 134781) "a") (data (i32.const 134784) "a") (data (i32.const 134787) "a") (data (i32.const 134790) "a") (data (i32.const 134793) "a") (data (i32.const 134796) "a") (data (i32.const 134799) "a") (data (i32.const 134802) "a") (data (i32.const 134805) "a") (data (i32.const 134808) "a") (data (i32.const 134811) "a") (data (i32.const 134814) "a") (data (i32.const 134817) "a") (data (i32.const 134820) "a") (data (i32.const 134823) "a") (data (i32.const 134826) "a") (data (i32.const 134829) "a") (data (i32.const 134832) "a") (data (i32.const 134835) "a") (data (i32.const 134838) "a") (data (i32.const 134841) "a") (data (i32.const 134844) "a") (data (i32.const 134847) "a") (data (i32.const 134850) "a") (data (i32.const 134853) "a") (data (i32.const 134856) "a") (data (i32.const 134859) "a") (data (i32.const 134862) "a") (data (i32.const 134865) "a") (data (i32.const 134868) "a") (data (i32.const 134871) "a") (data (i32.const 134874) "a") (data (i32.const 134877) "a") (data (i32.const 134880) "a") (data (i32.const 134883) "a") (data (i32.const 134886) "a") (data (i32.const 134889) "a") (data (i32.const 134892) "a") (data (i32.const 134895) "a") (data (i32.const 134898) "a") (data (i32.const 134901) "a") (data (i32.const 134904) "a") (data (i32.const 134907) "a") (data (i32.const 134910) "a") (data (i32.const 134913) "a") (data (i32.const 134916) "a") (data (i32.const 134919) "a") (data (i32.const 134922) "a") (data (i32.const 134925) "a") (data (i32.const 134928) "a") (data (i32.const 134931) "a") (data (i32.const 134934) "a") (data (i32.const 134937) "a") (data (i32.const 134940) "a") (data (i32.const 134943) "a") (data (i32.const 134946) "a") (data (i32.const 134949) "a") (data (i32.const 134952) "a") (data (i32.const 134955) "a") (data (i32.const 134958) "a") (data (i32.const 134961) "a") (data (i32.const 134964) "a") (data (i32.const 134967) "a") (data (i32.const 134970) "a") (data (i32.const 134973) "a") (data (i32.const 134976) "a") (data (i32.const 134979) "a") (data (i32.const 134982) "a") (data (i32.const 134985) "a") (data (i32.const 134988) "a") (data (i32.const 134991) "a") (data (i32.const 134994) "a") (data (i32.const 134997) "a") (data (i32.const 135000) "a") (data (i32.const 135003) "a") (data (i32.const 135006) "a") (data (i32.const 135009) "a") (data (i32.const 135012) "a") (data (i32.const 135015) "a") (data (i32.const 135018) "a") (data (i32.const 135021) "a") (data (i32.const 135024) "a") (data (i32.const 135027) "a") (data (i32.const 135030) "a") (data (i32.const 135033) "a") (data (i32.const 135036) "a") (data (i32.const 135039) "a") (data (i32.const 135042) "a") (data (i32.const 135045) "a") (data (i32.const 135048) "a") (data (i32.const 135051) "a") (data (i32.const 135054) "a") (data (i32.const 135057) "a") (data (i32.const 135060) "a") (data (i32.const 135063) "a") (data (i32.const 135066) "a") (data (i32.const 135069) "a") (data (i32.const 135072) "a") (data (i32.const 135075) "a") (data (i32.const 135078) "a") (data (i32.const 135081) "a") (data (i32.const 135084) "a") (data (i32.const 135087) "a") (data (i32.const 135090) "a") (data (i32.const 135093) "a") (data (i32.const 135096) "a") (data (i32.const 135099) "a") (data (i32.const 135102) "a") (data (i32.const 135105) "a") (data (i32.const 135108) "a") (data (i32.const 135111) "a") (data (i32.const 135114) "a") (data (i32.const 135117) "a") (data (i32.const 135120) "a") (data (i32.const 135123) "a") (data (i32.const 135126) "a") (data (i32.const 135129) "a") (data (i32.const 135132) "a") (data (i32.const 135135) "a") (data (i32.const 135138) "a") (data (i32.const 135141) "a") (data (i32.const 135144) "a") (data (i32.const 135147) "a") (data (i32.const 135150) "a") (data (i32.const 135153) "a") (data (i32.const 135156) "a") (data (i32.const 135159) "a") (data (i32.const 135162) "a") (data (i32.const 135165) "a") (data (i32.const 135168) "a") (data (i32.const 135171) "a") (data (i32.const 135174) "a") (data (i32.const 135177) "a") (data (i32.const 135180) "a") (data (i32.const 135183) "a") (data (i32.const 135186) "a") (data (i32.const 135189) "a") (data (i32.const 135192) "a") (data (i32.const 135195) "a") (data (i32.const 135198) "a") (data (i32.const 135201) "a") (data (i32.const 135204) "a") (data (i32.const 135207) "a") (data (i32.const 135210) "a") (data (i32.const 135213) "a") (data (i32.const 135216) "a") (data (i32.const 135219) "a") (data (i32.const 135222) "a") (data (i32.const 135225) "a") (data (i32.const 135228) "a") (data (i32.const 135231) "a") (data (i32.const 135234) "a") (data (i32.const 135237) "a") (data (i32.const 135240) "a") (data (i32.const 135243) "a") (data (i32.const 135246) "a") (data (i32.const 135249) "a") (data (i32.const 135252) "a") (data (i32.const 135255) "a") (data (i32.const 135258) "a") (data (i32.const 135261) "a") (data (i32.const 135264) "a") (data (i32.const 135267) "a") (data (i32.const 135270) "a") (data (i32.const 135273) "a") (data (i32.const 135276) "a") (data (i32.const 135279) "a") (data (i32.const 135282) "a") (data (i32.const 135285) "a") (data (i32.const 135288) "a") (data (i32.const 135291) "a") (data (i32.const 135294) "a") (data (i32.const 135297) "a") (data (i32.const 135300) "a") (data (i32.const 135303) "a") (data (i32.const 135306) "a") (data (i32.const 135309) "a") (data (i32.const 135312) "a") (data (i32.const 135315) "a") (data (i32.const 135318) "a") (data (i32.const 135321) "a") (data (i32.const 135324) "a") (data (i32.const 135327) "a") (data (i32.const 135330) "a") (data (i32.const 135333) "a") (data (i32.const 135336) "a") (data (i32.const 135339) "a") (data (i32.const 135342) "a") (data (i32.const 135345) "a") (data (i32.const 135348) "a") (data (i32.const 135351) "a") (data (i32.const 135354) "a") (data (i32.const 135357) "a") (data (i32.const 135360) "a") (data (i32.const 135363) "a") (data (i32.const 135366) "a") (data (i32.const 135369) "a") (data (i32.const 135372) "a") (data (i32.const 135375) "a") (data (i32.const 135378) "a") (data (i32.const 135381) "a") (data (i32.const 135384) "a") (data (i32.const 135387) "a") (data (i32.const 135390) "a") (data (i32.const 135393) "a") (data (i32.const 135396) "a") (data (i32.const 135399) "a") (data (i32.const 135402) "a") (data (i32.const 135405) "a") (data (i32.const 135408) "a") (data (i32.const 135411) "a") (data (i32.const 135414) "a") (data (i32.const 135417) "a") (data (i32.const 135420) "a") (data (i32.const 135423) "a") (data (i32.const 135426) "a") (data (i32.const 135429) "a") (data (i32.const 135432) "a") (data (i32.const 135435) "a") (data (i32.const 135438) "a") (data (i32.const 135441) "a") (data (i32.const 135444) "a") (data (i32.const 135447) "a") (data (i32.const 135450) "a") (data (i32.const 135453) "a") (data (i32.const 135456) "a") (data (i32.const 135459) "a") (data (i32.const 135462) "a") (data (i32.const 135465) "a") (data (i32.const 135468) "a") (data (i32.const 135471) "a") (data (i32.const 135474) "a") (data (i32.const 135477) "a") (data (i32.const 135480) "a") (data (i32.const 135483) "a") (data (i32.const 135486) "a") (data (i32.const 135489) "a") (data (i32.const 135492) "a") (data (i32.const 135495) "a") (data (i32.const 135498) "a") (data (i32.const 135501) "a") (data (i32.const 135504) "a") (data (i32.const 135507) "a") (data (i32.const 135510) "a") (data (i32.const 135513) "a") (data (i32.const 135516) "a") (data (i32.const 135519) "a") (data (i32.const 135522) "a") (data (i32.const 135525) "a") (data (i32.const 135528) "a") (data (i32.const 135531) "a") (data (i32.const 135534) "a") (data (i32.const 135537) "a") (data (i32.const 135540) "a") (data (i32.const 135543) "a") (data (i32.const 135546) "a") (data (i32.const 135549) "a") (data (i32.const 135552) "a") (data (i32.const 135555) "a") (data (i32.const 135558) "a") (data (i32.const 135561) "a") (data (i32.const 135564) "a") (data (i32.const 135567) "a") (data (i32.const 135570) "a") (data (i32.const 135573) "a") (data (i32.const 135576) "a") (data (i32.const 135579) "a") (data (i32.const 135582) "a") (data (i32.const 135585) "a") (data (i32.const 135588) "a") (data (i32.const 135591) "a") (data (i32.const 135594) "a") (data (i32.const 135597) "a") (data (i32.const 135600) "a") (data (i32.const 135603) "a") (data (i32.const 135606) "a") (data (i32.const 135609) "a") (data (i32.const 135612) "a") (data (i32.const 135615) "a") (data (i32.const 135618) "a") (data (i32.const 135621) "a") (data (i32.const 135624) "a") (data (i32.const 135627) "a") (data (i32.const 135630) "a") (data (i32.const 135633) "a") (data (i32.const 135636) "a") (data (i32.const 135639) "a") (data (i32.const 135642) "a") (data (i32.const 135645) "a") (data (i32.const 135648) "a") (data (i32.const 135651) "a") (data (i32.const 135654) "a") (data (i32.const 135657) "a") (data (i32.const 135660) "a") (data (i32.const 135663) "a") (data (i32.const 135666) "a") (data (i32.const 135669) "a") (data (i32.const 135672) "a") (data (i32.const 135675) "a") (data (i32.const 135678) "a") (data (i32.const 135681) "a") (data (i32.const 135684) "a") (data (i32.const 135687) "a") (data (i32.const 135690) "a") (data (i32.const 135693) "a") (data (i32.const 135696) "a") (data (i32.const 135699) "a") (data (i32.const 135702) "a") (data (i32.const 135705) "a") (data (i32.const 135708) "a") (data (i32.const 135711) "a") (data (i32.const 135714) "a") (data (i32.const 135717) "a") (data (i32.const 135720) "a") (data (i32.const 135723) "a") (data (i32.const 135726) "a") (data (i32.const 135729) "a") (data (i32.const 135732) "a") (data (i32.const 135735) "a") (data (i32.const 135738) "a") (data (i32.const 135741) "a") (data (i32.const 135744) "a") (data (i32.const 135747) "a") (data (i32.const 135750) "a") (data (i32.const 135753) "a") (data (i32.const 135756) "a") (data (i32.const 135759) "a") (data (i32.const 135762) "a") (data (i32.const 135765) "a") (data (i32.const 135768) "a") (data (i32.const 135771) "a") (data (i32.const 135774) "a") (data (i32.const 135777) "a") (data (i32.const 135780) "a") (data (i32.const 135783) "a") (data (i32.const 135786) "a") (data (i32.const 135789) "a") (data (i32.const 135792) "a") (data (i32.const 135795) "a") (data (i32.const 135798) "a") (data (i32.const 135801) "a") (data (i32.const 135804) "a") (data (i32.const 135807) "a") (data (i32.const 135810) "a") (data (i32.const 135813) "a") (data (i32.const 135816) "a") (data (i32.const 135819) "a") (data (i32.const 135822) "a") (data (i32.const 135825) "a") (data (i32.const 135828) "a") (data (i32.const 135831) "a") (data (i32.const 135834) "a") (data (i32.const 135837) "a") (data (i32.const 135840) "a") (data (i32.const 135843) "a") (data (i32.const 135846) "a") (data (i32.const 135849) "a") (data (i32.const 135852) "a") (data (i32.const 135855) "a") (data (i32.const 135858) "a") (data (i32.const 135861) "a") (data (i32.const 135864) "a") (data (i32.const 135867) "a") (data (i32.const 135870) "a") (data (i32.const 135873) "a") (data (i32.const 135876) "a") (data (i32.const 135879) "a") (data (i32.const 135882) "a") (data (i32.const 135885) "a") (data (i32.const 135888) "a") (data (i32.const 135891) "a") (data (i32.const 135894) "a") (data (i32.const 135897) "a") (data (i32.const 135900) "a") (data (i32.const 135903) "a") (data (i32.const 135906) "a") (data (i32.const 135909) "a") (data (i32.const 135912) "a") (data (i32.const 135915) "a") (data (i32.const 135918) "a") (data (i32.const 135921) "a") (data (i32.const 135924) "a") (data (i32.const 135927) "a") (data (i32.const 135930) "a") (data (i32.const 135933) "a") (data (i32.const 135936) "a") (data (i32.const 135939) "a") (data (i32.const 135942) "a") (data (i32.const 135945) "a") (data (i32.const 135948) "a") (data (i32.const 135951) "a") (data (i32.const 135954) "a") (data (i32.const 135957) "a") (data (i32.const 135960) "a") (data (i32.const 135963) "a") (data (i32.const 135966) "a") (data (i32.const 135969) "a") (data (i32.const 135972) "a") (data (i32.const 135975) "a") (data (i32.const 135978) "a") (data (i32.const 135981) "a") (data (i32.const 135984) "a") (data (i32.const 135987) "a") (data (i32.const 135990) "a") (data (i32.const 135993) "a") (data (i32.const 135996) "a") (data (i32.const 135999) "a") (data (i32.const 136002) "a") (data (i32.const 136005) "a") (data (i32.const 136008) "a") (data (i32.const 136011) "a") (data (i32.const 136014) "a") (data (i32.const 136017) "a") (data (i32.const 136020) "a") (data (i32.const 136023) "a") (data (i32.const 136026) "a") (data (i32.const 136029) "a") (data (i32.const 136032) "a") (data (i32.const 136035) "a") (data (i32.const 136038) "a") (data (i32.const 136041) "a") (data (i32.const 136044) "a") (data (i32.const 136047) "a") (data (i32.const 136050) "a") (data (i32.const 136053) "a") (data (i32.const 136056) "a") (data (i32.const 136059) "a") (data (i32.const 136062) "a") (data (i32.const 136065) "a") (data (i32.const 136068) "a") (data (i32.const 136071) "a") (data (i32.const 136074) "a") (data (i32.const 136077) "a") (data (i32.const 136080) "a") (data (i32.const 136083) "a") (data (i32.const 136086) "a") (data (i32.const 136089) "a") (data (i32.const 136092) "a") (data (i32.const 136095) "a") (data (i32.const 136098) "a") (data (i32.const 136101) "a") (data (i32.const 136104) "a") (data (i32.const 136107) "a") (data (i32.const 136110) "a") (data (i32.const 136113) "a") (data (i32.const 136116) "a") (data (i32.const 136119) "a") (data (i32.const 136122) "a") (data (i32.const 136125) "a") (data (i32.const 136128) "a") (data (i32.const 136131) "a") (data (i32.const 136134) "a") (data (i32.const 136137) "a") (data (i32.const 136140) "a") (data (i32.const 136143) "a") (data (i32.const 136146) "a") (data (i32.const 136149) "a") (data (i32.const 136152) "a") (data (i32.const 136155) "a") (data (i32.const 136158) "a") (data (i32.const 136161) "a") (data (i32.const 136164) "a") (data (i32.const 136167) "a") (data (i32.const 136170) "a") (data (i32.const 136173) "a") (data (i32.const 136176) "a") (data (i32.const 136179) "a") (data (i32.const 136182) "a") (data (i32.const 136185) "a") (data (i32.const 136188) "a") (data (i32.const 136191) "a") (data (i32.const 136194) "a") (data (i32.const 136197) "a") (data (i32.const 136200) "a") (data (i32.const 136203) "a") (data (i32.const 136206) "a") (data (i32.const 136209) "a") (data (i32.const 136212) "a") (data (i32.const 136215) "a") (data (i32.const 136218) "a") (data (i32.const 136221) "a") (data (i32.const 136224) "a") (data (i32.const 136227) "a") (data (i32.const 136230) "a") (data (i32.const 136233) "a") (data (i32.const 136236) "a") (data (i32.const 136239) "a") (data (i32.const 136242) "a") (data (i32.const 136245) "a") (data (i32.const 136248) "a") (data (i32.const 136251) "a") (data (i32.const 136254) "a") (data (i32.const 136257) "a") (data (i32.const 136260) "a") (data (i32.const 136263) "a") (data (i32.const 136266) "a") (data (i32.const 136269) "a") (data (i32.const 136272) "a") (data (i32.const 136275) "a") (data (i32.const 136278) "a") (data (i32.const 136281) "a") (data (i32.const 136284) "a") (data (i32.const 136287) "a") (data (i32.const 136290) "a") (data (i32.const 136293) "a") (data (i32.const 136296) "a") (data (i32.const 136299) "a") (data (i32.const 136302) "a") (data (i32.const 136305) "a") (data (i32.const 136308) "a") (data (i32.const 136311) "a") (data (i32.const 136314) "a") (data (i32.const 136317) "a") (data (i32.const 136320) "a") (data (i32.const 136323) "a") (data (i32.const 136326) "a") (data (i32.const 136329) "a") (data (i32.const 136332) "a") (data (i32.const 136335) "a") (data (i32.const 136338) "a") (data (i32.const 136341) "a") (data (i32.const 136344) "a") (data (i32.const 136347) "a") (data (i32.const 136350) "a") (data (i32.const 136353) "a") (data (i32.const 136356) "a") (data (i32.const 136359) "a") (data (i32.const 136362) "a") (data (i32.const 136365) "a") (data (i32.const 136368) "a") (data (i32.const 136371) "a") (data (i32.const 136374) "a") (data (i32.const 136377) "a") (data (i32.const 136380) "a") (data (i32.const 136383) "a") (data (i32.const 136386) "a") (data (i32.const 136389) "a") (data (i32.const 136392) "a") (data (i32.const 136395) "a") (data (i32.const 136398) "a") (data (i32.const 136401) "a") (data (i32.const 136404) "a") (data (i32.const 136407) "a") (data (i32.const 136410) "a") (data (i32.const 136413) "a") (data (i32.const 136416) "a") (data (i32.const 136419) "a") (data (i32.const 136422) "a") (data (i32.const 136425) "a") (data (i32.const 136428) "a") (data (i32.const 136431) "a") (data (i32.const 136434) "a") (data (i32.const 136437) "a") (data (i32.const 136440) "a") (data (i32.const 136443) "a") (data (i32.const 136446) "a") (data (i32.const 136449) "a") (data (i32.const 136452) "a") (data (i32.const 136455) "a") (data (i32.const 136458) "a") (data (i32.const 136461) "a") (data (i32.const 136464) "a") (data (i32.const 136467) "a") (data (i32.const 136470) "a") (data (i32.const 136473) "a") (data (i32.const 136476) "a") (data (i32.const 136479) "a") (data (i32.const 136482) "a") (data (i32.const 136485) "a") (data (i32.const 136488) "a") (data (i32.const 136491) "a") (data (i32.const 136494) "a") (data (i32.const 136497) "a") (data (i32.const 136500) "a") (data (i32.const 136503) "a") (data (i32.const 136506) "a") (data (i32.const 136509) "a") (data (i32.const 136512) "a") (data (i32.const 136515) "a") (data (i32.const 136518) "a") (data (i32.const 136521) "a") (data (i32.const 136524) "a") (data (i32.const 136527) "a") (data (i32.const 136530) "a") (data (i32.const 136533) "a") (data (i32.const 136536) "a") (data (i32.const 136539) "a") (data (i32.const 136542) "a") (data (i32.const 136545) "a") (data (i32.const 136548) "a") (data (i32.const 136551) "a") (data (i32.const 136554) "a") (data (i32.const 136557) "a") (data (i32.const 136560) "a") (data (i32.const 136563) "a") (data (i32.const 136566) "a") (data (i32.const 136569) "a") (data (i32.const 136572) "a") (data (i32.const 136575) "a") (data (i32.const 136578) "a") (data (i32.const 136581) "a") (data (i32.const 136584) "a") (data (i32.const 136587) "a") (data (i32.const 136590) "a") (data (i32.const 136593) "a") (data (i32.const 136596) "a") (data (i32.const 136599) "a") (data (i32.const 136602) "a") (data (i32.const 136605) "a") (data (i32.const 136608) "a") (data (i32.const 136611) "a") (data (i32.const 136614) "a") (data (i32.const 136617) "a") (data (i32.const 136620) "a") (data (i32.const 136623) "a") (data (i32.const 136626) "a") (data (i32.const 136629) "a") (data (i32.const 136632) "a") (data (i32.const 136635) "a") (data (i32.const 136638) "a") (data (i32.const 136641) "a") (data (i32.const 136644) "a") (data (i32.const 136647) "a") (data (i32.const 136650) "a") (data (i32.const 136653) "a") (data (i32.const 136656) "a") (data (i32.const 136659) "a") (data (i32.const 136662) "a") (data (i32.const 136665) "a") (data (i32.const 136668) "a") (data (i32.const 136671) "a") (data (i32.const 136674) "a") (data (i32.const 136677) "a") (data (i32.const 136680) "a") (data (i32.const 136683) "a") (data (i32.const 136686) "a") (data (i32.const 136689) "a") (data (i32.const 136692) "a") (data (i32.const 136695) "a") (data (i32.const 136698) "a") (data (i32.const 136701) "a") (data (i32.const 136704) "a") (data (i32.const 136707) "a") (data (i32.const 136710) "a") (data (i32.const 136713) "a") (data (i32.const 136716) "a") (data (i32.const 136719) "a") (data (i32.const 136722) "a") (data (i32.const 136725) "a") (data (i32.const 136728) "a") (data (i32.const 136731) "a") (data (i32.const 136734) "a") (data (i32.const 136737) "a") (data (i32.const 136740) "a") (data (i32.const 136743) "a") (data (i32.const 136746) "a") (data (i32.const 136749) "a") (data (i32.const 136752) "a") (data (i32.const 136755) "a") (data (i32.const 136758) "a") (data (i32.const 136761) "a") (data (i32.const 136764) "a") (data (i32.const 136767) "a") (data (i32.const 136770) "a") (data (i32.const 136773) "a") (data (i32.const 136776) "a") (data (i32.const 136779) "a") (data (i32.const 136782) "a") (data (i32.const 136785) "a") (data (i32.const 136788) "a") (data (i32.const 136791) "a") (data (i32.const 136794) "a") (data (i32.const 136797) "a") (data (i32.const 136800) "a") (data (i32.const 136803) "a") (data (i32.const 136806) "a") (data (i32.const 136809) "a") (data (i32.const 136812) "a") (data (i32.const 136815) "a") (data (i32.const 136818) "a") (data (i32.const 136821) "a") (data (i32.const 136824) "a") (data (i32.const 136827) "a") (data (i32.const 136830) "a") (data (i32.const 136833) "a") (data (i32.const 136836) "a") (data (i32.const 136839) "a") (data (i32.const 136842) "a") (data (i32.const 136845) "a") (data (i32.const 136848) "a") (data (i32.const 136851) "a") (data (i32.const 136854) "a") (data (i32.const 136857) "a") (data (i32.const 136860) "a") (data (i32.const 136863) "a") (data (i32.const 136866) "a") (data (i32.const 136869) "a") (data (i32.const 136872) "a") (data (i32.const 136875) "a") (data (i32.const 136878) "a") (data (i32.const 136881) "a") (data (i32.const 136884) "a") (data (i32.const 136887) "a") (data (i32.const 136890) "a") (data (i32.const 136893) "a") (data (i32.const 136896) "a") (data (i32.const 136899) "a") (data (i32.const 136902) "a") (data (i32.const 136905) "a") (data (i32.const 136908) "a") (data (i32.const 136911) "a") (data (i32.const 136914) "a") (data (i32.const 136917) "a") (data (i32.const 136920) "a") (data (i32.const 136923) "a") (data (i32.const 136926) "a") (data (i32.const 136929) "a") (data (i32.const 136932) "a") (data (i32.const 136935) "a") (data (i32.const 136938) "a") (data (i32.const 136941) "a") (data (i32.const 136944) "a") (data (i32.const 136947) "a") (data (i32.const 136950) "a") (data (i32.const 136953) "a") (data (i32.const 136956) "a") (data (i32.const 136959) "a") (data (i32.const 136962) "a") (data (i32.const 136965) "a") (data (i32.const 136968) "a") (data (i32.const 136971) "a") (data (i32.const 136974) "a") (data (i32.const 136977) "a") (data (i32.const 136980) "a") (data (i32.const 136983) "a") (data (i32.const 136986) "a") (data (i32.const 136989) "a") (data (i32.const 136992) "a") (data (i32.const 136995) "a") (data (i32.const 136998) "a") (data (i32.const 137001) "a") (data (i32.const 137004) "a") (data (i32.const 137007) "a") (data (i32.const 137010) "a") (data (i32.const 137013) "a") (data (i32.const 137016) "a") (data (i32.const 137019) "a") (data (i32.const 137022) "a") (data (i32.const 137025) "a") (data (i32.const 137028) "a") (data (i32.const 137031) "a") (data (i32.const 137034) "a") (data (i32.const 137037) "a") (data (i32.const 137040) "a") (data (i32.const 137043) "a") (data (i32.const 137046) "a") (data (i32.const 137049) "a") (data (i32.const 137052) "a") (data (i32.const 137055) "a") (data (i32.const 137058) "a") (data (i32.const 137061) "a") (data (i32.const 137064) "a") (data (i32.const 137067) "a") (data (i32.const 137070) "a") (data (i32.const 137073) "a") (data (i32.const 137076) "a") (data (i32.const 137079) "a") (data (i32.const 137082) "a") (data (i32.const 137085) "a") (data (i32.const 137088) "a") (data (i32.const 137091) "a") (data (i32.const 137094) "a") (data (i32.const 137097) "a") (data (i32.const 137100) "a") (data (i32.const 137103) "a") (data (i32.const 137106) "a") (data (i32.const 137109) "a") (data (i32.const 137112) "a") (data (i32.const 137115) "a") (data (i32.const 137118) "a") (data (i32.const 137121) "a") (data (i32.const 137124) "a") (data (i32.const 137127) "a") (data (i32.const 137130) "a") (data (i32.const 137133) "a") (data (i32.const 137136) "a") (data (i32.const 137139) "a") (data (i32.const 137142) "a") (data (i32.const 137145) "a") (data (i32.const 137148) "a") (data (i32.const 137151) "a") (data (i32.const 137154) "a") (data (i32.const 137157) "a") (data (i32.const 137160) "a") (data (i32.const 137163) "a") (data (i32.const 137166) "a") (data (i32.const 137169) "a") (data (i32.const 137172) "a") (data (i32.const 137175) "a") (data (i32.const 137178) "a") (data (i32.const 137181) "a") (data (i32.const 137184) "a") (data (i32.const 137187) "a") (data (i32.const 137190) "a") (data (i32.const 137193) "a") (data (i32.const 137196) "a") (data (i32.const 137199) "a") (data (i32.const 137202) "a") (data (i32.const 137205) "a") (data (i32.const 137208) "a") (data (i32.const 137211) "a") (data (i32.const 137214) "a") (data (i32.const 137217) "a") (data (i32.const 137220) "a") (data (i32.const 137223) "a") (data (i32.const 137226) "a") (data (i32.const 137229) "a") (data (i32.const 137232) "a") (data (i32.const 137235) "a") (data (i32.const 137238) "a") (data (i32.const 137241) "a") (data (i32.const 137244) "a") (data (i32.const 137247) "a") (data (i32.const 137250) "a") (data (i32.const 137253) "a") (data (i32.const 137256) "a") (data (i32.const 137259) "a") (data (i32.const 137262) "a") (data (i32.const 137265) "a") (data (i32.const 137268) "a") (data (i32.const 137271) "a") (data (i32.const 137274) "a") (data (i32.const 137277) "a") (data (i32.const 137280) "a") (data (i32.const 137283) "a") (data (i32.const 137286) "a") (data (i32.const 137289) "a") (data (i32.const 137292) "a") (data (i32.const 137295) "a") (data (i32.const 137298) "a") (data (i32.const 137301) "a") (data (i32.const 137304) "a") (data (i32.const 137307) "a") (data (i32.const 137310) "a") (data (i32.const 137313) "a") (data (i32.const 137316) "a") (data (i32.const 137319) "a") (data (i32.const 137322) "a") (data (i32.const 137325) "a") (data (i32.const 137328) "a") (data (i32.const 137331) "a") (data (i32.const 137334) "a") (data (i32.const 137337) "a") (data (i32.const 137340) "a") (data (i32.const 137343) "a") (data (i32.const 137346) "a") (data (i32.const 137349) "a") (data (i32.const 137352) "a") (data (i32.const 137355) "a") (data (i32.const 137358) "a") (data (i32.const 137361) "a") (data (i32.const 137364) "a") (data (i32.const 137367) "a") (data (i32.const 137370) "a") (data (i32.const 137373) "a") (data (i32.const 137376) "a") (data (i32.const 137379) "a") (data (i32.const 137382) "a") (data (i32.const 137385) "a") (data (i32.const 137388) "a") (data (i32.const 137391) "a") (data (i32.const 137394) "a") (data (i32.const 137397) "a") (data (i32.const 137400) "a") (data (i32.const 137403) "a") (data (i32.const 137406) "a") (data (i32.const 137409) "a") (data (i32.const 137412) "a") (data (i32.const 137415) "a") (data (i32.const 137418) "a") (data (i32.const 137421) "a") (data (i32.const 137424) "a") (data (i32.const 137427) "a") (data (i32.const 137430) "a") (data (i32.const 137433) "a") (data (i32.const 137436) "a") (data (i32.const 137439) "a") (data (i32.const 137442) "a") (data (i32.const 137445) "a") (data (i32.const 137448) "a") (data (i32.const 137451) "a") (data (i32.const 137454) "a") (data (i32.const 137457) "a") (data (i32.const 137460) "a") (data (i32.const 137463) "a") (data (i32.const 137466) "a") (data (i32.const 137469) "a") (data (i32.const 137472) "a") (data (i32.const 137475) "a") (data (i32.const 137478) "a") (data (i32.const 137481) "a") (data (i32.const 137484) "a") (data (i32.const 137487) "a") (data (i32.const 137490) "a") (data (i32.const 137493) "a") (data (i32.const 137496) "a") (data (i32.const 137499) "a") (data (i32.const 137502) "a") (data (i32.const 137505) "a") (data (i32.const 137508) "a") (data (i32.const 137511) "a") (data (i32.const 137514) "a") (data (i32.const 137517) "a") (data (i32.const 137520) "a") (data (i32.const 137523) "a") (data (i32.const 137526) "a") (data (i32.const 137529) "a") (data (i32.const 137532) "a") (data (i32.const 137535) "a") (data (i32.const 137538) "a") (data (i32.const 137541) "a") (data (i32.const 137544) "a") (data (i32.const 137547) "a") (data (i32.const 137550) "a") (data (i32.const 137553) "a") (data (i32.const 137556) "a") (data (i32.const 137559) "a") (data (i32.const 137562) "a") (data (i32.const 137565) "a") (data (i32.const 137568) "a") (data (i32.const 137571) "a") (data (i32.const 137574) "a") (data (i32.const 137577) "a") (data (i32.const 137580) "a") (data (i32.const 137583) "a") (data (i32.const 137586) "a") (data (i32.const 137589) "a") (data (i32.const 137592) "a") (data (i32.const 137595) "a") (data (i32.const 137598) "a") (data (i32.const 137601) "a") (data (i32.const 137604) "a") (data (i32.const 137607) "a") (data (i32.const 137610) "a") (data (i32.const 137613) "a") (data (i32.const 137616) "a") (data (i32.const 137619) "a") (data (i32.const 137622) "a") (data (i32.const 137625) "a") (data (i32.const 137628) "a") (data (i32.const 137631) "a") (data (i32.const 137634) "a") (data (i32.const 137637) "a") (data (i32.const 137640) "a") (data (i32.const 137643) "a") (data (i32.const 137646) "a") (data (i32.const 137649) "a") (data (i32.const 137652) "a") (data (i32.const 137655) "a") (data (i32.const 137658) "a") (data (i32.const 137661) "a") (data (i32.const 137664) "a") (data (i32.const 137667) "a") (data (i32.const 137670) "a") (data (i32.const 137673) "a") (data (i32.const 137676) "a") (data (i32.const 137679) "a") (data (i32.const 137682) "a") (data (i32.const 137685) "a") (data (i32.const 137688) "a") (data (i32.const 137691) "a") (data (i32.const 137694) "a") (data (i32.const 137697) "a") (data (i32.const 137700) "a") (data (i32.const 137703) "a") (data (i32.const 137706) "a") (data (i32.const 137709) "a") (data (i32.const 137712) "a") (data (i32.const 137715) "a") (data (i32.const 137718) "a") (data (i32.const 137721) "a") (data (i32.const 137724) "a") (data (i32.const 137727) "a") (data (i32.const 137730) "a") (data (i32.const 137733) "a") (data (i32.const 137736) "a") (data (i32.const 137739) "a") (data (i32.const 137742) "a") (data (i32.const 137745) "a") (data (i32.const 137748) "a") (data (i32.const 137751) "a") (data (i32.const 137754) "a") (data (i32.const 137757) "a") (data (i32.const 137760) "a") (data (i32.const 137763) "a") (data (i32.const 137766) "a") (data (i32.const 137769) "a") (data (i32.const 137772) "a") (data (i32.const 137775) "a") (data (i32.const 137778) "a") (data (i32.const 137781) "a") (data (i32.const 137784) "a") (data (i32.const 137787) "a") (data (i32.const 137790) "a") (data (i32.const 137793) "a") (data (i32.const 137796) "a") (data (i32.const 137799) "a") (data (i32.const 137802) "a") (data (i32.const 137805) "a") (data (i32.const 137808) "a") (data (i32.const 137811) "a") (data (i32.const 137814) "a") (data (i32.const 137817) "a") (data (i32.const 137820) "a") (data (i32.const 137823) "a") (data (i32.const 137826) "a") (data (i32.const 137829) "a") (data (i32.const 137832) "a") (data (i32.const 137835) "a") (data (i32.const 137838) "a") (data (i32.const 137841) "a") (data (i32.const 137844) "a") (data (i32.const 137847) "a") (data (i32.const 137850) "a") (data (i32.const 137853) "a") (data (i32.const 137856) "a") (data (i32.const 137859) "a") (data (i32.const 137862) "a") (data (i32.const 137865) "a") (data (i32.const 137868) "a") (data (i32.const 137871) "a") (data (i32.const 137874) "a") (data (i32.const 137877) "a") (data (i32.const 137880) "a") (data (i32.const 137883) "a") (data (i32.const 137886) "a") (data (i32.const 137889) "a") (data (i32.const 137892) "a") (data (i32.const 137895) "a") (data (i32.const 137898) "a") (data (i32.const 137901) "a") (data (i32.const 137904) "a") (data (i32.const 137907) "a") (data (i32.const 137910) "a") (data (i32.const 137913) "a") (data (i32.const 137916) "a") (data (i32.const 137919) "a") (data (i32.const 137922) "a") (data (i32.const 137925) "a") (data (i32.const 137928) "a") (data (i32.const 137931) "a") (data (i32.const 137934) "a") (data (i32.const 137937) "a") (data (i32.const 137940) "a") (data (i32.const 137943) "a") (data (i32.const 137946) "a") (data (i32.const 137949) "a") (data (i32.const 137952) "a") (data (i32.const 137955) "a") (data (i32.const 137958) "a") (data (i32.const 137961) "a") (data (i32.const 137964) "a") (data (i32.const 137967) "a") (data (i32.const 137970) "a") (data (i32.const 137973) "a") (data (i32.const 137976) "a") (data (i32.const 137979) "a") (data (i32.const 137982) "a") (data (i32.const 137985) "a") (data (i32.const 137988) "a") (data (i32.const 137991) "a") (data (i32.const 137994) "a") (data (i32.const 137997) "a") (data (i32.const 138000) "a") (data (i32.const 138003) "a") (data (i32.const 138006) "a") (data (i32.const 138009) "a") (data (i32.const 138012) "a") (data (i32.const 138015) "a") (data (i32.const 138018) "a") (data (i32.const 138021) "a") (data (i32.const 138024) "a") (data (i32.const 138027) "a") (data (i32.const 138030) "a") (data (i32.const 138033) "a") (data (i32.const 138036) "a") (data (i32.const 138039) "a") (data (i32.const 138042) "a") (data (i32.const 138045) "a") (data (i32.const 138048) "a") (data (i32.const 138051) "a") (data (i32.const 138054) "a") (data (i32.const 138057) "a") (data (i32.const 138060) "a") (data (i32.const 138063) "a") (data (i32.const 138066) "a") (data (i32.const 138069) "a") (data (i32.const 138072) "a") (data (i32.const 138075) "a") (data (i32.const 138078) "a") (data (i32.const 138081) "a") (data (i32.const 138084) "a") (data (i32.const 138087) "a") (data (i32.const 138090) "a") (data (i32.const 138093) "a") (data (i32.const 138096) "a") (data (i32.const 138099) "a") (data (i32.const 138102) "a") (data (i32.const 138105) "a") (data (i32.const 138108) "a") (data (i32.const 138111) "a") (data (i32.const 138114) "a") (data (i32.const 138117) "a") (data (i32.const 138120) "a") (data (i32.const 138123) "a") (data (i32.const 138126) "a") (data (i32.const 138129) "a") (data (i32.const 138132) "a") (data (i32.const 138135) "a") (data (i32.const 138138) "a") (data (i32.const 138141) "a") (data (i32.const 138144) "a") (data (i32.const 138147) "a") (data (i32.const 138150) "a") (data (i32.const 138153) "a") (data (i32.const 138156) "a") (data (i32.const 138159) "a") (data (i32.const 138162) "a") (data (i32.const 138165) "a") (data (i32.const 138168) "a") (data (i32.const 138171) "a") (data (i32.const 138174) "a") (data (i32.const 138177) "a") (data (i32.const 138180) "a") (data (i32.const 138183) "a") (data (i32.const 138186) "a") (data (i32.const 138189) "a") (data (i32.const 138192) "a") (data (i32.const 138195) "a") (data (i32.const 138198) "a") (data (i32.const 138201) "a") (data (i32.const 138204) "a") (data (i32.const 138207) "a") (data (i32.const 138210) "a") (data (i32.const 138213) "a") (data (i32.const 138216) "a") (data (i32.const 138219) "a") (data (i32.const 138222) "a") (data (i32.const 138225) "a") (data (i32.const 138228) "a") (data (i32.const 138231) "a") (data (i32.const 138234) "a") (data (i32.const 138237) "a") (data (i32.const 138240) "a") (data (i32.const 138243) "a") (data (i32.const 138246) "a") (data (i32.const 138249) "a") (data (i32.const 138252) "a") (data (i32.const 138255) "a") (data (i32.const 138258) "a") (data (i32.const 138261) "a") (data (i32.const 138264) "a") (data (i32.const 138267) "a") (data (i32.const 138270) "a") (data (i32.const 138273) "a") (data (i32.const 138276) "a") (data (i32.const 138279) "a") (data (i32.const 138282) "a") (data (i32.const 138285) "a") (data (i32.const 138288) "a") (data (i32.const 138291) "a") (data (i32.const 138294) "a") (data (i32.const 138297) "a") (data (i32.const 138300) "a") (data (i32.const 138303) "a") (data (i32.const 138306) "a") (data (i32.const 138309) "a") (data (i32.const 138312) "a") (data (i32.const 138315) "a") (data (i32.const 138318) "a") (data (i32.const 138321) "a") (data (i32.const 138324) "a") (data (i32.const 138327) "a") (data (i32.const 138330) "a") (data (i32.const 138333) "a") (data (i32.const 138336) "a") (data (i32.const 138339) "a") (data (i32.const 138342) "a") (data (i32.const 138345) "a") (data (i32.const 138348) "a") (data (i32.const 138351) "a") (data (i32.const 138354) "a") (data (i32.const 138357) "a") (data (i32.const 138360) "a") (data (i32.const 138363) "a") (data (i32.const 138366) "a") (data (i32.const 138369) "a") (data (i32.const 138372) "a") (data (i32.const 138375) "a") (data (i32.const 138378) "a") (data (i32.const 138381) "a") (data (i32.const 138384) "a") (data (i32.const 138387) "a") (data (i32.const 138390) "a") (data (i32.const 138393) "a") (data (i32.const 138396) "a") (data (i32.const 138399) "a") (data (i32.const 138402) "a") (data (i32.const 138405) "a") (data (i32.const 138408) "a") (data (i32.const 138411) "a") (data (i32.const 138414) "a") (data (i32.const 138417) "a") (data (i32.const 138420) "a") (data (i32.const 138423) "a") (data (i32.const 138426) "a") (data (i32.const 138429) "a") (data (i32.const 138432) "a") (data (i32.const 138435) "a") (data (i32.const 138438) "a") (data (i32.const 138441) "a") (data (i32.const 138444) "a") (data (i32.const 138447) "a") (data (i32.const 138450) "a") (data (i32.const 138453) "a") (data (i32.const 138456) "a") (data (i32.const 138459) "a") (data (i32.const 138462) "a") (data (i32.const 138465) "a") (data (i32.const 138468) "a") (data (i32.const 138471) "a") (data (i32.const 138474) "a") (data (i32.const 138477) "a") (data (i32.const 138480) "a") (data (i32.const 138483) "a") (data (i32.const 138486) "a") (data (i32.const 138489) "a") (data (i32.const 138492) "a") (data (i32.const 138495) "a") (data (i32.const 138498) "a") (data (i32.const 138501) "a") (data (i32.const 138504) "a") (data (i32.const 138507) "a") (data (i32.const 138510) "a") (data (i32.const 138513) "a") (data (i32.const 138516) "a") (data (i32.const 138519) "a") (data (i32.const 138522) "a") (data (i32.const 138525) "a") (data (i32.const 138528) "a") (data (i32.const 138531) "a") (data (i32.const 138534) "a") (data (i32.const 138537) "a") (data (i32.const 138540) "a") (data (i32.const 138543) "a") (data (i32.const 138546) "a") (data (i32.const 138549) "a") (data (i32.const 138552) "a") (data (i32.const 138555) "a") (data (i32.const 138558) "a") (data (i32.const 138561) "a") (data (i32.const 138564) "a") (data (i32.const 138567) "a") (data (i32.const 138570) "a") (data (i32.const 138573) "a") (data (i32.const 138576) "a") (data (i32.const 138579) "a") (data (i32.const 138582) "a") (data (i32.const 138585) "a") (data (i32.const 138588) "a") (data (i32.const 138591) "a") (data (i32.const 138594) "a") (data (i32.const 138597) "a") (data (i32.const 138600) "a") (data (i32.const 138603) "a") (data (i32.const 138606) "a") (data (i32.const 138609) "a") (data (i32.const 138612) "a") (data (i32.const 138615) "a") (data (i32.const 138618) "a") (data (i32.const 138621) "a") (data (i32.const 138624) "a") (data (i32.const 138627) "a") (data (i32.const 138630) "a") (data (i32.const 138633) "a") (data (i32.const 138636) "a") (data (i32.const 138639) "a") (data (i32.const 138642) "a") (data (i32.const 138645) "a") (data (i32.const 138648) "a") (data (i32.const 138651) "a") (data (i32.const 138654) "a") (data (i32.const 138657) "a") (data (i32.const 138660) "a") (data (i32.const 138663) "a") (data (i32.const 138666) "a") (data (i32.const 138669) "a") (data (i32.const 138672) "a") (data (i32.const 138675) "a") (data (i32.const 138678) "a") (data (i32.const 138681) "a") (data (i32.const 138684) "a") (data (i32.const 138687) "a") (data (i32.const 138690) "a") (data (i32.const 138693) "a") (data (i32.const 138696) "a") (data (i32.const 138699) "a") (data (i32.const 138702) "a") (data (i32.const 138705) "a") (data (i32.const 138708) "a") (data (i32.const 138711) "a") (data (i32.const 138714) "a") (data (i32.const 138717) "a") (data (i32.const 138720) "a") (data (i32.const 138723) "a") (data (i32.const 138726) "a") (data (i32.const 138729) "a") (data (i32.const 138732) "a") (data (i32.const 138735) "a") (data (i32.const 138738) "a") (data (i32.const 138741) "a") (data (i32.const 138744) "a") (data (i32.const 138747) "a") (data (i32.const 138750) "a") (data (i32.const 138753) "a") (data (i32.const 138756) "a") (data (i32.const 138759) "a") (data (i32.const 138762) "a") (data (i32.const 138765) "a") (data (i32.const 138768) "a") (data (i32.const 138771) "a") (data (i32.const 138774) "a") (data (i32.const 138777) "a") (data (i32.const 138780) "a") (data (i32.const 138783) "a") (data (i32.const 138786) "a") (data (i32.const 138789) "a") (data (i32.const 138792) "a") (data (i32.const 138795) "a") (data (i32.const 138798) "a") (data (i32.const 138801) "a") (data (i32.const 138804) "a") (data (i32.const 138807) "a") (data (i32.const 138810) "a") (data (i32.const 138813) "a") (data (i32.const 138816) "a") (data (i32.const 138819) "a") (data (i32.const 138822) "a") (data (i32.const 138825) "a") (data (i32.const 138828) "a") (data (i32.const 138831) "a") (data (i32.const 138834) "a") (data (i32.const 138837) "a") (data (i32.const 138840) "a") (data (i32.const 138843) "a") (data (i32.const 138846) "a") (data (i32.const 138849) "a") (data (i32.const 138852) "a") (data (i32.const 138855) "a") (data (i32.const 138858) "a") (data (i32.const 138861) "a") (data (i32.const 138864) "a") (data (i32.const 138867) "a") (data (i32.const 138870) "a") (data (i32.const 138873) "a") (data (i32.const 138876) "a") (data (i32.const 138879) "a") (data (i32.const 138882) "a") (data (i32.const 138885) "a") (data (i32.const 138888) "a") (data (i32.const 138891) "a") (data (i32.const 138894) "a") (data (i32.const 138897) "a") (data (i32.const 138900) "a") (data (i32.const 138903) "a") (data (i32.const 138906) "a") (data (i32.const 138909) "a") (data (i32.const 138912) "a") (data (i32.const 138915) "a") (data (i32.const 138918) "a") (data (i32.const 138921) "a") (data (i32.const 138924) "a") (data (i32.const 138927) "a") (data (i32.const 138930) "a") (data (i32.const 138933) "a") (data (i32.const 138936) "a") (data (i32.const 138939) "a") (data (i32.const 138942) "a") (data (i32.const 138945) "a") (data (i32.const 138948) "a") (data (i32.const 138951) "a") (data (i32.const 138954) "a") (data (i32.const 138957) "a") (data (i32.const 138960) "a") (data (i32.const 138963) "a") (data (i32.const 138966) "a") (data (i32.const 138969) "a") (data (i32.const 138972) "a") (data (i32.const 138975) "a") (data (i32.const 138978) "a") (data (i32.const 138981) "a") (data (i32.const 138984) "a") (data (i32.const 138987) "a") (data (i32.const 138990) "a") (data (i32.const 138993) "a") (data (i32.const 138996) "a") (data (i32.const 138999) "a") (data (i32.const 139002) "a") (data (i32.const 139005) "a") (data (i32.const 139008) "a") (data (i32.const 139011) "a") (data (i32.const 139014) "a") (data (i32.const 139017) "a") (data (i32.const 139020) "a") (data (i32.const 139023) "a") (data (i32.const 139026) "a") (data (i32.const 139029) "a") (data (i32.const 139032) "a") (data (i32.const 139035) "a") (data (i32.const 139038) "a") (data (i32.const 139041) "a") (data (i32.const 139044) "a") (data (i32.const 139047) "a") (data (i32.const 139050) "a") (data (i32.const 139053) "a") (data (i32.const 139056) "a") (data (i32.const 139059) "a") (data (i32.const 139062) "a") (data (i32.const 139065) "a") (data (i32.const 139068) "a") (data (i32.const 139071) "a") (data (i32.const 139074) "a") (data (i32.const 139077) "a") (data (i32.const 139080) "a") (data (i32.const 139083) "a") (data (i32.const 139086) "a") (data (i32.const 139089) "a") (data (i32.const 139092) "a") (data (i32.const 139095) "a") (data (i32.const 139098) "a") (data (i32.const 139101) "a") (data (i32.const 139104) "a") (data (i32.const 139107) "a") (data (i32.const 139110) "a") (data (i32.const 139113) "a") (data (i32.const 139116) "a") (data (i32.const 139119) "a") (data (i32.const 139122) "a") (data (i32.const 139125) "a") (data (i32.const 139128) "a") (data (i32.const 139131) "a") (data (i32.const 139134) "a") (data (i32.const 139137) "a") (data (i32.const 139140) "a") (data (i32.const 139143) "a") (data (i32.const 139146) "a") (data (i32.const 139149) "a") (data (i32.const 139152) "a") (data (i32.const 139155) "a") (data (i32.const 139158) "a") (data (i32.const 139161) "a") (data (i32.const 139164) "a") (data (i32.const 139167) "a") (data (i32.const 139170) "a") (data (i32.const 139173) "a") (data (i32.const 139176) "a") (data (i32.const 139179) "a") (data (i32.const 139182) "a") (data (i32.const 139185) "a") (data (i32.const 139188) "a") (data (i32.const 139191) "a") (data (i32.const 139194) "a") (data (i32.const 139197) "a") (data (i32.const 139200) "a") (data (i32.const 139203) "a") (data (i32.const 139206) "a") (data (i32.const 139209) "a") (data (i32.const 139212) "a") (data (i32.const 139215) "a") (data (i32.const 139218) "a") (data (i32.const 139221) "a") (data (i32.const 139224) "a") (data (i32.const 139227) "a") (data (i32.const 139230) "a") (data (i32.const 139233) "a") (data (i32.const 139236) "a") (data (i32.const 139239) "a") (data (i32.const 139242) "a") (data (i32.const 139245) "a") (data (i32.const 139248) "a") (data (i32.const 139251) "a") (data (i32.const 139254) "a") (data (i32.const 139257) "a") (data (i32.const 139260) "a") (data (i32.const 139263) "a") (data (i32.const 139266) "a") (data (i32.const 139269) "a") (data (i32.const 139272) "a") (data (i32.const 139275) "a") (data (i32.const 139278) "a") (data (i32.const 139281) "a") (data (i32.const 139284) "a") (data (i32.const 139287) "a") (data (i32.const 139290) "a") (data (i32.const 139293) "a") (data (i32.const 139296) "a") (data (i32.const 139299) "a") (data (i32.const 139302) "a") (data (i32.const 139305) "a") (data (i32.const 139308) "a") (data (i32.const 139311) "a") (data (i32.const 139314) "a") (data (i32.const 139317) "a") (data (i32.const 139320) "a") (data (i32.const 139323) "a") (data (i32.const 139326) "a") (data (i32.const 139329) "a") (data (i32.const 139332) "a") (data (i32.const 139335) "a") (data (i32.const 139338) "a") (data (i32.const 139341) "a") (data (i32.const 139344) "a") (data (i32.const 139347) "a") (data (i32.const 139350) "a") (data (i32.const 139353) "a") (data (i32.const 139356) "a") (data (i32.const 139359) "a") (data (i32.const 139362) "a") (data (i32.const 139365) "a") (data (i32.const 139368) "a") (data (i32.const 139371) "a") (data (i32.const 139374) "a") (data (i32.const 139377) "a") (data (i32.const 139380) "a") (data (i32.const 139383) "a") (data (i32.const 139386) "a") (data (i32.const 139389) "a") (data (i32.const 139392) "a") (data (i32.const 139395) "a") (data (i32.const 139398) "a") (data (i32.const 139401) "a") (data (i32.const 139404) "a") (data (i32.const 139407) "a") (data (i32.const 139410) "a") (data (i32.const 139413) "a") (data (i32.const 139416) "a") (data (i32.const 139419) "a") (data (i32.const 139422) "a") (data (i32.const 139425) "a") (data (i32.const 139428) "a") (data (i32.const 139431) "a") (data (i32.const 139434) "a") (data (i32.const 139437) "a") (data (i32.const 139440) "a") (data (i32.const 139443) "a") (data (i32.const 139446) "a") (data (i32.const 139449) "a") (data (i32.const 139452) "a") (data (i32.const 139455) "a") (data (i32.const 139458) "a") (data (i32.const 139461) "a") (data (i32.const 139464) "a") (data (i32.const 139467) "a") (data (i32.const 139470) "a") (data (i32.const 139473) "a") (data (i32.const 139476) "a") (data (i32.const 139479) "a") (data (i32.const 139482) "a") (data (i32.const 139485) "a") (data (i32.const 139488) "a") (data (i32.const 139491) "a") (data (i32.const 139494) "a") (data (i32.const 139497) "a") (data (i32.const 139500) "a") (data (i32.const 139503) "a") (data (i32.const 139506) "a") (data (i32.const 139509) "a") (data (i32.const 139512) "a") (data (i32.const 139515) "a") (data (i32.const 139518) "a") (data (i32.const 139521) "a") (data (i32.const 139524) "a") (data (i32.const 139527) "a") (data (i32.const 139530) "a") (data (i32.const 139533) "a") (data (i32.const 139536) "a") (data (i32.const 139539) "a") (data (i32.const 139542) "a") (data (i32.const 139545) "a") (data (i32.const 139548) "a") (data (i32.const 139551) "a") (data (i32.const 139554) "a") (data (i32.const 139557) "a") (data (i32.const 139560) "a") (data (i32.const 139563) "a") (data (i32.const 139566) "a") (data (i32.const 139569) "a") (data (i32.const 139572) "a") (data (i32.const 139575) "a") (data (i32.const 139578) "a") (data (i32.const 139581) "a") (data (i32.const 139584) "a") (data (i32.const 139587) "a") (data (i32.const 139590) "a") (data (i32.const 139593) "a") (data (i32.const 139596) "a") (data (i32.const 139599) "a") (data (i32.const 139602) "a") (data (i32.const 139605) "a") (data (i32.const 139608) "a") (data (i32.const 139611) "a") (data (i32.const 139614) "a") (data (i32.const 139617) "a") (data (i32.const 139620) "a") (data (i32.const 139623) "a") (data (i32.const 139626) "a") (data (i32.const 139629) "a") (data (i32.const 139632) "a") (data (i32.const 139635) "a") (data (i32.const 139638) "a") (data (i32.const 139641) "a") (data (i32.const 139644) "a") (data (i32.const 139647) "a") (data (i32.const 139650) "a") (data (i32.const 139653) "a") (data (i32.const 139656) "a") (data (i32.const 139659) "a") (data (i32.const 139662) "a") (data (i32.const 139665) "a") (data (i32.const 139668) "a") (data (i32.const 139671) "a") (data (i32.const 139674) "a") (data (i32.const 139677) "a") (data (i32.const 139680) "a") (data (i32.const 139683) "a") (data (i32.const 139686) "a") (data (i32.const 139689) "a") (data (i32.const 139692) "a") (data (i32.const 139695) "a") (data (i32.const 139698) "a") (data (i32.const 139701) "a") (data (i32.const 139704) "a") (data (i32.const 139707) "a") (data (i32.const 139710) "a") (data (i32.const 139713) "a") (data (i32.const 139716) "a") (data (i32.const 139719) "a") (data (i32.const 139722) "a") (data (i32.const 139725) "a") (data (i32.const 139728) "a") (data (i32.const 139731) "a") (data (i32.const 139734) "a") (data (i32.const 139737) "a") (data (i32.const 139740) "a") (data (i32.const 139743) "a") (data (i32.const 139746) "a") (data (i32.const 139749) "a") (data (i32.const 139752) "a") (data (i32.const 139755) "a") (data (i32.const 139758) "a") (data (i32.const 139761) "a") (data (i32.const 139764) "a") (data (i32.const 139767) "a") (data (i32.const 139770) "a") (data (i32.const 139773) "a") (data (i32.const 139776) "a") (data (i32.const 139779) "a") (data (i32.const 139782) "a") (data (i32.const 139785) "a") (data (i32.const 139788) "a") (data (i32.const 139791) "a") (data (i32.const 139794) "a") (data (i32.const 139797) "a") (data (i32.const 139800) "a") (data (i32.const 139803) "a") (data (i32.const 139806) "a") (data (i32.const 139809) "a") (data (i32.const 139812) "a") (data (i32.const 139815) "a") (data (i32.const 139818) "a") (data (i32.const 139821) "a") (data (i32.const 139824) "a") (data (i32.const 139827) "a") (data (i32.const 139830) "a") (data (i32.const 139833) "a") (data (i32.const 139836) "a") (data (i32.const 139839) "a") (data (i32.const 139842) "a") (data (i32.const 139845) "a") (data (i32.const 139848) "a") (data (i32.const 139851) "a") (data (i32.const 139854) "a") (data (i32.const 139857) "a") (data (i32.const 139860) "a") (data (i32.const 139863) "a") (data (i32.const 139866) "a") (data (i32.const 139869) "a") (data (i32.const 139872) "a") (data (i32.const 139875) "a") (data (i32.const 139878) "a") (data (i32.const 139881) "a") (data (i32.const 139884) "a") (data (i32.const 139887) "a") (data (i32.const 139890) "a") (data (i32.const 139893) "a") (data (i32.const 139896) "a") (data (i32.const 139899) "a") (data (i32.const 139902) "a") (data (i32.const 139905) "a") (data (i32.const 139908) "a") (data (i32.const 139911) "a") (data (i32.const 139914) "a") (data (i32.const 139917) "a") (data (i32.const 139920) "a") (data (i32.const 139923) "a") (data (i32.const 139926) "a") (data (i32.const 139929) "a") (data (i32.const 139932) "a") (data (i32.const 139935) "a") (data (i32.const 139938) "a") (data (i32.const 139941) "a") (data (i32.const 139944) "a") (data (i32.const 139947) "a") (data (i32.const 139950) "a") (data (i32.const 139953) "a") (data (i32.const 139956) "a") (data (i32.const 139959) "a") (data (i32.const 139962) "a") (data (i32.const 139965) "a") (data (i32.const 139968) "a") (data (i32.const 139971) "a") (data (i32.const 139974) "a") (data (i32.const 139977) "a") (data (i32.const 139980) "a") (data (i32.const 139983) "a") (data (i32.const 139986) "a") (data (i32.const 139989) "a") (data (i32.const 139992) "a") (data (i32.const 139995) "a") (data (i32.const 139998) "a") (data (i32.const 140001) "a") (data (i32.const 140004) "a") (data (i32.const 140007) "a") (data (i32.const 140010) "a") (data (i32.const 140013) "a") (data (i32.const 140016) "a") (data (i32.const 140019) "a") (data (i32.const 140022) "a") (data (i32.const 140025) "a") (data (i32.const 140028) "a") (data (i32.const 140031) "a") (data (i32.const 140034) "a") (data (i32.const 140037) "a") (data (i32.const 140040) "a") (data (i32.const 140043) "a") (data (i32.const 140046) "a") (data (i32.const 140049) "a") (data (i32.const 140052) "a") (data (i32.const 140055) "a") (data (i32.const 140058) "a") (data (i32.const 140061) "a") (data (i32.const 140064) "a") (data (i32.const 140067) "a") (data (i32.const 140070) "a") (data (i32.const 140073) "a") (data (i32.const 140076) "a") (data (i32.const 140079) "a") (data (i32.const 140082) "a") (data (i32.const 140085) "a") (data (i32.const 140088) "a") (data (i32.const 140091) "a") (data (i32.const 140094) "a") (data (i32.const 140097) "a") (data (i32.const 140100) "a") (data (i32.const 140103) "a") (data (i32.const 140106) "a") (data (i32.const 140109) "a") (data (i32.const 140112) "a") (data (i32.const 140115) "a") (data (i32.const 140118) "a") (data (i32.const 140121) "a") (data (i32.const 140124) "a") (data (i32.const 140127) "a") (data (i32.const 140130) "a") (data (i32.const 140133) "a") (data (i32.const 140136) "a") (data (i32.const 140139) "a") (data (i32.const 140142) "a") (data (i32.const 140145) "a") (data (i32.const 140148) "a") (data (i32.const 140151) "a") (data (i32.const 140154) "a") (data (i32.const 140157) "a") (data (i32.const 140160) "a") (data (i32.const 140163) "a") (data (i32.const 140166) "a") (data (i32.const 140169) "a") (data (i32.const 140172) "a") (data (i32.const 140175) "a") (data (i32.const 140178) "a") (data (i32.const 140181) "a") (data (i32.const 140184) "a") (data (i32.const 140187) "a") (data (i32.const 140190) "a") (data (i32.const 140193) "a") (data (i32.const 140196) "a") (data (i32.const 140199) "a") (data (i32.const 140202) "a") (data (i32.const 140205) "a") (data (i32.const 140208) "a") (data (i32.const 140211) "a") (data (i32.const 140214) "a") (data (i32.const 140217) "a") (data (i32.const 140220) "a") (data (i32.const 140223) "a") (data (i32.const 140226) "a") (data (i32.const 140229) "a") (data (i32.const 140232) "a") (data (i32.const 140235) "a") (data (i32.const 140238) "a") (data (i32.const 140241) "a") (data (i32.const 140244) "a") (data (i32.const 140247) "a") (data (i32.const 140250) "a") (data (i32.const 140253) "a") (data (i32.const 140256) "a") (data (i32.const 140259) "a") (data (i32.const 140262) "a") (data (i32.const 140265) "a") (data (i32.const 140268) "a") (data (i32.const 140271) "a") (data (i32.const 140274) "a") (data (i32.const 140277) "a") (data (i32.const 140280) "a") (data (i32.const 140283) "a") (data (i32.const 140286) "a") (data (i32.const 140289) "a") (data (i32.const 140292) "a") (data (i32.const 140295) "a") (data (i32.const 140298) "a") (data (i32.const 140301) "a") (data (i32.const 140304) "a") (data (i32.const 140307) "a") (data (i32.const 140310) "a") (data (i32.const 140313) "a") (data (i32.const 140316) "a") (data (i32.const 140319) "a") (data (i32.const 140322) "a") (data (i32.const 140325) "a") (data (i32.const 140328) "a") (data (i32.const 140331) "a") (data (i32.const 140334) "a") (data (i32.const 140337) "a") (data (i32.const 140340) "a") (data (i32.const 140343) "a") (data (i32.const 140346) "a") (data (i32.const 140349) "a") (data (i32.const 140352) "a") (data (i32.const 140355) "a") (data (i32.const 140358) "a") (data (i32.const 140361) "a") (data (i32.const 140364) "a") (data (i32.const 140367) "a") (data (i32.const 140370) "a") (data (i32.const 140373) "a") (data (i32.const 140376) "a") (data (i32.const 140379) "a") (data (i32.const 140382) "a") (data (i32.const 140385) "a") (data (i32.const 140388) "a") (data (i32.const 140391) "a") (data (i32.const 140394) "a") (data (i32.const 140397) "a") (data (i32.const 140400) "a") (data (i32.const 140403) "a") (data (i32.const 140406) "a") (data (i32.const 140409) "a") (data (i32.const 140412) "a") (data (i32.const 140415) "a") (data (i32.const 140418) "a") (data (i32.const 140421) "a") (data (i32.const 140424) "a") (data (i32.const 140427) "a") (data (i32.const 140430) "a") (data (i32.const 140433) "a") (data (i32.const 140436) "a") (data (i32.const 140439) "a") (data (i32.const 140442) "a") (data (i32.const 140445) "a") (data (i32.const 140448) "a") (data (i32.const 140451) "a") (data (i32.const 140454) "a") (data (i32.const 140457) "a") (data (i32.const 140460) "a") (data (i32.const 140463) "a") (data (i32.const 140466) "a") (data (i32.const 140469) "a") (data (i32.const 140472) "a") (data (i32.const 140475) "a") (data (i32.const 140478) "a") (data (i32.const 140481) "a") (data (i32.const 140484) "a") (data (i32.const 140487) "a") (data (i32.const 140490) "a") (data (i32.const 140493) "a") (data (i32.const 140496) "a") (data (i32.const 140499) "a") (data (i32.const 140502) "a") (data (i32.const 140505) "a") (data (i32.const 140508) "a") (data (i32.const 140511) "a") (data (i32.const 140514) "a") (data (i32.const 140517) "a") (data (i32.const 140520) "a") (data (i32.const 140523) "a") (data (i32.const 140526) "a") (data (i32.const 140529) "a") (data (i32.const 140532) "a") (data (i32.const 140535) "a") (data (i32.const 140538) "a") (data (i32.const 140541) "a") (data (i32.const 140544) "a") (data (i32.const 140547) "a") (data (i32.const 140550) "a") (data (i32.const 140553) "a") (data (i32.const 140556) "a") (data (i32.const 140559) "a") (data (i32.const 140562) "a") (data (i32.const 140565) "a") (data (i32.const 140568) "a") (data (i32.const 140571) "a") (data (i32.const 140574) "a") (data (i32.const 140577) "a") (data (i32.const 140580) "a") (data (i32.const 140583) "a") (data (i32.const 140586) "a") (data (i32.const 140589) "a") (data (i32.const 140592) "a") (data (i32.const 140595) "a") (data (i32.const 140598) "a") (data (i32.const 140601) "a") (data (i32.const 140604) "a") (data (i32.const 140607) "a") (data (i32.const 140610) "a") (data (i32.const 140613) "a") (data (i32.const 140616) "a") (data (i32.const 140619) "a") (data (i32.const 140622) "a") (data (i32.const 140625) "a") (data (i32.const 140628) "a") (data (i32.const 140631) "a") (data (i32.const 140634) "a") (data (i32.const 140637) "a") (data (i32.const 140640) "a") (data (i32.const 140643) "a") (data (i32.const 140646) "a") (data (i32.const 140649) "a") (data (i32.const 140652) "a") (data (i32.const 140655) "a") (data (i32.const 140658) "a") (data (i32.const 140661) "a") (data (i32.const 140664) "a") (data (i32.const 140667) "a") (data (i32.const 140670) "a") (data (i32.const 140673) "a") (data (i32.const 140676) "a") (data (i32.const 140679) "a") (data (i32.const 140682) "a") (data (i32.const 140685) "a") (data (i32.const 140688) "a") (data (i32.const 140691) "a") (data (i32.const 140694) "a") (data (i32.const 140697) "a") (data (i32.const 140700) "a") (data (i32.const 140703) "a") (data (i32.const 140706) "a") (data (i32.const 140709) "a") (data (i32.const 140712) "a") (data (i32.const 140715) "a") (data (i32.const 140718) "a") (data (i32.const 140721) "a") (data (i32.const 140724) "a") (data (i32.const 140727) "a") (data (i32.const 140730) "a") (data (i32.const 140733) "a") (data (i32.const 140736) "a") (data (i32.const 140739) "a") (data (i32.const 140742) "a") (data (i32.const 140745) "a") (data (i32.const 140748) "a") (data (i32.const 140751) "a") (data (i32.const 140754) "a") (data (i32.const 140757) "a") (data (i32.const 140760) "a") (data (i32.const 140763) "a") (data (i32.const 140766) "a") (data (i32.const 140769) "a") (data (i32.const 140772) "a") (data (i32.const 140775) "a") (data (i32.const 140778) "a") (data (i32.const 140781) "a") (data (i32.const 140784) "a") (data (i32.const 140787) "a") (data (i32.const 140790) "a") (data (i32.const 140793) "a") (data (i32.const 140796) "a") (data (i32.const 140799) "a") (data (i32.const 140802) "a") (data (i32.const 140805) "a") (data (i32.const 140808) "a") (data (i32.const 140811) "a") (data (i32.const 140814) "a") (data (i32.const 140817) "a") (data (i32.const 140820) "a") (data (i32.const 140823) "a") (data (i32.const 140826) "a") (data (i32.const 140829) "a") (data (i32.const 140832) "a") (data (i32.const 140835) "a") (data (i32.const 140838) "a") (data (i32.const 140841) "a") (data (i32.const 140844) "a") (data (i32.const 140847) "a") (data (i32.const 140850) "a") (data (i32.const 140853) "a") (data (i32.const 140856) "a") (data (i32.const 140859) "a") (data (i32.const 140862) "a") (data (i32.const 140865) "a") (data (i32.const 140868) "a") (data (i32.const 140871) "a") (data (i32.const 140874) "a") (data (i32.const 140877) "a") (data (i32.const 140880) "a") (data (i32.const 140883) "a") (data (i32.const 140886) "a") (data (i32.const 140889) "a") (data (i32.const 140892) "a") (data (i32.const 140895) "a") (data (i32.const 140898) "a") (data (i32.const 140901) "a") (data (i32.const 140904) "a") (data (i32.const 140907) "a") (data (i32.const 140910) "a") (data (i32.const 140913) "a") (data (i32.const 140916) "a") (data (i32.const 140919) "a") (data (i32.const 140922) "a") (data (i32.const 140925) "a") (data (i32.const 140928) "a") (data (i32.const 140931) "a") (data (i32.const 140934) "a") (data (i32.const 140937) "a") (data (i32.const 140940) "a") (data (i32.const 140943) "a") (data (i32.const 140946) "a") (data (i32.const 140949) "a") (data (i32.const 140952) "a") (data (i32.const 140955) "a") (data (i32.const 140958) "a") (data (i32.const 140961) "a") (data (i32.const 140964) "a") (data (i32.const 140967) "a") (data (i32.const 140970) "a") (data (i32.const 140973) "a") (data (i32.const 140976) "a") (data (i32.const 140979) "a") (data (i32.const 140982) "a") (data (i32.const 140985) "a") (data (i32.const 140988) "a") (data (i32.const 140991) "a") (data (i32.const 140994) "a") (data (i32.const 140997) "a") (data (i32.const 141000) "a") (data (i32.const 141003) "a") (data (i32.const 141006) "a") (data (i32.const 141009) "a") (data (i32.const 141012) "a") (data (i32.const 141015) "a") (data (i32.const 141018) "a") (data (i32.const 141021) "a") (data (i32.const 141024) "a") (data (i32.const 141027) "a") (data (i32.const 141030) "a") (data (i32.const 141033) "a") (data (i32.const 141036) "a") (data (i32.const 141039) "a") (data (i32.const 141042) "a") (data (i32.const 141045) "a") (data (i32.const 141048) "a") (data (i32.const 141051) "a") (data (i32.const 141054) "a") (data (i32.const 141057) "a") (data (i32.const 141060) "a") (data (i32.const 141063) "a") (data (i32.const 141066) "a") (data (i32.const 141069) "a") (data (i32.const 141072) "a") (data (i32.const 141075) "a") (data (i32.const 141078) "a") (data (i32.const 141081) "a") (data (i32.const 141084) "a") (data (i32.const 141087) "a") (data (i32.const 141090) "a") (data (i32.const 141093) "a") (data (i32.const 141096) "a") (data (i32.const 141099) "a") (data (i32.const 141102) "a") (data (i32.const 141105) "a") (data (i32.const 141108) "a") (data (i32.const 141111) "a") (data (i32.const 141114) "a") (data (i32.const 141117) "a") (data (i32.const 141120) "a") (data (i32.const 141123) "a") (data (i32.const 141126) "a") (data (i32.const 141129) "a") (data (i32.const 141132) "a") (data (i32.const 141135) "a") (data (i32.const 141138) "a") (data (i32.const 141141) "a") (data (i32.const 141144) "a") (data (i32.const 141147) "a") (data (i32.const 141150) "a") (data (i32.const 141153) "a") (data (i32.const 141156) "a") (data (i32.const 141159) "a") (data (i32.const 141162) "a") (data (i32.const 141165) "a") (data (i32.const 141168) "a") (data (i32.const 141171) "a") (data (i32.const 141174) "a") (data (i32.const 141177) "a") (data (i32.const 141180) "a") (data (i32.const 141183) "a") (data (i32.const 141186) "a") (data (i32.const 141189) "a") (data (i32.const 141192) "a") (data (i32.const 141195) "a") (data (i32.const 141198) "a") (data (i32.const 141201) "a") (data (i32.const 141204) "a") (data (i32.const 141207) "a") (data (i32.const 141210) "a") (data (i32.const 141213) "a") (data (i32.const 141216) "a") (data (i32.const 141219) "a") (data (i32.const 141222) "a") (data (i32.const 141225) "a") (data (i32.const 141228) "a") (data (i32.const 141231) "a") (data (i32.const 141234) "a") (data (i32.const 141237) "a") (data (i32.const 141240) "a") (data (i32.const 141243) "a") (data (i32.const 141246) "a") (data (i32.const 141249) "a") (data (i32.const 141252) "a") (data (i32.const 141255) "a") (data (i32.const 141258) "a") (data (i32.const 141261) "a") (data (i32.const 141264) "a") (data (i32.const 141267) "a") (data (i32.const 141270) "a") (data (i32.const 141273) "a") (data (i32.const 141276) "a") (data (i32.const 141279) "a") (data (i32.const 141282) "a") (data (i32.const 141285) "a") (data (i32.const 141288) "a") (data (i32.const 141291) "a") (data (i32.const 141294) "a") (data (i32.const 141297) "a") (data (i32.const 141300) "a") (data (i32.const 141303) "a") (data (i32.const 141306) "a") (data (i32.const 141309) "a") (data (i32.const 141312) "a") (data (i32.const 141315) "a") (data (i32.const 141318) "a") (data (i32.const 141321) "a") (data (i32.const 141324) "a") (data (i32.const 141327) "a") (data (i32.const 141330) "a") (data (i32.const 141333) "a") (data (i32.const 141336) "a") (data (i32.const 141339) "a") (data (i32.const 141342) "a") (data (i32.const 141345) "a") (data (i32.const 141348) "a") (data (i32.const 141351) "a") (data (i32.const 141354) "a") (data (i32.const 141357) "a") (data (i32.const 141360) "a") (data (i32.const 141363) "a") (data (i32.const 141366) "a") (data (i32.const 141369) "a") (data (i32.const 141372) "a") (data (i32.const 141375) "a") (data (i32.const 141378) "a") (data (i32.const 141381) "a") (data (i32.const 141384) "a") (data (i32.const 141387) "a") (data (i32.const 141390) "a") (data (i32.const 141393) "a") (data (i32.const 141396) "a") (data (i32.const 141399) "a") (data (i32.const 141402) "a") (data (i32.const 141405) "a") (data (i32.const 141408) "a") (data (i32.const 141411) "a") (data (i32.const 141414) "a") (data (i32.const 141417) "a") (data (i32.const 141420) "a") (data (i32.const 141423) "a") (data (i32.const 141426) "a") (data (i32.const 141429) "a") (data (i32.const 141432) "a") (data (i32.const 141435) "a") (data (i32.const 141438) "a") (data (i32.const 141441) "a") (data (i32.const 141444) "a") (data (i32.const 141447) "a") (data (i32.const 141450) "a") (data (i32.const 141453) "a") (data (i32.const 141456) "a") (data (i32.const 141459) "a") (data (i32.const 141462) "a") (data (i32.const 141465) "a") (data (i32.const 141468) "a") (data (i32.const 141471) "a") (data (i32.const 141474) "a") (data (i32.const 141477) "a") (data (i32.const 141480) "a") (data (i32.const 141483) "a") (data (i32.const 141486) "a") (data (i32.const 141489) "a") (data (i32.const 141492) "a") (data (i32.const 141495) "a") (data (i32.const 141498) "a") (data (i32.const 141501) "a") (data (i32.const 141504) "a") (data (i32.const 141507) "a") (data (i32.const 141510) "a") (data (i32.const 141513) "a") (data (i32.const 141516) "a") (data (i32.const 141519) "a") (data (i32.const 141522) "a") (data (i32.const 141525) "a") (data (i32.const 141528) "a") (data (i32.const 141531) "a") (data (i32.const 141534) "a") (data (i32.const 141537) "a") (data (i32.const 141540) "a") (data (i32.const 141543) "a") (data (i32.const 141546) "a") (data (i32.const 141549) "a") (data (i32.const 141552) "a") (data (i32.const 141555) "a") (data (i32.const 141558) "a") (data (i32.const 141561) "a") (data (i32.const 141564) "a") (data (i32.const 141567) "a") (data (i32.const 141570) "a") (data (i32.const 141573) "a") (data (i32.const 141576) "a") (data (i32.const 141579) "a") (data (i32.const 141582) "a") (data (i32.const 141585) "a") (data (i32.const 141588) "a") (data (i32.const 141591) "a") (data (i32.const 141594) "a") (data (i32.const 141597) "a") (data (i32.const 141600) "a") (data (i32.const 141603) "a") (data (i32.const 141606) "a") (data (i32.const 141609) "a") (data (i32.const 141612) "a") (data (i32.const 141615) "a") (data (i32.const 141618) "a") (data (i32.const 141621) "a") (data (i32.const 141624) "a") (data (i32.const 141627) "a") (data (i32.const 141630) "a") (data (i32.const 141633) "a") (data (i32.const 141636) "a") (data (i32.const 141639) "a") (data (i32.const 141642) "a") (data (i32.const 141645) "a") (data (i32.const 141648) "a") (data (i32.const 141651) "a") (data (i32.const 141654) "a") (data (i32.const 141657) "a") (data (i32.const 141660) "a") (data (i32.const 141663) "a") (data (i32.const 141666) "a") (data (i32.const 141669) "a") (data (i32.const 141672) "a") (data (i32.const 141675) "a") (data (i32.const 141678) "a") (data (i32.const 141681) "a") (data (i32.const 141684) "a") (data (i32.const 141687) "a") (data (i32.const 141690) "a") (data (i32.const 141693) "a") (data (i32.const 141696) "a") (data (i32.const 141699) "a") (data (i32.const 141702) "a") (data (i32.const 141705) "a") (data (i32.const 141708) "a") (data (i32.const 141711) "a") (data (i32.const 141714) "a") (data (i32.const 141717) "a") (data (i32.const 141720) "a") (data (i32.const 141723) "a") (data (i32.const 141726) "a") (data (i32.const 141729) "a") (data (i32.const 141732) "a") (data (i32.const 141735) "a") (data (i32.const 141738) "a") (data (i32.const 141741) "a") (data (i32.const 141744) "a") (data (i32.const 141747) "a") (data (i32.const 141750) "a") (data (i32.const 141753) "a") (data (i32.const 141756) "a") (data (i32.const 141759) "a") (data (i32.const 141762) "a") (data (i32.const 141765) "a") (data (i32.const 141768) "a") (data (i32.const 141771) "a") (data (i32.const 141774) "a") (data (i32.const 141777) "a") (data (i32.const 141780) "a") (data (i32.const 141783) "a") (data (i32.const 141786) "a") (data (i32.const 141789) "a") (data (i32.const 141792) "a") (data (i32.const 141795) "a") (data (i32.const 141798) "a") (data (i32.const 141801) "a") (data (i32.const 141804) "a") (data (i32.const 141807) "a") (data (i32.const 141810) "a") (data (i32.const 141813) "a") (data (i32.const 141816) "a") (data (i32.const 141819) "a") (data (i32.const 141822) "a") (data (i32.const 141825) "a") (data (i32.const 141828) "a") (data (i32.const 141831) "a") (data (i32.const 141834) "a") (data (i32.const 141837) "a") (data (i32.const 141840) "a") (data (i32.const 141843) "a") (data (i32.const 141846) "a") (data (i32.const 141849) "a") (data (i32.const 141852) "a") (data (i32.const 141855) "a") (data (i32.const 141858) "a") (data (i32.const 141861) "a") (data (i32.const 141864) "a") (data (i32.const 141867) "a") (data (i32.const 141870) "a") (data (i32.const 141873) "a") (data (i32.const 141876) "a") (data (i32.const 141879) "a") (data (i32.const 141882) "a") (data (i32.const 141885) "a") (data (i32.const 141888) "a") (data (i32.const 141891) "a") (data (i32.const 141894) "a") (data (i32.const 141897) "a") (data (i32.const 141900) "a") (data (i32.const 141903) "a") (data (i32.const 141906) "a") (data (i32.const 141909) "a") (data (i32.const 141912) "a") (data (i32.const 141915) "a") (data (i32.const 141918) "a") (data (i32.const 141921) "a") (data (i32.const 141924) "a") (data (i32.const 141927) "a") (data (i32.const 141930) "a") (data (i32.const 141933) "a") (data (i32.const 141936) "a") (data (i32.const 141939) "a") (data (i32.const 141942) "a") (data (i32.const 141945) "a") (data (i32.const 141948) "a") (data (i32.const 141951) "a") (data (i32.const 141954) "a") (data (i32.const 141957) "a") (data (i32.const 141960) "a") (data (i32.const 141963) "a") (data (i32.const 141966) "a") (data (i32.const 141969) "a") (data (i32.const 141972) "a") (data (i32.const 141975) "a") (data (i32.const 141978) "a") (data (i32.const 141981) "a") (data (i32.const 141984) "a") (data (i32.const 141987) "a") (data (i32.const 141990) "a") (data (i32.const 141993) "a") (data (i32.const 141996) "a") (data (i32.const 141999) "a") (data (i32.const 142002) "a") (data (i32.const 142005) "a") (data (i32.const 142008) "a") (data (i32.const 142011) "a") (data (i32.const 142014) "a") (data (i32.const 142017) "a") (data (i32.const 142020) "a") (data (i32.const 142023) "a") (data (i32.const 142026) "a") (data (i32.const 142029) "a") (data (i32.const 142032) "a") (data (i32.const 142035) "a") (data (i32.const 142038) "a") (data (i32.const 142041) "a") (data (i32.const 142044) "a") (data (i32.const 142047) "a") (data (i32.const 142050) "a") (data (i32.const 142053) "a") (data (i32.const 142056) "a") (data (i32.const 142059) "a") (data (i32.const 142062) "a") (data (i32.const 142065) "a") (data (i32.const 142068) "a") (data (i32.const 142071) "a") (data (i32.const 142074) "a") (data (i32.const 142077) "a") (data (i32.const 142080) "a") (data (i32.const 142083) "a") (data (i32.const 142086) "a") (data (i32.const 142089) "a") (data (i32.const 142092) "a") (data (i32.const 142095) "a") (data (i32.const 142098) "a") (data (i32.const 142101) "a") (data (i32.const 142104) "a") (data (i32.const 142107) "a") (data (i32.const 142110) "a") (data (i32.const 142113) "a") (data (i32.const 142116) "a") (data (i32.const 142119) "a") (data (i32.const 142122) "a") (data (i32.const 142125) "a") (data (i32.const 142128) "a") (data (i32.const 142131) "a") (data (i32.const 142134) "a") (data (i32.const 142137) "a") (data (i32.const 142140) "a") (data (i32.const 142143) "a") (data (i32.const 142146) "a") (data (i32.const 142149) "a") (data (i32.const 142152) "a") (data (i32.const 142155) "a") (data (i32.const 142158) "a") (data (i32.const 142161) "a") (data (i32.const 142164) "a") (data (i32.const 142167) "a") (data (i32.const 142170) "a") (data (i32.const 142173) "a") (data (i32.const 142176) "a") (data (i32.const 142179) "a") (data (i32.const 142182) "a") (data (i32.const 142185) "a") (data (i32.const 142188) "a") (data (i32.const 142191) "a") (data (i32.const 142194) "a") (data (i32.const 142197) "a") (data (i32.const 142200) "a") (data (i32.const 142203) "a") (data (i32.const 142206) "a") (data (i32.const 142209) "a") (data (i32.const 142212) "a") (data (i32.const 142215) "a") (data (i32.const 142218) "a") (data (i32.const 142221) "a") (data (i32.const 142224) "a") (data (i32.const 142227) "a") (data (i32.const 142230) "a") (data (i32.const 142233) "a") (data (i32.const 142236) "a") (data (i32.const 142239) "a") (data (i32.const 142242) "a") (data (i32.const 142245) "a") (data (i32.const 142248) "a") (data (i32.const 142251) "a") (data (i32.const 142254) "a") (data (i32.const 142257) "a") (data (i32.const 142260) "a") (data (i32.const 142263) "a") (data (i32.const 142266) "a") (data (i32.const 142269) "a") (data (i32.const 142272) "a") (data (i32.const 142275) "a") (data (i32.const 142278) "a") (data (i32.const 142281) "a") (data (i32.const 142284) "a") (data (i32.const 142287) "a") (data (i32.const 142290) "a") (data (i32.const 142293) "a") (data (i32.const 142296) "a") (data (i32.const 142299) "a") (data (i32.const 142302) "a") (data (i32.const 142305) "a") (data (i32.const 142308) "a") (data (i32.const 142311) "a") (data (i32.const 142314) "a") (data (i32.const 142317) "a") (data (i32.const 142320) "a") (data (i32.const 142323) "a") (data (i32.const 142326) "a") (data (i32.const 142329) "a") (data (i32.const 142332) "a") (data (i32.const 142335) "a") (data (i32.const 142338) "a") (data (i32.const 142341) "a") (data (i32.const 142344) "a") (data (i32.const 142347) "a") (data (i32.const 142350) "a") (data (i32.const 142353) "a") (data (i32.const 142356) "a") (data (i32.const 142359) "a") (data (i32.const 142362) "a") (data (i32.const 142365) "a") (data (i32.const 142368) "a") (data (i32.const 142371) "a") (data (i32.const 142374) "a") (data (i32.const 142377) "a") (data (i32.const 142380) "a") (data (i32.const 142383) "a") (data (i32.const 142386) "a") (data (i32.const 142389) "a") (data (i32.const 142392) "a") (data (i32.const 142395) "a") (data (i32.const 142398) "a") (data (i32.const 142401) "a") (data (i32.const 142404) "a") (data (i32.const 142407) "a") (data (i32.const 142410) "a") (data (i32.const 142413) "a") (data (i32.const 142416) "a") (data (i32.const 142419) "a") (data (i32.const 142422) "a") (data (i32.const 142425) "a") (data (i32.const 142428) "a") (data (i32.const 142431) "a") (data (i32.const 142434) "a") (data (i32.const 142437) "a") (data (i32.const 142440) "a") (data (i32.const 142443) "a") (data (i32.const 142446) "a") (data (i32.const 142449) "a") (data (i32.const 142452) "a") (data (i32.const 142455) "a") (data (i32.const 142458) "a") (data (i32.const 142461) "a") (data (i32.const 142464) "a") (data (i32.const 142467) "a") (data (i32.const 142470) "a") (data (i32.const 142473) "a") (data (i32.const 142476) "a") (data (i32.const 142479) "a") (data (i32.const 142482) "a") (data (i32.const 142485) "a") (data (i32.const 142488) "a") (data (i32.const 142491) "a") (data (i32.const 142494) "a") (data (i32.const 142497) "a") (data (i32.const 142500) "a") (data (i32.const 142503) "a") (data (i32.const 142506) "a") (data (i32.const 142509) "a") (data (i32.const 142512) "a") (data (i32.const 142515) "a") (data (i32.const 142518) "a") (data (i32.const 142521) "a") (data (i32.const 142524) "a") (data (i32.const 142527) "a") (data (i32.const 142530) "a") (data (i32.const 142533) "a") (data (i32.const 142536) "a") (data (i32.const 142539) "a") (data (i32.const 142542) "a") (data (i32.const 142545) "a") (data (i32.const 142548) "a") (data (i32.const 142551) "a") (data (i32.const 142554) "a") (data (i32.const 142557) "a") (data (i32.const 142560) "a") (data (i32.const 142563) "a") (data (i32.const 142566) "a") (data (i32.const 142569) "a") (data (i32.const 142572) "a") (data (i32.const 142575) "a") (data (i32.const 142578) "a") (data (i32.const 142581) "a") (data (i32.const 142584) "a") (data (i32.const 142587) "a") (data (i32.const 142590) "a") (data (i32.const 142593) "a") (data (i32.const 142596) "a") (data (i32.const 142599) "a") (data (i32.const 142602) "a") (data (i32.const 142605) "a") (data (i32.const 142608) "a") (data (i32.const 142611) "a") (data (i32.const 142614) "a") (data (i32.const 142617) "a") (data (i32.const 142620) "a") (data (i32.const 142623) "a") (data (i32.const 142626) "a") (data (i32.const 142629) "a") (data (i32.const 142632) "a") (data (i32.const 142635) "a") (data (i32.const 142638) "a") (data (i32.const 142641) "a") (data (i32.const 142644) "a") (data (i32.const 142647) "a") (data (i32.const 142650) "a") (data (i32.const 142653) "a") (data (i32.const 142656) "a") (data (i32.const 142659) "a") (data (i32.const 142662) "a") (data (i32.const 142665) "a") (data (i32.const 142668) "a") (data (i32.const 142671) "a") (data (i32.const 142674) "a") (data (i32.const 142677) "a") (data (i32.const 142680) "a") (data (i32.const 142683) "a") (data (i32.const 142686) "a") (data (i32.const 142689) "a") (data (i32.const 142692) "a") (data (i32.const 142695) "a") (data (i32.const 142698) "a") (data (i32.const 142701) "a") (data (i32.const 142704) "a") (data (i32.const 142707) "a") (data (i32.const 142710) "a") (data (i32.const 142713) "a") (data (i32.const 142716) "a") (data (i32.const 142719) "a") (data (i32.const 142722) "a") (data (i32.const 142725) "a") (data (i32.const 142728) "a") (data (i32.const 142731) "a") (data (i32.const 142734) "a") (data (i32.const 142737) "a") (data (i32.const 142740) "a") (data (i32.const 142743) "a") (data (i32.const 142746) "a") (data (i32.const 142749) "a") (data (i32.const 142752) "a") (data (i32.const 142755) "a") (data (i32.const 142758) "a") (data (i32.const 142761) "a") (data (i32.const 142764) "a") (data (i32.const 142767) "a") (data (i32.const 142770) "a") (data (i32.const 142773) "a") (data (i32.const 142776) "a") (data (i32.const 142779) "a") (data (i32.const 142782) "a") (data (i32.const 142785) "a") (data (i32.const 142788) "a") (data (i32.const 142791) "a") (data (i32.const 142794) "a") (data (i32.const 142797) "a") (data (i32.const 142800) "a") (data (i32.const 142803) "a") (data (i32.const 142806) "a") (data (i32.const 142809) "a") (data (i32.const 142812) "a") (data (i32.const 142815) "a") (data (i32.const 142818) "a") (data (i32.const 142821) "a") (data (i32.const 142824) "a") (data (i32.const 142827) "a") (data (i32.const 142830) "a") (data (i32.const 142833) "a") (data (i32.const 142836) "a") (data (i32.const 142839) "a") (data (i32.const 142842) "a") (data (i32.const 142845) "a") (data (i32.const 142848) "a") (data (i32.const 142851) "a") (data (i32.const 142854) "a") (data (i32.const 142857) "a") (data (i32.const 142860) "a") (data (i32.const 142863) "a") (data (i32.const 142866) "a") (data (i32.const 142869) "a") (data (i32.const 142872) "a") (data (i32.const 142875) "a") (data (i32.const 142878) "a") (data (i32.const 142881) "a") (data (i32.const 142884) "a") (data (i32.const 142887) "a") (data (i32.const 142890) "a") (data (i32.const 142893) "a") (data (i32.const 142896) "a") (data (i32.const 142899) "a") (data (i32.const 142902) "a") (data (i32.const 142905) "a") (data (i32.const 142908) "a") (data (i32.const 142911) "a") (data (i32.const 142914) "a") (data (i32.const 142917) "a") (data (i32.const 142920) "a") (data (i32.const 142923) "a") (data (i32.const 142926) "a") (data (i32.const 142929) "a") (data (i32.const 142932) "a") (data (i32.const 142935) "a") (data (i32.const 142938) "a") (data (i32.const 142941) "a") (data (i32.const 142944) "a") (data (i32.const 142947) "a") (data (i32.const 142950) "a") (data (i32.const 142953) "a") (data (i32.const 142956) "a") (data (i32.const 142959) "a") (data (i32.const 142962) "a") (data (i32.const 142965) "a") (data (i32.const 142968) "a") (data (i32.const 142971) "a") (data (i32.const 142974) "a") (data (i32.const 142977) "a") (data (i32.const 142980) "a") (data (i32.const 142983) "a") (data (i32.const 142986) "a") (data (i32.const 142989) "a") (data (i32.const 142992) "a") (data (i32.const 142995) "a") (data (i32.const 142998) "a") (data (i32.const 143001) "a") (data (i32.const 143004) "a") (data (i32.const 143007) "a") (data (i32.const 143010) "a") (data (i32.const 143013) "a") (data (i32.const 143016) "a") (data (i32.const 143019) "a") (data (i32.const 143022) "a") (data (i32.const 143025) "a") (data (i32.const 143028) "a") (data (i32.const 143031) "a") (data (i32.const 143034) "a") (data (i32.const 143037) "a") (data (i32.const 143040) "a") (data (i32.const 143043) "a") (data (i32.const 143046) "a") (data (i32.const 143049) "a") (data (i32.const 143052) "a") (data (i32.const 143055) "a") (data (i32.const 143058) "a") (data (i32.const 143061) "a") (data (i32.const 143064) "a") (data (i32.const 143067) "a") (data (i32.const 143070) "a") (data (i32.const 143073) "a") (data (i32.const 143076) "a") (data (i32.const 143079) "a") (data (i32.const 143082) "a") (data (i32.const 143085) "a") (data (i32.const 143088) "a") (data (i32.const 143091) "a") (data (i32.const 143094) "a") (data (i32.const 143097) "a") (data (i32.const 143100) "a") (data (i32.const 143103) "a") (data (i32.const 143106) "a") (data (i32.const 143109) "a") (data (i32.const 143112) "a") (data (i32.const 143115) "a") (data (i32.const 143118) "a") (data (i32.const 143121) "a") (data (i32.const 143124) "a") (data (i32.const 143127) "a") (data (i32.const 143130) "a") (data (i32.const 143133) "a") (data (i32.const 143136) "a") (data (i32.const 143139) "a") (data (i32.const 143142) "a") (data (i32.const 143145) "a") (data (i32.const 143148) "a") (data (i32.const 143151) "a") (data (i32.const 143154) "a") (data (i32.const 143157) "a") (data (i32.const 143160) "a") (data (i32.const 143163) "a") (data (i32.const 143166) "a") (data (i32.const 143169) "a") (data (i32.const 143172) "a") (data (i32.const 143175) "a") (data (i32.const 143178) "a") (data (i32.const 143181) "a") (data (i32.const 143184) "a") (data (i32.const 143187) "a") (data (i32.const 143190) "a") (data (i32.const 143193) "a") (data (i32.const 143196) "a") (data (i32.const 143199) "a") (data (i32.const 143202) "a") (data (i32.const 143205) "a") (data (i32.const 143208) "a") (data (i32.const 143211) "a") (data (i32.const 143214) "a") (data (i32.const 143217) "a") (data (i32.const 143220) "a") (data (i32.const 143223) "a") (data (i32.const 143226) "a") (data (i32.const 143229) "a") (data (i32.const 143232) "a") (data (i32.const 143235) "a") (data (i32.const 143238) "a") (data (i32.const 143241) "a") (data (i32.const 143244) "a") (data (i32.const 143247) "a") (data (i32.const 143250) "a") (data (i32.const 143253) "a") (data (i32.const 143256) "a") (data (i32.const 143259) "a") (data (i32.const 143262) "a") (data (i32.const 143265) "a") (data (i32.const 143268) "a") (data (i32.const 143271) "a") (data (i32.const 143274) "a") (data (i32.const 143277) "a") (data (i32.const 143280) "a") (data (i32.const 143283) "a") (data (i32.const 143286) "a") (data (i32.const 143289) "a") (data (i32.const 143292) "a") (data (i32.const 143295) "a") (data (i32.const 143298) "a") (data (i32.const 143301) "a") (data (i32.const 143304) "a") (data (i32.const 143307) "a") (data (i32.const 143310) "a") (data (i32.const 143313) "a") (data (i32.const 143316) "a") (data (i32.const 143319) "a") (data (i32.const 143322) "a") (data (i32.const 143325) "a") (data (i32.const 143328) "a") (data (i32.const 143331) "a") (data (i32.const 143334) "a") (data (i32.const 143337) "a") (data (i32.const 143340) "a") (data (i32.const 143343) "a") (data (i32.const 143346) "a") (data (i32.const 143349) "a") (data (i32.const 143352) "a") (data (i32.const 143355) "a") (data (i32.const 143358) "a") (data (i32.const 143361) "a") (data (i32.const 143364) "a") (data (i32.const 143367) "a") (data (i32.const 143370) "a") (data (i32.const 143373) "a") (data (i32.const 143376) "a") (data (i32.const 143379) "a") (data (i32.const 143382) "a") (data (i32.const 143385) "a") (data (i32.const 143388) "a") (data (i32.const 143391) "a") (data (i32.const 143394) "a") (data (i32.const 143397) "a") (data (i32.const 143400) "a") (data (i32.const 143403) "a") (data (i32.const 143406) "a") (data (i32.const 143409) "a") (data (i32.const 143412) "a") (data (i32.const 143415) "a") (data (i32.const 143418) "a") (data (i32.const 143421) "a") (data (i32.const 143424) "a") (data (i32.const 143427) "a") (data (i32.const 143430) "a") (data (i32.const 143433) "a") (data (i32.const 143436) "a") (data (i32.const 143439) "a") (data (i32.const 143442) "a") (data (i32.const 143445) "a") (data (i32.const 143448) "a") (data (i32.const 143451) "a") (data (i32.const 143454) "a") (data (i32.const 143457) "a") (data (i32.const 143460) "a") (data (i32.const 143463) "a") (data (i32.const 143466) "a") (data (i32.const 143469) "a") (data (i32.const 143472) "a") (data (i32.const 143475) "a") (data (i32.const 143478) "a") (data (i32.const 143481) "a") (data (i32.const 143484) "a") (data (i32.const 143487) "a") (data (i32.const 143490) "a") (data (i32.const 143493) "a") (data (i32.const 143496) "a") (data (i32.const 143499) "a") (data (i32.const 143502) "a") (data (i32.const 143505) "a") (data (i32.const 143508) "a") (data (i32.const 143511) "a") (data (i32.const 143514) "a") (data (i32.const 143517) "a") (data (i32.const 143520) "a") (data (i32.const 143523) "a") (data (i32.const 143526) "a") (data (i32.const 143529) "a") (data (i32.const 143532) "a") (data (i32.const 143535) "a") (data (i32.const 143538) "a") (data (i32.const 143541) "a") (data (i32.const 143544) "a") (data (i32.const 143547) "a") (data (i32.const 143550) "a") (data (i32.const 143553) "a") (data (i32.const 143556) "a") (data (i32.const 143559) "a") (data (i32.const 143562) "a") (data (i32.const 143565) "a") (data (i32.const 143568) "a") (data (i32.const 143571) "a") (data (i32.const 143574) "a") (data (i32.const 143577) "a") (data (i32.const 143580) "a") (data (i32.const 143583) "a") (data (i32.const 143586) "a") (data (i32.const 143589) "a") (data (i32.const 143592) "a") (data (i32.const 143595) "a") (data (i32.const 143598) "a") (data (i32.const 143601) "a") (data (i32.const 143604) "a") (data (i32.const 143607) "a") (data (i32.const 143610) "a") (data (i32.const 143613) "a") (data (i32.const 143616) "a") (data (i32.const 143619) "a") (data (i32.const 143622) "a") (data (i32.const 143625) "a") (data (i32.const 143628) "a") (data (i32.const 143631) "a") (data (i32.const 143634) "a") (data (i32.const 143637) "a") (data (i32.const 143640) "a") (data (i32.const 143643) "a") (data (i32.const 143646) "a") (data (i32.const 143649) "a") (data (i32.const 143652) "a") (data (i32.const 143655) "a") (data (i32.const 143658) "a") (data (i32.const 143661) "a") (data (i32.const 143664) "a") (data (i32.const 143667) "a") (data (i32.const 143670) "a") (data (i32.const 143673) "a") (data (i32.const 143676) "a") (data (i32.const 143679) "a") (data (i32.const 143682) "a") (data (i32.const 143685) "a") (data (i32.const 143688) "a") (data (i32.const 143691) "a") (data (i32.const 143694) "a") (data (i32.const 143697) "a") (data (i32.const 143700) "a") (data (i32.const 143703) "a") (data (i32.const 143706) "a") (data (i32.const 143709) "a") (data (i32.const 143712) "a") (data (i32.const 143715) "a") (data (i32.const 143718) "a") (data (i32.const 143721) "a") (data (i32.const 143724) "a") (data (i32.const 143727) "a") (data (i32.const 143730) "a") (data (i32.const 143733) "a") (data (i32.const 143736) "a") (data (i32.const 143739) "a") (data (i32.const 143742) "a") (data (i32.const 143745) "a") (data (i32.const 143748) "a") (data (i32.const 143751) "a") (data (i32.const 143754) "a") (data (i32.const 143757) "a") (data (i32.const 143760) "a") (data (i32.const 143763) "a") (data (i32.const 143766) "a") (data (i32.const 143769) "a") (data (i32.const 143772) "a") (data (i32.const 143775) "a") (data (i32.const 143778) "a") (data (i32.const 143781) "a") (data (i32.const 143784) "a") (data (i32.const 143787) "a") (data (i32.const 143790) "a") (data (i32.const 143793) "a") (data (i32.const 143796) "a") (data (i32.const 143799) "a") (data (i32.const 143802) "a") (data (i32.const 143805) "a") (data (i32.const 143808) "a") (data (i32.const 143811) "a") (data (i32.const 143814) "a") (data (i32.const 143817) "a") (data (i32.const 143820) "a") (data (i32.const 143823) "a") (data (i32.const 143826) "a") (data (i32.const 143829) "a") (data (i32.const 143832) "a") (data (i32.const 143835) "a") (data (i32.const 143838) "a") (data (i32.const 143841) "a") (data (i32.const 143844) "a") (data (i32.const 143847) "a") (data (i32.const 143850) "a") (data (i32.const 143853) "a") (data (i32.const 143856) "a") (data (i32.const 143859) "a") (data (i32.const 143862) "a") (data (i32.const 143865) "a") (data (i32.const 143868) "a") (data (i32.const 143871) "a") (data (i32.const 143874) "a") (data (i32.const 143877) "a") (data (i32.const 143880) "a") (data (i32.const 143883) "a") (data (i32.const 143886) "a") (data (i32.const 143889) "a") (data (i32.const 143892) "a") (data (i32.const 143895) "a") (data (i32.const 143898) "a") (data (i32.const 143901) "a") (data (i32.const 143904) "a") (data (i32.const 143907) "a") (data (i32.const 143910) "a") (data (i32.const 143913) "a") (data (i32.const 143916) "a") (data (i32.const 143919) "a") (data (i32.const 143922) "a") (data (i32.const 143925) "a") (data (i32.const 143928) "a") (data (i32.const 143931) "a") (data (i32.const 143934) "a") (data (i32.const 143937) "a") (data (i32.const 143940) "a") (data (i32.const 143943) "a") (data (i32.const 143946) "a") (data (i32.const 143949) "a") (data (i32.const 143952) "a") (data (i32.const 143955) "a") (data (i32.const 143958) "a") (data (i32.const 143961) "a") (data (i32.const 143964) "a") (data (i32.const 143967) "a") (data (i32.const 143970) "a") (data (i32.const 143973) "a") (data (i32.const 143976) "a") (data (i32.const 143979) "a") (data (i32.const 143982) "a") (data (i32.const 143985) "a") (data (i32.const 143988) "a") (data (i32.const 143991) "a") (data (i32.const 143994) "a") (data (i32.const 143997) "a") (data (i32.const 144000) "a") (data (i32.const 144003) "a") (data (i32.const 144006) "a") (data (i32.const 144009) "a") (data (i32.const 144012) "a") (data (i32.const 144015) "a") (data (i32.const 144018) "a") (data (i32.const 144021) "a") (data (i32.const 144024) "a") (data (i32.const 144027) "a") (data (i32.const 144030) "a") (data (i32.const 144033) "a") (data (i32.const 144036) "a") (data (i32.const 144039) "a") (data (i32.const 144042) "a") (data (i32.const 144045) "a") (data (i32.const 144048) "a") (data (i32.const 144051) "a") (data (i32.const 144054) "a") (data (i32.const 144057) "a") (data (i32.const 144060) "a") (data (i32.const 144063) "a") (data (i32.const 144066) "a") (data (i32.const 144069) "a") (data (i32.const 144072) "a") (data (i32.const 144075) "a") (data (i32.const 144078) "a") (data (i32.const 144081) "a") (data (i32.const 144084) "a") (data (i32.const 144087) "a") (data (i32.const 144090) "a") (data (i32.const 144093) "a") (data (i32.const 144096) "a") (data (i32.const 144099) "a") (data (i32.const 144102) "a") (data (i32.const 144105) "a") (data (i32.const 144108) "a") (data (i32.const 144111) "a") (data (i32.const 144114) "a") (data (i32.const 144117) "a") (data (i32.const 144120) "a") (data (i32.const 144123) "a") (data (i32.const 144126) "a") (data (i32.const 144129) "a") (data (i32.const 144132) "a") (data (i32.const 144135) "a") (data (i32.const 144138) "a") (data (i32.const 144141) "a") (data (i32.const 144144) "a") (data (i32.const 144147) "a") (data (i32.const 144150) "a") (data (i32.const 144153) "a") (data (i32.const 144156) "a") (data (i32.const 144159) "a") (data (i32.const 144162) "a") (data (i32.const 144165) "a") (data (i32.const 144168) "a") (data (i32.const 144171) "a") (data (i32.const 144174) "a") (data (i32.const 144177) "a") (data (i32.const 144180) "a") (data (i32.const 144183) "a") (data (i32.const 144186) "a") (data (i32.const 144189) "a") (data (i32.const 144192) "a") (data (i32.const 144195) "a") (data (i32.const 144198) "a") (data (i32.const 144201) "a") (data (i32.const 144204) "a") (data (i32.const 144207) "a") (data (i32.const 144210) "a") (data (i32.const 144213) "a") (data (i32.const 144216) "a") (data (i32.const 144219) "a") (data (i32.const 144222) "a") (data (i32.const 144225) "a") (data (i32.const 144228) "a") (data (i32.const 144231) "a") (data (i32.const 144234) "a") (data (i32.const 144237) "a") (data (i32.const 144240) "a") (data (i32.const 144243) "a") (data (i32.const 144246) "a") (data (i32.const 144249) "a") (data (i32.const 144252) "a") (data (i32.const 144255) "a") (data (i32.const 144258) "a") (data (i32.const 144261) "a") (data (i32.const 144264) "a") (data (i32.const 144267) "a") (data (i32.const 144270) "a") (data (i32.const 144273) "a") (data (i32.const 144276) "a") (data (i32.const 144279) "a") (data (i32.const 144282) "a") (data (i32.const 144285) "a") (data (i32.const 144288) "a") (data (i32.const 144291) "a") (data (i32.const 144294) "a") (data (i32.const 144297) "a") (data (i32.const 144300) "a") (data (i32.const 144303) "a") (data (i32.const 144306) "a") (data (i32.const 144309) "a") (data (i32.const 144312) "a") (data (i32.const 144315) "a") (data (i32.const 144318) "a") (data (i32.const 144321) "a") (data (i32.const 144324) "a") (data (i32.const 144327) "a") (data (i32.const 144330) "a") (data (i32.const 144333) "a") (data (i32.const 144336) "a") (data (i32.const 144339) "a") (data (i32.const 144342) "a") (data (i32.const 144345) "a") (data (i32.const 144348) "a") (data (i32.const 144351) "a") (data (i32.const 144354) "a") (data (i32.const 144357) "a") (data (i32.const 144360) "a") (data (i32.const 144363) "a") (data (i32.const 144366) "a") (data (i32.const 144369) "a") (data (i32.const 144372) "a") (data (i32.const 144375) "a") (data (i32.const 144378) "a") (data (i32.const 144381) "a") (data (i32.const 144384) "a") (data (i32.const 144387) "a") (data (i32.const 144390) "a") (data (i32.const 144393) "a") (data (i32.const 144396) "a") (data (i32.const 144399) "a") (data (i32.const 144402) "a") (data (i32.const 144405) "a") (data (i32.const 144408) "a") (data (i32.const 144411) "a") (data (i32.const 144414) "a") (data (i32.const 144417) "a") (data (i32.const 144420) "a") (data (i32.const 144423) "a") (data (i32.const 144426) "a") (data (i32.const 144429) "a") (data (i32.const 144432) "a") (data (i32.const 144435) "a") (data (i32.const 144438) "a") (data (i32.const 144441) "a") (data (i32.const 144444) "a") (data (i32.const 144447) "a") (data (i32.const 144450) "a") (data (i32.const 144453) "a") (data (i32.const 144456) "a") (data (i32.const 144459) "a") (data (i32.const 144462) "a") (data (i32.const 144465) "a") (data (i32.const 144468) "a") (data (i32.const 144471) "a") (data (i32.const 144474) "a") (data (i32.const 144477) "a") (data (i32.const 144480) "a") (data (i32.const 144483) "a") (data (i32.const 144486) "a") (data (i32.const 144489) "a") (data (i32.const 144492) "a") (data (i32.const 144495) "a") (data (i32.const 144498) "a") (data (i32.const 144501) "a") (data (i32.const 144504) "a") (data (i32.const 144507) "a") (data (i32.const 144510) "a") (data (i32.const 144513) "a") (data (i32.const 144516) "a") (data (i32.const 144519) "a") (data (i32.const 144522) "a") (data (i32.const 144525) "a") (data (i32.const 144528) "a") (data (i32.const 144531) "a") (data (i32.const 144534) "a") (data (i32.const 144537) "a") (data (i32.const 144540) "a") (data (i32.const 144543) "a") (data (i32.const 144546) "a") (data (i32.const 144549) "a") (data (i32.const 144552) "a") (data (i32.const 144555) "a") (data (i32.const 144558) "a") (data (i32.const 144561) "a") (data (i32.const 144564) "a") (data (i32.const 144567) "a") (data (i32.const 144570) "a") (data (i32.const 144573) "a") (data (i32.const 144576) "a") (data (i32.const 144579) "a") (data (i32.const 144582) "a") (data (i32.const 144585) "a") (data (i32.const 144588) "a") (data (i32.const 144591) "a") (data (i32.const 144594) "a") (data (i32.const 144597) "a") (data (i32.const 144600) "a") (data (i32.const 144603) "a") (data (i32.const 144606) "a") (data (i32.const 144609) "a") (data (i32.const 144612) "a") (data (i32.const 144615) "a") (data (i32.const 144618) "a") (data (i32.const 144621) "a") (data (i32.const 144624) "a") (data (i32.const 144627) "a") (data (i32.const 144630) "a") (data (i32.const 144633) "a") (data (i32.const 144636) "a") (data (i32.const 144639) "a") (data (i32.const 144642) "a") (data (i32.const 144645) "a") (data (i32.const 144648) "a") (data (i32.const 144651) "a") (data (i32.const 144654) "a") (data (i32.const 144657) "a") (data (i32.const 144660) "a") (data (i32.const 144663) "a") (data (i32.const 144666) "a") (data (i32.const 144669) "a") (data (i32.const 144672) "a") (data (i32.const 144675) "a") (data (i32.const 144678) "a") (data (i32.const 144681) "a") (data (i32.const 144684) "a") (data (i32.const 144687) "a") (data (i32.const 144690) "a") (data (i32.const 144693) "a") (data (i32.const 144696) "a") (data (i32.const 144699) "a") (data (i32.const 144702) "a") (data (i32.const 144705) "a") (data (i32.const 144708) "a") (data (i32.const 144711) "a") (data (i32.const 144714) "a") (data (i32.const 144717) "a") (data (i32.const 144720) "a") (data (i32.const 144723) "a") (data (i32.const 144726) "a") (data (i32.const 144729) "a") (data (i32.const 144732) "a") (data (i32.const 144735) "a") (data (i32.const 144738) "a") (data (i32.const 144741) "a") (data (i32.const 144744) "a") (data (i32.const 144747) "a") (data (i32.const 144750) "a") (data (i32.const 144753) "a") (data (i32.const 144756) "a") (data (i32.const 144759) "a") (data (i32.const 144762) "a") (data (i32.const 144765) "a") (data (i32.const 144768) "a") (data (i32.const 144771) "a") (data (i32.const 144774) "a") (data (i32.const 144777) "a") (data (i32.const 144780) "a") (data (i32.const 144783) "a") (data (i32.const 144786) "a") (data (i32.const 144789) "a") (data (i32.const 144792) "a") (data (i32.const 144795) "a") (data (i32.const 144798) "a") (data (i32.const 144801) "a") (data (i32.const 144804) "a") (data (i32.const 144807) "a") (data (i32.const 144810) "a") (data (i32.const 144813) "a") (data (i32.const 144816) "a") (data (i32.const 144819) "a") (data (i32.const 144822) "a") (data (i32.const 144825) "a") (data (i32.const 144828) "a") (data (i32.const 144831) "a") (data (i32.const 144834) "a") (data (i32.const 144837) "a") (data (i32.const 144840) "a") (data (i32.const 144843) "a") (data (i32.const 144846) "a") (data (i32.const 144849) "a") (data (i32.const 144852) "a") (data (i32.const 144855) "a") (data (i32.const 144858) "a") (data (i32.const 144861) "a") (data (i32.const 144864) "a") (data (i32.const 144867) "a") (data (i32.const 144870) "a") (data (i32.const 144873) "a") (data (i32.const 144876) "a") (data (i32.const 144879) "a") (data (i32.const 144882) "a") (data (i32.const 144885) "a") (data (i32.const 144888) "a") (data (i32.const 144891) "a") (data (i32.const 144894) "a") (data (i32.const 144897) "a") (data (i32.const 144900) "a") (data (i32.const 144903) "a") (data (i32.const 144906) "a") (data (i32.const 144909) "a") (data (i32.const 144912) "a") (data (i32.const 144915) "a") (data (i32.const 144918) "a") (data (i32.const 144921) "a") (data (i32.const 144924) "a") (data (i32.const 144927) "a") (data (i32.const 144930) "a") (data (i32.const 144933) "a") (data (i32.const 144936) "a") (data (i32.const 144939) "a") (data (i32.const 144942) "a") (data (i32.const 144945) "a") (data (i32.const 144948) "a") (data (i32.const 144951) "a") (data (i32.const 144954) "a") (data (i32.const 144957) "a") (data (i32.const 144960) "a") (data (i32.const 144963) "a") (data (i32.const 144966) "a") (data (i32.const 144969) "a") (data (i32.const 144972) "a") (data (i32.const 144975) "a") (data (i32.const 144978) "a") (data (i32.const 144981) "a") (data (i32.const 144984) "a") (data (i32.const 144987) "a") (data (i32.const 144990) "a") (data (i32.const 144993) "a") (data (i32.const 144996) "a") (data (i32.const 144999) "a") (data (i32.const 145002) "a") (data (i32.const 145005) "a") (data (i32.const 145008) "a") (data (i32.const 145011) "a") (data (i32.const 145014) "a") (data (i32.const 145017) "a") (data (i32.const 145020) "a") (data (i32.const 145023) "a") (data (i32.const 145026) "a") (data (i32.const 145029) "a") (data (i32.const 145032) "a") (data (i32.const 145035) "a") (data (i32.const 145038) "a") (data (i32.const 145041) "a") (data (i32.const 145044) "a") (data (i32.const 145047) "a") (data (i32.const 145050) "a") (data (i32.const 145053) "a") (data (i32.const 145056) "a") (data (i32.const 145059) "a") (data (i32.const 145062) "a") (data (i32.const 145065) "a") (data (i32.const 145068) "a") (data (i32.const 145071) "a") (data (i32.const 145074) "a") (data (i32.const 145077) "a") (data (i32.const 145080) "a") (data (i32.const 145083) "a") (data (i32.const 145086) "a") (data (i32.const 145089) "a") (data (i32.const 145092) "a") (data (i32.const 145095) "a") (data (i32.const 145098) "a") (data (i32.const 145101) "a") (data (i32.const 145104) "a") (data (i32.const 145107) "a") (data (i32.const 145110) "a") (data (i32.const 145113) "a") (data (i32.const 145116) "a") (data (i32.const 145119) "a") (data (i32.const 145122) "a") (data (i32.const 145125) "a") (data (i32.const 145128) "a") (data (i32.const 145131) "a") (data (i32.const 145134) "a") (data (i32.const 145137) "a") (data (i32.const 145140) "a") (data (i32.const 145143) "a") (data (i32.const 145146) "a") (data (i32.const 145149) "a") (data (i32.const 145152) "a") (data (i32.const 145155) "a") (data (i32.const 145158) "a") (data (i32.const 145161) "a") (data (i32.const 145164) "a") (data (i32.const 145167) "a") (data (i32.const 145170) "a") (data (i32.const 145173) "a") (data (i32.const 145176) "a") (data (i32.const 145179) "a") (data (i32.const 145182) "a") (data (i32.const 145185) "a") (data (i32.const 145188) "a") (data (i32.const 145191) "a") (data (i32.const 145194) "a") (data (i32.const 145197) "a") (data (i32.const 145200) "a") (data (i32.const 145203) "a") (data (i32.const 145206) "a") (data (i32.const 145209) "a") (data (i32.const 145212) "a") (data (i32.const 145215) "a") (data (i32.const 145218) "a") (data (i32.const 145221) "a") (data (i32.const 145224) "a") (data (i32.const 145227) "a") (data (i32.const 145230) "a") (data (i32.const 145233) "a") (data (i32.const 145236) "a") (data (i32.const 145239) "a") (data (i32.const 145242) "a") (data (i32.const 145245) "a") (data (i32.const 145248) "a") (data (i32.const 145251) "a") (data (i32.const 145254) "a") (data (i32.const 145257) "a") (data (i32.const 145260) "a") (data (i32.const 145263) "a") (data (i32.const 145266) "a") (data (i32.const 145269) "a") (data (i32.const 145272) "a") (data (i32.const 145275) "a") (data (i32.const 145278) "a") (data (i32.const 145281) "a") (data (i32.const 145284) "a") (data (i32.const 145287) "a") (data (i32.const 145290) "a") (data (i32.const 145293) "a") (data (i32.const 145296) "a") (data (i32.const 145299) "a") (data (i32.const 145302) "a") (data (i32.const 145305) "a") (data (i32.const 145308) "a") (data (i32.const 145311) "a") (data (i32.const 145314) "a") (data (i32.const 145317) "a") (data (i32.const 145320) "a") (data (i32.const 145323) "a") (data (i32.const 145326) "a") (data (i32.const 145329) "a") (data (i32.const 145332) "a") (data (i32.const 145335) "a") (data (i32.const 145338) "a") (data (i32.const 145341) "a") (data (i32.const 145344) "a") (data (i32.const 145347) "a") (data (i32.const 145350) "a") (data (i32.const 145353) "a") (data (i32.const 145356) "a") (data (i32.const 145359) "a") (data (i32.const 145362) "a") (data (i32.const 145365) "a") (data (i32.const 145368) "a") (data (i32.const 145371) "a") (data (i32.const 145374) "a") (data (i32.const 145377) "a") (data (i32.const 145380) "a") (data (i32.const 145383) "a") (data (i32.const 145386) "a") (data (i32.const 145389) "a") (data (i32.const 145392) "a") (data (i32.const 145395) "a") (data (i32.const 145398) "a") (data (i32.const 145401) "a") (data (i32.const 145404) "a") (data (i32.const 145407) "a") (data (i32.const 145410) "a") (data (i32.const 145413) "a") (data (i32.const 145416) "a") (data (i32.const 145419) "a") (data (i32.const 145422) "a") (data (i32.const 145425) "a") (data (i32.const 145428) "a") (data (i32.const 145431) "a") (data (i32.const 145434) "a") (data (i32.const 145437) "a") (data (i32.const 145440) "a") (data (i32.const 145443) "a") (data (i32.const 145446) "a") (data (i32.const 145449) "a") (data (i32.const 145452) "a") (data (i32.const 145455) "a") (data (i32.const 145458) "a") (data (i32.const 145461) "a") (data (i32.const 145464) "a") (data (i32.const 145467) "a") (data (i32.const 145470) "a") (data (i32.const 145473) "a") (data (i32.const 145476) "a") (data (i32.const 145479) "a") (data (i32.const 145482) "a") (data (i32.const 145485) "a") (data (i32.const 145488) "a") (data (i32.const 145491) "a") (data (i32.const 145494) "a") (data (i32.const 145497) "a") (data (i32.const 145500) "a") (data (i32.const 145503) "a") (data (i32.const 145506) "a") (data (i32.const 145509) "a") (data (i32.const 145512) "a") (data (i32.const 145515) "a") (data (i32.const 145518) "a") (data (i32.const 145521) "a") (data (i32.const 145524) "a") (data (i32.const 145527) "a") (data (i32.const 145530) "a") (data (i32.const 145533) "a") (data (i32.const 145536) "a") (data (i32.const 145539) "a") (data (i32.const 145542) "a") (data (i32.const 145545) "a") (data (i32.const 145548) "a") (data (i32.const 145551) "a") (data (i32.const 145554) "a") (data (i32.const 145557) "a") (data (i32.const 145560) "a") (data (i32.const 145563) "a") (data (i32.const 145566) "a") (data (i32.const 145569) "a") (data (i32.const 145572) "a") (data (i32.const 145575) "a") (data (i32.const 145578) "a") (data (i32.const 145581) "a") (data (i32.const 145584) "a") (data (i32.const 145587) "a") (data (i32.const 145590) "a") (data (i32.const 145593) "a") (data (i32.const 145596) "a") (data (i32.const 145599) "a") (data (i32.const 145602) "a") (data (i32.const 145605) "a") (data (i32.const 145608) "a") (data (i32.const 145611) "a") (data (i32.const 145614) "a") (data (i32.const 145617) "a") (data (i32.const 145620) "a") (data (i32.const 145623) "a") (data (i32.const 145626) "a") (data (i32.const 145629) "a") (data (i32.const 145632) "a") (data (i32.const 145635) "a") (data (i32.const 145638) "a") (data (i32.const 145641) "a") (data (i32.const 145644) "a") (data (i32.const 145647) "a") (data (i32.const 145650) "a") (data (i32.const 145653) "a") (data (i32.const 145656) "a") (data (i32.const 145659) "a") (data (i32.const 145662) "a") (data (i32.const 145665) "a") (data (i32.const 145668) "a") (data (i32.const 145671) "a") (data (i32.const 145674) "a") (data (i32.const 145677) "a") (data (i32.const 145680) "a") (data (i32.const 145683) "a") (data (i32.const 145686) "a") (data (i32.const 145689) "a") (data (i32.const 145692) "a") (data (i32.const 145695) "a") (data (i32.const 145698) "a") (data (i32.const 145701) "a") (data (i32.const 145704) "a") (data (i32.const 145707) "a") (data (i32.const 145710) "a") (data (i32.const 145713) "a") (data (i32.const 145716) "a") (data (i32.const 145719) "a") (data (i32.const 145722) "a") (data (i32.const 145725) "a") (data (i32.const 145728) "a") (data (i32.const 145731) "a") (data (i32.const 145734) "a") (data (i32.const 145737) "a") (data (i32.const 145740) "a") (data (i32.const 145743) "a") (data (i32.const 145746) "a") (data (i32.const 145749) "a") (data (i32.const 145752) "a") (data (i32.const 145755) "a") (data (i32.const 145758) "a") (data (i32.const 145761) "a") (data (i32.const 145764) "a") (data (i32.const 145767) "a") (data (i32.const 145770) "a") (data (i32.const 145773) "a") (data (i32.const 145776) "a") (data (i32.const 145779) "a") (data (i32.const 145782) "a") (data (i32.const 145785) "a") (data (i32.const 145788) "a") (data (i32.const 145791) "a") (data (i32.const 145794) "a") (data (i32.const 145797) "a") (data (i32.const 145800) "a") (data (i32.const 145803) "a") (data (i32.const 145806) "a") (data (i32.const 145809) "a") (data (i32.const 145812) "a") (data (i32.const 145815) "a") (data (i32.const 145818) "a") (data (i32.const 145821) "a") (data (i32.const 145824) "a") (data (i32.const 145827) "a") (data (i32.const 145830) "a") (data (i32.const 145833) "a") (data (i32.const 145836) "a") (data (i32.const 145839) "a") (data (i32.const 145842) "a") (data (i32.const 145845) "a") (data (i32.const 145848) "a") (data (i32.const 145851) "a") (data (i32.const 145854) "a") (data (i32.const 145857) "a") (data (i32.const 145860) "a") (data (i32.const 145863) "a") (data (i32.const 145866) "a") (data (i32.const 145869) "a") (data (i32.const 145872) "a") (data (i32.const 145875) "a") (data (i32.const 145878) "a") (data (i32.const 145881) "a") (data (i32.const 145884) "a") (data (i32.const 145887) "a") (data (i32.const 145890) "a") (data (i32.const 145893) "a") (data (i32.const 145896) "a") (data (i32.const 145899) "a") (data (i32.const 145902) "a") (data (i32.const 145905) "a") (data (i32.const 145908) "a") (data (i32.const 145911) "a") (data (i32.const 145914) "a") (data (i32.const 145917) "a") (data (i32.const 145920) "a") (data (i32.const 145923) "a") (data (i32.const 145926) "a") (data (i32.const 145929) "a") (data (i32.const 145932) "a") (data (i32.const 145935) "a") (data (i32.const 145938) "a") (data (i32.const 145941) "a") (data (i32.const 145944) "a") (data (i32.const 145947) "a") (data (i32.const 145950) "a") (data (i32.const 145953) "a") (data (i32.const 145956) "a") (data (i32.const 145959) "a") (data (i32.const 145962) "a") (data (i32.const 145965) "a") (data (i32.const 145968) "a") (data (i32.const 145971) "a") (data (i32.const 145974) "a") (data (i32.const 145977) "a") (data (i32.const 145980) "a") (data (i32.const 145983) "a") (data (i32.const 145986) "a") (data (i32.const 145989) "a") (data (i32.const 145992) "a") (data (i32.const 145995) "a") (data (i32.const 145998) "a") (data (i32.const 146001) "a") (data (i32.const 146004) "a") (data (i32.const 146007) "a") (data (i32.const 146010) "a") (data (i32.const 146013) "a") (data (i32.const 146016) "a") (data (i32.const 146019) "a") (data (i32.const 146022) "a") (data (i32.const 146025) "a") (data (i32.const 146028) "a") (data (i32.const 146031) "a") (data (i32.const 146034) "a") (data (i32.const 146037) "a") (data (i32.const 146040) "a") (data (i32.const 146043) "a") (data (i32.const 146046) "a") (data (i32.const 146049) "a") (data (i32.const 146052) "a") (data (i32.const 146055) "a") (data (i32.const 146058) "a") (data (i32.const 146061) "a") (data (i32.const 146064) "a") (data (i32.const 146067) "a") (data (i32.const 146070) "a") (data (i32.const 146073) "a") (data (i32.const 146076) "a") (data (i32.const 146079) "a") (data (i32.const 146082) "a") (data (i32.const 146085) "a") (data (i32.const 146088) "a") (data (i32.const 146091) "a") (data (i32.const 146094) "a") (data (i32.const 146097) "a") (data (i32.const 146100) "a") (data (i32.const 146103) "a") (data (i32.const 146106) "a") (data (i32.const 146109) "a") (data (i32.const 146112) "a") (data (i32.const 146115) "a") (data (i32.const 146118) "a") (data (i32.const 146121) "a") (data (i32.const 146124) "a") (data (i32.const 146127) "a") (data (i32.const 146130) "a") (data (i32.const 146133) "a") (data (i32.const 146136) "a") (data (i32.const 146139) "a") (data (i32.const 146142) "a") (data (i32.const 146145) "a") (data (i32.const 146148) "a") (data (i32.const 146151) "a") (data (i32.const 146154) "a") (data (i32.const 146157) "a") (data (i32.const 146160) "a") (data (i32.const 146163) "a") (data (i32.const 146166) "a") (data (i32.const 146169) "a") (data (i32.const 146172) "a") (data (i32.const 146175) "a") (data (i32.const 146178) "a") (data (i32.const 146181) "a") (data (i32.const 146184) "a") (data (i32.const 146187) "a") (data (i32.const 146190) "a") (data (i32.const 146193) "a") (data (i32.const 146196) "a") (data (i32.const 146199) "a") (data (i32.const 146202) "a") (data (i32.const 146205) "a") (data (i32.const 146208) "a") (data (i32.const 146211) "a") (data (i32.const 146214) "a") (data (i32.const 146217) "a") (data (i32.const 146220) "a") (data (i32.const 146223) "a") (data (i32.const 146226) "a") (data (i32.const 146229) "a") (data (i32.const 146232) "a") (data (i32.const 146235) "a") (data (i32.const 146238) "a") (data (i32.const 146241) "a") (data (i32.const 146244) "a") (data (i32.const 146247) "a") (data (i32.const 146250) "a") (data (i32.const 146253) "a") (data (i32.const 146256) "a") (data (i32.const 146259) "a") (data (i32.const 146262) "a") (data (i32.const 146265) "a") (data (i32.const 146268) "a") (data (i32.const 146271) "a") (data (i32.const 146274) "a") (data (i32.const 146277) "a") (data (i32.const 146280) "a") (data (i32.const 146283) "a") (data (i32.const 146286) "a") (data (i32.const 146289) "a") (data (i32.const 146292) "a") (data (i32.const 146295) "a") (data (i32.const 146298) "a") (data (i32.const 146301) "a") (data (i32.const 146304) "a") (data (i32.const 146307) "a") (data (i32.const 146310) "a") (data (i32.const 146313) "a") (data (i32.const 146316) "a") (data (i32.const 146319) "a") (data (i32.const 146322) "a") (data (i32.const 146325) "a") (data (i32.const 146328) "a") (data (i32.const 146331) "a") (data (i32.const 146334) "a") (data (i32.const 146337) "a") (data (i32.const 146340) "a") (data (i32.const 146343) "a") (data (i32.const 146346) "a") (data (i32.const 146349) "a") (data (i32.const 146352) "a") (data (i32.const 146355) "a") (data (i32.const 146358) "a") (data (i32.const 146361) "a") (data (i32.const 146364) "a") (data (i32.const 146367) "a") (data (i32.const 146370) "a") (data (i32.const 146373) "a") (data (i32.const 146376) "a") (data (i32.const 146379) "a") (data (i32.const 146382) "a") (data (i32.const 146385) "a") (data (i32.const 146388) "a") (data (i32.const 146391) "a") (data (i32.const 146394) "a") (data (i32.const 146397) "a") (data (i32.const 146400) "a") (data (i32.const 146403) "a") (data (i32.const 146406) "a") (data (i32.const 146409) "a") (data (i32.const 146412) "a") (data (i32.const 146415) "a") (data (i32.const 146418) "a") (data (i32.const 146421) "a") (data (i32.const 146424) "a") (data (i32.const 146427) "a") (data (i32.const 146430) "a") (data (i32.const 146433) "a") (data (i32.const 146436) "a") (data (i32.const 146439) "a") (data (i32.const 146442) "a") (data (i32.const 146445) "a") (data (i32.const 146448) "a") (data (i32.const 146451) "a") (data (i32.const 146454) "a") (data (i32.const 146457) "a") (data (i32.const 146460) "a") (data (i32.const 146463) "a") (data (i32.const 146466) "a") (data (i32.const 146469) "a") (data (i32.const 146472) "a") (data (i32.const 146475) "a") (data (i32.const 146478) "a") (data (i32.const 146481) "a") (data (i32.const 146484) "a") (data (i32.const 146487) "a") (data (i32.const 146490) "a") (data (i32.const 146493) "a") (data (i32.const 146496) "a") (data (i32.const 146499) "a") (data (i32.const 146502) "a") (data (i32.const 146505) "a") (data (i32.const 146508) "a") (data (i32.const 146511) "a") (data (i32.const 146514) "a") (data (i32.const 146517) "a") (data (i32.const 146520) "a") (data (i32.const 146523) "a") (data (i32.const 146526) "a") (data (i32.const 146529) "a") (data (i32.const 146532) "a") (data (i32.const 146535) "a") (data (i32.const 146538) "a") (data (i32.const 146541) "a") (data (i32.const 146544) "a") (data (i32.const 146547) "a") (data (i32.const 146550) "a") (data (i32.const 146553) "a") (data (i32.const 146556) "a") (data (i32.const 146559) "a") (data (i32.const 146562) "a") (data (i32.const 146565) "a") (data (i32.const 146568) "a") (data (i32.const 146571) "a") (data (i32.const 146574) "a") (data (i32.const 146577) "a") (data (i32.const 146580) "a") (data (i32.const 146583) "a") (data (i32.const 146586) "a") (data (i32.const 146589) "a") (data (i32.const 146592) "a") (data (i32.const 146595) "a") (data (i32.const 146598) "a") (data (i32.const 146601) "a") (data (i32.const 146604) "a") (data (i32.const 146607) "a") (data (i32.const 146610) "a") (data (i32.const 146613) "a") (data (i32.const 146616) "a") (data (i32.const 146619) "a") (data (i32.const 146622) "a") (data (i32.const 146625) "a") (data (i32.const 146628) "a") (data (i32.const 146631) "a") (data (i32.const 146634) "a") (data (i32.const 146637) "a") (data (i32.const 146640) "a") (data (i32.const 146643) "a") (data (i32.const 146646) "a") (data (i32.const 146649) "a") (data (i32.const 146652) "a") (data (i32.const 146655) "a") (data (i32.const 146658) "a") (data (i32.const 146661) "a") (data (i32.const 146664) "a") (data (i32.const 146667) "a") (data (i32.const 146670) "a") (data (i32.const 146673) "a") (data (i32.const 146676) "a") (data (i32.const 146679) "a") (data (i32.const 146682) "a") (data (i32.const 146685) "a") (data (i32.const 146688) "a") (data (i32.const 146691) "a") (data (i32.const 146694) "a") (data (i32.const 146697) "a") (data (i32.const 146700) "a") (data (i32.const 146703) "a") (data (i32.const 146706) "a") (data (i32.const 146709) "a") (data (i32.const 146712) "a") (data (i32.const 146715) "a") (data (i32.const 146718) "a") (data (i32.const 146721) "a") (data (i32.const 146724) "a") (data (i32.const 146727) "a") (data (i32.const 146730) "a") (data (i32.const 146733) "a") (data (i32.const 146736) "a") (data (i32.const 146739) "a") (data (i32.const 146742) "a") (data (i32.const 146745) "a") (data (i32.const 146748) "a") (data (i32.const 146751) "a") (data (i32.const 146754) "a") (data (i32.const 146757) "a") (data (i32.const 146760) "a") (data (i32.const 146763) "a") (data (i32.const 146766) "a") (data (i32.const 146769) "a") (data (i32.const 146772) "a") (data (i32.const 146775) "a") (data (i32.const 146778) "a") (data (i32.const 146781) "a") (data (i32.const 146784) "a") (data (i32.const 146787) "a") (data (i32.const 146790) "a") (data (i32.const 146793) "a") (data (i32.const 146796) "a") (data (i32.const 146799) "a") (data (i32.const 146802) "a") (data (i32.const 146805) "a") (data (i32.const 146808) "a") (data (i32.const 146811) "a") (data (i32.const 146814) "a") (data (i32.const 146817) "a") (data (i32.const 146820) "a") (data (i32.const 146823) "a") (data (i32.const 146826) "a") (data (i32.const 146829) "a") (data (i32.const 146832) "a") (data (i32.const 146835) "a") (data (i32.const 146838) "a") (data (i32.const 146841) "a") (data (i32.const 146844) "a") (data (i32.const 146847) "a") (data (i32.const 146850) "a") (data (i32.const 146853) "a") (data (i32.const 146856) "a") (data (i32.const 146859) "a") (data (i32.const 146862) "a") (data (i32.const 146865) "a") (data (i32.const 146868) "a") (data (i32.const 146871) "a") (data (i32.const 146874) "a") (data (i32.const 146877) "a") (data (i32.const 146880) "a") (data (i32.const 146883) "a") (data (i32.const 146886) "a") (data (i32.const 146889) "a") (data (i32.const 146892) "a") (data (i32.const 146895) "a") (data (i32.const 146898) "a") (data (i32.const 146901) "a") (data (i32.const 146904) "a") (data (i32.const 146907) "a") (data (i32.const 146910) "a") (data (i32.const 146913) "a") (data (i32.const 146916) "a") (data (i32.const 146919) "a") (data (i32.const 146922) "a") (data (i32.const 146925) "a") (data (i32.const 146928) "a") (data (i32.const 146931) "a") (data (i32.const 146934) "a") (data (i32.const 146937) "a") (data (i32.const 146940) "a") (data (i32.const 146943) "a") (data (i32.const 146946) "a") (data (i32.const 146949) "a") (data (i32.const 146952) "a") (data (i32.const 146955) "a") (data (i32.const 146958) "a") (data (i32.const 146961) "a") (data (i32.const 146964) "a") (data (i32.const 146967) "a") (data (i32.const 146970) "a") (data (i32.const 146973) "a") (data (i32.const 146976) "a") (data (i32.const 146979) "a") (data (i32.const 146982) "a") (data (i32.const 146985) "a") (data (i32.const 146988) "a") (data (i32.const 146991) "a") (data (i32.const 146994) "a") (data (i32.const 146997) "a") (data (i32.const 147000) "a") (data (i32.const 147003) "a") (data (i32.const 147006) "a") (data (i32.const 147009) "a") (data (i32.const 147012) "a") (data (i32.const 147015) "a") (data (i32.const 147018) "a") (data (i32.const 147021) "a") (data (i32.const 147024) "a") (data (i32.const 147027) "a") (data (i32.const 147030) "a") (data (i32.const 147033) "a") (data (i32.const 147036) "a") (data (i32.const 147039) "a") (data (i32.const 147042) "a") (data (i32.const 147045) "a") (data (i32.const 147048) "a") (data (i32.const 147051) "a") (data (i32.const 147054) "a") (data (i32.const 147057) "a") (data (i32.const 147060) "a") (data (i32.const 147063) "a") (data (i32.const 147066) "a") (data (i32.const 147069) "a") (data (i32.const 147072) "a") (data (i32.const 147075) "a") (data (i32.const 147078) "a") (data (i32.const 147081) "a") (data (i32.const 147084) "a") (data (i32.const 147087) "a") (data (i32.const 147090) "a") (data (i32.const 147093) "a") (data (i32.const 147096) "a") (data (i32.const 147099) "a") (data (i32.const 147102) "a") (data (i32.const 147105) "a") (data (i32.const 147108) "a") (data (i32.const 147111) "a") (data (i32.const 147114) "a") (data (i32.const 147117) "a") (data (i32.const 147120) "a") (data (i32.const 147123) "a") (data (i32.const 147126) "a") (data (i32.const 147129) "a") (data (i32.const 147132) "a") (data (i32.const 147135) "a") (data (i32.const 147138) "a") (data (i32.const 147141) "a") (data (i32.const 147144) "a") (data (i32.const 147147) "a") (data (i32.const 147150) "a") (data (i32.const 147153) "a") (data (i32.const 147156) "a") (data (i32.const 147159) "a") (data (i32.const 147162) "a") (data (i32.const 147165) "a") (data (i32.const 147168) "a") (data (i32.const 147171) "a") (data (i32.const 147174) "a") (data (i32.const 147177) "a") (data (i32.const 147180) "a") (data (i32.const 147183) "a") (data (i32.const 147186) "a") (data (i32.const 147189) "a") (data (i32.const 147192) "a") (data (i32.const 147195) "a") (data (i32.const 147198) "a") (data (i32.const 147201) "a") (data (i32.const 147204) "a") (data (i32.const 147207) "a") (data (i32.const 147210) "a") (data (i32.const 147213) "a") (data (i32.const 147216) "a") (data (i32.const 147219) "a") (data (i32.const 147222) "a") (data (i32.const 147225) "a") (data (i32.const 147228) "a") (data (i32.const 147231) "a") (data (i32.const 147234) "a") (data (i32.const 147237) "a") (data (i32.const 147240) "a") (data (i32.const 147243) "a") (data (i32.const 147246) "a") (data (i32.const 147249) "a") (data (i32.const 147252) "a") (data (i32.const 147255) "a") (data (i32.const 147258) "a") (data (i32.const 147261) "a") (data (i32.const 147264) "a") (data (i32.const 147267) "a") (data (i32.const 147270) "a") (data (i32.const 147273) "a") (data (i32.const 147276) "a") (data (i32.const 147279) "a") (data (i32.const 147282) "a") (data (i32.const 147285) "a") (data (i32.const 147288) "a") (data (i32.const 147291) "a") (data (i32.const 147294) "a") (data (i32.const 147297) "a") (data (i32.const 147300) "a") (data (i32.const 147303) "a") (data (i32.const 147306) "a") (data (i32.const 147309) "a") (data (i32.const 147312) "a") (data (i32.const 147315) "a") (data (i32.const 147318) "a") (data (i32.const 147321) "a") (data (i32.const 147324) "a") (data (i32.const 147327) "a") (data (i32.const 147330) "a") (data (i32.const 147333) "a") (data (i32.const 147336) "a") (data (i32.const 147339) "a") (data (i32.const 147342) "a") (data (i32.const 147345) "a") (data (i32.const 147348) "a") (data (i32.const 147351) "a") (data (i32.const 147354) "a") (data (i32.const 147357) "a") (data (i32.const 147360) "a") (data (i32.const 147363) "a") (data (i32.const 147366) "a") (data (i32.const 147369) "a") (data (i32.const 147372) "a") (data (i32.const 147375) "a") (data (i32.const 147378) "a") (data (i32.const 147381) "a") (data (i32.const 147384) "a") (data (i32.const 147387) "a") (data (i32.const 147390) "a") (data (i32.const 147393) "a") (data (i32.const 147396) "a") (data (i32.const 147399) "a") (data (i32.const 147402) "a") (data (i32.const 147405) "a") (data (i32.const 147408) "a") (data (i32.const 147411) "a") (data (i32.const 147414) "a") (data (i32.const 147417) "a") (data (i32.const 147420) "a") (data (i32.const 147423) "a") (data (i32.const 147426) "a") (data (i32.const 147429) "a") (data (i32.const 147432) "a") (data (i32.const 147435) "a") (data (i32.const 147438) "a") (data (i32.const 147441) "a") (data (i32.const 147444) "a") (data (i32.const 147447) "a") (data (i32.const 147450) "a") (data (i32.const 147453) "a") (data (i32.const 147456) "a") (data (i32.const 147459) "a") (data (i32.const 147462) "a") (data (i32.const 147465) "a") (data (i32.const 147468) "a") (data (i32.const 147471) "a") (data (i32.const 147474) "a") (data (i32.const 147477) "a") (data (i32.const 147480) "a") (data (i32.const 147483) "a") (data (i32.const 147486) "a") (data (i32.const 147489) "a") (data (i32.const 147492) "a") (data (i32.const 147495) "a") (data (i32.const 147498) "a") (data (i32.const 147501) "a") (data (i32.const 147504) "a") (data (i32.const 147507) "a") (data (i32.const 147510) "a") (data (i32.const 147513) "a") (data (i32.const 147516) "a") (data (i32.const 147519) "a") (data (i32.const 147522) "a") (data (i32.const 147525) "a") (data (i32.const 147528) "a") (data (i32.const 147531) "a") (data (i32.const 147534) "a") (data (i32.const 147537) "a") (data (i32.const 147540) "a") (data (i32.const 147543) "a") (data (i32.const 147546) "a") (data (i32.const 147549) "a") (data (i32.const 147552) "a") (data (i32.const 147555) "a") (data (i32.const 147558) "a") (data (i32.const 147561) "a") (data (i32.const 147564) "a") (data (i32.const 147567) "a") (data (i32.const 147570) "a") (data (i32.const 147573) "a") (data (i32.const 147576) "a") (data (i32.const 147579) "a") (data (i32.const 147582) "a") (data (i32.const 147585) "a") (data (i32.const 147588) "a") (data (i32.const 147591) "a") (data (i32.const 147594) "a") (data (i32.const 147597) "a") (data (i32.const 147600) "a") (data (i32.const 147603) "a") (data (i32.const 147606) "a") (data (i32.const 147609) "a") (data (i32.const 147612) "a") (data (i32.const 147615) "a") (data (i32.const 147618) "a") (data (i32.const 147621) "a") (data (i32.const 147624) "a") (data (i32.const 147627) "a") (data (i32.const 147630) "a") (data (i32.const 147633) "a") (data (i32.const 147636) "a") (data (i32.const 147639) "a") (data (i32.const 147642) "a") (data (i32.const 147645) "a") (data (i32.const 147648) "a") (data (i32.const 147651) "a") (data (i32.const 147654) "a") (data (i32.const 147657) "a") (data (i32.const 147660) "a") (data (i32.const 147663) "a") (data (i32.const 147666) "a") (data (i32.const 147669) "a") (data (i32.const 147672) "a") (data (i32.const 147675) "a") (data (i32.const 147678) "a") (data (i32.const 147681) "a") (data (i32.const 147684) "a") (data (i32.const 147687) "a") (data (i32.const 147690) "a") (data (i32.const 147693) "a") (data (i32.const 147696) "a") (data (i32.const 147699) "a") (data (i32.const 147702) "a") (data (i32.const 147705) "a") (data (i32.const 147708) "a") (data (i32.const 147711) "a") (data (i32.const 147714) "a") (data (i32.const 147717) "a") (data (i32.const 147720) "a") (data (i32.const 147723) "a") (data (i32.const 147726) "a") (data (i32.const 147729) "a") (data (i32.const 147732) "a") (data (i32.const 147735) "a") (data (i32.const 147738) "a") (data (i32.const 147741) "a") (data (i32.const 147744) "a") (data (i32.const 147747) "a") (data (i32.const 147750) "a") (data (i32.const 147753) "a") (data (i32.const 147756) "a") (data (i32.const 147759) "a") (data (i32.const 147762) "a") (data (i32.const 147765) "a") (data (i32.const 147768) "a") (data (i32.const 147771) "a") (data (i32.const 147774) "a") (data (i32.const 147777) "a") (data (i32.const 147780) "a") (data (i32.const 147783) "a") (data (i32.const 147786) "a") (data (i32.const 147789) "a") (data (i32.const 147792) "a") (data (i32.const 147795) "a") (data (i32.const 147798) "a") (data (i32.const 147801) "a") (data (i32.const 147804) "a") (data (i32.const 147807) "a") (data (i32.const 147810) "a") (data (i32.const 147813) "a") (data (i32.const 147816) "a") (data (i32.const 147819) "a") (data (i32.const 147822) "a") (data (i32.const 147825) "a") (data (i32.const 147828) "a") (data (i32.const 147831) "a") (data (i32.const 147834) "a") (data (i32.const 147837) "a") (data (i32.const 147840) "a") (data (i32.const 147843) "a") (data (i32.const 147846) "a") (data (i32.const 147849) "a") (data (i32.const 147852) "a") (data (i32.const 147855) "a") (data (i32.const 147858) "a") (data (i32.const 147861) "a") (data (i32.const 147864) "a") (data (i32.const 147867) "a") (data (i32.const 147870) "a") (data (i32.const 147873) "a") (data (i32.const 147876) "a") (data (i32.const 147879) "a") (data (i32.const 147882) "a") (data (i32.const 147885) "a") (data (i32.const 147888) "a") (data (i32.const 147891) "a") (data (i32.const 147894) "a") (data (i32.const 147897) "a") (data (i32.const 147900) "a") (data (i32.const 147903) "a") (data (i32.const 147906) "a") (data (i32.const 147909) "a") (data (i32.const 147912) "a") (data (i32.const 147915) "a") (data (i32.const 147918) "a") (data (i32.const 147921) "a") (data (i32.const 147924) "a") (data (i32.const 147927) "a") (data (i32.const 147930) "a") (data (i32.const 147933) "a") (data (i32.const 147936) "a") (data (i32.const 147939) "a") (data (i32.const 147942) "a") (data (i32.const 147945) "a") (data (i32.const 147948) "a") (data (i32.const 147951) "a") (data (i32.const 147954) "a") (data (i32.const 147957) "a") (data (i32.const 147960) "a") (data (i32.const 147963) "a") (data (i32.const 147966) "a") (data (i32.const 147969) "a") (data (i32.const 147972) "a") (data (i32.const 147975) "a") (data (i32.const 147978) "a") (data (i32.const 147981) "a") (data (i32.const 147984) "a") (data (i32.const 147987) "a") (data (i32.const 147990) "a") (data (i32.const 147993) "a") (data (i32.const 147996) "a") (data (i32.const 147999) "a") (data (i32.const 148002) "a") (data (i32.const 148005) "a") (data (i32.const 148008) "a") (data (i32.const 148011) "a") (data (i32.const 148014) "a") (data (i32.const 148017) "a") (data (i32.const 148020) "a") (data (i32.const 148023) "a") (data (i32.const 148026) "a") (data (i32.const 148029) "a") (data (i32.const 148032) "a") (data (i32.const 148035) "a") (data (i32.const 148038) "a") (data (i32.const 148041) "a") (data (i32.const 148044) "a") (data (i32.const 148047) "a") (data (i32.const 148050) "a") (data (i32.const 148053) "a") (data (i32.const 148056) "a") (data (i32.const 148059) "a") (data (i32.const 148062) "a") (data (i32.const 148065) "a") (data (i32.const 148068) "a") (data (i32.const 148071) "a") (data (i32.const 148074) "a") (data (i32.const 148077) "a") (data (i32.const 148080) "a") (data (i32.const 148083) "a") (data (i32.const 148086) "a") (data (i32.const 148089) "a") (data (i32.const 148092) "a") (data (i32.const 148095) "a") (data (i32.const 148098) "a") (data (i32.const 148101) "a") (data (i32.const 148104) "a") (data (i32.const 148107) "a") (data (i32.const 148110) "a") (data (i32.const 148113) "a") (data (i32.const 148116) "a") (data (i32.const 148119) "a") (data (i32.const 148122) "a") (data (i32.const 148125) "a") (data (i32.const 148128) "a") (data (i32.const 148131) "a") (data (i32.const 148134) "a") (data (i32.const 148137) "a") (data (i32.const 148140) "a") (data (i32.const 148143) "a") (data (i32.const 148146) "a") (data (i32.const 148149) "a") (data (i32.const 148152) "a") (data (i32.const 148155) "a") (data (i32.const 148158) "a") (data (i32.const 148161) "a") (data (i32.const 148164) "a") (data (i32.const 148167) "a") (data (i32.const 148170) "a") (data (i32.const 148173) "a") (data (i32.const 148176) "a") (data (i32.const 148179) "a") (data (i32.const 148182) "a") (data (i32.const 148185) "a") (data (i32.const 148188) "a") (data (i32.const 148191) "a") (data (i32.const 148194) "a") (data (i32.const 148197) "a") (data (i32.const 148200) "a") (data (i32.const 148203) "a") (data (i32.const 148206) "a") (data (i32.const 148209) "a") (data (i32.const 148212) "a") (data (i32.const 148215) "a") (data (i32.const 148218) "a") (data (i32.const 148221) "a") (data (i32.const 148224) "a") (data (i32.const 148227) "a") (data (i32.const 148230) "a") (data (i32.const 148233) "a") (data (i32.const 148236) "a") (data (i32.const 148239) "a") (data (i32.const 148242) "a") (data (i32.const 148245) "a") (data (i32.const 148248) "a") (data (i32.const 148251) "a") (data (i32.const 148254) "a") (data (i32.const 148257) "a") (data (i32.const 148260) "a") (data (i32.const 148263) "a") (data (i32.const 148266) "a") (data (i32.const 148269) "a") (data (i32.const 148272) "a") (data (i32.const 148275) "a") (data (i32.const 148278) "a") (data (i32.const 148281) "a") (data (i32.const 148284) "a") (data (i32.const 148287) "a") (data (i32.const 148290) "a") (data (i32.const 148293) "a") (data (i32.const 148296) "a") (data (i32.const 148299) "a") (data (i32.const 148302) "a") (data (i32.const 148305) "a") (data (i32.const 148308) "a") (data (i32.const 148311) "a") (data (i32.const 148314) "a") (data (i32.const 148317) "a") (data (i32.const 148320) "a") (data (i32.const 148323) "a") (data (i32.const 148326) "a") (data (i32.const 148329) "a") (data (i32.const 148332) "a") (data (i32.const 148335) "a") (data (i32.const 148338) "a") (data (i32.const 148341) "a") (data (i32.const 148344) "a") (data (i32.const 148347) "a") (data (i32.const 148350) "a") (data (i32.const 148353) "a") (data (i32.const 148356) "a") (data (i32.const 148359) "a") (data (i32.const 148362) "a") (data (i32.const 148365) "a") (data (i32.const 148368) "a") (data (i32.const 148371) "a") (data (i32.const 148374) "a") (data (i32.const 148377) "a") (data (i32.const 148380) "a") (data (i32.const 148383) "a") (data (i32.const 148386) "a") (data (i32.const 148389) "a") (data (i32.const 148392) "a") (data (i32.const 148395) "a") (data (i32.const 148398) "a") (data (i32.const 148401) "a") (data (i32.const 148404) "a") (data (i32.const 148407) "a") (data (i32.const 148410) "a") (data (i32.const 148413) "a") (data (i32.const 148416) "a") (data (i32.const 148419) "a") (data (i32.const 148422) "a") (data (i32.const 148425) "a") (data (i32.const 148428) "a") (data (i32.const 148431) "a") (data (i32.const 148434) "a") (data (i32.const 148437) "a") (data (i32.const 148440) "a") (data (i32.const 148443) "a") (data (i32.const 148446) "a") (data (i32.const 148449) "a") (data (i32.const 148452) "a") (data (i32.const 148455) "a") (data (i32.const 148458) "a") (data (i32.const 148461) "a") (data (i32.const 148464) "a") (data (i32.const 148467) "a") (data (i32.const 148470) "a") (data (i32.const 148473) "a") (data (i32.const 148476) "a") (data (i32.const 148479) "a") (data (i32.const 148482) "a") (data (i32.const 148485) "a") (data (i32.const 148488) "a") (data (i32.const 148491) "a") (data (i32.const 148494) "a") (data (i32.const 148497) "a") (data (i32.const 148500) "a") (data (i32.const 148503) "a") (data (i32.const 148506) "a") (data (i32.const 148509) "a") (data (i32.const 148512) "a") (data (i32.const 148515) "a") (data (i32.const 148518) "a") (data (i32.const 148521) "a") (data (i32.const 148524) "a") (data (i32.const 148527) "a") (data (i32.const 148530) "a") (data (i32.const 148533) "a") (data (i32.const 148536) "a") (data (i32.const 148539) "a") (data (i32.const 148542) "a") (data (i32.const 148545) "a") (data (i32.const 148548) "a") (data (i32.const 148551) "a") (data (i32.const 148554) "a") (data (i32.const 148557) "a") (data (i32.const 148560) "a") (data (i32.const 148563) "a") (data (i32.const 148566) "a") (data (i32.const 148569) "a") (data (i32.const 148572) "a") (data (i32.const 148575) "a") (data (i32.const 148578) "a") (data (i32.const 148581) "a") (data (i32.const 148584) "a") (data (i32.const 148587) "a") (data (i32.const 148590) "a") (data (i32.const 148593) "a") (data (i32.const 148596) "a") (data (i32.const 148599) "a") (data (i32.const 148602) "a") (data (i32.const 148605) "a") (data (i32.const 148608) "a") (data (i32.const 148611) "a") (data (i32.const 148614) "a") (data (i32.const 148617) "a") (data (i32.const 148620) "a") (data (i32.const 148623) "a") (data (i32.const 148626) "a") (data (i32.const 148629) "a") (data (i32.const 148632) "a") (data (i32.const 148635) "a") (data (i32.const 148638) "a") (data (i32.const 148641) "a") (data (i32.const 148644) "a") (data (i32.const 148647) "a") (data (i32.const 148650) "a") (data (i32.const 148653) "a") (data (i32.const 148656) "a") (data (i32.const 148659) "a") (data (i32.const 148662) "a") (data (i32.const 148665) "a") (data (i32.const 148668) "a") (data (i32.const 148671) "a") (data (i32.const 148674) "a") (data (i32.const 148677) "a") (data (i32.const 148680) "a") (data (i32.const 148683) "a") (data (i32.const 148686) "a") (data (i32.const 148689) "a") (data (i32.const 148692) "a") (data (i32.const 148695) "a") (data (i32.const 148698) "a") (data (i32.const 148701) "a") (data (i32.const 148704) "a") (data (i32.const 148707) "a") (data (i32.const 148710) "a") (data (i32.const 148713) "a") (data (i32.const 148716) "a") (data (i32.const 148719) "a") (data (i32.const 148722) "a") (data (i32.const 148725) "a") (data (i32.const 148728) "a") (data (i32.const 148731) "a") (data (i32.const 148734) "a") (data (i32.const 148737) "a") (data (i32.const 148740) "a") (data (i32.const 148743) "a") (data (i32.const 148746) "a") (data (i32.const 148749) "a") (data (i32.const 148752) "a") (data (i32.const 148755) "a") (data (i32.const 148758) "a") (data (i32.const 148761) "a") (data (i32.const 148764) "a") (data (i32.const 148767) "a") (data (i32.const 148770) "a") (data (i32.const 148773) "a") (data (i32.const 148776) "a") (data (i32.const 148779) "a") (data (i32.const 148782) "a") (data (i32.const 148785) "a") (data (i32.const 148788) "a") (data (i32.const 148791) "a") (data (i32.const 148794) "a") (data (i32.const 148797) "a") (data (i32.const 148800) "a") (data (i32.const 148803) "a") (data (i32.const 148806) "a") (data (i32.const 148809) "a") (data (i32.const 148812) "a") (data (i32.const 148815) "a") (data (i32.const 148818) "a") (data (i32.const 148821) "a") (data (i32.const 148824) "a") (data (i32.const 148827) "a") (data (i32.const 148830) "a") (data (i32.const 148833) "a") (data (i32.const 148836) "a") (data (i32.const 148839) "a") (data (i32.const 148842) "a") (data (i32.const 148845) "a") (data (i32.const 148848) "a") (data (i32.const 148851) "a") (data (i32.const 148854) "a") (data (i32.const 148857) "a") (data (i32.const 148860) "a") (data (i32.const 148863) "a") (data (i32.const 148866) "a") (data (i32.const 148869) "a") (data (i32.const 148872) "a") (data (i32.const 148875) "a") (data (i32.const 148878) "a") (data (i32.const 148881) "a") (data (i32.const 148884) "a") (data (i32.const 148887) "a") (data (i32.const 148890) "a") (data (i32.const 148893) "a") (data (i32.const 148896) "a") (data (i32.const 148899) "a") (data (i32.const 148902) "a") (data (i32.const 148905) "a") (data (i32.const 148908) "a") (data (i32.const 148911) "a") (data (i32.const 148914) "a") (data (i32.const 148917) "a") (data (i32.const 148920) "a") (data (i32.const 148923) "a") (data (i32.const 148926) "a") (data (i32.const 148929) "a") (data (i32.const 148932) "a") (data (i32.const 148935) "a") (data (i32.const 148938) "a") (data (i32.const 148941) "a") (data (i32.const 148944) "a") (data (i32.const 148947) "a") (data (i32.const 148950) "a") (data (i32.const 148953) "a") (data (i32.const 148956) "a") (data (i32.const 148959) "a") (data (i32.const 148962) "a") (data (i32.const 148965) "a") (data (i32.const 148968) "a") (data (i32.const 148971) "a") (data (i32.const 148974) "a") (data (i32.const 148977) "a") (data (i32.const 148980) "a") (data (i32.const 148983) "a") (data (i32.const 148986) "a") (data (i32.const 148989) "a") (data (i32.const 148992) "a") (data (i32.const 148995) "a") (data (i32.const 148998) "a") (data (i32.const 149001) "a") (data (i32.const 149004) "a") (data (i32.const 149007) "a") (data (i32.const 149010) "a") (data (i32.const 149013) "a") (data (i32.const 149016) "a") (data (i32.const 149019) "a") (data (i32.const 149022) "a") (data (i32.const 149025) "a") (data (i32.const 149028) "a") (data (i32.const 149031) "a") (data (i32.const 149034) "a") (data (i32.const 149037) "a") (data (i32.const 149040) "a") (data (i32.const 149043) "a") (data (i32.const 149046) "a") (data (i32.const 149049) "a") (data (i32.const 149052) "a") (data (i32.const 149055) "a") (data (i32.const 149058) "a") (data (i32.const 149061) "a") (data (i32.const 149064) "a") (data (i32.const 149067) "a") (data (i32.const 149070) "a") (data (i32.const 149073) "a") (data (i32.const 149076) "a") (data (i32.const 149079) "a") (data (i32.const 149082) "a") (data (i32.const 149085) "a") (data (i32.const 149088) "a") (data (i32.const 149091) "a") (data (i32.const 149094) "a") (data (i32.const 149097) "a") (data (i32.const 149100) "a") (data (i32.const 149103) "a") (data (i32.const 149106) "a") (data (i32.const 149109) "a") (data (i32.const 149112) "a") (data (i32.const 149115) "a") (data (i32.const 149118) "a") (data (i32.const 149121) "a") (data (i32.const 149124) "a") (data (i32.const 149127) "a") (data (i32.const 149130) "a") (data (i32.const 149133) "a") (data (i32.const 149136) "a") (data (i32.const 149139) "a") (data (i32.const 149142) "a") (data (i32.const 149145) "a") (data (i32.const 149148) "a") (data (i32.const 149151) "a") (data (i32.const 149154) "a") (data (i32.const 149157) "a") (data (i32.const 149160) "a") (data (i32.const 149163) "a") (data (i32.const 149166) "a") (data (i32.const 149169) "a") (data (i32.const 149172) "a") (data (i32.const 149175) "a") (data (i32.const 149178) "a") (data (i32.const 149181) "a") (data (i32.const 149184) "a") (data (i32.const 149187) "a") (data (i32.const 149190) "a") (data (i32.const 149193) "a") (data (i32.const 149196) "a") (data (i32.const 149199) "a") (data (i32.const 149202) "a") (data (i32.const 149205) "a") (data (i32.const 149208) "a") (data (i32.const 149211) "a") (data (i32.const 149214) "a") (data (i32.const 149217) "a") (data (i32.const 149220) "a") (data (i32.const 149223) "a") (data (i32.const 149226) "a") (data (i32.const 149229) "a") (data (i32.const 149232) "a") (data (i32.const 149235) "a") (data (i32.const 149238) "a") (data (i32.const 149241) "a") (data (i32.const 149244) "a") (data (i32.const 149247) "a") (data (i32.const 149250) "a") (data (i32.const 149253) "a") (data (i32.const 149256) "a") (data (i32.const 149259) "a") (data (i32.const 149262) "a") (data (i32.const 149265) "a") (data (i32.const 149268) "a") (data (i32.const 149271) "a") (data (i32.const 149274) "a") (data (i32.const 149277) "a") (data (i32.const 149280) "a") (data (i32.const 149283) "a") (data (i32.const 149286) "a") (data (i32.const 149289) "a") (data (i32.const 149292) "a") (data (i32.const 149295) "a") (data (i32.const 149298) "a") (data (i32.const 149301) "a") (data (i32.const 149304) "a") (data (i32.const 149307) "a") (data (i32.const 149310) "a") (data (i32.const 149313) "a") (data (i32.const 149316) "a") (data (i32.const 149319) "a") (data (i32.const 149322) "a") (data (i32.const 149325) "a") (data (i32.const 149328) "a") (data (i32.const 149331) "a") (data (i32.const 149334) "a") (data (i32.const 149337) "a") (data (i32.const 149340) "a") (data (i32.const 149343) "a") (data (i32.const 149346) "a") (data (i32.const 149349) "a") (data (i32.const 149352) "a") (data (i32.const 149355) "a") (data (i32.const 149358) "a") (data (i32.const 149361) "a") (data (i32.const 149364) "a") (data (i32.const 149367) "a") (data (i32.const 149370) "a") (data (i32.const 149373) "a") (data (i32.const 149376) "a") (data (i32.const 149379) "a") (data (i32.const 149382) "a") (data (i32.const 149385) "a") (data (i32.const 149388) "a") (data (i32.const 149391) "a") (data (i32.const 149394) "a") (data (i32.const 149397) "a") (data (i32.const 149400) "a") (data (i32.const 149403) "a") (data (i32.const 149406) "a") (data (i32.const 149409) "a") (data (i32.const 149412) "a") (data (i32.const 149415) "a") (data (i32.const 149418) "a") (data (i32.const 149421) "a") (data (i32.const 149424) "a") (data (i32.const 149427) "a") (data (i32.const 149430) "a") (data (i32.const 149433) "a") (data (i32.const 149436) "a") (data (i32.const 149439) "a") (data (i32.const 149442) "a") (data (i32.const 149445) "a") (data (i32.const 149448) "a") (data (i32.const 149451) "a") (data (i32.const 149454) "a") (data (i32.const 149457) "a") (data (i32.const 149460) "a") (data (i32.const 149463) "a") (data (i32.const 149466) "a") (data (i32.const 149469) "a") (data (i32.const 149472) "a") (data (i32.const 149475) "a") (data (i32.const 149478) "a") (data (i32.const 149481) "a") (data (i32.const 149484) "a") (data (i32.const 149487) "a") (data (i32.const 149490) "a") (data (i32.const 149493) "a") (data (i32.const 149496) "a") (data (i32.const 149499) "a") (data (i32.const 149502) "a") (data (i32.const 149505) "a") (data (i32.const 149508) "a") (data (i32.const 149511) "a") (data (i32.const 149514) "a") (data (i32.const 149517) "a") (data (i32.const 149520) "a") (data (i32.const 149523) "a") (data (i32.const 149526) "a") (data (i32.const 149529) "a") (data (i32.const 149532) "a") (data (i32.const 149535) "a") (data (i32.const 149538) "a") (data (i32.const 149541) "a") (data (i32.const 149544) "a") (data (i32.const 149547) "a") (data (i32.const 149550) "a") (data (i32.const 149553) "a") (data (i32.const 149556) "a") (data (i32.const 149559) "a") (data (i32.const 149562) "a") (data (i32.const 149565) "a") (data (i32.const 149568) "a") (data (i32.const 149571) "a") (data (i32.const 149574) "a") (data (i32.const 149577) "a") (data (i32.const 149580) "a") (data (i32.const 149583) "a") (data (i32.const 149586) "a") (data (i32.const 149589) "a") (data (i32.const 149592) "a") (data (i32.const 149595) "a") (data (i32.const 149598) "a") (data (i32.const 149601) "a") (data (i32.const 149604) "a") (data (i32.const 149607) "a") (data (i32.const 149610) "a") (data (i32.const 149613) "a") (data (i32.const 149616) "a") (data (i32.const 149619) "a") (data (i32.const 149622) "a") (data (i32.const 149625) "a") (data (i32.const 149628) "a") (data (i32.const 149631) "a") (data (i32.const 149634) "a") (data (i32.const 149637) "a") (data (i32.const 149640) "a") (data (i32.const 149643) "a") (data (i32.const 149646) "a") (data (i32.const 149649) "a") (data (i32.const 149652) "a") (data (i32.const 149655) "a") (data (i32.const 149658) "a") (data (i32.const 149661) "a") (data (i32.const 149664) "a") (data (i32.const 149667) "a") (data (i32.const 149670) "a") (data (i32.const 149673) "a") (data (i32.const 149676) "a") (data (i32.const 149679) "a") (data (i32.const 149682) "a") (data (i32.const 149685) "a") (data (i32.const 149688) "a") (data (i32.const 149691) "a") (data (i32.const 149694) "a") (data (i32.const 149697) "a") (data (i32.const 149700) "a") (data (i32.const 149703) "a") (data (i32.const 149706) "a") (data (i32.const 149709) "a") (data (i32.const 149712) "a") (data (i32.const 149715) "a") (data (i32.const 149718) "a") (data (i32.const 149721) "a") (data (i32.const 149724) "a") (data (i32.const 149727) "a") (data (i32.const 149730) "a") (data (i32.const 149733) "a") (data (i32.const 149736) "a") (data (i32.const 149739) "a") (data (i32.const 149742) "a") (data (i32.const 149745) "a") (data (i32.const 149748) "a") (data (i32.const 149751) "a") (data (i32.const 149754) "a") (data (i32.const 149757) "a") (data (i32.const 149760) "a") (data (i32.const 149763) "a") (data (i32.const 149766) "a") (data (i32.const 149769) "a") (data (i32.const 149772) "a") (data (i32.const 149775) "a") (data (i32.const 149778) "a") (data (i32.const 149781) "a") (data (i32.const 149784) "a") (data (i32.const 149787) "a") (data (i32.const 149790) "a") (data (i32.const 149793) "a") (data (i32.const 149796) "a") (data (i32.const 149799) "a") (data (i32.const 149802) "a") (data (i32.const 149805) "a") (data (i32.const 149808) "a") (data (i32.const 149811) "a") (data (i32.const 149814) "a") (data (i32.const 149817) "a") (data (i32.const 149820) "a") (data (i32.const 149823) "a") (data (i32.const 149826) "a") (data (i32.const 149829) "a") (data (i32.const 149832) "a") (data (i32.const 149835) "a") (data (i32.const 149838) "a") (data (i32.const 149841) "a") (data (i32.const 149844) "a") (data (i32.const 149847) "a") (data (i32.const 149850) "a") (data (i32.const 149853) "a") (data (i32.const 149856) "a") (data (i32.const 149859) "a") (data (i32.const 149862) "a") (data (i32.const 149865) "a") (data (i32.const 149868) "a") (data (i32.const 149871) "a") (data (i32.const 149874) "a") (data (i32.const 149877) "a") (data (i32.const 149880) "a") (data (i32.const 149883) "a") (data (i32.const 149886) "a") (data (i32.const 149889) "a") (data (i32.const 149892) "a") (data (i32.const 149895) "a") (data (i32.const 149898) "a") (data (i32.const 149901) "a") (data (i32.const 149904) "a") (data (i32.const 149907) "a") (data (i32.const 149910) "a") (data (i32.const 149913) "a") (data (i32.const 149916) "a") (data (i32.const 149919) "a") (data (i32.const 149922) "a") (data (i32.const 149925) "a") (data (i32.const 149928) "a") (data (i32.const 149931) "a") (data (i32.const 149934) "a") (data (i32.const 149937) "a") (data (i32.const 149940) "a") (data (i32.const 149943) "a") (data (i32.const 149946) "a") (data (i32.const 149949) "a") (data (i32.const 149952) "a") (data (i32.const 149955) "a") (data (i32.const 149958) "a") (data (i32.const 149961) "a") (data (i32.const 149964) "a") (data (i32.const 149967) "a") (data (i32.const 149970) "a") (data (i32.const 149973) "a") (data (i32.const 149976) "a") (data (i32.const 149979) "a") (data (i32.const 149982) "a") (data (i32.const 149985) "a") (data (i32.const 149988) "a") (data (i32.const 149991) "a") (data (i32.const 149994) "a") (data (i32.const 149997) "a") (data (i32.const 150000) "a") (data (i32.const 150003) "a") (data (i32.const 150006) "a") (data (i32.const 150009) "a") (data (i32.const 150012) "a") (data (i32.const 150015) "a") (data (i32.const 150018) "a") (data (i32.const 150021) "a") (data (i32.const 150024) "a") (data (i32.const 150027) "a") (data (i32.const 150030) "a") (data (i32.const 150033) "a") (data (i32.const 150036) "a") (data (i32.const 150039) "a") (data (i32.const 150042) "a") (data (i32.const 150045) "a") (data (i32.const 150048) "a") (data (i32.const 150051) "a") (data (i32.const 150054) "a") (data (i32.const 150057) "a") (data (i32.const 150060) "a") (data (i32.const 150063) "a") (data (i32.const 150066) "a") (data (i32.const 150069) "a") (data (i32.const 150072) "a") (data (i32.const 150075) "a") (data (i32.const 150078) "a") (data (i32.const 150081) "a") (data (i32.const 150084) "a") (data (i32.const 150087) "a") (data (i32.const 150090) "a") (data (i32.const 150093) "a") (data (i32.const 150096) "a") (data (i32.const 150099) "a") (data (i32.const 150102) "a") (data (i32.const 150105) "a") (data (i32.const 150108) "a") (data (i32.const 150111) "a") (data (i32.const 150114) "a") (data (i32.const 150117) "a") (data (i32.const 150120) "a") (data (i32.const 150123) "a") (data (i32.const 150126) "a") (data (i32.const 150129) "a") (data (i32.const 150132) "a") (data (i32.const 150135) "a") (data (i32.const 150138) "a") (data (i32.const 150141) "a") (data (i32.const 150144) "a") (data (i32.const 150147) "a") (data (i32.const 150150) "a") (data (i32.const 150153) "a") (data (i32.const 150156) "a") (data (i32.const 150159) "a") (data (i32.const 150162) "a") (data (i32.const 150165) "a") (data (i32.const 150168) "a") (data (i32.const 150171) "a") (data (i32.const 150174) "a") (data (i32.const 150177) "a") (data (i32.const 150180) "a") (data (i32.const 150183) "a") (data (i32.const 150186) "a") (data (i32.const 150189) "a") (data (i32.const 150192) "a") (data (i32.const 150195) "a") (data (i32.const 150198) "a") (data (i32.const 150201) "a") (data (i32.const 150204) "a") (data (i32.const 150207) "a") (data (i32.const 150210) "a") (data (i32.const 150213) "a") (data (i32.const 150216) "a") (data (i32.const 150219) "a") (data (i32.const 150222) "a") (data (i32.const 150225) "a") (data (i32.const 150228) "a") (data (i32.const 150231) "a") (data (i32.const 150234) "a") (data (i32.const 150237) "a") (data (i32.const 150240) "a") (data (i32.const 150243) "a") (data (i32.const 150246) "a") (data (i32.const 150249) "a") (data (i32.const 150252) "a") (data (i32.const 150255) "a") (data (i32.const 150258) "a") (data (i32.const 150261) "a") (data (i32.const 150264) "a") (data (i32.const 150267) "a") (data (i32.const 150270) "a") (data (i32.const 150273) "a") (data (i32.const 150276) "a") (data (i32.const 150279) "a") (data (i32.const 150282) "a") (data (i32.const 150285) "a") (data (i32.const 150288) "a") (data (i32.const 150291) "a") (data (i32.const 150294) "a") (data (i32.const 150297) "a") (data (i32.const 150300) "a") (data (i32.const 150303) "a") (data (i32.const 150306) "a") (data (i32.const 150309) "a") (data (i32.const 150312) "a") (data (i32.const 150315) "a") (data (i32.const 150318) "a") (data (i32.const 150321) "a") (data (i32.const 150324) "a") (data (i32.const 150327) "a") (data (i32.const 150330) "a") (data (i32.const 150333) "a") (data (i32.const 150336) "a") (data (i32.const 150339) "a") (data (i32.const 150342) "a") (data (i32.const 150345) "a") (data (i32.const 150348) "a") (data (i32.const 150351) "a") (data (i32.const 150354) "a") (data (i32.const 150357) "a") (data (i32.const 150360) "a") (data (i32.const 150363) "a") (data (i32.const 150366) "a") (data (i32.const 150369) "a") (data (i32.const 150372) "a") (data (i32.const 150375) "a") (data (i32.const 150378) "a") (data (i32.const 150381) "a") (data (i32.const 150384) "a") (data (i32.const 150387) "a") (data (i32.const 150390) "a") (data (i32.const 150393) "a") (data (i32.const 150396) "a") (data (i32.const 150399) "a") (data (i32.const 150402) "a") (data (i32.const 150405) "a") (data (i32.const 150408) "a") (data (i32.const 150411) "a") (data (i32.const 150414) "a") (data (i32.const 150417) "a") (data (i32.const 150420) "a") (data (i32.const 150423) "a") (data (i32.const 150426) "a") (data (i32.const 150429) "a") (data (i32.const 150432) "a") (data (i32.const 150435) "a") (data (i32.const 150438) "a") (data (i32.const 150441) "a") (data (i32.const 150444) "a") (data (i32.const 150447) "a") (data (i32.const 150450) "a") (data (i32.const 150453) "a") (data (i32.const 150456) "a") (data (i32.const 150459) "a") (data (i32.const 150462) "a") (data (i32.const 150465) "a") (data (i32.const 150468) "a") (data (i32.const 150471) "a") (data (i32.const 150474) "a") (data (i32.const 150477) "a") (data (i32.const 150480) "a") (data (i32.const 150483) "a") (data (i32.const 150486) "a") (data (i32.const 150489) "a") (data (i32.const 150492) "a") (data (i32.const 150495) "a") (data (i32.const 150498) "a") (data (i32.const 150501) "a") (data (i32.const 150504) "a") (data (i32.const 150507) "a") (data (i32.const 150510) "a") (data (i32.const 150513) "a") (data (i32.const 150516) "a") (data (i32.const 150519) "a") (data (i32.const 150522) "a") (data (i32.const 150525) "a") (data (i32.const 150528) "a") (data (i32.const 150531) "a") (data (i32.const 150534) "a") (data (i32.const 150537) "a") (data (i32.const 150540) "a") (data (i32.const 150543) "a") (data (i32.const 150546) "a") (data (i32.const 150549) "a") (data (i32.const 150552) "a") (data (i32.const 150555) "a") (data (i32.const 150558) "a") (data (i32.const 150561) "a") (data (i32.const 150564) "a") (data (i32.const 150567) "a") (data (i32.const 150570) "a") (data (i32.const 150573) "a") (data (i32.const 150576) "a") (data (i32.const 150579) "a") (data (i32.const 150582) "a") (data (i32.const 150585) "a") (data (i32.const 150588) "a") (data (i32.const 150591) "a") (data (i32.const 150594) "a") (data (i32.const 150597) "a") (data (i32.const 150600) "a") (data (i32.const 150603) "a") (data (i32.const 150606) "a") (data (i32.const 150609) "a") (data (i32.const 150612) "a") (data (i32.const 150615) "a") (data (i32.const 150618) "a") (data (i32.const 150621) "a") (data (i32.const 150624) "a") (data (i32.const 150627) "a") (data (i32.const 150630) "a") (data (i32.const 150633) "a") (data (i32.const 150636) "a") (data (i32.const 150639) "a") (data (i32.const 150642) "a") (data (i32.const 150645) "a") (data (i32.const 150648) "a") (data (i32.const 150651) "a") (data (i32.const 150654) "a") (data (i32.const 150657) "a") (data (i32.const 150660) "a") (data (i32.const 150663) "a") (data (i32.const 150666) "a") (data (i32.const 150669) "a") (data (i32.const 150672) "a") (data (i32.const 150675) "a") (data (i32.const 150678) "a") (data (i32.const 150681) "a") (data (i32.const 150684) "a") (data (i32.const 150687) "a") (data (i32.const 150690) "a") (data (i32.const 150693) "a") (data (i32.const 150696) "a") (data (i32.const 150699) "a") (data (i32.const 150702) "a") (data (i32.const 150705) "a") (data (i32.const 150708) "a") (data (i32.const 150711) "a") (data (i32.const 150714) "a") (data (i32.const 150717) "a") (data (i32.const 150720) "a") (data (i32.const 150723) "a") (data (i32.const 150726) "a") (data (i32.const 150729) "a") (data (i32.const 150732) "a") (data (i32.const 150735) "a") (data (i32.const 150738) "a") (data (i32.const 150741) "a") (data (i32.const 150744) "a") (data (i32.const 150747) "a") (data (i32.const 150750) "a") (data (i32.const 150753) "a") (data (i32.const 150756) "a") (data (i32.const 150759) "a") (data (i32.const 150762) "a") (data (i32.const 150765) "a") (data (i32.const 150768) "a") (data (i32.const 150771) "a") (data (i32.const 150774) "a") (data (i32.const 150777) "a") (data (i32.const 150780) "a") (data (i32.const 150783) "a") (data (i32.const 150786) "a") (data (i32.const 150789) "a") (data (i32.const 150792) "a") (data (i32.const 150795) "a") (data (i32.const 150798) "a") (data (i32.const 150801) "a") (data (i32.const 150804) "a") (data (i32.const 150807) "a") (data (i32.const 150810) "a") (data (i32.const 150813) "a") (data (i32.const 150816) "a") (data (i32.const 150819) "a") (data (i32.const 150822) "a") (data (i32.const 150825) "a") (data (i32.const 150828) "a") (data (i32.const 150831) "a") (data (i32.const 150834) "a") (data (i32.const 150837) "a") (data (i32.const 150840) "a") (data (i32.const 150843) "a") (data (i32.const 150846) "a") (data (i32.const 150849) "a") (data (i32.const 150852) "a") (data (i32.const 150855) "a") (data (i32.const 150858) "a") (data (i32.const 150861) "a") (data (i32.const 150864) "a") (data (i32.const 150867) "a") (data (i32.const 150870) "a") (data (i32.const 150873) "a") (data (i32.const 150876) "a") (data (i32.const 150879) "a") (data (i32.const 150882) "a") (data (i32.const 150885) "a") (data (i32.const 150888) "a") (data (i32.const 150891) "a") (data (i32.const 150894) "a") (data (i32.const 150897) "a") (data (i32.const 150900) "a") (data (i32.const 150903) "a") (data (i32.const 150906) "a") (data (i32.const 150909) "a") (data (i32.const 150912) "a") (data (i32.const 150915) "a") (data (i32.const 150918) "a") (data (i32.const 150921) "a") (data (i32.const 150924) "a") (data (i32.const 150927) "a") (data (i32.const 150930) "a") (data (i32.const 150933) "a") (data (i32.const 150936) "a") (data (i32.const 150939) "a") (data (i32.const 150942) "a") (data (i32.const 150945) "a") (data (i32.const 150948) "a") (data (i32.const 150951) "a") (data (i32.const 150954) "a") (data (i32.const 150957) "a") (data (i32.const 150960) "a") (data (i32.const 150963) "a") (data (i32.const 150966) "a") (data (i32.const 150969) "a") (data (i32.const 150972) "a") (data (i32.const 150975) "a") (data (i32.const 150978) "a") (data (i32.const 150981) "a") (data (i32.const 150984) "a") (data (i32.const 150987) "a") (data (i32.const 150990) "a") (data (i32.const 150993) "a") (data (i32.const 150996) "a") (data (i32.const 150999) "a") (data (i32.const 151002) "a") (data (i32.const 151005) "a") (data (i32.const 151008) "a") (data (i32.const 151011) "a") (data (i32.const 151014) "a") (data (i32.const 151017) "a") (data (i32.const 151020) "a") (data (i32.const 151023) "a") (data (i32.const 151026) "a") (data (i32.const 151029) "a") (data (i32.const 151032) "a") (data (i32.const 151035) "a") (data (i32.const 151038) "a") (data (i32.const 151041) "a") (data (i32.const 151044) "a") (data (i32.const 151047) "a") (data (i32.const 151050) "a") (data (i32.const 151053) "a") (data (i32.const 151056) "a") (data (i32.const 151059) "a") (data (i32.const 151062) "a") (data (i32.const 151065) "a") (data (i32.const 151068) "a") (data (i32.const 151071) "a") (data (i32.const 151074) "a") (data (i32.const 151077) "a") (data (i32.const 151080) "a") (data (i32.const 151083) "a") (data (i32.const 151086) "a") (data (i32.const 151089) "a") (data (i32.const 151092) "a") (data (i32.const 151095) "a") (data (i32.const 151098) "a") (data (i32.const 151101) "a") (data (i32.const 151104) "a") (data (i32.const 151107) "a") (data (i32.const 151110) "a") (data (i32.const 151113) "a") (data (i32.const 151116) "a") (data (i32.const 151119) "a") (data (i32.const 151122) "a") (data (i32.const 151125) "a") (data (i32.const 151128) "a") (data (i32.const 151131) "a") (data (i32.const 151134) "a") (data (i32.const 151137) "a") (data (i32.const 151140) "a") (data (i32.const 151143) "a") (data (i32.const 151146) "a") (data (i32.const 151149) "a") (data (i32.const 151152) "a") (data (i32.const 151155) "a") (data (i32.const 151158) "a") (data (i32.const 151161) "a") (data (i32.const 151164) "a") (data (i32.const 151167) "a") (data (i32.const 151170) "a") (data (i32.const 151173) "a") (data (i32.const 151176) "a") (data (i32.const 151179) "a") (data (i32.const 151182) "a") (data (i32.const 151185) "a") (data (i32.const 151188) "a") (data (i32.const 151191) "a") (data (i32.const 151194) "a") (data (i32.const 151197) "a") (data (i32.const 151200) "a") (data (i32.const 151203) "a") (data (i32.const 151206) "a") (data (i32.const 151209) "a") (data (i32.const 151212) "a") (data (i32.const 151215) "a") (data (i32.const 151218) "a") (data (i32.const 151221) "a") (data (i32.const 151224) "a") (data (i32.const 151227) "a") (data (i32.const 151230) "a") (data (i32.const 151233) "a") (data (i32.const 151236) "a") (data (i32.const 151239) "a") (data (i32.const 151242) "a") (data (i32.const 151245) "a") (data (i32.const 151248) "a") (data (i32.const 151251) "a") (data (i32.const 151254) "a") (data (i32.const 151257) "a") (data (i32.const 151260) "a") (data (i32.const 151263) "a") (data (i32.const 151266) "a") (data (i32.const 151269) "a") (data (i32.const 151272) "a") (data (i32.const 151275) "a") (data (i32.const 151278) "a") (data (i32.const 151281) "a") (data (i32.const 151284) "a") (data (i32.const 151287) "a") (data (i32.const 151290) "a") (data (i32.const 151293) "a") (data (i32.const 151296) "a") (data (i32.const 151299) "a") (data (i32.const 151302) "a") (data (i32.const 151305) "a") (data (i32.const 151308) "a") (data (i32.const 151311) "a") (data (i32.const 151314) "a") (data (i32.const 151317) "a") (data (i32.const 151320) "a") (data (i32.const 151323) "a") (data (i32.const 151326) "a") (data (i32.const 151329) "a") (data (i32.const 151332) "a") (data (i32.const 151335) "a") (data (i32.const 151338) "a") (data (i32.const 151341) "a") (data (i32.const 151344) "a") (data (i32.const 151347) "a") (data (i32.const 151350) "a") (data (i32.const 151353) "a") (data (i32.const 151356) "a") (data (i32.const 151359) "a") (data (i32.const 151362) "a") (data (i32.const 151365) "a") (data (i32.const 151368) "a") (data (i32.const 151371) "a") (data (i32.const 151374) "a") (data (i32.const 151377) "a") (data (i32.const 151380) "a") (data (i32.const 151383) "a") (data (i32.const 151386) "a") (data (i32.const 151389) "a") (data (i32.const 151392) "a") (data (i32.const 151395) "a") (data (i32.const 151398) "a") (data (i32.const 151401) "a") (data (i32.const 151404) "a") (data (i32.const 151407) "a") (data (i32.const 151410) "a") (data (i32.const 151413) "a") (data (i32.const 151416) "a") (data (i32.const 151419) "a") (data (i32.const 151422) "a") (data (i32.const 151425) "a") (data (i32.const 151428) "a") (data (i32.const 151431) "a") (data (i32.const 151434) "a") (data (i32.const 151437) "a") (data (i32.const 151440) "a") (data (i32.const 151443) "a") (data (i32.const 151446) "a") (data (i32.const 151449) "a") (data (i32.const 151452) "a") (data (i32.const 151455) "a") (data (i32.const 151458) "a") (data (i32.const 151461) "a") (data (i32.const 151464) "a") (data (i32.const 151467) "a") (data (i32.const 151470) "a") (data (i32.const 151473) "a") (data (i32.const 151476) "a") (data (i32.const 151479) "a") (data (i32.const 151482) "a") (data (i32.const 151485) "a") (data (i32.const 151488) "a") (data (i32.const 151491) "a") (data (i32.const 151494) "a") (data (i32.const 151497) "a") (data (i32.const 151500) "a") (data (i32.const 151503) "a") (data (i32.const 151506) "a") (data (i32.const 151509) "a") (data (i32.const 151512) "a") (data (i32.const 151515) "a") (data (i32.const 151518) "a") (data (i32.const 151521) "a") (data (i32.const 151524) "a") (data (i32.const 151527) "a") (data (i32.const 151530) "a") (data (i32.const 151533) "a") (data (i32.const 151536) "a") (data (i32.const 151539) "a") (data (i32.const 151542) "a") (data (i32.const 151545) "a") (data (i32.const 151548) "a") (data (i32.const 151551) "a") (data (i32.const 151554) "a") (data (i32.const 151557) "a") (data (i32.const 151560) "a") (data (i32.const 151563) "a") (data (i32.const 151566) "a") (data (i32.const 151569) "a") (data (i32.const 151572) "a") (data (i32.const 151575) "a") (data (i32.const 151578) "a") (data (i32.const 151581) "a") (data (i32.const 151584) "a") (data (i32.const 151587) "a") (data (i32.const 151590) "a") (data (i32.const 151593) "a") (data (i32.const 151596) "a") (data (i32.const 151599) "a") (data (i32.const 151602) "a") (data (i32.const 151605) "a") (data (i32.const 151608) "a") (data (i32.const 151611) "a") (data (i32.const 151614) "a") (data (i32.const 151617) "a") (data (i32.const 151620) "a") (data (i32.const 151623) "a") (data (i32.const 151626) "a") (data (i32.const 151629) "a") (data (i32.const 151632) "a") (data (i32.const 151635) "a") (data (i32.const 151638) "a") (data (i32.const 151641) "a") (data (i32.const 151644) "a") (data (i32.const 151647) "a") (data (i32.const 151650) "a") (data (i32.const 151653) "a") (data (i32.const 151656) "a") (data (i32.const 151659) "a") (data (i32.const 151662) "a") (data (i32.const 151665) "a") (data (i32.const 151668) "a") (data (i32.const 151671) "a") (data (i32.const 151674) "a") (data (i32.const 151677) "a") (data (i32.const 151680) "a") (data (i32.const 151683) "a") (data (i32.const 151686) "a") (data (i32.const 151689) "a") (data (i32.const 151692) "a") (data (i32.const 151695) "a") (data (i32.const 151698) "a") (data (i32.const 151701) "a") (data (i32.const 151704) "a") (data (i32.const 151707) "a") (data (i32.const 151710) "a") (data (i32.const 151713) "a") (data (i32.const 151716) "a") (data (i32.const 151719) "a") (data (i32.const 151722) "a") (data (i32.const 151725) "a") (data (i32.const 151728) "a") (data (i32.const 151731) "a") (data (i32.const 151734) "a") (data (i32.const 151737) "a") (data (i32.const 151740) "a") (data (i32.const 151743) "a") (data (i32.const 151746) "a") (data (i32.const 151749) "a") (data (i32.const 151752) "a") (data (i32.const 151755) "a") (data (i32.const 151758) "a") (data (i32.const 151761) "a") (data (i32.const 151764) "a") (data (i32.const 151767) "a") (data (i32.const 151770) "a") (data (i32.const 151773) "a") (data (i32.const 151776) "a") (data (i32.const 151779) "a") (data (i32.const 151782) "a") (data (i32.const 151785) "a") (data (i32.const 151788) "a") (data (i32.const 151791) "a") (data (i32.const 151794) "a") (data (i32.const 151797) "a") (data (i32.const 151800) "a") (data (i32.const 151803) "a") (data (i32.const 151806) "a") (data (i32.const 151809) "a") (data (i32.const 151812) "a") (data (i32.const 151815) "a") (data (i32.const 151818) "a") (data (i32.const 151821) "a") (data (i32.const 151824) "a") (data (i32.const 151827) "a") (data (i32.const 151830) "a") (data (i32.const 151833) "a") (data (i32.const 151836) "a") (data (i32.const 151839) "a") (data (i32.const 151842) "a") (data (i32.const 151845) "a") (data (i32.const 151848) "a") (data (i32.const 151851) "a") (data (i32.const 151854) "a") (data (i32.const 151857) "a") (data (i32.const 151860) "a") (data (i32.const 151863) "a") (data (i32.const 151866) "a") (data (i32.const 151869) "a") (data (i32.const 151872) "a") (data (i32.const 151875) "a") (data (i32.const 151878) "a") (data (i32.const 151881) "a") (data (i32.const 151884) "a") (data (i32.const 151887) "a") (data (i32.const 151890) "a") (data (i32.const 151893) "a") (data (i32.const 151896) "a") (data (i32.const 151899) "a") (data (i32.const 151902) "a") (data (i32.const 151905) "a") (data (i32.const 151908) "a") (data (i32.const 151911) "a") (data (i32.const 151914) "a") (data (i32.const 151917) "a") (data (i32.const 151920) "a") (data (i32.const 151923) "a") (data (i32.const 151926) "a") (data (i32.const 151929) "a") (data (i32.const 151932) "a") (data (i32.const 151935) "a") (data (i32.const 151938) "a") (data (i32.const 151941) "a") (data (i32.const 151944) "a") (data (i32.const 151947) "a") (data (i32.const 151950) "a") (data (i32.const 151953) "a") (data (i32.const 151956) "a") (data (i32.const 151959) "a") (data (i32.const 151962) "a") (data (i32.const 151965) "a") (data (i32.const 151968) "a") (data (i32.const 151971) "a") (data (i32.const 151974) "a") (data (i32.const 151977) "a") (data (i32.const 151980) "a") (data (i32.const 151983) "a") (data (i32.const 151986) "a") (data (i32.const 151989) "a") (data (i32.const 151992) "a") (data (i32.const 151995) "a") (data (i32.const 151998) "a") (data (i32.const 152001) "a") (data (i32.const 152004) "a") (data (i32.const 152007) "a") (data (i32.const 152010) "a") (data (i32.const 152013) "a") (data (i32.const 152016) "a") (data (i32.const 152019) "a") (data (i32.const 152022) "a") (data (i32.const 152025) "a") (data (i32.const 152028) "a") (data (i32.const 152031) "a") (data (i32.const 152034) "a") (data (i32.const 152037) "a") (data (i32.const 152040) "a") (data (i32.const 152043) "a") (data (i32.const 152046) "a") (data (i32.const 152049) "a") (data (i32.const 152052) "a") (data (i32.const 152055) "a") (data (i32.const 152058) "a") (data (i32.const 152061) "a") (data (i32.const 152064) "a") (data (i32.const 152067) "a") (data (i32.const 152070) "a") (data (i32.const 152073) "a") (data (i32.const 152076) "a") (data (i32.const 152079) "a") (data (i32.const 152082) "a") (data (i32.const 152085) "a") (data (i32.const 152088) "a") (data (i32.const 152091) "a") (data (i32.const 152094) "a") (data (i32.const 152097) "a") (data (i32.const 152100) "a") (data (i32.const 152103) "a") (data (i32.const 152106) "a") (data (i32.const 152109) "a") (data (i32.const 152112) "a") (data (i32.const 152115) "a") (data (i32.const 152118) "a") (data (i32.const 152121) "a") (data (i32.const 152124) "a") (data (i32.const 152127) "a") (data (i32.const 152130) "a") (data (i32.const 152133) "a") (data (i32.const 152136) "a") (data (i32.const 152139) "a") (data (i32.const 152142) "a") (data (i32.const 152145) "a") (data (i32.const 152148) "a") (data (i32.const 152151) "a") (data (i32.const 152154) "a") (data (i32.const 152157) "a") (data (i32.const 152160) "a") (data (i32.const 152163) "a") (data (i32.const 152166) "a") (data (i32.const 152169) "a") (data (i32.const 152172) "a") (data (i32.const 152175) "a") (data (i32.const 152178) "a") (data (i32.const 152181) "a") (data (i32.const 152184) "a") (data (i32.const 152187) "a") (data (i32.const 152190) "a") (data (i32.const 152193) "a") (data (i32.const 152196) "a") (data (i32.const 152199) "a") (data (i32.const 152202) "a") (data (i32.const 152205) "a") (data (i32.const 152208) "a") (data (i32.const 152211) "a") (data (i32.const 152214) "a") (data (i32.const 152217) "a") (data (i32.const 152220) "a") (data (i32.const 152223) "a") (data (i32.const 152226) "a") (data (i32.const 152229) "a") (data (i32.const 152232) "a") (data (i32.const 152235) "a") (data (i32.const 152238) "a") (data (i32.const 152241) "a") (data (i32.const 152244) "a") (data (i32.const 152247) "a") (data (i32.const 152250) "a") (data (i32.const 152253) "a") (data (i32.const 152256) "a") (data (i32.const 152259) "a") (data (i32.const 152262) "a") (data (i32.const 152265) "a") (data (i32.const 152268) "a") (data (i32.const 152271) "a") (data (i32.const 152274) "a") (data (i32.const 152277) "a") (data (i32.const 152280) "a") (data (i32.const 152283) "a") (data (i32.const 152286) "a") (data (i32.const 152289) "a") (data (i32.const 152292) "a") (data (i32.const 152295) "a") (data (i32.const 152298) "a") (data (i32.const 152301) "a") (data (i32.const 152304) "a") (data (i32.const 152307) "a") (data (i32.const 152310) "a") (data (i32.const 152313) "a") (data (i32.const 152316) "a") (data (i32.const 152319) "a") (data (i32.const 152322) "a") (data (i32.const 152325) "a") (data (i32.const 152328) "a") (data (i32.const 152331) "a") (data (i32.const 152334) "a") (data (i32.const 152337) "a") (data (i32.const 152340) "a") (data (i32.const 152343) "a") (data (i32.const 152346) "a") (data (i32.const 152349) "a") (data (i32.const 152352) "a") (data (i32.const 152355) "a") (data (i32.const 152358) "a") (data (i32.const 152361) "a") (data (i32.const 152364) "a") (data (i32.const 152367) "a") (data (i32.const 152370) "a") (data (i32.const 152373) "a") (data (i32.const 152376) "a") (data (i32.const 152379) "a") (data (i32.const 152382) "a") (data (i32.const 152385) "a") (data (i32.const 152388) "a") (data (i32.const 152391) "a") (data (i32.const 152394) "a") (data (i32.const 152397) "a") (data (i32.const 152400) "a") (data (i32.const 152403) "a") (data (i32.const 152406) "a") (data (i32.const 152409) "a") (data (i32.const 152412) "a") (data (i32.const 152415) "a") (data (i32.const 152418) "a") (data (i32.const 152421) "a") (data (i32.const 152424) "a") (data (i32.const 152427) "a") (data (i32.const 152430) "a") (data (i32.const 152433) "a") (data (i32.const 152436) "a") (data (i32.const 152439) "a") (data (i32.const 152442) "a") (data (i32.const 152445) "a") (data (i32.const 152448) "a") (data (i32.const 152451) "a") (data (i32.const 152454) "a") (data (i32.const 152457) "a") (data (i32.const 152460) "a") (data (i32.const 152463) "a") (data (i32.const 152466) "a") (data (i32.const 152469) "a") (data (i32.const 152472) "a") (data (i32.const 152475) "a") (data (i32.const 152478) "a") (data (i32.const 152481) "a") (data (i32.const 152484) "a") (data (i32.const 152487) "a") (data (i32.const 152490) "a") (data (i32.const 152493) "a") (data (i32.const 152496) "a") (data (i32.const 152499) "a") (data (i32.const 152502) "a") (data (i32.const 152505) "a") (data (i32.const 152508) "a") (data (i32.const 152511) "a") (data (i32.const 152514) "a") (data (i32.const 152517) "a") (data (i32.const 152520) "a") (data (i32.const 152523) "a") (data (i32.const 152526) "a") (data (i32.const 152529) "a") (data (i32.const 152532) "a") (data (i32.const 152535) "a") (data (i32.const 152538) "a") (data (i32.const 152541) "a") (data (i32.const 152544) "a") (data (i32.const 152547) "a") (data (i32.const 152550) "a") (data (i32.const 152553) "a") (data (i32.const 152556) "a") (data (i32.const 152559) "a") (data (i32.const 152562) "a") (data (i32.const 152565) "a") (data (i32.const 152568) "a") (data (i32.const 152571) "a") (data (i32.const 152574) "a") (data (i32.const 152577) "a") (data (i32.const 152580) "a") (data (i32.const 152583) "a") (data (i32.const 152586) "a") (data (i32.const 152589) "a") (data (i32.const 152592) "a") (data (i32.const 152595) "a") (data (i32.const 152598) "a") (data (i32.const 152601) "a") (data (i32.const 152604) "a") (data (i32.const 152607) "a") (data (i32.const 152610) "a") (data (i32.const 152613) "a") (data (i32.const 152616) "a") (data (i32.const 152619) "a") (data (i32.const 152622) "a") (data (i32.const 152625) "a") (data (i32.const 152628) "a") (data (i32.const 152631) "a") (data (i32.const 152634) "a") (data (i32.const 152637) "a") (data (i32.const 152640) "a") (data (i32.const 152643) "a") (data (i32.const 152646) "a") (data (i32.const 152649) "a") (data (i32.const 152652) "a") (data (i32.const 152655) "a") (data (i32.const 152658) "a") (data (i32.const 152661) "a") (data (i32.const 152664) "a") (data (i32.const 152667) "a") (data (i32.const 152670) "a") (data (i32.const 152673) "a") (data (i32.const 152676) "a") (data (i32.const 152679) "a") (data (i32.const 152682) "a") (data (i32.const 152685) "a") (data (i32.const 152688) "a") (data (i32.const 152691) "a") (data (i32.const 152694) "a") (data (i32.const 152697) "a") (data (i32.const 152700) "a") (data (i32.const 152703) "a") (data (i32.const 152706) "a") (data (i32.const 152709) "a") (data (i32.const 152712) "a") (data (i32.const 152715) "a") (data (i32.const 152718) "a") (data (i32.const 152721) "a") (data (i32.const 152724) "a") (data (i32.const 152727) "a") (data (i32.const 152730) "a") (data (i32.const 152733) "a") (data (i32.const 152736) "a") (data (i32.const 152739) "a") (data (i32.const 152742) "a") (data (i32.const 152745) "a") (data (i32.const 152748) "a") (data (i32.const 152751) "a") (data (i32.const 152754) "a") (data (i32.const 152757) "a") (data (i32.const 152760) "a") (data (i32.const 152763) "a") (data (i32.const 152766) "a") (data (i32.const 152769) "a") (data (i32.const 152772) "a") (data (i32.const 152775) "a") (data (i32.const 152778) "a") (data (i32.const 152781) "a") (data (i32.const 152784) "a") (data (i32.const 152787) "a") (data (i32.const 152790) "a") (data (i32.const 152793) "a") (data (i32.const 152796) "a") (data (i32.const 152799) "a") (data (i32.const 152802) "a") (data (i32.const 152805) "a") (data (i32.const 152808) "a") (data (i32.const 152811) "a") (data (i32.const 152814) "a") (data (i32.const 152817) "a") (data (i32.const 152820) "a") (data (i32.const 152823) "a") (data (i32.const 152826) "a") (data (i32.const 152829) "a") (data (i32.const 152832) "a") (data (i32.const 152835) "a") (data (i32.const 152838) "a") (data (i32.const 152841) "a") (data (i32.const 152844) "a") (data (i32.const 152847) "a") (data (i32.const 152850) "a") (data (i32.const 152853) "a") (data (i32.const 152856) "a") (data (i32.const 152859) "a") (data (i32.const 152862) "a") (data (i32.const 152865) "a") (data (i32.const 152868) "a") (data (i32.const 152871) "a") (data (i32.const 152874) "a") (data (i32.const 152877) "a") (data (i32.const 152880) "a") (data (i32.const 152883) "a") (data (i32.const 152886) "a") (data (i32.const 152889) "a") (data (i32.const 152892) "a") (data (i32.const 152895) "a") (data (i32.const 152898) "a") (data (i32.const 152901) "a") (data (i32.const 152904) "a") (data (i32.const 152907) "a") (data (i32.const 152910) "a") (data (i32.const 152913) "a") (data (i32.const 152916) "a") (data (i32.const 152919) "a") (data (i32.const 152922) "a") (data (i32.const 152925) "a") (data (i32.const 152928) "a") (data (i32.const 152931) "a") (data (i32.const 152934) "a") (data (i32.const 152937) "a") (data (i32.const 152940) "a") (data (i32.const 152943) "a") (data (i32.const 152946) "a") (data (i32.const 152949) "a") (data (i32.const 152952) "a") (data (i32.const 152955) "a") (data (i32.const 152958) "a") (data (i32.const 152961) "a") (data (i32.const 152964) "a") (data (i32.const 152967) "a") (data (i32.const 152970) "a") (data (i32.const 152973) "a") (data (i32.const 152976) "a") (data (i32.const 152979) "a") (data (i32.const 152982) "a") (data (i32.const 152985) "a") (data (i32.const 152988) "a") (data (i32.const 152991) "a") (data (i32.const 152994) "a") (data (i32.const 152997) "a") (data (i32.const 153000) "a") (data (i32.const 153003) "a") (data (i32.const 153006) "a") (data (i32.const 153009) "a") (data (i32.const 153012) "a") (data (i32.const 153015) "a") (data (i32.const 153018) "a") (data (i32.const 153021) "a") (data (i32.const 153024) "a") (data (i32.const 153027) "a") (data (i32.const 153030) "a") (data (i32.const 153033) "a") (data (i32.const 153036) "a") (data (i32.const 153039) "a") (data (i32.const 153042) "a") (data (i32.const 153045) "a") (data (i32.const 153048) "a") (data (i32.const 153051) "a") (data (i32.const 153054) "a") (data (i32.const 153057) "a") (data (i32.const 153060) "a") (data (i32.const 153063) "a") (data (i32.const 153066) "a") (data (i32.const 153069) "a") (data (i32.const 153072) "a") (data (i32.const 153075) "a") (data (i32.const 153078) "a") (data (i32.const 153081) "a") (data (i32.const 153084) "a") (data (i32.const 153087) "a") (data (i32.const 153090) "a") (data (i32.const 153093) "a") (data (i32.const 153096) "a") (data (i32.const 153099) "a") (data (i32.const 153102) "a") (data (i32.const 153105) "a") (data (i32.const 153108) "a") (data (i32.const 153111) "a") (data (i32.const 153114) "a") (data (i32.const 153117) "a") (data (i32.const 153120) "a") (data (i32.const 153123) "a") (data (i32.const 153126) "a") (data (i32.const 153129) "a") (data (i32.const 153132) "a") (data (i32.const 153135) "a") (data (i32.const 153138) "a") (data (i32.const 153141) "a") (data (i32.const 153144) "a") (data (i32.const 153147) "a") (data (i32.const 153150) "a") (data (i32.const 153153) "a") (data (i32.const 153156) "a") (data (i32.const 153159) "a") (data (i32.const 153162) "a") (data (i32.const 153165) "a") (data (i32.const 153168) "a") (data (i32.const 153171) "a") (data (i32.const 153174) "a") (data (i32.const 153177) "a") (data (i32.const 153180) "a") (data (i32.const 153183) "a") (data (i32.const 153186) "a") (data (i32.const 153189) "a") (data (i32.const 153192) "a") (data (i32.const 153195) "a") (data (i32.const 153198) "a") (data (i32.const 153201) "a") (data (i32.const 153204) "a") (data (i32.const 153207) "a") (data (i32.const 153210) "a") (data (i32.const 153213) "a") (data (i32.const 153216) "a") (data (i32.const 153219) "a") (data (i32.const 153222) "a") (data (i32.const 153225) "a") (data (i32.const 153228) "a") (data (i32.const 153231) "a") (data (i32.const 153234) "a") (data (i32.const 153237) "a") (data (i32.const 153240) "a") (data (i32.const 153243) "a") (data (i32.const 153246) "a") (data (i32.const 153249) "a") (data (i32.const 153252) "a") (data (i32.const 153255) "a") (data (i32.const 153258) "a") (data (i32.const 153261) "a") (data (i32.const 153264) "a") (data (i32.const 153267) "a") (data (i32.const 153270) "a") (data (i32.const 153273) "a") (data (i32.const 153276) "a") (data (i32.const 153279) "a") (data (i32.const 153282) "a") (data (i32.const 153285) "a") (data (i32.const 153288) "a") (data (i32.const 153291) "a") (data (i32.const 153294) "a") (data (i32.const 153297) "a") (data (i32.const 153300) "a") (data (i32.const 153303) "a") (data (i32.const 153306) "a") (data (i32.const 153309) "a") (data (i32.const 153312) "a") (data (i32.const 153315) "a") (data (i32.const 153318) "a") (data (i32.const 153321) "a") (data (i32.const 153324) "a") (data (i32.const 153327) "a") (data (i32.const 153330) "a") (data (i32.const 153333) "a") (data (i32.const 153336) "a") (data (i32.const 153339) "a") (data (i32.const 153342) "a") (data (i32.const 153345) "a") (data (i32.const 153348) "a") (data (i32.const 153351) "a") (data (i32.const 153354) "a") (data (i32.const 153357) "a") (data (i32.const 153360) "a") (data (i32.const 153363) "a") (data (i32.const 153366) "a") (data (i32.const 153369) "a") (data (i32.const 153372) "a") (data (i32.const 153375) "a") (data (i32.const 153378) "a") (data (i32.const 153381) "a") (data (i32.const 153384) "a") (data (i32.const 153387) "a") (data (i32.const 153390) "a") (data (i32.const 153393) "a") (data (i32.const 153396) "a") (data (i32.const 153399) "a") (data (i32.const 153402) "a") (data (i32.const 153405) "a") (data (i32.const 153408) "a") (data (i32.const 153411) "a") (data (i32.const 153414) "a") (data (i32.const 153417) "a") (data (i32.const 153420) "a") (data (i32.const 153423) "a") (data (i32.const 153426) "a") (data (i32.const 153429) "a") (data (i32.const 153432) "a") (data (i32.const 153435) "a") (data (i32.const 153438) "a") (data (i32.const 153441) "a") (data (i32.const 153444) "a") (data (i32.const 153447) "a") (data (i32.const 153450) "a") (data (i32.const 153453) "a") (data (i32.const 153456) "a") (data (i32.const 153459) "a") (data (i32.const 153462) "a") (data (i32.const 153465) "a") (data (i32.const 153468) "a") (data (i32.const 153471) "a") (data (i32.const 153474) "a") (data (i32.const 153477) "a") (data (i32.const 153480) "a") (data (i32.const 153483) "a") (data (i32.const 153486) "a") (data (i32.const 153489) "a") (data (i32.const 153492) "a") (data (i32.const 153495) "a") (data (i32.const 153498) "a") (data (i32.const 153501) "a") (data (i32.const 153504) "a") (data (i32.const 153507) "a") (data (i32.const 153510) "a") (data (i32.const 153513) "a") (data (i32.const 153516) "a") (data (i32.const 153519) "a") (data (i32.const 153522) "a") (data (i32.const 153525) "a") (data (i32.const 153528) "a") (data (i32.const 153531) "a") (data (i32.const 153534) "a") (data (i32.const 153537) "a") (data (i32.const 153540) "a") (data (i32.const 153543) "a") (data (i32.const 153546) "a") (data (i32.const 153549) "a") (data (i32.const 153552) "a") (data (i32.const 153555) "a") (data (i32.const 153558) "a") (data (i32.const 153561) "a") (data (i32.const 153564) "a") (data (i32.const 153567) "a") (data (i32.const 153570) "a") (data (i32.const 153573) "a") (data (i32.const 153576) "a") (data (i32.const 153579) "a") (data (i32.const 153582) "a") (data (i32.const 153585) "a") (data (i32.const 153588) "a") (data (i32.const 153591) "a") (data (i32.const 153594) "a") (data (i32.const 153597) "a") (data (i32.const 153600) "a") (data (i32.const 153603) "a") (data (i32.const 153606) "a") (data (i32.const 153609) "a") (data (i32.const 153612) "a") (data (i32.const 153615) "a") (data (i32.const 153618) "a") (data (i32.const 153621) "a") (data (i32.const 153624) "a") (data (i32.const 153627) "a") (data (i32.const 153630) "a") (data (i32.const 153633) "a") (data (i32.const 153636) "a") (data (i32.const 153639) "a") (data (i32.const 153642) "a") (data (i32.const 153645) "a") (data (i32.const 153648) "a") (data (i32.const 153651) "a") (data (i32.const 153654) "a") (data (i32.const 153657) "a") (data (i32.const 153660) "a") (data (i32.const 153663) "a") (data (i32.const 153666) "a") (data (i32.const 153669) "a") (data (i32.const 153672) "a") (data (i32.const 153675) "a") (data (i32.const 153678) "a") (data (i32.const 153681) "a") (data (i32.const 153684) "a") (data (i32.const 153687) "a") (data (i32.const 153690) "a") (data (i32.const 153693) "a") (data (i32.const 153696) "a") (data (i32.const 153699) "a") (data (i32.const 153702) "a") (data (i32.const 153705) "a") (data (i32.const 153708) "a") (data (i32.const 153711) "a") (data (i32.const 153714) "a") (data (i32.const 153717) "a") (data (i32.const 153720) "a") (data (i32.const 153723) "a") (data (i32.const 153726) "a") (data (i32.const 153729) "a") (data (i32.const 153732) "a") (data (i32.const 153735) "a") (data (i32.const 153738) "a") (data (i32.const 153741) "a") (data (i32.const 153744) "a") (data (i32.const 153747) "a") (data (i32.const 153750) "a") (data (i32.const 153753) "a") (data (i32.const 153756) "a") (data (i32.const 153759) "a") (data (i32.const 153762) "a") (data (i32.const 153765) "a") (data (i32.const 153768) "a") (data (i32.const 153771) "a") (data (i32.const 153774) "a") (data (i32.const 153777) "a") (data (i32.const 153780) "a") (data (i32.const 153783) "a") (data (i32.const 153786) "a") (data (i32.const 153789) "a") (data (i32.const 153792) "a") (data (i32.const 153795) "a") (data (i32.const 153798) "a") (data (i32.const 153801) "a") (data (i32.const 153804) "a") (data (i32.const 153807) "a") (data (i32.const 153810) "a") (data (i32.const 153813) "a") (data (i32.const 153816) "a") (data (i32.const 153819) "a") (data (i32.const 153822) "a") (data (i32.const 153825) "a") (data (i32.const 153828) "a") (data (i32.const 153831) "a") (data (i32.const 153834) "a") (data (i32.const 153837) "a") (data (i32.const 153840) "a") (data (i32.const 153843) "a") (data (i32.const 153846) "a") (data (i32.const 153849) "a") (data (i32.const 153852) "a") (data (i32.const 153855) "a") (data (i32.const 153858) "a") (data (i32.const 153861) "a") (data (i32.const 153864) "a") (data (i32.const 153867) "a") (data (i32.const 153870) "a") (data (i32.const 153873) "a") (data (i32.const 153876) "a") (data (i32.const 153879) "a") (data (i32.const 153882) "a") (data (i32.const 153885) "a") (data (i32.const 153888) "a") (data (i32.const 153891) "a") (data (i32.const 153894) "a") (data (i32.const 153897) "a") (data (i32.const 153900) "a") (data (i32.const 153903) "a") (data (i32.const 153906) "a") (data (i32.const 153909) "a") (data (i32.const 153912) "a") (data (i32.const 153915) "a") (data (i32.const 153918) "a") (data (i32.const 153921) "a") (data (i32.const 153924) "a") (data (i32.const 153927) "a") (data (i32.const 153930) "a") (data (i32.const 153933) "a") (data (i32.const 153936) "a") (data (i32.const 153939) "a") (data (i32.const 153942) "a") (data (i32.const 153945) "a") (data (i32.const 153948) "a") (data (i32.const 153951) "a") (data (i32.const 153954) "a") (data (i32.const 153957) "a") (data (i32.const 153960) "a") (data (i32.const 153963) "a") (data (i32.const 153966) "a") (data (i32.const 153969) "a") (data (i32.const 153972) "a") (data (i32.const 153975) "a") (data (i32.const 153978) "a") (data (i32.const 153981) "a") (data (i32.const 153984) "a") (data (i32.const 153987) "a") (data (i32.const 153990) "a") (data (i32.const 153993) "a") (data (i32.const 153996) "a") (data (i32.const 153999) "a") (data (i32.const 154002) "a") (data (i32.const 154005) "a") (data (i32.const 154008) "a") (data (i32.const 154011) "a") (data (i32.const 154014) "a") (data (i32.const 154017) "a") (data (i32.const 154020) "a") (data (i32.const 154023) "a") (data (i32.const 154026) "a") (data (i32.const 154029) "a") (data (i32.const 154032) "a") (data (i32.const 154035) "a") (data (i32.const 154038) "a") (data (i32.const 154041) "a") (data (i32.const 154044) "a") (data (i32.const 154047) "a") (data (i32.const 154050) "a") (data (i32.const 154053) "a") (data (i32.const 154056) "a") (data (i32.const 154059) "a") (data (i32.const 154062) "a") (data (i32.const 154065) "a") (data (i32.const 154068) "a") (data (i32.const 154071) "a") (data (i32.const 154074) "a") (data (i32.const 154077) "a") (data (i32.const 154080) "a") (data (i32.const 154083) "a") (data (i32.const 154086) "a") (data (i32.const 154089) "a") (data (i32.const 154092) "a") (data (i32.const 154095) "a") (data (i32.const 154098) "a") (data (i32.const 154101) "a") (data (i32.const 154104) "a") (data (i32.const 154107) "a") (data (i32.const 154110) "a") (data (i32.const 154113) "a") (data (i32.const 154116) "a") (data (i32.const 154119) "a") (data (i32.const 154122) "a") (data (i32.const 154125) "a") (data (i32.const 154128) "a") (data (i32.const 154131) "a") (data (i32.const 154134) "a") (data (i32.const 154137) "a") (data (i32.const 154140) "a") (data (i32.const 154143) "a") (data (i32.const 154146) "a") (data (i32.const 154149) "a") (data (i32.const 154152) "a") (data (i32.const 154155) "a") (data (i32.const 154158) "a") (data (i32.const 154161) "a") (data (i32.const 154164) "a") (data (i32.const 154167) "a") (data (i32.const 154170) "a") (data (i32.const 154173) "a") (data (i32.const 154176) "a") (data (i32.const 154179) "a") (data (i32.const 154182) "a") (data (i32.const 154185) "a") (data (i32.const 154188) "a") (data (i32.const 154191) "a") (data (i32.const 154194) "a") (data (i32.const 154197) "a") (data (i32.const 154200) "a") (data (i32.const 154203) "a") (data (i32.const 154206) "a") (data (i32.const 154209) "a") (data (i32.const 154212) "a") (data (i32.const 154215) "a") (data (i32.const 154218) "a") (data (i32.const 154221) "a") (data (i32.const 154224) "a") (data (i32.const 154227) "a") (data (i32.const 154230) "a") (data (i32.const 154233) "a") (data (i32.const 154236) "a") (data (i32.const 154239) "a") (data (i32.const 154242) "a") (data (i32.const 154245) "a") (data (i32.const 154248) "a") (data (i32.const 154251) "a") (data (i32.const 154254) "a") (data (i32.const 154257) "a") (data (i32.const 154260) "a") (data (i32.const 154263) "a") (data (i32.const 154266) "a") (data (i32.const 154269) "a") (data (i32.const 154272) "a") (data (i32.const 154275) "a") (data (i32.const 154278) "a") (data (i32.const 154281) "a") (data (i32.const 154284) "a") (data (i32.const 154287) "a") (data (i32.const 154290) "a") (data (i32.const 154293) "a") (data (i32.const 154296) "a") (data (i32.const 154299) "a") (data (i32.const 154302) "a") (data (i32.const 154305) "a") (data (i32.const 154308) "a") (data (i32.const 154311) "a") (data (i32.const 154314) "a") (data (i32.const 154317) "a") (data (i32.const 154320) "a") (data (i32.const 154323) "a") (data (i32.const 154326) "a") (data (i32.const 154329) "a") (data (i32.const 154332) "a") (data (i32.const 154335) "a") (data (i32.const 154338) "a") (data (i32.const 154341) "a") (data (i32.const 154344) "a") (data (i32.const 154347) "a") (data (i32.const 154350) "a") (data (i32.const 154353) "a") (data (i32.const 154356) "a") (data (i32.const 154359) "a") (data (i32.const 154362) "a") (data (i32.const 154365) "a") (data (i32.const 154368) "a") (data (i32.const 154371) "a") (data (i32.const 154374) "a") (data (i32.const 154377) "a") (data (i32.const 154380) "a") (data (i32.const 154383) "a") (data (i32.const 154386) "a") (data (i32.const 154389) "a") (data (i32.const 154392) "a") (data (i32.const 154395) "a") (data (i32.const 154398) "a") (data (i32.const 154401) "a") (data (i32.const 154404) "a") (data (i32.const 154407) "a") (data (i32.const 154410) "a") (data (i32.const 154413) "a") (data (i32.const 154416) "a") (data (i32.const 154419) "a") (data (i32.const 154422) "a") (data (i32.const 154425) "a") (data (i32.const 154428) "a") (data (i32.const 154431) "a") (data (i32.const 154434) "a") (data (i32.const 154437) "a") (data (i32.const 154440) "a") (data (i32.const 154443) "a") (data (i32.const 154446) "a") (data (i32.const 154449) "a") (data (i32.const 154452) "a") (data (i32.const 154455) "a") (data (i32.const 154458) "a") (data (i32.const 154461) "a") (data (i32.const 154464) "a") (data (i32.const 154467) "a") (data (i32.const 154470) "a") (data (i32.const 154473) "a") (data (i32.const 154476) "a") (data (i32.const 154479) "a") (data (i32.const 154482) "a") (data (i32.const 154485) "a") (data (i32.const 154488) "a") (data (i32.const 154491) "a") (data (i32.const 154494) "a") (data (i32.const 154497) "a") (data (i32.const 154500) "a") (data (i32.const 154503) "a") (data (i32.const 154506) "a") (data (i32.const 154509) "a") (data (i32.const 154512) "a") (data (i32.const 154515) "a") (data (i32.const 154518) "a") (data (i32.const 154521) "a") (data (i32.const 154524) "a") (data (i32.const 154527) "a") (data (i32.const 154530) "a") (data (i32.const 154533) "a") (data (i32.const 154536) "a") (data (i32.const 154539) "a") (data (i32.const 154542) "a") (data (i32.const 154545) "a") (data (i32.const 154548) "a") (data (i32.const 154551) "a") (data (i32.const 154554) "a") (data (i32.const 154557) "a") (data (i32.const 154560) "a") (data (i32.const 154563) "a") (data (i32.const 154566) "a") (data (i32.const 154569) "a") (data (i32.const 154572) "a") (data (i32.const 154575) "a") (data (i32.const 154578) "a") (data (i32.const 154581) "a") (data (i32.const 154584) "a") (data (i32.const 154587) "a") (data (i32.const 154590) "a") (data (i32.const 154593) "a") (data (i32.const 154596) "a") (data (i32.const 154599) "a") (data (i32.const 154602) "a") (data (i32.const 154605) "a") (data (i32.const 154608) "a") (data (i32.const 154611) "a") (data (i32.const 154614) "a") (data (i32.const 154617) "a") (data (i32.const 154620) "a") (data (i32.const 154623) "a") (data (i32.const 154626) "a") (data (i32.const 154629) "a") (data (i32.const 154632) "a") (data (i32.const 154635) "a") (data (i32.const 154638) "a") (data (i32.const 154641) "a") (data (i32.const 154644) "a") (data (i32.const 154647) "a") (data (i32.const 154650) "a") (data (i32.const 154653) "a") (data (i32.const 154656) "a") (data (i32.const 154659) "a") (data (i32.const 154662) "a") (data (i32.const 154665) "a") (data (i32.const 154668) "a") (data (i32.const 154671) "a") (data (i32.const 154674) "a") (data (i32.const 154677) "a") (data (i32.const 154680) "a") (data (i32.const 154683) "a") (data (i32.const 154686) "a") (data (i32.const 154689) "a") (data (i32.const 154692) "a") (data (i32.const 154695) "a") (data (i32.const 154698) "a") (data (i32.const 154701) "a") (data (i32.const 154704) "a") (data (i32.const 154707) "a") (data (i32.const 154710) "a") (data (i32.const 154713) "a") (data (i32.const 154716) "a") (data (i32.const 154719) "a") (data (i32.const 154722) "a") (data (i32.const 154725) "a") (data (i32.const 154728) "a") (data (i32.const 154731) "a") (data (i32.const 154734) "a") (data (i32.const 154737) "a") (data (i32.const 154740) "a") (data (i32.const 154743) "a") (data (i32.const 154746) "a") (data (i32.const 154749) "a") (data (i32.const 154752) "a") (data (i32.const 154755) "a") (data (i32.const 154758) "a") (data (i32.const 154761) "a") (data (i32.const 154764) "a") (data (i32.const 154767) "a") (data (i32.const 154770) "a") (data (i32.const 154773) "a") (data (i32.const 154776) "a") (data (i32.const 154779) "a") (data (i32.const 154782) "a") (data (i32.const 154785) "a") (data (i32.const 154788) "a") (data (i32.const 154791) "a") (data (i32.const 154794) "a") (data (i32.const 154797) "a") (data (i32.const 154800) "a") (data (i32.const 154803) "a") (data (i32.const 154806) "a") (data (i32.const 154809) "a") (data (i32.const 154812) "a") (data (i32.const 154815) "a") (data (i32.const 154818) "a") (data (i32.const 154821) "a") (data (i32.const 154824) "a") (data (i32.const 154827) "a") (data (i32.const 154830) "a") (data (i32.const 154833) "a") (data (i32.const 154836) "a") (data (i32.const 154839) "a") (data (i32.const 154842) "a") (data (i32.const 154845) "a") (data (i32.const 154848) "a") (data (i32.const 154851) "a") (data (i32.const 154854) "a") (data (i32.const 154857) "a") (data (i32.const 154860) "a") (data (i32.const 154863) "a") (data (i32.const 154866) "a") (data (i32.const 154869) "a") (data (i32.const 154872) "a") (data (i32.const 154875) "a") (data (i32.const 154878) "a") (data (i32.const 154881) "a") (data (i32.const 154884) "a") (data (i32.const 154887) "a") (data (i32.const 154890) "a") (data (i32.const 154893) "a") (data (i32.const 154896) "a") (data (i32.const 154899) "a") (data (i32.const 154902) "a") (data (i32.const 154905) "a") (data (i32.const 154908) "a") (data (i32.const 154911) "a") (data (i32.const 154914) "a") (data (i32.const 154917) "a") (data (i32.const 154920) "a") (data (i32.const 154923) "a") (data (i32.const 154926) "a") (data (i32.const 154929) "a") (data (i32.const 154932) "a") (data (i32.const 154935) "a") (data (i32.const 154938) "a") (data (i32.const 154941) "a") (data (i32.const 154944) "a") (data (i32.const 154947) "a") (data (i32.const 154950) "a") (data (i32.const 154953) "a") (data (i32.const 154956) "a") (data (i32.const 154959) "a") (data (i32.const 154962) "a") (data (i32.const 154965) "a") (data (i32.const 154968) "a") (data (i32.const 154971) "a") (data (i32.const 154974) "a") (data (i32.const 154977) "a") (data (i32.const 154980) "a") (data (i32.const 154983) "a") (data (i32.const 154986) "a") (data (i32.const 154989) "a") (data (i32.const 154992) "a") (data (i32.const 154995) "a") (data (i32.const 154998) "a") (data (i32.const 155001) "a") (data (i32.const 155004) "a") (data (i32.const 155007) "a") (data (i32.const 155010) "a") (data (i32.const 155013) "a") (data (i32.const 155016) "a") (data (i32.const 155019) "a") (data (i32.const 155022) "a") (data (i32.const 155025) "a") (data (i32.const 155028) "a") (data (i32.const 155031) "a") (data (i32.const 155034) "a") (data (i32.const 155037) "a") (data (i32.const 155040) "a") (data (i32.const 155043) "a") (data (i32.const 155046) "a") (data (i32.const 155049) "a") (data (i32.const 155052) "a") (data (i32.const 155055) "a") (data (i32.const 155058) "a") (data (i32.const 155061) "a") (data (i32.const 155064) "a") (data (i32.const 155067) "a") (data (i32.const 155070) "a") (data (i32.const 155073) "a") (data (i32.const 155076) "a") (data (i32.const 155079) "a") (data (i32.const 155082) "a") (data (i32.const 155085) "a") (data (i32.const 155088) "a") (data (i32.const 155091) "a") (data (i32.const 155094) "a") (data (i32.const 155097) "a") (data (i32.const 155100) "a") (data (i32.const 155103) "a") (data (i32.const 155106) "a") (data (i32.const 155109) "a") (data (i32.const 155112) "a") (data (i32.const 155115) "a") (data (i32.const 155118) "a") (data (i32.const 155121) "a") (data (i32.const 155124) "a") (data (i32.const 155127) "a") (data (i32.const 155130) "a") (data (i32.const 155133) "a") (data (i32.const 155136) "a") (data (i32.const 155139) "a") (data (i32.const 155142) "a") (data (i32.const 155145) "a") (data (i32.const 155148) "a") (data (i32.const 155151) "a") (data (i32.const 155154) "a") (data (i32.const 155157) "a") (data (i32.const 155160) "a") (data (i32.const 155163) "a") (data (i32.const 155166) "a") (data (i32.const 155169) "a") (data (i32.const 155172) "a") (data (i32.const 155175) "a") (data (i32.const 155178) "a") (data (i32.const 155181) "a") (data (i32.const 155184) "a") (data (i32.const 155187) "a") (data (i32.const 155190) "a") (data (i32.const 155193) "a") (data (i32.const 155196) "a") (data (i32.const 155199) "a") (data (i32.const 155202) "a") (data (i32.const 155205) "a") (data (i32.const 155208) "a") (data (i32.const 155211) "a") (data (i32.const 155214) "a") (data (i32.const 155217) "a") (data (i32.const 155220) "a") (data (i32.const 155223) "a") (data (i32.const 155226) "a") (data (i32.const 155229) "a") (data (i32.const 155232) "a") (data (i32.const 155235) "a") (data (i32.const 155238) "a") (data (i32.const 155241) "a") (data (i32.const 155244) "a") (data (i32.const 155247) "a") (data (i32.const 155250) "a") (data (i32.const 155253) "a") (data (i32.const 155256) "a") (data (i32.const 155259) "a") (data (i32.const 155262) "a") (data (i32.const 155265) "a") (data (i32.const 155268) "a") (data (i32.const 155271) "a") (data (i32.const 155274) "a") (data (i32.const 155277) "a") (data (i32.const 155280) "a") (data (i32.const 155283) "a") (data (i32.const 155286) "a") (data (i32.const 155289) "a") (data (i32.const 155292) "a") (data (i32.const 155295) "a") (data (i32.const 155298) "a") (data (i32.const 155301) "a") (data (i32.const 155304) "a") (data (i32.const 155307) "a") (data (i32.const 155310) "a") (data (i32.const 155313) "a") (data (i32.const 155316) "a") (data (i32.const 155319) "a") (data (i32.const 155322) "a") (data (i32.const 155325) "a") (data (i32.const 155328) "a") (data (i32.const 155331) "a") (data (i32.const 155334) "a") (data (i32.const 155337) "a") (data (i32.const 155340) "a") (data (i32.const 155343) "a") (data (i32.const 155346) "a") (data (i32.const 155349) "a") (data (i32.const 155352) "a") (data (i32.const 155355) "a") (data (i32.const 155358) "a") (data (i32.const 155361) "a") (data (i32.const 155364) "a") (data (i32.const 155367) "a") (data (i32.const 155370) "a") (data (i32.const 155373) "a") (data (i32.const 155376) "a") (data (i32.const 155379) "a") (data (i32.const 155382) "a") (data (i32.const 155385) "a") (data (i32.const 155388) "a") (data (i32.const 155391) "a") (data (i32.const 155394) "a") (data (i32.const 155397) "a") (data (i32.const 155400) "a") (data (i32.const 155403) "a") (data (i32.const 155406) "a") (data (i32.const 155409) "a") (data (i32.const 155412) "a") (data (i32.const 155415) "a") (data (i32.const 155418) "a") (data (i32.const 155421) "a") (data (i32.const 155424) "a") (data (i32.const 155427) "a") (data (i32.const 155430) "a") (data (i32.const 155433) "a") (data (i32.const 155436) "a") (data (i32.const 155439) "a") (data (i32.const 155442) "a") (data (i32.const 155445) "a") (data (i32.const 155448) "a") (data (i32.const 155451) "a") (data (i32.const 155454) "a") (data (i32.const 155457) "a") (data (i32.const 155460) "a") (data (i32.const 155463) "a") (data (i32.const 155466) "a") (data (i32.const 155469) "a") (data (i32.const 155472) "a") (data (i32.const 155475) "a") (data (i32.const 155478) "a") (data (i32.const 155481) "a") (data (i32.const 155484) "a") (data (i32.const 155487) "a") (data (i32.const 155490) "a") (data (i32.const 155493) "a") (data (i32.const 155496) "a") (data (i32.const 155499) "a") (data (i32.const 155502) "a") (data (i32.const 155505) "a") (data (i32.const 155508) "a") (data (i32.const 155511) "a") (data (i32.const 155514) "a") (data (i32.const 155517) "a") (data (i32.const 155520) "a") (data (i32.const 155523) "a") (data (i32.const 155526) "a") (data (i32.const 155529) "a") (data (i32.const 155532) "a") (data (i32.const 155535) "a") (data (i32.const 155538) "a") (data (i32.const 155541) "a") (data (i32.const 155544) "a") (data (i32.const 155547) "a") (data (i32.const 155550) "a") (data (i32.const 155553) "a") (data (i32.const 155556) "a") (data (i32.const 155559) "a") (data (i32.const 155562) "a") (data (i32.const 155565) "a") (data (i32.const 155568) "a") (data (i32.const 155571) "a") (data (i32.const 155574) "a") (data (i32.const 155577) "a") (data (i32.const 155580) "a") (data (i32.const 155583) "a") (data (i32.const 155586) "a") (data (i32.const 155589) "a") (data (i32.const 155592) "a") (data (i32.const 155595) "a") (data (i32.const 155598) "a") (data (i32.const 155601) "a") (data (i32.const 155604) "a") (data (i32.const 155607) "a") (data (i32.const 155610) "a") (data (i32.const 155613) "a") (data (i32.const 155616) "a") (data (i32.const 155619) "a") (data (i32.const 155622) "a") (data (i32.const 155625) "a") (data (i32.const 155628) "a") (data (i32.const 155631) "a") (data (i32.const 155634) "a") (data (i32.const 155637) "a") (data (i32.const 155640) "a") (data (i32.const 155643) "a") (data (i32.const 155646) "a") (data (i32.const 155649) "a") (data (i32.const 155652) "a") (data (i32.const 155655) "a") (data (i32.const 155658) "a") (data (i32.const 155661) "a") (data (i32.const 155664) "a") (data (i32.const 155667) "a") (data (i32.const 155670) "a") (data (i32.const 155673) "a") (data (i32.const 155676) "a") (data (i32.const 155679) "a") (data (i32.const 155682) "a") (data (i32.const 155685) "a") (data (i32.const 155688) "a") (data (i32.const 155691) "a") (data (i32.const 155694) "a") (data (i32.const 155697) "a") (data (i32.const 155700) "a") (data (i32.const 155703) "a") (data (i32.const 155706) "a") (data (i32.const 155709) "a") (data (i32.const 155712) "a") (data (i32.const 155715) "a") (data (i32.const 155718) "a") (data (i32.const 155721) "a") (data (i32.const 155724) "a") (data (i32.const 155727) "a") (data (i32.const 155730) "a") (data (i32.const 155733) "a") (data (i32.const 155736) "a") (data (i32.const 155739) "a") (data (i32.const 155742) "a") (data (i32.const 155745) "a") (data (i32.const 155748) "a") (data (i32.const 155751) "a") (data (i32.const 155754) "a") (data (i32.const 155757) "a") (data (i32.const 155760) "a") (data (i32.const 155763) "a") (data (i32.const 155766) "a") (data (i32.const 155769) "a") (data (i32.const 155772) "a") (data (i32.const 155775) "a") (data (i32.const 155778) "a") (data (i32.const 155781) "a") (data (i32.const 155784) "a") (data (i32.const 155787) "a") (data (i32.const 155790) "a") (data (i32.const 155793) "a") (data (i32.const 155796) "a") (data (i32.const 155799) "a") (data (i32.const 155802) "a") (data (i32.const 155805) "a") (data (i32.const 155808) "a") (data (i32.const 155811) "a") (data (i32.const 155814) "a") (data (i32.const 155817) "a") (data (i32.const 155820) "a") (data (i32.const 155823) "a") (data (i32.const 155826) "a") (data (i32.const 155829) "a") (data (i32.const 155832) "a") (data (i32.const 155835) "a") (data (i32.const 155838) "a") (data (i32.const 155841) "a") (data (i32.const 155844) "a") (data (i32.const 155847) "a") (data (i32.const 155850) "a") (data (i32.const 155853) "a") (data (i32.const 155856) "a") (data (i32.const 155859) "a") (data (i32.const 155862) "a") (data (i32.const 155865) "a") (data (i32.const 155868) "a") (data (i32.const 155871) "a") (data (i32.const 155874) "a") (data (i32.const 155877) "a") (data (i32.const 155880) "a") (data (i32.const 155883) "a") (data (i32.const 155886) "a") (data (i32.const 155889) "a") (data (i32.const 155892) "a") (data (i32.const 155895) "a") (data (i32.const 155898) "a") (data (i32.const 155901) "a") (data (i32.const 155904) "a") (data (i32.const 155907) "a") (data (i32.const 155910) "a") (data (i32.const 155913) "a") (data (i32.const 155916) "a") (data (i32.const 155919) "a") (data (i32.const 155922) "a") (data (i32.const 155925) "a") (data (i32.const 155928) "a") (data (i32.const 155931) "a") (data (i32.const 155934) "a") (data (i32.const 155937) "a") (data (i32.const 155940) "a") (data (i32.const 155943) "a") (data (i32.const 155946) "a") (data (i32.const 155949) "a") (data (i32.const 155952) "a") (data (i32.const 155955) "a") (data (i32.const 155958) "a") (data (i32.const 155961) "a") (data (i32.const 155964) "a") (data (i32.const 155967) "a") (data (i32.const 155970) "a") (data (i32.const 155973) "a") (data (i32.const 155976) "a") (data (i32.const 155979) "a") (data (i32.const 155982) "a") (data (i32.const 155985) "a") (data (i32.const 155988) "a") (data (i32.const 155991) "a") (data (i32.const 155994) "a") (data (i32.const 155997) "a") (data (i32.const 156000) "a") (data (i32.const 156003) "a") (data (i32.const 156006) "a") (data (i32.const 156009) "a") (data (i32.const 156012) "a") (data (i32.const 156015) "a") (data (i32.const 156018) "a") (data (i32.const 156021) "a") (data (i32.const 156024) "a") (data (i32.const 156027) "a") (data (i32.const 156030) "a") (data (i32.const 156033) "a") (data (i32.const 156036) "a") (data (i32.const 156039) "a") (data (i32.const 156042) "a") (data (i32.const 156045) "a") (data (i32.const 156048) "a") (data (i32.const 156051) "a") (data (i32.const 156054) "a") (data (i32.const 156057) "a") (data (i32.const 156060) "a") (data (i32.const 156063) "a") (data (i32.const 156066) "a") (data (i32.const 156069) "a") (data (i32.const 156072) "a") (data (i32.const 156075) "a") (data (i32.const 156078) "a") (data (i32.const 156081) "a") (data (i32.const 156084) "a") (data (i32.const 156087) "a") (data (i32.const 156090) "a") (data (i32.const 156093) "a") (data (i32.const 156096) "a") (data (i32.const 156099) "a") (data (i32.const 156102) "a") (data (i32.const 156105) "a") (data (i32.const 156108) "a") (data (i32.const 156111) "a") (data (i32.const 156114) "a") (data (i32.const 156117) "a") (data (i32.const 156120) "a") (data (i32.const 156123) "a") (data (i32.const 156126) "a") (data (i32.const 156129) "a") (data (i32.const 156132) "a") (data (i32.const 156135) "a") (data (i32.const 156138) "a") (data (i32.const 156141) "a") (data (i32.const 156144) "a") (data (i32.const 156147) "a") (data (i32.const 156150) "a") (data (i32.const 156153) "a") (data (i32.const 156156) "a") (data (i32.const 156159) "a") (data (i32.const 156162) "a") (data (i32.const 156165) "a") (data (i32.const 156168) "a") (data (i32.const 156171) "a") (data (i32.const 156174) "a") (data (i32.const 156177) "a") (data (i32.const 156180) "a") (data (i32.const 156183) "a") (data (i32.const 156186) "a") (data (i32.const 156189) "a") (data (i32.const 156192) "a") (data (i32.const 156195) "a") (data (i32.const 156198) "a") (data (i32.const 156201) "a") (data (i32.const 156204) "a") (data (i32.const 156207) "a") (data (i32.const 156210) "a") (data (i32.const 156213) "a") (data (i32.const 156216) "a") (data (i32.const 156219) "a") (data (i32.const 156222) "a") (data (i32.const 156225) "a") (data (i32.const 156228) "a") (data (i32.const 156231) "a") (data (i32.const 156234) "a") (data (i32.const 156237) "a") (data (i32.const 156240) "a") (data (i32.const 156243) "a") (data (i32.const 156246) "a") (data (i32.const 156249) "a") (data (i32.const 156252) "a") (data (i32.const 156255) "a") (data (i32.const 156258) "a") (data (i32.const 156261) "a") (data (i32.const 156264) "a") (data (i32.const 156267) "a") (data (i32.const 156270) "a") (data (i32.const 156273) "a") (data (i32.const 156276) "a") (data (i32.const 156279) "a") (data (i32.const 156282) "a") (data (i32.const 156285) "a") (data (i32.const 156288) "a") (data (i32.const 156291) "a") (data (i32.const 156294) "a") (data (i32.const 156297) "a") (data (i32.const 156300) "a") (data (i32.const 156303) "a") (data (i32.const 156306) "a") (data (i32.const 156309) "a") (data (i32.const 156312) "a") (data (i32.const 156315) "a") (data (i32.const 156318) "a") (data (i32.const 156321) "a") (data (i32.const 156324) "a") (data (i32.const 156327) "a") (data (i32.const 156330) "a") (data (i32.const 156333) "a") (data (i32.const 156336) "a") (data (i32.const 156339) "a") (data (i32.const 156342) "a") (data (i32.const 156345) "a") (data (i32.const 156348) "a") (data (i32.const 156351) "a") (data (i32.const 156354) "a") (data (i32.const 156357) "a") (data (i32.const 156360) "a") (data (i32.const 156363) "a") (data (i32.const 156366) "a") (data (i32.const 156369) "a") (data (i32.const 156372) "a") (data (i32.const 156375) "a") (data (i32.const 156378) "a") (data (i32.const 156381) "a") (data (i32.const 156384) "a") (data (i32.const 156387) "a") (data (i32.const 156390) "a") (data (i32.const 156393) "a") (data (i32.const 156396) "a") (data (i32.const 156399) "a") (data (i32.const 156402) "a") (data (i32.const 156405) "a") (data (i32.const 156408) "a") (data (i32.const 156411) "a") (data (i32.const 156414) "a") (data (i32.const 156417) "a") (data (i32.const 156420) "a") (data (i32.const 156423) "a") (data (i32.const 156426) "a") (data (i32.const 156429) "a") (data (i32.const 156432) "a") (data (i32.const 156435) "a") (data (i32.const 156438) "a") (data (i32.const 156441) "a") (data (i32.const 156444) "a") (data (i32.const 156447) "a") (data (i32.const 156450) "a") (data (i32.const 156453) "a") (data (i32.const 156456) "a") (data (i32.const 156459) "a") (data (i32.const 156462) "a") (data (i32.const 156465) "a") (data (i32.const 156468) "a") (data (i32.const 156471) "a") (data (i32.const 156474) "a") (data (i32.const 156477) "a") (data (i32.const 156480) "a") (data (i32.const 156483) "a") (data (i32.const 156486) "a") (data (i32.const 156489) "a") (data (i32.const 156492) "a") (data (i32.const 156495) "a") (data (i32.const 156498) "a") (data (i32.const 156501) "a") (data (i32.const 156504) "a") (data (i32.const 156507) "a") (data (i32.const 156510) "a") (data (i32.const 156513) "a") (data (i32.const 156516) "a") (data (i32.const 156519) "a") (data (i32.const 156522) "a") (data (i32.const 156525) "a") (data (i32.const 156528) "a") (data (i32.const 156531) "a") (data (i32.const 156534) "a") (data (i32.const 156537) "a") (data (i32.const 156540) "a") (data (i32.const 156543) "a") (data (i32.const 156546) "a") (data (i32.const 156549) "a") (data (i32.const 156552) "a") (data (i32.const 156555) "a") (data (i32.const 156558) "a") (data (i32.const 156561) "a") (data (i32.const 156564) "a") (data (i32.const 156567) "a") (data (i32.const 156570) "a") (data (i32.const 156573) "a") (data (i32.const 156576) "a") (data (i32.const 156579) "a") (data (i32.const 156582) "a") (data (i32.const 156585) "a") (data (i32.const 156588) "a") (data (i32.const 156591) "a") (data (i32.const 156594) "a") (data (i32.const 156597) "a") (data (i32.const 156600) "a") (data (i32.const 156603) "a") (data (i32.const 156606) "a") (data (i32.const 156609) "a") (data (i32.const 156612) "a") (data (i32.const 156615) "a") (data (i32.const 156618) "a") (data (i32.const 156621) "a") (data (i32.const 156624) "a") (data (i32.const 156627) "a") (data (i32.const 156630) "a") (data (i32.const 156633) "a") (data (i32.const 156636) "a") (data (i32.const 156639) "a") (data (i32.const 156642) "a") (data (i32.const 156645) "a") (data (i32.const 156648) "a") (data (i32.const 156651) "a") (data (i32.const 156654) "a") (data (i32.const 156657) "a") (data (i32.const 156660) "a") (data (i32.const 156663) "a") (data (i32.const 156666) "a") (data (i32.const 156669) "a") (data (i32.const 156672) "a") (data (i32.const 156675) "a") (data (i32.const 156678) "a") (data (i32.const 156681) "a") (data (i32.const 156684) "a") (data (i32.const 156687) "a") (data (i32.const 156690) "a") (data (i32.const 156693) "a") (data (i32.const 156696) "a") (data (i32.const 156699) "a") (data (i32.const 156702) "a") (data (i32.const 156705) "a") (data (i32.const 156708) "a") (data (i32.const 156711) "a") (data (i32.const 156714) "a") (data (i32.const 156717) "a") (data (i32.const 156720) "a") (data (i32.const 156723) "a") (data (i32.const 156726) "a") (data (i32.const 156729) "a") (data (i32.const 156732) "a") (data (i32.const 156735) "a") (data (i32.const 156738) "a") (data (i32.const 156741) "a") (data (i32.const 156744) "a") (data (i32.const 156747) "a") (data (i32.const 156750) "a") (data (i32.const 156753) "a") (data (i32.const 156756) "a") (data (i32.const 156759) "a") (data (i32.const 156762) "a") (data (i32.const 156765) "a") (data (i32.const 156768) "a") (data (i32.const 156771) "a") (data (i32.const 156774) "a") (data (i32.const 156777) "a") (data (i32.const 156780) "a") (data (i32.const 156783) "a") (data (i32.const 156786) "a") (data (i32.const 156789) "a") (data (i32.const 156792) "a") (data (i32.const 156795) "a") (data (i32.const 156798) "a") (data (i32.const 156801) "a") (data (i32.const 156804) "a") (data (i32.const 156807) "a") (data (i32.const 156810) "a") (data (i32.const 156813) "a") (data (i32.const 156816) "a") (data (i32.const 156819) "a") (data (i32.const 156822) "a") (data (i32.const 156825) "a") (data (i32.const 156828) "a") (data (i32.const 156831) "a") (data (i32.const 156834) "a") (data (i32.const 156837) "a") (data (i32.const 156840) "a") (data (i32.const 156843) "a") (data (i32.const 156846) "a") (data (i32.const 156849) "a") (data (i32.const 156852) "a") (data (i32.const 156855) "a") (data (i32.const 156858) "a") (data (i32.const 156861) "a") (data (i32.const 156864) "a") (data (i32.const 156867) "a") (data (i32.const 156870) "a") (data (i32.const 156873) "a") (data (i32.const 156876) "a") (data (i32.const 156879) "a") (data (i32.const 156882) "a") (data (i32.const 156885) "a") (data (i32.const 156888) "a") (data (i32.const 156891) "a") (data (i32.const 156894) "a") (data (i32.const 156897) "a") (data (i32.const 156900) "a") (data (i32.const 156903) "a") (data (i32.const 156906) "a") (data (i32.const 156909) "a") (data (i32.const 156912) "a") (data (i32.const 156915) "a") (data (i32.const 156918) "a") (data (i32.const 156921) "a") (data (i32.const 156924) "a") (data (i32.const 156927) "a") (data (i32.const 156930) "a") (data (i32.const 156933) "a") (data (i32.const 156936) "a") (data (i32.const 156939) "a") (data (i32.const 156942) "a") (data (i32.const 156945) "a") (data (i32.const 156948) "a") (data (i32.const 156951) "a") (data (i32.const 156954) "a") (data (i32.const 156957) "a") (data (i32.const 156960) "a") (data (i32.const 156963) "a") (data (i32.const 156966) "a") (data (i32.const 156969) "a") (data (i32.const 156972) "a") (data (i32.const 156975) "a") (data (i32.const 156978) "a") (data (i32.const 156981) "a") (data (i32.const 156984) "a") (data (i32.const 156987) "a") (data (i32.const 156990) "a") (data (i32.const 156993) "a") (data (i32.const 156996) "a") (data (i32.const 156999) "a") (data (i32.const 157002) "a") (data (i32.const 157005) "a") (data (i32.const 157008) "a") (data (i32.const 157011) "a") (data (i32.const 157014) "a") (data (i32.const 157017) "a") (data (i32.const 157020) "a") (data (i32.const 157023) "a") (data (i32.const 157026) "a") (data (i32.const 157029) "a") (data (i32.const 157032) "a") (data (i32.const 157035) "a") (data (i32.const 157038) "a") (data (i32.const 157041) "a") (data (i32.const 157044) "a") (data (i32.const 157047) "a") (data (i32.const 157050) "a") (data (i32.const 157053) "a") (data (i32.const 157056) "a") (data (i32.const 157059) "a") (data (i32.const 157062) "a") (data (i32.const 157065) "a") (data (i32.const 157068) "a") (data (i32.const 157071) "a") (data (i32.const 157074) "a") (data (i32.const 157077) "a") (data (i32.const 157080) "a") (data (i32.const 157083) "a") (data (i32.const 157086) "a") (data (i32.const 157089) "a") (data (i32.const 157092) "a") (data (i32.const 157095) "a") (data (i32.const 157098) "a") (data (i32.const 157101) "a") (data (i32.const 157104) "a") (data (i32.const 157107) "a") (data (i32.const 157110) "a") (data (i32.const 157113) "a") (data (i32.const 157116) "a") (data (i32.const 157119) "a") (data (i32.const 157122) "a") (data (i32.const 157125) "a") (data (i32.const 157128) "a") (data (i32.const 157131) "a") (data (i32.const 157134) "a") (data (i32.const 157137) "a") (data (i32.const 157140) "a") (data (i32.const 157143) "a") (data (i32.const 157146) "a") (data (i32.const 157149) "a") (data (i32.const 157152) "a") (data (i32.const 157155) "a") (data (i32.const 157158) "a") (data (i32.const 157161) "a") (data (i32.const 157164) "a") (data (i32.const 157167) "a") (data (i32.const 157170) "a") (data (i32.const 157173) "a") (data (i32.const 157176) "a") (data (i32.const 157179) "a") (data (i32.const 157182) "a") (data (i32.const 157185) "a") (data (i32.const 157188) "a") (data (i32.const 157191) "a") (data (i32.const 157194) "a") (data (i32.const 157197) "a") (data (i32.const 157200) "a") (data (i32.const 157203) "a") (data (i32.const 157206) "a") (data (i32.const 157209) "a") (data (i32.const 157212) "a") (data (i32.const 157215) "a") (data (i32.const 157218) "a") (data (i32.const 157221) "a") (data (i32.const 157224) "a") (data (i32.const 157227) "a") (data (i32.const 157230) "a") (data (i32.const 157233) "a") (data (i32.const 157236) "a") (data (i32.const 157239) "a") (data (i32.const 157242) "a") (data (i32.const 157245) "a") (data (i32.const 157248) "a") (data (i32.const 157251) "a") (data (i32.const 157254) "a") (data (i32.const 157257) "a") (data (i32.const 157260) "a") (data (i32.const 157263) "a") (data (i32.const 157266) "a") (data (i32.const 157269) "a") (data (i32.const 157272) "a") (data (i32.const 157275) "a") (data (i32.const 157278) "a") (data (i32.const 157281) "a") (data (i32.const 157284) "a") (data (i32.const 157287) "a") (data (i32.const 157290) "a") (data (i32.const 157293) "a") (data (i32.const 157296) "a") (data (i32.const 157299) "a") (data (i32.const 157302) "a") (data (i32.const 157305) "a") (data (i32.const 157308) "a") (data (i32.const 157311) "a") (data (i32.const 157314) "a") (data (i32.const 157317) "a") (data (i32.const 157320) "a") (data (i32.const 157323) "a") (data (i32.const 157326) "a") (data (i32.const 157329) "a") (data (i32.const 157332) "a") (data (i32.const 157335) "a") (data (i32.const 157338) "a") (data (i32.const 157341) "a") (data (i32.const 157344) "a") (data (i32.const 157347) "a") (data (i32.const 157350) "a") (data (i32.const 157353) "a") (data (i32.const 157356) "a") (data (i32.const 157359) "a") (data (i32.const 157362) "a") (data (i32.const 157365) "a") (data (i32.const 157368) "a") (data (i32.const 157371) "a") (data (i32.const 157374) "a") (data (i32.const 157377) "a") (data (i32.const 157380) "a") (data (i32.const 157383) "a") (data (i32.const 157386) "a") (data (i32.const 157389) "a") (data (i32.const 157392) "a") (data (i32.const 157395) "a") (data (i32.const 157398) "a") (data (i32.const 157401) "a") (data (i32.const 157404) "a") (data (i32.const 157407) "a") (data (i32.const 157410) "a") (data (i32.const 157413) "a") (data (i32.const 157416) "a") (data (i32.const 157419) "a") (data (i32.const 157422) "a") (data (i32.const 157425) "a") (data (i32.const 157428) "a") (data (i32.const 157431) "a") (data (i32.const 157434) "a") (data (i32.const 157437) "a") (data (i32.const 157440) "a") (data (i32.const 157443) "a") (data (i32.const 157446) "a") (data (i32.const 157449) "a") (data (i32.const 157452) "a") (data (i32.const 157455) "a") (data (i32.const 157458) "a") (data (i32.const 157461) "a") (data (i32.const 157464) "a") (data (i32.const 157467) "a") (data (i32.const 157470) "a") (data (i32.const 157473) "a") (data (i32.const 157476) "a") (data (i32.const 157479) "a") (data (i32.const 157482) "a") (data (i32.const 157485) "a") (data (i32.const 157488) "a") (data (i32.const 157491) "a") (data (i32.const 157494) "a") (data (i32.const 157497) "a") (data (i32.const 157500) "a") (data (i32.const 157503) "a") (data (i32.const 157506) "a") (data (i32.const 157509) "a") (data (i32.const 157512) "a") (data (i32.const 157515) "a") (data (i32.const 157518) "a") (data (i32.const 157521) "a") (data (i32.const 157524) "a") (data (i32.const 157527) "a") (data (i32.const 157530) "a") (data (i32.const 157533) "a") (data (i32.const 157536) "a") (data (i32.const 157539) "a") (data (i32.const 157542) "a") (data (i32.const 157545) "a") (data (i32.const 157548) "a") (data (i32.const 157551) "a") (data (i32.const 157554) "a") (data (i32.const 157557) "a") (data (i32.const 157560) "a") (data (i32.const 157563) "a") (data (i32.const 157566) "a") (data (i32.const 157569) "a") (data (i32.const 157572) "a") (data (i32.const 157575) "a") (data (i32.const 157578) "a") (data (i32.const 157581) "a") (data (i32.const 157584) "a") (data (i32.const 157587) "a") (data (i32.const 157590) "a") (data (i32.const 157593) "a") (data (i32.const 157596) "a") (data (i32.const 157599) "a") (data (i32.const 157602) "a") (data (i32.const 157605) "a") (data (i32.const 157608) "a") (data (i32.const 157611) "a") (data (i32.const 157614) "a") (data (i32.const 157617) "a") (data (i32.const 157620) "a") (data (i32.const 157623) "a") (data (i32.const 157626) "a") (data (i32.const 157629) "a") (data (i32.const 157632) "a") (data (i32.const 157635) "a") (data (i32.const 157638) "a") (data (i32.const 157641) "a") (data (i32.const 157644) "a") (data (i32.const 157647) "a") (data (i32.const 157650) "a") (data (i32.const 157653) "a") (data (i32.const 157656) "a") (data (i32.const 157659) "a") (data (i32.const 157662) "a") (data (i32.const 157665) "a") (data (i32.const 157668) "a") (data (i32.const 157671) "a") (data (i32.const 157674) "a") (data (i32.const 157677) "a") (data (i32.const 157680) "a") (data (i32.const 157683) "a") (data (i32.const 157686) "a") (data (i32.const 157689) "a") (data (i32.const 157692) "a") (data (i32.const 157695) "a") (data (i32.const 157698) "a") (data (i32.const 157701) "a") (data (i32.const 157704) "a") (data (i32.const 157707) "a") (data (i32.const 157710) "a") (data (i32.const 157713) "a") (data (i32.const 157716) "a") (data (i32.const 157719) "a") (data (i32.const 157722) "a") (data (i32.const 157725) "a") (data (i32.const 157728) "a") (data (i32.const 157731) "a") (data (i32.const 157734) "a") (data (i32.const 157737) "a") (data (i32.const 157740) "a") (data (i32.const 157743) "a") (data (i32.const 157746) "a") (data (i32.const 157749) "a") (data (i32.const 157752) "a") (data (i32.const 157755) "a") (data (i32.const 157758) "a") (data (i32.const 157761) "a") (data (i32.const 157764) "a") (data (i32.const 157767) "a") (data (i32.const 157770) "a") (data (i32.const 157773) "a") (data (i32.const 157776) "a") (data (i32.const 157779) "a") (data (i32.const 157782) "a") (data (i32.const 157785) "a") (data (i32.const 157788) "a") (data (i32.const 157791) "a") (data (i32.const 157794) "a") (data (i32.const 157797) "a") (data (i32.const 157800) "a") (data (i32.const 157803) "a") (data (i32.const 157806) "a") (data (i32.const 157809) "a") (data (i32.const 157812) "a") (data (i32.const 157815) "a") (data (i32.const 157818) "a") (data (i32.const 157821) "a") (data (i32.const 157824) "a") (data (i32.const 157827) "a") (data (i32.const 157830) "a") (data (i32.const 157833) "a") (data (i32.const 157836) "a") (data (i32.const 157839) "a") (data (i32.const 157842) "a") (data (i32.const 157845) "a") (data (i32.const 157848) "a") (data (i32.const 157851) "a") (data (i32.const 157854) "a") (data (i32.const 157857) "a") (data (i32.const 157860) "a") (data (i32.const 157863) "a") (data (i32.const 157866) "a") (data (i32.const 157869) "a") (data (i32.const 157872) "a") (data (i32.const 157875) "a") (data (i32.const 157878) "a") (data (i32.const 157881) "a") (data (i32.const 157884) "a") (data (i32.const 157887) "a") (data (i32.const 157890) "a") (data (i32.const 157893) "a") (data (i32.const 157896) "a") (data (i32.const 157899) "a") (data (i32.const 157902) "a") (data (i32.const 157905) "a") (data (i32.const 157908) "a") (data (i32.const 157911) "a") (data (i32.const 157914) "a") (data (i32.const 157917) "a") (data (i32.const 157920) "a") (data (i32.const 157923) "a") (data (i32.const 157926) "a") (data (i32.const 157929) "a") (data (i32.const 157932) "a") (data (i32.const 157935) "a") (data (i32.const 157938) "a") (data (i32.const 157941) "a") (data (i32.const 157944) "a") (data (i32.const 157947) "a") (data (i32.const 157950) "a") (data (i32.const 157953) "a") (data (i32.const 157956) "a") (data (i32.const 157959) "a") (data (i32.const 157962) "a") (data (i32.const 157965) "a") (data (i32.const 157968) "a") (data (i32.const 157971) "a") (data (i32.const 157974) "a") (data (i32.const 157977) "a") (data (i32.const 157980) "a") (data (i32.const 157983) "a") (data (i32.const 157986) "a") (data (i32.const 157989) "a") (data (i32.const 157992) "a") (data (i32.const 157995) "a") (data (i32.const 157998) "a") (data (i32.const 158001) "a") (data (i32.const 158004) "a") (data (i32.const 158007) "a") (data (i32.const 158010) "a") (data (i32.const 158013) "a") (data (i32.const 158016) "a") (data (i32.const 158019) "a") (data (i32.const 158022) "a") (data (i32.const 158025) "a") (data (i32.const 158028) "a") (data (i32.const 158031) "a") (data (i32.const 158034) "a") (data (i32.const 158037) "a") (data (i32.const 158040) "a") (data (i32.const 158043) "a") (data (i32.const 158046) "a") (data (i32.const 158049) "a") (data (i32.const 158052) "a") (data (i32.const 158055) "a") (data (i32.const 158058) "a") (data (i32.const 158061) "a") (data (i32.const 158064) "a") (data (i32.const 158067) "a") (data (i32.const 158070) "a") (data (i32.const 158073) "a") (data (i32.const 158076) "a") (data (i32.const 158079) "a") (data (i32.const 158082) "a") (data (i32.const 158085) "a") (data (i32.const 158088) "a") (data (i32.const 158091) "a") (data (i32.const 158094) "a") (data (i32.const 158097) "a") (data (i32.const 158100) "a") (data (i32.const 158103) "a") (data (i32.const 158106) "a") (data (i32.const 158109) "a") (data (i32.const 158112) "a") (data (i32.const 158115) "a") (data (i32.const 158118) "a") (data (i32.const 158121) "a") (data (i32.const 158124) "a") (data (i32.const 158127) "a") (data (i32.const 158130) "a") (data (i32.const 158133) "a") (data (i32.const 158136) "a") (data (i32.const 158139) "a") (data (i32.const 158142) "a") (data (i32.const 158145) "a") (data (i32.const 158148) "a") (data (i32.const 158151) "a") (data (i32.const 158154) "a") (data (i32.const 158157) "a") (data (i32.const 158160) "a") (data (i32.const 158163) "a") (data (i32.const 158166) "a") (data (i32.const 158169) "a") (data (i32.const 158172) "a") (data (i32.const 158175) "a") (data (i32.const 158178) "a") (data (i32.const 158181) "a") (data (i32.const 158184) "a") (data (i32.const 158187) "a") (data (i32.const 158190) "a") (data (i32.const 158193) "a") (data (i32.const 158196) "a") (data (i32.const 158199) "a") (data (i32.const 158202) "a") (data (i32.const 158205) "a") (data (i32.const 158208) "a") (data (i32.const 158211) "a") (data (i32.const 158214) "a") (data (i32.const 158217) "a") (data (i32.const 158220) "a") (data (i32.const 158223) "a") (data (i32.const 158226) "a") (data (i32.const 158229) "a") (data (i32.const 158232) "a") (data (i32.const 158235) "a") (data (i32.const 158238) "a") (data (i32.const 158241) "a") (data (i32.const 158244) "a") (data (i32.const 158247) "a") (data (i32.const 158250) "a") (data (i32.const 158253) "a") (data (i32.const 158256) "a") (data (i32.const 158259) "a") (data (i32.const 158262) "a") (data (i32.const 158265) "a") (data (i32.const 158268) "a") (data (i32.const 158271) "a") (data (i32.const 158274) "a") (data (i32.const 158277) "a") (data (i32.const 158280) "a") (data (i32.const 158283) "a") (data (i32.const 158286) "a") (data (i32.const 158289) "a") (data (i32.const 158292) "a") (data (i32.const 158295) "a") (data (i32.const 158298) "a") (data (i32.const 158301) "a") (data (i32.const 158304) "a") (data (i32.const 158307) "a") (data (i32.const 158310) "a") (data (i32.const 158313) "a") (data (i32.const 158316) "a") (data (i32.const 158319) "a") (data (i32.const 158322) "a") (data (i32.const 158325) "a") (data (i32.const 158328) "a") (data (i32.const 158331) "a") (data (i32.const 158334) "a") (data (i32.const 158337) "a") (data (i32.const 158340) "a") (data (i32.const 158343) "a") (data (i32.const 158346) "a") (data (i32.const 158349) "a") (data (i32.const 158352) "a") (data (i32.const 158355) "a") (data (i32.const 158358) "a") (data (i32.const 158361) "a") (data (i32.const 158364) "a") (data (i32.const 158367) "a") (data (i32.const 158370) "a") (data (i32.const 158373) "a") (data (i32.const 158376) "a") (data (i32.const 158379) "a") (data (i32.const 158382) "a") (data (i32.const 158385) "a") (data (i32.const 158388) "a") (data (i32.const 158391) "a") (data (i32.const 158394) "a") (data (i32.const 158397) "a") (data (i32.const 158400) "a") (data (i32.const 158403) "a") (data (i32.const 158406) "a") (data (i32.const 158409) "a") (data (i32.const 158412) "a") (data (i32.const 158415) "a") (data (i32.const 158418) "a") (data (i32.const 158421) "a") (data (i32.const 158424) "a") (data (i32.const 158427) "a") (data (i32.const 158430) "a") (data (i32.const 158433) "a") (data (i32.const 158436) "a") (data (i32.const 158439) "a") (data (i32.const 158442) "a") (data (i32.const 158445) "a") (data (i32.const 158448) "a") (data (i32.const 158451) "a") (data (i32.const 158454) "a") (data (i32.const 158457) "a") (data (i32.const 158460) "a") (data (i32.const 158463) "a") (data (i32.const 158466) "a") (data (i32.const 158469) "a") (data (i32.const 158472) "a") (data (i32.const 158475) "a") (data (i32.const 158478) "a") (data (i32.const 158481) "a") (data (i32.const 158484) "a") (data (i32.const 158487) "a") (data (i32.const 158490) "a") (data (i32.const 158493) "a") (data (i32.const 158496) "a") (data (i32.const 158499) "a") (data (i32.const 158502) "a") (data (i32.const 158505) "a") (data (i32.const 158508) "a") (data (i32.const 158511) "a") (data (i32.const 158514) "a") (data (i32.const 158517) "a") (data (i32.const 158520) "a") (data (i32.const 158523) "a") (data (i32.const 158526) "a") (data (i32.const 158529) "a") (data (i32.const 158532) "a") (data (i32.const 158535) "a") (data (i32.const 158538) "a") (data (i32.const 158541) "a") (data (i32.const 158544) "a") (data (i32.const 158547) "a") (data (i32.const 158550) "a") (data (i32.const 158553) "a") (data (i32.const 158556) "a") (data (i32.const 158559) "a") (data (i32.const 158562) "a") (data (i32.const 158565) "a") (data (i32.const 158568) "a") (data (i32.const 158571) "a") (data (i32.const 158574) "a") (data (i32.const 158577) "a") (data (i32.const 158580) "a") (data (i32.const 158583) "a") (data (i32.const 158586) "a") (data (i32.const 158589) "a") (data (i32.const 158592) "a") (data (i32.const 158595) "a") (data (i32.const 158598) "a") (data (i32.const 158601) "a") (data (i32.const 158604) "a") (data (i32.const 158607) "a") (data (i32.const 158610) "a") (data (i32.const 158613) "a") (data (i32.const 158616) "a") (data (i32.const 158619) "a") (data (i32.const 158622) "a") (data (i32.const 158625) "a") (data (i32.const 158628) "a") (data (i32.const 158631) "a") (data (i32.const 158634) "a") (data (i32.const 158637) "a") (data (i32.const 158640) "a") (data (i32.const 158643) "a") (data (i32.const 158646) "a") (data (i32.const 158649) "a") (data (i32.const 158652) "a") (data (i32.const 158655) "a") (data (i32.const 158658) "a") (data (i32.const 158661) "a") (data (i32.const 158664) "a") (data (i32.const 158667) "a") (data (i32.const 158670) "a") (data (i32.const 158673) "a") (data (i32.const 158676) "a") (data (i32.const 158679) "a") (data (i32.const 158682) "a") (data (i32.const 158685) "a") (data (i32.const 158688) "a") (data (i32.const 158691) "a") (data (i32.const 158694) "a") (data (i32.const 158697) "a") (data (i32.const 158700) "a") (data (i32.const 158703) "a") (data (i32.const 158706) "a") (data (i32.const 158709) "a") (data (i32.const 158712) "a") (data (i32.const 158715) "a") (data (i32.const 158718) "a") (data (i32.const 158721) "a") (data (i32.const 158724) "a") (data (i32.const 158727) "a") (data (i32.const 158730) "a") (data (i32.const 158733) "a") (data (i32.const 158736) "a") (data (i32.const 158739) "a") (data (i32.const 158742) "a") (data (i32.const 158745) "a") (data (i32.const 158748) "a") (data (i32.const 158751) "a") (data (i32.const 158754) "a") (data (i32.const 158757) "a") (data (i32.const 158760) "a") (data (i32.const 158763) "a") (data (i32.const 158766) "a") (data (i32.const 158769) "a") (data (i32.const 158772) "a") (data (i32.const 158775) "a") (data (i32.const 158778) "a") (data (i32.const 158781) "a") (data (i32.const 158784) "a") (data (i32.const 158787) "a") (data (i32.const 158790) "a") (data (i32.const 158793) "a") (data (i32.const 158796) "a") (data (i32.const 158799) "a") (data (i32.const 158802) "a") (data (i32.const 158805) "a") (data (i32.const 158808) "a") (data (i32.const 158811) "a") (data (i32.const 158814) "a") (data (i32.const 158817) "a") (data (i32.const 158820) "a") (data (i32.const 158823) "a") (data (i32.const 158826) "a") (data (i32.const 158829) "a") (data (i32.const 158832) "a") (data (i32.const 158835) "a") (data (i32.const 158838) "a") (data (i32.const 158841) "a") (data (i32.const 158844) "a") (data (i32.const 158847) "a") (data (i32.const 158850) "a") (data (i32.const 158853) "a") (data (i32.const 158856) "a") (data (i32.const 158859) "a") (data (i32.const 158862) "a") (data (i32.const 158865) "a") (data (i32.const 158868) "a") (data (i32.const 158871) "a") (data (i32.const 158874) "a") (data (i32.const 158877) "a") (data (i32.const 158880) "a") (data (i32.const 158883) "a") (data (i32.const 158886) "a") (data (i32.const 158889) "a") (data (i32.const 158892) "a") (data (i32.const 158895) "a") (data (i32.const 158898) "a") (data (i32.const 158901) "a") (data (i32.const 158904) "a") (data (i32.const 158907) "a") (data (i32.const 158910) "a") (data (i32.const 158913) "a") (data (i32.const 158916) "a") (data (i32.const 158919) "a") (data (i32.const 158922) "a") (data (i32.const 158925) "a") (data (i32.const 158928) "a") (data (i32.const 158931) "a") (data (i32.const 158934) "a") (data (i32.const 158937) "a") (data (i32.const 158940) "a") (data (i32.const 158943) "a") (data (i32.const 158946) "a") (data (i32.const 158949) "a") (data (i32.const 158952) "a") (data (i32.const 158955) "a") (data (i32.const 158958) "a") (data (i32.const 158961) "a") (data (i32.const 158964) "a") (data (i32.const 158967) "a") (data (i32.const 158970) "a") (data (i32.const 158973) "a") (data (i32.const 158976) "a") (data (i32.const 158979) "a") (data (i32.const 158982) "a") (data (i32.const 158985) "a") (data (i32.const 158988) "a") (data (i32.const 158991) "a") (data (i32.const 158994) "a") (data (i32.const 158997) "a") (data (i32.const 159000) "a") (data (i32.const 159003) "a") (data (i32.const 159006) "a") (data (i32.const 159009) "a") (data (i32.const 159012) "a") (data (i32.const 159015) "a") (data (i32.const 159018) "a") (data (i32.const 159021) "a") (data (i32.const 159024) "a") (data (i32.const 159027) "a") (data (i32.const 159030) "a") (data (i32.const 159033) "a") (data (i32.const 159036) "a") (data (i32.const 159039) "a") (data (i32.const 159042) "a") (data (i32.const 159045) "a") (data (i32.const 159048) "a") (data (i32.const 159051) "a") (data (i32.const 159054) "a") (data (i32.const 159057) "a") (data (i32.const 159060) "a") (data (i32.const 159063) "a") (data (i32.const 159066) "a") (data (i32.const 159069) "a") (data (i32.const 159072) "a") (data (i32.const 159075) "a") (data (i32.const 159078) "a") (data (i32.const 159081) "a") (data (i32.const 159084) "a") (data (i32.const 159087) "a") (data (i32.const 159090) "a") (data (i32.const 159093) "a") (data (i32.const 159096) "a") (data (i32.const 159099) "a") (data (i32.const 159102) "a") (data (i32.const 159105) "a") (data (i32.const 159108) "a") (data (i32.const 159111) "a") (data (i32.const 159114) "a") (data (i32.const 159117) "a") (data (i32.const 159120) "a") (data (i32.const 159123) "a") (data (i32.const 159126) "a") (data (i32.const 159129) "a") (data (i32.const 159132) "a") (data (i32.const 159135) "a") (data (i32.const 159138) "a") (data (i32.const 159141) "a") (data (i32.const 159144) "a") (data (i32.const 159147) "a") (data (i32.const 159150) "a") (data (i32.const 159153) "a") (data (i32.const 159156) "a") (data (i32.const 159159) "a") (data (i32.const 159162) "a") (data (i32.const 159165) "a") (data (i32.const 159168) "a") (data (i32.const 159171) "a") (data (i32.const 159174) "a") (data (i32.const 159177) "a") (data (i32.const 159180) "a") (data (i32.const 159183) "a") (data (i32.const 159186) "a") (data (i32.const 159189) "a") (data (i32.const 159192) "a") (data (i32.const 159195) "a") (data (i32.const 159198) "a") (data (i32.const 159201) "a") (data (i32.const 159204) "a") (data (i32.const 159207) "a") (data (i32.const 159210) "a") (data (i32.const 159213) "a") (data (i32.const 159216) "a") (data (i32.const 159219) "a") (data (i32.const 159222) "a") (data (i32.const 159225) "a") (data (i32.const 159228) "a") (data (i32.const 159231) "a") (data (i32.const 159234) "a") (data (i32.const 159237) "a") (data (i32.const 159240) "a") (data (i32.const 159243) "a") (data (i32.const 159246) "a") (data (i32.const 159249) "a") (data (i32.const 159252) "a") (data (i32.const 159255) "a") (data (i32.const 159258) "a") (data (i32.const 159261) "a") (data (i32.const 159264) "a") (data (i32.const 159267) "a") (data (i32.const 159270) "a") (data (i32.const 159273) "a") (data (i32.const 159276) "a") (data (i32.const 159279) "a") (data (i32.const 159282) "a") (data (i32.const 159285) "a") (data (i32.const 159288) "a") (data (i32.const 159291) "a") (data (i32.const 159294) "a") (data (i32.const 159297) "a") (data (i32.const 159300) "a") (data (i32.const 159303) "a") (data (i32.const 159306) "a") (data (i32.const 159309) "a") (data (i32.const 159312) "a") (data (i32.const 159315) "a") (data (i32.const 159318) "a") (data (i32.const 159321) "a") (data (i32.const 159324) "a") (data (i32.const 159327) "a") (data (i32.const 159330) "a") (data (i32.const 159333) "a") (data (i32.const 159336) "a") (data (i32.const 159339) "a") (data (i32.const 159342) "a") (data (i32.const 159345) "a") (data (i32.const 159348) "a") (data (i32.const 159351) "a") (data (i32.const 159354) "a") (data (i32.const 159357) "a") (data (i32.const 159360) "a") (data (i32.const 159363) "a") (data (i32.const 159366) "a") (data (i32.const 159369) "a") (data (i32.const 159372) "a") (data (i32.const 159375) "a") (data (i32.const 159378) "a") (data (i32.const 159381) "a") (data (i32.const 159384) "a") (data (i32.const 159387) "a") (data (i32.const 159390) "a") (data (i32.const 159393) "a") (data (i32.const 159396) "a") (data (i32.const 159399) "a") (data (i32.const 159402) "a") (data (i32.const 159405) "a") (data (i32.const 159408) "a") (data (i32.const 159411) "a") (data (i32.const 159414) "a") (data (i32.const 159417) "a") (data (i32.const 159420) "a") (data (i32.const 159423) "a") (data (i32.const 159426) "a") (data (i32.const 159429) "a") (data (i32.const 159432) "a") (data (i32.const 159435) "a") (data (i32.const 159438) "a") (data (i32.const 159441) "a") (data (i32.const 159444) "a") (data (i32.const 159447) "a") (data (i32.const 159450) "a") (data (i32.const 159453) "a") (data (i32.const 159456) "a") (data (i32.const 159459) "a") (data (i32.const 159462) "a") (data (i32.const 159465) "a") (data (i32.const 159468) "a") (data (i32.const 159471) "a") (data (i32.const 159474) "a") (data (i32.const 159477) "a") (data (i32.const 159480) "a") (data (i32.const 159483) "a") (data (i32.const 159486) "a") (data (i32.const 159489) "a") (data (i32.const 159492) "a") (data (i32.const 159495) "a") (data (i32.const 159498) "a") (data (i32.const 159501) "a") (data (i32.const 159504) "a") (data (i32.const 159507) "a") (data (i32.const 159510) "a") (data (i32.const 159513) "a") (data (i32.const 159516) "a") (data (i32.const 159519) "a") (data (i32.const 159522) "a") (data (i32.const 159525) "a") (data (i32.const 159528) "a") (data (i32.const 159531) "a") (data (i32.const 159534) "a") (data (i32.const 159537) "a") (data (i32.const 159540) "a") (data (i32.const 159543) "a") (data (i32.const 159546) "a") (data (i32.const 159549) "a") (data (i32.const 159552) "a") (data (i32.const 159555) "a") (data (i32.const 159558) "a") (data (i32.const 159561) "a") (data (i32.const 159564) "a") (data (i32.const 159567) "a") (data (i32.const 159570) "a") (data (i32.const 159573) "a") (data (i32.const 159576) "a") (data (i32.const 159579) "a") (data (i32.const 159582) "a") (data (i32.const 159585) "a") (data (i32.const 159588) "a") (data (i32.const 159591) "a") (data (i32.const 159594) "a") (data (i32.const 159597) "a") (data (i32.const 159600) "a") (data (i32.const 159603) "a") (data (i32.const 159606) "a") (data (i32.const 159609) "a") (data (i32.const 159612) "a") (data (i32.const 159615) "a") (data (i32.const 159618) "a") (data (i32.const 159621) "a") (data (i32.const 159624) "a") (data (i32.const 159627) "a") (data (i32.const 159630) "a") (data (i32.const 159633) "a") (data (i32.const 159636) "a") (data (i32.const 159639) "a") (data (i32.const 159642) "a") (data (i32.const 159645) "a") (data (i32.const 159648) "a") (data (i32.const 159651) "a") (data (i32.const 159654) "a") (data (i32.const 159657) "a") (data (i32.const 159660) "a") (data (i32.const 159663) "a") (data (i32.const 159666) "a") (data (i32.const 159669) "a") (data (i32.const 159672) "a") (data (i32.const 159675) "a") (data (i32.const 159678) "a") (data (i32.const 159681) "a") (data (i32.const 159684) "a") (data (i32.const 159687) "a") (data (i32.const 159690) "a") (data (i32.const 159693) "a") (data (i32.const 159696) "a") (data (i32.const 159699) "a") (data (i32.const 159702) "a") (data (i32.const 159705) "a") (data (i32.const 159708) "a") (data (i32.const 159711) "a") (data (i32.const 159714) "a") (data (i32.const 159717) "a") (data (i32.const 159720) "a") (data (i32.const 159723) "a") (data (i32.const 159726) "a") (data (i32.const 159729) "a") (data (i32.const 159732) "a") (data (i32.const 159735) "a") (data (i32.const 159738) "a") (data (i32.const 159741) "a") (data (i32.const 159744) "a") (data (i32.const 159747) "a") (data (i32.const 159750) "a") (data (i32.const 159753) "a") (data (i32.const 159756) "a") (data (i32.const 159759) "a") (data (i32.const 159762) "a") (data (i32.const 159765) "a") (data (i32.const 159768) "a") (data (i32.const 159771) "a") (data (i32.const 159774) "a") (data (i32.const 159777) "a") (data (i32.const 159780) "a") (data (i32.const 159783) "a") (data (i32.const 159786) "a") (data (i32.const 159789) "a") (data (i32.const 159792) "a") (data (i32.const 159795) "a") (data (i32.const 159798) "a") (data (i32.const 159801) "a") (data (i32.const 159804) "a") (data (i32.const 159807) "a") (data (i32.const 159810) "a") (data (i32.const 159813) "a") (data (i32.const 159816) "a") (data (i32.const 159819) "a") (data (i32.const 159822) "a") (data (i32.const 159825) "a") (data (i32.const 159828) "a") (data (i32.const 159831) "a") (data (i32.const 159834) "a") (data (i32.const 159837) "a") (data (i32.const 159840) "a") (data (i32.const 159843) "a") (data (i32.const 159846) "a") (data (i32.const 159849) "a") (data (i32.const 159852) "a") (data (i32.const 159855) "a") (data (i32.const 159858) "a") (data (i32.const 159861) "a") (data (i32.const 159864) "a") (data (i32.const 159867) "a") (data (i32.const 159870) "a") (data (i32.const 159873) "a") (data (i32.const 159876) "a") (data (i32.const 159879) "a") (data (i32.const 159882) "a") (data (i32.const 159885) "a") (data (i32.const 159888) "a") (data (i32.const 159891) "a") (data (i32.const 159894) "a") (data (i32.const 159897) "a") (data (i32.const 159900) "a") (data (i32.const 159903) "a") (data (i32.const 159906) "a") (data (i32.const 159909) "a") (data (i32.const 159912) "a") (data (i32.const 159915) "a") (data (i32.const 159918) "a") (data (i32.const 159921) "a") (data (i32.const 159924) "a") (data (i32.const 159927) "a") (data (i32.const 159930) "a") (data (i32.const 159933) "a") (data (i32.const 159936) "a") (data (i32.const 159939) "a") (data (i32.const 159942) "a") (data (i32.const 159945) "a") (data (i32.const 159948) "a") (data (i32.const 159951) "a") (data (i32.const 159954) "a") (data (i32.const 159957) "a") (data (i32.const 159960) "a") (data (i32.const 159963) "a") (data (i32.const 159966) "a") (data (i32.const 159969) "a") (data (i32.const 159972) "a") (data (i32.const 159975) "a") (data (i32.const 159978) "a") (data (i32.const 159981) "a") (data (i32.const 159984) "a") (data (i32.const 159987) "a") (data (i32.const 159990) "a") (data (i32.const 159993) "a") (data (i32.const 159996) "a") (data (i32.const 159999) "a") (data (i32.const 160002) "a") (data (i32.const 160005) "a") (data (i32.const 160008) "a") (data (i32.const 160011) "a") (data (i32.const 160014) "a") (data (i32.const 160017) "a") (data (i32.const 160020) "a") (data (i32.const 160023) "a") (data (i32.const 160026) "a") (data (i32.const 160029) "a") (data (i32.const 160032) "a") (data (i32.const 160035) "a") (data (i32.const 160038) "a") (data (i32.const 160041) "a") (data (i32.const 160044) "a") (data (i32.const 160047) "a") (data (i32.const 160050) "a") (data (i32.const 160053) "a") (data (i32.const 160056) "a") (data (i32.const 160059) "a") (data (i32.const 160062) "a") (data (i32.const 160065) "a") (data (i32.const 160068) "a") (data (i32.const 160071) "a") (data (i32.const 160074) "a") (data (i32.const 160077) "a") (data (i32.const 160080) "a") (data (i32.const 160083) "a") (data (i32.const 160086) "a") (data (i32.const 160089) "a") (data (i32.const 160092) "a") (data (i32.const 160095) "a") (data (i32.const 160098) "a") (data (i32.const 160101) "a") (data (i32.const 160104) "a") (data (i32.const 160107) "a") (data (i32.const 160110) "a") (data (i32.const 160113) "a") (data (i32.const 160116) "a") (data (i32.const 160119) "a") (data (i32.const 160122) "a") (data (i32.const 160125) "a") (data (i32.const 160128) "a") (data (i32.const 160131) "a") (data (i32.const 160134) "a") (data (i32.const 160137) "a") (data (i32.const 160140) "a") (data (i32.const 160143) "a") (data (i32.const 160146) "a") (data (i32.const 160149) "a") (data (i32.const 160152) "a") (data (i32.const 160155) "a") (data (i32.const 160158) "a") (data (i32.const 160161) "a") (data (i32.const 160164) "a") (data (i32.const 160167) "a") (data (i32.const 160170) "a") (data (i32.const 160173) "a") (data (i32.const 160176) "a") (data (i32.const 160179) "a") (data (i32.const 160182) "a") (data (i32.const 160185) "a") (data (i32.const 160188) "a") (data (i32.const 160191) "a") (data (i32.const 160194) "a") (data (i32.const 160197) "a") (data (i32.const 160200) "a") (data (i32.const 160203) "a") (data (i32.const 160206) "a") (data (i32.const 160209) "a") (data (i32.const 160212) "a") (data (i32.const 160215) "a") (data (i32.const 160218) "a") (data (i32.const 160221) "a") (data (i32.const 160224) "a") (data (i32.const 160227) "a") (data (i32.const 160230) "a") (data (i32.const 160233) "a") (data (i32.const 160236) "a") (data (i32.const 160239) "a") (data (i32.const 160242) "a") (data (i32.const 160245) "a") (data (i32.const 160248) "a") (data (i32.const 160251) "a") (data (i32.const 160254) "a") (data (i32.const 160257) "a") (data (i32.const 160260) "a") (data (i32.const 160263) "a") (data (i32.const 160266) "a") (data (i32.const 160269) "a") (data (i32.const 160272) "a") (data (i32.const 160275) "a") (data (i32.const 160278) "a") (data (i32.const 160281) "a") (data (i32.const 160284) "a") (data (i32.const 160287) "a") (data (i32.const 160290) "a") (data (i32.const 160293) "a") (data (i32.const 160296) "a") (data (i32.const 160299) "a") (data (i32.const 160302) "a") (data (i32.const 160305) "a") (data (i32.const 160308) "a") (data (i32.const 160311) "a") (data (i32.const 160314) "a") (data (i32.const 160317) "a") (data (i32.const 160320) "a") (data (i32.const 160323) "a") (data (i32.const 160326) "a") (data (i32.const 160329) "a") (data (i32.const 160332) "a") (data (i32.const 160335) "a") (data (i32.const 160338) "a") (data (i32.const 160341) "a") (data (i32.const 160344) "a") (data (i32.const 160347) "a") (data (i32.const 160350) "a") (data (i32.const 160353) "a") (data (i32.const 160356) "a") (data (i32.const 160359) "a") (data (i32.const 160362) "a") (data (i32.const 160365) "a") (data (i32.const 160368) "a") (data (i32.const 160371) "a") (data (i32.const 160374) "a") (data (i32.const 160377) "a") (data (i32.const 160380) "a") (data (i32.const 160383) "a") (data (i32.const 160386) "a") (data (i32.const 160389) "a") (data (i32.const 160392) "a") (data (i32.const 160395) "a") (data (i32.const 160398) "a") (data (i32.const 160401) "a") (data (i32.const 160404) "a") (data (i32.const 160407) "a") (data (i32.const 160410) "a") (data (i32.const 160413) "a") (data (i32.const 160416) "a") (data (i32.const 160419) "a") (data (i32.const 160422) "a") (data (i32.const 160425) "a") (data (i32.const 160428) "a") (data (i32.const 160431) "a") (data (i32.const 160434) "a") (data (i32.const 160437) "a") (data (i32.const 160440) "a") (data (i32.const 160443) "a") (data (i32.const 160446) "a") (data (i32.const 160449) "a") (data (i32.const 160452) "a") (data (i32.const 160455) "a") (data (i32.const 160458) "a") (data (i32.const 160461) "a") (data (i32.const 160464) "a") (data (i32.const 160467) "a") (data (i32.const 160470) "a") (data (i32.const 160473) "a") (data (i32.const 160476) "a") (data (i32.const 160479) "a") (data (i32.const 160482) "a") (data (i32.const 160485) "a") (data (i32.const 160488) "a") (data (i32.const 160491) "a") (data (i32.const 160494) "a") (data (i32.const 160497) "a") (data (i32.const 160500) "a") (data (i32.const 160503) "a") (data (i32.const 160506) "a") (data (i32.const 160509) "a") (data (i32.const 160512) "a") (data (i32.const 160515) "a") (data (i32.const 160518) "a") (data (i32.const 160521) "a") (data (i32.const 160524) "a") (data (i32.const 160527) "a") (data (i32.const 160530) "a") (data (i32.const 160533) "a") (data (i32.const 160536) "a") (data (i32.const 160539) "a") (data (i32.const 160542) "a") (data (i32.const 160545) "a") (data (i32.const 160548) "a") (data (i32.const 160551) "a") (data (i32.const 160554) "a") (data (i32.const 160557) "a") (data (i32.const 160560) "a") (data (i32.const 160563) "a") (data (i32.const 160566) "a") (data (i32.const 160569) "a") (data (i32.const 160572) "a") (data (i32.const 160575) "a") (data (i32.const 160578) "a") (data (i32.const 160581) "a") (data (i32.const 160584) "a") (data (i32.const 160587) "a") (data (i32.const 160590) "a") (data (i32.const 160593) "a") (data (i32.const 160596) "a") (data (i32.const 160599) "a") (data (i32.const 160602) "a") (data (i32.const 160605) "a") (data (i32.const 160608) "a") (data (i32.const 160611) "a") (data (i32.const 160614) "a") (data (i32.const 160617) "a") (data (i32.const 160620) "a") (data (i32.const 160623) "a") (data (i32.const 160626) "a") (data (i32.const 160629) "a") (data (i32.const 160632) "a") (data (i32.const 160635) "a") (data (i32.const 160638) "a") (data (i32.const 160641) "a") (data (i32.const 160644) "a") (data (i32.const 160647) "a") (data (i32.const 160650) "a") (data (i32.const 160653) "a") (data (i32.const 160656) "a") (data (i32.const 160659) "a") (data (i32.const 160662) "a") (data (i32.const 160665) "a") (data (i32.const 160668) "a") (data (i32.const 160671) "a") (data (i32.const 160674) "a") (data (i32.const 160677) "a") (data (i32.const 160680) "a") (data (i32.const 160683) "a") (data (i32.const 160686) "a") (data (i32.const 160689) "a") (data (i32.const 160692) "a") (data (i32.const 160695) "a") (data (i32.const 160698) "a") (data (i32.const 160701) "a") (data (i32.const 160704) "a") (data (i32.const 160707) "a") (data (i32.const 160710) "a") (data (i32.const 160713) "a") (data (i32.const 160716) "a") (data (i32.const 160719) "a") (data (i32.const 160722) "a") (data (i32.const 160725) "a") (data (i32.const 160728) "a") (data (i32.const 160731) "a") (data (i32.const 160734) "a") (data (i32.const 160737) "a") (data (i32.const 160740) "a") (data (i32.const 160743) "a") (data (i32.const 160746) "a") (data (i32.const 160749) "a") (data (i32.const 160752) "a") (data (i32.const 160755) "a") (data (i32.const 160758) "a") (data (i32.const 160761) "a") (data (i32.const 160764) "a") (data (i32.const 160767) "a") (data (i32.const 160770) "a") (data (i32.const 160773) "a") (data (i32.const 160776) "a") (data (i32.const 160779) "a") (data (i32.const 160782) "a") (data (i32.const 160785) "a") (data (i32.const 160788) "a") (data (i32.const 160791) "a") (data (i32.const 160794) "a") (data (i32.const 160797) "a") (data (i32.const 160800) "a") (data (i32.const 160803) "a") (data (i32.const 160806) "a") (data (i32.const 160809) "a") (data (i32.const 160812) "a") (data (i32.const 160815) "a") (data (i32.const 160818) "a") (data (i32.const 160821) "a") (data (i32.const 160824) "a") (data (i32.const 160827) "a") (data (i32.const 160830) "a") (data (i32.const 160833) "a") (data (i32.const 160836) "a") (data (i32.const 160839) "a") (data (i32.const 160842) "a") (data (i32.const 160845) "a") (data (i32.const 160848) "a") (data (i32.const 160851) "a") (data (i32.const 160854) "a") (data (i32.const 160857) "a") (data (i32.const 160860) "a") (data (i32.const 160863) "a") (data (i32.const 160866) "a") (data (i32.const 160869) "a") (data (i32.const 160872) "a") (data (i32.const 160875) "a") (data (i32.const 160878) "a") (data (i32.const 160881) "a") (data (i32.const 160884) "a") (data (i32.const 160887) "a") (data (i32.const 160890) "a") (data (i32.const 160893) "a") (data (i32.const 160896) "a") (data (i32.const 160899) "a") (data (i32.const 160902) "a") (data (i32.const 160905) "a") (data (i32.const 160908) "a") (data (i32.const 160911) "a") (data (i32.const 160914) "a") (data (i32.const 160917) "a") (data (i32.const 160920) "a") (data (i32.const 160923) "a") (data (i32.const 160926) "a") (data (i32.const 160929) "a") (data (i32.const 160932) "a") (data (i32.const 160935) "a") (data (i32.const 160938) "a") (data (i32.const 160941) "a") (data (i32.const 160944) "a") (data (i32.const 160947) "a") (data (i32.const 160950) "a") (data (i32.const 160953) "a") (data (i32.const 160956) "a") (data (i32.const 160959) "a") (data (i32.const 160962) "a") (data (i32.const 160965) "a") (data (i32.const 160968) "a") (data (i32.const 160971) "a") (data (i32.const 160974) "a") (data (i32.const 160977) "a") (data (i32.const 160980) "a") (data (i32.const 160983) "a") (data (i32.const 160986) "a") (data (i32.const 160989) "a") (data (i32.const 160992) "a") (data (i32.const 160995) "a") (data (i32.const 160998) "a") (data (i32.const 161001) "a") (data (i32.const 161004) "a") (data (i32.const 161007) "a") (data (i32.const 161010) "a") (data (i32.const 161013) "a") (data (i32.const 161016) "a") (data (i32.const 161019) "a") (data (i32.const 161022) "a") (data (i32.const 161025) "a") (data (i32.const 161028) "a") (data (i32.const 161031) "a") (data (i32.const 161034) "a") (data (i32.const 161037) "a") (data (i32.const 161040) "a") (data (i32.const 161043) "a") (data (i32.const 161046) "a") (data (i32.const 161049) "a") (data (i32.const 161052) "a") (data (i32.const 161055) "a") (data (i32.const 161058) "a") (data (i32.const 161061) "a") (data (i32.const 161064) "a") (data (i32.const 161067) "a") (data (i32.const 161070) "a") (data (i32.const 161073) "a") (data (i32.const 161076) "a") (data (i32.const 161079) "a") (data (i32.const 161082) "a") (data (i32.const 161085) "a") (data (i32.const 161088) "a") (data (i32.const 161091) "a") (data (i32.const 161094) "a") (data (i32.const 161097) "a") (data (i32.const 161100) "a") (data (i32.const 161103) "a") (data (i32.const 161106) "a") (data (i32.const 161109) "a") (data (i32.const 161112) "a") (data (i32.const 161115) "a") (data (i32.const 161118) "a") (data (i32.const 161121) "a") (data (i32.const 161124) "a") (data (i32.const 161127) "a") (data (i32.const 161130) "a") (data (i32.const 161133) "a") (data (i32.const 161136) "a") (data (i32.const 161139) "a") (data (i32.const 161142) "a") (data (i32.const 161145) "a") (data (i32.const 161148) "a") (data (i32.const 161151) "a") (data (i32.const 161154) "a") (data (i32.const 161157) "a") (data (i32.const 161160) "a") (data (i32.const 161163) "a") (data (i32.const 161166) "a") (data (i32.const 161169) "a") (data (i32.const 161172) "a") (data (i32.const 161175) "a") (data (i32.const 161178) "a") (data (i32.const 161181) "a") (data (i32.const 161184) "a") (data (i32.const 161187) "a") (data (i32.const 161190) "a") (data (i32.const 161193) "a") (data (i32.const 161196) "a") (data (i32.const 161199) "a") (data (i32.const 161202) "a") (data (i32.const 161205) "a") (data (i32.const 161208) "a") (data (i32.const 161211) "a") (data (i32.const 161214) "a") (data (i32.const 161217) "a") (data (i32.const 161220) "a") (data (i32.const 161223) "a") (data (i32.const 161226) "a") (data (i32.const 161229) "a") (data (i32.const 161232) "a") (data (i32.const 161235) "a") (data (i32.const 161238) "a") (data (i32.const 161241) "a") (data (i32.const 161244) "a") (data (i32.const 161247) "a") (data (i32.const 161250) "a") (data (i32.const 161253) "a") (data (i32.const 161256) "a") (data (i32.const 161259) "a") (data (i32.const 161262) "a") (data (i32.const 161265) "a") (data (i32.const 161268) "a") (data (i32.const 161271) "a") (data (i32.const 161274) "a") (data (i32.const 161277) "a") (data (i32.const 161280) "a") (data (i32.const 161283) "a") (data (i32.const 161286) "a") (data (i32.const 161289) "a") (data (i32.const 161292) "a") (data (i32.const 161295) "a") (data (i32.const 161298) "a") (data (i32.const 161301) "a") (data (i32.const 161304) "a") (data (i32.const 161307) "a") (data (i32.const 161310) "a") (data (i32.const 161313) "a") (data (i32.const 161316) "a") (data (i32.const 161319) "a") (data (i32.const 161322) "a") (data (i32.const 161325) "a") (data (i32.const 161328) "a") (data (i32.const 161331) "a") (data (i32.const 161334) "a") (data (i32.const 161337) "a") (data (i32.const 161340) "a") (data (i32.const 161343) "a") (data (i32.const 161346) "a") (data (i32.const 161349) "a") (data (i32.const 161352) "a") (data (i32.const 161355) "a") (data (i32.const 161358) "a") (data (i32.const 161361) "a") (data (i32.const 161364) "a") (data (i32.const 161367) "a") (data (i32.const 161370) "a") (data (i32.const 161373) "a") (data (i32.const 161376) "a") (data (i32.const 161379) "a") (data (i32.const 161382) "a") (data (i32.const 161385) "a") (data (i32.const 161388) "a") (data (i32.const 161391) "a") (data (i32.const 161394) "a") (data (i32.const 161397) "a") (data (i32.const 161400) "a") (data (i32.const 161403) "a") (data (i32.const 161406) "a") (data (i32.const 161409) "a") (data (i32.const 161412) "a") (data (i32.const 161415) "a") (data (i32.const 161418) "a") (data (i32.const 161421) "a") (data (i32.const 161424) "a") (data (i32.const 161427) "a") (data (i32.const 161430) "a") (data (i32.const 161433) "a") (data (i32.const 161436) "a") (data (i32.const 161439) "a") (data (i32.const 161442) "a") (data (i32.const 161445) "a") (data (i32.const 161448) "a") (data (i32.const 161451) "a") (data (i32.const 161454) "a") (data (i32.const 161457) "a") (data (i32.const 161460) "a") (data (i32.const 161463) "a") (data (i32.const 161466) "a") (data (i32.const 161469) "a") (data (i32.const 161472) "a") (data (i32.const 161475) "a") (data (i32.const 161478) "a") (data (i32.const 161481) "a") (data (i32.const 161484) "a") (data (i32.const 161487) "a") (data (i32.const 161490) "a") (data (i32.const 161493) "a") (data (i32.const 161496) "a") (data (i32.const 161499) "a") (data (i32.const 161502) "a") (data (i32.const 161505) "a") (data (i32.const 161508) "a") (data (i32.const 161511) "a") (data (i32.const 161514) "a") (data (i32.const 161517) "a") (data (i32.const 161520) "a") (data (i32.const 161523) "a") (data (i32.const 161526) "a") (data (i32.const 161529) "a") (data (i32.const 161532) "a") (data (i32.const 161535) "a") (data (i32.const 161538) "a") (data (i32.const 161541) "a") (data (i32.const 161544) "a") (data (i32.const 161547) "a") (data (i32.const 161550) "a") (data (i32.const 161553) "a") (data (i32.const 161556) "a") (data (i32.const 161559) "a") (data (i32.const 161562) "a") (data (i32.const 161565) "a") (data (i32.const 161568) "a") (data (i32.const 161571) "a") (data (i32.const 161574) "a") (data (i32.const 161577) "a") (data (i32.const 161580) "a") (data (i32.const 161583) "a") (data (i32.const 161586) "a") (data (i32.const 161589) "a") (data (i32.const 161592) "a") (data (i32.const 161595) "a") (data (i32.const 161598) "a") (data (i32.const 161601) "a") (data (i32.const 161604) "a") (data (i32.const 161607) "a") (data (i32.const 161610) "a") (data (i32.const 161613) "a") (data (i32.const 161616) "a") (data (i32.const 161619) "a") (data (i32.const 161622) "a") (data (i32.const 161625) "a") (data (i32.const 161628) "a") (data (i32.const 161631) "a") (data (i32.const 161634) "a") (data (i32.const 161637) "a") (data (i32.const 161640) "a") (data (i32.const 161643) "a") (data (i32.const 161646) "a") (data (i32.const 161649) "a") (data (i32.const 161652) "a") (data (i32.const 161655) "a") (data (i32.const 161658) "a") (data (i32.const 161661) "a") (data (i32.const 161664) "a") (data (i32.const 161667) "a") (data (i32.const 161670) "a") (data (i32.const 161673) "a") (data (i32.const 161676) "a") (data (i32.const 161679) "a") (data (i32.const 161682) "a") (data (i32.const 161685) "a") (data (i32.const 161688) "a") (data (i32.const 161691) "a") (data (i32.const 161694) "a") (data (i32.const 161697) "a") (data (i32.const 161700) "a") (data (i32.const 161703) "a") (data (i32.const 161706) "a") (data (i32.const 161709) "a") (data (i32.const 161712) "a") (data (i32.const 161715) "a") (data (i32.const 161718) "a") (data (i32.const 161721) "a") (data (i32.const 161724) "a") (data (i32.const 161727) "a") (data (i32.const 161730) "a") (data (i32.const 161733) "a") (data (i32.const 161736) "a") (data (i32.const 161739) "a") (data (i32.const 161742) "a") (data (i32.const 161745) "a") (data (i32.const 161748) "a") (data (i32.const 161751) "a") (data (i32.const 161754) "a") (data (i32.const 161757) "a") (data (i32.const 161760) "a") (data (i32.const 161763) "a") (data (i32.const 161766) "a") (data (i32.const 161769) "a") (data (i32.const 161772) "a") (data (i32.const 161775) "a") (data (i32.const 161778) "a") (data (i32.const 161781) "a") (data (i32.const 161784) "a") (data (i32.const 161787) "a") (data (i32.const 161790) "a") (data (i32.const 161793) "a") (data (i32.const 161796) "a") (data (i32.const 161799) "a") (data (i32.const 161802) "a") (data (i32.const 161805) "a") (data (i32.const 161808) "a") (data (i32.const 161811) "a") (data (i32.const 161814) "a") (data (i32.const 161817) "a") (data (i32.const 161820) "a") (data (i32.const 161823) "a") (data (i32.const 161826) "a") (data (i32.const 161829) "a") (data (i32.const 161832) "a") (data (i32.const 161835) "a") (data (i32.const 161838) "a") (data (i32.const 161841) "a") (data (i32.const 161844) "a") (data (i32.const 161847) "a") (data (i32.const 161850) "a") (data (i32.const 161853) "a") (data (i32.const 161856) "a") (data (i32.const 161859) "a") (data (i32.const 161862) "a") (data (i32.const 161865) "a") (data (i32.const 161868) "a") (data (i32.const 161871) "a") (data (i32.const 161874) "a") (data (i32.const 161877) "a") (data (i32.const 161880) "a") (data (i32.const 161883) "a") (data (i32.const 161886) "a") (data (i32.const 161889) "a") (data (i32.const 161892) "a") (data (i32.const 161895) "a") (data (i32.const 161898) "a") (data (i32.const 161901) "a") (data (i32.const 161904) "a") (data (i32.const 161907) "a") (data (i32.const 161910) "a") (data (i32.const 161913) "a") (data (i32.const 161916) "a") (data (i32.const 161919) "a") (data (i32.const 161922) "a") (data (i32.const 161925) "a") (data (i32.const 161928) "a") (data (i32.const 161931) "a") (data (i32.const 161934) "a") (data (i32.const 161937) "a") (data (i32.const 161940) "a") (data (i32.const 161943) "a") (data (i32.const 161946) "a") (data (i32.const 161949) "a") (data (i32.const 161952) "a") (data (i32.const 161955) "a") (data (i32.const 161958) "a") (data (i32.const 161961) "a") (data (i32.const 161964) "a") (data (i32.const 161967) "a") (data (i32.const 161970) "a") (data (i32.const 161973) "a") (data (i32.const 161976) "a") (data (i32.const 161979) "a") (data (i32.const 161982) "a") (data (i32.const 161985) "a") (data (i32.const 161988) "a") (data (i32.const 161991) "a") (data (i32.const 161994) "a") (data (i32.const 161997) "a") (data (i32.const 162000) "a") (data (i32.const 162003) "a") (data (i32.const 162006) "a") (data (i32.const 162009) "a") (data (i32.const 162012) "a") (data (i32.const 162015) "a") (data (i32.const 162018) "a") (data (i32.const 162021) "a") (data (i32.const 162024) "a") (data (i32.const 162027) "a") (data (i32.const 162030) "a") (data (i32.const 162033) "a") (data (i32.const 162036) "a") (data (i32.const 162039) "a") (data (i32.const 162042) "a") (data (i32.const 162045) "a") (data (i32.const 162048) "a") (data (i32.const 162051) "a") (data (i32.const 162054) "a") (data (i32.const 162057) "a") (data (i32.const 162060) "a") (data (i32.const 162063) "a") (data (i32.const 162066) "a") (data (i32.const 162069) "a") (data (i32.const 162072) "a") (data (i32.const 162075) "a") (data (i32.const 162078) "a") (data (i32.const 162081) "a") (data (i32.const 162084) "a") (data (i32.const 162087) "a") (data (i32.const 162090) "a") (data (i32.const 162093) "a") (data (i32.const 162096) "a") (data (i32.const 162099) "a") (data (i32.const 162102) "a") (data (i32.const 162105) "a") (data (i32.const 162108) "a") (data (i32.const 162111) "a") (data (i32.const 162114) "a") (data (i32.const 162117) "a") (data (i32.const 162120) "a") (data (i32.const 162123) "a") (data (i32.const 162126) "a") (data (i32.const 162129) "a") (data (i32.const 162132) "a") (data (i32.const 162135) "a") (data (i32.const 162138) "a") (data (i32.const 162141) "a") (data (i32.const 162144) "a") (data (i32.const 162147) "a") (data (i32.const 162150) "a") (data (i32.const 162153) "a") (data (i32.const 162156) "a") (data (i32.const 162159) "a") (data (i32.const 162162) "a") (data (i32.const 162165) "a") (data (i32.const 162168) "a") (data (i32.const 162171) "a") (data (i32.const 162174) "a") (data (i32.const 162177) "a") (data (i32.const 162180) "a") (data (i32.const 162183) "a") (data (i32.const 162186) "a") (data (i32.const 162189) "a") (data (i32.const 162192) "a") (data (i32.const 162195) "a") (data (i32.const 162198) "a") (data (i32.const 162201) "a") (data (i32.const 162204) "a") (data (i32.const 162207) "a") (data (i32.const 162210) "a") (data (i32.const 162213) "a") (data (i32.const 162216) "a") (data (i32.const 162219) "a") (data (i32.const 162222) "a") (data (i32.const 162225) "a") (data (i32.const 162228) "a") (data (i32.const 162231) "a") (data (i32.const 162234) "a") (data (i32.const 162237) "a") (data (i32.const 162240) "a") (data (i32.const 162243) "a") (data (i32.const 162246) "a") (data (i32.const 162249) "a") (data (i32.const 162252) "a") (data (i32.const 162255) "a") (data (i32.const 162258) "a") (data (i32.const 162261) "a") (data (i32.const 162264) "a") (data (i32.const 162267) "a") (data (i32.const 162270) "a") (data (i32.const 162273) "a") (data (i32.const 162276) "a") (data (i32.const 162279) "a") (data (i32.const 162282) "a") (data (i32.const 162285) "a") (data (i32.const 162288) "a") (data (i32.const 162291) "a") (data (i32.const 162294) "a") (data (i32.const 162297) "a") (data (i32.const 162300) "a") (data (i32.const 162303) "a") (data (i32.const 162306) "a") (data (i32.const 162309) "a") (data (i32.const 162312) "a") (data (i32.const 162315) "a") (data (i32.const 162318) "a") (data (i32.const 162321) "a") (data (i32.const 162324) "a") (data (i32.const 162327) "a") (data (i32.const 162330) "a") (data (i32.const 162333) "a") (data (i32.const 162336) "a") (data (i32.const 162339) "a") (data (i32.const 162342) "a") (data (i32.const 162345) "a") (data (i32.const 162348) "a") (data (i32.const 162351) "a") (data (i32.const 162354) "a") (data (i32.const 162357) "a") (data (i32.const 162360) "a") (data (i32.const 162363) "a") (data (i32.const 162366) "a") (data (i32.const 162369) "a") (data (i32.const 162372) "a") (data (i32.const 162375) "a") (data (i32.const 162378) "a") (data (i32.const 162381) "a") (data (i32.const 162384) "a") (data (i32.const 162387) "a") (data (i32.const 162390) "a") (data (i32.const 162393) "a") (data (i32.const 162396) "a") (data (i32.const 162399) "a") (data (i32.const 162402) "a") (data (i32.const 162405) "a") (data (i32.const 162408) "a") (data (i32.const 162411) "a") (data (i32.const 162414) "a") (data (i32.const 162417) "a") (data (i32.const 162420) "a") (data (i32.const 162423) "a") (data (i32.const 162426) "a") (data (i32.const 162429) "a") (data (i32.const 162432) "a") (data (i32.const 162435) "a") (data (i32.const 162438) "a") (data (i32.const 162441) "a") (data (i32.const 162444) "a") (data (i32.const 162447) "a") (data (i32.const 162450) "a") (data (i32.const 162453) "a") (data (i32.const 162456) "a") (data (i32.const 162459) "a") (data (i32.const 162462) "a") (data (i32.const 162465) "a") (data (i32.const 162468) "a") (data (i32.const 162471) "a") (data (i32.const 162474) "a") (data (i32.const 162477) "a") (data (i32.const 162480) "a") (data (i32.const 162483) "a") (data (i32.const 162486) "a") (data (i32.const 162489) "a") (data (i32.const 162492) "a") (data (i32.const 162495) "a") (data (i32.const 162498) "a") (data (i32.const 162501) "a") (data (i32.const 162504) "a") (data (i32.const 162507) "a") (data (i32.const 162510) "a") (data (i32.const 162513) "a") (data (i32.const 162516) "a") (data (i32.const 162519) "a") (data (i32.const 162522) "a") (data (i32.const 162525) "a") (data (i32.const 162528) "a") (data (i32.const 162531) "a") (data (i32.const 162534) "a") (data (i32.const 162537) "a") (data (i32.const 162540) "a") (data (i32.const 162543) "a") (data (i32.const 162546) "a") (data (i32.const 162549) "a") (data (i32.const 162552) "a") (data (i32.const 162555) "a") (data (i32.const 162558) "a") (data (i32.const 162561) "a") (data (i32.const 162564) "a") (data (i32.const 162567) "a") (data (i32.const 162570) "a") (data (i32.const 162573) "a") (data (i32.const 162576) "a") (data (i32.const 162579) "a") (data (i32.const 162582) "a") (data (i32.const 162585) "a") (data (i32.const 162588) "a") (data (i32.const 162591) "a") (data (i32.const 162594) "a") (data (i32.const 162597) "a") (data (i32.const 162600) "a") (data (i32.const 162603) "a") (data (i32.const 162606) "a") (data (i32.const 162609) "a") (data (i32.const 162612) "a") (data (i32.const 162615) "a") (data (i32.const 162618) "a") (data (i32.const 162621) "a") (data (i32.const 162624) "a") (data (i32.const 162627) "a") (data (i32.const 162630) "a") (data (i32.const 162633) "a") (data (i32.const 162636) "a") (data (i32.const 162639) "a") (data (i32.const 162642) "a") (data (i32.const 162645) "a") (data (i32.const 162648) "a") (data (i32.const 162651) "a") (data (i32.const 162654) "a") (data (i32.const 162657) "a") (data (i32.const 162660) "a") (data (i32.const 162663) "a") (data (i32.const 162666) "a") (data (i32.const 162669) "a") (data (i32.const 162672) "a") (data (i32.const 162675) "a") (data (i32.const 162678) "a") (data (i32.const 162681) "a") (data (i32.const 162684) "a") (data (i32.const 162687) "a") (data (i32.const 162690) "a") (data (i32.const 162693) "a") (data (i32.const 162696) "a") (data (i32.const 162699) "a") (data (i32.const 162702) "a") (data (i32.const 162705) "a") (data (i32.const 162708) "a") (data (i32.const 162711) "a") (data (i32.const 162714) "a") (data (i32.const 162717) "a") (data (i32.const 162720) "a") (data (i32.const 162723) "a") (data (i32.const 162726) "a") (data (i32.const 162729) "a") (data (i32.const 162732) "a") (data (i32.const 162735) "a") (data (i32.const 162738) "a") (data (i32.const 162741) "a") (data (i32.const 162744) "a") (data (i32.const 162747) "a") (data (i32.const 162750) "a") (data (i32.const 162753) "a") (data (i32.const 162756) "a") (data (i32.const 162759) "a") (data (i32.const 162762) "a") (data (i32.const 162765) "a") (data (i32.const 162768) "a") (data (i32.const 162771) "a") (data (i32.const 162774) "a") (data (i32.const 162777) "a") (data (i32.const 162780) "a") (data (i32.const 162783) "a") (data (i32.const 162786) "a") (data (i32.const 162789) "a") (data (i32.const 162792) "a") (data (i32.const 162795) "a") (data (i32.const 162798) "a") (data (i32.const 162801) "a") (data (i32.const 162804) "a") (data (i32.const 162807) "a") (data (i32.const 162810) "a") (data (i32.const 162813) "a") (data (i32.const 162816) "a") (data (i32.const 162819) "a") (data (i32.const 162822) "a") (data (i32.const 162825) "a") (data (i32.const 162828) "a") (data (i32.const 162831) "a") (data (i32.const 162834) "a") (data (i32.const 162837) "a") (data (i32.const 162840) "a") (data (i32.const 162843) "a") (data (i32.const 162846) "a") (data (i32.const 162849) "a") (data (i32.const 162852) "a") (data (i32.const 162855) "a") (data (i32.const 162858) "a") (data (i32.const 162861) "a") (data (i32.const 162864) "a") (data (i32.const 162867) "a") (data (i32.const 162870) "a") (data (i32.const 162873) "a") (data (i32.const 162876) "a") (data (i32.const 162879) "a") (data (i32.const 162882) "a") (data (i32.const 162885) "a") (data (i32.const 162888) "a") (data (i32.const 162891) "a") (data (i32.const 162894) "a") (data (i32.const 162897) "a") (data (i32.const 162900) "a") (data (i32.const 162903) "a") (data (i32.const 162906) "a") (data (i32.const 162909) "a") (data (i32.const 162912) "a") (data (i32.const 162915) "a") (data (i32.const 162918) "a") (data (i32.const 162921) "a") (data (i32.const 162924) "a") (data (i32.const 162927) "a") (data (i32.const 162930) "a") (data (i32.const 162933) "a") (data (i32.const 162936) "a") (data (i32.const 162939) "a") (data (i32.const 162942) "a") (data (i32.const 162945) "a") (data (i32.const 162948) "a") (data (i32.const 162951) "a") (data (i32.const 162954) "a") (data (i32.const 162957) "a") (data (i32.const 162960) "a") (data (i32.const 162963) "a") (data (i32.const 162966) "a") (data (i32.const 162969) "a") (data (i32.const 162972) "a") (data (i32.const 162975) "a") (data (i32.const 162978) "a") (data (i32.const 162981) "a") (data (i32.const 162984) "a") (data (i32.const 162987) "a") (data (i32.const 162990) "a") (data (i32.const 162993) "a") (data (i32.const 162996) "a") (data (i32.const 162999) "a") (data (i32.const 163002) "a") (data (i32.const 163005) "a") (data (i32.const 163008) "a") (data (i32.const 163011) "a") (data (i32.const 163014) "a") (data (i32.const 163017) "a") (data (i32.const 163020) "a") (data (i32.const 163023) "a") (data (i32.const 163026) "a") (data (i32.const 163029) "a") (data (i32.const 163032) "a") (data (i32.const 163035) "a") (data (i32.const 163038) "a") (data (i32.const 163041) "a") (data (i32.const 163044) "a") (data (i32.const 163047) "a") (data (i32.const 163050) "a") (data (i32.const 163053) "a") (data (i32.const 163056) "a") (data (i32.const 163059) "a") (data (i32.const 163062) "a") (data (i32.const 163065) "a") (data (i32.const 163068) "a") (data (i32.const 163071) "a") (data (i32.const 163074) "a") (data (i32.const 163077) "a") (data (i32.const 163080) "a") (data (i32.const 163083) "a") (data (i32.const 163086) "a") (data (i32.const 163089) "a") (data (i32.const 163092) "a") (data (i32.const 163095) "a") (data (i32.const 163098) "a") (data (i32.const 163101) "a") (data (i32.const 163104) "a") (data (i32.const 163107) "a") (data (i32.const 163110) "a") (data (i32.const 163113) "a") (data (i32.const 163116) "a") (data (i32.const 163119) "a") (data (i32.const 163122) "a") (data (i32.const 163125) "a") (data (i32.const 163128) "a") (data (i32.const 163131) "a") (data (i32.const 163134) "a") (data (i32.const 163137) "a") (data (i32.const 163140) "a") (data (i32.const 163143) "a") (data (i32.const 163146) "a") (data (i32.const 163149) "a") (data (i32.const 163152) "a") (data (i32.const 163155) "a") (data (i32.const 163158) "a") (data (i32.const 163161) "a") (data (i32.const 163164) "a") (data (i32.const 163167) "a") (data (i32.const 163170) "a") (data (i32.const 163173) "a") (data (i32.const 163176) "a") (data (i32.const 163179) "a") (data (i32.const 163182) "a") (data (i32.const 163185) "a") (data (i32.const 163188) "a") (data (i32.const 163191) "a") (data (i32.const 163194) "a") (data (i32.const 163197) "a") (data (i32.const 163200) "a") (data (i32.const 163203) "a") (data (i32.const 163206) "a") (data (i32.const 163209) "a") (data (i32.const 163212) "a") (data (i32.const 163215) "a") (data (i32.const 163218) "a") (data (i32.const 163221) "a") (data (i32.const 163224) "a") (data (i32.const 163227) "a") (data (i32.const 163230) "a") (data (i32.const 163233) "a") (data (i32.const 163236) "a") (data (i32.const 163239) "a") (data (i32.const 163242) "a") (data (i32.const 163245) "a") (data (i32.const 163248) "a") (data (i32.const 163251) "a") (data (i32.const 163254) "a") (data (i32.const 163257) "a") (data (i32.const 163260) "a") (data (i32.const 163263) "a") (data (i32.const 163266) "a") (data (i32.const 163269) "a") (data (i32.const 163272) "a") (data (i32.const 163275) "a") (data (i32.const 163278) "a") (data (i32.const 163281) "a") (data (i32.const 163284) "a") (data (i32.const 163287) "a") (data (i32.const 163290) "a") (data (i32.const 163293) "a") (data (i32.const 163296) "a") (data (i32.const 163299) "a") (data (i32.const 163302) "a") (data (i32.const 163305) "a") (data (i32.const 163308) "a") (data (i32.const 163311) "a") (data (i32.const 163314) "a") (data (i32.const 163317) "a") (data (i32.const 163320) "a") (data (i32.const 163323) "a") (data (i32.const 163326) "a") (data (i32.const 163329) "a") (data (i32.const 163332) "a") (data (i32.const 163335) "a") (data (i32.const 163338) "a") (data (i32.const 163341) "a") (data (i32.const 163344) "a") (data (i32.const 163347) "a") (data (i32.const 163350) "a") (data (i32.const 163353) "a") (data (i32.const 163356) "a") (data (i32.const 163359) "a") (data (i32.const 163362) "a") (data (i32.const 163365) "a") (data (i32.const 163368) "a") (data (i32.const 163371) "a") (data (i32.const 163374) "a") (data (i32.const 163377) "a") (data (i32.const 163380) "a") (data (i32.const 163383) "a") (data (i32.const 163386) "a") (data (i32.const 163389) "a") (data (i32.const 163392) "a") (data (i32.const 163395) "a") (data (i32.const 163398) "a") (data (i32.const 163401) "a") (data (i32.const 163404) "a") (data (i32.const 163407) "a") (data (i32.const 163410) "a") (data (i32.const 163413) "a") (data (i32.const 163416) "a") (data (i32.const 163419) "a") (data (i32.const 163422) "a") (data (i32.const 163425) "a") (data (i32.const 163428) "a") (data (i32.const 163431) "a") (data (i32.const 163434) "a") (data (i32.const 163437) "a") (data (i32.const 163440) "a") (data (i32.const 163443) "a") (data (i32.const 163446) "a") (data (i32.const 163449) "a") (data (i32.const 163452) "a") (data (i32.const 163455) "a") (data (i32.const 163458) "a") (data (i32.const 163461) "a") (data (i32.const 163464) "a") (data (i32.const 163467) "a") (data (i32.const 163470) "a") (data (i32.const 163473) "a") (data (i32.const 163476) "a") (data (i32.const 163479) "a") (data (i32.const 163482) "a") (data (i32.const 163485) "a") (data (i32.const 163488) "a") (data (i32.const 163491) "a") (data (i32.const 163494) "a") (data (i32.const 163497) "a") (data (i32.const 163500) "a") (data (i32.const 163503) "a") (data (i32.const 163506) "a") (data (i32.const 163509) "a") (data (i32.const 163512) "a") (data (i32.const 163515) "a") (data (i32.const 163518) "a") (data (i32.const 163521) "a") (data (i32.const 163524) "a") (data (i32.const 163527) "a") (data (i32.const 163530) "a") (data (i32.const 163533) "a") (data (i32.const 163536) "a") (data (i32.const 163539) "a") (data (i32.const 163542) "a") (data (i32.const 163545) "a") (data (i32.const 163548) "a") (data (i32.const 163551) "a") (data (i32.const 163554) "a") (data (i32.const 163557) "a") (data (i32.const 163560) "a") (data (i32.const 163563) "a") (data (i32.const 163566) "a") (data (i32.const 163569) "a") (data (i32.const 163572) "a") (data (i32.const 163575) "a") (data (i32.const 163578) "a") (data (i32.const 163581) "a") (data (i32.const 163584) "a") (data (i32.const 163587) "a") (data (i32.const 163590) "a") (data (i32.const 163593) "a") (data (i32.const 163596) "a") (data (i32.const 163599) "a") (data (i32.const 163602) "a") (data (i32.const 163605) "a") (data (i32.const 163608) "a") (data (i32.const 163611) "a") (data (i32.const 163614) "a") (data (i32.const 163617) "a") (data (i32.const 163620) "a") (data (i32.const 163623) "a") (data (i32.const 163626) "a") (data (i32.const 163629) "a") (data (i32.const 163632) "a") (data (i32.const 163635) "a") (data (i32.const 163638) "a") (data (i32.const 163641) "a") (data (i32.const 163644) "a") (data (i32.const 163647) "a") (data (i32.const 163650) "a") (data (i32.const 163653) "a") (data (i32.const 163656) "a") (data (i32.const 163659) "a") (data (i32.const 163662) "a") (data (i32.const 163665) "a") (data (i32.const 163668) "a") (data (i32.const 163671) "a") (data (i32.const 163674) "a") (data (i32.const 163677) "a") (data (i32.const 163680) "a") (data (i32.const 163683) "a") (data (i32.const 163686) "a") (data (i32.const 163689) "a") (data (i32.const 163692) "a") (data (i32.const 163695) "a") (data (i32.const 163698) "a") (data (i32.const 163701) "a") (data (i32.const 163704) "a") (data (i32.const 163707) "a") (data (i32.const 163710) "a") (data (i32.const 163713) "a") (data (i32.const 163716) "a") (data (i32.const 163719) "a") (data (i32.const 163722) "a") (data (i32.const 163725) "a") (data (i32.const 163728) "a") (data (i32.const 163731) "a") (data (i32.const 163734) "a") (data (i32.const 163737) "a") (data (i32.const 163740) "a") (data (i32.const 163743) "a") (data (i32.const 163746) "a") (data (i32.const 163749) "a") (data (i32.const 163752) "a") (data (i32.const 163755) "a") (data (i32.const 163758) "a") (data (i32.const 163761) "a") (data (i32.const 163764) "a") (data (i32.const 163767) "a") (data (i32.const 163770) "a") (data (i32.const 163773) "a") (data (i32.const 163776) "a") (data (i32.const 163779) "a") (data (i32.const 163782) "a") (data (i32.const 163785) "a") (data (i32.const 163788) "a") (data (i32.const 163791) "a") (data (i32.const 163794) "a") (data (i32.const 163797) "a") (data (i32.const 163800) "a") (data (i32.const 163803) "a") (data (i32.const 163806) "a") (data (i32.const 163809) "a") (data (i32.const 163812) "a") (data (i32.const 163815) "a") (data (i32.const 163818) "a") (data (i32.const 163821) "a") (data (i32.const 163824) "a") (data (i32.const 163827) "a") (data (i32.const 163830) "a") (data (i32.const 163833) "a") (data (i32.const 163836) "a") (data (i32.const 163839) "a") (data (i32.const 163842) "a") (data (i32.const 163845) "a") (data (i32.const 163848) "a") (data (i32.const 163851) "a") (data (i32.const 163854) "a") (data (i32.const 163857) "a") (data (i32.const 163860) "a") (data (i32.const 163863) "a") (data (i32.const 163866) "a") (data (i32.const 163869) "a") (data (i32.const 163872) "a") (data (i32.const 163875) "a") (data (i32.const 163878) "a") (data (i32.const 163881) "a") (data (i32.const 163884) "a") (data (i32.const 163887) "a") (data (i32.const 163890) "a") (data (i32.const 163893) "a") (data (i32.const 163896) "a") (data (i32.const 163899) "a") (data (i32.const 163902) "a") (data (i32.const 163905) "a") (data (i32.const 163908) "a") (data (i32.const 163911) "a") (data (i32.const 163914) "a") (data (i32.const 163917) "a") (data (i32.const 163920) "a") (data (i32.const 163923) "a") (data (i32.const 163926) "a") (data (i32.const 163929) "a") (data (i32.const 163932) "a") (data (i32.const 163935) "a") (data (i32.const 163938) "a") (data (i32.const 163941) "a") (data (i32.const 163944) "a") (data (i32.const 163947) "a") (data (i32.const 163950) "a") (data (i32.const 163953) "a") (data (i32.const 163956) "a") (data (i32.const 163959) "a") (data (i32.const 163962) "a") (data (i32.const 163965) "a") (data (i32.const 163968) "a") (data (i32.const 163971) "a") (data (i32.const 163974) "a") (data (i32.const 163977) "a") (data (i32.const 163980) "a") (data (i32.const 163983) "a") (data (i32.const 163986) "a") (data (i32.const 163989) "a") (data (i32.const 163992) "a") (data (i32.const 163995) "a") (data (i32.const 163998) "a") (data (i32.const 164001) "a") (data (i32.const 164004) "a") (data (i32.const 164007) "a") (data (i32.const 164010) "a") (data (i32.const 164013) "a") (data (i32.const 164016) "a") (data (i32.const 164019) "a") (data (i32.const 164022) "a") (data (i32.const 164025) "a") (data (i32.const 164028) "a") (data (i32.const 164031) "a") (data (i32.const 164034) "a") (data (i32.const 164037) "a") (data (i32.const 164040) "a") (data (i32.const 164043) "a") (data (i32.const 164046) "a") (data (i32.const 164049) "a") (data (i32.const 164052) "a") (data (i32.const 164055) "a") (data (i32.const 164058) "a") (data (i32.const 164061) "a") (data (i32.const 164064) "a") (data (i32.const 164067) "a") (data (i32.const 164070) "a") (data (i32.const 164073) "a") (data (i32.const 164076) "a") (data (i32.const 164079) "a") (data (i32.const 164082) "a") (data (i32.const 164085) "a") (data (i32.const 164088) "a") (data (i32.const 164091) "a") (data (i32.const 164094) "a") (data (i32.const 164097) "a") (data (i32.const 164100) "a") (data (i32.const 164103) "a") (data (i32.const 164106) "a") (data (i32.const 164109) "a") (data (i32.const 164112) "a") (data (i32.const 164115) "a") (data (i32.const 164118) "a") (data (i32.const 164121) "a") (data (i32.const 164124) "a") (data (i32.const 164127) "a") (data (i32.const 164130) "a") (data (i32.const 164133) "a") (data (i32.const 164136) "a") (data (i32.const 164139) "a") (data (i32.const 164142) "a") (data (i32.const 164145) "a") (data (i32.const 164148) "a") (data (i32.const 164151) "a") (data (i32.const 164154) "a") (data (i32.const 164157) "a") (data (i32.const 164160) "a") (data (i32.const 164163) "a") (data (i32.const 164166) "a") (data (i32.const 164169) "a") (data (i32.const 164172) "a") (data (i32.const 164175) "a") (data (i32.const 164178) "a") (data (i32.const 164181) "a") (data (i32.const 164184) "a") (data (i32.const 164187) "a") (data (i32.const 164190) "a") (data (i32.const 164193) "a") (data (i32.const 164196) "a") (data (i32.const 164199) "a") (data (i32.const 164202) "a") (data (i32.const 164205) "a") (data (i32.const 164208) "a") (data (i32.const 164211) "a") (data (i32.const 164214) "a") (data (i32.const 164217) "a") (data (i32.const 164220) "a") (data (i32.const 164223) "a") (data (i32.const 164226) "a") (data (i32.const 164229) "a") (data (i32.const 164232) "a") (data (i32.const 164235) "a") (data (i32.const 164238) "a") (data (i32.const 164241) "a") (data (i32.const 164244) "a") (data (i32.const 164247) "a") (data (i32.const 164250) "a") (data (i32.const 164253) "a") (data (i32.const 164256) "a") (data (i32.const 164259) "a") (data (i32.const 164262) "a") (data (i32.const 164265) "a") (data (i32.const 164268) "a") (data (i32.const 164271) "a") (data (i32.const 164274) "a") (data (i32.const 164277) "a") (data (i32.const 164280) "a") (data (i32.const 164283) "a") (data (i32.const 164286) "a") (data (i32.const 164289) "a") (data (i32.const 164292) "a") (data (i32.const 164295) "a") (data (i32.const 164298) "a") (data (i32.const 164301) "a") (data (i32.const 164304) "a") (data (i32.const 164307) "a") (data (i32.const 164310) "a") (data (i32.const 164313) "a") (data (i32.const 164316) "a") (data (i32.const 164319) "a") (data (i32.const 164322) "a") (data (i32.const 164325) "a") (data (i32.const 164328) "a") (data (i32.const 164331) "a") (data (i32.const 164334) "a") (data (i32.const 164337) "a") (data (i32.const 164340) "a") (data (i32.const 164343) "a") (data (i32.const 164346) "a") (data (i32.const 164349) "a") (data (i32.const 164352) "a") (data (i32.const 164355) "a") (data (i32.const 164358) "a") (data (i32.const 164361) "a") (data (i32.const 164364) "a") (data (i32.const 164367) "a") (data (i32.const 164370) "a") (data (i32.const 164373) "a") (data (i32.const 164376) "a") (data (i32.const 164379) "a") (data (i32.const 164382) "a") (data (i32.const 164385) "a") (data (i32.const 164388) "a") (data (i32.const 164391) "a") (data (i32.const 164394) "a") (data (i32.const 164397) "a") (data (i32.const 164400) "a") (data (i32.const 164403) "a") (data (i32.const 164406) "a") (data (i32.const 164409) "a") (data (i32.const 164412) "a") (data (i32.const 164415) "a") (data (i32.const 164418) "a") (data (i32.const 164421) "a") (data (i32.const 164424) "a") (data (i32.const 164427) "a") (data (i32.const 164430) "a") (data (i32.const 164433) "a") (data (i32.const 164436) "a") (data (i32.const 164439) "a") (data (i32.const 164442) "a") (data (i32.const 164445) "a") (data (i32.const 164448) "a") (data (i32.const 164451) "a") (data (i32.const 164454) "a") (data (i32.const 164457) "a") (data (i32.const 164460) "a") (data (i32.const 164463) "a") (data (i32.const 164466) "a") (data (i32.const 164469) "a") (data (i32.const 164472) "a") (data (i32.const 164475) "a") (data (i32.const 164478) "a") (data (i32.const 164481) "a") (data (i32.const 164484) "a") (data (i32.const 164487) "a") (data (i32.const 164490) "a") (data (i32.const 164493) "a") (data (i32.const 164496) "a") (data (i32.const 164499) "a") (data (i32.const 164502) "a") (data (i32.const 164505) "a") (data (i32.const 164508) "a") (data (i32.const 164511) "a") (data (i32.const 164514) "a") (data (i32.const 164517) "a") (data (i32.const 164520) "a") (data (i32.const 164523) "a") (data (i32.const 164526) "a") (data (i32.const 164529) "a") (data (i32.const 164532) "a") (data (i32.const 164535) "a") (data (i32.const 164538) "a") (data (i32.const 164541) "a") (data (i32.const 164544) "a") (data (i32.const 164547) "a") (data (i32.const 164550) "a") (data (i32.const 164553) "a") (data (i32.const 164556) "a") (data (i32.const 164559) "a") (data (i32.const 164562) "a") (data (i32.const 164565) "a") (data (i32.const 164568) "a") (data (i32.const 164571) "a") (data (i32.const 164574) "a") (data (i32.const 164577) "a") (data (i32.const 164580) "a") (data (i32.const 164583) "a") (data (i32.const 164586) "a") (data (i32.const 164589) "a") (data (i32.const 164592) "a") (data (i32.const 164595) "a") (data (i32.const 164598) "a") (data (i32.const 164601) "a") (data (i32.const 164604) "a") (data (i32.const 164607) "a") (data (i32.const 164610) "a") (data (i32.const 164613) "a") (data (i32.const 164616) "a") (data (i32.const 164619) "a") (data (i32.const 164622) "a") (data (i32.const 164625) "a") (data (i32.const 164628) "a") (data (i32.const 164631) "a") (data (i32.const 164634) "a") (data (i32.const 164637) "a") (data (i32.const 164640) "a") (data (i32.const 164643) "a") (data (i32.const 164646) "a") (data (i32.const 164649) "a") (data (i32.const 164652) "a") (data (i32.const 164655) "a") (data (i32.const 164658) "a") (data (i32.const 164661) "a") (data (i32.const 164664) "a") (data (i32.const 164667) "a") (data (i32.const 164670) "a") (data (i32.const 164673) "a") (data (i32.const 164676) "a") (data (i32.const 164679) "a") (data (i32.const 164682) "a") (data (i32.const 164685) "a") (data (i32.const 164688) "a") (data (i32.const 164691) "a") (data (i32.const 164694) "a") (data (i32.const 164697) "a") (data (i32.const 164700) "a") (data (i32.const 164703) "a") (data (i32.const 164706) "a") (data (i32.const 164709) "a") (data (i32.const 164712) "a") (data (i32.const 164715) "a") (data (i32.const 164718) "a") (data (i32.const 164721) "a") (data (i32.const 164724) "a") (data (i32.const 164727) "a") (data (i32.const 164730) "a") (data (i32.const 164733) "a") (data (i32.const 164736) "a") (data (i32.const 164739) "a") (data (i32.const 164742) "a") (data (i32.const 164745) "a") (data (i32.const 164748) "a") (data (i32.const 164751) "a") (data (i32.const 164754) "a") (data (i32.const 164757) "a") (data (i32.const 164760) "a") (data (i32.const 164763) "a") (data (i32.const 164766) "a") (data (i32.const 164769) "a") (data (i32.const 164772) "a") (data (i32.const 164775) "a") (data (i32.const 164778) "a") (data (i32.const 164781) "a") (data (i32.const 164784) "a") (data (i32.const 164787) "a") (data (i32.const 164790) "a") (data (i32.const 164793) "a") (data (i32.const 164796) "a") (data (i32.const 164799) "a") (data (i32.const 164802) "a") (data (i32.const 164805) "a") (data (i32.const 164808) "a") (data (i32.const 164811) "a") (data (i32.const 164814) "a") (data (i32.const 164817) "a") (data (i32.const 164820) "a") (data (i32.const 164823) "a") (data (i32.const 164826) "a") (data (i32.const 164829) "a") (data (i32.const 164832) "a") (data (i32.const 164835) "a") (data (i32.const 164838) "a") (data (i32.const 164841) "a") (data (i32.const 164844) "a") (data (i32.const 164847) "a") (data (i32.const 164850) "a") (data (i32.const 164853) "a") (data (i32.const 164856) "a") (data (i32.const 164859) "a") (data (i32.const 164862) "a") (data (i32.const 164865) "a") (data (i32.const 164868) "a") (data (i32.const 164871) "a") (data (i32.const 164874) "a") (data (i32.const 164877) "a") (data (i32.const 164880) "a") (data (i32.const 164883) "a") (data (i32.const 164886) "a") (data (i32.const 164889) "a") (data (i32.const 164892) "a") (data (i32.const 164895) "a") (data (i32.const 164898) "a") (data (i32.const 164901) "a") (data (i32.const 164904) "a") (data (i32.const 164907) "a") (data (i32.const 164910) "a") (data (i32.const 164913) "a") (data (i32.const 164916) "a") (data (i32.const 164919) "a") (data (i32.const 164922) "a") (data (i32.const 164925) "a") (data (i32.const 164928) "a") (data (i32.const 164931) "a") (data (i32.const 164934) "a") (data (i32.const 164937) "a") (data (i32.const 164940) "a") (data (i32.const 164943) "a") (data (i32.const 164946) "a") (data (i32.const 164949) "a") (data (i32.const 164952) "a") (data (i32.const 164955) "a") (data (i32.const 164958) "a") (data (i32.const 164961) "a") (data (i32.const 164964) "a") (data (i32.const 164967) "a") (data (i32.const 164970) "a") (data (i32.const 164973) "a") (data (i32.const 164976) "a") (data (i32.const 164979) "a") (data (i32.const 164982) "a") (data (i32.const 164985) "a") (data (i32.const 164988) "a") (data (i32.const 164991) "a") (data (i32.const 164994) "a") (data (i32.const 164997) "a") (data (i32.const 165000) "a") (data (i32.const 165003) "a") (data (i32.const 165006) "a") (data (i32.const 165009) "a") (data (i32.const 165012) "a") (data (i32.const 165015) "a") (data (i32.const 165018) "a") (data (i32.const 165021) "a") (data (i32.const 165024) "a") (data (i32.const 165027) "a") (data (i32.const 165030) "a") (data (i32.const 165033) "a") (data (i32.const 165036) "a") (data (i32.const 165039) "a") (data (i32.const 165042) "a") (data (i32.const 165045) "a") (data (i32.const 165048) "a") (data (i32.const 165051) "a") (data (i32.const 165054) "a") (data (i32.const 165057) "a") (data (i32.const 165060) "a") (data (i32.const 165063) "a") (data (i32.const 165066) "a") (data (i32.const 165069) "a") (data (i32.const 165072) "a") (data (i32.const 165075) "a") (data (i32.const 165078) "a") (data (i32.const 165081) "a") (data (i32.const 165084) "a") (data (i32.const 165087) "a") (data (i32.const 165090) "a") (data (i32.const 165093) "a") (data (i32.const 165096) "a") (data (i32.const 165099) "a") (data (i32.const 165102) "a") (data (i32.const 165105) "a") (data (i32.const 165108) "a") (data (i32.const 165111) "a") (data (i32.const 165114) "a") (data (i32.const 165117) "a") (data (i32.const 165120) "a") (data (i32.const 165123) "a") (data (i32.const 165126) "a") (data (i32.const 165129) "a") (data (i32.const 165132) "a") (data (i32.const 165135) "a") (data (i32.const 165138) "a") (data (i32.const 165141) "a") (data (i32.const 165144) "a") (data (i32.const 165147) "a") (data (i32.const 165150) "a") (data (i32.const 165153) "a") (data (i32.const 165156) "a") (data (i32.const 165159) "a") (data (i32.const 165162) "a") (data (i32.const 165165) "a") (data (i32.const 165168) "a") (data (i32.const 165171) "a") (data (i32.const 165174) "a") (data (i32.const 165177) "a") (data (i32.const 165180) "a") (data (i32.const 165183) "a") (data (i32.const 165186) "a") (data (i32.const 165189) "a") (data (i32.const 165192) "a") (data (i32.const 165195) "a") (data (i32.const 165198) "a") (data (i32.const 165201) "a") (data (i32.const 165204) "a") (data (i32.const 165207) "a") (data (i32.const 165210) "a") (data (i32.const 165213) "a") (data (i32.const 165216) "a") (data (i32.const 165219) "a") (data (i32.const 165222) "a") (data (i32.const 165225) "a") (data (i32.const 165228) "a") (data (i32.const 165231) "a") (data (i32.const 165234) "a") (data (i32.const 165237) "a") (data (i32.const 165240) "a") (data (i32.const 165243) "a") (data (i32.const 165246) "a") (data (i32.const 165249) "a") (data (i32.const 165252) "a") (data (i32.const 165255) "a") (data (i32.const 165258) "a") (data (i32.const 165261) "a") (data (i32.const 165264) "a") (data (i32.const 165267) "a") (data (i32.const 165270) "a") (data (i32.const 165273) "a") (data (i32.const 165276) "a") (data (i32.const 165279) "a") (data (i32.const 165282) "a") (data (i32.const 165285) "a") (data (i32.const 165288) "a") (data (i32.const 165291) "a") (data (i32.const 165294) "a") (data (i32.const 165297) "a") (data (i32.const 165300) "a") (data (i32.const 165303) "a") (data (i32.const 165306) "a") (data (i32.const 165309) "a") (data (i32.const 165312) "a") (data (i32.const 165315) "a") (data (i32.const 165318) "a") (data (i32.const 165321) "a") (data (i32.const 165324) "a") (data (i32.const 165327) "a") (data (i32.const 165330) "a") (data (i32.const 165333) "a") (data (i32.const 165336) "a") (data (i32.const 165339) "a") (data (i32.const 165342) "a") (data (i32.const 165345) "a") (data (i32.const 165348) "a") (data (i32.const 165351) "a") (data (i32.const 165354) "a") (data (i32.const 165357) "a") (data (i32.const 165360) "a") (data (i32.const 165363) "a") (data (i32.const 165366) "a") (data (i32.const 165369) "a") (data (i32.const 165372) "a") (data (i32.const 165375) "a") (data (i32.const 165378) "a") (data (i32.const 165381) "a") (data (i32.const 165384) "a") (data (i32.const 165387) "a") (data (i32.const 165390) "a") (data (i32.const 165393) "a") (data (i32.const 165396) "a") (data (i32.const 165399) "a") (data (i32.const 165402) "a") (data (i32.const 165405) "a") (data (i32.const 165408) "a") (data (i32.const 165411) "a") (data (i32.const 165414) "a") (data (i32.const 165417) "a") (data (i32.const 165420) "a") (data (i32.const 165423) "a") (data (i32.const 165426) "a") (data (i32.const 165429) "a") (data (i32.const 165432) "a") (data (i32.const 165435) "a") (data (i32.const 165438) "a") (data (i32.const 165441) "a") (data (i32.const 165444) "a") (data (i32.const 165447) "a") (data (i32.const 165450) "a") (data (i32.const 165453) "a") (data (i32.const 165456) "a") (data (i32.const 165459) "a") (data (i32.const 165462) "a") (data (i32.const 165465) "a") (data (i32.const 165468) "a") (data (i32.const 165471) "a") (data (i32.const 165474) "a") (data (i32.const 165477) "a") (data (i32.const 165480) "a") (data (i32.const 165483) "a") (data (i32.const 165486) "a") (data (i32.const 165489) "a") (data (i32.const 165492) "a") (data (i32.const 165495) "a") (data (i32.const 165498) "a") (data (i32.const 165501) "a") (data (i32.const 165504) "a") (data (i32.const 165507) "a") (data (i32.const 165510) "a") (data (i32.const 165513) "a") (data (i32.const 165516) "a") (data (i32.const 165519) "a") (data (i32.const 165522) "a") (data (i32.const 165525) "a") (data (i32.const 165528) "a") (data (i32.const 165531) "a") (data (i32.const 165534) "a") (data (i32.const 165537) "a") (data (i32.const 165540) "a") (data (i32.const 165543) "a") (data (i32.const 165546) "a") (data (i32.const 165549) "a") (data (i32.const 165552) "a") (data (i32.const 165555) "a") (data (i32.const 165558) "a") (data (i32.const 165561) "a") (data (i32.const 165564) "a") (data (i32.const 165567) "a") (data (i32.const 165570) "a") (data (i32.const 165573) "a") (data (i32.const 165576) "a") (data (i32.const 165579) "a") (data (i32.const 165582) "a") (data (i32.const 165585) "a") (data (i32.const 165588) "a") (data (i32.const 165591) "a") (data (i32.const 165594) "a") (data (i32.const 165597) "a") (data (i32.const 165600) "a") (data (i32.const 165603) "a") (data (i32.const 165606) "a") (data (i32.const 165609) "a") (data (i32.const 165612) "a") (data (i32.const 165615) "a") (data (i32.const 165618) "a") (data (i32.const 165621) "a") (data (i32.const 165624) "a") (data (i32.const 165627) "a") (data (i32.const 165630) "a") (data (i32.const 165633) "a") (data (i32.const 165636) "a") (data (i32.const 165639) "a") (data (i32.const 165642) "a") (data (i32.const 165645) "a") (data (i32.const 165648) "a") (data (i32.const 165651) "a") (data (i32.const 165654) "a") (data (i32.const 165657) "a") (data (i32.const 165660) "a") (data (i32.const 165663) "a") (data (i32.const 165666) "a") (data (i32.const 165669) "a") (data (i32.const 165672) "a") (data (i32.const 165675) "a") (data (i32.const 165678) "a") (data (i32.const 165681) "a") (data (i32.const 165684) "a") (data (i32.const 165687) "a") (data (i32.const 165690) "a") (data (i32.const 165693) "a") (data (i32.const 165696) "a") (data (i32.const 165699) "a") (data (i32.const 165702) "a") (data (i32.const 165705) "a") (data (i32.const 165708) "a") (data (i32.const 165711) "a") (data (i32.const 165714) "a") (data (i32.const 165717) "a") (data (i32.const 165720) "a") (data (i32.const 165723) "a") (data (i32.const 165726) "a") (data (i32.const 165729) "a") (data (i32.const 165732) "a") (data (i32.const 165735) "a") (data (i32.const 165738) "a") (data (i32.const 165741) "a") (data (i32.const 165744) "a") (data (i32.const 165747) "a") (data (i32.const 165750) "a") (data (i32.const 165753) "a") (data (i32.const 165756) "a") (data (i32.const 165759) "a") (data (i32.const 165762) "a") (data (i32.const 165765) "a") (data (i32.const 165768) "a") (data (i32.const 165771) "a") (data (i32.const 165774) "a") (data (i32.const 165777) "a") (data (i32.const 165780) "a") (data (i32.const 165783) "a") (data (i32.const 165786) "a") (data (i32.const 165789) "a") (data (i32.const 165792) "a") (data (i32.const 165795) "a") (data (i32.const 165798) "a") (data (i32.const 165801) "a") (data (i32.const 165804) "a") (data (i32.const 165807) "a") (data (i32.const 165810) "a") (data (i32.const 165813) "a") (data (i32.const 165816) "a") (data (i32.const 165819) "a") (data (i32.const 165822) "a") (data (i32.const 165825) "a") (data (i32.const 165828) "a") (data (i32.const 165831) "a") (data (i32.const 165834) "a") (data (i32.const 165837) "a") (data (i32.const 165840) "a") (data (i32.const 165843) "a") (data (i32.const 165846) "a") (data (i32.const 165849) "a") (data (i32.const 165852) "a") (data (i32.const 165855) "a") (data (i32.const 165858) "a") (data (i32.const 165861) "a") (data (i32.const 165864) "a") (data (i32.const 165867) "a") (data (i32.const 165870) "a") (data (i32.const 165873) "a") (data (i32.const 165876) "a") (data (i32.const 165879) "a") (data (i32.const 165882) "a") (data (i32.const 165885) "a") (data (i32.const 165888) "a") (data (i32.const 165891) "a") (data (i32.const 165894) "a") (data (i32.const 165897) "a") (data (i32.const 165900) "a") (data (i32.const 165903) "a") (data (i32.const 165906) "a") (data (i32.const 165909) "a") (data (i32.const 165912) "a") (data (i32.const 165915) "a") (data (i32.const 165918) "a") (data (i32.const 165921) "a") (data (i32.const 165924) "a") (data (i32.const 165927) "a") (data (i32.const 165930) "a") (data (i32.const 165933) "a") (data (i32.const 165936) "a") (data (i32.const 165939) "a") (data (i32.const 165942) "a") (data (i32.const 165945) "a") (data (i32.const 165948) "a") (data (i32.const 165951) "a") (data (i32.const 165954) "a") (data (i32.const 165957) "a") (data (i32.const 165960) "a") (data (i32.const 165963) "a") (data (i32.const 165966) "a") (data (i32.const 165969) "a") (data (i32.const 165972) "a") (data (i32.const 165975) "a") (data (i32.const 165978) "a") (data (i32.const 165981) "a") (data (i32.const 165984) "a") (data (i32.const 165987) "a") (data (i32.const 165990) "a") (data (i32.const 165993) "a") (data (i32.const 165996) "a") (data (i32.const 165999) "a") (data (i32.const 166002) "a") (data (i32.const 166005) "a") (data (i32.const 166008) "a") (data (i32.const 166011) "a") (data (i32.const 166014) "a") (data (i32.const 166017) "a") (data (i32.const 166020) "a") (data (i32.const 166023) "a") (data (i32.const 166026) "a") (data (i32.const 166029) "a") (data (i32.const 166032) "a") (data (i32.const 166035) "a") (data (i32.const 166038) "a") (data (i32.const 166041) "a") (data (i32.const 166044) "a") (data (i32.const 166047) "a") (data (i32.const 166050) "a") (data (i32.const 166053) "a") (data (i32.const 166056) "a") (data (i32.const 166059) "a") (data (i32.const 166062) "a") (data (i32.const 166065) "a") (data (i32.const 166068) "a") (data (i32.const 166071) "a") (data (i32.const 166074) "a") (data (i32.const 166077) "a") (data (i32.const 166080) "a") (data (i32.const 166083) "a") (data (i32.const 166086) "a") (data (i32.const 166089) "a") (data (i32.const 166092) "a") (data (i32.const 166095) "a") (data (i32.const 166098) "a") (data (i32.const 166101) "a") (data (i32.const 166104) "a") (data (i32.const 166107) "a") (data (i32.const 166110) "a") (data (i32.const 166113) "a") (data (i32.const 166116) "a") (data (i32.const 166119) "a") (data (i32.const 166122) "a") (data (i32.const 166125) "a") (data (i32.const 166128) "a") (data (i32.const 166131) "a") (data (i32.const 166134) "a") (data (i32.const 166137) "a") (data (i32.const 166140) "a") (data (i32.const 166143) "a") (data (i32.const 166146) "a") (data (i32.const 166149) "a") (data (i32.const 166152) "a") (data (i32.const 166155) "a") (data (i32.const 166158) "a") (data (i32.const 166161) "a") (data (i32.const 166164) "a") (data (i32.const 166167) "a") (data (i32.const 166170) "a") (data (i32.const 166173) "a") (data (i32.const 166176) "a") (data (i32.const 166179) "a") (data (i32.const 166182) "a") (data (i32.const 166185) "a") (data (i32.const 166188) "a") (data (i32.const 166191) "a") (data (i32.const 166194) "a") (data (i32.const 166197) "a") (data (i32.const 166200) "a") (data (i32.const 166203) "a") (data (i32.const 166206) "a") (data (i32.const 166209) "a") (data (i32.const 166212) "a") (data (i32.const 166215) "a") (data (i32.const 166218) "a") (data (i32.const 166221) "a") (data (i32.const 166224) "a") (data (i32.const 166227) "a") (data (i32.const 166230) "a") (data (i32.const 166233) "a") (data (i32.const 166236) "a") (data (i32.const 166239) "a") (data (i32.const 166242) "a") (data (i32.const 166245) "a") (data (i32.const 166248) "a") (data (i32.const 166251) "a") (data (i32.const 166254) "a") (data (i32.const 166257) "a") (data (i32.const 166260) "a") (data (i32.const 166263) "a") (data (i32.const 166266) "a") (data (i32.const 166269) "a") (data (i32.const 166272) "a") (data (i32.const 166275) "a") (data (i32.const 166278) "a") (data (i32.const 166281) "a") (data (i32.const 166284) "a") (data (i32.const 166287) "a") (data (i32.const 166290) "a") (data (i32.const 166293) "a") (data (i32.const 166296) "a") (data (i32.const 166299) "a") (data (i32.const 166302) "a") (data (i32.const 166305) "a") (data (i32.const 166308) "a") (data (i32.const 166311) "a") (data (i32.const 166314) "a") (data (i32.const 166317) "a") (data (i32.const 166320) "a") (data (i32.const 166323) "a") (data (i32.const 166326) "a") (data (i32.const 166329) "a") (data (i32.const 166332) "a") (data (i32.const 166335) "a") (data (i32.const 166338) "a") (data (i32.const 166341) "a") (data (i32.const 166344) "a") (data (i32.const 166347) "a") (data (i32.const 166350) "a") (data (i32.const 166353) "a") (data (i32.const 166356) "a") (data (i32.const 166359) "a") (data (i32.const 166362) "a") (data (i32.const 166365) "a") (data (i32.const 166368) "a") (data (i32.const 166371) "a") (data (i32.const 166374) "a") (data (i32.const 166377) "a") (data (i32.const 166380) "a") (data (i32.const 166383) "a") (data (i32.const 166386) "a") (data (i32.const 166389) "a") (data (i32.const 166392) "a") (data (i32.const 166395) "a") (data (i32.const 166398) "a") (data (i32.const 166401) "a") (data (i32.const 166404) "a") (data (i32.const 166407) "a") (data (i32.const 166410) "a") (data (i32.const 166413) "a") (data (i32.const 166416) "a") (data (i32.const 166419) "a") (data (i32.const 166422) "a") (data (i32.const 166425) "a") (data (i32.const 166428) "a") (data (i32.const 166431) "a") (data (i32.const 166434) "a") (data (i32.const 166437) "a") (data (i32.const 166440) "a") (data (i32.const 166443) "a") (data (i32.const 166446) "a") (data (i32.const 166449) "a") (data (i32.const 166452) "a") (data (i32.const 166455) "a") (data (i32.const 166458) "a") (data (i32.const 166461) "a") (data (i32.const 166464) "a") (data (i32.const 166467) "a") (data (i32.const 166470) "a") (data (i32.const 166473) "a") (data (i32.const 166476) "a") (data (i32.const 166479) "a") (data (i32.const 166482) "a") (data (i32.const 166485) "a") (data (i32.const 166488) "a") (data (i32.const 166491) "a") (data (i32.const 166494) "a") (data (i32.const 166497) "a") (data (i32.const 166500) "a") (data (i32.const 166503) "a") (data (i32.const 166506) "a") (data (i32.const 166509) "a") (data (i32.const 166512) "a") (data (i32.const 166515) "a") (data (i32.const 166518) "a") (data (i32.const 166521) "a") (data (i32.const 166524) "a") (data (i32.const 166527) "a") (data (i32.const 166530) "a") (data (i32.const 166533) "a") (data (i32.const 166536) "a") (data (i32.const 166539) "a") (data (i32.const 166542) "a") (data (i32.const 166545) "a") (data (i32.const 166548) "a") (data (i32.const 166551) "a") (data (i32.const 166554) "a") (data (i32.const 166557) "a") (data (i32.const 166560) "a") (data (i32.const 166563) "a") (data (i32.const 166566) "a") (data (i32.const 166569) "a") (data (i32.const 166572) "a") (data (i32.const 166575) "a") (data (i32.const 166578) "a") (data (i32.const 166581) "a") (data (i32.const 166584) "a") (data (i32.const 166587) "a") (data (i32.const 166590) "a") (data (i32.const 166593) "a") (data (i32.const 166596) "a") (data (i32.const 166599) "a") (data (i32.const 166602) "a") (data (i32.const 166605) "a") (data (i32.const 166608) "a") (data (i32.const 166611) "a") (data (i32.const 166614) "a") (data (i32.const 166617) "a") (data (i32.const 166620) "a") (data (i32.const 166623) "a") (data (i32.const 166626) "a") (data (i32.const 166629) "a") (data (i32.const 166632) "a") (data (i32.const 166635) "a") (data (i32.const 166638) "a") (data (i32.const 166641) "a") (data (i32.const 166644) "a") (data (i32.const 166647) "a") (data (i32.const 166650) "a") (data (i32.const 166653) "a") (data (i32.const 166656) "a") (data (i32.const 166659) "a") (data (i32.const 166662) "a") (data (i32.const 166665) "a") (data (i32.const 166668) "a") (data (i32.const 166671) "a") (data (i32.const 166674) "a") (data (i32.const 166677) "a") (data (i32.const 166680) "a") (data (i32.const 166683) "a") (data (i32.const 166686) "a") (data (i32.const 166689) "a") (data (i32.const 166692) "a") (data (i32.const 166695) "a") (data (i32.const 166698) "a") (data (i32.const 166701) "a") (data (i32.const 166704) "a") (data (i32.const 166707) "a") (data (i32.const 166710) "a") (data (i32.const 166713) "a") (data (i32.const 166716) "a") (data (i32.const 166719) "a") (data (i32.const 166722) "a") (data (i32.const 166725) "a") (data (i32.const 166728) "a") (data (i32.const 166731) "a") (data (i32.const 166734) "a") (data (i32.const 166737) "a") (data (i32.const 166740) "a") (data (i32.const 166743) "a") (data (i32.const 166746) "a") (data (i32.const 166749) "a") (data (i32.const 166752) "a") (data (i32.const 166755) "a") (data (i32.const 166758) "a") (data (i32.const 166761) "a") (data (i32.const 166764) "a") (data (i32.const 166767) "a") (data (i32.const 166770) "a") (data (i32.const 166773) "a") (data (i32.const 166776) "a") (data (i32.const 166779) "a") (data (i32.const 166782) "a") (data (i32.const 166785) "a") (data (i32.const 166788) "a") (data (i32.const 166791) "a") (data (i32.const 166794) "a") (data (i32.const 166797) "a") (data (i32.const 166800) "a") (data (i32.const 166803) "a") (data (i32.const 166806) "a") (data (i32.const 166809) "a") (data (i32.const 166812) "a") (data (i32.const 166815) "a") (data (i32.const 166818) "a") (data (i32.const 166821) "a") (data (i32.const 166824) "a") (data (i32.const 166827) "a") (data (i32.const 166830) "a") (data (i32.const 166833) "a") (data (i32.const 166836) "a") (data (i32.const 166839) "a") (data (i32.const 166842) "a") (data (i32.const 166845) "a") (data (i32.const 166848) "a") (data (i32.const 166851) "a") (data (i32.const 166854) "a") (data (i32.const 166857) "a") (data (i32.const 166860) "a") (data (i32.const 166863) "a") (data (i32.const 166866) "a") (data (i32.const 166869) "a") (data (i32.const 166872) "a") (data (i32.const 166875) "a") (data (i32.const 166878) "a") (data (i32.const 166881) "a") (data (i32.const 166884) "a") (data (i32.const 166887) "a") (data (i32.const 166890) "a") (data (i32.const 166893) "a") (data (i32.const 166896) "a") (data (i32.const 166899) "a") (data (i32.const 166902) "a") (data (i32.const 166905) "a") (data (i32.const 166908) "a") (data (i32.const 166911) "a") (data (i32.const 166914) "a") (data (i32.const 166917) "a") (data (i32.const 166920) "a") (data (i32.const 166923) "a") (data (i32.const 166926) "a") (data (i32.const 166929) "a") (data (i32.const 166932) "a") (data (i32.const 166935) "a") (data (i32.const 166938) "a") (data (i32.const 166941) "a") (data (i32.const 166944) "a") (data (i32.const 166947) "a") (data (i32.const 166950) "a") (data (i32.const 166953) "a") (data (i32.const 166956) "a") (data (i32.const 166959) "a") (data (i32.const 166962) "a") (data (i32.const 166965) "a") (data (i32.const 166968) "a") (data (i32.const 166971) "a") (data (i32.const 166974) "a") (data (i32.const 166977) "a") (data (i32.const 166980) "a") (data (i32.const 166983) "a") (data (i32.const 166986) "a") (data (i32.const 166989) "a") (data (i32.const 166992) "a") (data (i32.const 166995) "a") (data (i32.const 166998) "a") (data (i32.const 167001) "a") (data (i32.const 167004) "a") (data (i32.const 167007) "a") (data (i32.const 167010) "a") (data (i32.const 167013) "a") (data (i32.const 167016) "a") (data (i32.const 167019) "a") (data (i32.const 167022) "a") (data (i32.const 167025) "a") (data (i32.const 167028) "a") (data (i32.const 167031) "a") (data (i32.const 167034) "a") (data (i32.const 167037) "a") (data (i32.const 167040) "a") (data (i32.const 167043) "a") (data (i32.const 167046) "a") (data (i32.const 167049) "a") (data (i32.const 167052) "a") (data (i32.const 167055) "a") (data (i32.const 167058) "a") (data (i32.const 167061) "a") (data (i32.const 167064) "a") (data (i32.const 167067) "a") (data (i32.const 167070) "a") (data (i32.const 167073) "a") (data (i32.const 167076) "a") (data (i32.const 167079) "a") (data (i32.const 167082) "a") (data (i32.const 167085) "a") (data (i32.const 167088) "a") (data (i32.const 167091) "a") (data (i32.const 167094) "a") (data (i32.const 167097) "a") (data (i32.const 167100) "a") (data (i32.const 167103) "a") (data (i32.const 167106) "a") (data (i32.const 167109) "a") (data (i32.const 167112) "a") (data (i32.const 167115) "a") (data (i32.const 167118) "a") (data (i32.const 167121) "a") (data (i32.const 167124) "a") (data (i32.const 167127) "a") (data (i32.const 167130) "a") (data (i32.const 167133) "a") (data (i32.const 167136) "a") (data (i32.const 167139) "a") (data (i32.const 167142) "a") (data (i32.const 167145) "a") (data (i32.const 167148) "a") (data (i32.const 167151) "a") (data (i32.const 167154) "a") (data (i32.const 167157) "a") (data (i32.const 167160) "a") (data (i32.const 167163) "a") (data (i32.const 167166) "a") (data (i32.const 167169) "a") (data (i32.const 167172) "a") (data (i32.const 167175) "a") (data (i32.const 167178) "a") (data (i32.const 167181) "a") (data (i32.const 167184) "a") (data (i32.const 167187) "a") (data (i32.const 167190) "a") (data (i32.const 167193) "a") (data (i32.const 167196) "a") (data (i32.const 167199) "a") (data (i32.const 167202) "a") (data (i32.const 167205) "a") (data (i32.const 167208) "a") (data (i32.const 167211) "a") (data (i32.const 167214) "a") (data (i32.const 167217) "a") (data (i32.const 167220) "a") (data (i32.const 167223) "a") (data (i32.const 167226) "a") (data (i32.const 167229) "a") (data (i32.const 167232) "a") (data (i32.const 167235) "a") (data (i32.const 167238) "a") (data (i32.const 167241) "a") (data (i32.const 167244) "a") (data (i32.const 167247) "a") (data (i32.const 167250) "a") (data (i32.const 167253) "a") (data (i32.const 167256) "a") (data (i32.const 167259) "a") (data (i32.const 167262) "a") (data (i32.const 167265) "a") (data (i32.const 167268) "a") (data (i32.const 167271) "a") (data (i32.const 167274) "a") (data (i32.const 167277) "a") (data (i32.const 167280) "a") (data (i32.const 167283) "a") (data (i32.const 167286) "a") (data (i32.const 167289) "a") (data (i32.const 167292) "a") (data (i32.const 167295) "a") (data (i32.const 167298) "a") (data (i32.const 167301) "a") (data (i32.const 167304) "a") (data (i32.const 167307) "a") (data (i32.const 167310) "a") (data (i32.const 167313) "a") (data (i32.const 167316) "a") (data (i32.const 167319) "a") (data (i32.const 167322) "a") (data (i32.const 167325) "a") (data (i32.const 167328) "a") (data (i32.const 167331) "a") (data (i32.const 167334) "a") (data (i32.const 167337) "a") (data (i32.const 167340) "a") (data (i32.const 167343) "a") (data (i32.const 167346) "a") (data (i32.const 167349) "a") (data (i32.const 167352) "a") (data (i32.const 167355) "a") (data (i32.const 167358) "a") (data (i32.const 167361) "a") (data (i32.const 167364) "a") (data (i32.const 167367) "a") (data (i32.const 167370) "a") (data (i32.const 167373) "a") (data (i32.const 167376) "a") (data (i32.const 167379) "a") (data (i32.const 167382) "a") (data (i32.const 167385) "a") (data (i32.const 167388) "a") (data (i32.const 167391) "a") (data (i32.const 167394) "a") (data (i32.const 167397) "a") (data (i32.const 167400) "a") (data (i32.const 167403) "a") (data (i32.const 167406) "a") (data (i32.const 167409) "a") (data (i32.const 167412) "a") (data (i32.const 167415) "a") (data (i32.const 167418) "a") (data (i32.const 167421) "a") (data (i32.const 167424) "a") (data (i32.const 167427) "a") (data (i32.const 167430) "a") (data (i32.const 167433) "a") (data (i32.const 167436) "a") (data (i32.const 167439) "a") (data (i32.const 167442) "a") (data (i32.const 167445) "a") (data (i32.const 167448) "a") (data (i32.const 167451) "a") (data (i32.const 167454) "a") (data (i32.const 167457) "a") (data (i32.const 167460) "a") (data (i32.const 167463) "a") (data (i32.const 167466) "a") (data (i32.const 167469) "a") (data (i32.const 167472) "a") (data (i32.const 167475) "a") (data (i32.const 167478) "a") (data (i32.const 167481) "a") (data (i32.const 167484) "a") (data (i32.const 167487) "a") (data (i32.const 167490) "a") (data (i32.const 167493) "a") (data (i32.const 167496) "a") (data (i32.const 167499) "a") (data (i32.const 167502) "a") (data (i32.const 167505) "a") (data (i32.const 167508) "a") (data (i32.const 167511) "a") (data (i32.const 167514) "a") (data (i32.const 167517) "a") (data (i32.const 167520) "a") (data (i32.const 167523) "a") (data (i32.const 167526) "a") (data (i32.const 167529) "a") (data (i32.const 167532) "a") (data (i32.const 167535) "a") (data (i32.const 167538) "a") (data (i32.const 167541) "a") (data (i32.const 167544) "a") (data (i32.const 167547) "a") (data (i32.const 167550) "a") (data (i32.const 167553) "a") (data (i32.const 167556) "a") (data (i32.const 167559) "a") (data (i32.const 167562) "a") (data (i32.const 167565) "a") (data (i32.const 167568) "a") (data (i32.const 167571) "a") (data (i32.const 167574) "a") (data (i32.const 167577) "a") (data (i32.const 167580) "a") (data (i32.const 167583) "a") (data (i32.const 167586) "a") (data (i32.const 167589) "a") (data (i32.const 167592) "a") (data (i32.const 167595) "a") (data (i32.const 167598) "a") (data (i32.const 167601) "a") (data (i32.const 167604) "a") (data (i32.const 167607) "a") (data (i32.const 167610) "a") (data (i32.const 167613) "a") (data (i32.const 167616) "a") (data (i32.const 167619) "a") (data (i32.const 167622) "a") (data (i32.const 167625) "a") (data (i32.const 167628) "a") (data (i32.const 167631) "a") (data (i32.const 167634) "a") (data (i32.const 167637) "a") (data (i32.const 167640) "a") (data (i32.const 167643) "a") (data (i32.const 167646) "a") (data (i32.const 167649) "a") (data (i32.const 167652) "a") (data (i32.const 167655) "a") (data (i32.const 167658) "a") (data (i32.const 167661) "a") (data (i32.const 167664) "a") (data (i32.const 167667) "a") (data (i32.const 167670) "a") (data (i32.const 167673) "a") (data (i32.const 167676) "a") (data (i32.const 167679) "a") (data (i32.const 167682) "a") (data (i32.const 167685) "a") (data (i32.const 167688) "a") (data (i32.const 167691) "a") (data (i32.const 167694) "a") (data (i32.const 167697) "a") (data (i32.const 167700) "a") (data (i32.const 167703) "a") (data (i32.const 167706) "a") (data (i32.const 167709) "a") (data (i32.const 167712) "a") (data (i32.const 167715) "a") (data (i32.const 167718) "a") (data (i32.const 167721) "a") (data (i32.const 167724) "a") (data (i32.const 167727) "a") (data (i32.const 167730) "a") (data (i32.const 167733) "a") (data (i32.const 167736) "a") (data (i32.const 167739) "a") (data (i32.const 167742) "a") (data (i32.const 167745) "a") (data (i32.const 167748) "a") (data (i32.const 167751) "a") (data (i32.const 167754) "a") (data (i32.const 167757) "a") (data (i32.const 167760) "a") (data (i32.const 167763) "a") (data (i32.const 167766) "a") (data (i32.const 167769) "a") (data (i32.const 167772) "a") (data (i32.const 167775) "a") (data (i32.const 167778) "a") (data (i32.const 167781) "a") (data (i32.const 167784) "a") (data (i32.const 167787) "a") (data (i32.const 167790) "a") (data (i32.const 167793) "a") (data (i32.const 167796) "a") (data (i32.const 167799) "a") (data (i32.const 167802) "a") (data (i32.const 167805) "a") (data (i32.const 167808) "a") (data (i32.const 167811) "a") (data (i32.const 167814) "a") (data (i32.const 167817) "a") (data (i32.const 167820) "a") (data (i32.const 167823) "a") (data (i32.const 167826) "a") (data (i32.const 167829) "a") (data (i32.const 167832) "a") (data (i32.const 167835) "a") (data (i32.const 167838) "a") (data (i32.const 167841) "a") (data (i32.const 167844) "a") (data (i32.const 167847) "a") (data (i32.const 167850) "a") (data (i32.const 167853) "a") (data (i32.const 167856) "a") (data (i32.const 167859) "a") (data (i32.const 167862) "a") (data (i32.const 167865) "a") (data (i32.const 167868) "a") (data (i32.const 167871) "a") (data (i32.const 167874) "a") (data (i32.const 167877) "a") (data (i32.const 167880) "a") (data (i32.const 167883) "a") (data (i32.const 167886) "a") (data (i32.const 167889) "a") (data (i32.const 167892) "a") (data (i32.const 167895) "a") (data (i32.const 167898) "a") (data (i32.const 167901) "a") (data (i32.const 167904) "a") (data (i32.const 167907) "a") (data (i32.const 167910) "a") (data (i32.const 167913) "a") (data (i32.const 167916) "a") (data (i32.const 167919) "a") (data (i32.const 167922) "a") (data (i32.const 167925) "a") (data (i32.const 167928) "a") (data (i32.const 167931) "a") (data (i32.const 167934) "a") (data (i32.const 167937) "a") (data (i32.const 167940) "a") (data (i32.const 167943) "a") (data (i32.const 167946) "a") (data (i32.const 167949) "a") (data (i32.const 167952) "a") (data (i32.const 167955) "a") (data (i32.const 167958) "a") (data (i32.const 167961) "a") (data (i32.const 167964) "a") (data (i32.const 167967) "a") (data (i32.const 167970) "a") (data (i32.const 167973) "a") (data (i32.const 167976) "a") (data (i32.const 167979) "a") (data (i32.const 167982) "a") (data (i32.const 167985) "a") (data (i32.const 167988) "a") (data (i32.const 167991) "a") (data (i32.const 167994) "a") (data (i32.const 167997) "a") (data (i32.const 168000) "a") (data (i32.const 168003) "a") (data (i32.const 168006) "a") (data (i32.const 168009) "a") (data (i32.const 168012) "a") (data (i32.const 168015) "a") (data (i32.const 168018) "a") (data (i32.const 168021) "a") (data (i32.const 168024) "a") (data (i32.const 168027) "a") (data (i32.const 168030) "a") (data (i32.const 168033) "a") (data (i32.const 168036) "a") (data (i32.const 168039) "a") (data (i32.const 168042) "a") (data (i32.const 168045) "a") (data (i32.const 168048) "a") (data (i32.const 168051) "a") (data (i32.const 168054) "a") (data (i32.const 168057) "a") (data (i32.const 168060) "a") (data (i32.const 168063) "a") (data (i32.const 168066) "a") (data (i32.const 168069) "a") (data (i32.const 168072) "a") (data (i32.const 168075) "a") (data (i32.const 168078) "a") (data (i32.const 168081) "a") (data (i32.const 168084) "a") (data (i32.const 168087) "a") (data (i32.const 168090) "a") (data (i32.const 168093) "a") (data (i32.const 168096) "a") (data (i32.const 168099) "a") (data (i32.const 168102) "a") (data (i32.const 168105) "a") (data (i32.const 168108) "a") (data (i32.const 168111) "a") (data (i32.const 168114) "a") (data (i32.const 168117) "a") (data (i32.const 168120) "a") (data (i32.const 168123) "a") (data (i32.const 168126) "a") (data (i32.const 168129) "a") (data (i32.const 168132) "a") (data (i32.const 168135) "a") (data (i32.const 168138) "a") (data (i32.const 168141) "a") (data (i32.const 168144) "a") (data (i32.const 168147) "a") (data (i32.const 168150) "a") (data (i32.const 168153) "a") (data (i32.const 168156) "a") (data (i32.const 168159) "a") (data (i32.const 168162) "a") (data (i32.const 168165) "a") (data (i32.const 168168) "a") (data (i32.const 168171) "a") (data (i32.const 168174) "a") (data (i32.const 168177) "a") (data (i32.const 168180) "a") (data (i32.const 168183) "a") (data (i32.const 168186) "a") (data (i32.const 168189) "a") (data (i32.const 168192) "a") (data (i32.const 168195) "a") (data (i32.const 168198) "a") (data (i32.const 168201) "a") (data (i32.const 168204) "a") (data (i32.const 168207) "a") (data (i32.const 168210) "a") (data (i32.const 168213) "a") (data (i32.const 168216) "a") (data (i32.const 168219) "a") (data (i32.const 168222) "a") (data (i32.const 168225) "a") (data (i32.const 168228) "a") (data (i32.const 168231) "a") (data (i32.const 168234) "a") (data (i32.const 168237) "a") (data (i32.const 168240) "a") (data (i32.const 168243) "a") (data (i32.const 168246) "a") (data (i32.const 168249) "a") (data (i32.const 168252) "a") (data (i32.const 168255) "a") (data (i32.const 168258) "a") (data (i32.const 168261) "a") (data (i32.const 168264) "a") (data (i32.const 168267) "a") (data (i32.const 168270) "a") (data (i32.const 168273) "a") (data (i32.const 168276) "a") (data (i32.const 168279) "a") (data (i32.const 168282) "a") (data (i32.const 168285) "a") (data (i32.const 168288) "a") (data (i32.const 168291) "a") (data (i32.const 168294) "a") (data (i32.const 168297) "a") (data (i32.const 168300) "a") (data (i32.const 168303) "a") (data (i32.const 168306) "a") (data (i32.const 168309) "a") (data (i32.const 168312) "a") (data (i32.const 168315) "a") (data (i32.const 168318) "a") (data (i32.const 168321) "a") (data (i32.const 168324) "a") (data (i32.const 168327) "a") (data (i32.const 168330) "a") (data (i32.const 168333) "a") (data (i32.const 168336) "a") (data (i32.const 168339) "a") (data (i32.const 168342) "a") (data (i32.const 168345) "a") (data (i32.const 168348) "a") (data (i32.const 168351) "a") (data (i32.const 168354) "a") (data (i32.const 168357) "a") (data (i32.const 168360) "a") (data (i32.const 168363) "a") (data (i32.const 168366) "a") (data (i32.const 168369) "a") (data (i32.const 168372) "a") (data (i32.const 168375) "a") (data (i32.const 168378) "a") (data (i32.const 168381) "a") (data (i32.const 168384) "a") (data (i32.const 168387) "a") (data (i32.const 168390) "a") (data (i32.const 168393) "a") (data (i32.const 168396) "a") (data (i32.const 168399) "a") (data (i32.const 168402) "a") (data (i32.const 168405) "a") (data (i32.const 168408) "a") (data (i32.const 168411) "a") (data (i32.const 168414) "a") (data (i32.const 168417) "a") (data (i32.const 168420) "a") (data (i32.const 168423) "a") (data (i32.const 168426) "a") (data (i32.const 168429) "a") (data (i32.const 168432) "a") (data (i32.const 168435) "a") (data (i32.const 168438) "a") (data (i32.const 168441) "a") (data (i32.const 168444) "a") (data (i32.const 168447) "a") (data (i32.const 168450) "a") (data (i32.const 168453) "a") (data (i32.const 168456) "a") (data (i32.const 168459) "a") (data (i32.const 168462) "a") (data (i32.const 168465) "a") (data (i32.const 168468) "a") (data (i32.const 168471) "a") (data (i32.const 168474) "a") (data (i32.const 168477) "a") (data (i32.const 168480) "a") (data (i32.const 168483) "a") (data (i32.const 168486) "a") (data (i32.const 168489) "a") (data (i32.const 168492) "a") (data (i32.const 168495) "a") (data (i32.const 168498) "a") (data (i32.const 168501) "a") (data (i32.const 168504) "a") (data (i32.const 168507) "a") (data (i32.const 168510) "a") (data (i32.const 168513) "a") (data (i32.const 168516) "a") (data (i32.const 168519) "a") (data (i32.const 168522) "a") (data (i32.const 168525) "a") (data (i32.const 168528) "a") (data (i32.const 168531) "a") (data (i32.const 168534) "a") (data (i32.const 168537) "a") (data (i32.const 168540) "a") (data (i32.const 168543) "a") (data (i32.const 168546) "a") (data (i32.const 168549) "a") (data (i32.const 168552) "a") (data (i32.const 168555) "a") (data (i32.const 168558) "a") (data (i32.const 168561) "a") (data (i32.const 168564) "a") (data (i32.const 168567) "a") (data (i32.const 168570) "a") (data (i32.const 168573) "a") (data (i32.const 168576) "a") (data (i32.const 168579) "a") (data (i32.const 168582) "a") (data (i32.const 168585) "a") (data (i32.const 168588) "a") (data (i32.const 168591) "a") (data (i32.const 168594) "a") (data (i32.const 168597) "a") (data (i32.const 168600) "a") (data (i32.const 168603) "a") (data (i32.const 168606) "a") (data (i32.const 168609) "a") (data (i32.const 168612) "a") (data (i32.const 168615) "a") (data (i32.const 168618) "a") (data (i32.const 168621) "a") (data (i32.const 168624) "a") (data (i32.const 168627) "a") (data (i32.const 168630) "a") (data (i32.const 168633) "a") (data (i32.const 168636) "a") (data (i32.const 168639) "a") (data (i32.const 168642) "a") (data (i32.const 168645) "a") (data (i32.const 168648) "a") (data (i32.const 168651) "a") (data (i32.const 168654) "a") (data (i32.const 168657) "a") (data (i32.const 168660) "a") (data (i32.const 168663) "a") (data (i32.const 168666) "a") (data (i32.const 168669) "a") (data (i32.const 168672) "a") (data (i32.const 168675) "a") (data (i32.const 168678) "a") (data (i32.const 168681) "a") (data (i32.const 168684) "a") (data (i32.const 168687) "a") (data (i32.const 168690) "a") (data (i32.const 168693) "a") (data (i32.const 168696) "a") (data (i32.const 168699) "a") (data (i32.const 168702) "a") (data (i32.const 168705) "a") (data (i32.const 168708) "a") (data (i32.const 168711) "a") (data (i32.const 168714) "a") (data (i32.const 168717) "a") (data (i32.const 168720) "a") (data (i32.const 168723) "a") (data (i32.const 168726) "a") (data (i32.const 168729) "a") (data (i32.const 168732) "a") (data (i32.const 168735) "a") (data (i32.const 168738) "a") (data (i32.const 168741) "a") (data (i32.const 168744) "a") (data (i32.const 168747) "a") (data (i32.const 168750) "a") (data (i32.const 168753) "a") (data (i32.const 168756) "a") (data (i32.const 168759) "a") (data (i32.const 168762) "a") (data (i32.const 168765) "a") (data (i32.const 168768) "a") (data (i32.const 168771) "a") (data (i32.const 168774) "a") (data (i32.const 168777) "a") (data (i32.const 168780) "a") (data (i32.const 168783) "a") (data (i32.const 168786) "a") (data (i32.const 168789) "a") (data (i32.const 168792) "a") (data (i32.const 168795) "a") (data (i32.const 168798) "a") (data (i32.const 168801) "a") (data (i32.const 168804) "a") (data (i32.const 168807) "a") (data (i32.const 168810) "a") (data (i32.const 168813) "a") (data (i32.const 168816) "a") (data (i32.const 168819) "a") (data (i32.const 168822) "a") (data (i32.const 168825) "a") (data (i32.const 168828) "a") (data (i32.const 168831) "a") (data (i32.const 168834) "a") (data (i32.const 168837) "a") (data (i32.const 168840) "a") (data (i32.const 168843) "a") (data (i32.const 168846) "a") (data (i32.const 168849) "a") (data (i32.const 168852) "a") (data (i32.const 168855) "a") (data (i32.const 168858) "a") (data (i32.const 168861) "a") (data (i32.const 168864) "a") (data (i32.const 168867) "a") (data (i32.const 168870) "a") (data (i32.const 168873) "a") (data (i32.const 168876) "a") (data (i32.const 168879) "a") (data (i32.const 168882) "a") (data (i32.const 168885) "a") (data (i32.const 168888) "a") (data (i32.const 168891) "a") (data (i32.const 168894) "a") (data (i32.const 168897) "a") (data (i32.const 168900) "a") (data (i32.const 168903) "a") (data (i32.const 168906) "a") (data (i32.const 168909) "a") (data (i32.const 168912) "a") (data (i32.const 168915) "a") (data (i32.const 168918) "a") (data (i32.const 168921) "a") (data (i32.const 168924) "a") (data (i32.const 168927) "a") (data (i32.const 168930) "a") (data (i32.const 168933) "a") (data (i32.const 168936) "a") (data (i32.const 168939) "a") (data (i32.const 168942) "a") (data (i32.const 168945) "a") (data (i32.const 168948) "a") (data (i32.const 168951) "a") (data (i32.const 168954) "a") (data (i32.const 168957) "a") (data (i32.const 168960) "a") (data (i32.const 168963) "a") (data (i32.const 168966) "a") (data (i32.const 168969) "a") (data (i32.const 168972) "a") (data (i32.const 168975) "a") (data (i32.const 168978) "a") (data (i32.const 168981) "a") (data (i32.const 168984) "a") (data (i32.const 168987) "a") (data (i32.const 168990) "a") (data (i32.const 168993) "a") (data (i32.const 168996) "a") (data (i32.const 168999) "a") (data (i32.const 169002) "a") (data (i32.const 169005) "a") (data (i32.const 169008) "a") (data (i32.const 169011) "a") (data (i32.const 169014) "a") (data (i32.const 169017) "a") (data (i32.const 169020) "a") (data (i32.const 169023) "a") (data (i32.const 169026) "a") (data (i32.const 169029) "a") (data (i32.const 169032) "a") (data (i32.const 169035) "a") (data (i32.const 169038) "a") (data (i32.const 169041) "a") (data (i32.const 169044) "a") (data (i32.const 169047) "a") (data (i32.const 169050) "a") (data (i32.const 169053) "a") (data (i32.const 169056) "a") (data (i32.const 169059) "a") (data (i32.const 169062) "a") (data (i32.const 169065) "a") (data (i32.const 169068) "a") (data (i32.const 169071) "a") (data (i32.const 169074) "a") (data (i32.const 169077) "a") (data (i32.const 169080) "a") (data (i32.const 169083) "a") (data (i32.const 169086) "a") (data (i32.const 169089) "a") (data (i32.const 169092) "a") (data (i32.const 169095) "a") (data (i32.const 169098) "a") (data (i32.const 169101) "a") (data (i32.const 169104) "a") (data (i32.const 169107) "a") (data (i32.const 169110) "a") (data (i32.const 169113) "a") (data (i32.const 169116) "a") (data (i32.const 169119) "a") (data (i32.const 169122) "a") (data (i32.const 169125) "a") (data (i32.const 169128) "a") (data (i32.const 169131) "a") (data (i32.const 169134) "a") (data (i32.const 169137) "a") (data (i32.const 169140) "a") (data (i32.const 169143) "a") (data (i32.const 169146) "a") (data (i32.const 169149) "a") (data (i32.const 169152) "a") (data (i32.const 169155) "a") (data (i32.const 169158) "a") (data (i32.const 169161) "a") (data (i32.const 169164) "a") (data (i32.const 169167) "a") (data (i32.const 169170) "a") (data (i32.const 169173) "a") (data (i32.const 169176) "a") (data (i32.const 169179) "a") (data (i32.const 169182) "a") (data (i32.const 169185) "a") (data (i32.const 169188) "a") (data (i32.const 169191) "a") (data (i32.const 169194) "a") (data (i32.const 169197) "a") (data (i32.const 169200) "a") (data (i32.const 169203) "a") (data (i32.const 169206) "a") (data (i32.const 169209) "a") (data (i32.const 169212) "a") (data (i32.const 169215) "a") (data (i32.const 169218) "a") (data (i32.const 169221) "a") (data (i32.const 169224) "a") (data (i32.const 169227) "a") (data (i32.const 169230) "a") (data (i32.const 169233) "a") (data (i32.const 169236) "a") (data (i32.const 169239) "a") (data (i32.const 169242) "a") (data (i32.const 169245) "a") (data (i32.const 169248) "a") (data (i32.const 169251) "a") (data (i32.const 169254) "a") (data (i32.const 169257) "a") (data (i32.const 169260) "a") (data (i32.const 169263) "a") (data (i32.const 169266) "a") (data (i32.const 169269) "a") (data (i32.const 169272) "a") (data (i32.const 169275) "a") (data (i32.const 169278) "a") (data (i32.const 169281) "a") (data (i32.const 169284) "a") (data (i32.const 169287) "a") (data (i32.const 169290) "a") (data (i32.const 169293) "a") (data (i32.const 169296) "a") (data (i32.const 169299) "a") (data (i32.const 169302) "a") (data (i32.const 169305) "a") (data (i32.const 169308) "a") (data (i32.const 169311) "a") (data (i32.const 169314) "a") (data (i32.const 169317) "a") (data (i32.const 169320) "a") (data (i32.const 169323) "a") (data (i32.const 169326) "a") (data (i32.const 169329) "a") (data (i32.const 169332) "a") (data (i32.const 169335) "a") (data (i32.const 169338) "a") (data (i32.const 169341) "a") (data (i32.const 169344) "a") (data (i32.const 169347) "a") (data (i32.const 169350) "a") (data (i32.const 169353) "a") (data (i32.const 169356) "a") (data (i32.const 169359) "a") (data (i32.const 169362) "a") (data (i32.const 169365) "a") (data (i32.const 169368) "a") (data (i32.const 169371) "a") (data (i32.const 169374) "a") (data (i32.const 169377) "a") (data (i32.const 169380) "a") (data (i32.const 169383) "a") (data (i32.const 169386) "a") (data (i32.const 169389) "a") (data (i32.const 169392) "a") (data (i32.const 169395) "a") (data (i32.const 169398) "a") (data (i32.const 169401) "a") (data (i32.const 169404) "a") (data (i32.const 169407) "a") (data (i32.const 169410) "a") (data (i32.const 169413) "a") (data (i32.const 169416) "a") (data (i32.const 169419) "a") (data (i32.const 169422) "a") (data (i32.const 169425) "a") (data (i32.const 169428) "a") (data (i32.const 169431) "a") (data (i32.const 169434) "a") (data (i32.const 169437) "a") (data (i32.const 169440) "a") (data (i32.const 169443) "a") (data (i32.const 169446) "a") (data (i32.const 169449) "a") (data (i32.const 169452) "a") (data (i32.const 169455) "a") (data (i32.const 169458) "a") (data (i32.const 169461) "a") (data (i32.const 169464) "a") (data (i32.const 169467) "a") (data (i32.const 169470) "a") (data (i32.const 169473) "a") (data (i32.const 169476) "a") (data (i32.const 169479) "a") (data (i32.const 169482) "a") (data (i32.const 169485) "a") (data (i32.const 169488) "a") (data (i32.const 169491) "a") (data (i32.const 169494) "a") (data (i32.const 169497) "a") (data (i32.const 169500) "a") (data (i32.const 169503) "a") (data (i32.const 169506) "a") (data (i32.const 169509) "a") (data (i32.const 169512) "a") (data (i32.const 169515) "a") (data (i32.const 169518) "a") (data (i32.const 169521) "a") (data (i32.const 169524) "a") (data (i32.const 169527) "a") (data (i32.const 169530) "a") (data (i32.const 169533) "a") (data (i32.const 169536) "a") (data (i32.const 169539) "a") (data (i32.const 169542) "a") (data (i32.const 169545) "a") (data (i32.const 169548) "a") (data (i32.const 169551) "a") (data (i32.const 169554) "a") (data (i32.const 169557) "a") (data (i32.const 169560) "a") (data (i32.const 169563) "a") (data (i32.const 169566) "a") (data (i32.const 169569) "a") (data (i32.const 169572) "a") (data (i32.const 169575) "a") (data (i32.const 169578) "a") (data (i32.const 169581) "a") (data (i32.const 169584) "a") (data (i32.const 169587) "a") (data (i32.const 169590) "a") (data (i32.const 169593) "a") (data (i32.const 169596) "a") (data (i32.const 169599) "a") (data (i32.const 169602) "a") (data (i32.const 169605) "a") (data (i32.const 169608) "a") (data (i32.const 169611) "a") (data (i32.const 169614) "a") (data (i32.const 169617) "a") (data (i32.const 169620) "a") (data (i32.const 169623) "a") (data (i32.const 169626) "a") (data (i32.const 169629) "a") (data (i32.const 169632) "a") (data (i32.const 169635) "a") (data (i32.const 169638) "a") (data (i32.const 169641) "a") (data (i32.const 169644) "a") (data (i32.const 169647) "a") (data (i32.const 169650) "a") (data (i32.const 169653) "a") (data (i32.const 169656) "a") (data (i32.const 169659) "a") (data (i32.const 169662) "a") (data (i32.const 169665) "a") (data (i32.const 169668) "a") (data (i32.const 169671) "a") (data (i32.const 169674) "a") (data (i32.const 169677) "a") (data (i32.const 169680) "a") (data (i32.const 169683) "a") (data (i32.const 169686) "a") (data (i32.const 169689) "a") (data (i32.const 169692) "a") (data (i32.const 169695) "a") (data (i32.const 169698) "a") (data (i32.const 169701) "a") (data (i32.const 169704) "a") (data (i32.const 169707) "a") (data (i32.const 169710) "a") (data (i32.const 169713) "a") (data (i32.const 169716) "a") (data (i32.const 169719) "a") (data (i32.const 169722) "a") (data (i32.const 169725) "a") (data (i32.const 169728) "a") (data (i32.const 169731) "a") (data (i32.const 169734) "a") (data (i32.const 169737) "a") (data (i32.const 169740) "a") (data (i32.const 169743) "a") (data (i32.const 169746) "a") (data (i32.const 169749) "a") (data (i32.const 169752) "a") (data (i32.const 169755) "a") (data (i32.const 169758) "a") (data (i32.const 169761) "a") (data (i32.const 169764) "a") (data (i32.const 169767) "a") (data (i32.const 169770) "a") (data (i32.const 169773) "a") (data (i32.const 169776) "a") (data (i32.const 169779) "a") (data (i32.const 169782) "a") (data (i32.const 169785) "a") (data (i32.const 169788) "a") (data (i32.const 169791) "a") (data (i32.const 169794) "a") (data (i32.const 169797) "a") (data (i32.const 169800) "a") (data (i32.const 169803) "a") (data (i32.const 169806) "a") (data (i32.const 169809) "a") (data (i32.const 169812) "a") (data (i32.const 169815) "a") (data (i32.const 169818) "a") (data (i32.const 169821) "a") (data (i32.const 169824) "a") (data (i32.const 169827) "a") (data (i32.const 169830) "a") (data (i32.const 169833) "a") (data (i32.const 169836) "a") (data (i32.const 169839) "a") (data (i32.const 169842) "a") (data (i32.const 169845) "a") (data (i32.const 169848) "a") (data (i32.const 169851) "a") (data (i32.const 169854) "a") (data (i32.const 169857) "a") (data (i32.const 169860) "a") (data (i32.const 169863) "a") (data (i32.const 169866) "a") (data (i32.const 169869) "a") (data (i32.const 169872) "a") (data (i32.const 169875) "a") (data (i32.const 169878) "a") (data (i32.const 169881) "a") (data (i32.const 169884) "a") (data (i32.const 169887) "a") (data (i32.const 169890) "a") (data (i32.const 169893) "a") (data (i32.const 169896) "a") (data (i32.const 169899) "a") (data (i32.const 169902) "a") (data (i32.const 169905) "a") (data (i32.const 169908) "a") (data (i32.const 169911) "a") (data (i32.const 169914) "a") (data (i32.const 169917) "a") (data (i32.const 169920) "a") (data (i32.const 169923) "a") (data (i32.const 169926) "a") (data (i32.const 169929) "a") (data (i32.const 169932) "a") (data (i32.const 169935) "a") (data (i32.const 169938) "a") (data (i32.const 169941) "a") (data (i32.const 169944) "a") (data (i32.const 169947) "a") (data (i32.const 169950) "a") (data (i32.const 169953) "a") (data (i32.const 169956) "a") (data (i32.const 169959) "a") (data (i32.const 169962) "a") (data (i32.const 169965) "a") (data (i32.const 169968) "a") (data (i32.const 169971) "a") (data (i32.const 169974) "a") (data (i32.const 169977) "a") (data (i32.const 169980) "a") (data (i32.const 169983) "a") (data (i32.const 169986) "a") (data (i32.const 169989) "a") (data (i32.const 169992) "a") (data (i32.const 169995) "a") (data (i32.const 169998) "a") (data (i32.const 170001) "a") (data (i32.const 170004) "a") (data (i32.const 170007) "a") (data (i32.const 170010) "a") (data (i32.const 170013) "a") (data (i32.const 170016) "a") (data (i32.const 170019) "a") (data (i32.const 170022) "a") (data (i32.const 170025) "a") (data (i32.const 170028) "a") (data (i32.const 170031) "a") (data (i32.const 170034) "a") (data (i32.const 170037) "a") (data (i32.const 170040) "a") (data (i32.const 170043) "a") (data (i32.const 170046) "a") (data (i32.const 170049) "a") (data (i32.const 170052) "a") (data (i32.const 170055) "a") (data (i32.const 170058) "a") (data (i32.const 170061) "a") (data (i32.const 170064) "a") (data (i32.const 170067) "a") (data (i32.const 170070) "a") (data (i32.const 170073) "a") (data (i32.const 170076) "a") (data (i32.const 170079) "a") (data (i32.const 170082) "a") (data (i32.const 170085) "a") (data (i32.const 170088) "a") (data (i32.const 170091) "a") (data (i32.const 170094) "a") (data (i32.const 170097) "a") (data (i32.const 170100) "a") (data (i32.const 170103) "a") (data (i32.const 170106) "a") (data (i32.const 170109) "a") (data (i32.const 170112) "a") (data (i32.const 170115) "a") (data (i32.const 170118) "a") (data (i32.const 170121) "a") (data (i32.const 170124) "a") (data (i32.const 170127) "a") (data (i32.const 170130) "a") (data (i32.const 170133) "a") (data (i32.const 170136) "a") (data (i32.const 170139) "a") (data (i32.const 170142) "a") (data (i32.const 170145) "a") (data (i32.const 170148) "a") (data (i32.const 170151) "a") (data (i32.const 170154) "a") (data (i32.const 170157) "a") (data (i32.const 170160) "a") (data (i32.const 170163) "a") (data (i32.const 170166) "a") (data (i32.const 170169) "a") (data (i32.const 170172) "a") (data (i32.const 170175) "a") (data (i32.const 170178) "a") (data (i32.const 170181) "a") (data (i32.const 170184) "a") (data (i32.const 170187) "a") (data (i32.const 170190) "a") (data (i32.const 170193) "a") (data (i32.const 170196) "a") (data (i32.const 170199) "a") (data (i32.const 170202) "a") (data (i32.const 170205) "a") (data (i32.const 170208) "a") (data (i32.const 170211) "a") (data (i32.const 170214) "a") (data (i32.const 170217) "a") (data (i32.const 170220) "a") (data (i32.const 170223) "a") (data (i32.const 170226) "a") (data (i32.const 170229) "a") (data (i32.const 170232) "a") (data (i32.const 170235) "a") (data (i32.const 170238) "a") (data (i32.const 170241) "a") (data (i32.const 170244) "a") (data (i32.const 170247) "a") (data (i32.const 170250) "a") (data (i32.const 170253) "a") (data (i32.const 170256) "a") (data (i32.const 170259) "a") (data (i32.const 170262) "a") (data (i32.const 170265) "a") (data (i32.const 170268) "a") (data (i32.const 170271) "a") (data (i32.const 170274) "a") (data (i32.const 170277) "a") (data (i32.const 170280) "a") (data (i32.const 170283) "a") (data (i32.const 170286) "a") (data (i32.const 170289) "a") (data (i32.const 170292) "a") (data (i32.const 170295) "a") (data (i32.const 170298) "a") (data (i32.const 170301) "a") (data (i32.const 170304) "a") (data (i32.const 170307) "a") (data (i32.const 170310) "a") (data (i32.const 170313) "a") (data (i32.const 170316) "a") (data (i32.const 170319) "a") (data (i32.const 170322) "a") (data (i32.const 170325) "a") (data (i32.const 170328) "a") (data (i32.const 170331) "a") (data (i32.const 170334) "a") (data (i32.const 170337) "a") (data (i32.const 170340) "a") (data (i32.const 170343) "a") (data (i32.const 170346) "a") (data (i32.const 170349) "a") (data (i32.const 170352) "a") (data (i32.const 170355) "a") (data (i32.const 170358) "a") (data (i32.const 170361) "a") (data (i32.const 170364) "a") (data (i32.const 170367) "a") (data (i32.const 170370) "a") (data (i32.const 170373) "a") (data (i32.const 170376) "a") (data (i32.const 170379) "a") (data (i32.const 170382) "a") (data (i32.const 170385) "a") (data (i32.const 170388) "a") (data (i32.const 170391) "a") (data (i32.const 170394) "a") (data (i32.const 170397) "a") (data (i32.const 170400) "a") (data (i32.const 170403) "a") (data (i32.const 170406) "a") (data (i32.const 170409) "a") (data (i32.const 170412) "a") (data (i32.const 170415) "a") (data (i32.const 170418) "a") (data (i32.const 170421) "a") (data (i32.const 170424) "a") (data (i32.const 170427) "a") (data (i32.const 170430) "a") (data (i32.const 170433) "a") (data (i32.const 170436) "a") (data (i32.const 170439) "a") (data (i32.const 170442) "a") (data (i32.const 170445) "a") (data (i32.const 170448) "a") (data (i32.const 170451) "a") (data (i32.const 170454) "a") (data (i32.const 170457) "a") (data (i32.const 170460) "a") (data (i32.const 170463) "a") (data (i32.const 170466) "a") (data (i32.const 170469) "a") (data (i32.const 170472) "a") (data (i32.const 170475) "a") (data (i32.const 170478) "a") (data (i32.const 170481) "a") (data (i32.const 170484) "a") (data (i32.const 170487) "a") (data (i32.const 170490) "a") (data (i32.const 170493) "a") (data (i32.const 170496) "a") (data (i32.const 170499) "a") (data (i32.const 170502) "a") (data (i32.const 170505) "a") (data (i32.const 170508) "a") (data (i32.const 170511) "a") (data (i32.const 170514) "a") (data (i32.const 170517) "a") (data (i32.const 170520) "a") (data (i32.const 170523) "a") (data (i32.const 170526) "a") (data (i32.const 170529) "a") (data (i32.const 170532) "a") (data (i32.const 170535) "a") (data (i32.const 170538) "a") (data (i32.const 170541) "a") (data (i32.const 170544) "a") (data (i32.const 170547) "a") (data (i32.const 170550) "a") (data (i32.const 170553) "a") (data (i32.const 170556) "a") (data (i32.const 170559) "a") (data (i32.const 170562) "a") (data (i32.const 170565) "a") (data (i32.const 170568) "a") (data (i32.const 170571) "a") (data (i32.const 170574) "a") (data (i32.const 170577) "a") (data (i32.const 170580) "a") (data (i32.const 170583) "a") (data (i32.const 170586) "a") (data (i32.const 170589) "a") (data (i32.const 170592) "a") (data (i32.const 170595) "a") (data (i32.const 170598) "a") (data (i32.const 170601) "a") (data (i32.const 170604) "a") (data (i32.const 170607) "a") (data (i32.const 170610) "a") (data (i32.const 170613) "a") (data (i32.const 170616) "a") (data (i32.const 170619) "a") (data (i32.const 170622) "a") (data (i32.const 170625) "a") (data (i32.const 170628) "a") (data (i32.const 170631) "a") (data (i32.const 170634) "a") (data (i32.const 170637) "a") (data (i32.const 170640) "a") (data (i32.const 170643) "a") (data (i32.const 170646) "a") (data (i32.const 170649) "a") (data (i32.const 170652) "a") (data (i32.const 170655) "a") (data (i32.const 170658) "a") (data (i32.const 170661) "a") (data (i32.const 170664) "a") (data (i32.const 170667) "a") (data (i32.const 170670) "a") (data (i32.const 170673) "a") (data (i32.const 170676) "a") (data (i32.const 170679) "a") (data (i32.const 170682) "a") (data (i32.const 170685) "a") (data (i32.const 170688) "a") (data (i32.const 170691) "a") (data (i32.const 170694) "a") (data (i32.const 170697) "a") (data (i32.const 170700) "a") (data (i32.const 170703) "a") (data (i32.const 170706) "a") (data (i32.const 170709) "a") (data (i32.const 170712) "a") (data (i32.const 170715) "a") (data (i32.const 170718) "a") (data (i32.const 170721) "a") (data (i32.const 170724) "a") (data (i32.const 170727) "a") (data (i32.const 170730) "a") (data (i32.const 170733) "a") (data (i32.const 170736) "a") (data (i32.const 170739) "a") (data (i32.const 170742) "a") (data (i32.const 170745) "a") (data (i32.const 170748) "a") (data (i32.const 170751) "a") (data (i32.const 170754) "a") (data (i32.const 170757) "a") (data (i32.const 170760) "a") (data (i32.const 170763) "a") (data (i32.const 170766) "a") (data (i32.const 170769) "a") (data (i32.const 170772) "a") (data (i32.const 170775) "a") (data (i32.const 170778) "a") (data (i32.const 170781) "a") (data (i32.const 170784) "a") (data (i32.const 170787) "a") (data (i32.const 170790) "a") (data (i32.const 170793) "a") (data (i32.const 170796) "a") (data (i32.const 170799) "a") (data (i32.const 170802) "a") (data (i32.const 170805) "a") (data (i32.const 170808) "a") (data (i32.const 170811) "a") (data (i32.const 170814) "a") (data (i32.const 170817) "a") (data (i32.const 170820) "a") (data (i32.const 170823) "a") (data (i32.const 170826) "a") (data (i32.const 170829) "a") (data (i32.const 170832) "a") (data (i32.const 170835) "a") (data (i32.const 170838) "a") (data (i32.const 170841) "a") (data (i32.const 170844) "a") (data (i32.const 170847) "a") (data (i32.const 170850) "a") (data (i32.const 170853) "a") (data (i32.const 170856) "a") (data (i32.const 170859) "a") (data (i32.const 170862) "a") (data (i32.const 170865) "a") (data (i32.const 170868) "a") (data (i32.const 170871) "a") (data (i32.const 170874) "a") (data (i32.const 170877) "a") (data (i32.const 170880) "a") (data (i32.const 170883) "a") (data (i32.const 170886) "a") (data (i32.const 170889) "a") (data (i32.const 170892) "a") (data (i32.const 170895) "a") (data (i32.const 170898) "a") (data (i32.const 170901) "a") (data (i32.const 170904) "a") (data (i32.const 170907) "a") (data (i32.const 170910) "a") (data (i32.const 170913) "a") (data (i32.const 170916) "a") (data (i32.const 170919) "a") (data (i32.const 170922) "a") (data (i32.const 170925) "a") (data (i32.const 170928) "a") (data (i32.const 170931) "a") (data (i32.const 170934) "a") (data (i32.const 170937) "a") (data (i32.const 170940) "a") (data (i32.const 170943) "a") (data (i32.const 170946) "a") (data (i32.const 170949) "a") (data (i32.const 170952) "a") (data (i32.const 170955) "a") (data (i32.const 170958) "a") (data (i32.const 170961) "a") (data (i32.const 170964) "a") (data (i32.const 170967) "a") (data (i32.const 170970) "a") (data (i32.const 170973) "a") (data (i32.const 170976) "a") (data (i32.const 170979) "a") (data (i32.const 170982) "a") (data (i32.const 170985) "a") (data (i32.const 170988) "a") (data (i32.const 170991) "a") (data (i32.const 170994) "a") (data (i32.const 170997) "a") (data (i32.const 171000) "a") (data (i32.const 171003) "a") (data (i32.const 171006) "a") (data (i32.const 171009) "a") (data (i32.const 171012) "a") (data (i32.const 171015) "a") (data (i32.const 171018) "a") (data (i32.const 171021) "a") (data (i32.const 171024) "a") (data (i32.const 171027) "a") (data (i32.const 171030) "a") (data (i32.const 171033) "a") (data (i32.const 171036) "a") (data (i32.const 171039) "a") (data (i32.const 171042) "a") (data (i32.const 171045) "a") (data (i32.const 171048) "a") (data (i32.const 171051) "a") (data (i32.const 171054) "a") (data (i32.const 171057) "a") (data (i32.const 171060) "a") (data (i32.const 171063) "a") (data (i32.const 171066) "a") (data (i32.const 171069) "a") (data (i32.const 171072) "a") (data (i32.const 171075) "a") (data (i32.const 171078) "a") (data (i32.const 171081) "a") (data (i32.const 171084) "a") (data (i32.const 171087) "a") (data (i32.const 171090) "a") (data (i32.const 171093) "a") (data (i32.const 171096) "a") (data (i32.const 171099) "a") (data (i32.const 171102) "a") (data (i32.const 171105) "a") (data (i32.const 171108) "a") (data (i32.const 171111) "a") (data (i32.const 171114) "a") (data (i32.const 171117) "a") (data (i32.const 171120) "a") (data (i32.const 171123) "a") (data (i32.const 171126) "a") (data (i32.const 171129) "a") (data (i32.const 171132) "a") (data (i32.const 171135) "a") (data (i32.const 171138) "a") (data (i32.const 171141) "a") (data (i32.const 171144) "a") (data (i32.const 171147) "a") (data (i32.const 171150) "a") (data (i32.const 171153) "a") (data (i32.const 171156) "a") (data (i32.const 171159) "a") (data (i32.const 171162) "a") (data (i32.const 171165) "a") (data (i32.const 171168) "a") (data (i32.const 171171) "a") (data (i32.const 171174) "a") (data (i32.const 171177) "a") (data (i32.const 171180) "a") (data (i32.const 171183) "a") (data (i32.const 171186) "a") (data (i32.const 171189) "a") (data (i32.const 171192) "a") (data (i32.const 171195) "a") (data (i32.const 171198) "a") (data (i32.const 171201) "a") (data (i32.const 171204) "a") (data (i32.const 171207) "a") (data (i32.const 171210) "a") (data (i32.const 171213) "a") (data (i32.const 171216) "a") (data (i32.const 171219) "a") (data (i32.const 171222) "a") (data (i32.const 171225) "a") (data (i32.const 171228) "a") (data (i32.const 171231) "a") (data (i32.const 171234) "a") (data (i32.const 171237) "a") (data (i32.const 171240) "a") (data (i32.const 171243) "a") (data (i32.const 171246) "a") (data (i32.const 171249) "a") (data (i32.const 171252) "a") (data (i32.const 171255) "a") (data (i32.const 171258) "a") (data (i32.const 171261) "a") (data (i32.const 171264) "a") (data (i32.const 171267) "a") (data (i32.const 171270) "a") (data (i32.const 171273) "a") (data (i32.const 171276) "a") (data (i32.const 171279) "a") (data (i32.const 171282) "a") (data (i32.const 171285) "a") (data (i32.const 171288) "a") (data (i32.const 171291) "a") (data (i32.const 171294) "a") (data (i32.const 171297) "a") (data (i32.const 171300) "a") (data (i32.const 171303) "a") (data (i32.const 171306) "a") (data (i32.const 171309) "a") (data (i32.const 171312) "a") (data (i32.const 171315) "a") (data (i32.const 171318) "a") (data (i32.const 171321) "a") (data (i32.const 171324) "a") (data (i32.const 171327) "a") (data (i32.const 171330) "a") (data (i32.const 171333) "a") (data (i32.const 171336) "a") (data (i32.const 171339) "a") (data (i32.const 171342) "a") (data (i32.const 171345) "a") (data (i32.const 171348) "a") (data (i32.const 171351) "a") (data (i32.const 171354) "a") (data (i32.const 171357) "a") (data (i32.const 171360) "a") (data (i32.const 171363) "a") (data (i32.const 171366) "a") (data (i32.const 171369) "a") (data (i32.const 171372) "a") (data (i32.const 171375) "a") (data (i32.const 171378) "a") (data (i32.const 171381) "a") (data (i32.const 171384) "a") (data (i32.const 171387) "a") (data (i32.const 171390) "a") (data (i32.const 171393) "a") (data (i32.const 171396) "a") (data (i32.const 171399) "a") (data (i32.const 171402) "a") (data (i32.const 171405) "a") (data (i32.const 171408) "a") (data (i32.const 171411) "a") (data (i32.const 171414) "a") (data (i32.const 171417) "a") (data (i32.const 171420) "a") (data (i32.const 171423) "a") (data (i32.const 171426) "a") (data (i32.const 171429) "a") (data (i32.const 171432) "a") (data (i32.const 171435) "a") (data (i32.const 171438) "a") (data (i32.const 171441) "a") (data (i32.const 171444) "a") (data (i32.const 171447) "a") (data (i32.const 171450) "a") (data (i32.const 171453) "a") (data (i32.const 171456) "a") (data (i32.const 171459) "a") (data (i32.const 171462) "a") (data (i32.const 171465) "a") (data (i32.const 171468) "a") (data (i32.const 171471) "a") (data (i32.const 171474) "a") (data (i32.const 171477) "a") (data (i32.const 171480) "a") (data (i32.const 171483) "a") (data (i32.const 171486) "a") (data (i32.const 171489) "a") (data (i32.const 171492) "a") (data (i32.const 171495) "a") (data (i32.const 171498) "a") (data (i32.const 171501) "a") (data (i32.const 171504) "a") (data (i32.const 171507) "a") (data (i32.const 171510) "a") (data (i32.const 171513) "a") (data (i32.const 171516) "a") (data (i32.const 171519) "a") (data (i32.const 171522) "a") (data (i32.const 171525) "a") (data (i32.const 171528) "a") (data (i32.const 171531) "a") (data (i32.const 171534) "a") (data (i32.const 171537) "a") (data (i32.const 171540) "a") (data (i32.const 171543) "a") (data (i32.const 171546) "a") (data (i32.const 171549) "a") (data (i32.const 171552) "a") (data (i32.const 171555) "a") (data (i32.const 171558) "a") (data (i32.const 171561) "a") (data (i32.const 171564) "a") (data (i32.const 171567) "a") (data (i32.const 171570) "a") (data (i32.const 171573) "a") (data (i32.const 171576) "a") (data (i32.const 171579) "a") (data (i32.const 171582) "a") (data (i32.const 171585) "a") (data (i32.const 171588) "a") (data (i32.const 171591) "a") (data (i32.const 171594) "a") (data (i32.const 171597) "a") (data (i32.const 171600) "a") (data (i32.const 171603) "a") (data (i32.const 171606) "a") (data (i32.const 171609) "a") (data (i32.const 171612) "a") (data (i32.const 171615) "a") (data (i32.const 171618) "a") (data (i32.const 171621) "a") (data (i32.const 171624) "a") (data (i32.const 171627) "a") (data (i32.const 171630) "a") (data (i32.const 171633) "a") (data (i32.const 171636) "a") (data (i32.const 171639) "a") (data (i32.const 171642) "a") (data (i32.const 171645) "a") (data (i32.const 171648) "a") (data (i32.const 171651) "a") (data (i32.const 171654) "a") (data (i32.const 171657) "a") (data (i32.const 171660) "a") (data (i32.const 171663) "a") (data (i32.const 171666) "a") (data (i32.const 171669) "a") (data (i32.const 171672) "a") (data (i32.const 171675) "a") (data (i32.const 171678) "a") (data (i32.const 171681) "a") (data (i32.const 171684) "a") (data (i32.const 171687) "a") (data (i32.const 171690) "a") (data (i32.const 171693) "a") (data (i32.const 171696) "a") (data (i32.const 171699) "a") (data (i32.const 171702) "a") (data (i32.const 171705) "a") (data (i32.const 171708) "a") (data (i32.const 171711) "a") (data (i32.const 171714) "a") (data (i32.const 171717) "a") (data (i32.const 171720) "a") (data (i32.const 171723) "a") (data (i32.const 171726) "a") (data (i32.const 171729) "a") (data (i32.const 171732) "a") (data (i32.const 171735) "a") (data (i32.const 171738) "a") (data (i32.const 171741) "a") (data (i32.const 171744) "a") (data (i32.const 171747) "a") (data (i32.const 171750) "a") (data (i32.const 171753) "a") (data (i32.const 171756) "a") (data (i32.const 171759) "a") (data (i32.const 171762) "a") (data (i32.const 171765) "a") (data (i32.const 171768) "a") (data (i32.const 171771) "a") (data (i32.const 171774) "a") (data (i32.const 171777) "a") (data (i32.const 171780) "a") (data (i32.const 171783) "a") (data (i32.const 171786) "a") (data (i32.const 171789) "a") (data (i32.const 171792) "a") (data (i32.const 171795) "a") (data (i32.const 171798) "a") (data (i32.const 171801) "a") (data (i32.const 171804) "a") (data (i32.const 171807) "a") (data (i32.const 171810) "a") (data (i32.const 171813) "a") (data (i32.const 171816) "a") (data (i32.const 171819) "a") (data (i32.const 171822) "a") (data (i32.const 171825) "a") (data (i32.const 171828) "a") (data (i32.const 171831) "a") (data (i32.const 171834) "a") (data (i32.const 171837) "a") (data (i32.const 171840) "a") (data (i32.const 171843) "a") (data (i32.const 171846) "a") (data (i32.const 171849) "a") (data (i32.const 171852) "a") (data (i32.const 171855) "a") (data (i32.const 171858) "a") (data (i32.const 171861) "a") (data (i32.const 171864) "a") (data (i32.const 171867) "a") (data (i32.const 171870) "a") (data (i32.const 171873) "a") (data (i32.const 171876) "a") (data (i32.const 171879) "a") (data (i32.const 171882) "a") (data (i32.const 171885) "a") (data (i32.const 171888) "a") (data (i32.const 171891) "a") (data (i32.const 171894) "a") (data (i32.const 171897) "a") (data (i32.const 171900) "a") (data (i32.const 171903) "a") (data (i32.const 171906) "a") (data (i32.const 171909) "a") (data (i32.const 171912) "a") (data (i32.const 171915) "a") (data (i32.const 171918) "a") (data (i32.const 171921) "a") (data (i32.const 171924) "a") (data (i32.const 171927) "a") (data (i32.const 171930) "a") (data (i32.const 171933) "a") (data (i32.const 171936) "a") (data (i32.const 171939) "a") (data (i32.const 171942) "a") (data (i32.const 171945) "a") (data (i32.const 171948) "a") (data (i32.const 171951) "a") (data (i32.const 171954) "a") (data (i32.const 171957) "a") (data (i32.const 171960) "a") (data (i32.const 171963) "a") (data (i32.const 171966) "a") (data (i32.const 171969) "a") (data (i32.const 171972) "a") (data (i32.const 171975) "a") (data (i32.const 171978) "a") (data (i32.const 171981) "a") (data (i32.const 171984) "a") (data (i32.const 171987) "a") (data (i32.const 171990) "a") (data (i32.const 171993) "a") (data (i32.const 171996) "a") (data (i32.const 171999) "a") (data (i32.const 172002) "a") (data (i32.const 172005) "a") (data (i32.const 172008) "a") (data (i32.const 172011) "a") (data (i32.const 172014) "a") (data (i32.const 172017) "a") (data (i32.const 172020) "a") (data (i32.const 172023) "a") (data (i32.const 172026) "a") (data (i32.const 172029) "a") (data (i32.const 172032) "a") (data (i32.const 172035) "a") (data (i32.const 172038) "a") (data (i32.const 172041) "a") (data (i32.const 172044) "a") (data (i32.const 172047) "a") (data (i32.const 172050) "a") (data (i32.const 172053) "a") (data (i32.const 172056) "a") (data (i32.const 172059) "a") (data (i32.const 172062) "a") (data (i32.const 172065) "a") (data (i32.const 172068) "a") (data (i32.const 172071) "a") (data (i32.const 172074) "a") (data (i32.const 172077) "a") (data (i32.const 172080) "a") (data (i32.const 172083) "a") (data (i32.const 172086) "a") (data (i32.const 172089) "a") (data (i32.const 172092) "a") (data (i32.const 172095) "a") (data (i32.const 172098) "a") (data (i32.const 172101) "a") (data (i32.const 172104) "a") (data (i32.const 172107) "a") (data (i32.const 172110) "a") (data (i32.const 172113) "a") (data (i32.const 172116) "a") (data (i32.const 172119) "a") (data (i32.const 172122) "a") (data (i32.const 172125) "a") (data (i32.const 172128) "a") (data (i32.const 172131) "a") (data (i32.const 172134) "a") (data (i32.const 172137) "a") (data (i32.const 172140) "a") (data (i32.const 172143) "a") (data (i32.const 172146) "a") (data (i32.const 172149) "a") (data (i32.const 172152) "a") (data (i32.const 172155) "a") (data (i32.const 172158) "a") (data (i32.const 172161) "a") (data (i32.const 172164) "a") (data (i32.const 172167) "a") (data (i32.const 172170) "a") (data (i32.const 172173) "a") (data (i32.const 172176) "a") (data (i32.const 172179) "a") (data (i32.const 172182) "a") (data (i32.const 172185) "a") (data (i32.const 172188) "a") (data (i32.const 172191) "a") (data (i32.const 172194) "a") (data (i32.const 172197) "a") (data (i32.const 172200) "a") (data (i32.const 172203) "a") (data (i32.const 172206) "a") (data (i32.const 172209) "a") (data (i32.const 172212) "a") (data (i32.const 172215) "a") (data (i32.const 172218) "a") (data (i32.const 172221) "a") (data (i32.const 172224) "a") (data (i32.const 172227) "a") (data (i32.const 172230) "a") (data (i32.const 172233) "a") (data (i32.const 172236) "a") (data (i32.const 172239) "a") (data (i32.const 172242) "a") (data (i32.const 172245) "a") (data (i32.const 172248) "a") (data (i32.const 172251) "a") (data (i32.const 172254) "a") (data (i32.const 172257) "a") (data (i32.const 172260) "a") (data (i32.const 172263) "a") (data (i32.const 172266) "a") (data (i32.const 172269) "a") (data (i32.const 172272) "a") (data (i32.const 172275) "a") (data (i32.const 172278) "a") (data (i32.const 172281) "a") (data (i32.const 172284) "a") (data (i32.const 172287) "a") (data (i32.const 172290) "a") (data (i32.const 172293) "a") (data (i32.const 172296) "a") (data (i32.const 172299) "a") (data (i32.const 172302) "a") (data (i32.const 172305) "a") (data (i32.const 172308) "a") (data (i32.const 172311) "a") (data (i32.const 172314) "a") (data (i32.const 172317) "a") (data (i32.const 172320) "a") (data (i32.const 172323) "a") (data (i32.const 172326) "a") (data (i32.const 172329) "a") (data (i32.const 172332) "a") (data (i32.const 172335) "a") (data (i32.const 172338) "a") (data (i32.const 172341) "a") (data (i32.const 172344) "a") (data (i32.const 172347) "a") (data (i32.const 172350) "a") (data (i32.const 172353) "a") (data (i32.const 172356) "a") (data (i32.const 172359) "a") (data (i32.const 172362) "a") (data (i32.const 172365) "a") (data (i32.const 172368) "a") (data (i32.const 172371) "a") (data (i32.const 172374) "a") (data (i32.const 172377) "a") (data (i32.const 172380) "a") (data (i32.const 172383) "a") (data (i32.const 172386) "a") (data (i32.const 172389) "a") (data (i32.const 172392) "a") (data (i32.const 172395) "a") (data (i32.const 172398) "a") (data (i32.const 172401) "a") (data (i32.const 172404) "a") (data (i32.const 172407) "a") (data (i32.const 172410) "a") (data (i32.const 172413) "a") (data (i32.const 172416) "a") (data (i32.const 172419) "a") (data (i32.const 172422) "a") (data (i32.const 172425) "a") (data (i32.const 172428) "a") (data (i32.const 172431) "a") (data (i32.const 172434) "a") (data (i32.const 172437) "a") (data (i32.const 172440) "a") (data (i32.const 172443) "a") (data (i32.const 172446) "a") (data (i32.const 172449) "a") (data (i32.const 172452) "a") (data (i32.const 172455) "a") (data (i32.const 172458) "a") (data (i32.const 172461) "a") (data (i32.const 172464) "a") (data (i32.const 172467) "a") (data (i32.const 172470) "a") (data (i32.const 172473) "a") (data (i32.const 172476) "a") (data (i32.const 172479) "a") (data (i32.const 172482) "a") (data (i32.const 172485) "a") (data (i32.const 172488) "a") (data (i32.const 172491) "a") (data (i32.const 172494) "a") (data (i32.const 172497) "a") (data (i32.const 172500) "a") (data (i32.const 172503) "a") (data (i32.const 172506) "a") (data (i32.const 172509) "a") (data (i32.const 172512) "a") (data (i32.const 172515) "a") (data (i32.const 172518) "a") (data (i32.const 172521) "a") (data (i32.const 172524) "a") (data (i32.const 172527) "a") (data (i32.const 172530) "a") (data (i32.const 172533) "a") (data (i32.const 172536) "a") (data (i32.const 172539) "a") (data (i32.const 172542) "a") (data (i32.const 172545) "a") (data (i32.const 172548) "a") (data (i32.const 172551) "a") (data (i32.const 172554) "a") (data (i32.const 172557) "a") (data (i32.const 172560) "a") (data (i32.const 172563) "a") (data (i32.const 172566) "a") (data (i32.const 172569) "a") (data (i32.const 172572) "a") (data (i32.const 172575) "a") (data (i32.const 172578) "a") (data (i32.const 172581) "a") (data (i32.const 172584) "a") (data (i32.const 172587) "a") (data (i32.const 172590) "a") (data (i32.const 172593) "a") (data (i32.const 172596) "a") (data (i32.const 172599) "a") (data (i32.const 172602) "a") (data (i32.const 172605) "a") (data (i32.const 172608) "a") (data (i32.const 172611) "a") (data (i32.const 172614) "a") (data (i32.const 172617) "a") (data (i32.const 172620) "a") (data (i32.const 172623) "a") (data (i32.const 172626) "a") (data (i32.const 172629) "a") (data (i32.const 172632) "a") (data (i32.const 172635) "a") (data (i32.const 172638) "a") (data (i32.const 172641) "a") (data (i32.const 172644) "a") (data (i32.const 172647) "a") (data (i32.const 172650) "a") (data (i32.const 172653) "a") (data (i32.const 172656) "a") (data (i32.const 172659) "a") (data (i32.const 172662) "a") (data (i32.const 172665) "a") (data (i32.const 172668) "a") (data (i32.const 172671) "a") (data (i32.const 172674) "a") (data (i32.const 172677) "a") (data (i32.const 172680) "a") (data (i32.const 172683) "a") (data (i32.const 172686) "a") (data (i32.const 172689) "a") (data (i32.const 172692) "a") (data (i32.const 172695) "a") (data (i32.const 172698) "a") (data (i32.const 172701) "a") (data (i32.const 172704) "a") (data (i32.const 172707) "a") (data (i32.const 172710) "a") (data (i32.const 172713) "a") (data (i32.const 172716) "a") (data (i32.const 172719) "a") (data (i32.const 172722) "a") (data (i32.const 172725) "a") (data (i32.const 172728) "a") (data (i32.const 172731) "a") (data (i32.const 172734) "a") (data (i32.const 172737) "a") (data (i32.const 172740) "a") (data (i32.const 172743) "a") (data (i32.const 172746) "a") (data (i32.const 172749) "a") (data (i32.const 172752) "a") (data (i32.const 172755) "a") (data (i32.const 172758) "a") (data (i32.const 172761) "a") (data (i32.const 172764) "a") (data (i32.const 172767) "a") (data (i32.const 172770) "a") (data (i32.const 172773) "a") (data (i32.const 172776) "a") (data (i32.const 172779) "a") (data (i32.const 172782) "a") (data (i32.const 172785) "a") (data (i32.const 172788) "a") (data (i32.const 172791) "a") (data (i32.const 172794) "a") (data (i32.const 172797) "a") (data (i32.const 172800) "a") (data (i32.const 172803) "a") (data (i32.const 172806) "a") (data (i32.const 172809) "a") (data (i32.const 172812) "a") (data (i32.const 172815) "a") (data (i32.const 172818) "a") (data (i32.const 172821) "a") (data (i32.const 172824) "a") (data (i32.const 172827) "a") (data (i32.const 172830) "a") (data (i32.const 172833) "a") (data (i32.const 172836) "a") (data (i32.const 172839) "a") (data (i32.const 172842) "a") (data (i32.const 172845) "a") (data (i32.const 172848) "a") (data (i32.const 172851) "a") (data (i32.const 172854) "a") (data (i32.const 172857) "a") (data (i32.const 172860) "a") (data (i32.const 172863) "a") (data (i32.const 172866) "a") (data (i32.const 172869) "a") (data (i32.const 172872) "a") (data (i32.const 172875) "a") (data (i32.const 172878) "a") (data (i32.const 172881) "a") (data (i32.const 172884) "a") (data (i32.const 172887) "a") (data (i32.const 172890) "a") (data (i32.const 172893) "a") (data (i32.const 172896) "a") (data (i32.const 172899) "a") (data (i32.const 172902) "a") (data (i32.const 172905) "a") (data (i32.const 172908) "a") (data (i32.const 172911) "a") (data (i32.const 172914) "a") (data (i32.const 172917) "a") (data (i32.const 172920) "a") (data (i32.const 172923) "a") (data (i32.const 172926) "a") (data (i32.const 172929) "a") (data (i32.const 172932) "a") (data (i32.const 172935) "a") (data (i32.const 172938) "a") (data (i32.const 172941) "a") (data (i32.const 172944) "a") (data (i32.const 172947) "a") (data (i32.const 172950) "a") (data (i32.const 172953) "a") (data (i32.const 172956) "a") (data (i32.const 172959) "a") (data (i32.const 172962) "a") (data (i32.const 172965) "a") (data (i32.const 172968) "a") (data (i32.const 172971) "a") (data (i32.const 172974) "a") (data (i32.const 172977) "a") (data (i32.const 172980) "a") (data (i32.const 172983) "a") (data (i32.const 172986) "a") (data (i32.const 172989) "a") (data (i32.const 172992) "a") (data (i32.const 172995) "a") (data (i32.const 172998) "a") (data (i32.const 173001) "a") (data (i32.const 173004) "a") (data (i32.const 173007) "a") (data (i32.const 173010) "a") (data (i32.const 173013) "a") (data (i32.const 173016) "a") (data (i32.const 173019) "a") (data (i32.const 173022) "a") (data (i32.const 173025) "a") (data (i32.const 173028) "a") (data (i32.const 173031) "a") (data (i32.const 173034) "a") (data (i32.const 173037) "a") (data (i32.const 173040) "a") (data (i32.const 173043) "a") (data (i32.const 173046) "a") (data (i32.const 173049) "a") (data (i32.const 173052) "a") (data (i32.const 173055) "a") (data (i32.const 173058) "a") (data (i32.const 173061) "a") (data (i32.const 173064) "a") (data (i32.const 173067) "a") (data (i32.const 173070) "a") (data (i32.const 173073) "a") (data (i32.const 173076) "a") (data (i32.const 173079) "a") (data (i32.const 173082) "a") (data (i32.const 173085) "a") (data (i32.const 173088) "a") (data (i32.const 173091) "a") (data (i32.const 173094) "a") (data (i32.const 173097) "a") (data (i32.const 173100) "a") (data (i32.const 173103) "a") (data (i32.const 173106) "a") (data (i32.const 173109) "a") (data (i32.const 173112) "a") (data (i32.const 173115) "a") (data (i32.const 173118) "a") (data (i32.const 173121) "a") (data (i32.const 173124) "a") (data (i32.const 173127) "a") (data (i32.const 173130) "a") (data (i32.const 173133) "a") (data (i32.const 173136) "a") (data (i32.const 173139) "a") (data (i32.const 173142) "a") (data (i32.const 173145) "a") (data (i32.const 173148) "a") (data (i32.const 173151) "a") (data (i32.const 173154) "a") (data (i32.const 173157) "a") (data (i32.const 173160) "a") (data (i32.const 173163) "a") (data (i32.const 173166) "a") (data (i32.const 173169) "a") (data (i32.const 173172) "a") (data (i32.const 173175) "a") (data (i32.const 173178) "a") (data (i32.const 173181) "a") (data (i32.const 173184) "a") (data (i32.const 173187) "a") (data (i32.const 173190) "a") (data (i32.const 173193) "a") (data (i32.const 173196) "a") (data (i32.const 173199) "a") (data (i32.const 173202) "a") (data (i32.const 173205) "a") (data (i32.const 173208) "a") (data (i32.const 173211) "a") (data (i32.const 173214) "a") (data (i32.const 173217) "a") (data (i32.const 173220) "a") (data (i32.const 173223) "a") (data (i32.const 173226) "a") (data (i32.const 173229) "a") (data (i32.const 173232) "a") (data (i32.const 173235) "a") (data (i32.const 173238) "a") (data (i32.const 173241) "a") (data (i32.const 173244) "a") (data (i32.const 173247) "a") (data (i32.const 173250) "a") (data (i32.const 173253) "a") (data (i32.const 173256) "a") (data (i32.const 173259) "a") (data (i32.const 173262) "a") (data (i32.const 173265) "a") (data (i32.const 173268) "a") (data (i32.const 173271) "a") (data (i32.const 173274) "a") (data (i32.const 173277) "a") (data (i32.const 173280) "a") (data (i32.const 173283) "a") (data (i32.const 173286) "a") (data (i32.const 173289) "a") (data (i32.const 173292) "a") (data (i32.const 173295) "a") (data (i32.const 173298) "a") (data (i32.const 173301) "a") (data (i32.const 173304) "a") (data (i32.const 173307) "a") (data (i32.const 173310) "a") (data (i32.const 173313) "a") (data (i32.const 173316) "a") (data (i32.const 173319) "a") (data (i32.const 173322) "a") (data (i32.const 173325) "a") (data (i32.const 173328) "a") (data (i32.const 173331) "a") (data (i32.const 173334) "a") (data (i32.const 173337) "a") (data (i32.const 173340) "a") (data (i32.const 173343) "a") (data (i32.const 173346) "a") (data (i32.const 173349) "a") (data (i32.const 173352) "a") (data (i32.const 173355) "a") (data (i32.const 173358) "a") (data (i32.const 173361) "a") (data (i32.const 173364) "a") (data (i32.const 173367) "a") (data (i32.const 173370) "a") (data (i32.const 173373) "a") (data (i32.const 173376) "a") (data (i32.const 173379) "a") (data (i32.const 173382) "a") (data (i32.const 173385) "a") (data (i32.const 173388) "a") (data (i32.const 173391) "a") (data (i32.const 173394) "a") (data (i32.const 173397) "a") (data (i32.const 173400) "a") (data (i32.const 173403) "a") (data (i32.const 173406) "a") (data (i32.const 173409) "a") (data (i32.const 173412) "a") (data (i32.const 173415) "a") (data (i32.const 173418) "a") (data (i32.const 173421) "a") (data (i32.const 173424) "a") (data (i32.const 173427) "a") (data (i32.const 173430) "a") (data (i32.const 173433) "a") (data (i32.const 173436) "a") (data (i32.const 173439) "a") (data (i32.const 173442) "a") (data (i32.const 173445) "a") (data (i32.const 173448) "a") (data (i32.const 173451) "a") (data (i32.const 173454) "a") (data (i32.const 173457) "a") (data (i32.const 173460) "a") (data (i32.const 173463) "a") (data (i32.const 173466) "a") (data (i32.const 173469) "a") (data (i32.const 173472) "a") (data (i32.const 173475) "a") (data (i32.const 173478) "a") (data (i32.const 173481) "a") (data (i32.const 173484) "a") (data (i32.const 173487) "a") (data (i32.const 173490) "a") (data (i32.const 173493) "a") (data (i32.const 173496) "a") (data (i32.const 173499) "a") (data (i32.const 173502) "a") (data (i32.const 173505) "a") (data (i32.const 173508) "a") (data (i32.const 173511) "a") (data (i32.const 173514) "a") (data (i32.const 173517) "a") (data (i32.const 173520) "a") (data (i32.const 173523) "a") (data (i32.const 173526) "a") (data (i32.const 173529) "a") (data (i32.const 173532) "a") (data (i32.const 173535) "a") (data (i32.const 173538) "a") (data (i32.const 173541) "a") (data (i32.const 173544) "a") (data (i32.const 173547) "a") (data (i32.const 173550) "a") (data (i32.const 173553) "a") (data (i32.const 173556) "a") (data (i32.const 173559) "a") (data (i32.const 173562) "a") (data (i32.const 173565) "a") (data (i32.const 173568) "a") (data (i32.const 173571) "a") (data (i32.const 173574) "a") (data (i32.const 173577) "a") (data (i32.const 173580) "a") (data (i32.const 173583) "a") (data (i32.const 173586) "a") (data (i32.const 173589) "a") (data (i32.const 173592) "a") (data (i32.const 173595) "a") (data (i32.const 173598) "a") (data (i32.const 173601) "a") (data (i32.const 173604) "a") (data (i32.const 173607) "a") (data (i32.const 173610) "a") (data (i32.const 173613) "a") (data (i32.const 173616) "a") (data (i32.const 173619) "a") (data (i32.const 173622) "a") (data (i32.const 173625) "a") (data (i32.const 173628) "a") (data (i32.const 173631) "a") (data (i32.const 173634) "a") (data (i32.const 173637) "a") (data (i32.const 173640) "a") (data (i32.const 173643) "a") (data (i32.const 173646) "a") (data (i32.const 173649) "a") (data (i32.const 173652) "a") (data (i32.const 173655) "a") (data (i32.const 173658) "a") (data (i32.const 173661) "a") (data (i32.const 173664) "a") (data (i32.const 173667) "a") (data (i32.const 173670) "a") (data (i32.const 173673) "a") (data (i32.const 173676) "a") (data (i32.const 173679) "a") (data (i32.const 173682) "a") (data (i32.const 173685) "a") (data (i32.const 173688) "a") (data (i32.const 173691) "a") (data (i32.const 173694) "a") (data (i32.const 173697) "a") (data (i32.const 173700) "a") (data (i32.const 173703) "a") (data (i32.const 173706) "a") (data (i32.const 173709) "a") (data (i32.const 173712) "a") (data (i32.const 173715) "a") (data (i32.const 173718) "a") (data (i32.const 173721) "a") (data (i32.const 173724) "a") (data (i32.const 173727) "a") (data (i32.const 173730) "a") (data (i32.const 173733) "a") (data (i32.const 173736) "a") (data (i32.const 173739) "a") (data (i32.const 173742) "a") (data (i32.const 173745) "a") (data (i32.const 173748) "a") (data (i32.const 173751) "a") (data (i32.const 173754) "a") (data (i32.const 173757) "a") (data (i32.const 173760) "a") (data (i32.const 173763) "a") (data (i32.const 173766) "a") (data (i32.const 173769) "a") (data (i32.const 173772) "a") (data (i32.const 173775) "a") (data (i32.const 173778) "a") (data (i32.const 173781) "a") (data (i32.const 173784) "a") (data (i32.const 173787) "a") (data (i32.const 173790) "a") (data (i32.const 173793) "a") (data (i32.const 173796) "a") (data (i32.const 173799) "a") (data (i32.const 173802) "a") (data (i32.const 173805) "a") (data (i32.const 173808) "a") (data (i32.const 173811) "a") (data (i32.const 173814) "a") (data (i32.const 173817) "a") (data (i32.const 173820) "a") (data (i32.const 173823) "a") (data (i32.const 173826) "a") (data (i32.const 173829) "a") (data (i32.const 173832) "a") (data (i32.const 173835) "a") (data (i32.const 173838) "a") (data (i32.const 173841) "a") (data (i32.const 173844) "a") (data (i32.const 173847) "a") (data (i32.const 173850) "a") (data (i32.const 173853) "a") (data (i32.const 173856) "a") (data (i32.const 173859) "a") (data (i32.const 173862) "a") (data (i32.const 173865) "a") (data (i32.const 173868) "a") (data (i32.const 173871) "a") (data (i32.const 173874) "a") (data (i32.const 173877) "a") (data (i32.const 173880) "a") (data (i32.const 173883) "a") (data (i32.const 173886) "a") (data (i32.const 173889) "a") (data (i32.const 173892) "a") (data (i32.const 173895) "a") (data (i32.const 173898) "a") (data (i32.const 173901) "a") (data (i32.const 173904) "a") (data (i32.const 173907) "a") (data (i32.const 173910) "a") (data (i32.const 173913) "a") (data (i32.const 173916) "a") (data (i32.const 173919) "a") (data (i32.const 173922) "a") (data (i32.const 173925) "a") (data (i32.const 173928) "a") (data (i32.const 173931) "a") (data (i32.const 173934) "a") (data (i32.const 173937) "a") (data (i32.const 173940) "a") (data (i32.const 173943) "a") (data (i32.const 173946) "a") (data (i32.const 173949) "a") (data (i32.const 173952) "a") (data (i32.const 173955) "a") (data (i32.const 173958) "a") (data (i32.const 173961) "a") (data (i32.const 173964) "a") (data (i32.const 173967) "a") (data (i32.const 173970) "a") (data (i32.const 173973) "a") (data (i32.const 173976) "a") (data (i32.const 173979) "a") (data (i32.const 173982) "a") (data (i32.const 173985) "a") (data (i32.const 173988) "a") (data (i32.const 173991) "a") (data (i32.const 173994) "a") (data (i32.const 173997) "a") (data (i32.const 174000) "a") (data (i32.const 174003) "a") (data (i32.const 174006) "a") (data (i32.const 174009) "a") (data (i32.const 174012) "a") (data (i32.const 174015) "a") (data (i32.const 174018) "a") (data (i32.const 174021) "a") (data (i32.const 174024) "a") (data (i32.const 174027) "a") (data (i32.const 174030) "a") (data (i32.const 174033) "a") (data (i32.const 174036) "a") (data (i32.const 174039) "a") (data (i32.const 174042) "a") (data (i32.const 174045) "a") (data (i32.const 174048) "a") (data (i32.const 174051) "a") (data (i32.const 174054) "a") (data (i32.const 174057) "a") (data (i32.const 174060) "a") (data (i32.const 174063) "a") (data (i32.const 174066) "a") (data (i32.const 174069) "a") (data (i32.const 174072) "a") (data (i32.const 174075) "a") (data (i32.const 174078) "a") (data (i32.const 174081) "a") (data (i32.const 174084) "a") (data (i32.const 174087) "a") (data (i32.const 174090) "a") (data (i32.const 174093) "a") (data (i32.const 174096) "a") (data (i32.const 174099) "a") (data (i32.const 174102) "a") (data (i32.const 174105) "a") (data (i32.const 174108) "a") (data (i32.const 174111) "a") (data (i32.const 174114) "a") (data (i32.const 174117) "a") (data (i32.const 174120) "a") (data (i32.const 174123) "a") (data (i32.const 174126) "a") (data (i32.const 174129) "a") (data (i32.const 174132) "a") (data (i32.const 174135) "a") (data (i32.const 174138) "a") (data (i32.const 174141) "a") (data (i32.const 174144) "a") (data (i32.const 174147) "a") (data (i32.const 174150) "a") (data (i32.const 174153) "a") (data (i32.const 174156) "a") (data (i32.const 174159) "a") (data (i32.const 174162) "a") (data (i32.const 174165) "a") (data (i32.const 174168) "a") (data (i32.const 174171) "a") (data (i32.const 174174) "a") (data (i32.const 174177) "a") (data (i32.const 174180) "a") (data (i32.const 174183) "a") (data (i32.const 174186) "a") (data (i32.const 174189) "a") (data (i32.const 174192) "a") (data (i32.const 174195) "a") (data (i32.const 174198) "a") (data (i32.const 174201) "a") (data (i32.const 174204) "a") (data (i32.const 174207) "a") (data (i32.const 174210) "a") (data (i32.const 174213) "a") (data (i32.const 174216) "a") (data (i32.const 174219) "a") (data (i32.const 174222) "a") (data (i32.const 174225) "a") (data (i32.const 174228) "a") (data (i32.const 174231) "a") (data (i32.const 174234) "a") (data (i32.const 174237) "a") (data (i32.const 174240) "a") (data (i32.const 174243) "a") (data (i32.const 174246) "a") (data (i32.const 174249) "a") (data (i32.const 174252) "a") (data (i32.const 174255) "a") (data (i32.const 174258) "a") (data (i32.const 174261) "a") (data (i32.const 174264) "a") (data (i32.const 174267) "a") (data (i32.const 174270) "a") (data (i32.const 174273) "a") (data (i32.const 174276) "a") (data (i32.const 174279) "a") (data (i32.const 174282) "a") (data (i32.const 174285) "a") (data (i32.const 174288) "a") (data (i32.const 174291) "a") (data (i32.const 174294) "a") (data (i32.const 174297) "a") (data (i32.const 174300) "a") (data (i32.const 174303) "a") (data (i32.const 174306) "a") (data (i32.const 174309) "a") (data (i32.const 174312) "a") (data (i32.const 174315) "a") (data (i32.const 174318) "a") (data (i32.const 174321) "a") (data (i32.const 174324) "a") (data (i32.const 174327) "a") (data (i32.const 174330) "a") (data (i32.const 174333) "a") (data (i32.const 174336) "a") (data (i32.const 174339) "a") (data (i32.const 174342) "a") (data (i32.const 174345) "a") (data (i32.const 174348) "a") (data (i32.const 174351) "a") (data (i32.const 174354) "a") (data (i32.const 174357) "a") (data (i32.const 174360) "a") (data (i32.const 174363) "a") (data (i32.const 174366) "a") (data (i32.const 174369) "a") (data (i32.const 174372) "a") (data (i32.const 174375) "a") (data (i32.const 174378) "a") (data (i32.const 174381) "a") (data (i32.const 174384) "a") (data (i32.const 174387) "a") (data (i32.const 174390) "a") (data (i32.const 174393) "a") (data (i32.const 174396) "a") (data (i32.const 174399) "a") (data (i32.const 174402) "a") (data (i32.const 174405) "a") (data (i32.const 174408) "a") (data (i32.const 174411) "a") (data (i32.const 174414) "a") (data (i32.const 174417) "a") (data (i32.const 174420) "a") (data (i32.const 174423) "a") (data (i32.const 174426) "a") (data (i32.const 174429) "a") (data (i32.const 174432) "a") (data (i32.const 174435) "a") (data (i32.const 174438) "a") (data (i32.const 174441) "a") (data (i32.const 174444) "a") (data (i32.const 174447) "a") (data (i32.const 174450) "a") (data (i32.const 174453) "a") (data (i32.const 174456) "a") (data (i32.const 174459) "a") (data (i32.const 174462) "a") (data (i32.const 174465) "a") (data (i32.const 174468) "a") (data (i32.const 174471) "a") (data (i32.const 174474) "a") (data (i32.const 174477) "a") (data (i32.const 174480) "a") (data (i32.const 174483) "a") (data (i32.const 174486) "a") (data (i32.const 174489) "a") (data (i32.const 174492) "a") (data (i32.const 174495) "a") (data (i32.const 174498) "a") (data (i32.const 174501) "a") (data (i32.const 174504) "a") (data (i32.const 174507) "a") (data (i32.const 174510) "a") (data (i32.const 174513) "a") (data (i32.const 174516) "a") (data (i32.const 174519) "a") (data (i32.const 174522) "a") (data (i32.const 174525) "a") (data (i32.const 174528) "a") (data (i32.const 174531) "a") (data (i32.const 174534) "a") (data (i32.const 174537) "a") (data (i32.const 174540) "a") (data (i32.const 174543) "a") (data (i32.const 174546) "a") (data (i32.const 174549) "a") (data (i32.const 174552) "a") (data (i32.const 174555) "a") (data (i32.const 174558) "a") (data (i32.const 174561) "a") (data (i32.const 174564) "a") (data (i32.const 174567) "a") (data (i32.const 174570) "a") (data (i32.const 174573) "a") (data (i32.const 174576) "a") (data (i32.const 174579) "a") (data (i32.const 174582) "a") (data (i32.const 174585) "a") (data (i32.const 174588) "a") (data (i32.const 174591) "a") (data (i32.const 174594) "a") (data (i32.const 174597) "a") (data (i32.const 174600) "a") (data (i32.const 174603) "a") (data (i32.const 174606) "a") (data (i32.const 174609) "a") (data (i32.const 174612) "a") (data (i32.const 174615) "a") (data (i32.const 174618) "a") (data (i32.const 174621) "a") (data (i32.const 174624) "a") (data (i32.const 174627) "a") (data (i32.const 174630) "a") (data (i32.const 174633) "a") (data (i32.const 174636) "a") (data (i32.const 174639) "a") (data (i32.const 174642) "a") (data (i32.const 174645) "a") (data (i32.const 174648) "a") (data (i32.const 174651) "a") (data (i32.const 174654) "a") (data (i32.const 174657) "a") (data (i32.const 174660) "a") (data (i32.const 174663) "a") (data (i32.const 174666) "a") (data (i32.const 174669) "a") (data (i32.const 174672) "a") (data (i32.const 174675) "a") (data (i32.const 174678) "a") (data (i32.const 174681) "a") (data (i32.const 174684) "a") (data (i32.const 174687) "a") (data (i32.const 174690) "a") (data (i32.const 174693) "a") (data (i32.const 174696) "a") (data (i32.const 174699) "a") (data (i32.const 174702) "a") (data (i32.const 174705) "a") (data (i32.const 174708) "a") (data (i32.const 174711) "a") (data (i32.const 174714) "a") (data (i32.const 174717) "a") (data (i32.const 174720) "a") (data (i32.const 174723) "a") (data (i32.const 174726) "a") (data (i32.const 174729) "a") (data (i32.const 174732) "a") (data (i32.const 174735) "a") (data (i32.const 174738) "a") (data (i32.const 174741) "a") (data (i32.const 174744) "a") (data (i32.const 174747) "a") (data (i32.const 174750) "a") (data (i32.const 174753) "a") (data (i32.const 174756) "a") (data (i32.const 174759) "a") (data (i32.const 174762) "a") (data (i32.const 174765) "a") (data (i32.const 174768) "a") (data (i32.const 174771) "a") (data (i32.const 174774) "a") (data (i32.const 174777) "a") (data (i32.const 174780) "a") (data (i32.const 174783) "a") (data (i32.const 174786) "a") (data (i32.const 174789) "a") (data (i32.const 174792) "a") (data (i32.const 174795) "a") (data (i32.const 174798) "a") (data (i32.const 174801) "a") (data (i32.const 174804) "a") (data (i32.const 174807) "a") (data (i32.const 174810) "a") (data (i32.const 174813) "a") (data (i32.const 174816) "a") (data (i32.const 174819) "a") (data (i32.const 174822) "a") (data (i32.const 174825) "a") (data (i32.const 174828) "a") (data (i32.const 174831) "a") (data (i32.const 174834) "a") (data (i32.const 174837) "a") (data (i32.const 174840) "a") (data (i32.const 174843) "a") (data (i32.const 174846) "a") (data (i32.const 174849) "a") (data (i32.const 174852) "a") (data (i32.const 174855) "a") (data (i32.const 174858) "a") (data (i32.const 174861) "a") (data (i32.const 174864) "a") (data (i32.const 174867) "a") (data (i32.const 174870) "a") (data (i32.const 174873) "a") (data (i32.const 174876) "a") (data (i32.const 174879) "a") (data (i32.const 174882) "a") (data (i32.const 174885) "a") (data (i32.const 174888) "a") (data (i32.const 174891) "a") (data (i32.const 174894) "a") (data (i32.const 174897) "a") (data (i32.const 174900) "a") (data (i32.const 174903) "a") (data (i32.const 174906) "a") (data (i32.const 174909) "a") (data (i32.const 174912) "a") (data (i32.const 174915) "a") (data (i32.const 174918) "a") (data (i32.const 174921) "a") (data (i32.const 174924) "a") (data (i32.const 174927) "a") (data (i32.const 174930) "a") (data (i32.const 174933) "a") (data (i32.const 174936) "a") (data (i32.const 174939) "a") (data (i32.const 174942) "a") (data (i32.const 174945) "a") (data (i32.const 174948) "a") (data (i32.const 174951) "a") (data (i32.const 174954) "a") (data (i32.const 174957) "a") (data (i32.const 174960) "a") (data (i32.const 174963) "a") (data (i32.const 174966) "a") (data (i32.const 174969) "a") (data (i32.const 174972) "a") (data (i32.const 174975) "a") (data (i32.const 174978) "a") (data (i32.const 174981) "a") (data (i32.const 174984) "a") (data (i32.const 174987) "a") (data (i32.const 174990) "a") (data (i32.const 174993) "a") (data (i32.const 174996) "a") (data (i32.const 174999) "a") (data (i32.const 175002) "a") (data (i32.const 175005) "a") (data (i32.const 175008) "a") (data (i32.const 175011) "a") (data (i32.const 175014) "a") (data (i32.const 175017) "a") (data (i32.const 175020) "a") (data (i32.const 175023) "a") (data (i32.const 175026) "a") (data (i32.const 175029) "a") (data (i32.const 175032) "a") (data (i32.const 175035) "a") (data (i32.const 175038) "a") (data (i32.const 175041) "a") (data (i32.const 175044) "a") (data (i32.const 175047) "a") (data (i32.const 175050) "a") (data (i32.const 175053) "a") (data (i32.const 175056) "a") (data (i32.const 175059) "a") (data (i32.const 175062) "a") (data (i32.const 175065) "a") (data (i32.const 175068) "a") (data (i32.const 175071) "a") (data (i32.const 175074) "a") (data (i32.const 175077) "a") (data (i32.const 175080) "a") (data (i32.const 175083) "a") (data (i32.const 175086) "a") (data (i32.const 175089) "a") (data (i32.const 175092) "a") (data (i32.const 175095) "a") (data (i32.const 175098) "a") (data (i32.const 175101) "a") (data (i32.const 175104) "a") (data (i32.const 175107) "a") (data (i32.const 175110) "a") (data (i32.const 175113) "a") (data (i32.const 175116) "a") (data (i32.const 175119) "a") (data (i32.const 175122) "a") (data (i32.const 175125) "a") (data (i32.const 175128) "a") (data (i32.const 175131) "a") (data (i32.const 175134) "a") (data (i32.const 175137) "a") (data (i32.const 175140) "a") (data (i32.const 175143) "a") (data (i32.const 175146) "a") (data (i32.const 175149) "a") (data (i32.const 175152) "a") (data (i32.const 175155) "a") (data (i32.const 175158) "a") (data (i32.const 175161) "a") (data (i32.const 175164) "a") (data (i32.const 175167) "a") (data (i32.const 175170) "a") (data (i32.const 175173) "a") (data (i32.const 175176) "a") (data (i32.const 175179) "a") (data (i32.const 175182) "a") (data (i32.const 175185) "a") (data (i32.const 175188) "a") (data (i32.const 175191) "a") (data (i32.const 175194) "a") (data (i32.const 175197) "a") (data (i32.const 175200) "a") (data (i32.const 175203) "a") (data (i32.const 175206) "a") (data (i32.const 175209) "a") (data (i32.const 175212) "a") (data (i32.const 175215) "a") (data (i32.const 175218) "a") (data (i32.const 175221) "a") (data (i32.const 175224) "a") (data (i32.const 175227) "a") (data (i32.const 175230) "a") (data (i32.const 175233) "a") (data (i32.const 175236) "a") (data (i32.const 175239) "a") (data (i32.const 175242) "a") (data (i32.const 175245) "a") (data (i32.const 175248) "a") (data (i32.const 175251) "a") (data (i32.const 175254) "a") (data (i32.const 175257) "a") (data (i32.const 175260) "a") (data (i32.const 175263) "a") (data (i32.const 175266) "a") (data (i32.const 175269) "a") (data (i32.const 175272) "a") (data (i32.const 175275) "a") (data (i32.const 175278) "a") (data (i32.const 175281) "a") (data (i32.const 175284) "a") (data (i32.const 175287) "a") (data (i32.const 175290) "a") (data (i32.const 175293) "a") (data (i32.const 175296) "a") (data (i32.const 175299) "a") (data (i32.const 175302) "a") (data (i32.const 175305) "a") (data (i32.const 175308) "a") (data (i32.const 175311) "a") (data (i32.const 175314) "a") (data (i32.const 175317) "a") (data (i32.const 175320) "a") (data (i32.const 175323) "a") (data (i32.const 175326) "a") (data (i32.const 175329) "a") (data (i32.const 175332) "a") (data (i32.const 175335) "a") (data (i32.const 175338) "a") (data (i32.const 175341) "a") (data (i32.const 175344) "a") (data (i32.const 175347) "a") (data (i32.const 175350) "a") (data (i32.const 175353) "a") (data (i32.const 175356) "a") (data (i32.const 175359) "a") (data (i32.const 175362) "a") (data (i32.const 175365) "a") (data (i32.const 175368) "a") (data (i32.const 175371) "a") (data (i32.const 175374) "a") (data (i32.const 175377) "a") (data (i32.const 175380) "a") (data (i32.const 175383) "a") (data (i32.const 175386) "a") (data (i32.const 175389) "a") (data (i32.const 175392) "a") (data (i32.const 175395) "a") (data (i32.const 175398) "a") (data (i32.const 175401) "a") (data (i32.const 175404) "a") (data (i32.const 175407) "a") (data (i32.const 175410) "a") (data (i32.const 175413) "a") (data (i32.const 175416) "a") (data (i32.const 175419) "a") (data (i32.const 175422) "a") (data (i32.const 175425) "a") (data (i32.const 175428) "a") (data (i32.const 175431) "a") (data (i32.const 175434) "a") (data (i32.const 175437) "a") (data (i32.const 175440) "a") (data (i32.const 175443) "a") (data (i32.const 175446) "a") (data (i32.const 175449) "a") (data (i32.const 175452) "a") (data (i32.const 175455) "a") (data (i32.const 175458) "a") (data (i32.const 175461) "a") (data (i32.const 175464) "a") (data (i32.const 175467) "a") (data (i32.const 175470) "a") (data (i32.const 175473) "a") (data (i32.const 175476) "a") (data (i32.const 175479) "a") (data (i32.const 175482) "a") (data (i32.const 175485) "a") (data (i32.const 175488) "a") (data (i32.const 175491) "a") (data (i32.const 175494) "a") (data (i32.const 175497) "a") (data (i32.const 175500) "a") (data (i32.const 175503) "a") (data (i32.const 175506) "a") (data (i32.const 175509) "a") (data (i32.const 175512) "a") (data (i32.const 175515) "a") (data (i32.const 175518) "a") (data (i32.const 175521) "a") (data (i32.const 175524) "a") (data (i32.const 175527) "a") (data (i32.const 175530) "a") (data (i32.const 175533) "a") (data (i32.const 175536) "a") (data (i32.const 175539) "a") (data (i32.const 175542) "a") (data (i32.const 175545) "a") (data (i32.const 175548) "a") (data (i32.const 175551) "a") (data (i32.const 175554) "a") (data (i32.const 175557) "a") (data (i32.const 175560) "a") (data (i32.const 175563) "a") (data (i32.const 175566) "a") (data (i32.const 175569) "a") (data (i32.const 175572) "a") (data (i32.const 175575) "a") (data (i32.const 175578) "a") (data (i32.const 175581) "a") (data (i32.const 175584) "a") (data (i32.const 175587) "a") (data (i32.const 175590) "a") (data (i32.const 175593) "a") (data (i32.const 175596) "a") (data (i32.const 175599) "a") (data (i32.const 175602) "a") (data (i32.const 175605) "a") (data (i32.const 175608) "a") (data (i32.const 175611) "a") (data (i32.const 175614) "a") (data (i32.const 175617) "a") (data (i32.const 175620) "a") (data (i32.const 175623) "a") (data (i32.const 175626) "a") (data (i32.const 175629) "a") (data (i32.const 175632) "a") (data (i32.const 175635) "a") (data (i32.const 175638) "a") (data (i32.const 175641) "a") (data (i32.const 175644) "a") (data (i32.const 175647) "a") (data (i32.const 175650) "a") (data (i32.const 175653) "a") (data (i32.const 175656) "a") (data (i32.const 175659) "a") (data (i32.const 175662) "a") (data (i32.const 175665) "a") (data (i32.const 175668) "a") (data (i32.const 175671) "a") (data (i32.const 175674) "a") (data (i32.const 175677) "a") (data (i32.const 175680) "a") (data (i32.const 175683) "a") (data (i32.const 175686) "a") (data (i32.const 175689) "a") (data (i32.const 175692) "a") (data (i32.const 175695) "a") (data (i32.const 175698) "a") (data (i32.const 175701) "a") (data (i32.const 175704) "a") (data (i32.const 175707) "a") (data (i32.const 175710) "a") (data (i32.const 175713) "a") (data (i32.const 175716) "a") (data (i32.const 175719) "a") (data (i32.const 175722) "a") (data (i32.const 175725) "a") (data (i32.const 175728) "a") (data (i32.const 175731) "a") (data (i32.const 175734) "a") (data (i32.const 175737) "a") (data (i32.const 175740) "a") (data (i32.const 175743) "a") (data (i32.const 175746) "a") (data (i32.const 175749) "a") (data (i32.const 175752) "a") (data (i32.const 175755) "a") (data (i32.const 175758) "a") (data (i32.const 175761) "a") (data (i32.const 175764) "a") (data (i32.const 175767) "a") (data (i32.const 175770) "a") (data (i32.const 175773) "a") (data (i32.const 175776) "a") (data (i32.const 175779) "a") (data (i32.const 175782) "a") (data (i32.const 175785) "a") (data (i32.const 175788) "a") (data (i32.const 175791) "a") (data (i32.const 175794) "a") (data (i32.const 175797) "a") (data (i32.const 175800) "a") (data (i32.const 175803) "a") (data (i32.const 175806) "a") (data (i32.const 175809) "a") (data (i32.const 175812) "a") (data (i32.const 175815) "a") (data (i32.const 175818) "a") (data (i32.const 175821) "a") (data (i32.const 175824) "a") (data (i32.const 175827) "a") (data (i32.const 175830) "a") (data (i32.const 175833) "a") (data (i32.const 175836) "a") (data (i32.const 175839) "a") (data (i32.const 175842) "a") (data (i32.const 175845) "a") (data (i32.const 175848) "a") (data (i32.const 175851) "a") (data (i32.const 175854) "a") (data (i32.const 175857) "a") (data (i32.const 175860) "a") (data (i32.const 175863) "a") (data (i32.const 175866) "a") (data (i32.const 175869) "a") (data (i32.const 175872) "a") (data (i32.const 175875) "a") (data (i32.const 175878) "a") (data (i32.const 175881) "a") (data (i32.const 175884) "a") (data (i32.const 175887) "a") (data (i32.const 175890) "a") (data (i32.const 175893) "a") (data (i32.const 175896) "a") (data (i32.const 175899) "a") (data (i32.const 175902) "a") (data (i32.const 175905) "a") (data (i32.const 175908) "a") (data (i32.const 175911) "a") (data (i32.const 175914) "a") (data (i32.const 175917) "a") (data (i32.const 175920) "a") (data (i32.const 175923) "a") (data (i32.const 175926) "a") (data (i32.const 175929) "a") (data (i32.const 175932) "a") (data (i32.const 175935) "a") (data (i32.const 175938) "a") (data (i32.const 175941) "a") (data (i32.const 175944) "a") (data (i32.const 175947) "a") (data (i32.const 175950) "a") (data (i32.const 175953) "a") (data (i32.const 175956) "a") (data (i32.const 175959) "a") (data (i32.const 175962) "a") (data (i32.const 175965) "a") (data (i32.const 175968) "a") (data (i32.const 175971) "a") (data (i32.const 175974) "a") (data (i32.const 175977) "a") (data (i32.const 175980) "a") (data (i32.const 175983) "a") (data (i32.const 175986) "a") (data (i32.const 175989) "a") (data (i32.const 175992) "a") (data (i32.const 175995) "a") (data (i32.const 175998) "a") (data (i32.const 176001) "a") (data (i32.const 176004) "a") (data (i32.const 176007) "a") (data (i32.const 176010) "a") (data (i32.const 176013) "a") (data (i32.const 176016) "a") (data (i32.const 176019) "a") (data (i32.const 176022) "a") (data (i32.const 176025) "a") (data (i32.const 176028) "a") (data (i32.const 176031) "a") (data (i32.const 176034) "a") (data (i32.const 176037) "a") (data (i32.const 176040) "a") (data (i32.const 176043) "a") (data (i32.const 176046) "a") (data (i32.const 176049) "a") (data (i32.const 176052) "a") (data (i32.const 176055) "a") (data (i32.const 176058) "a") (data (i32.const 176061) "a") (data (i32.const 176064) "a") (data (i32.const 176067) "a") (data (i32.const 176070) "a") (data (i32.const 176073) "a") (data (i32.const 176076) "a") (data (i32.const 176079) "a") (data (i32.const 176082) "a") (data (i32.const 176085) "a") (data (i32.const 176088) "a") (data (i32.const 176091) "a") (data (i32.const 176094) "a") (data (i32.const 176097) "a") (data (i32.const 176100) "a") (data (i32.const 176103) "a") (data (i32.const 176106) "a") (data (i32.const 176109) "a") (data (i32.const 176112) "a") (data (i32.const 176115) "a") (data (i32.const 176118) "a") (data (i32.const 176121) "a") (data (i32.const 176124) "a") (data (i32.const 176127) "a") (data (i32.const 176130) "a") (data (i32.const 176133) "a") (data (i32.const 176136) "a") (data (i32.const 176139) "a") (data (i32.const 176142) "a") (data (i32.const 176145) "a") (data (i32.const 176148) "a") (data (i32.const 176151) "a") (data (i32.const 176154) "a") (data (i32.const 176157) "a") (data (i32.const 176160) "a") (data (i32.const 176163) "a") (data (i32.const 176166) "a") (data (i32.const 176169) "a") (data (i32.const 176172) "a") (data (i32.const 176175) "a") (data (i32.const 176178) "a") (data (i32.const 176181) "a") (data (i32.const 176184) "a") (data (i32.const 176187) "a") (data (i32.const 176190) "a") (data (i32.const 176193) "a") (data (i32.const 176196) "a") (data (i32.const 176199) "a") (data (i32.const 176202) "a") (data (i32.const 176205) "a") (data (i32.const 176208) "a") (data (i32.const 176211) "a") (data (i32.const 176214) "a") (data (i32.const 176217) "a") (data (i32.const 176220) "a") (data (i32.const 176223) "a") (data (i32.const 176226) "a") (data (i32.const 176229) "a") (data (i32.const 176232) "a") (data (i32.const 176235) "a") (data (i32.const 176238) "a") (data (i32.const 176241) "a") (data (i32.const 176244) "a") (data (i32.const 176247) "a") (data (i32.const 176250) "a") (data (i32.const 176253) "a") (data (i32.const 176256) "a") (data (i32.const 176259) "a") (data (i32.const 176262) "a") (data (i32.const 176265) "a") (data (i32.const 176268) "a") (data (i32.const 176271) "a") (data (i32.const 176274) "a") (data (i32.const 176277) "a") (data (i32.const 176280) "a") (data (i32.const 176283) "a") (data (i32.const 176286) "a") (data (i32.const 176289) "a") (data (i32.const 176292) "a") (data (i32.const 176295) "a") (data (i32.const 176298) "a") (data (i32.const 176301) "a") (data (i32.const 176304) "a") (data (i32.const 176307) "a") (data (i32.const 176310) "a") (data (i32.const 176313) "a") (data (i32.const 176316) "a") (data (i32.const 176319) "a") (data (i32.const 176322) "a") (data (i32.const 176325) "a") (data (i32.const 176328) "a") (data (i32.const 176331) "a") (data (i32.const 176334) "a") (data (i32.const 176337) "a") (data (i32.const 176340) "a") (data (i32.const 176343) "a") (data (i32.const 176346) "a") (data (i32.const 176349) "a") (data (i32.const 176352) "a") (data (i32.const 176355) "a") (data (i32.const 176358) "a") (data (i32.const 176361) "a") (data (i32.const 176364) "a") (data (i32.const 176367) "a") (data (i32.const 176370) "a") (data (i32.const 176373) "a") (data (i32.const 176376) "a") (data (i32.const 176379) "a") (data (i32.const 176382) "a") (data (i32.const 176385) "a") (data (i32.const 176388) "a") (data (i32.const 176391) "a") (data (i32.const 176394) "a") (data (i32.const 176397) "a") (data (i32.const 176400) "a") (data (i32.const 176403) "a") (data (i32.const 176406) "a") (data (i32.const 176409) "a") (data (i32.const 176412) "a") (data (i32.const 176415) "a") (data (i32.const 176418) "a") (data (i32.const 176421) "a") (data (i32.const 176424) "a") (data (i32.const 176427) "a") (data (i32.const 176430) "a") (data (i32.const 176433) "a") (data (i32.const 176436) "a") (data (i32.const 176439) "a") (data (i32.const 176442) "a") (data (i32.const 176445) "a") (data (i32.const 176448) "a") (data (i32.const 176451) "a") (data (i32.const 176454) "a") (data (i32.const 176457) "a") (data (i32.const 176460) "a") (data (i32.const 176463) "a") (data (i32.const 176466) "a") (data (i32.const 176469) "a") (data (i32.const 176472) "a") (data (i32.const 176475) "a") (data (i32.const 176478) "a") (data (i32.const 176481) "a") (data (i32.const 176484) "a") (data (i32.const 176487) "a") (data (i32.const 176490) "a") (data (i32.const 176493) "a") (data (i32.const 176496) "a") (data (i32.const 176499) "a") (data (i32.const 176502) "a") (data (i32.const 176505) "a") (data (i32.const 176508) "a") (data (i32.const 176511) "a") (data (i32.const 176514) "a") (data (i32.const 176517) "a") (data (i32.const 176520) "a") (data (i32.const 176523) "a") (data (i32.const 176526) "a") (data (i32.const 176529) "a") (data (i32.const 176532) "a") (data (i32.const 176535) "a") (data (i32.const 176538) "a") (data (i32.const 176541) "a") (data (i32.const 176544) "a") (data (i32.const 176547) "a") (data (i32.const 176550) "a") (data (i32.const 176553) "a") (data (i32.const 176556) "a") (data (i32.const 176559) "a") (data (i32.const 176562) "a") (data (i32.const 176565) "a") (data (i32.const 176568) "a") (data (i32.const 176571) "a") (data (i32.const 176574) "a") (data (i32.const 176577) "a") (data (i32.const 176580) "a") (data (i32.const 176583) "a") (data (i32.const 176586) "a") (data (i32.const 176589) "a") (data (i32.const 176592) "a") (data (i32.const 176595) "a") (data (i32.const 176598) "a") (data (i32.const 176601) "a") (data (i32.const 176604) "a") (data (i32.const 176607) "a") (data (i32.const 176610) "a") (data (i32.const 176613) "a") (data (i32.const 176616) "a") (data (i32.const 176619) "a") (data (i32.const 176622) "a") (data (i32.const 176625) "a") (data (i32.const 176628) "a") (data (i32.const 176631) "a") (data (i32.const 176634) "a") (data (i32.const 176637) "a") (data (i32.const 176640) "a") (data (i32.const 176643) "a") (data (i32.const 176646) "a") (data (i32.const 176649) "a") (data (i32.const 176652) "a") (data (i32.const 176655) "a") (data (i32.const 176658) "a") (data (i32.const 176661) "a") (data (i32.const 176664) "a") (data (i32.const 176667) "a") (data (i32.const 176670) "a") (data (i32.const 176673) "a") (data (i32.const 176676) "a") (data (i32.const 176679) "a") (data (i32.const 176682) "a") (data (i32.const 176685) "a") (data (i32.const 176688) "a") (data (i32.const 176691) "a") (data (i32.const 176694) "a") (data (i32.const 176697) "a") (data (i32.const 176700) "a") (data (i32.const 176703) "a") (data (i32.const 176706) "a") (data (i32.const 176709) "a") (data (i32.const 176712) "a") (data (i32.const 176715) "a") (data (i32.const 176718) "a") (data (i32.const 176721) "a") (data (i32.const 176724) "a") (data (i32.const 176727) "a") (data (i32.const 176730) "a") (data (i32.const 176733) "a") (data (i32.const 176736) "a") (data (i32.const 176739) "a") (data (i32.const 176742) "a") (data (i32.const 176745) "a") (data (i32.const 176748) "a") (data (i32.const 176751) "a") (data (i32.const 176754) "a") (data (i32.const 176757) "a") (data (i32.const 176760) "a") (data (i32.const 176763) "a") (data (i32.const 176766) "a") (data (i32.const 176769) "a") (data (i32.const 176772) "a") (data (i32.const 176775) "a") (data (i32.const 176778) "a") (data (i32.const 176781) "a") (data (i32.const 176784) "a") (data (i32.const 176787) "a") (data (i32.const 176790) "a") (data (i32.const 176793) "a") (data (i32.const 176796) "a") (data (i32.const 176799) "a") (data (i32.const 176802) "a") (data (i32.const 176805) "a") (data (i32.const 176808) "a") (data (i32.const 176811) "a") (data (i32.const 176814) "a") (data (i32.const 176817) "a") (data (i32.const 176820) "a") (data (i32.const 176823) "a") (data (i32.const 176826) "a") (data (i32.const 176829) "a") (data (i32.const 176832) "a") (data (i32.const 176835) "a") (data (i32.const 176838) "a") (data (i32.const 176841) "a") (data (i32.const 176844) "a") (data (i32.const 176847) "a") (data (i32.const 176850) "a") (data (i32.const 176853) "a") (data (i32.const 176856) "a") (data (i32.const 176859) "a") (data (i32.const 176862) "a") (data (i32.const 176865) "a") (data (i32.const 176868) "a") (data (i32.const 176871) "a") (data (i32.const 176874) "a") (data (i32.const 176877) "a") (data (i32.const 176880) "a") (data (i32.const 176883) "a") (data (i32.const 176886) "a") (data (i32.const 176889) "a") (data (i32.const 176892) "a") (data (i32.const 176895) "a") (data (i32.const 176898) "a") (data (i32.const 176901) "a") (data (i32.const 176904) "a") (data (i32.const 176907) "a") (data (i32.const 176910) "a") (data (i32.const 176913) "a") (data (i32.const 176916) "a") (data (i32.const 176919) "a") (data (i32.const 176922) "a") (data (i32.const 176925) "a") (data (i32.const 176928) "a") (data (i32.const 176931) "a") (data (i32.const 176934) "a") (data (i32.const 176937) "a") (data (i32.const 176940) "a") (data (i32.const 176943) "a") (data (i32.const 176946) "a") (data (i32.const 176949) "a") (data (i32.const 176952) "a") (data (i32.const 176955) "a") (data (i32.const 176958) "a") (data (i32.const 176961) "a") (data (i32.const 176964) "a") (data (i32.const 176967) "a") (data (i32.const 176970) "a") (data (i32.const 176973) "a") (data (i32.const 176976) "a") (data (i32.const 176979) "a") (data (i32.const 176982) "a") (data (i32.const 176985) "a") (data (i32.const 176988) "a") (data (i32.const 176991) "a") (data (i32.const 176994) "a") (data (i32.const 176997) "a") (data (i32.const 177000) "a") (data (i32.const 177003) "a") (data (i32.const 177006) "a") (data (i32.const 177009) "a") (data (i32.const 177012) "a") (data (i32.const 177015) "a") (data (i32.const 177018) "a") (data (i32.const 177021) "a") (data (i32.const 177024) "a") (data (i32.const 177027) "a") (data (i32.const 177030) "a") (data (i32.const 177033) "a") (data (i32.const 177036) "a") (data (i32.const 177039) "a") (data (i32.const 177042) "a") (data (i32.const 177045) "a") (data (i32.const 177048) "a") (data (i32.const 177051) "a") (data (i32.const 177054) "a") (data (i32.const 177057) "a") (data (i32.const 177060) "a") (data (i32.const 177063) "a") (data (i32.const 177066) "a") (data (i32.const 177069) "a") (data (i32.const 177072) "a") (data (i32.const 177075) "a") (data (i32.const 177078) "a") (data (i32.const 177081) "a") (data (i32.const 177084) "a") (data (i32.const 177087) "a") (data (i32.const 177090) "a") (data (i32.const 177093) "a") (data (i32.const 177096) "a") (data (i32.const 177099) "a") (data (i32.const 177102) "a") (data (i32.const 177105) "a") (data (i32.const 177108) "a") (data (i32.const 177111) "a") (data (i32.const 177114) "a") (data (i32.const 177117) "a") (data (i32.const 177120) "a") (data (i32.const 177123) "a") (data (i32.const 177126) "a") (data (i32.const 177129) "a") (data (i32.const 177132) "a") (data (i32.const 177135) "a") (data (i32.const 177138) "a") (data (i32.const 177141) "a") (data (i32.const 177144) "a") (data (i32.const 177147) "a") (data (i32.const 177150) "a") (data (i32.const 177153) "a") (data (i32.const 177156) "a") (data (i32.const 177159) "a") (data (i32.const 177162) "a") (data (i32.const 177165) "a") (data (i32.const 177168) "a") (data (i32.const 177171) "a") (data (i32.const 177174) "a") (data (i32.const 177177) "a") (data (i32.const 177180) "a") (data (i32.const 177183) "a") (data (i32.const 177186) "a") (data (i32.const 177189) "a") (data (i32.const 177192) "a") (data (i32.const 177195) "a") (data (i32.const 177198) "a") (data (i32.const 177201) "a") (data (i32.const 177204) "a") (data (i32.const 177207) "a") (data (i32.const 177210) "a") (data (i32.const 177213) "a") (data (i32.const 177216) "a") (data (i32.const 177219) "a") (data (i32.const 177222) "a") (data (i32.const 177225) "a") (data (i32.const 177228) "a") (data (i32.const 177231) "a") (data (i32.const 177234) "a") (data (i32.const 177237) "a") (data (i32.const 177240) "a") (data (i32.const 177243) "a") (data (i32.const 177246) "a") (data (i32.const 177249) "a") (data (i32.const 177252) "a") (data (i32.const 177255) "a") (data (i32.const 177258) "a") (data (i32.const 177261) "a") (data (i32.const 177264) "a") (data (i32.const 177267) "a") (data (i32.const 177270) "a") (data (i32.const 177273) "a") (data (i32.const 177276) "a") (data (i32.const 177279) "a") (data (i32.const 177282) "a") (data (i32.const 177285) "a") (data (i32.const 177288) "a") (data (i32.const 177291) "a") (data (i32.const 177294) "a") (data (i32.const 177297) "a") (data (i32.const 177300) "a") (data (i32.const 177303) "a") (data (i32.const 177306) "a") (data (i32.const 177309) "a") (data (i32.const 177312) "a") (data (i32.const 177315) "a") (data (i32.const 177318) "a") (data (i32.const 177321) "a") (data (i32.const 177324) "a") (data (i32.const 177327) "a") (data (i32.const 177330) "a") (data (i32.const 177333) "a") (data (i32.const 177336) "a") (data (i32.const 177339) "a") (data (i32.const 177342) "a") (data (i32.const 177345) "a") (data (i32.const 177348) "a") (data (i32.const 177351) "a") (data (i32.const 177354) "a") (data (i32.const 177357) "a") (data (i32.const 177360) "a") (data (i32.const 177363) "a") (data (i32.const 177366) "a") (data (i32.const 177369) "a") (data (i32.const 177372) "a") (data (i32.const 177375) "a") (data (i32.const 177378) "a") (data (i32.const 177381) "a") (data (i32.const 177384) "a") (data (i32.const 177387) "a") (data (i32.const 177390) "a") (data (i32.const 177393) "a") (data (i32.const 177396) "a") (data (i32.const 177399) "a") (data (i32.const 177402) "a") (data (i32.const 177405) "a") (data (i32.const 177408) "a") (data (i32.const 177411) "a") (data (i32.const 177414) "a") (data (i32.const 177417) "a") (data (i32.const 177420) "a") (data (i32.const 177423) "a") (data (i32.const 177426) "a") (data (i32.const 177429) "a") (data (i32.const 177432) "a") (data (i32.const 177435) "a") (data (i32.const 177438) "a") (data (i32.const 177441) "a") (data (i32.const 177444) "a") (data (i32.const 177447) "a") (data (i32.const 177450) "a") (data (i32.const 177453) "a") (data (i32.const 177456) "a") (data (i32.const 177459) "a") (data (i32.const 177462) "a") (data (i32.const 177465) "a") (data (i32.const 177468) "a") (data (i32.const 177471) "a") (data (i32.const 177474) "a") (data (i32.const 177477) "a") (data (i32.const 177480) "a") (data (i32.const 177483) "a") (data (i32.const 177486) "a") (data (i32.const 177489) "a") (data (i32.const 177492) "a") (data (i32.const 177495) "a") (data (i32.const 177498) "a") (data (i32.const 177501) "a") (data (i32.const 177504) "a") (data (i32.const 177507) "a") (data (i32.const 177510) "a") (data (i32.const 177513) "a") (data (i32.const 177516) "a") (data (i32.const 177519) "a") (data (i32.const 177522) "a") (data (i32.const 177525) "a") (data (i32.const 177528) "a") (data (i32.const 177531) "a") (data (i32.const 177534) "a") (data (i32.const 177537) "a") (data (i32.const 177540) "a") (data (i32.const 177543) "a") (data (i32.const 177546) "a") (data (i32.const 177549) "a") (data (i32.const 177552) "a") (data (i32.const 177555) "a") (data (i32.const 177558) "a") (data (i32.const 177561) "a") (data (i32.const 177564) "a") (data (i32.const 177567) "a") (data (i32.const 177570) "a") (data (i32.const 177573) "a") (data (i32.const 177576) "a") (data (i32.const 177579) "a") (data (i32.const 177582) "a") (data (i32.const 177585) "a") (data (i32.const 177588) "a") (data (i32.const 177591) "a") (data (i32.const 177594) "a") (data (i32.const 177597) "a") (data (i32.const 177600) "a") (data (i32.const 177603) "a") (data (i32.const 177606) "a") (data (i32.const 177609) "a") (data (i32.const 177612) "a") (data (i32.const 177615) "a") (data (i32.const 177618) "a") (data (i32.const 177621) "a") (data (i32.const 177624) "a") (data (i32.const 177627) "a") (data (i32.const 177630) "a") (data (i32.const 177633) "a") (data (i32.const 177636) "a") (data (i32.const 177639) "a") (data (i32.const 177642) "a") (data (i32.const 177645) "a") (data (i32.const 177648) "a") (data (i32.const 177651) "a") (data (i32.const 177654) "a") (data (i32.const 177657) "a") (data (i32.const 177660) "a") (data (i32.const 177663) "a") (data (i32.const 177666) "a") (data (i32.const 177669) "a") (data (i32.const 177672) "a") (data (i32.const 177675) "a") (data (i32.const 177678) "a") (data (i32.const 177681) "a") (data (i32.const 177684) "a") (data (i32.const 177687) "a") (data (i32.const 177690) "a") (data (i32.const 177693) "a") (data (i32.const 177696) "a") (data (i32.const 177699) "a") (data (i32.const 177702) "a") (data (i32.const 177705) "a") (data (i32.const 177708) "a") (data (i32.const 177711) "a") (data (i32.const 177714) "a") (data (i32.const 177717) "a") (data (i32.const 177720) "a") (data (i32.const 177723) "a") (data (i32.const 177726) "a") (data (i32.const 177729) "a") (data (i32.const 177732) "a") (data (i32.const 177735) "a") (data (i32.const 177738) "a") (data (i32.const 177741) "a") (data (i32.const 177744) "a") (data (i32.const 177747) "a") (data (i32.const 177750) "a") (data (i32.const 177753) "a") (data (i32.const 177756) "a") (data (i32.const 177759) "a") (data (i32.const 177762) "a") (data (i32.const 177765) "a") (data (i32.const 177768) "a") (data (i32.const 177771) "a") (data (i32.const 177774) "a") (data (i32.const 177777) "a") (data (i32.const 177780) "a") (data (i32.const 177783) "a") (data (i32.const 177786) "a") (data (i32.const 177789) "a") (data (i32.const 177792) "a") (data (i32.const 177795) "a") (data (i32.const 177798) "a") (data (i32.const 177801) "a") (data (i32.const 177804) "a") (data (i32.const 177807) "a") (data (i32.const 177810) "a") (data (i32.const 177813) "a") (data (i32.const 177816) "a") (data (i32.const 177819) "a") (data (i32.const 177822) "a") (data (i32.const 177825) "a") (data (i32.const 177828) "a") (data (i32.const 177831) "a") (data (i32.const 177834) "a") (data (i32.const 177837) "a") (data (i32.const 177840) "a") (data (i32.const 177843) "a") (data (i32.const 177846) "a") (data (i32.const 177849) "a") (data (i32.const 177852) "a") (data (i32.const 177855) "a") (data (i32.const 177858) "a") (data (i32.const 177861) "a") (data (i32.const 177864) "a") (data (i32.const 177867) "a") (data (i32.const 177870) "a") (data (i32.const 177873) "a") (data (i32.const 177876) "a") (data (i32.const 177879) "a") (data (i32.const 177882) "a") (data (i32.const 177885) "a") (data (i32.const 177888) "a") (data (i32.const 177891) "a") (data (i32.const 177894) "a") (data (i32.const 177897) "a") (data (i32.const 177900) "a") (data (i32.const 177903) "a") (data (i32.const 177906) "a") (data (i32.const 177909) "a") (data (i32.const 177912) "a") (data (i32.const 177915) "a") (data (i32.const 177918) "a") (data (i32.const 177921) "a") (data (i32.const 177924) "a") (data (i32.const 177927) "a") (data (i32.const 177930) "a") (data (i32.const 177933) "a") (data (i32.const 177936) "a") (data (i32.const 177939) "a") (data (i32.const 177942) "a") (data (i32.const 177945) "a") (data (i32.const 177948) "a") (data (i32.const 177951) "a") (data (i32.const 177954) "a") (data (i32.const 177957) "a") (data (i32.const 177960) "a") (data (i32.const 177963) "a") (data (i32.const 177966) "a") (data (i32.const 177969) "a") (data (i32.const 177972) "a") (data (i32.const 177975) "a") (data (i32.const 177978) "a") (data (i32.const 177981) "a") (data (i32.const 177984) "a") (data (i32.const 177987) "a") (data (i32.const 177990) "a") (data (i32.const 177993) "a") (data (i32.const 177996) "a") (data (i32.const 177999) "a") (data (i32.const 178002) "a") (data (i32.const 178005) "a") (data (i32.const 178008) "a") (data (i32.const 178011) "a") (data (i32.const 178014) "a") (data (i32.const 178017) "a") (data (i32.const 178020) "a") (data (i32.const 178023) "a") (data (i32.const 178026) "a") (data (i32.const 178029) "a") (data (i32.const 178032) "a") (data (i32.const 178035) "a") (data (i32.const 178038) "a") (data (i32.const 178041) "a") (data (i32.const 178044) "a") (data (i32.const 178047) "a") (data (i32.const 178050) "a") (data (i32.const 178053) "a") (data (i32.const 178056) "a") (data (i32.const 178059) "a") (data (i32.const 178062) "a") (data (i32.const 178065) "a") (data (i32.const 178068) "a") (data (i32.const 178071) "a") (data (i32.const 178074) "a") (data (i32.const 178077) "a") (data (i32.const 178080) "a") (data (i32.const 178083) "a") (data (i32.const 178086) "a") (data (i32.const 178089) "a") (data (i32.const 178092) "a") (data (i32.const 178095) "a") (data (i32.const 178098) "a") (data (i32.const 178101) "a") (data (i32.const 178104) "a") (data (i32.const 178107) "a") (data (i32.const 178110) "a") (data (i32.const 178113) "a") (data (i32.const 178116) "a") (data (i32.const 178119) "a") (data (i32.const 178122) "a") (data (i32.const 178125) "a") (data (i32.const 178128) "a") (data (i32.const 178131) "a") (data (i32.const 178134) "a") (data (i32.const 178137) "a") (data (i32.const 178140) "a") (data (i32.const 178143) "a") (data (i32.const 178146) "a") (data (i32.const 178149) "a") (data (i32.const 178152) "a") (data (i32.const 178155) "a") (data (i32.const 178158) "a") (data (i32.const 178161) "a") (data (i32.const 178164) "a") (data (i32.const 178167) "a") (data (i32.const 178170) "a") (data (i32.const 178173) "a") (data (i32.const 178176) "a") (data (i32.const 178179) "a") (data (i32.const 178182) "a") (data (i32.const 178185) "a") (data (i32.const 178188) "a") (data (i32.const 178191) "a") (data (i32.const 178194) "a") (data (i32.const 178197) "a") (data (i32.const 178200) "a") (data (i32.const 178203) "a") (data (i32.const 178206) "a") (data (i32.const 178209) "a") (data (i32.const 178212) "a") (data (i32.const 178215) "a") (data (i32.const 178218) "a") (data (i32.const 178221) "a") (data (i32.const 178224) "a") (data (i32.const 178227) "a") (data (i32.const 178230) "a") (data (i32.const 178233) "a") (data (i32.const 178236) "a") (data (i32.const 178239) "a") (data (i32.const 178242) "a") (data (i32.const 178245) "a") (data (i32.const 178248) "a") (data (i32.const 178251) "a") (data (i32.const 178254) "a") (data (i32.const 178257) "a") (data (i32.const 178260) "a") (data (i32.const 178263) "a") (data (i32.const 178266) "a") (data (i32.const 178269) "a") (data (i32.const 178272) "a") (data (i32.const 178275) "a") (data (i32.const 178278) "a") (data (i32.const 178281) "a") (data (i32.const 178284) "a") (data (i32.const 178287) "a") (data (i32.const 178290) "a") (data (i32.const 178293) "a") (data (i32.const 178296) "a") (data (i32.const 178299) "a") (data (i32.const 178302) "a") (data (i32.const 178305) "a") (data (i32.const 178308) "a") (data (i32.const 178311) "a") (data (i32.const 178314) "a") (data (i32.const 178317) "a") (data (i32.const 178320) "a") (data (i32.const 178323) "a") (data (i32.const 178326) "a") (data (i32.const 178329) "a") (data (i32.const 178332) "a") (data (i32.const 178335) "a") (data (i32.const 178338) "a") (data (i32.const 178341) "a") (data (i32.const 178344) "a") (data (i32.const 178347) "a") (data (i32.const 178350) "a") (data (i32.const 178353) "a") (data (i32.const 178356) "a") (data (i32.const 178359) "a") (data (i32.const 178362) "a") (data (i32.const 178365) "a") (data (i32.const 178368) "a") (data (i32.const 178371) "a") (data (i32.const 178374) "a") (data (i32.const 178377) "a") (data (i32.const 178380) "a") (data (i32.const 178383) "a") (data (i32.const 178386) "a") (data (i32.const 178389) "a") (data (i32.const 178392) "a") (data (i32.const 178395) "a") (data (i32.const 178398) "a") (data (i32.const 178401) "a") (data (i32.const 178404) "a") (data (i32.const 178407) "a") (data (i32.const 178410) "a") (data (i32.const 178413) "a") (data (i32.const 178416) "a") (data (i32.const 178419) "a") (data (i32.const 178422) "a") (data (i32.const 178425) "a") (data (i32.const 178428) "a") (data (i32.const 178431) "a") (data (i32.const 178434) "a") (data (i32.const 178437) "a") (data (i32.const 178440) "a") (data (i32.const 178443) "a") (data (i32.const 178446) "a") (data (i32.const 178449) "a") (data (i32.const 178452) "a") (data (i32.const 178455) "a") (data (i32.const 178458) "a") (data (i32.const 178461) "a") (data (i32.const 178464) "a") (data (i32.const 178467) "a") (data (i32.const 178470) "a") (data (i32.const 178473) "a") (data (i32.const 178476) "a") (data (i32.const 178479) "a") (data (i32.const 178482) "a") (data (i32.const 178485) "a") (data (i32.const 178488) "a") (data (i32.const 178491) "a") (data (i32.const 178494) "a") (data (i32.const 178497) "a") (data (i32.const 178500) "a") (data (i32.const 178503) "a") (data (i32.const 178506) "a") (data (i32.const 178509) "a") (data (i32.const 178512) "a") (data (i32.const 178515) "a") (data (i32.const 178518) "a") (data (i32.const 178521) "a") (data (i32.const 178524) "a") (data (i32.const 178527) "a") (data (i32.const 178530) "a") (data (i32.const 178533) "a") (data (i32.const 178536) "a") (data (i32.const 178539) "a") (data (i32.const 178542) "a") (data (i32.const 178545) "a") (data (i32.const 178548) "a") (data (i32.const 178551) "a") (data (i32.const 178554) "a") (data (i32.const 178557) "a") (data (i32.const 178560) "a") (data (i32.const 178563) "a") (data (i32.const 178566) "a") (data (i32.const 178569) "a") (data (i32.const 178572) "a") (data (i32.const 178575) "a") (data (i32.const 178578) "a") (data (i32.const 178581) "a") (data (i32.const 178584) "a") (data (i32.const 178587) "a") (data (i32.const 178590) "a") (data (i32.const 178593) "a") (data (i32.const 178596) "a") (data (i32.const 178599) "a") (data (i32.const 178602) "a") (data (i32.const 178605) "a") (data (i32.const 178608) "a") (data (i32.const 178611) "a") (data (i32.const 178614) "a") (data (i32.const 178617) "a") (data (i32.const 178620) "a") (data (i32.const 178623) "a") (data (i32.const 178626) "a") (data (i32.const 178629) "a") (data (i32.const 178632) "a") (data (i32.const 178635) "a") (data (i32.const 178638) "a") (data (i32.const 178641) "a") (data (i32.const 178644) "a") (data (i32.const 178647) "a") (data (i32.const 178650) "a") (data (i32.const 178653) "a") (data (i32.const 178656) "a") (data (i32.const 178659) "a") (data (i32.const 178662) "a") (data (i32.const 178665) "a") (data (i32.const 178668) "a") (data (i32.const 178671) "a") (data (i32.const 178674) "a") (data (i32.const 178677) "a") (data (i32.const 178680) "a") (data (i32.const 178683) "a") (data (i32.const 178686) "a") (data (i32.const 178689) "a") (data (i32.const 178692) "a") (data (i32.const 178695) "a") (data (i32.const 178698) "a") (data (i32.const 178701) "a") (data (i32.const 178704) "a") (data (i32.const 178707) "a") (data (i32.const 178710) "a") (data (i32.const 178713) "a") (data (i32.const 178716) "a") (data (i32.const 178719) "a") (data (i32.const 178722) "a") (data (i32.const 178725) "a") (data (i32.const 178728) "a") (data (i32.const 178731) "a") (data (i32.const 178734) "a") (data (i32.const 178737) "a") (data (i32.const 178740) "a") (data (i32.const 178743) "a") (data (i32.const 178746) "a") (data (i32.const 178749) "a") (data (i32.const 178752) "a") (data (i32.const 178755) "a") (data (i32.const 178758) "a") (data (i32.const 178761) "a") (data (i32.const 178764) "a") (data (i32.const 178767) "a") (data (i32.const 178770) "a") (data (i32.const 178773) "a") (data (i32.const 178776) "a") (data (i32.const 178779) "a") (data (i32.const 178782) "a") (data (i32.const 178785) "a") (data (i32.const 178788) "a") (data (i32.const 178791) "a") (data (i32.const 178794) "a") (data (i32.const 178797) "a") (data (i32.const 178800) "a") (data (i32.const 178803) "a") (data (i32.const 178806) "a") (data (i32.const 178809) "a") (data (i32.const 178812) "a") (data (i32.const 178815) "a") (data (i32.const 178818) "a") (data (i32.const 178821) "a") (data (i32.const 178824) "a") (data (i32.const 178827) "a") (data (i32.const 178830) "a") (data (i32.const 178833) "a") (data (i32.const 178836) "a") (data (i32.const 178839) "a") (data (i32.const 178842) "a") (data (i32.const 178845) "a") (data (i32.const 178848) "a") (data (i32.const 178851) "a") (data (i32.const 178854) "a") (data (i32.const 178857) "a") (data (i32.const 178860) "a") (data (i32.const 178863) "a") (data (i32.const 178866) "a") (data (i32.const 178869) "a") (data (i32.const 178872) "a") (data (i32.const 178875) "a") (data (i32.const 178878) "a") (data (i32.const 178881) "a") (data (i32.const 178884) "a") (data (i32.const 178887) "a") (data (i32.const 178890) "a") (data (i32.const 178893) "a") (data (i32.const 178896) "a") (data (i32.const 178899) "a") (data (i32.const 178902) "a") (data (i32.const 178905) "a") (data (i32.const 178908) "a") (data (i32.const 178911) "a") (data (i32.const 178914) "a") (data (i32.const 178917) "a") (data (i32.const 178920) "a") (data (i32.const 178923) "a") (data (i32.const 178926) "a") (data (i32.const 178929) "a") (data (i32.const 178932) "a") (data (i32.const 178935) "a") (data (i32.const 178938) "a") (data (i32.const 178941) "a") (data (i32.const 178944) "a") (data (i32.const 178947) "a") (data (i32.const 178950) "a") (data (i32.const 178953) "a") (data (i32.const 178956) "a") (data (i32.const 178959) "a") (data (i32.const 178962) "a") (data (i32.const 178965) "a") (data (i32.const 178968) "a") (data (i32.const 178971) "a") (data (i32.const 178974) "a") (data (i32.const 178977) "a") (data (i32.const 178980) "a") (data (i32.const 178983) "a") (data (i32.const 178986) "a") (data (i32.const 178989) "a") (data (i32.const 178992) "a") (data (i32.const 178995) "a") (data (i32.const 178998) "a") (data (i32.const 179001) "a") (data (i32.const 179004) "a") (data (i32.const 179007) "a") (data (i32.const 179010) "a") (data (i32.const 179013) "a") (data (i32.const 179016) "a") (data (i32.const 179019) "a") (data (i32.const 179022) "a") (data (i32.const 179025) "a") (data (i32.const 179028) "a") (data (i32.const 179031) "a") (data (i32.const 179034) "a") (data (i32.const 179037) "a") (data (i32.const 179040) "a") (data (i32.const 179043) "a") (data (i32.const 179046) "a") (data (i32.const 179049) "a") (data (i32.const 179052) "a") (data (i32.const 179055) "a") (data (i32.const 179058) "a") (data (i32.const 179061) "a") (data (i32.const 179064) "a") (data (i32.const 179067) "a") (data (i32.const 179070) "a") (data (i32.const 179073) "a") (data (i32.const 179076) "a") (data (i32.const 179079) "a") (data (i32.const 179082) "a") (data (i32.const 179085) "a") (data (i32.const 179088) "a") (data (i32.const 179091) "a") (data (i32.const 179094) "a") (data (i32.const 179097) "a") (data (i32.const 179100) "a") (data (i32.const 179103) "a") (data (i32.const 179106) "a") (data (i32.const 179109) "a") (data (i32.const 179112) "a") (data (i32.const 179115) "a") (data (i32.const 179118) "a") (data (i32.const 179121) "a") (data (i32.const 179124) "a") (data (i32.const 179127) "a") (data (i32.const 179130) "a") (data (i32.const 179133) "a") (data (i32.const 179136) "a") (data (i32.const 179139) "a") (data (i32.const 179142) "a") (data (i32.const 179145) "a") (data (i32.const 179148) "a") (data (i32.const 179151) "a") (data (i32.const 179154) "a") (data (i32.const 179157) "a") (data (i32.const 179160) "a") (data (i32.const 179163) "a") (data (i32.const 179166) "a") (data (i32.const 179169) "a") (data (i32.const 179172) "a") (data (i32.const 179175) "a") (data (i32.const 179178) "a") (data (i32.const 179181) "a") (data (i32.const 179184) "a") (data (i32.const 179187) "a") (data (i32.const 179190) "a") (data (i32.const 179193) "a") (data (i32.const 179196) "a") (data (i32.const 179199) "a") (data (i32.const 179202) "a") (data (i32.const 179205) "a") (data (i32.const 179208) "a") (data (i32.const 179211) "a") (data (i32.const 179214) "a") (data (i32.const 179217) "a") (data (i32.const 179220) "a") (data (i32.const 179223) "a") (data (i32.const 179226) "a") (data (i32.const 179229) "a") (data (i32.const 179232) "a") (data (i32.const 179235) "a") (data (i32.const 179238) "a") (data (i32.const 179241) "a") (data (i32.const 179244) "a") (data (i32.const 179247) "a") (data (i32.const 179250) "a") (data (i32.const 179253) "a") (data (i32.const 179256) "a") (data (i32.const 179259) "a") (data (i32.const 179262) "a") (data (i32.const 179265) "a") (data (i32.const 179268) "a") (data (i32.const 179271) "a") (data (i32.const 179274) "a") (data (i32.const 179277) "a") (data (i32.const 179280) "a") (data (i32.const 179283) "a") (data (i32.const 179286) "a") (data (i32.const 179289) "a") (data (i32.const 179292) "a") (data (i32.const 179295) "a") (data (i32.const 179298) "a") (data (i32.const 179301) "a") (data (i32.const 179304) "a") (data (i32.const 179307) "a") (data (i32.const 179310) "a") (data (i32.const 179313) "a") (data (i32.const 179316) "a") (data (i32.const 179319) "a") (data (i32.const 179322) "a") (data (i32.const 179325) "a") (data (i32.const 179328) "a") (data (i32.const 179331) "a") (data (i32.const 179334) "a") (data (i32.const 179337) "a") (data (i32.const 179340) "a") (data (i32.const 179343) "a") (data (i32.const 179346) "a") (data (i32.const 179349) "a") (data (i32.const 179352) "a") (data (i32.const 179355) "a") (data (i32.const 179358) "a") (data (i32.const 179361) "a") (data (i32.const 179364) "a") (data (i32.const 179367) "a") (data (i32.const 179370) "a") (data (i32.const 179373) "a") (data (i32.const 179376) "a") (data (i32.const 179379) "a") (data (i32.const 179382) "a") (data (i32.const 179385) "a") (data (i32.const 179388) "a") (data (i32.const 179391) "a") (data (i32.const 179394) "a") (data (i32.const 179397) "a") (data (i32.const 179400) "a") (data (i32.const 179403) "a") (data (i32.const 179406) "a") (data (i32.const 179409) "a") (data (i32.const 179412) "a") (data (i32.const 179415) "a") (data (i32.const 179418) "a") (data (i32.const 179421) "a") (data (i32.const 179424) "a") (data (i32.const 179427) "a") (data (i32.const 179430) "a") (data (i32.const 179433) "a") (data (i32.const 179436) "a") (data (i32.const 179439) "a") (data (i32.const 179442) "a") (data (i32.const 179445) "a") (data (i32.const 179448) "a") (data (i32.const 179451) "a") (data (i32.const 179454) "a") (data (i32.const 179457) "a") (data (i32.const 179460) "a") (data (i32.const 179463) "a") (data (i32.const 179466) "a") (data (i32.const 179469) "a") (data (i32.const 179472) "a") (data (i32.const 179475) "a") (data (i32.const 179478) "a") (data (i32.const 179481) "a") (data (i32.const 179484) "a") (data (i32.const 179487) "a") (data (i32.const 179490) "a") (data (i32.const 179493) "a") (data (i32.const 179496) "a") (data (i32.const 179499) "a") (data (i32.const 179502) "a") (data (i32.const 179505) "a") (data (i32.const 179508) "a") (data (i32.const 179511) "a") (data (i32.const 179514) "a") (data (i32.const 179517) "a") (data (i32.const 179520) "a") (data (i32.const 179523) "a") (data (i32.const 179526) "a") (data (i32.const 179529) "a") (data (i32.const 179532) "a") (data (i32.const 179535) "a") (data (i32.const 179538) "a") (data (i32.const 179541) "a") (data (i32.const 179544) "a") (data (i32.const 179547) "a") (data (i32.const 179550) "a") (data (i32.const 179553) "a") (data (i32.const 179556) "a") (data (i32.const 179559) "a") (data (i32.const 179562) "a") (data (i32.const 179565) "a") (data (i32.const 179568) "a") (data (i32.const 179571) "a") (data (i32.const 179574) "a") (data (i32.const 179577) "a") (data (i32.const 179580) "a") (data (i32.const 179583) "a") (data (i32.const 179586) "a") (data (i32.const 179589) "a") (data (i32.const 179592) "a") (data (i32.const 179595) "a") (data (i32.const 179598) "a") (data (i32.const 179601) "a") (data (i32.const 179604) "a") (data (i32.const 179607) "a") (data (i32.const 179610) "a") (data (i32.const 179613) "a") (data (i32.const 179616) "a") (data (i32.const 179619) "a") (data (i32.const 179622) "a") (data (i32.const 179625) "a") (data (i32.const 179628) "a") (data (i32.const 179631) "a") (data (i32.const 179634) "a") (data (i32.const 179637) "a") (data (i32.const 179640) "a") (data (i32.const 179643) "a") (data (i32.const 179646) "a") (data (i32.const 179649) "a") (data (i32.const 179652) "a") (data (i32.const 179655) "a") (data (i32.const 179658) "a") (data (i32.const 179661) "a") (data (i32.const 179664) "a") (data (i32.const 179667) "a") (data (i32.const 179670) "a") (data (i32.const 179673) "a") (data (i32.const 179676) "a") (data (i32.const 179679) "a") (data (i32.const 179682) "a") (data (i32.const 179685) "a") (data (i32.const 179688) "a") (data (i32.const 179691) "a") (data (i32.const 179694) "a") (data (i32.const 179697) "a") (data (i32.const 179700) "a") (data (i32.const 179703) "a") (data (i32.const 179706) "a") (data (i32.const 179709) "a") (data (i32.const 179712) "a") (data (i32.const 179715) "a") (data (i32.const 179718) "a") (data (i32.const 179721) "a") (data (i32.const 179724) "a") (data (i32.const 179727) "a") (data (i32.const 179730) "a") (data (i32.const 179733) "a") (data (i32.const 179736) "a") (data (i32.const 179739) "a") (data (i32.const 179742) "a") (data (i32.const 179745) "a") (data (i32.const 179748) "a") (data (i32.const 179751) "a") (data (i32.const 179754) "a") (data (i32.const 179757) "a") (data (i32.const 179760) "a") (data (i32.const 179763) "a") (data (i32.const 179766) "a") (data (i32.const 179769) "a") (data (i32.const 179772) "a") (data (i32.const 179775) "a") (data (i32.const 179778) "a") (data (i32.const 179781) "a") (data (i32.const 179784) "a") (data (i32.const 179787) "a") (data (i32.const 179790) "a") (data (i32.const 179793) "a") (data (i32.const 179796) "a") (data (i32.const 179799) "a") (data (i32.const 179802) "a") (data (i32.const 179805) "a") (data (i32.const 179808) "a") (data (i32.const 179811) "a") (data (i32.const 179814) "a") (data (i32.const 179817) "a") (data (i32.const 179820) "a") (data (i32.const 179823) "a") (data (i32.const 179826) "a") (data (i32.const 179829) "a") (data (i32.const 179832) "a") (data (i32.const 179835) "a") (data (i32.const 179838) "a") (data (i32.const 179841) "a") (data (i32.const 179844) "a") (data (i32.const 179847) "a") (data (i32.const 179850) "a") (data (i32.const 179853) "a") (data (i32.const 179856) "a") (data (i32.const 179859) "a") (data (i32.const 179862) "a") (data (i32.const 179865) "a") (data (i32.const 179868) "a") (data (i32.const 179871) "a") (data (i32.const 179874) "a") (data (i32.const 179877) "a") (data (i32.const 179880) "a") (data (i32.const 179883) "a") (data (i32.const 179886) "a") (data (i32.const 179889) "a") (data (i32.const 179892) "a") (data (i32.const 179895) "a") (data (i32.const 179898) "a") (data (i32.const 179901) "a") (data (i32.const 179904) "a") (data (i32.const 179907) "a") (data (i32.const 179910) "a") (data (i32.const 179913) "a") (data (i32.const 179916) "a") (data (i32.const 179919) "a") (data (i32.const 179922) "a") (data (i32.const 179925) "a") (data (i32.const 179928) "a") (data (i32.const 179931) "a") (data (i32.const 179934) "a") (data (i32.const 179937) "a") (data (i32.const 179940) "a") (data (i32.const 179943) "a") (data (i32.const 179946) "a") (data (i32.const 179949) "a") (data (i32.const 179952) "a") (data (i32.const 179955) "a") (data (i32.const 179958) "a") (data (i32.const 179961) "a") (data (i32.const 179964) "a") (data (i32.const 179967) "a") (data (i32.const 179970) "a") (data (i32.const 179973) "a") (data (i32.const 179976) "a") (data (i32.const 179979) "a") (data (i32.const 179982) "a") (data (i32.const 179985) "a") (data (i32.const 179988) "a") (data (i32.const 179991) "a") (data (i32.const 179994) "a") (data (i32.const 179997) "a") (data (i32.const 180000) "a") (data (i32.const 180003) "a") (data (i32.const 180006) "a") (data (i32.const 180009) "a") (data (i32.const 180012) "a") (data (i32.const 180015) "a") (data (i32.const 180018) "a") (data (i32.const 180021) "a") (data (i32.const 180024) "a") (data (i32.const 180027) "a") (data (i32.const 180030) "a") (data (i32.const 180033) "a") (data (i32.const 180036) "a") (data (i32.const 180039) "a") (data (i32.const 180042) "a") (data (i32.const 180045) "a") (data (i32.const 180048) "a") (data (i32.const 180051) "a") (data (i32.const 180054) "a") (data (i32.const 180057) "a") (data (i32.const 180060) "a") (data (i32.const 180063) "a") (data (i32.const 180066) "a") (data (i32.const 180069) "a") (data (i32.const 180072) "a") (data (i32.const 180075) "a") (data (i32.const 180078) "a") (data (i32.const 180081) "a") (data (i32.const 180084) "a") (data (i32.const 180087) "a") (data (i32.const 180090) "a") (data (i32.const 180093) "a") (data (i32.const 180096) "a") (data (i32.const 180099) "a") (data (i32.const 180102) "a") (data (i32.const 180105) "a") (data (i32.const 180108) "a") (data (i32.const 180111) "a") (data (i32.const 180114) "a") (data (i32.const 180117) "a") (data (i32.const 180120) "a") (data (i32.const 180123) "a") (data (i32.const 180126) "a") (data (i32.const 180129) "a") (data (i32.const 180132) "a") (data (i32.const 180135) "a") (data (i32.const 180138) "a") (data (i32.const 180141) "a") (data (i32.const 180144) "a") (data (i32.const 180147) "a") (data (i32.const 180150) "a") (data (i32.const 180153) "a") (data (i32.const 180156) "a") (data (i32.const 180159) "a") (data (i32.const 180162) "a") (data (i32.const 180165) "a") (data (i32.const 180168) "a") (data (i32.const 180171) "a") (data (i32.const 180174) "a") (data (i32.const 180177) "a") (data (i32.const 180180) "a") (data (i32.const 180183) "a") (data (i32.const 180186) "a") (data (i32.const 180189) "a") (data (i32.const 180192) "a") (data (i32.const 180195) "a") (data (i32.const 180198) "a") (data (i32.const 180201) "a") (data (i32.const 180204) "a") (data (i32.const 180207) "a") (data (i32.const 180210) "a") (data (i32.const 180213) "a") (data (i32.const 180216) "a") (data (i32.const 180219) "a") (data (i32.const 180222) "a") (data (i32.const 180225) "a") (data (i32.const 180228) "a") (data (i32.const 180231) "a") (data (i32.const 180234) "a") (data (i32.const 180237) "a") (data (i32.const 180240) "a") (data (i32.const 180243) "a") (data (i32.const 180246) "a") (data (i32.const 180249) "a") (data (i32.const 180252) "a") (data (i32.const 180255) "a") (data (i32.const 180258) "a") (data (i32.const 180261) "a") (data (i32.const 180264) "a") (data (i32.const 180267) "a") (data (i32.const 180270) "a") (data (i32.const 180273) "a") (data (i32.const 180276) "a") (data (i32.const 180279) "a") (data (i32.const 180282) "a") (data (i32.const 180285) "a") (data (i32.const 180288) "a") (data (i32.const 180291) "a") (data (i32.const 180294) "a") (data (i32.const 180297) "a") (data (i32.const 180300) "a") (data (i32.const 180303) "a") (data (i32.const 180306) "a") (data (i32.const 180309) "a") (data (i32.const 180312) "a") (data (i32.const 180315) "a") (data (i32.const 180318) "a") (data (i32.const 180321) "a") (data (i32.const 180324) "a") (data (i32.const 180327) "a") (data (i32.const 180330) "a") (data (i32.const 180333) "a") (data (i32.const 180336) "a") (data (i32.const 180339) "a") (data (i32.const 180342) "a") (data (i32.const 180345) "a") (data (i32.const 180348) "a") (data (i32.const 180351) "a") (data (i32.const 180354) "a") (data (i32.const 180357) "a") (data (i32.const 180360) "a") (data (i32.const 180363) "a") (data (i32.const 180366) "a") (data (i32.const 180369) "a") (data (i32.const 180372) "a") (data (i32.const 180375) "a") (data (i32.const 180378) "a") (data (i32.const 180381) "a") (data (i32.const 180384) "a") (data (i32.const 180387) "a") (data (i32.const 180390) "a") (data (i32.const 180393) "a") (data (i32.const 180396) "a") (data (i32.const 180399) "a") (data (i32.const 180402) "a") (data (i32.const 180405) "a") (data (i32.const 180408) "a") (data (i32.const 180411) "a") (data (i32.const 180414) "a") (data (i32.const 180417) "a") (data (i32.const 180420) "a") (data (i32.const 180423) "a") (data (i32.const 180426) "a") (data (i32.const 180429) "a") (data (i32.const 180432) "a") (data (i32.const 180435) "a") (data (i32.const 180438) "a") (data (i32.const 180441) "a") (data (i32.const 180444) "a") (data (i32.const 180447) "a") (data (i32.const 180450) "a") (data (i32.const 180453) "a") (data (i32.const 180456) "a") (data (i32.const 180459) "a") (data (i32.const 180462) "a") (data (i32.const 180465) "a") (data (i32.const 180468) "a") (data (i32.const 180471) "a") (data (i32.const 180474) "a") (data (i32.const 180477) "a") (data (i32.const 180480) "a") (data (i32.const 180483) "a") (data (i32.const 180486) "a") (data (i32.const 180489) "a") (data (i32.const 180492) "a") (data (i32.const 180495) "a") (data (i32.const 180498) "a") (data (i32.const 180501) "a") (data (i32.const 180504) "a") (data (i32.const 180507) "a") (data (i32.const 180510) "a") (data (i32.const 180513) "a") (data (i32.const 180516) "a") (data (i32.const 180519) "a") (data (i32.const 180522) "a") (data (i32.const 180525) "a") (data (i32.const 180528) "a") (data (i32.const 180531) "a") (data (i32.const 180534) "a") (data (i32.const 180537) "a") (data (i32.const 180540) "a") (data (i32.const 180543) "a") (data (i32.const 180546) "a") (data (i32.const 180549) "a") (data (i32.const 180552) "a") (data (i32.const 180555) "a") (data (i32.const 180558) "a") (data (i32.const 180561) "a") (data (i32.const 180564) "a") (data (i32.const 180567) "a") (data (i32.const 180570) "a") (data (i32.const 180573) "a") (data (i32.const 180576) "a") (data (i32.const 180579) "a") (data (i32.const 180582) "a") (data (i32.const 180585) "a") (data (i32.const 180588) "a") (data (i32.const 180591) "a") (data (i32.const 180594) "a") (data (i32.const 180597) "a") (data (i32.const 180600) "a") (data (i32.const 180603) "a") (data (i32.const 180606) "a") (data (i32.const 180609) "a") (data (i32.const 180612) "a") (data (i32.const 180615) "a") (data (i32.const 180618) "a") (data (i32.const 180621) "a") (data (i32.const 180624) "a") (data (i32.const 180627) "a") (data (i32.const 180630) "a") (data (i32.const 180633) "a") (data (i32.const 180636) "a") (data (i32.const 180639) "a") (data (i32.const 180642) "a") (data (i32.const 180645) "a") (data (i32.const 180648) "a") (data (i32.const 180651) "a") (data (i32.const 180654) "a") (data (i32.const 180657) "a") (data (i32.const 180660) "a") (data (i32.const 180663) "a") (data (i32.const 180666) "a") (data (i32.const 180669) "a") (data (i32.const 180672) "a") (data (i32.const 180675) "a") (data (i32.const 180678) "a") (data (i32.const 180681) "a") (data (i32.const 180684) "a") (data (i32.const 180687) "a") (data (i32.const 180690) "a") (data (i32.const 180693) "a") (data (i32.const 180696) "a") (data (i32.const 180699) "a") (data (i32.const 180702) "a") (data (i32.const 180705) "a") (data (i32.const 180708) "a") (data (i32.const 180711) "a") (data (i32.const 180714) "a") (data (i32.const 180717) "a") (data (i32.const 180720) "a") (data (i32.const 180723) "a") (data (i32.const 180726) "a") (data (i32.const 180729) "a") (data (i32.const 180732) "a") (data (i32.const 180735) "a") (data (i32.const 180738) "a") (data (i32.const 180741) "a") (data (i32.const 180744) "a") (data (i32.const 180747) "a") (data (i32.const 180750) "a") (data (i32.const 180753) "a") (data (i32.const 180756) "a") (data (i32.const 180759) "a") (data (i32.const 180762) "a") (data (i32.const 180765) "a") (data (i32.const 180768) "a") (data (i32.const 180771) "a") (data (i32.const 180774) "a") (data (i32.const 180777) "a") (data (i32.const 180780) "a") (data (i32.const 180783) "a") (data (i32.const 180786) "a") (data (i32.const 180789) "a") (data (i32.const 180792) "a") (data (i32.const 180795) "a") (data (i32.const 180798) "a") (data (i32.const 180801) "a") (data (i32.const 180804) "a") (data (i32.const 180807) "a") (data (i32.const 180810) "a") (data (i32.const 180813) "a") (data (i32.const 180816) "a") (data (i32.const 180819) "a") (data (i32.const 180822) "a") (data (i32.const 180825) "a") (data (i32.const 180828) "a") (data (i32.const 180831) "a") (data (i32.const 180834) "a") (data (i32.const 180837) "a") (data (i32.const 180840) "a") (data (i32.const 180843) "a") (data (i32.const 180846) "a") (data (i32.const 180849) "a") (data (i32.const 180852) "a") (data (i32.const 180855) "a") (data (i32.const 180858) "a") (data (i32.const 180861) "a") (data (i32.const 180864) "a") (data (i32.const 180867) "a") (data (i32.const 180870) "a") (data (i32.const 180873) "a") (data (i32.const 180876) "a") (data (i32.const 180879) "a") (data (i32.const 180882) "a") (data (i32.const 180885) "a") (data (i32.const 180888) "a") (data (i32.const 180891) "a") (data (i32.const 180894) "a") (data (i32.const 180897) "a") (data (i32.const 180900) "a") (data (i32.const 180903) "a") (data (i32.const 180906) "a") (data (i32.const 180909) "a") (data (i32.const 180912) "a") (data (i32.const 180915) "a") (data (i32.const 180918) "a") (data (i32.const 180921) "a") (data (i32.const 180924) "a") (data (i32.const 180927) "a") (data (i32.const 180930) "a") (data (i32.const 180933) "a") (data (i32.const 180936) "a") (data (i32.const 180939) "a") (data (i32.const 180942) "a") (data (i32.const 180945) "a") (data (i32.const 180948) "a") (data (i32.const 180951) "a") (data (i32.const 180954) "a") (data (i32.const 180957) "a") (data (i32.const 180960) "a") (data (i32.const 180963) "a") (data (i32.const 180966) "a") (data (i32.const 180969) "a") (data (i32.const 180972) "a") (data (i32.const 180975) "a") (data (i32.const 180978) "a") (data (i32.const 180981) "a") (data (i32.const 180984) "a") (data (i32.const 180987) "a") (data (i32.const 180990) "a") (data (i32.const 180993) "a") (data (i32.const 180996) "a") (data (i32.const 180999) "a") (data (i32.const 181002) "a") (data (i32.const 181005) "a") (data (i32.const 181008) "a") (data (i32.const 181011) "a") (data (i32.const 181014) "a") (data (i32.const 181017) "a") (data (i32.const 181020) "a") (data (i32.const 181023) "a") (data (i32.const 181026) "a") (data (i32.const 181029) "a") (data (i32.const 181032) "a") (data (i32.const 181035) "a") (data (i32.const 181038) "a") (data (i32.const 181041) "a") (data (i32.const 181044) "a") (data (i32.const 181047) "a") (data (i32.const 181050) "a") (data (i32.const 181053) "a") (data (i32.const 181056) "a") (data (i32.const 181059) "a") (data (i32.const 181062) "a") (data (i32.const 181065) "a") (data (i32.const 181068) "a") (data (i32.const 181071) "a") (data (i32.const 181074) "a") (data (i32.const 181077) "a") (data (i32.const 181080) "a") (data (i32.const 181083) "a") (data (i32.const 181086) "a") (data (i32.const 181089) "a") (data (i32.const 181092) "a") (data (i32.const 181095) "a") (data (i32.const 181098) "a") (data (i32.const 181101) "a") (data (i32.const 181104) "a") (data (i32.const 181107) "a") (data (i32.const 181110) "a") (data (i32.const 181113) "a") (data (i32.const 181116) "a") (data (i32.const 181119) "a") (data (i32.const 181122) "a") (data (i32.const 181125) "a") (data (i32.const 181128) "a") (data (i32.const 181131) "a") (data (i32.const 181134) "a") (data (i32.const 181137) "a") (data (i32.const 181140) "a") (data (i32.const 181143) "a") (data (i32.const 181146) "a") (data (i32.const 181149) "a") (data (i32.const 181152) "a") (data (i32.const 181155) "a") (data (i32.const 181158) "a") (data (i32.const 181161) "a") (data (i32.const 181164) "a") (data (i32.const 181167) "a") (data (i32.const 181170) "a") (data (i32.const 181173) "a") (data (i32.const 181176) "a") (data (i32.const 181179) "a") (data (i32.const 181182) "a") (data (i32.const 181185) "a") (data (i32.const 181188) "a") (data (i32.const 181191) "a") (data (i32.const 181194) "a") (data (i32.const 181197) "a") (data (i32.const 181200) "a") (data (i32.const 181203) "a") (data (i32.const 181206) "a") (data (i32.const 181209) "a") (data (i32.const 181212) "a") (data (i32.const 181215) "a") (data (i32.const 181218) "a") (data (i32.const 181221) "a") (data (i32.const 181224) "a") (data (i32.const 181227) "a") (data (i32.const 181230) "a") (data (i32.const 181233) "a") (data (i32.const 181236) "a") (data (i32.const 181239) "a") (data (i32.const 181242) "a") (data (i32.const 181245) "a") (data (i32.const 181248) "a") (data (i32.const 181251) "a") (data (i32.const 181254) "a") (data (i32.const 181257) "a") (data (i32.const 181260) "a") (data (i32.const 181263) "a") (data (i32.const 181266) "a") (data (i32.const 181269) "a") (data (i32.const 181272) "a") (data (i32.const 181275) "a") (data (i32.const 181278) "a") (data (i32.const 181281) "a") (data (i32.const 181284) "a") (data (i32.const 181287) "a") (data (i32.const 181290) "a") (data (i32.const 181293) "a") (data (i32.const 181296) "a") (data (i32.const 181299) "a") (data (i32.const 181302) "a") (data (i32.const 181305) "a") (data (i32.const 181308) "a") (data (i32.const 181311) "a") (data (i32.const 181314) "a") (data (i32.const 181317) "a") (data (i32.const 181320) "a") (data (i32.const 181323) "a") (data (i32.const 181326) "a") (data (i32.const 181329) "a") (data (i32.const 181332) "a") (data (i32.const 181335) "a") (data (i32.const 181338) "a") (data (i32.const 181341) "a") (data (i32.const 181344) "a") (data (i32.const 181347) "a") (data (i32.const 181350) "a") (data (i32.const 181353) "a") (data (i32.const 181356) "a") (data (i32.const 181359) "a") (data (i32.const 181362) "a") (data (i32.const 181365) "a") (data (i32.const 181368) "a") (data (i32.const 181371) "a") (data (i32.const 181374) "a") (data (i32.const 181377) "a") (data (i32.const 181380) "a") (data (i32.const 181383) "a") (data (i32.const 181386) "a") (data (i32.const 181389) "a") (data (i32.const 181392) "a") (data (i32.const 181395) "a") (data (i32.const 181398) "a") (data (i32.const 181401) "a") (data (i32.const 181404) "a") (data (i32.const 181407) "a") (data (i32.const 181410) "a") (data (i32.const 181413) "a") (data (i32.const 181416) "a") (data (i32.const 181419) "a") (data (i32.const 181422) "a") (data (i32.const 181425) "a") (data (i32.const 181428) "a") (data (i32.const 181431) "a") (data (i32.const 181434) "a") (data (i32.const 181437) "a") (data (i32.const 181440) "a") (data (i32.const 181443) "a") (data (i32.const 181446) "a") (data (i32.const 181449) "a") (data (i32.const 181452) "a") (data (i32.const 181455) "a") (data (i32.const 181458) "a") (data (i32.const 181461) "a") (data (i32.const 181464) "a") (data (i32.const 181467) "a") (data (i32.const 181470) "a") (data (i32.const 181473) "a") (data (i32.const 181476) "a") (data (i32.const 181479) "a") (data (i32.const 181482) "a") (data (i32.const 181485) "a") (data (i32.const 181488) "a") (data (i32.const 181491) "a") (data (i32.const 181494) "a") (data (i32.const 181497) "a") (data (i32.const 181500) "a") (data (i32.const 181503) "a") (data (i32.const 181506) "a") (data (i32.const 181509) "a") (data (i32.const 181512) "a") (data (i32.const 181515) "a") (data (i32.const 181518) "a") (data (i32.const 181521) "a") (data (i32.const 181524) "a") (data (i32.const 181527) "a") (data (i32.const 181530) "a") (data (i32.const 181533) "a") (data (i32.const 181536) "a") (data (i32.const 181539) "a") (data (i32.const 181542) "a") (data (i32.const 181545) "a") (data (i32.const 181548) "a") (data (i32.const 181551) "a") (data (i32.const 181554) "a") (data (i32.const 181557) "a") (data (i32.const 181560) "a") (data (i32.const 181563) "a") (data (i32.const 181566) "a") (data (i32.const 181569) "a") (data (i32.const 181572) "a") (data (i32.const 181575) "a") (data (i32.const 181578) "a") (data (i32.const 181581) "a") (data (i32.const 181584) "a") (data (i32.const 181587) "a") (data (i32.const 181590) "a") (data (i32.const 181593) "a") (data (i32.const 181596) "a") (data (i32.const 181599) "a") (data (i32.const 181602) "a") (data (i32.const 181605) "a") (data (i32.const 181608) "a") (data (i32.const 181611) "a") (data (i32.const 181614) "a") (data (i32.const 181617) "a") (data (i32.const 181620) "a") (data (i32.const 181623) "a") (data (i32.const 181626) "a") (data (i32.const 181629) "a") (data (i32.const 181632) "a") (data (i32.const 181635) "a") (data (i32.const 181638) "a") (data (i32.const 181641) "a") (data (i32.const 181644) "a") (data (i32.const 181647) "a") (data (i32.const 181650) "a") (data (i32.const 181653) "a") (data (i32.const 181656) "a") (data (i32.const 181659) "a") (data (i32.const 181662) "a") (data (i32.const 181665) "a") (data (i32.const 181668) "a") (data (i32.const 181671) "a") (data (i32.const 181674) "a") (data (i32.const 181677) "a") (data (i32.const 181680) "a") (data (i32.const 181683) "a") (data (i32.const 181686) "a") (data (i32.const 181689) "a") (data (i32.const 181692) "a") (data (i32.const 181695) "a") (data (i32.const 181698) "a") (data (i32.const 181701) "a") (data (i32.const 181704) "a") (data (i32.const 181707) "a") (data (i32.const 181710) "a") (data (i32.const 181713) "a") (data (i32.const 181716) "a") (data (i32.const 181719) "a") (data (i32.const 181722) "a") (data (i32.const 181725) "a") (data (i32.const 181728) "a") (data (i32.const 181731) "a") (data (i32.const 181734) "a") (data (i32.const 181737) "a") (data (i32.const 181740) "a") (data (i32.const 181743) "a") (data (i32.const 181746) "a") (data (i32.const 181749) "a") (data (i32.const 181752) "a") (data (i32.const 181755) "a") (data (i32.const 181758) "a") (data (i32.const 181761) "a") (data (i32.const 181764) "a") (data (i32.const 181767) "a") (data (i32.const 181770) "a") (data (i32.const 181773) "a") (data (i32.const 181776) "a") (data (i32.const 181779) "a") (data (i32.const 181782) "a") (data (i32.const 181785) "a") (data (i32.const 181788) "a") (data (i32.const 181791) "a") (data (i32.const 181794) "a") (data (i32.const 181797) "a") (data (i32.const 181800) "a") (data (i32.const 181803) "a") (data (i32.const 181806) "a") (data (i32.const 181809) "a") (data (i32.const 181812) "a") (data (i32.const 181815) "a") (data (i32.const 181818) "a") (data (i32.const 181821) "a") (data (i32.const 181824) "a") (data (i32.const 181827) "a") (data (i32.const 181830) "a") (data (i32.const 181833) "a") (data (i32.const 181836) "a") (data (i32.const 181839) "a") (data (i32.const 181842) "a") (data (i32.const 181845) "a") (data (i32.const 181848) "a") (data (i32.const 181851) "a") (data (i32.const 181854) "a") (data (i32.const 181857) "a") (data (i32.const 181860) "a") (data (i32.const 181863) "a") (data (i32.const 181866) "a") (data (i32.const 181869) "a") (data (i32.const 181872) "a") (data (i32.const 181875) "a") (data (i32.const 181878) "a") (data (i32.const 181881) "a") (data (i32.const 181884) "a") (data (i32.const 181887) "a") (data (i32.const 181890) "a") (data (i32.const 181893) "a") (data (i32.const 181896) "a") (data (i32.const 181899) "a") (data (i32.const 181902) "a") (data (i32.const 181905) "a") (data (i32.const 181908) "a") (data (i32.const 181911) "a") (data (i32.const 181914) "a") (data (i32.const 181917) "a") (data (i32.const 181920) "a") (data (i32.const 181923) "a") (data (i32.const 181926) "a") (data (i32.const 181929) "a") (data (i32.const 181932) "a") (data (i32.const 181935) "a") (data (i32.const 181938) "a") (data (i32.const 181941) "a") (data (i32.const 181944) "a") (data (i32.const 181947) "a") (data (i32.const 181950) "a") (data (i32.const 181953) "a") (data (i32.const 181956) "a") (data (i32.const 181959) "a") (data (i32.const 181962) "a") (data (i32.const 181965) "a") (data (i32.const 181968) "a") (data (i32.const 181971) "a") (data (i32.const 181974) "a") (data (i32.const 181977) "a") (data (i32.const 181980) "a") (data (i32.const 181983) "a") (data (i32.const 181986) "a") (data (i32.const 181989) "a") (data (i32.const 181992) "a") (data (i32.const 181995) "a") (data (i32.const 181998) "a") (data (i32.const 182001) "a") (data (i32.const 182004) "a") (data (i32.const 182007) "a") (data (i32.const 182010) "a") (data (i32.const 182013) "a") (data (i32.const 182016) "a") (data (i32.const 182019) "a") (data (i32.const 182022) "a") (data (i32.const 182025) "a") (data (i32.const 182028) "a") (data (i32.const 182031) "a") (data (i32.const 182034) "a") (data (i32.const 182037) "a") (data (i32.const 182040) "a") (data (i32.const 182043) "a") (data (i32.const 182046) "a") (data (i32.const 182049) "a") (data (i32.const 182052) "a") (data (i32.const 182055) "a") (data (i32.const 182058) "a") (data (i32.const 182061) "a") (data (i32.const 182064) "a") (data (i32.const 182067) "a") (data (i32.const 182070) "a") (data (i32.const 182073) "a") (data (i32.const 182076) "a") (data (i32.const 182079) "a") (data (i32.const 182082) "a") (data (i32.const 182085) "a") (data (i32.const 182088) "a") (data (i32.const 182091) "a") (data (i32.const 182094) "a") (data (i32.const 182097) "a") (data (i32.const 182100) "a") (data (i32.const 182103) "a") (data (i32.const 182106) "a") (data (i32.const 182109) "a") (data (i32.const 182112) "a") (data (i32.const 182115) "a") (data (i32.const 182118) "a") (data (i32.const 182121) "a") (data (i32.const 182124) "a") (data (i32.const 182127) "a") (data (i32.const 182130) "a") (data (i32.const 182133) "a") (data (i32.const 182136) "a") (data (i32.const 182139) "a") (data (i32.const 182142) "a") (data (i32.const 182145) "a") (data (i32.const 182148) "a") (data (i32.const 182151) "a") (data (i32.const 182154) "a") (data (i32.const 182157) "a") (data (i32.const 182160) "a") (data (i32.const 182163) "a") (data (i32.const 182166) "a") (data (i32.const 182169) "a") (data (i32.const 182172) "a") (data (i32.const 182175) "a") (data (i32.const 182178) "a") (data (i32.const 182181) "a") (data (i32.const 182184) "a") (data (i32.const 182187) "a") (data (i32.const 182190) "a") (data (i32.const 182193) "a") (data (i32.const 182196) "a") (data (i32.const 182199) "a") (data (i32.const 182202) "a") (data (i32.const 182205) "a") (data (i32.const 182208) "a") (data (i32.const 182211) "a") (data (i32.const 182214) "a") (data (i32.const 182217) "a") (data (i32.const 182220) "a") (data (i32.const 182223) "a") (data (i32.const 182226) "a") (data (i32.const 182229) "a") (data (i32.const 182232) "a") (data (i32.const 182235) "a") (data (i32.const 182238) "a") (data (i32.const 182241) "a") (data (i32.const 182244) "a") (data (i32.const 182247) "a") (data (i32.const 182250) "a") (data (i32.const 182253) "a") (data (i32.const 182256) "a") (data (i32.const 182259) "a") (data (i32.const 182262) "a") (data (i32.const 182265) "a") (data (i32.const 182268) "a") (data (i32.const 182271) "a") (data (i32.const 182274) "a") (data (i32.const 182277) "a") (data (i32.const 182280) "a") (data (i32.const 182283) "a") (data (i32.const 182286) "a") (data (i32.const 182289) "a") (data (i32.const 182292) "a") (data (i32.const 182295) "a") (data (i32.const 182298) "a") (data (i32.const 182301) "a") (data (i32.const 182304) "a") (data (i32.const 182307) "a") (data (i32.const 182310) "a") (data (i32.const 182313) "a") (data (i32.const 182316) "a") (data (i32.const 182319) "a") (data (i32.const 182322) "a") (data (i32.const 182325) "a") (data (i32.const 182328) "a") (data (i32.const 182331) "a") (data (i32.const 182334) "a") (data (i32.const 182337) "a") (data (i32.const 182340) "a") (data (i32.const 182343) "a") (data (i32.const 182346) "a") (data (i32.const 182349) "a") (data (i32.const 182352) "a") (data (i32.const 182355) "a") (data (i32.const 182358) "a") (data (i32.const 182361) "a") (data (i32.const 182364) "a") (data (i32.const 182367) "a") (data (i32.const 182370) "a") (data (i32.const 182373) "a") (data (i32.const 182376) "a") (data (i32.const 182379) "a") (data (i32.const 182382) "a") (data (i32.const 182385) "a") (data (i32.const 182388) "a") (data (i32.const 182391) "a") (data (i32.const 182394) "a") (data (i32.const 182397) "a") (data (i32.const 182400) "a") (data (i32.const 182403) "a") (data (i32.const 182406) "a") (data (i32.const 182409) "a") (data (i32.const 182412) "a") (data (i32.const 182415) "a") (data (i32.const 182418) "a") (data (i32.const 182421) "a") (data (i32.const 182424) "a") (data (i32.const 182427) "a") (data (i32.const 182430) "a") (data (i32.const 182433) "a") (data (i32.const 182436) "a") (data (i32.const 182439) "a") (data (i32.const 182442) "a") (data (i32.const 182445) "a") (data (i32.const 182448) "a") (data (i32.const 182451) "a") (data (i32.const 182454) "a") (data (i32.const 182457) "a") (data (i32.const 182460) "a") (data (i32.const 182463) "a") (data (i32.const 182466) "a") (data (i32.const 182469) "a") (data (i32.const 182472) "a") (data (i32.const 182475) "a") (data (i32.const 182478) "a") (data (i32.const 182481) "a") (data (i32.const 182484) "a") (data (i32.const 182487) "a") (data (i32.const 182490) "a") (data (i32.const 182493) "a") (data (i32.const 182496) "a") (data (i32.const 182499) "a") (data (i32.const 182502) "a") (data (i32.const 182505) "a") (data (i32.const 182508) "a") (data (i32.const 182511) "a") (data (i32.const 182514) "a") (data (i32.const 182517) "a") (data (i32.const 182520) "a") (data (i32.const 182523) "a") (data (i32.const 182526) "a") (data (i32.const 182529) "a") (data (i32.const 182532) "a") (data (i32.const 182535) "a") (data (i32.const 182538) "a") (data (i32.const 182541) "a") (data (i32.const 182544) "a") (data (i32.const 182547) "a") (data (i32.const 182550) "a") (data (i32.const 182553) "a") (data (i32.const 182556) "a") (data (i32.const 182559) "a") (data (i32.const 182562) "a") (data (i32.const 182565) "a") (data (i32.const 182568) "a") (data (i32.const 182571) "a") (data (i32.const 182574) "a") (data (i32.const 182577) "a") (data (i32.const 182580) "a") (data (i32.const 182583) "a") (data (i32.const 182586) "a") (data (i32.const 182589) "a") (data (i32.const 182592) "a") (data (i32.const 182595) "a") (data (i32.const 182598) "a") (data (i32.const 182601) "a") (data (i32.const 182604) "a") (data (i32.const 182607) "a") (data (i32.const 182610) "a") (data (i32.const 182613) "a") (data (i32.const 182616) "a") (data (i32.const 182619) "a") (data (i32.const 182622) "a") (data (i32.const 182625) "a") (data (i32.const 182628) "a") (data (i32.const 182631) "a") (data (i32.const 182634) "a") (data (i32.const 182637) "a") (data (i32.const 182640) "a") (data (i32.const 182643) "a") (data (i32.const 182646) "a") (data (i32.const 182649) "a") (data (i32.const 182652) "a") (data (i32.const 182655) "a") (data (i32.const 182658) "a") (data (i32.const 182661) "a") (data (i32.const 182664) "a") (data (i32.const 182667) "a") (data (i32.const 182670) "a") (data (i32.const 182673) "a") (data (i32.const 182676) "a") (data (i32.const 182679) "a") (data (i32.const 182682) "a") (data (i32.const 182685) "a") (data (i32.const 182688) "a") (data (i32.const 182691) "a") (data (i32.const 182694) "a") (data (i32.const 182697) "a") (data (i32.const 182700) "a") (data (i32.const 182703) "a") (data (i32.const 182706) "a") (data (i32.const 182709) "a") (data (i32.const 182712) "a") (data (i32.const 182715) "a") (data (i32.const 182718) "a") (data (i32.const 182721) "a") (data (i32.const 182724) "a") (data (i32.const 182727) "a") (data (i32.const 182730) "a") (data (i32.const 182733) "a") (data (i32.const 182736) "a") (data (i32.const 182739) "a") (data (i32.const 182742) "a") (data (i32.const 182745) "a") (data (i32.const 182748) "a") (data (i32.const 182751) "a") (data (i32.const 182754) "a") (data (i32.const 182757) "a") (data (i32.const 182760) "a") (data (i32.const 182763) "a") (data (i32.const 182766) "a") (data (i32.const 182769) "a") (data (i32.const 182772) "a") (data (i32.const 182775) "a") (data (i32.const 182778) "a") (data (i32.const 182781) "a") (data (i32.const 182784) "a") (data (i32.const 182787) "a") (data (i32.const 182790) "a") (data (i32.const 182793) "a") (data (i32.const 182796) "a") (data (i32.const 182799) "a") (data (i32.const 182802) "a") (data (i32.const 182805) "a") (data (i32.const 182808) "a") (data (i32.const 182811) "a") (data (i32.const 182814) "a") (data (i32.const 182817) "a") (data (i32.const 182820) "a") (data (i32.const 182823) "a") (data (i32.const 182826) "a") (data (i32.const 182829) "a") (data (i32.const 182832) "a") (data (i32.const 182835) "a") (data (i32.const 182838) "a") (data (i32.const 182841) "a") (data (i32.const 182844) "a") (data (i32.const 182847) "a") (data (i32.const 182850) "a") (data (i32.const 182853) "a") (data (i32.const 182856) "a") (data (i32.const 182859) "a") (data (i32.const 182862) "a") (data (i32.const 182865) "a") (data (i32.const 182868) "a") (data (i32.const 182871) "a") (data (i32.const 182874) "a") (data (i32.const 182877) "a") (data (i32.const 182880) "a") (data (i32.const 182883) "a") (data (i32.const 182886) "a") (data (i32.const 182889) "a") (data (i32.const 182892) "a") (data (i32.const 182895) "a") (data (i32.const 182898) "a") (data (i32.const 182901) "a") (data (i32.const 182904) "a") (data (i32.const 182907) "a") (data (i32.const 182910) "a") (data (i32.const 182913) "a") (data (i32.const 182916) "a") (data (i32.const 182919) "a") (data (i32.const 182922) "a") (data (i32.const 182925) "a") (data (i32.const 182928) "a") (data (i32.const 182931) "a") (data (i32.const 182934) "a") (data (i32.const 182937) "a") (data (i32.const 182940) "a") (data (i32.const 182943) "a") (data (i32.const 182946) "a") (data (i32.const 182949) "a") (data (i32.const 182952) "a") (data (i32.const 182955) "a") (data (i32.const 182958) "a") (data (i32.const 182961) "a") (data (i32.const 182964) "a") (data (i32.const 182967) "a") (data (i32.const 182970) "a") (data (i32.const 182973) "a") (data (i32.const 182976) "a") (data (i32.const 182979) "a") (data (i32.const 182982) "a") (data (i32.const 182985) "a") (data (i32.const 182988) "a") (data (i32.const 182991) "a") (data (i32.const 182994) "a") (data (i32.const 182997) "a") (data (i32.const 183000) "a") (data (i32.const 183003) "a") (data (i32.const 183006) "a") (data (i32.const 183009) "a") (data (i32.const 183012) "a") (data (i32.const 183015) "a") (data (i32.const 183018) "a") (data (i32.const 183021) "a") (data (i32.const 183024) "a") (data (i32.const 183027) "a") (data (i32.const 183030) "a") (data (i32.const 183033) "a") (data (i32.const 183036) "a") (data (i32.const 183039) "a") (data (i32.const 183042) "a") (data (i32.const 183045) "a") (data (i32.const 183048) "a") (data (i32.const 183051) "a") (data (i32.const 183054) "a") (data (i32.const 183057) "a") (data (i32.const 183060) "a") (data (i32.const 183063) "a") (data (i32.const 183066) "a") (data (i32.const 183069) "a") (data (i32.const 183072) "a") (data (i32.const 183075) "a") (data (i32.const 183078) "a") (data (i32.const 183081) "a") (data (i32.const 183084) "a") (data (i32.const 183087) "a") (data (i32.const 183090) "a") (data (i32.const 183093) "a") (data (i32.const 183096) "a") (data (i32.const 183099) "a") (data (i32.const 183102) "a") (data (i32.const 183105) "a") (data (i32.const 183108) "a") (data (i32.const 183111) "a") (data (i32.const 183114) "a") (data (i32.const 183117) "a") (data (i32.const 183120) "a") (data (i32.const 183123) "a") (data (i32.const 183126) "a") (data (i32.const 183129) "a") (data (i32.const 183132) "a") (data (i32.const 183135) "a") (data (i32.const 183138) "a") (data (i32.const 183141) "a") (data (i32.const 183144) "a") (data (i32.const 183147) "a") (data (i32.const 183150) "a") (data (i32.const 183153) "a") (data (i32.const 183156) "a") (data (i32.const 183159) "a") (data (i32.const 183162) "a") (data (i32.const 183165) "a") (data (i32.const 183168) "a") (data (i32.const 183171) "a") (data (i32.const 183174) "a") (data (i32.const 183177) "a") (data (i32.const 183180) "a") (data (i32.const 183183) "a") (data (i32.const 183186) "a") (data (i32.const 183189) "a") (data (i32.const 183192) "a") (data (i32.const 183195) "a") (data (i32.const 183198) "a") (data (i32.const 183201) "a") (data (i32.const 183204) "a") (data (i32.const 183207) "a") (data (i32.const 183210) "a") (data (i32.const 183213) "a") (data (i32.const 183216) "a") (data (i32.const 183219) "a") (data (i32.const 183222) "a") (data (i32.const 183225) "a") (data (i32.const 183228) "a") (data (i32.const 183231) "a") (data (i32.const 183234) "a") (data (i32.const 183237) "a") (data (i32.const 183240) "a") (data (i32.const 183243) "a") (data (i32.const 183246) "a") (data (i32.const 183249) "a") (data (i32.const 183252) "a") (data (i32.const 183255) "a") (data (i32.const 183258) "a") (data (i32.const 183261) "a") (data (i32.const 183264) "a") (data (i32.const 183267) "a") (data (i32.const 183270) "a") (data (i32.const 183273) "a") (data (i32.const 183276) "a") (data (i32.const 183279) "a") (data (i32.const 183282) "a") (data (i32.const 183285) "a") (data (i32.const 183288) "a") (data (i32.const 183291) "a") (data (i32.const 183294) "a") (data (i32.const 183297) "a") (data (i32.const 183300) "a") (data (i32.const 183303) "a") (data (i32.const 183306) "a") (data (i32.const 183309) "a") (data (i32.const 183312) "a") (data (i32.const 183315) "a") (data (i32.const 183318) "a") (data (i32.const 183321) "a") (data (i32.const 183324) "a") (data (i32.const 183327) "a") (data (i32.const 183330) "a") (data (i32.const 183333) "a") (data (i32.const 183336) "a") (data (i32.const 183339) "a") (data (i32.const 183342) "a") (data (i32.const 183345) "a") (data (i32.const 183348) "a") (data (i32.const 183351) "a") (data (i32.const 183354) "a") (data (i32.const 183357) "a") (data (i32.const 183360) "a") (data (i32.const 183363) "a") (data (i32.const 183366) "a") (data (i32.const 183369) "a") (data (i32.const 183372) "a") (data (i32.const 183375) "a") (data (i32.const 183378) "a") (data (i32.const 183381) "a") (data (i32.const 183384) "a") (data (i32.const 183387) "a") (data (i32.const 183390) "a") (data (i32.const 183393) "a") (data (i32.const 183396) "a") (data (i32.const 183399) "a") (data (i32.const 183402) "a") (data (i32.const 183405) "a") (data (i32.const 183408) "a") (data (i32.const 183411) "a") (data (i32.const 183414) "a") (data (i32.const 183417) "a") (data (i32.const 183420) "a") (data (i32.const 183423) "a") (data (i32.const 183426) "a") (data (i32.const 183429) "a") (data (i32.const 183432) "a") (data (i32.const 183435) "a") (data (i32.const 183438) "a") (data (i32.const 183441) "a") (data (i32.const 183444) "a") (data (i32.const 183447) "a") (data (i32.const 183450) "a") (data (i32.const 183453) "a") (data (i32.const 183456) "a") (data (i32.const 183459) "a") (data (i32.const 183462) "a") (data (i32.const 183465) "a") (data (i32.const 183468) "a") (data (i32.const 183471) "a") (data (i32.const 183474) "a") (data (i32.const 183477) "a") (data (i32.const 183480) "a") (data (i32.const 183483) "a") (data (i32.const 183486) "a") (data (i32.const 183489) "a") (data (i32.const 183492) "a") (data (i32.const 183495) "a") (data (i32.const 183498) "a") (data (i32.const 183501) "a") (data (i32.const 183504) "a") (data (i32.const 183507) "a") (data (i32.const 183510) "a") (data (i32.const 183513) "a") (data (i32.const 183516) "a") (data (i32.const 183519) "a") (data (i32.const 183522) "a") (data (i32.const 183525) "a") (data (i32.const 183528) "a") (data (i32.const 183531) "a") (data (i32.const 183534) "a") (data (i32.const 183537) "a") (data (i32.const 183540) "a") (data (i32.const 183543) "a") (data (i32.const 183546) "a") (data (i32.const 183549) "a") (data (i32.const 183552) "a") (data (i32.const 183555) "a") (data (i32.const 183558) "a") (data (i32.const 183561) "a") (data (i32.const 183564) "a") (data (i32.const 183567) "a") (data (i32.const 183570) "a") (data (i32.const 183573) "a") (data (i32.const 183576) "a") (data (i32.const 183579) "a") (data (i32.const 183582) "a") (data (i32.const 183585) "a") (data (i32.const 183588) "a") (data (i32.const 183591) "a") (data (i32.const 183594) "a") (data (i32.const 183597) "a") (data (i32.const 183600) "a") (data (i32.const 183603) "a") (data (i32.const 183606) "a") (data (i32.const 183609) "a") (data (i32.const 183612) "a") (data (i32.const 183615) "a") (data (i32.const 183618) "a") (data (i32.const 183621) "a") (data (i32.const 183624) "a") (data (i32.const 183627) "a") (data (i32.const 183630) "a") (data (i32.const 183633) "a") (data (i32.const 183636) "a") (data (i32.const 183639) "a") (data (i32.const 183642) "a") (data (i32.const 183645) "a") (data (i32.const 183648) "a") (data (i32.const 183651) "a") (data (i32.const 183654) "a") (data (i32.const 183657) "a") (data (i32.const 183660) "a") (data (i32.const 183663) "a") (data (i32.const 183666) "a") (data (i32.const 183669) "a") (data (i32.const 183672) "a") (data (i32.const 183675) "a") (data (i32.const 183678) "a") (data (i32.const 183681) "a") (data (i32.const 183684) "a") (data (i32.const 183687) "a") (data (i32.const 183690) "a") (data (i32.const 183693) "a") (data (i32.const 183696) "a") (data (i32.const 183699) "a") (data (i32.const 183702) "a") (data (i32.const 183705) "a") (data (i32.const 183708) "a") (data (i32.const 183711) "a") (data (i32.const 183714) "a") (data (i32.const 183717) "a") (data (i32.const 183720) "a") (data (i32.const 183723) "a") (data (i32.const 183726) "a") (data (i32.const 183729) "a") (data (i32.const 183732) "a") (data (i32.const 183735) "a") (data (i32.const 183738) "a") (data (i32.const 183741) "a") (data (i32.const 183744) "a") (data (i32.const 183747) "a") (data (i32.const 183750) "a") (data (i32.const 183753) "a") (data (i32.const 183756) "a") (data (i32.const 183759) "a") (data (i32.const 183762) "a") (data (i32.const 183765) "a") (data (i32.const 183768) "a") (data (i32.const 183771) "a") (data (i32.const 183774) "a") (data (i32.const 183777) "a") (data (i32.const 183780) "a") (data (i32.const 183783) "a") (data (i32.const 183786) "a") (data (i32.const 183789) "a") (data (i32.const 183792) "a") (data (i32.const 183795) "a") (data (i32.const 183798) "a") (data (i32.const 183801) "a") (data (i32.const 183804) "a") (data (i32.const 183807) "a") (data (i32.const 183810) "a") (data (i32.const 183813) "a") (data (i32.const 183816) "a") (data (i32.const 183819) "a") (data (i32.const 183822) "a") (data (i32.const 183825) "a") (data (i32.const 183828) "a") (data (i32.const 183831) "a") (data (i32.const 183834) "a") (data (i32.const 183837) "a") (data (i32.const 183840) "a") (data (i32.const 183843) "a") (data (i32.const 183846) "a") (data (i32.const 183849) "a") (data (i32.const 183852) "a") (data (i32.const 183855) "a") (data (i32.const 183858) "a") (data (i32.const 183861) "a") (data (i32.const 183864) "a") (data (i32.const 183867) "a") (data (i32.const 183870) "a") (data (i32.const 183873) "a") (data (i32.const 183876) "a") (data (i32.const 183879) "a") (data (i32.const 183882) "a") (data (i32.const 183885) "a") (data (i32.const 183888) "a") (data (i32.const 183891) "a") (data (i32.const 183894) "a") (data (i32.const 183897) "a") (data (i32.const 183900) "a") (data (i32.const 183903) "a") (data (i32.const 183906) "a") (data (i32.const 183909) "a") (data (i32.const 183912) "a") (data (i32.const 183915) "a") (data (i32.const 183918) "a") (data (i32.const 183921) "a") (data (i32.const 183924) "a") (data (i32.const 183927) "a") (data (i32.const 183930) "a") (data (i32.const 183933) "a") (data (i32.const 183936) "a") (data (i32.const 183939) "a") (data (i32.const 183942) "a") (data (i32.const 183945) "a") (data (i32.const 183948) "a") (data (i32.const 183951) "a") (data (i32.const 183954) "a") (data (i32.const 183957) "a") (data (i32.const 183960) "a") (data (i32.const 183963) "a") (data (i32.const 183966) "a") (data (i32.const 183969) "a") (data (i32.const 183972) "a") (data (i32.const 183975) "a") (data (i32.const 183978) "a") (data (i32.const 183981) "a") (data (i32.const 183984) "a") (data (i32.const 183987) "a") (data (i32.const 183990) "a") (data (i32.const 183993) "a") (data (i32.const 183996) "a") (data (i32.const 183999) "a") (data (i32.const 184002) "a") (data (i32.const 184005) "a") (data (i32.const 184008) "a") (data (i32.const 184011) "a") (data (i32.const 184014) "a") (data (i32.const 184017) "a") (data (i32.const 184020) "a") (data (i32.const 184023) "a") (data (i32.const 184026) "a") (data (i32.const 184029) "a") (data (i32.const 184032) "a") (data (i32.const 184035) "a") (data (i32.const 184038) "a") (data (i32.const 184041) "a") (data (i32.const 184044) "a") (data (i32.const 184047) "a") (data (i32.const 184050) "a") (data (i32.const 184053) "a") (data (i32.const 184056) "a") (data (i32.const 184059) "a") (data (i32.const 184062) "a") (data (i32.const 184065) "a") (data (i32.const 184068) "a") (data (i32.const 184071) "a") (data (i32.const 184074) "a") (data (i32.const 184077) "a") (data (i32.const 184080) "a") (data (i32.const 184083) "a") (data (i32.const 184086) "a") (data (i32.const 184089) "a") (data (i32.const 184092) "a") (data (i32.const 184095) "a") (data (i32.const 184098) "a") (data (i32.const 184101) "a") (data (i32.const 184104) "a") (data (i32.const 184107) "a") (data (i32.const 184110) "a") (data (i32.const 184113) "a") (data (i32.const 184116) "a") (data (i32.const 184119) "a") (data (i32.const 184122) "a") (data (i32.const 184125) "a") (data (i32.const 184128) "a") (data (i32.const 184131) "a") (data (i32.const 184134) "a") (data (i32.const 184137) "a") (data (i32.const 184140) "a") (data (i32.const 184143) "a") (data (i32.const 184146) "a") (data (i32.const 184149) "a") (data (i32.const 184152) "a") (data (i32.const 184155) "a") (data (i32.const 184158) "a") (data (i32.const 184161) "a") (data (i32.const 184164) "a") (data (i32.const 184167) "a") (data (i32.const 184170) "a") (data (i32.const 184173) "a") (data (i32.const 184176) "a") (data (i32.const 184179) "a") (data (i32.const 184182) "a") (data (i32.const 184185) "a") (data (i32.const 184188) "a") (data (i32.const 184191) "a") (data (i32.const 184194) "a") (data (i32.const 184197) "a") (data (i32.const 184200) "a") (data (i32.const 184203) "a") (data (i32.const 184206) "a") (data (i32.const 184209) "a") (data (i32.const 184212) "a") (data (i32.const 184215) "a") (data (i32.const 184218) "a") (data (i32.const 184221) "a") (data (i32.const 184224) "a") (data (i32.const 184227) "a") (data (i32.const 184230) "a") (data (i32.const 184233) "a") (data (i32.const 184236) "a") (data (i32.const 184239) "a") (data (i32.const 184242) "a") (data (i32.const 184245) "a") (data (i32.const 184248) "a") (data (i32.const 184251) "a") (data (i32.const 184254) "a") (data (i32.const 184257) "a") (data (i32.const 184260) "a") (data (i32.const 184263) "a") (data (i32.const 184266) "a") (data (i32.const 184269) "a") (data (i32.const 184272) "a") (data (i32.const 184275) "a") (data (i32.const 184278) "a") (data (i32.const 184281) "a") (data (i32.const 184284) "a") (data (i32.const 184287) "a") (data (i32.const 184290) "a") (data (i32.const 184293) "a") (data (i32.const 184296) "a") (data (i32.const 184299) "a") (data (i32.const 184302) "a") (data (i32.const 184305) "a") (data (i32.const 184308) "a") (data (i32.const 184311) "a") (data (i32.const 184314) "a") (data (i32.const 184317) "a") (data (i32.const 184320) "a") (data (i32.const 184323) "a") (data (i32.const 184326) "a") (data (i32.const 184329) "a") (data (i32.const 184332) "a") (data (i32.const 184335) "a") (data (i32.const 184338) "a") (data (i32.const 184341) "a") (data (i32.const 184344) "a") (data (i32.const 184347) "a") (data (i32.const 184350) "a") (data (i32.const 184353) "a") (data (i32.const 184356) "a") (data (i32.const 184359) "a") (data (i32.const 184362) "a") (data (i32.const 184365) "a") (data (i32.const 184368) "a") (data (i32.const 184371) "a") (data (i32.const 184374) "a") (data (i32.const 184377) "a") (data (i32.const 184380) "a") (data (i32.const 184383) "a") (data (i32.const 184386) "a") (data (i32.const 184389) "a") (data (i32.const 184392) "a") (data (i32.const 184395) "a") (data (i32.const 184398) "a") (data (i32.const 184401) "a") (data (i32.const 184404) "a") (data (i32.const 184407) "a") (data (i32.const 184410) "a") (data (i32.const 184413) "a") (data (i32.const 184416) "a") (data (i32.const 184419) "a") (data (i32.const 184422) "a") (data (i32.const 184425) "a") (data (i32.const 184428) "a") (data (i32.const 184431) "a") (data (i32.const 184434) "a") (data (i32.const 184437) "a") (data (i32.const 184440) "a") (data (i32.const 184443) "a") (data (i32.const 184446) "a") (data (i32.const 184449) "a") (data (i32.const 184452) "a") (data (i32.const 184455) "a") (data (i32.const 184458) "a") (data (i32.const 184461) "a") (data (i32.const 184464) "a") (data (i32.const 184467) "a") (data (i32.const 184470) "a") (data (i32.const 184473) "a") (data (i32.const 184476) "a") (data (i32.const 184479) "a") (data (i32.const 184482) "a") (data (i32.const 184485) "a") (data (i32.const 184488) "a") (data (i32.const 184491) "a") (data (i32.const 184494) "a") (data (i32.const 184497) "a") (data (i32.const 184500) "a") (data (i32.const 184503) "a") (data (i32.const 184506) "a") (data (i32.const 184509) "a") (data (i32.const 184512) "a") (data (i32.const 184515) "a") (data (i32.const 184518) "a") (data (i32.const 184521) "a") (data (i32.const 184524) "a") (data (i32.const 184527) "a") (data (i32.const 184530) "a") (data (i32.const 184533) "a") (data (i32.const 184536) "a") (data (i32.const 184539) "a") (data (i32.const 184542) "a") (data (i32.const 184545) "a") (data (i32.const 184548) "a") (data (i32.const 184551) "a") (data (i32.const 184554) "a") (data (i32.const 184557) "a") (data (i32.const 184560) "a") (data (i32.const 184563) "a") (data (i32.const 184566) "a") (data (i32.const 184569) "a") (data (i32.const 184572) "a") (data (i32.const 184575) "a") (data (i32.const 184578) "a") (data (i32.const 184581) "a") (data (i32.const 184584) "a") (data (i32.const 184587) "a") (data (i32.const 184590) "a") (data (i32.const 184593) "a") (data (i32.const 184596) "a") (data (i32.const 184599) "a") (data (i32.const 184602) "a") (data (i32.const 184605) "a") (data (i32.const 184608) "a") (data (i32.const 184611) "a") (data (i32.const 184614) "a") (data (i32.const 184617) "a") (data (i32.const 184620) "a") (data (i32.const 184623) "a") (data (i32.const 184626) "a") (data (i32.const 184629) "a") (data (i32.const 184632) "a") (data (i32.const 184635) "a") (data (i32.const 184638) "a") (data (i32.const 184641) "a") (data (i32.const 184644) "a") (data (i32.const 184647) "a") (data (i32.const 184650) "a") (data (i32.const 184653) "a") (data (i32.const 184656) "a") (data (i32.const 184659) "a") (data (i32.const 184662) "a") (data (i32.const 184665) "a") (data (i32.const 184668) "a") (data (i32.const 184671) "a") (data (i32.const 184674) "a") (data (i32.const 184677) "a") (data (i32.const 184680) "a") (data (i32.const 184683) "a") (data (i32.const 184686) "a") (data (i32.const 184689) "a") (data (i32.const 184692) "a") (data (i32.const 184695) "a") (data (i32.const 184698) "a") (data (i32.const 184701) "a") (data (i32.const 184704) "a") (data (i32.const 184707) "a") (data (i32.const 184710) "a") (data (i32.const 184713) "a") (data (i32.const 184716) "a") (data (i32.const 184719) "a") (data (i32.const 184722) "a") (data (i32.const 184725) "a") (data (i32.const 184728) "a") (data (i32.const 184731) "a") (data (i32.const 184734) "a") (data (i32.const 184737) "a") (data (i32.const 184740) "a") (data (i32.const 184743) "a") (data (i32.const 184746) "a") (data (i32.const 184749) "a") (data (i32.const 184752) "a") (data (i32.const 184755) "a") (data (i32.const 184758) "a") (data (i32.const 184761) "a") (data (i32.const 184764) "a") (data (i32.const 184767) "a") (data (i32.const 184770) "a") (data (i32.const 184773) "a") (data (i32.const 184776) "a") (data (i32.const 184779) "a") (data (i32.const 184782) "a") (data (i32.const 184785) "a") (data (i32.const 184788) "a") (data (i32.const 184791) "a") (data (i32.const 184794) "a") (data (i32.const 184797) "a") (data (i32.const 184800) "a") (data (i32.const 184803) "a") (data (i32.const 184806) "a") (data (i32.const 184809) "a") (data (i32.const 184812) "a") (data (i32.const 184815) "a") (data (i32.const 184818) "a") (data (i32.const 184821) "a") (data (i32.const 184824) "a") (data (i32.const 184827) "a") (data (i32.const 184830) "a") (data (i32.const 184833) "a") (data (i32.const 184836) "a") (data (i32.const 184839) "a") (data (i32.const 184842) "a") (data (i32.const 184845) "a") (data (i32.const 184848) "a") (data (i32.const 184851) "a") (data (i32.const 184854) "a") (data (i32.const 184857) "a") (data (i32.const 184860) "a") (data (i32.const 184863) "a") (data (i32.const 184866) "a") (data (i32.const 184869) "a") (data (i32.const 184872) "a") (data (i32.const 184875) "a") (data (i32.const 184878) "a") (data (i32.const 184881) "a") (data (i32.const 184884) "a") (data (i32.const 184887) "a") (data (i32.const 184890) "a") (data (i32.const 184893) "a") (data (i32.const 184896) "a") (data (i32.const 184899) "a") (data (i32.const 184902) "a") (data (i32.const 184905) "a") (data (i32.const 184908) "a") (data (i32.const 184911) "a") (data (i32.const 184914) "a") (data (i32.const 184917) "a") (data (i32.const 184920) "a") (data (i32.const 184923) "a") (data (i32.const 184926) "a") (data (i32.const 184929) "a") (data (i32.const 184932) "a") (data (i32.const 184935) "a") (data (i32.const 184938) "a") (data (i32.const 184941) "a") (data (i32.const 184944) "a") (data (i32.const 184947) "a") (data (i32.const 184950) "a") (data (i32.const 184953) "a") (data (i32.const 184956) "a") (data (i32.const 184959) "a") (data (i32.const 184962) "a") (data (i32.const 184965) "a") (data (i32.const 184968) "a") (data (i32.const 184971) "a") (data (i32.const 184974) "a") (data (i32.const 184977) "a") (data (i32.const 184980) "a") (data (i32.const 184983) "a") (data (i32.const 184986) "a") (data (i32.const 184989) "a") (data (i32.const 184992) "a") (data (i32.const 184995) "a") (data (i32.const 184998) "a") (data (i32.const 185001) "a") (data (i32.const 185004) "a") (data (i32.const 185007) "a") (data (i32.const 185010) "a") (data (i32.const 185013) "a") (data (i32.const 185016) "a") (data (i32.const 185019) "a") (data (i32.const 185022) "a") (data (i32.const 185025) "a") (data (i32.const 185028) "a") (data (i32.const 185031) "a") (data (i32.const 185034) "a") (data (i32.const 185037) "a") (data (i32.const 185040) "a") (data (i32.const 185043) "a") (data (i32.const 185046) "a") (data (i32.const 185049) "a") (data (i32.const 185052) "a") (data (i32.const 185055) "a") (data (i32.const 185058) "a") (data (i32.const 185061) "a") (data (i32.const 185064) "a") (data (i32.const 185067) "a") (data (i32.const 185070) "a") (data (i32.const 185073) "a") (data (i32.const 185076) "a") (data (i32.const 185079) "a") (data (i32.const 185082) "a") (data (i32.const 185085) "a") (data (i32.const 185088) "a") (data (i32.const 185091) "a") (data (i32.const 185094) "a") (data (i32.const 185097) "a") (data (i32.const 185100) "a") (data (i32.const 185103) "a") (data (i32.const 185106) "a") (data (i32.const 185109) "a") (data (i32.const 185112) "a") (data (i32.const 185115) "a") (data (i32.const 185118) "a") (data (i32.const 185121) "a") (data (i32.const 185124) "a") (data (i32.const 185127) "a") (data (i32.const 185130) "a") (data (i32.const 185133) "a") (data (i32.const 185136) "a") (data (i32.const 185139) "a") (data (i32.const 185142) "a") (data (i32.const 185145) "a") (data (i32.const 185148) "a") (data (i32.const 185151) "a") (data (i32.const 185154) "a") (data (i32.const 185157) "a") (data (i32.const 185160) "a") (data (i32.const 185163) "a") (data (i32.const 185166) "a") (data (i32.const 185169) "a") (data (i32.const 185172) "a") (data (i32.const 185175) "a") (data (i32.const 185178) "a") (data (i32.const 185181) "a") (data (i32.const 185184) "a") (data (i32.const 185187) "a") (data (i32.const 185190) "a") (data (i32.const 185193) "a") (data (i32.const 185196) "a") (data (i32.const 185199) "a") (data (i32.const 185202) "a") (data (i32.const 185205) "a") (data (i32.const 185208) "a") (data (i32.const 185211) "a") (data (i32.const 185214) "a") (data (i32.const 185217) "a") (data (i32.const 185220) "a") (data (i32.const 185223) "a") (data (i32.const 185226) "a") (data (i32.const 185229) "a") (data (i32.const 185232) "a") (data (i32.const 185235) "a") (data (i32.const 185238) "a") (data (i32.const 185241) "a") (data (i32.const 185244) "a") (data (i32.const 185247) "a") (data (i32.const 185250) "a") (data (i32.const 185253) "a") (data (i32.const 185256) "a") (data (i32.const 185259) "a") (data (i32.const 185262) "a") (data (i32.const 185265) "a") (data (i32.const 185268) "a") (data (i32.const 185271) "a") (data (i32.const 185274) "a") (data (i32.const 185277) "a") (data (i32.const 185280) "a") (data (i32.const 185283) "a") (data (i32.const 185286) "a") (data (i32.const 185289) "a") (data (i32.const 185292) "a") (data (i32.const 185295) "a") (data (i32.const 185298) "a") (data (i32.const 185301) "a") (data (i32.const 185304) "a") (data (i32.const 185307) "a") (data (i32.const 185310) "a") (data (i32.const 185313) "a") (data (i32.const 185316) "a") (data (i32.const 185319) "a") (data (i32.const 185322) "a") (data (i32.const 185325) "a") (data (i32.const 185328) "a") (data (i32.const 185331) "a") (data (i32.const 185334) "a") (data (i32.const 185337) "a") (data (i32.const 185340) "a") (data (i32.const 185343) "a") (data (i32.const 185346) "a") (data (i32.const 185349) "a") (data (i32.const 185352) "a") (data (i32.const 185355) "a") (data (i32.const 185358) "a") (data (i32.const 185361) "a") (data (i32.const 185364) "a") (data (i32.const 185367) "a") (data (i32.const 185370) "a") (data (i32.const 185373) "a") (data (i32.const 185376) "a") (data (i32.const 185379) "a") (data (i32.const 185382) "a") (data (i32.const 185385) "a") (data (i32.const 185388) "a") (data (i32.const 185391) "a") (data (i32.const 185394) "a") (data (i32.const 185397) "a") (data (i32.const 185400) "a") (data (i32.const 185403) "a") (data (i32.const 185406) "a") (data (i32.const 185409) "a") (data (i32.const 185412) "a") (data (i32.const 185415) "a") (data (i32.const 185418) "a") (data (i32.const 185421) "a") (data (i32.const 185424) "a") (data (i32.const 185427) "a") (data (i32.const 185430) "a") (data (i32.const 185433) "a") (data (i32.const 185436) "a") (data (i32.const 185439) "a") (data (i32.const 185442) "a") (data (i32.const 185445) "a") (data (i32.const 185448) "a") (data (i32.const 185451) "a") (data (i32.const 185454) "a") (data (i32.const 185457) "a") (data (i32.const 185460) "a") (data (i32.const 185463) "a") (data (i32.const 185466) "a") (data (i32.const 185469) "a") (data (i32.const 185472) "a") (data (i32.const 185475) "a") (data (i32.const 185478) "a") (data (i32.const 185481) "a") (data (i32.const 185484) "a") (data (i32.const 185487) "a") (data (i32.const 185490) "a") (data (i32.const 185493) "a") (data (i32.const 185496) "a") (data (i32.const 185499) "a") (data (i32.const 185502) "a") (data (i32.const 185505) "a") (data (i32.const 185508) "a") (data (i32.const 185511) "a") (data (i32.const 185514) "a") (data (i32.const 185517) "a") (data (i32.const 185520) "a") (data (i32.const 185523) "a") (data (i32.const 185526) "a") (data (i32.const 185529) "a") (data (i32.const 185532) "a") (data (i32.const 185535) "a") (data (i32.const 185538) "a") (data (i32.const 185541) "a") (data (i32.const 185544) "a") (data (i32.const 185547) "a") (data (i32.const 185550) "a") (data (i32.const 185553) "a") (data (i32.const 185556) "a") (data (i32.const 185559) "a") (data (i32.const 185562) "a") (data (i32.const 185565) "a") (data (i32.const 185568) "a") (data (i32.const 185571) "a") (data (i32.const 185574) "a") (data (i32.const 185577) "a") (data (i32.const 185580) "a") (data (i32.const 185583) "a") (data (i32.const 185586) "a") (data (i32.const 185589) "a") (data (i32.const 185592) "a") (data (i32.const 185595) "a") (data (i32.const 185598) "a") (data (i32.const 185601) "a") (data (i32.const 185604) "a") (data (i32.const 185607) "a") (data (i32.const 185610) "a") (data (i32.const 185613) "a") (data (i32.const 185616) "a") (data (i32.const 185619) "a") (data (i32.const 185622) "a") (data (i32.const 185625) "a") (data (i32.const 185628) "a") (data (i32.const 185631) "a") (data (i32.const 185634) "a") (data (i32.const 185637) "a") (data (i32.const 185640) "a") (data (i32.const 185643) "a") (data (i32.const 185646) "a") (data (i32.const 185649) "a") (data (i32.const 185652) "a") (data (i32.const 185655) "a") (data (i32.const 185658) "a") (data (i32.const 185661) "a") (data (i32.const 185664) "a") (data (i32.const 185667) "a") (data (i32.const 185670) "a") (data (i32.const 185673) "a") (data (i32.const 185676) "a") (data (i32.const 185679) "a") (data (i32.const 185682) "a") (data (i32.const 185685) "a") (data (i32.const 185688) "a") (data (i32.const 185691) "a") (data (i32.const 185694) "a") (data (i32.const 185697) "a") (data (i32.const 185700) "a") (data (i32.const 185703) "a") (data (i32.const 185706) "a") (data (i32.const 185709) "a") (data (i32.const 185712) "a") (data (i32.const 185715) "a") (data (i32.const 185718) "a") (data (i32.const 185721) "a") (data (i32.const 185724) "a") (data (i32.const 185727) "a") (data (i32.const 185730) "a") (data (i32.const 185733) "a") (data (i32.const 185736) "a") (data (i32.const 185739) "a") (data (i32.const 185742) "a") (data (i32.const 185745) "a") (data (i32.const 185748) "a") (data (i32.const 185751) "a") (data (i32.const 185754) "a") (data (i32.const 185757) "a") (data (i32.const 185760) "a") (data (i32.const 185763) "a") (data (i32.const 185766) "a") (data (i32.const 185769) "a") (data (i32.const 185772) "a") (data (i32.const 185775) "a") (data (i32.const 185778) "a") (data (i32.const 185781) "a") (data (i32.const 185784) "a") (data (i32.const 185787) "a") (data (i32.const 185790) "a") (data (i32.const 185793) "a") (data (i32.const 185796) "a") (data (i32.const 185799) "a") (data (i32.const 185802) "a") (data (i32.const 185805) "a") (data (i32.const 185808) "a") (data (i32.const 185811) "a") (data (i32.const 185814) "a") (data (i32.const 185817) "a") (data (i32.const 185820) "a") (data (i32.const 185823) "a") (data (i32.const 185826) "a") (data (i32.const 185829) "a") (data (i32.const 185832) "a") (data (i32.const 185835) "a") (data (i32.const 185838) "a") (data (i32.const 185841) "a") (data (i32.const 185844) "a") (data (i32.const 185847) "a") (data (i32.const 185850) "a") (data (i32.const 185853) "a") (data (i32.const 185856) "a") (data (i32.const 185859) "a") (data (i32.const 185862) "a") (data (i32.const 185865) "a") (data (i32.const 185868) "a") (data (i32.const 185871) "a") (data (i32.const 185874) "a") (data (i32.const 185877) "a") (data (i32.const 185880) "a") (data (i32.const 185883) "a") (data (i32.const 185886) "a") (data (i32.const 185889) "a") (data (i32.const 185892) "a") (data (i32.const 185895) "a") (data (i32.const 185898) "a") (data (i32.const 185901) "a") (data (i32.const 185904) "a") (data (i32.const 185907) "a") (data (i32.const 185910) "a") (data (i32.const 185913) "a") (data (i32.const 185916) "a") (data (i32.const 185919) "a") (data (i32.const 185922) "a") (data (i32.const 185925) "a") (data (i32.const 185928) "a") (data (i32.const 185931) "a") (data (i32.const 185934) "a") (data (i32.const 185937) "a") (data (i32.const 185940) "a") (data (i32.const 185943) "a") (data (i32.const 185946) "a") (data (i32.const 185949) "a") (data (i32.const 185952) "a") (data (i32.const 185955) "a") (data (i32.const 185958) "a") (data (i32.const 185961) "a") (data (i32.const 185964) "a") (data (i32.const 185967) "a") (data (i32.const 185970) "a") (data (i32.const 185973) "a") (data (i32.const 185976) "a") (data (i32.const 185979) "a") (data (i32.const 185982) "a") (data (i32.const 185985) "a") (data (i32.const 185988) "a") (data (i32.const 185991) "a") (data (i32.const 185994) "a") (data (i32.const 185997) "a") (data (i32.const 186000) "a") (data (i32.const 186003) "a") (data (i32.const 186006) "a") (data (i32.const 186009) "a") (data (i32.const 186012) "a") (data (i32.const 186015) "a") (data (i32.const 186018) "a") (data (i32.const 186021) "a") (data (i32.const 186024) "a") (data (i32.const 186027) "a") (data (i32.const 186030) "a") (data (i32.const 186033) "a") (data (i32.const 186036) "a") (data (i32.const 186039) "a") (data (i32.const 186042) "a") (data (i32.const 186045) "a") (data (i32.const 186048) "a") (data (i32.const 186051) "a") (data (i32.const 186054) "a") (data (i32.const 186057) "a") (data (i32.const 186060) "a") (data (i32.const 186063) "a") (data (i32.const 186066) "a") (data (i32.const 186069) "a") (data (i32.const 186072) "a") (data (i32.const 186075) "a") (data (i32.const 186078) "a") (data (i32.const 186081) "a") (data (i32.const 186084) "a") (data (i32.const 186087) "a") (data (i32.const 186090) "a") (data (i32.const 186093) "a") (data (i32.const 186096) "a") (data (i32.const 186099) "a") (data (i32.const 186102) "a") (data (i32.const 186105) "a") (data (i32.const 186108) "a") (data (i32.const 186111) "a") (data (i32.const 186114) "a") (data (i32.const 186117) "a") (data (i32.const 186120) "a") (data (i32.const 186123) "a") (data (i32.const 186126) "a") (data (i32.const 186129) "a") (data (i32.const 186132) "a") (data (i32.const 186135) "a") (data (i32.const 186138) "a") (data (i32.const 186141) "a") (data (i32.const 186144) "a") (data (i32.const 186147) "a") (data (i32.const 186150) "a") (data (i32.const 186153) "a") (data (i32.const 186156) "a") (data (i32.const 186159) "a") (data (i32.const 186162) "a") (data (i32.const 186165) "a") (data (i32.const 186168) "a") (data (i32.const 186171) "a") (data (i32.const 186174) "a") (data (i32.const 186177) "a") (data (i32.const 186180) "a") (data (i32.const 186183) "a") (data (i32.const 186186) "a") (data (i32.const 186189) "a") (data (i32.const 186192) "a") (data (i32.const 186195) "a") (data (i32.const 186198) "a") (data (i32.const 186201) "a") (data (i32.const 186204) "a") (data (i32.const 186207) "a") (data (i32.const 186210) "a") (data (i32.const 186213) "a") (data (i32.const 186216) "a") (data (i32.const 186219) "a") (data (i32.const 186222) "a") (data (i32.const 186225) "a") (data (i32.const 186228) "a") (data (i32.const 186231) "a") (data (i32.const 186234) "a") (data (i32.const 186237) "a") (data (i32.const 186240) "a") (data (i32.const 186243) "a") (data (i32.const 186246) "a") (data (i32.const 186249) "a") (data (i32.const 186252) "a") (data (i32.const 186255) "a") (data (i32.const 186258) "a") (data (i32.const 186261) "a") (data (i32.const 186264) "a") (data (i32.const 186267) "a") (data (i32.const 186270) "a") (data (i32.const 186273) "a") (data (i32.const 186276) "a") (data (i32.const 186279) "a") (data (i32.const 186282) "a") (data (i32.const 186285) "a") (data (i32.const 186288) "a") (data (i32.const 186291) "a") (data (i32.const 186294) "a") (data (i32.const 186297) "a") (data (i32.const 186300) "a") (data (i32.const 186303) "a") (data (i32.const 186306) "a") (data (i32.const 186309) "a") (data (i32.const 186312) "a") (data (i32.const 186315) "a") (data (i32.const 186318) "a") (data (i32.const 186321) "a") (data (i32.const 186324) "a") (data (i32.const 186327) "a") (data (i32.const 186330) "a") (data (i32.const 186333) "a") (data (i32.const 186336) "a") (data (i32.const 186339) "a") (data (i32.const 186342) "a") (data (i32.const 186345) "a") (data (i32.const 186348) "a") (data (i32.const 186351) "a") (data (i32.const 186354) "a") (data (i32.const 186357) "a") (data (i32.const 186360) "a") (data (i32.const 186363) "a") (data (i32.const 186366) "a") (data (i32.const 186369) "a") (data (i32.const 186372) "a") (data (i32.const 186375) "a") (data (i32.const 186378) "a") (data (i32.const 186381) "a") (data (i32.const 186384) "a") (data (i32.const 186387) "a") (data (i32.const 186390) "a") (data (i32.const 186393) "a") (data (i32.const 186396) "a") (data (i32.const 186399) "a") (data (i32.const 186402) "a") (data (i32.const 186405) "a") (data (i32.const 186408) "a") (data (i32.const 186411) "a") (data (i32.const 186414) "a") (data (i32.const 186417) "a") (data (i32.const 186420) "a") (data (i32.const 186423) "a") (data (i32.const 186426) "a") (data (i32.const 186429) "a") (data (i32.const 186432) "a") (data (i32.const 186435) "a") (data (i32.const 186438) "a") (data (i32.const 186441) "a") (data (i32.const 186444) "a") (data (i32.const 186447) "a") (data (i32.const 186450) "a") (data (i32.const 186453) "a") (data (i32.const 186456) "a") (data (i32.const 186459) "a") (data (i32.const 186462) "a") (data (i32.const 186465) "a") (data (i32.const 186468) "a") (data (i32.const 186471) "a") (data (i32.const 186474) "a") (data (i32.const 186477) "a") (data (i32.const 186480) "a") (data (i32.const 186483) "a") (data (i32.const 186486) "a") (data (i32.const 186489) "a") (data (i32.const 186492) "a") (data (i32.const 186495) "a") (data (i32.const 186498) "a") (data (i32.const 186501) "a") (data (i32.const 186504) "a") (data (i32.const 186507) "a") (data (i32.const 186510) "a") (data (i32.const 186513) "a") (data (i32.const 186516) "a") (data (i32.const 186519) "a") (data (i32.const 186522) "a") (data (i32.const 186525) "a") (data (i32.const 186528) "a") (data (i32.const 186531) "a") (data (i32.const 186534) "a") (data (i32.const 186537) "a") (data (i32.const 186540) "a") (data (i32.const 186543) "a") (data (i32.const 186546) "a") (data (i32.const 186549) "a") (data (i32.const 186552) "a") (data (i32.const 186555) "a") (data (i32.const 186558) "a") (data (i32.const 186561) "a") (data (i32.const 186564) "a") (data (i32.const 186567) "a") (data (i32.const 186570) "a") (data (i32.const 186573) "a") (data (i32.const 186576) "a") (data (i32.const 186579) "a") (data (i32.const 186582) "a") (data (i32.const 186585) "a") (data (i32.const 186588) "a") (data (i32.const 186591) "a") (data (i32.const 186594) "a") (data (i32.const 186597) "a") (data (i32.const 186600) "a") (data (i32.const 186603) "a") (data (i32.const 186606) "a") (data (i32.const 186609) "a") (data (i32.const 186612) "a") (data (i32.const 186615) "a") (data (i32.const 186618) "a") (data (i32.const 186621) "a") (data (i32.const 186624) "a") (data (i32.const 186627) "a") (data (i32.const 186630) "a") (data (i32.const 186633) "a") (data (i32.const 186636) "a") (data (i32.const 186639) "a") (data (i32.const 186642) "a") (data (i32.const 186645) "a") (data (i32.const 186648) "a") (data (i32.const 186651) "a") (data (i32.const 186654) "a") (data (i32.const 186657) "a") (data (i32.const 186660) "a") (data (i32.const 186663) "a") (data (i32.const 186666) "a") (data (i32.const 186669) "a") (data (i32.const 186672) "a") (data (i32.const 186675) "a") (data (i32.const 186678) "a") (data (i32.const 186681) "a") (data (i32.const 186684) "a") (data (i32.const 186687) "a") (data (i32.const 186690) "a") (data (i32.const 186693) "a") (data (i32.const 186696) "a") (data (i32.const 186699) "a") (data (i32.const 186702) "a") (data (i32.const 186705) "a") (data (i32.const 186708) "a") (data (i32.const 186711) "a") (data (i32.const 186714) "a") (data (i32.const 186717) "a") (data (i32.const 186720) "a") (data (i32.const 186723) "a") (data (i32.const 186726) "a") (data (i32.const 186729) "a") (data (i32.const 186732) "a") (data (i32.const 186735) "a") (data (i32.const 186738) "a") (data (i32.const 186741) "a") (data (i32.const 186744) "a") (data (i32.const 186747) "a") (data (i32.const 186750) "a") (data (i32.const 186753) "a") (data (i32.const 186756) "a") (data (i32.const 186759) "a") (data (i32.const 186762) "a") (data (i32.const 186765) "a") (data (i32.const 186768) "a") (data (i32.const 186771) "a") (data (i32.const 186774) "a") (data (i32.const 186777) "a") (data (i32.const 186780) "a") (data (i32.const 186783) "a") (data (i32.const 186786) "a") (data (i32.const 186789) "a") (data (i32.const 186792) "a") (data (i32.const 186795) "a") (data (i32.const 186798) "a") (data (i32.const 186801) "a") (data (i32.const 186804) "a") (data (i32.const 186807) "a") (data (i32.const 186810) "a") (data (i32.const 186813) "a") (data (i32.const 186816) "a") (data (i32.const 186819) "a") (data (i32.const 186822) "a") (data (i32.const 186825) "a") (data (i32.const 186828) "a") (data (i32.const 186831) "a") (data (i32.const 186834) "a") (data (i32.const 186837) "a") (data (i32.const 186840) "a") (data (i32.const 186843) "a") (data (i32.const 186846) "a") (data (i32.const 186849) "a") (data (i32.const 186852) "a") (data (i32.const 186855) "a") (data (i32.const 186858) "a") (data (i32.const 186861) "a") (data (i32.const 186864) "a") (data (i32.const 186867) "a") (data (i32.const 186870) "a") (data (i32.const 186873) "a") (data (i32.const 186876) "a") (data (i32.const 186879) "a") (data (i32.const 186882) "a") (data (i32.const 186885) "a") (data (i32.const 186888) "a") (data (i32.const 186891) "a") (data (i32.const 186894) "a") (data (i32.const 186897) "a") (data (i32.const 186900) "a") (data (i32.const 186903) "a") (data (i32.const 186906) "a") (data (i32.const 186909) "a") (data (i32.const 186912) "a") (data (i32.const 186915) "a") (data (i32.const 186918) "a") (data (i32.const 186921) "a") (data (i32.const 186924) "a") (data (i32.const 186927) "a") (data (i32.const 186930) "a") (data (i32.const 186933) "a") (data (i32.const 186936) "a") (data (i32.const 186939) "a") (data (i32.const 186942) "a") (data (i32.const 186945) "a") (data (i32.const 186948) "a") (data (i32.const 186951) "a") (data (i32.const 186954) "a") (data (i32.const 186957) "a") (data (i32.const 186960) "a") (data (i32.const 186963) "a") (data (i32.const 186966) "a") (data (i32.const 186969) "a") (data (i32.const 186972) "a") (data (i32.const 186975) "a") (data (i32.const 186978) "a") (data (i32.const 186981) "a") (data (i32.const 186984) "a") (data (i32.const 186987) "a") (data (i32.const 186990) "a") (data (i32.const 186993) "a") (data (i32.const 186996) "a") (data (i32.const 186999) "a") (data (i32.const 187002) "a") (data (i32.const 187005) "a") (data (i32.const 187008) "a") (data (i32.const 187011) "a") (data (i32.const 187014) "a") (data (i32.const 187017) "a") (data (i32.const 187020) "a") (data (i32.const 187023) "a") (data (i32.const 187026) "a") (data (i32.const 187029) "a") (data (i32.const 187032) "a") (data (i32.const 187035) "a") (data (i32.const 187038) "a") (data (i32.const 187041) "a") (data (i32.const 187044) "a") (data (i32.const 187047) "a") (data (i32.const 187050) "a") (data (i32.const 187053) "a") (data (i32.const 187056) "a") (data (i32.const 187059) "a") (data (i32.const 187062) "a") (data (i32.const 187065) "a") (data (i32.const 187068) "a") (data (i32.const 187071) "a") (data (i32.const 187074) "a") (data (i32.const 187077) "a") (data (i32.const 187080) "a") (data (i32.const 187083) "a") (data (i32.const 187086) "a") (data (i32.const 187089) "a") (data (i32.const 187092) "a") (data (i32.const 187095) "a") (data (i32.const 187098) "a") (data (i32.const 187101) "a") (data (i32.const 187104) "a") (data (i32.const 187107) "a") (data (i32.const 187110) "a") (data (i32.const 187113) "a") (data (i32.const 187116) "a") (data (i32.const 187119) "a") (data (i32.const 187122) "a") (data (i32.const 187125) "a") (data (i32.const 187128) "a") (data (i32.const 187131) "a") (data (i32.const 187134) "a") (data (i32.const 187137) "a") (data (i32.const 187140) "a") (data (i32.const 187143) "a") (data (i32.const 187146) "a") (data (i32.const 187149) "a") (data (i32.const 187152) "a") (data (i32.const 187155) "a") (data (i32.const 187158) "a") (data (i32.const 187161) "a") (data (i32.const 187164) "a") (data (i32.const 187167) "a") (data (i32.const 187170) "a") (data (i32.const 187173) "a") (data (i32.const 187176) "a") (data (i32.const 187179) "a") (data (i32.const 187182) "a") (data (i32.const 187185) "a") (data (i32.const 187188) "a") (data (i32.const 187191) "a") (data (i32.const 187194) "a") (data (i32.const 187197) "a") (data (i32.const 187200) "a") (data (i32.const 187203) "a") (data (i32.const 187206) "a") (data (i32.const 187209) "a") (data (i32.const 187212) "a") (data (i32.const 187215) "a") (data (i32.const 187218) "a") (data (i32.const 187221) "a") (data (i32.const 187224) "a") (data (i32.const 187227) "a") (data (i32.const 187230) "a") (data (i32.const 187233) "a") (data (i32.const 187236) "a") (data (i32.const 187239) "a") (data (i32.const 187242) "a") (data (i32.const 187245) "a") (data (i32.const 187248) "a") (data (i32.const 187251) "a") (data (i32.const 187254) "a") (data (i32.const 187257) "a") (data (i32.const 187260) "a") (data (i32.const 187263) "a") (data (i32.const 187266) "a") (data (i32.const 187269) "a") (data (i32.const 187272) "a") (data (i32.const 187275) "a") (data (i32.const 187278) "a") (data (i32.const 187281) "a") (data (i32.const 187284) "a") (data (i32.const 187287) "a") (data (i32.const 187290) "a") (data (i32.const 187293) "a") (data (i32.const 187296) "a") (data (i32.const 187299) "a") (data (i32.const 187302) "a") (data (i32.const 187305) "a") (data (i32.const 187308) "a") (data (i32.const 187311) "a") (data (i32.const 187314) "a") (data (i32.const 187317) "a") (data (i32.const 187320) "a") (data (i32.const 187323) "a") (data (i32.const 187326) "a") (data (i32.const 187329) "a") (data (i32.const 187332) "a") (data (i32.const 187335) "a") (data (i32.const 187338) "a") (data (i32.const 187341) "a") (data (i32.const 187344) "a") (data (i32.const 187347) "a") (data (i32.const 187350) "a") (data (i32.const 187353) "a") (data (i32.const 187356) "a") (data (i32.const 187359) "a") (data (i32.const 187362) "a") (data (i32.const 187365) "a") (data (i32.const 187368) "a") (data (i32.const 187371) "a") (data (i32.const 187374) "a") (data (i32.const 187377) "a") (data (i32.const 187380) "a") (data (i32.const 187383) "a") (data (i32.const 187386) "a") (data (i32.const 187389) "a") (data (i32.const 187392) "a") (data (i32.const 187395) "a") (data (i32.const 187398) "a") (data (i32.const 187401) "a") (data (i32.const 187404) "a") (data (i32.const 187407) "a") (data (i32.const 187410) "a") (data (i32.const 187413) "a") (data (i32.const 187416) "a") (data (i32.const 187419) "a") (data (i32.const 187422) "a") (data (i32.const 187425) "a") (data (i32.const 187428) "a") (data (i32.const 187431) "a") (data (i32.const 187434) "a") (data (i32.const 187437) "a") (data (i32.const 187440) "a") (data (i32.const 187443) "a") (data (i32.const 187446) "a") (data (i32.const 187449) "a") (data (i32.const 187452) "a") (data (i32.const 187455) "a") (data (i32.const 187458) "a") (data (i32.const 187461) "a") (data (i32.const 187464) "a") (data (i32.const 187467) "a") (data (i32.const 187470) "a") (data (i32.const 187473) "a") (data (i32.const 187476) "a") (data (i32.const 187479) "a") (data (i32.const 187482) "a") (data (i32.const 187485) "a") (data (i32.const 187488) "a") (data (i32.const 187491) "a") (data (i32.const 187494) "a") (data (i32.const 187497) "a") (data (i32.const 187500) "a") (data (i32.const 187503) "a") (data (i32.const 187506) "a") (data (i32.const 187509) "a") (data (i32.const 187512) "a") (data (i32.const 187515) "a") (data (i32.const 187518) "a") (data (i32.const 187521) "a") (data (i32.const 187524) "a") (data (i32.const 187527) "a") (data (i32.const 187530) "a") (data (i32.const 187533) "a") (data (i32.const 187536) "a") (data (i32.const 187539) "a") (data (i32.const 187542) "a") (data (i32.const 187545) "a") (data (i32.const 187548) "a") (data (i32.const 187551) "a") (data (i32.const 187554) "a") (data (i32.const 187557) "a") (data (i32.const 187560) "a") (data (i32.const 187563) "a") (data (i32.const 187566) "a") (data (i32.const 187569) "a") (data (i32.const 187572) "a") (data (i32.const 187575) "a") (data (i32.const 187578) "a") (data (i32.const 187581) "a") (data (i32.const 187584) "a") (data (i32.const 187587) "a") (data (i32.const 187590) "a") (data (i32.const 187593) "a") (data (i32.const 187596) "a") (data (i32.const 187599) "a") (data (i32.const 187602) "a") (data (i32.const 187605) "a") (data (i32.const 187608) "a") (data (i32.const 187611) "a") (data (i32.const 187614) "a") (data (i32.const 187617) "a") (data (i32.const 187620) "a") (data (i32.const 187623) "a") (data (i32.const 187626) "a") (data (i32.const 187629) "a") (data (i32.const 187632) "a") (data (i32.const 187635) "a") (data (i32.const 187638) "a") (data (i32.const 187641) "a") (data (i32.const 187644) "a") (data (i32.const 187647) "a") (data (i32.const 187650) "a") (data (i32.const 187653) "a") (data (i32.const 187656) "a") (data (i32.const 187659) "a") (data (i32.const 187662) "a") (data (i32.const 187665) "a") (data (i32.const 187668) "a") (data (i32.const 187671) "a") (data (i32.const 187674) "a") (data (i32.const 187677) "a") (data (i32.const 187680) "a") (data (i32.const 187683) "a") (data (i32.const 187686) "a") (data (i32.const 187689) "a") (data (i32.const 187692) "a") (data (i32.const 187695) "a") (data (i32.const 187698) "a") (data (i32.const 187701) "a") (data (i32.const 187704) "a") (data (i32.const 187707) "a") (data (i32.const 187710) "a") (data (i32.const 187713) "a") (data (i32.const 187716) "a") (data (i32.const 187719) "a") (data (i32.const 187722) "a") (data (i32.const 187725) "a") (data (i32.const 187728) "a") (data (i32.const 187731) "a") (data (i32.const 187734) "a") (data (i32.const 187737) "a") (data (i32.const 187740) "a") (data (i32.const 187743) "a") (data (i32.const 187746) "a") (data (i32.const 187749) "a") (data (i32.const 187752) "a") (data (i32.const 187755) "a") (data (i32.const 187758) "a") (data (i32.const 187761) "a") (data (i32.const 187764) "a") (data (i32.const 187767) "a") (data (i32.const 187770) "a") (data (i32.const 187773) "a") (data (i32.const 187776) "a") (data (i32.const 187779) "a") (data (i32.const 187782) "a") (data (i32.const 187785) "a") (data (i32.const 187788) "a") (data (i32.const 187791) "a") (data (i32.const 187794) "a") (data (i32.const 187797) "a") (data (i32.const 187800) "a") (data (i32.const 187803) "a") (data (i32.const 187806) "a") (data (i32.const 187809) "a") (data (i32.const 187812) "a") (data (i32.const 187815) "a") (data (i32.const 187818) "a") (data (i32.const 187821) "a") (data (i32.const 187824) "a") (data (i32.const 187827) "a") (data (i32.const 187830) "a") (data (i32.const 187833) "a") (data (i32.const 187836) "a") (data (i32.const 187839) "a") (data (i32.const 187842) "a") (data (i32.const 187845) "a") (data (i32.const 187848) "a") (data (i32.const 187851) "a") (data (i32.const 187854) "a") (data (i32.const 187857) "a") (data (i32.const 187860) "a") (data (i32.const 187863) "a") (data (i32.const 187866) "a") (data (i32.const 187869) "a") (data (i32.const 187872) "a") (data (i32.const 187875) "a") (data (i32.const 187878) "a") (data (i32.const 187881) "a") (data (i32.const 187884) "a") (data (i32.const 187887) "a") (data (i32.const 187890) "a") (data (i32.const 187893) "a") (data (i32.const 187896) "a") (data (i32.const 187899) "a") (data (i32.const 187902) "a") (data (i32.const 187905) "a") (data (i32.const 187908) "a") (data (i32.const 187911) "a") (data (i32.const 187914) "a") (data (i32.const 187917) "a") (data (i32.const 187920) "a") (data (i32.const 187923) "a") (data (i32.const 187926) "a") (data (i32.const 187929) "a") (data (i32.const 187932) "a") (data (i32.const 187935) "a") (data (i32.const 187938) "a") (data (i32.const 187941) "a") (data (i32.const 187944) "a") (data (i32.const 187947) "a") (data (i32.const 187950) "a") (data (i32.const 187953) "a") (data (i32.const 187956) "a") (data (i32.const 187959) "a") (data (i32.const 187962) "a") (data (i32.const 187965) "a") (data (i32.const 187968) "a") (data (i32.const 187971) "a") (data (i32.const 187974) "a") (data (i32.const 187977) "a") (data (i32.const 187980) "a") (data (i32.const 187983) "a") (data (i32.const 187986) "a") (data (i32.const 187989) "a") (data (i32.const 187992) "a") (data (i32.const 187995) "a") (data (i32.const 187998) "a") (data (i32.const 188001) "a") (data (i32.const 188004) "a") (data (i32.const 188007) "a") (data (i32.const 188010) "a") (data (i32.const 188013) "a") (data (i32.const 188016) "a") (data (i32.const 188019) "a") (data (i32.const 188022) "a") (data (i32.const 188025) "a") (data (i32.const 188028) "a") (data (i32.const 188031) "a") (data (i32.const 188034) "a") (data (i32.const 188037) "a") (data (i32.const 188040) "a") (data (i32.const 188043) "a") (data (i32.const 188046) "a") (data (i32.const 188049) "a") (data (i32.const 188052) "a") (data (i32.const 188055) "a") (data (i32.const 188058) "a") (data (i32.const 188061) "a") (data (i32.const 188064) "a") (data (i32.const 188067) "a") (data (i32.const 188070) "a") (data (i32.const 188073) "a") (data (i32.const 188076) "a") (data (i32.const 188079) "a") (data (i32.const 188082) "a") (data (i32.const 188085) "a") (data (i32.const 188088) "a") (data (i32.const 188091) "a") (data (i32.const 188094) "a") (data (i32.const 188097) "a") (data (i32.const 188100) "a") (data (i32.const 188103) "a") (data (i32.const 188106) "a") (data (i32.const 188109) "a") (data (i32.const 188112) "a") (data (i32.const 188115) "a") (data (i32.const 188118) "a") (data (i32.const 188121) "a") (data (i32.const 188124) "a") (data (i32.const 188127) "a") (data (i32.const 188130) "a") (data (i32.const 188133) "a") (data (i32.const 188136) "a") (data (i32.const 188139) "a") (data (i32.const 188142) "a") (data (i32.const 188145) "a") (data (i32.const 188148) "a") (data (i32.const 188151) "a") (data (i32.const 188154) "a") (data (i32.const 188157) "a") (data (i32.const 188160) "a") (data (i32.const 188163) "a") (data (i32.const 188166) "a") (data (i32.const 188169) "a") (data (i32.const 188172) "a") (data (i32.const 188175) "a") (data (i32.const 188178) "a") (data (i32.const 188181) "a") (data (i32.const 188184) "a") (data (i32.const 188187) "a") (data (i32.const 188190) "a") (data (i32.const 188193) "a") (data (i32.const 188196) "a") (data (i32.const 188199) "a") (data (i32.const 188202) "a") (data (i32.const 188205) "a") (data (i32.const 188208) "a") (data (i32.const 188211) "a") (data (i32.const 188214) "a") (data (i32.const 188217) "a") (data (i32.const 188220) "a") (data (i32.const 188223) "a") (data (i32.const 188226) "a") (data (i32.const 188229) "a") (data (i32.const 188232) "a") (data (i32.const 188235) "a") (data (i32.const 188238) "a") (data (i32.const 188241) "a") (data (i32.const 188244) "a") (data (i32.const 188247) "a") (data (i32.const 188250) "a") (data (i32.const 188253) "a") (data (i32.const 188256) "a") (data (i32.const 188259) "a") (data (i32.const 188262) "a") (data (i32.const 188265) "a") (data (i32.const 188268) "a") (data (i32.const 188271) "a") (data (i32.const 188274) "a") (data (i32.const 188277) "a") (data (i32.const 188280) "a") (data (i32.const 188283) "a") (data (i32.const 188286) "a") (data (i32.const 188289) "a") (data (i32.const 188292) "a") (data (i32.const 188295) "a") (data (i32.const 188298) "a") (data (i32.const 188301) "a") (data (i32.const 188304) "a") (data (i32.const 188307) "a") (data (i32.const 188310) "a") (data (i32.const 188313) "a") (data (i32.const 188316) "a") (data (i32.const 188319) "a") (data (i32.const 188322) "a") (data (i32.const 188325) "a") (data (i32.const 188328) "a") (data (i32.const 188331) "a") (data (i32.const 188334) "a") (data (i32.const 188337) "a") (data (i32.const 188340) "a") (data (i32.const 188343) "a") (data (i32.const 188346) "a") (data (i32.const 188349) "a") (data (i32.const 188352) "a") (data (i32.const 188355) "a") (data (i32.const 188358) "a") (data (i32.const 188361) "a") (data (i32.const 188364) "a") (data (i32.const 188367) "a") (data (i32.const 188370) "a") (data (i32.const 188373) "a") (data (i32.const 188376) "a") (data (i32.const 188379) "a") (data (i32.const 188382) "a") (data (i32.const 188385) "a") (data (i32.const 188388) "a") (data (i32.const 188391) "a") (data (i32.const 188394) "a") (data (i32.const 188397) "a") (data (i32.const 188400) "a") (data (i32.const 188403) "a") (data (i32.const 188406) "a") (data (i32.const 188409) "a") (data (i32.const 188412) "a") (data (i32.const 188415) "a") (data (i32.const 188418) "a") (data (i32.const 188421) "a") (data (i32.const 188424) "a") (data (i32.const 188427) "a") (data (i32.const 188430) "a") (data (i32.const 188433) "a") (data (i32.const 188436) "a") (data (i32.const 188439) "a") (data (i32.const 188442) "a") (data (i32.const 188445) "a") (data (i32.const 188448) "a") (data (i32.const 188451) "a") (data (i32.const 188454) "a") (data (i32.const 188457) "a") (data (i32.const 188460) "a") (data (i32.const 188463) "a") (data (i32.const 188466) "a") (data (i32.const 188469) "a") (data (i32.const 188472) "a") (data (i32.const 188475) "a") (data (i32.const 188478) "a") (data (i32.const 188481) "a") (data (i32.const 188484) "a") (data (i32.const 188487) "a") (data (i32.const 188490) "a") (data (i32.const 188493) "a") (data (i32.const 188496) "a") (data (i32.const 188499) "a") (data (i32.const 188502) "a") (data (i32.const 188505) "a") (data (i32.const 188508) "a") (data (i32.const 188511) "a") (data (i32.const 188514) "a") (data (i32.const 188517) "a") (data (i32.const 188520) "a") (data (i32.const 188523) "a") (data (i32.const 188526) "a") (data (i32.const 188529) "a") (data (i32.const 188532) "a") (data (i32.const 188535) "a") (data (i32.const 188538) "a") (data (i32.const 188541) "a") (data (i32.const 188544) "a") (data (i32.const 188547) "a") (data (i32.const 188550) "a") (data (i32.const 188553) "a") (data (i32.const 188556) "a") (data (i32.const 188559) "a") (data (i32.const 188562) "a") (data (i32.const 188565) "a") (data (i32.const 188568) "a") (data (i32.const 188571) "a") (data (i32.const 188574) "a") (data (i32.const 188577) "a") (data (i32.const 188580) "a") (data (i32.const 188583) "a") (data (i32.const 188586) "a") (data (i32.const 188589) "a") (data (i32.const 188592) "a") (data (i32.const 188595) "a") (data (i32.const 188598) "a") (data (i32.const 188601) "a") (data (i32.const 188604) "a") (data (i32.const 188607) "a") (data (i32.const 188610) "a") (data (i32.const 188613) "a") (data (i32.const 188616) "a") (data (i32.const 188619) "a") (data (i32.const 188622) "a") (data (i32.const 188625) "a") (data (i32.const 188628) "a") (data (i32.const 188631) "a") (data (i32.const 188634) "a") (data (i32.const 188637) "a") (data (i32.const 188640) "a") (data (i32.const 188643) "a") (data (i32.const 188646) "a") (data (i32.const 188649) "a") (data (i32.const 188652) "a") (data (i32.const 188655) "a") (data (i32.const 188658) "a") (data (i32.const 188661) "a") (data (i32.const 188664) "a") (data (i32.const 188667) "a") (data (i32.const 188670) "a") (data (i32.const 188673) "a") (data (i32.const 188676) "a") (data (i32.const 188679) "a") (data (i32.const 188682) "a") (data (i32.const 188685) "a") (data (i32.const 188688) "a") (data (i32.const 188691) "a") (data (i32.const 188694) "a") (data (i32.const 188697) "a") (data (i32.const 188700) "a") (data (i32.const 188703) "a") (data (i32.const 188706) "a") (data (i32.const 188709) "a") (data (i32.const 188712) "a") (data (i32.const 188715) "a") (data (i32.const 188718) "a") (data (i32.const 188721) "a") (data (i32.const 188724) "a") (data (i32.const 188727) "a") (data (i32.const 188730) "a") (data (i32.const 188733) "a") (data (i32.const 188736) "a") (data (i32.const 188739) "a") (data (i32.const 188742) "a") (data (i32.const 188745) "a") (data (i32.const 188748) "a") (data (i32.const 188751) "a") (data (i32.const 188754) "a") (data (i32.const 188757) "a") (data (i32.const 188760) "a") (data (i32.const 188763) "a") (data (i32.const 188766) "a") (data (i32.const 188769) "a") (data (i32.const 188772) "a") (data (i32.const 188775) "a") (data (i32.const 188778) "a") (data (i32.const 188781) "a") (data (i32.const 188784) "a") (data (i32.const 188787) "a") (data (i32.const 188790) "a") (data (i32.const 188793) "a") (data (i32.const 188796) "a") (data (i32.const 188799) "a") (data (i32.const 188802) "a") (data (i32.const 188805) "a") (data (i32.const 188808) "a") (data (i32.const 188811) "a") (data (i32.const 188814) "a") (data (i32.const 188817) "a") (data (i32.const 188820) "a") (data (i32.const 188823) "a") (data (i32.const 188826) "a") (data (i32.const 188829) "a") (data (i32.const 188832) "a") (data (i32.const 188835) "a") (data (i32.const 188838) "a") (data (i32.const 188841) "a") (data (i32.const 188844) "a") (data (i32.const 188847) "a") (data (i32.const 188850) "a") (data (i32.const 188853) "a") (data (i32.const 188856) "a") (data (i32.const 188859) "a") (data (i32.const 188862) "a") (data (i32.const 188865) "a") (data (i32.const 188868) "a") (data (i32.const 188871) "a") (data (i32.const 188874) "a") (data (i32.const 188877) "a") (data (i32.const 188880) "a") (data (i32.const 188883) "a") (data (i32.const 188886) "a") (data (i32.const 188889) "a") (data (i32.const 188892) "a") (data (i32.const 188895) "a") (data (i32.const 188898) "a") (data (i32.const 188901) "a") (data (i32.const 188904) "a") (data (i32.const 188907) "a") (data (i32.const 188910) "a") (data (i32.const 188913) "a") (data (i32.const 188916) "a") (data (i32.const 188919) "a") (data (i32.const 188922) "a") (data (i32.const 188925) "a") (data (i32.const 188928) "a") (data (i32.const 188931) "a") (data (i32.const 188934) "a") (data (i32.const 188937) "a") (data (i32.const 188940) "a") (data (i32.const 188943) "a") (data (i32.const 188946) "a") (data (i32.const 188949) "a") (data (i32.const 188952) "a") (data (i32.const 188955) "a") (data (i32.const 188958) "a") (data (i32.const 188961) "a") (data (i32.const 188964) "a") (data (i32.const 188967) "a") (data (i32.const 188970) "a") (data (i32.const 188973) "a") (data (i32.const 188976) "a") (data (i32.const 188979) "a") (data (i32.const 188982) "a") (data (i32.const 188985) "a") (data (i32.const 188988) "a") (data (i32.const 188991) "a") (data (i32.const 188994) "a") (data (i32.const 188997) "a") (data (i32.const 189000) "a") (data (i32.const 189003) "a") (data (i32.const 189006) "a") (data (i32.const 189009) "a") (data (i32.const 189012) "a") (data (i32.const 189015) "a") (data (i32.const 189018) "a") (data (i32.const 189021) "a") (data (i32.const 189024) "a") (data (i32.const 189027) "a") (data (i32.const 189030) "a") (data (i32.const 189033) "a") (data (i32.const 189036) "a") (data (i32.const 189039) "a") (data (i32.const 189042) "a") (data (i32.const 189045) "a") (data (i32.const 189048) "a") (data (i32.const 189051) "a") (data (i32.const 189054) "a") (data (i32.const 189057) "a") (data (i32.const 189060) "a") (data (i32.const 189063) "a") (data (i32.const 189066) "a") (data (i32.const 189069) "a") (data (i32.const 189072) "a") (data (i32.const 189075) "a") (data (i32.const 189078) "a") (data (i32.const 189081) "a") (data (i32.const 189084) "a") (data (i32.const 189087) "a") (data (i32.const 189090) "a") (data (i32.const 189093) "a") (data (i32.const 189096) "a") (data (i32.const 189099) "a") (data (i32.const 189102) "a") (data (i32.const 189105) "a") (data (i32.const 189108) "a") (data (i32.const 189111) "a") (data (i32.const 189114) "a") (data (i32.const 189117) "a") (data (i32.const 189120) "a") (data (i32.const 189123) "a") (data (i32.const 189126) "a") (data (i32.const 189129) "a") (data (i32.const 189132) "a") (data (i32.const 189135) "a") (data (i32.const 189138) "a") (data (i32.const 189141) "a") (data (i32.const 189144) "a") (data (i32.const 189147) "a") (data (i32.const 189150) "a") (data (i32.const 189153) "a") (data (i32.const 189156) "a") (data (i32.const 189159) "a") (data (i32.const 189162) "a") (data (i32.const 189165) "a") (data (i32.const 189168) "a") (data (i32.const 189171) "a") (data (i32.const 189174) "a") (data (i32.const 189177) "a") (data (i32.const 189180) "a") (data (i32.const 189183) "a") (data (i32.const 189186) "a") (data (i32.const 189189) "a") (data (i32.const 189192) "a") (data (i32.const 189195) "a") (data (i32.const 189198) "a") (data (i32.const 189201) "a") (data (i32.const 189204) "a") (data (i32.const 189207) "a") (data (i32.const 189210) "a") (data (i32.const 189213) "a") (data (i32.const 189216) "a") (data (i32.const 189219) "a") (data (i32.const 189222) "a") (data (i32.const 189225) "a") (data (i32.const 189228) "a") (data (i32.const 189231) "a") (data (i32.const 189234) "a") (data (i32.const 189237) "a") (data (i32.const 189240) "a") (data (i32.const 189243) "a") (data (i32.const 189246) "a") (data (i32.const 189249) "a") (data (i32.const 189252) "a") (data (i32.const 189255) "a") (data (i32.const 189258) "a") (data (i32.const 189261) "a") (data (i32.const 189264) "a") (data (i32.const 189267) "a") (data (i32.const 189270) "a") (data (i32.const 189273) "a") (data (i32.const 189276) "a") (data (i32.const 189279) "a") (data (i32.const 189282) "a") (data (i32.const 189285) "a") (data (i32.const 189288) "a") (data (i32.const 189291) "a") (data (i32.const 189294) "a") (data (i32.const 189297) "a") (data (i32.const 189300) "a") (data (i32.const 189303) "a") (data (i32.const 189306) "a") (data (i32.const 189309) "a") (data (i32.const 189312) "a") (data (i32.const 189315) "a") (data (i32.const 189318) "a") (data (i32.const 189321) "a") (data (i32.const 189324) "a") (data (i32.const 189327) "a") (data (i32.const 189330) "a") (data (i32.const 189333) "a") (data (i32.const 189336) "a") (data (i32.const 189339) "a") (data (i32.const 189342) "a") (data (i32.const 189345) "a") (data (i32.const 189348) "a") (data (i32.const 189351) "a") (data (i32.const 189354) "a") (data (i32.const 189357) "a") (data (i32.const 189360) "a") (data (i32.const 189363) "a") (data (i32.const 189366) "a") (data (i32.const 189369) "a") (data (i32.const 189372) "a") (data (i32.const 189375) "a") (data (i32.const 189378) "a") (data (i32.const 189381) "a") (data (i32.const 189384) "a") (data (i32.const 189387) "a") (data (i32.const 189390) "a") (data (i32.const 189393) "a") (data (i32.const 189396) "a") (data (i32.const 189399) "a") (data (i32.const 189402) "a") (data (i32.const 189405) "a") (data (i32.const 189408) "a") (data (i32.const 189411) "a") (data (i32.const 189414) "a") (data (i32.const 189417) "a") (data (i32.const 189420) "a") (data (i32.const 189423) "a") (data (i32.const 189426) "a") (data (i32.const 189429) "a") (data (i32.const 189432) "a") (data (i32.const 189435) "a") (data (i32.const 189438) "a") (data (i32.const 189441) "a") (data (i32.const 189444) "a") (data (i32.const 189447) "a") (data (i32.const 189450) "a") (data (i32.const 189453) "a") (data (i32.const 189456) "a") (data (i32.const 189459) "a") (data (i32.const 189462) "a") (data (i32.const 189465) "a") (data (i32.const 189468) "a") (data (i32.const 189471) "a") (data (i32.const 189474) "a") (data (i32.const 189477) "a") (data (i32.const 189480) "a") (data (i32.const 189483) "a") (data (i32.const 189486) "a") (data (i32.const 189489) "a") (data (i32.const 189492) "a") (data (i32.const 189495) "a") (data (i32.const 189498) "a") (data (i32.const 189501) "a") (data (i32.const 189504) "a") (data (i32.const 189507) "a") (data (i32.const 189510) "a") (data (i32.const 189513) "a") (data (i32.const 189516) "a") (data (i32.const 189519) "a") (data (i32.const 189522) "a") (data (i32.const 189525) "a") (data (i32.const 189528) "a") (data (i32.const 189531) "a") (data (i32.const 189534) "a") (data (i32.const 189537) "a") (data (i32.const 189540) "a") (data (i32.const 189543) "a") (data (i32.const 189546) "a") (data (i32.const 189549) "a") (data (i32.const 189552) "a") (data (i32.const 189555) "a") (data (i32.const 189558) "a") (data (i32.const 189561) "a") (data (i32.const 189564) "a") (data (i32.const 189567) "a") (data (i32.const 189570) "a") (data (i32.const 189573) "a") (data (i32.const 189576) "a") (data (i32.const 189579) "a") (data (i32.const 189582) "a") (data (i32.const 189585) "a") (data (i32.const 189588) "a") (data (i32.const 189591) "a") (data (i32.const 189594) "a") (data (i32.const 189597) "a") (data (i32.const 189600) "a") (data (i32.const 189603) "a") (data (i32.const 189606) "a") (data (i32.const 189609) "a") (data (i32.const 189612) "a") (data (i32.const 189615) "a") (data (i32.const 189618) "a") (data (i32.const 189621) "a") (data (i32.const 189624) "a") (data (i32.const 189627) "a") (data (i32.const 189630) "a") (data (i32.const 189633) "a") (data (i32.const 189636) "a") (data (i32.const 189639) "a") (data (i32.const 189642) "a") (data (i32.const 189645) "a") (data (i32.const 189648) "a") (data (i32.const 189651) "a") (data (i32.const 189654) "a") (data (i32.const 189657) "a") (data (i32.const 189660) "a") (data (i32.const 189663) "a") (data (i32.const 189666) "a") (data (i32.const 189669) "a") (data (i32.const 189672) "a") (data (i32.const 189675) "a") (data (i32.const 189678) "a") (data (i32.const 189681) "a") (data (i32.const 189684) "a") (data (i32.const 189687) "a") (data (i32.const 189690) "a") (data (i32.const 189693) "a") (data (i32.const 189696) "a") (data (i32.const 189699) "a") (data (i32.const 189702) "a") (data (i32.const 189705) "a") (data (i32.const 189708) "a") (data (i32.const 189711) "a") (data (i32.const 189714) "a") (data (i32.const 189717) "a") (data (i32.const 189720) "a") (data (i32.const 189723) "a") (data (i32.const 189726) "a") (data (i32.const 189729) "a") (data (i32.const 189732) "a") (data (i32.const 189735) "a") (data (i32.const 189738) "a") (data (i32.const 189741) "a") (data (i32.const 189744) "a") (data (i32.const 189747) "a") (data (i32.const 189750) "a") (data (i32.const 189753) "a") (data (i32.const 189756) "a") (data (i32.const 189759) "a") (data (i32.const 189762) "a") (data (i32.const 189765) "a") (data (i32.const 189768) "a") (data (i32.const 189771) "a") (data (i32.const 189774) "a") (data (i32.const 189777) "a") (data (i32.const 189780) "a") (data (i32.const 189783) "a") (data (i32.const 189786) "a") (data (i32.const 189789) "a") (data (i32.const 189792) "a") (data (i32.const 189795) "a") (data (i32.const 189798) "a") (data (i32.const 189801) "a") (data (i32.const 189804) "a") (data (i32.const 189807) "a") (data (i32.const 189810) "a") (data (i32.const 189813) "a") (data (i32.const 189816) "a") (data (i32.const 189819) "a") (data (i32.const 189822) "a") (data (i32.const 189825) "a") (data (i32.const 189828) "a") (data (i32.const 189831) "a") (data (i32.const 189834) "a") (data (i32.const 189837) "a") (data (i32.const 189840) "a") (data (i32.const 189843) "a") (data (i32.const 189846) "a") (data (i32.const 189849) "a") (data (i32.const 189852) "a") (data (i32.const 189855) "a") (data (i32.const 189858) "a") (data (i32.const 189861) "a") (data (i32.const 189864) "a") (data (i32.const 189867) "a") (data (i32.const 189870) "a") (data (i32.const 189873) "a") (data (i32.const 189876) "a") (data (i32.const 189879) "a") (data (i32.const 189882) "a") (data (i32.const 189885) "a") (data (i32.const 189888) "a") (data (i32.const 189891) "a") (data (i32.const 189894) "a") (data (i32.const 189897) "a") (data (i32.const 189900) "a") (data (i32.const 189903) "a") (data (i32.const 189906) "a") (data (i32.const 189909) "a") (data (i32.const 189912) "a") (data (i32.const 189915) "a") (data (i32.const 189918) "a") (data (i32.const 189921) "a") (data (i32.const 189924) "a") (data (i32.const 189927) "a") (data (i32.const 189930) "a") (data (i32.const 189933) "a") (data (i32.const 189936) "a") (data (i32.const 189939) "a") (data (i32.const 189942) "a") (data (i32.const 189945) "a") (data (i32.const 189948) "a") (data (i32.const 189951) "a") (data (i32.const 189954) "a") (data (i32.const 189957) "a") (data (i32.const 189960) "a") (data (i32.const 189963) "a") (data (i32.const 189966) "a") (data (i32.const 189969) "a") (data (i32.const 189972) "a") (data (i32.const 189975) "a") (data (i32.const 189978) "a") (data (i32.const 189981) "a") (data (i32.const 189984) "a") (data (i32.const 189987) "a") (data (i32.const 189990) "a") (data (i32.const 189993) "a") (data (i32.const 189996) "a") (data (i32.const 189999) "a") (data (i32.const 190002) "a") (data (i32.const 190005) "a") (data (i32.const 190008) "a") (data (i32.const 190011) "a") (data (i32.const 190014) "a") (data (i32.const 190017) "a") (data (i32.const 190020) "a") (data (i32.const 190023) "a") (data (i32.const 190026) "a") (data (i32.const 190029) "a") (data (i32.const 190032) "a") (data (i32.const 190035) "a") (data (i32.const 190038) "a") (data (i32.const 190041) "a") (data (i32.const 190044) "a") (data (i32.const 190047) "a") (data (i32.const 190050) "a") (data (i32.const 190053) "a") (data (i32.const 190056) "a") (data (i32.const 190059) "a") (data (i32.const 190062) "a") (data (i32.const 190065) "a") (data (i32.const 190068) "a") (data (i32.const 190071) "a") (data (i32.const 190074) "a") (data (i32.const 190077) "a") (data (i32.const 190080) "a") (data (i32.const 190083) "a") (data (i32.const 190086) "a") (data (i32.const 190089) "a") (data (i32.const 190092) "a") (data (i32.const 190095) "a") (data (i32.const 190098) "a") (data (i32.const 190101) "a") (data (i32.const 190104) "a") (data (i32.const 190107) "a") (data (i32.const 190110) "a") (data (i32.const 190113) "a") (data (i32.const 190116) "a") (data (i32.const 190119) "a") (data (i32.const 190122) "a") (data (i32.const 190125) "a") (data (i32.const 190128) "a") (data (i32.const 190131) "a") (data (i32.const 190134) "a") (data (i32.const 190137) "a") (data (i32.const 190140) "a") (data (i32.const 190143) "a") (data (i32.const 190146) "a") (data (i32.const 190149) "a") (data (i32.const 190152) "a") (data (i32.const 190155) "a") (data (i32.const 190158) "a") (data (i32.const 190161) "a") (data (i32.const 190164) "a") (data (i32.const 190167) "a") (data (i32.const 190170) "a") (data (i32.const 190173) "a") (data (i32.const 190176) "a") (data (i32.const 190179) "a") (data (i32.const 190182) "a") (data (i32.const 190185) "a") (data (i32.const 190188) "a") (data (i32.const 190191) "a") (data (i32.const 190194) "a") (data (i32.const 190197) "a") (data (i32.const 190200) "a") (data (i32.const 190203) "a") (data (i32.const 190206) "a") (data (i32.const 190209) "a") (data (i32.const 190212) "a") (data (i32.const 190215) "a") (data (i32.const 190218) "a") (data (i32.const 190221) "a") (data (i32.const 190224) "a") (data (i32.const 190227) "a") (data (i32.const 190230) "a") (data (i32.const 190233) "a") (data (i32.const 190236) "a") (data (i32.const 190239) "a") (data (i32.const 190242) "a") (data (i32.const 190245) "a") (data (i32.const 190248) "a") (data (i32.const 190251) "a") (data (i32.const 190254) "a") (data (i32.const 190257) "a") (data (i32.const 190260) "a") (data (i32.const 190263) "a") (data (i32.const 190266) "a") (data (i32.const 190269) "a") (data (i32.const 190272) "a") (data (i32.const 190275) "a") (data (i32.const 190278) "a") (data (i32.const 190281) "a") (data (i32.const 190284) "a") (data (i32.const 190287) "a") (data (i32.const 190290) "a") (data (i32.const 190293) "a") (data (i32.const 190296) "a") (data (i32.const 190299) "a") (data (i32.const 190302) "a") (data (i32.const 190305) "a") (data (i32.const 190308) "a") (data (i32.const 190311) "a") (data (i32.const 190314) "a") (data (i32.const 190317) "a") (data (i32.const 190320) "a") (data (i32.const 190323) "a") (data (i32.const 190326) "a") (data (i32.const 190329) "a") (data (i32.const 190332) "a") (data (i32.const 190335) "a") (data (i32.const 190338) "a") (data (i32.const 190341) "a") (data (i32.const 190344) "a") (data (i32.const 190347) "a") (data (i32.const 190350) "a") (data (i32.const 190353) "a") (data (i32.const 190356) "a") (data (i32.const 190359) "a") (data (i32.const 190362) "a") (data (i32.const 190365) "a") (data (i32.const 190368) "a") (data (i32.const 190371) "a") (data (i32.const 190374) "a") (data (i32.const 190377) "a") (data (i32.const 190380) "a") (data (i32.const 190383) "a") (data (i32.const 190386) "a") (data (i32.const 190389) "a") (data (i32.const 190392) "a") (data (i32.const 190395) "a") (data (i32.const 190398) "a") (data (i32.const 190401) "a") (data (i32.const 190404) "a") (data (i32.const 190407) "a") (data (i32.const 190410) "a") (data (i32.const 190413) "a") (data (i32.const 190416) "a") (data (i32.const 190419) "a") (data (i32.const 190422) "a") (data (i32.const 190425) "a") (data (i32.const 190428) "a") (data (i32.const 190431) "a") (data (i32.const 190434) "a") (data (i32.const 190437) "a") (data (i32.const 190440) "a") (data (i32.const 190443) "a") (data (i32.const 190446) "a") (data (i32.const 190449) "a") (data (i32.const 190452) "a") (data (i32.const 190455) "a") (data (i32.const 190458) "a") (data (i32.const 190461) "a") (data (i32.const 190464) "a") (data (i32.const 190467) "a") (data (i32.const 190470) "a") (data (i32.const 190473) "a") (data (i32.const 190476) "a") (data (i32.const 190479) "a") (data (i32.const 190482) "a") (data (i32.const 190485) "a") (data (i32.const 190488) "a") (data (i32.const 190491) "a") (data (i32.const 190494) "a") (data (i32.const 190497) "a") (data (i32.const 190500) "a") (data (i32.const 190503) "a") (data (i32.const 190506) "a") (data (i32.const 190509) "a") (data (i32.const 190512) "a") (data (i32.const 190515) "a") (data (i32.const 190518) "a") (data (i32.const 190521) "a") (data (i32.const 190524) "a") (data (i32.const 190527) "a") (data (i32.const 190530) "a") (data (i32.const 190533) "a") (data (i32.const 190536) "a") (data (i32.const 190539) "a") (data (i32.const 190542) "a") (data (i32.const 190545) "a") (data (i32.const 190548) "a") (data (i32.const 190551) "a") (data (i32.const 190554) "a") (data (i32.const 190557) "a") (data (i32.const 190560) "a") (data (i32.const 190563) "a") (data (i32.const 190566) "a") (data (i32.const 190569) "a") (data (i32.const 190572) "a") (data (i32.const 190575) "a") (data (i32.const 190578) "a") (data (i32.const 190581) "a") (data (i32.const 190584) "a") (data (i32.const 190587) "a") (data (i32.const 190590) "a") (data (i32.const 190593) "a") (data (i32.const 190596) "a") (data (i32.const 190599) "a") (data (i32.const 190602) "a") (data (i32.const 190605) "a") (data (i32.const 190608) "a") (data (i32.const 190611) "a") (data (i32.const 190614) "a") (data (i32.const 190617) "a") (data (i32.const 190620) "a") (data (i32.const 190623) "a") (data (i32.const 190626) "a") (data (i32.const 190629) "a") (data (i32.const 190632) "a") (data (i32.const 190635) "a") (data (i32.const 190638) "a") (data (i32.const 190641) "a") (data (i32.const 190644) "a") (data (i32.const 190647) "a") (data (i32.const 190650) "a") (data (i32.const 190653) "a") (data (i32.const 190656) "a") (data (i32.const 190659) "a") (data (i32.const 190662) "a") (data (i32.const 190665) "a") (data (i32.const 190668) "a") (data (i32.const 190671) "a") (data (i32.const 190674) "a") (data (i32.const 190677) "a") (data (i32.const 190680) "a") (data (i32.const 190683) "a") (data (i32.const 190686) "a") (data (i32.const 190689) "a") (data (i32.const 190692) "a") (data (i32.const 190695) "a") (data (i32.const 190698) "a") (data (i32.const 190701) "a") (data (i32.const 190704) "a") (data (i32.const 190707) "a") (data (i32.const 190710) "a") (data (i32.const 190713) "a") (data (i32.const 190716) "a") (data (i32.const 190719) "a") (data (i32.const 190722) "a") (data (i32.const 190725) "a") (data (i32.const 190728) "a") (data (i32.const 190731) "a") (data (i32.const 190734) "a") (data (i32.const 190737) "a") (data (i32.const 190740) "a") (data (i32.const 190743) "a") (data (i32.const 190746) "a") (data (i32.const 190749) "a") (data (i32.const 190752) "a") (data (i32.const 190755) "a") (data (i32.const 190758) "a") (data (i32.const 190761) "a") (data (i32.const 190764) "a") (data (i32.const 190767) "a") (data (i32.const 190770) "a") (data (i32.const 190773) "a") (data (i32.const 190776) "a") (data (i32.const 190779) "a") (data (i32.const 190782) "a") (data (i32.const 190785) "a") (data (i32.const 190788) "a") (data (i32.const 190791) "a") (data (i32.const 190794) "a") (data (i32.const 190797) "a") (data (i32.const 190800) "a") (data (i32.const 190803) "a") (data (i32.const 190806) "a") (data (i32.const 190809) "a") (data (i32.const 190812) "a") (data (i32.const 190815) "a") (data (i32.const 190818) "a") (data (i32.const 190821) "a") (data (i32.const 190824) "a") (data (i32.const 190827) "a") (data (i32.const 190830) "a") (data (i32.const 190833) "a") (data (i32.const 190836) "a") (data (i32.const 190839) "a") (data (i32.const 190842) "a") (data (i32.const 190845) "a") (data (i32.const 190848) "a") (data (i32.const 190851) "a") (data (i32.const 190854) "a") (data (i32.const 190857) "a") (data (i32.const 190860) "a") (data (i32.const 190863) "a") (data (i32.const 190866) "a") (data (i32.const 190869) "a") (data (i32.const 190872) "a") (data (i32.const 190875) "a") (data (i32.const 190878) "a") (data (i32.const 190881) "a") (data (i32.const 190884) "a") (data (i32.const 190887) "a") (data (i32.const 190890) "a") (data (i32.const 190893) "a") (data (i32.const 190896) "a") (data (i32.const 190899) "a") (data (i32.const 190902) "a") (data (i32.const 190905) "a") (data (i32.const 190908) "a") (data (i32.const 190911) "a") (data (i32.const 190914) "a") (data (i32.const 190917) "a") (data (i32.const 190920) "a") (data (i32.const 190923) "a") (data (i32.const 190926) "a") (data (i32.const 190929) "a") (data (i32.const 190932) "a") (data (i32.const 190935) "a") (data (i32.const 190938) "a") (data (i32.const 190941) "a") (data (i32.const 190944) "a") (data (i32.const 190947) "a") (data (i32.const 190950) "a") (data (i32.const 190953) "a") (data (i32.const 190956) "a") (data (i32.const 190959) "a") (data (i32.const 190962) "a") (data (i32.const 190965) "a") (data (i32.const 190968) "a") (data (i32.const 190971) "a") (data (i32.const 190974) "a") (data (i32.const 190977) "a") (data (i32.const 190980) "a") (data (i32.const 190983) "a") (data (i32.const 190986) "a") (data (i32.const 190989) "a") (data (i32.const 190992) "a") (data (i32.const 190995) "a") (data (i32.const 190998) "a") (data (i32.const 191001) "a") (data (i32.const 191004) "a") (data (i32.const 191007) "a") (data (i32.const 191010) "a") (data (i32.const 191013) "a") (data (i32.const 191016) "a") (data (i32.const 191019) "a") (data (i32.const 191022) "a") (data (i32.const 191025) "a") (data (i32.const 191028) "a") (data (i32.const 191031) "a") (data (i32.const 191034) "a") (data (i32.const 191037) "a") (data (i32.const 191040) "a") (data (i32.const 191043) "a") (data (i32.const 191046) "a") (data (i32.const 191049) "a") (data (i32.const 191052) "a") (data (i32.const 191055) "a") (data (i32.const 191058) "a") (data (i32.const 191061) "a") (data (i32.const 191064) "a") (data (i32.const 191067) "a") (data (i32.const 191070) "a") (data (i32.const 191073) "a") (data (i32.const 191076) "a") (data (i32.const 191079) "a") (data (i32.const 191082) "a") (data (i32.const 191085) "a") (data (i32.const 191088) "a") (data (i32.const 191091) "a") (data (i32.const 191094) "a") (data (i32.const 191097) "a") (data (i32.const 191100) "a") (data (i32.const 191103) "a") (data (i32.const 191106) "a") (data (i32.const 191109) "a") (data (i32.const 191112) "a") (data (i32.const 191115) "a") (data (i32.const 191118) "a") (data (i32.const 191121) "a") (data (i32.const 191124) "a") (data (i32.const 191127) "a") (data (i32.const 191130) "a") (data (i32.const 191133) "a") (data (i32.const 191136) "a") (data (i32.const 191139) "a") (data (i32.const 191142) "a") (data (i32.const 191145) "a") (data (i32.const 191148) "a") (data (i32.const 191151) "a") (data (i32.const 191154) "a") (data (i32.const 191157) "a") (data (i32.const 191160) "a") (data (i32.const 191163) "a") (data (i32.const 191166) "a") (data (i32.const 191169) "a") (data (i32.const 191172) "a") (data (i32.const 191175) "a") (data (i32.const 191178) "a") (data (i32.const 191181) "a") (data (i32.const 191184) "a") (data (i32.const 191187) "a") (data (i32.const 191190) "a") (data (i32.const 191193) "a") (data (i32.const 191196) "a") (data (i32.const 191199) "a") (data (i32.const 191202) "a") (data (i32.const 191205) "a") (data (i32.const 191208) "a") (data (i32.const 191211) "a") (data (i32.const 191214) "a") (data (i32.const 191217) "a") (data (i32.const 191220) "a") (data (i32.const 191223) "a") (data (i32.const 191226) "a") (data (i32.const 191229) "a") (data (i32.const 191232) "a") (data (i32.const 191235) "a") (data (i32.const 191238) "a") (data (i32.const 191241) "a") (data (i32.const 191244) "a") (data (i32.const 191247) "a") (data (i32.const 191250) "a") (data (i32.const 191253) "a") (data (i32.const 191256) "a") (data (i32.const 191259) "a") (data (i32.const 191262) "a") (data (i32.const 191265) "a") (data (i32.const 191268) "a") (data (i32.const 191271) "a") (data (i32.const 191274) "a") (data (i32.const 191277) "a") (data (i32.const 191280) "a") (data (i32.const 191283) "a") (data (i32.const 191286) "a") (data (i32.const 191289) "a") (data (i32.const 191292) "a") (data (i32.const 191295) "a") (data (i32.const 191298) "a") (data (i32.const 191301) "a") (data (i32.const 191304) "a") (data (i32.const 191307) "a") (data (i32.const 191310) "a") (data (i32.const 191313) "a") (data (i32.const 191316) "a") (data (i32.const 191319) "a") (data (i32.const 191322) "a") (data (i32.const 191325) "a") (data (i32.const 191328) "a") (data (i32.const 191331) "a") (data (i32.const 191334) "a") (data (i32.const 191337) "a") (data (i32.const 191340) "a") (data (i32.const 191343) "a") (data (i32.const 191346) "a") (data (i32.const 191349) "a") (data (i32.const 191352) "a") (data (i32.const 191355) "a") (data (i32.const 191358) "a") (data (i32.const 191361) "a") (data (i32.const 191364) "a") (data (i32.const 191367) "a") (data (i32.const 191370) "a") (data (i32.const 191373) "a") (data (i32.const 191376) "a") (data (i32.const 191379) "a") (data (i32.const 191382) "a") (data (i32.const 191385) "a") (data (i32.const 191388) "a") (data (i32.const 191391) "a") (data (i32.const 191394) "a") (data (i32.const 191397) "a") (data (i32.const 191400) "a") (data (i32.const 191403) "a") (data (i32.const 191406) "a") (data (i32.const 191409) "a") (data (i32.const 191412) "a") (data (i32.const 191415) "a") (data (i32.const 191418) "a") (data (i32.const 191421) "a") (data (i32.const 191424) "a") (data (i32.const 191427) "a") (data (i32.const 191430) "a") (data (i32.const 191433) "a") (data (i32.const 191436) "a") (data (i32.const 191439) "a") (data (i32.const 191442) "a") (data (i32.const 191445) "a") (data (i32.const 191448) "a") (data (i32.const 191451) "a") (data (i32.const 191454) "a") (data (i32.const 191457) "a") (data (i32.const 191460) "a") (data (i32.const 191463) "a") (data (i32.const 191466) "a") (data (i32.const 191469) "a") (data (i32.const 191472) "a") (data (i32.const 191475) "a") (data (i32.const 191478) "a") (data (i32.const 191481) "a") (data (i32.const 191484) "a") (data (i32.const 191487) "a") (data (i32.const 191490) "a") (data (i32.const 191493) "a") (data (i32.const 191496) "a") (data (i32.const 191499) "a") (data (i32.const 191502) "a") (data (i32.const 191505) "a") (data (i32.const 191508) "a") (data (i32.const 191511) "a") (data (i32.const 191514) "a") (data (i32.const 191517) "a") (data (i32.const 191520) "a") (data (i32.const 191523) "a") (data (i32.const 191526) "a") (data (i32.const 191529) "a") (data (i32.const 191532) "a") (data (i32.const 191535) "a") (data (i32.const 191538) "a") (data (i32.const 191541) "a") (data (i32.const 191544) "a") (data (i32.const 191547) "a") (data (i32.const 191550) "a") (data (i32.const 191553) "a") (data (i32.const 191556) "a") (data (i32.const 191559) "a") (data (i32.const 191562) "a") (data (i32.const 191565) "a") (data (i32.const 191568) "a") (data (i32.const 191571) "a") (data (i32.const 191574) "a") (data (i32.const 191577) "a") (data (i32.const 191580) "a") (data (i32.const 191583) "a") (data (i32.const 191586) "a") (data (i32.const 191589) "a") (data (i32.const 191592) "a") (data (i32.const 191595) "a") (data (i32.const 191598) "a") (data (i32.const 191601) "a") (data (i32.const 191604) "a") (data (i32.const 191607) "a") (data (i32.const 191610) "a") (data (i32.const 191613) "a") (data (i32.const 191616) "a") (data (i32.const 191619) "a") (data (i32.const 191622) "a") (data (i32.const 191625) "a") (data (i32.const 191628) "a") (data (i32.const 191631) "a") (data (i32.const 191634) "a") (data (i32.const 191637) "a") (data (i32.const 191640) "a") (data (i32.const 191643) "a") (data (i32.const 191646) "a") (data (i32.const 191649) "a") (data (i32.const 191652) "a") (data (i32.const 191655) "a") (data (i32.const 191658) "a") (data (i32.const 191661) "a") (data (i32.const 191664) "a") (data (i32.const 191667) "a") (data (i32.const 191670) "a") (data (i32.const 191673) "a") (data (i32.const 191676) "a") (data (i32.const 191679) "a") (data (i32.const 191682) "a") (data (i32.const 191685) "a") (data (i32.const 191688) "a") (data (i32.const 191691) "a") (data (i32.const 191694) "a") (data (i32.const 191697) "a") (data (i32.const 191700) "a") (data (i32.const 191703) "a") (data (i32.const 191706) "a") (data (i32.const 191709) "a") (data (i32.const 191712) "a") (data (i32.const 191715) "a") (data (i32.const 191718) "a") (data (i32.const 191721) "a") (data (i32.const 191724) "a") (data (i32.const 191727) "a") (data (i32.const 191730) "a") (data (i32.const 191733) "a") (data (i32.const 191736) "a") (data (i32.const 191739) "a") (data (i32.const 191742) "a") (data (i32.const 191745) "a") (data (i32.const 191748) "a") (data (i32.const 191751) "a") (data (i32.const 191754) "a") (data (i32.const 191757) "a") (data (i32.const 191760) "a") (data (i32.const 191763) "a") (data (i32.const 191766) "a") (data (i32.const 191769) "a") (data (i32.const 191772) "a") (data (i32.const 191775) "a") (data (i32.const 191778) "a") (data (i32.const 191781) "a") (data (i32.const 191784) "a") (data (i32.const 191787) "a") (data (i32.const 191790) "a") (data (i32.const 191793) "a") (data (i32.const 191796) "a") (data (i32.const 191799) "a") (data (i32.const 191802) "a") (data (i32.const 191805) "a") (data (i32.const 191808) "a") (data (i32.const 191811) "a") (data (i32.const 191814) "a") (data (i32.const 191817) "a") (data (i32.const 191820) "a") (data (i32.const 191823) "a") (data (i32.const 191826) "a") (data (i32.const 191829) "a") (data (i32.const 191832) "a") (data (i32.const 191835) "a") (data (i32.const 191838) "a") (data (i32.const 191841) "a") (data (i32.const 191844) "a") (data (i32.const 191847) "a") (data (i32.const 191850) "a") (data (i32.const 191853) "a") (data (i32.const 191856) "a") (data (i32.const 191859) "a") (data (i32.const 191862) "a") (data (i32.const 191865) "a") (data (i32.const 191868) "a") (data (i32.const 191871) "a") (data (i32.const 191874) "a") (data (i32.const 191877) "a") (data (i32.const 191880) "a") (data (i32.const 191883) "a") (data (i32.const 191886) "a") (data (i32.const 191889) "a") (data (i32.const 191892) "a") (data (i32.const 191895) "a") (data (i32.const 191898) "a") (data (i32.const 191901) "a") (data (i32.const 191904) "a") (data (i32.const 191907) "a") (data (i32.const 191910) "a") (data (i32.const 191913) "a") (data (i32.const 191916) "a") (data (i32.const 191919) "a") (data (i32.const 191922) "a") (data (i32.const 191925) "a") (data (i32.const 191928) "a") (data (i32.const 191931) "a") (data (i32.const 191934) "a") (data (i32.const 191937) "a") (data (i32.const 191940) "a") (data (i32.const 191943) "a") (data (i32.const 191946) "a") (data (i32.const 191949) "a") (data (i32.const 191952) "a") (data (i32.const 191955) "a") (data (i32.const 191958) "a") (data (i32.const 191961) "a") (data (i32.const 191964) "a") (data (i32.const 191967) "a") (data (i32.const 191970) "a") (data (i32.const 191973) "a") (data (i32.const 191976) "a") (data (i32.const 191979) "a") (data (i32.const 191982) "a") (data (i32.const 191985) "a") (data (i32.const 191988) "a") (data (i32.const 191991) "a") (data (i32.const 191994) "a") (data (i32.const 191997) "a") (data (i32.const 192000) "a") (data (i32.const 192003) "a") (data (i32.const 192006) "a") (data (i32.const 192009) "a") (data (i32.const 192012) "a") (data (i32.const 192015) "a") (data (i32.const 192018) "a") (data (i32.const 192021) "a") (data (i32.const 192024) "a") (data (i32.const 192027) "a") (data (i32.const 192030) "a") (data (i32.const 192033) "a") (data (i32.const 192036) "a") (data (i32.const 192039) "a") (data (i32.const 192042) "a") (data (i32.const 192045) "a") (data (i32.const 192048) "a") (data (i32.const 192051) "a") (data (i32.const 192054) "a") (data (i32.const 192057) "a") (data (i32.const 192060) "a") (data (i32.const 192063) "a") (data (i32.const 192066) "a") (data (i32.const 192069) "a") (data (i32.const 192072) "a") (data (i32.const 192075) "a") (data (i32.const 192078) "a") (data (i32.const 192081) "a") (data (i32.const 192084) "a") (data (i32.const 192087) "a") (data (i32.const 192090) "a") (data (i32.const 192093) "a") (data (i32.const 192096) "a") (data (i32.const 192099) "a") (data (i32.const 192102) "a") (data (i32.const 192105) "a") (data (i32.const 192108) "a") (data (i32.const 192111) "a") (data (i32.const 192114) "a") (data (i32.const 192117) "a") (data (i32.const 192120) "a") (data (i32.const 192123) "a") (data (i32.const 192126) "a") (data (i32.const 192129) "a") (data (i32.const 192132) "a") (data (i32.const 192135) "a") (data (i32.const 192138) "a") (data (i32.const 192141) "a") (data (i32.const 192144) "a") (data (i32.const 192147) "a") (data (i32.const 192150) "a") (data (i32.const 192153) "a") (data (i32.const 192156) "a") (data (i32.const 192159) "a") (data (i32.const 192162) "a") (data (i32.const 192165) "a") (data (i32.const 192168) "a") (data (i32.const 192171) "a") (data (i32.const 192174) "a") (data (i32.const 192177) "a") (data (i32.const 192180) "a") (data (i32.const 192183) "a") (data (i32.const 192186) "a") (data (i32.const 192189) "a") (data (i32.const 192192) "a") (data (i32.const 192195) "a") (data (i32.const 192198) "a") (data (i32.const 192201) "a") (data (i32.const 192204) "a") (data (i32.const 192207) "a") (data (i32.const 192210) "a") (data (i32.const 192213) "a") (data (i32.const 192216) "a") (data (i32.const 192219) "a") (data (i32.const 192222) "a") (data (i32.const 192225) "a") (data (i32.const 192228) "a") (data (i32.const 192231) "a") (data (i32.const 192234) "a") (data (i32.const 192237) "a") (data (i32.const 192240) "a") (data (i32.const 192243) "a") (data (i32.const 192246) "a") (data (i32.const 192249) "a") (data (i32.const 192252) "a") (data (i32.const 192255) "a") (data (i32.const 192258) "a") (data (i32.const 192261) "a") (data (i32.const 192264) "a") (data (i32.const 192267) "a") (data (i32.const 192270) "a") (data (i32.const 192273) "a") (data (i32.const 192276) "a") (data (i32.const 192279) "a") (data (i32.const 192282) "a") (data (i32.const 192285) "a") (data (i32.const 192288) "a") (data (i32.const 192291) "a") (data (i32.const 192294) "a") (data (i32.const 192297) "a") (data (i32.const 192300) "a") (data (i32.const 192303) "a") (data (i32.const 192306) "a") (data (i32.const 192309) "a") (data (i32.const 192312) "a") (data (i32.const 192315) "a") (data (i32.const 192318) "a") (data (i32.const 192321) "a") (data (i32.const 192324) "a") (data (i32.const 192327) "a") (data (i32.const 192330) "a") (data (i32.const 192333) "a") (data (i32.const 192336) "a") (data (i32.const 192339) "a") (data (i32.const 192342) "a") (data (i32.const 192345) "a") (data (i32.const 192348) "a") (data (i32.const 192351) "a") (data (i32.const 192354) "a") (data (i32.const 192357) "a") (data (i32.const 192360) "a") (data (i32.const 192363) "a") (data (i32.const 192366) "a") (data (i32.const 192369) "a") (data (i32.const 192372) "a") (data (i32.const 192375) "a") (data (i32.const 192378) "a") (data (i32.const 192381) "a") (data (i32.const 192384) "a") (data (i32.const 192387) "a") (data (i32.const 192390) "a") (data (i32.const 192393) "a") (data (i32.const 192396) "a") (data (i32.const 192399) "a") (data (i32.const 192402) "a") (data (i32.const 192405) "a") (data (i32.const 192408) "a") (data (i32.const 192411) "a") (data (i32.const 192414) "a") (data (i32.const 192417) "a") (data (i32.const 192420) "a") (data (i32.const 192423) "a") (data (i32.const 192426) "a") (data (i32.const 192429) "a") (data (i32.const 192432) "a") (data (i32.const 192435) "a") (data (i32.const 192438) "a") (data (i32.const 192441) "a") (data (i32.const 192444) "a") (data (i32.const 192447) "a") (data (i32.const 192450) "a") (data (i32.const 192453) "a") (data (i32.const 192456) "a") (data (i32.const 192459) "a") (data (i32.const 192462) "a") (data (i32.const 192465) "a") (data (i32.const 192468) "a") (data (i32.const 192471) "a") (data (i32.const 192474) "a") (data (i32.const 192477) "a") (data (i32.const 192480) "a") (data (i32.const 192483) "a") (data (i32.const 192486) "a") (data (i32.const 192489) "a") (data (i32.const 192492) "a") (data (i32.const 192495) "a") (data (i32.const 192498) "a") (data (i32.const 192501) "a") (data (i32.const 192504) "a") (data (i32.const 192507) "a") (data (i32.const 192510) "a") (data (i32.const 192513) "a") (data (i32.const 192516) "a") (data (i32.const 192519) "a") (data (i32.const 192522) "a") (data (i32.const 192525) "a") (data (i32.const 192528) "a") (data (i32.const 192531) "a") (data (i32.const 192534) "a") (data (i32.const 192537) "a") (data (i32.const 192540) "a") (data (i32.const 192543) "a") (data (i32.const 192546) "a") (data (i32.const 192549) "a") (data (i32.const 192552) "a") (data (i32.const 192555) "a") (data (i32.const 192558) "a") (data (i32.const 192561) "a") (data (i32.const 192564) "a") (data (i32.const 192567) "a") (data (i32.const 192570) "a") (data (i32.const 192573) "a") (data (i32.const 192576) "a") (data (i32.const 192579) "a") (data (i32.const 192582) "a") (data (i32.const 192585) "a") (data (i32.const 192588) "a") (data (i32.const 192591) "a") (data (i32.const 192594) "a") (data (i32.const 192597) "a") (data (i32.const 192600) "a") (data (i32.const 192603) "a") (data (i32.const 192606) "a") (data (i32.const 192609) "a") (data (i32.const 192612) "a") (data (i32.const 192615) "a") (data (i32.const 192618) "a") (data (i32.const 192621) "a") (data (i32.const 192624) "a") (data (i32.const 192627) "a") (data (i32.const 192630) "a") (data (i32.const 192633) "a") (data (i32.const 192636) "a") (data (i32.const 192639) "a") (data (i32.const 192642) "a") (data (i32.const 192645) "a") (data (i32.const 192648) "a") (data (i32.const 192651) "a") (data (i32.const 192654) "a") (data (i32.const 192657) "a") (data (i32.const 192660) "a") (data (i32.const 192663) "a") (data (i32.const 192666) "a") (data (i32.const 192669) "a") (data (i32.const 192672) "a") (data (i32.const 192675) "a") (data (i32.const 192678) "a") (data (i32.const 192681) "a") (data (i32.const 192684) "a") (data (i32.const 192687) "a") (data (i32.const 192690) "a") (data (i32.const 192693) "a") (data (i32.const 192696) "a") (data (i32.const 192699) "a") (data (i32.const 192702) "a") (data (i32.const 192705) "a") (data (i32.const 192708) "a") (data (i32.const 192711) "a") (data (i32.const 192714) "a") (data (i32.const 192717) "a") (data (i32.const 192720) "a") (data (i32.const 192723) "a") (data (i32.const 192726) "a") (data (i32.const 192729) "a") (data (i32.const 192732) "a") (data (i32.const 192735) "a") (data (i32.const 192738) "a") (data (i32.const 192741) "a") (data (i32.const 192744) "a") (data (i32.const 192747) "a") (data (i32.const 192750) "a") (data (i32.const 192753) "a") (data (i32.const 192756) "a") (data (i32.const 192759) "a") (data (i32.const 192762) "a") (data (i32.const 192765) "a") (data (i32.const 192768) "a") (data (i32.const 192771) "a") (data (i32.const 192774) "a") (data (i32.const 192777) "a") (data (i32.const 192780) "a") (data (i32.const 192783) "a") (data (i32.const 192786) "a") (data (i32.const 192789) "a") (data (i32.const 192792) "a") (data (i32.const 192795) "a") (data (i32.const 192798) "a") (data (i32.const 192801) "a") (data (i32.const 192804) "a") (data (i32.const 192807) "a") (data (i32.const 192810) "a") (data (i32.const 192813) "a") (data (i32.const 192816) "a") (data (i32.const 192819) "a") (data (i32.const 192822) "a") (data (i32.const 192825) "a") (data (i32.const 192828) "a") (data (i32.const 192831) "a") (data (i32.const 192834) "a") (data (i32.const 192837) "a") (data (i32.const 192840) "a") (data (i32.const 192843) "a") (data (i32.const 192846) "a") (data (i32.const 192849) "a") (data (i32.const 192852) "a") (data (i32.const 192855) "a") (data (i32.const 192858) "a") (data (i32.const 192861) "a") (data (i32.const 192864) "a") (data (i32.const 192867) "a") (data (i32.const 192870) "a") (data (i32.const 192873) "a") (data (i32.const 192876) "a") (data (i32.const 192879) "a") (data (i32.const 192882) "a") (data (i32.const 192885) "a") (data (i32.const 192888) "a") (data (i32.const 192891) "a") (data (i32.const 192894) "a") (data (i32.const 192897) "a") (data (i32.const 192900) "a") (data (i32.const 192903) "a") (data (i32.const 192906) "a") (data (i32.const 192909) "a") (data (i32.const 192912) "a") (data (i32.const 192915) "a") (data (i32.const 192918) "a") (data (i32.const 192921) "a") (data (i32.const 192924) "a") (data (i32.const 192927) "a") (data (i32.const 192930) "a") (data (i32.const 192933) "a") (data (i32.const 192936) "a") (data (i32.const 192939) "a") (data (i32.const 192942) "a") (data (i32.const 192945) "a") (data (i32.const 192948) "a") (data (i32.const 192951) "a") (data (i32.const 192954) "a") (data (i32.const 192957) "a") (data (i32.const 192960) "a") (data (i32.const 192963) "a") (data (i32.const 192966) "a") (data (i32.const 192969) "a") (data (i32.const 192972) "a") (data (i32.const 192975) "a") (data (i32.const 192978) "a") (data (i32.const 192981) "a") (data (i32.const 192984) "a") (data (i32.const 192987) "a") (data (i32.const 192990) "a") (data (i32.const 192993) "a") (data (i32.const 192996) "a") (data (i32.const 192999) "a") (data (i32.const 193002) "a") (data (i32.const 193005) "a") (data (i32.const 193008) "a") (data (i32.const 193011) "a") (data (i32.const 193014) "a") (data (i32.const 193017) "a") (data (i32.const 193020) "a") (data (i32.const 193023) "a") (data (i32.const 193026) "a") (data (i32.const 193029) "a") (data (i32.const 193032) "a") (data (i32.const 193035) "a") (data (i32.const 193038) "a") (data (i32.const 193041) "a") (data (i32.const 193044) "a") (data (i32.const 193047) "a") (data (i32.const 193050) "a") (data (i32.const 193053) "a") (data (i32.const 193056) "a") (data (i32.const 193059) "a") (data (i32.const 193062) "a") (data (i32.const 193065) "a") (data (i32.const 193068) "a") (data (i32.const 193071) "a") (data (i32.const 193074) "a") (data (i32.const 193077) "a") (data (i32.const 193080) "a") (data (i32.const 193083) "a") (data (i32.const 193086) "a") (data (i32.const 193089) "a") (data (i32.const 193092) "a") (data (i32.const 193095) "a") (data (i32.const 193098) "a") (data (i32.const 193101) "a") (data (i32.const 193104) "a") (data (i32.const 193107) "a") (data (i32.const 193110) "a") (data (i32.const 193113) "a") (data (i32.const 193116) "a") (data (i32.const 193119) "a") (data (i32.const 193122) "a") (data (i32.const 193125) "a") (data (i32.const 193128) "a") (data (i32.const 193131) "a") (data (i32.const 193134) "a") (data (i32.const 193137) "a") (data (i32.const 193140) "a") (data (i32.const 193143) "a") (data (i32.const 193146) "a") (data (i32.const 193149) "a") (data (i32.const 193152) "a") (data (i32.const 193155) "a") (data (i32.const 193158) "a") (data (i32.const 193161) "a") (data (i32.const 193164) "a") (data (i32.const 193167) "a") (data (i32.const 193170) "a") (data (i32.const 193173) "a") (data (i32.const 193176) "a") (data (i32.const 193179) "a") (data (i32.const 193182) "a") (data (i32.const 193185) "a") (data (i32.const 193188) "a") (data (i32.const 193191) "a") (data (i32.const 193194) "a") (data (i32.const 193197) "a") (data (i32.const 193200) "a") (data (i32.const 193203) "a") (data (i32.const 193206) "a") (data (i32.const 193209) "a") (data (i32.const 193212) "a") (data (i32.const 193215) "a") (data (i32.const 193218) "a") (data (i32.const 193221) "a") (data (i32.const 193224) "a") (data (i32.const 193227) "a") (data (i32.const 193230) "a") (data (i32.const 193233) "a") (data (i32.const 193236) "a") (data (i32.const 193239) "a") (data (i32.const 193242) "a") (data (i32.const 193245) "a") (data (i32.const 193248) "a") (data (i32.const 193251) "a") (data (i32.const 193254) "a") (data (i32.const 193257) "a") (data (i32.const 193260) "a") (data (i32.const 193263) "a") (data (i32.const 193266) "a") (data (i32.const 193269) "a") (data (i32.const 193272) "a") (data (i32.const 193275) "a") (data (i32.const 193278) "a") (data (i32.const 193281) "a") (data (i32.const 193284) "a") (data (i32.const 193287) "a") (data (i32.const 193290) "a") (data (i32.const 193293) "a") (data (i32.const 193296) "a") (data (i32.const 193299) "a") (data (i32.const 193302) "a") (data (i32.const 193305) "a") (data (i32.const 193308) "a") (data (i32.const 193311) "a") (data (i32.const 193314) "a") (data (i32.const 193317) "a") (data (i32.const 193320) "a") (data (i32.const 193323) "a") (data (i32.const 193326) "a") (data (i32.const 193329) "a") (data (i32.const 193332) "a") (data (i32.const 193335) "a") (data (i32.const 193338) "a") (data (i32.const 193341) "a") (data (i32.const 193344) "a") (data (i32.const 193347) "a") (data (i32.const 193350) "a") (data (i32.const 193353) "a") (data (i32.const 193356) "a") (data (i32.const 193359) "a") (data (i32.const 193362) "a") (data (i32.const 193365) "a") (data (i32.const 193368) "a") (data (i32.const 193371) "a") (data (i32.const 193374) "a") (data (i32.const 193377) "a") (data (i32.const 193380) "a") (data (i32.const 193383) "a") (data (i32.const 193386) "a") (data (i32.const 193389) "a") (data (i32.const 193392) "a") (data (i32.const 193395) "a") (data (i32.const 193398) "a") (data (i32.const 193401) "a") (data (i32.const 193404) "a") (data (i32.const 193407) "a") (data (i32.const 193410) "a") (data (i32.const 193413) "a") (data (i32.const 193416) "a") (data (i32.const 193419) "a") (data (i32.const 193422) "a") (data (i32.const 193425) "a") (data (i32.const 193428) "a") (data (i32.const 193431) "a") (data (i32.const 193434) "a") (data (i32.const 193437) "a") (data (i32.const 193440) "a") (data (i32.const 193443) "a") (data (i32.const 193446) "a") (data (i32.const 193449) "a") (data (i32.const 193452) "a") (data (i32.const 193455) "a") (data (i32.const 193458) "a") (data (i32.const 193461) "a") (data (i32.const 193464) "a") (data (i32.const 193467) "a") (data (i32.const 193470) "a") (data (i32.const 193473) "a") (data (i32.const 193476) "a") (data (i32.const 193479) "a") (data (i32.const 193482) "a") (data (i32.const 193485) "a") (data (i32.const 193488) "a") (data (i32.const 193491) "a") (data (i32.const 193494) "a") (data (i32.const 193497) "a") (data (i32.const 193500) "a") (data (i32.const 193503) "a") (data (i32.const 193506) "a") (data (i32.const 193509) "a") (data (i32.const 193512) "a") (data (i32.const 193515) "a") (data (i32.const 193518) "a") (data (i32.const 193521) "a") (data (i32.const 193524) "a") (data (i32.const 193527) "a") (data (i32.const 193530) "a") (data (i32.const 193533) "a") (data (i32.const 193536) "a") (data (i32.const 193539) "a") (data (i32.const 193542) "a") (data (i32.const 193545) "a") (data (i32.const 193548) "a") (data (i32.const 193551) "a") (data (i32.const 193554) "a") (data (i32.const 193557) "a") (data (i32.const 193560) "a") (data (i32.const 193563) "a") (data (i32.const 193566) "a") (data (i32.const 193569) "a") (data (i32.const 193572) "a") (data (i32.const 193575) "a") (data (i32.const 193578) "a") (data (i32.const 193581) "a") (data (i32.const 193584) "a") (data (i32.const 193587) "a") (data (i32.const 193590) "a") (data (i32.const 193593) "a") (data (i32.const 193596) "a") (data (i32.const 193599) "a") (data (i32.const 193602) "a") (data (i32.const 193605) "a") (data (i32.const 193608) "a") (data (i32.const 193611) "a") (data (i32.const 193614) "a") (data (i32.const 193617) "a") (data (i32.const 193620) "a") (data (i32.const 193623) "a") (data (i32.const 193626) "a") (data (i32.const 193629) "a") (data (i32.const 193632) "a") (data (i32.const 193635) "a") (data (i32.const 193638) "a") (data (i32.const 193641) "a") (data (i32.const 193644) "a") (data (i32.const 193647) "a") (data (i32.const 193650) "a") (data (i32.const 193653) "a") (data (i32.const 193656) "a") (data (i32.const 193659) "a") (data (i32.const 193662) "a") (data (i32.const 193665) "a") (data (i32.const 193668) "a") (data (i32.const 193671) "a") (data (i32.const 193674) "a") (data (i32.const 193677) "a") (data (i32.const 193680) "a") (data (i32.const 193683) "a") (data (i32.const 193686) "a") (data (i32.const 193689) "a") (data (i32.const 193692) "a") (data (i32.const 193695) "a") (data (i32.const 193698) "a") (data (i32.const 193701) "a") (data (i32.const 193704) "a") (data (i32.const 193707) "a") (data (i32.const 193710) "a") (data (i32.const 193713) "a") (data (i32.const 193716) "a") (data (i32.const 193719) "a") (data (i32.const 193722) "a") (data (i32.const 193725) "a") (data (i32.const 193728) "a") (data (i32.const 193731) "a") (data (i32.const 193734) "a") (data (i32.const 193737) "a") (data (i32.const 193740) "a") (data (i32.const 193743) "a") (data (i32.const 193746) "a") (data (i32.const 193749) "a") (data (i32.const 193752) "a") (data (i32.const 193755) "a") (data (i32.const 193758) "a") (data (i32.const 193761) "a") (data (i32.const 193764) "a") (data (i32.const 193767) "a") (data (i32.const 193770) "a") (data (i32.const 193773) "a") (data (i32.const 193776) "a") (data (i32.const 193779) "a") (data (i32.const 193782) "a") (data (i32.const 193785) "a") (data (i32.const 193788) "a") (data (i32.const 193791) "a") (data (i32.const 193794) "a") (data (i32.const 193797) "a") (data (i32.const 193800) "a") (data (i32.const 193803) "a") (data (i32.const 193806) "a") (data (i32.const 193809) "a") (data (i32.const 193812) "a") (data (i32.const 193815) "a") (data (i32.const 193818) "a") (data (i32.const 193821) "a") (data (i32.const 193824) "a") (data (i32.const 193827) "a") (data (i32.const 193830) "a") (data (i32.const 193833) "a") (data (i32.const 193836) "a") (data (i32.const 193839) "a") (data (i32.const 193842) "a") (data (i32.const 193845) "a") (data (i32.const 193848) "a") (data (i32.const 193851) "a") (data (i32.const 193854) "a") (data (i32.const 193857) "a") (data (i32.const 193860) "a") (data (i32.const 193863) "a") (data (i32.const 193866) "a") (data (i32.const 193869) "a") (data (i32.const 193872) "a") (data (i32.const 193875) "a") (data (i32.const 193878) "a") (data (i32.const 193881) "a") (data (i32.const 193884) "a") (data (i32.const 193887) "a") (data (i32.const 193890) "a") (data (i32.const 193893) "a") (data (i32.const 193896) "a") (data (i32.const 193899) "a") (data (i32.const 193902) "a") (data (i32.const 193905) "a") (data (i32.const 193908) "a") (data (i32.const 193911) "a") (data (i32.const 193914) "a") (data (i32.const 193917) "a") (data (i32.const 193920) "a") (data (i32.const 193923) "a") (data (i32.const 193926) "a") (data (i32.const 193929) "a") (data (i32.const 193932) "a") (data (i32.const 193935) "a") (data (i32.const 193938) "a") (data (i32.const 193941) "a") (data (i32.const 193944) "a") (data (i32.const 193947) "a") (data (i32.const 193950) "a") (data (i32.const 193953) "a") (data (i32.const 193956) "a") (data (i32.const 193959) "a") (data (i32.const 193962) "a") (data (i32.const 193965) "a") (data (i32.const 193968) "a") (data (i32.const 193971) "a") (data (i32.const 193974) "a") (data (i32.const 193977) "a") (data (i32.const 193980) "a") (data (i32.const 193983) "a") (data (i32.const 193986) "a") (data (i32.const 193989) "a") (data (i32.const 193992) "a") (data (i32.const 193995) "a") (data (i32.const 193998) "a") (data (i32.const 194001) "a") (data (i32.const 194004) "a") (data (i32.const 194007) "a") (data (i32.const 194010) "a") (data (i32.const 194013) "a") (data (i32.const 194016) "a") (data (i32.const 194019) "a") (data (i32.const 194022) "a") (data (i32.const 194025) "a") (data (i32.const 194028) "a") (data (i32.const 194031) "a") (data (i32.const 194034) "a") (data (i32.const 194037) "a") (data (i32.const 194040) "a") (data (i32.const 194043) "a") (data (i32.const 194046) "a") (data (i32.const 194049) "a") (data (i32.const 194052) "a") (data (i32.const 194055) "a") (data (i32.const 194058) "a") (data (i32.const 194061) "a") (data (i32.const 194064) "a") (data (i32.const 194067) "a") (data (i32.const 194070) "a") (data (i32.const 194073) "a") (data (i32.const 194076) "a") (data (i32.const 194079) "a") (data (i32.const 194082) "a") (data (i32.const 194085) "a") (data (i32.const 194088) "a") (data (i32.const 194091) "a") (data (i32.const 194094) "a") (data (i32.const 194097) "a") (data (i32.const 194100) "a") (data (i32.const 194103) "a") (data (i32.const 194106) "a") (data (i32.const 194109) "a") (data (i32.const 194112) "a") (data (i32.const 194115) "a") (data (i32.const 194118) "a") (data (i32.const 194121) "a") (data (i32.const 194124) "a") (data (i32.const 194127) "a") (data (i32.const 194130) "a") (data (i32.const 194133) "a") (data (i32.const 194136) "a") (data (i32.const 194139) "a") (data (i32.const 194142) "a") (data (i32.const 194145) "a") (data (i32.const 194148) "a") (data (i32.const 194151) "a") (data (i32.const 194154) "a") (data (i32.const 194157) "a") (data (i32.const 194160) "a") (data (i32.const 194163) "a") (data (i32.const 194166) "a") (data (i32.const 194169) "a") (data (i32.const 194172) "a") (data (i32.const 194175) "a") (data (i32.const 194178) "a") (data (i32.const 194181) "a") (data (i32.const 194184) "a") (data (i32.const 194187) "a") (data (i32.const 194190) "a") (data (i32.const 194193) "a") (data (i32.const 194196) "a") (data (i32.const 194199) "a") (data (i32.const 194202) "a") (data (i32.const 194205) "a") (data (i32.const 194208) "a") (data (i32.const 194211) "a") (data (i32.const 194214) "a") (data (i32.const 194217) "a") (data (i32.const 194220) "a") (data (i32.const 194223) "a") (data (i32.const 194226) "a") (data (i32.const 194229) "a") (data (i32.const 194232) "a") (data (i32.const 194235) "a") (data (i32.const 194238) "a") (data (i32.const 194241) "a") (data (i32.const 194244) "a") (data (i32.const 194247) "a") (data (i32.const 194250) "a") (data (i32.const 194253) "a") (data (i32.const 194256) "a") (data (i32.const 194259) "a") (data (i32.const 194262) "a") (data (i32.const 194265) "a") (data (i32.const 194268) "a") (data (i32.const 194271) "a") (data (i32.const 194274) "a") (data (i32.const 194277) "a") (data (i32.const 194280) "a") (data (i32.const 194283) "a") (data (i32.const 194286) "a") (data (i32.const 194289) "a") (data (i32.const 194292) "a") (data (i32.const 194295) "a") (data (i32.const 194298) "a") (data (i32.const 194301) "a") (data (i32.const 194304) "a") (data (i32.const 194307) "a") (data (i32.const 194310) "a") (data (i32.const 194313) "a") (data (i32.const 194316) "a") (data (i32.const 194319) "a") (data (i32.const 194322) "a") (data (i32.const 194325) "a") (data (i32.const 194328) "a") (data (i32.const 194331) "a") (data (i32.const 194334) "a") (data (i32.const 194337) "a") (data (i32.const 194340) "a") (data (i32.const 194343) "a") (data (i32.const 194346) "a") (data (i32.const 194349) "a") (data (i32.const 194352) "a") (data (i32.const 194355) "a") (data (i32.const 194358) "a") (data (i32.const 194361) "a") (data (i32.const 194364) "a") (data (i32.const 194367) "a") (data (i32.const 194370) "a") (data (i32.const 194373) "a") (data (i32.const 194376) "a") (data (i32.const 194379) "a") (data (i32.const 194382) "a") (data (i32.const 194385) "a") (data (i32.const 194388) "a") (data (i32.const 194391) "a") (data (i32.const 194394) "a") (data (i32.const 194397) "a") (data (i32.const 194400) "a") (data (i32.const 194403) "a") (data (i32.const 194406) "a") (data (i32.const 194409) "a") (data (i32.const 194412) "a") (data (i32.const 194415) "a") (data (i32.const 194418) "a") (data (i32.const 194421) "a") (data (i32.const 194424) "a") (data (i32.const 194427) "a") (data (i32.const 194430) "a") (data (i32.const 194433) "a") (data (i32.const 194436) "a") (data (i32.const 194439) "a") (data (i32.const 194442) "a") (data (i32.const 194445) "a") (data (i32.const 194448) "a") (data (i32.const 194451) "a") (data (i32.const 194454) "a") (data (i32.const 194457) "a") (data (i32.const 194460) "a") (data (i32.const 194463) "a") (data (i32.const 194466) "a") (data (i32.const 194469) "a") (data (i32.const 194472) "a") (data (i32.const 194475) "a") (data (i32.const 194478) "a") (data (i32.const 194481) "a") (data (i32.const 194484) "a") (data (i32.const 194487) "a") (data (i32.const 194490) "a") (data (i32.const 194493) "a") (data (i32.const 194496) "a") (data (i32.const 194499) "a") (data (i32.const 194502) "a") (data (i32.const 194505) "a") (data (i32.const 194508) "a") (data (i32.const 194511) "a") (data (i32.const 194514) "a") (data (i32.const 194517) "a") (data (i32.const 194520) "a") (data (i32.const 194523) "a") (data (i32.const 194526) "a") (data (i32.const 194529) "a") (data (i32.const 194532) "a") (data (i32.const 194535) "a") (data (i32.const 194538) "a") (data (i32.const 194541) "a") (data (i32.const 194544) "a") (data (i32.const 194547) "a") (data (i32.const 194550) "a") (data (i32.const 194553) "a") (data (i32.const 194556) "a") (data (i32.const 194559) "a") (data (i32.const 194562) "a") (data (i32.const 194565) "a") (data (i32.const 194568) "a") (data (i32.const 194571) "a") (data (i32.const 194574) "a") (data (i32.const 194577) "a") (data (i32.const 194580) "a") (data (i32.const 194583) "a") (data (i32.const 194586) "a") (data (i32.const 194589) "a") (data (i32.const 194592) "a") (data (i32.const 194595) "a") (data (i32.const 194598) "a") (data (i32.const 194601) "a") (data (i32.const 194604) "a") (data (i32.const 194607) "a") (data (i32.const 194610) "a") (data (i32.const 194613) "a") (data (i32.const 194616) "a") (data (i32.const 194619) "a") (data (i32.const 194622) "a") (data (i32.const 194625) "a") (data (i32.const 194628) "a") (data (i32.const 194631) "a") (data (i32.const 194634) "a") (data (i32.const 194637) "a") (data (i32.const 194640) "a") (data (i32.const 194643) "a") (data (i32.const 194646) "a") (data (i32.const 194649) "a") (data (i32.const 194652) "a") (data (i32.const 194655) "a") (data (i32.const 194658) "a") (data (i32.const 194661) "a") (data (i32.const 194664) "a") (data (i32.const 194667) "a") (data (i32.const 194670) "a") (data (i32.const 194673) "a") (data (i32.const 194676) "a") (data (i32.const 194679) "a") (data (i32.const 194682) "a") (data (i32.const 194685) "a") (data (i32.const 194688) "a") (data (i32.const 194691) "a") (data (i32.const 194694) "a") (data (i32.const 194697) "a") (data (i32.const 194700) "a") (data (i32.const 194703) "a") (data (i32.const 194706) "a") (data (i32.const 194709) "a") (data (i32.const 194712) "a") (data (i32.const 194715) "a") (data (i32.const 194718) "a") (data (i32.const 194721) "a") (data (i32.const 194724) "a") (data (i32.const 194727) "a") (data (i32.const 194730) "a") (data (i32.const 194733) "a") (data (i32.const 194736) "a") (data (i32.const 194739) "a") (data (i32.const 194742) "a") (data (i32.const 194745) "a") (data (i32.const 194748) "a") (data (i32.const 194751) "a") (data (i32.const 194754) "a") (data (i32.const 194757) "a") (data (i32.const 194760) "a") (data (i32.const 194763) "a") (data (i32.const 194766) "a") (data (i32.const 194769) "a") (data (i32.const 194772) "a") (data (i32.const 194775) "a") (data (i32.const 194778) "a") (data (i32.const 194781) "a") (data (i32.const 194784) "a") (data (i32.const 194787) "a") (data (i32.const 194790) "a") (data (i32.const 194793) "a") (data (i32.const 194796) "a") (data (i32.const 194799) "a") (data (i32.const 194802) "a") (data (i32.const 194805) "a") (data (i32.const 194808) "a") (data (i32.const 194811) "a") (data (i32.const 194814) "a") (data (i32.const 194817) "a") (data (i32.const 194820) "a") (data (i32.const 194823) "a") (data (i32.const 194826) "a") (data (i32.const 194829) "a") (data (i32.const 194832) "a") (data (i32.const 194835) "a") (data (i32.const 194838) "a") (data (i32.const 194841) "a") (data (i32.const 194844) "a") (data (i32.const 194847) "a") (data (i32.const 194850) "a") (data (i32.const 194853) "a") (data (i32.const 194856) "a") (data (i32.const 194859) "a") (data (i32.const 194862) "a") (data (i32.const 194865) "a") (data (i32.const 194868) "a") (data (i32.const 194871) "a") (data (i32.const 194874) "a") (data (i32.const 194877) "a") (data (i32.const 194880) "a") (data (i32.const 194883) "a") (data (i32.const 194886) "a") (data (i32.const 194889) "a") (data (i32.const 194892) "a") (data (i32.const 194895) "a") (data (i32.const 194898) "a") (data (i32.const 194901) "a") (data (i32.const 194904) "a") (data (i32.const 194907) "a") (data (i32.const 194910) "a") (data (i32.const 194913) "a") (data (i32.const 194916) "a") (data (i32.const 194919) "a") (data (i32.const 194922) "a") (data (i32.const 194925) "a") (data (i32.const 194928) "a") (data (i32.const 194931) "a") (data (i32.const 194934) "a") (data (i32.const 194937) "a") (data (i32.const 194940) "a") (data (i32.const 194943) "a") (data (i32.const 194946) "a") (data (i32.const 194949) "a") (data (i32.const 194952) "a") (data (i32.const 194955) "a") (data (i32.const 194958) "a") (data (i32.const 194961) "a") (data (i32.const 194964) "a") (data (i32.const 194967) "a") (data (i32.const 194970) "a") (data (i32.const 194973) "a") (data (i32.const 194976) "a") (data (i32.const 194979) "a") (data (i32.const 194982) "a") (data (i32.const 194985) "a") (data (i32.const 194988) "a") (data (i32.const 194991) "a") (data (i32.const 194994) "a") (data (i32.const 194997) "a") (data (i32.const 195000) "a") (data (i32.const 195003) "a") (data (i32.const 195006) "a") (data (i32.const 195009) "a") (data (i32.const 195012) "a") (data (i32.const 195015) "a") (data (i32.const 195018) "a") (data (i32.const 195021) "a") (data (i32.const 195024) "a") (data (i32.const 195027) "a") (data (i32.const 195030) "a") (data (i32.const 195033) "a") (data (i32.const 195036) "a") (data (i32.const 195039) "a") (data (i32.const 195042) "a") (data (i32.const 195045) "a") (data (i32.const 195048) "a") (data (i32.const 195051) "a") (data (i32.const 195054) "a") (data (i32.const 195057) "a") (data (i32.const 195060) "a") (data (i32.const 195063) "a") (data (i32.const 195066) "a") (data (i32.const 195069) "a") (data (i32.const 195072) "a") (data (i32.const 195075) "a") (data (i32.const 195078) "a") (data (i32.const 195081) "a") (data (i32.const 195084) "a") (data (i32.const 195087) "a") (data (i32.const 195090) "a") (data (i32.const 195093) "a") (data (i32.const 195096) "a") (data (i32.const 195099) "a") (data (i32.const 195102) "a") (data (i32.const 195105) "a") (data (i32.const 195108) "a") (data (i32.const 195111) "a") (data (i32.const 195114) "a") (data (i32.const 195117) "a") (data (i32.const 195120) "a") (data (i32.const 195123) "a") (data (i32.const 195126) "a") (data (i32.const 195129) "a") (data (i32.const 195132) "a") (data (i32.const 195135) "a") (data (i32.const 195138) "a") (data (i32.const 195141) "a") (data (i32.const 195144) "a") (data (i32.const 195147) "a") (data (i32.const 195150) "a") (data (i32.const 195153) "a") (data (i32.const 195156) "a") (data (i32.const 195159) "a") (data (i32.const 195162) "a") (data (i32.const 195165) "a") (data (i32.const 195168) "a") (data (i32.const 195171) "a") (data (i32.const 195174) "a") (data (i32.const 195177) "a") (data (i32.const 195180) "a") (data (i32.const 195183) "a") (data (i32.const 195186) "a") (data (i32.const 195189) "a") (data (i32.const 195192) "a") (data (i32.const 195195) "a") (data (i32.const 195198) "a") (data (i32.const 195201) "a") (data (i32.const 195204) "a") (data (i32.const 195207) "a") (data (i32.const 195210) "a") (data (i32.const 195213) "a") (data (i32.const 195216) "a") (data (i32.const 195219) "a") (data (i32.const 195222) "a") (data (i32.const 195225) "a") (data (i32.const 195228) "a") (data (i32.const 195231) "a") (data (i32.const 195234) "a") (data (i32.const 195237) "a") (data (i32.const 195240) "a") (data (i32.const 195243) "a") (data (i32.const 195246) "a") (data (i32.const 195249) "a") (data (i32.const 195252) "a") (data (i32.const 195255) "a") (data (i32.const 195258) "a") (data (i32.const 195261) "a") (data (i32.const 195264) "a") (data (i32.const 195267) "a") (data (i32.const 195270) "a") (data (i32.const 195273) "a") (data (i32.const 195276) "a") (data (i32.const 195279) "a") (data (i32.const 195282) "a") (data (i32.const 195285) "a") (data (i32.const 195288) "a") (data (i32.const 195291) "a") (data (i32.const 195294) "a") (data (i32.const 195297) "a") (data (i32.const 195300) "a") (data (i32.const 195303) "a") (data (i32.const 195306) "a") (data (i32.const 195309) "a") (data (i32.const 195312) "a") (data (i32.const 195315) "a") (data (i32.const 195318) "a") (data (i32.const 195321) "a") (data (i32.const 195324) "a") (data (i32.const 195327) "a") (data (i32.const 195330) "a") (data (i32.const 195333) "a") (data (i32.const 195336) "a") (data (i32.const 195339) "a") (data (i32.const 195342) "a") (data (i32.const 195345) "a") (data (i32.const 195348) "a") (data (i32.const 195351) "a") (data (i32.const 195354) "a") (data (i32.const 195357) "a") (data (i32.const 195360) "a") (data (i32.const 195363) "a") (data (i32.const 195366) "a") (data (i32.const 195369) "a") (data (i32.const 195372) "a") (data (i32.const 195375) "a") (data (i32.const 195378) "a") (data (i32.const 195381) "a") (data (i32.const 195384) "a") (data (i32.const 195387) "a") (data (i32.const 195390) "a") (data (i32.const 195393) "a") (data (i32.const 195396) "a") (data (i32.const 195399) "a") (data (i32.const 195402) "a") (data (i32.const 195405) "a") (data (i32.const 195408) "a") (data (i32.const 195411) "a") (data (i32.const 195414) "a") (data (i32.const 195417) "a") (data (i32.const 195420) "a") (data (i32.const 195423) "a") (data (i32.const 195426) "a") (data (i32.const 195429) "a") (data (i32.const 195432) "a") (data (i32.const 195435) "a") (data (i32.const 195438) "a") (data (i32.const 195441) "a") (data (i32.const 195444) "a") (data (i32.const 195447) "a") (data (i32.const 195450) "a") (data (i32.const 195453) "a") (data (i32.const 195456) "a") (data (i32.const 195459) "a") (data (i32.const 195462) "a") (data (i32.const 195465) "a") (data (i32.const 195468) "a") (data (i32.const 195471) "a") (data (i32.const 195474) "a") (data (i32.const 195477) "a") (data (i32.const 195480) "a") (data (i32.const 195483) "a") (data (i32.const 195486) "a") (data (i32.const 195489) "a") (data (i32.const 195492) "a") (data (i32.const 195495) "a") (data (i32.const 195498) "a") (data (i32.const 195501) "a") (data (i32.const 195504) "a") (data (i32.const 195507) "a") (data (i32.const 195510) "a") (data (i32.const 195513) "a") (data (i32.const 195516) "a") (data (i32.const 195519) "a") (data (i32.const 195522) "a") (data (i32.const 195525) "a") (data (i32.const 195528) "a") (data (i32.const 195531) "a") (data (i32.const 195534) "a") (data (i32.const 195537) "a") (data (i32.const 195540) "a") (data (i32.const 195543) "a") (data (i32.const 195546) "a") (data (i32.const 195549) "a") (data (i32.const 195552) "a") (data (i32.const 195555) "a") (data (i32.const 195558) "a") (data (i32.const 195561) "a") (data (i32.const 195564) "a") (data (i32.const 195567) "a") (data (i32.const 195570) "a") (data (i32.const 195573) "a") (data (i32.const 195576) "a") (data (i32.const 195579) "a") (data (i32.const 195582) "a") (data (i32.const 195585) "a") (data (i32.const 195588) "a") (data (i32.const 195591) "a") (data (i32.const 195594) "a") (data (i32.const 195597) "a") (data (i32.const 195600) "a") (data (i32.const 195603) "a") (data (i32.const 195606) "a") (data (i32.const 195609) "a") (data (i32.const 195612) "a") (data (i32.const 195615) "a") (data (i32.const 195618) "a") (data (i32.const 195621) "a") (data (i32.const 195624) "a") (data (i32.const 195627) "a") (data (i32.const 195630) "a") (data (i32.const 195633) "a") (data (i32.const 195636) "a") (data (i32.const 195639) "a") (data (i32.const 195642) "a") (data (i32.const 195645) "a") (data (i32.const 195648) "a") (data (i32.const 195651) "a") (data (i32.const 195654) "a") (data (i32.const 195657) "a") (data (i32.const 195660) "a") (data (i32.const 195663) "a") (data (i32.const 195666) "a") (data (i32.const 195669) "a") (data (i32.const 195672) "a") (data (i32.const 195675) "a") (data (i32.const 195678) "a") (data (i32.const 195681) "a") (data (i32.const 195684) "a") (data (i32.const 195687) "a") (data (i32.const 195690) "a") (data (i32.const 195693) "a") (data (i32.const 195696) "a") (data (i32.const 195699) "a") (data (i32.const 195702) "a") (data (i32.const 195705) "a") (data (i32.const 195708) "a") (data (i32.const 195711) "a") (data (i32.const 195714) "a") (data (i32.const 195717) "a") (data (i32.const 195720) "a") (data (i32.const 195723) "a") (data (i32.const 195726) "a") (data (i32.const 195729) "a") (data (i32.const 195732) "a") (data (i32.const 195735) "a") (data (i32.const 195738) "a") (data (i32.const 195741) "a") (data (i32.const 195744) "a") (data (i32.const 195747) "a") (data (i32.const 195750) "a") (data (i32.const 195753) "a") (data (i32.const 195756) "a") (data (i32.const 195759) "a") (data (i32.const 195762) "a") (data (i32.const 195765) "a") (data (i32.const 195768) "a") (data (i32.const 195771) "a") (data (i32.const 195774) "a") (data (i32.const 195777) "a") (data (i32.const 195780) "a") (data (i32.const 195783) "a") (data (i32.const 195786) "a") (data (i32.const 195789) "a") (data (i32.const 195792) "a") (data (i32.const 195795) "a") (data (i32.const 195798) "a") (data (i32.const 195801) "a") (data (i32.const 195804) "a") (data (i32.const 195807) "a") (data (i32.const 195810) "a") (data (i32.const 195813) "a") (data (i32.const 195816) "a") (data (i32.const 195819) "a") (data (i32.const 195822) "a") (data (i32.const 195825) "a") (data (i32.const 195828) "a") (data (i32.const 195831) "a") (data (i32.const 195834) "a") (data (i32.const 195837) "a") (data (i32.const 195840) "a") (data (i32.const 195843) "a") (data (i32.const 195846) "a") (data (i32.const 195849) "a") (data (i32.const 195852) "a") (data (i32.const 195855) "a") (data (i32.const 195858) "a") (data (i32.const 195861) "a") (data (i32.const 195864) "a") (data (i32.const 195867) "a") (data (i32.const 195870) "a") (data (i32.const 195873) "a") (data (i32.const 195876) "a") (data (i32.const 195879) "a") (data (i32.const 195882) "a") (data (i32.const 195885) "a") (data (i32.const 195888) "a") (data (i32.const 195891) "a") (data (i32.const 195894) "a") (data (i32.const 195897) "a") (data (i32.const 195900) "a") (data (i32.const 195903) "a") (data (i32.const 195906) "a") (data (i32.const 195909) "a") (data (i32.const 195912) "a") (data (i32.const 195915) "a") (data (i32.const 195918) "a") (data (i32.const 195921) "a") (data (i32.const 195924) "a") (data (i32.const 195927) "a") (data (i32.const 195930) "a") (data (i32.const 195933) "a") (data (i32.const 195936) "a") (data (i32.const 195939) "a") (data (i32.const 195942) "a") (data (i32.const 195945) "a") (data (i32.const 195948) "a") (data (i32.const 195951) "a") (data (i32.const 195954) "a") (data (i32.const 195957) "a") (data (i32.const 195960) "a") (data (i32.const 195963) "a") (data (i32.const 195966) "a") (data (i32.const 195969) "a") (data (i32.const 195972) "a") (data (i32.const 195975) "a") (data (i32.const 195978) "a") (data (i32.const 195981) "a") (data (i32.const 195984) "a") (data (i32.const 195987) "a") (data (i32.const 195990) "a") (data (i32.const 195993) "a") (data (i32.const 195996) "a") (data (i32.const 195999) "a") (data (i32.const 196002) "a") (data (i32.const 196005) "a") (data (i32.const 196008) "a") (data (i32.const 196011) "a") (data (i32.const 196014) "a") (data (i32.const 196017) "a") (data (i32.const 196020) "a") (data (i32.const 196023) "a") (data (i32.const 196026) "a") (data (i32.const 196029) "a") (data (i32.const 196032) "a") (data (i32.const 196035) "a") (data (i32.const 196038) "a") (data (i32.const 196041) "a") (data (i32.const 196044) "a") (data (i32.const 196047) "a") (data (i32.const 196050) "a") (data (i32.const 196053) "a") (data (i32.const 196056) "a") (data (i32.const 196059) "a") (data (i32.const 196062) "a") (data (i32.const 196065) "a") (data (i32.const 196068) "a") (data (i32.const 196071) "a") (data (i32.const 196074) "a") (data (i32.const 196077) "a") (data (i32.const 196080) "a") (data (i32.const 196083) "a") (data (i32.const 196086) "a") (data (i32.const 196089) "a") (data (i32.const 196092) "a") (data (i32.const 196095) "a") (data (i32.const 196098) "a") (data (i32.const 196101) "a") (data (i32.const 196104) "a") (data (i32.const 196107) "a") (data (i32.const 196110) "a") (data (i32.const 196113) "a") (data (i32.const 196116) "a") (data (i32.const 196119) "a") (data (i32.const 196122) "a") (data (i32.const 196125) "a") (data (i32.const 196128) "a") (data (i32.const 196131) "a") (data (i32.const 196134) "a") (data (i32.const 196137) "a") (data (i32.const 196140) "a") (data (i32.const 196143) "a") (data (i32.const 196146) "a") (data (i32.const 196149) "a") (data (i32.const 196152) "a") (data (i32.const 196155) "a") (data (i32.const 196158) "a") (data (i32.const 196161) "a") (data (i32.const 196164) "a") (data (i32.const 196167) "a") (data (i32.const 196170) "a") (data (i32.const 196173) "a") (data (i32.const 196176) "a") (data (i32.const 196179) "a") (data (i32.const 196182) "a") (data (i32.const 196185) "a") (data (i32.const 196188) "a") (data (i32.const 196191) "a") (data (i32.const 196194) "a") (data (i32.const 196197) "a") (data (i32.const 196200) "a") (data (i32.const 196203) "a") (data (i32.const 196206) "a") (data (i32.const 196209) "a") (data (i32.const 196212) "a") (data (i32.const 196215) "a") (data (i32.const 196218) "a") (data (i32.const 196221) "a") (data (i32.const 196224) "a") (data (i32.const 196227) "a") (data (i32.const 196230) "a") (data (i32.const 196233) "a") (data (i32.const 196236) "a") (data (i32.const 196239) "a") (data (i32.const 196242) "a") (data (i32.const 196245) "a") (data (i32.const 196248) "a") (data (i32.const 196251) "a") (data (i32.const 196254) "a") (data (i32.const 196257) "a") (data (i32.const 196260) "a") (data (i32.const 196263) "a") (data (i32.const 196266) "a") (data (i32.const 196269) "a") (data (i32.const 196272) "a") (data (i32.const 196275) "a") (data (i32.const 196278) "a") (data (i32.const 196281) "a") (data (i32.const 196284) "a") (data (i32.const 196287) "a") (data (i32.const 196290) "a") (data (i32.const 196293) "a") (data (i32.const 196296) "a") (data (i32.const 196299) "a") (data (i32.const 196302) "a") (data (i32.const 196305) "a") (data (i32.const 196308) "a") (data (i32.const 196311) "a") (data (i32.const 196314) "a") (data (i32.const 196317) "a") (data (i32.const 196320) "a") (data (i32.const 196323) "a") (data (i32.const 196326) "a") (data (i32.const 196329) "a") (data (i32.const 196332) "a") (data (i32.const 196335) "a") (data (i32.const 196338) "a") (data (i32.const 196341) "a") (data (i32.const 196344) "a") (data (i32.const 196347) "a") (data (i32.const 196350) "a") (data (i32.const 196353) "a") (data (i32.const 196356) "a") (data (i32.const 196359) "a") (data (i32.const 196362) "a") (data (i32.const 196365) "a") (data (i32.const 196368) "a") (data (i32.const 196371) "a") (data (i32.const 196374) "a") (data (i32.const 196377) "a") (data (i32.const 196380) "a") (data (i32.const 196383) "a") (data (i32.const 196386) "a") (data (i32.const 196389) "a") (data (i32.const 196392) "a") (data (i32.const 196395) "a") (data (i32.const 196398) "a") (data (i32.const 196401) "a") (data (i32.const 196404) "a") (data (i32.const 196407) "a") (data (i32.const 196410) "a") (data (i32.const 196413) "a") (data (i32.const 196416) "a") (data (i32.const 196419) "a") (data (i32.const 196422) "a") (data (i32.const 196425) "a") (data (i32.const 196428) "a") (data (i32.const 196431) "a") (data (i32.const 196434) "a") (data (i32.const 196437) "a") (data (i32.const 196440) "a") (data (i32.const 196443) "a") (data (i32.const 196446) "a") (data (i32.const 196449) "a") (data (i32.const 196452) "a") (data (i32.const 196455) "a") (data (i32.const 196458) "a") (data (i32.const 196461) "a") (data (i32.const 196464) "a") (data (i32.const 196467) "a") (data (i32.const 196470) "a") (data (i32.const 196473) "a") (data (i32.const 196476) "a") (data (i32.const 196479) "a") (data (i32.const 196482) "a") (data (i32.const 196485) "a") (data (i32.const 196488) "a") (data (i32.const 196491) "a") (data (i32.const 196494) "a") (data (i32.const 196497) "a") (data (i32.const 196500) "a") (data (i32.const 196503) "a") (data (i32.const 196506) "a") (data (i32.const 196509) "a") (data (i32.const 196512) "a") (data (i32.const 196515) "a") (data (i32.const 196518) "a") (data (i32.const 196521) "a") (data (i32.const 196524) "a") (data (i32.const 196527) "a") (data (i32.const 196530) "a") (data (i32.const 196533) "a") (data (i32.const 196536) "a") (data (i32.const 196539) "a") (data (i32.const 196542) "a") (data (i32.const 196545) "a") (data (i32.const 196548) "a") (data (i32.const 196551) "a") (data (i32.const 196554) "a") (data (i32.const 196557) "a") (data (i32.const 196560) "a") (data (i32.const 196563) "a") (data (i32.const 196566) "a") (data (i32.const 196569) "a") (data (i32.const 196572) "a") (data (i32.const 196575) "a") (data (i32.const 196578) "a") (data (i32.const 196581) "a") (data (i32.const 196584) "a") (data (i32.const 196587) "a") (data (i32.const 196590) "a") (data (i32.const 196593) "a") (data (i32.const 196596) "a") (data (i32.const 196599) "a") (data (i32.const 196602) "a") (data (i32.const 196605) "a") (data (i32.const 196608) "a") (data (i32.const 196611) "a") (data (i32.const 196614) "a") (data (i32.const 196617) "a") (data (i32.const 196620) "a") (data (i32.const 196623) "a") (data (i32.const 196626) "a") (data (i32.const 196629) "a") (data (i32.const 196632) "a") (data (i32.const 196635) "a") (data (i32.const 196638) "a") (data (i32.const 196641) "a") (data (i32.const 196644) "a") (data (i32.const 196647) "a") (data (i32.const 196650) "a") (data (i32.const 196653) "a") (data (i32.const 196656) "a") (data (i32.const 196659) "a") (data (i32.const 196662) "a") (data (i32.const 196665) "a") (data (i32.const 196668) "a") (data (i32.const 196671) "a") (data (i32.const 196674) "a") (data (i32.const 196677) "a") (data (i32.const 196680) "a") (data (i32.const 196683) "a") (data (i32.const 196686) "a") (data (i32.const 196689) "a") (data (i32.const 196692) "a") (data (i32.const 196695) "a") (data (i32.const 196698) "a") (data (i32.const 196701) "a") (data (i32.const 196704) "a") (data (i32.const 196707) "a") (data (i32.const 196710) "a") (data (i32.const 196713) "a") (data (i32.const 196716) "a") (data (i32.const 196719) "a") (data (i32.const 196722) "a") (data (i32.const 196725) "a") (data (i32.const 196728) "a") (data (i32.const 196731) "a") (data (i32.const 196734) "a") (data (i32.const 196737) "a") (data (i32.const 196740) "a") (data (i32.const 196743) "a") (data (i32.const 196746) "a") (data (i32.const 196749) "a") (data (i32.const 196752) "a") (data (i32.const 196755) "a") (data (i32.const 196758) "a") (data (i32.const 196761) "a") (data (i32.const 196764) "a") (data (i32.const 196767) "a") (data (i32.const 196770) "a") (data (i32.const 196773) "a") (data (i32.const 196776) "a") (data (i32.const 196779) "a") (data (i32.const 196782) "a") (data (i32.const 196785) "a") (data (i32.const 196788) "a") (data (i32.const 196791) "a") (data (i32.const 196794) "a") (data (i32.const 196797) "a") (data (i32.const 196800) "a") (data (i32.const 196803) "a") (data (i32.const 196806) "a") (data (i32.const 196809) "a") (data (i32.const 196812) "a") (data (i32.const 196815) "a") (data (i32.const 196818) "a") (data (i32.const 196821) "a") (data (i32.const 196824) "a") (data (i32.const 196827) "a") (data (i32.const 196830) "a") (data (i32.const 196833) "a") (data (i32.const 196836) "a") (data (i32.const 196839) "a") (data (i32.const 196842) "a") (data (i32.const 196845) "a") (data (i32.const 196848) "a") (data (i32.const 196851) "a") (data (i32.const 196854) "a") (data (i32.const 196857) "a") (data (i32.const 196860) "a") (data (i32.const 196863) "a") (data (i32.const 196866) "a") (data (i32.const 196869) "a") (data (i32.const 196872) "a") (data (i32.const 196875) "a") (data (i32.const 196878) "a") (data (i32.const 196881) "a") (data (i32.const 196884) "a") (data (i32.const 196887) "a") (data (i32.const 196890) "a") (data (i32.const 196893) "a") (data (i32.const 196896) "a") (data (i32.const 196899) "a") (data (i32.const 196902) "a") (data (i32.const 196905) "a") (data (i32.const 196908) "a") (data (i32.const 196911) "a") (data (i32.const 196914) "a") (data (i32.const 196917) "a") (data (i32.const 196920) "a") (data (i32.const 196923) "a") (data (i32.const 196926) "a") (data (i32.const 196929) "a") (data (i32.const 196932) "a") (data (i32.const 196935) "a") (data (i32.const 196938) "a") (data (i32.const 196941) "a") (data (i32.const 196944) "a") (data (i32.const 196947) "a") (data (i32.const 196950) "a") (data (i32.const 196953) "a") (data (i32.const 196956) "a") (data (i32.const 196959) "a") (data (i32.const 196962) "a") (data (i32.const 196965) "a") (data (i32.const 196968) "a") (data (i32.const 196971) "a") (data (i32.const 196974) "a") (data (i32.const 196977) "a") (data (i32.const 196980) "a") (data (i32.const 196983) "a") (data (i32.const 196986) "a") (data (i32.const 196989) "a") (data (i32.const 196992) "a") (data (i32.const 196995) "a") (data (i32.const 196998) "a") (data (i32.const 197001) "a") (data (i32.const 197004) "a") (data (i32.const 197007) "a") (data (i32.const 197010) "a") (data (i32.const 197013) "a") (data (i32.const 197016) "a") (data (i32.const 197019) "a") (data (i32.const 197022) "a") (data (i32.const 197025) "a") (data (i32.const 197028) "a") (data (i32.const 197031) "a") (data (i32.const 197034) "a") (data (i32.const 197037) "a") (data (i32.const 197040) "a") (data (i32.const 197043) "a") (data (i32.const 197046) "a") (data (i32.const 197049) "a") (data (i32.const 197052) "a") (data (i32.const 197055) "a") (data (i32.const 197058) "a") (data (i32.const 197061) "a") (data (i32.const 197064) "a") (data (i32.const 197067) "a") (data (i32.const 197070) "a") (data (i32.const 197073) "a") (data (i32.const 197076) "a") (data (i32.const 197079) "a") (data (i32.const 197082) "a") (data (i32.const 197085) "a") (data (i32.const 197088) "a") (data (i32.const 197091) "a") (data (i32.const 197094) "a") (data (i32.const 197097) "a") (data (i32.const 197100) "a") (data (i32.const 197103) "a") (data (i32.const 197106) "a") (data (i32.const 197109) "a") (data (i32.const 197112) "a") (data (i32.const 197115) "a") (data (i32.const 197118) "a") (data (i32.const 197121) "a") (data (i32.const 197124) "a") (data (i32.const 197127) "a") (data (i32.const 197130) "a") (data (i32.const 197133) "a") (data (i32.const 197136) "a") (data (i32.const 197139) "a") (data (i32.const 197142) "a") (data (i32.const 197145) "a") (data (i32.const 197148) "a") (data (i32.const 197151) "a") (data (i32.const 197154) "a") (data (i32.const 197157) "a") (data (i32.const 197160) "a") (data (i32.const 197163) "a") (data (i32.const 197166) "a") (data (i32.const 197169) "a") (data (i32.const 197172) "a") (data (i32.const 197175) "a") (data (i32.const 197178) "a") (data (i32.const 197181) "a") (data (i32.const 197184) "a") (data (i32.const 197187) "a") (data (i32.const 197190) "a") (data (i32.const 197193) "a") (data (i32.const 197196) "a") (data (i32.const 197199) "a") (data (i32.const 197202) "a") (data (i32.const 197205) "a") (data (i32.const 197208) "a") (data (i32.const 197211) "a") (data (i32.const 197214) "a") (data (i32.const 197217) "a") (data (i32.const 197220) "a") (data (i32.const 197223) "a") (data (i32.const 197226) "a") (data (i32.const 197229) "a") (data (i32.const 197232) "a") (data (i32.const 197235) "a") (data (i32.const 197238) "a") (data (i32.const 197241) "a") (data (i32.const 197244) "a") (data (i32.const 197247) "a") (data (i32.const 197250) "a") (data (i32.const 197253) "a") (data (i32.const 197256) "a") (data (i32.const 197259) "a") (data (i32.const 197262) "a") (data (i32.const 197265) "a") (data (i32.const 197268) "a") (data (i32.const 197271) "a") (data (i32.const 197274) "a") (data (i32.const 197277) "a") (data (i32.const 197280) "a") (data (i32.const 197283) "a") (data (i32.const 197286) "a") (data (i32.const 197289) "a") (data (i32.const 197292) "a") (data (i32.const 197295) "a") (data (i32.const 197298) "a") (data (i32.const 197301) "a") (data (i32.const 197304) "a") (data (i32.const 197307) "a") (data (i32.const 197310) "a") (data (i32.const 197313) "a") (data (i32.const 197316) "a") (data (i32.const 197319) "a") (data (i32.const 197322) "a") (data (i32.const 197325) "a") (data (i32.const 197328) "a") (data (i32.const 197331) "a") (data (i32.const 197334) "a") (data (i32.const 197337) "a") (data (i32.const 197340) "a") (data (i32.const 197343) "a") (data (i32.const 197346) "a") (data (i32.const 197349) "a") (data (i32.const 197352) "a") (data (i32.const 197355) "a") (data (i32.const 197358) "a") (data (i32.const 197361) "a") (data (i32.const 197364) "a") (data (i32.const 197367) "a") (data (i32.const 197370) "a") (data (i32.const 197373) "a") (data (i32.const 197376) "a") (data (i32.const 197379) "a") (data (i32.const 197382) "a") (data (i32.const 197385) "a") (data (i32.const 197388) "a") (data (i32.const 197391) "a") (data (i32.const 197394) "a") (data (i32.const 197397) "a") (data (i32.const 197400) "a") (data (i32.const 197403) "a") (data (i32.const 197406) "a") (data (i32.const 197409) "a") (data (i32.const 197412) "a") (data (i32.const 197415) "a") (data (i32.const 197418) "a") (data (i32.const 197421) "a") (data (i32.const 197424) "a") (data (i32.const 197427) "a") (data (i32.const 197430) "a") (data (i32.const 197433) "a") (data (i32.const 197436) "a") (data (i32.const 197439) "a") (data (i32.const 197442) "a") (data (i32.const 197445) "a") (data (i32.const 197448) "a") (data (i32.const 197451) "a") (data (i32.const 197454) "a") (data (i32.const 197457) "a") (data (i32.const 197460) "a") (data (i32.const 197463) "a") (data (i32.const 197466) "a") (data (i32.const 197469) "a") (data (i32.const 197472) "a") (data (i32.const 197475) "a") (data (i32.const 197478) "a") (data (i32.const 197481) "a") (data (i32.const 197484) "a") (data (i32.const 197487) "a") (data (i32.const 197490) "a") (data (i32.const 197493) "a") (data (i32.const 197496) "a") (data (i32.const 197499) "a") (data (i32.const 197502) "a") (data (i32.const 197505) "a") (data (i32.const 197508) "a") (data (i32.const 197511) "a") (data (i32.const 197514) "a") (data (i32.const 197517) "a") (data (i32.const 197520) "a") (data (i32.const 197523) "a") (data (i32.const 197526) "a") (data (i32.const 197529) "a") (data (i32.const 197532) "a") (data (i32.const 197535) "a") (data (i32.const 197538) "a") (data (i32.const 197541) "a") (data (i32.const 197544) "a") (data (i32.const 197547) "a") (data (i32.const 197550) "a") (data (i32.const 197553) "a") (data (i32.const 197556) "a") (data (i32.const 197559) "a") (data (i32.const 197562) "a") (data (i32.const 197565) "a") (data (i32.const 197568) "a") (data (i32.const 197571) "a") (data (i32.const 197574) "a") (data (i32.const 197577) "a") (data (i32.const 197580) "a") (data (i32.const 197583) "a") (data (i32.const 197586) "a") (data (i32.const 197589) "a") (data (i32.const 197592) "a") (data (i32.const 197595) "a") (data (i32.const 197598) "a") (data (i32.const 197601) "a") (data (i32.const 197604) "a") (data (i32.const 197607) "a") (data (i32.const 197610) "a") (data (i32.const 197613) "a") (data (i32.const 197616) "a") (data (i32.const 197619) "a") (data (i32.const 197622) "a") (data (i32.const 197625) "a") (data (i32.const 197628) "a") (data (i32.const 197631) "a") (data (i32.const 197634) "a") (data (i32.const 197637) "a") (data (i32.const 197640) "a") (data (i32.const 197643) "a") (data (i32.const 197646) "a") (data (i32.const 197649) "a") (data (i32.const 197652) "a") (data (i32.const 197655) "a") (data (i32.const 197658) "a") (data (i32.const 197661) "a") (data (i32.const 197664) "a") (data (i32.const 197667) "a") (data (i32.const 197670) "a") (data (i32.const 197673) "a") (data (i32.const 197676) "a") (data (i32.const 197679) "a") (data (i32.const 197682) "a") (data (i32.const 197685) "a") (data (i32.const 197688) "a") (data (i32.const 197691) "a") (data (i32.const 197694) "a") (data (i32.const 197697) "a") (data (i32.const 197700) "a") (data (i32.const 197703) "a") (data (i32.const 197706) "a") (data (i32.const 197709) "a") (data (i32.const 197712) "a") (data (i32.const 197715) "a") (data (i32.const 197718) "a") (data (i32.const 197721) "a") (data (i32.const 197724) "a") (data (i32.const 197727) "a") (data (i32.const 197730) "a") (data (i32.const 197733) "a") (data (i32.const 197736) "a") (data (i32.const 197739) "a") (data (i32.const 197742) "a") (data (i32.const 197745) "a") (data (i32.const 197748) "a") (data (i32.const 197751) "a") (data (i32.const 197754) "a") (data (i32.const 197757) "a") (data (i32.const 197760) "a") (data (i32.const 197763) "a") (data (i32.const 197766) "a") (data (i32.const 197769) "a") (data (i32.const 197772) "a") (data (i32.const 197775) "a") (data (i32.const 197778) "a") (data (i32.const 197781) "a") (data (i32.const 197784) "a") (data (i32.const 197787) "a") (data (i32.const 197790) "a") (data (i32.const 197793) "a") (data (i32.const 197796) "a") (data (i32.const 197799) "a") (data (i32.const 197802) "a") (data (i32.const 197805) "a") (data (i32.const 197808) "a") (data (i32.const 197811) "a") (data (i32.const 197814) "a") (data (i32.const 197817) "a") (data (i32.const 197820) "a") (data (i32.const 197823) "a") (data (i32.const 197826) "a") (data (i32.const 197829) "a") (data (i32.const 197832) "a") (data (i32.const 197835) "a") (data (i32.const 197838) "a") (data (i32.const 197841) "a") (data (i32.const 197844) "a") (data (i32.const 197847) "a") (data (i32.const 197850) "a") (data (i32.const 197853) "a") (data (i32.const 197856) "a") (data (i32.const 197859) "a") (data (i32.const 197862) "a") (data (i32.const 197865) "a") (data (i32.const 197868) "a") (data (i32.const 197871) "a") (data (i32.const 197874) "a") (data (i32.const 197877) "a") (data (i32.const 197880) "a") (data (i32.const 197883) "a") (data (i32.const 197886) "a") (data (i32.const 197889) "a") (data (i32.const 197892) "a") (data (i32.const 197895) "a") (data (i32.const 197898) "a") (data (i32.const 197901) "a") (data (i32.const 197904) "a") (data (i32.const 197907) "a") (data (i32.const 197910) "a") (data (i32.const 197913) "a") (data (i32.const 197916) "a") (data (i32.const 197919) "a") (data (i32.const 197922) "a") (data (i32.const 197925) "a") (data (i32.const 197928) "a") (data (i32.const 197931) "a") (data (i32.const 197934) "a") (data (i32.const 197937) "a") (data (i32.const 197940) "a") (data (i32.const 197943) "a") (data (i32.const 197946) "a") (data (i32.const 197949) "a") (data (i32.const 197952) "a") (data (i32.const 197955) "a") (data (i32.const 197958) "a") (data (i32.const 197961) "a") (data (i32.const 197964) "a") (data (i32.const 197967) "a") (data (i32.const 197970) "a") (data (i32.const 197973) "a") (data (i32.const 197976) "a") (data (i32.const 197979) "a") (data (i32.const 197982) "a") (data (i32.const 197985) "a") (data (i32.const 197988) "a") (data (i32.const 197991) "a") (data (i32.const 197994) "a") (data (i32.const 197997) "a") (data (i32.const 198000) "a") (data (i32.const 198003) "a") (data (i32.const 198006) "a") (data (i32.const 198009) "a") (data (i32.const 198012) "a") (data (i32.const 198015) "a") (data (i32.const 198018) "a") (data (i32.const 198021) "a") (data (i32.const 198024) "a") (data (i32.const 198027) "a") (data (i32.const 198030) "a") (data (i32.const 198033) "a") (data (i32.const 198036) "a") (data (i32.const 198039) "a") (data (i32.const 198042) "a") (data (i32.const 198045) "a") (data (i32.const 198048) "a") (data (i32.const 198051) "a") (data (i32.const 198054) "a") (data (i32.const 198057) "a") (data (i32.const 198060) "a") (data (i32.const 198063) "a") (data (i32.const 198066) "a") (data (i32.const 198069) "a") (data (i32.const 198072) "a") (data (i32.const 198075) "a") (data (i32.const 198078) "a") (data (i32.const 198081) "a") (data (i32.const 198084) "a") (data (i32.const 198087) "a") (data (i32.const 198090) "a") (data (i32.const 198093) "a") (data (i32.const 198096) "a") (data (i32.const 198099) "a") (data (i32.const 198102) "a") (data (i32.const 198105) "a") (data (i32.const 198108) "a") (data (i32.const 198111) "a") (data (i32.const 198114) "a") (data (i32.const 198117) "a") (data (i32.const 198120) "a") (data (i32.const 198123) "a") (data (i32.const 198126) "a") (data (i32.const 198129) "a") (data (i32.const 198132) "a") (data (i32.const 198135) "a") (data (i32.const 198138) "a") (data (i32.const 198141) "a") (data (i32.const 198144) "a") (data (i32.const 198147) "a") (data (i32.const 198150) "a") (data (i32.const 198153) "a") (data (i32.const 198156) "a") (data (i32.const 198159) "a") (data (i32.const 198162) "a") (data (i32.const 198165) "a") (data (i32.const 198168) "a") (data (i32.const 198171) "a") (data (i32.const 198174) "a") (data (i32.const 198177) "a") (data (i32.const 198180) "a") (data (i32.const 198183) "a") (data (i32.const 198186) "a") (data (i32.const 198189) "a") (data (i32.const 198192) "a") (data (i32.const 198195) "a") (data (i32.const 198198) "a") (data (i32.const 198201) "a") (data (i32.const 198204) "a") (data (i32.const 198207) "a") (data (i32.const 198210) "a") (data (i32.const 198213) "a") (data (i32.const 198216) "a") (data (i32.const 198219) "a") (data (i32.const 198222) "a") (data (i32.const 198225) "a") (data (i32.const 198228) "a") (data (i32.const 198231) "a") (data (i32.const 198234) "a") (data (i32.const 198237) "a") (data (i32.const 198240) "a") (data (i32.const 198243) "a") (data (i32.const 198246) "a") (data (i32.const 198249) "a") (data (i32.const 198252) "a") (data (i32.const 198255) "a") (data (i32.const 198258) "a") (data (i32.const 198261) "a") (data (i32.const 198264) "a") (data (i32.const 198267) "a") (data (i32.const 198270) "a") (data (i32.const 198273) "a") (data (i32.const 198276) "a") (data (i32.const 198279) "a") (data (i32.const 198282) "a") (data (i32.const 198285) "a") (data (i32.const 198288) "a") (data (i32.const 198291) "a") (data (i32.const 198294) "a") (data (i32.const 198297) "a") (data (i32.const 198300) "a") (data (i32.const 198303) "a") (data (i32.const 198306) "a") (data (i32.const 198309) "a") (data (i32.const 198312) "a") (data (i32.const 198315) "a") (data (i32.const 198318) "a") (data (i32.const 198321) "a") (data (i32.const 198324) "a") (data (i32.const 198327) "a") (data (i32.const 198330) "a") (data (i32.const 198333) "a") (data (i32.const 198336) "a") (data (i32.const 198339) "a") (data (i32.const 198342) "a") (data (i32.const 198345) "a") (data (i32.const 198348) "a") (data (i32.const 198351) "a") (data (i32.const 198354) "a") (data (i32.const 198357) "a") (data (i32.const 198360) "a") (data (i32.const 198363) "a") (data (i32.const 198366) "a") (data (i32.const 198369) "a") (data (i32.const 198372) "a") (data (i32.const 198375) "a") (data (i32.const 198378) "a") (data (i32.const 198381) "a") (data (i32.const 198384) "a") (data (i32.const 198387) "a") (data (i32.const 198390) "a") (data (i32.const 198393) "a") (data (i32.const 198396) "a") (data (i32.const 198399) "a") (data (i32.const 198402) "a") (data (i32.const 198405) "a") (data (i32.const 198408) "a") (data (i32.const 198411) "a") (data (i32.const 198414) "a") (data (i32.const 198417) "a") (data (i32.const 198420) "a") (data (i32.const 198423) "a") (data (i32.const 198426) "a") (data (i32.const 198429) "a") (data (i32.const 198432) "a") (data (i32.const 198435) "a") (data (i32.const 198438) "a") (data (i32.const 198441) "a") (data (i32.const 198444) "a") (data (i32.const 198447) "a") (data (i32.const 198450) "a") (data (i32.const 198453) "a") (data (i32.const 198456) "a") (data (i32.const 198459) "a") (data (i32.const 198462) "a") (data (i32.const 198465) "a") (data (i32.const 198468) "a") (data (i32.const 198471) "a") (data (i32.const 198474) "a") (data (i32.const 198477) "a") (data (i32.const 198480) "a") (data (i32.const 198483) "a") (data (i32.const 198486) "a") (data (i32.const 198489) "a") (data (i32.const 198492) "a") (data (i32.const 198495) "a") (data (i32.const 198498) "a") (data (i32.const 198501) "a") (data (i32.const 198504) "a") (data (i32.const 198507) "a") (data (i32.const 198510) "a") (data (i32.const 198513) "a") (data (i32.const 198516) "a") (data (i32.const 198519) "a") (data (i32.const 198522) "a") (data (i32.const 198525) "a") (data (i32.const 198528) "a") (data (i32.const 198531) "a") (data (i32.const 198534) "a") (data (i32.const 198537) "a") (data (i32.const 198540) "a") (data (i32.const 198543) "a") (data (i32.const 198546) "a") (data (i32.const 198549) "a") (data (i32.const 198552) "a") (data (i32.const 198555) "a") (data (i32.const 198558) "a") (data (i32.const 198561) "a") (data (i32.const 198564) "a") (data (i32.const 198567) "a") (data (i32.const 198570) "a") (data (i32.const 198573) "a") (data (i32.const 198576) "a") (data (i32.const 198579) "a") (data (i32.const 198582) "a") (data (i32.const 198585) "a") (data (i32.const 198588) "a") (data (i32.const 198591) "a") (data (i32.const 198594) "a") (data (i32.const 198597) "a") (data (i32.const 198600) "a") (data (i32.const 198603) "a") (data (i32.const 198606) "a") (data (i32.const 198609) "a") (data (i32.const 198612) "a") (data (i32.const 198615) "a") (data (i32.const 198618) "a") (data (i32.const 198621) "a") (data (i32.const 198624) "a") (data (i32.const 198627) "a") (data (i32.const 198630) "a") (data (i32.const 198633) "a") (data (i32.const 198636) "a") (data (i32.const 198639) "a") (data (i32.const 198642) "a") (data (i32.const 198645) "a") (data (i32.const 198648) "a") (data (i32.const 198651) "a") (data (i32.const 198654) "a") (data (i32.const 198657) "a") (data (i32.const 198660) "a") (data (i32.const 198663) "a") (data (i32.const 198666) "a") (data (i32.const 198669) "a") (data (i32.const 198672) "a") (data (i32.const 198675) "a") (data (i32.const 198678) "a") (data (i32.const 198681) "a") (data (i32.const 198684) "a") (data (i32.const 198687) "a") (data (i32.const 198690) "a") (data (i32.const 198693) "a") (data (i32.const 198696) "a") (data (i32.const 198699) "a") (data (i32.const 198702) "a") (data (i32.const 198705) "a") (data (i32.const 198708) "a") (data (i32.const 198711) "a") (data (i32.const 198714) "a") (data (i32.const 198717) "a") (data (i32.const 198720) "a") (data (i32.const 198723) "a") (data (i32.const 198726) "a") (data (i32.const 198729) "a") (data (i32.const 198732) "a") (data (i32.const 198735) "a") (data (i32.const 198738) "a") (data (i32.const 198741) "a") (data (i32.const 198744) "a") (data (i32.const 198747) "a") (data (i32.const 198750) "a") (data (i32.const 198753) "a") (data (i32.const 198756) "a") (data (i32.const 198759) "a") (data (i32.const 198762) "a") (data (i32.const 198765) "a") (data (i32.const 198768) "a") (data (i32.const 198771) "a") (data (i32.const 198774) "a") (data (i32.const 198777) "a") (data (i32.const 198780) "a") (data (i32.const 198783) "a") (data (i32.const 198786) "a") (data (i32.const 198789) "a") (data (i32.const 198792) "a") (data (i32.const 198795) "a") (data (i32.const 198798) "a") (data (i32.const 198801) "a") (data (i32.const 198804) "a") (data (i32.const 198807) "a") (data (i32.const 198810) "a") (data (i32.const 198813) "a") (data (i32.const 198816) "a") (data (i32.const 198819) "a") (data (i32.const 198822) "a") (data (i32.const 198825) "a") (data (i32.const 198828) "a") (data (i32.const 198831) "a") (data (i32.const 198834) "a") (data (i32.const 198837) "a") (data (i32.const 198840) "a") (data (i32.const 198843) "a") (data (i32.const 198846) "a") (data (i32.const 198849) "a") (data (i32.const 198852) "a") (data (i32.const 198855) "a") (data (i32.const 198858) "a") (data (i32.const 198861) "a") (data (i32.const 198864) "a") (data (i32.const 198867) "a") (data (i32.const 198870) "a") (data (i32.const 198873) "a") (data (i32.const 198876) "a") (data (i32.const 198879) "a") (data (i32.const 198882) "a") (data (i32.const 198885) "a") (data (i32.const 198888) "a") (data (i32.const 198891) "a") (data (i32.const 198894) "a") (data (i32.const 198897) "a") (data (i32.const 198900) "a") (data (i32.const 198903) "a") (data (i32.const 198906) "a") (data (i32.const 198909) "a") (data (i32.const 198912) "a") (data (i32.const 198915) "a") (data (i32.const 198918) "a") (data (i32.const 198921) "a") (data (i32.const 198924) "a") (data (i32.const 198927) "a") (data (i32.const 198930) "a") (data (i32.const 198933) "a") (data (i32.const 198936) "a") (data (i32.const 198939) "a") (data (i32.const 198942) "a") (data (i32.const 198945) "a") (data (i32.const 198948) "a") (data (i32.const 198951) "a") (data (i32.const 198954) "a") (data (i32.const 198957) "a") (data (i32.const 198960) "a") (data (i32.const 198963) "a") (data (i32.const 198966) "a") (data (i32.const 198969) "a") (data (i32.const 198972) "a") (data (i32.const 198975) "a") (data (i32.const 198978) "a") (data (i32.const 198981) "a") (data (i32.const 198984) "a") (data (i32.const 198987) "a") (data (i32.const 198990) "a") (data (i32.const 198993) "a") (data (i32.const 198996) "a") (data (i32.const 198999) "a") (data (i32.const 199002) "a") (data (i32.const 199005) "a") (data (i32.const 199008) "a") (data (i32.const 199011) "a") (data (i32.const 199014) "a") (data (i32.const 199017) "a") (data (i32.const 199020) "a") (data (i32.const 199023) "a") (data (i32.const 199026) "a") (data (i32.const 199029) "a") (data (i32.const 199032) "a") (data (i32.const 199035) "a") (data (i32.const 199038) "a") (data (i32.const 199041) "a") (data (i32.const 199044) "a") (data (i32.const 199047) "a") (data (i32.const 199050) "a") (data (i32.const 199053) "a") (data (i32.const 199056) "a") (data (i32.const 199059) "a") (data (i32.const 199062) "a") (data (i32.const 199065) "a") (data (i32.const 199068) "a") (data (i32.const 199071) "a") (data (i32.const 199074) "a") (data (i32.const 199077) "a") (data (i32.const 199080) "a") (data (i32.const 199083) "a") (data (i32.const 199086) "a") (data (i32.const 199089) "a") (data (i32.const 199092) "a") (data (i32.const 199095) "a") (data (i32.const 199098) "a") (data (i32.const 199101) "a") (data (i32.const 199104) "a") (data (i32.const 199107) "a") (data (i32.const 199110) "a") (data (i32.const 199113) "a") (data (i32.const 199116) "a") (data (i32.const 199119) "a") (data (i32.const 199122) "a") (data (i32.const 199125) "a") (data (i32.const 199128) "a") (data (i32.const 199131) "a") (data (i32.const 199134) "a") (data (i32.const 199137) "a") (data (i32.const 199140) "a") (data (i32.const 199143) "a") (data (i32.const 199146) "a") (data (i32.const 199149) "a") (data (i32.const 199152) "a") (data (i32.const 199155) "a") (data (i32.const 199158) "a") (data (i32.const 199161) "a") (data (i32.const 199164) "a") (data (i32.const 199167) "a") (data (i32.const 199170) "a") (data (i32.const 199173) "a") (data (i32.const 199176) "a") (data (i32.const 199179) "a") (data (i32.const 199182) "a") (data (i32.const 199185) "a") (data (i32.const 199188) "a") (data (i32.const 199191) "a") (data (i32.const 199194) "a") (data (i32.const 199197) "a") (data (i32.const 199200) "a") (data (i32.const 199203) "a") (data (i32.const 199206) "a") (data (i32.const 199209) "a") (data (i32.const 199212) "a") (data (i32.const 199215) "a") (data (i32.const 199218) "a") (data (i32.const 199221) "a") (data (i32.const 199224) "a") (data (i32.const 199227) "a") (data (i32.const 199230) "a") (data (i32.const 199233) "a") (data (i32.const 199236) "a") (data (i32.const 199239) "a") (data (i32.const 199242) "a") (data (i32.const 199245) "a") (data (i32.const 199248) "a") (data (i32.const 199251) "a") (data (i32.const 199254) "a") (data (i32.const 199257) "a") (data (i32.const 199260) "a") (data (i32.const 199263) "a") (data (i32.const 199266) "a") (data (i32.const 199269) "a") (data (i32.const 199272) "a") (data (i32.const 199275) "a") (data (i32.const 199278) "a") (data (i32.const 199281) "a") (data (i32.const 199284) "a") (data (i32.const 199287) "a") (data (i32.const 199290) "a") (data (i32.const 199293) "a") (data (i32.const 199296) "a") (data (i32.const 199299) "a") (data (i32.const 199302) "a") (data (i32.const 199305) "a") (data (i32.const 199308) "a") (data (i32.const 199311) "a") (data (i32.const 199314) "a") (data (i32.const 199317) "a") (data (i32.const 199320) "a") (data (i32.const 199323) "a") (data (i32.const 199326) "a") (data (i32.const 199329) "a") (data (i32.const 199332) "a") (data (i32.const 199335) "a") (data (i32.const 199338) "a") (data (i32.const 199341) "a") (data (i32.const 199344) "a") (data (i32.const 199347) "a") (data (i32.const 199350) "a") (data (i32.const 199353) "a") (data (i32.const 199356) "a") (data (i32.const 199359) "a") (data (i32.const 199362) "a") (data (i32.const 199365) "a") (data (i32.const 199368) "a") (data (i32.const 199371) "a") (data (i32.const 199374) "a") (data (i32.const 199377) "a") (data (i32.const 199380) "a") (data (i32.const 199383) "a") (data (i32.const 199386) "a") (data (i32.const 199389) "a") (data (i32.const 199392) "a") (data (i32.const 199395) "a") (data (i32.const 199398) "a") (data (i32.const 199401) "a") (data (i32.const 199404) "a") (data (i32.const 199407) "a") (data (i32.const 199410) "a") (data (i32.const 199413) "a") (data (i32.const 199416) "a") (data (i32.const 199419) "a") (data (i32.const 199422) "a") (data (i32.const 199425) "a") (data (i32.const 199428) "a") (data (i32.const 199431) "a") (data (i32.const 199434) "a") (data (i32.const 199437) "a") (data (i32.const 199440) "a") (data (i32.const 199443) "a") (data (i32.const 199446) "a") (data (i32.const 199449) "a") (data (i32.const 199452) "a") (data (i32.const 199455) "a") (data (i32.const 199458) "a") (data (i32.const 199461) "a") (data (i32.const 199464) "a") (data (i32.const 199467) "a") (data (i32.const 199470) "a") (data (i32.const 199473) "a") (data (i32.const 199476) "a") (data (i32.const 199479) "a") (data (i32.const 199482) "a") (data (i32.const 199485) "a") (data (i32.const 199488) "a") (data (i32.const 199491) "a") (data (i32.const 199494) "a") (data (i32.const 199497) "a") (data (i32.const 199500) "a") (data (i32.const 199503) "a") (data (i32.const 199506) "a") (data (i32.const 199509) "a") (data (i32.const 199512) "a") (data (i32.const 199515) "a") (data (i32.const 199518) "a") (data (i32.const 199521) "a") (data (i32.const 199524) "a") (data (i32.const 199527) "a") (data (i32.const 199530) "a") (data (i32.const 199533) "a") (data (i32.const 199536) "a") (data (i32.const 199539) "a") (data (i32.const 199542) "a") (data (i32.const 199545) "a") (data (i32.const 199548) "a") (data (i32.const 199551) "a") (data (i32.const 199554) "a") (data (i32.const 199557) "a") (data (i32.const 199560) "a") (data (i32.const 199563) "a") (data (i32.const 199566) "a") (data (i32.const 199569) "a") (data (i32.const 199572) "a") (data (i32.const 199575) "a") (data (i32.const 199578) "a") (data (i32.const 199581) "a") (data (i32.const 199584) "a") (data (i32.const 199587) "a") (data (i32.const 199590) "a") (data (i32.const 199593) "a") (data (i32.const 199596) "a") (data (i32.const 199599) "a") (data (i32.const 199602) "a") (data (i32.const 199605) "a") (data (i32.const 199608) "a") (data (i32.const 199611) "a") (data (i32.const 199614) "a") (data (i32.const 199617) "a") (data (i32.const 199620) "a") (data (i32.const 199623) "a") (data (i32.const 199626) "a") (data (i32.const 199629) "a") (data (i32.const 199632) "a") (data (i32.const 199635) "a") (data (i32.const 199638) "a") (data (i32.const 199641) "a") (data (i32.const 199644) "a") (data (i32.const 199647) "a") (data (i32.const 199650) "a") (data (i32.const 199653) "a") (data (i32.const 199656) "a") (data (i32.const 199659) "a") (data (i32.const 199662) "a") (data (i32.const 199665) "a") (data (i32.const 199668) "a") (data (i32.const 199671) "a") (data (i32.const 199674) "a") (data (i32.const 199677) "a") (data (i32.const 199680) "a") (data (i32.const 199683) "a") (data (i32.const 199686) "a") (data (i32.const 199689) "a") (data (i32.const 199692) "a") (data (i32.const 199695) "a") (data (i32.const 199698) "a") (data (i32.const 199701) "a") (data (i32.const 199704) "a") (data (i32.const 199707) "a") (data (i32.const 199710) "a") (data (i32.const 199713) "a") (data (i32.const 199716) "a") (data (i32.const 199719) "a") (data (i32.const 199722) "a") (data (i32.const 199725) "a") (data (i32.const 199728) "a") (data (i32.const 199731) "a") (data (i32.const 199734) "a") (data (i32.const 199737) "a") (data (i32.const 199740) "a") (data (i32.const 199743) "a") (data (i32.const 199746) "a") (data (i32.const 199749) "a") (data (i32.const 199752) "a") (data (i32.const 199755) "a") (data (i32.const 199758) "a") (data (i32.const 199761) "a") (data (i32.const 199764) "a") (data (i32.const 199767) "a") (data (i32.const 199770) "a") (data (i32.const 199773) "a") (data (i32.const 199776) "a") (data (i32.const 199779) "a") (data (i32.const 199782) "a") (data (i32.const 199785) "a") (data (i32.const 199788) "a") (data (i32.const 199791) "a") (data (i32.const 199794) "a") (data (i32.const 199797) "a") (data (i32.const 199800) "a") (data (i32.const 199803) "a") (data (i32.const 199806) "a") (data (i32.const 199809) "a") (data (i32.const 199812) "a") (data (i32.const 199815) "a") (data (i32.const 199818) "a") (data (i32.const 199821) "a") (data (i32.const 199824) "a") (data (i32.const 199827) "a") (data (i32.const 199830) "a") (data (i32.const 199833) "a") (data (i32.const 199836) "a") (data (i32.const 199839) "a") (data (i32.const 199842) "a") (data (i32.const 199845) "a") (data (i32.const 199848) "a") (data (i32.const 199851) "a") (data (i32.const 199854) "a") (data (i32.const 199857) "a") (data (i32.const 199860) "a") (data (i32.const 199863) "a") (data (i32.const 199866) "a") (data (i32.const 199869) "a") (data (i32.const 199872) "a") (data (i32.const 199875) "a") (data (i32.const 199878) "a") (data (i32.const 199881) "a") (data (i32.const 199884) "a") (data (i32.const 199887) "a") (data (i32.const 199890) "a") (data (i32.const 199893) "a") (data (i32.const 199896) "a") (data (i32.const 199899) "a") (data (i32.const 199902) "a") (data (i32.const 199905) "a") (data (i32.const 199908) "a") (data (i32.const 199911) "a") (data (i32.const 199914) "a") (data (i32.const 199917) "a") (data (i32.const 199920) "a") (data (i32.const 199923) "a") (data (i32.const 199926) "a") (data (i32.const 199929) "a") (data (i32.const 199932) "a") (data (i32.const 199935) "a") (data (i32.const 199938) "a") (data (i32.const 199941) "a") (data (i32.const 199944) "a") (data (i32.const 199947) "a") (data (i32.const 199950) "a") (data (i32.const 199953) "a") (data (i32.const 199956) "a") (data (i32.const 199959) "a") (data (i32.const 199962) "a") (data (i32.const 199965) "a") (data (i32.const 199968) "a") (data (i32.const 199971) "a") (data (i32.const 199974) "a") (data (i32.const 199977) "a") (data (i32.const 199980) "a") (data (i32.const 199983) "a") (data (i32.const 199986) "a") (data (i32.const 199989) "a") (data (i32.const 199992) "a") (data (i32.const 199995) "a") (data (i32.const 199998) "a") (data (i32.const 200001) "a") (data (i32.const 200004) "a") (data (i32.const 200007) "a") (data (i32.const 200010) "a") (data (i32.const 200013) "a") (data (i32.const 200016) "a") (data (i32.const 200019) "a") (data (i32.const 200022) "a") (data (i32.const 200025) "a") (data (i32.const 200028) "a") (data (i32.const 200031) "a") (data (i32.const 200034) "a") (data (i32.const 200037) "a") (data (i32.const 200040) "a") (data (i32.const 200043) "a") (data (i32.const 200046) "a") (data (i32.const 200049) "a") (data (i32.const 200052) "a") (data (i32.const 200055) "a") (data (i32.const 200058) "a") (data (i32.const 200061) "a") (data (i32.const 200064) "a") (data (i32.const 200067) "a") (data (i32.const 200070) "a") (data (i32.const 200073) "a") (data (i32.const 200076) "a") (data (i32.const 200079) "a") (data (i32.const 200082) "a") (data (i32.const 200085) "a") (data (i32.const 200088) "a") (data (i32.const 200091) "a") (data (i32.const 200094) "a") (data (i32.const 200097) "a") (data (i32.const 200100) "a") (data (i32.const 200103) "a") (data (i32.const 200106) "a") (data (i32.const 200109) "a") (data (i32.const 200112) "a") (data (i32.const 200115) "a") (data (i32.const 200118) "a") (data (i32.const 200121) "a") (data (i32.const 200124) "a") (data (i32.const 200127) "a") (data (i32.const 200130) "a") (data (i32.const 200133) "a") (data (i32.const 200136) "a") (data (i32.const 200139) "a") (data (i32.const 200142) "a") (data (i32.const 200145) "a") (data (i32.const 200148) "a") (data (i32.const 200151) "a") (data (i32.const 200154) "a") (data (i32.const 200157) "a") (data (i32.const 200160) "a") (data (i32.const 200163) "a") (data (i32.const 200166) "a") (data (i32.const 200169) "a") (data (i32.const 200172) "a") (data (i32.const 200175) "a") (data (i32.const 200178) "a") (data (i32.const 200181) "a") (data (i32.const 200184) "a") (data (i32.const 200187) "a") (data (i32.const 200190) "a") (data (i32.const 200193) "a") (data (i32.const 200196) "a") (data (i32.const 200199) "a") (data (i32.const 200202) "a") (data (i32.const 200205) "a") (data (i32.const 200208) "a") (data (i32.const 200211) "a") (data (i32.const 200214) "a") (data (i32.const 200217) "a") (data (i32.const 200220) "a") (data (i32.const 200223) "a") (data (i32.const 200226) "a") (data (i32.const 200229) "a") (data (i32.const 200232) "a") (data (i32.const 200235) "a") (data (i32.const 200238) "a") (data (i32.const 200241) "a") (data (i32.const 200244) "a") (data (i32.const 200247) "a") (data (i32.const 200250) "a") (data (i32.const 200253) "a") (data (i32.const 200256) "a") (data (i32.const 200259) "a") (data (i32.const 200262) "a") (data (i32.const 200265) "a") (data (i32.const 200268) "a") (data (i32.const 200271) "a") (data (i32.const 200274) "a") (data (i32.const 200277) "a") (data (i32.const 200280) "a") (data (i32.const 200283) "a") (data (i32.const 200286) "a") (data (i32.const 200289) "a") (data (i32.const 200292) "a") (data (i32.const 200295) "a") (data (i32.const 200298) "a") (data (i32.const 200301) "a") (data (i32.const 200304) "a") (data (i32.const 200307) "a") (data (i32.const 200310) "a") (data (i32.const 200313) "a") (data (i32.const 200316) "a") (data (i32.const 200319) "a") (data (i32.const 200322) "a") (data (i32.const 200325) "a") (data (i32.const 200328) "a") (data (i32.const 200331) "a") (data (i32.const 200334) "a") (data (i32.const 200337) "a") (data (i32.const 200340) "a") (data (i32.const 200343) "a") (data (i32.const 200346) "a") (data (i32.const 200349) "a") (data (i32.const 200352) "a") (data (i32.const 200355) "a") (data (i32.const 200358) "a") (data (i32.const 200361) "a") (data (i32.const 200364) "a") (data (i32.const 200367) "a") (data (i32.const 200370) "a") (data (i32.const 200373) "a") (data (i32.const 200376) "a") (data (i32.const 200379) "a") (data (i32.const 200382) "a") (data (i32.const 200385) "a") (data (i32.const 200388) "a") (data (i32.const 200391) "a") (data (i32.const 200394) "a") (data (i32.const 200397) "a") (data (i32.const 200400) "a") (data (i32.const 200403) "a") (data (i32.const 200406) "a") (data (i32.const 200409) "a") (data (i32.const 200412) "a") (data (i32.const 200415) "a") (data (i32.const 200418) "a") (data (i32.const 200421) "a") (data (i32.const 200424) "a") (data (i32.const 200427) "a") (data (i32.const 200430) "a") (data (i32.const 200433) "a") (data (i32.const 200436) "a") (data (i32.const 200439) "a") (data (i32.const 200442) "a") (data (i32.const 200445) "a") (data (i32.const 200448) "a") (data (i32.const 200451) "a") (data (i32.const 200454) "a") (data (i32.const 200457) "a") (data (i32.const 200460) "a") (data (i32.const 200463) "a") (data (i32.const 200466) "a") (data (i32.const 200469) "a") (data (i32.const 200472) "a") (data (i32.const 200475) "a") (data (i32.const 200478) "a") (data (i32.const 200481) "a") (data (i32.const 200484) "a") (data (i32.const 200487) "a") (data (i32.const 200490) "a") (data (i32.const 200493) "a") (data (i32.const 200496) "a") (data (i32.const 200499) "a") (data (i32.const 200502) "a") (data (i32.const 200505) "a") (data (i32.const 200508) "a") (data (i32.const 200511) "a") (data (i32.const 200514) "a") (data (i32.const 200517) "a") (data (i32.const 200520) "a") (data (i32.const 200523) "a") (data (i32.const 200526) "a") (data (i32.const 200529) "a") (data (i32.const 200532) "a") (data (i32.const 200535) "a") (data (i32.const 200538) "a") (data (i32.const 200541) "a") (data (i32.const 200544) "a") (data (i32.const 200547) "a") (data (i32.const 200550) "a") (data (i32.const 200553) "a") (data (i32.const 200556) "a") (data (i32.const 200559) "a") (data (i32.const 200562) "a") (data (i32.const 200565) "a") (data (i32.const 200568) "a") (data (i32.const 200571) "a") (data (i32.const 200574) "a") (data (i32.const 200577) "a") (data (i32.const 200580) "a") (data (i32.const 200583) "a") (data (i32.const 200586) "a") (data (i32.const 200589) "a") (data (i32.const 200592) "a") (data (i32.const 200595) "a") (data (i32.const 200598) "a") (data (i32.const 200601) "a") (data (i32.const 200604) "a") (data (i32.const 200607) "a") (data (i32.const 200610) "a") (data (i32.const 200613) "a") (data (i32.const 200616) "a") (data (i32.const 200619) "a") (data (i32.const 200622) "a") (data (i32.const 200625) "a") (data (i32.const 200628) "a") (data (i32.const 200631) "a") (data (i32.const 200634) "a") (data (i32.const 200637) "a") (data (i32.const 200640) "a") (data (i32.const 200643) "a") (data (i32.const 200646) "a") (data (i32.const 200649) "a") (data (i32.const 200652) "a") (data (i32.const 200655) "a") (data (i32.const 200658) "a") (data (i32.const 200661) "a") (data (i32.const 200664) "a") (data (i32.const 200667) "a") (data (i32.const 200670) "a") (data (i32.const 200673) "a") (data (i32.const 200676) "a") (data (i32.const 200679) "a") (data (i32.const 200682) "a") (data (i32.const 200685) "a") (data (i32.const 200688) "a") (data (i32.const 200691) "a") (data (i32.const 200694) "a") (data (i32.const 200697) "a") (data (i32.const 200700) "a") (data (i32.const 200703) "a") (data (i32.const 200706) "a") (data (i32.const 200709) "a") (data (i32.const 200712) "a") (data (i32.const 200715) "a") (data (i32.const 200718) "a") (data (i32.const 200721) "a") (data (i32.const 200724) "a") (data (i32.const 200727) "a") (data (i32.const 200730) "a") (data (i32.const 200733) "a") (data (i32.const 200736) "a") (data (i32.const 200739) "a") (data (i32.const 200742) "a") (data (i32.const 200745) "a") (data (i32.const 200748) "a") (data (i32.const 200751) "a") (data (i32.const 200754) "a") (data (i32.const 200757) "a") (data (i32.const 200760) "a") (data (i32.const 200763) "a") (data (i32.const 200766) "a") (data (i32.const 200769) "a") (data (i32.const 200772) "a") (data (i32.const 200775) "a") (data (i32.const 200778) "a") (data (i32.const 200781) "a") (data (i32.const 200784) "a") (data (i32.const 200787) "a") (data (i32.const 200790) "a") (data (i32.const 200793) "a") (data (i32.const 200796) "a") (data (i32.const 200799) "a") (data (i32.const 200802) "a") (data (i32.const 200805) "a") (data (i32.const 200808) "a") (data (i32.const 200811) "a") (data (i32.const 200814) "a") (data (i32.const 200817) "a") (data (i32.const 200820) "a") (data (i32.const 200823) "a") (data (i32.const 200826) "a") (data (i32.const 200829) "a") (data (i32.const 200832) "a") (data (i32.const 200835) "a") (data (i32.const 200838) "a") (data (i32.const 200841) "a") (data (i32.const 200844) "a") (data (i32.const 200847) "a") (data (i32.const 200850) "a") (data (i32.const 200853) "a") (data (i32.const 200856) "a") (data (i32.const 200859) "a") (data (i32.const 200862) "a") (data (i32.const 200865) "a") (data (i32.const 200868) "a") (data (i32.const 200871) "a") (data (i32.const 200874) "a") (data (i32.const 200877) "a") (data (i32.const 200880) "a") (data (i32.const 200883) "a") (data (i32.const 200886) "a") (data (i32.const 200889) "a") (data (i32.const 200892) "a") (data (i32.const 200895) "a") (data (i32.const 200898) "a") (data (i32.const 200901) "a") (data (i32.const 200904) "a") (data (i32.const 200907) "a") (data (i32.const 200910) "a") (data (i32.const 200913) "a") (data (i32.const 200916) "a") (data (i32.const 200919) "a") (data (i32.const 200922) "a") (data (i32.const 200925) "a") (data (i32.const 200928) "a") (data (i32.const 200931) "a") (data (i32.const 200934) "a") (data (i32.const 200937) "a") (data (i32.const 200940) "a") (data (i32.const 200943) "a") (data (i32.const 200946) "a") (data (i32.const 200949) "a") (data (i32.const 200952) "a") (data (i32.const 200955) "a") (data (i32.const 200958) "a") (data (i32.const 200961) "a") (data (i32.const 200964) "a") (data (i32.const 200967) "a") (data (i32.const 200970) "a") (data (i32.const 200973) "a") (data (i32.const 200976) "a") (data (i32.const 200979) "a") (data (i32.const 200982) "a") (data (i32.const 200985) "a") (data (i32.const 200988) "a") (data (i32.const 200991) "a") (data (i32.const 200994) "a") (data (i32.const 200997) "a") (data (i32.const 201000) "a") (data (i32.const 201003) "a") (data (i32.const 201006) "a") (data (i32.const 201009) "a") (data (i32.const 201012) "a") (data (i32.const 201015) "a") (data (i32.const 201018) "a") (data (i32.const 201021) "a") (data (i32.const 201024) "a") (data (i32.const 201027) "a") (data (i32.const 201030) "a") (data (i32.const 201033) "a") (data (i32.const 201036) "a") (data (i32.const 201039) "a") (data (i32.const 201042) "a") (data (i32.const 201045) "a") (data (i32.const 201048) "a") (data (i32.const 201051) "a") (data (i32.const 201054) "a") (data (i32.const 201057) "a") (data (i32.const 201060) "a") (data (i32.const 201063) "a") (data (i32.const 201066) "a") (data (i32.const 201069) "a") (data (i32.const 201072) "a") (data (i32.const 201075) "a") (data (i32.const 201078) "a") (data (i32.const 201081) "a") (data (i32.const 201084) "a") (data (i32.const 201087) "a") (data (i32.const 201090) "a") (data (i32.const 201093) "a") (data (i32.const 201096) "a") (data (i32.const 201099) "a") (data (i32.const 201102) "a") (data (i32.const 201105) "a") (data (i32.const 201108) "a") (data (i32.const 201111) "a") (data (i32.const 201114) "a") (data (i32.const 201117) "a") (data (i32.const 201120) "a") (data (i32.const 201123) "a") (data (i32.const 201126) "a") (data (i32.const 201129) "a") (data (i32.const 201132) "a") (data (i32.const 201135) "a") (data (i32.const 201138) "a") (data (i32.const 201141) "a") (data (i32.const 201144) "a") (data (i32.const 201147) "a") (data (i32.const 201150) "a") (data (i32.const 201153) "a") (data (i32.const 201156) "a") (data (i32.const 201159) "a") (data (i32.const 201162) "a") (data (i32.const 201165) "a") (data (i32.const 201168) "a") (data (i32.const 201171) "a") (data (i32.const 201174) "a") (data (i32.const 201177) "a") (data (i32.const 201180) "a") (data (i32.const 201183) "a") (data (i32.const 201186) "a") (data (i32.const 201189) "a") (data (i32.const 201192) "a") (data (i32.const 201195) "a") (data (i32.const 201198) "a") (data (i32.const 201201) "a") (data (i32.const 201204) "a") (data (i32.const 201207) "a") (data (i32.const 201210) "a") (data (i32.const 201213) "a") (data (i32.const 201216) "a") (data (i32.const 201219) "a") (data (i32.const 201222) "a") (data (i32.const 201225) "a") (data (i32.const 201228) "a") (data (i32.const 201231) "a") (data (i32.const 201234) "a") (data (i32.const 201237) "a") (data (i32.const 201240) "a") (data (i32.const 201243) "a") (data (i32.const 201246) "a") (data (i32.const 201249) "a") (data (i32.const 201252) "a") (data (i32.const 201255) "a") (data (i32.const 201258) "a") (data (i32.const 201261) "a") (data (i32.const 201264) "a") (data (i32.const 201267) "a") (data (i32.const 201270) "a") (data (i32.const 201273) "a") (data (i32.const 201276) "a") (data (i32.const 201279) "a") (data (i32.const 201282) "a") (data (i32.const 201285) "a") (data (i32.const 201288) "a") (data (i32.const 201291) "a") (data (i32.const 201294) "a") (data (i32.const 201297) "a") (data (i32.const 201300) "a") (data (i32.const 201303) "a") (data (i32.const 201306) "a") (data (i32.const 201309) "a") (data (i32.const 201312) "a") (data (i32.const 201315) "a") (data (i32.const 201318) "a") (data (i32.const 201321) "a") (data (i32.const 201324) "a") (data (i32.const 201327) "a") (data (i32.const 201330) "a") (data (i32.const 201333) "a") (data (i32.const 201336) "a") (data (i32.const 201339) "a") (data (i32.const 201342) "a") (data (i32.const 201345) "a") (data (i32.const 201348) "a") (data (i32.const 201351) "a") (data (i32.const 201354) "a") (data (i32.const 201357) "a") (data (i32.const 201360) "a") (data (i32.const 201363) "a") (data (i32.const 201366) "a") (data (i32.const 201369) "a") (data (i32.const 201372) "a") (data (i32.const 201375) "a") (data (i32.const 201378) "a") (data (i32.const 201381) "a") (data (i32.const 201384) "a") (data (i32.const 201387) "a") (data (i32.const 201390) "a") (data (i32.const 201393) "a") (data (i32.const 201396) "a") (data (i32.const 201399) "a") (data (i32.const 201402) "a") (data (i32.const 201405) "a") (data (i32.const 201408) "a") (data (i32.const 201411) "a") (data (i32.const 201414) "a") (data (i32.const 201417) "a") (data (i32.const 201420) "a") (data (i32.const 201423) "a") (data (i32.const 201426) "a") (data (i32.const 201429) "a") (data (i32.const 201432) "a") (data (i32.const 201435) "a") (data (i32.const 201438) "a") (data (i32.const 201441) "a") (data (i32.const 201444) "a") (data (i32.const 201447) "a") (data (i32.const 201450) "a") (data (i32.const 201453) "a") (data (i32.const 201456) "a") (data (i32.const 201459) "a") (data (i32.const 201462) "a") (data (i32.const 201465) "a") (data (i32.const 201468) "a") (data (i32.const 201471) "a") (data (i32.const 201474) "a") (data (i32.const 201477) "a") (data (i32.const 201480) "a") (data (i32.const 201483) "a") (data (i32.const 201486) "a") (data (i32.const 201489) "a") (data (i32.const 201492) "a") (data (i32.const 201495) "a") (data (i32.const 201498) "a") (data (i32.const 201501) "a") (data (i32.const 201504) "a") (data (i32.const 201507) "a") (data (i32.const 201510) "a") (data (i32.const 201513) "a") (data (i32.const 201516) "a") (data (i32.const 201519) "a") (data (i32.const 201522) "a") (data (i32.const 201525) "a") (data (i32.const 201528) "a") (data (i32.const 201531) "a") (data (i32.const 201534) "a") (data (i32.const 201537) "a") (data (i32.const 201540) "a") (data (i32.const 201543) "a") (data (i32.const 201546) "a") (data (i32.const 201549) "a") (data (i32.const 201552) "a") (data (i32.const 201555) "a") (data (i32.const 201558) "a") (data (i32.const 201561) "a") (data (i32.const 201564) "a") (data (i32.const 201567) "a") (data (i32.const 201570) "a") (data (i32.const 201573) "a") (data (i32.const 201576) "a") (data (i32.const 201579) "a") (data (i32.const 201582) "a") (data (i32.const 201585) "a") (data (i32.const 201588) "a") (data (i32.const 201591) "a") (data (i32.const 201594) "a") (data (i32.const 201597) "a") (data (i32.const 201600) "a") (data (i32.const 201603) "a") (data (i32.const 201606) "a") (data (i32.const 201609) "a") (data (i32.const 201612) "a") (data (i32.const 201615) "a") (data (i32.const 201618) "a") (data (i32.const 201621) "a") (data (i32.const 201624) "a") (data (i32.const 201627) "a") (data (i32.const 201630) "a") (data (i32.const 201633) "a") (data (i32.const 201636) "a") (data (i32.const 201639) "a") (data (i32.const 201642) "a") (data (i32.const 201645) "a") (data (i32.const 201648) "a") (data (i32.const 201651) "a") (data (i32.const 201654) "a") (data (i32.const 201657) "a") (data (i32.const 201660) "a") (data (i32.const 201663) "a") (data (i32.const 201666) "a") (data (i32.const 201669) "a") (data (i32.const 201672) "a") (data (i32.const 201675) "a") (data (i32.const 201678) "a") (data (i32.const 201681) "a") (data (i32.const 201684) "a") (data (i32.const 201687) "a") (data (i32.const 201690) "a") (data (i32.const 201693) "a") (data (i32.const 201696) "a") (data (i32.const 201699) "a") (data (i32.const 201702) "a") (data (i32.const 201705) "a") (data (i32.const 201708) "a") (data (i32.const 201711) "a") (data (i32.const 201714) "a") (data (i32.const 201717) "a") (data (i32.const 201720) "a") (data (i32.const 201723) "a") (data (i32.const 201726) "a") (data (i32.const 201729) "a") (data (i32.const 201732) "a") (data (i32.const 201735) "a") (data (i32.const 201738) "a") (data (i32.const 201741) "a") (data (i32.const 201744) "a") (data (i32.const 201747) "a") (data (i32.const 201750) "a") (data (i32.const 201753) "a") (data (i32.const 201756) "a") (data (i32.const 201759) "a") (data (i32.const 201762) "a") (data (i32.const 201765) "a") (data (i32.const 201768) "a") (data (i32.const 201771) "a") (data (i32.const 201774) "a") (data (i32.const 201777) "a") (data (i32.const 201780) "a") (data (i32.const 201783) "a") (data (i32.const 201786) "a") (data (i32.const 201789) "a") (data (i32.const 201792) "a") (data (i32.const 201795) "a") (data (i32.const 201798) "a") (data (i32.const 201801) "a") (data (i32.const 201804) "a") (data (i32.const 201807) "a") (data (i32.const 201810) "a") (data (i32.const 201813) "a") (data (i32.const 201816) "a") (data (i32.const 201819) "a") (data (i32.const 201822) "a") (data (i32.const 201825) "a") (data (i32.const 201828) "a") (data (i32.const 201831) "a") (data (i32.const 201834) "a") (data (i32.const 201837) "a") (data (i32.const 201840) "a") (data (i32.const 201843) "a") (data (i32.const 201846) "a") (data (i32.const 201849) "a") (data (i32.const 201852) "a") (data (i32.const 201855) "a") (data (i32.const 201858) "a") (data (i32.const 201861) "a") (data (i32.const 201864) "a") (data (i32.const 201867) "a") (data (i32.const 201870) "a") (data (i32.const 201873) "a") (data (i32.const 201876) "a") (data (i32.const 201879) "a") (data (i32.const 201882) "a") (data (i32.const 201885) "a") (data (i32.const 201888) "a") (data (i32.const 201891) "a") (data (i32.const 201894) "a") (data (i32.const 201897) "a") (data (i32.const 201900) "a") (data (i32.const 201903) "a") (data (i32.const 201906) "a") (data (i32.const 201909) "a") (data (i32.const 201912) "a") (data (i32.const 201915) "a") (data (i32.const 201918) "a") (data (i32.const 201921) "a") (data (i32.const 201924) "a") (data (i32.const 201927) "a") (data (i32.const 201930) "a") (data (i32.const 201933) "a") (data (i32.const 201936) "a") (data (i32.const 201939) "a") (data (i32.const 201942) "a") (data (i32.const 201945) "a") (data (i32.const 201948) "a") (data (i32.const 201951) "a") (data (i32.const 201954) "a") (data (i32.const 201957) "a") (data (i32.const 201960) "a") (data (i32.const 201963) "a") (data (i32.const 201966) "a") (data (i32.const 201969) "a") (data (i32.const 201972) "a") (data (i32.const 201975) "a") (data (i32.const 201978) "a") (data (i32.const 201981) "a") (data (i32.const 201984) "a") (data (i32.const 201987) "a") (data (i32.const 201990) "a") (data (i32.const 201993) "a") (data (i32.const 201996) "a") (data (i32.const 201999) "a") (data (i32.const 202002) "a") (data (i32.const 202005) "a") (data (i32.const 202008) "a") (data (i32.const 202011) "a") (data (i32.const 202014) "a") (data (i32.const 202017) "a") (data (i32.const 202020) "a") (data (i32.const 202023) "a") (data (i32.const 202026) "a") (data (i32.const 202029) "a") (data (i32.const 202032) "a") (data (i32.const 202035) "a") (data (i32.const 202038) "a") (data (i32.const 202041) "a") (data (i32.const 202044) "a") (data (i32.const 202047) "a") (data (i32.const 202050) "a") (data (i32.const 202053) "a") (data (i32.const 202056) "a") (data (i32.const 202059) "a") (data (i32.const 202062) "a") (data (i32.const 202065) "a") (data (i32.const 202068) "a") (data (i32.const 202071) "a") (data (i32.const 202074) "a") (data (i32.const 202077) "a") (data (i32.const 202080) "a") (data (i32.const 202083) "a") (data (i32.const 202086) "a") (data (i32.const 202089) "a") (data (i32.const 202092) "a") (data (i32.const 202095) "a") (data (i32.const 202098) "a") (data (i32.const 202101) "a") (data (i32.const 202104) "a") (data (i32.const 202107) "a") (data (i32.const 202110) "a") (data (i32.const 202113) "a") (data (i32.const 202116) "a") (data (i32.const 202119) "a") (data (i32.const 202122) "a") (data (i32.const 202125) "a") (data (i32.const 202128) "a") (data (i32.const 202131) "a") (data (i32.const 202134) "a") (data (i32.const 202137) "a") (data (i32.const 202140) "a") (data (i32.const 202143) "a") (data (i32.const 202146) "a") (data (i32.const 202149) "a") (data (i32.const 202152) "a") (data (i32.const 202155) "a") (data (i32.const 202158) "a") (data (i32.const 202161) "a") (data (i32.const 202164) "a") (data (i32.const 202167) "a") (data (i32.const 202170) "a") (data (i32.const 202173) "a") (data (i32.const 202176) "a") (data (i32.const 202179) "a") (data (i32.const 202182) "a") (data (i32.const 202185) "a") (data (i32.const 202188) "a") (data (i32.const 202191) "a") (data (i32.const 202194) "a") (data (i32.const 202197) "a") (data (i32.const 202200) "a") (data (i32.const 202203) "a") (data (i32.const 202206) "a") (data (i32.const 202209) "a") (data (i32.const 202212) "a") (data (i32.const 202215) "a") (data (i32.const 202218) "a") (data (i32.const 202221) "a") (data (i32.const 202224) "a") (data (i32.const 202227) "a") (data (i32.const 202230) "a") (data (i32.const 202233) "a") (data (i32.const 202236) "a") (data (i32.const 202239) "a") (data (i32.const 202242) "a") (data (i32.const 202245) "a") (data (i32.const 202248) "a") (data (i32.const 202251) "a") (data (i32.const 202254) "a") (data (i32.const 202257) "a") (data (i32.const 202260) "a") (data (i32.const 202263) "a") (data (i32.const 202266) "a") (data (i32.const 202269) "a") (data (i32.const 202272) "a") (data (i32.const 202275) "a") (data (i32.const 202278) "a") (data (i32.const 202281) "a") (data (i32.const 202284) "a") (data (i32.const 202287) "a") (data (i32.const 202290) "a") (data (i32.const 202293) "a") (data (i32.const 202296) "a") (data (i32.const 202299) "a") (data (i32.const 202302) "a") (data (i32.const 202305) "a") (data (i32.const 202308) "a") (data (i32.const 202311) "a") (data (i32.const 202314) "a") (data (i32.const 202317) "a") (data (i32.const 202320) "a") (data (i32.const 202323) "a") (data (i32.const 202326) "a") (data (i32.const 202329) "a") (data (i32.const 202332) "a") (data (i32.const 202335) "a") (data (i32.const 202338) "a") (data (i32.const 202341) "a") (data (i32.const 202344) "a") (data (i32.const 202347) "a") (data (i32.const 202350) "a") (data (i32.const 202353) "a") (data (i32.const 202356) "a") (data (i32.const 202359) "a") (data (i32.const 202362) "a") (data (i32.const 202365) "a") (data (i32.const 202368) "a") (data (i32.const 202371) "a") (data (i32.const 202374) "a") (data (i32.const 202377) "a") (data (i32.const 202380) "a") (data (i32.const 202383) "a") (data (i32.const 202386) "a") (data (i32.const 202389) "a") (data (i32.const 202392) "a") (data (i32.const 202395) "a") (data (i32.const 202398) "a") (data (i32.const 202401) "a") (data (i32.const 202404) "a") (data (i32.const 202407) "a") (data (i32.const 202410) "a") (data (i32.const 202413) "a") (data (i32.const 202416) "a") (data (i32.const 202419) "a") (data (i32.const 202422) "a") (data (i32.const 202425) "a") (data (i32.const 202428) "a") (data (i32.const 202431) "a") (data (i32.const 202434) "a") (data (i32.const 202437) "a") (data (i32.const 202440) "a") (data (i32.const 202443) "a") (data (i32.const 202446) "a") (data (i32.const 202449) "a") (data (i32.const 202452) "a") (data (i32.const 202455) "a") (data (i32.const 202458) "a") (data (i32.const 202461) "a") (data (i32.const 202464) "a") (data (i32.const 202467) "a") (data (i32.const 202470) "a") (data (i32.const 202473) "a") (data (i32.const 202476) "a") (data (i32.const 202479) "a") (data (i32.const 202482) "a") (data (i32.const 202485) "a") (data (i32.const 202488) "a") (data (i32.const 202491) "a") (data (i32.const 202494) "a") (data (i32.const 202497) "a") (data (i32.const 202500) "a") (data (i32.const 202503) "a") (data (i32.const 202506) "a") (data (i32.const 202509) "a") (data (i32.const 202512) "a") (data (i32.const 202515) "a") (data (i32.const 202518) "a") (data (i32.const 202521) "a") (data (i32.const 202524) "a") (data (i32.const 202527) "a") (data (i32.const 202530) "a") (data (i32.const 202533) "a") (data (i32.const 202536) "a") (data (i32.const 202539) "a") (data (i32.const 202542) "a") (data (i32.const 202545) "a") (data (i32.const 202548) "a") (data (i32.const 202551) "a") (data (i32.const 202554) "a") (data (i32.const 202557) "a") (data (i32.const 202560) "a") (data (i32.const 202563) "a") (data (i32.const 202566) "a") (data (i32.const 202569) "a") (data (i32.const 202572) "a") (data (i32.const 202575) "a") (data (i32.const 202578) "a") (data (i32.const 202581) "a") (data (i32.const 202584) "a") (data (i32.const 202587) "a") (data (i32.const 202590) "a") (data (i32.const 202593) "a") (data (i32.const 202596) "a") (data (i32.const 202599) "a") (data (i32.const 202602) "a") (data (i32.const 202605) "a") (data (i32.const 202608) "a") (data (i32.const 202611) "a") (data (i32.const 202614) "a") (data (i32.const 202617) "a") (data (i32.const 202620) "a") (data (i32.const 202623) "a") (data (i32.const 202626) "a") (data (i32.const 202629) "a") (data (i32.const 202632) "a") (data (i32.const 202635) "a") (data (i32.const 202638) "a") (data (i32.const 202641) "a") (data (i32.const 202644) "a") (data (i32.const 202647) "a") (data (i32.const 202650) "a") (data (i32.const 202653) "a") (data (i32.const 202656) "a") (data (i32.const 202659) "a") (data (i32.const 202662) "a") (data (i32.const 202665) "a") (data (i32.const 202668) "a") (data (i32.const 202671) "a") (data (i32.const 202674) "a") (data (i32.const 202677) "a") (data (i32.const 202680) "a") (data (i32.const 202683) "a") (data (i32.const 202686) "a") (data (i32.const 202689) "a") (data (i32.const 202692) "a") (data (i32.const 202695) "a") (data (i32.const 202698) "a") (data (i32.const 202701) "a") (data (i32.const 202704) "a") (data (i32.const 202707) "a") (data (i32.const 202710) "a") (data (i32.const 202713) "a") (data (i32.const 202716) "a") (data (i32.const 202719) "a") (data (i32.const 202722) "a") (data (i32.const 202725) "a") (data (i32.const 202728) "a") (data (i32.const 202731) "a") (data (i32.const 202734) "a") (data (i32.const 202737) "a") (data (i32.const 202740) "a") (data (i32.const 202743) "a") (data (i32.const 202746) "a") (data (i32.const 202749) "a") (data (i32.const 202752) "a") (data (i32.const 202755) "a") (data (i32.const 202758) "a") (data (i32.const 202761) "a") (data (i32.const 202764) "a") (data (i32.const 202767) "a") (data (i32.const 202770) "a") (data (i32.const 202773) "a") (data (i32.const 202776) "a") (data (i32.const 202779) "a") (data (i32.const 202782) "a") (data (i32.const 202785) "a") (data (i32.const 202788) "a") (data (i32.const 202791) "a") (data (i32.const 202794) "a") (data (i32.const 202797) "a") (data (i32.const 202800) "a") (data (i32.const 202803) "a") (data (i32.const 202806) "a") (data (i32.const 202809) "a") (data (i32.const 202812) "a") (data (i32.const 202815) "a") (data (i32.const 202818) "a") (data (i32.const 202821) "a") (data (i32.const 202824) "a") (data (i32.const 202827) "a") (data (i32.const 202830) "a") (data (i32.const 202833) "a") (data (i32.const 202836) "a") (data (i32.const 202839) "a") (data (i32.const 202842) "a") (data (i32.const 202845) "a") (data (i32.const 202848) "a") (data (i32.const 202851) "a") (data (i32.const 202854) "a") (data (i32.const 202857) "a") (data (i32.const 202860) "a") (data (i32.const 202863) "a") (data (i32.const 202866) "a") (data (i32.const 202869) "a") (data (i32.const 202872) "a") (data (i32.const 202875) "a") (data (i32.const 202878) "a") (data (i32.const 202881) "a") (data (i32.const 202884) "a") (data (i32.const 202887) "a") (data (i32.const 202890) "a") (data (i32.const 202893) "a") (data (i32.const 202896) "a") (data (i32.const 202899) "a") (data (i32.const 202902) "a") (data (i32.const 202905) "a") (data (i32.const 202908) "a") (data (i32.const 202911) "a") (data (i32.const 202914) "a") (data (i32.const 202917) "a") (data (i32.const 202920) "a") (data (i32.const 202923) "a") (data (i32.const 202926) "a") (data (i32.const 202929) "a") (data (i32.const 202932) "a") (data (i32.const 202935) "a") (data (i32.const 202938) "a") (data (i32.const 202941) "a") (data (i32.const 202944) "a") (data (i32.const 202947) "a") (data (i32.const 202950) "a") (data (i32.const 202953) "a") (data (i32.const 202956) "a") (data (i32.const 202959) "a") (data (i32.const 202962) "a") (data (i32.const 202965) "a") (data (i32.const 202968) "a") (data (i32.const 202971) "a") (data (i32.const 202974) "a") (data (i32.const 202977) "a") (data (i32.const 202980) "a") (data (i32.const 202983) "a") (data (i32.const 202986) "a") (data (i32.const 202989) "a") (data (i32.const 202992) "a") (data (i32.const 202995) "a") (data (i32.const 202998) "a") (data (i32.const 203001) "a") (data (i32.const 203004) "a") (data (i32.const 203007) "a") (data (i32.const 203010) "a") (data (i32.const 203013) "a") (data (i32.const 203016) "a") (data (i32.const 203019) "a") (data (i32.const 203022) "a") (data (i32.const 203025) "a") (data (i32.const 203028) "a") (data (i32.const 203031) "a") (data (i32.const 203034) "a") (data (i32.const 203037) "a") (data (i32.const 203040) "a") (data (i32.const 203043) "a") (data (i32.const 203046) "a") (data (i32.const 203049) "a") (data (i32.const 203052) "a") (data (i32.const 203055) "a") (data (i32.const 203058) "a") (data (i32.const 203061) "a") (data (i32.const 203064) "a") (data (i32.const 203067) "a") (data (i32.const 203070) "a") (data (i32.const 203073) "a") (data (i32.const 203076) "a") (data (i32.const 203079) "a") (data (i32.const 203082) "a") (data (i32.const 203085) "a") (data (i32.const 203088) "a") (data (i32.const 203091) "a") (data (i32.const 203094) "a") (data (i32.const 203097) "a") (data (i32.const 203100) "a") (data (i32.const 203103) "a") (data (i32.const 203106) "a") (data (i32.const 203109) "a") (data (i32.const 203112) "a") (data (i32.const 203115) "a") (data (i32.const 203118) "a") (data (i32.const 203121) "a") (data (i32.const 203124) "a") (data (i32.const 203127) "a") (data (i32.const 203130) "a") (data (i32.const 203133) "a") (data (i32.const 203136) "a") (data (i32.const 203139) "a") (data (i32.const 203142) "a") (data (i32.const 203145) "a") (data (i32.const 203148) "a") (data (i32.const 203151) "a") (data (i32.const 203154) "a") (data (i32.const 203157) "a") (data (i32.const 203160) "a") (data (i32.const 203163) "a") (data (i32.const 203166) "a") (data (i32.const 203169) "a") (data (i32.const 203172) "a") (data (i32.const 203175) "a") (data (i32.const 203178) "a") (data (i32.const 203181) "a") (data (i32.const 203184) "a") (data (i32.const 203187) "a") (data (i32.const 203190) "a") (data (i32.const 203193) "a") (data (i32.const 203196) "a") (data (i32.const 203199) "a") (data (i32.const 203202) "a") (data (i32.const 203205) "a") (data (i32.const 203208) "a") (data (i32.const 203211) "a") (data (i32.const 203214) "a") (data (i32.const 203217) "a") (data (i32.const 203220) "a") (data (i32.const 203223) "a") (data (i32.const 203226) "a") (data (i32.const 203229) "a") (data (i32.const 203232) "a") (data (i32.const 203235) "a") (data (i32.const 203238) "a") (data (i32.const 203241) "a") (data (i32.const 203244) "a") (data (i32.const 203247) "a") (data (i32.const 203250) "a") (data (i32.const 203253) "a") (data (i32.const 203256) "a") (data (i32.const 203259) "a") (data (i32.const 203262) "a") (data (i32.const 203265) "a") (data (i32.const 203268) "a") (data (i32.const 203271) "a") (data (i32.const 203274) "a") (data (i32.const 203277) "a") (data (i32.const 203280) "a") (data (i32.const 203283) "a") (data (i32.const 203286) "a") (data (i32.const 203289) "a") (data (i32.const 203292) "a") (data (i32.const 203295) "a") (data (i32.const 203298) "a") (data (i32.const 203301) "a") (data (i32.const 203304) "a") (data (i32.const 203307) "a") (data (i32.const 203310) "a") (data (i32.const 203313) "a") (data (i32.const 203316) "a") (data (i32.const 203319) "a") (data (i32.const 203322) "a") (data (i32.const 203325) "a") (data (i32.const 203328) "a") (data (i32.const 203331) "a") (data (i32.const 203334) "a") (data (i32.const 203337) "a") (data (i32.const 203340) "a") (data (i32.const 203343) "a") (data (i32.const 203346) "a") (data (i32.const 203349) "a") (data (i32.const 203352) "a") (data (i32.const 203355) "a") (data (i32.const 203358) "a") (data (i32.const 203361) "a") (data (i32.const 203364) "a") (data (i32.const 203367) "a") (data (i32.const 203370) "a") (data (i32.const 203373) "a") (data (i32.const 203376) "a") (data (i32.const 203379) "a") (data (i32.const 203382) "a") (data (i32.const 203385) "a") (data (i32.const 203388) "a") (data (i32.const 203391) "a") (data (i32.const 203394) "a") (data (i32.const 203397) "a") (data (i32.const 203400) "a") (data (i32.const 203403) "a") (data (i32.const 203406) "a") (data (i32.const 203409) "a") (data (i32.const 203412) "a") (data (i32.const 203415) "a") (data (i32.const 203418) "a") (data (i32.const 203421) "a") (data (i32.const 203424) "a") (data (i32.const 203427) "a") (data (i32.const 203430) "a") (data (i32.const 203433) "a") (data (i32.const 203436) "a") (data (i32.const 203439) "a") (data (i32.const 203442) "a") (data (i32.const 203445) "a") (data (i32.const 203448) "a") (data (i32.const 203451) "a") (data (i32.const 203454) "a") (data (i32.const 203457) "a") (data (i32.const 203460) "a") (data (i32.const 203463) "a") (data (i32.const 203466) "a") (data (i32.const 203469) "a") (data (i32.const 203472) "a") (data (i32.const 203475) "a") (data (i32.const 203478) "a") (data (i32.const 203481) "a") (data (i32.const 203484) "a") (data (i32.const 203487) "a") (data (i32.const 203490) "a") (data (i32.const 203493) "a") (data (i32.const 203496) "a") (data (i32.const 203499) "a") (data (i32.const 203502) "a") (data (i32.const 203505) "a") (data (i32.const 203508) "a") (data (i32.const 203511) "a") (data (i32.const 203514) "a") (data (i32.const 203517) "a") (data (i32.const 203520) "a") (data (i32.const 203523) "a") (data (i32.const 203526) "a") (data (i32.const 203529) "a") (data (i32.const 203532) "a") (data (i32.const 203535) "a") (data (i32.const 203538) "a") (data (i32.const 203541) "a") (data (i32.const 203544) "a") (data (i32.const 203547) "a") (data (i32.const 203550) "a") (data (i32.const 203553) "a") (data (i32.const 203556) "a") (data (i32.const 203559) "a") (data (i32.const 203562) "a") (data (i32.const 203565) "a") (data (i32.const 203568) "a") (data (i32.const 203571) "a") (data (i32.const 203574) "a") (data (i32.const 203577) "a") (data (i32.const 203580) "a") (data (i32.const 203583) "a") (data (i32.const 203586) "a") (data (i32.const 203589) "a") (data (i32.const 203592) "a") (data (i32.const 203595) "a") (data (i32.const 203598) "a") (data (i32.const 203601) "a") (data (i32.const 203604) "a") (data (i32.const 203607) "a") (data (i32.const 203610) "a") (data (i32.const 203613) "a") (data (i32.const 203616) "a") (data (i32.const 203619) "a") (data (i32.const 203622) "a") (data (i32.const 203625) "a") (data (i32.const 203628) "a") (data (i32.const 203631) "a") (data (i32.const 203634) "a") (data (i32.const 203637) "a") (data (i32.const 203640) "a") (data (i32.const 203643) "a") (data (i32.const 203646) "a") (data (i32.const 203649) "a") (data (i32.const 203652) "a") (data (i32.const 203655) "a") (data (i32.const 203658) "a") (data (i32.const 203661) "a") (data (i32.const 203664) "a") (data (i32.const 203667) "a") (data (i32.const 203670) "a") (data (i32.const 203673) "a") (data (i32.const 203676) "a") (data (i32.const 203679) "a") (data (i32.const 203682) "a") (data (i32.const 203685) "a") (data (i32.const 203688) "a") (data (i32.const 203691) "a") (data (i32.const 203694) "a") (data (i32.const 203697) "a") (data (i32.const 203700) "a") (data (i32.const 203703) "a") (data (i32.const 203706) "a") (data (i32.const 203709) "a") (data (i32.const 203712) "a") (data (i32.const 203715) "a") (data (i32.const 203718) "a") (data (i32.const 203721) "a") (data (i32.const 203724) "a") (data (i32.const 203727) "a") (data (i32.const 203730) "a") (data (i32.const 203733) "a") (data (i32.const 203736) "a") (data (i32.const 203739) "a") (data (i32.const 203742) "a") (data (i32.const 203745) "a") (data (i32.const 203748) "a") (data (i32.const 203751) "a") (data (i32.const 203754) "a") (data (i32.const 203757) "a") (data (i32.const 203760) "a") (data (i32.const 203763) "a") (data (i32.const 203766) "a") (data (i32.const 203769) "a") (data (i32.const 203772) "a") (data (i32.const 203775) "a") (data (i32.const 203778) "a") (data (i32.const 203781) "a") (data (i32.const 203784) "a") (data (i32.const 203787) "a") (data (i32.const 203790) "a") (data (i32.const 203793) "a") (data (i32.const 203796) "a") (data (i32.const 203799) "a") (data (i32.const 203802) "a") (data (i32.const 203805) "a") (data (i32.const 203808) "a") (data (i32.const 203811) "a") (data (i32.const 203814) "a") (data (i32.const 203817) "a") (data (i32.const 203820) "a") (data (i32.const 203823) "a") (data (i32.const 203826) "a") (data (i32.const 203829) "a") (data (i32.const 203832) "a") (data (i32.const 203835) "a") (data (i32.const 203838) "a") (data (i32.const 203841) "a") (data (i32.const 203844) "a") (data (i32.const 203847) "a") (data (i32.const 203850) "a") (data (i32.const 203853) "a") (data (i32.const 203856) "a") (data (i32.const 203859) "a") (data (i32.const 203862) "a") (data (i32.const 203865) "a") (data (i32.const 203868) "a") (data (i32.const 203871) "a") (data (i32.const 203874) "a") (data (i32.const 203877) "a") (data (i32.const 203880) "a") (data (i32.const 203883) "a") (data (i32.const 203886) "a") (data (i32.const 203889) "a") (data (i32.const 203892) "a") (data (i32.const 203895) "a") (data (i32.const 203898) "a") (data (i32.const 203901) "a") (data (i32.const 203904) "a") (data (i32.const 203907) "a") (data (i32.const 203910) "a") (data (i32.const 203913) "a") (data (i32.const 203916) "a") (data (i32.const 203919) "a") (data (i32.const 203922) "a") (data (i32.const 203925) "a") (data (i32.const 203928) "a") (data (i32.const 203931) "a") (data (i32.const 203934) "a") (data (i32.const 203937) "a") (data (i32.const 203940) "a") (data (i32.const 203943) "a") (data (i32.const 203946) "a") (data (i32.const 203949) "a") (data (i32.const 203952) "a") (data (i32.const 203955) "a") (data (i32.const 203958) "a") (data (i32.const 203961) "a") (data (i32.const 203964) "a") (data (i32.const 203967) "a") (data (i32.const 203970) "a") (data (i32.const 203973) "a") (data (i32.const 203976) "a") (data (i32.const 203979) "a") (data (i32.const 203982) "a") (data (i32.const 203985) "a") (data (i32.const 203988) "a") (data (i32.const 203991) "a") (data (i32.const 203994) "a") (data (i32.const 203997) "a") (data (i32.const 204000) "a") (data (i32.const 204003) "a") (data (i32.const 204006) "a") (data (i32.const 204009) "a") (data (i32.const 204012) "a") (data (i32.const 204015) "a") (data (i32.const 204018) "a") (data (i32.const 204021) "a") (data (i32.const 204024) "a") (data (i32.const 204027) "a") (data (i32.const 204030) "a") (data (i32.const 204033) "a") (data (i32.const 204036) "a") (data (i32.const 204039) "a") (data (i32.const 204042) "a") (data (i32.const 204045) "a") (data (i32.const 204048) "a") (data (i32.const 204051) "a") (data (i32.const 204054) "a") (data (i32.const 204057) "a") (data (i32.const 204060) "a") (data (i32.const 204063) "a") (data (i32.const 204066) "a") (data (i32.const 204069) "a") (data (i32.const 204072) "a") (data (i32.const 204075) "a") (data (i32.const 204078) "a") (data (i32.const 204081) "a") (data (i32.const 204084) "a") (data (i32.const 204087) "a") (data (i32.const 204090) "a") (data (i32.const 204093) "a") (data (i32.const 204096) "a") (data (i32.const 204099) "a") (data (i32.const 204102) "a") (data (i32.const 204105) "a") (data (i32.const 204108) "a") (data (i32.const 204111) "a") (data (i32.const 204114) "a") (data (i32.const 204117) "a") (data (i32.const 204120) "a") (data (i32.const 204123) "a") (data (i32.const 204126) "a") (data (i32.const 204129) "a") (data (i32.const 204132) "a") (data (i32.const 204135) "a") (data (i32.const 204138) "a") (data (i32.const 204141) "a") (data (i32.const 204144) "a") (data (i32.const 204147) "a") (data (i32.const 204150) "a") (data (i32.const 204153) "a") (data (i32.const 204156) "a") (data (i32.const 204159) "a") (data (i32.const 204162) "a") (data (i32.const 204165) "a") (data (i32.const 204168) "a") (data (i32.const 204171) "a") (data (i32.const 204174) "a") (data (i32.const 204177) "a") (data (i32.const 204180) "a") (data (i32.const 204183) "a") (data (i32.const 204186) "a") (data (i32.const 204189) "a") (data (i32.const 204192) "a") (data (i32.const 204195) "a") (data (i32.const 204198) "a") (data (i32.const 204201) "a") (data (i32.const 204204) "a") (data (i32.const 204207) "a") (data (i32.const 204210) "a") (data (i32.const 204213) "a") (data (i32.const 204216) "a") (data (i32.const 204219) "a") (data (i32.const 204222) "a") (data (i32.const 204225) "a") (data (i32.const 204228) "a") (data (i32.const 204231) "a") (data (i32.const 204234) "a") (data (i32.const 204237) "a") (data (i32.const 204240) "a") (data (i32.const 204243) "a") (data (i32.const 204246) "a") (data (i32.const 204249) "a") (data (i32.const 204252) "a") (data (i32.const 204255) "a") (data (i32.const 204258) "a") (data (i32.const 204261) "a") (data (i32.const 204264) "a") (data (i32.const 204267) "a") (data (i32.const 204270) "a") (data (i32.const 204273) "a") (data (i32.const 204276) "a") (data (i32.const 204279) "a") (data (i32.const 204282) "a") (data (i32.const 204285) "a") (data (i32.const 204288) "a") (data (i32.const 204291) "a") (data (i32.const 204294) "a") (data (i32.const 204297) "a") (data (i32.const 204300) "a") (data (i32.const 204303) "a") (data (i32.const 204306) "a") (data (i32.const 204309) "a") (data (i32.const 204312) "a") (data (i32.const 204315) "a") (data (i32.const 204318) "a") (data (i32.const 204321) "a") (data (i32.const 204324) "a") (data (i32.const 204327) "a") (data (i32.const 204330) "a") (data (i32.const 204333) "a") (data (i32.const 204336) "a") (data (i32.const 204339) "a") (data (i32.const 204342) "a") (data (i32.const 204345) "a") (data (i32.const 204348) "a") (data (i32.const 204351) "a") (data (i32.const 204354) "a") (data (i32.const 204357) "a") (data (i32.const 204360) "a") (data (i32.const 204363) "a") (data (i32.const 204366) "a") (data (i32.const 204369) "a") (data (i32.const 204372) "a") (data (i32.const 204375) "a") (data (i32.const 204378) "a") (data (i32.const 204381) "a") (data (i32.const 204384) "a") (data (i32.const 204387) "a") (data (i32.const 204390) "a") (data (i32.const 204393) "a") (data (i32.const 204396) "a") (data (i32.const 204399) "a") (data (i32.const 204402) "a") (data (i32.const 204405) "a") (data (i32.const 204408) "a") (data (i32.const 204411) "a") (data (i32.const 204414) "a") (data (i32.const 204417) "a") (data (i32.const 204420) "a") (data (i32.const 204423) "a") (data (i32.const 204426) "a") (data (i32.const 204429) "a") (data (i32.const 204432) "a") (data (i32.const 204435) "a") (data (i32.const 204438) "a") (data (i32.const 204441) "a") (data (i32.const 204444) "a") (data (i32.const 204447) "a") (data (i32.const 204450) "a") (data (i32.const 204453) "a") (data (i32.const 204456) "a") (data (i32.const 204459) "a") (data (i32.const 204462) "a") (data (i32.const 204465) "a") (data (i32.const 204468) "a") (data (i32.const 204471) "a") (data (i32.const 204474) "a") (data (i32.const 204477) "a") (data (i32.const 204480) "a") (data (i32.const 204483) "a") (data (i32.const 204486) "a") (data (i32.const 204489) "a") (data (i32.const 204492) "a") (data (i32.const 204495) "a") (data (i32.const 204498) "a") (data (i32.const 204501) "a") (data (i32.const 204504) "a") (data (i32.const 204507) "a") (data (i32.const 204510) "a") (data (i32.const 204513) "a") (data (i32.const 204516) "a") (data (i32.const 204519) "a") (data (i32.const 204522) "a") (data (i32.const 204525) "a") (data (i32.const 204528) "a") (data (i32.const 204531) "a") (data (i32.const 204534) "a") (data (i32.const 204537) "a") (data (i32.const 204540) "a") (data (i32.const 204543) "a") (data (i32.const 204546) "a") (data (i32.const 204549) "a") (data (i32.const 204552) "a") (data (i32.const 204555) "a") (data (i32.const 204558) "a") (data (i32.const 204561) "a") (data (i32.const 204564) "a") (data (i32.const 204567) "a") (data (i32.const 204570) "a") (data (i32.const 204573) "a") (data (i32.const 204576) "a") (data (i32.const 204579) "a") (data (i32.const 204582) "a") (data (i32.const 204585) "a") (data (i32.const 204588) "a") (data (i32.const 204591) "a") (data (i32.const 204594) "a") (data (i32.const 204597) "a") (data (i32.const 204600) "a") (data (i32.const 204603) "a") (data (i32.const 204606) "a") (data (i32.const 204609) "a") (data (i32.const 204612) "a") (data (i32.const 204615) "a") (data (i32.const 204618) "a") (data (i32.const 204621) "a") (data (i32.const 204624) "a") (data (i32.const 204627) "a") (data (i32.const 204630) "a") (data (i32.const 204633) "a") (data (i32.const 204636) "a") (data (i32.const 204639) "a") (data (i32.const 204642) "a") (data (i32.const 204645) "a") (data (i32.const 204648) "a") (data (i32.const 204651) "a") (data (i32.const 204654) "a") (data (i32.const 204657) "a") (data (i32.const 204660) "a") (data (i32.const 204663) "a") (data (i32.const 204666) "a") (data (i32.const 204669) "a") (data (i32.const 204672) "a") (data (i32.const 204675) "a") (data (i32.const 204678) "a") (data (i32.const 204681) "a") (data (i32.const 204684) "a") (data (i32.const 204687) "a") (data (i32.const 204690) "a") (data (i32.const 204693) "a") (data (i32.const 204696) "a") (data (i32.const 204699) "a") (data (i32.const 204702) "a") (data (i32.const 204705) "a") (data (i32.const 204708) "a") (data (i32.const 204711) "a") (data (i32.const 204714) "a") (data (i32.const 204717) "a") (data (i32.const 204720) "a") (data (i32.const 204723) "a") (data (i32.const 204726) "a") (data (i32.const 204729) "a") (data (i32.const 204732) "a") (data (i32.const 204735) "a") (data (i32.const 204738) "a") (data (i32.const 204741) "a") (data (i32.const 204744) "a") (data (i32.const 204747) "a") (data (i32.const 204750) "a") (data (i32.const 204753) "a") (data (i32.const 204756) "a") (data (i32.const 204759) "a") (data (i32.const 204762) "a") (data (i32.const 204765) "a") (data (i32.const 204768) "a") (data (i32.const 204771) "a") (data (i32.const 204774) "a") (data (i32.const 204777) "a") (data (i32.const 204780) "a") (data (i32.const 204783) "a") (data (i32.const 204786) "a") (data (i32.const 204789) "a") (data (i32.const 204792) "a") (data (i32.const 204795) "a") (data (i32.const 204798) "a") (data (i32.const 204801) "a") (data (i32.const 204804) "a") (data (i32.const 204807) "a") (data (i32.const 204810) "a") (data (i32.const 204813) "a") (data (i32.const 204816) "a") (data (i32.const 204819) "a") (data (i32.const 204822) "a") (data (i32.const 204825) "a") (data (i32.const 204828) "a") (data (i32.const 204831) "a") (data (i32.const 204834) "a") (data (i32.const 204837) "a") (data (i32.const 204840) "a") (data (i32.const 204843) "a") (data (i32.const 204846) "a") (data (i32.const 204849) "a") (data (i32.const 204852) "a") (data (i32.const 204855) "a") (data (i32.const 204858) "a") (data (i32.const 204861) "a") (data (i32.const 204864) "a") (data (i32.const 204867) "a") (data (i32.const 204870) "a") (data (i32.const 204873) "a") (data (i32.const 204876) "a") (data (i32.const 204879) "a") (data (i32.const 204882) "a") (data (i32.const 204885) "a") (data (i32.const 204888) "a") (data (i32.const 204891) "a") (data (i32.const 204894) "a") (data (i32.const 204897) "a") (data (i32.const 204900) "a") (data (i32.const 204903) "a") (data (i32.const 204906) "a") (data (i32.const 204909) "a") (data (i32.const 204912) "a") (data (i32.const 204915) "a") (data (i32.const 204918) "a") (data (i32.const 204921) "a") (data (i32.const 204924) "a") (data (i32.const 204927) "a") (data (i32.const 204930) "a") (data (i32.const 204933) "a") (data (i32.const 204936) "a") (data (i32.const 204939) "a") (data (i32.const 204942) "a") (data (i32.const 204945) "a") (data (i32.const 204948) "a") (data (i32.const 204951) "a") (data (i32.const 204954) "a") (data (i32.const 204957) "a") (data (i32.const 204960) "a") (data (i32.const 204963) "a") (data (i32.const 204966) "a") (data (i32.const 204969) "a") (data (i32.const 204972) "a") (data (i32.const 204975) "a") (data (i32.const 204978) "a") (data (i32.const 204981) "a") (data (i32.const 204984) "a") (data (i32.const 204987) "a") (data (i32.const 204990) "a") (data (i32.const 204993) "a") (data (i32.const 204996) "a") (data (i32.const 204999) "a") (data (i32.const 205002) "a") (data (i32.const 205005) "a") (data (i32.const 205008) "a") (data (i32.const 205011) "a") (data (i32.const 205014) "a") (data (i32.const 205017) "a") (data (i32.const 205020) "a") (data (i32.const 205023) "a") (data (i32.const 205026) "a") (data (i32.const 205029) "a") (data (i32.const 205032) "a") (data (i32.const 205035) "a") (data (i32.const 205038) "a") (data (i32.const 205041) "a") (data (i32.const 205044) "a") (data (i32.const 205047) "a") (data (i32.const 205050) "a") (data (i32.const 205053) "a") (data (i32.const 205056) "a") (data (i32.const 205059) "a") (data (i32.const 205062) "a") (data (i32.const 205065) "a") (data (i32.const 205068) "a") (data (i32.const 205071) "a") (data (i32.const 205074) "a") (data (i32.const 205077) "a") (data (i32.const 205080) "a") (data (i32.const 205083) "a") (data (i32.const 205086) "a") (data (i32.const 205089) "a") (data (i32.const 205092) "a") (data (i32.const 205095) "a") (data (i32.const 205098) "a") (data (i32.const 205101) "a") (data (i32.const 205104) "a") (data (i32.const 205107) "a") (data (i32.const 205110) "a") (data (i32.const 205113) "a") (data (i32.const 205116) "a") (data (i32.const 205119) "a") (data (i32.const 205122) "a") (data (i32.const 205125) "a") (data (i32.const 205128) "a") (data (i32.const 205131) "a") (data (i32.const 205134) "a") (data (i32.const 205137) "a") (data (i32.const 205140) "a") (data (i32.const 205143) "a") (data (i32.const 205146) "a") (data (i32.const 205149) "a") (data (i32.const 205152) "a") (data (i32.const 205155) "a") (data (i32.const 205158) "a") (data (i32.const 205161) "a") (data (i32.const 205164) "a") (data (i32.const 205167) "a") (data (i32.const 205170) "a") (data (i32.const 205173) "a") (data (i32.const 205176) "a") (data (i32.const 205179) "a") (data (i32.const 205182) "a") (data (i32.const 205185) "a") (data (i32.const 205188) "a") (data (i32.const 205191) "a") (data (i32.const 205194) "a") (data (i32.const 205197) "a") (data (i32.const 205200) "a") (data (i32.const 205203) "a") (data (i32.const 205206) "a") (data (i32.const 205209) "a") (data (i32.const 205212) "a") (data (i32.const 205215) "a") (data (i32.const 205218) "a") (data (i32.const 205221) "a") (data (i32.const 205224) "a") (data (i32.const 205227) "a") (data (i32.const 205230) "a") (data (i32.const 205233) "a") (data (i32.const 205236) "a") (data (i32.const 205239) "a") (data (i32.const 205242) "a") (data (i32.const 205245) "a") (data (i32.const 205248) "a") (data (i32.const 205251) "a") (data (i32.const 205254) "a") (data (i32.const 205257) "a") (data (i32.const 205260) "a") (data (i32.const 205263) "a") (data (i32.const 205266) "a") (data (i32.const 205269) "a") (data (i32.const 205272) "a") (data (i32.const 205275) "a") (data (i32.const 205278) "a") (data (i32.const 205281) "a") (data (i32.const 205284) "a") (data (i32.const 205287) "a") (data (i32.const 205290) "a") (data (i32.const 205293) "a") (data (i32.const 205296) "a") (data (i32.const 205299) "a") (data (i32.const 205302) "a") (data (i32.const 205305) "a") (data (i32.const 205308) "a") (data (i32.const 205311) "a") (data (i32.const 205314) "a") (data (i32.const 205317) "a") (data (i32.const 205320) "a") (data (i32.const 205323) "a") (data (i32.const 205326) "a") (data (i32.const 205329) "a") (data (i32.const 205332) "a") (data (i32.const 205335) "a") (data (i32.const 205338) "a") (data (i32.const 205341) "a") (data (i32.const 205344) "a") (data (i32.const 205347) "a") (data (i32.const 205350) "a") (data (i32.const 205353) "a") (data (i32.const 205356) "a") (data (i32.const 205359) "a") (data (i32.const 205362) "a") (data (i32.const 205365) "a") (data (i32.const 205368) "a") (data (i32.const 205371) "a") (data (i32.const 205374) "a") (data (i32.const 205377) "a") (data (i32.const 205380) "a") (data (i32.const 205383) "a") (data (i32.const 205386) "a") (data (i32.const 205389) "a") (data (i32.const 205392) "a") (data (i32.const 205395) "a") (data (i32.const 205398) "a") (data (i32.const 205401) "a") (data (i32.const 205404) "a") (data (i32.const 205407) "a") (data (i32.const 205410) "a") (data (i32.const 205413) "a") (data (i32.const 205416) "a") (data (i32.const 205419) "a") (data (i32.const 205422) "a") (data (i32.const 205425) "a") (data (i32.const 205428) "a") (data (i32.const 205431) "a") (data (i32.const 205434) "a") (data (i32.const 205437) "a") (data (i32.const 205440) "a") (data (i32.const 205443) "a") (data (i32.const 205446) "a") (data (i32.const 205449) "a") (data (i32.const 205452) "a") (data (i32.const 205455) "a") (data (i32.const 205458) "a") (data (i32.const 205461) "a") (data (i32.const 205464) "a") (data (i32.const 205467) "a") (data (i32.const 205470) "a") (data (i32.const 205473) "a") (data (i32.const 205476) "a") (data (i32.const 205479) "a") (data (i32.const 205482) "a") (data (i32.const 205485) "a") (data (i32.const 205488) "a") (data (i32.const 205491) "a") (data (i32.const 205494) "a") (data (i32.const 205497) "a") (data (i32.const 205500) "a") (data (i32.const 205503) "a") (data (i32.const 205506) "a") (data (i32.const 205509) "a") (data (i32.const 205512) "a") (data (i32.const 205515) "a") (data (i32.const 205518) "a") (data (i32.const 205521) "a") (data (i32.const 205524) "a") (data (i32.const 205527) "a") (data (i32.const 205530) "a") (data (i32.const 205533) "a") (data (i32.const 205536) "a") (data (i32.const 205539) "a") (data (i32.const 205542) "a") (data (i32.const 205545) "a") (data (i32.const 205548) "a") (data (i32.const 205551) "a") (data (i32.const 205554) "a") (data (i32.const 205557) "a") (data (i32.const 205560) "a") (data (i32.const 205563) "a") (data (i32.const 205566) "a") (data (i32.const 205569) "a") (data (i32.const 205572) "a") (data (i32.const 205575) "a") (data (i32.const 205578) "a") (data (i32.const 205581) "a") (data (i32.const 205584) "a") (data (i32.const 205587) "a") (data (i32.const 205590) "a") (data (i32.const 205593) "a") (data (i32.const 205596) "a") (data (i32.const 205599) "a") (data (i32.const 205602) "a") (data (i32.const 205605) "a") (data (i32.const 205608) "a") (data (i32.const 205611) "a") (data (i32.const 205614) "a") (data (i32.const 205617) "a") (data (i32.const 205620) "a") (data (i32.const 205623) "a") (data (i32.const 205626) "a") (data (i32.const 205629) "a") (data (i32.const 205632) "a") (data (i32.const 205635) "a") (data (i32.const 205638) "a") (data (i32.const 205641) "a") (data (i32.const 205644) "a") (data (i32.const 205647) "a") (data (i32.const 205650) "a") (data (i32.const 205653) "a") (data (i32.const 205656) "a") (data (i32.const 205659) "a") (data (i32.const 205662) "a") (data (i32.const 205665) "a") (data (i32.const 205668) "a") (data (i32.const 205671) "a") (data (i32.const 205674) "a") (data (i32.const 205677) "a") (data (i32.const 205680) "a") (data (i32.const 205683) "a") (data (i32.const 205686) "a") (data (i32.const 205689) "a") (data (i32.const 205692) "a") (data (i32.const 205695) "a") (data (i32.const 205698) "a") (data (i32.const 205701) "a") (data (i32.const 205704) "a") (data (i32.const 205707) "a") (data (i32.const 205710) "a") (data (i32.const 205713) "a") (data (i32.const 205716) "a") (data (i32.const 205719) "a") (data (i32.const 205722) "a") (data (i32.const 205725) "a") (data (i32.const 205728) "a") (data (i32.const 205731) "a") (data (i32.const 205734) "a") (data (i32.const 205737) "a") (data (i32.const 205740) "a") (data (i32.const 205743) "a") (data (i32.const 205746) "a") (data (i32.const 205749) "a") (data (i32.const 205752) "a") (data (i32.const 205755) "a") (data (i32.const 205758) "a") (data (i32.const 205761) "a") (data (i32.const 205764) "a") (data (i32.const 205767) "a") (data (i32.const 205770) "a") (data (i32.const 205773) "a") (data (i32.const 205776) "a") (data (i32.const 205779) "a") (data (i32.const 205782) "a") (data (i32.const 205785) "a") (data (i32.const 205788) "a") (data (i32.const 205791) "a") (data (i32.const 205794) "a") (data (i32.const 205797) "a") (data (i32.const 205800) "a") (data (i32.const 205803) "a") (data (i32.const 205806) "a") (data (i32.const 205809) "a") (data (i32.const 205812) "a") (data (i32.const 205815) "a") (data (i32.const 205818) "a") (data (i32.const 205821) "a") (data (i32.const 205824) "a") (data (i32.const 205827) "a") (data (i32.const 205830) "a") (data (i32.const 205833) "a") (data (i32.const 205836) "a") (data (i32.const 205839) "a") (data (i32.const 205842) "a") (data (i32.const 205845) "a") (data (i32.const 205848) "a") (data (i32.const 205851) "a") (data (i32.const 205854) "a") (data (i32.const 205857) "a") (data (i32.const 205860) "a") (data (i32.const 205863) "a") (data (i32.const 205866) "a") (data (i32.const 205869) "a") (data (i32.const 205872) "a") (data (i32.const 205875) "a") (data (i32.const 205878) "a") (data (i32.const 205881) "a") (data (i32.const 205884) "a") (data (i32.const 205887) "a") (data (i32.const 205890) "a") (data (i32.const 205893) "a") (data (i32.const 205896) "a") (data (i32.const 205899) "a") (data (i32.const 205902) "a") (data (i32.const 205905) "a") (data (i32.const 205908) "a") (data (i32.const 205911) "a") (data (i32.const 205914) "a") (data (i32.const 205917) "a") (data (i32.const 205920) "a") (data (i32.const 205923) "a") (data (i32.const 205926) "a") (data (i32.const 205929) "a") (data (i32.const 205932) "a") (data (i32.const 205935) "a") (data (i32.const 205938) "a") (data (i32.const 205941) "a") (data (i32.const 205944) "a") (data (i32.const 205947) "a") (data (i32.const 205950) "a") (data (i32.const 205953) "a") (data (i32.const 205956) "a") (data (i32.const 205959) "a") (data (i32.const 205962) "a") (data (i32.const 205965) "a") (data (i32.const 205968) "a") (data (i32.const 205971) "a") (data (i32.const 205974) "a") (data (i32.const 205977) "a") (data (i32.const 205980) "a") (data (i32.const 205983) "a") (data (i32.const 205986) "a") (data (i32.const 205989) "a") (data (i32.const 205992) "a") (data (i32.const 205995) "a") (data (i32.const 205998) "a") (data (i32.const 206001) "a") (data (i32.const 206004) "a") (data (i32.const 206007) "a") (data (i32.const 206010) "a") (data (i32.const 206013) "a") (data (i32.const 206016) "a") (data (i32.const 206019) "a") (data (i32.const 206022) "a") (data (i32.const 206025) "a") (data (i32.const 206028) "a") (data (i32.const 206031) "a") (data (i32.const 206034) "a") (data (i32.const 206037) "a") (data (i32.const 206040) "a") (data (i32.const 206043) "a") (data (i32.const 206046) "a") (data (i32.const 206049) "a") (data (i32.const 206052) "a") (data (i32.const 206055) "a") (data (i32.const 206058) "a") (data (i32.const 206061) "a") (data (i32.const 206064) "a") (data (i32.const 206067) "a") (data (i32.const 206070) "a") (data (i32.const 206073) "a") (data (i32.const 206076) "a") (data (i32.const 206079) "a") (data (i32.const 206082) "a") (data (i32.const 206085) "a") (data (i32.const 206088) "a") (data (i32.const 206091) "a") (data (i32.const 206094) "a") (data (i32.const 206097) "a") (data (i32.const 206100) "a") (data (i32.const 206103) "a") (data (i32.const 206106) "a") (data (i32.const 206109) "a") (data (i32.const 206112) "a") (data (i32.const 206115) "a") (data (i32.const 206118) "a") (data (i32.const 206121) "a") (data (i32.const 206124) "a") (data (i32.const 206127) "a") (data (i32.const 206130) "a") (data (i32.const 206133) "a") (data (i32.const 206136) "a") (data (i32.const 206139) "a") (data (i32.const 206142) "a") (data (i32.const 206145) "a") (data (i32.const 206148) "a") (data (i32.const 206151) "a") (data (i32.const 206154) "a") (data (i32.const 206157) "a") (data (i32.const 206160) "a") (data (i32.const 206163) "a") (data (i32.const 206166) "a") (data (i32.const 206169) "a") (data (i32.const 206172) "a") (data (i32.const 206175) "a") (data (i32.const 206178) "a") (data (i32.const 206181) "a") (data (i32.const 206184) "a") (data (i32.const 206187) "a") (data (i32.const 206190) "a") (data (i32.const 206193) "a") (data (i32.const 206196) "a") (data (i32.const 206199) "a") (data (i32.const 206202) "a") (data (i32.const 206205) "a") (data (i32.const 206208) "a") (data (i32.const 206211) "a") (data (i32.const 206214) "a") (data (i32.const 206217) "a") (data (i32.const 206220) "a") (data (i32.const 206223) "a") (data (i32.const 206226) "a") (data (i32.const 206229) "a") (data (i32.const 206232) "a") (data (i32.const 206235) "a") (data (i32.const 206238) "a") (data (i32.const 206241) "a") (data (i32.const 206244) "a") (data (i32.const 206247) "a") (data (i32.const 206250) "a") (data (i32.const 206253) "a") (data (i32.const 206256) "a") (data (i32.const 206259) "a") (data (i32.const 206262) "a") (data (i32.const 206265) "a") (data (i32.const 206268) "a") (data (i32.const 206271) "a") (data (i32.const 206274) "a") (data (i32.const 206277) "a") (data (i32.const 206280) "a") (data (i32.const 206283) "a") (data (i32.const 206286) "a") (data (i32.const 206289) "a") (data (i32.const 206292) "a") (data (i32.const 206295) "a") (data (i32.const 206298) "a") (data (i32.const 206301) "a") (data (i32.const 206304) "a") (data (i32.const 206307) "a") (data (i32.const 206310) "a") (data (i32.const 206313) "a") (data (i32.const 206316) "a") (data (i32.const 206319) "a") (data (i32.const 206322) "a") (data (i32.const 206325) "a") (data (i32.const 206328) "a") (data (i32.const 206331) "a") (data (i32.const 206334) "a") (data (i32.const 206337) "a") (data (i32.const 206340) "a") (data (i32.const 206343) "a") (data (i32.const 206346) "a") (data (i32.const 206349) "a") (data (i32.const 206352) "a") (data (i32.const 206355) "a") (data (i32.const 206358) "a") (data (i32.const 206361) "a") (data (i32.const 206364) "a") (data (i32.const 206367) "a") (data (i32.const 206370) "a") (data (i32.const 206373) "a") (data (i32.const 206376) "a") (data (i32.const 206379) "a") (data (i32.const 206382) "a") (data (i32.const 206385) "a") (data (i32.const 206388) "a") (data (i32.const 206391) "a") (data (i32.const 206394) "a") (data (i32.const 206397) "a") (data (i32.const 206400) "a") (data (i32.const 206403) "a") (data (i32.const 206406) "a") (data (i32.const 206409) "a") (data (i32.const 206412) "a") (data (i32.const 206415) "a") (data (i32.const 206418) "a") (data (i32.const 206421) "a") (data (i32.const 206424) "a") (data (i32.const 206427) "a") (data (i32.const 206430) "a") (data (i32.const 206433) "a") (data (i32.const 206436) "a") (data (i32.const 206439) "a") (data (i32.const 206442) "a") (data (i32.const 206445) "a") (data (i32.const 206448) "a") (data (i32.const 206451) "a") (data (i32.const 206454) "a") (data (i32.const 206457) "a") (data (i32.const 206460) "a") (data (i32.const 206463) "a") (data (i32.const 206466) "a") (data (i32.const 206469) "a") (data (i32.const 206472) "a") (data (i32.const 206475) "a") (data (i32.const 206478) "a") (data (i32.const 206481) "a") (data (i32.const 206484) "a") (data (i32.const 206487) "a") (data (i32.const 206490) "a") (data (i32.const 206493) "a") (data (i32.const 206496) "a") (data (i32.const 206499) "a") (data (i32.const 206502) "a") (data (i32.const 206505) "a") (data (i32.const 206508) "a") (data (i32.const 206511) "a") (data (i32.const 206514) "a") (data (i32.const 206517) "a") (data (i32.const 206520) "a") (data (i32.const 206523) "a") (data (i32.const 206526) "a") (data (i32.const 206529) "a") (data (i32.const 206532) "a") (data (i32.const 206535) "a") (data (i32.const 206538) "a") (data (i32.const 206541) "a") (data (i32.const 206544) "a") (data (i32.const 206547) "a") (data (i32.const 206550) "a") (data (i32.const 206553) "a") (data (i32.const 206556) "a") (data (i32.const 206559) "a") (data (i32.const 206562) "a") (data (i32.const 206565) "a") (data (i32.const 206568) "a") (data (i32.const 206571) "a") (data (i32.const 206574) "a") (data (i32.const 206577) "a") (data (i32.const 206580) "a") (data (i32.const 206583) "a") (data (i32.const 206586) "a") (data (i32.const 206589) "a") (data (i32.const 206592) "a") (data (i32.const 206595) "a") (data (i32.const 206598) "a") (data (i32.const 206601) "a") (data (i32.const 206604) "a") (data (i32.const 206607) "a") (data (i32.const 206610) "a") (data (i32.const 206613) "a") (data (i32.const 206616) "a") (data (i32.const 206619) "a") (data (i32.const 206622) "a") (data (i32.const 206625) "a") (data (i32.const 206628) "a") (data (i32.const 206631) "a") (data (i32.const 206634) "a") (data (i32.const 206637) "a") (data (i32.const 206640) "a") (data (i32.const 206643) "a") (data (i32.const 206646) "a") (data (i32.const 206649) "a") (data (i32.const 206652) "a") (data (i32.const 206655) "a") (data (i32.const 206658) "a") (data (i32.const 206661) "a") (data (i32.const 206664) "a") (data (i32.const 206667) "a") (data (i32.const 206670) "a") (data (i32.const 206673) "a") (data (i32.const 206676) "a") (data (i32.const 206679) "a") (data (i32.const 206682) "a") (data (i32.const 206685) "a") (data (i32.const 206688) "a") (data (i32.const 206691) "a") (data (i32.const 206694) "a") (data (i32.const 206697) "a") (data (i32.const 206700) "a") (data (i32.const 206703) "a") (data (i32.const 206706) "a") (data (i32.const 206709) "a") (data (i32.const 206712) "a") (data (i32.const 206715) "a") (data (i32.const 206718) "a") (data (i32.const 206721) "a") (data (i32.const 206724) "a") (data (i32.const 206727) "a") (data (i32.const 206730) "a") (data (i32.const 206733) "a") (data (i32.const 206736) "a") (data (i32.const 206739) "a") (data (i32.const 206742) "a") (data (i32.const 206745) "a") (data (i32.const 206748) "a") (data (i32.const 206751) "a") (data (i32.const 206754) "a") (data (i32.const 206757) "a") (data (i32.const 206760) "a") (data (i32.const 206763) "a") (data (i32.const 206766) "a") (data (i32.const 206769) "a") (data (i32.const 206772) "a") (data (i32.const 206775) "a") (data (i32.const 206778) "a") (data (i32.const 206781) "a") (data (i32.const 206784) "a") (data (i32.const 206787) "a") (data (i32.const 206790) "a") (data (i32.const 206793) "a") (data (i32.const 206796) "a") (data (i32.const 206799) "a") (data (i32.const 206802) "a") (data (i32.const 206805) "a") (data (i32.const 206808) "a") (data (i32.const 206811) "a") (data (i32.const 206814) "a") (data (i32.const 206817) "a") (data (i32.const 206820) "a") (data (i32.const 206823) "a") (data (i32.const 206826) "a") (data (i32.const 206829) "a") (data (i32.const 206832) "a") (data (i32.const 206835) "a") (data (i32.const 206838) "a") (data (i32.const 206841) "a") (data (i32.const 206844) "a") (data (i32.const 206847) "a") (data (i32.const 206850) "a") (data (i32.const 206853) "a") (data (i32.const 206856) "a") (data (i32.const 206859) "a") (data (i32.const 206862) "a") (data (i32.const 206865) "a") (data (i32.const 206868) "a") (data (i32.const 206871) "a") (data (i32.const 206874) "a") (data (i32.const 206877) "a") (data (i32.const 206880) "a") (data (i32.const 206883) "a") (data (i32.const 206886) "a") (data (i32.const 206889) "a") (data (i32.const 206892) "a") (data (i32.const 206895) "a") (data (i32.const 206898) "a") (data (i32.const 206901) "a") (data (i32.const 206904) "a") (data (i32.const 206907) "a") (data (i32.const 206910) "a") (data (i32.const 206913) "a") (data (i32.const 206916) "a") (data (i32.const 206919) "a") (data (i32.const 206922) "a") (data (i32.const 206925) "a") (data (i32.const 206928) "a") (data (i32.const 206931) "a") (data (i32.const 206934) "a") (data (i32.const 206937) "a") (data (i32.const 206940) "a") (data (i32.const 206943) "a") (data (i32.const 206946) "a") (data (i32.const 206949) "a") (data (i32.const 206952) "a") (data (i32.const 206955) "a") (data (i32.const 206958) "a") (data (i32.const 206961) "a") (data (i32.const 206964) "a") (data (i32.const 206967) "a") (data (i32.const 206970) "a") (data (i32.const 206973) "a") (data (i32.const 206976) "a") (data (i32.const 206979) "a") (data (i32.const 206982) "a") (data (i32.const 206985) "a") (data (i32.const 206988) "a") (data (i32.const 206991) "a") (data (i32.const 206994) "a") (data (i32.const 206997) "a") (data (i32.const 207000) "a") (data (i32.const 207003) "a") (data (i32.const 207006) "a") (data (i32.const 207009) "a") (data (i32.const 207012) "a") (data (i32.const 207015) "a") (data (i32.const 207018) "a") (data (i32.const 207021) "a") (data (i32.const 207024) "a") (data (i32.const 207027) "a") (data (i32.const 207030) "a") (data (i32.const 207033) "a") (data (i32.const 207036) "a") (data (i32.const 207039) "a") (data (i32.const 207042) "a") (data (i32.const 207045) "a") (data (i32.const 207048) "a") (data (i32.const 207051) "a") (data (i32.const 207054) "a") (data (i32.const 207057) "a") (data (i32.const 207060) "a") (data (i32.const 207063) "a") (data (i32.const 207066) "a") (data (i32.const 207069) "a") (data (i32.const 207072) "a") (data (i32.const 207075) "a") (data (i32.const 207078) "a") (data (i32.const 207081) "a") (data (i32.const 207084) "a") (data (i32.const 207087) "a") (data (i32.const 207090) "a") (data (i32.const 207093) "a") (data (i32.const 207096) "a") (data (i32.const 207099) "a") (data (i32.const 207102) "a") (data (i32.const 207105) "a") (data (i32.const 207108) "a") (data (i32.const 207111) "a") (data (i32.const 207114) "a") (data (i32.const 207117) "a") (data (i32.const 207120) "a") (data (i32.const 207123) "a") (data (i32.const 207126) "a") (data (i32.const 207129) "a") (data (i32.const 207132) "a") (data (i32.const 207135) "a") (data (i32.const 207138) "a") (data (i32.const 207141) "a") (data (i32.const 207144) "a") (data (i32.const 207147) "a") (data (i32.const 207150) "a") (data (i32.const 207153) "a") (data (i32.const 207156) "a") (data (i32.const 207159) "a") (data (i32.const 207162) "a") (data (i32.const 207165) "a") (data (i32.const 207168) "a") (data (i32.const 207171) "a") (data (i32.const 207174) "a") (data (i32.const 207177) "a") (data (i32.const 207180) "a") (data (i32.const 207183) "a") (data (i32.const 207186) "a") (data (i32.const 207189) "a") (data (i32.const 207192) "a") (data (i32.const 207195) "a") (data (i32.const 207198) "a") (data (i32.const 207201) "a") (data (i32.const 207204) "a") (data (i32.const 207207) "a") (data (i32.const 207210) "a") (data (i32.const 207213) "a") (data (i32.const 207216) "a") (data (i32.const 207219) "a") (data (i32.const 207222) "a") (data (i32.const 207225) "a") (data (i32.const 207228) "a") (data (i32.const 207231) "a") (data (i32.const 207234) "a") (data (i32.const 207237) "a") (data (i32.const 207240) "a") (data (i32.const 207243) "a") (data (i32.const 207246) "a") (data (i32.const 207249) "a") (data (i32.const 207252) "a") (data (i32.const 207255) "a") (data (i32.const 207258) "a") (data (i32.const 207261) "a") (data (i32.const 207264) "a") (data (i32.const 207267) "a") (data (i32.const 207270) "a") (data (i32.const 207273) "a") (data (i32.const 207276) "a") (data (i32.const 207279) "a") (data (i32.const 207282) "a") (data (i32.const 207285) "a") (data (i32.const 207288) "a") (data (i32.const 207291) "a") (data (i32.const 207294) "a") (data (i32.const 207297) "a") (data (i32.const 207300) "a") (data (i32.const 207303) "a") (data (i32.const 207306) "a") (data (i32.const 207309) "a") (data (i32.const 207312) "a") (data (i32.const 207315) "a") (data (i32.const 207318) "a") (data (i32.const 207321) "a") (data (i32.const 207324) "a") (data (i32.const 207327) "a") (data (i32.const 207330) "a") (data (i32.const 207333) "a") (data (i32.const 207336) "a") (data (i32.const 207339) "a") (data (i32.const 207342) "a") (data (i32.const 207345) "a") (data (i32.const 207348) "a") (data (i32.const 207351) "a") (data (i32.const 207354) "a") (data (i32.const 207357) "a") (data (i32.const 207360) "a") (data (i32.const 207363) "a") (data (i32.const 207366) "a") (data (i32.const 207369) "a") (data (i32.const 207372) "a") (data (i32.const 207375) "a") (data (i32.const 207378) "a") (data (i32.const 207381) "a") (data (i32.const 207384) "a") (data (i32.const 207387) "a") (data (i32.const 207390) "a") (data (i32.const 207393) "a") (data (i32.const 207396) "a") (data (i32.const 207399) "a") (data (i32.const 207402) "a") (data (i32.const 207405) "a") (data (i32.const 207408) "a") (data (i32.const 207411) "a") (data (i32.const 207414) "a") (data (i32.const 207417) "a") (data (i32.const 207420) "a") (data (i32.const 207423) "a") (data (i32.const 207426) "a") (data (i32.const 207429) "a") (data (i32.const 207432) "a") (data (i32.const 207435) "a") (data (i32.const 207438) "a") (data (i32.const 207441) "a") (data (i32.const 207444) "a") (data (i32.const 207447) "a") (data (i32.const 207450) "a") (data (i32.const 207453) "a") (data (i32.const 207456) "a") (data (i32.const 207459) "a") (data (i32.const 207462) "a") (data (i32.const 207465) "a") (data (i32.const 207468) "a") (data (i32.const 207471) "a") (data (i32.const 207474) "a") (data (i32.const 207477) "a") (data (i32.const 207480) "a") (data (i32.const 207483) "a") (data (i32.const 207486) "a") (data (i32.const 207489) "a") (data (i32.const 207492) "a") (data (i32.const 207495) "a") (data (i32.const 207498) "a") (data (i32.const 207501) "a") (data (i32.const 207504) "a") (data (i32.const 207507) "a") (data (i32.const 207510) "a") (data (i32.const 207513) "a") (data (i32.const 207516) "a") (data (i32.const 207519) "a") (data (i32.const 207522) "a") (data (i32.const 207525) "a") (data (i32.const 207528) "a") (data (i32.const 207531) "a") (data (i32.const 207534) "a") (data (i32.const 207537) "a") (data (i32.const 207540) "a") (data (i32.const 207543) "a") (data (i32.const 207546) "a") (data (i32.const 207549) "a") (data (i32.const 207552) "a") (data (i32.const 207555) "a") (data (i32.const 207558) "a") (data (i32.const 207561) "a") (data (i32.const 207564) "a") (data (i32.const 207567) "a") (data (i32.const 207570) "a") (data (i32.const 207573) "a") (data (i32.const 207576) "a") (data (i32.const 207579) "a") (data (i32.const 207582) "a") (data (i32.const 207585) "a") (data (i32.const 207588) "a") (data (i32.const 207591) "a") (data (i32.const 207594) "a") (data (i32.const 207597) "a") (data (i32.const 207600) "a") (data (i32.const 207603) "a") (data (i32.const 207606) "a") (data (i32.const 207609) "a") (data (i32.const 207612) "a") (data (i32.const 207615) "a") (data (i32.const 207618) "a") (data (i32.const 207621) "a") (data (i32.const 207624) "a") (data (i32.const 207627) "a") (data (i32.const 207630) "a") (data (i32.const 207633) "a") (data (i32.const 207636) "a") (data (i32.const 207639) "a") (data (i32.const 207642) "a") (data (i32.const 207645) "a") (data (i32.const 207648) "a") (data (i32.const 207651) "a") (data (i32.const 207654) "a") (data (i32.const 207657) "a") (data (i32.const 207660) "a") (data (i32.const 207663) "a") (data (i32.const 207666) "a") (data (i32.const 207669) "a") (data (i32.const 207672) "a") (data (i32.const 207675) "a") (data (i32.const 207678) "a") (data (i32.const 207681) "a") (data (i32.const 207684) "a") (data (i32.const 207687) "a") (data (i32.const 207690) "a") (data (i32.const 207693) "a") (data (i32.const 207696) "a") (data (i32.const 207699) "a") (data (i32.const 207702) "a") (data (i32.const 207705) "a") (data (i32.const 207708) "a") (data (i32.const 207711) "a") (data (i32.const 207714) "a") (data (i32.const 207717) "a") (data (i32.const 207720) "a") (data (i32.const 207723) "a") (data (i32.const 207726) "a") (data (i32.const 207729) "a") (data (i32.const 207732) "a") (data (i32.const 207735) "a") (data (i32.const 207738) "a") (data (i32.const 207741) "a") (data (i32.const 207744) "a") (data (i32.const 207747) "a") (data (i32.const 207750) "a") (data (i32.const 207753) "a") (data (i32.const 207756) "a") (data (i32.const 207759) "a") (data (i32.const 207762) "a") (data (i32.const 207765) "a") (data (i32.const 207768) "a") (data (i32.const 207771) "a") (data (i32.const 207774) "a") (data (i32.const 207777) "a") (data (i32.const 207780) "a") (data (i32.const 207783) "a") (data (i32.const 207786) "a") (data (i32.const 207789) "a") (data (i32.const 207792) "a") (data (i32.const 207795) "a") (data (i32.const 207798) "a") (data (i32.const 207801) "a") (data (i32.const 207804) "a") (data (i32.const 207807) "a") (data (i32.const 207810) "a") (data (i32.const 207813) "a") (data (i32.const 207816) "a") (data (i32.const 207819) "a") (data (i32.const 207822) "a") (data (i32.const 207825) "a") (data (i32.const 207828) "a") (data (i32.const 207831) "a") (data (i32.const 207834) "a") (data (i32.const 207837) "a") (data (i32.const 207840) "a") (data (i32.const 207843) "a") (data (i32.const 207846) "a") (data (i32.const 207849) "a") (data (i32.const 207852) "a") (data (i32.const 207855) "a") (data (i32.const 207858) "a") (data (i32.const 207861) "a") (data (i32.const 207864) "a") (data (i32.const 207867) "a") (data (i32.const 207870) "a") (data (i32.const 207873) "a") (data (i32.const 207876) "a") (data (i32.const 207879) "a") (data (i32.const 207882) "a") (data (i32.const 207885) "a") (data (i32.const 207888) "a") (data (i32.const 207891) "a") (data (i32.const 207894) "a") (data (i32.const 207897) "a") (data (i32.const 207900) "a") (data (i32.const 207903) "a") (data (i32.const 207906) "a") (data (i32.const 207909) "a") (data (i32.const 207912) "a") (data (i32.const 207915) "a") (data (i32.const 207918) "a") (data (i32.const 207921) "a") (data (i32.const 207924) "a") (data (i32.const 207927) "a") (data (i32.const 207930) "a") (data (i32.const 207933) "a") (data (i32.const 207936) "a") (data (i32.const 207939) "a") (data (i32.const 207942) "a") (data (i32.const 207945) "a") (data (i32.const 207948) "a") (data (i32.const 207951) "a") (data (i32.const 207954) "a") (data (i32.const 207957) "a") (data (i32.const 207960) "a") (data (i32.const 207963) "a") (data (i32.const 207966) "a") (data (i32.const 207969) "a") (data (i32.const 207972) "a") (data (i32.const 207975) "a") (data (i32.const 207978) "a") (data (i32.const 207981) "a") (data (i32.const 207984) "a") (data (i32.const 207987) "a") (data (i32.const 207990) "a") (data (i32.const 207993) "a") (data (i32.const 207996) "a") (data (i32.const 207999) "a") (data (i32.const 208002) "a") (data (i32.const 208005) "a") (data (i32.const 208008) "a") (data (i32.const 208011) "a") (data (i32.const 208014) "a") (data (i32.const 208017) "a") (data (i32.const 208020) "a") (data (i32.const 208023) "a") (data (i32.const 208026) "a") (data (i32.const 208029) "a") (data (i32.const 208032) "a") (data (i32.const 208035) "a") (data (i32.const 208038) "a") (data (i32.const 208041) "a") (data (i32.const 208044) "a") (data (i32.const 208047) "a") (data (i32.const 208050) "a") (data (i32.const 208053) "a") (data (i32.const 208056) "a") (data (i32.const 208059) "a") (data (i32.const 208062) "a") (data (i32.const 208065) "a") (data (i32.const 208068) "a") (data (i32.const 208071) "a") (data (i32.const 208074) "a") (data (i32.const 208077) "a") (data (i32.const 208080) "a") (data (i32.const 208083) "a") (data (i32.const 208086) "a") (data (i32.const 208089) "a") (data (i32.const 208092) "a") (data (i32.const 208095) "a") (data (i32.const 208098) "a") (data (i32.const 208101) "a") (data (i32.const 208104) "a") (data (i32.const 208107) "a") (data (i32.const 208110) "a") (data (i32.const 208113) "a") (data (i32.const 208116) "a") (data (i32.const 208119) "a") (data (i32.const 208122) "a") (data (i32.const 208125) "a") (data (i32.const 208128) "a") (data (i32.const 208131) "a") (data (i32.const 208134) "a") (data (i32.const 208137) "a") (data (i32.const 208140) "a") (data (i32.const 208143) "a") (data (i32.const 208146) "a") (data (i32.const 208149) "a") (data (i32.const 208152) "a") (data (i32.const 208155) "a") (data (i32.const 208158) "a") (data (i32.const 208161) "a") (data (i32.const 208164) "a") (data (i32.const 208167) "a") (data (i32.const 208170) "a") (data (i32.const 208173) "a") (data (i32.const 208176) "a") (data (i32.const 208179) "a") (data (i32.const 208182) "a") (data (i32.const 208185) "a") (data (i32.const 208188) "a") (data (i32.const 208191) "a") (data (i32.const 208194) "a") (data (i32.const 208197) "a") (data (i32.const 208200) "a") (data (i32.const 208203) "a") (data (i32.const 208206) "a") (data (i32.const 208209) "a") (data (i32.const 208212) "a") (data (i32.const 208215) "a") (data (i32.const 208218) "a") (data (i32.const 208221) "a") (data (i32.const 208224) "a") (data (i32.const 208227) "a") (data (i32.const 208230) "a") (data (i32.const 208233) "a") (data (i32.const 208236) "a") (data (i32.const 208239) "a") (data (i32.const 208242) "a") (data (i32.const 208245) "a") (data (i32.const 208248) "a") (data (i32.const 208251) "a") (data (i32.const 208254) "a") (data (i32.const 208257) "a") (data (i32.const 208260) "a") (data (i32.const 208263) "a") (data (i32.const 208266) "a") (data (i32.const 208269) "a") (data (i32.const 208272) "a") (data (i32.const 208275) "a") (data (i32.const 208278) "a") (data (i32.const 208281) "a") (data (i32.const 208284) "a") (data (i32.const 208287) "a") (data (i32.const 208290) "a") (data (i32.const 208293) "a") (data (i32.const 208296) "a") (data (i32.const 208299) "a") (data (i32.const 208302) "a") (data (i32.const 208305) "a") (data (i32.const 208308) "a") (data (i32.const 208311) "a") (data (i32.const 208314) "a") (data (i32.const 208317) "a") (data (i32.const 208320) "a") (data (i32.const 208323) "a") (data (i32.const 208326) "a") (data (i32.const 208329) "a") (data (i32.const 208332) "a") (data (i32.const 208335) "a") (data (i32.const 208338) "a") (data (i32.const 208341) "a") (data (i32.const 208344) "a") (data (i32.const 208347) "a") (data (i32.const 208350) "a") (data (i32.const 208353) "a") (data (i32.const 208356) "a") (data (i32.const 208359) "a") (data (i32.const 208362) "a") (data (i32.const 208365) "a") (data (i32.const 208368) "a") (data (i32.const 208371) "a") (data (i32.const 208374) "a") (data (i32.const 208377) "a") (data (i32.const 208380) "a") (data (i32.const 208383) "a") (data (i32.const 208386) "a") (data (i32.const 208389) "a") (data (i32.const 208392) "a") (data (i32.const 208395) "a") (data (i32.const 208398) "a") (data (i32.const 208401) "a") (data (i32.const 208404) "a") (data (i32.const 208407) "a") (data (i32.const 208410) "a") (data (i32.const 208413) "a") (data (i32.const 208416) "a") (data (i32.const 208419) "a") (data (i32.const 208422) "a") (data (i32.const 208425) "a") (data (i32.const 208428) "a") (data (i32.const 208431) "a") (data (i32.const 208434) "a") (data (i32.const 208437) "a") (data (i32.const 208440) "a") (data (i32.const 208443) "a") (data (i32.const 208446) "a") (data (i32.const 208449) "a") (data (i32.const 208452) "a") (data (i32.const 208455) "a") (data (i32.const 208458) "a") (data (i32.const 208461) "a") (data (i32.const 208464) "a") (data (i32.const 208467) "a") (data (i32.const 208470) "a") (data (i32.const 208473) "a") (data (i32.const 208476) "a") (data (i32.const 208479) "a") (data (i32.const 208482) "a") (data (i32.const 208485) "a") (data (i32.const 208488) "a") (data (i32.const 208491) "a") (data (i32.const 208494) "a") (data (i32.const 208497) "a") (data (i32.const 208500) "a") (data (i32.const 208503) "a") (data (i32.const 208506) "a") (data (i32.const 208509) "a") (data (i32.const 208512) "a") (data (i32.const 208515) "a") (data (i32.const 208518) "a") (data (i32.const 208521) "a") (data (i32.const 208524) "a") (data (i32.const 208527) "a") (data (i32.const 208530) "a") (data (i32.const 208533) "a") (data (i32.const 208536) "a") (data (i32.const 208539) "a") (data (i32.const 208542) "a") (data (i32.const 208545) "a") (data (i32.const 208548) "a") (data (i32.const 208551) "a") (data (i32.const 208554) "a") (data (i32.const 208557) "a") (data (i32.const 208560) "a") (data (i32.const 208563) "a") (data (i32.const 208566) "a") (data (i32.const 208569) "a") (data (i32.const 208572) "a") (data (i32.const 208575) "a") (data (i32.const 208578) "a") (data (i32.const 208581) "a") (data (i32.const 208584) "a") (data (i32.const 208587) "a") (data (i32.const 208590) "a") (data (i32.const 208593) "a") (data (i32.const 208596) "a") (data (i32.const 208599) "a") (data (i32.const 208602) "a") (data (i32.const 208605) "a") (data (i32.const 208608) "a") (data (i32.const 208611) "a") (data (i32.const 208614) "a") (data (i32.const 208617) "a") (data (i32.const 208620) "a") (data (i32.const 208623) "a") (data (i32.const 208626) "a") (data (i32.const 208629) "a") (data (i32.const 208632) "a") (data (i32.const 208635) "a") (data (i32.const 208638) "a") (data (i32.const 208641) "a") (data (i32.const 208644) "a") (data (i32.const 208647) "a") (data (i32.const 208650) "a") (data (i32.const 208653) "a") (data (i32.const 208656) "a") (data (i32.const 208659) "a") (data (i32.const 208662) "a") (data (i32.const 208665) "a") (data (i32.const 208668) "a") (data (i32.const 208671) "a") (data (i32.const 208674) "a") (data (i32.const 208677) "a") (data (i32.const 208680) "a") (data (i32.const 208683) "a") (data (i32.const 208686) "a") (data (i32.const 208689) "a") (data (i32.const 208692) "a") (data (i32.const 208695) "a") (data (i32.const 208698) "a") (data (i32.const 208701) "a") (data (i32.const 208704) "a") (data (i32.const 208707) "a") (data (i32.const 208710) "a") (data (i32.const 208713) "a") (data (i32.const 208716) "a") (data (i32.const 208719) "a") (data (i32.const 208722) "a") (data (i32.const 208725) "a") (data (i32.const 208728) "a") (data (i32.const 208731) "a") (data (i32.const 208734) "a") (data (i32.const 208737) "a") (data (i32.const 208740) "a") (data (i32.const 208743) "a") (data (i32.const 208746) "a") (data (i32.const 208749) "a") (data (i32.const 208752) "a") (data (i32.const 208755) "a") (data (i32.const 208758) "a") (data (i32.const 208761) "a") (data (i32.const 208764) "a") (data (i32.const 208767) "a") (data (i32.const 208770) "a") (data (i32.const 208773) "a") (data (i32.const 208776) "a") (data (i32.const 208779) "a") (data (i32.const 208782) "a") (data (i32.const 208785) "a") (data (i32.const 208788) "a") (data (i32.const 208791) "a") (data (i32.const 208794) "a") (data (i32.const 208797) "a") (data (i32.const 208800) "a") (data (i32.const 208803) "a") (data (i32.const 208806) "a") (data (i32.const 208809) "a") (data (i32.const 208812) "a") (data (i32.const 208815) "a") (data (i32.const 208818) "a") (data (i32.const 208821) "a") (data (i32.const 208824) "a") (data (i32.const 208827) "a") (data (i32.const 208830) "a") (data (i32.const 208833) "a") (data (i32.const 208836) "a") (data (i32.const 208839) "a") (data (i32.const 208842) "a") (data (i32.const 208845) "a") (data (i32.const 208848) "a") (data (i32.const 208851) "a") (data (i32.const 208854) "a") (data (i32.const 208857) "a") (data (i32.const 208860) "a") (data (i32.const 208863) "a") (data (i32.const 208866) "a") (data (i32.const 208869) "a") (data (i32.const 208872) "a") (data (i32.const 208875) "a") (data (i32.const 208878) "a") (data (i32.const 208881) "a") (data (i32.const 208884) "a") (data (i32.const 208887) "a") (data (i32.const 208890) "a") (data (i32.const 208893) "a") (data (i32.const 208896) "a") (data (i32.const 208899) "a") (data (i32.const 208902) "a") (data (i32.const 208905) "a") (data (i32.const 208908) "a") (data (i32.const 208911) "a") (data (i32.const 208914) "a") (data (i32.const 208917) "a") (data (i32.const 208920) "a") (data (i32.const 208923) "a") (data (i32.const 208926) "a") (data (i32.const 208929) "a") (data (i32.const 208932) "a") (data (i32.const 208935) "a") (data (i32.const 208938) "a") (data (i32.const 208941) "a") (data (i32.const 208944) "a") (data (i32.const 208947) "a") (data (i32.const 208950) "a") (data (i32.const 208953) "a") (data (i32.const 208956) "a") (data (i32.const 208959) "a") (data (i32.const 208962) "a") (data (i32.const 208965) "a") (data (i32.const 208968) "a") (data (i32.const 208971) "a") (data (i32.const 208974) "a") (data (i32.const 208977) "a") (data (i32.const 208980) "a") (data (i32.const 208983) "a") (data (i32.const 208986) "a") (data (i32.const 208989) "a") (data (i32.const 208992) "a") (data (i32.const 208995) "a") (data (i32.const 208998) "a") (data (i32.const 209001) "a") (data (i32.const 209004) "a") (data (i32.const 209007) "a") (data (i32.const 209010) "a") (data (i32.const 209013) "a") (data (i32.const 209016) "a") (data (i32.const 209019) "a") (data (i32.const 209022) "a") (data (i32.const 209025) "a") (data (i32.const 209028) "a") (data (i32.const 209031) "a") (data (i32.const 209034) "a") (data (i32.const 209037) "a") (data (i32.const 209040) "a") (data (i32.const 209043) "a") (data (i32.const 209046) "a") (data (i32.const 209049) "a") (data (i32.const 209052) "a") (data (i32.const 209055) "a") (data (i32.const 209058) "a") (data (i32.const 209061) "a") (data (i32.const 209064) "a") (data (i32.const 209067) "a") (data (i32.const 209070) "a") (data (i32.const 209073) "a") (data (i32.const 209076) "a") (data (i32.const 209079) "a") (data (i32.const 209082) "a") (data (i32.const 209085) "a") (data (i32.const 209088) "a") (data (i32.const 209091) "a") (data (i32.const 209094) "a") (data (i32.const 209097) "a") (data (i32.const 209100) "a") (data (i32.const 209103) "a") (data (i32.const 209106) "a") (data (i32.const 209109) "a") (data (i32.const 209112) "a") (data (i32.const 209115) "a") (data (i32.const 209118) "a") (data (i32.const 209121) "a") (data (i32.const 209124) "a") (data (i32.const 209127) "a") (data (i32.const 209130) "a") (data (i32.const 209133) "a") (data (i32.const 209136) "a") (data (i32.const 209139) "a") (data (i32.const 209142) "a") (data (i32.const 209145) "a") (data (i32.const 209148) "a") (data (i32.const 209151) "a") (data (i32.const 209154) "a") (data (i32.const 209157) "a") (data (i32.const 209160) "a") (data (i32.const 209163) "a") (data (i32.const 209166) "a") (data (i32.const 209169) "a") (data (i32.const 209172) "a") (data (i32.const 209175) "a") (data (i32.const 209178) "a") (data (i32.const 209181) "a") (data (i32.const 209184) "a") (data (i32.const 209187) "a") (data (i32.const 209190) "a") (data (i32.const 209193) "a") (data (i32.const 209196) "a") (data (i32.const 209199) "a") (data (i32.const 209202) "a") (data (i32.const 209205) "a") (data (i32.const 209208) "a") (data (i32.const 209211) "a") (data (i32.const 209214) "a") (data (i32.const 209217) "a") (data (i32.const 209220) "a") (data (i32.const 209223) "a") (data (i32.const 209226) "a") (data (i32.const 209229) "a") (data (i32.const 209232) "a") (data (i32.const 209235) "a") (data (i32.const 209238) "a") (data (i32.const 209241) "a") (data (i32.const 209244) "a") (data (i32.const 209247) "a") (data (i32.const 209250) "a") (data (i32.const 209253) "a") (data (i32.const 209256) "a") (data (i32.const 209259) "a") (data (i32.const 209262) "a") (data (i32.const 209265) "a") (data (i32.const 209268) "a") (data (i32.const 209271) "a") (data (i32.const 209274) "a") (data (i32.const 209277) "a") (data (i32.const 209280) "a") (data (i32.const 209283) "a") (data (i32.const 209286) "a") (data (i32.const 209289) "a") (data (i32.const 209292) "a") (data (i32.const 209295) "a") (data (i32.const 209298) "a") (data (i32.const 209301) "a") (data (i32.const 209304) "a") (data (i32.const 209307) "a") (data (i32.const 209310) "a") (data (i32.const 209313) "a") (data (i32.const 209316) "a") (data (i32.const 209319) "a") (data (i32.const 209322) "a") (data (i32.const 209325) "a") (data (i32.const 209328) "a") (data (i32.const 209331) "a") (data (i32.const 209334) "a") (data (i32.const 209337) "a") (data (i32.const 209340) "a") (data (i32.const 209343) "a") (data (i32.const 209346) "a") (data (i32.const 209349) "a") (data (i32.const 209352) "a") (data (i32.const 209355) "a") (data (i32.const 209358) "a") (data (i32.const 209361) "a") (data (i32.const 209364) "a") (data (i32.const 209367) "a") (data (i32.const 209370) "a") (data (i32.const 209373) "a") (data (i32.const 209376) "a") (data (i32.const 209379) "a") (data (i32.const 209382) "a") (data (i32.const 209385) "a") (data (i32.const 209388) "a") (data (i32.const 209391) "a") (data (i32.const 209394) "a") (data (i32.const 209397) "a") (data (i32.const 209400) "a") (data (i32.const 209403) "a") (data (i32.const 209406) "a") (data (i32.const 209409) "a") (data (i32.const 209412) "a") (data (i32.const 209415) "a") (data (i32.const 209418) "a") (data (i32.const 209421) "a") (data (i32.const 209424) "a") (data (i32.const 209427) "a") (data (i32.const 209430) "a") (data (i32.const 209433) "a") (data (i32.const 209436) "a") (data (i32.const 209439) "a") (data (i32.const 209442) "a") (data (i32.const 209445) "a") (data (i32.const 209448) "a") (data (i32.const 209451) "a") (data (i32.const 209454) "a") (data (i32.const 209457) "a") (data (i32.const 209460) "a") (data (i32.const 209463) "a") (data (i32.const 209466) "a") (data (i32.const 209469) "a") (data (i32.const 209472) "a") (data (i32.const 209475) "a") (data (i32.const 209478) "a") (data (i32.const 209481) "a") (data (i32.const 209484) "a") (data (i32.const 209487) "a") (data (i32.const 209490) "a") (data (i32.const 209493) "a") (data (i32.const 209496) "a") (data (i32.const 209499) "a") (data (i32.const 209502) "a") (data (i32.const 209505) "a") (data (i32.const 209508) "a") (data (i32.const 209511) "a") (data (i32.const 209514) "a") (data (i32.const 209517) "a") (data (i32.const 209520) "a") (data (i32.const 209523) "a") (data (i32.const 209526) "a") (data (i32.const 209529) "a") (data (i32.const 209532) "a") (data (i32.const 209535) "a") (data (i32.const 209538) "a") (data (i32.const 209541) "a") (data (i32.const 209544) "a") (data (i32.const 209547) "a") (data (i32.const 209550) "a") (data (i32.const 209553) "a") (data (i32.const 209556) "a") (data (i32.const 209559) "a") (data (i32.const 209562) "a") (data (i32.const 209565) "a") (data (i32.const 209568) "a") (data (i32.const 209571) "a") (data (i32.const 209574) "a") (data (i32.const 209577) "a") (data (i32.const 209580) "a") (data (i32.const 209583) "a") (data (i32.const 209586) "a") (data (i32.const 209589) "a") (data (i32.const 209592) "a") (data (i32.const 209595) "a") (data (i32.const 209598) "a") (data (i32.const 209601) "a") (data (i32.const 209604) "a") (data (i32.const 209607) "a") (data (i32.const 209610) "a") (data (i32.const 209613) "a") (data (i32.const 209616) "a") (data (i32.const 209619) "a") (data (i32.const 209622) "a") (data (i32.const 209625) "a") (data (i32.const 209628) "a") (data (i32.const 209631) "a") (data (i32.const 209634) "a") (data (i32.const 209637) "a") (data (i32.const 209640) "a") (data (i32.const 209643) "a") (data (i32.const 209646) "a") (data (i32.const 209649) "a") (data (i32.const 209652) "a") (data (i32.const 209655) "a") (data (i32.const 209658) "a") (data (i32.const 209661) "a") (data (i32.const 209664) "a") (data (i32.const 209667) "a") (data (i32.const 209670) "a") (data (i32.const 209673) "a") (data (i32.const 209676) "a") (data (i32.const 209679) "a") (data (i32.const 209682) "a") (data (i32.const 209685) "a") (data (i32.const 209688) "a") (data (i32.const 209691) "a") (data (i32.const 209694) "a") (data (i32.const 209697) "a") (data (i32.const 209700) "a") (data (i32.const 209703) "a") (data (i32.const 209706) "a") (data (i32.const 209709) "a") (data (i32.const 209712) "a") (data (i32.const 209715) "a") (data (i32.const 209718) "a") (data (i32.const 209721) "a") (data (i32.const 209724) "a") (data (i32.const 209727) "a") (data (i32.const 209730) "a") (data (i32.const 209733) "a") (data (i32.const 209736) "a") (data (i32.const 209739) "a") (data (i32.const 209742) "a") (data (i32.const 209745) "a") (data (i32.const 209748) "a") (data (i32.const 209751) "a") (data (i32.const 209754) "a") (data (i32.const 209757) "a") (data (i32.const 209760) "a") (data (i32.const 209763) "a") (data (i32.const 209766) "a") (data (i32.const 209769) "a") (data (i32.const 209772) "a") (data (i32.const 209775) "a") (data (i32.const 209778) "a") (data (i32.const 209781) "a") (data (i32.const 209784) "a") (data (i32.const 209787) "a") (data (i32.const 209790) "a") (data (i32.const 209793) "a") (data (i32.const 209796) "a") (data (i32.const 209799) "a") (data (i32.const 209802) "a") (data (i32.const 209805) "a") (data (i32.const 209808) "a") (data (i32.const 209811) "a") (data (i32.const 209814) "a") (data (i32.const 209817) "a") (data (i32.const 209820) "a") (data (i32.const 209823) "a") (data (i32.const 209826) "a") (data (i32.const 209829) "a") (data (i32.const 209832) "a") (data (i32.const 209835) "a") (data (i32.const 209838) "a") (data (i32.const 209841) "a") (data (i32.const 209844) "a") (data (i32.const 209847) "a") (data (i32.const 209850) "a") (data (i32.const 209853) "a") (data (i32.const 209856) "a") (data (i32.const 209859) "a") (data (i32.const 209862) "a") (data (i32.const 209865) "a") (data (i32.const 209868) "a") (data (i32.const 209871) "a") (data (i32.const 209874) "a") (data (i32.const 209877) "a") (data (i32.const 209880) "a") (data (i32.const 209883) "a") (data (i32.const 209886) "a") (data (i32.const 209889) "a") (data (i32.const 209892) "a") (data (i32.const 209895) "a") (data (i32.const 209898) "a") (data (i32.const 209901) "a") (data (i32.const 209904) "a") (data (i32.const 209907) "a") (data (i32.const 209910) "a") (data (i32.const 209913) "a") (data (i32.const 209916) "a") (data (i32.const 209919) "a") (data (i32.const 209922) "a") (data (i32.const 209925) "a") (data (i32.const 209928) "a") (data (i32.const 209931) "a") (data (i32.const 209934) "a") (data (i32.const 209937) "a") (data (i32.const 209940) "a") (data (i32.const 209943) "a") (data (i32.const 209946) "a") (data (i32.const 209949) "a") (data (i32.const 209952) "a") (data (i32.const 209955) "a") (data (i32.const 209958) "a") (data (i32.const 209961) "a") (data (i32.const 209964) "a") (data (i32.const 209967) "a") (data (i32.const 209970) "a") (data (i32.const 209973) "a") (data (i32.const 209976) "a") (data (i32.const 209979) "a") (data (i32.const 209982) "a") (data (i32.const 209985) "a") (data (i32.const 209988) "a") (data (i32.const 209991) "a") (data (i32.const 209994) "a") (data (i32.const 209997) "a") (data (i32.const 210000) "a") (data (i32.const 210003) "a") (data (i32.const 210006) "a") (data (i32.const 210009) "a") (data (i32.const 210012) "a") (data (i32.const 210015) "a") (data (i32.const 210018) "a") (data (i32.const 210021) "a") (data (i32.const 210024) "a") (data (i32.const 210027) "a") (data (i32.const 210030) "a") (data (i32.const 210033) "a") (data (i32.const 210036) "a") (data (i32.const 210039) "a") (data (i32.const 210042) "a") (data (i32.const 210045) "a") (data (i32.const 210048) "a") (data (i32.const 210051) "a") (data (i32.const 210054) "a") (data (i32.const 210057) "a") (data (i32.const 210060) "a") (data (i32.const 210063) "a") (data (i32.const 210066) "a") (data (i32.const 210069) "a") (data (i32.const 210072) "a") (data (i32.const 210075) "a") (data (i32.const 210078) "a") (data (i32.const 210081) "a") (data (i32.const 210084) "a") (data (i32.const 210087) "a") (data (i32.const 210090) "a") (data (i32.const 210093) "a") (data (i32.const 210096) "a") (data (i32.const 210099) "a") (data (i32.const 210102) "a") (data (i32.const 210105) "a") (data (i32.const 210108) "a") (data (i32.const 210111) "a") (data (i32.const 210114) "a") (data (i32.const 210117) "a") (data (i32.const 210120) "a") (data (i32.const 210123) "a") (data (i32.const 210126) "a") (data (i32.const 210129) "a") (data (i32.const 210132) "a") (data (i32.const 210135) "a") (data (i32.const 210138) "a") (data (i32.const 210141) "a") (data (i32.const 210144) "a") (data (i32.const 210147) "a") (data (i32.const 210150) "a") (data (i32.const 210153) "a") (data (i32.const 210156) "a") (data (i32.const 210159) "a") (data (i32.const 210162) "a") (data (i32.const 210165) "a") (data (i32.const 210168) "a") (data (i32.const 210171) "a") (data (i32.const 210174) "a") (data (i32.const 210177) "a") (data (i32.const 210180) "a") (data (i32.const 210183) "a") (data (i32.const 210186) "a") (data (i32.const 210189) "a") (data (i32.const 210192) "a") (data (i32.const 210195) "a") (data (i32.const 210198) "a") (data (i32.const 210201) "a") (data (i32.const 210204) "a") (data (i32.const 210207) "a") (data (i32.const 210210) "a") (data (i32.const 210213) "a") (data (i32.const 210216) "a") (data (i32.const 210219) "a") (data (i32.const 210222) "a") (data (i32.const 210225) "a") (data (i32.const 210228) "a") (data (i32.const 210231) "a") (data (i32.const 210234) "a") (data (i32.const 210237) "a") (data (i32.const 210240) "a") (data (i32.const 210243) "a") (data (i32.const 210246) "a") (data (i32.const 210249) "a") (data (i32.const 210252) "a") (data (i32.const 210255) "a") (data (i32.const 210258) "a") (data (i32.const 210261) "a") (data (i32.const 210264) "a") (data (i32.const 210267) "a") (data (i32.const 210270) "a") (data (i32.const 210273) "a") (data (i32.const 210276) "a") (data (i32.const 210279) "a") (data (i32.const 210282) "a") (data (i32.const 210285) "a") (data (i32.const 210288) "a") (data (i32.const 210291) "a") (data (i32.const 210294) "a") (data (i32.const 210297) "a") (data (i32.const 210300) "a") (data (i32.const 210303) "a") (data (i32.const 210306) "a") (data (i32.const 210309) "a") (data (i32.const 210312) "a") (data (i32.const 210315) "a") (data (i32.const 210318) "a") (data (i32.const 210321) "a") (data (i32.const 210324) "a") (data (i32.const 210327) "a") (data (i32.const 210330) "a") (data (i32.const 210333) "a") (data (i32.const 210336) "a") (data (i32.const 210339) "a") (data (i32.const 210342) "a") (data (i32.const 210345) "a") (data (i32.const 210348) "a") (data (i32.const 210351) "a") (data (i32.const 210354) "a") (data (i32.const 210357) "a") (data (i32.const 210360) "a") (data (i32.const 210363) "a") (data (i32.const 210366) "a") (data (i32.const 210369) "a") (data (i32.const 210372) "a") (data (i32.const 210375) "a") (data (i32.const 210378) "a") (data (i32.const 210381) "a") (data (i32.const 210384) "a") (data (i32.const 210387) "a") (data (i32.const 210390) "a") (data (i32.const 210393) "a") (data (i32.const 210396) "a") (data (i32.const 210399) "a") (data (i32.const 210402) "a") (data (i32.const 210405) "a") (data (i32.const 210408) "a") (data (i32.const 210411) "a") (data (i32.const 210414) "a") (data (i32.const 210417) "a") (data (i32.const 210420) "a") (data (i32.const 210423) "a") (data (i32.const 210426) "a") (data (i32.const 210429) "a") (data (i32.const 210432) "a") (data (i32.const 210435) "a") (data (i32.const 210438) "a") (data (i32.const 210441) "a") (data (i32.const 210444) "a") (data (i32.const 210447) "a") (data (i32.const 210450) "a") (data (i32.const 210453) "a") (data (i32.const 210456) "a") (data (i32.const 210459) "a") (data (i32.const 210462) "a") (data (i32.const 210465) "a") (data (i32.const 210468) "a") (data (i32.const 210471) "a") (data (i32.const 210474) "a") (data (i32.const 210477) "a") (data (i32.const 210480) "a") (data (i32.const 210483) "a") (data (i32.const 210486) "a") (data (i32.const 210489) "a") (data (i32.const 210492) "a") (data (i32.const 210495) "a") (data (i32.const 210498) "a") (data (i32.const 210501) "a") (data (i32.const 210504) "a") (data (i32.const 210507) "a") (data (i32.const 210510) "a") (data (i32.const 210513) "a") (data (i32.const 210516) "a") (data (i32.const 210519) "a") (data (i32.const 210522) "a") (data (i32.const 210525) "a") (data (i32.const 210528) "a") (data (i32.const 210531) "a") (data (i32.const 210534) "a") (data (i32.const 210537) "a") (data (i32.const 210540) "a") (data (i32.const 210543) "a") (data (i32.const 210546) "a") (data (i32.const 210549) "a") (data (i32.const 210552) "a") (data (i32.const 210555) "a") (data (i32.const 210558) "a") (data (i32.const 210561) "a") (data (i32.const 210564) "a") (data (i32.const 210567) "a") (data (i32.const 210570) "a") (data (i32.const 210573) "a") (data (i32.const 210576) "a") (data (i32.const 210579) "a") (data (i32.const 210582) "a") (data (i32.const 210585) "a") (data (i32.const 210588) "a") (data (i32.const 210591) "a") (data (i32.const 210594) "a") (data (i32.const 210597) "a") (data (i32.const 210600) "a") (data (i32.const 210603) "a") (data (i32.const 210606) "a") (data (i32.const 210609) "a") (data (i32.const 210612) "a") (data (i32.const 210615) "a") (data (i32.const 210618) "a") (data (i32.const 210621) "a") (data (i32.const 210624) "a") (data (i32.const 210627) "a") (data (i32.const 210630) "a") (data (i32.const 210633) "a") (data (i32.const 210636) "a") (data (i32.const 210639) "a") (data (i32.const 210642) "a") (data (i32.const 210645) "a") (data (i32.const 210648) "a") (data (i32.const 210651) "a") (data (i32.const 210654) "a") (data (i32.const 210657) "a") (data (i32.const 210660) "a") (data (i32.const 210663) "a") (data (i32.const 210666) "a") (data (i32.const 210669) "a") (data (i32.const 210672) "a") (data (i32.const 210675) "a") (data (i32.const 210678) "a") (data (i32.const 210681) "a") (data (i32.const 210684) "a") (data (i32.const 210687) "a") (data (i32.const 210690) "a") (data (i32.const 210693) "a") (data (i32.const 210696) "a") (data (i32.const 210699) "a") (data (i32.const 210702) "a") (data (i32.const 210705) "a") (data (i32.const 210708) "a") (data (i32.const 210711) "a") (data (i32.const 210714) "a") (data (i32.const 210717) "a") (data (i32.const 210720) "a") (data (i32.const 210723) "a") (data (i32.const 210726) "a") (data (i32.const 210729) "a") (data (i32.const 210732) "a") (data (i32.const 210735) "a") (data (i32.const 210738) "a") (data (i32.const 210741) "a") (data (i32.const 210744) "a") (data (i32.const 210747) "a") (data (i32.const 210750) "a") (data (i32.const 210753) "a") (data (i32.const 210756) "a") (data (i32.const 210759) "a") (data (i32.const 210762) "a") (data (i32.const 210765) "a") (data (i32.const 210768) "a") (data (i32.const 210771) "a") (data (i32.const 210774) "a") (data (i32.const 210777) "a") (data (i32.const 210780) "a") (data (i32.const 210783) "a") (data (i32.const 210786) "a") (data (i32.const 210789) "a") (data (i32.const 210792) "a") (data (i32.const 210795) "a") (data (i32.const 210798) "a") (data (i32.const 210801) "a") (data (i32.const 210804) "a") (data (i32.const 210807) "a") (data (i32.const 210810) "a") (data (i32.const 210813) "a") (data (i32.const 210816) "a") (data (i32.const 210819) "a") (data (i32.const 210822) "a") (data (i32.const 210825) "a") (data (i32.const 210828) "a") (data (i32.const 210831) "a") (data (i32.const 210834) "a") (data (i32.const 210837) "a") (data (i32.const 210840) "a") (data (i32.const 210843) "a") (data (i32.const 210846) "a") (data (i32.const 210849) "a") (data (i32.const 210852) "a") (data (i32.const 210855) "a") (data (i32.const 210858) "a") (data (i32.const 210861) "a") (data (i32.const 210864) "a") (data (i32.const 210867) "a") (data (i32.const 210870) "a") (data (i32.const 210873) "a") (data (i32.const 210876) "a") (data (i32.const 210879) "a") (data (i32.const 210882) "a") (data (i32.const 210885) "a") (data (i32.const 210888) "a") (data (i32.const 210891) "a") (data (i32.const 210894) "a") (data (i32.const 210897) "a") (data (i32.const 210900) "a") (data (i32.const 210903) "a") (data (i32.const 210906) "a") (data (i32.const 210909) "a") (data (i32.const 210912) "a") (data (i32.const 210915) "a") (data (i32.const 210918) "a") (data (i32.const 210921) "a") (data (i32.const 210924) "a") (data (i32.const 210927) "a") (data (i32.const 210930) "a") (data (i32.const 210933) "a") (data (i32.const 210936) "a") (data (i32.const 210939) "a") (data (i32.const 210942) "a") (data (i32.const 210945) "a") (data (i32.const 210948) "a") (data (i32.const 210951) "a") (data (i32.const 210954) "a") (data (i32.const 210957) "a") (data (i32.const 210960) "a") (data (i32.const 210963) "a") (data (i32.const 210966) "a") (data (i32.const 210969) "a") (data (i32.const 210972) "a") (data (i32.const 210975) "a") (data (i32.const 210978) "a") (data (i32.const 210981) "a") (data (i32.const 210984) "a") (data (i32.const 210987) "a") (data (i32.const 210990) "a") (data (i32.const 210993) "a") (data (i32.const 210996) "a") (data (i32.const 210999) "a") (data (i32.const 211002) "a") (data (i32.const 211005) "a") (data (i32.const 211008) "a") (data (i32.const 211011) "a") (data (i32.const 211014) "a") (data (i32.const 211017) "a") (data (i32.const 211020) "a") (data (i32.const 211023) "a") (data (i32.const 211026) "a") (data (i32.const 211029) "a") (data (i32.const 211032) "a") (data (i32.const 211035) "a") (data (i32.const 211038) "a") (data (i32.const 211041) "a") (data (i32.const 211044) "a") (data (i32.const 211047) "a") (data (i32.const 211050) "a") (data (i32.const 211053) "a") (data (i32.const 211056) "a") (data (i32.const 211059) "a") (data (i32.const 211062) "a") (data (i32.const 211065) "a") (data (i32.const 211068) "a") (data (i32.const 211071) "a") (data (i32.const 211074) "a") (data (i32.const 211077) "a") (data (i32.const 211080) "a") (data (i32.const 211083) "a") (data (i32.const 211086) "a") (data (i32.const 211089) "a") (data (i32.const 211092) "a") (data (i32.const 211095) "a") (data (i32.const 211098) "a") (data (i32.const 211101) "a") (data (i32.const 211104) "a") (data (i32.const 211107) "a") (data (i32.const 211110) "a") (data (i32.const 211113) "a") (data (i32.const 211116) "a") (data (i32.const 211119) "a") (data (i32.const 211122) "a") (data (i32.const 211125) "a") (data (i32.const 211128) "a") (data (i32.const 211131) "a") (data (i32.const 211134) "a") (data (i32.const 211137) "a") (data (i32.const 211140) "a") (data (i32.const 211143) "a") (data (i32.const 211146) "a") (data (i32.const 211149) "a") (data (i32.const 211152) "a") (data (i32.const 211155) "a") (data (i32.const 211158) "a") (data (i32.const 211161) "a") (data (i32.const 211164) "a") (data (i32.const 211167) "a") (data (i32.const 211170) "a") (data (i32.const 211173) "a") (data (i32.const 211176) "a") (data (i32.const 211179) "a") (data (i32.const 211182) "a") (data (i32.const 211185) "a") (data (i32.const 211188) "a") (data (i32.const 211191) "a") (data (i32.const 211194) "a") (data (i32.const 211197) "a") (data (i32.const 211200) "a") (data (i32.const 211203) "a") (data (i32.const 211206) "a") (data (i32.const 211209) "a") (data (i32.const 211212) "a") (data (i32.const 211215) "a") (data (i32.const 211218) "a") (data (i32.const 211221) "a") (data (i32.const 211224) "a") (data (i32.const 211227) "a") (data (i32.const 211230) "a") (data (i32.const 211233) "a") (data (i32.const 211236) "a") (data (i32.const 211239) "a") (data (i32.const 211242) "a") (data (i32.const 211245) "a") (data (i32.const 211248) "a") (data (i32.const 211251) "a") (data (i32.const 211254) "a") (data (i32.const 211257) "a") (data (i32.const 211260) "a") (data (i32.const 211263) "a") (data (i32.const 211266) "a") (data (i32.const 211269) "a") (data (i32.const 211272) "a") (data (i32.const 211275) "a") (data (i32.const 211278) "a") (data (i32.const 211281) "a") (data (i32.const 211284) "a") (data (i32.const 211287) "a") (data (i32.const 211290) "a") (data (i32.const 211293) "a") (data (i32.const 211296) "a") (data (i32.const 211299) "a") (data (i32.const 211302) "a") (data (i32.const 211305) "a") (data (i32.const 211308) "a") (data (i32.const 211311) "a") (data (i32.const 211314) "a") (data (i32.const 211317) "a") (data (i32.const 211320) "a") (data (i32.const 211323) "a") (data (i32.const 211326) "a") (data (i32.const 211329) "a") (data (i32.const 211332) "a") (data (i32.const 211335) "a") (data (i32.const 211338) "a") (data (i32.const 211341) "a") (data (i32.const 211344) "a") (data (i32.const 211347) "a") (data (i32.const 211350) "a") (data (i32.const 211353) "a") (data (i32.const 211356) "a") (data (i32.const 211359) "a") (data (i32.const 211362) "a") (data (i32.const 211365) "a") (data (i32.const 211368) "a") (data (i32.const 211371) "a") (data (i32.const 211374) "a") (data (i32.const 211377) "a") (data (i32.const 211380) "a") (data (i32.const 211383) "a") (data (i32.const 211386) "a") (data (i32.const 211389) "a") (data (i32.const 211392) "a") (data (i32.const 211395) "a") (data (i32.const 211398) "a") (data (i32.const 211401) "a") (data (i32.const 211404) "a") (data (i32.const 211407) "a") (data (i32.const 211410) "a") (data (i32.const 211413) "a") (data (i32.const 211416) "a") (data (i32.const 211419) "a") (data (i32.const 211422) "a") (data (i32.const 211425) "a") (data (i32.const 211428) "a") (data (i32.const 211431) "a") (data (i32.const 211434) "a") (data (i32.const 211437) "a") (data (i32.const 211440) "a") (data (i32.const 211443) "a") (data (i32.const 211446) "a") (data (i32.const 211449) "a") (data (i32.const 211452) "a") (data (i32.const 211455) "a") (data (i32.const 211458) "a") (data (i32.const 211461) "a") (data (i32.const 211464) "a") (data (i32.const 211467) "a") (data (i32.const 211470) "a") (data (i32.const 211473) "a") (data (i32.const 211476) "a") (data (i32.const 211479) "a") (data (i32.const 211482) "a") (data (i32.const 211485) "a") (data (i32.const 211488) "a") (data (i32.const 211491) "a") (data (i32.const 211494) "a") (data (i32.const 211497) "a") (data (i32.const 211500) "a") (data (i32.const 211503) "a") (data (i32.const 211506) "a") (data (i32.const 211509) "a") (data (i32.const 211512) "a") (data (i32.const 211515) "a") (data (i32.const 211518) "a") (data (i32.const 211521) "a") (data (i32.const 211524) "a") (data (i32.const 211527) "a") (data (i32.const 211530) "a") (data (i32.const 211533) "a") (data (i32.const 211536) "a") (data (i32.const 211539) "a") (data (i32.const 211542) "a") (data (i32.const 211545) "a") (data (i32.const 211548) "a") (data (i32.const 211551) "a") (data (i32.const 211554) "a") (data (i32.const 211557) "a") (data (i32.const 211560) "a") (data (i32.const 211563) "a") (data (i32.const 211566) "a") (data (i32.const 211569) "a") (data (i32.const 211572) "a") (data (i32.const 211575) "a") (data (i32.const 211578) "a") (data (i32.const 211581) "a") (data (i32.const 211584) "a") (data (i32.const 211587) "a") (data (i32.const 211590) "a") (data (i32.const 211593) "a") (data (i32.const 211596) "a") (data (i32.const 211599) "a") (data (i32.const 211602) "a") (data (i32.const 211605) "a") (data (i32.const 211608) "a") (data (i32.const 211611) "a") (data (i32.const 211614) "a") (data (i32.const 211617) "a") (data (i32.const 211620) "a") (data (i32.const 211623) "a") (data (i32.const 211626) "a") (data (i32.const 211629) "a") (data (i32.const 211632) "a") (data (i32.const 211635) "a") (data (i32.const 211638) "a") (data (i32.const 211641) "a") (data (i32.const 211644) "a") (data (i32.const 211647) "a") (data (i32.const 211650) "a") (data (i32.const 211653) "a") (data (i32.const 211656) "a") (data (i32.const 211659) "a") (data (i32.const 211662) "a") (data (i32.const 211665) "a") (data (i32.const 211668) "a") (data (i32.const 211671) "a") (data (i32.const 211674) "a") (data (i32.const 211677) "a") (data (i32.const 211680) "a") (data (i32.const 211683) "a") (data (i32.const 211686) "a") (data (i32.const 211689) "a") (data (i32.const 211692) "a") (data (i32.const 211695) "a") (data (i32.const 211698) "a") (data (i32.const 211701) "a") (data (i32.const 211704) "a") (data (i32.const 211707) "a") (data (i32.const 211710) "a") (data (i32.const 211713) "a") (data (i32.const 211716) "a") (data (i32.const 211719) "a") (data (i32.const 211722) "a") (data (i32.const 211725) "a") (data (i32.const 211728) "a") (data (i32.const 211731) "a") (data (i32.const 211734) "a") (data (i32.const 211737) "a") (data (i32.const 211740) "a") (data (i32.const 211743) "a") (data (i32.const 211746) "a") (data (i32.const 211749) "a") (data (i32.const 211752) "a") (data (i32.const 211755) "a") (data (i32.const 211758) "a") (data (i32.const 211761) "a") (data (i32.const 211764) "a") (data (i32.const 211767) "a") (data (i32.const 211770) "a") (data (i32.const 211773) "a") (data (i32.const 211776) "a") (data (i32.const 211779) "a") (data (i32.const 211782) "a") (data (i32.const 211785) "a") (data (i32.const 211788) "a") (data (i32.const 211791) "a") (data (i32.const 211794) "a") (data (i32.const 211797) "a") (data (i32.const 211800) "a") (data (i32.const 211803) "a") (data (i32.const 211806) "a") (data (i32.const 211809) "a") (data (i32.const 211812) "a") (data (i32.const 211815) "a") (data (i32.const 211818) "a") (data (i32.const 211821) "a") (data (i32.const 211824) "a") (data (i32.const 211827) "a") (data (i32.const 211830) "a") (data (i32.const 211833) "a") (data (i32.const 211836) "a") (data (i32.const 211839) "a") (data (i32.const 211842) "a") (data (i32.const 211845) "a") (data (i32.const 211848) "a") (data (i32.const 211851) "a") (data (i32.const 211854) "a") (data (i32.const 211857) "a") (data (i32.const 211860) "a") (data (i32.const 211863) "a") (data (i32.const 211866) "a") (data (i32.const 211869) "a") (data (i32.const 211872) "a") (data (i32.const 211875) "a") (data (i32.const 211878) "a") (data (i32.const 211881) "a") (data (i32.const 211884) "a") (data (i32.const 211887) "a") (data (i32.const 211890) "a") (data (i32.const 211893) "a") (data (i32.const 211896) "a") (data (i32.const 211899) "a") (data (i32.const 211902) "a") (data (i32.const 211905) "a") (data (i32.const 211908) "a") (data (i32.const 211911) "a") (data (i32.const 211914) "a") (data (i32.const 211917) "a") (data (i32.const 211920) "a") (data (i32.const 211923) "a") (data (i32.const 211926) "a") (data (i32.const 211929) "a") (data (i32.const 211932) "a") (data (i32.const 211935) "a") (data (i32.const 211938) "a") (data (i32.const 211941) "a") (data (i32.const 211944) "a") (data (i32.const 211947) "a") (data (i32.const 211950) "a") (data (i32.const 211953) "a") (data (i32.const 211956) "a") (data (i32.const 211959) "a") (data (i32.const 211962) "a") (data (i32.const 211965) "a") (data (i32.const 211968) "a") (data (i32.const 211971) "a") (data (i32.const 211974) "a") (data (i32.const 211977) "a") (data (i32.const 211980) "a") (data (i32.const 211983) "a") (data (i32.const 211986) "a") (data (i32.const 211989) "a") (data (i32.const 211992) "a") (data (i32.const 211995) "a") (data (i32.const 211998) "a") (data (i32.const 212001) "a") (data (i32.const 212004) "a") (data (i32.const 212007) "a") (data (i32.const 212010) "a") (data (i32.const 212013) "a") (data (i32.const 212016) "a") (data (i32.const 212019) "a") (data (i32.const 212022) "a") (data (i32.const 212025) "a") (data (i32.const 212028) "a") (data (i32.const 212031) "a") (data (i32.const 212034) "a") (data (i32.const 212037) "a") (data (i32.const 212040) "a") (data (i32.const 212043) "a") (data (i32.const 212046) "a") (data (i32.const 212049) "a") (data (i32.const 212052) "a") (data (i32.const 212055) "a") (data (i32.const 212058) "a") (data (i32.const 212061) "a") (data (i32.const 212064) "a") (data (i32.const 212067) "a") (data (i32.const 212070) "a") (data (i32.const 212073) "a") (data (i32.const 212076) "a") (data (i32.const 212079) "a") (data (i32.const 212082) "a") (data (i32.const 212085) "a") (data (i32.const 212088) "a") (data (i32.const 212091) "a") (data (i32.const 212094) "a") (data (i32.const 212097) "a") (data (i32.const 212100) "a") (data (i32.const 212103) "a") (data (i32.const 212106) "a") (data (i32.const 212109) "a") (data (i32.const 212112) "a") (data (i32.const 212115) "a") (data (i32.const 212118) "a") (data (i32.const 212121) "a") (data (i32.const 212124) "a") (data (i32.const 212127) "a") (data (i32.const 212130) "a") (data (i32.const 212133) "a") (data (i32.const 212136) "a") (data (i32.const 212139) "a") (data (i32.const 212142) "a") (data (i32.const 212145) "a") (data (i32.const 212148) "a") (data (i32.const 212151) "a") (data (i32.const 212154) "a") (data (i32.const 212157) "a") (data (i32.const 212160) "a") (data (i32.const 212163) "a") (data (i32.const 212166) "a") (data (i32.const 212169) "a") (data (i32.const 212172) "a") (data (i32.const 212175) "a") (data (i32.const 212178) "a") (data (i32.const 212181) "a") (data (i32.const 212184) "a") (data (i32.const 212187) "a") (data (i32.const 212190) "a") (data (i32.const 212193) "a") (data (i32.const 212196) "a") (data (i32.const 212199) "a") (data (i32.const 212202) "a") (data (i32.const 212205) "a") (data (i32.const 212208) "a") (data (i32.const 212211) "a") (data (i32.const 212214) "a") (data (i32.const 212217) "a") (data (i32.const 212220) "a") (data (i32.const 212223) "a") (data (i32.const 212226) "a") (data (i32.const 212229) "a") (data (i32.const 212232) "a") (data (i32.const 212235) "a") (data (i32.const 212238) "a") (data (i32.const 212241) "a") (data (i32.const 212244) "a") (data (i32.const 212247) "a") (data (i32.const 212250) "a") (data (i32.const 212253) "a") (data (i32.const 212256) "a") (data (i32.const 212259) "a") (data (i32.const 212262) "a") (data (i32.const 212265) "a") (data (i32.const 212268) "a") (data (i32.const 212271) "a") (data (i32.const 212274) "a") (data (i32.const 212277) "a") (data (i32.const 212280) "a") (data (i32.const 212283) "a") (data (i32.const 212286) "a") (data (i32.const 212289) "a") (data (i32.const 212292) "a") (data (i32.const 212295) "a") (data (i32.const 212298) "a") (data (i32.const 212301) "a") (data (i32.const 212304) "a") (data (i32.const 212307) "a") (data (i32.const 212310) "a") (data (i32.const 212313) "a") (data (i32.const 212316) "a") (data (i32.const 212319) "a") (data (i32.const 212322) "a") (data (i32.const 212325) "a") (data (i32.const 212328) "a") (data (i32.const 212331) "a") (data (i32.const 212334) "a") (data (i32.const 212337) "a") (data (i32.const 212340) "a") (data (i32.const 212343) "a") (data (i32.const 212346) "a") (data (i32.const 212349) "a") (data (i32.const 212352) "a") (data (i32.const 212355) "a") (data (i32.const 212358) "a") (data (i32.const 212361) "a") (data (i32.const 212364) "a") (data (i32.const 212367) "a") (data (i32.const 212370) "a") (data (i32.const 212373) "a") (data (i32.const 212376) "a") (data (i32.const 212379) "a") (data (i32.const 212382) "a") (data (i32.const 212385) "a") (data (i32.const 212388) "a") (data (i32.const 212391) "a") (data (i32.const 212394) "a") (data (i32.const 212397) "a") (data (i32.const 212400) "a") (data (i32.const 212403) "a") (data (i32.const 212406) "a") (data (i32.const 212409) "a") (data (i32.const 212412) "a") (data (i32.const 212415) "a") (data (i32.const 212418) "a") (data (i32.const 212421) "a") (data (i32.const 212424) "a") (data (i32.const 212427) "a") (data (i32.const 212430) "a") (data (i32.const 212433) "a") (data (i32.const 212436) "a") (data (i32.const 212439) "a") (data (i32.const 212442) "a") (data (i32.const 212445) "a") (data (i32.const 212448) "a") (data (i32.const 212451) "a") (data (i32.const 212454) "a") (data (i32.const 212457) "a") (data (i32.const 212460) "a") (data (i32.const 212463) "a") (data (i32.const 212466) "a") (data (i32.const 212469) "a") (data (i32.const 212472) "a") (data (i32.const 212475) "a") (data (i32.const 212478) "a") (data (i32.const 212481) "a") (data (i32.const 212484) "a") (data (i32.const 212487) "a") (data (i32.const 212490) "a") (data (i32.const 212493) "a") (data (i32.const 212496) "a") (data (i32.const 212499) "a") (data (i32.const 212502) "a") (data (i32.const 212505) "a") (data (i32.const 212508) "a") (data (i32.const 212511) "a") (data (i32.const 212514) "a") (data (i32.const 212517) "a") (data (i32.const 212520) "a") (data (i32.const 212523) "a") (data (i32.const 212526) "a") (data (i32.const 212529) "a") (data (i32.const 212532) "a") (data (i32.const 212535) "a") (data (i32.const 212538) "a") (data (i32.const 212541) "a") (data (i32.const 212544) "a") (data (i32.const 212547) "a") (data (i32.const 212550) "a") (data (i32.const 212553) "a") (data (i32.const 212556) "a") (data (i32.const 212559) "a") (data (i32.const 212562) "a") (data (i32.const 212565) "a") (data (i32.const 212568) "a") (data (i32.const 212571) "a") (data (i32.const 212574) "a") (data (i32.const 212577) "a") (data (i32.const 212580) "a") (data (i32.const 212583) "a") (data (i32.const 212586) "a") (data (i32.const 212589) "a") (data (i32.const 212592) "a") (data (i32.const 212595) "a") (data (i32.const 212598) "a") (data (i32.const 212601) "a") (data (i32.const 212604) "a") (data (i32.const 212607) "a") (data (i32.const 212610) "a") (data (i32.const 212613) "a") (data (i32.const 212616) "a") (data (i32.const 212619) "a") (data (i32.const 212622) "a") (data (i32.const 212625) "a") (data (i32.const 212628) "a") (data (i32.const 212631) "a") (data (i32.const 212634) "a") (data (i32.const 212637) "a") (data (i32.const 212640) "a") (data (i32.const 212643) "a") (data (i32.const 212646) "a") (data (i32.const 212649) "a") (data (i32.const 212652) "a") (data (i32.const 212655) "a") (data (i32.const 212658) "a") (data (i32.const 212661) "a") (data (i32.const 212664) "a") (data (i32.const 212667) "a") (data (i32.const 212670) "a") (data (i32.const 212673) "a") (data (i32.const 212676) "a") (data (i32.const 212679) "a") (data (i32.const 212682) "a") (data (i32.const 212685) "a") (data (i32.const 212688) "a") (data (i32.const 212691) "a") (data (i32.const 212694) "a") (data (i32.const 212697) "a") (data (i32.const 212700) "a") (data (i32.const 212703) "a") (data (i32.const 212706) "a") (data (i32.const 212709) "a") (data (i32.const 212712) "a") (data (i32.const 212715) "a") (data (i32.const 212718) "a") (data (i32.const 212721) "a") (data (i32.const 212724) "a") (data (i32.const 212727) "a") (data (i32.const 212730) "a") (data (i32.const 212733) "a") (data (i32.const 212736) "a") (data (i32.const 212739) "a") (data (i32.const 212742) "a") (data (i32.const 212745) "a") (data (i32.const 212748) "a") (data (i32.const 212751) "a") (data (i32.const 212754) "a") (data (i32.const 212757) "a") (data (i32.const 212760) "a") (data (i32.const 212763) "a") (data (i32.const 212766) "a") (data (i32.const 212769) "a") (data (i32.const 212772) "a") (data (i32.const 212775) "a") (data (i32.const 212778) "a") (data (i32.const 212781) "a") (data (i32.const 212784) "a") (data (i32.const 212787) "a") (data (i32.const 212790) "a") (data (i32.const 212793) "a") (data (i32.const 212796) "a") (data (i32.const 212799) "a") (data (i32.const 212802) "a") (data (i32.const 212805) "a") (data (i32.const 212808) "a") (data (i32.const 212811) "a") (data (i32.const 212814) "a") (data (i32.const 212817) "a") (data (i32.const 212820) "a") (data (i32.const 212823) "a") (data (i32.const 212826) "a") (data (i32.const 212829) "a") (data (i32.const 212832) "a") (data (i32.const 212835) "a") (data (i32.const 212838) "a") (data (i32.const 212841) "a") (data (i32.const 212844) "a") (data (i32.const 212847) "a") (data (i32.const 212850) "a") (data (i32.const 212853) "a") (data (i32.const 212856) "a") (data (i32.const 212859) "a") (data (i32.const 212862) "a") (data (i32.const 212865) "a") (data (i32.const 212868) "a") (data (i32.const 212871) "a") (data (i32.const 212874) "a") (data (i32.const 212877) "a") (data (i32.const 212880) "a") (data (i32.const 212883) "a") (data (i32.const 212886) "a") (data (i32.const 212889) "a") (data (i32.const 212892) "a") (data (i32.const 212895) "a") (data (i32.const 212898) "a") (data (i32.const 212901) "a") (data (i32.const 212904) "a") (data (i32.const 212907) "a") (data (i32.const 212910) "a") (data (i32.const 212913) "a") (data (i32.const 212916) "a") (data (i32.const 212919) "a") (data (i32.const 212922) "a") (data (i32.const 212925) "a") (data (i32.const 212928) "a") (data (i32.const 212931) "a") (data (i32.const 212934) "a") (data (i32.const 212937) "a") (data (i32.const 212940) "a") (data (i32.const 212943) "a") (data (i32.const 212946) "a") (data (i32.const 212949) "a") (data (i32.const 212952) "a") (data (i32.const 212955) "a") (data (i32.const 212958) "a") (data (i32.const 212961) "a") (data (i32.const 212964) "a") (data (i32.const 212967) "a") (data (i32.const 212970) "a") (data (i32.const 212973) "a") (data (i32.const 212976) "a") (data (i32.const 212979) "a") (data (i32.const 212982) "a") (data (i32.const 212985) "a") (data (i32.const 212988) "a") (data (i32.const 212991) "a") (data (i32.const 212994) "a") (data (i32.const 212997) "a") (data (i32.const 213000) "a") (data (i32.const 213003) "a") (data (i32.const 213006) "a") (data (i32.const 213009) "a") (data (i32.const 213012) "a") (data (i32.const 213015) "a") (data (i32.const 213018) "a") (data (i32.const 213021) "a") (data (i32.const 213024) "a") (data (i32.const 213027) "a") (data (i32.const 213030) "a") (data (i32.const 213033) "a") (data (i32.const 213036) "a") (data (i32.const 213039) "a") (data (i32.const 213042) "a") (data (i32.const 213045) "a") (data (i32.const 213048) "a") (data (i32.const 213051) "a") (data (i32.const 213054) "a") (data (i32.const 213057) "a") (data (i32.const 213060) "a") (data (i32.const 213063) "a") (data (i32.const 213066) "a") (data (i32.const 213069) "a") (data (i32.const 213072) "a") (data (i32.const 213075) "a") (data (i32.const 213078) "a") (data (i32.const 213081) "a") (data (i32.const 213084) "a") (data (i32.const 213087) "a") (data (i32.const 213090) "a") (data (i32.const 213093) "a") (data (i32.const 213096) "a") (data (i32.const 213099) "a") (data (i32.const 213102) "a") (data (i32.const 213105) "a") (data (i32.const 213108) "a") (data (i32.const 213111) "a") (data (i32.const 213114) "a") (data (i32.const 213117) "a") (data (i32.const 213120) "a") (data (i32.const 213123) "a") (data (i32.const 213126) "a") (data (i32.const 213129) "a") (data (i32.const 213132) "a") (data (i32.const 213135) "a") (data (i32.const 213138) "a") (data (i32.const 213141) "a") (data (i32.const 213144) "a") (data (i32.const 213147) "a") (data (i32.const 213150) "a") (data (i32.const 213153) "a") (data (i32.const 213156) "a") (data (i32.const 213159) "a") (data (i32.const 213162) "a") (data (i32.const 213165) "a") (data (i32.const 213168) "a") (data (i32.const 213171) "a") (data (i32.const 213174) "a") (data (i32.const 213177) "a") (data (i32.const 213180) "a") (data (i32.const 213183) "a") (data (i32.const 213186) "a") (data (i32.const 213189) "a") (data (i32.const 213192) "a") (data (i32.const 213195) "a") (data (i32.const 213198) "a") (data (i32.const 213201) "a") (data (i32.const 213204) "a") (data (i32.const 213207) "a") (data (i32.const 213210) "a") (data (i32.const 213213) "a") (data (i32.const 213216) "a") (data (i32.const 213219) "a") (data (i32.const 213222) "a") (data (i32.const 213225) "a") (data (i32.const 213228) "a") (data (i32.const 213231) "a") (data (i32.const 213234) "a") (data (i32.const 213237) "a") (data (i32.const 213240) "a") (data (i32.const 213243) "a") (data (i32.const 213246) "a") (data (i32.const 213249) "a") (data (i32.const 213252) "a") (data (i32.const 213255) "a") (data (i32.const 213258) "a") (data (i32.const 213261) "a") (data (i32.const 213264) "a") (data (i32.const 213267) "a") (data (i32.const 213270) "a") (data (i32.const 213273) "a") (data (i32.const 213276) "a") (data (i32.const 213279) "a") (data (i32.const 213282) "a") (data (i32.const 213285) "a") (data (i32.const 213288) "a") (data (i32.const 213291) "a") (data (i32.const 213294) "a") (data (i32.const 213297) "a") (data (i32.const 213300) "a") (data (i32.const 213303) "a") (data (i32.const 213306) "a") (data (i32.const 213309) "a") (data (i32.const 213312) "a") (data (i32.const 213315) "a") (data (i32.const 213318) "a") (data (i32.const 213321) "a") (data (i32.const 213324) "a") (data (i32.const 213327) "a") (data (i32.const 213330) "a") (data (i32.const 213333) "a") (data (i32.const 213336) "a") (data (i32.const 213339) "a") (data (i32.const 213342) "a") (data (i32.const 213345) "a") (data (i32.const 213348) "a") (data (i32.const 213351) "a") (data (i32.const 213354) "a") (data (i32.const 213357) "a") (data (i32.const 213360) "a") (data (i32.const 213363) "a") (data (i32.const 213366) "a") (data (i32.const 213369) "a") (data (i32.const 213372) "a") (data (i32.const 213375) "a") (data (i32.const 213378) "a") (data (i32.const 213381) "a") (data (i32.const 213384) "a") (data (i32.const 213387) "a") (data (i32.const 213390) "a") (data (i32.const 213393) "a") (data (i32.const 213396) "a") (data (i32.const 213399) "a") (data (i32.const 213402) "a") (data (i32.const 213405) "a") (data (i32.const 213408) "a") (data (i32.const 213411) "a") (data (i32.const 213414) "a") (data (i32.const 213417) "a") (data (i32.const 213420) "a") (data (i32.const 213423) "a") (data (i32.const 213426) "a") (data (i32.const 213429) "a") (data (i32.const 213432) "a") (data (i32.const 213435) "a") (data (i32.const 213438) "a") (data (i32.const 213441) "a") (data (i32.const 213444) "a") (data (i32.const 213447) "a") (data (i32.const 213450) "a") (data (i32.const 213453) "a") (data (i32.const 213456) "a") (data (i32.const 213459) "a") (data (i32.const 213462) "a") (data (i32.const 213465) "a") (data (i32.const 213468) "a") (data (i32.const 213471) "a") (data (i32.const 213474) "a") (data (i32.const 213477) "a") (data (i32.const 213480) "a") (data (i32.const 213483) "a") (data (i32.const 213486) "a") (data (i32.const 213489) "a") (data (i32.const 213492) "a") (data (i32.const 213495) "a") (data (i32.const 213498) "a") (data (i32.const 213501) "a") (data (i32.const 213504) "a") (data (i32.const 213507) "a") (data (i32.const 213510) "a") (data (i32.const 213513) "a") (data (i32.const 213516) "a") (data (i32.const 213519) "a") (data (i32.const 213522) "a") (data (i32.const 213525) "a") (data (i32.const 213528) "a") (data (i32.const 213531) "a") (data (i32.const 213534) "a") (data (i32.const 213537) "a") (data (i32.const 213540) "a") (data (i32.const 213543) "a") (data (i32.const 213546) "a") (data (i32.const 213549) "a") (data (i32.const 213552) "a") (data (i32.const 213555) "a") (data (i32.const 213558) "a") (data (i32.const 213561) "a") (data (i32.const 213564) "a") (data (i32.const 213567) "a") (data (i32.const 213570) "a") (data (i32.const 213573) "a") (data (i32.const 213576) "a") (data (i32.const 213579) "a") (data (i32.const 213582) "a") (data (i32.const 213585) "a") (data (i32.const 213588) "a") (data (i32.const 213591) "a") (data (i32.const 213594) "a") (data (i32.const 213597) "a") (data (i32.const 213600) "a") (data (i32.const 213603) "a") (data (i32.const 213606) "a") (data (i32.const 213609) "a") (data (i32.const 213612) "a") (data (i32.const 213615) "a") (data (i32.const 213618) "a") (data (i32.const 213621) "a") (data (i32.const 213624) "a") (data (i32.const 213627) "a") (data (i32.const 213630) "a") (data (i32.const 213633) "a") (data (i32.const 213636) "a") (data (i32.const 213639) "a") (data (i32.const 213642) "a") (data (i32.const 213645) "a") (data (i32.const 213648) "a") (data (i32.const 213651) "a") (data (i32.const 213654) "a") (data (i32.const 213657) "a") (data (i32.const 213660) "a") (data (i32.const 213663) "a") (data (i32.const 213666) "a") (data (i32.const 213669) "a") (data (i32.const 213672) "a") (data (i32.const 213675) "a") (data (i32.const 213678) "a") (data (i32.const 213681) "a") (data (i32.const 213684) "a") (data (i32.const 213687) "a") (data (i32.const 213690) "a") (data (i32.const 213693) "a") (data (i32.const 213696) "a") (data (i32.const 213699) "a") (data (i32.const 213702) "a") (data (i32.const 213705) "a") (data (i32.const 213708) "a") (data (i32.const 213711) "a") (data (i32.const 213714) "a") (data (i32.const 213717) "a") (data (i32.const 213720) "a") (data (i32.const 213723) "a") (data (i32.const 213726) "a") (data (i32.const 213729) "a") (data (i32.const 213732) "a") (data (i32.const 213735) "a") (data (i32.const 213738) "a") (data (i32.const 213741) "a") (data (i32.const 213744) "a") (data (i32.const 213747) "a") (data (i32.const 213750) "a") (data (i32.const 213753) "a") (data (i32.const 213756) "a") (data (i32.const 213759) "a") (data (i32.const 213762) "a") (data (i32.const 213765) "a") (data (i32.const 213768) "a") (data (i32.const 213771) "a") (data (i32.const 213774) "a") (data (i32.const 213777) "a") (data (i32.const 213780) "a") (data (i32.const 213783) "a") (data (i32.const 213786) "a") (data (i32.const 213789) "a") (data (i32.const 213792) "a") (data (i32.const 213795) "a") (data (i32.const 213798) "a") (data (i32.const 213801) "a") (data (i32.const 213804) "a") (data (i32.const 213807) "a") (data (i32.const 213810) "a") (data (i32.const 213813) "a") (data (i32.const 213816) "a") (data (i32.const 213819) "a") (data (i32.const 213822) "a") (data (i32.const 213825) "a") (data (i32.const 213828) "a") (data (i32.const 213831) "a") (data (i32.const 213834) "a") (data (i32.const 213837) "a") (data (i32.const 213840) "a") (data (i32.const 213843) "a") (data (i32.const 213846) "a") (data (i32.const 213849) "a") (data (i32.const 213852) "a") (data (i32.const 213855) "a") (data (i32.const 213858) "a") (data (i32.const 213861) "a") (data (i32.const 213864) "a") (data (i32.const 213867) "a") (data (i32.const 213870) "a") (data (i32.const 213873) "a") (data (i32.const 213876) "a") (data (i32.const 213879) "a") (data (i32.const 213882) "a") (data (i32.const 213885) "a") (data (i32.const 213888) "a") (data (i32.const 213891) "a") (data (i32.const 213894) "a") (data (i32.const 213897) "a") (data (i32.const 213900) "a") (data (i32.const 213903) "a") (data (i32.const 213906) "a") (data (i32.const 213909) "a") (data (i32.const 213912) "a") (data (i32.const 213915) "a") (data (i32.const 213918) "a") (data (i32.const 213921) "a") (data (i32.const 213924) "a") (data (i32.const 213927) "a") (data (i32.const 213930) "a") (data (i32.const 213933) "a") (data (i32.const 213936) "a") (data (i32.const 213939) "a") (data (i32.const 213942) "a") (data (i32.const 213945) "a") (data (i32.const 213948) "a") (data (i32.const 213951) "a") (data (i32.const 213954) "a") (data (i32.const 213957) "a") (data (i32.const 213960) "a") (data (i32.const 213963) "a") (data (i32.const 213966) "a") (data (i32.const 213969) "a") (data (i32.const 213972) "a") (data (i32.const 213975) "a") (data (i32.const 213978) "a") (data (i32.const 213981) "a") (data (i32.const 213984) "a") (data (i32.const 213987) "a") (data (i32.const 213990) "a") (data (i32.const 213993) "a") (data (i32.const 213996) "a") (data (i32.const 213999) "a") (data (i32.const 214002) "a") (data (i32.const 214005) "a") (data (i32.const 214008) "a") (data (i32.const 214011) "a") (data (i32.const 214014) "a") (data (i32.const 214017) "a") (data (i32.const 214020) "a") (data (i32.const 214023) "a") (data (i32.const 214026) "a") (data (i32.const 214029) "a") (data (i32.const 214032) "a") (data (i32.const 214035) "a") (data (i32.const 214038) "a") (data (i32.const 214041) "a") (data (i32.const 214044) "a") (data (i32.const 214047) "a") (data (i32.const 214050) "a") (data (i32.const 214053) "a") (data (i32.const 214056) "a") (data (i32.const 214059) "a") (data (i32.const 214062) "a") (data (i32.const 214065) "a") (data (i32.const 214068) "a") (data (i32.const 214071) "a") (data (i32.const 214074) "a") (data (i32.const 214077) "a") (data (i32.const 214080) "a") (data (i32.const 214083) "a") (data (i32.const 214086) "a") (data (i32.const 214089) "a") (data (i32.const 214092) "a") (data (i32.const 214095) "a") (data (i32.const 214098) "a") (data (i32.const 214101) "a") (data (i32.const 214104) "a") (data (i32.const 214107) "a") (data (i32.const 214110) "a") (data (i32.const 214113) "a") (data (i32.const 214116) "a") (data (i32.const 214119) "a") (data (i32.const 214122) "a") (data (i32.const 214125) "a") (data (i32.const 214128) "a") (data (i32.const 214131) "a") (data (i32.const 214134) "a") (data (i32.const 214137) "a") (data (i32.const 214140) "a") (data (i32.const 214143) "a") (data (i32.const 214146) "a") (data (i32.const 214149) "a") (data (i32.const 214152) "a") (data (i32.const 214155) "a") (data (i32.const 214158) "a") (data (i32.const 214161) "a") (data (i32.const 214164) "a") (data (i32.const 214167) "a") (data (i32.const 214170) "a") (data (i32.const 214173) "a") (data (i32.const 214176) "a") (data (i32.const 214179) "a") (data (i32.const 214182) "a") (data (i32.const 214185) "a") (data (i32.const 214188) "a") (data (i32.const 214191) "a") (data (i32.const 214194) "a") (data (i32.const 214197) "a") (data (i32.const 214200) "a") (data (i32.const 214203) "a") (data (i32.const 214206) "a") (data (i32.const 214209) "a") (data (i32.const 214212) "a") (data (i32.const 214215) "a") (data (i32.const 214218) "a") (data (i32.const 214221) "a") (data (i32.const 214224) "a") (data (i32.const 214227) "a") (data (i32.const 214230) "a") (data (i32.const 214233) "a") (data (i32.const 214236) "a") (data (i32.const 214239) "a") (data (i32.const 214242) "a") (data (i32.const 214245) "a") (data (i32.const 214248) "a") (data (i32.const 214251) "a") (data (i32.const 214254) "a") (data (i32.const 214257) "a") (data (i32.const 214260) "a") (data (i32.const 214263) "a") (data (i32.const 214266) "a") (data (i32.const 214269) "a") (data (i32.const 214272) "a") (data (i32.const 214275) "a") (data (i32.const 214278) "a") (data (i32.const 214281) "a") (data (i32.const 214284) "a") (data (i32.const 214287) "a") (data (i32.const 214290) "a") (data (i32.const 214293) "a") (data (i32.const 214296) "a") (data (i32.const 214299) "a") (data (i32.const 214302) "a") (data (i32.const 214305) "a") (data (i32.const 214308) "a") (data (i32.const 214311) "a") (data (i32.const 214314) "a") (data (i32.const 214317) "a") (data (i32.const 214320) "a") (data (i32.const 214323) "a") (data (i32.const 214326) "a") (data (i32.const 214329) "a") (data (i32.const 214332) "a") (data (i32.const 214335) "a") (data (i32.const 214338) "a") (data (i32.const 214341) "a") (data (i32.const 214344) "a") (data (i32.const 214347) "a") (data (i32.const 214350) "a") (data (i32.const 214353) "a") (data (i32.const 214356) "a") (data (i32.const 214359) "a") (data (i32.const 214362) "a") (data (i32.const 214365) "a") (data (i32.const 214368) "a") (data (i32.const 214371) "a") (data (i32.const 214374) "a") (data (i32.const 214377) "a") (data (i32.const 214380) "a") (data (i32.const 214383) "a") (data (i32.const 214386) "a") (data (i32.const 214389) "a") (data (i32.const 214392) "a") (data (i32.const 214395) "a") (data (i32.const 214398) "a") (data (i32.const 214401) "a") (data (i32.const 214404) "a") (data (i32.const 214407) "a") (data (i32.const 214410) "a") (data (i32.const 214413) "a") (data (i32.const 214416) "a") (data (i32.const 214419) "a") (data (i32.const 214422) "a") (data (i32.const 214425) "a") (data (i32.const 214428) "a") (data (i32.const 214431) "a") (data (i32.const 214434) "a") (data (i32.const 214437) "a") (data (i32.const 214440) "a") (data (i32.const 214443) "a") (data (i32.const 214446) "a") (data (i32.const 214449) "a") (data (i32.const 214452) "a") (data (i32.const 214455) "a") (data (i32.const 214458) "a") (data (i32.const 214461) "a") (data (i32.const 214464) "a") (data (i32.const 214467) "a") (data (i32.const 214470) "a") (data (i32.const 214473) "a") (data (i32.const 214476) "a") (data (i32.const 214479) "a") (data (i32.const 214482) "a") (data (i32.const 214485) "a") (data (i32.const 214488) "a") (data (i32.const 214491) "a") (data (i32.const 214494) "a") (data (i32.const 214497) "a") (data (i32.const 214500) "a") (data (i32.const 214503) "a") (data (i32.const 214506) "a") (data (i32.const 214509) "a") (data (i32.const 214512) "a") (data (i32.const 214515) "a") (data (i32.const 214518) "a") (data (i32.const 214521) "a") (data (i32.const 214524) "a") (data (i32.const 214527) "a") (data (i32.const 214530) "a") (data (i32.const 214533) "a") (data (i32.const 214536) "a") (data (i32.const 214539) "a") (data (i32.const 214542) "a") (data (i32.const 214545) "a") (data (i32.const 214548) "a") (data (i32.const 214551) "a") (data (i32.const 214554) "a") (data (i32.const 214557) "a") (data (i32.const 214560) "a") (data (i32.const 214563) "a") (data (i32.const 214566) "a") (data (i32.const 214569) "a") (data (i32.const 214572) "a") (data (i32.const 214575) "a") (data (i32.const 214578) "a") (data (i32.const 214581) "a") (data (i32.const 214584) "a") (data (i32.const 214587) "a") (data (i32.const 214590) "a") (data (i32.const 214593) "a") (data (i32.const 214596) "a") (data (i32.const 214599) "a") (data (i32.const 214602) "a") (data (i32.const 214605) "a") (data (i32.const 214608) "a") (data (i32.const 214611) "a") (data (i32.const 214614) "a") (data (i32.const 214617) "a") (data (i32.const 214620) "a") (data (i32.const 214623) "a") (data (i32.const 214626) "a") (data (i32.const 214629) "a") (data (i32.const 214632) "a") (data (i32.const 214635) "a") (data (i32.const 214638) "a") (data (i32.const 214641) "a") (data (i32.const 214644) "a") (data (i32.const 214647) "a") (data (i32.const 214650) "a") (data (i32.const 214653) "a") (data (i32.const 214656) "a") (data (i32.const 214659) "a") (data (i32.const 214662) "a") (data (i32.const 214665) "a") (data (i32.const 214668) "a") (data (i32.const 214671) "a") (data (i32.const 214674) "a") (data (i32.const 214677) "a") (data (i32.const 214680) "a") (data (i32.const 214683) "a") (data (i32.const 214686) "a") (data (i32.const 214689) "a") (data (i32.const 214692) "a") (data (i32.const 214695) "a") (data (i32.const 214698) "a") (data (i32.const 214701) "a") (data (i32.const 214704) "a") (data (i32.const 214707) "a") (data (i32.const 214710) "a") (data (i32.const 214713) "a") (data (i32.const 214716) "a") (data (i32.const 214719) "a") (data (i32.const 214722) "a") (data (i32.const 214725) "a") (data (i32.const 214728) "a") (data (i32.const 214731) "a") (data (i32.const 214734) "a") (data (i32.const 214737) "a") (data (i32.const 214740) "a") (data (i32.const 214743) "a") (data (i32.const 214746) "a") (data (i32.const 214749) "a") (data (i32.const 214752) "a") (data (i32.const 214755) "a") (data (i32.const 214758) "a") (data (i32.const 214761) "a") (data (i32.const 214764) "a") (data (i32.const 214767) "a") (data (i32.const 214770) "a") (data (i32.const 214773) "a") (data (i32.const 214776) "a") (data (i32.const 214779) "a") (data (i32.const 214782) "a") (data (i32.const 214785) "a") (data (i32.const 214788) "a") (data (i32.const 214791) "a") (data (i32.const 214794) "a") (data (i32.const 214797) "a") (data (i32.const 214800) "a") (data (i32.const 214803) "a") (data (i32.const 214806) "a") (data (i32.const 214809) "a") (data (i32.const 214812) "a") (data (i32.const 214815) "a") (data (i32.const 214818) "a") (data (i32.const 214821) "a") (data (i32.const 214824) "a") (data (i32.const 214827) "a") (data (i32.const 214830) "a") (data (i32.const 214833) "a") (data (i32.const 214836) "a") (data (i32.const 214839) "a") (data (i32.const 214842) "a") (data (i32.const 214845) "a") (data (i32.const 214848) "a") (data (i32.const 214851) "a") (data (i32.const 214854) "a") (data (i32.const 214857) "a") (data (i32.const 214860) "a") (data (i32.const 214863) "a") (data (i32.const 214866) "a") (data (i32.const 214869) "a") (data (i32.const 214872) "a") (data (i32.const 214875) "a") (data (i32.const 214878) "a") (data (i32.const 214881) "a") (data (i32.const 214884) "a") (data (i32.const 214887) "a") (data (i32.const 214890) "a") (data (i32.const 214893) "a") (data (i32.const 214896) "a") (data (i32.const 214899) "a") (data (i32.const 214902) "a") (data (i32.const 214905) "a") (data (i32.const 214908) "a") (data (i32.const 214911) "a") (data (i32.const 214914) "a") (data (i32.const 214917) "a") (data (i32.const 214920) "a") (data (i32.const 214923) "a") (data (i32.const 214926) "a") (data (i32.const 214929) "a") (data (i32.const 214932) "a") (data (i32.const 214935) "a") (data (i32.const 214938) "a") (data (i32.const 214941) "a") (data (i32.const 214944) "a") (data (i32.const 214947) "a") (data (i32.const 214950) "a") (data (i32.const 214953) "a") (data (i32.const 214956) "a") (data (i32.const 214959) "a") (data (i32.const 214962) "a") (data (i32.const 214965) "a") (data (i32.const 214968) "a") (data (i32.const 214971) "a") (data (i32.const 214974) "a") (data (i32.const 214977) "a") (data (i32.const 214980) "a") (data (i32.const 214983) "a") (data (i32.const 214986) "a") (data (i32.const 214989) "a") (data (i32.const 214992) "a") (data (i32.const 214995) "a") (data (i32.const 214998) "a") (data (i32.const 215001) "a") (data (i32.const 215004) "a") (data (i32.const 215007) "a") (data (i32.const 215010) "a") (data (i32.const 215013) "a") (data (i32.const 215016) "a") (data (i32.const 215019) "a") (data (i32.const 215022) "a") (data (i32.const 215025) "a") (data (i32.const 215028) "a") (data (i32.const 215031) "a") (data (i32.const 215034) "a") (data (i32.const 215037) "a") (data (i32.const 215040) "a") (data (i32.const 215043) "a") (data (i32.const 215046) "a") (data (i32.const 215049) "a") (data (i32.const 215052) "a") (data (i32.const 215055) "a") (data (i32.const 215058) "a") (data (i32.const 215061) "a") (data (i32.const 215064) "a") (data (i32.const 215067) "a") (data (i32.const 215070) "a") (data (i32.const 215073) "a") (data (i32.const 215076) "a") (data (i32.const 215079) "a") (data (i32.const 215082) "a") (data (i32.const 215085) "a") (data (i32.const 215088) "a") (data (i32.const 215091) "a") (data (i32.const 215094) "a") (data (i32.const 215097) "a") (data (i32.const 215100) "a") (data (i32.const 215103) "a") (data (i32.const 215106) "a") (data (i32.const 215109) "a") (data (i32.const 215112) "a") (data (i32.const 215115) "a") (data (i32.const 215118) "a") (data (i32.const 215121) "a") (data (i32.const 215124) "a") (data (i32.const 215127) "a") (data (i32.const 215130) "a") (data (i32.const 215133) "a") (data (i32.const 215136) "a") (data (i32.const 215139) "a") (data (i32.const 215142) "a") (data (i32.const 215145) "a") (data (i32.const 215148) "a") (data (i32.const 215151) "a") (data (i32.const 215154) "a") (data (i32.const 215157) "a") (data (i32.const 215160) "a") (data (i32.const 215163) "a") (data (i32.const 215166) "a") (data (i32.const 215169) "a") (data (i32.const 215172) "a") (data (i32.const 215175) "a") (data (i32.const 215178) "a") (data (i32.const 215181) "a") (data (i32.const 215184) "a") (data (i32.const 215187) "a") (data (i32.const 215190) "a") (data (i32.const 215193) "a") (data (i32.const 215196) "a") (data (i32.const 215199) "a") (data (i32.const 215202) "a") (data (i32.const 215205) "a") (data (i32.const 215208) "a") (data (i32.const 215211) "a") (data (i32.const 215214) "a") (data (i32.const 215217) "a") (data (i32.const 215220) "a") (data (i32.const 215223) "a") (data (i32.const 215226) "a") (data (i32.const 215229) "a") (data (i32.const 215232) "a") (data (i32.const 215235) "a") (data (i32.const 215238) "a") (data (i32.const 215241) "a") (data (i32.const 215244) "a") (data (i32.const 215247) "a") (data (i32.const 215250) "a") (data (i32.const 215253) "a") (data (i32.const 215256) "a") (data (i32.const 215259) "a") (data (i32.const 215262) "a") (data (i32.const 215265) "a") (data (i32.const 215268) "a") (data (i32.const 215271) "a") (data (i32.const 215274) "a") (data (i32.const 215277) "a") (data (i32.const 215280) "a") (data (i32.const 215283) "a") (data (i32.const 215286) "a") (data (i32.const 215289) "a") (data (i32.const 215292) "a") (data (i32.const 215295) "a") (data (i32.const 215298) "a") (data (i32.const 215301) "a") (data (i32.const 215304) "a") (data (i32.const 215307) "a") (data (i32.const 215310) "a") (data (i32.const 215313) "a") (data (i32.const 215316) "a") (data (i32.const 215319) "a") (data (i32.const 215322) "a") (data (i32.const 215325) "a") (data (i32.const 215328) "a") (data (i32.const 215331) "a") (data (i32.const 215334) "a") (data (i32.const 215337) "a") (data (i32.const 215340) "a") (data (i32.const 215343) "a") (data (i32.const 215346) "a") (data (i32.const 215349) "a") (data (i32.const 215352) "a") (data (i32.const 215355) "a") (data (i32.const 215358) "a") (data (i32.const 215361) "a") (data (i32.const 215364) "a") (data (i32.const 215367) "a") (data (i32.const 215370) "a") (data (i32.const 215373) "a") (data (i32.const 215376) "a") (data (i32.const 215379) "a") (data (i32.const 215382) "a") (data (i32.const 215385) "a") (data (i32.const 215388) "a") (data (i32.const 215391) "a") (data (i32.const 215394) "a") (data (i32.const 215397) "a") (data (i32.const 215400) "a") (data (i32.const 215403) "a") (data (i32.const 215406) "a") (data (i32.const 215409) "a") (data (i32.const 215412) "a") (data (i32.const 215415) "a") (data (i32.const 215418) "a") (data (i32.const 215421) "a") (data (i32.const 215424) "a") (data (i32.const 215427) "a") (data (i32.const 215430) "a") (data (i32.const 215433) "a") (data (i32.const 215436) "a") (data (i32.const 215439) "a") (data (i32.const 215442) "a") (data (i32.const 215445) "a") (data (i32.const 215448) "a") (data (i32.const 215451) "a") (data (i32.const 215454) "a") (data (i32.const 215457) "a") (data (i32.const 215460) "a") (data (i32.const 215463) "a") (data (i32.const 215466) "a") (data (i32.const 215469) "a") (data (i32.const 215472) "a") (data (i32.const 215475) "a") (data (i32.const 215478) "a") (data (i32.const 215481) "a") (data (i32.const 215484) "a") (data (i32.const 215487) "a") (data (i32.const 215490) "a") (data (i32.const 215493) "a") (data (i32.const 215496) "a") (data (i32.const 215499) "a") (data (i32.const 215502) "a") (data (i32.const 215505) "a") (data (i32.const 215508) "a") (data (i32.const 215511) "a") (data (i32.const 215514) "a") (data (i32.const 215517) "a") (data (i32.const 215520) "a") (data (i32.const 215523) "a") (data (i32.const 215526) "a") (data (i32.const 215529) "a") (data (i32.const 215532) "a") (data (i32.const 215535) "a") (data (i32.const 215538) "a") (data (i32.const 215541) "a") (data (i32.const 215544) "a") (data (i32.const 215547) "a") (data (i32.const 215550) "a") (data (i32.const 215553) "a") (data (i32.const 215556) "a") (data (i32.const 215559) "a") (data (i32.const 215562) "a") (data (i32.const 215565) "a") (data (i32.const 215568) "a") (data (i32.const 215571) "a") (data (i32.const 215574) "a") (data (i32.const 215577) "a") (data (i32.const 215580) "a") (data (i32.const 215583) "a") (data (i32.const 215586) "a") (data (i32.const 215589) "a") (data (i32.const 215592) "a") (data (i32.const 215595) "a") (data (i32.const 215598) "a") (data (i32.const 215601) "a") (data (i32.const 215604) "a") (data (i32.const 215607) "a") (data (i32.const 215610) "a") (data (i32.const 215613) "a") (data (i32.const 215616) "a") (data (i32.const 215619) "a") (data (i32.const 215622) "a") (data (i32.const 215625) "a") (data (i32.const 215628) "a") (data (i32.const 215631) "a") (data (i32.const 215634) "a") (data (i32.const 215637) "a") (data (i32.const 215640) "a") (data (i32.const 215643) "a") (data (i32.const 215646) "a") (data (i32.const 215649) "a") (data (i32.const 215652) "a") (data (i32.const 215655) "a") (data (i32.const 215658) "a") (data (i32.const 215661) "a") (data (i32.const 215664) "a") (data (i32.const 215667) "a") (data (i32.const 215670) "a") (data (i32.const 215673) "a") (data (i32.const 215676) "a") (data (i32.const 215679) "a") (data (i32.const 215682) "a") (data (i32.const 215685) "a") (data (i32.const 215688) "a") (data (i32.const 215691) "a") (data (i32.const 215694) "a") (data (i32.const 215697) "a") (data (i32.const 215700) "a") (data (i32.const 215703) "a") (data (i32.const 215706) "a") (data (i32.const 215709) "a") (data (i32.const 215712) "a") (data (i32.const 215715) "a") (data (i32.const 215718) "a") (data (i32.const 215721) "a") (data (i32.const 215724) "a") (data (i32.const 215727) "a") (data (i32.const 215730) "a") (data (i32.const 215733) "a") (data (i32.const 215736) "a") (data (i32.const 215739) "a") (data (i32.const 215742) "a") (data (i32.const 215745) "a") (data (i32.const 215748) "a") (data (i32.const 215751) "a") (data (i32.const 215754) "a") (data (i32.const 215757) "a") (data (i32.const 215760) "a") (data (i32.const 215763) "a") (data (i32.const 215766) "a") (data (i32.const 215769) "a") (data (i32.const 215772) "a") (data (i32.const 215775) "a") (data (i32.const 215778) "a") (data (i32.const 215781) "a") (data (i32.const 215784) "a") (data (i32.const 215787) "a") (data (i32.const 215790) "a") (data (i32.const 215793) "a") (data (i32.const 215796) "a") (data (i32.const 215799) "a") (data (i32.const 215802) "a") (data (i32.const 215805) "a") (data (i32.const 215808) "a") (data (i32.const 215811) "a") (data (i32.const 215814) "a") (data (i32.const 215817) "a") (data (i32.const 215820) "a") (data (i32.const 215823) "a") (data (i32.const 215826) "a") (data (i32.const 215829) "a") (data (i32.const 215832) "a") (data (i32.const 215835) "a") (data (i32.const 215838) "a") (data (i32.const 215841) "a") (data (i32.const 215844) "a") (data (i32.const 215847) "a") (data (i32.const 215850) "a") (data (i32.const 215853) "a") (data (i32.const 215856) "a") (data (i32.const 215859) "a") (data (i32.const 215862) "a") (data (i32.const 215865) "a") (data (i32.const 215868) "a") (data (i32.const 215871) "a") (data (i32.const 215874) "a") (data (i32.const 215877) "a") (data (i32.const 215880) "a") (data (i32.const 215883) "a") (data (i32.const 215886) "a") (data (i32.const 215889) "a") (data (i32.const 215892) "a") (data (i32.const 215895) "a") (data (i32.const 215898) "a") (data (i32.const 215901) "a") (data (i32.const 215904) "a") (data (i32.const 215907) "a") (data (i32.const 215910) "a") (data (i32.const 215913) "a") (data (i32.const 215916) "a") (data (i32.const 215919) "a") (data (i32.const 215922) "a") (data (i32.const 215925) "a") (data (i32.const 215928) "a") (data (i32.const 215931) "a") (data (i32.const 215934) "a") (data (i32.const 215937) "a") (data (i32.const 215940) "a") (data (i32.const 215943) "a") (data (i32.const 215946) "a") (data (i32.const 215949) "a") (data (i32.const 215952) "a") (data (i32.const 215955) "a") (data (i32.const 215958) "a") (data (i32.const 215961) "a") (data (i32.const 215964) "a") (data (i32.const 215967) "a") (data (i32.const 215970) "a") (data (i32.const 215973) "a") (data (i32.const 215976) "a") (data (i32.const 215979) "a") (data (i32.const 215982) "a") (data (i32.const 215985) "a") (data (i32.const 215988) "a") (data (i32.const 215991) "a") (data (i32.const 215994) "a") (data (i32.const 215997) "a") (data (i32.const 216000) "a") (data (i32.const 216003) "a") (data (i32.const 216006) "a") (data (i32.const 216009) "a") (data (i32.const 216012) "a") (data (i32.const 216015) "a") (data (i32.const 216018) "a") (data (i32.const 216021) "a") (data (i32.const 216024) "a") (data (i32.const 216027) "a") (data (i32.const 216030) "a") (data (i32.const 216033) "a") (data (i32.const 216036) "a") (data (i32.const 216039) "a") (data (i32.const 216042) "a") (data (i32.const 216045) "a") (data (i32.const 216048) "a") (data (i32.const 216051) "a") (data (i32.const 216054) "a") (data (i32.const 216057) "a") (data (i32.const 216060) "a") (data (i32.const 216063) "a") (data (i32.const 216066) "a") (data (i32.const 216069) "a") (data (i32.const 216072) "a") (data (i32.const 216075) "a") (data (i32.const 216078) "a") (data (i32.const 216081) "a") (data (i32.const 216084) "a") (data (i32.const 216087) "a") (data (i32.const 216090) "a") (data (i32.const 216093) "a") (data (i32.const 216096) "a") (data (i32.const 216099) "a") (data (i32.const 216102) "a") (data (i32.const 216105) "a") (data (i32.const 216108) "a") (data (i32.const 216111) "a") (data (i32.const 216114) "a") (data (i32.const 216117) "a") (data (i32.const 216120) "a") (data (i32.const 216123) "a") (data (i32.const 216126) "a") (data (i32.const 216129) "a") (data (i32.const 216132) "a") (data (i32.const 216135) "a") (data (i32.const 216138) "a") (data (i32.const 216141) "a") (data (i32.const 216144) "a") (data (i32.const 216147) "a") (data (i32.const 216150) "a") (data (i32.const 216153) "a") (data (i32.const 216156) "a") (data (i32.const 216159) "a") (data (i32.const 216162) "a") (data (i32.const 216165) "a") (data (i32.const 216168) "a") (data (i32.const 216171) "a") (data (i32.const 216174) "a") (data (i32.const 216177) "a") (data (i32.const 216180) "a") (data (i32.const 216183) "a") (data (i32.const 216186) "a") (data (i32.const 216189) "a") (data (i32.const 216192) "a") (data (i32.const 216195) "a") (data (i32.const 216198) "a") (data (i32.const 216201) "a") (data (i32.const 216204) "a") (data (i32.const 216207) "a") (data (i32.const 216210) "a") (data (i32.const 216213) "a") (data (i32.const 216216) "a") (data (i32.const 216219) "a") (data (i32.const 216222) "a") (data (i32.const 216225) "a") (data (i32.const 216228) "a") (data (i32.const 216231) "a") (data (i32.const 216234) "a") (data (i32.const 216237) "a") (data (i32.const 216240) "a") (data (i32.const 216243) "a") (data (i32.const 216246) "a") (data (i32.const 216249) "a") (data (i32.const 216252) "a") (data (i32.const 216255) "a") (data (i32.const 216258) "a") (data (i32.const 216261) "a") (data (i32.const 216264) "a") (data (i32.const 216267) "a") (data (i32.const 216270) "a") (data (i32.const 216273) "a") (data (i32.const 216276) "a") (data (i32.const 216279) "a") (data (i32.const 216282) "a") (data (i32.const 216285) "a") (data (i32.const 216288) "a") (data (i32.const 216291) "a") (data (i32.const 216294) "a") (data (i32.const 216297) "a") (data (i32.const 216300) "a") (data (i32.const 216303) "a") (data (i32.const 216306) "a") (data (i32.const 216309) "a") (data (i32.const 216312) "a") (data (i32.const 216315) "a") (data (i32.const 216318) "a") (data (i32.const 216321) "a") (data (i32.const 216324) "a") (data (i32.const 216327) "a") (data (i32.const 216330) "a") (data (i32.const 216333) "a") (data (i32.const 216336) "a") (data (i32.const 216339) "a") (data (i32.const 216342) "a") (data (i32.const 216345) "a") (data (i32.const 216348) "a") (data (i32.const 216351) "a") (data (i32.const 216354) "a") (data (i32.const 216357) "a") (data (i32.const 216360) "a") (data (i32.const 216363) "a") (data (i32.const 216366) "a") (data (i32.const 216369) "a") (data (i32.const 216372) "a") (data (i32.const 216375) "a") (data (i32.const 216378) "a") (data (i32.const 216381) "a") (data (i32.const 216384) "a") (data (i32.const 216387) "a") (data (i32.const 216390) "a") (data (i32.const 216393) "a") (data (i32.const 216396) "a") (data (i32.const 216399) "a") (data (i32.const 216402) "a") (data (i32.const 216405) "a") (data (i32.const 216408) "a") (data (i32.const 216411) "a") (data (i32.const 216414) "a") (data (i32.const 216417) "a") (data (i32.const 216420) "a") (data (i32.const 216423) "a") (data (i32.const 216426) "a") (data (i32.const 216429) "a") (data (i32.const 216432) "a") (data (i32.const 216435) "a") (data (i32.const 216438) "a") (data (i32.const 216441) "a") (data (i32.const 216444) "a") (data (i32.const 216447) "a") (data (i32.const 216450) "a") (data (i32.const 216453) "a") (data (i32.const 216456) "a") (data (i32.const 216459) "a") (data (i32.const 216462) "a") (data (i32.const 216465) "a") (data (i32.const 216468) "a") (data (i32.const 216471) "a") (data (i32.const 216474) "a") (data (i32.const 216477) "a") (data (i32.const 216480) "a") (data (i32.const 216483) "a") (data (i32.const 216486) "a") (data (i32.const 216489) "a") (data (i32.const 216492) "a") (data (i32.const 216495) "a") (data (i32.const 216498) "a") (data (i32.const 216501) "a") (data (i32.const 216504) "a") (data (i32.const 216507) "a") (data (i32.const 216510) "a") (data (i32.const 216513) "a") (data (i32.const 216516) "a") (data (i32.const 216519) "a") (data (i32.const 216522) "a") (data (i32.const 216525) "a") (data (i32.const 216528) "a") (data (i32.const 216531) "a") (data (i32.const 216534) "a") (data (i32.const 216537) "a") (data (i32.const 216540) "a") (data (i32.const 216543) "a") (data (i32.const 216546) "a") (data (i32.const 216549) "a") (data (i32.const 216552) "a") (data (i32.const 216555) "a") (data (i32.const 216558) "a") (data (i32.const 216561) "a") (data (i32.const 216564) "a") (data (i32.const 216567) "a") (data (i32.const 216570) "a") (data (i32.const 216573) "a") (data (i32.const 216576) "a") (data (i32.const 216579) "a") (data (i32.const 216582) "a") (data (i32.const 216585) "a") (data (i32.const 216588) "a") (data (i32.const 216591) "a") (data (i32.const 216594) "a") (data (i32.const 216597) "a") (data (i32.const 216600) "a") (data (i32.const 216603) "a") (data (i32.const 216606) "a") (data (i32.const 216609) "a") (data (i32.const 216612) "a") (data (i32.const 216615) "a") (data (i32.const 216618) "a") (data (i32.const 216621) "a") (data (i32.const 216624) "a") (data (i32.const 216627) "a") (data (i32.const 216630) "a") (data (i32.const 216633) "a") (data (i32.const 216636) "a") (data (i32.const 216639) "a") (data (i32.const 216642) "a") (data (i32.const 216645) "a") (data (i32.const 216648) "a") (data (i32.const 216651) "a") (data (i32.const 216654) "a") (data (i32.const 216657) "a") (data (i32.const 216660) "a") (data (i32.const 216663) "a") (data (i32.const 216666) "a") (data (i32.const 216669) "a") (data (i32.const 216672) "a") (data (i32.const 216675) "a") (data (i32.const 216678) "a") (data (i32.const 216681) "a") (data (i32.const 216684) "a") (data (i32.const 216687) "a") (data (i32.const 216690) "a") (data (i32.const 216693) "a") (data (i32.const 216696) "a") (data (i32.const 216699) "a") (data (i32.const 216702) "a") (data (i32.const 216705) "a") (data (i32.const 216708) "a") (data (i32.const 216711) "a") (data (i32.const 216714) "a") (data (i32.const 216717) "a") (data (i32.const 216720) "a") (data (i32.const 216723) "a") (data (i32.const 216726) "a") (data (i32.const 216729) "a") (data (i32.const 216732) "a") (data (i32.const 216735) "a") (data (i32.const 216738) "a") (data (i32.const 216741) "a") (data (i32.const 216744) "a") (data (i32.const 216747) "a") (data (i32.const 216750) "a") (data (i32.const 216753) "a") (data (i32.const 216756) "a") (data (i32.const 216759) "a") (data (i32.const 216762) "a") (data (i32.const 216765) "a") (data (i32.const 216768) "a") (data (i32.const 216771) "a") (data (i32.const 216774) "a") (data (i32.const 216777) "a") (data (i32.const 216780) "a") (data (i32.const 216783) "a") (data (i32.const 216786) "a") (data (i32.const 216789) "a") (data (i32.const 216792) "a") (data (i32.const 216795) "a") (data (i32.const 216798) "a") (data (i32.const 216801) "a") (data (i32.const 216804) "a") (data (i32.const 216807) "a") (data (i32.const 216810) "a") (data (i32.const 216813) "a") (data (i32.const 216816) "a") (data (i32.const 216819) "a") (data (i32.const 216822) "a") (data (i32.const 216825) "a") (data (i32.const 216828) "a") (data (i32.const 216831) "a") (data (i32.const 216834) "a") (data (i32.const 216837) "a") (data (i32.const 216840) "a") (data (i32.const 216843) "a") (data (i32.const 216846) "a") (data (i32.const 216849) "a") (data (i32.const 216852) "a") (data (i32.const 216855) "a") (data (i32.const 216858) "a") (data (i32.const 216861) "a") (data (i32.const 216864) "a") (data (i32.const 216867) "a") (data (i32.const 216870) "a") (data (i32.const 216873) "a") (data (i32.const 216876) "a") (data (i32.const 216879) "a") (data (i32.const 216882) "a") (data (i32.const 216885) "a") (data (i32.const 216888) "a") (data (i32.const 216891) "a") (data (i32.const 216894) "a") (data (i32.const 216897) "a") (data (i32.const 216900) "a") (data (i32.const 216903) "a") (data (i32.const 216906) "a") (data (i32.const 216909) "a") (data (i32.const 216912) "a") (data (i32.const 216915) "a") (data (i32.const 216918) "a") (data (i32.const 216921) "a") (data (i32.const 216924) "a") (data (i32.const 216927) "a") (data (i32.const 216930) "a") (data (i32.const 216933) "a") (data (i32.const 216936) "a") (data (i32.const 216939) "a") (data (i32.const 216942) "a") (data (i32.const 216945) "a") (data (i32.const 216948) "a") (data (i32.const 216951) "a") (data (i32.const 216954) "a") (data (i32.const 216957) "a") (data (i32.const 216960) "a") (data (i32.const 216963) "a") (data (i32.const 216966) "a") (data (i32.const 216969) "a") (data (i32.const 216972) "a") (data (i32.const 216975) "a") (data (i32.const 216978) "a") (data (i32.const 216981) "a") (data (i32.const 216984) "a") (data (i32.const 216987) "a") (data (i32.const 216990) "a") (data (i32.const 216993) "a") (data (i32.const 216996) "a") (data (i32.const 216999) "a") (data (i32.const 217002) "a") (data (i32.const 217005) "a") (data (i32.const 217008) "a") (data (i32.const 217011) "a") (data (i32.const 217014) "a") (data (i32.const 217017) "a") (data (i32.const 217020) "a") (data (i32.const 217023) "a") (data (i32.const 217026) "a") (data (i32.const 217029) "a") (data (i32.const 217032) "a") (data (i32.const 217035) "a") (data (i32.const 217038) "a") (data (i32.const 217041) "a") (data (i32.const 217044) "a") (data (i32.const 217047) "a") (data (i32.const 217050) "a") (data (i32.const 217053) "a") (data (i32.const 217056) "a") (data (i32.const 217059) "a") (data (i32.const 217062) "a") (data (i32.const 217065) "a") (data (i32.const 217068) "a") (data (i32.const 217071) "a") (data (i32.const 217074) "a") (data (i32.const 217077) "a") (data (i32.const 217080) "a") (data (i32.const 217083) "a") (data (i32.const 217086) "a") (data (i32.const 217089) "a") (data (i32.const 217092) "a") (data (i32.const 217095) "a") (data (i32.const 217098) "a") (data (i32.const 217101) "a") (data (i32.const 217104) "a") (data (i32.const 217107) "a") (data (i32.const 217110) "a") (data (i32.const 217113) "a") (data (i32.const 217116) "a") (data (i32.const 217119) "a") (data (i32.const 217122) "a") (data (i32.const 217125) "a") (data (i32.const 217128) "a") (data (i32.const 217131) "a") (data (i32.const 217134) "a") (data (i32.const 217137) "a") (data (i32.const 217140) "a") (data (i32.const 217143) "a") (data (i32.const 217146) "a") (data (i32.const 217149) "a") (data (i32.const 217152) "a") (data (i32.const 217155) "a") (data (i32.const 217158) "a") (data (i32.const 217161) "a") (data (i32.const 217164) "a") (data (i32.const 217167) "a") (data (i32.const 217170) "a") (data (i32.const 217173) "a") (data (i32.const 217176) "a") (data (i32.const 217179) "a") (data (i32.const 217182) "a") (data (i32.const 217185) "a") (data (i32.const 217188) "a") (data (i32.const 217191) "a") (data (i32.const 217194) "a") (data (i32.const 217197) "a") (data (i32.const 217200) "a") (data (i32.const 217203) "a") (data (i32.const 217206) "a") (data (i32.const 217209) "a") (data (i32.const 217212) "a") (data (i32.const 217215) "a") (data (i32.const 217218) "a") (data (i32.const 217221) "a") (data (i32.const 217224) "a") (data (i32.const 217227) "a") (data (i32.const 217230) "a") (data (i32.const 217233) "a") (data (i32.const 217236) "a") (data (i32.const 217239) "a") (data (i32.const 217242) "a") (data (i32.const 217245) "a") (data (i32.const 217248) "a") (data (i32.const 217251) "a") (data (i32.const 217254) "a") (data (i32.const 217257) "a") (data (i32.const 217260) "a") (data (i32.const 217263) "a") (data (i32.const 217266) "a") (data (i32.const 217269) "a") (data (i32.const 217272) "a") (data (i32.const 217275) "a") (data (i32.const 217278) "a") (data (i32.const 217281) "a") (data (i32.const 217284) "a") (data (i32.const 217287) "a") (data (i32.const 217290) "a") (data (i32.const 217293) "a") (data (i32.const 217296) "a") (data (i32.const 217299) "a") (data (i32.const 217302) "a") (data (i32.const 217305) "a") (data (i32.const 217308) "a") (data (i32.const 217311) "a") (data (i32.const 217314) "a") (data (i32.const 217317) "a") (data (i32.const 217320) "a") (data (i32.const 217323) "a") (data (i32.const 217326) "a") (data (i32.const 217329) "a") (data (i32.const 217332) "a") (data (i32.const 217335) "a") (data (i32.const 217338) "a") (data (i32.const 217341) "a") (data (i32.const 217344) "a") (data (i32.const 217347) "a") (data (i32.const 217350) "a") (data (i32.const 217353) "a") (data (i32.const 217356) "a") (data (i32.const 217359) "a") (data (i32.const 217362) "a") (data (i32.const 217365) "a") (data (i32.const 217368) "a") (data (i32.const 217371) "a") (data (i32.const 217374) "a") (data (i32.const 217377) "a") (data (i32.const 217380) "a") (data (i32.const 217383) "a") (data (i32.const 217386) "a") (data (i32.const 217389) "a") (data (i32.const 217392) "a") (data (i32.const 217395) "a") (data (i32.const 217398) "a") (data (i32.const 217401) "a") (data (i32.const 217404) "a") (data (i32.const 217407) "a") (data (i32.const 217410) "a") (data (i32.const 217413) "a") (data (i32.const 217416) "a") (data (i32.const 217419) "a") (data (i32.const 217422) "a") (data (i32.const 217425) "a") (data (i32.const 217428) "a") (data (i32.const 217431) "a") (data (i32.const 217434) "a") (data (i32.const 217437) "a") (data (i32.const 217440) "a") (data (i32.const 217443) "a") (data (i32.const 217446) "a") (data (i32.const 217449) "a") (data (i32.const 217452) "a") (data (i32.const 217455) "a") (data (i32.const 217458) "a") (data (i32.const 217461) "a") (data (i32.const 217464) "a") (data (i32.const 217467) "a") (data (i32.const 217470) "a") (data (i32.const 217473) "a") (data (i32.const 217476) "a") (data (i32.const 217479) "a") (data (i32.const 217482) "a") (data (i32.const 217485) "a") (data (i32.const 217488) "a") (data (i32.const 217491) "a") (data (i32.const 217494) "a") (data (i32.const 217497) "a") (data (i32.const 217500) "a") (data (i32.const 217503) "a") (data (i32.const 217506) "a") (data (i32.const 217509) "a") (data (i32.const 217512) "a") (data (i32.const 217515) "a") (data (i32.const 217518) "a") (data (i32.const 217521) "a") (data (i32.const 217524) "a") (data (i32.const 217527) "a") (data (i32.const 217530) "a") (data (i32.const 217533) "a") (data (i32.const 217536) "a") (data (i32.const 217539) "a") (data (i32.const 217542) "a") (data (i32.const 217545) "a") (data (i32.const 217548) "a") (data (i32.const 217551) "a") (data (i32.const 217554) "a") (data (i32.const 217557) "a") (data (i32.const 217560) "a") (data (i32.const 217563) "a") (data (i32.const 217566) "a") (data (i32.const 217569) "a") (data (i32.const 217572) "a") (data (i32.const 217575) "a") (data (i32.const 217578) "a") (data (i32.const 217581) "a") (data (i32.const 217584) "a") (data (i32.const 217587) "a") (data (i32.const 217590) "a") (data (i32.const 217593) "a") (data (i32.const 217596) "a") (data (i32.const 217599) "a") (data (i32.const 217602) "a") (data (i32.const 217605) "a") (data (i32.const 217608) "a") (data (i32.const 217611) "a") (data (i32.const 217614) "a") (data (i32.const 217617) "a") (data (i32.const 217620) "a") (data (i32.const 217623) "a") (data (i32.const 217626) "a") (data (i32.const 217629) "a") (data (i32.const 217632) "a") (data (i32.const 217635) "a") (data (i32.const 217638) "a") (data (i32.const 217641) "a") (data (i32.const 217644) "a") (data (i32.const 217647) "a") (data (i32.const 217650) "a") (data (i32.const 217653) "a") (data (i32.const 217656) "a") (data (i32.const 217659) "a") (data (i32.const 217662) "a") (data (i32.const 217665) "a") (data (i32.const 217668) "a") (data (i32.const 217671) "a") (data (i32.const 217674) "a") (data (i32.const 217677) "a") (data (i32.const 217680) "a") (data (i32.const 217683) "a") (data (i32.const 217686) "a") (data (i32.const 217689) "a") (data (i32.const 217692) "a") (data (i32.const 217695) "a") (data (i32.const 217698) "a") (data (i32.const 217701) "a") (data (i32.const 217704) "a") (data (i32.const 217707) "a") (data (i32.const 217710) "a") (data (i32.const 217713) "a") (data (i32.const 217716) "a") (data (i32.const 217719) "a") (data (i32.const 217722) "a") (data (i32.const 217725) "a") (data (i32.const 217728) "a") (data (i32.const 217731) "a") (data (i32.const 217734) "a") (data (i32.const 217737) "a") (data (i32.const 217740) "a") (data (i32.const 217743) "a") (data (i32.const 217746) "a") (data (i32.const 217749) "a") (data (i32.const 217752) "a") (data (i32.const 217755) "a") (data (i32.const 217758) "a") (data (i32.const 217761) "a") (data (i32.const 217764) "a") (data (i32.const 217767) "a") (data (i32.const 217770) "a") (data (i32.const 217773) "a") (data (i32.const 217776) "a") (data (i32.const 217779) "a") (data (i32.const 217782) "a") (data (i32.const 217785) "a") (data (i32.const 217788) "a") (data (i32.const 217791) "a") (data (i32.const 217794) "a") (data (i32.const 217797) "a") (data (i32.const 217800) "a") (data (i32.const 217803) "a") (data (i32.const 217806) "a") (data (i32.const 217809) "a") (data (i32.const 217812) "a") (data (i32.const 217815) "a") (data (i32.const 217818) "a") (data (i32.const 217821) "a") (data (i32.const 217824) "a") (data (i32.const 217827) "a") (data (i32.const 217830) "a") (data (i32.const 217833) "a") (data (i32.const 217836) "a") (data (i32.const 217839) "a") (data (i32.const 217842) "a") (data (i32.const 217845) "a") (data (i32.const 217848) "a") (data (i32.const 217851) "a") (data (i32.const 217854) "a") (data (i32.const 217857) "a") (data (i32.const 217860) "a") (data (i32.const 217863) "a") (data (i32.const 217866) "a") (data (i32.const 217869) "a") (data (i32.const 217872) "a") (data (i32.const 217875) "a") (data (i32.const 217878) "a") (data (i32.const 217881) "a") (data (i32.const 217884) "a") (data (i32.const 217887) "a") (data (i32.const 217890) "a") (data (i32.const 217893) "a") (data (i32.const 217896) "a") (data (i32.const 217899) "a") (data (i32.const 217902) "a") (data (i32.const 217905) "a") (data (i32.const 217908) "a") (data (i32.const 217911) "a") (data (i32.const 217914) "a") (data (i32.const 217917) "a") (data (i32.const 217920) "a") (data (i32.const 217923) "a") (data (i32.const 217926) "a") (data (i32.const 217929) "a") (data (i32.const 217932) "a") (data (i32.const 217935) "a") (data (i32.const 217938) "a") (data (i32.const 217941) "a") (data (i32.const 217944) "a") (data (i32.const 217947) "a") (data (i32.const 217950) "a") (data (i32.const 217953) "a") (data (i32.const 217956) "a") (data (i32.const 217959) "a") (data (i32.const 217962) "a") (data (i32.const 217965) "a") (data (i32.const 217968) "a") (data (i32.const 217971) "a") (data (i32.const 217974) "a") (data (i32.const 217977) "a") (data (i32.const 217980) "a") (data (i32.const 217983) "a") (data (i32.const 217986) "a") (data (i32.const 217989) "a") (data (i32.const 217992) "a") (data (i32.const 217995) "a") (data (i32.const 217998) "a") (data (i32.const 218001) "a") (data (i32.const 218004) "a") (data (i32.const 218007) "a") (data (i32.const 218010) "a") (data (i32.const 218013) "a") (data (i32.const 218016) "a") (data (i32.const 218019) "a") (data (i32.const 218022) "a") (data (i32.const 218025) "a") (data (i32.const 218028) "a") (data (i32.const 218031) "a") (data (i32.const 218034) "a") (data (i32.const 218037) "a") (data (i32.const 218040) "a") (data (i32.const 218043) "a") (data (i32.const 218046) "a") (data (i32.const 218049) "a") (data (i32.const 218052) "a") (data (i32.const 218055) "a") (data (i32.const 218058) "a") (data (i32.const 218061) "a") (data (i32.const 218064) "a") (data (i32.const 218067) "a") (data (i32.const 218070) "a") (data (i32.const 218073) "a") (data (i32.const 218076) "a") (data (i32.const 218079) "a") (data (i32.const 218082) "a") (data (i32.const 218085) "a") (data (i32.const 218088) "a") (data (i32.const 218091) "a") (data (i32.const 218094) "a") (data (i32.const 218097) "a") (data (i32.const 218100) "a") (data (i32.const 218103) "a") (data (i32.const 218106) "a") (data (i32.const 218109) "a") (data (i32.const 218112) "a") (data (i32.const 218115) "a") (data (i32.const 218118) "a") (data (i32.const 218121) "a") (data (i32.const 218124) "a") (data (i32.const 218127) "a") (data (i32.const 218130) "a") (data (i32.const 218133) "a") (data (i32.const 218136) "a") (data (i32.const 218139) "a") (data (i32.const 218142) "a") (data (i32.const 218145) "a") (data (i32.const 218148) "a") (data (i32.const 218151) "a") (data (i32.const 218154) "a") (data (i32.const 218157) "a") (data (i32.const 218160) "a") (data (i32.const 218163) "a") (data (i32.const 218166) "a") (data (i32.const 218169) "a") (data (i32.const 218172) "a") (data (i32.const 218175) "a") (data (i32.const 218178) "a") (data (i32.const 218181) "a") (data (i32.const 218184) "a") (data (i32.const 218187) "a") (data (i32.const 218190) "a") (data (i32.const 218193) "a") (data (i32.const 218196) "a") (data (i32.const 218199) "a") (data (i32.const 218202) "a") (data (i32.const 218205) "a") (data (i32.const 218208) "a") (data (i32.const 218211) "a") (data (i32.const 218214) "a") (data (i32.const 218217) "a") (data (i32.const 218220) "a") (data (i32.const 218223) "a") (data (i32.const 218226) "a") (data (i32.const 218229) "a") (data (i32.const 218232) "a") (data (i32.const 218235) "a") (data (i32.const 218238) "a") (data (i32.const 218241) "a") (data (i32.const 218244) "a") (data (i32.const 218247) "a") (data (i32.const 218250) "a") (data (i32.const 218253) "a") (data (i32.const 218256) "a") (data (i32.const 218259) "a") (data (i32.const 218262) "a") (data (i32.const 218265) "a") (data (i32.const 218268) "a") (data (i32.const 218271) "a") (data (i32.const 218274) "a") (data (i32.const 218277) "a") (data (i32.const 218280) "a") (data (i32.const 218283) "a") (data (i32.const 218286) "a") (data (i32.const 218289) "a") (data (i32.const 218292) "a") (data (i32.const 218295) "a") (data (i32.const 218298) "a") (data (i32.const 218301) "a") (data (i32.const 218304) "a") (data (i32.const 218307) "a") (data (i32.const 218310) "a") (data (i32.const 218313) "a") (data (i32.const 218316) "a") (data (i32.const 218319) "a") (data (i32.const 218322) "a") (data (i32.const 218325) "a") (data (i32.const 218328) "a") (data (i32.const 218331) "a") (data (i32.const 218334) "a") (data (i32.const 218337) "a") (data (i32.const 218340) "a") (data (i32.const 218343) "a") (data (i32.const 218346) "a") (data (i32.const 218349) "a") (data (i32.const 218352) "a") (data (i32.const 218355) "a") (data (i32.const 218358) "a") (data (i32.const 218361) "a") (data (i32.const 218364) "a") (data (i32.const 218367) "a") (data (i32.const 218370) "a") (data (i32.const 218373) "a") (data (i32.const 218376) "a") (data (i32.const 218379) "a") (data (i32.const 218382) "a") (data (i32.const 218385) "a") (data (i32.const 218388) "a") (data (i32.const 218391) "a") (data (i32.const 218394) "a") (data (i32.const 218397) "a") (data (i32.const 218400) "a") (data (i32.const 218403) "a") (data (i32.const 218406) "a") (data (i32.const 218409) "a") (data (i32.const 218412) "a") (data (i32.const 218415) "a") (data (i32.const 218418) "a") (data (i32.const 218421) "a") (data (i32.const 218424) "a") (data (i32.const 218427) "a") (data (i32.const 218430) "a") (data (i32.const 218433) "a") (data (i32.const 218436) "a") (data (i32.const 218439) "a") (data (i32.const 218442) "a") (data (i32.const 218445) "a") (data (i32.const 218448) "a") (data (i32.const 218451) "a") (data (i32.const 218454) "a") (data (i32.const 218457) "a") (data (i32.const 218460) "a") (data (i32.const 218463) "a") (data (i32.const 218466) "a") (data (i32.const 218469) "a") (data (i32.const 218472) "a") (data (i32.const 218475) "a") (data (i32.const 218478) "a") (data (i32.const 218481) "a") (data (i32.const 218484) "a") (data (i32.const 218487) "a") (data (i32.const 218490) "a") (data (i32.const 218493) "a") (data (i32.const 218496) "a") (data (i32.const 218499) "a") (data (i32.const 218502) "a") (data (i32.const 218505) "a") (data (i32.const 218508) "a") (data (i32.const 218511) "a") (data (i32.const 218514) "a") (data (i32.const 218517) "a") (data (i32.const 218520) "a") (data (i32.const 218523) "a") (data (i32.const 218526) "a") (data (i32.const 218529) "a") (data (i32.const 218532) "a") (data (i32.const 218535) "a") (data (i32.const 218538) "a") (data (i32.const 218541) "a") (data (i32.const 218544) "a") (data (i32.const 218547) "a") (data (i32.const 218550) "a") (data (i32.const 218553) "a") (data (i32.const 218556) "a") (data (i32.const 218559) "a") (data (i32.const 218562) "a") (data (i32.const 218565) "a") (data (i32.const 218568) "a") (data (i32.const 218571) "a") (data (i32.const 218574) "a") (data (i32.const 218577) "a") (data (i32.const 218580) "a") (data (i32.const 218583) "a") (data (i32.const 218586) "a") (data (i32.const 218589) "a") (data (i32.const 218592) "a") (data (i32.const 218595) "a") (data (i32.const 218598) "a") (data (i32.const 218601) "a") (data (i32.const 218604) "a") (data (i32.const 218607) "a") (data (i32.const 218610) "a") (data (i32.const 218613) "a") (data (i32.const 218616) "a") (data (i32.const 218619) "a") (data (i32.const 218622) "a") (data (i32.const 218625) "a") (data (i32.const 218628) "a") (data (i32.const 218631) "a") (data (i32.const 218634) "a") (data (i32.const 218637) "a") (data (i32.const 218640) "a") (data (i32.const 218643) "a") (data (i32.const 218646) "a") (data (i32.const 218649) "a") (data (i32.const 218652) "a") (data (i32.const 218655) "a") (data (i32.const 218658) "a") (data (i32.const 218661) "a") (data (i32.const 218664) "a") (data (i32.const 218667) "a") (data (i32.const 218670) "a") (data (i32.const 218673) "a") (data (i32.const 218676) "a") (data (i32.const 218679) "a") (data (i32.const 218682) "a") (data (i32.const 218685) "a") (data (i32.const 218688) "a") (data (i32.const 218691) "a") (data (i32.const 218694) "a") (data (i32.const 218697) "a") (data (i32.const 218700) "a") (data (i32.const 218703) "a") (data (i32.const 218706) "a") (data (i32.const 218709) "a") (data (i32.const 218712) "a") (data (i32.const 218715) "a") (data (i32.const 218718) "a") (data (i32.const 218721) "a") (data (i32.const 218724) "a") (data (i32.const 218727) "a") (data (i32.const 218730) "a") (data (i32.const 218733) "a") (data (i32.const 218736) "a") (data (i32.const 218739) "a") (data (i32.const 218742) "a") (data (i32.const 218745) "a") (data (i32.const 218748) "a") (data (i32.const 218751) "a") (data (i32.const 218754) "a") (data (i32.const 218757) "a") (data (i32.const 218760) "a") (data (i32.const 218763) "a") (data (i32.const 218766) "a") (data (i32.const 218769) "a") (data (i32.const 218772) "a") (data (i32.const 218775) "a") (data (i32.const 218778) "a") (data (i32.const 218781) "a") (data (i32.const 218784) "a") (data (i32.const 218787) "a") (data (i32.const 218790) "a") (data (i32.const 218793) "a") (data (i32.const 218796) "a") (data (i32.const 218799) "a") (data (i32.const 218802) "a") (data (i32.const 218805) "a") (data (i32.const 218808) "a") (data (i32.const 218811) "a") (data (i32.const 218814) "a") (data (i32.const 218817) "a") (data (i32.const 218820) "a") (data (i32.const 218823) "a") (data (i32.const 218826) "a") (data (i32.const 218829) "a") (data (i32.const 218832) "a") (data (i32.const 218835) "a") (data (i32.const 218838) "a") (data (i32.const 218841) "a") (data (i32.const 218844) "a") (data (i32.const 218847) "a") (data (i32.const 218850) "a") (data (i32.const 218853) "a") (data (i32.const 218856) "a") (data (i32.const 218859) "a") (data (i32.const 218862) "a") (data (i32.const 218865) "a") (data (i32.const 218868) "a") (data (i32.const 218871) "a") (data (i32.const 218874) "a") (data (i32.const 218877) "a") (data (i32.const 218880) "a") (data (i32.const 218883) "a") (data (i32.const 218886) "a") (data (i32.const 218889) "a") (data (i32.const 218892) "a") (data (i32.const 218895) "a") (data (i32.const 218898) "a") (data (i32.const 218901) "a") (data (i32.const 218904) "a") (data (i32.const 218907) "a") (data (i32.const 218910) "a") (data (i32.const 218913) "a") (data (i32.const 218916) "a") (data (i32.const 218919) "a") (data (i32.const 218922) "a") (data (i32.const 218925) "a") (data (i32.const 218928) "a") (data (i32.const 218931) "a") (data (i32.const 218934) "a") (data (i32.const 218937) "a") (data (i32.const 218940) "a") (data (i32.const 218943) "a") (data (i32.const 218946) "a") (data (i32.const 218949) "a") (data (i32.const 218952) "a") (data (i32.const 218955) "a") (data (i32.const 218958) "a") (data (i32.const 218961) "a") (data (i32.const 218964) "a") (data (i32.const 218967) "a") (data (i32.const 218970) "a") (data (i32.const 218973) "a") (data (i32.const 218976) "a") (data (i32.const 218979) "a") (data (i32.const 218982) "a") (data (i32.const 218985) "a") (data (i32.const 218988) "a") (data (i32.const 218991) "a") (data (i32.const 218994) "a") (data (i32.const 218997) "a") (data (i32.const 219000) "a") (data (i32.const 219003) "a") (data (i32.const 219006) "a") (data (i32.const 219009) "a") (data (i32.const 219012) "a") (data (i32.const 219015) "a") (data (i32.const 219018) "a") (data (i32.const 219021) "a") (data (i32.const 219024) "a") (data (i32.const 219027) "a") (data (i32.const 219030) "a") (data (i32.const 219033) "a") (data (i32.const 219036) "a") (data (i32.const 219039) "a") (data (i32.const 219042) "a") (data (i32.const 219045) "a") (data (i32.const 219048) "a") (data (i32.const 219051) "a") (data (i32.const 219054) "a") (data (i32.const 219057) "a") (data (i32.const 219060) "a") (data (i32.const 219063) "a") (data (i32.const 219066) "a") (data (i32.const 219069) "a") (data (i32.const 219072) "a") (data (i32.const 219075) "a") (data (i32.const 219078) "a") (data (i32.const 219081) "a") (data (i32.const 219084) "a") (data (i32.const 219087) "a") (data (i32.const 219090) "a") (data (i32.const 219093) "a") (data (i32.const 219096) "a") (data (i32.const 219099) "a") (data (i32.const 219102) "a") (data (i32.const 219105) "a") (data (i32.const 219108) "a") (data (i32.const 219111) "a") (data (i32.const 219114) "a") (data (i32.const 219117) "a") (data (i32.const 219120) "a") (data (i32.const 219123) "a") (data (i32.const 219126) "a") (data (i32.const 219129) "a") (data (i32.const 219132) "a") (data (i32.const 219135) "a") (data (i32.const 219138) "a") (data (i32.const 219141) "a") (data (i32.const 219144) "a") (data (i32.const 219147) "a") (data (i32.const 219150) "a") (data (i32.const 219153) "a") (data (i32.const 219156) "a") (data (i32.const 219159) "a") (data (i32.const 219162) "a") (data (i32.const 219165) "a") (data (i32.const 219168) "a") (data (i32.const 219171) "a") (data (i32.const 219174) "a") (data (i32.const 219177) "a") (data (i32.const 219180) "a") (data (i32.const 219183) "a") (data (i32.const 219186) "a") (data (i32.const 219189) "a") (data (i32.const 219192) "a") (data (i32.const 219195) "a") (data (i32.const 219198) "a") (data (i32.const 219201) "a") (data (i32.const 219204) "a") (data (i32.const 219207) "a") (data (i32.const 219210) "a") (data (i32.const 219213) "a") (data (i32.const 219216) "a") (data (i32.const 219219) "a") (data (i32.const 219222) "a") (data (i32.const 219225) "a") (data (i32.const 219228) "a") (data (i32.const 219231) "a") (data (i32.const 219234) "a") (data (i32.const 219237) "a") (data (i32.const 219240) "a") (data (i32.const 219243) "a") (data (i32.const 219246) "a") (data (i32.const 219249) "a") (data (i32.const 219252) "a") (data (i32.const 219255) "a") (data (i32.const 219258) "a") (data (i32.const 219261) "a") (data (i32.const 219264) "a") (data (i32.const 219267) "a") (data (i32.const 219270) "a") (data (i32.const 219273) "a") (data (i32.const 219276) "a") (data (i32.const 219279) "a") (data (i32.const 219282) "a") (data (i32.const 219285) "a") (data (i32.const 219288) "a") (data (i32.const 219291) "a") (data (i32.const 219294) "a") (data (i32.const 219297) "a") (data (i32.const 219300) "a") (data (i32.const 219303) "a") (data (i32.const 219306) "a") (data (i32.const 219309) "a") (data (i32.const 219312) "a") (data (i32.const 219315) "a") (data (i32.const 219318) "a") (data (i32.const 219321) "a") (data (i32.const 219324) "a") (data (i32.const 219327) "a") (data (i32.const 219330) "a") (data (i32.const 219333) "a") (data (i32.const 219336) "a") (data (i32.const 219339) "a") (data (i32.const 219342) "a") (data (i32.const 219345) "a") (data (i32.const 219348) "a") (data (i32.const 219351) "a") (data (i32.const 219354) "a") (data (i32.const 219357) "a") (data (i32.const 219360) "a") (data (i32.const 219363) "a") (data (i32.const 219366) "a") (data (i32.const 219369) "a") (data (i32.const 219372) "a") (data (i32.const 219375) "a") (data (i32.const 219378) "a") (data (i32.const 219381) "a") (data (i32.const 219384) "a") (data (i32.const 219387) "a") (data (i32.const 219390) "a") (data (i32.const 219393) "a") (data (i32.const 219396) "a") (data (i32.const 219399) "a") (data (i32.const 219402) "a") (data (i32.const 219405) "a") (data (i32.const 219408) "a") (data (i32.const 219411) "a") (data (i32.const 219414) "a") (data (i32.const 219417) "a") (data (i32.const 219420) "a") (data (i32.const 219423) "a") (data (i32.const 219426) "a") (data (i32.const 219429) "a") (data (i32.const 219432) "a") (data (i32.const 219435) "a") (data (i32.const 219438) "a") (data (i32.const 219441) "a") (data (i32.const 219444) "a") (data (i32.const 219447) "a") (data (i32.const 219450) "a") (data (i32.const 219453) "a") (data (i32.const 219456) "a") (data (i32.const 219459) "a") (data (i32.const 219462) "a") (data (i32.const 219465) "a") (data (i32.const 219468) "a") (data (i32.const 219471) "a") (data (i32.const 219474) "a") (data (i32.const 219477) "a") (data (i32.const 219480) "a") (data (i32.const 219483) "a") (data (i32.const 219486) "a") (data (i32.const 219489) "a") (data (i32.const 219492) "a") (data (i32.const 219495) "a") (data (i32.const 219498) "a") (data (i32.const 219501) "a") (data (i32.const 219504) "a") (data (i32.const 219507) "a") (data (i32.const 219510) "a") (data (i32.const 219513) "a") (data (i32.const 219516) "a") (data (i32.const 219519) "a") (data (i32.const 219522) "a") (data (i32.const 219525) "a") (data (i32.const 219528) "a") (data (i32.const 219531) "a") (data (i32.const 219534) "a") (data (i32.const 219537) "a") (data (i32.const 219540) "a") (data (i32.const 219543) "a") (data (i32.const 219546) "a") (data (i32.const 219549) "a") (data (i32.const 219552) "a") (data (i32.const 219555) "a") (data (i32.const 219558) "a") (data (i32.const 219561) "a") (data (i32.const 219564) "a") (data (i32.const 219567) "a") (data (i32.const 219570) "a") (data (i32.const 219573) "a") (data (i32.const 219576) "a") (data (i32.const 219579) "a") (data (i32.const 219582) "a") (data (i32.const 219585) "a") (data (i32.const 219588) "a") (data (i32.const 219591) "a") (data (i32.const 219594) "a") (data (i32.const 219597) "a") (data (i32.const 219600) "a") (data (i32.const 219603) "a") (data (i32.const 219606) "a") (data (i32.const 219609) "a") (data (i32.const 219612) "a") (data (i32.const 219615) "a") (data (i32.const 219618) "a") (data (i32.const 219621) "a") (data (i32.const 219624) "a") (data (i32.const 219627) "a") (data (i32.const 219630) "a") (data (i32.const 219633) "a") (data (i32.const 219636) "a") (data (i32.const 219639) "a") (data (i32.const 219642) "a") (data (i32.const 219645) "a") (data (i32.const 219648) "a") (data (i32.const 219651) "a") (data (i32.const 219654) "a") (data (i32.const 219657) "a") (data (i32.const 219660) "a") (data (i32.const 219663) "a") (data (i32.const 219666) "a") (data (i32.const 219669) "a") (data (i32.const 219672) "a") (data (i32.const 219675) "a") (data (i32.const 219678) "a") (data (i32.const 219681) "a") (data (i32.const 219684) "a") (data (i32.const 219687) "a") (data (i32.const 219690) "a") (data (i32.const 219693) "a") (data (i32.const 219696) "a") (data (i32.const 219699) "a") (data (i32.const 219702) "a") (data (i32.const 219705) "a") (data (i32.const 219708) "a") (data (i32.const 219711) "a") (data (i32.const 219714) "a") (data (i32.const 219717) "a") (data (i32.const 219720) "a") (data (i32.const 219723) "a") (data (i32.const 219726) "a") (data (i32.const 219729) "a") (data (i32.const 219732) "a") (data (i32.const 219735) "a") (data (i32.const 219738) "a") (data (i32.const 219741) "a") (data (i32.const 219744) "a") (data (i32.const 219747) "a") (data (i32.const 219750) "a") (data (i32.const 219753) "a") (data (i32.const 219756) "a") (data (i32.const 219759) "a") (data (i32.const 219762) "a") (data (i32.const 219765) "a") (data (i32.const 219768) "a") (data (i32.const 219771) "a") (data (i32.const 219774) "a") (data (i32.const 219777) "a") (data (i32.const 219780) "a") (data (i32.const 219783) "a") (data (i32.const 219786) "a") (data (i32.const 219789) "a") (data (i32.const 219792) "a") (data (i32.const 219795) "a") (data (i32.const 219798) "a") (data (i32.const 219801) "a") (data (i32.const 219804) "a") (data (i32.const 219807) "a") (data (i32.const 219810) "a") (data (i32.const 219813) "a") (data (i32.const 219816) "a") (data (i32.const 219819) "a") (data (i32.const 219822) "a") (data (i32.const 219825) "a") (data (i32.const 219828) "a") (data (i32.const 219831) "a") (data (i32.const 219834) "a") (data (i32.const 219837) "a") (data (i32.const 219840) "a") (data (i32.const 219843) "a") (data (i32.const 219846) "a") (data (i32.const 219849) "a") (data (i32.const 219852) "a") (data (i32.const 219855) "a") (data (i32.const 219858) "a") (data (i32.const 219861) "a") (data (i32.const 219864) "a") (data (i32.const 219867) "a") (data (i32.const 219870) "a") (data (i32.const 219873) "a") (data (i32.const 219876) "a") (data (i32.const 219879) "a") (data (i32.const 219882) "a") (data (i32.const 219885) "a") (data (i32.const 219888) "a") (data (i32.const 219891) "a") (data (i32.const 219894) "a") (data (i32.const 219897) "a") (data (i32.const 219900) "a") (data (i32.const 219903) "a") (data (i32.const 219906) "a") (data (i32.const 219909) "a") (data (i32.const 219912) "a") (data (i32.const 219915) "a") (data (i32.const 219918) "a") (data (i32.const 219921) "a") (data (i32.const 219924) "a") (data (i32.const 219927) "a") (data (i32.const 219930) "a") (data (i32.const 219933) "a") (data (i32.const 219936) "a") (data (i32.const 219939) "a") (data (i32.const 219942) "a") (data (i32.const 219945) "a") (data (i32.const 219948) "a") (data (i32.const 219951) "a") (data (i32.const 219954) "a") (data (i32.const 219957) "a") (data (i32.const 219960) "a") (data (i32.const 219963) "a") (data (i32.const 219966) "a") (data (i32.const 219969) "a") (data (i32.const 219972) "a") (data (i32.const 219975) "a") (data (i32.const 219978) "a") (data (i32.const 219981) "a") (data (i32.const 219984) "a") (data (i32.const 219987) "a") (data (i32.const 219990) "a") (data (i32.const 219993) "a") (data (i32.const 219996) "a") (data (i32.const 219999) "a") (data (i32.const 220002) "a") (data (i32.const 220005) "a") (data (i32.const 220008) "a") (data (i32.const 220011) "a") (data (i32.const 220014) "a") (data (i32.const 220017) "a") (data (i32.const 220020) "a") (data (i32.const 220023) "a") (data (i32.const 220026) "a") (data (i32.const 220029) "a") (data (i32.const 220032) "a") (data (i32.const 220035) "a") (data (i32.const 220038) "a") (data (i32.const 220041) "a") (data (i32.const 220044) "a") (data (i32.const 220047) "a") (data (i32.const 220050) "a") (data (i32.const 220053) "a") (data (i32.const 220056) "a") (data (i32.const 220059) "a") (data (i32.const 220062) "a") (data (i32.const 220065) "a") (data (i32.const 220068) "a") (data (i32.const 220071) "a") (data (i32.const 220074) "a") (data (i32.const 220077) "a") (data (i32.const 220080) "a") (data (i32.const 220083) "a") (data (i32.const 220086) "a") (data (i32.const 220089) "a") (data (i32.const 220092) "a") (data (i32.const 220095) "a") (data (i32.const 220098) "a") (data (i32.const 220101) "a") (data (i32.const 220104) "a") (data (i32.const 220107) "a") (data (i32.const 220110) "a") (data (i32.const 220113) "a") (data (i32.const 220116) "a") (data (i32.const 220119) "a") (data (i32.const 220122) "a") (data (i32.const 220125) "a") (data (i32.const 220128) "a") (data (i32.const 220131) "a") (data (i32.const 220134) "a") (data (i32.const 220137) "a") (data (i32.const 220140) "a") (data (i32.const 220143) "a") (data (i32.const 220146) "a") (data (i32.const 220149) "a") (data (i32.const 220152) "a") (data (i32.const 220155) "a") (data (i32.const 220158) "a") (data (i32.const 220161) "a") (data (i32.const 220164) "a") (data (i32.const 220167) "a") (data (i32.const 220170) "a") (data (i32.const 220173) "a") (data (i32.const 220176) "a") (data (i32.const 220179) "a") (data (i32.const 220182) "a") (data (i32.const 220185) "a") (data (i32.const 220188) "a") (data (i32.const 220191) "a") (data (i32.const 220194) "a") (data (i32.const 220197) "a") (data (i32.const 220200) "a") (data (i32.const 220203) "a") (data (i32.const 220206) "a") (data (i32.const 220209) "a") (data (i32.const 220212) "a") (data (i32.const 220215) "a") (data (i32.const 220218) "a") (data (i32.const 220221) "a") (data (i32.const 220224) "a") (data (i32.const 220227) "a") (data (i32.const 220230) "a") (data (i32.const 220233) "a") (data (i32.const 220236) "a") (data (i32.const 220239) "a") (data (i32.const 220242) "a") (data (i32.const 220245) "a") (data (i32.const 220248) "a") (data (i32.const 220251) "a") (data (i32.const 220254) "a") (data (i32.const 220257) "a") (data (i32.const 220260) "a") (data (i32.const 220263) "a") (data (i32.const 220266) "a") (data (i32.const 220269) "a") (data (i32.const 220272) "a") (data (i32.const 220275) "a") (data (i32.const 220278) "a") (data (i32.const 220281) "a") (data (i32.const 220284) "a") (data (i32.const 220287) "a") (data (i32.const 220290) "a") (data (i32.const 220293) "a") (data (i32.const 220296) "a") (data (i32.const 220299) "a") (data (i32.const 220302) "a") (data (i32.const 220305) "a") (data (i32.const 220308) "a") (data (i32.const 220311) "a") (data (i32.const 220314) "a") (data (i32.const 220317) "a") (data (i32.const 220320) "a") (data (i32.const 220323) "a") (data (i32.const 220326) "a") (data (i32.const 220329) "a") (data (i32.const 220332) "a") (data (i32.const 220335) "a") (data (i32.const 220338) "a") (data (i32.const 220341) "a") (data (i32.const 220344) "a") (data (i32.const 220347) "a") (data (i32.const 220350) "a") (data (i32.const 220353) "a") (data (i32.const 220356) "a") (data (i32.const 220359) "a") (data (i32.const 220362) "a") (data (i32.const 220365) "a") (data (i32.const 220368) "a") (data (i32.const 220371) "a") (data (i32.const 220374) "a") (data (i32.const 220377) "a") (data (i32.const 220380) "a") (data (i32.const 220383) "a") (data (i32.const 220386) "a") (data (i32.const 220389) "a") (data (i32.const 220392) "a") (data (i32.const 220395) "a") (data (i32.const 220398) "a") (data (i32.const 220401) "a") (data (i32.const 220404) "a") (data (i32.const 220407) "a") (data (i32.const 220410) "a") (data (i32.const 220413) "a") (data (i32.const 220416) "a") (data (i32.const 220419) "a") (data (i32.const 220422) "a") (data (i32.const 220425) "a") (data (i32.const 220428) "a") (data (i32.const 220431) "a") (data (i32.const 220434) "a") (data (i32.const 220437) "a") (data (i32.const 220440) "a") (data (i32.const 220443) "a") (data (i32.const 220446) "a") (data (i32.const 220449) "a") (data (i32.const 220452) "a") (data (i32.const 220455) "a") (data (i32.const 220458) "a") (data (i32.const 220461) "a") (data (i32.const 220464) "a") (data (i32.const 220467) "a") (data (i32.const 220470) "a") (data (i32.const 220473) "a") (data (i32.const 220476) "a") (data (i32.const 220479) "a") (data (i32.const 220482) "a") (data (i32.const 220485) "a") (data (i32.const 220488) "a") (data (i32.const 220491) "a") (data (i32.const 220494) "a") (data (i32.const 220497) "a") (data (i32.const 220500) "a") (data (i32.const 220503) "a") (data (i32.const 220506) "a") (data (i32.const 220509) "a") (data (i32.const 220512) "a") (data (i32.const 220515) "a") (data (i32.const 220518) "a") (data (i32.const 220521) "a") (data (i32.const 220524) "a") (data (i32.const 220527) "a") (data (i32.const 220530) "a") (data (i32.const 220533) "a") (data (i32.const 220536) "a") (data (i32.const 220539) "a") (data (i32.const 220542) "a") (data (i32.const 220545) "a") (data (i32.const 220548) "a") (data (i32.const 220551) "a") (data (i32.const 220554) "a") (data (i32.const 220557) "a") (data (i32.const 220560) "a") (data (i32.const 220563) "a") (data (i32.const 220566) "a") (data (i32.const 220569) "a") (data (i32.const 220572) "a") (data (i32.const 220575) "a") (data (i32.const 220578) "a") (data (i32.const 220581) "a") (data (i32.const 220584) "a") (data (i32.const 220587) "a") (data (i32.const 220590) "a") (data (i32.const 220593) "a") (data (i32.const 220596) "a") (data (i32.const 220599) "a") (data (i32.const 220602) "a") (data (i32.const 220605) "a") (data (i32.const 220608) "a") (data (i32.const 220611) "a") (data (i32.const 220614) "a") (data (i32.const 220617) "a") (data (i32.const 220620) "a") (data (i32.const 220623) "a") (data (i32.const 220626) "a") (data (i32.const 220629) "a") (data (i32.const 220632) "a") (data (i32.const 220635) "a") (data (i32.const 220638) "a") (data (i32.const 220641) "a") (data (i32.const 220644) "a") (data (i32.const 220647) "a") (data (i32.const 220650) "a") (data (i32.const 220653) "a") (data (i32.const 220656) "a") (data (i32.const 220659) "a") (data (i32.const 220662) "a") (data (i32.const 220665) "a") (data (i32.const 220668) "a") (data (i32.const 220671) "a") (data (i32.const 220674) "a") (data (i32.const 220677) "a") (data (i32.const 220680) "a") (data (i32.const 220683) "a") (data (i32.const 220686) "a") (data (i32.const 220689) "a") (data (i32.const 220692) "a") (data (i32.const 220695) "a") (data (i32.const 220698) "a") (data (i32.const 220701) "a") (data (i32.const 220704) "a") (data (i32.const 220707) "a") (data (i32.const 220710) "a") (data (i32.const 220713) "a") (data (i32.const 220716) "a") (data (i32.const 220719) "a") (data (i32.const 220722) "a") (data (i32.const 220725) "a") (data (i32.const 220728) "a") (data (i32.const 220731) "a") (data (i32.const 220734) "a") (data (i32.const 220737) "a") (data (i32.const 220740) "a") (data (i32.const 220743) "a") (data (i32.const 220746) "a") (data (i32.const 220749) "a") (data (i32.const 220752) "a") (data (i32.const 220755) "a") (data (i32.const 220758) "a") (data (i32.const 220761) "a") (data (i32.const 220764) "a") (data (i32.const 220767) "a") (data (i32.const 220770) "a") (data (i32.const 220773) "a") (data (i32.const 220776) "a") (data (i32.const 220779) "a") (data (i32.const 220782) "a") (data (i32.const 220785) "a") (data (i32.const 220788) "a") (data (i32.const 220791) "a") (data (i32.const 220794) "a") (data (i32.const 220797) "a") (data (i32.const 220800) "a") (data (i32.const 220803) "a") (data (i32.const 220806) "a") (data (i32.const 220809) "a") (data (i32.const 220812) "a") (data (i32.const 220815) "a") (data (i32.const 220818) "a") (data (i32.const 220821) "a") (data (i32.const 220824) "a") (data (i32.const 220827) "a") (data (i32.const 220830) "a") (data (i32.const 220833) "a") (data (i32.const 220836) "a") (data (i32.const 220839) "a") (data (i32.const 220842) "a") (data (i32.const 220845) "a") (data (i32.const 220848) "a") (data (i32.const 220851) "a") (data (i32.const 220854) "a") (data (i32.const 220857) "a") (data (i32.const 220860) "a") (data (i32.const 220863) "a") (data (i32.const 220866) "a") (data (i32.const 220869) "a") (data (i32.const 220872) "a") (data (i32.const 220875) "a") (data (i32.const 220878) "a") (data (i32.const 220881) "a") (data (i32.const 220884) "a") (data (i32.const 220887) "a") (data (i32.const 220890) "a") (data (i32.const 220893) "a") (data (i32.const 220896) "a") (data (i32.const 220899) "a") (data (i32.const 220902) "a") (data (i32.const 220905) "a") (data (i32.const 220908) "a") (data (i32.const 220911) "a") (data (i32.const 220914) "a") (data (i32.const 220917) "a") (data (i32.const 220920) "a") (data (i32.const 220923) "a") (data (i32.const 220926) "a") (data (i32.const 220929) "a") (data (i32.const 220932) "a") (data (i32.const 220935) "a") (data (i32.const 220938) "a") (data (i32.const 220941) "a") (data (i32.const 220944) "a") (data (i32.const 220947) "a") (data (i32.const 220950) "a") (data (i32.const 220953) "a") (data (i32.const 220956) "a") (data (i32.const 220959) "a") (data (i32.const 220962) "a") (data (i32.const 220965) "a") (data (i32.const 220968) "a") (data (i32.const 220971) "a") (data (i32.const 220974) "a") (data (i32.const 220977) "a") (data (i32.const 220980) "a") (data (i32.const 220983) "a") (data (i32.const 220986) "a") (data (i32.const 220989) "a") (data (i32.const 220992) "a") (data (i32.const 220995) "a") (data (i32.const 220998) "a") (data (i32.const 221001) "a") (data (i32.const 221004) "a") (data (i32.const 221007) "a") (data (i32.const 221010) "a") (data (i32.const 221013) "a") (data (i32.const 221016) "a") (data (i32.const 221019) "a") (data (i32.const 221022) "a") (data (i32.const 221025) "a") (data (i32.const 221028) "a") (data (i32.const 221031) "a") (data (i32.const 221034) "a") (data (i32.const 221037) "a") (data (i32.const 221040) "a") (data (i32.const 221043) "a") (data (i32.const 221046) "a") (data (i32.const 221049) "a") (data (i32.const 221052) "a") (data (i32.const 221055) "a") (data (i32.const 221058) "a") (data (i32.const 221061) "a") (data (i32.const 221064) "a") (data (i32.const 221067) "a") (data (i32.const 221070) "a") (data (i32.const 221073) "a") (data (i32.const 221076) "a") (data (i32.const 221079) "a") (data (i32.const 221082) "a") (data (i32.const 221085) "a") (data (i32.const 221088) "a") (data (i32.const 221091) "a") (data (i32.const 221094) "a") (data (i32.const 221097) "a") (data (i32.const 221100) "a") (data (i32.const 221103) "a") (data (i32.const 221106) "a") (data (i32.const 221109) "a") (data (i32.const 221112) "a") (data (i32.const 221115) "a") (data (i32.const 221118) "a") (data (i32.const 221121) "a") (data (i32.const 221124) "a") (data (i32.const 221127) "a") (data (i32.const 221130) "a") (data (i32.const 221133) "a") (data (i32.const 221136) "a") (data (i32.const 221139) "a") (data (i32.const 221142) "a") (data (i32.const 221145) "a") (data (i32.const 221148) "a") (data (i32.const 221151) "a") (data (i32.const 221154) "a") (data (i32.const 221157) "a") (data (i32.const 221160) "a") (data (i32.const 221163) "a") (data (i32.const 221166) "a") (data (i32.const 221169) "a") (data (i32.const 221172) "a") (data (i32.const 221175) "a") (data (i32.const 221178) "a") (data (i32.const 221181) "a") (data (i32.const 221184) "a") (data (i32.const 221187) "a") (data (i32.const 221190) "a") (data (i32.const 221193) "a") (data (i32.const 221196) "a") (data (i32.const 221199) "a") (data (i32.const 221202) "a") (data (i32.const 221205) "a") (data (i32.const 221208) "a") (data (i32.const 221211) "a") (data (i32.const 221214) "a") (data (i32.const 221217) "a") (data (i32.const 221220) "a") (data (i32.const 221223) "a") (data (i32.const 221226) "a") (data (i32.const 221229) "a") (data (i32.const 221232) "a") (data (i32.const 221235) "a") (data (i32.const 221238) "a") (data (i32.const 221241) "a") (data (i32.const 221244) "a") (data (i32.const 221247) "a") (data (i32.const 221250) "a") (data (i32.const 221253) "a") (data (i32.const 221256) "a") (data (i32.const 221259) "a") (data (i32.const 221262) "a") (data (i32.const 221265) "a") (data (i32.const 221268) "a") (data (i32.const 221271) "a") (data (i32.const 221274) "a") (data (i32.const 221277) "a") (data (i32.const 221280) "a") (data (i32.const 221283) "a") (data (i32.const 221286) "a") (data (i32.const 221289) "a") (data (i32.const 221292) "a") (data (i32.const 221295) "a") (data (i32.const 221298) "a") (data (i32.const 221301) "a") (data (i32.const 221304) "a") (data (i32.const 221307) "a") (data (i32.const 221310) "a") (data (i32.const 221313) "a") (data (i32.const 221316) "a") (data (i32.const 221319) "a") (data (i32.const 221322) "a") (data (i32.const 221325) "a") (data (i32.const 221328) "a") (data (i32.const 221331) "a") (data (i32.const 221334) "a") (data (i32.const 221337) "a") (data (i32.const 221340) "a") (data (i32.const 221343) "a") (data (i32.const 221346) "a") (data (i32.const 221349) "a") (data (i32.const 221352) "a") (data (i32.const 221355) "a") (data (i32.const 221358) "a") (data (i32.const 221361) "a") (data (i32.const 221364) "a") (data (i32.const 221367) "a") (data (i32.const 221370) "a") (data (i32.const 221373) "a") (data (i32.const 221376) "a") (data (i32.const 221379) "a") (data (i32.const 221382) "a") (data (i32.const 221385) "a") (data (i32.const 221388) "a") (data (i32.const 221391) "a") (data (i32.const 221394) "a") (data (i32.const 221397) "a") (data (i32.const 221400) "a") (data (i32.const 221403) "a") (data (i32.const 221406) "a") (data (i32.const 221409) "a") (data (i32.const 221412) "a") (data (i32.const 221415) "a") (data (i32.const 221418) "a") (data (i32.const 221421) "a") (data (i32.const 221424) "a") (data (i32.const 221427) "a") (data (i32.const 221430) "a") (data (i32.const 221433) "a") (data (i32.const 221436) "a") (data (i32.const 221439) "a") (data (i32.const 221442) "a") (data (i32.const 221445) "a") (data (i32.const 221448) "a") (data (i32.const 221451) "a") (data (i32.const 221454) "a") (data (i32.const 221457) "a") (data (i32.const 221460) "a") (data (i32.const 221463) "a") (data (i32.const 221466) "a") (data (i32.const 221469) "a") (data (i32.const 221472) "a") (data (i32.const 221475) "a") (data (i32.const 221478) "a") (data (i32.const 221481) "a") (data (i32.const 221484) "a") (data (i32.const 221487) "a") (data (i32.const 221490) "a") (data (i32.const 221493) "a") (data (i32.const 221496) "a") (data (i32.const 221499) "a") (data (i32.const 221502) "a") (data (i32.const 221505) "a") (data (i32.const 221508) "a") (data (i32.const 221511) "a") (data (i32.const 221514) "a") (data (i32.const 221517) "a") (data (i32.const 221520) "a") (data (i32.const 221523) "a") (data (i32.const 221526) "a") (data (i32.const 221529) "a") (data (i32.const 221532) "a") (data (i32.const 221535) "a") (data (i32.const 221538) "a") (data (i32.const 221541) "a") (data (i32.const 221544) "a") (data (i32.const 221547) "a") (data (i32.const 221550) "a") (data (i32.const 221553) "a") (data (i32.const 221556) "a") (data (i32.const 221559) "a") (data (i32.const 221562) "a") (data (i32.const 221565) "a") (data (i32.const 221568) "a") (data (i32.const 221571) "a") (data (i32.const 221574) "a") (data (i32.const 221577) "a") (data (i32.const 221580) "a") (data (i32.const 221583) "a") (data (i32.const 221586) "a") (data (i32.const 221589) "a") (data (i32.const 221592) "a") (data (i32.const 221595) "a") (data (i32.const 221598) "a") (data (i32.const 221601) "a") (data (i32.const 221604) "a") (data (i32.const 221607) "a") (data (i32.const 221610) "a") (data (i32.const 221613) "a") (data (i32.const 221616) "a") (data (i32.const 221619) "a") (data (i32.const 221622) "a") (data (i32.const 221625) "a") (data (i32.const 221628) "a") (data (i32.const 221631) "a") (data (i32.const 221634) "a") (data (i32.const 221637) "a") (data (i32.const 221640) "a") (data (i32.const 221643) "a") (data (i32.const 221646) "a") (data (i32.const 221649) "a") (data (i32.const 221652) "a") (data (i32.const 221655) "a") (data (i32.const 221658) "a") (data (i32.const 221661) "a") (data (i32.const 221664) "a") (data (i32.const 221667) "a") (data (i32.const 221670) "a") (data (i32.const 221673) "a") (data (i32.const 221676) "a") (data (i32.const 221679) "a") (data (i32.const 221682) "a") (data (i32.const 221685) "a") (data (i32.const 221688) "a") (data (i32.const 221691) "a") (data (i32.const 221694) "a") (data (i32.const 221697) "a") (data (i32.const 221700) "a") (data (i32.const 221703) "a") (data (i32.const 221706) "a") (data (i32.const 221709) "a") (data (i32.const 221712) "a") (data (i32.const 221715) "a") (data (i32.const 221718) "a") (data (i32.const 221721) "a") (data (i32.const 221724) "a") (data (i32.const 221727) "a") (data (i32.const 221730) "a") (data (i32.const 221733) "a") (data (i32.const 221736) "a") (data (i32.const 221739) "a") (data (i32.const 221742) "a") (data (i32.const 221745) "a") (data (i32.const 221748) "a") (data (i32.const 221751) "a") (data (i32.const 221754) "a") (data (i32.const 221757) "a") (data (i32.const 221760) "a") (data (i32.const 221763) "a") (data (i32.const 221766) "a") (data (i32.const 221769) "a") (data (i32.const 221772) "a") (data (i32.const 221775) "a") (data (i32.const 221778) "a") (data (i32.const 221781) "a") (data (i32.const 221784) "a") (data (i32.const 221787) "a") (data (i32.const 221790) "a") (data (i32.const 221793) "a") (data (i32.const 221796) "a") (data (i32.const 221799) "a") (data (i32.const 221802) "a") (data (i32.const 221805) "a") (data (i32.const 221808) "a") (data (i32.const 221811) "a") (data (i32.const 221814) "a") (data (i32.const 221817) "a") (data (i32.const 221820) "a") (data (i32.const 221823) "a") (data (i32.const 221826) "a") (data (i32.const 221829) "a") (data (i32.const 221832) "a") (data (i32.const 221835) "a") (data (i32.const 221838) "a") (data (i32.const 221841) "a") (data (i32.const 221844) "a") (data (i32.const 221847) "a") (data (i32.const 221850) "a") (data (i32.const 221853) "a") (data (i32.const 221856) "a") (data (i32.const 221859) "a") (data (i32.const 221862) "a") (data (i32.const 221865) "a") (data (i32.const 221868) "a") (data (i32.const 221871) "a") (data (i32.const 221874) "a") (data (i32.const 221877) "a") (data (i32.const 221880) "a") (data (i32.const 221883) "a") (data (i32.const 221886) "a") (data (i32.const 221889) "a") (data (i32.const 221892) "a") (data (i32.const 221895) "a") (data (i32.const 221898) "a") (data (i32.const 221901) "a") (data (i32.const 221904) "a") (data (i32.const 221907) "a") (data (i32.const 221910) "a") (data (i32.const 221913) "a") (data (i32.const 221916) "a") (data (i32.const 221919) "a") (data (i32.const 221922) "a") (data (i32.const 221925) "a") (data (i32.const 221928) "a") (data (i32.const 221931) "a") (data (i32.const 221934) "a") (data (i32.const 221937) "a") (data (i32.const 221940) "a") (data (i32.const 221943) "a") (data (i32.const 221946) "a") (data (i32.const 221949) "a") (data (i32.const 221952) "a") (data (i32.const 221955) "a") (data (i32.const 221958) "a") (data (i32.const 221961) "a") (data (i32.const 221964) "a") (data (i32.const 221967) "a") (data (i32.const 221970) "a") (data (i32.const 221973) "a") (data (i32.const 221976) "a") (data (i32.const 221979) "a") (data (i32.const 221982) "a") (data (i32.const 221985) "a") (data (i32.const 221988) "a") (data (i32.const 221991) "a") (data (i32.const 221994) "a") (data (i32.const 221997) "a") (data (i32.const 222000) "a") (data (i32.const 222003) "a") (data (i32.const 222006) "a") (data (i32.const 222009) "a") (data (i32.const 222012) "a") (data (i32.const 222015) "a") (data (i32.const 222018) "a") (data (i32.const 222021) "a") (data (i32.const 222024) "a") (data (i32.const 222027) "a") (data (i32.const 222030) "a") (data (i32.const 222033) "a") (data (i32.const 222036) "a") (data (i32.const 222039) "a") (data (i32.const 222042) "a") (data (i32.const 222045) "a") (data (i32.const 222048) "a") (data (i32.const 222051) "a") (data (i32.const 222054) "a") (data (i32.const 222057) "a") (data (i32.const 222060) "a") (data (i32.const 222063) "a") (data (i32.const 222066) "a") (data (i32.const 222069) "a") (data (i32.const 222072) "a") (data (i32.const 222075) "a") (data (i32.const 222078) "a") (data (i32.const 222081) "a") (data (i32.const 222084) "a") (data (i32.const 222087) "a") (data (i32.const 222090) "a") (data (i32.const 222093) "a") (data (i32.const 222096) "a") (data (i32.const 222099) "a") (data (i32.const 222102) "a") (data (i32.const 222105) "a") (data (i32.const 222108) "a") (data (i32.const 222111) "a") (data (i32.const 222114) "a") (data (i32.const 222117) "a") (data (i32.const 222120) "a") (data (i32.const 222123) "a") (data (i32.const 222126) "a") (data (i32.const 222129) "a") (data (i32.const 222132) "a") (data (i32.const 222135) "a") (data (i32.const 222138) "a") (data (i32.const 222141) "a") (data (i32.const 222144) "a") (data (i32.const 222147) "a") (data (i32.const 222150) "a") (data (i32.const 222153) "a") (data (i32.const 222156) "a") (data (i32.const 222159) "a") (data (i32.const 222162) "a") (data (i32.const 222165) "a") (data (i32.const 222168) "a") (data (i32.const 222171) "a") (data (i32.const 222174) "a") (data (i32.const 222177) "a") (data (i32.const 222180) "a") (data (i32.const 222183) "a") (data (i32.const 222186) "a") (data (i32.const 222189) "a") (data (i32.const 222192) "a") (data (i32.const 222195) "a") (data (i32.const 222198) "a") (data (i32.const 222201) "a") (data (i32.const 222204) "a") (data (i32.const 222207) "a") (data (i32.const 222210) "a") (data (i32.const 222213) "a") (data (i32.const 222216) "a") (data (i32.const 222219) "a") (data (i32.const 222222) "a") (data (i32.const 222225) "a") (data (i32.const 222228) "a") (data (i32.const 222231) "a") (data (i32.const 222234) "a") (data (i32.const 222237) "a") (data (i32.const 222240) "a") (data (i32.const 222243) "a") (data (i32.const 222246) "a") (data (i32.const 222249) "a") (data (i32.const 222252) "a") (data (i32.const 222255) "a") (data (i32.const 222258) "a") (data (i32.const 222261) "a") (data (i32.const 222264) "a") (data (i32.const 222267) "a") (data (i32.const 222270) "a") (data (i32.const 222273) "a") (data (i32.const 222276) "a") (data (i32.const 222279) "a") (data (i32.const 222282) "a") (data (i32.const 222285) "a") (data (i32.const 222288) "a") (data (i32.const 222291) "a") (data (i32.const 222294) "a") (data (i32.const 222297) "a") (data (i32.const 222300) "a") (data (i32.const 222303) "a") (data (i32.const 222306) "a") (data (i32.const 222309) "a") (data (i32.const 222312) "a") (data (i32.const 222315) "a") (data (i32.const 222318) "a") (data (i32.const 222321) "a") (data (i32.const 222324) "a") (data (i32.const 222327) "a") (data (i32.const 222330) "a") (data (i32.const 222333) "a") (data (i32.const 222336) "a") (data (i32.const 222339) "a") (data (i32.const 222342) "a") (data (i32.const 222345) "a") (data (i32.const 222348) "a") (data (i32.const 222351) "a") (data (i32.const 222354) "a") (data (i32.const 222357) "a") (data (i32.const 222360) "a") (data (i32.const 222363) "a") (data (i32.const 222366) "a") (data (i32.const 222369) "a") (data (i32.const 222372) "a") (data (i32.const 222375) "a") (data (i32.const 222378) "a") (data (i32.const 222381) "a") (data (i32.const 222384) "a") (data (i32.const 222387) "a") (data (i32.const 222390) "a") (data (i32.const 222393) "a") (data (i32.const 222396) "a") (data (i32.const 222399) "a") (data (i32.const 222402) "a") (data (i32.const 222405) "a") (data (i32.const 222408) "a") (data (i32.const 222411) "a") (data (i32.const 222414) "a") (data (i32.const 222417) "a") (data (i32.const 222420) "a") (data (i32.const 222423) "a") (data (i32.const 222426) "a") (data (i32.const 222429) "a") (data (i32.const 222432) "a") (data (i32.const 222435) "a") (data (i32.const 222438) "a") (data (i32.const 222441) "a") (data (i32.const 222444) "a") (data (i32.const 222447) "a") (data (i32.const 222450) "a") (data (i32.const 222453) "a") (data (i32.const 222456) "a") (data (i32.const 222459) "a") (data (i32.const 222462) "a") (data (i32.const 222465) "a") (data (i32.const 222468) "a") (data (i32.const 222471) "a") (data (i32.const 222474) "a") (data (i32.const 222477) "a") (data (i32.const 222480) "a") (data (i32.const 222483) "a") (data (i32.const 222486) "a") (data (i32.const 222489) "a") (data (i32.const 222492) "a") (data (i32.const 222495) "a") (data (i32.const 222498) "a") (data (i32.const 222501) "a") (data (i32.const 222504) "a") (data (i32.const 222507) "a") (data (i32.const 222510) "a") (data (i32.const 222513) "a") (data (i32.const 222516) "a") (data (i32.const 222519) "a") (data (i32.const 222522) "a") (data (i32.const 222525) "a") (data (i32.const 222528) "a") (data (i32.const 222531) "a") (data (i32.const 222534) "a") (data (i32.const 222537) "a") (data (i32.const 222540) "a") (data (i32.const 222543) "a") (data (i32.const 222546) "a") (data (i32.const 222549) "a") (data (i32.const 222552) "a") (data (i32.const 222555) "a") (data (i32.const 222558) "a") (data (i32.const 222561) "a") (data (i32.const 222564) "a") (data (i32.const 222567) "a") (data (i32.const 222570) "a") (data (i32.const 222573) "a") (data (i32.const 222576) "a") (data (i32.const 222579) "a") (data (i32.const 222582) "a") (data (i32.const 222585) "a") (data (i32.const 222588) "a") (data (i32.const 222591) "a") (data (i32.const 222594) "a") (data (i32.const 222597) "a") (data (i32.const 222600) "a") (data (i32.const 222603) "a") (data (i32.const 222606) "a") (data (i32.const 222609) "a") (data (i32.const 222612) "a") (data (i32.const 222615) "a") (data (i32.const 222618) "a") (data (i32.const 222621) "a") (data (i32.const 222624) "a") (data (i32.const 222627) "a") (data (i32.const 222630) "a") (data (i32.const 222633) "a") (data (i32.const 222636) "a") (data (i32.const 222639) "a") (data (i32.const 222642) "a") (data (i32.const 222645) "a") (data (i32.const 222648) "a") (data (i32.const 222651) "a") (data (i32.const 222654) "a") (data (i32.const 222657) "a") (data (i32.const 222660) "a") (data (i32.const 222663) "a") (data (i32.const 222666) "a") (data (i32.const 222669) "a") (data (i32.const 222672) "a") (data (i32.const 222675) "a") (data (i32.const 222678) "a") (data (i32.const 222681) "a") (data (i32.const 222684) "a") (data (i32.const 222687) "a") (data (i32.const 222690) "a") (data (i32.const 222693) "a") (data (i32.const 222696) "a") (data (i32.const 222699) "a") (data (i32.const 222702) "a") (data (i32.const 222705) "a") (data (i32.const 222708) "a") (data (i32.const 222711) "a") (data (i32.const 222714) "a") (data (i32.const 222717) "a") (data (i32.const 222720) "a") (data (i32.const 222723) "a") (data (i32.const 222726) "a") (data (i32.const 222729) "a") (data (i32.const 222732) "a") (data (i32.const 222735) "a") (data (i32.const 222738) "a") (data (i32.const 222741) "a") (data (i32.const 222744) "a") (data (i32.const 222747) "a") (data (i32.const 222750) "a") (data (i32.const 222753) "a") (data (i32.const 222756) "a") (data (i32.const 222759) "a") (data (i32.const 222762) "a") (data (i32.const 222765) "a") (data (i32.const 222768) "a") (data (i32.const 222771) "a") (data (i32.const 222774) "a") (data (i32.const 222777) "a") (data (i32.const 222780) "a") (data (i32.const 222783) "a") (data (i32.const 222786) "a") (data (i32.const 222789) "a") (data (i32.const 222792) "a") (data (i32.const 222795) "a") (data (i32.const 222798) "a") (data (i32.const 222801) "a") (data (i32.const 222804) "a") (data (i32.const 222807) "a") (data (i32.const 222810) "a") (data (i32.const 222813) "a") (data (i32.const 222816) "a") (data (i32.const 222819) "a") (data (i32.const 222822) "a") (data (i32.const 222825) "a") (data (i32.const 222828) "a") (data (i32.const 222831) "a") (data (i32.const 222834) "a") (data (i32.const 222837) "a") (data (i32.const 222840) "a") (data (i32.const 222843) "a") (data (i32.const 222846) "a") (data (i32.const 222849) "a") (data (i32.const 222852) "a") (data (i32.const 222855) "a") (data (i32.const 222858) "a") (data (i32.const 222861) "a") (data (i32.const 222864) "a") (data (i32.const 222867) "a") (data (i32.const 222870) "a") (data (i32.const 222873) "a") (data (i32.const 222876) "a") (data (i32.const 222879) "a") (data (i32.const 222882) "a") (data (i32.const 222885) "a") (data (i32.const 222888) "a") (data (i32.const 222891) "a") (data (i32.const 222894) "a") (data (i32.const 222897) "a") (data (i32.const 222900) "a") (data (i32.const 222903) "a") (data (i32.const 222906) "a") (data (i32.const 222909) "a") (data (i32.const 222912) "a") (data (i32.const 222915) "a") (data (i32.const 222918) "a") (data (i32.const 222921) "a") (data (i32.const 222924) "a") (data (i32.const 222927) "a") (data (i32.const 222930) "a") (data (i32.const 222933) "a") (data (i32.const 222936) "a") (data (i32.const 222939) "a") (data (i32.const 222942) "a") (data (i32.const 222945) "a") (data (i32.const 222948) "a") (data (i32.const 222951) "a") (data (i32.const 222954) "a") (data (i32.const 222957) "a") (data (i32.const 222960) "a") (data (i32.const 222963) "a") (data (i32.const 222966) "a") (data (i32.const 222969) "a") (data (i32.const 222972) "a") (data (i32.const 222975) "a") (data (i32.const 222978) "a") (data (i32.const 222981) "a") (data (i32.const 222984) "a") (data (i32.const 222987) "a") (data (i32.const 222990) "a") (data (i32.const 222993) "a") (data (i32.const 222996) "a") (data (i32.const 222999) "a") (data (i32.const 223002) "a") (data (i32.const 223005) "a") (data (i32.const 223008) "a") (data (i32.const 223011) "a") (data (i32.const 223014) "a") (data (i32.const 223017) "a") (data (i32.const 223020) "a") (data (i32.const 223023) "a") (data (i32.const 223026) "a") (data (i32.const 223029) "a") (data (i32.const 223032) "a") (data (i32.const 223035) "a") (data (i32.const 223038) "a") (data (i32.const 223041) "a") (data (i32.const 223044) "a") (data (i32.const 223047) "a") (data (i32.const 223050) "a") (data (i32.const 223053) "a") (data (i32.const 223056) "a") (data (i32.const 223059) "a") (data (i32.const 223062) "a") (data (i32.const 223065) "a") (data (i32.const 223068) "a") (data (i32.const 223071) "a") (data (i32.const 223074) "a") (data (i32.const 223077) "a") (data (i32.const 223080) "a") (data (i32.const 223083) "a") (data (i32.const 223086) "a") (data (i32.const 223089) "a") (data (i32.const 223092) "a") (data (i32.const 223095) "a") (data (i32.const 223098) "a") (data (i32.const 223101) "a") (data (i32.const 223104) "a") (data (i32.const 223107) "a") (data (i32.const 223110) "a") (data (i32.const 223113) "a") (data (i32.const 223116) "a") (data (i32.const 223119) "a") (data (i32.const 223122) "a") (data (i32.const 223125) "a") (data (i32.const 223128) "a") (data (i32.const 223131) "a") (data (i32.const 223134) "a") (data (i32.const 223137) "a") (data (i32.const 223140) "a") (data (i32.const 223143) "a") (data (i32.const 223146) "a") (data (i32.const 223149) "a") (data (i32.const 223152) "a") (data (i32.const 223155) "a") (data (i32.const 223158) "a") (data (i32.const 223161) "a") (data (i32.const 223164) "a") (data (i32.const 223167) "a") (data (i32.const 223170) "a") (data (i32.const 223173) "a") (data (i32.const 223176) "a") (data (i32.const 223179) "a") (data (i32.const 223182) "a") (data (i32.const 223185) "a") (data (i32.const 223188) "a") (data (i32.const 223191) "a") (data (i32.const 223194) "a") (data (i32.const 223197) "a") (data (i32.const 223200) "a") (data (i32.const 223203) "a") (data (i32.const 223206) "a") (data (i32.const 223209) "a") (data (i32.const 223212) "a") (data (i32.const 223215) "a") (data (i32.const 223218) "a") (data (i32.const 223221) "a") (data (i32.const 223224) "a") (data (i32.const 223227) "a") (data (i32.const 223230) "a") (data (i32.const 223233) "a") (data (i32.const 223236) "a") (data (i32.const 223239) "a") (data (i32.const 223242) "a") (data (i32.const 223245) "a") (data (i32.const 223248) "a") (data (i32.const 223251) "a") (data (i32.const 223254) "a") (data (i32.const 223257) "a") (data (i32.const 223260) "a") (data (i32.const 223263) "a") (data (i32.const 223266) "a") (data (i32.const 223269) "a") (data (i32.const 223272) "a") (data (i32.const 223275) "a") (data (i32.const 223278) "a") (data (i32.const 223281) "a") (data (i32.const 223284) "a") (data (i32.const 223287) "a") (data (i32.const 223290) "a") (data (i32.const 223293) "a") (data (i32.const 223296) "a") (data (i32.const 223299) "a") (data (i32.const 223302) "a") (data (i32.const 223305) "a") (data (i32.const 223308) "a") (data (i32.const 223311) "a") (data (i32.const 223314) "a") (data (i32.const 223317) "a") (data (i32.const 223320) "a") (data (i32.const 223323) "a") (data (i32.const 223326) "a") (data (i32.const 223329) "a") (data (i32.const 223332) "a") (data (i32.const 223335) "a") (data (i32.const 223338) "a") (data (i32.const 223341) "a") (data (i32.const 223344) "a") (data (i32.const 223347) "a") (data (i32.const 223350) "a") (data (i32.const 223353) "a") (data (i32.const 223356) "a") (data (i32.const 223359) "a") (data (i32.const 223362) "a") (data (i32.const 223365) "a") (data (i32.const 223368) "a") (data (i32.const 223371) "a") (data (i32.const 223374) "a") (data (i32.const 223377) "a") (data (i32.const 223380) "a") (data (i32.const 223383) "a") (data (i32.const 223386) "a") (data (i32.const 223389) "a") (data (i32.const 223392) "a") (data (i32.const 223395) "a") (data (i32.const 223398) "a") (data (i32.const 223401) "a") (data (i32.const 223404) "a") (data (i32.const 223407) "a") (data (i32.const 223410) "a") (data (i32.const 223413) "a") (data (i32.const 223416) "a") (data (i32.const 223419) "a") (data (i32.const 223422) "a") (data (i32.const 223425) "a") (data (i32.const 223428) "a") (data (i32.const 223431) "a") (data (i32.const 223434) "a") (data (i32.const 223437) "a") (data (i32.const 223440) "a") (data (i32.const 223443) "a") (data (i32.const 223446) "a") (data (i32.const 223449) "a") (data (i32.const 223452) "a") (data (i32.const 223455) "a") (data (i32.const 223458) "a") (data (i32.const 223461) "a") (data (i32.const 223464) "a") (data (i32.const 223467) "a") (data (i32.const 223470) "a") (data (i32.const 223473) "a") (data (i32.const 223476) "a") (data (i32.const 223479) "a") (data (i32.const 223482) "a") (data (i32.const 223485) "a") (data (i32.const 223488) "a") (data (i32.const 223491) "a") (data (i32.const 223494) "a") (data (i32.const 223497) "a") (data (i32.const 223500) "a") (data (i32.const 223503) "a") (data (i32.const 223506) "a") (data (i32.const 223509) "a") (data (i32.const 223512) "a") (data (i32.const 223515) "a") (data (i32.const 223518) "a") (data (i32.const 223521) "a") (data (i32.const 223524) "a") (data (i32.const 223527) "a") (data (i32.const 223530) "a") (data (i32.const 223533) "a") (data (i32.const 223536) "a") (data (i32.const 223539) "a") (data (i32.const 223542) "a") (data (i32.const 223545) "a") (data (i32.const 223548) "a") (data (i32.const 223551) "a") (data (i32.const 223554) "a") (data (i32.const 223557) "a") (data (i32.const 223560) "a") (data (i32.const 223563) "a") (data (i32.const 223566) "a") (data (i32.const 223569) "a") (data (i32.const 223572) "a") (data (i32.const 223575) "a") (data (i32.const 223578) "a") (data (i32.const 223581) "a") (data (i32.const 223584) "a") (data (i32.const 223587) "a") (data (i32.const 223590) "a") (data (i32.const 223593) "a") (data (i32.const 223596) "a") (data (i32.const 223599) "a") (data (i32.const 223602) "a") (data (i32.const 223605) "a") (data (i32.const 223608) "a") (data (i32.const 223611) "a") (data (i32.const 223614) "a") (data (i32.const 223617) "a") (data (i32.const 223620) "a") (data (i32.const 223623) "a") (data (i32.const 223626) "a") (data (i32.const 223629) "a") (data (i32.const 223632) "a") (data (i32.const 223635) "a") (data (i32.const 223638) "a") (data (i32.const 223641) "a") (data (i32.const 223644) "a") (data (i32.const 223647) "a") (data (i32.const 223650) "a") (data (i32.const 223653) "a") (data (i32.const 223656) "a") (data (i32.const 223659) "a") (data (i32.const 223662) "a") (data (i32.const 223665) "a") (data (i32.const 223668) "a") (data (i32.const 223671) "a") (data (i32.const 223674) "a") (data (i32.const 223677) "a") (data (i32.const 223680) "a") (data (i32.const 223683) "a") (data (i32.const 223686) "a") (data (i32.const 223689) "a") (data (i32.const 223692) "a") (data (i32.const 223695) "a") (data (i32.const 223698) "a") (data (i32.const 223701) "a") (data (i32.const 223704) "a") (data (i32.const 223707) "a") (data (i32.const 223710) "a") (data (i32.const 223713) "a") (data (i32.const 223716) "a") (data (i32.const 223719) "a") (data (i32.const 223722) "a") (data (i32.const 223725) "a") (data (i32.const 223728) "a") (data (i32.const 223731) "a") (data (i32.const 223734) "a") (data (i32.const 223737) "a") (data (i32.const 223740) "a") (data (i32.const 223743) "a") (data (i32.const 223746) "a") (data (i32.const 223749) "a") (data (i32.const 223752) "a") (data (i32.const 223755) "a") (data (i32.const 223758) "a") (data (i32.const 223761) "a") (data (i32.const 223764) "a") (data (i32.const 223767) "a") (data (i32.const 223770) "a") (data (i32.const 223773) "a") (data (i32.const 223776) "a") (data (i32.const 223779) "a") (data (i32.const 223782) "a") (data (i32.const 223785) "a") (data (i32.const 223788) "a") (data (i32.const 223791) "a") (data (i32.const 223794) "a") (data (i32.const 223797) "a") (data (i32.const 223800) "a") (data (i32.const 223803) "a") (data (i32.const 223806) "a") (data (i32.const 223809) "a") (data (i32.const 223812) "a") (data (i32.const 223815) "a") (data (i32.const 223818) "a") (data (i32.const 223821) "a") (data (i32.const 223824) "a") (data (i32.const 223827) "a") (data (i32.const 223830) "a") (data (i32.const 223833) "a") (data (i32.const 223836) "a") (data (i32.const 223839) "a") (data (i32.const 223842) "a") (data (i32.const 223845) "a") (data (i32.const 223848) "a") (data (i32.const 223851) "a") (data (i32.const 223854) "a") (data (i32.const 223857) "a") (data (i32.const 223860) "a") (data (i32.const 223863) "a") (data (i32.const 223866) "a") (data (i32.const 223869) "a") (data (i32.const 223872) "a") (data (i32.const 223875) "a") (data (i32.const 223878) "a") (data (i32.const 223881) "a") (data (i32.const 223884) "a") (data (i32.const 223887) "a") (data (i32.const 223890) "a") (data (i32.const 223893) "a") (data (i32.const 223896) "a") (data (i32.const 223899) "a") (data (i32.const 223902) "a") (data (i32.const 223905) "a") (data (i32.const 223908) "a") (data (i32.const 223911) "a") (data (i32.const 223914) "a") (data (i32.const 223917) "a") (data (i32.const 223920) "a") (data (i32.const 223923) "a") (data (i32.const 223926) "a") (data (i32.const 223929) "a") (data (i32.const 223932) "a") (data (i32.const 223935) "a") (data (i32.const 223938) "a") (data (i32.const 223941) "a") (data (i32.const 223944) "a") (data (i32.const 223947) "a") (data (i32.const 223950) "a") (data (i32.const 223953) "a") (data (i32.const 223956) "a") (data (i32.const 223959) "a") (data (i32.const 223962) "a") (data (i32.const 223965) "a") (data (i32.const 223968) "a") (data (i32.const 223971) "a") (data (i32.const 223974) "a") (data (i32.const 223977) "a") (data (i32.const 223980) "a") (data (i32.const 223983) "a") (data (i32.const 223986) "a") (data (i32.const 223989) "a") (data (i32.const 223992) "a") (data (i32.const 223995) "a") (data (i32.const 223998) "a") (data (i32.const 224001) "a") (data (i32.const 224004) "a") (data (i32.const 224007) "a") (data (i32.const 224010) "a") (data (i32.const 224013) "a") (data (i32.const 224016) "a") (data (i32.const 224019) "a") (data (i32.const 224022) "a") (data (i32.const 224025) "a") (data (i32.const 224028) "a") (data (i32.const 224031) "a") (data (i32.const 224034) "a") (data (i32.const 224037) "a") (data (i32.const 224040) "a") (data (i32.const 224043) "a") (data (i32.const 224046) "a") (data (i32.const 224049) "a") (data (i32.const 224052) "a") (data (i32.const 224055) "a") (data (i32.const 224058) "a") (data (i32.const 224061) "a") (data (i32.const 224064) "a") (data (i32.const 224067) "a") (data (i32.const 224070) "a") (data (i32.const 224073) "a") (data (i32.const 224076) "a") (data (i32.const 224079) "a") (data (i32.const 224082) "a") (data (i32.const 224085) "a") (data (i32.const 224088) "a") (data (i32.const 224091) "a") (data (i32.const 224094) "a") (data (i32.const 224097) "a") (data (i32.const 224100) "a") (data (i32.const 224103) "a") (data (i32.const 224106) "a") (data (i32.const 224109) "a") (data (i32.const 224112) "a") (data (i32.const 224115) "a") (data (i32.const 224118) "a") (data (i32.const 224121) "a") (data (i32.const 224124) "a") (data (i32.const 224127) "a") (data (i32.const 224130) "a") (data (i32.const 224133) "a") (data (i32.const 224136) "a") (data (i32.const 224139) "a") (data (i32.const 224142) "a") (data (i32.const 224145) "a") (data (i32.const 224148) "a") (data (i32.const 224151) "a") (data (i32.const 224154) "a") (data (i32.const 224157) "a") (data (i32.const 224160) "a") (data (i32.const 224163) "a") (data (i32.const 224166) "a") (data (i32.const 224169) "a") (data (i32.const 224172) "a") (data (i32.const 224175) "a") (data (i32.const 224178) "a") (data (i32.const 224181) "a") (data (i32.const 224184) "a") (data (i32.const 224187) "a") (data (i32.const 224190) "a") (data (i32.const 224193) "a") (data (i32.const 224196) "a") (data (i32.const 224199) "a") (data (i32.const 224202) "a") (data (i32.const 224205) "a") (data (i32.const 224208) "a") (data (i32.const 224211) "a") (data (i32.const 224214) "a") (data (i32.const 224217) "a") (data (i32.const 224220) "a") (data (i32.const 224223) "a") (data (i32.const 224226) "a") (data (i32.const 224229) "a") (data (i32.const 224232) "a") (data (i32.const 224235) "a") (data (i32.const 224238) "a") (data (i32.const 224241) "a") (data (i32.const 224244) "a") (data (i32.const 224247) "a") (data (i32.const 224250) "a") (data (i32.const 224253) "a") (data (i32.const 224256) "a") (data (i32.const 224259) "a") (data (i32.const 224262) "a") (data (i32.const 224265) "a") (data (i32.const 224268) "a") (data (i32.const 224271) "a") (data (i32.const 224274) "a") (data (i32.const 224277) "a") (data (i32.const 224280) "a") (data (i32.const 224283) "a") (data (i32.const 224286) "a") (data (i32.const 224289) "a") (data (i32.const 224292) "a") (data (i32.const 224295) "a") (data (i32.const 224298) "a") (data (i32.const 224301) "a") (data (i32.const 224304) "a") (data (i32.const 224307) "a") (data (i32.const 224310) "a") (data (i32.const 224313) "a") (data (i32.const 224316) "a") (data (i32.const 224319) "a") (data (i32.const 224322) "a") (data (i32.const 224325) "a") (data (i32.const 224328) "a") (data (i32.const 224331) "a") (data (i32.const 224334) "a") (data (i32.const 224337) "a") (data (i32.const 224340) "a") (data (i32.const 224343) "a") (data (i32.const 224346) "a") (data (i32.const 224349) "a") (data (i32.const 224352) "a") (data (i32.const 224355) "a") (data (i32.const 224358) "a") (data (i32.const 224361) "a") (data (i32.const 224364) "a") (data (i32.const 224367) "a") (data (i32.const 224370) "a") (data (i32.const 224373) "a") (data (i32.const 224376) "a") (data (i32.const 224379) "a") (data (i32.const 224382) "a") (data (i32.const 224385) "a") (data (i32.const 224388) "a") (data (i32.const 224391) "a") (data (i32.const 224394) "a") (data (i32.const 224397) "a") (data (i32.const 224400) "a") (data (i32.const 224403) "a") (data (i32.const 224406) "a") (data (i32.const 224409) "a") (data (i32.const 224412) "a") (data (i32.const 224415) "a") (data (i32.const 224418) "a") (data (i32.const 224421) "a") (data (i32.const 224424) "a") (data (i32.const 224427) "a") (data (i32.const 224430) "a") (data (i32.const 224433) "a") (data (i32.const 224436) "a") (data (i32.const 224439) "a") (data (i32.const 224442) "a") (data (i32.const 224445) "a") (data (i32.const 224448) "a") (data (i32.const 224451) "a") (data (i32.const 224454) "a") (data (i32.const 224457) "a") (data (i32.const 224460) "a") (data (i32.const 224463) "a") (data (i32.const 224466) "a") (data (i32.const 224469) "a") (data (i32.const 224472) "a") (data (i32.const 224475) "a") (data (i32.const 224478) "a") (data (i32.const 224481) "a") (data (i32.const 224484) "a") (data (i32.const 224487) "a") (data (i32.const 224490) "a") (data (i32.const 224493) "a") (data (i32.const 224496) "a") (data (i32.const 224499) "a") (data (i32.const 224502) "a") (data (i32.const 224505) "a") (data (i32.const 224508) "a") (data (i32.const 224511) "a") (data (i32.const 224514) "a") (data (i32.const 224517) "a") (data (i32.const 224520) "a") (data (i32.const 224523) "a") (data (i32.const 224526) "a") (data (i32.const 224529) "a") (data (i32.const 224532) "a") (data (i32.const 224535) "a") (data (i32.const 224538) "a") (data (i32.const 224541) "a") (data (i32.const 224544) "a") (data (i32.const 224547) "a") (data (i32.const 224550) "a") (data (i32.const 224553) "a") (data (i32.const 224556) "a") (data (i32.const 224559) "a") (data (i32.const 224562) "a") (data (i32.const 224565) "a") (data (i32.const 224568) "a") (data (i32.const 224571) "a") (data (i32.const 224574) "a") (data (i32.const 224577) "a") (data (i32.const 224580) "a") (data (i32.const 224583) "a") (data (i32.const 224586) "a") (data (i32.const 224589) "a") (data (i32.const 224592) "a") (data (i32.const 224595) "a") (data (i32.const 224598) "a") (data (i32.const 224601) "a") (data (i32.const 224604) "a") (data (i32.const 224607) "a") (data (i32.const 224610) "a") (data (i32.const 224613) "a") (data (i32.const 224616) "a") (data (i32.const 224619) "a") (data (i32.const 224622) "a") (data (i32.const 224625) "a") (data (i32.const 224628) "a") (data (i32.const 224631) "a") (data (i32.const 224634) "a") (data (i32.const 224637) "a") (data (i32.const 224640) "a") (data (i32.const 224643) "a") (data (i32.const 224646) "a") (data (i32.const 224649) "a") (data (i32.const 224652) "a") (data (i32.const 224655) "a") (data (i32.const 224658) "a") (data (i32.const 224661) "a") (data (i32.const 224664) "a") (data (i32.const 224667) "a") (data (i32.const 224670) "a") (data (i32.const 224673) "a") (data (i32.const 224676) "a") (data (i32.const 224679) "a") (data (i32.const 224682) "a") (data (i32.const 224685) "a") (data (i32.const 224688) "a") (data (i32.const 224691) "a") (data (i32.const 224694) "a") (data (i32.const 224697) "a") (data (i32.const 224700) "a") (data (i32.const 224703) "a") (data (i32.const 224706) "a") (data (i32.const 224709) "a") (data (i32.const 224712) "a") (data (i32.const 224715) "a") (data (i32.const 224718) "a") (data (i32.const 224721) "a") (data (i32.const 224724) "a") (data (i32.const 224727) "a") (data (i32.const 224730) "a") (data (i32.const 224733) "a") (data (i32.const 224736) "a") (data (i32.const 224739) "a") (data (i32.const 224742) "a") (data (i32.const 224745) "a") (data (i32.const 224748) "a") (data (i32.const 224751) "a") (data (i32.const 224754) "a") (data (i32.const 224757) "a") (data (i32.const 224760) "a") (data (i32.const 224763) "a") (data (i32.const 224766) "a") (data (i32.const 224769) "a") (data (i32.const 224772) "a") (data (i32.const 224775) "a") (data (i32.const 224778) "a") (data (i32.const 224781) "a") (data (i32.const 224784) "a") (data (i32.const 224787) "a") (data (i32.const 224790) "a") (data (i32.const 224793) "a") (data (i32.const 224796) "a") (data (i32.const 224799) "a") (data (i32.const 224802) "a") (data (i32.const 224805) "a") (data (i32.const 224808) "a") (data (i32.const 224811) "a") (data (i32.const 224814) "a") (data (i32.const 224817) "a") (data (i32.const 224820) "a") (data (i32.const 224823) "a") (data (i32.const 224826) "a") (data (i32.const 224829) "a") (data (i32.const 224832) "a") (data (i32.const 224835) "a") (data (i32.const 224838) "a") (data (i32.const 224841) "a") (data (i32.const 224844) "a") (data (i32.const 224847) "a") (data (i32.const 224850) "a") (data (i32.const 224853) "a") (data (i32.const 224856) "a") (data (i32.const 224859) "a") (data (i32.const 224862) "a") (data (i32.const 224865) "a") (data (i32.const 224868) "a") (data (i32.const 224871) "a") (data (i32.const 224874) "a") (data (i32.const 224877) "a") (data (i32.const 224880) "a") (data (i32.const 224883) "a") (data (i32.const 224886) "a") (data (i32.const 224889) "a") (data (i32.const 224892) "a") (data (i32.const 224895) "a") (data (i32.const 224898) "a") (data (i32.const 224901) "a") (data (i32.const 224904) "a") (data (i32.const 224907) "a") (data (i32.const 224910) "a") (data (i32.const 224913) "a") (data (i32.const 224916) "a") (data (i32.const 224919) "a") (data (i32.const 224922) "a") (data (i32.const 224925) "a") (data (i32.const 224928) "a") (data (i32.const 224931) "a") (data (i32.const 224934) "a") (data (i32.const 224937) "a") (data (i32.const 224940) "a") (data (i32.const 224943) "a") (data (i32.const 224946) "a") (data (i32.const 224949) "a") (data (i32.const 224952) "a") (data (i32.const 224955) "a") (data (i32.const 224958) "a") (data (i32.const 224961) "a") (data (i32.const 224964) "a") (data (i32.const 224967) "a") (data (i32.const 224970) "a") (data (i32.const 224973) "a") (data (i32.const 224976) "a") (data (i32.const 224979) "a") (data (i32.const 224982) "a") (data (i32.const 224985) "a") (data (i32.const 224988) "a") (data (i32.const 224991) "a") (data (i32.const 224994) "a") (data (i32.const 224997) "a") (data (i32.const 225000) "a") (data (i32.const 225003) "a") (data (i32.const 225006) "a") (data (i32.const 225009) "a") (data (i32.const 225012) "a") (data (i32.const 225015) "a") (data (i32.const 225018) "a") (data (i32.const 225021) "a") (data (i32.const 225024) "a") (data (i32.const 225027) "a") (data (i32.const 225030) "a") (data (i32.const 225033) "a") (data (i32.const 225036) "a") (data (i32.const 225039) "a") (data (i32.const 225042) "a") (data (i32.const 225045) "a") (data (i32.const 225048) "a") (data (i32.const 225051) "a") (data (i32.const 225054) "a") (data (i32.const 225057) "a") (data (i32.const 225060) "a") (data (i32.const 225063) "a") (data (i32.const 225066) "a") (data (i32.const 225069) "a") (data (i32.const 225072) "a") (data (i32.const 225075) "a") (data (i32.const 225078) "a") (data (i32.const 225081) "a") (data (i32.const 225084) "a") (data (i32.const 225087) "a") (data (i32.const 225090) "a") (data (i32.const 225093) "a") (data (i32.const 225096) "a") (data (i32.const 225099) "a") (data (i32.const 225102) "a") (data (i32.const 225105) "a") (data (i32.const 225108) "a") (data (i32.const 225111) "a") (data (i32.const 225114) "a") (data (i32.const 225117) "a") (data (i32.const 225120) "a") (data (i32.const 225123) "a") (data (i32.const 225126) "a") (data (i32.const 225129) "a") (data (i32.const 225132) "a") (data (i32.const 225135) "a") (data (i32.const 225138) "a") (data (i32.const 225141) "a") (data (i32.const 225144) "a") (data (i32.const 225147) "a") (data (i32.const 225150) "a") (data (i32.const 225153) "a") (data (i32.const 225156) "a") (data (i32.const 225159) "a") (data (i32.const 225162) "a") (data (i32.const 225165) "a") (data (i32.const 225168) "a") (data (i32.const 225171) "a") (data (i32.const 225174) "a") (data (i32.const 225177) "a") (data (i32.const 225180) "a") (data (i32.const 225183) "a") (data (i32.const 225186) "a") (data (i32.const 225189) "a") (data (i32.const 225192) "a") (data (i32.const 225195) "a") (data (i32.const 225198) "a") (data (i32.const 225201) "a") (data (i32.const 225204) "a") (data (i32.const 225207) "a") (data (i32.const 225210) "a") (data (i32.const 225213) "a") (data (i32.const 225216) "a") (data (i32.const 225219) "a") (data (i32.const 225222) "a") (data (i32.const 225225) "a") (data (i32.const 225228) "a") (data (i32.const 225231) "a") (data (i32.const 225234) "a") (data (i32.const 225237) "a") (data (i32.const 225240) "a") (data (i32.const 225243) "a") (data (i32.const 225246) "a") (data (i32.const 225249) "a") (data (i32.const 225252) "a") (data (i32.const 225255) "a") (data (i32.const 225258) "a") (data (i32.const 225261) "a") (data (i32.const 225264) "a") (data (i32.const 225267) "a") (data (i32.const 225270) "a") (data (i32.const 225273) "a") (data (i32.const 225276) "a") (data (i32.const 225279) "a") (data (i32.const 225282) "a") (data (i32.const 225285) "a") (data (i32.const 225288) "a") (data (i32.const 225291) "a") (data (i32.const 225294) "a") (data (i32.const 225297) "a") (data (i32.const 225300) "a") (data (i32.const 225303) "a") (data (i32.const 225306) "a") (data (i32.const 225309) "a") (data (i32.const 225312) "a") (data (i32.const 225315) "a") (data (i32.const 225318) "a") (data (i32.const 225321) "a") (data (i32.const 225324) "a") (data (i32.const 225327) "a") (data (i32.const 225330) "a") (data (i32.const 225333) "a") (data (i32.const 225336) "a") (data (i32.const 225339) "a") (data (i32.const 225342) "a") (data (i32.const 225345) "a") (data (i32.const 225348) "a") (data (i32.const 225351) "a") (data (i32.const 225354) "a") (data (i32.const 225357) "a") (data (i32.const 225360) "a") (data (i32.const 225363) "a") (data (i32.const 225366) "a") (data (i32.const 225369) "a") (data (i32.const 225372) "a") (data (i32.const 225375) "a") (data (i32.const 225378) "a") (data (i32.const 225381) "a") (data (i32.const 225384) "a") (data (i32.const 225387) "a") (data (i32.const 225390) "a") (data (i32.const 225393) "a") (data (i32.const 225396) "a") (data (i32.const 225399) "a") (data (i32.const 225402) "a") (data (i32.const 225405) "a") (data (i32.const 225408) "a") (data (i32.const 225411) "a") (data (i32.const 225414) "a") (data (i32.const 225417) "a") (data (i32.const 225420) "a") (data (i32.const 225423) "a") (data (i32.const 225426) "a") (data (i32.const 225429) "a") (data (i32.const 225432) "a") (data (i32.const 225435) "a") (data (i32.const 225438) "a") (data (i32.const 225441) "a") (data (i32.const 225444) "a") (data (i32.const 225447) "a") (data (i32.const 225450) "a") (data (i32.const 225453) "a") (data (i32.const 225456) "a") (data (i32.const 225459) "a") (data (i32.const 225462) "a") (data (i32.const 225465) "a") (data (i32.const 225468) "a") (data (i32.const 225471) "a") (data (i32.const 225474) "a") (data (i32.const 225477) "a") (data (i32.const 225480) "a") (data (i32.const 225483) "a") (data (i32.const 225486) "a") (data (i32.const 225489) "a") (data (i32.const 225492) "a") (data (i32.const 225495) "a") (data (i32.const 225498) "a") (data (i32.const 225501) "a") (data (i32.const 225504) "a") (data (i32.const 225507) "a") (data (i32.const 225510) "a") (data (i32.const 225513) "a") (data (i32.const 225516) "a") (data (i32.const 225519) "a") (data (i32.const 225522) "a") (data (i32.const 225525) "a") (data (i32.const 225528) "a") (data (i32.const 225531) "a") (data (i32.const 225534) "a") (data (i32.const 225537) "a") (data (i32.const 225540) "a") (data (i32.const 225543) "a") (data (i32.const 225546) "a") (data (i32.const 225549) "a") (data (i32.const 225552) "a") (data (i32.const 225555) "a") (data (i32.const 225558) "a") (data (i32.const 225561) "a") (data (i32.const 225564) "a") (data (i32.const 225567) "a") (data (i32.const 225570) "a") (data (i32.const 225573) "a") (data (i32.const 225576) "a") (data (i32.const 225579) "a") (data (i32.const 225582) "a") (data (i32.const 225585) "a") (data (i32.const 225588) "a") (data (i32.const 225591) "a") (data (i32.const 225594) "a") (data (i32.const 225597) "a") (data (i32.const 225600) "a") (data (i32.const 225603) "a") (data (i32.const 225606) "a") (data (i32.const 225609) "a") (data (i32.const 225612) "a") (data (i32.const 225615) "a") (data (i32.const 225618) "a") (data (i32.const 225621) "a") (data (i32.const 225624) "a") (data (i32.const 225627) "a") (data (i32.const 225630) "a") (data (i32.const 225633) "a") (data (i32.const 225636) "a") (data (i32.const 225639) "a") (data (i32.const 225642) "a") (data (i32.const 225645) "a") (data (i32.const 225648) "a") (data (i32.const 225651) "a") (data (i32.const 225654) "a") (data (i32.const 225657) "a") (data (i32.const 225660) "a") (data (i32.const 225663) "a") (data (i32.const 225666) "a") (data (i32.const 225669) "a") (data (i32.const 225672) "a") (data (i32.const 225675) "a") (data (i32.const 225678) "a") (data (i32.const 225681) "a") (data (i32.const 225684) "a") (data (i32.const 225687) "a") (data (i32.const 225690) "a") (data (i32.const 225693) "a") (data (i32.const 225696) "a") (data (i32.const 225699) "a") (data (i32.const 225702) "a") (data (i32.const 225705) "a") (data (i32.const 225708) "a") (data (i32.const 225711) "a") (data (i32.const 225714) "a") (data (i32.const 225717) "a") (data (i32.const 225720) "a") (data (i32.const 225723) "a") (data (i32.const 225726) "a") (data (i32.const 225729) "a") (data (i32.const 225732) "a") (data (i32.const 225735) "a") (data (i32.const 225738) "a") (data (i32.const 225741) "a") (data (i32.const 225744) "a") (data (i32.const 225747) "a") (data (i32.const 225750) "a") (data (i32.const 225753) "a") (data (i32.const 225756) "a") (data (i32.const 225759) "a") (data (i32.const 225762) "a") (data (i32.const 225765) "a") (data (i32.const 225768) "a") (data (i32.const 225771) "a") (data (i32.const 225774) "a") (data (i32.const 225777) "a") (data (i32.const 225780) "a") (data (i32.const 225783) "a") (data (i32.const 225786) "a") (data (i32.const 225789) "a") (data (i32.const 225792) "a") (data (i32.const 225795) "a") (data (i32.const 225798) "a") (data (i32.const 225801) "a") (data (i32.const 225804) "a") (data (i32.const 225807) "a") (data (i32.const 225810) "a") (data (i32.const 225813) "a") (data (i32.const 225816) "a") (data (i32.const 225819) "a") (data (i32.const 225822) "a") (data (i32.const 225825) "a") (data (i32.const 225828) "a") (data (i32.const 225831) "a") (data (i32.const 225834) "a") (data (i32.const 225837) "a") (data (i32.const 225840) "a") (data (i32.const 225843) "a") (data (i32.const 225846) "a") (data (i32.const 225849) "a") (data (i32.const 225852) "a") (data (i32.const 225855) "a") (data (i32.const 225858) "a") (data (i32.const 225861) "a") (data (i32.const 225864) "a") (data (i32.const 225867) "a") (data (i32.const 225870) "a") (data (i32.const 225873) "a") (data (i32.const 225876) "a") (data (i32.const 225879) "a") (data (i32.const 225882) "a") (data (i32.const 225885) "a") (data (i32.const 225888) "a") (data (i32.const 225891) "a") (data (i32.const 225894) "a") (data (i32.const 225897) "a") (data (i32.const 225900) "a") (data (i32.const 225903) "a") (data (i32.const 225906) "a") (data (i32.const 225909) "a") (data (i32.const 225912) "a") (data (i32.const 225915) "a") (data (i32.const 225918) "a") (data (i32.const 225921) "a") (data (i32.const 225924) "a") (data (i32.const 225927) "a") (data (i32.const 225930) "a") (data (i32.const 225933) "a") (data (i32.const 225936) "a") (data (i32.const 225939) "a") (data (i32.const 225942) "a") (data (i32.const 225945) "a") (data (i32.const 225948) "a") (data (i32.const 225951) "a") (data (i32.const 225954) "a") (data (i32.const 225957) "a") (data (i32.const 225960) "a") (data (i32.const 225963) "a") (data (i32.const 225966) "a") (data (i32.const 225969) "a") (data (i32.const 225972) "a") (data (i32.const 225975) "a") (data (i32.const 225978) "a") (data (i32.const 225981) "a") (data (i32.const 225984) "a") (data (i32.const 225987) "a") (data (i32.const 225990) "a") (data (i32.const 225993) "a") (data (i32.const 225996) "a") (data (i32.const 225999) "a") (data (i32.const 226002) "a") (data (i32.const 226005) "a") (data (i32.const 226008) "a") (data (i32.const 226011) "a") (data (i32.const 226014) "a") (data (i32.const 226017) "a") (data (i32.const 226020) "a") (data (i32.const 226023) "a") (data (i32.const 226026) "a") (data (i32.const 226029) "a") (data (i32.const 226032) "a") (data (i32.const 226035) "a") (data (i32.const 226038) "a") (data (i32.const 226041) "a") (data (i32.const 226044) "a") (data (i32.const 226047) "a") (data (i32.const 226050) "a") (data (i32.const 226053) "a") (data (i32.const 226056) "a") (data (i32.const 226059) "a") (data (i32.const 226062) "a") (data (i32.const 226065) "a") (data (i32.const 226068) "a") (data (i32.const 226071) "a") (data (i32.const 226074) "a") (data (i32.const 226077) "a") (data (i32.const 226080) "a") (data (i32.const 226083) "a") (data (i32.const 226086) "a") (data (i32.const 226089) "a") (data (i32.const 226092) "a") (data (i32.const 226095) "a") (data (i32.const 226098) "a") (data (i32.const 226101) "a") (data (i32.const 226104) "a") (data (i32.const 226107) "a") (data (i32.const 226110) "a") (data (i32.const 226113) "a") (data (i32.const 226116) "a") (data (i32.const 226119) "a") (data (i32.const 226122) "a") (data (i32.const 226125) "a") (data (i32.const 226128) "a") (data (i32.const 226131) "a") (data (i32.const 226134) "a") (data (i32.const 226137) "a") (data (i32.const 226140) "a") (data (i32.const 226143) "a") (data (i32.const 226146) "a") (data (i32.const 226149) "a") (data (i32.const 226152) "a") (data (i32.const 226155) "a") (data (i32.const 226158) "a") (data (i32.const 226161) "a") (data (i32.const 226164) "a") (data (i32.const 226167) "a") (data (i32.const 226170) "a") (data (i32.const 226173) "a") (data (i32.const 226176) "a") (data (i32.const 226179) "a") (data (i32.const 226182) "a") (data (i32.const 226185) "a") (data (i32.const 226188) "a") (data (i32.const 226191) "a") (data (i32.const 226194) "a") (data (i32.const 226197) "a") (data (i32.const 226200) "a") (data (i32.const 226203) "a") (data (i32.const 226206) "a") (data (i32.const 226209) "a") (data (i32.const 226212) "a") (data (i32.const 226215) "a") (data (i32.const 226218) "a") (data (i32.const 226221) "a") (data (i32.const 226224) "a") (data (i32.const 226227) "a") (data (i32.const 226230) "a") (data (i32.const 226233) "a") (data (i32.const 226236) "a") (data (i32.const 226239) "a") (data (i32.const 226242) "a") (data (i32.const 226245) "a") (data (i32.const 226248) "a") (data (i32.const 226251) "a") (data (i32.const 226254) "a") (data (i32.const 226257) "a") (data (i32.const 226260) "a") (data (i32.const 226263) "a") (data (i32.const 226266) "a") (data (i32.const 226269) "a") (data (i32.const 226272) "a") (data (i32.const 226275) "a") (data (i32.const 226278) "a") (data (i32.const 226281) "a") (data (i32.const 226284) "a") (data (i32.const 226287) "a") (data (i32.const 226290) "a") (data (i32.const 226293) "a") (data (i32.const 226296) "a") (data (i32.const 226299) "a") (data (i32.const 226302) "a") (data (i32.const 226305) "a") (data (i32.const 226308) "a") (data (i32.const 226311) "a") (data (i32.const 226314) "a") (data (i32.const 226317) "a") (data (i32.const 226320) "a") (data (i32.const 226323) "a") (data (i32.const 226326) "a") (data (i32.const 226329) "a") (data (i32.const 226332) "a") (data (i32.const 226335) "a") (data (i32.const 226338) "a") (data (i32.const 226341) "a") (data (i32.const 226344) "a") (data (i32.const 226347) "a") (data (i32.const 226350) "a") (data (i32.const 226353) "a") (data (i32.const 226356) "a") (data (i32.const 226359) "a") (data (i32.const 226362) "a") (data (i32.const 226365) "a") (data (i32.const 226368) "a") (data (i32.const 226371) "a") (data (i32.const 226374) "a") (data (i32.const 226377) "a") (data (i32.const 226380) "a") (data (i32.const 226383) "a") (data (i32.const 226386) "a") (data (i32.const 226389) "a") (data (i32.const 226392) "a") (data (i32.const 226395) "a") (data (i32.const 226398) "a") (data (i32.const 226401) "a") (data (i32.const 226404) "a") (data (i32.const 226407) "a") (data (i32.const 226410) "a") (data (i32.const 226413) "a") (data (i32.const 226416) "a") (data (i32.const 226419) "a") (data (i32.const 226422) "a") (data (i32.const 226425) "a") (data (i32.const 226428) "a") (data (i32.const 226431) "a") (data (i32.const 226434) "a") (data (i32.const 226437) "a") (data (i32.const 226440) "a") (data (i32.const 226443) "a") (data (i32.const 226446) "a") (data (i32.const 226449) "a") (data (i32.const 226452) "a") (data (i32.const 226455) "a") (data (i32.const 226458) "a") (data (i32.const 226461) "a") (data (i32.const 226464) "a") (data (i32.const 226467) "a") (data (i32.const 226470) "a") (data (i32.const 226473) "a") (data (i32.const 226476) "a") (data (i32.const 226479) "a") (data (i32.const 226482) "a") (data (i32.const 226485) "a") (data (i32.const 226488) "a") (data (i32.const 226491) "a") (data (i32.const 226494) "a") (data (i32.const 226497) "a") (data (i32.const 226500) "a") (data (i32.const 226503) "a") (data (i32.const 226506) "a") (data (i32.const 226509) "a") (data (i32.const 226512) "a") (data (i32.const 226515) "a") (data (i32.const 226518) "a") (data (i32.const 226521) "a") (data (i32.const 226524) "a") (data (i32.const 226527) "a") (data (i32.const 226530) "a") (data (i32.const 226533) "a") (data (i32.const 226536) "a") (data (i32.const 226539) "a") (data (i32.const 226542) "a") (data (i32.const 226545) "a") (data (i32.const 226548) "a") (data (i32.const 226551) "a") (data (i32.const 226554) "a") (data (i32.const 226557) "a") (data (i32.const 226560) "a") (data (i32.const 226563) "a") (data (i32.const 226566) "a") (data (i32.const 226569) "a") (data (i32.const 226572) "a") (data (i32.const 226575) "a") (data (i32.const 226578) "a") (data (i32.const 226581) "a") (data (i32.const 226584) "a") (data (i32.const 226587) "a") (data (i32.const 226590) "a") (data (i32.const 226593) "a") (data (i32.const 226596) "a") (data (i32.const 226599) "a") (data (i32.const 226602) "a") (data (i32.const 226605) "a") (data (i32.const 226608) "a") (data (i32.const 226611) "a") (data (i32.const 226614) "a") (data (i32.const 226617) "a") (data (i32.const 226620) "a") (data (i32.const 226623) "a") (data (i32.const 226626) "a") (data (i32.const 226629) "a") (data (i32.const 226632) "a") (data (i32.const 226635) "a") (data (i32.const 226638) "a") (data (i32.const 226641) "a") (data (i32.const 226644) "a") (data (i32.const 226647) "a") (data (i32.const 226650) "a") (data (i32.const 226653) "a") (data (i32.const 226656) "a") (data (i32.const 226659) "a") (data (i32.const 226662) "a") (data (i32.const 226665) "a") (data (i32.const 226668) "a") (data (i32.const 226671) "a") (data (i32.const 226674) "a") (data (i32.const 226677) "a") (data (i32.const 226680) "a") (data (i32.const 226683) "a") (data (i32.const 226686) "a") (data (i32.const 226689) "a") (data (i32.const 226692) "a") (data (i32.const 226695) "a") (data (i32.const 226698) "a") (data (i32.const 226701) "a") (data (i32.const 226704) "a") (data (i32.const 226707) "a") (data (i32.const 226710) "a") (data (i32.const 226713) "a") (data (i32.const 226716) "a") (data (i32.const 226719) "a") (data (i32.const 226722) "a") (data (i32.const 226725) "a") (data (i32.const 226728) "a") (data (i32.const 226731) "a") (data (i32.const 226734) "a") (data (i32.const 226737) "a") (data (i32.const 226740) "a") (data (i32.const 226743) "a") (data (i32.const 226746) "a") (data (i32.const 226749) "a") (data (i32.const 226752) "a") (data (i32.const 226755) "a") (data (i32.const 226758) "a") (data (i32.const 226761) "a") (data (i32.const 226764) "a") (data (i32.const 226767) "a") (data (i32.const 226770) "a") (data (i32.const 226773) "a") (data (i32.const 226776) "a") (data (i32.const 226779) "a") (data (i32.const 226782) "a") (data (i32.const 226785) "a") (data (i32.const 226788) "a") (data (i32.const 226791) "a") (data (i32.const 226794) "a") (data (i32.const 226797) "a") (data (i32.const 226800) "a") (data (i32.const 226803) "a") (data (i32.const 226806) "a") (data (i32.const 226809) "a") (data (i32.const 226812) "a") (data (i32.const 226815) "a") (data (i32.const 226818) "a") (data (i32.const 226821) "a") (data (i32.const 226824) "a") (data (i32.const 226827) "a") (data (i32.const 226830) "a") (data (i32.const 226833) "a") (data (i32.const 226836) "a") (data (i32.const 226839) "a") (data (i32.const 226842) "a") (data (i32.const 226845) "a") (data (i32.const 226848) "a") (data (i32.const 226851) "a") (data (i32.const 226854) "a") (data (i32.const 226857) "a") (data (i32.const 226860) "a") (data (i32.const 226863) "a") (data (i32.const 226866) "a") (data (i32.const 226869) "a") (data (i32.const 226872) "a") (data (i32.const 226875) "a") (data (i32.const 226878) "a") (data (i32.const 226881) "a") (data (i32.const 226884) "a") (data (i32.const 226887) "a") (data (i32.const 226890) "a") (data (i32.const 226893) "a") (data (i32.const 226896) "a") (data (i32.const 226899) "a") (data (i32.const 226902) "a") (data (i32.const 226905) "a") (data (i32.const 226908) "a") (data (i32.const 226911) "a") (data (i32.const 226914) "a") (data (i32.const 226917) "a") (data (i32.const 226920) "a") (data (i32.const 226923) "a") (data (i32.const 226926) "a") (data (i32.const 226929) "a") (data (i32.const 226932) "a") (data (i32.const 226935) "a") (data (i32.const 226938) "a") (data (i32.const 226941) "a") (data (i32.const 226944) "a") (data (i32.const 226947) "a") (data (i32.const 226950) "a") (data (i32.const 226953) "a") (data (i32.const 226956) "a") (data (i32.const 226959) "a") (data (i32.const 226962) "a") (data (i32.const 226965) "a") (data (i32.const 226968) "a") (data (i32.const 226971) "a") (data (i32.const 226974) "a") (data (i32.const 226977) "a") (data (i32.const 226980) "a") (data (i32.const 226983) "a") (data (i32.const 226986) "a") (data (i32.const 226989) "a") (data (i32.const 226992) "a") (data (i32.const 226995) "a") (data (i32.const 226998) "a") (data (i32.const 227001) "a") (data (i32.const 227004) "a") (data (i32.const 227007) "a") (data (i32.const 227010) "a") (data (i32.const 227013) "a") (data (i32.const 227016) "a") (data (i32.const 227019) "a") (data (i32.const 227022) "a") (data (i32.const 227025) "a") (data (i32.const 227028) "a") (data (i32.const 227031) "a") (data (i32.const 227034) "a") (data (i32.const 227037) "a") (data (i32.const 227040) "a") (data (i32.const 227043) "a") (data (i32.const 227046) "a") (data (i32.const 227049) "a") (data (i32.const 227052) "a") (data (i32.const 227055) "a") (data (i32.const 227058) "a") (data (i32.const 227061) "a") (data (i32.const 227064) "a") (data (i32.const 227067) "a") (data (i32.const 227070) "a") (data (i32.const 227073) "a") (data (i32.const 227076) "a") (data (i32.const 227079) "a") (data (i32.const 227082) "a") (data (i32.const 227085) "a") (data (i32.const 227088) "a") (data (i32.const 227091) "a") (data (i32.const 227094) "a") (data (i32.const 227097) "a") (data (i32.const 227100) "a") (data (i32.const 227103) "a") (data (i32.const 227106) "a") (data (i32.const 227109) "a") (data (i32.const 227112) "a") (data (i32.const 227115) "a") (data (i32.const 227118) "a") (data (i32.const 227121) "a") (data (i32.const 227124) "a") (data (i32.const 227127) "a") (data (i32.const 227130) "a") (data (i32.const 227133) "a") (data (i32.const 227136) "a") (data (i32.const 227139) "a") (data (i32.const 227142) "a") (data (i32.const 227145) "a") (data (i32.const 227148) "a") (data (i32.const 227151) "a") (data (i32.const 227154) "a") (data (i32.const 227157) "a") (data (i32.const 227160) "a") (data (i32.const 227163) "a") (data (i32.const 227166) "a") (data (i32.const 227169) "a") (data (i32.const 227172) "a") (data (i32.const 227175) "a") (data (i32.const 227178) "a") (data (i32.const 227181) "a") (data (i32.const 227184) "a") (data (i32.const 227187) "a") (data (i32.const 227190) "a") (data (i32.const 227193) "a") (data (i32.const 227196) "a") (data (i32.const 227199) "a") (data (i32.const 227202) "a") (data (i32.const 227205) "a") (data (i32.const 227208) "a") (data (i32.const 227211) "a") (data (i32.const 227214) "a") (data (i32.const 227217) "a") (data (i32.const 227220) "a") (data (i32.const 227223) "a") (data (i32.const 227226) "a") (data (i32.const 227229) "a") (data (i32.const 227232) "a") (data (i32.const 227235) "a") (data (i32.const 227238) "a") (data (i32.const 227241) "a") (data (i32.const 227244) "a") (data (i32.const 227247) "a") (data (i32.const 227250) "a") (data (i32.const 227253) "a") (data (i32.const 227256) "a") (data (i32.const 227259) "a") (data (i32.const 227262) "a") (data (i32.const 227265) "a") (data (i32.const 227268) "a") (data (i32.const 227271) "a") (data (i32.const 227274) "a") (data (i32.const 227277) "a") (data (i32.const 227280) "a") (data (i32.const 227283) "a") (data (i32.const 227286) "a") (data (i32.const 227289) "a") (data (i32.const 227292) "a") (data (i32.const 227295) "a") (data (i32.const 227298) "a") (data (i32.const 227301) "a") (data (i32.const 227304) "a") (data (i32.const 227307) "a") (data (i32.const 227310) "a") (data (i32.const 227313) "a") (data (i32.const 227316) "a") (data (i32.const 227319) "a") (data (i32.const 227322) "a") (data (i32.const 227325) "a") (data (i32.const 227328) "a") (data (i32.const 227331) "a") (data (i32.const 227334) "a") (data (i32.const 227337) "a") (data (i32.const 227340) "a") (data (i32.const 227343) "a") (data (i32.const 227346) "a") (data (i32.const 227349) "a") (data (i32.const 227352) "a") (data (i32.const 227355) "a") (data (i32.const 227358) "a") (data (i32.const 227361) "a") (data (i32.const 227364) "a") (data (i32.const 227367) "a") (data (i32.const 227370) "a") (data (i32.const 227373) "a") (data (i32.const 227376) "a") (data (i32.const 227379) "a") (data (i32.const 227382) "a") (data (i32.const 227385) "a") (data (i32.const 227388) "a") (data (i32.const 227391) "a") (data (i32.const 227394) "a") (data (i32.const 227397) "a") (data (i32.const 227400) "a") (data (i32.const 227403) "a") (data (i32.const 227406) "a") (data (i32.const 227409) "a") (data (i32.const 227412) "a") (data (i32.const 227415) "a") (data (i32.const 227418) "a") (data (i32.const 227421) "a") (data (i32.const 227424) "a") (data (i32.const 227427) "a") (data (i32.const 227430) "a") (data (i32.const 227433) "a") (data (i32.const 227436) "a") (data (i32.const 227439) "a") (data (i32.const 227442) "a") (data (i32.const 227445) "a") (data (i32.const 227448) "a") (data (i32.const 227451) "a") (data (i32.const 227454) "a") (data (i32.const 227457) "a") (data (i32.const 227460) "a") (data (i32.const 227463) "a") (data (i32.const 227466) "a") (data (i32.const 227469) "a") (data (i32.const 227472) "a") (data (i32.const 227475) "a") (data (i32.const 227478) "a") (data (i32.const 227481) "a") (data (i32.const 227484) "a") (data (i32.const 227487) "a") (data (i32.const 227490) "a") (data (i32.const 227493) "a") (data (i32.const 227496) "a") (data (i32.const 227499) "a") (data (i32.const 227502) "a") (data (i32.const 227505) "a") (data (i32.const 227508) "a") (data (i32.const 227511) "a") (data (i32.const 227514) "a") (data (i32.const 227517) "a") (data (i32.const 227520) "a") (data (i32.const 227523) "a") (data (i32.const 227526) "a") (data (i32.const 227529) "a") (data (i32.const 227532) "a") (data (i32.const 227535) "a") (data (i32.const 227538) "a") (data (i32.const 227541) "a") (data (i32.const 227544) "a") (data (i32.const 227547) "a") (data (i32.const 227550) "a") (data (i32.const 227553) "a") (data (i32.const 227556) "a") (data (i32.const 227559) "a") (data (i32.const 227562) "a") (data (i32.const 227565) "a") (data (i32.const 227568) "a") (data (i32.const 227571) "a") (data (i32.const 227574) "a") (data (i32.const 227577) "a") (data (i32.const 227580) "a") (data (i32.const 227583) "a") (data (i32.const 227586) "a") (data (i32.const 227589) "a") (data (i32.const 227592) "a") (data (i32.const 227595) "a") (data (i32.const 227598) "a") (data (i32.const 227601) "a") (data (i32.const 227604) "a") (data (i32.const 227607) "a") (data (i32.const 227610) "a") (data (i32.const 227613) "a") (data (i32.const 227616) "a") (data (i32.const 227619) "a") (data (i32.const 227622) "a") (data (i32.const 227625) "a") (data (i32.const 227628) "a") (data (i32.const 227631) "a") (data (i32.const 227634) "a") (data (i32.const 227637) "a") (data (i32.const 227640) "a") (data (i32.const 227643) "a") (data (i32.const 227646) "a") (data (i32.const 227649) "a") (data (i32.const 227652) "a") (data (i32.const 227655) "a") (data (i32.const 227658) "a") (data (i32.const 227661) "a") (data (i32.const 227664) "a") (data (i32.const 227667) "a") (data (i32.const 227670) "a") (data (i32.const 227673) "a") (data (i32.const 227676) "a") (data (i32.const 227679) "a") (data (i32.const 227682) "a") (data (i32.const 227685) "a") (data (i32.const 227688) "a") (data (i32.const 227691) "a") (data (i32.const 227694) "a") (data (i32.const 227697) "a") (data (i32.const 227700) "a") (data (i32.const 227703) "a") (data (i32.const 227706) "a") (data (i32.const 227709) "a") (data (i32.const 227712) "a") (data (i32.const 227715) "a") (data (i32.const 227718) "a") (data (i32.const 227721) "a") (data (i32.const 227724) "a") (data (i32.const 227727) "a") (data (i32.const 227730) "a") (data (i32.const 227733) "a") (data (i32.const 227736) "a") (data (i32.const 227739) "a") (data (i32.const 227742) "a") (data (i32.const 227745) "a") (data (i32.const 227748) "a") (data (i32.const 227751) "a") (data (i32.const 227754) "a") (data (i32.const 227757) "a") (data (i32.const 227760) "a") (data (i32.const 227763) "a") (data (i32.const 227766) "a") (data (i32.const 227769) "a") (data (i32.const 227772) "a") (data (i32.const 227775) "a") (data (i32.const 227778) "a") (data (i32.const 227781) "a") (data (i32.const 227784) "a") (data (i32.const 227787) "a") (data (i32.const 227790) "a") (data (i32.const 227793) "a") (data (i32.const 227796) "a") (data (i32.const 227799) "a") (data (i32.const 227802) "a") (data (i32.const 227805) "a") (data (i32.const 227808) "a") (data (i32.const 227811) "a") (data (i32.const 227814) "a") (data (i32.const 227817) "a") (data (i32.const 227820) "a") (data (i32.const 227823) "a") (data (i32.const 227826) "a") (data (i32.const 227829) "a") (data (i32.const 227832) "a") (data (i32.const 227835) "a") (data (i32.const 227838) "a") (data (i32.const 227841) "a") (data (i32.const 227844) "a") (data (i32.const 227847) "a") (data (i32.const 227850) "a") (data (i32.const 227853) "a") (data (i32.const 227856) "a") (data (i32.const 227859) "a") (data (i32.const 227862) "a") (data (i32.const 227865) "a") (data (i32.const 227868) "a") (data (i32.const 227871) "a") (data (i32.const 227874) "a") (data (i32.const 227877) "a") (data (i32.const 227880) "a") (data (i32.const 227883) "a") (data (i32.const 227886) "a") (data (i32.const 227889) "a") (data (i32.const 227892) "a") (data (i32.const 227895) "a") (data (i32.const 227898) "a") (data (i32.const 227901) "a") (data (i32.const 227904) "a") (data (i32.const 227907) "a") (data (i32.const 227910) "a") (data (i32.const 227913) "a") (data (i32.const 227916) "a") (data (i32.const 227919) "a") (data (i32.const 227922) "a") (data (i32.const 227925) "a") (data (i32.const 227928) "a") (data (i32.const 227931) "a") (data (i32.const 227934) "a") (data (i32.const 227937) "a") (data (i32.const 227940) "a") (data (i32.const 227943) "a") (data (i32.const 227946) "a") (data (i32.const 227949) "a") (data (i32.const 227952) "a") (data (i32.const 227955) "a") (data (i32.const 227958) "a") (data (i32.const 227961) "a") (data (i32.const 227964) "a") (data (i32.const 227967) "a") (data (i32.const 227970) "a") (data (i32.const 227973) "a") (data (i32.const 227976) "a") (data (i32.const 227979) "a") (data (i32.const 227982) "a") (data (i32.const 227985) "a") (data (i32.const 227988) "a") (data (i32.const 227991) "a") (data (i32.const 227994) "a") (data (i32.const 227997) "a") (data (i32.const 228000) "a") (data (i32.const 228003) "a") (data (i32.const 228006) "a") (data (i32.const 228009) "a") (data (i32.const 228012) "a") (data (i32.const 228015) "a") (data (i32.const 228018) "a") (data (i32.const 228021) "a") (data (i32.const 228024) "a") (data (i32.const 228027) "a") (data (i32.const 228030) "a") (data (i32.const 228033) "a") (data (i32.const 228036) "a") (data (i32.const 228039) "a") (data (i32.const 228042) "a") (data (i32.const 228045) "a") (data (i32.const 228048) "a") (data (i32.const 228051) "a") (data (i32.const 228054) "a") (data (i32.const 228057) "a") (data (i32.const 228060) "a") (data (i32.const 228063) "a") (data (i32.const 228066) "a") (data (i32.const 228069) "a") (data (i32.const 228072) "a") (data (i32.const 228075) "a") (data (i32.const 228078) "a") (data (i32.const 228081) "a") (data (i32.const 228084) "a") (data (i32.const 228087) "a") (data (i32.const 228090) "a") (data (i32.const 228093) "a") (data (i32.const 228096) "a") (data (i32.const 228099) "a") (data (i32.const 228102) "a") (data (i32.const 228105) "a") (data (i32.const 228108) "a") (data (i32.const 228111) "a") (data (i32.const 228114) "a") (data (i32.const 228117) "a") (data (i32.const 228120) "a") (data (i32.const 228123) "a") (data (i32.const 228126) "a") (data (i32.const 228129) "a") (data (i32.const 228132) "a") (data (i32.const 228135) "a") (data (i32.const 228138) "a") (data (i32.const 228141) "a") (data (i32.const 228144) "a") (data (i32.const 228147) "a") (data (i32.const 228150) "a") (data (i32.const 228153) "a") (data (i32.const 228156) "a") (data (i32.const 228159) "a") (data (i32.const 228162) "a") (data (i32.const 228165) "a") (data (i32.const 228168) "a") (data (i32.const 228171) "a") (data (i32.const 228174) "a") (data (i32.const 228177) "a") (data (i32.const 228180) "a") (data (i32.const 228183) "a") (data (i32.const 228186) "a") (data (i32.const 228189) "a") (data (i32.const 228192) "a") (data (i32.const 228195) "a") (data (i32.const 228198) "a") (data (i32.const 228201) "a") (data (i32.const 228204) "a") (data (i32.const 228207) "a") (data (i32.const 228210) "a") (data (i32.const 228213) "a") (data (i32.const 228216) "a") (data (i32.const 228219) "a") (data (i32.const 228222) "a") (data (i32.const 228225) "a") (data (i32.const 228228) "a") (data (i32.const 228231) "a") (data (i32.const 228234) "a") (data (i32.const 228237) "a") (data (i32.const 228240) "a") (data (i32.const 228243) "a") (data (i32.const 228246) "a") (data (i32.const 228249) "a") (data (i32.const 228252) "a") (data (i32.const 228255) "a") (data (i32.const 228258) "a") (data (i32.const 228261) "a") (data (i32.const 228264) "a") (data (i32.const 228267) "a") (data (i32.const 228270) "a") (data (i32.const 228273) "a") (data (i32.const 228276) "a") (data (i32.const 228279) "a") (data (i32.const 228282) "a") (data (i32.const 228285) "a") (data (i32.const 228288) "a") (data (i32.const 228291) "a") (data (i32.const 228294) "a") (data (i32.const 228297) "a") (data (i32.const 228300) "a") (data (i32.const 228303) "a") (data (i32.const 228306) "a") (data (i32.const 228309) "a") (data (i32.const 228312) "a") (data (i32.const 228315) "a") (data (i32.const 228318) "a") (data (i32.const 228321) "a") (data (i32.const 228324) "a") (data (i32.const 228327) "a") (data (i32.const 228330) "a") (data (i32.const 228333) "a") (data (i32.const 228336) "a") (data (i32.const 228339) "a") (data (i32.const 228342) "a") (data (i32.const 228345) "a") (data (i32.const 228348) "a") (data (i32.const 228351) "a") (data (i32.const 228354) "a") (data (i32.const 228357) "a") (data (i32.const 228360) "a") (data (i32.const 228363) "a") (data (i32.const 228366) "a") (data (i32.const 228369) "a") (data (i32.const 228372) "a") (data (i32.const 228375) "a") (data (i32.const 228378) "a") (data (i32.const 228381) "a") (data (i32.const 228384) "a") (data (i32.const 228387) "a") (data (i32.const 228390) "a") (data (i32.const 228393) "a") (data (i32.const 228396) "a") (data (i32.const 228399) "a") (data (i32.const 228402) "a") (data (i32.const 228405) "a") (data (i32.const 228408) "a") (data (i32.const 228411) "a") (data (i32.const 228414) "a") (data (i32.const 228417) "a") (data (i32.const 228420) "a") (data (i32.const 228423) "a") (data (i32.const 228426) "a") (data (i32.const 228429) "a") (data (i32.const 228432) "a") (data (i32.const 228435) "a") (data (i32.const 228438) "a") (data (i32.const 228441) "a") (data (i32.const 228444) "a") (data (i32.const 228447) "a") (data (i32.const 228450) "a") (data (i32.const 228453) "a") (data (i32.const 228456) "a") (data (i32.const 228459) "a") (data (i32.const 228462) "a") (data (i32.const 228465) "a") (data (i32.const 228468) "a") (data (i32.const 228471) "a") (data (i32.const 228474) "a") (data (i32.const 228477) "a") (data (i32.const 228480) "a") (data (i32.const 228483) "a") (data (i32.const 228486) "a") (data (i32.const 228489) "a") (data (i32.const 228492) "a") (data (i32.const 228495) "a") (data (i32.const 228498) "a") (data (i32.const 228501) "a") (data (i32.const 228504) "a") (data (i32.const 228507) "a") (data (i32.const 228510) "a") (data (i32.const 228513) "a") (data (i32.const 228516) "a") (data (i32.const 228519) "a") (data (i32.const 228522) "a") (data (i32.const 228525) "a") (data (i32.const 228528) "a") (data (i32.const 228531) "a") (data (i32.const 228534) "a") (data (i32.const 228537) "a") (data (i32.const 228540) "a") (data (i32.const 228543) "a") (data (i32.const 228546) "a") (data (i32.const 228549) "a") (data (i32.const 228552) "a") (data (i32.const 228555) "a") (data (i32.const 228558) "a") (data (i32.const 228561) "a") (data (i32.const 228564) "a") (data (i32.const 228567) "a") (data (i32.const 228570) "a") (data (i32.const 228573) "a") (data (i32.const 228576) "a") (data (i32.const 228579) "a") (data (i32.const 228582) "a") (data (i32.const 228585) "a") (data (i32.const 228588) "a") (data (i32.const 228591) "a") (data (i32.const 228594) "a") (data (i32.const 228597) "a") (data (i32.const 228600) "a") (data (i32.const 228603) "a") (data (i32.const 228606) "a") (data (i32.const 228609) "a") (data (i32.const 228612) "a") (data (i32.const 228615) "a") (data (i32.const 228618) "a") (data (i32.const 228621) "a") (data (i32.const 228624) "a") (data (i32.const 228627) "a") (data (i32.const 228630) "a") (data (i32.const 228633) "a") (data (i32.const 228636) "a") (data (i32.const 228639) "a") (data (i32.const 228642) "a") (data (i32.const 228645) "a") (data (i32.const 228648) "a") (data (i32.const 228651) "a") (data (i32.const 228654) "a") (data (i32.const 228657) "a") (data (i32.const 228660) "a") (data (i32.const 228663) "a") (data (i32.const 228666) "a") (data (i32.const 228669) "a") (data (i32.const 228672) "a") (data (i32.const 228675) "a") (data (i32.const 228678) "a") (data (i32.const 228681) "a") (data (i32.const 228684) "a") (data (i32.const 228687) "a") (data (i32.const 228690) "a") (data (i32.const 228693) "a") (data (i32.const 228696) "a") (data (i32.const 228699) "a") (data (i32.const 228702) "a") (data (i32.const 228705) "a") (data (i32.const 228708) "a") (data (i32.const 228711) "a") (data (i32.const 228714) "a") (data (i32.const 228717) "a") (data (i32.const 228720) "a") (data (i32.const 228723) "a") (data (i32.const 228726) "a") (data (i32.const 228729) "a") (data (i32.const 228732) "a") (data (i32.const 228735) "a") (data (i32.const 228738) "a") (data (i32.const 228741) "a") (data (i32.const 228744) "a") (data (i32.const 228747) "a") (data (i32.const 228750) "a") (data (i32.const 228753) "a") (data (i32.const 228756) "a") (data (i32.const 228759) "a") (data (i32.const 228762) "a") (data (i32.const 228765) "a") (data (i32.const 228768) "a") (data (i32.const 228771) "a") (data (i32.const 228774) "a") (data (i32.const 228777) "a") (data (i32.const 228780) "a") (data (i32.const 228783) "a") (data (i32.const 228786) "a") (data (i32.const 228789) "a") (data (i32.const 228792) "a") (data (i32.const 228795) "a") (data (i32.const 228798) "a") (data (i32.const 228801) "a") (data (i32.const 228804) "a") (data (i32.const 228807) "a") (data (i32.const 228810) "a") (data (i32.const 228813) "a") (data (i32.const 228816) "a") (data (i32.const 228819) "a") (data (i32.const 228822) "a") (data (i32.const 228825) "a") (data (i32.const 228828) "a") (data (i32.const 228831) "a") (data (i32.const 228834) "a") (data (i32.const 228837) "a") (data (i32.const 228840) "a") (data (i32.const 228843) "a") (data (i32.const 228846) "a") (data (i32.const 228849) "a") (data (i32.const 228852) "a") (data (i32.const 228855) "a") (data (i32.const 228858) "a") (data (i32.const 228861) "a") (data (i32.const 228864) "a") (data (i32.const 228867) "a") (data (i32.const 228870) "a") (data (i32.const 228873) "a") (data (i32.const 228876) "a") (data (i32.const 228879) "a") (data (i32.const 228882) "a") (data (i32.const 228885) "a") (data (i32.const 228888) "a") (data (i32.const 228891) "a") (data (i32.const 228894) "a") (data (i32.const 228897) "a") (data (i32.const 228900) "a") (data (i32.const 228903) "a") (data (i32.const 228906) "a") (data (i32.const 228909) "a") (data (i32.const 228912) "a") (data (i32.const 228915) "a") (data (i32.const 228918) "a") (data (i32.const 228921) "a") (data (i32.const 228924) "a") (data (i32.const 228927) "a") (data (i32.const 228930) "a") (data (i32.const 228933) "a") (data (i32.const 228936) "a") (data (i32.const 228939) "a") (data (i32.const 228942) "a") (data (i32.const 228945) "a") (data (i32.const 228948) "a") (data (i32.const 228951) "a") (data (i32.const 228954) "a") (data (i32.const 228957) "a") (data (i32.const 228960) "a") (data (i32.const 228963) "a") (data (i32.const 228966) "a") (data (i32.const 228969) "a") (data (i32.const 228972) "a") (data (i32.const 228975) "a") (data (i32.const 228978) "a") (data (i32.const 228981) "a") (data (i32.const 228984) "a") (data (i32.const 228987) "a") (data (i32.const 228990) "a") (data (i32.const 228993) "a") (data (i32.const 228996) "a") (data (i32.const 228999) "a") (data (i32.const 229002) "a") (data (i32.const 229005) "a") (data (i32.const 229008) "a") (data (i32.const 229011) "a") (data (i32.const 229014) "a") (data (i32.const 229017) "a") (data (i32.const 229020) "a") (data (i32.const 229023) "a") (data (i32.const 229026) "a") (data (i32.const 229029) "a") (data (i32.const 229032) "a") (data (i32.const 229035) "a") (data (i32.const 229038) "a") (data (i32.const 229041) "a") (data (i32.const 229044) "a") (data (i32.const 229047) "a") (data (i32.const 229050) "a") (data (i32.const 229053) "a") (data (i32.const 229056) "a") (data (i32.const 229059) "a") (data (i32.const 229062) "a") (data (i32.const 229065) "a") (data (i32.const 229068) "a") (data (i32.const 229071) "a") (data (i32.const 229074) "a") (data (i32.const 229077) "a") (data (i32.const 229080) "a") (data (i32.const 229083) "a") (data (i32.const 229086) "a") (data (i32.const 229089) "a") (data (i32.const 229092) "a") (data (i32.const 229095) "a") (data (i32.const 229098) "a") (data (i32.const 229101) "a") (data (i32.const 229104) "a") (data (i32.const 229107) "a") (data (i32.const 229110) "a") (data (i32.const 229113) "a") (data (i32.const 229116) "a") (data (i32.const 229119) "a") (data (i32.const 229122) "a") (data (i32.const 229125) "a") (data (i32.const 229128) "a") (data (i32.const 229131) "a") (data (i32.const 229134) "a") (data (i32.const 229137) "a") (data (i32.const 229140) "a") (data (i32.const 229143) "a") (data (i32.const 229146) "a") (data (i32.const 229149) "a") (data (i32.const 229152) "a") (data (i32.const 229155) "a") (data (i32.const 229158) "a") (data (i32.const 229161) "a") (data (i32.const 229164) "a") (data (i32.const 229167) "a") (data (i32.const 229170) "a") (data (i32.const 229173) "a") (data (i32.const 229176) "a") (data (i32.const 229179) "a") (data (i32.const 229182) "a") (data (i32.const 229185) "a") (data (i32.const 229188) "a") (data (i32.const 229191) "a") (data (i32.const 229194) "a") (data (i32.const 229197) "a") (data (i32.const 229200) "a") (data (i32.const 229203) "a") (data (i32.const 229206) "a") (data (i32.const 229209) "a") (data (i32.const 229212) "a") (data (i32.const 229215) "a") (data (i32.const 229218) "a") (data (i32.const 229221) "a") (data (i32.const 229224) "a") (data (i32.const 229227) "a") (data (i32.const 229230) "a") (data (i32.const 229233) "a") (data (i32.const 229236) "a") (data (i32.const 229239) "a") (data (i32.const 229242) "a") (data (i32.const 229245) "a") (data (i32.const 229248) "a") (data (i32.const 229251) "a") (data (i32.const 229254) "a") (data (i32.const 229257) "a") (data (i32.const 229260) "a") (data (i32.const 229263) "a") (data (i32.const 229266) "a") (data (i32.const 229269) "a") (data (i32.const 229272) "a") (data (i32.const 229275) "a") (data (i32.const 229278) "a") (data (i32.const 229281) "a") (data (i32.const 229284) "a") (data (i32.const 229287) "a") (data (i32.const 229290) "a") (data (i32.const 229293) "a") (data (i32.const 229296) "a") (data (i32.const 229299) "a") (data (i32.const 229302) "a") (data (i32.const 229305) "a") (data (i32.const 229308) "a") (data (i32.const 229311) "a") (data (i32.const 229314) "a") (data (i32.const 229317) "a") (data (i32.const 229320) "a") (data (i32.const 229323) "a") (data (i32.const 229326) "a") (data (i32.const 229329) "a") (data (i32.const 229332) "a") (data (i32.const 229335) "a") (data (i32.const 229338) "a") (data (i32.const 229341) "a") (data (i32.const 229344) "a") (data (i32.const 229347) "a") (data (i32.const 229350) "a") (data (i32.const 229353) "a") (data (i32.const 229356) "a") (data (i32.const 229359) "a") (data (i32.const 229362) "a") (data (i32.const 229365) "a") (data (i32.const 229368) "a") (data (i32.const 229371) "a") (data (i32.const 229374) "a") (data (i32.const 229377) "a") (data (i32.const 229380) "a") (data (i32.const 229383) "a") (data (i32.const 229386) "a") (data (i32.const 229389) "a") (data (i32.const 229392) "a") (data (i32.const 229395) "a") (data (i32.const 229398) "a") (data (i32.const 229401) "a") (data (i32.const 229404) "a") (data (i32.const 229407) "a") (data (i32.const 229410) "a") (data (i32.const 229413) "a") (data (i32.const 229416) "a") (data (i32.const 229419) "a") (data (i32.const 229422) "a") (data (i32.const 229425) "a") (data (i32.const 229428) "a") (data (i32.const 229431) "a") (data (i32.const 229434) "a") (data (i32.const 229437) "a") (data (i32.const 229440) "a") (data (i32.const 229443) "a") (data (i32.const 229446) "a") (data (i32.const 229449) "a") (data (i32.const 229452) "a") (data (i32.const 229455) "a") (data (i32.const 229458) "a") (data (i32.const 229461) "a") (data (i32.const 229464) "a") (data (i32.const 229467) "a") (data (i32.const 229470) "a") (data (i32.const 229473) "a") (data (i32.const 229476) "a") (data (i32.const 229479) "a") (data (i32.const 229482) "a") (data (i32.const 229485) "a") (data (i32.const 229488) "a") (data (i32.const 229491) "a") (data (i32.const 229494) "a") (data (i32.const 229497) "a") (data (i32.const 229500) "a") (data (i32.const 229503) "a") (data (i32.const 229506) "a") (data (i32.const 229509) "a") (data (i32.const 229512) "a") (data (i32.const 229515) "a") (data (i32.const 229518) "a") (data (i32.const 229521) "a") (data (i32.const 229524) "a") (data (i32.const 229527) "a") (data (i32.const 229530) "a") (data (i32.const 229533) "a") (data (i32.const 229536) "a") (data (i32.const 229539) "a") (data (i32.const 229542) "a") (data (i32.const 229545) "a") (data (i32.const 229548) "a") (data (i32.const 229551) "a") (data (i32.const 229554) "a") (data (i32.const 229557) "a") (data (i32.const 229560) "a") (data (i32.const 229563) "a") (data (i32.const 229566) "a") (data (i32.const 229569) "a") (data (i32.const 229572) "a") (data (i32.const 229575) "a") (data (i32.const 229578) "a") (data (i32.const 229581) "a") (data (i32.const 229584) "a") (data (i32.const 229587) "a") (data (i32.const 229590) "a") (data (i32.const 229593) "a") (data (i32.const 229596) "a") (data (i32.const 229599) "a") (data (i32.const 229602) "a") (data (i32.const 229605) "a") (data (i32.const 229608) "a") (data (i32.const 229611) "a") (data (i32.const 229614) "a") (data (i32.const 229617) "a") (data (i32.const 229620) "a") (data (i32.const 229623) "a") (data (i32.const 229626) "a") (data (i32.const 229629) "a") (data (i32.const 229632) "a") (data (i32.const 229635) "a") (data (i32.const 229638) "a") (data (i32.const 229641) "a") (data (i32.const 229644) "a") (data (i32.const 229647) "a") (data (i32.const 229650) "a") (data (i32.const 229653) "a") (data (i32.const 229656) "a") (data (i32.const 229659) "a") (data (i32.const 229662) "a") (data (i32.const 229665) "a") (data (i32.const 229668) "a") (data (i32.const 229671) "a") (data (i32.const 229674) "a") (data (i32.const 229677) "a") (data (i32.const 229680) "a") (data (i32.const 229683) "a") (data (i32.const 229686) "a") (data (i32.const 229689) "a") (data (i32.const 229692) "a") (data (i32.const 229695) "a") (data (i32.const 229698) "a") (data (i32.const 229701) "a") (data (i32.const 229704) "a") (data (i32.const 229707) "a") (data (i32.const 229710) "a") (data (i32.const 229713) "a") (data (i32.const 229716) "a") (data (i32.const 229719) "a") (data (i32.const 229722) "a") (data (i32.const 229725) "a") (data (i32.const 229728) "a") (data (i32.const 229731) "a") (data (i32.const 229734) "a") (data (i32.const 229737) "a") (data (i32.const 229740) "a") (data (i32.const 229743) "a") (data (i32.const 229746) "a") (data (i32.const 229749) "a") (data (i32.const 229752) "a") (data (i32.const 229755) "a") (data (i32.const 229758) "a") (data (i32.const 229761) "a") (data (i32.const 229764) "a") (data (i32.const 229767) "a") (data (i32.const 229770) "a") (data (i32.const 229773) "a") (data (i32.const 229776) "a") (data (i32.const 229779) "a") (data (i32.const 229782) "a") (data (i32.const 229785) "a") (data (i32.const 229788) "a") (data (i32.const 229791) "a") (data (i32.const 229794) "a") (data (i32.const 229797) "a") (data (i32.const 229800) "a") (data (i32.const 229803) "a") (data (i32.const 229806) "a") (data (i32.const 229809) "a") (data (i32.const 229812) "a") (data (i32.const 229815) "a") (data (i32.const 229818) "a") (data (i32.const 229821) "a") (data (i32.const 229824) "a") (data (i32.const 229827) "a") (data (i32.const 229830) "a") (data (i32.const 229833) "a") (data (i32.const 229836) "a") (data (i32.const 229839) "a") (data (i32.const 229842) "a") (data (i32.const 229845) "a") (data (i32.const 229848) "a") (data (i32.const 229851) "a") (data (i32.const 229854) "a") (data (i32.const 229857) "a") (data (i32.const 229860) "a") (data (i32.const 229863) "a") (data (i32.const 229866) "a") (data (i32.const 229869) "a") (data (i32.const 229872) "a") (data (i32.const 229875) "a") (data (i32.const 229878) "a") (data (i32.const 229881) "a") (data (i32.const 229884) "a") (data (i32.const 229887) "a") (data (i32.const 229890) "a") (data (i32.const 229893) "a") (data (i32.const 229896) "a") (data (i32.const 229899) "a") (data (i32.const 229902) "a") (data (i32.const 229905) "a") (data (i32.const 229908) "a") (data (i32.const 229911) "a") (data (i32.const 229914) "a") (data (i32.const 229917) "a") (data (i32.const 229920) "a") (data (i32.const 229923) "a") (data (i32.const 229926) "a") (data (i32.const 229929) "a") (data (i32.const 229932) "a") (data (i32.const 229935) "a") (data (i32.const 229938) "a") (data (i32.const 229941) "a") (data (i32.const 229944) "a") (data (i32.const 229947) "a") (data (i32.const 229950) "a") (data (i32.const 229953) "a") (data (i32.const 229956) "a") (data (i32.const 229959) "a") (data (i32.const 229962) "a") (data (i32.const 229965) "a") (data (i32.const 229968) "a") (data (i32.const 229971) "a") (data (i32.const 229974) "a") (data (i32.const 229977) "a") (data (i32.const 229980) "a") (data (i32.const 229983) "a") (data (i32.const 229986) "a") (data (i32.const 229989) "a") (data (i32.const 229992) "a") (data (i32.const 229995) "a") (data (i32.const 229998) "a") (data (i32.const 230001) "a") (data (i32.const 230004) "a") (data (i32.const 230007) "a") (data (i32.const 230010) "a") (data (i32.const 230013) "a") (data (i32.const 230016) "a") (data (i32.const 230019) "a") (data (i32.const 230022) "a") (data (i32.const 230025) "a") (data (i32.const 230028) "a") (data (i32.const 230031) "a") (data (i32.const 230034) "a") (data (i32.const 230037) "a") (data (i32.const 230040) "a") (data (i32.const 230043) "a") (data (i32.const 230046) "a") (data (i32.const 230049) "a") (data (i32.const 230052) "a") (data (i32.const 230055) "a") (data (i32.const 230058) "a") (data (i32.const 230061) "a") (data (i32.const 230064) "a") (data (i32.const 230067) "a") (data (i32.const 230070) "a") (data (i32.const 230073) "a") (data (i32.const 230076) "a") (data (i32.const 230079) "a") (data (i32.const 230082) "a") (data (i32.const 230085) "a") (data (i32.const 230088) "a") (data (i32.const 230091) "a") (data (i32.const 230094) "a") (data (i32.const 230097) "a") (data (i32.const 230100) "a") (data (i32.const 230103) "a") (data (i32.const 230106) "a") (data (i32.const 230109) "a") (data (i32.const 230112) "a") (data (i32.const 230115) "a") (data (i32.const 230118) "a") (data (i32.const 230121) "a") (data (i32.const 230124) "a") (data (i32.const 230127) "a") (data (i32.const 230130) "a") (data (i32.const 230133) "a") (data (i32.const 230136) "a") (data (i32.const 230139) "a") (data (i32.const 230142) "a") (data (i32.const 230145) "a") (data (i32.const 230148) "a") (data (i32.const 230151) "a") (data (i32.const 230154) "a") (data (i32.const 230157) "a") (data (i32.const 230160) "a") (data (i32.const 230163) "a") (data (i32.const 230166) "a") (data (i32.const 230169) "a") (data (i32.const 230172) "a") (data (i32.const 230175) "a") (data (i32.const 230178) "a") (data (i32.const 230181) "a") (data (i32.const 230184) "a") (data (i32.const 230187) "a") (data (i32.const 230190) "a") (data (i32.const 230193) "a") (data (i32.const 230196) "a") (data (i32.const 230199) "a") (data (i32.const 230202) "a") (data (i32.const 230205) "a") (data (i32.const 230208) "a") (data (i32.const 230211) "a") (data (i32.const 230214) "a") (data (i32.const 230217) "a") (data (i32.const 230220) "a") (data (i32.const 230223) "a") (data (i32.const 230226) "a") (data (i32.const 230229) "a") (data (i32.const 230232) "a") (data (i32.const 230235) "a") (data (i32.const 230238) "a") (data (i32.const 230241) "a") (data (i32.const 230244) "a") (data (i32.const 230247) "a") (data (i32.const 230250) "a") (data (i32.const 230253) "a") (data (i32.const 230256) "a") (data (i32.const 230259) "a") (data (i32.const 230262) "a") (data (i32.const 230265) "a") (data (i32.const 230268) "a") (data (i32.const 230271) "a") (data (i32.const 230274) "a") (data (i32.const 230277) "a") (data (i32.const 230280) "a") (data (i32.const 230283) "a") (data (i32.const 230286) "a") (data (i32.const 230289) "a") (data (i32.const 230292) "a") (data (i32.const 230295) "a") (data (i32.const 230298) "a") (data (i32.const 230301) "a") (data (i32.const 230304) "a") (data (i32.const 230307) "a") (data (i32.const 230310) "a") (data (i32.const 230313) "a") (data (i32.const 230316) "a") (data (i32.const 230319) "a") (data (i32.const 230322) "a") (data (i32.const 230325) "a") (data (i32.const 230328) "a") (data (i32.const 230331) "a") (data (i32.const 230334) "a") (data (i32.const 230337) "a") (data (i32.const 230340) "a") (data (i32.const 230343) "a") (data (i32.const 230346) "a") (data (i32.const 230349) "a") (data (i32.const 230352) "a") (data (i32.const 230355) "a") (data (i32.const 230358) "a") (data (i32.const 230361) "a") (data (i32.const 230364) "a") (data (i32.const 230367) "a") (data (i32.const 230370) "a") (data (i32.const 230373) "a") (data (i32.const 230376) "a") (data (i32.const 230379) "a") (data (i32.const 230382) "a") (data (i32.const 230385) "a") (data (i32.const 230388) "a") (data (i32.const 230391) "a") (data (i32.const 230394) "a") (data (i32.const 230397) "a") (data (i32.const 230400) "a") (data (i32.const 230403) "a") (data (i32.const 230406) "a") (data (i32.const 230409) "a") (data (i32.const 230412) "a") (data (i32.const 230415) "a") (data (i32.const 230418) "a") (data (i32.const 230421) "a") (data (i32.const 230424) "a") (data (i32.const 230427) "a") (data (i32.const 230430) "a") (data (i32.const 230433) "a") (data (i32.const 230436) "a") (data (i32.const 230439) "a") (data (i32.const 230442) "a") (data (i32.const 230445) "a") (data (i32.const 230448) "a") (data (i32.const 230451) "a") (data (i32.const 230454) "a") (data (i32.const 230457) "a") (data (i32.const 230460) "a") (data (i32.const 230463) "a") (data (i32.const 230466) "a") (data (i32.const 230469) "a") (data (i32.const 230472) "a") (data (i32.const 230475) "a") (data (i32.const 230478) "a") (data (i32.const 230481) "a") (data (i32.const 230484) "a") (data (i32.const 230487) "a") (data (i32.const 230490) "a") (data (i32.const 230493) "a") (data (i32.const 230496) "a") (data (i32.const 230499) "a") (data (i32.const 230502) "a") (data (i32.const 230505) "a") (data (i32.const 230508) "a") (data (i32.const 230511) "a") (data (i32.const 230514) "a") (data (i32.const 230517) "a") (data (i32.const 230520) "a") (data (i32.const 230523) "a") (data (i32.const 230526) "a") (data (i32.const 230529) "a") (data (i32.const 230532) "a") (data (i32.const 230535) "a") (data (i32.const 230538) "a") (data (i32.const 230541) "a") (data (i32.const 230544) "a") (data (i32.const 230547) "a") (data (i32.const 230550) "a") (data (i32.const 230553) "a") (data (i32.const 230556) "a") (data (i32.const 230559) "a") (data (i32.const 230562) "a") (data (i32.const 230565) "a") (data (i32.const 230568) "a") (data (i32.const 230571) "a") (data (i32.const 230574) "a") (data (i32.const 230577) "a") (data (i32.const 230580) "a") (data (i32.const 230583) "a") (data (i32.const 230586) "a") (data (i32.const 230589) "a") (data (i32.const 230592) "a") (data (i32.const 230595) "a") (data (i32.const 230598) "a") (data (i32.const 230601) "a") (data (i32.const 230604) "a") (data (i32.const 230607) "a") (data (i32.const 230610) "a") (data (i32.const 230613) "a") (data (i32.const 230616) "a") (data (i32.const 230619) "a") (data (i32.const 230622) "a") (data (i32.const 230625) "a") (data (i32.const 230628) "a") (data (i32.const 230631) "a") (data (i32.const 230634) "a") (data (i32.const 230637) "a") (data (i32.const 230640) "a") (data (i32.const 230643) "a") (data (i32.const 230646) "a") (data (i32.const 230649) "a") (data (i32.const 230652) "a") (data (i32.const 230655) "a") (data (i32.const 230658) "a") (data (i32.const 230661) "a") (data (i32.const 230664) "a") (data (i32.const 230667) "a") (data (i32.const 230670) "a") (data (i32.const 230673) "a") (data (i32.const 230676) "a") (data (i32.const 230679) "a") (data (i32.const 230682) "a") (data (i32.const 230685) "a") (data (i32.const 230688) "a") (data (i32.const 230691) "a") (data (i32.const 230694) "a") (data (i32.const 230697) "a") (data (i32.const 230700) "a") (data (i32.const 230703) "a") (data (i32.const 230706) "a") (data (i32.const 230709) "a") (data (i32.const 230712) "a") (data (i32.const 230715) "a") (data (i32.const 230718) "a") (data (i32.const 230721) "a") (data (i32.const 230724) "a") (data (i32.const 230727) "a") (data (i32.const 230730) "a") (data (i32.const 230733) "a") (data (i32.const 230736) "a") (data (i32.const 230739) "a") (data (i32.const 230742) "a") (data (i32.const 230745) "a") (data (i32.const 230748) "a") (data (i32.const 230751) "a") (data (i32.const 230754) "a") (data (i32.const 230757) "a") (data (i32.const 230760) "a") (data (i32.const 230763) "a") (data (i32.const 230766) "a") (data (i32.const 230769) "a") (data (i32.const 230772) "a") (data (i32.const 230775) "a") (data (i32.const 230778) "a") (data (i32.const 230781) "a") (data (i32.const 230784) "a") (data (i32.const 230787) "a") (data (i32.const 230790) "a") (data (i32.const 230793) "a") (data (i32.const 230796) "a") (data (i32.const 230799) "a") (data (i32.const 230802) "a") (data (i32.const 230805) "a") (data (i32.const 230808) "a") (data (i32.const 230811) "a") (data (i32.const 230814) "a") (data (i32.const 230817) "a") (data (i32.const 230820) "a") (data (i32.const 230823) "a") (data (i32.const 230826) "a") (data (i32.const 230829) "a") (data (i32.const 230832) "a") (data (i32.const 230835) "a") (data (i32.const 230838) "a") (data (i32.const 230841) "a") (data (i32.const 230844) "a") (data (i32.const 230847) "a") (data (i32.const 230850) "a") (data (i32.const 230853) "a") (data (i32.const 230856) "a") (data (i32.const 230859) "a") (data (i32.const 230862) "a") (data (i32.const 230865) "a") (data (i32.const 230868) "a") (data (i32.const 230871) "a") (data (i32.const 230874) "a") (data (i32.const 230877) "a") (data (i32.const 230880) "a") (data (i32.const 230883) "a") (data (i32.const 230886) "a") (data (i32.const 230889) "a") (data (i32.const 230892) "a") (data (i32.const 230895) "a") (data (i32.const 230898) "a") (data (i32.const 230901) "a") (data (i32.const 230904) "a") (data (i32.const 230907) "a") (data (i32.const 230910) "a") (data (i32.const 230913) "a") (data (i32.const 230916) "a") (data (i32.const 230919) "a") (data (i32.const 230922) "a") (data (i32.const 230925) "a") (data (i32.const 230928) "a") (data (i32.const 230931) "a") (data (i32.const 230934) "a") (data (i32.const 230937) "a") (data (i32.const 230940) "a") (data (i32.const 230943) "a") (data (i32.const 230946) "a") (data (i32.const 230949) "a") (data (i32.const 230952) "a") (data (i32.const 230955) "a") (data (i32.const 230958) "a") (data (i32.const 230961) "a") (data (i32.const 230964) "a") (data (i32.const 230967) "a") (data (i32.const 230970) "a") (data (i32.const 230973) "a") (data (i32.const 230976) "a") (data (i32.const 230979) "a") (data (i32.const 230982) "a") (data (i32.const 230985) "a") (data (i32.const 230988) "a") (data (i32.const 230991) "a") (data (i32.const 230994) "a") (data (i32.const 230997) "a") (data (i32.const 231000) "a") (data (i32.const 231003) "a") (data (i32.const 231006) "a") (data (i32.const 231009) "a") (data (i32.const 231012) "a") (data (i32.const 231015) "a") (data (i32.const 231018) "a") (data (i32.const 231021) "a") (data (i32.const 231024) "a") (data (i32.const 231027) "a") (data (i32.const 231030) "a") (data (i32.const 231033) "a") (data (i32.const 231036) "a") (data (i32.const 231039) "a") (data (i32.const 231042) "a") (data (i32.const 231045) "a") (data (i32.const 231048) "a") (data (i32.const 231051) "a") (data (i32.const 231054) "a") (data (i32.const 231057) "a") (data (i32.const 231060) "a") (data (i32.const 231063) "a") (data (i32.const 231066) "a") (data (i32.const 231069) "a") (data (i32.const 231072) "a") (data (i32.const 231075) "a") (data (i32.const 231078) "a") (data (i32.const 231081) "a") (data (i32.const 231084) "a") (data (i32.const 231087) "a") (data (i32.const 231090) "a") (data (i32.const 231093) "a") (data (i32.const 231096) "a") (data (i32.const 231099) "a") (data (i32.const 231102) "a") (data (i32.const 231105) "a") (data (i32.const 231108) "a") (data (i32.const 231111) "a") (data (i32.const 231114) "a") (data (i32.const 231117) "a") (data (i32.const 231120) "a") (data (i32.const 231123) "a") (data (i32.const 231126) "a") (data (i32.const 231129) "a") (data (i32.const 231132) "a") (data (i32.const 231135) "a") (data (i32.const 231138) "a") (data (i32.const 231141) "a") (data (i32.const 231144) "a") (data (i32.const 231147) "a") (data (i32.const 231150) "a") (data (i32.const 231153) "a") (data (i32.const 231156) "a") (data (i32.const 231159) "a") (data (i32.const 231162) "a") (data (i32.const 231165) "a") (data (i32.const 231168) "a") (data (i32.const 231171) "a") (data (i32.const 231174) "a") (data (i32.const 231177) "a") (data (i32.const 231180) "a") (data (i32.const 231183) "a") (data (i32.const 231186) "a") (data (i32.const 231189) "a") (data (i32.const 231192) "a") (data (i32.const 231195) "a") (data (i32.const 231198) "a") (data (i32.const 231201) "a") (data (i32.const 231204) "a") (data (i32.const 231207) "a") (data (i32.const 231210) "a") (data (i32.const 231213) "a") (data (i32.const 231216) "a") (data (i32.const 231219) "a") (data (i32.const 231222) "a") (data (i32.const 231225) "a") (data (i32.const 231228) "a") (data (i32.const 231231) "a") (data (i32.const 231234) "a") (data (i32.const 231237) "a") (data (i32.const 231240) "a") (data (i32.const 231243) "a") (data (i32.const 231246) "a") (data (i32.const 231249) "a") (data (i32.const 231252) "a") (data (i32.const 231255) "a") (data (i32.const 231258) "a") (data (i32.const 231261) "a") (data (i32.const 231264) "a") (data (i32.const 231267) "a") (data (i32.const 231270) "a") (data (i32.const 231273) "a") (data (i32.const 231276) "a") (data (i32.const 231279) "a") (data (i32.const 231282) "a") (data (i32.const 231285) "a") (data (i32.const 231288) "a") (data (i32.const 231291) "a") (data (i32.const 231294) "a") (data (i32.const 231297) "a") (data (i32.const 231300) "a") (data (i32.const 231303) "a") (data (i32.const 231306) "a") (data (i32.const 231309) "a") (data (i32.const 231312) "a") (data (i32.const 231315) "a") (data (i32.const 231318) "a") (data (i32.const 231321) "a") (data (i32.const 231324) "a") (data (i32.const 231327) "a") (data (i32.const 231330) "a") (data (i32.const 231333) "a") (data (i32.const 231336) "a") (data (i32.const 231339) "a") (data (i32.const 231342) "a") (data (i32.const 231345) "a") (data (i32.const 231348) "a") (data (i32.const 231351) "a") (data (i32.const 231354) "a") (data (i32.const 231357) "a") (data (i32.const 231360) "a") (data (i32.const 231363) "a") (data (i32.const 231366) "a") (data (i32.const 231369) "a") (data (i32.const 231372) "a") (data (i32.const 231375) "a") (data (i32.const 231378) "a") (data (i32.const 231381) "a") (data (i32.const 231384) "a") (data (i32.const 231387) "a") (data (i32.const 231390) "a") (data (i32.const 231393) "a") (data (i32.const 231396) "a") (data (i32.const 231399) "a") (data (i32.const 231402) "a") (data (i32.const 231405) "a") (data (i32.const 231408) "a") (data (i32.const 231411) "a") (data (i32.const 231414) "a") (data (i32.const 231417) "a") (data (i32.const 231420) "a") (data (i32.const 231423) "a") (data (i32.const 231426) "a") (data (i32.const 231429) "a") (data (i32.const 231432) "a") (data (i32.const 231435) "a") (data (i32.const 231438) "a") (data (i32.const 231441) "a") (data (i32.const 231444) "a") (data (i32.const 231447) "a") (data (i32.const 231450) "a") (data (i32.const 231453) "a") (data (i32.const 231456) "a") (data (i32.const 231459) "a") (data (i32.const 231462) "a") (data (i32.const 231465) "a") (data (i32.const 231468) "a") (data (i32.const 231471) "a") (data (i32.const 231474) "a") (data (i32.const 231477) "a") (data (i32.const 231480) "a") (data (i32.const 231483) "a") (data (i32.const 231486) "a") (data (i32.const 231489) "a") (data (i32.const 231492) "a") (data (i32.const 231495) "a") (data (i32.const 231498) "a") (data (i32.const 231501) "a") (data (i32.const 231504) "a") (data (i32.const 231507) "a") (data (i32.const 231510) "a") (data (i32.const 231513) "a") (data (i32.const 231516) "a") (data (i32.const 231519) "a") (data (i32.const 231522) "a") (data (i32.const 231525) "a") (data (i32.const 231528) "a") (data (i32.const 231531) "a") (data (i32.const 231534) "a") (data (i32.const 231537) "a") (data (i32.const 231540) "a") (data (i32.const 231543) "a") (data (i32.const 231546) "a") (data (i32.const 231549) "a") (data (i32.const 231552) "a") (data (i32.const 231555) "a") (data (i32.const 231558) "a") (data (i32.const 231561) "a") (data (i32.const 231564) "a") (data (i32.const 231567) "a") (data (i32.const 231570) "a") (data (i32.const 231573) "a") (data (i32.const 231576) "a") (data (i32.const 231579) "a") (data (i32.const 231582) "a") (data (i32.const 231585) "a") (data (i32.const 231588) "a") (data (i32.const 231591) "a") (data (i32.const 231594) "a") (data (i32.const 231597) "a") (data (i32.const 231600) "a") (data (i32.const 231603) "a") (data (i32.const 231606) "a") (data (i32.const 231609) "a") (data (i32.const 231612) "a") (data (i32.const 231615) "a") (data (i32.const 231618) "a") (data (i32.const 231621) "a") (data (i32.const 231624) "a") (data (i32.const 231627) "a") (data (i32.const 231630) "a") (data (i32.const 231633) "a") (data (i32.const 231636) "a") (data (i32.const 231639) "a") (data (i32.const 231642) "a") (data (i32.const 231645) "a") (data (i32.const 231648) "a") (data (i32.const 231651) "a") (data (i32.const 231654) "a") (data (i32.const 231657) "a") (data (i32.const 231660) "a") (data (i32.const 231663) "a") (data (i32.const 231666) "a") (data (i32.const 231669) "a") (data (i32.const 231672) "a") (data (i32.const 231675) "a") (data (i32.const 231678) "a") (data (i32.const 231681) "a") (data (i32.const 231684) "a") (data (i32.const 231687) "a") (data (i32.const 231690) "a") (data (i32.const 231693) "a") (data (i32.const 231696) "a") (data (i32.const 231699) "a") (data (i32.const 231702) "a") (data (i32.const 231705) "a") (data (i32.const 231708) "a") (data (i32.const 231711) "a") (data (i32.const 231714) "a") (data (i32.const 231717) "a") (data (i32.const 231720) "a") (data (i32.const 231723) "a") (data (i32.const 231726) "a") (data (i32.const 231729) "a") (data (i32.const 231732) "a") (data (i32.const 231735) "a") (data (i32.const 231738) "a") (data (i32.const 231741) "a") (data (i32.const 231744) "a") (data (i32.const 231747) "a") (data (i32.const 231750) "a") (data (i32.const 231753) "a") (data (i32.const 231756) "a") (data (i32.const 231759) "a") (data (i32.const 231762) "a") (data (i32.const 231765) "a") (data (i32.const 231768) "a") (data (i32.const 231771) "a") (data (i32.const 231774) "a") (data (i32.const 231777) "a") (data (i32.const 231780) "a") (data (i32.const 231783) "a") (data (i32.const 231786) "a") (data (i32.const 231789) "a") (data (i32.const 231792) "a") (data (i32.const 231795) "a") (data (i32.const 231798) "a") (data (i32.const 231801) "a") (data (i32.const 231804) "a") (data (i32.const 231807) "a") (data (i32.const 231810) "a") (data (i32.const 231813) "a") (data (i32.const 231816) "a") (data (i32.const 231819) "a") (data (i32.const 231822) "a") (data (i32.const 231825) "a") (data (i32.const 231828) "a") (data (i32.const 231831) "a") (data (i32.const 231834) "a") (data (i32.const 231837) "a") (data (i32.const 231840) "a") (data (i32.const 231843) "a") (data (i32.const 231846) "a") (data (i32.const 231849) "a") (data (i32.const 231852) "a") (data (i32.const 231855) "a") (data (i32.const 231858) "a") (data (i32.const 231861) "a") (data (i32.const 231864) "a") (data (i32.const 231867) "a") (data (i32.const 231870) "a") (data (i32.const 231873) "a") (data (i32.const 231876) "a") (data (i32.const 231879) "a") (data (i32.const 231882) "a") (data (i32.const 231885) "a") (data (i32.const 231888) "a") (data (i32.const 231891) "a") (data (i32.const 231894) "a") (data (i32.const 231897) "a") (data (i32.const 231900) "a") (data (i32.const 231903) "a") (data (i32.const 231906) "a") (data (i32.const 231909) "a") (data (i32.const 231912) "a") (data (i32.const 231915) "a") (data (i32.const 231918) "a") (data (i32.const 231921) "a") (data (i32.const 231924) "a") (data (i32.const 231927) "a") (data (i32.const 231930) "a") (data (i32.const 231933) "a") (data (i32.const 231936) "a") (data (i32.const 231939) "a") (data (i32.const 231942) "a") (data (i32.const 231945) "a") (data (i32.const 231948) "a") (data (i32.const 231951) "a") (data (i32.const 231954) "a") (data (i32.const 231957) "a") (data (i32.const 231960) "a") (data (i32.const 231963) "a") (data (i32.const 231966) "a") (data (i32.const 231969) "a") (data (i32.const 231972) "a") (data (i32.const 231975) "a") (data (i32.const 231978) "a") (data (i32.const 231981) "a") (data (i32.const 231984) "a") (data (i32.const 231987) "a") (data (i32.const 231990) "a") (data (i32.const 231993) "a") (data (i32.const 231996) "a") (data (i32.const 231999) "a") (data (i32.const 232002) "a") (data (i32.const 232005) "a") (data (i32.const 232008) "a") (data (i32.const 232011) "a") (data (i32.const 232014) "a") (data (i32.const 232017) "a") (data (i32.const 232020) "a") (data (i32.const 232023) "a") (data (i32.const 232026) "a") (data (i32.const 232029) "a") (data (i32.const 232032) "a") (data (i32.const 232035) "a") (data (i32.const 232038) "a") (data (i32.const 232041) "a") (data (i32.const 232044) "a") (data (i32.const 232047) "a") (data (i32.const 232050) "a") (data (i32.const 232053) "a") (data (i32.const 232056) "a") (data (i32.const 232059) "a") (data (i32.const 232062) "a") (data (i32.const 232065) "a") (data (i32.const 232068) "a") (data (i32.const 232071) "a") (data (i32.const 232074) "a") (data (i32.const 232077) "a") (data (i32.const 232080) "a") (data (i32.const 232083) "a") (data (i32.const 232086) "a") (data (i32.const 232089) "a") (data (i32.const 232092) "a") (data (i32.const 232095) "a") (data (i32.const 232098) "a") (data (i32.const 232101) "a") (data (i32.const 232104) "a") (data (i32.const 232107) "a") (data (i32.const 232110) "a") (data (i32.const 232113) "a") (data (i32.const 232116) "a") (data (i32.const 232119) "a") (data (i32.const 232122) "a") (data (i32.const 232125) "a") (data (i32.const 232128) "a") (data (i32.const 232131) "a") (data (i32.const 232134) "a") (data (i32.const 232137) "a") (data (i32.const 232140) "a") (data (i32.const 232143) "a") (data (i32.const 232146) "a") (data (i32.const 232149) "a") (data (i32.const 232152) "a") (data (i32.const 232155) "a") (data (i32.const 232158) "a") (data (i32.const 232161) "a") (data (i32.const 232164) "a") (data (i32.const 232167) "a") (data (i32.const 232170) "a") (data (i32.const 232173) "a") (data (i32.const 232176) "a") (data (i32.const 232179) "a") (data (i32.const 232182) "a") (data (i32.const 232185) "a") (data (i32.const 232188) "a") (data (i32.const 232191) "a") (data (i32.const 232194) "a") (data (i32.const 232197) "a") (data (i32.const 232200) "a") (data (i32.const 232203) "a") (data (i32.const 232206) "a") (data (i32.const 232209) "a") (data (i32.const 232212) "a") (data (i32.const 232215) "a") (data (i32.const 232218) "a") (data (i32.const 232221) "a") (data (i32.const 232224) "a") (data (i32.const 232227) "a") (data (i32.const 232230) "a") (data (i32.const 232233) "a") (data (i32.const 232236) "a") (data (i32.const 232239) "a") (data (i32.const 232242) "a") (data (i32.const 232245) "a") (data (i32.const 232248) "a") (data (i32.const 232251) "a") (data (i32.const 232254) "a") (data (i32.const 232257) "a") (data (i32.const 232260) "a") (data (i32.const 232263) "a") (data (i32.const 232266) "a") (data (i32.const 232269) "a") (data (i32.const 232272) "a") (data (i32.const 232275) "a") (data (i32.const 232278) "a") (data (i32.const 232281) "a") (data (i32.const 232284) "a") (data (i32.const 232287) "a") (data (i32.const 232290) "a") (data (i32.const 232293) "a") (data (i32.const 232296) "a") (data (i32.const 232299) "a") (data (i32.const 232302) "a") (data (i32.const 232305) "a") (data (i32.const 232308) "a") (data (i32.const 232311) "a") (data (i32.const 232314) "a") (data (i32.const 232317) "a") (data (i32.const 232320) "a") (data (i32.const 232323) "a") (data (i32.const 232326) "a") (data (i32.const 232329) "a") (data (i32.const 232332) "a") (data (i32.const 232335) "a") (data (i32.const 232338) "a") (data (i32.const 232341) "a") (data (i32.const 232344) "a") (data (i32.const 232347) "a") (data (i32.const 232350) "a") (data (i32.const 232353) "a") (data (i32.const 232356) "a") (data (i32.const 232359) "a") (data (i32.const 232362) "a") (data (i32.const 232365) "a") (data (i32.const 232368) "a") (data (i32.const 232371) "a") (data (i32.const 232374) "a") (data (i32.const 232377) "a") (data (i32.const 232380) "a") (data (i32.const 232383) "a") (data (i32.const 232386) "a") (data (i32.const 232389) "a") (data (i32.const 232392) "a") (data (i32.const 232395) "a") (data (i32.const 232398) "a") (data (i32.const 232401) "a") (data (i32.const 232404) "a") (data (i32.const 232407) "a") (data (i32.const 232410) "a") (data (i32.const 232413) "a") (data (i32.const 232416) "a") (data (i32.const 232419) "a") (data (i32.const 232422) "a") (data (i32.const 232425) "a") (data (i32.const 232428) "a") (data (i32.const 232431) "a") (data (i32.const 232434) "a") (data (i32.const 232437) "a") (data (i32.const 232440) "a") (data (i32.const 232443) "a") (data (i32.const 232446) "a") (data (i32.const 232449) "a") (data (i32.const 232452) "a") (data (i32.const 232455) "a") (data (i32.const 232458) "a") (data (i32.const 232461) "a") (data (i32.const 232464) "a") (data (i32.const 232467) "a") (data (i32.const 232470) "a") (data (i32.const 232473) "a") (data (i32.const 232476) "a") (data (i32.const 232479) "a") (data (i32.const 232482) "a") (data (i32.const 232485) "a") (data (i32.const 232488) "a") (data (i32.const 232491) "a") (data (i32.const 232494) "a") (data (i32.const 232497) "a") (data (i32.const 232500) "a") (data (i32.const 232503) "a") (data (i32.const 232506) "a") (data (i32.const 232509) "a") (data (i32.const 232512) "a") (data (i32.const 232515) "a") (data (i32.const 232518) "a") (data (i32.const 232521) "a") (data (i32.const 232524) "a") (data (i32.const 232527) "a") (data (i32.const 232530) "a") (data (i32.const 232533) "a") (data (i32.const 232536) "a") (data (i32.const 232539) "a") (data (i32.const 232542) "a") (data (i32.const 232545) "a") (data (i32.const 232548) "a") (data (i32.const 232551) "a") (data (i32.const 232554) "a") (data (i32.const 232557) "a") (data (i32.const 232560) "a") (data (i32.const 232563) "a") (data (i32.const 232566) "a") (data (i32.const 232569) "a") (data (i32.const 232572) "a") (data (i32.const 232575) "a") (data (i32.const 232578) "a") (data (i32.const 232581) "a") (data (i32.const 232584) "a") (data (i32.const 232587) "a") (data (i32.const 232590) "a") (data (i32.const 232593) "a") (data (i32.const 232596) "a") (data (i32.const 232599) "a") (data (i32.const 232602) "a") (data (i32.const 232605) "a") (data (i32.const 232608) "a") (data (i32.const 232611) "a") (data (i32.const 232614) "a") (data (i32.const 232617) "a") (data (i32.const 232620) "a") (data (i32.const 232623) "a") (data (i32.const 232626) "a") (data (i32.const 232629) "a") (data (i32.const 232632) "a") (data (i32.const 232635) "a") (data (i32.const 232638) "a") (data (i32.const 232641) "a") (data (i32.const 232644) "a") (data (i32.const 232647) "a") (data (i32.const 232650) "a") (data (i32.const 232653) "a") (data (i32.const 232656) "a") (data (i32.const 232659) "a") (data (i32.const 232662) "a") (data (i32.const 232665) "a") (data (i32.const 232668) "a") (data (i32.const 232671) "a") (data (i32.const 232674) "a") (data (i32.const 232677) "a") (data (i32.const 232680) "a") (data (i32.const 232683) "a") (data (i32.const 232686) "a") (data (i32.const 232689) "a") (data (i32.const 232692) "a") (data (i32.const 232695) "a") (data (i32.const 232698) "a") (data (i32.const 232701) "a") (data (i32.const 232704) "a") (data (i32.const 232707) "a") (data (i32.const 232710) "a") (data (i32.const 232713) "a") (data (i32.const 232716) "a") (data (i32.const 232719) "a") (data (i32.const 232722) "a") (data (i32.const 232725) "a") (data (i32.const 232728) "a") (data (i32.const 232731) "a") (data (i32.const 232734) "a") (data (i32.const 232737) "a") (data (i32.const 232740) "a") (data (i32.const 232743) "a") (data (i32.const 232746) "a") (data (i32.const 232749) "a") (data (i32.const 232752) "a") (data (i32.const 232755) "a") (data (i32.const 232758) "a") (data (i32.const 232761) "a") (data (i32.const 232764) "a") (data (i32.const 232767) "a") (data (i32.const 232770) "a") (data (i32.const 232773) "a") (data (i32.const 232776) "a") (data (i32.const 232779) "a") (data (i32.const 232782) "a") (data (i32.const 232785) "a") (data (i32.const 232788) "a") (data (i32.const 232791) "a") (data (i32.const 232794) "a") (data (i32.const 232797) "a") (data (i32.const 232800) "a") (data (i32.const 232803) "a") (data (i32.const 232806) "a") (data (i32.const 232809) "a") (data (i32.const 232812) "a") (data (i32.const 232815) "a") (data (i32.const 232818) "a") (data (i32.const 232821) "a") (data (i32.const 232824) "a") (data (i32.const 232827) "a") (data (i32.const 232830) "a") (data (i32.const 232833) "a") (data (i32.const 232836) "a") (data (i32.const 232839) "a") (data (i32.const 232842) "a") (data (i32.const 232845) "a") (data (i32.const 232848) "a") (data (i32.const 232851) "a") (data (i32.const 232854) "a") (data (i32.const 232857) "a") (data (i32.const 232860) "a") (data (i32.const 232863) "a") (data (i32.const 232866) "a") (data (i32.const 232869) "a") (data (i32.const 232872) "a") (data (i32.const 232875) "a") (data (i32.const 232878) "a") (data (i32.const 232881) "a") (data (i32.const 232884) "a") (data (i32.const 232887) "a") (data (i32.const 232890) "a") (data (i32.const 232893) "a") (data (i32.const 232896) "a") (data (i32.const 232899) "a") (data (i32.const 232902) "a") (data (i32.const 232905) "a") (data (i32.const 232908) "a") (data (i32.const 232911) "a") (data (i32.const 232914) "a") (data (i32.const 232917) "a") (data (i32.const 232920) "a") (data (i32.const 232923) "a") (data (i32.const 232926) "a") (data (i32.const 232929) "a") (data (i32.const 232932) "a") (data (i32.const 232935) "a") (data (i32.const 232938) "a") (data (i32.const 232941) "a") (data (i32.const 232944) "a") (data (i32.const 232947) "a") (data (i32.const 232950) "a") (data (i32.const 232953) "a") (data (i32.const 232956) "a") (data (i32.const 232959) "a") (data (i32.const 232962) "a") (data (i32.const 232965) "a") (data (i32.const 232968) "a") (data (i32.const 232971) "a") (data (i32.const 232974) "a") (data (i32.const 232977) "a") (data (i32.const 232980) "a") (data (i32.const 232983) "a") (data (i32.const 232986) "a") (data (i32.const 232989) "a") (data (i32.const 232992) "a") (data (i32.const 232995) "a") (data (i32.const 232998) "a") (data (i32.const 233001) "a") (data (i32.const 233004) "a") (data (i32.const 233007) "a") (data (i32.const 233010) "a") (data (i32.const 233013) "a") (data (i32.const 233016) "a") (data (i32.const 233019) "a") (data (i32.const 233022) "a") (data (i32.const 233025) "a") (data (i32.const 233028) "a") (data (i32.const 233031) "a") (data (i32.const 233034) "a") (data (i32.const 233037) "a") (data (i32.const 233040) "a") (data (i32.const 233043) "a") (data (i32.const 233046) "a") (data (i32.const 233049) "a") (data (i32.const 233052) "a") (data (i32.const 233055) "a") (data (i32.const 233058) "a") (data (i32.const 233061) "a") (data (i32.const 233064) "a") (data (i32.const 233067) "a") (data (i32.const 233070) "a") (data (i32.const 233073) "a") (data (i32.const 233076) "a") (data (i32.const 233079) "a") (data (i32.const 233082) "a") (data (i32.const 233085) "a") (data (i32.const 233088) "a") (data (i32.const 233091) "a") (data (i32.const 233094) "a") (data (i32.const 233097) "a") (data (i32.const 233100) "a") (data (i32.const 233103) "a") (data (i32.const 233106) "a") (data (i32.const 233109) "a") (data (i32.const 233112) "a") (data (i32.const 233115) "a") (data (i32.const 233118) "a") (data (i32.const 233121) "a") (data (i32.const 233124) "a") (data (i32.const 233127) "a") (data (i32.const 233130) "a") (data (i32.const 233133) "a") (data (i32.const 233136) "a") (data (i32.const 233139) "a") (data (i32.const 233142) "a") (data (i32.const 233145) "a") (data (i32.const 233148) "a") (data (i32.const 233151) "a") (data (i32.const 233154) "a") (data (i32.const 233157) "a") (data (i32.const 233160) "a") (data (i32.const 233163) "a") (data (i32.const 233166) "a") (data (i32.const 233169) "a") (data (i32.const 233172) "a") (data (i32.const 233175) "a") (data (i32.const 233178) "a") (data (i32.const 233181) "a") (data (i32.const 233184) "a") (data (i32.const 233187) "a") (data (i32.const 233190) "a") (data (i32.const 233193) "a") (data (i32.const 233196) "a") (data (i32.const 233199) "a") (data (i32.const 233202) "a") (data (i32.const 233205) "a") (data (i32.const 233208) "a") (data (i32.const 233211) "a") (data (i32.const 233214) "a") (data (i32.const 233217) "a") (data (i32.const 233220) "a") (data (i32.const 233223) "a") (data (i32.const 233226) "a") (data (i32.const 233229) "a") (data (i32.const 233232) "a") (data (i32.const 233235) "a") (data (i32.const 233238) "a") (data (i32.const 233241) "a") (data (i32.const 233244) "a") (data (i32.const 233247) "a") (data (i32.const 233250) "a") (data (i32.const 233253) "a") (data (i32.const 233256) "a") (data (i32.const 233259) "a") (data (i32.const 233262) "a") (data (i32.const 233265) "a") (data (i32.const 233268) "a") (data (i32.const 233271) "a") (data (i32.const 233274) "a") (data (i32.const 233277) "a") (data (i32.const 233280) "a") (data (i32.const 233283) "a") (data (i32.const 233286) "a") (data (i32.const 233289) "a") (data (i32.const 233292) "a") (data (i32.const 233295) "a") (data (i32.const 233298) "a") (data (i32.const 233301) "a") (data (i32.const 233304) "a") (data (i32.const 233307) "a") (data (i32.const 233310) "a") (data (i32.const 233313) "a") (data (i32.const 233316) "a") (data (i32.const 233319) "a") (data (i32.const 233322) "a") (data (i32.const 233325) "a") (data (i32.const 233328) "a") (data (i32.const 233331) "a") (data (i32.const 233334) "a") (data (i32.const 233337) "a") (data (i32.const 233340) "a") (data (i32.const 233343) "a") (data (i32.const 233346) "a") (data (i32.const 233349) "a") (data (i32.const 233352) "a") (data (i32.const 233355) "a") (data (i32.const 233358) "a") (data (i32.const 233361) "a") (data (i32.const 233364) "a") (data (i32.const 233367) "a") (data (i32.const 233370) "a") (data (i32.const 233373) "a") (data (i32.const 233376) "a") (data (i32.const 233379) "a") (data (i32.const 233382) "a") (data (i32.const 233385) "a") (data (i32.const 233388) "a") (data (i32.const 233391) "a") (data (i32.const 233394) "a") (data (i32.const 233397) "a") (data (i32.const 233400) "a") (data (i32.const 233403) "a") (data (i32.const 233406) "a") (data (i32.const 233409) "a") (data (i32.const 233412) "a") (data (i32.const 233415) "a") (data (i32.const 233418) "a") (data (i32.const 233421) "a") (data (i32.const 233424) "a") (data (i32.const 233427) "a") (data (i32.const 233430) "a") (data (i32.const 233433) "a") (data (i32.const 233436) "a") (data (i32.const 233439) "a") (data (i32.const 233442) "a") (data (i32.const 233445) "a") (data (i32.const 233448) "a") (data (i32.const 233451) "a") (data (i32.const 233454) "a") (data (i32.const 233457) "a") (data (i32.const 233460) "a") (data (i32.const 233463) "a") (data (i32.const 233466) "a") (data (i32.const 233469) "a") (data (i32.const 233472) "a") (data (i32.const 233475) "a") (data (i32.const 233478) "a") (data (i32.const 233481) "a") (data (i32.const 233484) "a") (data (i32.const 233487) "a") (data (i32.const 233490) "a") (data (i32.const 233493) "a") (data (i32.const 233496) "a") (data (i32.const 233499) "a") (data (i32.const 233502) "a") (data (i32.const 233505) "a") (data (i32.const 233508) "a") (data (i32.const 233511) "a") (data (i32.const 233514) "a") (data (i32.const 233517) "a") (data (i32.const 233520) "a") (data (i32.const 233523) "a") (data (i32.const 233526) "a") (data (i32.const 233529) "a") (data (i32.const 233532) "a") (data (i32.const 233535) "a") (data (i32.const 233538) "a") (data (i32.const 233541) "a") (data (i32.const 233544) "a") (data (i32.const 233547) "a") (data (i32.const 233550) "a") (data (i32.const 233553) "a") (data (i32.const 233556) "a") (data (i32.const 233559) "a") (data (i32.const 233562) "a") (data (i32.const 233565) "a") (data (i32.const 233568) "a") (data (i32.const 233571) "a") (data (i32.const 233574) "a") (data (i32.const 233577) "a") (data (i32.const 233580) "a") (data (i32.const 233583) "a") (data (i32.const 233586) "a") (data (i32.const 233589) "a") (data (i32.const 233592) "a") (data (i32.const 233595) "a") (data (i32.const 233598) "a") (data (i32.const 233601) "a") (data (i32.const 233604) "a") (data (i32.const 233607) "a") (data (i32.const 233610) "a") (data (i32.const 233613) "a") (data (i32.const 233616) "a") (data (i32.const 233619) "a") (data (i32.const 233622) "a") (data (i32.const 233625) "a") (data (i32.const 233628) "a") (data (i32.const 233631) "a") (data (i32.const 233634) "a") (data (i32.const 233637) "a") (data (i32.const 233640) "a") (data (i32.const 233643) "a") (data (i32.const 233646) "a") (data (i32.const 233649) "a") (data (i32.const 233652) "a") (data (i32.const 233655) "a") (data (i32.const 233658) "a") (data (i32.const 233661) "a") (data (i32.const 233664) "a") (data (i32.const 233667) "a") (data (i32.const 233670) "a") (data (i32.const 233673) "a") (data (i32.const 233676) "a") (data (i32.const 233679) "a") (data (i32.const 233682) "a") (data (i32.const 233685) "a") (data (i32.const 233688) "a") (data (i32.const 233691) "a") (data (i32.const 233694) "a") (data (i32.const 233697) "a") (data (i32.const 233700) "a") (data (i32.const 233703) "a") (data (i32.const 233706) "a") (data (i32.const 233709) "a") (data (i32.const 233712) "a") (data (i32.const 233715) "a") (data (i32.const 233718) "a") (data (i32.const 233721) "a") (data (i32.const 233724) "a") (data (i32.const 233727) "a") (data (i32.const 233730) "a") (data (i32.const 233733) "a") (data (i32.const 233736) "a") (data (i32.const 233739) "a") (data (i32.const 233742) "a") (data (i32.const 233745) "a") (data (i32.const 233748) "a") (data (i32.const 233751) "a") (data (i32.const 233754) "a") (data (i32.const 233757) "a") (data (i32.const 233760) "a") (data (i32.const 233763) "a") (data (i32.const 233766) "a") (data (i32.const 233769) "a") (data (i32.const 233772) "a") (data (i32.const 233775) "a") (data (i32.const 233778) "a") (data (i32.const 233781) "a") (data (i32.const 233784) "a") (data (i32.const 233787) "a") (data (i32.const 233790) "a") (data (i32.const 233793) "a") (data (i32.const 233796) "a") (data (i32.const 233799) "a") (data (i32.const 233802) "a") (data (i32.const 233805) "a") (data (i32.const 233808) "a") (data (i32.const 233811) "a") (data (i32.const 233814) "a") (data (i32.const 233817) "a") (data (i32.const 233820) "a") (data (i32.const 233823) "a") (data (i32.const 233826) "a") (data (i32.const 233829) "a") (data (i32.const 233832) "a") (data (i32.const 233835) "a") (data (i32.const 233838) "a") (data (i32.const 233841) "a") (data (i32.const 233844) "a") (data (i32.const 233847) "a") (data (i32.const 233850) "a") (data (i32.const 233853) "a") (data (i32.const 233856) "a") (data (i32.const 233859) "a") (data (i32.const 233862) "a") (data (i32.const 233865) "a") (data (i32.const 233868) "a") (data (i32.const 233871) "a") (data (i32.const 233874) "a") (data (i32.const 233877) "a") (data (i32.const 233880) "a") (data (i32.const 233883) "a") (data (i32.const 233886) "a") (data (i32.const 233889) "a") (data (i32.const 233892) "a") (data (i32.const 233895) "a") (data (i32.const 233898) "a") (data (i32.const 233901) "a") (data (i32.const 233904) "a") (data (i32.const 233907) "a") (data (i32.const 233910) "a") (data (i32.const 233913) "a") (data (i32.const 233916) "a") (data (i32.const 233919) "a") (data (i32.const 233922) "a") (data (i32.const 233925) "a") (data (i32.const 233928) "a") (data (i32.const 233931) "a") (data (i32.const 233934) "a") (data (i32.const 233937) "a") (data (i32.const 233940) "a") (data (i32.const 233943) "a") (data (i32.const 233946) "a") (data (i32.const 233949) "a") (data (i32.const 233952) "a") (data (i32.const 233955) "a") (data (i32.const 233958) "a") (data (i32.const 233961) "a") (data (i32.const 233964) "a") (data (i32.const 233967) "a") (data (i32.const 233970) "a") (data (i32.const 233973) "a") (data (i32.const 233976) "a") (data (i32.const 233979) "a") (data (i32.const 233982) "a") (data (i32.const 233985) "a") (data (i32.const 233988) "a") (data (i32.const 233991) "a") (data (i32.const 233994) "a") (data (i32.const 233997) "a") (data (i32.const 234000) "a") (data (i32.const 234003) "a") (data (i32.const 234006) "a") (data (i32.const 234009) "a") (data (i32.const 234012) "a") (data (i32.const 234015) "a") (data (i32.const 234018) "a") (data (i32.const 234021) "a") (data (i32.const 234024) "a") (data (i32.const 234027) "a") (data (i32.const 234030) "a") (data (i32.const 234033) "a") (data (i32.const 234036) "a") (data (i32.const 234039) "a") (data (i32.const 234042) "a") (data (i32.const 234045) "a") (data (i32.const 234048) "a") (data (i32.const 234051) "a") (data (i32.const 234054) "a") (data (i32.const 234057) "a") (data (i32.const 234060) "a") (data (i32.const 234063) "a") (data (i32.const 234066) "a") (data (i32.const 234069) "a") (data (i32.const 234072) "a") (data (i32.const 234075) "a") (data (i32.const 234078) "a") (data (i32.const 234081) "a") (data (i32.const 234084) "a") (data (i32.const 234087) "a") (data (i32.const 234090) "a") (data (i32.const 234093) "a") (data (i32.const 234096) "a") (data (i32.const 234099) "a") (data (i32.const 234102) "a") (data (i32.const 234105) "a") (data (i32.const 234108) "a") (data (i32.const 234111) "a") (data (i32.const 234114) "a") (data (i32.const 234117) "a") (data (i32.const 234120) "a") (data (i32.const 234123) "a") (data (i32.const 234126) "a") (data (i32.const 234129) "a") (data (i32.const 234132) "a") (data (i32.const 234135) "a") (data (i32.const 234138) "a") (data (i32.const 234141) "a") (data (i32.const 234144) "a") (data (i32.const 234147) "a") (data (i32.const 234150) "a") (data (i32.const 234153) "a") (data (i32.const 234156) "a") (data (i32.const 234159) "a") (data (i32.const 234162) "a") (data (i32.const 234165) "a") (data (i32.const 234168) "a") (data (i32.const 234171) "a") (data (i32.const 234174) "a") (data (i32.const 234177) "a") (data (i32.const 234180) "a") (data (i32.const 234183) "a") (data (i32.const 234186) "a") (data (i32.const 234189) "a") (data (i32.const 234192) "a") (data (i32.const 234195) "a") (data (i32.const 234198) "a") (data (i32.const 234201) "a") (data (i32.const 234204) "a") (data (i32.const 234207) "a") (data (i32.const 234210) "a") (data (i32.const 234213) "a") (data (i32.const 234216) "a") (data (i32.const 234219) "a") (data (i32.const 234222) "a") (data (i32.const 234225) "a") (data (i32.const 234228) "a") (data (i32.const 234231) "a") (data (i32.const 234234) "a") (data (i32.const 234237) "a") (data (i32.const 234240) "a") (data (i32.const 234243) "a") (data (i32.const 234246) "a") (data (i32.const 234249) "a") (data (i32.const 234252) "a") (data (i32.const 234255) "a") (data (i32.const 234258) "a") (data (i32.const 234261) "a") (data (i32.const 234264) "a") (data (i32.const 234267) "a") (data (i32.const 234270) "a") (data (i32.const 234273) "a") (data (i32.const 234276) "a") (data (i32.const 234279) "a") (data (i32.const 234282) "a") (data (i32.const 234285) "a") (data (i32.const 234288) "a") (data (i32.const 234291) "a") (data (i32.const 234294) "a") (data (i32.const 234297) "a") (data (i32.const 234300) "a") (data (i32.const 234303) "a") (data (i32.const 234306) "a") (data (i32.const 234309) "a") (data (i32.const 234312) "a") (data (i32.const 234315) "a") (data (i32.const 234318) "a") (data (i32.const 234321) "a") (data (i32.const 234324) "a") (data (i32.const 234327) "a") (data (i32.const 234330) "a") (data (i32.const 234333) "a") (data (i32.const 234336) "a") (data (i32.const 234339) "a") (data (i32.const 234342) "a") (data (i32.const 234345) "a") (data (i32.const 234348) "a") (data (i32.const 234351) "a") (data (i32.const 234354) "a") (data (i32.const 234357) "a") (data (i32.const 234360) "a") (data (i32.const 234363) "a") (data (i32.const 234366) "a") (data (i32.const 234369) "a") (data (i32.const 234372) "a") (data (i32.const 234375) "a") (data (i32.const 234378) "a") (data (i32.const 234381) "a") (data (i32.const 234384) "a") (data (i32.const 234387) "a") (data (i32.const 234390) "a") (data (i32.const 234393) "a") (data (i32.const 234396) "a") (data (i32.const 234399) "a") (data (i32.const 234402) "a") (data (i32.const 234405) "a") (data (i32.const 234408) "a") (data (i32.const 234411) "a") (data (i32.const 234414) "a") (data (i32.const 234417) "a") (data (i32.const 234420) "a") (data (i32.const 234423) "a") (data (i32.const 234426) "a") (data (i32.const 234429) "a") (data (i32.const 234432) "a") (data (i32.const 234435) "a") (data (i32.const 234438) "a") (data (i32.const 234441) "a") (data (i32.const 234444) "a") (data (i32.const 234447) "a") (data (i32.const 234450) "a") (data (i32.const 234453) "a") (data (i32.const 234456) "a") (data (i32.const 234459) "a") (data (i32.const 234462) "a") (data (i32.const 234465) "a") (data (i32.const 234468) "a") (data (i32.const 234471) "a") (data (i32.const 234474) "a") (data (i32.const 234477) "a") (data (i32.const 234480) "a") (data (i32.const 234483) "a") (data (i32.const 234486) "a") (data (i32.const 234489) "a") (data (i32.const 234492) "a") (data (i32.const 234495) "a") (data (i32.const 234498) "a") (data (i32.const 234501) "a") (data (i32.const 234504) "a") (data (i32.const 234507) "a") (data (i32.const 234510) "a") (data (i32.const 234513) "a") (data (i32.const 234516) "a") (data (i32.const 234519) "a") (data (i32.const 234522) "a") (data (i32.const 234525) "a") (data (i32.const 234528) "a") (data (i32.const 234531) "a") (data (i32.const 234534) "a") (data (i32.const 234537) "a") (data (i32.const 234540) "a") (data (i32.const 234543) "a") (data (i32.const 234546) "a") (data (i32.const 234549) "a") (data (i32.const 234552) "a") (data (i32.const 234555) "a") (data (i32.const 234558) "a") (data (i32.const 234561) "a") (data (i32.const 234564) "a") (data (i32.const 234567) "a") (data (i32.const 234570) "a") (data (i32.const 234573) "a") (data (i32.const 234576) "a") (data (i32.const 234579) "a") (data (i32.const 234582) "a") (data (i32.const 234585) "a") (data (i32.const 234588) "a") (data (i32.const 234591) "a") (data (i32.const 234594) "a") (data (i32.const 234597) "a") (data (i32.const 234600) "a") (data (i32.const 234603) "a") (data (i32.const 234606) "a") (data (i32.const 234609) "a") (data (i32.const 234612) "a") (data (i32.const 234615) "a") (data (i32.const 234618) "a") (data (i32.const 234621) "a") (data (i32.const 234624) "a") (data (i32.const 234627) "a") (data (i32.const 234630) "a") (data (i32.const 234633) "a") (data (i32.const 234636) "a") (data (i32.const 234639) "a") (data (i32.const 234642) "a") (data (i32.const 234645) "a") (data (i32.const 234648) "a") (data (i32.const 234651) "a") (data (i32.const 234654) "a") (data (i32.const 234657) "a") (data (i32.const 234660) "a") (data (i32.const 234663) "a") (data (i32.const 234666) "a") (data (i32.const 234669) "a") (data (i32.const 234672) "a") (data (i32.const 234675) "a") (data (i32.const 234678) "a") (data (i32.const 234681) "a") (data (i32.const 234684) "a") (data (i32.const 234687) "a") (data (i32.const 234690) "a") (data (i32.const 234693) "a") (data (i32.const 234696) "a") (data (i32.const 234699) "a") (data (i32.const 234702) "a") (data (i32.const 234705) "a") (data (i32.const 234708) "a") (data (i32.const 234711) "a") (data (i32.const 234714) "a") (data (i32.const 234717) "a") (data (i32.const 234720) "a") (data (i32.const 234723) "a") (data (i32.const 234726) "a") (data (i32.const 234729) "a") (data (i32.const 234732) "a") (data (i32.const 234735) "a") (data (i32.const 234738) "a") (data (i32.const 234741) "a") (data (i32.const 234744) "a") (data (i32.const 234747) "a") (data (i32.const 234750) "a") (data (i32.const 234753) "a") (data (i32.const 234756) "a") (data (i32.const 234759) "a") (data (i32.const 234762) "a") (data (i32.const 234765) "a") (data (i32.const 234768) "a") (data (i32.const 234771) "a") (data (i32.const 234774) "a") (data (i32.const 234777) "a") (data (i32.const 234780) "a") (data (i32.const 234783) "a") (data (i32.const 234786) "a") (data (i32.const 234789) "a") (data (i32.const 234792) "a") (data (i32.const 234795) "a") (data (i32.const 234798) "a") (data (i32.const 234801) "a") (data (i32.const 234804) "a") (data (i32.const 234807) "a") (data (i32.const 234810) "a") (data (i32.const 234813) "a") (data (i32.const 234816) "a") (data (i32.const 234819) "a") (data (i32.const 234822) "a") (data (i32.const 234825) "a") (data (i32.const 234828) "a") (data (i32.const 234831) "a") (data (i32.const 234834) "a") (data (i32.const 234837) "a") (data (i32.const 234840) "a") (data (i32.const 234843) "a") (data (i32.const 234846) "a") (data (i32.const 234849) "a") (data (i32.const 234852) "a") (data (i32.const 234855) "a") (data (i32.const 234858) "a") (data (i32.const 234861) "a") (data (i32.const 234864) "a") (data (i32.const 234867) "a") (data (i32.const 234870) "a") (data (i32.const 234873) "a") (data (i32.const 234876) "a") (data (i32.const 234879) "a") (data (i32.const 234882) "a") (data (i32.const 234885) "a") (data (i32.const 234888) "a") (data (i32.const 234891) "a") (data (i32.const 234894) "a") (data (i32.const 234897) "a") (data (i32.const 234900) "a") (data (i32.const 234903) "a") (data (i32.const 234906) "a") (data (i32.const 234909) "a") (data (i32.const 234912) "a") (data (i32.const 234915) "a") (data (i32.const 234918) "a") (data (i32.const 234921) "a") (data (i32.const 234924) "a") (data (i32.const 234927) "a") (data (i32.const 234930) "a") (data (i32.const 234933) "a") (data (i32.const 234936) "a") (data (i32.const 234939) "a") (data (i32.const 234942) "a") (data (i32.const 234945) "a") (data (i32.const 234948) "a") (data (i32.const 234951) "a") (data (i32.const 234954) "a") (data (i32.const 234957) "a") (data (i32.const 234960) "a") (data (i32.const 234963) "a") (data (i32.const 234966) "a") (data (i32.const 234969) "a") (data (i32.const 234972) "a") (data (i32.const 234975) "a") (data (i32.const 234978) "a") (data (i32.const 234981) "a") (data (i32.const 234984) "a") (data (i32.const 234987) "a") (data (i32.const 234990) "a") (data (i32.const 234993) "a") (data (i32.const 234996) "a") (data (i32.const 234999) "a") (data (i32.const 235002) "a") (data (i32.const 235005) "a") (data (i32.const 235008) "a") (data (i32.const 235011) "a") (data (i32.const 235014) "a") (data (i32.const 235017) "a") (data (i32.const 235020) "a") (data (i32.const 235023) "a") (data (i32.const 235026) "a") (data (i32.const 235029) "a") (data (i32.const 235032) "a") (data (i32.const 235035) "a") (data (i32.const 235038) "a") (data (i32.const 235041) "a") (data (i32.const 235044) "a") (data (i32.const 235047) "a") (data (i32.const 235050) "a") (data (i32.const 235053) "a") (data (i32.const 235056) "a") (data (i32.const 235059) "a") (data (i32.const 235062) "a") (data (i32.const 235065) "a") (data (i32.const 235068) "a") (data (i32.const 235071) "a") (data (i32.const 235074) "a") (data (i32.const 235077) "a") (data (i32.const 235080) "a") (data (i32.const 235083) "a") (data (i32.const 235086) "a") (data (i32.const 235089) "a") (data (i32.const 235092) "a") (data (i32.const 235095) "a") (data (i32.const 235098) "a") (data (i32.const 235101) "a") (data (i32.const 235104) "a") (data (i32.const 235107) "a") (data (i32.const 235110) "a") (data (i32.const 235113) "a") (data (i32.const 235116) "a") (data (i32.const 235119) "a") (data (i32.const 235122) "a") (data (i32.const 235125) "a") (data (i32.const 235128) "a") (data (i32.const 235131) "a") (data (i32.const 235134) "a") (data (i32.const 235137) "a") (data (i32.const 235140) "a") (data (i32.const 235143) "a") (data (i32.const 235146) "a") (data (i32.const 235149) "a") (data (i32.const 235152) "a") (data (i32.const 235155) "a") (data (i32.const 235158) "a") (data (i32.const 235161) "a") (data (i32.const 235164) "a") (data (i32.const 235167) "a") (data (i32.const 235170) "a") (data (i32.const 235173) "a") (data (i32.const 235176) "a") (data (i32.const 235179) "a") (data (i32.const 235182) "a") (data (i32.const 235185) "a") (data (i32.const 235188) "a") (data (i32.const 235191) "a") (data (i32.const 235194) "a") (data (i32.const 235197) "a") (data (i32.const 235200) "a") (data (i32.const 235203) "a") (data (i32.const 235206) "a") (data (i32.const 235209) "a") (data (i32.const 235212) "a") (data (i32.const 235215) "a") (data (i32.const 235218) "a") (data (i32.const 235221) "a") (data (i32.const 235224) "a") (data (i32.const 235227) "a") (data (i32.const 235230) "a") (data (i32.const 235233) "a") (data (i32.const 235236) "a") (data (i32.const 235239) "a") (data (i32.const 235242) "a") (data (i32.const 235245) "a") (data (i32.const 235248) "a") (data (i32.const 235251) "a") (data (i32.const 235254) "a") (data (i32.const 235257) "a") (data (i32.const 235260) "a") (data (i32.const 235263) "a") (data (i32.const 235266) "a") (data (i32.const 235269) "a") (data (i32.const 235272) "a") (data (i32.const 235275) "a") (data (i32.const 235278) "a") (data (i32.const 235281) "a") (data (i32.const 235284) "a") (data (i32.const 235287) "a") (data (i32.const 235290) "a") (data (i32.const 235293) "a") (data (i32.const 235296) "a") (data (i32.const 235299) "a") (data (i32.const 235302) "a") (data (i32.const 235305) "a") (data (i32.const 235308) "a") (data (i32.const 235311) "a") (data (i32.const 235314) "a") (data (i32.const 235317) "a") (data (i32.const 235320) "a") (data (i32.const 235323) "a") (data (i32.const 235326) "a") (data (i32.const 235329) "a") (data (i32.const 235332) "a") (data (i32.const 235335) "a") (data (i32.const 235338) "a") (data (i32.const 235341) "a") (data (i32.const 235344) "a") (data (i32.const 235347) "a") (data (i32.const 235350) "a") (data (i32.const 235353) "a") (data (i32.const 235356) "a") (data (i32.const 235359) "a") (data (i32.const 235362) "a") (data (i32.const 235365) "a") (data (i32.const 235368) "a") (data (i32.const 235371) "a") (data (i32.const 235374) "a") (data (i32.const 235377) "a") (data (i32.const 235380) "a") (data (i32.const 235383) "a") (data (i32.const 235386) "a") (data (i32.const 235389) "a") (data (i32.const 235392) "a") (data (i32.const 235395) "a") (data (i32.const 235398) "a") (data (i32.const 235401) "a") (data (i32.const 235404) "a") (data (i32.const 235407) "a") (data (i32.const 235410) "a") (data (i32.const 235413) "a") (data (i32.const 235416) "a") (data (i32.const 235419) "a") (data (i32.const 235422) "a") (data (i32.const 235425) "a") (data (i32.const 235428) "a") (data (i32.const 235431) "a") (data (i32.const 235434) "a") (data (i32.const 235437) "a") (data (i32.const 235440) "a") (data (i32.const 235443) "a") (data (i32.const 235446) "a") (data (i32.const 235449) "a") (data (i32.const 235452) "a") (data (i32.const 235455) "a") (data (i32.const 235458) "a") (data (i32.const 235461) "a") (data (i32.const 235464) "a") (data (i32.const 235467) "a") (data (i32.const 235470) "a") (data (i32.const 235473) "a") (data (i32.const 235476) "a") (data (i32.const 235479) "a") (data (i32.const 235482) "a") (data (i32.const 235485) "a") (data (i32.const 235488) "a") (data (i32.const 235491) "a") (data (i32.const 235494) "a") (data (i32.const 235497) "a") (data (i32.const 235500) "a") (data (i32.const 235503) "a") (data (i32.const 235506) "a") (data (i32.const 235509) "a") (data (i32.const 235512) "a") (data (i32.const 235515) "a") (data (i32.const 235518) "a") (data (i32.const 235521) "a") (data (i32.const 235524) "a") (data (i32.const 235527) "a") (data (i32.const 235530) "a") (data (i32.const 235533) "a") (data (i32.const 235536) "a") (data (i32.const 235539) "a") (data (i32.const 235542) "a") (data (i32.const 235545) "a") (data (i32.const 235548) "a") (data (i32.const 235551) "a") (data (i32.const 235554) "a") (data (i32.const 235557) "a") (data (i32.const 235560) "a") (data (i32.const 235563) "a") (data (i32.const 235566) "a") (data (i32.const 235569) "a") (data (i32.const 235572) "a") (data (i32.const 235575) "a") (data (i32.const 235578) "a") (data (i32.const 235581) "a") (data (i32.const 235584) "a") (data (i32.const 235587) "a") (data (i32.const 235590) "a") (data (i32.const 235593) "a") (data (i32.const 235596) "a") (data (i32.const 235599) "a") (data (i32.const 235602) "a") (data (i32.const 235605) "a") (data (i32.const 235608) "a") (data (i32.const 235611) "a") (data (i32.const 235614) "a") (data (i32.const 235617) "a") (data (i32.const 235620) "a") (data (i32.const 235623) "a") (data (i32.const 235626) "a") (data (i32.const 235629) "a") (data (i32.const 235632) "a") (data (i32.const 235635) "a") (data (i32.const 235638) "a") (data (i32.const 235641) "a") (data (i32.const 235644) "a") (data (i32.const 235647) "a") (data (i32.const 235650) "a") (data (i32.const 235653) "a") (data (i32.const 235656) "a") (data (i32.const 235659) "a") (data (i32.const 235662) "a") (data (i32.const 235665) "a") (data (i32.const 235668) "a") (data (i32.const 235671) "a") (data (i32.const 235674) "a") (data (i32.const 235677) "a") (data (i32.const 235680) "a") (data (i32.const 235683) "a") (data (i32.const 235686) "a") (data (i32.const 235689) "a") (data (i32.const 235692) "a") (data (i32.const 235695) "a") (data (i32.const 235698) "a") (data (i32.const 235701) "a") (data (i32.const 235704) "a") (data (i32.const 235707) "a") (data (i32.const 235710) "a") (data (i32.const 235713) "a") (data (i32.const 235716) "a") (data (i32.const 235719) "a") (data (i32.const 235722) "a") (data (i32.const 235725) "a") (data (i32.const 235728) "a") (data (i32.const 235731) "a") (data (i32.const 235734) "a") (data (i32.const 235737) "a") (data (i32.const 235740) "a") (data (i32.const 235743) "a") (data (i32.const 235746) "a") (data (i32.const 235749) "a") (data (i32.const 235752) "a") (data (i32.const 235755) "a") (data (i32.const 235758) "a") (data (i32.const 235761) "a") (data (i32.const 235764) "a") (data (i32.const 235767) "a") (data (i32.const 235770) "a") (data (i32.const 235773) "a") (data (i32.const 235776) "a") (data (i32.const 235779) "a") (data (i32.const 235782) "a") (data (i32.const 235785) "a") (data (i32.const 235788) "a") (data (i32.const 235791) "a") (data (i32.const 235794) "a") (data (i32.const 235797) "a") (data (i32.const 235800) "a") (data (i32.const 235803) "a") (data (i32.const 235806) "a") (data (i32.const 235809) "a") (data (i32.const 235812) "a") (data (i32.const 235815) "a") (data (i32.const 235818) "a") (data (i32.const 235821) "a") (data (i32.const 235824) "a") (data (i32.const 235827) "a") (data (i32.const 235830) "a") (data (i32.const 235833) "a") (data (i32.const 235836) "a") (data (i32.const 235839) "a") (data (i32.const 235842) "a") (data (i32.const 235845) "a") (data (i32.const 235848) "a") (data (i32.const 235851) "a") (data (i32.const 235854) "a") (data (i32.const 235857) "a") (data (i32.const 235860) "a") (data (i32.const 235863) "a") (data (i32.const 235866) "a") (data (i32.const 235869) "a") (data (i32.const 235872) "a") (data (i32.const 235875) "a") (data (i32.const 235878) "a") (data (i32.const 235881) "a") (data (i32.const 235884) "a") (data (i32.const 235887) "a") (data (i32.const 235890) "a") (data (i32.const 235893) "a") (data (i32.const 235896) "a") (data (i32.const 235899) "a") (data (i32.const 235902) "a") (data (i32.const 235905) "a") (data (i32.const 235908) "a") (data (i32.const 235911) "a") (data (i32.const 235914) "a") (data (i32.const 235917) "a") (data (i32.const 235920) "a") (data (i32.const 235923) "a") (data (i32.const 235926) "a") (data (i32.const 235929) "a") (data (i32.const 235932) "a") (data (i32.const 235935) "a") (data (i32.const 235938) "a") (data (i32.const 235941) "a") (data (i32.const 235944) "a") (data (i32.const 235947) "a") (data (i32.const 235950) "a") (data (i32.const 235953) "a") (data (i32.const 235956) "a") (data (i32.const 235959) "a") (data (i32.const 235962) "a") (data (i32.const 235965) "a") (data (i32.const 235968) "a") (data (i32.const 235971) "a") (data (i32.const 235974) "a") (data (i32.const 235977) "a") (data (i32.const 235980) "a") (data (i32.const 235983) "a") (data (i32.const 235986) "a") (data (i32.const 235989) "a") (data (i32.const 235992) "a") (data (i32.const 235995) "a") (data (i32.const 235998) "a") (data (i32.const 236001) "a") (data (i32.const 236004) "a") (data (i32.const 236007) "a") (data (i32.const 236010) "a") (data (i32.const 236013) "a") (data (i32.const 236016) "a") (data (i32.const 236019) "a") (data (i32.const 236022) "a") (data (i32.const 236025) "a") (data (i32.const 236028) "a") (data (i32.const 236031) "a") (data (i32.const 236034) "a") (data (i32.const 236037) "a") (data (i32.const 236040) "a") (data (i32.const 236043) "a") (data (i32.const 236046) "a") (data (i32.const 236049) "a") (data (i32.const 236052) "a") (data (i32.const 236055) "a") (data (i32.const 236058) "a") (data (i32.const 236061) "a") (data (i32.const 236064) "a") (data (i32.const 236067) "a") (data (i32.const 236070) "a") (data (i32.const 236073) "a") (data (i32.const 236076) "a") (data (i32.const 236079) "a") (data (i32.const 236082) "a") (data (i32.const 236085) "a") (data (i32.const 236088) "a") (data (i32.const 236091) "a") (data (i32.const 236094) "a") (data (i32.const 236097) "a") (data (i32.const 236100) "a") (data (i32.const 236103) "a") (data (i32.const 236106) "a") (data (i32.const 236109) "a") (data (i32.const 236112) "a") (data (i32.const 236115) "a") (data (i32.const 236118) "a") (data (i32.const 236121) "a") (data (i32.const 236124) "a") (data (i32.const 236127) "a") (data (i32.const 236130) "a") (data (i32.const 236133) "a") (data (i32.const 236136) "a") (data (i32.const 236139) "a") (data (i32.const 236142) "a") (data (i32.const 236145) "a") (data (i32.const 236148) "a") (data (i32.const 236151) "a") (data (i32.const 236154) "a") (data (i32.const 236157) "a") (data (i32.const 236160) "a") (data (i32.const 236163) "a") (data (i32.const 236166) "a") (data (i32.const 236169) "a") (data (i32.const 236172) "a") (data (i32.const 236175) "a") (data (i32.const 236178) "a") (data (i32.const 236181) "a") (data (i32.const 236184) "a") (data (i32.const 236187) "a") (data (i32.const 236190) "a") (data (i32.const 236193) "a") (data (i32.const 236196) "a") (data (i32.const 236199) "a") (data (i32.const 236202) "a") (data (i32.const 236205) "a") (data (i32.const 236208) "a") (data (i32.const 236211) "a") (data (i32.const 236214) "a") (data (i32.const 236217) "a") (data (i32.const 236220) "a") (data (i32.const 236223) "a") (data (i32.const 236226) "a") (data (i32.const 236229) "a") (data (i32.const 236232) "a") (data (i32.const 236235) "a") (data (i32.const 236238) "a") (data (i32.const 236241) "a") (data (i32.const 236244) "a") (data (i32.const 236247) "a") (data (i32.const 236250) "a") (data (i32.const 236253) "a") (data (i32.const 236256) "a") (data (i32.const 236259) "a") (data (i32.const 236262) "a") (data (i32.const 236265) "a") (data (i32.const 236268) "a") (data (i32.const 236271) "a") (data (i32.const 236274) "a") (data (i32.const 236277) "a") (data (i32.const 236280) "a") (data (i32.const 236283) "a") (data (i32.const 236286) "a") (data (i32.const 236289) "a") (data (i32.const 236292) "a") (data (i32.const 236295) "a") (data (i32.const 236298) "a") (data (i32.const 236301) "a") (data (i32.const 236304) "a") (data (i32.const 236307) "a") (data (i32.const 236310) "a") (data (i32.const 236313) "a") (data (i32.const 236316) "a") (data (i32.const 236319) "a") (data (i32.const 236322) "a") (data (i32.const 236325) "a") (data (i32.const 236328) "a") (data (i32.const 236331) "a") (data (i32.const 236334) "a") (data (i32.const 236337) "a") (data (i32.const 236340) "a") (data (i32.const 236343) "a") (data (i32.const 236346) "a") (data (i32.const 236349) "a") (data (i32.const 236352) "a") (data (i32.const 236355) "a") (data (i32.const 236358) "a") (data (i32.const 236361) "a") (data (i32.const 236364) "a") (data (i32.const 236367) "a") (data (i32.const 236370) "a") (data (i32.const 236373) "a") (data (i32.const 236376) "a") (data (i32.const 236379) "a") (data (i32.const 236382) "a") (data (i32.const 236385) "a") (data (i32.const 236388) "a") (data (i32.const 236391) "a") (data (i32.const 236394) "a") (data (i32.const 236397) "a") (data (i32.const 236400) "a") (data (i32.const 236403) "a") (data (i32.const 236406) "a") (data (i32.const 236409) "a") (data (i32.const 236412) "a") (data (i32.const 236415) "a") (data (i32.const 236418) "a") (data (i32.const 236421) "a") (data (i32.const 236424) "a") (data (i32.const 236427) "a") (data (i32.const 236430) "a") (data (i32.const 236433) "a") (data (i32.const 236436) "a") (data (i32.const 236439) "a") (data (i32.const 236442) "a") (data (i32.const 236445) "a") (data (i32.const 236448) "a") (data (i32.const 236451) "a") (data (i32.const 236454) "a") (data (i32.const 236457) "a") (data (i32.const 236460) "a") (data (i32.const 236463) "a") (data (i32.const 236466) "a") (data (i32.const 236469) "a") (data (i32.const 236472) "a") (data (i32.const 236475) "a") (data (i32.const 236478) "a") (data (i32.const 236481) "a") (data (i32.const 236484) "a") (data (i32.const 236487) "a") (data (i32.const 236490) "a") (data (i32.const 236493) "a") (data (i32.const 236496) "a") (data (i32.const 236499) "a") (data (i32.const 236502) "a") (data (i32.const 236505) "a") (data (i32.const 236508) "a") (data (i32.const 236511) "a") (data (i32.const 236514) "a") (data (i32.const 236517) "a") (data (i32.const 236520) "a") (data (i32.const 236523) "a") (data (i32.const 236526) "a") (data (i32.const 236529) "a") (data (i32.const 236532) "a") (data (i32.const 236535) "a") (data (i32.const 236538) "a") (data (i32.const 236541) "a") (data (i32.const 236544) "a") (data (i32.const 236547) "a") (data (i32.const 236550) "a") (data (i32.const 236553) "a") (data (i32.const 236556) "a") (data (i32.const 236559) "a") (data (i32.const 236562) "a") (data (i32.const 236565) "a") (data (i32.const 236568) "a") (data (i32.const 236571) "a") (data (i32.const 236574) "a") (data (i32.const 236577) "a") (data (i32.const 236580) "a") (data (i32.const 236583) "a") (data (i32.const 236586) "a") (data (i32.const 236589) "a") (data (i32.const 236592) "a") (data (i32.const 236595) "a") (data (i32.const 236598) "a") (data (i32.const 236601) "a") (data (i32.const 236604) "a") (data (i32.const 236607) "a") (data (i32.const 236610) "a") (data (i32.const 236613) "a") (data (i32.const 236616) "a") (data (i32.const 236619) "a") (data (i32.const 236622) "a") (data (i32.const 236625) "a") (data (i32.const 236628) "a") (data (i32.const 236631) "a") (data (i32.const 236634) "a") (data (i32.const 236637) "a") (data (i32.const 236640) "a") (data (i32.const 236643) "a") (data (i32.const 236646) "a") (data (i32.const 236649) "a") (data (i32.const 236652) "a") (data (i32.const 236655) "a") (data (i32.const 236658) "a") (data (i32.const 236661) "a") (data (i32.const 236664) "a") (data (i32.const 236667) "a") (data (i32.const 236670) "a") (data (i32.const 236673) "a") (data (i32.const 236676) "a") (data (i32.const 236679) "a") (data (i32.const 236682) "a") (data (i32.const 236685) "a") (data (i32.const 236688) "a") (data (i32.const 236691) "a") (data (i32.const 236694) "a") (data (i32.const 236697) "a") (data (i32.const 236700) "a") (data (i32.const 236703) "a") (data (i32.const 236706) "a") (data (i32.const 236709) "a") (data (i32.const 236712) "a") (data (i32.const 236715) "a") (data (i32.const 236718) "a") (data (i32.const 236721) "a") (data (i32.const 236724) "a") (data (i32.const 236727) "a") (data (i32.const 236730) "a") (data (i32.const 236733) "a") (data (i32.const 236736) "a") (data (i32.const 236739) "a") (data (i32.const 236742) "a") (data (i32.const 236745) "a") (data (i32.const 236748) "a") (data (i32.const 236751) "a") (data (i32.const 236754) "a") (data (i32.const 236757) "a") (data (i32.const 236760) "a") (data (i32.const 236763) "a") (data (i32.const 236766) "a") (data (i32.const 236769) "a") (data (i32.const 236772) "a") (data (i32.const 236775) "a") (data (i32.const 236778) "a") (data (i32.const 236781) "a") (data (i32.const 236784) "a") (data (i32.const 236787) "a") (data (i32.const 236790) "a") (data (i32.const 236793) "a") (data (i32.const 236796) "a") (data (i32.const 236799) "a") (data (i32.const 236802) "a") (data (i32.const 236805) "a") (data (i32.const 236808) "a") (data (i32.const 236811) "a") (data (i32.const 236814) "a") (data (i32.const 236817) "a") (data (i32.const 236820) "a") (data (i32.const 236823) "a") (data (i32.const 236826) "a") (data (i32.const 236829) "a") (data (i32.const 236832) "a") (data (i32.const 236835) "a") (data (i32.const 236838) "a") (data (i32.const 236841) "a") (data (i32.const 236844) "a") (data (i32.const 236847) "a") (data (i32.const 236850) "a") (data (i32.const 236853) "a") (data (i32.const 236856) "a") (data (i32.const 236859) "a") (data (i32.const 236862) "a") (data (i32.const 236865) "a") (data (i32.const 236868) "a") (data (i32.const 236871) "a") (data (i32.const 236874) "a") (data (i32.const 236877) "a") (data (i32.const 236880) "a") (data (i32.const 236883) "a") (data (i32.const 236886) "a") (data (i32.const 236889) "a") (data (i32.const 236892) "a") (data (i32.const 236895) "a") (data (i32.const 236898) "a") (data (i32.const 236901) "a") (data (i32.const 236904) "a") (data (i32.const 236907) "a") (data (i32.const 236910) "a") (data (i32.const 236913) "a") (data (i32.const 236916) "a") (data (i32.const 236919) "a") (data (i32.const 236922) "a") (data (i32.const 236925) "a") (data (i32.const 236928) "a") (data (i32.const 236931) "a") (data (i32.const 236934) "a") (data (i32.const 236937) "a") (data (i32.const 236940) "a") (data (i32.const 236943) "a") (data (i32.const 236946) "a") (data (i32.const 236949) "a") (data (i32.const 236952) "a") (data (i32.const 236955) "a") (data (i32.const 236958) "a") (data (i32.const 236961) "a") (data (i32.const 236964) "a") (data (i32.const 236967) "a") (data (i32.const 236970) "a") (data (i32.const 236973) "a") (data (i32.const 236976) "a") (data (i32.const 236979) "a") (data (i32.const 236982) "a") (data (i32.const 236985) "a") (data (i32.const 236988) "a") (data (i32.const 236991) "a") (data (i32.const 236994) "a") (data (i32.const 236997) "a") (data (i32.const 237000) "a") (data (i32.const 237003) "a") (data (i32.const 237006) "a") (data (i32.const 237009) "a") (data (i32.const 237012) "a") (data (i32.const 237015) "a") (data (i32.const 237018) "a") (data (i32.const 237021) "a") (data (i32.const 237024) "a") (data (i32.const 237027) "a") (data (i32.const 237030) "a") (data (i32.const 237033) "a") (data (i32.const 237036) "a") (data (i32.const 237039) "a") (data (i32.const 237042) "a") (data (i32.const 237045) "a") (data (i32.const 237048) "a") (data (i32.const 237051) "a") (data (i32.const 237054) "a") (data (i32.const 237057) "a") (data (i32.const 237060) "a") (data (i32.const 237063) "a") (data (i32.const 237066) "a") (data (i32.const 237069) "a") (data (i32.const 237072) "a") (data (i32.const 237075) "a") (data (i32.const 237078) "a") (data (i32.const 237081) "a") (data (i32.const 237084) "a") (data (i32.const 237087) "a") (data (i32.const 237090) "a") (data (i32.const 237093) "a") (data (i32.const 237096) "a") (data (i32.const 237099) "a") (data (i32.const 237102) "a") (data (i32.const 237105) "a") (data (i32.const 237108) "a") (data (i32.const 237111) "a") (data (i32.const 237114) "a") (data (i32.const 237117) "a") (data (i32.const 237120) "a") (data (i32.const 237123) "a") (data (i32.const 237126) "a") (data (i32.const 237129) "a") (data (i32.const 237132) "a") (data (i32.const 237135) "a") (data (i32.const 237138) "a") (data (i32.const 237141) "a") (data (i32.const 237144) "a") (data (i32.const 237147) "a") (data (i32.const 237150) "a") (data (i32.const 237153) "a") (data (i32.const 237156) "a") (data (i32.const 237159) "a") (data (i32.const 237162) "a") (data (i32.const 237165) "a") (data (i32.const 237168) "a") (data (i32.const 237171) "a") (data (i32.const 237174) "a") (data (i32.const 237177) "a") (data (i32.const 237180) "a") (data (i32.const 237183) "a") (data (i32.const 237186) "a") (data (i32.const 237189) "a") (data (i32.const 237192) "a") (data (i32.const 237195) "a") (data (i32.const 237198) "a") (data (i32.const 237201) "a") (data (i32.const 237204) "a") (data (i32.const 237207) "a") (data (i32.const 237210) "a") (data (i32.const 237213) "a") (data (i32.const 237216) "a") (data (i32.const 237219) "a") (data (i32.const 237222) "a") (data (i32.const 237225) "a") (data (i32.const 237228) "a") (data (i32.const 237231) "a") (data (i32.const 237234) "a") (data (i32.const 237237) "a") (data (i32.const 237240) "a") (data (i32.const 237243) "a") (data (i32.const 237246) "a") (data (i32.const 237249) "a") (data (i32.const 237252) "a") (data (i32.const 237255) "a") (data (i32.const 237258) "a") (data (i32.const 237261) "a") (data (i32.const 237264) "a") (data (i32.const 237267) "a") (data (i32.const 237270) "a") (data (i32.const 237273) "a") (data (i32.const 237276) "a") (data (i32.const 237279) "a") (data (i32.const 237282) "a") (data (i32.const 237285) "a") (data (i32.const 237288) "a") (data (i32.const 237291) "a") (data (i32.const 237294) "a") (data (i32.const 237297) "a") (data (i32.const 237300) "a") (data (i32.const 237303) "a") (data (i32.const 237306) "a") (data (i32.const 237309) "a") (data (i32.const 237312) "a") (data (i32.const 237315) "a") (data (i32.const 237318) "a") (data (i32.const 237321) "a") (data (i32.const 237324) "a") (data (i32.const 237327) "a") (data (i32.const 237330) "a") (data (i32.const 237333) "a") (data (i32.const 237336) "a") (data (i32.const 237339) "a") (data (i32.const 237342) "a") (data (i32.const 237345) "a") (data (i32.const 237348) "a") (data (i32.const 237351) "a") (data (i32.const 237354) "a") (data (i32.const 237357) "a") (data (i32.const 237360) "a") (data (i32.const 237363) "a") (data (i32.const 237366) "a") (data (i32.const 237369) "a") (data (i32.const 237372) "a") (data (i32.const 237375) "a") (data (i32.const 237378) "a") (data (i32.const 237381) "a") (data (i32.const 237384) "a") (data (i32.const 237387) "a") (data (i32.const 237390) "a") (data (i32.const 237393) "a") (data (i32.const 237396) "a") (data (i32.const 237399) "a") (data (i32.const 237402) "a") (data (i32.const 237405) "a") (data (i32.const 237408) "a") (data (i32.const 237411) "a") (data (i32.const 237414) "a") (data (i32.const 237417) "a") (data (i32.const 237420) "a") (data (i32.const 237423) "a") (data (i32.const 237426) "a") (data (i32.const 237429) "a") (data (i32.const 237432) "a") (data (i32.const 237435) "a") (data (i32.const 237438) "a") (data (i32.const 237441) "a") (data (i32.const 237444) "a") (data (i32.const 237447) "a") (data (i32.const 237450) "a") (data (i32.const 237453) "a") (data (i32.const 237456) "a") (data (i32.const 237459) "a") (data (i32.const 237462) "a") (data (i32.const 237465) "a") (data (i32.const 237468) "a") (data (i32.const 237471) "a") (data (i32.const 237474) "a") (data (i32.const 237477) "a") (data (i32.const 237480) "a") (data (i32.const 237483) "a") (data (i32.const 237486) "a") (data (i32.const 237489) "a") (data (i32.const 237492) "a") (data (i32.const 237495) "a") (data (i32.const 237498) "a") (data (i32.const 237501) "a") (data (i32.const 237504) "a") (data (i32.const 237507) "a") (data (i32.const 237510) "a") (data (i32.const 237513) "a") (data (i32.const 237516) "a") (data (i32.const 237519) "a") (data (i32.const 237522) "a") (data (i32.const 237525) "a") (data (i32.const 237528) "a") (data (i32.const 237531) "a") (data (i32.const 237534) "a") (data (i32.const 237537) "a") (data (i32.const 237540) "a") (data (i32.const 237543) "a") (data (i32.const 237546) "a") (data (i32.const 237549) "a") (data (i32.const 237552) "a") (data (i32.const 237555) "a") (data (i32.const 237558) "a") (data (i32.const 237561) "a") (data (i32.const 237564) "a") (data (i32.const 237567) "a") (data (i32.const 237570) "a") (data (i32.const 237573) "a") (data (i32.const 237576) "a") (data (i32.const 237579) "a") (data (i32.const 237582) "a") (data (i32.const 237585) "a") (data (i32.const 237588) "a") (data (i32.const 237591) "a") (data (i32.const 237594) "a") (data (i32.const 237597) "a") (data (i32.const 237600) "a") (data (i32.const 237603) "a") (data (i32.const 237606) "a") (data (i32.const 237609) "a") (data (i32.const 237612) "a") (data (i32.const 237615) "a") (data (i32.const 237618) "a") (data (i32.const 237621) "a") (data (i32.const 237624) "a") (data (i32.const 237627) "a") (data (i32.const 237630) "a") (data (i32.const 237633) "a") (data (i32.const 237636) "a") (data (i32.const 237639) "a") (data (i32.const 237642) "a") (data (i32.const 237645) "a") (data (i32.const 237648) "a") (data (i32.const 237651) "a") (data (i32.const 237654) "a") (data (i32.const 237657) "a") (data (i32.const 237660) "a") (data (i32.const 237663) "a") (data (i32.const 237666) "a") (data (i32.const 237669) "a") (data (i32.const 237672) "a") (data (i32.const 237675) "a") (data (i32.const 237678) "a") (data (i32.const 237681) "a") (data (i32.const 237684) "a") (data (i32.const 237687) "a") (data (i32.const 237690) "a") (data (i32.const 237693) "a") (data (i32.const 237696) "a") (data (i32.const 237699) "a") (data (i32.const 237702) "a") (data (i32.const 237705) "a") (data (i32.const 237708) "a") (data (i32.const 237711) "a") (data (i32.const 237714) "a") (data (i32.const 237717) "a") (data (i32.const 237720) "a") (data (i32.const 237723) "a") (data (i32.const 237726) "a") (data (i32.const 237729) "a") (data (i32.const 237732) "a") (data (i32.const 237735) "a") (data (i32.const 237738) "a") (data (i32.const 237741) "a") (data (i32.const 237744) "a") (data (i32.const 237747) "a") (data (i32.const 237750) "a") (data (i32.const 237753) "a") (data (i32.const 237756) "a") (data (i32.const 237759) "a") (data (i32.const 237762) "a") (data (i32.const 237765) "a") (data (i32.const 237768) "a") (data (i32.const 237771) "a") (data (i32.const 237774) "a") (data (i32.const 237777) "a") (data (i32.const 237780) "a") (data (i32.const 237783) "a") (data (i32.const 237786) "a") (data (i32.const 237789) "a") (data (i32.const 237792) "a") (data (i32.const 237795) "a") (data (i32.const 237798) "a") (data (i32.const 237801) "a") (data (i32.const 237804) "a") (data (i32.const 237807) "a") (data (i32.const 237810) "a") (data (i32.const 237813) "a") (data (i32.const 237816) "a") (data (i32.const 237819) "a") (data (i32.const 237822) "a") (data (i32.const 237825) "a") (data (i32.const 237828) "a") (data (i32.const 237831) "a") (data (i32.const 237834) "a") (data (i32.const 237837) "a") (data (i32.const 237840) "a") (data (i32.const 237843) "a") (data (i32.const 237846) "a") (data (i32.const 237849) "a") (data (i32.const 237852) "a") (data (i32.const 237855) "a") (data (i32.const 237858) "a") (data (i32.const 237861) "a") (data (i32.const 237864) "a") (data (i32.const 237867) "a") (data (i32.const 237870) "a") (data (i32.const 237873) "a") (data (i32.const 237876) "a") (data (i32.const 237879) "a") (data (i32.const 237882) "a") (data (i32.const 237885) "a") (data (i32.const 237888) "a") (data (i32.const 237891) "a") (data (i32.const 237894) "a") (data (i32.const 237897) "a") (data (i32.const 237900) "a") (data (i32.const 237903) "a") (data (i32.const 237906) "a") (data (i32.const 237909) "a") (data (i32.const 237912) "a") (data (i32.const 237915) "a") (data (i32.const 237918) "a") (data (i32.const 237921) "a") (data (i32.const 237924) "a") (data (i32.const 237927) "a") (data (i32.const 237930) "a") (data (i32.const 237933) "a") (data (i32.const 237936) "a") (data (i32.const 237939) "a") (data (i32.const 237942) "a") (data (i32.const 237945) "a") (data (i32.const 237948) "a") (data (i32.const 237951) "a") (data (i32.const 237954) "a") (data (i32.const 237957) "a") (data (i32.const 237960) "a") (data (i32.const 237963) "a") (data (i32.const 237966) "a") (data (i32.const 237969) "a") (data (i32.const 237972) "a") (data (i32.const 237975) "a") (data (i32.const 237978) "a") (data (i32.const 237981) "a") (data (i32.const 237984) "a") (data (i32.const 237987) "a") (data (i32.const 237990) "a") (data (i32.const 237993) "a") (data (i32.const 237996) "a") (data (i32.const 237999) "a") (data (i32.const 238002) "a") (data (i32.const 238005) "a") (data (i32.const 238008) "a") (data (i32.const 238011) "a") (data (i32.const 238014) "a") (data (i32.const 238017) "a") (data (i32.const 238020) "a") (data (i32.const 238023) "a") (data (i32.const 238026) "a") (data (i32.const 238029) "a") (data (i32.const 238032) "a") (data (i32.const 238035) "a") (data (i32.const 238038) "a") (data (i32.const 238041) "a") (data (i32.const 238044) "a") (data (i32.const 238047) "a") (data (i32.const 238050) "a") (data (i32.const 238053) "a") (data (i32.const 238056) "a") (data (i32.const 238059) "a") (data (i32.const 238062) "a") (data (i32.const 238065) "a") (data (i32.const 238068) "a") (data (i32.const 238071) "a") (data (i32.const 238074) "a") (data (i32.const 238077) "a") (data (i32.const 238080) "a") (data (i32.const 238083) "a") (data (i32.const 238086) "a") (data (i32.const 238089) "a") (data (i32.const 238092) "a") (data (i32.const 238095) "a") (data (i32.const 238098) "a") (data (i32.const 238101) "a") (data (i32.const 238104) "a") (data (i32.const 238107) "a") (data (i32.const 238110) "a") (data (i32.const 238113) "a") (data (i32.const 238116) "a") (data (i32.const 238119) "a") (data (i32.const 238122) "a") (data (i32.const 238125) "a") (data (i32.const 238128) "a") (data (i32.const 238131) "a") (data (i32.const 238134) "a") (data (i32.const 238137) "a") (data (i32.const 238140) "a") (data (i32.const 238143) "a") (data (i32.const 238146) "a") (data (i32.const 238149) "a") (data (i32.const 238152) "a") (data (i32.const 238155) "a") (data (i32.const 238158) "a") (data (i32.const 238161) "a") (data (i32.const 238164) "a") (data (i32.const 238167) "a") (data (i32.const 238170) "a") (data (i32.const 238173) "a") (data (i32.const 238176) "a") (data (i32.const 238179) "a") (data (i32.const 238182) "a") (data (i32.const 238185) "a") (data (i32.const 238188) "a") (data (i32.const 238191) "a") (data (i32.const 238194) "a") (data (i32.const 238197) "a") (data (i32.const 238200) "a") (data (i32.const 238203) "a") (data (i32.const 238206) "a") (data (i32.const 238209) "a") (data (i32.const 238212) "a") (data (i32.const 238215) "a") (data (i32.const 238218) "a") (data (i32.const 238221) "a") (data (i32.const 238224) "a") (data (i32.const 238227) "a") (data (i32.const 238230) "a") (data (i32.const 238233) "a") (data (i32.const 238236) "a") (data (i32.const 238239) "a") (data (i32.const 238242) "a") (data (i32.const 238245) "a") (data (i32.const 238248) "a") (data (i32.const 238251) "a") (data (i32.const 238254) "a") (data (i32.const 238257) "a") (data (i32.const 238260) "a") (data (i32.const 238263) "a") (data (i32.const 238266) "a") (data (i32.const 238269) "a") (data (i32.const 238272) "a") (data (i32.const 238275) "a") (data (i32.const 238278) "a") (data (i32.const 238281) "a") (data (i32.const 238284) "a") (data (i32.const 238287) "a") (data (i32.const 238290) "a") (data (i32.const 238293) "a") (data (i32.const 238296) "a") (data (i32.const 238299) "a") (data (i32.const 238302) "a") (data (i32.const 238305) "a") (data (i32.const 238308) "a") (data (i32.const 238311) "a") (data (i32.const 238314) "a") (data (i32.const 238317) "a") (data (i32.const 238320) "a") (data (i32.const 238323) "a") (data (i32.const 238326) "a") (data (i32.const 238329) "a") (data (i32.const 238332) "a") (data (i32.const 238335) "a") (data (i32.const 238338) "a") (data (i32.const 238341) "a") (data (i32.const 238344) "a") (data (i32.const 238347) "a") (data (i32.const 238350) "a") (data (i32.const 238353) "a") (data (i32.const 238356) "a") (data (i32.const 238359) "a") (data (i32.const 238362) "a") (data (i32.const 238365) "a") (data (i32.const 238368) "a") (data (i32.const 238371) "a") (data (i32.const 238374) "a") (data (i32.const 238377) "a") (data (i32.const 238380) "a") (data (i32.const 238383) "a") (data (i32.const 238386) "a") (data (i32.const 238389) "a") (data (i32.const 238392) "a") (data (i32.const 238395) "a") (data (i32.const 238398) "a") (data (i32.const 238401) "a") (data (i32.const 238404) "a") (data (i32.const 238407) "a") (data (i32.const 238410) "a") (data (i32.const 238413) "a") (data (i32.const 238416) "a") (data (i32.const 238419) "a") (data (i32.const 238422) "a") (data (i32.const 238425) "a") (data (i32.const 238428) "a") (data (i32.const 238431) "a") (data (i32.const 238434) "a") (data (i32.const 238437) "a") (data (i32.const 238440) "a") (data (i32.const 238443) "a") (data (i32.const 238446) "a") (data (i32.const 238449) "a") (data (i32.const 238452) "a") (data (i32.const 238455) "a") (data (i32.const 238458) "a") (data (i32.const 238461) "a") (data (i32.const 238464) "a") (data (i32.const 238467) "a") (data (i32.const 238470) "a") (data (i32.const 238473) "a") (data (i32.const 238476) "a") (data (i32.const 238479) "a") (data (i32.const 238482) "a") (data (i32.const 238485) "a") (data (i32.const 238488) "a") (data (i32.const 238491) "a") (data (i32.const 238494) "a") (data (i32.const 238497) "a") (data (i32.const 238500) "a") (data (i32.const 238503) "a") (data (i32.const 238506) "a") (data (i32.const 238509) "a") (data (i32.const 238512) "a") (data (i32.const 238515) "a") (data (i32.const 238518) "a") (data (i32.const 238521) "a") (data (i32.const 238524) "a") (data (i32.const 238527) "a") (data (i32.const 238530) "a") (data (i32.const 238533) "a") (data (i32.const 238536) "a") (data (i32.const 238539) "a") (data (i32.const 238542) "a") (data (i32.const 238545) "a") (data (i32.const 238548) "a") (data (i32.const 238551) "a") (data (i32.const 238554) "a") (data (i32.const 238557) "a") (data (i32.const 238560) "a") (data (i32.const 238563) "a") (data (i32.const 238566) "a") (data (i32.const 238569) "a") (data (i32.const 238572) "a") (data (i32.const 238575) "a") (data (i32.const 238578) "a") (data (i32.const 238581) "a") (data (i32.const 238584) "a") (data (i32.const 238587) "a") (data (i32.const 238590) "a") (data (i32.const 238593) "a") (data (i32.const 238596) "a") (data (i32.const 238599) "a") (data (i32.const 238602) "a") (data (i32.const 238605) "a") (data (i32.const 238608) "a") (data (i32.const 238611) "a") (data (i32.const 238614) "a") (data (i32.const 238617) "a") (data (i32.const 238620) "a") (data (i32.const 238623) "a") (data (i32.const 238626) "a") (data (i32.const 238629) "a") (data (i32.const 238632) "a") (data (i32.const 238635) "a") (data (i32.const 238638) "a") (data (i32.const 238641) "a") (data (i32.const 238644) "a") (data (i32.const 238647) "a") (data (i32.const 238650) "a") (data (i32.const 238653) "a") (data (i32.const 238656) "a") (data (i32.const 238659) "a") (data (i32.const 238662) "a") (data (i32.const 238665) "a") (data (i32.const 238668) "a") (data (i32.const 238671) "a") (data (i32.const 238674) "a") (data (i32.const 238677) "a") (data (i32.const 238680) "a") (data (i32.const 238683) "a") (data (i32.const 238686) "a") (data (i32.const 238689) "a") (data (i32.const 238692) "a") (data (i32.const 238695) "a") (data (i32.const 238698) "a") (data (i32.const 238701) "a") (data (i32.const 238704) "a") (data (i32.const 238707) "a") (data (i32.const 238710) "a") (data (i32.const 238713) "a") (data (i32.const 238716) "a") (data (i32.const 238719) "a") (data (i32.const 238722) "a") (data (i32.const 238725) "a") (data (i32.const 238728) "a") (data (i32.const 238731) "a") (data (i32.const 238734) "a") (data (i32.const 238737) "a") (data (i32.const 238740) "a") (data (i32.const 238743) "a") (data (i32.const 238746) "a") (data (i32.const 238749) "a") (data (i32.const 238752) "a") (data (i32.const 238755) "a") (data (i32.const 238758) "a") (data (i32.const 238761) "a") (data (i32.const 238764) "a") (data (i32.const 238767) "a") (data (i32.const 238770) "a") (data (i32.const 238773) "a") (data (i32.const 238776) "a") (data (i32.const 238779) "a") (data (i32.const 238782) "a") (data (i32.const 238785) "a") (data (i32.const 238788) "a") (data (i32.const 238791) "a") (data (i32.const 238794) "a") (data (i32.const 238797) "a") (data (i32.const 238800) "a") (data (i32.const 238803) "a") (data (i32.const 238806) "a") (data (i32.const 238809) "a") (data (i32.const 238812) "a") (data (i32.const 238815) "a") (data (i32.const 238818) "a") (data (i32.const 238821) "a") (data (i32.const 238824) "a") (data (i32.const 238827) "a") (data (i32.const 238830) "a") (data (i32.const 238833) "a") (data (i32.const 238836) "a") (data (i32.const 238839) "a") (data (i32.const 238842) "a") (data (i32.const 238845) "a") (data (i32.const 238848) "a") (data (i32.const 238851) "a") (data (i32.const 238854) "a") (data (i32.const 238857) "a") (data (i32.const 238860) "a") (data (i32.const 238863) "a") (data (i32.const 238866) "a") (data (i32.const 238869) "a") (data (i32.const 238872) "a") (data (i32.const 238875) "a") (data (i32.const 238878) "a") (data (i32.const 238881) "a") (data (i32.const 238884) "a") (data (i32.const 238887) "a") (data (i32.const 238890) "a") (data (i32.const 238893) "a") (data (i32.const 238896) "a") (data (i32.const 238899) "a") (data (i32.const 238902) "a") (data (i32.const 238905) "a") (data (i32.const 238908) "a") (data (i32.const 238911) "a") (data (i32.const 238914) "a") (data (i32.const 238917) "a") (data (i32.const 238920) "a") (data (i32.const 238923) "a") (data (i32.const 238926) "a") (data (i32.const 238929) "a") (data (i32.const 238932) "a") (data (i32.const 238935) "a") (data (i32.const 238938) "a") (data (i32.const 238941) "a") (data (i32.const 238944) "a") (data (i32.const 238947) "a") (data (i32.const 238950) "a") (data (i32.const 238953) "a") (data (i32.const 238956) "a") (data (i32.const 238959) "a") (data (i32.const 238962) "a") (data (i32.const 238965) "a") (data (i32.const 238968) "a") (data (i32.const 238971) "a") (data (i32.const 238974) "a") (data (i32.const 238977) "a") (data (i32.const 238980) "a") (data (i32.const 238983) "a") (data (i32.const 238986) "a") (data (i32.const 238989) "a") (data (i32.const 238992) "a") (data (i32.const 238995) "a") (data (i32.const 238998) "a") (data (i32.const 239001) "a") (data (i32.const 239004) "a") (data (i32.const 239007) "a") (data (i32.const 239010) "a") (data (i32.const 239013) "a") (data (i32.const 239016) "a") (data (i32.const 239019) "a") (data (i32.const 239022) "a") (data (i32.const 239025) "a") (data (i32.const 239028) "a") (data (i32.const 239031) "a") (data (i32.const 239034) "a") (data (i32.const 239037) "a") (data (i32.const 239040) "a") (data (i32.const 239043) "a") (data (i32.const 239046) "a") (data (i32.const 239049) "a") (data (i32.const 239052) "a") (data (i32.const 239055) "a") (data (i32.const 239058) "a") (data (i32.const 239061) "a") (data (i32.const 239064) "a") (data (i32.const 239067) "a") (data (i32.const 239070) "a") (data (i32.const 239073) "a") (data (i32.const 239076) "a") (data (i32.const 239079) "a") (data (i32.const 239082) "a") (data (i32.const 239085) "a") (data (i32.const 239088) "a") (data (i32.const 239091) "a") (data (i32.const 239094) "a") (data (i32.const 239097) "a") (data (i32.const 239100) "a") (data (i32.const 239103) "a") (data (i32.const 239106) "a") (data (i32.const 239109) "a") (data (i32.const 239112) "a") (data (i32.const 239115) "a") (data (i32.const 239118) "a") (data (i32.const 239121) "a") (data (i32.const 239124) "a") (data (i32.const 239127) "a") (data (i32.const 239130) "a") (data (i32.const 239133) "a") (data (i32.const 239136) "a") (data (i32.const 239139) "a") (data (i32.const 239142) "a") (data (i32.const 239145) "a") (data (i32.const 239148) "a") (data (i32.const 239151) "a") (data (i32.const 239154) "a") (data (i32.const 239157) "a") (data (i32.const 239160) "a") (data (i32.const 239163) "a") (data (i32.const 239166) "a") (data (i32.const 239169) "a") (data (i32.const 239172) "a") (data (i32.const 239175) "a") (data (i32.const 239178) "a") (data (i32.const 239181) "a") (data (i32.const 239184) "a") (data (i32.const 239187) "a") (data (i32.const 239190) "a") (data (i32.const 239193) "a") (data (i32.const 239196) "a") (data (i32.const 239199) "a") (data (i32.const 239202) "a") (data (i32.const 239205) "a") (data (i32.const 239208) "a") (data (i32.const 239211) "a") (data (i32.const 239214) "a") (data (i32.const 239217) "a") (data (i32.const 239220) "a") (data (i32.const 239223) "a") (data (i32.const 239226) "a") (data (i32.const 239229) "a") (data (i32.const 239232) "a") (data (i32.const 239235) "a") (data (i32.const 239238) "a") (data (i32.const 239241) "a") (data (i32.const 239244) "a") (data (i32.const 239247) "a") (data (i32.const 239250) "a") (data (i32.const 239253) "a") (data (i32.const 239256) "a") (data (i32.const 239259) "a") (data (i32.const 239262) "a") (data (i32.const 239265) "a") (data (i32.const 239268) "a") (data (i32.const 239271) "a") (data (i32.const 239274) "a") (data (i32.const 239277) "a") (data (i32.const 239280) "a") (data (i32.const 239283) "a") (data (i32.const 239286) "a") (data (i32.const 239289) "a") (data (i32.const 239292) "a") (data (i32.const 239295) "a") (data (i32.const 239298) "a") (data (i32.const 239301) "a") (data (i32.const 239304) "a") (data (i32.const 239307) "a") (data (i32.const 239310) "a") (data (i32.const 239313) "a") (data (i32.const 239316) "a") (data (i32.const 239319) "a") (data (i32.const 239322) "a") (data (i32.const 239325) "a") (data (i32.const 239328) "a") (data (i32.const 239331) "a") (data (i32.const 239334) "a") (data (i32.const 239337) "a") (data (i32.const 239340) "a") (data (i32.const 239343) "a") (data (i32.const 239346) "a") (data (i32.const 239349) "a") (data (i32.const 239352) "a") (data (i32.const 239355) "a") (data (i32.const 239358) "a") (data (i32.const 239361) "a") (data (i32.const 239364) "a") (data (i32.const 239367) "a") (data (i32.const 239370) "a") (data (i32.const 239373) "a") (data (i32.const 239376) "a") (data (i32.const 239379) "a") (data (i32.const 239382) "a") (data (i32.const 239385) "a") (data (i32.const 239388) "a") (data (i32.const 239391) "a") (data (i32.const 239394) "a") (data (i32.const 239397) "a") (data (i32.const 239400) "a") (data (i32.const 239403) "a") (data (i32.const 239406) "a") (data (i32.const 239409) "a") (data (i32.const 239412) "a") (data (i32.const 239415) "a") (data (i32.const 239418) "a") (data (i32.const 239421) "a") (data (i32.const 239424) "a") (data (i32.const 239427) "a") (data (i32.const 239430) "a") (data (i32.const 239433) "a") (data (i32.const 239436) "a") (data (i32.const 239439) "a") (data (i32.const 239442) "a") (data (i32.const 239445) "a") (data (i32.const 239448) "a") (data (i32.const 239451) "a") (data (i32.const 239454) "a") (data (i32.const 239457) "a") (data (i32.const 239460) "a") (data (i32.const 239463) "a") (data (i32.const 239466) "a") (data (i32.const 239469) "a") (data (i32.const 239472) "a") (data (i32.const 239475) "a") (data (i32.const 239478) "a") (data (i32.const 239481) "a") (data (i32.const 239484) "a") (data (i32.const 239487) "a") (data (i32.const 239490) "a") (data (i32.const 239493) "a") (data (i32.const 239496) "a") (data (i32.const 239499) "a") (data (i32.const 239502) "a") (data (i32.const 239505) "a") (data (i32.const 239508) "a") (data (i32.const 239511) "a") (data (i32.const 239514) "a") (data (i32.const 239517) "a") (data (i32.const 239520) "a") (data (i32.const 239523) "a") (data (i32.const 239526) "a") (data (i32.const 239529) "a") (data (i32.const 239532) "a") (data (i32.const 239535) "a") (data (i32.const 239538) "a") (data (i32.const 239541) "a") (data (i32.const 239544) "a") (data (i32.const 239547) "a") (data (i32.const 239550) "a") (data (i32.const 239553) "a") (data (i32.const 239556) "a") (data (i32.const 239559) "a") (data (i32.const 239562) "a") (data (i32.const 239565) "a") (data (i32.const 239568) "a") (data (i32.const 239571) "a") (data (i32.const 239574) "a") (data (i32.const 239577) "a") (data (i32.const 239580) "a") (data (i32.const 239583) "a") (data (i32.const 239586) "a") (data (i32.const 239589) "a") (data (i32.const 239592) "a") (data (i32.const 239595) "a") (data (i32.const 239598) "a") (data (i32.const 239601) "a") (data (i32.const 239604) "a") (data (i32.const 239607) "a") (data (i32.const 239610) "a") (data (i32.const 239613) "a") (data (i32.const 239616) "a") (data (i32.const 239619) "a") (data (i32.const 239622) "a") (data (i32.const 239625) "a") (data (i32.const 239628) "a") (data (i32.const 239631) "a") (data (i32.const 239634) "a") (data (i32.const 239637) "a") (data (i32.const 239640) "a") (data (i32.const 239643) "a") (data (i32.const 239646) "a") (data (i32.const 239649) "a") (data (i32.const 239652) "a") (data (i32.const 239655) "a") (data (i32.const 239658) "a") (data (i32.const 239661) "a") (data (i32.const 239664) "a") (data (i32.const 239667) "a") (data (i32.const 239670) "a") (data (i32.const 239673) "a") (data (i32.const 239676) "a") (data (i32.const 239679) "a") (data (i32.const 239682) "a") (data (i32.const 239685) "a") (data (i32.const 239688) "a") (data (i32.const 239691) "a") (data (i32.const 239694) "a") (data (i32.const 239697) "a") (data (i32.const 239700) "a") (data (i32.const 239703) "a") (data (i32.const 239706) "a") (data (i32.const 239709) "a") (data (i32.const 239712) "a") (data (i32.const 239715) "a") (data (i32.const 239718) "a") (data (i32.const 239721) "a") (data (i32.const 239724) "a") (data (i32.const 239727) "a") (data (i32.const 239730) "a") (data (i32.const 239733) "a") (data (i32.const 239736) "a") (data (i32.const 239739) "a") (data (i32.const 239742) "a") (data (i32.const 239745) "a") (data (i32.const 239748) "a") (data (i32.const 239751) "a") (data (i32.const 239754) "a") (data (i32.const 239757) "a") (data (i32.const 239760) "a") (data (i32.const 239763) "a") (data (i32.const 239766) "a") (data (i32.const 239769) "a") (data (i32.const 239772) "a") (data (i32.const 239775) "a") (data (i32.const 239778) "a") (data (i32.const 239781) "a") (data (i32.const 239784) "a") (data (i32.const 239787) "a") (data (i32.const 239790) "a") (data (i32.const 239793) "a") (data (i32.const 239796) "a") (data (i32.const 239799) "a") (data (i32.const 239802) "a") (data (i32.const 239805) "a") (data (i32.const 239808) "a") (data (i32.const 239811) "a") (data (i32.const 239814) "a") (data (i32.const 239817) "a") (data (i32.const 239820) "a") (data (i32.const 239823) "a") (data (i32.const 239826) "a") (data (i32.const 239829) "a") (data (i32.const 239832) "a") (data (i32.const 239835) "a") (data (i32.const 239838) "a") (data (i32.const 239841) "a") (data (i32.const 239844) "a") (data (i32.const 239847) "a") (data (i32.const 239850) "a") (data (i32.const 239853) "a") (data (i32.const 239856) "a") (data (i32.const 239859) "a") (data (i32.const 239862) "a") (data (i32.const 239865) "a") (data (i32.const 239868) "a") (data (i32.const 239871) "a") (data (i32.const 239874) "a") (data (i32.const 239877) "a") (data (i32.const 239880) "a") (data (i32.const 239883) "a") (data (i32.const 239886) "a") (data (i32.const 239889) "a") (data (i32.const 239892) "a") (data (i32.const 239895) "a") (data (i32.const 239898) "a") (data (i32.const 239901) "a") (data (i32.const 239904) "a") (data (i32.const 239907) "a") (data (i32.const 239910) "a") (data (i32.const 239913) "a") (data (i32.const 239916) "a") (data (i32.const 239919) "a") (data (i32.const 239922) "a") (data (i32.const 239925) "a") (data (i32.const 239928) "a") (data (i32.const 239931) "a") (data (i32.const 239934) "a") (data (i32.const 239937) "a") (data (i32.const 239940) "a") (data (i32.const 239943) "a") (data (i32.const 239946) "a") (data (i32.const 239949) "a") (data (i32.const 239952) "a") (data (i32.const 239955) "a") (data (i32.const 239958) "a") (data (i32.const 239961) "a") (data (i32.const 239964) "a") (data (i32.const 239967) "a") (data (i32.const 239970) "a") (data (i32.const 239973) "a") (data (i32.const 239976) "a") (data (i32.const 239979) "a") (data (i32.const 239982) "a") (data (i32.const 239985) "a") (data (i32.const 239988) "a") (data (i32.const 239991) "a") (data (i32.const 239994) "a") (data (i32.const 239997) "a") (data (i32.const 240000) "a") (data (i32.const 240003) "a") (data (i32.const 240006) "a") (data (i32.const 240009) "a") (data (i32.const 240012) "a") (data (i32.const 240015) "a") (data (i32.const 240018) "a") (data (i32.const 240021) "a") (data (i32.const 240024) "a") (data (i32.const 240027) "a") (data (i32.const 240030) "a") (data (i32.const 240033) "a") (data (i32.const 240036) "a") (data (i32.const 240039) "a") (data (i32.const 240042) "a") (data (i32.const 240045) "a") (data (i32.const 240048) "a") (data (i32.const 240051) "a") (data (i32.const 240054) "a") (data (i32.const 240057) "a") (data (i32.const 240060) "a") (data (i32.const 240063) "a") (data (i32.const 240066) "a") (data (i32.const 240069) "a") (data (i32.const 240072) "a") (data (i32.const 240075) "a") (data (i32.const 240078) "a") (data (i32.const 240081) "a") (data (i32.const 240084) "a") (data (i32.const 240087) "a") (data (i32.const 240090) "a") (data (i32.const 240093) "a") (data (i32.const 240096) "a") (data (i32.const 240099) "a") (data (i32.const 240102) "a") (data (i32.const 240105) "a") (data (i32.const 240108) "a") (data (i32.const 240111) "a") (data (i32.const 240114) "a") (data (i32.const 240117) "a") (data (i32.const 240120) "a") (data (i32.const 240123) "a") (data (i32.const 240126) "a") (data (i32.const 240129) "a") (data (i32.const 240132) "a") (data (i32.const 240135) "a") (data (i32.const 240138) "a") (data (i32.const 240141) "a") (data (i32.const 240144) "a") (data (i32.const 240147) "a") (data (i32.const 240150) "a") (data (i32.const 240153) "a") (data (i32.const 240156) "a") (data (i32.const 240159) "a") (data (i32.const 240162) "a") (data (i32.const 240165) "a") (data (i32.const 240168) "a") (data (i32.const 240171) "a") (data (i32.const 240174) "a") (data (i32.const 240177) "a") (data (i32.const 240180) "a") (data (i32.const 240183) "a") (data (i32.const 240186) "a") (data (i32.const 240189) "a") (data (i32.const 240192) "a") (data (i32.const 240195) "a") (data (i32.const 240198) "a") (data (i32.const 240201) "a") (data (i32.const 240204) "a") (data (i32.const 240207) "a") (data (i32.const 240210) "a") (data (i32.const 240213) "a") (data (i32.const 240216) "a") (data (i32.const 240219) "a") (data (i32.const 240222) "a") (data (i32.const 240225) "a") (data (i32.const 240228) "a") (data (i32.const 240231) "a") (data (i32.const 240234) "a") (data (i32.const 240237) "a") (data (i32.const 240240) "a") (data (i32.const 240243) "a") (data (i32.const 240246) "a") (data (i32.const 240249) "a") (data (i32.const 240252) "a") (data (i32.const 240255) "a") (data (i32.const 240258) "a") (data (i32.const 240261) "a") (data (i32.const 240264) "a") (data (i32.const 240267) "a") (data (i32.const 240270) "a") (data (i32.const 240273) "a") (data (i32.const 240276) "a") (data (i32.const 240279) "a") (data (i32.const 240282) "a") (data (i32.const 240285) "a") (data (i32.const 240288) "a") (data (i32.const 240291) "a") (data (i32.const 240294) "a") (data (i32.const 240297) "a") (data (i32.const 240300) "a") (data (i32.const 240303) "a") (data (i32.const 240306) "a") (data (i32.const 240309) "a") (data (i32.const 240312) "a") (data (i32.const 240315) "a") (data (i32.const 240318) "a") (data (i32.const 240321) "a") (data (i32.const 240324) "a") (data (i32.const 240327) "a") (data (i32.const 240330) "a") (data (i32.const 240333) "a") (data (i32.const 240336) "a") (data (i32.const 240339) "a") (data (i32.const 240342) "a") (data (i32.const 240345) "a") (data (i32.const 240348) "a") (data (i32.const 240351) "a") (data (i32.const 240354) "a") (data (i32.const 240357) "a") (data (i32.const 240360) "a") (data (i32.const 240363) "a") (data (i32.const 240366) "a") (data (i32.const 240369) "a") (data (i32.const 240372) "a") (data (i32.const 240375) "a") (data (i32.const 240378) "a") (data (i32.const 240381) "a") (data (i32.const 240384) "a") (data (i32.const 240387) "a") (data (i32.const 240390) "a") (data (i32.const 240393) "a") (data (i32.const 240396) "a") (data (i32.const 240399) "a") (data (i32.const 240402) "a") (data (i32.const 240405) "a") (data (i32.const 240408) "a") (data (i32.const 240411) "a") (data (i32.const 240414) "a") (data (i32.const 240417) "a") (data (i32.const 240420) "a") (data (i32.const 240423) "a") (data (i32.const 240426) "a") (data (i32.const 240429) "a") (data (i32.const 240432) "a") (data (i32.const 240435) "a") (data (i32.const 240438) "a") (data (i32.const 240441) "a") (data (i32.const 240444) "a") (data (i32.const 240447) "a") (data (i32.const 240450) "a") (data (i32.const 240453) "a") (data (i32.const 240456) "a") (data (i32.const 240459) "a") (data (i32.const 240462) "a") (data (i32.const 240465) "a") (data (i32.const 240468) "a") (data (i32.const 240471) "a") (data (i32.const 240474) "a") (data (i32.const 240477) "a") (data (i32.const 240480) "a") (data (i32.const 240483) "a") (data (i32.const 240486) "a") (data (i32.const 240489) "a") (data (i32.const 240492) "a") (data (i32.const 240495) "a") (data (i32.const 240498) "a") (data (i32.const 240501) "a") (data (i32.const 240504) "a") (data (i32.const 240507) "a") (data (i32.const 240510) "a") (data (i32.const 240513) "a") (data (i32.const 240516) "a") (data (i32.const 240519) "a") (data (i32.const 240522) "a") (data (i32.const 240525) "a") (data (i32.const 240528) "a") (data (i32.const 240531) "a") (data (i32.const 240534) "a") (data (i32.const 240537) "a") (data (i32.const 240540) "a") (data (i32.const 240543) "a") (data (i32.const 240546) "a") (data (i32.const 240549) "a") (data (i32.const 240552) "a") (data (i32.const 240555) "a") (data (i32.const 240558) "a") (data (i32.const 240561) "a") (data (i32.const 240564) "a") (data (i32.const 240567) "a") (data (i32.const 240570) "a") (data (i32.const 240573) "a") (data (i32.const 240576) "a") (data (i32.const 240579) "a") (data (i32.const 240582) "a") (data (i32.const 240585) "a") (data (i32.const 240588) "a") (data (i32.const 240591) "a") (data (i32.const 240594) "a") (data (i32.const 240597) "a") (data (i32.const 240600) "a") (data (i32.const 240603) "a") (data (i32.const 240606) "a") (data (i32.const 240609) "a") (data (i32.const 240612) "a") (data (i32.const 240615) "a") (data (i32.const 240618) "a") (data (i32.const 240621) "a") (data (i32.const 240624) "a") (data (i32.const 240627) "a") (data (i32.const 240630) "a") (data (i32.const 240633) "a") (data (i32.const 240636) "a") (data (i32.const 240639) "a") (data (i32.const 240642) "a") (data (i32.const 240645) "a") (data (i32.const 240648) "a") (data (i32.const 240651) "a") (data (i32.const 240654) "a") (data (i32.const 240657) "a") (data (i32.const 240660) "a") (data (i32.const 240663) "a") (data (i32.const 240666) "a") (data (i32.const 240669) "a") (data (i32.const 240672) "a") (data (i32.const 240675) "a") (data (i32.const 240678) "a") (data (i32.const 240681) "a") (data (i32.const 240684) "a") (data (i32.const 240687) "a") (data (i32.const 240690) "a") (data (i32.const 240693) "a") (data (i32.const 240696) "a") (data (i32.const 240699) "a") (data (i32.const 240702) "a") (data (i32.const 240705) "a") (data (i32.const 240708) "a") (data (i32.const 240711) "a") (data (i32.const 240714) "a") (data (i32.const 240717) "a") (data (i32.const 240720) "a") (data (i32.const 240723) "a") (data (i32.const 240726) "a") (data (i32.const 240729) "a") (data (i32.const 240732) "a") (data (i32.const 240735) "a") (data (i32.const 240738) "a") (data (i32.const 240741) "a") (data (i32.const 240744) "a") (data (i32.const 240747) "a") (data (i32.const 240750) "a") (data (i32.const 240753) "a") (data (i32.const 240756) "a") (data (i32.const 240759) "a") (data (i32.const 240762) "a") (data (i32.const 240765) "a") (data (i32.const 240768) "a") (data (i32.const 240771) "a") (data (i32.const 240774) "a") (data (i32.const 240777) "a") (data (i32.const 240780) "a") (data (i32.const 240783) "a") (data (i32.const 240786) "a") (data (i32.const 240789) "a") (data (i32.const 240792) "a") (data (i32.const 240795) "a") (data (i32.const 240798) "a") (data (i32.const 240801) "a") (data (i32.const 240804) "a") (data (i32.const 240807) "a") (data (i32.const 240810) "a") (data (i32.const 240813) "a") (data (i32.const 240816) "a") (data (i32.const 240819) "a") (data (i32.const 240822) "a") (data (i32.const 240825) "a") (data (i32.const 240828) "a") (data (i32.const 240831) "a") (data (i32.const 240834) "a") (data (i32.const 240837) "a") (data (i32.const 240840) "a") (data (i32.const 240843) "a") (data (i32.const 240846) "a") (data (i32.const 240849) "a") (data (i32.const 240852) "a") (data (i32.const 240855) "a") (data (i32.const 240858) "a") (data (i32.const 240861) "a") (data (i32.const 240864) "a") (data (i32.const 240867) "a") (data (i32.const 240870) "a") (data (i32.const 240873) "a") (data (i32.const 240876) "a") (data (i32.const 240879) "a") (data (i32.const 240882) "a") (data (i32.const 240885) "a") (data (i32.const 240888) "a") (data (i32.const 240891) "a") (data (i32.const 240894) "a") (data (i32.const 240897) "a") (data (i32.const 240900) "a") (data (i32.const 240903) "a") (data (i32.const 240906) "a") (data (i32.const 240909) "a") (data (i32.const 240912) "a") (data (i32.const 240915) "a") (data (i32.const 240918) "a") (data (i32.const 240921) "a") (data (i32.const 240924) "a") (data (i32.const 240927) "a") (data (i32.const 240930) "a") (data (i32.const 240933) "a") (data (i32.const 240936) "a") (data (i32.const 240939) "a") (data (i32.const 240942) "a") (data (i32.const 240945) "a") (data (i32.const 240948) "a") (data (i32.const 240951) "a") (data (i32.const 240954) "a") (data (i32.const 240957) "a") (data (i32.const 240960) "a") (data (i32.const 240963) "a") (data (i32.const 240966) "a") (data (i32.const 240969) "a") (data (i32.const 240972) "a") (data (i32.const 240975) "a") (data (i32.const 240978) "a") (data (i32.const 240981) "a") (data (i32.const 240984) "a") (data (i32.const 240987) "a") (data (i32.const 240990) "a") (data (i32.const 240993) "a") (data (i32.const 240996) "a") (data (i32.const 240999) "a") (data (i32.const 241002) "a") (data (i32.const 241005) "a") (data (i32.const 241008) "a") (data (i32.const 241011) "a") (data (i32.const 241014) "a") (data (i32.const 241017) "a") (data (i32.const 241020) "a") (data (i32.const 241023) "a") (data (i32.const 241026) "a") (data (i32.const 241029) "a") (data (i32.const 241032) "a") (data (i32.const 241035) "a") (data (i32.const 241038) "a") (data (i32.const 241041) "a") (data (i32.const 241044) "a") (data (i32.const 241047) "a") (data (i32.const 241050) "a") (data (i32.const 241053) "a") (data (i32.const 241056) "a") (data (i32.const 241059) "a") (data (i32.const 241062) "a") (data (i32.const 241065) "a") (data (i32.const 241068) "a") (data (i32.const 241071) "a") (data (i32.const 241074) "a") (data (i32.const 241077) "a") (data (i32.const 241080) "a") (data (i32.const 241083) "a") (data (i32.const 241086) "a") (data (i32.const 241089) "a") (data (i32.const 241092) "a") (data (i32.const 241095) "a") (data (i32.const 241098) "a") (data (i32.const 241101) "a") (data (i32.const 241104) "a") (data (i32.const 241107) "a") (data (i32.const 241110) "a") (data (i32.const 241113) "a") (data (i32.const 241116) "a") (data (i32.const 241119) "a") (data (i32.const 241122) "a") (data (i32.const 241125) "a") (data (i32.const 241128) "a") (data (i32.const 241131) "a") (data (i32.const 241134) "a") (data (i32.const 241137) "a") (data (i32.const 241140) "a") (data (i32.const 241143) "a") (data (i32.const 241146) "a") (data (i32.const 241149) "a") (data (i32.const 241152) "a") (data (i32.const 241155) "a") (data (i32.const 241158) "a") (data (i32.const 241161) "a") (data (i32.const 241164) "a") (data (i32.const 241167) "a") (data (i32.const 241170) "a") (data (i32.const 241173) "a") (data (i32.const 241176) "a") (data (i32.const 241179) "a") (data (i32.const 241182) "a") (data (i32.const 241185) "a") (data (i32.const 241188) "a") (data (i32.const 241191) "a") (data (i32.const 241194) "a") (data (i32.const 241197) "a") (data (i32.const 241200) "a") (data (i32.const 241203) "a") (data (i32.const 241206) "a") (data (i32.const 241209) "a") (data (i32.const 241212) "a") (data (i32.const 241215) "a") (data (i32.const 241218) "a") (data (i32.const 241221) "a") (data (i32.const 241224) "a") (data (i32.const 241227) "a") (data (i32.const 241230) "a") (data (i32.const 241233) "a") (data (i32.const 241236) "a") (data (i32.const 241239) "a") (data (i32.const 241242) "a") (data (i32.const 241245) "a") (data (i32.const 241248) "a") (data (i32.const 241251) "a") (data (i32.const 241254) "a") (data (i32.const 241257) "a") (data (i32.const 241260) "a") (data (i32.const 241263) "a") (data (i32.const 241266) "a") (data (i32.const 241269) "a") (data (i32.const 241272) "a") (data (i32.const 241275) "a") (data (i32.const 241278) "a") (data (i32.const 241281) "a") (data (i32.const 241284) "a") (data (i32.const 241287) "a") (data (i32.const 241290) "a") (data (i32.const 241293) "a") (data (i32.const 241296) "a") (data (i32.const 241299) "a") (data (i32.const 241302) "a") (data (i32.const 241305) "a") (data (i32.const 241308) "a") (data (i32.const 241311) "a") (data (i32.const 241314) "a") (data (i32.const 241317) "a") (data (i32.const 241320) "a") (data (i32.const 241323) "a") (data (i32.const 241326) "a") (data (i32.const 241329) "a") (data (i32.const 241332) "a") (data (i32.const 241335) "a") (data (i32.const 241338) "a") (data (i32.const 241341) "a") (data (i32.const 241344) "a") (data (i32.const 241347) "a") (data (i32.const 241350) "a") (data (i32.const 241353) "a") (data (i32.const 241356) "a") (data (i32.const 241359) "a") (data (i32.const 241362) "a") (data (i32.const 241365) "a") (data (i32.const 241368) "a") (data (i32.const 241371) "a") (data (i32.const 241374) "a") (data (i32.const 241377) "a") (data (i32.const 241380) "a") (data (i32.const 241383) "a") (data (i32.const 241386) "a") (data (i32.const 241389) "a") (data (i32.const 241392) "a") (data (i32.const 241395) "a") (data (i32.const 241398) "a") (data (i32.const 241401) "a") (data (i32.const 241404) "a") (data (i32.const 241407) "a") (data (i32.const 241410) "a") (data (i32.const 241413) "a") (data (i32.const 241416) "a") (data (i32.const 241419) "a") (data (i32.const 241422) "a") (data (i32.const 241425) "a") (data (i32.const 241428) "a") (data (i32.const 241431) "a") (data (i32.const 241434) "a") (data (i32.const 241437) "a") (data (i32.const 241440) "a") (data (i32.const 241443) "a") (data (i32.const 241446) "a") (data (i32.const 241449) "a") (data (i32.const 241452) "a") (data (i32.const 241455) "a") (data (i32.const 241458) "a") (data (i32.const 241461) "a") (data (i32.const 241464) "a") (data (i32.const 241467) "a") (data (i32.const 241470) "a") (data (i32.const 241473) "a") (data (i32.const 241476) "a") (data (i32.const 241479) "a") (data (i32.const 241482) "a") (data (i32.const 241485) "a") (data (i32.const 241488) "a") (data (i32.const 241491) "a") (data (i32.const 241494) "a") (data (i32.const 241497) "a") (data (i32.const 241500) "a") (data (i32.const 241503) "a") (data (i32.const 241506) "a") (data (i32.const 241509) "a") (data (i32.const 241512) "a") (data (i32.const 241515) "a") (data (i32.const 241518) "a") (data (i32.const 241521) "a") (data (i32.const 241524) "a") (data (i32.const 241527) "a") (data (i32.const 241530) "a") (data (i32.const 241533) "a") (data (i32.const 241536) "a") (data (i32.const 241539) "a") (data (i32.const 241542) "a") (data (i32.const 241545) "a") (data (i32.const 241548) "a") (data (i32.const 241551) "a") (data (i32.const 241554) "a") (data (i32.const 241557) "a") (data (i32.const 241560) "a") (data (i32.const 241563) "a") (data (i32.const 241566) "a") (data (i32.const 241569) "a") (data (i32.const 241572) "a") (data (i32.const 241575) "a") (data (i32.const 241578) "a") (data (i32.const 241581) "a") (data (i32.const 241584) "a") (data (i32.const 241587) "a") (data (i32.const 241590) "a") (data (i32.const 241593) "a") (data (i32.const 241596) "a") (data (i32.const 241599) "a") (data (i32.const 241602) "a") (data (i32.const 241605) "a") (data (i32.const 241608) "a") (data (i32.const 241611) "a") (data (i32.const 241614) "a") (data (i32.const 241617) "a") (data (i32.const 241620) "a") (data (i32.const 241623) "a") (data (i32.const 241626) "a") (data (i32.const 241629) "a") (data (i32.const 241632) "a") (data (i32.const 241635) "a") (data (i32.const 241638) "a") (data (i32.const 241641) "a") (data (i32.const 241644) "a") (data (i32.const 241647) "a") (data (i32.const 241650) "a") (data (i32.const 241653) "a") (data (i32.const 241656) "a") (data (i32.const 241659) "a") (data (i32.const 241662) "a") (data (i32.const 241665) "a") (data (i32.const 241668) "a") (data (i32.const 241671) "a") (data (i32.const 241674) "a") (data (i32.const 241677) "a") (data (i32.const 241680) "a") (data (i32.const 241683) "a") (data (i32.const 241686) "a") (data (i32.const 241689) "a") (data (i32.const 241692) "a") (data (i32.const 241695) "a") (data (i32.const 241698) "a") (data (i32.const 241701) "a") (data (i32.const 241704) "a") (data (i32.const 241707) "a") (data (i32.const 241710) "a") (data (i32.const 241713) "a") (data (i32.const 241716) "a") (data (i32.const 241719) "a") (data (i32.const 241722) "a") (data (i32.const 241725) "a") (data (i32.const 241728) "a") (data (i32.const 241731) "a") (data (i32.const 241734) "a") (data (i32.const 241737) "a") (data (i32.const 241740) "a") (data (i32.const 241743) "a") (data (i32.const 241746) "a") (data (i32.const 241749) "a") (data (i32.const 241752) "a") (data (i32.const 241755) "a") (data (i32.const 241758) "a") (data (i32.const 241761) "a") (data (i32.const 241764) "a") (data (i32.const 241767) "a") (data (i32.const 241770) "a") (data (i32.const 241773) "a") (data (i32.const 241776) "a") (data (i32.const 241779) "a") (data (i32.const 241782) "a") (data (i32.const 241785) "a") (data (i32.const 241788) "a") (data (i32.const 241791) "a") (data (i32.const 241794) "a") (data (i32.const 241797) "a") (data (i32.const 241800) "a") (data (i32.const 241803) "a") (data (i32.const 241806) "a") (data (i32.const 241809) "a") (data (i32.const 241812) "a") (data (i32.const 241815) "a") (data (i32.const 241818) "a") (data (i32.const 241821) "a") (data (i32.const 241824) "a") (data (i32.const 241827) "a") (data (i32.const 241830) "a") (data (i32.const 241833) "a") (data (i32.const 241836) "a") (data (i32.const 241839) "a") (data (i32.const 241842) "a") (data (i32.const 241845) "a") (data (i32.const 241848) "a") (data (i32.const 241851) "a") (data (i32.const 241854) "a") (data (i32.const 241857) "a") (data (i32.const 241860) "a") (data (i32.const 241863) "a") (data (i32.const 241866) "a") (data (i32.const 241869) "a") (data (i32.const 241872) "a") (data (i32.const 241875) "a") (data (i32.const 241878) "a") (data (i32.const 241881) "a") (data (i32.const 241884) "a") (data (i32.const 241887) "a") (data (i32.const 241890) "a") (data (i32.const 241893) "a") (data (i32.const 241896) "a") (data (i32.const 241899) "a") (data (i32.const 241902) "a") (data (i32.const 241905) "a") (data (i32.const 241908) "a") (data (i32.const 241911) "a") (data (i32.const 241914) "a") (data (i32.const 241917) "a") (data (i32.const 241920) "a") (data (i32.const 241923) "a") (data (i32.const 241926) "a") (data (i32.const 241929) "a") (data (i32.const 241932) "a") (data (i32.const 241935) "a") (data (i32.const 241938) "a") (data (i32.const 241941) "a") (data (i32.const 241944) "a") (data (i32.const 241947) "a") (data (i32.const 241950) "a") (data (i32.const 241953) "a") (data (i32.const 241956) "a") (data (i32.const 241959) "a") (data (i32.const 241962) "a") (data (i32.const 241965) "a") (data (i32.const 241968) "a") (data (i32.const 241971) "a") (data (i32.const 241974) "a") (data (i32.const 241977) "a") (data (i32.const 241980) "a") (data (i32.const 241983) "a") (data (i32.const 241986) "a") (data (i32.const 241989) "a") (data (i32.const 241992) "a") (data (i32.const 241995) "a") (data (i32.const 241998) "a") (data (i32.const 242001) "a") (data (i32.const 242004) "a") (data (i32.const 242007) "a") (data (i32.const 242010) "a") (data (i32.const 242013) "a") (data (i32.const 242016) "a") (data (i32.const 242019) "a") (data (i32.const 242022) "a") (data (i32.const 242025) "a") (data (i32.const 242028) "a") (data (i32.const 242031) "a") (data (i32.const 242034) "a") (data (i32.const 242037) "a") (data (i32.const 242040) "a") (data (i32.const 242043) "a") (data (i32.const 242046) "a") (data (i32.const 242049) "a") (data (i32.const 242052) "a") (data (i32.const 242055) "a") (data (i32.const 242058) "a") (data (i32.const 242061) "a") (data (i32.const 242064) "a") (data (i32.const 242067) "a") (data (i32.const 242070) "a") (data (i32.const 242073) "a") (data (i32.const 242076) "a") (data (i32.const 242079) "a") (data (i32.const 242082) "a") (data (i32.const 242085) "a") (data (i32.const 242088) "a") (data (i32.const 242091) "a") (data (i32.const 242094) "a") (data (i32.const 242097) "a") (data (i32.const 242100) "a") (data (i32.const 242103) "a") (data (i32.const 242106) "a") (data (i32.const 242109) "a") (data (i32.const 242112) "a") (data (i32.const 242115) "a") (data (i32.const 242118) "a") (data (i32.const 242121) "a") (data (i32.const 242124) "a") (data (i32.const 242127) "a") (data (i32.const 242130) "a") (data (i32.const 242133) "a") (data (i32.const 242136) "a") (data (i32.const 242139) "a") (data (i32.const 242142) "a") (data (i32.const 242145) "a") (data (i32.const 242148) "a") (data (i32.const 242151) "a") (data (i32.const 242154) "a") (data (i32.const 242157) "a") (data (i32.const 242160) "a") (data (i32.const 242163) "a") (data (i32.const 242166) "a") (data (i32.const 242169) "a") (data (i32.const 242172) "a") (data (i32.const 242175) "a") (data (i32.const 242178) "a") (data (i32.const 242181) "a") (data (i32.const 242184) "a") (data (i32.const 242187) "a") (data (i32.const 242190) "a") (data (i32.const 242193) "a") (data (i32.const 242196) "a") (data (i32.const 242199) "a") (data (i32.const 242202) "a") (data (i32.const 242205) "a") (data (i32.const 242208) "a") (data (i32.const 242211) "a") (data (i32.const 242214) "a") (data (i32.const 242217) "a") (data (i32.const 242220) "a") (data (i32.const 242223) "a") (data (i32.const 242226) "a") (data (i32.const 242229) "a") (data (i32.const 242232) "a") (data (i32.const 242235) "a") (data (i32.const 242238) "a") (data (i32.const 242241) "a") (data (i32.const 242244) "a") (data (i32.const 242247) "a") (data (i32.const 242250) "a") (data (i32.const 242253) "a") (data (i32.const 242256) "a") (data (i32.const 242259) "a") (data (i32.const 242262) "a") (data (i32.const 242265) "a") (data (i32.const 242268) "a") (data (i32.const 242271) "a") (data (i32.const 242274) "a") (data (i32.const 242277) "a") (data (i32.const 242280) "a") (data (i32.const 242283) "a") (data (i32.const 242286) "a") (data (i32.const 242289) "a") (data (i32.const 242292) "a") (data (i32.const 242295) "a") (data (i32.const 242298) "a") (data (i32.const 242301) "a") (data (i32.const 242304) "a") (data (i32.const 242307) "a") (data (i32.const 242310) "a") (data (i32.const 242313) "a") (data (i32.const 242316) "a") (data (i32.const 242319) "a") (data (i32.const 242322) "a") (data (i32.const 242325) "a") (data (i32.const 242328) "a") (data (i32.const 242331) "a") (data (i32.const 242334) "a") (data (i32.const 242337) "a") (data (i32.const 242340) "a") (data (i32.const 242343) "a") (data (i32.const 242346) "a") (data (i32.const 242349) "a") (data (i32.const 242352) "a") (data (i32.const 242355) "a") (data (i32.const 242358) "a") (data (i32.const 242361) "a") (data (i32.const 242364) "a") (data (i32.const 242367) "a") (data (i32.const 242370) "a") (data (i32.const 242373) "a") (data (i32.const 242376) "a") (data (i32.const 242379) "a") (data (i32.const 242382) "a") (data (i32.const 242385) "a") (data (i32.const 242388) "a") (data (i32.const 242391) "a") (data (i32.const 242394) "a") (data (i32.const 242397) "a") (data (i32.const 242400) "a") (data (i32.const 242403) "a") (data (i32.const 242406) "a") (data (i32.const 242409) "a") (data (i32.const 242412) "a") (data (i32.const 242415) "a") (data (i32.const 242418) "a") (data (i32.const 242421) "a") (data (i32.const 242424) "a") (data (i32.const 242427) "a") (data (i32.const 242430) "a") (data (i32.const 242433) "a") (data (i32.const 242436) "a") (data (i32.const 242439) "a") (data (i32.const 242442) "a") (data (i32.const 242445) "a") (data (i32.const 242448) "a") (data (i32.const 242451) "a") (data (i32.const 242454) "a") (data (i32.const 242457) "a") (data (i32.const 242460) "a") (data (i32.const 242463) "a") (data (i32.const 242466) "a") (data (i32.const 242469) "a") (data (i32.const 242472) "a") (data (i32.const 242475) "a") (data (i32.const 242478) "a") (data (i32.const 242481) "a") (data (i32.const 242484) "a") (data (i32.const 242487) "a") (data (i32.const 242490) "a") (data (i32.const 242493) "a") (data (i32.const 242496) "a") (data (i32.const 242499) "a") (data (i32.const 242502) "a") (data (i32.const 242505) "a") (data (i32.const 242508) "a") (data (i32.const 242511) "a") (data (i32.const 242514) "a") (data (i32.const 242517) "a") (data (i32.const 242520) "a") (data (i32.const 242523) "a") (data (i32.const 242526) "a") (data (i32.const 242529) "a") (data (i32.const 242532) "a") (data (i32.const 242535) "a") (data (i32.const 242538) "a") (data (i32.const 242541) "a") (data (i32.const 242544) "a") (data (i32.const 242547) "a") (data (i32.const 242550) "a") (data (i32.const 242553) "a") (data (i32.const 242556) "a") (data (i32.const 242559) "a") (data (i32.const 242562) "a") (data (i32.const 242565) "a") (data (i32.const 242568) "a") (data (i32.const 242571) "a") (data (i32.const 242574) "a") (data (i32.const 242577) "a") (data (i32.const 242580) "a") (data (i32.const 242583) "a") (data (i32.const 242586) "a") (data (i32.const 242589) "a") (data (i32.const 242592) "a") (data (i32.const 242595) "a") (data (i32.const 242598) "a") (data (i32.const 242601) "a") (data (i32.const 242604) "a") (data (i32.const 242607) "a") (data (i32.const 242610) "a") (data (i32.const 242613) "a") (data (i32.const 242616) "a") (data (i32.const 242619) "a") (data (i32.const 242622) "a") (data (i32.const 242625) "a") (data (i32.const 242628) "a") (data (i32.const 242631) "a") (data (i32.const 242634) "a") (data (i32.const 242637) "a") (data (i32.const 242640) "a") (data (i32.const 242643) "a") (data (i32.const 242646) "a") (data (i32.const 242649) "a") (data (i32.const 242652) "a") (data (i32.const 242655) "a") (data (i32.const 242658) "a") (data (i32.const 242661) "a") (data (i32.const 242664) "a") (data (i32.const 242667) "a") (data (i32.const 242670) "a") (data (i32.const 242673) "a") (data (i32.const 242676) "a") (data (i32.const 242679) "a") (data (i32.const 242682) "a") (data (i32.const 242685) "a") (data (i32.const 242688) "a") (data (i32.const 242691) "a") (data (i32.const 242694) "a") (data (i32.const 242697) "a") (data (i32.const 242700) "a") (data (i32.const 242703) "a") (data (i32.const 242706) "a") (data (i32.const 242709) "a") (data (i32.const 242712) "a") (data (i32.const 242715) "a") (data (i32.const 242718) "a") (data (i32.const 242721) "a") (data (i32.const 242724) "a") (data (i32.const 242727) "a") (data (i32.const 242730) "a") (data (i32.const 242733) "a") (data (i32.const 242736) "a") (data (i32.const 242739) "a") (data (i32.const 242742) "a") (data (i32.const 242745) "a") (data (i32.const 242748) "a") (data (i32.const 242751) "a") (data (i32.const 242754) "a") (data (i32.const 242757) "a") (data (i32.const 242760) "a") (data (i32.const 242763) "a") (data (i32.const 242766) "a") (data (i32.const 242769) "a") (data (i32.const 242772) "a") (data (i32.const 242775) "a") (data (i32.const 242778) "a") (data (i32.const 242781) "a") (data (i32.const 242784) "a") (data (i32.const 242787) "a") (data (i32.const 242790) "a") (data (i32.const 242793) "a") (data (i32.const 242796) "a") (data (i32.const 242799) "a") (data (i32.const 242802) "a") (data (i32.const 242805) "a") (data (i32.const 242808) "a") (data (i32.const 242811) "a") (data (i32.const 242814) "a") (data (i32.const 242817) "a") (data (i32.const 242820) "a") (data (i32.const 242823) "a") (data (i32.const 242826) "a") (data (i32.const 242829) "a") (data (i32.const 242832) "a") (data (i32.const 242835) "a") (data (i32.const 242838) "a") (data (i32.const 242841) "a") (data (i32.const 242844) "a") (data (i32.const 242847) "a") (data (i32.const 242850) "a") (data (i32.const 242853) "a") (data (i32.const 242856) "a") (data (i32.const 242859) "a") (data (i32.const 242862) "a") (data (i32.const 242865) "a") (data (i32.const 242868) "a") (data (i32.const 242871) "a") (data (i32.const 242874) "a") (data (i32.const 242877) "a") (data (i32.const 242880) "a") (data (i32.const 242883) "a") (data (i32.const 242886) "a") (data (i32.const 242889) "a") (data (i32.const 242892) "a") (data (i32.const 242895) "a") (data (i32.const 242898) "a") (data (i32.const 242901) "a") (data (i32.const 242904) "a") (data (i32.const 242907) "a") (data (i32.const 242910) "a") (data (i32.const 242913) "a") (data (i32.const 242916) "a") (data (i32.const 242919) "a") (data (i32.const 242922) "a") (data (i32.const 242925) "a") (data (i32.const 242928) "a") (data (i32.const 242931) "a") (data (i32.const 242934) "a") (data (i32.const 242937) "a") (data (i32.const 242940) "a") (data (i32.const 242943) "a") (data (i32.const 242946) "a") (data (i32.const 242949) "a") (data (i32.const 242952) "a") (data (i32.const 242955) "a") (data (i32.const 242958) "a") (data (i32.const 242961) "a") (data (i32.const 242964) "a") (data (i32.const 242967) "a") (data (i32.const 242970) "a") (data (i32.const 242973) "a") (data (i32.const 242976) "a") (data (i32.const 242979) "a") (data (i32.const 242982) "a") (data (i32.const 242985) "a") (data (i32.const 242988) "a") (data (i32.const 242991) "a") (data (i32.const 242994) "a") (data (i32.const 242997) "a") (data (i32.const 243000) "a") (data (i32.const 243003) "a") (data (i32.const 243006) "a") (data (i32.const 243009) "a") (data (i32.const 243012) "a") (data (i32.const 243015) "a") (data (i32.const 243018) "a") (data (i32.const 243021) "a") (data (i32.const 243024) "a") (data (i32.const 243027) "a") (data (i32.const 243030) "a") (data (i32.const 243033) "a") (data (i32.const 243036) "a") (data (i32.const 243039) "a") (data (i32.const 243042) "a") (data (i32.const 243045) "a") (data (i32.const 243048) "a") (data (i32.const 243051) "a") (data (i32.const 243054) "a") (data (i32.const 243057) "a") (data (i32.const 243060) "a") (data (i32.const 243063) "a") (data (i32.const 243066) "a") (data (i32.const 243069) "a") (data (i32.const 243072) "a") (data (i32.const 243075) "a") (data (i32.const 243078) "a") (data (i32.const 243081) "a") (data (i32.const 243084) "a") (data (i32.const 243087) "a") (data (i32.const 243090) "a") (data (i32.const 243093) "a") (data (i32.const 243096) "a") (data (i32.const 243099) "a") (data (i32.const 243102) "a") (data (i32.const 243105) "a") (data (i32.const 243108) "a") (data (i32.const 243111) "a") (data (i32.const 243114) "a") (data (i32.const 243117) "a") (data (i32.const 243120) "a") (data (i32.const 243123) "a") (data (i32.const 243126) "a") (data (i32.const 243129) "a") (data (i32.const 243132) "a") (data (i32.const 243135) "a") (data (i32.const 243138) "a") (data (i32.const 243141) "a") (data (i32.const 243144) "a") (data (i32.const 243147) "a") (data (i32.const 243150) "a") (data (i32.const 243153) "a") (data (i32.const 243156) "a") (data (i32.const 243159) "a") (data (i32.const 243162) "a") (data (i32.const 243165) "a") (data (i32.const 243168) "a") (data (i32.const 243171) "a") (data (i32.const 243174) "a") (data (i32.const 243177) "a") (data (i32.const 243180) "a") (data (i32.const 243183) "a") (data (i32.const 243186) "a") (data (i32.const 243189) "a") (data (i32.const 243192) "a") (data (i32.const 243195) "a") (data (i32.const 243198) "a") (data (i32.const 243201) "a") (data (i32.const 243204) "a") (data (i32.const 243207) "a") (data (i32.const 243210) "a") (data (i32.const 243213) "a") (data (i32.const 243216) "a") (data (i32.const 243219) "a") (data (i32.const 243222) "a") (data (i32.const 243225) "a") (data (i32.const 243228) "a") (data (i32.const 243231) "a") (data (i32.const 243234) "a") (data (i32.const 243237) "a") (data (i32.const 243240) "a") (data (i32.const 243243) "a") (data (i32.const 243246) "a") (data (i32.const 243249) "a") (data (i32.const 243252) "a") (data (i32.const 243255) "a") (data (i32.const 243258) "a") (data (i32.const 243261) "a") (data (i32.const 243264) "a") (data (i32.const 243267) "a") (data (i32.const 243270) "a") (data (i32.const 243273) "a") (data (i32.const 243276) "a") (data (i32.const 243279) "a") (data (i32.const 243282) "a") (data (i32.const 243285) "a") (data (i32.const 243288) "a") (data (i32.const 243291) "a") (data (i32.const 243294) "a") (data (i32.const 243297) "a") (data (i32.const 243300) "a") (data (i32.const 243303) "a") (data (i32.const 243306) "a") (data (i32.const 243309) "a") (data (i32.const 243312) "a") (data (i32.const 243315) "a") (data (i32.const 243318) "a") (data (i32.const 243321) "a") (data (i32.const 243324) "a") (data (i32.const 243327) "a") (data (i32.const 243330) "a") (data (i32.const 243333) "a") (data (i32.const 243336) "a") (data (i32.const 243339) "a") (data (i32.const 243342) "a") (data (i32.const 243345) "a") (data (i32.const 243348) "a") (data (i32.const 243351) "a") (data (i32.const 243354) "a") (data (i32.const 243357) "a") (data (i32.const 243360) "a") (data (i32.const 243363) "a") (data (i32.const 243366) "a") (data (i32.const 243369) "a") (data (i32.const 243372) "a") (data (i32.const 243375) "a") (data (i32.const 243378) "a") (data (i32.const 243381) "a") (data (i32.const 243384) "a") (data (i32.const 243387) "a") (data (i32.const 243390) "a") (data (i32.const 243393) "a") (data (i32.const 243396) "a") (data (i32.const 243399) "a") (data (i32.const 243402) "a") (data (i32.const 243405) "a") (data (i32.const 243408) "a") (data (i32.const 243411) "a") (data (i32.const 243414) "a") (data (i32.const 243417) "a") (data (i32.const 243420) "a") (data (i32.const 243423) "a") (data (i32.const 243426) "a") (data (i32.const 243429) "a") (data (i32.const 243432) "a") (data (i32.const 243435) "a") (data (i32.const 243438) "a") (data (i32.const 243441) "a") (data (i32.const 243444) "a") (data (i32.const 243447) "a") (data (i32.const 243450) "a") (data (i32.const 243453) "a") (data (i32.const 243456) "a") (data (i32.const 243459) "a") (data (i32.const 243462) "a") (data (i32.const 243465) "a") (data (i32.const 243468) "a") (data (i32.const 243471) "a") (data (i32.const 243474) "a") (data (i32.const 243477) "a") (data (i32.const 243480) "a") (data (i32.const 243483) "a") (data (i32.const 243486) "a") (data (i32.const 243489) "a") (data (i32.const 243492) "a") (data (i32.const 243495) "a") (data (i32.const 243498) "a") (data (i32.const 243501) "a") (data (i32.const 243504) "a") (data (i32.const 243507) "a") (data (i32.const 243510) "a") (data (i32.const 243513) "a") (data (i32.const 243516) "a") (data (i32.const 243519) "a") (data (i32.const 243522) "a") (data (i32.const 243525) "a") (data (i32.const 243528) "a") (data (i32.const 243531) "a") (data (i32.const 243534) "a") (data (i32.const 243537) "a") (data (i32.const 243540) "a") (data (i32.const 243543) "a") (data (i32.const 243546) "a") (data (i32.const 243549) "a") (data (i32.const 243552) "a") (data (i32.const 243555) "a") (data (i32.const 243558) "a") (data (i32.const 243561) "a") (data (i32.const 243564) "a") (data (i32.const 243567) "a") (data (i32.const 243570) "a") (data (i32.const 243573) "a") (data (i32.const 243576) "a") (data (i32.const 243579) "a") (data (i32.const 243582) "a") (data (i32.const 243585) "a") (data (i32.const 243588) "a") (data (i32.const 243591) "a") (data (i32.const 243594) "a") (data (i32.const 243597) "a") (data (i32.const 243600) "a") (data (i32.const 243603) "a") (data (i32.const 243606) "a") (data (i32.const 243609) "a") (data (i32.const 243612) "a") (data (i32.const 243615) "a") (data (i32.const 243618) "a") (data (i32.const 243621) "a") (data (i32.const 243624) "a") (data (i32.const 243627) "a") (data (i32.const 243630) "a") (data (i32.const 243633) "a") (data (i32.const 243636) "a") (data (i32.const 243639) "a") (data (i32.const 243642) "a") (data (i32.const 243645) "a") (data (i32.const 243648) "a") (data (i32.const 243651) "a") (data (i32.const 243654) "a") (data (i32.const 243657) "a") (data (i32.const 243660) "a") (data (i32.const 243663) "a") (data (i32.const 243666) "a") (data (i32.const 243669) "a") (data (i32.const 243672) "a") (data (i32.const 243675) "a") (data (i32.const 243678) "a") (data (i32.const 243681) "a") (data (i32.const 243684) "a") (data (i32.const 243687) "a") (data (i32.const 243690) "a") (data (i32.const 243693) "a") (data (i32.const 243696) "a") (data (i32.const 243699) "a") (data (i32.const 243702) "a") (data (i32.const 243705) "a") (data (i32.const 243708) "a") (data (i32.const 243711) "a") (data (i32.const 243714) "a") (data (i32.const 243717) "a") (data (i32.const 243720) "a") (data (i32.const 243723) "a") (data (i32.const 243726) "a") (data (i32.const 243729) "a") (data (i32.const 243732) "a") (data (i32.const 243735) "a") (data (i32.const 243738) "a") (data (i32.const 243741) "a") (data (i32.const 243744) "a") (data (i32.const 243747) "a") (data (i32.const 243750) "a") (data (i32.const 243753) "a") (data (i32.const 243756) "a") (data (i32.const 243759) "a") (data (i32.const 243762) "a") (data (i32.const 243765) "a") (data (i32.const 243768) "a") (data (i32.const 243771) "a") (data (i32.const 243774) "a") (data (i32.const 243777) "a") (data (i32.const 243780) "a") (data (i32.const 243783) "a") (data (i32.const 243786) "a") (data (i32.const 243789) "a") (data (i32.const 243792) "a") (data (i32.const 243795) "a") (data (i32.const 243798) "a") (data (i32.const 243801) "a") (data (i32.const 243804) "a") (data (i32.const 243807) "a") (data (i32.const 243810) "a") (data (i32.const 243813) "a") (data (i32.const 243816) "a") (data (i32.const 243819) "a") (data (i32.const 243822) "a") (data (i32.const 243825) "a") (data (i32.const 243828) "a") (data (i32.const 243831) "a") (data (i32.const 243834) "a") (data (i32.const 243837) "a") (data (i32.const 243840) "a") (data (i32.const 243843) "a") (data (i32.const 243846) "a") (data (i32.const 243849) "a") (data (i32.const 243852) "a") (data (i32.const 243855) "a") (data (i32.const 243858) "a") (data (i32.const 243861) "a") (data (i32.const 243864) "a") (data (i32.const 243867) "a") (data (i32.const 243870) "a") (data (i32.const 243873) "a") (data (i32.const 243876) "a") (data (i32.const 243879) "a") (data (i32.const 243882) "a") (data (i32.const 243885) "a") (data (i32.const 243888) "a") (data (i32.const 243891) "a") (data (i32.const 243894) "a") (data (i32.const 243897) "a") (data (i32.const 243900) "a") (data (i32.const 243903) "a") (data (i32.const 243906) "a") (data (i32.const 243909) "a") (data (i32.const 243912) "a") (data (i32.const 243915) "a") (data (i32.const 243918) "a") (data (i32.const 243921) "a") (data (i32.const 243924) "a") (data (i32.const 243927) "a") (data (i32.const 243930) "a") (data (i32.const 243933) "a") (data (i32.const 243936) "a") (data (i32.const 243939) "a") (data (i32.const 243942) "a") (data (i32.const 243945) "a") (data (i32.const 243948) "a") (data (i32.const 243951) "a") (data (i32.const 243954) "a") (data (i32.const 243957) "a") (data (i32.const 243960) "a") (data (i32.const 243963) "a") (data (i32.const 243966) "a") (data (i32.const 243969) "a") (data (i32.const 243972) "a") (data (i32.const 243975) "a") (data (i32.const 243978) "a") (data (i32.const 243981) "a") (data (i32.const 243984) "a") (data (i32.const 243987) "a") (data (i32.const 243990) "a") (data (i32.const 243993) "a") (data (i32.const 243996) "a") (data (i32.const 243999) "a") (data (i32.const 244002) "a") (data (i32.const 244005) "a") (data (i32.const 244008) "a") (data (i32.const 244011) "a") (data (i32.const 244014) "a") (data (i32.const 244017) "a") (data (i32.const 244020) "a") (data (i32.const 244023) "a") (data (i32.const 244026) "a") (data (i32.const 244029) "a") (data (i32.const 244032) "a") (data (i32.const 244035) "a") (data (i32.const 244038) "a") (data (i32.const 244041) "a") (data (i32.const 244044) "a") (data (i32.const 244047) "a") (data (i32.const 244050) "a") (data (i32.const 244053) "a") (data (i32.const 244056) "a") (data (i32.const 244059) "a") (data (i32.const 244062) "a") (data (i32.const 244065) "a") (data (i32.const 244068) "a") (data (i32.const 244071) "a") (data (i32.const 244074) "a") (data (i32.const 244077) "a") (data (i32.const 244080) "a") (data (i32.const 244083) "a") (data (i32.const 244086) "a") (data (i32.const 244089) "a") (data (i32.const 244092) "a") (data (i32.const 244095) "a") (data (i32.const 244098) "a") (data (i32.const 244101) "a") (data (i32.const 244104) "a") (data (i32.const 244107) "a") (data (i32.const 244110) "a") (data (i32.const 244113) "a") (data (i32.const 244116) "a") (data (i32.const 244119) "a") (data (i32.const 244122) "a") (data (i32.const 244125) "a") (data (i32.const 244128) "a") (data (i32.const 244131) "a") (data (i32.const 244134) "a") (data (i32.const 244137) "a") (data (i32.const 244140) "a") (data (i32.const 244143) "a") (data (i32.const 244146) "a") (data (i32.const 244149) "a") (data (i32.const 244152) "a") (data (i32.const 244155) "a") (data (i32.const 244158) "a") (data (i32.const 244161) "a") (data (i32.const 244164) "a") (data (i32.const 244167) "a") (data (i32.const 244170) "a") (data (i32.const 244173) "a") (data (i32.const 244176) "a") (data (i32.const 244179) "a") (data (i32.const 244182) "a") (data (i32.const 244185) "a") (data (i32.const 244188) "a") (data (i32.const 244191) "a") (data (i32.const 244194) "a") (data (i32.const 244197) "a") (data (i32.const 244200) "a") (data (i32.const 244203) "a") (data (i32.const 244206) "a") (data (i32.const 244209) "a") (data (i32.const 244212) "a") (data (i32.const 244215) "a") (data (i32.const 244218) "a") (data (i32.const 244221) "a") (data (i32.const 244224) "a") (data (i32.const 244227) "a") (data (i32.const 244230) "a") (data (i32.const 244233) "a") (data (i32.const 244236) "a") (data (i32.const 244239) "a") (data (i32.const 244242) "a") (data (i32.const 244245) "a") (data (i32.const 244248) "a") (data (i32.const 244251) "a") (data (i32.const 244254) "a") (data (i32.const 244257) "a") (data (i32.const 244260) "a") (data (i32.const 244263) "a") (data (i32.const 244266) "a") (data (i32.const 244269) "a") (data (i32.const 244272) "a") (data (i32.const 244275) "a") (data (i32.const 244278) "a") (data (i32.const 244281) "a") (data (i32.const 244284) "a") (data (i32.const 244287) "a") (data (i32.const 244290) "a") (data (i32.const 244293) "a") (data (i32.const 244296) "a") (data (i32.const 244299) "a") (data (i32.const 244302) "a") (data (i32.const 244305) "a") (data (i32.const 244308) "a") (data (i32.const 244311) "a") (data (i32.const 244314) "a") (data (i32.const 244317) "a") (data (i32.const 244320) "a") (data (i32.const 244323) "a") (data (i32.const 244326) "a") (data (i32.const 244329) "a") (data (i32.const 244332) "a") (data (i32.const 244335) "a") (data (i32.const 244338) "a") (data (i32.const 244341) "a") (data (i32.const 244344) "a") (data (i32.const 244347) "a") (data (i32.const 244350) "a") (data (i32.const 244353) "a") (data (i32.const 244356) "a") (data (i32.const 244359) "a") (data (i32.const 244362) "a") (data (i32.const 244365) "a") (data (i32.const 244368) "a") (data (i32.const 244371) "a") (data (i32.const 244374) "a") (data (i32.const 244377) "a") (data (i32.const 244380) "a") (data (i32.const 244383) "a") (data (i32.const 244386) "a") (data (i32.const 244389) "a") (data (i32.const 244392) "a") (data (i32.const 244395) "a") (data (i32.const 244398) "a") (data (i32.const 244401) "a") (data (i32.const 244404) "a") (data (i32.const 244407) "a") (data (i32.const 244410) "a") (data (i32.const 244413) "a") (data (i32.const 244416) "a") (data (i32.const 244419) "a") (data (i32.const 244422) "a") (data (i32.const 244425) "a") (data (i32.const 244428) "a") (data (i32.const 244431) "a") (data (i32.const 244434) "a") (data (i32.const 244437) "a") (data (i32.const 244440) "a") (data (i32.const 244443) "a") (data (i32.const 244446) "a") (data (i32.const 244449) "a") (data (i32.const 244452) "a") (data (i32.const 244455) "a") (data (i32.const 244458) "a") (data (i32.const 244461) "a") (data (i32.const 244464) "a") (data (i32.const 244467) "a") (data (i32.const 244470) "a") (data (i32.const 244473) "a") (data (i32.const 244476) "a") (data (i32.const 244479) "a") (data (i32.const 244482) "a") (data (i32.const 244485) "a") (data (i32.const 244488) "a") (data (i32.const 244491) "a") (data (i32.const 244494) "a") (data (i32.const 244497) "a") (data (i32.const 244500) "a") (data (i32.const 244503) "a") (data (i32.const 244506) "a") (data (i32.const 244509) "a") (data (i32.const 244512) "a") (data (i32.const 244515) "a") (data (i32.const 244518) "a") (data (i32.const 244521) "a") (data (i32.const 244524) "a") (data (i32.const 244527) "a") (data (i32.const 244530) "a") (data (i32.const 244533) "a") (data (i32.const 244536) "a") (data (i32.const 244539) "a") (data (i32.const 244542) "a") (data (i32.const 244545) "a") (data (i32.const 244548) "a") (data (i32.const 244551) "a") (data (i32.const 244554) "a") (data (i32.const 244557) "a") (data (i32.const 244560) "a") (data (i32.const 244563) "a") (data (i32.const 244566) "a") (data (i32.const 244569) "a") (data (i32.const 244572) "a") (data (i32.const 244575) "a") (data (i32.const 244578) "a") (data (i32.const 244581) "a") (data (i32.const 244584) "a") (data (i32.const 244587) "a") (data (i32.const 244590) "a") (data (i32.const 244593) "a") (data (i32.const 244596) "a") (data (i32.const 244599) "a") (data (i32.const 244602) "a") (data (i32.const 244605) "a") (data (i32.const 244608) "a") (data (i32.const 244611) "a") (data (i32.const 244614) "a") (data (i32.const 244617) "a") (data (i32.const 244620) "a") (data (i32.const 244623) "a") (data (i32.const 244626) "a") (data (i32.const 244629) "a") (data (i32.const 244632) "a") (data (i32.const 244635) "a") (data (i32.const 244638) "a") (data (i32.const 244641) "a") (data (i32.const 244644) "a") (data (i32.const 244647) "a") (data (i32.const 244650) "a") (data (i32.const 244653) "a") (data (i32.const 244656) "a") (data (i32.const 244659) "a") (data (i32.const 244662) "a") (data (i32.const 244665) "a") (data (i32.const 244668) "a") (data (i32.const 244671) "a") (data (i32.const 244674) "a") (data (i32.const 244677) "a") (data (i32.const 244680) "a") (data (i32.const 244683) "a") (data (i32.const 244686) "a") (data (i32.const 244689) "a") (data (i32.const 244692) "a") (data (i32.const 244695) "a") (data (i32.const 244698) "a") (data (i32.const 244701) "a") (data (i32.const 244704) "a") (data (i32.const 244707) "a") (data (i32.const 244710) "a") (data (i32.const 244713) "a") (data (i32.const 244716) "a") (data (i32.const 244719) "a") (data (i32.const 244722) "a") (data (i32.const 244725) "a") (data (i32.const 244728) "a") (data (i32.const 244731) "a") (data (i32.const 244734) "a") (data (i32.const 244737) "a") (data (i32.const 244740) "a") (data (i32.const 244743) "a") (data (i32.const 244746) "a") (data (i32.const 244749) "a") (data (i32.const 244752) "a") (data (i32.const 244755) "a") (data (i32.const 244758) "a") (data (i32.const 244761) "a") (data (i32.const 244764) "a") (data (i32.const 244767) "a") (data (i32.const 244770) "a") (data (i32.const 244773) "a") (data (i32.const 244776) "a") (data (i32.const 244779) "a") (data (i32.const 244782) "a") (data (i32.const 244785) "a") (data (i32.const 244788) "a") (data (i32.const 244791) "a") (data (i32.const 244794) "a") (data (i32.const 244797) "a") (data (i32.const 244800) "a") (data (i32.const 244803) "a") (data (i32.const 244806) "a") (data (i32.const 244809) "a") (data (i32.const 244812) "a") (data (i32.const 244815) "a") (data (i32.const 244818) "a") (data (i32.const 244821) "a") (data (i32.const 244824) "a") (data (i32.const 244827) "a") (data (i32.const 244830) "a") (data (i32.const 244833) "a") (data (i32.const 244836) "a") (data (i32.const 244839) "a") (data (i32.const 244842) "a") (data (i32.const 244845) "a") (data (i32.const 244848) "a") (data (i32.const 244851) "a") (data (i32.const 244854) "a") (data (i32.const 244857) "a") (data (i32.const 244860) "a") (data (i32.const 244863) "a") (data (i32.const 244866) "a") (data (i32.const 244869) "a") (data (i32.const 244872) "a") (data (i32.const 244875) "a") (data (i32.const 244878) "a") (data (i32.const 244881) "a") (data (i32.const 244884) "a") (data (i32.const 244887) "a") (data (i32.const 244890) "a") (data (i32.const 244893) "a") (data (i32.const 244896) "a") (data (i32.const 244899) "a") (data (i32.const 244902) "a") (data (i32.const 244905) "a") (data (i32.const 244908) "a") (data (i32.const 244911) "a") (data (i32.const 244914) "a") (data (i32.const 244917) "a") (data (i32.const 244920) "a") (data (i32.const 244923) "a") (data (i32.const 244926) "a") (data (i32.const 244929) "a") (data (i32.const 244932) "a") (data (i32.const 244935) "a") (data (i32.const 244938) "a") (data (i32.const 244941) "a") (data (i32.const 244944) "a") (data (i32.const 244947) "a") (data (i32.const 244950) "a") (data (i32.const 244953) "a") (data (i32.const 244956) "a") (data (i32.const 244959) "a") (data (i32.const 244962) "a") (data (i32.const 244965) "a") (data (i32.const 244968) "a") (data (i32.const 244971) "a") (data (i32.const 244974) "a") (data (i32.const 244977) "a") (data (i32.const 244980) "a") (data (i32.const 244983) "a") (data (i32.const 244986) "a") (data (i32.const 244989) "a") (data (i32.const 244992) "a") (data (i32.const 244995) "a") (data (i32.const 244998) "a") (data (i32.const 245001) "a") (data (i32.const 245004) "a") (data (i32.const 245007) "a") (data (i32.const 245010) "a") (data (i32.const 245013) "a") (data (i32.const 245016) "a") (data (i32.const 245019) "a") (data (i32.const 245022) "a") (data (i32.const 245025) "a") (data (i32.const 245028) "a") (data (i32.const 245031) "a") (data (i32.const 245034) "a") (data (i32.const 245037) "a") (data (i32.const 245040) "a") (data (i32.const 245043) "a") (data (i32.const 245046) "a") (data (i32.const 245049) "a") (data (i32.const 245052) "a") (data (i32.const 245055) "a") (data (i32.const 245058) "a") (data (i32.const 245061) "a") (data (i32.const 245064) "a") (data (i32.const 245067) "a") (data (i32.const 245070) "a") (data (i32.const 245073) "a") (data (i32.const 245076) "a") (data (i32.const 245079) "a") (data (i32.const 245082) "a") (data (i32.const 245085) "a") (data (i32.const 245088) "a") (data (i32.const 245091) "a") (data (i32.const 245094) "a") (data (i32.const 245097) "a") (data (i32.const 245100) "a") (data (i32.const 245103) "a") (data (i32.const 245106) "a") (data (i32.const 245109) "a") (data (i32.const 245112) "a") (data (i32.const 245115) "a") (data (i32.const 245118) "a") (data (i32.const 245121) "a") (data (i32.const 245124) "a") (data (i32.const 245127) "a") (data (i32.const 245130) "a") (data (i32.const 245133) "a") (data (i32.const 245136) "a") (data (i32.const 245139) "a") (data (i32.const 245142) "a") (data (i32.const 245145) "a") (data (i32.const 245148) "a") (data (i32.const 245151) "a") (data (i32.const 245154) "a") (data (i32.const 245157) "a") (data (i32.const 245160) "a") (data (i32.const 245163) "a") (data (i32.const 245166) "a") (data (i32.const 245169) "a") (data (i32.const 245172) "a") (data (i32.const 245175) "a") (data (i32.const 245178) "a") (data (i32.const 245181) "a") (data (i32.const 245184) "a") (data (i32.const 245187) "a") (data (i32.const 245190) "a") (data (i32.const 245193) "a") (data (i32.const 245196) "a") (data (i32.const 245199) "a") (data (i32.const 245202) "a") (data (i32.const 245205) "a") (data (i32.const 245208) "a") (data (i32.const 245211) "a") (data (i32.const 245214) "a") (data (i32.const 245217) "a") (data (i32.const 245220) "a") (data (i32.const 245223) "a") (data (i32.const 245226) "a") (data (i32.const 245229) "a") (data (i32.const 245232) "a") (data (i32.const 245235) "a") (data (i32.const 245238) "a") (data (i32.const 245241) "a") (data (i32.const 245244) "a") (data (i32.const 245247) "a") (data (i32.const 245250) "a") (data (i32.const 245253) "a") (data (i32.const 245256) "a") (data (i32.const 245259) "a") (data (i32.const 245262) "a") (data (i32.const 245265) "a") (data (i32.const 245268) "a") (data (i32.const 245271) "a") (data (i32.const 245274) "a") (data (i32.const 245277) "a") (data (i32.const 245280) "a") (data (i32.const 245283) "a") (data (i32.const 245286) "a") (data (i32.const 245289) "a") (data (i32.const 245292) "a") (data (i32.const 245295) "a") (data (i32.const 245298) "a") (data (i32.const 245301) "a") (data (i32.const 245304) "a") (data (i32.const 245307) "a") (data (i32.const 245310) "a") (data (i32.const 245313) "a") (data (i32.const 245316) "a") (data (i32.const 245319) "a") (data (i32.const 245322) "a") (data (i32.const 245325) "a") (data (i32.const 245328) "a") (data (i32.const 245331) "a") (data (i32.const 245334) "a") (data (i32.const 245337) "a") (data (i32.const 245340) "a") (data (i32.const 245343) "a") (data (i32.const 245346) "a") (data (i32.const 245349) "a") (data (i32.const 245352) "a") (data (i32.const 245355) "a") (data (i32.const 245358) "a") (data (i32.const 245361) "a") (data (i32.const 245364) "a") (data (i32.const 245367) "a") (data (i32.const 245370) "a") (data (i32.const 245373) "a") (data (i32.const 245376) "a") (data (i32.const 245379) "a") (data (i32.const 245382) "a") (data (i32.const 245385) "a") (data (i32.const 245388) "a") (data (i32.const 245391) "a") (data (i32.const 245394) "a") (data (i32.const 245397) "a") (data (i32.const 245400) "a") (data (i32.const 245403) "a") (data (i32.const 245406) "a") (data (i32.const 245409) "a") (data (i32.const 245412) "a") (data (i32.const 245415) "a") (data (i32.const 245418) "a") (data (i32.const 245421) "a") (data (i32.const 245424) "a") (data (i32.const 245427) "a") (data (i32.const 245430) "a") (data (i32.const 245433) "a") (data (i32.const 245436) "a") (data (i32.const 245439) "a") (data (i32.const 245442) "a") (data (i32.const 245445) "a") (data (i32.const 245448) "a") (data (i32.const 245451) "a") (data (i32.const 245454) "a") (data (i32.const 245457) "a") (data (i32.const 245460) "a") (data (i32.const 245463) "a") (data (i32.const 245466) "a") (data (i32.const 245469) "a") (data (i32.const 245472) "a") (data (i32.const 245475) "a") (data (i32.const 245478) "a") (data (i32.const 245481) "a") (data (i32.const 245484) "a") (data (i32.const 245487) "a") (data (i32.const 245490) "a") (data (i32.const 245493) "a") (data (i32.const 245496) "a") (data (i32.const 245499) "a") (data (i32.const 245502) "a") (data (i32.const 245505) "a") (data (i32.const 245508) "a") (data (i32.const 245511) "a") (data (i32.const 245514) "a") (data (i32.const 245517) "a") (data (i32.const 245520) "a") (data (i32.const 245523) "a") (data (i32.const 245526) "a") (data (i32.const 245529) "a") (data (i32.const 245532) "a") (data (i32.const 245535) "a") (data (i32.const 245538) "a") (data (i32.const 245541) "a") (data (i32.const 245544) "a") (data (i32.const 245547) "a") (data (i32.const 245550) "a") (data (i32.const 245553) "a") (data (i32.const 245556) "a") (data (i32.const 245559) "a") (data (i32.const 245562) "a") (data (i32.const 245565) "a") (data (i32.const 245568) "a") (data (i32.const 245571) "a") (data (i32.const 245574) "a") (data (i32.const 245577) "a") (data (i32.const 245580) "a") (data (i32.const 245583) "a") (data (i32.const 245586) "a") (data (i32.const 245589) "a") (data (i32.const 245592) "a") (data (i32.const 245595) "a") (data (i32.const 245598) "a") (data (i32.const 245601) "a") (data (i32.const 245604) "a") (data (i32.const 245607) "a") (data (i32.const 245610) "a") (data (i32.const 245613) "a") (data (i32.const 245616) "a") (data (i32.const 245619) "a") (data (i32.const 245622) "a") (data (i32.const 245625) "a") (data (i32.const 245628) "a") (data (i32.const 245631) "a") (data (i32.const 245634) "a") (data (i32.const 245637) "a") (data (i32.const 245640) "a") (data (i32.const 245643) "a") (data (i32.const 245646) "a") (data (i32.const 245649) "a") (data (i32.const 245652) "a") (data (i32.const 245655) "a") (data (i32.const 245658) "a") (data (i32.const 245661) "a") (data (i32.const 245664) "a") (data (i32.const 245667) "a") (data (i32.const 245670) "a") (data (i32.const 245673) "a") (data (i32.const 245676) "a") (data (i32.const 245679) "a") (data (i32.const 245682) "a") (data (i32.const 245685) "a") (data (i32.const 245688) "a") (data (i32.const 245691) "a") (data (i32.const 245694) "a") (data (i32.const 245697) "a") (data (i32.const 245700) "a") (data (i32.const 245703) "a") (data (i32.const 245706) "a") (data (i32.const 245709) "a") (data (i32.const 245712) "a") (data (i32.const 245715) "a") (data (i32.const 245718) "a") (data (i32.const 245721) "a") (data (i32.const 245724) "a") (data (i32.const 245727) "a") (data (i32.const 245730) "a") (data (i32.const 245733) "a") (data (i32.const 245736) "a") (data (i32.const 245739) "a") (data (i32.const 245742) "a") (data (i32.const 245745) "a") (data (i32.const 245748) "a") (data (i32.const 245751) "a") (data (i32.const 245754) "a") (data (i32.const 245757) "a") (data (i32.const 245760) "a") (data (i32.const 245763) "a") (data (i32.const 245766) "a") (data (i32.const 245769) "a") (data (i32.const 245772) "a") (data (i32.const 245775) "a") (data (i32.const 245778) "a") (data (i32.const 245781) "a") (data (i32.const 245784) "a") (data (i32.const 245787) "a") (data (i32.const 245790) "a") (data (i32.const 245793) "a") (data (i32.const 245796) "a") (data (i32.const 245799) "a") (data (i32.const 245802) "a") (data (i32.const 245805) "a") (data (i32.const 245808) "a") (data (i32.const 245811) "a") (data (i32.const 245814) "a") (data (i32.const 245817) "a") (data (i32.const 245820) "a") (data (i32.const 245823) "a") (data (i32.const 245826) "a") (data (i32.const 245829) "a") (data (i32.const 245832) "a") (data (i32.const 245835) "a") (data (i32.const 245838) "a") (data (i32.const 245841) "a") (data (i32.const 245844) "a") (data (i32.const 245847) "a") (data (i32.const 245850) "a") (data (i32.const 245853) "a") (data (i32.const 245856) "a") (data (i32.const 245859) "a") (data (i32.const 245862) "a") (data (i32.const 245865) "a") (data (i32.const 245868) "a") (data (i32.const 245871) "a") (data (i32.const 245874) "a") (data (i32.const 245877) "a") (data (i32.const 245880) "a") (data (i32.const 245883) "a") (data (i32.const 245886) "a") (data (i32.const 245889) "a") (data (i32.const 245892) "a") (data (i32.const 245895) "a") (data (i32.const 245898) "a") (data (i32.const 245901) "a") (data (i32.const 245904) "a") (data (i32.const 245907) "a") (data (i32.const 245910) "a") (data (i32.const 245913) "a") (data (i32.const 245916) "a") (data (i32.const 245919) "a") (data (i32.const 245922) "a") (data (i32.const 245925) "a") (data (i32.const 245928) "a") (data (i32.const 245931) "a") (data (i32.const 245934) "a") (data (i32.const 245937) "a") (data (i32.const 245940) "a") (data (i32.const 245943) "a") (data (i32.const 245946) "a") (data (i32.const 245949) "a") (data (i32.const 245952) "a") (data (i32.const 245955) "a") (data (i32.const 245958) "a") (data (i32.const 245961) "a") (data (i32.const 245964) "a") (data (i32.const 245967) "a") (data (i32.const 245970) "a") (data (i32.const 245973) "a") (data (i32.const 245976) "a") (data (i32.const 245979) "a") (data (i32.const 245982) "a") (data (i32.const 245985) "a") (data (i32.const 245988) "a") (data (i32.const 245991) "a") (data (i32.const 245994) "a") (data (i32.const 245997) "a") (data (i32.const 246000) "a") (data (i32.const 246003) "a") (data (i32.const 246006) "a") (data (i32.const 246009) "a") (data (i32.const 246012) "a") (data (i32.const 246015) "a") (data (i32.const 246018) "a") (data (i32.const 246021) "a") (data (i32.const 246024) "a") (data (i32.const 246027) "a") (data (i32.const 246030) "a") (data (i32.const 246033) "a") (data (i32.const 246036) "a") (data (i32.const 246039) "a") (data (i32.const 246042) "a") (data (i32.const 246045) "a") (data (i32.const 246048) "a") (data (i32.const 246051) "a") (data (i32.const 246054) "a") (data (i32.const 246057) "a") (data (i32.const 246060) "a") (data (i32.const 246063) "a") (data (i32.const 246066) "a") (data (i32.const 246069) "a") (data (i32.const 246072) "a") (data (i32.const 246075) "a") (data (i32.const 246078) "a") (data (i32.const 246081) "a") (data (i32.const 246084) "a") (data (i32.const 246087) "a") (data (i32.const 246090) "a") (data (i32.const 246093) "a") (data (i32.const 246096) "a") (data (i32.const 246099) "a") (data (i32.const 246102) "a") (data (i32.const 246105) "a") (data (i32.const 246108) "a") (data (i32.const 246111) "a") (data (i32.const 246114) "a") (data (i32.const 246117) "a") (data (i32.const 246120) "a") (data (i32.const 246123) "a") (data (i32.const 246126) "a") (data (i32.const 246129) "a") (data (i32.const 246132) "a") (data (i32.const 246135) "a") (data (i32.const 246138) "a") (data (i32.const 246141) "a") (data (i32.const 246144) "a") (data (i32.const 246147) "a") (data (i32.const 246150) "a") (data (i32.const 246153) "a") (data (i32.const 246156) "a") (data (i32.const 246159) "a") (data (i32.const 246162) "a") (data (i32.const 246165) "a") (data (i32.const 246168) "a") (data (i32.const 246171) "a") (data (i32.const 246174) "a") (data (i32.const 246177) "a") (data (i32.const 246180) "a") (data (i32.const 246183) "a") (data (i32.const 246186) "a") (data (i32.const 246189) "a") (data (i32.const 246192) "a") (data (i32.const 246195) "a") (data (i32.const 246198) "a") (data (i32.const 246201) "a") (data (i32.const 246204) "a") (data (i32.const 246207) "a") (data (i32.const 246210) "a") (data (i32.const 246213) "a") (data (i32.const 246216) "a") (data (i32.const 246219) "a") (data (i32.const 246222) "a") (data (i32.const 246225) "a") (data (i32.const 246228) "a") (data (i32.const 246231) "a") (data (i32.const 246234) "a") (data (i32.const 246237) "a") (data (i32.const 246240) "a") (data (i32.const 246243) "a") (data (i32.const 246246) "a") (data (i32.const 246249) "a") (data (i32.const 246252) "a") (data (i32.const 246255) "a") (data (i32.const 246258) "a") (data (i32.const 246261) "a") (data (i32.const 246264) "a") (data (i32.const 246267) "a") (data (i32.const 246270) "a") (data (i32.const 246273) "a") (data (i32.const 246276) "a") (data (i32.const 246279) "a") (data (i32.const 246282) "a") (data (i32.const 246285) "a") (data (i32.const 246288) "a") (data (i32.const 246291) "a") (data (i32.const 246294) "a") (data (i32.const 246297) "a") (data (i32.const 246300) "a") (data (i32.const 246303) "a") (data (i32.const 246306) "a") (data (i32.const 246309) "a") (data (i32.const 246312) "a") (data (i32.const 246315) "a") (data (i32.const 246318) "a") (data (i32.const 246321) "a") (data (i32.const 246324) "a") (data (i32.const 246327) "a") (data (i32.const 246330) "a") (data (i32.const 246333) "a") (data (i32.const 246336) "a") (data (i32.const 246339) "a") (data (i32.const 246342) "a") (data (i32.const 246345) "a") (data (i32.const 246348) "a") (data (i32.const 246351) "a") (data (i32.const 246354) "a") (data (i32.const 246357) "a") (data (i32.const 246360) "a") (data (i32.const 246363) "a") (data (i32.const 246366) "a") (data (i32.const 246369) "a") (data (i32.const 246372) "a") (data (i32.const 246375) "a") (data (i32.const 246378) "a") (data (i32.const 246381) "a") (data (i32.const 246384) "a") (data (i32.const 246387) "a") (data (i32.const 246390) "a") (data (i32.const 246393) "a") (data (i32.const 246396) "a") (data (i32.const 246399) "a") (data (i32.const 246402) "a") (data (i32.const 246405) "a") (data (i32.const 246408) "a") (data (i32.const 246411) "a") (data (i32.const 246414) "a") (data (i32.const 246417) "a") (data (i32.const 246420) "a") (data (i32.const 246423) "a") (data (i32.const 246426) "a") (data (i32.const 246429) "a") (data (i32.const 246432) "a") (data (i32.const 246435) "a") (data (i32.const 246438) "a") (data (i32.const 246441) "a") (data (i32.const 246444) "a") (data (i32.const 246447) "a") (data (i32.const 246450) "a") (data (i32.const 246453) "a") (data (i32.const 246456) "a") (data (i32.const 246459) "a") (data (i32.const 246462) "a") (data (i32.const 246465) "a") (data (i32.const 246468) "a") (data (i32.const 246471) "a") (data (i32.const 246474) "a") (data (i32.const 246477) "a") (data (i32.const 246480) "a") (data (i32.const 246483) "a") (data (i32.const 246486) "a") (data (i32.const 246489) "a") (data (i32.const 246492) "a") (data (i32.const 246495) "a") (data (i32.const 246498) "a") (data (i32.const 246501) "a") (data (i32.const 246504) "a") (data (i32.const 246507) "a") (data (i32.const 246510) "a") (data (i32.const 246513) "a") (data (i32.const 246516) "a") (data (i32.const 246519) "a") (data (i32.const 246522) "a") (data (i32.const 246525) "a") (data (i32.const 246528) "a") (data (i32.const 246531) "a") (data (i32.const 246534) "a") (data (i32.const 246537) "a") (data (i32.const 246540) "a") (data (i32.const 246543) "a") (data (i32.const 246546) "a") (data (i32.const 246549) "a") (data (i32.const 246552) "a") (data (i32.const 246555) "a") (data (i32.const 246558) "a") (data (i32.const 246561) "a") (data (i32.const 246564) "a") (data (i32.const 246567) "a") (data (i32.const 246570) "a") (data (i32.const 246573) "a") (data (i32.const 246576) "a") (data (i32.const 246579) "a") (data (i32.const 246582) "a") (data (i32.const 246585) "a") (data (i32.const 246588) "a") (data (i32.const 246591) "a") (data (i32.const 246594) "a") (data (i32.const 246597) "a") (data (i32.const 246600) "a") (data (i32.const 246603) "a") (data (i32.const 246606) "a") (data (i32.const 246609) "a") (data (i32.const 246612) "a") (data (i32.const 246615) "a") (data (i32.const 246618) "a") (data (i32.const 246621) "a") (data (i32.const 246624) "a") (data (i32.const 246627) "a") (data (i32.const 246630) "a") (data (i32.const 246633) "a") (data (i32.const 246636) "a") (data (i32.const 246639) "a") (data (i32.const 246642) "a") (data (i32.const 246645) "a") (data (i32.const 246648) "a") (data (i32.const 246651) "a") (data (i32.const 246654) "a") (data (i32.const 246657) "a") (data (i32.const 246660) "a") (data (i32.const 246663) "a") (data (i32.const 246666) "a") (data (i32.const 246669) "a") (data (i32.const 246672) "a") (data (i32.const 246675) "a") (data (i32.const 246678) "a") (data (i32.const 246681) "a") (data (i32.const 246684) "a") (data (i32.const 246687) "a") (data (i32.const 246690) "a") (data (i32.const 246693) "a") (data (i32.const 246696) "a") (data (i32.const 246699) "a") (data (i32.const 246702) "a") (data (i32.const 246705) "a") (data (i32.const 246708) "a") (data (i32.const 246711) "a") (data (i32.const 246714) "a") (data (i32.const 246717) "a") (data (i32.const 246720) "a") (data (i32.const 246723) "a") (data (i32.const 246726) "a") (data (i32.const 246729) "a") (data (i32.const 246732) "a") (data (i32.const 246735) "a") (data (i32.const 246738) "a") (data (i32.const 246741) "a") (data (i32.const 246744) "a") (data (i32.const 246747) "a") (data (i32.const 246750) "a") (data (i32.const 246753) "a") (data (i32.const 246756) "a") (data (i32.const 246759) "a") (data (i32.const 246762) "a") (data (i32.const 246765) "a") (data (i32.const 246768) "a") (data (i32.const 246771) "a") (data (i32.const 246774) "a") (data (i32.const 246777) "a") (data (i32.const 246780) "a") (data (i32.const 246783) "a") (data (i32.const 246786) "a") (data (i32.const 246789) "a") (data (i32.const 246792) "a") (data (i32.const 246795) "a") (data (i32.const 246798) "a") (data (i32.const 246801) "a") (data (i32.const 246804) "a") (data (i32.const 246807) "a") (data (i32.const 246810) "a") (data (i32.const 246813) "a") (data (i32.const 246816) "a") (data (i32.const 246819) "a") (data (i32.const 246822) "a") (data (i32.const 246825) "a") (data (i32.const 246828) "a") (data (i32.const 246831) "a") (data (i32.const 246834) "a") (data (i32.const 246837) "a") (data (i32.const 246840) "a") (data (i32.const 246843) "a") (data (i32.const 246846) "a") (data (i32.const 246849) "a") (data (i32.const 246852) "a") (data (i32.const 246855) "a") (data (i32.const 246858) "a") (data (i32.const 246861) "a") (data (i32.const 246864) "a") (data (i32.const 246867) "a") (data (i32.const 246870) "a") (data (i32.const 246873) "a") (data (i32.const 246876) "a") (data (i32.const 246879) "a") (data (i32.const 246882) "a") (data (i32.const 246885) "a") (data (i32.const 246888) "a") (data (i32.const 246891) "a") (data (i32.const 246894) "a") (data (i32.const 246897) "a") (data (i32.const 246900) "a") (data (i32.const 246903) "a") (data (i32.const 246906) "a") (data (i32.const 246909) "a") (data (i32.const 246912) "a") (data (i32.const 246915) "a") (data (i32.const 246918) "a") (data (i32.const 246921) "a") (data (i32.const 246924) "a") (data (i32.const 246927) "a") (data (i32.const 246930) "a") (data (i32.const 246933) "a") (data (i32.const 246936) "a") (data (i32.const 246939) "a") (data (i32.const 246942) "a") (data (i32.const 246945) "a") (data (i32.const 246948) "a") (data (i32.const 246951) "a") (data (i32.const 246954) "a") (data (i32.const 246957) "a") (data (i32.const 246960) "a") (data (i32.const 246963) "a") (data (i32.const 246966) "a") (data (i32.const 246969) "a") (data (i32.const 246972) "a") (data (i32.const 246975) "a") (data (i32.const 246978) "a") (data (i32.const 246981) "a") (data (i32.const 246984) "a") (data (i32.const 246987) "a") (data (i32.const 246990) "a") (data (i32.const 246993) "a") (data (i32.const 246996) "a") (data (i32.const 246999) "a") (data (i32.const 247002) "a") (data (i32.const 247005) "a") (data (i32.const 247008) "a") (data (i32.const 247011) "a") (data (i32.const 247014) "a") (data (i32.const 247017) "a") (data (i32.const 247020) "a") (data (i32.const 247023) "a") (data (i32.const 247026) "a") (data (i32.const 247029) "a") (data (i32.const 247032) "a") (data (i32.const 247035) "a") (data (i32.const 247038) "a") (data (i32.const 247041) "a") (data (i32.const 247044) "a") (data (i32.const 247047) "a") (data (i32.const 247050) "a") (data (i32.const 247053) "a") (data (i32.const 247056) "a") (data (i32.const 247059) "a") (data (i32.const 247062) "a") (data (i32.const 247065) "a") (data (i32.const 247068) "a") (data (i32.const 247071) "a") (data (i32.const 247074) "a") (data (i32.const 247077) "a") (data (i32.const 247080) "a") (data (i32.const 247083) "a") (data (i32.const 247086) "a") (data (i32.const 247089) "a") (data (i32.const 247092) "a") (data (i32.const 247095) "a") (data (i32.const 247098) "a") (data (i32.const 247101) "a") (data (i32.const 247104) "a") (data (i32.const 247107) "a") (data (i32.const 247110) "a") (data (i32.const 247113) "a") (data (i32.const 247116) "a") (data (i32.const 247119) "a") (data (i32.const 247122) "a") (data (i32.const 247125) "a") (data (i32.const 247128) "a") (data (i32.const 247131) "a") (data (i32.const 247134) "a") (data (i32.const 247137) "a") (data (i32.const 247140) "a") (data (i32.const 247143) "a") (data (i32.const 247146) "a") (data (i32.const 247149) "a") (data (i32.const 247152) "a") (data (i32.const 247155) "a") (data (i32.const 247158) "a") (data (i32.const 247161) "a") (data (i32.const 247164) "a") (data (i32.const 247167) "a") (data (i32.const 247170) "a") (data (i32.const 247173) "a") (data (i32.const 247176) "a") (data (i32.const 247179) "a") (data (i32.const 247182) "a") (data (i32.const 247185) "a") (data (i32.const 247188) "a") (data (i32.const 247191) "a") (data (i32.const 247194) "a") (data (i32.const 247197) "a") (data (i32.const 247200) "a") (data (i32.const 247203) "a") (data (i32.const 247206) "a") (data (i32.const 247209) "a") (data (i32.const 247212) "a") (data (i32.const 247215) "a") (data (i32.const 247218) "a") (data (i32.const 247221) "a") (data (i32.const 247224) "a") (data (i32.const 247227) "a") (data (i32.const 247230) "a") (data (i32.const 247233) "a") (data (i32.const 247236) "a") (data (i32.const 247239) "a") (data (i32.const 247242) "a") (data (i32.const 247245) "a") (data (i32.const 247248) "a") (data (i32.const 247251) "a") (data (i32.const 247254) "a") (data (i32.const 247257) "a") (data (i32.const 247260) "a") (data (i32.const 247263) "a") (data (i32.const 247266) "a") (data (i32.const 247269) "a") (data (i32.const 247272) "a") (data (i32.const 247275) "a") (data (i32.const 247278) "a") (data (i32.const 247281) "a") (data (i32.const 247284) "a") (data (i32.const 247287) "a") (data (i32.const 247290) "a") (data (i32.const 247293) "a") (data (i32.const 247296) "a") (data (i32.const 247299) "a") (data (i32.const 247302) "a") (data (i32.const 247305) "a") (data (i32.const 247308) "a") (data (i32.const 247311) "a") (data (i32.const 247314) "a") (data (i32.const 247317) "a") (data (i32.const 247320) "a") (data (i32.const 247323) "a") (data (i32.const 247326) "a") (data (i32.const 247329) "a") (data (i32.const 247332) "a") (data (i32.const 247335) "a") (data (i32.const 247338) "a") (data (i32.const 247341) "a") (data (i32.const 247344) "a") (data (i32.const 247347) "a") (data (i32.const 247350) "a") (data (i32.const 247353) "a") (data (i32.const 247356) "a") (data (i32.const 247359) "a") (data (i32.const 247362) "a") (data (i32.const 247365) "a") (data (i32.const 247368) "a") (data (i32.const 247371) "a") (data (i32.const 247374) "a") (data (i32.const 247377) "a") (data (i32.const 247380) "a") (data (i32.const 247383) "a") (data (i32.const 247386) "a") (data (i32.const 247389) "a") (data (i32.const 247392) "a") (data (i32.const 247395) "a") (data (i32.const 247398) "a") (data (i32.const 247401) "a") (data (i32.const 247404) "a") (data (i32.const 247407) "a") (data (i32.const 247410) "a") (data (i32.const 247413) "a") (data (i32.const 247416) "a") (data (i32.const 247419) "a") (data (i32.const 247422) "a") (data (i32.const 247425) "a") (data (i32.const 247428) "a") (data (i32.const 247431) "a") (data (i32.const 247434) "a") (data (i32.const 247437) "a") (data (i32.const 247440) "a") (data (i32.const 247443) "a") (data (i32.const 247446) "a") (data (i32.const 247449) "a") (data (i32.const 247452) "a") (data (i32.const 247455) "a") (data (i32.const 247458) "a") (data (i32.const 247461) "a") (data (i32.const 247464) "a") (data (i32.const 247467) "a") (data (i32.const 247470) "a") (data (i32.const 247473) "a") (data (i32.const 247476) "a") (data (i32.const 247479) "a") (data (i32.const 247482) "a") (data (i32.const 247485) "a") (data (i32.const 247488) "a") (data (i32.const 247491) "a") (data (i32.const 247494) "a") (data (i32.const 247497) "a") (data (i32.const 247500) "a") (data (i32.const 247503) "a") (data (i32.const 247506) "a") (data (i32.const 247509) "a") (data (i32.const 247512) "a") (data (i32.const 247515) "a") (data (i32.const 247518) "a") (data (i32.const 247521) "a") (data (i32.const 247524) "a") (data (i32.const 247527) "a") (data (i32.const 247530) "a") (data (i32.const 247533) "a") (data (i32.const 247536) "a") (data (i32.const 247539) "a") (data (i32.const 247542) "a") (data (i32.const 247545) "a") (data (i32.const 247548) "a") (data (i32.const 247551) "a") (data (i32.const 247554) "a") (data (i32.const 247557) "a") (data (i32.const 247560) "a") (data (i32.const 247563) "a") (data (i32.const 247566) "a") (data (i32.const 247569) "a") (data (i32.const 247572) "a") (data (i32.const 247575) "a") (data (i32.const 247578) "a") (data (i32.const 247581) "a") (data (i32.const 247584) "a") (data (i32.const 247587) "a") (data (i32.const 247590) "a") (data (i32.const 247593) "a") (data (i32.const 247596) "a") (data (i32.const 247599) "a") (data (i32.const 247602) "a") (data (i32.const 247605) "a") (data (i32.const 247608) "a") (data (i32.const 247611) "a") (data (i32.const 247614) "a") (data (i32.const 247617) "a") (data (i32.const 247620) "a") (data (i32.const 247623) "a") (data (i32.const 247626) "a") (data (i32.const 247629) "a") (data (i32.const 247632) "a") (data (i32.const 247635) "a") (data (i32.const 247638) "a") (data (i32.const 247641) "a") (data (i32.const 247644) "a") (data (i32.const 247647) "a") (data (i32.const 247650) "a") (data (i32.const 247653) "a") (data (i32.const 247656) "a") (data (i32.const 247659) "a") (data (i32.const 247662) "a") (data (i32.const 247665) "a") (data (i32.const 247668) "a") (data (i32.const 247671) "a") (data (i32.const 247674) "a") (data (i32.const 247677) "a") (data (i32.const 247680) "a") (data (i32.const 247683) "a") (data (i32.const 247686) "a") (data (i32.const 247689) "a") (data (i32.const 247692) "a") (data (i32.const 247695) "a") (data (i32.const 247698) "a") (data (i32.const 247701) "a") (data (i32.const 247704) "a") (data (i32.const 247707) "a") (data (i32.const 247710) "a") (data (i32.const 247713) "a") (data (i32.const 247716) "a") (data (i32.const 247719) "a") (data (i32.const 247722) "a") (data (i32.const 247725) "a") (data (i32.const 247728) "a") (data (i32.const 247731) "a") (data (i32.const 247734) "a") (data (i32.const 247737) "a") (data (i32.const 247740) "a") (data (i32.const 247743) "a") (data (i32.const 247746) "a") (data (i32.const 247749) "a") (data (i32.const 247752) "a") (data (i32.const 247755) "a") (data (i32.const 247758) "a") (data (i32.const 247761) "a") (data (i32.const 247764) "a") (data (i32.const 247767) "a") (data (i32.const 247770) "a") (data (i32.const 247773) "a") (data (i32.const 247776) "a") (data (i32.const 247779) "a") (data (i32.const 247782) "a") (data (i32.const 247785) "a") (data (i32.const 247788) "a") (data (i32.const 247791) "a") (data (i32.const 247794) "a") (data (i32.const 247797) "a") (data (i32.const 247800) "a") (data (i32.const 247803) "a") (data (i32.const 247806) "a") (data (i32.const 247809) "a") (data (i32.const 247812) "a") (data (i32.const 247815) "a") (data (i32.const 247818) "a") (data (i32.const 247821) "a") (data (i32.const 247824) "a") (data (i32.const 247827) "a") (data (i32.const 247830) "a") (data (i32.const 247833) "a") (data (i32.const 247836) "a") (data (i32.const 247839) "a") (data (i32.const 247842) "a") (data (i32.const 247845) "a") (data (i32.const 247848) "a") (data (i32.const 247851) "a") (data (i32.const 247854) "a") (data (i32.const 247857) "a") (data (i32.const 247860) "a") (data (i32.const 247863) "a") (data (i32.const 247866) "a") (data (i32.const 247869) "a") (data (i32.const 247872) "a") (data (i32.const 247875) "a") (data (i32.const 247878) "a") (data (i32.const 247881) "a") (data (i32.const 247884) "a") (data (i32.const 247887) "a") (data (i32.const 247890) "a") (data (i32.const 247893) "a") (data (i32.const 247896) "a") (data (i32.const 247899) "a") (data (i32.const 247902) "a") (data (i32.const 247905) "a") (data (i32.const 247908) "a") (data (i32.const 247911) "a") (data (i32.const 247914) "a") (data (i32.const 247917) "a") (data (i32.const 247920) "a") (data (i32.const 247923) "a") (data (i32.const 247926) "a") (data (i32.const 247929) "a") (data (i32.const 247932) "a") (data (i32.const 247935) "a") (data (i32.const 247938) "a") (data (i32.const 247941) "a") (data (i32.const 247944) "a") (data (i32.const 247947) "a") (data (i32.const 247950) "a") (data (i32.const 247953) "a") (data (i32.const 247956) "a") (data (i32.const 247959) "a") (data (i32.const 247962) "a") (data (i32.const 247965) "a") (data (i32.const 247968) "a") (data (i32.const 247971) "a") (data (i32.const 247974) "a") (data (i32.const 247977) "a") (data (i32.const 247980) "a") (data (i32.const 247983) "a") (data (i32.const 247986) "a") (data (i32.const 247989) "a") (data (i32.const 247992) "a") (data (i32.const 247995) "a") (data (i32.const 247998) "a") (data (i32.const 248001) "a") (data (i32.const 248004) "a") (data (i32.const 248007) "a") (data (i32.const 248010) "a") (data (i32.const 248013) "a") (data (i32.const 248016) "a") (data (i32.const 248019) "a") (data (i32.const 248022) "a") (data (i32.const 248025) "a") (data (i32.const 248028) "a") (data (i32.const 248031) "a") (data (i32.const 248034) "a") (data (i32.const 248037) "a") (data (i32.const 248040) "a") (data (i32.const 248043) "a") (data (i32.const 248046) "a") (data (i32.const 248049) "a") (data (i32.const 248052) "a") (data (i32.const 248055) "a") (data (i32.const 248058) "a") (data (i32.const 248061) "a") (data (i32.const 248064) "a") (data (i32.const 248067) "a") (data (i32.const 248070) "a") (data (i32.const 248073) "a") (data (i32.const 248076) "a") (data (i32.const 248079) "a") (data (i32.const 248082) "a") (data (i32.const 248085) "a") (data (i32.const 248088) "a") (data (i32.const 248091) "a") (data (i32.const 248094) "a") (data (i32.const 248097) "a") (data (i32.const 248100) "a") (data (i32.const 248103) "a") (data (i32.const 248106) "a") (data (i32.const 248109) "a") (data (i32.const 248112) "a") (data (i32.const 248115) "a") (data (i32.const 248118) "a") (data (i32.const 248121) "a") (data (i32.const 248124) "a") (data (i32.const 248127) "a") (data (i32.const 248130) "a") (data (i32.const 248133) "a") (data (i32.const 248136) "a") (data (i32.const 248139) "a") (data (i32.const 248142) "a") (data (i32.const 248145) "a") (data (i32.const 248148) "a") (data (i32.const 248151) "a") (data (i32.const 248154) "a") (data (i32.const 248157) "a") (data (i32.const 248160) "a") (data (i32.const 248163) "a") (data (i32.const 248166) "a") (data (i32.const 248169) "a") (data (i32.const 248172) "a") (data (i32.const 248175) "a") (data (i32.const 248178) "a") (data (i32.const 248181) "a") (data (i32.const 248184) "a") (data (i32.const 248187) "a") (data (i32.const 248190) "a") (data (i32.const 248193) "a") (data (i32.const 248196) "a") (data (i32.const 248199) "a") (data (i32.const 248202) "a") (data (i32.const 248205) "a") (data (i32.const 248208) "a") (data (i32.const 248211) "a") (data (i32.const 248214) "a") (data (i32.const 248217) "a") (data (i32.const 248220) "a") (data (i32.const 248223) "a") (data (i32.const 248226) "a") (data (i32.const 248229) "a") (data (i32.const 248232) "a") (data (i32.const 248235) "a") (data (i32.const 248238) "a") (data (i32.const 248241) "a") (data (i32.const 248244) "a") (data (i32.const 248247) "a") (data (i32.const 248250) "a") (data (i32.const 248253) "a") (data (i32.const 248256) "a") (data (i32.const 248259) "a") (data (i32.const 248262) "a") (data (i32.const 248265) "a") (data (i32.const 248268) "a") (data (i32.const 248271) "a") (data (i32.const 248274) "a") (data (i32.const 248277) "a") (data (i32.const 248280) "a") (data (i32.const 248283) "a") (data (i32.const 248286) "a") (data (i32.const 248289) "a") (data (i32.const 248292) "a") (data (i32.const 248295) "a") (data (i32.const 248298) "a") (data (i32.const 248301) "a") (data (i32.const 248304) "a") (data (i32.const 248307) "a") (data (i32.const 248310) "a") (data (i32.const 248313) "a") (data (i32.const 248316) "a") (data (i32.const 248319) "a") (data (i32.const 248322) "a") (data (i32.const 248325) "a") (data (i32.const 248328) "a") (data (i32.const 248331) "a") (data (i32.const 248334) "a") (data (i32.const 248337) "a") (data (i32.const 248340) "a") (data (i32.const 248343) "a") (data (i32.const 248346) "a") (data (i32.const 248349) "a") (data (i32.const 248352) "a") (data (i32.const 248355) "a") (data (i32.const 248358) "a") (data (i32.const 248361) "a") (data (i32.const 248364) "a") (data (i32.const 248367) "a") (data (i32.const 248370) "a") (data (i32.const 248373) "a") (data (i32.const 248376) "a") (data (i32.const 248379) "a") (data (i32.const 248382) "a") (data (i32.const 248385) "a") (data (i32.const 248388) "a") (data (i32.const 248391) "a") (data (i32.const 248394) "a") (data (i32.const 248397) "a") (data (i32.const 248400) "a") (data (i32.const 248403) "a") (data (i32.const 248406) "a") (data (i32.const 248409) "a") (data (i32.const 248412) "a") (data (i32.const 248415) "a") (data (i32.const 248418) "a") (data (i32.const 248421) "a") (data (i32.const 248424) "a") (data (i32.const 248427) "a") (data (i32.const 248430) "a") (data (i32.const 248433) "a") (data (i32.const 248436) "a") (data (i32.const 248439) "a") (data (i32.const 248442) "a") (data (i32.const 248445) "a") (data (i32.const 248448) "a") (data (i32.const 248451) "a") (data (i32.const 248454) "a") (data (i32.const 248457) "a") (data (i32.const 248460) "a") (data (i32.const 248463) "a") (data (i32.const 248466) "a") (data (i32.const 248469) "a") (data (i32.const 248472) "a") (data (i32.const 248475) "a") (data (i32.const 248478) "a") (data (i32.const 248481) "a") (data (i32.const 248484) "a") (data (i32.const 248487) "a") (data (i32.const 248490) "a") (data (i32.const 248493) "a") (data (i32.const 248496) "a") (data (i32.const 248499) "a") (data (i32.const 248502) "a") (data (i32.const 248505) "a") (data (i32.const 248508) "a") (data (i32.const 248511) "a") (data (i32.const 248514) "a") (data (i32.const 248517) "a") (data (i32.const 248520) "a") (data (i32.const 248523) "a") (data (i32.const 248526) "a") (data (i32.const 248529) "a") (data (i32.const 248532) "a") (data (i32.const 248535) "a") (data (i32.const 248538) "a") (data (i32.const 248541) "a") (data (i32.const 248544) "a") (data (i32.const 248547) "a") (data (i32.const 248550) "a") (data (i32.const 248553) "a") (data (i32.const 248556) "a") (data (i32.const 248559) "a") (data (i32.const 248562) "a") (data (i32.const 248565) "a") (data (i32.const 248568) "a") (data (i32.const 248571) "a") (data (i32.const 248574) "a") (data (i32.const 248577) "a") (data (i32.const 248580) "a") (data (i32.const 248583) "a") (data (i32.const 248586) "a") (data (i32.const 248589) "a") (data (i32.const 248592) "a") (data (i32.const 248595) "a") (data (i32.const 248598) "a") (data (i32.const 248601) "a") (data (i32.const 248604) "a") (data (i32.const 248607) "a") (data (i32.const 248610) "a") (data (i32.const 248613) "a") (data (i32.const 248616) "a") (data (i32.const 248619) "a") (data (i32.const 248622) "a") (data (i32.const 248625) "a") (data (i32.const 248628) "a") (data (i32.const 248631) "a") (data (i32.const 248634) "a") (data (i32.const 248637) "a") (data (i32.const 248640) "a") (data (i32.const 248643) "a") (data (i32.const 248646) "a") (data (i32.const 248649) "a") (data (i32.const 248652) "a") (data (i32.const 248655) "a") (data (i32.const 248658) "a") (data (i32.const 248661) "a") (data (i32.const 248664) "a") (data (i32.const 248667) "a") (data (i32.const 248670) "a") (data (i32.const 248673) "a") (data (i32.const 248676) "a") (data (i32.const 248679) "a") (data (i32.const 248682) "a") (data (i32.const 248685) "a") (data (i32.const 248688) "a") (data (i32.const 248691) "a") (data (i32.const 248694) "a") (data (i32.const 248697) "a") (data (i32.const 248700) "a") (data (i32.const 248703) "a") (data (i32.const 248706) "a") (data (i32.const 248709) "a") (data (i32.const 248712) "a") (data (i32.const 248715) "a") (data (i32.const 248718) "a") (data (i32.const 248721) "a") (data (i32.const 248724) "a") (data (i32.const 248727) "a") (data (i32.const 248730) "a") (data (i32.const 248733) "a") (data (i32.const 248736) "a") (data (i32.const 248739) "a") (data (i32.const 248742) "a") (data (i32.const 248745) "a") (data (i32.const 248748) "a") (data (i32.const 248751) "a") (data (i32.const 248754) "a") (data (i32.const 248757) "a") (data (i32.const 248760) "a") (data (i32.const 248763) "a") (data (i32.const 248766) "a") (data (i32.const 248769) "a") (data (i32.const 248772) "a") (data (i32.const 248775) "a") (data (i32.const 248778) "a") (data (i32.const 248781) "a") (data (i32.const 248784) "a") (data (i32.const 248787) "a") (data (i32.const 248790) "a") (data (i32.const 248793) "a") (data (i32.const 248796) "a") (data (i32.const 248799) "a") (data (i32.const 248802) "a") (data (i32.const 248805) "a") (data (i32.const 248808) "a") (data (i32.const 248811) "a") (data (i32.const 248814) "a") (data (i32.const 248817) "a") (data (i32.const 248820) "a") (data (i32.const 248823) "a") (data (i32.const 248826) "a") (data (i32.const 248829) "a") (data (i32.const 248832) "a") (data (i32.const 248835) "a") (data (i32.const 248838) "a") (data (i32.const 248841) "a") (data (i32.const 248844) "a") (data (i32.const 248847) "a") (data (i32.const 248850) "a") (data (i32.const 248853) "a") (data (i32.const 248856) "a") (data (i32.const 248859) "a") (data (i32.const 248862) "a") (data (i32.const 248865) "a") (data (i32.const 248868) "a") (data (i32.const 248871) "a") (data (i32.const 248874) "a") (data (i32.const 248877) "a") (data (i32.const 248880) "a") (data (i32.const 248883) "a") (data (i32.const 248886) "a") (data (i32.const 248889) "a") (data (i32.const 248892) "a") (data (i32.const 248895) "a") (data (i32.const 248898) "a") (data (i32.const 248901) "a") (data (i32.const 248904) "a") (data (i32.const 248907) "a") (data (i32.const 248910) "a") (data (i32.const 248913) "a") (data (i32.const 248916) "a") (data (i32.const 248919) "a") (data (i32.const 248922) "a") (data (i32.const 248925) "a") (data (i32.const 248928) "a") (data (i32.const 248931) "a") (data (i32.const 248934) "a") (data (i32.const 248937) "a") (data (i32.const 248940) "a") (data (i32.const 248943) "a") (data (i32.const 248946) "a") (data (i32.const 248949) "a") (data (i32.const 248952) "a") (data (i32.const 248955) "a") (data (i32.const 248958) "a") (data (i32.const 248961) "a") (data (i32.const 248964) "a") (data (i32.const 248967) "a") (data (i32.const 248970) "a") (data (i32.const 248973) "a") (data (i32.const 248976) "a") (data (i32.const 248979) "a") (data (i32.const 248982) "a") (data (i32.const 248985) "a") (data (i32.const 248988) "a") (data (i32.const 248991) "a") (data (i32.const 248994) "a") (data (i32.const 248997) "a") (data (i32.const 249000) "a") (data (i32.const 249003) "a") (data (i32.const 249006) "a") (data (i32.const 249009) "a") (data (i32.const 249012) "a") (data (i32.const 249015) "a") (data (i32.const 249018) "a") (data (i32.const 249021) "a") (data (i32.const 249024) "a") (data (i32.const 249027) "a") (data (i32.const 249030) "a") (data (i32.const 249033) "a") (data (i32.const 249036) "a") (data (i32.const 249039) "a") (data (i32.const 249042) "a") (data (i32.const 249045) "a") (data (i32.const 249048) "a") (data (i32.const 249051) "a") (data (i32.const 249054) "a") (data (i32.const 249057) "a") (data (i32.const 249060) "a") (data (i32.const 249063) "a") (data (i32.const 249066) "a") (data (i32.const 249069) "a") (data (i32.const 249072) "a") (data (i32.const 249075) "a") (data (i32.const 249078) "a") (data (i32.const 249081) "a") (data (i32.const 249084) "a") (data (i32.const 249087) "a") (data (i32.const 249090) "a") (data (i32.const 249093) "a") (data (i32.const 249096) "a") (data (i32.const 249099) "a") (data (i32.const 249102) "a") (data (i32.const 249105) "a") (data (i32.const 249108) "a") (data (i32.const 249111) "a") (data (i32.const 249114) "a") (data (i32.const 249117) "a") (data (i32.const 249120) "a") (data (i32.const 249123) "a") (data (i32.const 249126) "a") (data (i32.const 249129) "a") (data (i32.const 249132) "a") (data (i32.const 249135) "a") (data (i32.const 249138) "a") (data (i32.const 249141) "a") (data (i32.const 249144) "a") (data (i32.const 249147) "a") (data (i32.const 249150) "a") (data (i32.const 249153) "a") (data (i32.const 249156) "a") (data (i32.const 249159) "a") (data (i32.const 249162) "a") (data (i32.const 249165) "a") (data (i32.const 249168) "a") (data (i32.const 249171) "a") (data (i32.const 249174) "a") (data (i32.const 249177) "a") (data (i32.const 249180) "a") (data (i32.const 249183) "a") (data (i32.const 249186) "a") (data (i32.const 249189) "a") (data (i32.const 249192) "a") (data (i32.const 249195) "a") (data (i32.const 249198) "a") (data (i32.const 249201) "a") (data (i32.const 249204) "a") (data (i32.const 249207) "a") (data (i32.const 249210) "a") (data (i32.const 249213) "a") (data (i32.const 249216) "a") (data (i32.const 249219) "a") (data (i32.const 249222) "a") (data (i32.const 249225) "a") (data (i32.const 249228) "a") (data (i32.const 249231) "a") (data (i32.const 249234) "a") (data (i32.const 249237) "a") (data (i32.const 249240) "a") (data (i32.const 249243) "a") (data (i32.const 249246) "a") (data (i32.const 249249) "a") (data (i32.const 249252) "a") (data (i32.const 249255) "a") (data (i32.const 249258) "a") (data (i32.const 249261) "a") (data (i32.const 249264) "a") (data (i32.const 249267) "a") (data (i32.const 249270) "a") (data (i32.const 249273) "a") (data (i32.const 249276) "a") (data (i32.const 249279) "a") (data (i32.const 249282) "a") (data (i32.const 249285) "a") (data (i32.const 249288) "a") (data (i32.const 249291) "a") (data (i32.const 249294) "a") (data (i32.const 249297) "a") (data (i32.const 249300) "a") (data (i32.const 249303) "a") (data (i32.const 249306) "a") (data (i32.const 249309) "a") (data (i32.const 249312) "a") (data (i32.const 249315) "a") (data (i32.const 249318) "a") (data (i32.const 249321) "a") (data (i32.const 249324) "a") (data (i32.const 249327) "a") (data (i32.const 249330) "a") (data (i32.const 249333) "a") (data (i32.const 249336) "a") (data (i32.const 249339) "a") (data (i32.const 249342) "a") (data (i32.const 249345) "a") (data (i32.const 249348) "a") (data (i32.const 249351) "a") (data (i32.const 249354) "a") (data (i32.const 249357) "a") (data (i32.const 249360) "a") (data (i32.const 249363) "a") (data (i32.const 249366) "a") (data (i32.const 249369) "a") (data (i32.const 249372) "a") (data (i32.const 249375) "a") (data (i32.const 249378) "a") (data (i32.const 249381) "a") (data (i32.const 249384) "a") (data (i32.const 249387) "a") (data (i32.const 249390) "a") (data (i32.const 249393) "a") (data (i32.const 249396) "a") (data (i32.const 249399) "a") (data (i32.const 249402) "a") (data (i32.const 249405) "a") (data (i32.const 249408) "a") (data (i32.const 249411) "a") (data (i32.const 249414) "a") (data (i32.const 249417) "a") (data (i32.const 249420) "a") (data (i32.const 249423) "a") (data (i32.const 249426) "a") (data (i32.const 249429) "a") (data (i32.const 249432) "a") (data (i32.const 249435) "a") (data (i32.const 249438) "a") (data (i32.const 249441) "a") (data (i32.const 249444) "a") (data (i32.const 249447) "a") (data (i32.const 249450) "a") (data (i32.const 249453) "a") (data (i32.const 249456) "a") (data (i32.const 249459) "a") (data (i32.const 249462) "a") (data (i32.const 249465) "a") (data (i32.const 249468) "a") (data (i32.const 249471) "a") (data (i32.const 249474) "a") (data (i32.const 249477) "a") (data (i32.const 249480) "a") (data (i32.const 249483) "a") (data (i32.const 249486) "a") (data (i32.const 249489) "a") (data (i32.const 249492) "a") (data (i32.const 249495) "a") (data (i32.const 249498) "a") (data (i32.const 249501) "a") (data (i32.const 249504) "a") (data (i32.const 249507) "a") (data (i32.const 249510) "a") (data (i32.const 249513) "a") (data (i32.const 249516) "a") (data (i32.const 249519) "a") (data (i32.const 249522) "a") (data (i32.const 249525) "a") (data (i32.const 249528) "a") (data (i32.const 249531) "a") (data (i32.const 249534) "a") (data (i32.const 249537) "a") (data (i32.const 249540) "a") (data (i32.const 249543) "a") (data (i32.const 249546) "a") (data (i32.const 249549) "a") (data (i32.const 249552) "a") (data (i32.const 249555) "a") (data (i32.const 249558) "a") (data (i32.const 249561) "a") (data (i32.const 249564) "a") (data (i32.const 249567) "a") (data (i32.const 249570) "a") (data (i32.const 249573) "a") (data (i32.const 249576) "a") (data (i32.const 249579) "a") (data (i32.const 249582) "a") (data (i32.const 249585) "a") (data (i32.const 249588) "a") (data (i32.const 249591) "a") (data (i32.const 249594) "a") (data (i32.const 249597) "a") (data (i32.const 249600) "a") (data (i32.const 249603) "a") (data (i32.const 249606) "a") (data (i32.const 249609) "a") (data (i32.const 249612) "a") (data (i32.const 249615) "a") (data (i32.const 249618) "a") (data (i32.const 249621) "a") (data (i32.const 249624) "a") (data (i32.const 249627) "a") (data (i32.const 249630) "a") (data (i32.const 249633) "a") (data (i32.const 249636) "a") (data (i32.const 249639) "a") (data (i32.const 249642) "a") (data (i32.const 249645) "a") (data (i32.const 249648) "a") (data (i32.const 249651) "a") (data (i32.const 249654) "a") (data (i32.const 249657) "a") (data (i32.const 249660) "a") (data (i32.const 249663) "a") (data (i32.const 249666) "a") (data (i32.const 249669) "a") (data (i32.const 249672) "a") (data (i32.const 249675) "a") (data (i32.const 249678) "a") (data (i32.const 249681) "a") (data (i32.const 249684) "a") (data (i32.const 249687) "a") (data (i32.const 249690) "a") (data (i32.const 249693) "a") (data (i32.const 249696) "a") (data (i32.const 249699) "a") (data (i32.const 249702) "a") (data (i32.const 249705) "a") (data (i32.const 249708) "a") (data (i32.const 249711) "a") (data (i32.const 249714) "a") (data (i32.const 249717) "a") (data (i32.const 249720) "a") (data (i32.const 249723) "a") (data (i32.const 249726) "a") (data (i32.const 249729) "a") (data (i32.const 249732) "a") (data (i32.const 249735) "a") (data (i32.const 249738) "a") (data (i32.const 249741) "a") (data (i32.const 249744) "a") (data (i32.const 249747) "a") (data (i32.const 249750) "a") (data (i32.const 249753) "a") (data (i32.const 249756) "a") (data (i32.const 249759) "a") (data (i32.const 249762) "a") (data (i32.const 249765) "a") (data (i32.const 249768) "a") (data (i32.const 249771) "a") (data (i32.const 249774) "a") (data (i32.const 249777) "a") (data (i32.const 249780) "a") (data (i32.const 249783) "a") (data (i32.const 249786) "a") (data (i32.const 249789) "a") (data (i32.const 249792) "a") (data (i32.const 249795) "a") (data (i32.const 249798) "a") (data (i32.const 249801) "a") (data (i32.const 249804) "a") (data (i32.const 249807) "a") (data (i32.const 249810) "a") (data (i32.const 249813) "a") (data (i32.const 249816) "a") (data (i32.const 249819) "a") (data (i32.const 249822) "a") (data (i32.const 249825) "a") (data (i32.const 249828) "a") (data (i32.const 249831) "a") (data (i32.const 249834) "a") (data (i32.const 249837) "a") (data (i32.const 249840) "a") (data (i32.const 249843) "a") (data (i32.const 249846) "a") (data (i32.const 249849) "a") (data (i32.const 249852) "a") (data (i32.const 249855) "a") (data (i32.const 249858) "a") (data (i32.const 249861) "a") (data (i32.const 249864) "a") (data (i32.const 249867) "a") (data (i32.const 249870) "a") (data (i32.const 249873) "a") (data (i32.const 249876) "a") (data (i32.const 249879) "a") (data (i32.const 249882) "a") (data (i32.const 249885) "a") (data (i32.const 249888) "a") (data (i32.const 249891) "a") (data (i32.const 249894) "a") (data (i32.const 249897) "a") (data (i32.const 249900) "a") (data (i32.const 249903) "a") (data (i32.const 249906) "a") (data (i32.const 249909) "a") (data (i32.const 249912) "a") (data (i32.const 249915) "a") (data (i32.const 249918) "a") (data (i32.const 249921) "a") (data (i32.const 249924) "a") (data (i32.const 249927) "a") (data (i32.const 249930) "a") (data (i32.const 249933) "a") (data (i32.const 249936) "a") (data (i32.const 249939) "a") (data (i32.const 249942) "a") (data (i32.const 249945) "a") (data (i32.const 249948) "a") (data (i32.const 249951) "a") (data (i32.const 249954) "a") (data (i32.const 249957) "a") (data (i32.const 249960) "a") (data (i32.const 249963) "a") (data (i32.const 249966) "a") (data (i32.const 249969) "a") (data (i32.const 249972) "a") (data (i32.const 249975) "a") (data (i32.const 249978) "a") (data (i32.const 249981) "a") (data (i32.const 249984) "a") (data (i32.const 249987) "a") (data (i32.const 249990) "a") (data (i32.const 249993) "a") (data (i32.const 249996) "a") (data (i32.const 249999) "a") (data (i32.const 250002) "a") (data (i32.const 250005) "a") (data (i32.const 250008) "a") (data (i32.const 250011) "a") (data (i32.const 250014) "a") (data (i32.const 250017) "a") (data (i32.const 250020) "a") (data (i32.const 250023) "a") (data (i32.const 250026) "a") (data (i32.const 250029) "a") (data (i32.const 250032) "a") (data (i32.const 250035) "a") (data (i32.const 250038) "a") (data (i32.const 250041) "a") (data (i32.const 250044) "a") (data (i32.const 250047) "a") (data (i32.const 250050) "a") (data (i32.const 250053) "a") (data (i32.const 250056) "a") (data (i32.const 250059) "a") (data (i32.const 250062) "a") (data (i32.const 250065) "a") (data (i32.const 250068) "a") (data (i32.const 250071) "a") (data (i32.const 250074) "a") (data (i32.const 250077) "a") (data (i32.const 250080) "a") (data (i32.const 250083) "a") (data (i32.const 250086) "a") (data (i32.const 250089) "a") (data (i32.const 250092) "a") (data (i32.const 250095) "a") (data (i32.const 250098) "a") (data (i32.const 250101) "a") (data (i32.const 250104) "a") (data (i32.const 250107) "a") (data (i32.const 250110) "a") (data (i32.const 250113) "a") (data (i32.const 250116) "a") (data (i32.const 250119) "a") (data (i32.const 250122) "a") (data (i32.const 250125) "a") (data (i32.const 250128) "a") (data (i32.const 250131) "a") (data (i32.const 250134) "a") (data (i32.const 250137) "a") (data (i32.const 250140) "a") (data (i32.const 250143) "a") (data (i32.const 250146) "a") (data (i32.const 250149) "a") (data (i32.const 250152) "a") (data (i32.const 250155) "a") (data (i32.const 250158) "a") (data (i32.const 250161) "a") (data (i32.const 250164) "a") (data (i32.const 250167) "a") (data (i32.const 250170) "a") (data (i32.const 250173) "a") (data (i32.const 250176) "a") (data (i32.const 250179) "a") (data (i32.const 250182) "a") (data (i32.const 250185) "a") (data (i32.const 250188) "a") (data (i32.const 250191) "a") (data (i32.const 250194) "a") (data (i32.const 250197) "a") (data (i32.const 250200) "a") (data (i32.const 250203) "a") (data (i32.const 250206) "a") (data (i32.const 250209) "a") (data (i32.const 250212) "a") (data (i32.const 250215) "a") (data (i32.const 250218) "a") (data (i32.const 250221) "a") (data (i32.const 250224) "a") (data (i32.const 250227) "a") (data (i32.const 250230) "a") (data (i32.const 250233) "a") (data (i32.const 250236) "a") (data (i32.const 250239) "a") (data (i32.const 250242) "a") (data (i32.const 250245) "a") (data (i32.const 250248) "a") (data (i32.const 250251) "a") (data (i32.const 250254) "a") (data (i32.const 250257) "a") (data (i32.const 250260) "a") (data (i32.const 250263) "a") (data (i32.const 250266) "a") (data (i32.const 250269) "a") (data (i32.const 250272) "a") (data (i32.const 250275) "a") (data (i32.const 250278) "a") (data (i32.const 250281) "a") (data (i32.const 250284) "a") (data (i32.const 250287) "a") (data (i32.const 250290) "a") (data (i32.const 250293) "a") (data (i32.const 250296) "a") (data (i32.const 250299) "a") (data (i32.const 250302) "a") (data (i32.const 250305) "a") (data (i32.const 250308) "a") (data (i32.const 250311) "a") (data (i32.const 250314) "a") (data (i32.const 250317) "a") (data (i32.const 250320) "a") (data (i32.const 250323) "a") (data (i32.const 250326) "a") (data (i32.const 250329) "a") (data (i32.const 250332) "a") (data (i32.const 250335) "a") (data (i32.const 250338) "a") (data (i32.const 250341) "a") (data (i32.const 250344) "a") (data (i32.const 250347) "a") (data (i32.const 250350) "a") (data (i32.const 250353) "a") (data (i32.const 250356) "a") (data (i32.const 250359) "a") (data (i32.const 250362) "a") (data (i32.const 250365) "a") (data (i32.const 250368) "a") (data (i32.const 250371) "a") (data (i32.const 250374) "a") (data (i32.const 250377) "a") (data (i32.const 250380) "a") (data (i32.const 250383) "a") (data (i32.const 250386) "a") (data (i32.const 250389) "a") (data (i32.const 250392) "a") (data (i32.const 250395) "a") (data (i32.const 250398) "a") (data (i32.const 250401) "a") (data (i32.const 250404) "a") (data (i32.const 250407) "a") (data (i32.const 250410) "a") (data (i32.const 250413) "a") (data (i32.const 250416) "a") (data (i32.const 250419) "a") (data (i32.const 250422) "a") (data (i32.const 250425) "a") (data (i32.const 250428) "a") (data (i32.const 250431) "a") (data (i32.const 250434) "a") (data (i32.const 250437) "a") (data (i32.const 250440) "a") (data (i32.const 250443) "a") (data (i32.const 250446) "a") (data (i32.const 250449) "a") (data (i32.const 250452) "a") (data (i32.const 250455) "a") (data (i32.const 250458) "a") (data (i32.const 250461) "a") (data (i32.const 250464) "a") (data (i32.const 250467) "a") (data (i32.const 250470) "a") (data (i32.const 250473) "a") (data (i32.const 250476) "a") (data (i32.const 250479) "a") (data (i32.const 250482) "a") (data (i32.const 250485) "a") (data (i32.const 250488) "a") (data (i32.const 250491) "a") (data (i32.const 250494) "a") (data (i32.const 250497) "a") (data (i32.const 250500) "a") (data (i32.const 250503) "a") (data (i32.const 250506) "a") (data (i32.const 250509) "a") (data (i32.const 250512) "a") (data (i32.const 250515) "a") (data (i32.const 250518) "a") (data (i32.const 250521) "a") (data (i32.const 250524) "a") (data (i32.const 250527) "a") (data (i32.const 250530) "a") (data (i32.const 250533) "a") (data (i32.const 250536) "a") (data (i32.const 250539) "a") (data (i32.const 250542) "a") (data (i32.const 250545) "a") (data (i32.const 250548) "a") (data (i32.const 250551) "a") (data (i32.const 250554) "a") (data (i32.const 250557) "a") (data (i32.const 250560) "a") (data (i32.const 250563) "a") (data (i32.const 250566) "a") (data (i32.const 250569) "a") (data (i32.const 250572) "a") (data (i32.const 250575) "a") (data (i32.const 250578) "a") (data (i32.const 250581) "a") (data (i32.const 250584) "a") (data (i32.const 250587) "a") (data (i32.const 250590) "a") (data (i32.const 250593) "a") (data (i32.const 250596) "a") (data (i32.const 250599) "a") (data (i32.const 250602) "a") (data (i32.const 250605) "a") (data (i32.const 250608) "a") (data (i32.const 250611) "a") (data (i32.const 250614) "a") (data (i32.const 250617) "a") (data (i32.const 250620) "a") (data (i32.const 250623) "a") (data (i32.const 250626) "a") (data (i32.const 250629) "a") (data (i32.const 250632) "a") (data (i32.const 250635) "a") (data (i32.const 250638) "a") (data (i32.const 250641) "a") (data (i32.const 250644) "a") (data (i32.const 250647) "a") (data (i32.const 250650) "a") (data (i32.const 250653) "a") (data (i32.const 250656) "a") (data (i32.const 250659) "a") (data (i32.const 250662) "a") (data (i32.const 250665) "a") (data (i32.const 250668) "a") (data (i32.const 250671) "a") (data (i32.const 250674) "a") (data (i32.const 250677) "a") (data (i32.const 250680) "a") (data (i32.const 250683) "a") (data (i32.const 250686) "a") (data (i32.const 250689) "a") (data (i32.const 250692) "a") (data (i32.const 250695) "a") (data (i32.const 250698) "a") (data (i32.const 250701) "a") (data (i32.const 250704) "a") (data (i32.const 250707) "a") (data (i32.const 250710) "a") (data (i32.const 250713) "a") (data (i32.const 250716) "a") (data (i32.const 250719) "a") (data (i32.const 250722) "a") (data (i32.const 250725) "a") (data (i32.const 250728) "a") (data (i32.const 250731) "a") (data (i32.const 250734) "a") (data (i32.const 250737) "a") (data (i32.const 250740) "a") (data (i32.const 250743) "a") (data (i32.const 250746) "a") (data (i32.const 250749) "a") (data (i32.const 250752) "a") (data (i32.const 250755) "a") (data (i32.const 250758) "a") (data (i32.const 250761) "a") (data (i32.const 250764) "a") (data (i32.const 250767) "a") (data (i32.const 250770) "a") (data (i32.const 250773) "a") (data (i32.const 250776) "a") (data (i32.const 250779) "a") (data (i32.const 250782) "a") (data (i32.const 250785) "a") (data (i32.const 250788) "a") (data (i32.const 250791) "a") (data (i32.const 250794) "a") (data (i32.const 250797) "a") (data (i32.const 250800) "a") (data (i32.const 250803) "a") (data (i32.const 250806) "a") (data (i32.const 250809) "a") (data (i32.const 250812) "a") (data (i32.const 250815) "a") (data (i32.const 250818) "a") (data (i32.const 250821) "a") (data (i32.const 250824) "a") (data (i32.const 250827) "a") (data (i32.const 250830) "a") (data (i32.const 250833) "a") (data (i32.const 250836) "a") (data (i32.const 250839) "a") (data (i32.const 250842) "a") (data (i32.const 250845) "a") (data (i32.const 250848) "a") (data (i32.const 250851) "a") (data (i32.const 250854) "a") (data (i32.const 250857) "a") (data (i32.const 250860) "a") (data (i32.const 250863) "a") (data (i32.const 250866) "a") (data (i32.const 250869) "a") (data (i32.const 250872) "a") (data (i32.const 250875) "a") (data (i32.const 250878) "a") (data (i32.const 250881) "a") (data (i32.const 250884) "a") (data (i32.const 250887) "a") (data (i32.const 250890) "a") (data (i32.const 250893) "a") (data (i32.const 250896) "a") (data (i32.const 250899) "a") (data (i32.const 250902) "a") (data (i32.const 250905) "a") (data (i32.const 250908) "a") (data (i32.const 250911) "a") (data (i32.const 250914) "a") (data (i32.const 250917) "a") (data (i32.const 250920) "a") (data (i32.const 250923) "a") (data (i32.const 250926) "a") (data (i32.const 250929) "a") (data (i32.const 250932) "a") (data (i32.const 250935) "a") (data (i32.const 250938) "a") (data (i32.const 250941) "a") (data (i32.const 250944) "a") (data (i32.const 250947) "a") (data (i32.const 250950) "a") (data (i32.const 250953) "a") (data (i32.const 250956) "a") (data (i32.const 250959) "a") (data (i32.const 250962) "a") (data (i32.const 250965) "a") (data (i32.const 250968) "a") (data (i32.const 250971) "a") (data (i32.const 250974) "a") (data (i32.const 250977) "a") (data (i32.const 250980) "a") (data (i32.const 250983) "a") (data (i32.const 250986) "a") (data (i32.const 250989) "a") (data (i32.const 250992) "a") (data (i32.const 250995) "a") (data (i32.const 250998) "a") (data (i32.const 251001) "a") (data (i32.const 251004) "a") (data (i32.const 251007) "a") (data (i32.const 251010) "a") (data (i32.const 251013) "a") (data (i32.const 251016) "a") (data (i32.const 251019) "a") (data (i32.const 251022) "a") (data (i32.const 251025) "a") (data (i32.const 251028) "a") (data (i32.const 251031) "a") (data (i32.const 251034) "a") (data (i32.const 251037) "a") (data (i32.const 251040) "a") (data (i32.const 251043) "a") (data (i32.const 251046) "a") (data (i32.const 251049) "a") (data (i32.const 251052) "a") (data (i32.const 251055) "a") (data (i32.const 251058) "a") (data (i32.const 251061) "a") (data (i32.const 251064) "a") (data (i32.const 251067) "a") (data (i32.const 251070) "a") (data (i32.const 251073) "a") (data (i32.const 251076) "a") (data (i32.const 251079) "a") (data (i32.const 251082) "a") (data (i32.const 251085) "a") (data (i32.const 251088) "a") (data (i32.const 251091) "a") (data (i32.const 251094) "a") (data (i32.const 251097) "a") (data (i32.const 251100) "a") (data (i32.const 251103) "a") (data (i32.const 251106) "a") (data (i32.const 251109) "a") (data (i32.const 251112) "a") (data (i32.const 251115) "a") (data (i32.const 251118) "a") (data (i32.const 251121) "a") (data (i32.const 251124) "a") (data (i32.const 251127) "a") (data (i32.const 251130) "a") (data (i32.const 251133) "a") (data (i32.const 251136) "a") (data (i32.const 251139) "a") (data (i32.const 251142) "a") (data (i32.const 251145) "a") (data (i32.const 251148) "a") (data (i32.const 251151) "a") (data (i32.const 251154) "a") (data (i32.const 251157) "a") (data (i32.const 251160) "a") (data (i32.const 251163) "a") (data (i32.const 251166) "a") (data (i32.const 251169) "a") (data (i32.const 251172) "a") (data (i32.const 251175) "a") (data (i32.const 251178) "a") (data (i32.const 251181) "a") (data (i32.const 251184) "a") (data (i32.const 251187) "a") (data (i32.const 251190) "a") (data (i32.const 251193) "a") (data (i32.const 251196) "a") (data (i32.const 251199) "a") (data (i32.const 251202) "a") (data (i32.const 251205) "a") (data (i32.const 251208) "a") (data (i32.const 251211) "a") (data (i32.const 251214) "a") (data (i32.const 251217) "a") (data (i32.const 251220) "a") (data (i32.const 251223) "a") (data (i32.const 251226) "a") (data (i32.const 251229) "a") (data (i32.const 251232) "a") (data (i32.const 251235) "a") (data (i32.const 251238) "a") (data (i32.const 251241) "a") (data (i32.const 251244) "a") (data (i32.const 251247) "a") (data (i32.const 251250) "a") (data (i32.const 251253) "a") (data (i32.const 251256) "a") (data (i32.const 251259) "a") (data (i32.const 251262) "a") (data (i32.const 251265) "a") (data (i32.const 251268) "a") (data (i32.const 251271) "a") (data (i32.const 251274) "a") (data (i32.const 251277) "a") (data (i32.const 251280) "a") (data (i32.const 251283) "a") (data (i32.const 251286) "a") (data (i32.const 251289) "a") (data (i32.const 251292) "a") (data (i32.const 251295) "a") (data (i32.const 251298) "a") (data (i32.const 251301) "a") (data (i32.const 251304) "a") (data (i32.const 251307) "a") (data (i32.const 251310) "a") (data (i32.const 251313) "a") (data (i32.const 251316) "a") (data (i32.const 251319) "a") (data (i32.const 251322) "a") (data (i32.const 251325) "a") (data (i32.const 251328) "a") (data (i32.const 251331) "a") (data (i32.const 251334) "a") (data (i32.const 251337) "a") (data (i32.const 251340) "a") (data (i32.const 251343) "a") (data (i32.const 251346) "a") (data (i32.const 251349) "a") (data (i32.const 251352) "a") (data (i32.const 251355) "a") (data (i32.const 251358) "a") (data (i32.const 251361) "a") (data (i32.const 251364) "a") (data (i32.const 251367) "a") (data (i32.const 251370) "a") (data (i32.const 251373) "a") (data (i32.const 251376) "a") (data (i32.const 251379) "a") (data (i32.const 251382) "a") (data (i32.const 251385) "a") (data (i32.const 251388) "a") (data (i32.const 251391) "a") (data (i32.const 251394) "a") (data (i32.const 251397) "a") (data (i32.const 251400) "a") (data (i32.const 251403) "a") (data (i32.const 251406) "a") (data (i32.const 251409) "a") (data (i32.const 251412) "a") (data (i32.const 251415) "a") (data (i32.const 251418) "a") (data (i32.const 251421) "a") (data (i32.const 251424) "a") (data (i32.const 251427) "a") (data (i32.const 251430) "a") (data (i32.const 251433) "a") (data (i32.const 251436) "a") (data (i32.const 251439) "a") (data (i32.const 251442) "a") (data (i32.const 251445) "a") (data (i32.const 251448) "a") (data (i32.const 251451) "a") (data (i32.const 251454) "a") (data (i32.const 251457) "a") (data (i32.const 251460) "a") (data (i32.const 251463) "a") (data (i32.const 251466) "a") (data (i32.const 251469) "a") (data (i32.const 251472) "a") (data (i32.const 251475) "a") (data (i32.const 251478) "a") (data (i32.const 251481) "a") (data (i32.const 251484) "a") (data (i32.const 251487) "a") (data (i32.const 251490) "a") (data (i32.const 251493) "a") (data (i32.const 251496) "a") (data (i32.const 251499) "a") (data (i32.const 251502) "a") (data (i32.const 251505) "a") (data (i32.const 251508) "a") (data (i32.const 251511) "a") (data (i32.const 251514) "a") (data (i32.const 251517) "a") (data (i32.const 251520) "a") (data (i32.const 251523) "a") (data (i32.const 251526) "a") (data (i32.const 251529) "a") (data (i32.const 251532) "a") (data (i32.const 251535) "a") (data (i32.const 251538) "a") (data (i32.const 251541) "a") (data (i32.const 251544) "a") (data (i32.const 251547) "a") (data (i32.const 251550) "a") (data (i32.const 251553) "a") (data (i32.const 251556) "a") (data (i32.const 251559) "a") (data (i32.const 251562) "a") (data (i32.const 251565) "a") (data (i32.const 251568) "a") (data (i32.const 251571) "a") (data (i32.const 251574) "a") (data (i32.const 251577) "a") (data (i32.const 251580) "a") (data (i32.const 251583) "a") (data (i32.const 251586) "a") (data (i32.const 251589) "a") (data (i32.const 251592) "a") (data (i32.const 251595) "a") (data (i32.const 251598) "a") (data (i32.const 251601) "a") (data (i32.const 251604) "a") (data (i32.const 251607) "a") (data (i32.const 251610) "a") (data (i32.const 251613) "a") (data (i32.const 251616) "a") (data (i32.const 251619) "a") (data (i32.const 251622) "a") (data (i32.const 251625) "a") (data (i32.const 251628) "a") (data (i32.const 251631) "a") (data (i32.const 251634) "a") (data (i32.const 251637) "a") (data (i32.const 251640) "a") (data (i32.const 251643) "a") (data (i32.const 251646) "a") (data (i32.const 251649) "a") (data (i32.const 251652) "a") (data (i32.const 251655) "a") (data (i32.const 251658) "a") (data (i32.const 251661) "a") (data (i32.const 251664) "a") (data (i32.const 251667) "a") (data (i32.const 251670) "a") (data (i32.const 251673) "a") (data (i32.const 251676) "a") (data (i32.const 251679) "a") (data (i32.const 251682) "a") (data (i32.const 251685) "a") (data (i32.const 251688) "a") (data (i32.const 251691) "a") (data (i32.const 251694) "a") (data (i32.const 251697) "a") (data (i32.const 251700) "a") (data (i32.const 251703) "a") (data (i32.const 251706) "a") (data (i32.const 251709) "a") (data (i32.const 251712) "a") (data (i32.const 251715) "a") (data (i32.const 251718) "a") (data (i32.const 251721) "a") (data (i32.const 251724) "a") (data (i32.const 251727) "a") (data (i32.const 251730) "a") (data (i32.const 251733) "a") (data (i32.const 251736) "a") (data (i32.const 251739) "a") (data (i32.const 251742) "a") (data (i32.const 251745) "a") (data (i32.const 251748) "a") (data (i32.const 251751) "a") (data (i32.const 251754) "a") (data (i32.const 251757) "a") (data (i32.const 251760) "a") (data (i32.const 251763) "a") (data (i32.const 251766) "a") (data (i32.const 251769) "a") (data (i32.const 251772) "a") (data (i32.const 251775) "a") (data (i32.const 251778) "a") (data (i32.const 251781) "a") (data (i32.const 251784) "a") (data (i32.const 251787) "a") (data (i32.const 251790) "a") (data (i32.const 251793) "a") (data (i32.const 251796) "a") (data (i32.const 251799) "a") (data (i32.const 251802) "a") (data (i32.const 251805) "a") (data (i32.const 251808) "a") (data (i32.const 251811) "a") (data (i32.const 251814) "a") (data (i32.const 251817) "a") (data (i32.const 251820) "a") (data (i32.const 251823) "a") (data (i32.const 251826) "a") (data (i32.const 251829) "a") (data (i32.const 251832) "a") (data (i32.const 251835) "a") (data (i32.const 251838) "a") (data (i32.const 251841) "a") (data (i32.const 251844) "a") (data (i32.const 251847) "a") (data (i32.const 251850) "a") (data (i32.const 251853) "a") (data (i32.const 251856) "a") (data (i32.const 251859) "a") (data (i32.const 251862) "a") (data (i32.const 251865) "a") (data (i32.const 251868) "a") (data (i32.const 251871) "a") (data (i32.const 251874) "a") (data (i32.const 251877) "a") (data (i32.const 251880) "a") (data (i32.const 251883) "a") (data (i32.const 251886) "a") (data (i32.const 251889) "a") (data (i32.const 251892) "a") (data (i32.const 251895) "a") (data (i32.const 251898) "a") (data (i32.const 251901) "a") (data (i32.const 251904) "a") (data (i32.const 251907) "a") (data (i32.const 251910) "a") (data (i32.const 251913) "a") (data (i32.const 251916) "a") (data (i32.const 251919) "a") (data (i32.const 251922) "a") (data (i32.const 251925) "a") (data (i32.const 251928) "a") (data (i32.const 251931) "a") (data (i32.const 251934) "a") (data (i32.const 251937) "a") (data (i32.const 251940) "a") (data (i32.const 251943) "a") (data (i32.const 251946) "a") (data (i32.const 251949) "a") (data (i32.const 251952) "a") (data (i32.const 251955) "a") (data (i32.const 251958) "a") (data (i32.const 251961) "a") (data (i32.const 251964) "a") (data (i32.const 251967) "a") (data (i32.const 251970) "a") (data (i32.const 251973) "a") (data (i32.const 251976) "a") (data (i32.const 251979) "a") (data (i32.const 251982) "a") (data (i32.const 251985) "a") (data (i32.const 251988) "a") (data (i32.const 251991) "a") (data (i32.const 251994) "a") (data (i32.const 251997) "a") (data (i32.const 252000) "a") (data (i32.const 252003) "a") (data (i32.const 252006) "a") (data (i32.const 252009) "a") (data (i32.const 252012) "a") (data (i32.const 252015) "a") (data (i32.const 252018) "a") (data (i32.const 252021) "a") (data (i32.const 252024) "a") (data (i32.const 252027) "a") (data (i32.const 252030) "a") (data (i32.const 252033) "a") (data (i32.const 252036) "a") (data (i32.const 252039) "a") (data (i32.const 252042) "a") (data (i32.const 252045) "a") (data (i32.const 252048) "a") (data (i32.const 252051) "a") (data (i32.const 252054) "a") (data (i32.const 252057) "a") (data (i32.const 252060) "a") (data (i32.const 252063) "a") (data (i32.const 252066) "a") (data (i32.const 252069) "a") (data (i32.const 252072) "a") (data (i32.const 252075) "a") (data (i32.const 252078) "a") (data (i32.const 252081) "a") (data (i32.const 252084) "a") (data (i32.const 252087) "a") (data (i32.const 252090) "a") (data (i32.const 252093) "a") (data (i32.const 252096) "a") (data (i32.const 252099) "a") (data (i32.const 252102) "a") (data (i32.const 252105) "a") (data (i32.const 252108) "a") (data (i32.const 252111) "a") (data (i32.const 252114) "a") (data (i32.const 252117) "a") (data (i32.const 252120) "a") (data (i32.const 252123) "a") (data (i32.const 252126) "a") (data (i32.const 252129) "a") (data (i32.const 252132) "a") (data (i32.const 252135) "a") (data (i32.const 252138) "a") (data (i32.const 252141) "a") (data (i32.const 252144) "a") (data (i32.const 252147) "a") (data (i32.const 252150) "a") (data (i32.const 252153) "a") (data (i32.const 252156) "a") (data (i32.const 252159) "a") (data (i32.const 252162) "a") (data (i32.const 252165) "a") (data (i32.const 252168) "a") (data (i32.const 252171) "a") (data (i32.const 252174) "a") (data (i32.const 252177) "a") (data (i32.const 252180) "a") (data (i32.const 252183) "a") (data (i32.const 252186) "a") (data (i32.const 252189) "a") (data (i32.const 252192) "a") (data (i32.const 252195) "a") (data (i32.const 252198) "a") (data (i32.const 252201) "a") (data (i32.const 252204) "a") (data (i32.const 252207) "a") (data (i32.const 252210) "a") (data (i32.const 252213) "a") (data (i32.const 252216) "a") (data (i32.const 252219) "a") (data (i32.const 252222) "a") (data (i32.const 252225) "a") (data (i32.const 252228) "a") (data (i32.const 252231) "a") (data (i32.const 252234) "a") (data (i32.const 252237) "a") (data (i32.const 252240) "a") (data (i32.const 252243) "a") (data (i32.const 252246) "a") (data (i32.const 252249) "a") (data (i32.const 252252) "a") (data (i32.const 252255) "a") (data (i32.const 252258) "a") (data (i32.const 252261) "a") (data (i32.const 252264) "a") (data (i32.const 252267) "a") (data (i32.const 252270) "a") (data (i32.const 252273) "a") (data (i32.const 252276) "a") (data (i32.const 252279) "a") (data (i32.const 252282) "a") (data (i32.const 252285) "a") (data (i32.const 252288) "a") (data (i32.const 252291) "a") (data (i32.const 252294) "a") (data (i32.const 252297) "a") (data (i32.const 252300) "a") (data (i32.const 252303) "a") (data (i32.const 252306) "a") (data (i32.const 252309) "a") (data (i32.const 252312) "a") (data (i32.const 252315) "a") (data (i32.const 252318) "a") (data (i32.const 252321) "a") (data (i32.const 252324) "a") (data (i32.const 252327) "a") (data (i32.const 252330) "a") (data (i32.const 252333) "a") (data (i32.const 252336) "a") (data (i32.const 252339) "a") (data (i32.const 252342) "a") (data (i32.const 252345) "a") (data (i32.const 252348) "a") (data (i32.const 252351) "a") (data (i32.const 252354) "a") (data (i32.const 252357) "a") (data (i32.const 252360) "a") (data (i32.const 252363) "a") (data (i32.const 252366) "a") (data (i32.const 252369) "a") (data (i32.const 252372) "a") (data (i32.const 252375) "a") (data (i32.const 252378) "a") (data (i32.const 252381) "a") (data (i32.const 252384) "a") (data (i32.const 252387) "a") (data (i32.const 252390) "a") (data (i32.const 252393) "a") (data (i32.const 252396) "a") (data (i32.const 252399) "a") (data (i32.const 252402) "a") (data (i32.const 252405) "a") (data (i32.const 252408) "a") (data (i32.const 252411) "a") (data (i32.const 252414) "a") (data (i32.const 252417) "a") (data (i32.const 252420) "a") (data (i32.const 252423) "a") (data (i32.const 252426) "a") (data (i32.const 252429) "a") (data (i32.const 252432) "a") (data (i32.const 252435) "a") (data (i32.const 252438) "a") (data (i32.const 252441) "a") (data (i32.const 252444) "a") (data (i32.const 252447) "a") (data (i32.const 252450) "a") (data (i32.const 252453) "a") (data (i32.const 252456) "a") (data (i32.const 252459) "a") (data (i32.const 252462) "a") (data (i32.const 252465) "a") (data (i32.const 252468) "a") (data (i32.const 252471) "a") (data (i32.const 252474) "a") (data (i32.const 252477) "a") (data (i32.const 252480) "a") (data (i32.const 252483) "a") (data (i32.const 252486) "a") (data (i32.const 252489) "a") (data (i32.const 252492) "a") (data (i32.const 252495) "a") (data (i32.const 252498) "a") (data (i32.const 252501) "a") (data (i32.const 252504) "a") (data (i32.const 252507) "a") (data (i32.const 252510) "a") (data (i32.const 252513) "a") (data (i32.const 252516) "a") (data (i32.const 252519) "a") (data (i32.const 252522) "a") (data (i32.const 252525) "a") (data (i32.const 252528) "a") (data (i32.const 252531) "a") (data (i32.const 252534) "a") (data (i32.const 252537) "a") (data (i32.const 252540) "a") (data (i32.const 252543) "a") (data (i32.const 252546) "a") (data (i32.const 252549) "a") (data (i32.const 252552) "a") (data (i32.const 252555) "a") (data (i32.const 252558) "a") (data (i32.const 252561) "a") (data (i32.const 252564) "a") (data (i32.const 252567) "a") (data (i32.const 252570) "a") (data (i32.const 252573) "a") (data (i32.const 252576) "a") (data (i32.const 252579) "a") (data (i32.const 252582) "a") (data (i32.const 252585) "a") (data (i32.const 252588) "a") (data (i32.const 252591) "a") (data (i32.const 252594) "a") (data (i32.const 252597) "a") (data (i32.const 252600) "a") (data (i32.const 252603) "a") (data (i32.const 252606) "a") (data (i32.const 252609) "a") (data (i32.const 252612) "a") (data (i32.const 252615) "a") (data (i32.const 252618) "a") (data (i32.const 252621) "a") (data (i32.const 252624) "a") (data (i32.const 252627) "a") (data (i32.const 252630) "a") (data (i32.const 252633) "a") (data (i32.const 252636) "a") (data (i32.const 252639) "a") (data (i32.const 252642) "a") (data (i32.const 252645) "a") (data (i32.const 252648) "a") (data (i32.const 252651) "a") (data (i32.const 252654) "a") (data (i32.const 252657) "a") (data (i32.const 252660) "a") (data (i32.const 252663) "a") (data (i32.const 252666) "a") (data (i32.const 252669) "a") (data (i32.const 252672) "a") (data (i32.const 252675) "a") (data (i32.const 252678) "a") (data (i32.const 252681) "a") (data (i32.const 252684) "a") (data (i32.const 252687) "a") (data (i32.const 252690) "a") (data (i32.const 252693) "a") (data (i32.const 252696) "a") (data (i32.const 252699) "a") (data (i32.const 252702) "a") (data (i32.const 252705) "a") (data (i32.const 252708) "a") (data (i32.const 252711) "a") (data (i32.const 252714) "a") (data (i32.const 252717) "a") (data (i32.const 252720) "a") (data (i32.const 252723) "a") (data (i32.const 252726) "a") (data (i32.const 252729) "a") (data (i32.const 252732) "a") (data (i32.const 252735) "a") (data (i32.const 252738) "a") (data (i32.const 252741) "a") (data (i32.const 252744) "a") (data (i32.const 252747) "a") (data (i32.const 252750) "a") (data (i32.const 252753) "a") (data (i32.const 252756) "a") (data (i32.const 252759) "a") (data (i32.const 252762) "a") (data (i32.const 252765) "a") (data (i32.const 252768) "a") (data (i32.const 252771) "a") (data (i32.const 252774) "a") (data (i32.const 252777) "a") (data (i32.const 252780) "a") (data (i32.const 252783) "a") (data (i32.const 252786) "a") (data (i32.const 252789) "a") (data (i32.const 252792) "a") (data (i32.const 252795) "a") (data (i32.const 252798) "a") (data (i32.const 252801) "a") (data (i32.const 252804) "a") (data (i32.const 252807) "a") (data (i32.const 252810) "a") (data (i32.const 252813) "a") (data (i32.const 252816) "a") (data (i32.const 252819) "a") (data (i32.const 252822) "a") (data (i32.const 252825) "a") (data (i32.const 252828) "a") (data (i32.const 252831) "a") (data (i32.const 252834) "a") (data (i32.const 252837) "a") (data (i32.const 252840) "a") (data (i32.const 252843) "a") (data (i32.const 252846) "a") (data (i32.const 252849) "a") (data (i32.const 252852) "a") (data (i32.const 252855) "a") (data (i32.const 252858) "a") (data (i32.const 252861) "a") (data (i32.const 252864) "a") (data (i32.const 252867) "a") (data (i32.const 252870) "a") (data (i32.const 252873) "a") (data (i32.const 252876) "a") (data (i32.const 252879) "a") (data (i32.const 252882) "a") (data (i32.const 252885) "a") (data (i32.const 252888) "a") (data (i32.const 252891) "a") (data (i32.const 252894) "a") (data (i32.const 252897) "a") (data (i32.const 252900) "a") (data (i32.const 252903) "a") (data (i32.const 252906) "a") (data (i32.const 252909) "a") (data (i32.const 252912) "a") (data (i32.const 252915) "a") (data (i32.const 252918) "a") (data (i32.const 252921) "a") (data (i32.const 252924) "a") (data (i32.const 252927) "a") (data (i32.const 252930) "a") (data (i32.const 252933) "a") (data (i32.const 252936) "a") (data (i32.const 252939) "a") (data (i32.const 252942) "a") (data (i32.const 252945) "a") (data (i32.const 252948) "a") (data (i32.const 252951) "a") (data (i32.const 252954) "a") (data (i32.const 252957) "a") (data (i32.const 252960) "a") (data (i32.const 252963) "a") (data (i32.const 252966) "a") (data (i32.const 252969) "a") (data (i32.const 252972) "a") (data (i32.const 252975) "a") (data (i32.const 252978) "a") (data (i32.const 252981) "a") (data (i32.const 252984) "a") (data (i32.const 252987) "a") (data (i32.const 252990) "a") (data (i32.const 252993) "a") (data (i32.const 252996) "a") (data (i32.const 252999) "a") (data (i32.const 253002) "a") (data (i32.const 253005) "a") (data (i32.const 253008) "a") (data (i32.const 253011) "a") (data (i32.const 253014) "a") (data (i32.const 253017) "a") (data (i32.const 253020) "a") (data (i32.const 253023) "a") (data (i32.const 253026) "a") (data (i32.const 253029) "a") (data (i32.const 253032) "a") (data (i32.const 253035) "a") (data (i32.const 253038) "a") (data (i32.const 253041) "a") (data (i32.const 253044) "a") (data (i32.const 253047) "a") (data (i32.const 253050) "a") (data (i32.const 253053) "a") (data (i32.const 253056) "a") (data (i32.const 253059) "a") (data (i32.const 253062) "a") (data (i32.const 253065) "a") (data (i32.const 253068) "a") (data (i32.const 253071) "a") (data (i32.const 253074) "a") (data (i32.const 253077) "a") (data (i32.const 253080) "a") (data (i32.const 253083) "a") (data (i32.const 253086) "a") (data (i32.const 253089) "a") (data (i32.const 253092) "a") (data (i32.const 253095) "a") (data (i32.const 253098) "a") (data (i32.const 253101) "a") (data (i32.const 253104) "a") (data (i32.const 253107) "a") (data (i32.const 253110) "a") (data (i32.const 253113) "a") (data (i32.const 253116) "a") (data (i32.const 253119) "a") (data (i32.const 253122) "a") (data (i32.const 253125) "a") (data (i32.const 253128) "a") (data (i32.const 253131) "a") (data (i32.const 253134) "a") (data (i32.const 253137) "a") (data (i32.const 253140) "a") (data (i32.const 253143) "a") (data (i32.const 253146) "a") (data (i32.const 253149) "a") (data (i32.const 253152) "a") (data (i32.const 253155) "a") (data (i32.const 253158) "a") (data (i32.const 253161) "a") (data (i32.const 253164) "a") (data (i32.const 253167) "a") (data (i32.const 253170) "a") (data (i32.const 253173) "a") (data (i32.const 253176) "a") (data (i32.const 253179) "a") (data (i32.const 253182) "a") (data (i32.const 253185) "a") (data (i32.const 253188) "a") (data (i32.const 253191) "a") (data (i32.const 253194) "a") (data (i32.const 253197) "a") (data (i32.const 253200) "a") (data (i32.const 253203) "a") (data (i32.const 253206) "a") (data (i32.const 253209) "a") (data (i32.const 253212) "a") (data (i32.const 253215) "a") (data (i32.const 253218) "a") (data (i32.const 253221) "a") (data (i32.const 253224) "a") (data (i32.const 253227) "a") (data (i32.const 253230) "a") (data (i32.const 253233) "a") (data (i32.const 253236) "a") (data (i32.const 253239) "a") (data (i32.const 253242) "a") (data (i32.const 253245) "a") (data (i32.const 253248) "a") (data (i32.const 253251) "a") (data (i32.const 253254) "a") (data (i32.const 253257) "a") (data (i32.const 253260) "a") (data (i32.const 253263) "a") (data (i32.const 253266) "a") (data (i32.const 253269) "a") (data (i32.const 253272) "a") (data (i32.const 253275) "a") (data (i32.const 253278) "a") (data (i32.const 253281) "a") (data (i32.const 253284) "a") (data (i32.const 253287) "a") (data (i32.const 253290) "a") (data (i32.const 253293) "a") (data (i32.const 253296) "a") (data (i32.const 253299) "a") (data (i32.const 253302) "a") (data (i32.const 253305) "a") (data (i32.const 253308) "a") (data (i32.const 253311) "a") (data (i32.const 253314) "a") (data (i32.const 253317) "a") (data (i32.const 253320) "a") (data (i32.const 253323) "a") (data (i32.const 253326) "a") (data (i32.const 253329) "a") (data (i32.const 253332) "a") (data (i32.const 253335) "a") (data (i32.const 253338) "a") (data (i32.const 253341) "a") (data (i32.const 253344) "a") (data (i32.const 253347) "a") (data (i32.const 253350) "a") (data (i32.const 253353) "a") (data (i32.const 253356) "a") (data (i32.const 253359) "a") (data (i32.const 253362) "a") (data (i32.const 253365) "a") (data (i32.const 253368) "a") (data (i32.const 253371) "a") (data (i32.const 253374) "a") (data (i32.const 253377) "a") (data (i32.const 253380) "a") (data (i32.const 253383) "a") (data (i32.const 253386) "a") (data (i32.const 253389) "a") (data (i32.const 253392) "a") (data (i32.const 253395) "a") (data (i32.const 253398) "a") (data (i32.const 253401) "a") (data (i32.const 253404) "a") (data (i32.const 253407) "a") (data (i32.const 253410) "a") (data (i32.const 253413) "a") (data (i32.const 253416) "a") (data (i32.const 253419) "a") (data (i32.const 253422) "a") (data (i32.const 253425) "a") (data (i32.const 253428) "a") (data (i32.const 253431) "a") (data (i32.const 253434) "a") (data (i32.const 253437) "a") (data (i32.const 253440) "a") (data (i32.const 253443) "a") (data (i32.const 253446) "a") (data (i32.const 253449) "a") (data (i32.const 253452) "a") (data (i32.const 253455) "a") (data (i32.const 253458) "a") (data (i32.const 253461) "a") (data (i32.const 253464) "a") (data (i32.const 253467) "a") (data (i32.const 253470) "a") (data (i32.const 253473) "a") (data (i32.const 253476) "a") (data (i32.const 253479) "a") (data (i32.const 253482) "a") (data (i32.const 253485) "a") (data (i32.const 253488) "a") (data (i32.const 253491) "a") (data (i32.const 253494) "a") (data (i32.const 253497) "a") (data (i32.const 253500) "a") (data (i32.const 253503) "a") (data (i32.const 253506) "a") (data (i32.const 253509) "a") (data (i32.const 253512) "a") (data (i32.const 253515) "a") (data (i32.const 253518) "a") (data (i32.const 253521) "a") (data (i32.const 253524) "a") (data (i32.const 253527) "a") (data (i32.const 253530) "a") (data (i32.const 253533) "a") (data (i32.const 253536) "a") (data (i32.const 253539) "a") (data (i32.const 253542) "a") (data (i32.const 253545) "a") (data (i32.const 253548) "a") (data (i32.const 253551) "a") (data (i32.const 253554) "a") (data (i32.const 253557) "a") (data (i32.const 253560) "a") (data (i32.const 253563) "a") (data (i32.const 253566) "a") (data (i32.const 253569) "a") (data (i32.const 253572) "a") (data (i32.const 253575) "a") (data (i32.const 253578) "a") (data (i32.const 253581) "a") (data (i32.const 253584) "a") (data (i32.const 253587) "a") (data (i32.const 253590) "a") (data (i32.const 253593) "a") (data (i32.const 253596) "a") (data (i32.const 253599) "a") (data (i32.const 253602) "a") (data (i32.const 253605) "a") (data (i32.const 253608) "a") (data (i32.const 253611) "a") (data (i32.const 253614) "a") (data (i32.const 253617) "a") (data (i32.const 253620) "a") (data (i32.const 253623) "a") (data (i32.const 253626) "a") (data (i32.const 253629) "a") (data (i32.const 253632) "a") (data (i32.const 253635) "a") (data (i32.const 253638) "a") (data (i32.const 253641) "a") (data (i32.const 253644) "a") (data (i32.const 253647) "a") (data (i32.const 253650) "a") (data (i32.const 253653) "a") (data (i32.const 253656) "a") (data (i32.const 253659) "a") (data (i32.const 253662) "a") (data (i32.const 253665) "a") (data (i32.const 253668) "a") (data (i32.const 253671) "a") (data (i32.const 253674) "a") (data (i32.const 253677) "a") (data (i32.const 253680) "a") (data (i32.const 253683) "a") (data (i32.const 253686) "a") (data (i32.const 253689) "a") (data (i32.const 253692) "a") (data (i32.const 253695) "a") (data (i32.const 253698) "a") (data (i32.const 253701) "a") (data (i32.const 253704) "a") (data (i32.const 253707) "a") (data (i32.const 253710) "a") (data (i32.const 253713) "a") (data (i32.const 253716) "a") (data (i32.const 253719) "a") (data (i32.const 253722) "a") (data (i32.const 253725) "a") (data (i32.const 253728) "a") (data (i32.const 253731) "a") (data (i32.const 253734) "a") (data (i32.const 253737) "a") (data (i32.const 253740) "a") (data (i32.const 253743) "a") (data (i32.const 253746) "a") (data (i32.const 253749) "a") (data (i32.const 253752) "a") (data (i32.const 253755) "a") (data (i32.const 253758) "a") (data (i32.const 253761) "a") (data (i32.const 253764) "a") (data (i32.const 253767) "a") (data (i32.const 253770) "a") (data (i32.const 253773) "a") (data (i32.const 253776) "a") (data (i32.const 253779) "a") (data (i32.const 253782) "a") (data (i32.const 253785) "a") (data (i32.const 253788) "a") (data (i32.const 253791) "a") (data (i32.const 253794) "a") (data (i32.const 253797) "a") (data (i32.const 253800) "a") (data (i32.const 253803) "a") (data (i32.const 253806) "a") (data (i32.const 253809) "a") (data (i32.const 253812) "a") (data (i32.const 253815) "a") (data (i32.const 253818) "a") (data (i32.const 253821) "a") (data (i32.const 253824) "a") (data (i32.const 253827) "a") (data (i32.const 253830) "a") (data (i32.const 253833) "a") (data (i32.const 253836) "a") (data (i32.const 253839) "a") (data (i32.const 253842) "a") (data (i32.const 253845) "a") (data (i32.const 253848) "a") (data (i32.const 253851) "a") (data (i32.const 253854) "a") (data (i32.const 253857) "a") (data (i32.const 253860) "a") (data (i32.const 253863) "a") (data (i32.const 253866) "a") (data (i32.const 253869) "a") (data (i32.const 253872) "a") (data (i32.const 253875) "a") (data (i32.const 253878) "a") (data (i32.const 253881) "a") (data (i32.const 253884) "a") (data (i32.const 253887) "a") (data (i32.const 253890) "a") (data (i32.const 253893) "a") (data (i32.const 253896) "a") (data (i32.const 253899) "a") (data (i32.const 253902) "a") (data (i32.const 253905) "a") (data (i32.const 253908) "a") (data (i32.const 253911) "a") (data (i32.const 253914) "a") (data (i32.const 253917) "a") (data (i32.const 253920) "a") (data (i32.const 253923) "a") (data (i32.const 253926) "a") (data (i32.const 253929) "a") (data (i32.const 253932) "a") (data (i32.const 253935) "a") (data (i32.const 253938) "a") (data (i32.const 253941) "a") (data (i32.const 253944) "a") (data (i32.const 253947) "a") (data (i32.const 253950) "a") (data (i32.const 253953) "a") (data (i32.const 253956) "a") (data (i32.const 253959) "a") (data (i32.const 253962) "a") (data (i32.const 253965) "a") (data (i32.const 253968) "a") (data (i32.const 253971) "a") (data (i32.const 253974) "a") (data (i32.const 253977) "a") (data (i32.const 253980) "a") (data (i32.const 253983) "a") (data (i32.const 253986) "a") (data (i32.const 253989) "a") (data (i32.const 253992) "a") (data (i32.const 253995) "a") (data (i32.const 253998) "a") (data (i32.const 254001) "a") (data (i32.const 254004) "a") (data (i32.const 254007) "a") (data (i32.const 254010) "a") (data (i32.const 254013) "a") (data (i32.const 254016) "a") (data (i32.const 254019) "a") (data (i32.const 254022) "a") (data (i32.const 254025) "a") (data (i32.const 254028) "a") (data (i32.const 254031) "a") (data (i32.const 254034) "a") (data (i32.const 254037) "a") (data (i32.const 254040) "a") (data (i32.const 254043) "a") (data (i32.const 254046) "a") (data (i32.const 254049) "a") (data (i32.const 254052) "a") (data (i32.const 254055) "a") (data (i32.const 254058) "a") (data (i32.const 254061) "a") (data (i32.const 254064) "a") (data (i32.const 254067) "a") (data (i32.const 254070) "a") (data (i32.const 254073) "a") (data (i32.const 254076) "a") (data (i32.const 254079) "a") (data (i32.const 254082) "a") (data (i32.const 254085) "a") (data (i32.const 254088) "a") (data (i32.const 254091) "a") (data (i32.const 254094) "a") (data (i32.const 254097) "a") (data (i32.const 254100) "a") (data (i32.const 254103) "a") (data (i32.const 254106) "a") (data (i32.const 254109) "a") (data (i32.const 254112) "a") (data (i32.const 254115) "a") (data (i32.const 254118) "a") (data (i32.const 254121) "a") (data (i32.const 254124) "a") (data (i32.const 254127) "a") (data (i32.const 254130) "a") (data (i32.const 254133) "a") (data (i32.const 254136) "a") (data (i32.const 254139) "a") (data (i32.const 254142) "a") (data (i32.const 254145) "a") (data (i32.const 254148) "a") (data (i32.const 254151) "a") (data (i32.const 254154) "a") (data (i32.const 254157) "a") (data (i32.const 254160) "a") (data (i32.const 254163) "a") (data (i32.const 254166) "a") (data (i32.const 254169) "a") (data (i32.const 254172) "a") (data (i32.const 254175) "a") (data (i32.const 254178) "a") (data (i32.const 254181) "a") (data (i32.const 254184) "a") (data (i32.const 254187) "a") (data (i32.const 254190) "a") (data (i32.const 254193) "a") (data (i32.const 254196) "a") (data (i32.const 254199) "a") (data (i32.const 254202) "a") (data (i32.const 254205) "a") (data (i32.const 254208) "a") (data (i32.const 254211) "a") (data (i32.const 254214) "a") (data (i32.const 254217) "a") (data (i32.const 254220) "a") (data (i32.const 254223) "a") (data (i32.const 254226) "a") (data (i32.const 254229) "a") (data (i32.const 254232) "a") (data (i32.const 254235) "a") (data (i32.const 254238) "a") (data (i32.const 254241) "a") (data (i32.const 254244) "a") (data (i32.const 254247) "a") (data (i32.const 254250) "a") (data (i32.const 254253) "a") (data (i32.const 254256) "a") (data (i32.const 254259) "a") (data (i32.const 254262) "a") (data (i32.const 254265) "a") (data (i32.const 254268) "a") (data (i32.const 254271) "a") (data (i32.const 254274) "a") (data (i32.const 254277) "a") (data (i32.const 254280) "a") (data (i32.const 254283) "a") (data (i32.const 254286) "a") (data (i32.const 254289) "a") (data (i32.const 254292) "a") (data (i32.const 254295) "a") (data (i32.const 254298) "a") (data (i32.const 254301) "a") (data (i32.const 254304) "a") (data (i32.const 254307) "a") (data (i32.const 254310) "a") (data (i32.const 254313) "a") (data (i32.const 254316) "a") (data (i32.const 254319) "a") (data (i32.const 254322) "a") (data (i32.const 254325) "a") (data (i32.const 254328) "a") (data (i32.const 254331) "a") (data (i32.const 254334) "a") (data (i32.const 254337) "a") (data (i32.const 254340) "a") (data (i32.const 254343) "a") (data (i32.const 254346) "a") (data (i32.const 254349) "a") (data (i32.const 254352) "a") (data (i32.const 254355) "a") (data (i32.const 254358) "a") (data (i32.const 254361) "a") (data (i32.const 254364) "a") (data (i32.const 254367) "a") (data (i32.const 254370) "a") (data (i32.const 254373) "a") (data (i32.const 254376) "a") (data (i32.const 254379) "a") (data (i32.const 254382) "a") (data (i32.const 254385) "a") (data (i32.const 254388) "a") (data (i32.const 254391) "a") (data (i32.const 254394) "a") (data (i32.const 254397) "a") (data (i32.const 254400) "a") (data (i32.const 254403) "a") (data (i32.const 254406) "a") (data (i32.const 254409) "a") (data (i32.const 254412) "a") (data (i32.const 254415) "a") (data (i32.const 254418) "a") (data (i32.const 254421) "a") (data (i32.const 254424) "a") (data (i32.const 254427) "a") (data (i32.const 254430) "a") (data (i32.const 254433) "a") (data (i32.const 254436) "a") (data (i32.const 254439) "a") (data (i32.const 254442) "a") (data (i32.const 254445) "a") (data (i32.const 254448) "a") (data (i32.const 254451) "a") (data (i32.const 254454) "a") (data (i32.const 254457) "a") (data (i32.const 254460) "a") (data (i32.const 254463) "a") (data (i32.const 254466) "a") (data (i32.const 254469) "a") (data (i32.const 254472) "a") (data (i32.const 254475) "a") (data (i32.const 254478) "a") (data (i32.const 254481) "a") (data (i32.const 254484) "a") (data (i32.const 254487) "a") (data (i32.const 254490) "a") (data (i32.const 254493) "a") (data (i32.const 254496) "a") (data (i32.const 254499) "a") (data (i32.const 254502) "a") (data (i32.const 254505) "a") (data (i32.const 254508) "a") (data (i32.const 254511) "a") (data (i32.const 254514) "a") (data (i32.const 254517) "a") (data (i32.const 254520) "a") (data (i32.const 254523) "a") (data (i32.const 254526) "a") (data (i32.const 254529) "a") (data (i32.const 254532) "a") (data (i32.const 254535) "a") (data (i32.const 254538) "a") (data (i32.const 254541) "a") (data (i32.const 254544) "a") (data (i32.const 254547) "a") (data (i32.const 254550) "a") (data (i32.const 254553) "a") (data (i32.const 254556) "a") (data (i32.const 254559) "a") (data (i32.const 254562) "a") (data (i32.const 254565) "a") (data (i32.const 254568) "a") (data (i32.const 254571) "a") (data (i32.const 254574) "a") (data (i32.const 254577) "a") (data (i32.const 254580) "a") (data (i32.const 254583) "a") (data (i32.const 254586) "a") (data (i32.const 254589) "a") (data (i32.const 254592) "a") (data (i32.const 254595) "a") (data (i32.const 254598) "a") (data (i32.const 254601) "a") (data (i32.const 254604) "a") (data (i32.const 254607) "a") (data (i32.const 254610) "a") (data (i32.const 254613) "a") (data (i32.const 254616) "a") (data (i32.const 254619) "a") (data (i32.const 254622) "a") (data (i32.const 254625) "a") (data (i32.const 254628) "a") (data (i32.const 254631) "a") (data (i32.const 254634) "a") (data (i32.const 254637) "a") (data (i32.const 254640) "a") (data (i32.const 254643) "a") (data (i32.const 254646) "a") (data (i32.const 254649) "a") (data (i32.const 254652) "a") (data (i32.const 254655) "a") (data (i32.const 254658) "a") (data (i32.const 254661) "a") (data (i32.const 254664) "a") (data (i32.const 254667) "a") (data (i32.const 254670) "a") (data (i32.const 254673) "a") (data (i32.const 254676) "a") (data (i32.const 254679) "a") (data (i32.const 254682) "a") (data (i32.const 254685) "a") (data (i32.const 254688) "a") (data (i32.const 254691) "a") (data (i32.const 254694) "a") (data (i32.const 254697) "a") (data (i32.const 254700) "a") (data (i32.const 254703) "a") (data (i32.const 254706) "a") (data (i32.const 254709) "a") (data (i32.const 254712) "a") (data (i32.const 254715) "a") (data (i32.const 254718) "a") (data (i32.const 254721) "a") (data (i32.const 254724) "a") (data (i32.const 254727) "a") (data (i32.const 254730) "a") (data (i32.const 254733) "a") (data (i32.const 254736) "a") (data (i32.const 254739) "a") (data (i32.const 254742) "a") (data (i32.const 254745) "a") (data (i32.const 254748) "a") (data (i32.const 254751) "a") (data (i32.const 254754) "a") (data (i32.const 254757) "a") (data (i32.const 254760) "a") (data (i32.const 254763) "a") (data (i32.const 254766) "a") (data (i32.const 254769) "a") (data (i32.const 254772) "a") (data (i32.const 254775) "a") (data (i32.const 254778) "a") (data (i32.const 254781) "a") (data (i32.const 254784) "a") (data (i32.const 254787) "a") (data (i32.const 254790) "a") (data (i32.const 254793) "a") (data (i32.const 254796) "a") (data (i32.const 254799) "a") (data (i32.const 254802) "a") (data (i32.const 254805) "a") (data (i32.const 254808) "a") (data (i32.const 254811) "a") (data (i32.const 254814) "a") (data (i32.const 254817) "a") (data (i32.const 254820) "a") (data (i32.const 254823) "a") (data (i32.const 254826) "a") (data (i32.const 254829) "a") (data (i32.const 254832) "a") (data (i32.const 254835) "a") (data (i32.const 254838) "a") (data (i32.const 254841) "a") (data (i32.const 254844) "a") (data (i32.const 254847) "a") (data (i32.const 254850) "a") (data (i32.const 254853) "a") (data (i32.const 254856) "a") (data (i32.const 254859) "a") (data (i32.const 254862) "a") (data (i32.const 254865) "a") (data (i32.const 254868) "a") (data (i32.const 254871) "a") (data (i32.const 254874) "a") (data (i32.const 254877) "a") (data (i32.const 254880) "a") (data (i32.const 254883) "a") (data (i32.const 254886) "a") (data (i32.const 254889) "a") (data (i32.const 254892) "a") (data (i32.const 254895) "a") (data (i32.const 254898) "a") (data (i32.const 254901) "a") (data (i32.const 254904) "a") (data (i32.const 254907) "a") (data (i32.const 254910) "a") (data (i32.const 254913) "a") (data (i32.const 254916) "a") (data (i32.const 254919) "a") (data (i32.const 254922) "a") (data (i32.const 254925) "a") (data (i32.const 254928) "a") (data (i32.const 254931) "a") (data (i32.const 254934) "a") (data (i32.const 254937) "a") (data (i32.const 254940) "a") (data (i32.const 254943) "a") (data (i32.const 254946) "a") (data (i32.const 254949) "a") (data (i32.const 254952) "a") (data (i32.const 254955) "a") (data (i32.const 254958) "a") (data (i32.const 254961) "a") (data (i32.const 254964) "a") (data (i32.const 254967) "a") (data (i32.const 254970) "a") (data (i32.const 254973) "a") (data (i32.const 254976) "a") (data (i32.const 254979) "a") (data (i32.const 254982) "a") (data (i32.const 254985) "a") (data (i32.const 254988) "a") (data (i32.const 254991) "a") (data (i32.const 254994) "a") (data (i32.const 254997) "a") (data (i32.const 255000) "a") (data (i32.const 255003) "a") (data (i32.const 255006) "a") (data (i32.const 255009) "a") (data (i32.const 255012) "a") (data (i32.const 255015) "a") (data (i32.const 255018) "a") (data (i32.const 255021) "a") (data (i32.const 255024) "a") (data (i32.const 255027) "a") (data (i32.const 255030) "a") (data (i32.const 255033) "a") (data (i32.const 255036) "a") (data (i32.const 255039) "a") (data (i32.const 255042) "a") (data (i32.const 255045) "a") (data (i32.const 255048) "a") (data (i32.const 255051) "a") (data (i32.const 255054) "a") (data (i32.const 255057) "a") (data (i32.const 255060) "a") (data (i32.const 255063) "a") (data (i32.const 255066) "a") (data (i32.const 255069) "a") (data (i32.const 255072) "a") (data (i32.const 255075) "a") (data (i32.const 255078) "a") (data (i32.const 255081) "a") (data (i32.const 255084) "a") (data (i32.const 255087) "a") (data (i32.const 255090) "a") (data (i32.const 255093) "a") (data (i32.const 255096) "a") (data (i32.const 255099) "a") (data (i32.const 255102) "a") (data (i32.const 255105) "a") (data (i32.const 255108) "a") (data (i32.const 255111) "a") (data (i32.const 255114) "a") (data (i32.const 255117) "a") (data (i32.const 255120) "a") (data (i32.const 255123) "a") (data (i32.const 255126) "a") (data (i32.const 255129) "a") (data (i32.const 255132) "a") (data (i32.const 255135) "a") (data (i32.const 255138) "a") (data (i32.const 255141) "a") (data (i32.const 255144) "a") (data (i32.const 255147) "a") (data (i32.const 255150) "a") (data (i32.const 255153) "a") (data (i32.const 255156) "a") (data (i32.const 255159) "a") (data (i32.const 255162) "a") (data (i32.const 255165) "a") (data (i32.const 255168) "a") (data (i32.const 255171) "a") (data (i32.const 255174) "a") (data (i32.const 255177) "a") (data (i32.const 255180) "a") (data (i32.const 255183) "a") (data (i32.const 255186) "a") (data (i32.const 255189) "a") (data (i32.const 255192) "a") (data (i32.const 255195) "a") (data (i32.const 255198) "a") (data (i32.const 255201) "a") (data (i32.const 255204) "a") (data (i32.const 255207) "a") (data (i32.const 255210) "a") (data (i32.const 255213) "a") (data (i32.const 255216) "a") (data (i32.const 255219) "a") (data (i32.const 255222) "a") (data (i32.const 255225) "a") (data (i32.const 255228) "a") (data (i32.const 255231) "a") (data (i32.const 255234) "a") (data (i32.const 255237) "a") (data (i32.const 255240) "a") (data (i32.const 255243) "a") (data (i32.const 255246) "a") (data (i32.const 255249) "a") (data (i32.const 255252) "a") (data (i32.const 255255) "a") (data (i32.const 255258) "a") (data (i32.const 255261) "a") (data (i32.const 255264) "a") (data (i32.const 255267) "a") (data (i32.const 255270) "a") (data (i32.const 255273) "a") (data (i32.const 255276) "a") (data (i32.const 255279) "a") (data (i32.const 255282) "a") (data (i32.const 255285) "a") (data (i32.const 255288) "a") (data (i32.const 255291) "a") (data (i32.const 255294) "a") (data (i32.const 255297) "a") (data (i32.const 255300) "a") (data (i32.const 255303) "a") (data (i32.const 255306) "a") (data (i32.const 255309) "a") (data (i32.const 255312) "a") (data (i32.const 255315) "a") (data (i32.const 255318) "a") (data (i32.const 255321) "a") (data (i32.const 255324) "a") (data (i32.const 255327) "a") (data (i32.const 255330) "a") (data (i32.const 255333) "a") (data (i32.const 255336) "a") (data (i32.const 255339) "a") (data (i32.const 255342) "a") (data (i32.const 255345) "a") (data (i32.const 255348) "a") (data (i32.const 255351) "a") (data (i32.const 255354) "a") (data (i32.const 255357) "a") (data (i32.const 255360) "a") (data (i32.const 255363) "a") (data (i32.const 255366) "a") (data (i32.const 255369) "a") (data (i32.const 255372) "a") (data (i32.const 255375) "a") (data (i32.const 255378) "a") (data (i32.const 255381) "a") (data (i32.const 255384) "a") (data (i32.const 255387) "a") (data (i32.const 255390) "a") (data (i32.const 255393) "a") (data (i32.const 255396) "a") (data (i32.const 255399) "a") (data (i32.const 255402) "a") (data (i32.const 255405) "a") (data (i32.const 255408) "a") (data (i32.const 255411) "a") (data (i32.const 255414) "a") (data (i32.const 255417) "a") (data (i32.const 255420) "a") (data (i32.const 255423) "a") (data (i32.const 255426) "a") (data (i32.const 255429) "a") (data (i32.const 255432) "a") (data (i32.const 255435) "a") (data (i32.const 255438) "a") (data (i32.const 255441) "a") (data (i32.const 255444) "a") (data (i32.const 255447) "a") (data (i32.const 255450) "a") (data (i32.const 255453) "a") (data (i32.const 255456) "a") (data (i32.const 255459) "a") (data (i32.const 255462) "a") (data (i32.const 255465) "a") (data (i32.const 255468) "a") (data (i32.const 255471) "a") (data (i32.const 255474) "a") (data (i32.const 255477) "a") (data (i32.const 255480) "a") (data (i32.const 255483) "a") (data (i32.const 255486) "a") (data (i32.const 255489) "a") (data (i32.const 255492) "a") (data (i32.const 255495) "a") (data (i32.const 255498) "a") (data (i32.const 255501) "a") (data (i32.const 255504) "a") (data (i32.const 255507) "a") (data (i32.const 255510) "a") (data (i32.const 255513) "a") (data (i32.const 255516) "a") (data (i32.const 255519) "a") (data (i32.const 255522) "a") (data (i32.const 255525) "a") (data (i32.const 255528) "a") (data (i32.const 255531) "a") (data (i32.const 255534) "a") (data (i32.const 255537) "a") (data (i32.const 255540) "a") (data (i32.const 255543) "a") (data (i32.const 255546) "a") (data (i32.const 255549) "a") (data (i32.const 255552) "a") (data (i32.const 255555) "a") (data (i32.const 255558) "a") (data (i32.const 255561) "a") (data (i32.const 255564) "a") (data (i32.const 255567) "a") (data (i32.const 255570) "a") (data (i32.const 255573) "a") (data (i32.const 255576) "a") (data (i32.const 255579) "a") (data (i32.const 255582) "a") (data (i32.const 255585) "a") (data (i32.const 255588) "a") (data (i32.const 255591) "a") (data (i32.const 255594) "a") (data (i32.const 255597) "a") (data (i32.const 255600) "a") (data (i32.const 255603) "a") (data (i32.const 255606) "a") (data (i32.const 255609) "a") (data (i32.const 255612) "a") (data (i32.const 255615) "a") (data (i32.const 255618) "a") (data (i32.const 255621) "a") (data (i32.const 255624) "a") (data (i32.const 255627) "a") (data (i32.const 255630) "a") (data (i32.const 255633) "a") (data (i32.const 255636) "a") (data (i32.const 255639) "a") (data (i32.const 255642) "a") (data (i32.const 255645) "a") (data (i32.const 255648) "a") (data (i32.const 255651) "a") (data (i32.const 255654) "a") (data (i32.const 255657) "a") (data (i32.const 255660) "a") (data (i32.const 255663) "a") (data (i32.const 255666) "a") (data (i32.const 255669) "a") (data (i32.const 255672) "a") (data (i32.const 255675) "a") (data (i32.const 255678) "a") (data (i32.const 255681) "a") (data (i32.const 255684) "a") (data (i32.const 255687) "a") (data (i32.const 255690) "a") (data (i32.const 255693) "a") (data (i32.const 255696) "a") (data (i32.const 255699) "a") (data (i32.const 255702) "a") (data (i32.const 255705) "a") (data (i32.const 255708) "a") (data (i32.const 255711) "a") (data (i32.const 255714) "a") (data (i32.const 255717) "a") (data (i32.const 255720) "a") (data (i32.const 255723) "a") (data (i32.const 255726) "a") (data (i32.const 255729) "a") (data (i32.const 255732) "a") (data (i32.const 255735) "a") (data (i32.const 255738) "a") (data (i32.const 255741) "a") (data (i32.const 255744) "a") (data (i32.const 255747) "a") (data (i32.const 255750) "a") (data (i32.const 255753) "a") (data (i32.const 255756) "a") (data (i32.const 255759) "a") (data (i32.const 255762) "a") (data (i32.const 255765) "a") (data (i32.const 255768) "a") (data (i32.const 255771) "a") (data (i32.const 255774) "a") (data (i32.const 255777) "a") (data (i32.const 255780) "a") (data (i32.const 255783) "a") (data (i32.const 255786) "a") (data (i32.const 255789) "a") (data (i32.const 255792) "a") (data (i32.const 255795) "a") (data (i32.const 255798) "a") (data (i32.const 255801) "a") (data (i32.const 255804) "a") (data (i32.const 255807) "a") (data (i32.const 255810) "a") (data (i32.const 255813) "a") (data (i32.const 255816) "a") (data (i32.const 255819) "a") (data (i32.const 255822) "a") (data (i32.const 255825) "a") (data (i32.const 255828) "a") (data (i32.const 255831) "a") (data (i32.const 255834) "a") (data (i32.const 255837) "a") (data (i32.const 255840) "a") (data (i32.const 255843) "a") (data (i32.const 255846) "a") (data (i32.const 255849) "a") (data (i32.const 255852) "a") (data (i32.const 255855) "a") (data (i32.const 255858) "a") (data (i32.const 255861) "a") (data (i32.const 255864) "a") (data (i32.const 255867) "a") (data (i32.const 255870) "a") (data (i32.const 255873) "a") (data (i32.const 255876) "a") (data (i32.const 255879) "a") (data (i32.const 255882) "a") (data (i32.const 255885) "a") (data (i32.const 255888) "a") (data (i32.const 255891) "a") (data (i32.const 255894) "a") (data (i32.const 255897) "a") (data (i32.const 255900) "a") (data (i32.const 255903) "a") (data (i32.const 255906) "a") (data (i32.const 255909) "a") (data (i32.const 255912) "a") (data (i32.const 255915) "a") (data (i32.const 255918) "a") (data (i32.const 255921) "a") (data (i32.const 255924) "a") (data (i32.const 255927) "a") (data (i32.const 255930) "a") (data (i32.const 255933) "a") (data (i32.const 255936) "a") (data (i32.const 255939) "a") (data (i32.const 255942) "a") (data (i32.const 255945) "a") (data (i32.const 255948) "a") (data (i32.const 255951) "a") (data (i32.const 255954) "a") (data (i32.const 255957) "a") (data (i32.const 255960) "a") (data (i32.const 255963) "a") (data (i32.const 255966) "a") (data (i32.const 255969) "a") (data (i32.const 255972) "a") (data (i32.const 255975) "a") (data (i32.const 255978) "a") (data (i32.const 255981) "a") (data (i32.const 255984) "a") (data (i32.const 255987) "a") (data (i32.const 255990) "a") (data (i32.const 255993) "a") (data (i32.const 255996) "a") (data (i32.const 255999) "a") (data (i32.const 256002) "a") (data (i32.const 256005) "a") (data (i32.const 256008) "a") (data (i32.const 256011) "a") (data (i32.const 256014) "a") (data (i32.const 256017) "a") (data (i32.const 256020) "a") (data (i32.const 256023) "a") (data (i32.const 256026) "a") (data (i32.const 256029) "a") (data (i32.const 256032) "a") (data (i32.const 256035) "a") (data (i32.const 256038) "a") (data (i32.const 256041) "a") (data (i32.const 256044) "a") (data (i32.const 256047) "a") (data (i32.const 256050) "a") (data (i32.const 256053) "a") (data (i32.const 256056) "a") (data (i32.const 256059) "a") (data (i32.const 256062) "a") (data (i32.const 256065) "a") (data (i32.const 256068) "a") (data (i32.const 256071) "a") (data (i32.const 256074) "a") (data (i32.const 256077) "a") (data (i32.const 256080) "a") (data (i32.const 256083) "a") (data (i32.const 256086) "a") (data (i32.const 256089) "a") (data (i32.const 256092) "a") (data (i32.const 256095) "a") (data (i32.const 256098) "a") (data (i32.const 256101) "a") (data (i32.const 256104) "a") (data (i32.const 256107) "a") (data (i32.const 256110) "a") (data (i32.const 256113) "a") (data (i32.const 256116) "a") (data (i32.const 256119) "a") (data (i32.const 256122) "a") (data (i32.const 256125) "a") (data (i32.const 256128) "a") (data (i32.const 256131) "a") (data (i32.const 256134) "a") (data (i32.const 256137) "a") (data (i32.const 256140) "a") (data (i32.const 256143) "a") (data (i32.const 256146) "a") (data (i32.const 256149) "a") (data (i32.const 256152) "a") (data (i32.const 256155) "a") (data (i32.const 256158) "a") (data (i32.const 256161) "a") (data (i32.const 256164) "a") (data (i32.const 256167) "a") (data (i32.const 256170) "a") (data (i32.const 256173) "a") (data (i32.const 256176) "a") (data (i32.const 256179) "a") (data (i32.const 256182) "a") (data (i32.const 256185) "a") (data (i32.const 256188) "a") (data (i32.const 256191) "a") (data (i32.const 256194) "a") (data (i32.const 256197) "a") (data (i32.const 256200) "a") (data (i32.const 256203) "a") (data (i32.const 256206) "a") (data (i32.const 256209) "a") (data (i32.const 256212) "a") (data (i32.const 256215) "a") (data (i32.const 256218) "a") (data (i32.const 256221) "a") (data (i32.const 256224) "a") (data (i32.const 256227) "a") (data (i32.const 256230) "a") (data (i32.const 256233) "a") (data (i32.const 256236) "a") (data (i32.const 256239) "a") (data (i32.const 256242) "a") (data (i32.const 256245) "a") (data (i32.const 256248) "a") (data (i32.const 256251) "a") (data (i32.const 256254) "a") (data (i32.const 256257) "a") (data (i32.const 256260) "a") (data (i32.const 256263) "a") (data (i32.const 256266) "a") (data (i32.const 256269) "a") (data (i32.const 256272) "a") (data (i32.const 256275) "a") (data (i32.const 256278) "a") (data (i32.const 256281) "a") (data (i32.const 256284) "a") (data (i32.const 256287) "a") (data (i32.const 256290) "a") (data (i32.const 256293) "a") (data (i32.const 256296) "a") (data (i32.const 256299) "a") (data (i32.const 256302) "a") (data (i32.const 256305) "a") (data (i32.const 256308) "a") (data (i32.const 256311) "a") (data (i32.const 256314) "a") (data (i32.const 256317) "a") (data (i32.const 256320) "a") (data (i32.const 256323) "a") (data (i32.const 256326) "a") (data (i32.const 256329) "a") (data (i32.const 256332) "a") (data (i32.const 256335) "a") (data (i32.const 256338) "a") (data (i32.const 256341) "a") (data (i32.const 256344) "a") (data (i32.const 256347) "a") (data (i32.const 256350) "a") (data (i32.const 256353) "a") (data (i32.const 256356) "a") (data (i32.const 256359) "a") (data (i32.const 256362) "a") (data (i32.const 256365) "a") (data (i32.const 256368) "a") (data (i32.const 256371) "a") (data (i32.const 256374) "a") (data (i32.const 256377) "a") (data (i32.const 256380) "a") (data (i32.const 256383) "a") (data (i32.const 256386) "a") (data (i32.const 256389) "a") (data (i32.const 256392) "a") (data (i32.const 256395) "a") (data (i32.const 256398) "a") (data (i32.const 256401) "a") (data (i32.const 256404) "a") (data (i32.const 256407) "a") (data (i32.const 256410) "a") (data (i32.const 256413) "a") (data (i32.const 256416) "a") (data (i32.const 256419) "a") (data (i32.const 256422) "a") (data (i32.const 256425) "a") (data (i32.const 256428) "a") (data (i32.const 256431) "a") (data (i32.const 256434) "a") (data (i32.const 256437) "a") (data (i32.const 256440) "a") (data (i32.const 256443) "a") (data (i32.const 256446) "a") (data (i32.const 256449) "a") (data (i32.const 256452) "a") (data (i32.const 256455) "a") (data (i32.const 256458) "a") (data (i32.const 256461) "a") (data (i32.const 256464) "a") (data (i32.const 256467) "a") (data (i32.const 256470) "a") (data (i32.const 256473) "a") (data (i32.const 256476) "a") (data (i32.const 256479) "a") (data (i32.const 256482) "a") (data (i32.const 256485) "a") (data (i32.const 256488) "a") (data (i32.const 256491) "a") (data (i32.const 256494) "a") (data (i32.const 256497) "a") (data (i32.const 256500) "a") (data (i32.const 256503) "a") (data (i32.const 256506) "a") (data (i32.const 256509) "a") (data (i32.const 256512) "a") (data (i32.const 256515) "a") (data (i32.const 256518) "a") (data (i32.const 256521) "a") (data (i32.const 256524) "a") (data (i32.const 256527) "a") (data (i32.const 256530) "a") (data (i32.const 256533) "a") (data (i32.const 256536) "a") (data (i32.const 256539) "a") (data (i32.const 256542) "a") (data (i32.const 256545) "a") (data (i32.const 256548) "a") (data (i32.const 256551) "a") (data (i32.const 256554) "a") (data (i32.const 256557) "a") (data (i32.const 256560) "a") (data (i32.const 256563) "a") (data (i32.const 256566) "a") (data (i32.const 256569) "a") (data (i32.const 256572) "a") (data (i32.const 256575) "a") (data (i32.const 256578) "a") (data (i32.const 256581) "a") (data (i32.const 256584) "a") (data (i32.const 256587) "a") (data (i32.const 256590) "a") (data (i32.const 256593) "a") (data (i32.const 256596) "a") (data (i32.const 256599) "a") (data (i32.const 256602) "a") (data (i32.const 256605) "a") (data (i32.const 256608) "a") (data (i32.const 256611) "a") (data (i32.const 256614) "a") (data (i32.const 256617) "a") (data (i32.const 256620) "a") (data (i32.const 256623) "a") (data (i32.const 256626) "a") (data (i32.const 256629) "a") (data (i32.const 256632) "a") (data (i32.const 256635) "a") (data (i32.const 256638) "a") (data (i32.const 256641) "a") (data (i32.const 256644) "a") (data (i32.const 256647) "a") (data (i32.const 256650) "a") (data (i32.const 256653) "a") (data (i32.const 256656) "a") (data (i32.const 256659) "a") (data (i32.const 256662) "a") (data (i32.const 256665) "a") (data (i32.const 256668) "a") (data (i32.const 256671) "a") (data (i32.const 256674) "a") (data (i32.const 256677) "a") (data (i32.const 256680) "a") (data (i32.const 256683) "a") (data (i32.const 256686) "a") (data (i32.const 256689) "a") (data (i32.const 256692) "a") (data (i32.const 256695) "a") (data (i32.const 256698) "a") (data (i32.const 256701) "a") (data (i32.const 256704) "a") (data (i32.const 256707) "a") (data (i32.const 256710) "a") (data (i32.const 256713) "a") (data (i32.const 256716) "a") (data (i32.const 256719) "a") (data (i32.const 256722) "a") (data (i32.const 256725) "a") (data (i32.const 256728) "a") (data (i32.const 256731) "a") (data (i32.const 256734) "a") (data (i32.const 256737) "a") (data (i32.const 256740) "a") (data (i32.const 256743) "a") (data (i32.const 256746) "a") (data (i32.const 256749) "a") (data (i32.const 256752) "a") (data (i32.const 256755) "a") (data (i32.const 256758) "a") (data (i32.const 256761) "a") (data (i32.const 256764) "a") (data (i32.const 256767) "a") (data (i32.const 256770) "a") (data (i32.const 256773) "a") (data (i32.const 256776) "a") (data (i32.const 256779) "a") (data (i32.const 256782) "a") (data (i32.const 256785) "a") (data (i32.const 256788) "a") (data (i32.const 256791) "a") (data (i32.const 256794) "a") (data (i32.const 256797) "a") (data (i32.const 256800) "a") (data (i32.const 256803) "a") (data (i32.const 256806) "a") (data (i32.const 256809) "a") (data (i32.const 256812) "a") (data (i32.const 256815) "a") (data (i32.const 256818) "a") (data (i32.const 256821) "a") (data (i32.const 256824) "a") (data (i32.const 256827) "a") (data (i32.const 256830) "a") (data (i32.const 256833) "a") (data (i32.const 256836) "a") (data (i32.const 256839) "a") (data (i32.const 256842) "a") (data (i32.const 256845) "a") (data (i32.const 256848) "a") (data (i32.const 256851) "a") (data (i32.const 256854) "a") (data (i32.const 256857) "a") (data (i32.const 256860) "a") (data (i32.const 256863) "a") (data (i32.const 256866) "a") (data (i32.const 256869) "a") (data (i32.const 256872) "a") (data (i32.const 256875) "a") (data (i32.const 256878) "a") (data (i32.const 256881) "a") (data (i32.const 256884) "a") (data (i32.const 256887) "a") (data (i32.const 256890) "a") (data (i32.const 256893) "a") (data (i32.const 256896) "a") (data (i32.const 256899) "a") (data (i32.const 256902) "a") (data (i32.const 256905) "a") (data (i32.const 256908) "a") (data (i32.const 256911) "a") (data (i32.const 256914) "a") (data (i32.const 256917) "a") (data (i32.const 256920) "a") (data (i32.const 256923) "a") (data (i32.const 256926) "a") (data (i32.const 256929) "a") (data (i32.const 256932) "a") (data (i32.const 256935) "a") (data (i32.const 256938) "a") (data (i32.const 256941) "a") (data (i32.const 256944) "a") (data (i32.const 256947) "a") (data (i32.const 256950) "a") (data (i32.const 256953) "a") (data (i32.const 256956) "a") (data (i32.const 256959) "a") (data (i32.const 256962) "a") (data (i32.const 256965) "a") (data (i32.const 256968) "a") (data (i32.const 256971) "a") (data (i32.const 256974) "a") (data (i32.const 256977) "a") (data (i32.const 256980) "a") (data (i32.const 256983) "a") (data (i32.const 256986) "a") (data (i32.const 256989) "a") (data (i32.const 256992) "a") (data (i32.const 256995) "a") (data (i32.const 256998) "a") (data (i32.const 257001) "a") (data (i32.const 257004) "a") (data (i32.const 257007) "a") (data (i32.const 257010) "a") (data (i32.const 257013) "a") (data (i32.const 257016) "a") (data (i32.const 257019) "a") (data (i32.const 257022) "a") (data (i32.const 257025) "a") (data (i32.const 257028) "a") (data (i32.const 257031) "a") (data (i32.const 257034) "a") (data (i32.const 257037) "a") (data (i32.const 257040) "a") (data (i32.const 257043) "a") (data (i32.const 257046) "a") (data (i32.const 257049) "a") (data (i32.const 257052) "a") (data (i32.const 257055) "a") (data (i32.const 257058) "a") (data (i32.const 257061) "a") (data (i32.const 257064) "a") (data (i32.const 257067) "a") (data (i32.const 257070) "a") (data (i32.const 257073) "a") (data (i32.const 257076) "a") (data (i32.const 257079) "a") (data (i32.const 257082) "a") (data (i32.const 257085) "a") (data (i32.const 257088) "a") (data (i32.const 257091) "a") (data (i32.const 257094) "a") (data (i32.const 257097) "a") (data (i32.const 257100) "a") (data (i32.const 257103) "a") (data (i32.const 257106) "a") (data (i32.const 257109) "a") (data (i32.const 257112) "a") (data (i32.const 257115) "a") (data (i32.const 257118) "a") (data (i32.const 257121) "a") (data (i32.const 257124) "a") (data (i32.const 257127) "a") (data (i32.const 257130) "a") (data (i32.const 257133) "a") (data (i32.const 257136) "a") (data (i32.const 257139) "a") (data (i32.const 257142) "a") (data (i32.const 257145) "a") (data (i32.const 257148) "a") (data (i32.const 257151) "a") (data (i32.const 257154) "a") (data (i32.const 257157) "a") (data (i32.const 257160) "a") (data (i32.const 257163) "a") (data (i32.const 257166) "a") (data (i32.const 257169) "a") (data (i32.const 257172) "a") (data (i32.const 257175) "a") (data (i32.const 257178) "a") (data (i32.const 257181) "a") (data (i32.const 257184) "a") (data (i32.const 257187) "a") (data (i32.const 257190) "a") (data (i32.const 257193) "a") (data (i32.const 257196) "a") (data (i32.const 257199) "a") (data (i32.const 257202) "a") (data (i32.const 257205) "a") (data (i32.const 257208) "a") (data (i32.const 257211) "a") (data (i32.const 257214) "a") (data (i32.const 257217) "a") (data (i32.const 257220) "a") (data (i32.const 257223) "a") (data (i32.const 257226) "a") (data (i32.const 257229) "a") (data (i32.const 257232) "a") (data (i32.const 257235) "a") (data (i32.const 257238) "a") (data (i32.const 257241) "a") (data (i32.const 257244) "a") (data (i32.const 257247) "a") (data (i32.const 257250) "a") (data (i32.const 257253) "a") (data (i32.const 257256) "a") (data (i32.const 257259) "a") (data (i32.const 257262) "a") (data (i32.const 257265) "a") (data (i32.const 257268) "a") (data (i32.const 257271) "a") (data (i32.const 257274) "a") (data (i32.const 257277) "a") (data (i32.const 257280) "a") (data (i32.const 257283) "a") (data (i32.const 257286) "a") (data (i32.const 257289) "a") (data (i32.const 257292) "a") (data (i32.const 257295) "a") (data (i32.const 257298) "a") (data (i32.const 257301) "a") (data (i32.const 257304) "a") (data (i32.const 257307) "a") (data (i32.const 257310) "a") (data (i32.const 257313) "a") (data (i32.const 257316) "a") (data (i32.const 257319) "a") (data (i32.const 257322) "a") (data (i32.const 257325) "a") (data (i32.const 257328) "a") (data (i32.const 257331) "a") (data (i32.const 257334) "a") (data (i32.const 257337) "a") (data (i32.const 257340) "a") (data (i32.const 257343) "a") (data (i32.const 257346) "a") (data (i32.const 257349) "a") (data (i32.const 257352) "a") (data (i32.const 257355) "a") (data (i32.const 257358) "a") (data (i32.const 257361) "a") (data (i32.const 257364) "a") (data (i32.const 257367) "a") (data (i32.const 257370) "a") (data (i32.const 257373) "a") (data (i32.const 257376) "a") (data (i32.const 257379) "a") (data (i32.const 257382) "a") (data (i32.const 257385) "a") (data (i32.const 257388) "a") (data (i32.const 257391) "a") (data (i32.const 257394) "a") (data (i32.const 257397) "a") (data (i32.const 257400) "a") (data (i32.const 257403) "a") (data (i32.const 257406) "a") (data (i32.const 257409) "a") (data (i32.const 257412) "a") (data (i32.const 257415) "a") (data (i32.const 257418) "a") (data (i32.const 257421) "a") (data (i32.const 257424) "a") (data (i32.const 257427) "a") (data (i32.const 257430) "a") (data (i32.const 257433) "a") (data (i32.const 257436) "a") (data (i32.const 257439) "a") (data (i32.const 257442) "a") (data (i32.const 257445) "a") (data (i32.const 257448) "a") (data (i32.const 257451) "a") (data (i32.const 257454) "a") (data (i32.const 257457) "a") (data (i32.const 257460) "a") (data (i32.const 257463) "a") (data (i32.const 257466) "a") (data (i32.const 257469) "a") (data (i32.const 257472) "a") (data (i32.const 257475) "a") (data (i32.const 257478) "a") (data (i32.const 257481) "a") (data (i32.const 257484) "a") (data (i32.const 257487) "a") (data (i32.const 257490) "a") (data (i32.const 257493) "a") (data (i32.const 257496) "a") (data (i32.const 257499) "a") (data (i32.const 257502) "a") (data (i32.const 257505) "a") (data (i32.const 257508) "a") (data (i32.const 257511) "a") (data (i32.const 257514) "a") (data (i32.const 257517) "a") (data (i32.const 257520) "a") (data (i32.const 257523) "a") (data (i32.const 257526) "a") (data (i32.const 257529) "a") (data (i32.const 257532) "a") (data (i32.const 257535) "a") (data (i32.const 257538) "a") (data (i32.const 257541) "a") (data (i32.const 257544) "a") (data (i32.const 257547) "a") (data (i32.const 257550) "a") (data (i32.const 257553) "a") (data (i32.const 257556) "a") (data (i32.const 257559) "a") (data (i32.const 257562) "a") (data (i32.const 257565) "a") (data (i32.const 257568) "a") (data (i32.const 257571) "a") (data (i32.const 257574) "a") (data (i32.const 257577) "a") (data (i32.const 257580) "a") (data (i32.const 257583) "a") (data (i32.const 257586) "a") (data (i32.const 257589) "a") (data (i32.const 257592) "a") (data (i32.const 257595) "a") (data (i32.const 257598) "a") (data (i32.const 257601) "a") (data (i32.const 257604) "a") (data (i32.const 257607) "a") (data (i32.const 257610) "a") (data (i32.const 257613) "a") (data (i32.const 257616) "a") (data (i32.const 257619) "a") (data (i32.const 257622) "a") (data (i32.const 257625) "a") (data (i32.const 257628) "a") (data (i32.const 257631) "a") (data (i32.const 257634) "a") (data (i32.const 257637) "a") (data (i32.const 257640) "a") (data (i32.const 257643) "a") (data (i32.const 257646) "a") (data (i32.const 257649) "a") (data (i32.const 257652) "a") (data (i32.const 257655) "a") (data (i32.const 257658) "a") (data (i32.const 257661) "a") (data (i32.const 257664) "a") (data (i32.const 257667) "a") (data (i32.const 257670) "a") (data (i32.const 257673) "a") (data (i32.const 257676) "a") (data (i32.const 257679) "a") (data (i32.const 257682) "a") (data (i32.const 257685) "a") (data (i32.const 257688) "a") (data (i32.const 257691) "a") (data (i32.const 257694) "a") (data (i32.const 257697) "a") (data (i32.const 257700) "a") (data (i32.const 257703) "a") (data (i32.const 257706) "a") (data (i32.const 257709) "a") (data (i32.const 257712) "a") (data (i32.const 257715) "a") (data (i32.const 257718) "a") (data (i32.const 257721) "a") (data (i32.const 257724) "a") (data (i32.const 257727) "a") (data (i32.const 257730) "a") (data (i32.const 257733) "a") (data (i32.const 257736) "a") (data (i32.const 257739) "a") (data (i32.const 257742) "a") (data (i32.const 257745) "a") (data (i32.const 257748) "a") (data (i32.const 257751) "a") (data (i32.const 257754) "a") (data (i32.const 257757) "a") (data (i32.const 257760) "a") (data (i32.const 257763) "a") (data (i32.const 257766) "a") (data (i32.const 257769) "a") (data (i32.const 257772) "a") (data (i32.const 257775) "a") (data (i32.const 257778) "a") (data (i32.const 257781) "a") (data (i32.const 257784) "a") (data (i32.const 257787) "a") (data (i32.const 257790) "a") (data (i32.const 257793) "a") (data (i32.const 257796) "a") (data (i32.const 257799) "a") (data (i32.const 257802) "a") (data (i32.const 257805) "a") (data (i32.const 257808) "a") (data (i32.const 257811) "a") (data (i32.const 257814) "a") (data (i32.const 257817) "a") (data (i32.const 257820) "a") (data (i32.const 257823) "a") (data (i32.const 257826) "a") (data (i32.const 257829) "a") (data (i32.const 257832) "a") (data (i32.const 257835) "a") (data (i32.const 257838) "a") (data (i32.const 257841) "a") (data (i32.const 257844) "a") (data (i32.const 257847) "a") (data (i32.const 257850) "a") (data (i32.const 257853) "a") (data (i32.const 257856) "a") (data (i32.const 257859) "a") (data (i32.const 257862) "a") (data (i32.const 257865) "a") (data (i32.const 257868) "a") (data (i32.const 257871) "a") (data (i32.const 257874) "a") (data (i32.const 257877) "a") (data (i32.const 257880) "a") (data (i32.const 257883) "a") (data (i32.const 257886) "a") (data (i32.const 257889) "a") (data (i32.const 257892) "a") (data (i32.const 257895) "a") (data (i32.const 257898) "a") (data (i32.const 257901) "a") (data (i32.const 257904) "a") (data (i32.const 257907) "a") (data (i32.const 257910) "a") (data (i32.const 257913) "a") (data (i32.const 257916) "a") (data (i32.const 257919) "a") (data (i32.const 257922) "a") (data (i32.const 257925) "a") (data (i32.const 257928) "a") (data (i32.const 257931) "a") (data (i32.const 257934) "a") (data (i32.const 257937) "a") (data (i32.const 257940) "a") (data (i32.const 257943) "a") (data (i32.const 257946) "a") (data (i32.const 257949) "a") (data (i32.const 257952) "a") (data (i32.const 257955) "a") (data (i32.const 257958) "a") (data (i32.const 257961) "a") (data (i32.const 257964) "a") (data (i32.const 257967) "a") (data (i32.const 257970) "a") (data (i32.const 257973) "a") (data (i32.const 257976) "a") (data (i32.const 257979) "a") (data (i32.const 257982) "a") (data (i32.const 257985) "a") (data (i32.const 257988) "a") (data (i32.const 257991) "a") (data (i32.const 257994) "a") (data (i32.const 257997) "a") (data (i32.const 258000) "a") (data (i32.const 258003) "a") (data (i32.const 258006) "a") (data (i32.const 258009) "a") (data (i32.const 258012) "a") (data (i32.const 258015) "a") (data (i32.const 258018) "a") (data (i32.const 258021) "a") (data (i32.const 258024) "a") (data (i32.const 258027) "a") (data (i32.const 258030) "a") (data (i32.const 258033) "a") (data (i32.const 258036) "a") (data (i32.const 258039) "a") (data (i32.const 258042) "a") (data (i32.const 258045) "a") (data (i32.const 258048) "a") (data (i32.const 258051) "a") (data (i32.const 258054) "a") (data (i32.const 258057) "a") (data (i32.const 258060) "a") (data (i32.const 258063) "a") (data (i32.const 258066) "a") (data (i32.const 258069) "a") (data (i32.const 258072) "a") (data (i32.const 258075) "a") (data (i32.const 258078) "a") (data (i32.const 258081) "a") (data (i32.const 258084) "a") (data (i32.const 258087) "a") (data (i32.const 258090) "a") (data (i32.const 258093) "a") (data (i32.const 258096) "a") (data (i32.const 258099) "a") (data (i32.const 258102) "a") (data (i32.const 258105) "a") (data (i32.const 258108) "a") (data (i32.const 258111) "a") (data (i32.const 258114) "a") (data (i32.const 258117) "a") (data (i32.const 258120) "a") (data (i32.const 258123) "a") (data (i32.const 258126) "a") (data (i32.const 258129) "a") (data (i32.const 258132) "a") (data (i32.const 258135) "a") (data (i32.const 258138) "a") (data (i32.const 258141) "a") (data (i32.const 258144) "a") (data (i32.const 258147) "a") (data (i32.const 258150) "a") (data (i32.const 258153) "a") (data (i32.const 258156) "a") (data (i32.const 258159) "a") (data (i32.const 258162) "a") (data (i32.const 258165) "a") (data (i32.const 258168) "a") (data (i32.const 258171) "a") (data (i32.const 258174) "a") (data (i32.const 258177) "a") (data (i32.const 258180) "a") (data (i32.const 258183) "a") (data (i32.const 258186) "a") (data (i32.const 258189) "a") (data (i32.const 258192) "a") (data (i32.const 258195) "a") (data (i32.const 258198) "a") (data (i32.const 258201) "a") (data (i32.const 258204) "a") (data (i32.const 258207) "a") (data (i32.const 258210) "a") (data (i32.const 258213) "a") (data (i32.const 258216) "a") (data (i32.const 258219) "a") (data (i32.const 258222) "a") (data (i32.const 258225) "a") (data (i32.const 258228) "a") (data (i32.const 258231) "a") (data (i32.const 258234) "a") (data (i32.const 258237) "a") (data (i32.const 258240) "a") (data (i32.const 258243) "a") (data (i32.const 258246) "a") (data (i32.const 258249) "a") (data (i32.const 258252) "a") (data (i32.const 258255) "a") (data (i32.const 258258) "a") (data (i32.const 258261) "a") (data (i32.const 258264) "a") (data (i32.const 258267) "a") (data (i32.const 258270) "a") (data (i32.const 258273) "a") (data (i32.const 258276) "a") (data (i32.const 258279) "a") (data (i32.const 258282) "a") (data (i32.const 258285) "a") (data (i32.const 258288) "a") (data (i32.const 258291) "a") (data (i32.const 258294) "a") (data (i32.const 258297) "a") (data (i32.const 258300) "a") (data (i32.const 258303) "a") (data (i32.const 258306) "a") (data (i32.const 258309) "a") (data (i32.const 258312) "a") (data (i32.const 258315) "a") (data (i32.const 258318) "a") (data (i32.const 258321) "a") (data (i32.const 258324) "a") (data (i32.const 258327) "a") (data (i32.const 258330) "a") (data (i32.const 258333) "a") (data (i32.const 258336) "a") (data (i32.const 258339) "a") (data (i32.const 258342) "a") (data (i32.const 258345) "a") (data (i32.const 258348) "a") (data (i32.const 258351) "a") (data (i32.const 258354) "a") (data (i32.const 258357) "a") (data (i32.const 258360) "a") (data (i32.const 258363) "a") (data (i32.const 258366) "a") (data (i32.const 258369) "a") (data (i32.const 258372) "a") (data (i32.const 258375) "a") (data (i32.const 258378) "a") (data (i32.const 258381) "a") (data (i32.const 258384) "a") (data (i32.const 258387) "a") (data (i32.const 258390) "a") (data (i32.const 258393) "a") (data (i32.const 258396) "a") (data (i32.const 258399) "a") (data (i32.const 258402) "a") (data (i32.const 258405) "a") (data (i32.const 258408) "a") (data (i32.const 258411) "a") (data (i32.const 258414) "a") (data (i32.const 258417) "a") (data (i32.const 258420) "a") (data (i32.const 258423) "a") (data (i32.const 258426) "a") (data (i32.const 258429) "a") (data (i32.const 258432) "a") (data (i32.const 258435) "a") (data (i32.const 258438) "a") (data (i32.const 258441) "a") (data (i32.const 258444) "a") (data (i32.const 258447) "a") (data (i32.const 258450) "a") (data (i32.const 258453) "a") (data (i32.const 258456) "a") (data (i32.const 258459) "a") (data (i32.const 258462) "a") (data (i32.const 258465) "a") (data (i32.const 258468) "a") (data (i32.const 258471) "a") (data (i32.const 258474) "a") (data (i32.const 258477) "a") (data (i32.const 258480) "a") (data (i32.const 258483) "a") (data (i32.const 258486) "a") (data (i32.const 258489) "a") (data (i32.const 258492) "a") (data (i32.const 258495) "a") (data (i32.const 258498) "a") (data (i32.const 258501) "a") (data (i32.const 258504) "a") (data (i32.const 258507) "a") (data (i32.const 258510) "a") (data (i32.const 258513) "a") (data (i32.const 258516) "a") (data (i32.const 258519) "a") (data (i32.const 258522) "a") (data (i32.const 258525) "a") (data (i32.const 258528) "a") (data (i32.const 258531) "a") (data (i32.const 258534) "a") (data (i32.const 258537) "a") (data (i32.const 258540) "a") (data (i32.const 258543) "a") (data (i32.const 258546) "a") (data (i32.const 258549) "a") (data (i32.const 258552) "a") (data (i32.const 258555) "a") (data (i32.const 258558) "a") (data (i32.const 258561) "a") (data (i32.const 258564) "a") (data (i32.const 258567) "a") (data (i32.const 258570) "a") (data (i32.const 258573) "a") (data (i32.const 258576) "a") (data (i32.const 258579) "a") (data (i32.const 258582) "a") (data (i32.const 258585) "a") (data (i32.const 258588) "a") (data (i32.const 258591) "a") (data (i32.const 258594) "a") (data (i32.const 258597) "a") (data (i32.const 258600) "a") (data (i32.const 258603) "a") (data (i32.const 258606) "a") (data (i32.const 258609) "a") (data (i32.const 258612) "a") (data (i32.const 258615) "a") (data (i32.const 258618) "a") (data (i32.const 258621) "a") (data (i32.const 258624) "a") (data (i32.const 258627) "a") (data (i32.const 258630) "a") (data (i32.const 258633) "a") (data (i32.const 258636) "a") (data (i32.const 258639) "a") (data (i32.const 258642) "a") (data (i32.const 258645) "a") (data (i32.const 258648) "a") (data (i32.const 258651) "a") (data (i32.const 258654) "a") (data (i32.const 258657) "a") (data (i32.const 258660) "a") (data (i32.const 258663) "a") (data (i32.const 258666) "a") (data (i32.const 258669) "a") (data (i32.const 258672) "a") (data (i32.const 258675) "a") (data (i32.const 258678) "a") (data (i32.const 258681) "a") (data (i32.const 258684) "a") (data (i32.const 258687) "a") (data (i32.const 258690) "a") (data (i32.const 258693) "a") (data (i32.const 258696) "a") (data (i32.const 258699) "a") (data (i32.const 258702) "a") (data (i32.const 258705) "a") (data (i32.const 258708) "a") (data (i32.const 258711) "a") (data (i32.const 258714) "a") (data (i32.const 258717) "a") (data (i32.const 258720) "a") (data (i32.const 258723) "a") (data (i32.const 258726) "a") (data (i32.const 258729) "a") (data (i32.const 258732) "a") (data (i32.const 258735) "a") (data (i32.const 258738) "a") (data (i32.const 258741) "a") (data (i32.const 258744) "a") (data (i32.const 258747) "a") (data (i32.const 258750) "a") (data (i32.const 258753) "a") (data (i32.const 258756) "a") (data (i32.const 258759) "a") (data (i32.const 258762) "a") (data (i32.const 258765) "a") (data (i32.const 258768) "a") (data (i32.const 258771) "a") (data (i32.const 258774) "a") (data (i32.const 258777) "a") (data (i32.const 258780) "a") (data (i32.const 258783) "a") (data (i32.const 258786) "a") (data (i32.const 258789) "a") (data (i32.const 258792) "a") (data (i32.const 258795) "a") (data (i32.const 258798) "a") (data (i32.const 258801) "a") (data (i32.const 258804) "a") (data (i32.const 258807) "a") (data (i32.const 258810) "a") (data (i32.const 258813) "a") (data (i32.const 258816) "a") (data (i32.const 258819) "a") (data (i32.const 258822) "a") (data (i32.const 258825) "a") (data (i32.const 258828) "a") (data (i32.const 258831) "a") (data (i32.const 258834) "a") (data (i32.const 258837) "a") (data (i32.const 258840) "a") (data (i32.const 258843) "a") (data (i32.const 258846) "a") (data (i32.const 258849) "a") (data (i32.const 258852) "a") (data (i32.const 258855) "a") (data (i32.const 258858) "a") (data (i32.const 258861) "a") (data (i32.const 258864) "a") (data (i32.const 258867) "a") (data (i32.const 258870) "a") (data (i32.const 258873) "a") (data (i32.const 258876) "a") (data (i32.const 258879) "a") (data (i32.const 258882) "a") (data (i32.const 258885) "a") (data (i32.const 258888) "a") (data (i32.const 258891) "a") (data (i32.const 258894) "a") (data (i32.const 258897) "a") (data (i32.const 258900) "a") (data (i32.const 258903) "a") (data (i32.const 258906) "a") (data (i32.const 258909) "a") (data (i32.const 258912) "a") (data (i32.const 258915) "a") (data (i32.const 258918) "a") (data (i32.const 258921) "a") (data (i32.const 258924) "a") (data (i32.const 258927) "a") (data (i32.const 258930) "a") (data (i32.const 258933) "a") (data (i32.const 258936) "a") (data (i32.const 258939) "a") (data (i32.const 258942) "a") (data (i32.const 258945) "a") (data (i32.const 258948) "a") (data (i32.const 258951) "a") (data (i32.const 258954) "a") (data (i32.const 258957) "a") (data (i32.const 258960) "a") (data (i32.const 258963) "a") (data (i32.const 258966) "a") (data (i32.const 258969) "a") (data (i32.const 258972) "a") (data (i32.const 258975) "a") (data (i32.const 258978) "a") (data (i32.const 258981) "a") (data (i32.const 258984) "a") (data (i32.const 258987) "a") (data (i32.const 258990) "a") (data (i32.const 258993) "a") (data (i32.const 258996) "a") (data (i32.const 258999) "a") (data (i32.const 259002) "a") (data (i32.const 259005) "a") (data (i32.const 259008) "a") (data (i32.const 259011) "a") (data (i32.const 259014) "a") (data (i32.const 259017) "a") (data (i32.const 259020) "a") (data (i32.const 259023) "a") (data (i32.const 259026) "a") (data (i32.const 259029) "a") (data (i32.const 259032) "a") (data (i32.const 259035) "a") (data (i32.const 259038) "a") (data (i32.const 259041) "a") (data (i32.const 259044) "a") (data (i32.const 259047) "a") (data (i32.const 259050) "a") (data (i32.const 259053) "a") (data (i32.const 259056) "a") (data (i32.const 259059) "a") (data (i32.const 259062) "a") (data (i32.const 259065) "a") (data (i32.const 259068) "a") (data (i32.const 259071) "a") (data (i32.const 259074) "a") (data (i32.const 259077) "a") (data (i32.const 259080) "a") (data (i32.const 259083) "a") (data (i32.const 259086) "a") (data (i32.const 259089) "a") (data (i32.const 259092) "a") (data (i32.const 259095) "a") (data (i32.const 259098) "a") (data (i32.const 259101) "a") (data (i32.const 259104) "a") (data (i32.const 259107) "a") (data (i32.const 259110) "a") (data (i32.const 259113) "a") (data (i32.const 259116) "a") (data (i32.const 259119) "a") (data (i32.const 259122) "a") (data (i32.const 259125) "a") (data (i32.const 259128) "a") (data (i32.const 259131) "a") (data (i32.const 259134) "a") (data (i32.const 259137) "a") (data (i32.const 259140) "a") (data (i32.const 259143) "a") (data (i32.const 259146) "a") (data (i32.const 259149) "a") (data (i32.const 259152) "a") (data (i32.const 259155) "a") (data (i32.const 259158) "a") (data (i32.const 259161) "a") (data (i32.const 259164) "a") (data (i32.const 259167) "a") (data (i32.const 259170) "a") (data (i32.const 259173) "a") (data (i32.const 259176) "a") (data (i32.const 259179) "a") (data (i32.const 259182) "a") (data (i32.const 259185) "a") (data (i32.const 259188) "a") (data (i32.const 259191) "a") (data (i32.const 259194) "a") (data (i32.const 259197) "a") (data (i32.const 259200) "a") (data (i32.const 259203) "a") (data (i32.const 259206) "a") (data (i32.const 259209) "a") (data (i32.const 259212) "a") (data (i32.const 259215) "a") (data (i32.const 259218) "a") (data (i32.const 259221) "a") (data (i32.const 259224) "a") (data (i32.const 259227) "a") (data (i32.const 259230) "a") (data (i32.const 259233) "a") (data (i32.const 259236) "a") (data (i32.const 259239) "a") (data (i32.const 259242) "a") (data (i32.const 259245) "a") (data (i32.const 259248) "a") (data (i32.const 259251) "a") (data (i32.const 259254) "a") (data (i32.const 259257) "a") (data (i32.const 259260) "a") (data (i32.const 259263) "a") (data (i32.const 259266) "a") (data (i32.const 259269) "a") (data (i32.const 259272) "a") (data (i32.const 259275) "a") (data (i32.const 259278) "a") (data (i32.const 259281) "a") (data (i32.const 259284) "a") (data (i32.const 259287) "a") (data (i32.const 259290) "a") (data (i32.const 259293) "a") (data (i32.const 259296) "a") (data (i32.const 259299) "a") (data (i32.const 259302) "a") (data (i32.const 259305) "a") (data (i32.const 259308) "a") (data (i32.const 259311) "a") (data (i32.const 259314) "a") (data (i32.const 259317) "a") (data (i32.const 259320) "a") (data (i32.const 259323) "a") (data (i32.const 259326) "a") (data (i32.const 259329) "a") (data (i32.const 259332) "a") (data (i32.const 259335) "a") (data (i32.const 259338) "a") (data (i32.const 259341) "a") (data (i32.const 259344) "a") (data (i32.const 259347) "a") (data (i32.const 259350) "a") (data (i32.const 259353) "a") (data (i32.const 259356) "a") (data (i32.const 259359) "a") (data (i32.const 259362) "a") (data (i32.const 259365) "a") (data (i32.const 259368) "a") (data (i32.const 259371) "a") (data (i32.const 259374) "a") (data (i32.const 259377) "a") (data (i32.const 259380) "a") (data (i32.const 259383) "a") (data (i32.const 259386) "a") (data (i32.const 259389) "a") (data (i32.const 259392) "a") (data (i32.const 259395) "a") (data (i32.const 259398) "a") (data (i32.const 259401) "a") (data (i32.const 259404) "a") (data (i32.const 259407) "a") (data (i32.const 259410) "a") (data (i32.const 259413) "a") (data (i32.const 259416) "a") (data (i32.const 259419) "a") (data (i32.const 259422) "a") (data (i32.const 259425) "a") (data (i32.const 259428) "a") (data (i32.const 259431) "a") (data (i32.const 259434) "a") (data (i32.const 259437) "a") (data (i32.const 259440) "a") (data (i32.const 259443) "a") (data (i32.const 259446) "a") (data (i32.const 259449) "a") (data (i32.const 259452) "a") (data (i32.const 259455) "a") (data (i32.const 259458) "a") (data (i32.const 259461) "a") (data (i32.const 259464) "a") (data (i32.const 259467) "a") (data (i32.const 259470) "a") (data (i32.const 259473) "a") (data (i32.const 259476) "a") (data (i32.const 259479) "a") (data (i32.const 259482) "a") (data (i32.const 259485) "a") (data (i32.const 259488) "a") (data (i32.const 259491) "a") (data (i32.const 259494) "a") (data (i32.const 259497) "a") (data (i32.const 259500) "a") (data (i32.const 259503) "a") (data (i32.const 259506) "a") (data (i32.const 259509) "a") (data (i32.const 259512) "a") (data (i32.const 259515) "a") (data (i32.const 259518) "a") (data (i32.const 259521) "a") (data (i32.const 259524) "a") (data (i32.const 259527) "a") (data (i32.const 259530) "a") (data (i32.const 259533) "a") (data (i32.const 259536) "a") (data (i32.const 259539) "a") (data (i32.const 259542) "a") (data (i32.const 259545) "a") (data (i32.const 259548) "a") (data (i32.const 259551) "a") (data (i32.const 259554) "a") (data (i32.const 259557) "a") (data (i32.const 259560) "a") (data (i32.const 259563) "a") (data (i32.const 259566) "a") (data (i32.const 259569) "a") (data (i32.const 259572) "a") (data (i32.const 259575) "a") (data (i32.const 259578) "a") (data (i32.const 259581) "a") (data (i32.const 259584) "a") (data (i32.const 259587) "a") (data (i32.const 259590) "a") (data (i32.const 259593) "a") (data (i32.const 259596) "a") (data (i32.const 259599) "a") (data (i32.const 259602) "a") (data (i32.const 259605) "a") (data (i32.const 259608) "a") (data (i32.const 259611) "a") (data (i32.const 259614) "a") (data (i32.const 259617) "a") (data (i32.const 259620) "a") (data (i32.const 259623) "a") (data (i32.const 259626) "a") (data (i32.const 259629) "a") (data (i32.const 259632) "a") (data (i32.const 259635) "a") (data (i32.const 259638) "a") (data (i32.const 259641) "a") (data (i32.const 259644) "a") (data (i32.const 259647) "a") (data (i32.const 259650) "a") (data (i32.const 259653) "a") (data (i32.const 259656) "a") (data (i32.const 259659) "a") (data (i32.const 259662) "a") (data (i32.const 259665) "a") (data (i32.const 259668) "a") (data (i32.const 259671) "a") (data (i32.const 259674) "a") (data (i32.const 259677) "a") (data (i32.const 259680) "a") (data (i32.const 259683) "a") (data (i32.const 259686) "a") (data (i32.const 259689) "a") (data (i32.const 259692) "a") (data (i32.const 259695) "a") (data (i32.const 259698) "a") (data (i32.const 259701) "a") (data (i32.const 259704) "a") (data (i32.const 259707) "a") (data (i32.const 259710) "a") (data (i32.const 259713) "a") (data (i32.const 259716) "a") (data (i32.const 259719) "a") (data (i32.const 259722) "a") (data (i32.const 259725) "a") (data (i32.const 259728) "a") (data (i32.const 259731) "a") (data (i32.const 259734) "a") (data (i32.const 259737) "a") (data (i32.const 259740) "a") (data (i32.const 259743) "a") (data (i32.const 259746) "a") (data (i32.const 259749) "a") (data (i32.const 259752) "a") (data (i32.const 259755) "a") (data (i32.const 259758) "a") (data (i32.const 259761) "a") (data (i32.const 259764) "a") (data (i32.const 259767) "a") (data (i32.const 259770) "a") (data (i32.const 259773) "a") (data (i32.const 259776) "a") (data (i32.const 259779) "a") (data (i32.const 259782) "a") (data (i32.const 259785) "a") (data (i32.const 259788) "a") (data (i32.const 259791) "a") (data (i32.const 259794) "a") (data (i32.const 259797) "a") (data (i32.const 259800) "a") (data (i32.const 259803) "a") (data (i32.const 259806) "a") (data (i32.const 259809) "a") (data (i32.const 259812) "a") (data (i32.const 259815) "a") (data (i32.const 259818) "a") (data (i32.const 259821) "a") (data (i32.const 259824) "a") (data (i32.const 259827) "a") (data (i32.const 259830) "a") (data (i32.const 259833) "a") (data (i32.const 259836) "a") (data (i32.const 259839) "a") (data (i32.const 259842) "a") (data (i32.const 259845) "a") (data (i32.const 259848) "a") (data (i32.const 259851) "a") (data (i32.const 259854) "a") (data (i32.const 259857) "a") (data (i32.const 259860) "a") (data (i32.const 259863) "a") (data (i32.const 259866) "a") (data (i32.const 259869) "a") (data (i32.const 259872) "a") (data (i32.const 259875) "a") (data (i32.const 259878) "a") (data (i32.const 259881) "a") (data (i32.const 259884) "a") (data (i32.const 259887) "a") (data (i32.const 259890) "a") (data (i32.const 259893) "a") (data (i32.const 259896) "a") (data (i32.const 259899) "a") (data (i32.const 259902) "a") (data (i32.const 259905) "a") (data (i32.const 259908) "a") (data (i32.const 259911) "a") (data (i32.const 259914) "a") (data (i32.const 259917) "a") (data (i32.const 259920) "a") (data (i32.const 259923) "a") (data (i32.const 259926) "a") (data (i32.const 259929) "a") (data (i32.const 259932) "a") (data (i32.const 259935) "a") (data (i32.const 259938) "a") (data (i32.const 259941) "a") (data (i32.const 259944) "a") (data (i32.const 259947) "a") (data (i32.const 259950) "a") (data (i32.const 259953) "a") (data (i32.const 259956) "a") (data (i32.const 259959) "a") (data (i32.const 259962) "a") (data (i32.const 259965) "a") (data (i32.const 259968) "a") (data (i32.const 259971) "a") (data (i32.const 259974) "a") (data (i32.const 259977) "a") (data (i32.const 259980) "a") (data (i32.const 259983) "a") (data (i32.const 259986) "a") (data (i32.const 259989) "a") (data (i32.const 259992) "a") (data (i32.const 259995) "a") (data (i32.const 259998) "a") (data (i32.const 260001) "a") (data (i32.const 260004) "a") (data (i32.const 260007) "a") (data (i32.const 260010) "a") (data (i32.const 260013) "a") (data (i32.const 260016) "a") (data (i32.const 260019) "a") (data (i32.const 260022) "a") (data (i32.const 260025) "a") (data (i32.const 260028) "a") (data (i32.const 260031) "a") (data (i32.const 260034) "a") (data (i32.const 260037) "a") (data (i32.const 260040) "a") (data (i32.const 260043) "a") (data (i32.const 260046) "a") (data (i32.const 260049) "a") (data (i32.const 260052) "a") (data (i32.const 260055) "a") (data (i32.const 260058) "a") (data (i32.const 260061) "a") (data (i32.const 260064) "a") (data (i32.const 260067) "a") (data (i32.const 260070) "a") (data (i32.const 260073) "a") (data (i32.const 260076) "a") (data (i32.const 260079) "a") (data (i32.const 260082) "a") (data (i32.const 260085) "a") (data (i32.const 260088) "a") (data (i32.const 260091) "a") (data (i32.const 260094) "a") (data (i32.const 260097) "a") (data (i32.const 260100) "a") (data (i32.const 260103) "a") (data (i32.const 260106) "a") (data (i32.const 260109) "a") (data (i32.const 260112) "a") (data (i32.const 260115) "a") (data (i32.const 260118) "a") (data (i32.const 260121) "a") (data (i32.const 260124) "a") (data (i32.const 260127) "a") (data (i32.const 260130) "a") (data (i32.const 260133) "a") (data (i32.const 260136) "a") (data (i32.const 260139) "a") (data (i32.const 260142) "a") (data (i32.const 260145) "a") (data (i32.const 260148) "a") (data (i32.const 260151) "a") (data (i32.const 260154) "a") (data (i32.const 260157) "a") (data (i32.const 260160) "a") (data (i32.const 260163) "a") (data (i32.const 260166) "a") (data (i32.const 260169) "a") (data (i32.const 260172) "a") (data (i32.const 260175) "a") (data (i32.const 260178) "a") (data (i32.const 260181) "a") (data (i32.const 260184) "a") (data (i32.const 260187) "a") (data (i32.const 260190) "a") (data (i32.const 260193) "a") (data (i32.const 260196) "a") (data (i32.const 260199) "a") (data (i32.const 260202) "a") (data (i32.const 260205) "a") (data (i32.const 260208) "a") (data (i32.const 260211) "a") (data (i32.const 260214) "a") (data (i32.const 260217) "a") (data (i32.const 260220) "a") (data (i32.const 260223) "a") (data (i32.const 260226) "a") (data (i32.const 260229) "a") (data (i32.const 260232) "a") (data (i32.const 260235) "a") (data (i32.const 260238) "a") (data (i32.const 260241) "a") (data (i32.const 260244) "a") (data (i32.const 260247) "a") (data (i32.const 260250) "a") (data (i32.const 260253) "a") (data (i32.const 260256) "a") (data (i32.const 260259) "a") (data (i32.const 260262) "a") (data (i32.const 260265) "a") (data (i32.const 260268) "a") (data (i32.const 260271) "a") (data (i32.const 260274) "a") (data (i32.const 260277) "a") (data (i32.const 260280) "a") (data (i32.const 260283) "a") (data (i32.const 260286) "a") (data (i32.const 260289) "a") (data (i32.const 260292) "a") (data (i32.const 260295) "a") (data (i32.const 260298) "a") (data (i32.const 260301) "a") (data (i32.const 260304) "a") (data (i32.const 260307) "a") (data (i32.const 260310) "a") (data (i32.const 260313) "a") (data (i32.const 260316) "a") (data (i32.const 260319) "a") (data (i32.const 260322) "a") (data (i32.const 260325) "a") (data (i32.const 260328) "a") (data (i32.const 260331) "a") (data (i32.const 260334) "a") (data (i32.const 260337) "a") (data (i32.const 260340) "a") (data (i32.const 260343) "a") (data (i32.const 260346) "a") (data (i32.const 260349) "a") (data (i32.const 260352) "a") (data (i32.const 260355) "a") (data (i32.const 260358) "a") (data (i32.const 260361) "a") (data (i32.const 260364) "a") (data (i32.const 260367) "a") (data (i32.const 260370) "a") (data (i32.const 260373) "a") (data (i32.const 260376) "a") (data (i32.const 260379) "a") (data (i32.const 260382) "a") (data (i32.const 260385) "a") (data (i32.const 260388) "a") (data (i32.const 260391) "a") (data (i32.const 260394) "a") (data (i32.const 260397) "a") (data (i32.const 260400) "a") (data (i32.const 260403) "a") (data (i32.const 260406) "a") (data (i32.const 260409) "a") (data (i32.const 260412) "a") (data (i32.const 260415) "a") (data (i32.const 260418) "a") (data (i32.const 260421) "a") (data (i32.const 260424) "a") (data (i32.const 260427) "a") (data (i32.const 260430) "a") (data (i32.const 260433) "a") (data (i32.const 260436) "a") (data (i32.const 260439) "a") (data (i32.const 260442) "a") (data (i32.const 260445) "a") (data (i32.const 260448) "a") (data (i32.const 260451) "a") (data (i32.const 260454) "a") (data (i32.const 260457) "a") (data (i32.const 260460) "a") (data (i32.const 260463) "a") (data (i32.const 260466) "a") (data (i32.const 260469) "a") (data (i32.const 260472) "a") (data (i32.const 260475) "a") (data (i32.const 260478) "a") (data (i32.const 260481) "a") (data (i32.const 260484) "a") (data (i32.const 260487) "a") (data (i32.const 260490) "a") (data (i32.const 260493) "a") (data (i32.const 260496) "a") (data (i32.const 260499) "a") (data (i32.const 260502) "a") (data (i32.const 260505) "a") (data (i32.const 260508) "a") (data (i32.const 260511) "a") (data (i32.const 260514) "a") (data (i32.const 260517) "a") (data (i32.const 260520) "a") (data (i32.const 260523) "a") (data (i32.const 260526) "a") (data (i32.const 260529) "a") (data (i32.const 260532) "a") (data (i32.const 260535) "a") (data (i32.const 260538) "a") (data (i32.const 260541) "a") (data (i32.const 260544) "a") (data (i32.const 260547) "a") (data (i32.const 260550) "a") (data (i32.const 260553) "a") (data (i32.const 260556) "a") (data (i32.const 260559) "a") (data (i32.const 260562) "a") (data (i32.const 260565) "a") (data (i32.const 260568) "a") (data (i32.const 260571) "a") (data (i32.const 260574) "a") (data (i32.const 260577) "a") (data (i32.const 260580) "a") (data (i32.const 260583) "a") (data (i32.const 260586) "a") (data (i32.const 260589) "a") (data (i32.const 260592) "a") (data (i32.const 260595) "a") (data (i32.const 260598) "a") (data (i32.const 260601) "a") (data (i32.const 260604) "a") (data (i32.const 260607) "a") (data (i32.const 260610) "a") (data (i32.const 260613) "a") (data (i32.const 260616) "a") (data (i32.const 260619) "a") (data (i32.const 260622) "a") (data (i32.const 260625) "a") (data (i32.const 260628) "a") (data (i32.const 260631) "a") (data (i32.const 260634) "a") (data (i32.const 260637) "a") (data (i32.const 260640) "a") (data (i32.const 260643) "a") (data (i32.const 260646) "a") (data (i32.const 260649) "a") (data (i32.const 260652) "a") (data (i32.const 260655) "a") (data (i32.const 260658) "a") (data (i32.const 260661) "a") (data (i32.const 260664) "a") (data (i32.const 260667) "a") (data (i32.const 260670) "a") (data (i32.const 260673) "a") (data (i32.const 260676) "a") (data (i32.const 260679) "a") (data (i32.const 260682) "a") (data (i32.const 260685) "a") (data (i32.const 260688) "a") (data (i32.const 260691) "a") (data (i32.const 260694) "a") (data (i32.const 260697) "a") (data (i32.const 260700) "a") (data (i32.const 260703) "a") (data (i32.const 260706) "a") (data (i32.const 260709) "a") (data (i32.const 260712) "a") (data (i32.const 260715) "a") (data (i32.const 260718) "a") (data (i32.const 260721) "a") (data (i32.const 260724) "a") (data (i32.const 260727) "a") (data (i32.const 260730) "a") (data (i32.const 260733) "a") (data (i32.const 260736) "a") (data (i32.const 260739) "a") (data (i32.const 260742) "a") (data (i32.const 260745) "a") (data (i32.const 260748) "a") (data (i32.const 260751) "a") (data (i32.const 260754) "a") (data (i32.const 260757) "a") (data (i32.const 260760) "a") (data (i32.const 260763) "a") (data (i32.const 260766) "a") (data (i32.const 260769) "a") (data (i32.const 260772) "a") (data (i32.const 260775) "a") (data (i32.const 260778) "a") (data (i32.const 260781) "a") (data (i32.const 260784) "a") (data (i32.const 260787) "a") (data (i32.const 260790) "a") (data (i32.const 260793) "a") (data (i32.const 260796) "a") (data (i32.const 260799) "a") (data (i32.const 260802) "a") (data (i32.const 260805) "a") (data (i32.const 260808) "a") (data (i32.const 260811) "a") (data (i32.const 260814) "a") (data (i32.const 260817) "a") (data (i32.const 260820) "a") (data (i32.const 260823) "a") (data (i32.const 260826) "a") (data (i32.const 260829) "a") (data (i32.const 260832) "a") (data (i32.const 260835) "a") (data (i32.const 260838) "a") (data (i32.const 260841) "a") (data (i32.const 260844) "a") (data (i32.const 260847) "a") (data (i32.const 260850) "a") (data (i32.const 260853) "a") (data (i32.const 260856) "a") (data (i32.const 260859) "a") (data (i32.const 260862) "a") (data (i32.const 260865) "a") (data (i32.const 260868) "a") (data (i32.const 260871) "a") (data (i32.const 260874) "a") (data (i32.const 260877) "a") (data (i32.const 260880) "a") (data (i32.const 260883) "a") (data (i32.const 260886) "a") (data (i32.const 260889) "a") (data (i32.const 260892) "a") (data (i32.const 260895) "a") (data (i32.const 260898) "a") (data (i32.const 260901) "a") (data (i32.const 260904) "a") (data (i32.const 260907) "a") (data (i32.const 260910) "a") (data (i32.const 260913) "a") (data (i32.const 260916) "a") (data (i32.const 260919) "a") (data (i32.const 260922) "a") (data (i32.const 260925) "a") (data (i32.const 260928) "a") (data (i32.const 260931) "a") (data (i32.const 260934) "a") (data (i32.const 260937) "a") (data (i32.const 260940) "a") (data (i32.const 260943) "a") (data (i32.const 260946) "a") (data (i32.const 260949) "a") (data (i32.const 260952) "a") (data (i32.const 260955) "a") (data (i32.const 260958) "a") (data (i32.const 260961) "a") (data (i32.const 260964) "a") (data (i32.const 260967) "a") (data (i32.const 260970) "a") (data (i32.const 260973) "a") (data (i32.const 260976) "a") (data (i32.const 260979) "a") (data (i32.const 260982) "a") (data (i32.const 260985) "a") (data (i32.const 260988) "a") (data (i32.const 260991) "a") (data (i32.const 260994) "a") (data (i32.const 260997) "a") (data (i32.const 261000) "a") (data (i32.const 261003) "a") (data (i32.const 261006) "a") (data (i32.const 261009) "a") (data (i32.const 261012) "a") (data (i32.const 261015) "a") (data (i32.const 261018) "a") (data (i32.const 261021) "a") (data (i32.const 261024) "a") (data (i32.const 261027) "a") (data (i32.const 261030) "a") (data (i32.const 261033) "a") (data (i32.const 261036) "a") (data (i32.const 261039) "a") (data (i32.const 261042) "a") (data (i32.const 261045) "a") (data (i32.const 261048) "a") (data (i32.const 261051) "a") (data (i32.const 261054) "a") (data (i32.const 261057) "a") (data (i32.const 261060) "a") (data (i32.const 261063) "a") (data (i32.const 261066) "a") (data (i32.const 261069) "a") (data (i32.const 261072) "a") (data (i32.const 261075) "a") (data (i32.const 261078) "a") (data (i32.const 261081) "a") (data (i32.const 261084) "a") (data (i32.const 261087) "a") (data (i32.const 261090) "a") (data (i32.const 261093) "a") (data (i32.const 261096) "a") (data (i32.const 261099) "a") (data (i32.const 261102) "a") (data (i32.const 261105) "a") (data (i32.const 261108) "a") (data (i32.const 261111) "a") (data (i32.const 261114) "a") (data (i32.const 261117) "a") (data (i32.const 261120) "a") (data (i32.const 261123) "a") (data (i32.const 261126) "a") (data (i32.const 261129) "a") (data (i32.const 261132) "a") (data (i32.const 261135) "a") (data (i32.const 261138) "a") (data (i32.const 261141) "a") (data (i32.const 261144) "a") (data (i32.const 261147) "a") (data (i32.const 261150) "a") (data (i32.const 261153) "a") (data (i32.const 261156) "a") (data (i32.const 261159) "a") (data (i32.const 261162) "a") (data (i32.const 261165) "a") (data (i32.const 261168) "a") (data (i32.const 261171) "a") (data (i32.const 261174) "a") (data (i32.const 261177) "a") (data (i32.const 261180) "a") (data (i32.const 261183) "a") (data (i32.const 261186) "a") (data (i32.const 261189) "a") (data (i32.const 261192) "a") (data (i32.const 261195) "a") (data (i32.const 261198) "a") (data (i32.const 261201) "a") (data (i32.const 261204) "a") (data (i32.const 261207) "a") (data (i32.const 261210) "a") (data (i32.const 261213) "a") (data (i32.const 261216) "a") (data (i32.const 261219) "a") (data (i32.const 261222) "a") (data (i32.const 261225) "a") (data (i32.const 261228) "a") (data (i32.const 261231) "a") (data (i32.const 261234) "a") (data (i32.const 261237) "a") (data (i32.const 261240) "a") (data (i32.const 261243) "a") (data (i32.const 261246) "a") (data (i32.const 261249) "a") (data (i32.const 261252) "a") (data (i32.const 261255) "a") (data (i32.const 261258) "a") (data (i32.const 261261) "a") (data (i32.const 261264) "a") (data (i32.const 261267) "a") (data (i32.const 261270) "a") (data (i32.const 261273) "a") (data (i32.const 261276) "a") (data (i32.const 261279) "a") (data (i32.const 261282) "a") (data (i32.const 261285) "a") (data (i32.const 261288) "a") (data (i32.const 261291) "a") (data (i32.const 261294) "a") (data (i32.const 261297) "a") (data (i32.const 261300) "a") (data (i32.const 261303) "a") (data (i32.const 261306) "a") (data (i32.const 261309) "a") (data (i32.const 261312) "a") (data (i32.const 261315) "a") (data (i32.const 261318) "a") (data (i32.const 261321) "a") (data (i32.const 261324) "a") (data (i32.const 261327) "a") (data (i32.const 261330) "a") (data (i32.const 261333) "a") (data (i32.const 261336) "a") (data (i32.const 261339) "a") (data (i32.const 261342) "a") (data (i32.const 261345) "a") (data (i32.const 261348) "a") (data (i32.const 261351) "a") (data (i32.const 261354) "a") (data (i32.const 261357) "a") (data (i32.const 261360) "a") (data (i32.const 261363) "a") (data (i32.const 261366) "a") (data (i32.const 261369) "a") (data (i32.const 261372) "a") (data (i32.const 261375) "a") (data (i32.const 261378) "a") (data (i32.const 261381) "a") (data (i32.const 261384) "a") (data (i32.const 261387) "a") (data (i32.const 261390) "a") (data (i32.const 261393) "a") (data (i32.const 261396) "a") (data (i32.const 261399) "a") (data (i32.const 261402) "a") (data (i32.const 261405) "a") (data (i32.const 261408) "a") (data (i32.const 261411) "a") (data (i32.const 261414) "a") (data (i32.const 261417) "a") (data (i32.const 261420) "a") (data (i32.const 261423) "a") (data (i32.const 261426) "a") (data (i32.const 261429) "a") (data (i32.const 261432) "a") (data (i32.const 261435) "a") (data (i32.const 261438) "a") (data (i32.const 261441) "a") (data (i32.const 261444) "a") (data (i32.const 261447) "a") (data (i32.const 261450) "a") (data (i32.const 261453) "a") (data (i32.const 261456) "a") (data (i32.const 261459) "a") (data (i32.const 261462) "a") (data (i32.const 261465) "a") (data (i32.const 261468) "a") (data (i32.const 261471) "a") (data (i32.const 261474) "a") (data (i32.const 261477) "a") (data (i32.const 261480) "a") (data (i32.const 261483) "a") (data (i32.const 261486) "a") (data (i32.const 261489) "a") (data (i32.const 261492) "a") (data (i32.const 261495) "a") (data (i32.const 261498) "a") (data (i32.const 261501) "a") (data (i32.const 261504) "a") (data (i32.const 261507) "a") (data (i32.const 261510) "a") (data (i32.const 261513) "a") (data (i32.const 261516) "a") (data (i32.const 261519) "a") (data (i32.const 261522) "a") (data (i32.const 261525) "a") (data (i32.const 261528) "a") (data (i32.const 261531) "a") (data (i32.const 261534) "a") (data (i32.const 261537) "a") (data (i32.const 261540) "a") (data (i32.const 261543) "a") (data (i32.const 261546) "a") (data (i32.const 261549) "a") (data (i32.const 261552) "a") (data (i32.const 261555) "a") (data (i32.const 261558) "a") (data (i32.const 261561) "a") (data (i32.const 261564) "a") (data (i32.const 261567) "a") (data (i32.const 261570) "a") (data (i32.const 261573) "a") (data (i32.const 261576) "a") (data (i32.const 261579) "a") (data (i32.const 261582) "a") (data (i32.const 261585) "a") (data (i32.const 261588) "a") (data (i32.const 261591) "a") (data (i32.const 261594) "a") (data (i32.const 261597) "a") (data (i32.const 261600) "a") (data (i32.const 261603) "a") (data (i32.const 261606) "a") (data (i32.const 261609) "a") (data (i32.const 261612) "a") (data (i32.const 261615) "a") (data (i32.const 261618) "a") (data (i32.const 261621) "a") (data (i32.const 261624) "a") (data (i32.const 261627) "a") (data (i32.const 261630) "a") (data (i32.const 261633) "a") (data (i32.const 261636) "a") (data (i32.const 261639) "a") (data (i32.const 261642) "a") (data (i32.const 261645) "a") (data (i32.const 261648) "a") (data (i32.const 261651) "a") (data (i32.const 261654) "a") (data (i32.const 261657) "a") (data (i32.const 261660) "a") (data (i32.const 261663) "a") (data (i32.const 261666) "a") (data (i32.const 261669) "a") (data (i32.const 261672) "a") (data (i32.const 261675) "a") (data (i32.const 261678) "a") (data (i32.const 261681) "a") (data (i32.const 261684) "a") (data (i32.const 261687) "a") (data (i32.const 261690) "a") (data (i32.const 261693) "a") (data (i32.const 261696) "a") (data (i32.const 261699) "a") (data (i32.const 261702) "a") (data (i32.const 261705) "a") (data (i32.const 261708) "a") (data (i32.const 261711) "a") (data (i32.const 261714) "a") (data (i32.const 261717) "a") (data (i32.const 261720) "a") (data (i32.const 261723) "a") (data (i32.const 261726) "a") (data (i32.const 261729) "a") (data (i32.const 261732) "a") (data (i32.const 261735) "a") (data (i32.const 261738) "a") (data (i32.const 261741) "a") (data (i32.const 261744) "a") (data (i32.const 261747) "a") (data (i32.const 261750) "a") (data (i32.const 261753) "a") (data (i32.const 261756) "a") (data (i32.const 261759) "a") (data (i32.const 261762) "a") (data (i32.const 261765) "a") (data (i32.const 261768) "a") (data (i32.const 261771) "a") (data (i32.const 261774) "a") (data (i32.const 261777) "a") (data (i32.const 261780) "a") (data (i32.const 261783) "a") (data (i32.const 261786) "a") (data (i32.const 261789) "a") (data (i32.const 261792) "a") (data (i32.const 261795) "a") (data (i32.const 261798) "a") (data (i32.const 261801) "a") (data (i32.const 261804) "a") (data (i32.const 261807) "a") (data (i32.const 261810) "a") (data (i32.const 261813) "a") (data (i32.const 261816) "a") (data (i32.const 261819) "a") (data (i32.const 261822) "a") (data (i32.const 261825) "a") (data (i32.const 261828) "a") (data (i32.const 261831) "a") (data (i32.const 261834) "a") (data (i32.const 261837) "a") (data (i32.const 261840) "a") (data (i32.const 261843) "a") (data (i32.const 261846) "a") (data (i32.const 261849) "a") (data (i32.const 261852) "a") (data (i32.const 261855) "a") (data (i32.const 261858) "a") (data (i32.const 261861) "a") (data (i32.const 261864) "a") (data (i32.const 261867) "a") (data (i32.const 261870) "a") (data (i32.const 261873) "a") (data (i32.const 261876) "a") (data (i32.const 261879) "a") (data (i32.const 261882) "a") (data (i32.const 261885) "a") (data (i32.const 261888) "a") (data (i32.const 261891) "a") (data (i32.const 261894) "a") (data (i32.const 261897) "a") (data (i32.const 261900) "a") (data (i32.const 261903) "a") (data (i32.const 261906) "a") (data (i32.const 261909) "a") (data (i32.const 261912) "a") (data (i32.const 261915) "a") (data (i32.const 261918) "a") (data (i32.const 261921) "a") (data (i32.const 261924) "a") (data (i32.const 261927) "a") (data (i32.const 261930) "a") (data (i32.const 261933) "a") (data (i32.const 261936) "a") (data (i32.const 261939) "a") (data (i32.const 261942) "a") (data (i32.const 261945) "a") (data (i32.const 261948) "a") (data (i32.const 261951) "a") (data (i32.const 261954) "a") (data (i32.const 261957) "a") (data (i32.const 261960) "a") (data (i32.const 261963) "a") (data (i32.const 261966) "a") (data (i32.const 261969) "a") (data (i32.const 261972) "a") (data (i32.const 261975) "a") (data (i32.const 261978) "a") (data (i32.const 261981) "a") (data (i32.const 261984) "a") (data (i32.const 261987) "a") (data (i32.const 261990) "a") (data (i32.const 261993) "a") (data (i32.const 261996) "a") (data (i32.const 261999) "a") (data (i32.const 262002) "a") (data (i32.const 262005) "a") (data (i32.const 262008) "a") (data (i32.const 262011) "a") (data (i32.const 262014) "a") (data (i32.const 262017) "a") (data (i32.const 262020) "a") (data (i32.const 262023) "a") (data (i32.const 262026) "a") (data (i32.const 262029) "a") (data (i32.const 262032) "a") (data (i32.const 262035) "a") (data (i32.const 262038) "a") (data (i32.const 262041) "a") (data (i32.const 262044) "a") (data (i32.const 262047) "a") (data (i32.const 262050) "a") (data (i32.const 262053) "a") (data (i32.const 262056) "a") (data (i32.const 262059) "a") (data (i32.const 262062) "a") (data (i32.const 262065) "a") (data (i32.const 262068) "a") (data (i32.const 262071) "a") (data (i32.const 262074) "a") (data (i32.const 262077) "a") (data (i32.const 262080) "a") (data (i32.const 262083) "a") (data (i32.const 262086) "a") (data (i32.const 262089) "a") (data (i32.const 262092) "a") (data (i32.const 262095) "a") (data (i32.const 262098) "a") (data (i32.const 262101) "a") (data (i32.const 262104) "a") (data (i32.const 262107) "a") (data (i32.const 262110) "a") (data (i32.const 262113) "a") (data (i32.const 262116) "a") (data (i32.const 262119) "a") (data (i32.const 262122) "a") (data (i32.const 262125) "a") (data (i32.const 262128) "a") (data (i32.const 262131) "a") (data (i32.const 262134) "a") (data (i32.const 262137) "a") (data (i32.const 262140) "a") (data (i32.const 262143) "a") (data (i32.const 262146) "a") (data (i32.const 262149) "a") (data (i32.const 262152) "a") (data (i32.const 262155) "a") (data (i32.const 262158) "a") (data (i32.const 262161) "a") (data (i32.const 262164) "a") (data (i32.const 262167) "a") (data (i32.const 262170) "a") (data (i32.const 262173) "a") (data (i32.const 262176) "a") (data (i32.const 262179) "a") (data (i32.const 262182) "a") (data (i32.const 262185) "a") (data (i32.const 262188) "a") (data (i32.const 262191) "a") (data (i32.const 262194) "a") (data (i32.const 262197) "a") (data (i32.const 262200) "a") (data (i32.const 262203) "a") (data (i32.const 262206) "a") (data (i32.const 262209) "a") (data (i32.const 262212) "a") (data (i32.const 262215) "a") (data (i32.const 262218) "a") (data (i32.const 262221) "a") (data (i32.const 262224) "a") (data (i32.const 262227) "a") (data (i32.const 262230) "a") (data (i32.const 262233) "a") (data (i32.const 262236) "a") (data (i32.const 262239) "a") (data (i32.const 262242) "a") (data (i32.const 262245) "a") (data (i32.const 262248) "a") (data (i32.const 262251) "a") (data (i32.const 262254) "a") (data (i32.const 262257) "a") (data (i32.const 262260) "a") (data (i32.const 262263) "a") (data (i32.const 262266) "a") (data (i32.const 262269) "a") (data (i32.const 262272) "a") (data (i32.const 262275) "a") (data (i32.const 262278) "a") (data (i32.const 262281) "a") (data (i32.const 262284) "a") (data (i32.const 262287) "a") (data (i32.const 262290) "a") (data (i32.const 262293) "a") (data (i32.const 262296) "a") (data (i32.const 262299) "a") (data (i32.const 262302) "a") (data (i32.const 262305) "a") (data (i32.const 262308) "a") (data (i32.const 262311) "a") (data (i32.const 262314) "a") (data (i32.const 262317) "a") (data (i32.const 262320) "a") (data (i32.const 262323) "a") (data (i32.const 262326) "a") (data (i32.const 262329) "a") (data (i32.const 262332) "a") (data (i32.const 262335) "a") (data (i32.const 262338) "a") (data (i32.const 262341) "a") (data (i32.const 262344) "a") (data (i32.const 262347) "a") (data (i32.const 262350) "a") (data (i32.const 262353) "a") (data (i32.const 262356) "a") (data (i32.const 262359) "a") (data (i32.const 262362) "a") (data (i32.const 262365) "a") (data (i32.const 262368) "a") (data (i32.const 262371) "a") (data (i32.const 262374) "a") (data (i32.const 262377) "a") (data (i32.const 262380) "a") (data (i32.const 262383) "a") (data (i32.const 262386) "a") (data (i32.const 262389) "a") (data (i32.const 262392) "a") (data (i32.const 262395) "a") (data (i32.const 262398) "a") (data (i32.const 262401) "a") (data (i32.const 262404) "a") (data (i32.const 262407) "a") (data (i32.const 262410) "a") (data (i32.const 262413) "a") (data (i32.const 262416) "a") (data (i32.const 262419) "a") (data (i32.const 262422) "a") (data (i32.const 262425) "a") (data (i32.const 262428) "a") (data (i32.const 262431) "a") (data (i32.const 262434) "a") (data (i32.const 262437) "a") (data (i32.const 262440) "a") (data (i32.const 262443) "a") (data (i32.const 262446) "a") (data (i32.const 262449) "a") (data (i32.const 262452) "a") (data (i32.const 262455) "a") (data (i32.const 262458) "a") (data (i32.const 262461) "a") (data (i32.const 262464) "a") (data (i32.const 262467) "a") (data (i32.const 262470) "a") (data (i32.const 262473) "a") (data (i32.const 262476) "a") (data (i32.const 262479) "a") (data (i32.const 262482) "a") (data (i32.const 262485) "a") (data (i32.const 262488) "a") (data (i32.const 262491) "a") (data (i32.const 262494) "a") (data (i32.const 262497) "a") (data (i32.const 262500) "a") (data (i32.const 262503) "a") (data (i32.const 262506) "a") (data (i32.const 262509) "a") (data (i32.const 262512) "a") (data (i32.const 262515) "a") (data (i32.const 262518) "a") (data (i32.const 262521) "a") (data (i32.const 262524) "a") (data (i32.const 262527) "a") (data (i32.const 262530) "a") (data (i32.const 262533) "a") (data (i32.const 262536) "a") (data (i32.const 262539) "a") (data (i32.const 262542) "a") (data (i32.const 262545) "a") (data (i32.const 262548) "a") (data (i32.const 262551) "a") (data (i32.const 262554) "a") (data (i32.const 262557) "a") (data (i32.const 262560) "a") (data (i32.const 262563) "a") (data (i32.const 262566) "a") (data (i32.const 262569) "a") (data (i32.const 262572) "a") (data (i32.const 262575) "a") (data (i32.const 262578) "a") (data (i32.const 262581) "a") (data (i32.const 262584) "a") (data (i32.const 262587) "a") (data (i32.const 262590) "a") (data (i32.const 262593) "a") (data (i32.const 262596) "a") (data (i32.const 262599) "a") (data (i32.const 262602) "a") (data (i32.const 262605) "a") (data (i32.const 262608) "a") (data (i32.const 262611) "a") (data (i32.const 262614) "a") (data (i32.const 262617) "a") (data (i32.const 262620) "a") (data (i32.const 262623) "a") (data (i32.const 262626) "a") (data (i32.const 262629) "a") (data (i32.const 262632) "a") (data (i32.const 262635) "a") (data (i32.const 262638) "a") (data (i32.const 262641) "a") (data (i32.const 262644) "a") (data (i32.const 262647) "a") (data (i32.const 262650) "a") (data (i32.const 262653) "a") (data (i32.const 262656) "a") (data (i32.const 262659) "a") (data (i32.const 262662) "a") (data (i32.const 262665) "a") (data (i32.const 262668) "a") (data (i32.const 262671) "a") (data (i32.const 262674) "a") (data (i32.const 262677) "a") (data (i32.const 262680) "a") (data (i32.const 262683) "a") (data (i32.const 262686) "a") (data (i32.const 262689) "a") (data (i32.const 262692) "a") (data (i32.const 262695) "a") (data (i32.const 262698) "a") (data (i32.const 262701) "a") (data (i32.const 262704) "a") (data (i32.const 262707) "a") (data (i32.const 262710) "a") (data (i32.const 262713) "a") (data (i32.const 262716) "a") (data (i32.const 262719) "a") (data (i32.const 262722) "a") (data (i32.const 262725) "a") (data (i32.const 262728) "a") (data (i32.const 262731) "a") (data (i32.const 262734) "a") (data (i32.const 262737) "a") (data (i32.const 262740) "a") (data (i32.const 262743) "a") (data (i32.const 262746) "a") (data (i32.const 262749) "a") (data (i32.const 262752) "a") (data (i32.const 262755) "a") (data (i32.const 262758) "a") (data (i32.const 262761) "a") (data (i32.const 262764) "a") (data (i32.const 262767) "a") (data (i32.const 262770) "a") (data (i32.const 262773) "a") (data (i32.const 262776) "a") (data (i32.const 262779) "a") (data (i32.const 262782) "a") (data (i32.const 262785) "a") (data (i32.const 262788) "a") (data (i32.const 262791) "a") (data (i32.const 262794) "a") (data (i32.const 262797) "a") (data (i32.const 262800) "a") (data (i32.const 262803) "a") (data (i32.const 262806) "a") (data (i32.const 262809) "a") (data (i32.const 262812) "a") (data (i32.const 262815) "a") (data (i32.const 262818) "a") (data (i32.const 262821) "a") (data (i32.const 262824) "a") (data (i32.const 262827) "a") (data (i32.const 262830) "a") (data (i32.const 262833) "a") (data (i32.const 262836) "a") (data (i32.const 262839) "a") (data (i32.const 262842) "a") (data (i32.const 262845) "a") (data (i32.const 262848) "a") (data (i32.const 262851) "a") (data (i32.const 262854) "a") (data (i32.const 262857) "a") (data (i32.const 262860) "a") (data (i32.const 262863) "a") (data (i32.const 262866) "a") (data (i32.const 262869) "a") (data (i32.const 262872) "a") (data (i32.const 262875) "a") (data (i32.const 262878) "a") (data (i32.const 262881) "a") (data (i32.const 262884) "a") (data (i32.const 262887) "a") (data (i32.const 262890) "a") (data (i32.const 262893) "a") (data (i32.const 262896) "a") (data (i32.const 262899) "a") (data (i32.const 262902) "a") (data (i32.const 262905) "a") (data (i32.const 262908) "a") (data (i32.const 262911) "a") (data (i32.const 262914) "a") (data (i32.const 262917) "a") (data (i32.const 262920) "a") (data (i32.const 262923) "a") (data (i32.const 262926) "a") (data (i32.const 262929) "a") (data (i32.const 262932) "a") (data (i32.const 262935) "a") (data (i32.const 262938) "a") (data (i32.const 262941) "a") (data (i32.const 262944) "a") (data (i32.const 262947) "a") (data (i32.const 262950) "a") (data (i32.const 262953) "a") (data (i32.const 262956) "a") (data (i32.const 262959) "a") (data (i32.const 262962) "a") (data (i32.const 262965) "a") (data (i32.const 262968) "a") (data (i32.const 262971) "a") (data (i32.const 262974) "a") (data (i32.const 262977) "a") (data (i32.const 262980) "a") (data (i32.const 262983) "a") (data (i32.const 262986) "a") (data (i32.const 262989) "a") (data (i32.const 262992) "a") (data (i32.const 262995) "a") (data (i32.const 262998) "a") (data (i32.const 263001) "a") (data (i32.const 263004) "a") (data (i32.const 263007) "a") (data (i32.const 263010) "a") (data (i32.const 263013) "a") (data (i32.const 263016) "a") (data (i32.const 263019) "a") (data (i32.const 263022) "a") (data (i32.const 263025) "a") (data (i32.const 263028) "a") (data (i32.const 263031) "a") (data (i32.const 263034) "a") (data (i32.const 263037) "a") (data (i32.const 263040) "a") (data (i32.const 263043) "a") (data (i32.const 263046) "a") (data (i32.const 263049) "a") (data (i32.const 263052) "a") (data (i32.const 263055) "a") (data (i32.const 263058) "a") (data (i32.const 263061) "a") (data (i32.const 263064) "a") (data (i32.const 263067) "a") (data (i32.const 263070) "a") (data (i32.const 263073) "a") (data (i32.const 263076) "a") (data (i32.const 263079) "a") (data (i32.const 263082) "a") (data (i32.const 263085) "a") (data (i32.const 263088) "a") (data (i32.const 263091) "a") (data (i32.const 263094) "a") (data (i32.const 263097) "a") (data (i32.const 263100) "a") (data (i32.const 263103) "a") (data (i32.const 263106) "a") (data (i32.const 263109) "a") (data (i32.const 263112) "a") (data (i32.const 263115) "a") (data (i32.const 263118) "a") (data (i32.const 263121) "a") (data (i32.const 263124) "a") (data (i32.const 263127) "a") (data (i32.const 263130) "a") (data (i32.const 263133) "a") (data (i32.const 263136) "a") (data (i32.const 263139) "a") (data (i32.const 263142) "a") (data (i32.const 263145) "a") (data (i32.const 263148) "a") (data (i32.const 263151) "a") (data (i32.const 263154) "a") (data (i32.const 263157) "a") (data (i32.const 263160) "a") (data (i32.const 263163) "a") (data (i32.const 263166) "a") (data (i32.const 263169) "a") (data (i32.const 263172) "a") (data (i32.const 263175) "a") (data (i32.const 263178) "a") (data (i32.const 263181) "a") (data (i32.const 263184) "a") (data (i32.const 263187) "a") (data (i32.const 263190) "a") (data (i32.const 263193) "a") (data (i32.const 263196) "a") (data (i32.const 263199) "a") (data (i32.const 263202) "a") (data (i32.const 263205) "a") (data (i32.const 263208) "a") (data (i32.const 263211) "a") (data (i32.const 263214) "a") (data (i32.const 263217) "a") (data (i32.const 263220) "a") (data (i32.const 263223) "a") (data (i32.const 263226) "a") (data (i32.const 263229) "a") (data (i32.const 263232) "a") (data (i32.const 263235) "a") (data (i32.const 263238) "a") (data (i32.const 263241) "a") (data (i32.const 263244) "a") (data (i32.const 263247) "a") (data (i32.const 263250) "a") (data (i32.const 263253) "a") (data (i32.const 263256) "a") (data (i32.const 263259) "a") (data (i32.const 263262) "a") (data (i32.const 263265) "a") (data (i32.const 263268) "a") (data (i32.const 263271) "a") (data (i32.const 263274) "a") (data (i32.const 263277) "a") (data (i32.const 263280) "a") (data (i32.const 263283) "a") (data (i32.const 263286) "a") (data (i32.const 263289) "a") (data (i32.const 263292) "a") (data (i32.const 263295) "a") (data (i32.const 263298) "a") (data (i32.const 263301) "a") (data (i32.const 263304) "a") (data (i32.const 263307) "a") (data (i32.const 263310) "a") (data (i32.const 263313) "a") (data (i32.const 263316) "a") (data (i32.const 263319) "a") (data (i32.const 263322) "a") (data (i32.const 263325) "a") (data (i32.const 263328) "a") (data (i32.const 263331) "a") (data (i32.const 263334) "a") (data (i32.const 263337) "a") (data (i32.const 263340) "a") (data (i32.const 263343) "a") (data (i32.const 263346) "a") (data (i32.const 263349) "a") (data (i32.const 263352) "a") (data (i32.const 263355) "a") (data (i32.const 263358) "a") (data (i32.const 263361) "a") (data (i32.const 263364) "a") (data (i32.const 263367) "a") (data (i32.const 263370) "a") (data (i32.const 263373) "a") (data (i32.const 263376) "a") (data (i32.const 263379) "a") (data (i32.const 263382) "a") (data (i32.const 263385) "a") (data (i32.const 263388) "a") (data (i32.const 263391) "a") (data (i32.const 263394) "a") (data (i32.const 263397) "a") (data (i32.const 263400) "a") (data (i32.const 263403) "a") (data (i32.const 263406) "a") (data (i32.const 263409) "a") (data (i32.const 263412) "a") (data (i32.const 263415) "a") (data (i32.const 263418) "a") (data (i32.const 263421) "a") (data (i32.const 263424) "a") (data (i32.const 263427) "a") (data (i32.const 263430) "a") (data (i32.const 263433) "a") (data (i32.const 263436) "a") (data (i32.const 263439) "a") (data (i32.const 263442) "a") (data (i32.const 263445) "a") (data (i32.const 263448) "a") (data (i32.const 263451) "a") (data (i32.const 263454) "a") (data (i32.const 263457) "a") (data (i32.const 263460) "a") (data (i32.const 263463) "a") (data (i32.const 263466) "a") (data (i32.const 263469) "a") (data (i32.const 263472) "a") (data (i32.const 263475) "a") (data (i32.const 263478) "a") (data (i32.const 263481) "a") (data (i32.const 263484) "a") (data (i32.const 263487) "a") (data (i32.const 263490) "a") (data (i32.const 263493) "a") (data (i32.const 263496) "a") (data (i32.const 263499) "a") (data (i32.const 263502) "a") (data (i32.const 263505) "a") (data (i32.const 263508) "a") (data (i32.const 263511) "a") (data (i32.const 263514) "a") (data (i32.const 263517) "a") (data (i32.const 263520) "a") (data (i32.const 263523) "a") (data (i32.const 263526) "a") (data (i32.const 263529) "a") (data (i32.const 263532) "a") (data (i32.const 263535) "a") (data (i32.const 263538) "a") (data (i32.const 263541) "a") (data (i32.const 263544) "a") (data (i32.const 263547) "a") (data (i32.const 263550) "a") (data (i32.const 263553) "a") (data (i32.const 263556) "a") (data (i32.const 263559) "a") (data (i32.const 263562) "a") (data (i32.const 263565) "a") (data (i32.const 263568) "a") (data (i32.const 263571) "a") (data (i32.const 263574) "a") (data (i32.const 263577) "a") (data (i32.const 263580) "a") (data (i32.const 263583) "a") (data (i32.const 263586) "a") (data (i32.const 263589) "a") (data (i32.const 263592) "a") (data (i32.const 263595) "a") (data (i32.const 263598) "a") (data (i32.const 263601) "a") (data (i32.const 263604) "a") (data (i32.const 263607) "a") (data (i32.const 263610) "a") (data (i32.const 263613) "a") (data (i32.const 263616) "a") (data (i32.const 263619) "a") (data (i32.const 263622) "a") (data (i32.const 263625) "a") (data (i32.const 263628) "a") (data (i32.const 263631) "a") (data (i32.const 263634) "a") (data (i32.const 263637) "a") (data (i32.const 263640) "a") (data (i32.const 263643) "a") (data (i32.const 263646) "a") (data (i32.const 263649) "a") (data (i32.const 263652) "a") (data (i32.const 263655) "a") (data (i32.const 263658) "a") (data (i32.const 263661) "a") (data (i32.const 263664) "a") (data (i32.const 263667) "a") (data (i32.const 263670) "a") (data (i32.const 263673) "a") (data (i32.const 263676) "a") (data (i32.const 263679) "a") (data (i32.const 263682) "a") (data (i32.const 263685) "a") (data (i32.const 263688) "a") (data (i32.const 263691) "a") (data (i32.const 263694) "a") (data (i32.const 263697) "a") (data (i32.const 263700) "a") (data (i32.const 263703) "a") (data (i32.const 263706) "a") (data (i32.const 263709) "a") (data (i32.const 263712) "a") (data (i32.const 263715) "a") (data (i32.const 263718) "a") (data (i32.const 263721) "a") (data (i32.const 263724) "a") (data (i32.const 263727) "a") (data (i32.const 263730) "a") (data (i32.const 263733) "a") (data (i32.const 263736) "a") (data (i32.const 263739) "a") (data (i32.const 263742) "a") (data (i32.const 263745) "a") (data (i32.const 263748) "a") (data (i32.const 263751) "a") (data (i32.const 263754) "a") (data (i32.const 263757) "a") (data (i32.const 263760) "a") (data (i32.const 263763) "a") (data (i32.const 263766) "a") (data (i32.const 263769) "a") (data (i32.const 263772) "a") (data (i32.const 263775) "a") (data (i32.const 263778) "a") (data (i32.const 263781) "a") (data (i32.const 263784) "a") (data (i32.const 263787) "a") (data (i32.const 263790) "a") (data (i32.const 263793) "a") (data (i32.const 263796) "a") (data (i32.const 263799) "a") (data (i32.const 263802) "a") (data (i32.const 263805) "a") (data (i32.const 263808) "a") (data (i32.const 263811) "a") (data (i32.const 263814) "a") (data (i32.const 263817) "a") (data (i32.const 263820) "a") (data (i32.const 263823) "a") (data (i32.const 263826) "a") (data (i32.const 263829) "a") (data (i32.const 263832) "a") (data (i32.const 263835) "a") (data (i32.const 263838) "a") (data (i32.const 263841) "a") (data (i32.const 263844) "a") (data (i32.const 263847) "a") (data (i32.const 263850) "a") (data (i32.const 263853) "a") (data (i32.const 263856) "a") (data (i32.const 263859) "a") (data (i32.const 263862) "a") (data (i32.const 263865) "a") (data (i32.const 263868) "a") (data (i32.const 263871) "a") (data (i32.const 263874) "a") (data (i32.const 263877) "a") (data (i32.const 263880) "a") (data (i32.const 263883) "a") (data (i32.const 263886) "a") (data (i32.const 263889) "a") (data (i32.const 263892) "a") (data (i32.const 263895) "a") (data (i32.const 263898) "a") (data (i32.const 263901) "a") (data (i32.const 263904) "a") (data (i32.const 263907) "a") (data (i32.const 263910) "a") (data (i32.const 263913) "a") (data (i32.const 263916) "a") (data (i32.const 263919) "a") (data (i32.const 263922) "a") (data (i32.const 263925) "a") (data (i32.const 263928) "a") (data (i32.const 263931) "a") (data (i32.const 263934) "a") (data (i32.const 263937) "a") (data (i32.const 263940) "a") (data (i32.const 263943) "a") (data (i32.const 263946) "a") (data (i32.const 263949) "a") (data (i32.const 263952) "a") (data (i32.const 263955) "a") (data (i32.const 263958) "a") (data (i32.const 263961) "a") (data (i32.const 263964) "a") (data (i32.const 263967) "a") (data (i32.const 263970) "a") (data (i32.const 263973) "a") (data (i32.const 263976) "a") (data (i32.const 263979) "a") (data (i32.const 263982) "a") (data (i32.const 263985) "a") (data (i32.const 263988) "a") (data (i32.const 263991) "a") (data (i32.const 263994) "a") (data (i32.const 263997) "a") (data (i32.const 264000) "a") (data (i32.const 264003) "a") (data (i32.const 264006) "a") (data (i32.const 264009) "a") (data (i32.const 264012) "a") (data (i32.const 264015) "a") (data (i32.const 264018) "a") (data (i32.const 264021) "a") (data (i32.const 264024) "a") (data (i32.const 264027) "a") (data (i32.const 264030) "a") (data (i32.const 264033) "a") (data (i32.const 264036) "a") (data (i32.const 264039) "a") (data (i32.const 264042) "a") (data (i32.const 264045) "a") (data (i32.const 264048) "a") (data (i32.const 264051) "a") (data (i32.const 264054) "a") (data (i32.const 264057) "a") (data (i32.const 264060) "a") (data (i32.const 264063) "a") (data (i32.const 264066) "a") (data (i32.const 264069) "a") (data (i32.const 264072) "a") (data (i32.const 264075) "a") (data (i32.const 264078) "a") (data (i32.const 264081) "a") (data (i32.const 264084) "a") (data (i32.const 264087) "a") (data (i32.const 264090) "a") (data (i32.const 264093) "a") (data (i32.const 264096) "a") (data (i32.const 264099) "a") (data (i32.const 264102) "a") (data (i32.const 264105) "a") (data (i32.const 264108) "a") (data (i32.const 264111) "a") (data (i32.const 264114) "a") (data (i32.const 264117) "a") (data (i32.const 264120) "a") (data (i32.const 264123) "a") (data (i32.const 264126) "a") (data (i32.const 264129) "a") (data (i32.const 264132) "a") (data (i32.const 264135) "a") (data (i32.const 264138) "a") (data (i32.const 264141) "a") (data (i32.const 264144) "a") (data (i32.const 264147) "a") (data (i32.const 264150) "a") (data (i32.const 264153) "a") (data (i32.const 264156) "a") (data (i32.const 264159) "a") (data (i32.const 264162) "a") (data (i32.const 264165) "a") (data (i32.const 264168) "a") (data (i32.const 264171) "a") (data (i32.const 264174) "a") (data (i32.const 264177) "a") (data (i32.const 264180) "a") (data (i32.const 264183) "a") (data (i32.const 264186) "a") (data (i32.const 264189) "a") (data (i32.const 264192) "a") (data (i32.const 264195) "a") (data (i32.const 264198) "a") (data (i32.const 264201) "a") (data (i32.const 264204) "a") (data (i32.const 264207) "a") (data (i32.const 264210) "a") (data (i32.const 264213) "a") (data (i32.const 264216) "a") (data (i32.const 264219) "a") (data (i32.const 264222) "a") (data (i32.const 264225) "a") (data (i32.const 264228) "a") (data (i32.const 264231) "a") (data (i32.const 264234) "a") (data (i32.const 264237) "a") (data (i32.const 264240) "a") (data (i32.const 264243) "a") (data (i32.const 264246) "a") (data (i32.const 264249) "a") (data (i32.const 264252) "a") (data (i32.const 264255) "a") (data (i32.const 264258) "a") (data (i32.const 264261) "a") (data (i32.const 264264) "a") (data (i32.const 264267) "a") (data (i32.const 264270) "a") (data (i32.const 264273) "a") (data (i32.const 264276) "a") (data (i32.const 264279) "a") (data (i32.const 264282) "a") (data (i32.const 264285) "a") (data (i32.const 264288) "a") (data (i32.const 264291) "a") (data (i32.const 264294) "a") (data (i32.const 264297) "a") (data (i32.const 264300) "a") (data (i32.const 264303) "a") (data (i32.const 264306) "a") (data (i32.const 264309) "a") (data (i32.const 264312) "a") (data (i32.const 264315) "a") (data (i32.const 264318) "a") (data (i32.const 264321) "a") (data (i32.const 264324) "a") (data (i32.const 264327) "a") (data (i32.const 264330) "a") (data (i32.const 264333) "a") (data (i32.const 264336) "a") (data (i32.const 264339) "a") (data (i32.const 264342) "a") (data (i32.const 264345) "a") (data (i32.const 264348) "a") (data (i32.const 264351) "a") (data (i32.const 264354) "a") (data (i32.const 264357) "a") (data (i32.const 264360) "a") (data (i32.const 264363) "a") (data (i32.const 264366) "a") (data (i32.const 264369) "a") (data (i32.const 264372) "a") (data (i32.const 264375) "a") (data (i32.const 264378) "a") (data (i32.const 264381) "a") (data (i32.const 264384) "a") (data (i32.const 264387) "a") (data (i32.const 264390) "a") (data (i32.const 264393) "a") (data (i32.const 264396) "a") (data (i32.const 264399) "a") (data (i32.const 264402) "a") (data (i32.const 264405) "a") (data (i32.const 264408) "a") (data (i32.const 264411) "a") (data (i32.const 264414) "a") (data (i32.const 264417) "a") (data (i32.const 264420) "a") (data (i32.const 264423) "a") (data (i32.const 264426) "a") (data (i32.const 264429) "a") (data (i32.const 264432) "a") (data (i32.const 264435) "a") (data (i32.const 264438) "a") (data (i32.const 264441) "a") (data (i32.const 264444) "a") (data (i32.const 264447) "a") (data (i32.const 264450) "a") (data (i32.const 264453) "a") (data (i32.const 264456) "a") (data (i32.const 264459) "a") (data (i32.const 264462) "a") (data (i32.const 264465) "a") (data (i32.const 264468) "a") (data (i32.const 264471) "a") (data (i32.const 264474) "a") (data (i32.const 264477) "a") (data (i32.const 264480) "a") (data (i32.const 264483) "a") (data (i32.const 264486) "a") (data (i32.const 264489) "a") (data (i32.const 264492) "a") (data (i32.const 264495) "a") (data (i32.const 264498) "a") (data (i32.const 264501) "a") (data (i32.const 264504) "a") (data (i32.const 264507) "a") (data (i32.const 264510) "a") (data (i32.const 264513) "a") (data (i32.const 264516) "a") (data (i32.const 264519) "a") (data (i32.const 264522) "a") (data (i32.const 264525) "a") (data (i32.const 264528) "a") (data (i32.const 264531) "a") (data (i32.const 264534) "a") (data (i32.const 264537) "a") (data (i32.const 264540) "a") (data (i32.const 264543) "a") (data (i32.const 264546) "a") (data (i32.const 264549) "a") (data (i32.const 264552) "a") (data (i32.const 264555) "a") (data (i32.const 264558) "a") (data (i32.const 264561) "a") (data (i32.const 264564) "a") (data (i32.const 264567) "a") (data (i32.const 264570) "a") (data (i32.const 264573) "a") (data (i32.const 264576) "a") (data (i32.const 264579) "a") (data (i32.const 264582) "a") (data (i32.const 264585) "a") (data (i32.const 264588) "a") (data (i32.const 264591) "a") (data (i32.const 264594) "a") (data (i32.const 264597) "a") (data (i32.const 264600) "a") (data (i32.const 264603) "a") (data (i32.const 264606) "a") (data (i32.const 264609) "a") (data (i32.const 264612) "a") (data (i32.const 264615) "a") (data (i32.const 264618) "a") (data (i32.const 264621) "a") (data (i32.const 264624) "a") (data (i32.const 264627) "a") (data (i32.const 264630) "a") (data (i32.const 264633) "a") (data (i32.const 264636) "a") (data (i32.const 264639) "a") (data (i32.const 264642) "a") (data (i32.const 264645) "a") (data (i32.const 264648) "a") (data (i32.const 264651) "a") (data (i32.const 264654) "a") (data (i32.const 264657) "a") (data (i32.const 264660) "a") (data (i32.const 264663) "a") (data (i32.const 264666) "a") (data (i32.const 264669) "a") (data (i32.const 264672) "a") (data (i32.const 264675) "a") (data (i32.const 264678) "a") (data (i32.const 264681) "a") (data (i32.const 264684) "a") (data (i32.const 264687) "a") (data (i32.const 264690) "a") (data (i32.const 264693) "a") (data (i32.const 264696) "a") (data (i32.const 264699) "a") (data (i32.const 264702) "a") (data (i32.const 264705) "a") (data (i32.const 264708) "a") (data (i32.const 264711) "a") (data (i32.const 264714) "a") (data (i32.const 264717) "a") (data (i32.const 264720) "a") (data (i32.const 264723) "a") (data (i32.const 264726) "a") (data (i32.const 264729) "a") (data (i32.const 264732) "a") (data (i32.const 264735) "a") (data (i32.const 264738) "a") (data (i32.const 264741) "a") (data (i32.const 264744) "a") (data (i32.const 264747) "a") (data (i32.const 264750) "a") (data (i32.const 264753) "a") (data (i32.const 264756) "a") (data (i32.const 264759) "a") (data (i32.const 264762) "a") (data (i32.const 264765) "a") (data (i32.const 264768) "a") (data (i32.const 264771) "a") (data (i32.const 264774) "a") (data (i32.const 264777) "a") (data (i32.const 264780) "a") (data (i32.const 264783) "a") (data (i32.const 264786) "a") (data (i32.const 264789) "a") (data (i32.const 264792) "a") (data (i32.const 264795) "a") (data (i32.const 264798) "a") (data (i32.const 264801) "a") (data (i32.const 264804) "a") (data (i32.const 264807) "a") (data (i32.const 264810) "a") (data (i32.const 264813) "a") (data (i32.const 264816) "a") (data (i32.const 264819) "a") (data (i32.const 264822) "a") (data (i32.const 264825) "a") (data (i32.const 264828) "a") (data (i32.const 264831) "a") (data (i32.const 264834) "a") (data (i32.const 264837) "a") (data (i32.const 264840) "a") (data (i32.const 264843) "a") (data (i32.const 264846) "a") (data (i32.const 264849) "a") (data (i32.const 264852) "a") (data (i32.const 264855) "a") (data (i32.const 264858) "a") (data (i32.const 264861) "a") (data (i32.const 264864) "a") (data (i32.const 264867) "a") (data (i32.const 264870) "a") (data (i32.const 264873) "a") (data (i32.const 264876) "a") (data (i32.const 264879) "a") (data (i32.const 264882) "a") (data (i32.const 264885) "a") (data (i32.const 264888) "a") (data (i32.const 264891) "a") (data (i32.const 264894) "a") (data (i32.const 264897) "a") (data (i32.const 264900) "a") (data (i32.const 264903) "a") (data (i32.const 264906) "a") (data (i32.const 264909) "a") (data (i32.const 264912) "a") (data (i32.const 264915) "a") (data (i32.const 264918) "a") (data (i32.const 264921) "a") (data (i32.const 264924) "a") (data (i32.const 264927) "a") (data (i32.const 264930) "a") (data (i32.const 264933) "a") (data (i32.const 264936) "a") (data (i32.const 264939) "a") (data (i32.const 264942) "a") (data (i32.const 264945) "a") (data (i32.const 264948) "a") (data (i32.const 264951) "a") (data (i32.const 264954) "a") (data (i32.const 264957) "a") (data (i32.const 264960) "a") (data (i32.const 264963) "a") (data (i32.const 264966) "a") (data (i32.const 264969) "a") (data (i32.const 264972) "a") (data (i32.const 264975) "a") (data (i32.const 264978) "a") (data (i32.const 264981) "a") (data (i32.const 264984) "a") (data (i32.const 264987) "a") (data (i32.const 264990) "a") (data (i32.const 264993) "a") (data (i32.const 264996) "a") (data (i32.const 264999) "a") (data (i32.const 265002) "a") (data (i32.const 265005) "a") (data (i32.const 265008) "a") (data (i32.const 265011) "a") (data (i32.const 265014) "a") (data (i32.const 265017) "a") (data (i32.const 265020) "a") (data (i32.const 265023) "a") (data (i32.const 265026) "a") (data (i32.const 265029) "a") (data (i32.const 265032) "a") (data (i32.const 265035) "a") (data (i32.const 265038) "a") (data (i32.const 265041) "a") (data (i32.const 265044) "a") (data (i32.const 265047) "a") (data (i32.const 265050) "a") (data (i32.const 265053) "a") (data (i32.const 265056) "a") (data (i32.const 265059) "a") (data (i32.const 265062) "a") (data (i32.const 265065) "a") (data (i32.const 265068) "a") (data (i32.const 265071) "a") (data (i32.const 265074) "a") (data (i32.const 265077) "a") (data (i32.const 265080) "a") (data (i32.const 265083) "a") (data (i32.const 265086) "a") (data (i32.const 265089) "a") (data (i32.const 265092) "a") (data (i32.const 265095) "a") (data (i32.const 265098) "a") (data (i32.const 265101) "a") (data (i32.const 265104) "a") (data (i32.const 265107) "a") (data (i32.const 265110) "a") (data (i32.const 265113) "a") (data (i32.const 265116) "a") (data (i32.const 265119) "a") (data (i32.const 265122) "a") (data (i32.const 265125) "a") (data (i32.const 265128) "a") (data (i32.const 265131) "a") (data (i32.const 265134) "a") (data (i32.const 265137) "a") (data (i32.const 265140) "a") (data (i32.const 265143) "a") (data (i32.const 265146) "a") (data (i32.const 265149) "a") (data (i32.const 265152) "a") (data (i32.const 265155) "a") (data (i32.const 265158) "a") (data (i32.const 265161) "a") (data (i32.const 265164) "a") (data (i32.const 265167) "a") (data (i32.const 265170) "a") (data (i32.const 265173) "a") (data (i32.const 265176) "a") (data (i32.const 265179) "a") (data (i32.const 265182) "a") (data (i32.const 265185) "a") (data (i32.const 265188) "a") (data (i32.const 265191) "a") (data (i32.const 265194) "a") (data (i32.const 265197) "a") (data (i32.const 265200) "a") (data (i32.const 265203) "a") (data (i32.const 265206) "a") (data (i32.const 265209) "a") (data (i32.const 265212) "a") (data (i32.const 265215) "a") (data (i32.const 265218) "a") (data (i32.const 265221) "a") (data (i32.const 265224) "a") (data (i32.const 265227) "a") (data (i32.const 265230) "a") (data (i32.const 265233) "a") (data (i32.const 265236) "a") (data (i32.const 265239) "a") (data (i32.const 265242) "a") (data (i32.const 265245) "a") (data (i32.const 265248) "a") (data (i32.const 265251) "a") (data (i32.const 265254) "a") (data (i32.const 265257) "a") (data (i32.const 265260) "a") (data (i32.const 265263) "a") (data (i32.const 265266) "a") (data (i32.const 265269) "a") (data (i32.const 265272) "a") (data (i32.const 265275) "a") (data (i32.const 265278) "a") (data (i32.const 265281) "a") (data (i32.const 265284) "a") (data (i32.const 265287) "a") (data (i32.const 265290) "a") (data (i32.const 265293) "a") (data (i32.const 265296) "a") (data (i32.const 265299) "a") (data (i32.const 265302) "a") (data (i32.const 265305) "a") (data (i32.const 265308) "a") (data (i32.const 265311) "a") (data (i32.const 265314) "a") (data (i32.const 265317) "a") (data (i32.const 265320) "a") (data (i32.const 265323) "a") (data (i32.const 265326) "a") (data (i32.const 265329) "a") (data (i32.const 265332) "a") (data (i32.const 265335) "a") (data (i32.const 265338) "a") (data (i32.const 265341) "a") (data (i32.const 265344) "a") (data (i32.const 265347) "a") (data (i32.const 265350) "a") (data (i32.const 265353) "a") (data (i32.const 265356) "a") (data (i32.const 265359) "a") (data (i32.const 265362) "a") (data (i32.const 265365) "a") (data (i32.const 265368) "a") (data (i32.const 265371) "a") (data (i32.const 265374) "a") (data (i32.const 265377) "a") (data (i32.const 265380) "a") (data (i32.const 265383) "a") (data (i32.const 265386) "a") (data (i32.const 265389) "a") (data (i32.const 265392) "a") (data (i32.const 265395) "a") (data (i32.const 265398) "a") (data (i32.const 265401) "a") (data (i32.const 265404) "a") (data (i32.const 265407) "a") (data (i32.const 265410) "a") (data (i32.const 265413) "a") (data (i32.const 265416) "a") (data (i32.const 265419) "a") (data (i32.const 265422) "a") (data (i32.const 265425) "a") (data (i32.const 265428) "a") (data (i32.const 265431) "a") (data (i32.const 265434) "a") (data (i32.const 265437) "a") (data (i32.const 265440) "a") (data (i32.const 265443) "a") (data (i32.const 265446) "a") (data (i32.const 265449) "a") (data (i32.const 265452) "a") (data (i32.const 265455) "a") (data (i32.const 265458) "a") (data (i32.const 265461) "a") (data (i32.const 265464) "a") (data (i32.const 265467) "a") (data (i32.const 265470) "a") (data (i32.const 265473) "a") (data (i32.const 265476) "a") (data (i32.const 265479) "a") (data (i32.const 265482) "a") (data (i32.const 265485) "a") (data (i32.const 265488) "a") (data (i32.const 265491) "a") (data (i32.const 265494) "a") (data (i32.const 265497) "a") (data (i32.const 265500) "a") (data (i32.const 265503) "a") (data (i32.const 265506) "a") (data (i32.const 265509) "a") (data (i32.const 265512) "a") (data (i32.const 265515) "a") (data (i32.const 265518) "a") (data (i32.const 265521) "a") (data (i32.const 265524) "a") (data (i32.const 265527) "a") (data (i32.const 265530) "a") (data (i32.const 265533) "a") (data (i32.const 265536) "a") (data (i32.const 265539) "a") (data (i32.const 265542) "a") (data (i32.const 265545) "a") (data (i32.const 265548) "a") (data (i32.const 265551) "a") (data (i32.const 265554) "a") (data (i32.const 265557) "a") (data (i32.const 265560) "a") (data (i32.const 265563) "a") (data (i32.const 265566) "a") (data (i32.const 265569) "a") (data (i32.const 265572) "a") (data (i32.const 265575) "a") (data (i32.const 265578) "a") (data (i32.const 265581) "a") (data (i32.const 265584) "a") (data (i32.const 265587) "a") (data (i32.const 265590) "a") (data (i32.const 265593) "a") (data (i32.const 265596) "a") (data (i32.const 265599) "a") (data (i32.const 265602) "a") (data (i32.const 265605) "a") (data (i32.const 265608) "a") (data (i32.const 265611) "a") (data (i32.const 265614) "a") (data (i32.const 265617) "a") (data (i32.const 265620) "a") (data (i32.const 265623) "a") (data (i32.const 265626) "a") (data (i32.const 265629) "a") (data (i32.const 265632) "a") (data (i32.const 265635) "a") (data (i32.const 265638) "a") (data (i32.const 265641) "a") (data (i32.const 265644) "a") (data (i32.const 265647) "a") (data (i32.const 265650) "a") (data (i32.const 265653) "a") (data (i32.const 265656) "a") (data (i32.const 265659) "a") (data (i32.const 265662) "a") (data (i32.const 265665) "a") (data (i32.const 265668) "a") (data (i32.const 265671) "a") (data (i32.const 265674) "a") (data (i32.const 265677) "a") (data (i32.const 265680) "a") (data (i32.const 265683) "a") (data (i32.const 265686) "a") (data (i32.const 265689) "a") (data (i32.const 265692) "a") (data (i32.const 265695) "a") (data (i32.const 265698) "a") (data (i32.const 265701) "a") (data (i32.const 265704) "a") (data (i32.const 265707) "a") (data (i32.const 265710) "a") (data (i32.const 265713) "a") (data (i32.const 265716) "a") (data (i32.const 265719) "a") (data (i32.const 265722) "a") (data (i32.const 265725) "a") (data (i32.const 265728) "a") (data (i32.const 265731) "a") (data (i32.const 265734) "a") (data (i32.const 265737) "a") (data (i32.const 265740) "a") (data (i32.const 265743) "a") (data (i32.const 265746) "a") (data (i32.const 265749) "a") (data (i32.const 265752) "a") (data (i32.const 265755) "a") (data (i32.const 265758) "a") (data (i32.const 265761) "a") (data (i32.const 265764) "a") (data (i32.const 265767) "a") (data (i32.const 265770) "a") (data (i32.const 265773) "a") (data (i32.const 265776) "a") (data (i32.const 265779) "a") (data (i32.const 265782) "a") (data (i32.const 265785) "a") (data (i32.const 265788) "a") (data (i32.const 265791) "a") (data (i32.const 265794) "a") (data (i32.const 265797) "a") (data (i32.const 265800) "a") (data (i32.const 265803) "a") (data (i32.const 265806) "a") (data (i32.const 265809) "a") (data (i32.const 265812) "a") (data (i32.const 265815) "a") (data (i32.const 265818) "a") (data (i32.const 265821) "a") (data (i32.const 265824) "a") (data (i32.const 265827) "a") (data (i32.const 265830) "a") (data (i32.const 265833) "a") (data (i32.const 265836) "a") (data (i32.const 265839) "a") (data (i32.const 265842) "a") (data (i32.const 265845) "a") (data (i32.const 265848) "a") (data (i32.const 265851) "a") (data (i32.const 265854) "a") (data (i32.const 265857) "a") (data (i32.const 265860) "a") (data (i32.const 265863) "a") (data (i32.const 265866) "a") (data (i32.const 265869) "a") (data (i32.const 265872) "a") (data (i32.const 265875) "a") (data (i32.const 265878) "a") (data (i32.const 265881) "a") (data (i32.const 265884) "a") (data (i32.const 265887) "a") (data (i32.const 265890) "a") (data (i32.const 265893) "a") (data (i32.const 265896) "a") (data (i32.const 265899) "a") (data (i32.const 265902) "a") (data (i32.const 265905) "a") (data (i32.const 265908) "a") (data (i32.const 265911) "a") (data (i32.const 265914) "a") (data (i32.const 265917) "a") (data (i32.const 265920) "a") (data (i32.const 265923) "a") (data (i32.const 265926) "a") (data (i32.const 265929) "a") (data (i32.const 265932) "a") (data (i32.const 265935) "a") (data (i32.const 265938) "a") (data (i32.const 265941) "a") (data (i32.const 265944) "a") (data (i32.const 265947) "a") (data (i32.const 265950) "a") (data (i32.const 265953) "a") (data (i32.const 265956) "a") (data (i32.const 265959) "a") (data (i32.const 265962) "a") (data (i32.const 265965) "a") (data (i32.const 265968) "a") (data (i32.const 265971) "a") (data (i32.const 265974) "a") (data (i32.const 265977) "a") (data (i32.const 265980) "a") (data (i32.const 265983) "a") (data (i32.const 265986) "a") (data (i32.const 265989) "a") (data (i32.const 265992) "a") (data (i32.const 265995) "a") (data (i32.const 265998) "a") (data (i32.const 266001) "a") (data (i32.const 266004) "a") (data (i32.const 266007) "a") (data (i32.const 266010) "a") (data (i32.const 266013) "a") (data (i32.const 266016) "a") (data (i32.const 266019) "a") (data (i32.const 266022) "a") (data (i32.const 266025) "a") (data (i32.const 266028) "a") (data (i32.const 266031) "a") (data (i32.const 266034) "a") (data (i32.const 266037) "a") (data (i32.const 266040) "a") (data (i32.const 266043) "a") (data (i32.const 266046) "a") (data (i32.const 266049) "a") (data (i32.const 266052) "a") (data (i32.const 266055) "a") (data (i32.const 266058) "a") (data (i32.const 266061) "a") (data (i32.const 266064) "a") (data (i32.const 266067) "a") (data (i32.const 266070) "a") (data (i32.const 266073) "a") (data (i32.const 266076) "a") (data (i32.const 266079) "a") (data (i32.const 266082) "a") (data (i32.const 266085) "a") (data (i32.const 266088) "a") (data (i32.const 266091) "a") (data (i32.const 266094) "a") (data (i32.const 266097) "a") (data (i32.const 266100) "a") (data (i32.const 266103) "a") (data (i32.const 266106) "a") (data (i32.const 266109) "a") (data (i32.const 266112) "a") (data (i32.const 266115) "a") (data (i32.const 266118) "a") (data (i32.const 266121) "a") (data (i32.const 266124) "a") (data (i32.const 266127) "a") (data (i32.const 266130) "a") (data (i32.const 266133) "a") (data (i32.const 266136) "a") (data (i32.const 266139) "a") (data (i32.const 266142) "a") (data (i32.const 266145) "a") (data (i32.const 266148) "a") (data (i32.const 266151) "a") (data (i32.const 266154) "a") (data (i32.const 266157) "a") (data (i32.const 266160) "a") (data (i32.const 266163) "a") (data (i32.const 266166) "a") (data (i32.const 266169) "a") (data (i32.const 266172) "a") (data (i32.const 266175) "a") (data (i32.const 266178) "a") (data (i32.const 266181) "a") (data (i32.const 266184) "a") (data (i32.const 266187) "a") (data (i32.const 266190) "a") (data (i32.const 266193) "a") (data (i32.const 266196) "a") (data (i32.const 266199) "a") (data (i32.const 266202) "a") (data (i32.const 266205) "a") (data (i32.const 266208) "a") (data (i32.const 266211) "a") (data (i32.const 266214) "a") (data (i32.const 266217) "a") (data (i32.const 266220) "a") (data (i32.const 266223) "a") (data (i32.const 266226) "a") (data (i32.const 266229) "a") (data (i32.const 266232) "a") (data (i32.const 266235) "a") (data (i32.const 266238) "a") (data (i32.const 266241) "a") (data (i32.const 266244) "a") (data (i32.const 266247) "a") (data (i32.const 266250) "a") (data (i32.const 266253) "a") (data (i32.const 266256) "a") (data (i32.const 266259) "a") (data (i32.const 266262) "a") (data (i32.const 266265) "a") (data (i32.const 266268) "a") (data (i32.const 266271) "a") (data (i32.const 266274) "a") (data (i32.const 266277) "a") (data (i32.const 266280) "a") (data (i32.const 266283) "a") (data (i32.const 266286) "a") (data (i32.const 266289) "a") (data (i32.const 266292) "a") (data (i32.const 266295) "a") (data (i32.const 266298) "a") (data (i32.const 266301) "a") (data (i32.const 266304) "a") (data (i32.const 266307) "a") (data (i32.const 266310) "a") (data (i32.const 266313) "a") (data (i32.const 266316) "a") (data (i32.const 266319) "a") (data (i32.const 266322) "a") (data (i32.const 266325) "a") (data (i32.const 266328) "a") (data (i32.const 266331) "a") (data (i32.const 266334) "a") (data (i32.const 266337) "a") (data (i32.const 266340) "a") (data (i32.const 266343) "a") (data (i32.const 266346) "a") (data (i32.const 266349) "a") (data (i32.const 266352) "a") (data (i32.const 266355) "a") (data (i32.const 266358) "a") (data (i32.const 266361) "a") (data (i32.const 266364) "a") (data (i32.const 266367) "a") (data (i32.const 266370) "a") (data (i32.const 266373) "a") (data (i32.const 266376) "a") (data (i32.const 266379) "a") (data (i32.const 266382) "a") (data (i32.const 266385) "a") (data (i32.const 266388) "a") (data (i32.const 266391) "a") (data (i32.const 266394) "a") (data (i32.const 266397) "a") (data (i32.const 266400) "a") (data (i32.const 266403) "a") (data (i32.const 266406) "a") (data (i32.const 266409) "a") (data (i32.const 266412) "a") (data (i32.const 266415) "a") (data (i32.const 266418) "a") (data (i32.const 266421) "a") (data (i32.const 266424) "a") (data (i32.const 266427) "a") (data (i32.const 266430) "a") (data (i32.const 266433) "a") (data (i32.const 266436) "a") (data (i32.const 266439) "a") (data (i32.const 266442) "a") (data (i32.const 266445) "a") (data (i32.const 266448) "a") (data (i32.const 266451) "a") (data (i32.const 266454) "a") (data (i32.const 266457) "a") (data (i32.const 266460) "a") (data (i32.const 266463) "a") (data (i32.const 266466) "a") (data (i32.const 266469) "a") (data (i32.const 266472) "a") (data (i32.const 266475) "a") (data (i32.const 266478) "a") (data (i32.const 266481) "a") (data (i32.const 266484) "a") (data (i32.const 266487) "a") (data (i32.const 266490) "a") (data (i32.const 266493) "a") (data (i32.const 266496) "a") (data (i32.const 266499) "a") (data (i32.const 266502) "a") (data (i32.const 266505) "a") (data (i32.const 266508) "a") (data (i32.const 266511) "a") (data (i32.const 266514) "a") (data (i32.const 266517) "a") (data (i32.const 266520) "a") (data (i32.const 266523) "a") (data (i32.const 266526) "a") (data (i32.const 266529) "a") (data (i32.const 266532) "a") (data (i32.const 266535) "a") (data (i32.const 266538) "a") (data (i32.const 266541) "a") (data (i32.const 266544) "a") (data (i32.const 266547) "a") (data (i32.const 266550) "a") (data (i32.const 266553) "a") (data (i32.const 266556) "a") (data (i32.const 266559) "a") (data (i32.const 266562) "a") (data (i32.const 266565) "a") (data (i32.const 266568) "a") (data (i32.const 266571) "a") (data (i32.const 266574) "a") (data (i32.const 266577) "a") (data (i32.const 266580) "a") (data (i32.const 266583) "a") (data (i32.const 266586) "a") (data (i32.const 266589) "a") (data (i32.const 266592) "a") (data (i32.const 266595) "a") (data (i32.const 266598) "a") (data (i32.const 266601) "a") (data (i32.const 266604) "a") (data (i32.const 266607) "a") (data (i32.const 266610) "a") (data (i32.const 266613) "a") (data (i32.const 266616) "a") (data (i32.const 266619) "a") (data (i32.const 266622) "a") (data (i32.const 266625) "a") (data (i32.const 266628) "a") (data (i32.const 266631) "a") (data (i32.const 266634) "a") (data (i32.const 266637) "a") (data (i32.const 266640) "a") (data (i32.const 266643) "a") (data (i32.const 266646) "a") (data (i32.const 266649) "a") (data (i32.const 266652) "a") (data (i32.const 266655) "a") (data (i32.const 266658) "a") (data (i32.const 266661) "a") (data (i32.const 266664) "a") (data (i32.const 266667) "a") (data (i32.const 266670) "a") (data (i32.const 266673) "a") (data (i32.const 266676) "a") (data (i32.const 266679) "a") (data (i32.const 266682) "a") (data (i32.const 266685) "a") (data (i32.const 266688) "a") (data (i32.const 266691) "a") (data (i32.const 266694) "a") (data (i32.const 266697) "a") (data (i32.const 266700) "a") (data (i32.const 266703) "a") (data (i32.const 266706) "a") (data (i32.const 266709) "a") (data (i32.const 266712) "a") (data (i32.const 266715) "a") (data (i32.const 266718) "a") (data (i32.const 266721) "a") (data (i32.const 266724) "a") (data (i32.const 266727) "a") (data (i32.const 266730) "a") (data (i32.const 266733) "a") (data (i32.const 266736) "a") (data (i32.const 266739) "a") (data (i32.const 266742) "a") (data (i32.const 266745) "a") (data (i32.const 266748) "a") (data (i32.const 266751) "a") (data (i32.const 266754) "a") (data (i32.const 266757) "a") (data (i32.const 266760) "a") (data (i32.const 266763) "a") (data (i32.const 266766) "a") (data (i32.const 266769) "a") (data (i32.const 266772) "a") (data (i32.const 266775) "a") (data (i32.const 266778) "a") (data (i32.const 266781) "a") (data (i32.const 266784) "a") (data (i32.const 266787) "a") (data (i32.const 266790) "a") (data (i32.const 266793) "a") (data (i32.const 266796) "a") (data (i32.const 266799) "a") (data (i32.const 266802) "a") (data (i32.const 266805) "a") (data (i32.const 266808) "a") (data (i32.const 266811) "a") (data (i32.const 266814) "a") (data (i32.const 266817) "a") (data (i32.const 266820) "a") (data (i32.const 266823) "a") (data (i32.const 266826) "a") (data (i32.const 266829) "a") (data (i32.const 266832) "a") (data (i32.const 266835) "a") (data (i32.const 266838) "a") (data (i32.const 266841) "a") (data (i32.const 266844) "a") (data (i32.const 266847) "a") (data (i32.const 266850) "a") (data (i32.const 266853) "a") (data (i32.const 266856) "a") (data (i32.const 266859) "a") (data (i32.const 266862) "a") (data (i32.const 266865) "a") (data (i32.const 266868) "a") (data (i32.const 266871) "a") (data (i32.const 266874) "a") (data (i32.const 266877) "a") (data (i32.const 266880) "a") (data (i32.const 266883) "a") (data (i32.const 266886) "a") (data (i32.const 266889) "a") (data (i32.const 266892) "a") (data (i32.const 266895) "a") (data (i32.const 266898) "a") (data (i32.const 266901) "a") (data (i32.const 266904) "a") (data (i32.const 266907) "a") (data (i32.const 266910) "a") (data (i32.const 266913) "a") (data (i32.const 266916) "a") (data (i32.const 266919) "a") (data (i32.const 266922) "a") (data (i32.const 266925) "a") (data (i32.const 266928) "a") (data (i32.const 266931) "a") (data (i32.const 266934) "a") (data (i32.const 266937) "a") (data (i32.const 266940) "a") (data (i32.const 266943) "a") (data (i32.const 266946) "a") (data (i32.const 266949) "a") (data (i32.const 266952) "a") (data (i32.const 266955) "a") (data (i32.const 266958) "a") (data (i32.const 266961) "a") (data (i32.const 266964) "a") (data (i32.const 266967) "a") (data (i32.const 266970) "a") (data (i32.const 266973) "a") (data (i32.const 266976) "a") (data (i32.const 266979) "a") (data (i32.const 266982) "a") (data (i32.const 266985) "a") (data (i32.const 266988) "a") (data (i32.const 266991) "a") (data (i32.const 266994) "a") (data (i32.const 266997) "a") (data (i32.const 267000) "a") (data (i32.const 267003) "a") (data (i32.const 267006) "a") (data (i32.const 267009) "a") (data (i32.const 267012) "a") (data (i32.const 267015) "a") (data (i32.const 267018) "a") (data (i32.const 267021) "a") (data (i32.const 267024) "a") (data (i32.const 267027) "a") (data (i32.const 267030) "a") (data (i32.const 267033) "a") (data (i32.const 267036) "a") (data (i32.const 267039) "a") (data (i32.const 267042) "a") (data (i32.const 267045) "a") (data (i32.const 267048) "a") (data (i32.const 267051) "a") (data (i32.const 267054) "a") (data (i32.const 267057) "a") (data (i32.const 267060) "a") (data (i32.const 267063) "a") (data (i32.const 267066) "a") (data (i32.const 267069) "a") (data (i32.const 267072) "a") (data (i32.const 267075) "a") (data (i32.const 267078) "a") (data (i32.const 267081) "a") (data (i32.const 267084) "a") (data (i32.const 267087) "a") (data (i32.const 267090) "a") (data (i32.const 267093) "a") (data (i32.const 267096) "a") (data (i32.const 267099) "a") (data (i32.const 267102) "a") (data (i32.const 267105) "a") (data (i32.const 267108) "a") (data (i32.const 267111) "a") (data (i32.const 267114) "a") (data (i32.const 267117) "a") (data (i32.const 267120) "a") (data (i32.const 267123) "a") (data (i32.const 267126) "a") (data (i32.const 267129) "a") (data (i32.const 267132) "a") (data (i32.const 267135) "a") (data (i32.const 267138) "a") (data (i32.const 267141) "a") (data (i32.const 267144) "a") (data (i32.const 267147) "a") (data (i32.const 267150) "a") (data (i32.const 267153) "a") (data (i32.const 267156) "a") (data (i32.const 267159) "a") (data (i32.const 267162) "a") (data (i32.const 267165) "a") (data (i32.const 267168) "a") (data (i32.const 267171) "a") (data (i32.const 267174) "a") (data (i32.const 267177) "a") (data (i32.const 267180) "a") (data (i32.const 267183) "a") (data (i32.const 267186) "a") (data (i32.const 267189) "a") (data (i32.const 267192) "a") (data (i32.const 267195) "a") (data (i32.const 267198) "a") (data (i32.const 267201) "a") (data (i32.const 267204) "a") (data (i32.const 267207) "a") (data (i32.const 267210) "a") (data (i32.const 267213) "a") (data (i32.const 267216) "a") (data (i32.const 267219) "a") (data (i32.const 267222) "a") (data (i32.const 267225) "a") (data (i32.const 267228) "a") (data (i32.const 267231) "a") (data (i32.const 267234) "a") (data (i32.const 267237) "a") (data (i32.const 267240) "a") (data (i32.const 267243) "a") (data (i32.const 267246) "a") (data (i32.const 267249) "a") (data (i32.const 267252) "a") (data (i32.const 267255) "a") (data (i32.const 267258) "a") (data (i32.const 267261) "a") (data (i32.const 267264) "a") (data (i32.const 267267) "a") (data (i32.const 267270) "a") (data (i32.const 267273) "a") (data (i32.const 267276) "a") (data (i32.const 267279) "a") (data (i32.const 267282) "a") (data (i32.const 267285) "a") (data (i32.const 267288) "a") (data (i32.const 267291) "a") (data (i32.const 267294) "a") (data (i32.const 267297) "a") (data (i32.const 267300) "a") (data (i32.const 267303) "a") (data (i32.const 267306) "a") (data (i32.const 267309) "a") (data (i32.const 267312) "a") (data (i32.const 267315) "a") (data (i32.const 267318) "a") (data (i32.const 267321) "a") (data (i32.const 267324) "a") (data (i32.const 267327) "a") (data (i32.const 267330) "a") (data (i32.const 267333) "a") (data (i32.const 267336) "a") (data (i32.const 267339) "a") (data (i32.const 267342) "a") (data (i32.const 267345) "a") (data (i32.const 267348) "a") (data (i32.const 267351) "a") (data (i32.const 267354) "a") (data (i32.const 267357) "a") (data (i32.const 267360) "a") (data (i32.const 267363) "a") (data (i32.const 267366) "a") (data (i32.const 267369) "a") (data (i32.const 267372) "a") (data (i32.const 267375) "a") (data (i32.const 267378) "a") (data (i32.const 267381) "a") (data (i32.const 267384) "a") (data (i32.const 267387) "a") (data (i32.const 267390) "a") (data (i32.const 267393) "a") (data (i32.const 267396) "a") (data (i32.const 267399) "a") (data (i32.const 267402) "a") (data (i32.const 267405) "a") (data (i32.const 267408) "a") (data (i32.const 267411) "a") (data (i32.const 267414) "a") (data (i32.const 267417) "a") (data (i32.const 267420) "a") (data (i32.const 267423) "a") (data (i32.const 267426) "a") (data (i32.const 267429) "a") (data (i32.const 267432) "a") (data (i32.const 267435) "a") (data (i32.const 267438) "a") (data (i32.const 267441) "a") (data (i32.const 267444) "a") (data (i32.const 267447) "a") (data (i32.const 267450) "a") (data (i32.const 267453) "a") (data (i32.const 267456) "a") (data (i32.const 267459) "a") (data (i32.const 267462) "a") (data (i32.const 267465) "a") (data (i32.const 267468) "a") (data (i32.const 267471) "a") (data (i32.const 267474) "a") (data (i32.const 267477) "a") (data (i32.const 267480) "a") (data (i32.const 267483) "a") (data (i32.const 267486) "a") (data (i32.const 267489) "a") (data (i32.const 267492) "a") (data (i32.const 267495) "a") (data (i32.const 267498) "a") (data (i32.const 267501) "a") (data (i32.const 267504) "a") (data (i32.const 267507) "a") (data (i32.const 267510) "a") (data (i32.const 267513) "a") (data (i32.const 267516) "a") (data (i32.const 267519) "a") (data (i32.const 267522) "a") (data (i32.const 267525) "a") (data (i32.const 267528) "a") (data (i32.const 267531) "a") (data (i32.const 267534) "a") (data (i32.const 267537) "a") (data (i32.const 267540) "a") (data (i32.const 267543) "a") (data (i32.const 267546) "a") (data (i32.const 267549) "a") (data (i32.const 267552) "a") (data (i32.const 267555) "a") (data (i32.const 267558) "a") (data (i32.const 267561) "a") (data (i32.const 267564) "a") (data (i32.const 267567) "a") (data (i32.const 267570) "a") (data (i32.const 267573) "a") (data (i32.const 267576) "a") (data (i32.const 267579) "a") (data (i32.const 267582) "a") (data (i32.const 267585) "a") (data (i32.const 267588) "a") (data (i32.const 267591) "a") (data (i32.const 267594) "a") (data (i32.const 267597) "a") (data (i32.const 267600) "a") (data (i32.const 267603) "a") (data (i32.const 267606) "a") (data (i32.const 267609) "a") (data (i32.const 267612) "a") (data (i32.const 267615) "a") (data (i32.const 267618) "a") (data (i32.const 267621) "a") (data (i32.const 267624) "a") (data (i32.const 267627) "a") (data (i32.const 267630) "a") (data (i32.const 267633) "a") (data (i32.const 267636) "a") (data (i32.const 267639) "a") (data (i32.const 267642) "a") (data (i32.const 267645) "a") (data (i32.const 267648) "a") (data (i32.const 267651) "a") (data (i32.const 267654) "a") (data (i32.const 267657) "a") (data (i32.const 267660) "a") (data (i32.const 267663) "a") (data (i32.const 267666) "a") (data (i32.const 267669) "a") (data (i32.const 267672) "a") (data (i32.const 267675) "a") (data (i32.const 267678) "a") (data (i32.const 267681) "a") (data (i32.const 267684) "a") (data (i32.const 267687) "a") (data (i32.const 267690) "a") (data (i32.const 267693) "a") (data (i32.const 267696) "a") (data (i32.const 267699) "a") (data (i32.const 267702) "a") (data (i32.const 267705) "a") (data (i32.const 267708) "a") (data (i32.const 267711) "a") (data (i32.const 267714) "a") (data (i32.const 267717) "a") (data (i32.const 267720) "a") (data (i32.const 267723) "a") (data (i32.const 267726) "a") (data (i32.const 267729) "a") (data (i32.const 267732) "a") (data (i32.const 267735) "a") (data (i32.const 267738) "a") (data (i32.const 267741) "a") (data (i32.const 267744) "a") (data (i32.const 267747) "a") (data (i32.const 267750) "a") (data (i32.const 267753) "a") (data (i32.const 267756) "a") (data (i32.const 267759) "a") (data (i32.const 267762) "a") (data (i32.const 267765) "a") (data (i32.const 267768) "a") (data (i32.const 267771) "a") (data (i32.const 267774) "a") (data (i32.const 267777) "a") (data (i32.const 267780) "a") (data (i32.const 267783) "a") (data (i32.const 267786) "a") (data (i32.const 267789) "a") (data (i32.const 267792) "a") (data (i32.const 267795) "a") (data (i32.const 267798) "a") (data (i32.const 267801) "a") (data (i32.const 267804) "a") (data (i32.const 267807) "a") (data (i32.const 267810) "a") (data (i32.const 267813) "a") (data (i32.const 267816) "a") (data (i32.const 267819) "a") (data (i32.const 267822) "a") (data (i32.const 267825) "a") (data (i32.const 267828) "a") (data (i32.const 267831) "a") (data (i32.const 267834) "a") (data (i32.const 267837) "a") (data (i32.const 267840) "a") (data (i32.const 267843) "a") (data (i32.const 267846) "a") (data (i32.const 267849) "a") (data (i32.const 267852) "a") (data (i32.const 267855) "a") (data (i32.const 267858) "a") (data (i32.const 267861) "a") (data (i32.const 267864) "a") (data (i32.const 267867) "a") (data (i32.const 267870) "a") (data (i32.const 267873) "a") (data (i32.const 267876) "a") (data (i32.const 267879) "a") (data (i32.const 267882) "a") (data (i32.const 267885) "a") (data (i32.const 267888) "a") (data (i32.const 267891) "a") (data (i32.const 267894) "a") (data (i32.const 267897) "a") (data (i32.const 267900) "a") (data (i32.const 267903) "a") (data (i32.const 267906) "a") (data (i32.const 267909) "a") (data (i32.const 267912) "a") (data (i32.const 267915) "a") (data (i32.const 267918) "a") (data (i32.const 267921) "a") (data (i32.const 267924) "a") (data (i32.const 267927) "a") (data (i32.const 267930) "a") (data (i32.const 267933) "a") (data (i32.const 267936) "a") (data (i32.const 267939) "a") (data (i32.const 267942) "a") (data (i32.const 267945) "a") (data (i32.const 267948) "a") (data (i32.const 267951) "a") (data (i32.const 267954) "a") (data (i32.const 267957) "a") (data (i32.const 267960) "a") (data (i32.const 267963) "a") (data (i32.const 267966) "a") (data (i32.const 267969) "a") (data (i32.const 267972) "a") (data (i32.const 267975) "a") (data (i32.const 267978) "a") (data (i32.const 267981) "a") (data (i32.const 267984) "a") (data (i32.const 267987) "a") (data (i32.const 267990) "a") (data (i32.const 267993) "a") (data (i32.const 267996) "a") (data (i32.const 267999) "a") (data (i32.const 268002) "a") (data (i32.const 268005) "a") (data (i32.const 268008) "a") (data (i32.const 268011) "a") (data (i32.const 268014) "a") (data (i32.const 268017) "a") (data (i32.const 268020) "a") (data (i32.const 268023) "a") (data (i32.const 268026) "a") (data (i32.const 268029) "a") (data (i32.const 268032) "a") (data (i32.const 268035) "a") (data (i32.const 268038) "a") (data (i32.const 268041) "a") (data (i32.const 268044) "a") (data (i32.const 268047) "a") (data (i32.const 268050) "a") (data (i32.const 268053) "a") (data (i32.const 268056) "a") (data (i32.const 268059) "a") (data (i32.const 268062) "a") (data (i32.const 268065) "a") (data (i32.const 268068) "a") (data (i32.const 268071) "a") (data (i32.const 268074) "a") (data (i32.const 268077) "a") (data (i32.const 268080) "a") (data (i32.const 268083) "a") (data (i32.const 268086) "a") (data (i32.const 268089) "a") (data (i32.const 268092) "a") (data (i32.const 268095) "a") (data (i32.const 268098) "a") (data (i32.const 268101) "a") (data (i32.const 268104) "a") (data (i32.const 268107) "a") (data (i32.const 268110) "a") (data (i32.const 268113) "a") (data (i32.const 268116) "a") (data (i32.const 268119) "a") (data (i32.const 268122) "a") (data (i32.const 268125) "a") (data (i32.const 268128) "a") (data (i32.const 268131) "a") (data (i32.const 268134) "a") (data (i32.const 268137) "a") (data (i32.const 268140) "a") (data (i32.const 268143) "a") (data (i32.const 268146) "a") (data (i32.const 268149) "a") (data (i32.const 268152) "a") (data (i32.const 268155) "a") (data (i32.const 268158) "a") (data (i32.const 268161) "a") (data (i32.const 268164) "a") (data (i32.const 268167) "a") (data (i32.const 268170) "a") (data (i32.const 268173) "a") (data (i32.const 268176) "a") (data (i32.const 268179) "a") (data (i32.const 268182) "a") (data (i32.const 268185) "a") (data (i32.const 268188) "a") (data (i32.const 268191) "a") (data (i32.const 268194) "a") (data (i32.const 268197) "a") (data (i32.const 268200) "a") (data (i32.const 268203) "a") (data (i32.const 268206) "a") (data (i32.const 268209) "a") (data (i32.const 268212) "a") (data (i32.const 268215) "a") (data (i32.const 268218) "a") (data (i32.const 268221) "a") (data (i32.const 268224) "a") (data (i32.const 268227) "a") (data (i32.const 268230) "a") (data (i32.const 268233) "a") (data (i32.const 268236) "a") (data (i32.const 268239) "a") (data (i32.const 268242) "a") (data (i32.const 268245) "a") (data (i32.const 268248) "a") (data (i32.const 268251) "a") (data (i32.const 268254) "a") (data (i32.const 268257) "a") (data (i32.const 268260) "a") (data (i32.const 268263) "a") (data (i32.const 268266) "a") (data (i32.const 268269) "a") (data (i32.const 268272) "a") (data (i32.const 268275) "a") (data (i32.const 268278) "a") (data (i32.const 268281) "a") (data (i32.const 268284) "a") (data (i32.const 268287) "a") (data (i32.const 268290) "a") (data (i32.const 268293) "a") (data (i32.const 268296) "a") (data (i32.const 268299) "a") (data (i32.const 268302) "a") (data (i32.const 268305) "a") (data (i32.const 268308) "a") (data (i32.const 268311) "a") (data (i32.const 268314) "a") (data (i32.const 268317) "a") (data (i32.const 268320) "a") (data (i32.const 268323) "a") (data (i32.const 268326) "a") (data (i32.const 268329) "a") (data (i32.const 268332) "a") (data (i32.const 268335) "a") (data (i32.const 268338) "a") (data (i32.const 268341) "a") (data (i32.const 268344) "a") (data (i32.const 268347) "a") (data (i32.const 268350) "a") (data (i32.const 268353) "a") (data (i32.const 268356) "a") (data (i32.const 268359) "a") (data (i32.const 268362) "a") (data (i32.const 268365) "a") (data (i32.const 268368) "a") (data (i32.const 268371) "a") (data (i32.const 268374) "a") (data (i32.const 268377) "a") (data (i32.const 268380) "a") (data (i32.const 268383) "a") (data (i32.const 268386) "a") (data (i32.const 268389) "a") (data (i32.const 268392) "a") (data (i32.const 268395) "a") (data (i32.const 268398) "a") (data (i32.const 268401) "a") (data (i32.const 268404) "a") (data (i32.const 268407) "a") (data (i32.const 268410) "a") (data (i32.const 268413) "a") (data (i32.const 268416) "a") (data (i32.const 268419) "a") (data (i32.const 268422) "a") (data (i32.const 268425) "a") (data (i32.const 268428) "a") (data (i32.const 268431) "a") (data (i32.const 268434) "a") (data (i32.const 268437) "a") (data (i32.const 268440) "a") (data (i32.const 268443) "a") (data (i32.const 268446) "a") (data (i32.const 268449) "a") (data (i32.const 268452) "a") (data (i32.const 268455) "a") (data (i32.const 268458) "a") (data (i32.const 268461) "a") (data (i32.const 268464) "a") (data (i32.const 268467) "a") (data (i32.const 268470) "a") (data (i32.const 268473) "a") (data (i32.const 268476) "a") (data (i32.const 268479) "a") (data (i32.const 268482) "a") (data (i32.const 268485) "a") (data (i32.const 268488) "a") (data (i32.const 268491) "a") (data (i32.const 268494) "a") (data (i32.const 268497) "a") (data (i32.const 268500) "a") (data (i32.const 268503) "a") (data (i32.const 268506) "a") (data (i32.const 268509) "a") (data (i32.const 268512) "a") (data (i32.const 268515) "a") (data (i32.const 268518) "a") (data (i32.const 268521) "a") (data (i32.const 268524) "a") (data (i32.const 268527) "a") (data (i32.const 268530) "a") (data (i32.const 268533) "a") (data (i32.const 268536) "a") (data (i32.const 268539) "a") (data (i32.const 268542) "a") (data (i32.const 268545) "a") (data (i32.const 268548) "a") (data (i32.const 268551) "a") (data (i32.const 268554) "a") (data (i32.const 268557) "a") (data (i32.const 268560) "a") (data (i32.const 268563) "a") (data (i32.const 268566) "a") (data (i32.const 268569) "a") (data (i32.const 268572) "a") (data (i32.const 268575) "a") (data (i32.const 268578) "a") (data (i32.const 268581) "a") (data (i32.const 268584) "a") (data (i32.const 268587) "a") (data (i32.const 268590) "a") (data (i32.const 268593) "a") (data (i32.const 268596) "a") (data (i32.const 268599) "a") (data (i32.const 268602) "a") (data (i32.const 268605) "a") (data (i32.const 268608) "a") (data (i32.const 268611) "a") (data (i32.const 268614) "a") (data (i32.const 268617) "a") (data (i32.const 268620) "a") (data (i32.const 268623) "a") (data (i32.const 268626) "a") (data (i32.const 268629) "a") (data (i32.const 268632) "a") (data (i32.const 268635) "a") (data (i32.const 268638) "a") (data (i32.const 268641) "a") (data (i32.const 268644) "a") (data (i32.const 268647) "a") (data (i32.const 268650) "a") (data (i32.const 268653) "a") (data (i32.const 268656) "a") (data (i32.const 268659) "a") (data (i32.const 268662) "a") (data (i32.const 268665) "a") (data (i32.const 268668) "a") (data (i32.const 268671) "a") (data (i32.const 268674) "a") (data (i32.const 268677) "a") (data (i32.const 268680) "a") (data (i32.const 268683) "a") (data (i32.const 268686) "a") (data (i32.const 268689) "a") (data (i32.const 268692) "a") (data (i32.const 268695) "a") (data (i32.const 268698) "a") (data (i32.const 268701) "a") (data (i32.const 268704) "a") (data (i32.const 268707) "a") (data (i32.const 268710) "a") (data (i32.const 268713) "a") (data (i32.const 268716) "a") (data (i32.const 268719) "a") (data (i32.const 268722) "a") (data (i32.const 268725) "a") (data (i32.const 268728) "a") (data (i32.const 268731) "a") (data (i32.const 268734) "a") (data (i32.const 268737) "a") (data (i32.const 268740) "a") (data (i32.const 268743) "a") (data (i32.const 268746) "a") (data (i32.const 268749) "a") (data (i32.const 268752) "a") (data (i32.const 268755) "a") (data (i32.const 268758) "a") (data (i32.const 268761) "a") (data (i32.const 268764) "a") (data (i32.const 268767) "a") (data (i32.const 268770) "a") (data (i32.const 268773) "a") (data (i32.const 268776) "a") (data (i32.const 268779) "a") (data (i32.const 268782) "a") (data (i32.const 268785) "a") (data (i32.const 268788) "a") (data (i32.const 268791) "a") (data (i32.const 268794) "a") (data (i32.const 268797) "a") (data (i32.const 268800) "a") (data (i32.const 268803) "a") (data (i32.const 268806) "a") (data (i32.const 268809) "a") (data (i32.const 268812) "a") (data (i32.const 268815) "a") (data (i32.const 268818) "a") (data (i32.const 268821) "a") (data (i32.const 268824) "a") (data (i32.const 268827) "a") (data (i32.const 268830) "a") (data (i32.const 268833) "a") (data (i32.const 268836) "a") (data (i32.const 268839) "a") (data (i32.const 268842) "a") (data (i32.const 268845) "a") (data (i32.const 268848) "a") (data (i32.const 268851) "a") (data (i32.const 268854) "a") (data (i32.const 268857) "a") (data (i32.const 268860) "a") (data (i32.const 268863) "a") (data (i32.const 268866) "a") (data (i32.const 268869) "a") (data (i32.const 268872) "a") (data (i32.const 268875) "a") (data (i32.const 268878) "a") (data (i32.const 268881) "a") (data (i32.const 268884) "a") (data (i32.const 268887) "a") (data (i32.const 268890) "a") (data (i32.const 268893) "a") (data (i32.const 268896) "a") (data (i32.const 268899) "a") (data (i32.const 268902) "a") (data (i32.const 268905) "a") (data (i32.const 268908) "a") (data (i32.const 268911) "a") (data (i32.const 268914) "a") (data (i32.const 268917) "a") (data (i32.const 268920) "a") (data (i32.const 268923) "a") (data (i32.const 268926) "a") (data (i32.const 268929) "a") (data (i32.const 268932) "a") (data (i32.const 268935) "a") (data (i32.const 268938) "a") (data (i32.const 268941) "a") (data (i32.const 268944) "a") (data (i32.const 268947) "a") (data (i32.const 268950) "a") (data (i32.const 268953) "a") (data (i32.const 268956) "a") (data (i32.const 268959) "a") (data (i32.const 268962) "a") (data (i32.const 268965) "a") (data (i32.const 268968) "a") (data (i32.const 268971) "a") (data (i32.const 268974) "a") (data (i32.const 268977) "a") (data (i32.const 268980) "a") (data (i32.const 268983) "a") (data (i32.const 268986) "a") (data (i32.const 268989) "a") (data (i32.const 268992) "a") (data (i32.const 268995) "a") (data (i32.const 268998) "a") (data (i32.const 269001) "a") (data (i32.const 269004) "a") (data (i32.const 269007) "a") (data (i32.const 269010) "a") (data (i32.const 269013) "a") (data (i32.const 269016) "a") (data (i32.const 269019) "a") (data (i32.const 269022) "a") (data (i32.const 269025) "a") (data (i32.const 269028) "a") (data (i32.const 269031) "a") (data (i32.const 269034) "a") (data (i32.const 269037) "a") (data (i32.const 269040) "a") (data (i32.const 269043) "a") (data (i32.const 269046) "a") (data (i32.const 269049) "a") (data (i32.const 269052) "a") (data (i32.const 269055) "a") (data (i32.const 269058) "a") (data (i32.const 269061) "a") (data (i32.const 269064) "a") (data (i32.const 269067) "a") (data (i32.const 269070) "a") (data (i32.const 269073) "a") (data (i32.const 269076) "a") (data (i32.const 269079) "a") (data (i32.const 269082) "a") (data (i32.const 269085) "a") (data (i32.const 269088) "a") (data (i32.const 269091) "a") (data (i32.const 269094) "a") (data (i32.const 269097) "a") (data (i32.const 269100) "a") (data (i32.const 269103) "a") (data (i32.const 269106) "a") (data (i32.const 269109) "a") (data (i32.const 269112) "a") (data (i32.const 269115) "a") (data (i32.const 269118) "a") (data (i32.const 269121) "a") (data (i32.const 269124) "a") (data (i32.const 269127) "a") (data (i32.const 269130) "a") (data (i32.const 269133) "a") (data (i32.const 269136) "a") (data (i32.const 269139) "a") (data (i32.const 269142) "a") (data (i32.const 269145) "a") (data (i32.const 269148) "a") (data (i32.const 269151) "a") (data (i32.const 269154) "a") (data (i32.const 269157) "a") (data (i32.const 269160) "a") (data (i32.const 269163) "a") (data (i32.const 269166) "a") (data (i32.const 269169) "a") (data (i32.const 269172) "a") (data (i32.const 269175) "a") (data (i32.const 269178) "a") (data (i32.const 269181) "a") (data (i32.const 269184) "a") (data (i32.const 269187) "a") (data (i32.const 269190) "a") (data (i32.const 269193) "a") (data (i32.const 269196) "a") (data (i32.const 269199) "a") (data (i32.const 269202) "a") (data (i32.const 269205) "a") (data (i32.const 269208) "a") (data (i32.const 269211) "a") (data (i32.const 269214) "a") (data (i32.const 269217) "a") (data (i32.const 269220) "a") (data (i32.const 269223) "a") (data (i32.const 269226) "a") (data (i32.const 269229) "a") (data (i32.const 269232) "a") (data (i32.const 269235) "a") (data (i32.const 269238) "a") (data (i32.const 269241) "a") (data (i32.const 269244) "a") (data (i32.const 269247) "a") (data (i32.const 269250) "a") (data (i32.const 269253) "a") (data (i32.const 269256) "a") (data (i32.const 269259) "a") (data (i32.const 269262) "a") (data (i32.const 269265) "a") (data (i32.const 269268) "a") (data (i32.const 269271) "a") (data (i32.const 269274) "a") (data (i32.const 269277) "a") (data (i32.const 269280) "a") (data (i32.const 269283) "a") (data (i32.const 269286) "a") (data (i32.const 269289) "a") (data (i32.const 269292) "a") (data (i32.const 269295) "a") (data (i32.const 269298) "a") (data (i32.const 269301) "a") (data (i32.const 269304) "a") (data (i32.const 269307) "a") (data (i32.const 269310) "a") (data (i32.const 269313) "a") (data (i32.const 269316) "a") (data (i32.const 269319) "a") (data (i32.const 269322) "a") (data (i32.const 269325) "a") (data (i32.const 269328) "a") (data (i32.const 269331) "a") (data (i32.const 269334) "a") (data (i32.const 269337) "a") (data (i32.const 269340) "a") (data (i32.const 269343) "a") (data (i32.const 269346) "a") (data (i32.const 269349) "a") (data (i32.const 269352) "a") (data (i32.const 269355) "a") (data (i32.const 269358) "a") (data (i32.const 269361) "a") (data (i32.const 269364) "a") (data (i32.const 269367) "a") (data (i32.const 269370) "a") (data (i32.const 269373) "a") (data (i32.const 269376) "a") (data (i32.const 269379) "a") (data (i32.const 269382) "a") (data (i32.const 269385) "a") (data (i32.const 269388) "a") (data (i32.const 269391) "a") (data (i32.const 269394) "a") (data (i32.const 269397) "a") (data (i32.const 269400) "a") (data (i32.const 269403) "a") (data (i32.const 269406) "a") (data (i32.const 269409) "a") (data (i32.const 269412) "a") (data (i32.const 269415) "a") (data (i32.const 269418) "a") (data (i32.const 269421) "a") (data (i32.const 269424) "a") (data (i32.const 269427) "a") (data (i32.const 269430) "a") (data (i32.const 269433) "a") (data (i32.const 269436) "a") (data (i32.const 269439) "a") (data (i32.const 269442) "a") (data (i32.const 269445) "a") (data (i32.const 269448) "a") (data (i32.const 269451) "a") (data (i32.const 269454) "a") (data (i32.const 269457) "a") (data (i32.const 269460) "a") (data (i32.const 269463) "a") (data (i32.const 269466) "a") (data (i32.const 269469) "a") (data (i32.const 269472) "a") (data (i32.const 269475) "a") (data (i32.const 269478) "a") (data (i32.const 269481) "a") (data (i32.const 269484) "a") (data (i32.const 269487) "a") (data (i32.const 269490) "a") (data (i32.const 269493) "a") (data (i32.const 269496) "a") (data (i32.const 269499) "a") (data (i32.const 269502) "a") (data (i32.const 269505) "a") (data (i32.const 269508) "a") (data (i32.const 269511) "a") (data (i32.const 269514) "a") (data (i32.const 269517) "a") (data (i32.const 269520) "a") (data (i32.const 269523) "a") (data (i32.const 269526) "a") (data (i32.const 269529) "a") (data (i32.const 269532) "a") (data (i32.const 269535) "a") (data (i32.const 269538) "a") (data (i32.const 269541) "a") (data (i32.const 269544) "a") (data (i32.const 269547) "a") (data (i32.const 269550) "a") (data (i32.const 269553) "a") (data (i32.const 269556) "a") (data (i32.const 269559) "a") (data (i32.const 269562) "a") (data (i32.const 269565) "a") (data (i32.const 269568) "a") (data (i32.const 269571) "a") (data (i32.const 269574) "a") (data (i32.const 269577) "a") (data (i32.const 269580) "a") (data (i32.const 269583) "a") (data (i32.const 269586) "a") (data (i32.const 269589) "a") (data (i32.const 269592) "a") (data (i32.const 269595) "a") (data (i32.const 269598) "a") (data (i32.const 269601) "a") (data (i32.const 269604) "a") (data (i32.const 269607) "a") (data (i32.const 269610) "a") (data (i32.const 269613) "a") (data (i32.const 269616) "a") (data (i32.const 269619) "a") (data (i32.const 269622) "a") (data (i32.const 269625) "a") (data (i32.const 269628) "a") (data (i32.const 269631) "a") (data (i32.const 269634) "a") (data (i32.const 269637) "a") (data (i32.const 269640) "a") (data (i32.const 269643) "a") (data (i32.const 269646) "a") (data (i32.const 269649) "a") (data (i32.const 269652) "a") (data (i32.const 269655) "a") (data (i32.const 269658) "a") (data (i32.const 269661) "a") (data (i32.const 269664) "a") (data (i32.const 269667) "a") (data (i32.const 269670) "a") (data (i32.const 269673) "a") (data (i32.const 269676) "a") (data (i32.const 269679) "a") (data (i32.const 269682) "a") (data (i32.const 269685) "a") (data (i32.const 269688) "a") (data (i32.const 269691) "a") (data (i32.const 269694) "a") (data (i32.const 269697) "a") (data (i32.const 269700) "a") (data (i32.const 269703) "a") (data (i32.const 269706) "a") (data (i32.const 269709) "a") (data (i32.const 269712) "a") (data (i32.const 269715) "a") (data (i32.const 269718) "a") (data (i32.const 269721) "a") (data (i32.const 269724) "a") (data (i32.const 269727) "a") (data (i32.const 269730) "a") (data (i32.const 269733) "a") (data (i32.const 269736) "a") (data (i32.const 269739) "a") (data (i32.const 269742) "a") (data (i32.const 269745) "a") (data (i32.const 269748) "a") (data (i32.const 269751) "a") (data (i32.const 269754) "a") (data (i32.const 269757) "a") (data (i32.const 269760) "a") (data (i32.const 269763) "a") (data (i32.const 269766) "a") (data (i32.const 269769) "a") (data (i32.const 269772) "a") (data (i32.const 269775) "a") (data (i32.const 269778) "a") (data (i32.const 269781) "a") (data (i32.const 269784) "a") (data (i32.const 269787) "a") (data (i32.const 269790) "a") (data (i32.const 269793) "a") (data (i32.const 269796) "a") (data (i32.const 269799) "a") (data (i32.const 269802) "a") (data (i32.const 269805) "a") (data (i32.const 269808) "a") (data (i32.const 269811) "a") (data (i32.const 269814) "a") (data (i32.const 269817) "a") (data (i32.const 269820) "a") (data (i32.const 269823) "a") (data (i32.const 269826) "a") (data (i32.const 269829) "a") (data (i32.const 269832) "a") (data (i32.const 269835) "a") (data (i32.const 269838) "a") (data (i32.const 269841) "a") (data (i32.const 269844) "a") (data (i32.const 269847) "a") (data (i32.const 269850) "a") (data (i32.const 269853) "a") (data (i32.const 269856) "a") (data (i32.const 269859) "a") (data (i32.const 269862) "a") (data (i32.const 269865) "a") (data (i32.const 269868) "a") (data (i32.const 269871) "a") (data (i32.const 269874) "a") (data (i32.const 269877) "a") (data (i32.const 269880) "a") (data (i32.const 269883) "a") (data (i32.const 269886) "a") (data (i32.const 269889) "a") (data (i32.const 269892) "a") (data (i32.const 269895) "a") (data (i32.const 269898) "a") (data (i32.const 269901) "a") (data (i32.const 269904) "a") (data (i32.const 269907) "a") (data (i32.const 269910) "a") (data (i32.const 269913) "a") (data (i32.const 269916) "a") (data (i32.const 269919) "a") (data (i32.const 269922) "a") (data (i32.const 269925) "a") (data (i32.const 269928) "a") (data (i32.const 269931) "a") (data (i32.const 269934) "a") (data (i32.const 269937) "a") (data (i32.const 269940) "a") (data (i32.const 269943) "a") (data (i32.const 269946) "a") (data (i32.const 269949) "a") (data (i32.const 269952) "a") (data (i32.const 269955) "a") (data (i32.const 269958) "a") (data (i32.const 269961) "a") (data (i32.const 269964) "a") (data (i32.const 269967) "a") (data (i32.const 269970) "a") (data (i32.const 269973) "a") (data (i32.const 269976) "a") (data (i32.const 269979) "a") (data (i32.const 269982) "a") (data (i32.const 269985) "a") (data (i32.const 269988) "a") (data (i32.const 269991) "a") (data (i32.const 269994) "a") (data (i32.const 269997) "a") (data (i32.const 270000) "a") (data (i32.const 270003) "a") (data (i32.const 270006) "a") (data (i32.const 270009) "a") (data (i32.const 270012) "a") (data (i32.const 270015) "a") (data (i32.const 270018) "a") (data (i32.const 270021) "a") (data (i32.const 270024) "a") (data (i32.const 270027) "a") (data (i32.const 270030) "a") (data (i32.const 270033) "a") (data (i32.const 270036) "a") (data (i32.const 270039) "a") (data (i32.const 270042) "a") (data (i32.const 270045) "a") (data (i32.const 270048) "a") (data (i32.const 270051) "a") (data (i32.const 270054) "a") (data (i32.const 270057) "a") (data (i32.const 270060) "a") (data (i32.const 270063) "a") (data (i32.const 270066) "a") (data (i32.const 270069) "a") (data (i32.const 270072) "a") (data (i32.const 270075) "a") (data (i32.const 270078) "a") (data (i32.const 270081) "a") (data (i32.const 270084) "a") (data (i32.const 270087) "a") (data (i32.const 270090) "a") (data (i32.const 270093) "a") (data (i32.const 270096) "a") (data (i32.const 270099) "a") (data (i32.const 270102) "a") (data (i32.const 270105) "a") (data (i32.const 270108) "a") (data (i32.const 270111) "a") (data (i32.const 270114) "a") (data (i32.const 270117) "a") (data (i32.const 270120) "a") (data (i32.const 270123) "a") (data (i32.const 270126) "a") (data (i32.const 270129) "a") (data (i32.const 270132) "a") (data (i32.const 270135) "a") (data (i32.const 270138) "a") (data (i32.const 270141) "a") (data (i32.const 270144) "a") (data (i32.const 270147) "a") (data (i32.const 270150) "a") (data (i32.const 270153) "a") (data (i32.const 270156) "a") (data (i32.const 270159) "a") (data (i32.const 270162) "a") (data (i32.const 270165) "a") (data (i32.const 270168) "a") (data (i32.const 270171) "a") (data (i32.const 270174) "a") (data (i32.const 270177) "a") (data (i32.const 270180) "a") (data (i32.const 270183) "a") (data (i32.const 270186) "a") (data (i32.const 270189) "a") (data (i32.const 270192) "a") (data (i32.const 270195) "a") (data (i32.const 270198) "a") (data (i32.const 270201) "a") (data (i32.const 270204) "a") (data (i32.const 270207) "a") (data (i32.const 270210) "a") (data (i32.const 270213) "a") (data (i32.const 270216) "a") (data (i32.const 270219) "a") (data (i32.const 270222) "a") (data (i32.const 270225) "a") (data (i32.const 270228) "a") (data (i32.const 270231) "a") (data (i32.const 270234) "a") (data (i32.const 270237) "a") (data (i32.const 270240) "a") (data (i32.const 270243) "a") (data (i32.const 270246) "a") (data (i32.const 270249) "a") (data (i32.const 270252) "a") (data (i32.const 270255) "a") (data (i32.const 270258) "a") (data (i32.const 270261) "a") (data (i32.const 270264) "a") (data (i32.const 270267) "a") (data (i32.const 270270) "a") (data (i32.const 270273) "a") (data (i32.const 270276) "a") (data (i32.const 270279) "a") (data (i32.const 270282) "a") (data (i32.const 270285) "a") (data (i32.const 270288) "a") (data (i32.const 270291) "a") (data (i32.const 270294) "a") (data (i32.const 270297) "a") (data (i32.const 270300) "a") (data (i32.const 270303) "a") (data (i32.const 270306) "a") (data (i32.const 270309) "a") (data (i32.const 270312) "a") (data (i32.const 270315) "a") (data (i32.const 270318) "a") (data (i32.const 270321) "a") (data (i32.const 270324) "a") (data (i32.const 270327) "a") (data (i32.const 270330) "a") (data (i32.const 270333) "a") (data (i32.const 270336) "a") (data (i32.const 270339) "a") (data (i32.const 270342) "a") (data (i32.const 270345) "a") (data (i32.const 270348) "a") (data (i32.const 270351) "a") (data (i32.const 270354) "a") (data (i32.const 270357) "a") (data (i32.const 270360) "a") (data (i32.const 270363) "a") (data (i32.const 270366) "a") (data (i32.const 270369) "a") (data (i32.const 270372) "a") (data (i32.const 270375) "a") (data (i32.const 270378) "a") (data (i32.const 270381) "a") (data (i32.const 270384) "a") (data (i32.const 270387) "a") (data (i32.const 270390) "a") (data (i32.const 270393) "a") (data (i32.const 270396) "a") (data (i32.const 270399) "a") (data (i32.const 270402) "a") (data (i32.const 270405) "a") (data (i32.const 270408) "a") (data (i32.const 270411) "a") (data (i32.const 270414) "a") (data (i32.const 270417) "a") (data (i32.const 270420) "a") (data (i32.const 270423) "a") (data (i32.const 270426) "a") (data (i32.const 270429) "a") (data (i32.const 270432) "a") (data (i32.const 270435) "a") (data (i32.const 270438) "a") (data (i32.const 270441) "a") (data (i32.const 270444) "a") (data (i32.const 270447) "a") (data (i32.const 270450) "a") (data (i32.const 270453) "a") (data (i32.const 270456) "a") (data (i32.const 270459) "a") (data (i32.const 270462) "a") (data (i32.const 270465) "a") (data (i32.const 270468) "a") (data (i32.const 270471) "a") (data (i32.const 270474) "a") (data (i32.const 270477) "a") (data (i32.const 270480) "a") (data (i32.const 270483) "a") (data (i32.const 270486) "a") (data (i32.const 270489) "a") (data (i32.const 270492) "a") (data (i32.const 270495) "a") (data (i32.const 270498) "a") (data (i32.const 270501) "a") (data (i32.const 270504) "a") (data (i32.const 270507) "a") (data (i32.const 270510) "a") (data (i32.const 270513) "a") (data (i32.const 270516) "a") (data (i32.const 270519) "a") (data (i32.const 270522) "a") (data (i32.const 270525) "a") (data (i32.const 270528) "a") (data (i32.const 270531) "a") (data (i32.const 270534) "a") (data (i32.const 270537) "a") (data (i32.const 270540) "a") (data (i32.const 270543) "a") (data (i32.const 270546) "a") (data (i32.const 270549) "a") (data (i32.const 270552) "a") (data (i32.const 270555) "a") (data (i32.const 270558) "a") (data (i32.const 270561) "a") (data (i32.const 270564) "a") (data (i32.const 270567) "a") (data (i32.const 270570) "a") (data (i32.const 270573) "a") (data (i32.const 270576) "a") (data (i32.const 270579) "a") (data (i32.const 270582) "a") (data (i32.const 270585) "a") (data (i32.const 270588) "a") (data (i32.const 270591) "a") (data (i32.const 270594) "a") (data (i32.const 270597) "a") (data (i32.const 270600) "a") (data (i32.const 270603) "a") (data (i32.const 270606) "a") (data (i32.const 270609) "a") (data (i32.const 270612) "a") (data (i32.const 270615) "a") (data (i32.const 270618) "a") (data (i32.const 270621) "a") (data (i32.const 270624) "a") (data (i32.const 270627) "a") (data (i32.const 270630) "a") (data (i32.const 270633) "a") (data (i32.const 270636) "a") (data (i32.const 270639) "a") (data (i32.const 270642) "a") (data (i32.const 270645) "a") (data (i32.const 270648) "a") (data (i32.const 270651) "a") (data (i32.const 270654) "a") (data (i32.const 270657) "a") (data (i32.const 270660) "a") (data (i32.const 270663) "a") (data (i32.const 270666) "a") (data (i32.const 270669) "a") (data (i32.const 270672) "a") (data (i32.const 270675) "a") (data (i32.const 270678) "a") (data (i32.const 270681) "a") (data (i32.const 270684) "a") (data (i32.const 270687) "a") (data (i32.const 270690) "a") (data (i32.const 270693) "a") (data (i32.const 270696) "a") (data (i32.const 270699) "a") (data (i32.const 270702) "a") (data (i32.const 270705) "a") (data (i32.const 270708) "a") (data (i32.const 270711) "a") (data (i32.const 270714) "a") (data (i32.const 270717) "a") (data (i32.const 270720) "a") (data (i32.const 270723) "a") (data (i32.const 270726) "a") (data (i32.const 270729) "a") (data (i32.const 270732) "a") (data (i32.const 270735) "a") (data (i32.const 270738) "a") (data (i32.const 270741) "a") (data (i32.const 270744) "a") (data (i32.const 270747) "a") (data (i32.const 270750) "a") (data (i32.const 270753) "a") (data (i32.const 270756) "a") (data (i32.const 270759) "a") (data (i32.const 270762) "a") (data (i32.const 270765) "a") (data (i32.const 270768) "a") (data (i32.const 270771) "a") (data (i32.const 270774) "a") (data (i32.const 270777) "a") (data (i32.const 270780) "a") (data (i32.const 270783) "a") (data (i32.const 270786) "a") (data (i32.const 270789) "a") (data (i32.const 270792) "a") (data (i32.const 270795) "a") (data (i32.const 270798) "a") (data (i32.const 270801) "a") (data (i32.const 270804) "a") (data (i32.const 270807) "a") (data (i32.const 270810) "a") (data (i32.const 270813) "a") (data (i32.const 270816) "a") (data (i32.const 270819) "a") (data (i32.const 270822) "a") (data (i32.const 270825) "a") (data (i32.const 270828) "a") (data (i32.const 270831) "a") (data (i32.const 270834) "a") (data (i32.const 270837) "a") (data (i32.const 270840) "a") (data (i32.const 270843) "a") (data (i32.const 270846) "a") (data (i32.const 270849) "a") (data (i32.const 270852) "a") (data (i32.const 270855) "a") (data (i32.const 270858) "a") (data (i32.const 270861) "a") (data (i32.const 270864) "a") (data (i32.const 270867) "a") (data (i32.const 270870) "a") (data (i32.const 270873) "a") (data (i32.const 270876) "a") (data (i32.const 270879) "a") (data (i32.const 270882) "a") (data (i32.const 270885) "a") (data (i32.const 270888) "a") (data (i32.const 270891) "a") (data (i32.const 270894) "a") (data (i32.const 270897) "a") (data (i32.const 270900) "a") (data (i32.const 270903) "a") (data (i32.const 270906) "a") (data (i32.const 270909) "a") (data (i32.const 270912) "a") (data (i32.const 270915) "a") (data (i32.const 270918) "a") (data (i32.const 270921) "a") (data (i32.const 270924) "a") (data (i32.const 270927) "a") (data (i32.const 270930) "a") (data (i32.const 270933) "a") (data (i32.const 270936) "a") (data (i32.const 270939) "a") (data (i32.const 270942) "a") (data (i32.const 270945) "a") (data (i32.const 270948) "a") (data (i32.const 270951) "a") (data (i32.const 270954) "a") (data (i32.const 270957) "a") (data (i32.const 270960) "a") (data (i32.const 270963) "a") (data (i32.const 270966) "a") (data (i32.const 270969) "a") (data (i32.const 270972) "a") (data (i32.const 270975) "a") (data (i32.const 270978) "a") (data (i32.const 270981) "a") (data (i32.const 270984) "a") (data (i32.const 270987) "a") (data (i32.const 270990) "a") (data (i32.const 270993) "a") (data (i32.const 270996) "a") (data (i32.const 270999) "a") (data (i32.const 271002) "a") (data (i32.const 271005) "a") (data (i32.const 271008) "a") (data (i32.const 271011) "a") (data (i32.const 271014) "a") (data (i32.const 271017) "a") (data (i32.const 271020) "a") (data (i32.const 271023) "a") (data (i32.const 271026) "a") (data (i32.const 271029) "a") (data (i32.const 271032) "a") (data (i32.const 271035) "a") (data (i32.const 271038) "a") (data (i32.const 271041) "a") (data (i32.const 271044) "a") (data (i32.const 271047) "a") (data (i32.const 271050) "a") (data (i32.const 271053) "a") (data (i32.const 271056) "a") (data (i32.const 271059) "a") (data (i32.const 271062) "a") (data (i32.const 271065) "a") (data (i32.const 271068) "a") (data (i32.const 271071) "a") (data (i32.const 271074) "a") (data (i32.const 271077) "a") (data (i32.const 271080) "a") (data (i32.const 271083) "a") (data (i32.const 271086) "a") (data (i32.const 271089) "a") (data (i32.const 271092) "a") (data (i32.const 271095) "a") (data (i32.const 271098) "a") (data (i32.const 271101) "a") (data (i32.const 271104) "a") (data (i32.const 271107) "a") (data (i32.const 271110) "a") (data (i32.const 271113) "a") (data (i32.const 271116) "a") (data (i32.const 271119) "a") (data (i32.const 271122) "a") (data (i32.const 271125) "a") (data (i32.const 271128) "a") (data (i32.const 271131) "a") (data (i32.const 271134) "a") (data (i32.const 271137) "a") (data (i32.const 271140) "a") (data (i32.const 271143) "a") (data (i32.const 271146) "a") (data (i32.const 271149) "a") (data (i32.const 271152) "a") (data (i32.const 271155) "a") (data (i32.const 271158) "a") (data (i32.const 271161) "a") (data (i32.const 271164) "a") (data (i32.const 271167) "a") (data (i32.const 271170) "a") (data (i32.const 271173) "a") (data (i32.const 271176) "a") (data (i32.const 271179) "a") (data (i32.const 271182) "a") (data (i32.const 271185) "a") (data (i32.const 271188) "a") (data (i32.const 271191) "a") (data (i32.const 271194) "a") (data (i32.const 271197) "a") (data (i32.const 271200) "a") (data (i32.const 271203) "a") (data (i32.const 271206) "a") (data (i32.const 271209) "a") (data (i32.const 271212) "a") (data (i32.const 271215) "a") (data (i32.const 271218) "a") (data (i32.const 271221) "a") (data (i32.const 271224) "a") (data (i32.const 271227) "a") (data (i32.const 271230) "a") (data (i32.const 271233) "a") (data (i32.const 271236) "a") (data (i32.const 271239) "a") (data (i32.const 271242) "a") (data (i32.const 271245) "a") (data (i32.const 271248) "a") (data (i32.const 271251) "a") (data (i32.const 271254) "a") (data (i32.const 271257) "a") (data (i32.const 271260) "a") (data (i32.const 271263) "a") (data (i32.const 271266) "a") (data (i32.const 271269) "a") (data (i32.const 271272) "a") (data (i32.const 271275) "a") (data (i32.const 271278) "a") (data (i32.const 271281) "a") (data (i32.const 271284) "a") (data (i32.const 271287) "a") (data (i32.const 271290) "a") (data (i32.const 271293) "a") (data (i32.const 271296) "a") (data (i32.const 271299) "a") (data (i32.const 271302) "a") (data (i32.const 271305) "a") (data (i32.const 271308) "a") (data (i32.const 271311) "a") (data (i32.const 271314) "a") (data (i32.const 271317) "a") (data (i32.const 271320) "a") (data (i32.const 271323) "a") (data (i32.const 271326) "a") (data (i32.const 271329) "a") (data (i32.const 271332) "a") (data (i32.const 271335) "a") (data (i32.const 271338) "a") (data (i32.const 271341) "a") (data (i32.const 271344) "a") (data (i32.const 271347) "a") (data (i32.const 271350) "a") (data (i32.const 271353) "a") (data (i32.const 271356) "a") (data (i32.const 271359) "a") (data (i32.const 271362) "a") (data (i32.const 271365) "a") (data (i32.const 271368) "a") (data (i32.const 271371) "a") (data (i32.const 271374) "a") (data (i32.const 271377) "a") (data (i32.const 271380) "a") (data (i32.const 271383) "a") (data (i32.const 271386) "a") (data (i32.const 271389) "a") (data (i32.const 271392) "a") (data (i32.const 271395) "a") (data (i32.const 271398) "a") (data (i32.const 271401) "a") (data (i32.const 271404) "a") (data (i32.const 271407) "a") (data (i32.const 271410) "a") (data (i32.const 271413) "a") (data (i32.const 271416) "a") (data (i32.const 271419) "a") (data (i32.const 271422) "a") (data (i32.const 271425) "a") (data (i32.const 271428) "a") (data (i32.const 271431) "a") (data (i32.const 271434) "a") (data (i32.const 271437) "a") (data (i32.const 271440) "a") (data (i32.const 271443) "a") (data (i32.const 271446) "a") (data (i32.const 271449) "a") (data (i32.const 271452) "a") (data (i32.const 271455) "a") (data (i32.const 271458) "a") (data (i32.const 271461) "a") (data (i32.const 271464) "a") (data (i32.const 271467) "a") (data (i32.const 271470) "a") (data (i32.const 271473) "a") (data (i32.const 271476) "a") (data (i32.const 271479) "a") (data (i32.const 271482) "a") (data (i32.const 271485) "a") (data (i32.const 271488) "a") (data (i32.const 271491) "a") (data (i32.const 271494) "a") (data (i32.const 271497) "a") (data (i32.const 271500) "a") (data (i32.const 271503) "a") (data (i32.const 271506) "a") (data (i32.const 271509) "a") (data (i32.const 271512) "a") (data (i32.const 271515) "a") (data (i32.const 271518) "a") (data (i32.const 271521) "a") (data (i32.const 271524) "a") (data (i32.const 271527) "a") (data (i32.const 271530) "a") (data (i32.const 271533) "a") (data (i32.const 271536) "a") (data (i32.const 271539) "a") (data (i32.const 271542) "a") (data (i32.const 271545) "a") (data (i32.const 271548) "a") (data (i32.const 271551) "a") (data (i32.const 271554) "a") (data (i32.const 271557) "a") (data (i32.const 271560) "a") (data (i32.const 271563) "a") (data (i32.const 271566) "a") (data (i32.const 271569) "a") (data (i32.const 271572) "a") (data (i32.const 271575) "a") (data (i32.const 271578) "a") (data (i32.const 271581) "a") (data (i32.const 271584) "a") (data (i32.const 271587) "a") (data (i32.const 271590) "a") (data (i32.const 271593) "a") (data (i32.const 271596) "a") (data (i32.const 271599) "a") (data (i32.const 271602) "a") (data (i32.const 271605) "a") (data (i32.const 271608) "a") (data (i32.const 271611) "a") (data (i32.const 271614) "a") (data (i32.const 271617) "a") (data (i32.const 271620) "a") (data (i32.const 271623) "a") (data (i32.const 271626) "a") (data (i32.const 271629) "a") (data (i32.const 271632) "a") (data (i32.const 271635) "a") (data (i32.const 271638) "a") (data (i32.const 271641) "a") (data (i32.const 271644) "a") (data (i32.const 271647) "a") (data (i32.const 271650) "a") (data (i32.const 271653) "a") (data (i32.const 271656) "a") (data (i32.const 271659) "a") (data (i32.const 271662) "a") (data (i32.const 271665) "a") (data (i32.const 271668) "a") (data (i32.const 271671) "a") (data (i32.const 271674) "a") (data (i32.const 271677) "a") (data (i32.const 271680) "a") (data (i32.const 271683) "a") (data (i32.const 271686) "a") (data (i32.const 271689) "a") (data (i32.const 271692) "a") (data (i32.const 271695) "a") (data (i32.const 271698) "a") (data (i32.const 271701) "a") (data (i32.const 271704) "a") (data (i32.const 271707) "a") (data (i32.const 271710) "a") (data (i32.const 271713) "a") (data (i32.const 271716) "a") (data (i32.const 271719) "a") (data (i32.const 271722) "a") (data (i32.const 271725) "a") (data (i32.const 271728) "a") (data (i32.const 271731) "a") (data (i32.const 271734) "a") (data (i32.const 271737) "a") (data (i32.const 271740) "a") (data (i32.const 271743) "a") (data (i32.const 271746) "a") (data (i32.const 271749) "a") (data (i32.const 271752) "a") (data (i32.const 271755) "a") (data (i32.const 271758) "a") (data (i32.const 271761) "a") (data (i32.const 271764) "a") (data (i32.const 271767) "a") (data (i32.const 271770) "a") (data (i32.const 271773) "a") (data (i32.const 271776) "a") (data (i32.const 271779) "a") (data (i32.const 271782) "a") (data (i32.const 271785) "a") (data (i32.const 271788) "a") (data (i32.const 271791) "a") (data (i32.const 271794) "a") (data (i32.const 271797) "a") (data (i32.const 271800) "a") (data (i32.const 271803) "a") (data (i32.const 271806) "a") (data (i32.const 271809) "a") (data (i32.const 271812) "a") (data (i32.const 271815) "a") (data (i32.const 271818) "a") (data (i32.const 271821) "a") (data (i32.const 271824) "a") (data (i32.const 271827) "a") (data (i32.const 271830) "a") (data (i32.const 271833) "a") (data (i32.const 271836) "a") (data (i32.const 271839) "a") (data (i32.const 271842) "a") (data (i32.const 271845) "a") (data (i32.const 271848) "a") (data (i32.const 271851) "a") (data (i32.const 271854) "a") (data (i32.const 271857) "a") (data (i32.const 271860) "a") (data (i32.const 271863) "a") (data (i32.const 271866) "a") (data (i32.const 271869) "a") (data (i32.const 271872) "a") (data (i32.const 271875) "a") (data (i32.const 271878) "a") (data (i32.const 271881) "a") (data (i32.const 271884) "a") (data (i32.const 271887) "a") (data (i32.const 271890) "a") (data (i32.const 271893) "a") (data (i32.const 271896) "a") (data (i32.const 271899) "a") (data (i32.const 271902) "a") (data (i32.const 271905) "a") (data (i32.const 271908) "a") (data (i32.const 271911) "a") (data (i32.const 271914) "a") (data (i32.const 271917) "a") (data (i32.const 271920) "a") (data (i32.const 271923) "a") (data (i32.const 271926) "a") (data (i32.const 271929) "a") (data (i32.const 271932) "a") (data (i32.const 271935) "a") (data (i32.const 271938) "a") (data (i32.const 271941) "a") (data (i32.const 271944) "a") (data (i32.const 271947) "a") (data (i32.const 271950) "a") (data (i32.const 271953) "a") (data (i32.const 271956) "a") (data (i32.const 271959) "a") (data (i32.const 271962) "a") (data (i32.const 271965) "a") (data (i32.const 271968) "a") (data (i32.const 271971) "a") (data (i32.const 271974) "a") (data (i32.const 271977) "a") (data (i32.const 271980) "a") (data (i32.const 271983) "a") (data (i32.const 271986) "a") (data (i32.const 271989) "a") (data (i32.const 271992) "a") (data (i32.const 271995) "a") (data (i32.const 271998) "a") (data (i32.const 272001) "a") (data (i32.const 272004) "a") (data (i32.const 272007) "a") (data (i32.const 272010) "a") (data (i32.const 272013) "a") (data (i32.const 272016) "a") (data (i32.const 272019) "a") (data (i32.const 272022) "a") (data (i32.const 272025) "a") (data (i32.const 272028) "a") (data (i32.const 272031) "a") (data (i32.const 272034) "a") (data (i32.const 272037) "a") (data (i32.const 272040) "a") (data (i32.const 272043) "a") (data (i32.const 272046) "a") (data (i32.const 272049) "a") (data (i32.const 272052) "a") (data (i32.const 272055) "a") (data (i32.const 272058) "a") (data (i32.const 272061) "a") (data (i32.const 272064) "a") (data (i32.const 272067) "a") (data (i32.const 272070) "a") (data (i32.const 272073) "a") (data (i32.const 272076) "a") (data (i32.const 272079) "a") (data (i32.const 272082) "a") (data (i32.const 272085) "a") (data (i32.const 272088) "a") (data (i32.const 272091) "a") (data (i32.const 272094) "a") (data (i32.const 272097) "a") (data (i32.const 272100) "a") (data (i32.const 272103) "a") (data (i32.const 272106) "a") (data (i32.const 272109) "a") (data (i32.const 272112) "a") (data (i32.const 272115) "a") (data (i32.const 272118) "a") (data (i32.const 272121) "a") (data (i32.const 272124) "a") (data (i32.const 272127) "a") (data (i32.const 272130) "a") (data (i32.const 272133) "a") (data (i32.const 272136) "a") (data (i32.const 272139) "a") (data (i32.const 272142) "a") (data (i32.const 272145) "a") (data (i32.const 272148) "a") (data (i32.const 272151) "a") (data (i32.const 272154) "a") (data (i32.const 272157) "a") (data (i32.const 272160) "a") (data (i32.const 272163) "a") (data (i32.const 272166) "a") (data (i32.const 272169) "a") (data (i32.const 272172) "a") (data (i32.const 272175) "a") (data (i32.const 272178) "a") (data (i32.const 272181) "a") (data (i32.const 272184) "a") (data (i32.const 272187) "a") (data (i32.const 272190) "a") (data (i32.const 272193) "a") (data (i32.const 272196) "a") (data (i32.const 272199) "a") (data (i32.const 272202) "a") (data (i32.const 272205) "a") (data (i32.const 272208) "a") (data (i32.const 272211) "a") (data (i32.const 272214) "a") (data (i32.const 272217) "a") (data (i32.const 272220) "a") (data (i32.const 272223) "a") (data (i32.const 272226) "a") (data (i32.const 272229) "a") (data (i32.const 272232) "a") (data (i32.const 272235) "a") (data (i32.const 272238) "a") (data (i32.const 272241) "a") (data (i32.const 272244) "a") (data (i32.const 272247) "a") (data (i32.const 272250) "a") (data (i32.const 272253) "a") (data (i32.const 272256) "a") (data (i32.const 272259) "a") (data (i32.const 272262) "a") (data (i32.const 272265) "a") (data (i32.const 272268) "a") (data (i32.const 272271) "a") (data (i32.const 272274) "a") (data (i32.const 272277) "a") (data (i32.const 272280) "a") (data (i32.const 272283) "a") (data (i32.const 272286) "a") (data (i32.const 272289) "a") (data (i32.const 272292) "a") (data (i32.const 272295) "a") (data (i32.const 272298) "a") (data (i32.const 272301) "a") (data (i32.const 272304) "a") (data (i32.const 272307) "a") (data (i32.const 272310) "a") (data (i32.const 272313) "a") (data (i32.const 272316) "a") (data (i32.const 272319) "a") (data (i32.const 272322) "a") (data (i32.const 272325) "a") (data (i32.const 272328) "a") (data (i32.const 272331) "a") (data (i32.const 272334) "a") (data (i32.const 272337) "a") (data (i32.const 272340) "a") (data (i32.const 272343) "a") (data (i32.const 272346) "a") (data (i32.const 272349) "a") (data (i32.const 272352) "a") (data (i32.const 272355) "a") (data (i32.const 272358) "a") (data (i32.const 272361) "a") (data (i32.const 272364) "a") (data (i32.const 272367) "a") (data (i32.const 272370) "a") (data (i32.const 272373) "a") (data (i32.const 272376) "a") (data (i32.const 272379) "a") (data (i32.const 272382) "a") (data (i32.const 272385) "a") (data (i32.const 272388) "a") (data (i32.const 272391) "a") (data (i32.const 272394) "a") (data (i32.const 272397) "a") (data (i32.const 272400) "a") (data (i32.const 272403) "a") (data (i32.const 272406) "a") (data (i32.const 272409) "a") (data (i32.const 272412) "a") (data (i32.const 272415) "a") (data (i32.const 272418) "a") (data (i32.const 272421) "a") (data (i32.const 272424) "a") (data (i32.const 272427) "a") (data (i32.const 272430) "a") (data (i32.const 272433) "a") (data (i32.const 272436) "a") (data (i32.const 272439) "a") (data (i32.const 272442) "a") (data (i32.const 272445) "a") (data (i32.const 272448) "a") (data (i32.const 272451) "a") (data (i32.const 272454) "a") (data (i32.const 272457) "a") (data (i32.const 272460) "a") (data (i32.const 272463) "a") (data (i32.const 272466) "a") (data (i32.const 272469) "a") (data (i32.const 272472) "a") (data (i32.const 272475) "a") (data (i32.const 272478) "a") (data (i32.const 272481) "a") (data (i32.const 272484) "a") (data (i32.const 272487) "a") (data (i32.const 272490) "a") (data (i32.const 272493) "a") (data (i32.const 272496) "a") (data (i32.const 272499) "a") (data (i32.const 272502) "a") (data (i32.const 272505) "a") (data (i32.const 272508) "a") (data (i32.const 272511) "a") (data (i32.const 272514) "a") (data (i32.const 272517) "a") (data (i32.const 272520) "a") (data (i32.const 272523) "a") (data (i32.const 272526) "a") (data (i32.const 272529) "a") (data (i32.const 272532) "a") (data (i32.const 272535) "a") (data (i32.const 272538) "a") (data (i32.const 272541) "a") (data (i32.const 272544) "a") (data (i32.const 272547) "a") (data (i32.const 272550) "a") (data (i32.const 272553) "a") (data (i32.const 272556) "a") (data (i32.const 272559) "a") (data (i32.const 272562) "a") (data (i32.const 272565) "a") (data (i32.const 272568) "a") (data (i32.const 272571) "a") (data (i32.const 272574) "a") (data (i32.const 272577) "a") (data (i32.const 272580) "a") (data (i32.const 272583) "a") (data (i32.const 272586) "a") (data (i32.const 272589) "a") (data (i32.const 272592) "a") (data (i32.const 272595) "a") (data (i32.const 272598) "a") (data (i32.const 272601) "a") (data (i32.const 272604) "a") (data (i32.const 272607) "a") (data (i32.const 272610) "a") (data (i32.const 272613) "a") (data (i32.const 272616) "a") (data (i32.const 272619) "a") (data (i32.const 272622) "a") (data (i32.const 272625) "a") (data (i32.const 272628) "a") (data (i32.const 272631) "a") (data (i32.const 272634) "a") (data (i32.const 272637) "a") (data (i32.const 272640) "a") (data (i32.const 272643) "a") (data (i32.const 272646) "a") (data (i32.const 272649) "a") (data (i32.const 272652) "a") (data (i32.const 272655) "a") (data (i32.const 272658) "a") (data (i32.const 272661) "a") (data (i32.const 272664) "a") (data (i32.const 272667) "a") (data (i32.const 272670) "a") (data (i32.const 272673) "a") (data (i32.const 272676) "a") (data (i32.const 272679) "a") (data (i32.const 272682) "a") (data (i32.const 272685) "a") (data (i32.const 272688) "a") (data (i32.const 272691) "a") (data (i32.const 272694) "a") (data (i32.const 272697) "a") (data (i32.const 272700) "a") (data (i32.const 272703) "a") (data (i32.const 272706) "a") (data (i32.const 272709) "a") (data (i32.const 272712) "a") (data (i32.const 272715) "a") (data (i32.const 272718) "a") (data (i32.const 272721) "a") (data (i32.const 272724) "a") (data (i32.const 272727) "a") (data (i32.const 272730) "a") (data (i32.const 272733) "a") (data (i32.const 272736) "a") (data (i32.const 272739) "a") (data (i32.const 272742) "a") (data (i32.const 272745) "a") (data (i32.const 272748) "a") (data (i32.const 272751) "a") (data (i32.const 272754) "a") (data (i32.const 272757) "a") (data (i32.const 272760) "a") (data (i32.const 272763) "a") (data (i32.const 272766) "a") (data (i32.const 272769) "a") (data (i32.const 272772) "a") (data (i32.const 272775) "a") (data (i32.const 272778) "a") (data (i32.const 272781) "a") (data (i32.const 272784) "a") (data (i32.const 272787) "a") (data (i32.const 272790) "a") (data (i32.const 272793) "a") (data (i32.const 272796) "a") (data (i32.const 272799) "a") (data (i32.const 272802) "a") (data (i32.const 272805) "a") (data (i32.const 272808) "a") (data (i32.const 272811) "a") (data (i32.const 272814) "a") (data (i32.const 272817) "a") (data (i32.const 272820) "a") (data (i32.const 272823) "a") (data (i32.const 272826) "a") (data (i32.const 272829) "a") (data (i32.const 272832) "a") (data (i32.const 272835) "a") (data (i32.const 272838) "a") (data (i32.const 272841) "a") (data (i32.const 272844) "a") (data (i32.const 272847) "a") (data (i32.const 272850) "a") (data (i32.const 272853) "a") (data (i32.const 272856) "a") (data (i32.const 272859) "a") (data (i32.const 272862) "a") (data (i32.const 272865) "a") (data (i32.const 272868) "a") (data (i32.const 272871) "a") (data (i32.const 272874) "a") (data (i32.const 272877) "a") (data (i32.const 272880) "a") (data (i32.const 272883) "a") (data (i32.const 272886) "a") (data (i32.const 272889) "a") (data (i32.const 272892) "a") (data (i32.const 272895) "a") (data (i32.const 272898) "a") (data (i32.const 272901) "a") (data (i32.const 272904) "a") (data (i32.const 272907) "a") (data (i32.const 272910) "a") (data (i32.const 272913) "a") (data (i32.const 272916) "a") (data (i32.const 272919) "a") (data (i32.const 272922) "a") (data (i32.const 272925) "a") (data (i32.const 272928) "a") (data (i32.const 272931) "a") (data (i32.const 272934) "a") (data (i32.const 272937) "a") (data (i32.const 272940) "a") (data (i32.const 272943) "a") (data (i32.const 272946) "a") (data (i32.const 272949) "a") (data (i32.const 272952) "a") (data (i32.const 272955) "a") (data (i32.const 272958) "a") (data (i32.const 272961) "a") (data (i32.const 272964) "a") (data (i32.const 272967) "a") (data (i32.const 272970) "a") (data (i32.const 272973) "a") (data (i32.const 272976) "a") (data (i32.const 272979) "a") (data (i32.const 272982) "a") (data (i32.const 272985) "a") (data (i32.const 272988) "a") (data (i32.const 272991) "a") (data (i32.const 272994) "a") (data (i32.const 272997) "a") (data (i32.const 273000) "a") (data (i32.const 273003) "a") (data (i32.const 273006) "a") (data (i32.const 273009) "a") (data (i32.const 273012) "a") (data (i32.const 273015) "a") (data (i32.const 273018) "a") (data (i32.const 273021) "a") (data (i32.const 273024) "a") (data (i32.const 273027) "a") (data (i32.const 273030) "a") (data (i32.const 273033) "a") (data (i32.const 273036) "a") (data (i32.const 273039) "a") (data (i32.const 273042) "a") (data (i32.const 273045) "a") (data (i32.const 273048) "a") (data (i32.const 273051) "a") (data (i32.const 273054) "a") (data (i32.const 273057) "a") (data (i32.const 273060) "a") (data (i32.const 273063) "a") (data (i32.const 273066) "a") (data (i32.const 273069) "a") (data (i32.const 273072) "a") (data (i32.const 273075) "a") (data (i32.const 273078) "a") (data (i32.const 273081) "a") (data (i32.const 273084) "a") (data (i32.const 273087) "a") (data (i32.const 273090) "a") (data (i32.const 273093) "a") (data (i32.const 273096) "a") (data (i32.const 273099) "a") (data (i32.const 273102) "a") (data (i32.const 273105) "a") (data (i32.const 273108) "a") (data (i32.const 273111) "a") (data (i32.const 273114) "a") (data (i32.const 273117) "a") (data (i32.const 273120) "a") (data (i32.const 273123) "a") (data (i32.const 273126) "a") (data (i32.const 273129) "a") (data (i32.const 273132) "a") (data (i32.const 273135) "a") (data (i32.const 273138) "a") (data (i32.const 273141) "a") (data (i32.const 273144) "a") (data (i32.const 273147) "a") (data (i32.const 273150) "a") (data (i32.const 273153) "a") (data (i32.const 273156) "a") (data (i32.const 273159) "a") (data (i32.const 273162) "a") (data (i32.const 273165) "a") (data (i32.const 273168) "a") (data (i32.const 273171) "a") (data (i32.const 273174) "a") (data (i32.const 273177) "a") (data (i32.const 273180) "a") (data (i32.const 273183) "a") (data (i32.const 273186) "a") (data (i32.const 273189) "a") (data (i32.const 273192) "a") (data (i32.const 273195) "a") (data (i32.const 273198) "a") (data (i32.const 273201) "a") (data (i32.const 273204) "a") (data (i32.const 273207) "a") (data (i32.const 273210) "a") (data (i32.const 273213) "a") (data (i32.const 273216) "a") (data (i32.const 273219) "a") (data (i32.const 273222) "a") (data (i32.const 273225) "a") (data (i32.const 273228) "a") (data (i32.const 273231) "a") (data (i32.const 273234) "a") (data (i32.const 273237) "a") (data (i32.const 273240) "a") (data (i32.const 273243) "a") (data (i32.const 273246) "a") (data (i32.const 273249) "a") (data (i32.const 273252) "a") (data (i32.const 273255) "a") (data (i32.const 273258) "a") (data (i32.const 273261) "a") (data (i32.const 273264) "a") (data (i32.const 273267) "a") (data (i32.const 273270) "a") (data (i32.const 273273) "a") (data (i32.const 273276) "a") (data (i32.const 273279) "a") (data (i32.const 273282) "a") (data (i32.const 273285) "a") (data (i32.const 273288) "a") (data (i32.const 273291) "a") (data (i32.const 273294) "a") (data (i32.const 273297) "a") (data (i32.const 273300) "a") (data (i32.const 273303) "a") (data (i32.const 273306) "a") (data (i32.const 273309) "a") (data (i32.const 273312) "a") (data (i32.const 273315) "a") (data (i32.const 273318) "a") (data (i32.const 273321) "a") (data (i32.const 273324) "a") (data (i32.const 273327) "a") (data (i32.const 273330) "a") (data (i32.const 273333) "a") (data (i32.const 273336) "a") (data (i32.const 273339) "a") (data (i32.const 273342) "a") (data (i32.const 273345) "a") (data (i32.const 273348) "a") (data (i32.const 273351) "a") (data (i32.const 273354) "a") (data (i32.const 273357) "a") (data (i32.const 273360) "a") (data (i32.const 273363) "a") (data (i32.const 273366) "a") (data (i32.const 273369) "a") (data (i32.const 273372) "a") (data (i32.const 273375) "a") (data (i32.const 273378) "a") (data (i32.const 273381) "a") (data (i32.const 273384) "a") (data (i32.const 273387) "a") (data (i32.const 273390) "a") (data (i32.const 273393) "a") (data (i32.const 273396) "a") (data (i32.const 273399) "a") (data (i32.const 273402) "a") (data (i32.const 273405) "a") (data (i32.const 273408) "a") (data (i32.const 273411) "a") (data (i32.const 273414) "a") (data (i32.const 273417) "a") (data (i32.const 273420) "a") (data (i32.const 273423) "a") (data (i32.const 273426) "a") (data (i32.const 273429) "a") (data (i32.const 273432) "a") (data (i32.const 273435) "a") (data (i32.const 273438) "a") (data (i32.const 273441) "a") (data (i32.const 273444) "a") (data (i32.const 273447) "a") (data (i32.const 273450) "a") (data (i32.const 273453) "a") (data (i32.const 273456) "a") (data (i32.const 273459) "a") (data (i32.const 273462) "a") (data (i32.const 273465) "a") (data (i32.const 273468) "a") (data (i32.const 273471) "a") (data (i32.const 273474) "a") (data (i32.const 273477) "a") (data (i32.const 273480) "a") (data (i32.const 273483) "a") (data (i32.const 273486) "a") (data (i32.const 273489) "a") (data (i32.const 273492) "a") (data (i32.const 273495) "a") (data (i32.const 273498) "a") (data (i32.const 273501) "a") (data (i32.const 273504) "a") (data (i32.const 273507) "a") (data (i32.const 273510) "a") (data (i32.const 273513) "a") (data (i32.const 273516) "a") (data (i32.const 273519) "a") (data (i32.const 273522) "a") (data (i32.const 273525) "a") (data (i32.const 273528) "a") (data (i32.const 273531) "a") (data (i32.const 273534) "a") (data (i32.const 273537) "a") (data (i32.const 273540) "a") (data (i32.const 273543) "a") (data (i32.const 273546) "a") (data (i32.const 273549) "a") (data (i32.const 273552) "a") (data (i32.const 273555) "a") (data (i32.const 273558) "a") (data (i32.const 273561) "a") (data (i32.const 273564) "a") (data (i32.const 273567) "a") (data (i32.const 273570) "a") (data (i32.const 273573) "a") (data (i32.const 273576) "a") (data (i32.const 273579) "a") (data (i32.const 273582) "a") (data (i32.const 273585) "a") (data (i32.const 273588) "a") (data (i32.const 273591) "a") (data (i32.const 273594) "a") (data (i32.const 273597) "a") (data (i32.const 273600) "a") (data (i32.const 273603) "a") (data (i32.const 273606) "a") (data (i32.const 273609) "a") (data (i32.const 273612) "a") (data (i32.const 273615) "a") (data (i32.const 273618) "a") (data (i32.const 273621) "a") (data (i32.const 273624) "a") (data (i32.const 273627) "a") (data (i32.const 273630) "a") (data (i32.const 273633) "a") (data (i32.const 273636) "a") (data (i32.const 273639) "a") (data (i32.const 273642) "a") (data (i32.const 273645) "a") (data (i32.const 273648) "a") (data (i32.const 273651) "a") (data (i32.const 273654) "a") (data (i32.const 273657) "a") (data (i32.const 273660) "a") (data (i32.const 273663) "a") (data (i32.const 273666) "a") (data (i32.const 273669) "a") (data (i32.const 273672) "a") (data (i32.const 273675) "a") (data (i32.const 273678) "a") (data (i32.const 273681) "a") (data (i32.const 273684) "a") (data (i32.const 273687) "a") (data (i32.const 273690) "a") (data (i32.const 273693) "a") (data (i32.const 273696) "a") (data (i32.const 273699) "a") (data (i32.const 273702) "a") (data (i32.const 273705) "a") (data (i32.const 273708) "a") (data (i32.const 273711) "a") (data (i32.const 273714) "a") (data (i32.const 273717) "a") (data (i32.const 273720) "a") (data (i32.const 273723) "a") (data (i32.const 273726) "a") (data (i32.const 273729) "a") (data (i32.const 273732) "a") (data (i32.const 273735) "a") (data (i32.const 273738) "a") (data (i32.const 273741) "a") (data (i32.const 273744) "a") (data (i32.const 273747) "a") (data (i32.const 273750) "a") (data (i32.const 273753) "a") (data (i32.const 273756) "a") (data (i32.const 273759) "a") (data (i32.const 273762) "a") (data (i32.const 273765) "a") (data (i32.const 273768) "a") (data (i32.const 273771) "a") (data (i32.const 273774) "a") (data (i32.const 273777) "a") (data (i32.const 273780) "a") (data (i32.const 273783) "a") (data (i32.const 273786) "a") (data (i32.const 273789) "a") (data (i32.const 273792) "a") (data (i32.const 273795) "a") (data (i32.const 273798) "a") (data (i32.const 273801) "a") (data (i32.const 273804) "a") (data (i32.const 273807) "a") (data (i32.const 273810) "a") (data (i32.const 273813) "a") (data (i32.const 273816) "a") (data (i32.const 273819) "a") (data (i32.const 273822) "a") (data (i32.const 273825) "a") (data (i32.const 273828) "a") (data (i32.const 273831) "a") (data (i32.const 273834) "a") (data (i32.const 273837) "a") (data (i32.const 273840) "a") (data (i32.const 273843) "a") (data (i32.const 273846) "a") (data (i32.const 273849) "a") (data (i32.const 273852) "a") (data (i32.const 273855) "a") (data (i32.const 273858) "a") (data (i32.const 273861) "a") (data (i32.const 273864) "a") (data (i32.const 273867) "a") (data (i32.const 273870) "a") (data (i32.const 273873) "a") (data (i32.const 273876) "a") (data (i32.const 273879) "a") (data (i32.const 273882) "a") (data (i32.const 273885) "a") (data (i32.const 273888) "a") (data (i32.const 273891) "a") (data (i32.const 273894) "a") (data (i32.const 273897) "a") (data (i32.const 273900) "a") (data (i32.const 273903) "a") (data (i32.const 273906) "a") (data (i32.const 273909) "a") (data (i32.const 273912) "a") (data (i32.const 273915) "a") (data (i32.const 273918) "a") (data (i32.const 273921) "a") (data (i32.const 273924) "a") (data (i32.const 273927) "a") (data (i32.const 273930) "a") (data (i32.const 273933) "a") (data (i32.const 273936) "a") (data (i32.const 273939) "a") (data (i32.const 273942) "a") (data (i32.const 273945) "a") (data (i32.const 273948) "a") (data (i32.const 273951) "a") (data (i32.const 273954) "a") (data (i32.const 273957) "a") (data (i32.const 273960) "a") (data (i32.const 273963) "a") (data (i32.const 273966) "a") (data (i32.const 273969) "a") (data (i32.const 273972) "a") (data (i32.const 273975) "a") (data (i32.const 273978) "a") (data (i32.const 273981) "a") (data (i32.const 273984) "a") (data (i32.const 273987) "a") (data (i32.const 273990) "a") (data (i32.const 273993) "a") (data (i32.const 273996) "a") (data (i32.const 273999) "a") (data (i32.const 274002) "a") (data (i32.const 274005) "a") (data (i32.const 274008) "a") (data (i32.const 274011) "a") (data (i32.const 274014) "a") (data (i32.const 274017) "a") (data (i32.const 274020) "a") (data (i32.const 274023) "a") (data (i32.const 274026) "a") (data (i32.const 274029) "a") (data (i32.const 274032) "a") (data (i32.const 274035) "a") (data (i32.const 274038) "a") (data (i32.const 274041) "a") (data (i32.const 274044) "a") (data (i32.const 274047) "a") (data (i32.const 274050) "a") (data (i32.const 274053) "a") (data (i32.const 274056) "a") (data (i32.const 274059) "a") (data (i32.const 274062) "a") (data (i32.const 274065) "a") (data (i32.const 274068) "a") (data (i32.const 274071) "a") (data (i32.const 274074) "a") (data (i32.const 274077) "a") (data (i32.const 274080) "a") (data (i32.const 274083) "a") (data (i32.const 274086) "a") (data (i32.const 274089) "a") (data (i32.const 274092) "a") (data (i32.const 274095) "a") (data (i32.const 274098) "a") (data (i32.const 274101) "a") (data (i32.const 274104) "a") (data (i32.const 274107) "a") (data (i32.const 274110) "a") (data (i32.const 274113) "a") (data (i32.const 274116) "a") (data (i32.const 274119) "a") (data (i32.const 274122) "a") (data (i32.const 274125) "a") (data (i32.const 274128) "a") (data (i32.const 274131) "a") (data (i32.const 274134) "a") (data (i32.const 274137) "a") (data (i32.const 274140) "a") (data (i32.const 274143) "a") (data (i32.const 274146) "a") (data (i32.const 274149) "a") (data (i32.const 274152) "a") (data (i32.const 274155) "a") (data (i32.const 274158) "a") (data (i32.const 274161) "a") (data (i32.const 274164) "a") (data (i32.const 274167) "a") (data (i32.const 274170) "a") (data (i32.const 274173) "a") (data (i32.const 274176) "a") (data (i32.const 274179) "a") (data (i32.const 274182) "a") (data (i32.const 274185) "a") (data (i32.const 274188) "a") (data (i32.const 274191) "a") (data (i32.const 274194) "a") (data (i32.const 274197) "a") (data (i32.const 274200) "a") (data (i32.const 274203) "a") (data (i32.const 274206) "a") (data (i32.const 274209) "a") (data (i32.const 274212) "a") (data (i32.const 274215) "a") (data (i32.const 274218) "a") (data (i32.const 274221) "a") (data (i32.const 274224) "a") (data (i32.const 274227) "a") (data (i32.const 274230) "a") (data (i32.const 274233) "a") (data (i32.const 274236) "a") (data (i32.const 274239) "a") (data (i32.const 274242) "a") (data (i32.const 274245) "a") (data (i32.const 274248) "a") (data (i32.const 274251) "a") (data (i32.const 274254) "a") (data (i32.const 274257) "a") (data (i32.const 274260) "a") (data (i32.const 274263) "a") (data (i32.const 274266) "a") (data (i32.const 274269) "a") (data (i32.const 274272) "a") (data (i32.const 274275) "a") (data (i32.const 274278) "a") (data (i32.const 274281) "a") (data (i32.const 274284) "a") (data (i32.const 274287) "a") (data (i32.const 274290) "a") (data (i32.const 274293) "a") (data (i32.const 274296) "a") (data (i32.const 274299) "a") (data (i32.const 274302) "a") (data (i32.const 274305) "a") (data (i32.const 274308) "a") (data (i32.const 274311) "a") (data (i32.const 274314) "a") (data (i32.const 274317) "a") (data (i32.const 274320) "a") (data (i32.const 274323) "a") (data (i32.const 274326) "a") (data (i32.const 274329) "a") (data (i32.const 274332) "a") (data (i32.const 274335) "a") (data (i32.const 274338) "a") (data (i32.const 274341) "a") (data (i32.const 274344) "a") (data (i32.const 274347) "a") (data (i32.const 274350) "a") (data (i32.const 274353) "a") (data (i32.const 274356) "a") (data (i32.const 274359) "a") (data (i32.const 274362) "a") (data (i32.const 274365) "a") (data (i32.const 274368) "a") (data (i32.const 274371) "a") (data (i32.const 274374) "a") (data (i32.const 274377) "a") (data (i32.const 274380) "a") (data (i32.const 274383) "a") (data (i32.const 274386) "a") (data (i32.const 274389) "a") (data (i32.const 274392) "a") (data (i32.const 274395) "a") (data (i32.const 274398) "a") (data (i32.const 274401) "a") (data (i32.const 274404) "a") (data (i32.const 274407) "a") (data (i32.const 274410) "a") (data (i32.const 274413) "a") (data (i32.const 274416) "a") (data (i32.const 274419) "a") (data (i32.const 274422) "a") (data (i32.const 274425) "a") (data (i32.const 274428) "a") (data (i32.const 274431) "a") (data (i32.const 274434) "a") (data (i32.const 274437) "a") (data (i32.const 274440) "a") (data (i32.const 274443) "a") (data (i32.const 274446) "a") (data (i32.const 274449) "a") (data (i32.const 274452) "a") (data (i32.const 274455) "a") (data (i32.const 274458) "a") (data (i32.const 274461) "a") (data (i32.const 274464) "a") (data (i32.const 274467) "a") (data (i32.const 274470) "a") (data (i32.const 274473) "a") (data (i32.const 274476) "a") (data (i32.const 274479) "a") (data (i32.const 274482) "a") (data (i32.const 274485) "a") (data (i32.const 274488) "a") (data (i32.const 274491) "a") (data (i32.const 274494) "a") (data (i32.const 274497) "a") (data (i32.const 274500) "a") (data (i32.const 274503) "a") (data (i32.const 274506) "a") (data (i32.const 274509) "a") (data (i32.const 274512) "a") (data (i32.const 274515) "a") (data (i32.const 274518) "a") (data (i32.const 274521) "a") (data (i32.const 274524) "a") (data (i32.const 274527) "a") (data (i32.const 274530) "a") (data (i32.const 274533) "a") (data (i32.const 274536) "a") (data (i32.const 274539) "a") (data (i32.const 274542) "a") (data (i32.const 274545) "a") (data (i32.const 274548) "a") (data (i32.const 274551) "a") (data (i32.const 274554) "a") (data (i32.const 274557) "a") (data (i32.const 274560) "a") (data (i32.const 274563) "a") (data (i32.const 274566) "a") (data (i32.const 274569) "a") (data (i32.const 274572) "a") (data (i32.const 274575) "a") (data (i32.const 274578) "a") (data (i32.const 274581) "a") (data (i32.const 274584) "a") (data (i32.const 274587) "a") (data (i32.const 274590) "a") (data (i32.const 274593) "a") (data (i32.const 274596) "a") (data (i32.const 274599) "a") (data (i32.const 274602) "a") (data (i32.const 274605) "a") (data (i32.const 274608) "a") (data (i32.const 274611) "a") (data (i32.const 274614) "a") (data (i32.const 274617) "a") (data (i32.const 274620) "a") (data (i32.const 274623) "a") (data (i32.const 274626) "a") (data (i32.const 274629) "a") (data (i32.const 274632) "a") (data (i32.const 274635) "a") (data (i32.const 274638) "a") (data (i32.const 274641) "a") (data (i32.const 274644) "a") (data (i32.const 274647) "a") (data (i32.const 274650) "a") (data (i32.const 274653) "a") (data (i32.const 274656) "a") (data (i32.const 274659) "a") (data (i32.const 274662) "a") (data (i32.const 274665) "a") (data (i32.const 274668) "a") (data (i32.const 274671) "a") (data (i32.const 274674) "a") (data (i32.const 274677) "a") (data (i32.const 274680) "a") (data (i32.const 274683) "a") (data (i32.const 274686) "a") (data (i32.const 274689) "a") (data (i32.const 274692) "a") (data (i32.const 274695) "a") (data (i32.const 274698) "a") (data (i32.const 274701) "a") (data (i32.const 274704) "a") (data (i32.const 274707) "a") (data (i32.const 274710) "a") (data (i32.const 274713) "a") (data (i32.const 274716) "a") (data (i32.const 274719) "a") (data (i32.const 274722) "a") (data (i32.const 274725) "a") (data (i32.const 274728) "a") (data (i32.const 274731) "a") (data (i32.const 274734) "a") (data (i32.const 274737) "a") (data (i32.const 274740) "a") (data (i32.const 274743) "a") (data (i32.const 274746) "a") (data (i32.const 274749) "a") (data (i32.const 274752) "a") (data (i32.const 274755) "a") (data (i32.const 274758) "a") (data (i32.const 274761) "a") (data (i32.const 274764) "a") (data (i32.const 274767) "a") (data (i32.const 274770) "a") (data (i32.const 274773) "a") (data (i32.const 274776) "a") (data (i32.const 274779) "a") (data (i32.const 274782) "a") (data (i32.const 274785) "a") (data (i32.const 274788) "a") (data (i32.const 274791) "a") (data (i32.const 274794) "a") (data (i32.const 274797) "a") (data (i32.const 274800) "a") (data (i32.const 274803) "a") (data (i32.const 274806) "a") (data (i32.const 274809) "a") (data (i32.const 274812) "a") (data (i32.const 274815) "a") (data (i32.const 274818) "a") (data (i32.const 274821) "a") (data (i32.const 274824) "a") (data (i32.const 274827) "a") (data (i32.const 274830) "a") (data (i32.const 274833) "a") (data (i32.const 274836) "a") (data (i32.const 274839) "a") (data (i32.const 274842) "a") (data (i32.const 274845) "a") (data (i32.const 274848) "a") (data (i32.const 274851) "a") (data (i32.const 274854) "a") (data (i32.const 274857) "a") (data (i32.const 274860) "a") (data (i32.const 274863) "a") (data (i32.const 274866) "a") (data (i32.const 274869) "a") (data (i32.const 274872) "a") (data (i32.const 274875) "a") (data (i32.const 274878) "a") (data (i32.const 274881) "a") (data (i32.const 274884) "a") (data (i32.const 274887) "a") (data (i32.const 274890) "a") (data (i32.const 274893) "a") (data (i32.const 274896) "a") (data (i32.const 274899) "a") (data (i32.const 274902) "a") (data (i32.const 274905) "a") (data (i32.const 274908) "a") (data (i32.const 274911) "a") (data (i32.const 274914) "a") (data (i32.const 274917) "a") (data (i32.const 274920) "a") (data (i32.const 274923) "a") (data (i32.const 274926) "a") (data (i32.const 274929) "a") (data (i32.const 274932) "a") (data (i32.const 274935) "a") (data (i32.const 274938) "a") (data (i32.const 274941) "a") (data (i32.const 274944) "a") (data (i32.const 274947) "a") (data (i32.const 274950) "a") (data (i32.const 274953) "a") (data (i32.const 274956) "a") (data (i32.const 274959) "a") (data (i32.const 274962) "a") (data (i32.const 274965) "a") (data (i32.const 274968) "a") (data (i32.const 274971) "a") (data (i32.const 274974) "a") (data (i32.const 274977) "a") (data (i32.const 274980) "a") (data (i32.const 274983) "a") (data (i32.const 274986) "a") (data (i32.const 274989) "a") (data (i32.const 274992) "a") (data (i32.const 274995) "a") (data (i32.const 274998) "a") (data (i32.const 275001) "a") (data (i32.const 275004) "a") (data (i32.const 275007) "a") (data (i32.const 275010) "a") (data (i32.const 275013) "a") (data (i32.const 275016) "a") (data (i32.const 275019) "a") (data (i32.const 275022) "a") (data (i32.const 275025) "a") (data (i32.const 275028) "a") (data (i32.const 275031) "a") (data (i32.const 275034) "a") (data (i32.const 275037) "a") (data (i32.const 275040) "a") (data (i32.const 275043) "a") (data (i32.const 275046) "a") (data (i32.const 275049) "a") (data (i32.const 275052) "a") (data (i32.const 275055) "a") (data (i32.const 275058) "a") (data (i32.const 275061) "a") (data (i32.const 275064) "a") (data (i32.const 275067) "a") (data (i32.const 275070) "a") (data (i32.const 275073) "a") (data (i32.const 275076) "a") (data (i32.const 275079) "a") (data (i32.const 275082) "a") (data (i32.const 275085) "a") (data (i32.const 275088) "a") (data (i32.const 275091) "a") (data (i32.const 275094) "a") (data (i32.const 275097) "a") (data (i32.const 275100) "a") (data (i32.const 275103) "a") (data (i32.const 275106) "a") (data (i32.const 275109) "a") (data (i32.const 275112) "a") (data (i32.const 275115) "a") (data (i32.const 275118) "a") (data (i32.const 275121) "a") (data (i32.const 275124) "a") (data (i32.const 275127) "a") (data (i32.const 275130) "a") (data (i32.const 275133) "a") (data (i32.const 275136) "a") (data (i32.const 275139) "a") (data (i32.const 275142) "a") (data (i32.const 275145) "a") (data (i32.const 275148) "a") (data (i32.const 275151) "a") (data (i32.const 275154) "a") (data (i32.const 275157) "a") (data (i32.const 275160) "a") (data (i32.const 275163) "a") (data (i32.const 275166) "a") (data (i32.const 275169) "a") (data (i32.const 275172) "a") (data (i32.const 275175) "a") (data (i32.const 275178) "a") (data (i32.const 275181) "a") (data (i32.const 275184) "a") (data (i32.const 275187) "a") (data (i32.const 275190) "a") (data (i32.const 275193) "a") (data (i32.const 275196) "a") (data (i32.const 275199) "a") (data (i32.const 275202) "a") (data (i32.const 275205) "a") (data (i32.const 275208) "a") (data (i32.const 275211) "a") (data (i32.const 275214) "a") (data (i32.const 275217) "a") (data (i32.const 275220) "a") (data (i32.const 275223) "a") (data (i32.const 275226) "a") (data (i32.const 275229) "a") (data (i32.const 275232) "a") (data (i32.const 275235) "a") (data (i32.const 275238) "a") (data (i32.const 275241) "a") (data (i32.const 275244) "a") (data (i32.const 275247) "a") (data (i32.const 275250) "a") (data (i32.const 275253) "a") (data (i32.const 275256) "a") (data (i32.const 275259) "a") (data (i32.const 275262) "a") (data (i32.const 275265) "a") (data (i32.const 275268) "a") (data (i32.const 275271) "a") (data (i32.const 275274) "a") (data (i32.const 275277) "a") (data (i32.const 275280) "a") (data (i32.const 275283) "a") (data (i32.const 275286) "a") (data (i32.const 275289) "a") (data (i32.const 275292) "a") (data (i32.const 275295) "a") (data (i32.const 275298) "a") (data (i32.const 275301) "a") (data (i32.const 275304) "a") (data (i32.const 275307) "a") (data (i32.const 275310) "a") (data (i32.const 275313) "a") (data (i32.const 275316) "a") (data (i32.const 275319) "a") (data (i32.const 275322) "a") (data (i32.const 275325) "a") (data (i32.const 275328) "a") (data (i32.const 275331) "a") (data (i32.const 275334) "a") (data (i32.const 275337) "a") (data (i32.const 275340) "a") (data (i32.const 275343) "a") (data (i32.const 275346) "a") (data (i32.const 275349) "a") (data (i32.const 275352) "a") (data (i32.const 275355) "a") (data (i32.const 275358) "a") (data (i32.const 275361) "a") (data (i32.const 275364) "a") (data (i32.const 275367) "a") (data (i32.const 275370) "a") (data (i32.const 275373) "a") (data (i32.const 275376) "a") (data (i32.const 275379) "a") (data (i32.const 275382) "a") (data (i32.const 275385) "a") (data (i32.const 275388) "a") (data (i32.const 275391) "a") (data (i32.const 275394) "a") (data (i32.const 275397) "a") (data (i32.const 275400) "a") (data (i32.const 275403) "a") (data (i32.const 275406) "a") (data (i32.const 275409) "a") (data (i32.const 275412) "a") (data (i32.const 275415) "a") (data (i32.const 275418) "a") (data (i32.const 275421) "a") (data (i32.const 275424) "a") (data (i32.const 275427) "a") (data (i32.const 275430) "a") (data (i32.const 275433) "a") (data (i32.const 275436) "a") (data (i32.const 275439) "a") (data (i32.const 275442) "a") (data (i32.const 275445) "a") (data (i32.const 275448) "a") (data (i32.const 275451) "a") (data (i32.const 275454) "a") (data (i32.const 275457) "a") (data (i32.const 275460) "a") (data (i32.const 275463) "a") (data (i32.const 275466) "a") (data (i32.const 275469) "a") (data (i32.const 275472) "a") (data (i32.const 275475) "a") (data (i32.const 275478) "a") (data (i32.const 275481) "a") (data (i32.const 275484) "a") (data (i32.const 275487) "a") (data (i32.const 275490) "a") (data (i32.const 275493) "a") (data (i32.const 275496) "a") (data (i32.const 275499) "a") (data (i32.const 275502) "a") (data (i32.const 275505) "a") (data (i32.const 275508) "a") (data (i32.const 275511) "a") (data (i32.const 275514) "a") (data (i32.const 275517) "a") (data (i32.const 275520) "a") (data (i32.const 275523) "a") (data (i32.const 275526) "a") (data (i32.const 275529) "a") (data (i32.const 275532) "a") (data (i32.const 275535) "a") (data (i32.const 275538) "a") (data (i32.const 275541) "a") (data (i32.const 275544) "a") (data (i32.const 275547) "a") (data (i32.const 275550) "a") (data (i32.const 275553) "a") (data (i32.const 275556) "a") (data (i32.const 275559) "a") (data (i32.const 275562) "a") (data (i32.const 275565) "a") (data (i32.const 275568) "a") (data (i32.const 275571) "a") (data (i32.const 275574) "a") (data (i32.const 275577) "a") (data (i32.const 275580) "a") (data (i32.const 275583) "a") (data (i32.const 275586) "a") (data (i32.const 275589) "a") (data (i32.const 275592) "a") (data (i32.const 275595) "a") (data (i32.const 275598) "a") (data (i32.const 275601) "a") (data (i32.const 275604) "a") (data (i32.const 275607) "a") (data (i32.const 275610) "a") (data (i32.const 275613) "a") (data (i32.const 275616) "a") (data (i32.const 275619) "a") (data (i32.const 275622) "a") (data (i32.const 275625) "a") (data (i32.const 275628) "a") (data (i32.const 275631) "a") (data (i32.const 275634) "a") (data (i32.const 275637) "a") (data (i32.const 275640) "a") (data (i32.const 275643) "a") (data (i32.const 275646) "a") (data (i32.const 275649) "a") (data (i32.const 275652) "a") (data (i32.const 275655) "a") (data (i32.const 275658) "a") (data (i32.const 275661) "a") (data (i32.const 275664) "a") (data (i32.const 275667) "a") (data (i32.const 275670) "a") (data (i32.const 275673) "a") (data (i32.const 275676) "a") (data (i32.const 275679) "a") (data (i32.const 275682) "a") (data (i32.const 275685) "a") (data (i32.const 275688) "a") (data (i32.const 275691) "a") (data (i32.const 275694) "a") (data (i32.const 275697) "a") (data (i32.const 275700) "a") (data (i32.const 275703) "a") (data (i32.const 275706) "a") (data (i32.const 275709) "a") (data (i32.const 275712) "a") (data (i32.const 275715) "a") (data (i32.const 275718) "a") (data (i32.const 275721) "a") (data (i32.const 275724) "a") (data (i32.const 275727) "a") (data (i32.const 275730) "a") (data (i32.const 275733) "a") (data (i32.const 275736) "a") (data (i32.const 275739) "a") (data (i32.const 275742) "a") (data (i32.const 275745) "a") (data (i32.const 275748) "a") (data (i32.const 275751) "a") (data (i32.const 275754) "a") (data (i32.const 275757) "a") (data (i32.const 275760) "a") (data (i32.const 275763) "a") (data (i32.const 275766) "a") (data (i32.const 275769) "a") (data (i32.const 275772) "a") (data (i32.const 275775) "a") (data (i32.const 275778) "a") (data (i32.const 275781) "a") (data (i32.const 275784) "a") (data (i32.const 275787) "a") (data (i32.const 275790) "a") (data (i32.const 275793) "a") (data (i32.const 275796) "a") (data (i32.const 275799) "a") (data (i32.const 275802) "a") (data (i32.const 275805) "a") (data (i32.const 275808) "a") (data (i32.const 275811) "a") (data (i32.const 275814) "a") (data (i32.const 275817) "a") (data (i32.const 275820) "a") (data (i32.const 275823) "a") (data (i32.const 275826) "a") (data (i32.const 275829) "a") (data (i32.const 275832) "a") (data (i32.const 275835) "a") (data (i32.const 275838) "a") (data (i32.const 275841) "a") (data (i32.const 275844) "a") (data (i32.const 275847) "a") (data (i32.const 275850) "a") (data (i32.const 275853) "a") (data (i32.const 275856) "a") (data (i32.const 275859) "a") (data (i32.const 275862) "a") (data (i32.const 275865) "a") (data (i32.const 275868) "a") (data (i32.const 275871) "a") (data (i32.const 275874) "a") (data (i32.const 275877) "a") (data (i32.const 275880) "a") (data (i32.const 275883) "a") (data (i32.const 275886) "a") (data (i32.const 275889) "a") (data (i32.const 275892) "a") (data (i32.const 275895) "a") (data (i32.const 275898) "a") (data (i32.const 275901) "a") (data (i32.const 275904) "a") (data (i32.const 275907) "a") (data (i32.const 275910) "a") (data (i32.const 275913) "a") (data (i32.const 275916) "a") (data (i32.const 275919) "a") (data (i32.const 275922) "a") (data (i32.const 275925) "a") (data (i32.const 275928) "a") (data (i32.const 275931) "a") (data (i32.const 275934) "a") (data (i32.const 275937) "a") (data (i32.const 275940) "a") (data (i32.const 275943) "a") (data (i32.const 275946) "a") (data (i32.const 275949) "a") (data (i32.const 275952) "a") (data (i32.const 275955) "a") (data (i32.const 275958) "a") (data (i32.const 275961) "a") (data (i32.const 275964) "a") (data (i32.const 275967) "a") (data (i32.const 275970) "a") (data (i32.const 275973) "a") (data (i32.const 275976) "a") (data (i32.const 275979) "a") (data (i32.const 275982) "a") (data (i32.const 275985) "a") (data (i32.const 275988) "a") (data (i32.const 275991) "a") (data (i32.const 275994) "a") (data (i32.const 275997) "a") (data (i32.const 276000) "a") (data (i32.const 276003) "a") (data (i32.const 276006) "a") (data (i32.const 276009) "a") (data (i32.const 276012) "a") (data (i32.const 276015) "a") (data (i32.const 276018) "a") (data (i32.const 276021) "a") (data (i32.const 276024) "a") (data (i32.const 276027) "a") (data (i32.const 276030) "a") (data (i32.const 276033) "a") (data (i32.const 276036) "a") (data (i32.const 276039) "a") (data (i32.const 276042) "a") (data (i32.const 276045) "a") (data (i32.const 276048) "a") (data (i32.const 276051) "a") (data (i32.const 276054) "a") (data (i32.const 276057) "a") (data (i32.const 276060) "a") (data (i32.const 276063) "a") (data (i32.const 276066) "a") (data (i32.const 276069) "a") (data (i32.const 276072) "a") (data (i32.const 276075) "a") (data (i32.const 276078) "a") (data (i32.const 276081) "a") (data (i32.const 276084) "a") (data (i32.const 276087) "a") (data (i32.const 276090) "a") (data (i32.const 276093) "a") (data (i32.const 276096) "a") (data (i32.const 276099) "a") (data (i32.const 276102) "a") (data (i32.const 276105) "a") (data (i32.const 276108) "a") (data (i32.const 276111) "a") (data (i32.const 276114) "a") (data (i32.const 276117) "a") (data (i32.const 276120) "a") (data (i32.const 276123) "a") (data (i32.const 276126) "a") (data (i32.const 276129) "a") (data (i32.const 276132) "a") (data (i32.const 276135) "a") (data (i32.const 276138) "a") (data (i32.const 276141) "a") (data (i32.const 276144) "a") (data (i32.const 276147) "a") (data (i32.const 276150) "a") (data (i32.const 276153) "a") (data (i32.const 276156) "a") (data (i32.const 276159) "a") (data (i32.const 276162) "a") (data (i32.const 276165) "a") (data (i32.const 276168) "a") (data (i32.const 276171) "a") (data (i32.const 276174) "a") (data (i32.const 276177) "a") (data (i32.const 276180) "a") (data (i32.const 276183) "a") (data (i32.const 276186) "a") (data (i32.const 276189) "a") (data (i32.const 276192) "a") (data (i32.const 276195) "a") (data (i32.const 276198) "a") (data (i32.const 276201) "a") (data (i32.const 276204) "a") (data (i32.const 276207) "a") (data (i32.const 276210) "a") (data (i32.const 276213) "a") (data (i32.const 276216) "a") (data (i32.const 276219) "a") (data (i32.const 276222) "a") (data (i32.const 276225) "a") (data (i32.const 276228) "a") (data (i32.const 276231) "a") (data (i32.const 276234) "a") (data (i32.const 276237) "a") (data (i32.const 276240) "a") (data (i32.const 276243) "a") (data (i32.const 276246) "a") (data (i32.const 276249) "a") (data (i32.const 276252) "a") (data (i32.const 276255) "a") (data (i32.const 276258) "a") (data (i32.const 276261) "a") (data (i32.const 276264) "a") (data (i32.const 276267) "a") (data (i32.const 276270) "a") (data (i32.const 276273) "a") (data (i32.const 276276) "a") (data (i32.const 276279) "a") (data (i32.const 276282) "a") (data (i32.const 276285) "a") (data (i32.const 276288) "a") (data (i32.const 276291) "a") (data (i32.const 276294) "a") (data (i32.const 276297) "a") (data (i32.const 276300) "a") (data (i32.const 276303) "a") (data (i32.const 276306) "a") (data (i32.const 276309) "a") (data (i32.const 276312) "a") (data (i32.const 276315) "a") (data (i32.const 276318) "a") (data (i32.const 276321) "a") (data (i32.const 276324) "a") (data (i32.const 276327) "a") (data (i32.const 276330) "a") (data (i32.const 276333) "a") (data (i32.const 276336) "a") (data (i32.const 276339) "a") (data (i32.const 276342) "a") (data (i32.const 276345) "a") (data (i32.const 276348) "a") (data (i32.const 276351) "a") (data (i32.const 276354) "a") (data (i32.const 276357) "a") (data (i32.const 276360) "a") (data (i32.const 276363) "a") (data (i32.const 276366) "a") (data (i32.const 276369) "a") (data (i32.const 276372) "a") (data (i32.const 276375) "a") (data (i32.const 276378) "a") (data (i32.const 276381) "a") (data (i32.const 276384) "a") (data (i32.const 276387) "a") (data (i32.const 276390) "a") (data (i32.const 276393) "a") (data (i32.const 276396) "a") (data (i32.const 276399) "a") (data (i32.const 276402) "a") (data (i32.const 276405) "a") (data (i32.const 276408) "a") (data (i32.const 276411) "a") (data (i32.const 276414) "a") (data (i32.const 276417) "a") (data (i32.const 276420) "a") (data (i32.const 276423) "a") (data (i32.const 276426) "a") (data (i32.const 276429) "a") (data (i32.const 276432) "a") (data (i32.const 276435) "a") (data (i32.const 276438) "a") (data (i32.const 276441) "a") (data (i32.const 276444) "a") (data (i32.const 276447) "a") (data (i32.const 276450) "a") (data (i32.const 276453) "a") (data (i32.const 276456) "a") (data (i32.const 276459) "a") (data (i32.const 276462) "a") (data (i32.const 276465) "a") (data (i32.const 276468) "a") (data (i32.const 276471) "a") (data (i32.const 276474) "a") (data (i32.const 276477) "a") (data (i32.const 276480) "a") (data (i32.const 276483) "a") (data (i32.const 276486) "a") (data (i32.const 276489) "a") (data (i32.const 276492) "a") (data (i32.const 276495) "a") (data (i32.const 276498) "a") (data (i32.const 276501) "a") (data (i32.const 276504) "a") (data (i32.const 276507) "a") (data (i32.const 276510) "a") (data (i32.const 276513) "a") (data (i32.const 276516) "a") (data (i32.const 276519) "a") (data (i32.const 276522) "a") (data (i32.const 276525) "a") (data (i32.const 276528) "a") (data (i32.const 276531) "a") (data (i32.const 276534) "a") (data (i32.const 276537) "a") (data (i32.const 276540) "a") (data (i32.const 276543) "a") (data (i32.const 276546) "a") (data (i32.const 276549) "a") (data (i32.const 276552) "a") (data (i32.const 276555) "a") (data (i32.const 276558) "a") (data (i32.const 276561) "a") (data (i32.const 276564) "a") (data (i32.const 276567) "a") (data (i32.const 276570) "a") (data (i32.const 276573) "a") (data (i32.const 276576) "a") (data (i32.const 276579) "a") (data (i32.const 276582) "a") (data (i32.const 276585) "a") (data (i32.const 276588) "a") (data (i32.const 276591) "a") (data (i32.const 276594) "a") (data (i32.const 276597) "a") (data (i32.const 276600) "a") (data (i32.const 276603) "a") (data (i32.const 276606) "a") (data (i32.const 276609) "a") (data (i32.const 276612) "a") (data (i32.const 276615) "a") (data (i32.const 276618) "a") (data (i32.const 276621) "a") (data (i32.const 276624) "a") (data (i32.const 276627) "a") (data (i32.const 276630) "a") (data (i32.const 276633) "a") (data (i32.const 276636) "a") (data (i32.const 276639) "a") (data (i32.const 276642) "a") (data (i32.const 276645) "a") (data (i32.const 276648) "a") (data (i32.const 276651) "a") (data (i32.const 276654) "a") (data (i32.const 276657) "a") (data (i32.const 276660) "a") (data (i32.const 276663) "a") (data (i32.const 276666) "a") (data (i32.const 276669) "a") (data (i32.const 276672) "a") (data (i32.const 276675) "a") (data (i32.const 276678) "a") (data (i32.const 276681) "a") (data (i32.const 276684) "a") (data (i32.const 276687) "a") (data (i32.const 276690) "a") (data (i32.const 276693) "a") (data (i32.const 276696) "a") (data (i32.const 276699) "a") (data (i32.const 276702) "a") (data (i32.const 276705) "a") (data (i32.const 276708) "a") (data (i32.const 276711) "a") (data (i32.const 276714) "a") (data (i32.const 276717) "a") (data (i32.const 276720) "a") (data (i32.const 276723) "a") (data (i32.const 276726) "a") (data (i32.const 276729) "a") (data (i32.const 276732) "a") (data (i32.const 276735) "a") (data (i32.const 276738) "a") (data (i32.const 276741) "a") (data (i32.const 276744) "a") (data (i32.const 276747) "a") (data (i32.const 276750) "a") (data (i32.const 276753) "a") (data (i32.const 276756) "a") (data (i32.const 276759) "a") (data (i32.const 276762) "a") (data (i32.const 276765) "a") (data (i32.const 276768) "a") (data (i32.const 276771) "a") (data (i32.const 276774) "a") (data (i32.const 276777) "a") (data (i32.const 276780) "a") (data (i32.const 276783) "a") (data (i32.const 276786) "a") (data (i32.const 276789) "a") (data (i32.const 276792) "a") (data (i32.const 276795) "a") (data (i32.const 276798) "a") (data (i32.const 276801) "a") (data (i32.const 276804) "a") (data (i32.const 276807) "a") (data (i32.const 276810) "a") (data (i32.const 276813) "a") (data (i32.const 276816) "a") (data (i32.const 276819) "a") (data (i32.const 276822) "a") (data (i32.const 276825) "a") (data (i32.const 276828) "a") (data (i32.const 276831) "a") (data (i32.const 276834) "a") (data (i32.const 276837) "a") (data (i32.const 276840) "a") (data (i32.const 276843) "a") (data (i32.const 276846) "a") (data (i32.const 276849) "a") (data (i32.const 276852) "a") (data (i32.const 276855) "a") (data (i32.const 276858) "a") (data (i32.const 276861) "a") (data (i32.const 276864) "a") (data (i32.const 276867) "a") (data (i32.const 276870) "a") (data (i32.const 276873) "a") (data (i32.const 276876) "a") (data (i32.const 276879) "a") (data (i32.const 276882) "a") (data (i32.const 276885) "a") (data (i32.const 276888) "a") (data (i32.const 276891) "a") (data (i32.const 276894) "a") (data (i32.const 276897) "a") (data (i32.const 276900) "a") (data (i32.const 276903) "a") (data (i32.const 276906) "a") (data (i32.const 276909) "a") (data (i32.const 276912) "a") (data (i32.const 276915) "a") (data (i32.const 276918) "a") (data (i32.const 276921) "a") (data (i32.const 276924) "a") (data (i32.const 276927) "a") (data (i32.const 276930) "a") (data (i32.const 276933) "a") (data (i32.const 276936) "a") (data (i32.const 276939) "a") (data (i32.const 276942) "a") (data (i32.const 276945) "a") (data (i32.const 276948) "a") (data (i32.const 276951) "a") (data (i32.const 276954) "a") (data (i32.const 276957) "a") (data (i32.const 276960) "a") (data (i32.const 276963) "a") (data (i32.const 276966) "a") (data (i32.const 276969) "a") (data (i32.const 276972) "a") (data (i32.const 276975) "a") (data (i32.const 276978) "a") (data (i32.const 276981) "a") (data (i32.const 276984) "a") (data (i32.const 276987) "a") (data (i32.const 276990) "a") (data (i32.const 276993) "a") (data (i32.const 276996) "a") (data (i32.const 276999) "a") (data (i32.const 277002) "a") (data (i32.const 277005) "a") (data (i32.const 277008) "a") (data (i32.const 277011) "a") (data (i32.const 277014) "a") (data (i32.const 277017) "a") (data (i32.const 277020) "a") (data (i32.const 277023) "a") (data (i32.const 277026) "a") (data (i32.const 277029) "a") (data (i32.const 277032) "a") (data (i32.const 277035) "a") (data (i32.const 277038) "a") (data (i32.const 277041) "a") (data (i32.const 277044) "a") (data (i32.const 277047) "a") (data (i32.const 277050) "a") (data (i32.const 277053) "a") (data (i32.const 277056) "a") (data (i32.const 277059) "a") (data (i32.const 277062) "a") (data (i32.const 277065) "a") (data (i32.const 277068) "a") (data (i32.const 277071) "a") (data (i32.const 277074) "a") (data (i32.const 277077) "a") (data (i32.const 277080) "a") (data (i32.const 277083) "a") (data (i32.const 277086) "a") (data (i32.const 277089) "a") (data (i32.const 277092) "a") (data (i32.const 277095) "a") (data (i32.const 277098) "a") (data (i32.const 277101) "a") (data (i32.const 277104) "a") (data (i32.const 277107) "a") (data (i32.const 277110) "a") (data (i32.const 277113) "a") (data (i32.const 277116) "a") (data (i32.const 277119) "a") (data (i32.const 277122) "a") (data (i32.const 277125) "a") (data (i32.const 277128) "a") (data (i32.const 277131) "a") (data (i32.const 277134) "a") (data (i32.const 277137) "a") (data (i32.const 277140) "a") (data (i32.const 277143) "a") (data (i32.const 277146) "a") (data (i32.const 277149) "a") (data (i32.const 277152) "a") (data (i32.const 277155) "a") (data (i32.const 277158) "a") (data (i32.const 277161) "a") (data (i32.const 277164) "a") (data (i32.const 277167) "a") (data (i32.const 277170) "a") (data (i32.const 277173) "a") (data (i32.const 277176) "a") (data (i32.const 277179) "a") (data (i32.const 277182) "a") (data (i32.const 277185) "a") (data (i32.const 277188) "a") (data (i32.const 277191) "a") (data (i32.const 277194) "a") (data (i32.const 277197) "a") (data (i32.const 277200) "a") (data (i32.const 277203) "a") (data (i32.const 277206) "a") (data (i32.const 277209) "a") (data (i32.const 277212) "a") (data (i32.const 277215) "a") (data (i32.const 277218) "a") (data (i32.const 277221) "a") (data (i32.const 277224) "a") (data (i32.const 277227) "a") (data (i32.const 277230) "a") (data (i32.const 277233) "a") (data (i32.const 277236) "a") (data (i32.const 277239) "a") (data (i32.const 277242) "a") (data (i32.const 277245) "a") (data (i32.const 277248) "a") (data (i32.const 277251) "a") (data (i32.const 277254) "a") (data (i32.const 277257) "a") (data (i32.const 277260) "a") (data (i32.const 277263) "a") (data (i32.const 277266) "a") (data (i32.const 277269) "a") (data (i32.const 277272) "a") (data (i32.const 277275) "a") (data (i32.const 277278) "a") (data (i32.const 277281) "a") (data (i32.const 277284) "a") (data (i32.const 277287) "a") (data (i32.const 277290) "a") (data (i32.const 277293) "a") (data (i32.const 277296) "a") (data (i32.const 277299) "a") (data (i32.const 277302) "a") (data (i32.const 277305) "a") (data (i32.const 277308) "a") (data (i32.const 277311) "a") (data (i32.const 277314) "a") (data (i32.const 277317) "a") (data (i32.const 277320) "a") (data (i32.const 277323) "a") (data (i32.const 277326) "a") (data (i32.const 277329) "a") (data (i32.const 277332) "a") (data (i32.const 277335) "a") (data (i32.const 277338) "a") (data (i32.const 277341) "a") (data (i32.const 277344) "a") (data (i32.const 277347) "a") (data (i32.const 277350) "a") (data (i32.const 277353) "a") (data (i32.const 277356) "a") (data (i32.const 277359) "a") (data (i32.const 277362) "a") (data (i32.const 277365) "a") (data (i32.const 277368) "a") (data (i32.const 277371) "a") (data (i32.const 277374) "a") (data (i32.const 277377) "a") (data (i32.const 277380) "a") (data (i32.const 277383) "a") (data (i32.const 277386) "a") (data (i32.const 277389) "a") (data (i32.const 277392) "a") (data (i32.const 277395) "a") (data (i32.const 277398) "a") (data (i32.const 277401) "a") (data (i32.const 277404) "a") (data (i32.const 277407) "a") (data (i32.const 277410) "a") (data (i32.const 277413) "a") (data (i32.const 277416) "a") (data (i32.const 277419) "a") (data (i32.const 277422) "a") (data (i32.const 277425) "a") (data (i32.const 277428) "a") (data (i32.const 277431) "a") (data (i32.const 277434) "a") (data (i32.const 277437) "a") (data (i32.const 277440) "a") (data (i32.const 277443) "a") (data (i32.const 277446) "a") (data (i32.const 277449) "a") (data (i32.const 277452) "a") (data (i32.const 277455) "a") (data (i32.const 277458) "a") (data (i32.const 277461) "a") (data (i32.const 277464) "a") (data (i32.const 277467) "a") (data (i32.const 277470) "a") (data (i32.const 277473) "a") (data (i32.const 277476) "a") (data (i32.const 277479) "a") (data (i32.const 277482) "a") (data (i32.const 277485) "a") (data (i32.const 277488) "a") (data (i32.const 277491) "a") (data (i32.const 277494) "a") (data (i32.const 277497) "a") (data (i32.const 277500) "a") (data (i32.const 277503) "a") (data (i32.const 277506) "a") (data (i32.const 277509) "a") (data (i32.const 277512) "a") (data (i32.const 277515) "a") (data (i32.const 277518) "a") (data (i32.const 277521) "a") (data (i32.const 277524) "a") (data (i32.const 277527) "a") (data (i32.const 277530) "a") (data (i32.const 277533) "a") (data (i32.const 277536) "a") (data (i32.const 277539) "a") (data (i32.const 277542) "a") (data (i32.const 277545) "a") (data (i32.const 277548) "a") (data (i32.const 277551) "a") (data (i32.const 277554) "a") (data (i32.const 277557) "a") (data (i32.const 277560) "a") (data (i32.const 277563) "a") (data (i32.const 277566) "a") (data (i32.const 277569) "a") (data (i32.const 277572) "a") (data (i32.const 277575) "a") (data (i32.const 277578) "a") (data (i32.const 277581) "a") (data (i32.const 277584) "a") (data (i32.const 277587) "a") (data (i32.const 277590) "a") (data (i32.const 277593) "a") (data (i32.const 277596) "a") (data (i32.const 277599) "a") (data (i32.const 277602) "a") (data (i32.const 277605) "a") (data (i32.const 277608) "a") (data (i32.const 277611) "a") (data (i32.const 277614) "a") (data (i32.const 277617) "a") (data (i32.const 277620) "a") (data (i32.const 277623) "a") (data (i32.const 277626) "a") (data (i32.const 277629) "a") (data (i32.const 277632) "a") (data (i32.const 277635) "a") (data (i32.const 277638) "a") (data (i32.const 277641) "a") (data (i32.const 277644) "a") (data (i32.const 277647) "a") (data (i32.const 277650) "a") (data (i32.const 277653) "a") (data (i32.const 277656) "a") (data (i32.const 277659) "a") (data (i32.const 277662) "a") (data (i32.const 277665) "a") (data (i32.const 277668) "a") (data (i32.const 277671) "a") (data (i32.const 277674) "a") (data (i32.const 277677) "a") (data (i32.const 277680) "a") (data (i32.const 277683) "a") (data (i32.const 277686) "a") (data (i32.const 277689) "a") (data (i32.const 277692) "a") (data (i32.const 277695) "a") (data (i32.const 277698) "a") (data (i32.const 277701) "a") (data (i32.const 277704) "a") (data (i32.const 277707) "a") (data (i32.const 277710) "a") (data (i32.const 277713) "a") (data (i32.const 277716) "a") (data (i32.const 277719) "a") (data (i32.const 277722) "a") (data (i32.const 277725) "a") (data (i32.const 277728) "a") (data (i32.const 277731) "a") (data (i32.const 277734) "a") (data (i32.const 277737) "a") (data (i32.const 277740) "a") (data (i32.const 277743) "a") (data (i32.const 277746) "a") (data (i32.const 277749) "a") (data (i32.const 277752) "a") (data (i32.const 277755) "a") (data (i32.const 277758) "a") (data (i32.const 277761) "a") (data (i32.const 277764) "a") (data (i32.const 277767) "a") (data (i32.const 277770) "a") (data (i32.const 277773) "a") (data (i32.const 277776) "a") (data (i32.const 277779) "a") (data (i32.const 277782) "a") (data (i32.const 277785) "a") (data (i32.const 277788) "a") (data (i32.const 277791) "a") (data (i32.const 277794) "a") (data (i32.const 277797) "a") (data (i32.const 277800) "a") (data (i32.const 277803) "a") (data (i32.const 277806) "a") (data (i32.const 277809) "a") (data (i32.const 277812) "a") (data (i32.const 277815) "a") (data (i32.const 277818) "a") (data (i32.const 277821) "a") (data (i32.const 277824) "a") (data (i32.const 277827) "a") (data (i32.const 277830) "a") (data (i32.const 277833) "a") (data (i32.const 277836) "a") (data (i32.const 277839) "a") (data (i32.const 277842) "a") (data (i32.const 277845) "a") (data (i32.const 277848) "a") (data (i32.const 277851) "a") (data (i32.const 277854) "a") (data (i32.const 277857) "a") (data (i32.const 277860) "a") (data (i32.const 277863) "a") (data (i32.const 277866) "a") (data (i32.const 277869) "a") (data (i32.const 277872) "a") (data (i32.const 277875) "a") (data (i32.const 277878) "a") (data (i32.const 277881) "a") (data (i32.const 277884) "a") (data (i32.const 277887) "a") (data (i32.const 277890) "a") (data (i32.const 277893) "a") (data (i32.const 277896) "a") (data (i32.const 277899) "a") (data (i32.const 277902) "a") (data (i32.const 277905) "a") (data (i32.const 277908) "a") (data (i32.const 277911) "a") (data (i32.const 277914) "a") (data (i32.const 277917) "a") (data (i32.const 277920) "a") (data (i32.const 277923) "a") (data (i32.const 277926) "a") (data (i32.const 277929) "a") (data (i32.const 277932) "a") (data (i32.const 277935) "a") (data (i32.const 277938) "a") (data (i32.const 277941) "a") (data (i32.const 277944) "a") (data (i32.const 277947) "a") (data (i32.const 277950) "a") (data (i32.const 277953) "a") (data (i32.const 277956) "a") (data (i32.const 277959) "a") (data (i32.const 277962) "a") (data (i32.const 277965) "a") (data (i32.const 277968) "a") (data (i32.const 277971) "a") (data (i32.const 277974) "a") (data (i32.const 277977) "a") (data (i32.const 277980) "a") (data (i32.const 277983) "a") (data (i32.const 277986) "a") (data (i32.const 277989) "a") (data (i32.const 277992) "a") (data (i32.const 277995) "a") (data (i32.const 277998) "a") (data (i32.const 278001) "a") (data (i32.const 278004) "a") (data (i32.const 278007) "a") (data (i32.const 278010) "a") (data (i32.const 278013) "a") (data (i32.const 278016) "a") (data (i32.const 278019) "a") (data (i32.const 278022) "a") (data (i32.const 278025) "a") (data (i32.const 278028) "a") (data (i32.const 278031) "a") (data (i32.const 278034) "a") (data (i32.const 278037) "a") (data (i32.const 278040) "a") (data (i32.const 278043) "a") (data (i32.const 278046) "a") (data (i32.const 278049) "a") (data (i32.const 278052) "a") (data (i32.const 278055) "a") (data (i32.const 278058) "a") (data (i32.const 278061) "a") (data (i32.const 278064) "a") (data (i32.const 278067) "a") (data (i32.const 278070) "a") (data (i32.const 278073) "a") (data (i32.const 278076) "a") (data (i32.const 278079) "a") (data (i32.const 278082) "a") (data (i32.const 278085) "a") (data (i32.const 278088) "a") (data (i32.const 278091) "a") (data (i32.const 278094) "a") (data (i32.const 278097) "a") (data (i32.const 278100) "a") (data (i32.const 278103) "a") (data (i32.const 278106) "a") (data (i32.const 278109) "a") (data (i32.const 278112) "a") (data (i32.const 278115) "a") (data (i32.const 278118) "a") (data (i32.const 278121) "a") (data (i32.const 278124) "a") (data (i32.const 278127) "a") (data (i32.const 278130) "a") (data (i32.const 278133) "a") (data (i32.const 278136) "a") (data (i32.const 278139) "a") (data (i32.const 278142) "a") (data (i32.const 278145) "a") (data (i32.const 278148) "a") (data (i32.const 278151) "a") (data (i32.const 278154) "a") (data (i32.const 278157) "a") (data (i32.const 278160) "a") (data (i32.const 278163) "a") (data (i32.const 278166) "a") (data (i32.const 278169) "a") (data (i32.const 278172) "a") (data (i32.const 278175) "a") (data (i32.const 278178) "a") (data (i32.const 278181) "a") (data (i32.const 278184) "a") (data (i32.const 278187) "a") (data (i32.const 278190) "a") (data (i32.const 278193) "a") (data (i32.const 278196) "a") (data (i32.const 278199) "a") (data (i32.const 278202) "a") (data (i32.const 278205) "a") (data (i32.const 278208) "a") (data (i32.const 278211) "a") (data (i32.const 278214) "a") (data (i32.const 278217) "a") (data (i32.const 278220) "a") (data (i32.const 278223) "a") (data (i32.const 278226) "a") (data (i32.const 278229) "a") (data (i32.const 278232) "a") (data (i32.const 278235) "a") (data (i32.const 278238) "a") (data (i32.const 278241) "a") (data (i32.const 278244) "a") (data (i32.const 278247) "a") (data (i32.const 278250) "a") (data (i32.const 278253) "a") (data (i32.const 278256) "a") (data (i32.const 278259) "a") (data (i32.const 278262) "a") (data (i32.const 278265) "a") (data (i32.const 278268) "a") (data (i32.const 278271) "a") (data (i32.const 278274) "a") (data (i32.const 278277) "a") (data (i32.const 278280) "a") (data (i32.const 278283) "a") (data (i32.const 278286) "a") (data (i32.const 278289) "a") (data (i32.const 278292) "a") (data (i32.const 278295) "a") (data (i32.const 278298) "a") (data (i32.const 278301) "a") (data (i32.const 278304) "a") (data (i32.const 278307) "a") (data (i32.const 278310) "a") (data (i32.const 278313) "a") (data (i32.const 278316) "a") (data (i32.const 278319) "a") (data (i32.const 278322) "a") (data (i32.const 278325) "a") (data (i32.const 278328) "a") (data (i32.const 278331) "a") (data (i32.const 278334) "a") (data (i32.const 278337) "a") (data (i32.const 278340) "a") (data (i32.const 278343) "a") (data (i32.const 278346) "a") (data (i32.const 278349) "a") (data (i32.const 278352) "a") (data (i32.const 278355) "a") (data (i32.const 278358) "a") (data (i32.const 278361) "a") (data (i32.const 278364) "a") (data (i32.const 278367) "a") (data (i32.const 278370) "a") (data (i32.const 278373) "a") (data (i32.const 278376) "a") (data (i32.const 278379) "a") (data (i32.const 278382) "a") (data (i32.const 278385) "a") (data (i32.const 278388) "a") (data (i32.const 278391) "a") (data (i32.const 278394) "a") (data (i32.const 278397) "a") (data (i32.const 278400) "a") (data (i32.const 278403) "a") (data (i32.const 278406) "a") (data (i32.const 278409) "a") (data (i32.const 278412) "a") (data (i32.const 278415) "a") (data (i32.const 278418) "a") (data (i32.const 278421) "a") (data (i32.const 278424) "a") (data (i32.const 278427) "a") (data (i32.const 278430) "a") (data (i32.const 278433) "a") (data (i32.const 278436) "a") (data (i32.const 278439) "a") (data (i32.const 278442) "a") (data (i32.const 278445) "a") (data (i32.const 278448) "a") (data (i32.const 278451) "a") (data (i32.const 278454) "a") (data (i32.const 278457) "a") (data (i32.const 278460) "a") (data (i32.const 278463) "a") (data (i32.const 278466) "a") (data (i32.const 278469) "a") (data (i32.const 278472) "a") (data (i32.const 278475) "a") (data (i32.const 278478) "a") (data (i32.const 278481) "a") (data (i32.const 278484) "a") (data (i32.const 278487) "a") (data (i32.const 278490) "a") (data (i32.const 278493) "a") (data (i32.const 278496) "a") (data (i32.const 278499) "a") (data (i32.const 278502) "a") (data (i32.const 278505) "a") (data (i32.const 278508) "a") (data (i32.const 278511) "a") (data (i32.const 278514) "a") (data (i32.const 278517) "a") (data (i32.const 278520) "a") (data (i32.const 278523) "a") (data (i32.const 278526) "a") (data (i32.const 278529) "a") (data (i32.const 278532) "a") (data (i32.const 278535) "a") (data (i32.const 278538) "a") (data (i32.const 278541) "a") (data (i32.const 278544) "a") (data (i32.const 278547) "a") (data (i32.const 278550) "a") (data (i32.const 278553) "a") (data (i32.const 278556) "a") (data (i32.const 278559) "a") (data (i32.const 278562) "a") (data (i32.const 278565) "a") (data (i32.const 278568) "a") (data (i32.const 278571) "a") (data (i32.const 278574) "a") (data (i32.const 278577) "a") (data (i32.const 278580) "a") (data (i32.const 278583) "a") (data (i32.const 278586) "a") (data (i32.const 278589) "a") (data (i32.const 278592) "a") (data (i32.const 278595) "a") (data (i32.const 278598) "a") (data (i32.const 278601) "a") (data (i32.const 278604) "a") (data (i32.const 278607) "a") (data (i32.const 278610) "a") (data (i32.const 278613) "a") (data (i32.const 278616) "a") (data (i32.const 278619) "a") (data (i32.const 278622) "a") (data (i32.const 278625) "a") (data (i32.const 278628) "a") (data (i32.const 278631) "a") (data (i32.const 278634) "a") (data (i32.const 278637) "a") (data (i32.const 278640) "a") (data (i32.const 278643) "a") (data (i32.const 278646) "a") (data (i32.const 278649) "a") (data (i32.const 278652) "a") (data (i32.const 278655) "a") (data (i32.const 278658) "a") (data (i32.const 278661) "a") (data (i32.const 278664) "a") (data (i32.const 278667) "a") (data (i32.const 278670) "a") (data (i32.const 278673) "a") (data (i32.const 278676) "a") (data (i32.const 278679) "a") (data (i32.const 278682) "a") (data (i32.const 278685) "a") (data (i32.const 278688) "a") (data (i32.const 278691) "a") (data (i32.const 278694) "a") (data (i32.const 278697) "a") (data (i32.const 278700) "a") (data (i32.const 278703) "a") (data (i32.const 278706) "a") (data (i32.const 278709) "a") (data (i32.const 278712) "a") (data (i32.const 278715) "a") (data (i32.const 278718) "a") (data (i32.const 278721) "a") (data (i32.const 278724) "a") (data (i32.const 278727) "a") (data (i32.const 278730) "a") (data (i32.const 278733) "a") (data (i32.const 278736) "a") (data (i32.const 278739) "a") (data (i32.const 278742) "a") (data (i32.const 278745) "a") (data (i32.const 278748) "a") (data (i32.const 278751) "a") (data (i32.const 278754) "a") (data (i32.const 278757) "a") (data (i32.const 278760) "a") (data (i32.const 278763) "a") (data (i32.const 278766) "a") (data (i32.const 278769) "a") (data (i32.const 278772) "a") (data (i32.const 278775) "a") (data (i32.const 278778) "a") (data (i32.const 278781) "a") (data (i32.const 278784) "a") (data (i32.const 278787) "a") (data (i32.const 278790) "a") (data (i32.const 278793) "a") (data (i32.const 278796) "a") (data (i32.const 278799) "a") (data (i32.const 278802) "a") (data (i32.const 278805) "a") (data (i32.const 278808) "a") (data (i32.const 278811) "a") (data (i32.const 278814) "a") (data (i32.const 278817) "a") (data (i32.const 278820) "a") (data (i32.const 278823) "a") (data (i32.const 278826) "a") (data (i32.const 278829) "a") (data (i32.const 278832) "a") (data (i32.const 278835) "a") (data (i32.const 278838) "a") (data (i32.const 278841) "a") (data (i32.const 278844) "a") (data (i32.const 278847) "a") (data (i32.const 278850) "a") (data (i32.const 278853) "a") (data (i32.const 278856) "a") (data (i32.const 278859) "a") (data (i32.const 278862) "a") (data (i32.const 278865) "a") (data (i32.const 278868) "a") (data (i32.const 278871) "a") (data (i32.const 278874) "a") (data (i32.const 278877) "a") (data (i32.const 278880) "a") (data (i32.const 278883) "a") (data (i32.const 278886) "a") (data (i32.const 278889) "a") (data (i32.const 278892) "a") (data (i32.const 278895) "a") (data (i32.const 278898) "a") (data (i32.const 278901) "a") (data (i32.const 278904) "a") (data (i32.const 278907) "a") (data (i32.const 278910) "a") (data (i32.const 278913) "a") (data (i32.const 278916) "a") (data (i32.const 278919) "a") (data (i32.const 278922) "a") (data (i32.const 278925) "a") (data (i32.const 278928) "a") (data (i32.const 278931) "a") (data (i32.const 278934) "a") (data (i32.const 278937) "a") (data (i32.const 278940) "a") (data (i32.const 278943) "a") (data (i32.const 278946) "a") (data (i32.const 278949) "a") (data (i32.const 278952) "a") (data (i32.const 278955) "a") (data (i32.const 278958) "a") (data (i32.const 278961) "a") (data (i32.const 278964) "a") (data (i32.const 278967) "a") (data (i32.const 278970) "a") (data (i32.const 278973) "a") (data (i32.const 278976) "a") (data (i32.const 278979) "a") (data (i32.const 278982) "a") (data (i32.const 278985) "a") (data (i32.const 278988) "a") (data (i32.const 278991) "a") (data (i32.const 278994) "a") (data (i32.const 278997) "a") (data (i32.const 279000) "a") (data (i32.const 279003) "a") (data (i32.const 279006) "a") (data (i32.const 279009) "a") (data (i32.const 279012) "a") (data (i32.const 279015) "a") (data (i32.const 279018) "a") (data (i32.const 279021) "a") (data (i32.const 279024) "a") (data (i32.const 279027) "a") (data (i32.const 279030) "a") (data (i32.const 279033) "a") (data (i32.const 279036) "a") (data (i32.const 279039) "a") (data (i32.const 279042) "a") (data (i32.const 279045) "a") (data (i32.const 279048) "a") (data (i32.const 279051) "a") (data (i32.const 279054) "a") (data (i32.const 279057) "a") (data (i32.const 279060) "a") (data (i32.const 279063) "a") (data (i32.const 279066) "a") (data (i32.const 279069) "a") (data (i32.const 279072) "a") (data (i32.const 279075) "a") (data (i32.const 279078) "a") (data (i32.const 279081) "a") (data (i32.const 279084) "a") (data (i32.const 279087) "a") (data (i32.const 279090) "a") (data (i32.const 279093) "a") (data (i32.const 279096) "a") (data (i32.const 279099) "a") (data (i32.const 279102) "a") (data (i32.const 279105) "a") (data (i32.const 279108) "a") (data (i32.const 279111) "a") (data (i32.const 279114) "a") (data (i32.const 279117) "a") (data (i32.const 279120) "a") (data (i32.const 279123) "a") (data (i32.const 279126) "a") (data (i32.const 279129) "a") (data (i32.const 279132) "a") (data (i32.const 279135) "a") (data (i32.const 279138) "a") (data (i32.const 279141) "a") (data (i32.const 279144) "a") (data (i32.const 279147) "a") (data (i32.const 279150) "a") (data (i32.const 279153) "a") (data (i32.const 279156) "a") (data (i32.const 279159) "a") (data (i32.const 279162) "a") (data (i32.const 279165) "a") (data (i32.const 279168) "a") (data (i32.const 279171) "a") (data (i32.const 279174) "a") (data (i32.const 279177) "a") (data (i32.const 279180) "a") (data (i32.const 279183) "a") (data (i32.const 279186) "a") (data (i32.const 279189) "a") (data (i32.const 279192) "a") (data (i32.const 279195) "a") (data (i32.const 279198) "a") (data (i32.const 279201) "a") (data (i32.const 279204) "a") (data (i32.const 279207) "a") (data (i32.const 279210) "a") (data (i32.const 279213) "a") (data (i32.const 279216) "a") (data (i32.const 279219) "a") (data (i32.const 279222) "a") (data (i32.const 279225) "a") (data (i32.const 279228) "a") (data (i32.const 279231) "a") (data (i32.const 279234) "a") (data (i32.const 279237) "a") (data (i32.const 279240) "a") (data (i32.const 279243) "a") (data (i32.const 279246) "a") (data (i32.const 279249) "a") (data (i32.const 279252) "a") (data (i32.const 279255) "a") (data (i32.const 279258) "a") (data (i32.const 279261) "a") (data (i32.const 279264) "a") (data (i32.const 279267) "a") (data (i32.const 279270) "a") (data (i32.const 279273) "a") (data (i32.const 279276) "a") (data (i32.const 279279) "a") (data (i32.const 279282) "a") (data (i32.const 279285) "a") (data (i32.const 279288) "a") (data (i32.const 279291) "a") (data (i32.const 279294) "a") (data (i32.const 279297) "a") (data (i32.const 279300) "a") (data (i32.const 279303) "a") (data (i32.const 279306) "a") (data (i32.const 279309) "a") (data (i32.const 279312) "a") (data (i32.const 279315) "a") (data (i32.const 279318) "a") (data (i32.const 279321) "a") (data (i32.const 279324) "a") (data (i32.const 279327) "a") (data (i32.const 279330) "a") (data (i32.const 279333) "a") (data (i32.const 279336) "a") (data (i32.const 279339) "a") (data (i32.const 279342) "a") (data (i32.const 279345) "a") (data (i32.const 279348) "a") (data (i32.const 279351) "a") (data (i32.const 279354) "a") (data (i32.const 279357) "a") (data (i32.const 279360) "a") (data (i32.const 279363) "a") (data (i32.const 279366) "a") (data (i32.const 279369) "a") (data (i32.const 279372) "a") (data (i32.const 279375) "a") (data (i32.const 279378) "a") (data (i32.const 279381) "a") (data (i32.const 279384) "a") (data (i32.const 279387) "a") (data (i32.const 279390) "a") (data (i32.const 279393) "a") (data (i32.const 279396) "a") (data (i32.const 279399) "a") (data (i32.const 279402) "a") (data (i32.const 279405) "a") (data (i32.const 279408) "a") (data (i32.const 279411) "a") (data (i32.const 279414) "a") (data (i32.const 279417) "a") (data (i32.const 279420) "a") (data (i32.const 279423) "a") (data (i32.const 279426) "a") (data (i32.const 279429) "a") (data (i32.const 279432) "a") (data (i32.const 279435) "a") (data (i32.const 279438) "a") (data (i32.const 279441) "a") (data (i32.const 279444) "a") (data (i32.const 279447) "a") (data (i32.const 279450) "a") (data (i32.const 279453) "a") (data (i32.const 279456) "a") (data (i32.const 279459) "a") (data (i32.const 279462) "a") (data (i32.const 279465) "a") (data (i32.const 279468) "a") (data (i32.const 279471) "a") (data (i32.const 279474) "a") (data (i32.const 279477) "a") (data (i32.const 279480) "a") (data (i32.const 279483) "a") (data (i32.const 279486) "a") (data (i32.const 279489) "a") (data (i32.const 279492) "a") (data (i32.const 279495) "a") (data (i32.const 279498) "a") (data (i32.const 279501) "a") (data (i32.const 279504) "a") (data (i32.const 279507) "a") (data (i32.const 279510) "a") (data (i32.const 279513) "a") (data (i32.const 279516) "a") (data (i32.const 279519) "a") (data (i32.const 279522) "a") (data (i32.const 279525) "a") (data (i32.const 279528) "a") (data (i32.const 279531) "a") (data (i32.const 279534) "a") (data (i32.const 279537) "a") (data (i32.const 279540) "a") (data (i32.const 279543) "a") (data (i32.const 279546) "a") (data (i32.const 279549) "a") (data (i32.const 279552) "a") (data (i32.const 279555) "a") (data (i32.const 279558) "a") (data (i32.const 279561) "a") (data (i32.const 279564) "a") (data (i32.const 279567) "a") (data (i32.const 279570) "a") (data (i32.const 279573) "a") (data (i32.const 279576) "a") (data (i32.const 279579) "a") (data (i32.const 279582) "a") (data (i32.const 279585) "a") (data (i32.const 279588) "a") (data (i32.const 279591) "a") (data (i32.const 279594) "a") (data (i32.const 279597) "a") (data (i32.const 279600) "a") (data (i32.const 279603) "a") (data (i32.const 279606) "a") (data (i32.const 279609) "a") (data (i32.const 279612) "a") (data (i32.const 279615) "a") (data (i32.const 279618) "a") (data (i32.const 279621) "a") (data (i32.const 279624) "a") (data (i32.const 279627) "a") (data (i32.const 279630) "a") (data (i32.const 279633) "a") (data (i32.const 279636) "a") (data (i32.const 279639) "a") (data (i32.const 279642) "a") (data (i32.const 279645) "a") (data (i32.const 279648) "a") (data (i32.const 279651) "a") (data (i32.const 279654) "a") (data (i32.const 279657) "a") (data (i32.const 279660) "a") (data (i32.const 279663) "a") (data (i32.const 279666) "a") (data (i32.const 279669) "a") (data (i32.const 279672) "a") (data (i32.const 279675) "a") (data (i32.const 279678) "a") (data (i32.const 279681) "a") (data (i32.const 279684) "a") (data (i32.const 279687) "a") (data (i32.const 279690) "a") (data (i32.const 279693) "a") (data (i32.const 279696) "a") (data (i32.const 279699) "a") (data (i32.const 279702) "a") (data (i32.const 279705) "a") (data (i32.const 279708) "a") (data (i32.const 279711) "a") (data (i32.const 279714) "a") (data (i32.const 279717) "a") (data (i32.const 279720) "a") (data (i32.const 279723) "a") (data (i32.const 279726) "a") (data (i32.const 279729) "a") (data (i32.const 279732) "a") (data (i32.const 279735) "a") (data (i32.const 279738) "a") (data (i32.const 279741) "a") (data (i32.const 279744) "a") (data (i32.const 279747) "a") (data (i32.const 279750) "a") (data (i32.const 279753) "a") (data (i32.const 279756) "a") (data (i32.const 279759) "a") (data (i32.const 279762) "a") (data (i32.const 279765) "a") (data (i32.const 279768) "a") (data (i32.const 279771) "a") (data (i32.const 279774) "a") (data (i32.const 279777) "a") (data (i32.const 279780) "a") (data (i32.const 279783) "a") (data (i32.const 279786) "a") (data (i32.const 279789) "a") (data (i32.const 279792) "a") (data (i32.const 279795) "a") (data (i32.const 279798) "a") (data (i32.const 279801) "a") (data (i32.const 279804) "a") (data (i32.const 279807) "a") (data (i32.const 279810) "a") (data (i32.const 279813) "a") (data (i32.const 279816) "a") (data (i32.const 279819) "a") (data (i32.const 279822) "a") (data (i32.const 279825) "a") (data (i32.const 279828) "a") (data (i32.const 279831) "a") (data (i32.const 279834) "a") (data (i32.const 279837) "a") (data (i32.const 279840) "a") (data (i32.const 279843) "a") (data (i32.const 279846) "a") (data (i32.const 279849) "a") (data (i32.const 279852) "a") (data (i32.const 279855) "a") (data (i32.const 279858) "a") (data (i32.const 279861) "a") (data (i32.const 279864) "a") (data (i32.const 279867) "a") (data (i32.const 279870) "a") (data (i32.const 279873) "a") (data (i32.const 279876) "a") (data (i32.const 279879) "a") (data (i32.const 279882) "a") (data (i32.const 279885) "a") (data (i32.const 279888) "a") (data (i32.const 279891) "a") (data (i32.const 279894) "a") (data (i32.const 279897) "a") (data (i32.const 279900) "a") (data (i32.const 279903) "a") (data (i32.const 279906) "a") (data (i32.const 279909) "a") (data (i32.const 279912) "a") (data (i32.const 279915) "a") (data (i32.const 279918) "a") (data (i32.const 279921) "a") (data (i32.const 279924) "a") (data (i32.const 279927) "a") (data (i32.const 279930) "a") (data (i32.const 279933) "a") (data (i32.const 279936) "a") (data (i32.const 279939) "a") (data (i32.const 279942) "a") (data (i32.const 279945) "a") (data (i32.const 279948) "a") (data (i32.const 279951) "a") (data (i32.const 279954) "a") (data (i32.const 279957) "a") (data (i32.const 279960) "a") (data (i32.const 279963) "a") (data (i32.const 279966) "a") (data (i32.const 279969) "a") (data (i32.const 279972) "a") (data (i32.const 279975) "a") (data (i32.const 279978) "a") (data (i32.const 279981) "a") (data (i32.const 279984) "a") (data (i32.const 279987) "a") (data (i32.const 279990) "a") (data (i32.const 279993) "a") (data (i32.const 279996) "a") (data (i32.const 279999) "a") (data (i32.const 280002) "a") (data (i32.const 280005) "a") (data (i32.const 280008) "a") (data (i32.const 280011) "a") (data (i32.const 280014) "a") (data (i32.const 280017) "a") (data (i32.const 280020) "a") (data (i32.const 280023) "a") (data (i32.const 280026) "a") (data (i32.const 280029) "a") (data (i32.const 280032) "a") (data (i32.const 280035) "a") (data (i32.const 280038) "a") (data (i32.const 280041) "a") (data (i32.const 280044) "a") (data (i32.const 280047) "a") (data (i32.const 280050) "a") (data (i32.const 280053) "a") (data (i32.const 280056) "a") (data (i32.const 280059) "a") (data (i32.const 280062) "a") (data (i32.const 280065) "a") (data (i32.const 280068) "a") (data (i32.const 280071) "a") (data (i32.const 280074) "a") (data (i32.const 280077) "a") (data (i32.const 280080) "a") (data (i32.const 280083) "a") (data (i32.const 280086) "a") (data (i32.const 280089) "a") (data (i32.const 280092) "a") (data (i32.const 280095) "a") (data (i32.const 280098) "a") (data (i32.const 280101) "a") (data (i32.const 280104) "a") (data (i32.const 280107) "a") (data (i32.const 280110) "a") (data (i32.const 280113) "a") (data (i32.const 280116) "a") (data (i32.const 280119) "a") (data (i32.const 280122) "a") (data (i32.const 280125) "a") (data (i32.const 280128) "a") (data (i32.const 280131) "a") (data (i32.const 280134) "a") (data (i32.const 280137) "a") (data (i32.const 280140) "a") (data (i32.const 280143) "a") (data (i32.const 280146) "a") (data (i32.const 280149) "a") (data (i32.const 280152) "a") (data (i32.const 280155) "a") (data (i32.const 280158) "a") (data (i32.const 280161) "a") (data (i32.const 280164) "a") (data (i32.const 280167) "a") (data (i32.const 280170) "a") (data (i32.const 280173) "a") (data (i32.const 280176) "a") (data (i32.const 280179) "a") (data (i32.const 280182) "a") (data (i32.const 280185) "a") (data (i32.const 280188) "a") (data (i32.const 280191) "a") (data (i32.const 280194) "a") (data (i32.const 280197) "a") (data (i32.const 280200) "a") (data (i32.const 280203) "a") (data (i32.const 280206) "a") (data (i32.const 280209) "a") (data (i32.const 280212) "a") (data (i32.const 280215) "a") (data (i32.const 280218) "a") (data (i32.const 280221) "a") (data (i32.const 280224) "a") (data (i32.const 280227) "a") (data (i32.const 280230) "a") (data (i32.const 280233) "a") (data (i32.const 280236) "a") (data (i32.const 280239) "a") (data (i32.const 280242) "a") (data (i32.const 280245) "a") (data (i32.const 280248) "a") (data (i32.const 280251) "a") (data (i32.const 280254) "a") (data (i32.const 280257) "a") (data (i32.const 280260) "a") (data (i32.const 280263) "a") (data (i32.const 280266) "a") (data (i32.const 280269) "a") (data (i32.const 280272) "a") (data (i32.const 280275) "a") (data (i32.const 280278) "a") (data (i32.const 280281) "a") (data (i32.const 280284) "a") (data (i32.const 280287) "a") (data (i32.const 280290) "a") (data (i32.const 280293) "a") (data (i32.const 280296) "a") (data (i32.const 280299) "a") (data (i32.const 280302) "a") (data (i32.const 280305) "a") (data (i32.const 280308) "a") (data (i32.const 280311) "a") (data (i32.const 280314) "a") (data (i32.const 280317) "a") (data (i32.const 280320) "a") (data (i32.const 280323) "a") (data (i32.const 280326) "a") (data (i32.const 280329) "a") (data (i32.const 280332) "a") (data (i32.const 280335) "a") (data (i32.const 280338) "a") (data (i32.const 280341) "a") (data (i32.const 280344) "a") (data (i32.const 280347) "a") (data (i32.const 280350) "a") (data (i32.const 280353) "a") (data (i32.const 280356) "a") (data (i32.const 280359) "a") (data (i32.const 280362) "a") (data (i32.const 280365) "a") (data (i32.const 280368) "a") (data (i32.const 280371) "a") (data (i32.const 280374) "a") (data (i32.const 280377) "a") (data (i32.const 280380) "a") (data (i32.const 280383) "a") (data (i32.const 280386) "a") (data (i32.const 280389) "a") (data (i32.const 280392) "a") (data (i32.const 280395) "a") (data (i32.const 280398) "a") (data (i32.const 280401) "a") (data (i32.const 280404) "a") (data (i32.const 280407) "a") (data (i32.const 280410) "a") (data (i32.const 280413) "a") (data (i32.const 280416) "a") (data (i32.const 280419) "a") (data (i32.const 280422) "a") (data (i32.const 280425) "a") (data (i32.const 280428) "a") (data (i32.const 280431) "a") (data (i32.const 280434) "a") (data (i32.const 280437) "a") (data (i32.const 280440) "a") (data (i32.const 280443) "a") (data (i32.const 280446) "a") (data (i32.const 280449) "a") (data (i32.const 280452) "a") (data (i32.const 280455) "a") (data (i32.const 280458) "a") (data (i32.const 280461) "a") (data (i32.const 280464) "a") (data (i32.const 280467) "a") (data (i32.const 280470) "a") (data (i32.const 280473) "a") (data (i32.const 280476) "a") (data (i32.const 280479) "a") (data (i32.const 280482) "a") (data (i32.const 280485) "a") (data (i32.const 280488) "a") (data (i32.const 280491) "a") (data (i32.const 280494) "a") (data (i32.const 280497) "a") (data (i32.const 280500) "a") (data (i32.const 280503) "a") (data (i32.const 280506) "a") (data (i32.const 280509) "a") (data (i32.const 280512) "a") (data (i32.const 280515) "a") (data (i32.const 280518) "a") (data (i32.const 280521) "a") (data (i32.const 280524) "a") (data (i32.const 280527) "a") (data (i32.const 280530) "a") (data (i32.const 280533) "a") (data (i32.const 280536) "a") (data (i32.const 280539) "a") (data (i32.const 280542) "a") (data (i32.const 280545) "a") (data (i32.const 280548) "a") (data (i32.const 280551) "a") (data (i32.const 280554) "a") (data (i32.const 280557) "a") (data (i32.const 280560) "a") (data (i32.const 280563) "a") (data (i32.const 280566) "a") (data (i32.const 280569) "a") (data (i32.const 280572) "a") (data (i32.const 280575) "a") (data (i32.const 280578) "a") (data (i32.const 280581) "a") (data (i32.const 280584) "a") (data (i32.const 280587) "a") (data (i32.const 280590) "a") (data (i32.const 280593) "a") (data (i32.const 280596) "a") (data (i32.const 280599) "a") (data (i32.const 280602) "a") (data (i32.const 280605) "a") (data (i32.const 280608) "a") (data (i32.const 280611) "a") (data (i32.const 280614) "a") (data (i32.const 280617) "a") (data (i32.const 280620) "a") (data (i32.const 280623) "a") (data (i32.const 280626) "a") (data (i32.const 280629) "a") (data (i32.const 280632) "a") (data (i32.const 280635) "a") (data (i32.const 280638) "a") (data (i32.const 280641) "a") (data (i32.const 280644) "a") (data (i32.const 280647) "a") (data (i32.const 280650) "a") (data (i32.const 280653) "a") (data (i32.const 280656) "a") (data (i32.const 280659) "a") (data (i32.const 280662) "a") (data (i32.const 280665) "a") (data (i32.const 280668) "a") (data (i32.const 280671) "a") (data (i32.const 280674) "a") (data (i32.const 280677) "a") (data (i32.const 280680) "a") (data (i32.const 280683) "a") (data (i32.const 280686) "a") (data (i32.const 280689) "a") (data (i32.const 280692) "a") (data (i32.const 280695) "a") (data (i32.const 280698) "a") (data (i32.const 280701) "a") (data (i32.const 280704) "a") (data (i32.const 280707) "a") (data (i32.const 280710) "a") (data (i32.const 280713) "a") (data (i32.const 280716) "a") (data (i32.const 280719) "a") (data (i32.const 280722) "a") (data (i32.const 280725) "a") (data (i32.const 280728) "a") (data (i32.const 280731) "a") (data (i32.const 280734) "a") (data (i32.const 280737) "a") (data (i32.const 280740) "a") (data (i32.const 280743) "a") (data (i32.const 280746) "a") (data (i32.const 280749) "a") (data (i32.const 280752) "a") (data (i32.const 280755) "a") (data (i32.const 280758) "a") (data (i32.const 280761) "a") (data (i32.const 280764) "a") (data (i32.const 280767) "a") (data (i32.const 280770) "a") (data (i32.const 280773) "a") (data (i32.const 280776) "a") (data (i32.const 280779) "a") (data (i32.const 280782) "a") (data (i32.const 280785) "a") (data (i32.const 280788) "a") (data (i32.const 280791) "a") (data (i32.const 280794) "a") (data (i32.const 280797) "a") (data (i32.const 280800) "a") (data (i32.const 280803) "a") (data (i32.const 280806) "a") (data (i32.const 280809) "a") (data (i32.const 280812) "a") (data (i32.const 280815) "a") (data (i32.const 280818) "a") (data (i32.const 280821) "a") (data (i32.const 280824) "a") (data (i32.const 280827) "a") (data (i32.const 280830) "a") (data (i32.const 280833) "a") (data (i32.const 280836) "a") (data (i32.const 280839) "a") (data (i32.const 280842) "a") (data (i32.const 280845) "a") (data (i32.const 280848) "a") (data (i32.const 280851) "a") (data (i32.const 280854) "a") (data (i32.const 280857) "a") (data (i32.const 280860) "a") (data (i32.const 280863) "a") (data (i32.const 280866) "a") (data (i32.const 280869) "a") (data (i32.const 280872) "a") (data (i32.const 280875) "a") (data (i32.const 280878) "a") (data (i32.const 280881) "a") (data (i32.const 280884) "a") (data (i32.const 280887) "a") (data (i32.const 280890) "a") (data (i32.const 280893) "a") (data (i32.const 280896) "a") (data (i32.const 280899) "a") (data (i32.const 280902) "a") (data (i32.const 280905) "a") (data (i32.const 280908) "a") (data (i32.const 280911) "a") (data (i32.const 280914) "a") (data (i32.const 280917) "a") (data (i32.const 280920) "a") (data (i32.const 280923) "a") (data (i32.const 280926) "a") (data (i32.const 280929) "a") (data (i32.const 280932) "a") (data (i32.const 280935) "a") (data (i32.const 280938) "a") (data (i32.const 280941) "a") (data (i32.const 280944) "a") (data (i32.const 280947) "a") (data (i32.const 280950) "a") (data (i32.const 280953) "a") (data (i32.const 280956) "a") (data (i32.const 280959) "a") (data (i32.const 280962) "a") (data (i32.const 280965) "a") (data (i32.const 280968) "a") (data (i32.const 280971) "a") (data (i32.const 280974) "a") (data (i32.const 280977) "a") (data (i32.const 280980) "a") (data (i32.const 280983) "a") (data (i32.const 280986) "a") (data (i32.const 280989) "a") (data (i32.const 280992) "a") (data (i32.const 280995) "a") (data (i32.const 280998) "a") (data (i32.const 281001) "a") (data (i32.const 281004) "a") (data (i32.const 281007) "a") (data (i32.const 281010) "a") (data (i32.const 281013) "a") (data (i32.const 281016) "a") (data (i32.const 281019) "a") (data (i32.const 281022) "a") (data (i32.const 281025) "a") (data (i32.const 281028) "a") (data (i32.const 281031) "a") (data (i32.const 281034) "a") (data (i32.const 281037) "a") (data (i32.const 281040) "a") (data (i32.const 281043) "a") (data (i32.const 281046) "a") (data (i32.const 281049) "a") (data (i32.const 281052) "a") (data (i32.const 281055) "a") (data (i32.const 281058) "a") (data (i32.const 281061) "a") (data (i32.const 281064) "a") (data (i32.const 281067) "a") (data (i32.const 281070) "a") (data (i32.const 281073) "a") (data (i32.const 281076) "a") (data (i32.const 281079) "a") (data (i32.const 281082) "a") (data (i32.const 281085) "a") (data (i32.const 281088) "a") (data (i32.const 281091) "a") (data (i32.const 281094) "a") (data (i32.const 281097) "a") (data (i32.const 281100) "a") (data (i32.const 281103) "a") (data (i32.const 281106) "a") (data (i32.const 281109) "a") (data (i32.const 281112) "a") (data (i32.const 281115) "a") (data (i32.const 281118) "a") (data (i32.const 281121) "a") (data (i32.const 281124) "a") (data (i32.const 281127) "a") (data (i32.const 281130) "a") (data (i32.const 281133) "a") (data (i32.const 281136) "a") (data (i32.const 281139) "a") (data (i32.const 281142) "a") (data (i32.const 281145) "a") (data (i32.const 281148) "a") (data (i32.const 281151) "a") (data (i32.const 281154) "a") (data (i32.const 281157) "a") (data (i32.const 281160) "a") (data (i32.const 281163) "a") (data (i32.const 281166) "a") (data (i32.const 281169) "a") (data (i32.const 281172) "a") (data (i32.const 281175) "a") (data (i32.const 281178) "a") (data (i32.const 281181) "a") (data (i32.const 281184) "a") (data (i32.const 281187) "a") (data (i32.const 281190) "a") (data (i32.const 281193) "a") (data (i32.const 281196) "a") (data (i32.const 281199) "a") (data (i32.const 281202) "a") (data (i32.const 281205) "a") (data (i32.const 281208) "a") (data (i32.const 281211) "a") (data (i32.const 281214) "a") (data (i32.const 281217) "a") (data (i32.const 281220) "a") (data (i32.const 281223) "a") (data (i32.const 281226) "a") (data (i32.const 281229) "a") (data (i32.const 281232) "a") (data (i32.const 281235) "a") (data (i32.const 281238) "a") (data (i32.const 281241) "a") (data (i32.const 281244) "a") (data (i32.const 281247) "a") (data (i32.const 281250) "a") (data (i32.const 281253) "a") (data (i32.const 281256) "a") (data (i32.const 281259) "a") (data (i32.const 281262) "a") (data (i32.const 281265) "a") (data (i32.const 281268) "a") (data (i32.const 281271) "a") (data (i32.const 281274) "a") (data (i32.const 281277) "a") (data (i32.const 281280) "a") (data (i32.const 281283) "a") (data (i32.const 281286) "a") (data (i32.const 281289) "a") (data (i32.const 281292) "a") (data (i32.const 281295) "a") (data (i32.const 281298) "a") (data (i32.const 281301) "a") (data (i32.const 281304) "a") (data (i32.const 281307) "a") (data (i32.const 281310) "a") (data (i32.const 281313) "a") (data (i32.const 281316) "a") (data (i32.const 281319) "a") (data (i32.const 281322) "a") (data (i32.const 281325) "a") (data (i32.const 281328) "a") (data (i32.const 281331) "a") (data (i32.const 281334) "a") (data (i32.const 281337) "a") (data (i32.const 281340) "a") (data (i32.const 281343) "a") (data (i32.const 281346) "a") (data (i32.const 281349) "a") (data (i32.const 281352) "a") (data (i32.const 281355) "a") (data (i32.const 281358) "a") (data (i32.const 281361) "a") (data (i32.const 281364) "a") (data (i32.const 281367) "a") (data (i32.const 281370) "a") (data (i32.const 281373) "a") (data (i32.const 281376) "a") (data (i32.const 281379) "a") (data (i32.const 281382) "a") (data (i32.const 281385) "a") (data (i32.const 281388) "a") (data (i32.const 281391) "a") (data (i32.const 281394) "a") (data (i32.const 281397) "a") (data (i32.const 281400) "a") (data (i32.const 281403) "a") (data (i32.const 281406) "a") (data (i32.const 281409) "a") (data (i32.const 281412) "a") (data (i32.const 281415) "a") (data (i32.const 281418) "a") (data (i32.const 281421) "a") (data (i32.const 281424) "a") (data (i32.const 281427) "a") (data (i32.const 281430) "a") (data (i32.const 281433) "a") (data (i32.const 281436) "a") (data (i32.const 281439) "a") (data (i32.const 281442) "a") (data (i32.const 281445) "a") (data (i32.const 281448) "a") (data (i32.const 281451) "a") (data (i32.const 281454) "a") (data (i32.const 281457) "a") (data (i32.const 281460) "a") (data (i32.const 281463) "a") (data (i32.const 281466) "a") (data (i32.const 281469) "a") (data (i32.const 281472) "a") (data (i32.const 281475) "a") (data (i32.const 281478) "a") (data (i32.const 281481) "a") (data (i32.const 281484) "a") (data (i32.const 281487) "a") (data (i32.const 281490) "a") (data (i32.const 281493) "a") (data (i32.const 281496) "a") (data (i32.const 281499) "a") (data (i32.const 281502) "a") (data (i32.const 281505) "a") (data (i32.const 281508) "a") (data (i32.const 281511) "a") (data (i32.const 281514) "a") (data (i32.const 281517) "a") (data (i32.const 281520) "a") (data (i32.const 281523) "a") (data (i32.const 281526) "a") (data (i32.const 281529) "a") (data (i32.const 281532) "a") (data (i32.const 281535) "a") (data (i32.const 281538) "a") (data (i32.const 281541) "a") (data (i32.const 281544) "a") (data (i32.const 281547) "a") (data (i32.const 281550) "a") (data (i32.const 281553) "a") (data (i32.const 281556) "a") (data (i32.const 281559) "a") (data (i32.const 281562) "a") (data (i32.const 281565) "a") (data (i32.const 281568) "a") (data (i32.const 281571) "a") (data (i32.const 281574) "a") (data (i32.const 281577) "a") (data (i32.const 281580) "a") (data (i32.const 281583) "a") (data (i32.const 281586) "a") (data (i32.const 281589) "a") (data (i32.const 281592) "a") (data (i32.const 281595) "a") (data (i32.const 281598) "a") (data (i32.const 281601) "a") (data (i32.const 281604) "a") (data (i32.const 281607) "a") (data (i32.const 281610) "a") (data (i32.const 281613) "a") (data (i32.const 281616) "a") (data (i32.const 281619) "a") (data (i32.const 281622) "a") (data (i32.const 281625) "a") (data (i32.const 281628) "a") (data (i32.const 281631) "a") (data (i32.const 281634) "a") (data (i32.const 281637) "a") (data (i32.const 281640) "a") (data (i32.const 281643) "a") (data (i32.const 281646) "a") (data (i32.const 281649) "a") (data (i32.const 281652) "a") (data (i32.const 281655) "a") (data (i32.const 281658) "a") (data (i32.const 281661) "a") (data (i32.const 281664) "a") (data (i32.const 281667) "a") (data (i32.const 281670) "a") (data (i32.const 281673) "a") (data (i32.const 281676) "a") (data (i32.const 281679) "a") (data (i32.const 281682) "a") (data (i32.const 281685) "a") (data (i32.const 281688) "a") (data (i32.const 281691) "a") (data (i32.const 281694) "a") (data (i32.const 281697) "a") (data (i32.const 281700) "a") (data (i32.const 281703) "a") (data (i32.const 281706) "a") (data (i32.const 281709) "a") (data (i32.const 281712) "a") (data (i32.const 281715) "a") (data (i32.const 281718) "a") (data (i32.const 281721) "a") (data (i32.const 281724) "a") (data (i32.const 281727) "a") (data (i32.const 281730) "a") (data (i32.const 281733) "a") (data (i32.const 281736) "a") (data (i32.const 281739) "a") (data (i32.const 281742) "a") (data (i32.const 281745) "a") (data (i32.const 281748) "a") (data (i32.const 281751) "a") (data (i32.const 281754) "a") (data (i32.const 281757) "a") (data (i32.const 281760) "a") (data (i32.const 281763) "a") (data (i32.const 281766) "a") (data (i32.const 281769) "a") (data (i32.const 281772) "a") (data (i32.const 281775) "a") (data (i32.const 281778) "a") (data (i32.const 281781) "a") (data (i32.const 281784) "a") (data (i32.const 281787) "a") (data (i32.const 281790) "a") (data (i32.const 281793) "a") (data (i32.const 281796) "a") (data (i32.const 281799) "a") (data (i32.const 281802) "a") (data (i32.const 281805) "a") (data (i32.const 281808) "a") (data (i32.const 281811) "a") (data (i32.const 281814) "a") (data (i32.const 281817) "a") (data (i32.const 281820) "a") (data (i32.const 281823) "a") (data (i32.const 281826) "a") (data (i32.const 281829) "a") (data (i32.const 281832) "a") (data (i32.const 281835) "a") (data (i32.const 281838) "a") (data (i32.const 281841) "a") (data (i32.const 281844) "a") (data (i32.const 281847) "a") (data (i32.const 281850) "a") (data (i32.const 281853) "a") (data (i32.const 281856) "a") (data (i32.const 281859) "a") (data (i32.const 281862) "a") (data (i32.const 281865) "a") (data (i32.const 281868) "a") (data (i32.const 281871) "a") (data (i32.const 281874) "a") (data (i32.const 281877) "a") (data (i32.const 281880) "a") (data (i32.const 281883) "a") (data (i32.const 281886) "a") (data (i32.const 281889) "a") (data (i32.const 281892) "a") (data (i32.const 281895) "a") (data (i32.const 281898) "a") (data (i32.const 281901) "a") (data (i32.const 281904) "a") (data (i32.const 281907) "a") (data (i32.const 281910) "a") (data (i32.const 281913) "a") (data (i32.const 281916) "a") (data (i32.const 281919) "a") (data (i32.const 281922) "a") (data (i32.const 281925) "a") (data (i32.const 281928) "a") (data (i32.const 281931) "a") (data (i32.const 281934) "a") (data (i32.const 281937) "a") (data (i32.const 281940) "a") (data (i32.const 281943) "a") (data (i32.const 281946) "a") (data (i32.const 281949) "a") (data (i32.const 281952) "a") (data (i32.const 281955) "a") (data (i32.const 281958) "a") (data (i32.const 281961) "a") (data (i32.const 281964) "a") (data (i32.const 281967) "a") (data (i32.const 281970) "a") (data (i32.const 281973) "a") (data (i32.const 281976) "a") (data (i32.const 281979) "a") (data (i32.const 281982) "a") (data (i32.const 281985) "a") (data (i32.const 281988) "a") (data (i32.const 281991) "a") (data (i32.const 281994) "a") (data (i32.const 281997) "a") (data (i32.const 282000) "a") (data (i32.const 282003) "a") (data (i32.const 282006) "a") (data (i32.const 282009) "a") (data (i32.const 282012) "a") (data (i32.const 282015) "a") (data (i32.const 282018) "a") (data (i32.const 282021) "a") (data (i32.const 282024) "a") (data (i32.const 282027) "a") (data (i32.const 282030) "a") (data (i32.const 282033) "a") (data (i32.const 282036) "a") (data (i32.const 282039) "a") (data (i32.const 282042) "a") (data (i32.const 282045) "a") (data (i32.const 282048) "a") (data (i32.const 282051) "a") (data (i32.const 282054) "a") (data (i32.const 282057) "a") (data (i32.const 282060) "a") (data (i32.const 282063) "a") (data (i32.const 282066) "a") (data (i32.const 282069) "a") (data (i32.const 282072) "a") (data (i32.const 282075) "a") (data (i32.const 282078) "a") (data (i32.const 282081) "a") (data (i32.const 282084) "a") (data (i32.const 282087) "a") (data (i32.const 282090) "a") (data (i32.const 282093) "a") (data (i32.const 282096) "a") (data (i32.const 282099) "a") (data (i32.const 282102) "a") (data (i32.const 282105) "a") (data (i32.const 282108) "a") (data (i32.const 282111) "a") (data (i32.const 282114) "a") (data (i32.const 282117) "a") (data (i32.const 282120) "a") (data (i32.const 282123) "a") (data (i32.const 282126) "a") (data (i32.const 282129) "a") (data (i32.const 282132) "a") (data (i32.const 282135) "a") (data (i32.const 282138) "a") (data (i32.const 282141) "a") (data (i32.const 282144) "a") (data (i32.const 282147) "a") (data (i32.const 282150) "a") (data (i32.const 282153) "a") (data (i32.const 282156) "a") (data (i32.const 282159) "a") (data (i32.const 282162) "a") (data (i32.const 282165) "a") (data (i32.const 282168) "a") (data (i32.const 282171) "a") (data (i32.const 282174) "a") (data (i32.const 282177) "a") (data (i32.const 282180) "a") (data (i32.const 282183) "a") (data (i32.const 282186) "a") (data (i32.const 282189) "a") (data (i32.const 282192) "a") (data (i32.const 282195) "a") (data (i32.const 282198) "a") (data (i32.const 282201) "a") (data (i32.const 282204) "a") (data (i32.const 282207) "a") (data (i32.const 282210) "a") (data (i32.const 282213) "a") (data (i32.const 282216) "a") (data (i32.const 282219) "a") (data (i32.const 282222) "a") (data (i32.const 282225) "a") (data (i32.const 282228) "a") (data (i32.const 282231) "a") (data (i32.const 282234) "a") (data (i32.const 282237) "a") (data (i32.const 282240) "a") (data (i32.const 282243) "a") (data (i32.const 282246) "a") (data (i32.const 282249) "a") (data (i32.const 282252) "a") (data (i32.const 282255) "a") (data (i32.const 282258) "a") (data (i32.const 282261) "a") (data (i32.const 282264) "a") (data (i32.const 282267) "a") (data (i32.const 282270) "a") (data (i32.const 282273) "a") (data (i32.const 282276) "a") (data (i32.const 282279) "a") (data (i32.const 282282) "a") (data (i32.const 282285) "a") (data (i32.const 282288) "a") (data (i32.const 282291) "a") (data (i32.const 282294) "a") (data (i32.const 282297) "a") (data (i32.const 282300) "a") (data (i32.const 282303) "a") (data (i32.const 282306) "a") (data (i32.const 282309) "a") (data (i32.const 282312) "a") (data (i32.const 282315) "a") (data (i32.const 282318) "a") (data (i32.const 282321) "a") (data (i32.const 282324) "a") (data (i32.const 282327) "a") (data (i32.const 282330) "a") (data (i32.const 282333) "a") (data (i32.const 282336) "a") (data (i32.const 282339) "a") (data (i32.const 282342) "a") (data (i32.const 282345) "a") (data (i32.const 282348) "a") (data (i32.const 282351) "a") (data (i32.const 282354) "a") (data (i32.const 282357) "a") (data (i32.const 282360) "a") (data (i32.const 282363) "a") (data (i32.const 282366) "a") (data (i32.const 282369) "a") (data (i32.const 282372) "a") (data (i32.const 282375) "a") (data (i32.const 282378) "a") (data (i32.const 282381) "a") (data (i32.const 282384) "a") (data (i32.const 282387) "a") (data (i32.const 282390) "a") (data (i32.const 282393) "a") (data (i32.const 282396) "a") (data (i32.const 282399) "a") (data (i32.const 282402) "a") (data (i32.const 282405) "a") (data (i32.const 282408) "a") (data (i32.const 282411) "a") (data (i32.const 282414) "a") (data (i32.const 282417) "a") (data (i32.const 282420) "a") (data (i32.const 282423) "a") (data (i32.const 282426) "a") (data (i32.const 282429) "a") (data (i32.const 282432) "a") (data (i32.const 282435) "a") (data (i32.const 282438) "a") (data (i32.const 282441) "a") (data (i32.const 282444) "a") (data (i32.const 282447) "a") (data (i32.const 282450) "a") (data (i32.const 282453) "a") (data (i32.const 282456) "a") (data (i32.const 282459) "a") (data (i32.const 282462) "a") (data (i32.const 282465) "a") (data (i32.const 282468) "a") (data (i32.const 282471) "a") (data (i32.const 282474) "a") (data (i32.const 282477) "a") (data (i32.const 282480) "a") (data (i32.const 282483) "a") (data (i32.const 282486) "a") (data (i32.const 282489) "a") (data (i32.const 282492) "a") (data (i32.const 282495) "a") (data (i32.const 282498) "a") (data (i32.const 282501) "a") (data (i32.const 282504) "a") (data (i32.const 282507) "a") (data (i32.const 282510) "a") (data (i32.const 282513) "a") (data (i32.const 282516) "a") (data (i32.const 282519) "a") (data (i32.const 282522) "a") (data (i32.const 282525) "a") (data (i32.const 282528) "a") (data (i32.const 282531) "a") (data (i32.const 282534) "a") (data (i32.const 282537) "a") (data (i32.const 282540) "a") (data (i32.const 282543) "a") (data (i32.const 282546) "a") (data (i32.const 282549) "a") (data (i32.const 282552) "a") (data (i32.const 282555) "a") (data (i32.const 282558) "a") (data (i32.const 282561) "a") (data (i32.const 282564) "a") (data (i32.const 282567) "a") (data (i32.const 282570) "a") (data (i32.const 282573) "a") (data (i32.const 282576) "a") (data (i32.const 282579) "a") (data (i32.const 282582) "a") (data (i32.const 282585) "a") (data (i32.const 282588) "a") (data (i32.const 282591) "a") (data (i32.const 282594) "a") (data (i32.const 282597) "a") (data (i32.const 282600) "a") (data (i32.const 282603) "a") (data (i32.const 282606) "a") (data (i32.const 282609) "a") (data (i32.const 282612) "a") (data (i32.const 282615) "a") (data (i32.const 282618) "a") (data (i32.const 282621) "a") (data (i32.const 282624) "a") (data (i32.const 282627) "a") (data (i32.const 282630) "a") (data (i32.const 282633) "a") (data (i32.const 282636) "a") (data (i32.const 282639) "a") (data (i32.const 282642) "a") (data (i32.const 282645) "a") (data (i32.const 282648) "a") (data (i32.const 282651) "a") (data (i32.const 282654) "a") (data (i32.const 282657) "a") (data (i32.const 282660) "a") (data (i32.const 282663) "a") (data (i32.const 282666) "a") (data (i32.const 282669) "a") (data (i32.const 282672) "a") (data (i32.const 282675) "a") (data (i32.const 282678) "a") (data (i32.const 282681) "a") (data (i32.const 282684) "a") (data (i32.const 282687) "a") (data (i32.const 282690) "a") (data (i32.const 282693) "a") (data (i32.const 282696) "a") (data (i32.const 282699) "a") (data (i32.const 282702) "a") (data (i32.const 282705) "a") (data (i32.const 282708) "a") (data (i32.const 282711) "a") (data (i32.const 282714) "a") (data (i32.const 282717) "a") (data (i32.const 282720) "a") (data (i32.const 282723) "a") (data (i32.const 282726) "a") (data (i32.const 282729) "a") (data (i32.const 282732) "a") (data (i32.const 282735) "a") (data (i32.const 282738) "a") (data (i32.const 282741) "a") (data (i32.const 282744) "a") (data (i32.const 282747) "a") (data (i32.const 282750) "a") (data (i32.const 282753) "a") (data (i32.const 282756) "a") (data (i32.const 282759) "a") (data (i32.const 282762) "a") (data (i32.const 282765) "a") (data (i32.const 282768) "a") (data (i32.const 282771) "a") (data (i32.const 282774) "a") (data (i32.const 282777) "a") (data (i32.const 282780) "a") (data (i32.const 282783) "a") (data (i32.const 282786) "a") (data (i32.const 282789) "a") (data (i32.const 282792) "a") (data (i32.const 282795) "a") (data (i32.const 282798) "a") (data (i32.const 282801) "a") (data (i32.const 282804) "a") (data (i32.const 282807) "a") (data (i32.const 282810) "a") (data (i32.const 282813) "a") (data (i32.const 282816) "a") (data (i32.const 282819) "a") (data (i32.const 282822) "a") (data (i32.const 282825) "a") (data (i32.const 282828) "a") (data (i32.const 282831) "a") (data (i32.const 282834) "a") (data (i32.const 282837) "a") (data (i32.const 282840) "a") (data (i32.const 282843) "a") (data (i32.const 282846) "a") (data (i32.const 282849) "a") (data (i32.const 282852) "a") (data (i32.const 282855) "a") (data (i32.const 282858) "a") (data (i32.const 282861) "a") (data (i32.const 282864) "a") (data (i32.const 282867) "a") (data (i32.const 282870) "a") (data (i32.const 282873) "a") (data (i32.const 282876) "a") (data (i32.const 282879) "a") (data (i32.const 282882) "a") (data (i32.const 282885) "a") (data (i32.const 282888) "a") (data (i32.const 282891) "a") (data (i32.const 282894) "a") (data (i32.const 282897) "a") (data (i32.const 282900) "a") (data (i32.const 282903) "a") (data (i32.const 282906) "a") (data (i32.const 282909) "a") (data (i32.const 282912) "a") (data (i32.const 282915) "a") (data (i32.const 282918) "a") (data (i32.const 282921) "a") (data (i32.const 282924) "a") (data (i32.const 282927) "a") (data (i32.const 282930) "a") (data (i32.const 282933) "a") (data (i32.const 282936) "a") (data (i32.const 282939) "a") (data (i32.const 282942) "a") (data (i32.const 282945) "a") (data (i32.const 282948) "a") (data (i32.const 282951) "a") (data (i32.const 282954) "a") (data (i32.const 282957) "a") (data (i32.const 282960) "a") (data (i32.const 282963) "a") (data (i32.const 282966) "a") (data (i32.const 282969) "a") (data (i32.const 282972) "a") (data (i32.const 282975) "a") (data (i32.const 282978) "a") (data (i32.const 282981) "a") (data (i32.const 282984) "a") (data (i32.const 282987) "a") (data (i32.const 282990) "a") (data (i32.const 282993) "a") (data (i32.const 282996) "a") (data (i32.const 282999) "a") (data (i32.const 283002) "a") (data (i32.const 283005) "a") (data (i32.const 283008) "a") (data (i32.const 283011) "a") (data (i32.const 283014) "a") (data (i32.const 283017) "a") (data (i32.const 283020) "a") (data (i32.const 283023) "a") (data (i32.const 283026) "a") (data (i32.const 283029) "a") (data (i32.const 283032) "a") (data (i32.const 283035) "a") (data (i32.const 283038) "a") (data (i32.const 283041) "a") (data (i32.const 283044) "a") (data (i32.const 283047) "a") (data (i32.const 283050) "a") (data (i32.const 283053) "a") (data (i32.const 283056) "a") (data (i32.const 283059) "a") (data (i32.const 283062) "a") (data (i32.const 283065) "a") (data (i32.const 283068) "a") (data (i32.const 283071) "a") (data (i32.const 283074) "a") (data (i32.const 283077) "a") (data (i32.const 283080) "a") (data (i32.const 283083) "a") (data (i32.const 283086) "a") (data (i32.const 283089) "a") (data (i32.const 283092) "a") (data (i32.const 283095) "a") (data (i32.const 283098) "a") (data (i32.const 283101) "a") (data (i32.const 283104) "a") (data (i32.const 283107) "a") (data (i32.const 283110) "a") (data (i32.const 283113) "a") (data (i32.const 283116) "a") (data (i32.const 283119) "a") (data (i32.const 283122) "a") (data (i32.const 283125) "a") (data (i32.const 283128) "a") (data (i32.const 283131) "a") (data (i32.const 283134) "a") (data (i32.const 283137) "a") (data (i32.const 283140) "a") (data (i32.const 283143) "a") (data (i32.const 283146) "a") (data (i32.const 283149) "a") (data (i32.const 283152) "a") (data (i32.const 283155) "a") (data (i32.const 283158) "a") (data (i32.const 283161) "a") (data (i32.const 283164) "a") (data (i32.const 283167) "a") (data (i32.const 283170) "a") (data (i32.const 283173) "a") (data (i32.const 283176) "a") (data (i32.const 283179) "a") (data (i32.const 283182) "a") (data (i32.const 283185) "a") (data (i32.const 283188) "a") (data (i32.const 283191) "a") (data (i32.const 283194) "a") (data (i32.const 283197) "a") (data (i32.const 283200) "a") (data (i32.const 283203) "a") (data (i32.const 283206) "a") (data (i32.const 283209) "a") (data (i32.const 283212) "a") (data (i32.const 283215) "a") (data (i32.const 283218) "a") (data (i32.const 283221) "a") (data (i32.const 283224) "a") (data (i32.const 283227) "a") (data (i32.const 283230) "a") (data (i32.const 283233) "a") (data (i32.const 283236) "a") (data (i32.const 283239) "a") (data (i32.const 283242) "a") (data (i32.const 283245) "a") (data (i32.const 283248) "a") (data (i32.const 283251) "a") (data (i32.const 283254) "a") (data (i32.const 283257) "a") (data (i32.const 283260) "a") (data (i32.const 283263) "a") (data (i32.const 283266) "a") (data (i32.const 283269) "a") (data (i32.const 283272) "a") (data (i32.const 283275) "a") (data (i32.const 283278) "a") (data (i32.const 283281) "a") (data (i32.const 283284) "a") (data (i32.const 283287) "a") (data (i32.const 283290) "a") (data (i32.const 283293) "a") (data (i32.const 283296) "a") (data (i32.const 283299) "a") (data (i32.const 283302) "a") (data (i32.const 283305) "a") (data (i32.const 283308) "a") (data (i32.const 283311) "a") (data (i32.const 283314) "a") (data (i32.const 283317) "a") (data (i32.const 283320) "a") (data (i32.const 283323) "a") (data (i32.const 283326) "a") (data (i32.const 283329) "a") (data (i32.const 283332) "a") (data (i32.const 283335) "a") (data (i32.const 283338) "a") (data (i32.const 283341) "a") (data (i32.const 283344) "a") (data (i32.const 283347) "a") (data (i32.const 283350) "a") (data (i32.const 283353) "a") (data (i32.const 283356) "a") (data (i32.const 283359) "a") (data (i32.const 283362) "a") (data (i32.const 283365) "a") (data (i32.const 283368) "a") (data (i32.const 283371) "a") (data (i32.const 283374) "a") (data (i32.const 283377) "a") (data (i32.const 283380) "a") (data (i32.const 283383) "a") (data (i32.const 283386) "a") (data (i32.const 283389) "a") (data (i32.const 283392) "a") (data (i32.const 283395) "a") (data (i32.const 283398) "a") (data (i32.const 283401) "a") (data (i32.const 283404) "a") (data (i32.const 283407) "a") (data (i32.const 283410) "a") (data (i32.const 283413) "a") (data (i32.const 283416) "a") (data (i32.const 283419) "a") (data (i32.const 283422) "a") (data (i32.const 283425) "a") (data (i32.const 283428) "a") (data (i32.const 283431) "a") (data (i32.const 283434) "a") (data (i32.const 283437) "a") (data (i32.const 283440) "a") (data (i32.const 283443) "a") (data (i32.const 283446) "a") (data (i32.const 283449) "a") (data (i32.const 283452) "a") (data (i32.const 283455) "a") (data (i32.const 283458) "a") (data (i32.const 283461) "a") (data (i32.const 283464) "a") (data (i32.const 283467) "a") (data (i32.const 283470) "a") (data (i32.const 283473) "a") (data (i32.const 283476) "a") (data (i32.const 283479) "a") (data (i32.const 283482) "a") (data (i32.const 283485) "a") (data (i32.const 283488) "a") (data (i32.const 283491) "a") (data (i32.const 283494) "a") (data (i32.const 283497) "a") (data (i32.const 283500) "a") (data (i32.const 283503) "a") (data (i32.const 283506) "a") (data (i32.const 283509) "a") (data (i32.const 283512) "a") (data (i32.const 283515) "a") (data (i32.const 283518) "a") (data (i32.const 283521) "a") (data (i32.const 283524) "a") (data (i32.const 283527) "a") (data (i32.const 283530) "a") (data (i32.const 283533) "a") (data (i32.const 283536) "a") (data (i32.const 283539) "a") (data (i32.const 283542) "a") (data (i32.const 283545) "a") (data (i32.const 283548) "a") (data (i32.const 283551) "a") (data (i32.const 283554) "a") (data (i32.const 283557) "a") (data (i32.const 283560) "a") (data (i32.const 283563) "a") (data (i32.const 283566) "a") (data (i32.const 283569) "a") (data (i32.const 283572) "a") (data (i32.const 283575) "a") (data (i32.const 283578) "a") (data (i32.const 283581) "a") (data (i32.const 283584) "a") (data (i32.const 283587) "a") (data (i32.const 283590) "a") (data (i32.const 283593) "a") (data (i32.const 283596) "a") (data (i32.const 283599) "a") (data (i32.const 283602) "a") (data (i32.const 283605) "a") (data (i32.const 283608) "a") (data (i32.const 283611) "a") (data (i32.const 283614) "a") (data (i32.const 283617) "a") (data (i32.const 283620) "a") (data (i32.const 283623) "a") (data (i32.const 283626) "a") (data (i32.const 283629) "a") (data (i32.const 283632) "a") (data (i32.const 283635) "a") (data (i32.const 283638) "a") (data (i32.const 283641) "a") (data (i32.const 283644) "a") (data (i32.const 283647) "a") (data (i32.const 283650) "a") (data (i32.const 283653) "a") (data (i32.const 283656) "a") (data (i32.const 283659) "a") (data (i32.const 283662) "a") (data (i32.const 283665) "a") (data (i32.const 283668) "a") (data (i32.const 283671) "a") (data (i32.const 283674) "a") (data (i32.const 283677) "a") (data (i32.const 283680) "a") (data (i32.const 283683) "a") (data (i32.const 283686) "a") (data (i32.const 283689) "a") (data (i32.const 283692) "a") (data (i32.const 283695) "a") (data (i32.const 283698) "a") (data (i32.const 283701) "a") (data (i32.const 283704) "a") (data (i32.const 283707) "a") (data (i32.const 283710) "a") (data (i32.const 283713) "a") (data (i32.const 283716) "a") (data (i32.const 283719) "a") (data (i32.const 283722) "a") (data (i32.const 283725) "a") (data (i32.const 283728) "a") (data (i32.const 283731) "a") (data (i32.const 283734) "a") (data (i32.const 283737) "a") (data (i32.const 283740) "a") (data (i32.const 283743) "a") (data (i32.const 283746) "a") (data (i32.const 283749) "a") (data (i32.const 283752) "a") (data (i32.const 283755) "a") (data (i32.const 283758) "a") (data (i32.const 283761) "a") (data (i32.const 283764) "a") (data (i32.const 283767) "a") (data (i32.const 283770) "a") (data (i32.const 283773) "a") (data (i32.const 283776) "a") (data (i32.const 283779) "a") (data (i32.const 283782) "a") (data (i32.const 283785) "a") (data (i32.const 283788) "a") (data (i32.const 283791) "a") (data (i32.const 283794) "a") (data (i32.const 283797) "a") (data (i32.const 283800) "a") (data (i32.const 283803) "a") (data (i32.const 283806) "a") (data (i32.const 283809) "a") (data (i32.const 283812) "a") (data (i32.const 283815) "a") (data (i32.const 283818) "a") (data (i32.const 283821) "a") (data (i32.const 283824) "a") (data (i32.const 283827) "a") (data (i32.const 283830) "a") (data (i32.const 283833) "a") (data (i32.const 283836) "a") (data (i32.const 283839) "a") (data (i32.const 283842) "a") (data (i32.const 283845) "a") (data (i32.const 283848) "a") (data (i32.const 283851) "a") (data (i32.const 283854) "a") (data (i32.const 283857) "a") (data (i32.const 283860) "a") (data (i32.const 283863) "a") (data (i32.const 283866) "a") (data (i32.const 283869) "a") (data (i32.const 283872) "a") (data (i32.const 283875) "a") (data (i32.const 283878) "a") (data (i32.const 283881) "a") (data (i32.const 283884) "a") (data (i32.const 283887) "a") (data (i32.const 283890) "a") (data (i32.const 283893) "a") (data (i32.const 283896) "a") (data (i32.const 283899) "a") (data (i32.const 283902) "a") (data (i32.const 283905) "a") (data (i32.const 283908) "a") (data (i32.const 283911) "a") (data (i32.const 283914) "a") (data (i32.const 283917) "a") (data (i32.const 283920) "a") (data (i32.const 283923) "a") (data (i32.const 283926) "a") (data (i32.const 283929) "a") (data (i32.const 283932) "a") (data (i32.const 283935) "a") (data (i32.const 283938) "a") (data (i32.const 283941) "a") (data (i32.const 283944) "a") (data (i32.const 283947) "a") (data (i32.const 283950) "a") (data (i32.const 283953) "a") (data (i32.const 283956) "a") (data (i32.const 283959) "a") (data (i32.const 283962) "a") (data (i32.const 283965) "a") (data (i32.const 283968) "a") (data (i32.const 283971) "a") (data (i32.const 283974) "a") (data (i32.const 283977) "a") (data (i32.const 283980) "a") (data (i32.const 283983) "a") (data (i32.const 283986) "a") (data (i32.const 283989) "a") (data (i32.const 283992) "a") (data (i32.const 283995) "a") (data (i32.const 283998) "a") (data (i32.const 284001) "a") (data (i32.const 284004) "a") (data (i32.const 284007) "a") (data (i32.const 284010) "a") (data (i32.const 284013) "a") (data (i32.const 284016) "a") (data (i32.const 284019) "a") (data (i32.const 284022) "a") (data (i32.const 284025) "a") (data (i32.const 284028) "a") (data (i32.const 284031) "a") (data (i32.const 284034) "a") (data (i32.const 284037) "a") (data (i32.const 284040) "a") (data (i32.const 284043) "a") (data (i32.const 284046) "a") (data (i32.const 284049) "a") (data (i32.const 284052) "a") (data (i32.const 284055) "a") (data (i32.const 284058) "a") (data (i32.const 284061) "a") (data (i32.const 284064) "a") (data (i32.const 284067) "a") (data (i32.const 284070) "a") (data (i32.const 284073) "a") (data (i32.const 284076) "a") (data (i32.const 284079) "a") (data (i32.const 284082) "a") (data (i32.const 284085) "a") (data (i32.const 284088) "a") (data (i32.const 284091) "a") (data (i32.const 284094) "a") (data (i32.const 284097) "a") (data (i32.const 284100) "a") (data (i32.const 284103) "a") (data (i32.const 284106) "a") (data (i32.const 284109) "a") (data (i32.const 284112) "a") (data (i32.const 284115) "a") (data (i32.const 284118) "a") (data (i32.const 284121) "a") (data (i32.const 284124) "a") (data (i32.const 284127) "a") (data (i32.const 284130) "a") (data (i32.const 284133) "a") (data (i32.const 284136) "a") (data (i32.const 284139) "a") (data (i32.const 284142) "a") (data (i32.const 284145) "a") (data (i32.const 284148) "a") (data (i32.const 284151) "a") (data (i32.const 284154) "a") (data (i32.const 284157) "a") (data (i32.const 284160) "a") (data (i32.const 284163) "a") (data (i32.const 284166) "a") (data (i32.const 284169) "a") (data (i32.const 284172) "a") (data (i32.const 284175) "a") (data (i32.const 284178) "a") (data (i32.const 284181) "a") (data (i32.const 284184) "a") (data (i32.const 284187) "a") (data (i32.const 284190) "a") (data (i32.const 284193) "a") (data (i32.const 284196) "a") (data (i32.const 284199) "a") (data (i32.const 284202) "a") (data (i32.const 284205) "a") (data (i32.const 284208) "a") (data (i32.const 284211) "a") (data (i32.const 284214) "a") (data (i32.const 284217) "a") (data (i32.const 284220) "a") (data (i32.const 284223) "a") (data (i32.const 284226) "a") (data (i32.const 284229) "a") (data (i32.const 284232) "a") (data (i32.const 284235) "a") (data (i32.const 284238) "a") (data (i32.const 284241) "a") (data (i32.const 284244) "a") (data (i32.const 284247) "a") (data (i32.const 284250) "a") (data (i32.const 284253) "a") (data (i32.const 284256) "a") (data (i32.const 284259) "a") (data (i32.const 284262) "a") (data (i32.const 284265) "a") (data (i32.const 284268) "a") (data (i32.const 284271) "a") (data (i32.const 284274) "a") (data (i32.const 284277) "a") (data (i32.const 284280) "a") (data (i32.const 284283) "a") (data (i32.const 284286) "a") (data (i32.const 284289) "a") (data (i32.const 284292) "a") (data (i32.const 284295) "a") (data (i32.const 284298) "a") (data (i32.const 284301) "a") (data (i32.const 284304) "a") (data (i32.const 284307) "a") (data (i32.const 284310) "a") (data (i32.const 284313) "a") (data (i32.const 284316) "a") (data (i32.const 284319) "a") (data (i32.const 284322) "a") (data (i32.const 284325) "a") (data (i32.const 284328) "a") (data (i32.const 284331) "a") (data (i32.const 284334) "a") (data (i32.const 284337) "a") (data (i32.const 284340) "a") (data (i32.const 284343) "a") (data (i32.const 284346) "a") (data (i32.const 284349) "a") (data (i32.const 284352) "a") (data (i32.const 284355) "a") (data (i32.const 284358) "a") (data (i32.const 284361) "a") (data (i32.const 284364) "a") (data (i32.const 284367) "a") (data (i32.const 284370) "a") (data (i32.const 284373) "a") (data (i32.const 284376) "a") (data (i32.const 284379) "a") (data (i32.const 284382) "a") (data (i32.const 284385) "a") (data (i32.const 284388) "a") (data (i32.const 284391) "a") (data (i32.const 284394) "a") (data (i32.const 284397) "a") (data (i32.const 284400) "a") (data (i32.const 284403) "a") (data (i32.const 284406) "a") (data (i32.const 284409) "a") (data (i32.const 284412) "a") (data (i32.const 284415) "a") (data (i32.const 284418) "a") (data (i32.const 284421) "a") (data (i32.const 284424) "a") (data (i32.const 284427) "a") (data (i32.const 284430) "a") (data (i32.const 284433) "a") (data (i32.const 284436) "a") (data (i32.const 284439) "a") (data (i32.const 284442) "a") (data (i32.const 284445) "a") (data (i32.const 284448) "a") (data (i32.const 284451) "a") (data (i32.const 284454) "a") (data (i32.const 284457) "a") (data (i32.const 284460) "a") (data (i32.const 284463) "a") (data (i32.const 284466) "a") (data (i32.const 284469) "a") (data (i32.const 284472) "a") (data (i32.const 284475) "a") (data (i32.const 284478) "a") (data (i32.const 284481) "a") (data (i32.const 284484) "a") (data (i32.const 284487) "a") (data (i32.const 284490) "a") (data (i32.const 284493) "a") (data (i32.const 284496) "a") (data (i32.const 284499) "a") (data (i32.const 284502) "a") (data (i32.const 284505) "a") (data (i32.const 284508) "a") (data (i32.const 284511) "a") (data (i32.const 284514) "a") (data (i32.const 284517) "a") (data (i32.const 284520) "a") (data (i32.const 284523) "a") (data (i32.const 284526) "a") (data (i32.const 284529) "a") (data (i32.const 284532) "a") (data (i32.const 284535) "a") (data (i32.const 284538) "a") (data (i32.const 284541) "a") (data (i32.const 284544) "a") (data (i32.const 284547) "a") (data (i32.const 284550) "a") (data (i32.const 284553) "a") (data (i32.const 284556) "a") (data (i32.const 284559) "a") (data (i32.const 284562) "a") (data (i32.const 284565) "a") (data (i32.const 284568) "a") (data (i32.const 284571) "a") (data (i32.const 284574) "a") (data (i32.const 284577) "a") (data (i32.const 284580) "a") (data (i32.const 284583) "a") (data (i32.const 284586) "a") (data (i32.const 284589) "a") (data (i32.const 284592) "a") (data (i32.const 284595) "a") (data (i32.const 284598) "a") (data (i32.const 284601) "a") (data (i32.const 284604) "a") (data (i32.const 284607) "a") (data (i32.const 284610) "a") (data (i32.const 284613) "a") (data (i32.const 284616) "a") (data (i32.const 284619) "a") (data (i32.const 284622) "a") (data (i32.const 284625) "a") (data (i32.const 284628) "a") (data (i32.const 284631) "a") (data (i32.const 284634) "a") (data (i32.const 284637) "a") (data (i32.const 284640) "a") (data (i32.const 284643) "a") (data (i32.const 284646) "a") (data (i32.const 284649) "a") (data (i32.const 284652) "a") (data (i32.const 284655) "a") (data (i32.const 284658) "a") (data (i32.const 284661) "a") (data (i32.const 284664) "a") (data (i32.const 284667) "a") (data (i32.const 284670) "a") (data (i32.const 284673) "a") (data (i32.const 284676) "a") (data (i32.const 284679) "a") (data (i32.const 284682) "a") (data (i32.const 284685) "a") (data (i32.const 284688) "a") (data (i32.const 284691) "a") (data (i32.const 284694) "a") (data (i32.const 284697) "a") (data (i32.const 284700) "a") (data (i32.const 284703) "a") (data (i32.const 284706) "a") (data (i32.const 284709) "a") (data (i32.const 284712) "a") (data (i32.const 284715) "a") (data (i32.const 284718) "a") (data (i32.const 284721) "a") (data (i32.const 284724) "a") (data (i32.const 284727) "a") (data (i32.const 284730) "a") (data (i32.const 284733) "a") (data (i32.const 284736) "a") (data (i32.const 284739) "a") (data (i32.const 284742) "a") (data (i32.const 284745) "a") (data (i32.const 284748) "a") (data (i32.const 284751) "a") (data (i32.const 284754) "a") (data (i32.const 284757) "a") (data (i32.const 284760) "a") (data (i32.const 284763) "a") (data (i32.const 284766) "a") (data (i32.const 284769) "a") (data (i32.const 284772) "a") (data (i32.const 284775) "a") (data (i32.const 284778) "a") (data (i32.const 284781) "a") (data (i32.const 284784) "a") (data (i32.const 284787) "a") (data (i32.const 284790) "a") (data (i32.const 284793) "a") (data (i32.const 284796) "a") (data (i32.const 284799) "a") (data (i32.const 284802) "a") (data (i32.const 284805) "a") (data (i32.const 284808) "a") (data (i32.const 284811) "a") (data (i32.const 284814) "a") (data (i32.const 284817) "a") (data (i32.const 284820) "a") (data (i32.const 284823) "a") (data (i32.const 284826) "a") (data (i32.const 284829) "a") (data (i32.const 284832) "a") (data (i32.const 284835) "a") (data (i32.const 284838) "a") (data (i32.const 284841) "a") (data (i32.const 284844) "a") (data (i32.const 284847) "a") (data (i32.const 284850) "a") (data (i32.const 284853) "a") (data (i32.const 284856) "a") (data (i32.const 284859) "a") (data (i32.const 284862) "a") (data (i32.const 284865) "a") (data (i32.const 284868) "a") (data (i32.const 284871) "a") (data (i32.const 284874) "a") (data (i32.const 284877) "a") (data (i32.const 284880) "a") (data (i32.const 284883) "a") (data (i32.const 284886) "a") (data (i32.const 284889) "a") (data (i32.const 284892) "a") (data (i32.const 284895) "a") (data (i32.const 284898) "a") (data (i32.const 284901) "a") (data (i32.const 284904) "a") (data (i32.const 284907) "a") (data (i32.const 284910) "a") (data (i32.const 284913) "a") (data (i32.const 284916) "a") (data (i32.const 284919) "a") (data (i32.const 284922) "a") (data (i32.const 284925) "a") (data (i32.const 284928) "a") (data (i32.const 284931) "a") (data (i32.const 284934) "a") (data (i32.const 284937) "a") (data (i32.const 284940) "a") (data (i32.const 284943) "a") (data (i32.const 284946) "a") (data (i32.const 284949) "a") (data (i32.const 284952) "a") (data (i32.const 284955) "a") (data (i32.const 284958) "a") (data (i32.const 284961) "a") (data (i32.const 284964) "a") (data (i32.const 284967) "a") (data (i32.const 284970) "a") (data (i32.const 284973) "a") (data (i32.const 284976) "a") (data (i32.const 284979) "a") (data (i32.const 284982) "a") (data (i32.const 284985) "a") (data (i32.const 284988) "a") (data (i32.const 284991) "a") (data (i32.const 284994) "a") (data (i32.const 284997) "a") (data (i32.const 285000) "a") (data (i32.const 285003) "a") (data (i32.const 285006) "a") (data (i32.const 285009) "a") (data (i32.const 285012) "a") (data (i32.const 285015) "a") (data (i32.const 285018) "a") (data (i32.const 285021) "a") (data (i32.const 285024) "a") (data (i32.const 285027) "a") (data (i32.const 285030) "a") (data (i32.const 285033) "a") (data (i32.const 285036) "a") (data (i32.const 285039) "a") (data (i32.const 285042) "a") (data (i32.const 285045) "a") (data (i32.const 285048) "a") (data (i32.const 285051) "a") (data (i32.const 285054) "a") (data (i32.const 285057) "a") (data (i32.const 285060) "a") (data (i32.const 285063) "a") (data (i32.const 285066) "a") (data (i32.const 285069) "a") (data (i32.const 285072) "a") (data (i32.const 285075) "a") (data (i32.const 285078) "a") (data (i32.const 285081) "a") (data (i32.const 285084) "a") (data (i32.const 285087) "a") (data (i32.const 285090) "a") (data (i32.const 285093) "a") (data (i32.const 285096) "a") (data (i32.const 285099) "a") (data (i32.const 285102) "a") (data (i32.const 285105) "a") (data (i32.const 285108) "a") (data (i32.const 285111) "a") (data (i32.const 285114) "a") (data (i32.const 285117) "a") (data (i32.const 285120) "a") (data (i32.const 285123) "a") (data (i32.const 285126) "a") (data (i32.const 285129) "a") (data (i32.const 285132) "a") (data (i32.const 285135) "a") (data (i32.const 285138) "a") (data (i32.const 285141) "a") (data (i32.const 285144) "a") (data (i32.const 285147) "a") (data (i32.const 285150) "a") (data (i32.const 285153) "a") (data (i32.const 285156) "a") (data (i32.const 285159) "a") (data (i32.const 285162) "a") (data (i32.const 285165) "a") (data (i32.const 285168) "a") (data (i32.const 285171) "a") (data (i32.const 285174) "a") (data (i32.const 285177) "a") (data (i32.const 285180) "a") (data (i32.const 285183) "a") (data (i32.const 285186) "a") (data (i32.const 285189) "a") (data (i32.const 285192) "a") (data (i32.const 285195) "a") (data (i32.const 285198) "a") (data (i32.const 285201) "a") (data (i32.const 285204) "a") (data (i32.const 285207) "a") (data (i32.const 285210) "a") (data (i32.const 285213) "a") (data (i32.const 285216) "a") (data (i32.const 285219) "a") (data (i32.const 285222) "a") (data (i32.const 285225) "a") (data (i32.const 285228) "a") (data (i32.const 285231) "a") (data (i32.const 285234) "a") (data (i32.const 285237) "a") (data (i32.const 285240) "a") (data (i32.const 285243) "a") (data (i32.const 285246) "a") (data (i32.const 285249) "a") (data (i32.const 285252) "a") (data (i32.const 285255) "a") (data (i32.const 285258) "a") (data (i32.const 285261) "a") (data (i32.const 285264) "a") (data (i32.const 285267) "a") (data (i32.const 285270) "a") (data (i32.const 285273) "a") (data (i32.const 285276) "a") (data (i32.const 285279) "a") (data (i32.const 285282) "a") (data (i32.const 285285) "a") (data (i32.const 285288) "a") (data (i32.const 285291) "a") (data (i32.const 285294) "a") (data (i32.const 285297) "a") (data (i32.const 285300) "a") (data (i32.const 285303) "a") (data (i32.const 285306) "a") (data (i32.const 285309) "a") (data (i32.const 285312) "a") (data (i32.const 285315) "a") (data (i32.const 285318) "a") (data (i32.const 285321) "a") (data (i32.const 285324) "a") (data (i32.const 285327) "a") (data (i32.const 285330) "a") (data (i32.const 285333) "a") (data (i32.const 285336) "a") (data (i32.const 285339) "a") (data (i32.const 285342) "a") (data (i32.const 285345) "a") (data (i32.const 285348) "a") (data (i32.const 285351) "a") (data (i32.const 285354) "a") (data (i32.const 285357) "a") (data (i32.const 285360) "a") (data (i32.const 285363) "a") (data (i32.const 285366) "a") (data (i32.const 285369) "a") (data (i32.const 285372) "a") (data (i32.const 285375) "a") (data (i32.const 285378) "a") (data (i32.const 285381) "a") (data (i32.const 285384) "a") (data (i32.const 285387) "a") (data (i32.const 285390) "a") (data (i32.const 285393) "a") (data (i32.const 285396) "a") (data (i32.const 285399) "a") (data (i32.const 285402) "a") (data (i32.const 285405) "a") (data (i32.const 285408) "a") (data (i32.const 285411) "a") (data (i32.const 285414) "a") (data (i32.const 285417) "a") (data (i32.const 285420) "a") (data (i32.const 285423) "a") (data (i32.const 285426) "a") (data (i32.const 285429) "a") (data (i32.const 285432) "a") (data (i32.const 285435) "a") (data (i32.const 285438) "a") (data (i32.const 285441) "a") (data (i32.const 285444) "a") (data (i32.const 285447) "a") (data (i32.const 285450) "a") (data (i32.const 285453) "a") (data (i32.const 285456) "a") (data (i32.const 285459) "a") (data (i32.const 285462) "a") (data (i32.const 285465) "a") (data (i32.const 285468) "a") (data (i32.const 285471) "a") (data (i32.const 285474) "a") (data (i32.const 285477) "a") (data (i32.const 285480) "a") (data (i32.const 285483) "a") (data (i32.const 285486) "a") (data (i32.const 285489) "a") (data (i32.const 285492) "a") (data (i32.const 285495) "a") (data (i32.const 285498) "a") (data (i32.const 285501) "a") (data (i32.const 285504) "a") (data (i32.const 285507) "a") (data (i32.const 285510) "a") (data (i32.const 285513) "a") (data (i32.const 285516) "a") (data (i32.const 285519) "a") (data (i32.const 285522) "a") (data (i32.const 285525) "a") (data (i32.const 285528) "a") (data (i32.const 285531) "a") (data (i32.const 285534) "a") (data (i32.const 285537) "a") (data (i32.const 285540) "a") (data (i32.const 285543) "a") (data (i32.const 285546) "a") (data (i32.const 285549) "a") (data (i32.const 285552) "a") (data (i32.const 285555) "a") (data (i32.const 285558) "a") (data (i32.const 285561) "a") (data (i32.const 285564) "a") (data (i32.const 285567) "a") (data (i32.const 285570) "a") (data (i32.const 285573) "a") (data (i32.const 285576) "a") (data (i32.const 285579) "a") (data (i32.const 285582) "a") (data (i32.const 285585) "a") (data (i32.const 285588) "a") (data (i32.const 285591) "a") (data (i32.const 285594) "a") (data (i32.const 285597) "a") (data (i32.const 285600) "a") (data (i32.const 285603) "a") (data (i32.const 285606) "a") (data (i32.const 285609) "a") (data (i32.const 285612) "a") (data (i32.const 285615) "a") (data (i32.const 285618) "a") (data (i32.const 285621) "a") (data (i32.const 285624) "a") (data (i32.const 285627) "a") (data (i32.const 285630) "a") (data (i32.const 285633) "a") (data (i32.const 285636) "a") (data (i32.const 285639) "a") (data (i32.const 285642) "a") (data (i32.const 285645) "a") (data (i32.const 285648) "a") (data (i32.const 285651) "a") (data (i32.const 285654) "a") (data (i32.const 285657) "a") (data (i32.const 285660) "a") (data (i32.const 285663) "a") (data (i32.const 285666) "a") (data (i32.const 285669) "a") (data (i32.const 285672) "a") (data (i32.const 285675) "a") (data (i32.const 285678) "a") (data (i32.const 285681) "a") (data (i32.const 285684) "a") (data (i32.const 285687) "a") (data (i32.const 285690) "a") (data (i32.const 285693) "a") (data (i32.const 285696) "a") (data (i32.const 285699) "a") (data (i32.const 285702) "a") (data (i32.const 285705) "a") (data (i32.const 285708) "a") (data (i32.const 285711) "a") (data (i32.const 285714) "a") (data (i32.const 285717) "a") (data (i32.const 285720) "a") (data (i32.const 285723) "a") (data (i32.const 285726) "a") (data (i32.const 285729) "a") (data (i32.const 285732) "a") (data (i32.const 285735) "a") (data (i32.const 285738) "a") (data (i32.const 285741) "a") (data (i32.const 285744) "a") (data (i32.const 285747) "a") (data (i32.const 285750) "a") (data (i32.const 285753) "a") (data (i32.const 285756) "a") (data (i32.const 285759) "a") (data (i32.const 285762) "a") (data (i32.const 285765) "a") (data (i32.const 285768) "a") (data (i32.const 285771) "a") (data (i32.const 285774) "a") (data (i32.const 285777) "a") (data (i32.const 285780) "a") (data (i32.const 285783) "a") (data (i32.const 285786) "a") (data (i32.const 285789) "a") (data (i32.const 285792) "a") (data (i32.const 285795) "a") (data (i32.const 285798) "a") (data (i32.const 285801) "a") (data (i32.const 285804) "a") (data (i32.const 285807) "a") (data (i32.const 285810) "a") (data (i32.const 285813) "a") (data (i32.const 285816) "a") (data (i32.const 285819) "a") (data (i32.const 285822) "a") (data (i32.const 285825) "a") (data (i32.const 285828) "a") (data (i32.const 285831) "a") (data (i32.const 285834) "a") (data (i32.const 285837) "a") (data (i32.const 285840) "a") (data (i32.const 285843) "a") (data (i32.const 285846) "a") (data (i32.const 285849) "a") (data (i32.const 285852) "a") (data (i32.const 285855) "a") (data (i32.const 285858) "a") (data (i32.const 285861) "a") (data (i32.const 285864) "a") (data (i32.const 285867) "a") (data (i32.const 285870) "a") (data (i32.const 285873) "a") (data (i32.const 285876) "a") (data (i32.const 285879) "a") (data (i32.const 285882) "a") (data (i32.const 285885) "a") (data (i32.const 285888) "a") (data (i32.const 285891) "a") (data (i32.const 285894) "a") (data (i32.const 285897) "a") (data (i32.const 285900) "a") (data (i32.const 285903) "a") (data (i32.const 285906) "a") (data (i32.const 285909) "a") (data (i32.const 285912) "a") (data (i32.const 285915) "a") (data (i32.const 285918) "a") (data (i32.const 285921) "a") (data (i32.const 285924) "a") (data (i32.const 285927) "a") (data (i32.const 285930) "a") (data (i32.const 285933) "a") (data (i32.const 285936) "a") (data (i32.const 285939) "a") (data (i32.const 285942) "a") (data (i32.const 285945) "a") (data (i32.const 285948) "a") (data (i32.const 285951) "a") (data (i32.const 285954) "a") (data (i32.const 285957) "a") (data (i32.const 285960) "a") (data (i32.const 285963) "a") (data (i32.const 285966) "a") (data (i32.const 285969) "a") (data (i32.const 285972) "a") (data (i32.const 285975) "a") (data (i32.const 285978) "a") (data (i32.const 285981) "a") (data (i32.const 285984) "a") (data (i32.const 285987) "a") (data (i32.const 285990) "a") (data (i32.const 285993) "a") (data (i32.const 285996) "a") (data (i32.const 285999) "a") (data (i32.const 286002) "a") (data (i32.const 286005) "a") (data (i32.const 286008) "a") (data (i32.const 286011) "a") (data (i32.const 286014) "a") (data (i32.const 286017) "a") (data (i32.const 286020) "a") (data (i32.const 286023) "a") (data (i32.const 286026) "a") (data (i32.const 286029) "a") (data (i32.const 286032) "a") (data (i32.const 286035) "a") (data (i32.const 286038) "a") (data (i32.const 286041) "a") (data (i32.const 286044) "a") (data (i32.const 286047) "a") (data (i32.const 286050) "a") (data (i32.const 286053) "a") (data (i32.const 286056) "a") (data (i32.const 286059) "a") (data (i32.const 286062) "a") (data (i32.const 286065) "a") (data (i32.const 286068) "a") (data (i32.const 286071) "a") (data (i32.const 286074) "a") (data (i32.const 286077) "a") (data (i32.const 286080) "a") (data (i32.const 286083) "a") (data (i32.const 286086) "a") (data (i32.const 286089) "a") (data (i32.const 286092) "a") (data (i32.const 286095) "a") (data (i32.const 286098) "a") (data (i32.const 286101) "a") (data (i32.const 286104) "a") (data (i32.const 286107) "a") (data (i32.const 286110) "a") (data (i32.const 286113) "a") (data (i32.const 286116) "a") (data (i32.const 286119) "a") (data (i32.const 286122) "a") (data (i32.const 286125) "a") (data (i32.const 286128) "a") (data (i32.const 286131) "a") (data (i32.const 286134) "a") (data (i32.const 286137) "a") (data (i32.const 286140) "a") (data (i32.const 286143) "a") (data (i32.const 286146) "a") (data (i32.const 286149) "a") (data (i32.const 286152) "a") (data (i32.const 286155) "a") (data (i32.const 286158) "a") (data (i32.const 286161) "a") (data (i32.const 286164) "a") (data (i32.const 286167) "a") (data (i32.const 286170) "a") (data (i32.const 286173) "a") (data (i32.const 286176) "a") (data (i32.const 286179) "a") (data (i32.const 286182) "a") (data (i32.const 286185) "a") (data (i32.const 286188) "a") (data (i32.const 286191) "a") (data (i32.const 286194) "a") (data (i32.const 286197) "a") (data (i32.const 286200) "a") (data (i32.const 286203) "a") (data (i32.const 286206) "a") (data (i32.const 286209) "a") (data (i32.const 286212) "a") (data (i32.const 286215) "a") (data (i32.const 286218) "a") (data (i32.const 286221) "a") (data (i32.const 286224) "a") (data (i32.const 286227) "a") (data (i32.const 286230) "a") (data (i32.const 286233) "a") (data (i32.const 286236) "a") (data (i32.const 286239) "a") (data (i32.const 286242) "a") (data (i32.const 286245) "a") (data (i32.const 286248) "a") (data (i32.const 286251) "a") (data (i32.const 286254) "a") (data (i32.const 286257) "a") (data (i32.const 286260) "a") (data (i32.const 286263) "a") (data (i32.const 286266) "a") (data (i32.const 286269) "a") (data (i32.const 286272) "a") (data (i32.const 286275) "a") (data (i32.const 286278) "a") (data (i32.const 286281) "a") (data (i32.const 286284) "a") (data (i32.const 286287) "a") (data (i32.const 286290) "a") (data (i32.const 286293) "a") (data (i32.const 286296) "a") (data (i32.const 286299) "a") (data (i32.const 286302) "a") (data (i32.const 286305) "a") (data (i32.const 286308) "a") (data (i32.const 286311) "a") (data (i32.const 286314) "a") (data (i32.const 286317) "a") (data (i32.const 286320) "a") (data (i32.const 286323) "a") (data (i32.const 286326) "a") (data (i32.const 286329) "a") (data (i32.const 286332) "a") (data (i32.const 286335) "a") (data (i32.const 286338) "a") (data (i32.const 286341) "a") (data (i32.const 286344) "a") (data (i32.const 286347) "a") (data (i32.const 286350) "a") (data (i32.const 286353) "a") (data (i32.const 286356) "a") (data (i32.const 286359) "a") (data (i32.const 286362) "a") (data (i32.const 286365) "a") (data (i32.const 286368) "a") (data (i32.const 286371) "a") (data (i32.const 286374) "a") (data (i32.const 286377) "a") (data (i32.const 286380) "a") (data (i32.const 286383) "a") (data (i32.const 286386) "a") (data (i32.const 286389) "a") (data (i32.const 286392) "a") (data (i32.const 286395) "a") (data (i32.const 286398) "a") (data (i32.const 286401) "a") (data (i32.const 286404) "a") (data (i32.const 286407) "a") (data (i32.const 286410) "a") (data (i32.const 286413) "a") (data (i32.const 286416) "a") (data (i32.const 286419) "a") (data (i32.const 286422) "a") (data (i32.const 286425) "a") (data (i32.const 286428) "a") (data (i32.const 286431) "a") (data (i32.const 286434) "a") (data (i32.const 286437) "a") (data (i32.const 286440) "a") (data (i32.const 286443) "a") (data (i32.const 286446) "a") (data (i32.const 286449) "a") (data (i32.const 286452) "a") (data (i32.const 286455) "a") (data (i32.const 286458) "a") (data (i32.const 286461) "a") (data (i32.const 286464) "a") (data (i32.const 286467) "a") (data (i32.const 286470) "a") (data (i32.const 286473) "a") (data (i32.const 286476) "a") (data (i32.const 286479) "a") (data (i32.const 286482) "a") (data (i32.const 286485) "a") (data (i32.const 286488) "a") (data (i32.const 286491) "a") (data (i32.const 286494) "a") (data (i32.const 286497) "a") (data (i32.const 286500) "a") (data (i32.const 286503) "a") (data (i32.const 286506) "a") (data (i32.const 286509) "a") (data (i32.const 286512) "a") (data (i32.const 286515) "a") (data (i32.const 286518) "a") (data (i32.const 286521) "a") (data (i32.const 286524) "a") (data (i32.const 286527) "a") (data (i32.const 286530) "a") (data (i32.const 286533) "a") (data (i32.const 286536) "a") (data (i32.const 286539) "a") (data (i32.const 286542) "a") (data (i32.const 286545) "a") (data (i32.const 286548) "a") (data (i32.const 286551) "a") (data (i32.const 286554) "a") (data (i32.const 286557) "a") (data (i32.const 286560) "a") (data (i32.const 286563) "a") (data (i32.const 286566) "a") (data (i32.const 286569) "a") (data (i32.const 286572) "a") (data (i32.const 286575) "a") (data (i32.const 286578) "a") (data (i32.const 286581) "a") (data (i32.const 286584) "a") (data (i32.const 286587) "a") (data (i32.const 286590) "a") (data (i32.const 286593) "a") (data (i32.const 286596) "a") (data (i32.const 286599) "a") (data (i32.const 286602) "a") (data (i32.const 286605) "a") (data (i32.const 286608) "a") (data (i32.const 286611) "a") (data (i32.const 286614) "a") (data (i32.const 286617) "a") (data (i32.const 286620) "a") (data (i32.const 286623) "a") (data (i32.const 286626) "a") (data (i32.const 286629) "a") (data (i32.const 286632) "a") (data (i32.const 286635) "a") (data (i32.const 286638) "a") (data (i32.const 286641) "a") (data (i32.const 286644) "a") (data (i32.const 286647) "a") (data (i32.const 286650) "a") (data (i32.const 286653) "a") (data (i32.const 286656) "a") (data (i32.const 286659) "a") (data (i32.const 286662) "a") (data (i32.const 286665) "a") (data (i32.const 286668) "a") (data (i32.const 286671) "a") (data (i32.const 286674) "a") (data (i32.const 286677) "a") (data (i32.const 286680) "a") (data (i32.const 286683) "a") (data (i32.const 286686) "a") (data (i32.const 286689) "a") (data (i32.const 286692) "a") (data (i32.const 286695) "a") (data (i32.const 286698) "a") (data (i32.const 286701) "a") (data (i32.const 286704) "a") (data (i32.const 286707) "a") (data (i32.const 286710) "a") (data (i32.const 286713) "a") (data (i32.const 286716) "a") (data (i32.const 286719) "a") (data (i32.const 286722) "a") (data (i32.const 286725) "a") (data (i32.const 286728) "a") (data (i32.const 286731) "a") (data (i32.const 286734) "a") (data (i32.const 286737) "a") (data (i32.const 286740) "a") (data (i32.const 286743) "a") (data (i32.const 286746) "a") (data (i32.const 286749) "a") (data (i32.const 286752) "a") (data (i32.const 286755) "a") (data (i32.const 286758) "a") (data (i32.const 286761) "a") (data (i32.const 286764) "a") (data (i32.const 286767) "a") (data (i32.const 286770) "a") (data (i32.const 286773) "a") (data (i32.const 286776) "a") (data (i32.const 286779) "a") (data (i32.const 286782) "a") (data (i32.const 286785) "a") (data (i32.const 286788) "a") (data (i32.const 286791) "a") (data (i32.const 286794) "a") (data (i32.const 286797) "a") (data (i32.const 286800) "a") (data (i32.const 286803) "a") (data (i32.const 286806) "a") (data (i32.const 286809) "a") (data (i32.const 286812) "a") (data (i32.const 286815) "a") (data (i32.const 286818) "a") (data (i32.const 286821) "a") (data (i32.const 286824) "a") (data (i32.const 286827) "a") (data (i32.const 286830) "a") (data (i32.const 286833) "a") (data (i32.const 286836) "a") (data (i32.const 286839) "a") (data (i32.const 286842) "a") (data (i32.const 286845) "a") (data (i32.const 286848) "a") (data (i32.const 286851) "a") (data (i32.const 286854) "a") (data (i32.const 286857) "a") (data (i32.const 286860) "a") (data (i32.const 286863) "a") (data (i32.const 286866) "a") (data (i32.const 286869) "a") (data (i32.const 286872) "a") (data (i32.const 286875) "a") (data (i32.const 286878) "a") (data (i32.const 286881) "a") (data (i32.const 286884) "a") (data (i32.const 286887) "a") (data (i32.const 286890) "a") (data (i32.const 286893) "a") (data (i32.const 286896) "a") (data (i32.const 286899) "a") (data (i32.const 286902) "a") (data (i32.const 286905) "a") (data (i32.const 286908) "a") (data (i32.const 286911) "a") (data (i32.const 286914) "a") (data (i32.const 286917) "a") (data (i32.const 286920) "a") (data (i32.const 286923) "a") (data (i32.const 286926) "a") (data (i32.const 286929) "a") (data (i32.const 286932) "a") (data (i32.const 286935) "a") (data (i32.const 286938) "a") (data (i32.const 286941) "a") (data (i32.const 286944) "a") (data (i32.const 286947) "a") (data (i32.const 286950) "a") (data (i32.const 286953) "a") (data (i32.const 286956) "a") (data (i32.const 286959) "a") (data (i32.const 286962) "a") (data (i32.const 286965) "a") (data (i32.const 286968) "a") (data (i32.const 286971) "a") (data (i32.const 286974) "a") (data (i32.const 286977) "a") (data (i32.const 286980) "a") (data (i32.const 286983) "a") (data (i32.const 286986) "a") (data (i32.const 286989) "a") (data (i32.const 286992) "a") (data (i32.const 286995) "a") (data (i32.const 286998) "a") (data (i32.const 287001) "a") (data (i32.const 287004) "a") (data (i32.const 287007) "a") (data (i32.const 287010) "a") (data (i32.const 287013) "a") (data (i32.const 287016) "a") (data (i32.const 287019) "a") (data (i32.const 287022) "a") (data (i32.const 287025) "a") (data (i32.const 287028) "a") (data (i32.const 287031) "a") (data (i32.const 287034) "a") (data (i32.const 287037) "a") (data (i32.const 287040) "a") (data (i32.const 287043) "a") (data (i32.const 287046) "a") (data (i32.const 287049) "a") (data (i32.const 287052) "a") (data (i32.const 287055) "a") (data (i32.const 287058) "a") (data (i32.const 287061) "a") (data (i32.const 287064) "a") (data (i32.const 287067) "a") (data (i32.const 287070) "a") (data (i32.const 287073) "a") (data (i32.const 287076) "a") (data (i32.const 287079) "a") (data (i32.const 287082) "a") (data (i32.const 287085) "a") (data (i32.const 287088) "a") (data (i32.const 287091) "a") (data (i32.const 287094) "a") (data (i32.const 287097) "a") (data (i32.const 287100) "a") (data (i32.const 287103) "a") (data (i32.const 287106) "a") (data (i32.const 287109) "a") (data (i32.const 287112) "a") (data (i32.const 287115) "a") (data (i32.const 287118) "a") (data (i32.const 287121) "a") (data (i32.const 287124) "a") (data (i32.const 287127) "a") (data (i32.const 287130) "a") (data (i32.const 287133) "a") (data (i32.const 287136) "a") (data (i32.const 287139) "a") (data (i32.const 287142) "a") (data (i32.const 287145) "a") (data (i32.const 287148) "a") (data (i32.const 287151) "a") (data (i32.const 287154) "a") (data (i32.const 287157) "a") (data (i32.const 287160) "a") (data (i32.const 287163) "a") (data (i32.const 287166) "a") (data (i32.const 287169) "a") (data (i32.const 287172) "a") (data (i32.const 287175) "a") (data (i32.const 287178) "a") (data (i32.const 287181) "a") (data (i32.const 287184) "a") (data (i32.const 287187) "a") (data (i32.const 287190) "a") (data (i32.const 287193) "a") (data (i32.const 287196) "a") (data (i32.const 287199) "a") (data (i32.const 287202) "a") (data (i32.const 287205) "a") (data (i32.const 287208) "a") (data (i32.const 287211) "a") (data (i32.const 287214) "a") (data (i32.const 287217) "a") (data (i32.const 287220) "a") (data (i32.const 287223) "a") (data (i32.const 287226) "a") (data (i32.const 287229) "a") (data (i32.const 287232) "a") (data (i32.const 287235) "a") (data (i32.const 287238) "a") (data (i32.const 287241) "a") (data (i32.const 287244) "a") (data (i32.const 287247) "a") (data (i32.const 287250) "a") (data (i32.const 287253) "a") (data (i32.const 287256) "a") (data (i32.const 287259) "a") (data (i32.const 287262) "a") (data (i32.const 287265) "a") (data (i32.const 287268) "a") (data (i32.const 287271) "a") (data (i32.const 287274) "a") (data (i32.const 287277) "a") (data (i32.const 287280) "a") (data (i32.const 287283) "a") (data (i32.const 287286) "a") (data (i32.const 287289) "a") (data (i32.const 287292) "a") (data (i32.const 287295) "a") (data (i32.const 287298) "a") (data (i32.const 287301) "a") (data (i32.const 287304) "a") (data (i32.const 287307) "a") (data (i32.const 287310) "a") (data (i32.const 287313) "a") (data (i32.const 287316) "a") (data (i32.const 287319) "a") (data (i32.const 287322) "a") (data (i32.const 287325) "a") (data (i32.const 287328) "a") (data (i32.const 287331) "a") (data (i32.const 287334) "a") (data (i32.const 287337) "a") (data (i32.const 287340) "a") (data (i32.const 287343) "a") (data (i32.const 287346) "a") (data (i32.const 287349) "a") (data (i32.const 287352) "a") (data (i32.const 287355) "a") (data (i32.const 287358) "a") (data (i32.const 287361) "a") (data (i32.const 287364) "a") (data (i32.const 287367) "a") (data (i32.const 287370) "a") (data (i32.const 287373) "a") (data (i32.const 287376) "a") (data (i32.const 287379) "a") (data (i32.const 287382) "a") (data (i32.const 287385) "a") (data (i32.const 287388) "a") (data (i32.const 287391) "a") (data (i32.const 287394) "a") (data (i32.const 287397) "a") (data (i32.const 287400) "a") (data (i32.const 287403) "a") (data (i32.const 287406) "a") (data (i32.const 287409) "a") (data (i32.const 287412) "a") (data (i32.const 287415) "a") (data (i32.const 287418) "a") (data (i32.const 287421) "a") (data (i32.const 287424) "a") (data (i32.const 287427) "a") (data (i32.const 287430) "a") (data (i32.const 287433) "a") (data (i32.const 287436) "a") (data (i32.const 287439) "a") (data (i32.const 287442) "a") (data (i32.const 287445) "a") (data (i32.const 287448) "a") (data (i32.const 287451) "a") (data (i32.const 287454) "a") (data (i32.const 287457) "a") (data (i32.const 287460) "a") (data (i32.const 287463) "a") (data (i32.const 287466) "a") (data (i32.const 287469) "a") (data (i32.const 287472) "a") (data (i32.const 287475) "a") (data (i32.const 287478) "a") (data (i32.const 287481) "a") (data (i32.const 287484) "a") (data (i32.const 287487) "a") (data (i32.const 287490) "a") (data (i32.const 287493) "a") (data (i32.const 287496) "a") (data (i32.const 287499) "a") (data (i32.const 287502) "a") (data (i32.const 287505) "a") (data (i32.const 287508) "a") (data (i32.const 287511) "a") (data (i32.const 287514) "a") (data (i32.const 287517) "a") (data (i32.const 287520) "a") (data (i32.const 287523) "a") (data (i32.const 287526) "a") (data (i32.const 287529) "a") (data (i32.const 287532) "a") (data (i32.const 287535) "a") (data (i32.const 287538) "a") (data (i32.const 287541) "a") (data (i32.const 287544) "a") (data (i32.const 287547) "a") (data (i32.const 287550) "a") (data (i32.const 287553) "a") (data (i32.const 287556) "a") (data (i32.const 287559) "a") (data (i32.const 287562) "a") (data (i32.const 287565) "a") (data (i32.const 287568) "a") (data (i32.const 287571) "a") (data (i32.const 287574) "a") (data (i32.const 287577) "a") (data (i32.const 287580) "a") (data (i32.const 287583) "a") (data (i32.const 287586) "a") (data (i32.const 287589) "a") (data (i32.const 287592) "a") (data (i32.const 287595) "a") (data (i32.const 287598) "a") (data (i32.const 287601) "a") (data (i32.const 287604) "a") (data (i32.const 287607) "a") (data (i32.const 287610) "a") (data (i32.const 287613) "a") (data (i32.const 287616) "a") (data (i32.const 287619) "a") (data (i32.const 287622) "a") (data (i32.const 287625) "a") (data (i32.const 287628) "a") (data (i32.const 287631) "a") (data (i32.const 287634) "a") (data (i32.const 287637) "a") (data (i32.const 287640) "a") (data (i32.const 287643) "a") (data (i32.const 287646) "a") (data (i32.const 287649) "a") (data (i32.const 287652) "a") (data (i32.const 287655) "a") (data (i32.const 287658) "a") (data (i32.const 287661) "a") (data (i32.const 287664) "a") (data (i32.const 287667) "a") (data (i32.const 287670) "a") (data (i32.const 287673) "a") (data (i32.const 287676) "a") (data (i32.const 287679) "a") (data (i32.const 287682) "a") (data (i32.const 287685) "a") (data (i32.const 287688) "a") (data (i32.const 287691) "a") (data (i32.const 287694) "a") (data (i32.const 287697) "a") (data (i32.const 287700) "a") (data (i32.const 287703) "a") (data (i32.const 287706) "a") (data (i32.const 287709) "a") (data (i32.const 287712) "a") (data (i32.const 287715) "a") (data (i32.const 287718) "a") (data (i32.const 287721) "a") (data (i32.const 287724) "a") (data (i32.const 287727) "a") (data (i32.const 287730) "a") (data (i32.const 287733) "a") (data (i32.const 287736) "a") (data (i32.const 287739) "a") (data (i32.const 287742) "a") (data (i32.const 287745) "a") (data (i32.const 287748) "a") (data (i32.const 287751) "a") (data (i32.const 287754) "a") (data (i32.const 287757) "a") (data (i32.const 287760) "a") (data (i32.const 287763) "a") (data (i32.const 287766) "a") (data (i32.const 287769) "a") (data (i32.const 287772) "a") (data (i32.const 287775) "a") (data (i32.const 287778) "a") (data (i32.const 287781) "a") (data (i32.const 287784) "a") (data (i32.const 287787) "a") (data (i32.const 287790) "a") (data (i32.const 287793) "a") (data (i32.const 287796) "a") (data (i32.const 287799) "a") (data (i32.const 287802) "a") (data (i32.const 287805) "a") (data (i32.const 287808) "a") (data (i32.const 287811) "a") (data (i32.const 287814) "a") (data (i32.const 287817) "a") (data (i32.const 287820) "a") (data (i32.const 287823) "a") (data (i32.const 287826) "a") (data (i32.const 287829) "a") (data (i32.const 287832) "a") (data (i32.const 287835) "a") (data (i32.const 287838) "a") (data (i32.const 287841) "a") (data (i32.const 287844) "a") (data (i32.const 287847) "a") (data (i32.const 287850) "a") (data (i32.const 287853) "a") (data (i32.const 287856) "a") (data (i32.const 287859) "a") (data (i32.const 287862) "a") (data (i32.const 287865) "a") (data (i32.const 287868) "a") (data (i32.const 287871) "a") (data (i32.const 287874) "a") (data (i32.const 287877) "a") (data (i32.const 287880) "a") (data (i32.const 287883) "a") (data (i32.const 287886) "a") (data (i32.const 287889) "a") (data (i32.const 287892) "a") (data (i32.const 287895) "a") (data (i32.const 287898) "a") (data (i32.const 287901) "a") (data (i32.const 287904) "a") (data (i32.const 287907) "a") (data (i32.const 287910) "a") (data (i32.const 287913) "a") (data (i32.const 287916) "a") (data (i32.const 287919) "a") (data (i32.const 287922) "a") (data (i32.const 287925) "a") (data (i32.const 287928) "a") (data (i32.const 287931) "a") (data (i32.const 287934) "a") (data (i32.const 287937) "a") (data (i32.const 287940) "a") (data (i32.const 287943) "a") (data (i32.const 287946) "a") (data (i32.const 287949) "a") (data (i32.const 287952) "a") (data (i32.const 287955) "a") (data (i32.const 287958) "a") (data (i32.const 287961) "a") (data (i32.const 287964) "a") (data (i32.const 287967) "a") (data (i32.const 287970) "a") (data (i32.const 287973) "a") (data (i32.const 287976) "a") (data (i32.const 287979) "a") (data (i32.const 287982) "a") (data (i32.const 287985) "a") (data (i32.const 287988) "a") (data (i32.const 287991) "a") (data (i32.const 287994) "a") (data (i32.const 287997) "a") (data (i32.const 288000) "a") (data (i32.const 288003) "a") (data (i32.const 288006) "a") (data (i32.const 288009) "a") (data (i32.const 288012) "a") (data (i32.const 288015) "a") (data (i32.const 288018) "a") (data (i32.const 288021) "a") (data (i32.const 288024) "a") (data (i32.const 288027) "a") (data (i32.const 288030) "a") (data (i32.const 288033) "a") (data (i32.const 288036) "a") (data (i32.const 288039) "a") (data (i32.const 288042) "a") (data (i32.const 288045) "a") (data (i32.const 288048) "a") (data (i32.const 288051) "a") (data (i32.const 288054) "a") (data (i32.const 288057) "a") (data (i32.const 288060) "a") (data (i32.const 288063) "a") (data (i32.const 288066) "a") (data (i32.const 288069) "a") (data (i32.const 288072) "a") (data (i32.const 288075) "a") (data (i32.const 288078) "a") (data (i32.const 288081) "a") (data (i32.const 288084) "a") (data (i32.const 288087) "a") (data (i32.const 288090) "a") (data (i32.const 288093) "a") (data (i32.const 288096) "a") (data (i32.const 288099) "a") (data (i32.const 288102) "a") (data (i32.const 288105) "a") (data (i32.const 288108) "a") (data (i32.const 288111) "a") (data (i32.const 288114) "a") (data (i32.const 288117) "a") (data (i32.const 288120) "a") (data (i32.const 288123) "a") (data (i32.const 288126) "a") (data (i32.const 288129) "a") (data (i32.const 288132) "a") (data (i32.const 288135) "a") (data (i32.const 288138) "a") (data (i32.const 288141) "a") (data (i32.const 288144) "a") (data (i32.const 288147) "a") (data (i32.const 288150) "a") (data (i32.const 288153) "a") (data (i32.const 288156) "a") (data (i32.const 288159) "a") (data (i32.const 288162) "a") (data (i32.const 288165) "a") (data (i32.const 288168) "a") (data (i32.const 288171) "a") (data (i32.const 288174) "a") (data (i32.const 288177) "a") (data (i32.const 288180) "a") (data (i32.const 288183) "a") (data (i32.const 288186) "a") (data (i32.const 288189) "a") (data (i32.const 288192) "a") (data (i32.const 288195) "a") (data (i32.const 288198) "a") (data (i32.const 288201) "a") (data (i32.const 288204) "a") (data (i32.const 288207) "a") (data (i32.const 288210) "a") (data (i32.const 288213) "a") (data (i32.const 288216) "a") (data (i32.const 288219) "a") (data (i32.const 288222) "a") (data (i32.const 288225) "a") (data (i32.const 288228) "a") (data (i32.const 288231) "a") (data (i32.const 288234) "a") (data (i32.const 288237) "a") (data (i32.const 288240) "a") (data (i32.const 288243) "a") (data (i32.const 288246) "a") (data (i32.const 288249) "a") (data (i32.const 288252) "a") (data (i32.const 288255) "a") (data (i32.const 288258) "a") (data (i32.const 288261) "a") (data (i32.const 288264) "a") (data (i32.const 288267) "a") (data (i32.const 288270) "a") (data (i32.const 288273) "a") (data (i32.const 288276) "a") (data (i32.const 288279) "a") (data (i32.const 288282) "a") (data (i32.const 288285) "a") (data (i32.const 288288) "a") (data (i32.const 288291) "a") (data (i32.const 288294) "a") (data (i32.const 288297) "a") (data (i32.const 288300) "a") (data (i32.const 288303) "a") (data (i32.const 288306) "a") (data (i32.const 288309) "a") (data (i32.const 288312) "a") (data (i32.const 288315) "a") (data (i32.const 288318) "a") (data (i32.const 288321) "a") (data (i32.const 288324) "a") (data (i32.const 288327) "a") (data (i32.const 288330) "a") (data (i32.const 288333) "a") (data (i32.const 288336) "a") (data (i32.const 288339) "a") (data (i32.const 288342) "a") (data (i32.const 288345) "a") (data (i32.const 288348) "a") (data (i32.const 288351) "a") (data (i32.const 288354) "a") (data (i32.const 288357) "a") (data (i32.const 288360) "a") (data (i32.const 288363) "a") (data (i32.const 288366) "a") (data (i32.const 288369) "a") (data (i32.const 288372) "a") (data (i32.const 288375) "a") (data (i32.const 288378) "a") (data (i32.const 288381) "a") (data (i32.const 288384) "a") (data (i32.const 288387) "a") (data (i32.const 288390) "a") (data (i32.const 288393) "a") (data (i32.const 288396) "a") (data (i32.const 288399) "a") (data (i32.const 288402) "a") (data (i32.const 288405) "a") (data (i32.const 288408) "a") (data (i32.const 288411) "a") (data (i32.const 288414) "a") (data (i32.const 288417) "a") (data (i32.const 288420) "a") (data (i32.const 288423) "a") (data (i32.const 288426) "a") (data (i32.const 288429) "a") (data (i32.const 288432) "a") (data (i32.const 288435) "a") (data (i32.const 288438) "a") (data (i32.const 288441) "a") (data (i32.const 288444) "a") (data (i32.const 288447) "a") (data (i32.const 288450) "a") (data (i32.const 288453) "a") (data (i32.const 288456) "a") (data (i32.const 288459) "a") (data (i32.const 288462) "a") (data (i32.const 288465) "a") (data (i32.const 288468) "a") (data (i32.const 288471) "a") (data (i32.const 288474) "a") (data (i32.const 288477) "a") (data (i32.const 288480) "a") (data (i32.const 288483) "a") (data (i32.const 288486) "a") (data (i32.const 288489) "a") (data (i32.const 288492) "a") (data (i32.const 288495) "a") (data (i32.const 288498) "a") (data (i32.const 288501) "a") (data (i32.const 288504) "a") (data (i32.const 288507) "a") (data (i32.const 288510) "a") (data (i32.const 288513) "a") (data (i32.const 288516) "a") (data (i32.const 288519) "a") (data (i32.const 288522) "a") (data (i32.const 288525) "a") (data (i32.const 288528) "a") (data (i32.const 288531) "a") (data (i32.const 288534) "a") (data (i32.const 288537) "a") (data (i32.const 288540) "a") (data (i32.const 288543) "a") (data (i32.const 288546) "a") (data (i32.const 288549) "a") (data (i32.const 288552) "a") (data (i32.const 288555) "a") (data (i32.const 288558) "a") (data (i32.const 288561) "a") (data (i32.const 288564) "a") (data (i32.const 288567) "a") (data (i32.const 288570) "a") (data (i32.const 288573) "a") (data (i32.const 288576) "a") (data (i32.const 288579) "a") (data (i32.const 288582) "a") (data (i32.const 288585) "a") (data (i32.const 288588) "a") (data (i32.const 288591) "a") (data (i32.const 288594) "a") (data (i32.const 288597) "a") (data (i32.const 288600) "a") (data (i32.const 288603) "a") (data (i32.const 288606) "a") (data (i32.const 288609) "a") (data (i32.const 288612) "a") (data (i32.const 288615) "a") (data (i32.const 288618) "a") (data (i32.const 288621) "a") (data (i32.const 288624) "a") (data (i32.const 288627) "a") (data (i32.const 288630) "a") (data (i32.const 288633) "a") (data (i32.const 288636) "a") (data (i32.const 288639) "a") (data (i32.const 288642) "a") (data (i32.const 288645) "a") (data (i32.const 288648) "a") (data (i32.const 288651) "a") (data (i32.const 288654) "a") (data (i32.const 288657) "a") (data (i32.const 288660) "a") (data (i32.const 288663) "a") (data (i32.const 288666) "a") (data (i32.const 288669) "a") (data (i32.const 288672) "a") (data (i32.const 288675) "a") (data (i32.const 288678) "a") (data (i32.const 288681) "a") (data (i32.const 288684) "a") (data (i32.const 288687) "a") (data (i32.const 288690) "a") (data (i32.const 288693) "a") (data (i32.const 288696) "a") (data (i32.const 288699) "a") (data (i32.const 288702) "a") (data (i32.const 288705) "a") (data (i32.const 288708) "a") (data (i32.const 288711) "a") (data (i32.const 288714) "a") (data (i32.const 288717) "a") (data (i32.const 288720) "a") (data (i32.const 288723) "a") (data (i32.const 288726) "a") (data (i32.const 288729) "a") (data (i32.const 288732) "a") (data (i32.const 288735) "a") (data (i32.const 288738) "a") (data (i32.const 288741) "a") (data (i32.const 288744) "a") (data (i32.const 288747) "a") (data (i32.const 288750) "a") (data (i32.const 288753) "a") (data (i32.const 288756) "a") (data (i32.const 288759) "a") (data (i32.const 288762) "a") (data (i32.const 288765) "a") (data (i32.const 288768) "a") (data (i32.const 288771) "a") (data (i32.const 288774) "a") (data (i32.const 288777) "a") (data (i32.const 288780) "a") (data (i32.const 288783) "a") (data (i32.const 288786) "a") (data (i32.const 288789) "a") (data (i32.const 288792) "a") (data (i32.const 288795) "a") (data (i32.const 288798) "a") (data (i32.const 288801) "a") (data (i32.const 288804) "a") (data (i32.const 288807) "a") (data (i32.const 288810) "a") (data (i32.const 288813) "a") (data (i32.const 288816) "a") (data (i32.const 288819) "a") (data (i32.const 288822) "a") (data (i32.const 288825) "a") (data (i32.const 288828) "a") (data (i32.const 288831) "a") (data (i32.const 288834) "a") (data (i32.const 288837) "a") (data (i32.const 288840) "a") (data (i32.const 288843) "a") (data (i32.const 288846) "a") (data (i32.const 288849) "a") (data (i32.const 288852) "a") (data (i32.const 288855) "a") (data (i32.const 288858) "a") (data (i32.const 288861) "a") (data (i32.const 288864) "a") (data (i32.const 288867) "a") (data (i32.const 288870) "a") (data (i32.const 288873) "a") (data (i32.const 288876) "a") (data (i32.const 288879) "a") (data (i32.const 288882) "a") (data (i32.const 288885) "a") (data (i32.const 288888) "a") (data (i32.const 288891) "a") (data (i32.const 288894) "a") (data (i32.const 288897) "a") (data (i32.const 288900) "a") (data (i32.const 288903) "a") (data (i32.const 288906) "a") (data (i32.const 288909) "a") (data (i32.const 288912) "a") (data (i32.const 288915) "a") (data (i32.const 288918) "a") (data (i32.const 288921) "a") (data (i32.const 288924) "a") (data (i32.const 288927) "a") (data (i32.const 288930) "a") (data (i32.const 288933) "a") (data (i32.const 288936) "a") (data (i32.const 288939) "a") (data (i32.const 288942) "a") (data (i32.const 288945) "a") (data (i32.const 288948) "a") (data (i32.const 288951) "a") (data (i32.const 288954) "a") (data (i32.const 288957) "a") (data (i32.const 288960) "a") (data (i32.const 288963) "a") (data (i32.const 288966) "a") (data (i32.const 288969) "a") (data (i32.const 288972) "a") (data (i32.const 288975) "a") (data (i32.const 288978) "a") (data (i32.const 288981) "a") (data (i32.const 288984) "a") (data (i32.const 288987) "a") (data (i32.const 288990) "a") (data (i32.const 288993) "a") (data (i32.const 288996) "a") (data (i32.const 288999) "a") (data (i32.const 289002) "a") (data (i32.const 289005) "a") (data (i32.const 289008) "a") (data (i32.const 289011) "a") (data (i32.const 289014) "a") (data (i32.const 289017) "a") (data (i32.const 289020) "a") (data (i32.const 289023) "a") (data (i32.const 289026) "a") (data (i32.const 289029) "a") (data (i32.const 289032) "a") (data (i32.const 289035) "a") (data (i32.const 289038) "a") (data (i32.const 289041) "a") (data (i32.const 289044) "a") (data (i32.const 289047) "a") (data (i32.const 289050) "a") (data (i32.const 289053) "a") (data (i32.const 289056) "a") (data (i32.const 289059) "a") (data (i32.const 289062) "a") (data (i32.const 289065) "a") (data (i32.const 289068) "a") (data (i32.const 289071) "a") (data (i32.const 289074) "a") (data (i32.const 289077) "a") (data (i32.const 289080) "a") (data (i32.const 289083) "a") (data (i32.const 289086) "a") (data (i32.const 289089) "a") (data (i32.const 289092) "a") (data (i32.const 289095) "a") (data (i32.const 289098) "a") (data (i32.const 289101) "a") (data (i32.const 289104) "a") (data (i32.const 289107) "a") (data (i32.const 289110) "a") (data (i32.const 289113) "a") (data (i32.const 289116) "a") (data (i32.const 289119) "a") (data (i32.const 289122) "a") (data (i32.const 289125) "a") (data (i32.const 289128) "a") (data (i32.const 289131) "a") (data (i32.const 289134) "a") (data (i32.const 289137) "a") (data (i32.const 289140) "a") (data (i32.const 289143) "a") (data (i32.const 289146) "a") (data (i32.const 289149) "a") (data (i32.const 289152) "a") (data (i32.const 289155) "a") (data (i32.const 289158) "a") (data (i32.const 289161) "a") (data (i32.const 289164) "a") (data (i32.const 289167) "a") (data (i32.const 289170) "a") (data (i32.const 289173) "a") (data (i32.const 289176) "a") (data (i32.const 289179) "a") (data (i32.const 289182) "a") (data (i32.const 289185) "a") (data (i32.const 289188) "a") (data (i32.const 289191) "a") (data (i32.const 289194) "a") (data (i32.const 289197) "a") (data (i32.const 289200) "a") (data (i32.const 289203) "a") (data (i32.const 289206) "a") (data (i32.const 289209) "a") (data (i32.const 289212) "a") (data (i32.const 289215) "a") (data (i32.const 289218) "a") (data (i32.const 289221) "a") (data (i32.const 289224) "a") (data (i32.const 289227) "a") (data (i32.const 289230) "a") (data (i32.const 289233) "a") (data (i32.const 289236) "a") (data (i32.const 289239) "a") (data (i32.const 289242) "a") (data (i32.const 289245) "a") (data (i32.const 289248) "a") (data (i32.const 289251) "a") (data (i32.const 289254) "a") (data (i32.const 289257) "a") (data (i32.const 289260) "a") (data (i32.const 289263) "a") (data (i32.const 289266) "a") (data (i32.const 289269) "a") (data (i32.const 289272) "a") (data (i32.const 289275) "a") (data (i32.const 289278) "a") (data (i32.const 289281) "a") (data (i32.const 289284) "a") (data (i32.const 289287) "a") (data (i32.const 289290) "a") (data (i32.const 289293) "a") (data (i32.const 289296) "a") (data (i32.const 289299) "a") (data (i32.const 289302) "a") (data (i32.const 289305) "a") (data (i32.const 289308) "a") (data (i32.const 289311) "a") (data (i32.const 289314) "a") (data (i32.const 289317) "a") (data (i32.const 289320) "a") (data (i32.const 289323) "a") (data (i32.const 289326) "a") (data (i32.const 289329) "a") (data (i32.const 289332) "a") (data (i32.const 289335) "a") (data (i32.const 289338) "a") (data (i32.const 289341) "a") (data (i32.const 289344) "a") (data (i32.const 289347) "a") (data (i32.const 289350) "a") (data (i32.const 289353) "a") (data (i32.const 289356) "a") (data (i32.const 289359) "a") (data (i32.const 289362) "a") (data (i32.const 289365) "a") (data (i32.const 289368) "a") (data (i32.const 289371) "a") (data (i32.const 289374) "a") (data (i32.const 289377) "a") (data (i32.const 289380) "a") (data (i32.const 289383) "a") (data (i32.const 289386) "a") (data (i32.const 289389) "a") (data (i32.const 289392) "a") (data (i32.const 289395) "a") (data (i32.const 289398) "a") (data (i32.const 289401) "a") (data (i32.const 289404) "a") (data (i32.const 289407) "a") (data (i32.const 289410) "a") (data (i32.const 289413) "a") (data (i32.const 289416) "a") (data (i32.const 289419) "a") (data (i32.const 289422) "a") (data (i32.const 289425) "a") (data (i32.const 289428) "a") (data (i32.const 289431) "a") (data (i32.const 289434) "a") (data (i32.const 289437) "a") (data (i32.const 289440) "a") (data (i32.const 289443) "a") (data (i32.const 289446) "a") (data (i32.const 289449) "a") (data (i32.const 289452) "a") (data (i32.const 289455) "a") (data (i32.const 289458) "a") (data (i32.const 289461) "a") (data (i32.const 289464) "a") (data (i32.const 289467) "a") (data (i32.const 289470) "a") (data (i32.const 289473) "a") (data (i32.const 289476) "a") (data (i32.const 289479) "a") (data (i32.const 289482) "a") (data (i32.const 289485) "a") (data (i32.const 289488) "a") (data (i32.const 289491) "a") (data (i32.const 289494) "a") (data (i32.const 289497) "a") (data (i32.const 289500) "a") (data (i32.const 289503) "a") (data (i32.const 289506) "a") (data (i32.const 289509) "a") (data (i32.const 289512) "a") (data (i32.const 289515) "a") (data (i32.const 289518) "a") (data (i32.const 289521) "a") (data (i32.const 289524) "a") (data (i32.const 289527) "a") (data (i32.const 289530) "a") (data (i32.const 289533) "a") (data (i32.const 289536) "a") (data (i32.const 289539) "a") (data (i32.const 289542) "a") (data (i32.const 289545) "a") (data (i32.const 289548) "a") (data (i32.const 289551) "a") (data (i32.const 289554) "a") (data (i32.const 289557) "a") (data (i32.const 289560) "a") (data (i32.const 289563) "a") (data (i32.const 289566) "a") (data (i32.const 289569) "a") (data (i32.const 289572) "a") (data (i32.const 289575) "a") (data (i32.const 289578) "a") (data (i32.const 289581) "a") (data (i32.const 289584) "a") (data (i32.const 289587) "a") (data (i32.const 289590) "a") (data (i32.const 289593) "a") (data (i32.const 289596) "a") (data (i32.const 289599) "a") (data (i32.const 289602) "a") (data (i32.const 289605) "a") (data (i32.const 289608) "a") (data (i32.const 289611) "a") (data (i32.const 289614) "a") (data (i32.const 289617) "a") (data (i32.const 289620) "a") (data (i32.const 289623) "a") (data (i32.const 289626) "a") (data (i32.const 289629) "a") (data (i32.const 289632) "a") (data (i32.const 289635) "a") (data (i32.const 289638) "a") (data (i32.const 289641) "a") (data (i32.const 289644) "a") (data (i32.const 289647) "a") (data (i32.const 289650) "a") (data (i32.const 289653) "a") (data (i32.const 289656) "a") (data (i32.const 289659) "a") (data (i32.const 289662) "a") (data (i32.const 289665) "a") (data (i32.const 289668) "a") (data (i32.const 289671) "a") (data (i32.const 289674) "a") (data (i32.const 289677) "a") (data (i32.const 289680) "a") (data (i32.const 289683) "a") (data (i32.const 289686) "a") (data (i32.const 289689) "a") (data (i32.const 289692) "a") (data (i32.const 289695) "a") (data (i32.const 289698) "a") (data (i32.const 289701) "a") (data (i32.const 289704) "a") (data (i32.const 289707) "a") (data (i32.const 289710) "a") (data (i32.const 289713) "a") (data (i32.const 289716) "a") (data (i32.const 289719) "a") (data (i32.const 289722) "a") (data (i32.const 289725) "a") (data (i32.const 289728) "a") (data (i32.const 289731) "a") (data (i32.const 289734) "a") (data (i32.const 289737) "a") (data (i32.const 289740) "a") (data (i32.const 289743) "a") (data (i32.const 289746) "a") (data (i32.const 289749) "a") (data (i32.const 289752) "a") (data (i32.const 289755) "a") (data (i32.const 289758) "a") (data (i32.const 289761) "a") (data (i32.const 289764) "a") (data (i32.const 289767) "a") (data (i32.const 289770) "a") (data (i32.const 289773) "a") (data (i32.const 289776) "a") (data (i32.const 289779) "a") (data (i32.const 289782) "a") (data (i32.const 289785) "a") (data (i32.const 289788) "a") (data (i32.const 289791) "a") (data (i32.const 289794) "a") (data (i32.const 289797) "a") (data (i32.const 289800) "a") (data (i32.const 289803) "a") (data (i32.const 289806) "a") (data (i32.const 289809) "a") (data (i32.const 289812) "a") (data (i32.const 289815) "a") (data (i32.const 289818) "a") (data (i32.const 289821) "a") (data (i32.const 289824) "a") (data (i32.const 289827) "a") (data (i32.const 289830) "a") (data (i32.const 289833) "a") (data (i32.const 289836) "a") (data (i32.const 289839) "a") (data (i32.const 289842) "a") (data (i32.const 289845) "a") (data (i32.const 289848) "a") (data (i32.const 289851) "a") (data (i32.const 289854) "a") (data (i32.const 289857) "a") (data (i32.const 289860) "a") (data (i32.const 289863) "a") (data (i32.const 289866) "a") (data (i32.const 289869) "a") (data (i32.const 289872) "a") (data (i32.const 289875) "a") (data (i32.const 289878) "a") (data (i32.const 289881) "a") (data (i32.const 289884) "a") (data (i32.const 289887) "a") (data (i32.const 289890) "a") (data (i32.const 289893) "a") (data (i32.const 289896) "a") (data (i32.const 289899) "a") (data (i32.const 289902) "a") (data (i32.const 289905) "a") (data (i32.const 289908) "a") (data (i32.const 289911) "a") (data (i32.const 289914) "a") (data (i32.const 289917) "a") (data (i32.const 289920) "a") (data (i32.const 289923) "a") (data (i32.const 289926) "a") (data (i32.const 289929) "a") (data (i32.const 289932) "a") (data (i32.const 289935) "a") (data (i32.const 289938) "a") (data (i32.const 289941) "a") (data (i32.const 289944) "a") (data (i32.const 289947) "a") (data (i32.const 289950) "a") (data (i32.const 289953) "a") (data (i32.const 289956) "a") (data (i32.const 289959) "a") (data (i32.const 289962) "a") (data (i32.const 289965) "a") (data (i32.const 289968) "a") (data (i32.const 289971) "a") (data (i32.const 289974) "a") (data (i32.const 289977) "a") (data (i32.const 289980) "a") (data (i32.const 289983) "a") (data (i32.const 289986) "a") (data (i32.const 289989) "a") (data (i32.const 289992) "a") (data (i32.const 289995) "a") (data (i32.const 289998) "a") (data (i32.const 290001) "a") (data (i32.const 290004) "a") (data (i32.const 290007) "a") (data (i32.const 290010) "a") (data (i32.const 290013) "a") (data (i32.const 290016) "a") (data (i32.const 290019) "a") (data (i32.const 290022) "a") (data (i32.const 290025) "a") (data (i32.const 290028) "a") (data (i32.const 290031) "a") (data (i32.const 290034) "a") (data (i32.const 290037) "a") (data (i32.const 290040) "a") (data (i32.const 290043) "a") (data (i32.const 290046) "a") (data (i32.const 290049) "a") (data (i32.const 290052) "a") (data (i32.const 290055) "a") (data (i32.const 290058) "a") (data (i32.const 290061) "a") (data (i32.const 290064) "a") (data (i32.const 290067) "a") (data (i32.const 290070) "a") (data (i32.const 290073) "a") (data (i32.const 290076) "a") (data (i32.const 290079) "a") (data (i32.const 290082) "a") (data (i32.const 290085) "a") (data (i32.const 290088) "a") (data (i32.const 290091) "a") (data (i32.const 290094) "a") (data (i32.const 290097) "a") (data (i32.const 290100) "a") (data (i32.const 290103) "a") (data (i32.const 290106) "a") (data (i32.const 290109) "a") (data (i32.const 290112) "a") (data (i32.const 290115) "a") (data (i32.const 290118) "a") (data (i32.const 290121) "a") (data (i32.const 290124) "a") (data (i32.const 290127) "a") (data (i32.const 290130) "a") (data (i32.const 290133) "a") (data (i32.const 290136) "a") (data (i32.const 290139) "a") (data (i32.const 290142) "a") (data (i32.const 290145) "a") (data (i32.const 290148) "a") (data (i32.const 290151) "a") (data (i32.const 290154) "a") (data (i32.const 290157) "a") (data (i32.const 290160) "a") (data (i32.const 290163) "a") (data (i32.const 290166) "a") (data (i32.const 290169) "a") (data (i32.const 290172) "a") (data (i32.const 290175) "a") (data (i32.const 290178) "a") (data (i32.const 290181) "a") (data (i32.const 290184) "a") (data (i32.const 290187) "a") (data (i32.const 290190) "a") (data (i32.const 290193) "a") (data (i32.const 290196) "a") (data (i32.const 290199) "a") (data (i32.const 290202) "a") (data (i32.const 290205) "a") (data (i32.const 290208) "a") (data (i32.const 290211) "a") (data (i32.const 290214) "a") (data (i32.const 290217) "a") (data (i32.const 290220) "a") (data (i32.const 290223) "a") (data (i32.const 290226) "a") (data (i32.const 290229) "a") (data (i32.const 290232) "a") (data (i32.const 290235) "a") (data (i32.const 290238) "a") (data (i32.const 290241) "a") (data (i32.const 290244) "a") (data (i32.const 290247) "a") (data (i32.const 290250) "a") (data (i32.const 290253) "a") (data (i32.const 290256) "a") (data (i32.const 290259) "a") (data (i32.const 290262) "a") (data (i32.const 290265) "a") (data (i32.const 290268) "a") (data (i32.const 290271) "a") (data (i32.const 290274) "a") (data (i32.const 290277) "a") (data (i32.const 290280) "a") (data (i32.const 290283) "a") (data (i32.const 290286) "a") (data (i32.const 290289) "a") (data (i32.const 290292) "a") (data (i32.const 290295) "a") (data (i32.const 290298) "a") (data (i32.const 290301) "a") (data (i32.const 290304) "a") (data (i32.const 290307) "a") (data (i32.const 290310) "a") (data (i32.const 290313) "a") (data (i32.const 290316) "a") (data (i32.const 290319) "a") (data (i32.const 290322) "a") (data (i32.const 290325) "a") (data (i32.const 290328) "a") (data (i32.const 290331) "a") (data (i32.const 290334) "a") (data (i32.const 290337) "a") (data (i32.const 290340) "a") (data (i32.const 290343) "a") (data (i32.const 290346) "a") (data (i32.const 290349) "a") (data (i32.const 290352) "a") (data (i32.const 290355) "a") (data (i32.const 290358) "a") (data (i32.const 290361) "a") (data (i32.const 290364) "a") (data (i32.const 290367) "a") (data (i32.const 290370) "a") (data (i32.const 290373) "a") (data (i32.const 290376) "a") (data (i32.const 290379) "a") (data (i32.const 290382) "a") (data (i32.const 290385) "a") (data (i32.const 290388) "a") (data (i32.const 290391) "a") (data (i32.const 290394) "a") (data (i32.const 290397) "a") (data (i32.const 290400) "a") (data (i32.const 290403) "a") (data (i32.const 290406) "a") (data (i32.const 290409) "a") (data (i32.const 290412) "a") (data (i32.const 290415) "a") (data (i32.const 290418) "a") (data (i32.const 290421) "a") (data (i32.const 290424) "a") (data (i32.const 290427) "a") (data (i32.const 290430) "a") (data (i32.const 290433) "a") (data (i32.const 290436) "a") (data (i32.const 290439) "a") (data (i32.const 290442) "a") (data (i32.const 290445) "a") (data (i32.const 290448) "a") (data (i32.const 290451) "a") (data (i32.const 290454) "a") (data (i32.const 290457) "a") (data (i32.const 290460) "a") (data (i32.const 290463) "a") (data (i32.const 290466) "a") (data (i32.const 290469) "a") (data (i32.const 290472) "a") (data (i32.const 290475) "a") (data (i32.const 290478) "a") (data (i32.const 290481) "a") (data (i32.const 290484) "a") (data (i32.const 290487) "a") (data (i32.const 290490) "a") (data (i32.const 290493) "a") (data (i32.const 290496) "a") (data (i32.const 290499) "a") (data (i32.const 290502) "a") (data (i32.const 290505) "a") (data (i32.const 290508) "a") (data (i32.const 290511) "a") (data (i32.const 290514) "a") (data (i32.const 290517) "a") (data (i32.const 290520) "a") (data (i32.const 290523) "a") (data (i32.const 290526) "a") (data (i32.const 290529) "a") (data (i32.const 290532) "a") (data (i32.const 290535) "a") (data (i32.const 290538) "a") (data (i32.const 290541) "a") (data (i32.const 290544) "a") (data (i32.const 290547) "a") (data (i32.const 290550) "a") (data (i32.const 290553) "a") (data (i32.const 290556) "a") (data (i32.const 290559) "a") (data (i32.const 290562) "a") (data (i32.const 290565) "a") (data (i32.const 290568) "a") (data (i32.const 290571) "a") (data (i32.const 290574) "a") (data (i32.const 290577) "a") (data (i32.const 290580) "a") (data (i32.const 290583) "a") (data (i32.const 290586) "a") (data (i32.const 290589) "a") (data (i32.const 290592) "a") (data (i32.const 290595) "a") (data (i32.const 290598) "a") (data (i32.const 290601) "a") (data (i32.const 290604) "a") (data (i32.const 290607) "a") (data (i32.const 290610) "a") (data (i32.const 290613) "a") (data (i32.const 290616) "a") (data (i32.const 290619) "a") (data (i32.const 290622) "a") (data (i32.const 290625) "a") (data (i32.const 290628) "a") (data (i32.const 290631) "a") (data (i32.const 290634) "a") (data (i32.const 290637) "a") (data (i32.const 290640) "a") (data (i32.const 290643) "a") (data (i32.const 290646) "a") (data (i32.const 290649) "a") (data (i32.const 290652) "a") (data (i32.const 290655) "a") (data (i32.const 290658) "a") (data (i32.const 290661) "a") (data (i32.const 290664) "a") (data (i32.const 290667) "a") (data (i32.const 290670) "a") (data (i32.const 290673) "a") (data (i32.const 290676) "a") (data (i32.const 290679) "a") (data (i32.const 290682) "a") (data (i32.const 290685) "a") (data (i32.const 290688) "a") (data (i32.const 290691) "a") (data (i32.const 290694) "a") (data (i32.const 290697) "a") (data (i32.const 290700) "a") (data (i32.const 290703) "a") (data (i32.const 290706) "a") (data (i32.const 290709) "a") (data (i32.const 290712) "a") (data (i32.const 290715) "a") (data (i32.const 290718) "a") (data (i32.const 290721) "a") (data (i32.const 290724) "a") (data (i32.const 290727) "a") (data (i32.const 290730) "a") (data (i32.const 290733) "a") (data (i32.const 290736) "a") (data (i32.const 290739) "a") (data (i32.const 290742) "a") (data (i32.const 290745) "a") (data (i32.const 290748) "a") (data (i32.const 290751) "a") (data (i32.const 290754) "a") (data (i32.const 290757) "a") (data (i32.const 290760) "a") (data (i32.const 290763) "a") (data (i32.const 290766) "a") (data (i32.const 290769) "a") (data (i32.const 290772) "a") (data (i32.const 290775) "a") (data (i32.const 290778) "a") (data (i32.const 290781) "a") (data (i32.const 290784) "a") (data (i32.const 290787) "a") (data (i32.const 290790) "a") (data (i32.const 290793) "a") (data (i32.const 290796) "a") (data (i32.const 290799) "a") (data (i32.const 290802) "a") (data (i32.const 290805) "a") (data (i32.const 290808) "a") (data (i32.const 290811) "a") (data (i32.const 290814) "a") (data (i32.const 290817) "a") (data (i32.const 290820) "a") (data (i32.const 290823) "a") (data (i32.const 290826) "a") (data (i32.const 290829) "a") (data (i32.const 290832) "a") (data (i32.const 290835) "a") (data (i32.const 290838) "a") (data (i32.const 290841) "a") (data (i32.const 290844) "a") (data (i32.const 290847) "a") (data (i32.const 290850) "a") (data (i32.const 290853) "a") (data (i32.const 290856) "a") (data (i32.const 290859) "a") (data (i32.const 290862) "a") (data (i32.const 290865) "a") (data (i32.const 290868) "a") (data (i32.const 290871) "a") (data (i32.const 290874) "a") (data (i32.const 290877) "a") (data (i32.const 290880) "a") (data (i32.const 290883) "a") (data (i32.const 290886) "a") (data (i32.const 290889) "a") (data (i32.const 290892) "a") (data (i32.const 290895) "a") (data (i32.const 290898) "a") (data (i32.const 290901) "a") (data (i32.const 290904) "a") (data (i32.const 290907) "a") (data (i32.const 290910) "a") (data (i32.const 290913) "a") (data (i32.const 290916) "a") (data (i32.const 290919) "a") (data (i32.const 290922) "a") (data (i32.const 290925) "a") (data (i32.const 290928) "a") (data (i32.const 290931) "a") (data (i32.const 290934) "a") (data (i32.const 290937) "a") (data (i32.const 290940) "a") (data (i32.const 290943) "a") (data (i32.const 290946) "a") (data (i32.const 290949) "a") (data (i32.const 290952) "a") (data (i32.const 290955) "a") (data (i32.const 290958) "a") (data (i32.const 290961) "a") (data (i32.const 290964) "a") (data (i32.const 290967) "a") (data (i32.const 290970) "a") (data (i32.const 290973) "a") (data (i32.const 290976) "a") (data (i32.const 290979) "a") (data (i32.const 290982) "a") (data (i32.const 290985) "a") (data (i32.const 290988) "a") (data (i32.const 290991) "a") (data (i32.const 290994) "a") (data (i32.const 290997) "a") (data (i32.const 291000) "a") (data (i32.const 291003) "a") (data (i32.const 291006) "a") (data (i32.const 291009) "a") (data (i32.const 291012) "a") (data (i32.const 291015) "a") (data (i32.const 291018) "a") (data (i32.const 291021) "a") (data (i32.const 291024) "a") (data (i32.const 291027) "a") (data (i32.const 291030) "a") (data (i32.const 291033) "a") (data (i32.const 291036) "a") (data (i32.const 291039) "a") (data (i32.const 291042) "a") (data (i32.const 291045) "a") (data (i32.const 291048) "a") (data (i32.const 291051) "a") (data (i32.const 291054) "a") (data (i32.const 291057) "a") (data (i32.const 291060) "a") (data (i32.const 291063) "a") (data (i32.const 291066) "a") (data (i32.const 291069) "a") (data (i32.const 291072) "a") (data (i32.const 291075) "a") (data (i32.const 291078) "a") (data (i32.const 291081) "a") (data (i32.const 291084) "a") (data (i32.const 291087) "a") (data (i32.const 291090) "a") (data (i32.const 291093) "a") (data (i32.const 291096) "a") (data (i32.const 291099) "a") (data (i32.const 291102) "a") (data (i32.const 291105) "a") (data (i32.const 291108) "a") (data (i32.const 291111) "a") (data (i32.const 291114) "a") (data (i32.const 291117) "a") (data (i32.const 291120) "a") (data (i32.const 291123) "a") (data (i32.const 291126) "a") (data (i32.const 291129) "a") (data (i32.const 291132) "a") (data (i32.const 291135) "a") (data (i32.const 291138) "a") (data (i32.const 291141) "a") (data (i32.const 291144) "a") (data (i32.const 291147) "a") (data (i32.const 291150) "a") (data (i32.const 291153) "a") (data (i32.const 291156) "a") (data (i32.const 291159) "a") (data (i32.const 291162) "a") (data (i32.const 291165) "a") (data (i32.const 291168) "a") (data (i32.const 291171) "a") (data (i32.const 291174) "a") (data (i32.const 291177) "a") (data (i32.const 291180) "a") (data (i32.const 291183) "a") (data (i32.const 291186) "a") (data (i32.const 291189) "a") (data (i32.const 291192) "a") (data (i32.const 291195) "a") (data (i32.const 291198) "a") (data (i32.const 291201) "a") (data (i32.const 291204) "a") (data (i32.const 291207) "a") (data (i32.const 291210) "a") (data (i32.const 291213) "a") (data (i32.const 291216) "a") (data (i32.const 291219) "a") (data (i32.const 291222) "a") (data (i32.const 291225) "a") (data (i32.const 291228) "a") (data (i32.const 291231) "a") (data (i32.const 291234) "a") (data (i32.const 291237) "a") (data (i32.const 291240) "a") (data (i32.const 291243) "a") (data (i32.const 291246) "a") (data (i32.const 291249) "a") (data (i32.const 291252) "a") (data (i32.const 291255) "a") (data (i32.const 291258) "a") (data (i32.const 291261) "a") (data (i32.const 291264) "a") (data (i32.const 291267) "a") (data (i32.const 291270) "a") (data (i32.const 291273) "a") (data (i32.const 291276) "a") (data (i32.const 291279) "a") (data (i32.const 291282) "a") (data (i32.const 291285) "a") (data (i32.const 291288) "a") (data (i32.const 291291) "a") (data (i32.const 291294) "a") (data (i32.const 291297) "a") (data (i32.const 291300) "a") (data (i32.const 291303) "a") (data (i32.const 291306) "a") (data (i32.const 291309) "a") (data (i32.const 291312) "a") (data (i32.const 291315) "a") (data (i32.const 291318) "a") (data (i32.const 291321) "a") (data (i32.const 291324) "a") (data (i32.const 291327) "a") (data (i32.const 291330) "a") (data (i32.const 291333) "a") (data (i32.const 291336) "a") (data (i32.const 291339) "a") (data (i32.const 291342) "a") (data (i32.const 291345) "a") (data (i32.const 291348) "a") (data (i32.const 291351) "a") (data (i32.const 291354) "a") (data (i32.const 291357) "a") (data (i32.const 291360) "a") (data (i32.const 291363) "a") (data (i32.const 291366) "a") (data (i32.const 291369) "a") (data (i32.const 291372) "a") (data (i32.const 291375) "a") (data (i32.const 291378) "a") (data (i32.const 291381) "a") (data (i32.const 291384) "a") (data (i32.const 291387) "a") (data (i32.const 291390) "a") (data (i32.const 291393) "a") (data (i32.const 291396) "a") (data (i32.const 291399) "a") (data (i32.const 291402) "a") (data (i32.const 291405) "a") (data (i32.const 291408) "a") (data (i32.const 291411) "a") (data (i32.const 291414) "a") (data (i32.const 291417) "a") (data (i32.const 291420) "a") (data (i32.const 291423) "a") (data (i32.const 291426) "a") (data (i32.const 291429) "a") (data (i32.const 291432) "a") (data (i32.const 291435) "a") (data (i32.const 291438) "a") (data (i32.const 291441) "a") (data (i32.const 291444) "a") (data (i32.const 291447) "a") (data (i32.const 291450) "a") (data (i32.const 291453) "a") (data (i32.const 291456) "a") (data (i32.const 291459) "a") (data (i32.const 291462) "a") (data (i32.const 291465) "a") (data (i32.const 291468) "a") (data (i32.const 291471) "a") (data (i32.const 291474) "a") (data (i32.const 291477) "a") (data (i32.const 291480) "a") (data (i32.const 291483) "a") (data (i32.const 291486) "a") (data (i32.const 291489) "a") (data (i32.const 291492) "a") (data (i32.const 291495) "a") (data (i32.const 291498) "a") (data (i32.const 291501) "a") (data (i32.const 291504) "a") (data (i32.const 291507) "a") (data (i32.const 291510) "a") (data (i32.const 291513) "a") (data (i32.const 291516) "a") (data (i32.const 291519) "a") (data (i32.const 291522) "a") (data (i32.const 291525) "a") (data (i32.const 291528) "a") (data (i32.const 291531) "a") (data (i32.const 291534) "a") (data (i32.const 291537) "a") (data (i32.const 291540) "a") (data (i32.const 291543) "a") (data (i32.const 291546) "a") (data (i32.const 291549) "a") (data (i32.const 291552) "a") (data (i32.const 291555) "a") (data (i32.const 291558) "a") (data (i32.const 291561) "a") (data (i32.const 291564) "a") (data (i32.const 291567) "a") (data (i32.const 291570) "a") (data (i32.const 291573) "a") (data (i32.const 291576) "a") (data (i32.const 291579) "a") (data (i32.const 291582) "a") (data (i32.const 291585) "a") (data (i32.const 291588) "a") (data (i32.const 291591) "a") (data (i32.const 291594) "a") (data (i32.const 291597) "a") (data (i32.const 291600) "a") (data (i32.const 291603) "a") (data (i32.const 291606) "a") (data (i32.const 291609) "a") (data (i32.const 291612) "a") (data (i32.const 291615) "a") (data (i32.const 291618) "a") (data (i32.const 291621) "a") (data (i32.const 291624) "a") (data (i32.const 291627) "a") (data (i32.const 291630) "a") (data (i32.const 291633) "a") (data (i32.const 291636) "a") (data (i32.const 291639) "a") (data (i32.const 291642) "a") (data (i32.const 291645) "a") (data (i32.const 291648) "a") (data (i32.const 291651) "a") (data (i32.const 291654) "a") (data (i32.const 291657) "a") (data (i32.const 291660) "a") (data (i32.const 291663) "a") (data (i32.const 291666) "a") (data (i32.const 291669) "a") (data (i32.const 291672) "a") (data (i32.const 291675) "a") (data (i32.const 291678) "a") (data (i32.const 291681) "a") (data (i32.const 291684) "a") (data (i32.const 291687) "a") (data (i32.const 291690) "a") (data (i32.const 291693) "a") (data (i32.const 291696) "a") (data (i32.const 291699) "a") (data (i32.const 291702) "a") (data (i32.const 291705) "a") (data (i32.const 291708) "a") (data (i32.const 291711) "a") (data (i32.const 291714) "a") (data (i32.const 291717) "a") (data (i32.const 291720) "a") (data (i32.const 291723) "a") (data (i32.const 291726) "a") (data (i32.const 291729) "a") (data (i32.const 291732) "a") (data (i32.const 291735) "a") (data (i32.const 291738) "a") (data (i32.const 291741) "a") (data (i32.const 291744) "a") (data (i32.const 291747) "a") (data (i32.const 291750) "a") (data (i32.const 291753) "a") (data (i32.const 291756) "a") (data (i32.const 291759) "a") (data (i32.const 291762) "a") (data (i32.const 291765) "a") (data (i32.const 291768) "a") (data (i32.const 291771) "a") (data (i32.const 291774) "a") (data (i32.const 291777) "a") (data (i32.const 291780) "a") (data (i32.const 291783) "a") (data (i32.const 291786) "a") (data (i32.const 291789) "a") (data (i32.const 291792) "a") (data (i32.const 291795) "a") (data (i32.const 291798) "a") (data (i32.const 291801) "a") (data (i32.const 291804) "a") (data (i32.const 291807) "a") (data (i32.const 291810) "a") (data (i32.const 291813) "a") (data (i32.const 291816) "a") (data (i32.const 291819) "a") (data (i32.const 291822) "a") (data (i32.const 291825) "a") (data (i32.const 291828) "a") (data (i32.const 291831) "a") (data (i32.const 291834) "a") (data (i32.const 291837) "a") (data (i32.const 291840) "a") (data (i32.const 291843) "a") (data (i32.const 291846) "a") (data (i32.const 291849) "a") (data (i32.const 291852) "a") (data (i32.const 291855) "a") (data (i32.const 291858) "a") (data (i32.const 291861) "a") (data (i32.const 291864) "a") (data (i32.const 291867) "a") (data (i32.const 291870) "a") (data (i32.const 291873) "a") (data (i32.const 291876) "a") (data (i32.const 291879) "a") (data (i32.const 291882) "a") (data (i32.const 291885) "a") (data (i32.const 291888) "a") (data (i32.const 291891) "a") (data (i32.const 291894) "a") (data (i32.const 291897) "a") (data (i32.const 291900) "a") (data (i32.const 291903) "a") (data (i32.const 291906) "a") (data (i32.const 291909) "a") (data (i32.const 291912) "a") (data (i32.const 291915) "a") (data (i32.const 291918) "a") (data (i32.const 291921) "a") (data (i32.const 291924) "a") (data (i32.const 291927) "a") (data (i32.const 291930) "a") (data (i32.const 291933) "a") (data (i32.const 291936) "a") (data (i32.const 291939) "a") (data (i32.const 291942) "a") (data (i32.const 291945) "a") (data (i32.const 291948) "a") (data (i32.const 291951) "a") (data (i32.const 291954) "a") (data (i32.const 291957) "a") (data (i32.const 291960) "a") (data (i32.const 291963) "a") (data (i32.const 291966) "a") (data (i32.const 291969) "a") (data (i32.const 291972) "a") (data (i32.const 291975) "a") (data (i32.const 291978) "a") (data (i32.const 291981) "a") (data (i32.const 291984) "a") (data (i32.const 291987) "a") (data (i32.const 291990) "a") (data (i32.const 291993) "a") (data (i32.const 291996) "a") (data (i32.const 291999) "a") (data (i32.const 292002) "a") (data (i32.const 292005) "a") (data (i32.const 292008) "a") (data (i32.const 292011) "a") (data (i32.const 292014) "a") (data (i32.const 292017) "a") (data (i32.const 292020) "a") (data (i32.const 292023) "a") (data (i32.const 292026) "a") (data (i32.const 292029) "a") (data (i32.const 292032) "a") (data (i32.const 292035) "a") (data (i32.const 292038) "a") (data (i32.const 292041) "a") (data (i32.const 292044) "a") (data (i32.const 292047) "a") (data (i32.const 292050) "a") (data (i32.const 292053) "a") (data (i32.const 292056) "a") (data (i32.const 292059) "a") (data (i32.const 292062) "a") (data (i32.const 292065) "a") (data (i32.const 292068) "a") (data (i32.const 292071) "a") (data (i32.const 292074) "a") (data (i32.const 292077) "a") (data (i32.const 292080) "a") (data (i32.const 292083) "a") (data (i32.const 292086) "a") (data (i32.const 292089) "a") (data (i32.const 292092) "a") (data (i32.const 292095) "a") (data (i32.const 292098) "a") (data (i32.const 292101) "a") (data (i32.const 292104) "a") (data (i32.const 292107) "a") (data (i32.const 292110) "a") (data (i32.const 292113) "a") (data (i32.const 292116) "a") (data (i32.const 292119) "a") (data (i32.const 292122) "a") (data (i32.const 292125) "a") (data (i32.const 292128) "a") (data (i32.const 292131) "a") (data (i32.const 292134) "a") (data (i32.const 292137) "a") (data (i32.const 292140) "a") (data (i32.const 292143) "a") (data (i32.const 292146) "a") (data (i32.const 292149) "a") (data (i32.const 292152) "a") (data (i32.const 292155) "a") (data (i32.const 292158) "a") (data (i32.const 292161) "a") (data (i32.const 292164) "a") (data (i32.const 292167) "a") (data (i32.const 292170) "a") (data (i32.const 292173) "a") (data (i32.const 292176) "a") (data (i32.const 292179) "a") (data (i32.const 292182) "a") (data (i32.const 292185) "a") (data (i32.const 292188) "a") (data (i32.const 292191) "a") (data (i32.const 292194) "a") (data (i32.const 292197) "a") (data (i32.const 292200) "a") (data (i32.const 292203) "a") (data (i32.const 292206) "a") (data (i32.const 292209) "a") (data (i32.const 292212) "a") (data (i32.const 292215) "a") (data (i32.const 292218) "a") (data (i32.const 292221) "a") (data (i32.const 292224) "a") (data (i32.const 292227) "a") (data (i32.const 292230) "a") (data (i32.const 292233) "a") (data (i32.const 292236) "a") (data (i32.const 292239) "a") (data (i32.const 292242) "a") (data (i32.const 292245) "a") (data (i32.const 292248) "a") (data (i32.const 292251) "a") (data (i32.const 292254) "a") (data (i32.const 292257) "a") (data (i32.const 292260) "a") (data (i32.const 292263) "a") (data (i32.const 292266) "a") (data (i32.const 292269) "a") (data (i32.const 292272) "a") (data (i32.const 292275) "a") (data (i32.const 292278) "a") (data (i32.const 292281) "a") (data (i32.const 292284) "a") (data (i32.const 292287) "a") (data (i32.const 292290) "a") (data (i32.const 292293) "a") (data (i32.const 292296) "a") (data (i32.const 292299) "a") (data (i32.const 292302) "a") (data (i32.const 292305) "a") (data (i32.const 292308) "a") (data (i32.const 292311) "a") (data (i32.const 292314) "a") (data (i32.const 292317) "a") (data (i32.const 292320) "a") (data (i32.const 292323) "a") (data (i32.const 292326) "a") (data (i32.const 292329) "a") (data (i32.const 292332) "a") (data (i32.const 292335) "a") (data (i32.const 292338) "a") (data (i32.const 292341) "a") (data (i32.const 292344) "a") (data (i32.const 292347) "a") (data (i32.const 292350) "a") (data (i32.const 292353) "a") (data (i32.const 292356) "a") (data (i32.const 292359) "a") (data (i32.const 292362) "a") (data (i32.const 292365) "a") (data (i32.const 292368) "a") (data (i32.const 292371) "a") (data (i32.const 292374) "a") (data (i32.const 292377) "a") (data (i32.const 292380) "a") (data (i32.const 292383) "a") (data (i32.const 292386) "a") (data (i32.const 292389) "a") (data (i32.const 292392) "a") (data (i32.const 292395) "a") (data (i32.const 292398) "a") (data (i32.const 292401) "a") (data (i32.const 292404) "a") (data (i32.const 292407) "a") (data (i32.const 292410) "a") (data (i32.const 292413) "a") (data (i32.const 292416) "a") (data (i32.const 292419) "a") (data (i32.const 292422) "a") (data (i32.const 292425) "a") (data (i32.const 292428) "a") (data (i32.const 292431) "a") (data (i32.const 292434) "a") (data (i32.const 292437) "a") (data (i32.const 292440) "a") (data (i32.const 292443) "a") (data (i32.const 292446) "a") (data (i32.const 292449) "a") (data (i32.const 292452) "a") (data (i32.const 292455) "a") (data (i32.const 292458) "a") (data (i32.const 292461) "a") (data (i32.const 292464) "a") (data (i32.const 292467) "a") (data (i32.const 292470) "a") (data (i32.const 292473) "a") (data (i32.const 292476) "a") (data (i32.const 292479) "a") (data (i32.const 292482) "a") (data (i32.const 292485) "a") (data (i32.const 292488) "a") (data (i32.const 292491) "a") (data (i32.const 292494) "a") (data (i32.const 292497) "a") (data (i32.const 292500) "a") (data (i32.const 292503) "a") (data (i32.const 292506) "a") (data (i32.const 292509) "a") (data (i32.const 292512) "a") (data (i32.const 292515) "a") (data (i32.const 292518) "a") (data (i32.const 292521) "a") (data (i32.const 292524) "a") (data (i32.const 292527) "a") (data (i32.const 292530) "a") (data (i32.const 292533) "a") (data (i32.const 292536) "a") (data (i32.const 292539) "a") (data (i32.const 292542) "a") (data (i32.const 292545) "a") (data (i32.const 292548) "a") (data (i32.const 292551) "a") (data (i32.const 292554) "a") (data (i32.const 292557) "a") (data (i32.const 292560) "a") (data (i32.const 292563) "a") (data (i32.const 292566) "a") (data (i32.const 292569) "a") (data (i32.const 292572) "a") (data (i32.const 292575) "a") (data (i32.const 292578) "a") (data (i32.const 292581) "a") (data (i32.const 292584) "a") (data (i32.const 292587) "a") (data (i32.const 292590) "a") (data (i32.const 292593) "a") (data (i32.const 292596) "a") (data (i32.const 292599) "a") (data (i32.const 292602) "a") (data (i32.const 292605) "a") (data (i32.const 292608) "a") (data (i32.const 292611) "a") (data (i32.const 292614) "a") (data (i32.const 292617) "a") (data (i32.const 292620) "a") (data (i32.const 292623) "a") (data (i32.const 292626) "a") (data (i32.const 292629) "a") (data (i32.const 292632) "a") (data (i32.const 292635) "a") (data (i32.const 292638) "a") (data (i32.const 292641) "a") (data (i32.const 292644) "a") (data (i32.const 292647) "a") (data (i32.const 292650) "a") (data (i32.const 292653) "a") (data (i32.const 292656) "a") (data (i32.const 292659) "a") (data (i32.const 292662) "a") (data (i32.const 292665) "a") (data (i32.const 292668) "a") (data (i32.const 292671) "a") (data (i32.const 292674) "a") (data (i32.const 292677) "a") (data (i32.const 292680) "a") (data (i32.const 292683) "a") (data (i32.const 292686) "a") (data (i32.const 292689) "a") (data (i32.const 292692) "a") (data (i32.const 292695) "a") (data (i32.const 292698) "a") (data (i32.const 292701) "a") (data (i32.const 292704) "a") (data (i32.const 292707) "a") (data (i32.const 292710) "a") (data (i32.const 292713) "a") (data (i32.const 292716) "a") (data (i32.const 292719) "a") (data (i32.const 292722) "a") (data (i32.const 292725) "a") (data (i32.const 292728) "a") (data (i32.const 292731) "a") (data (i32.const 292734) "a") (data (i32.const 292737) "a") (data (i32.const 292740) "a") (data (i32.const 292743) "a") (data (i32.const 292746) "a") (data (i32.const 292749) "a") (data (i32.const 292752) "a") (data (i32.const 292755) "a") (data (i32.const 292758) "a") (data (i32.const 292761) "a") (data (i32.const 292764) "a") (data (i32.const 292767) "a") (data (i32.const 292770) "a") (data (i32.const 292773) "a") (data (i32.const 292776) "a") (data (i32.const 292779) "a") (data (i32.const 292782) "a") (data (i32.const 292785) "a") (data (i32.const 292788) "a") (data (i32.const 292791) "a") (data (i32.const 292794) "a") (data (i32.const 292797) "a") (data (i32.const 292800) "a") (data (i32.const 292803) "a") (data (i32.const 292806) "a") (data (i32.const 292809) "a") (data (i32.const 292812) "a") (data (i32.const 292815) "a") (data (i32.const 292818) "a") (data (i32.const 292821) "a") (data (i32.const 292824) "a") (data (i32.const 292827) "a") (data (i32.const 292830) "a") (data (i32.const 292833) "a") (data (i32.const 292836) "a") (data (i32.const 292839) "a") (data (i32.const 292842) "a") (data (i32.const 292845) "a") (data (i32.const 292848) "a") (data (i32.const 292851) "a") (data (i32.const 292854) "a") (data (i32.const 292857) "a") (data (i32.const 292860) "a") (data (i32.const 292863) "a") (data (i32.const 292866) "a") (data (i32.const 292869) "a") (data (i32.const 292872) "a") (data (i32.const 292875) "a") (data (i32.const 292878) "a") (data (i32.const 292881) "a") (data (i32.const 292884) "a") (data (i32.const 292887) "a") (data (i32.const 292890) "a") (data (i32.const 292893) "a") (data (i32.const 292896) "a") (data (i32.const 292899) "a") (data (i32.const 292902) "a") (data (i32.const 292905) "a") (data (i32.const 292908) "a") (data (i32.const 292911) "a") (data (i32.const 292914) "a") (data (i32.const 292917) "a") (data (i32.const 292920) "a") (data (i32.const 292923) "a") (data (i32.const 292926) "a") (data (i32.const 292929) "a") (data (i32.const 292932) "a") (data (i32.const 292935) "a") (data (i32.const 292938) "a") (data (i32.const 292941) "a") (data (i32.const 292944) "a") (data (i32.const 292947) "a") (data (i32.const 292950) "a") (data (i32.const 292953) "a") (data (i32.const 292956) "a") (data (i32.const 292959) "a") (data (i32.const 292962) "a") (data (i32.const 292965) "a") (data (i32.const 292968) "a") (data (i32.const 292971) "a") (data (i32.const 292974) "a") (data (i32.const 292977) "a") (data (i32.const 292980) "a") (data (i32.const 292983) "a") (data (i32.const 292986) "a") (data (i32.const 292989) "a") (data (i32.const 292992) "a") (data (i32.const 292995) "a") (data (i32.const 292998) "a") (data (i32.const 293001) "a") (data (i32.const 293004) "a") (data (i32.const 293007) "a") (data (i32.const 293010) "a") (data (i32.const 293013) "a") (data (i32.const 293016) "a") (data (i32.const 293019) "a") (data (i32.const 293022) "a") (data (i32.const 293025) "a") (data (i32.const 293028) "a") (data (i32.const 293031) "a") (data (i32.const 293034) "a") (data (i32.const 293037) "a") (data (i32.const 293040) "a") (data (i32.const 293043) "a") (data (i32.const 293046) "a") (data (i32.const 293049) "a") (data (i32.const 293052) "a") (data (i32.const 293055) "a") (data (i32.const 293058) "a") (data (i32.const 293061) "a") (data (i32.const 293064) "a") (data (i32.const 293067) "a") (data (i32.const 293070) "a") (data (i32.const 293073) "a") (data (i32.const 293076) "a") (data (i32.const 293079) "a") (data (i32.const 293082) "a") (data (i32.const 293085) "a") (data (i32.const 293088) "a") (data (i32.const 293091) "a") (data (i32.const 293094) "a") (data (i32.const 293097) "a") (data (i32.const 293100) "a") (data (i32.const 293103) "a") (data (i32.const 293106) "a") (data (i32.const 293109) "a") (data (i32.const 293112) "a") (data (i32.const 293115) "a") (data (i32.const 293118) "a") (data (i32.const 293121) "a") (data (i32.const 293124) "a") (data (i32.const 293127) "a") (data (i32.const 293130) "a") (data (i32.const 293133) "a") (data (i32.const 293136) "a") (data (i32.const 293139) "a") (data (i32.const 293142) "a") (data (i32.const 293145) "a") (data (i32.const 293148) "a") (data (i32.const 293151) "a") (data (i32.const 293154) "a") (data (i32.const 293157) "a") (data (i32.const 293160) "a") (data (i32.const 293163) "a") (data (i32.const 293166) "a") (data (i32.const 293169) "a") (data (i32.const 293172) "a") (data (i32.const 293175) "a") (data (i32.const 293178) "a") (data (i32.const 293181) "a") (data (i32.const 293184) "a") (data (i32.const 293187) "a") (data (i32.const 293190) "a") (data (i32.const 293193) "a") (data (i32.const 293196) "a") (data (i32.const 293199) "a") (data (i32.const 293202) "a") (data (i32.const 293205) "a") (data (i32.const 293208) "a") (data (i32.const 293211) "a") (data (i32.const 293214) "a") (data (i32.const 293217) "a") (data (i32.const 293220) "a") (data (i32.const 293223) "a") (data (i32.const 293226) "a") (data (i32.const 293229) "a") (data (i32.const 293232) "a") (data (i32.const 293235) "a") (data (i32.const 293238) "a") (data (i32.const 293241) "a") (data (i32.const 293244) "a") (data (i32.const 293247) "a") (data (i32.const 293250) "a") (data (i32.const 293253) "a") (data (i32.const 293256) "a") (data (i32.const 293259) "a") (data (i32.const 293262) "a") (data (i32.const 293265) "a") (data (i32.const 293268) "a") (data (i32.const 293271) "a") (data (i32.const 293274) "a") (data (i32.const 293277) "a") (data (i32.const 293280) "a") (data (i32.const 293283) "a") (data (i32.const 293286) "a") (data (i32.const 293289) "a") (data (i32.const 293292) "a") (data (i32.const 293295) "a") (data (i32.const 293298) "a") (data (i32.const 293301) "a") (data (i32.const 293304) "a") (data (i32.const 293307) "a") (data (i32.const 293310) "a") (data (i32.const 293313) "a") (data (i32.const 293316) "a") (data (i32.const 293319) "a") (data (i32.const 293322) "a") (data (i32.const 293325) "a") (data (i32.const 293328) "a") (data (i32.const 293331) "a") (data (i32.const 293334) "a") (data (i32.const 293337) "a") (data (i32.const 293340) "a") (data (i32.const 293343) "a") (data (i32.const 293346) "a") (data (i32.const 293349) "a") (data (i32.const 293352) "a") (data (i32.const 293355) "a") (data (i32.const 293358) "a") (data (i32.const 293361) "a") (data (i32.const 293364) "a") (data (i32.const 293367) "a") (data (i32.const 293370) "a") (data (i32.const 293373) "a") (data (i32.const 293376) "a") (data (i32.const 293379) "a") (data (i32.const 293382) "a") (data (i32.const 293385) "a") (data (i32.const 293388) "a") (data (i32.const 293391) "a") (data (i32.const 293394) "a") (data (i32.const 293397) "a") (data (i32.const 293400) "a") (data (i32.const 293403) "a") (data (i32.const 293406) "a") (data (i32.const 293409) "a") (data (i32.const 293412) "a") (data (i32.const 293415) "a") (data (i32.const 293418) "a") (data (i32.const 293421) "a") (data (i32.const 293424) "a") (data (i32.const 293427) "a") (data (i32.const 293430) "a") (data (i32.const 293433) "a") (data (i32.const 293436) "a") (data (i32.const 293439) "a") (data (i32.const 293442) "a") (data (i32.const 293445) "a") (data (i32.const 293448) "a") (data (i32.const 293451) "a") (data (i32.const 293454) "a") (data (i32.const 293457) "a") (data (i32.const 293460) "a") (data (i32.const 293463) "a") (data (i32.const 293466) "a") (data (i32.const 293469) "a") (data (i32.const 293472) "a") (data (i32.const 293475) "a") (data (i32.const 293478) "a") (data (i32.const 293481) "a") (data (i32.const 293484) "a") (data (i32.const 293487) "a") (data (i32.const 293490) "a") (data (i32.const 293493) "a") (data (i32.const 293496) "a") (data (i32.const 293499) "a") (data (i32.const 293502) "a") (data (i32.const 293505) "a") (data (i32.const 293508) "a") (data (i32.const 293511) "a") (data (i32.const 293514) "a") (data (i32.const 293517) "a") (data (i32.const 293520) "a") (data (i32.const 293523) "a") (data (i32.const 293526) "a") (data (i32.const 293529) "a") (data (i32.const 293532) "a") (data (i32.const 293535) "a") (data (i32.const 293538) "a") (data (i32.const 293541) "a") (data (i32.const 293544) "a") (data (i32.const 293547) "a") (data (i32.const 293550) "a") (data (i32.const 293553) "a") (data (i32.const 293556) "a") (data (i32.const 293559) "a") (data (i32.const 293562) "a") (data (i32.const 293565) "a") (data (i32.const 293568) "a") (data (i32.const 293571) "a") (data (i32.const 293574) "a") (data (i32.const 293577) "a") (data (i32.const 293580) "a") (data (i32.const 293583) "a") (data (i32.const 293586) "a") (data (i32.const 293589) "a") (data (i32.const 293592) "a") (data (i32.const 293595) "a") (data (i32.const 293598) "a") (data (i32.const 293601) "a") (data (i32.const 293604) "a") (data (i32.const 293607) "a") (data (i32.const 293610) "a") (data (i32.const 293613) "a") (data (i32.const 293616) "a") (data (i32.const 293619) "a") (data (i32.const 293622) "a") (data (i32.const 293625) "a") (data (i32.const 293628) "a") (data (i32.const 293631) "a") (data (i32.const 293634) "a") (data (i32.const 293637) "a") (data (i32.const 293640) "a") (data (i32.const 293643) "a") (data (i32.const 293646) "a") (data (i32.const 293649) "a") (data (i32.const 293652) "a") (data (i32.const 293655) "a") (data (i32.const 293658) "a") (data (i32.const 293661) "a") (data (i32.const 293664) "a") (data (i32.const 293667) "a") (data (i32.const 293670) "a") (data (i32.const 293673) "a") (data (i32.const 293676) "a") (data (i32.const 293679) "a") (data (i32.const 293682) "a") (data (i32.const 293685) "a") (data (i32.const 293688) "a") (data (i32.const 293691) "a") (data (i32.const 293694) "a") (data (i32.const 293697) "a") (data (i32.const 293700) "a") (data (i32.const 293703) "a") (data (i32.const 293706) "a") (data (i32.const 293709) "a") (data (i32.const 293712) "a") (data (i32.const 293715) "a") (data (i32.const 293718) "a") (data (i32.const 293721) "a") (data (i32.const 293724) "a") (data (i32.const 293727) "a") (data (i32.const 293730) "a") (data (i32.const 293733) "a") (data (i32.const 293736) "a") (data (i32.const 293739) "a") (data (i32.const 293742) "a") (data (i32.const 293745) "a") (data (i32.const 293748) "a") (data (i32.const 293751) "a") (data (i32.const 293754) "a") (data (i32.const 293757) "a") (data (i32.const 293760) "a") (data (i32.const 293763) "a") (data (i32.const 293766) "a") (data (i32.const 293769) "a") (data (i32.const 293772) "a") (data (i32.const 293775) "a") (data (i32.const 293778) "a") (data (i32.const 293781) "a") (data (i32.const 293784) "a") (data (i32.const 293787) "a") (data (i32.const 293790) "a") (data (i32.const 293793) "a") (data (i32.const 293796) "a") (data (i32.const 293799) "a") (data (i32.const 293802) "a") (data (i32.const 293805) "a") (data (i32.const 293808) "a") (data (i32.const 293811) "a") (data (i32.const 293814) "a") (data (i32.const 293817) "a") (data (i32.const 293820) "a") (data (i32.const 293823) "a") (data (i32.const 293826) "a") (data (i32.const 293829) "a") (data (i32.const 293832) "a") (data (i32.const 293835) "a") (data (i32.const 293838) "a") (data (i32.const 293841) "a") (data (i32.const 293844) "a") (data (i32.const 293847) "a") (data (i32.const 293850) "a") (data (i32.const 293853) "a") (data (i32.const 293856) "a") (data (i32.const 293859) "a") (data (i32.const 293862) "a") (data (i32.const 293865) "a") (data (i32.const 293868) "a") (data (i32.const 293871) "a") (data (i32.const 293874) "a") (data (i32.const 293877) "a") (data (i32.const 293880) "a") (data (i32.const 293883) "a") (data (i32.const 293886) "a") (data (i32.const 293889) "a") (data (i32.const 293892) "a") (data (i32.const 293895) "a") (data (i32.const 293898) "a") (data (i32.const 293901) "a") (data (i32.const 293904) "a") (data (i32.const 293907) "a") (data (i32.const 293910) "a") (data (i32.const 293913) "a") (data (i32.const 293916) "a") (data (i32.const 293919) "a") (data (i32.const 293922) "a") (data (i32.const 293925) "a") (data (i32.const 293928) "a") (data (i32.const 293931) "a") (data (i32.const 293934) "a") (data (i32.const 293937) "a") (data (i32.const 293940) "a") (data (i32.const 293943) "a") (data (i32.const 293946) "a") (data (i32.const 293949) "a") (data (i32.const 293952) "a") (data (i32.const 293955) "a") (data (i32.const 293958) "a") (data (i32.const 293961) "a") (data (i32.const 293964) "a") (data (i32.const 293967) "a") (data (i32.const 293970) "a") (data (i32.const 293973) "a") (data (i32.const 293976) "a") (data (i32.const 293979) "a") (data (i32.const 293982) "a") (data (i32.const 293985) "a") (data (i32.const 293988) "a") (data (i32.const 293991) "a") (data (i32.const 293994) "a") (data (i32.const 293997) "a") (data (i32.const 294000) "a") (data (i32.const 294003) "a") (data (i32.const 294006) "a") (data (i32.const 294009) "a") (data (i32.const 294012) "a") (data (i32.const 294015) "a") (data (i32.const 294018) "a") (data (i32.const 294021) "a") (data (i32.const 294024) "a") (data (i32.const 294027) "a") (data (i32.const 294030) "a") (data (i32.const 294033) "a") (data (i32.const 294036) "a") (data (i32.const 294039) "a") (data (i32.const 294042) "a") (data (i32.const 294045) "a") (data (i32.const 294048) "a") (data (i32.const 294051) "a") (data (i32.const 294054) "a") (data (i32.const 294057) "a") (data (i32.const 294060) "a") (data (i32.const 294063) "a") (data (i32.const 294066) "a") (data (i32.const 294069) "a") (data (i32.const 294072) "a") (data (i32.const 294075) "a") (data (i32.const 294078) "a") (data (i32.const 294081) "a") (data (i32.const 294084) "a") (data (i32.const 294087) "a") (data (i32.const 294090) "a") (data (i32.const 294093) "a") (data (i32.const 294096) "a") (data (i32.const 294099) "a") (data (i32.const 294102) "a") (data (i32.const 294105) "a") (data (i32.const 294108) "a") (data (i32.const 294111) "a") (data (i32.const 294114) "a") (data (i32.const 294117) "a") (data (i32.const 294120) "a") (data (i32.const 294123) "a") (data (i32.const 294126) "a") (data (i32.const 294129) "a") (data (i32.const 294132) "a") (data (i32.const 294135) "a") (data (i32.const 294138) "a") (data (i32.const 294141) "a") (data (i32.const 294144) "a") (data (i32.const 294147) "a") (data (i32.const 294150) "a") (data (i32.const 294153) "a") (data (i32.const 294156) "a") (data (i32.const 294159) "a") (data (i32.const 294162) "a") (data (i32.const 294165) "a") (data (i32.const 294168) "a") (data (i32.const 294171) "a") (data (i32.const 294174) "a") (data (i32.const 294177) "a") (data (i32.const 294180) "a") (data (i32.const 294183) "a") (data (i32.const 294186) "a") (data (i32.const 294189) "a") (data (i32.const 294192) "a") (data (i32.const 294195) "a") (data (i32.const 294198) "a") (data (i32.const 294201) "a") (data (i32.const 294204) "a") (data (i32.const 294207) "a") (data (i32.const 294210) "a") (data (i32.const 294213) "a") (data (i32.const 294216) "a") (data (i32.const 294219) "a") (data (i32.const 294222) "a") (data (i32.const 294225) "a") (data (i32.const 294228) "a") (data (i32.const 294231) "a") (data (i32.const 294234) "a") (data (i32.const 294237) "a") (data (i32.const 294240) "a") (data (i32.const 294243) "a") (data (i32.const 294246) "a") (data (i32.const 294249) "a") (data (i32.const 294252) "a") (data (i32.const 294255) "a") (data (i32.const 294258) "a") (data (i32.const 294261) "a") (data (i32.const 294264) "a") (data (i32.const 294267) "a") (data (i32.const 294270) "a") (data (i32.const 294273) "a") (data (i32.const 294276) "a") (data (i32.const 294279) "a") (data (i32.const 294282) "a") (data (i32.const 294285) "a") (data (i32.const 294288) "a") (data (i32.const 294291) "a") (data (i32.const 294294) "a") (data (i32.const 294297) "a") (data (i32.const 294300) "a") (data (i32.const 294303) "a") (data (i32.const 294306) "a") (data (i32.const 294309) "a") (data (i32.const 294312) "a") (data (i32.const 294315) "a") (data (i32.const 294318) "a") (data (i32.const 294321) "a") (data (i32.const 294324) "a") (data (i32.const 294327) "a") (data (i32.const 294330) "a") (data (i32.const 294333) "a") (data (i32.const 294336) "a") (data (i32.const 294339) "a") (data (i32.const 294342) "a") (data (i32.const 294345) "a") (data (i32.const 294348) "a") (data (i32.const 294351) "a") (data (i32.const 294354) "a") (data (i32.const 294357) "a") (data (i32.const 294360) "a") (data (i32.const 294363) "a") (data (i32.const 294366) "a") (data (i32.const 294369) "a") (data (i32.const 294372) "a") (data (i32.const 294375) "a") (data (i32.const 294378) "a") (data (i32.const 294381) "a") (data (i32.const 294384) "a") (data (i32.const 294387) "a") (data (i32.const 294390) "a") (data (i32.const 294393) "a") (data (i32.const 294396) "a") (data (i32.const 294399) "a") (data (i32.const 294402) "a") (data (i32.const 294405) "a") (data (i32.const 294408) "a") (data (i32.const 294411) "a") (data (i32.const 294414) "a") (data (i32.const 294417) "a") (data (i32.const 294420) "a") (data (i32.const 294423) "a") (data (i32.const 294426) "a") (data (i32.const 294429) "a") (data (i32.const 294432) "a") (data (i32.const 294435) "a") (data (i32.const 294438) "a") (data (i32.const 294441) "a") (data (i32.const 294444) "a") (data (i32.const 294447) "a") (data (i32.const 294450) "a") (data (i32.const 294453) "a") (data (i32.const 294456) "a") (data (i32.const 294459) "a") (data (i32.const 294462) "a") (data (i32.const 294465) "a") (data (i32.const 294468) "a") (data (i32.const 294471) "a") (data (i32.const 294474) "a") (data (i32.const 294477) "a") (data (i32.const 294480) "a") (data (i32.const 294483) "a") (data (i32.const 294486) "a") (data (i32.const 294489) "a") (data (i32.const 294492) "a") (data (i32.const 294495) "a") (data (i32.const 294498) "a") (data (i32.const 294501) "a") (data (i32.const 294504) "a") (data (i32.const 294507) "a") (data (i32.const 294510) "a") (data (i32.const 294513) "a") (data (i32.const 294516) "a") (data (i32.const 294519) "a") (data (i32.const 294522) "a") (data (i32.const 294525) "a") (data (i32.const 294528) "a") (data (i32.const 294531) "a") (data (i32.const 294534) "a") (data (i32.const 294537) "a") (data (i32.const 294540) "a") (data (i32.const 294543) "a") (data (i32.const 294546) "a") (data (i32.const 294549) "a") (data (i32.const 294552) "a") (data (i32.const 294555) "a") (data (i32.const 294558) "a") (data (i32.const 294561) "a") (data (i32.const 294564) "a") (data (i32.const 294567) "a") (data (i32.const 294570) "a") (data (i32.const 294573) "a") (data (i32.const 294576) "a") (data (i32.const 294579) "a") (data (i32.const 294582) "a") (data (i32.const 294585) "a") (data (i32.const 294588) "a") (data (i32.const 294591) "a") (data (i32.const 294594) "a") (data (i32.const 294597) "a") (data (i32.const 294600) "a") (data (i32.const 294603) "a") (data (i32.const 294606) "a") (data (i32.const 294609) "a") (data (i32.const 294612) "a") (data (i32.const 294615) "a") (data (i32.const 294618) "a") (data (i32.const 294621) "a") (data (i32.const 294624) "a") (data (i32.const 294627) "a") (data (i32.const 294630) "a") (data (i32.const 294633) "a") (data (i32.const 294636) "a") (data (i32.const 294639) "a") (data (i32.const 294642) "a") (data (i32.const 294645) "a") (data (i32.const 294648) "a") (data (i32.const 294651) "a") (data (i32.const 294654) "a") (data (i32.const 294657) "a") (data (i32.const 294660) "a") (data (i32.const 294663) "a") (data (i32.const 294666) "a") (data (i32.const 294669) "a") (data (i32.const 294672) "a") (data (i32.const 294675) "a") (data (i32.const 294678) "a") (data (i32.const 294681) "a") (data (i32.const 294684) "a") (data (i32.const 294687) "a") (data (i32.const 294690) "a") (data (i32.const 294693) "a") (data (i32.const 294696) "a") (data (i32.const 294699) "a") (data (i32.const 294702) "a") (data (i32.const 294705) "a") (data (i32.const 294708) "a") (data (i32.const 294711) "a") (data (i32.const 294714) "a") (data (i32.const 294717) "a") (data (i32.const 294720) "a") (data (i32.const 294723) "a") (data (i32.const 294726) "a") (data (i32.const 294729) "a") (data (i32.const 294732) "a") (data (i32.const 294735) "a") (data (i32.const 294738) "a") (data (i32.const 294741) "a") (data (i32.const 294744) "a") (data (i32.const 294747) "a") (data (i32.const 294750) "a") (data (i32.const 294753) "a") (data (i32.const 294756) "a") (data (i32.const 294759) "a") (data (i32.const 294762) "a") (data (i32.const 294765) "a") (data (i32.const 294768) "a") (data (i32.const 294771) "a") (data (i32.const 294774) "a") (data (i32.const 294777) "a") (data (i32.const 294780) "a") (data (i32.const 294783) "a") (data (i32.const 294786) "a") (data (i32.const 294789) "a") (data (i32.const 294792) "a") (data (i32.const 294795) "a") (data (i32.const 294798) "a") (data (i32.const 294801) "a") (data (i32.const 294804) "a") (data (i32.const 294807) "a") (data (i32.const 294810) "a") (data (i32.const 294813) "a") (data (i32.const 294816) "a") (data (i32.const 294819) "a") (data (i32.const 294822) "a") (data (i32.const 294825) "a") (data (i32.const 294828) "a") (data (i32.const 294831) "a") (data (i32.const 294834) "a") (data (i32.const 294837) "a") (data (i32.const 294840) "a") (data (i32.const 294843) "a") (data (i32.const 294846) "a") (data (i32.const 294849) "a") (data (i32.const 294852) "a") (data (i32.const 294855) "a") (data (i32.const 294858) "a") (data (i32.const 294861) "a") (data (i32.const 294864) "a") (data (i32.const 294867) "a") (data (i32.const 294870) "a") (data (i32.const 294873) "a") (data (i32.const 294876) "a") (data (i32.const 294879) "a") (data (i32.const 294882) "a") (data (i32.const 294885) "a") (data (i32.const 294888) "a") (data (i32.const 294891) "a") (data (i32.const 294894) "a") (data (i32.const 294897) "a") (data (i32.const 294900) "a") (data (i32.const 294903) "a") (data (i32.const 294906) "a") (data (i32.const 294909) "a") (data (i32.const 294912) "a") (data (i32.const 294915) "a") (data (i32.const 294918) "a") (data (i32.const 294921) "a") (data (i32.const 294924) "a") (data (i32.const 294927) "a") (data (i32.const 294930) "a") (data (i32.const 294933) "a") (data (i32.const 294936) "a") (data (i32.const 294939) "a") (data (i32.const 294942) "a") (data (i32.const 294945) "a") (data (i32.const 294948) "a") (data (i32.const 294951) "a") (data (i32.const 294954) "a") (data (i32.const 294957) "a") (data (i32.const 294960) "a") (data (i32.const 294963) "a") (data (i32.const 294966) "a") (data (i32.const 294969) "a") (data (i32.const 294972) "a") (data (i32.const 294975) "a") (data (i32.const 294978) "a") (data (i32.const 294981) "a") (data (i32.const 294984) "a") (data (i32.const 294987) "a") (data (i32.const 294990) "a") (data (i32.const 294993) "a") (data (i32.const 294996) "a") (data (i32.const 294999) "a") (data (i32.const 295002) "a") (data (i32.const 295005) "a") (data (i32.const 295008) "a") (data (i32.const 295011) "a") (data (i32.const 295014) "a") (data (i32.const 295017) "a") (data (i32.const 295020) "a") (data (i32.const 295023) "a") (data (i32.const 295026) "a") (data (i32.const 295029) "a") (data (i32.const 295032) "a") (data (i32.const 295035) "a") (data (i32.const 295038) "a") (data (i32.const 295041) "a") (data (i32.const 295044) "a") (data (i32.const 295047) "a") (data (i32.const 295050) "a") (data (i32.const 295053) "a") (data (i32.const 295056) "a") (data (i32.const 295059) "a") (data (i32.const 295062) "a") (data (i32.const 295065) "a") (data (i32.const 295068) "a") (data (i32.const 295071) "a") (data (i32.const 295074) "a") (data (i32.const 295077) "a") (data (i32.const 295080) "a") (data (i32.const 295083) "a") (data (i32.const 295086) "a") (data (i32.const 295089) "a") (data (i32.const 295092) "a") (data (i32.const 295095) "a") (data (i32.const 295098) "a") (data (i32.const 295101) "a") (data (i32.const 295104) "a") (data (i32.const 295107) "a") (data (i32.const 295110) "a") (data (i32.const 295113) "a") (data (i32.const 295116) "a") (data (i32.const 295119) "a") (data (i32.const 295122) "a") (data (i32.const 295125) "a") (data (i32.const 295128) "a") (data (i32.const 295131) "a") (data (i32.const 295134) "a") (data (i32.const 295137) "a") (data (i32.const 295140) "a") (data (i32.const 295143) "a") (data (i32.const 295146) "a") (data (i32.const 295149) "a") (data (i32.const 295152) "a") (data (i32.const 295155) "a") (data (i32.const 295158) "a") (data (i32.const 295161) "a") (data (i32.const 295164) "a") (data (i32.const 295167) "a") (data (i32.const 295170) "a") (data (i32.const 295173) "a") (data (i32.const 295176) "a") (data (i32.const 295179) "a") (data (i32.const 295182) "a") (data (i32.const 295185) "a") (data (i32.const 295188) "a") (data (i32.const 295191) "a") (data (i32.const 295194) "a") (data (i32.const 295197) "a") (data (i32.const 295200) "a") (data (i32.const 295203) "a") (data (i32.const 295206) "a") (data (i32.const 295209) "a") (data (i32.const 295212) "a") (data (i32.const 295215) "a") (data (i32.const 295218) "a") (data (i32.const 295221) "a") (data (i32.const 295224) "a") (data (i32.const 295227) "a") (data (i32.const 295230) "a") (data (i32.const 295233) "a") (data (i32.const 295236) "a") (data (i32.const 295239) "a") (data (i32.const 295242) "a") (data (i32.const 295245) "a") (data (i32.const 295248) "a") (data (i32.const 295251) "a") (data (i32.const 295254) "a") (data (i32.const 295257) "a") (data (i32.const 295260) "a") (data (i32.const 295263) "a") (data (i32.const 295266) "a") (data (i32.const 295269) "a") (data (i32.const 295272) "a") (data (i32.const 295275) "a") (data (i32.const 295278) "a") (data (i32.const 295281) "a") (data (i32.const 295284) "a") (data (i32.const 295287) "a") (data (i32.const 295290) "a") (data (i32.const 295293) "a") (data (i32.const 295296) "a") (data (i32.const 295299) "a") (data (i32.const 295302) "a") (data (i32.const 295305) "a") (data (i32.const 295308) "a") (data (i32.const 295311) "a") (data (i32.const 295314) "a") (data (i32.const 295317) "a") (data (i32.const 295320) "a") (data (i32.const 295323) "a") (data (i32.const 295326) "a") (data (i32.const 295329) "a") (data (i32.const 295332) "a") (data (i32.const 295335) "a") (data (i32.const 295338) "a") (data (i32.const 295341) "a") (data (i32.const 295344) "a") (data (i32.const 295347) "a") (data (i32.const 295350) "a") (data (i32.const 295353) "a") (data (i32.const 295356) "a") (data (i32.const 295359) "a") (data (i32.const 295362) "a") (data (i32.const 295365) "a") (data (i32.const 295368) "a") (data (i32.const 295371) "a") (data (i32.const 295374) "a") (data (i32.const 295377) "a") (data (i32.const 295380) "a") (data (i32.const 295383) "a") (data (i32.const 295386) "a") (data (i32.const 295389) "a") (data (i32.const 295392) "a") (data (i32.const 295395) "a") (data (i32.const 295398) "a") (data (i32.const 295401) "a") (data (i32.const 295404) "a") (data (i32.const 295407) "a") (data (i32.const 295410) "a") (data (i32.const 295413) "a") (data (i32.const 295416) "a") (data (i32.const 295419) "a") (data (i32.const 295422) "a") (data (i32.const 295425) "a") (data (i32.const 295428) "a") (data (i32.const 295431) "a") (data (i32.const 295434) "a") (data (i32.const 295437) "a") (data (i32.const 295440) "a") (data (i32.const 295443) "a") (data (i32.const 295446) "a") (data (i32.const 295449) "a") (data (i32.const 295452) "a") (data (i32.const 295455) "a") (data (i32.const 295458) "a") (data (i32.const 295461) "a") (data (i32.const 295464) "a") (data (i32.const 295467) "a") (data (i32.const 295470) "a") (data (i32.const 295473) "a") (data (i32.const 295476) "a") (data (i32.const 295479) "a") (data (i32.const 295482) "a") (data (i32.const 295485) "a") (data (i32.const 295488) "a") (data (i32.const 295491) "a") (data (i32.const 295494) "a") (data (i32.const 295497) "a") (data (i32.const 295500) "a") (data (i32.const 295503) "a") (data (i32.const 295506) "a") (data (i32.const 295509) "a") (data (i32.const 295512) "a") (data (i32.const 295515) "a") (data (i32.const 295518) "a") (data (i32.const 295521) "a") (data (i32.const 295524) "a") (data (i32.const 295527) "a") (data (i32.const 295530) "a") (data (i32.const 295533) "a") (data (i32.const 295536) "a") (data (i32.const 295539) "a") (data (i32.const 295542) "a") (data (i32.const 295545) "a") (data (i32.const 295548) "a") (data (i32.const 295551) "a") (data (i32.const 295554) "a") (data (i32.const 295557) "a") (data (i32.const 295560) "a") (data (i32.const 295563) "a") (data (i32.const 295566) "a") (data (i32.const 295569) "a") (data (i32.const 295572) "a") (data (i32.const 295575) "a") (data (i32.const 295578) "a") (data (i32.const 295581) "a") (data (i32.const 295584) "a") (data (i32.const 295587) "a") (data (i32.const 295590) "a") (data (i32.const 295593) "a") (data (i32.const 295596) "a") (data (i32.const 295599) "a") (data (i32.const 295602) "a") (data (i32.const 295605) "a") (data (i32.const 295608) "a") (data (i32.const 295611) "a") (data (i32.const 295614) "a") (data (i32.const 295617) "a") (data (i32.const 295620) "a") (data (i32.const 295623) "a") (data (i32.const 295626) "a") (data (i32.const 295629) "a") (data (i32.const 295632) "a") (data (i32.const 295635) "a") (data (i32.const 295638) "a") (data (i32.const 295641) "a") (data (i32.const 295644) "a") (data (i32.const 295647) "a") (data (i32.const 295650) "a") (data (i32.const 295653) "a") (data (i32.const 295656) "a") (data (i32.const 295659) "a") (data (i32.const 295662) "a") (data (i32.const 295665) "a") (data (i32.const 295668) "a") (data (i32.const 295671) "a") (data (i32.const 295674) "a") (data (i32.const 295677) "a") (data (i32.const 295680) "a") (data (i32.const 295683) "a") (data (i32.const 295686) "a") (data (i32.const 295689) "a") (data (i32.const 295692) "a") (data (i32.const 295695) "a") (data (i32.const 295698) "a") (data (i32.const 295701) "a") (data (i32.const 295704) "a") (data (i32.const 295707) "a") (data (i32.const 295710) "a") (data (i32.const 295713) "a") (data (i32.const 295716) "a") (data (i32.const 295719) "a") (data (i32.const 295722) "a") (data (i32.const 295725) "a") (data (i32.const 295728) "a") (data (i32.const 295731) "a") (data (i32.const 295734) "a") (data (i32.const 295737) "a") (data (i32.const 295740) "a") (data (i32.const 295743) "a") (data (i32.const 295746) "a") (data (i32.const 295749) "a") (data (i32.const 295752) "a") (data (i32.const 295755) "a") (data (i32.const 295758) "a") (data (i32.const 295761) "a") (data (i32.const 295764) "a") (data (i32.const 295767) "a") (data (i32.const 295770) "a") (data (i32.const 295773) "a") (data (i32.const 295776) "a") (data (i32.const 295779) "a") (data (i32.const 295782) "a") (data (i32.const 295785) "a") (data (i32.const 295788) "a") (data (i32.const 295791) "a") (data (i32.const 295794) "a") (data (i32.const 295797) "a") (data (i32.const 295800) "a") (data (i32.const 295803) "a") (data (i32.const 295806) "a") (data (i32.const 295809) "a") (data (i32.const 295812) "a") (data (i32.const 295815) "a") (data (i32.const 295818) "a") (data (i32.const 295821) "a") (data (i32.const 295824) "a") (data (i32.const 295827) "a") (data (i32.const 295830) "a") (data (i32.const 295833) "a") (data (i32.const 295836) "a") (data (i32.const 295839) "a") (data (i32.const 295842) "a") (data (i32.const 295845) "a") (data (i32.const 295848) "a") (data (i32.const 295851) "a") (data (i32.const 295854) "a") (data (i32.const 295857) "a") (data (i32.const 295860) "a") (data (i32.const 295863) "a") (data (i32.const 295866) "a") (data (i32.const 295869) "a") (data (i32.const 295872) "a") (data (i32.const 295875) "a") (data (i32.const 295878) "a") (data (i32.const 295881) "a") (data (i32.const 295884) "a") (data (i32.const 295887) "a") (data (i32.const 295890) "a") (data (i32.const 295893) "a") (data (i32.const 295896) "a") (data (i32.const 295899) "a") (data (i32.const 295902) "a") (data (i32.const 295905) "a") (data (i32.const 295908) "a") (data (i32.const 295911) "a") (data (i32.const 295914) "a") (data (i32.const 295917) "a") (data (i32.const 295920) "a") (data (i32.const 295923) "a") (data (i32.const 295926) "a") (data (i32.const 295929) "a") (data (i32.const 295932) "a") (data (i32.const 295935) "a") (data (i32.const 295938) "a") (data (i32.const 295941) "a") (data (i32.const 295944) "a") (data (i32.const 295947) "a") (data (i32.const 295950) "a") (data (i32.const 295953) "a") (data (i32.const 295956) "a") (data (i32.const 295959) "a") (data (i32.const 295962) "a") (data (i32.const 295965) "a") (data (i32.const 295968) "a") (data (i32.const 295971) "a") (data (i32.const 295974) "a") (data (i32.const 295977) "a") (data (i32.const 295980) "a") (data (i32.const 295983) "a") (data (i32.const 295986) "a") (data (i32.const 295989) "a") (data (i32.const 295992) "a") (data (i32.const 295995) "a") (data (i32.const 295998) "a") (data (i32.const 296001) "a") (data (i32.const 296004) "a") (data (i32.const 296007) "a") (data (i32.const 296010) "a") (data (i32.const 296013) "a") (data (i32.const 296016) "a") (data (i32.const 296019) "a") (data (i32.const 296022) "a") (data (i32.const 296025) "a") (data (i32.const 296028) "a") (data (i32.const 296031) "a") (data (i32.const 296034) "a") (data (i32.const 296037) "a") (data (i32.const 296040) "a") (data (i32.const 296043) "a") (data (i32.const 296046) "a") (data (i32.const 296049) "a") (data (i32.const 296052) "a") (data (i32.const 296055) "a") (data (i32.const 296058) "a") (data (i32.const 296061) "a") (data (i32.const 296064) "a") (data (i32.const 296067) "a") (data (i32.const 296070) "a") (data (i32.const 296073) "a") (data (i32.const 296076) "a") (data (i32.const 296079) "a") (data (i32.const 296082) "a") (data (i32.const 296085) "a") (data (i32.const 296088) "a") (data (i32.const 296091) "a") (data (i32.const 296094) "a") (data (i32.const 296097) "a") (data (i32.const 296100) "a") (data (i32.const 296103) "a") (data (i32.const 296106) "a") (data (i32.const 296109) "a") (data (i32.const 296112) "a") (data (i32.const 296115) "a") (data (i32.const 296118) "a") (data (i32.const 296121) "a") (data (i32.const 296124) "a") (data (i32.const 296127) "a") (data (i32.const 296130) "a") (data (i32.const 296133) "a") (data (i32.const 296136) "a") (data (i32.const 296139) "a") (data (i32.const 296142) "a") (data (i32.const 296145) "a") (data (i32.const 296148) "a") (data (i32.const 296151) "a") (data (i32.const 296154) "a") (data (i32.const 296157) "a") (data (i32.const 296160) "a") (data (i32.const 296163) "a") (data (i32.const 296166) "a") (data (i32.const 296169) "a") (data (i32.const 296172) "a") (data (i32.const 296175) "a") (data (i32.const 296178) "a") (data (i32.const 296181) "a") (data (i32.const 296184) "a") (data (i32.const 296187) "a") (data (i32.const 296190) "a") (data (i32.const 296193) "a") (data (i32.const 296196) "a") (data (i32.const 296199) "a") (data (i32.const 296202) "a") (data (i32.const 296205) "a") (data (i32.const 296208) "a") (data (i32.const 296211) "a") (data (i32.const 296214) "a") (data (i32.const 296217) "a") (data (i32.const 296220) "a") (data (i32.const 296223) "a") (data (i32.const 296226) "a") (data (i32.const 296229) "a") (data (i32.const 296232) "a") (data (i32.const 296235) "a") (data (i32.const 296238) "a") (data (i32.const 296241) "a") (data (i32.const 296244) "a") (data (i32.const 296247) "a") (data (i32.const 296250) "a") (data (i32.const 296253) "a") (data (i32.const 296256) "a") (data (i32.const 296259) "a") (data (i32.const 296262) "a") (data (i32.const 296265) "a") (data (i32.const 296268) "a") (data (i32.const 296271) "a") (data (i32.const 296274) "a") (data (i32.const 296277) "a") (data (i32.const 296280) "a") (data (i32.const 296283) "a") (data (i32.const 296286) "a") (data (i32.const 296289) "a") (data (i32.const 296292) "a") (data (i32.const 296295) "a") (data (i32.const 296298) "a") (data (i32.const 296301) "a") (data (i32.const 296304) "a") (data (i32.const 296307) "a") (data (i32.const 296310) "a") (data (i32.const 296313) "a") (data (i32.const 296316) "a") (data (i32.const 296319) "a") (data (i32.const 296322) "a") (data (i32.const 296325) "a") (data (i32.const 296328) "a") (data (i32.const 296331) "a") (data (i32.const 296334) "a") (data (i32.const 296337) "a") (data (i32.const 296340) "a") (data (i32.const 296343) "a") (data (i32.const 296346) "a") (data (i32.const 296349) "a") (data (i32.const 296352) "a") (data (i32.const 296355) "a") (data (i32.const 296358) "a") (data (i32.const 296361) "a") (data (i32.const 296364) "a") (data (i32.const 296367) "a") (data (i32.const 296370) "a") (data (i32.const 296373) "a") (data (i32.const 296376) "a") (data (i32.const 296379) "a") (data (i32.const 296382) "a") (data (i32.const 296385) "a") (data (i32.const 296388) "a") (data (i32.const 296391) "a") (data (i32.const 296394) "a") (data (i32.const 296397) "a") (data (i32.const 296400) "a") (data (i32.const 296403) "a") (data (i32.const 296406) "a") (data (i32.const 296409) "a") (data (i32.const 296412) "a") (data (i32.const 296415) "a") (data (i32.const 296418) "a") (data (i32.const 296421) "a") (data (i32.const 296424) "a") (data (i32.const 296427) "a") (data (i32.const 296430) "a") (data (i32.const 296433) "a") (data (i32.const 296436) "a") (data (i32.const 296439) "a") (data (i32.const 296442) "a") (data (i32.const 296445) "a") (data (i32.const 296448) "a") (data (i32.const 296451) "a") (data (i32.const 296454) "a") (data (i32.const 296457) "a") (data (i32.const 296460) "a") (data (i32.const 296463) "a") (data (i32.const 296466) "a") (data (i32.const 296469) "a") (data (i32.const 296472) "a") (data (i32.const 296475) "a") (data (i32.const 296478) "a") (data (i32.const 296481) "a") (data (i32.const 296484) "a") (data (i32.const 296487) "a") (data (i32.const 296490) "a") (data (i32.const 296493) "a") (data (i32.const 296496) "a") (data (i32.const 296499) "a") (data (i32.const 296502) "a") (data (i32.const 296505) "a") (data (i32.const 296508) "a") (data (i32.const 296511) "a") (data (i32.const 296514) "a") (data (i32.const 296517) "a") (data (i32.const 296520) "a") (data (i32.const 296523) "a") (data (i32.const 296526) "a") (data (i32.const 296529) "a") (data (i32.const 296532) "a") (data (i32.const 296535) "a") (data (i32.const 296538) "a") (data (i32.const 296541) "a") (data (i32.const 296544) "a") (data (i32.const 296547) "a") (data (i32.const 296550) "a") (data (i32.const 296553) "a") (data (i32.const 296556) "a") (data (i32.const 296559) "a") (data (i32.const 296562) "a") (data (i32.const 296565) "a") (data (i32.const 296568) "a") (data (i32.const 296571) "a") (data (i32.const 296574) "a") (data (i32.const 296577) "a") (data (i32.const 296580) "a") (data (i32.const 296583) "a") (data (i32.const 296586) "a") (data (i32.const 296589) "a") (data (i32.const 296592) "a") (data (i32.const 296595) "a") (data (i32.const 296598) "a") (data (i32.const 296601) "a") (data (i32.const 296604) "a") (data (i32.const 296607) "a") (data (i32.const 296610) "a") (data (i32.const 296613) "a") (data (i32.const 296616) "a") (data (i32.const 296619) "a") (data (i32.const 296622) "a") (data (i32.const 296625) "a") (data (i32.const 296628) "a") (data (i32.const 296631) "a") (data (i32.const 296634) "a") (data (i32.const 296637) "a") (data (i32.const 296640) "a") (data (i32.const 296643) "a") (data (i32.const 296646) "a") (data (i32.const 296649) "a") (data (i32.const 296652) "a") (data (i32.const 296655) "a") (data (i32.const 296658) "a") (data (i32.const 296661) "a") (data (i32.const 296664) "a") (data (i32.const 296667) "a") (data (i32.const 296670) "a") (data (i32.const 296673) "a") (data (i32.const 296676) "a") (data (i32.const 296679) "a") (data (i32.const 296682) "a") (data (i32.const 296685) "a") (data (i32.const 296688) "a") (data (i32.const 296691) "a") (data (i32.const 296694) "a") (data (i32.const 296697) "a") (data (i32.const 296700) "a") (data (i32.const 296703) "a") (data (i32.const 296706) "a") (data (i32.const 296709) "a") (data (i32.const 296712) "a") (data (i32.const 296715) "a") (data (i32.const 296718) "a") (data (i32.const 296721) "a") (data (i32.const 296724) "a") (data (i32.const 296727) "a") (data (i32.const 296730) "a") (data (i32.const 296733) "a") (data (i32.const 296736) "a") (data (i32.const 296739) "a") (data (i32.const 296742) "a") (data (i32.const 296745) "a") (data (i32.const 296748) "a") (data (i32.const 296751) "a") (data (i32.const 296754) "a") (data (i32.const 296757) "a") (data (i32.const 296760) "a") (data (i32.const 296763) "a") (data (i32.const 296766) "a") (data (i32.const 296769) "a") (data (i32.const 296772) "a") (data (i32.const 296775) "a") (data (i32.const 296778) "a") (data (i32.const 296781) "a") (data (i32.const 296784) "a") (data (i32.const 296787) "a") (data (i32.const 296790) "a") (data (i32.const 296793) "a") (data (i32.const 296796) "a") (data (i32.const 296799) "a") (data (i32.const 296802) "a") (data (i32.const 296805) "a") (data (i32.const 296808) "a") (data (i32.const 296811) "a") (data (i32.const 296814) "a") (data (i32.const 296817) "a") (data (i32.const 296820) "a") (data (i32.const 296823) "a") (data (i32.const 296826) "a") (data (i32.const 296829) "a") (data (i32.const 296832) "a") (data (i32.const 296835) "a") (data (i32.const 296838) "a") (data (i32.const 296841) "a") (data (i32.const 296844) "a") (data (i32.const 296847) "a") (data (i32.const 296850) "a") (data (i32.const 296853) "a") (data (i32.const 296856) "a") (data (i32.const 296859) "a") (data (i32.const 296862) "a") (data (i32.const 296865) "a") (data (i32.const 296868) "a") (data (i32.const 296871) "a") (data (i32.const 296874) "a") (data (i32.const 296877) "a") (data (i32.const 296880) "a") (data (i32.const 296883) "a") (data (i32.const 296886) "a") (data (i32.const 296889) "a") (data (i32.const 296892) "a") (data (i32.const 296895) "a") (data (i32.const 296898) "a") (data (i32.const 296901) "a") (data (i32.const 296904) "a") (data (i32.const 296907) "a") (data (i32.const 296910) "a") (data (i32.const 296913) "a") (data (i32.const 296916) "a") (data (i32.const 296919) "a") (data (i32.const 296922) "a") (data (i32.const 296925) "a") (data (i32.const 296928) "a") (data (i32.const 296931) "a") (data (i32.const 296934) "a") (data (i32.const 296937) "a") (data (i32.const 296940) "a") (data (i32.const 296943) "a") (data (i32.const 296946) "a") (data (i32.const 296949) "a") (data (i32.const 296952) "a") (data (i32.const 296955) "a") (data (i32.const 296958) "a") (data (i32.const 296961) "a") (data (i32.const 296964) "a") (data (i32.const 296967) "a") (data (i32.const 296970) "a") (data (i32.const 296973) "a") (data (i32.const 296976) "a") (data (i32.const 296979) "a") (data (i32.const 296982) "a") (data (i32.const 296985) "a") (data (i32.const 296988) "a") (data (i32.const 296991) "a") (data (i32.const 296994) "a") (data (i32.const 296997) "a") (data (i32.const 297000) "a") (data (i32.const 297003) "a") (data (i32.const 297006) "a") (data (i32.const 297009) "a") (data (i32.const 297012) "a") (data (i32.const 297015) "a") (data (i32.const 297018) "a") (data (i32.const 297021) "a") (data (i32.const 297024) "a") (data (i32.const 297027) "a") (data (i32.const 297030) "a") (data (i32.const 297033) "a") (data (i32.const 297036) "a") (data (i32.const 297039) "a") (data (i32.const 297042) "a") (data (i32.const 297045) "a") (data (i32.const 297048) "a") (data (i32.const 297051) "a") (data (i32.const 297054) "a") (data (i32.const 297057) "a") (data (i32.const 297060) "a") (data (i32.const 297063) "a") (data (i32.const 297066) "a") (data (i32.const 297069) "a") (data (i32.const 297072) "a") (data (i32.const 297075) "a") (data (i32.const 297078) "a") (data (i32.const 297081) "a") (data (i32.const 297084) "a") (data (i32.const 297087) "a") (data (i32.const 297090) "a") (data (i32.const 297093) "a") (data (i32.const 297096) "a") (data (i32.const 297099) "a") (data (i32.const 297102) "a") (data (i32.const 297105) "a") (data (i32.const 297108) "a") (data (i32.const 297111) "a") (data (i32.const 297114) "a") (data (i32.const 297117) "a") (data (i32.const 297120) "a") (data (i32.const 297123) "a") (data (i32.const 297126) "a") (data (i32.const 297129) "a") (data (i32.const 297132) "a") (data (i32.const 297135) "a") (data (i32.const 297138) "a") (data (i32.const 297141) "a") (data (i32.const 297144) "a") (data (i32.const 297147) "a") (data (i32.const 297150) "a") (data (i32.const 297153) "a") (data (i32.const 297156) "a") (data (i32.const 297159) "a") (data (i32.const 297162) "a") (data (i32.const 297165) "a") (data (i32.const 297168) "a") (data (i32.const 297171) "a") (data (i32.const 297174) "a") (data (i32.const 297177) "a") (data (i32.const 297180) "a") (data (i32.const 297183) "a") (data (i32.const 297186) "a") (data (i32.const 297189) "a") (data (i32.const 297192) "a") (data (i32.const 297195) "a") (data (i32.const 297198) "a") (data (i32.const 297201) "a") (data (i32.const 297204) "a") (data (i32.const 297207) "a") (data (i32.const 297210) "a") (data (i32.const 297213) "a") (data (i32.const 297216) "a") (data (i32.const 297219) "a") (data (i32.const 297222) "a") (data (i32.const 297225) "a") (data (i32.const 297228) "a") (data (i32.const 297231) "a") (data (i32.const 297234) "a") (data (i32.const 297237) "a") (data (i32.const 297240) "a") (data (i32.const 297243) "a") (data (i32.const 297246) "a") (data (i32.const 297249) "a") (data (i32.const 297252) "a") (data (i32.const 297255) "a") (data (i32.const 297258) "a") (data (i32.const 297261) "a") (data (i32.const 297264) "a") (data (i32.const 297267) "a") (data (i32.const 297270) "a") (data (i32.const 297273) "a") (data (i32.const 297276) "a") (data (i32.const 297279) "a") (data (i32.const 297282) "a") (data (i32.const 297285) "a") (data (i32.const 297288) "a") (data (i32.const 297291) "a") (data (i32.const 297294) "a") (data (i32.const 297297) "a") (data (i32.const 297300) "a") (data (i32.const 297303) "a") (data (i32.const 297306) "a") (data (i32.const 297309) "a") (data (i32.const 297312) "a") (data (i32.const 297315) "a") (data (i32.const 297318) "a") (data (i32.const 297321) "a") (data (i32.const 297324) "a") (data (i32.const 297327) "a") (data (i32.const 297330) "a") (data (i32.const 297333) "a") (data (i32.const 297336) "a") (data (i32.const 297339) "a") (data (i32.const 297342) "a") (data (i32.const 297345) "a") (data (i32.const 297348) "a") (data (i32.const 297351) "a") (data (i32.const 297354) "a") (data (i32.const 297357) "a") (data (i32.const 297360) "a") (data (i32.const 297363) "a") (data (i32.const 297366) "a") (data (i32.const 297369) "a") (data (i32.const 297372) "a") (data (i32.const 297375) "a") (data (i32.const 297378) "a") (data (i32.const 297381) "a") (data (i32.const 297384) "a") (data (i32.const 297387) "a") (data (i32.const 297390) "a") (data (i32.const 297393) "a") (data (i32.const 297396) "a") (data (i32.const 297399) "a") (data (i32.const 297402) "a") (data (i32.const 297405) "a") (data (i32.const 297408) "a") (data (i32.const 297411) "a") (data (i32.const 297414) "a") (data (i32.const 297417) "a") (data (i32.const 297420) "a") (data (i32.const 297423) "a") (data (i32.const 297426) "a") (data (i32.const 297429) "a") (data (i32.const 297432) "a") (data (i32.const 297435) "a") (data (i32.const 297438) "a") (data (i32.const 297441) "a") (data (i32.const 297444) "a") (data (i32.const 297447) "a") (data (i32.const 297450) "a") (data (i32.const 297453) "a") (data (i32.const 297456) "a") (data (i32.const 297459) "a") (data (i32.const 297462) "a") (data (i32.const 297465) "a") (data (i32.const 297468) "a") (data (i32.const 297471) "a") (data (i32.const 297474) "a") (data (i32.const 297477) "a") (data (i32.const 297480) "a") (data (i32.const 297483) "a") (data (i32.const 297486) "a") (data (i32.const 297489) "a") (data (i32.const 297492) "a") (data (i32.const 297495) "a") (data (i32.const 297498) "a") (data (i32.const 297501) "a") (data (i32.const 297504) "a") (data (i32.const 297507) "a") (data (i32.const 297510) "a") (data (i32.const 297513) "a") (data (i32.const 297516) "a") (data (i32.const 297519) "a") (data (i32.const 297522) "a") (data (i32.const 297525) "a") (data (i32.const 297528) "a") (data (i32.const 297531) "a") (data (i32.const 297534) "a") (data (i32.const 297537) "a") (data (i32.const 297540) "a") (data (i32.const 297543) "a") (data (i32.const 297546) "a") (data (i32.const 297549) "a") (data (i32.const 297552) "a") (data (i32.const 297555) "a") (data (i32.const 297558) "a") (data (i32.const 297561) "a") (data (i32.const 297564) "a") (data (i32.const 297567) "a") (data (i32.const 297570) "a") (data (i32.const 297573) "a") (data (i32.const 297576) "a") (data (i32.const 297579) "a") (data (i32.const 297582) "a") (data (i32.const 297585) "a") (data (i32.const 297588) "a") (data (i32.const 297591) "a") (data (i32.const 297594) "a") (data (i32.const 297597) "a") (data (i32.const 297600) "a") (data (i32.const 297603) "a") (data (i32.const 297606) "a") (data (i32.const 297609) "a") (data (i32.const 297612) "a") (data (i32.const 297615) "a") (data (i32.const 297618) "a") (data (i32.const 297621) "a") (data (i32.const 297624) "a") (data (i32.const 297627) "a") (data (i32.const 297630) "a") (data (i32.const 297633) "a") (data (i32.const 297636) "a") (data (i32.const 297639) "a") (data (i32.const 297642) "a") (data (i32.const 297645) "a") (data (i32.const 297648) "a") (data (i32.const 297651) "a") (data (i32.const 297654) "a") (data (i32.const 297657) "a") (data (i32.const 297660) "a") (data (i32.const 297663) "a") (data (i32.const 297666) "a") (data (i32.const 297669) "a") (data (i32.const 297672) "a") (data (i32.const 297675) "a") (data (i32.const 297678) "a") (data (i32.const 297681) "a") (data (i32.const 297684) "a") (data (i32.const 297687) "a") (data (i32.const 297690) "a") (data (i32.const 297693) "a") (data (i32.const 297696) "a") (data (i32.const 297699) "a") (data (i32.const 297702) "a") (data (i32.const 297705) "a") (data (i32.const 297708) "a") (data (i32.const 297711) "a") (data (i32.const 297714) "a") (data (i32.const 297717) "a") (data (i32.const 297720) "a") (data (i32.const 297723) "a") (data (i32.const 297726) "a") (data (i32.const 297729) "a") (data (i32.const 297732) "a") (data (i32.const 297735) "a") (data (i32.const 297738) "a") (data (i32.const 297741) "a") (data (i32.const 297744) "a") (data (i32.const 297747) "a") (data (i32.const 297750) "a") (data (i32.const 297753) "a") (data (i32.const 297756) "a") (data (i32.const 297759) "a") (data (i32.const 297762) "a") (data (i32.const 297765) "a") (data (i32.const 297768) "a") (data (i32.const 297771) "a") (data (i32.const 297774) "a") (data (i32.const 297777) "a") (data (i32.const 297780) "a") (data (i32.const 297783) "a") (data (i32.const 297786) "a") (data (i32.const 297789) "a") (data (i32.const 297792) "a") (data (i32.const 297795) "a") (data (i32.const 297798) "a") (data (i32.const 297801) "a") (data (i32.const 297804) "a") (data (i32.const 297807) "a") (data (i32.const 297810) "a") (data (i32.const 297813) "a") (data (i32.const 297816) "a") (data (i32.const 297819) "a") (data (i32.const 297822) "a") (data (i32.const 297825) "a") (data (i32.const 297828) "a") (data (i32.const 297831) "a") (data (i32.const 297834) "a") (data (i32.const 297837) "a") (data (i32.const 297840) "a") (data (i32.const 297843) "a") (data (i32.const 297846) "a") (data (i32.const 297849) "a") (data (i32.const 297852) "a") (data (i32.const 297855) "a") (data (i32.const 297858) "a") (data (i32.const 297861) "a") (data (i32.const 297864) "a") (data (i32.const 297867) "a") (data (i32.const 297870) "a") (data (i32.const 297873) "a") (data (i32.const 297876) "a") (data (i32.const 297879) "a") (data (i32.const 297882) "a") (data (i32.const 297885) "a") (data (i32.const 297888) "a") (data (i32.const 297891) "a") (data (i32.const 297894) "a") (data (i32.const 297897) "a") (data (i32.const 297900) "a") (data (i32.const 297903) "a") (data (i32.const 297906) "a") (data (i32.const 297909) "a") (data (i32.const 297912) "a") (data (i32.const 297915) "a") (data (i32.const 297918) "a") (data (i32.const 297921) "a") (data (i32.const 297924) "a") (data (i32.const 297927) "a") (data (i32.const 297930) "a") (data (i32.const 297933) "a") (data (i32.const 297936) "a") (data (i32.const 297939) "a") (data (i32.const 297942) "a") (data (i32.const 297945) "a") (data (i32.const 297948) "a") (data (i32.const 297951) "a") (data (i32.const 297954) "a") (data (i32.const 297957) "a") (data (i32.const 297960) "a") (data (i32.const 297963) "a") (data (i32.const 297966) "a") (data (i32.const 297969) "a") (data (i32.const 297972) "a") (data (i32.const 297975) "a") (data (i32.const 297978) "a") (data (i32.const 297981) "a") (data (i32.const 297984) "a") (data (i32.const 297987) "a") (data (i32.const 297990) "a") (data (i32.const 297993) "a") (data (i32.const 297996) "a") (data (i32.const 297999) "a") (data (i32.const 298002) "a") (data (i32.const 298005) "a") (data (i32.const 298008) "a") (data (i32.const 298011) "a") (data (i32.const 298014) "a") (data (i32.const 298017) "a") (data (i32.const 298020) "a") (data (i32.const 298023) "a") (data (i32.const 298026) "a") (data (i32.const 298029) "a") (data (i32.const 298032) "a") (data (i32.const 298035) "a") (data (i32.const 298038) "a") (data (i32.const 298041) "a") (data (i32.const 298044) "a") (data (i32.const 298047) "a") (data (i32.const 298050) "a") (data (i32.const 298053) "a") (data (i32.const 298056) "a") (data (i32.const 298059) "a") (data (i32.const 298062) "a") (data (i32.const 298065) "a") (data (i32.const 298068) "a") (data (i32.const 298071) "a") (data (i32.const 298074) "a") (data (i32.const 298077) "a") (data (i32.const 298080) "a") (data (i32.const 298083) "a") (data (i32.const 298086) "a") (data (i32.const 298089) "a") (data (i32.const 298092) "a") (data (i32.const 298095) "a") (data (i32.const 298098) "a") (data (i32.const 298101) "a") (data (i32.const 298104) "a") (data (i32.const 298107) "a") (data (i32.const 298110) "a") (data (i32.const 298113) "a") (data (i32.const 298116) "a") (data (i32.const 298119) "a") (data (i32.const 298122) "a") (data (i32.const 298125) "a") (data (i32.const 298128) "a") (data (i32.const 298131) "a") (data (i32.const 298134) "a") (data (i32.const 298137) "a") (data (i32.const 298140) "a") (data (i32.const 298143) "a") (data (i32.const 298146) "a") (data (i32.const 298149) "a") (data (i32.const 298152) "a") (data (i32.const 298155) "a") (data (i32.const 298158) "a") (data (i32.const 298161) "a") (data (i32.const 298164) "a") (data (i32.const 298167) "a") (data (i32.const 298170) "a") (data (i32.const 298173) "a") (data (i32.const 298176) "a") (data (i32.const 298179) "a") (data (i32.const 298182) "a") (data (i32.const 298185) "a") (data (i32.const 298188) "a") (data (i32.const 298191) "a") (data (i32.const 298194) "a") (data (i32.const 298197) "a") (data (i32.const 298200) "a") (data (i32.const 298203) "a") (data (i32.const 298206) "a") (data (i32.const 298209) "a") (data (i32.const 298212) "a") (data (i32.const 298215) "a") (data (i32.const 298218) "a") (data (i32.const 298221) "a") (data (i32.const 298224) "a") (data (i32.const 298227) "a") (data (i32.const 298230) "a") (data (i32.const 298233) "a") (data (i32.const 298236) "a") (data (i32.const 298239) "a") (data (i32.const 298242) "a") (data (i32.const 298245) "a") (data (i32.const 298248) "a") (data (i32.const 298251) "a") (data (i32.const 298254) "a") (data (i32.const 298257) "a") (data (i32.const 298260) "a") (data (i32.const 298263) "a") (data (i32.const 298266) "a") (data (i32.const 298269) "a") (data (i32.const 298272) "a") (data (i32.const 298275) "a") (data (i32.const 298278) "a") (data (i32.const 298281) "a") (data (i32.const 298284) "a") (data (i32.const 298287) "a") (data (i32.const 298290) "a") (data (i32.const 298293) "a") (data (i32.const 298296) "a") (data (i32.const 298299) "a") (data (i32.const 298302) "a") (data (i32.const 298305) "a") (data (i32.const 298308) "a") (data (i32.const 298311) "a") (data (i32.const 298314) "a") (data (i32.const 298317) "a") (data (i32.const 298320) "a") (data (i32.const 298323) "a") (data (i32.const 298326) "a") (data (i32.const 298329) "a") (data (i32.const 298332) "a") (data (i32.const 298335) "a") (data (i32.const 298338) "a") (data (i32.const 298341) "a") (data (i32.const 298344) "a") (data (i32.const 298347) "a") (data (i32.const 298350) "a") (data (i32.const 298353) "a") (data (i32.const 298356) "a") (data (i32.const 298359) "a") (data (i32.const 298362) "a") (data (i32.const 298365) "a") (data (i32.const 298368) "a") (data (i32.const 298371) "a") (data (i32.const 298374) "a") (data (i32.const 298377) "a") (data (i32.const 298380) "a") (data (i32.const 298383) "a") (data (i32.const 298386) "a") (data (i32.const 298389) "a") (data (i32.const 298392) "a") (data (i32.const 298395) "a") (data (i32.const 298398) "a") (data (i32.const 298401) "a") (data (i32.const 298404) "a") (data (i32.const 298407) "a") (data (i32.const 298410) "a") (data (i32.const 298413) "a") (data (i32.const 298416) "a") (data (i32.const 298419) "a") (data (i32.const 298422) "a") (data (i32.const 298425) "a") (data (i32.const 298428) "a") (data (i32.const 298431) "a") (data (i32.const 298434) "a") (data (i32.const 298437) "a") (data (i32.const 298440) "a") (data (i32.const 298443) "a") (data (i32.const 298446) "a") (data (i32.const 298449) "a") (data (i32.const 298452) "a") (data (i32.const 298455) "a") (data (i32.const 298458) "a") (data (i32.const 298461) "a") (data (i32.const 298464) "a") (data (i32.const 298467) "a") (data (i32.const 298470) "a") (data (i32.const 298473) "a") (data (i32.const 298476) "a") (data (i32.const 298479) "a") (data (i32.const 298482) "a") (data (i32.const 298485) "a") (data (i32.const 298488) "a") (data (i32.const 298491) "a") (data (i32.const 298494) "a") (data (i32.const 298497) "a") (data (i32.const 298500) "a") (data (i32.const 298503) "a") (data (i32.const 298506) "a") (data (i32.const 298509) "a") (data (i32.const 298512) "a") (data (i32.const 298515) "a") (data (i32.const 298518) "a") (data (i32.const 298521) "a") (data (i32.const 298524) "a") (data (i32.const 298527) "a") (data (i32.const 298530) "a") (data (i32.const 298533) "a") (data (i32.const 298536) "a") (data (i32.const 298539) "a") (data (i32.const 298542) "a") (data (i32.const 298545) "a") (data (i32.const 298548) "a") (data (i32.const 298551) "a") (data (i32.const 298554) "a") (data (i32.const 298557) "a") (data (i32.const 298560) "a") (data (i32.const 298563) "a") (data (i32.const 298566) "a") (data (i32.const 298569) "a") (data (i32.const 298572) "a") (data (i32.const 298575) "a") (data (i32.const 298578) "a") (data (i32.const 298581) "a") (data (i32.const 298584) "a") (data (i32.const 298587) "a") (data (i32.const 298590) "a") (data (i32.const 298593) "a") (data (i32.const 298596) "a") (data (i32.const 298599) "a") (data (i32.const 298602) "a") (data (i32.const 298605) "a") (data (i32.const 298608) "a") (data (i32.const 298611) "a") (data (i32.const 298614) "a") (data (i32.const 298617) "a") (data (i32.const 298620) "a") (data (i32.const 298623) "a") (data (i32.const 298626) "a") (data (i32.const 298629) "a") (data (i32.const 298632) "a") (data (i32.const 298635) "a") (data (i32.const 298638) "a") (data (i32.const 298641) "a") (data (i32.const 298644) "a") (data (i32.const 298647) "a") (data (i32.const 298650) "a") (data (i32.const 298653) "a") (data (i32.const 298656) "a") (data (i32.const 298659) "a") (data (i32.const 298662) "a") (data (i32.const 298665) "a") (data (i32.const 298668) "a") (data (i32.const 298671) "a") (data (i32.const 298674) "a") (data (i32.const 298677) "a") (data (i32.const 298680) "a") (data (i32.const 298683) "a") (data (i32.const 298686) "a") (data (i32.const 298689) "a") (data (i32.const 298692) "a") (data (i32.const 298695) "a") (data (i32.const 298698) "a") (data (i32.const 298701) "a") (data (i32.const 298704) "a") (data (i32.const 298707) "a") (data (i32.const 298710) "a") (data (i32.const 298713) "a") (data (i32.const 298716) "a") (data (i32.const 298719) "a") (data (i32.const 298722) "a") (data (i32.const 298725) "a") (data (i32.const 298728) "a") (data (i32.const 298731) "a") (data (i32.const 298734) "a") (data (i32.const 298737) "a") (data (i32.const 298740) "a") (data (i32.const 298743) "a") (data (i32.const 298746) "a") (data (i32.const 298749) "a") (data (i32.const 298752) "a") (data (i32.const 298755) "a") (data (i32.const 298758) "a") (data (i32.const 298761) "a") (data (i32.const 298764) "a") (data (i32.const 298767) "a") (data (i32.const 298770) "a") (data (i32.const 298773) "a") (data (i32.const 298776) "a") (data (i32.const 298779) "a") (data (i32.const 298782) "a") (data (i32.const 298785) "a") (data (i32.const 298788) "a") (data (i32.const 298791) "a") (data (i32.const 298794) "a") (data (i32.const 298797) "a") (data (i32.const 298800) "a") (data (i32.const 298803) "a") (data (i32.const 298806) "a") (data (i32.const 298809) "a") (data (i32.const 298812) "a") (data (i32.const 298815) "a") (data (i32.const 298818) "a") (data (i32.const 298821) "a") (data (i32.const 298824) "a") (data (i32.const 298827) "a") (data (i32.const 298830) "a") (data (i32.const 298833) "a") (data (i32.const 298836) "a") (data (i32.const 298839) "a") (data (i32.const 298842) "a") (data (i32.const 298845) "a") (data (i32.const 298848) "a") (data (i32.const 298851) "a") (data (i32.const 298854) "a") (data (i32.const 298857) "a") (data (i32.const 298860) "a") (data (i32.const 298863) "a") (data (i32.const 298866) "a") (data (i32.const 298869) "a") (data (i32.const 298872) "a") (data (i32.const 298875) "a") (data (i32.const 298878) "a") (data (i32.const 298881) "a") (data (i32.const 298884) "a") (data (i32.const 298887) "a") (data (i32.const 298890) "a") (data (i32.const 298893) "a") (data (i32.const 298896) "a") (data (i32.const 298899) "a") (data (i32.const 298902) "a") (data (i32.const 298905) "a") (data (i32.const 298908) "a") (data (i32.const 298911) "a") (data (i32.const 298914) "a") (data (i32.const 298917) "a") (data (i32.const 298920) "a") (data (i32.const 298923) "a") (data (i32.const 298926) "a") (data (i32.const 298929) "a") (data (i32.const 298932) "a") (data (i32.const 298935) "a") (data (i32.const 298938) "a") (data (i32.const 298941) "a") (data (i32.const 298944) "a") (data (i32.const 298947) "a") (data (i32.const 298950) "a") (data (i32.const 298953) "a") (data (i32.const 298956) "a") (data (i32.const 298959) "a") (data (i32.const 298962) "a") (data (i32.const 298965) "a") (data (i32.const 298968) "a") (data (i32.const 298971) "a") (data (i32.const 298974) "a") (data (i32.const 298977) "a") (data (i32.const 298980) "a") (data (i32.const 298983) "a") (data (i32.const 298986) "a") (data (i32.const 298989) "a") (data (i32.const 298992) "a") (data (i32.const 298995) "a") (data (i32.const 298998) "a") (data (i32.const 299001) "a") (data (i32.const 299004) "a") (data (i32.const 299007) "a") (data (i32.const 299010) "a") (data (i32.const 299013) "a") (data (i32.const 299016) "a") (data (i32.const 299019) "a") (data (i32.const 299022) "a") (data (i32.const 299025) "a") (data (i32.const 299028) "a") (data (i32.const 299031) "a") (data (i32.const 299034) "a") (data (i32.const 299037) "a") (data (i32.const 299040) "a") (data (i32.const 299043) "a") (data (i32.const 299046) "a") (data (i32.const 299049) "a") (data (i32.const 299052) "a") (data (i32.const 299055) "a") (data (i32.const 299058) "a") (data (i32.const 299061) "a") (data (i32.const 299064) "a") (data (i32.const 299067) "a") (data (i32.const 299070) "a") (data (i32.const 299073) "a") (data (i32.const 299076) "a") (data (i32.const 299079) "a") (data (i32.const 299082) "a") (data (i32.const 299085) "a") (data (i32.const 299088) "a") (data (i32.const 299091) "a") (data (i32.const 299094) "a") (data (i32.const 299097) "a") (data (i32.const 299100) "a") (data (i32.const 299103) "a") (data (i32.const 299106) "a") (data (i32.const 299109) "a") (data (i32.const 299112) "a") (data (i32.const 299115) "a") (data (i32.const 299118) "a") (data (i32.const 299121) "a") (data (i32.const 299124) "a") (data (i32.const 299127) "a") (data (i32.const 299130) "a") (data (i32.const 299133) "a") (data (i32.const 299136) "a") (data (i32.const 299139) "a") (data (i32.const 299142) "a") (data (i32.const 299145) "a") (data (i32.const 299148) "a") (data (i32.const 299151) "a") (data (i32.const 299154) "a") (data (i32.const 299157) "a") (data (i32.const 299160) "a") (data (i32.const 299163) "a") (data (i32.const 299166) "a") (data (i32.const 299169) "a") (data (i32.const 299172) "a") (data (i32.const 299175) "a") (data (i32.const 299178) "a") (data (i32.const 299181) "a") (data (i32.const 299184) "a") (data (i32.const 299187) "a") (data (i32.const 299190) "a") (data (i32.const 299193) "a") (data (i32.const 299196) "a") (data (i32.const 299199) "a") (data (i32.const 299202) "a") (data (i32.const 299205) "a") (data (i32.const 299208) "a") (data (i32.const 299211) "a") (data (i32.const 299214) "a") (data (i32.const 299217) "a") (data (i32.const 299220) "a") (data (i32.const 299223) "a") (data (i32.const 299226) "a") (data (i32.const 299229) "a") (data (i32.const 299232) "a") (data (i32.const 299235) "a") (data (i32.const 299238) "a") (data (i32.const 299241) "a") (data (i32.const 299244) "a") (data (i32.const 299247) "a") (data (i32.const 299250) "a") (data (i32.const 299253) "a") (data (i32.const 299256) "a") (data (i32.const 299259) "a") (data (i32.const 299262) "a") (data (i32.const 299265) "a") (data (i32.const 299268) "a") (data (i32.const 299271) "a") (data (i32.const 299274) "a") (data (i32.const 299277) "a") (data (i32.const 299280) "a") (data (i32.const 299283) "a") (data (i32.const 299286) "a") (data (i32.const 299289) "a") (data (i32.const 299292) "a") (data (i32.const 299295) "a") (data (i32.const 299298) "a") (data (i32.const 299301) "a") (data (i32.const 299304) "a") (data (i32.const 299307) "a") (data (i32.const 299310) "a") (data (i32.const 299313) "a") (data (i32.const 299316) "a") (data (i32.const 299319) "a") (data (i32.const 299322) "a") (data (i32.const 299325) "a") (data (i32.const 299328) "a") (data (i32.const 299331) "a") (data (i32.const 299334) "a") (data (i32.const 299337) "a") (data (i32.const 299340) "a") (data (i32.const 299343) "a") (data (i32.const 299346) "a") (data (i32.const 299349) "a") (data (i32.const 299352) "a") (data (i32.const 299355) "a") (data (i32.const 299358) "a") (data (i32.const 299361) "a") (data (i32.const 299364) "a") (data (i32.const 299367) "a") (data (i32.const 299370) "a") (data (i32.const 299373) "a") (data (i32.const 299376) "a") (data (i32.const 299379) "a") (data (i32.const 299382) "a") (data (i32.const 299385) "a") (data (i32.const 299388) "a") (data (i32.const 299391) "a") (data (i32.const 299394) "a") (data (i32.const 299397) "a") (data (i32.const 299400) "a") (data (i32.const 299403) "a") (data (i32.const 299406) "a") (data (i32.const 299409) "a") (data (i32.const 299412) "a") (data (i32.const 299415) "a") (data (i32.const 299418) "a") (data (i32.const 299421) "a") (data (i32.const 299424) "a") (data (i32.const 299427) "a") (data (i32.const 299430) "a") (data (i32.const 299433) "a") (data (i32.const 299436) "a") (data (i32.const 299439) "a") (data (i32.const 299442) "a") (data (i32.const 299445) "a") (data (i32.const 299448) "a") (data (i32.const 299451) "a") (data (i32.const 299454) "a") (data (i32.const 299457) "a") (data (i32.const 299460) "a") (data (i32.const 299463) "a") (data (i32.const 299466) "a") (data (i32.const 299469) "a") (data (i32.const 299472) "a") (data (i32.const 299475) "a") (data (i32.const 299478) "a") (data (i32.const 299481) "a") (data (i32.const 299484) "a") (data (i32.const 299487) "a") (data (i32.const 299490) "a") (data (i32.const 299493) "a") (data (i32.const 299496) "a") (data (i32.const 299499) "a") (data (i32.const 299502) "a") (data (i32.const 299505) "a") (data (i32.const 299508) "a") (data (i32.const 299511) "a") (data (i32.const 299514) "a") (data (i32.const 299517) "a") (data (i32.const 299520) "a") (data (i32.const 299523) "a") (data (i32.const 299526) "a") (data (i32.const 299529) "a") (data (i32.const 299532) "a") (data (i32.const 299535) "a") (data (i32.const 299538) "a") (data (i32.const 299541) "a") (data (i32.const 299544) "a") (data (i32.const 299547) "a") (data (i32.const 299550) "a") (data (i32.const 299553) "a") (data (i32.const 299556) "a") (data (i32.const 299559) "a") (data (i32.const 299562) "a") (data (i32.const 299565) "a") (data (i32.const 299568) "a") (data (i32.const 299571) "a") (data (i32.const 299574) "a") (data (i32.const 299577) "a") (data (i32.const 299580) "a") (data (i32.const 299583) "a") (data (i32.const 299586) "a") (data (i32.const 299589) "a") (data (i32.const 299592) "a") (data (i32.const 299595) "a") (data (i32.const 299598) "a") (data (i32.const 299601) "a") (data (i32.const 299604) "a") (data (i32.const 299607) "a") (data (i32.const 299610) "a") (data (i32.const 299613) "a") (data (i32.const 299616) "a") (data (i32.const 299619) "a") (data (i32.const 299622) "a") (data (i32.const 299625) "a") (data (i32.const 299628) "a") (data (i32.const 299631) "a") (data (i32.const 299634) "a") (data (i32.const 299637) "a") (data (i32.const 299640) "a") (data (i32.const 299643) "a") (data (i32.const 299646) "a") (data (i32.const 299649) "a") (data (i32.const 299652) "a") (data (i32.const 299655) "a") (data (i32.const 299658) "a") (data (i32.const 299661) "a") (data (i32.const 299664) "a") (data (i32.const 299667) "a") (data (i32.const 299670) "a") (data (i32.const 299673) "a") (data (i32.const 299676) "a") (data (i32.const 299679) "a") (data (i32.const 299682) "a") (data (i32.const 299685) "a") (data (i32.const 299688) "a") (data (i32.const 299691) "a") (data (i32.const 299694) "a") (data (i32.const 299697) "a") (data (i32.const 299700) "a") (data (i32.const 299703) "a") (data (i32.const 299706) "a") (data (i32.const 299709) "a") (data (i32.const 299712) "a") (data (i32.const 299715) "a") (data (i32.const 299718) "a") (data (i32.const 299721) "a") (data (i32.const 299724) "a") (data (i32.const 299727) "a") (data (i32.const 299730) "a") (data (i32.const 299733) "a") (data (i32.const 299736) "a") (data (i32.const 299739) "a") (data (i32.const 299742) "a") (data (i32.const 299745) "a") (data (i32.const 299748) "a") (data (i32.const 299751) "a") (data (i32.const 299754) "a") (data (i32.const 299757) "a") (data (i32.const 299760) "a") (data (i32.const 299763) "a") (data (i32.const 299766) "a") (data (i32.const 299769) "a") (data (i32.const 299772) "a") (data (i32.const 299775) "a") (data (i32.const 299778) "a") (data (i32.const 299781) "a") (data (i32.const 299784) "a") (data (i32.const 299787) "a") (data (i32.const 299790) "a") (data (i32.const 299793) "a") (data (i32.const 299796) "a") (data (i32.const 299799) "a") (data (i32.const 299802) "a") (data (i32.const 299805) "a") (data (i32.const 299808) "a") (data (i32.const 299811) "a") (data (i32.const 299814) "a") (data (i32.const 299817) "a") (data (i32.const 299820) "a") (data (i32.const 299823) "a") (data (i32.const 299826) "a") (data (i32.const 299829) "a") (data (i32.const 299832) "a") (data (i32.const 299835) "a") (data (i32.const 299838) "a") (data (i32.const 299841) "a") (data (i32.const 299844) "a") (data (i32.const 299847) "a") (data (i32.const 299850) "a") (data (i32.const 299853) "a") (data (i32.const 299856) "a") (data (i32.const 299859) "a") (data (i32.const 299862) "a") (data (i32.const 299865) "a") (data (i32.const 299868) "a") (data (i32.const 299871) "a") (data (i32.const 299874) "a") (data (i32.const 299877) "a") (data (i32.const 299880) "a") (data (i32.const 299883) "a") (data (i32.const 299886) "a") (data (i32.const 299889) "a") (data (i32.const 299892) "a") (data (i32.const 299895) "a") (data (i32.const 299898) "a") (data (i32.const 299901) "a") (data (i32.const 299904) "a") (data (i32.const 299907) "a") (data (i32.const 299910) "a") (data (i32.const 299913) "a") (data (i32.const 299916) "a") (data (i32.const 299919) "a") (data (i32.const 299922) "a") (data (i32.const 299925) "a") (data (i32.const 299928) "a") (data (i32.const 299931) "a") (data (i32.const 299934) "a") (data (i32.const 299937) "a") (data (i32.const 299940) "a") (data (i32.const 299943) "a") (data (i32.const 299946) "a") (data (i32.const 299949) "a") (data (i32.const 299952) "a") (data (i32.const 299955) "a") (data (i32.const 299958) "a") (data (i32.const 299961) "a") (data (i32.const 299964) "a") (data (i32.const 299967) "a") (data (i32.const 299970) "a") (data (i32.const 299973) "a") (data (i32.const 299976) "a") (data (i32.const 299979) "a") (data (i32.const 299982) "a") (data (i32.const 299985) "a") (data (i32.const 299988) "a") (data (i32.const 299991) "a") (data (i32.const 299994) "a") (data (i32.const 299997) "a") (data (i32.const 300000) "a") (data (i32.const 300003) "a") (data (i32.const 300006) "a") (data (i32.const 300009) "a") (data (i32.const 300012) "a") (data (i32.const 300015) "a") (data (i32.const 300018) "a") (data (i32.const 300021) "a") (data (i32.const 300024) "a") (data (i32.const 300027) "a") (data (i32.const 300030) "a") (data (i32.const 300033) "a") (data (i32.const 300036) "a") (data (i32.const 300039) "a") (data (i32.const 300042) "a") (data (i32.const 300045) "a") (data (i32.const 300048) "a") (data (i32.const 300051) "a") (data (i32.const 300054) "a") (data (i32.const 300057) "a") (data (i32.const 300060) "a") (data (i32.const 300063) "a") (data (i32.const 300066) "a") (data (i32.const 300069) "a") (data (i32.const 300072) "a") (data (i32.const 300075) "a") (data (i32.const 300078) "a") (data (i32.const 300081) "a") (data (i32.const 300084) "a") (data (i32.const 300087) "a") (data (i32.const 300090) "a") (data (i32.const 300093) "a") (data (i32.const 300096) "a") (data (i32.const 300099) "a") (data (i32.const 300102) "a") (data (i32.const 300105) "a") (data (i32.const 300108) "a") (data (i32.const 300111) "a") (data (i32.const 300114) "a") (data (i32.const 300117) "a") (data (i32.const 300120) "a") (data (i32.const 300123) "a") (data (i32.const 300126) "a") (data (i32.const 300129) "a") (data (i32.const 300132) "a") (data (i32.const 300135) "a") (data (i32.const 300138) "a") (data (i32.const 300141) "a") (data (i32.const 300144) "a") (data (i32.const 300147) "a") (data (i32.const 300150) "a") (data (i32.const 300153) "a") (data (i32.const 300156) "a") (data (i32.const 300159) "a") (data (i32.const 300162) "a") (data (i32.const 300165) "a") (data (i32.const 300168) "a") (data (i32.const 300171) "a") (data (i32.const 300174) "a") (data (i32.const 300177) "a") (data (i32.const 300180) "a") (data (i32.const 300183) "a") (data (i32.const 300186) "a") (data (i32.const 300189) "a") (data (i32.const 300192) "a") (data (i32.const 300195) "a") (data (i32.const 300198) "a") (data (i32.const 300201) "a") (data (i32.const 300204) "a") (data (i32.const 300207) "a") (data (i32.const 300210) "a") (data (i32.const 300213) "a") (data (i32.const 300216) "a") (data (i32.const 300219) "a") (data (i32.const 300222) "a") (data (i32.const 300225) "a") (data (i32.const 300228) "a") (data (i32.const 300231) "a") (data (i32.const 300234) "a") (data (i32.const 300237) "a") (data (i32.const 300240) "a") (data (i32.const 300243) "a") (data (i32.const 300246) "a") (data (i32.const 300249) "a") (data (i32.const 300252) "a") (data (i32.const 300255) "a") (data (i32.const 300258) "a") (data (i32.const 300261) "a") (data (i32.const 300264) "a") (data (i32.const 300267) "a") (data (i32.const 300270) "a") (data (i32.const 300273) "a") (data (i32.const 300276) "a") (data (i32.const 300279) "a") (data (i32.const 300282) "a") (data (i32.const 300285) "a") (data (i32.const 300288) "a") (data (i32.const 300291) "a") (data (i32.const 300294) "a") (data (i32.const 300297) "a") (data (i32.const 300300) "a") (data (i32.const 300303) "a") (data (i32.const 300306) "a") (data (i32.const 300309) "a") (data (i32.const 300312) "a") (data (i32.const 300315) "a") (data (i32.const 300318) "a") (data (i32.const 300321) "a") (data (i32.const 300324) "a") (data (i32.const 300327) "a") (data (i32.const 300330) "a") (data (i32.const 300333) "a") (data (i32.const 300336) "a") (data (i32.const 300339) "a") (data (i32.const 300342) "a") (data (i32.const 300345) "a") (data (i32.const 300348) "a") (data (i32.const 300351) "a") (data (i32.const 300354) "a") (data (i32.const 300357) "a") (data (i32.const 300360) "a") (data (i32.const 300363) "a") (data (i32.const 300366) "a") (data (i32.const 300369) "a") (data (i32.const 300372) "a") (data (i32.const 300375) "a") (data (i32.const 300378) "a") (data (i32.const 300381) "a") (data (i32.const 300384) "a") (data (i32.const 300387) "a") (data (i32.const 300390) "a") (data (i32.const 300393) "a") (data (i32.const 300396) "a") (data (i32.const 300399) "a") (data (i32.const 300402) "a") (data (i32.const 300405) "a") (data (i32.const 300408) "a") (data (i32.const 300411) "a") (data (i32.const 300414) "a") (data (i32.const 300417) "a") (data (i32.const 300420) "a") (data (i32.const 300423) "a") (data (i32.const 300426) "a") (data (i32.const 300429) "a") (data (i32.const 300432) "a") (data (i32.const 300435) "a") (data (i32.const 300438) "a") (data (i32.const 300441) "a") (data (i32.const 300444) "a") (data (i32.const 300447) "a") (data (i32.const 300450) "a") (data (i32.const 300453) "a") (data (i32.const 300456) "a") (data (i32.const 300459) "a") (data (i32.const 300462) "a") (data (i32.const 300465) "a") (data (i32.const 300468) "a") (data (i32.const 300471) "a") (data (i32.const 300474) "a") (data (i32.const 300477) "a") (data (i32.const 300480) "a") (data (i32.const 300483) "a") (data (i32.const 300486) "a") (data (i32.const 300489) "a") (data (i32.const 300492) "a") (data (i32.const 300495) "a") (data (i32.const 300498) "a") (data (i32.const 300501) "a") (data (i32.const 300504) "a") (data (i32.const 300507) "a") (data (i32.const 300510) "a") (data (i32.const 300513) "a") (data (i32.const 300516) "a") (data (i32.const 300519) "a") (data (i32.const 300522) "a") (data (i32.const 300525) "a") (data (i32.const 300528) "a") (data (i32.const 300531) "a") (data (i32.const 300534) "a") (data (i32.const 300537) "a") (data (i32.const 300540) "a") (data (i32.const 300543) "a") (data (i32.const 300546) "a") (data (i32.const 300549) "a") (data (i32.const 300552) "a") (data (i32.const 300555) "a") (data (i32.const 300558) "a") (data (i32.const 300561) "a") (data (i32.const 300564) "a") (data (i32.const 300567) "a") (data (i32.const 300570) "a") (data (i32.const 300573) "a") (data (i32.const 300576) "a") (data (i32.const 300579) "a") (data (i32.const 300582) "a") (data (i32.const 300585) "a") (data (i32.const 300588) "a") (data (i32.const 300591) "a") (data (i32.const 300594) "a") (data (i32.const 300597) "a") (data (i32.const 300600) "a") (data (i32.const 300603) "a") (data (i32.const 300606) "a") (data (i32.const 300609) "a") (data (i32.const 300612) "a") (data (i32.const 300615) "a") (data (i32.const 300618) "a") (data (i32.const 300621) "a") (data (i32.const 300624) "a") (data (i32.const 300627) "a") (data (i32.const 300630) "a") (data (i32.const 300633) "a") (data (i32.const 300636) "a") (data (i32.const 300639) "a") (data (i32.const 300642) "a") (data (i32.const 300645) "a") (data (i32.const 300648) "a") (data (i32.const 300651) "a") (data (i32.const 300654) "a") (data (i32.const 300657) "a") (data (i32.const 300660) "a") (data (i32.const 300663) "a") (data (i32.const 300666) "a") (data (i32.const 300669) "a") (data (i32.const 300672) "a") (data (i32.const 300675) "a") (data (i32.const 300678) "a") (data (i32.const 300681) "a") (data (i32.const 300684) "a") (data (i32.const 300687) "a") (data (i32.const 300690) "a") (data (i32.const 300693) "a") (data (i32.const 300696) "a") (data (i32.const 300699) "a") (data (i32.const 300702) "a") (data (i32.const 300705) "a") (data (i32.const 300708) "a") (data (i32.const 300711) "a") (data (i32.const 300714) "a") (data (i32.const 300717) "a") (data (i32.const 300720) "a") (data (i32.const 300723) "a") (data (i32.const 300726) "a") (data (i32.const 300729) "a") (data (i32.const 300732) "a") (data (i32.const 300735) "a") (data (i32.const 300738) "a") (data (i32.const 300741) "a") (data (i32.const 300744) "a") (data (i32.const 300747) "a") (data (i32.const 300750) "a") (data (i32.const 300753) "a") (data (i32.const 300756) "a") (data (i32.const 300759) "a") (data (i32.const 300762) "a") (data (i32.const 300765) "a") (data (i32.const 300768) "a") (data (i32.const 300771) "a") (data (i32.const 300774) "a") (data (i32.const 300777) "a") (data (i32.const 300780) "a") (data (i32.const 300783) "a") (data (i32.const 300786) "a") (data (i32.const 300789) "a") (data (i32.const 300792) "a") (data (i32.const 300795) "a") (data (i32.const 300798) "a") (data (i32.const 300801) "a") (data (i32.const 300804) "a") (data (i32.const 300807) "a") (data (i32.const 300810) "a") (data (i32.const 300813) "a") (data (i32.const 300816) "a") (data (i32.const 300819) "a") (data (i32.const 300822) "a") (data (i32.const 300825) "a") (data (i32.const 300828) "a") (data (i32.const 300831) "a") (data (i32.const 300834) "a") (data (i32.const 300837) "a") (data (i32.const 300840) "a") (data (i32.const 300843) "a") (data (i32.const 300846) "a") (data (i32.const 300849) "a") (data (i32.const 300852) "a") (data (i32.const 300855) "a") (data (i32.const 300858) "a") (data (i32.const 300861) "a") (data (i32.const 300864) "a") (data (i32.const 300867) "a") (data (i32.const 300870) "a") (data (i32.const 300873) "a") (data (i32.const 300876) "a") (data (i32.const 300879) "a") (data (i32.const 300882) "a") (data (i32.const 300885) "a") (data (i32.const 300888) "a") (data (i32.const 300891) "a") (data (i32.const 300894) "a") (data (i32.const 300897) "a") (data (i32.const 300900) "a") (data (i32.const 300903) "a") (data (i32.const 300906) "a") (data (i32.const 300909) "a") (data (i32.const 300912) "a") (data (i32.const 300915) "a") (data (i32.const 300918) "a") (data (i32.const 300921) "a") (data (i32.const 300924) "a") (data (i32.const 300927) "a") (data (i32.const 300930) "a") (data (i32.const 300933) "a") (data (i32.const 300936) "a") (data (i32.const 300939) "a") (data (i32.const 300942) "a") (data (i32.const 300945) "a") (data (i32.const 300948) "a") (data (i32.const 300951) "a") (data (i32.const 300954) "a") (data (i32.const 300957) "a") (data (i32.const 300960) "a") (data (i32.const 300963) "a") (data (i32.const 300966) "a") (data (i32.const 300969) "a") (data (i32.const 300972) "a") (data (i32.const 300975) "a") (data (i32.const 300978) "a") (data (i32.const 300981) "a") (data (i32.const 300984) "a") (data (i32.const 300987) "a") (data (i32.const 300990) "a") (data (i32.const 300993) "a") (data (i32.const 300996) "a") (data (i32.const 300999) "a") (data (i32.const 301002) "a") (data (i32.const 301005) "a") (data (i32.const 301008) "a") (data (i32.const 301011) "a") (data (i32.const 301014) "a") (data (i32.const 301017) "a") (data (i32.const 301020) "a") (data (i32.const 301023) "a") (data (i32.const 301026) "a") (data (i32.const 301029) "a") (data (i32.const 301032) "a") (data (i32.const 301035) "a") (data (i32.const 301038) "a") (data (i32.const 301041) "a") (data (i32.const 301044) "a") (data (i32.const 301047) "a") (data (i32.const 301050) "a") (data (i32.const 301053) "a") (data (i32.const 301056) "a") (data (i32.const 301059) "a") (data (i32.const 301062) "a") (data (i32.const 301065) "a") (data (i32.const 301068) "a") (data (i32.const 301071) "a") (data (i32.const 301074) "a") (data (i32.const 301077) "a") (data (i32.const 301080) "a") (data (i32.const 301083) "a") (data (i32.const 301086) "a") (data (i32.const 301089) "a") (data (i32.const 301092) "a") (data (i32.const 301095) "a") (data (i32.const 301098) "a") (data (i32.const 301101) "a") (data (i32.const 301104) "a") (data (i32.const 301107) "a") (data (i32.const 301110) "a") (data (i32.const 301113) "a") (data (i32.const 301116) "a") (data (i32.const 301119) "a") (data (i32.const 301122) "a") (data (i32.const 301125) "a") (data (i32.const 301128) "a") (data (i32.const 301131) "a") (data (i32.const 301134) "a") (data (i32.const 301137) "a") (data (i32.const 301140) "a") (data (i32.const 301143) "a") (data (i32.const 301146) "a") (data (i32.const 301149) "a") (data (i32.const 301152) "a") (data (i32.const 301155) "a") (data (i32.const 301158) "a") (data (i32.const 301161) "a") (data (i32.const 301164) "a") (data (i32.const 301167) "a") (data (i32.const 301170) "a") (data (i32.const 301173) "a") (data (i32.const 301176) "a") (data (i32.const 301179) "a") (data (i32.const 301182) "a") (data (i32.const 301185) "a") (data (i32.const 301188) "a") (data (i32.const 301191) "a") (data (i32.const 301194) "a") (data (i32.const 301197) "a") (data (i32.const 301200) "a") (data (i32.const 301203) "a") (data (i32.const 301206) "a") (data (i32.const 301209) "a") (data (i32.const 301212) "a") (data (i32.const 301215) "a") (data (i32.const 301218) "a") (data (i32.const 301221) "a") (data (i32.const 301224) "a") (data (i32.const 301227) "a") (data (i32.const 301230) "a") (data (i32.const 301233) "a") (data (i32.const 301236) "a") (data (i32.const 301239) "a") (data (i32.const 301242) "a") (data (i32.const 301245) "a") (data (i32.const 301248) "a") (data (i32.const 301251) "a") (data (i32.const 301254) "a") (data (i32.const 301257) "a") (data (i32.const 301260) "a") (data (i32.const 301263) "a") (data (i32.const 301266) "a") (data (i32.const 301269) "a") (data (i32.const 301272) "a") (data (i32.const 301275) "a") (data (i32.const 301278) "a") (data (i32.const 301281) "a") (data (i32.const 301284) "a") (data (i32.const 301287) "a") (data (i32.const 301290) "a") (data (i32.const 301293) "a") (data (i32.const 301296) "a") (data (i32.const 301299) "a") (data (i32.const 301302) "a") (data (i32.const 301305) "a") (data (i32.const 301308) "a") (data (i32.const 301311) "a") (data (i32.const 301314) "a") (data (i32.const 301317) "a") (data (i32.const 301320) "a") (data (i32.const 301323) "a") (data (i32.const 301326) "a") (data (i32.const 301329) "a") (data (i32.const 301332) "a") (data (i32.const 301335) "a") (data (i32.const 301338) "a") (data (i32.const 301341) "a") (data (i32.const 301344) "a") (data (i32.const 301347) "a") (data (i32.const 301350) "a") (data (i32.const 301353) "a") (data (i32.const 301356) "a") (data (i32.const 301359) "a") (data (i32.const 301362) "a") (data (i32.const 301365) "a") (data (i32.const 301368) "a") (data (i32.const 301371) "a") (data (i32.const 301374) "a") (data (i32.const 301377) "a") (data (i32.const 301380) "a") (data (i32.const 301383) "a") (data (i32.const 301386) "a") (data (i32.const 301389) "a") (data (i32.const 301392) "a") (data (i32.const 301395) "a") (data (i32.const 301398) "a") (data (i32.const 301401) "a") (data (i32.const 301404) "a") (data (i32.const 301407) "a") (data (i32.const 301410) "a") (data (i32.const 301413) "a") (data (i32.const 301416) "a") (data (i32.const 301419) "a") (data (i32.const 301422) "a") (data (i32.const 301425) "a") (data (i32.const 301428) "a") (data (i32.const 301431) "a") (data (i32.const 301434) "a") (data (i32.const 301437) "a") (data (i32.const 301440) "a") (data (i32.const 301443) "a") (data (i32.const 301446) "a") (data (i32.const 301449) "a") (data (i32.const 301452) "a") (data (i32.const 301455) "a") (data (i32.const 301458) "a") (data (i32.const 301461) "a") (data (i32.const 301464) "a") (data (i32.const 301467) "a") (data (i32.const 301470) "a") (data (i32.const 301473) "a") (data (i32.const 301476) "a") (data (i32.const 301479) "a") (data (i32.const 301482) "a") (data (i32.const 301485) "a") (data (i32.const 301488) "a") (data (i32.const 301491) "a") (data (i32.const 301494) "a") (data (i32.const 301497) "a") (data (i32.const 301500) "a") (data (i32.const 301503) "a") (data (i32.const 301506) "a") (data (i32.const 301509) "a") (data (i32.const 301512) "a") (data (i32.const 301515) "a") (data (i32.const 301518) "a") (data (i32.const 301521) "a") (data (i32.const 301524) "a") (data (i32.const 301527) "a") (data (i32.const 301530) "a") (data (i32.const 301533) "a") (data (i32.const 301536) "a") (data (i32.const 301539) "a") (data (i32.const 301542) "a") (data (i32.const 301545) "a") (data (i32.const 301548) "a") (data (i32.const 301551) "a") (data (i32.const 301554) "a") (data (i32.const 301557) "a") (data (i32.const 301560) "a") (data (i32.const 301563) "a") (data (i32.const 301566) "a") (data (i32.const 301569) "a") (data (i32.const 301572) "a") (data (i32.const 301575) "a") (data (i32.const 301578) "a") (data (i32.const 301581) "a") (data (i32.const 301584) "a") (data (i32.const 301587) "a") (data (i32.const 301590) "a") (data (i32.const 301593) "a") (data (i32.const 301596) "a") (data (i32.const 301599) "a") (data (i32.const 301602) "a") (data (i32.const 301605) "a") (data (i32.const 301608) "a") (data (i32.const 301611) "a") (data (i32.const 301614) "a") (data (i32.const 301617) "a") (data (i32.const 301620) "a") (data (i32.const 301623) "a") (data (i32.const 301626) "a") (data (i32.const 301629) "a") (data (i32.const 301632) "a") (data (i32.const 301635) "a") (data (i32.const 301638) "a") (data (i32.const 301641) "a") (data (i32.const 301644) "a") (data (i32.const 301647) "a") (data (i32.const 301650) "a") (data (i32.const 301653) "a") (data (i32.const 301656) "a") (data (i32.const 301659) "a") (data (i32.const 301662) "a") (data (i32.const 301665) "a") (data (i32.const 301668) "a") (data (i32.const 301671) "a") (data (i32.const 301674) "a") (data (i32.const 301677) "a") (data (i32.const 301680) "a") (data (i32.const 301683) "a") (data (i32.const 301686) "a") (data (i32.const 301689) "a") (data (i32.const 301692) "a") (data (i32.const 301695) "a") (data (i32.const 301698) "a") (data (i32.const 301701) "a") (data (i32.const 301704) "a") (data (i32.const 301707) "a") (data (i32.const 301710) "a") (data (i32.const 301713) "a") (data (i32.const 301716) "a") (data (i32.const 301719) "a") (data (i32.const 301722) "a") (data (i32.const 301725) "a") (data (i32.const 301728) "a") (data (i32.const 301731) "a") (data (i32.const 301734) "a") (data (i32.const 301737) "a") (data (i32.const 301740) "a") (data (i32.const 301743) "a") (data (i32.const 301746) "a") (data (i32.const 301749) "a") (data (i32.const 301752) "a") (data (i32.const 301755) "a") (data (i32.const 301758) "a") (data (i32.const 301761) "a") (data (i32.const 301764) "a") (data (i32.const 301767) "a") (data (i32.const 301770) "a") (data (i32.const 301773) "a") (data (i32.const 301776) "a") (data (i32.const 301779) "a") (data (i32.const 301782) "a") (data (i32.const 301785) "a") (data (i32.const 301788) "a") (data (i32.const 301791) "a") (data (i32.const 301794) "a") (data (i32.const 301797) "a") (data (i32.const 301800) "a") (data (i32.const 301803) "a") (data (i32.const 301806) "a") (data (i32.const 301809) "a") (data (i32.const 301812) "a") (data (i32.const 301815) "a") (data (i32.const 301818) "a") (data (i32.const 301821) "a") (data (i32.const 301824) "a") (data (i32.const 301827) "a") (data (i32.const 301830) "a") (data (i32.const 301833) "a") (data (i32.const 301836) "a") (data (i32.const 301839) "a") (data (i32.const 301842) "a") (data (i32.const 301845) "a") (data (i32.const 301848) "a") (data (i32.const 301851) "a") (data (i32.const 301854) "a") (data (i32.const 301857) "a") (data (i32.const 301860) "a") (data (i32.const 301863) "a") (data (i32.const 301866) "a") (data (i32.const 301869) "a") (data (i32.const 301872) "a") (data (i32.const 301875) "a") (data (i32.const 301878) "a") (data (i32.const 301881) "a") (data (i32.const 301884) "a") (data (i32.const 301887) "a") (data (i32.const 301890) "a") (data (i32.const 301893) "a") (data (i32.const 301896) "a") (data (i32.const 301899) "a") (data (i32.const 301902) "a") (data (i32.const 301905) "a") (data (i32.const 301908) "a") (data (i32.const 301911) "a") (data (i32.const 301914) "a") (data (i32.const 301917) "a") (data (i32.const 301920) "a") (data (i32.const 301923) "a") (data (i32.const 301926) "a") (data (i32.const 301929) "a") (data (i32.const 301932) "a") (data (i32.const 301935) "a") (data (i32.const 301938) "a") (data (i32.const 301941) "a") (data (i32.const 301944) "a") (data (i32.const 301947) "a") (data (i32.const 301950) "a") (data (i32.const 301953) "a") (data (i32.const 301956) "a") (data (i32.const 301959) "a") (data (i32.const 301962) "a") (data (i32.const 301965) "a") (data (i32.const 301968) "a") (data (i32.const 301971) "a") (data (i32.const 301974) "a") (data (i32.const 301977) "a") (data (i32.const 301980) "a") (data (i32.const 301983) "a") (data (i32.const 301986) "a") (data (i32.const 301989) "a") (data (i32.const 301992) "a") (data (i32.const 301995) "a") (data (i32.const 301998) "a") (data (i32.const 302001) "a") (data (i32.const 302004) "a") (data (i32.const 302007) "a") (data (i32.const 302010) "a") (data (i32.const 302013) "a") (data (i32.const 302016) "a") (data (i32.const 302019) "a") (data (i32.const 302022) "a") (data (i32.const 302025) "a") (data (i32.const 302028) "a") (data (i32.const 302031) "a") (data (i32.const 302034) "a") (data (i32.const 302037) "a") (data (i32.const 302040) "a") (data (i32.const 302043) "a") (data (i32.const 302046) "a") (data (i32.const 302049) "a") (data (i32.const 302052) "a") (data (i32.const 302055) "a") (data (i32.const 302058) "a") (data (i32.const 302061) "a") (data (i32.const 302064) "a") (data (i32.const 302067) "a") (data (i32.const 302070) "a") (data (i32.const 302073) "a") (data (i32.const 302076) "a") (data (i32.const 302079) "a") (data (i32.const 302082) "a") (data (i32.const 302085) "a") (data (i32.const 302088) "a") (data (i32.const 302091) "a") (data (i32.const 302094) "a") (data (i32.const 302097) "a") (data (i32.const 302100) "a") (data (i32.const 302103) "a") (data (i32.const 302106) "a") (data (i32.const 302109) "a") (data (i32.const 302112) "a") (data (i32.const 302115) "a") (data (i32.const 302118) "a") (data (i32.const 302121) "a") (data (i32.const 302124) "a") (data (i32.const 302127) "a") (data (i32.const 302130) "a") (data (i32.const 302133) "a") (data (i32.const 302136) "a") (data (i32.const 302139) "a") (data (i32.const 302142) "a") (data (i32.const 302145) "a") (data (i32.const 302148) "a") (data (i32.const 302151) "a") (data (i32.const 302154) "a") (data (i32.const 302157) "a") (data (i32.const 302160) "a") (data (i32.const 302163) "a") (data (i32.const 302166) "a") (data (i32.const 302169) "a") (data (i32.const 302172) "a") (data (i32.const 302175) "a") (data (i32.const 302178) "a") (data (i32.const 302181) "a") (data (i32.const 302184) "a") (data (i32.const 302187) "a") (data (i32.const 302190) "a") (data (i32.const 302193) "a") (data (i32.const 302196) "a") (data (i32.const 302199) "a") (data (i32.const 302202) "a") (data (i32.const 302205) "a") (data (i32.const 302208) "a") (data (i32.const 302211) "a") (data (i32.const 302214) "a") (data (i32.const 302217) "a") (data (i32.const 302220) "a") (data (i32.const 302223) "a") (data (i32.const 302226) "a") (data (i32.const 302229) "a") (data (i32.const 302232) "a") (data (i32.const 302235) "a") (data (i32.const 302238) "a") (data (i32.const 302241) "a") (data (i32.const 302244) "a") (data (i32.const 302247) "a") (data (i32.const 302250) "a") (data (i32.const 302253) "a") (data (i32.const 302256) "a") (data (i32.const 302259) "a") (data (i32.const 302262) "a") (data (i32.const 302265) "a") (data (i32.const 302268) "a") (data (i32.const 302271) "a") (data (i32.const 302274) "a") (data (i32.const 302277) "a") (data (i32.const 302280) "a") (data (i32.const 302283) "a") (data (i32.const 302286) "a") (data (i32.const 302289) "a") (data (i32.const 302292) "a") (data (i32.const 302295) "a") (data (i32.const 302298) "a") (data (i32.const 302301) "a") (data (i32.const 302304) "a") (data (i32.const 302307) "a") (data (i32.const 302310) "a") (data (i32.const 302313) "a") (data (i32.const 302316) "a") (data (i32.const 302319) "a") (data (i32.const 302322) "a") (data (i32.const 302325) "a") (data (i32.const 302328) "a") (data (i32.const 302331) "a") (data (i32.const 302334) "a") (data (i32.const 302337) "a") (data (i32.const 302340) "a") (data (i32.const 302343) "a") (data (i32.const 302346) "a") (data (i32.const 302349) "a") (data (i32.const 302352) "a") (data (i32.const 302355) "a") (data (i32.const 302358) "a") (data (i32.const 302361) "a") (data (i32.const 302364) "a") (data (i32.const 302367) "a") (data (i32.const 302370) "a") (data (i32.const 302373) "a") (data (i32.const 302376) "a") (data (i32.const 302379) "a") (data (i32.const 302382) "a") (data (i32.const 302385) "a") (data (i32.const 302388) "a") (data (i32.const 302391) "a") (data (i32.const 302394) "a") (data (i32.const 302397) "a") (data (i32.const 302400) "a") (data (i32.const 302403) "a") (data (i32.const 302406) "a") (data (i32.const 302409) "a") (data (i32.const 302412) "a") (data (i32.const 302415) "a") (data (i32.const 302418) "a") (data (i32.const 302421) "a") (data (i32.const 302424) "a") (data (i32.const 302427) "a") (data (i32.const 302430) "a") (data (i32.const 302433) "a") (data (i32.const 302436) "a") (data (i32.const 302439) "a") (data (i32.const 302442) "a") (data (i32.const 302445) "a") (data (i32.const 302448) "a") (data (i32.const 302451) "a") (data (i32.const 302454) "a") (data (i32.const 302457) "a") (data (i32.const 302460) "a") (data (i32.const 302463) "a") (data (i32.const 302466) "a") (data (i32.const 302469) "a") (data (i32.const 302472) "a") (data (i32.const 302475) "a") (data (i32.const 302478) "a") (data (i32.const 302481) "a") (data (i32.const 302484) "a") (data (i32.const 302487) "a") (data (i32.const 302490) "a") (data (i32.const 302493) "a") (data (i32.const 302496) "a") (data (i32.const 302499) "a") (data (i32.const 302502) "a") (data (i32.const 302505) "a") (data (i32.const 302508) "a") (data (i32.const 302511) "a") (data (i32.const 302514) "a") (data (i32.const 302517) "a") (data (i32.const 302520) "a") (data (i32.const 302523) "a") (data (i32.const 302526) "a") (data (i32.const 302529) "a") (data (i32.const 302532) "a") (data (i32.const 302535) "a") (data (i32.const 302538) "a") (data (i32.const 302541) "a") (data (i32.const 302544) "a") (data (i32.const 302547) "a") (data (i32.const 302550) "a") (data (i32.const 302553) "a") (data (i32.const 302556) "a") (data (i32.const 302559) "a") (data (i32.const 302562) "a") (data (i32.const 302565) "a") (data (i32.const 302568) "a") (data (i32.const 302571) "a") (data (i32.const 302574) "a") (data (i32.const 302577) "a") (data (i32.const 302580) "a") (data (i32.const 302583) "a") (data (i32.const 302586) "a") (data (i32.const 302589) "a") (data (i32.const 302592) "a") (data (i32.const 302595) "a") (data (i32.const 302598) "a") (data (i32.const 302601) "a") (data (i32.const 302604) "a") (data (i32.const 302607) "a") (data (i32.const 302610) "a") (data (i32.const 302613) "a") (data (i32.const 302616) "a") (data (i32.const 302619) "a") (data (i32.const 302622) "a") (data (i32.const 302625) "a") (data (i32.const 302628) "a") (data (i32.const 302631) "a") (data (i32.const 302634) "a") (data (i32.const 302637) "a") (data (i32.const 302640) "a") (data (i32.const 302643) "a") (data (i32.const 302646) "a") (data (i32.const 302649) "a") (data (i32.const 302652) "a") (data (i32.const 302655) "a") (data (i32.const 302658) "a") (data (i32.const 302661) "a") (data (i32.const 302664) "a") (data (i32.const 302667) "a") (data (i32.const 302670) "a") (data (i32.const 302673) "a") (data (i32.const 302676) "a") (data (i32.const 302679) "a") (data (i32.const 302682) "a") (data (i32.const 302685) "a") (data (i32.const 302688) "a") (data (i32.const 302691) "a") (data (i32.const 302694) "a") (data (i32.const 302697) "a") (data (i32.const 302700) "a") (data (i32.const 302703) "a") (data (i32.const 302706) "a") (data (i32.const 302709) "a") (data (i32.const 302712) "a") (data (i32.const 302715) "a") (data (i32.const 302718) "a") (data (i32.const 302721) "a") (data (i32.const 302724) "a") (data (i32.const 302727) "a") (data (i32.const 302730) "a") (data (i32.const 302733) "a") (data (i32.const 302736) "a") (data (i32.const 302739) "a") (data (i32.const 302742) "a") (data (i32.const 302745) "a") (data (i32.const 302748) "a") (data (i32.const 302751) "a") (data (i32.const 302754) "a") (data (i32.const 302757) "a") (data (i32.const 302760) "a") (data (i32.const 302763) "a") (data (i32.const 302766) "a") (data (i32.const 302769) "a") (data (i32.const 302772) "a") (data (i32.const 302775) "a") (data (i32.const 302778) "a") (data (i32.const 302781) "a") (data (i32.const 302784) "a") (data (i32.const 302787) "a") (data (i32.const 302790) "a") (data (i32.const 302793) "a") (data (i32.const 302796) "a") (data (i32.const 302799) "a") (data (i32.const 302802) "a") (data (i32.const 302805) "a") (data (i32.const 302808) "a") (data (i32.const 302811) "a") (data (i32.const 302814) "a") (data (i32.const 302817) "a") (data (i32.const 302820) "a") (data (i32.const 302823) "a") (data (i32.const 302826) "a") (data (i32.const 302829) "a") (data (i32.const 302832) "a") (data (i32.const 302835) "a") (data (i32.const 302838) "a") (data (i32.const 302841) "a") (data (i32.const 302844) "a") (data (i32.const 302847) "a") (data (i32.const 302850) "a") (data (i32.const 302853) "a") (data (i32.const 302856) "a") (data (i32.const 302859) "a") (data (i32.const 302862) "a") (data (i32.const 302865) "a") (data (i32.const 302868) "a") (data (i32.const 302871) "a") (data (i32.const 302874) "a") (data (i32.const 302877) "a") (data (i32.const 302880) "a") (data (i32.const 302883) "a") (data (i32.const 302886) "a") (data (i32.const 302889) "a") (data (i32.const 302892) "a") (data (i32.const 302895) "a") (data (i32.const 302898) "a") (data (i32.const 302901) "a") (data (i32.const 302904) "a") (data (i32.const 302907) "a") (data (i32.const 302910) "a") (data (i32.const 302913) "a") (data (i32.const 302916) "a") (data (i32.const 302919) "a") (data (i32.const 302922) "a") (data (i32.const 302925) "a") (data (i32.const 302928) "a") (data (i32.const 302931) "a") (data (i32.const 302934) "a") (data (i32.const 302937) "a") (data (i32.const 302940) "a") (data (i32.const 302943) "a") (data (i32.const 302946) "a") (data (i32.const 302949) "a") (data (i32.const 302952) "a") (data (i32.const 302955) "a") (data (i32.const 302958) "a") (data (i32.const 302961) "a") (data (i32.const 302964) "a") (data (i32.const 302967) "a") (data (i32.const 302970) "a") (data (i32.const 302973) "a") (data (i32.const 302976) "a") (data (i32.const 302979) "a") (data (i32.const 302982) "a") (data (i32.const 302985) "a") (data (i32.const 302988) "a") (data (i32.const 302991) "a") (data (i32.const 302994) "a") (data (i32.const 302997) "a") (data (i32.const 303000) "a") (data (i32.const 303003) "a") (data (i32.const 303006) "a") (data (i32.const 303009) "a") (data (i32.const 303012) "a") (data (i32.const 303015) "a") (data (i32.const 303018) "a") (data (i32.const 303021) "a") (data (i32.const 303024) "a") (data (i32.const 303027) "a") (data (i32.const 303030) "a") (data (i32.const 303033) "a") (data (i32.const 303036) "a") (data (i32.const 303039) "a") (data (i32.const 303042) "a") (data (i32.const 303045) "a") (data (i32.const 303048) "a") (data (i32.const 303051) "a") (data (i32.const 303054) "a") (data (i32.const 303057) "a") (data (i32.const 303060) "a") (data (i32.const 303063) "a") (data (i32.const 303066) "a") (data (i32.const 303069) "a") (data (i32.const 303072) "a") (data (i32.const 303075) "a") (data (i32.const 303078) "a") (data (i32.const 303081) "a") (data (i32.const 303084) "a") (data (i32.const 303087) "a") (data (i32.const 303090) "a") (data (i32.const 303093) "a") (data (i32.const 303096) "a") (data (i32.const 303099) "a") (data (i32.const 303102) "a") (data (i32.const 303105) "a") (data (i32.const 303108) "a") (data (i32.const 303111) "a") (data (i32.const 303114) "a") (data (i32.const 303117) "a") (data (i32.const 303120) "a") (data (i32.const 303123) "a") (data (i32.const 303126) "a") (data (i32.const 303129) "a") (data (i32.const 303132) "a") (data (i32.const 303135) "a") (data (i32.const 303138) "a") (data (i32.const 303141) "a") (data (i32.const 303144) "a") (data (i32.const 303147) "a") (data (i32.const 303150) "a") (data (i32.const 303153) "a") (data (i32.const 303156) "a") (data (i32.const 303159) "a") (data (i32.const 303162) "a") (data (i32.const 303165) "a") (data (i32.const 303168) "a") (data (i32.const 303171) "a") (data (i32.const 303174) "a") (data (i32.const 303177) "a") (data (i32.const 303180) "a") (data (i32.const 303183) "a") (data (i32.const 303186) "a") (data (i32.const 303189) "a") (data (i32.const 303192) "a") (data (i32.const 303195) "a") (data (i32.const 303198) "a") (data (i32.const 303201) "a") (data (i32.const 303204) "a") (data (i32.const 303207) "a") (data (i32.const 303210) "a") (data (i32.const 303213) "a") (data (i32.const 303216) "a") (data (i32.const 303219) "a") (data (i32.const 303222) "a") (data (i32.const 303225) "a") (data (i32.const 303228) "a") (data (i32.const 303231) "a") (data (i32.const 303234) "a") (data (i32.const 303237) "a") (data (i32.const 303240) "a") (data (i32.const 303243) "a") (data (i32.const 303246) "a") (data (i32.const 303249) "a") (data (i32.const 303252) "a") (data (i32.const 303255) "a") (data (i32.const 303258) "a") (data (i32.const 303261) "a") (data (i32.const 303264) "a") (data (i32.const 303267) "a") (data (i32.const 303270) "a") (data (i32.const 303273) "a") (data (i32.const 303276) "a") (data (i32.const 303279) "a") (data (i32.const 303282) "a") (data (i32.const 303285) "a") (data (i32.const 303288) "a") (data (i32.const 303291) "a") (data (i32.const 303294) "a") (data (i32.const 303297) "a") (data (i32.const 303300) "a") (data (i32.const 303303) "a") (data (i32.const 303306) "a") (data (i32.const 303309) "a") (data (i32.const 303312) "a") (data (i32.const 303315) "a") (data (i32.const 303318) "a") (data (i32.const 303321) "a") (data (i32.const 303324) "a") (data (i32.const 303327) "a") (data (i32.const 303330) "a") (data (i32.const 303333) "a") (data (i32.const 303336) "a") (data (i32.const 303339) "a") (data (i32.const 303342) "a") (data (i32.const 303345) "a") (data (i32.const 303348) "a") (data (i32.const 303351) "a") (data (i32.const 303354) "a") (data (i32.const 303357) "a") (data (i32.const 303360) "a") (data (i32.const 303363) "a") (data (i32.const 303366) "a") (data (i32.const 303369) "a") (data (i32.const 303372) "a") (data (i32.const 303375) "a") (data (i32.const 303378) "a") (data (i32.const 303381) "a") (data (i32.const 303384) "a") (data (i32.const 303387) "a") (data (i32.const 303390) "a") (data (i32.const 303393) "a") (data (i32.const 303396) "a") (data (i32.const 303399) "a") (data (i32.const 303402) "a") (data (i32.const 303405) "a") (data (i32.const 303408) "a") (data (i32.const 303411) "a") (data (i32.const 303414) "a") (data (i32.const 303417) "a") (data (i32.const 303420) "a") (data (i32.const 303423) "a") (data (i32.const 303426) "a") (data (i32.const 303429) "a") (data (i32.const 303432) "a") (data (i32.const 303435) "a") (data (i32.const 303438) "a") (data (i32.const 303441) "a") (data (i32.const 303444) "a") (data (i32.const 303447) "a") (data (i32.const 303450) "a") (data (i32.const 303453) "a") (data (i32.const 303456) "a") (data (i32.const 303459) "a") (data (i32.const 303462) "a") (data (i32.const 303465) "a") (data (i32.const 303468) "a") (data (i32.const 303471) "a") (data (i32.const 303474) "a") (data (i32.const 303477) "a") (data (i32.const 303480) "a") (data (i32.const 303483) "a") (data (i32.const 303486) "a") (data (i32.const 303489) "a") (data (i32.const 303492) "a") (data (i32.const 303495) "a") (data (i32.const 303498) "a") (data (i32.const 303501) "a") (data (i32.const 303504) "a") (data (i32.const 303507) "a") (data (i32.const 303510) "a") (data (i32.const 303513) "a") (data (i32.const 303516) "a") (data (i32.const 303519) "a") (data (i32.const 303522) "a") (data (i32.const 303525) "a") (data (i32.const 303528) "a") (data (i32.const 303531) "a") (data (i32.const 303534) "a") (data (i32.const 303537) "a") (data (i32.const 303540) "a") (data (i32.const 303543) "a") (data (i32.const 303546) "a") (data (i32.const 303549) "a") (data (i32.const 303552) "a") (data (i32.const 303555) "a") (data (i32.const 303558) "a") (data (i32.const 303561) "a") (data (i32.const 303564) "a") (data (i32.const 303567) "a") (data (i32.const 303570) "a") (data (i32.const 303573) "a") (data (i32.const 303576) "a") (data (i32.const 303579) "a") (data (i32.const 303582) "a") (data (i32.const 303585) "a") (data (i32.const 303588) "a") (data (i32.const 303591) "a") (data (i32.const 303594) "a") (data (i32.const 303597) "a") (data (i32.const 303600) "a") (data (i32.const 303603) "a") (data (i32.const 303606) "a") (data (i32.const 303609) "a") (data (i32.const 303612) "a") (data (i32.const 303615) "a") (data (i32.const 303618) "a") (data (i32.const 303621) "a") (data (i32.const 303624) "a") (data (i32.const 303627) "a") (data (i32.const 303630) "a") (data (i32.const 303633) "a") (data (i32.const 303636) "a") (data (i32.const 303639) "a") (data (i32.const 303642) "a") (data (i32.const 303645) "a") (data (i32.const 303648) "a") (data (i32.const 303651) "a") (data (i32.const 303654) "a") (data (i32.const 303657) "a") (data (i32.const 303660) "a") (data (i32.const 303663) "a") (data (i32.const 303666) "a") (data (i32.const 303669) "a") (data (i32.const 303672) "a") (data (i32.const 303675) "a") (data (i32.const 303678) "a") (data (i32.const 303681) "a") (data (i32.const 303684) "a") (data (i32.const 303687) "a") (data (i32.const 303690) "a") (data (i32.const 303693) "a") (data (i32.const 303696) "a") (data (i32.const 303699) "a") (data (i32.const 303702) "a") (data (i32.const 303705) "a") (data (i32.const 303708) "a") (data (i32.const 303711) "a") (data (i32.const 303714) "a") (data (i32.const 303717) "a") (data (i32.const 303720) "a") (data (i32.const 303723) "a") (data (i32.const 303726) "a") (data (i32.const 303729) "a") (data (i32.const 303732) "a") (data (i32.const 303735) "a") (data (i32.const 303738) "a") (data (i32.const 303741) "a") (data (i32.const 303744) "a") (data (i32.const 303747) "a") (data (i32.const 303750) "a") (data (i32.const 303753) "a") (data (i32.const 303756) "a") (data (i32.const 303759) "a") (data (i32.const 303762) "a") (data (i32.const 303765) "a") (data (i32.const 303768) "a") (data (i32.const 303771) "a") (data (i32.const 303774) "a") (data (i32.const 303777) "a") (data (i32.const 303780) "a") (data (i32.const 303783) "a") (data (i32.const 303786) "a") (data (i32.const 303789) "a") (data (i32.const 303792) "a") (data (i32.const 303795) "a") (data (i32.const 303798) "a") (data (i32.const 303801) "a") (data (i32.const 303804) "a") (data (i32.const 303807) "a") (data (i32.const 303810) "a") (data (i32.const 303813) "a") (data (i32.const 303816) "a") (data (i32.const 303819) "a") (data (i32.const 303822) "a") (data (i32.const 303825) "a") (data (i32.const 303828) "a") (data (i32.const 303831) "a") (data (i32.const 303834) "a") (data (i32.const 303837) "a") (data (i32.const 303840) "a") (data (i32.const 303843) "a") (data (i32.const 303846) "a") (data (i32.const 303849) "a") (data (i32.const 303852) "a") (data (i32.const 303855) "a") (data (i32.const 303858) "a") (data (i32.const 303861) "a") (data (i32.const 303864) "a") (data (i32.const 303867) "a") (data (i32.const 303870) "a") (data (i32.const 303873) "a") (data (i32.const 303876) "a") (data (i32.const 303879) "a") (data (i32.const 303882) "a") (data (i32.const 303885) "a") (data (i32.const 303888) "a") (data (i32.const 303891) "a") (data (i32.const 303894) "a") (data (i32.const 303897) "a") (data (i32.const 303900) "a") (data (i32.const 303903) "a") (data (i32.const 303906) "a") (data (i32.const 303909) "a") (data (i32.const 303912) "a") (data (i32.const 303915) "a") (data (i32.const 303918) "a") (data (i32.const 303921) "a") (data (i32.const 303924) "a") (data (i32.const 303927) "a") (data (i32.const 303930) "a") (data (i32.const 303933) "a") (data (i32.const 303936) "a") (data (i32.const 303939) "a") (data (i32.const 303942) "a") (data (i32.const 303945) "a") (data (i32.const 303948) "a") (data (i32.const 303951) "a") (data (i32.const 303954) "a") (data (i32.const 303957) "a") (data (i32.const 303960) "a") (data (i32.const 303963) "a") (data (i32.const 303966) "a") (data (i32.const 303969) "a") (data (i32.const 303972) "a") (data (i32.const 303975) "a") (data (i32.const 303978) "a") (data (i32.const 303981) "a") (data (i32.const 303984) "a") (data (i32.const 303987) "a") (data (i32.const 303990) "a") (data (i32.const 303993) "a") (data (i32.const 303996) "a") (data (i32.const 303999) "a") (data (i32.const 304002) "a") (data (i32.const 304005) "a") (data (i32.const 304008) "a") (data (i32.const 304011) "a") (data (i32.const 304014) "a") (data (i32.const 304017) "a") (data (i32.const 304020) "a") (data (i32.const 304023) "a") (data (i32.const 304026) "a") (data (i32.const 304029) "a") (data (i32.const 304032) "a") (data (i32.const 304035) "a") (data (i32.const 304038) "a") (data (i32.const 304041) "a") (data (i32.const 304044) "a") (data (i32.const 304047) "a") (data (i32.const 304050) "a") (data (i32.const 304053) "a") (data (i32.const 304056) "a") (data (i32.const 304059) "a") (data (i32.const 304062) "a") (data (i32.const 304065) "a") (data (i32.const 304068) "a") (data (i32.const 304071) "a") (data (i32.const 304074) "a") (data (i32.const 304077) "a") (data (i32.const 304080) "a") (data (i32.const 304083) "a") (data (i32.const 304086) "a") (data (i32.const 304089) "a") (data (i32.const 304092) "a") (data (i32.const 304095) "a") (data (i32.const 304098) "a") (data (i32.const 304101) "a") (data (i32.const 304104) "a") (data (i32.const 304107) "a") (data (i32.const 304110) "a") (data (i32.const 304113) "a") (data (i32.const 304116) "a") (data (i32.const 304119) "a") (data (i32.const 304122) "a") (data (i32.const 304125) "a") (data (i32.const 304128) "a") (data (i32.const 304131) "a") (data (i32.const 304134) "a") (data (i32.const 304137) "a") (data (i32.const 304140) "a") (data (i32.const 304143) "a") (data (i32.const 304146) "a") (data (i32.const 304149) "a") (data (i32.const 304152) "a") (data (i32.const 304155) "a") (data (i32.const 304158) "a") (data (i32.const 304161) "a") (data (i32.const 304164) "a") (data (i32.const 304167) "a") (data (i32.const 304170) "a") (data (i32.const 304173) "a") (data (i32.const 304176) "a") (data (i32.const 304179) "a") (data (i32.const 304182) "a") (data (i32.const 304185) "a") (data (i32.const 304188) "a") (data (i32.const 304191) "a") (data (i32.const 304194) "a") (data (i32.const 304197) "a") (data (i32.const 304200) "a") (data (i32.const 304203) "a") (data (i32.const 304206) "a") (data (i32.const 304209) "a") (data (i32.const 304212) "a") (data (i32.const 304215) "a") (data (i32.const 304218) "a") (data (i32.const 304221) "a") (data (i32.const 304224) "a") (data (i32.const 304227) "a") (data (i32.const 304230) "a") (data (i32.const 304233) "a") (data (i32.const 304236) "a") (data (i32.const 304239) "a") (data (i32.const 304242) "a") (data (i32.const 304245) "a") (data (i32.const 304248) "a") (data (i32.const 304251) "a") (data (i32.const 304254) "a") (data (i32.const 304257) "a") (data (i32.const 304260) "a") (data (i32.const 304263) "a") (data (i32.const 304266) "a") (data (i32.const 304269) "a") (data (i32.const 304272) "a") (data (i32.const 304275) "a") (data (i32.const 304278) "a") (data (i32.const 304281) "a") (data (i32.const 304284) "a") (data (i32.const 304287) "a") (data (i32.const 304290) "a") (data (i32.const 304293) "a") (data (i32.const 304296) "a") (data (i32.const 304299) "a") (data (i32.const 304302) "a") (data (i32.const 304305) "a") (data (i32.const 304308) "a") (data (i32.const 304311) "a") (data (i32.const 304314) "a") (data (i32.const 304317) "a") (data (i32.const 304320) "a") (data (i32.const 304323) "a") (data (i32.const 304326) "a") (data (i32.const 304329) "a") (data (i32.const 304332) "a") (data (i32.const 304335) "a") (data (i32.const 304338) "a") (data (i32.const 304341) "a") (data (i32.const 304344) "a") (data (i32.const 304347) "a") (data (i32.const 304350) "a") (data (i32.const 304353) "a") (data (i32.const 304356) "a") (data (i32.const 304359) "a") (data (i32.const 304362) "a") (data (i32.const 304365) "a") (data (i32.const 304368) "a") (data (i32.const 304371) "a") (data (i32.const 304374) "a") (data (i32.const 304377) "a") (data (i32.const 304380) "a") (data (i32.const 304383) "a") (data (i32.const 304386) "a") (data (i32.const 304389) "a") (data (i32.const 304392) "a") (data (i32.const 304395) "a") (data (i32.const 304398) "a") (data (i32.const 304401) "a") (data (i32.const 304404) "a") (data (i32.const 304407) "a") (data (i32.const 304410) "a") (data (i32.const 304413) "a") (data (i32.const 304416) "a") (data (i32.const 304419) "a") (data (i32.const 304422) "a") (data (i32.const 304425) "a") (data (i32.const 304428) "a") (data (i32.const 304431) "a") (data (i32.const 304434) "a") (data (i32.const 304437) "a") (data (i32.const 304440) "a") (data (i32.const 304443) "a") (data (i32.const 304446) "a") (data (i32.const 304449) "a") (data (i32.const 304452) "a") (data (i32.const 304455) "a") (data (i32.const 304458) "a") (data (i32.const 304461) "a") (data (i32.const 304464) "a") (data (i32.const 304467) "a") (data (i32.const 304470) "a") (data (i32.const 304473) "a") (data (i32.const 304476) "a") (data (i32.const 304479) "a") (data (i32.const 304482) "a") (data (i32.const 304485) "a") (data (i32.const 304488) "a") (data (i32.const 304491) "a") (data (i32.const 304494) "a") (data (i32.const 304497) "a") (data (i32.const 304500) "a") (data (i32.const 304503) "a") (data (i32.const 304506) "a") (data (i32.const 304509) "a") (data (i32.const 304512) "a") (data (i32.const 304515) "a") (data (i32.const 304518) "a") (data (i32.const 304521) "a") (data (i32.const 304524) "a") (data (i32.const 304527) "a") (data (i32.const 304530) "a") (data (i32.const 304533) "a") (data (i32.const 304536) "a") (data (i32.const 304539) "a") (data (i32.const 304542) "a") (data (i32.const 304545) "a") (data (i32.const 304548) "a") (data (i32.const 304551) "a") (data (i32.const 304554) "a") (data (i32.const 304557) "a") (data (i32.const 304560) "a") (data (i32.const 304563) "a") (data (i32.const 304566) "a") (data (i32.const 304569) "a") (data (i32.const 304572) "a") (data (i32.const 304575) "a") (data (i32.const 304578) "a") (data (i32.const 304581) "a") (data (i32.const 304584) "a") (data (i32.const 304587) "a") (data (i32.const 304590) "a") (data (i32.const 304593) "a") (data (i32.const 304596) "a") (data (i32.const 304599) "a") (data (i32.const 304602) "a") (data (i32.const 304605) "a") (data (i32.const 304608) "a") (data (i32.const 304611) "a") (data (i32.const 304614) "a") (data (i32.const 304617) "a") (data (i32.const 304620) "a") (data (i32.const 304623) "a") (data (i32.const 304626) "a") (data (i32.const 304629) "a") (data (i32.const 304632) "a") (data (i32.const 304635) "a") (data (i32.const 304638) "a") (data (i32.const 304641) "a") (data (i32.const 304644) "a") (data (i32.const 304647) "a") (data (i32.const 304650) "a") (data (i32.const 304653) "a") (data (i32.const 304656) "a") (data (i32.const 304659) "a") (data (i32.const 304662) "a") (data (i32.const 304665) "a") (data (i32.const 304668) "a") (data (i32.const 304671) "a") (data (i32.const 304674) "a") (data (i32.const 304677) "a") (data (i32.const 304680) "a") (data (i32.const 304683) "a") (data (i32.const 304686) "a") (data (i32.const 304689) "a") (data (i32.const 304692) "a") (data (i32.const 304695) "a") (data (i32.const 304698) "a") (data (i32.const 304701) "a") (data (i32.const 304704) "a") (data (i32.const 304707) "a") (data (i32.const 304710) "a") (data (i32.const 304713) "a") (data (i32.const 304716) "a") (data (i32.const 304719) "a") (data (i32.const 304722) "a") (data (i32.const 304725) "a") (data (i32.const 304728) "a") (data (i32.const 304731) "a") (data (i32.const 304734) "a") (data (i32.const 304737) "a") (data (i32.const 304740) "a") (data (i32.const 304743) "a") (data (i32.const 304746) "a") (data (i32.const 304749) "a") (data (i32.const 304752) "a") (data (i32.const 304755) "a") (data (i32.const 304758) "a") (data (i32.const 304761) "a") (data (i32.const 304764) "a") (data (i32.const 304767) "a") (data (i32.const 304770) "a") (data (i32.const 304773) "a") (data (i32.const 304776) "a") (data (i32.const 304779) "a") (data (i32.const 304782) "a") (data (i32.const 304785) "a") (data (i32.const 304788) "a") (data (i32.const 304791) "a") (data (i32.const 304794) "a") (data (i32.const 304797) "a") (data (i32.const 304800) "a") (data (i32.const 304803) "a") (data (i32.const 304806) "a") (data (i32.const 304809) "a") (data (i32.const 304812) "a") (data (i32.const 304815) "a") (data (i32.const 304818) "a") (data (i32.const 304821) "a") (data (i32.const 304824) "a") (data (i32.const 304827) "a") (data (i32.const 304830) "a") (data (i32.const 304833) "a") (data (i32.const 304836) "a") (data (i32.const 304839) "a") (data (i32.const 304842) "a") (data (i32.const 304845) "a") (data (i32.const 304848) "a") (data (i32.const 304851) "a") (data (i32.const 304854) "a") (data (i32.const 304857) "a") (data (i32.const 304860) "a") (data (i32.const 304863) "a") (data (i32.const 304866) "a") (data (i32.const 304869) "a") (data (i32.const 304872) "a") (data (i32.const 304875) "a") (data (i32.const 304878) "a") (data (i32.const 304881) "a") (data (i32.const 304884) "a") (data (i32.const 304887) "a") (data (i32.const 304890) "a") (data (i32.const 304893) "a") (data (i32.const 304896) "a") (data (i32.const 304899) "a") (data (i32.const 304902) "a") (data (i32.const 304905) "a") (data (i32.const 304908) "a") (data (i32.const 304911) "a") (data (i32.const 304914) "a") (data (i32.const 304917) "a") (data (i32.const 304920) "a") (data (i32.const 304923) "a") (data (i32.const 304926) "a") (data (i32.const 304929) "a") (data (i32.const 304932) "a") (data (i32.const 304935) "a") (data (i32.const 304938) "a") (data (i32.const 304941) "a") (data (i32.const 304944) "a") (data (i32.const 304947) "a") (data (i32.const 304950) "a") (data (i32.const 304953) "a") (data (i32.const 304956) "a") (data (i32.const 304959) "a") (data (i32.const 304962) "a") (data (i32.const 304965) "a") (data (i32.const 304968) "a") (data (i32.const 304971) "a") (data (i32.const 304974) "a") (data (i32.const 304977) "a") (data (i32.const 304980) "a") (data (i32.const 304983) "a") (data (i32.const 304986) "a") (data (i32.const 304989) "a") (data (i32.const 304992) "a") (data (i32.const 304995) "a") (data (i32.const 304998) "a") (data (i32.const 305001) "a") (data (i32.const 305004) "a") (data (i32.const 305007) "a") (data (i32.const 305010) "a") (data (i32.const 305013) "a") (data (i32.const 305016) "a") (data (i32.const 305019) "a") (data (i32.const 305022) "a") (data (i32.const 305025) "a") (data (i32.const 305028) "a") (data (i32.const 305031) "a") (data (i32.const 305034) "a") (data (i32.const 305037) "a") (data (i32.const 305040) "a") (data (i32.const 305043) "a") (data (i32.const 305046) "a") (data (i32.const 305049) "a") (data (i32.const 305052) "a") (data (i32.const 305055) "a") (data (i32.const 305058) "a") (data (i32.const 305061) "a") (data (i32.const 305064) "a") (data (i32.const 305067) "a") (data (i32.const 305070) "a") (data (i32.const 305073) "a") (data (i32.const 305076) "a") (data (i32.const 305079) "a") (data (i32.const 305082) "a") (data (i32.const 305085) "a") (data (i32.const 305088) "a") (data (i32.const 305091) "a") (data (i32.const 305094) "a") (data (i32.const 305097) "a") (data (i32.const 305100) "a") (data (i32.const 305103) "a") (data (i32.const 305106) "a") (data (i32.const 305109) "a") (data (i32.const 305112) "a") (data (i32.const 305115) "a") (data (i32.const 305118) "a") (data (i32.const 305121) "a") (data (i32.const 305124) "a") (data (i32.const 305127) "a") (data (i32.const 305130) "a") (data (i32.const 305133) "a") (data (i32.const 305136) "a") (data (i32.const 305139) "a") (data (i32.const 305142) "a") (data (i32.const 305145) "a") (data (i32.const 305148) "a") (data (i32.const 305151) "a") (data (i32.const 305154) "a") (data (i32.const 305157) "a") (data (i32.const 305160) "a") (data (i32.const 305163) "a") (data (i32.const 305166) "a") (data (i32.const 305169) "a") (data (i32.const 305172) "a") (data (i32.const 305175) "a") (data (i32.const 305178) "a") (data (i32.const 305181) "a") (data (i32.const 305184) "a") (data (i32.const 305187) "a") (data (i32.const 305190) "a") (data (i32.const 305193) "a") (data (i32.const 305196) "a") (data (i32.const 305199) "a") (data (i32.const 305202) "a") (data (i32.const 305205) "a") (data (i32.const 305208) "a") (data (i32.const 305211) "a") (data (i32.const 305214) "a") (data (i32.const 305217) "a") (data (i32.const 305220) "a") (data (i32.const 305223) "a") (data (i32.const 305226) "a") (data (i32.const 305229) "a") (data (i32.const 305232) "a") (data (i32.const 305235) "a") (data (i32.const 305238) "a") (data (i32.const 305241) "a") (data (i32.const 305244) "a") (data (i32.const 305247) "a") (data (i32.const 305250) "a") (data (i32.const 305253) "a") (data (i32.const 305256) "a") (data (i32.const 305259) "a") (data (i32.const 305262) "a") (data (i32.const 305265) "a") (data (i32.const 305268) "a") (data (i32.const 305271) "a") (data (i32.const 305274) "a") (data (i32.const 305277) "a") (data (i32.const 305280) "a") (data (i32.const 305283) "a") (data (i32.const 305286) "a") (data (i32.const 305289) "a") (data (i32.const 305292) "a") (data (i32.const 305295) "a") (data (i32.const 305298) "a") (data (i32.const 305301) "a") (data (i32.const 305304) "a") (data (i32.const 305307) "a") (data (i32.const 305310) "a") (data (i32.const 305313) "a") (data (i32.const 305316) "a") (data (i32.const 305319) "a") (data (i32.const 305322) "a") (data (i32.const 305325) "a") (data (i32.const 305328) "a") (data (i32.const 305331) "a") (data (i32.const 305334) "a") (data (i32.const 305337) "a") (data (i32.const 305340) "a") (data (i32.const 305343) "a") (data (i32.const 305346) "a") (data (i32.const 305349) "a") (data (i32.const 305352) "a") (data (i32.const 305355) "a") (data (i32.const 305358) "a") (data (i32.const 305361) "a") (data (i32.const 305364) "a") (data (i32.const 305367) "a") (data (i32.const 305370) "a") (data (i32.const 305373) "a") (data (i32.const 305376) "a") (data (i32.const 305379) "a") (data (i32.const 305382) "a") (data (i32.const 305385) "a") (data (i32.const 305388) "a") (data (i32.const 305391) "a") (data (i32.const 305394) "a") (data (i32.const 305397) "a") (data (i32.const 305400) "a") (data (i32.const 305403) "a") (data (i32.const 305406) "a") (data (i32.const 305409) "a") (data (i32.const 305412) "a") (data (i32.const 305415) "a") (data (i32.const 305418) "a") (data (i32.const 305421) "a") (data (i32.const 305424) "a") (data (i32.const 305427) "a") (data (i32.const 305430) "a") (data (i32.const 305433) "a") (data (i32.const 305436) "a") (data (i32.const 305439) "a") (data (i32.const 305442) "a") (data (i32.const 305445) "a") (data (i32.const 305448) "a") (data (i32.const 305451) "a") (data (i32.const 305454) "a") (data (i32.const 305457) "a") (data (i32.const 305460) "a") (data (i32.const 305463) "a") (data (i32.const 305466) "a") (data (i32.const 305469) "a") (data (i32.const 305472) "a") (data (i32.const 305475) "a") (data (i32.const 305478) "a") (data (i32.const 305481) "a") (data (i32.const 305484) "a") (data (i32.const 305487) "a") (data (i32.const 305490) "a") (data (i32.const 305493) "a") (data (i32.const 305496) "a") (data (i32.const 305499) "a") (data (i32.const 305502) "a") (data (i32.const 305505) "a") (data (i32.const 305508) "a") (data (i32.const 305511) "a") (data (i32.const 305514) "a") (data (i32.const 305517) "a") (data (i32.const 305520) "a") (data (i32.const 305523) "a") (data (i32.const 305526) "a") (data (i32.const 305529) "a") (data (i32.const 305532) "a") (data (i32.const 305535) "a") (data (i32.const 305538) "a") (data (i32.const 305541) "a") (data (i32.const 305544) "a") (data (i32.const 305547) "a") (data (i32.const 305550) "a") (data (i32.const 305553) "a") (data (i32.const 305556) "a") (data (i32.const 305559) "a") (data (i32.const 305562) "a") (data (i32.const 305565) "a") (data (i32.const 305568) "a") (data (i32.const 305571) "a") (data (i32.const 305574) "a") (data (i32.const 305577) "a") (data (i32.const 305580) "a") (data (i32.const 305583) "a") (data (i32.const 305586) "a") (data (i32.const 305589) "a") (data (i32.const 305592) "a") (data (i32.const 305595) "a") (data (i32.const 305598) "a") (data (i32.const 305601) "a") (data (i32.const 305604) "a") (data (i32.const 305607) "a") (data (i32.const 305610) "a") (data (i32.const 305613) "a") (data (i32.const 305616) "a") (data (i32.const 305619) "a") (data (i32.const 305622) "a") (data (i32.const 305625) "a") (data (i32.const 305628) "a") (data (i32.const 305631) "a") (data (i32.const 305634) "a") (data (i32.const 305637) "a") (data (i32.const 305640) "a") (data (i32.const 305643) "a") (data (i32.const 305646) "a") (data (i32.const 305649) "a") (data (i32.const 305652) "a") (data (i32.const 305655) "a") (data (i32.const 305658) "a") (data (i32.const 305661) "a") (data (i32.const 305664) "a") (data (i32.const 305667) "a") (data (i32.const 305670) "a") (data (i32.const 305673) "a") (data (i32.const 305676) "a") (data (i32.const 305679) "a") (data (i32.const 305682) "a") (data (i32.const 305685) "a") (data (i32.const 305688) "a") (data (i32.const 305691) "a") (data (i32.const 305694) "a") (data (i32.const 305697) "a") (data (i32.const 305700) "a") (data (i32.const 305703) "a") (data (i32.const 305706) "a") (data (i32.const 305709) "a") (data (i32.const 305712) "a") (data (i32.const 305715) "a") (data (i32.const 305718) "a") (data (i32.const 305721) "a") (data (i32.const 305724) "a") (data (i32.const 305727) "a") (data (i32.const 305730) "a") (data (i32.const 305733) "a") (data (i32.const 305736) "a") (data (i32.const 305739) "a") (data (i32.const 305742) "a") (data (i32.const 305745) "a") (data (i32.const 305748) "a") (data (i32.const 305751) "a") (data (i32.const 305754) "a") (data (i32.const 305757) "a") (data (i32.const 305760) "a") (data (i32.const 305763) "a") (data (i32.const 305766) "a") (data (i32.const 305769) "a") (data (i32.const 305772) "a") (data (i32.const 305775) "a") (data (i32.const 305778) "a") (data (i32.const 305781) "a") (data (i32.const 305784) "a") (data (i32.const 305787) "a") (data (i32.const 305790) "a") (data (i32.const 305793) "a") (data (i32.const 305796) "a") (data (i32.const 305799) "a") (data (i32.const 305802) "a") (data (i32.const 305805) "a") (data (i32.const 305808) "a") (data (i32.const 305811) "a") (data (i32.const 305814) "a") (data (i32.const 305817) "a") (data (i32.const 305820) "a") (data (i32.const 305823) "a") (data (i32.const 305826) "a") (data (i32.const 305829) "a") (data (i32.const 305832) "a") (data (i32.const 305835) "a") (data (i32.const 305838) "a") (data (i32.const 305841) "a") (data (i32.const 305844) "a") (data (i32.const 305847) "a") (data (i32.const 305850) "a") (data (i32.const 305853) "a") (data (i32.const 305856) "a") (data (i32.const 305859) "a") (data (i32.const 305862) "a") (data (i32.const 305865) "a") (data (i32.const 305868) "a") (data (i32.const 305871) "a") (data (i32.const 305874) "a") (data (i32.const 305877) "a") (data (i32.const 305880) "a") (data (i32.const 305883) "a") (data (i32.const 305886) "a") (data (i32.const 305889) "a") (data (i32.const 305892) "a") (data (i32.const 305895) "a") (data (i32.const 305898) "a") (data (i32.const 305901) "a") (data (i32.const 305904) "a") (data (i32.const 305907) "a") (data (i32.const 305910) "a") (data (i32.const 305913) "a") (data (i32.const 305916) "a") (data (i32.const 305919) "a") (data (i32.const 305922) "a") (data (i32.const 305925) "a") (data (i32.const 305928) "a") (data (i32.const 305931) "a") (data (i32.const 305934) "a") (data (i32.const 305937) "a") (data (i32.const 305940) "a") (data (i32.const 305943) "a") (data (i32.const 305946) "a") (data (i32.const 305949) "a") (data (i32.const 305952) "a") (data (i32.const 305955) "a") (data (i32.const 305958) "a") (data (i32.const 305961) "a") (data (i32.const 305964) "a") (data (i32.const 305967) "a") (data (i32.const 305970) "a") (data (i32.const 305973) "a") (data (i32.const 305976) "a") (data (i32.const 305979) "a") (data (i32.const 305982) "a") (data (i32.const 305985) "a") (data (i32.const 305988) "a") (data (i32.const 305991) "a") (data (i32.const 305994) "a") (data (i32.const 305997) "a") (data (i32.const 306000) "a") (data (i32.const 306003) "a") (data (i32.const 306006) "a") (data (i32.const 306009) "a") (data (i32.const 306012) "a") (data (i32.const 306015) "a") (data (i32.const 306018) "a") (data (i32.const 306021) "a") (data (i32.const 306024) "a") (data (i32.const 306027) "a") (data (i32.const 306030) "a") (data (i32.const 306033) "a") (data (i32.const 306036) "a") (data (i32.const 306039) "a") (data (i32.const 306042) "a") (data (i32.const 306045) "a") (data (i32.const 306048) "a") (data (i32.const 306051) "a") (data (i32.const 306054) "a") (data (i32.const 306057) "a") (data (i32.const 306060) "a") (data (i32.const 306063) "a") (data (i32.const 306066) "a") (data (i32.const 306069) "a") (data (i32.const 306072) "a") (data (i32.const 306075) "a") (data (i32.const 306078) "a") (data (i32.const 306081) "a") (data (i32.const 306084) "a") (data (i32.const 306087) "a") (data (i32.const 306090) "a") (data (i32.const 306093) "a") (data (i32.const 306096) "a") (data (i32.const 306099) "a") (data (i32.const 306102) "a") (data (i32.const 306105) "a") (data (i32.const 306108) "a") (data (i32.const 306111) "a") (data (i32.const 306114) "a") (data (i32.const 306117) "a") (data (i32.const 306120) "a") (data (i32.const 306123) "a") (data (i32.const 306126) "a") (data (i32.const 306129) "a") (data (i32.const 306132) "a") (data (i32.const 306135) "a") (data (i32.const 306138) "a") (data (i32.const 306141) "a") (data (i32.const 306144) "a") (data (i32.const 306147) "a") (data (i32.const 306150) "a") (data (i32.const 306153) "a") (data (i32.const 306156) "a") (data (i32.const 306159) "a") (data (i32.const 306162) "a") (data (i32.const 306165) "a") (data (i32.const 306168) "a") (data (i32.const 306171) "a") (data (i32.const 306174) "a") (data (i32.const 306177) "a") (data (i32.const 306180) "a") (data (i32.const 306183) "a") (data (i32.const 306186) "a") (data (i32.const 306189) "a") (data (i32.const 306192) "a") (data (i32.const 306195) "a") (data (i32.const 306198) "a") (data (i32.const 306201) "a") (data (i32.const 306204) "a") (data (i32.const 306207) "a") (data (i32.const 306210) "a") (data (i32.const 306213) "a") (data (i32.const 306216) "a") (data (i32.const 306219) "a") (data (i32.const 306222) "a") (data (i32.const 306225) "a") (data (i32.const 306228) "a") (data (i32.const 306231) "a") (data (i32.const 306234) "a") (data (i32.const 306237) "a") (data (i32.const 306240) "a") (data (i32.const 306243) "a") (data (i32.const 306246) "a") (data (i32.const 306249) "a") (data (i32.const 306252) "a") (data (i32.const 306255) "a") (data (i32.const 306258) "a") (data (i32.const 306261) "a") (data (i32.const 306264) "a") (data (i32.const 306267) "a") (data (i32.const 306270) "a") (data (i32.const 306273) "a") (data (i32.const 306276) "a") (data (i32.const 306279) "a") (data (i32.const 306282) "a") (data (i32.const 306285) "a") (data (i32.const 306288) "a") (data (i32.const 306291) "a") (data (i32.const 306294) "a") (data (i32.const 306297) "a") (data (i32.const 306300) "a") (data (i32.const 306303) "a") (data (i32.const 306306) "a") (data (i32.const 306309) "a") (data (i32.const 306312) "a") (data (i32.const 306315) "a") (data (i32.const 306318) "a") (data (i32.const 306321) "a") (data (i32.const 306324) "a") (data (i32.const 306327) "a") (data (i32.const 306330) "a") (data (i32.const 306333) "a") (data (i32.const 306336) "a") (data (i32.const 306339) "a") (data (i32.const 306342) "a") (data (i32.const 306345) "a") (data (i32.const 306348) "a") (data (i32.const 306351) "a") (data (i32.const 306354) "a") (data (i32.const 306357) "a") (data (i32.const 306360) "a") (data (i32.const 306363) "a") (data (i32.const 306366) "a") (data (i32.const 306369) "a") (data (i32.const 306372) "a") (data (i32.const 306375) "a") (data (i32.const 306378) "a") (data (i32.const 306381) "a") (data (i32.const 306384) "a") (data (i32.const 306387) "a") (data (i32.const 306390) "a") (data (i32.const 306393) "a") (data (i32.const 306396) "a") (data (i32.const 306399) "a") (data (i32.const 306402) "a") (data (i32.const 306405) "a") (data (i32.const 306408) "a") (data (i32.const 306411) "a") (data (i32.const 306414) "a") (data (i32.const 306417) "a") (data (i32.const 306420) "a") (data (i32.const 306423) "a") (data (i32.const 306426) "a") (data (i32.const 306429) "a") (data (i32.const 306432) "a") (data (i32.const 306435) "a") (data (i32.const 306438) "a") (data (i32.const 306441) "a") (data (i32.const 306444) "a") (data (i32.const 306447) "a") (data (i32.const 306450) "a") (data (i32.const 306453) "a") (data (i32.const 306456) "a") (data (i32.const 306459) "a") (data (i32.const 306462) "a") (data (i32.const 306465) "a") (data (i32.const 306468) "a") (data (i32.const 306471) "a") (data (i32.const 306474) "a") (data (i32.const 306477) "a") (data (i32.const 306480) "a") (data (i32.const 306483) "a") (data (i32.const 306486) "a") (data (i32.const 306489) "a") (data (i32.const 306492) "a") (data (i32.const 306495) "a") (data (i32.const 306498) "a") (data (i32.const 306501) "a") (data (i32.const 306504) "a") (data (i32.const 306507) "a") (data (i32.const 306510) "a") (data (i32.const 306513) "a") (data (i32.const 306516) "a") (data (i32.const 306519) "a") (data (i32.const 306522) "a") (data (i32.const 306525) "a") (data (i32.const 306528) "a") (data (i32.const 306531) "a") (data (i32.const 306534) "a") (data (i32.const 306537) "a") (data (i32.const 306540) "a") (data (i32.const 306543) "a") (data (i32.const 306546) "a") (data (i32.const 306549) "a") (data (i32.const 306552) "a") (data (i32.const 306555) "a") (data (i32.const 306558) "a") (data (i32.const 306561) "a") (data (i32.const 306564) "a") (data (i32.const 306567) "a") (data (i32.const 306570) "a") (data (i32.const 306573) "a") (data (i32.const 306576) "a") (data (i32.const 306579) "a") (data (i32.const 306582) "a") (data (i32.const 306585) "a") (data (i32.const 306588) "a") (data (i32.const 306591) "a") (data (i32.const 306594) "a") (data (i32.const 306597) "a") (data (i32.const 306600) "a") (data (i32.const 306603) "a") (data (i32.const 306606) "a") (data (i32.const 306609) "a") (data (i32.const 306612) "a") (data (i32.const 306615) "a") (data (i32.const 306618) "a") (data (i32.const 306621) "a") (data (i32.const 306624) "a") (data (i32.const 306627) "a") (data (i32.const 306630) "a") (data (i32.const 306633) "a") (data (i32.const 306636) "a") (data (i32.const 306639) "a") (data (i32.const 306642) "a") (data (i32.const 306645) "a") (data (i32.const 306648) "a") (data (i32.const 306651) "a") (data (i32.const 306654) "a") (data (i32.const 306657) "a") (data (i32.const 306660) "a") (data (i32.const 306663) "a") (data (i32.const 306666) "a") (data (i32.const 306669) "a") (data (i32.const 306672) "a") (data (i32.const 306675) "a") (data (i32.const 306678) "a") (data (i32.const 306681) "a") (data (i32.const 306684) "a") (data (i32.const 306687) "a") (data (i32.const 306690) "a") (data (i32.const 306693) "a") (data (i32.const 306696) "a") (data (i32.const 306699) "a") (data (i32.const 306702) "a") (data (i32.const 306705) "a") (data (i32.const 306708) "a") (data (i32.const 306711) "a") (data (i32.const 306714) "a") (data (i32.const 306717) "a") (data (i32.const 306720) "a") (data (i32.const 306723) "a") (data (i32.const 306726) "a") (data (i32.const 306729) "a") (data (i32.const 306732) "a") (data (i32.const 306735) "a") (data (i32.const 306738) "a") (data (i32.const 306741) "a") (data (i32.const 306744) "a") (data (i32.const 306747) "a") (data (i32.const 306750) "a") (data (i32.const 306753) "a") (data (i32.const 306756) "a") (data (i32.const 306759) "a") (data (i32.const 306762) "a") (data (i32.const 306765) "a") (data (i32.const 306768) "a") (data (i32.const 306771) "a") (data (i32.const 306774) "a") (data (i32.const 306777) "a") (data (i32.const 306780) "a") (data (i32.const 306783) "a") (data (i32.const 306786) "a") (data (i32.const 306789) "a") (data (i32.const 306792) "a") (data (i32.const 306795) "a") (data (i32.const 306798) "a") (data (i32.const 306801) "a") (data (i32.const 306804) "a") (data (i32.const 306807) "a") (data (i32.const 306810) "a") (data (i32.const 306813) "a") (data (i32.const 306816) "a") (data (i32.const 306819) "a") (data (i32.const 306822) "a") (data (i32.const 306825) "a") (data (i32.const 306828) "a") (data (i32.const 306831) "a") (data (i32.const 306834) "a") (data (i32.const 306837) "a") (data (i32.const 306840) "a") (data (i32.const 306843) "a") (data (i32.const 306846) "a") (data (i32.const 306849) "a") (data (i32.const 306852) "a") (data (i32.const 306855) "a") (data (i32.const 306858) "a") (data (i32.const 306861) "a") (data (i32.const 306864) "a") (data (i32.const 306867) "a") (data (i32.const 306870) "a") (data (i32.const 306873) "a") (data (i32.const 306876) "a") (data (i32.const 306879) "a") (data (i32.const 306882) "a") (data (i32.const 306885) "a") (data (i32.const 306888) "a") (data (i32.const 306891) "a") (data (i32.const 306894) "a") (data (i32.const 306897) "a") (data (i32.const 306900) "a") (data (i32.const 306903) "a") (data (i32.const 306906) "a") (data (i32.const 306909) "a") (data (i32.const 306912) "a") (data (i32.const 306915) "a") (data (i32.const 306918) "a") (data (i32.const 306921) "a") (data (i32.const 306924) "a") (data (i32.const 306927) "a") (data (i32.const 306930) "a") (data (i32.const 306933) "a") (data (i32.const 306936) "a") (data (i32.const 306939) "a") (data (i32.const 306942) "a") (data (i32.const 306945) "a") (data (i32.const 306948) "a") (data (i32.const 306951) "a") (data (i32.const 306954) "a") (data (i32.const 306957) "a") (data (i32.const 306960) "a") (data (i32.const 306963) "a") (data (i32.const 306966) "a") (data (i32.const 306969) "a") (data (i32.const 306972) "a") (data (i32.const 306975) "a") (data (i32.const 306978) "a") (data (i32.const 306981) "a") (data (i32.const 306984) "a") (data (i32.const 306987) "a") (data (i32.const 306990) "a") (data (i32.const 306993) "a") (data (i32.const 306996) "a") (data (i32.const 306999) "a") (data (i32.const 307002) "a") (data (i32.const 307005) "a") (data (i32.const 307008) "a") (data (i32.const 307011) "a") (data (i32.const 307014) "a") (data (i32.const 307017) "a") (data (i32.const 307020) "a") (data (i32.const 307023) "a") (data (i32.const 307026) "a") (data (i32.const 307029) "a") (data (i32.const 307032) "a") (data (i32.const 307035) "a") (data (i32.const 307038) "a") (data (i32.const 307041) "a") (data (i32.const 307044) "a") (data (i32.const 307047) "a") (data (i32.const 307050) "a") (data (i32.const 307053) "a") (data (i32.const 307056) "a") (data (i32.const 307059) "a") (data (i32.const 307062) "a") (data (i32.const 307065) "a") (data (i32.const 307068) "a") (data (i32.const 307071) "a") (data (i32.const 307074) "a") (data (i32.const 307077) "a") (data (i32.const 307080) "a") (data (i32.const 307083) "a") (data (i32.const 307086) "a") (data (i32.const 307089) "a") (data (i32.const 307092) "a") (data (i32.const 307095) "a") (data (i32.const 307098) "a") (data (i32.const 307101) "a") (data (i32.const 307104) "a") (data (i32.const 307107) "a") (data (i32.const 307110) "a") (data (i32.const 307113) "a") (data (i32.const 307116) "a") (data (i32.const 307119) "a") (data (i32.const 307122) "a") (data (i32.const 307125) "a") (data (i32.const 307128) "a") (data (i32.const 307131) "a") (data (i32.const 307134) "a") (data (i32.const 307137) "a") (data (i32.const 307140) "a") (data (i32.const 307143) "a") (data (i32.const 307146) "a") (data (i32.const 307149) "a") (data (i32.const 307152) "a") (data (i32.const 307155) "a") (data (i32.const 307158) "a") (data (i32.const 307161) "a") (data (i32.const 307164) "a") (data (i32.const 307167) "a") (data (i32.const 307170) "a") (data (i32.const 307173) "a") (data (i32.const 307176) "a") (data (i32.const 307179) "a") (data (i32.const 307182) "a") (data (i32.const 307185) "a") (data (i32.const 307188) "a") (data (i32.const 307191) "a") (data (i32.const 307194) "a") (data (i32.const 307197) "a") (data (i32.const 307200) "a") (data (i32.const 307203) "a") (data (i32.const 307206) "a") (data (i32.const 307209) "a") (data (i32.const 307212) "a") (data (i32.const 307215) "a") (data (i32.const 307218) "a") (data (i32.const 307221) "a") (data (i32.const 307224) "a") (data (i32.const 307227) "a") (data (i32.const 307230) "a") (data (i32.const 307233) "a") (data (i32.const 307236) "a") (data (i32.const 307239) "a") (data (i32.const 307242) "a") (data (i32.const 307245) "a") (data (i32.const 307248) "a") (data (i32.const 307251) "a") (data (i32.const 307254) "a") (data (i32.const 307257) "a") (data (i32.const 307260) "a") (data (i32.const 307263) "a") (data (i32.const 307266) "a") (data (i32.const 307269) "a") (data (i32.const 307272) "a") (data (i32.const 307275) "a") (data (i32.const 307278) "a") (data (i32.const 307281) "a") (data (i32.const 307284) "a") (data (i32.const 307287) "a") (data (i32.const 307290) "a") (data (i32.const 307293) "a") (data (i32.const 307296) "a") (data (i32.const 307299) "a") (data (i32.const 307302) "a") (data (i32.const 307305) "a") (data (i32.const 307308) "a") (data (i32.const 307311) "a") (data (i32.const 307314) "a") (data (i32.const 307317) "a") (data (i32.const 307320) "a") (data (i32.const 307323) "a") (data (i32.const 307326) "a") (data (i32.const 307329) "a") (data (i32.const 307332) "a") (data (i32.const 307335) "a") (data (i32.const 307338) "a") (data (i32.const 307341) "a") (data (i32.const 307344) "a") (data (i32.const 307347) "a") (data (i32.const 307350) "a") (data (i32.const 307353) "a") (data (i32.const 307356) "a") (data (i32.const 307359) "a") (data (i32.const 307362) "a") (data (i32.const 307365) "a") (data (i32.const 307368) "a") (data (i32.const 307371) "a") (data (i32.const 307374) "a") (data (i32.const 307377) "a") (data (i32.const 307380) "a") (data (i32.const 307383) "a") (data (i32.const 307386) "a") (data (i32.const 307389) "a") (data (i32.const 307392) "a") (data (i32.const 307395) "a") (data (i32.const 307398) "a") (data (i32.const 307401) "a") (data (i32.const 307404) "a") (data (i32.const 307407) "a") (data (i32.const 307410) "a") (data (i32.const 307413) "a") (data (i32.const 307416) "a") (data (i32.const 307419) "a") (data (i32.const 307422) "a") (data (i32.const 307425) "a") (data (i32.const 307428) "a") (data (i32.const 307431) "a") (data (i32.const 307434) "a") (data (i32.const 307437) "a") (data (i32.const 307440) "a") (data (i32.const 307443) "a") (data (i32.const 307446) "a") (data (i32.const 307449) "a") (data (i32.const 307452) "a") (data (i32.const 307455) "a") (data (i32.const 307458) "a") (data (i32.const 307461) "a") (data (i32.const 307464) "a") (data (i32.const 307467) "a") (data (i32.const 307470) "a") (data (i32.const 307473) "a") (data (i32.const 307476) "a") (data (i32.const 307479) "a") (data (i32.const 307482) "a") (data (i32.const 307485) "a") (data (i32.const 307488) "a") (data (i32.const 307491) "a") (data (i32.const 307494) "a") (data (i32.const 307497) "a") (data (i32.const 307500) "a") (data (i32.const 307503) "a") (data (i32.const 307506) "a") (data (i32.const 307509) "a") (data (i32.const 307512) "a") (data (i32.const 307515) "a") (data (i32.const 307518) "a") (data (i32.const 307521) "a") (data (i32.const 307524) "a") (data (i32.const 307527) "a") (data (i32.const 307530) "a") (data (i32.const 307533) "a") (data (i32.const 307536) "a") (data (i32.const 307539) "a") (data (i32.const 307542) "a") (data (i32.const 307545) "a") (data (i32.const 307548) "a") (data (i32.const 307551) "a") (data (i32.const 307554) "a") (data (i32.const 307557) "a") (data (i32.const 307560) "a") (data (i32.const 307563) "a") (data (i32.const 307566) "a") (data (i32.const 307569) "a") (data (i32.const 307572) "a") (data (i32.const 307575) "a") (data (i32.const 307578) "a") (data (i32.const 307581) "a") (data (i32.const 307584) "a") (data (i32.const 307587) "a") (data (i32.const 307590) "a") (data (i32.const 307593) "a") (data (i32.const 307596) "a") (data (i32.const 307599) "a") (data (i32.const 307602) "a") (data (i32.const 307605) "a") (data (i32.const 307608) "a") (data (i32.const 307611) "a") (data (i32.const 307614) "a") (data (i32.const 307617) "a") (data (i32.const 307620) "a") (data (i32.const 307623) "a") (data (i32.const 307626) "a") (data (i32.const 307629) "a") (data (i32.const 307632) "a") (data (i32.const 307635) "a") (data (i32.const 307638) "a") (data (i32.const 307641) "a") (data (i32.const 307644) "a") (data (i32.const 307647) "a") (data (i32.const 307650) "a") (data (i32.const 307653) "a") (data (i32.const 307656) "a") (data (i32.const 307659) "a") (data (i32.const 307662) "a") (data (i32.const 307665) "a") (data (i32.const 307668) "a") (data (i32.const 307671) "a") (data (i32.const 307674) "a") (data (i32.const 307677) "a") (data (i32.const 307680) "a") (data (i32.const 307683) "a") (data (i32.const 307686) "a") (data (i32.const 307689) "a") (data (i32.const 307692) "a") (data (i32.const 307695) "a") (data (i32.const 307698) "a") (data (i32.const 307701) "a") (data (i32.const 307704) "a") (data (i32.const 307707) "a") (data (i32.const 307710) "a") (data (i32.const 307713) "a") (data (i32.const 307716) "a") (data (i32.const 307719) "a") (data (i32.const 307722) "a") (data (i32.const 307725) "a") (data (i32.const 307728) "a") (data (i32.const 307731) "a") (data (i32.const 307734) "a") (data (i32.const 307737) "a") (data (i32.const 307740) "a") (data (i32.const 307743) "a") (data (i32.const 307746) "a") (data (i32.const 307749) "a") (data (i32.const 307752) "a") (data (i32.const 307755) "a") (data (i32.const 307758) "a") (data (i32.const 307761) "a") (data (i32.const 307764) "a") (data (i32.const 307767) "a") (data (i32.const 307770) "a") (data (i32.const 307773) "a") (data (i32.const 307776) "a") (data (i32.const 307779) "a") (data (i32.const 307782) "a") (data (i32.const 307785) "a") (data (i32.const 307788) "a") (data (i32.const 307791) "a") (data (i32.const 307794) "a") (data (i32.const 307797) "a") (data (i32.const 307800) "a") (data (i32.const 307803) "a") (data (i32.const 307806) "a") (data (i32.const 307809) "a") (data (i32.const 307812) "a") (data (i32.const 307815) "a") (data (i32.const 307818) "a") (data (i32.const 307821) "a") (data (i32.const 307824) "a") (data (i32.const 307827) "a") (data (i32.const 307830) "a") (data (i32.const 307833) "a") (data (i32.const 307836) "a") (data (i32.const 307839) "a") (data (i32.const 307842) "a") (data (i32.const 307845) "a") (data (i32.const 307848) "a") (data (i32.const 307851) "a") (data (i32.const 307854) "a") (data (i32.const 307857) "a") (data (i32.const 307860) "a") (data (i32.const 307863) "a") (data (i32.const 307866) "a") (data (i32.const 307869) "a") (data (i32.const 307872) "a") (data (i32.const 307875) "a") (data (i32.const 307878) "a") (data (i32.const 307881) "a") (data (i32.const 307884) "a") (data (i32.const 307887) "a") (data (i32.const 307890) "a") (data (i32.const 307893) "a") (data (i32.const 307896) "a") (data (i32.const 307899) "a") (data (i32.const 307902) "a") (data (i32.const 307905) "a") (data (i32.const 307908) "a") (data (i32.const 307911) "a") (data (i32.const 307914) "a") (data (i32.const 307917) "a") (data (i32.const 307920) "a") (data (i32.const 307923) "a") (data (i32.const 307926) "a") (data (i32.const 307929) "a") (data (i32.const 307932) "a") (data (i32.const 307935) "a") (data (i32.const 307938) "a") (data (i32.const 307941) "a") (data (i32.const 307944) "a") (data (i32.const 307947) "a") (data (i32.const 307950) "a") (data (i32.const 307953) "a") (data (i32.const 307956) "a") (data (i32.const 307959) "a") (data (i32.const 307962) "a") (data (i32.const 307965) "a") (data (i32.const 307968) "a") (data (i32.const 307971) "a") (data (i32.const 307974) "a") (data (i32.const 307977) "a") (data (i32.const 307980) "a") (data (i32.const 307983) "a") (data (i32.const 307986) "a") (data (i32.const 307989) "a") (data (i32.const 307992) "a") (data (i32.const 307995) "a") (data (i32.const 307998) "a") (data (i32.const 308001) "a") (data (i32.const 308004) "a") (data (i32.const 308007) "a") (data (i32.const 308010) "a") (data (i32.const 308013) "a") (data (i32.const 308016) "a") (data (i32.const 308019) "a") (data (i32.const 308022) "a") (data (i32.const 308025) "a") (data (i32.const 308028) "a") (data (i32.const 308031) "a") (data (i32.const 308034) "a") (data (i32.const 308037) "a") (data (i32.const 308040) "a") (data (i32.const 308043) "a") (data (i32.const 308046) "a") (data (i32.const 308049) "a") (data (i32.const 308052) "a") (data (i32.const 308055) "a") (data (i32.const 308058) "a") (data (i32.const 308061) "a") (data (i32.const 308064) "a") (data (i32.const 308067) "a") (data (i32.const 308070) "a") (data (i32.const 308073) "a") (data (i32.const 308076) "a") (data (i32.const 308079) "a") (data (i32.const 308082) "a") (data (i32.const 308085) "a") (data (i32.const 308088) "a") (data (i32.const 308091) "a") (data (i32.const 308094) "a") (data (i32.const 308097) "a") (data (i32.const 308100) "a") (data (i32.const 308103) "a") (data (i32.const 308106) "a") (data (i32.const 308109) "a") (data (i32.const 308112) "a") (data (i32.const 308115) "a") (data (i32.const 308118) "a") (data (i32.const 308121) "a") (data (i32.const 308124) "a") (data (i32.const 308127) "a") (data (i32.const 308130) "a") (data (i32.const 308133) "a") (data (i32.const 308136) "a") (data (i32.const 308139) "a") (data (i32.const 308142) "a") (data (i32.const 308145) "a") (data (i32.const 308148) "a") (data (i32.const 308151) "a") (data (i32.const 308154) "a") (data (i32.const 308157) "a") (data (i32.const 308160) "a") (data (i32.const 308163) "a") (data (i32.const 308166) "a") (data (i32.const 308169) "a") (data (i32.const 308172) "a") (data (i32.const 308175) "a") (data (i32.const 308178) "a") (data (i32.const 308181) "a") (data (i32.const 308184) "a") (data (i32.const 308187) "a") (data (i32.const 308190) "a") (data (i32.const 308193) "a") (data (i32.const 308196) "a") (data (i32.const 308199) "a") (data (i32.const 308202) "a") (data (i32.const 308205) "a") (data (i32.const 308208) "a") (data (i32.const 308211) "a") (data (i32.const 308214) "a") (data (i32.const 308217) "a") (data (i32.const 308220) "a") (data (i32.const 308223) "a") (data (i32.const 308226) "a") (data (i32.const 308229) "a") (data (i32.const 308232) "a") (data (i32.const 308235) "a") (data (i32.const 308238) "a") (data (i32.const 308241) "a") (data (i32.const 308244) "a") (data (i32.const 308247) "a") (data (i32.const 308250) "a") (data (i32.const 308253) "a") (data (i32.const 308256) "a") (data (i32.const 308259) "a") (data (i32.const 308262) "a") (data (i32.const 308265) "a") (data (i32.const 308268) "a") (data (i32.const 308271) "a") (data (i32.const 308274) "a") (data (i32.const 308277) "a") (data (i32.const 308280) "a") (data (i32.const 308283) "a") (data (i32.const 308286) "a") (data (i32.const 308289) "a") (data (i32.const 308292) "a") (data (i32.const 308295) "a") (data (i32.const 308298) "a") (data (i32.const 308301) "a") (data (i32.const 308304) "a") (data (i32.const 308307) "a") (data (i32.const 308310) "a") (data (i32.const 308313) "a") (data (i32.const 308316) "a") (data (i32.const 308319) "a") (data (i32.const 308322) "a") (data (i32.const 308325) "a") (data (i32.const 308328) "a") (data (i32.const 308331) "a") (data (i32.const 308334) "a") (data (i32.const 308337) "a") (data (i32.const 308340) "a") (data (i32.const 308343) "a") (data (i32.const 308346) "a") (data (i32.const 308349) "a") (data (i32.const 308352) "a") (data (i32.const 308355) "a") (data (i32.const 308358) "a") (data (i32.const 308361) "a") (data (i32.const 308364) "a") (data (i32.const 308367) "a") (data (i32.const 308370) "a") (data (i32.const 308373) "a") (data (i32.const 308376) "a") (data (i32.const 308379) "a") (data (i32.const 308382) "a") (data (i32.const 308385) "a") (data (i32.const 308388) "a") (data (i32.const 308391) "a") (data (i32.const 308394) "a") (data (i32.const 308397) "a") (data (i32.const 308400) "a") (data (i32.const 308403) "a") (data (i32.const 308406) "a") (data (i32.const 308409) "a") (data (i32.const 308412) "a") (data (i32.const 308415) "a") (data (i32.const 308418) "a") (data (i32.const 308421) "a") (data (i32.const 308424) "a") (data (i32.const 308427) "a") (data (i32.const 308430) "a") (data (i32.const 308433) "a") (data (i32.const 308436) "a") (data (i32.const 308439) "a") (data (i32.const 308442) "a") (data (i32.const 308445) "a") (data (i32.const 308448) "a") (data (i32.const 308451) "a") (data (i32.const 308454) "a") (data (i32.const 308457) "a") (data (i32.const 308460) "a") (data (i32.const 308463) "a") (data (i32.const 308466) "a") (data (i32.const 308469) "a") (data (i32.const 308472) "a") (data (i32.const 308475) "a") (data (i32.const 308478) "a") (data (i32.const 308481) "a") (data (i32.const 308484) "a") (data (i32.const 308487) "a") (data (i32.const 308490) "a") (data (i32.const 308493) "a") (data (i32.const 308496) "a") (data (i32.const 308499) "a") (data (i32.const 308502) "a") (data (i32.const 308505) "a") (data (i32.const 308508) "a") (data (i32.const 308511) "a") (data (i32.const 308514) "a") (data (i32.const 308517) "a") (data (i32.const 308520) "a") (data (i32.const 308523) "a") (data (i32.const 308526) "a") (data (i32.const 308529) "a") (data (i32.const 308532) "a") (data (i32.const 308535) "a") (data (i32.const 308538) "a") (data (i32.const 308541) "a") (data (i32.const 308544) "a") (data (i32.const 308547) "a") (data (i32.const 308550) "a") (data (i32.const 308553) "a") (data (i32.const 308556) "a") (data (i32.const 308559) "a") (data (i32.const 308562) "a") (data (i32.const 308565) "a") (data (i32.const 308568) "a") (data (i32.const 308571) "a") (data (i32.const 308574) "a") (data (i32.const 308577) "a") (data (i32.const 308580) "a") (data (i32.const 308583) "a") (data (i32.const 308586) "a") (data (i32.const 308589) "a") (data (i32.const 308592) "a") (data (i32.const 308595) "a") (data (i32.const 308598) "a") (data (i32.const 308601) "a") (data (i32.const 308604) "a") (data (i32.const 308607) "a") (data (i32.const 308610) "a") (data (i32.const 308613) "a") (data (i32.const 308616) "a") (data (i32.const 308619) "a") (data (i32.const 308622) "a") (data (i32.const 308625) "a") (data (i32.const 308628) "a") (data (i32.const 308631) "a") (data (i32.const 308634) "a") (data (i32.const 308637) "a") (data (i32.const 308640) "a") (data (i32.const 308643) "a") (data (i32.const 308646) "a") (data (i32.const 308649) "a") (data (i32.const 308652) "a") (data (i32.const 308655) "a") (data (i32.const 308658) "a") (data (i32.const 308661) "a") (data (i32.const 308664) "a") (data (i32.const 308667) "a") (data (i32.const 308670) "a") (data (i32.const 308673) "a") (data (i32.const 308676) "a") (data (i32.const 308679) "a") (data (i32.const 308682) "a") (data (i32.const 308685) "a") (data (i32.const 308688) "a") (data (i32.const 308691) "a") (data (i32.const 308694) "a") (data (i32.const 308697) "a") (data (i32.const 308700) "a") (data (i32.const 308703) "a") (data (i32.const 308706) "a") (data (i32.const 308709) "a") (data (i32.const 308712) "a") (data (i32.const 308715) "a") (data (i32.const 308718) "a") (data (i32.const 308721) "a") (data (i32.const 308724) "a") (data (i32.const 308727) "a") (data (i32.const 308730) "a") (data (i32.const 308733) "a") (data (i32.const 308736) "a") (data (i32.const 308739) "a") (data (i32.const 308742) "a") (data (i32.const 308745) "a") (data (i32.const 308748) "a") (data (i32.const 308751) "a") (data (i32.const 308754) "a") (data (i32.const 308757) "a") (data (i32.const 308760) "a") (data (i32.const 308763) "a") (data (i32.const 308766) "a") (data (i32.const 308769) "a") (data (i32.const 308772) "a") (data (i32.const 308775) "a") (data (i32.const 308778) "a") (data (i32.const 308781) "a") (data (i32.const 308784) "a") (data (i32.const 308787) "a") (data (i32.const 308790) "a") (data (i32.const 308793) "a") (data (i32.const 308796) "a") (data (i32.const 308799) "a") (data (i32.const 308802) "a") (data (i32.const 308805) "a") (data (i32.const 308808) "a") (data (i32.const 308811) "a") (data (i32.const 308814) "a") (data (i32.const 308817) "a") (data (i32.const 308820) "a") (data (i32.const 308823) "a") (data (i32.const 308826) "a") (data (i32.const 308829) "a") (data (i32.const 308832) "a") (data (i32.const 308835) "a") (data (i32.const 308838) "a") (data (i32.const 308841) "a") (data (i32.const 308844) "a") (data (i32.const 308847) "a") (data (i32.const 308850) "a") (data (i32.const 308853) "a") (data (i32.const 308856) "a") (data (i32.const 308859) "a") (data (i32.const 308862) "a") (data (i32.const 308865) "a") (data (i32.const 308868) "a") (data (i32.const 308871) "a") (data (i32.const 308874) "a") (data (i32.const 308877) "a") (data (i32.const 308880) "a") (data (i32.const 308883) "a") (data (i32.const 308886) "a") (data (i32.const 308889) "a") (data (i32.const 308892) "a") (data (i32.const 308895) "a") (data (i32.const 308898) "a") (data (i32.const 308901) "a") (data (i32.const 308904) "a") (data (i32.const 308907) "a") (data (i32.const 308910) "a") (data (i32.const 308913) "a") (data (i32.const 308916) "a") (data (i32.const 308919) "a") (data (i32.const 308922) "a") (data (i32.const 308925) "a") (data (i32.const 308928) "a") (data (i32.const 308931) "a") (data (i32.const 308934) "a") (data (i32.const 308937) "a") (data (i32.const 308940) "a") (data (i32.const 308943) "a") (data (i32.const 308946) "a") (data (i32.const 308949) "a") (data (i32.const 308952) "a") (data (i32.const 308955) "a") (data (i32.const 308958) "a") (data (i32.const 308961) "a") (data (i32.const 308964) "a") (data (i32.const 308967) "a") (data (i32.const 308970) "a") (data (i32.const 308973) "a") (data (i32.const 308976) "a") (data (i32.const 308979) "a") (data (i32.const 308982) "a") (data (i32.const 308985) "a") (data (i32.const 308988) "a") (data (i32.const 308991) "a") (data (i32.const 308994) "a") (data (i32.const 308997) "a") (data (i32.const 309000) "a") (data (i32.const 309003) "a") (data (i32.const 309006) "a") (data (i32.const 309009) "a") (data (i32.const 309012) "a") (data (i32.const 309015) "a") (data (i32.const 309018) "a") (data (i32.const 309021) "a") (data (i32.const 309024) "a") (data (i32.const 309027) "a") (data (i32.const 309030) "a") (data (i32.const 309033) "a") (data (i32.const 309036) "a") (data (i32.const 309039) "a") (data (i32.const 309042) "a") (data (i32.const 309045) "a") (data (i32.const 309048) "a") (data (i32.const 309051) "a") (data (i32.const 309054) "a") (data (i32.const 309057) "a") (data (i32.const 309060) "a") (data (i32.const 309063) "a") (data (i32.const 309066) "a") (data (i32.const 309069) "a") (data (i32.const 309072) "a") (data (i32.const 309075) "a") (data (i32.const 309078) "a") (data (i32.const 309081) "a") (data (i32.const 309084) "a") (data (i32.const 309087) "a") (data (i32.const 309090) "a") (data (i32.const 309093) "a") (data (i32.const 309096) "a") (data (i32.const 309099) "a") (data (i32.const 309102) "a") (data (i32.const 309105) "a") (data (i32.const 309108) "a") (data (i32.const 309111) "a") (data (i32.const 309114) "a") (data (i32.const 309117) "a") (data (i32.const 309120) "a") (data (i32.const 309123) "a") (data (i32.const 309126) "a") (data (i32.const 309129) "a") (data (i32.const 309132) "a") (data (i32.const 309135) "a") (data (i32.const 309138) "a") (data (i32.const 309141) "a") (data (i32.const 309144) "a") (data (i32.const 309147) "a") (data (i32.const 309150) "a") (data (i32.const 309153) "a") (data (i32.const 309156) "a") (data (i32.const 309159) "a") (data (i32.const 309162) "a") (data (i32.const 309165) "a") (data (i32.const 309168) "a") (data (i32.const 309171) "a") (data (i32.const 309174) "a") (data (i32.const 309177) "a") (data (i32.const 309180) "a") (data (i32.const 309183) "a") (data (i32.const 309186) "a") (data (i32.const 309189) "a") (data (i32.const 309192) "a") (data (i32.const 309195) "a") (data (i32.const 309198) "a") (data (i32.const 309201) "a") (data (i32.const 309204) "a") (data (i32.const 309207) "a") (data (i32.const 309210) "a") (data (i32.const 309213) "a") (data (i32.const 309216) "a") (data (i32.const 309219) "a") (data (i32.const 309222) "a") (data (i32.const 309225) "a") (data (i32.const 309228) "a") (data (i32.const 309231) "a") (data (i32.const 309234) "a") (data (i32.const 309237) "a") (data (i32.const 309240) "a") (data (i32.const 309243) "a") (data (i32.const 309246) "a") (data (i32.const 309249) "a") (data (i32.const 309252) "a") (data (i32.const 309255) "a") (data (i32.const 309258) "a") (data (i32.const 309261) "a") (data (i32.const 309264) "a") (data (i32.const 309267) "a") (data (i32.const 309270) "a") (data (i32.const 309273) "a") (data (i32.const 309276) "a") (data (i32.const 309279) "a") (data (i32.const 309282) "a") (data (i32.const 309285) "a") (data (i32.const 309288) "a") (data (i32.const 309291) "a") (data (i32.const 309294) "a") (data (i32.const 309297) "a") (data (i32.const 309300) "a") (data (i32.const 309303) "a") (data (i32.const 309306) "a") (data (i32.const 309309) "a") (data (i32.const 309312) "a") (data (i32.const 309315) "a") (data (i32.const 309318) "a") (data (i32.const 309321) "a") (data (i32.const 309324) "a") (data (i32.const 309327) "a") (data (i32.const 309330) "a") (data (i32.const 309333) "a") (data (i32.const 309336) "a") (data (i32.const 309339) "a") (data (i32.const 309342) "a") (data (i32.const 309345) "a") (data (i32.const 309348) "a") (data (i32.const 309351) "a") (data (i32.const 309354) "a") (data (i32.const 309357) "a") (data (i32.const 309360) "a") (data (i32.const 309363) "a") (data (i32.const 309366) "a") (data (i32.const 309369) "a") (data (i32.const 309372) "a") (data (i32.const 309375) "a") (data (i32.const 309378) "a") (data (i32.const 309381) "a") (data (i32.const 309384) "a") (data (i32.const 309387) "a") (data (i32.const 309390) "a") (data (i32.const 309393) "a") (data (i32.const 309396) "a") (data (i32.const 309399) "a") (data (i32.const 309402) "a") (data (i32.const 309405) "a") (data (i32.const 309408) "a") (data (i32.const 309411) "a") (data (i32.const 309414) "a") (data (i32.const 309417) "a") (data (i32.const 309420) "a") (data (i32.const 309423) "a") (data (i32.const 309426) "a") (data (i32.const 309429) "a") (data (i32.const 309432) "a") (data (i32.const 309435) "a") (data (i32.const 309438) "a") (data (i32.const 309441) "a") (data (i32.const 309444) "a") (data (i32.const 309447) "a") (data (i32.const 309450) "a") (data (i32.const 309453) "a") (data (i32.const 309456) "a") (data (i32.const 309459) "a") (data (i32.const 309462) "a") (data (i32.const 309465) "a") (data (i32.const 309468) "a") (data (i32.const 309471) "a") (data (i32.const 309474) "a") (data (i32.const 309477) "a") (data (i32.const 309480) "a") (data (i32.const 309483) "a") (data (i32.const 309486) "a") (data (i32.const 309489) "a") (data (i32.const 309492) "a") (data (i32.const 309495) "a") (data (i32.const 309498) "a") (data (i32.const 309501) "a") (data (i32.const 309504) "a") (data (i32.const 309507) "a") (data (i32.const 309510) "a") (data (i32.const 309513) "a") (data (i32.const 309516) "a") (data (i32.const 309519) "a") (data (i32.const 309522) "a") (data (i32.const 309525) "a") (data (i32.const 309528) "a") (data (i32.const 309531) "a") (data (i32.const 309534) "a") (data (i32.const 309537) "a") (data (i32.const 309540) "a") (data (i32.const 309543) "a") (data (i32.const 309546) "a") (data (i32.const 309549) "a") (data (i32.const 309552) "a") (data (i32.const 309555) "a") (data (i32.const 309558) "a") (data (i32.const 309561) "a") (data (i32.const 309564) "a") (data (i32.const 309567) "a") (data (i32.const 309570) "a") (data (i32.const 309573) "a") (data (i32.const 309576) "a") (data (i32.const 309579) "a") (data (i32.const 309582) "a") (data (i32.const 309585) "a") (data (i32.const 309588) "a") (data (i32.const 309591) "a") (data (i32.const 309594) "a") (data (i32.const 309597) "a") (data (i32.const 309600) "a") (data (i32.const 309603) "a") (data (i32.const 309606) "a") (data (i32.const 309609) "a") (data (i32.const 309612) "a") (data (i32.const 309615) "a") (data (i32.const 309618) "a") (data (i32.const 309621) "a") (data (i32.const 309624) "a") (data (i32.const 309627) "a") (data (i32.const 309630) "a") (data (i32.const 309633) "a") (data (i32.const 309636) "a") (data (i32.const 309639) "a") (data (i32.const 309642) "a") (data (i32.const 309645) "a") (data (i32.const 309648) "a") (data (i32.const 309651) "a") (data (i32.const 309654) "a") (data (i32.const 309657) "a") (data (i32.const 309660) "a") (data (i32.const 309663) "a") (data (i32.const 309666) "a") (data (i32.const 309669) "a") (data (i32.const 309672) "a") (data (i32.const 309675) "a") (data (i32.const 309678) "a") (data (i32.const 309681) "a") (data (i32.const 309684) "a") (data (i32.const 309687) "a") (data (i32.const 309690) "a") (data (i32.const 309693) "a") (data (i32.const 309696) "a") (data (i32.const 309699) "a") (data (i32.const 309702) "a") (data (i32.const 309705) "a") (data (i32.const 309708) "a") (data (i32.const 309711) "a") (data (i32.const 309714) "a") (data (i32.const 309717) "a") (data (i32.const 309720) "a") (data (i32.const 309723) "a") (data (i32.const 309726) "a") (data (i32.const 309729) "a") (data (i32.const 309732) "a") (data (i32.const 309735) "a") (data (i32.const 309738) "a") (data (i32.const 309741) "a") (data (i32.const 309744) "a") (data (i32.const 309747) "a") (data (i32.const 309750) "a") (data (i32.const 309753) "a") (data (i32.const 309756) "a") (data (i32.const 309759) "a") (data (i32.const 309762) "a") (data (i32.const 309765) "a") (data (i32.const 309768) "a") (data (i32.const 309771) "a") (data (i32.const 309774) "a") (data (i32.const 309777) "a") (data (i32.const 309780) "a") (data (i32.const 309783) "a") (data (i32.const 309786) "a") (data (i32.const 309789) "a") (data (i32.const 309792) "a") (data (i32.const 309795) "a") (data (i32.const 309798) "a") (data (i32.const 309801) "a") (data (i32.const 309804) "a") (data (i32.const 309807) "a") (data (i32.const 309810) "a") (data (i32.const 309813) "a") (data (i32.const 309816) "a") (data (i32.const 309819) "a") (data (i32.const 309822) "a") (data (i32.const 309825) "a") (data (i32.const 309828) "a") (data (i32.const 309831) "a") (data (i32.const 309834) "a") (data (i32.const 309837) "a") (data (i32.const 309840) "a") (data (i32.const 309843) "a") (data (i32.const 309846) "a") (data (i32.const 309849) "a") (data (i32.const 309852) "a") (data (i32.const 309855) "a") (data (i32.const 309858) "a") (data (i32.const 309861) "a") (data (i32.const 309864) "a") (data (i32.const 309867) "a") (data (i32.const 309870) "a") (data (i32.const 309873) "a") (data (i32.const 309876) "a") (data (i32.const 309879) "a") (data (i32.const 309882) "a") (data (i32.const 309885) "a") (data (i32.const 309888) "a") (data (i32.const 309891) "a") (data (i32.const 309894) "a") (data (i32.const 309897) "a") (data (i32.const 309900) "a") (data (i32.const 309903) "a") (data (i32.const 309906) "a") (data (i32.const 309909) "a") (data (i32.const 309912) "a") (data (i32.const 309915) "a") (data (i32.const 309918) "a") (data (i32.const 309921) "a") (data (i32.const 309924) "a") (data (i32.const 309927) "a") (data (i32.const 309930) "a") (data (i32.const 309933) "a") (data (i32.const 309936) "a") (data (i32.const 309939) "a") (data (i32.const 309942) "a") (data (i32.const 309945) "a") (data (i32.const 309948) "a") (data (i32.const 309951) "a") (data (i32.const 309954) "a") (data (i32.const 309957) "a") (data (i32.const 309960) "a") (data (i32.const 309963) "a") (data (i32.const 309966) "a") (data (i32.const 309969) "a") (data (i32.const 309972) "a") (data (i32.const 309975) "a") (data (i32.const 309978) "a") (data (i32.const 309981) "a") (data (i32.const 309984) "a") (data (i32.const 309987) "a") (data (i32.const 309990) "a") (data (i32.const 309993) "a") (data (i32.const 309996) "a") (data (i32.const 309999) "a") (data (i32.const 310002) "a") (data (i32.const 310005) "a") (data (i32.const 310008) "a") (data (i32.const 310011) "a") (data (i32.const 310014) "a") (data (i32.const 310017) "a") (data (i32.const 310020) "a") (data (i32.const 310023) "a") (data (i32.const 310026) "a") (data (i32.const 310029) "a") (data (i32.const 310032) "a") (data (i32.const 310035) "a") (data (i32.const 310038) "a") (data (i32.const 310041) "a") (data (i32.const 310044) "a") (data (i32.const 310047) "a") (data (i32.const 310050) "a") (data (i32.const 310053) "a") (data (i32.const 310056) "a") (data (i32.const 310059) "a") (data (i32.const 310062) "a") (data (i32.const 310065) "a") (data (i32.const 310068) "a") (data (i32.const 310071) "a") (data (i32.const 310074) "a") (data (i32.const 310077) "a") (data (i32.const 310080) "a") (data (i32.const 310083) "a") (data (i32.const 310086) "a") (data (i32.const 310089) "a") (data (i32.const 310092) "a") (data (i32.const 310095) "a") (data (i32.const 310098) "a") (data (i32.const 310101) "a") (data (i32.const 310104) "a") (data (i32.const 310107) "a") (data (i32.const 310110) "a") (data (i32.const 310113) "a") (data (i32.const 310116) "a") (data (i32.const 310119) "a") (data (i32.const 310122) "a") (data (i32.const 310125) "a") (data (i32.const 310128) "a") (data (i32.const 310131) "a") (data (i32.const 310134) "a") (data (i32.const 310137) "a") (data (i32.const 310140) "a") (data (i32.const 310143) "a") (data (i32.const 310146) "a") (data (i32.const 310149) "a") (data (i32.const 310152) "a") (data (i32.const 310155) "a") (data (i32.const 310158) "a") (data (i32.const 310161) "a") (data (i32.const 310164) "a") (data (i32.const 310167) "a") (data (i32.const 310170) "a") (data (i32.const 310173) "a") (data (i32.const 310176) "a") (data (i32.const 310179) "a") (data (i32.const 310182) "a") (data (i32.const 310185) "a") (data (i32.const 310188) "a") (data (i32.const 310191) "a") (data (i32.const 310194) "a") (data (i32.const 310197) "a") (data (i32.const 310200) "a") (data (i32.const 310203) "a") (data (i32.const 310206) "a") (data (i32.const 310209) "a") (data (i32.const 310212) "a") (data (i32.const 310215) "a") (data (i32.const 310218) "a") (data (i32.const 310221) "a") (data (i32.const 310224) "a") (data (i32.const 310227) "a") (data (i32.const 310230) "a") (data (i32.const 310233) "a") (data (i32.const 310236) "a") (data (i32.const 310239) "a") (data (i32.const 310242) "a") (data (i32.const 310245) "a") (data (i32.const 310248) "a") (data (i32.const 310251) "a") (data (i32.const 310254) "a") (data (i32.const 310257) "a") (data (i32.const 310260) "a") (data (i32.const 310263) "a") (data (i32.const 310266) "a") (data (i32.const 310269) "a") ) binaryen-version_108/test/passes/log-execution.txt000066400000000000000000000025331423707623100225500ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (import "env" "func" (func $import)) (import "env" "log_execution" (func $log_execution (param i32))) (func $nopp (call $log_execution (i32.const 0) ) (nop) ) (func $intt (result i32) (call $log_execution (i32.const 1) ) (i32.const 10) ) (func $workk (call $log_execution (i32.const 3) ) (block (if (i32.const 0) (nop) ) (block (call $log_execution (i32.const 2) ) (drop (i32.const 1) ) ) ) ) (func $loops (call $log_execution (i32.const 8) ) (block (loop $x (call $log_execution (i32.const 4) ) (block (call $loops) (br $x) ) ) (if (call $intt) (loop $y (call $log_execution (i32.const 5) ) (call $loops) ) ) (block (call $log_execution (i32.const 7) ) (loop $loop-in (call $log_execution (i32.const 6) ) (block (drop (i32.const 10) ) (drop (i32.const 20) ) (drop (i32.const 30) ) ) ) ) ) ) (func $loops-similar (call $log_execution (i32.const 10) ) (loop $x (call $log_execution (i32.const 9) ) (block (call $loops) (br $x) ) ) ) ) binaryen-version_108/test/passes/log-execution.wast000066400000000000000000000010151423707623100227010ustar00rootroot00000000000000(module (import "env" "func" (func $import)) (func $nopp (nop) ) (func $intt (result i32) (i32.const 10) ) (func $workk (if (i32.const 0) (nop)) (drop (i32.const 1)) ) (func $loops (loop $x (call $loops) (br $x) ) (if (call $intt) (loop $y (call $loops) ) ) (loop (drop (i32.const 10)) (drop (i32.const 20)) (drop (i32.const 30)) ) ) (func $loops-similar (loop $x (call $loops) (br $x) ) ) ) memory64-lowering_enable-memory64_enable-bulk-memory_enable-threads.txt000066400000000000000000000054771423707623100347220ustar00rootroot00000000000000binaryen-version_108/test/passes(module (type $none_=>_none (func)) (memory $0 1 1) (data (i32.const 0) "\00\00\00\00\00\00\00\00\00\00") (func $func_1 (local $0 i64) (drop (i32.load (i32.wrap_i64 (i64.const 4) ) ) ) (drop (i32.load align=1 (i32.wrap_i64 (i64.const 4) ) ) ) (drop (i32.load align=2 (i32.wrap_i64 (i64.const 4) ) ) ) (drop (i32.load (i32.wrap_i64 (i64.const 4) ) ) ) (drop (i32.load offset=100 (i32.wrap_i64 (i64.const 4) ) ) ) (drop (i32.load offset=100 align=1 (i32.wrap_i64 (i64.const 4) ) ) ) (drop (i32.load offset=100 align=2 (i32.wrap_i64 (i64.const 4) ) ) ) (drop (i32.load offset=100 (i32.wrap_i64 (i64.const 4) ) ) ) (drop (i32.load offset=100 align=1 (unreachable) ) ) (i32.store (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (i32.store align=1 (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (i32.store align=2 (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (i32.store (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (i32.store offset=100 (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (i32.store offset=100 align=1 (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (i32.store offset=100 align=2 (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (i32.store offset=100 (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (i32.store offset=100 align=1 (unreachable) (i32.const 8) ) (i32.store offset=100 align=1 (i32.wrap_i64 (i64.const 4) ) (unreachable) ) (local.set $0 (i64.extend_i32_u (memory.size) ) ) (local.set $0 (i64.extend_i32_u (memory.grow (i32.wrap_i64 (i64.const 1) ) ) ) ) (memory.init 0 (i32.wrap_i64 (i64.const 1) ) (i32.const 2) (i32.const 3) ) (memory.fill (i32.wrap_i64 (i64.const 1) ) (i32.const 2) (i32.wrap_i64 (i64.const 3) ) ) (memory.copy (i32.wrap_i64 (i64.const 1) ) (i32.wrap_i64 (i64.const 2) ) (i32.wrap_i64 (i64.const 3) ) ) (drop (i32.atomic.load (i32.wrap_i64 (i64.const 4) ) ) ) (i32.atomic.store (i32.wrap_i64 (i64.const 4) ) (i32.const 8) ) (drop (i32.atomic.rmw8.add_u (i32.wrap_i64 (i64.const 1) ) (i32.const 2) ) ) (drop (i32.atomic.rmw8.cmpxchg_u (i32.wrap_i64 (i64.const 1) ) (i32.const 2) (i32.const 3) ) ) (drop (memory.atomic.wait32 (i32.wrap_i64 (i64.const 1) ) (i32.const 2) (i64.const 3) ) ) (drop (memory.atomic.notify (i32.wrap_i64 (i64.const 1) ) (i32.const 2) ) ) ) ) (module (memory $0 1 65536) ) memory64-lowering_enable-memory64_enable-bulk-memory_enable-threads.wast000066400000000000000000000033101423707623100350410ustar00rootroot00000000000000binaryen-version_108/test/passes(module (memory $0 i64 1 1) (data (i64.const 0) "\00\00\00\00\00\00\00\00\00\00") (func $func_1 (local i64) (drop (i32.load (i64.const 4))) (drop (i32.load align=1 (i64.const 4))) (drop (i32.load align=2 (i64.const 4))) (drop (i32.load align=4 (i64.const 4))) (drop (i32.load offset=100 (i64.const 4))) (drop (i32.load offset=100 align=1 (i64.const 4))) (drop (i32.load offset=100 align=2 (i64.const 4))) (drop (i32.load offset=100 align=4 (i64.const 4))) (drop (i32.load offset=100 align=1 (unreachable))) (i32.store (i64.const 4) (i32.const 8)) (i32.store align=1 (i64.const 4) (i32.const 8)) (i32.store align=2 (i64.const 4) (i32.const 8)) (i32.store align=4 (i64.const 4) (i32.const 8)) (i32.store offset=100 (i64.const 4) (i32.const 8)) (i32.store offset=100 align=1 (i64.const 4) (i32.const 8)) (i32.store offset=100 align=2 (i64.const 4) (i32.const 8)) (i32.store offset=100 align=4 (i64.const 4) (i32.const 8)) (i32.store offset=100 align=1 (unreachable) (i32.const 8)) (i32.store offset=100 align=1 (i64.const 4) (unreachable)) (local.set 0 (memory.size)) (local.set 0 (memory.grow (i64.const 1))) (memory.init 0 (i64.const 1) (i32.const 2) (i32.const 3)) (memory.fill (i64.const 1) (i32.const 2) (i64.const 3)) (memory.copy (i64.const 1) (i64.const 2) (i64.const 3)) (drop (i32.atomic.load (i64.const 4))) (i32.atomic.store (i64.const 4) (i32.const 8)) (drop (i32.atomic.rmw8.add_u (i64.const 1) (i32.const 2))) (drop (i32.atomic.rmw8.cmpxchg_u (i64.const 1) (i32.const 2) (i32.const 3))) (drop (memory.atomic.wait32 (i64.const 1) (i32.const 2) (i64.const 3))) (drop (memory.atomic.notify (i64.const 1) (i32.const 2))) ) ) (module (memory $0 i64 1 65537) ) binaryen-version_108/test/passes/merge-blocks.txt000066400000000000000000000076771423707623100223560ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_f32 (func (result f32))) (global $global$0 (mut i32) (i32.const 10)) (func $drop-block (block $block (drop (i32.const 0) ) ) ) (func $drop-block-br (block $block (drop (block $x (result i32) (br $x (i32.const 1) ) (i32.const 0) ) ) ) ) (func $drop-block-br-if (block $block (drop (i32.const 1) ) (block $x (br_if $x (i32.const 2) ) (drop (i32.const 0) ) ) ) ) (func $undroppable-block-br-if (param $0 i32) (block $block (drop (block $x (result i32) (call $undroppable-block-br-if (br_if $x (i32.const 1) (i32.const 2) ) ) (i32.const 0) ) ) ) ) (func $drop-block-nested-br-if (block $block (block $x (if (i32.const 100) (block $block0 (drop (i32.const 1) ) (br_if $x (i32.const 2) ) (nop) ) ) (drop (i32.const 0) ) ) ) ) (func $drop-unreachable-br_if (result i32) (block $label$0 (result i32) (block $label$2 (result i32) (br_if $label$2 (br $label$0 (i32.const 538976371) ) (i32.const 1918987552) ) ) ) ) (func $drop-block-squared-iloop (drop (block $label$0 (result i32) (drop (block $label$1 (loop $label$2 (br $label$2) ) ) ) ) ) ) (func $br-goes-away-label2-becomes-unreachable (block $block (drop (block $label$1 (result i32) (block $label$2 (drop (br_if $label$1 (unreachable) (i32.eqz (br $label$2) ) ) ) ) (i32.const 1) ) ) ) ) (func $loop-block-drop-block-return (loop $label$4 (block $label$5 (drop (block $label$6 (result i32) (return) ) ) ) ) ) (func $if-block (block $label (if (i32.const 1) (block $block (drop (i32.const 2) ) (drop (i32.const 3) ) ) ) ) ) (func $if-block-bad (block $label (if (br $label) (block $block (drop (i32.const 2) ) (drop (i32.const 3) ) ) ) ) ) (func $if-block-br (block $label (if (i32.const 1) (br $label) ) ) ) (func $if-block-br-1 (block $label (if (i32.const 1) (br $label) (drop (i32.const 3) ) ) ) ) (func $if-block-br-2 (block $label (if (i32.const 1) (drop (i32.const 3) ) (br $label) ) ) ) (func $if-block-br-3 (block $label (if (i32.const 1) (br $label) (br $label) ) ) ) (func $if-block-br-4-eithre (block $label (if (i32.const 1) (drop (i32.const 2) ) (drop (i32.const 3) ) ) ) ) (func $if-block-br-5-value (result i32) (block $label (result i32) (if (result i32) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func $restructure-if-outerType-change (loop $label$1 (br_if $label$1 (block $label$2 (block $label$3 (if (block $label$4 (unreachable) ) (br $label$3) ) ) (unreachable) ) ) ) ) (func $if-arm-unreachable (block $label$1 (if (unreachable) (nop) (unreachable) ) ) ) (func $propagate-type-if-we-optimize (if (i32.const 1) (nop) (block $block (drop (loop $label$3 (result i64) (br_if $label$3 (block $label$4 (result i32) (if (i32.const 0) (unreachable) (unreachable) ) ) ) (i64.const -9) ) ) (unreachable) ) ) ) (func $br-value-blocktypechange (result f32) (global.set $global$0 (i32.const 0) ) (block $label$1 (result f32) (global.set $global$0 (i32.const 0) ) (br_if $label$1 (unreachable) (i32.const 0) ) ) ) ) binaryen-version_108/test/passes/merge-blocks.wast000066400000000000000000000101261423707623100224740ustar00rootroot00000000000000(module (global $global$0 (mut i32) (i32.const 10)) (func $drop-block (block (drop (block $x (result i32) (i32.const 0) ) ) ) ) (func $drop-block-br (block (drop (block $x (result i32) (br $x (i32.const 1)) (i32.const 0) ) ) ) ) (func $drop-block-br-if (block (drop (block $x (result i32) (drop (br_if $x (i32.const 1) (i32.const 2))) (i32.const 0) ) ) ) ) (func $undroppable-block-br-if (param i32) (block (drop (block $x (result i32) (call $undroppable-block-br-if (br_if $x (i32.const 1) (i32.const 2))) (i32.const 0) ) ) ) ) (func $drop-block-nested-br-if (block (drop (block $x (result i32) (if (i32.const 100) (block (drop (br_if $x (i32.const 1) (i32.const 2))) (nop) ) ) (i32.const 0) ) ) ) ) (func $drop-unreachable-br_if (result i32) (block $label$0 (result i32) (block $label$2 (result i32) (br_if $label$2 (br $label$0 (i32.const 538976371) ) (i32.const 1918987552) ) ) ) ) (func $drop-block-squared-iloop (drop (block $label$0 (result i32) ;; this block's type should not change, so the drop remains none and valid (drop (block $label$1 (loop $label$2 (br $label$2) ) ) ) ) ) ) (func $br-goes-away-label2-becomes-unreachable (block (drop (block $label$1 (result i32) (block $label$2 (drop (br_if $label$1 (unreachable) (i32.eqz (br $label$2) ) ) ) ) (i32.const 1) ) ) ) ) (func $loop-block-drop-block-return (loop $label$4 (block $label$5 (drop (block $label$6 (result i32) (return) ) ) ) ) ) (func $if-block (block $label (if (i32.const 1) (block (drop (i32.const 2)) (drop (i32.const 3)) ) ) ) ) (func $if-block-bad (block $label (if (br $label) ;; use outside of arm (block (drop (i32.const 2)) (drop (i32.const 3)) ) ) ) ) (func $if-block-br (block $label (if (i32.const 1) (br $label) ) ) ) (func $if-block-br-1 (block $label (if (i32.const 1) (br $label) (drop (i32.const 3)) ) ) ) (func $if-block-br-2 (block $label (if (i32.const 1) (drop (i32.const 3)) (br $label) ) ) ) (func $if-block-br-3 (block $label (if (i32.const 1) (br $label) (br $label) ) ) ) (func $if-block-br-4-eithre (block $label (if (i32.const 1) (drop (i32.const 2)) (drop (i32.const 3)) ) ) ) (func $if-block-br-5-value (result i32) (block $label (result i32) (if (result i32) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func $restructure-if-outerType-change (loop $label$1 (br_if $label$1 (block $label$2 (block $label$3 (if (block $label$4 (unreachable) ) (br $label$3) ) ) (unreachable) ) ) ) ) (func $if-arm-unreachable (block $label$1 (if (unreachable) ;; unreachable condition (nop) (unreachable) ) ) ) (func $propagate-type-if-we-optimize (if (i32.const 1) (nop) (block (drop (loop $label$3 (result i64) (br_if $label$3 (block $label$4 (result i32) (if (i32.const 0) (unreachable) (unreachable) ) ) ) (i64.const -9) ) ) (unreachable) ) ) ) (func $br-value-blocktypechange (result f32) (global.set $global$0 (i32.const 0) ) (block $label$1 (result f32) (global.set $global$0 (i32.const 0) ) (br_if $label$1 (unreachable) (i32.const 0) ) ) ) ) binaryen-version_108/test/passes/merge-blocks_remove-unused-brs.txt000066400000000000000000000003201423707623100257720ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (func $func (param $x i32) (loop $loop (block $out (block (br_if $out (local.get $x) ) (nop) (br $loop) ) ) ) ) ) binaryen-version_108/test/passes/merge-blocks_remove-unused-brs.wast000066400000000000000000000002641423707623100261400ustar00rootroot00000000000000(module (func $func (param $x i32) (block $out (loop $loop (br_if $out (local.get $x) ) (nop) (br $loop) ) ) ) ) binaryen-version_108/test/passes/merge-locals_all-features.txt000066400000000000000000000166511423707623100250120ustar00rootroot00000000000000(module (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_f32_f32_=>_i64 (func (param i32 f32 f32) (result i64))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_none (func)) (global $global$0 (mut i32) (i32.const 10)) (func $test (param $x i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (local.get $x) ) (func $test2 (param $x i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (local.get $x) ) (func $test-multiple (param $x i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (drop (local.get $x) ) (local.get $x) ) (func $test-just-some (param $x i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (drop (local.get $x) ) (local.set $y (i32.const 200) ) (local.get $y) ) (func $test-just-some2 (param $x i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (if (i32.const 300) (local.set $y (i32.const 400) ) (drop (local.get $x) ) ) (i32.const 500) ) (func $test-just-some3 (param $x i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (i32.const 200) ) ) (if (i32.const 300) (local.set $y (i32.const 400) ) (drop (local.get $y) ) ) (local.get $y) ) (func $silly-self (param $x i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $x) ) (i32.const 100) (local.get $x) ) ) (local.get $y) ) (func $silly-multi (param $x i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.tee $y (local.get $x) ) ) (i32.const 100) (local.get $x) ) ) (local.get $y) ) (func $undo-1 (param $var$1 i32) (param $var$2 i32) (local $var$5 i32) (local.set $var$2 (local.get $var$1) ) (local.set $var$2 (i32.const 1) ) (drop (local.get $var$1) ) ) (func $undo-2 (param $var$1 i32) (param $var$2 i32) (local $var$5 i32) (local.set $var$2 (local.get $var$1) ) (if (local.get $var$1) (local.set $var$2 (i32.const 1) ) ) (drop (local.get $var$1) ) ) (func $reverse (param $x i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $y) ) ) (drop (local.get $y) ) (if (i32.const 1) (local.set $y (i32.const 200) ) ) (drop (local.get $y) ) ) (func $reverse-end (param $x i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) ) (func $reverse-lone-end-2 (param $x i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (local.set $y (i32.const 200) ) (drop (local.get $y) ) ) (func $reverse-undo (param $x i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $y) ) ) (local.set $x (i32.const 300) ) (drop (local.get $x) ) (if (i32.const 1) (local.set $y (i32.const 200) ) ) (drop (local.get $y) ) ) (func $reverse-undo2 (param $x i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (i32.const 150) ) ) (local.set $x (i32.const 300) ) (drop (local.get $x) ) (if (i32.const 1) (local.set $y (i32.const 200) ) ) (drop (local.get $y) ) ) (func $reverse-undo3-conditional (param $x i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (i32.const 150) ) ) (if (i32.const 1) (local.set $x (i32.const 300) ) ) (drop (local.get $x) ) (if (i32.const 1) (local.set $y (i32.const 200) ) ) (drop (local.get $y) ) ) (func $reverse-undo3-conditional-b (param $x i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (if (i32.const 1) (local.set $x (i32.const 300) ) ) (drop (local.get $x) ) (if (i32.const 1) (local.set $y (i32.const 200) ) ) (drop (local.get $y) ) ) (func $reverse-undo3-conditional-c (param $x i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (i32.const 150) ) ) (if (i32.const 1) (drop (local.get $x) ) (block $block (if (i32.const 1) (local.set $x (i32.const 300) ) ) (drop (local.get $x) ) ) ) (if (i32.const 1) (local.set $y (i32.const 200) ) ) (drop (local.get $y) ) ) (func $fuzz (param $var$0 i32) (param $var$1 f32) (param $var$2 f32) (result i64) (local $var$3 i32) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (loop $label$1 (result i64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (br_if $label$1 (block $label$2 (result i32) (drop (if (result i32) (block $label$3 (result i32) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 3) ) ) (local.set $var$3 (i32.const 1) ) (local.tee $var$3 (local.get $var$0) ) ) (i32.const 0) (block $block (result i32) (local.set $var$3 (if (result i32) (i32.const 0) (block $block13 (result i32) (block $label$7 (block $label$8 (local.set $var$0 (i32.const 34738786) ) ) ) (local.get $var$3) ) (block $block14 (result i32) (if (i32.eqz (global.get $global$0) ) (return (i64.const 137438953472) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (br_if $label$1 (i32.eqz (local.get $var$3) ) ) (return (i64.const 44125) ) ) ) ) (i32.const -129) ) ) ) (i32.const 0) ) ) (i64.const -36028797018963968) ) ) (func $trivial-confusion (param $unused i32) (param $param i32) (param $result i32) (loop $label$1 (if (i32.const 1) (drop (local.get $result) ) ) (local.set $result (local.get $param) ) (br_if $label$1 (local.tee $unused (local.get $param) ) ) ) ) (func $subtype-test (local $0 anyref) (local $1 funcref) (local $2 funcref) (local.set $0 (local.get $1) ) (local.set $2 (local.get $1) ) ) ) binaryen-version_108/test/passes/merge-locals_all-features.wast000066400000000000000000000207351423707623100251470ustar00rootroot00000000000000(module (global $global$0 (mut i32) (i32.const 10)) (func $test (param $x $i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (local.get $y) ;; turn this into $x ) (func $test2 (param $x $i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (local.get $x) ) (func $test-multiple (param $x $i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (drop (local.get $y)) ;; turn this into $x (local.get $y) ;; turn this into $x ) (func $test-just-some (param $x $i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (drop (local.get $y)) ;; turn this into $x (local.set $y (i32.const 200)) (local.get $y) ;; but not this one! ) (func $test-just-some2 (param $x $i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (if (i32.const 300) (local.set $y (i32.const 400)) (drop (local.get $y)) ;; turn this into $x ) (i32.const 500) ) (func $test-just-some3 (param $x $i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (i32.const 200) ) ) (if (i32.const 300) (local.set $y (i32.const 400)) (drop (local.get $y)) ;; can turn this into $x, but another exists we can't, so do nothing ) (local.get $y) ;; but not this one! ) (func $silly-self (param $x $i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.get $x) ) (i32.const 100) (local.get $x) ) ) (local.get $y) ;; turn this into $x ) (func $silly-multi (param $x $i32) (param $y i32) (result i32) (drop (if (result i32) (local.tee $x (local.tee $y (local.get $x) ) ) (i32.const 100) (local.get $x) ) ) (local.get $y) ;; turn this into $x ) (func $undo-1 (param $var$1 i32) (param $var$2 i32) (local $var$5 i32) (local.set $var$2 ;; copy 1 to 2 (local.get $var$1) ) (local.set $var$2 ;; overwrite 2 (i32.const 1) ) (drop (local.get $var$1) ;; can't be changed to $var$2, as it changes ) ) (func $undo-2 (param $var$1 i32) (param $var$2 i32) (local $var$5 i32) (local.set $var$2 ;; copy 1 to 2 (local.get $var$1) ) (if (local.get $var$1) (local.set $var$2 ;; conditional overwrite 2 (i32.const 1) ) ) (drop (local.get $var$1) ;; can't be changed to $var$2, as it changes ) ) (func $reverse (param $x $i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (drop (local.get $x)) ;; (read lower down first) but the reverse can work! (if (i32.const 1) (local.set $y (i32.const 200)) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) (func $reverse-end (param $x $i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ;; don't change to $y, as its lifetime ended. leave it ended ) ) ) (func $reverse-lone-end-2 (param $x $i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ;; don't change to $y, as its lifetime ended. leave it ended ) ) (local.set $y (i32.const 200)) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) (func $reverse-undo (param $x $i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ;; can optimize this ($y lives on) ) ) (local.set $x (i32.const 300)) ;; force an undo (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work (if (i32.const 1) (local.set $y (i32.const 200)) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) (func $reverse-undo2 (param $x $i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (i32.const 150) ) ) (local.set $x (i32.const 300)) ;; force an undo (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work (if (i32.const 1) (local.set $y (i32.const 200)) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) (func $reverse-undo3-conditional (param $x $i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (i32.const 150) ) ) (if (i32.const 1) (local.set $x (i32.const 300)) ;; force an undo ) (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work (if (i32.const 1) (local.set $y (i32.const 200)) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) (func $reverse-undo3-conditional-b (param $x $i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (local.get $x) ) ) (if (i32.const 1) (local.set $x (i32.const 300)) ;; force an undo ) (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work (if (i32.const 1) (local.set $y (i32.const 200)) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) (func $reverse-undo3-conditional-c (param $x $i32) (param $y i32) (drop (if (result i32) (local.tee $x (local.get $y) ) (i32.const 100) (i32.const 150) ) ) (if (i32.const 1) (drop (local.get $x)) (block (if (i32.const 1) (local.set $x (i32.const 300)) ;; force an undo ) (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work ) ) (if (i32.const 1) (local.set $y (i32.const 200)) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) (func $fuzz (param $var$0 i32) (param $var$1 f32) (param $var$2 f32) (result i64) (local $var$3 i32) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (loop $label$1 (result i64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (br_if $label$1 (block $label$2 (result i32) (drop (if (result i32) (block $label$3 (result i32) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 3) ) ) (local.set $var$3 (i32.const 1) ) (local.tee $var$3 (local.get $var$0) ) ) (i32.const 0) (block (result i32) (local.set $var$3 (if (result i32) (i32.const 0) (block (result i32) (block $label$7 (block $label$8 (local.set $var$0 (i32.const 34738786) ) ) ) (local.get $var$3) ) (block (result i32) (if (i32.eqz (global.get $global$0) ) (return (i64.const 137438953472) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (br_if $label$1 (i32.eqz (local.get $var$3) ) ) (return (i64.const 44125) ) ) ) ) (i32.const -129) ) ) ) (i32.const 0) ) ) (i64.const -36028797018963968) ) ) (func $trivial-confusion (param $unused i32) (param $param i32) (param $result i32) (loop $label$1 (if (i32.const 1) (drop (local.get $result) ) ) (local.set $result ;; vanishes (local.get $param) ) (br_if $label$1 (local.tee $unused ;; unused, but forms part of a copy, with $result - the trivial tee we add here should not confuse us (local.get $result) ;; flips ) ) ) ) (func $subtype-test (local $0 anyref) (local $1 funcref) (local $2 funcref) (local.set $0 (local.get $1) ) (local.set $2 ;; This should NOT become $0, because types of $0 and $1 are different (local.get $1) ) ) ) binaryen-version_108/test/passes/metrics_all-features.txt000066400000000000000000000026521423707623100241020ustar00rootroot00000000000000total [exports] : 0 [funcs] : 1 [globals] : 1 [imports] : 0 [memory-data] : 9 [table-data] : 3 [tables] : 1 [tags] : 2 [total] : 30 [vars] : 1 Binary : 1 Block : 1 Const : 15 Drop : 6 If : 4 RefFunc : 3 (module (type $0 (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (global $glob i32 (i32.const 1337)) (memory $0 256 256) (data (i32.const 0) "\ff\ef\0f\1f 0@P\99") (table $0 256 256 funcref) (elem (i32.const 0) $ifs $ifs $ifs) (tag $e0 (param i32)) (tag $e1 (param i32 i32)) (func $ifs (param $x i32) (local $y f32) (block $block0 (if (i32.const 0) (drop (i32.const 1) ) ) (if (i32.const 0) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (if (i32.const 4) (drop (i32.const 5) ) (drop (i32.const 6) ) ) (drop (i32.eq (if (result i32) (i32.const 4) (i32.const 5) (i32.const 6) ) (i32.const 177) ) ) ) ) ) total [exports] : 0 [funcs] : 0 [globals] : 0 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 0 [vars] : 0 (module ) binaryen-version_108/test/passes/metrics_all-features.wast000066400000000000000000000017161423707623100242410ustar00rootroot00000000000000(module (memory 256 256) (table 256 256 funcref) (elem (i32.const 0) $ifs $ifs $ifs) (data (i32.const 0) "\ff\ef\0f\1f\20\30\40\50\99") (type $0 (func (param i32))) (global $glob i32 (i32.const 1337)) (tag $e0 (param i32)) (tag $e1 (param i32 i32)) (func $ifs (type $0) (param $x i32) (local $y f32) (block $block0 (if (i32.const 0) (drop (i32.const 1) ) ) (if (i32.const 0) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (if (i32.const 4) (drop (i32.const 5) ) (drop (i32.const 6) ) ) (drop (i32.eq (if (result i32) (i32.const 4) (i32.const 5) (i32.const 6) ) (i32.const 177) ) ) ) ) ) ;; module with no table or memory or anything for that matter (module ) binaryen-version_108/test/passes/metrics_strip-debug_metrics.bin.txt000066400000000000000000000012401423707623100262300ustar00rootroot00000000000000total [exports] : 1 [funcs] : 1 [globals] : 0 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 1 [vars] : 0 Nop : 1 total [exports] : 1 [funcs] : 1 [globals] : 0 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 1 [vars] : 0 Nop : 1 (module (type $none_=>_none (func)) (export "a" (func $0)) (func $0 (nop) ) ;; custom section "emscripten_metadata", size 7 ;; custom section "producers", size 187 ) binaryen-version_108/test/passes/metrics_strip-debug_metrics.wasm000066400000000000000000000004051423707623100256130ustar00rootroot00000000000000asm`a  emscripten_metadata€Å producers processed-byclang¤9.0.0 (git@github.com:llvm-mirror/clang.git 03591ee3511478e575dbf3306a3982f842f1e0fd) (git@github.com:llvm-mirror/llvm.git 5b5290a1ba58fad5f5052ebca8b244405f3b73aa)binaryen-version_108/test/passes/metrics_strip-producers_metrics.bin.txt000066400000000000000000000011671423707623100271600ustar00rootroot00000000000000total [exports] : 1 [funcs] : 1 [globals] : 0 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 1 [vars] : 0 Nop : 1 total [exports] : 1 [funcs] : 1 [globals] : 0 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 1 [vars] : 0 Nop : 1 (module (type $none_=>_none (func)) (export "a" (func $0)) (func $0 (nop) ) ;; custom section "emscripten_metadata", size 7 ) binaryen-version_108/test/passes/metrics_strip-producers_metrics.wasm000066400000000000000000000004051423707623100265330ustar00rootroot00000000000000asm`a  emscripten_metadata€Å producers processed-byclang¤9.0.0 (git@github.com:llvm-mirror/clang.git 03591ee3511478e575dbf3306a3982f842f1e0fd) (git@github.com:llvm-mirror/llvm.git 5b5290a1ba58fad5f5052ebca8b244405f3b73aa)binaryen-version_108/test/passes/minify-imports-and-exports-and-modules.txt000066400000000000000000000005271423707623100274250ustar00rootroot00000000000000memory => a table => b longname1 => c longname2 => d longname3 => e longname4 => f (module (type $none_=>_none (func)) (import "a" "a" (memory $0 256 256)) (import "a" "b" (table $0 4 funcref)) (import "a" "c" (func $internal1)) (import "a" "d" (func $internal2)) (import "a" "e" (func $internal3)) (import "a" "f" (func $internal4)) ) binaryen-version_108/test/passes/minify-imports-and-exports-and-modules.wast000066400000000000000000000004441423707623100275620ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 256 256)) (import "env" "table" (table $0 4 funcref)) (import "env" "longname1" (func $internal1)) (import "env" "longname2" (func $internal2)) (import "env" "longname3" (func $internal3)) (import "other" "longname4" (func $internal4)) ) binaryen-version_108/test/passes/minify-imports-and-exports_all-features.txt000066400000000000000000011263071423707623100276710ustar00rootroot00000000000000longname51 => $ longname2964 => $$ longname3018 => $0 longname3072 => $1 longname3126 => $2 longname3180 => $3 longname3234 => $4 longname3288 => $5 longname3342 => $6 longname3396 => $7 longname3450 => $8 longname3504 => $9 longname1506 => $A longname4962 => $Aa longname1560 => $B longname1614 => $C longname1668 => $D longname1722 => $E longname1776 => $F longname1830 => $G longname1884 => $H longname1938 => $I longname1992 => $J longname2046 => $K longname2100 => $L longname2154 => $M longname2208 => $N longname2262 => $O longname2316 => $P longname2370 => $Q longname2424 => $R longname2478 => $S longname2532 => $T longname2586 => $U longname2640 => $V longname2694 => $W longname2748 => $X longname2802 => $Y longname2856 => $Z longname2910 => $_ longname105 => $a longname3558 => $aa longname159 => $b longname3612 => $ba longname213 => $c longname3666 => $ca longname267 => $d longname3720 => $da longname321 => $e longname3774 => $ea longname374 => $f longname3828 => $fa longname428 => $g longname3882 => $ga longname482 => $h longname3936 => $ha longname536 => $i longname3990 => $ia longname590 => $j longname4044 => $ja longname644 => $k longname4098 => $ka longname698 => $l longname4152 => $la longname752 => $m longname4206 => $ma longname805 => $n longname4260 => $na longname858 => $o longname4314 => $oa longname912 => $p longname4368 => $pa longname966 => $q longname4422 => $qa longname1020 => $r longname4476 => $ra longname1074 => $s longname4530 => $sa longname1128 => $t longname4584 => $ta longname1182 => $u longname4638 => $ua longname1236 => $v longname4692 => $va longname1290 => $w longname4746 => $wa longname1344 => $x longname4800 => $xa longname1398 => $y longname4854 => $ya longname1452 => $z longname4908 => $za longname24 => A longname2937 => A$ longname2991 => A0 longname3045 => A1 longname3099 => A2 longname3153 => A3 longname3207 => A4 longname3261 => A5 longname3315 => A6 longname3369 => A7 longname3423 => A8 longname3477 => A9 longname1479 => AA longname4935 => AAa longname1533 => AB longname4989 => ABa longname1587 => AC longname1641 => AD longname1695 => AE longname1749 => AF longname1803 => AG longname1857 => AH longname1911 => AI longname1965 => AJ longname2019 => AK longname2073 => AL longname2127 => AM longname2181 => AN longname2235 => AO longname2289 => AP longname2343 => AQ longname2397 => AR longname2451 => AS longname2505 => AT longname2559 => AU longname2613 => AV longname2667 => AW longname2721 => AX longname2775 => AY longname2829 => AZ longname2883 => A_ longname78 => Aa longname3531 => Aaa longname132 => Ab longname3585 => Aba longname186 => Ac longname3639 => Aca longname240 => Ad longname3693 => Ada longname294 => Ae longname3747 => Aea longname347 => Af longname3801 => Afa longname401 => Ag longname3855 => Aga longname455 => Ah longname3909 => Aha longname509 => Ai longname3963 => Aia longname563 => Aj longname4017 => Aja longname617 => Ak longname4071 => Aka longname671 => Al longname4125 => Ala longname725 => Am longname4179 => Ama longname778 => An longname4233 => Ana longname831 => Ao longname4287 => Aoa longname885 => Ap longname4341 => Apa longname939 => Aq longname4395 => Aqa longname993 => Ar longname4449 => Ara longname1047 => As longname4503 => Asa longname1101 => At longname4557 => Ata longname1155 => Au longname4611 => Aua longname1209 => Av longname4665 => Ava longname1263 => Aw longname4719 => Awa longname1317 => Ax longname4773 => Axa longname1371 => Ay longname4827 => Aya longname1425 => Az longname4881 => Aza longname25 => B longname2938 => B$ longname2992 => B0 longname3046 => B1 longname3100 => B2 longname3154 => B3 longname3208 => B4 longname3262 => B5 longname3316 => B6 longname3370 => B7 longname3424 => B8 longname3478 => B9 longname1480 => BA longname4936 => BAa longname1534 => BB longname4990 => BBa longname1588 => BC longname1642 => BD longname1696 => BE longname1750 => BF longname1804 => BG longname1858 => BH longname1912 => BI longname1966 => BJ longname2020 => BK longname2074 => BL longname2128 => BM longname2182 => BN longname2236 => BO longname2290 => BP longname2344 => BQ longname2398 => BR longname2452 => BS longname2506 => BT longname2560 => BU longname2614 => BV longname2668 => BW longname2722 => BX longname2776 => BY longname2830 => BZ longname2884 => B_ longname79 => Ba longname3532 => Baa longname133 => Bb longname3586 => Bba longname187 => Bc longname3640 => Bca longname241 => Bd longname3694 => Bda longname295 => Be longname3748 => Bea longname348 => Bf longname3802 => Bfa longname402 => Bg longname3856 => Bga longname456 => Bh longname3910 => Bha longname510 => Bi longname3964 => Bia longname564 => Bj longname4018 => Bja longname618 => Bk longname4072 => Bka longname672 => Bl longname4126 => Bla longname726 => Bm longname4180 => Bma longname779 => Bn longname4234 => Bna longname832 => Bo longname4288 => Boa longname886 => Bp longname4342 => Bpa longname940 => Bq longname4396 => Bqa longname994 => Br longname4450 => Bra longname1048 => Bs longname4504 => Bsa longname1102 => Bt longname4558 => Bta longname1156 => Bu longname4612 => Bua longname1210 => Bv longname4666 => Bva longname1264 => Bw longname4720 => Bwa longname1318 => Bx longname4774 => Bxa longname1372 => By longname4828 => Bya longname1426 => Bz longname4882 => Bza longname26 => C longname2939 => C$ longname2993 => C0 longname3047 => C1 longname3101 => C2 longname3155 => C3 longname3209 => C4 longname3263 => C5 longname3317 => C6 longname3371 => C7 longname3425 => C8 longname3479 => C9 longname1481 => CA longname4937 => CAa longname1535 => CB longname4991 => CBa longname1589 => CC longname1643 => CD longname1697 => CE longname1751 => CF longname1805 => CG longname1859 => CH longname1913 => CI longname1967 => CJ longname2021 => CK longname2075 => CL longname2129 => CM longname2183 => CN longname2237 => CO longname2291 => CP longname2345 => CQ longname2399 => CR longname2453 => CS longname2507 => CT longname2561 => CU longname2615 => CV longname2669 => CW longname2723 => CX longname2777 => CY longname2831 => CZ longname2885 => C_ longname80 => Ca longname3533 => Caa longname134 => Cb longname3587 => Cba longname188 => Cc longname3641 => Cca longname242 => Cd longname3695 => Cda longname296 => Ce longname3749 => Cea longname349 => Cf longname3803 => Cfa longname403 => Cg longname3857 => Cga longname457 => Ch longname3911 => Cha longname511 => Ci longname3965 => Cia longname565 => Cj longname4019 => Cja longname619 => Ck longname4073 => Cka longname673 => Cl longname4127 => Cla longname727 => Cm longname4181 => Cma longname780 => Cn longname4235 => Cna longname833 => Co longname4289 => Coa longname887 => Cp longname4343 => Cpa longname941 => Cq longname4397 => Cqa longname995 => Cr longname4451 => Cra longname1049 => Cs longname4505 => Csa longname1103 => Ct longname4559 => Cta longname1157 => Cu longname4613 => Cua longname1211 => Cv longname4667 => Cva longname1265 => Cw longname4721 => Cwa longname1319 => Cx longname4775 => Cxa longname1373 => Cy longname4829 => Cya longname1427 => Cz longname4883 => Cza longname27 => D longname2940 => D$ longname2994 => D0 longname3048 => D1 longname3102 => D2 longname3156 => D3 longname3210 => D4 longname3264 => D5 longname3318 => D6 longname3372 => D7 longname3426 => D8 longname3480 => D9 longname1482 => DA longname4938 => DAa longname1536 => DB longname4992 => DBa longname1590 => DC longname1644 => DD longname1698 => DE longname1752 => DF longname1806 => DG longname1860 => DH longname1914 => DI longname1968 => DJ longname2022 => DK longname2076 => DL longname2130 => DM longname2184 => DN longname2238 => DO longname2292 => DP longname2346 => DQ longname2400 => DR longname2454 => DS longname2508 => DT longname2562 => DU longname2616 => DV longname2670 => DW longname2724 => DX longname2778 => DY longname2832 => DZ longname2886 => D_ longname81 => Da longname3534 => Daa longname135 => Db longname3588 => Dba longname189 => Dc longname3642 => Dca longname243 => Dd longname3696 => Dda longname297 => De longname3750 => Dea longname350 => Df longname3804 => Dfa longname404 => Dg longname3858 => Dga longname458 => Dh longname3912 => Dha longname512 => Di longname3966 => Dia longname566 => Dj longname4020 => Dja longname620 => Dk longname4074 => Dka longname674 => Dl longname4128 => Dla longname728 => Dm longname4182 => Dma longname781 => Dn longname4236 => Dna longname834 => Do longname4290 => Doa longname888 => Dp longname4344 => Dpa longname942 => Dq longname4398 => Dqa longname996 => Dr longname4452 => Dra longname1050 => Ds longname4506 => Dsa longname1104 => Dt longname4560 => Dta longname1158 => Du longname4614 => Dua longname1212 => Dv longname4668 => Dva longname1266 => Dw longname4722 => Dwa longname1320 => Dx longname4776 => Dxa longname1374 => Dy longname4830 => Dya longname1428 => Dz longname4884 => Dza longname28 => E longname2941 => E$ longname2995 => E0 longname3049 => E1 longname3103 => E2 longname3157 => E3 longname3211 => E4 longname3265 => E5 longname3319 => E6 longname3373 => E7 longname3427 => E8 longname3481 => E9 longname1483 => EA longname4939 => EAa longname1537 => EB longname4993 => EBa longname1591 => EC longname1645 => ED longname1699 => EE longname1753 => EF longname1807 => EG longname1861 => EH longname1915 => EI longname1969 => EJ longname2023 => EK longname2077 => EL longname2131 => EM longname2185 => EN longname2239 => EO longname2293 => EP longname2347 => EQ longname2401 => ER longname2455 => ES longname2509 => ET longname2563 => EU longname2617 => EV longname2671 => EW longname2725 => EX longname2779 => EY longname2833 => EZ longname2887 => E_ longname82 => Ea longname3535 => Eaa longname136 => Eb longname3589 => Eba longname190 => Ec longname3643 => Eca longname244 => Ed longname3697 => Eda longname298 => Ee longname3751 => Eea longname351 => Ef longname3805 => Efa longname405 => Eg longname3859 => Ega longname459 => Eh longname3913 => Eha longname513 => Ei longname3967 => Eia longname567 => Ej longname4021 => Eja longname621 => Ek longname4075 => Eka longname675 => El longname4129 => Ela longname729 => Em longname4183 => Ema longname782 => En longname4237 => Ena longname835 => Eo longname4291 => Eoa longname889 => Ep longname4345 => Epa longname943 => Eq longname4399 => Eqa longname997 => Er longname4453 => Era longname1051 => Es longname4507 => Esa longname1105 => Et longname4561 => Eta longname1159 => Eu longname4615 => Eua longname1213 => Ev longname4669 => Eva longname1267 => Ew longname4723 => Ewa longname1321 => Ex longname4777 => Exa longname1375 => Ey longname4831 => Eya longname1429 => Ez longname4885 => Eza longname29 => F longname2942 => F$ longname2996 => F0 longname3050 => F1 longname3104 => F2 longname3158 => F3 longname3212 => F4 longname3266 => F5 longname3320 => F6 longname3374 => F7 longname3428 => F8 longname3482 => F9 longname1484 => FA longname4940 => FAa longname1538 => FB longname4994 => FBa longname1592 => FC longname1646 => FD longname1700 => FE longname1754 => FF longname1808 => FG longname1862 => FH longname1916 => FI longname1970 => FJ longname2024 => FK longname2078 => FL longname2132 => FM longname2186 => FN longname2240 => FO longname2294 => FP longname2348 => FQ longname2402 => FR longname2456 => FS longname2510 => FT longname2564 => FU longname2618 => FV longname2672 => FW longname2726 => FX longname2780 => FY longname2834 => FZ longname2888 => F_ longname83 => Fa longname3536 => Faa longname137 => Fb longname3590 => Fba longname191 => Fc longname3644 => Fca longname245 => Fd longname3698 => Fda longname299 => Fe longname3752 => Fea longname352 => Ff longname3806 => Ffa longname406 => Fg longname3860 => Fga longname460 => Fh longname3914 => Fha longname514 => Fi longname3968 => Fia longname568 => Fj longname4022 => Fja longname622 => Fk longname4076 => Fka longname676 => Fl longname4130 => Fla longname730 => Fm longname4184 => Fma longname783 => Fn longname4238 => Fna longname836 => Fo longname4292 => Foa longname890 => Fp longname4346 => Fpa longname944 => Fq longname4400 => Fqa longname998 => Fr longname4454 => Fra longname1052 => Fs longname4508 => Fsa longname1106 => Ft longname4562 => Fta longname1160 => Fu longname4616 => Fua longname1214 => Fv longname4670 => Fva longname1268 => Fw longname4724 => Fwa longname1322 => Fx longname4778 => Fxa longname1376 => Fy longname4832 => Fya longname1430 => Fz longname4886 => Fza longname30 => G longname2943 => G$ longname2997 => G0 longname3051 => G1 longname3105 => G2 longname3159 => G3 longname3213 => G4 longname3267 => G5 longname3321 => G6 longname3375 => G7 longname3429 => G8 longname3483 => G9 longname1485 => GA longname4941 => GAa longname1539 => GB longname4995 => GBa longname1593 => GC longname1647 => GD longname1701 => GE longname1755 => GF longname1809 => GG longname1863 => GH longname1917 => GI longname1971 => GJ longname2025 => GK longname2079 => GL longname2133 => GM longname2187 => GN longname2241 => GO longname2295 => GP longname2349 => GQ longname2403 => GR longname2457 => GS longname2511 => GT longname2565 => GU longname2619 => GV longname2673 => GW longname2727 => GX longname2781 => GY longname2835 => GZ longname2889 => G_ longname84 => Ga longname3537 => Gaa longname138 => Gb longname3591 => Gba longname192 => Gc longname3645 => Gca longname246 => Gd longname3699 => Gda longname300 => Ge longname3753 => Gea longname353 => Gf longname3807 => Gfa longname407 => Gg longname3861 => Gga longname461 => Gh longname3915 => Gha longname515 => Gi longname3969 => Gia longname569 => Gj longname4023 => Gja longname623 => Gk longname4077 => Gka longname677 => Gl longname4131 => Gla longname731 => Gm longname4185 => Gma longname784 => Gn longname4239 => Gna longname837 => Go longname4293 => Goa longname891 => Gp longname4347 => Gpa longname945 => Gq longname4401 => Gqa longname999 => Gr longname4455 => Gra longname1053 => Gs longname4509 => Gsa longname1107 => Gt longname4563 => Gta longname1161 => Gu longname4617 => Gua longname1215 => Gv longname4671 => Gva longname1269 => Gw longname4725 => Gwa longname1323 => Gx longname4779 => Gxa longname1377 => Gy longname4833 => Gya longname1431 => Gz longname4887 => Gza longname31 => H longname2944 => H$ longname2998 => H0 longname3052 => H1 longname3106 => H2 longname3160 => H3 longname3214 => H4 longname3268 => H5 longname3322 => H6 longname3376 => H7 longname3430 => H8 longname3484 => H9 longname1486 => HA longname4942 => HAa longname1540 => HB longname4996 => HBa longname1594 => HC longname1648 => HD longname1702 => HE longname1756 => HF longname1810 => HG longname1864 => HH longname1918 => HI longname1972 => HJ longname2026 => HK longname2080 => HL longname2134 => HM longname2188 => HN longname2242 => HO longname2296 => HP longname2350 => HQ longname2404 => HR longname2458 => HS longname2512 => HT longname2566 => HU longname2620 => HV longname2674 => HW longname2728 => HX longname2782 => HY longname2836 => HZ longname2890 => H_ longname85 => Ha longname3538 => Haa longname139 => Hb longname3592 => Hba longname193 => Hc longname3646 => Hca longname247 => Hd longname3700 => Hda longname301 => He longname3754 => Hea longname354 => Hf longname3808 => Hfa longname408 => Hg longname3862 => Hga longname462 => Hh longname3916 => Hha longname516 => Hi longname3970 => Hia longname570 => Hj longname4024 => Hja longname624 => Hk longname4078 => Hka longname678 => Hl longname4132 => Hla longname732 => Hm longname4186 => Hma longname785 => Hn longname4240 => Hna longname838 => Ho longname4294 => Hoa longname892 => Hp longname4348 => Hpa longname946 => Hq longname4402 => Hqa longname1000 => Hr longname4456 => Hra longname1054 => Hs longname4510 => Hsa longname1108 => Ht longname4564 => Hta longname1162 => Hu longname4618 => Hua longname1216 => Hv longname4672 => Hva longname1270 => Hw longname4726 => Hwa longname1324 => Hx longname4780 => Hxa longname1378 => Hy longname4834 => Hya longname1432 => Hz longname4888 => Hza longname32 => I longname2945 => I$ longname2999 => I0 longname3053 => I1 longname3107 => I2 longname3161 => I3 longname3215 => I4 longname3269 => I5 longname3323 => I6 longname3377 => I7 longname3431 => I8 longname3485 => I9 longname1487 => IA longname4943 => IAa longname1541 => IB longname4997 => IBa longname1595 => IC longname1649 => ID longname1703 => IE longname1757 => IF longname1811 => IG longname1865 => IH longname1919 => II longname1973 => IJ longname2027 => IK longname2081 => IL longname2135 => IM longname2189 => IN longname2243 => IO longname2297 => IP longname2351 => IQ longname2405 => IR longname2459 => IS longname2513 => IT longname2567 => IU longname2621 => IV longname2675 => IW longname2729 => IX longname2783 => IY longname2837 => IZ longname2891 => I_ longname86 => Ia longname3539 => Iaa longname140 => Ib longname3593 => Iba longname194 => Ic longname3647 => Ica longname248 => Id longname3701 => Ida longname302 => Ie longname3755 => Iea longname355 => If longname3809 => Ifa longname409 => Ig longname3863 => Iga longname463 => Ih longname3917 => Iha longname517 => Ii longname3971 => Iia longname571 => Ij longname4025 => Ija longname625 => Ik longname4079 => Ika longname679 => Il longname4133 => Ila longname733 => Im longname4187 => Ima longname786 => In longname4241 => Ina longname839 => Io longname4295 => Ioa longname893 => Ip longname4349 => Ipa longname947 => Iq longname4403 => Iqa longname1001 => Ir longname4457 => Ira longname1055 => Is longname4511 => Isa longname1109 => It longname4565 => Ita longname1163 => Iu longname4619 => Iua longname1217 => Iv longname4673 => Iva longname1271 => Iw longname4727 => Iwa longname1325 => Ix longname4781 => Ixa longname1379 => Iy longname4835 => Iya longname1433 => Iz longname4889 => Iza longname33 => J longname2946 => J$ longname3000 => J0 longname3054 => J1 longname3108 => J2 longname3162 => J3 longname3216 => J4 longname3270 => J5 longname3324 => J6 longname3378 => J7 longname3432 => J8 longname3486 => J9 longname1488 => JA longname4944 => JAa longname1542 => JB longname4998 => JBa longname1596 => JC longname1650 => JD longname1704 => JE longname1758 => JF longname1812 => JG longname1866 => JH longname1920 => JI longname1974 => JJ longname2028 => JK longname2082 => JL longname2136 => JM longname2190 => JN longname2244 => JO longname2298 => JP longname2352 => JQ longname2406 => JR longname2460 => JS longname2514 => JT longname2568 => JU longname2622 => JV longname2676 => JW longname2730 => JX longname2784 => JY longname2838 => JZ longname2892 => J_ longname87 => Ja longname3540 => Jaa longname141 => Jb longname3594 => Jba longname195 => Jc longname3648 => Jca longname249 => Jd longname3702 => Jda longname303 => Je longname3756 => Jea longname356 => Jf longname3810 => Jfa longname410 => Jg longname3864 => Jga longname464 => Jh longname3918 => Jha longname518 => Ji longname3972 => Jia longname572 => Jj longname4026 => Jja longname626 => Jk longname4080 => Jka longname680 => Jl longname4134 => Jla longname734 => Jm longname4188 => Jma longname787 => Jn longname4242 => Jna longname840 => Jo longname4296 => Joa longname894 => Jp longname4350 => Jpa longname948 => Jq longname4404 => Jqa longname1002 => Jr longname4458 => Jra longname1056 => Js longname4512 => Jsa longname1110 => Jt longname4566 => Jta longname1164 => Ju longname4620 => Jua longname1218 => Jv longname4674 => Jva longname1272 => Jw longname4728 => Jwa longname1326 => Jx longname4782 => Jxa longname1380 => Jy longname4836 => Jya longname1434 => Jz longname4890 => Jza longname34 => K longname2947 => K$ longname3001 => K0 longname3055 => K1 longname3109 => K2 longname3163 => K3 longname3217 => K4 longname3271 => K5 longname3325 => K6 longname3379 => K7 longname3433 => K8 longname3487 => K9 longname1489 => KA longname4945 => KAa longname1543 => KB longname4999 => KBa longname1597 => KC longname1651 => KD longname1705 => KE longname1759 => KF longname1813 => KG longname1867 => KH longname1921 => KI longname1975 => KJ longname2029 => KK longname2083 => KL longname2137 => KM longname2191 => KN longname2245 => KO longname2299 => KP longname2353 => KQ longname2407 => KR longname2461 => KS longname2515 => KT longname2569 => KU longname2623 => KV longname2677 => KW longname2731 => KX longname2785 => KY longname2839 => KZ longname2893 => K_ longname88 => Ka longname3541 => Kaa longname142 => Kb longname3595 => Kba longname196 => Kc longname3649 => Kca longname250 => Kd longname3703 => Kda longname304 => Ke longname3757 => Kea longname357 => Kf longname3811 => Kfa longname411 => Kg longname3865 => Kga longname465 => Kh longname3919 => Kha longname519 => Ki longname3973 => Kia longname573 => Kj longname4027 => Kja longname627 => Kk longname4081 => Kka longname681 => Kl longname4135 => Kla longname735 => Km longname4189 => Kma longname788 => Kn longname4243 => Kna longname841 => Ko longname4297 => Koa longname895 => Kp longname4351 => Kpa longname949 => Kq longname4405 => Kqa longname1003 => Kr longname4459 => Kra longname1057 => Ks longname4513 => Ksa longname1111 => Kt longname4567 => Kta longname1165 => Ku longname4621 => Kua longname1219 => Kv longname4675 => Kva longname1273 => Kw longname4729 => Kwa longname1327 => Kx longname4783 => Kxa longname1381 => Ky longname4837 => Kya longname1435 => Kz longname4891 => Kza longname35 => L longname2948 => L$ longname3002 => L0 longname3056 => L1 longname3110 => L2 longname3164 => L3 longname3218 => L4 longname3272 => L5 longname3326 => L6 longname3380 => L7 longname3434 => L8 longname3488 => L9 longname1490 => LA longname4946 => LAa longname1544 => LB longname3-only => LBa longname1598 => LC longname1652 => LD longname1706 => LE longname1760 => LF longname1814 => LG longname1868 => LH longname1922 => LI longname1976 => LJ longname2030 => LK longname2084 => LL longname2138 => LM longname2192 => LN longname2246 => LO longname2300 => LP longname2354 => LQ longname2408 => LR longname2462 => LS longname2516 => LT longname2570 => LU longname2624 => LV longname2678 => LW longname2732 => LX longname2786 => LY longname2840 => LZ longname2894 => L_ longname89 => La longname3542 => Laa longname143 => Lb longname3596 => Lba longname197 => Lc longname3650 => Lca longname251 => Ld longname3704 => Lda longname305 => Le longname3758 => Lea longname358 => Lf longname3812 => Lfa longname412 => Lg longname3866 => Lga longname466 => Lh longname3920 => Lha longname520 => Li longname3974 => Lia longname574 => Lj longname4028 => Lja longname628 => Lk longname4082 => Lka longname682 => Ll longname4136 => Lla longname736 => Lm longname4190 => Lma longname789 => Ln longname4244 => Lna longname842 => Lo longname4298 => Loa longname896 => Lp longname4352 => Lpa longname950 => Lq longname4406 => Lqa longname1004 => Lr longname4460 => Lra longname1058 => Ls longname4514 => Lsa longname1112 => Lt longname4568 => Lta longname1166 => Lu longname4622 => Lua longname1220 => Lv longname4676 => Lva longname1274 => Lw longname4730 => Lwa longname1328 => Lx longname4784 => Lxa longname1382 => Ly longname4838 => Lya longname1436 => Lz longname4892 => Lza longname36 => M longname2949 => M$ longname3003 => M0 longname3057 => M1 longname3111 => M2 longname3165 => M3 longname3219 => M4 longname3273 => M5 longname3327 => M6 longname3381 => M7 longname3435 => M8 longname3489 => M9 longname1491 => MA longname4947 => MAa longname1545 => MB tagname1 => MBa longname1599 => MC longname1653 => MD longname1707 => ME longname1761 => MF longname1815 => MG longname1869 => MH longname1923 => MI longname1977 => MJ longname2031 => MK longname2085 => ML longname2139 => MM longname2193 => MN longname2247 => MO longname2301 => MP longname2355 => MQ longname2409 => MR longname2463 => MS longname2517 => MT longname2571 => MU longname2625 => MV longname2679 => MW longname2733 => MX longname2787 => MY longname2841 => MZ longname2895 => M_ longname90 => Ma longname3543 => Maa longname144 => Mb longname3597 => Mba longname198 => Mc longname3651 => Mca longname252 => Md longname3705 => Mda longname306 => Me longname3759 => Mea longname359 => Mf longname3813 => Mfa longname413 => Mg longname3867 => Mga longname467 => Mh longname3921 => Mha longname521 => Mi longname3975 => Mia longname575 => Mj longname4029 => Mja longname629 => Mk longname4083 => Mka longname683 => Ml longname4137 => Mla longname737 => Mm longname4191 => Mma longname790 => Mn longname4245 => Mna longname843 => Mo longname4299 => Moa longname897 => Mp longname4353 => Mpa longname951 => Mq longname4407 => Mqa longname1005 => Mr longname4461 => Mra longname1059 => Ms longname4515 => Msa longname1113 => Mt longname4569 => Mta longname1167 => Mu longname4623 => Mua longname1221 => Mv longname4677 => Mva longname1275 => Mw longname4731 => Mwa longname1329 => Mx longname4785 => Mxa longname1383 => My longname4839 => Mya longname1437 => Mz longname4893 => Mza longname37 => N longname2950 => N$ longname3004 => N0 longname3058 => N1 longname3112 => N2 longname3166 => N3 longname3220 => N4 longname3274 => N5 longname3328 => N6 longname3382 => N7 longname3436 => N8 longname3490 => N9 longname1492 => NA longname4948 => NAa longname1546 => NB exp1 => NBa longname1600 => NC longname1654 => ND longname1708 => NE longname1762 => NF longname1816 => NG longname1870 => NH longname1924 => NI longname1978 => NJ longname2032 => NK longname2086 => NL longname2140 => NM longname2194 => NN longname2248 => NO longname2302 => NP longname2356 => NQ longname2410 => NR longname2464 => NS longname2518 => NT longname2572 => NU longname2626 => NV longname2680 => NW longname2734 => NX longname2788 => NY longname2842 => NZ longname2896 => N_ longname91 => Na longname3544 => Naa longname145 => Nb longname3598 => Nba longname199 => Nc longname3652 => Nca longname253 => Nd longname3706 => Nda longname307 => Ne longname3760 => Nea longname360 => Nf longname3814 => Nfa longname414 => Ng longname3868 => Nga longname468 => Nh longname3922 => Nha longname522 => Ni longname3976 => Nia longname576 => Nj longname4030 => Nja longname630 => Nk longname4084 => Nka longname684 => Nl longname4138 => Nla longname738 => Nm longname4192 => Nma longname791 => Nn longname4246 => Nna longname844 => No longname4300 => Noa longname898 => Np longname4354 => Npa longname952 => Nq longname4408 => Nqa longname1006 => Nr longname4462 => Nra longname1060 => Ns longname4516 => Nsa longname1114 => Nt longname4570 => Nta longname1168 => Nu longname4624 => Nua longname1222 => Nv longname4678 => Nva longname1276 => Nw longname4732 => Nwa longname1330 => Nx longname4786 => Nxa longname1384 => Ny longname4840 => Nya longname1438 => Nz longname4894 => Nza longname38 => O longname2951 => O$ longname3005 => O0 longname3059 => O1 longname3113 => O2 longname3167 => O3 longname3221 => O4 longname3275 => O5 longname3329 => O6 longname3383 => O7 longname3437 => O8 longname3491 => O9 longname1493 => OA longname4949 => OAa longname1547 => OB exp2 => OBa longname1601 => OC longname1655 => OD longname1709 => OE longname1763 => OF longname1817 => OG longname1871 => OH longname1925 => OI longname1979 => OJ longname2033 => OK longname2087 => OL longname2141 => OM longname2195 => ON longname2249 => OO longname2303 => OP longname2357 => OQ longname2411 => OR longname2465 => OS longname2519 => OT longname2573 => OU longname2627 => OV longname2681 => OW longname2735 => OX longname2789 => OY longname2843 => OZ longname2897 => O_ longname92 => Oa longname3545 => Oaa longname146 => Ob longname3599 => Oba longname200 => Oc longname3653 => Oca longname254 => Od longname3707 => Oda longname308 => Oe longname3761 => Oea longname361 => Of longname3815 => Ofa longname415 => Og longname3869 => Oga longname469 => Oh longname3923 => Oha longname523 => Oi longname3977 => Oia longname577 => Oj longname4031 => Oja longname631 => Ok longname4085 => Oka longname685 => Ol longname4139 => Ola longname739 => Om longname4193 => Oma longname792 => On longname4247 => Ona longname845 => Oo longname4301 => Ooa longname899 => Op longname4355 => Opa longname953 => Oq longname4409 => Oqa longname1007 => Or longname4463 => Ora longname1061 => Os longname4517 => Osa longname1115 => Ot longname4571 => Ota longname1169 => Ou longname4625 => Oua longname1223 => Ov longname4679 => Ova longname1277 => Ow longname4733 => Owa longname1331 => Ox longname4787 => Oxa longname1385 => Oy longname4841 => Oya longname1439 => Oz longname4895 => Oza longname39 => P longname2952 => P$ longname3006 => P0 longname3060 => P1 longname3114 => P2 longname3168 => P3 longname3222 => P4 longname3276 => P5 longname3330 => P6 longname3384 => P7 longname3438 => P8 longname3492 => P9 longname1494 => PA longname4950 => PAa longname1548 => PB tag1 => PBa longname1602 => PC longname1656 => PD longname1710 => PE longname1764 => PF longname1818 => PG longname1872 => PH longname1926 => PI longname1980 => PJ longname2034 => PK longname2088 => PL longname2142 => PM longname2196 => PN longname2250 => PO longname2304 => PP longname2358 => PQ longname2412 => PR longname2466 => PS longname2520 => PT longname2574 => PU longname2628 => PV longname2682 => PW longname2736 => PX longname2790 => PY longname2844 => PZ longname2898 => P_ longname93 => Pa longname3546 => Paa longname147 => Pb longname3600 => Pba longname201 => Pc longname3654 => Pca longname255 => Pd longname3708 => Pda longname309 => Pe longname3762 => Pea longname362 => Pf longname3816 => Pfa longname416 => Pg longname3870 => Pga longname470 => Ph longname3924 => Pha longname524 => Pi longname3978 => Pia longname578 => Pj longname4032 => Pja longname632 => Pk longname4086 => Pka longname686 => Pl longname4140 => Pla longname740 => Pm longname4194 => Pma longname793 => Pn longname4248 => Pna longname846 => Po longname4302 => Poa longname900 => Pp longname4356 => Ppa longname954 => Pq longname4410 => Pqa longname1008 => Pr longname4464 => Pra longname1062 => Ps longname4518 => Psa longname1116 => Pt longname4572 => Pta longname1170 => Pu longname4626 => Pua longname1224 => Pv longname4680 => Pva longname1278 => Pw longname4734 => Pwa longname1332 => Px longname4788 => Pxa longname1386 => Py longname4842 => Pya longname1440 => Pz longname4896 => Pza longname40 => Q longname2953 => Q$ longname3007 => Q0 longname3061 => Q1 longname3115 => Q2 longname3169 => Q3 longname3223 => Q4 longname3277 => Q5 longname3331 => Q6 longname3385 => Q7 longname3439 => Q8 longname3493 => Q9 longname1495 => QA longname4951 => QAa longname1549 => QB longname1603 => QC longname1657 => QD longname1711 => QE longname1765 => QF longname1819 => QG longname1873 => QH longname1927 => QI longname1981 => QJ longname2035 => QK longname2089 => QL longname2143 => QM longname2197 => QN longname2251 => QO longname2305 => QP longname2359 => QQ longname2413 => QR longname2467 => QS longname2521 => QT longname2575 => QU longname2629 => QV longname2683 => QW longname2737 => QX longname2791 => QY longname2845 => QZ longname2899 => Q_ longname94 => Qa longname3547 => Qaa longname148 => Qb longname3601 => Qba longname202 => Qc longname3655 => Qca longname256 => Qd longname3709 => Qda longname310 => Qe longname3763 => Qea longname363 => Qf longname3817 => Qfa longname417 => Qg longname3871 => Qga longname471 => Qh longname3925 => Qha longname525 => Qi longname3979 => Qia longname579 => Qj longname4033 => Qja longname633 => Qk longname4087 => Qka longname687 => Ql longname4141 => Qla longname741 => Qm longname4195 => Qma longname794 => Qn longname4249 => Qna longname847 => Qo longname4303 => Qoa longname901 => Qp longname4357 => Qpa longname955 => Qq longname4411 => Qqa longname1009 => Qr longname4465 => Qra longname1063 => Qs longname4519 => Qsa longname1117 => Qt longname4573 => Qta longname1171 => Qu longname4627 => Qua longname1225 => Qv longname4681 => Qva longname1279 => Qw longname4735 => Qwa longname1333 => Qx longname4789 => Qxa longname1387 => Qy longname4843 => Qya longname1441 => Qz longname4897 => Qza longname41 => R longname2954 => R$ longname3008 => R0 longname3062 => R1 longname3116 => R2 longname3170 => R3 longname3224 => R4 longname3278 => R5 longname3332 => R6 longname3386 => R7 longname3440 => R8 longname3494 => R9 longname1496 => RA longname4952 => RAa longname1550 => RB longname1604 => RC longname1658 => RD longname1712 => RE longname1766 => RF longname1820 => RG longname1874 => RH longname1928 => RI longname1982 => RJ longname2036 => RK longname2090 => RL longname2144 => RM longname2198 => RN longname2252 => RO longname2306 => RP longname2360 => RQ longname2414 => RR longname2468 => RS longname2522 => RT longname2576 => RU longname2630 => RV longname2684 => RW longname2738 => RX longname2792 => RY longname2846 => RZ longname2900 => R_ longname95 => Ra longname3548 => Raa longname149 => Rb longname3602 => Rba longname203 => Rc longname3656 => Rca longname257 => Rd longname3710 => Rda longname311 => Re longname3764 => Rea longname364 => Rf longname3818 => Rfa longname418 => Rg longname3872 => Rga longname472 => Rh longname3926 => Rha longname526 => Ri longname3980 => Ria longname580 => Rj longname4034 => Rja longname634 => Rk longname4088 => Rka longname688 => Rl longname4142 => Rla longname742 => Rm longname4196 => Rma longname795 => Rn longname4250 => Rna longname848 => Ro longname4304 => Roa longname902 => Rp longname4358 => Rpa longname956 => Rq longname4412 => Rqa longname1010 => Rr longname4466 => Rra longname1064 => Rs longname4520 => Rsa longname1118 => Rt longname4574 => Rta longname1172 => Ru longname4628 => Rua longname1226 => Rv longname4682 => Rva longname1280 => Rw longname4736 => Rwa longname1334 => Rx longname4790 => Rxa longname1388 => Ry longname4844 => Rya longname1442 => Rz longname4898 => Rza longname42 => S longname2955 => S$ longname3009 => S0 longname3063 => S1 longname3117 => S2 longname3171 => S3 longname3225 => S4 longname3279 => S5 longname3333 => S6 longname3387 => S7 longname3441 => S8 longname3495 => S9 longname1497 => SA longname4953 => SAa longname1551 => SB longname1605 => SC longname1659 => SD longname1713 => SE longname1767 => SF longname1821 => SG longname1875 => SH longname1929 => SI longname1983 => SJ longname2037 => SK longname2091 => SL longname2145 => SM longname2199 => SN longname2253 => SO longname2307 => SP longname2361 => SQ longname2415 => SR longname2469 => SS longname2523 => ST longname2577 => SU longname2631 => SV longname2685 => SW longname2739 => SX longname2793 => SY longname2847 => SZ longname2901 => S_ longname96 => Sa longname3549 => Saa longname150 => Sb longname3603 => Sba longname204 => Sc longname3657 => Sca longname258 => Sd longname3711 => Sda longname312 => Se longname3765 => Sea longname365 => Sf longname3819 => Sfa longname419 => Sg longname3873 => Sga longname473 => Sh longname3927 => Sha longname527 => Si longname3981 => Sia longname581 => Sj longname4035 => Sja longname635 => Sk longname4089 => Ska longname689 => Sl longname4143 => Sla longname743 => Sm longname4197 => Sma longname796 => Sn longname4251 => Sna longname849 => So longname4305 => Soa longname903 => Sp longname4359 => Spa longname957 => Sq longname4413 => Sqa longname1011 => Sr longname4467 => Sra longname1065 => Ss longname4521 => Ssa longname1119 => St longname4575 => Sta longname1173 => Su longname4629 => Sua longname1227 => Sv longname4683 => Sva longname1281 => Sw longname4737 => Swa longname1335 => Sx longname4791 => Sxa longname1389 => Sy longname4845 => Sya longname1443 => Sz longname4899 => Sza longname43 => T longname2956 => T$ longname3010 => T0 longname3064 => T1 longname3118 => T2 longname3172 => T3 longname3226 => T4 longname3280 => T5 longname3334 => T6 longname3388 => T7 longname3442 => T8 longname3496 => T9 longname1498 => TA longname4954 => TAa longname1552 => TB longname1606 => TC longname1660 => TD longname1714 => TE longname1768 => TF longname1822 => TG longname1876 => TH longname1930 => TI longname1984 => TJ longname2038 => TK longname2092 => TL longname2146 => TM longname2200 => TN longname2254 => TO longname2308 => TP longname2362 => TQ longname2416 => TR longname2470 => TS longname2524 => TT longname2578 => TU longname2632 => TV longname2686 => TW longname2740 => TX longname2794 => TY longname2848 => TZ longname2902 => T_ longname97 => Ta longname3550 => Taa longname151 => Tb longname3604 => Tba longname205 => Tc longname3658 => Tca longname259 => Td longname3712 => Tda longname313 => Te longname3766 => Tea longname366 => Tf longname3820 => Tfa longname420 => Tg longname3874 => Tga longname474 => Th longname3928 => Tha longname528 => Ti longname3982 => Tia longname582 => Tj longname4036 => Tja longname636 => Tk longname4090 => Tka longname690 => Tl longname4144 => Tla longname744 => Tm longname4198 => Tma longname797 => Tn longname4252 => Tna longname850 => To longname4306 => Toa longname904 => Tp longname4360 => Tpa longname958 => Tq longname4414 => Tqa longname1012 => Tr longname4468 => Tra longname1066 => Ts longname4522 => Tsa longname1120 => Tt longname4576 => Tta longname1174 => Tu longname4630 => Tua longname1228 => Tv longname4684 => Tva longname1282 => Tw longname4738 => Twa longname1336 => Tx longname4792 => Txa longname1390 => Ty longname4846 => Tya longname1444 => Tz longname4900 => Tza longname44 => U longname2957 => U$ longname3011 => U0 longname3065 => U1 longname3119 => U2 longname3173 => U3 longname3227 => U4 longname3281 => U5 longname3335 => U6 longname3389 => U7 longname3443 => U8 longname3497 => U9 longname1499 => UA longname4955 => UAa longname1553 => UB longname1607 => UC longname1661 => UD longname1715 => UE longname1769 => UF longname1823 => UG longname1877 => UH longname1931 => UI longname1985 => UJ longname2039 => UK longname2093 => UL longname2147 => UM longname2201 => UN longname2255 => UO longname2309 => UP longname2363 => UQ longname2417 => UR longname2471 => US longname2525 => UT longname2579 => UU longname2633 => UV longname2687 => UW longname2741 => UX longname2795 => UY longname2849 => UZ longname2903 => U_ longname98 => Ua longname3551 => Uaa longname152 => Ub longname3605 => Uba longname206 => Uc longname3659 => Uca longname260 => Ud longname3713 => Uda longname314 => Ue longname3767 => Uea longname367 => Uf longname3821 => Ufa longname421 => Ug longname3875 => Uga longname475 => Uh longname3929 => Uha longname529 => Ui longname3983 => Uia longname583 => Uj longname4037 => Uja longname637 => Uk longname4091 => Uka longname691 => Ul longname4145 => Ula longname745 => Um longname4199 => Uma longname798 => Un longname4253 => Una longname851 => Uo longname4307 => Uoa longname905 => Up longname4361 => Upa longname959 => Uq longname4415 => Uqa longname1013 => Ur longname4469 => Ura longname1067 => Us longname4523 => Usa longname1121 => Ut longname4577 => Uta longname1175 => Uu longname4631 => Uua longname1229 => Uv longname4685 => Uva longname1283 => Uw longname4739 => Uwa longname1337 => Ux longname4793 => Uxa longname1391 => Uy longname4847 => Uya longname1445 => Uz longname4901 => Uza longname45 => V longname2958 => V$ longname3012 => V0 longname3066 => V1 longname3120 => V2 longname3174 => V3 longname3228 => V4 longname3282 => V5 longname3336 => V6 longname3390 => V7 longname3444 => V8 longname3498 => V9 longname1500 => VA longname4956 => VAa longname1554 => VB longname1608 => VC longname1662 => VD longname1716 => VE longname1770 => VF longname1824 => VG longname1878 => VH longname1932 => VI longname1986 => VJ longname2040 => VK longname2094 => VL longname2148 => VM longname2202 => VN longname2256 => VO longname2310 => VP longname2364 => VQ longname2418 => VR longname2472 => VS longname2526 => VT longname2580 => VU longname2634 => VV longname2688 => VW longname2742 => VX longname2796 => VY longname2850 => VZ longname2904 => V_ longname99 => Va longname3552 => Vaa longname153 => Vb longname3606 => Vba longname207 => Vc longname3660 => Vca longname261 => Vd longname3714 => Vda longname315 => Ve longname3768 => Vea longname368 => Vf longname3822 => Vfa longname422 => Vg longname3876 => Vga longname476 => Vh longname3930 => Vha longname530 => Vi longname3984 => Via longname584 => Vj longname4038 => Vja longname638 => Vk longname4092 => Vka longname692 => Vl longname4146 => Vla longname746 => Vm longname4200 => Vma longname799 => Vn longname4254 => Vna longname852 => Vo longname4308 => Voa longname906 => Vp longname4362 => Vpa longname960 => Vq longname4416 => Vqa longname1014 => Vr longname4470 => Vra longname1068 => Vs longname4524 => Vsa longname1122 => Vt longname4578 => Vta longname1176 => Vu longname4632 => Vua longname1230 => Vv longname4686 => Vva longname1284 => Vw longname4740 => Vwa longname1338 => Vx longname4794 => Vxa longname1392 => Vy longname4848 => Vya longname1446 => Vz longname4902 => Vza longname46 => W longname2959 => W$ longname3013 => W0 longname3067 => W1 longname3121 => W2 longname3175 => W3 longname3229 => W4 longname3283 => W5 longname3337 => W6 longname3391 => W7 longname3445 => W8 longname3499 => W9 longname1501 => WA longname4957 => WAa longname1555 => WB longname1609 => WC longname1663 => WD longname1717 => WE longname1771 => WF longname1825 => WG longname1879 => WH longname1933 => WI longname1987 => WJ longname2041 => WK longname2095 => WL longname2149 => WM longname2203 => WN longname2257 => WO longname2311 => WP longname2365 => WQ longname2419 => WR longname2473 => WS longname2527 => WT longname2581 => WU longname2635 => WV longname2689 => WW longname2743 => WX longname2797 => WY longname2851 => WZ longname2905 => W_ longname100 => Wa longname3553 => Waa longname154 => Wb longname3607 => Wba longname208 => Wc longname3661 => Wca longname262 => Wd longname3715 => Wda longname316 => We longname3769 => Wea longname369 => Wf longname3823 => Wfa longname423 => Wg longname3877 => Wga longname477 => Wh longname3931 => Wha longname531 => Wi longname3985 => Wia longname585 => Wj longname4039 => Wja longname639 => Wk longname4093 => Wka longname693 => Wl longname4147 => Wla longname747 => Wm longname4201 => Wma longname800 => Wn longname4255 => Wna longname853 => Wo longname4309 => Woa longname907 => Wp longname4363 => Wpa longname961 => Wq longname4417 => Wqa longname1015 => Wr longname4471 => Wra longname1069 => Ws longname4525 => Wsa longname1123 => Wt longname4579 => Wta longname1177 => Wu longname4633 => Wua longname1231 => Wv longname4687 => Wva longname1285 => Ww longname4741 => Wwa longname1339 => Wx longname4795 => Wxa longname1393 => Wy longname4849 => Wya longname1447 => Wz longname4903 => Wza longname47 => X longname2960 => X$ longname3014 => X0 longname3068 => X1 longname3122 => X2 longname3176 => X3 longname3230 => X4 longname3284 => X5 longname3338 => X6 longname3392 => X7 longname3446 => X8 longname3500 => X9 longname1502 => XA longname4958 => XAa longname1556 => XB longname1610 => XC longname1664 => XD longname1718 => XE longname1772 => XF longname1826 => XG longname1880 => XH longname1934 => XI longname1988 => XJ longname2042 => XK longname2096 => XL longname2150 => XM longname2204 => XN longname2258 => XO longname2312 => XP longname2366 => XQ longname2420 => XR longname2474 => XS longname2528 => XT longname2582 => XU longname2636 => XV longname2690 => XW longname2744 => XX longname2798 => XY longname2852 => XZ longname2906 => X_ longname101 => Xa longname3554 => Xaa longname155 => Xb longname3608 => Xba longname209 => Xc longname3662 => Xca longname263 => Xd longname3716 => Xda longname317 => Xe longname3770 => Xea longname370 => Xf longname3824 => Xfa longname424 => Xg longname3878 => Xga longname478 => Xh longname3932 => Xha longname532 => Xi longname3986 => Xia longname586 => Xj longname4040 => Xja longname640 => Xk longname4094 => Xka longname694 => Xl longname4148 => Xla longname748 => Xm longname4202 => Xma longname801 => Xn longname4256 => Xna longname854 => Xo longname4310 => Xoa longname908 => Xp longname4364 => Xpa longname962 => Xq longname4418 => Xqa longname1016 => Xr longname4472 => Xra longname1070 => Xs longname4526 => Xsa longname1124 => Xt longname4580 => Xta longname1178 => Xu longname4634 => Xua longname1232 => Xv longname4688 => Xva longname1286 => Xw longname4742 => Xwa longname1340 => Xx longname4796 => Xxa longname1394 => Xy longname4850 => Xya longname1448 => Xz longname4904 => Xza longname48 => Y longname2961 => Y$ longname3015 => Y0 longname3069 => Y1 longname3123 => Y2 longname3177 => Y3 longname3231 => Y4 longname3285 => Y5 longname3339 => Y6 longname3393 => Y7 longname3447 => Y8 longname3501 => Y9 longname1503 => YA longname4959 => YAa longname1557 => YB longname1611 => YC longname1665 => YD longname1719 => YE longname1773 => YF longname1827 => YG longname1881 => YH longname1935 => YI longname1989 => YJ longname2043 => YK longname2097 => YL longname2151 => YM longname2205 => YN longname2259 => YO longname2313 => YP longname2367 => YQ longname2421 => YR longname2475 => YS longname2529 => YT longname2583 => YU longname2637 => YV longname2691 => YW longname2745 => YX longname2799 => YY longname2853 => YZ longname2907 => Y_ longname102 => Ya longname3555 => Yaa longname156 => Yb longname3609 => Yba longname210 => Yc longname3663 => Yca longname264 => Yd longname3717 => Yda longname318 => Ye longname3771 => Yea longname371 => Yf longname3825 => Yfa longname425 => Yg longname3879 => Yga longname479 => Yh longname3933 => Yha longname533 => Yi longname3987 => Yia longname587 => Yj longname4041 => Yja longname641 => Yk longname4095 => Yka longname695 => Yl longname4149 => Yla longname749 => Ym longname4203 => Yma longname802 => Yn longname4257 => Yna longname855 => Yo longname4311 => Yoa longname909 => Yp longname4365 => Ypa longname963 => Yq longname4419 => Yqa longname1017 => Yr longname4473 => Yra longname1071 => Ys longname4527 => Ysa longname1125 => Yt longname4581 => Yta longname1179 => Yu longname4635 => Yua longname1233 => Yv longname4689 => Yva longname1287 => Yw longname4743 => Ywa longname1341 => Yx longname4797 => Yxa longname1395 => Yy longname4851 => Yya longname1449 => Yz longname4905 => Yza longname49 => Z longname2962 => Z$ longname3016 => Z0 longname3070 => Z1 longname3124 => Z2 longname3178 => Z3 longname3232 => Z4 longname3286 => Z5 longname3340 => Z6 longname3394 => Z7 longname3448 => Z8 longname3502 => Z9 longname1504 => ZA longname4960 => ZAa longname1558 => ZB longname1612 => ZC longname1666 => ZD longname1720 => ZE longname1774 => ZF longname1828 => ZG longname1882 => ZH longname1936 => ZI longname1990 => ZJ longname2044 => ZK longname2098 => ZL longname2152 => ZM longname2206 => ZN longname2260 => ZO longname2314 => ZP longname2368 => ZQ longname2422 => ZR longname2476 => ZS longname2530 => ZT longname2584 => ZU longname2638 => ZV longname2692 => ZW longname2746 => ZX longname2800 => ZY longname2854 => ZZ longname2908 => Z_ longname103 => Za longname3556 => Zaa longname157 => Zb longname3610 => Zba longname211 => Zc longname3664 => Zca longname265 => Zd longname3718 => Zda longname319 => Ze longname3772 => Zea longname372 => Zf longname3826 => Zfa longname426 => Zg longname3880 => Zga longname480 => Zh longname3934 => Zha longname534 => Zi longname3988 => Zia longname588 => Zj longname4042 => Zja longname642 => Zk longname4096 => Zka longname696 => Zl longname4150 => Zla longname750 => Zm longname4204 => Zma longname803 => Zn longname4258 => Zna longname856 => Zo longname4312 => Zoa longname910 => Zp longname4366 => Zpa longname964 => Zq longname4420 => Zqa longname1018 => Zr longname4474 => Zra longname1072 => Zs longname4528 => Zsa longname1126 => Zt longname4582 => Zta longname1180 => Zu longname4636 => Zua longname1234 => Zv longname4690 => Zva longname1288 => Zw longname4744 => Zwa longname1342 => Zx longname4798 => Zxa longname1396 => Zy longname4852 => Zya longname1450 => Zz longname4906 => Zza longname50 => _ longname2963 => _$ longname3017 => _0 longname3071 => _1 longname3125 => _2 longname3179 => _3 longname3233 => _4 longname3287 => _5 longname3341 => _6 longname3395 => _7 longname3449 => _8 longname3503 => _9 longname1505 => _A longname4961 => _Aa longname1559 => _B longname1613 => _C longname1667 => _D longname1721 => _E longname1775 => _F longname1829 => _G longname1883 => _H longname1937 => _I longname1991 => _J longname2045 => _K longname2099 => _L longname2153 => _M longname2207 => _N longname2261 => _O longname2315 => _P longname2369 => _Q longname2423 => _R longname2477 => _S longname2531 => _T longname2585 => _U longname2639 => _V longname2693 => _W longname2747 => _X longname2801 => _Y longname2855 => _Z longname2909 => __ longname104 => _a longname3557 => _aa longname158 => _b longname3611 => _ba longname212 => _c longname3665 => _ca longname266 => _d longname3719 => _da longname320 => _e longname3773 => _ea longname373 => _f longname3827 => _fa longname427 => _g longname3881 => _ga longname481 => _h longname3935 => _ha longname535 => _i longname3989 => _ia longname589 => _j longname4043 => _ja longname643 => _k longname4097 => _ka longname697 => _l longname4151 => _la longname751 => _m longname4205 => _ma longname804 => _n longname4259 => _na longname857 => _o longname4313 => _oa longname911 => _p longname4367 => _pa longname965 => _q longname4421 => _qa longname1019 => _r longname4475 => _ra longname1073 => _s longname4529 => _sa longname1127 => _t longname4583 => _ta longname1181 => _u longname4637 => _ua longname1235 => _v longname4691 => _va longname1289 => _w longname4745 => _wa longname1343 => _x longname4799 => _xa longname1397 => _y longname4853 => _ya longname1451 => _z longname4907 => _za global => a longname2911 => a$ longname2965 => a0 longname3019 => a1 longname3073 => a2 longname3127 => a3 longname3181 => a4 longname3235 => a5 longname3289 => a6 longname3343 => a7 longname3397 => a8 longname3451 => a9 longname1453 => aA longname4909 => aAa longname1507 => aB longname4963 => aBa longname1561 => aC longname1615 => aD longname1669 => aE longname1723 => aF longname1777 => aG longname1831 => aH longname1885 => aI longname1939 => aJ longname1993 => aK longname2047 => aL longname2101 => aM longname2155 => aN longname2209 => aO longname2263 => aP longname2317 => aQ longname2371 => aR longname2425 => aS longname2479 => aT longname2533 => aU longname2587 => aV longname2641 => aW longname2695 => aX longname2749 => aY longname2803 => aZ longname2857 => a_ longname52 => aa longname3505 => aaa longname106 => ab longname3559 => aba longname160 => ac longname3613 => aca longname214 => ad longname3667 => ada longname268 => ae longname3721 => aea longname322 => af longname3775 => afa longname375 => ag longname3829 => aga longname429 => ah longname3883 => aha longname483 => ai longname3937 => aia longname537 => aj longname3991 => aja longname591 => ak longname4045 => aka longname645 => al longname4099 => ala longname699 => am longname4153 => ama longname753 => an longname4207 => ana longname806 => ao longname4261 => aoa longname859 => ap longname4315 => apa longname913 => aq longname4369 => aqa longname967 => ar longname4423 => ara longname1021 => as longname4477 => asa longname1075 => at longname4531 => ata longname1129 => au longname4585 => aua longname1183 => av longname4639 => ava longname1237 => aw longname4693 => awa longname1291 => ax longname4747 => axa longname1345 => ay longname4801 => aya longname1399 => az longname4855 => aza __memory_base => b longname2912 => b$ longname2966 => b0 longname3020 => b1 longname3074 => b2 longname3128 => b3 longname3182 => b4 longname3236 => b5 longname3290 => b6 longname3344 => b7 longname3398 => b8 longname3452 => b9 longname1454 => bA longname4910 => bAa longname1508 => bB longname4964 => bBa longname1562 => bC longname1616 => bD longname1670 => bE longname1724 => bF longname1778 => bG longname1832 => bH longname1886 => bI longname1940 => bJ longname1994 => bK longname2048 => bL longname2102 => bM longname2156 => bN longname2210 => bO longname2264 => bP longname2318 => bQ longname2372 => bR longname2426 => bS longname2480 => bT longname2534 => bU longname2588 => bV longname2642 => bW longname2696 => bX longname2750 => bY longname2804 => bZ longname2858 => b_ longname53 => ba longname3506 => baa longname107 => bb longname3560 => bba longname161 => bc longname3614 => bca longname215 => bd longname3668 => bda longname269 => be longname3722 => bea longname323 => bf longname3776 => bfa longname376 => bg longname3830 => bga longname430 => bh longname3884 => bha longname484 => bi longname3938 => bia longname538 => bj longname3992 => bja longname592 => bk longname4046 => bka longname646 => bl longname4100 => bla longname700 => bm longname4154 => bma longname754 => bn longname4208 => bna longname807 => bo longname4262 => boa longname860 => bp longname4316 => bpa longname914 => bq longname4370 => bqa longname968 => br longname4424 => bra longname1022 => bs longname4478 => bsa longname1076 => bt longname4532 => bta longname1130 => bu longname4586 => bua longname1184 => bv longname4640 => bva longname1238 => bw longname4694 => bwa longname1292 => bx longname4748 => bxa longname1346 => by longname4802 => bya longname1400 => bz longname4856 => bza __table_base => c longname2913 => c$ longname2967 => c0 longname3021 => c1 longname3075 => c2 longname3129 => c3 longname3183 => c4 longname3237 => c5 longname3291 => c6 longname3345 => c7 longname3399 => c8 longname3453 => c9 longname1455 => cA longname4911 => cAa longname1509 => cB longname4965 => cBa longname1563 => cC longname1617 => cD longname1671 => cE longname1725 => cF longname1779 => cG longname1833 => cH longname1887 => cI longname1941 => cJ longname1995 => cK longname2049 => cL longname2103 => cM longname2157 => cN longname2211 => cO longname2265 => cP longname2319 => cQ longname2373 => cR longname2427 => cS longname2481 => cT longname2535 => cU longname2589 => cV longname2643 => cW longname2697 => cX longname2751 => cY longname2805 => cZ longname2859 => c_ longname54 => ca longname3507 => caa longname108 => cb longname3561 => cba longname162 => cc longname3615 => cca longname216 => cd longname3669 => cda longname270 => ce longname3723 => cea longname324 => cf longname3777 => cfa longname377 => cg longname3831 => cga longname431 => ch longname3885 => cha longname485 => ci longname3939 => cia longname539 => cj longname3993 => cja longname593 => ck longname4047 => cka longname647 => cl longname4101 => cla longname701 => cm longname4155 => cma longname755 => cn longname4209 => cna longname808 => co longname4263 => coa longname861 => cp longname4317 => cpa longname915 => cq longname4371 => cqa longname969 => cr longname4425 => cra longname1023 => cs longname4479 => csa longname1077 => ct longname4533 => cta longname1131 => cu longname4587 => cua longname1185 => cv longname4641 => cva longname1239 => cw longname4695 => cwa longname1293 => cx longname4749 => cxa longname1347 => cy longname4803 => cya longname1401 => cz longname4857 => cza longname1 => d longname2914 => d$ longname2968 => d0 longname3022 => d1 longname3076 => d2 longname3130 => d3 longname3184 => d4 longname3238 => d5 longname3292 => d6 longname3346 => d7 longname3400 => d8 longname3454 => d9 longname1456 => dA longname4912 => dAa longname1510 => dB longname4966 => dBa longname1564 => dC longname1618 => dD longname1672 => dE longname1726 => dF longname1780 => dG longname1834 => dH longname1888 => dI longname1942 => dJ longname1996 => dK longname2050 => dL longname2104 => dM longname2158 => dN longname2212 => dO longname2266 => dP longname2320 => dQ longname2374 => dR longname2428 => dS longname2482 => dT longname2536 => dU longname2590 => dV longname2644 => dW longname2698 => dX longname2752 => dY longname2806 => dZ longname2860 => d_ longname55 => da longname3508 => daa longname109 => db longname3562 => dba longname163 => dc longname3616 => dca longname217 => dd longname3670 => dda longname271 => de longname3724 => dea longname325 => df longname3778 => dfa longname378 => dg longname3832 => dga longname432 => dh longname3886 => dha longname486 => di longname3940 => dia longname540 => dj longname3994 => dja longname594 => dk longname4048 => dka longname648 => dl longname4102 => dla longname702 => dm longname4156 => dma longname756 => dn longname4210 => dna longname4264 => doa longname862 => dp longname4318 => dpa longname916 => dq longname4372 => dqa longname970 => dr longname4426 => dra longname1024 => ds longname4480 => dsa longname1078 => dt longname4534 => dta longname1132 => du longname4588 => dua longname1186 => dv longname4642 => dva longname1240 => dw longname4696 => dwa longname1294 => dx longname4750 => dxa longname1348 => dy longname4804 => dya longname1402 => dz longname4858 => dza longname2 => e longname2915 => e$ longname2969 => e0 longname3023 => e1 longname3077 => e2 longname3131 => e3 longname3185 => e4 longname3239 => e5 longname3293 => e6 longname3347 => e7 longname3401 => e8 longname3455 => e9 longname1457 => eA longname4913 => eAa longname1511 => eB longname4967 => eBa longname1565 => eC longname1619 => eD longname1673 => eE longname1727 => eF longname1781 => eG longname1835 => eH longname1889 => eI longname1943 => eJ longname1997 => eK longname2051 => eL longname2105 => eM longname2159 => eN longname2213 => eO longname2267 => eP longname2321 => eQ longname2375 => eR longname2429 => eS longname2483 => eT longname2537 => eU longname2591 => eV longname2645 => eW longname2699 => eX longname2753 => eY longname2807 => eZ longname2861 => e_ longname56 => ea longname3509 => eaa longname110 => eb longname3563 => eba longname164 => ec longname3617 => eca longname218 => ed longname3671 => eda longname272 => ee longname3725 => eea longname326 => ef longname3779 => efa longname379 => eg longname3833 => ega longname433 => eh longname3887 => eha longname487 => ei longname3941 => eia longname541 => ej longname3995 => eja longname595 => ek longname4049 => eka longname649 => el longname4103 => ela longname703 => em longname4157 => ema longname757 => en longname4211 => ena longname809 => eo longname4265 => eoa longname863 => ep longname4319 => epa longname917 => eq longname4373 => eqa longname971 => er longname4427 => era longname1025 => es longname4481 => esa longname1079 => et longname4535 => eta longname1133 => eu longname4589 => eua longname1187 => ev longname4643 => eva longname1241 => ew longname4697 => ewa longname1295 => ex longname4751 => exa longname1349 => ey longname4805 => eya longname1403 => ez longname4859 => eza longname3 => f longname2916 => f$ longname2970 => f0 longname3024 => f1 longname3078 => f2 longname3132 => f3 longname3186 => f4 longname3240 => f5 longname3294 => f6 longname3348 => f7 longname3402 => f8 longname3456 => f9 longname1458 => fA longname4914 => fAa longname1512 => fB longname4968 => fBa longname1566 => fC longname1620 => fD longname1674 => fE longname1728 => fF longname1782 => fG longname1836 => fH longname1890 => fI longname1944 => fJ longname1998 => fK longname2052 => fL longname2106 => fM longname2160 => fN longname2214 => fO longname2268 => fP longname2322 => fQ longname2376 => fR longname2430 => fS longname2484 => fT longname2538 => fU longname2592 => fV longname2646 => fW longname2700 => fX longname2754 => fY longname2808 => fZ longname2862 => f_ longname57 => fa longname3510 => faa longname111 => fb longname3564 => fba longname165 => fc longname3618 => fca longname219 => fd longname3672 => fda longname273 => fe longname3726 => fea longname327 => ff longname3780 => ffa longname380 => fg longname3834 => fga longname434 => fh longname3888 => fha longname488 => fi longname3942 => fia longname542 => fj longname3996 => fja longname596 => fk longname4050 => fka longname650 => fl longname4104 => fla longname704 => fm longname4158 => fma longname758 => fn longname4212 => fna longname810 => fo longname4266 => foa longname864 => fp longname4320 => fpa longname918 => fq longname4374 => fqa longname972 => fr longname4428 => fra longname1026 => fs longname4482 => fsa longname1080 => ft longname4536 => fta longname1134 => fu longname4590 => fua longname1188 => fv longname4644 => fva longname1242 => fw longname4698 => fwa longname1296 => fx longname4752 => fxa longname1350 => fy longname4806 => fya longname1404 => fz longname4860 => fza longname4 => g longname2917 => g$ longname2971 => g0 longname3025 => g1 longname3079 => g2 longname3133 => g3 longname3187 => g4 longname3241 => g5 longname3295 => g6 longname3349 => g7 longname3403 => g8 longname3457 => g9 longname1459 => gA longname4915 => gAa longname1513 => gB longname4969 => gBa longname1567 => gC longname1621 => gD longname1675 => gE longname1729 => gF longname1783 => gG longname1837 => gH longname1891 => gI longname1945 => gJ longname1999 => gK longname2053 => gL longname2107 => gM longname2161 => gN longname2215 => gO longname2269 => gP longname2323 => gQ longname2377 => gR longname2431 => gS longname2485 => gT longname2539 => gU longname2593 => gV longname2647 => gW longname2701 => gX longname2755 => gY longname2809 => gZ longname2863 => g_ longname58 => ga longname3511 => gaa longname112 => gb longname3565 => gba longname166 => gc longname3619 => gca longname220 => gd longname3673 => gda longname274 => ge longname3727 => gea longname328 => gf longname3781 => gfa longname381 => gg longname3835 => gga longname435 => gh longname3889 => gha longname489 => gi longname3943 => gia longname543 => gj longname3997 => gja longname597 => gk longname4051 => gka longname651 => gl longname4105 => gla longname705 => gm longname4159 => gma longname759 => gn longname4213 => gna longname811 => go longname4267 => goa longname865 => gp longname4321 => gpa longname919 => gq longname4375 => gqa longname973 => gr longname4429 => gra longname1027 => gs longname4483 => gsa longname1081 => gt longname4537 => gta longname1135 => gu longname4591 => gua longname1189 => gv longname4645 => gva longname1243 => gw longname4699 => gwa longname1297 => gx longname4753 => gxa longname1351 => gy longname4807 => gya longname1405 => gz longname4861 => gza longname5 => h longname2918 => h$ longname2972 => h0 longname3026 => h1 longname3080 => h2 longname3134 => h3 longname3188 => h4 longname3242 => h5 longname3296 => h6 longname3350 => h7 longname3404 => h8 longname3458 => h9 longname1460 => hA longname4916 => hAa longname1514 => hB longname4970 => hBa longname1568 => hC longname1622 => hD longname1676 => hE longname1730 => hF longname1784 => hG longname1838 => hH longname1892 => hI longname1946 => hJ longname2000 => hK longname2054 => hL longname2108 => hM longname2162 => hN longname2216 => hO longname2270 => hP longname2324 => hQ longname2378 => hR longname2432 => hS longname2486 => hT longname2540 => hU longname2594 => hV longname2648 => hW longname2702 => hX longname2756 => hY longname2810 => hZ longname2864 => h_ longname59 => ha longname3512 => haa longname113 => hb longname3566 => hba longname167 => hc longname3620 => hca longname221 => hd longname3674 => hda longname275 => he longname3728 => hea longname329 => hf longname3782 => hfa longname382 => hg longname3836 => hga longname436 => hh longname3890 => hha longname490 => hi longname3944 => hia longname544 => hj longname3998 => hja longname598 => hk longname4052 => hka longname652 => hl longname4106 => hla longname706 => hm longname4160 => hma longname760 => hn longname4214 => hna longname812 => ho longname4268 => hoa longname866 => hp longname4322 => hpa longname920 => hq longname4376 => hqa longname974 => hr longname4430 => hra longname1028 => hs longname4484 => hsa longname1082 => ht longname4538 => hta longname1136 => hu longname4592 => hua longname1190 => hv longname4646 => hva longname1244 => hw longname4700 => hwa longname1298 => hx longname4754 => hxa longname1352 => hy longname4808 => hya longname1406 => hz longname4862 => hza longname6 => i longname2919 => i$ longname2973 => i0 longname3027 => i1 longname3081 => i2 longname3135 => i3 longname3189 => i4 longname3243 => i5 longname3297 => i6 longname3351 => i7 longname3405 => i8 longname3459 => i9 longname1461 => iA longname4917 => iAa longname1515 => iB longname4971 => iBa longname1569 => iC longname1623 => iD longname1677 => iE longname1731 => iF longname1785 => iG longname1839 => iH longname1893 => iI longname1947 => iJ longname2001 => iK longname2055 => iL longname2109 => iM longname2163 => iN longname2217 => iO longname2271 => iP longname2325 => iQ longname2379 => iR longname2433 => iS longname2487 => iT longname2541 => iU longname2595 => iV longname2649 => iW longname2703 => iX longname2757 => iY longname2811 => iZ longname2865 => i_ longname60 => ia longname3513 => iaa longname114 => ib longname3567 => iba longname168 => ic longname3621 => ica longname222 => id longname3675 => ida longname276 => ie longname3729 => iea longname3783 => ifa longname383 => ig longname3837 => iga longname437 => ih longname3891 => iha longname491 => ii longname3945 => iia longname545 => ij longname3999 => ija longname599 => ik longname4053 => ika longname653 => il longname4107 => ila longname707 => im longname4161 => ima longname4215 => ina longname813 => io longname4269 => ioa longname867 => ip longname4323 => ipa longname921 => iq longname4377 => iqa longname975 => ir longname4431 => ira longname1029 => is longname4485 => isa longname1083 => it longname4539 => ita longname1137 => iu longname4593 => iua longname1191 => iv longname4647 => iva longname1245 => iw longname4701 => iwa longname1299 => ix longname4755 => ixa longname1353 => iy longname4809 => iya longname1407 => iz longname4863 => iza longname7 => j longname2920 => j$ longname2974 => j0 longname3028 => j1 longname3082 => j2 longname3136 => j3 longname3190 => j4 longname3244 => j5 longname3298 => j6 longname3352 => j7 longname3406 => j8 longname3460 => j9 longname1462 => jA longname4918 => jAa longname1516 => jB longname4972 => jBa longname1570 => jC longname1624 => jD longname1678 => jE longname1732 => jF longname1786 => jG longname1840 => jH longname1894 => jI longname1948 => jJ longname2002 => jK longname2056 => jL longname2110 => jM longname2164 => jN longname2218 => jO longname2272 => jP longname2326 => jQ longname2380 => jR longname2434 => jS longname2488 => jT longname2542 => jU longname2596 => jV longname2650 => jW longname2704 => jX longname2758 => jY longname2812 => jZ longname2866 => j_ longname61 => ja longname3514 => jaa longname115 => jb longname3568 => jba longname169 => jc longname3622 => jca longname223 => jd longname3676 => jda longname277 => je longname3730 => jea longname330 => jf longname3784 => jfa longname384 => jg longname3838 => jga longname438 => jh longname3892 => jha longname492 => ji longname3946 => jia longname546 => jj longname4000 => jja longname600 => jk longname4054 => jka longname654 => jl longname4108 => jla longname708 => jm longname4162 => jma longname761 => jn longname4216 => jna longname814 => jo longname4270 => joa longname868 => jp longname4324 => jpa longname922 => jq longname4378 => jqa longname976 => jr longname4432 => jra longname1030 => js longname4486 => jsa longname1084 => jt longname4540 => jta longname1138 => ju longname4594 => jua longname1192 => jv longname4648 => jva longname1246 => jw longname4702 => jwa longname1300 => jx longname4756 => jxa longname1354 => jy longname4810 => jya longname1408 => jz longname4864 => jza longname8 => k longname2921 => k$ longname2975 => k0 longname3029 => k1 longname3083 => k2 longname3137 => k3 longname3191 => k4 longname3245 => k5 longname3299 => k6 longname3353 => k7 longname3407 => k8 longname3461 => k9 longname1463 => kA longname4919 => kAa longname1517 => kB longname4973 => kBa longname1571 => kC longname1625 => kD longname1679 => kE longname1733 => kF longname1787 => kG longname1841 => kH longname1895 => kI longname1949 => kJ longname2003 => kK longname2057 => kL longname2111 => kM longname2165 => kN longname2219 => kO longname2273 => kP longname2327 => kQ longname2381 => kR longname2435 => kS longname2489 => kT longname2543 => kU longname2597 => kV longname2651 => kW longname2705 => kX longname2759 => kY longname2813 => kZ longname2867 => k_ longname62 => ka longname3515 => kaa longname116 => kb longname3569 => kba longname170 => kc longname3623 => kca longname224 => kd longname3677 => kda longname278 => ke longname3731 => kea longname331 => kf longname3785 => kfa longname385 => kg longname3839 => kga longname439 => kh longname3893 => kha longname493 => ki longname3947 => kia longname547 => kj longname4001 => kja longname601 => kk longname4055 => kka longname655 => kl longname4109 => kla longname709 => km longname4163 => kma longname762 => kn longname4217 => kna longname815 => ko longname4271 => koa longname869 => kp longname4325 => kpa longname923 => kq longname4379 => kqa longname977 => kr longname4433 => kra longname1031 => ks longname4487 => ksa longname1085 => kt longname4541 => kta longname1139 => ku longname4595 => kua longname1193 => kv longname4649 => kva longname1247 => kw longname4703 => kwa longname1301 => kx longname4757 => kxa longname1355 => ky longname4811 => kya longname1409 => kz longname4865 => kza longname9 => l longname2922 => l$ longname2976 => l0 longname3030 => l1 longname3084 => l2 longname3138 => l3 longname3192 => l4 longname3246 => l5 longname3300 => l6 longname3354 => l7 longname3408 => l8 longname3462 => l9 longname1464 => lA longname4920 => lAa longname1518 => lB longname4974 => lBa longname1572 => lC longname1626 => lD longname1680 => lE longname1734 => lF longname1788 => lG longname1842 => lH longname1896 => lI longname1950 => lJ longname2004 => lK longname2058 => lL longname2112 => lM longname2166 => lN longname2220 => lO longname2274 => lP longname2328 => lQ longname2382 => lR longname2436 => lS longname2490 => lT longname2544 => lU longname2598 => lV longname2652 => lW longname2706 => lX longname2760 => lY longname2814 => lZ longname2868 => l_ longname63 => la longname3516 => laa longname117 => lb longname3570 => lba longname171 => lc longname3624 => lca longname225 => ld longname3678 => lda longname279 => le longname3732 => lea longname332 => lf longname3786 => lfa longname386 => lg longname3840 => lga longname440 => lh longname3894 => lha longname494 => li longname3948 => lia longname548 => lj longname4002 => lja longname602 => lk longname4056 => lka longname656 => ll longname4110 => lla longname710 => lm longname4164 => lma longname763 => ln longname4218 => lna longname816 => lo longname4272 => loa longname870 => lp longname4326 => lpa longname924 => lq longname4380 => lqa longname978 => lr longname4434 => lra longname1032 => ls longname4488 => lsa longname1086 => lt longname4542 => lta longname1140 => lu longname4596 => lua longname1194 => lv longname4650 => lva longname1248 => lw longname4704 => lwa longname1302 => lx longname4758 => lxa longname1356 => ly longname4812 => lya longname1410 => lz longname4866 => lza longname10 => m longname2923 => m$ longname2977 => m0 longname3031 => m1 longname3085 => m2 longname3139 => m3 longname3193 => m4 longname3247 => m5 longname3301 => m6 longname3355 => m7 longname3409 => m8 longname3463 => m9 longname1465 => mA longname4921 => mAa longname1519 => mB longname4975 => mBa longname1573 => mC longname1627 => mD longname1681 => mE longname1735 => mF longname1789 => mG longname1843 => mH longname1897 => mI longname1951 => mJ longname2005 => mK longname2059 => mL longname2113 => mM longname2167 => mN longname2221 => mO longname2275 => mP longname2329 => mQ longname2383 => mR longname2437 => mS longname2491 => mT longname2545 => mU longname2599 => mV longname2653 => mW longname2707 => mX longname2761 => mY longname2815 => mZ longname2869 => m_ longname64 => ma longname3517 => maa longname118 => mb longname3571 => mba longname172 => mc longname3625 => mca longname226 => md longname3679 => mda longname280 => me longname3733 => mea longname333 => mf longname3787 => mfa longname387 => mg longname3841 => mga longname441 => mh longname3895 => mha longname495 => mi longname3949 => mia longname549 => mj longname4003 => mja longname603 => mk longname4057 => mka longname657 => ml longname4111 => mla longname711 => mm longname4165 => mma longname764 => mn longname4219 => mna longname817 => mo longname4273 => moa longname871 => mp longname4327 => mpa longname925 => mq longname4381 => mqa longname979 => mr longname4435 => mra longname1033 => ms longname4489 => msa longname1087 => mt longname4543 => mta longname1141 => mu longname4597 => mua longname1195 => mv longname4651 => mva longname1249 => mw longname4705 => mwa longname1303 => mx longname4759 => mxa longname1357 => my longname4813 => mya longname1411 => mz longname4867 => mza longname11 => n longname2924 => n$ longname2978 => n0 longname3032 => n1 longname3086 => n2 longname3140 => n3 longname3194 => n4 longname3248 => n5 longname3302 => n6 longname3356 => n7 longname3410 => n8 longname3464 => n9 longname1466 => nA longname4922 => nAa longname1520 => nB longname4976 => nBa longname1574 => nC longname1628 => nD longname1682 => nE longname1736 => nF longname1790 => nG longname1844 => nH longname1898 => nI longname1952 => nJ longname2006 => nK longname2060 => nL longname2114 => nM longname2168 => nN longname2222 => nO longname2276 => nP longname2330 => nQ longname2384 => nR longname2438 => nS longname2492 => nT longname2546 => nU longname2600 => nV longname2654 => nW longname2708 => nX longname2762 => nY longname2816 => nZ longname2870 => n_ longname65 => na longname3518 => naa longname119 => nb longname3572 => nba longname173 => nc longname3626 => nca longname227 => nd longname3680 => nda longname281 => ne longname3734 => nea longname334 => nf longname3788 => nfa longname388 => ng longname3842 => nga longname442 => nh longname3896 => nha longname496 => ni longname3950 => nia longname550 => nj longname4004 => nja longname604 => nk longname4058 => nka longname658 => nl longname4112 => nla longname712 => nm longname4166 => nma longname765 => nn longname4220 => nna longname818 => no longname4274 => noa longname872 => np longname4328 => npa longname926 => nq longname4382 => nqa longname980 => nr longname4436 => nra longname1034 => ns longname4490 => nsa longname1088 => nt longname4544 => nta longname1142 => nu longname4598 => nua longname1196 => nv longname4652 => nva longname1250 => nw longname4706 => nwa longname1304 => nx longname4760 => nxa longname1358 => ny longname4814 => nya longname1412 => nz longname4868 => nza longname12 => o longname2925 => o$ longname2979 => o0 longname3033 => o1 longname3087 => o2 longname3141 => o3 longname3195 => o4 longname3249 => o5 longname3303 => o6 longname3357 => o7 longname3411 => o8 longname3465 => o9 longname1467 => oA longname4923 => oAa longname1521 => oB longname4977 => oBa longname1575 => oC longname1629 => oD longname1683 => oE longname1737 => oF longname1791 => oG longname1845 => oH longname1899 => oI longname1953 => oJ longname2007 => oK longname2061 => oL longname2115 => oM longname2169 => oN longname2223 => oO longname2277 => oP longname2331 => oQ longname2385 => oR longname2439 => oS longname2493 => oT longname2547 => oU longname2601 => oV longname2655 => oW longname2709 => oX longname2763 => oY longname2817 => oZ longname2871 => o_ longname66 => oa longname3519 => oaa longname120 => ob longname3573 => oba longname174 => oc longname3627 => oca longname228 => od longname3681 => oda longname282 => oe longname3735 => oea longname335 => of longname3789 => ofa longname389 => og longname3843 => oga longname443 => oh longname3897 => oha longname497 => oi longname3951 => oia longname551 => oj longname4005 => oja longname605 => ok longname4059 => oka longname659 => ol longname4113 => ola longname713 => om longname4167 => oma longname766 => on longname4221 => ona longname819 => oo longname4275 => ooa longname873 => op longname4329 => opa longname927 => oq longname4383 => oqa longname981 => or longname4437 => ora longname1035 => os longname4491 => osa longname1089 => ot longname4545 => ota longname1143 => ou longname4599 => oua longname1197 => ov longname4653 => ova longname1251 => ow longname4707 => owa longname1305 => ox longname4761 => oxa longname1359 => oy longname4815 => oya longname1413 => oz longname4869 => oza longname13 => p longname2926 => p$ longname2980 => p0 longname3034 => p1 longname3088 => p2 longname3142 => p3 longname3196 => p4 longname3250 => p5 longname3304 => p6 longname3358 => p7 longname3412 => p8 longname3466 => p9 longname1468 => pA longname4924 => pAa longname1522 => pB longname4978 => pBa longname1576 => pC longname1630 => pD longname1684 => pE longname1738 => pF longname1792 => pG longname1846 => pH longname1900 => pI longname1954 => pJ longname2008 => pK longname2062 => pL longname2116 => pM longname2170 => pN longname2224 => pO longname2278 => pP longname2332 => pQ longname2386 => pR longname2440 => pS longname2494 => pT longname2548 => pU longname2602 => pV longname2656 => pW longname2710 => pX longname2764 => pY longname2818 => pZ longname2872 => p_ longname67 => pa longname3520 => paa longname121 => pb longname3574 => pba longname175 => pc longname3628 => pca longname229 => pd longname3682 => pda longname283 => pe longname3736 => pea longname336 => pf longname3790 => pfa longname390 => pg longname3844 => pga longname444 => ph longname3898 => pha longname498 => pi longname3952 => pia longname552 => pj longname4006 => pja longname606 => pk longname4060 => pka longname660 => pl longname4114 => pla longname714 => pm longname4168 => pma longname767 => pn longname4222 => pna longname820 => po longname4276 => poa longname874 => pp longname4330 => ppa longname928 => pq longname4384 => pqa longname982 => pr longname4438 => pra longname1036 => ps longname4492 => psa longname1090 => pt longname4546 => pta longname1144 => pu longname4600 => pua longname1198 => pv longname4654 => pva longname1252 => pw longname4708 => pwa longname1306 => px longname4762 => pxa longname1360 => py longname4816 => pya longname1414 => pz longname4870 => pza longname14 => q longname2927 => q$ longname2981 => q0 longname3035 => q1 longname3089 => q2 longname3143 => q3 longname3197 => q4 longname3251 => q5 longname3305 => q6 longname3359 => q7 longname3413 => q8 longname3467 => q9 longname1469 => qA longname4925 => qAa longname1523 => qB longname4979 => qBa longname1577 => qC longname1631 => qD longname1685 => qE longname1739 => qF longname1793 => qG longname1847 => qH longname1901 => qI longname1955 => qJ longname2009 => qK longname2063 => qL longname2117 => qM longname2171 => qN longname2225 => qO longname2279 => qP longname2333 => qQ longname2387 => qR longname2441 => qS longname2495 => qT longname2549 => qU longname2603 => qV longname2657 => qW longname2711 => qX longname2765 => qY longname2819 => qZ longname2873 => q_ longname68 => qa longname3521 => qaa longname122 => qb longname3575 => qba longname176 => qc longname3629 => qca longname230 => qd longname3683 => qda longname284 => qe longname3737 => qea longname337 => qf longname3791 => qfa longname391 => qg longname3845 => qga longname445 => qh longname3899 => qha longname499 => qi longname3953 => qia longname553 => qj longname4007 => qja longname607 => qk longname4061 => qka longname661 => ql longname4115 => qla longname715 => qm longname4169 => qma longname768 => qn longname4223 => qna longname821 => qo longname4277 => qoa longname875 => qp longname4331 => qpa longname929 => qq longname4385 => qqa longname983 => qr longname4439 => qra longname1037 => qs longname4493 => qsa longname1091 => qt longname4547 => qta longname1145 => qu longname4601 => qua longname1199 => qv longname4655 => qva longname1253 => qw longname4709 => qwa longname1307 => qx longname4763 => qxa longname1361 => qy longname4817 => qya longname1415 => qz longname4871 => qza longname15 => r longname2928 => r$ longname2982 => r0 longname3036 => r1 longname3090 => r2 longname3144 => r3 longname3198 => r4 longname3252 => r5 longname3306 => r6 longname3360 => r7 longname3414 => r8 longname3468 => r9 longname1470 => rA longname4926 => rAa longname1524 => rB longname4980 => rBa longname1578 => rC longname1632 => rD longname1686 => rE longname1740 => rF longname1794 => rG longname1848 => rH longname1902 => rI longname1956 => rJ longname2010 => rK longname2064 => rL longname2118 => rM longname2172 => rN longname2226 => rO longname2280 => rP longname2334 => rQ longname2388 => rR longname2442 => rS longname2496 => rT longname2550 => rU longname2604 => rV longname2658 => rW longname2712 => rX longname2766 => rY longname2820 => rZ longname2874 => r_ longname69 => ra longname3522 => raa longname123 => rb longname3576 => rba longname177 => rc longname3630 => rca longname231 => rd longname3684 => rda longname285 => re longname3738 => rea longname338 => rf longname3792 => rfa longname392 => rg longname3846 => rga longname446 => rh longname3900 => rha longname500 => ri longname3954 => ria longname554 => rj longname4008 => rja longname608 => rk longname4062 => rka longname662 => rl longname4116 => rla longname716 => rm longname4170 => rma longname769 => rn longname4224 => rna longname822 => ro longname4278 => roa longname876 => rp longname4332 => rpa longname930 => rq longname4386 => rqa longname984 => rr longname4440 => rra longname1038 => rs longname4494 => rsa longname1092 => rt longname4548 => rta longname1146 => ru longname4602 => rua longname1200 => rv longname4656 => rva longname1254 => rw longname4710 => rwa longname1308 => rx longname4764 => rxa longname1362 => ry longname4818 => rya longname1416 => rz longname4872 => rza longname16 => s longname2929 => s$ longname2983 => s0 longname3037 => s1 longname3091 => s2 longname3145 => s3 longname3199 => s4 longname3253 => s5 longname3307 => s6 longname3361 => s7 longname3415 => s8 longname3469 => s9 longname1471 => sA longname4927 => sAa longname1525 => sB longname4981 => sBa longname1579 => sC longname1633 => sD longname1687 => sE longname1741 => sF longname1795 => sG longname1849 => sH longname1903 => sI longname1957 => sJ longname2011 => sK longname2065 => sL longname2119 => sM longname2173 => sN longname2227 => sO longname2281 => sP longname2335 => sQ longname2389 => sR longname2443 => sS longname2497 => sT longname2551 => sU longname2605 => sV longname2659 => sW longname2713 => sX longname2767 => sY longname2821 => sZ longname2875 => s_ longname70 => sa longname3523 => saa longname124 => sb longname3577 => sba longname178 => sc longname3631 => sca longname232 => sd longname3685 => sda longname286 => se longname3739 => sea longname339 => sf longname3793 => sfa longname393 => sg longname3847 => sga longname447 => sh longname3901 => sha longname501 => si longname3955 => sia longname555 => sj longname4009 => sja longname609 => sk longname4063 => ska longname663 => sl longname4117 => sla longname717 => sm longname4171 => sma longname770 => sn longname4225 => sna longname823 => so longname4279 => soa longname877 => sp longname4333 => spa longname931 => sq longname4387 => sqa longname985 => sr longname4441 => sra longname1039 => ss longname4495 => ssa longname1093 => st longname4549 => sta longname1147 => su longname4603 => sua longname1201 => sv longname4657 => sva longname1255 => sw longname4711 => swa longname1309 => sx longname4765 => sxa longname1363 => sy longname4819 => sya longname1417 => sz longname4873 => sza longname17 => t longname2930 => t$ longname2984 => t0 longname3038 => t1 longname3092 => t2 longname3146 => t3 longname3200 => t4 longname3254 => t5 longname3308 => t6 longname3362 => t7 longname3416 => t8 longname3470 => t9 longname1472 => tA longname4928 => tAa longname1526 => tB longname4982 => tBa longname1580 => tC longname1634 => tD longname1688 => tE longname1742 => tF longname1796 => tG longname1850 => tH longname1904 => tI longname1958 => tJ longname2012 => tK longname2066 => tL longname2120 => tM longname2174 => tN longname2228 => tO longname2282 => tP longname2336 => tQ longname2390 => tR longname2444 => tS longname2498 => tT longname2552 => tU longname2606 => tV longname2660 => tW longname2714 => tX longname2768 => tY longname2822 => tZ longname2876 => t_ longname71 => ta longname3524 => taa longname125 => tb longname3578 => tba longname179 => tc longname3632 => tca longname233 => td longname3686 => tda longname287 => te longname3740 => tea longname340 => tf longname3794 => tfa longname394 => tg longname3848 => tga longname448 => th longname3902 => tha longname502 => ti longname3956 => tia longname556 => tj longname4010 => tja longname610 => tk longname4064 => tka longname664 => tl longname4118 => tla longname718 => tm longname4172 => tma longname771 => tn longname4226 => tna longname824 => to longname4280 => toa longname878 => tp longname4334 => tpa longname932 => tq longname4388 => tqa longname986 => tr longname4442 => tra longname1040 => ts longname4496 => tsa longname1094 => tt longname4550 => tta longname1148 => tu longname4604 => tua longname1202 => tv longname4658 => tva longname1256 => tw longname4712 => twa longname1310 => tx longname4766 => txa longname1364 => ty longname4820 => tya longname1418 => tz longname4874 => tza longname18 => u longname2931 => u$ longname2985 => u0 longname3039 => u1 longname3093 => u2 longname3147 => u3 longname3201 => u4 longname3255 => u5 longname3309 => u6 longname3363 => u7 longname3417 => u8 longname3471 => u9 longname1473 => uA longname4929 => uAa longname1527 => uB longname4983 => uBa longname1581 => uC longname1635 => uD longname1689 => uE longname1743 => uF longname1797 => uG longname1851 => uH longname1905 => uI longname1959 => uJ longname2013 => uK longname2067 => uL longname2121 => uM longname2175 => uN longname2229 => uO longname2283 => uP longname2337 => uQ longname2391 => uR longname2445 => uS longname2499 => uT longname2553 => uU longname2607 => uV longname2661 => uW longname2715 => uX longname2769 => uY longname2823 => uZ longname2877 => u_ longname72 => ua longname3525 => uaa longname126 => ub longname3579 => uba longname180 => uc longname3633 => uca longname234 => ud longname3687 => uda longname288 => ue longname3741 => uea longname341 => uf longname3795 => ufa longname395 => ug longname3849 => uga longname449 => uh longname3903 => uha longname503 => ui longname3957 => uia longname557 => uj longname4011 => uja longname611 => uk longname4065 => uka longname665 => ul longname4119 => ula longname719 => um longname4173 => uma longname772 => un longname4227 => una longname825 => uo longname4281 => uoa longname879 => up longname4335 => upa longname933 => uq longname4389 => uqa longname987 => ur longname4443 => ura longname1041 => us longname4497 => usa longname1095 => ut longname4551 => uta longname1149 => uu longname4605 => uua longname1203 => uv longname4659 => uva longname1257 => uw longname4713 => uwa longname1311 => ux longname4767 => uxa longname1365 => uy longname4821 => uya longname1419 => uz longname4875 => uza longname19 => v longname2932 => v$ longname2986 => v0 longname3040 => v1 longname3094 => v2 longname3148 => v3 longname3202 => v4 longname3256 => v5 longname3310 => v6 longname3364 => v7 longname3418 => v8 longname3472 => v9 longname1474 => vA longname4930 => vAa longname1528 => vB longname4984 => vBa longname1582 => vC longname1636 => vD longname1690 => vE longname1744 => vF longname1798 => vG longname1852 => vH longname1906 => vI longname1960 => vJ longname2014 => vK longname2068 => vL longname2122 => vM longname2176 => vN longname2230 => vO longname2284 => vP longname2338 => vQ longname2392 => vR longname2446 => vS longname2500 => vT longname2554 => vU longname2608 => vV longname2662 => vW longname2716 => vX longname2770 => vY longname2824 => vZ longname2878 => v_ longname73 => va longname3526 => vaa longname127 => vb longname3580 => vba longname181 => vc longname3634 => vca longname235 => vd longname3688 => vda longname289 => ve longname3742 => vea longname342 => vf longname3796 => vfa longname396 => vg longname3850 => vga longname450 => vh longname3904 => vha longname504 => vi longname3958 => via longname558 => vj longname4012 => vja longname612 => vk longname4066 => vka longname666 => vl longname4120 => vla longname720 => vm longname4174 => vma longname773 => vn longname4228 => vna longname826 => vo longname4282 => voa longname880 => vp longname4336 => vpa longname934 => vq longname4390 => vqa longname988 => vr longname4444 => vra longname1042 => vs longname4498 => vsa longname1096 => vt longname4552 => vta longname1150 => vu longname4606 => vua longname1204 => vv longname4660 => vva longname1258 => vw longname4714 => vwa longname1312 => vx longname4768 => vxa longname1366 => vy longname4822 => vya longname1420 => vz longname4876 => vza longname20 => w longname2933 => w$ longname2987 => w0 longname3041 => w1 longname3095 => w2 longname3149 => w3 longname3203 => w4 longname3257 => w5 longname3311 => w6 longname3365 => w7 longname3419 => w8 longname3473 => w9 longname1475 => wA longname4931 => wAa longname1529 => wB longname4985 => wBa longname1583 => wC longname1637 => wD longname1691 => wE longname1745 => wF longname1799 => wG longname1853 => wH longname1907 => wI longname1961 => wJ longname2015 => wK longname2069 => wL longname2123 => wM longname2177 => wN longname2231 => wO longname2285 => wP longname2339 => wQ longname2393 => wR longname2447 => wS longname2501 => wT longname2555 => wU longname2609 => wV longname2663 => wW longname2717 => wX longname2771 => wY longname2825 => wZ longname2879 => w_ longname74 => wa longname3527 => waa longname128 => wb longname3581 => wba longname182 => wc longname3635 => wca longname236 => wd longname3689 => wda longname290 => we longname3743 => wea longname343 => wf longname3797 => wfa longname397 => wg longname3851 => wga longname451 => wh longname3905 => wha longname505 => wi longname3959 => wia longname559 => wj longname4013 => wja longname613 => wk longname4067 => wka longname667 => wl longname4121 => wla longname721 => wm longname4175 => wma longname774 => wn longname4229 => wna longname827 => wo longname4283 => woa longname881 => wp longname4337 => wpa longname935 => wq longname4391 => wqa longname989 => wr longname4445 => wra longname1043 => ws longname4499 => wsa longname1097 => wt longname4553 => wta longname1151 => wu longname4607 => wua longname1205 => wv longname4661 => wva longname1259 => ww longname4715 => wwa longname1313 => wx longname4769 => wxa longname1367 => wy longname4823 => wya longname1421 => wz longname4877 => wza longname21 => x longname2934 => x$ longname2988 => x0 longname3042 => x1 longname3096 => x2 longname3150 => x3 longname3204 => x4 longname3258 => x5 longname3312 => x6 longname3366 => x7 longname3420 => x8 longname3474 => x9 longname1476 => xA longname4932 => xAa longname1530 => xB longname4986 => xBa longname1584 => xC longname1638 => xD longname1692 => xE longname1746 => xF longname1800 => xG longname1854 => xH longname1908 => xI longname1962 => xJ longname2016 => xK longname2070 => xL longname2124 => xM longname2178 => xN longname2232 => xO longname2286 => xP longname2340 => xQ longname2394 => xR longname2448 => xS longname2502 => xT longname2556 => xU longname2610 => xV longname2664 => xW longname2718 => xX longname2772 => xY longname2826 => xZ longname2880 => x_ longname75 => xa longname3528 => xaa longname129 => xb longname3582 => xba longname183 => xc longname3636 => xca longname237 => xd longname3690 => xda longname291 => xe longname3744 => xea longname344 => xf longname3798 => xfa longname398 => xg longname3852 => xga longname452 => xh longname3906 => xha longname506 => xi longname3960 => xia longname560 => xj longname4014 => xja longname614 => xk longname4068 => xka longname668 => xl longname4122 => xla longname722 => xm longname4176 => xma longname775 => xn longname4230 => xna longname828 => xo longname4284 => xoa longname882 => xp longname4338 => xpa longname936 => xq longname4392 => xqa longname990 => xr longname4446 => xra longname1044 => xs longname4500 => xsa longname1098 => xt longname4554 => xta longname1152 => xu longname4608 => xua longname1206 => xv longname4662 => xva longname1260 => xw longname4716 => xwa longname1314 => xx longname4770 => xxa longname1368 => xy longname4824 => xya longname1422 => xz longname4878 => xza longname22 => y longname2935 => y$ longname2989 => y0 longname3043 => y1 longname3097 => y2 longname3151 => y3 longname3205 => y4 longname3259 => y5 longname3313 => y6 longname3367 => y7 longname3421 => y8 longname3475 => y9 longname1477 => yA longname4933 => yAa longname1531 => yB longname4987 => yBa longname1585 => yC longname1639 => yD longname1693 => yE longname1747 => yF longname1801 => yG longname1855 => yH longname1909 => yI longname1963 => yJ longname2017 => yK longname2071 => yL longname2125 => yM longname2179 => yN longname2233 => yO longname2287 => yP longname2341 => yQ longname2395 => yR longname2449 => yS longname2503 => yT longname2557 => yU longname2611 => yV longname2665 => yW longname2719 => yX longname2773 => yY longname2827 => yZ longname2881 => y_ longname76 => ya longname3529 => yaa longname130 => yb longname3583 => yba longname184 => yc longname3637 => yca longname238 => yd longname3691 => yda longname292 => ye longname3745 => yea longname345 => yf longname3799 => yfa longname399 => yg longname3853 => yga longname453 => yh longname3907 => yha longname507 => yi longname3961 => yia longname561 => yj longname4015 => yja longname615 => yk longname4069 => yka longname669 => yl longname4123 => yla longname723 => ym longname4177 => yma longname776 => yn longname4231 => yna longname829 => yo longname4285 => yoa longname883 => yp longname4339 => ypa longname937 => yq longname4393 => yqa longname991 => yr longname4447 => yra longname1045 => ys longname4501 => ysa longname1099 => yt longname4555 => yta longname1153 => yu longname4609 => yua longname1207 => yv longname4663 => yva longname1261 => yw longname4717 => ywa longname1315 => yx longname4771 => yxa longname1369 => yy longname4825 => yya longname1423 => yz longname4879 => yza longname23 => z longname2936 => z$ longname2990 => z0 longname3044 => z1 longname3098 => z2 longname3152 => z3 longname3206 => z4 longname3260 => z5 longname3314 => z6 longname3368 => z7 longname3422 => z8 longname3476 => z9 longname1478 => zA longname4934 => zAa longname1532 => zB longname4988 => zBa longname1586 => zC longname1640 => zD longname1694 => zE longname1748 => zF longname1802 => zG longname1856 => zH longname1910 => zI longname1964 => zJ longname2018 => zK longname2072 => zL longname2126 => zM longname2180 => zN longname2234 => zO longname2288 => zP longname2342 => zQ longname2396 => zR longname2450 => zS longname2504 => zT longname2558 => zU longname2612 => zV longname2666 => zW longname2720 => zX longname2774 => zY longname2828 => zZ longname2882 => z_ longname77 => za longname3530 => zaa longname131 => zb longname3584 => zba longname185 => zc longname3638 => zca longname239 => zd longname3692 => zda longname293 => ze longname3746 => zea longname346 => zf longname3800 => zfa longname400 => zg longname3854 => zga longname454 => zh longname3908 => zha longname508 => zi longname3962 => zia longname562 => zj longname4016 => zja longname616 => zk longname4070 => zka longname670 => zl longname4124 => zla longname724 => zm longname4178 => zma longname777 => zn longname4232 => zna longname830 => zo longname4286 => zoa longname884 => zp longname4340 => zpa longname938 => zq longname4394 => zqa longname992 => zr longname4448 => zra longname1046 => zs longname4502 => zsa longname1100 => zt longname4556 => zta longname1154 => zu longname4610 => zua longname1208 => zv longname4664 => zva longname1262 => zw longname4718 => zwa longname1316 => zx longname4772 => zxa longname1370 => zy longname4826 => zya longname1424 => zz longname4880 => zza (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "a" (global $gimport$0 i32)) (import "env" "b" (global $gimport$1 i32)) (import "env" "c" (global $gimport$2 i32)) (import "env" "d" (func $internal1)) (import "env" "e" (func $internal2)) (import "env" "f" (func $internal3)) (import "env" "g" (func $internal4)) (import "env" "h" (func $internal5)) (import "env" "i" (func $internal6)) (import "env" "j" (func $internal7)) (import "env" "k" (func $internal8)) (import "env" "l" (func $internal9)) (import "env" "m" (func $internal10)) (import "env" "n" (func $internal11)) (import "env" "o" (func $internal12)) (import "env" "p" (func $internal13)) (import "env" "q" (func $internal14)) (import "env" "r" (func $internal15)) (import "env" "s" (func $internal16)) (import "env" "t" (func $internal17)) (import "env" "u" (func $internal18)) (import "env" "v" (func $internal19)) (import "env" "w" (func $internal20)) (import "env" "x" (func $internal21)) (import "env" "y" (func $internal22)) (import "env" "z" (func $internal23)) (import "env" "A" (func $internal24)) (import "env" "B" (func $internal25)) (import "env" "C" (func $internal26)) (import "env" "D" (func $internal27)) (import "env" "E" (func $internal28)) (import "env" "F" (func $internal29)) (import "env" "G" (func $internal30)) (import "env" "H" (func $internal31)) (import "env" "I" (func $internal32)) (import "env" "J" (func $internal33)) (import "env" "K" (func $internal34)) (import "env" "L" (func $internal35)) (import "env" "M" (func $internal36)) (import "env" "N" (func $internal37)) (import "env" "O" (func $internal38)) (import "env" "P" (func $internal39)) (import "env" "Q" (func $internal40)) (import "env" "R" (func $internal41)) (import "env" "S" (func $internal42)) (import "env" "T" (func $internal43)) (import "env" "U" (func $internal44)) (import "env" "V" (func $internal45)) (import "env" "W" (func $internal46)) (import "env" "X" (func $internal47)) (import "env" "Y" (func $internal48)) (import "env" "Z" (func $internal49)) (import "env" "_" (func $internal50)) (import "env" "$" (func $internal51)) (import "env" "aa" (func $internal52)) (import "env" "ba" (func $internal53)) (import "env" "ca" (func $internal54)) (import "env" "da" (func $internal55)) (import "env" "ea" (func $internal56)) (import "env" "fa" (func $internal57)) (import "env" "ga" (func $internal58)) (import "env" "ha" (func $internal59)) (import "env" "ia" (func $internal60)) (import "env" "ja" (func $internal61)) (import "env" "ka" (func $internal62)) (import "env" "la" (func $internal63)) (import "env" "ma" (func $internal64)) (import "env" "na" (func $internal65)) (import "env" "oa" (func $internal66)) (import "env" "pa" (func $internal67)) (import "env" "qa" (func $internal68)) (import "env" "ra" (func $internal69)) (import "env" "sa" (func $internal70)) (import "env" "ta" (func $internal71)) (import "env" "ua" (func $internal72)) (import "env" "va" (func $internal73)) (import "env" "wa" (func $internal74)) (import "env" "xa" (func $internal75)) (import "env" "ya" (func $internal76)) (import "env" "za" (func $internal77)) (import "env" "Aa" (func $internal78)) (import "env" "Ba" (func $internal79)) (import "env" "Ca" (func $internal80)) (import "env" "Da" (func $internal81)) (import "env" "Ea" (func $internal82)) (import "env" "Fa" (func $internal83)) (import "env" "Ga" (func $internal84)) (import "env" "Ha" (func $internal85)) (import "env" "Ia" (func $internal86)) (import "env" "Ja" (func $internal87)) (import "env" "Ka" (func $internal88)) (import "env" "La" (func $internal89)) (import "env" "Ma" (func $internal90)) (import "env" "Na" (func $internal91)) (import "env" "Oa" (func $internal92)) (import "env" "Pa" (func $internal93)) (import "env" "Qa" (func $internal94)) (import "env" "Ra" (func $internal95)) (import "env" "Sa" (func $internal96)) (import "env" "Ta" (func $internal97)) (import "env" "Ua" (func $internal98)) (import "env" "Va" (func $internal99)) (import "env" "Wa" (func $internal100)) (import "env" "Xa" (func $internal101)) (import "env" "Ya" (func $internal102)) (import "env" "Za" (func $internal103)) (import "env" "_a" (func $internal104)) (import "env" "$a" (func $internal105)) (import "env" "ab" (func $internal106)) (import "env" "bb" (func $internal107)) (import "env" "cb" (func $internal108)) (import "env" "db" (func $internal109)) (import "env" "eb" (func $internal110)) (import "env" "fb" (func $internal111)) (import "env" "gb" (func $internal112)) (import "env" "hb" (func $internal113)) (import "env" "ib" (func $internal114)) (import "env" "jb" (func $internal115)) (import "env" "kb" (func $internal116)) (import "env" "lb" (func $internal117)) (import "env" "mb" (func $internal118)) (import "env" "nb" (func $internal119)) (import "env" "ob" (func $internal120)) (import "env" "pb" (func $internal121)) (import "env" "qb" (func $internal122)) (import "env" "rb" (func $internal123)) (import "env" "sb" (func $internal124)) (import "env" "tb" (func $internal125)) (import "env" "ub" (func $internal126)) (import "env" "vb" (func $internal127)) (import "env" "wb" (func $internal128)) (import "env" "xb" (func $internal129)) (import "env" "yb" (func $internal130)) (import "env" "zb" (func $internal131)) (import "env" "Ab" (func $internal132)) (import "env" "Bb" (func $internal133)) (import "env" "Cb" (func $internal134)) (import "env" "Db" (func $internal135)) (import "env" "Eb" (func $internal136)) (import "env" "Fb" (func $internal137)) (import "env" "Gb" (func $internal138)) (import "env" "Hb" (func $internal139)) (import "env" "Ib" (func $internal140)) (import "env" "Jb" (func $internal141)) (import "env" "Kb" (func $internal142)) (import "env" "Lb" (func $internal143)) (import "env" "Mb" (func $internal144)) (import "env" "Nb" (func $internal145)) (import "env" "Ob" (func $internal146)) (import "env" "Pb" (func $internal147)) (import "env" "Qb" (func $internal148)) (import "env" "Rb" (func $internal149)) (import "env" "Sb" (func $internal150)) (import "env" "Tb" (func $internal151)) (import "env" "Ub" (func $internal152)) (import "env" "Vb" (func $internal153)) (import "env" "Wb" (func $internal154)) (import "env" "Xb" (func $internal155)) (import "env" "Yb" (func $internal156)) (import "env" "Zb" (func $internal157)) (import "env" "_b" (func $internal158)) (import "env" "$b" (func $internal159)) (import "env" "ac" (func $internal160)) (import "env" "bc" (func $internal161)) (import "env" "cc" (func $internal162)) (import "env" "dc" (func $internal163)) (import "env" "ec" (func $internal164)) (import "env" "fc" (func $internal165)) (import "env" "gc" (func $internal166)) (import "env" "hc" (func $internal167)) (import "env" "ic" (func $internal168)) (import "env" "jc" (func $internal169)) (import "env" "kc" (func $internal170)) (import "env" "lc" (func $internal171)) (import "env" "mc" (func $internal172)) (import "env" "nc" (func $internal173)) (import "env" "oc" (func $internal174)) (import "env" "pc" (func $internal175)) (import "env" "qc" (func $internal176)) (import "env" "rc" (func $internal177)) (import "env" "sc" (func $internal178)) (import "env" "tc" (func $internal179)) (import "env" "uc" (func $internal180)) (import "env" "vc" (func $internal181)) (import "env" "wc" (func $internal182)) (import "env" "xc" (func $internal183)) (import "env" "yc" (func $internal184)) (import "env" "zc" (func $internal185)) (import "env" "Ac" (func $internal186)) (import "env" "Bc" (func $internal187)) (import "env" "Cc" (func $internal188)) (import "env" "Dc" (func $internal189)) (import "env" "Ec" (func $internal190)) (import "env" "Fc" (func $internal191)) (import "env" "Gc" (func $internal192)) (import "env" "Hc" (func $internal193)) (import "env" "Ic" (func $internal194)) (import "env" "Jc" (func $internal195)) (import "env" "Kc" (func $internal196)) (import "env" "Lc" (func $internal197)) (import "env" "Mc" (func $internal198)) (import "env" "Nc" (func $internal199)) (import "env" "Oc" (func $internal200)) (import "env" "Pc" (func $internal201)) (import "env" "Qc" (func $internal202)) (import "env" "Rc" (func $internal203)) (import "env" "Sc" (func $internal204)) (import "env" "Tc" (func $internal205)) (import "env" "Uc" (func $internal206)) (import "env" "Vc" (func $internal207)) (import "env" "Wc" (func $internal208)) (import "env" "Xc" (func $internal209)) (import "env" "Yc" (func $internal210)) (import "env" "Zc" (func $internal211)) (import "env" "_c" (func $internal212)) (import "env" "$c" (func $internal213)) (import "env" "ad" (func $internal214)) (import "env" "bd" (func $internal215)) (import "env" "cd" (func $internal216)) (import "env" "dd" (func $internal217)) (import "env" "ed" (func $internal218)) (import "env" "fd" (func $internal219)) (import "env" "gd" (func $internal220)) (import "env" "hd" (func $internal221)) (import "env" "id" (func $internal222)) (import "env" "jd" (func $internal223)) (import "env" "kd" (func $internal224)) (import "env" "ld" (func $internal225)) (import "env" "md" (func $internal226)) (import "env" "nd" (func $internal227)) (import "env" "od" (func $internal228)) (import "env" "pd" (func $internal229)) (import "env" "qd" (func $internal230)) (import "env" "rd" (func $internal231)) (import "env" "sd" (func $internal232)) (import "env" "td" (func $internal233)) (import "env" "ud" (func $internal234)) (import "env" "vd" (func $internal235)) (import "env" "wd" (func $internal236)) (import "env" "xd" (func $internal237)) (import "env" "yd" (func $internal238)) (import "env" "zd" (func $internal239)) (import "env" "Ad" (func $internal240)) (import "env" "Bd" (func $internal241)) (import "env" "Cd" (func $internal242)) (import "env" "Dd" (func $internal243)) (import "env" "Ed" (func $internal244)) (import "env" "Fd" (func $internal245)) (import "env" "Gd" (func $internal246)) (import "env" "Hd" (func $internal247)) (import "env" "Id" (func $internal248)) (import "env" "Jd" (func $internal249)) (import "env" "Kd" (func $internal250)) (import "env" "Ld" (func $internal251)) (import "env" "Md" (func $internal252)) (import "env" "Nd" (func $internal253)) (import "env" "Od" (func $internal254)) (import "env" "Pd" (func $internal255)) (import "env" "Qd" (func $internal256)) (import "env" "Rd" (func $internal257)) (import "env" "Sd" (func $internal258)) (import "env" "Td" (func $internal259)) (import "env" "Ud" (func $internal260)) (import "env" "Vd" (func $internal261)) (import "env" "Wd" (func $internal262)) (import "env" "Xd" (func $internal263)) (import "env" "Yd" (func $internal264)) (import "env" "Zd" (func $internal265)) (import "env" "_d" (func $internal266)) (import "env" "$d" (func $internal267)) (import "env" "ae" (func $internal268)) (import "env" "be" (func $internal269)) (import "env" "ce" (func $internal270)) (import "env" "de" (func $internal271)) (import "env" "ee" (func $internal272)) (import "env" "fe" (func $internal273)) (import "env" "ge" (func $internal274)) (import "env" "he" (func $internal275)) (import "env" "ie" (func $internal276)) (import "env" "je" (func $internal277)) (import "env" "ke" (func $internal278)) (import "env" "le" (func $internal279)) (import "env" "me" (func $internal280)) (import "env" "ne" (func $internal281)) (import "env" "oe" (func $internal282)) (import "env" "pe" (func $internal283)) (import "env" "qe" (func $internal284)) (import "env" "re" (func $internal285)) (import "env" "se" (func $internal286)) (import "env" "te" (func $internal287)) (import "env" "ue" (func $internal288)) (import "env" "ve" (func $internal289)) (import "env" "we" (func $internal290)) (import "env" "xe" (func $internal291)) (import "env" "ye" (func $internal292)) (import "env" "ze" (func $internal293)) (import "env" "Ae" (func $internal294)) (import "env" "Be" (func $internal295)) (import "env" "Ce" (func $internal296)) (import "env" "De" (func $internal297)) (import "env" "Ee" (func $internal298)) (import "env" "Fe" (func $internal299)) (import "env" "Ge" (func $internal300)) (import "env" "He" (func $internal301)) (import "env" "Ie" (func $internal302)) (import "env" "Je" (func $internal303)) (import "env" "Ke" (func $internal304)) (import "env" "Le" (func $internal305)) (import "env" "Me" (func $internal306)) (import "env" "Ne" (func $internal307)) (import "env" "Oe" (func $internal308)) (import "env" "Pe" (func $internal309)) (import "env" "Qe" (func $internal310)) (import "env" "Re" (func $internal311)) (import "env" "Se" (func $internal312)) (import "env" "Te" (func $internal313)) (import "env" "Ue" (func $internal314)) (import "env" "Ve" (func $internal315)) (import "env" "We" (func $internal316)) (import "env" "Xe" (func $internal317)) (import "env" "Ye" (func $internal318)) (import "env" "Ze" (func $internal319)) (import "env" "_e" (func $internal320)) (import "env" "$e" (func $internal321)) (import "env" "af" (func $internal322)) (import "env" "bf" (func $internal323)) (import "env" "cf" (func $internal324)) (import "env" "df" (func $internal325)) (import "env" "ef" (func $internal326)) (import "env" "ff" (func $internal327)) (import "env" "gf" (func $internal328)) (import "env" "hf" (func $internal329)) (import "env" "jf" (func $internal330)) (import "env" "kf" (func $internal331)) (import "env" "lf" (func $internal332)) (import "env" "mf" (func $internal333)) (import "env" "nf" (func $internal334)) (import "env" "of" (func $internal335)) (import "env" "pf" (func $internal336)) (import "env" "qf" (func $internal337)) (import "env" "rf" (func $internal338)) (import "env" "sf" (func $internal339)) (import "env" "tf" (func $internal340)) (import "env" "uf" (func $internal341)) (import "env" "vf" (func $internal342)) (import "env" "wf" (func $internal343)) (import "env" "xf" (func $internal344)) (import "env" "yf" (func $internal345)) (import "env" "zf" (func $internal346)) (import "env" "Af" (func $internal347)) (import "env" "Bf" (func $internal348)) (import "env" "Cf" (func $internal349)) (import "env" "Df" (func $internal350)) (import "env" "Ef" (func $internal351)) (import "env" "Ff" (func $internal352)) (import "env" "Gf" (func $internal353)) (import "env" "Hf" (func $internal354)) (import "env" "If" (func $internal355)) (import "env" "Jf" (func $internal356)) (import "env" "Kf" (func $internal357)) (import "env" "Lf" (func $internal358)) (import "env" "Mf" (func $internal359)) (import "env" "Nf" (func $internal360)) (import "env" "Of" (func $internal361)) (import "env" "Pf" (func $internal362)) (import "env" "Qf" (func $internal363)) (import "env" "Rf" (func $internal364)) (import "env" "Sf" (func $internal365)) (import "env" "Tf" (func $internal366)) (import "env" "Uf" (func $internal367)) (import "env" "Vf" (func $internal368)) (import "env" "Wf" (func $internal369)) (import "env" "Xf" (func $internal370)) (import "env" "Yf" (func $internal371)) (import "env" "Zf" (func $internal372)) (import "env" "_f" (func $internal373)) (import "env" "$f" (func $internal374)) (import "env" "ag" (func $internal375)) (import "env" "bg" (func $internal376)) (import "env" "cg" (func $internal377)) (import "env" "dg" (func $internal378)) (import "env" "eg" (func $internal379)) (import "env" "fg" (func $internal380)) (import "env" "gg" (func $internal381)) (import "env" "hg" (func $internal382)) (import "env" "ig" (func $internal383)) (import "env" "jg" (func $internal384)) (import "env" "kg" (func $internal385)) (import "env" "lg" (func $internal386)) (import "env" "mg" (func $internal387)) (import "env" "ng" (func $internal388)) (import "env" "og" (func $internal389)) (import "env" "pg" (func $internal390)) (import "env" "qg" (func $internal391)) (import "env" "rg" (func $internal392)) (import "env" "sg" (func $internal393)) (import "env" "tg" (func $internal394)) (import "env" "ug" (func $internal395)) (import "env" "vg" (func $internal396)) (import "env" "wg" (func $internal397)) (import "env" "xg" (func $internal398)) (import "env" "yg" (func $internal399)) (import "env" "zg" (func $internal400)) (import "env" "Ag" (func $internal401)) (import "env" "Bg" (func $internal402)) (import "env" "Cg" (func $internal403)) (import "env" "Dg" (func $internal404)) (import "env" "Eg" (func $internal405)) (import "env" "Fg" (func $internal406)) (import "env" "Gg" (func $internal407)) (import "env" "Hg" (func $internal408)) (import "env" "Ig" (func $internal409)) (import "env" "Jg" (func $internal410)) (import "env" "Kg" (func $internal411)) (import "env" "Lg" (func $internal412)) (import "env" "Mg" (func $internal413)) (import "env" "Ng" (func $internal414)) (import "env" "Og" (func $internal415)) (import "env" "Pg" (func $internal416)) (import "env" "Qg" (func $internal417)) (import "env" "Rg" (func $internal418)) (import "env" "Sg" (func $internal419)) (import "env" "Tg" (func $internal420)) (import "env" "Ug" (func $internal421)) (import "env" "Vg" (func $internal422)) (import "env" "Wg" (func $internal423)) (import "env" "Xg" (func $internal424)) (import "env" "Yg" (func $internal425)) (import "env" "Zg" (func $internal426)) (import "env" "_g" (func $internal427)) (import "env" "$g" (func $internal428)) (import "env" "ah" (func $internal429)) (import "env" "bh" (func $internal430)) (import "env" "ch" (func $internal431)) (import "env" "dh" (func $internal432)) (import "env" "eh" (func $internal433)) (import "env" "fh" (func $internal434)) (import "env" "gh" (func $internal435)) (import "env" "hh" (func $internal436)) (import "env" "ih" (func $internal437)) (import "env" "jh" (func $internal438)) (import "env" "kh" (func $internal439)) (import "env" "lh" (func $internal440)) (import "env" "mh" (func $internal441)) (import "env" "nh" (func $internal442)) (import "env" "oh" (func $internal443)) (import "env" "ph" (func $internal444)) (import "env" "qh" (func $internal445)) (import "env" "rh" (func $internal446)) (import "env" "sh" (func $internal447)) (import "env" "th" (func $internal448)) (import "env" "uh" (func $internal449)) (import "env" "vh" (func $internal450)) (import "env" "wh" (func $internal451)) (import "env" "xh" (func $internal452)) (import "env" "yh" (func $internal453)) (import "env" "zh" (func $internal454)) (import "env" "Ah" (func $internal455)) (import "env" "Bh" (func $internal456)) (import "env" "Ch" (func $internal457)) (import "env" "Dh" (func $internal458)) (import "env" "Eh" (func $internal459)) (import "env" "Fh" (func $internal460)) (import "env" "Gh" (func $internal461)) (import "env" "Hh" (func $internal462)) (import "env" "Ih" (func $internal463)) (import "env" "Jh" (func $internal464)) (import "env" "Kh" (func $internal465)) (import "env" "Lh" (func $internal466)) (import "env" "Mh" (func $internal467)) (import "env" "Nh" (func $internal468)) (import "env" "Oh" (func $internal469)) (import "env" "Ph" (func $internal470)) (import "env" "Qh" (func $internal471)) (import "env" "Rh" (func $internal472)) (import "env" "Sh" (func $internal473)) (import "env" "Th" (func $internal474)) (import "env" "Uh" (func $internal475)) (import "env" "Vh" (func $internal476)) (import "env" "Wh" (func $internal477)) (import "env" "Xh" (func $internal478)) (import "env" "Yh" (func $internal479)) (import "env" "Zh" (func $internal480)) (import "env" "_h" (func $internal481)) (import "env" "$h" (func $internal482)) (import "env" "ai" (func $internal483)) (import "env" "bi" (func $internal484)) (import "env" "ci" (func $internal485)) (import "env" "di" (func $internal486)) (import "env" "ei" (func $internal487)) (import "env" "fi" (func $internal488)) (import "env" "gi" (func $internal489)) (import "env" "hi" (func $internal490)) (import "env" "ii" (func $internal491)) (import "env" "ji" (func $internal492)) (import "env" "ki" (func $internal493)) (import "env" "li" (func $internal494)) (import "env" "mi" (func $internal495)) (import "env" "ni" (func $internal496)) (import "env" "oi" (func $internal497)) (import "env" "pi" (func $internal498)) (import "env" "qi" (func $internal499)) (import "env" "ri" (func $internal500)) (import "env" "si" (func $internal501)) (import "env" "ti" (func $internal502)) (import "env" "ui" (func $internal503)) (import "env" "vi" (func $internal504)) (import "env" "wi" (func $internal505)) (import "env" "xi" (func $internal506)) (import "env" "yi" (func $internal507)) (import "env" "zi" (func $internal508)) (import "env" "Ai" (func $internal509)) (import "env" "Bi" (func $internal510)) (import "env" "Ci" (func $internal511)) (import "env" "Di" (func $internal512)) (import "env" "Ei" (func $internal513)) (import "env" "Fi" (func $internal514)) (import "env" "Gi" (func $internal515)) (import "env" "Hi" (func $internal516)) (import "env" "Ii" (func $internal517)) (import "env" "Ji" (func $internal518)) (import "env" "Ki" (func $internal519)) (import "env" "Li" (func $internal520)) (import "env" "Mi" (func $internal521)) (import "env" "Ni" (func $internal522)) (import "env" "Oi" (func $internal523)) (import "env" "Pi" (func $internal524)) (import "env" "Qi" (func $internal525)) (import "env" "Ri" (func $internal526)) (import "env" "Si" (func $internal527)) (import "env" "Ti" (func $internal528)) (import "env" "Ui" (func $internal529)) (import "env" "Vi" (func $internal530)) (import "env" "Wi" (func $internal531)) (import "env" "Xi" (func $internal532)) (import "env" "Yi" (func $internal533)) (import "env" "Zi" (func $internal534)) (import "env" "_i" (func $internal535)) (import "env" "$i" (func $internal536)) (import "env" "aj" (func $internal537)) (import "env" "bj" (func $internal538)) (import "env" "cj" (func $internal539)) (import "env" "dj" (func $internal540)) (import "env" "ej" (func $internal541)) (import "env" "fj" (func $internal542)) (import "env" "gj" (func $internal543)) (import "env" "hj" (func $internal544)) (import "env" "ij" (func $internal545)) (import "env" "jj" (func $internal546)) (import "env" "kj" (func $internal547)) (import "env" "lj" (func $internal548)) (import "env" "mj" (func $internal549)) (import "env" "nj" (func $internal550)) (import "env" "oj" (func $internal551)) (import "env" "pj" (func $internal552)) (import "env" "qj" (func $internal553)) (import "env" "rj" (func $internal554)) (import "env" "sj" (func $internal555)) (import "env" "tj" (func $internal556)) (import "env" "uj" (func $internal557)) (import "env" "vj" (func $internal558)) (import "env" "wj" (func $internal559)) (import "env" "xj" (func $internal560)) (import "env" "yj" (func $internal561)) (import "env" "zj" (func $internal562)) (import "env" "Aj" (func $internal563)) (import "env" "Bj" (func $internal564)) (import "env" "Cj" (func $internal565)) (import "env" "Dj" (func $internal566)) (import "env" "Ej" (func $internal567)) (import "env" "Fj" (func $internal568)) (import "env" "Gj" (func $internal569)) (import "env" "Hj" (func $internal570)) (import "env" "Ij" (func $internal571)) (import "env" "Jj" (func $internal572)) (import "env" "Kj" (func $internal573)) (import "env" "Lj" (func $internal574)) (import "env" "Mj" (func $internal575)) (import "env" "Nj" (func $internal576)) (import "env" "Oj" (func $internal577)) (import "env" "Pj" (func $internal578)) (import "env" "Qj" (func $internal579)) (import "env" "Rj" (func $internal580)) (import "env" "Sj" (func $internal581)) (import "env" "Tj" (func $internal582)) (import "env" "Uj" (func $internal583)) (import "env" "Vj" (func $internal584)) (import "env" "Wj" (func $internal585)) (import "env" "Xj" (func $internal586)) (import "env" "Yj" (func $internal587)) (import "env" "Zj" (func $internal588)) (import "env" "_j" (func $internal589)) (import "env" "$j" (func $internal590)) (import "env" "ak" (func $internal591)) (import "env" "bk" (func $internal592)) (import "env" "ck" (func $internal593)) (import "env" "dk" (func $internal594)) (import "env" "ek" (func $internal595)) (import "env" "fk" (func $internal596)) (import "env" "gk" (func $internal597)) (import "env" "hk" (func $internal598)) (import "env" "ik" (func $internal599)) (import "env" "jk" (func $internal600)) (import "env" "kk" (func $internal601)) (import "env" "lk" (func $internal602)) (import "env" "mk" (func $internal603)) (import "env" "nk" (func $internal604)) (import "env" "ok" (func $internal605)) (import "env" "pk" (func $internal606)) (import "env" "qk" (func $internal607)) (import "env" "rk" (func $internal608)) (import "env" "sk" (func $internal609)) (import "env" "tk" (func $internal610)) (import "env" "uk" (func $internal611)) (import "env" "vk" (func $internal612)) (import "env" "wk" (func $internal613)) (import "env" "xk" (func $internal614)) (import "env" "yk" (func $internal615)) (import "env" "zk" (func $internal616)) (import "env" "Ak" (func $internal617)) (import "env" "Bk" (func $internal618)) (import "env" "Ck" (func $internal619)) (import "env" "Dk" (func $internal620)) (import "env" "Ek" (func $internal621)) (import "env" "Fk" (func $internal622)) (import "env" "Gk" (func $internal623)) (import "env" "Hk" (func $internal624)) (import "env" "Ik" (func $internal625)) (import "env" "Jk" (func $internal626)) (import "env" "Kk" (func $internal627)) (import "env" "Lk" (func $internal628)) (import "env" "Mk" (func $internal629)) (import "env" "Nk" (func $internal630)) (import "env" "Ok" (func $internal631)) (import "env" "Pk" (func $internal632)) (import "env" "Qk" (func $internal633)) (import "env" "Rk" (func $internal634)) (import "env" "Sk" (func $internal635)) (import "env" "Tk" (func $internal636)) (import "env" "Uk" (func $internal637)) (import "env" "Vk" (func $internal638)) (import "env" "Wk" (func $internal639)) (import "env" "Xk" (func $internal640)) (import "env" "Yk" (func $internal641)) (import "env" "Zk" (func $internal642)) (import "env" "_k" (func $internal643)) (import "env" "$k" (func $internal644)) (import "env" "al" (func $internal645)) (import "env" "bl" (func $internal646)) (import "env" "cl" (func $internal647)) (import "env" "dl" (func $internal648)) (import "env" "el" (func $internal649)) (import "env" "fl" (func $internal650)) (import "env" "gl" (func $internal651)) (import "env" "hl" (func $internal652)) (import "env" "il" (func $internal653)) (import "env" "jl" (func $internal654)) (import "env" "kl" (func $internal655)) (import "env" "ll" (func $internal656)) (import "env" "ml" (func $internal657)) (import "env" "nl" (func $internal658)) (import "env" "ol" (func $internal659)) (import "env" "pl" (func $internal660)) (import "env" "ql" (func $internal661)) (import "env" "rl" (func $internal662)) (import "env" "sl" (func $internal663)) (import "env" "tl" (func $internal664)) (import "env" "ul" (func $internal665)) (import "env" "vl" (func $internal666)) (import "env" "wl" (func $internal667)) (import "env" "xl" (func $internal668)) (import "env" "yl" (func $internal669)) (import "env" "zl" (func $internal670)) (import "env" "Al" (func $internal671)) (import "env" "Bl" (func $internal672)) (import "env" "Cl" (func $internal673)) (import "env" "Dl" (func $internal674)) (import "env" "El" (func $internal675)) (import "env" "Fl" (func $internal676)) (import "env" "Gl" (func $internal677)) (import "env" "Hl" (func $internal678)) (import "env" "Il" (func $internal679)) (import "env" "Jl" (func $internal680)) (import "env" "Kl" (func $internal681)) (import "env" "Ll" (func $internal682)) (import "env" "Ml" (func $internal683)) (import "env" "Nl" (func $internal684)) (import "env" "Ol" (func $internal685)) (import "env" "Pl" (func $internal686)) (import "env" "Ql" (func $internal687)) (import "env" "Rl" (func $internal688)) (import "env" "Sl" (func $internal689)) (import "env" "Tl" (func $internal690)) (import "env" "Ul" (func $internal691)) (import "env" "Vl" (func $internal692)) (import "env" "Wl" (func $internal693)) (import "env" "Xl" (func $internal694)) (import "env" "Yl" (func $internal695)) (import "env" "Zl" (func $internal696)) (import "env" "_l" (func $internal697)) (import "env" "$l" (func $internal698)) (import "env" "am" (func $internal699)) (import "env" "bm" (func $internal700)) (import "env" "cm" (func $internal701)) (import "env" "dm" (func $internal702)) (import "env" "em" (func $internal703)) (import "env" "fm" (func $internal704)) (import "env" "gm" (func $internal705)) (import "env" "hm" (func $internal706)) (import "env" "im" (func $internal707)) (import "env" "jm" (func $internal708)) (import "env" "km" (func $internal709)) (import "env" "lm" (func $internal710)) (import "env" "mm" (func $internal711)) (import "env" "nm" (func $internal712)) (import "env" "om" (func $internal713)) (import "env" "pm" (func $internal714)) (import "env" "qm" (func $internal715)) (import "env" "rm" (func $internal716)) (import "env" "sm" (func $internal717)) (import "env" "tm" (func $internal718)) (import "env" "um" (func $internal719)) (import "env" "vm" (func $internal720)) (import "env" "wm" (func $internal721)) (import "env" "xm" (func $internal722)) (import "env" "ym" (func $internal723)) (import "env" "zm" (func $internal724)) (import "env" "Am" (func $internal725)) (import "env" "Bm" (func $internal726)) (import "env" "Cm" (func $internal727)) (import "env" "Dm" (func $internal728)) (import "env" "Em" (func $internal729)) (import "env" "Fm" (func $internal730)) (import "env" "Gm" (func $internal731)) (import "env" "Hm" (func $internal732)) (import "env" "Im" (func $internal733)) (import "env" "Jm" (func $internal734)) (import "env" "Km" (func $internal735)) (import "env" "Lm" (func $internal736)) (import "env" "Mm" (func $internal737)) (import "env" "Nm" (func $internal738)) (import "env" "Om" (func $internal739)) (import "env" "Pm" (func $internal740)) (import "env" "Qm" (func $internal741)) (import "env" "Rm" (func $internal742)) (import "env" "Sm" (func $internal743)) (import "env" "Tm" (func $internal744)) (import "env" "Um" (func $internal745)) (import "env" "Vm" (func $internal746)) (import "env" "Wm" (func $internal747)) (import "env" "Xm" (func $internal748)) (import "env" "Ym" (func $internal749)) (import "env" "Zm" (func $internal750)) (import "env" "_m" (func $internal751)) (import "env" "$m" (func $internal752)) (import "env" "an" (func $internal753)) (import "env" "bn" (func $internal754)) (import "env" "cn" (func $internal755)) (import "env" "dn" (func $internal756)) (import "env" "en" (func $internal757)) (import "env" "fn" (func $internal758)) (import "env" "gn" (func $internal759)) (import "env" "hn" (func $internal760)) (import "env" "jn" (func $internal761)) (import "env" "kn" (func $internal762)) (import "env" "ln" (func $internal763)) (import "env" "mn" (func $internal764)) (import "env" "nn" (func $internal765)) (import "env" "on" (func $internal766)) (import "env" "pn" (func $internal767)) (import "env" "qn" (func $internal768)) (import "env" "rn" (func $internal769)) (import "env" "sn" (func $internal770)) (import "env" "tn" (func $internal771)) (import "env" "un" (func $internal772)) (import "env" "vn" (func $internal773)) (import "env" "wn" (func $internal774)) (import "env" "xn" (func $internal775)) (import "env" "yn" (func $internal776)) (import "env" "zn" (func $internal777)) (import "env" "An" (func $internal778)) (import "env" "Bn" (func $internal779)) (import "env" "Cn" (func $internal780)) (import "env" "Dn" (func $internal781)) (import "env" "En" (func $internal782)) (import "env" "Fn" (func $internal783)) (import "env" "Gn" (func $internal784)) (import "env" "Hn" (func $internal785)) (import "env" "In" (func $internal786)) (import "env" "Jn" (func $internal787)) (import "env" "Kn" (func $internal788)) (import "env" "Ln" (func $internal789)) (import "env" "Mn" (func $internal790)) (import "env" "Nn" (func $internal791)) (import "env" "On" (func $internal792)) (import "env" "Pn" (func $internal793)) (import "env" "Qn" (func $internal794)) (import "env" "Rn" (func $internal795)) (import "env" "Sn" (func $internal796)) (import "env" "Tn" (func $internal797)) (import "env" "Un" (func $internal798)) (import "env" "Vn" (func $internal799)) (import "env" "Wn" (func $internal800)) (import "env" "Xn" (func $internal801)) (import "env" "Yn" (func $internal802)) (import "env" "Zn" (func $internal803)) (import "env" "_n" (func $internal804)) (import "env" "$n" (func $internal805)) (import "env" "ao" (func $internal806)) (import "env" "bo" (func $internal807)) (import "env" "co" (func $internal808)) (import "env" "eo" (func $internal809)) (import "env" "fo" (func $internal810)) (import "env" "go" (func $internal811)) (import "env" "ho" (func $internal812)) (import "env" "io" (func $internal813)) (import "env" "jo" (func $internal814)) (import "env" "ko" (func $internal815)) (import "env" "lo" (func $internal816)) (import "env" "mo" (func $internal817)) (import "env" "no" (func $internal818)) (import "env" "oo" (func $internal819)) (import "env" "po" (func $internal820)) (import "env" "qo" (func $internal821)) (import "env" "ro" (func $internal822)) (import "env" "so" (func $internal823)) (import "env" "to" (func $internal824)) (import "env" "uo" (func $internal825)) (import "env" "vo" (func $internal826)) (import "env" "wo" (func $internal827)) (import "env" "xo" (func $internal828)) (import "env" "yo" (func $internal829)) (import "env" "zo" (func $internal830)) (import "env" "Ao" (func $internal831)) (import "env" "Bo" (func $internal832)) (import "env" "Co" (func $internal833)) (import "env" "Do" (func $internal834)) (import "env" "Eo" (func $internal835)) (import "env" "Fo" (func $internal836)) (import "env" "Go" (func $internal837)) (import "env" "Ho" (func $internal838)) (import "env" "Io" (func $internal839)) (import "env" "Jo" (func $internal840)) (import "env" "Ko" (func $internal841)) (import "env" "Lo" (func $internal842)) (import "env" "Mo" (func $internal843)) (import "env" "No" (func $internal844)) (import "env" "Oo" (func $internal845)) (import "env" "Po" (func $internal846)) (import "env" "Qo" (func $internal847)) (import "env" "Ro" (func $internal848)) (import "env" "So" (func $internal849)) (import "env" "To" (func $internal850)) (import "env" "Uo" (func $internal851)) (import "env" "Vo" (func $internal852)) (import "env" "Wo" (func $internal853)) (import "env" "Xo" (func $internal854)) (import "env" "Yo" (func $internal855)) (import "env" "Zo" (func $internal856)) (import "env" "_o" (func $internal857)) (import "env" "$o" (func $internal858)) (import "env" "ap" (func $internal859)) (import "env" "bp" (func $internal860)) (import "env" "cp" (func $internal861)) (import "env" "dp" (func $internal862)) (import "env" "ep" (func $internal863)) (import "env" "fp" (func $internal864)) (import "env" "gp" (func $internal865)) (import "env" "hp" (func $internal866)) (import "env" "ip" (func $internal867)) (import "env" "jp" (func $internal868)) (import "env" "kp" (func $internal869)) (import "env" "lp" (func $internal870)) (import "env" "mp" (func $internal871)) (import "env" "np" (func $internal872)) (import "env" "op" (func $internal873)) (import "env" "pp" (func $internal874)) (import "env" "qp" (func $internal875)) (import "env" "rp" (func $internal876)) (import "env" "sp" (func $internal877)) (import "env" "tp" (func $internal878)) (import "env" "up" (func $internal879)) (import "env" "vp" (func $internal880)) (import "env" "wp" (func $internal881)) (import "env" "xp" (func $internal882)) (import "env" "yp" (func $internal883)) (import "env" "zp" (func $internal884)) (import "env" "Ap" (func $internal885)) (import "env" "Bp" (func $internal886)) (import "env" "Cp" (func $internal887)) (import "env" "Dp" (func $internal888)) (import "env" "Ep" (func $internal889)) (import "env" "Fp" (func $internal890)) (import "env" "Gp" (func $internal891)) (import "env" "Hp" (func $internal892)) (import "env" "Ip" (func $internal893)) (import "env" "Jp" (func $internal894)) (import "env" "Kp" (func $internal895)) (import "env" "Lp" (func $internal896)) (import "env" "Mp" (func $internal897)) (import "env" "Np" (func $internal898)) (import "env" "Op" (func $internal899)) (import "env" "Pp" (func $internal900)) (import "env" "Qp" (func $internal901)) (import "env" "Rp" (func $internal902)) (import "env" "Sp" (func $internal903)) (import "env" "Tp" (func $internal904)) (import "env" "Up" (func $internal905)) (import "env" "Vp" (func $internal906)) (import "env" "Wp" (func $internal907)) (import "env" "Xp" (func $internal908)) (import "env" "Yp" (func $internal909)) (import "env" "Zp" (func $internal910)) (import "env" "_p" (func $internal911)) (import "env" "$p" (func $internal912)) (import "env" "aq" (func $internal913)) (import "env" "bq" (func $internal914)) (import "env" "cq" (func $internal915)) (import "env" "dq" (func $internal916)) (import "env" "eq" (func $internal917)) (import "env" "fq" (func $internal918)) (import "env" "gq" (func $internal919)) (import "env" "hq" (func $internal920)) (import "env" "iq" (func $internal921)) (import "env" "jq" (func $internal922)) (import "env" "kq" (func $internal923)) (import "env" "lq" (func $internal924)) (import "env" "mq" (func $internal925)) (import "env" "nq" (func $internal926)) (import "env" "oq" (func $internal927)) (import "env" "pq" (func $internal928)) (import "env" "qq" (func $internal929)) (import "env" "rq" (func $internal930)) (import "env" "sq" (func $internal931)) (import "env" "tq" (func $internal932)) (import "env" "uq" (func $internal933)) (import "env" "vq" (func $internal934)) (import "env" "wq" (func $internal935)) (import "env" "xq" (func $internal936)) (import "env" "yq" (func $internal937)) (import "env" "zq" (func $internal938)) (import "env" "Aq" (func $internal939)) (import "env" "Bq" (func $internal940)) (import "env" "Cq" (func $internal941)) (import "env" "Dq" (func $internal942)) (import "env" "Eq" (func $internal943)) (import "env" "Fq" (func $internal944)) (import "env" "Gq" (func $internal945)) (import "env" "Hq" (func $internal946)) (import "env" "Iq" (func $internal947)) (import "env" "Jq" (func $internal948)) (import "env" "Kq" (func $internal949)) (import "env" "Lq" (func $internal950)) (import "env" "Mq" (func $internal951)) (import "env" "Nq" (func $internal952)) (import "env" "Oq" (func $internal953)) (import "env" "Pq" (func $internal954)) (import "env" "Qq" (func $internal955)) (import "env" "Rq" (func $internal956)) (import "env" "Sq" (func $internal957)) (import "env" "Tq" (func $internal958)) (import "env" "Uq" (func $internal959)) (import "env" "Vq" (func $internal960)) (import "env" "Wq" (func $internal961)) (import "env" "Xq" (func $internal962)) (import "env" "Yq" (func $internal963)) (import "env" "Zq" (func $internal964)) (import "env" "_q" (func $internal965)) (import "env" "$q" (func $internal966)) (import "env" "ar" (func $internal967)) (import "env" "br" (func $internal968)) (import "env" "cr" (func $internal969)) (import "env" "dr" (func $internal970)) (import "env" "er" (func $internal971)) (import "env" "fr" (func $internal972)) (import "env" "gr" (func $internal973)) (import "env" "hr" (func $internal974)) (import "env" "ir" (func $internal975)) (import "env" "jr" (func $internal976)) (import "env" "kr" (func $internal977)) (import "env" "lr" (func $internal978)) (import "env" "mr" (func $internal979)) (import "env" "nr" (func $internal980)) (import "env" "or" (func $internal981)) (import "env" "pr" (func $internal982)) (import "env" "qr" (func $internal983)) (import "env" "rr" (func $internal984)) (import "env" "sr" (func $internal985)) (import "env" "tr" (func $internal986)) (import "env" "ur" (func $internal987)) (import "env" "vr" (func $internal988)) (import "env" "wr" (func $internal989)) (import "env" "xr" (func $internal990)) (import "env" "yr" (func $internal991)) (import "env" "zr" (func $internal992)) (import "env" "Ar" (func $internal993)) (import "env" "Br" (func $internal994)) (import "env" "Cr" (func $internal995)) (import "env" "Dr" (func $internal996)) (import "env" "Er" (func $internal997)) (import "env" "Fr" (func $internal998)) (import "env" "Gr" (func $internal999)) (import "env" "Hr" (func $internal1000)) (import "env" "Ir" (func $internal1001)) (import "env" "Jr" (func $internal1002)) (import "env" "Kr" (func $internal1003)) (import "env" "Lr" (func $internal1004)) (import "env" "Mr" (func $internal1005)) (import "env" "Nr" (func $internal1006)) (import "env" "Or" (func $internal1007)) (import "env" "Pr" (func $internal1008)) (import "env" "Qr" (func $internal1009)) (import "env" "Rr" (func $internal1010)) (import "env" "Sr" (func $internal1011)) (import "env" "Tr" (func $internal1012)) (import "env" "Ur" (func $internal1013)) (import "env" "Vr" (func $internal1014)) (import "env" "Wr" (func $internal1015)) (import "env" "Xr" (func $internal1016)) (import "env" "Yr" (func $internal1017)) (import "env" "Zr" (func $internal1018)) (import "env" "_r" (func $internal1019)) (import "env" "$r" (func $internal1020)) (import "env" "as" (func $internal1021)) (import "env" "bs" (func $internal1022)) (import "env" "cs" (func $internal1023)) (import "env" "ds" (func $internal1024)) (import "env" "es" (func $internal1025)) (import "env" "fs" (func $internal1026)) (import "env" "gs" (func $internal1027)) (import "env" "hs" (func $internal1028)) (import "env" "is" (func $internal1029)) (import "env" "js" (func $internal1030)) (import "env" "ks" (func $internal1031)) (import "env" "ls" (func $internal1032)) (import "env" "ms" (func $internal1033)) (import "env" "ns" (func $internal1034)) (import "env" "os" (func $internal1035)) (import "env" "ps" (func $internal1036)) (import "env" "qs" (func $internal1037)) (import "env" "rs" (func $internal1038)) (import "env" "ss" (func $internal1039)) (import "env" "ts" (func $internal1040)) (import "env" "us" (func $internal1041)) (import "env" "vs" (func $internal1042)) (import "env" "ws" (func $internal1043)) (import "env" "xs" (func $internal1044)) (import "env" "ys" (func $internal1045)) (import "env" "zs" (func $internal1046)) (import "env" "As" (func $internal1047)) (import "env" "Bs" (func $internal1048)) (import "env" "Cs" (func $internal1049)) (import "env" "Ds" (func $internal1050)) (import "env" "Es" (func $internal1051)) (import "env" "Fs" (func $internal1052)) (import "env" "Gs" (func $internal1053)) (import "env" "Hs" (func $internal1054)) (import "env" "Is" (func $internal1055)) (import "env" "Js" (func $internal1056)) (import "env" "Ks" (func $internal1057)) (import "env" "Ls" (func $internal1058)) (import "env" "Ms" (func $internal1059)) (import "env" "Ns" (func $internal1060)) (import "env" "Os" (func $internal1061)) (import "env" "Ps" (func $internal1062)) (import "env" "Qs" (func $internal1063)) (import "env" "Rs" (func $internal1064)) (import "env" "Ss" (func $internal1065)) (import "env" "Ts" (func $internal1066)) (import "env" "Us" (func $internal1067)) (import "env" "Vs" (func $internal1068)) (import "env" "Ws" (func $internal1069)) (import "env" "Xs" (func $internal1070)) (import "env" "Ys" (func $internal1071)) (import "env" "Zs" (func $internal1072)) (import "env" "_s" (func $internal1073)) (import "env" "$s" (func $internal1074)) (import "env" "at" (func $internal1075)) (import "env" "bt" (func $internal1076)) (import "env" "ct" (func $internal1077)) (import "env" "dt" (func $internal1078)) (import "env" "et" (func $internal1079)) (import "env" "ft" (func $internal1080)) (import "env" "gt" (func $internal1081)) (import "env" "ht" (func $internal1082)) (import "env" "it" (func $internal1083)) (import "env" "jt" (func $internal1084)) (import "env" "kt" (func $internal1085)) (import "env" "lt" (func $internal1086)) (import "env" "mt" (func $internal1087)) (import "env" "nt" (func $internal1088)) (import "env" "ot" (func $internal1089)) (import "env" "pt" (func $internal1090)) (import "env" "qt" (func $internal1091)) (import "env" "rt" (func $internal1092)) (import "env" "st" (func $internal1093)) (import "env" "tt" (func $internal1094)) (import "env" "ut" (func $internal1095)) (import "env" "vt" (func $internal1096)) (import "env" "wt" (func $internal1097)) (import "env" "xt" (func $internal1098)) (import "env" "yt" (func $internal1099)) (import "env" "zt" (func $internal1100)) (import "env" "At" (func $internal1101)) (import "env" "Bt" (func $internal1102)) (import "env" "Ct" (func $internal1103)) (import "env" "Dt" (func $internal1104)) (import "env" "Et" (func $internal1105)) (import "env" "Ft" (func $internal1106)) (import "env" "Gt" (func $internal1107)) (import "env" "Ht" (func $internal1108)) (import "env" "It" (func $internal1109)) (import "env" "Jt" (func $internal1110)) (import "env" "Kt" (func $internal1111)) (import "env" "Lt" (func $internal1112)) (import "env" "Mt" (func $internal1113)) (import "env" "Nt" (func $internal1114)) (import "env" "Ot" (func $internal1115)) (import "env" "Pt" (func $internal1116)) (import "env" "Qt" (func $internal1117)) (import "env" "Rt" (func $internal1118)) (import "env" "St" (func $internal1119)) (import "env" "Tt" (func $internal1120)) (import "env" "Ut" (func $internal1121)) (import "env" "Vt" (func $internal1122)) (import "env" "Wt" (func $internal1123)) (import "env" "Xt" (func $internal1124)) (import "env" "Yt" (func $internal1125)) (import "env" "Zt" (func $internal1126)) (import "env" "_t" (func $internal1127)) (import "env" "$t" (func $internal1128)) (import "env" "au" (func $internal1129)) (import "env" "bu" (func $internal1130)) (import "env" "cu" (func $internal1131)) (import "env" "du" (func $internal1132)) (import "env" "eu" (func $internal1133)) (import "env" "fu" (func $internal1134)) (import "env" "gu" (func $internal1135)) (import "env" "hu" (func $internal1136)) (import "env" "iu" (func $internal1137)) (import "env" "ju" (func $internal1138)) (import "env" "ku" (func $internal1139)) (import "env" "lu" (func $internal1140)) (import "env" "mu" (func $internal1141)) (import "env" "nu" (func $internal1142)) (import "env" "ou" (func $internal1143)) (import "env" "pu" (func $internal1144)) (import "env" "qu" (func $internal1145)) (import "env" "ru" (func $internal1146)) (import "env" "su" (func $internal1147)) (import "env" "tu" (func $internal1148)) (import "env" "uu" (func $internal1149)) (import "env" "vu" (func $internal1150)) (import "env" "wu" (func $internal1151)) (import "env" "xu" (func $internal1152)) (import "env" "yu" (func $internal1153)) (import "env" "zu" (func $internal1154)) (import "env" "Au" (func $internal1155)) (import "env" "Bu" (func $internal1156)) (import "env" "Cu" (func $internal1157)) (import "env" "Du" (func $internal1158)) (import "env" "Eu" (func $internal1159)) (import "env" "Fu" (func $internal1160)) (import "env" "Gu" (func $internal1161)) (import "env" "Hu" (func $internal1162)) (import "env" "Iu" (func $internal1163)) (import "env" "Ju" (func $internal1164)) (import "env" "Ku" (func $internal1165)) (import "env" "Lu" (func $internal1166)) (import "env" "Mu" (func $internal1167)) (import "env" "Nu" (func $internal1168)) (import "env" "Ou" (func $internal1169)) (import "env" "Pu" (func $internal1170)) (import "env" "Qu" (func $internal1171)) (import "env" "Ru" (func $internal1172)) (import "env" "Su" (func $internal1173)) (import "env" "Tu" (func $internal1174)) (import "env" "Uu" (func $internal1175)) (import "env" "Vu" (func $internal1176)) (import "env" "Wu" (func $internal1177)) (import "env" "Xu" (func $internal1178)) (import "env" "Yu" (func $internal1179)) (import "env" "Zu" (func $internal1180)) (import "env" "_u" (func $internal1181)) (import "env" "$u" (func $internal1182)) (import "env" "av" (func $internal1183)) (import "env" "bv" (func $internal1184)) (import "env" "cv" (func $internal1185)) (import "env" "dv" (func $internal1186)) (import "env" "ev" (func $internal1187)) (import "env" "fv" (func $internal1188)) (import "env" "gv" (func $internal1189)) (import "env" "hv" (func $internal1190)) (import "env" "iv" (func $internal1191)) (import "env" "jv" (func $internal1192)) (import "env" "kv" (func $internal1193)) (import "env" "lv" (func $internal1194)) (import "env" "mv" (func $internal1195)) (import "env" "nv" (func $internal1196)) (import "env" "ov" (func $internal1197)) (import "env" "pv" (func $internal1198)) (import "env" "qv" (func $internal1199)) (import "env" "rv" (func $internal1200)) (import "env" "sv" (func $internal1201)) (import "env" "tv" (func $internal1202)) (import "env" "uv" (func $internal1203)) (import "env" "vv" (func $internal1204)) (import "env" "wv" (func $internal1205)) (import "env" "xv" (func $internal1206)) (import "env" "yv" (func $internal1207)) (import "env" "zv" (func $internal1208)) (import "env" "Av" (func $internal1209)) (import "env" "Bv" (func $internal1210)) (import "env" "Cv" (func $internal1211)) (import "env" "Dv" (func $internal1212)) (import "env" "Ev" (func $internal1213)) (import "env" "Fv" (func $internal1214)) (import "env" "Gv" (func $internal1215)) (import "env" "Hv" (func $internal1216)) (import "env" "Iv" (func $internal1217)) (import "env" "Jv" (func $internal1218)) (import "env" "Kv" (func $internal1219)) (import "env" "Lv" (func $internal1220)) (import "env" "Mv" (func $internal1221)) (import "env" "Nv" (func $internal1222)) (import "env" "Ov" (func $internal1223)) (import "env" "Pv" (func $internal1224)) (import "env" "Qv" (func $internal1225)) (import "env" "Rv" (func $internal1226)) (import "env" "Sv" (func $internal1227)) (import "env" "Tv" (func $internal1228)) (import "env" "Uv" (func $internal1229)) (import "env" "Vv" (func $internal1230)) (import "env" "Wv" (func $internal1231)) (import "env" "Xv" (func $internal1232)) (import "env" "Yv" (func $internal1233)) (import "env" "Zv" (func $internal1234)) (import "env" "_v" (func $internal1235)) (import "env" "$v" (func $internal1236)) (import "env" "aw" (func $internal1237)) (import "env" "bw" (func $internal1238)) (import "env" "cw" (func $internal1239)) (import "env" "dw" (func $internal1240)) (import "env" "ew" (func $internal1241)) (import "env" "fw" (func $internal1242)) (import "env" "gw" (func $internal1243)) (import "env" "hw" (func $internal1244)) (import "env" "iw" (func $internal1245)) (import "env" "jw" (func $internal1246)) (import "env" "kw" (func $internal1247)) (import "env" "lw" (func $internal1248)) (import "env" "mw" (func $internal1249)) (import "env" "nw" (func $internal1250)) (import "env" "ow" (func $internal1251)) (import "env" "pw" (func $internal1252)) (import "env" "qw" (func $internal1253)) (import "env" "rw" (func $internal1254)) (import "env" "sw" (func $internal1255)) (import "env" "tw" (func $internal1256)) (import "env" "uw" (func $internal1257)) (import "env" "vw" (func $internal1258)) (import "env" "ww" (func $internal1259)) (import "env" "xw" (func $internal1260)) (import "env" "yw" (func $internal1261)) (import "env" "zw" (func $internal1262)) (import "env" "Aw" (func $internal1263)) (import "env" "Bw" (func $internal1264)) (import "env" "Cw" (func $internal1265)) (import "env" "Dw" (func $internal1266)) (import "env" "Ew" (func $internal1267)) (import "env" "Fw" (func $internal1268)) (import "env" "Gw" (func $internal1269)) (import "env" "Hw" (func $internal1270)) (import "env" "Iw" (func $internal1271)) (import "env" "Jw" (func $internal1272)) (import "env" "Kw" (func $internal1273)) (import "env" "Lw" (func $internal1274)) (import "env" "Mw" (func $internal1275)) (import "env" "Nw" (func $internal1276)) (import "env" "Ow" (func $internal1277)) (import "env" "Pw" (func $internal1278)) (import "env" "Qw" (func $internal1279)) (import "env" "Rw" (func $internal1280)) (import "env" "Sw" (func $internal1281)) (import "env" "Tw" (func $internal1282)) (import "env" "Uw" (func $internal1283)) (import "env" "Vw" (func $internal1284)) (import "env" "Ww" (func $internal1285)) (import "env" "Xw" (func $internal1286)) (import "env" "Yw" (func $internal1287)) (import "env" "Zw" (func $internal1288)) (import "env" "_w" (func $internal1289)) (import "env" "$w" (func $internal1290)) (import "env" "ax" (func $internal1291)) (import "env" "bx" (func $internal1292)) (import "env" "cx" (func $internal1293)) (import "env" "dx" (func $internal1294)) (import "env" "ex" (func $internal1295)) (import "env" "fx" (func $internal1296)) (import "env" "gx" (func $internal1297)) (import "env" "hx" (func $internal1298)) (import "env" "ix" (func $internal1299)) (import "env" "jx" (func $internal1300)) (import "env" "kx" (func $internal1301)) (import "env" "lx" (func $internal1302)) (import "env" "mx" (func $internal1303)) (import "env" "nx" (func $internal1304)) (import "env" "ox" (func $internal1305)) (import "env" "px" (func $internal1306)) (import "env" "qx" (func $internal1307)) (import "env" "rx" (func $internal1308)) (import "env" "sx" (func $internal1309)) (import "env" "tx" (func $internal1310)) (import "env" "ux" (func $internal1311)) (import "env" "vx" (func $internal1312)) (import "env" "wx" (func $internal1313)) (import "env" "xx" (func $internal1314)) (import "env" "yx" (func $internal1315)) (import "env" "zx" (func $internal1316)) (import "env" "Ax" (func $internal1317)) (import "env" "Bx" (func $internal1318)) (import "env" "Cx" (func $internal1319)) (import "env" "Dx" (func $internal1320)) (import "env" "Ex" (func $internal1321)) (import "env" "Fx" (func $internal1322)) (import "env" "Gx" (func $internal1323)) (import "env" "Hx" (func $internal1324)) (import "env" "Ix" (func $internal1325)) (import "env" "Jx" (func $internal1326)) (import "env" "Kx" (func $internal1327)) (import "env" "Lx" (func $internal1328)) (import "env" "Mx" (func $internal1329)) (import "env" "Nx" (func $internal1330)) (import "env" "Ox" (func $internal1331)) (import "env" "Px" (func $internal1332)) (import "env" "Qx" (func $internal1333)) (import "env" "Rx" (func $internal1334)) (import "env" "Sx" (func $internal1335)) (import "env" "Tx" (func $internal1336)) (import "env" "Ux" (func $internal1337)) (import "env" "Vx" (func $internal1338)) (import "env" "Wx" (func $internal1339)) (import "env" "Xx" (func $internal1340)) (import "env" "Yx" (func $internal1341)) (import "env" "Zx" (func $internal1342)) (import "env" "_x" (func $internal1343)) (import "env" "$x" (func $internal1344)) (import "env" "ay" (func $internal1345)) (import "env" "by" (func $internal1346)) (import "env" "cy" (func $internal1347)) (import "env" "dy" (func $internal1348)) (import "env" "ey" (func $internal1349)) (import "env" "fy" (func $internal1350)) (import "env" "gy" (func $internal1351)) (import "env" "hy" (func $internal1352)) (import "env" "iy" (func $internal1353)) (import "env" "jy" (func $internal1354)) (import "env" "ky" (func $internal1355)) (import "env" "ly" (func $internal1356)) (import "env" "my" (func $internal1357)) (import "env" "ny" (func $internal1358)) (import "env" "oy" (func $internal1359)) (import "env" "py" (func $internal1360)) (import "env" "qy" (func $internal1361)) (import "env" "ry" (func $internal1362)) (import "env" "sy" (func $internal1363)) (import "env" "ty" (func $internal1364)) (import "env" "uy" (func $internal1365)) (import "env" "vy" (func $internal1366)) (import "env" "wy" (func $internal1367)) (import "env" "xy" (func $internal1368)) (import "env" "yy" (func $internal1369)) (import "env" "zy" (func $internal1370)) (import "env" "Ay" (func $internal1371)) (import "env" "By" (func $internal1372)) (import "env" "Cy" (func $internal1373)) (import "env" "Dy" (func $internal1374)) (import "env" "Ey" (func $internal1375)) (import "env" "Fy" (func $internal1376)) (import "env" "Gy" (func $internal1377)) (import "env" "Hy" (func $internal1378)) (import "env" "Iy" (func $internal1379)) (import "env" "Jy" (func $internal1380)) (import "env" "Ky" (func $internal1381)) (import "env" "Ly" (func $internal1382)) (import "env" "My" (func $internal1383)) (import "env" "Ny" (func $internal1384)) (import "env" "Oy" (func $internal1385)) (import "env" "Py" (func $internal1386)) (import "env" "Qy" (func $internal1387)) (import "env" "Ry" (func $internal1388)) (import "env" "Sy" (func $internal1389)) (import "env" "Ty" (func $internal1390)) (import "env" "Uy" (func $internal1391)) (import "env" "Vy" (func $internal1392)) (import "env" "Wy" (func $internal1393)) (import "env" "Xy" (func $internal1394)) (import "env" "Yy" (func $internal1395)) (import "env" "Zy" (func $internal1396)) (import "env" "_y" (func $internal1397)) (import "env" "$y" (func $internal1398)) (import "env" "az" (func $internal1399)) (import "env" "bz" (func $internal1400)) (import "env" "cz" (func $internal1401)) (import "env" "dz" (func $internal1402)) (import "env" "ez" (func $internal1403)) (import "env" "fz" (func $internal1404)) (import "env" "gz" (func $internal1405)) (import "env" "hz" (func $internal1406)) (import "env" "iz" (func $internal1407)) (import "env" "jz" (func $internal1408)) (import "env" "kz" (func $internal1409)) (import "env" "lz" (func $internal1410)) (import "env" "mz" (func $internal1411)) (import "env" "nz" (func $internal1412)) (import "env" "oz" (func $internal1413)) (import "env" "pz" (func $internal1414)) (import "env" "qz" (func $internal1415)) (import "env" "rz" (func $internal1416)) (import "env" "sz" (func $internal1417)) (import "env" "tz" (func $internal1418)) (import "env" "uz" (func $internal1419)) (import "env" "vz" (func $internal1420)) (import "env" "wz" (func $internal1421)) (import "env" "xz" (func $internal1422)) (import "env" "yz" (func $internal1423)) (import "env" "zz" (func $internal1424)) (import "env" "Az" (func $internal1425)) (import "env" "Bz" (func $internal1426)) (import "env" "Cz" (func $internal1427)) (import "env" "Dz" (func $internal1428)) (import "env" "Ez" (func $internal1429)) (import "env" "Fz" (func $internal1430)) (import "env" "Gz" (func $internal1431)) (import "env" "Hz" (func $internal1432)) (import "env" "Iz" (func $internal1433)) (import "env" "Jz" (func $internal1434)) (import "env" "Kz" (func $internal1435)) (import "env" "Lz" (func $internal1436)) (import "env" "Mz" (func $internal1437)) (import "env" "Nz" (func $internal1438)) (import "env" "Oz" (func $internal1439)) (import "env" "Pz" (func $internal1440)) (import "env" "Qz" (func $internal1441)) (import "env" "Rz" (func $internal1442)) (import "env" "Sz" (func $internal1443)) (import "env" "Tz" (func $internal1444)) (import "env" "Uz" (func $internal1445)) (import "env" "Vz" (func $internal1446)) (import "env" "Wz" (func $internal1447)) (import "env" "Xz" (func $internal1448)) (import "env" "Yz" (func $internal1449)) (import "env" "Zz" (func $internal1450)) (import "env" "_z" (func $internal1451)) (import "env" "$z" (func $internal1452)) (import "env" "aA" (func $internal1453)) (import "env" "bA" (func $internal1454)) (import "env" "cA" (func $internal1455)) (import "env" "dA" (func $internal1456)) (import "env" "eA" (func $internal1457)) (import "env" "fA" (func $internal1458)) (import "env" "gA" (func $internal1459)) (import "env" "hA" (func $internal1460)) (import "env" "iA" (func $internal1461)) (import "env" "jA" (func $internal1462)) (import "env" "kA" (func $internal1463)) (import "env" "lA" (func $internal1464)) (import "env" "mA" (func $internal1465)) (import "env" "nA" (func $internal1466)) (import "env" "oA" (func $internal1467)) (import "env" "pA" (func $internal1468)) (import "env" "qA" (func $internal1469)) (import "env" "rA" (func $internal1470)) (import "env" "sA" (func $internal1471)) (import "env" "tA" (func $internal1472)) (import "env" "uA" (func $internal1473)) (import "env" "vA" (func $internal1474)) (import "env" "wA" (func $internal1475)) (import "env" "xA" (func $internal1476)) (import "env" "yA" (func $internal1477)) (import "env" "zA" (func $internal1478)) (import "env" "AA" (func $internal1479)) (import "env" "BA" (func $internal1480)) (import "env" "CA" (func $internal1481)) (import "env" "DA" (func $internal1482)) (import "env" "EA" (func $internal1483)) (import "env" "FA" (func $internal1484)) (import "env" "GA" (func $internal1485)) (import "env" "HA" (func $internal1486)) (import "env" "IA" (func $internal1487)) (import "env" "JA" (func $internal1488)) (import "env" "KA" (func $internal1489)) (import "env" "LA" (func $internal1490)) (import "env" "MA" (func $internal1491)) (import "env" "NA" (func $internal1492)) (import "env" "OA" (func $internal1493)) (import "env" "PA" (func $internal1494)) (import "env" "QA" (func $internal1495)) (import "env" "RA" (func $internal1496)) (import "env" "SA" (func $internal1497)) (import "env" "TA" (func $internal1498)) (import "env" "UA" (func $internal1499)) (import "env" "VA" (func $internal1500)) (import "env" "WA" (func $internal1501)) (import "env" "XA" (func $internal1502)) (import "env" "YA" (func $internal1503)) (import "env" "ZA" (func $internal1504)) (import "env" "_A" (func $internal1505)) (import "env" "$A" (func $internal1506)) (import "env" "aB" (func $internal1507)) (import "env" "bB" (func $internal1508)) (import "env" "cB" (func $internal1509)) (import "env" "dB" (func $internal1510)) (import "env" "eB" (func $internal1511)) (import "env" "fB" (func $internal1512)) (import "env" "gB" (func $internal1513)) (import "env" "hB" (func $internal1514)) (import "env" "iB" (func $internal1515)) (import "env" "jB" (func $internal1516)) (import "env" "kB" (func $internal1517)) (import "env" "lB" (func $internal1518)) (import "env" "mB" (func $internal1519)) (import "env" "nB" (func $internal1520)) (import "env" "oB" (func $internal1521)) (import "env" "pB" (func $internal1522)) (import "env" "qB" (func $internal1523)) (import "env" "rB" (func $internal1524)) (import "env" "sB" (func $internal1525)) (import "env" "tB" (func $internal1526)) (import "env" "uB" (func $internal1527)) (import "env" "vB" (func $internal1528)) (import "env" "wB" (func $internal1529)) (import "env" "xB" (func $internal1530)) (import "env" "yB" (func $internal1531)) (import "env" "zB" (func $internal1532)) (import "env" "AB" (func $internal1533)) (import "env" "BB" (func $internal1534)) (import "env" "CB" (func $internal1535)) (import "env" "DB" (func $internal1536)) (import "env" "EB" (func $internal1537)) (import "env" "FB" (func $internal1538)) (import "env" "GB" (func $internal1539)) (import "env" "HB" (func $internal1540)) (import "env" "IB" (func $internal1541)) (import "env" "JB" (func $internal1542)) (import "env" "KB" (func $internal1543)) (import "env" "LB" (func $internal1544)) (import "env" "MB" (func $internal1545)) (import "env" "NB" (func $internal1546)) (import "env" "OB" (func $internal1547)) (import "env" "PB" (func $internal1548)) (import "env" "QB" (func $internal1549)) (import "env" "RB" (func $internal1550)) (import "env" "SB" (func $internal1551)) (import "env" "TB" (func $internal1552)) (import "env" "UB" (func $internal1553)) (import "env" "VB" (func $internal1554)) (import "env" "WB" (func $internal1555)) (import "env" "XB" (func $internal1556)) (import "env" "YB" (func $internal1557)) (import "env" "ZB" (func $internal1558)) (import "env" "_B" (func $internal1559)) (import "env" "$B" (func $internal1560)) (import "env" "aC" (func $internal1561)) (import "env" "bC" (func $internal1562)) (import "env" "cC" (func $internal1563)) (import "env" "dC" (func $internal1564)) (import "env" "eC" (func $internal1565)) (import "env" "fC" (func $internal1566)) (import "env" "gC" (func $internal1567)) (import "env" "hC" (func $internal1568)) (import "env" "iC" (func $internal1569)) (import "env" "jC" (func $internal1570)) (import "env" "kC" (func $internal1571)) (import "env" "lC" (func $internal1572)) (import "env" "mC" (func $internal1573)) (import "env" "nC" (func $internal1574)) (import "env" "oC" (func $internal1575)) (import "env" "pC" (func $internal1576)) (import "env" "qC" (func $internal1577)) (import "env" "rC" (func $internal1578)) (import "env" "sC" (func $internal1579)) (import "env" "tC" (func $internal1580)) (import "env" "uC" (func $internal1581)) (import "env" "vC" (func $internal1582)) (import "env" "wC" (func $internal1583)) (import "env" "xC" (func $internal1584)) (import "env" "yC" (func $internal1585)) (import "env" "zC" (func $internal1586)) (import "env" "AC" (func $internal1587)) (import "env" "BC" (func $internal1588)) (import "env" "CC" (func $internal1589)) (import "env" "DC" (func $internal1590)) (import "env" "EC" (func $internal1591)) (import "env" "FC" (func $internal1592)) (import "env" "GC" (func $internal1593)) (import "env" "HC" (func $internal1594)) (import "env" "IC" (func $internal1595)) (import "env" "JC" (func $internal1596)) (import "env" "KC" (func $internal1597)) (import "env" "LC" (func $internal1598)) (import "env" "MC" (func $internal1599)) (import "env" "NC" (func $internal1600)) (import "env" "OC" (func $internal1601)) (import "env" "PC" (func $internal1602)) (import "env" "QC" (func $internal1603)) (import "env" "RC" (func $internal1604)) (import "env" "SC" (func $internal1605)) (import "env" "TC" (func $internal1606)) (import "env" "UC" (func $internal1607)) (import "env" "VC" (func $internal1608)) (import "env" "WC" (func $internal1609)) (import "env" "XC" (func $internal1610)) (import "env" "YC" (func $internal1611)) (import "env" "ZC" (func $internal1612)) (import "env" "_C" (func $internal1613)) (import "env" "$C" (func $internal1614)) (import "env" "aD" (func $internal1615)) (import "env" "bD" (func $internal1616)) (import "env" "cD" (func $internal1617)) (import "env" "dD" (func $internal1618)) (import "env" "eD" (func $internal1619)) (import "env" "fD" (func $internal1620)) (import "env" "gD" (func $internal1621)) (import "env" "hD" (func $internal1622)) (import "env" "iD" (func $internal1623)) (import "env" "jD" (func $internal1624)) (import "env" "kD" (func $internal1625)) (import "env" "lD" (func $internal1626)) (import "env" "mD" (func $internal1627)) (import "env" "nD" (func $internal1628)) (import "env" "oD" (func $internal1629)) (import "env" "pD" (func $internal1630)) (import "env" "qD" (func $internal1631)) (import "env" "rD" (func $internal1632)) (import "env" "sD" (func $internal1633)) (import "env" "tD" (func $internal1634)) (import "env" "uD" (func $internal1635)) (import "env" "vD" (func $internal1636)) (import "env" "wD" (func $internal1637)) (import "env" "xD" (func $internal1638)) (import "env" "yD" (func $internal1639)) (import "env" "zD" (func $internal1640)) (import "env" "AD" (func $internal1641)) (import "env" "BD" (func $internal1642)) (import "env" "CD" (func $internal1643)) (import "env" "DD" (func $internal1644)) (import "env" "ED" (func $internal1645)) (import "env" "FD" (func $internal1646)) (import "env" "GD" (func $internal1647)) (import "env" "HD" (func $internal1648)) (import "env" "ID" (func $internal1649)) (import "env" "JD" (func $internal1650)) (import "env" "KD" (func $internal1651)) (import "env" "LD" (func $internal1652)) (import "env" "MD" (func $internal1653)) (import "env" "ND" (func $internal1654)) (import "env" "OD" (func $internal1655)) (import "env" "PD" (func $internal1656)) (import "env" "QD" (func $internal1657)) (import "env" "RD" (func $internal1658)) (import "env" "SD" (func $internal1659)) (import "env" "TD" (func $internal1660)) (import "env" "UD" (func $internal1661)) (import "env" "VD" (func $internal1662)) (import "env" "WD" (func $internal1663)) (import "env" "XD" (func $internal1664)) (import "env" "YD" (func $internal1665)) (import "env" "ZD" (func $internal1666)) (import "env" "_D" (func $internal1667)) (import "env" "$D" (func $internal1668)) (import "env" "aE" (func $internal1669)) (import "env" "bE" (func $internal1670)) (import "env" "cE" (func $internal1671)) (import "env" "dE" (func $internal1672)) (import "env" "eE" (func $internal1673)) (import "env" "fE" (func $internal1674)) (import "env" "gE" (func $internal1675)) (import "env" "hE" (func $internal1676)) (import "env" "iE" (func $internal1677)) (import "env" "jE" (func $internal1678)) (import "env" "kE" (func $internal1679)) (import "env" "lE" (func $internal1680)) (import "env" "mE" (func $internal1681)) (import "env" "nE" (func $internal1682)) (import "env" "oE" (func $internal1683)) (import "env" "pE" (func $internal1684)) (import "env" "qE" (func $internal1685)) (import "env" "rE" (func $internal1686)) (import "env" "sE" (func $internal1687)) (import "env" "tE" (func $internal1688)) (import "env" "uE" (func $internal1689)) (import "env" "vE" (func $internal1690)) (import "env" "wE" (func $internal1691)) (import "env" "xE" (func $internal1692)) (import "env" "yE" (func $internal1693)) (import "env" "zE" (func $internal1694)) (import "env" "AE" (func $internal1695)) (import "env" "BE" (func $internal1696)) (import "env" "CE" (func $internal1697)) (import "env" "DE" (func $internal1698)) (import "env" "EE" (func $internal1699)) (import "env" "FE" (func $internal1700)) (import "env" "GE" (func $internal1701)) (import "env" "HE" (func $internal1702)) (import "env" "IE" (func $internal1703)) (import "env" "JE" (func $internal1704)) (import "env" "KE" (func $internal1705)) (import "env" "LE" (func $internal1706)) (import "env" "ME" (func $internal1707)) (import "env" "NE" (func $internal1708)) (import "env" "OE" (func $internal1709)) (import "env" "PE" (func $internal1710)) (import "env" "QE" (func $internal1711)) (import "env" "RE" (func $internal1712)) (import "env" "SE" (func $internal1713)) (import "env" "TE" (func $internal1714)) (import "env" "UE" (func $internal1715)) (import "env" "VE" (func $internal1716)) (import "env" "WE" (func $internal1717)) (import "env" "XE" (func $internal1718)) (import "env" "YE" (func $internal1719)) (import "env" "ZE" (func $internal1720)) (import "env" "_E" (func $internal1721)) (import "env" "$E" (func $internal1722)) (import "env" "aF" (func $internal1723)) (import "env" "bF" (func $internal1724)) (import "env" "cF" (func $internal1725)) (import "env" "dF" (func $internal1726)) (import "env" "eF" (func $internal1727)) (import "env" "fF" (func $internal1728)) (import "env" "gF" (func $internal1729)) (import "env" "hF" (func $internal1730)) (import "env" "iF" (func $internal1731)) (import "env" "jF" (func $internal1732)) (import "env" "kF" (func $internal1733)) (import "env" "lF" (func $internal1734)) (import "env" "mF" (func $internal1735)) (import "env" "nF" (func $internal1736)) (import "env" "oF" (func $internal1737)) (import "env" "pF" (func $internal1738)) (import "env" "qF" (func $internal1739)) (import "env" "rF" (func $internal1740)) (import "env" "sF" (func $internal1741)) (import "env" "tF" (func $internal1742)) (import "env" "uF" (func $internal1743)) (import "env" "vF" (func $internal1744)) (import "env" "wF" (func $internal1745)) (import "env" "xF" (func $internal1746)) (import "env" "yF" (func $internal1747)) (import "env" "zF" (func $internal1748)) (import "env" "AF" (func $internal1749)) (import "env" "BF" (func $internal1750)) (import "env" "CF" (func $internal1751)) (import "env" "DF" (func $internal1752)) (import "env" "EF" (func $internal1753)) (import "env" "FF" (func $internal1754)) (import "env" "GF" (func $internal1755)) (import "env" "HF" (func $internal1756)) (import "env" "IF" (func $internal1757)) (import "env" "JF" (func $internal1758)) (import "env" "KF" (func $internal1759)) (import "env" "LF" (func $internal1760)) (import "env" "MF" (func $internal1761)) (import "env" "NF" (func $internal1762)) (import "env" "OF" (func $internal1763)) (import "env" "PF" (func $internal1764)) (import "env" "QF" (func $internal1765)) (import "env" "RF" (func $internal1766)) (import "env" "SF" (func $internal1767)) (import "env" "TF" (func $internal1768)) (import "env" "UF" (func $internal1769)) (import "env" "VF" (func $internal1770)) (import "env" "WF" (func $internal1771)) (import "env" "XF" (func $internal1772)) (import "env" "YF" (func $internal1773)) (import "env" "ZF" (func $internal1774)) (import "env" "_F" (func $internal1775)) (import "env" "$F" (func $internal1776)) (import "env" "aG" (func $internal1777)) (import "env" "bG" (func $internal1778)) (import "env" "cG" (func $internal1779)) (import "env" "dG" (func $internal1780)) (import "env" "eG" (func $internal1781)) (import "env" "fG" (func $internal1782)) (import "env" "gG" (func $internal1783)) (import "env" "hG" (func $internal1784)) (import "env" "iG" (func $internal1785)) (import "env" "jG" (func $internal1786)) (import "env" "kG" (func $internal1787)) (import "env" "lG" (func $internal1788)) (import "env" "mG" (func $internal1789)) (import "env" "nG" (func $internal1790)) (import "env" "oG" (func $internal1791)) (import "env" "pG" (func $internal1792)) (import "env" "qG" (func $internal1793)) (import "env" "rG" (func $internal1794)) (import "env" "sG" (func $internal1795)) (import "env" "tG" (func $internal1796)) (import "env" "uG" (func $internal1797)) (import "env" "vG" (func $internal1798)) (import "env" "wG" (func $internal1799)) (import "env" "xG" (func $internal1800)) (import "env" "yG" (func $internal1801)) (import "env" "zG" (func $internal1802)) (import "env" "AG" (func $internal1803)) (import "env" "BG" (func $internal1804)) (import "env" "CG" (func $internal1805)) (import "env" "DG" (func $internal1806)) (import "env" "EG" (func $internal1807)) (import "env" "FG" (func $internal1808)) (import "env" "GG" (func $internal1809)) (import "env" "HG" (func $internal1810)) (import "env" "IG" (func $internal1811)) (import "env" "JG" (func $internal1812)) (import "env" "KG" (func $internal1813)) (import "env" "LG" (func $internal1814)) (import "env" "MG" (func $internal1815)) (import "env" "NG" (func $internal1816)) (import "env" "OG" (func $internal1817)) (import "env" "PG" (func $internal1818)) (import "env" "QG" (func $internal1819)) (import "env" "RG" (func $internal1820)) (import "env" "SG" (func $internal1821)) (import "env" "TG" (func $internal1822)) (import "env" "UG" (func $internal1823)) (import "env" "VG" (func $internal1824)) (import "env" "WG" (func $internal1825)) (import "env" "XG" (func $internal1826)) (import "env" "YG" (func $internal1827)) (import "env" "ZG" (func $internal1828)) (import "env" "_G" (func $internal1829)) (import "env" "$G" (func $internal1830)) (import "env" "aH" (func $internal1831)) (import "env" "bH" (func $internal1832)) (import "env" "cH" (func $internal1833)) (import "env" "dH" (func $internal1834)) (import "env" "eH" (func $internal1835)) (import "env" "fH" (func $internal1836)) (import "env" "gH" (func $internal1837)) (import "env" "hH" (func $internal1838)) (import "env" "iH" (func $internal1839)) (import "env" "jH" (func $internal1840)) (import "env" "kH" (func $internal1841)) (import "env" "lH" (func $internal1842)) (import "env" "mH" (func $internal1843)) (import "env" "nH" (func $internal1844)) (import "env" "oH" (func $internal1845)) (import "env" "pH" (func $internal1846)) (import "env" "qH" (func $internal1847)) (import "env" "rH" (func $internal1848)) (import "env" "sH" (func $internal1849)) (import "env" "tH" (func $internal1850)) (import "env" "uH" (func $internal1851)) (import "env" "vH" (func $internal1852)) (import "env" "wH" (func $internal1853)) (import "env" "xH" (func $internal1854)) (import "env" "yH" (func $internal1855)) (import "env" "zH" (func $internal1856)) (import "env" "AH" (func $internal1857)) (import "env" "BH" (func $internal1858)) (import "env" "CH" (func $internal1859)) (import "env" "DH" (func $internal1860)) (import "env" "EH" (func $internal1861)) (import "env" "FH" (func $internal1862)) (import "env" "GH" (func $internal1863)) (import "env" "HH" (func $internal1864)) (import "env" "IH" (func $internal1865)) (import "env" "JH" (func $internal1866)) (import "env" "KH" (func $internal1867)) (import "env" "LH" (func $internal1868)) (import "env" "MH" (func $internal1869)) (import "env" "NH" (func $internal1870)) (import "env" "OH" (func $internal1871)) (import "env" "PH" (func $internal1872)) (import "env" "QH" (func $internal1873)) (import "env" "RH" (func $internal1874)) (import "env" "SH" (func $internal1875)) (import "env" "TH" (func $internal1876)) (import "env" "UH" (func $internal1877)) (import "env" "VH" (func $internal1878)) (import "env" "WH" (func $internal1879)) (import "env" "XH" (func $internal1880)) (import "env" "YH" (func $internal1881)) (import "env" "ZH" (func $internal1882)) (import "env" "_H" (func $internal1883)) (import "env" "$H" (func $internal1884)) (import "env" "aI" (func $internal1885)) (import "env" "bI" (func $internal1886)) (import "env" "cI" (func $internal1887)) (import "env" "dI" (func $internal1888)) (import "env" "eI" (func $internal1889)) (import "env" "fI" (func $internal1890)) (import "env" "gI" (func $internal1891)) (import "env" "hI" (func $internal1892)) (import "env" "iI" (func $internal1893)) (import "env" "jI" (func $internal1894)) (import "env" "kI" (func $internal1895)) (import "env" "lI" (func $internal1896)) (import "env" "mI" (func $internal1897)) (import "env" "nI" (func $internal1898)) (import "env" "oI" (func $internal1899)) (import "env" "pI" (func $internal1900)) (import "env" "qI" (func $internal1901)) (import "env" "rI" (func $internal1902)) (import "env" "sI" (func $internal1903)) (import "env" "tI" (func $internal1904)) (import "env" "uI" (func $internal1905)) (import "env" "vI" (func $internal1906)) (import "env" "wI" (func $internal1907)) (import "env" "xI" (func $internal1908)) (import "env" "yI" (func $internal1909)) (import "env" "zI" (func $internal1910)) (import "env" "AI" (func $internal1911)) (import "env" "BI" (func $internal1912)) (import "env" "CI" (func $internal1913)) (import "env" "DI" (func $internal1914)) (import "env" "EI" (func $internal1915)) (import "env" "FI" (func $internal1916)) (import "env" "GI" (func $internal1917)) (import "env" "HI" (func $internal1918)) (import "env" "II" (func $internal1919)) (import "env" "JI" (func $internal1920)) (import "env" "KI" (func $internal1921)) (import "env" "LI" (func $internal1922)) (import "env" "MI" (func $internal1923)) (import "env" "NI" (func $internal1924)) (import "env" "OI" (func $internal1925)) (import "env" "PI" (func $internal1926)) (import "env" "QI" (func $internal1927)) (import "env" "RI" (func $internal1928)) (import "env" "SI" (func $internal1929)) (import "env" "TI" (func $internal1930)) (import "env" "UI" (func $internal1931)) (import "env" "VI" (func $internal1932)) (import "env" "WI" (func $internal1933)) (import "env" "XI" (func $internal1934)) (import "env" "YI" (func $internal1935)) (import "env" "ZI" (func $internal1936)) (import "env" "_I" (func $internal1937)) (import "env" "$I" (func $internal1938)) (import "env" "aJ" (func $internal1939)) (import "env" "bJ" (func $internal1940)) (import "env" "cJ" (func $internal1941)) (import "env" "dJ" (func $internal1942)) (import "env" "eJ" (func $internal1943)) (import "env" "fJ" (func $internal1944)) (import "env" "gJ" (func $internal1945)) (import "env" "hJ" (func $internal1946)) (import "env" "iJ" (func $internal1947)) (import "env" "jJ" (func $internal1948)) (import "env" "kJ" (func $internal1949)) (import "env" "lJ" (func $internal1950)) (import "env" "mJ" (func $internal1951)) (import "env" "nJ" (func $internal1952)) (import "env" "oJ" (func $internal1953)) (import "env" "pJ" (func $internal1954)) (import "env" "qJ" (func $internal1955)) (import "env" "rJ" (func $internal1956)) (import "env" "sJ" (func $internal1957)) (import "env" "tJ" (func $internal1958)) (import "env" "uJ" (func $internal1959)) (import "env" "vJ" (func $internal1960)) (import "env" "wJ" (func $internal1961)) (import "env" "xJ" (func $internal1962)) (import "env" "yJ" (func $internal1963)) (import "env" "zJ" (func $internal1964)) (import "env" "AJ" (func $internal1965)) (import "env" "BJ" (func $internal1966)) (import "env" "CJ" (func $internal1967)) (import "env" "DJ" (func $internal1968)) (import "env" "EJ" (func $internal1969)) (import "env" "FJ" (func $internal1970)) (import "env" "GJ" (func $internal1971)) (import "env" "HJ" (func $internal1972)) (import "env" "IJ" (func $internal1973)) (import "env" "JJ" (func $internal1974)) (import "env" "KJ" (func $internal1975)) (import "env" "LJ" (func $internal1976)) (import "env" "MJ" (func $internal1977)) (import "env" "NJ" (func $internal1978)) (import "env" "OJ" (func $internal1979)) (import "env" "PJ" (func $internal1980)) (import "env" "QJ" (func $internal1981)) (import "env" "RJ" (func $internal1982)) (import "env" "SJ" (func $internal1983)) (import "env" "TJ" (func $internal1984)) (import "env" "UJ" (func $internal1985)) (import "env" "VJ" (func $internal1986)) (import "env" "WJ" (func $internal1987)) (import "env" "XJ" (func $internal1988)) (import "env" "YJ" (func $internal1989)) (import "env" "ZJ" (func $internal1990)) (import "env" "_J" (func $internal1991)) (import "env" "$J" (func $internal1992)) (import "env" "aK" (func $internal1993)) (import "env" "bK" (func $internal1994)) (import "env" "cK" (func $internal1995)) (import "env" "dK" (func $internal1996)) (import "env" "eK" (func $internal1997)) (import "env" "fK" (func $internal1998)) (import "env" "gK" (func $internal1999)) (import "env" "hK" (func $internal2000)) (import "env" "iK" (func $internal2001)) (import "env" "jK" (func $internal2002)) (import "env" "kK" (func $internal2003)) (import "env" "lK" (func $internal2004)) (import "env" "mK" (func $internal2005)) (import "env" "nK" (func $internal2006)) (import "env" "oK" (func $internal2007)) (import "env" "pK" (func $internal2008)) (import "env" "qK" (func $internal2009)) (import "env" "rK" (func $internal2010)) (import "env" "sK" (func $internal2011)) (import "env" "tK" (func $internal2012)) (import "env" "uK" (func $internal2013)) (import "env" "vK" (func $internal2014)) (import "env" "wK" (func $internal2015)) (import "env" "xK" (func $internal2016)) (import "env" "yK" (func $internal2017)) (import "env" "zK" (func $internal2018)) (import "env" "AK" (func $internal2019)) (import "env" "BK" (func $internal2020)) (import "env" "CK" (func $internal2021)) (import "env" "DK" (func $internal2022)) (import "env" "EK" (func $internal2023)) (import "env" "FK" (func $internal2024)) (import "env" "GK" (func $internal2025)) (import "env" "HK" (func $internal2026)) (import "env" "IK" (func $internal2027)) (import "env" "JK" (func $internal2028)) (import "env" "KK" (func $internal2029)) (import "env" "LK" (func $internal2030)) (import "env" "MK" (func $internal2031)) (import "env" "NK" (func $internal2032)) (import "env" "OK" (func $internal2033)) (import "env" "PK" (func $internal2034)) (import "env" "QK" (func $internal2035)) (import "env" "RK" (func $internal2036)) (import "env" "SK" (func $internal2037)) (import "env" "TK" (func $internal2038)) (import "env" "UK" (func $internal2039)) (import "env" "VK" (func $internal2040)) (import "env" "WK" (func $internal2041)) (import "env" "XK" (func $internal2042)) (import "env" "YK" (func $internal2043)) (import "env" "ZK" (func $internal2044)) (import "env" "_K" (func $internal2045)) (import "env" "$K" (func $internal2046)) (import "env" "aL" (func $internal2047)) (import "env" "bL" (func $internal2048)) (import "env" "cL" (func $internal2049)) (import "env" "dL" (func $internal2050)) (import "env" "eL" (func $internal2051)) (import "env" "fL" (func $internal2052)) (import "env" "gL" (func $internal2053)) (import "env" "hL" (func $internal2054)) (import "env" "iL" (func $internal2055)) (import "env" "jL" (func $internal2056)) (import "env" "kL" (func $internal2057)) (import "env" "lL" (func $internal2058)) (import "env" "mL" (func $internal2059)) (import "env" "nL" (func $internal2060)) (import "env" "oL" (func $internal2061)) (import "env" "pL" (func $internal2062)) (import "env" "qL" (func $internal2063)) (import "env" "rL" (func $internal2064)) (import "env" "sL" (func $internal2065)) (import "env" "tL" (func $internal2066)) (import "env" "uL" (func $internal2067)) (import "env" "vL" (func $internal2068)) (import "env" "wL" (func $internal2069)) (import "env" "xL" (func $internal2070)) (import "env" "yL" (func $internal2071)) (import "env" "zL" (func $internal2072)) (import "env" "AL" (func $internal2073)) (import "env" "BL" (func $internal2074)) (import "env" "CL" (func $internal2075)) (import "env" "DL" (func $internal2076)) (import "env" "EL" (func $internal2077)) (import "env" "FL" (func $internal2078)) (import "env" "GL" (func $internal2079)) (import "env" "HL" (func $internal2080)) (import "env" "IL" (func $internal2081)) (import "env" "JL" (func $internal2082)) (import "env" "KL" (func $internal2083)) (import "env" "LL" (func $internal2084)) (import "env" "ML" (func $internal2085)) (import "env" "NL" (func $internal2086)) (import "env" "OL" (func $internal2087)) (import "env" "PL" (func $internal2088)) (import "env" "QL" (func $internal2089)) (import "env" "RL" (func $internal2090)) (import "env" "SL" (func $internal2091)) (import "env" "TL" (func $internal2092)) (import "env" "UL" (func $internal2093)) (import "env" "VL" (func $internal2094)) (import "env" "WL" (func $internal2095)) (import "env" "XL" (func $internal2096)) (import "env" "YL" (func $internal2097)) (import "env" "ZL" (func $internal2098)) (import "env" "_L" (func $internal2099)) (import "env" "$L" (func $internal2100)) (import "env" "aM" (func $internal2101)) (import "env" "bM" (func $internal2102)) (import "env" "cM" (func $internal2103)) (import "env" "dM" (func $internal2104)) (import "env" "eM" (func $internal2105)) (import "env" "fM" (func $internal2106)) (import "env" "gM" (func $internal2107)) (import "env" "hM" (func $internal2108)) (import "env" "iM" (func $internal2109)) (import "env" "jM" (func $internal2110)) (import "env" "kM" (func $internal2111)) (import "env" "lM" (func $internal2112)) (import "env" "mM" (func $internal2113)) (import "env" "nM" (func $internal2114)) (import "env" "oM" (func $internal2115)) (import "env" "pM" (func $internal2116)) (import "env" "qM" (func $internal2117)) (import "env" "rM" (func $internal2118)) (import "env" "sM" (func $internal2119)) (import "env" "tM" (func $internal2120)) (import "env" "uM" (func $internal2121)) (import "env" "vM" (func $internal2122)) (import "env" "wM" (func $internal2123)) (import "env" "xM" (func $internal2124)) (import "env" "yM" (func $internal2125)) (import "env" "zM" (func $internal2126)) (import "env" "AM" (func $internal2127)) (import "env" "BM" (func $internal2128)) (import "env" "CM" (func $internal2129)) (import "env" "DM" (func $internal2130)) (import "env" "EM" (func $internal2131)) (import "env" "FM" (func $internal2132)) (import "env" "GM" (func $internal2133)) (import "env" "HM" (func $internal2134)) (import "env" "IM" (func $internal2135)) (import "env" "JM" (func $internal2136)) (import "env" "KM" (func $internal2137)) (import "env" "LM" (func $internal2138)) (import "env" "MM" (func $internal2139)) (import "env" "NM" (func $internal2140)) (import "env" "OM" (func $internal2141)) (import "env" "PM" (func $internal2142)) (import "env" "QM" (func $internal2143)) (import "env" "RM" (func $internal2144)) (import "env" "SM" (func $internal2145)) (import "env" "TM" (func $internal2146)) (import "env" "UM" (func $internal2147)) (import "env" "VM" (func $internal2148)) (import "env" "WM" (func $internal2149)) (import "env" "XM" (func $internal2150)) (import "env" "YM" (func $internal2151)) (import "env" "ZM" (func $internal2152)) (import "env" "_M" (func $internal2153)) (import "env" "$M" (func $internal2154)) (import "env" "aN" (func $internal2155)) (import "env" "bN" (func $internal2156)) (import "env" "cN" (func $internal2157)) (import "env" "dN" (func $internal2158)) (import "env" "eN" (func $internal2159)) (import "env" "fN" (func $internal2160)) (import "env" "gN" (func $internal2161)) (import "env" "hN" (func $internal2162)) (import "env" "iN" (func $internal2163)) (import "env" "jN" (func $internal2164)) (import "env" "kN" (func $internal2165)) (import "env" "lN" (func $internal2166)) (import "env" "mN" (func $internal2167)) (import "env" "nN" (func $internal2168)) (import "env" "oN" (func $internal2169)) (import "env" "pN" (func $internal2170)) (import "env" "qN" (func $internal2171)) (import "env" "rN" (func $internal2172)) (import "env" "sN" (func $internal2173)) (import "env" "tN" (func $internal2174)) (import "env" "uN" (func $internal2175)) (import "env" "vN" (func $internal2176)) (import "env" "wN" (func $internal2177)) (import "env" "xN" (func $internal2178)) (import "env" "yN" (func $internal2179)) (import "env" "zN" (func $internal2180)) (import "env" "AN" (func $internal2181)) (import "env" "BN" (func $internal2182)) (import "env" "CN" (func $internal2183)) (import "env" "DN" (func $internal2184)) (import "env" "EN" (func $internal2185)) (import "env" "FN" (func $internal2186)) (import "env" "GN" (func $internal2187)) (import "env" "HN" (func $internal2188)) (import "env" "IN" (func $internal2189)) (import "env" "JN" (func $internal2190)) (import "env" "KN" (func $internal2191)) (import "env" "LN" (func $internal2192)) (import "env" "MN" (func $internal2193)) (import "env" "NN" (func $internal2194)) (import "env" "ON" (func $internal2195)) (import "env" "PN" (func $internal2196)) (import "env" "QN" (func $internal2197)) (import "env" "RN" (func $internal2198)) (import "env" "SN" (func $internal2199)) (import "env" "TN" (func $internal2200)) (import "env" "UN" (func $internal2201)) (import "env" "VN" (func $internal2202)) (import "env" "WN" (func $internal2203)) (import "env" "XN" (func $internal2204)) (import "env" "YN" (func $internal2205)) (import "env" "ZN" (func $internal2206)) (import "env" "_N" (func $internal2207)) (import "env" "$N" (func $internal2208)) (import "env" "aO" (func $internal2209)) (import "env" "bO" (func $internal2210)) (import "env" "cO" (func $internal2211)) (import "env" "dO" (func $internal2212)) (import "env" "eO" (func $internal2213)) (import "env" "fO" (func $internal2214)) (import "env" "gO" (func $internal2215)) (import "env" "hO" (func $internal2216)) (import "env" "iO" (func $internal2217)) (import "env" "jO" (func $internal2218)) (import "env" "kO" (func $internal2219)) (import "env" "lO" (func $internal2220)) (import "env" "mO" (func $internal2221)) (import "env" "nO" (func $internal2222)) (import "env" "oO" (func $internal2223)) (import "env" "pO" (func $internal2224)) (import "env" "qO" (func $internal2225)) (import "env" "rO" (func $internal2226)) (import "env" "sO" (func $internal2227)) (import "env" "tO" (func $internal2228)) (import "env" "uO" (func $internal2229)) (import "env" "vO" (func $internal2230)) (import "env" "wO" (func $internal2231)) (import "env" "xO" (func $internal2232)) (import "env" "yO" (func $internal2233)) (import "env" "zO" (func $internal2234)) (import "env" "AO" (func $internal2235)) (import "env" "BO" (func $internal2236)) (import "env" "CO" (func $internal2237)) (import "env" "DO" (func $internal2238)) (import "env" "EO" (func $internal2239)) (import "env" "FO" (func $internal2240)) (import "env" "GO" (func $internal2241)) (import "env" "HO" (func $internal2242)) (import "env" "IO" (func $internal2243)) (import "env" "JO" (func $internal2244)) (import "env" "KO" (func $internal2245)) (import "env" "LO" (func $internal2246)) (import "env" "MO" (func $internal2247)) (import "env" "NO" (func $internal2248)) (import "env" "OO" (func $internal2249)) (import "env" "PO" (func $internal2250)) (import "env" "QO" (func $internal2251)) (import "env" "RO" (func $internal2252)) (import "env" "SO" (func $internal2253)) (import "env" "TO" (func $internal2254)) (import "env" "UO" (func $internal2255)) (import "env" "VO" (func $internal2256)) (import "env" "WO" (func $internal2257)) (import "env" "XO" (func $internal2258)) (import "env" "YO" (func $internal2259)) (import "env" "ZO" (func $internal2260)) (import "env" "_O" (func $internal2261)) (import "env" "$O" (func $internal2262)) (import "env" "aP" (func $internal2263)) (import "env" "bP" (func $internal2264)) (import "env" "cP" (func $internal2265)) (import "env" "dP" (func $internal2266)) (import "env" "eP" (func $internal2267)) (import "env" "fP" (func $internal2268)) (import "env" "gP" (func $internal2269)) (import "env" "hP" (func $internal2270)) (import "env" "iP" (func $internal2271)) (import "env" "jP" (func $internal2272)) (import "env" "kP" (func $internal2273)) (import "env" "lP" (func $internal2274)) (import "env" "mP" (func $internal2275)) (import "env" "nP" (func $internal2276)) (import "env" "oP" (func $internal2277)) (import "env" "pP" (func $internal2278)) (import "env" "qP" (func $internal2279)) (import "env" "rP" (func $internal2280)) (import "env" "sP" (func $internal2281)) (import "env" "tP" (func $internal2282)) (import "env" "uP" (func $internal2283)) (import "env" "vP" (func $internal2284)) (import "env" "wP" (func $internal2285)) (import "env" "xP" (func $internal2286)) (import "env" "yP" (func $internal2287)) (import "env" "zP" (func $internal2288)) (import "env" "AP" (func $internal2289)) (import "env" "BP" (func $internal2290)) (import "env" "CP" (func $internal2291)) (import "env" "DP" (func $internal2292)) (import "env" "EP" (func $internal2293)) (import "env" "FP" (func $internal2294)) (import "env" "GP" (func $internal2295)) (import "env" "HP" (func $internal2296)) (import "env" "IP" (func $internal2297)) (import "env" "JP" (func $internal2298)) (import "env" "KP" (func $internal2299)) (import "env" "LP" (func $internal2300)) (import "env" "MP" (func $internal2301)) (import "env" "NP" (func $internal2302)) (import "env" "OP" (func $internal2303)) (import "env" "PP" (func $internal2304)) (import "env" "QP" (func $internal2305)) (import "env" "RP" (func $internal2306)) (import "env" "SP" (func $internal2307)) (import "env" "TP" (func $internal2308)) (import "env" "UP" (func $internal2309)) (import "env" "VP" (func $internal2310)) (import "env" "WP" (func $internal2311)) (import "env" "XP" (func $internal2312)) (import "env" "YP" (func $internal2313)) (import "env" "ZP" (func $internal2314)) (import "env" "_P" (func $internal2315)) (import "env" "$P" (func $internal2316)) (import "env" "aQ" (func $internal2317)) (import "env" "bQ" (func $internal2318)) (import "env" "cQ" (func $internal2319)) (import "env" "dQ" (func $internal2320)) (import "env" "eQ" (func $internal2321)) (import "env" "fQ" (func $internal2322)) (import "env" "gQ" (func $internal2323)) (import "env" "hQ" (func $internal2324)) (import "env" "iQ" (func $internal2325)) (import "env" "jQ" (func $internal2326)) (import "env" "kQ" (func $internal2327)) (import "env" "lQ" (func $internal2328)) (import "env" "mQ" (func $internal2329)) (import "env" "nQ" (func $internal2330)) (import "env" "oQ" (func $internal2331)) (import "env" "pQ" (func $internal2332)) (import "env" "qQ" (func $internal2333)) (import "env" "rQ" (func $internal2334)) (import "env" "sQ" (func $internal2335)) (import "env" "tQ" (func $internal2336)) (import "env" "uQ" (func $internal2337)) (import "env" "vQ" (func $internal2338)) (import "env" "wQ" (func $internal2339)) (import "env" "xQ" (func $internal2340)) (import "env" "yQ" (func $internal2341)) (import "env" "zQ" (func $internal2342)) (import "env" "AQ" (func $internal2343)) (import "env" "BQ" (func $internal2344)) (import "env" "CQ" (func $internal2345)) (import "env" "DQ" (func $internal2346)) (import "env" "EQ" (func $internal2347)) (import "env" "FQ" (func $internal2348)) (import "env" "GQ" (func $internal2349)) (import "env" "HQ" (func $internal2350)) (import "env" "IQ" (func $internal2351)) (import "env" "JQ" (func $internal2352)) (import "env" "KQ" (func $internal2353)) (import "env" "LQ" (func $internal2354)) (import "env" "MQ" (func $internal2355)) (import "env" "NQ" (func $internal2356)) (import "env" "OQ" (func $internal2357)) (import "env" "PQ" (func $internal2358)) (import "env" "QQ" (func $internal2359)) (import "env" "RQ" (func $internal2360)) (import "env" "SQ" (func $internal2361)) (import "env" "TQ" (func $internal2362)) (import "env" "UQ" (func $internal2363)) (import "env" "VQ" (func $internal2364)) (import "env" "WQ" (func $internal2365)) (import "env" "XQ" (func $internal2366)) (import "env" "YQ" (func $internal2367)) (import "env" "ZQ" (func $internal2368)) (import "env" "_Q" (func $internal2369)) (import "env" "$Q" (func $internal2370)) (import "env" "aR" (func $internal2371)) (import "env" "bR" (func $internal2372)) (import "env" "cR" (func $internal2373)) (import "env" "dR" (func $internal2374)) (import "env" "eR" (func $internal2375)) (import "env" "fR" (func $internal2376)) (import "env" "gR" (func $internal2377)) (import "env" "hR" (func $internal2378)) (import "env" "iR" (func $internal2379)) (import "env" "jR" (func $internal2380)) (import "env" "kR" (func $internal2381)) (import "env" "lR" (func $internal2382)) (import "env" "mR" (func $internal2383)) (import "env" "nR" (func $internal2384)) (import "env" "oR" (func $internal2385)) (import "env" "pR" (func $internal2386)) (import "env" "qR" (func $internal2387)) (import "env" "rR" (func $internal2388)) (import "env" "sR" (func $internal2389)) (import "env" "tR" (func $internal2390)) (import "env" "uR" (func $internal2391)) (import "env" "vR" (func $internal2392)) (import "env" "wR" (func $internal2393)) (import "env" "xR" (func $internal2394)) (import "env" "yR" (func $internal2395)) (import "env" "zR" (func $internal2396)) (import "env" "AR" (func $internal2397)) (import "env" "BR" (func $internal2398)) (import "env" "CR" (func $internal2399)) (import "env" "DR" (func $internal2400)) (import "env" "ER" (func $internal2401)) (import "env" "FR" (func $internal2402)) (import "env" "GR" (func $internal2403)) (import "env" "HR" (func $internal2404)) (import "env" "IR" (func $internal2405)) (import "env" "JR" (func $internal2406)) (import "env" "KR" (func $internal2407)) (import "env" "LR" (func $internal2408)) (import "env" "MR" (func $internal2409)) (import "env" "NR" (func $internal2410)) (import "env" "OR" (func $internal2411)) (import "env" "PR" (func $internal2412)) (import "env" "QR" (func $internal2413)) (import "env" "RR" (func $internal2414)) (import "env" "SR" (func $internal2415)) (import "env" "TR" (func $internal2416)) (import "env" "UR" (func $internal2417)) (import "env" "VR" (func $internal2418)) (import "env" "WR" (func $internal2419)) (import "env" "XR" (func $internal2420)) (import "env" "YR" (func $internal2421)) (import "env" "ZR" (func $internal2422)) (import "env" "_R" (func $internal2423)) (import "env" "$R" (func $internal2424)) (import "env" "aS" (func $internal2425)) (import "env" "bS" (func $internal2426)) (import "env" "cS" (func $internal2427)) (import "env" "dS" (func $internal2428)) (import "env" "eS" (func $internal2429)) (import "env" "fS" (func $internal2430)) (import "env" "gS" (func $internal2431)) (import "env" "hS" (func $internal2432)) (import "env" "iS" (func $internal2433)) (import "env" "jS" (func $internal2434)) (import "env" "kS" (func $internal2435)) (import "env" "lS" (func $internal2436)) (import "env" "mS" (func $internal2437)) (import "env" "nS" (func $internal2438)) (import "env" "oS" (func $internal2439)) (import "env" "pS" (func $internal2440)) (import "env" "qS" (func $internal2441)) (import "env" "rS" (func $internal2442)) (import "env" "sS" (func $internal2443)) (import "env" "tS" (func $internal2444)) (import "env" "uS" (func $internal2445)) (import "env" "vS" (func $internal2446)) (import "env" "wS" (func $internal2447)) (import "env" "xS" (func $internal2448)) (import "env" "yS" (func $internal2449)) (import "env" "zS" (func $internal2450)) (import "env" "AS" (func $internal2451)) (import "env" "BS" (func $internal2452)) (import "env" "CS" (func $internal2453)) (import "env" "DS" (func $internal2454)) (import "env" "ES" (func $internal2455)) (import "env" "FS" (func $internal2456)) (import "env" "GS" (func $internal2457)) (import "env" "HS" (func $internal2458)) (import "env" "IS" (func $internal2459)) (import "env" "JS" (func $internal2460)) (import "env" "KS" (func $internal2461)) (import "env" "LS" (func $internal2462)) (import "env" "MS" (func $internal2463)) (import "env" "NS" (func $internal2464)) (import "env" "OS" (func $internal2465)) (import "env" "PS" (func $internal2466)) (import "env" "QS" (func $internal2467)) (import "env" "RS" (func $internal2468)) (import "env" "SS" (func $internal2469)) (import "env" "TS" (func $internal2470)) (import "env" "US" (func $internal2471)) (import "env" "VS" (func $internal2472)) (import "env" "WS" (func $internal2473)) (import "env" "XS" (func $internal2474)) (import "env" "YS" (func $internal2475)) (import "env" "ZS" (func $internal2476)) (import "env" "_S" (func $internal2477)) (import "env" "$S" (func $internal2478)) (import "env" "aT" (func $internal2479)) (import "env" "bT" (func $internal2480)) (import "env" "cT" (func $internal2481)) (import "env" "dT" (func $internal2482)) (import "env" "eT" (func $internal2483)) (import "env" "fT" (func $internal2484)) (import "env" "gT" (func $internal2485)) (import "env" "hT" (func $internal2486)) (import "env" "iT" (func $internal2487)) (import "env" "jT" (func $internal2488)) (import "env" "kT" (func $internal2489)) (import "env" "lT" (func $internal2490)) (import "env" "mT" (func $internal2491)) (import "env" "nT" (func $internal2492)) (import "env" "oT" (func $internal2493)) (import "env" "pT" (func $internal2494)) (import "env" "qT" (func $internal2495)) (import "env" "rT" (func $internal2496)) (import "env" "sT" (func $internal2497)) (import "env" "tT" (func $internal2498)) (import "env" "uT" (func $internal2499)) (import "env" "vT" (func $internal2500)) (import "env" "wT" (func $internal2501)) (import "env" "xT" (func $internal2502)) (import "env" "yT" (func $internal2503)) (import "env" "zT" (func $internal2504)) (import "env" "AT" (func $internal2505)) (import "env" "BT" (func $internal2506)) (import "env" "CT" (func $internal2507)) (import "env" "DT" (func $internal2508)) (import "env" "ET" (func $internal2509)) (import "env" "FT" (func $internal2510)) (import "env" "GT" (func $internal2511)) (import "env" "HT" (func $internal2512)) (import "env" "IT" (func $internal2513)) (import "env" "JT" (func $internal2514)) (import "env" "KT" (func $internal2515)) (import "env" "LT" (func $internal2516)) (import "env" "MT" (func $internal2517)) (import "env" "NT" (func $internal2518)) (import "env" "OT" (func $internal2519)) (import "env" "PT" (func $internal2520)) (import "env" "QT" (func $internal2521)) (import "env" "RT" (func $internal2522)) (import "env" "ST" (func $internal2523)) (import "env" "TT" (func $internal2524)) (import "env" "UT" (func $internal2525)) (import "env" "VT" (func $internal2526)) (import "env" "WT" (func $internal2527)) (import "env" "XT" (func $internal2528)) (import "env" "YT" (func $internal2529)) (import "env" "ZT" (func $internal2530)) (import "env" "_T" (func $internal2531)) (import "env" "$T" (func $internal2532)) (import "env" "aU" (func $internal2533)) (import "env" "bU" (func $internal2534)) (import "env" "cU" (func $internal2535)) (import "env" "dU" (func $internal2536)) (import "env" "eU" (func $internal2537)) (import "env" "fU" (func $internal2538)) (import "env" "gU" (func $internal2539)) (import "env" "hU" (func $internal2540)) (import "env" "iU" (func $internal2541)) (import "env" "jU" (func $internal2542)) (import "env" "kU" (func $internal2543)) (import "env" "lU" (func $internal2544)) (import "env" "mU" (func $internal2545)) (import "env" "nU" (func $internal2546)) (import "env" "oU" (func $internal2547)) (import "env" "pU" (func $internal2548)) (import "env" "qU" (func $internal2549)) (import "env" "rU" (func $internal2550)) (import "env" "sU" (func $internal2551)) (import "env" "tU" (func $internal2552)) (import "env" "uU" (func $internal2553)) (import "env" "vU" (func $internal2554)) (import "env" "wU" (func $internal2555)) (import "env" "xU" (func $internal2556)) (import "env" "yU" (func $internal2557)) (import "env" "zU" (func $internal2558)) (import "env" "AU" (func $internal2559)) (import "env" "BU" (func $internal2560)) (import "env" "CU" (func $internal2561)) (import "env" "DU" (func $internal2562)) (import "env" "EU" (func $internal2563)) (import "env" "FU" (func $internal2564)) (import "env" "GU" (func $internal2565)) (import "env" "HU" (func $internal2566)) (import "env" "IU" (func $internal2567)) (import "env" "JU" (func $internal2568)) (import "env" "KU" (func $internal2569)) (import "env" "LU" (func $internal2570)) (import "env" "MU" (func $internal2571)) (import "env" "NU" (func $internal2572)) (import "env" "OU" (func $internal2573)) (import "env" "PU" (func $internal2574)) (import "env" "QU" (func $internal2575)) (import "env" "RU" (func $internal2576)) (import "env" "SU" (func $internal2577)) (import "env" "TU" (func $internal2578)) (import "env" "UU" (func $internal2579)) (import "env" "VU" (func $internal2580)) (import "env" "WU" (func $internal2581)) (import "env" "XU" (func $internal2582)) (import "env" "YU" (func $internal2583)) (import "env" "ZU" (func $internal2584)) (import "env" "_U" (func $internal2585)) (import "env" "$U" (func $internal2586)) (import "env" "aV" (func $internal2587)) (import "env" "bV" (func $internal2588)) (import "env" "cV" (func $internal2589)) (import "env" "dV" (func $internal2590)) (import "env" "eV" (func $internal2591)) (import "env" "fV" (func $internal2592)) (import "env" "gV" (func $internal2593)) (import "env" "hV" (func $internal2594)) (import "env" "iV" (func $internal2595)) (import "env" "jV" (func $internal2596)) (import "env" "kV" (func $internal2597)) (import "env" "lV" (func $internal2598)) (import "env" "mV" (func $internal2599)) (import "env" "nV" (func $internal2600)) (import "env" "oV" (func $internal2601)) (import "env" "pV" (func $internal2602)) (import "env" "qV" (func $internal2603)) (import "env" "rV" (func $internal2604)) (import "env" "sV" (func $internal2605)) (import "env" "tV" (func $internal2606)) (import "env" "uV" (func $internal2607)) (import "env" "vV" (func $internal2608)) (import "env" "wV" (func $internal2609)) (import "env" "xV" (func $internal2610)) (import "env" "yV" (func $internal2611)) (import "env" "zV" (func $internal2612)) (import "env" "AV" (func $internal2613)) (import "env" "BV" (func $internal2614)) (import "env" "CV" (func $internal2615)) (import "env" "DV" (func $internal2616)) (import "env" "EV" (func $internal2617)) (import "env" "FV" (func $internal2618)) (import "env" "GV" (func $internal2619)) (import "env" "HV" (func $internal2620)) (import "env" "IV" (func $internal2621)) (import "env" "JV" (func $internal2622)) (import "env" "KV" (func $internal2623)) (import "env" "LV" (func $internal2624)) (import "env" "MV" (func $internal2625)) (import "env" "NV" (func $internal2626)) (import "env" "OV" (func $internal2627)) (import "env" "PV" (func $internal2628)) (import "env" "QV" (func $internal2629)) (import "env" "RV" (func $internal2630)) (import "env" "SV" (func $internal2631)) (import "env" "TV" (func $internal2632)) (import "env" "UV" (func $internal2633)) (import "env" "VV" (func $internal2634)) (import "env" "WV" (func $internal2635)) (import "env" "XV" (func $internal2636)) (import "env" "YV" (func $internal2637)) (import "env" "ZV" (func $internal2638)) (import "env" "_V" (func $internal2639)) (import "env" "$V" (func $internal2640)) (import "env" "aW" (func $internal2641)) (import "env" "bW" (func $internal2642)) (import "env" "cW" (func $internal2643)) (import "env" "dW" (func $internal2644)) (import "env" "eW" (func $internal2645)) (import "env" "fW" (func $internal2646)) (import "env" "gW" (func $internal2647)) (import "env" "hW" (func $internal2648)) (import "env" "iW" (func $internal2649)) (import "env" "jW" (func $internal2650)) (import "env" "kW" (func $internal2651)) (import "env" "lW" (func $internal2652)) (import "env" "mW" (func $internal2653)) (import "env" "nW" (func $internal2654)) (import "env" "oW" (func $internal2655)) (import "env" "pW" (func $internal2656)) (import "env" "qW" (func $internal2657)) (import "env" "rW" (func $internal2658)) (import "env" "sW" (func $internal2659)) (import "env" "tW" (func $internal2660)) (import "env" "uW" (func $internal2661)) (import "env" "vW" (func $internal2662)) (import "env" "wW" (func $internal2663)) (import "env" "xW" (func $internal2664)) (import "env" "yW" (func $internal2665)) (import "env" "zW" (func $internal2666)) (import "env" "AW" (func $internal2667)) (import "env" "BW" (func $internal2668)) (import "env" "CW" (func $internal2669)) (import "env" "DW" (func $internal2670)) (import "env" "EW" (func $internal2671)) (import "env" "FW" (func $internal2672)) (import "env" "GW" (func $internal2673)) (import "env" "HW" (func $internal2674)) (import "env" "IW" (func $internal2675)) (import "env" "JW" (func $internal2676)) (import "env" "KW" (func $internal2677)) (import "env" "LW" (func $internal2678)) (import "env" "MW" (func $internal2679)) (import "env" "NW" (func $internal2680)) (import "env" "OW" (func $internal2681)) (import "env" "PW" (func $internal2682)) (import "env" "QW" (func $internal2683)) (import "env" "RW" (func $internal2684)) (import "env" "SW" (func $internal2685)) (import "env" "TW" (func $internal2686)) (import "env" "UW" (func $internal2687)) (import "env" "VW" (func $internal2688)) (import "env" "WW" (func $internal2689)) (import "env" "XW" (func $internal2690)) (import "env" "YW" (func $internal2691)) (import "env" "ZW" (func $internal2692)) (import "env" "_W" (func $internal2693)) (import "env" "$W" (func $internal2694)) (import "env" "aX" (func $internal2695)) (import "env" "bX" (func $internal2696)) (import "env" "cX" (func $internal2697)) (import "env" "dX" (func $internal2698)) (import "env" "eX" (func $internal2699)) (import "env" "fX" (func $internal2700)) (import "env" "gX" (func $internal2701)) (import "env" "hX" (func $internal2702)) (import "env" "iX" (func $internal2703)) (import "env" "jX" (func $internal2704)) (import "env" "kX" (func $internal2705)) (import "env" "lX" (func $internal2706)) (import "env" "mX" (func $internal2707)) (import "env" "nX" (func $internal2708)) (import "env" "oX" (func $internal2709)) (import "env" "pX" (func $internal2710)) (import "env" "qX" (func $internal2711)) (import "env" "rX" (func $internal2712)) (import "env" "sX" (func $internal2713)) (import "env" "tX" (func $internal2714)) (import "env" "uX" (func $internal2715)) (import "env" "vX" (func $internal2716)) (import "env" "wX" (func $internal2717)) (import "env" "xX" (func $internal2718)) (import "env" "yX" (func $internal2719)) (import "env" "zX" (func $internal2720)) (import "env" "AX" (func $internal2721)) (import "env" "BX" (func $internal2722)) (import "env" "CX" (func $internal2723)) (import "env" "DX" (func $internal2724)) (import "env" "EX" (func $internal2725)) (import "env" "FX" (func $internal2726)) (import "env" "GX" (func $internal2727)) (import "env" "HX" (func $internal2728)) (import "env" "IX" (func $internal2729)) (import "env" "JX" (func $internal2730)) (import "env" "KX" (func $internal2731)) (import "env" "LX" (func $internal2732)) (import "env" "MX" (func $internal2733)) (import "env" "NX" (func $internal2734)) (import "env" "OX" (func $internal2735)) (import "env" "PX" (func $internal2736)) (import "env" "QX" (func $internal2737)) (import "env" "RX" (func $internal2738)) (import "env" "SX" (func $internal2739)) (import "env" "TX" (func $internal2740)) (import "env" "UX" (func $internal2741)) (import "env" "VX" (func $internal2742)) (import "env" "WX" (func $internal2743)) (import "env" "XX" (func $internal2744)) (import "env" "YX" (func $internal2745)) (import "env" "ZX" (func $internal2746)) (import "env" "_X" (func $internal2747)) (import "env" "$X" (func $internal2748)) (import "env" "aY" (func $internal2749)) (import "env" "bY" (func $internal2750)) (import "env" "cY" (func $internal2751)) (import "env" "dY" (func $internal2752)) (import "env" "eY" (func $internal2753)) (import "env" "fY" (func $internal2754)) (import "env" "gY" (func $internal2755)) (import "env" "hY" (func $internal2756)) (import "env" "iY" (func $internal2757)) (import "env" "jY" (func $internal2758)) (import "env" "kY" (func $internal2759)) (import "env" "lY" (func $internal2760)) (import "env" "mY" (func $internal2761)) (import "env" "nY" (func $internal2762)) (import "env" "oY" (func $internal2763)) (import "env" "pY" (func $internal2764)) (import "env" "qY" (func $internal2765)) (import "env" "rY" (func $internal2766)) (import "env" "sY" (func $internal2767)) (import "env" "tY" (func $internal2768)) (import "env" "uY" (func $internal2769)) (import "env" "vY" (func $internal2770)) (import "env" "wY" (func $internal2771)) (import "env" "xY" (func $internal2772)) (import "env" "yY" (func $internal2773)) (import "env" "zY" (func $internal2774)) (import "env" "AY" (func $internal2775)) (import "env" "BY" (func $internal2776)) (import "env" "CY" (func $internal2777)) (import "env" "DY" (func $internal2778)) (import "env" "EY" (func $internal2779)) (import "env" "FY" (func $internal2780)) (import "env" "GY" (func $internal2781)) (import "env" "HY" (func $internal2782)) (import "env" "IY" (func $internal2783)) (import "env" "JY" (func $internal2784)) (import "env" "KY" (func $internal2785)) (import "env" "LY" (func $internal2786)) (import "env" "MY" (func $internal2787)) (import "env" "NY" (func $internal2788)) (import "env" "OY" (func $internal2789)) (import "env" "PY" (func $internal2790)) (import "env" "QY" (func $internal2791)) (import "env" "RY" (func $internal2792)) (import "env" "SY" (func $internal2793)) (import "env" "TY" (func $internal2794)) (import "env" "UY" (func $internal2795)) (import "env" "VY" (func $internal2796)) (import "env" "WY" (func $internal2797)) (import "env" "XY" (func $internal2798)) (import "env" "YY" (func $internal2799)) (import "env" "ZY" (func $internal2800)) (import "env" "_Y" (func $internal2801)) (import "env" "$Y" (func $internal2802)) (import "env" "aZ" (func $internal2803)) (import "env" "bZ" (func $internal2804)) (import "env" "cZ" (func $internal2805)) (import "env" "dZ" (func $internal2806)) (import "env" "eZ" (func $internal2807)) (import "env" "fZ" (func $internal2808)) (import "env" "gZ" (func $internal2809)) (import "env" "hZ" (func $internal2810)) (import "env" "iZ" (func $internal2811)) (import "env" "jZ" (func $internal2812)) (import "env" "kZ" (func $internal2813)) (import "env" "lZ" (func $internal2814)) (import "env" "mZ" (func $internal2815)) (import "env" "nZ" (func $internal2816)) (import "env" "oZ" (func $internal2817)) (import "env" "pZ" (func $internal2818)) (import "env" "qZ" (func $internal2819)) (import "env" "rZ" (func $internal2820)) (import "env" "sZ" (func $internal2821)) (import "env" "tZ" (func $internal2822)) (import "env" "uZ" (func $internal2823)) (import "env" "vZ" (func $internal2824)) (import "env" "wZ" (func $internal2825)) (import "env" "xZ" (func $internal2826)) (import "env" "yZ" (func $internal2827)) (import "env" "zZ" (func $internal2828)) (import "env" "AZ" (func $internal2829)) (import "env" "BZ" (func $internal2830)) (import "env" "CZ" (func $internal2831)) (import "env" "DZ" (func $internal2832)) (import "env" "EZ" (func $internal2833)) (import "env" "FZ" (func $internal2834)) (import "env" "GZ" (func $internal2835)) (import "env" "HZ" (func $internal2836)) (import "env" "IZ" (func $internal2837)) (import "env" "JZ" (func $internal2838)) (import "env" "KZ" (func $internal2839)) (import "env" "LZ" (func $internal2840)) (import "env" "MZ" (func $internal2841)) (import "env" "NZ" (func $internal2842)) (import "env" "OZ" (func $internal2843)) (import "env" "PZ" (func $internal2844)) (import "env" "QZ" (func $internal2845)) (import "env" "RZ" (func $internal2846)) (import "env" "SZ" (func $internal2847)) (import "env" "TZ" (func $internal2848)) (import "env" "UZ" (func $internal2849)) (import "env" "VZ" (func $internal2850)) (import "env" "WZ" (func $internal2851)) (import "env" "XZ" (func $internal2852)) (import "env" "YZ" (func $internal2853)) (import "env" "ZZ" (func $internal2854)) (import "env" "_Z" (func $internal2855)) (import "env" "$Z" (func $internal2856)) (import "env" "a_" (func $internal2857)) (import "env" "b_" (func $internal2858)) (import "env" "c_" (func $internal2859)) (import "env" "d_" (func $internal2860)) (import "env" "e_" (func $internal2861)) (import "env" "f_" (func $internal2862)) (import "env" "g_" (func $internal2863)) (import "env" "h_" (func $internal2864)) (import "env" "i_" (func $internal2865)) (import "env" "j_" (func $internal2866)) (import "env" "k_" (func $internal2867)) (import "env" "l_" (func $internal2868)) (import "env" "m_" (func $internal2869)) (import "env" "n_" (func $internal2870)) (import "env" "o_" (func $internal2871)) (import "env" "p_" (func $internal2872)) (import "env" "q_" (func $internal2873)) (import "env" "r_" (func $internal2874)) (import "env" "s_" (func $internal2875)) (import "env" "t_" (func $internal2876)) (import "env" "u_" (func $internal2877)) (import "env" "v_" (func $internal2878)) (import "env" "w_" (func $internal2879)) (import "env" "x_" (func $internal2880)) (import "env" "y_" (func $internal2881)) (import "env" "z_" (func $internal2882)) (import "env" "A_" (func $internal2883)) (import "env" "B_" (func $internal2884)) (import "env" "C_" (func $internal2885)) (import "env" "D_" (func $internal2886)) (import "env" "E_" (func $internal2887)) (import "env" "F_" (func $internal2888)) (import "env" "G_" (func $internal2889)) (import "env" "H_" (func $internal2890)) (import "env" "I_" (func $internal2891)) (import "env" "J_" (func $internal2892)) (import "env" "K_" (func $internal2893)) (import "env" "L_" (func $internal2894)) (import "env" "M_" (func $internal2895)) (import "env" "N_" (func $internal2896)) (import "env" "O_" (func $internal2897)) (import "env" "P_" (func $internal2898)) (import "env" "Q_" (func $internal2899)) (import "env" "R_" (func $internal2900)) (import "env" "S_" (func $internal2901)) (import "env" "T_" (func $internal2902)) (import "env" "U_" (func $internal2903)) (import "env" "V_" (func $internal2904)) (import "env" "W_" (func $internal2905)) (import "env" "X_" (func $internal2906)) (import "env" "Y_" (func $internal2907)) (import "env" "Z_" (func $internal2908)) (import "env" "__" (func $internal2909)) (import "env" "$_" (func $internal2910)) (import "env" "a$" (func $internal2911)) (import "env" "b$" (func $internal2912)) (import "env" "c$" (func $internal2913)) (import "env" "d$" (func $internal2914)) (import "env" "e$" (func $internal2915)) (import "env" "f$" (func $internal2916)) (import "env" "g$" (func $internal2917)) (import "env" "h$" (func $internal2918)) (import "env" "i$" (func $internal2919)) (import "env" "j$" (func $internal2920)) (import "env" "k$" (func $internal2921)) (import "env" "l$" (func $internal2922)) (import "env" "m$" (func $internal2923)) (import "env" "n$" (func $internal2924)) (import "env" "o$" (func $internal2925)) (import "env" "p$" (func $internal2926)) (import "env" "q$" (func $internal2927)) (import "env" "r$" (func $internal2928)) (import "env" "s$" (func $internal2929)) (import "env" "t$" (func $internal2930)) (import "env" "u$" (func $internal2931)) (import "env" "v$" (func $internal2932)) (import "env" "w$" (func $internal2933)) (import "env" "x$" (func $internal2934)) (import "env" "y$" (func $internal2935)) (import "env" "z$" (func $internal2936)) (import "env" "A$" (func $internal2937)) (import "env" "B$" (func $internal2938)) (import "env" "C$" (func $internal2939)) (import "env" "D$" (func $internal2940)) (import "env" "E$" (func $internal2941)) (import "env" "F$" (func $internal2942)) (import "env" "G$" (func $internal2943)) (import "env" "H$" (func $internal2944)) (import "env" "I$" (func $internal2945)) (import "env" "J$" (func $internal2946)) (import "env" "K$" (func $internal2947)) (import "env" "L$" (func $internal2948)) (import "env" "M$" (func $internal2949)) (import "env" "N$" (func $internal2950)) (import "env" "O$" (func $internal2951)) (import "env" "P$" (func $internal2952)) (import "env" "Q$" (func $internal2953)) (import "env" "R$" (func $internal2954)) (import "env" "S$" (func $internal2955)) (import "env" "T$" (func $internal2956)) (import "env" "U$" (func $internal2957)) (import "env" "V$" (func $internal2958)) (import "env" "W$" (func $internal2959)) (import "env" "X$" (func $internal2960)) (import "env" "Y$" (func $internal2961)) (import "env" "Z$" (func $internal2962)) (import "env" "_$" (func $internal2963)) (import "env" "$$" (func $internal2964)) (import "env" "a0" (func $internal2965)) (import "env" "b0" (func $internal2966)) (import "env" "c0" (func $internal2967)) (import "env" "d0" (func $internal2968)) (import "env" "e0" (func $internal2969)) (import "env" "f0" (func $internal2970)) (import "env" "g0" (func $internal2971)) (import "env" "h0" (func $internal2972)) (import "env" "i0" (func $internal2973)) (import "env" "j0" (func $internal2974)) (import "env" "k0" (func $internal2975)) (import "env" "l0" (func $internal2976)) (import "env" "m0" (func $internal2977)) (import "env" "n0" (func $internal2978)) (import "env" "o0" (func $internal2979)) (import "env" "p0" (func $internal2980)) (import "env" "q0" (func $internal2981)) (import "env" "r0" (func $internal2982)) (import "env" "s0" (func $internal2983)) (import "env" "t0" (func $internal2984)) (import "env" "u0" (func $internal2985)) (import "env" "v0" (func $internal2986)) (import "env" "w0" (func $internal2987)) (import "env" "x0" (func $internal2988)) (import "env" "y0" (func $internal2989)) (import "env" "z0" (func $internal2990)) (import "env" "A0" (func $internal2991)) (import "env" "B0" (func $internal2992)) (import "env" "C0" (func $internal2993)) (import "env" "D0" (func $internal2994)) (import "env" "E0" (func $internal2995)) (import "env" "F0" (func $internal2996)) (import "env" "G0" (func $internal2997)) (import "env" "H0" (func $internal2998)) (import "env" "I0" (func $internal2999)) (import "env" "J0" (func $internal3000)) (import "env" "K0" (func $internal3001)) (import "env" "L0" (func $internal3002)) (import "env" "M0" (func $internal3003)) (import "env" "N0" (func $internal3004)) (import "env" "O0" (func $internal3005)) (import "env" "P0" (func $internal3006)) (import "env" "Q0" (func $internal3007)) (import "env" "R0" (func $internal3008)) (import "env" "S0" (func $internal3009)) (import "env" "T0" (func $internal3010)) (import "env" "U0" (func $internal3011)) (import "env" "V0" (func $internal3012)) (import "env" "W0" (func $internal3013)) (import "env" "X0" (func $internal3014)) (import "env" "Y0" (func $internal3015)) (import "env" "Z0" (func $internal3016)) (import "env" "_0" (func $internal3017)) (import "env" "$0" (func $internal3018)) (import "env" "a1" (func $internal3019)) (import "env" "b1" (func $internal3020)) (import "env" "c1" (func $internal3021)) (import "env" "d1" (func $internal3022)) (import "env" "e1" (func $internal3023)) (import "env" "f1" (func $internal3024)) (import "env" "g1" (func $internal3025)) (import "env" "h1" (func $internal3026)) (import "env" "i1" (func $internal3027)) (import "env" "j1" (func $internal3028)) (import "env" "k1" (func $internal3029)) (import "env" "l1" (func $internal3030)) (import "env" "m1" (func $internal3031)) (import "env" "n1" (func $internal3032)) (import "env" "o1" (func $internal3033)) (import "env" "p1" (func $internal3034)) (import "env" "q1" (func $internal3035)) (import "env" "r1" (func $internal3036)) (import "env" "s1" (func $internal3037)) (import "env" "t1" (func $internal3038)) (import "env" "u1" (func $internal3039)) (import "env" "v1" (func $internal3040)) (import "env" "w1" (func $internal3041)) (import "env" "x1" (func $internal3042)) (import "env" "y1" (func $internal3043)) (import "env" "z1" (func $internal3044)) (import "env" "A1" (func $internal3045)) (import "env" "B1" (func $internal3046)) (import "env" "C1" (func $internal3047)) (import "env" "D1" (func $internal3048)) (import "env" "E1" (func $internal3049)) (import "env" "F1" (func $internal3050)) (import "env" "G1" (func $internal3051)) (import "env" "H1" (func $internal3052)) (import "env" "I1" (func $internal3053)) (import "env" "J1" (func $internal3054)) (import "env" "K1" (func $internal3055)) (import "env" "L1" (func $internal3056)) (import "env" "M1" (func $internal3057)) (import "env" "N1" (func $internal3058)) (import "env" "O1" (func $internal3059)) (import "env" "P1" (func $internal3060)) (import "env" "Q1" (func $internal3061)) (import "env" "R1" (func $internal3062)) (import "env" "S1" (func $internal3063)) (import "env" "T1" (func $internal3064)) (import "env" "U1" (func $internal3065)) (import "env" "V1" (func $internal3066)) (import "env" "W1" (func $internal3067)) (import "env" "X1" (func $internal3068)) (import "env" "Y1" (func $internal3069)) (import "env" "Z1" (func $internal3070)) (import "env" "_1" (func $internal3071)) (import "env" "$1" (func $internal3072)) (import "env" "a2" (func $internal3073)) (import "env" "b2" (func $internal3074)) (import "env" "c2" (func $internal3075)) (import "env" "d2" (func $internal3076)) (import "env" "e2" (func $internal3077)) (import "env" "f2" (func $internal3078)) (import "env" "g2" (func $internal3079)) (import "env" "h2" (func $internal3080)) (import "env" "i2" (func $internal3081)) (import "env" "j2" (func $internal3082)) (import "env" "k2" (func $internal3083)) (import "env" "l2" (func $internal3084)) (import "env" "m2" (func $internal3085)) (import "env" "n2" (func $internal3086)) (import "env" "o2" (func $internal3087)) (import "env" "p2" (func $internal3088)) (import "env" "q2" (func $internal3089)) (import "env" "r2" (func $internal3090)) (import "env" "s2" (func $internal3091)) (import "env" "t2" (func $internal3092)) (import "env" "u2" (func $internal3093)) (import "env" "v2" (func $internal3094)) (import "env" "w2" (func $internal3095)) (import "env" "x2" (func $internal3096)) (import "env" "y2" (func $internal3097)) (import "env" "z2" (func $internal3098)) (import "env" "A2" (func $internal3099)) (import "env" "B2" (func $internal3100)) (import "env" "C2" (func $internal3101)) (import "env" "D2" (func $internal3102)) (import "env" "E2" (func $internal3103)) (import "env" "F2" (func $internal3104)) (import "env" "G2" (func $internal3105)) (import "env" "H2" (func $internal3106)) (import "env" "I2" (func $internal3107)) (import "env" "J2" (func $internal3108)) (import "env" "K2" (func $internal3109)) (import "env" "L2" (func $internal3110)) (import "env" "M2" (func $internal3111)) (import "env" "N2" (func $internal3112)) (import "env" "O2" (func $internal3113)) (import "env" "P2" (func $internal3114)) (import "env" "Q2" (func $internal3115)) (import "env" "R2" (func $internal3116)) (import "env" "S2" (func $internal3117)) (import "env" "T2" (func $internal3118)) (import "env" "U2" (func $internal3119)) (import "env" "V2" (func $internal3120)) (import "env" "W2" (func $internal3121)) (import "env" "X2" (func $internal3122)) (import "env" "Y2" (func $internal3123)) (import "env" "Z2" (func $internal3124)) (import "env" "_2" (func $internal3125)) (import "env" "$2" (func $internal3126)) (import "env" "a3" (func $internal3127)) (import "env" "b3" (func $internal3128)) (import "env" "c3" (func $internal3129)) (import "env" "d3" (func $internal3130)) (import "env" "e3" (func $internal3131)) (import "env" "f3" (func $internal3132)) (import "env" "g3" (func $internal3133)) (import "env" "h3" (func $internal3134)) (import "env" "i3" (func $internal3135)) (import "env" "j3" (func $internal3136)) (import "env" "k3" (func $internal3137)) (import "env" "l3" (func $internal3138)) (import "env" "m3" (func $internal3139)) (import "env" "n3" (func $internal3140)) (import "env" "o3" (func $internal3141)) (import "env" "p3" (func $internal3142)) (import "env" "q3" (func $internal3143)) (import "env" "r3" (func $internal3144)) (import "env" "s3" (func $internal3145)) (import "env" "t3" (func $internal3146)) (import "env" "u3" (func $internal3147)) (import "env" "v3" (func $internal3148)) (import "env" "w3" (func $internal3149)) (import "env" "x3" (func $internal3150)) (import "env" "y3" (func $internal3151)) (import "env" "z3" (func $internal3152)) (import "env" "A3" (func $internal3153)) (import "env" "B3" (func $internal3154)) (import "env" "C3" (func $internal3155)) (import "env" "D3" (func $internal3156)) (import "env" "E3" (func $internal3157)) (import "env" "F3" (func $internal3158)) (import "env" "G3" (func $internal3159)) (import "env" "H3" (func $internal3160)) (import "env" "I3" (func $internal3161)) (import "env" "J3" (func $internal3162)) (import "env" "K3" (func $internal3163)) (import "env" "L3" (func $internal3164)) (import "env" "M3" (func $internal3165)) (import "env" "N3" (func $internal3166)) (import "env" "O3" (func $internal3167)) (import "env" "P3" (func $internal3168)) (import "env" "Q3" (func $internal3169)) (import "env" "R3" (func $internal3170)) (import "env" "S3" (func $internal3171)) (import "env" "T3" (func $internal3172)) (import "env" "U3" (func $internal3173)) (import "env" "V3" (func $internal3174)) (import "env" "W3" (func $internal3175)) (import "env" "X3" (func $internal3176)) (import "env" "Y3" (func $internal3177)) (import "env" "Z3" (func $internal3178)) (import "env" "_3" (func $internal3179)) (import "env" "$3" (func $internal3180)) (import "env" "a4" (func $internal3181)) (import "env" "b4" (func $internal3182)) (import "env" "c4" (func $internal3183)) (import "env" "d4" (func $internal3184)) (import "env" "e4" (func $internal3185)) (import "env" "f4" (func $internal3186)) (import "env" "g4" (func $internal3187)) (import "env" "h4" (func $internal3188)) (import "env" "i4" (func $internal3189)) (import "env" "j4" (func $internal3190)) (import "env" "k4" (func $internal3191)) (import "env" "l4" (func $internal3192)) (import "env" "m4" (func $internal3193)) (import "env" "n4" (func $internal3194)) (import "env" "o4" (func $internal3195)) (import "env" "p4" (func $internal3196)) (import "env" "q4" (func $internal3197)) (import "env" "r4" (func $internal3198)) (import "env" "s4" (func $internal3199)) (import "env" "t4" (func $internal3200)) (import "env" "u4" (func $internal3201)) (import "env" "v4" (func $internal3202)) (import "env" "w4" (func $internal3203)) (import "env" "x4" (func $internal3204)) (import "env" "y4" (func $internal3205)) (import "env" "z4" (func $internal3206)) (import "env" "A4" (func $internal3207)) (import "env" "B4" (func $internal3208)) (import "env" "C4" (func $internal3209)) (import "env" "D4" (func $internal3210)) (import "env" "E4" (func $internal3211)) (import "env" "F4" (func $internal3212)) (import "env" "G4" (func $internal3213)) (import "env" "H4" (func $internal3214)) (import "env" "I4" (func $internal3215)) (import "env" "J4" (func $internal3216)) (import "env" "K4" (func $internal3217)) (import "env" "L4" (func $internal3218)) (import "env" "M4" (func $internal3219)) (import "env" "N4" (func $internal3220)) (import "env" "O4" (func $internal3221)) (import "env" "P4" (func $internal3222)) (import "env" "Q4" (func $internal3223)) (import "env" "R4" (func $internal3224)) (import "env" "S4" (func $internal3225)) (import "env" "T4" (func $internal3226)) (import "env" "U4" (func $internal3227)) (import "env" "V4" (func $internal3228)) (import "env" "W4" (func $internal3229)) (import "env" "X4" (func $internal3230)) (import "env" "Y4" (func $internal3231)) (import "env" "Z4" (func $internal3232)) (import "env" "_4" (func $internal3233)) (import "env" "$4" (func $internal3234)) (import "env" "a5" (func $internal3235)) (import "env" "b5" (func $internal3236)) (import "env" "c5" (func $internal3237)) (import "env" "d5" (func $internal3238)) (import "env" "e5" (func $internal3239)) (import "env" "f5" (func $internal3240)) (import "env" "g5" (func $internal3241)) (import "env" "h5" (func $internal3242)) (import "env" "i5" (func $internal3243)) (import "env" "j5" (func $internal3244)) (import "env" "k5" (func $internal3245)) (import "env" "l5" (func $internal3246)) (import "env" "m5" (func $internal3247)) (import "env" "n5" (func $internal3248)) (import "env" "o5" (func $internal3249)) (import "env" "p5" (func $internal3250)) (import "env" "q5" (func $internal3251)) (import "env" "r5" (func $internal3252)) (import "env" "s5" (func $internal3253)) (import "env" "t5" (func $internal3254)) (import "env" "u5" (func $internal3255)) (import "env" "v5" (func $internal3256)) (import "env" "w5" (func $internal3257)) (import "env" "x5" (func $internal3258)) (import "env" "y5" (func $internal3259)) (import "env" "z5" (func $internal3260)) (import "env" "A5" (func $internal3261)) (import "env" "B5" (func $internal3262)) (import "env" "C5" (func $internal3263)) (import "env" "D5" (func $internal3264)) (import "env" "E5" (func $internal3265)) (import "env" "F5" (func $internal3266)) (import "env" "G5" (func $internal3267)) (import "env" "H5" (func $internal3268)) (import "env" "I5" (func $internal3269)) (import "env" "J5" (func $internal3270)) (import "env" "K5" (func $internal3271)) (import "env" "L5" (func $internal3272)) (import "env" "M5" (func $internal3273)) (import "env" "N5" (func $internal3274)) (import "env" "O5" (func $internal3275)) (import "env" "P5" (func $internal3276)) (import "env" "Q5" (func $internal3277)) (import "env" "R5" (func $internal3278)) (import "env" "S5" (func $internal3279)) (import "env" "T5" (func $internal3280)) (import "env" "U5" (func $internal3281)) (import "env" "V5" (func $internal3282)) (import "env" "W5" (func $internal3283)) (import "env" "X5" (func $internal3284)) (import "env" "Y5" (func $internal3285)) (import "env" "Z5" (func $internal3286)) (import "env" "_5" (func $internal3287)) (import "env" "$5" (func $internal3288)) (import "env" "a6" (func $internal3289)) (import "env" "b6" (func $internal3290)) (import "env" "c6" (func $internal3291)) (import "env" "d6" (func $internal3292)) (import "env" "e6" (func $internal3293)) (import "env" "f6" (func $internal3294)) (import "env" "g6" (func $internal3295)) (import "env" "h6" (func $internal3296)) (import "env" "i6" (func $internal3297)) (import "env" "j6" (func $internal3298)) (import "env" "k6" (func $internal3299)) (import "env" "l6" (func $internal3300)) (import "env" "m6" (func $internal3301)) (import "env" "n6" (func $internal3302)) (import "env" "o6" (func $internal3303)) (import "env" "p6" (func $internal3304)) (import "env" "q6" (func $internal3305)) (import "env" "r6" (func $internal3306)) (import "env" "s6" (func $internal3307)) (import "env" "t6" (func $internal3308)) (import "env" "u6" (func $internal3309)) (import "env" "v6" (func $internal3310)) (import "env" "w6" (func $internal3311)) (import "env" "x6" (func $internal3312)) (import "env" "y6" (func $internal3313)) (import "env" "z6" (func $internal3314)) (import "env" "A6" (func $internal3315)) (import "env" "B6" (func $internal3316)) (import "env" "C6" (func $internal3317)) (import "env" "D6" (func $internal3318)) (import "env" "E6" (func $internal3319)) (import "env" "F6" (func $internal3320)) (import "env" "G6" (func $internal3321)) (import "env" "H6" (func $internal3322)) (import "env" "I6" (func $internal3323)) (import "env" "J6" (func $internal3324)) (import "env" "K6" (func $internal3325)) (import "env" "L6" (func $internal3326)) (import "env" "M6" (func $internal3327)) (import "env" "N6" (func $internal3328)) (import "env" "O6" (func $internal3329)) (import "env" "P6" (func $internal3330)) (import "env" "Q6" (func $internal3331)) (import "env" "R6" (func $internal3332)) (import "env" "S6" (func $internal3333)) (import "env" "T6" (func $internal3334)) (import "env" "U6" (func $internal3335)) (import "env" "V6" (func $internal3336)) (import "env" "W6" (func $internal3337)) (import "env" "X6" (func $internal3338)) (import "env" "Y6" (func $internal3339)) (import "env" "Z6" (func $internal3340)) (import "env" "_6" (func $internal3341)) (import "env" "$6" (func $internal3342)) (import "env" "a7" (func $internal3343)) (import "env" "b7" (func $internal3344)) (import "env" "c7" (func $internal3345)) (import "env" "d7" (func $internal3346)) (import "env" "e7" (func $internal3347)) (import "env" "f7" (func $internal3348)) (import "env" "g7" (func $internal3349)) (import "env" "h7" (func $internal3350)) (import "env" "i7" (func $internal3351)) (import "env" "j7" (func $internal3352)) (import "env" "k7" (func $internal3353)) (import "env" "l7" (func $internal3354)) (import "env" "m7" (func $internal3355)) (import "env" "n7" (func $internal3356)) (import "env" "o7" (func $internal3357)) (import "env" "p7" (func $internal3358)) (import "env" "q7" (func $internal3359)) (import "env" "r7" (func $internal3360)) (import "env" "s7" (func $internal3361)) (import "env" "t7" (func $internal3362)) (import "env" "u7" (func $internal3363)) (import "env" "v7" (func $internal3364)) (import "env" "w7" (func $internal3365)) (import "env" "x7" (func $internal3366)) (import "env" "y7" (func $internal3367)) (import "env" "z7" (func $internal3368)) (import "env" "A7" (func $internal3369)) (import "env" "B7" (func $internal3370)) (import "env" "C7" (func $internal3371)) (import "env" "D7" (func $internal3372)) (import "env" "E7" (func $internal3373)) (import "env" "F7" (func $internal3374)) (import "env" "G7" (func $internal3375)) (import "env" "H7" (func $internal3376)) (import "env" "I7" (func $internal3377)) (import "env" "J7" (func $internal3378)) (import "env" "K7" (func $internal3379)) (import "env" "L7" (func $internal3380)) (import "env" "M7" (func $internal3381)) (import "env" "N7" (func $internal3382)) (import "env" "O7" (func $internal3383)) (import "env" "P7" (func $internal3384)) (import "env" "Q7" (func $internal3385)) (import "env" "R7" (func $internal3386)) (import "env" "S7" (func $internal3387)) (import "env" "T7" (func $internal3388)) (import "env" "U7" (func $internal3389)) (import "env" "V7" (func $internal3390)) (import "env" "W7" (func $internal3391)) (import "env" "X7" (func $internal3392)) (import "env" "Y7" (func $internal3393)) (import "env" "Z7" (func $internal3394)) (import "env" "_7" (func $internal3395)) (import "env" "$7" (func $internal3396)) (import "env" "a8" (func $internal3397)) (import "env" "b8" (func $internal3398)) (import "env" "c8" (func $internal3399)) (import "env" "d8" (func $internal3400)) (import "env" "e8" (func $internal3401)) (import "env" "f8" (func $internal3402)) (import "env" "g8" (func $internal3403)) (import "env" "h8" (func $internal3404)) (import "env" "i8" (func $internal3405)) (import "env" "j8" (func $internal3406)) (import "env" "k8" (func $internal3407)) (import "env" "l8" (func $internal3408)) (import "env" "m8" (func $internal3409)) (import "env" "n8" (func $internal3410)) (import "env" "o8" (func $internal3411)) (import "env" "p8" (func $internal3412)) (import "env" "q8" (func $internal3413)) (import "env" "r8" (func $internal3414)) (import "env" "s8" (func $internal3415)) (import "env" "t8" (func $internal3416)) (import "env" "u8" (func $internal3417)) (import "env" "v8" (func $internal3418)) (import "env" "w8" (func $internal3419)) (import "env" "x8" (func $internal3420)) (import "env" "y8" (func $internal3421)) (import "env" "z8" (func $internal3422)) (import "env" "A8" (func $internal3423)) (import "env" "B8" (func $internal3424)) (import "env" "C8" (func $internal3425)) (import "env" "D8" (func $internal3426)) (import "env" "E8" (func $internal3427)) (import "env" "F8" (func $internal3428)) (import "env" "G8" (func $internal3429)) (import "env" "H8" (func $internal3430)) (import "env" "I8" (func $internal3431)) (import "env" "J8" (func $internal3432)) (import "env" "K8" (func $internal3433)) (import "env" "L8" (func $internal3434)) (import "env" "M8" (func $internal3435)) (import "env" "N8" (func $internal3436)) (import "env" "O8" (func $internal3437)) (import "env" "P8" (func $internal3438)) (import "env" "Q8" (func $internal3439)) (import "env" "R8" (func $internal3440)) (import "env" "S8" (func $internal3441)) (import "env" "T8" (func $internal3442)) (import "env" "U8" (func $internal3443)) (import "env" "V8" (func $internal3444)) (import "env" "W8" (func $internal3445)) (import "env" "X8" (func $internal3446)) (import "env" "Y8" (func $internal3447)) (import "env" "Z8" (func $internal3448)) (import "env" "_8" (func $internal3449)) (import "env" "$8" (func $internal3450)) (import "env" "a9" (func $internal3451)) (import "env" "b9" (func $internal3452)) (import "env" "c9" (func $internal3453)) (import "env" "d9" (func $internal3454)) (import "env" "e9" (func $internal3455)) (import "env" "f9" (func $internal3456)) (import "env" "g9" (func $internal3457)) (import "env" "h9" (func $internal3458)) (import "env" "i9" (func $internal3459)) (import "env" "j9" (func $internal3460)) (import "env" "k9" (func $internal3461)) (import "env" "l9" (func $internal3462)) (import "env" "m9" (func $internal3463)) (import "env" "n9" (func $internal3464)) (import "env" "o9" (func $internal3465)) (import "env" "p9" (func $internal3466)) (import "env" "q9" (func $internal3467)) (import "env" "r9" (func $internal3468)) (import "env" "s9" (func $internal3469)) (import "env" "t9" (func $internal3470)) (import "env" "u9" (func $internal3471)) (import "env" "v9" (func $internal3472)) (import "env" "w9" (func $internal3473)) (import "env" "x9" (func $internal3474)) (import "env" "y9" (func $internal3475)) (import "env" "z9" (func $internal3476)) (import "env" "A9" (func $internal3477)) (import "env" "B9" (func $internal3478)) (import "env" "C9" (func $internal3479)) (import "env" "D9" (func $internal3480)) (import "env" "E9" (func $internal3481)) (import "env" "F9" (func $internal3482)) (import "env" "G9" (func $internal3483)) (import "env" "H9" (func $internal3484)) (import "env" "I9" (func $internal3485)) (import "env" "J9" (func $internal3486)) (import "env" "K9" (func $internal3487)) (import "env" "L9" (func $internal3488)) (import "env" "M9" (func $internal3489)) (import "env" "N9" (func $internal3490)) (import "env" "O9" (func $internal3491)) (import "env" "P9" (func $internal3492)) (import "env" "Q9" (func $internal3493)) (import "env" "R9" (func $internal3494)) (import "env" "S9" (func $internal3495)) (import "env" "T9" (func $internal3496)) (import "env" "U9" (func $internal3497)) (import "env" "V9" (func $internal3498)) (import "env" "W9" (func $internal3499)) (import "env" "X9" (func $internal3500)) (import "env" "Y9" (func $internal3501)) (import "env" "Z9" (func $internal3502)) (import "env" "_9" (func $internal3503)) (import "env" "$9" (func $internal3504)) (import "env" "aaa" (func $internal3505)) (import "env" "baa" (func $internal3506)) (import "env" "caa" (func $internal3507)) (import "env" "daa" (func $internal3508)) (import "env" "eaa" (func $internal3509)) (import "env" "faa" (func $internal3510)) (import "env" "gaa" (func $internal3511)) (import "env" "haa" (func $internal3512)) (import "env" "iaa" (func $internal3513)) (import "env" "jaa" (func $internal3514)) (import "env" "kaa" (func $internal3515)) (import "env" "laa" (func $internal3516)) (import "env" "maa" (func $internal3517)) (import "env" "naa" (func $internal3518)) (import "env" "oaa" (func $internal3519)) (import "env" "paa" (func $internal3520)) (import "env" "qaa" (func $internal3521)) (import "env" "raa" (func $internal3522)) (import "env" "saa" (func $internal3523)) (import "env" "taa" (func $internal3524)) (import "env" "uaa" (func $internal3525)) (import "env" "vaa" (func $internal3526)) (import "env" "waa" (func $internal3527)) (import "env" "xaa" (func $internal3528)) (import "env" "yaa" (func $internal3529)) (import "env" "zaa" (func $internal3530)) (import "env" "Aaa" (func $internal3531)) (import "env" "Baa" (func $internal3532)) (import "env" "Caa" (func $internal3533)) (import "env" "Daa" (func $internal3534)) (import "env" "Eaa" (func $internal3535)) (import "env" "Faa" (func $internal3536)) (import "env" "Gaa" (func $internal3537)) (import "env" "Haa" (func $internal3538)) (import "env" "Iaa" (func $internal3539)) (import "env" "Jaa" (func $internal3540)) (import "env" "Kaa" (func $internal3541)) (import "env" "Laa" (func $internal3542)) (import "env" "Maa" (func $internal3543)) (import "env" "Naa" (func $internal3544)) (import "env" "Oaa" (func $internal3545)) (import "env" "Paa" (func $internal3546)) (import "env" "Qaa" (func $internal3547)) (import "env" "Raa" (func $internal3548)) (import "env" "Saa" (func $internal3549)) (import "env" "Taa" (func $internal3550)) (import "env" "Uaa" (func $internal3551)) (import "env" "Vaa" (func $internal3552)) (import "env" "Waa" (func $internal3553)) (import "env" "Xaa" (func $internal3554)) (import "env" "Yaa" (func $internal3555)) (import "env" "Zaa" (func $internal3556)) (import "env" "_aa" (func $internal3557)) (import "env" "$aa" (func $internal3558)) (import "env" "aba" (func $internal3559)) (import "env" "bba" (func $internal3560)) (import "env" "cba" (func $internal3561)) (import "env" "dba" (func $internal3562)) (import "env" "eba" (func $internal3563)) (import "env" "fba" (func $internal3564)) (import "env" "gba" (func $internal3565)) (import "env" "hba" (func $internal3566)) (import "env" "iba" (func $internal3567)) (import "env" "jba" (func $internal3568)) (import "env" "kba" (func $internal3569)) (import "env" "lba" (func $internal3570)) (import "env" "mba" (func $internal3571)) (import "env" "nba" (func $internal3572)) (import "env" "oba" (func $internal3573)) (import "env" "pba" (func $internal3574)) (import "env" "qba" (func $internal3575)) (import "env" "rba" (func $internal3576)) (import "env" "sba" (func $internal3577)) (import "env" "tba" (func $internal3578)) (import "env" "uba" (func $internal3579)) (import "env" "vba" (func $internal3580)) (import "env" "wba" (func $internal3581)) (import "env" "xba" (func $internal3582)) (import "env" "yba" (func $internal3583)) (import "env" "zba" (func $internal3584)) (import "env" "Aba" (func $internal3585)) (import "env" "Bba" (func $internal3586)) (import "env" "Cba" (func $internal3587)) (import "env" "Dba" (func $internal3588)) (import "env" "Eba" (func $internal3589)) (import "env" "Fba" (func $internal3590)) (import "env" "Gba" (func $internal3591)) (import "env" "Hba" (func $internal3592)) (import "env" "Iba" (func $internal3593)) (import "env" "Jba" (func $internal3594)) (import "env" "Kba" (func $internal3595)) (import "env" "Lba" (func $internal3596)) (import "env" "Mba" (func $internal3597)) (import "env" "Nba" (func $internal3598)) (import "env" "Oba" (func $internal3599)) (import "env" "Pba" (func $internal3600)) (import "env" "Qba" (func $internal3601)) (import "env" "Rba" (func $internal3602)) (import "env" "Sba" (func $internal3603)) (import "env" "Tba" (func $internal3604)) (import "env" "Uba" (func $internal3605)) (import "env" "Vba" (func $internal3606)) (import "env" "Wba" (func $internal3607)) (import "env" "Xba" (func $internal3608)) (import "env" "Yba" (func $internal3609)) (import "env" "Zba" (func $internal3610)) (import "env" "_ba" (func $internal3611)) (import "env" "$ba" (func $internal3612)) (import "env" "aca" (func $internal3613)) (import "env" "bca" (func $internal3614)) (import "env" "cca" (func $internal3615)) (import "env" "dca" (func $internal3616)) (import "env" "eca" (func $internal3617)) (import "env" "fca" (func $internal3618)) (import "env" "gca" (func $internal3619)) (import "env" "hca" (func $internal3620)) (import "env" "ica" (func $internal3621)) (import "env" "jca" (func $internal3622)) (import "env" "kca" (func $internal3623)) (import "env" "lca" (func $internal3624)) (import "env" "mca" (func $internal3625)) (import "env" "nca" (func $internal3626)) (import "env" "oca" (func $internal3627)) (import "env" "pca" (func $internal3628)) (import "env" "qca" (func $internal3629)) (import "env" "rca" (func $internal3630)) (import "env" "sca" (func $internal3631)) (import "env" "tca" (func $internal3632)) (import "env" "uca" (func $internal3633)) (import "env" "vca" (func $internal3634)) (import "env" "wca" (func $internal3635)) (import "env" "xca" (func $internal3636)) (import "env" "yca" (func $internal3637)) (import "env" "zca" (func $internal3638)) (import "env" "Aca" (func $internal3639)) (import "env" "Bca" (func $internal3640)) (import "env" "Cca" (func $internal3641)) (import "env" "Dca" (func $internal3642)) (import "env" "Eca" (func $internal3643)) (import "env" "Fca" (func $internal3644)) (import "env" "Gca" (func $internal3645)) (import "env" "Hca" (func $internal3646)) (import "env" "Ica" (func $internal3647)) (import "env" "Jca" (func $internal3648)) (import "env" "Kca" (func $internal3649)) (import "env" "Lca" (func $internal3650)) (import "env" "Mca" (func $internal3651)) (import "env" "Nca" (func $internal3652)) (import "env" "Oca" (func $internal3653)) (import "env" "Pca" (func $internal3654)) (import "env" "Qca" (func $internal3655)) (import "env" "Rca" (func $internal3656)) (import "env" "Sca" (func $internal3657)) (import "env" "Tca" (func $internal3658)) (import "env" "Uca" (func $internal3659)) (import "env" "Vca" (func $internal3660)) (import "env" "Wca" (func $internal3661)) (import "env" "Xca" (func $internal3662)) (import "env" "Yca" (func $internal3663)) (import "env" "Zca" (func $internal3664)) (import "env" "_ca" (func $internal3665)) (import "env" "$ca" (func $internal3666)) (import "env" "ada" (func $internal3667)) (import "env" "bda" (func $internal3668)) (import "env" "cda" (func $internal3669)) (import "env" "dda" (func $internal3670)) (import "env" "eda" (func $internal3671)) (import "env" "fda" (func $internal3672)) (import "env" "gda" (func $internal3673)) (import "env" "hda" (func $internal3674)) (import "env" "ida" (func $internal3675)) (import "env" "jda" (func $internal3676)) (import "env" "kda" (func $internal3677)) (import "env" "lda" (func $internal3678)) (import "env" "mda" (func $internal3679)) (import "env" "nda" (func $internal3680)) (import "env" "oda" (func $internal3681)) (import "env" "pda" (func $internal3682)) (import "env" "qda" (func $internal3683)) (import "env" "rda" (func $internal3684)) (import "env" "sda" (func $internal3685)) (import "env" "tda" (func $internal3686)) (import "env" "uda" (func $internal3687)) (import "env" "vda" (func $internal3688)) (import "env" "wda" (func $internal3689)) (import "env" "xda" (func $internal3690)) (import "env" "yda" (func $internal3691)) (import "env" "zda" (func $internal3692)) (import "env" "Ada" (func $internal3693)) (import "env" "Bda" (func $internal3694)) (import "env" "Cda" (func $internal3695)) (import "env" "Dda" (func $internal3696)) (import "env" "Eda" (func $internal3697)) (import "env" "Fda" (func $internal3698)) (import "env" "Gda" (func $internal3699)) (import "env" "Hda" (func $internal3700)) (import "env" "Ida" (func $internal3701)) (import "env" "Jda" (func $internal3702)) (import "env" "Kda" (func $internal3703)) (import "env" "Lda" (func $internal3704)) (import "env" "Mda" (func $internal3705)) (import "env" "Nda" (func $internal3706)) (import "env" "Oda" (func $internal3707)) (import "env" "Pda" (func $internal3708)) (import "env" "Qda" (func $internal3709)) (import "env" "Rda" (func $internal3710)) (import "env" "Sda" (func $internal3711)) (import "env" "Tda" (func $internal3712)) (import "env" "Uda" (func $internal3713)) (import "env" "Vda" (func $internal3714)) (import "env" "Wda" (func $internal3715)) (import "env" "Xda" (func $internal3716)) (import "env" "Yda" (func $internal3717)) (import "env" "Zda" (func $internal3718)) (import "env" "_da" (func $internal3719)) (import "env" "$da" (func $internal3720)) (import "env" "aea" (func $internal3721)) (import "env" "bea" (func $internal3722)) (import "env" "cea" (func $internal3723)) (import "env" "dea" (func $internal3724)) (import "env" "eea" (func $internal3725)) (import "env" "fea" (func $internal3726)) (import "env" "gea" (func $internal3727)) (import "env" "hea" (func $internal3728)) (import "env" "iea" (func $internal3729)) (import "env" "jea" (func $internal3730)) (import "env" "kea" (func $internal3731)) (import "env" "lea" (func $internal3732)) (import "env" "mea" (func $internal3733)) (import "env" "nea" (func $internal3734)) (import "env" "oea" (func $internal3735)) (import "env" "pea" (func $internal3736)) (import "env" "qea" (func $internal3737)) (import "env" "rea" (func $internal3738)) (import "env" "sea" (func $internal3739)) (import "env" "tea" (func $internal3740)) (import "env" "uea" (func $internal3741)) (import "env" "vea" (func $internal3742)) (import "env" "wea" (func $internal3743)) (import "env" "xea" (func $internal3744)) (import "env" "yea" (func $internal3745)) (import "env" "zea" (func $internal3746)) (import "env" "Aea" (func $internal3747)) (import "env" "Bea" (func $internal3748)) (import "env" "Cea" (func $internal3749)) (import "env" "Dea" (func $internal3750)) (import "env" "Eea" (func $internal3751)) (import "env" "Fea" (func $internal3752)) (import "env" "Gea" (func $internal3753)) (import "env" "Hea" (func $internal3754)) (import "env" "Iea" (func $internal3755)) (import "env" "Jea" (func $internal3756)) (import "env" "Kea" (func $internal3757)) (import "env" "Lea" (func $internal3758)) (import "env" "Mea" (func $internal3759)) (import "env" "Nea" (func $internal3760)) (import "env" "Oea" (func $internal3761)) (import "env" "Pea" (func $internal3762)) (import "env" "Qea" (func $internal3763)) (import "env" "Rea" (func $internal3764)) (import "env" "Sea" (func $internal3765)) (import "env" "Tea" (func $internal3766)) (import "env" "Uea" (func $internal3767)) (import "env" "Vea" (func $internal3768)) (import "env" "Wea" (func $internal3769)) (import "env" "Xea" (func $internal3770)) (import "env" "Yea" (func $internal3771)) (import "env" "Zea" (func $internal3772)) (import "env" "_ea" (func $internal3773)) (import "env" "$ea" (func $internal3774)) (import "env" "afa" (func $internal3775)) (import "env" "bfa" (func $internal3776)) (import "env" "cfa" (func $internal3777)) (import "env" "dfa" (func $internal3778)) (import "env" "efa" (func $internal3779)) (import "env" "ffa" (func $internal3780)) (import "env" "gfa" (func $internal3781)) (import "env" "hfa" (func $internal3782)) (import "env" "ifa" (func $internal3783)) (import "env" "jfa" (func $internal3784)) (import "env" "kfa" (func $internal3785)) (import "env" "lfa" (func $internal3786)) (import "env" "mfa" (func $internal3787)) (import "env" "nfa" (func $internal3788)) (import "env" "ofa" (func $internal3789)) (import "env" "pfa" (func $internal3790)) (import "env" "qfa" (func $internal3791)) (import "env" "rfa" (func $internal3792)) (import "env" "sfa" (func $internal3793)) (import "env" "tfa" (func $internal3794)) (import "env" "ufa" (func $internal3795)) (import "env" "vfa" (func $internal3796)) (import "env" "wfa" (func $internal3797)) (import "env" "xfa" (func $internal3798)) (import "env" "yfa" (func $internal3799)) (import "env" "zfa" (func $internal3800)) (import "env" "Afa" (func $internal3801)) (import "env" "Bfa" (func $internal3802)) (import "env" "Cfa" (func $internal3803)) (import "env" "Dfa" (func $internal3804)) (import "env" "Efa" (func $internal3805)) (import "env" "Ffa" (func $internal3806)) (import "env" "Gfa" (func $internal3807)) (import "env" "Hfa" (func $internal3808)) (import "env" "Ifa" (func $internal3809)) (import "env" "Jfa" (func $internal3810)) (import "env" "Kfa" (func $internal3811)) (import "env" "Lfa" (func $internal3812)) (import "env" "Mfa" (func $internal3813)) (import "env" "Nfa" (func $internal3814)) (import "env" "Ofa" (func $internal3815)) (import "env" "Pfa" (func $internal3816)) (import "env" "Qfa" (func $internal3817)) (import "env" "Rfa" (func $internal3818)) (import "env" "Sfa" (func $internal3819)) (import "env" "Tfa" (func $internal3820)) (import "env" "Ufa" (func $internal3821)) (import "env" "Vfa" (func $internal3822)) (import "env" "Wfa" (func $internal3823)) (import "env" "Xfa" (func $internal3824)) (import "env" "Yfa" (func $internal3825)) (import "env" "Zfa" (func $internal3826)) (import "env" "_fa" (func $internal3827)) (import "env" "$fa" (func $internal3828)) (import "env" "aga" (func $internal3829)) (import "env" "bga" (func $internal3830)) (import "env" "cga" (func $internal3831)) (import "env" "dga" (func $internal3832)) (import "env" "ega" (func $internal3833)) (import "env" "fga" (func $internal3834)) (import "env" "gga" (func $internal3835)) (import "env" "hga" (func $internal3836)) (import "env" "iga" (func $internal3837)) (import "env" "jga" (func $internal3838)) (import "env" "kga" (func $internal3839)) (import "env" "lga" (func $internal3840)) (import "env" "mga" (func $internal3841)) (import "env" "nga" (func $internal3842)) (import "env" "oga" (func $internal3843)) (import "env" "pga" (func $internal3844)) (import "env" "qga" (func $internal3845)) (import "env" "rga" (func $internal3846)) (import "env" "sga" (func $internal3847)) (import "env" "tga" (func $internal3848)) (import "env" "uga" (func $internal3849)) (import "env" "vga" (func $internal3850)) (import "env" "wga" (func $internal3851)) (import "env" "xga" (func $internal3852)) (import "env" "yga" (func $internal3853)) (import "env" "zga" (func $internal3854)) (import "env" "Aga" (func $internal3855)) (import "env" "Bga" (func $internal3856)) (import "env" "Cga" (func $internal3857)) (import "env" "Dga" (func $internal3858)) (import "env" "Ega" (func $internal3859)) (import "env" "Fga" (func $internal3860)) (import "env" "Gga" (func $internal3861)) (import "env" "Hga" (func $internal3862)) (import "env" "Iga" (func $internal3863)) (import "env" "Jga" (func $internal3864)) (import "env" "Kga" (func $internal3865)) (import "env" "Lga" (func $internal3866)) (import "env" "Mga" (func $internal3867)) (import "env" "Nga" (func $internal3868)) (import "env" "Oga" (func $internal3869)) (import "env" "Pga" (func $internal3870)) (import "env" "Qga" (func $internal3871)) (import "env" "Rga" (func $internal3872)) (import "env" "Sga" (func $internal3873)) (import "env" "Tga" (func $internal3874)) (import "env" "Uga" (func $internal3875)) (import "env" "Vga" (func $internal3876)) (import "env" "Wga" (func $internal3877)) (import "env" "Xga" (func $internal3878)) (import "env" "Yga" (func $internal3879)) (import "env" "Zga" (func $internal3880)) (import "env" "_ga" (func $internal3881)) (import "env" "$ga" (func $internal3882)) (import "env" "aha" (func $internal3883)) (import "env" "bha" (func $internal3884)) (import "env" "cha" (func $internal3885)) (import "env" "dha" (func $internal3886)) (import "env" "eha" (func $internal3887)) (import "env" "fha" (func $internal3888)) (import "env" "gha" (func $internal3889)) (import "env" "hha" (func $internal3890)) (import "env" "iha" (func $internal3891)) (import "env" "jha" (func $internal3892)) (import "env" "kha" (func $internal3893)) (import "env" "lha" (func $internal3894)) (import "env" "mha" (func $internal3895)) (import "env" "nha" (func $internal3896)) (import "env" "oha" (func $internal3897)) (import "env" "pha" (func $internal3898)) (import "env" "qha" (func $internal3899)) (import "env" "rha" (func $internal3900)) (import "env" "sha" (func $internal3901)) (import "env" "tha" (func $internal3902)) (import "env" "uha" (func $internal3903)) (import "env" "vha" (func $internal3904)) (import "env" "wha" (func $internal3905)) (import "env" "xha" (func $internal3906)) (import "env" "yha" (func $internal3907)) (import "env" "zha" (func $internal3908)) (import "env" "Aha" (func $internal3909)) (import "env" "Bha" (func $internal3910)) (import "env" "Cha" (func $internal3911)) (import "env" "Dha" (func $internal3912)) (import "env" "Eha" (func $internal3913)) (import "env" "Fha" (func $internal3914)) (import "env" "Gha" (func $internal3915)) (import "env" "Hha" (func $internal3916)) (import "env" "Iha" (func $internal3917)) (import "env" "Jha" (func $internal3918)) (import "env" "Kha" (func $internal3919)) (import "env" "Lha" (func $internal3920)) (import "env" "Mha" (func $internal3921)) (import "env" "Nha" (func $internal3922)) (import "env" "Oha" (func $internal3923)) (import "env" "Pha" (func $internal3924)) (import "env" "Qha" (func $internal3925)) (import "env" "Rha" (func $internal3926)) (import "env" "Sha" (func $internal3927)) (import "env" "Tha" (func $internal3928)) (import "env" "Uha" (func $internal3929)) (import "env" "Vha" (func $internal3930)) (import "env" "Wha" (func $internal3931)) (import "env" "Xha" (func $internal3932)) (import "env" "Yha" (func $internal3933)) (import "env" "Zha" (func $internal3934)) (import "env" "_ha" (func $internal3935)) (import "env" "$ha" (func $internal3936)) (import "env" "aia" (func $internal3937)) (import "env" "bia" (func $internal3938)) (import "env" "cia" (func $internal3939)) (import "env" "dia" (func $internal3940)) (import "env" "eia" (func $internal3941)) (import "env" "fia" (func $internal3942)) (import "env" "gia" (func $internal3943)) (import "env" "hia" (func $internal3944)) (import "env" "iia" (func $internal3945)) (import "env" "jia" (func $internal3946)) (import "env" "kia" (func $internal3947)) (import "env" "lia" (func $internal3948)) (import "env" "mia" (func $internal3949)) (import "env" "nia" (func $internal3950)) (import "env" "oia" (func $internal3951)) (import "env" "pia" (func $internal3952)) (import "env" "qia" (func $internal3953)) (import "env" "ria" (func $internal3954)) (import "env" "sia" (func $internal3955)) (import "env" "tia" (func $internal3956)) (import "env" "uia" (func $internal3957)) (import "env" "via" (func $internal3958)) (import "env" "wia" (func $internal3959)) (import "env" "xia" (func $internal3960)) (import "env" "yia" (func $internal3961)) (import "env" "zia" (func $internal3962)) (import "env" "Aia" (func $internal3963)) (import "env" "Bia" (func $internal3964)) (import "env" "Cia" (func $internal3965)) (import "env" "Dia" (func $internal3966)) (import "env" "Eia" (func $internal3967)) (import "env" "Fia" (func $internal3968)) (import "env" "Gia" (func $internal3969)) (import "env" "Hia" (func $internal3970)) (import "env" "Iia" (func $internal3971)) (import "env" "Jia" (func $internal3972)) (import "env" "Kia" (func $internal3973)) (import "env" "Lia" (func $internal3974)) (import "env" "Mia" (func $internal3975)) (import "env" "Nia" (func $internal3976)) (import "env" "Oia" (func $internal3977)) (import "env" "Pia" (func $internal3978)) (import "env" "Qia" (func $internal3979)) (import "env" "Ria" (func $internal3980)) (import "env" "Sia" (func $internal3981)) (import "env" "Tia" (func $internal3982)) (import "env" "Uia" (func $internal3983)) (import "env" "Via" (func $internal3984)) (import "env" "Wia" (func $internal3985)) (import "env" "Xia" (func $internal3986)) (import "env" "Yia" (func $internal3987)) (import "env" "Zia" (func $internal3988)) (import "env" "_ia" (func $internal3989)) (import "env" "$ia" (func $internal3990)) (import "env" "aja" (func $internal3991)) (import "env" "bja" (func $internal3992)) (import "env" "cja" (func $internal3993)) (import "env" "dja" (func $internal3994)) (import "env" "eja" (func $internal3995)) (import "env" "fja" (func $internal3996)) (import "env" "gja" (func $internal3997)) (import "env" "hja" (func $internal3998)) (import "env" "ija" (func $internal3999)) (import "env" "jja" (func $internal4000)) (import "env" "kja" (func $internal4001)) (import "env" "lja" (func $internal4002)) (import "env" "mja" (func $internal4003)) (import "env" "nja" (func $internal4004)) (import "env" "oja" (func $internal4005)) (import "env" "pja" (func $internal4006)) (import "env" "qja" (func $internal4007)) (import "env" "rja" (func $internal4008)) (import "env" "sja" (func $internal4009)) (import "env" "tja" (func $internal4010)) (import "env" "uja" (func $internal4011)) (import "env" "vja" (func $internal4012)) (import "env" "wja" (func $internal4013)) (import "env" "xja" (func $internal4014)) (import "env" "yja" (func $internal4015)) (import "env" "zja" (func $internal4016)) (import "env" "Aja" (func $internal4017)) (import "env" "Bja" (func $internal4018)) (import "env" "Cja" (func $internal4019)) (import "env" "Dja" (func $internal4020)) (import "env" "Eja" (func $internal4021)) (import "env" "Fja" (func $internal4022)) (import "env" "Gja" (func $internal4023)) (import "env" "Hja" (func $internal4024)) (import "env" "Ija" (func $internal4025)) (import "env" "Jja" (func $internal4026)) (import "env" "Kja" (func $internal4027)) (import "env" "Lja" (func $internal4028)) (import "env" "Mja" (func $internal4029)) (import "env" "Nja" (func $internal4030)) (import "env" "Oja" (func $internal4031)) (import "env" "Pja" (func $internal4032)) (import "env" "Qja" (func $internal4033)) (import "env" "Rja" (func $internal4034)) (import "env" "Sja" (func $internal4035)) (import "env" "Tja" (func $internal4036)) (import "env" "Uja" (func $internal4037)) (import "env" "Vja" (func $internal4038)) (import "env" "Wja" (func $internal4039)) (import "env" "Xja" (func $internal4040)) (import "env" "Yja" (func $internal4041)) (import "env" "Zja" (func $internal4042)) (import "env" "_ja" (func $internal4043)) (import "env" "$ja" (func $internal4044)) (import "env" "aka" (func $internal4045)) (import "env" "bka" (func $internal4046)) (import "env" "cka" (func $internal4047)) (import "env" "dka" (func $internal4048)) (import "env" "eka" (func $internal4049)) (import "env" "fka" (func $internal4050)) (import "env" "gka" (func $internal4051)) (import "env" "hka" (func $internal4052)) (import "env" "ika" (func $internal4053)) (import "env" "jka" (func $internal4054)) (import "env" "kka" (func $internal4055)) (import "env" "lka" (func $internal4056)) (import "env" "mka" (func $internal4057)) (import "env" "nka" (func $internal4058)) (import "env" "oka" (func $internal4059)) (import "env" "pka" (func $internal4060)) (import "env" "qka" (func $internal4061)) (import "env" "rka" (func $internal4062)) (import "env" "ska" (func $internal4063)) (import "env" "tka" (func $internal4064)) (import "env" "uka" (func $internal4065)) (import "env" "vka" (func $internal4066)) (import "env" "wka" (func $internal4067)) (import "env" "xka" (func $internal4068)) (import "env" "yka" (func $internal4069)) (import "env" "zka" (func $internal4070)) (import "env" "Aka" (func $internal4071)) (import "env" "Bka" (func $internal4072)) (import "env" "Cka" (func $internal4073)) (import "env" "Dka" (func $internal4074)) (import "env" "Eka" (func $internal4075)) (import "env" "Fka" (func $internal4076)) (import "env" "Gka" (func $internal4077)) (import "env" "Hka" (func $internal4078)) (import "env" "Ika" (func $internal4079)) (import "env" "Jka" (func $internal4080)) (import "env" "Kka" (func $internal4081)) (import "env" "Lka" (func $internal4082)) (import "env" "Mka" (func $internal4083)) (import "env" "Nka" (func $internal4084)) (import "env" "Oka" (func $internal4085)) (import "env" "Pka" (func $internal4086)) (import "env" "Qka" (func $internal4087)) (import "env" "Rka" (func $internal4088)) (import "env" "Ska" (func $internal4089)) (import "env" "Tka" (func $internal4090)) (import "env" "Uka" (func $internal4091)) (import "env" "Vka" (func $internal4092)) (import "env" "Wka" (func $internal4093)) (import "env" "Xka" (func $internal4094)) (import "env" "Yka" (func $internal4095)) (import "env" "Zka" (func $internal4096)) (import "env" "_ka" (func $internal4097)) (import "env" "$ka" (func $internal4098)) (import "env" "ala" (func $internal4099)) (import "env" "bla" (func $internal4100)) (import "env" "cla" (func $internal4101)) (import "env" "dla" (func $internal4102)) (import "env" "ela" (func $internal4103)) (import "env" "fla" (func $internal4104)) (import "env" "gla" (func $internal4105)) (import "env" "hla" (func $internal4106)) (import "env" "ila" (func $internal4107)) (import "env" "jla" (func $internal4108)) (import "env" "kla" (func $internal4109)) (import "env" "lla" (func $internal4110)) (import "env" "mla" (func $internal4111)) (import "env" "nla" (func $internal4112)) (import "env" "ola" (func $internal4113)) (import "env" "pla" (func $internal4114)) (import "env" "qla" (func $internal4115)) (import "env" "rla" (func $internal4116)) (import "env" "sla" (func $internal4117)) (import "env" "tla" (func $internal4118)) (import "env" "ula" (func $internal4119)) (import "env" "vla" (func $internal4120)) (import "env" "wla" (func $internal4121)) (import "env" "xla" (func $internal4122)) (import "env" "yla" (func $internal4123)) (import "env" "zla" (func $internal4124)) (import "env" "Ala" (func $internal4125)) (import "env" "Bla" (func $internal4126)) (import "env" "Cla" (func $internal4127)) (import "env" "Dla" (func $internal4128)) (import "env" "Ela" (func $internal4129)) (import "env" "Fla" (func $internal4130)) (import "env" "Gla" (func $internal4131)) (import "env" "Hla" (func $internal4132)) (import "env" "Ila" (func $internal4133)) (import "env" "Jla" (func $internal4134)) (import "env" "Kla" (func $internal4135)) (import "env" "Lla" (func $internal4136)) (import "env" "Mla" (func $internal4137)) (import "env" "Nla" (func $internal4138)) (import "env" "Ola" (func $internal4139)) (import "env" "Pla" (func $internal4140)) (import "env" "Qla" (func $internal4141)) (import "env" "Rla" (func $internal4142)) (import "env" "Sla" (func $internal4143)) (import "env" "Tla" (func $internal4144)) (import "env" "Ula" (func $internal4145)) (import "env" "Vla" (func $internal4146)) (import "env" "Wla" (func $internal4147)) (import "env" "Xla" (func $internal4148)) (import "env" "Yla" (func $internal4149)) (import "env" "Zla" (func $internal4150)) (import "env" "_la" (func $internal4151)) (import "env" "$la" (func $internal4152)) (import "env" "ama" (func $internal4153)) (import "env" "bma" (func $internal4154)) (import "env" "cma" (func $internal4155)) (import "env" "dma" (func $internal4156)) (import "env" "ema" (func $internal4157)) (import "env" "fma" (func $internal4158)) (import "env" "gma" (func $internal4159)) (import "env" "hma" (func $internal4160)) (import "env" "ima" (func $internal4161)) (import "env" "jma" (func $internal4162)) (import "env" "kma" (func $internal4163)) (import "env" "lma" (func $internal4164)) (import "env" "mma" (func $internal4165)) (import "env" "nma" (func $internal4166)) (import "env" "oma" (func $internal4167)) (import "env" "pma" (func $internal4168)) (import "env" "qma" (func $internal4169)) (import "env" "rma" (func $internal4170)) (import "env" "sma" (func $internal4171)) (import "env" "tma" (func $internal4172)) (import "env" "uma" (func $internal4173)) (import "env" "vma" (func $internal4174)) (import "env" "wma" (func $internal4175)) (import "env" "xma" (func $internal4176)) (import "env" "yma" (func $internal4177)) (import "env" "zma" (func $internal4178)) (import "env" "Ama" (func $internal4179)) (import "env" "Bma" (func $internal4180)) (import "env" "Cma" (func $internal4181)) (import "env" "Dma" (func $internal4182)) (import "env" "Ema" (func $internal4183)) (import "env" "Fma" (func $internal4184)) (import "env" "Gma" (func $internal4185)) (import "env" "Hma" (func $internal4186)) (import "env" "Ima" (func $internal4187)) (import "env" "Jma" (func $internal4188)) (import "env" "Kma" (func $internal4189)) (import "env" "Lma" (func $internal4190)) (import "env" "Mma" (func $internal4191)) (import "env" "Nma" (func $internal4192)) (import "env" "Oma" (func $internal4193)) (import "env" "Pma" (func $internal4194)) (import "env" "Qma" (func $internal4195)) (import "env" "Rma" (func $internal4196)) (import "env" "Sma" (func $internal4197)) (import "env" "Tma" (func $internal4198)) (import "env" "Uma" (func $internal4199)) (import "env" "Vma" (func $internal4200)) (import "env" "Wma" (func $internal4201)) (import "env" "Xma" (func $internal4202)) (import "env" "Yma" (func $internal4203)) (import "env" "Zma" (func $internal4204)) (import "env" "_ma" (func $internal4205)) (import "env" "$ma" (func $internal4206)) (import "env" "ana" (func $internal4207)) (import "env" "bna" (func $internal4208)) (import "env" "cna" (func $internal4209)) (import "env" "dna" (func $internal4210)) (import "env" "ena" (func $internal4211)) (import "env" "fna" (func $internal4212)) (import "env" "gna" (func $internal4213)) (import "env" "hna" (func $internal4214)) (import "env" "ina" (func $internal4215)) (import "env" "jna" (func $internal4216)) (import "env" "kna" (func $internal4217)) (import "env" "lna" (func $internal4218)) (import "env" "mna" (func $internal4219)) (import "env" "nna" (func $internal4220)) (import "env" "ona" (func $internal4221)) (import "env" "pna" (func $internal4222)) (import "env" "qna" (func $internal4223)) (import "env" "rna" (func $internal4224)) (import "env" "sna" (func $internal4225)) (import "env" "tna" (func $internal4226)) (import "env" "una" (func $internal4227)) (import "env" "vna" (func $internal4228)) (import "env" "wna" (func $internal4229)) (import "env" "xna" (func $internal4230)) (import "env" "yna" (func $internal4231)) (import "env" "zna" (func $internal4232)) (import "env" "Ana" (func $internal4233)) (import "env" "Bna" (func $internal4234)) (import "env" "Cna" (func $internal4235)) (import "env" "Dna" (func $internal4236)) (import "env" "Ena" (func $internal4237)) (import "env" "Fna" (func $internal4238)) (import "env" "Gna" (func $internal4239)) (import "env" "Hna" (func $internal4240)) (import "env" "Ina" (func $internal4241)) (import "env" "Jna" (func $internal4242)) (import "env" "Kna" (func $internal4243)) (import "env" "Lna" (func $internal4244)) (import "env" "Mna" (func $internal4245)) (import "env" "Nna" (func $internal4246)) (import "env" "Ona" (func $internal4247)) (import "env" "Pna" (func $internal4248)) (import "env" "Qna" (func $internal4249)) (import "env" "Rna" (func $internal4250)) (import "env" "Sna" (func $internal4251)) (import "env" "Tna" (func $internal4252)) (import "env" "Una" (func $internal4253)) (import "env" "Vna" (func $internal4254)) (import "env" "Wna" (func $internal4255)) (import "env" "Xna" (func $internal4256)) (import "env" "Yna" (func $internal4257)) (import "env" "Zna" (func $internal4258)) (import "env" "_na" (func $internal4259)) (import "env" "$na" (func $internal4260)) (import "env" "aoa" (func $internal4261)) (import "env" "boa" (func $internal4262)) (import "env" "coa" (func $internal4263)) (import "env" "doa" (func $internal4264)) (import "env" "eoa" (func $internal4265)) (import "env" "foa" (func $internal4266)) (import "env" "goa" (func $internal4267)) (import "env" "hoa" (func $internal4268)) (import "env" "ioa" (func $internal4269)) (import "env" "joa" (func $internal4270)) (import "env" "koa" (func $internal4271)) (import "env" "loa" (func $internal4272)) (import "env" "moa" (func $internal4273)) (import "env" "noa" (func $internal4274)) (import "env" "ooa" (func $internal4275)) (import "env" "poa" (func $internal4276)) (import "env" "qoa" (func $internal4277)) (import "env" "roa" (func $internal4278)) (import "env" "soa" (func $internal4279)) (import "env" "toa" (func $internal4280)) (import "env" "uoa" (func $internal4281)) (import "env" "voa" (func $internal4282)) (import "env" "woa" (func $internal4283)) (import "env" "xoa" (func $internal4284)) (import "env" "yoa" (func $internal4285)) (import "env" "zoa" (func $internal4286)) (import "env" "Aoa" (func $internal4287)) (import "env" "Boa" (func $internal4288)) (import "env" "Coa" (func $internal4289)) (import "env" "Doa" (func $internal4290)) (import "env" "Eoa" (func $internal4291)) (import "env" "Foa" (func $internal4292)) (import "env" "Goa" (func $internal4293)) (import "env" "Hoa" (func $internal4294)) (import "env" "Ioa" (func $internal4295)) (import "env" "Joa" (func $internal4296)) (import "env" "Koa" (func $internal4297)) (import "env" "Loa" (func $internal4298)) (import "env" "Moa" (func $internal4299)) (import "env" "Noa" (func $internal4300)) (import "env" "Ooa" (func $internal4301)) (import "env" "Poa" (func $internal4302)) (import "env" "Qoa" (func $internal4303)) (import "env" "Roa" (func $internal4304)) (import "env" "Soa" (func $internal4305)) (import "env" "Toa" (func $internal4306)) (import "env" "Uoa" (func $internal4307)) (import "env" "Voa" (func $internal4308)) (import "env" "Woa" (func $internal4309)) (import "env" "Xoa" (func $internal4310)) (import "env" "Yoa" (func $internal4311)) (import "env" "Zoa" (func $internal4312)) (import "env" "_oa" (func $internal4313)) (import "env" "$oa" (func $internal4314)) (import "env" "apa" (func $internal4315)) (import "env" "bpa" (func $internal4316)) (import "env" "cpa" (func $internal4317)) (import "env" "dpa" (func $internal4318)) (import "env" "epa" (func $internal4319)) (import "env" "fpa" (func $internal4320)) (import "env" "gpa" (func $internal4321)) (import "env" "hpa" (func $internal4322)) (import "env" "ipa" (func $internal4323)) (import "env" "jpa" (func $internal4324)) (import "env" "kpa" (func $internal4325)) (import "env" "lpa" (func $internal4326)) (import "env" "mpa" (func $internal4327)) (import "env" "npa" (func $internal4328)) (import "env" "opa" (func $internal4329)) (import "env" "ppa" (func $internal4330)) (import "env" "qpa" (func $internal4331)) (import "env" "rpa" (func $internal4332)) (import "env" "spa" (func $internal4333)) (import "env" "tpa" (func $internal4334)) (import "env" "upa" (func $internal4335)) (import "env" "vpa" (func $internal4336)) (import "env" "wpa" (func $internal4337)) (import "env" "xpa" (func $internal4338)) (import "env" "ypa" (func $internal4339)) (import "env" "zpa" (func $internal4340)) (import "env" "Apa" (func $internal4341)) (import "env" "Bpa" (func $internal4342)) (import "env" "Cpa" (func $internal4343)) (import "env" "Dpa" (func $internal4344)) (import "env" "Epa" (func $internal4345)) (import "env" "Fpa" (func $internal4346)) (import "env" "Gpa" (func $internal4347)) (import "env" "Hpa" (func $internal4348)) (import "env" "Ipa" (func $internal4349)) (import "env" "Jpa" (func $internal4350)) (import "env" "Kpa" (func $internal4351)) (import "env" "Lpa" (func $internal4352)) (import "env" "Mpa" (func $internal4353)) (import "env" "Npa" (func $internal4354)) (import "env" "Opa" (func $internal4355)) (import "env" "Ppa" (func $internal4356)) (import "env" "Qpa" (func $internal4357)) (import "env" "Rpa" (func $internal4358)) (import "env" "Spa" (func $internal4359)) (import "env" "Tpa" (func $internal4360)) (import "env" "Upa" (func $internal4361)) (import "env" "Vpa" (func $internal4362)) (import "env" "Wpa" (func $internal4363)) (import "env" "Xpa" (func $internal4364)) (import "env" "Ypa" (func $internal4365)) (import "env" "Zpa" (func $internal4366)) (import "env" "_pa" (func $internal4367)) (import "env" "$pa" (func $internal4368)) (import "env" "aqa" (func $internal4369)) (import "env" "bqa" (func $internal4370)) (import "env" "cqa" (func $internal4371)) (import "env" "dqa" (func $internal4372)) (import "env" "eqa" (func $internal4373)) (import "env" "fqa" (func $internal4374)) (import "env" "gqa" (func $internal4375)) (import "env" "hqa" (func $internal4376)) (import "env" "iqa" (func $internal4377)) (import "env" "jqa" (func $internal4378)) (import "env" "kqa" (func $internal4379)) (import "env" "lqa" (func $internal4380)) (import "env" "mqa" (func $internal4381)) (import "env" "nqa" (func $internal4382)) (import "env" "oqa" (func $internal4383)) (import "env" "pqa" (func $internal4384)) (import "env" "qqa" (func $internal4385)) (import "env" "rqa" (func $internal4386)) (import "env" "sqa" (func $internal4387)) (import "env" "tqa" (func $internal4388)) (import "env" "uqa" (func $internal4389)) (import "env" "vqa" (func $internal4390)) (import "env" "wqa" (func $internal4391)) (import "env" "xqa" (func $internal4392)) (import "env" "yqa" (func $internal4393)) (import "env" "zqa" (func $internal4394)) (import "env" "Aqa" (func $internal4395)) (import "env" "Bqa" (func $internal4396)) (import "env" "Cqa" (func $internal4397)) (import "env" "Dqa" (func $internal4398)) (import "env" "Eqa" (func $internal4399)) (import "env" "Fqa" (func $internal4400)) (import "env" "Gqa" (func $internal4401)) (import "env" "Hqa" (func $internal4402)) (import "env" "Iqa" (func $internal4403)) (import "env" "Jqa" (func $internal4404)) (import "env" "Kqa" (func $internal4405)) (import "env" "Lqa" (func $internal4406)) (import "env" "Mqa" (func $internal4407)) (import "env" "Nqa" (func $internal4408)) (import "env" "Oqa" (func $internal4409)) (import "env" "Pqa" (func $internal4410)) (import "env" "Qqa" (func $internal4411)) (import "env" "Rqa" (func $internal4412)) (import "env" "Sqa" (func $internal4413)) (import "env" "Tqa" (func $internal4414)) (import "env" "Uqa" (func $internal4415)) (import "env" "Vqa" (func $internal4416)) (import "env" "Wqa" (func $internal4417)) (import "env" "Xqa" (func $internal4418)) (import "env" "Yqa" (func $internal4419)) (import "env" "Zqa" (func $internal4420)) (import "env" "_qa" (func $internal4421)) (import "env" "$qa" (func $internal4422)) (import "env" "ara" (func $internal4423)) (import "env" "bra" (func $internal4424)) (import "env" "cra" (func $internal4425)) (import "env" "dra" (func $internal4426)) (import "env" "era" (func $internal4427)) (import "env" "fra" (func $internal4428)) (import "env" "gra" (func $internal4429)) (import "env" "hra" (func $internal4430)) (import "env" "ira" (func $internal4431)) (import "env" "jra" (func $internal4432)) (import "env" "kra" (func $internal4433)) (import "env" "lra" (func $internal4434)) (import "env" "mra" (func $internal4435)) (import "env" "nra" (func $internal4436)) (import "env" "ora" (func $internal4437)) (import "env" "pra" (func $internal4438)) (import "env" "qra" (func $internal4439)) (import "env" "rra" (func $internal4440)) (import "env" "sra" (func $internal4441)) (import "env" "tra" (func $internal4442)) (import "env" "ura" (func $internal4443)) (import "env" "vra" (func $internal4444)) (import "env" "wra" (func $internal4445)) (import "env" "xra" (func $internal4446)) (import "env" "yra" (func $internal4447)) (import "env" "zra" (func $internal4448)) (import "env" "Ara" (func $internal4449)) (import "env" "Bra" (func $internal4450)) (import "env" "Cra" (func $internal4451)) (import "env" "Dra" (func $internal4452)) (import "env" "Era" (func $internal4453)) (import "env" "Fra" (func $internal4454)) (import "env" "Gra" (func $internal4455)) (import "env" "Hra" (func $internal4456)) (import "env" "Ira" (func $internal4457)) (import "env" "Jra" (func $internal4458)) (import "env" "Kra" (func $internal4459)) (import "env" "Lra" (func $internal4460)) (import "env" "Mra" (func $internal4461)) (import "env" "Nra" (func $internal4462)) (import "env" "Ora" (func $internal4463)) (import "env" "Pra" (func $internal4464)) (import "env" "Qra" (func $internal4465)) (import "env" "Rra" (func $internal4466)) (import "env" "Sra" (func $internal4467)) (import "env" "Tra" (func $internal4468)) (import "env" "Ura" (func $internal4469)) (import "env" "Vra" (func $internal4470)) (import "env" "Wra" (func $internal4471)) (import "env" "Xra" (func $internal4472)) (import "env" "Yra" (func $internal4473)) (import "env" "Zra" (func $internal4474)) (import "env" "_ra" (func $internal4475)) (import "env" "$ra" (func $internal4476)) (import "env" "asa" (func $internal4477)) (import "env" "bsa" (func $internal4478)) (import "env" "csa" (func $internal4479)) (import "env" "dsa" (func $internal4480)) (import "env" "esa" (func $internal4481)) (import "env" "fsa" (func $internal4482)) (import "env" "gsa" (func $internal4483)) (import "env" "hsa" (func $internal4484)) (import "env" "isa" (func $internal4485)) (import "env" "jsa" (func $internal4486)) (import "env" "ksa" (func $internal4487)) (import "env" "lsa" (func $internal4488)) (import "env" "msa" (func $internal4489)) (import "env" "nsa" (func $internal4490)) (import "env" "osa" (func $internal4491)) (import "env" "psa" (func $internal4492)) (import "env" "qsa" (func $internal4493)) (import "env" "rsa" (func $internal4494)) (import "env" "ssa" (func $internal4495)) (import "env" "tsa" (func $internal4496)) (import "env" "usa" (func $internal4497)) (import "env" "vsa" (func $internal4498)) (import "env" "wsa" (func $internal4499)) (import "env" "xsa" (func $internal4500)) (import "env" "ysa" (func $internal4501)) (import "env" "zsa" (func $internal4502)) (import "env" "Asa" (func $internal4503)) (import "env" "Bsa" (func $internal4504)) (import "env" "Csa" (func $internal4505)) (import "env" "Dsa" (func $internal4506)) (import "env" "Esa" (func $internal4507)) (import "env" "Fsa" (func $internal4508)) (import "env" "Gsa" (func $internal4509)) (import "env" "Hsa" (func $internal4510)) (import "env" "Isa" (func $internal4511)) (import "env" "Jsa" (func $internal4512)) (import "env" "Ksa" (func $internal4513)) (import "env" "Lsa" (func $internal4514)) (import "env" "Msa" (func $internal4515)) (import "env" "Nsa" (func $internal4516)) (import "env" "Osa" (func $internal4517)) (import "env" "Psa" (func $internal4518)) (import "env" "Qsa" (func $internal4519)) (import "env" "Rsa" (func $internal4520)) (import "env" "Ssa" (func $internal4521)) (import "env" "Tsa" (func $internal4522)) (import "env" "Usa" (func $internal4523)) (import "env" "Vsa" (func $internal4524)) (import "env" "Wsa" (func $internal4525)) (import "env" "Xsa" (func $internal4526)) (import "env" "Ysa" (func $internal4527)) (import "env" "Zsa" (func $internal4528)) (import "env" "_sa" (func $internal4529)) (import "env" "$sa" (func $internal4530)) (import "env" "ata" (func $internal4531)) (import "env" "bta" (func $internal4532)) (import "env" "cta" (func $internal4533)) (import "env" "dta" (func $internal4534)) (import "env" "eta" (func $internal4535)) (import "env" "fta" (func $internal4536)) (import "env" "gta" (func $internal4537)) (import "env" "hta" (func $internal4538)) (import "env" "ita" (func $internal4539)) (import "env" "jta" (func $internal4540)) (import "env" "kta" (func $internal4541)) (import "env" "lta" (func $internal4542)) (import "env" "mta" (func $internal4543)) (import "env" "nta" (func $internal4544)) (import "env" "ota" (func $internal4545)) (import "env" "pta" (func $internal4546)) (import "env" "qta" (func $internal4547)) (import "env" "rta" (func $internal4548)) (import "env" "sta" (func $internal4549)) (import "env" "tta" (func $internal4550)) (import "env" "uta" (func $internal4551)) (import "env" "vta" (func $internal4552)) (import "env" "wta" (func $internal4553)) (import "env" "xta" (func $internal4554)) (import "env" "yta" (func $internal4555)) (import "env" "zta" (func $internal4556)) (import "env" "Ata" (func $internal4557)) (import "env" "Bta" (func $internal4558)) (import "env" "Cta" (func $internal4559)) (import "env" "Dta" (func $internal4560)) (import "env" "Eta" (func $internal4561)) (import "env" "Fta" (func $internal4562)) (import "env" "Gta" (func $internal4563)) (import "env" "Hta" (func $internal4564)) (import "env" "Ita" (func $internal4565)) (import "env" "Jta" (func $internal4566)) (import "env" "Kta" (func $internal4567)) (import "env" "Lta" (func $internal4568)) (import "env" "Mta" (func $internal4569)) (import "env" "Nta" (func $internal4570)) (import "env" "Ota" (func $internal4571)) (import "env" "Pta" (func $internal4572)) (import "env" "Qta" (func $internal4573)) (import "env" "Rta" (func $internal4574)) (import "env" "Sta" (func $internal4575)) (import "env" "Tta" (func $internal4576)) (import "env" "Uta" (func $internal4577)) (import "env" "Vta" (func $internal4578)) (import "env" "Wta" (func $internal4579)) (import "env" "Xta" (func $internal4580)) (import "env" "Yta" (func $internal4581)) (import "env" "Zta" (func $internal4582)) (import "env" "_ta" (func $internal4583)) (import "env" "$ta" (func $internal4584)) (import "env" "aua" (func $internal4585)) (import "env" "bua" (func $internal4586)) (import "env" "cua" (func $internal4587)) (import "env" "dua" (func $internal4588)) (import "env" "eua" (func $internal4589)) (import "env" "fua" (func $internal4590)) (import "env" "gua" (func $internal4591)) (import "env" "hua" (func $internal4592)) (import "env" "iua" (func $internal4593)) (import "env" "jua" (func $internal4594)) (import "env" "kua" (func $internal4595)) (import "env" "lua" (func $internal4596)) (import "env" "mua" (func $internal4597)) (import "env" "nua" (func $internal4598)) (import "env" "oua" (func $internal4599)) (import "env" "pua" (func $internal4600)) (import "env" "qua" (func $internal4601)) (import "env" "rua" (func $internal4602)) (import "env" "sua" (func $internal4603)) (import "env" "tua" (func $internal4604)) (import "env" "uua" (func $internal4605)) (import "env" "vua" (func $internal4606)) (import "env" "wua" (func $internal4607)) (import "env" "xua" (func $internal4608)) (import "env" "yua" (func $internal4609)) (import "env" "zua" (func $internal4610)) (import "env" "Aua" (func $internal4611)) (import "env" "Bua" (func $internal4612)) (import "env" "Cua" (func $internal4613)) (import "env" "Dua" (func $internal4614)) (import "env" "Eua" (func $internal4615)) (import "env" "Fua" (func $internal4616)) (import "env" "Gua" (func $internal4617)) (import "env" "Hua" (func $internal4618)) (import "env" "Iua" (func $internal4619)) (import "env" "Jua" (func $internal4620)) (import "env" "Kua" (func $internal4621)) (import "env" "Lua" (func $internal4622)) (import "env" "Mua" (func $internal4623)) (import "env" "Nua" (func $internal4624)) (import "env" "Oua" (func $internal4625)) (import "env" "Pua" (func $internal4626)) (import "env" "Qua" (func $internal4627)) (import "env" "Rua" (func $internal4628)) (import "env" "Sua" (func $internal4629)) (import "env" "Tua" (func $internal4630)) (import "env" "Uua" (func $internal4631)) (import "env" "Vua" (func $internal4632)) (import "env" "Wua" (func $internal4633)) (import "env" "Xua" (func $internal4634)) (import "env" "Yua" (func $internal4635)) (import "env" "Zua" (func $internal4636)) (import "env" "_ua" (func $internal4637)) (import "env" "$ua" (func $internal4638)) (import "env" "ava" (func $internal4639)) (import "env" "bva" (func $internal4640)) (import "env" "cva" (func $internal4641)) (import "env" "dva" (func $internal4642)) (import "env" "eva" (func $internal4643)) (import "env" "fva" (func $internal4644)) (import "env" "gva" (func $internal4645)) (import "env" "hva" (func $internal4646)) (import "env" "iva" (func $internal4647)) (import "env" "jva" (func $internal4648)) (import "env" "kva" (func $internal4649)) (import "env" "lva" (func $internal4650)) (import "env" "mva" (func $internal4651)) (import "env" "nva" (func $internal4652)) (import "env" "ova" (func $internal4653)) (import "env" "pva" (func $internal4654)) (import "env" "qva" (func $internal4655)) (import "env" "rva" (func $internal4656)) (import "env" "sva" (func $internal4657)) (import "env" "tva" (func $internal4658)) (import "env" "uva" (func $internal4659)) (import "env" "vva" (func $internal4660)) (import "env" "wva" (func $internal4661)) (import "env" "xva" (func $internal4662)) (import "env" "yva" (func $internal4663)) (import "env" "zva" (func $internal4664)) (import "env" "Ava" (func $internal4665)) (import "env" "Bva" (func $internal4666)) (import "env" "Cva" (func $internal4667)) (import "env" "Dva" (func $internal4668)) (import "env" "Eva" (func $internal4669)) (import "env" "Fva" (func $internal4670)) (import "env" "Gva" (func $internal4671)) (import "env" "Hva" (func $internal4672)) (import "env" "Iva" (func $internal4673)) (import "env" "Jva" (func $internal4674)) (import "env" "Kva" (func $internal4675)) (import "env" "Lva" (func $internal4676)) (import "env" "Mva" (func $internal4677)) (import "env" "Nva" (func $internal4678)) (import "env" "Ova" (func $internal4679)) (import "env" "Pva" (func $internal4680)) (import "env" "Qva" (func $internal4681)) (import "env" "Rva" (func $internal4682)) (import "env" "Sva" (func $internal4683)) (import "env" "Tva" (func $internal4684)) (import "env" "Uva" (func $internal4685)) (import "env" "Vva" (func $internal4686)) (import "env" "Wva" (func $internal4687)) (import "env" "Xva" (func $internal4688)) (import "env" "Yva" (func $internal4689)) (import "env" "Zva" (func $internal4690)) (import "env" "_va" (func $internal4691)) (import "env" "$va" (func $internal4692)) (import "env" "awa" (func $internal4693)) (import "env" "bwa" (func $internal4694)) (import "env" "cwa" (func $internal4695)) (import "env" "dwa" (func $internal4696)) (import "env" "ewa" (func $internal4697)) (import "env" "fwa" (func $internal4698)) (import "env" "gwa" (func $internal4699)) (import "env" "hwa" (func $internal4700)) (import "env" "iwa" (func $internal4701)) (import "env" "jwa" (func $internal4702)) (import "env" "kwa" (func $internal4703)) (import "env" "lwa" (func $internal4704)) (import "env" "mwa" (func $internal4705)) (import "env" "nwa" (func $internal4706)) (import "env" "owa" (func $internal4707)) (import "env" "pwa" (func $internal4708)) (import "env" "qwa" (func $internal4709)) (import "env" "rwa" (func $internal4710)) (import "env" "swa" (func $internal4711)) (import "env" "twa" (func $internal4712)) (import "env" "uwa" (func $internal4713)) (import "env" "vwa" (func $internal4714)) (import "env" "wwa" (func $internal4715)) (import "env" "xwa" (func $internal4716)) (import "env" "ywa" (func $internal4717)) (import "env" "zwa" (func $internal4718)) (import "env" "Awa" (func $internal4719)) (import "env" "Bwa" (func $internal4720)) (import "env" "Cwa" (func $internal4721)) (import "env" "Dwa" (func $internal4722)) (import "env" "Ewa" (func $internal4723)) (import "env" "Fwa" (func $internal4724)) (import "env" "Gwa" (func $internal4725)) (import "env" "Hwa" (func $internal4726)) (import "env" "Iwa" (func $internal4727)) (import "env" "Jwa" (func $internal4728)) (import "env" "Kwa" (func $internal4729)) (import "env" "Lwa" (func $internal4730)) (import "env" "Mwa" (func $internal4731)) (import "env" "Nwa" (func $internal4732)) (import "env" "Owa" (func $internal4733)) (import "env" "Pwa" (func $internal4734)) (import "env" "Qwa" (func $internal4735)) (import "env" "Rwa" (func $internal4736)) (import "env" "Swa" (func $internal4737)) (import "env" "Twa" (func $internal4738)) (import "env" "Uwa" (func $internal4739)) (import "env" "Vwa" (func $internal4740)) (import "env" "Wwa" (func $internal4741)) (import "env" "Xwa" (func $internal4742)) (import "env" "Ywa" (func $internal4743)) (import "env" "Zwa" (func $internal4744)) (import "env" "_wa" (func $internal4745)) (import "env" "$wa" (func $internal4746)) (import "env" "axa" (func $internal4747)) (import "env" "bxa" (func $internal4748)) (import "env" "cxa" (func $internal4749)) (import "env" "dxa" (func $internal4750)) (import "env" "exa" (func $internal4751)) (import "env" "fxa" (func $internal4752)) (import "env" "gxa" (func $internal4753)) (import "env" "hxa" (func $internal4754)) (import "env" "ixa" (func $internal4755)) (import "env" "jxa" (func $internal4756)) (import "env" "kxa" (func $internal4757)) (import "env" "lxa" (func $internal4758)) (import "env" "mxa" (func $internal4759)) (import "env" "nxa" (func $internal4760)) (import "env" "oxa" (func $internal4761)) (import "env" "pxa" (func $internal4762)) (import "env" "qxa" (func $internal4763)) (import "env" "rxa" (func $internal4764)) (import "env" "sxa" (func $internal4765)) (import "env" "txa" (func $internal4766)) (import "env" "uxa" (func $internal4767)) (import "env" "vxa" (func $internal4768)) (import "env" "wxa" (func $internal4769)) (import "env" "xxa" (func $internal4770)) (import "env" "yxa" (func $internal4771)) (import "env" "zxa" (func $internal4772)) (import "env" "Axa" (func $internal4773)) (import "env" "Bxa" (func $internal4774)) (import "env" "Cxa" (func $internal4775)) (import "env" "Dxa" (func $internal4776)) (import "env" "Exa" (func $internal4777)) (import "env" "Fxa" (func $internal4778)) (import "env" "Gxa" (func $internal4779)) (import "env" "Hxa" (func $internal4780)) (import "env" "Ixa" (func $internal4781)) (import "env" "Jxa" (func $internal4782)) (import "env" "Kxa" (func $internal4783)) (import "env" "Lxa" (func $internal4784)) (import "env" "Mxa" (func $internal4785)) (import "env" "Nxa" (func $internal4786)) (import "env" "Oxa" (func $internal4787)) (import "env" "Pxa" (func $internal4788)) (import "env" "Qxa" (func $internal4789)) (import "env" "Rxa" (func $internal4790)) (import "env" "Sxa" (func $internal4791)) (import "env" "Txa" (func $internal4792)) (import "env" "Uxa" (func $internal4793)) (import "env" "Vxa" (func $internal4794)) (import "env" "Wxa" (func $internal4795)) (import "env" "Xxa" (func $internal4796)) (import "env" "Yxa" (func $internal4797)) (import "env" "Zxa" (func $internal4798)) (import "env" "_xa" (func $internal4799)) (import "env" "$xa" (func $internal4800)) (import "env" "aya" (func $internal4801)) (import "env" "bya" (func $internal4802)) (import "env" "cya" (func $internal4803)) (import "env" "dya" (func $internal4804)) (import "env" "eya" (func $internal4805)) (import "env" "fya" (func $internal4806)) (import "env" "gya" (func $internal4807)) (import "env" "hya" (func $internal4808)) (import "env" "iya" (func $internal4809)) (import "env" "jya" (func $internal4810)) (import "env" "kya" (func $internal4811)) (import "env" "lya" (func $internal4812)) (import "env" "mya" (func $internal4813)) (import "env" "nya" (func $internal4814)) (import "env" "oya" (func $internal4815)) (import "env" "pya" (func $internal4816)) (import "env" "qya" (func $internal4817)) (import "env" "rya" (func $internal4818)) (import "env" "sya" (func $internal4819)) (import "env" "tya" (func $internal4820)) (import "env" "uya" (func $internal4821)) (import "env" "vya" (func $internal4822)) (import "env" "wya" (func $internal4823)) (import "env" "xya" (func $internal4824)) (import "env" "yya" (func $internal4825)) (import "env" "zya" (func $internal4826)) (import "env" "Aya" (func $internal4827)) (import "env" "Bya" (func $internal4828)) (import "env" "Cya" (func $internal4829)) (import "env" "Dya" (func $internal4830)) (import "env" "Eya" (func $internal4831)) (import "env" "Fya" (func $internal4832)) (import "env" "Gya" (func $internal4833)) (import "env" "Hya" (func $internal4834)) (import "env" "Iya" (func $internal4835)) (import "env" "Jya" (func $internal4836)) (import "env" "Kya" (func $internal4837)) (import "env" "Lya" (func $internal4838)) (import "env" "Mya" (func $internal4839)) (import "env" "Nya" (func $internal4840)) (import "env" "Oya" (func $internal4841)) (import "env" "Pya" (func $internal4842)) (import "env" "Qya" (func $internal4843)) (import "env" "Rya" (func $internal4844)) (import "env" "Sya" (func $internal4845)) (import "env" "Tya" (func $internal4846)) (import "env" "Uya" (func $internal4847)) (import "env" "Vya" (func $internal4848)) (import "env" "Wya" (func $internal4849)) (import "env" "Xya" (func $internal4850)) (import "env" "Yya" (func $internal4851)) (import "env" "Zya" (func $internal4852)) (import "env" "_ya" (func $internal4853)) (import "env" "$ya" (func $internal4854)) (import "env" "aza" (func $internal4855)) (import "env" "bza" (func $internal4856)) (import "env" "cza" (func $internal4857)) (import "env" "dza" (func $internal4858)) (import "env" "eza" (func $internal4859)) (import "env" "fza" (func $internal4860)) (import "env" "gza" (func $internal4861)) (import "env" "hza" (func $internal4862)) (import "env" "iza" (func $internal4863)) (import "env" "jza" (func $internal4864)) (import "env" "kza" (func $internal4865)) (import "env" "lza" (func $internal4866)) (import "env" "mza" (func $internal4867)) (import "env" "nza" (func $internal4868)) (import "env" "oza" (func $internal4869)) (import "env" "pza" (func $internal4870)) (import "env" "qza" (func $internal4871)) (import "env" "rza" (func $internal4872)) (import "env" "sza" (func $internal4873)) (import "env" "tza" (func $internal4874)) (import "env" "uza" (func $internal4875)) (import "env" "vza" (func $internal4876)) (import "env" "wza" (func $internal4877)) (import "env" "xza" (func $internal4878)) (import "env" "yza" (func $internal4879)) (import "env" "zza" (func $internal4880)) (import "env" "Aza" (func $internal4881)) (import "env" "Bza" (func $internal4882)) (import "env" "Cza" (func $internal4883)) (import "env" "Dza" (func $internal4884)) (import "env" "Eza" (func $internal4885)) (import "env" "Fza" (func $internal4886)) (import "env" "Gza" (func $internal4887)) (import "env" "Hza" (func $internal4888)) (import "env" "Iza" (func $internal4889)) (import "env" "Jza" (func $internal4890)) (import "env" "Kza" (func $internal4891)) (import "env" "Lza" (func $internal4892)) (import "env" "Mza" (func $internal4893)) (import "env" "Nza" (func $internal4894)) (import "env" "Oza" (func $internal4895)) (import "env" "Pza" (func $internal4896)) (import "env" "Qza" (func $internal4897)) (import "env" "Rza" (func $internal4898)) (import "env" "Sza" (func $internal4899)) (import "env" "Tza" (func $internal4900)) (import "env" "Uza" (func $internal4901)) (import "env" "Vza" (func $internal4902)) (import "env" "Wza" (func $internal4903)) (import "env" "Xza" (func $internal4904)) (import "env" "Yza" (func $internal4905)) (import "env" "Zza" (func $internal4906)) (import "env" "_za" (func $internal4907)) (import "env" "$za" (func $internal4908)) (import "env" "aAa" (func $internal4909)) (import "env" "bAa" (func $internal4910)) (import "env" "cAa" (func $internal4911)) (import "env" "dAa" (func $internal4912)) (import "env" "eAa" (func $internal4913)) (import "env" "fAa" (func $internal4914)) (import "env" "gAa" (func $internal4915)) (import "env" "hAa" (func $internal4916)) (import "env" "iAa" (func $internal4917)) (import "env" "jAa" (func $internal4918)) (import "env" "kAa" (func $internal4919)) (import "env" "lAa" (func $internal4920)) (import "env" "mAa" (func $internal4921)) (import "env" "nAa" (func $internal4922)) (import "env" "oAa" (func $internal4923)) (import "env" "pAa" (func $internal4924)) (import "env" "qAa" (func $internal4925)) (import "env" "rAa" (func $internal4926)) (import "env" "sAa" (func $internal4927)) (import "env" "tAa" (func $internal4928)) (import "env" "uAa" (func $internal4929)) (import "env" "vAa" (func $internal4930)) (import "env" "wAa" (func $internal4931)) (import "env" "xAa" (func $internal4932)) (import "env" "yAa" (func $internal4933)) (import "env" "zAa" (func $internal4934)) (import "env" "AAa" (func $internal4935)) (import "env" "BAa" (func $internal4936)) (import "env" "CAa" (func $internal4937)) (import "env" "DAa" (func $internal4938)) (import "env" "EAa" (func $internal4939)) (import "env" "FAa" (func $internal4940)) (import "env" "GAa" (func $internal4941)) (import "env" "HAa" (func $internal4942)) (import "env" "IAa" (func $internal4943)) (import "env" "JAa" (func $internal4944)) (import "env" "KAa" (func $internal4945)) (import "env" "LAa" (func $internal4946)) (import "env" "MAa" (func $internal4947)) (import "env" "NAa" (func $internal4948)) (import "env" "OAa" (func $internal4949)) (import "env" "PAa" (func $internal4950)) (import "env" "QAa" (func $internal4951)) (import "env" "RAa" (func $internal4952)) (import "env" "SAa" (func $internal4953)) (import "env" "TAa" (func $internal4954)) (import "env" "UAa" (func $internal4955)) (import "env" "VAa" (func $internal4956)) (import "env" "WAa" (func $internal4957)) (import "env" "XAa" (func $internal4958)) (import "env" "YAa" (func $internal4959)) (import "env" "ZAa" (func $internal4960)) (import "env" "_Aa" (func $internal4961)) (import "env" "$Aa" (func $internal4962)) (import "env" "aBa" (func $internal4963)) (import "env" "bBa" (func $internal4964)) (import "env" "cBa" (func $internal4965)) (import "env" "dBa" (func $internal4966)) (import "env" "eBa" (func $internal4967)) (import "env" "fBa" (func $internal4968)) (import "env" "gBa" (func $internal4969)) (import "env" "hBa" (func $internal4970)) (import "env" "iBa" (func $internal4971)) (import "env" "jBa" (func $internal4972)) (import "env" "kBa" (func $internal4973)) (import "env" "lBa" (func $internal4974)) (import "env" "mBa" (func $internal4975)) (import "env" "nBa" (func $internal4976)) (import "env" "oBa" (func $internal4977)) (import "env" "pBa" (func $internal4978)) (import "env" "qBa" (func $internal4979)) (import "env" "rBa" (func $internal4980)) (import "env" "sBa" (func $internal4981)) (import "env" "tBa" (func $internal4982)) (import "env" "uBa" (func $internal4983)) (import "env" "vBa" (func $internal4984)) (import "env" "wBa" (func $internal4985)) (import "env" "xBa" (func $internal4986)) (import "env" "yBa" (func $internal4987)) (import "env" "zBa" (func $internal4988)) (import "env" "ABa" (func $internal4989)) (import "env" "BBa" (func $internal4990)) (import "env" "CBa" (func $internal4991)) (import "env" "DBa" (func $internal4992)) (import "env" "EBa" (func $internal4993)) (import "env" "FBa" (func $internal4994)) (import "env" "GBa" (func $internal4995)) (import "env" "HBa" (func $internal4996)) (import "env" "IBa" (func $internal4997)) (import "env" "JBa" (func $internal4998)) (import "env" "KBa" (func $internal4999)) (import "other" "anything" (func $internalInfinity)) (import "wasi_unstable" "f" (func $internal3_wasi)) (import "wasi_unstable" "LBa" (func $internal3_wasi_only)) (import "env" "MBa" (tag $tagname1 (param i32))) (tag $tag1 (param i32 i32)) (export "NBa" (func $foo1)) (export "OBa" (func $foo2)) (export "PBa" (tag $tag1)) (func $foo1 (nop) ) (func $foo2 (nop) ) ) binaryen-version_108/test/passes/minify-imports-and-exports_all-features.wast000066400000000000000000010021721423707623100300210ustar00rootroot00000000000000(module (import "env" "longname1" (func $internal1)) (import "env" "longname2" (func $internal2)) (import "env" "global" (global i32)) (import "env" "longname3" (func $internal3)) (import "env" "longname4" (func $internal4)) (import "env" "longname5" (func $internal5)) (import "env" "longname6" (func $internal6)) (import "env" "longname7" (func $internal7)) (import "env" "longname8" (func $internal8)) (import "env" "longname9" (func $internal9)) (import "env" "longname10" (func $internal10)) (import "env" "longname11" (func $internal11)) (import "env" "longname12" (func $internal12)) (import "env" "longname13" (func $internal13)) (import "env" "longname14" (func $internal14)) (import "env" "longname15" (func $internal15)) (import "env" "longname16" (func $internal16)) (import "env" "longname17" (func $internal17)) (import "env" "longname18" (func $internal18)) (import "env" "longname19" (func $internal19)) (import "env" "longname20" (func $internal20)) (import "env" "longname21" (func $internal21)) (import "env" "longname22" (func $internal22)) (import "env" "longname23" (func $internal23)) (import "env" "longname24" (func $internal24)) (import "env" "longname25" (func $internal25)) (import "env" "longname26" (func $internal26)) (import "env" "longname27" (func $internal27)) (import "env" "longname28" (func $internal28)) (import "env" "longname29" (func $internal29)) (import "env" "longname30" (func $internal30)) (import "env" "longname31" (func $internal31)) (import "env" "longname32" (func $internal32)) (import "env" "longname33" (func $internal33)) (import "env" "longname34" (func $internal34)) (import "env" "longname35" (func $internal35)) (import "env" "longname36" (func $internal36)) (import "env" "longname37" (func $internal37)) (import "env" "longname38" (func $internal38)) (import "env" "longname39" (func $internal39)) (import "env" "longname40" (func $internal40)) (import "env" "longname41" (func $internal41)) (import "env" "longname42" (func $internal42)) (import "env" "longname43" (func $internal43)) (import "env" "longname44" (func $internal44)) (import "env" "longname45" (func $internal45)) (import "env" "longname46" (func $internal46)) (import "env" "longname47" (func $internal47)) (import "env" "longname48" (func $internal48)) (import "env" "longname49" (func $internal49)) (import "env" "longname50" (func $internal50)) (import "env" "longname51" (func $internal51)) (import "env" "longname52" (func $internal52)) (import "env" "longname53" (func $internal53)) (import "env" "longname54" (func $internal54)) (import "env" "longname55" (func $internal55)) (import "env" "longname56" (func $internal56)) (import "env" "longname57" (func $internal57)) (import "env" "longname58" (func $internal58)) (import "env" "longname59" (func $internal59)) (import "env" "longname60" (func $internal60)) (import "env" "longname61" (func $internal61)) (import "env" "longname62" (func $internal62)) (import "env" "longname63" (func $internal63)) (import "env" "longname64" (func $internal64)) (import "env" "longname65" (func $internal65)) (import "env" "longname66" (func $internal66)) (import "env" "longname67" (func $internal67)) (import "env" "longname68" (func $internal68)) (import "env" "longname69" (func $internal69)) (import "env" "longname70" (func $internal70)) (import "env" "longname71" (func $internal71)) (import "env" "longname72" (func $internal72)) (import "env" "longname73" (func $internal73)) (import "env" "longname74" (func $internal74)) (import "env" "longname75" (func $internal75)) (import "env" "longname76" (func $internal76)) (import "env" "longname77" (func $internal77)) (import "env" "longname78" (func $internal78)) (import "env" "longname79" (func $internal79)) (import "env" "longname80" (func $internal80)) (import "env" "longname81" (func $internal81)) (import "env" "longname82" (func $internal82)) (import "env" "longname83" (func $internal83)) (import "env" "longname84" (func $internal84)) (import "env" "longname85" (func $internal85)) (import "env" "longname86" (func $internal86)) (import "env" "longname87" (func $internal87)) (import "env" "longname88" (func $internal88)) (import "env" "longname89" (func $internal89)) (import "env" "longname90" (func $internal90)) (import "env" "longname91" (func $internal91)) (import "env" "longname92" (func $internal92)) (import "env" "longname93" (func $internal93)) (import "env" "longname94" (func $internal94)) (import "env" "longname95" (func $internal95)) (import "env" "longname96" (func $internal96)) (import "env" "longname97" (func $internal97)) (import "env" "longname98" (func $internal98)) (import "env" "longname99" (func $internal99)) (import "env" "longname100" (func $internal100)) (import "env" "longname101" (func $internal101)) (import "env" "longname102" (func $internal102)) (import "env" "longname103" (func $internal103)) (import "env" "longname104" (func $internal104)) (import "env" "longname105" (func $internal105)) (import "env" "longname106" (func $internal106)) (import "env" "longname107" (func $internal107)) (import "env" "longname108" (func $internal108)) (import "env" "longname109" (func $internal109)) (import "env" "longname110" (func $internal110)) (import "env" "longname111" (func $internal111)) (import "env" "longname112" (func $internal112)) (import "env" "longname113" (func $internal113)) (import "env" "longname114" (func $internal114)) (import "env" "longname115" (func $internal115)) (import "env" "longname116" (func $internal116)) (import "env" "longname117" (func $internal117)) (import "env" "longname118" (func $internal118)) (import "env" "longname119" (func $internal119)) (import "env" "longname120" (func $internal120)) (import "env" "longname121" (func $internal121)) (import "env" "longname122" (func $internal122)) (import "env" "longname123" (func $internal123)) (import "env" "longname124" (func $internal124)) (import "env" "longname125" (func $internal125)) (import "env" "longname126" (func $internal126)) (import "env" "longname127" (func $internal127)) (import "env" "longname128" (func $internal128)) (import "env" "longname129" (func $internal129)) (import "env" "longname130" (func $internal130)) (import "env" "longname131" (func $internal131)) (import "env" "longname132" (func $internal132)) (import "env" "longname133" (func $internal133)) (import "env" "longname134" (func $internal134)) (import "env" "longname135" (func $internal135)) (import "env" "longname136" (func $internal136)) (import "env" "longname137" (func $internal137)) (import "env" "longname138" (func $internal138)) (import "env" "longname139" (func $internal139)) (import "env" "longname140" (func $internal140)) (import "env" "longname141" (func $internal141)) (import "env" "longname142" (func $internal142)) (import "env" "longname143" (func $internal143)) (import "env" "longname144" (func $internal144)) (import "env" "longname145" (func $internal145)) (import "env" "longname146" (func $internal146)) (import "env" "longname147" (func $internal147)) (import "env" "longname148" (func $internal148)) (import "env" "longname149" (func $internal149)) (import "env" "longname150" (func $internal150)) (import "env" "longname151" (func $internal151)) (import "env" "longname152" (func $internal152)) (import "env" "longname153" (func $internal153)) (import "env" "longname154" (func $internal154)) (import "env" "longname155" (func $internal155)) (import "env" "longname156" (func $internal156)) (import "env" "longname157" (func $internal157)) (import "env" "longname158" (func $internal158)) (import "env" "longname159" (func $internal159)) (import "env" "longname160" (func $internal160)) (import "env" "longname161" (func $internal161)) (import "env" "longname162" (func $internal162)) (import "env" "longname163" (func $internal163)) (import "env" "longname164" (func $internal164)) (import "env" "longname165" (func $internal165)) (import "env" "longname166" (func $internal166)) (import "env" "longname167" (func $internal167)) (import "env" "longname168" (func $internal168)) (import "env" "longname169" (func $internal169)) (import "env" "longname170" (func $internal170)) (import "env" "longname171" (func $internal171)) (import "env" "longname172" (func $internal172)) (import "env" "longname173" (func $internal173)) (import "env" "longname174" (func $internal174)) (import "env" "longname175" (func $internal175)) (import "env" "longname176" (func $internal176)) (import "env" "longname177" (func $internal177)) (import "env" "longname178" (func $internal178)) (import "env" "longname179" (func $internal179)) (import "env" "longname180" (func $internal180)) (import "env" "longname181" (func $internal181)) (import "env" "longname182" (func $internal182)) (import "env" "longname183" (func $internal183)) (import "env" "longname184" (func $internal184)) (import "env" "longname185" (func $internal185)) (import "env" "longname186" (func $internal186)) (import "env" "longname187" (func $internal187)) (import "env" "longname188" (func $internal188)) (import "env" "longname189" (func $internal189)) (import "env" "longname190" (func $internal190)) (import "env" "longname191" (func $internal191)) (import "env" "longname192" (func $internal192)) (import "env" "longname193" (func $internal193)) (import "env" "longname194" (func $internal194)) (import "env" "longname195" (func $internal195)) (import "env" "longname196" (func $internal196)) (import "env" "longname197" (func $internal197)) (import "env" "longname198" (func $internal198)) (import "env" "longname199" (func $internal199)) (import "env" "longname200" (func $internal200)) (import "env" "longname201" (func $internal201)) (import "env" "longname202" (func $internal202)) (import "env" "longname203" (func $internal203)) (import "env" "longname204" (func $internal204)) (import "env" "longname205" (func $internal205)) (import "env" "longname206" (func $internal206)) (import "env" "longname207" (func $internal207)) (import "env" "longname208" (func $internal208)) (import "env" "longname209" (func $internal209)) (import "env" "longname210" (func $internal210)) (import "env" "longname211" (func $internal211)) (import "env" "longname212" (func $internal212)) (import "env" "longname213" (func $internal213)) (import "env" "longname214" (func $internal214)) (import "env" "longname215" (func $internal215)) (import "env" "longname216" (func $internal216)) (import "env" "longname217" (func $internal217)) (import "env" "longname218" (func $internal218)) (import "env" "longname219" (func $internal219)) (import "env" "longname220" (func $internal220)) (import "env" "longname221" (func $internal221)) (import "env" "longname222" (func $internal222)) (import "env" "longname223" (func $internal223)) (import "env" "longname224" (func $internal224)) (import "env" "longname225" (func $internal225)) (import "env" "longname226" (func $internal226)) (import "env" "longname227" (func $internal227)) (import "env" "longname228" (func $internal228)) (import "env" "longname229" (func $internal229)) (import "env" "longname230" (func $internal230)) (import "env" "longname231" (func $internal231)) (import "env" "longname232" (func $internal232)) (import "env" "longname233" (func $internal233)) (import "env" "longname234" (func $internal234)) (import "env" "longname235" (func $internal235)) (import "env" "longname236" (func $internal236)) (import "env" "longname237" (func $internal237)) (import "env" "longname238" (func $internal238)) (import "env" "longname239" (func $internal239)) (import "env" "longname240" (func $internal240)) (import "env" "longname241" (func $internal241)) (import "env" "longname242" (func $internal242)) (import "env" "longname243" (func $internal243)) (import "env" "longname244" (func $internal244)) (import "env" "longname245" (func $internal245)) (import "env" "longname246" (func $internal246)) (import "env" "longname247" (func $internal247)) (import "env" "longname248" (func $internal248)) (import "env" "longname249" (func $internal249)) (import "env" "longname250" (func $internal250)) (import "env" "longname251" (func $internal251)) (import "env" "longname252" (func $internal252)) (import "env" "longname253" (func $internal253)) (import "env" "longname254" (func $internal254)) (import "env" "longname255" (func $internal255)) (import "env" "longname256" (func $internal256)) (import "env" "longname257" (func $internal257)) (import "env" "longname258" (func $internal258)) (import "env" "longname259" (func $internal259)) (import "env" "longname260" (func $internal260)) (import "env" "longname261" (func $internal261)) (import "env" "longname262" (func $internal262)) (import "env" "longname263" (func $internal263)) (import "env" "longname264" (func $internal264)) (import "env" "longname265" (func $internal265)) (import "env" "longname266" (func $internal266)) (import "env" "longname267" (func $internal267)) (import "env" "longname268" (func $internal268)) (import "env" "longname269" (func $internal269)) (import "env" "longname270" (func $internal270)) (import "env" "longname271" (func $internal271)) (import "env" "longname272" (func $internal272)) (import "env" "longname273" (func $internal273)) (import "env" "longname274" (func $internal274)) (import "env" "longname275" (func $internal275)) (import "env" "longname276" (func $internal276)) (import "env" "longname277" (func $internal277)) (import "env" "longname278" (func $internal278)) (import "env" "longname279" (func $internal279)) (import "env" "longname280" (func $internal280)) (import "env" "longname281" (func $internal281)) (import "env" "longname282" (func $internal282)) (import "env" "longname283" (func $internal283)) (import "env" "longname284" (func $internal284)) (import "env" "longname285" (func $internal285)) (import "env" "longname286" (func $internal286)) (import "env" "longname287" (func $internal287)) (import "env" "longname288" (func $internal288)) (import "env" "longname289" (func $internal289)) (import "env" "longname290" (func $internal290)) (import "env" "longname291" (func $internal291)) (import "env" "longname292" (func $internal292)) (import "env" "longname293" (func $internal293)) (import "env" "longname294" (func $internal294)) (import "env" "longname295" (func $internal295)) (import "env" "longname296" (func $internal296)) (import "env" "longname297" (func $internal297)) (import "env" "longname298" (func $internal298)) (import "env" "longname299" (func $internal299)) (import "env" "longname300" (func $internal300)) (import "env" "longname301" (func $internal301)) (import "env" "longname302" (func $internal302)) (import "env" "longname303" (func $internal303)) (import "env" "longname304" (func $internal304)) (import "env" "longname305" (func $internal305)) (import "env" "longname306" (func $internal306)) (import "env" "longname307" (func $internal307)) (import "env" "longname308" (func $internal308)) (import "env" "longname309" (func $internal309)) (import "env" "longname310" (func $internal310)) (import "env" "longname311" (func $internal311)) (import "env" "longname312" (func $internal312)) (import "env" "longname313" (func $internal313)) (import "env" "longname314" (func $internal314)) (import "env" "longname315" (func $internal315)) (import "env" "longname316" (func $internal316)) (import "env" "longname317" (func $internal317)) (import "env" "longname318" (func $internal318)) (import "env" "longname319" (func $internal319)) (import "env" "longname320" (func $internal320)) (import "env" "longname321" (func $internal321)) (import "env" "longname322" (func $internal322)) (import "env" "longname323" (func $internal323)) (import "env" "longname324" (func $internal324)) (import "env" "longname325" (func $internal325)) (import "env" "longname326" (func $internal326)) (import "env" "longname327" (func $internal327)) (import "env" "longname328" (func $internal328)) (import "env" "longname329" (func $internal329)) (import "env" "longname330" (func $internal330)) (import "env" "longname331" (func $internal331)) (import "env" "longname332" (func $internal332)) (import "env" "longname333" (func $internal333)) (import "env" "longname334" (func $internal334)) (import "env" "longname335" (func $internal335)) (import "env" "longname336" (func $internal336)) (import "env" "longname337" (func $internal337)) (import "env" "longname338" (func $internal338)) (import "env" "longname339" (func $internal339)) (import "env" "longname340" (func $internal340)) (import "env" "longname341" (func $internal341)) (import "env" "longname342" (func $internal342)) (import "env" "longname343" (func $internal343)) (import "env" "longname344" (func $internal344)) (import "env" "longname345" (func $internal345)) (import "env" "longname346" (func $internal346)) (import "env" "longname347" (func $internal347)) (import "env" "longname348" (func $internal348)) (import "env" "longname349" (func $internal349)) (import "env" "longname350" (func $internal350)) (import "env" "longname351" (func $internal351)) (import "env" "longname352" (func $internal352)) (import "env" "longname353" (func $internal353)) (import "env" "longname354" (func $internal354)) (import "env" "longname355" (func $internal355)) (import "env" "longname356" (func $internal356)) (import "env" "longname357" (func $internal357)) (import "env" "longname358" (func $internal358)) (import "env" "longname359" (func $internal359)) (import "env" "longname360" (func $internal360)) (import "env" "longname361" (func $internal361)) (import "env" "longname362" (func $internal362)) (import "env" "longname363" (func $internal363)) (import "env" "longname364" (func $internal364)) (import "env" "longname365" (func $internal365)) (import "env" "longname366" (func $internal366)) (import "env" "longname367" (func $internal367)) (import "env" "longname368" (func $internal368)) (import "env" "longname369" (func $internal369)) (import "env" "longname370" (func $internal370)) (import "env" "longname371" (func $internal371)) (import "env" "longname372" (func $internal372)) (import "env" "longname373" (func $internal373)) (import "env" "longname374" (func $internal374)) (import "env" "longname375" (func $internal375)) (import "env" "longname376" (func $internal376)) (import "env" "longname377" (func $internal377)) (import "env" "longname378" (func $internal378)) (import "env" "longname379" (func $internal379)) (import "env" "longname380" (func $internal380)) (import "env" "longname381" (func $internal381)) (import "env" "longname382" (func $internal382)) (import "env" "longname383" (func $internal383)) (import "env" "longname384" (func $internal384)) (import "env" "longname385" (func $internal385)) (import "env" "longname386" (func $internal386)) (import "env" "longname387" (func $internal387)) (import "env" "longname388" (func $internal388)) (import "env" "longname389" (func $internal389)) (import "env" "longname390" (func $internal390)) (import "env" "longname391" (func $internal391)) (import "env" "longname392" (func $internal392)) (import "env" "longname393" (func $internal393)) (import "env" "longname394" (func $internal394)) (import "env" "longname395" (func $internal395)) (import "env" "longname396" (func $internal396)) (import "env" "longname397" (func $internal397)) (import "env" "longname398" (func $internal398)) (import "env" "longname399" (func $internal399)) (import "env" "longname400" (func $internal400)) (import "env" "longname401" (func $internal401)) (import "env" "longname402" (func $internal402)) (import "env" "longname403" (func $internal403)) (import "env" "longname404" (func $internal404)) (import "env" "longname405" (func $internal405)) (import "env" "longname406" (func $internal406)) (import "env" "longname407" (func $internal407)) (import "env" "longname408" (func $internal408)) (import "env" "longname409" (func $internal409)) (import "env" "longname410" (func $internal410)) (import "env" "longname411" (func $internal411)) (import "env" "longname412" (func $internal412)) (import "env" "longname413" (func $internal413)) (import "env" "longname414" (func $internal414)) (import "env" "longname415" (func $internal415)) (import "env" "longname416" (func $internal416)) (import "env" "longname417" (func $internal417)) (import "env" "longname418" (func $internal418)) (import "env" "longname419" (func $internal419)) (import "env" "longname420" (func $internal420)) (import "env" "longname421" (func $internal421)) (import "env" "longname422" (func $internal422)) (import "env" "longname423" (func $internal423)) (import "env" "longname424" (func $internal424)) (import "env" "longname425" (func $internal425)) (import "env" "longname426" (func $internal426)) (import "env" "longname427" (func $internal427)) (import "env" "longname428" (func $internal428)) (import "env" "longname429" (func $internal429)) (import "env" "longname430" (func $internal430)) (import "env" "longname431" (func $internal431)) (import "env" "longname432" (func $internal432)) (import "env" "longname433" (func $internal433)) (import "env" "longname434" (func $internal434)) (import "env" "longname435" (func $internal435)) (import "env" "longname436" (func $internal436)) (import "env" "longname437" (func $internal437)) (import "env" "longname438" (func $internal438)) (import "env" "longname439" (func $internal439)) (import "env" "longname440" (func $internal440)) (import "env" "longname441" (func $internal441)) (import "env" "longname442" (func $internal442)) (import "env" "longname443" (func $internal443)) (import "env" "longname444" (func $internal444)) (import "env" "longname445" (func $internal445)) (import "env" "longname446" (func $internal446)) (import "env" "longname447" (func $internal447)) (import "env" "longname448" (func $internal448)) (import "env" "longname449" (func $internal449)) (import "env" "longname450" (func $internal450)) (import "env" "longname451" (func $internal451)) (import "env" "longname452" (func $internal452)) (import "env" "longname453" (func $internal453)) (import "env" "longname454" (func $internal454)) (import "env" "longname455" (func $internal455)) (import "env" "longname456" (func $internal456)) (import "env" "longname457" (func $internal457)) (import "env" "longname458" (func $internal458)) (import "env" "longname459" (func $internal459)) (import "env" "longname460" (func $internal460)) (import "env" "longname461" (func $internal461)) (import "env" "longname462" (func $internal462)) (import "env" "longname463" (func $internal463)) (import "env" "longname464" (func $internal464)) (import "env" "longname465" (func $internal465)) (import "env" "longname466" (func $internal466)) (import "env" "longname467" (func $internal467)) (import "env" "longname468" (func $internal468)) (import "env" "longname469" (func $internal469)) (import "env" "longname470" (func $internal470)) (import "env" "longname471" (func $internal471)) (import "env" "longname472" (func $internal472)) (import "env" "longname473" (func $internal473)) (import "env" "longname474" (func $internal474)) (import "env" "longname475" (func $internal475)) (import "env" "longname476" (func $internal476)) (import "env" "longname477" (func $internal477)) (import "env" "longname478" (func $internal478)) (import "env" "longname479" (func $internal479)) (import "env" "longname480" (func $internal480)) (import "env" "longname481" (func $internal481)) (import "env" "longname482" (func $internal482)) (import "env" "longname483" (func $internal483)) (import "env" "longname484" (func $internal484)) (import "env" "longname485" (func $internal485)) (import "env" "longname486" (func $internal486)) (import "env" "longname487" (func $internal487)) (import "env" "longname488" (func $internal488)) (import "env" "longname489" (func $internal489)) (import "env" "longname490" (func $internal490)) (import "env" "longname491" (func $internal491)) (import "env" "longname492" (func $internal492)) (import "env" "longname493" (func $internal493)) (import "env" "longname494" (func $internal494)) (import "env" "longname495" (func $internal495)) (import "env" "longname496" (func $internal496)) (import "env" "longname497" (func $internal497)) (import "env" "longname498" (func $internal498)) (import "env" "longname499" (func $internal499)) (import "env" "longname500" (func $internal500)) (import "env" "longname501" (func $internal501)) (import "env" "longname502" (func $internal502)) (import "env" "longname503" (func $internal503)) (import "env" "longname504" (func $internal504)) (import "env" "longname505" (func $internal505)) (import "env" "longname506" (func $internal506)) (import "env" "longname507" (func $internal507)) (import "env" "longname508" (func $internal508)) (import "env" "longname509" (func $internal509)) (import "env" "longname510" (func $internal510)) (import "env" "longname511" (func $internal511)) (import "env" "longname512" (func $internal512)) (import "env" "longname513" (func $internal513)) (import "env" "longname514" (func $internal514)) (import "env" "longname515" (func $internal515)) (import "env" "longname516" (func $internal516)) (import "env" "longname517" (func $internal517)) (import "env" "longname518" (func $internal518)) (import "env" "longname519" (func $internal519)) (import "env" "longname520" (func $internal520)) (import "env" "longname521" (func $internal521)) (import "env" "longname522" (func $internal522)) (import "env" "longname523" (func $internal523)) (import "env" "longname524" (func $internal524)) (import "env" "longname525" (func $internal525)) (import "env" "longname526" (func $internal526)) (import "env" "longname527" (func $internal527)) (import "env" "longname528" (func $internal528)) (import "env" "longname529" (func $internal529)) (import "env" "longname530" (func $internal530)) (import "env" "longname531" (func $internal531)) (import "env" "longname532" (func $internal532)) (import "env" "longname533" (func $internal533)) (import "env" "longname534" (func $internal534)) (import "env" "longname535" (func $internal535)) (import "env" "longname536" (func $internal536)) (import "env" "longname537" (func $internal537)) (import "env" "longname538" (func $internal538)) (import "env" "longname539" (func $internal539)) (import "env" "longname540" (func $internal540)) (import "env" "longname541" (func $internal541)) (import "env" "longname542" (func $internal542)) (import "env" "longname543" (func $internal543)) (import "env" "longname544" (func $internal544)) (import "env" "longname545" (func $internal545)) (import "env" "longname546" (func $internal546)) (import "env" "longname547" (func $internal547)) (import "env" "longname548" (func $internal548)) (import "env" "longname549" (func $internal549)) (import "env" "longname550" (func $internal550)) (import "env" "longname551" (func $internal551)) (import "env" "longname552" (func $internal552)) (import "env" "longname553" (func $internal553)) (import "env" "longname554" (func $internal554)) (import "env" "longname555" (func $internal555)) (import "env" "longname556" (func $internal556)) (import "env" "longname557" (func $internal557)) (import "env" "longname558" (func $internal558)) (import "env" "longname559" (func $internal559)) (import "env" "longname560" (func $internal560)) (import "env" "longname561" (func $internal561)) (import "env" "longname562" (func $internal562)) (import "env" "longname563" (func $internal563)) (import "env" "longname564" (func $internal564)) (import "env" "longname565" (func $internal565)) (import "env" "longname566" (func $internal566)) (import "env" "longname567" (func $internal567)) (import "env" "longname568" (func $internal568)) (import "env" "longname569" (func $internal569)) (import "env" "longname570" (func $internal570)) (import "env" "longname571" (func $internal571)) (import "env" "longname572" (func $internal572)) (import "env" "longname573" (func $internal573)) (import "env" "longname574" (func $internal574)) (import "env" "longname575" (func $internal575)) (import "env" "longname576" (func $internal576)) (import "env" "longname577" (func $internal577)) (import "env" "longname578" (func $internal578)) (import "env" "longname579" (func $internal579)) (import "env" "longname580" (func $internal580)) (import "env" "longname581" (func $internal581)) (import "env" "longname582" (func $internal582)) (import "env" "longname583" (func $internal583)) (import "env" "longname584" (func $internal584)) (import "env" "longname585" (func $internal585)) (import "env" "longname586" (func $internal586)) (import "env" "longname587" (func $internal587)) (import "env" "longname588" (func $internal588)) (import "env" "longname589" (func $internal589)) (import "env" "longname590" (func $internal590)) (import "env" "longname591" (func $internal591)) (import "env" "longname592" (func $internal592)) (import "env" "longname593" (func $internal593)) (import "env" "longname594" (func $internal594)) (import "env" "longname595" (func $internal595)) (import "env" "longname596" (func $internal596)) (import "env" "longname597" (func $internal597)) (import "env" "longname598" (func $internal598)) (import "env" "longname599" (func $internal599)) (import "env" "longname600" (func $internal600)) (import "env" "longname601" (func $internal601)) (import "env" "longname602" (func $internal602)) (import "env" "longname603" (func $internal603)) (import "env" "longname604" (func $internal604)) (import "env" "longname605" (func $internal605)) (import "env" "longname606" (func $internal606)) (import "env" "longname607" (func $internal607)) (import "env" "longname608" (func $internal608)) (import "env" "longname609" (func $internal609)) (import "env" "longname610" (func $internal610)) (import "env" "longname611" (func $internal611)) (import "env" "longname612" (func $internal612)) (import "env" "longname613" (func $internal613)) (import "env" "longname614" (func $internal614)) (import "env" "longname615" (func $internal615)) (import "env" "longname616" (func $internal616)) (import "env" "longname617" (func $internal617)) (import "env" "longname618" (func $internal618)) (import "env" "longname619" (func $internal619)) (import "env" "longname620" (func $internal620)) (import "env" "longname621" (func $internal621)) (import "env" "longname622" (func $internal622)) (import "env" "longname623" (func $internal623)) (import "env" "longname624" (func $internal624)) (import "env" "longname625" (func $internal625)) (import "env" "longname626" (func $internal626)) (import "env" "longname627" (func $internal627)) (import "env" "longname628" (func $internal628)) (import "env" "longname629" (func $internal629)) (import "env" "longname630" (func $internal630)) (import "env" "longname631" (func $internal631)) (import "env" "longname632" (func $internal632)) (import "env" "longname633" (func $internal633)) (import "env" "longname634" (func $internal634)) (import "env" "longname635" (func $internal635)) (import "env" "longname636" (func $internal636)) (import "env" "longname637" (func $internal637)) (import "env" "longname638" (func $internal638)) (import "env" "longname639" (func $internal639)) (import "env" "longname640" (func $internal640)) (import "env" "longname641" (func $internal641)) (import "env" "longname642" (func $internal642)) (import "env" "longname643" (func $internal643)) (import "env" "longname644" (func $internal644)) (import "env" "longname645" (func $internal645)) (import "env" "longname646" (func $internal646)) (import "env" "longname647" (func $internal647)) (import "env" "longname648" (func $internal648)) (import "env" "longname649" (func $internal649)) (import "env" "longname650" (func $internal650)) (import "env" "longname651" (func $internal651)) (import "env" "longname652" (func $internal652)) (import "env" "longname653" (func $internal653)) (import "env" "longname654" (func $internal654)) (import "env" "longname655" (func $internal655)) (import "env" "longname656" (func $internal656)) (import "env" "longname657" (func $internal657)) (import "env" "longname658" (func $internal658)) (import "env" "longname659" (func $internal659)) (import "env" "longname660" (func $internal660)) (import "env" "longname661" (func $internal661)) (import "env" "longname662" (func $internal662)) (import "env" "longname663" (func $internal663)) (import "env" "longname664" (func $internal664)) (import "env" "longname665" (func $internal665)) (import "env" "longname666" (func $internal666)) (import "env" "longname667" (func $internal667)) (import "env" "longname668" (func $internal668)) (import "env" "longname669" (func $internal669)) (import "env" "longname670" (func $internal670)) (import "env" "longname671" (func $internal671)) (import "env" "longname672" (func $internal672)) (import "env" "longname673" (func $internal673)) (import "env" "longname674" (func $internal674)) (import "env" "longname675" (func $internal675)) (import "env" "longname676" (func $internal676)) (import "env" "longname677" (func $internal677)) (import "env" "longname678" (func $internal678)) (import "env" "longname679" (func $internal679)) (import "env" "longname680" (func $internal680)) (import "env" "longname681" (func $internal681)) (import "env" "longname682" (func $internal682)) (import "env" "longname683" (func $internal683)) (import "env" "longname684" (func $internal684)) (import "env" "longname685" (func $internal685)) (import "env" "longname686" (func $internal686)) (import "env" "longname687" (func $internal687)) (import "env" "longname688" (func $internal688)) (import "env" "longname689" (func $internal689)) (import "env" "longname690" (func $internal690)) (import "env" "longname691" (func $internal691)) (import "env" "longname692" (func $internal692)) (import "env" "longname693" (func $internal693)) (import "env" "longname694" (func $internal694)) (import "env" "longname695" (func $internal695)) (import "env" "longname696" (func $internal696)) (import "env" "longname697" (func $internal697)) (import "env" "longname698" (func $internal698)) (import "env" "longname699" (func $internal699)) (import "env" "longname700" (func $internal700)) (import "env" "longname701" (func $internal701)) (import "env" "longname702" (func $internal702)) (import "env" "longname703" (func $internal703)) (import "env" "longname704" (func $internal704)) (import "env" "longname705" (func $internal705)) (import "env" "longname706" (func $internal706)) (import "env" "longname707" (func $internal707)) (import "env" "longname708" (func $internal708)) (import "env" "longname709" (func $internal709)) (import "env" "longname710" (func $internal710)) (import "env" "longname711" (func $internal711)) (import "env" "longname712" (func $internal712)) (import "env" "longname713" (func $internal713)) (import "env" "longname714" (func $internal714)) (import "env" "longname715" (func $internal715)) (import "env" "longname716" (func $internal716)) (import "env" "longname717" (func $internal717)) (import "env" "longname718" (func $internal718)) (import "env" "longname719" (func $internal719)) (import "env" "longname720" (func $internal720)) (import "env" "longname721" (func $internal721)) (import "env" "longname722" (func $internal722)) (import "env" "longname723" (func $internal723)) (import "env" "longname724" (func $internal724)) (import "env" "longname725" (func $internal725)) (import "env" "longname726" (func $internal726)) (import "env" "longname727" (func $internal727)) (import "env" "longname728" (func $internal728)) (import "env" "longname729" (func $internal729)) (import "env" "longname730" (func $internal730)) (import "env" "longname731" (func $internal731)) (import "env" "longname732" (func $internal732)) (import "env" "longname733" (func $internal733)) (import "env" "longname734" (func $internal734)) (import "env" "longname735" (func $internal735)) (import "env" "longname736" (func $internal736)) (import "env" "longname737" (func $internal737)) (import "env" "longname738" (func $internal738)) (import "env" "longname739" (func $internal739)) (import "env" "longname740" (func $internal740)) (import "env" "longname741" (func $internal741)) (import "env" "longname742" (func $internal742)) (import "env" "longname743" (func $internal743)) (import "env" "longname744" (func $internal744)) (import "env" "longname745" (func $internal745)) (import "env" "longname746" (func $internal746)) (import "env" "longname747" (func $internal747)) (import "env" "longname748" (func $internal748)) (import "env" "longname749" (func $internal749)) (import "env" "longname750" (func $internal750)) (import "env" "longname751" (func $internal751)) (import "env" "longname752" (func $internal752)) (import "env" "longname753" (func $internal753)) (import "env" "longname754" (func $internal754)) (import "env" "longname755" (func $internal755)) (import "env" "longname756" (func $internal756)) (import "env" "longname757" (func $internal757)) (import "env" "longname758" (func $internal758)) (import "env" "longname759" (func $internal759)) (import "env" "longname760" (func $internal760)) (import "env" "longname761" (func $internal761)) (import "env" "longname762" (func $internal762)) (import "env" "longname763" (func $internal763)) (import "env" "longname764" (func $internal764)) (import "env" "longname765" (func $internal765)) (import "env" "longname766" (func $internal766)) (import "env" "longname767" (func $internal767)) (import "env" "longname768" (func $internal768)) (import "env" "longname769" (func $internal769)) (import "env" "longname770" (func $internal770)) (import "env" "longname771" (func $internal771)) (import "env" "longname772" (func $internal772)) (import "env" "longname773" (func $internal773)) (import "env" "longname774" (func $internal774)) (import "env" "longname775" (func $internal775)) (import "env" "longname776" (func $internal776)) (import "env" "longname777" (func $internal777)) (import "env" "longname778" (func $internal778)) (import "env" "longname779" (func $internal779)) (import "env" "longname780" (func $internal780)) (import "env" "longname781" (func $internal781)) (import "env" "longname782" (func $internal782)) (import "env" "longname783" (func $internal783)) (import "env" "longname784" (func $internal784)) (import "env" "longname785" (func $internal785)) (import "env" "longname786" (func $internal786)) (import "env" "longname787" (func $internal787)) (import "env" "longname788" (func $internal788)) (import "env" "longname789" (func $internal789)) (import "env" "longname790" (func $internal790)) (import "env" "longname791" (func $internal791)) (import "env" "longname792" (func $internal792)) (import "env" "longname793" (func $internal793)) (import "env" "longname794" (func $internal794)) (import "env" "longname795" (func $internal795)) (import "env" "longname796" (func $internal796)) (import "env" "longname797" (func $internal797)) (import "env" "longname798" (func $internal798)) (import "env" "longname799" (func $internal799)) (import "env" "longname800" (func $internal800)) (import "env" "longname801" (func $internal801)) (import "env" "longname802" (func $internal802)) (import "env" "longname803" (func $internal803)) (import "env" "longname804" (func $internal804)) (import "env" "longname805" (func $internal805)) (import "env" "longname806" (func $internal806)) (import "env" "longname807" (func $internal807)) (import "env" "longname808" (func $internal808)) (import "env" "longname809" (func $internal809)) (import "env" "longname810" (func $internal810)) (import "env" "longname811" (func $internal811)) (import "env" "longname812" (func $internal812)) (import "env" "longname813" (func $internal813)) (import "env" "longname814" (func $internal814)) (import "env" "longname815" (func $internal815)) (import "env" "longname816" (func $internal816)) (import "env" "longname817" (func $internal817)) (import "env" "longname818" (func $internal818)) (import "env" "longname819" (func $internal819)) (import "env" "longname820" (func $internal820)) (import "env" "longname821" (func $internal821)) (import "env" "longname822" (func $internal822)) (import "env" "longname823" (func $internal823)) (import "env" "longname824" (func $internal824)) (import "env" "longname825" (func $internal825)) (import "env" "longname826" (func $internal826)) (import "env" "longname827" (func $internal827)) (import "env" "longname828" (func $internal828)) (import "env" "longname829" (func $internal829)) (import "env" "longname830" (func $internal830)) (import "env" "longname831" (func $internal831)) (import "env" "longname832" (func $internal832)) (import "env" "longname833" (func $internal833)) (import "env" "longname834" (func $internal834)) (import "env" "longname835" (func $internal835)) (import "env" "longname836" (func $internal836)) (import "env" "longname837" (func $internal837)) (import "env" "longname838" (func $internal838)) (import "env" "longname839" (func $internal839)) (import "env" "longname840" (func $internal840)) (import "env" "longname841" (func $internal841)) (import "env" "longname842" (func $internal842)) (import "env" "longname843" (func $internal843)) (import "env" "longname844" (func $internal844)) (import "env" "longname845" (func $internal845)) (import "env" "longname846" (func $internal846)) (import "env" "longname847" (func $internal847)) (import "env" "longname848" (func $internal848)) (import "env" "longname849" (func $internal849)) (import "env" "longname850" (func $internal850)) (import "env" "longname851" (func $internal851)) (import "env" "longname852" (func $internal852)) (import "env" "longname853" (func $internal853)) (import "env" "longname854" (func $internal854)) (import "env" "longname855" (func $internal855)) (import "env" "longname856" (func $internal856)) (import "env" "longname857" (func $internal857)) (import "env" "longname858" (func $internal858)) (import "env" "longname859" (func $internal859)) (import "env" "longname860" (func $internal860)) (import "env" "longname861" (func $internal861)) (import "env" "longname862" (func $internal862)) (import "env" "longname863" (func $internal863)) (import "env" "longname864" (func $internal864)) (import "env" "longname865" (func $internal865)) (import "env" "longname866" (func $internal866)) (import "env" "longname867" (func $internal867)) (import "env" "longname868" (func $internal868)) (import "env" "longname869" (func $internal869)) (import "env" "longname870" (func $internal870)) (import "env" "longname871" (func $internal871)) (import "env" "longname872" (func $internal872)) (import "env" "longname873" (func $internal873)) (import "env" "longname874" (func $internal874)) (import "env" "longname875" (func $internal875)) (import "env" "longname876" (func $internal876)) (import "env" "longname877" (func $internal877)) (import "env" "longname878" (func $internal878)) (import "env" "longname879" (func $internal879)) (import "env" "longname880" (func $internal880)) (import "env" "longname881" (func $internal881)) (import "env" "longname882" (func $internal882)) (import "env" "longname883" (func $internal883)) (import "env" "longname884" (func $internal884)) (import "env" "longname885" (func $internal885)) (import "env" "longname886" (func $internal886)) (import "env" "longname887" (func $internal887)) (import "env" "longname888" (func $internal888)) (import "env" "longname889" (func $internal889)) (import "env" "longname890" (func $internal890)) (import "env" "longname891" (func $internal891)) (import "env" "longname892" (func $internal892)) (import "env" "longname893" (func $internal893)) (import "env" "longname894" (func $internal894)) (import "env" "longname895" (func $internal895)) (import "env" "longname896" (func $internal896)) (import "env" "longname897" (func $internal897)) (import "env" "longname898" (func $internal898)) (import "env" "longname899" (func $internal899)) (import "env" "longname900" (func $internal900)) (import "env" "longname901" (func $internal901)) (import "env" "longname902" (func $internal902)) (import "env" "longname903" (func $internal903)) (import "env" "longname904" (func $internal904)) (import "env" "longname905" (func $internal905)) (import "env" "longname906" (func $internal906)) (import "env" "longname907" (func $internal907)) (import "env" "longname908" (func $internal908)) (import "env" "longname909" (func $internal909)) (import "env" "longname910" (func $internal910)) (import "env" "longname911" (func $internal911)) (import "env" "longname912" (func $internal912)) (import "env" "longname913" (func $internal913)) (import "env" "longname914" (func $internal914)) (import "env" "longname915" (func $internal915)) (import "env" "longname916" (func $internal916)) (import "env" "longname917" (func $internal917)) (import "env" "longname918" (func $internal918)) (import "env" "longname919" (func $internal919)) (import "env" "longname920" (func $internal920)) (import "env" "longname921" (func $internal921)) (import "env" "longname922" (func $internal922)) (import "env" "longname923" (func $internal923)) (import "env" "longname924" (func $internal924)) (import "env" "longname925" (func $internal925)) (import "env" "longname926" (func $internal926)) (import "env" "longname927" (func $internal927)) (import "env" "longname928" (func $internal928)) (import "env" "longname929" (func $internal929)) (import "env" "longname930" (func $internal930)) (import "env" "longname931" (func $internal931)) (import "env" "longname932" (func $internal932)) (import "env" "longname933" (func $internal933)) (import "env" "longname934" (func $internal934)) (import "env" "longname935" (func $internal935)) (import "env" "longname936" (func $internal936)) (import "env" "longname937" (func $internal937)) (import "env" "longname938" (func $internal938)) (import "env" "longname939" (func $internal939)) (import "env" "longname940" (func $internal940)) (import "env" "longname941" (func $internal941)) (import "env" "longname942" (func $internal942)) (import "env" "longname943" (func $internal943)) (import "env" "longname944" (func $internal944)) (import "env" "longname945" (func $internal945)) (import "env" "longname946" (func $internal946)) (import "env" "longname947" (func $internal947)) (import "env" "longname948" (func $internal948)) (import "env" "longname949" (func $internal949)) (import "env" "longname950" (func $internal950)) (import "env" "longname951" (func $internal951)) (import "env" "longname952" (func $internal952)) (import "env" "longname953" (func $internal953)) (import "env" "longname954" (func $internal954)) (import "env" "longname955" (func $internal955)) (import "env" "longname956" (func $internal956)) (import "env" "longname957" (func $internal957)) (import "env" "longname958" (func $internal958)) (import "env" "longname959" (func $internal959)) (import "env" "longname960" (func $internal960)) (import "env" "longname961" (func $internal961)) (import "env" "longname962" (func $internal962)) (import "env" "longname963" (func $internal963)) (import "env" "longname964" (func $internal964)) (import "env" "longname965" (func $internal965)) (import "env" "longname966" (func $internal966)) (import "env" "longname967" (func $internal967)) (import "env" "longname968" (func $internal968)) (import "env" "longname969" (func $internal969)) (import "env" "longname970" (func $internal970)) (import "env" "longname971" (func $internal971)) (import "env" "longname972" (func $internal972)) (import "env" "longname973" (func $internal973)) (import "env" "longname974" (func $internal974)) (import "env" "longname975" (func $internal975)) (import "env" "longname976" (func $internal976)) (import "env" "longname977" (func $internal977)) (import "env" "longname978" (func $internal978)) (import "env" "longname979" (func $internal979)) (import "env" "longname980" (func $internal980)) (import "env" "longname981" (func $internal981)) (import "env" "longname982" (func $internal982)) (import "env" "longname983" (func $internal983)) (import "env" "longname984" (func $internal984)) (import "env" "longname985" (func $internal985)) (import "env" "longname986" (func $internal986)) (import "env" "longname987" (func $internal987)) (import "env" "longname988" (func $internal988)) (import "env" "longname989" (func $internal989)) (import "env" "longname990" (func $internal990)) (import "env" "longname991" (func $internal991)) (import "env" "longname992" (func $internal992)) (import "env" "longname993" (func $internal993)) (import "env" "longname994" (func $internal994)) (import "env" "longname995" (func $internal995)) (import "env" "longname996" (func $internal996)) (import "env" "longname997" (func $internal997)) (import "env" "longname998" (func $internal998)) (import "env" "longname999" (func $internal999)) (import "env" "longname1000" (func $internal1000)) (import "env" "longname1001" (func $internal1001)) (import "env" "longname1002" (func $internal1002)) (import "env" "longname1003" (func $internal1003)) (import "env" "longname1004" (func $internal1004)) (import "env" "longname1005" (func $internal1005)) (import "env" "longname1006" (func $internal1006)) (import "env" "longname1007" (func $internal1007)) (import "env" "longname1008" (func $internal1008)) (import "env" "longname1009" (func $internal1009)) (import "env" "longname1010" (func $internal1010)) (import "env" "longname1011" (func $internal1011)) (import "env" "longname1012" (func $internal1012)) (import "env" "longname1013" (func $internal1013)) (import "env" "longname1014" (func $internal1014)) (import "env" "longname1015" (func $internal1015)) (import "env" "longname1016" (func $internal1016)) (import "env" "longname1017" (func $internal1017)) (import "env" "longname1018" (func $internal1018)) (import "env" "longname1019" (func $internal1019)) (import "env" "longname1020" (func $internal1020)) (import "env" "longname1021" (func $internal1021)) (import "env" "longname1022" (func $internal1022)) (import "env" "longname1023" (func $internal1023)) (import "env" "longname1024" (func $internal1024)) (import "env" "longname1025" (func $internal1025)) (import "env" "longname1026" (func $internal1026)) (import "env" "longname1027" (func $internal1027)) (import "env" "longname1028" (func $internal1028)) (import "env" "longname1029" (func $internal1029)) (import "env" "longname1030" (func $internal1030)) (import "env" "longname1031" (func $internal1031)) (import "env" "longname1032" (func $internal1032)) (import "env" "longname1033" (func $internal1033)) (import "env" "longname1034" (func $internal1034)) (import "env" "longname1035" (func $internal1035)) (import "env" "longname1036" (func $internal1036)) (import "env" "longname1037" (func $internal1037)) (import "env" "longname1038" (func $internal1038)) (import "env" "longname1039" (func $internal1039)) (import "env" "longname1040" (func $internal1040)) (import "env" "longname1041" (func $internal1041)) (import "env" "longname1042" (func $internal1042)) (import "env" "longname1043" (func $internal1043)) (import "env" "longname1044" (func $internal1044)) (import "env" "longname1045" (func $internal1045)) (import "env" "longname1046" (func $internal1046)) (import "env" "longname1047" (func $internal1047)) (import "env" "longname1048" (func $internal1048)) (import "env" "longname1049" (func $internal1049)) (import "env" "longname1050" (func $internal1050)) (import "env" "longname1051" (func $internal1051)) (import "env" "longname1052" (func $internal1052)) (import "env" "longname1053" (func $internal1053)) (import "env" "longname1054" (func $internal1054)) (import "env" "longname1055" (func $internal1055)) (import "env" "longname1056" (func $internal1056)) (import "env" "longname1057" (func $internal1057)) (import "env" "longname1058" (func $internal1058)) (import "env" "longname1059" (func $internal1059)) (import "env" "longname1060" (func $internal1060)) (import "env" "longname1061" (func $internal1061)) (import "env" "longname1062" (func $internal1062)) (import "env" "longname1063" (func $internal1063)) (import "env" "longname1064" (func $internal1064)) (import "env" "longname1065" (func $internal1065)) (import "env" "longname1066" (func $internal1066)) (import "env" "longname1067" (func $internal1067)) (import "env" "longname1068" (func $internal1068)) (import "env" "longname1069" (func $internal1069)) (import "env" "longname1070" (func $internal1070)) (import "env" "longname1071" (func $internal1071)) (import "env" "longname1072" (func $internal1072)) (import "env" "longname1073" (func $internal1073)) (import "env" "longname1074" (func $internal1074)) (import "env" "longname1075" (func $internal1075)) (import "env" "longname1076" (func $internal1076)) (import "env" "longname1077" (func $internal1077)) (import "env" "longname1078" (func $internal1078)) (import "env" "longname1079" (func $internal1079)) (import "env" "longname1080" (func $internal1080)) (import "env" "longname1081" (func $internal1081)) (import "env" "longname1082" (func $internal1082)) (import "env" "longname1083" (func $internal1083)) (import "env" "longname1084" (func $internal1084)) (import "env" "longname1085" (func $internal1085)) (import "env" "longname1086" (func $internal1086)) (import "env" "longname1087" (func $internal1087)) (import "env" "longname1088" (func $internal1088)) (import "env" "longname1089" (func $internal1089)) (import "env" "longname1090" (func $internal1090)) (import "env" "longname1091" (func $internal1091)) (import "env" "longname1092" (func $internal1092)) (import "env" "longname1093" (func $internal1093)) (import "env" "longname1094" (func $internal1094)) (import "env" "longname1095" (func $internal1095)) (import "env" "longname1096" (func $internal1096)) (import "env" "longname1097" (func $internal1097)) (import "env" "longname1098" (func $internal1098)) (import "env" "longname1099" (func $internal1099)) (import "env" "longname1100" (func $internal1100)) (import "env" "longname1101" (func $internal1101)) (import "env" "longname1102" (func $internal1102)) (import "env" "longname1103" (func $internal1103)) (import "env" "longname1104" (func $internal1104)) (import "env" "longname1105" (func $internal1105)) (import "env" "longname1106" (func $internal1106)) (import "env" "longname1107" (func $internal1107)) (import "env" "longname1108" (func $internal1108)) (import "env" "longname1109" (func $internal1109)) (import "env" "longname1110" (func $internal1110)) (import "env" "longname1111" (func $internal1111)) (import "env" "longname1112" (func $internal1112)) (import "env" "longname1113" (func $internal1113)) (import "env" "longname1114" (func $internal1114)) (import "env" "longname1115" (func $internal1115)) (import "env" "longname1116" (func $internal1116)) (import "env" "longname1117" (func $internal1117)) (import "env" "longname1118" (func $internal1118)) (import "env" "longname1119" (func $internal1119)) (import "env" "longname1120" (func $internal1120)) (import "env" "longname1121" (func $internal1121)) (import "env" "longname1122" (func $internal1122)) (import "env" "longname1123" (func $internal1123)) (import "env" "longname1124" (func $internal1124)) (import "env" "longname1125" (func $internal1125)) (import "env" "longname1126" (func $internal1126)) (import "env" "longname1127" (func $internal1127)) (import "env" "longname1128" (func $internal1128)) (import "env" "longname1129" (func $internal1129)) (import "env" "longname1130" (func $internal1130)) (import "env" "longname1131" (func $internal1131)) (import "env" "longname1132" (func $internal1132)) (import "env" "longname1133" (func $internal1133)) (import "env" "longname1134" (func $internal1134)) (import "env" "longname1135" (func $internal1135)) (import "env" "longname1136" (func $internal1136)) (import "env" "longname1137" (func $internal1137)) (import "env" "longname1138" (func $internal1138)) (import "env" "longname1139" (func $internal1139)) (import "env" "longname1140" (func $internal1140)) (import "env" "longname1141" (func $internal1141)) (import "env" "longname1142" (func $internal1142)) (import "env" "longname1143" (func $internal1143)) (import "env" "longname1144" (func $internal1144)) (import "env" "longname1145" (func $internal1145)) (import "env" "longname1146" (func $internal1146)) (import "env" "longname1147" (func $internal1147)) (import "env" "longname1148" (func $internal1148)) (import "env" "longname1149" (func $internal1149)) (import "env" "longname1150" (func $internal1150)) (import "env" "longname1151" (func $internal1151)) (import "env" "longname1152" (func $internal1152)) (import "env" "longname1153" (func $internal1153)) (import "env" "longname1154" (func $internal1154)) (import "env" "longname1155" (func $internal1155)) (import "env" "longname1156" (func $internal1156)) (import "env" "longname1157" (func $internal1157)) (import "env" "longname1158" (func $internal1158)) (import "env" "longname1159" (func $internal1159)) (import "env" "longname1160" (func $internal1160)) (import "env" "longname1161" (func $internal1161)) (import "env" "longname1162" (func $internal1162)) (import "env" "longname1163" (func $internal1163)) (import "env" "longname1164" (func $internal1164)) (import "env" "longname1165" (func $internal1165)) (import "env" "longname1166" (func $internal1166)) (import "env" "longname1167" (func $internal1167)) (import "env" "longname1168" (func $internal1168)) (import "env" "longname1169" (func $internal1169)) (import "env" "longname1170" (func $internal1170)) (import "env" "longname1171" (func $internal1171)) (import "env" "longname1172" (func $internal1172)) (import "env" "longname1173" (func $internal1173)) (import "env" "longname1174" (func $internal1174)) (import "env" "longname1175" (func $internal1175)) (import "env" "longname1176" (func $internal1176)) (import "env" "longname1177" (func $internal1177)) (import "env" "longname1178" (func $internal1178)) (import "env" "longname1179" (func $internal1179)) (import "env" "longname1180" (func $internal1180)) (import "env" "longname1181" (func $internal1181)) (import "env" "longname1182" (func $internal1182)) (import "env" "longname1183" (func $internal1183)) (import "env" "longname1184" (func $internal1184)) (import "env" "longname1185" (func $internal1185)) (import "env" "longname1186" (func $internal1186)) (import "env" "longname1187" (func $internal1187)) (import "env" "longname1188" (func $internal1188)) (import "env" "longname1189" (func $internal1189)) (import "env" "longname1190" (func $internal1190)) (import "env" "longname1191" (func $internal1191)) (import "env" "longname1192" (func $internal1192)) (import "env" "longname1193" (func $internal1193)) (import "env" "longname1194" (func $internal1194)) (import "env" "longname1195" (func $internal1195)) (import "env" "longname1196" (func $internal1196)) (import "env" "longname1197" (func $internal1197)) (import "env" "longname1198" (func $internal1198)) (import "env" "longname1199" (func $internal1199)) (import "env" "longname1200" (func $internal1200)) (import "env" "longname1201" (func $internal1201)) (import "env" "longname1202" (func $internal1202)) (import "env" "longname1203" (func $internal1203)) (import "env" "longname1204" (func $internal1204)) (import "env" "longname1205" (func $internal1205)) (import "env" "longname1206" (func $internal1206)) (import "env" "longname1207" (func $internal1207)) (import "env" "longname1208" (func $internal1208)) (import "env" "longname1209" (func $internal1209)) (import "env" "longname1210" (func $internal1210)) (import "env" "longname1211" (func $internal1211)) (import "env" "longname1212" (func $internal1212)) (import "env" "longname1213" (func $internal1213)) (import "env" "longname1214" (func $internal1214)) (import "env" "longname1215" (func $internal1215)) (import "env" "longname1216" (func $internal1216)) (import "env" "longname1217" (func $internal1217)) (import "env" "longname1218" (func $internal1218)) (import "env" "longname1219" (func $internal1219)) (import "env" "longname1220" (func $internal1220)) (import "env" "longname1221" (func $internal1221)) (import "env" "longname1222" (func $internal1222)) (import "env" "longname1223" (func $internal1223)) (import "env" "longname1224" (func $internal1224)) (import "env" "longname1225" (func $internal1225)) (import "env" "longname1226" (func $internal1226)) (import "env" "longname1227" (func $internal1227)) (import "env" "longname1228" (func $internal1228)) (import "env" "longname1229" (func $internal1229)) (import "env" "longname1230" (func $internal1230)) (import "env" "longname1231" (func $internal1231)) (import "env" "longname1232" (func $internal1232)) (import "env" "longname1233" (func $internal1233)) (import "env" "longname1234" (func $internal1234)) (import "env" "longname1235" (func $internal1235)) (import "env" "longname1236" (func $internal1236)) (import "env" "longname1237" (func $internal1237)) (import "env" "longname1238" (func $internal1238)) (import "env" "longname1239" (func $internal1239)) (import "env" "longname1240" (func $internal1240)) (import "env" "longname1241" (func $internal1241)) (import "env" "longname1242" (func $internal1242)) (import "env" "longname1243" (func $internal1243)) (import "env" "longname1244" (func $internal1244)) (import "env" "longname1245" (func $internal1245)) (import "env" "longname1246" (func $internal1246)) (import "env" "longname1247" (func $internal1247)) (import "env" "longname1248" (func $internal1248)) (import "env" "longname1249" (func $internal1249)) (import "env" "longname1250" (func $internal1250)) (import "env" "longname1251" (func $internal1251)) (import "env" "longname1252" (func $internal1252)) (import "env" "longname1253" (func $internal1253)) (import "env" "longname1254" (func $internal1254)) (import "env" "longname1255" (func $internal1255)) (import "env" "longname1256" (func $internal1256)) (import "env" "longname1257" (func $internal1257)) (import "env" "longname1258" (func $internal1258)) (import "env" "longname1259" (func $internal1259)) (import "env" "longname1260" (func $internal1260)) (import "env" "longname1261" (func $internal1261)) (import "env" "longname1262" (func $internal1262)) (import "env" "longname1263" (func $internal1263)) (import "env" "longname1264" (func $internal1264)) (import "env" "longname1265" (func $internal1265)) (import "env" "longname1266" (func $internal1266)) (import "env" "longname1267" (func $internal1267)) (import "env" "longname1268" (func $internal1268)) (import "env" "longname1269" (func $internal1269)) (import "env" "longname1270" (func $internal1270)) (import "env" "longname1271" (func $internal1271)) (import "env" "longname1272" (func $internal1272)) (import "env" "longname1273" (func $internal1273)) (import "env" "longname1274" (func $internal1274)) (import "env" "longname1275" (func $internal1275)) (import "env" "longname1276" (func $internal1276)) (import "env" "longname1277" (func $internal1277)) (import "env" "longname1278" (func $internal1278)) (import "env" "longname1279" (func $internal1279)) (import "env" "longname1280" (func $internal1280)) (import "env" "longname1281" (func $internal1281)) (import "env" "longname1282" (func $internal1282)) (import "env" "longname1283" (func $internal1283)) (import "env" "longname1284" (func $internal1284)) (import "env" "longname1285" (func $internal1285)) (import "env" "longname1286" (func $internal1286)) (import "env" "longname1287" (func $internal1287)) (import "env" "longname1288" (func $internal1288)) (import "env" "longname1289" (func $internal1289)) (import "env" "longname1290" (func $internal1290)) (import "env" "longname1291" (func $internal1291)) (import "env" "longname1292" (func $internal1292)) (import "env" "longname1293" (func $internal1293)) (import "env" "longname1294" (func $internal1294)) (import "env" "longname1295" (func $internal1295)) (import "env" "longname1296" (func $internal1296)) (import "env" "longname1297" (func $internal1297)) (import "env" "longname1298" (func $internal1298)) (import "env" "longname1299" (func $internal1299)) (import "env" "longname1300" (func $internal1300)) (import "env" "longname1301" (func $internal1301)) (import "env" "longname1302" (func $internal1302)) (import "env" "longname1303" (func $internal1303)) (import "env" "longname1304" (func $internal1304)) (import "env" "longname1305" (func $internal1305)) (import "env" "longname1306" (func $internal1306)) (import "env" "longname1307" (func $internal1307)) (import "env" "longname1308" (func $internal1308)) (import "env" "longname1309" (func $internal1309)) (import "env" "longname1310" (func $internal1310)) (import "env" "longname1311" (func $internal1311)) (import "env" "longname1312" (func $internal1312)) (import "env" "longname1313" (func $internal1313)) (import "env" "longname1314" (func $internal1314)) (import "env" "longname1315" (func $internal1315)) (import "env" "longname1316" (func $internal1316)) (import "env" "longname1317" (func $internal1317)) (import "env" "longname1318" (func $internal1318)) (import "env" "longname1319" (func $internal1319)) (import "env" "longname1320" (func $internal1320)) (import "env" "longname1321" (func $internal1321)) (import "env" "longname1322" (func $internal1322)) (import "env" "longname1323" (func $internal1323)) (import "env" "longname1324" (func $internal1324)) (import "env" "longname1325" (func $internal1325)) (import "env" "longname1326" (func $internal1326)) (import "env" "longname1327" (func $internal1327)) (import "env" "longname1328" (func $internal1328)) (import "env" "longname1329" (func $internal1329)) (import "env" "longname1330" (func $internal1330)) (import "env" "longname1331" (func $internal1331)) (import "env" "longname1332" (func $internal1332)) (import "env" "longname1333" (func $internal1333)) (import "env" "longname1334" (func $internal1334)) (import "env" "longname1335" (func $internal1335)) (import "env" "longname1336" (func $internal1336)) (import "env" "longname1337" (func $internal1337)) (import "env" "longname1338" (func $internal1338)) (import "env" "longname1339" (func $internal1339)) (import "env" "longname1340" (func $internal1340)) (import "env" "longname1341" (func $internal1341)) (import "env" "longname1342" (func $internal1342)) (import "env" "longname1343" (func $internal1343)) (import "env" "longname1344" (func $internal1344)) (import "env" "longname1345" (func $internal1345)) (import "env" "longname1346" (func $internal1346)) (import "env" "longname1347" (func $internal1347)) (import "env" "longname1348" (func $internal1348)) (import "env" "longname1349" (func $internal1349)) (import "env" "longname1350" (func $internal1350)) (import "env" "longname1351" (func $internal1351)) (import "env" "longname1352" (func $internal1352)) (import "env" "longname1353" (func $internal1353)) (import "env" "longname1354" (func $internal1354)) (import "env" "longname1355" (func $internal1355)) (import "env" "longname1356" (func $internal1356)) (import "env" "longname1357" (func $internal1357)) (import "env" "longname1358" (func $internal1358)) (import "env" "longname1359" (func $internal1359)) (import "env" "longname1360" (func $internal1360)) (import "env" "longname1361" (func $internal1361)) (import "env" "longname1362" (func $internal1362)) (import "env" "longname1363" (func $internal1363)) (import "env" "longname1364" (func $internal1364)) (import "env" "longname1365" (func $internal1365)) (import "env" "longname1366" (func $internal1366)) (import "env" "longname1367" (func $internal1367)) (import "env" "longname1368" (func $internal1368)) (import "env" "longname1369" (func $internal1369)) (import "env" "longname1370" (func $internal1370)) (import "env" "longname1371" (func $internal1371)) (import "env" "longname1372" (func $internal1372)) (import "env" "longname1373" (func $internal1373)) (import "env" "longname1374" (func $internal1374)) (import "env" "longname1375" (func $internal1375)) (import "env" "longname1376" (func $internal1376)) (import "env" "longname1377" (func $internal1377)) (import "env" "longname1378" (func $internal1378)) (import "env" "longname1379" (func $internal1379)) (import "env" "longname1380" (func $internal1380)) (import "env" "longname1381" (func $internal1381)) (import "env" "longname1382" (func $internal1382)) (import "env" "longname1383" (func $internal1383)) (import "env" "longname1384" (func $internal1384)) (import "env" "longname1385" (func $internal1385)) (import "env" "longname1386" (func $internal1386)) (import "env" "longname1387" (func $internal1387)) (import "env" "longname1388" (func $internal1388)) (import "env" "longname1389" (func $internal1389)) (import "env" "longname1390" (func $internal1390)) (import "env" "longname1391" (func $internal1391)) (import "env" "longname1392" (func $internal1392)) (import "env" "longname1393" (func $internal1393)) (import "env" "longname1394" (func $internal1394)) (import "env" "longname1395" (func $internal1395)) (import "env" "longname1396" (func $internal1396)) (import "env" "longname1397" (func $internal1397)) (import "env" "longname1398" (func $internal1398)) (import "env" "longname1399" (func $internal1399)) (import "env" "longname1400" (func $internal1400)) (import "env" "longname1401" (func $internal1401)) (import "env" "longname1402" (func $internal1402)) (import "env" "longname1403" (func $internal1403)) (import "env" "longname1404" (func $internal1404)) (import "env" "longname1405" (func $internal1405)) (import "env" "longname1406" (func $internal1406)) (import "env" "longname1407" (func $internal1407)) (import "env" "longname1408" (func $internal1408)) (import "env" "longname1409" (func $internal1409)) (import "env" "longname1410" (func $internal1410)) (import "env" "longname1411" (func $internal1411)) (import "env" "longname1412" (func $internal1412)) (import "env" "longname1413" (func $internal1413)) (import "env" "longname1414" (func $internal1414)) (import "env" "longname1415" (func $internal1415)) (import "env" "longname1416" (func $internal1416)) (import "env" "longname1417" (func $internal1417)) (import "env" "longname1418" (func $internal1418)) (import "env" "longname1419" (func $internal1419)) (import "env" "longname1420" (func $internal1420)) (import "env" "longname1421" (func $internal1421)) (import "env" "longname1422" (func $internal1422)) (import "env" "longname1423" (func $internal1423)) (import "env" "longname1424" (func $internal1424)) (import "env" "longname1425" (func $internal1425)) (import "env" "longname1426" (func $internal1426)) (import "env" "longname1427" (func $internal1427)) (import "env" "longname1428" (func $internal1428)) (import "env" "longname1429" (func $internal1429)) (import "env" "longname1430" (func $internal1430)) (import "env" "longname1431" (func $internal1431)) (import "env" "longname1432" (func $internal1432)) (import "env" "longname1433" (func $internal1433)) (import "env" "longname1434" (func $internal1434)) (import "env" "longname1435" (func $internal1435)) (import "env" "longname1436" (func $internal1436)) (import "env" "longname1437" (func $internal1437)) (import "env" "longname1438" (func $internal1438)) (import "env" "longname1439" (func $internal1439)) (import "env" "longname1440" (func $internal1440)) (import "env" "longname1441" (func $internal1441)) (import "env" "longname1442" (func $internal1442)) (import "env" "longname1443" (func $internal1443)) (import "env" "longname1444" (func $internal1444)) (import "env" "longname1445" (func $internal1445)) (import "env" "longname1446" (func $internal1446)) (import "env" "longname1447" (func $internal1447)) (import "env" "longname1448" (func $internal1448)) (import "env" "longname1449" (func $internal1449)) (import "env" "longname1450" (func $internal1450)) (import "env" "longname1451" (func $internal1451)) (import "env" "longname1452" (func $internal1452)) (import "env" "longname1453" (func $internal1453)) (import "env" "longname1454" (func $internal1454)) (import "env" "longname1455" (func $internal1455)) (import "env" "longname1456" (func $internal1456)) (import "env" "longname1457" (func $internal1457)) (import "env" "longname1458" (func $internal1458)) (import "env" "longname1459" (func $internal1459)) (import "env" "longname1460" (func $internal1460)) (import "env" "longname1461" (func $internal1461)) (import "env" "longname1462" (func $internal1462)) (import "env" "longname1463" (func $internal1463)) (import "env" "longname1464" (func $internal1464)) (import "env" "longname1465" (func $internal1465)) (import "env" "longname1466" (func $internal1466)) (import "env" "longname1467" (func $internal1467)) (import "env" "longname1468" (func $internal1468)) (import "env" "longname1469" (func $internal1469)) (import "env" "longname1470" (func $internal1470)) (import "env" "longname1471" (func $internal1471)) (import "env" "longname1472" (func $internal1472)) (import "env" "longname1473" (func $internal1473)) (import "env" "longname1474" (func $internal1474)) (import "env" "longname1475" (func $internal1475)) (import "env" "longname1476" (func $internal1476)) (import "env" "longname1477" (func $internal1477)) (import "env" "longname1478" (func $internal1478)) (import "env" "longname1479" (func $internal1479)) (import "env" "longname1480" (func $internal1480)) (import "env" "longname1481" (func $internal1481)) (import "env" "longname1482" (func $internal1482)) (import "env" "longname1483" (func $internal1483)) (import "env" "longname1484" (func $internal1484)) (import "env" "longname1485" (func $internal1485)) (import "env" "longname1486" (func $internal1486)) (import "env" "longname1487" (func $internal1487)) (import "env" "longname1488" (func $internal1488)) (import "env" "longname1489" (func $internal1489)) (import "env" "longname1490" (func $internal1490)) (import "env" "longname1491" (func $internal1491)) (import "env" "longname1492" (func $internal1492)) (import "env" "longname1493" (func $internal1493)) (import "env" "longname1494" (func $internal1494)) (import "env" "longname1495" (func $internal1495)) (import "env" "longname1496" (func $internal1496)) (import "env" "longname1497" (func $internal1497)) (import "env" "longname1498" (func $internal1498)) (import "env" "longname1499" (func $internal1499)) (import "env" "longname1500" (func $internal1500)) (import "env" "longname1501" (func $internal1501)) (import "env" "longname1502" (func $internal1502)) (import "env" "longname1503" (func $internal1503)) (import "env" "longname1504" (func $internal1504)) (import "env" "longname1505" (func $internal1505)) (import "env" "longname1506" (func $internal1506)) (import "env" "longname1507" (func $internal1507)) (import "env" "longname1508" (func $internal1508)) (import "env" "longname1509" (func $internal1509)) (import "env" "longname1510" (func $internal1510)) (import "env" "longname1511" (func $internal1511)) (import "env" "longname1512" (func $internal1512)) (import "env" "longname1513" (func $internal1513)) (import "env" "longname1514" (func $internal1514)) (import "env" "longname1515" (func $internal1515)) (import "env" "longname1516" (func $internal1516)) (import "env" "longname1517" (func $internal1517)) (import "env" "longname1518" (func $internal1518)) (import "env" "longname1519" (func $internal1519)) (import "env" "longname1520" (func $internal1520)) (import "env" "longname1521" (func $internal1521)) (import "env" "longname1522" (func $internal1522)) (import "env" "longname1523" (func $internal1523)) (import "env" "longname1524" (func $internal1524)) (import "env" "longname1525" (func $internal1525)) (import "env" "longname1526" (func $internal1526)) (import "env" "longname1527" (func $internal1527)) (import "env" "longname1528" (func $internal1528)) (import "env" "longname1529" (func $internal1529)) (import "env" "longname1530" (func $internal1530)) (import "env" "longname1531" (func $internal1531)) (import "env" "longname1532" (func $internal1532)) (import "env" "longname1533" (func $internal1533)) (import "env" "longname1534" (func $internal1534)) (import "env" "longname1535" (func $internal1535)) (import "env" "longname1536" (func $internal1536)) (import "env" "longname1537" (func $internal1537)) (import "env" "longname1538" (func $internal1538)) (import "env" "longname1539" (func $internal1539)) (import "env" "longname1540" (func $internal1540)) (import "env" "longname1541" (func $internal1541)) (import "env" "longname1542" (func $internal1542)) (import "env" "longname1543" (func $internal1543)) (import "env" "longname1544" (func $internal1544)) (import "env" "longname1545" (func $internal1545)) (import "env" "longname1546" (func $internal1546)) (import "env" "longname1547" (func $internal1547)) (import "env" "longname1548" (func $internal1548)) (import "env" "longname1549" (func $internal1549)) (import "env" "longname1550" (func $internal1550)) (import "env" "longname1551" (func $internal1551)) (import "env" "longname1552" (func $internal1552)) (import "env" "longname1553" (func $internal1553)) (import "env" "longname1554" (func $internal1554)) (import "env" "longname1555" (func $internal1555)) (import "env" "longname1556" (func $internal1556)) (import "env" "longname1557" (func $internal1557)) (import "env" "longname1558" (func $internal1558)) (import "env" "longname1559" (func $internal1559)) (import "env" "longname1560" (func $internal1560)) (import "env" "longname1561" (func $internal1561)) (import "env" "longname1562" (func $internal1562)) (import "env" "longname1563" (func $internal1563)) (import "env" "longname1564" (func $internal1564)) (import "env" "longname1565" (func $internal1565)) (import "env" "longname1566" (func $internal1566)) (import "env" "longname1567" (func $internal1567)) (import "env" "longname1568" (func $internal1568)) (import "env" "longname1569" (func $internal1569)) (import "env" "longname1570" (func $internal1570)) (import "env" "longname1571" (func $internal1571)) (import "env" "longname1572" (func $internal1572)) (import "env" "longname1573" (func $internal1573)) (import "env" "longname1574" (func $internal1574)) (import "env" "longname1575" (func $internal1575)) (import "env" "longname1576" (func $internal1576)) (import "env" "longname1577" (func $internal1577)) (import "env" "longname1578" (func $internal1578)) (import "env" "longname1579" (func $internal1579)) (import "env" "longname1580" (func $internal1580)) (import "env" "longname1581" (func $internal1581)) (import "env" "longname1582" (func $internal1582)) (import "env" "longname1583" (func $internal1583)) (import "env" "longname1584" (func $internal1584)) (import "env" "longname1585" (func $internal1585)) (import "env" "longname1586" (func $internal1586)) (import "env" "longname1587" (func $internal1587)) (import "env" "longname1588" (func $internal1588)) (import "env" "longname1589" (func $internal1589)) (import "env" "longname1590" (func $internal1590)) (import "env" "longname1591" (func $internal1591)) (import "env" "longname1592" (func $internal1592)) (import "env" "longname1593" (func $internal1593)) (import "env" "longname1594" (func $internal1594)) (import "env" "longname1595" (func $internal1595)) (import "env" "longname1596" (func $internal1596)) (import "env" "longname1597" (func $internal1597)) (import "env" "longname1598" (func $internal1598)) (import "env" "longname1599" (func $internal1599)) (import "env" "longname1600" (func $internal1600)) (import "env" "longname1601" (func $internal1601)) (import "env" "longname1602" (func $internal1602)) (import "env" "longname1603" (func $internal1603)) (import "env" "longname1604" (func $internal1604)) (import "env" "longname1605" (func $internal1605)) (import "env" "longname1606" (func $internal1606)) (import "env" "longname1607" (func $internal1607)) (import "env" "longname1608" (func $internal1608)) (import "env" "longname1609" (func $internal1609)) (import "env" "longname1610" (func $internal1610)) (import "env" "longname1611" (func $internal1611)) (import "env" "longname1612" (func $internal1612)) (import "env" "longname1613" (func $internal1613)) (import "env" "longname1614" (func $internal1614)) (import "env" "longname1615" (func $internal1615)) (import "env" "longname1616" (func $internal1616)) (import "env" "longname1617" (func $internal1617)) (import "env" "longname1618" (func $internal1618)) (import "env" "longname1619" (func $internal1619)) (import "env" "longname1620" (func $internal1620)) (import "env" "longname1621" (func $internal1621)) (import "env" "longname1622" (func $internal1622)) (import "env" "longname1623" (func $internal1623)) (import "env" "longname1624" (func $internal1624)) (import "env" "longname1625" (func $internal1625)) (import "env" "longname1626" (func $internal1626)) (import "env" "longname1627" (func $internal1627)) (import "env" "longname1628" (func $internal1628)) (import "env" "longname1629" (func $internal1629)) (import "env" "longname1630" (func $internal1630)) (import "env" "longname1631" (func $internal1631)) (import "env" "longname1632" (func $internal1632)) (import "env" "longname1633" (func $internal1633)) (import "env" "longname1634" (func $internal1634)) (import "env" "longname1635" (func $internal1635)) (import "env" "longname1636" (func $internal1636)) (import "env" "longname1637" (func $internal1637)) (import "env" "longname1638" (func $internal1638)) (import "env" "longname1639" (func $internal1639)) (import "env" "longname1640" (func $internal1640)) (import "env" "longname1641" (func $internal1641)) (import "env" "longname1642" (func $internal1642)) (import "env" "longname1643" (func $internal1643)) (import "env" "longname1644" (func $internal1644)) (import "env" "longname1645" (func $internal1645)) (import "env" "longname1646" (func $internal1646)) (import "env" "longname1647" (func $internal1647)) (import "env" "longname1648" (func $internal1648)) (import "env" "longname1649" (func $internal1649)) (import "env" "longname1650" (func $internal1650)) (import "env" "longname1651" (func $internal1651)) (import "env" "longname1652" (func $internal1652)) (import "env" "longname1653" (func $internal1653)) (import "env" "longname1654" (func $internal1654)) (import "env" "longname1655" (func $internal1655)) (import "env" "longname1656" (func $internal1656)) (import "env" "longname1657" (func $internal1657)) (import "env" "longname1658" (func $internal1658)) (import "env" "longname1659" (func $internal1659)) (import "env" "longname1660" (func $internal1660)) (import "env" "longname1661" (func $internal1661)) (import "env" "longname1662" (func $internal1662)) (import "env" "longname1663" (func $internal1663)) (import "env" "longname1664" (func $internal1664)) (import "env" "longname1665" (func $internal1665)) (import "env" "longname1666" (func $internal1666)) (import "env" "longname1667" (func $internal1667)) (import "env" "longname1668" (func $internal1668)) (import "env" "longname1669" (func $internal1669)) (import "env" "longname1670" (func $internal1670)) (import "env" "longname1671" (func $internal1671)) (import "env" "longname1672" (func $internal1672)) (import "env" "longname1673" (func $internal1673)) (import "env" "longname1674" (func $internal1674)) (import "env" "longname1675" (func $internal1675)) (import "env" "longname1676" (func $internal1676)) (import "env" "longname1677" (func $internal1677)) (import "env" "longname1678" (func $internal1678)) (import "env" "longname1679" (func $internal1679)) (import "env" "longname1680" (func $internal1680)) (import "env" "longname1681" (func $internal1681)) (import "env" "longname1682" (func $internal1682)) (import "env" "longname1683" (func $internal1683)) (import "env" "longname1684" (func $internal1684)) (import "env" "longname1685" (func $internal1685)) (import "env" "longname1686" (func $internal1686)) (import "env" "longname1687" (func $internal1687)) (import "env" "longname1688" (func $internal1688)) (import "env" "longname1689" (func $internal1689)) (import "env" "longname1690" (func $internal1690)) (import "env" "longname1691" (func $internal1691)) (import "env" "longname1692" (func $internal1692)) (import "env" "longname1693" (func $internal1693)) (import "env" "longname1694" (func $internal1694)) (import "env" "longname1695" (func $internal1695)) (import "env" "longname1696" (func $internal1696)) (import "env" "longname1697" (func $internal1697)) (import "env" "longname1698" (func $internal1698)) (import "env" "longname1699" (func $internal1699)) (import "env" "longname1700" (func $internal1700)) (import "env" "longname1701" (func $internal1701)) (import "env" "longname1702" (func $internal1702)) (import "env" "longname1703" (func $internal1703)) (import "env" "longname1704" (func $internal1704)) (import "env" "longname1705" (func $internal1705)) (import "env" "longname1706" (func $internal1706)) (import "env" "longname1707" (func $internal1707)) (import "env" "longname1708" (func $internal1708)) (import "env" "longname1709" (func $internal1709)) (import "env" "longname1710" (func $internal1710)) (import "env" "longname1711" (func $internal1711)) (import "env" "longname1712" (func $internal1712)) (import "env" "longname1713" (func $internal1713)) (import "env" "longname1714" (func $internal1714)) (import "env" "longname1715" (func $internal1715)) (import "env" "longname1716" (func $internal1716)) (import "env" "longname1717" (func $internal1717)) (import "env" "longname1718" (func $internal1718)) (import "env" "longname1719" (func $internal1719)) (import "env" "longname1720" (func $internal1720)) (import "env" "longname1721" (func $internal1721)) (import "env" "longname1722" (func $internal1722)) (import "env" "longname1723" (func $internal1723)) (import "env" "longname1724" (func $internal1724)) (import "env" "longname1725" (func $internal1725)) (import "env" "longname1726" (func $internal1726)) (import "env" "longname1727" (func $internal1727)) (import "env" "longname1728" (func $internal1728)) (import "env" "longname1729" (func $internal1729)) (import "env" "longname1730" (func $internal1730)) (import "env" "longname1731" (func $internal1731)) (import "env" "longname1732" (func $internal1732)) (import "env" "longname1733" (func $internal1733)) (import "env" "longname1734" (func $internal1734)) (import "env" "longname1735" (func $internal1735)) (import "env" "longname1736" (func $internal1736)) (import "env" "longname1737" (func $internal1737)) (import "env" "longname1738" (func $internal1738)) (import "env" "longname1739" (func $internal1739)) (import "env" "longname1740" (func $internal1740)) (import "env" "longname1741" (func $internal1741)) (import "env" "longname1742" (func $internal1742)) (import "env" "longname1743" (func $internal1743)) (import "env" "longname1744" (func $internal1744)) (import "env" "longname1745" (func $internal1745)) (import "env" "longname1746" (func $internal1746)) (import "env" "longname1747" (func $internal1747)) (import "env" "longname1748" (func $internal1748)) (import "env" "longname1749" (func $internal1749)) (import "env" "longname1750" (func $internal1750)) (import "env" "longname1751" (func $internal1751)) (import "env" "longname1752" (func $internal1752)) (import "env" "longname1753" (func $internal1753)) (import "env" "longname1754" (func $internal1754)) (import "env" "longname1755" (func $internal1755)) (import "env" "longname1756" (func $internal1756)) (import "env" "longname1757" (func $internal1757)) (import "env" "longname1758" (func $internal1758)) (import "env" "longname1759" (func $internal1759)) (import "env" "longname1760" (func $internal1760)) (import "env" "longname1761" (func $internal1761)) (import "env" "longname1762" (func $internal1762)) (import "env" "longname1763" (func $internal1763)) (import "env" "longname1764" (func $internal1764)) (import "env" "longname1765" (func $internal1765)) (import "env" "longname1766" (func $internal1766)) (import "env" "longname1767" (func $internal1767)) (import "env" "longname1768" (func $internal1768)) (import "env" "longname1769" (func $internal1769)) (import "env" "longname1770" (func $internal1770)) (import "env" "longname1771" (func $internal1771)) (import "env" "longname1772" (func $internal1772)) (import "env" "longname1773" (func $internal1773)) (import "env" "longname1774" (func $internal1774)) (import "env" "longname1775" (func $internal1775)) (import "env" "longname1776" (func $internal1776)) (import "env" "longname1777" (func $internal1777)) (import "env" "longname1778" (func $internal1778)) (import "env" "longname1779" (func $internal1779)) (import "env" "longname1780" (func $internal1780)) (import "env" "longname1781" (func $internal1781)) (import "env" "longname1782" (func $internal1782)) (import "env" "longname1783" (func $internal1783)) (import "env" "longname1784" (func $internal1784)) (import "env" "longname1785" (func $internal1785)) (import "env" "longname1786" (func $internal1786)) (import "env" "longname1787" (func $internal1787)) (import "env" "longname1788" (func $internal1788)) (import "env" "longname1789" (func $internal1789)) (import "env" "longname1790" (func $internal1790)) (import "env" "longname1791" (func $internal1791)) (import "env" "longname1792" (func $internal1792)) (import "env" "longname1793" (func $internal1793)) (import "env" "longname1794" (func $internal1794)) (import "env" "longname1795" (func $internal1795)) (import "env" "longname1796" (func $internal1796)) (import "env" "longname1797" (func $internal1797)) (import "env" "longname1798" (func $internal1798)) (import "env" "longname1799" (func $internal1799)) (import "env" "longname1800" (func $internal1800)) (import "env" "longname1801" (func $internal1801)) (import "env" "longname1802" (func $internal1802)) (import "env" "longname1803" (func $internal1803)) (import "env" "longname1804" (func $internal1804)) (import "env" "longname1805" (func $internal1805)) (import "env" "longname1806" (func $internal1806)) (import "env" "longname1807" (func $internal1807)) (import "env" "longname1808" (func $internal1808)) (import "env" "longname1809" (func $internal1809)) (import "env" "longname1810" (func $internal1810)) (import "env" "longname1811" (func $internal1811)) (import "env" "longname1812" (func $internal1812)) (import "env" "longname1813" (func $internal1813)) (import "env" "longname1814" (func $internal1814)) (import "env" "longname1815" (func $internal1815)) (import "env" "longname1816" (func $internal1816)) (import "env" "longname1817" (func $internal1817)) (import "env" "longname1818" (func $internal1818)) (import "env" "longname1819" (func $internal1819)) (import "env" "longname1820" (func $internal1820)) (import "env" "longname1821" (func $internal1821)) (import "env" "longname1822" (func $internal1822)) (import "env" "longname1823" (func $internal1823)) (import "env" "longname1824" (func $internal1824)) (import "env" "longname1825" (func $internal1825)) (import "env" "longname1826" (func $internal1826)) (import "env" "longname1827" (func $internal1827)) (import "env" "longname1828" (func $internal1828)) (import "env" "longname1829" (func $internal1829)) (import "env" "longname1830" (func $internal1830)) (import "env" "longname1831" (func $internal1831)) (import "env" "longname1832" (func $internal1832)) (import "env" "longname1833" (func $internal1833)) (import "env" "longname1834" (func $internal1834)) (import "env" "longname1835" (func $internal1835)) (import "env" "longname1836" (func $internal1836)) (import "env" "longname1837" (func $internal1837)) (import "env" "longname1838" (func $internal1838)) (import "env" "longname1839" (func $internal1839)) (import "env" "longname1840" (func $internal1840)) (import "env" "longname1841" (func $internal1841)) (import "env" "longname1842" (func $internal1842)) (import "env" "longname1843" (func $internal1843)) (import "env" "longname1844" (func $internal1844)) (import "env" "longname1845" (func $internal1845)) (import "env" "longname1846" (func $internal1846)) (import "env" "longname1847" (func $internal1847)) (import "env" "longname1848" (func $internal1848)) (import "env" "longname1849" (func $internal1849)) (import "env" "longname1850" (func $internal1850)) (import "env" "longname1851" (func $internal1851)) (import "env" "longname1852" (func $internal1852)) (import "env" "longname1853" (func $internal1853)) (import "env" "longname1854" (func $internal1854)) (import "env" "longname1855" (func $internal1855)) (import "env" "longname1856" (func $internal1856)) (import "env" "longname1857" (func $internal1857)) (import "env" "longname1858" (func $internal1858)) (import "env" "longname1859" (func $internal1859)) (import "env" "longname1860" (func $internal1860)) (import "env" "longname1861" (func $internal1861)) (import "env" "longname1862" (func $internal1862)) (import "env" "longname1863" (func $internal1863)) (import "env" "longname1864" (func $internal1864)) (import "env" "longname1865" (func $internal1865)) (import "env" "longname1866" (func $internal1866)) (import "env" "longname1867" (func $internal1867)) (import "env" "longname1868" (func $internal1868)) (import "env" "longname1869" (func $internal1869)) (import "env" "longname1870" (func $internal1870)) (import "env" "longname1871" (func $internal1871)) (import "env" "longname1872" (func $internal1872)) (import "env" "longname1873" (func $internal1873)) (import "env" "longname1874" (func $internal1874)) (import "env" "longname1875" (func $internal1875)) (import "env" "longname1876" (func $internal1876)) (import "env" "longname1877" (func $internal1877)) (import "env" "longname1878" (func $internal1878)) (import "env" "longname1879" (func $internal1879)) (import "env" "longname1880" (func $internal1880)) (import "env" "longname1881" (func $internal1881)) (import "env" "longname1882" (func $internal1882)) (import "env" "longname1883" (func $internal1883)) (import "env" "longname1884" (func $internal1884)) (import "env" "longname1885" (func $internal1885)) (import "env" "longname1886" (func $internal1886)) (import "env" "longname1887" (func $internal1887)) (import "env" "longname1888" (func $internal1888)) (import "env" "longname1889" (func $internal1889)) (import "env" "longname1890" (func $internal1890)) (import "env" "longname1891" (func $internal1891)) (import "env" "longname1892" (func $internal1892)) (import "env" "longname1893" (func $internal1893)) (import "env" "longname1894" (func $internal1894)) (import "env" "longname1895" (func $internal1895)) (import "env" "longname1896" (func $internal1896)) (import "env" "longname1897" (func $internal1897)) (import "env" "longname1898" (func $internal1898)) (import "env" "longname1899" (func $internal1899)) (import "env" "longname1900" (func $internal1900)) (import "env" "longname1901" (func $internal1901)) (import "env" "longname1902" (func $internal1902)) (import "env" "longname1903" (func $internal1903)) (import "env" "longname1904" (func $internal1904)) (import "env" "longname1905" (func $internal1905)) (import "env" "longname1906" (func $internal1906)) (import "env" "longname1907" (func $internal1907)) (import "env" "longname1908" (func $internal1908)) (import "env" "longname1909" (func $internal1909)) (import "env" "longname1910" (func $internal1910)) (import "env" "longname1911" (func $internal1911)) (import "env" "longname1912" (func $internal1912)) (import "env" "longname1913" (func $internal1913)) (import "env" "longname1914" (func $internal1914)) (import "env" "longname1915" (func $internal1915)) (import "env" "longname1916" (func $internal1916)) (import "env" "longname1917" (func $internal1917)) (import "env" "longname1918" (func $internal1918)) (import "env" "longname1919" (func $internal1919)) (import "env" "longname1920" (func $internal1920)) (import "env" "longname1921" (func $internal1921)) (import "env" "longname1922" (func $internal1922)) (import "env" "longname1923" (func $internal1923)) (import "env" "longname1924" (func $internal1924)) (import "env" "longname1925" (func $internal1925)) (import "env" "longname1926" (func $internal1926)) (import "env" "longname1927" (func $internal1927)) (import "env" "longname1928" (func $internal1928)) (import "env" "longname1929" (func $internal1929)) (import "env" "longname1930" (func $internal1930)) (import "env" "longname1931" (func $internal1931)) (import "env" "longname1932" (func $internal1932)) (import "env" "longname1933" (func $internal1933)) (import "env" "longname1934" (func $internal1934)) (import "env" "longname1935" (func $internal1935)) (import "env" "longname1936" (func $internal1936)) (import "env" "longname1937" (func $internal1937)) (import "env" "longname1938" (func $internal1938)) (import "env" "longname1939" (func $internal1939)) (import "env" "longname1940" (func $internal1940)) (import "env" "longname1941" (func $internal1941)) (import "env" "longname1942" (func $internal1942)) (import "env" "longname1943" (func $internal1943)) (import "env" "longname1944" (func $internal1944)) (import "env" "longname1945" (func $internal1945)) (import "env" "longname1946" (func $internal1946)) (import "env" "longname1947" (func $internal1947)) (import "env" "longname1948" (func $internal1948)) (import "env" "longname1949" (func $internal1949)) (import "env" "longname1950" (func $internal1950)) (import "env" "longname1951" (func $internal1951)) (import "env" "longname1952" (func $internal1952)) (import "env" "longname1953" (func $internal1953)) (import "env" "longname1954" (func $internal1954)) (import "env" "longname1955" (func $internal1955)) (import "env" "longname1956" (func $internal1956)) (import "env" "longname1957" (func $internal1957)) (import "env" "longname1958" (func $internal1958)) (import "env" "longname1959" (func $internal1959)) (import "env" "longname1960" (func $internal1960)) (import "env" "longname1961" (func $internal1961)) (import "env" "longname1962" (func $internal1962)) (import "env" "longname1963" (func $internal1963)) (import "env" "longname1964" (func $internal1964)) (import "env" "longname1965" (func $internal1965)) (import "env" "longname1966" (func $internal1966)) (import "env" "longname1967" (func $internal1967)) (import "env" "longname1968" (func $internal1968)) (import "env" "longname1969" (func $internal1969)) (import "env" "longname1970" (func $internal1970)) (import "env" "longname1971" (func $internal1971)) (import "env" "longname1972" (func $internal1972)) (import "env" "longname1973" (func $internal1973)) (import "env" "longname1974" (func $internal1974)) (import "env" "longname1975" (func $internal1975)) (import "env" "longname1976" (func $internal1976)) (import "env" "longname1977" (func $internal1977)) (import "env" "longname1978" (func $internal1978)) (import "env" "longname1979" (func $internal1979)) (import "env" "longname1980" (func $internal1980)) (import "env" "longname1981" (func $internal1981)) (import "env" "longname1982" (func $internal1982)) (import "env" "longname1983" (func $internal1983)) (import "env" "longname1984" (func $internal1984)) (import "env" "longname1985" (func $internal1985)) (import "env" "longname1986" (func $internal1986)) (import "env" "longname1987" (func $internal1987)) (import "env" "longname1988" (func $internal1988)) (import "env" "longname1989" (func $internal1989)) (import "env" "longname1990" (func $internal1990)) (import "env" "longname1991" (func $internal1991)) (import "env" "longname1992" (func $internal1992)) (import "env" "longname1993" (func $internal1993)) (import "env" "longname1994" (func $internal1994)) (import "env" "longname1995" (func $internal1995)) (import "env" "longname1996" (func $internal1996)) (import "env" "longname1997" (func $internal1997)) (import "env" "longname1998" (func $internal1998)) (import "env" "longname1999" (func $internal1999)) (import "env" "longname2000" (func $internal2000)) (import "env" "longname2001" (func $internal2001)) (import "env" "longname2002" (func $internal2002)) (import "env" "longname2003" (func $internal2003)) (import "env" "longname2004" (func $internal2004)) (import "env" "longname2005" (func $internal2005)) (import "env" "longname2006" (func $internal2006)) (import "env" "longname2007" (func $internal2007)) (import "env" "longname2008" (func $internal2008)) (import "env" "longname2009" (func $internal2009)) (import "env" "longname2010" (func $internal2010)) (import "env" "longname2011" (func $internal2011)) (import "env" "longname2012" (func $internal2012)) (import "env" "longname2013" (func $internal2013)) (import "env" "longname2014" (func $internal2014)) (import "env" "longname2015" (func $internal2015)) (import "env" "longname2016" (func $internal2016)) (import "env" "longname2017" (func $internal2017)) (import "env" "longname2018" (func $internal2018)) (import "env" "longname2019" (func $internal2019)) (import "env" "longname2020" (func $internal2020)) (import "env" "longname2021" (func $internal2021)) (import "env" "longname2022" (func $internal2022)) (import "env" "longname2023" (func $internal2023)) (import "env" "longname2024" (func $internal2024)) (import "env" "longname2025" (func $internal2025)) (import "env" "longname2026" (func $internal2026)) (import "env" "longname2027" (func $internal2027)) (import "env" "longname2028" (func $internal2028)) (import "env" "longname2029" (func $internal2029)) (import "env" "longname2030" (func $internal2030)) (import "env" "longname2031" (func $internal2031)) (import "env" "longname2032" (func $internal2032)) (import "env" "longname2033" (func $internal2033)) (import "env" "longname2034" (func $internal2034)) (import "env" "longname2035" (func $internal2035)) (import "env" "longname2036" (func $internal2036)) (import "env" "longname2037" (func $internal2037)) (import "env" "longname2038" (func $internal2038)) (import "env" "longname2039" (func $internal2039)) (import "env" "longname2040" (func $internal2040)) (import "env" "longname2041" (func $internal2041)) (import "env" "longname2042" (func $internal2042)) (import "env" "longname2043" (func $internal2043)) (import "env" "longname2044" (func $internal2044)) (import "env" "longname2045" (func $internal2045)) (import "env" "longname2046" (func $internal2046)) (import "env" "longname2047" (func $internal2047)) (import "env" "longname2048" (func $internal2048)) (import "env" "longname2049" (func $internal2049)) (import "env" "longname2050" (func $internal2050)) (import "env" "longname2051" (func $internal2051)) (import "env" "longname2052" (func $internal2052)) (import "env" "longname2053" (func $internal2053)) (import "env" "longname2054" (func $internal2054)) (import "env" "longname2055" (func $internal2055)) (import "env" "longname2056" (func $internal2056)) (import "env" "longname2057" (func $internal2057)) (import "env" "longname2058" (func $internal2058)) (import "env" "longname2059" (func $internal2059)) (import "env" "longname2060" (func $internal2060)) (import "env" "longname2061" (func $internal2061)) (import "env" "longname2062" (func $internal2062)) (import "env" "longname2063" (func $internal2063)) (import "env" "longname2064" (func $internal2064)) (import "env" "longname2065" (func $internal2065)) (import "env" "longname2066" (func $internal2066)) (import "env" "longname2067" (func $internal2067)) (import "env" "longname2068" (func $internal2068)) (import "env" "longname2069" (func $internal2069)) (import "env" "longname2070" (func $internal2070)) (import "env" "longname2071" (func $internal2071)) (import "env" "longname2072" (func $internal2072)) (import "env" "longname2073" (func $internal2073)) (import "env" "longname2074" (func $internal2074)) (import "env" "longname2075" (func $internal2075)) (import "env" "longname2076" (func $internal2076)) (import "env" "longname2077" (func $internal2077)) (import "env" "longname2078" (func $internal2078)) (import "env" "longname2079" (func $internal2079)) (import "env" "longname2080" (func $internal2080)) (import "env" "longname2081" (func $internal2081)) (import "env" "longname2082" (func $internal2082)) (import "env" "longname2083" (func $internal2083)) (import "env" "longname2084" (func $internal2084)) (import "env" "longname2085" (func $internal2085)) (import "env" "longname2086" (func $internal2086)) (import "env" "longname2087" (func $internal2087)) (import "env" "longname2088" (func $internal2088)) (import "env" "longname2089" (func $internal2089)) (import "env" "longname2090" (func $internal2090)) (import "env" "longname2091" (func $internal2091)) (import "env" "longname2092" (func $internal2092)) (import "env" "longname2093" (func $internal2093)) (import "env" "longname2094" (func $internal2094)) (import "env" "longname2095" (func $internal2095)) (import "env" "longname2096" (func $internal2096)) (import "env" "longname2097" (func $internal2097)) (import "env" "longname2098" (func $internal2098)) (import "env" "longname2099" (func $internal2099)) (import "env" "longname2100" (func $internal2100)) (import "env" "longname2101" (func $internal2101)) (import "env" "longname2102" (func $internal2102)) (import "env" "longname2103" (func $internal2103)) (import "env" "longname2104" (func $internal2104)) (import "env" "longname2105" (func $internal2105)) (import "env" "longname2106" (func $internal2106)) (import "env" "longname2107" (func $internal2107)) (import "env" "longname2108" (func $internal2108)) (import "env" "longname2109" (func $internal2109)) (import "env" "longname2110" (func $internal2110)) (import "env" "longname2111" (func $internal2111)) (import "env" "longname2112" (func $internal2112)) (import "env" "longname2113" (func $internal2113)) (import "env" "longname2114" (func $internal2114)) (import "env" "longname2115" (func $internal2115)) (import "env" "longname2116" (func $internal2116)) (import "env" "longname2117" (func $internal2117)) (import "env" "longname2118" (func $internal2118)) (import "env" "longname2119" (func $internal2119)) (import "env" "longname2120" (func $internal2120)) (import "env" "longname2121" (func $internal2121)) (import "env" "longname2122" (func $internal2122)) (import "env" "longname2123" (func $internal2123)) (import "env" "longname2124" (func $internal2124)) (import "env" "longname2125" (func $internal2125)) (import "env" "longname2126" (func $internal2126)) (import "env" "longname2127" (func $internal2127)) (import "env" "longname2128" (func $internal2128)) (import "env" "longname2129" (func $internal2129)) (import "env" "longname2130" (func $internal2130)) (import "env" "longname2131" (func $internal2131)) (import "env" "longname2132" (func $internal2132)) (import "env" "longname2133" (func $internal2133)) (import "env" "longname2134" (func $internal2134)) (import "env" "longname2135" (func $internal2135)) (import "env" "longname2136" (func $internal2136)) (import "env" "longname2137" (func $internal2137)) (import "env" "longname2138" (func $internal2138)) (import "env" "longname2139" (func $internal2139)) (import "env" "longname2140" (func $internal2140)) (import "env" "longname2141" (func $internal2141)) (import "env" "longname2142" (func $internal2142)) (import "env" "longname2143" (func $internal2143)) (import "env" "longname2144" (func $internal2144)) (import "env" "longname2145" (func $internal2145)) (import "env" "longname2146" (func $internal2146)) (import "env" "longname2147" (func $internal2147)) (import "env" "longname2148" (func $internal2148)) (import "env" "longname2149" (func $internal2149)) (import "env" "longname2150" (func $internal2150)) (import "env" "longname2151" (func $internal2151)) (import "env" "longname2152" (func $internal2152)) (import "env" "longname2153" (func $internal2153)) (import "env" "longname2154" (func $internal2154)) (import "env" "longname2155" (func $internal2155)) (import "env" "longname2156" (func $internal2156)) (import "env" "longname2157" (func $internal2157)) (import "env" "longname2158" (func $internal2158)) (import "env" "longname2159" (func $internal2159)) (import "env" "longname2160" (func $internal2160)) (import "env" "longname2161" (func $internal2161)) (import "env" "longname2162" (func $internal2162)) (import "env" "longname2163" (func $internal2163)) (import "env" "longname2164" (func $internal2164)) (import "env" "longname2165" (func $internal2165)) (import "env" "longname2166" (func $internal2166)) (import "env" "longname2167" (func $internal2167)) (import "env" "longname2168" (func $internal2168)) (import "env" "longname2169" (func $internal2169)) (import "env" "longname2170" (func $internal2170)) (import "env" "longname2171" (func $internal2171)) (import "env" "longname2172" (func $internal2172)) (import "env" "longname2173" (func $internal2173)) (import "env" "longname2174" (func $internal2174)) (import "env" "longname2175" (func $internal2175)) (import "env" "longname2176" (func $internal2176)) (import "env" "longname2177" (func $internal2177)) (import "env" "longname2178" (func $internal2178)) (import "env" "longname2179" (func $internal2179)) (import "env" "longname2180" (func $internal2180)) (import "env" "longname2181" (func $internal2181)) (import "env" "longname2182" (func $internal2182)) (import "env" "longname2183" (func $internal2183)) (import "env" "longname2184" (func $internal2184)) (import "env" "longname2185" (func $internal2185)) (import "env" "longname2186" (func $internal2186)) (import "env" "longname2187" (func $internal2187)) (import "env" "longname2188" (func $internal2188)) (import "env" "longname2189" (func $internal2189)) (import "env" "longname2190" (func $internal2190)) (import "env" "longname2191" (func $internal2191)) (import "env" "longname2192" (func $internal2192)) (import "env" "longname2193" (func $internal2193)) (import "env" "longname2194" (func $internal2194)) (import "env" "longname2195" (func $internal2195)) (import "env" "longname2196" (func $internal2196)) (import "env" "longname2197" (func $internal2197)) (import "env" "longname2198" (func $internal2198)) (import "env" "longname2199" (func $internal2199)) (import "env" "longname2200" (func $internal2200)) (import "env" "longname2201" (func $internal2201)) (import "env" "longname2202" (func $internal2202)) (import "env" "longname2203" (func $internal2203)) (import "env" "longname2204" (func $internal2204)) (import "env" "longname2205" (func $internal2205)) (import "env" "longname2206" (func $internal2206)) (import "env" "longname2207" (func $internal2207)) (import "env" "longname2208" (func $internal2208)) (import "env" "longname2209" (func $internal2209)) (import "env" "longname2210" (func $internal2210)) (import "env" "longname2211" (func $internal2211)) (import "env" "longname2212" (func $internal2212)) (import "env" "longname2213" (func $internal2213)) (import "env" "longname2214" (func $internal2214)) (import "env" "longname2215" (func $internal2215)) (import "env" "longname2216" (func $internal2216)) (import "env" "longname2217" (func $internal2217)) (import "env" "longname2218" (func $internal2218)) (import "env" "longname2219" (func $internal2219)) (import "env" "longname2220" (func $internal2220)) (import "env" "longname2221" (func $internal2221)) (import "env" "longname2222" (func $internal2222)) (import "env" "longname2223" (func $internal2223)) (import "env" "longname2224" (func $internal2224)) (import "env" "longname2225" (func $internal2225)) (import "env" "longname2226" (func $internal2226)) (import "env" "longname2227" (func $internal2227)) (import "env" "longname2228" (func $internal2228)) (import "env" "longname2229" (func $internal2229)) (import "env" "longname2230" (func $internal2230)) (import "env" "longname2231" (func $internal2231)) (import "env" "longname2232" (func $internal2232)) (import "env" "longname2233" (func $internal2233)) (import "env" "longname2234" (func $internal2234)) (import "env" "longname2235" (func $internal2235)) (import "env" "longname2236" (func $internal2236)) (import "env" "longname2237" (func $internal2237)) (import "env" "longname2238" (func $internal2238)) (import "env" "longname2239" (func $internal2239)) (import "env" "longname2240" (func $internal2240)) (import "env" "longname2241" (func $internal2241)) (import "env" "longname2242" (func $internal2242)) (import "env" "longname2243" (func $internal2243)) (import "env" "longname2244" (func $internal2244)) (import "env" "longname2245" (func $internal2245)) (import "env" "longname2246" (func $internal2246)) (import "env" "longname2247" (func $internal2247)) (import "env" "longname2248" (func $internal2248)) (import "env" "longname2249" (func $internal2249)) (import "env" "longname2250" (func $internal2250)) (import "env" "longname2251" (func $internal2251)) (import "env" "longname2252" (func $internal2252)) (import "env" "longname2253" (func $internal2253)) (import "env" "longname2254" (func $internal2254)) (import "env" "longname2255" (func $internal2255)) (import "env" "longname2256" (func $internal2256)) (import "env" "longname2257" (func $internal2257)) (import "env" "longname2258" (func $internal2258)) (import "env" "longname2259" (func $internal2259)) (import "env" "longname2260" (func $internal2260)) (import "env" "longname2261" (func $internal2261)) (import "env" "longname2262" (func $internal2262)) (import "env" "longname2263" (func $internal2263)) (import "env" "longname2264" (func $internal2264)) (import "env" "longname2265" (func $internal2265)) (import "env" "longname2266" (func $internal2266)) (import "env" "longname2267" (func $internal2267)) (import "env" "longname2268" (func $internal2268)) (import "env" "longname2269" (func $internal2269)) (import "env" "longname2270" (func $internal2270)) (import "env" "longname2271" (func $internal2271)) (import "env" "longname2272" (func $internal2272)) (import "env" "longname2273" (func $internal2273)) (import "env" "longname2274" (func $internal2274)) (import "env" "longname2275" (func $internal2275)) (import "env" "longname2276" (func $internal2276)) (import "env" "longname2277" (func $internal2277)) (import "env" "longname2278" (func $internal2278)) (import "env" "longname2279" (func $internal2279)) (import "env" "longname2280" (func $internal2280)) (import "env" "longname2281" (func $internal2281)) (import "env" "longname2282" (func $internal2282)) (import "env" "longname2283" (func $internal2283)) (import "env" "longname2284" (func $internal2284)) (import "env" "longname2285" (func $internal2285)) (import "env" "longname2286" (func $internal2286)) (import "env" "longname2287" (func $internal2287)) (import "env" "longname2288" (func $internal2288)) (import "env" "longname2289" (func $internal2289)) (import "env" "longname2290" (func $internal2290)) (import "env" "longname2291" (func $internal2291)) (import "env" "longname2292" (func $internal2292)) (import "env" "longname2293" (func $internal2293)) (import "env" "longname2294" (func $internal2294)) (import "env" "longname2295" (func $internal2295)) (import "env" "longname2296" (func $internal2296)) (import "env" "longname2297" (func $internal2297)) (import "env" "longname2298" (func $internal2298)) (import "env" "longname2299" (func $internal2299)) (import "env" "longname2300" (func $internal2300)) (import "env" "longname2301" (func $internal2301)) (import "env" "longname2302" (func $internal2302)) (import "env" "longname2303" (func $internal2303)) (import "env" "longname2304" (func $internal2304)) (import "env" "longname2305" (func $internal2305)) (import "env" "longname2306" (func $internal2306)) (import "env" "longname2307" (func $internal2307)) (import "env" "longname2308" (func $internal2308)) (import "env" "longname2309" (func $internal2309)) (import "env" "longname2310" (func $internal2310)) (import "env" "longname2311" (func $internal2311)) (import "env" "longname2312" (func $internal2312)) (import "env" "longname2313" (func $internal2313)) (import "env" "longname2314" (func $internal2314)) (import "env" "longname2315" (func $internal2315)) (import "env" "longname2316" (func $internal2316)) (import "env" "longname2317" (func $internal2317)) (import "env" "longname2318" (func $internal2318)) (import "env" "longname2319" (func $internal2319)) (import "env" "longname2320" (func $internal2320)) (import "env" "longname2321" (func $internal2321)) (import "env" "longname2322" (func $internal2322)) (import "env" "longname2323" (func $internal2323)) (import "env" "longname2324" (func $internal2324)) (import "env" "longname2325" (func $internal2325)) (import "env" "longname2326" (func $internal2326)) (import "env" "longname2327" (func $internal2327)) (import "env" "longname2328" (func $internal2328)) (import "env" "longname2329" (func $internal2329)) (import "env" "longname2330" (func $internal2330)) (import "env" "longname2331" (func $internal2331)) (import "env" "longname2332" (func $internal2332)) (import "env" "longname2333" (func $internal2333)) (import "env" "longname2334" (func $internal2334)) (import "env" "longname2335" (func $internal2335)) (import "env" "longname2336" (func $internal2336)) (import "env" "longname2337" (func $internal2337)) (import "env" "longname2338" (func $internal2338)) (import "env" "longname2339" (func $internal2339)) (import "env" "longname2340" (func $internal2340)) (import "env" "longname2341" (func $internal2341)) (import "env" "longname2342" (func $internal2342)) (import "env" "longname2343" (func $internal2343)) (import "env" "longname2344" (func $internal2344)) (import "env" "longname2345" (func $internal2345)) (import "env" "longname2346" (func $internal2346)) (import "env" "longname2347" (func $internal2347)) (import "env" "longname2348" (func $internal2348)) (import "env" "longname2349" (func $internal2349)) (import "env" "longname2350" (func $internal2350)) (import "env" "longname2351" (func $internal2351)) (import "env" "longname2352" (func $internal2352)) (import "env" "longname2353" (func $internal2353)) (import "env" "longname2354" (func $internal2354)) (import "env" "longname2355" (func $internal2355)) (import "env" "longname2356" (func $internal2356)) (import "env" "longname2357" (func $internal2357)) (import "env" "longname2358" (func $internal2358)) (import "env" "longname2359" (func $internal2359)) (import "env" "longname2360" (func $internal2360)) (import "env" "longname2361" (func $internal2361)) (import "env" "longname2362" (func $internal2362)) (import "env" "longname2363" (func $internal2363)) (import "env" "longname2364" (func $internal2364)) (import "env" "longname2365" (func $internal2365)) (import "env" "longname2366" (func $internal2366)) (import "env" "longname2367" (func $internal2367)) (import "env" "longname2368" (func $internal2368)) (import "env" "longname2369" (func $internal2369)) (import "env" "longname2370" (func $internal2370)) (import "env" "longname2371" (func $internal2371)) (import "env" "longname2372" (func $internal2372)) (import "env" "longname2373" (func $internal2373)) (import "env" "longname2374" (func $internal2374)) (import "env" "longname2375" (func $internal2375)) (import "env" "longname2376" (func $internal2376)) (import "env" "longname2377" (func $internal2377)) (import "env" "longname2378" (func $internal2378)) (import "env" "longname2379" (func $internal2379)) (import "env" "longname2380" (func $internal2380)) (import "env" "longname2381" (func $internal2381)) (import "env" "longname2382" (func $internal2382)) (import "env" "longname2383" (func $internal2383)) (import "env" "longname2384" (func $internal2384)) (import "env" "longname2385" (func $internal2385)) (import "env" "longname2386" (func $internal2386)) (import "env" "longname2387" (func $internal2387)) (import "env" "longname2388" (func $internal2388)) (import "env" "longname2389" (func $internal2389)) (import "env" "longname2390" (func $internal2390)) (import "env" "longname2391" (func $internal2391)) (import "env" "longname2392" (func $internal2392)) (import "env" "longname2393" (func $internal2393)) (import "env" "longname2394" (func $internal2394)) (import "env" "longname2395" (func $internal2395)) (import "env" "longname2396" (func $internal2396)) (import "env" "longname2397" (func $internal2397)) (import "env" "longname2398" (func $internal2398)) (import "env" "longname2399" (func $internal2399)) (import "env" "longname2400" (func $internal2400)) (import "env" "longname2401" (func $internal2401)) (import "env" "longname2402" (func $internal2402)) (import "env" "longname2403" (func $internal2403)) (import "env" "longname2404" (func $internal2404)) (import "env" "longname2405" (func $internal2405)) (import "env" "longname2406" (func $internal2406)) (import "env" "longname2407" (func $internal2407)) (import "env" "longname2408" (func $internal2408)) (import "env" "longname2409" (func $internal2409)) (import "env" "longname2410" (func $internal2410)) (import "env" "longname2411" (func $internal2411)) (import "env" "longname2412" (func $internal2412)) (import "env" "longname2413" (func $internal2413)) (import "env" "longname2414" (func $internal2414)) (import "env" "longname2415" (func $internal2415)) (import "env" "longname2416" (func $internal2416)) (import "env" "longname2417" (func $internal2417)) (import "env" "longname2418" (func $internal2418)) (import "env" "longname2419" (func $internal2419)) (import "env" "longname2420" (func $internal2420)) (import "env" "longname2421" (func $internal2421)) (import "env" "longname2422" (func $internal2422)) (import "env" "longname2423" (func $internal2423)) (import "env" "longname2424" (func $internal2424)) (import "env" "longname2425" (func $internal2425)) (import "env" "longname2426" (func $internal2426)) (import "env" "longname2427" (func $internal2427)) (import "env" "longname2428" (func $internal2428)) (import "env" "longname2429" (func $internal2429)) (import "env" "longname2430" (func $internal2430)) (import "env" "longname2431" (func $internal2431)) (import "env" "longname2432" (func $internal2432)) (import "env" "longname2433" (func $internal2433)) (import "env" "longname2434" (func $internal2434)) (import "env" "longname2435" (func $internal2435)) (import "env" "longname2436" (func $internal2436)) (import "env" "longname2437" (func $internal2437)) (import "env" "longname2438" (func $internal2438)) (import "env" "longname2439" (func $internal2439)) (import "env" "longname2440" (func $internal2440)) (import "env" "longname2441" (func $internal2441)) (import "env" "longname2442" (func $internal2442)) (import "env" "longname2443" (func $internal2443)) (import "env" "longname2444" (func $internal2444)) (import "env" "longname2445" (func $internal2445)) (import "env" "longname2446" (func $internal2446)) (import "env" "longname2447" (func $internal2447)) (import "env" "longname2448" (func $internal2448)) (import "env" "longname2449" (func $internal2449)) (import "env" "longname2450" (func $internal2450)) (import "env" "longname2451" (func $internal2451)) (import "env" "longname2452" (func $internal2452)) (import "env" "longname2453" (func $internal2453)) (import "env" "longname2454" (func $internal2454)) (import "env" "longname2455" (func $internal2455)) (import "env" "longname2456" (func $internal2456)) (import "env" "longname2457" (func $internal2457)) (import "env" "longname2458" (func $internal2458)) (import "env" "longname2459" (func $internal2459)) (import "env" "longname2460" (func $internal2460)) (import "env" "longname2461" (func $internal2461)) (import "env" "longname2462" (func $internal2462)) (import "env" "longname2463" (func $internal2463)) (import "env" "longname2464" (func $internal2464)) (import "env" "longname2465" (func $internal2465)) (import "env" "longname2466" (func $internal2466)) (import "env" "longname2467" (func $internal2467)) (import "env" "longname2468" (func $internal2468)) (import "env" "longname2469" (func $internal2469)) (import "env" "longname2470" (func $internal2470)) (import "env" "longname2471" (func $internal2471)) (import "env" "longname2472" (func $internal2472)) (import "env" "longname2473" (func $internal2473)) (import "env" "longname2474" (func $internal2474)) (import "env" "longname2475" (func $internal2475)) (import "env" "longname2476" (func $internal2476)) (import "env" "longname2477" (func $internal2477)) (import "env" "longname2478" (func $internal2478)) (import "env" "longname2479" (func $internal2479)) (import "env" "longname2480" (func $internal2480)) (import "env" "longname2481" (func $internal2481)) (import "env" "longname2482" (func $internal2482)) (import "env" "longname2483" (func $internal2483)) (import "env" "longname2484" (func $internal2484)) (import "env" "longname2485" (func $internal2485)) (import "env" "longname2486" (func $internal2486)) (import "env" "longname2487" (func $internal2487)) (import "env" "longname2488" (func $internal2488)) (import "env" "longname2489" (func $internal2489)) (import "env" "longname2490" (func $internal2490)) (import "env" "longname2491" (func $internal2491)) (import "env" "longname2492" (func $internal2492)) (import "env" "longname2493" (func $internal2493)) (import "env" "longname2494" (func $internal2494)) (import "env" "longname2495" (func $internal2495)) (import "env" "longname2496" (func $internal2496)) (import "env" "longname2497" (func $internal2497)) (import "env" "longname2498" (func $internal2498)) (import "env" "longname2499" (func $internal2499)) (import "env" "longname2500" (func $internal2500)) (import "env" "longname2501" (func $internal2501)) (import "env" "longname2502" (func $internal2502)) (import "env" "longname2503" (func $internal2503)) (import "env" "longname2504" (func $internal2504)) (import "env" "longname2505" (func $internal2505)) (import "env" "longname2506" (func $internal2506)) (import "env" "longname2507" (func $internal2507)) (import "env" "longname2508" (func $internal2508)) (import "env" "longname2509" (func $internal2509)) (import "env" "longname2510" (func $internal2510)) (import "env" "longname2511" (func $internal2511)) (import "env" "longname2512" (func $internal2512)) (import "env" "longname2513" (func $internal2513)) (import "env" "longname2514" (func $internal2514)) (import "env" "longname2515" (func $internal2515)) (import "env" "longname2516" (func $internal2516)) (import "env" "longname2517" (func $internal2517)) (import "env" "longname2518" (func $internal2518)) (import "env" "longname2519" (func $internal2519)) (import "env" "longname2520" (func $internal2520)) (import "env" "longname2521" (func $internal2521)) (import "env" "longname2522" (func $internal2522)) (import "env" "longname2523" (func $internal2523)) (import "env" "longname2524" (func $internal2524)) (import "env" "longname2525" (func $internal2525)) (import "env" "longname2526" (func $internal2526)) (import "env" "longname2527" (func $internal2527)) (import "env" "longname2528" (func $internal2528)) (import "env" "longname2529" (func $internal2529)) (import "env" "longname2530" (func $internal2530)) (import "env" "longname2531" (func $internal2531)) (import "env" "longname2532" (func $internal2532)) (import "env" "longname2533" (func $internal2533)) (import "env" "longname2534" (func $internal2534)) (import "env" "longname2535" (func $internal2535)) (import "env" "longname2536" (func $internal2536)) (import "env" "longname2537" (func $internal2537)) (import "env" "longname2538" (func $internal2538)) (import "env" "longname2539" (func $internal2539)) (import "env" "longname2540" (func $internal2540)) (import "env" "longname2541" (func $internal2541)) (import "env" "longname2542" (func $internal2542)) (import "env" "longname2543" (func $internal2543)) (import "env" "longname2544" (func $internal2544)) (import "env" "longname2545" (func $internal2545)) (import "env" "longname2546" (func $internal2546)) (import "env" "longname2547" (func $internal2547)) (import "env" "longname2548" (func $internal2548)) (import "env" "longname2549" (func $internal2549)) (import "env" "longname2550" (func $internal2550)) (import "env" "longname2551" (func $internal2551)) (import "env" "longname2552" (func $internal2552)) (import "env" "longname2553" (func $internal2553)) (import "env" "longname2554" (func $internal2554)) (import "env" "longname2555" (func $internal2555)) (import "env" "longname2556" (func $internal2556)) (import "env" "longname2557" (func $internal2557)) (import "env" "longname2558" (func $internal2558)) (import "env" "longname2559" (func $internal2559)) (import "env" "longname2560" (func $internal2560)) (import "env" "longname2561" (func $internal2561)) (import "env" "longname2562" (func $internal2562)) (import "env" "longname2563" (func $internal2563)) (import "env" "longname2564" (func $internal2564)) (import "env" "longname2565" (func $internal2565)) (import "env" "longname2566" (func $internal2566)) (import "env" "longname2567" (func $internal2567)) (import "env" "longname2568" (func $internal2568)) (import "env" "longname2569" (func $internal2569)) (import "env" "longname2570" (func $internal2570)) (import "env" "longname2571" (func $internal2571)) (import "env" "longname2572" (func $internal2572)) (import "env" "longname2573" (func $internal2573)) (import "env" "longname2574" (func $internal2574)) (import "env" "longname2575" (func $internal2575)) (import "env" "longname2576" (func $internal2576)) (import "env" "longname2577" (func $internal2577)) (import "env" "longname2578" (func $internal2578)) (import "env" "longname2579" (func $internal2579)) (import "env" "longname2580" (func $internal2580)) (import "env" "longname2581" (func $internal2581)) (import "env" "longname2582" (func $internal2582)) (import "env" "longname2583" (func $internal2583)) (import "env" "longname2584" (func $internal2584)) (import "env" "longname2585" (func $internal2585)) (import "env" "longname2586" (func $internal2586)) (import "env" "longname2587" (func $internal2587)) (import "env" "longname2588" (func $internal2588)) (import "env" "longname2589" (func $internal2589)) (import "env" "longname2590" (func $internal2590)) (import "env" "longname2591" (func $internal2591)) (import "env" "longname2592" (func $internal2592)) (import "env" "longname2593" (func $internal2593)) (import "env" "longname2594" (func $internal2594)) (import "env" "longname2595" (func $internal2595)) (import "env" "longname2596" (func $internal2596)) (import "env" "longname2597" (func $internal2597)) (import "env" "longname2598" (func $internal2598)) (import "env" "longname2599" (func $internal2599)) (import "env" "longname2600" (func $internal2600)) (import "env" "longname2601" (func $internal2601)) (import "env" "longname2602" (func $internal2602)) (import "env" "longname2603" (func $internal2603)) (import "env" "longname2604" (func $internal2604)) (import "env" "longname2605" (func $internal2605)) (import "env" "longname2606" (func $internal2606)) (import "env" "longname2607" (func $internal2607)) (import "env" "longname2608" (func $internal2608)) (import "env" "longname2609" (func $internal2609)) (import "env" "longname2610" (func $internal2610)) (import "env" "longname2611" (func $internal2611)) (import "env" "longname2612" (func $internal2612)) (import "env" "longname2613" (func $internal2613)) (import "env" "longname2614" (func $internal2614)) (import "env" "longname2615" (func $internal2615)) (import "env" "longname2616" (func $internal2616)) (import "env" "longname2617" (func $internal2617)) (import "env" "longname2618" (func $internal2618)) (import "env" "longname2619" (func $internal2619)) (import "env" "longname2620" (func $internal2620)) (import "env" "longname2621" (func $internal2621)) (import "env" "longname2622" (func $internal2622)) (import "env" "longname2623" (func $internal2623)) (import "env" "longname2624" (func $internal2624)) (import "env" "longname2625" (func $internal2625)) (import "env" "longname2626" (func $internal2626)) (import "env" "longname2627" (func $internal2627)) (import "env" "longname2628" (func $internal2628)) (import "env" "longname2629" (func $internal2629)) (import "env" "longname2630" (func $internal2630)) (import "env" "longname2631" (func $internal2631)) (import "env" "longname2632" (func $internal2632)) (import "env" "longname2633" (func $internal2633)) (import "env" "longname2634" (func $internal2634)) (import "env" "longname2635" (func $internal2635)) (import "env" "longname2636" (func $internal2636)) (import "env" "longname2637" (func $internal2637)) (import "env" "longname2638" (func $internal2638)) (import "env" "longname2639" (func $internal2639)) (import "env" "longname2640" (func $internal2640)) (import "env" "longname2641" (func $internal2641)) (import "env" "longname2642" (func $internal2642)) (import "env" "longname2643" (func $internal2643)) (import "env" "longname2644" (func $internal2644)) (import "env" "longname2645" (func $internal2645)) (import "env" "longname2646" (func $internal2646)) (import "env" "longname2647" (func $internal2647)) (import "env" "longname2648" (func $internal2648)) (import "env" "longname2649" (func $internal2649)) (import "env" "longname2650" (func $internal2650)) (import "env" "longname2651" (func $internal2651)) (import "env" "longname2652" (func $internal2652)) (import "env" "longname2653" (func $internal2653)) (import "env" "longname2654" (func $internal2654)) (import "env" "longname2655" (func $internal2655)) (import "env" "longname2656" (func $internal2656)) (import "env" "longname2657" (func $internal2657)) (import "env" "longname2658" (func $internal2658)) (import "env" "longname2659" (func $internal2659)) (import "env" "longname2660" (func $internal2660)) (import "env" "longname2661" (func $internal2661)) (import "env" "longname2662" (func $internal2662)) (import "env" "longname2663" (func $internal2663)) (import "env" "longname2664" (func $internal2664)) (import "env" "longname2665" (func $internal2665)) (import "env" "longname2666" (func $internal2666)) (import "env" "longname2667" (func $internal2667)) (import "env" "longname2668" (func $internal2668)) (import "env" "longname2669" (func $internal2669)) (import "env" "longname2670" (func $internal2670)) (import "env" "longname2671" (func $internal2671)) (import "env" "longname2672" (func $internal2672)) (import "env" "longname2673" (func $internal2673)) (import "env" "longname2674" (func $internal2674)) (import "env" "longname2675" (func $internal2675)) (import "env" "longname2676" (func $internal2676)) (import "env" "longname2677" (func $internal2677)) (import "env" "longname2678" (func $internal2678)) (import "env" "longname2679" (func $internal2679)) (import "env" "longname2680" (func $internal2680)) (import "env" "longname2681" (func $internal2681)) (import "env" "longname2682" (func $internal2682)) (import "env" "longname2683" (func $internal2683)) (import "env" "longname2684" (func $internal2684)) (import "env" "longname2685" (func $internal2685)) (import "env" "longname2686" (func $internal2686)) (import "env" "longname2687" (func $internal2687)) (import "env" "longname2688" (func $internal2688)) (import "env" "longname2689" (func $internal2689)) (import "env" "longname2690" (func $internal2690)) (import "env" "longname2691" (func $internal2691)) (import "env" "longname2692" (func $internal2692)) (import "env" "longname2693" (func $internal2693)) (import "env" "longname2694" (func $internal2694)) (import "env" "longname2695" (func $internal2695)) (import "env" "longname2696" (func $internal2696)) (import "env" "longname2697" (func $internal2697)) (import "env" "longname2698" (func $internal2698)) (import "env" "longname2699" (func $internal2699)) (import "env" "longname2700" (func $internal2700)) (import "env" "longname2701" (func $internal2701)) (import "env" "longname2702" (func $internal2702)) (import "env" "longname2703" (func $internal2703)) (import "env" "longname2704" (func $internal2704)) (import "env" "longname2705" (func $internal2705)) (import "env" "longname2706" (func $internal2706)) (import "env" "longname2707" (func $internal2707)) (import "env" "longname2708" (func $internal2708)) (import "env" "longname2709" (func $internal2709)) (import "env" "longname2710" (func $internal2710)) (import "env" "longname2711" (func $internal2711)) (import "env" "longname2712" (func $internal2712)) (import "env" "longname2713" (func $internal2713)) (import "env" "longname2714" (func $internal2714)) (import "env" "longname2715" (func $internal2715)) (import "env" "longname2716" (func $internal2716)) (import "env" "longname2717" (func $internal2717)) (import "env" "longname2718" (func $internal2718)) (import "env" "longname2719" (func $internal2719)) (import "env" "longname2720" (func $internal2720)) (import "env" "longname2721" (func $internal2721)) (import "env" "longname2722" (func $internal2722)) (import "env" "longname2723" (func $internal2723)) (import "env" "longname2724" (func $internal2724)) (import "env" "longname2725" (func $internal2725)) (import "env" "longname2726" (func $internal2726)) (import "env" "longname2727" (func $internal2727)) (import "env" "longname2728" (func $internal2728)) (import "env" "longname2729" (func $internal2729)) (import "env" "longname2730" (func $internal2730)) (import "env" "longname2731" (func $internal2731)) (import "env" "longname2732" (func $internal2732)) (import "env" "longname2733" (func $internal2733)) (import "env" "longname2734" (func $internal2734)) (import "env" "longname2735" (func $internal2735)) (import "env" "longname2736" (func $internal2736)) (import "env" "longname2737" (func $internal2737)) (import "env" "longname2738" (func $internal2738)) (import "env" "longname2739" (func $internal2739)) (import "env" "longname2740" (func $internal2740)) (import "env" "longname2741" (func $internal2741)) (import "env" "longname2742" (func $internal2742)) (import "env" "longname2743" (func $internal2743)) (import "env" "longname2744" (func $internal2744)) (import "env" "longname2745" (func $internal2745)) (import "env" "longname2746" (func $internal2746)) (import "env" "longname2747" (func $internal2747)) (import "env" "longname2748" (func $internal2748)) (import "env" "longname2749" (func $internal2749)) (import "env" "longname2750" (func $internal2750)) (import "env" "longname2751" (func $internal2751)) (import "env" "longname2752" (func $internal2752)) (import "env" "longname2753" (func $internal2753)) (import "env" "longname2754" (func $internal2754)) (import "env" "longname2755" (func $internal2755)) (import "env" "longname2756" (func $internal2756)) (import "env" "longname2757" (func $internal2757)) (import "env" "longname2758" (func $internal2758)) (import "env" "longname2759" (func $internal2759)) (import "env" "longname2760" (func $internal2760)) (import "env" "longname2761" (func $internal2761)) (import "env" "longname2762" (func $internal2762)) (import "env" "longname2763" (func $internal2763)) (import "env" "longname2764" (func $internal2764)) (import "env" "longname2765" (func $internal2765)) (import "env" "longname2766" (func $internal2766)) (import "env" "longname2767" (func $internal2767)) (import "env" "longname2768" (func $internal2768)) (import "env" "longname2769" (func $internal2769)) (import "env" "longname2770" (func $internal2770)) (import "env" "longname2771" (func $internal2771)) (import "env" "longname2772" (func $internal2772)) (import "env" "longname2773" (func $internal2773)) (import "env" "longname2774" (func $internal2774)) (import "env" "longname2775" (func $internal2775)) (import "env" "longname2776" (func $internal2776)) (import "env" "longname2777" (func $internal2777)) (import "env" "longname2778" (func $internal2778)) (import "env" "longname2779" (func $internal2779)) (import "env" "longname2780" (func $internal2780)) (import "env" "longname2781" (func $internal2781)) (import "env" "longname2782" (func $internal2782)) (import "env" "longname2783" (func $internal2783)) (import "env" "longname2784" (func $internal2784)) (import "env" "longname2785" (func $internal2785)) (import "env" "longname2786" (func $internal2786)) (import "env" "longname2787" (func $internal2787)) (import "env" "longname2788" (func $internal2788)) (import "env" "longname2789" (func $internal2789)) (import "env" "longname2790" (func $internal2790)) (import "env" "longname2791" (func $internal2791)) (import "env" "longname2792" (func $internal2792)) (import "env" "longname2793" (func $internal2793)) (import "env" "longname2794" (func $internal2794)) (import "env" "longname2795" (func $internal2795)) (import "env" "longname2796" (func $internal2796)) (import "env" "longname2797" (func $internal2797)) (import "env" "longname2798" (func $internal2798)) (import "env" "longname2799" (func $internal2799)) (import "env" "longname2800" (func $internal2800)) (import "env" "longname2801" (func $internal2801)) (import "env" "longname2802" (func $internal2802)) (import "env" "longname2803" (func $internal2803)) (import "env" "longname2804" (func $internal2804)) (import "env" "longname2805" (func $internal2805)) (import "env" "longname2806" (func $internal2806)) (import "env" "longname2807" (func $internal2807)) (import "env" "longname2808" (func $internal2808)) (import "env" "longname2809" (func $internal2809)) (import "env" "longname2810" (func $internal2810)) (import "env" "longname2811" (func $internal2811)) (import "env" "longname2812" (func $internal2812)) (import "env" "longname2813" (func $internal2813)) (import "env" "longname2814" (func $internal2814)) (import "env" "longname2815" (func $internal2815)) (import "env" "longname2816" (func $internal2816)) (import "env" "longname2817" (func $internal2817)) (import "env" "longname2818" (func $internal2818)) (import "env" "longname2819" (func $internal2819)) (import "env" "longname2820" (func $internal2820)) (import "env" "longname2821" (func $internal2821)) (import "env" "longname2822" (func $internal2822)) (import "env" "longname2823" (func $internal2823)) (import "env" "longname2824" (func $internal2824)) (import "env" "longname2825" (func $internal2825)) (import "env" "longname2826" (func $internal2826)) (import "env" "longname2827" (func $internal2827)) (import "env" "longname2828" (func $internal2828)) (import "env" "longname2829" (func $internal2829)) (import "env" "longname2830" (func $internal2830)) (import "env" "longname2831" (func $internal2831)) (import "env" "longname2832" (func $internal2832)) (import "env" "longname2833" (func $internal2833)) (import "env" "longname2834" (func $internal2834)) (import "env" "longname2835" (func $internal2835)) (import "env" "longname2836" (func $internal2836)) (import "env" "longname2837" (func $internal2837)) (import "env" "longname2838" (func $internal2838)) (import "env" "longname2839" (func $internal2839)) (import "env" "longname2840" (func $internal2840)) (import "env" "longname2841" (func $internal2841)) (import "env" "longname2842" (func $internal2842)) (import "env" "longname2843" (func $internal2843)) (import "env" "longname2844" (func $internal2844)) (import "env" "longname2845" (func $internal2845)) (import "env" "longname2846" (func $internal2846)) (import "env" "longname2847" (func $internal2847)) (import "env" "longname2848" (func $internal2848)) (import "env" "longname2849" (func $internal2849)) (import "env" "longname2850" (func $internal2850)) (import "env" "longname2851" (func $internal2851)) (import "env" "longname2852" (func $internal2852)) (import "env" "longname2853" (func $internal2853)) (import "env" "longname2854" (func $internal2854)) (import "env" "longname2855" (func $internal2855)) (import "env" "longname2856" (func $internal2856)) (import "env" "longname2857" (func $internal2857)) (import "env" "longname2858" (func $internal2858)) (import "env" "longname2859" (func $internal2859)) (import "env" "longname2860" (func $internal2860)) (import "env" "longname2861" (func $internal2861)) (import "env" "longname2862" (func $internal2862)) (import "env" "longname2863" (func $internal2863)) (import "env" "longname2864" (func $internal2864)) (import "env" "longname2865" (func $internal2865)) (import "env" "longname2866" (func $internal2866)) (import "env" "longname2867" (func $internal2867)) (import "env" "longname2868" (func $internal2868)) (import "env" "longname2869" (func $internal2869)) (import "env" "longname2870" (func $internal2870)) (import "env" "longname2871" (func $internal2871)) (import "env" "longname2872" (func $internal2872)) (import "env" "longname2873" (func $internal2873)) (import "env" "longname2874" (func $internal2874)) (import "env" "longname2875" (func $internal2875)) (import "env" "longname2876" (func $internal2876)) (import "env" "longname2877" (func $internal2877)) (import "env" "longname2878" (func $internal2878)) (import "env" "longname2879" (func $internal2879)) (import "env" "longname2880" (func $internal2880)) (import "env" "longname2881" (func $internal2881)) (import "env" "longname2882" (func $internal2882)) (import "env" "longname2883" (func $internal2883)) (import "env" "longname2884" (func $internal2884)) (import "env" "longname2885" (func $internal2885)) (import "env" "longname2886" (func $internal2886)) (import "env" "longname2887" (func $internal2887)) (import "env" "longname2888" (func $internal2888)) (import "env" "longname2889" (func $internal2889)) (import "env" "longname2890" (func $internal2890)) (import "env" "longname2891" (func $internal2891)) (import "env" "longname2892" (func $internal2892)) (import "env" "longname2893" (func $internal2893)) (import "env" "longname2894" (func $internal2894)) (import "env" "longname2895" (func $internal2895)) (import "env" "longname2896" (func $internal2896)) (import "env" "longname2897" (func $internal2897)) (import "env" "longname2898" (func $internal2898)) (import "env" "longname2899" (func $internal2899)) (import "env" "longname2900" (func $internal2900)) (import "env" "longname2901" (func $internal2901)) (import "env" "longname2902" (func $internal2902)) (import "env" "longname2903" (func $internal2903)) (import "env" "longname2904" (func $internal2904)) (import "env" "longname2905" (func $internal2905)) (import "env" "longname2906" (func $internal2906)) (import "env" "longname2907" (func $internal2907)) (import "env" "longname2908" (func $internal2908)) (import "env" "longname2909" (func $internal2909)) (import "env" "longname2910" (func $internal2910)) (import "env" "longname2911" (func $internal2911)) (import "env" "longname2912" (func $internal2912)) (import "env" "longname2913" (func $internal2913)) (import "env" "longname2914" (func $internal2914)) (import "env" "longname2915" (func $internal2915)) (import "env" "longname2916" (func $internal2916)) (import "env" "longname2917" (func $internal2917)) (import "env" "longname2918" (func $internal2918)) (import "env" "longname2919" (func $internal2919)) (import "env" "longname2920" (func $internal2920)) (import "env" "longname2921" (func $internal2921)) (import "env" "longname2922" (func $internal2922)) (import "env" "longname2923" (func $internal2923)) (import "env" "longname2924" (func $internal2924)) (import "env" "longname2925" (func $internal2925)) (import "env" "longname2926" (func $internal2926)) (import "env" "longname2927" (func $internal2927)) (import "env" "longname2928" (func $internal2928)) (import "env" "longname2929" (func $internal2929)) (import "env" "longname2930" (func $internal2930)) (import "env" "longname2931" (func $internal2931)) (import "env" "longname2932" (func $internal2932)) (import "env" "longname2933" (func $internal2933)) (import "env" "longname2934" (func $internal2934)) (import "env" "longname2935" (func $internal2935)) (import "env" "longname2936" (func $internal2936)) (import "env" "longname2937" (func $internal2937)) (import "env" "longname2938" (func $internal2938)) (import "env" "longname2939" (func $internal2939)) (import "env" "longname2940" (func $internal2940)) (import "env" "longname2941" (func $internal2941)) (import "env" "longname2942" (func $internal2942)) (import "env" "longname2943" (func $internal2943)) (import "env" "longname2944" (func $internal2944)) (import "env" "longname2945" (func $internal2945)) (import "env" "longname2946" (func $internal2946)) (import "env" "longname2947" (func $internal2947)) (import "env" "longname2948" (func $internal2948)) (import "env" "longname2949" (func $internal2949)) (import "env" "longname2950" (func $internal2950)) (import "env" "longname2951" (func $internal2951)) (import "env" "longname2952" (func $internal2952)) (import "env" "longname2953" (func $internal2953)) (import "env" "longname2954" (func $internal2954)) (import "env" "longname2955" (func $internal2955)) (import "env" "longname2956" (func $internal2956)) (import "env" "longname2957" (func $internal2957)) (import "env" "longname2958" (func $internal2958)) (import "env" "longname2959" (func $internal2959)) (import "env" "longname2960" (func $internal2960)) (import "env" "longname2961" (func $internal2961)) (import "env" "longname2962" (func $internal2962)) (import "env" "longname2963" (func $internal2963)) (import "env" "longname2964" (func $internal2964)) (import "env" "longname2965" (func $internal2965)) (import "env" "longname2966" (func $internal2966)) (import "env" "longname2967" (func $internal2967)) (import "env" "longname2968" (func $internal2968)) (import "env" "longname2969" (func $internal2969)) (import "env" "longname2970" (func $internal2970)) (import "env" "longname2971" (func $internal2971)) (import "env" "longname2972" (func $internal2972)) (import "env" "longname2973" (func $internal2973)) (import "env" "longname2974" (func $internal2974)) (import "env" "longname2975" (func $internal2975)) (import "env" "longname2976" (func $internal2976)) (import "env" "longname2977" (func $internal2977)) (import "env" "longname2978" (func $internal2978)) (import "env" "longname2979" (func $internal2979)) (import "env" "longname2980" (func $internal2980)) (import "env" "longname2981" (func $internal2981)) (import "env" "longname2982" (func $internal2982)) (import "env" "longname2983" (func $internal2983)) (import "env" "longname2984" (func $internal2984)) (import "env" "longname2985" (func $internal2985)) (import "env" "longname2986" (func $internal2986)) (import "env" "longname2987" (func $internal2987)) (import "env" "longname2988" (func $internal2988)) (import "env" "longname2989" (func $internal2989)) (import "env" "longname2990" (func $internal2990)) (import "env" "longname2991" (func $internal2991)) (import "env" "longname2992" (func $internal2992)) (import "env" "longname2993" (func $internal2993)) (import "env" "longname2994" (func $internal2994)) (import "env" "longname2995" (func $internal2995)) (import "env" "longname2996" (func $internal2996)) (import "env" "longname2997" (func $internal2997)) (import "env" "longname2998" (func $internal2998)) (import "env" "longname2999" (func $internal2999)) (import "env" "longname3000" (func $internal3000)) (import "env" "longname3001" (func $internal3001)) (import "env" "longname3002" (func $internal3002)) (import "env" "longname3003" (func $internal3003)) (import "env" "longname3004" (func $internal3004)) (import "env" "longname3005" (func $internal3005)) (import "env" "longname3006" (func $internal3006)) (import "env" "longname3007" (func $internal3007)) (import "env" "longname3008" (func $internal3008)) (import "env" "longname3009" (func $internal3009)) (import "env" "longname3010" (func $internal3010)) (import "env" "longname3011" (func $internal3011)) (import "env" "longname3012" (func $internal3012)) (import "env" "longname3013" (func $internal3013)) (import "env" "longname3014" (func $internal3014)) (import "env" "longname3015" (func $internal3015)) (import "env" "longname3016" (func $internal3016)) (import "env" "longname3017" (func $internal3017)) (import "env" "longname3018" (func $internal3018)) (import "env" "longname3019" (func $internal3019)) (import "env" "longname3020" (func $internal3020)) (import "env" "longname3021" (func $internal3021)) (import "env" "longname3022" (func $internal3022)) (import "env" "longname3023" (func $internal3023)) (import "env" "longname3024" (func $internal3024)) (import "env" "longname3025" (func $internal3025)) (import "env" "longname3026" (func $internal3026)) (import "env" "longname3027" (func $internal3027)) (import "env" "longname3028" (func $internal3028)) (import "env" "longname3029" (func $internal3029)) (import "env" "longname3030" (func $internal3030)) (import "env" "longname3031" (func $internal3031)) (import "env" "longname3032" (func $internal3032)) (import "env" "longname3033" (func $internal3033)) (import "env" "longname3034" (func $internal3034)) (import "env" "longname3035" (func $internal3035)) (import "env" "longname3036" (func $internal3036)) (import "env" "longname3037" (func $internal3037)) (import "env" "longname3038" (func $internal3038)) (import "env" "longname3039" (func $internal3039)) (import "env" "longname3040" (func $internal3040)) (import "env" "longname3041" (func $internal3041)) (import "env" "longname3042" (func $internal3042)) (import "env" "longname3043" (func $internal3043)) (import "env" "longname3044" (func $internal3044)) (import "env" "longname3045" (func $internal3045)) (import "env" "longname3046" (func $internal3046)) (import "env" "longname3047" (func $internal3047)) (import "env" "longname3048" (func $internal3048)) (import "env" "longname3049" (func $internal3049)) (import "env" "longname3050" (func $internal3050)) (import "env" "longname3051" (func $internal3051)) (import "env" "longname3052" (func $internal3052)) (import "env" "longname3053" (func $internal3053)) (import "env" "longname3054" (func $internal3054)) (import "env" "longname3055" (func $internal3055)) (import "env" "longname3056" (func $internal3056)) (import "env" "longname3057" (func $internal3057)) (import "env" "longname3058" (func $internal3058)) (import "env" "longname3059" (func $internal3059)) (import "env" "longname3060" (func $internal3060)) (import "env" "longname3061" (func $internal3061)) (import "env" "longname3062" (func $internal3062)) (import "env" "longname3063" (func $internal3063)) (import "env" "longname3064" (func $internal3064)) (import "env" "longname3065" (func $internal3065)) (import "env" "longname3066" (func $internal3066)) (import "env" "longname3067" (func $internal3067)) (import "env" "longname3068" (func $internal3068)) (import "env" "longname3069" (func $internal3069)) (import "env" "longname3070" (func $internal3070)) (import "env" "longname3071" (func $internal3071)) (import "env" "longname3072" (func $internal3072)) (import "env" "longname3073" (func $internal3073)) (import "env" "longname3074" (func $internal3074)) (import "env" "longname3075" (func $internal3075)) (import "env" "longname3076" (func $internal3076)) (import "env" "longname3077" (func $internal3077)) (import "env" "longname3078" (func $internal3078)) (import "env" "longname3079" (func $internal3079)) (import "env" "longname3080" (func $internal3080)) (import "env" "longname3081" (func $internal3081)) (import "env" "longname3082" (func $internal3082)) (import "env" "longname3083" (func $internal3083)) (import "env" "longname3084" (func $internal3084)) (import "env" "longname3085" (func $internal3085)) (import "env" "longname3086" (func $internal3086)) (import "env" "longname3087" (func $internal3087)) (import "env" "longname3088" (func $internal3088)) (import "env" "longname3089" (func $internal3089)) (import "env" "longname3090" (func $internal3090)) (import "env" "longname3091" (func $internal3091)) (import "env" "longname3092" (func $internal3092)) (import "env" "longname3093" (func $internal3093)) (import "env" "longname3094" (func $internal3094)) (import "env" "longname3095" (func $internal3095)) (import "env" "longname3096" (func $internal3096)) (import "env" "longname3097" (func $internal3097)) (import "env" "longname3098" (func $internal3098)) (import "env" "longname3099" (func $internal3099)) (import "env" "longname3100" (func $internal3100)) (import "env" "longname3101" (func $internal3101)) (import "env" "longname3102" (func $internal3102)) (import "env" "longname3103" (func $internal3103)) (import "env" "longname3104" (func $internal3104)) (import "env" "longname3105" (func $internal3105)) (import "env" "longname3106" (func $internal3106)) (import "env" "longname3107" (func $internal3107)) (import "env" "longname3108" (func $internal3108)) (import "env" "longname3109" (func $internal3109)) (import "env" "longname3110" (func $internal3110)) (import "env" "longname3111" (func $internal3111)) (import "env" "longname3112" (func $internal3112)) (import "env" "longname3113" (func $internal3113)) (import "env" "longname3114" (func $internal3114)) (import "env" "longname3115" (func $internal3115)) (import "env" "longname3116" (func $internal3116)) (import "env" "longname3117" (func $internal3117)) (import "env" "longname3118" (func $internal3118)) (import "env" "longname3119" (func $internal3119)) (import "env" "longname3120" (func $internal3120)) (import "env" "longname3121" (func $internal3121)) (import "env" "longname3122" (func $internal3122)) (import "env" "longname3123" (func $internal3123)) (import "env" "longname3124" (func $internal3124)) (import "env" "longname3125" (func $internal3125)) (import "env" "longname3126" (func $internal3126)) (import "env" "longname3127" (func $internal3127)) (import "env" "longname3128" (func $internal3128)) (import "env" "longname3129" (func $internal3129)) (import "env" "longname3130" (func $internal3130)) (import "env" "longname3131" (func $internal3131)) (import "env" "longname3132" (func $internal3132)) (import "env" "longname3133" (func $internal3133)) (import "env" "longname3134" (func $internal3134)) (import "env" "longname3135" (func $internal3135)) (import "env" "longname3136" (func $internal3136)) (import "env" "longname3137" (func $internal3137)) (import "env" "longname3138" (func $internal3138)) (import "env" "longname3139" (func $internal3139)) (import "env" "longname3140" (func $internal3140)) (import "env" "longname3141" (func $internal3141)) (import "env" "longname3142" (func $internal3142)) (import "env" "longname3143" (func $internal3143)) (import "env" "longname3144" (func $internal3144)) (import "env" "longname3145" (func $internal3145)) (import "env" "longname3146" (func $internal3146)) (import "env" "longname3147" (func $internal3147)) (import "env" "longname3148" (func $internal3148)) (import "env" "longname3149" (func $internal3149)) (import "env" "longname3150" (func $internal3150)) (import "env" "longname3151" (func $internal3151)) (import "env" "longname3152" (func $internal3152)) (import "env" "longname3153" (func $internal3153)) (import "env" "longname3154" (func $internal3154)) (import "env" "longname3155" (func $internal3155)) (import "env" "longname3156" (func $internal3156)) (import "env" "longname3157" (func $internal3157)) (import "env" "longname3158" (func $internal3158)) (import "env" "longname3159" (func $internal3159)) (import "env" "longname3160" (func $internal3160)) (import "env" "longname3161" (func $internal3161)) (import "env" "longname3162" (func $internal3162)) (import "env" "longname3163" (func $internal3163)) (import "env" "longname3164" (func $internal3164)) (import "env" "longname3165" (func $internal3165)) (import "env" "longname3166" (func $internal3166)) (import "env" "longname3167" (func $internal3167)) (import "env" "longname3168" (func $internal3168)) (import "env" "longname3169" (func $internal3169)) (import "env" "longname3170" (func $internal3170)) (import "env" "longname3171" (func $internal3171)) (import "env" "longname3172" (func $internal3172)) (import "env" "longname3173" (func $internal3173)) (import "env" "longname3174" (func $internal3174)) (import "env" "longname3175" (func $internal3175)) (import "env" "longname3176" (func $internal3176)) (import "env" "longname3177" (func $internal3177)) (import "env" "longname3178" (func $internal3178)) (import "env" "longname3179" (func $internal3179)) (import "env" "longname3180" (func $internal3180)) (import "env" "longname3181" (func $internal3181)) (import "env" "longname3182" (func $internal3182)) (import "env" "longname3183" (func $internal3183)) (import "env" "longname3184" (func $internal3184)) (import "env" "longname3185" (func $internal3185)) (import "env" "longname3186" (func $internal3186)) (import "env" "longname3187" (func $internal3187)) (import "env" "longname3188" (func $internal3188)) (import "env" "longname3189" (func $internal3189)) (import "env" "longname3190" (func $internal3190)) (import "env" "longname3191" (func $internal3191)) (import "env" "longname3192" (func $internal3192)) (import "env" "longname3193" (func $internal3193)) (import "env" "longname3194" (func $internal3194)) (import "env" "longname3195" (func $internal3195)) (import "env" "longname3196" (func $internal3196)) (import "env" "longname3197" (func $internal3197)) (import "env" "longname3198" (func $internal3198)) (import "env" "longname3199" (func $internal3199)) (import "env" "longname3200" (func $internal3200)) (import "env" "longname3201" (func $internal3201)) (import "env" "longname3202" (func $internal3202)) (import "env" "longname3203" (func $internal3203)) (import "env" "longname3204" (func $internal3204)) (import "env" "longname3205" (func $internal3205)) (import "env" "longname3206" (func $internal3206)) (import "env" "longname3207" (func $internal3207)) (import "env" "longname3208" (func $internal3208)) (import "env" "longname3209" (func $internal3209)) (import "env" "longname3210" (func $internal3210)) (import "env" "longname3211" (func $internal3211)) (import "env" "longname3212" (func $internal3212)) (import "env" "longname3213" (func $internal3213)) (import "env" "longname3214" (func $internal3214)) (import "env" "longname3215" (func $internal3215)) (import "env" "longname3216" (func $internal3216)) (import "env" "longname3217" (func $internal3217)) (import "env" "longname3218" (func $internal3218)) (import "env" "longname3219" (func $internal3219)) (import "env" "longname3220" (func $internal3220)) (import "env" "longname3221" (func $internal3221)) (import "env" "longname3222" (func $internal3222)) (import "env" "longname3223" (func $internal3223)) (import "env" "longname3224" (func $internal3224)) (import "env" "longname3225" (func $internal3225)) (import "env" "longname3226" (func $internal3226)) (import "env" "longname3227" (func $internal3227)) (import "env" "longname3228" (func $internal3228)) (import "env" "longname3229" (func $internal3229)) (import "env" "longname3230" (func $internal3230)) (import "env" "longname3231" (func $internal3231)) (import "env" "longname3232" (func $internal3232)) (import "env" "longname3233" (func $internal3233)) (import "env" "longname3234" (func $internal3234)) (import "env" "longname3235" (func $internal3235)) (import "env" "longname3236" (func $internal3236)) (import "env" "longname3237" (func $internal3237)) (import "env" "longname3238" (func $internal3238)) (import "env" "longname3239" (func $internal3239)) (import "env" "longname3240" (func $internal3240)) (import "env" "longname3241" (func $internal3241)) (import "env" "longname3242" (func $internal3242)) (import "env" "longname3243" (func $internal3243)) (import "env" "longname3244" (func $internal3244)) (import "env" "longname3245" (func $internal3245)) (import "env" "longname3246" (func $internal3246)) (import "env" "longname3247" (func $internal3247)) (import "env" "longname3248" (func $internal3248)) (import "env" "longname3249" (func $internal3249)) (import "env" "longname3250" (func $internal3250)) (import "env" "longname3251" (func $internal3251)) (import "env" "longname3252" (func $internal3252)) (import "env" "longname3253" (func $internal3253)) (import "env" "longname3254" (func $internal3254)) (import "env" "longname3255" (func $internal3255)) (import "env" "longname3256" (func $internal3256)) (import "env" "longname3257" (func $internal3257)) (import "env" "longname3258" (func $internal3258)) (import "env" "longname3259" (func $internal3259)) (import "env" "longname3260" (func $internal3260)) (import "env" "longname3261" (func $internal3261)) (import "env" "longname3262" (func $internal3262)) (import "env" "longname3263" (func $internal3263)) (import "env" "longname3264" (func $internal3264)) (import "env" "longname3265" (func $internal3265)) (import "env" "longname3266" (func $internal3266)) (import "env" "longname3267" (func $internal3267)) (import "env" "longname3268" (func $internal3268)) (import "env" "longname3269" (func $internal3269)) (import "env" "longname3270" (func $internal3270)) (import "env" "longname3271" (func $internal3271)) (import "env" "longname3272" (func $internal3272)) (import "env" "longname3273" (func $internal3273)) (import "env" "longname3274" (func $internal3274)) (import "env" "longname3275" (func $internal3275)) (import "env" "longname3276" (func $internal3276)) (import "env" "longname3277" (func $internal3277)) (import "env" "longname3278" (func $internal3278)) (import "env" "longname3279" (func $internal3279)) (import "env" "longname3280" (func $internal3280)) (import "env" "longname3281" (func $internal3281)) (import "env" "longname3282" (func $internal3282)) (import "env" "longname3283" (func $internal3283)) (import "env" "longname3284" (func $internal3284)) (import "env" "longname3285" (func $internal3285)) (import "env" "longname3286" (func $internal3286)) (import "env" "longname3287" (func $internal3287)) (import "env" "longname3288" (func $internal3288)) (import "env" "longname3289" (func $internal3289)) (import "env" "longname3290" (func $internal3290)) (import "env" "longname3291" (func $internal3291)) (import "env" "longname3292" (func $internal3292)) (import "env" "longname3293" (func $internal3293)) (import "env" "longname3294" (func $internal3294)) (import "env" "longname3295" (func $internal3295)) (import "env" "longname3296" (func $internal3296)) (import "env" "longname3297" (func $internal3297)) (import "env" "longname3298" (func $internal3298)) (import "env" "longname3299" (func $internal3299)) (import "env" "longname3300" (func $internal3300)) (import "env" "longname3301" (func $internal3301)) (import "env" "longname3302" (func $internal3302)) (import "env" "longname3303" (func $internal3303)) (import "env" "longname3304" (func $internal3304)) (import "env" "longname3305" (func $internal3305)) (import "env" "longname3306" (func $internal3306)) (import "env" "longname3307" (func $internal3307)) (import "env" "longname3308" (func $internal3308)) (import "env" "longname3309" (func $internal3309)) (import "env" "longname3310" (func $internal3310)) (import "env" "longname3311" (func $internal3311)) (import "env" "longname3312" (func $internal3312)) (import "env" "longname3313" (func $internal3313)) (import "env" "longname3314" (func $internal3314)) (import "env" "longname3315" (func $internal3315)) (import "env" "longname3316" (func $internal3316)) (import "env" "longname3317" (func $internal3317)) (import "env" "longname3318" (func $internal3318)) (import "env" "longname3319" (func $internal3319)) (import "env" "longname3320" (func $internal3320)) (import "env" "longname3321" (func $internal3321)) (import "env" "longname3322" (func $internal3322)) (import "env" "longname3323" (func $internal3323)) (import "env" "longname3324" (func $internal3324)) (import "env" "longname3325" (func $internal3325)) (import "env" "longname3326" (func $internal3326)) (import "env" "longname3327" (func $internal3327)) (import "env" "longname3328" (func $internal3328)) (import "env" "longname3329" (func $internal3329)) (import "env" "longname3330" (func $internal3330)) (import "env" "longname3331" (func $internal3331)) (import "env" "longname3332" (func $internal3332)) (import "env" "longname3333" (func $internal3333)) (import "env" "longname3334" (func $internal3334)) (import "env" "longname3335" (func $internal3335)) (import "env" "longname3336" (func $internal3336)) (import "env" "longname3337" (func $internal3337)) (import "env" "longname3338" (func $internal3338)) (import "env" "longname3339" (func $internal3339)) (import "env" "longname3340" (func $internal3340)) (import "env" "longname3341" (func $internal3341)) (import "env" "longname3342" (func $internal3342)) (import "env" "longname3343" (func $internal3343)) (import "env" "longname3344" (func $internal3344)) (import "env" "longname3345" (func $internal3345)) (import "env" "longname3346" (func $internal3346)) (import "env" "longname3347" (func $internal3347)) (import "env" "longname3348" (func $internal3348)) (import "env" "longname3349" (func $internal3349)) (import "env" "longname3350" (func $internal3350)) (import "env" "longname3351" (func $internal3351)) (import "env" "longname3352" (func $internal3352)) (import "env" "longname3353" (func $internal3353)) (import "env" "longname3354" (func $internal3354)) (import "env" "longname3355" (func $internal3355)) (import "env" "longname3356" (func $internal3356)) (import "env" "longname3357" (func $internal3357)) (import "env" "longname3358" (func $internal3358)) (import "env" "longname3359" (func $internal3359)) (import "env" "longname3360" (func $internal3360)) (import "env" "longname3361" (func $internal3361)) (import "env" "longname3362" (func $internal3362)) (import "env" "longname3363" (func $internal3363)) (import "env" "longname3364" (func $internal3364)) (import "env" "longname3365" (func $internal3365)) (import "env" "longname3366" (func $internal3366)) (import "env" "longname3367" (func $internal3367)) (import "env" "longname3368" (func $internal3368)) (import "env" "longname3369" (func $internal3369)) (import "env" "longname3370" (func $internal3370)) (import "env" "longname3371" (func $internal3371)) (import "env" "longname3372" (func $internal3372)) (import "env" "longname3373" (func $internal3373)) (import "env" "longname3374" (func $internal3374)) (import "env" "longname3375" (func $internal3375)) (import "env" "longname3376" (func $internal3376)) (import "env" "longname3377" (func $internal3377)) (import "env" "longname3378" (func $internal3378)) (import "env" "longname3379" (func $internal3379)) (import "env" "longname3380" (func $internal3380)) (import "env" "longname3381" (func $internal3381)) (import "env" "longname3382" (func $internal3382)) (import "env" "longname3383" (func $internal3383)) (import "env" "longname3384" (func $internal3384)) (import "env" "longname3385" (func $internal3385)) (import "env" "longname3386" (func $internal3386)) (import "env" "longname3387" (func $internal3387)) (import "env" "longname3388" (func $internal3388)) (import "env" "longname3389" (func $internal3389)) (import "env" "longname3390" (func $internal3390)) (import "env" "longname3391" (func $internal3391)) (import "env" "longname3392" (func $internal3392)) (import "env" "longname3393" (func $internal3393)) (import "env" "longname3394" (func $internal3394)) (import "env" "longname3395" (func $internal3395)) (import "env" "longname3396" (func $internal3396)) (import "env" "longname3397" (func $internal3397)) (import "env" "longname3398" (func $internal3398)) (import "env" "longname3399" (func $internal3399)) (import "env" "longname3400" (func $internal3400)) (import "env" "longname3401" (func $internal3401)) (import "env" "longname3402" (func $internal3402)) (import "env" "longname3403" (func $internal3403)) (import "env" "longname3404" (func $internal3404)) (import "env" "longname3405" (func $internal3405)) (import "env" "longname3406" (func $internal3406)) (import "env" "longname3407" (func $internal3407)) (import "env" "longname3408" (func $internal3408)) (import "env" "longname3409" (func $internal3409)) (import "env" "longname3410" (func $internal3410)) (import "env" "longname3411" (func $internal3411)) (import "env" "longname3412" (func $internal3412)) (import "env" "longname3413" (func $internal3413)) (import "env" "longname3414" (func $internal3414)) (import "env" "longname3415" (func $internal3415)) (import "env" "longname3416" (func $internal3416)) (import "env" "longname3417" (func $internal3417)) (import "env" "longname3418" (func $internal3418)) (import "env" "longname3419" (func $internal3419)) (import "env" "longname3420" (func $internal3420)) (import "env" "longname3421" (func $internal3421)) (import "env" "longname3422" (func $internal3422)) (import "env" "longname3423" (func $internal3423)) (import "env" "longname3424" (func $internal3424)) (import "env" "longname3425" (func $internal3425)) (import "env" "longname3426" (func $internal3426)) (import "env" "longname3427" (func $internal3427)) (import "env" "longname3428" (func $internal3428)) (import "env" "longname3429" (func $internal3429)) (import "env" "longname3430" (func $internal3430)) (import "env" "longname3431" (func $internal3431)) (import "env" "longname3432" (func $internal3432)) (import "env" "longname3433" (func $internal3433)) (import "env" "longname3434" (func $internal3434)) (import "env" "longname3435" (func $internal3435)) (import "env" "longname3436" (func $internal3436)) (import "env" "longname3437" (func $internal3437)) (import "env" "longname3438" (func $internal3438)) (import "env" "longname3439" (func $internal3439)) (import "env" "longname3440" (func $internal3440)) (import "env" "longname3441" (func $internal3441)) (import "env" "longname3442" (func $internal3442)) (import "env" "longname3443" (func $internal3443)) (import "env" "longname3444" (func $internal3444)) (import "env" "longname3445" (func $internal3445)) (import "env" "longname3446" (func $internal3446)) (import "env" "longname3447" (func $internal3447)) (import "env" "longname3448" (func $internal3448)) (import "env" "longname3449" (func $internal3449)) (import "env" "longname3450" (func $internal3450)) (import "env" "longname3451" (func $internal3451)) (import "env" "longname3452" (func $internal3452)) (import "env" "longname3453" (func $internal3453)) (import "env" "longname3454" (func $internal3454)) (import "env" "longname3455" (func $internal3455)) (import "env" "longname3456" (func $internal3456)) (import "env" "longname3457" (func $internal3457)) (import "env" "longname3458" (func $internal3458)) (import "env" "longname3459" (func $internal3459)) (import "env" "longname3460" (func $internal3460)) (import "env" "longname3461" (func $internal3461)) (import "env" "longname3462" (func $internal3462)) (import "env" "longname3463" (func $internal3463)) (import "env" "longname3464" (func $internal3464)) (import "env" "longname3465" (func $internal3465)) (import "env" "longname3466" (func $internal3466)) (import "env" "longname3467" (func $internal3467)) (import "env" "longname3468" (func $internal3468)) (import "env" "longname3469" (func $internal3469)) (import "env" "longname3470" (func $internal3470)) (import "env" "longname3471" (func $internal3471)) (import "env" "longname3472" (func $internal3472)) (import "env" "longname3473" (func $internal3473)) (import "env" "longname3474" (func $internal3474)) (import "env" "longname3475" (func $internal3475)) (import "env" "longname3476" (func $internal3476)) (import "env" "longname3477" (func $internal3477)) (import "env" "longname3478" (func $internal3478)) (import "env" "longname3479" (func $internal3479)) (import "env" "longname3480" (func $internal3480)) (import "env" "longname3481" (func $internal3481)) (import "env" "longname3482" (func $internal3482)) (import "env" "longname3483" (func $internal3483)) (import "env" "longname3484" (func $internal3484)) (import "env" "longname3485" (func $internal3485)) (import "env" "longname3486" (func $internal3486)) (import "env" "longname3487" (func $internal3487)) (import "env" "longname3488" (func $internal3488)) (import "env" "longname3489" (func $internal3489)) (import "env" "longname3490" (func $internal3490)) (import "env" "longname3491" (func $internal3491)) (import "env" "longname3492" (func $internal3492)) (import "env" "longname3493" (func $internal3493)) (import "env" "longname3494" (func $internal3494)) (import "env" "longname3495" (func $internal3495)) (import "env" "longname3496" (func $internal3496)) (import "env" "longname3497" (func $internal3497)) (import "env" "longname3498" (func $internal3498)) (import "env" "longname3499" (func $internal3499)) (import "env" "longname3500" (func $internal3500)) (import "env" "longname3501" (func $internal3501)) (import "env" "longname3502" (func $internal3502)) (import "env" "longname3503" (func $internal3503)) (import "env" "longname3504" (func $internal3504)) (import "env" "longname3505" (func $internal3505)) (import "env" "longname3506" (func $internal3506)) (import "env" "longname3507" (func $internal3507)) (import "env" "longname3508" (func $internal3508)) (import "env" "longname3509" (func $internal3509)) (import "env" "longname3510" (func $internal3510)) (import "env" "longname3511" (func $internal3511)) (import "env" "longname3512" (func $internal3512)) (import "env" "longname3513" (func $internal3513)) (import "env" "longname3514" (func $internal3514)) (import "env" "longname3515" (func $internal3515)) (import "env" "longname3516" (func $internal3516)) (import "env" "longname3517" (func $internal3517)) (import "env" "longname3518" (func $internal3518)) (import "env" "longname3519" (func $internal3519)) (import "env" "longname3520" (func $internal3520)) (import "env" "longname3521" (func $internal3521)) (import "env" "longname3522" (func $internal3522)) (import "env" "longname3523" (func $internal3523)) (import "env" "longname3524" (func $internal3524)) (import "env" "longname3525" (func $internal3525)) (import "env" "longname3526" (func $internal3526)) (import "env" "longname3527" (func $internal3527)) (import "env" "longname3528" (func $internal3528)) (import "env" "longname3529" (func $internal3529)) (import "env" "longname3530" (func $internal3530)) (import "env" "longname3531" (func $internal3531)) (import "env" "longname3532" (func $internal3532)) (import "env" "longname3533" (func $internal3533)) (import "env" "longname3534" (func $internal3534)) (import "env" "longname3535" (func $internal3535)) (import "env" "longname3536" (func $internal3536)) (import "env" "longname3537" (func $internal3537)) (import "env" "longname3538" (func $internal3538)) (import "env" "longname3539" (func $internal3539)) (import "env" "longname3540" (func $internal3540)) (import "env" "longname3541" (func $internal3541)) (import "env" "longname3542" (func $internal3542)) (import "env" "longname3543" (func $internal3543)) (import "env" "longname3544" (func $internal3544)) (import "env" "longname3545" (func $internal3545)) (import "env" "longname3546" (func $internal3546)) (import "env" "longname3547" (func $internal3547)) (import "env" "longname3548" (func $internal3548)) (import "env" "longname3549" (func $internal3549)) (import "env" "longname3550" (func $internal3550)) (import "env" "longname3551" (func $internal3551)) (import "env" "longname3552" (func $internal3552)) (import "env" "longname3553" (func $internal3553)) (import "env" "longname3554" (func $internal3554)) (import "env" "longname3555" (func $internal3555)) (import "env" "longname3556" (func $internal3556)) (import "env" "longname3557" (func $internal3557)) (import "env" "longname3558" (func $internal3558)) (import "env" "longname3559" (func $internal3559)) (import "env" "longname3560" (func $internal3560)) (import "env" "longname3561" (func $internal3561)) (import "env" "longname3562" (func $internal3562)) (import "env" "longname3563" (func $internal3563)) (import "env" "longname3564" (func $internal3564)) (import "env" "longname3565" (func $internal3565)) (import "env" "longname3566" (func $internal3566)) (import "env" "longname3567" (func $internal3567)) (import "env" "longname3568" (func $internal3568)) (import "env" "longname3569" (func $internal3569)) (import "env" "longname3570" (func $internal3570)) (import "env" "longname3571" (func $internal3571)) (import "env" "longname3572" (func $internal3572)) (import "env" "longname3573" (func $internal3573)) (import "env" "longname3574" (func $internal3574)) (import "env" "longname3575" (func $internal3575)) (import "env" "longname3576" (func $internal3576)) (import "env" "longname3577" (func $internal3577)) (import "env" "longname3578" (func $internal3578)) (import "env" "longname3579" (func $internal3579)) (import "env" "longname3580" (func $internal3580)) (import "env" "longname3581" (func $internal3581)) (import "env" "longname3582" (func $internal3582)) (import "env" "longname3583" (func $internal3583)) (import "env" "longname3584" (func $internal3584)) (import "env" "longname3585" (func $internal3585)) (import "env" "longname3586" (func $internal3586)) (import "env" "longname3587" (func $internal3587)) (import "env" "longname3588" (func $internal3588)) (import "env" "longname3589" (func $internal3589)) (import "env" "longname3590" (func $internal3590)) (import "env" "longname3591" (func $internal3591)) (import "env" "longname3592" (func $internal3592)) (import "env" "longname3593" (func $internal3593)) (import "env" "longname3594" (func $internal3594)) (import "env" "longname3595" (func $internal3595)) (import "env" "longname3596" (func $internal3596)) (import "env" "longname3597" (func $internal3597)) (import "env" "longname3598" (func $internal3598)) (import "env" "longname3599" (func $internal3599)) (import "env" "longname3600" (func $internal3600)) (import "env" "longname3601" (func $internal3601)) (import "env" "longname3602" (func $internal3602)) (import "env" "longname3603" (func $internal3603)) (import "env" "longname3604" (func $internal3604)) (import "env" "longname3605" (func $internal3605)) (import "env" "longname3606" (func $internal3606)) (import "env" "longname3607" (func $internal3607)) (import "env" "longname3608" (func $internal3608)) (import "env" "longname3609" (func $internal3609)) (import "env" "longname3610" (func $internal3610)) (import "env" "longname3611" (func $internal3611)) (import "env" "longname3612" (func $internal3612)) (import "env" "longname3613" (func $internal3613)) (import "env" "longname3614" (func $internal3614)) (import "env" "longname3615" (func $internal3615)) (import "env" "longname3616" (func $internal3616)) (import "env" "longname3617" (func $internal3617)) (import "env" "longname3618" (func $internal3618)) (import "env" "longname3619" (func $internal3619)) (import "env" "longname3620" (func $internal3620)) (import "env" "longname3621" (func $internal3621)) (import "env" "longname3622" (func $internal3622)) (import "env" "longname3623" (func $internal3623)) (import "env" "longname3624" (func $internal3624)) (import "env" "longname3625" (func $internal3625)) (import "env" "longname3626" (func $internal3626)) (import "env" "longname3627" (func $internal3627)) (import "env" "longname3628" (func $internal3628)) (import "env" "longname3629" (func $internal3629)) (import "env" "longname3630" (func $internal3630)) (import "env" "longname3631" (func $internal3631)) (import "env" "longname3632" (func $internal3632)) (import "env" "longname3633" (func $internal3633)) (import "env" "longname3634" (func $internal3634)) (import "env" "longname3635" (func $internal3635)) (import "env" "longname3636" (func $internal3636)) (import "env" "longname3637" (func $internal3637)) (import "env" "longname3638" (func $internal3638)) (import "env" "longname3639" (func $internal3639)) (import "env" "longname3640" (func $internal3640)) (import "env" "longname3641" (func $internal3641)) (import "env" "longname3642" (func $internal3642)) (import "env" "longname3643" (func $internal3643)) (import "env" "longname3644" (func $internal3644)) (import "env" "longname3645" (func $internal3645)) (import "env" "longname3646" (func $internal3646)) (import "env" "longname3647" (func $internal3647)) (import "env" "longname3648" (func $internal3648)) (import "env" "longname3649" (func $internal3649)) (import "env" "longname3650" (func $internal3650)) (import "env" "longname3651" (func $internal3651)) (import "env" "longname3652" (func $internal3652)) (import "env" "longname3653" (func $internal3653)) (import "env" "longname3654" (func $internal3654)) (import "env" "longname3655" (func $internal3655)) (import "env" "longname3656" (func $internal3656)) (import "env" "longname3657" (func $internal3657)) (import "env" "longname3658" (func $internal3658)) (import "env" "longname3659" (func $internal3659)) (import "env" "longname3660" (func $internal3660)) (import "env" "longname3661" (func $internal3661)) (import "env" "longname3662" (func $internal3662)) (import "env" "longname3663" (func $internal3663)) (import "env" "longname3664" (func $internal3664)) (import "env" "longname3665" (func $internal3665)) (import "env" "longname3666" (func $internal3666)) (import "env" "longname3667" (func $internal3667)) (import "env" "longname3668" (func $internal3668)) (import "env" "longname3669" (func $internal3669)) (import "env" "longname3670" (func $internal3670)) (import "env" "longname3671" (func $internal3671)) (import "env" "longname3672" (func $internal3672)) (import "env" "longname3673" (func $internal3673)) (import "env" "longname3674" (func $internal3674)) (import "env" "longname3675" (func $internal3675)) (import "env" "longname3676" (func $internal3676)) (import "env" "longname3677" (func $internal3677)) (import "env" "longname3678" (func $internal3678)) (import "env" "longname3679" (func $internal3679)) (import "env" "longname3680" (func $internal3680)) (import "env" "longname3681" (func $internal3681)) (import "env" "longname3682" (func $internal3682)) (import "env" "longname3683" (func $internal3683)) (import "env" "longname3684" (func $internal3684)) (import "env" "longname3685" (func $internal3685)) (import "env" "longname3686" (func $internal3686)) (import "env" "longname3687" (func $internal3687)) (import "env" "longname3688" (func $internal3688)) (import "env" "longname3689" (func $internal3689)) (import "env" "longname3690" (func $internal3690)) (import "env" "longname3691" (func $internal3691)) (import "env" "longname3692" (func $internal3692)) (import "env" "longname3693" (func $internal3693)) (import "env" "longname3694" (func $internal3694)) (import "env" "longname3695" (func $internal3695)) (import "env" "longname3696" (func $internal3696)) (import "env" "longname3697" (func $internal3697)) (import "env" "longname3698" (func $internal3698)) (import "env" "longname3699" (func $internal3699)) (import "env" "longname3700" (func $internal3700)) (import "env" "longname3701" (func $internal3701)) (import "env" "longname3702" (func $internal3702)) (import "env" "longname3703" (func $internal3703)) (import "env" "longname3704" (func $internal3704)) (import "env" "longname3705" (func $internal3705)) (import "env" "longname3706" (func $internal3706)) (import "env" "longname3707" (func $internal3707)) (import "env" "longname3708" (func $internal3708)) (import "env" "longname3709" (func $internal3709)) (import "env" "longname3710" (func $internal3710)) (import "env" "longname3711" (func $internal3711)) (import "env" "longname3712" (func $internal3712)) (import "env" "longname3713" (func $internal3713)) (import "env" "longname3714" (func $internal3714)) (import "env" "longname3715" (func $internal3715)) (import "env" "longname3716" (func $internal3716)) (import "env" "longname3717" (func $internal3717)) (import "env" "longname3718" (func $internal3718)) (import "env" "longname3719" (func $internal3719)) (import "env" "longname3720" (func $internal3720)) (import "env" "longname3721" (func $internal3721)) (import "env" "longname3722" (func $internal3722)) (import "env" "longname3723" (func $internal3723)) (import "env" "longname3724" (func $internal3724)) (import "env" "longname3725" (func $internal3725)) (import "env" "longname3726" (func $internal3726)) (import "env" "longname3727" (func $internal3727)) (import "env" "longname3728" (func $internal3728)) (import "env" "longname3729" (func $internal3729)) (import "env" "longname3730" (func $internal3730)) (import "env" "longname3731" (func $internal3731)) (import "env" "longname3732" (func $internal3732)) (import "env" "longname3733" (func $internal3733)) (import "env" "longname3734" (func $internal3734)) (import "env" "longname3735" (func $internal3735)) (import "env" "longname3736" (func $internal3736)) (import "env" "longname3737" (func $internal3737)) (import "env" "longname3738" (func $internal3738)) (import "env" "longname3739" (func $internal3739)) (import "env" "longname3740" (func $internal3740)) (import "env" "longname3741" (func $internal3741)) (import "env" "longname3742" (func $internal3742)) (import "env" "longname3743" (func $internal3743)) (import "env" "longname3744" (func $internal3744)) (import "env" "longname3745" (func $internal3745)) (import "env" "longname3746" (func $internal3746)) (import "env" "longname3747" (func $internal3747)) (import "env" "longname3748" (func $internal3748)) (import "env" "longname3749" (func $internal3749)) (import "env" "longname3750" (func $internal3750)) (import "env" "longname3751" (func $internal3751)) (import "env" "longname3752" (func $internal3752)) (import "env" "longname3753" (func $internal3753)) (import "env" "longname3754" (func $internal3754)) (import "env" "longname3755" (func $internal3755)) (import "env" "longname3756" (func $internal3756)) (import "env" "longname3757" (func $internal3757)) (import "env" "longname3758" (func $internal3758)) (import "env" "longname3759" (func $internal3759)) (import "env" "longname3760" (func $internal3760)) (import "env" "longname3761" (func $internal3761)) (import "env" "longname3762" (func $internal3762)) (import "env" "longname3763" (func $internal3763)) (import "env" "longname3764" (func $internal3764)) (import "env" "longname3765" (func $internal3765)) (import "env" "longname3766" (func $internal3766)) (import "env" "longname3767" (func $internal3767)) (import "env" "longname3768" (func $internal3768)) (import "env" "longname3769" (func $internal3769)) (import "env" "longname3770" (func $internal3770)) (import "env" "longname3771" (func $internal3771)) (import "env" "longname3772" (func $internal3772)) (import "env" "longname3773" (func $internal3773)) (import "env" "longname3774" (func $internal3774)) (import "env" "longname3775" (func $internal3775)) (import "env" "longname3776" (func $internal3776)) (import "env" "longname3777" (func $internal3777)) (import "env" "longname3778" (func $internal3778)) (import "env" "longname3779" (func $internal3779)) (import "env" "longname3780" (func $internal3780)) (import "env" "longname3781" (func $internal3781)) (import "env" "longname3782" (func $internal3782)) (import "env" "longname3783" (func $internal3783)) (import "env" "longname3784" (func $internal3784)) (import "env" "longname3785" (func $internal3785)) (import "env" "longname3786" (func $internal3786)) (import "env" "longname3787" (func $internal3787)) (import "env" "longname3788" (func $internal3788)) (import "env" "longname3789" (func $internal3789)) (import "env" "longname3790" (func $internal3790)) (import "env" "longname3791" (func $internal3791)) (import "env" "longname3792" (func $internal3792)) (import "env" "longname3793" (func $internal3793)) (import "env" "longname3794" (func $internal3794)) (import "env" "longname3795" (func $internal3795)) (import "env" "longname3796" (func $internal3796)) (import "env" "longname3797" (func $internal3797)) (import "env" "longname3798" (func $internal3798)) (import "env" "longname3799" (func $internal3799)) (import "env" "longname3800" (func $internal3800)) (import "env" "longname3801" (func $internal3801)) (import "env" "longname3802" (func $internal3802)) (import "env" "longname3803" (func $internal3803)) (import "env" "longname3804" (func $internal3804)) (import "env" "longname3805" (func $internal3805)) (import "env" "longname3806" (func $internal3806)) (import "env" "longname3807" (func $internal3807)) (import "env" "longname3808" (func $internal3808)) (import "env" "longname3809" (func $internal3809)) (import "env" "longname3810" (func $internal3810)) (import "env" "longname3811" (func $internal3811)) (import "env" "longname3812" (func $internal3812)) (import "env" "longname3813" (func $internal3813)) (import "env" "longname3814" (func $internal3814)) (import "env" "longname3815" (func $internal3815)) (import "env" "longname3816" (func $internal3816)) (import "env" "longname3817" (func $internal3817)) (import "env" "longname3818" (func $internal3818)) (import "env" "longname3819" (func $internal3819)) (import "env" "longname3820" (func $internal3820)) (import "env" "longname3821" (func $internal3821)) (import "env" "longname3822" (func $internal3822)) (import "env" "longname3823" (func $internal3823)) (import "env" "longname3824" (func $internal3824)) (import "env" "longname3825" (func $internal3825)) (import "env" "longname3826" (func $internal3826)) (import "env" "longname3827" (func $internal3827)) (import "env" "longname3828" (func $internal3828)) (import "env" "longname3829" (func $internal3829)) (import "env" "longname3830" (func $internal3830)) (import "env" "longname3831" (func $internal3831)) (import "env" "longname3832" (func $internal3832)) (import "env" "longname3833" (func $internal3833)) (import "env" "longname3834" (func $internal3834)) (import "env" "longname3835" (func $internal3835)) (import "env" "longname3836" (func $internal3836)) (import "env" "longname3837" (func $internal3837)) (import "env" "longname3838" (func $internal3838)) (import "env" "longname3839" (func $internal3839)) (import "env" "longname3840" (func $internal3840)) (import "env" "longname3841" (func $internal3841)) (import "env" "longname3842" (func $internal3842)) (import "env" "longname3843" (func $internal3843)) (import "env" "longname3844" (func $internal3844)) (import "env" "longname3845" (func $internal3845)) (import "env" "longname3846" (func $internal3846)) (import "env" "longname3847" (func $internal3847)) (import "env" "longname3848" (func $internal3848)) (import "env" "longname3849" (func $internal3849)) (import "env" "longname3850" (func $internal3850)) (import "env" "longname3851" (func $internal3851)) (import "env" "longname3852" (func $internal3852)) (import "env" "longname3853" (func $internal3853)) (import "env" "longname3854" (func $internal3854)) (import "env" "longname3855" (func $internal3855)) (import "env" "longname3856" (func $internal3856)) (import "env" "longname3857" (func $internal3857)) (import "env" "longname3858" (func $internal3858)) (import "env" "longname3859" (func $internal3859)) (import "env" "longname3860" (func $internal3860)) (import "env" "longname3861" (func $internal3861)) (import "env" "longname3862" (func $internal3862)) (import "env" "longname3863" (func $internal3863)) (import "env" "longname3864" (func $internal3864)) (import "env" "longname3865" (func $internal3865)) (import "env" "longname3866" (func $internal3866)) (import "env" "longname3867" (func $internal3867)) (import "env" "longname3868" (func $internal3868)) (import "env" "longname3869" (func $internal3869)) (import "env" "longname3870" (func $internal3870)) (import "env" "longname3871" (func $internal3871)) (import "env" "longname3872" (func $internal3872)) (import "env" "longname3873" (func $internal3873)) (import "env" "longname3874" (func $internal3874)) (import "env" "longname3875" (func $internal3875)) (import "env" "longname3876" (func $internal3876)) (import "env" "longname3877" (func $internal3877)) (import "env" "longname3878" (func $internal3878)) (import "env" "longname3879" (func $internal3879)) (import "env" "longname3880" (func $internal3880)) (import "env" "longname3881" (func $internal3881)) (import "env" "longname3882" (func $internal3882)) (import "env" "longname3883" (func $internal3883)) (import "env" "longname3884" (func $internal3884)) (import "env" "longname3885" (func $internal3885)) (import "env" "longname3886" (func $internal3886)) (import "env" "longname3887" (func $internal3887)) (import "env" "longname3888" (func $internal3888)) (import "env" "longname3889" (func $internal3889)) (import "env" "longname3890" (func $internal3890)) (import "env" "longname3891" (func $internal3891)) (import "env" "longname3892" (func $internal3892)) (import "env" "longname3893" (func $internal3893)) (import "env" "longname3894" (func $internal3894)) (import "env" "longname3895" (func $internal3895)) (import "env" "longname3896" (func $internal3896)) (import "env" "longname3897" (func $internal3897)) (import "env" "longname3898" (func $internal3898)) (import "env" "longname3899" (func $internal3899)) (import "env" "longname3900" (func $internal3900)) (import "env" "longname3901" (func $internal3901)) (import "env" "longname3902" (func $internal3902)) (import "env" "longname3903" (func $internal3903)) (import "env" "longname3904" (func $internal3904)) (import "env" "longname3905" (func $internal3905)) (import "env" "longname3906" (func $internal3906)) (import "env" "longname3907" (func $internal3907)) (import "env" "longname3908" (func $internal3908)) (import "env" "longname3909" (func $internal3909)) (import "env" "longname3910" (func $internal3910)) (import "env" "longname3911" (func $internal3911)) (import "env" "longname3912" (func $internal3912)) (import "env" "longname3913" (func $internal3913)) (import "env" "longname3914" (func $internal3914)) (import "env" "longname3915" (func $internal3915)) (import "env" "longname3916" (func $internal3916)) (import "env" "longname3917" (func $internal3917)) (import "env" "longname3918" (func $internal3918)) (import "env" "longname3919" (func $internal3919)) (import "env" "longname3920" (func $internal3920)) (import "env" "longname3921" (func $internal3921)) (import "env" "longname3922" (func $internal3922)) (import "env" "longname3923" (func $internal3923)) (import "env" "longname3924" (func $internal3924)) (import "env" "longname3925" (func $internal3925)) (import "env" "longname3926" (func $internal3926)) (import "env" "longname3927" (func $internal3927)) (import "env" "longname3928" (func $internal3928)) (import "env" "longname3929" (func $internal3929)) (import "env" "longname3930" (func $internal3930)) (import "env" "longname3931" (func $internal3931)) (import "env" "longname3932" (func $internal3932)) (import "env" "longname3933" (func $internal3933)) (import "env" "longname3934" (func $internal3934)) (import "env" "longname3935" (func $internal3935)) (import "env" "longname3936" (func $internal3936)) (import "env" "longname3937" (func $internal3937)) (import "env" "longname3938" (func $internal3938)) (import "env" "longname3939" (func $internal3939)) (import "env" "longname3940" (func $internal3940)) (import "env" "longname3941" (func $internal3941)) (import "env" "longname3942" (func $internal3942)) (import "env" "longname3943" (func $internal3943)) (import "env" "longname3944" (func $internal3944)) (import "env" "longname3945" (func $internal3945)) (import "env" "longname3946" (func $internal3946)) (import "env" "longname3947" (func $internal3947)) (import "env" "longname3948" (func $internal3948)) (import "env" "longname3949" (func $internal3949)) (import "env" "longname3950" (func $internal3950)) (import "env" "longname3951" (func $internal3951)) (import "env" "longname3952" (func $internal3952)) (import "env" "longname3953" (func $internal3953)) (import "env" "longname3954" (func $internal3954)) (import "env" "longname3955" (func $internal3955)) (import "env" "longname3956" (func $internal3956)) (import "env" "longname3957" (func $internal3957)) (import "env" "longname3958" (func $internal3958)) (import "env" "longname3959" (func $internal3959)) (import "env" "longname3960" (func $internal3960)) (import "env" "longname3961" (func $internal3961)) (import "env" "longname3962" (func $internal3962)) (import "env" "longname3963" (func $internal3963)) (import "env" "longname3964" (func $internal3964)) (import "env" "longname3965" (func $internal3965)) (import "env" "longname3966" (func $internal3966)) (import "env" "longname3967" (func $internal3967)) (import "env" "longname3968" (func $internal3968)) (import "env" "longname3969" (func $internal3969)) (import "env" "longname3970" (func $internal3970)) (import "env" "longname3971" (func $internal3971)) (import "env" "longname3972" (func $internal3972)) (import "env" "longname3973" (func $internal3973)) (import "env" "longname3974" (func $internal3974)) (import "env" "longname3975" (func $internal3975)) (import "env" "longname3976" (func $internal3976)) (import "env" "longname3977" (func $internal3977)) (import "env" "longname3978" (func $internal3978)) (import "env" "longname3979" (func $internal3979)) (import "env" "longname3980" (func $internal3980)) (import "env" "longname3981" (func $internal3981)) (import "env" "longname3982" (func $internal3982)) (import "env" "longname3983" (func $internal3983)) (import "env" "longname3984" (func $internal3984)) (import "env" "longname3985" (func $internal3985)) (import "env" "longname3986" (func $internal3986)) (import "env" "longname3987" (func $internal3987)) (import "env" "longname3988" (func $internal3988)) (import "env" "longname3989" (func $internal3989)) (import "env" "longname3990" (func $internal3990)) (import "env" "longname3991" (func $internal3991)) (import "env" "longname3992" (func $internal3992)) (import "env" "longname3993" (func $internal3993)) (import "env" "longname3994" (func $internal3994)) (import "env" "longname3995" (func $internal3995)) (import "env" "longname3996" (func $internal3996)) (import "env" "longname3997" (func $internal3997)) (import "env" "longname3998" (func $internal3998)) (import "env" "longname3999" (func $internal3999)) (import "env" "longname4000" (func $internal4000)) (import "env" "longname4001" (func $internal4001)) (import "env" "longname4002" (func $internal4002)) (import "env" "longname4003" (func $internal4003)) (import "env" "longname4004" (func $internal4004)) (import "env" "longname4005" (func $internal4005)) (import "env" "longname4006" (func $internal4006)) (import "env" "longname4007" (func $internal4007)) (import "env" "longname4008" (func $internal4008)) (import "env" "longname4009" (func $internal4009)) (import "env" "longname4010" (func $internal4010)) (import "env" "longname4011" (func $internal4011)) (import "env" "longname4012" (func $internal4012)) (import "env" "longname4013" (func $internal4013)) (import "env" "longname4014" (func $internal4014)) (import "env" "longname4015" (func $internal4015)) (import "env" "longname4016" (func $internal4016)) (import "env" "longname4017" (func $internal4017)) (import "env" "longname4018" (func $internal4018)) (import "env" "longname4019" (func $internal4019)) (import "env" "longname4020" (func $internal4020)) (import "env" "longname4021" (func $internal4021)) (import "env" "longname4022" (func $internal4022)) (import "env" "longname4023" (func $internal4023)) (import "env" "longname4024" (func $internal4024)) (import "env" "longname4025" (func $internal4025)) (import "env" "longname4026" (func $internal4026)) (import "env" "longname4027" (func $internal4027)) (import "env" "longname4028" (func $internal4028)) (import "env" "longname4029" (func $internal4029)) (import "env" "longname4030" (func $internal4030)) (import "env" "longname4031" (func $internal4031)) (import "env" "longname4032" (func $internal4032)) (import "env" "longname4033" (func $internal4033)) (import "env" "longname4034" (func $internal4034)) (import "env" "longname4035" (func $internal4035)) (import "env" "longname4036" (func $internal4036)) (import "env" "longname4037" (func $internal4037)) (import "env" "longname4038" (func $internal4038)) (import "env" "longname4039" (func $internal4039)) (import "env" "longname4040" (func $internal4040)) (import "env" "longname4041" (func $internal4041)) (import "env" "longname4042" (func $internal4042)) (import "env" "longname4043" (func $internal4043)) (import "env" "longname4044" (func $internal4044)) (import "env" "longname4045" (func $internal4045)) (import "env" "longname4046" (func $internal4046)) (import "env" "longname4047" (func $internal4047)) (import "env" "longname4048" (func $internal4048)) (import "env" "longname4049" (func $internal4049)) (import "env" "longname4050" (func $internal4050)) (import "env" "longname4051" (func $internal4051)) (import "env" "longname4052" (func $internal4052)) (import "env" "longname4053" (func $internal4053)) (import "env" "longname4054" (func $internal4054)) (import "env" "longname4055" (func $internal4055)) (import "env" "longname4056" (func $internal4056)) (import "env" "longname4057" (func $internal4057)) (import "env" "longname4058" (func $internal4058)) (import "env" "longname4059" (func $internal4059)) (import "env" "longname4060" (func $internal4060)) (import "env" "longname4061" (func $internal4061)) (import "env" "longname4062" (func $internal4062)) (import "env" "longname4063" (func $internal4063)) (import "env" "longname4064" (func $internal4064)) (import "env" "longname4065" (func $internal4065)) (import "env" "longname4066" (func $internal4066)) (import "env" "longname4067" (func $internal4067)) (import "env" "longname4068" (func $internal4068)) (import "env" "longname4069" (func $internal4069)) (import "env" "longname4070" (func $internal4070)) (import "env" "longname4071" (func $internal4071)) (import "env" "longname4072" (func $internal4072)) (import "env" "longname4073" (func $internal4073)) (import "env" "longname4074" (func $internal4074)) (import "env" "longname4075" (func $internal4075)) (import "env" "longname4076" (func $internal4076)) (import "env" "longname4077" (func $internal4077)) (import "env" "longname4078" (func $internal4078)) (import "env" "longname4079" (func $internal4079)) (import "env" "longname4080" (func $internal4080)) (import "env" "longname4081" (func $internal4081)) (import "env" "longname4082" (func $internal4082)) (import "env" "longname4083" (func $internal4083)) (import "env" "longname4084" (func $internal4084)) (import "env" "longname4085" (func $internal4085)) (import "env" "longname4086" (func $internal4086)) (import "env" "longname4087" (func $internal4087)) (import "env" "longname4088" (func $internal4088)) (import "env" "longname4089" (func $internal4089)) (import "env" "longname4090" (func $internal4090)) (import "env" "longname4091" (func $internal4091)) (import "env" "longname4092" (func $internal4092)) (import "env" "longname4093" (func $internal4093)) (import "env" "longname4094" (func $internal4094)) (import "env" "longname4095" (func $internal4095)) (import "env" "longname4096" (func $internal4096)) (import "env" "longname4097" (func $internal4097)) (import "env" "longname4098" (func $internal4098)) (import "env" "longname4099" (func $internal4099)) (import "env" "longname4100" (func $internal4100)) (import "env" "longname4101" (func $internal4101)) (import "env" "longname4102" (func $internal4102)) (import "env" "longname4103" (func $internal4103)) (import "env" "longname4104" (func $internal4104)) (import "env" "longname4105" (func $internal4105)) (import "env" "longname4106" (func $internal4106)) (import "env" "longname4107" (func $internal4107)) (import "env" "longname4108" (func $internal4108)) (import "env" "longname4109" (func $internal4109)) (import "env" "longname4110" (func $internal4110)) (import "env" "longname4111" (func $internal4111)) (import "env" "longname4112" (func $internal4112)) (import "env" "longname4113" (func $internal4113)) (import "env" "longname4114" (func $internal4114)) (import "env" "longname4115" (func $internal4115)) (import "env" "longname4116" (func $internal4116)) (import "env" "longname4117" (func $internal4117)) (import "env" "longname4118" (func $internal4118)) (import "env" "longname4119" (func $internal4119)) (import "env" "longname4120" (func $internal4120)) (import "env" "longname4121" (func $internal4121)) (import "env" "longname4122" (func $internal4122)) (import "env" "longname4123" (func $internal4123)) (import "env" "longname4124" (func $internal4124)) (import "env" "longname4125" (func $internal4125)) (import "env" "longname4126" (func $internal4126)) (import "env" "longname4127" (func $internal4127)) (import "env" "longname4128" (func $internal4128)) (import "env" "longname4129" (func $internal4129)) (import "env" "longname4130" (func $internal4130)) (import "env" "longname4131" (func $internal4131)) (import "env" "longname4132" (func $internal4132)) (import "env" "longname4133" (func $internal4133)) (import "env" "longname4134" (func $internal4134)) (import "env" "longname4135" (func $internal4135)) (import "env" "longname4136" (func $internal4136)) (import "env" "longname4137" (func $internal4137)) (import "env" "longname4138" (func $internal4138)) (import "env" "longname4139" (func $internal4139)) (import "env" "longname4140" (func $internal4140)) (import "env" "longname4141" (func $internal4141)) (import "env" "longname4142" (func $internal4142)) (import "env" "longname4143" (func $internal4143)) (import "env" "longname4144" (func $internal4144)) (import "env" "longname4145" (func $internal4145)) (import "env" "longname4146" (func $internal4146)) (import "env" "longname4147" (func $internal4147)) (import "env" "longname4148" (func $internal4148)) (import "env" "longname4149" (func $internal4149)) (import "env" "longname4150" (func $internal4150)) (import "env" "longname4151" (func $internal4151)) (import "env" "longname4152" (func $internal4152)) (import "env" "longname4153" (func $internal4153)) (import "env" "longname4154" (func $internal4154)) (import "env" "longname4155" (func $internal4155)) (import "env" "longname4156" (func $internal4156)) (import "env" "longname4157" (func $internal4157)) (import "env" "longname4158" (func $internal4158)) (import "env" "longname4159" (func $internal4159)) (import "env" "longname4160" (func $internal4160)) (import "env" "longname4161" (func $internal4161)) (import "env" "longname4162" (func $internal4162)) (import "env" "longname4163" (func $internal4163)) (import "env" "longname4164" (func $internal4164)) (import "env" "longname4165" (func $internal4165)) (import "env" "longname4166" (func $internal4166)) (import "env" "longname4167" (func $internal4167)) (import "env" "longname4168" (func $internal4168)) (import "env" "longname4169" (func $internal4169)) (import "env" "longname4170" (func $internal4170)) (import "env" "longname4171" (func $internal4171)) (import "env" "longname4172" (func $internal4172)) (import "env" "longname4173" (func $internal4173)) (import "env" "longname4174" (func $internal4174)) (import "env" "longname4175" (func $internal4175)) (import "env" "longname4176" (func $internal4176)) (import "env" "longname4177" (func $internal4177)) (import "env" "longname4178" (func $internal4178)) (import "env" "longname4179" (func $internal4179)) (import "env" "longname4180" (func $internal4180)) (import "env" "longname4181" (func $internal4181)) (import "env" "longname4182" (func $internal4182)) (import "env" "longname4183" (func $internal4183)) (import "env" "longname4184" (func $internal4184)) (import "env" "longname4185" (func $internal4185)) (import "env" "longname4186" (func $internal4186)) (import "env" "longname4187" (func $internal4187)) (import "env" "longname4188" (func $internal4188)) (import "env" "longname4189" (func $internal4189)) (import "env" "longname4190" (func $internal4190)) (import "env" "longname4191" (func $internal4191)) (import "env" "longname4192" (func $internal4192)) (import "env" "longname4193" (func $internal4193)) (import "env" "longname4194" (func $internal4194)) (import "env" "longname4195" (func $internal4195)) (import "env" "longname4196" (func $internal4196)) (import "env" "longname4197" (func $internal4197)) (import "env" "longname4198" (func $internal4198)) (import "env" "longname4199" (func $internal4199)) (import "env" "longname4200" (func $internal4200)) (import "env" "longname4201" (func $internal4201)) (import "env" "longname4202" (func $internal4202)) (import "env" "longname4203" (func $internal4203)) (import "env" "longname4204" (func $internal4204)) (import "env" "longname4205" (func $internal4205)) (import "env" "longname4206" (func $internal4206)) (import "env" "longname4207" (func $internal4207)) (import "env" "longname4208" (func $internal4208)) (import "env" "longname4209" (func $internal4209)) (import "env" "longname4210" (func $internal4210)) (import "env" "longname4211" (func $internal4211)) (import "env" "longname4212" (func $internal4212)) (import "env" "longname4213" (func $internal4213)) (import "env" "longname4214" (func $internal4214)) (import "env" "longname4215" (func $internal4215)) (import "env" "longname4216" (func $internal4216)) (import "env" "longname4217" (func $internal4217)) (import "env" "longname4218" (func $internal4218)) (import "env" "longname4219" (func $internal4219)) (import "env" "longname4220" (func $internal4220)) (import "env" "longname4221" (func $internal4221)) (import "env" "longname4222" (func $internal4222)) (import "env" "longname4223" (func $internal4223)) (import "env" "longname4224" (func $internal4224)) (import "env" "longname4225" (func $internal4225)) (import "env" "longname4226" (func $internal4226)) (import "env" "longname4227" (func $internal4227)) (import "env" "longname4228" (func $internal4228)) (import "env" "longname4229" (func $internal4229)) (import "env" "longname4230" (func $internal4230)) (import "env" "longname4231" (func $internal4231)) (import "env" "longname4232" (func $internal4232)) (import "env" "longname4233" (func $internal4233)) (import "env" "longname4234" (func $internal4234)) (import "env" "longname4235" (func $internal4235)) (import "env" "longname4236" (func $internal4236)) (import "env" "longname4237" (func $internal4237)) (import "env" "longname4238" (func $internal4238)) (import "env" "longname4239" (func $internal4239)) (import "env" "longname4240" (func $internal4240)) (import "env" "longname4241" (func $internal4241)) (import "env" "longname4242" (func $internal4242)) (import "env" "longname4243" (func $internal4243)) (import "env" "longname4244" (func $internal4244)) (import "env" "longname4245" (func $internal4245)) (import "env" "longname4246" (func $internal4246)) (import "env" "longname4247" (func $internal4247)) (import "env" "longname4248" (func $internal4248)) (import "env" "longname4249" (func $internal4249)) (import "env" "longname4250" (func $internal4250)) (import "env" "longname4251" (func $internal4251)) (import "env" "longname4252" (func $internal4252)) (import "env" "longname4253" (func $internal4253)) (import "env" "longname4254" (func $internal4254)) (import "env" "longname4255" (func $internal4255)) (import "env" "longname4256" (func $internal4256)) (import "env" "longname4257" (func $internal4257)) (import "env" "longname4258" (func $internal4258)) (import "env" "longname4259" (func $internal4259)) (import "env" "longname4260" (func $internal4260)) (import "env" "longname4261" (func $internal4261)) (import "env" "longname4262" (func $internal4262)) (import "env" "longname4263" (func $internal4263)) (import "env" "longname4264" (func $internal4264)) (import "env" "longname4265" (func $internal4265)) (import "env" "longname4266" (func $internal4266)) (import "env" "longname4267" (func $internal4267)) (import "env" "longname4268" (func $internal4268)) (import "env" "longname4269" (func $internal4269)) (import "env" "longname4270" (func $internal4270)) (import "env" "longname4271" (func $internal4271)) (import "env" "longname4272" (func $internal4272)) (import "env" "longname4273" (func $internal4273)) (import "env" "longname4274" (func $internal4274)) (import "env" "longname4275" (func $internal4275)) (import "env" "longname4276" (func $internal4276)) (import "env" "longname4277" (func $internal4277)) (import "env" "longname4278" (func $internal4278)) (import "env" "longname4279" (func $internal4279)) (import "env" "longname4280" (func $internal4280)) (import "env" "longname4281" (func $internal4281)) (import "env" "longname4282" (func $internal4282)) (import "env" "longname4283" (func $internal4283)) (import "env" "longname4284" (func $internal4284)) (import "env" "longname4285" (func $internal4285)) (import "env" "longname4286" (func $internal4286)) (import "env" "longname4287" (func $internal4287)) (import "env" "longname4288" (func $internal4288)) (import "env" "longname4289" (func $internal4289)) (import "env" "longname4290" (func $internal4290)) (import "env" "longname4291" (func $internal4291)) (import "env" "longname4292" (func $internal4292)) (import "env" "longname4293" (func $internal4293)) (import "env" "longname4294" (func $internal4294)) (import "env" "longname4295" (func $internal4295)) (import "env" "longname4296" (func $internal4296)) (import "env" "longname4297" (func $internal4297)) (import "env" "longname4298" (func $internal4298)) (import "env" "longname4299" (func $internal4299)) (import "env" "longname4300" (func $internal4300)) (import "env" "longname4301" (func $internal4301)) (import "env" "longname4302" (func $internal4302)) (import "env" "longname4303" (func $internal4303)) (import "env" "longname4304" (func $internal4304)) (import "env" "longname4305" (func $internal4305)) (import "env" "longname4306" (func $internal4306)) (import "env" "longname4307" (func $internal4307)) (import "env" "longname4308" (func $internal4308)) (import "env" "longname4309" (func $internal4309)) (import "env" "longname4310" (func $internal4310)) (import "env" "longname4311" (func $internal4311)) (import "env" "longname4312" (func $internal4312)) (import "env" "longname4313" (func $internal4313)) (import "env" "longname4314" (func $internal4314)) (import "env" "longname4315" (func $internal4315)) (import "env" "longname4316" (func $internal4316)) (import "env" "longname4317" (func $internal4317)) (import "env" "longname4318" (func $internal4318)) (import "env" "longname4319" (func $internal4319)) (import "env" "longname4320" (func $internal4320)) (import "env" "longname4321" (func $internal4321)) (import "env" "longname4322" (func $internal4322)) (import "env" "longname4323" (func $internal4323)) (import "env" "longname4324" (func $internal4324)) (import "env" "longname4325" (func $internal4325)) (import "env" "longname4326" (func $internal4326)) (import "env" "longname4327" (func $internal4327)) (import "env" "longname4328" (func $internal4328)) (import "env" "longname4329" (func $internal4329)) (import "env" "longname4330" (func $internal4330)) (import "env" "longname4331" (func $internal4331)) (import "env" "longname4332" (func $internal4332)) (import "env" "longname4333" (func $internal4333)) (import "env" "longname4334" (func $internal4334)) (import "env" "longname4335" (func $internal4335)) (import "env" "longname4336" (func $internal4336)) (import "env" "longname4337" (func $internal4337)) (import "env" "longname4338" (func $internal4338)) (import "env" "longname4339" (func $internal4339)) (import "env" "longname4340" (func $internal4340)) (import "env" "longname4341" (func $internal4341)) (import "env" "longname4342" (func $internal4342)) (import "env" "longname4343" (func $internal4343)) (import "env" "longname4344" (func $internal4344)) (import "env" "longname4345" (func $internal4345)) (import "env" "longname4346" (func $internal4346)) (import "env" "longname4347" (func $internal4347)) (import "env" "longname4348" (func $internal4348)) (import "env" "longname4349" (func $internal4349)) (import "env" "longname4350" (func $internal4350)) (import "env" "longname4351" (func $internal4351)) (import "env" "longname4352" (func $internal4352)) (import "env" "longname4353" (func $internal4353)) (import "env" "longname4354" (func $internal4354)) (import "env" "longname4355" (func $internal4355)) (import "env" "longname4356" (func $internal4356)) (import "env" "longname4357" (func $internal4357)) (import "env" "longname4358" (func $internal4358)) (import "env" "longname4359" (func $internal4359)) (import "env" "longname4360" (func $internal4360)) (import "env" "longname4361" (func $internal4361)) (import "env" "longname4362" (func $internal4362)) (import "env" "longname4363" (func $internal4363)) (import "env" "longname4364" (func $internal4364)) (import "env" "longname4365" (func $internal4365)) (import "env" "longname4366" (func $internal4366)) (import "env" "longname4367" (func $internal4367)) (import "env" "longname4368" (func $internal4368)) (import "env" "longname4369" (func $internal4369)) (import "env" "longname4370" (func $internal4370)) (import "env" "longname4371" (func $internal4371)) (import "env" "longname4372" (func $internal4372)) (import "env" "longname4373" (func $internal4373)) (import "env" "longname4374" (func $internal4374)) (import "env" "longname4375" (func $internal4375)) (import "env" "longname4376" (func $internal4376)) (import "env" "longname4377" (func $internal4377)) (import "env" "longname4378" (func $internal4378)) (import "env" "longname4379" (func $internal4379)) (import "env" "longname4380" (func $internal4380)) (import "env" "longname4381" (func $internal4381)) (import "env" "longname4382" (func $internal4382)) (import "env" "longname4383" (func $internal4383)) (import "env" "longname4384" (func $internal4384)) (import "env" "longname4385" (func $internal4385)) (import "env" "longname4386" (func $internal4386)) (import "env" "longname4387" (func $internal4387)) (import "env" "longname4388" (func $internal4388)) (import "env" "longname4389" (func $internal4389)) (import "env" "longname4390" (func $internal4390)) (import "env" "longname4391" (func $internal4391)) (import "env" "longname4392" (func $internal4392)) (import "env" "longname4393" (func $internal4393)) (import "env" "longname4394" (func $internal4394)) (import "env" "longname4395" (func $internal4395)) (import "env" "longname4396" (func $internal4396)) (import "env" "longname4397" (func $internal4397)) (import "env" "longname4398" (func $internal4398)) (import "env" "longname4399" (func $internal4399)) (import "env" "longname4400" (func $internal4400)) (import "env" "longname4401" (func $internal4401)) (import "env" "longname4402" (func $internal4402)) (import "env" "longname4403" (func $internal4403)) (import "env" "longname4404" (func $internal4404)) (import "env" "longname4405" (func $internal4405)) (import "env" "longname4406" (func $internal4406)) (import "env" "longname4407" (func $internal4407)) (import "env" "longname4408" (func $internal4408)) (import "env" "longname4409" (func $internal4409)) (import "env" "longname4410" (func $internal4410)) (import "env" "longname4411" (func $internal4411)) (import "env" "longname4412" (func $internal4412)) (import "env" "longname4413" (func $internal4413)) (import "env" "longname4414" (func $internal4414)) (import "env" "longname4415" (func $internal4415)) (import "env" "longname4416" (func $internal4416)) (import "env" "longname4417" (func $internal4417)) (import "env" "longname4418" (func $internal4418)) (import "env" "longname4419" (func $internal4419)) (import "env" "longname4420" (func $internal4420)) (import "env" "longname4421" (func $internal4421)) (import "env" "longname4422" (func $internal4422)) (import "env" "longname4423" (func $internal4423)) (import "env" "longname4424" (func $internal4424)) (import "env" "longname4425" (func $internal4425)) (import "env" "longname4426" (func $internal4426)) (import "env" "longname4427" (func $internal4427)) (import "env" "longname4428" (func $internal4428)) (import "env" "longname4429" (func $internal4429)) (import "env" "longname4430" (func $internal4430)) (import "env" "longname4431" (func $internal4431)) (import "env" "longname4432" (func $internal4432)) (import "env" "longname4433" (func $internal4433)) (import "env" "longname4434" (func $internal4434)) (import "env" "longname4435" (func $internal4435)) (import "env" "longname4436" (func $internal4436)) (import "env" "longname4437" (func $internal4437)) (import "env" "longname4438" (func $internal4438)) (import "env" "longname4439" (func $internal4439)) (import "env" "longname4440" (func $internal4440)) (import "env" "longname4441" (func $internal4441)) (import "env" "longname4442" (func $internal4442)) (import "env" "longname4443" (func $internal4443)) (import "env" "longname4444" (func $internal4444)) (import "env" "longname4445" (func $internal4445)) (import "env" "longname4446" (func $internal4446)) (import "env" "longname4447" (func $internal4447)) (import "env" "longname4448" (func $internal4448)) (import "env" "longname4449" (func $internal4449)) (import "env" "longname4450" (func $internal4450)) (import "env" "longname4451" (func $internal4451)) (import "env" "longname4452" (func $internal4452)) (import "env" "longname4453" (func $internal4453)) (import "env" "longname4454" (func $internal4454)) (import "env" "longname4455" (func $internal4455)) (import "env" "longname4456" (func $internal4456)) (import "env" "longname4457" (func $internal4457)) (import "env" "longname4458" (func $internal4458)) (import "env" "longname4459" (func $internal4459)) (import "env" "longname4460" (func $internal4460)) (import "env" "longname4461" (func $internal4461)) (import "env" "longname4462" (func $internal4462)) (import "env" "longname4463" (func $internal4463)) (import "env" "longname4464" (func $internal4464)) (import "env" "longname4465" (func $internal4465)) (import "env" "longname4466" (func $internal4466)) (import "env" "longname4467" (func $internal4467)) (import "env" "longname4468" (func $internal4468)) (import "env" "longname4469" (func $internal4469)) (import "env" "longname4470" (func $internal4470)) (import "env" "longname4471" (func $internal4471)) (import "env" "longname4472" (func $internal4472)) (import "env" "longname4473" (func $internal4473)) (import "env" "longname4474" (func $internal4474)) (import "env" "longname4475" (func $internal4475)) (import "env" "longname4476" (func $internal4476)) (import "env" "longname4477" (func $internal4477)) (import "env" "longname4478" (func $internal4478)) (import "env" "longname4479" (func $internal4479)) (import "env" "longname4480" (func $internal4480)) (import "env" "longname4481" (func $internal4481)) (import "env" "longname4482" (func $internal4482)) (import "env" "longname4483" (func $internal4483)) (import "env" "longname4484" (func $internal4484)) (import "env" "longname4485" (func $internal4485)) (import "env" "longname4486" (func $internal4486)) (import "env" "longname4487" (func $internal4487)) (import "env" "longname4488" (func $internal4488)) (import "env" "longname4489" (func $internal4489)) (import "env" "longname4490" (func $internal4490)) (import "env" "longname4491" (func $internal4491)) (import "env" "longname4492" (func $internal4492)) (import "env" "longname4493" (func $internal4493)) (import "env" "longname4494" (func $internal4494)) (import "env" "longname4495" (func $internal4495)) (import "env" "longname4496" (func $internal4496)) (import "env" "longname4497" (func $internal4497)) (import "env" "longname4498" (func $internal4498)) (import "env" "longname4499" (func $internal4499)) (import "env" "longname4500" (func $internal4500)) (import "env" "longname4501" (func $internal4501)) (import "env" "longname4502" (func $internal4502)) (import "env" "longname4503" (func $internal4503)) (import "env" "longname4504" (func $internal4504)) (import "env" "longname4505" (func $internal4505)) (import "env" "longname4506" (func $internal4506)) (import "env" "longname4507" (func $internal4507)) (import "env" "longname4508" (func $internal4508)) (import "env" "longname4509" (func $internal4509)) (import "env" "longname4510" (func $internal4510)) (import "env" "longname4511" (func $internal4511)) (import "env" "longname4512" (func $internal4512)) (import "env" "longname4513" (func $internal4513)) (import "env" "longname4514" (func $internal4514)) (import "env" "longname4515" (func $internal4515)) (import "env" "longname4516" (func $internal4516)) (import "env" "longname4517" (func $internal4517)) (import "env" "longname4518" (func $internal4518)) (import "env" "longname4519" (func $internal4519)) (import "env" "longname4520" (func $internal4520)) (import "env" "longname4521" (func $internal4521)) (import "env" "longname4522" (func $internal4522)) (import "env" "longname4523" (func $internal4523)) (import "env" "longname4524" (func $internal4524)) (import "env" "longname4525" (func $internal4525)) (import "env" "longname4526" (func $internal4526)) (import "env" "longname4527" (func $internal4527)) (import "env" "longname4528" (func $internal4528)) (import "env" "longname4529" (func $internal4529)) (import "env" "longname4530" (func $internal4530)) (import "env" "longname4531" (func $internal4531)) (import "env" "longname4532" (func $internal4532)) (import "env" "longname4533" (func $internal4533)) (import "env" "longname4534" (func $internal4534)) (import "env" "longname4535" (func $internal4535)) (import "env" "longname4536" (func $internal4536)) (import "env" "longname4537" (func $internal4537)) (import "env" "longname4538" (func $internal4538)) (import "env" "longname4539" (func $internal4539)) (import "env" "longname4540" (func $internal4540)) (import "env" "longname4541" (func $internal4541)) (import "env" "longname4542" (func $internal4542)) (import "env" "longname4543" (func $internal4543)) (import "env" "longname4544" (func $internal4544)) (import "env" "longname4545" (func $internal4545)) (import "env" "longname4546" (func $internal4546)) (import "env" "longname4547" (func $internal4547)) (import "env" "longname4548" (func $internal4548)) (import "env" "longname4549" (func $internal4549)) (import "env" "longname4550" (func $internal4550)) (import "env" "longname4551" (func $internal4551)) (import "env" "longname4552" (func $internal4552)) (import "env" "longname4553" (func $internal4553)) (import "env" "longname4554" (func $internal4554)) (import "env" "longname4555" (func $internal4555)) (import "env" "longname4556" (func $internal4556)) (import "env" "longname4557" (func $internal4557)) (import "env" "longname4558" (func $internal4558)) (import "env" "longname4559" (func $internal4559)) (import "env" "longname4560" (func $internal4560)) (import "env" "longname4561" (func $internal4561)) (import "env" "longname4562" (func $internal4562)) (import "env" "longname4563" (func $internal4563)) (import "env" "longname4564" (func $internal4564)) (import "env" "longname4565" (func $internal4565)) (import "env" "longname4566" (func $internal4566)) (import "env" "longname4567" (func $internal4567)) (import "env" "longname4568" (func $internal4568)) (import "env" "longname4569" (func $internal4569)) (import "env" "longname4570" (func $internal4570)) (import "env" "longname4571" (func $internal4571)) (import "env" "longname4572" (func $internal4572)) (import "env" "longname4573" (func $internal4573)) (import "env" "longname4574" (func $internal4574)) (import "env" "longname4575" (func $internal4575)) (import "env" "longname4576" (func $internal4576)) (import "env" "longname4577" (func $internal4577)) (import "env" "longname4578" (func $internal4578)) (import "env" "longname4579" (func $internal4579)) (import "env" "longname4580" (func $internal4580)) (import "env" "longname4581" (func $internal4581)) (import "env" "longname4582" (func $internal4582)) (import "env" "longname4583" (func $internal4583)) (import "env" "longname4584" (func $internal4584)) (import "env" "longname4585" (func $internal4585)) (import "env" "longname4586" (func $internal4586)) (import "env" "longname4587" (func $internal4587)) (import "env" "longname4588" (func $internal4588)) (import "env" "longname4589" (func $internal4589)) (import "env" "longname4590" (func $internal4590)) (import "env" "longname4591" (func $internal4591)) (import "env" "longname4592" (func $internal4592)) (import "env" "longname4593" (func $internal4593)) (import "env" "longname4594" (func $internal4594)) (import "env" "longname4595" (func $internal4595)) (import "env" "longname4596" (func $internal4596)) (import "env" "longname4597" (func $internal4597)) (import "env" "longname4598" (func $internal4598)) (import "env" "longname4599" (func $internal4599)) (import "env" "longname4600" (func $internal4600)) (import "env" "longname4601" (func $internal4601)) (import "env" "longname4602" (func $internal4602)) (import "env" "longname4603" (func $internal4603)) (import "env" "longname4604" (func $internal4604)) (import "env" "longname4605" (func $internal4605)) (import "env" "longname4606" (func $internal4606)) (import "env" "longname4607" (func $internal4607)) (import "env" "longname4608" (func $internal4608)) (import "env" "longname4609" (func $internal4609)) (import "env" "longname4610" (func $internal4610)) (import "env" "longname4611" (func $internal4611)) (import "env" "longname4612" (func $internal4612)) (import "env" "longname4613" (func $internal4613)) (import "env" "longname4614" (func $internal4614)) (import "env" "longname4615" (func $internal4615)) (import "env" "longname4616" (func $internal4616)) (import "env" "longname4617" (func $internal4617)) (import "env" "longname4618" (func $internal4618)) (import "env" "longname4619" (func $internal4619)) (import "env" "longname4620" (func $internal4620)) (import "env" "longname4621" (func $internal4621)) (import "env" "longname4622" (func $internal4622)) (import "env" "longname4623" (func $internal4623)) (import "env" "longname4624" (func $internal4624)) (import "env" "longname4625" (func $internal4625)) (import "env" "longname4626" (func $internal4626)) (import "env" "longname4627" (func $internal4627)) (import "env" "longname4628" (func $internal4628)) (import "env" "longname4629" (func $internal4629)) (import "env" "longname4630" (func $internal4630)) (import "env" "longname4631" (func $internal4631)) (import "env" "longname4632" (func $internal4632)) (import "env" "longname4633" (func $internal4633)) (import "env" "longname4634" (func $internal4634)) (import "env" "longname4635" (func $internal4635)) (import "env" "longname4636" (func $internal4636)) (import "env" "longname4637" (func $internal4637)) (import "env" "longname4638" (func $internal4638)) (import "env" "longname4639" (func $internal4639)) (import "env" "longname4640" (func $internal4640)) (import "env" "longname4641" (func $internal4641)) (import "env" "longname4642" (func $internal4642)) (import "env" "longname4643" (func $internal4643)) (import "env" "longname4644" (func $internal4644)) (import "env" "longname4645" (func $internal4645)) (import "env" "longname4646" (func $internal4646)) (import "env" "longname4647" (func $internal4647)) (import "env" "longname4648" (func $internal4648)) (import "env" "longname4649" (func $internal4649)) (import "env" "longname4650" (func $internal4650)) (import "env" "longname4651" (func $internal4651)) (import "env" "longname4652" (func $internal4652)) (import "env" "longname4653" (func $internal4653)) (import "env" "longname4654" (func $internal4654)) (import "env" "longname4655" (func $internal4655)) (import "env" "longname4656" (func $internal4656)) (import "env" "longname4657" (func $internal4657)) (import "env" "longname4658" (func $internal4658)) (import "env" "longname4659" (func $internal4659)) (import "env" "longname4660" (func $internal4660)) (import "env" "longname4661" (func $internal4661)) (import "env" "longname4662" (func $internal4662)) (import "env" "longname4663" (func $internal4663)) (import "env" "longname4664" (func $internal4664)) (import "env" "longname4665" (func $internal4665)) (import "env" "longname4666" (func $internal4666)) (import "env" "longname4667" (func $internal4667)) (import "env" "longname4668" (func $internal4668)) (import "env" "longname4669" (func $internal4669)) (import "env" "longname4670" (func $internal4670)) (import "env" "longname4671" (func $internal4671)) (import "env" "longname4672" (func $internal4672)) (import "env" "longname4673" (func $internal4673)) (import "env" "longname4674" (func $internal4674)) (import "env" "longname4675" (func $internal4675)) (import "env" "longname4676" (func $internal4676)) (import "env" "longname4677" (func $internal4677)) (import "env" "longname4678" (func $internal4678)) (import "env" "longname4679" (func $internal4679)) (import "env" "longname4680" (func $internal4680)) (import "env" "longname4681" (func $internal4681)) (import "env" "longname4682" (func $internal4682)) (import "env" "longname4683" (func $internal4683)) (import "env" "longname4684" (func $internal4684)) (import "env" "longname4685" (func $internal4685)) (import "env" "longname4686" (func $internal4686)) (import "env" "longname4687" (func $internal4687)) (import "env" "longname4688" (func $internal4688)) (import "env" "longname4689" (func $internal4689)) (import "env" "longname4690" (func $internal4690)) (import "env" "longname4691" (func $internal4691)) (import "env" "longname4692" (func $internal4692)) (import "env" "longname4693" (func $internal4693)) (import "env" "longname4694" (func $internal4694)) (import "env" "longname4695" (func $internal4695)) (import "env" "longname4696" (func $internal4696)) (import "env" "longname4697" (func $internal4697)) (import "env" "longname4698" (func $internal4698)) (import "env" "longname4699" (func $internal4699)) (import "env" "longname4700" (func $internal4700)) (import "env" "longname4701" (func $internal4701)) (import "env" "longname4702" (func $internal4702)) (import "env" "longname4703" (func $internal4703)) (import "env" "longname4704" (func $internal4704)) (import "env" "longname4705" (func $internal4705)) (import "env" "longname4706" (func $internal4706)) (import "env" "longname4707" (func $internal4707)) (import "env" "longname4708" (func $internal4708)) (import "env" "longname4709" (func $internal4709)) (import "env" "longname4710" (func $internal4710)) (import "env" "longname4711" (func $internal4711)) (import "env" "longname4712" (func $internal4712)) (import "env" "longname4713" (func $internal4713)) (import "env" "longname4714" (func $internal4714)) (import "env" "longname4715" (func $internal4715)) (import "env" "longname4716" (func $internal4716)) (import "env" "longname4717" (func $internal4717)) (import "env" "longname4718" (func $internal4718)) (import "env" "longname4719" (func $internal4719)) (import "env" "longname4720" (func $internal4720)) (import "env" "longname4721" (func $internal4721)) (import "env" "longname4722" (func $internal4722)) (import "env" "longname4723" (func $internal4723)) (import "env" "longname4724" (func $internal4724)) (import "env" "longname4725" (func $internal4725)) (import "env" "longname4726" (func $internal4726)) (import "env" "longname4727" (func $internal4727)) (import "env" "longname4728" (func $internal4728)) (import "env" "longname4729" (func $internal4729)) (import "env" "longname4730" (func $internal4730)) (import "env" "longname4731" (func $internal4731)) (import "env" "longname4732" (func $internal4732)) (import "env" "longname4733" (func $internal4733)) (import "env" "longname4734" (func $internal4734)) (import "env" "longname4735" (func $internal4735)) (import "env" "longname4736" (func $internal4736)) (import "env" "longname4737" (func $internal4737)) (import "env" "longname4738" (func $internal4738)) (import "env" "longname4739" (func $internal4739)) (import "env" "longname4740" (func $internal4740)) (import "env" "longname4741" (func $internal4741)) (import "env" "longname4742" (func $internal4742)) (import "env" "longname4743" (func $internal4743)) (import "env" "longname4744" (func $internal4744)) (import "env" "longname4745" (func $internal4745)) (import "env" "longname4746" (func $internal4746)) (import "env" "longname4747" (func $internal4747)) (import "env" "longname4748" (func $internal4748)) (import "env" "longname4749" (func $internal4749)) (import "env" "longname4750" (func $internal4750)) (import "env" "longname4751" (func $internal4751)) (import "env" "longname4752" (func $internal4752)) (import "env" "longname4753" (func $internal4753)) (import "env" "longname4754" (func $internal4754)) (import "env" "longname4755" (func $internal4755)) (import "env" "longname4756" (func $internal4756)) (import "env" "longname4757" (func $internal4757)) (import "env" "longname4758" (func $internal4758)) (import "env" "longname4759" (func $internal4759)) (import "env" "longname4760" (func $internal4760)) (import "env" "longname4761" (func $internal4761)) (import "env" "longname4762" (func $internal4762)) (import "env" "longname4763" (func $internal4763)) (import "env" "longname4764" (func $internal4764)) (import "env" "longname4765" (func $internal4765)) (import "env" "longname4766" (func $internal4766)) (import "env" "longname4767" (func $internal4767)) (import "env" "longname4768" (func $internal4768)) (import "env" "longname4769" (func $internal4769)) (import "env" "longname4770" (func $internal4770)) (import "env" "longname4771" (func $internal4771)) (import "env" "longname4772" (func $internal4772)) (import "env" "longname4773" (func $internal4773)) (import "env" "longname4774" (func $internal4774)) (import "env" "longname4775" (func $internal4775)) (import "env" "longname4776" (func $internal4776)) (import "env" "longname4777" (func $internal4777)) (import "env" "longname4778" (func $internal4778)) (import "env" "longname4779" (func $internal4779)) (import "env" "longname4780" (func $internal4780)) (import "env" "longname4781" (func $internal4781)) (import "env" "longname4782" (func $internal4782)) (import "env" "longname4783" (func $internal4783)) (import "env" "longname4784" (func $internal4784)) (import "env" "longname4785" (func $internal4785)) (import "env" "longname4786" (func $internal4786)) (import "env" "longname4787" (func $internal4787)) (import "env" "longname4788" (func $internal4788)) (import "env" "longname4789" (func $internal4789)) (import "env" "longname4790" (func $internal4790)) (import "env" "longname4791" (func $internal4791)) (import "env" "longname4792" (func $internal4792)) (import "env" "longname4793" (func $internal4793)) (import "env" "longname4794" (func $internal4794)) (import "env" "longname4795" (func $internal4795)) (import "env" "longname4796" (func $internal4796)) (import "env" "longname4797" (func $internal4797)) (import "env" "longname4798" (func $internal4798)) (import "env" "longname4799" (func $internal4799)) (import "env" "longname4800" (func $internal4800)) (import "env" "longname4801" (func $internal4801)) (import "env" "longname4802" (func $internal4802)) (import "env" "longname4803" (func $internal4803)) (import "env" "longname4804" (func $internal4804)) (import "env" "longname4805" (func $internal4805)) (import "env" "longname4806" (func $internal4806)) (import "env" "longname4807" (func $internal4807)) (import "env" "longname4808" (func $internal4808)) (import "env" "longname4809" (func $internal4809)) (import "env" "longname4810" (func $internal4810)) (import "env" "longname4811" (func $internal4811)) (import "env" "longname4812" (func $internal4812)) (import "env" "longname4813" (func $internal4813)) (import "env" "longname4814" (func $internal4814)) (import "env" "longname4815" (func $internal4815)) (import "env" "longname4816" (func $internal4816)) (import "env" "longname4817" (func $internal4817)) (import "env" "longname4818" (func $internal4818)) (import "env" "longname4819" (func $internal4819)) (import "env" "longname4820" (func $internal4820)) (import "env" "longname4821" (func $internal4821)) (import "env" "longname4822" (func $internal4822)) (import "env" "longname4823" (func $internal4823)) (import "env" "longname4824" (func $internal4824)) (import "env" "longname4825" (func $internal4825)) (import "env" "longname4826" (func $internal4826)) (import "env" "longname4827" (func $internal4827)) (import "env" "longname4828" (func $internal4828)) (import "env" "longname4829" (func $internal4829)) (import "env" "longname4830" (func $internal4830)) (import "env" "longname4831" (func $internal4831)) (import "env" "longname4832" (func $internal4832)) (import "env" "longname4833" (func $internal4833)) (import "env" "longname4834" (func $internal4834)) (import "env" "longname4835" (func $internal4835)) (import "env" "longname4836" (func $internal4836)) (import "env" "longname4837" (func $internal4837)) (import "env" "longname4838" (func $internal4838)) (import "env" "longname4839" (func $internal4839)) (import "env" "longname4840" (func $internal4840)) (import "env" "longname4841" (func $internal4841)) (import "env" "longname4842" (func $internal4842)) (import "env" "longname4843" (func $internal4843)) (import "env" "longname4844" (func $internal4844)) (import "env" "longname4845" (func $internal4845)) (import "env" "longname4846" (func $internal4846)) (import "env" "longname4847" (func $internal4847)) (import "env" "longname4848" (func $internal4848)) (import "env" "longname4849" (func $internal4849)) (import "env" "longname4850" (func $internal4850)) (import "env" "longname4851" (func $internal4851)) (import "env" "longname4852" (func $internal4852)) (import "env" "longname4853" (func $internal4853)) (import "env" "longname4854" (func $internal4854)) (import "env" "longname4855" (func $internal4855)) (import "env" "longname4856" (func $internal4856)) (import "env" "longname4857" (func $internal4857)) (import "env" "longname4858" (func $internal4858)) (import "env" "longname4859" (func $internal4859)) (import "env" "longname4860" (func $internal4860)) (import "env" "longname4861" (func $internal4861)) (import "env" "longname4862" (func $internal4862)) (import "env" "longname4863" (func $internal4863)) (import "env" "longname4864" (func $internal4864)) (import "env" "longname4865" (func $internal4865)) (import "env" "longname4866" (func $internal4866)) (import "env" "longname4867" (func $internal4867)) (import "env" "longname4868" (func $internal4868)) (import "env" "longname4869" (func $internal4869)) (import "env" "longname4870" (func $internal4870)) (import "env" "longname4871" (func $internal4871)) (import "env" "longname4872" (func $internal4872)) (import "env" "longname4873" (func $internal4873)) (import "env" "longname4874" (func $internal4874)) (import "env" "longname4875" (func $internal4875)) (import "env" "longname4876" (func $internal4876)) (import "env" "longname4877" (func $internal4877)) (import "env" "longname4878" (func $internal4878)) (import "env" "longname4879" (func $internal4879)) (import "env" "longname4880" (func $internal4880)) (import "env" "longname4881" (func $internal4881)) (import "env" "longname4882" (func $internal4882)) (import "env" "longname4883" (func $internal4883)) (import "env" "longname4884" (func $internal4884)) (import "env" "longname4885" (func $internal4885)) (import "env" "longname4886" (func $internal4886)) (import "env" "longname4887" (func $internal4887)) (import "env" "longname4888" (func $internal4888)) (import "env" "longname4889" (func $internal4889)) (import "env" "longname4890" (func $internal4890)) (import "env" "longname4891" (func $internal4891)) (import "env" "longname4892" (func $internal4892)) (import "env" "longname4893" (func $internal4893)) (import "env" "longname4894" (func $internal4894)) (import "env" "longname4895" (func $internal4895)) (import "env" "longname4896" (func $internal4896)) (import "env" "longname4897" (func $internal4897)) (import "env" "longname4898" (func $internal4898)) (import "env" "longname4899" (func $internal4899)) (import "env" "longname4900" (func $internal4900)) (import "env" "longname4901" (func $internal4901)) (import "env" "longname4902" (func $internal4902)) (import "env" "longname4903" (func $internal4903)) (import "env" "longname4904" (func $internal4904)) (import "env" "longname4905" (func $internal4905)) (import "env" "longname4906" (func $internal4906)) (import "env" "longname4907" (func $internal4907)) (import "env" "longname4908" (func $internal4908)) (import "env" "longname4909" (func $internal4909)) (import "env" "longname4910" (func $internal4910)) (import "env" "longname4911" (func $internal4911)) (import "env" "longname4912" (func $internal4912)) (import "env" "longname4913" (func $internal4913)) (import "env" "longname4914" (func $internal4914)) (import "env" "longname4915" (func $internal4915)) (import "env" "longname4916" (func $internal4916)) (import "env" "longname4917" (func $internal4917)) (import "env" "longname4918" (func $internal4918)) (import "env" "longname4919" (func $internal4919)) (import "env" "longname4920" (func $internal4920)) (import "env" "longname4921" (func $internal4921)) (import "env" "longname4922" (func $internal4922)) (import "env" "longname4923" (func $internal4923)) (import "env" "longname4924" (func $internal4924)) (import "env" "longname4925" (func $internal4925)) (import "env" "longname4926" (func $internal4926)) (import "env" "longname4927" (func $internal4927)) (import "env" "longname4928" (func $internal4928)) (import "env" "longname4929" (func $internal4929)) (import "env" "longname4930" (func $internal4930)) (import "env" "longname4931" (func $internal4931)) (import "env" "longname4932" (func $internal4932)) (import "env" "longname4933" (func $internal4933)) (import "env" "longname4934" (func $internal4934)) (import "env" "longname4935" (func $internal4935)) (import "env" "longname4936" (func $internal4936)) (import "env" "longname4937" (func $internal4937)) (import "env" "longname4938" (func $internal4938)) (import "env" "longname4939" (func $internal4939)) (import "env" "longname4940" (func $internal4940)) (import "env" "longname4941" (func $internal4941)) (import "env" "longname4942" (func $internal4942)) (import "env" "longname4943" (func $internal4943)) (import "env" "longname4944" (func $internal4944)) (import "env" "longname4945" (func $internal4945)) (import "env" "longname4946" (func $internal4946)) (import "env" "longname4947" (func $internal4947)) (import "env" "longname4948" (func $internal4948)) (import "env" "longname4949" (func $internal4949)) (import "env" "longname4950" (func $internal4950)) (import "env" "longname4951" (func $internal4951)) (import "env" "longname4952" (func $internal4952)) (import "env" "longname4953" (func $internal4953)) (import "env" "longname4954" (func $internal4954)) (import "env" "longname4955" (func $internal4955)) (import "env" "longname4956" (func $internal4956)) (import "env" "longname4957" (func $internal4957)) (import "env" "longname4958" (func $internal4958)) (import "env" "longname4959" (func $internal4959)) (import "env" "longname4960" (func $internal4960)) (import "env" "longname4961" (func $internal4961)) (import "env" "longname4962" (func $internal4962)) (import "env" "longname4963" (func $internal4963)) (import "env" "longname4964" (func $internal4964)) (import "env" "longname4965" (func $internal4965)) (import "env" "longname4966" (func $internal4966)) (import "env" "longname4967" (func $internal4967)) (import "env" "longname4968" (func $internal4968)) (import "env" "longname4969" (func $internal4969)) (import "env" "longname4970" (func $internal4970)) (import "env" "longname4971" (func $internal4971)) (import "env" "longname4972" (func $internal4972)) (import "env" "longname4973" (func $internal4973)) (import "env" "longname4974" (func $internal4974)) (import "env" "longname4975" (func $internal4975)) (import "env" "longname4976" (func $internal4976)) (import "env" "longname4977" (func $internal4977)) (import "env" "longname4978" (func $internal4978)) (import "env" "longname4979" (func $internal4979)) (import "env" "longname4980" (func $internal4980)) (import "env" "longname4981" (func $internal4981)) (import "env" "longname4982" (func $internal4982)) (import "env" "longname4983" (func $internal4983)) (import "env" "longname4984" (func $internal4984)) (import "env" "longname4985" (func $internal4985)) (import "env" "longname4986" (func $internal4986)) (import "env" "longname4987" (func $internal4987)) (import "env" "longname4988" (func $internal4988)) (import "env" "longname4989" (func $internal4989)) (import "env" "longname4990" (func $internal4990)) (import "env" "longname4991" (func $internal4991)) (import "env" "longname4992" (func $internal4992)) (import "env" "longname4993" (func $internal4993)) (import "env" "longname4994" (func $internal4994)) (import "env" "longname4995" (func $internal4995)) (import "env" "longname4996" (func $internal4996)) (import "env" "longname4997" (func $internal4997)) (import "env" "longname4998" (func $internal4998)) (import "env" "longname4999" (func $internal4999)) (import "env" "__memory_base" (global i32)) (import "env" "__table_base" (global i32)) (import "other" "anything" (func $internalInfinity)) (import "env" "tagname1" (tag $tagname1 (param i32))) (import "wasi_unstable" "longname3" (func $internal3_wasi)) ;; overlapping base (import "wasi_unstable" "longname3-only" (func $internal3_wasi_only)) (export "exp1" (func $foo1)) (export "exp2" (func $foo2)) (func $foo1) (func $foo2) (export "tag1" (tag $tag1)) (tag $tag1 (param i32 i32)) ) binaryen-version_108/test/passes/minify-imports_all-features.txt000066400000000000000000011260371423707623100254270ustar00rootroot00000000000000longname51 => $ longname2964 => $$ longname3018 => $0 longname3072 => $1 longname3126 => $2 longname3180 => $3 longname3234 => $4 longname3288 => $5 longname3342 => $6 longname3396 => $7 longname3450 => $8 longname3504 => $9 longname1506 => $A longname4962 => $Aa longname1560 => $B longname1614 => $C longname1668 => $D longname1722 => $E longname1776 => $F longname1830 => $G longname1884 => $H longname1938 => $I longname1992 => $J longname2046 => $K longname2100 => $L longname2154 => $M longname2208 => $N longname2262 => $O longname2316 => $P longname2370 => $Q longname2424 => $R longname2478 => $S longname2532 => $T longname2586 => $U longname2640 => $V longname2694 => $W longname2748 => $X longname2802 => $Y longname2856 => $Z longname2910 => $_ longname105 => $a longname3558 => $aa longname159 => $b longname3612 => $ba longname213 => $c longname3666 => $ca longname267 => $d longname3720 => $da longname321 => $e longname3774 => $ea longname374 => $f longname3828 => $fa longname428 => $g longname3882 => $ga longname482 => $h longname3936 => $ha longname536 => $i longname3990 => $ia longname590 => $j longname4044 => $ja longname644 => $k longname4098 => $ka longname698 => $l longname4152 => $la longname752 => $m longname4206 => $ma longname805 => $n longname4260 => $na longname858 => $o longname4314 => $oa longname912 => $p longname4368 => $pa longname966 => $q longname4422 => $qa longname1020 => $r longname4476 => $ra longname1074 => $s longname4530 => $sa longname1128 => $t longname4584 => $ta longname1182 => $u longname4638 => $ua longname1236 => $v longname4692 => $va longname1290 => $w longname4746 => $wa longname1344 => $x longname4800 => $xa longname1398 => $y longname4854 => $ya longname1452 => $z longname4908 => $za longname24 => A longname2937 => A$ longname2991 => A0 longname3045 => A1 longname3099 => A2 longname3153 => A3 longname3207 => A4 longname3261 => A5 longname3315 => A6 longname3369 => A7 longname3423 => A8 longname3477 => A9 longname1479 => AA longname4935 => AAa longname1533 => AB longname4989 => ABa longname1587 => AC longname1641 => AD longname1695 => AE longname1749 => AF longname1803 => AG longname1857 => AH longname1911 => AI longname1965 => AJ longname2019 => AK longname2073 => AL longname2127 => AM longname2181 => AN longname2235 => AO longname2289 => AP longname2343 => AQ longname2397 => AR longname2451 => AS longname2505 => AT longname2559 => AU longname2613 => AV longname2667 => AW longname2721 => AX longname2775 => AY longname2829 => AZ longname2883 => A_ longname78 => Aa longname3531 => Aaa longname132 => Ab longname3585 => Aba longname186 => Ac longname3639 => Aca longname240 => Ad longname3693 => Ada longname294 => Ae longname3747 => Aea longname347 => Af longname3801 => Afa longname401 => Ag longname3855 => Aga longname455 => Ah longname3909 => Aha longname509 => Ai longname3963 => Aia longname563 => Aj longname4017 => Aja longname617 => Ak longname4071 => Aka longname671 => Al longname4125 => Ala longname725 => Am longname4179 => Ama longname778 => An longname4233 => Ana longname831 => Ao longname4287 => Aoa longname885 => Ap longname4341 => Apa longname939 => Aq longname4395 => Aqa longname993 => Ar longname4449 => Ara longname1047 => As longname4503 => Asa longname1101 => At longname4557 => Ata longname1155 => Au longname4611 => Aua longname1209 => Av longname4665 => Ava longname1263 => Aw longname4719 => Awa longname1317 => Ax longname4773 => Axa longname1371 => Ay longname4827 => Aya longname1425 => Az longname4881 => Aza longname25 => B longname2938 => B$ longname2992 => B0 longname3046 => B1 longname3100 => B2 longname3154 => B3 longname3208 => B4 longname3262 => B5 longname3316 => B6 longname3370 => B7 longname3424 => B8 longname3478 => B9 longname1480 => BA longname4936 => BAa longname1534 => BB longname4990 => BBa longname1588 => BC longname1642 => BD longname1696 => BE longname1750 => BF longname1804 => BG longname1858 => BH longname1912 => BI longname1966 => BJ longname2020 => BK longname2074 => BL longname2128 => BM longname2182 => BN longname2236 => BO longname2290 => BP longname2344 => BQ longname2398 => BR longname2452 => BS longname2506 => BT longname2560 => BU longname2614 => BV longname2668 => BW longname2722 => BX longname2776 => BY longname2830 => BZ longname2884 => B_ longname79 => Ba longname3532 => Baa longname133 => Bb longname3586 => Bba longname187 => Bc longname3640 => Bca longname241 => Bd longname3694 => Bda longname295 => Be longname3748 => Bea longname348 => Bf longname3802 => Bfa longname402 => Bg longname3856 => Bga longname456 => Bh longname3910 => Bha longname510 => Bi longname3964 => Bia longname564 => Bj longname4018 => Bja longname618 => Bk longname4072 => Bka longname672 => Bl longname4126 => Bla longname726 => Bm longname4180 => Bma longname779 => Bn longname4234 => Bna longname832 => Bo longname4288 => Boa longname886 => Bp longname4342 => Bpa longname940 => Bq longname4396 => Bqa longname994 => Br longname4450 => Bra longname1048 => Bs longname4504 => Bsa longname1102 => Bt longname4558 => Bta longname1156 => Bu longname4612 => Bua longname1210 => Bv longname4666 => Bva longname1264 => Bw longname4720 => Bwa longname1318 => Bx longname4774 => Bxa longname1372 => By longname4828 => Bya longname1426 => Bz longname4882 => Bza longname26 => C longname2939 => C$ longname2993 => C0 longname3047 => C1 longname3101 => C2 longname3155 => C3 longname3209 => C4 longname3263 => C5 longname3317 => C6 longname3371 => C7 longname3425 => C8 longname3479 => C9 longname1481 => CA longname4937 => CAa longname1535 => CB longname4991 => CBa longname1589 => CC longname1643 => CD longname1697 => CE longname1751 => CF longname1805 => CG longname1859 => CH longname1913 => CI longname1967 => CJ longname2021 => CK longname2075 => CL longname2129 => CM longname2183 => CN longname2237 => CO longname2291 => CP longname2345 => CQ longname2399 => CR longname2453 => CS longname2507 => CT longname2561 => CU longname2615 => CV longname2669 => CW longname2723 => CX longname2777 => CY longname2831 => CZ longname2885 => C_ longname80 => Ca longname3533 => Caa longname134 => Cb longname3587 => Cba longname188 => Cc longname3641 => Cca longname242 => Cd longname3695 => Cda longname296 => Ce longname3749 => Cea longname349 => Cf longname3803 => Cfa longname403 => Cg longname3857 => Cga longname457 => Ch longname3911 => Cha longname511 => Ci longname3965 => Cia longname565 => Cj longname4019 => Cja longname619 => Ck longname4073 => Cka longname673 => Cl longname4127 => Cla longname727 => Cm longname4181 => Cma longname780 => Cn longname4235 => Cna longname833 => Co longname4289 => Coa longname887 => Cp longname4343 => Cpa longname941 => Cq longname4397 => Cqa longname995 => Cr longname4451 => Cra longname1049 => Cs longname4505 => Csa longname1103 => Ct longname4559 => Cta longname1157 => Cu longname4613 => Cua longname1211 => Cv longname4667 => Cva longname1265 => Cw longname4721 => Cwa longname1319 => Cx longname4775 => Cxa longname1373 => Cy longname4829 => Cya longname1427 => Cz longname4883 => Cza longname27 => D longname2940 => D$ longname2994 => D0 longname3048 => D1 longname3102 => D2 longname3156 => D3 longname3210 => D4 longname3264 => D5 longname3318 => D6 longname3372 => D7 longname3426 => D8 longname3480 => D9 longname1482 => DA longname4938 => DAa longname1536 => DB longname4992 => DBa longname1590 => DC longname1644 => DD longname1698 => DE longname1752 => DF longname1806 => DG longname1860 => DH longname1914 => DI longname1968 => DJ longname2022 => DK longname2076 => DL longname2130 => DM longname2184 => DN longname2238 => DO longname2292 => DP longname2346 => DQ longname2400 => DR longname2454 => DS longname2508 => DT longname2562 => DU longname2616 => DV longname2670 => DW longname2724 => DX longname2778 => DY longname2832 => DZ longname2886 => D_ longname81 => Da longname3534 => Daa longname135 => Db longname3588 => Dba longname189 => Dc longname3642 => Dca longname243 => Dd longname3696 => Dda longname297 => De longname3750 => Dea longname350 => Df longname3804 => Dfa longname404 => Dg longname3858 => Dga longname458 => Dh longname3912 => Dha longname512 => Di longname3966 => Dia longname566 => Dj longname4020 => Dja longname620 => Dk longname4074 => Dka longname674 => Dl longname4128 => Dla longname728 => Dm longname4182 => Dma longname781 => Dn longname4236 => Dna longname834 => Do longname4290 => Doa longname888 => Dp longname4344 => Dpa longname942 => Dq longname4398 => Dqa longname996 => Dr longname4452 => Dra longname1050 => Ds longname4506 => Dsa longname1104 => Dt longname4560 => Dta longname1158 => Du longname4614 => Dua longname1212 => Dv longname4668 => Dva longname1266 => Dw longname4722 => Dwa longname1320 => Dx longname4776 => Dxa longname1374 => Dy longname4830 => Dya longname1428 => Dz longname4884 => Dza longname28 => E longname2941 => E$ longname2995 => E0 longname3049 => E1 longname3103 => E2 longname3157 => E3 longname3211 => E4 longname3265 => E5 longname3319 => E6 longname3373 => E7 longname3427 => E8 longname3481 => E9 longname1483 => EA longname4939 => EAa longname1537 => EB longname4993 => EBa longname1591 => EC longname1645 => ED longname1699 => EE longname1753 => EF longname1807 => EG longname1861 => EH longname1915 => EI longname1969 => EJ longname2023 => EK longname2077 => EL longname2131 => EM longname2185 => EN longname2239 => EO longname2293 => EP longname2347 => EQ longname2401 => ER longname2455 => ES longname2509 => ET longname2563 => EU longname2617 => EV longname2671 => EW longname2725 => EX longname2779 => EY longname2833 => EZ longname2887 => E_ longname82 => Ea longname3535 => Eaa longname136 => Eb longname3589 => Eba longname190 => Ec longname3643 => Eca longname244 => Ed longname3697 => Eda longname298 => Ee longname3751 => Eea longname351 => Ef longname3805 => Efa longname405 => Eg longname3859 => Ega longname459 => Eh longname3913 => Eha longname513 => Ei longname3967 => Eia longname567 => Ej longname4021 => Eja longname621 => Ek longname4075 => Eka longname675 => El longname4129 => Ela longname729 => Em longname4183 => Ema longname782 => En longname4237 => Ena longname835 => Eo longname4291 => Eoa longname889 => Ep longname4345 => Epa longname943 => Eq longname4399 => Eqa longname997 => Er longname4453 => Era longname1051 => Es longname4507 => Esa longname1105 => Et longname4561 => Eta longname1159 => Eu longname4615 => Eua longname1213 => Ev longname4669 => Eva longname1267 => Ew longname4723 => Ewa longname1321 => Ex longname4777 => Exa longname1375 => Ey longname4831 => Eya longname1429 => Ez longname4885 => Eza longname29 => F longname2942 => F$ longname2996 => F0 longname3050 => F1 longname3104 => F2 longname3158 => F3 longname3212 => F4 longname3266 => F5 longname3320 => F6 longname3374 => F7 longname3428 => F8 longname3482 => F9 longname1484 => FA longname4940 => FAa longname1538 => FB longname4994 => FBa longname1592 => FC longname1646 => FD longname1700 => FE longname1754 => FF longname1808 => FG longname1862 => FH longname1916 => FI longname1970 => FJ longname2024 => FK longname2078 => FL longname2132 => FM longname2186 => FN longname2240 => FO longname2294 => FP longname2348 => FQ longname2402 => FR longname2456 => FS longname2510 => FT longname2564 => FU longname2618 => FV longname2672 => FW longname2726 => FX longname2780 => FY longname2834 => FZ longname2888 => F_ longname83 => Fa longname3536 => Faa longname137 => Fb longname3590 => Fba longname191 => Fc longname3644 => Fca longname245 => Fd longname3698 => Fda longname299 => Fe longname3752 => Fea longname352 => Ff longname3806 => Ffa longname406 => Fg longname3860 => Fga longname460 => Fh longname3914 => Fha longname514 => Fi longname3968 => Fia longname568 => Fj longname4022 => Fja longname622 => Fk longname4076 => Fka longname676 => Fl longname4130 => Fla longname730 => Fm longname4184 => Fma longname783 => Fn longname4238 => Fna longname836 => Fo longname4292 => Foa longname890 => Fp longname4346 => Fpa longname944 => Fq longname4400 => Fqa longname998 => Fr longname4454 => Fra longname1052 => Fs longname4508 => Fsa longname1106 => Ft longname4562 => Fta longname1160 => Fu longname4616 => Fua longname1214 => Fv longname4670 => Fva longname1268 => Fw longname4724 => Fwa longname1322 => Fx longname4778 => Fxa longname1376 => Fy longname4832 => Fya longname1430 => Fz longname4886 => Fza longname30 => G longname2943 => G$ longname2997 => G0 longname3051 => G1 longname3105 => G2 longname3159 => G3 longname3213 => G4 longname3267 => G5 longname3321 => G6 longname3375 => G7 longname3429 => G8 longname3483 => G9 longname1485 => GA longname4941 => GAa longname1539 => GB longname4995 => GBa longname1593 => GC longname1647 => GD longname1701 => GE longname1755 => GF longname1809 => GG longname1863 => GH longname1917 => GI longname1971 => GJ longname2025 => GK longname2079 => GL longname2133 => GM longname2187 => GN longname2241 => GO longname2295 => GP longname2349 => GQ longname2403 => GR longname2457 => GS longname2511 => GT longname2565 => GU longname2619 => GV longname2673 => GW longname2727 => GX longname2781 => GY longname2835 => GZ longname2889 => G_ longname84 => Ga longname3537 => Gaa longname138 => Gb longname3591 => Gba longname192 => Gc longname3645 => Gca longname246 => Gd longname3699 => Gda longname300 => Ge longname3753 => Gea longname353 => Gf longname3807 => Gfa longname407 => Gg longname3861 => Gga longname461 => Gh longname3915 => Gha longname515 => Gi longname3969 => Gia longname569 => Gj longname4023 => Gja longname623 => Gk longname4077 => Gka longname677 => Gl longname4131 => Gla longname731 => Gm longname4185 => Gma longname784 => Gn longname4239 => Gna longname837 => Go longname4293 => Goa longname891 => Gp longname4347 => Gpa longname945 => Gq longname4401 => Gqa longname999 => Gr longname4455 => Gra longname1053 => Gs longname4509 => Gsa longname1107 => Gt longname4563 => Gta longname1161 => Gu longname4617 => Gua longname1215 => Gv longname4671 => Gva longname1269 => Gw longname4725 => Gwa longname1323 => Gx longname4779 => Gxa longname1377 => Gy longname4833 => Gya longname1431 => Gz longname4887 => Gza longname31 => H longname2944 => H$ longname2998 => H0 longname3052 => H1 longname3106 => H2 longname3160 => H3 longname3214 => H4 longname3268 => H5 longname3322 => H6 longname3376 => H7 longname3430 => H8 longname3484 => H9 longname1486 => HA longname4942 => HAa longname1540 => HB longname4996 => HBa longname1594 => HC longname1648 => HD longname1702 => HE longname1756 => HF longname1810 => HG longname1864 => HH longname1918 => HI longname1972 => HJ longname2026 => HK longname2080 => HL longname2134 => HM longname2188 => HN longname2242 => HO longname2296 => HP longname2350 => HQ longname2404 => HR longname2458 => HS longname2512 => HT longname2566 => HU longname2620 => HV longname2674 => HW longname2728 => HX longname2782 => HY longname2836 => HZ longname2890 => H_ longname85 => Ha longname3538 => Haa longname139 => Hb longname3592 => Hba longname193 => Hc longname3646 => Hca longname247 => Hd longname3700 => Hda longname301 => He longname3754 => Hea longname354 => Hf longname3808 => Hfa longname408 => Hg longname3862 => Hga longname462 => Hh longname3916 => Hha longname516 => Hi longname3970 => Hia longname570 => Hj longname4024 => Hja longname624 => Hk longname4078 => Hka longname678 => Hl longname4132 => Hla longname732 => Hm longname4186 => Hma longname785 => Hn longname4240 => Hna longname838 => Ho longname4294 => Hoa longname892 => Hp longname4348 => Hpa longname946 => Hq longname4402 => Hqa longname1000 => Hr longname4456 => Hra longname1054 => Hs longname4510 => Hsa longname1108 => Ht longname4564 => Hta longname1162 => Hu longname4618 => Hua longname1216 => Hv longname4672 => Hva longname1270 => Hw longname4726 => Hwa longname1324 => Hx longname4780 => Hxa longname1378 => Hy longname4834 => Hya longname1432 => Hz longname4888 => Hza longname32 => I longname2945 => I$ longname2999 => I0 longname3053 => I1 longname3107 => I2 longname3161 => I3 longname3215 => I4 longname3269 => I5 longname3323 => I6 longname3377 => I7 longname3431 => I8 longname3485 => I9 longname1487 => IA longname4943 => IAa longname1541 => IB longname4997 => IBa longname1595 => IC longname1649 => ID longname1703 => IE longname1757 => IF longname1811 => IG longname1865 => IH longname1919 => II longname1973 => IJ longname2027 => IK longname2081 => IL longname2135 => IM longname2189 => IN longname2243 => IO longname2297 => IP longname2351 => IQ longname2405 => IR longname2459 => IS longname2513 => IT longname2567 => IU longname2621 => IV longname2675 => IW longname2729 => IX longname2783 => IY longname2837 => IZ longname2891 => I_ longname86 => Ia longname3539 => Iaa longname140 => Ib longname3593 => Iba longname194 => Ic longname3647 => Ica longname248 => Id longname3701 => Ida longname302 => Ie longname3755 => Iea longname355 => If longname3809 => Ifa longname409 => Ig longname3863 => Iga longname463 => Ih longname3917 => Iha longname517 => Ii longname3971 => Iia longname571 => Ij longname4025 => Ija longname625 => Ik longname4079 => Ika longname679 => Il longname4133 => Ila longname733 => Im longname4187 => Ima longname786 => In longname4241 => Ina longname839 => Io longname4295 => Ioa longname893 => Ip longname4349 => Ipa longname947 => Iq longname4403 => Iqa longname1001 => Ir longname4457 => Ira longname1055 => Is longname4511 => Isa longname1109 => It longname4565 => Ita longname1163 => Iu longname4619 => Iua longname1217 => Iv longname4673 => Iva longname1271 => Iw longname4727 => Iwa longname1325 => Ix longname4781 => Ixa longname1379 => Iy longname4835 => Iya longname1433 => Iz longname4889 => Iza longname33 => J longname2946 => J$ longname3000 => J0 longname3054 => J1 longname3108 => J2 longname3162 => J3 longname3216 => J4 longname3270 => J5 longname3324 => J6 longname3378 => J7 longname3432 => J8 longname3486 => J9 longname1488 => JA longname4944 => JAa longname1542 => JB longname4998 => JBa longname1596 => JC longname1650 => JD longname1704 => JE longname1758 => JF longname1812 => JG longname1866 => JH longname1920 => JI longname1974 => JJ longname2028 => JK longname2082 => JL longname2136 => JM longname2190 => JN longname2244 => JO longname2298 => JP longname2352 => JQ longname2406 => JR longname2460 => JS longname2514 => JT longname2568 => JU longname2622 => JV longname2676 => JW longname2730 => JX longname2784 => JY longname2838 => JZ longname2892 => J_ longname87 => Ja longname3540 => Jaa longname141 => Jb longname3594 => Jba longname195 => Jc longname3648 => Jca longname249 => Jd longname3702 => Jda longname303 => Je longname3756 => Jea longname356 => Jf longname3810 => Jfa longname410 => Jg longname3864 => Jga longname464 => Jh longname3918 => Jha longname518 => Ji longname3972 => Jia longname572 => Jj longname4026 => Jja longname626 => Jk longname4080 => Jka longname680 => Jl longname4134 => Jla longname734 => Jm longname4188 => Jma longname787 => Jn longname4242 => Jna longname840 => Jo longname4296 => Joa longname894 => Jp longname4350 => Jpa longname948 => Jq longname4404 => Jqa longname1002 => Jr longname4458 => Jra longname1056 => Js longname4512 => Jsa longname1110 => Jt longname4566 => Jta longname1164 => Ju longname4620 => Jua longname1218 => Jv longname4674 => Jva longname1272 => Jw longname4728 => Jwa longname1326 => Jx longname4782 => Jxa longname1380 => Jy longname4836 => Jya longname1434 => Jz longname4890 => Jza longname34 => K longname2947 => K$ longname3001 => K0 longname3055 => K1 longname3109 => K2 longname3163 => K3 longname3217 => K4 longname3271 => K5 longname3325 => K6 longname3379 => K7 longname3433 => K8 longname3487 => K9 longname1489 => KA longname4945 => KAa longname1543 => KB longname4999 => KBa longname1597 => KC longname1651 => KD longname1705 => KE longname1759 => KF longname1813 => KG longname1867 => KH longname1921 => KI longname1975 => KJ longname2029 => KK longname2083 => KL longname2137 => KM longname2191 => KN longname2245 => KO longname2299 => KP longname2353 => KQ longname2407 => KR longname2461 => KS longname2515 => KT longname2569 => KU longname2623 => KV longname2677 => KW longname2731 => KX longname2785 => KY longname2839 => KZ longname2893 => K_ longname88 => Ka longname3541 => Kaa longname142 => Kb longname3595 => Kba longname196 => Kc longname3649 => Kca longname250 => Kd longname3703 => Kda longname304 => Ke longname3757 => Kea longname357 => Kf longname3811 => Kfa longname411 => Kg longname3865 => Kga longname465 => Kh longname3919 => Kha longname519 => Ki longname3973 => Kia longname573 => Kj longname4027 => Kja longname627 => Kk longname4081 => Kka longname681 => Kl longname4135 => Kla longname735 => Km longname4189 => Kma longname788 => Kn longname4243 => Kna longname841 => Ko longname4297 => Koa longname895 => Kp longname4351 => Kpa longname949 => Kq longname4405 => Kqa longname1003 => Kr longname4459 => Kra longname1057 => Ks longname4513 => Ksa longname1111 => Kt longname4567 => Kta longname1165 => Ku longname4621 => Kua longname1219 => Kv longname4675 => Kva longname1273 => Kw longname4729 => Kwa longname1327 => Kx longname4783 => Kxa longname1381 => Ky longname4837 => Kya longname1435 => Kz longname4891 => Kza longname35 => L longname2948 => L$ longname3002 => L0 longname3056 => L1 longname3110 => L2 longname3164 => L3 longname3218 => L4 longname3272 => L5 longname3326 => L6 longname3380 => L7 longname3434 => L8 longname3488 => L9 longname1490 => LA longname4946 => LAa longname1544 => LB tagname1 => LBa longname1598 => LC longname1652 => LD longname1706 => LE longname1760 => LF longname1814 => LG longname1868 => LH longname1922 => LI longname1976 => LJ longname2030 => LK longname2084 => LL longname2138 => LM longname2192 => LN longname2246 => LO longname2300 => LP longname2354 => LQ longname2408 => LR longname2462 => LS longname2516 => LT longname2570 => LU longname2624 => LV longname2678 => LW longname2732 => LX longname2786 => LY longname2840 => LZ longname2894 => L_ longname89 => La longname3542 => Laa longname143 => Lb longname3596 => Lba longname197 => Lc longname3650 => Lca longname251 => Ld longname3704 => Lda longname305 => Le longname3758 => Lea longname358 => Lf longname3812 => Lfa longname412 => Lg longname3866 => Lga longname466 => Lh longname3920 => Lha longname520 => Li longname3974 => Lia longname574 => Lj longname4028 => Lja longname628 => Lk longname4082 => Lka longname682 => Ll longname4136 => Lla longname736 => Lm longname4190 => Lma longname789 => Ln longname4244 => Lna longname842 => Lo longname4298 => Loa longname896 => Lp longname4352 => Lpa longname950 => Lq longname4406 => Lqa longname1004 => Lr longname4460 => Lra longname1058 => Ls longname4514 => Lsa longname1112 => Lt longname4568 => Lta longname1166 => Lu longname4622 => Lua longname1220 => Lv longname4676 => Lva longname1274 => Lw longname4730 => Lwa longname1328 => Lx longname4784 => Lxa longname1382 => Ly longname4838 => Lya longname1436 => Lz longname4892 => Lza longname36 => M longname2949 => M$ longname3003 => M0 longname3057 => M1 longname3111 => M2 longname3165 => M3 longname3219 => M4 longname3273 => M5 longname3327 => M6 longname3381 => M7 longname3435 => M8 longname3489 => M9 longname1491 => MA longname4947 => MAa longname1545 => MB longname1599 => MC longname1653 => MD longname1707 => ME longname1761 => MF longname1815 => MG longname1869 => MH longname1923 => MI longname1977 => MJ longname2031 => MK longname2085 => ML longname2139 => MM longname2193 => MN longname2247 => MO longname2301 => MP longname2355 => MQ longname2409 => MR longname2463 => MS longname2517 => MT longname2571 => MU longname2625 => MV longname2679 => MW longname2733 => MX longname2787 => MY longname2841 => MZ longname2895 => M_ longname90 => Ma longname3543 => Maa longname144 => Mb longname3597 => Mba longname198 => Mc longname3651 => Mca longname252 => Md longname3705 => Mda longname306 => Me longname3759 => Mea longname359 => Mf longname3813 => Mfa longname413 => Mg longname3867 => Mga longname467 => Mh longname3921 => Mha longname521 => Mi longname3975 => Mia longname575 => Mj longname4029 => Mja longname629 => Mk longname4083 => Mka longname683 => Ml longname4137 => Mla longname737 => Mm longname4191 => Mma longname790 => Mn longname4245 => Mna longname843 => Mo longname4299 => Moa longname897 => Mp longname4353 => Mpa longname951 => Mq longname4407 => Mqa longname1005 => Mr longname4461 => Mra longname1059 => Ms longname4515 => Msa longname1113 => Mt longname4569 => Mta longname1167 => Mu longname4623 => Mua longname1221 => Mv longname4677 => Mva longname1275 => Mw longname4731 => Mwa longname1329 => Mx longname4785 => Mxa longname1383 => My longname4839 => Mya longname1437 => Mz longname4893 => Mza longname37 => N longname2950 => N$ longname3004 => N0 longname3058 => N1 longname3112 => N2 longname3166 => N3 longname3220 => N4 longname3274 => N5 longname3328 => N6 longname3382 => N7 longname3436 => N8 longname3490 => N9 longname1492 => NA longname4948 => NAa longname1546 => NB longname1600 => NC longname1654 => ND longname1708 => NE longname1762 => NF longname1816 => NG longname1870 => NH longname1924 => NI longname1978 => NJ longname2032 => NK longname2086 => NL longname2140 => NM longname2194 => NN longname2248 => NO longname2302 => NP longname2356 => NQ longname2410 => NR longname2464 => NS longname2518 => NT longname2572 => NU longname2626 => NV longname2680 => NW longname2734 => NX longname2788 => NY longname2842 => NZ longname2896 => N_ longname91 => Na longname3544 => Naa longname145 => Nb longname3598 => Nba longname199 => Nc longname3652 => Nca longname253 => Nd longname3706 => Nda longname307 => Ne longname3760 => Nea longname360 => Nf longname3814 => Nfa longname414 => Ng longname3868 => Nga longname468 => Nh longname3922 => Nha longname522 => Ni longname3976 => Nia longname576 => Nj longname4030 => Nja longname630 => Nk longname4084 => Nka longname684 => Nl longname4138 => Nla longname738 => Nm longname4192 => Nma longname791 => Nn longname4246 => Nna longname844 => No longname4300 => Noa longname898 => Np longname4354 => Npa longname952 => Nq longname4408 => Nqa longname1006 => Nr longname4462 => Nra longname1060 => Ns longname4516 => Nsa longname1114 => Nt longname4570 => Nta longname1168 => Nu longname4624 => Nua longname1222 => Nv longname4678 => Nva longname1276 => Nw longname4732 => Nwa longname1330 => Nx longname4786 => Nxa longname1384 => Ny longname4840 => Nya longname1438 => Nz longname4894 => Nza longname38 => O longname2951 => O$ longname3005 => O0 longname3059 => O1 longname3113 => O2 longname3167 => O3 longname3221 => O4 longname3275 => O5 longname3329 => O6 longname3383 => O7 longname3437 => O8 longname3491 => O9 longname1493 => OA longname4949 => OAa longname1547 => OB longname1601 => OC longname1655 => OD longname1709 => OE longname1763 => OF longname1817 => OG longname1871 => OH longname1925 => OI longname1979 => OJ longname2033 => OK longname2087 => OL longname2141 => OM longname2195 => ON longname2249 => OO longname2303 => OP longname2357 => OQ longname2411 => OR longname2465 => OS longname2519 => OT longname2573 => OU longname2627 => OV longname2681 => OW longname2735 => OX longname2789 => OY longname2843 => OZ longname2897 => O_ longname92 => Oa longname3545 => Oaa longname146 => Ob longname3599 => Oba longname200 => Oc longname3653 => Oca longname254 => Od longname3707 => Oda longname308 => Oe longname3761 => Oea longname361 => Of longname3815 => Ofa longname415 => Og longname3869 => Oga longname469 => Oh longname3923 => Oha longname523 => Oi longname3977 => Oia longname577 => Oj longname4031 => Oja longname631 => Ok longname4085 => Oka longname685 => Ol longname4139 => Ola longname739 => Om longname4193 => Oma longname792 => On longname4247 => Ona longname845 => Oo longname4301 => Ooa longname899 => Op longname4355 => Opa longname953 => Oq longname4409 => Oqa longname1007 => Or longname4463 => Ora longname1061 => Os longname4517 => Osa longname1115 => Ot longname4571 => Ota longname1169 => Ou longname4625 => Oua longname1223 => Ov longname4679 => Ova longname1277 => Ow longname4733 => Owa longname1331 => Ox longname4787 => Oxa longname1385 => Oy longname4841 => Oya longname1439 => Oz longname4895 => Oza longname39 => P longname2952 => P$ longname3006 => P0 longname3060 => P1 longname3114 => P2 longname3168 => P3 longname3222 => P4 longname3276 => P5 longname3330 => P6 longname3384 => P7 longname3438 => P8 longname3492 => P9 longname1494 => PA longname4950 => PAa longname1548 => PB longname1602 => PC longname1656 => PD longname1710 => PE longname1764 => PF longname1818 => PG longname1872 => PH longname1926 => PI longname1980 => PJ longname2034 => PK longname2088 => PL longname2142 => PM longname2196 => PN longname2250 => PO longname2304 => PP longname2358 => PQ longname2412 => PR longname2466 => PS longname2520 => PT longname2574 => PU longname2628 => PV longname2682 => PW longname2736 => PX longname2790 => PY longname2844 => PZ longname2898 => P_ longname93 => Pa longname3546 => Paa longname147 => Pb longname3600 => Pba longname201 => Pc longname3654 => Pca longname255 => Pd longname3708 => Pda longname309 => Pe longname3762 => Pea longname362 => Pf longname3816 => Pfa longname416 => Pg longname3870 => Pga longname470 => Ph longname3924 => Pha longname524 => Pi longname3978 => Pia longname578 => Pj longname4032 => Pja longname632 => Pk longname4086 => Pka longname686 => Pl longname4140 => Pla longname740 => Pm longname4194 => Pma longname793 => Pn longname4248 => Pna longname846 => Po longname4302 => Poa longname900 => Pp longname4356 => Ppa longname954 => Pq longname4410 => Pqa longname1008 => Pr longname4464 => Pra longname1062 => Ps longname4518 => Psa longname1116 => Pt longname4572 => Pta longname1170 => Pu longname4626 => Pua longname1224 => Pv longname4680 => Pva longname1278 => Pw longname4734 => Pwa longname1332 => Px longname4788 => Pxa longname1386 => Py longname4842 => Pya longname1440 => Pz longname4896 => Pza longname40 => Q longname2953 => Q$ longname3007 => Q0 longname3061 => Q1 longname3115 => Q2 longname3169 => Q3 longname3223 => Q4 longname3277 => Q5 longname3331 => Q6 longname3385 => Q7 longname3439 => Q8 longname3493 => Q9 longname1495 => QA longname4951 => QAa longname1549 => QB longname1603 => QC longname1657 => QD longname1711 => QE longname1765 => QF longname1819 => QG longname1873 => QH longname1927 => QI longname1981 => QJ longname2035 => QK longname2089 => QL longname2143 => QM longname2197 => QN longname2251 => QO longname2305 => QP longname2359 => QQ longname2413 => QR longname2467 => QS longname2521 => QT longname2575 => QU longname2629 => QV longname2683 => QW longname2737 => QX longname2791 => QY longname2845 => QZ longname2899 => Q_ longname94 => Qa longname3547 => Qaa longname148 => Qb longname3601 => Qba longname202 => Qc longname3655 => Qca longname256 => Qd longname3709 => Qda longname310 => Qe longname3763 => Qea longname363 => Qf longname3817 => Qfa longname417 => Qg longname3871 => Qga longname471 => Qh longname3925 => Qha longname525 => Qi longname3979 => Qia longname579 => Qj longname4033 => Qja longname633 => Qk longname4087 => Qka longname687 => Ql longname4141 => Qla longname741 => Qm longname4195 => Qma longname794 => Qn longname4249 => Qna longname847 => Qo longname4303 => Qoa longname901 => Qp longname4357 => Qpa longname955 => Qq longname4411 => Qqa longname1009 => Qr longname4465 => Qra longname1063 => Qs longname4519 => Qsa longname1117 => Qt longname4573 => Qta longname1171 => Qu longname4627 => Qua longname1225 => Qv longname4681 => Qva longname1279 => Qw longname4735 => Qwa longname1333 => Qx longname4789 => Qxa longname1387 => Qy longname4843 => Qya longname1441 => Qz longname4897 => Qza longname41 => R longname2954 => R$ longname3008 => R0 longname3062 => R1 longname3116 => R2 longname3170 => R3 longname3224 => R4 longname3278 => R5 longname3332 => R6 longname3386 => R7 longname3440 => R8 longname3494 => R9 longname1496 => RA longname4952 => RAa longname1550 => RB longname1604 => RC longname1658 => RD longname1712 => RE longname1766 => RF longname1820 => RG longname1874 => RH longname1928 => RI longname1982 => RJ longname2036 => RK longname2090 => RL longname2144 => RM longname2198 => RN longname2252 => RO longname2306 => RP longname2360 => RQ longname2414 => RR longname2468 => RS longname2522 => RT longname2576 => RU longname2630 => RV longname2684 => RW longname2738 => RX longname2792 => RY longname2846 => RZ longname2900 => R_ longname95 => Ra longname3548 => Raa longname149 => Rb longname3602 => Rba longname203 => Rc longname3656 => Rca longname257 => Rd longname3710 => Rda longname311 => Re longname3764 => Rea longname364 => Rf longname3818 => Rfa longname418 => Rg longname3872 => Rga longname472 => Rh longname3926 => Rha longname526 => Ri longname3980 => Ria longname580 => Rj longname4034 => Rja longname634 => Rk longname4088 => Rka longname688 => Rl longname4142 => Rla longname742 => Rm longname4196 => Rma longname795 => Rn longname4250 => Rna longname848 => Ro longname4304 => Roa longname902 => Rp longname4358 => Rpa longname956 => Rq longname4412 => Rqa longname1010 => Rr longname4466 => Rra longname1064 => Rs longname4520 => Rsa longname1118 => Rt longname4574 => Rta longname1172 => Ru longname4628 => Rua longname1226 => Rv longname4682 => Rva longname1280 => Rw longname4736 => Rwa longname1334 => Rx longname4790 => Rxa longname1388 => Ry longname4844 => Rya longname1442 => Rz longname4898 => Rza longname42 => S longname2955 => S$ longname3009 => S0 longname3063 => S1 longname3117 => S2 longname3171 => S3 longname3225 => S4 longname3279 => S5 longname3333 => S6 longname3387 => S7 longname3441 => S8 longname3495 => S9 longname1497 => SA longname4953 => SAa longname1551 => SB longname1605 => SC longname1659 => SD longname1713 => SE longname1767 => SF longname1821 => SG longname1875 => SH longname1929 => SI longname1983 => SJ longname2037 => SK longname2091 => SL longname2145 => SM longname2199 => SN longname2253 => SO longname2307 => SP longname2361 => SQ longname2415 => SR longname2469 => SS longname2523 => ST longname2577 => SU longname2631 => SV longname2685 => SW longname2739 => SX longname2793 => SY longname2847 => SZ longname2901 => S_ longname96 => Sa longname3549 => Saa longname150 => Sb longname3603 => Sba longname204 => Sc longname3657 => Sca longname258 => Sd longname3711 => Sda longname312 => Se longname3765 => Sea longname365 => Sf longname3819 => Sfa longname419 => Sg longname3873 => Sga longname473 => Sh longname3927 => Sha longname527 => Si longname3981 => Sia longname581 => Sj longname4035 => Sja longname635 => Sk longname4089 => Ska longname689 => Sl longname4143 => Sla longname743 => Sm longname4197 => Sma longname796 => Sn longname4251 => Sna longname849 => So longname4305 => Soa longname903 => Sp longname4359 => Spa longname957 => Sq longname4413 => Sqa longname1011 => Sr longname4467 => Sra longname1065 => Ss longname4521 => Ssa longname1119 => St longname4575 => Sta longname1173 => Su longname4629 => Sua longname1227 => Sv longname4683 => Sva longname1281 => Sw longname4737 => Swa longname1335 => Sx longname4791 => Sxa longname1389 => Sy longname4845 => Sya longname1443 => Sz longname4899 => Sza longname43 => T longname2956 => T$ longname3010 => T0 longname3064 => T1 longname3118 => T2 longname3172 => T3 longname3226 => T4 longname3280 => T5 longname3334 => T6 longname3388 => T7 longname3442 => T8 longname3496 => T9 longname1498 => TA longname4954 => TAa longname1552 => TB longname1606 => TC longname1660 => TD longname1714 => TE longname1768 => TF longname1822 => TG longname1876 => TH longname1930 => TI longname1984 => TJ longname2038 => TK longname2092 => TL longname2146 => TM longname2200 => TN longname2254 => TO longname2308 => TP longname2362 => TQ longname2416 => TR longname2470 => TS longname2524 => TT longname2578 => TU longname2632 => TV longname2686 => TW longname2740 => TX longname2794 => TY longname2848 => TZ longname2902 => T_ longname97 => Ta longname3550 => Taa longname151 => Tb longname3604 => Tba longname205 => Tc longname3658 => Tca longname259 => Td longname3712 => Tda longname313 => Te longname3766 => Tea longname366 => Tf longname3820 => Tfa longname420 => Tg longname3874 => Tga longname474 => Th longname3928 => Tha longname528 => Ti longname3982 => Tia longname582 => Tj longname4036 => Tja longname636 => Tk longname4090 => Tka longname690 => Tl longname4144 => Tla longname744 => Tm longname4198 => Tma longname797 => Tn longname4252 => Tna longname850 => To longname4306 => Toa longname904 => Tp longname4360 => Tpa longname958 => Tq longname4414 => Tqa longname1012 => Tr longname4468 => Tra longname1066 => Ts longname4522 => Tsa longname1120 => Tt longname4576 => Tta longname1174 => Tu longname4630 => Tua longname1228 => Tv longname4684 => Tva longname1282 => Tw longname4738 => Twa longname1336 => Tx longname4792 => Txa longname1390 => Ty longname4846 => Tya longname1444 => Tz longname4900 => Tza longname44 => U longname2957 => U$ longname3011 => U0 longname3065 => U1 longname3119 => U2 longname3173 => U3 longname3227 => U4 longname3281 => U5 longname3335 => U6 longname3389 => U7 longname3443 => U8 longname3497 => U9 longname1499 => UA longname4955 => UAa longname1553 => UB longname1607 => UC longname1661 => UD longname1715 => UE longname1769 => UF longname1823 => UG longname1877 => UH longname1931 => UI longname1985 => UJ longname2039 => UK longname2093 => UL longname2147 => UM longname2201 => UN longname2255 => UO longname2309 => UP longname2363 => UQ longname2417 => UR longname2471 => US longname2525 => UT longname2579 => UU longname2633 => UV longname2687 => UW longname2741 => UX longname2795 => UY longname2849 => UZ longname2903 => U_ longname98 => Ua longname3551 => Uaa longname152 => Ub longname3605 => Uba longname206 => Uc longname3659 => Uca longname260 => Ud longname3713 => Uda longname314 => Ue longname3767 => Uea longname367 => Uf longname3821 => Ufa longname421 => Ug longname3875 => Uga longname475 => Uh longname3929 => Uha longname529 => Ui longname3983 => Uia longname583 => Uj longname4037 => Uja longname637 => Uk longname4091 => Uka longname691 => Ul longname4145 => Ula longname745 => Um longname4199 => Uma longname798 => Un longname4253 => Una longname851 => Uo longname4307 => Uoa longname905 => Up longname4361 => Upa longname959 => Uq longname4415 => Uqa longname1013 => Ur longname4469 => Ura longname1067 => Us longname4523 => Usa longname1121 => Ut longname4577 => Uta longname1175 => Uu longname4631 => Uua longname1229 => Uv longname4685 => Uva longname1283 => Uw longname4739 => Uwa longname1337 => Ux longname4793 => Uxa longname1391 => Uy longname4847 => Uya longname1445 => Uz longname4901 => Uza longname45 => V longname2958 => V$ longname3012 => V0 longname3066 => V1 longname3120 => V2 longname3174 => V3 longname3228 => V4 longname3282 => V5 longname3336 => V6 longname3390 => V7 longname3444 => V8 longname3498 => V9 longname1500 => VA longname4956 => VAa longname1554 => VB longname1608 => VC longname1662 => VD longname1716 => VE longname1770 => VF longname1824 => VG longname1878 => VH longname1932 => VI longname1986 => VJ longname2040 => VK longname2094 => VL longname2148 => VM longname2202 => VN longname2256 => VO longname2310 => VP longname2364 => VQ longname2418 => VR longname2472 => VS longname2526 => VT longname2580 => VU longname2634 => VV longname2688 => VW longname2742 => VX longname2796 => VY longname2850 => VZ longname2904 => V_ longname99 => Va longname3552 => Vaa longname153 => Vb longname3606 => Vba longname207 => Vc longname3660 => Vca longname261 => Vd longname3714 => Vda longname315 => Ve longname3768 => Vea longname368 => Vf longname3822 => Vfa longname422 => Vg longname3876 => Vga longname476 => Vh longname3930 => Vha longname530 => Vi longname3984 => Via longname584 => Vj longname4038 => Vja longname638 => Vk longname4092 => Vka longname692 => Vl longname4146 => Vla longname746 => Vm longname4200 => Vma longname799 => Vn longname4254 => Vna longname852 => Vo longname4308 => Voa longname906 => Vp longname4362 => Vpa longname960 => Vq longname4416 => Vqa longname1014 => Vr longname4470 => Vra longname1068 => Vs longname4524 => Vsa longname1122 => Vt longname4578 => Vta longname1176 => Vu longname4632 => Vua longname1230 => Vv longname4686 => Vva longname1284 => Vw longname4740 => Vwa longname1338 => Vx longname4794 => Vxa longname1392 => Vy longname4848 => Vya longname1446 => Vz longname4902 => Vza longname46 => W longname2959 => W$ longname3013 => W0 longname3067 => W1 longname3121 => W2 longname3175 => W3 longname3229 => W4 longname3283 => W5 longname3337 => W6 longname3391 => W7 longname3445 => W8 longname3499 => W9 longname1501 => WA longname4957 => WAa longname1555 => WB longname1609 => WC longname1663 => WD longname1717 => WE longname1771 => WF longname1825 => WG longname1879 => WH longname1933 => WI longname1987 => WJ longname2041 => WK longname2095 => WL longname2149 => WM longname2203 => WN longname2257 => WO longname2311 => WP longname2365 => WQ longname2419 => WR longname2473 => WS longname2527 => WT longname2581 => WU longname2635 => WV longname2689 => WW longname2743 => WX longname2797 => WY longname2851 => WZ longname2905 => W_ longname100 => Wa longname3553 => Waa longname154 => Wb longname3607 => Wba longname208 => Wc longname3661 => Wca longname262 => Wd longname3715 => Wda longname316 => We longname3769 => Wea longname369 => Wf longname3823 => Wfa longname423 => Wg longname3877 => Wga longname477 => Wh longname3931 => Wha longname531 => Wi longname3985 => Wia longname585 => Wj longname4039 => Wja longname639 => Wk longname4093 => Wka longname693 => Wl longname4147 => Wla longname747 => Wm longname4201 => Wma longname800 => Wn longname4255 => Wna longname853 => Wo longname4309 => Woa longname907 => Wp longname4363 => Wpa longname961 => Wq longname4417 => Wqa longname1015 => Wr longname4471 => Wra longname1069 => Ws longname4525 => Wsa longname1123 => Wt longname4579 => Wta longname1177 => Wu longname4633 => Wua longname1231 => Wv longname4687 => Wva longname1285 => Ww longname4741 => Wwa longname1339 => Wx longname4795 => Wxa longname1393 => Wy longname4849 => Wya longname1447 => Wz longname4903 => Wza longname47 => X longname2960 => X$ longname3014 => X0 longname3068 => X1 longname3122 => X2 longname3176 => X3 longname3230 => X4 longname3284 => X5 longname3338 => X6 longname3392 => X7 longname3446 => X8 longname3500 => X9 longname1502 => XA longname4958 => XAa longname1556 => XB longname1610 => XC longname1664 => XD longname1718 => XE longname1772 => XF longname1826 => XG longname1880 => XH longname1934 => XI longname1988 => XJ longname2042 => XK longname2096 => XL longname2150 => XM longname2204 => XN longname2258 => XO longname2312 => XP longname2366 => XQ longname2420 => XR longname2474 => XS longname2528 => XT longname2582 => XU longname2636 => XV longname2690 => XW longname2744 => XX longname2798 => XY longname2852 => XZ longname2906 => X_ longname101 => Xa longname3554 => Xaa longname155 => Xb longname3608 => Xba longname209 => Xc longname3662 => Xca longname263 => Xd longname3716 => Xda longname317 => Xe longname3770 => Xea longname370 => Xf longname3824 => Xfa longname424 => Xg longname3878 => Xga longname478 => Xh longname3932 => Xha longname532 => Xi longname3986 => Xia longname586 => Xj longname4040 => Xja longname640 => Xk longname4094 => Xka longname694 => Xl longname4148 => Xla longname748 => Xm longname4202 => Xma longname801 => Xn longname4256 => Xna longname854 => Xo longname4310 => Xoa longname908 => Xp longname4364 => Xpa longname962 => Xq longname4418 => Xqa longname1016 => Xr longname4472 => Xra longname1070 => Xs longname4526 => Xsa longname1124 => Xt longname4580 => Xta longname1178 => Xu longname4634 => Xua longname1232 => Xv longname4688 => Xva longname1286 => Xw longname4742 => Xwa longname1340 => Xx longname4796 => Xxa longname1394 => Xy longname4850 => Xya longname1448 => Xz longname4904 => Xza longname48 => Y longname2961 => Y$ longname3015 => Y0 longname3069 => Y1 longname3123 => Y2 longname3177 => Y3 longname3231 => Y4 longname3285 => Y5 longname3339 => Y6 longname3393 => Y7 longname3447 => Y8 longname3501 => Y9 longname1503 => YA longname4959 => YAa longname1557 => YB longname1611 => YC longname1665 => YD longname1719 => YE longname1773 => YF longname1827 => YG longname1881 => YH longname1935 => YI longname1989 => YJ longname2043 => YK longname2097 => YL longname2151 => YM longname2205 => YN longname2259 => YO longname2313 => YP longname2367 => YQ longname2421 => YR longname2475 => YS longname2529 => YT longname2583 => YU longname2637 => YV longname2691 => YW longname2745 => YX longname2799 => YY longname2853 => YZ longname2907 => Y_ longname102 => Ya longname3555 => Yaa longname156 => Yb longname3609 => Yba longname210 => Yc longname3663 => Yca longname264 => Yd longname3717 => Yda longname318 => Ye longname3771 => Yea longname371 => Yf longname3825 => Yfa longname425 => Yg longname3879 => Yga longname479 => Yh longname3933 => Yha longname533 => Yi longname3987 => Yia longname587 => Yj longname4041 => Yja longname641 => Yk longname4095 => Yka longname695 => Yl longname4149 => Yla longname749 => Ym longname4203 => Yma longname802 => Yn longname4257 => Yna longname855 => Yo longname4311 => Yoa longname909 => Yp longname4365 => Ypa longname963 => Yq longname4419 => Yqa longname1017 => Yr longname4473 => Yra longname1071 => Ys longname4527 => Ysa longname1125 => Yt longname4581 => Yta longname1179 => Yu longname4635 => Yua longname1233 => Yv longname4689 => Yva longname1287 => Yw longname4743 => Ywa longname1341 => Yx longname4797 => Yxa longname1395 => Yy longname4851 => Yya longname1449 => Yz longname4905 => Yza longname49 => Z longname2962 => Z$ longname3016 => Z0 longname3070 => Z1 longname3124 => Z2 longname3178 => Z3 longname3232 => Z4 longname3286 => Z5 longname3340 => Z6 longname3394 => Z7 longname3448 => Z8 longname3502 => Z9 longname1504 => ZA longname4960 => ZAa longname1558 => ZB longname1612 => ZC longname1666 => ZD longname1720 => ZE longname1774 => ZF longname1828 => ZG longname1882 => ZH longname1936 => ZI longname1990 => ZJ longname2044 => ZK longname2098 => ZL longname2152 => ZM longname2206 => ZN longname2260 => ZO longname2314 => ZP longname2368 => ZQ longname2422 => ZR longname2476 => ZS longname2530 => ZT longname2584 => ZU longname2638 => ZV longname2692 => ZW longname2746 => ZX longname2800 => ZY longname2854 => ZZ longname2908 => Z_ longname103 => Za longname3556 => Zaa longname157 => Zb longname3610 => Zba longname211 => Zc longname3664 => Zca longname265 => Zd longname3718 => Zda longname319 => Ze longname3772 => Zea longname372 => Zf longname3826 => Zfa longname426 => Zg longname3880 => Zga longname480 => Zh longname3934 => Zha longname534 => Zi longname3988 => Zia longname588 => Zj longname4042 => Zja longname642 => Zk longname4096 => Zka longname696 => Zl longname4150 => Zla longname750 => Zm longname4204 => Zma longname803 => Zn longname4258 => Zna longname856 => Zo longname4312 => Zoa longname910 => Zp longname4366 => Zpa longname964 => Zq longname4420 => Zqa longname1018 => Zr longname4474 => Zra longname1072 => Zs longname4528 => Zsa longname1126 => Zt longname4582 => Zta longname1180 => Zu longname4636 => Zua longname1234 => Zv longname4690 => Zva longname1288 => Zw longname4744 => Zwa longname1342 => Zx longname4798 => Zxa longname1396 => Zy longname4852 => Zya longname1450 => Zz longname4906 => Zza longname50 => _ longname2963 => _$ longname3017 => _0 longname3071 => _1 longname3125 => _2 longname3179 => _3 longname3233 => _4 longname3287 => _5 longname3341 => _6 longname3395 => _7 longname3449 => _8 longname3503 => _9 longname1505 => _A longname4961 => _Aa longname1559 => _B longname1613 => _C longname1667 => _D longname1721 => _E longname1775 => _F longname1829 => _G longname1883 => _H longname1937 => _I longname1991 => _J longname2045 => _K longname2099 => _L longname2153 => _M longname2207 => _N longname2261 => _O longname2315 => _P longname2369 => _Q longname2423 => _R longname2477 => _S longname2531 => _T longname2585 => _U longname2639 => _V longname2693 => _W longname2747 => _X longname2801 => _Y longname2855 => _Z longname2909 => __ longname104 => _a longname3557 => _aa longname158 => _b longname3611 => _ba longname212 => _c longname3665 => _ca longname266 => _d longname3719 => _da longname320 => _e longname3773 => _ea longname373 => _f longname3827 => _fa longname427 => _g longname3881 => _ga longname481 => _h longname3935 => _ha longname535 => _i longname3989 => _ia longname589 => _j longname4043 => _ja longname643 => _k longname4097 => _ka longname697 => _l longname4151 => _la longname751 => _m longname4205 => _ma longname804 => _n longname4259 => _na longname857 => _o longname4313 => _oa longname911 => _p longname4367 => _pa longname965 => _q longname4421 => _qa longname1019 => _r longname4475 => _ra longname1073 => _s longname4529 => _sa longname1127 => _t longname4583 => _ta longname1181 => _u longname4637 => _ua longname1235 => _v longname4691 => _va longname1289 => _w longname4745 => _wa longname1343 => _x longname4799 => _xa longname1397 => _y longname4853 => _ya longname1451 => _z longname4907 => _za global => a longname2911 => a$ longname2965 => a0 longname3019 => a1 longname3073 => a2 longname3127 => a3 longname3181 => a4 longname3235 => a5 longname3289 => a6 longname3343 => a7 longname3397 => a8 longname3451 => a9 longname1453 => aA longname4909 => aAa longname1507 => aB longname4963 => aBa longname1561 => aC longname1615 => aD longname1669 => aE longname1723 => aF longname1777 => aG longname1831 => aH longname1885 => aI longname1939 => aJ longname1993 => aK longname2047 => aL longname2101 => aM longname2155 => aN longname2209 => aO longname2263 => aP longname2317 => aQ longname2371 => aR longname2425 => aS longname2479 => aT longname2533 => aU longname2587 => aV longname2641 => aW longname2695 => aX longname2749 => aY longname2803 => aZ longname2857 => a_ longname52 => aa longname3505 => aaa longname106 => ab longname3559 => aba longname160 => ac longname3613 => aca longname214 => ad longname3667 => ada longname268 => ae longname3721 => aea longname322 => af longname3775 => afa longname375 => ag longname3829 => aga longname429 => ah longname3883 => aha longname483 => ai longname3937 => aia longname537 => aj longname3991 => aja longname591 => ak longname4045 => aka longname645 => al longname4099 => ala longname699 => am longname4153 => ama longname753 => an longname4207 => ana longname806 => ao longname4261 => aoa longname859 => ap longname4315 => apa longname913 => aq longname4369 => aqa longname967 => ar longname4423 => ara longname1021 => as longname4477 => asa longname1075 => at longname4531 => ata longname1129 => au longname4585 => aua longname1183 => av longname4639 => ava longname1237 => aw longname4693 => awa longname1291 => ax longname4747 => axa longname1345 => ay longname4801 => aya longname1399 => az longname4855 => aza __memory_base => b longname2912 => b$ longname2966 => b0 longname3020 => b1 longname3074 => b2 longname3128 => b3 longname3182 => b4 longname3236 => b5 longname3290 => b6 longname3344 => b7 longname3398 => b8 longname3452 => b9 longname1454 => bA longname4910 => bAa longname1508 => bB longname4964 => bBa longname1562 => bC longname1616 => bD longname1670 => bE longname1724 => bF longname1778 => bG longname1832 => bH longname1886 => bI longname1940 => bJ longname1994 => bK longname2048 => bL longname2102 => bM longname2156 => bN longname2210 => bO longname2264 => bP longname2318 => bQ longname2372 => bR longname2426 => bS longname2480 => bT longname2534 => bU longname2588 => bV longname2642 => bW longname2696 => bX longname2750 => bY longname2804 => bZ longname2858 => b_ longname53 => ba longname3506 => baa longname107 => bb longname3560 => bba longname161 => bc longname3614 => bca longname215 => bd longname3668 => bda longname269 => be longname3722 => bea longname323 => bf longname3776 => bfa longname376 => bg longname3830 => bga longname430 => bh longname3884 => bha longname484 => bi longname3938 => bia longname538 => bj longname3992 => bja longname592 => bk longname4046 => bka longname646 => bl longname4100 => bla longname700 => bm longname4154 => bma longname754 => bn longname4208 => bna longname807 => bo longname4262 => boa longname860 => bp longname4316 => bpa longname914 => bq longname4370 => bqa longname968 => br longname4424 => bra longname1022 => bs longname4478 => bsa longname1076 => bt longname4532 => bta longname1130 => bu longname4586 => bua longname1184 => bv longname4640 => bva longname1238 => bw longname4694 => bwa longname1292 => bx longname4748 => bxa longname1346 => by longname4802 => bya longname1400 => bz longname4856 => bza __table_base => c longname2913 => c$ longname2967 => c0 longname3021 => c1 longname3075 => c2 longname3129 => c3 longname3183 => c4 longname3237 => c5 longname3291 => c6 longname3345 => c7 longname3399 => c8 longname3453 => c9 longname1455 => cA longname4911 => cAa longname1509 => cB longname4965 => cBa longname1563 => cC longname1617 => cD longname1671 => cE longname1725 => cF longname1779 => cG longname1833 => cH longname1887 => cI longname1941 => cJ longname1995 => cK longname2049 => cL longname2103 => cM longname2157 => cN longname2211 => cO longname2265 => cP longname2319 => cQ longname2373 => cR longname2427 => cS longname2481 => cT longname2535 => cU longname2589 => cV longname2643 => cW longname2697 => cX longname2751 => cY longname2805 => cZ longname2859 => c_ longname54 => ca longname3507 => caa longname108 => cb longname3561 => cba longname162 => cc longname3615 => cca longname216 => cd longname3669 => cda longname270 => ce longname3723 => cea longname324 => cf longname3777 => cfa longname377 => cg longname3831 => cga longname431 => ch longname3885 => cha longname485 => ci longname3939 => cia longname539 => cj longname3993 => cja longname593 => ck longname4047 => cka longname647 => cl longname4101 => cla longname701 => cm longname4155 => cma longname755 => cn longname4209 => cna longname808 => co longname4263 => coa longname861 => cp longname4317 => cpa longname915 => cq longname4371 => cqa longname969 => cr longname4425 => cra longname1023 => cs longname4479 => csa longname1077 => ct longname4533 => cta longname1131 => cu longname4587 => cua longname1185 => cv longname4641 => cva longname1239 => cw longname4695 => cwa longname1293 => cx longname4749 => cxa longname1347 => cy longname4803 => cya longname1401 => cz longname4857 => cza longname1 => d longname2914 => d$ longname2968 => d0 longname3022 => d1 longname3076 => d2 longname3130 => d3 longname3184 => d4 longname3238 => d5 longname3292 => d6 longname3346 => d7 longname3400 => d8 longname3454 => d9 longname1456 => dA longname4912 => dAa longname1510 => dB longname4966 => dBa longname1564 => dC longname1618 => dD longname1672 => dE longname1726 => dF longname1780 => dG longname1834 => dH longname1888 => dI longname1942 => dJ longname1996 => dK longname2050 => dL longname2104 => dM longname2158 => dN longname2212 => dO longname2266 => dP longname2320 => dQ longname2374 => dR longname2428 => dS longname2482 => dT longname2536 => dU longname2590 => dV longname2644 => dW longname2698 => dX longname2752 => dY longname2806 => dZ longname2860 => d_ longname55 => da longname3508 => daa longname109 => db longname3562 => dba longname163 => dc longname3616 => dca longname217 => dd longname3670 => dda longname271 => de longname3724 => dea longname325 => df longname3778 => dfa longname378 => dg longname3832 => dga longname432 => dh longname3886 => dha longname486 => di longname3940 => dia longname540 => dj longname3994 => dja longname594 => dk longname4048 => dka longname648 => dl longname4102 => dla longname702 => dm longname4156 => dma longname756 => dn longname4210 => dna longname4264 => doa longname862 => dp longname4318 => dpa longname916 => dq longname4372 => dqa longname970 => dr longname4426 => dra longname1024 => ds longname4480 => dsa longname1078 => dt longname4534 => dta longname1132 => du longname4588 => dua longname1186 => dv longname4642 => dva longname1240 => dw longname4696 => dwa longname1294 => dx longname4750 => dxa longname1348 => dy longname4804 => dya longname1402 => dz longname4858 => dza longname2 => e longname2915 => e$ longname2969 => e0 longname3023 => e1 longname3077 => e2 longname3131 => e3 longname3185 => e4 longname3239 => e5 longname3293 => e6 longname3347 => e7 longname3401 => e8 longname3455 => e9 longname1457 => eA longname4913 => eAa longname1511 => eB longname4967 => eBa longname1565 => eC longname1619 => eD longname1673 => eE longname1727 => eF longname1781 => eG longname1835 => eH longname1889 => eI longname1943 => eJ longname1997 => eK longname2051 => eL longname2105 => eM longname2159 => eN longname2213 => eO longname2267 => eP longname2321 => eQ longname2375 => eR longname2429 => eS longname2483 => eT longname2537 => eU longname2591 => eV longname2645 => eW longname2699 => eX longname2753 => eY longname2807 => eZ longname2861 => e_ longname56 => ea longname3509 => eaa longname110 => eb longname3563 => eba longname164 => ec longname3617 => eca longname218 => ed longname3671 => eda longname272 => ee longname3725 => eea longname326 => ef longname3779 => efa longname379 => eg longname3833 => ega longname433 => eh longname3887 => eha longname487 => ei longname3941 => eia longname541 => ej longname3995 => eja longname595 => ek longname4049 => eka longname649 => el longname4103 => ela longname703 => em longname4157 => ema longname757 => en longname4211 => ena longname809 => eo longname4265 => eoa longname863 => ep longname4319 => epa longname917 => eq longname4373 => eqa longname971 => er longname4427 => era longname1025 => es longname4481 => esa longname1079 => et longname4535 => eta longname1133 => eu longname4589 => eua longname1187 => ev longname4643 => eva longname1241 => ew longname4697 => ewa longname1295 => ex longname4751 => exa longname1349 => ey longname4805 => eya longname1403 => ez longname4859 => eza longname3 => f longname2916 => f$ longname2970 => f0 longname3024 => f1 longname3078 => f2 longname3132 => f3 longname3186 => f4 longname3240 => f5 longname3294 => f6 longname3348 => f7 longname3402 => f8 longname3456 => f9 longname1458 => fA longname4914 => fAa longname1512 => fB longname4968 => fBa longname1566 => fC longname1620 => fD longname1674 => fE longname1728 => fF longname1782 => fG longname1836 => fH longname1890 => fI longname1944 => fJ longname1998 => fK longname2052 => fL longname2106 => fM longname2160 => fN longname2214 => fO longname2268 => fP longname2322 => fQ longname2376 => fR longname2430 => fS longname2484 => fT longname2538 => fU longname2592 => fV longname2646 => fW longname2700 => fX longname2754 => fY longname2808 => fZ longname2862 => f_ longname57 => fa longname3510 => faa longname111 => fb longname3564 => fba longname165 => fc longname3618 => fca longname219 => fd longname3672 => fda longname273 => fe longname3726 => fea longname327 => ff longname3780 => ffa longname380 => fg longname3834 => fga longname434 => fh longname3888 => fha longname488 => fi longname3942 => fia longname542 => fj longname3996 => fja longname596 => fk longname4050 => fka longname650 => fl longname4104 => fla longname704 => fm longname4158 => fma longname758 => fn longname4212 => fna longname810 => fo longname4266 => foa longname864 => fp longname4320 => fpa longname918 => fq longname4374 => fqa longname972 => fr longname4428 => fra longname1026 => fs longname4482 => fsa longname1080 => ft longname4536 => fta longname1134 => fu longname4590 => fua longname1188 => fv longname4644 => fva longname1242 => fw longname4698 => fwa longname1296 => fx longname4752 => fxa longname1350 => fy longname4806 => fya longname1404 => fz longname4860 => fza longname4 => g longname2917 => g$ longname2971 => g0 longname3025 => g1 longname3079 => g2 longname3133 => g3 longname3187 => g4 longname3241 => g5 longname3295 => g6 longname3349 => g7 longname3403 => g8 longname3457 => g9 longname1459 => gA longname4915 => gAa longname1513 => gB longname4969 => gBa longname1567 => gC longname1621 => gD longname1675 => gE longname1729 => gF longname1783 => gG longname1837 => gH longname1891 => gI longname1945 => gJ longname1999 => gK longname2053 => gL longname2107 => gM longname2161 => gN longname2215 => gO longname2269 => gP longname2323 => gQ longname2377 => gR longname2431 => gS longname2485 => gT longname2539 => gU longname2593 => gV longname2647 => gW longname2701 => gX longname2755 => gY longname2809 => gZ longname2863 => g_ longname58 => ga longname3511 => gaa longname112 => gb longname3565 => gba longname166 => gc longname3619 => gca longname220 => gd longname3673 => gda longname274 => ge longname3727 => gea longname328 => gf longname3781 => gfa longname381 => gg longname3835 => gga longname435 => gh longname3889 => gha longname489 => gi longname3943 => gia longname543 => gj longname3997 => gja longname597 => gk longname4051 => gka longname651 => gl longname4105 => gla longname705 => gm longname4159 => gma longname759 => gn longname4213 => gna longname811 => go longname4267 => goa longname865 => gp longname4321 => gpa longname919 => gq longname4375 => gqa longname973 => gr longname4429 => gra longname1027 => gs longname4483 => gsa longname1081 => gt longname4537 => gta longname1135 => gu longname4591 => gua longname1189 => gv longname4645 => gva longname1243 => gw longname4699 => gwa longname1297 => gx longname4753 => gxa longname1351 => gy longname4807 => gya longname1405 => gz longname4861 => gza longname5 => h longname2918 => h$ longname2972 => h0 longname3026 => h1 longname3080 => h2 longname3134 => h3 longname3188 => h4 longname3242 => h5 longname3296 => h6 longname3350 => h7 longname3404 => h8 longname3458 => h9 longname1460 => hA longname4916 => hAa longname1514 => hB longname4970 => hBa longname1568 => hC longname1622 => hD longname1676 => hE longname1730 => hF longname1784 => hG longname1838 => hH longname1892 => hI longname1946 => hJ longname2000 => hK longname2054 => hL longname2108 => hM longname2162 => hN longname2216 => hO longname2270 => hP longname2324 => hQ longname2378 => hR longname2432 => hS longname2486 => hT longname2540 => hU longname2594 => hV longname2648 => hW longname2702 => hX longname2756 => hY longname2810 => hZ longname2864 => h_ longname59 => ha longname3512 => haa longname113 => hb longname3566 => hba longname167 => hc longname3620 => hca longname221 => hd longname3674 => hda longname275 => he longname3728 => hea longname329 => hf longname3782 => hfa longname382 => hg longname3836 => hga longname436 => hh longname3890 => hha longname490 => hi longname3944 => hia longname544 => hj longname3998 => hja longname598 => hk longname4052 => hka longname652 => hl longname4106 => hla longname706 => hm longname4160 => hma longname760 => hn longname4214 => hna longname812 => ho longname4268 => hoa longname866 => hp longname4322 => hpa longname920 => hq longname4376 => hqa longname974 => hr longname4430 => hra longname1028 => hs longname4484 => hsa longname1082 => ht longname4538 => hta longname1136 => hu longname4592 => hua longname1190 => hv longname4646 => hva longname1244 => hw longname4700 => hwa longname1298 => hx longname4754 => hxa longname1352 => hy longname4808 => hya longname1406 => hz longname4862 => hza longname6 => i longname2919 => i$ longname2973 => i0 longname3027 => i1 longname3081 => i2 longname3135 => i3 longname3189 => i4 longname3243 => i5 longname3297 => i6 longname3351 => i7 longname3405 => i8 longname3459 => i9 longname1461 => iA longname4917 => iAa longname1515 => iB longname4971 => iBa longname1569 => iC longname1623 => iD longname1677 => iE longname1731 => iF longname1785 => iG longname1839 => iH longname1893 => iI longname1947 => iJ longname2001 => iK longname2055 => iL longname2109 => iM longname2163 => iN longname2217 => iO longname2271 => iP longname2325 => iQ longname2379 => iR longname2433 => iS longname2487 => iT longname2541 => iU longname2595 => iV longname2649 => iW longname2703 => iX longname2757 => iY longname2811 => iZ longname2865 => i_ longname60 => ia longname3513 => iaa longname114 => ib longname3567 => iba longname168 => ic longname3621 => ica longname222 => id longname3675 => ida longname276 => ie longname3729 => iea longname3783 => ifa longname383 => ig longname3837 => iga longname437 => ih longname3891 => iha longname491 => ii longname3945 => iia longname545 => ij longname3999 => ija longname599 => ik longname4053 => ika longname653 => il longname4107 => ila longname707 => im longname4161 => ima longname4215 => ina longname813 => io longname4269 => ioa longname867 => ip longname4323 => ipa longname921 => iq longname4377 => iqa longname975 => ir longname4431 => ira longname1029 => is longname4485 => isa longname1083 => it longname4539 => ita longname1137 => iu longname4593 => iua longname1191 => iv longname4647 => iva longname1245 => iw longname4701 => iwa longname1299 => ix longname4755 => ixa longname1353 => iy longname4809 => iya longname1407 => iz longname4863 => iza longname7 => j longname2920 => j$ longname2974 => j0 longname3028 => j1 longname3082 => j2 longname3136 => j3 longname3190 => j4 longname3244 => j5 longname3298 => j6 longname3352 => j7 longname3406 => j8 longname3460 => j9 longname1462 => jA longname4918 => jAa longname1516 => jB longname4972 => jBa longname1570 => jC longname1624 => jD longname1678 => jE longname1732 => jF longname1786 => jG longname1840 => jH longname1894 => jI longname1948 => jJ longname2002 => jK longname2056 => jL longname2110 => jM longname2164 => jN longname2218 => jO longname2272 => jP longname2326 => jQ longname2380 => jR longname2434 => jS longname2488 => jT longname2542 => jU longname2596 => jV longname2650 => jW longname2704 => jX longname2758 => jY longname2812 => jZ longname2866 => j_ longname61 => ja longname3514 => jaa longname115 => jb longname3568 => jba longname169 => jc longname3622 => jca longname223 => jd longname3676 => jda longname277 => je longname3730 => jea longname330 => jf longname3784 => jfa longname384 => jg longname3838 => jga longname438 => jh longname3892 => jha longname492 => ji longname3946 => jia longname546 => jj longname4000 => jja longname600 => jk longname4054 => jka longname654 => jl longname4108 => jla longname708 => jm longname4162 => jma longname761 => jn longname4216 => jna longname814 => jo longname4270 => joa longname868 => jp longname4324 => jpa longname922 => jq longname4378 => jqa longname976 => jr longname4432 => jra longname1030 => js longname4486 => jsa longname1084 => jt longname4540 => jta longname1138 => ju longname4594 => jua longname1192 => jv longname4648 => jva longname1246 => jw longname4702 => jwa longname1300 => jx longname4756 => jxa longname1354 => jy longname4810 => jya longname1408 => jz longname4864 => jza longname8 => k longname2921 => k$ longname2975 => k0 longname3029 => k1 longname3083 => k2 longname3137 => k3 longname3191 => k4 longname3245 => k5 longname3299 => k6 longname3353 => k7 longname3407 => k8 longname3461 => k9 longname1463 => kA longname4919 => kAa longname1517 => kB longname4973 => kBa longname1571 => kC longname1625 => kD longname1679 => kE longname1733 => kF longname1787 => kG longname1841 => kH longname1895 => kI longname1949 => kJ longname2003 => kK longname2057 => kL longname2111 => kM longname2165 => kN longname2219 => kO longname2273 => kP longname2327 => kQ longname2381 => kR longname2435 => kS longname2489 => kT longname2543 => kU longname2597 => kV longname2651 => kW longname2705 => kX longname2759 => kY longname2813 => kZ longname2867 => k_ longname62 => ka longname3515 => kaa longname116 => kb longname3569 => kba longname170 => kc longname3623 => kca longname224 => kd longname3677 => kda longname278 => ke longname3731 => kea longname331 => kf longname3785 => kfa longname385 => kg longname3839 => kga longname439 => kh longname3893 => kha longname493 => ki longname3947 => kia longname547 => kj longname4001 => kja longname601 => kk longname4055 => kka longname655 => kl longname4109 => kla longname709 => km longname4163 => kma longname762 => kn longname4217 => kna longname815 => ko longname4271 => koa longname869 => kp longname4325 => kpa longname923 => kq longname4379 => kqa longname977 => kr longname4433 => kra longname1031 => ks longname4487 => ksa longname1085 => kt longname4541 => kta longname1139 => ku longname4595 => kua longname1193 => kv longname4649 => kva longname1247 => kw longname4703 => kwa longname1301 => kx longname4757 => kxa longname1355 => ky longname4811 => kya longname1409 => kz longname4865 => kza longname9 => l longname2922 => l$ longname2976 => l0 longname3030 => l1 longname3084 => l2 longname3138 => l3 longname3192 => l4 longname3246 => l5 longname3300 => l6 longname3354 => l7 longname3408 => l8 longname3462 => l9 longname1464 => lA longname4920 => lAa longname1518 => lB longname4974 => lBa longname1572 => lC longname1626 => lD longname1680 => lE longname1734 => lF longname1788 => lG longname1842 => lH longname1896 => lI longname1950 => lJ longname2004 => lK longname2058 => lL longname2112 => lM longname2166 => lN longname2220 => lO longname2274 => lP longname2328 => lQ longname2382 => lR longname2436 => lS longname2490 => lT longname2544 => lU longname2598 => lV longname2652 => lW longname2706 => lX longname2760 => lY longname2814 => lZ longname2868 => l_ longname63 => la longname3516 => laa longname117 => lb longname3570 => lba longname171 => lc longname3624 => lca longname225 => ld longname3678 => lda longname279 => le longname3732 => lea longname332 => lf longname3786 => lfa longname386 => lg longname3840 => lga longname440 => lh longname3894 => lha longname494 => li longname3948 => lia longname548 => lj longname4002 => lja longname602 => lk longname4056 => lka longname656 => ll longname4110 => lla longname710 => lm longname4164 => lma longname763 => ln longname4218 => lna longname816 => lo longname4272 => loa longname870 => lp longname4326 => lpa longname924 => lq longname4380 => lqa longname978 => lr longname4434 => lra longname1032 => ls longname4488 => lsa longname1086 => lt longname4542 => lta longname1140 => lu longname4596 => lua longname1194 => lv longname4650 => lva longname1248 => lw longname4704 => lwa longname1302 => lx longname4758 => lxa longname1356 => ly longname4812 => lya longname1410 => lz longname4866 => lza longname10 => m longname2923 => m$ longname2977 => m0 longname3031 => m1 longname3085 => m2 longname3139 => m3 longname3193 => m4 longname3247 => m5 longname3301 => m6 longname3355 => m7 longname3409 => m8 longname3463 => m9 longname1465 => mA longname4921 => mAa longname1519 => mB longname4975 => mBa longname1573 => mC longname1627 => mD longname1681 => mE longname1735 => mF longname1789 => mG longname1843 => mH longname1897 => mI longname1951 => mJ longname2005 => mK longname2059 => mL longname2113 => mM longname2167 => mN longname2221 => mO longname2275 => mP longname2329 => mQ longname2383 => mR longname2437 => mS longname2491 => mT longname2545 => mU longname2599 => mV longname2653 => mW longname2707 => mX longname2761 => mY longname2815 => mZ longname2869 => m_ longname64 => ma longname3517 => maa longname118 => mb longname3571 => mba longname172 => mc longname3625 => mca longname226 => md longname3679 => mda longname280 => me longname3733 => mea longname333 => mf longname3787 => mfa longname387 => mg longname3841 => mga longname441 => mh longname3895 => mha longname495 => mi longname3949 => mia longname549 => mj longname4003 => mja longname603 => mk longname4057 => mka longname657 => ml longname4111 => mla longname711 => mm longname4165 => mma longname764 => mn longname4219 => mna longname817 => mo longname4273 => moa longname871 => mp longname4327 => mpa longname925 => mq longname4381 => mqa longname979 => mr longname4435 => mra longname1033 => ms longname4489 => msa longname1087 => mt longname4543 => mta longname1141 => mu longname4597 => mua longname1195 => mv longname4651 => mva longname1249 => mw longname4705 => mwa longname1303 => mx longname4759 => mxa longname1357 => my longname4813 => mya longname1411 => mz longname4867 => mza longname11 => n longname2924 => n$ longname2978 => n0 longname3032 => n1 longname3086 => n2 longname3140 => n3 longname3194 => n4 longname3248 => n5 longname3302 => n6 longname3356 => n7 longname3410 => n8 longname3464 => n9 longname1466 => nA longname4922 => nAa longname1520 => nB longname4976 => nBa longname1574 => nC longname1628 => nD longname1682 => nE longname1736 => nF longname1790 => nG longname1844 => nH longname1898 => nI longname1952 => nJ longname2006 => nK longname2060 => nL longname2114 => nM longname2168 => nN longname2222 => nO longname2276 => nP longname2330 => nQ longname2384 => nR longname2438 => nS longname2492 => nT longname2546 => nU longname2600 => nV longname2654 => nW longname2708 => nX longname2762 => nY longname2816 => nZ longname2870 => n_ longname65 => na longname3518 => naa longname119 => nb longname3572 => nba longname173 => nc longname3626 => nca longname227 => nd longname3680 => nda longname281 => ne longname3734 => nea longname334 => nf longname3788 => nfa longname388 => ng longname3842 => nga longname442 => nh longname3896 => nha longname496 => ni longname3950 => nia longname550 => nj longname4004 => nja longname604 => nk longname4058 => nka longname658 => nl longname4112 => nla longname712 => nm longname4166 => nma longname765 => nn longname4220 => nna longname818 => no longname4274 => noa longname872 => np longname4328 => npa longname926 => nq longname4382 => nqa longname980 => nr longname4436 => nra longname1034 => ns longname4490 => nsa longname1088 => nt longname4544 => nta longname1142 => nu longname4598 => nua longname1196 => nv longname4652 => nva longname1250 => nw longname4706 => nwa longname1304 => nx longname4760 => nxa longname1358 => ny longname4814 => nya longname1412 => nz longname4868 => nza longname12 => o longname2925 => o$ longname2979 => o0 longname3033 => o1 longname3087 => o2 longname3141 => o3 longname3195 => o4 longname3249 => o5 longname3303 => o6 longname3357 => o7 longname3411 => o8 longname3465 => o9 longname1467 => oA longname4923 => oAa longname1521 => oB longname4977 => oBa longname1575 => oC longname1629 => oD longname1683 => oE longname1737 => oF longname1791 => oG longname1845 => oH longname1899 => oI longname1953 => oJ longname2007 => oK longname2061 => oL longname2115 => oM longname2169 => oN longname2223 => oO longname2277 => oP longname2331 => oQ longname2385 => oR longname2439 => oS longname2493 => oT longname2547 => oU longname2601 => oV longname2655 => oW longname2709 => oX longname2763 => oY longname2817 => oZ longname2871 => o_ longname66 => oa longname3519 => oaa longname120 => ob longname3573 => oba longname174 => oc longname3627 => oca longname228 => od longname3681 => oda longname282 => oe longname3735 => oea longname335 => of longname3789 => ofa longname389 => og longname3843 => oga longname443 => oh longname3897 => oha longname497 => oi longname3951 => oia longname551 => oj longname4005 => oja longname605 => ok longname4059 => oka longname659 => ol longname4113 => ola longname713 => om longname4167 => oma longname766 => on longname4221 => ona longname819 => oo longname4275 => ooa longname873 => op longname4329 => opa longname927 => oq longname4383 => oqa longname981 => or longname4437 => ora longname1035 => os longname4491 => osa longname1089 => ot longname4545 => ota longname1143 => ou longname4599 => oua longname1197 => ov longname4653 => ova longname1251 => ow longname4707 => owa longname1305 => ox longname4761 => oxa longname1359 => oy longname4815 => oya longname1413 => oz longname4869 => oza longname13 => p longname2926 => p$ longname2980 => p0 longname3034 => p1 longname3088 => p2 longname3142 => p3 longname3196 => p4 longname3250 => p5 longname3304 => p6 longname3358 => p7 longname3412 => p8 longname3466 => p9 longname1468 => pA longname4924 => pAa longname1522 => pB longname4978 => pBa longname1576 => pC longname1630 => pD longname1684 => pE longname1738 => pF longname1792 => pG longname1846 => pH longname1900 => pI longname1954 => pJ longname2008 => pK longname2062 => pL longname2116 => pM longname2170 => pN longname2224 => pO longname2278 => pP longname2332 => pQ longname2386 => pR longname2440 => pS longname2494 => pT longname2548 => pU longname2602 => pV longname2656 => pW longname2710 => pX longname2764 => pY longname2818 => pZ longname2872 => p_ longname67 => pa longname3520 => paa longname121 => pb longname3574 => pba longname175 => pc longname3628 => pca longname229 => pd longname3682 => pda longname283 => pe longname3736 => pea longname336 => pf longname3790 => pfa longname390 => pg longname3844 => pga longname444 => ph longname3898 => pha longname498 => pi longname3952 => pia longname552 => pj longname4006 => pja longname606 => pk longname4060 => pka longname660 => pl longname4114 => pla longname714 => pm longname4168 => pma longname767 => pn longname4222 => pna longname820 => po longname4276 => poa longname874 => pp longname4330 => ppa longname928 => pq longname4384 => pqa longname982 => pr longname4438 => pra longname1036 => ps longname4492 => psa longname1090 => pt longname4546 => pta longname1144 => pu longname4600 => pua longname1198 => pv longname4654 => pva longname1252 => pw longname4708 => pwa longname1306 => px longname4762 => pxa longname1360 => py longname4816 => pya longname1414 => pz longname4870 => pza longname14 => q longname2927 => q$ longname2981 => q0 longname3035 => q1 longname3089 => q2 longname3143 => q3 longname3197 => q4 longname3251 => q5 longname3305 => q6 longname3359 => q7 longname3413 => q8 longname3467 => q9 longname1469 => qA longname4925 => qAa longname1523 => qB longname4979 => qBa longname1577 => qC longname1631 => qD longname1685 => qE longname1739 => qF longname1793 => qG longname1847 => qH longname1901 => qI longname1955 => qJ longname2009 => qK longname2063 => qL longname2117 => qM longname2171 => qN longname2225 => qO longname2279 => qP longname2333 => qQ longname2387 => qR longname2441 => qS longname2495 => qT longname2549 => qU longname2603 => qV longname2657 => qW longname2711 => qX longname2765 => qY longname2819 => qZ longname2873 => q_ longname68 => qa longname3521 => qaa longname122 => qb longname3575 => qba longname176 => qc longname3629 => qca longname230 => qd longname3683 => qda longname284 => qe longname3737 => qea longname337 => qf longname3791 => qfa longname391 => qg longname3845 => qga longname445 => qh longname3899 => qha longname499 => qi longname3953 => qia longname553 => qj longname4007 => qja longname607 => qk longname4061 => qka longname661 => ql longname4115 => qla longname715 => qm longname4169 => qma longname768 => qn longname4223 => qna longname821 => qo longname4277 => qoa longname875 => qp longname4331 => qpa longname929 => qq longname4385 => qqa longname983 => qr longname4439 => qra longname1037 => qs longname4493 => qsa longname1091 => qt longname4547 => qta longname1145 => qu longname4601 => qua longname1199 => qv longname4655 => qva longname1253 => qw longname4709 => qwa longname1307 => qx longname4763 => qxa longname1361 => qy longname4817 => qya longname1415 => qz longname4871 => qza longname15 => r longname2928 => r$ longname2982 => r0 longname3036 => r1 longname3090 => r2 longname3144 => r3 longname3198 => r4 longname3252 => r5 longname3306 => r6 longname3360 => r7 longname3414 => r8 longname3468 => r9 longname1470 => rA longname4926 => rAa longname1524 => rB longname4980 => rBa longname1578 => rC longname1632 => rD longname1686 => rE longname1740 => rF longname1794 => rG longname1848 => rH longname1902 => rI longname1956 => rJ longname2010 => rK longname2064 => rL longname2118 => rM longname2172 => rN longname2226 => rO longname2280 => rP longname2334 => rQ longname2388 => rR longname2442 => rS longname2496 => rT longname2550 => rU longname2604 => rV longname2658 => rW longname2712 => rX longname2766 => rY longname2820 => rZ longname2874 => r_ longname69 => ra longname3522 => raa longname123 => rb longname3576 => rba longname177 => rc longname3630 => rca longname231 => rd longname3684 => rda longname285 => re longname3738 => rea longname338 => rf longname3792 => rfa longname392 => rg longname3846 => rga longname446 => rh longname3900 => rha longname500 => ri longname3954 => ria longname554 => rj longname4008 => rja longname608 => rk longname4062 => rka longname662 => rl longname4116 => rla longname716 => rm longname4170 => rma longname769 => rn longname4224 => rna longname822 => ro longname4278 => roa longname876 => rp longname4332 => rpa longname930 => rq longname4386 => rqa longname984 => rr longname4440 => rra longname1038 => rs longname4494 => rsa longname1092 => rt longname4548 => rta longname1146 => ru longname4602 => rua longname1200 => rv longname4656 => rva longname1254 => rw longname4710 => rwa longname1308 => rx longname4764 => rxa longname1362 => ry longname4818 => rya longname1416 => rz longname4872 => rza longname16 => s longname2929 => s$ longname2983 => s0 longname3037 => s1 longname3091 => s2 longname3145 => s3 longname3199 => s4 longname3253 => s5 longname3307 => s6 longname3361 => s7 longname3415 => s8 longname3469 => s9 longname1471 => sA longname4927 => sAa longname1525 => sB longname4981 => sBa longname1579 => sC longname1633 => sD longname1687 => sE longname1741 => sF longname1795 => sG longname1849 => sH longname1903 => sI longname1957 => sJ longname2011 => sK longname2065 => sL longname2119 => sM longname2173 => sN longname2227 => sO longname2281 => sP longname2335 => sQ longname2389 => sR longname2443 => sS longname2497 => sT longname2551 => sU longname2605 => sV longname2659 => sW longname2713 => sX longname2767 => sY longname2821 => sZ longname2875 => s_ longname70 => sa longname3523 => saa longname124 => sb longname3577 => sba longname178 => sc longname3631 => sca longname232 => sd longname3685 => sda longname286 => se longname3739 => sea longname339 => sf longname3793 => sfa longname393 => sg longname3847 => sga longname447 => sh longname3901 => sha longname501 => si longname3955 => sia longname555 => sj longname4009 => sja longname609 => sk longname4063 => ska longname663 => sl longname4117 => sla longname717 => sm longname4171 => sma longname770 => sn longname4225 => sna longname823 => so longname4279 => soa longname877 => sp longname4333 => spa longname931 => sq longname4387 => sqa longname985 => sr longname4441 => sra longname1039 => ss longname4495 => ssa longname1093 => st longname4549 => sta longname1147 => su longname4603 => sua longname1201 => sv longname4657 => sva longname1255 => sw longname4711 => swa longname1309 => sx longname4765 => sxa longname1363 => sy longname4819 => sya longname1417 => sz longname4873 => sza longname17 => t longname2930 => t$ longname2984 => t0 longname3038 => t1 longname3092 => t2 longname3146 => t3 longname3200 => t4 longname3254 => t5 longname3308 => t6 longname3362 => t7 longname3416 => t8 longname3470 => t9 longname1472 => tA longname4928 => tAa longname1526 => tB longname4982 => tBa longname1580 => tC longname1634 => tD longname1688 => tE longname1742 => tF longname1796 => tG longname1850 => tH longname1904 => tI longname1958 => tJ longname2012 => tK longname2066 => tL longname2120 => tM longname2174 => tN longname2228 => tO longname2282 => tP longname2336 => tQ longname2390 => tR longname2444 => tS longname2498 => tT longname2552 => tU longname2606 => tV longname2660 => tW longname2714 => tX longname2768 => tY longname2822 => tZ longname2876 => t_ longname71 => ta longname3524 => taa longname125 => tb longname3578 => tba longname179 => tc longname3632 => tca longname233 => td longname3686 => tda longname287 => te longname3740 => tea longname340 => tf longname3794 => tfa longname394 => tg longname3848 => tga longname448 => th longname3902 => tha longname502 => ti longname3956 => tia longname556 => tj longname4010 => tja longname610 => tk longname4064 => tka longname664 => tl longname4118 => tla longname718 => tm longname4172 => tma longname771 => tn longname4226 => tna longname824 => to longname4280 => toa longname878 => tp longname4334 => tpa longname932 => tq longname4388 => tqa longname986 => tr longname4442 => tra longname1040 => ts longname4496 => tsa longname1094 => tt longname4550 => tta longname1148 => tu longname4604 => tua longname1202 => tv longname4658 => tva longname1256 => tw longname4712 => twa longname1310 => tx longname4766 => txa longname1364 => ty longname4820 => tya longname1418 => tz longname4874 => tza longname18 => u longname2931 => u$ longname2985 => u0 longname3039 => u1 longname3093 => u2 longname3147 => u3 longname3201 => u4 longname3255 => u5 longname3309 => u6 longname3363 => u7 longname3417 => u8 longname3471 => u9 longname1473 => uA longname4929 => uAa longname1527 => uB longname4983 => uBa longname1581 => uC longname1635 => uD longname1689 => uE longname1743 => uF longname1797 => uG longname1851 => uH longname1905 => uI longname1959 => uJ longname2013 => uK longname2067 => uL longname2121 => uM longname2175 => uN longname2229 => uO longname2283 => uP longname2337 => uQ longname2391 => uR longname2445 => uS longname2499 => uT longname2553 => uU longname2607 => uV longname2661 => uW longname2715 => uX longname2769 => uY longname2823 => uZ longname2877 => u_ longname72 => ua longname3525 => uaa longname126 => ub longname3579 => uba longname180 => uc longname3633 => uca longname234 => ud longname3687 => uda longname288 => ue longname3741 => uea longname341 => uf longname3795 => ufa longname395 => ug longname3849 => uga longname449 => uh longname3903 => uha longname503 => ui longname3957 => uia longname557 => uj longname4011 => uja longname611 => uk longname4065 => uka longname665 => ul longname4119 => ula longname719 => um longname4173 => uma longname772 => un longname4227 => una longname825 => uo longname4281 => uoa longname879 => up longname4335 => upa longname933 => uq longname4389 => uqa longname987 => ur longname4443 => ura longname1041 => us longname4497 => usa longname1095 => ut longname4551 => uta longname1149 => uu longname4605 => uua longname1203 => uv longname4659 => uva longname1257 => uw longname4713 => uwa longname1311 => ux longname4767 => uxa longname1365 => uy longname4821 => uya longname1419 => uz longname4875 => uza longname19 => v longname2932 => v$ longname2986 => v0 longname3040 => v1 longname3094 => v2 longname3148 => v3 longname3202 => v4 longname3256 => v5 longname3310 => v6 longname3364 => v7 longname3418 => v8 longname3472 => v9 longname1474 => vA longname4930 => vAa longname1528 => vB longname4984 => vBa longname1582 => vC longname1636 => vD longname1690 => vE longname1744 => vF longname1798 => vG longname1852 => vH longname1906 => vI longname1960 => vJ longname2014 => vK longname2068 => vL longname2122 => vM longname2176 => vN longname2230 => vO longname2284 => vP longname2338 => vQ longname2392 => vR longname2446 => vS longname2500 => vT longname2554 => vU longname2608 => vV longname2662 => vW longname2716 => vX longname2770 => vY longname2824 => vZ longname2878 => v_ longname73 => va longname3526 => vaa longname127 => vb longname3580 => vba longname181 => vc longname3634 => vca longname235 => vd longname3688 => vda longname289 => ve longname3742 => vea longname342 => vf longname3796 => vfa longname396 => vg longname3850 => vga longname450 => vh longname3904 => vha longname504 => vi longname3958 => via longname558 => vj longname4012 => vja longname612 => vk longname4066 => vka longname666 => vl longname4120 => vla longname720 => vm longname4174 => vma longname773 => vn longname4228 => vna longname826 => vo longname4282 => voa longname880 => vp longname4336 => vpa longname934 => vq longname4390 => vqa longname988 => vr longname4444 => vra longname1042 => vs longname4498 => vsa longname1096 => vt longname4552 => vta longname1150 => vu longname4606 => vua longname1204 => vv longname4660 => vva longname1258 => vw longname4714 => vwa longname1312 => vx longname4768 => vxa longname1366 => vy longname4822 => vya longname1420 => vz longname4876 => vza longname20 => w longname2933 => w$ longname2987 => w0 longname3041 => w1 longname3095 => w2 longname3149 => w3 longname3203 => w4 longname3257 => w5 longname3311 => w6 longname3365 => w7 longname3419 => w8 longname3473 => w9 longname1475 => wA longname4931 => wAa longname1529 => wB longname4985 => wBa longname1583 => wC longname1637 => wD longname1691 => wE longname1745 => wF longname1799 => wG longname1853 => wH longname1907 => wI longname1961 => wJ longname2015 => wK longname2069 => wL longname2123 => wM longname2177 => wN longname2231 => wO longname2285 => wP longname2339 => wQ longname2393 => wR longname2447 => wS longname2501 => wT longname2555 => wU longname2609 => wV longname2663 => wW longname2717 => wX longname2771 => wY longname2825 => wZ longname2879 => w_ longname74 => wa longname3527 => waa longname128 => wb longname3581 => wba longname182 => wc longname3635 => wca longname236 => wd longname3689 => wda longname290 => we longname3743 => wea longname343 => wf longname3797 => wfa longname397 => wg longname3851 => wga longname451 => wh longname3905 => wha longname505 => wi longname3959 => wia longname559 => wj longname4013 => wja longname613 => wk longname4067 => wka longname667 => wl longname4121 => wla longname721 => wm longname4175 => wma longname774 => wn longname4229 => wna longname827 => wo longname4283 => woa longname881 => wp longname4337 => wpa longname935 => wq longname4391 => wqa longname989 => wr longname4445 => wra longname1043 => ws longname4499 => wsa longname1097 => wt longname4553 => wta longname1151 => wu longname4607 => wua longname1205 => wv longname4661 => wva longname1259 => ww longname4715 => wwa longname1313 => wx longname4769 => wxa longname1367 => wy longname4823 => wya longname1421 => wz longname4877 => wza longname21 => x longname2934 => x$ longname2988 => x0 longname3042 => x1 longname3096 => x2 longname3150 => x3 longname3204 => x4 longname3258 => x5 longname3312 => x6 longname3366 => x7 longname3420 => x8 longname3474 => x9 longname1476 => xA longname4932 => xAa longname1530 => xB longname4986 => xBa longname1584 => xC longname1638 => xD longname1692 => xE longname1746 => xF longname1800 => xG longname1854 => xH longname1908 => xI longname1962 => xJ longname2016 => xK longname2070 => xL longname2124 => xM longname2178 => xN longname2232 => xO longname2286 => xP longname2340 => xQ longname2394 => xR longname2448 => xS longname2502 => xT longname2556 => xU longname2610 => xV longname2664 => xW longname2718 => xX longname2772 => xY longname2826 => xZ longname2880 => x_ longname75 => xa longname3528 => xaa longname129 => xb longname3582 => xba longname183 => xc longname3636 => xca longname237 => xd longname3690 => xda longname291 => xe longname3744 => xea longname344 => xf longname3798 => xfa longname398 => xg longname3852 => xga longname452 => xh longname3906 => xha longname506 => xi longname3960 => xia longname560 => xj longname4014 => xja longname614 => xk longname4068 => xka longname668 => xl longname4122 => xla longname722 => xm longname4176 => xma longname775 => xn longname4230 => xna longname828 => xo longname4284 => xoa longname882 => xp longname4338 => xpa longname936 => xq longname4392 => xqa longname990 => xr longname4446 => xra longname1044 => xs longname4500 => xsa longname1098 => xt longname4554 => xta longname1152 => xu longname4608 => xua longname1206 => xv longname4662 => xva longname1260 => xw longname4716 => xwa longname1314 => xx longname4770 => xxa longname1368 => xy longname4824 => xya longname1422 => xz longname4878 => xza longname22 => y longname2935 => y$ longname2989 => y0 longname3043 => y1 longname3097 => y2 longname3151 => y3 longname3205 => y4 longname3259 => y5 longname3313 => y6 longname3367 => y7 longname3421 => y8 longname3475 => y9 longname1477 => yA longname4933 => yAa longname1531 => yB longname4987 => yBa longname1585 => yC longname1639 => yD longname1693 => yE longname1747 => yF longname1801 => yG longname1855 => yH longname1909 => yI longname1963 => yJ longname2017 => yK longname2071 => yL longname2125 => yM longname2179 => yN longname2233 => yO longname2287 => yP longname2341 => yQ longname2395 => yR longname2449 => yS longname2503 => yT longname2557 => yU longname2611 => yV longname2665 => yW longname2719 => yX longname2773 => yY longname2827 => yZ longname2881 => y_ longname76 => ya longname3529 => yaa longname130 => yb longname3583 => yba longname184 => yc longname3637 => yca longname238 => yd longname3691 => yda longname292 => ye longname3745 => yea longname345 => yf longname3799 => yfa longname399 => yg longname3853 => yga longname453 => yh longname3907 => yha longname507 => yi longname3961 => yia longname561 => yj longname4015 => yja longname615 => yk longname4069 => yka longname669 => yl longname4123 => yla longname723 => ym longname4177 => yma longname776 => yn longname4231 => yna longname829 => yo longname4285 => yoa longname883 => yp longname4339 => ypa longname937 => yq longname4393 => yqa longname991 => yr longname4447 => yra longname1045 => ys longname4501 => ysa longname1099 => yt longname4555 => yta longname1153 => yu longname4609 => yua longname1207 => yv longname4663 => yva longname1261 => yw longname4717 => ywa longname1315 => yx longname4771 => yxa longname1369 => yy longname4825 => yya longname1423 => yz longname4879 => yza longname23 => z longname2936 => z$ longname2990 => z0 longname3044 => z1 longname3098 => z2 longname3152 => z3 longname3206 => z4 longname3260 => z5 longname3314 => z6 longname3368 => z7 longname3422 => z8 longname3476 => z9 longname1478 => zA longname4934 => zAa longname1532 => zB longname4988 => zBa longname1586 => zC longname1640 => zD longname1694 => zE longname1748 => zF longname1802 => zG longname1856 => zH longname1910 => zI longname1964 => zJ longname2018 => zK longname2072 => zL longname2126 => zM longname2180 => zN longname2234 => zO longname2288 => zP longname2342 => zQ longname2396 => zR longname2450 => zS longname2504 => zT longname2558 => zU longname2612 => zV longname2666 => zW longname2720 => zX longname2774 => zY longname2828 => zZ longname2882 => z_ longname77 => za longname3530 => zaa longname131 => zb longname3584 => zba longname185 => zc longname3638 => zca longname239 => zd longname3692 => zda longname293 => ze longname3746 => zea longname346 => zf longname3800 => zfa longname400 => zg longname3854 => zga longname454 => zh longname3908 => zha longname508 => zi longname3962 => zia longname562 => zj longname4016 => zja longname616 => zk longname4070 => zka longname670 => zl longname4124 => zla longname724 => zm longname4178 => zma longname777 => zn longname4232 => zna longname830 => zo longname4286 => zoa longname884 => zp longname4340 => zpa longname938 => zq longname4394 => zqa longname992 => zr longname4448 => zra longname1046 => zs longname4502 => zsa longname1100 => zt longname4556 => zta longname1154 => zu longname4610 => zua longname1208 => zv longname4664 => zva longname1262 => zw longname4718 => zwa longname1316 => zx longname4772 => zxa longname1370 => zy longname4826 => zya longname1424 => zz longname4880 => zza (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "a" (global $gimport$0 i32)) (import "env" "b" (global $gimport$1 i32)) (import "env" "c" (global $gimport$2 i32)) (import "env" "d" (func $internal1)) (import "env" "e" (func $internal2)) (import "env" "f" (func $internal3)) (import "env" "g" (func $internal4)) (import "env" "h" (func $internal5)) (import "env" "i" (func $internal6)) (import "env" "j" (func $internal7)) (import "env" "k" (func $internal8)) (import "env" "l" (func $internal9)) (import "env" "m" (func $internal10)) (import "env" "n" (func $internal11)) (import "env" "o" (func $internal12)) (import "env" "p" (func $internal13)) (import "env" "q" (func $internal14)) (import "env" "r" (func $internal15)) (import "env" "s" (func $internal16)) (import "env" "t" (func $internal17)) (import "env" "u" (func $internal18)) (import "env" "v" (func $internal19)) (import "env" "w" (func $internal20)) (import "env" "x" (func $internal21)) (import "env" "y" (func $internal22)) (import "env" "z" (func $internal23)) (import "env" "A" (func $internal24)) (import "env" "B" (func $internal25)) (import "env" "C" (func $internal26)) (import "env" "D" (func $internal27)) (import "env" "E" (func $internal28)) (import "env" "F" (func $internal29)) (import "env" "G" (func $internal30)) (import "env" "H" (func $internal31)) (import "env" "I" (func $internal32)) (import "env" "J" (func $internal33)) (import "env" "K" (func $internal34)) (import "env" "L" (func $internal35)) (import "env" "M" (func $internal36)) (import "env" "N" (func $internal37)) (import "env" "O" (func $internal38)) (import "env" "P" (func $internal39)) (import "env" "Q" (func $internal40)) (import "env" "R" (func $internal41)) (import "env" "S" (func $internal42)) (import "env" "T" (func $internal43)) (import "env" "U" (func $internal44)) (import "env" "V" (func $internal45)) (import "env" "W" (func $internal46)) (import "env" "X" (func $internal47)) (import "env" "Y" (func $internal48)) (import "env" "Z" (func $internal49)) (import "env" "_" (func $internal50)) (import "env" "$" (func $internal51)) (import "env" "aa" (func $internal52)) (import "env" "ba" (func $internal53)) (import "env" "ca" (func $internal54)) (import "env" "da" (func $internal55)) (import "env" "ea" (func $internal56)) (import "env" "fa" (func $internal57)) (import "env" "ga" (func $internal58)) (import "env" "ha" (func $internal59)) (import "env" "ia" (func $internal60)) (import "env" "ja" (func $internal61)) (import "env" "ka" (func $internal62)) (import "env" "la" (func $internal63)) (import "env" "ma" (func $internal64)) (import "env" "na" (func $internal65)) (import "env" "oa" (func $internal66)) (import "env" "pa" (func $internal67)) (import "env" "qa" (func $internal68)) (import "env" "ra" (func $internal69)) (import "env" "sa" (func $internal70)) (import "env" "ta" (func $internal71)) (import "env" "ua" (func $internal72)) (import "env" "va" (func $internal73)) (import "env" "wa" (func $internal74)) (import "env" "xa" (func $internal75)) (import "env" "ya" (func $internal76)) (import "env" "za" (func $internal77)) (import "env" "Aa" (func $internal78)) (import "env" "Ba" (func $internal79)) (import "env" "Ca" (func $internal80)) (import "env" "Da" (func $internal81)) (import "env" "Ea" (func $internal82)) (import "env" "Fa" (func $internal83)) (import "env" "Ga" (func $internal84)) (import "env" "Ha" (func $internal85)) (import "env" "Ia" (func $internal86)) (import "env" "Ja" (func $internal87)) (import "env" "Ka" (func $internal88)) (import "env" "La" (func $internal89)) (import "env" "Ma" (func $internal90)) (import "env" "Na" (func $internal91)) (import "env" "Oa" (func $internal92)) (import "env" "Pa" (func $internal93)) (import "env" "Qa" (func $internal94)) (import "env" "Ra" (func $internal95)) (import "env" "Sa" (func $internal96)) (import "env" "Ta" (func $internal97)) (import "env" "Ua" (func $internal98)) (import "env" "Va" (func $internal99)) (import "env" "Wa" (func $internal100)) (import "env" "Xa" (func $internal101)) (import "env" "Ya" (func $internal102)) (import "env" "Za" (func $internal103)) (import "env" "_a" (func $internal104)) (import "env" "$a" (func $internal105)) (import "env" "ab" (func $internal106)) (import "env" "bb" (func $internal107)) (import "env" "cb" (func $internal108)) (import "env" "db" (func $internal109)) (import "env" "eb" (func $internal110)) (import "env" "fb" (func $internal111)) (import "env" "gb" (func $internal112)) (import "env" "hb" (func $internal113)) (import "env" "ib" (func $internal114)) (import "env" "jb" (func $internal115)) (import "env" "kb" (func $internal116)) (import "env" "lb" (func $internal117)) (import "env" "mb" (func $internal118)) (import "env" "nb" (func $internal119)) (import "env" "ob" (func $internal120)) (import "env" "pb" (func $internal121)) (import "env" "qb" (func $internal122)) (import "env" "rb" (func $internal123)) (import "env" "sb" (func $internal124)) (import "env" "tb" (func $internal125)) (import "env" "ub" (func $internal126)) (import "env" "vb" (func $internal127)) (import "env" "wb" (func $internal128)) (import "env" "xb" (func $internal129)) (import "env" "yb" (func $internal130)) (import "env" "zb" (func $internal131)) (import "env" "Ab" (func $internal132)) (import "env" "Bb" (func $internal133)) (import "env" "Cb" (func $internal134)) (import "env" "Db" (func $internal135)) (import "env" "Eb" (func $internal136)) (import "env" "Fb" (func $internal137)) (import "env" "Gb" (func $internal138)) (import "env" "Hb" (func $internal139)) (import "env" "Ib" (func $internal140)) (import "env" "Jb" (func $internal141)) (import "env" "Kb" (func $internal142)) (import "env" "Lb" (func $internal143)) (import "env" "Mb" (func $internal144)) (import "env" "Nb" (func $internal145)) (import "env" "Ob" (func $internal146)) (import "env" "Pb" (func $internal147)) (import "env" "Qb" (func $internal148)) (import "env" "Rb" (func $internal149)) (import "env" "Sb" (func $internal150)) (import "env" "Tb" (func $internal151)) (import "env" "Ub" (func $internal152)) (import "env" "Vb" (func $internal153)) (import "env" "Wb" (func $internal154)) (import "env" "Xb" (func $internal155)) (import "env" "Yb" (func $internal156)) (import "env" "Zb" (func $internal157)) (import "env" "_b" (func $internal158)) (import "env" "$b" (func $internal159)) (import "env" "ac" (func $internal160)) (import "env" "bc" (func $internal161)) (import "env" "cc" (func $internal162)) (import "env" "dc" (func $internal163)) (import "env" "ec" (func $internal164)) (import "env" "fc" (func $internal165)) (import "env" "gc" (func $internal166)) (import "env" "hc" (func $internal167)) (import "env" "ic" (func $internal168)) (import "env" "jc" (func $internal169)) (import "env" "kc" (func $internal170)) (import "env" "lc" (func $internal171)) (import "env" "mc" (func $internal172)) (import "env" "nc" (func $internal173)) (import "env" "oc" (func $internal174)) (import "env" "pc" (func $internal175)) (import "env" "qc" (func $internal176)) (import "env" "rc" (func $internal177)) (import "env" "sc" (func $internal178)) (import "env" "tc" (func $internal179)) (import "env" "uc" (func $internal180)) (import "env" "vc" (func $internal181)) (import "env" "wc" (func $internal182)) (import "env" "xc" (func $internal183)) (import "env" "yc" (func $internal184)) (import "env" "zc" (func $internal185)) (import "env" "Ac" (func $internal186)) (import "env" "Bc" (func $internal187)) (import "env" "Cc" (func $internal188)) (import "env" "Dc" (func $internal189)) (import "env" "Ec" (func $internal190)) (import "env" "Fc" (func $internal191)) (import "env" "Gc" (func $internal192)) (import "env" "Hc" (func $internal193)) (import "env" "Ic" (func $internal194)) (import "env" "Jc" (func $internal195)) (import "env" "Kc" (func $internal196)) (import "env" "Lc" (func $internal197)) (import "env" "Mc" (func $internal198)) (import "env" "Nc" (func $internal199)) (import "env" "Oc" (func $internal200)) (import "env" "Pc" (func $internal201)) (import "env" "Qc" (func $internal202)) (import "env" "Rc" (func $internal203)) (import "env" "Sc" (func $internal204)) (import "env" "Tc" (func $internal205)) (import "env" "Uc" (func $internal206)) (import "env" "Vc" (func $internal207)) (import "env" "Wc" (func $internal208)) (import "env" "Xc" (func $internal209)) (import "env" "Yc" (func $internal210)) (import "env" "Zc" (func $internal211)) (import "env" "_c" (func $internal212)) (import "env" "$c" (func $internal213)) (import "env" "ad" (func $internal214)) (import "env" "bd" (func $internal215)) (import "env" "cd" (func $internal216)) (import "env" "dd" (func $internal217)) (import "env" "ed" (func $internal218)) (import "env" "fd" (func $internal219)) (import "env" "gd" (func $internal220)) (import "env" "hd" (func $internal221)) (import "env" "id" (func $internal222)) (import "env" "jd" (func $internal223)) (import "env" "kd" (func $internal224)) (import "env" "ld" (func $internal225)) (import "env" "md" (func $internal226)) (import "env" "nd" (func $internal227)) (import "env" "od" (func $internal228)) (import "env" "pd" (func $internal229)) (import "env" "qd" (func $internal230)) (import "env" "rd" (func $internal231)) (import "env" "sd" (func $internal232)) (import "env" "td" (func $internal233)) (import "env" "ud" (func $internal234)) (import "env" "vd" (func $internal235)) (import "env" "wd" (func $internal236)) (import "env" "xd" (func $internal237)) (import "env" "yd" (func $internal238)) (import "env" "zd" (func $internal239)) (import "env" "Ad" (func $internal240)) (import "env" "Bd" (func $internal241)) (import "env" "Cd" (func $internal242)) (import "env" "Dd" (func $internal243)) (import "env" "Ed" (func $internal244)) (import "env" "Fd" (func $internal245)) (import "env" "Gd" (func $internal246)) (import "env" "Hd" (func $internal247)) (import "env" "Id" (func $internal248)) (import "env" "Jd" (func $internal249)) (import "env" "Kd" (func $internal250)) (import "env" "Ld" (func $internal251)) (import "env" "Md" (func $internal252)) (import "env" "Nd" (func $internal253)) (import "env" "Od" (func $internal254)) (import "env" "Pd" (func $internal255)) (import "env" "Qd" (func $internal256)) (import "env" "Rd" (func $internal257)) (import "env" "Sd" (func $internal258)) (import "env" "Td" (func $internal259)) (import "env" "Ud" (func $internal260)) (import "env" "Vd" (func $internal261)) (import "env" "Wd" (func $internal262)) (import "env" "Xd" (func $internal263)) (import "env" "Yd" (func $internal264)) (import "env" "Zd" (func $internal265)) (import "env" "_d" (func $internal266)) (import "env" "$d" (func $internal267)) (import "env" "ae" (func $internal268)) (import "env" "be" (func $internal269)) (import "env" "ce" (func $internal270)) (import "env" "de" (func $internal271)) (import "env" "ee" (func $internal272)) (import "env" "fe" (func $internal273)) (import "env" "ge" (func $internal274)) (import "env" "he" (func $internal275)) (import "env" "ie" (func $internal276)) (import "env" "je" (func $internal277)) (import "env" "ke" (func $internal278)) (import "env" "le" (func $internal279)) (import "env" "me" (func $internal280)) (import "env" "ne" (func $internal281)) (import "env" "oe" (func $internal282)) (import "env" "pe" (func $internal283)) (import "env" "qe" (func $internal284)) (import "env" "re" (func $internal285)) (import "env" "se" (func $internal286)) (import "env" "te" (func $internal287)) (import "env" "ue" (func $internal288)) (import "env" "ve" (func $internal289)) (import "env" "we" (func $internal290)) (import "env" "xe" (func $internal291)) (import "env" "ye" (func $internal292)) (import "env" "ze" (func $internal293)) (import "env" "Ae" (func $internal294)) (import "env" "Be" (func $internal295)) (import "env" "Ce" (func $internal296)) (import "env" "De" (func $internal297)) (import "env" "Ee" (func $internal298)) (import "env" "Fe" (func $internal299)) (import "env" "Ge" (func $internal300)) (import "env" "He" (func $internal301)) (import "env" "Ie" (func $internal302)) (import "env" "Je" (func $internal303)) (import "env" "Ke" (func $internal304)) (import "env" "Le" (func $internal305)) (import "env" "Me" (func $internal306)) (import "env" "Ne" (func $internal307)) (import "env" "Oe" (func $internal308)) (import "env" "Pe" (func $internal309)) (import "env" "Qe" (func $internal310)) (import "env" "Re" (func $internal311)) (import "env" "Se" (func $internal312)) (import "env" "Te" (func $internal313)) (import "env" "Ue" (func $internal314)) (import "env" "Ve" (func $internal315)) (import "env" "We" (func $internal316)) (import "env" "Xe" (func $internal317)) (import "env" "Ye" (func $internal318)) (import "env" "Ze" (func $internal319)) (import "env" "_e" (func $internal320)) (import "env" "$e" (func $internal321)) (import "env" "af" (func $internal322)) (import "env" "bf" (func $internal323)) (import "env" "cf" (func $internal324)) (import "env" "df" (func $internal325)) (import "env" "ef" (func $internal326)) (import "env" "ff" (func $internal327)) (import "env" "gf" (func $internal328)) (import "env" "hf" (func $internal329)) (import "env" "jf" (func $internal330)) (import "env" "kf" (func $internal331)) (import "env" "lf" (func $internal332)) (import "env" "mf" (func $internal333)) (import "env" "nf" (func $internal334)) (import "env" "of" (func $internal335)) (import "env" "pf" (func $internal336)) (import "env" "qf" (func $internal337)) (import "env" "rf" (func $internal338)) (import "env" "sf" (func $internal339)) (import "env" "tf" (func $internal340)) (import "env" "uf" (func $internal341)) (import "env" "vf" (func $internal342)) (import "env" "wf" (func $internal343)) (import "env" "xf" (func $internal344)) (import "env" "yf" (func $internal345)) (import "env" "zf" (func $internal346)) (import "env" "Af" (func $internal347)) (import "env" "Bf" (func $internal348)) (import "env" "Cf" (func $internal349)) (import "env" "Df" (func $internal350)) (import "env" "Ef" (func $internal351)) (import "env" "Ff" (func $internal352)) (import "env" "Gf" (func $internal353)) (import "env" "Hf" (func $internal354)) (import "env" "If" (func $internal355)) (import "env" "Jf" (func $internal356)) (import "env" "Kf" (func $internal357)) (import "env" "Lf" (func $internal358)) (import "env" "Mf" (func $internal359)) (import "env" "Nf" (func $internal360)) (import "env" "Of" (func $internal361)) (import "env" "Pf" (func $internal362)) (import "env" "Qf" (func $internal363)) (import "env" "Rf" (func $internal364)) (import "env" "Sf" (func $internal365)) (import "env" "Tf" (func $internal366)) (import "env" "Uf" (func $internal367)) (import "env" "Vf" (func $internal368)) (import "env" "Wf" (func $internal369)) (import "env" "Xf" (func $internal370)) (import "env" "Yf" (func $internal371)) (import "env" "Zf" (func $internal372)) (import "env" "_f" (func $internal373)) (import "env" "$f" (func $internal374)) (import "env" "ag" (func $internal375)) (import "env" "bg" (func $internal376)) (import "env" "cg" (func $internal377)) (import "env" "dg" (func $internal378)) (import "env" "eg" (func $internal379)) (import "env" "fg" (func $internal380)) (import "env" "gg" (func $internal381)) (import "env" "hg" (func $internal382)) (import "env" "ig" (func $internal383)) (import "env" "jg" (func $internal384)) (import "env" "kg" (func $internal385)) (import "env" "lg" (func $internal386)) (import "env" "mg" (func $internal387)) (import "env" "ng" (func $internal388)) (import "env" "og" (func $internal389)) (import "env" "pg" (func $internal390)) (import "env" "qg" (func $internal391)) (import "env" "rg" (func $internal392)) (import "env" "sg" (func $internal393)) (import "env" "tg" (func $internal394)) (import "env" "ug" (func $internal395)) (import "env" "vg" (func $internal396)) (import "env" "wg" (func $internal397)) (import "env" "xg" (func $internal398)) (import "env" "yg" (func $internal399)) (import "env" "zg" (func $internal400)) (import "env" "Ag" (func $internal401)) (import "env" "Bg" (func $internal402)) (import "env" "Cg" (func $internal403)) (import "env" "Dg" (func $internal404)) (import "env" "Eg" (func $internal405)) (import "env" "Fg" (func $internal406)) (import "env" "Gg" (func $internal407)) (import "env" "Hg" (func $internal408)) (import "env" "Ig" (func $internal409)) (import "env" "Jg" (func $internal410)) (import "env" "Kg" (func $internal411)) (import "env" "Lg" (func $internal412)) (import "env" "Mg" (func $internal413)) (import "env" "Ng" (func $internal414)) (import "env" "Og" (func $internal415)) (import "env" "Pg" (func $internal416)) (import "env" "Qg" (func $internal417)) (import "env" "Rg" (func $internal418)) (import "env" "Sg" (func $internal419)) (import "env" "Tg" (func $internal420)) (import "env" "Ug" (func $internal421)) (import "env" "Vg" (func $internal422)) (import "env" "Wg" (func $internal423)) (import "env" "Xg" (func $internal424)) (import "env" "Yg" (func $internal425)) (import "env" "Zg" (func $internal426)) (import "env" "_g" (func $internal427)) (import "env" "$g" (func $internal428)) (import "env" "ah" (func $internal429)) (import "env" "bh" (func $internal430)) (import "env" "ch" (func $internal431)) (import "env" "dh" (func $internal432)) (import "env" "eh" (func $internal433)) (import "env" "fh" (func $internal434)) (import "env" "gh" (func $internal435)) (import "env" "hh" (func $internal436)) (import "env" "ih" (func $internal437)) (import "env" "jh" (func $internal438)) (import "env" "kh" (func $internal439)) (import "env" "lh" (func $internal440)) (import "env" "mh" (func $internal441)) (import "env" "nh" (func $internal442)) (import "env" "oh" (func $internal443)) (import "env" "ph" (func $internal444)) (import "env" "qh" (func $internal445)) (import "env" "rh" (func $internal446)) (import "env" "sh" (func $internal447)) (import "env" "th" (func $internal448)) (import "env" "uh" (func $internal449)) (import "env" "vh" (func $internal450)) (import "env" "wh" (func $internal451)) (import "env" "xh" (func $internal452)) (import "env" "yh" (func $internal453)) (import "env" "zh" (func $internal454)) (import "env" "Ah" (func $internal455)) (import "env" "Bh" (func $internal456)) (import "env" "Ch" (func $internal457)) (import "env" "Dh" (func $internal458)) (import "env" "Eh" (func $internal459)) (import "env" "Fh" (func $internal460)) (import "env" "Gh" (func $internal461)) (import "env" "Hh" (func $internal462)) (import "env" "Ih" (func $internal463)) (import "env" "Jh" (func $internal464)) (import "env" "Kh" (func $internal465)) (import "env" "Lh" (func $internal466)) (import "env" "Mh" (func $internal467)) (import "env" "Nh" (func $internal468)) (import "env" "Oh" (func $internal469)) (import "env" "Ph" (func $internal470)) (import "env" "Qh" (func $internal471)) (import "env" "Rh" (func $internal472)) (import "env" "Sh" (func $internal473)) (import "env" "Th" (func $internal474)) (import "env" "Uh" (func $internal475)) (import "env" "Vh" (func $internal476)) (import "env" "Wh" (func $internal477)) (import "env" "Xh" (func $internal478)) (import "env" "Yh" (func $internal479)) (import "env" "Zh" (func $internal480)) (import "env" "_h" (func $internal481)) (import "env" "$h" (func $internal482)) (import "env" "ai" (func $internal483)) (import "env" "bi" (func $internal484)) (import "env" "ci" (func $internal485)) (import "env" "di" (func $internal486)) (import "env" "ei" (func $internal487)) (import "env" "fi" (func $internal488)) (import "env" "gi" (func $internal489)) (import "env" "hi" (func $internal490)) (import "env" "ii" (func $internal491)) (import "env" "ji" (func $internal492)) (import "env" "ki" (func $internal493)) (import "env" "li" (func $internal494)) (import "env" "mi" (func $internal495)) (import "env" "ni" (func $internal496)) (import "env" "oi" (func $internal497)) (import "env" "pi" (func $internal498)) (import "env" "qi" (func $internal499)) (import "env" "ri" (func $internal500)) (import "env" "si" (func $internal501)) (import "env" "ti" (func $internal502)) (import "env" "ui" (func $internal503)) (import "env" "vi" (func $internal504)) (import "env" "wi" (func $internal505)) (import "env" "xi" (func $internal506)) (import "env" "yi" (func $internal507)) (import "env" "zi" (func $internal508)) (import "env" "Ai" (func $internal509)) (import "env" "Bi" (func $internal510)) (import "env" "Ci" (func $internal511)) (import "env" "Di" (func $internal512)) (import "env" "Ei" (func $internal513)) (import "env" "Fi" (func $internal514)) (import "env" "Gi" (func $internal515)) (import "env" "Hi" (func $internal516)) (import "env" "Ii" (func $internal517)) (import "env" "Ji" (func $internal518)) (import "env" "Ki" (func $internal519)) (import "env" "Li" (func $internal520)) (import "env" "Mi" (func $internal521)) (import "env" "Ni" (func $internal522)) (import "env" "Oi" (func $internal523)) (import "env" "Pi" (func $internal524)) (import "env" "Qi" (func $internal525)) (import "env" "Ri" (func $internal526)) (import "env" "Si" (func $internal527)) (import "env" "Ti" (func $internal528)) (import "env" "Ui" (func $internal529)) (import "env" "Vi" (func $internal530)) (import "env" "Wi" (func $internal531)) (import "env" "Xi" (func $internal532)) (import "env" "Yi" (func $internal533)) (import "env" "Zi" (func $internal534)) (import "env" "_i" (func $internal535)) (import "env" "$i" (func $internal536)) (import "env" "aj" (func $internal537)) (import "env" "bj" (func $internal538)) (import "env" "cj" (func $internal539)) (import "env" "dj" (func $internal540)) (import "env" "ej" (func $internal541)) (import "env" "fj" (func $internal542)) (import "env" "gj" (func $internal543)) (import "env" "hj" (func $internal544)) (import "env" "ij" (func $internal545)) (import "env" "jj" (func $internal546)) (import "env" "kj" (func $internal547)) (import "env" "lj" (func $internal548)) (import "env" "mj" (func $internal549)) (import "env" "nj" (func $internal550)) (import "env" "oj" (func $internal551)) (import "env" "pj" (func $internal552)) (import "env" "qj" (func $internal553)) (import "env" "rj" (func $internal554)) (import "env" "sj" (func $internal555)) (import "env" "tj" (func $internal556)) (import "env" "uj" (func $internal557)) (import "env" "vj" (func $internal558)) (import "env" "wj" (func $internal559)) (import "env" "xj" (func $internal560)) (import "env" "yj" (func $internal561)) (import "env" "zj" (func $internal562)) (import "env" "Aj" (func $internal563)) (import "env" "Bj" (func $internal564)) (import "env" "Cj" (func $internal565)) (import "env" "Dj" (func $internal566)) (import "env" "Ej" (func $internal567)) (import "env" "Fj" (func $internal568)) (import "env" "Gj" (func $internal569)) (import "env" "Hj" (func $internal570)) (import "env" "Ij" (func $internal571)) (import "env" "Jj" (func $internal572)) (import "env" "Kj" (func $internal573)) (import "env" "Lj" (func $internal574)) (import "env" "Mj" (func $internal575)) (import "env" "Nj" (func $internal576)) (import "env" "Oj" (func $internal577)) (import "env" "Pj" (func $internal578)) (import "env" "Qj" (func $internal579)) (import "env" "Rj" (func $internal580)) (import "env" "Sj" (func $internal581)) (import "env" "Tj" (func $internal582)) (import "env" "Uj" (func $internal583)) (import "env" "Vj" (func $internal584)) (import "env" "Wj" (func $internal585)) (import "env" "Xj" (func $internal586)) (import "env" "Yj" (func $internal587)) (import "env" "Zj" (func $internal588)) (import "env" "_j" (func $internal589)) (import "env" "$j" (func $internal590)) (import "env" "ak" (func $internal591)) (import "env" "bk" (func $internal592)) (import "env" "ck" (func $internal593)) (import "env" "dk" (func $internal594)) (import "env" "ek" (func $internal595)) (import "env" "fk" (func $internal596)) (import "env" "gk" (func $internal597)) (import "env" "hk" (func $internal598)) (import "env" "ik" (func $internal599)) (import "env" "jk" (func $internal600)) (import "env" "kk" (func $internal601)) (import "env" "lk" (func $internal602)) (import "env" "mk" (func $internal603)) (import "env" "nk" (func $internal604)) (import "env" "ok" (func $internal605)) (import "env" "pk" (func $internal606)) (import "env" "qk" (func $internal607)) (import "env" "rk" (func $internal608)) (import "env" "sk" (func $internal609)) (import "env" "tk" (func $internal610)) (import "env" "uk" (func $internal611)) (import "env" "vk" (func $internal612)) (import "env" "wk" (func $internal613)) (import "env" "xk" (func $internal614)) (import "env" "yk" (func $internal615)) (import "env" "zk" (func $internal616)) (import "env" "Ak" (func $internal617)) (import "env" "Bk" (func $internal618)) (import "env" "Ck" (func $internal619)) (import "env" "Dk" (func $internal620)) (import "env" "Ek" (func $internal621)) (import "env" "Fk" (func $internal622)) (import "env" "Gk" (func $internal623)) (import "env" "Hk" (func $internal624)) (import "env" "Ik" (func $internal625)) (import "env" "Jk" (func $internal626)) (import "env" "Kk" (func $internal627)) (import "env" "Lk" (func $internal628)) (import "env" "Mk" (func $internal629)) (import "env" "Nk" (func $internal630)) (import "env" "Ok" (func $internal631)) (import "env" "Pk" (func $internal632)) (import "env" "Qk" (func $internal633)) (import "env" "Rk" (func $internal634)) (import "env" "Sk" (func $internal635)) (import "env" "Tk" (func $internal636)) (import "env" "Uk" (func $internal637)) (import "env" "Vk" (func $internal638)) (import "env" "Wk" (func $internal639)) (import "env" "Xk" (func $internal640)) (import "env" "Yk" (func $internal641)) (import "env" "Zk" (func $internal642)) (import "env" "_k" (func $internal643)) (import "env" "$k" (func $internal644)) (import "env" "al" (func $internal645)) (import "env" "bl" (func $internal646)) (import "env" "cl" (func $internal647)) (import "env" "dl" (func $internal648)) (import "env" "el" (func $internal649)) (import "env" "fl" (func $internal650)) (import "env" "gl" (func $internal651)) (import "env" "hl" (func $internal652)) (import "env" "il" (func $internal653)) (import "env" "jl" (func $internal654)) (import "env" "kl" (func $internal655)) (import "env" "ll" (func $internal656)) (import "env" "ml" (func $internal657)) (import "env" "nl" (func $internal658)) (import "env" "ol" (func $internal659)) (import "env" "pl" (func $internal660)) (import "env" "ql" (func $internal661)) (import "env" "rl" (func $internal662)) (import "env" "sl" (func $internal663)) (import "env" "tl" (func $internal664)) (import "env" "ul" (func $internal665)) (import "env" "vl" (func $internal666)) (import "env" "wl" (func $internal667)) (import "env" "xl" (func $internal668)) (import "env" "yl" (func $internal669)) (import "env" "zl" (func $internal670)) (import "env" "Al" (func $internal671)) (import "env" "Bl" (func $internal672)) (import "env" "Cl" (func $internal673)) (import "env" "Dl" (func $internal674)) (import "env" "El" (func $internal675)) (import "env" "Fl" (func $internal676)) (import "env" "Gl" (func $internal677)) (import "env" "Hl" (func $internal678)) (import "env" "Il" (func $internal679)) (import "env" "Jl" (func $internal680)) (import "env" "Kl" (func $internal681)) (import "env" "Ll" (func $internal682)) (import "env" "Ml" (func $internal683)) (import "env" "Nl" (func $internal684)) (import "env" "Ol" (func $internal685)) (import "env" "Pl" (func $internal686)) (import "env" "Ql" (func $internal687)) (import "env" "Rl" (func $internal688)) (import "env" "Sl" (func $internal689)) (import "env" "Tl" (func $internal690)) (import "env" "Ul" (func $internal691)) (import "env" "Vl" (func $internal692)) (import "env" "Wl" (func $internal693)) (import "env" "Xl" (func $internal694)) (import "env" "Yl" (func $internal695)) (import "env" "Zl" (func $internal696)) (import "env" "_l" (func $internal697)) (import "env" "$l" (func $internal698)) (import "env" "am" (func $internal699)) (import "env" "bm" (func $internal700)) (import "env" "cm" (func $internal701)) (import "env" "dm" (func $internal702)) (import "env" "em" (func $internal703)) (import "env" "fm" (func $internal704)) (import "env" "gm" (func $internal705)) (import "env" "hm" (func $internal706)) (import "env" "im" (func $internal707)) (import "env" "jm" (func $internal708)) (import "env" "km" (func $internal709)) (import "env" "lm" (func $internal710)) (import "env" "mm" (func $internal711)) (import "env" "nm" (func $internal712)) (import "env" "om" (func $internal713)) (import "env" "pm" (func $internal714)) (import "env" "qm" (func $internal715)) (import "env" "rm" (func $internal716)) (import "env" "sm" (func $internal717)) (import "env" "tm" (func $internal718)) (import "env" "um" (func $internal719)) (import "env" "vm" (func $internal720)) (import "env" "wm" (func $internal721)) (import "env" "xm" (func $internal722)) (import "env" "ym" (func $internal723)) (import "env" "zm" (func $internal724)) (import "env" "Am" (func $internal725)) (import "env" "Bm" (func $internal726)) (import "env" "Cm" (func $internal727)) (import "env" "Dm" (func $internal728)) (import "env" "Em" (func $internal729)) (import "env" "Fm" (func $internal730)) (import "env" "Gm" (func $internal731)) (import "env" "Hm" (func $internal732)) (import "env" "Im" (func $internal733)) (import "env" "Jm" (func $internal734)) (import "env" "Km" (func $internal735)) (import "env" "Lm" (func $internal736)) (import "env" "Mm" (func $internal737)) (import "env" "Nm" (func $internal738)) (import "env" "Om" (func $internal739)) (import "env" "Pm" (func $internal740)) (import "env" "Qm" (func $internal741)) (import "env" "Rm" (func $internal742)) (import "env" "Sm" (func $internal743)) (import "env" "Tm" (func $internal744)) (import "env" "Um" (func $internal745)) (import "env" "Vm" (func $internal746)) (import "env" "Wm" (func $internal747)) (import "env" "Xm" (func $internal748)) (import "env" "Ym" (func $internal749)) (import "env" "Zm" (func $internal750)) (import "env" "_m" (func $internal751)) (import "env" "$m" (func $internal752)) (import "env" "an" (func $internal753)) (import "env" "bn" (func $internal754)) (import "env" "cn" (func $internal755)) (import "env" "dn" (func $internal756)) (import "env" "en" (func $internal757)) (import "env" "fn" (func $internal758)) (import "env" "gn" (func $internal759)) (import "env" "hn" (func $internal760)) (import "env" "jn" (func $internal761)) (import "env" "kn" (func $internal762)) (import "env" "ln" (func $internal763)) (import "env" "mn" (func $internal764)) (import "env" "nn" (func $internal765)) (import "env" "on" (func $internal766)) (import "env" "pn" (func $internal767)) (import "env" "qn" (func $internal768)) (import "env" "rn" (func $internal769)) (import "env" "sn" (func $internal770)) (import "env" "tn" (func $internal771)) (import "env" "un" (func $internal772)) (import "env" "vn" (func $internal773)) (import "env" "wn" (func $internal774)) (import "env" "xn" (func $internal775)) (import "env" "yn" (func $internal776)) (import "env" "zn" (func $internal777)) (import "env" "An" (func $internal778)) (import "env" "Bn" (func $internal779)) (import "env" "Cn" (func $internal780)) (import "env" "Dn" (func $internal781)) (import "env" "En" (func $internal782)) (import "env" "Fn" (func $internal783)) (import "env" "Gn" (func $internal784)) (import "env" "Hn" (func $internal785)) (import "env" "In" (func $internal786)) (import "env" "Jn" (func $internal787)) (import "env" "Kn" (func $internal788)) (import "env" "Ln" (func $internal789)) (import "env" "Mn" (func $internal790)) (import "env" "Nn" (func $internal791)) (import "env" "On" (func $internal792)) (import "env" "Pn" (func $internal793)) (import "env" "Qn" (func $internal794)) (import "env" "Rn" (func $internal795)) (import "env" "Sn" (func $internal796)) (import "env" "Tn" (func $internal797)) (import "env" "Un" (func $internal798)) (import "env" "Vn" (func $internal799)) (import "env" "Wn" (func $internal800)) (import "env" "Xn" (func $internal801)) (import "env" "Yn" (func $internal802)) (import "env" "Zn" (func $internal803)) (import "env" "_n" (func $internal804)) (import "env" "$n" (func $internal805)) (import "env" "ao" (func $internal806)) (import "env" "bo" (func $internal807)) (import "env" "co" (func $internal808)) (import "env" "eo" (func $internal809)) (import "env" "fo" (func $internal810)) (import "env" "go" (func $internal811)) (import "env" "ho" (func $internal812)) (import "env" "io" (func $internal813)) (import "env" "jo" (func $internal814)) (import "env" "ko" (func $internal815)) (import "env" "lo" (func $internal816)) (import "env" "mo" (func $internal817)) (import "env" "no" (func $internal818)) (import "env" "oo" (func $internal819)) (import "env" "po" (func $internal820)) (import "env" "qo" (func $internal821)) (import "env" "ro" (func $internal822)) (import "env" "so" (func $internal823)) (import "env" "to" (func $internal824)) (import "env" "uo" (func $internal825)) (import "env" "vo" (func $internal826)) (import "env" "wo" (func $internal827)) (import "env" "xo" (func $internal828)) (import "env" "yo" (func $internal829)) (import "env" "zo" (func $internal830)) (import "env" "Ao" (func $internal831)) (import "env" "Bo" (func $internal832)) (import "env" "Co" (func $internal833)) (import "env" "Do" (func $internal834)) (import "env" "Eo" (func $internal835)) (import "env" "Fo" (func $internal836)) (import "env" "Go" (func $internal837)) (import "env" "Ho" (func $internal838)) (import "env" "Io" (func $internal839)) (import "env" "Jo" (func $internal840)) (import "env" "Ko" (func $internal841)) (import "env" "Lo" (func $internal842)) (import "env" "Mo" (func $internal843)) (import "env" "No" (func $internal844)) (import "env" "Oo" (func $internal845)) (import "env" "Po" (func $internal846)) (import "env" "Qo" (func $internal847)) (import "env" "Ro" (func $internal848)) (import "env" "So" (func $internal849)) (import "env" "To" (func $internal850)) (import "env" "Uo" (func $internal851)) (import "env" "Vo" (func $internal852)) (import "env" "Wo" (func $internal853)) (import "env" "Xo" (func $internal854)) (import "env" "Yo" (func $internal855)) (import "env" "Zo" (func $internal856)) (import "env" "_o" (func $internal857)) (import "env" "$o" (func $internal858)) (import "env" "ap" (func $internal859)) (import "env" "bp" (func $internal860)) (import "env" "cp" (func $internal861)) (import "env" "dp" (func $internal862)) (import "env" "ep" (func $internal863)) (import "env" "fp" (func $internal864)) (import "env" "gp" (func $internal865)) (import "env" "hp" (func $internal866)) (import "env" "ip" (func $internal867)) (import "env" "jp" (func $internal868)) (import "env" "kp" (func $internal869)) (import "env" "lp" (func $internal870)) (import "env" "mp" (func $internal871)) (import "env" "np" (func $internal872)) (import "env" "op" (func $internal873)) (import "env" "pp" (func $internal874)) (import "env" "qp" (func $internal875)) (import "env" "rp" (func $internal876)) (import "env" "sp" (func $internal877)) (import "env" "tp" (func $internal878)) (import "env" "up" (func $internal879)) (import "env" "vp" (func $internal880)) (import "env" "wp" (func $internal881)) (import "env" "xp" (func $internal882)) (import "env" "yp" (func $internal883)) (import "env" "zp" (func $internal884)) (import "env" "Ap" (func $internal885)) (import "env" "Bp" (func $internal886)) (import "env" "Cp" (func $internal887)) (import "env" "Dp" (func $internal888)) (import "env" "Ep" (func $internal889)) (import "env" "Fp" (func $internal890)) (import "env" "Gp" (func $internal891)) (import "env" "Hp" (func $internal892)) (import "env" "Ip" (func $internal893)) (import "env" "Jp" (func $internal894)) (import "env" "Kp" (func $internal895)) (import "env" "Lp" (func $internal896)) (import "env" "Mp" (func $internal897)) (import "env" "Np" (func $internal898)) (import "env" "Op" (func $internal899)) (import "env" "Pp" (func $internal900)) (import "env" "Qp" (func $internal901)) (import "env" "Rp" (func $internal902)) (import "env" "Sp" (func $internal903)) (import "env" "Tp" (func $internal904)) (import "env" "Up" (func $internal905)) (import "env" "Vp" (func $internal906)) (import "env" "Wp" (func $internal907)) (import "env" "Xp" (func $internal908)) (import "env" "Yp" (func $internal909)) (import "env" "Zp" (func $internal910)) (import "env" "_p" (func $internal911)) (import "env" "$p" (func $internal912)) (import "env" "aq" (func $internal913)) (import "env" "bq" (func $internal914)) (import "env" "cq" (func $internal915)) (import "env" "dq" (func $internal916)) (import "env" "eq" (func $internal917)) (import "env" "fq" (func $internal918)) (import "env" "gq" (func $internal919)) (import "env" "hq" (func $internal920)) (import "env" "iq" (func $internal921)) (import "env" "jq" (func $internal922)) (import "env" "kq" (func $internal923)) (import "env" "lq" (func $internal924)) (import "env" "mq" (func $internal925)) (import "env" "nq" (func $internal926)) (import "env" "oq" (func $internal927)) (import "env" "pq" (func $internal928)) (import "env" "qq" (func $internal929)) (import "env" "rq" (func $internal930)) (import "env" "sq" (func $internal931)) (import "env" "tq" (func $internal932)) (import "env" "uq" (func $internal933)) (import "env" "vq" (func $internal934)) (import "env" "wq" (func $internal935)) (import "env" "xq" (func $internal936)) (import "env" "yq" (func $internal937)) (import "env" "zq" (func $internal938)) (import "env" "Aq" (func $internal939)) (import "env" "Bq" (func $internal940)) (import "env" "Cq" (func $internal941)) (import "env" "Dq" (func $internal942)) (import "env" "Eq" (func $internal943)) (import "env" "Fq" (func $internal944)) (import "env" "Gq" (func $internal945)) (import "env" "Hq" (func $internal946)) (import "env" "Iq" (func $internal947)) (import "env" "Jq" (func $internal948)) (import "env" "Kq" (func $internal949)) (import "env" "Lq" (func $internal950)) (import "env" "Mq" (func $internal951)) (import "env" "Nq" (func $internal952)) (import "env" "Oq" (func $internal953)) (import "env" "Pq" (func $internal954)) (import "env" "Qq" (func $internal955)) (import "env" "Rq" (func $internal956)) (import "env" "Sq" (func $internal957)) (import "env" "Tq" (func $internal958)) (import "env" "Uq" (func $internal959)) (import "env" "Vq" (func $internal960)) (import "env" "Wq" (func $internal961)) (import "env" "Xq" (func $internal962)) (import "env" "Yq" (func $internal963)) (import "env" "Zq" (func $internal964)) (import "env" "_q" (func $internal965)) (import "env" "$q" (func $internal966)) (import "env" "ar" (func $internal967)) (import "env" "br" (func $internal968)) (import "env" "cr" (func $internal969)) (import "env" "dr" (func $internal970)) (import "env" "er" (func $internal971)) (import "env" "fr" (func $internal972)) (import "env" "gr" (func $internal973)) (import "env" "hr" (func $internal974)) (import "env" "ir" (func $internal975)) (import "env" "jr" (func $internal976)) (import "env" "kr" (func $internal977)) (import "env" "lr" (func $internal978)) (import "env" "mr" (func $internal979)) (import "env" "nr" (func $internal980)) (import "env" "or" (func $internal981)) (import "env" "pr" (func $internal982)) (import "env" "qr" (func $internal983)) (import "env" "rr" (func $internal984)) (import "env" "sr" (func $internal985)) (import "env" "tr" (func $internal986)) (import "env" "ur" (func $internal987)) (import "env" "vr" (func $internal988)) (import "env" "wr" (func $internal989)) (import "env" "xr" (func $internal990)) (import "env" "yr" (func $internal991)) (import "env" "zr" (func $internal992)) (import "env" "Ar" (func $internal993)) (import "env" "Br" (func $internal994)) (import "env" "Cr" (func $internal995)) (import "env" "Dr" (func $internal996)) (import "env" "Er" (func $internal997)) (import "env" "Fr" (func $internal998)) (import "env" "Gr" (func $internal999)) (import "env" "Hr" (func $internal1000)) (import "env" "Ir" (func $internal1001)) (import "env" "Jr" (func $internal1002)) (import "env" "Kr" (func $internal1003)) (import "env" "Lr" (func $internal1004)) (import "env" "Mr" (func $internal1005)) (import "env" "Nr" (func $internal1006)) (import "env" "Or" (func $internal1007)) (import "env" "Pr" (func $internal1008)) (import "env" "Qr" (func $internal1009)) (import "env" "Rr" (func $internal1010)) (import "env" "Sr" (func $internal1011)) (import "env" "Tr" (func $internal1012)) (import "env" "Ur" (func $internal1013)) (import "env" "Vr" (func $internal1014)) (import "env" "Wr" (func $internal1015)) (import "env" "Xr" (func $internal1016)) (import "env" "Yr" (func $internal1017)) (import "env" "Zr" (func $internal1018)) (import "env" "_r" (func $internal1019)) (import "env" "$r" (func $internal1020)) (import "env" "as" (func $internal1021)) (import "env" "bs" (func $internal1022)) (import "env" "cs" (func $internal1023)) (import "env" "ds" (func $internal1024)) (import "env" "es" (func $internal1025)) (import "env" "fs" (func $internal1026)) (import "env" "gs" (func $internal1027)) (import "env" "hs" (func $internal1028)) (import "env" "is" (func $internal1029)) (import "env" "js" (func $internal1030)) (import "env" "ks" (func $internal1031)) (import "env" "ls" (func $internal1032)) (import "env" "ms" (func $internal1033)) (import "env" "ns" (func $internal1034)) (import "env" "os" (func $internal1035)) (import "env" "ps" (func $internal1036)) (import "env" "qs" (func $internal1037)) (import "env" "rs" (func $internal1038)) (import "env" "ss" (func $internal1039)) (import "env" "ts" (func $internal1040)) (import "env" "us" (func $internal1041)) (import "env" "vs" (func $internal1042)) (import "env" "ws" (func $internal1043)) (import "env" "xs" (func $internal1044)) (import "env" "ys" (func $internal1045)) (import "env" "zs" (func $internal1046)) (import "env" "As" (func $internal1047)) (import "env" "Bs" (func $internal1048)) (import "env" "Cs" (func $internal1049)) (import "env" "Ds" (func $internal1050)) (import "env" "Es" (func $internal1051)) (import "env" "Fs" (func $internal1052)) (import "env" "Gs" (func $internal1053)) (import "env" "Hs" (func $internal1054)) (import "env" "Is" (func $internal1055)) (import "env" "Js" (func $internal1056)) (import "env" "Ks" (func $internal1057)) (import "env" "Ls" (func $internal1058)) (import "env" "Ms" (func $internal1059)) (import "env" "Ns" (func $internal1060)) (import "env" "Os" (func $internal1061)) (import "env" "Ps" (func $internal1062)) (import "env" "Qs" (func $internal1063)) (import "env" "Rs" (func $internal1064)) (import "env" "Ss" (func $internal1065)) (import "env" "Ts" (func $internal1066)) (import "env" "Us" (func $internal1067)) (import "env" "Vs" (func $internal1068)) (import "env" "Ws" (func $internal1069)) (import "env" "Xs" (func $internal1070)) (import "env" "Ys" (func $internal1071)) (import "env" "Zs" (func $internal1072)) (import "env" "_s" (func $internal1073)) (import "env" "$s" (func $internal1074)) (import "env" "at" (func $internal1075)) (import "env" "bt" (func $internal1076)) (import "env" "ct" (func $internal1077)) (import "env" "dt" (func $internal1078)) (import "env" "et" (func $internal1079)) (import "env" "ft" (func $internal1080)) (import "env" "gt" (func $internal1081)) (import "env" "ht" (func $internal1082)) (import "env" "it" (func $internal1083)) (import "env" "jt" (func $internal1084)) (import "env" "kt" (func $internal1085)) (import "env" "lt" (func $internal1086)) (import "env" "mt" (func $internal1087)) (import "env" "nt" (func $internal1088)) (import "env" "ot" (func $internal1089)) (import "env" "pt" (func $internal1090)) (import "env" "qt" (func $internal1091)) (import "env" "rt" (func $internal1092)) (import "env" "st" (func $internal1093)) (import "env" "tt" (func $internal1094)) (import "env" "ut" (func $internal1095)) (import "env" "vt" (func $internal1096)) (import "env" "wt" (func $internal1097)) (import "env" "xt" (func $internal1098)) (import "env" "yt" (func $internal1099)) (import "env" "zt" (func $internal1100)) (import "env" "At" (func $internal1101)) (import "env" "Bt" (func $internal1102)) (import "env" "Ct" (func $internal1103)) (import "env" "Dt" (func $internal1104)) (import "env" "Et" (func $internal1105)) (import "env" "Ft" (func $internal1106)) (import "env" "Gt" (func $internal1107)) (import "env" "Ht" (func $internal1108)) (import "env" "It" (func $internal1109)) (import "env" "Jt" (func $internal1110)) (import "env" "Kt" (func $internal1111)) (import "env" "Lt" (func $internal1112)) (import "env" "Mt" (func $internal1113)) (import "env" "Nt" (func $internal1114)) (import "env" "Ot" (func $internal1115)) (import "env" "Pt" (func $internal1116)) (import "env" "Qt" (func $internal1117)) (import "env" "Rt" (func $internal1118)) (import "env" "St" (func $internal1119)) (import "env" "Tt" (func $internal1120)) (import "env" "Ut" (func $internal1121)) (import "env" "Vt" (func $internal1122)) (import "env" "Wt" (func $internal1123)) (import "env" "Xt" (func $internal1124)) (import "env" "Yt" (func $internal1125)) (import "env" "Zt" (func $internal1126)) (import "env" "_t" (func $internal1127)) (import "env" "$t" (func $internal1128)) (import "env" "au" (func $internal1129)) (import "env" "bu" (func $internal1130)) (import "env" "cu" (func $internal1131)) (import "env" "du" (func $internal1132)) (import "env" "eu" (func $internal1133)) (import "env" "fu" (func $internal1134)) (import "env" "gu" (func $internal1135)) (import "env" "hu" (func $internal1136)) (import "env" "iu" (func $internal1137)) (import "env" "ju" (func $internal1138)) (import "env" "ku" (func $internal1139)) (import "env" "lu" (func $internal1140)) (import "env" "mu" (func $internal1141)) (import "env" "nu" (func $internal1142)) (import "env" "ou" (func $internal1143)) (import "env" "pu" (func $internal1144)) (import "env" "qu" (func $internal1145)) (import "env" "ru" (func $internal1146)) (import "env" "su" (func $internal1147)) (import "env" "tu" (func $internal1148)) (import "env" "uu" (func $internal1149)) (import "env" "vu" (func $internal1150)) (import "env" "wu" (func $internal1151)) (import "env" "xu" (func $internal1152)) (import "env" "yu" (func $internal1153)) (import "env" "zu" (func $internal1154)) (import "env" "Au" (func $internal1155)) (import "env" "Bu" (func $internal1156)) (import "env" "Cu" (func $internal1157)) (import "env" "Du" (func $internal1158)) (import "env" "Eu" (func $internal1159)) (import "env" "Fu" (func $internal1160)) (import "env" "Gu" (func $internal1161)) (import "env" "Hu" (func $internal1162)) (import "env" "Iu" (func $internal1163)) (import "env" "Ju" (func $internal1164)) (import "env" "Ku" (func $internal1165)) (import "env" "Lu" (func $internal1166)) (import "env" "Mu" (func $internal1167)) (import "env" "Nu" (func $internal1168)) (import "env" "Ou" (func $internal1169)) (import "env" "Pu" (func $internal1170)) (import "env" "Qu" (func $internal1171)) (import "env" "Ru" (func $internal1172)) (import "env" "Su" (func $internal1173)) (import "env" "Tu" (func $internal1174)) (import "env" "Uu" (func $internal1175)) (import "env" "Vu" (func $internal1176)) (import "env" "Wu" (func $internal1177)) (import "env" "Xu" (func $internal1178)) (import "env" "Yu" (func $internal1179)) (import "env" "Zu" (func $internal1180)) (import "env" "_u" (func $internal1181)) (import "env" "$u" (func $internal1182)) (import "env" "av" (func $internal1183)) (import "env" "bv" (func $internal1184)) (import "env" "cv" (func $internal1185)) (import "env" "dv" (func $internal1186)) (import "env" "ev" (func $internal1187)) (import "env" "fv" (func $internal1188)) (import "env" "gv" (func $internal1189)) (import "env" "hv" (func $internal1190)) (import "env" "iv" (func $internal1191)) (import "env" "jv" (func $internal1192)) (import "env" "kv" (func $internal1193)) (import "env" "lv" (func $internal1194)) (import "env" "mv" (func $internal1195)) (import "env" "nv" (func $internal1196)) (import "env" "ov" (func $internal1197)) (import "env" "pv" (func $internal1198)) (import "env" "qv" (func $internal1199)) (import "env" "rv" (func $internal1200)) (import "env" "sv" (func $internal1201)) (import "env" "tv" (func $internal1202)) (import "env" "uv" (func $internal1203)) (import "env" "vv" (func $internal1204)) (import "env" "wv" (func $internal1205)) (import "env" "xv" (func $internal1206)) (import "env" "yv" (func $internal1207)) (import "env" "zv" (func $internal1208)) (import "env" "Av" (func $internal1209)) (import "env" "Bv" (func $internal1210)) (import "env" "Cv" (func $internal1211)) (import "env" "Dv" (func $internal1212)) (import "env" "Ev" (func $internal1213)) (import "env" "Fv" (func $internal1214)) (import "env" "Gv" (func $internal1215)) (import "env" "Hv" (func $internal1216)) (import "env" "Iv" (func $internal1217)) (import "env" "Jv" (func $internal1218)) (import "env" "Kv" (func $internal1219)) (import "env" "Lv" (func $internal1220)) (import "env" "Mv" (func $internal1221)) (import "env" "Nv" (func $internal1222)) (import "env" "Ov" (func $internal1223)) (import "env" "Pv" (func $internal1224)) (import "env" "Qv" (func $internal1225)) (import "env" "Rv" (func $internal1226)) (import "env" "Sv" (func $internal1227)) (import "env" "Tv" (func $internal1228)) (import "env" "Uv" (func $internal1229)) (import "env" "Vv" (func $internal1230)) (import "env" "Wv" (func $internal1231)) (import "env" "Xv" (func $internal1232)) (import "env" "Yv" (func $internal1233)) (import "env" "Zv" (func $internal1234)) (import "env" "_v" (func $internal1235)) (import "env" "$v" (func $internal1236)) (import "env" "aw" (func $internal1237)) (import "env" "bw" (func $internal1238)) (import "env" "cw" (func $internal1239)) (import "env" "dw" (func $internal1240)) (import "env" "ew" (func $internal1241)) (import "env" "fw" (func $internal1242)) (import "env" "gw" (func $internal1243)) (import "env" "hw" (func $internal1244)) (import "env" "iw" (func $internal1245)) (import "env" "jw" (func $internal1246)) (import "env" "kw" (func $internal1247)) (import "env" "lw" (func $internal1248)) (import "env" "mw" (func $internal1249)) (import "env" "nw" (func $internal1250)) (import "env" "ow" (func $internal1251)) (import "env" "pw" (func $internal1252)) (import "env" "qw" (func $internal1253)) (import "env" "rw" (func $internal1254)) (import "env" "sw" (func $internal1255)) (import "env" "tw" (func $internal1256)) (import "env" "uw" (func $internal1257)) (import "env" "vw" (func $internal1258)) (import "env" "ww" (func $internal1259)) (import "env" "xw" (func $internal1260)) (import "env" "yw" (func $internal1261)) (import "env" "zw" (func $internal1262)) (import "env" "Aw" (func $internal1263)) (import "env" "Bw" (func $internal1264)) (import "env" "Cw" (func $internal1265)) (import "env" "Dw" (func $internal1266)) (import "env" "Ew" (func $internal1267)) (import "env" "Fw" (func $internal1268)) (import "env" "Gw" (func $internal1269)) (import "env" "Hw" (func $internal1270)) (import "env" "Iw" (func $internal1271)) (import "env" "Jw" (func $internal1272)) (import "env" "Kw" (func $internal1273)) (import "env" "Lw" (func $internal1274)) (import "env" "Mw" (func $internal1275)) (import "env" "Nw" (func $internal1276)) (import "env" "Ow" (func $internal1277)) (import "env" "Pw" (func $internal1278)) (import "env" "Qw" (func $internal1279)) (import "env" "Rw" (func $internal1280)) (import "env" "Sw" (func $internal1281)) (import "env" "Tw" (func $internal1282)) (import "env" "Uw" (func $internal1283)) (import "env" "Vw" (func $internal1284)) (import "env" "Ww" (func $internal1285)) (import "env" "Xw" (func $internal1286)) (import "env" "Yw" (func $internal1287)) (import "env" "Zw" (func $internal1288)) (import "env" "_w" (func $internal1289)) (import "env" "$w" (func $internal1290)) (import "env" "ax" (func $internal1291)) (import "env" "bx" (func $internal1292)) (import "env" "cx" (func $internal1293)) (import "env" "dx" (func $internal1294)) (import "env" "ex" (func $internal1295)) (import "env" "fx" (func $internal1296)) (import "env" "gx" (func $internal1297)) (import "env" "hx" (func $internal1298)) (import "env" "ix" (func $internal1299)) (import "env" "jx" (func $internal1300)) (import "env" "kx" (func $internal1301)) (import "env" "lx" (func $internal1302)) (import "env" "mx" (func $internal1303)) (import "env" "nx" (func $internal1304)) (import "env" "ox" (func $internal1305)) (import "env" "px" (func $internal1306)) (import "env" "qx" (func $internal1307)) (import "env" "rx" (func $internal1308)) (import "env" "sx" (func $internal1309)) (import "env" "tx" (func $internal1310)) (import "env" "ux" (func $internal1311)) (import "env" "vx" (func $internal1312)) (import "env" "wx" (func $internal1313)) (import "env" "xx" (func $internal1314)) (import "env" "yx" (func $internal1315)) (import "env" "zx" (func $internal1316)) (import "env" "Ax" (func $internal1317)) (import "env" "Bx" (func $internal1318)) (import "env" "Cx" (func $internal1319)) (import "env" "Dx" (func $internal1320)) (import "env" "Ex" (func $internal1321)) (import "env" "Fx" (func $internal1322)) (import "env" "Gx" (func $internal1323)) (import "env" "Hx" (func $internal1324)) (import "env" "Ix" (func $internal1325)) (import "env" "Jx" (func $internal1326)) (import "env" "Kx" (func $internal1327)) (import "env" "Lx" (func $internal1328)) (import "env" "Mx" (func $internal1329)) (import "env" "Nx" (func $internal1330)) (import "env" "Ox" (func $internal1331)) (import "env" "Px" (func $internal1332)) (import "env" "Qx" (func $internal1333)) (import "env" "Rx" (func $internal1334)) (import "env" "Sx" (func $internal1335)) (import "env" "Tx" (func $internal1336)) (import "env" "Ux" (func $internal1337)) (import "env" "Vx" (func $internal1338)) (import "env" "Wx" (func $internal1339)) (import "env" "Xx" (func $internal1340)) (import "env" "Yx" (func $internal1341)) (import "env" "Zx" (func $internal1342)) (import "env" "_x" (func $internal1343)) (import "env" "$x" (func $internal1344)) (import "env" "ay" (func $internal1345)) (import "env" "by" (func $internal1346)) (import "env" "cy" (func $internal1347)) (import "env" "dy" (func $internal1348)) (import "env" "ey" (func $internal1349)) (import "env" "fy" (func $internal1350)) (import "env" "gy" (func $internal1351)) (import "env" "hy" (func $internal1352)) (import "env" "iy" (func $internal1353)) (import "env" "jy" (func $internal1354)) (import "env" "ky" (func $internal1355)) (import "env" "ly" (func $internal1356)) (import "env" "my" (func $internal1357)) (import "env" "ny" (func $internal1358)) (import "env" "oy" (func $internal1359)) (import "env" "py" (func $internal1360)) (import "env" "qy" (func $internal1361)) (import "env" "ry" (func $internal1362)) (import "env" "sy" (func $internal1363)) (import "env" "ty" (func $internal1364)) (import "env" "uy" (func $internal1365)) (import "env" "vy" (func $internal1366)) (import "env" "wy" (func $internal1367)) (import "env" "xy" (func $internal1368)) (import "env" "yy" (func $internal1369)) (import "env" "zy" (func $internal1370)) (import "env" "Ay" (func $internal1371)) (import "env" "By" (func $internal1372)) (import "env" "Cy" (func $internal1373)) (import "env" "Dy" (func $internal1374)) (import "env" "Ey" (func $internal1375)) (import "env" "Fy" (func $internal1376)) (import "env" "Gy" (func $internal1377)) (import "env" "Hy" (func $internal1378)) (import "env" "Iy" (func $internal1379)) (import "env" "Jy" (func $internal1380)) (import "env" "Ky" (func $internal1381)) (import "env" "Ly" (func $internal1382)) (import "env" "My" (func $internal1383)) (import "env" "Ny" (func $internal1384)) (import "env" "Oy" (func $internal1385)) (import "env" "Py" (func $internal1386)) (import "env" "Qy" (func $internal1387)) (import "env" "Ry" (func $internal1388)) (import "env" "Sy" (func $internal1389)) (import "env" "Ty" (func $internal1390)) (import "env" "Uy" (func $internal1391)) (import "env" "Vy" (func $internal1392)) (import "env" "Wy" (func $internal1393)) (import "env" "Xy" (func $internal1394)) (import "env" "Yy" (func $internal1395)) (import "env" "Zy" (func $internal1396)) (import "env" "_y" (func $internal1397)) (import "env" "$y" (func $internal1398)) (import "env" "az" (func $internal1399)) (import "env" "bz" (func $internal1400)) (import "env" "cz" (func $internal1401)) (import "env" "dz" (func $internal1402)) (import "env" "ez" (func $internal1403)) (import "env" "fz" (func $internal1404)) (import "env" "gz" (func $internal1405)) (import "env" "hz" (func $internal1406)) (import "env" "iz" (func $internal1407)) (import "env" "jz" (func $internal1408)) (import "env" "kz" (func $internal1409)) (import "env" "lz" (func $internal1410)) (import "env" "mz" (func $internal1411)) (import "env" "nz" (func $internal1412)) (import "env" "oz" (func $internal1413)) (import "env" "pz" (func $internal1414)) (import "env" "qz" (func $internal1415)) (import "env" "rz" (func $internal1416)) (import "env" "sz" (func $internal1417)) (import "env" "tz" (func $internal1418)) (import "env" "uz" (func $internal1419)) (import "env" "vz" (func $internal1420)) (import "env" "wz" (func $internal1421)) (import "env" "xz" (func $internal1422)) (import "env" "yz" (func $internal1423)) (import "env" "zz" (func $internal1424)) (import "env" "Az" (func $internal1425)) (import "env" "Bz" (func $internal1426)) (import "env" "Cz" (func $internal1427)) (import "env" "Dz" (func $internal1428)) (import "env" "Ez" (func $internal1429)) (import "env" "Fz" (func $internal1430)) (import "env" "Gz" (func $internal1431)) (import "env" "Hz" (func $internal1432)) (import "env" "Iz" (func $internal1433)) (import "env" "Jz" (func $internal1434)) (import "env" "Kz" (func $internal1435)) (import "env" "Lz" (func $internal1436)) (import "env" "Mz" (func $internal1437)) (import "env" "Nz" (func $internal1438)) (import "env" "Oz" (func $internal1439)) (import "env" "Pz" (func $internal1440)) (import "env" "Qz" (func $internal1441)) (import "env" "Rz" (func $internal1442)) (import "env" "Sz" (func $internal1443)) (import "env" "Tz" (func $internal1444)) (import "env" "Uz" (func $internal1445)) (import "env" "Vz" (func $internal1446)) (import "env" "Wz" (func $internal1447)) (import "env" "Xz" (func $internal1448)) (import "env" "Yz" (func $internal1449)) (import "env" "Zz" (func $internal1450)) (import "env" "_z" (func $internal1451)) (import "env" "$z" (func $internal1452)) (import "env" "aA" (func $internal1453)) (import "env" "bA" (func $internal1454)) (import "env" "cA" (func $internal1455)) (import "env" "dA" (func $internal1456)) (import "env" "eA" (func $internal1457)) (import "env" "fA" (func $internal1458)) (import "env" "gA" (func $internal1459)) (import "env" "hA" (func $internal1460)) (import "env" "iA" (func $internal1461)) (import "env" "jA" (func $internal1462)) (import "env" "kA" (func $internal1463)) (import "env" "lA" (func $internal1464)) (import "env" "mA" (func $internal1465)) (import "env" "nA" (func $internal1466)) (import "env" "oA" (func $internal1467)) (import "env" "pA" (func $internal1468)) (import "env" "qA" (func $internal1469)) (import "env" "rA" (func $internal1470)) (import "env" "sA" (func $internal1471)) (import "env" "tA" (func $internal1472)) (import "env" "uA" (func $internal1473)) (import "env" "vA" (func $internal1474)) (import "env" "wA" (func $internal1475)) (import "env" "xA" (func $internal1476)) (import "env" "yA" (func $internal1477)) (import "env" "zA" (func $internal1478)) (import "env" "AA" (func $internal1479)) (import "env" "BA" (func $internal1480)) (import "env" "CA" (func $internal1481)) (import "env" "DA" (func $internal1482)) (import "env" "EA" (func $internal1483)) (import "env" "FA" (func $internal1484)) (import "env" "GA" (func $internal1485)) (import "env" "HA" (func $internal1486)) (import "env" "IA" (func $internal1487)) (import "env" "JA" (func $internal1488)) (import "env" "KA" (func $internal1489)) (import "env" "LA" (func $internal1490)) (import "env" "MA" (func $internal1491)) (import "env" "NA" (func $internal1492)) (import "env" "OA" (func $internal1493)) (import "env" "PA" (func $internal1494)) (import "env" "QA" (func $internal1495)) (import "env" "RA" (func $internal1496)) (import "env" "SA" (func $internal1497)) (import "env" "TA" (func $internal1498)) (import "env" "UA" (func $internal1499)) (import "env" "VA" (func $internal1500)) (import "env" "WA" (func $internal1501)) (import "env" "XA" (func $internal1502)) (import "env" "YA" (func $internal1503)) (import "env" "ZA" (func $internal1504)) (import "env" "_A" (func $internal1505)) (import "env" "$A" (func $internal1506)) (import "env" "aB" (func $internal1507)) (import "env" "bB" (func $internal1508)) (import "env" "cB" (func $internal1509)) (import "env" "dB" (func $internal1510)) (import "env" "eB" (func $internal1511)) (import "env" "fB" (func $internal1512)) (import "env" "gB" (func $internal1513)) (import "env" "hB" (func $internal1514)) (import "env" "iB" (func $internal1515)) (import "env" "jB" (func $internal1516)) (import "env" "kB" (func $internal1517)) (import "env" "lB" (func $internal1518)) (import "env" "mB" (func $internal1519)) (import "env" "nB" (func $internal1520)) (import "env" "oB" (func $internal1521)) (import "env" "pB" (func $internal1522)) (import "env" "qB" (func $internal1523)) (import "env" "rB" (func $internal1524)) (import "env" "sB" (func $internal1525)) (import "env" "tB" (func $internal1526)) (import "env" "uB" (func $internal1527)) (import "env" "vB" (func $internal1528)) (import "env" "wB" (func $internal1529)) (import "env" "xB" (func $internal1530)) (import "env" "yB" (func $internal1531)) (import "env" "zB" (func $internal1532)) (import "env" "AB" (func $internal1533)) (import "env" "BB" (func $internal1534)) (import "env" "CB" (func $internal1535)) (import "env" "DB" (func $internal1536)) (import "env" "EB" (func $internal1537)) (import "env" "FB" (func $internal1538)) (import "env" "GB" (func $internal1539)) (import "env" "HB" (func $internal1540)) (import "env" "IB" (func $internal1541)) (import "env" "JB" (func $internal1542)) (import "env" "KB" (func $internal1543)) (import "env" "LB" (func $internal1544)) (import "env" "MB" (func $internal1545)) (import "env" "NB" (func $internal1546)) (import "env" "OB" (func $internal1547)) (import "env" "PB" (func $internal1548)) (import "env" "QB" (func $internal1549)) (import "env" "RB" (func $internal1550)) (import "env" "SB" (func $internal1551)) (import "env" "TB" (func $internal1552)) (import "env" "UB" (func $internal1553)) (import "env" "VB" (func $internal1554)) (import "env" "WB" (func $internal1555)) (import "env" "XB" (func $internal1556)) (import "env" "YB" (func $internal1557)) (import "env" "ZB" (func $internal1558)) (import "env" "_B" (func $internal1559)) (import "env" "$B" (func $internal1560)) (import "env" "aC" (func $internal1561)) (import "env" "bC" (func $internal1562)) (import "env" "cC" (func $internal1563)) (import "env" "dC" (func $internal1564)) (import "env" "eC" (func $internal1565)) (import "env" "fC" (func $internal1566)) (import "env" "gC" (func $internal1567)) (import "env" "hC" (func $internal1568)) (import "env" "iC" (func $internal1569)) (import "env" "jC" (func $internal1570)) (import "env" "kC" (func $internal1571)) (import "env" "lC" (func $internal1572)) (import "env" "mC" (func $internal1573)) (import "env" "nC" (func $internal1574)) (import "env" "oC" (func $internal1575)) (import "env" "pC" (func $internal1576)) (import "env" "qC" (func $internal1577)) (import "env" "rC" (func $internal1578)) (import "env" "sC" (func $internal1579)) (import "env" "tC" (func $internal1580)) (import "env" "uC" (func $internal1581)) (import "env" "vC" (func $internal1582)) (import "env" "wC" (func $internal1583)) (import "env" "xC" (func $internal1584)) (import "env" "yC" (func $internal1585)) (import "env" "zC" (func $internal1586)) (import "env" "AC" (func $internal1587)) (import "env" "BC" (func $internal1588)) (import "env" "CC" (func $internal1589)) (import "env" "DC" (func $internal1590)) (import "env" "EC" (func $internal1591)) (import "env" "FC" (func $internal1592)) (import "env" "GC" (func $internal1593)) (import "env" "HC" (func $internal1594)) (import "env" "IC" (func $internal1595)) (import "env" "JC" (func $internal1596)) (import "env" "KC" (func $internal1597)) (import "env" "LC" (func $internal1598)) (import "env" "MC" (func $internal1599)) (import "env" "NC" (func $internal1600)) (import "env" "OC" (func $internal1601)) (import "env" "PC" (func $internal1602)) (import "env" "QC" (func $internal1603)) (import "env" "RC" (func $internal1604)) (import "env" "SC" (func $internal1605)) (import "env" "TC" (func $internal1606)) (import "env" "UC" (func $internal1607)) (import "env" "VC" (func $internal1608)) (import "env" "WC" (func $internal1609)) (import "env" "XC" (func $internal1610)) (import "env" "YC" (func $internal1611)) (import "env" "ZC" (func $internal1612)) (import "env" "_C" (func $internal1613)) (import "env" "$C" (func $internal1614)) (import "env" "aD" (func $internal1615)) (import "env" "bD" (func $internal1616)) (import "env" "cD" (func $internal1617)) (import "env" "dD" (func $internal1618)) (import "env" "eD" (func $internal1619)) (import "env" "fD" (func $internal1620)) (import "env" "gD" (func $internal1621)) (import "env" "hD" (func $internal1622)) (import "env" "iD" (func $internal1623)) (import "env" "jD" (func $internal1624)) (import "env" "kD" (func $internal1625)) (import "env" "lD" (func $internal1626)) (import "env" "mD" (func $internal1627)) (import "env" "nD" (func $internal1628)) (import "env" "oD" (func $internal1629)) (import "env" "pD" (func $internal1630)) (import "env" "qD" (func $internal1631)) (import "env" "rD" (func $internal1632)) (import "env" "sD" (func $internal1633)) (import "env" "tD" (func $internal1634)) (import "env" "uD" (func $internal1635)) (import "env" "vD" (func $internal1636)) (import "env" "wD" (func $internal1637)) (import "env" "xD" (func $internal1638)) (import "env" "yD" (func $internal1639)) (import "env" "zD" (func $internal1640)) (import "env" "AD" (func $internal1641)) (import "env" "BD" (func $internal1642)) (import "env" "CD" (func $internal1643)) (import "env" "DD" (func $internal1644)) (import "env" "ED" (func $internal1645)) (import "env" "FD" (func $internal1646)) (import "env" "GD" (func $internal1647)) (import "env" "HD" (func $internal1648)) (import "env" "ID" (func $internal1649)) (import "env" "JD" (func $internal1650)) (import "env" "KD" (func $internal1651)) (import "env" "LD" (func $internal1652)) (import "env" "MD" (func $internal1653)) (import "env" "ND" (func $internal1654)) (import "env" "OD" (func $internal1655)) (import "env" "PD" (func $internal1656)) (import "env" "QD" (func $internal1657)) (import "env" "RD" (func $internal1658)) (import "env" "SD" (func $internal1659)) (import "env" "TD" (func $internal1660)) (import "env" "UD" (func $internal1661)) (import "env" "VD" (func $internal1662)) (import "env" "WD" (func $internal1663)) (import "env" "XD" (func $internal1664)) (import "env" "YD" (func $internal1665)) (import "env" "ZD" (func $internal1666)) (import "env" "_D" (func $internal1667)) (import "env" "$D" (func $internal1668)) (import "env" "aE" (func $internal1669)) (import "env" "bE" (func $internal1670)) (import "env" "cE" (func $internal1671)) (import "env" "dE" (func $internal1672)) (import "env" "eE" (func $internal1673)) (import "env" "fE" (func $internal1674)) (import "env" "gE" (func $internal1675)) (import "env" "hE" (func $internal1676)) (import "env" "iE" (func $internal1677)) (import "env" "jE" (func $internal1678)) (import "env" "kE" (func $internal1679)) (import "env" "lE" (func $internal1680)) (import "env" "mE" (func $internal1681)) (import "env" "nE" (func $internal1682)) (import "env" "oE" (func $internal1683)) (import "env" "pE" (func $internal1684)) (import "env" "qE" (func $internal1685)) (import "env" "rE" (func $internal1686)) (import "env" "sE" (func $internal1687)) (import "env" "tE" (func $internal1688)) (import "env" "uE" (func $internal1689)) (import "env" "vE" (func $internal1690)) (import "env" "wE" (func $internal1691)) (import "env" "xE" (func $internal1692)) (import "env" "yE" (func $internal1693)) (import "env" "zE" (func $internal1694)) (import "env" "AE" (func $internal1695)) (import "env" "BE" (func $internal1696)) (import "env" "CE" (func $internal1697)) (import "env" "DE" (func $internal1698)) (import "env" "EE" (func $internal1699)) (import "env" "FE" (func $internal1700)) (import "env" "GE" (func $internal1701)) (import "env" "HE" (func $internal1702)) (import "env" "IE" (func $internal1703)) (import "env" "JE" (func $internal1704)) (import "env" "KE" (func $internal1705)) (import "env" "LE" (func $internal1706)) (import "env" "ME" (func $internal1707)) (import "env" "NE" (func $internal1708)) (import "env" "OE" (func $internal1709)) (import "env" "PE" (func $internal1710)) (import "env" "QE" (func $internal1711)) (import "env" "RE" (func $internal1712)) (import "env" "SE" (func $internal1713)) (import "env" "TE" (func $internal1714)) (import "env" "UE" (func $internal1715)) (import "env" "VE" (func $internal1716)) (import "env" "WE" (func $internal1717)) (import "env" "XE" (func $internal1718)) (import "env" "YE" (func $internal1719)) (import "env" "ZE" (func $internal1720)) (import "env" "_E" (func $internal1721)) (import "env" "$E" (func $internal1722)) (import "env" "aF" (func $internal1723)) (import "env" "bF" (func $internal1724)) (import "env" "cF" (func $internal1725)) (import "env" "dF" (func $internal1726)) (import "env" "eF" (func $internal1727)) (import "env" "fF" (func $internal1728)) (import "env" "gF" (func $internal1729)) (import "env" "hF" (func $internal1730)) (import "env" "iF" (func $internal1731)) (import "env" "jF" (func $internal1732)) (import "env" "kF" (func $internal1733)) (import "env" "lF" (func $internal1734)) (import "env" "mF" (func $internal1735)) (import "env" "nF" (func $internal1736)) (import "env" "oF" (func $internal1737)) (import "env" "pF" (func $internal1738)) (import "env" "qF" (func $internal1739)) (import "env" "rF" (func $internal1740)) (import "env" "sF" (func $internal1741)) (import "env" "tF" (func $internal1742)) (import "env" "uF" (func $internal1743)) (import "env" "vF" (func $internal1744)) (import "env" "wF" (func $internal1745)) (import "env" "xF" (func $internal1746)) (import "env" "yF" (func $internal1747)) (import "env" "zF" (func $internal1748)) (import "env" "AF" (func $internal1749)) (import "env" "BF" (func $internal1750)) (import "env" "CF" (func $internal1751)) (import "env" "DF" (func $internal1752)) (import "env" "EF" (func $internal1753)) (import "env" "FF" (func $internal1754)) (import "env" "GF" (func $internal1755)) (import "env" "HF" (func $internal1756)) (import "env" "IF" (func $internal1757)) (import "env" "JF" (func $internal1758)) (import "env" "KF" (func $internal1759)) (import "env" "LF" (func $internal1760)) (import "env" "MF" (func $internal1761)) (import "env" "NF" (func $internal1762)) (import "env" "OF" (func $internal1763)) (import "env" "PF" (func $internal1764)) (import "env" "QF" (func $internal1765)) (import "env" "RF" (func $internal1766)) (import "env" "SF" (func $internal1767)) (import "env" "TF" (func $internal1768)) (import "env" "UF" (func $internal1769)) (import "env" "VF" (func $internal1770)) (import "env" "WF" (func $internal1771)) (import "env" "XF" (func $internal1772)) (import "env" "YF" (func $internal1773)) (import "env" "ZF" (func $internal1774)) (import "env" "_F" (func $internal1775)) (import "env" "$F" (func $internal1776)) (import "env" "aG" (func $internal1777)) (import "env" "bG" (func $internal1778)) (import "env" "cG" (func $internal1779)) (import "env" "dG" (func $internal1780)) (import "env" "eG" (func $internal1781)) (import "env" "fG" (func $internal1782)) (import "env" "gG" (func $internal1783)) (import "env" "hG" (func $internal1784)) (import "env" "iG" (func $internal1785)) (import "env" "jG" (func $internal1786)) (import "env" "kG" (func $internal1787)) (import "env" "lG" (func $internal1788)) (import "env" "mG" (func $internal1789)) (import "env" "nG" (func $internal1790)) (import "env" "oG" (func $internal1791)) (import "env" "pG" (func $internal1792)) (import "env" "qG" (func $internal1793)) (import "env" "rG" (func $internal1794)) (import "env" "sG" (func $internal1795)) (import "env" "tG" (func $internal1796)) (import "env" "uG" (func $internal1797)) (import "env" "vG" (func $internal1798)) (import "env" "wG" (func $internal1799)) (import "env" "xG" (func $internal1800)) (import "env" "yG" (func $internal1801)) (import "env" "zG" (func $internal1802)) (import "env" "AG" (func $internal1803)) (import "env" "BG" (func $internal1804)) (import "env" "CG" (func $internal1805)) (import "env" "DG" (func $internal1806)) (import "env" "EG" (func $internal1807)) (import "env" "FG" (func $internal1808)) (import "env" "GG" (func $internal1809)) (import "env" "HG" (func $internal1810)) (import "env" "IG" (func $internal1811)) (import "env" "JG" (func $internal1812)) (import "env" "KG" (func $internal1813)) (import "env" "LG" (func $internal1814)) (import "env" "MG" (func $internal1815)) (import "env" "NG" (func $internal1816)) (import "env" "OG" (func $internal1817)) (import "env" "PG" (func $internal1818)) (import "env" "QG" (func $internal1819)) (import "env" "RG" (func $internal1820)) (import "env" "SG" (func $internal1821)) (import "env" "TG" (func $internal1822)) (import "env" "UG" (func $internal1823)) (import "env" "VG" (func $internal1824)) (import "env" "WG" (func $internal1825)) (import "env" "XG" (func $internal1826)) (import "env" "YG" (func $internal1827)) (import "env" "ZG" (func $internal1828)) (import "env" "_G" (func $internal1829)) (import "env" "$G" (func $internal1830)) (import "env" "aH" (func $internal1831)) (import "env" "bH" (func $internal1832)) (import "env" "cH" (func $internal1833)) (import "env" "dH" (func $internal1834)) (import "env" "eH" (func $internal1835)) (import "env" "fH" (func $internal1836)) (import "env" "gH" (func $internal1837)) (import "env" "hH" (func $internal1838)) (import "env" "iH" (func $internal1839)) (import "env" "jH" (func $internal1840)) (import "env" "kH" (func $internal1841)) (import "env" "lH" (func $internal1842)) (import "env" "mH" (func $internal1843)) (import "env" "nH" (func $internal1844)) (import "env" "oH" (func $internal1845)) (import "env" "pH" (func $internal1846)) (import "env" "qH" (func $internal1847)) (import "env" "rH" (func $internal1848)) (import "env" "sH" (func $internal1849)) (import "env" "tH" (func $internal1850)) (import "env" "uH" (func $internal1851)) (import "env" "vH" (func $internal1852)) (import "env" "wH" (func $internal1853)) (import "env" "xH" (func $internal1854)) (import "env" "yH" (func $internal1855)) (import "env" "zH" (func $internal1856)) (import "env" "AH" (func $internal1857)) (import "env" "BH" (func $internal1858)) (import "env" "CH" (func $internal1859)) (import "env" "DH" (func $internal1860)) (import "env" "EH" (func $internal1861)) (import "env" "FH" (func $internal1862)) (import "env" "GH" (func $internal1863)) (import "env" "HH" (func $internal1864)) (import "env" "IH" (func $internal1865)) (import "env" "JH" (func $internal1866)) (import "env" "KH" (func $internal1867)) (import "env" "LH" (func $internal1868)) (import "env" "MH" (func $internal1869)) (import "env" "NH" (func $internal1870)) (import "env" "OH" (func $internal1871)) (import "env" "PH" (func $internal1872)) (import "env" "QH" (func $internal1873)) (import "env" "RH" (func $internal1874)) (import "env" "SH" (func $internal1875)) (import "env" "TH" (func $internal1876)) (import "env" "UH" (func $internal1877)) (import "env" "VH" (func $internal1878)) (import "env" "WH" (func $internal1879)) (import "env" "XH" (func $internal1880)) (import "env" "YH" (func $internal1881)) (import "env" "ZH" (func $internal1882)) (import "env" "_H" (func $internal1883)) (import "env" "$H" (func $internal1884)) (import "env" "aI" (func $internal1885)) (import "env" "bI" (func $internal1886)) (import "env" "cI" (func $internal1887)) (import "env" "dI" (func $internal1888)) (import "env" "eI" (func $internal1889)) (import "env" "fI" (func $internal1890)) (import "env" "gI" (func $internal1891)) (import "env" "hI" (func $internal1892)) (import "env" "iI" (func $internal1893)) (import "env" "jI" (func $internal1894)) (import "env" "kI" (func $internal1895)) (import "env" "lI" (func $internal1896)) (import "env" "mI" (func $internal1897)) (import "env" "nI" (func $internal1898)) (import "env" "oI" (func $internal1899)) (import "env" "pI" (func $internal1900)) (import "env" "qI" (func $internal1901)) (import "env" "rI" (func $internal1902)) (import "env" "sI" (func $internal1903)) (import "env" "tI" (func $internal1904)) (import "env" "uI" (func $internal1905)) (import "env" "vI" (func $internal1906)) (import "env" "wI" (func $internal1907)) (import "env" "xI" (func $internal1908)) (import "env" "yI" (func $internal1909)) (import "env" "zI" (func $internal1910)) (import "env" "AI" (func $internal1911)) (import "env" "BI" (func $internal1912)) (import "env" "CI" (func $internal1913)) (import "env" "DI" (func $internal1914)) (import "env" "EI" (func $internal1915)) (import "env" "FI" (func $internal1916)) (import "env" "GI" (func $internal1917)) (import "env" "HI" (func $internal1918)) (import "env" "II" (func $internal1919)) (import "env" "JI" (func $internal1920)) (import "env" "KI" (func $internal1921)) (import "env" "LI" (func $internal1922)) (import "env" "MI" (func $internal1923)) (import "env" "NI" (func $internal1924)) (import "env" "OI" (func $internal1925)) (import "env" "PI" (func $internal1926)) (import "env" "QI" (func $internal1927)) (import "env" "RI" (func $internal1928)) (import "env" "SI" (func $internal1929)) (import "env" "TI" (func $internal1930)) (import "env" "UI" (func $internal1931)) (import "env" "VI" (func $internal1932)) (import "env" "WI" (func $internal1933)) (import "env" "XI" (func $internal1934)) (import "env" "YI" (func $internal1935)) (import "env" "ZI" (func $internal1936)) (import "env" "_I" (func $internal1937)) (import "env" "$I" (func $internal1938)) (import "env" "aJ" (func $internal1939)) (import "env" "bJ" (func $internal1940)) (import "env" "cJ" (func $internal1941)) (import "env" "dJ" (func $internal1942)) (import "env" "eJ" (func $internal1943)) (import "env" "fJ" (func $internal1944)) (import "env" "gJ" (func $internal1945)) (import "env" "hJ" (func $internal1946)) (import "env" "iJ" (func $internal1947)) (import "env" "jJ" (func $internal1948)) (import "env" "kJ" (func $internal1949)) (import "env" "lJ" (func $internal1950)) (import "env" "mJ" (func $internal1951)) (import "env" "nJ" (func $internal1952)) (import "env" "oJ" (func $internal1953)) (import "env" "pJ" (func $internal1954)) (import "env" "qJ" (func $internal1955)) (import "env" "rJ" (func $internal1956)) (import "env" "sJ" (func $internal1957)) (import "env" "tJ" (func $internal1958)) (import "env" "uJ" (func $internal1959)) (import "env" "vJ" (func $internal1960)) (import "env" "wJ" (func $internal1961)) (import "env" "xJ" (func $internal1962)) (import "env" "yJ" (func $internal1963)) (import "env" "zJ" (func $internal1964)) (import "env" "AJ" (func $internal1965)) (import "env" "BJ" (func $internal1966)) (import "env" "CJ" (func $internal1967)) (import "env" "DJ" (func $internal1968)) (import "env" "EJ" (func $internal1969)) (import "env" "FJ" (func $internal1970)) (import "env" "GJ" (func $internal1971)) (import "env" "HJ" (func $internal1972)) (import "env" "IJ" (func $internal1973)) (import "env" "JJ" (func $internal1974)) (import "env" "KJ" (func $internal1975)) (import "env" "LJ" (func $internal1976)) (import "env" "MJ" (func $internal1977)) (import "env" "NJ" (func $internal1978)) (import "env" "OJ" (func $internal1979)) (import "env" "PJ" (func $internal1980)) (import "env" "QJ" (func $internal1981)) (import "env" "RJ" (func $internal1982)) (import "env" "SJ" (func $internal1983)) (import "env" "TJ" (func $internal1984)) (import "env" "UJ" (func $internal1985)) (import "env" "VJ" (func $internal1986)) (import "env" "WJ" (func $internal1987)) (import "env" "XJ" (func $internal1988)) (import "env" "YJ" (func $internal1989)) (import "env" "ZJ" (func $internal1990)) (import "env" "_J" (func $internal1991)) (import "env" "$J" (func $internal1992)) (import "env" "aK" (func $internal1993)) (import "env" "bK" (func $internal1994)) (import "env" "cK" (func $internal1995)) (import "env" "dK" (func $internal1996)) (import "env" "eK" (func $internal1997)) (import "env" "fK" (func $internal1998)) (import "env" "gK" (func $internal1999)) (import "env" "hK" (func $internal2000)) (import "env" "iK" (func $internal2001)) (import "env" "jK" (func $internal2002)) (import "env" "kK" (func $internal2003)) (import "env" "lK" (func $internal2004)) (import "env" "mK" (func $internal2005)) (import "env" "nK" (func $internal2006)) (import "env" "oK" (func $internal2007)) (import "env" "pK" (func $internal2008)) (import "env" "qK" (func $internal2009)) (import "env" "rK" (func $internal2010)) (import "env" "sK" (func $internal2011)) (import "env" "tK" (func $internal2012)) (import "env" "uK" (func $internal2013)) (import "env" "vK" (func $internal2014)) (import "env" "wK" (func $internal2015)) (import "env" "xK" (func $internal2016)) (import "env" "yK" (func $internal2017)) (import "env" "zK" (func $internal2018)) (import "env" "AK" (func $internal2019)) (import "env" "BK" (func $internal2020)) (import "env" "CK" (func $internal2021)) (import "env" "DK" (func $internal2022)) (import "env" "EK" (func $internal2023)) (import "env" "FK" (func $internal2024)) (import "env" "GK" (func $internal2025)) (import "env" "HK" (func $internal2026)) (import "env" "IK" (func $internal2027)) (import "env" "JK" (func $internal2028)) (import "env" "KK" (func $internal2029)) (import "env" "LK" (func $internal2030)) (import "env" "MK" (func $internal2031)) (import "env" "NK" (func $internal2032)) (import "env" "OK" (func $internal2033)) (import "env" "PK" (func $internal2034)) (import "env" "QK" (func $internal2035)) (import "env" "RK" (func $internal2036)) (import "env" "SK" (func $internal2037)) (import "env" "TK" (func $internal2038)) (import "env" "UK" (func $internal2039)) (import "env" "VK" (func $internal2040)) (import "env" "WK" (func $internal2041)) (import "env" "XK" (func $internal2042)) (import "env" "YK" (func $internal2043)) (import "env" "ZK" (func $internal2044)) (import "env" "_K" (func $internal2045)) (import "env" "$K" (func $internal2046)) (import "env" "aL" (func $internal2047)) (import "env" "bL" (func $internal2048)) (import "env" "cL" (func $internal2049)) (import "env" "dL" (func $internal2050)) (import "env" "eL" (func $internal2051)) (import "env" "fL" (func $internal2052)) (import "env" "gL" (func $internal2053)) (import "env" "hL" (func $internal2054)) (import "env" "iL" (func $internal2055)) (import "env" "jL" (func $internal2056)) (import "env" "kL" (func $internal2057)) (import "env" "lL" (func $internal2058)) (import "env" "mL" (func $internal2059)) (import "env" "nL" (func $internal2060)) (import "env" "oL" (func $internal2061)) (import "env" "pL" (func $internal2062)) (import "env" "qL" (func $internal2063)) (import "env" "rL" (func $internal2064)) (import "env" "sL" (func $internal2065)) (import "env" "tL" (func $internal2066)) (import "env" "uL" (func $internal2067)) (import "env" "vL" (func $internal2068)) (import "env" "wL" (func $internal2069)) (import "env" "xL" (func $internal2070)) (import "env" "yL" (func $internal2071)) (import "env" "zL" (func $internal2072)) (import "env" "AL" (func $internal2073)) (import "env" "BL" (func $internal2074)) (import "env" "CL" (func $internal2075)) (import "env" "DL" (func $internal2076)) (import "env" "EL" (func $internal2077)) (import "env" "FL" (func $internal2078)) (import "env" "GL" (func $internal2079)) (import "env" "HL" (func $internal2080)) (import "env" "IL" (func $internal2081)) (import "env" "JL" (func $internal2082)) (import "env" "KL" (func $internal2083)) (import "env" "LL" (func $internal2084)) (import "env" "ML" (func $internal2085)) (import "env" "NL" (func $internal2086)) (import "env" "OL" (func $internal2087)) (import "env" "PL" (func $internal2088)) (import "env" "QL" (func $internal2089)) (import "env" "RL" (func $internal2090)) (import "env" "SL" (func $internal2091)) (import "env" "TL" (func $internal2092)) (import "env" "UL" (func $internal2093)) (import "env" "VL" (func $internal2094)) (import "env" "WL" (func $internal2095)) (import "env" "XL" (func $internal2096)) (import "env" "YL" (func $internal2097)) (import "env" "ZL" (func $internal2098)) (import "env" "_L" (func $internal2099)) (import "env" "$L" (func $internal2100)) (import "env" "aM" (func $internal2101)) (import "env" "bM" (func $internal2102)) (import "env" "cM" (func $internal2103)) (import "env" "dM" (func $internal2104)) (import "env" "eM" (func $internal2105)) (import "env" "fM" (func $internal2106)) (import "env" "gM" (func $internal2107)) (import "env" "hM" (func $internal2108)) (import "env" "iM" (func $internal2109)) (import "env" "jM" (func $internal2110)) (import "env" "kM" (func $internal2111)) (import "env" "lM" (func $internal2112)) (import "env" "mM" (func $internal2113)) (import "env" "nM" (func $internal2114)) (import "env" "oM" (func $internal2115)) (import "env" "pM" (func $internal2116)) (import "env" "qM" (func $internal2117)) (import "env" "rM" (func $internal2118)) (import "env" "sM" (func $internal2119)) (import "env" "tM" (func $internal2120)) (import "env" "uM" (func $internal2121)) (import "env" "vM" (func $internal2122)) (import "env" "wM" (func $internal2123)) (import "env" "xM" (func $internal2124)) (import "env" "yM" (func $internal2125)) (import "env" "zM" (func $internal2126)) (import "env" "AM" (func $internal2127)) (import "env" "BM" (func $internal2128)) (import "env" "CM" (func $internal2129)) (import "env" "DM" (func $internal2130)) (import "env" "EM" (func $internal2131)) (import "env" "FM" (func $internal2132)) (import "env" "GM" (func $internal2133)) (import "env" "HM" (func $internal2134)) (import "env" "IM" (func $internal2135)) (import "env" "JM" (func $internal2136)) (import "env" "KM" (func $internal2137)) (import "env" "LM" (func $internal2138)) (import "env" "MM" (func $internal2139)) (import "env" "NM" (func $internal2140)) (import "env" "OM" (func $internal2141)) (import "env" "PM" (func $internal2142)) (import "env" "QM" (func $internal2143)) (import "env" "RM" (func $internal2144)) (import "env" "SM" (func $internal2145)) (import "env" "TM" (func $internal2146)) (import "env" "UM" (func $internal2147)) (import "env" "VM" (func $internal2148)) (import "env" "WM" (func $internal2149)) (import "env" "XM" (func $internal2150)) (import "env" "YM" (func $internal2151)) (import "env" "ZM" (func $internal2152)) (import "env" "_M" (func $internal2153)) (import "env" "$M" (func $internal2154)) (import "env" "aN" (func $internal2155)) (import "env" "bN" (func $internal2156)) (import "env" "cN" (func $internal2157)) (import "env" "dN" (func $internal2158)) (import "env" "eN" (func $internal2159)) (import "env" "fN" (func $internal2160)) (import "env" "gN" (func $internal2161)) (import "env" "hN" (func $internal2162)) (import "env" "iN" (func $internal2163)) (import "env" "jN" (func $internal2164)) (import "env" "kN" (func $internal2165)) (import "env" "lN" (func $internal2166)) (import "env" "mN" (func $internal2167)) (import "env" "nN" (func $internal2168)) (import "env" "oN" (func $internal2169)) (import "env" "pN" (func $internal2170)) (import "env" "qN" (func $internal2171)) (import "env" "rN" (func $internal2172)) (import "env" "sN" (func $internal2173)) (import "env" "tN" (func $internal2174)) (import "env" "uN" (func $internal2175)) (import "env" "vN" (func $internal2176)) (import "env" "wN" (func $internal2177)) (import "env" "xN" (func $internal2178)) (import "env" "yN" (func $internal2179)) (import "env" "zN" (func $internal2180)) (import "env" "AN" (func $internal2181)) (import "env" "BN" (func $internal2182)) (import "env" "CN" (func $internal2183)) (import "env" "DN" (func $internal2184)) (import "env" "EN" (func $internal2185)) (import "env" "FN" (func $internal2186)) (import "env" "GN" (func $internal2187)) (import "env" "HN" (func $internal2188)) (import "env" "IN" (func $internal2189)) (import "env" "JN" (func $internal2190)) (import "env" "KN" (func $internal2191)) (import "env" "LN" (func $internal2192)) (import "env" "MN" (func $internal2193)) (import "env" "NN" (func $internal2194)) (import "env" "ON" (func $internal2195)) (import "env" "PN" (func $internal2196)) (import "env" "QN" (func $internal2197)) (import "env" "RN" (func $internal2198)) (import "env" "SN" (func $internal2199)) (import "env" "TN" (func $internal2200)) (import "env" "UN" (func $internal2201)) (import "env" "VN" (func $internal2202)) (import "env" "WN" (func $internal2203)) (import "env" "XN" (func $internal2204)) (import "env" "YN" (func $internal2205)) (import "env" "ZN" (func $internal2206)) (import "env" "_N" (func $internal2207)) (import "env" "$N" (func $internal2208)) (import "env" "aO" (func $internal2209)) (import "env" "bO" (func $internal2210)) (import "env" "cO" (func $internal2211)) (import "env" "dO" (func $internal2212)) (import "env" "eO" (func $internal2213)) (import "env" "fO" (func $internal2214)) (import "env" "gO" (func $internal2215)) (import "env" "hO" (func $internal2216)) (import "env" "iO" (func $internal2217)) (import "env" "jO" (func $internal2218)) (import "env" "kO" (func $internal2219)) (import "env" "lO" (func $internal2220)) (import "env" "mO" (func $internal2221)) (import "env" "nO" (func $internal2222)) (import "env" "oO" (func $internal2223)) (import "env" "pO" (func $internal2224)) (import "env" "qO" (func $internal2225)) (import "env" "rO" (func $internal2226)) (import "env" "sO" (func $internal2227)) (import "env" "tO" (func $internal2228)) (import "env" "uO" (func $internal2229)) (import "env" "vO" (func $internal2230)) (import "env" "wO" (func $internal2231)) (import "env" "xO" (func $internal2232)) (import "env" "yO" (func $internal2233)) (import "env" "zO" (func $internal2234)) (import "env" "AO" (func $internal2235)) (import "env" "BO" (func $internal2236)) (import "env" "CO" (func $internal2237)) (import "env" "DO" (func $internal2238)) (import "env" "EO" (func $internal2239)) (import "env" "FO" (func $internal2240)) (import "env" "GO" (func $internal2241)) (import "env" "HO" (func $internal2242)) (import "env" "IO" (func $internal2243)) (import "env" "JO" (func $internal2244)) (import "env" "KO" (func $internal2245)) (import "env" "LO" (func $internal2246)) (import "env" "MO" (func $internal2247)) (import "env" "NO" (func $internal2248)) (import "env" "OO" (func $internal2249)) (import "env" "PO" (func $internal2250)) (import "env" "QO" (func $internal2251)) (import "env" "RO" (func $internal2252)) (import "env" "SO" (func $internal2253)) (import "env" "TO" (func $internal2254)) (import "env" "UO" (func $internal2255)) (import "env" "VO" (func $internal2256)) (import "env" "WO" (func $internal2257)) (import "env" "XO" (func $internal2258)) (import "env" "YO" (func $internal2259)) (import "env" "ZO" (func $internal2260)) (import "env" "_O" (func $internal2261)) (import "env" "$O" (func $internal2262)) (import "env" "aP" (func $internal2263)) (import "env" "bP" (func $internal2264)) (import "env" "cP" (func $internal2265)) (import "env" "dP" (func $internal2266)) (import "env" "eP" (func $internal2267)) (import "env" "fP" (func $internal2268)) (import "env" "gP" (func $internal2269)) (import "env" "hP" (func $internal2270)) (import "env" "iP" (func $internal2271)) (import "env" "jP" (func $internal2272)) (import "env" "kP" (func $internal2273)) (import "env" "lP" (func $internal2274)) (import "env" "mP" (func $internal2275)) (import "env" "nP" (func $internal2276)) (import "env" "oP" (func $internal2277)) (import "env" "pP" (func $internal2278)) (import "env" "qP" (func $internal2279)) (import "env" "rP" (func $internal2280)) (import "env" "sP" (func $internal2281)) (import "env" "tP" (func $internal2282)) (import "env" "uP" (func $internal2283)) (import "env" "vP" (func $internal2284)) (import "env" "wP" (func $internal2285)) (import "env" "xP" (func $internal2286)) (import "env" "yP" (func $internal2287)) (import "env" "zP" (func $internal2288)) (import "env" "AP" (func $internal2289)) (import "env" "BP" (func $internal2290)) (import "env" "CP" (func $internal2291)) (import "env" "DP" (func $internal2292)) (import "env" "EP" (func $internal2293)) (import "env" "FP" (func $internal2294)) (import "env" "GP" (func $internal2295)) (import "env" "HP" (func $internal2296)) (import "env" "IP" (func $internal2297)) (import "env" "JP" (func $internal2298)) (import "env" "KP" (func $internal2299)) (import "env" "LP" (func $internal2300)) (import "env" "MP" (func $internal2301)) (import "env" "NP" (func $internal2302)) (import "env" "OP" (func $internal2303)) (import "env" "PP" (func $internal2304)) (import "env" "QP" (func $internal2305)) (import "env" "RP" (func $internal2306)) (import "env" "SP" (func $internal2307)) (import "env" "TP" (func $internal2308)) (import "env" "UP" (func $internal2309)) (import "env" "VP" (func $internal2310)) (import "env" "WP" (func $internal2311)) (import "env" "XP" (func $internal2312)) (import "env" "YP" (func $internal2313)) (import "env" "ZP" (func $internal2314)) (import "env" "_P" (func $internal2315)) (import "env" "$P" (func $internal2316)) (import "env" "aQ" (func $internal2317)) (import "env" "bQ" (func $internal2318)) (import "env" "cQ" (func $internal2319)) (import "env" "dQ" (func $internal2320)) (import "env" "eQ" (func $internal2321)) (import "env" "fQ" (func $internal2322)) (import "env" "gQ" (func $internal2323)) (import "env" "hQ" (func $internal2324)) (import "env" "iQ" (func $internal2325)) (import "env" "jQ" (func $internal2326)) (import "env" "kQ" (func $internal2327)) (import "env" "lQ" (func $internal2328)) (import "env" "mQ" (func $internal2329)) (import "env" "nQ" (func $internal2330)) (import "env" "oQ" (func $internal2331)) (import "env" "pQ" (func $internal2332)) (import "env" "qQ" (func $internal2333)) (import "env" "rQ" (func $internal2334)) (import "env" "sQ" (func $internal2335)) (import "env" "tQ" (func $internal2336)) (import "env" "uQ" (func $internal2337)) (import "env" "vQ" (func $internal2338)) (import "env" "wQ" (func $internal2339)) (import "env" "xQ" (func $internal2340)) (import "env" "yQ" (func $internal2341)) (import "env" "zQ" (func $internal2342)) (import "env" "AQ" (func $internal2343)) (import "env" "BQ" (func $internal2344)) (import "env" "CQ" (func $internal2345)) (import "env" "DQ" (func $internal2346)) (import "env" "EQ" (func $internal2347)) (import "env" "FQ" (func $internal2348)) (import "env" "GQ" (func $internal2349)) (import "env" "HQ" (func $internal2350)) (import "env" "IQ" (func $internal2351)) (import "env" "JQ" (func $internal2352)) (import "env" "KQ" (func $internal2353)) (import "env" "LQ" (func $internal2354)) (import "env" "MQ" (func $internal2355)) (import "env" "NQ" (func $internal2356)) (import "env" "OQ" (func $internal2357)) (import "env" "PQ" (func $internal2358)) (import "env" "QQ" (func $internal2359)) (import "env" "RQ" (func $internal2360)) (import "env" "SQ" (func $internal2361)) (import "env" "TQ" (func $internal2362)) (import "env" "UQ" (func $internal2363)) (import "env" "VQ" (func $internal2364)) (import "env" "WQ" (func $internal2365)) (import "env" "XQ" (func $internal2366)) (import "env" "YQ" (func $internal2367)) (import "env" "ZQ" (func $internal2368)) (import "env" "_Q" (func $internal2369)) (import "env" "$Q" (func $internal2370)) (import "env" "aR" (func $internal2371)) (import "env" "bR" (func $internal2372)) (import "env" "cR" (func $internal2373)) (import "env" "dR" (func $internal2374)) (import "env" "eR" (func $internal2375)) (import "env" "fR" (func $internal2376)) (import "env" "gR" (func $internal2377)) (import "env" "hR" (func $internal2378)) (import "env" "iR" (func $internal2379)) (import "env" "jR" (func $internal2380)) (import "env" "kR" (func $internal2381)) (import "env" "lR" (func $internal2382)) (import "env" "mR" (func $internal2383)) (import "env" "nR" (func $internal2384)) (import "env" "oR" (func $internal2385)) (import "env" "pR" (func $internal2386)) (import "env" "qR" (func $internal2387)) (import "env" "rR" (func $internal2388)) (import "env" "sR" (func $internal2389)) (import "env" "tR" (func $internal2390)) (import "env" "uR" (func $internal2391)) (import "env" "vR" (func $internal2392)) (import "env" "wR" (func $internal2393)) (import "env" "xR" (func $internal2394)) (import "env" "yR" (func $internal2395)) (import "env" "zR" (func $internal2396)) (import "env" "AR" (func $internal2397)) (import "env" "BR" (func $internal2398)) (import "env" "CR" (func $internal2399)) (import "env" "DR" (func $internal2400)) (import "env" "ER" (func $internal2401)) (import "env" "FR" (func $internal2402)) (import "env" "GR" (func $internal2403)) (import "env" "HR" (func $internal2404)) (import "env" "IR" (func $internal2405)) (import "env" "JR" (func $internal2406)) (import "env" "KR" (func $internal2407)) (import "env" "LR" (func $internal2408)) (import "env" "MR" (func $internal2409)) (import "env" "NR" (func $internal2410)) (import "env" "OR" (func $internal2411)) (import "env" "PR" (func $internal2412)) (import "env" "QR" (func $internal2413)) (import "env" "RR" (func $internal2414)) (import "env" "SR" (func $internal2415)) (import "env" "TR" (func $internal2416)) (import "env" "UR" (func $internal2417)) (import "env" "VR" (func $internal2418)) (import "env" "WR" (func $internal2419)) (import "env" "XR" (func $internal2420)) (import "env" "YR" (func $internal2421)) (import "env" "ZR" (func $internal2422)) (import "env" "_R" (func $internal2423)) (import "env" "$R" (func $internal2424)) (import "env" "aS" (func $internal2425)) (import "env" "bS" (func $internal2426)) (import "env" "cS" (func $internal2427)) (import "env" "dS" (func $internal2428)) (import "env" "eS" (func $internal2429)) (import "env" "fS" (func $internal2430)) (import "env" "gS" (func $internal2431)) (import "env" "hS" (func $internal2432)) (import "env" "iS" (func $internal2433)) (import "env" "jS" (func $internal2434)) (import "env" "kS" (func $internal2435)) (import "env" "lS" (func $internal2436)) (import "env" "mS" (func $internal2437)) (import "env" "nS" (func $internal2438)) (import "env" "oS" (func $internal2439)) (import "env" "pS" (func $internal2440)) (import "env" "qS" (func $internal2441)) (import "env" "rS" (func $internal2442)) (import "env" "sS" (func $internal2443)) (import "env" "tS" (func $internal2444)) (import "env" "uS" (func $internal2445)) (import "env" "vS" (func $internal2446)) (import "env" "wS" (func $internal2447)) (import "env" "xS" (func $internal2448)) (import "env" "yS" (func $internal2449)) (import "env" "zS" (func $internal2450)) (import "env" "AS" (func $internal2451)) (import "env" "BS" (func $internal2452)) (import "env" "CS" (func $internal2453)) (import "env" "DS" (func $internal2454)) (import "env" "ES" (func $internal2455)) (import "env" "FS" (func $internal2456)) (import "env" "GS" (func $internal2457)) (import "env" "HS" (func $internal2458)) (import "env" "IS" (func $internal2459)) (import "env" "JS" (func $internal2460)) (import "env" "KS" (func $internal2461)) (import "env" "LS" (func $internal2462)) (import "env" "MS" (func $internal2463)) (import "env" "NS" (func $internal2464)) (import "env" "OS" (func $internal2465)) (import "env" "PS" (func $internal2466)) (import "env" "QS" (func $internal2467)) (import "env" "RS" (func $internal2468)) (import "env" "SS" (func $internal2469)) (import "env" "TS" (func $internal2470)) (import "env" "US" (func $internal2471)) (import "env" "VS" (func $internal2472)) (import "env" "WS" (func $internal2473)) (import "env" "XS" (func $internal2474)) (import "env" "YS" (func $internal2475)) (import "env" "ZS" (func $internal2476)) (import "env" "_S" (func $internal2477)) (import "env" "$S" (func $internal2478)) (import "env" "aT" (func $internal2479)) (import "env" "bT" (func $internal2480)) (import "env" "cT" (func $internal2481)) (import "env" "dT" (func $internal2482)) (import "env" "eT" (func $internal2483)) (import "env" "fT" (func $internal2484)) (import "env" "gT" (func $internal2485)) (import "env" "hT" (func $internal2486)) (import "env" "iT" (func $internal2487)) (import "env" "jT" (func $internal2488)) (import "env" "kT" (func $internal2489)) (import "env" "lT" (func $internal2490)) (import "env" "mT" (func $internal2491)) (import "env" "nT" (func $internal2492)) (import "env" "oT" (func $internal2493)) (import "env" "pT" (func $internal2494)) (import "env" "qT" (func $internal2495)) (import "env" "rT" (func $internal2496)) (import "env" "sT" (func $internal2497)) (import "env" "tT" (func $internal2498)) (import "env" "uT" (func $internal2499)) (import "env" "vT" (func $internal2500)) (import "env" "wT" (func $internal2501)) (import "env" "xT" (func $internal2502)) (import "env" "yT" (func $internal2503)) (import "env" "zT" (func $internal2504)) (import "env" "AT" (func $internal2505)) (import "env" "BT" (func $internal2506)) (import "env" "CT" (func $internal2507)) (import "env" "DT" (func $internal2508)) (import "env" "ET" (func $internal2509)) (import "env" "FT" (func $internal2510)) (import "env" "GT" (func $internal2511)) (import "env" "HT" (func $internal2512)) (import "env" "IT" (func $internal2513)) (import "env" "JT" (func $internal2514)) (import "env" "KT" (func $internal2515)) (import "env" "LT" (func $internal2516)) (import "env" "MT" (func $internal2517)) (import "env" "NT" (func $internal2518)) (import "env" "OT" (func $internal2519)) (import "env" "PT" (func $internal2520)) (import "env" "QT" (func $internal2521)) (import "env" "RT" (func $internal2522)) (import "env" "ST" (func $internal2523)) (import "env" "TT" (func $internal2524)) (import "env" "UT" (func $internal2525)) (import "env" "VT" (func $internal2526)) (import "env" "WT" (func $internal2527)) (import "env" "XT" (func $internal2528)) (import "env" "YT" (func $internal2529)) (import "env" "ZT" (func $internal2530)) (import "env" "_T" (func $internal2531)) (import "env" "$T" (func $internal2532)) (import "env" "aU" (func $internal2533)) (import "env" "bU" (func $internal2534)) (import "env" "cU" (func $internal2535)) (import "env" "dU" (func $internal2536)) (import "env" "eU" (func $internal2537)) (import "env" "fU" (func $internal2538)) (import "env" "gU" (func $internal2539)) (import "env" "hU" (func $internal2540)) (import "env" "iU" (func $internal2541)) (import "env" "jU" (func $internal2542)) (import "env" "kU" (func $internal2543)) (import "env" "lU" (func $internal2544)) (import "env" "mU" (func $internal2545)) (import "env" "nU" (func $internal2546)) (import "env" "oU" (func $internal2547)) (import "env" "pU" (func $internal2548)) (import "env" "qU" (func $internal2549)) (import "env" "rU" (func $internal2550)) (import "env" "sU" (func $internal2551)) (import "env" "tU" (func $internal2552)) (import "env" "uU" (func $internal2553)) (import "env" "vU" (func $internal2554)) (import "env" "wU" (func $internal2555)) (import "env" "xU" (func $internal2556)) (import "env" "yU" (func $internal2557)) (import "env" "zU" (func $internal2558)) (import "env" "AU" (func $internal2559)) (import "env" "BU" (func $internal2560)) (import "env" "CU" (func $internal2561)) (import "env" "DU" (func $internal2562)) (import "env" "EU" (func $internal2563)) (import "env" "FU" (func $internal2564)) (import "env" "GU" (func $internal2565)) (import "env" "HU" (func $internal2566)) (import "env" "IU" (func $internal2567)) (import "env" "JU" (func $internal2568)) (import "env" "KU" (func $internal2569)) (import "env" "LU" (func $internal2570)) (import "env" "MU" (func $internal2571)) (import "env" "NU" (func $internal2572)) (import "env" "OU" (func $internal2573)) (import "env" "PU" (func $internal2574)) (import "env" "QU" (func $internal2575)) (import "env" "RU" (func $internal2576)) (import "env" "SU" (func $internal2577)) (import "env" "TU" (func $internal2578)) (import "env" "UU" (func $internal2579)) (import "env" "VU" (func $internal2580)) (import "env" "WU" (func $internal2581)) (import "env" "XU" (func $internal2582)) (import "env" "YU" (func $internal2583)) (import "env" "ZU" (func $internal2584)) (import "env" "_U" (func $internal2585)) (import "env" "$U" (func $internal2586)) (import "env" "aV" (func $internal2587)) (import "env" "bV" (func $internal2588)) (import "env" "cV" (func $internal2589)) (import "env" "dV" (func $internal2590)) (import "env" "eV" (func $internal2591)) (import "env" "fV" (func $internal2592)) (import "env" "gV" (func $internal2593)) (import "env" "hV" (func $internal2594)) (import "env" "iV" (func $internal2595)) (import "env" "jV" (func $internal2596)) (import "env" "kV" (func $internal2597)) (import "env" "lV" (func $internal2598)) (import "env" "mV" (func $internal2599)) (import "env" "nV" (func $internal2600)) (import "env" "oV" (func $internal2601)) (import "env" "pV" (func $internal2602)) (import "env" "qV" (func $internal2603)) (import "env" "rV" (func $internal2604)) (import "env" "sV" (func $internal2605)) (import "env" "tV" (func $internal2606)) (import "env" "uV" (func $internal2607)) (import "env" "vV" (func $internal2608)) (import "env" "wV" (func $internal2609)) (import "env" "xV" (func $internal2610)) (import "env" "yV" (func $internal2611)) (import "env" "zV" (func $internal2612)) (import "env" "AV" (func $internal2613)) (import "env" "BV" (func $internal2614)) (import "env" "CV" (func $internal2615)) (import "env" "DV" (func $internal2616)) (import "env" "EV" (func $internal2617)) (import "env" "FV" (func $internal2618)) (import "env" "GV" (func $internal2619)) (import "env" "HV" (func $internal2620)) (import "env" "IV" (func $internal2621)) (import "env" "JV" (func $internal2622)) (import "env" "KV" (func $internal2623)) (import "env" "LV" (func $internal2624)) (import "env" "MV" (func $internal2625)) (import "env" "NV" (func $internal2626)) (import "env" "OV" (func $internal2627)) (import "env" "PV" (func $internal2628)) (import "env" "QV" (func $internal2629)) (import "env" "RV" (func $internal2630)) (import "env" "SV" (func $internal2631)) (import "env" "TV" (func $internal2632)) (import "env" "UV" (func $internal2633)) (import "env" "VV" (func $internal2634)) (import "env" "WV" (func $internal2635)) (import "env" "XV" (func $internal2636)) (import "env" "YV" (func $internal2637)) (import "env" "ZV" (func $internal2638)) (import "env" "_V" (func $internal2639)) (import "env" "$V" (func $internal2640)) (import "env" "aW" (func $internal2641)) (import "env" "bW" (func $internal2642)) (import "env" "cW" (func $internal2643)) (import "env" "dW" (func $internal2644)) (import "env" "eW" (func $internal2645)) (import "env" "fW" (func $internal2646)) (import "env" "gW" (func $internal2647)) (import "env" "hW" (func $internal2648)) (import "env" "iW" (func $internal2649)) (import "env" "jW" (func $internal2650)) (import "env" "kW" (func $internal2651)) (import "env" "lW" (func $internal2652)) (import "env" "mW" (func $internal2653)) (import "env" "nW" (func $internal2654)) (import "env" "oW" (func $internal2655)) (import "env" "pW" (func $internal2656)) (import "env" "qW" (func $internal2657)) (import "env" "rW" (func $internal2658)) (import "env" "sW" (func $internal2659)) (import "env" "tW" (func $internal2660)) (import "env" "uW" (func $internal2661)) (import "env" "vW" (func $internal2662)) (import "env" "wW" (func $internal2663)) (import "env" "xW" (func $internal2664)) (import "env" "yW" (func $internal2665)) (import "env" "zW" (func $internal2666)) (import "env" "AW" (func $internal2667)) (import "env" "BW" (func $internal2668)) (import "env" "CW" (func $internal2669)) (import "env" "DW" (func $internal2670)) (import "env" "EW" (func $internal2671)) (import "env" "FW" (func $internal2672)) (import "env" "GW" (func $internal2673)) (import "env" "HW" (func $internal2674)) (import "env" "IW" (func $internal2675)) (import "env" "JW" (func $internal2676)) (import "env" "KW" (func $internal2677)) (import "env" "LW" (func $internal2678)) (import "env" "MW" (func $internal2679)) (import "env" "NW" (func $internal2680)) (import "env" "OW" (func $internal2681)) (import "env" "PW" (func $internal2682)) (import "env" "QW" (func $internal2683)) (import "env" "RW" (func $internal2684)) (import "env" "SW" (func $internal2685)) (import "env" "TW" (func $internal2686)) (import "env" "UW" (func $internal2687)) (import "env" "VW" (func $internal2688)) (import "env" "WW" (func $internal2689)) (import "env" "XW" (func $internal2690)) (import "env" "YW" (func $internal2691)) (import "env" "ZW" (func $internal2692)) (import "env" "_W" (func $internal2693)) (import "env" "$W" (func $internal2694)) (import "env" "aX" (func $internal2695)) (import "env" "bX" (func $internal2696)) (import "env" "cX" (func $internal2697)) (import "env" "dX" (func $internal2698)) (import "env" "eX" (func $internal2699)) (import "env" "fX" (func $internal2700)) (import "env" "gX" (func $internal2701)) (import "env" "hX" (func $internal2702)) (import "env" "iX" (func $internal2703)) (import "env" "jX" (func $internal2704)) (import "env" "kX" (func $internal2705)) (import "env" "lX" (func $internal2706)) (import "env" "mX" (func $internal2707)) (import "env" "nX" (func $internal2708)) (import "env" "oX" (func $internal2709)) (import "env" "pX" (func $internal2710)) (import "env" "qX" (func $internal2711)) (import "env" "rX" (func $internal2712)) (import "env" "sX" (func $internal2713)) (import "env" "tX" (func $internal2714)) (import "env" "uX" (func $internal2715)) (import "env" "vX" (func $internal2716)) (import "env" "wX" (func $internal2717)) (import "env" "xX" (func $internal2718)) (import "env" "yX" (func $internal2719)) (import "env" "zX" (func $internal2720)) (import "env" "AX" (func $internal2721)) (import "env" "BX" (func $internal2722)) (import "env" "CX" (func $internal2723)) (import "env" "DX" (func $internal2724)) (import "env" "EX" (func $internal2725)) (import "env" "FX" (func $internal2726)) (import "env" "GX" (func $internal2727)) (import "env" "HX" (func $internal2728)) (import "env" "IX" (func $internal2729)) (import "env" "JX" (func $internal2730)) (import "env" "KX" (func $internal2731)) (import "env" "LX" (func $internal2732)) (import "env" "MX" (func $internal2733)) (import "env" "NX" (func $internal2734)) (import "env" "OX" (func $internal2735)) (import "env" "PX" (func $internal2736)) (import "env" "QX" (func $internal2737)) (import "env" "RX" (func $internal2738)) (import "env" "SX" (func $internal2739)) (import "env" "TX" (func $internal2740)) (import "env" "UX" (func $internal2741)) (import "env" "VX" (func $internal2742)) (import "env" "WX" (func $internal2743)) (import "env" "XX" (func $internal2744)) (import "env" "YX" (func $internal2745)) (import "env" "ZX" (func $internal2746)) (import "env" "_X" (func $internal2747)) (import "env" "$X" (func $internal2748)) (import "env" "aY" (func $internal2749)) (import "env" "bY" (func $internal2750)) (import "env" "cY" (func $internal2751)) (import "env" "dY" (func $internal2752)) (import "env" "eY" (func $internal2753)) (import "env" "fY" (func $internal2754)) (import "env" "gY" (func $internal2755)) (import "env" "hY" (func $internal2756)) (import "env" "iY" (func $internal2757)) (import "env" "jY" (func $internal2758)) (import "env" "kY" (func $internal2759)) (import "env" "lY" (func $internal2760)) (import "env" "mY" (func $internal2761)) (import "env" "nY" (func $internal2762)) (import "env" "oY" (func $internal2763)) (import "env" "pY" (func $internal2764)) (import "env" "qY" (func $internal2765)) (import "env" "rY" (func $internal2766)) (import "env" "sY" (func $internal2767)) (import "env" "tY" (func $internal2768)) (import "env" "uY" (func $internal2769)) (import "env" "vY" (func $internal2770)) (import "env" "wY" (func $internal2771)) (import "env" "xY" (func $internal2772)) (import "env" "yY" (func $internal2773)) (import "env" "zY" (func $internal2774)) (import "env" "AY" (func $internal2775)) (import "env" "BY" (func $internal2776)) (import "env" "CY" (func $internal2777)) (import "env" "DY" (func $internal2778)) (import "env" "EY" (func $internal2779)) (import "env" "FY" (func $internal2780)) (import "env" "GY" (func $internal2781)) (import "env" "HY" (func $internal2782)) (import "env" "IY" (func $internal2783)) (import "env" "JY" (func $internal2784)) (import "env" "KY" (func $internal2785)) (import "env" "LY" (func $internal2786)) (import "env" "MY" (func $internal2787)) (import "env" "NY" (func $internal2788)) (import "env" "OY" (func $internal2789)) (import "env" "PY" (func $internal2790)) (import "env" "QY" (func $internal2791)) (import "env" "RY" (func $internal2792)) (import "env" "SY" (func $internal2793)) (import "env" "TY" (func $internal2794)) (import "env" "UY" (func $internal2795)) (import "env" "VY" (func $internal2796)) (import "env" "WY" (func $internal2797)) (import "env" "XY" (func $internal2798)) (import "env" "YY" (func $internal2799)) (import "env" "ZY" (func $internal2800)) (import "env" "_Y" (func $internal2801)) (import "env" "$Y" (func $internal2802)) (import "env" "aZ" (func $internal2803)) (import "env" "bZ" (func $internal2804)) (import "env" "cZ" (func $internal2805)) (import "env" "dZ" (func $internal2806)) (import "env" "eZ" (func $internal2807)) (import "env" "fZ" (func $internal2808)) (import "env" "gZ" (func $internal2809)) (import "env" "hZ" (func $internal2810)) (import "env" "iZ" (func $internal2811)) (import "env" "jZ" (func $internal2812)) (import "env" "kZ" (func $internal2813)) (import "env" "lZ" (func $internal2814)) (import "env" "mZ" (func $internal2815)) (import "env" "nZ" (func $internal2816)) (import "env" "oZ" (func $internal2817)) (import "env" "pZ" (func $internal2818)) (import "env" "qZ" (func $internal2819)) (import "env" "rZ" (func $internal2820)) (import "env" "sZ" (func $internal2821)) (import "env" "tZ" (func $internal2822)) (import "env" "uZ" (func $internal2823)) (import "env" "vZ" (func $internal2824)) (import "env" "wZ" (func $internal2825)) (import "env" "xZ" (func $internal2826)) (import "env" "yZ" (func $internal2827)) (import "env" "zZ" (func $internal2828)) (import "env" "AZ" (func $internal2829)) (import "env" "BZ" (func $internal2830)) (import "env" "CZ" (func $internal2831)) (import "env" "DZ" (func $internal2832)) (import "env" "EZ" (func $internal2833)) (import "env" "FZ" (func $internal2834)) (import "env" "GZ" (func $internal2835)) (import "env" "HZ" (func $internal2836)) (import "env" "IZ" (func $internal2837)) (import "env" "JZ" (func $internal2838)) (import "env" "KZ" (func $internal2839)) (import "env" "LZ" (func $internal2840)) (import "env" "MZ" (func $internal2841)) (import "env" "NZ" (func $internal2842)) (import "env" "OZ" (func $internal2843)) (import "env" "PZ" (func $internal2844)) (import "env" "QZ" (func $internal2845)) (import "env" "RZ" (func $internal2846)) (import "env" "SZ" (func $internal2847)) (import "env" "TZ" (func $internal2848)) (import "env" "UZ" (func $internal2849)) (import "env" "VZ" (func $internal2850)) (import "env" "WZ" (func $internal2851)) (import "env" "XZ" (func $internal2852)) (import "env" "YZ" (func $internal2853)) (import "env" "ZZ" (func $internal2854)) (import "env" "_Z" (func $internal2855)) (import "env" "$Z" (func $internal2856)) (import "env" "a_" (func $internal2857)) (import "env" "b_" (func $internal2858)) (import "env" "c_" (func $internal2859)) (import "env" "d_" (func $internal2860)) (import "env" "e_" (func $internal2861)) (import "env" "f_" (func $internal2862)) (import "env" "g_" (func $internal2863)) (import "env" "h_" (func $internal2864)) (import "env" "i_" (func $internal2865)) (import "env" "j_" (func $internal2866)) (import "env" "k_" (func $internal2867)) (import "env" "l_" (func $internal2868)) (import "env" "m_" (func $internal2869)) (import "env" "n_" (func $internal2870)) (import "env" "o_" (func $internal2871)) (import "env" "p_" (func $internal2872)) (import "env" "q_" (func $internal2873)) (import "env" "r_" (func $internal2874)) (import "env" "s_" (func $internal2875)) (import "env" "t_" (func $internal2876)) (import "env" "u_" (func $internal2877)) (import "env" "v_" (func $internal2878)) (import "env" "w_" (func $internal2879)) (import "env" "x_" (func $internal2880)) (import "env" "y_" (func $internal2881)) (import "env" "z_" (func $internal2882)) (import "env" "A_" (func $internal2883)) (import "env" "B_" (func $internal2884)) (import "env" "C_" (func $internal2885)) (import "env" "D_" (func $internal2886)) (import "env" "E_" (func $internal2887)) (import "env" "F_" (func $internal2888)) (import "env" "G_" (func $internal2889)) (import "env" "H_" (func $internal2890)) (import "env" "I_" (func $internal2891)) (import "env" "J_" (func $internal2892)) (import "env" "K_" (func $internal2893)) (import "env" "L_" (func $internal2894)) (import "env" "M_" (func $internal2895)) (import "env" "N_" (func $internal2896)) (import "env" "O_" (func $internal2897)) (import "env" "P_" (func $internal2898)) (import "env" "Q_" (func $internal2899)) (import "env" "R_" (func $internal2900)) (import "env" "S_" (func $internal2901)) (import "env" "T_" (func $internal2902)) (import "env" "U_" (func $internal2903)) (import "env" "V_" (func $internal2904)) (import "env" "W_" (func $internal2905)) (import "env" "X_" (func $internal2906)) (import "env" "Y_" (func $internal2907)) (import "env" "Z_" (func $internal2908)) (import "env" "__" (func $internal2909)) (import "env" "$_" (func $internal2910)) (import "env" "a$" (func $internal2911)) (import "env" "b$" (func $internal2912)) (import "env" "c$" (func $internal2913)) (import "env" "d$" (func $internal2914)) (import "env" "e$" (func $internal2915)) (import "env" "f$" (func $internal2916)) (import "env" "g$" (func $internal2917)) (import "env" "h$" (func $internal2918)) (import "env" "i$" (func $internal2919)) (import "env" "j$" (func $internal2920)) (import "env" "k$" (func $internal2921)) (import "env" "l$" (func $internal2922)) (import "env" "m$" (func $internal2923)) (import "env" "n$" (func $internal2924)) (import "env" "o$" (func $internal2925)) (import "env" "p$" (func $internal2926)) (import "env" "q$" (func $internal2927)) (import "env" "r$" (func $internal2928)) (import "env" "s$" (func $internal2929)) (import "env" "t$" (func $internal2930)) (import "env" "u$" (func $internal2931)) (import "env" "v$" (func $internal2932)) (import "env" "w$" (func $internal2933)) (import "env" "x$" (func $internal2934)) (import "env" "y$" (func $internal2935)) (import "env" "z$" (func $internal2936)) (import "env" "A$" (func $internal2937)) (import "env" "B$" (func $internal2938)) (import "env" "C$" (func $internal2939)) (import "env" "D$" (func $internal2940)) (import "env" "E$" (func $internal2941)) (import "env" "F$" (func $internal2942)) (import "env" "G$" (func $internal2943)) (import "env" "H$" (func $internal2944)) (import "env" "I$" (func $internal2945)) (import "env" "J$" (func $internal2946)) (import "env" "K$" (func $internal2947)) (import "env" "L$" (func $internal2948)) (import "env" "M$" (func $internal2949)) (import "env" "N$" (func $internal2950)) (import "env" "O$" (func $internal2951)) (import "env" "P$" (func $internal2952)) (import "env" "Q$" (func $internal2953)) (import "env" "R$" (func $internal2954)) (import "env" "S$" (func $internal2955)) (import "env" "T$" (func $internal2956)) (import "env" "U$" (func $internal2957)) (import "env" "V$" (func $internal2958)) (import "env" "W$" (func $internal2959)) (import "env" "X$" (func $internal2960)) (import "env" "Y$" (func $internal2961)) (import "env" "Z$" (func $internal2962)) (import "env" "_$" (func $internal2963)) (import "env" "$$" (func $internal2964)) (import "env" "a0" (func $internal2965)) (import "env" "b0" (func $internal2966)) (import "env" "c0" (func $internal2967)) (import "env" "d0" (func $internal2968)) (import "env" "e0" (func $internal2969)) (import "env" "f0" (func $internal2970)) (import "env" "g0" (func $internal2971)) (import "env" "h0" (func $internal2972)) (import "env" "i0" (func $internal2973)) (import "env" "j0" (func $internal2974)) (import "env" "k0" (func $internal2975)) (import "env" "l0" (func $internal2976)) (import "env" "m0" (func $internal2977)) (import "env" "n0" (func $internal2978)) (import "env" "o0" (func $internal2979)) (import "env" "p0" (func $internal2980)) (import "env" "q0" (func $internal2981)) (import "env" "r0" (func $internal2982)) (import "env" "s0" (func $internal2983)) (import "env" "t0" (func $internal2984)) (import "env" "u0" (func $internal2985)) (import "env" "v0" (func $internal2986)) (import "env" "w0" (func $internal2987)) (import "env" "x0" (func $internal2988)) (import "env" "y0" (func $internal2989)) (import "env" "z0" (func $internal2990)) (import "env" "A0" (func $internal2991)) (import "env" "B0" (func $internal2992)) (import "env" "C0" (func $internal2993)) (import "env" "D0" (func $internal2994)) (import "env" "E0" (func $internal2995)) (import "env" "F0" (func $internal2996)) (import "env" "G0" (func $internal2997)) (import "env" "H0" (func $internal2998)) (import "env" "I0" (func $internal2999)) (import "env" "J0" (func $internal3000)) (import "env" "K0" (func $internal3001)) (import "env" "L0" (func $internal3002)) (import "env" "M0" (func $internal3003)) (import "env" "N0" (func $internal3004)) (import "env" "O0" (func $internal3005)) (import "env" "P0" (func $internal3006)) (import "env" "Q0" (func $internal3007)) (import "env" "R0" (func $internal3008)) (import "env" "S0" (func $internal3009)) (import "env" "T0" (func $internal3010)) (import "env" "U0" (func $internal3011)) (import "env" "V0" (func $internal3012)) (import "env" "W0" (func $internal3013)) (import "env" "X0" (func $internal3014)) (import "env" "Y0" (func $internal3015)) (import "env" "Z0" (func $internal3016)) (import "env" "_0" (func $internal3017)) (import "env" "$0" (func $internal3018)) (import "env" "a1" (func $internal3019)) (import "env" "b1" (func $internal3020)) (import "env" "c1" (func $internal3021)) (import "env" "d1" (func $internal3022)) (import "env" "e1" (func $internal3023)) (import "env" "f1" (func $internal3024)) (import "env" "g1" (func $internal3025)) (import "env" "h1" (func $internal3026)) (import "env" "i1" (func $internal3027)) (import "env" "j1" (func $internal3028)) (import "env" "k1" (func $internal3029)) (import "env" "l1" (func $internal3030)) (import "env" "m1" (func $internal3031)) (import "env" "n1" (func $internal3032)) (import "env" "o1" (func $internal3033)) (import "env" "p1" (func $internal3034)) (import "env" "q1" (func $internal3035)) (import "env" "r1" (func $internal3036)) (import "env" "s1" (func $internal3037)) (import "env" "t1" (func $internal3038)) (import "env" "u1" (func $internal3039)) (import "env" "v1" (func $internal3040)) (import "env" "w1" (func $internal3041)) (import "env" "x1" (func $internal3042)) (import "env" "y1" (func $internal3043)) (import "env" "z1" (func $internal3044)) (import "env" "A1" (func $internal3045)) (import "env" "B1" (func $internal3046)) (import "env" "C1" (func $internal3047)) (import "env" "D1" (func $internal3048)) (import "env" "E1" (func $internal3049)) (import "env" "F1" (func $internal3050)) (import "env" "G1" (func $internal3051)) (import "env" "H1" (func $internal3052)) (import "env" "I1" (func $internal3053)) (import "env" "J1" (func $internal3054)) (import "env" "K1" (func $internal3055)) (import "env" "L1" (func $internal3056)) (import "env" "M1" (func $internal3057)) (import "env" "N1" (func $internal3058)) (import "env" "O1" (func $internal3059)) (import "env" "P1" (func $internal3060)) (import "env" "Q1" (func $internal3061)) (import "env" "R1" (func $internal3062)) (import "env" "S1" (func $internal3063)) (import "env" "T1" (func $internal3064)) (import "env" "U1" (func $internal3065)) (import "env" "V1" (func $internal3066)) (import "env" "W1" (func $internal3067)) (import "env" "X1" (func $internal3068)) (import "env" "Y1" (func $internal3069)) (import "env" "Z1" (func $internal3070)) (import "env" "_1" (func $internal3071)) (import "env" "$1" (func $internal3072)) (import "env" "a2" (func $internal3073)) (import "env" "b2" (func $internal3074)) (import "env" "c2" (func $internal3075)) (import "env" "d2" (func $internal3076)) (import "env" "e2" (func $internal3077)) (import "env" "f2" (func $internal3078)) (import "env" "g2" (func $internal3079)) (import "env" "h2" (func $internal3080)) (import "env" "i2" (func $internal3081)) (import "env" "j2" (func $internal3082)) (import "env" "k2" (func $internal3083)) (import "env" "l2" (func $internal3084)) (import "env" "m2" (func $internal3085)) (import "env" "n2" (func $internal3086)) (import "env" "o2" (func $internal3087)) (import "env" "p2" (func $internal3088)) (import "env" "q2" (func $internal3089)) (import "env" "r2" (func $internal3090)) (import "env" "s2" (func $internal3091)) (import "env" "t2" (func $internal3092)) (import "env" "u2" (func $internal3093)) (import "env" "v2" (func $internal3094)) (import "env" "w2" (func $internal3095)) (import "env" "x2" (func $internal3096)) (import "env" "y2" (func $internal3097)) (import "env" "z2" (func $internal3098)) (import "env" "A2" (func $internal3099)) (import "env" "B2" (func $internal3100)) (import "env" "C2" (func $internal3101)) (import "env" "D2" (func $internal3102)) (import "env" "E2" (func $internal3103)) (import "env" "F2" (func $internal3104)) (import "env" "G2" (func $internal3105)) (import "env" "H2" (func $internal3106)) (import "env" "I2" (func $internal3107)) (import "env" "J2" (func $internal3108)) (import "env" "K2" (func $internal3109)) (import "env" "L2" (func $internal3110)) (import "env" "M2" (func $internal3111)) (import "env" "N2" (func $internal3112)) (import "env" "O2" (func $internal3113)) (import "env" "P2" (func $internal3114)) (import "env" "Q2" (func $internal3115)) (import "env" "R2" (func $internal3116)) (import "env" "S2" (func $internal3117)) (import "env" "T2" (func $internal3118)) (import "env" "U2" (func $internal3119)) (import "env" "V2" (func $internal3120)) (import "env" "W2" (func $internal3121)) (import "env" "X2" (func $internal3122)) (import "env" "Y2" (func $internal3123)) (import "env" "Z2" (func $internal3124)) (import "env" "_2" (func $internal3125)) (import "env" "$2" (func $internal3126)) (import "env" "a3" (func $internal3127)) (import "env" "b3" (func $internal3128)) (import "env" "c3" (func $internal3129)) (import "env" "d3" (func $internal3130)) (import "env" "e3" (func $internal3131)) (import "env" "f3" (func $internal3132)) (import "env" "g3" (func $internal3133)) (import "env" "h3" (func $internal3134)) (import "env" "i3" (func $internal3135)) (import "env" "j3" (func $internal3136)) (import "env" "k3" (func $internal3137)) (import "env" "l3" (func $internal3138)) (import "env" "m3" (func $internal3139)) (import "env" "n3" (func $internal3140)) (import "env" "o3" (func $internal3141)) (import "env" "p3" (func $internal3142)) (import "env" "q3" (func $internal3143)) (import "env" "r3" (func $internal3144)) (import "env" "s3" (func $internal3145)) (import "env" "t3" (func $internal3146)) (import "env" "u3" (func $internal3147)) (import "env" "v3" (func $internal3148)) (import "env" "w3" (func $internal3149)) (import "env" "x3" (func $internal3150)) (import "env" "y3" (func $internal3151)) (import "env" "z3" (func $internal3152)) (import "env" "A3" (func $internal3153)) (import "env" "B3" (func $internal3154)) (import "env" "C3" (func $internal3155)) (import "env" "D3" (func $internal3156)) (import "env" "E3" (func $internal3157)) (import "env" "F3" (func $internal3158)) (import "env" "G3" (func $internal3159)) (import "env" "H3" (func $internal3160)) (import "env" "I3" (func $internal3161)) (import "env" "J3" (func $internal3162)) (import "env" "K3" (func $internal3163)) (import "env" "L3" (func $internal3164)) (import "env" "M3" (func $internal3165)) (import "env" "N3" (func $internal3166)) (import "env" "O3" (func $internal3167)) (import "env" "P3" (func $internal3168)) (import "env" "Q3" (func $internal3169)) (import "env" "R3" (func $internal3170)) (import "env" "S3" (func $internal3171)) (import "env" "T3" (func $internal3172)) (import "env" "U3" (func $internal3173)) (import "env" "V3" (func $internal3174)) (import "env" "W3" (func $internal3175)) (import "env" "X3" (func $internal3176)) (import "env" "Y3" (func $internal3177)) (import "env" "Z3" (func $internal3178)) (import "env" "_3" (func $internal3179)) (import "env" "$3" (func $internal3180)) (import "env" "a4" (func $internal3181)) (import "env" "b4" (func $internal3182)) (import "env" "c4" (func $internal3183)) (import "env" "d4" (func $internal3184)) (import "env" "e4" (func $internal3185)) (import "env" "f4" (func $internal3186)) (import "env" "g4" (func $internal3187)) (import "env" "h4" (func $internal3188)) (import "env" "i4" (func $internal3189)) (import "env" "j4" (func $internal3190)) (import "env" "k4" (func $internal3191)) (import "env" "l4" (func $internal3192)) (import "env" "m4" (func $internal3193)) (import "env" "n4" (func $internal3194)) (import "env" "o4" (func $internal3195)) (import "env" "p4" (func $internal3196)) (import "env" "q4" (func $internal3197)) (import "env" "r4" (func $internal3198)) (import "env" "s4" (func $internal3199)) (import "env" "t4" (func $internal3200)) (import "env" "u4" (func $internal3201)) (import "env" "v4" (func $internal3202)) (import "env" "w4" (func $internal3203)) (import "env" "x4" (func $internal3204)) (import "env" "y4" (func $internal3205)) (import "env" "z4" (func $internal3206)) (import "env" "A4" (func $internal3207)) (import "env" "B4" (func $internal3208)) (import "env" "C4" (func $internal3209)) (import "env" "D4" (func $internal3210)) (import "env" "E4" (func $internal3211)) (import "env" "F4" (func $internal3212)) (import "env" "G4" (func $internal3213)) (import "env" "H4" (func $internal3214)) (import "env" "I4" (func $internal3215)) (import "env" "J4" (func $internal3216)) (import "env" "K4" (func $internal3217)) (import "env" "L4" (func $internal3218)) (import "env" "M4" (func $internal3219)) (import "env" "N4" (func $internal3220)) (import "env" "O4" (func $internal3221)) (import "env" "P4" (func $internal3222)) (import "env" "Q4" (func $internal3223)) (import "env" "R4" (func $internal3224)) (import "env" "S4" (func $internal3225)) (import "env" "T4" (func $internal3226)) (import "env" "U4" (func $internal3227)) (import "env" "V4" (func $internal3228)) (import "env" "W4" (func $internal3229)) (import "env" "X4" (func $internal3230)) (import "env" "Y4" (func $internal3231)) (import "env" "Z4" (func $internal3232)) (import "env" "_4" (func $internal3233)) (import "env" "$4" (func $internal3234)) (import "env" "a5" (func $internal3235)) (import "env" "b5" (func $internal3236)) (import "env" "c5" (func $internal3237)) (import "env" "d5" (func $internal3238)) (import "env" "e5" (func $internal3239)) (import "env" "f5" (func $internal3240)) (import "env" "g5" (func $internal3241)) (import "env" "h5" (func $internal3242)) (import "env" "i5" (func $internal3243)) (import "env" "j5" (func $internal3244)) (import "env" "k5" (func $internal3245)) (import "env" "l5" (func $internal3246)) (import "env" "m5" (func $internal3247)) (import "env" "n5" (func $internal3248)) (import "env" "o5" (func $internal3249)) (import "env" "p5" (func $internal3250)) (import "env" "q5" (func $internal3251)) (import "env" "r5" (func $internal3252)) (import "env" "s5" (func $internal3253)) (import "env" "t5" (func $internal3254)) (import "env" "u5" (func $internal3255)) (import "env" "v5" (func $internal3256)) (import "env" "w5" (func $internal3257)) (import "env" "x5" (func $internal3258)) (import "env" "y5" (func $internal3259)) (import "env" "z5" (func $internal3260)) (import "env" "A5" (func $internal3261)) (import "env" "B5" (func $internal3262)) (import "env" "C5" (func $internal3263)) (import "env" "D5" (func $internal3264)) (import "env" "E5" (func $internal3265)) (import "env" "F5" (func $internal3266)) (import "env" "G5" (func $internal3267)) (import "env" "H5" (func $internal3268)) (import "env" "I5" (func $internal3269)) (import "env" "J5" (func $internal3270)) (import "env" "K5" (func $internal3271)) (import "env" "L5" (func $internal3272)) (import "env" "M5" (func $internal3273)) (import "env" "N5" (func $internal3274)) (import "env" "O5" (func $internal3275)) (import "env" "P5" (func $internal3276)) (import "env" "Q5" (func $internal3277)) (import "env" "R5" (func $internal3278)) (import "env" "S5" (func $internal3279)) (import "env" "T5" (func $internal3280)) (import "env" "U5" (func $internal3281)) (import "env" "V5" (func $internal3282)) (import "env" "W5" (func $internal3283)) (import "env" "X5" (func $internal3284)) (import "env" "Y5" (func $internal3285)) (import "env" "Z5" (func $internal3286)) (import "env" "_5" (func $internal3287)) (import "env" "$5" (func $internal3288)) (import "env" "a6" (func $internal3289)) (import "env" "b6" (func $internal3290)) (import "env" "c6" (func $internal3291)) (import "env" "d6" (func $internal3292)) (import "env" "e6" (func $internal3293)) (import "env" "f6" (func $internal3294)) (import "env" "g6" (func $internal3295)) (import "env" "h6" (func $internal3296)) (import "env" "i6" (func $internal3297)) (import "env" "j6" (func $internal3298)) (import "env" "k6" (func $internal3299)) (import "env" "l6" (func $internal3300)) (import "env" "m6" (func $internal3301)) (import "env" "n6" (func $internal3302)) (import "env" "o6" (func $internal3303)) (import "env" "p6" (func $internal3304)) (import "env" "q6" (func $internal3305)) (import "env" "r6" (func $internal3306)) (import "env" "s6" (func $internal3307)) (import "env" "t6" (func $internal3308)) (import "env" "u6" (func $internal3309)) (import "env" "v6" (func $internal3310)) (import "env" "w6" (func $internal3311)) (import "env" "x6" (func $internal3312)) (import "env" "y6" (func $internal3313)) (import "env" "z6" (func $internal3314)) (import "env" "A6" (func $internal3315)) (import "env" "B6" (func $internal3316)) (import "env" "C6" (func $internal3317)) (import "env" "D6" (func $internal3318)) (import "env" "E6" (func $internal3319)) (import "env" "F6" (func $internal3320)) (import "env" "G6" (func $internal3321)) (import "env" "H6" (func $internal3322)) (import "env" "I6" (func $internal3323)) (import "env" "J6" (func $internal3324)) (import "env" "K6" (func $internal3325)) (import "env" "L6" (func $internal3326)) (import "env" "M6" (func $internal3327)) (import "env" "N6" (func $internal3328)) (import "env" "O6" (func $internal3329)) (import "env" "P6" (func $internal3330)) (import "env" "Q6" (func $internal3331)) (import "env" "R6" (func $internal3332)) (import "env" "S6" (func $internal3333)) (import "env" "T6" (func $internal3334)) (import "env" "U6" (func $internal3335)) (import "env" "V6" (func $internal3336)) (import "env" "W6" (func $internal3337)) (import "env" "X6" (func $internal3338)) (import "env" "Y6" (func $internal3339)) (import "env" "Z6" (func $internal3340)) (import "env" "_6" (func $internal3341)) (import "env" "$6" (func $internal3342)) (import "env" "a7" (func $internal3343)) (import "env" "b7" (func $internal3344)) (import "env" "c7" (func $internal3345)) (import "env" "d7" (func $internal3346)) (import "env" "e7" (func $internal3347)) (import "env" "f7" (func $internal3348)) (import "env" "g7" (func $internal3349)) (import "env" "h7" (func $internal3350)) (import "env" "i7" (func $internal3351)) (import "env" "j7" (func $internal3352)) (import "env" "k7" (func $internal3353)) (import "env" "l7" (func $internal3354)) (import "env" "m7" (func $internal3355)) (import "env" "n7" (func $internal3356)) (import "env" "o7" (func $internal3357)) (import "env" "p7" (func $internal3358)) (import "env" "q7" (func $internal3359)) (import "env" "r7" (func $internal3360)) (import "env" "s7" (func $internal3361)) (import "env" "t7" (func $internal3362)) (import "env" "u7" (func $internal3363)) (import "env" "v7" (func $internal3364)) (import "env" "w7" (func $internal3365)) (import "env" "x7" (func $internal3366)) (import "env" "y7" (func $internal3367)) (import "env" "z7" (func $internal3368)) (import "env" "A7" (func $internal3369)) (import "env" "B7" (func $internal3370)) (import "env" "C7" (func $internal3371)) (import "env" "D7" (func $internal3372)) (import "env" "E7" (func $internal3373)) (import "env" "F7" (func $internal3374)) (import "env" "G7" (func $internal3375)) (import "env" "H7" (func $internal3376)) (import "env" "I7" (func $internal3377)) (import "env" "J7" (func $internal3378)) (import "env" "K7" (func $internal3379)) (import "env" "L7" (func $internal3380)) (import "env" "M7" (func $internal3381)) (import "env" "N7" (func $internal3382)) (import "env" "O7" (func $internal3383)) (import "env" "P7" (func $internal3384)) (import "env" "Q7" (func $internal3385)) (import "env" "R7" (func $internal3386)) (import "env" "S7" (func $internal3387)) (import "env" "T7" (func $internal3388)) (import "env" "U7" (func $internal3389)) (import "env" "V7" (func $internal3390)) (import "env" "W7" (func $internal3391)) (import "env" "X7" (func $internal3392)) (import "env" "Y7" (func $internal3393)) (import "env" "Z7" (func $internal3394)) (import "env" "_7" (func $internal3395)) (import "env" "$7" (func $internal3396)) (import "env" "a8" (func $internal3397)) (import "env" "b8" (func $internal3398)) (import "env" "c8" (func $internal3399)) (import "env" "d8" (func $internal3400)) (import "env" "e8" (func $internal3401)) (import "env" "f8" (func $internal3402)) (import "env" "g8" (func $internal3403)) (import "env" "h8" (func $internal3404)) (import "env" "i8" (func $internal3405)) (import "env" "j8" (func $internal3406)) (import "env" "k8" (func $internal3407)) (import "env" "l8" (func $internal3408)) (import "env" "m8" (func $internal3409)) (import "env" "n8" (func $internal3410)) (import "env" "o8" (func $internal3411)) (import "env" "p8" (func $internal3412)) (import "env" "q8" (func $internal3413)) (import "env" "r8" (func $internal3414)) (import "env" "s8" (func $internal3415)) (import "env" "t8" (func $internal3416)) (import "env" "u8" (func $internal3417)) (import "env" "v8" (func $internal3418)) (import "env" "w8" (func $internal3419)) (import "env" "x8" (func $internal3420)) (import "env" "y8" (func $internal3421)) (import "env" "z8" (func $internal3422)) (import "env" "A8" (func $internal3423)) (import "env" "B8" (func $internal3424)) (import "env" "C8" (func $internal3425)) (import "env" "D8" (func $internal3426)) (import "env" "E8" (func $internal3427)) (import "env" "F8" (func $internal3428)) (import "env" "G8" (func $internal3429)) (import "env" "H8" (func $internal3430)) (import "env" "I8" (func $internal3431)) (import "env" "J8" (func $internal3432)) (import "env" "K8" (func $internal3433)) (import "env" "L8" (func $internal3434)) (import "env" "M8" (func $internal3435)) (import "env" "N8" (func $internal3436)) (import "env" "O8" (func $internal3437)) (import "env" "P8" (func $internal3438)) (import "env" "Q8" (func $internal3439)) (import "env" "R8" (func $internal3440)) (import "env" "S8" (func $internal3441)) (import "env" "T8" (func $internal3442)) (import "env" "U8" (func $internal3443)) (import "env" "V8" (func $internal3444)) (import "env" "W8" (func $internal3445)) (import "env" "X8" (func $internal3446)) (import "env" "Y8" (func $internal3447)) (import "env" "Z8" (func $internal3448)) (import "env" "_8" (func $internal3449)) (import "env" "$8" (func $internal3450)) (import "env" "a9" (func $internal3451)) (import "env" "b9" (func $internal3452)) (import "env" "c9" (func $internal3453)) (import "env" "d9" (func $internal3454)) (import "env" "e9" (func $internal3455)) (import "env" "f9" (func $internal3456)) (import "env" "g9" (func $internal3457)) (import "env" "h9" (func $internal3458)) (import "env" "i9" (func $internal3459)) (import "env" "j9" (func $internal3460)) (import "env" "k9" (func $internal3461)) (import "env" "l9" (func $internal3462)) (import "env" "m9" (func $internal3463)) (import "env" "n9" (func $internal3464)) (import "env" "o9" (func $internal3465)) (import "env" "p9" (func $internal3466)) (import "env" "q9" (func $internal3467)) (import "env" "r9" (func $internal3468)) (import "env" "s9" (func $internal3469)) (import "env" "t9" (func $internal3470)) (import "env" "u9" (func $internal3471)) (import "env" "v9" (func $internal3472)) (import "env" "w9" (func $internal3473)) (import "env" "x9" (func $internal3474)) (import "env" "y9" (func $internal3475)) (import "env" "z9" (func $internal3476)) (import "env" "A9" (func $internal3477)) (import "env" "B9" (func $internal3478)) (import "env" "C9" (func $internal3479)) (import "env" "D9" (func $internal3480)) (import "env" "E9" (func $internal3481)) (import "env" "F9" (func $internal3482)) (import "env" "G9" (func $internal3483)) (import "env" "H9" (func $internal3484)) (import "env" "I9" (func $internal3485)) (import "env" "J9" (func $internal3486)) (import "env" "K9" (func $internal3487)) (import "env" "L9" (func $internal3488)) (import "env" "M9" (func $internal3489)) (import "env" "N9" (func $internal3490)) (import "env" "O9" (func $internal3491)) (import "env" "P9" (func $internal3492)) (import "env" "Q9" (func $internal3493)) (import "env" "R9" (func $internal3494)) (import "env" "S9" (func $internal3495)) (import "env" "T9" (func $internal3496)) (import "env" "U9" (func $internal3497)) (import "env" "V9" (func $internal3498)) (import "env" "W9" (func $internal3499)) (import "env" "X9" (func $internal3500)) (import "env" "Y9" (func $internal3501)) (import "env" "Z9" (func $internal3502)) (import "env" "_9" (func $internal3503)) (import "env" "$9" (func $internal3504)) (import "env" "aaa" (func $internal3505)) (import "env" "baa" (func $internal3506)) (import "env" "caa" (func $internal3507)) (import "env" "daa" (func $internal3508)) (import "env" "eaa" (func $internal3509)) (import "env" "faa" (func $internal3510)) (import "env" "gaa" (func $internal3511)) (import "env" "haa" (func $internal3512)) (import "env" "iaa" (func $internal3513)) (import "env" "jaa" (func $internal3514)) (import "env" "kaa" (func $internal3515)) (import "env" "laa" (func $internal3516)) (import "env" "maa" (func $internal3517)) (import "env" "naa" (func $internal3518)) (import "env" "oaa" (func $internal3519)) (import "env" "paa" (func $internal3520)) (import "env" "qaa" (func $internal3521)) (import "env" "raa" (func $internal3522)) (import "env" "saa" (func $internal3523)) (import "env" "taa" (func $internal3524)) (import "env" "uaa" (func $internal3525)) (import "env" "vaa" (func $internal3526)) (import "env" "waa" (func $internal3527)) (import "env" "xaa" (func $internal3528)) (import "env" "yaa" (func $internal3529)) (import "env" "zaa" (func $internal3530)) (import "env" "Aaa" (func $internal3531)) (import "env" "Baa" (func $internal3532)) (import "env" "Caa" (func $internal3533)) (import "env" "Daa" (func $internal3534)) (import "env" "Eaa" (func $internal3535)) (import "env" "Faa" (func $internal3536)) (import "env" "Gaa" (func $internal3537)) (import "env" "Haa" (func $internal3538)) (import "env" "Iaa" (func $internal3539)) (import "env" "Jaa" (func $internal3540)) (import "env" "Kaa" (func $internal3541)) (import "env" "Laa" (func $internal3542)) (import "env" "Maa" (func $internal3543)) (import "env" "Naa" (func $internal3544)) (import "env" "Oaa" (func $internal3545)) (import "env" "Paa" (func $internal3546)) (import "env" "Qaa" (func $internal3547)) (import "env" "Raa" (func $internal3548)) (import "env" "Saa" (func $internal3549)) (import "env" "Taa" (func $internal3550)) (import "env" "Uaa" (func $internal3551)) (import "env" "Vaa" (func $internal3552)) (import "env" "Waa" (func $internal3553)) (import "env" "Xaa" (func $internal3554)) (import "env" "Yaa" (func $internal3555)) (import "env" "Zaa" (func $internal3556)) (import "env" "_aa" (func $internal3557)) (import "env" "$aa" (func $internal3558)) (import "env" "aba" (func $internal3559)) (import "env" "bba" (func $internal3560)) (import "env" "cba" (func $internal3561)) (import "env" "dba" (func $internal3562)) (import "env" "eba" (func $internal3563)) (import "env" "fba" (func $internal3564)) (import "env" "gba" (func $internal3565)) (import "env" "hba" (func $internal3566)) (import "env" "iba" (func $internal3567)) (import "env" "jba" (func $internal3568)) (import "env" "kba" (func $internal3569)) (import "env" "lba" (func $internal3570)) (import "env" "mba" (func $internal3571)) (import "env" "nba" (func $internal3572)) (import "env" "oba" (func $internal3573)) (import "env" "pba" (func $internal3574)) (import "env" "qba" (func $internal3575)) (import "env" "rba" (func $internal3576)) (import "env" "sba" (func $internal3577)) (import "env" "tba" (func $internal3578)) (import "env" "uba" (func $internal3579)) (import "env" "vba" (func $internal3580)) (import "env" "wba" (func $internal3581)) (import "env" "xba" (func $internal3582)) (import "env" "yba" (func $internal3583)) (import "env" "zba" (func $internal3584)) (import "env" "Aba" (func $internal3585)) (import "env" "Bba" (func $internal3586)) (import "env" "Cba" (func $internal3587)) (import "env" "Dba" (func $internal3588)) (import "env" "Eba" (func $internal3589)) (import "env" "Fba" (func $internal3590)) (import "env" "Gba" (func $internal3591)) (import "env" "Hba" (func $internal3592)) (import "env" "Iba" (func $internal3593)) (import "env" "Jba" (func $internal3594)) (import "env" "Kba" (func $internal3595)) (import "env" "Lba" (func $internal3596)) (import "env" "Mba" (func $internal3597)) (import "env" "Nba" (func $internal3598)) (import "env" "Oba" (func $internal3599)) (import "env" "Pba" (func $internal3600)) (import "env" "Qba" (func $internal3601)) (import "env" "Rba" (func $internal3602)) (import "env" "Sba" (func $internal3603)) (import "env" "Tba" (func $internal3604)) (import "env" "Uba" (func $internal3605)) (import "env" "Vba" (func $internal3606)) (import "env" "Wba" (func $internal3607)) (import "env" "Xba" (func $internal3608)) (import "env" "Yba" (func $internal3609)) (import "env" "Zba" (func $internal3610)) (import "env" "_ba" (func $internal3611)) (import "env" "$ba" (func $internal3612)) (import "env" "aca" (func $internal3613)) (import "env" "bca" (func $internal3614)) (import "env" "cca" (func $internal3615)) (import "env" "dca" (func $internal3616)) (import "env" "eca" (func $internal3617)) (import "env" "fca" (func $internal3618)) (import "env" "gca" (func $internal3619)) (import "env" "hca" (func $internal3620)) (import "env" "ica" (func $internal3621)) (import "env" "jca" (func $internal3622)) (import "env" "kca" (func $internal3623)) (import "env" "lca" (func $internal3624)) (import "env" "mca" (func $internal3625)) (import "env" "nca" (func $internal3626)) (import "env" "oca" (func $internal3627)) (import "env" "pca" (func $internal3628)) (import "env" "qca" (func $internal3629)) (import "env" "rca" (func $internal3630)) (import "env" "sca" (func $internal3631)) (import "env" "tca" (func $internal3632)) (import "env" "uca" (func $internal3633)) (import "env" "vca" (func $internal3634)) (import "env" "wca" (func $internal3635)) (import "env" "xca" (func $internal3636)) (import "env" "yca" (func $internal3637)) (import "env" "zca" (func $internal3638)) (import "env" "Aca" (func $internal3639)) (import "env" "Bca" (func $internal3640)) (import "env" "Cca" (func $internal3641)) (import "env" "Dca" (func $internal3642)) (import "env" "Eca" (func $internal3643)) (import "env" "Fca" (func $internal3644)) (import "env" "Gca" (func $internal3645)) (import "env" "Hca" (func $internal3646)) (import "env" "Ica" (func $internal3647)) (import "env" "Jca" (func $internal3648)) (import "env" "Kca" (func $internal3649)) (import "env" "Lca" (func $internal3650)) (import "env" "Mca" (func $internal3651)) (import "env" "Nca" (func $internal3652)) (import "env" "Oca" (func $internal3653)) (import "env" "Pca" (func $internal3654)) (import "env" "Qca" (func $internal3655)) (import "env" "Rca" (func $internal3656)) (import "env" "Sca" (func $internal3657)) (import "env" "Tca" (func $internal3658)) (import "env" "Uca" (func $internal3659)) (import "env" "Vca" (func $internal3660)) (import "env" "Wca" (func $internal3661)) (import "env" "Xca" (func $internal3662)) (import "env" "Yca" (func $internal3663)) (import "env" "Zca" (func $internal3664)) (import "env" "_ca" (func $internal3665)) (import "env" "$ca" (func $internal3666)) (import "env" "ada" (func $internal3667)) (import "env" "bda" (func $internal3668)) (import "env" "cda" (func $internal3669)) (import "env" "dda" (func $internal3670)) (import "env" "eda" (func $internal3671)) (import "env" "fda" (func $internal3672)) (import "env" "gda" (func $internal3673)) (import "env" "hda" (func $internal3674)) (import "env" "ida" (func $internal3675)) (import "env" "jda" (func $internal3676)) (import "env" "kda" (func $internal3677)) (import "env" "lda" (func $internal3678)) (import "env" "mda" (func $internal3679)) (import "env" "nda" (func $internal3680)) (import "env" "oda" (func $internal3681)) (import "env" "pda" (func $internal3682)) (import "env" "qda" (func $internal3683)) (import "env" "rda" (func $internal3684)) (import "env" "sda" (func $internal3685)) (import "env" "tda" (func $internal3686)) (import "env" "uda" (func $internal3687)) (import "env" "vda" (func $internal3688)) (import "env" "wda" (func $internal3689)) (import "env" "xda" (func $internal3690)) (import "env" "yda" (func $internal3691)) (import "env" "zda" (func $internal3692)) (import "env" "Ada" (func $internal3693)) (import "env" "Bda" (func $internal3694)) (import "env" "Cda" (func $internal3695)) (import "env" "Dda" (func $internal3696)) (import "env" "Eda" (func $internal3697)) (import "env" "Fda" (func $internal3698)) (import "env" "Gda" (func $internal3699)) (import "env" "Hda" (func $internal3700)) (import "env" "Ida" (func $internal3701)) (import "env" "Jda" (func $internal3702)) (import "env" "Kda" (func $internal3703)) (import "env" "Lda" (func $internal3704)) (import "env" "Mda" (func $internal3705)) (import "env" "Nda" (func $internal3706)) (import "env" "Oda" (func $internal3707)) (import "env" "Pda" (func $internal3708)) (import "env" "Qda" (func $internal3709)) (import "env" "Rda" (func $internal3710)) (import "env" "Sda" (func $internal3711)) (import "env" "Tda" (func $internal3712)) (import "env" "Uda" (func $internal3713)) (import "env" "Vda" (func $internal3714)) (import "env" "Wda" (func $internal3715)) (import "env" "Xda" (func $internal3716)) (import "env" "Yda" (func $internal3717)) (import "env" "Zda" (func $internal3718)) (import "env" "_da" (func $internal3719)) (import "env" "$da" (func $internal3720)) (import "env" "aea" (func $internal3721)) (import "env" "bea" (func $internal3722)) (import "env" "cea" (func $internal3723)) (import "env" "dea" (func $internal3724)) (import "env" "eea" (func $internal3725)) (import "env" "fea" (func $internal3726)) (import "env" "gea" (func $internal3727)) (import "env" "hea" (func $internal3728)) (import "env" "iea" (func $internal3729)) (import "env" "jea" (func $internal3730)) (import "env" "kea" (func $internal3731)) (import "env" "lea" (func $internal3732)) (import "env" "mea" (func $internal3733)) (import "env" "nea" (func $internal3734)) (import "env" "oea" (func $internal3735)) (import "env" "pea" (func $internal3736)) (import "env" "qea" (func $internal3737)) (import "env" "rea" (func $internal3738)) (import "env" "sea" (func $internal3739)) (import "env" "tea" (func $internal3740)) (import "env" "uea" (func $internal3741)) (import "env" "vea" (func $internal3742)) (import "env" "wea" (func $internal3743)) (import "env" "xea" (func $internal3744)) (import "env" "yea" (func $internal3745)) (import "env" "zea" (func $internal3746)) (import "env" "Aea" (func $internal3747)) (import "env" "Bea" (func $internal3748)) (import "env" "Cea" (func $internal3749)) (import "env" "Dea" (func $internal3750)) (import "env" "Eea" (func $internal3751)) (import "env" "Fea" (func $internal3752)) (import "env" "Gea" (func $internal3753)) (import "env" "Hea" (func $internal3754)) (import "env" "Iea" (func $internal3755)) (import "env" "Jea" (func $internal3756)) (import "env" "Kea" (func $internal3757)) (import "env" "Lea" (func $internal3758)) (import "env" "Mea" (func $internal3759)) (import "env" "Nea" (func $internal3760)) (import "env" "Oea" (func $internal3761)) (import "env" "Pea" (func $internal3762)) (import "env" "Qea" (func $internal3763)) (import "env" "Rea" (func $internal3764)) (import "env" "Sea" (func $internal3765)) (import "env" "Tea" (func $internal3766)) (import "env" "Uea" (func $internal3767)) (import "env" "Vea" (func $internal3768)) (import "env" "Wea" (func $internal3769)) (import "env" "Xea" (func $internal3770)) (import "env" "Yea" (func $internal3771)) (import "env" "Zea" (func $internal3772)) (import "env" "_ea" (func $internal3773)) (import "env" "$ea" (func $internal3774)) (import "env" "afa" (func $internal3775)) (import "env" "bfa" (func $internal3776)) (import "env" "cfa" (func $internal3777)) (import "env" "dfa" (func $internal3778)) (import "env" "efa" (func $internal3779)) (import "env" "ffa" (func $internal3780)) (import "env" "gfa" (func $internal3781)) (import "env" "hfa" (func $internal3782)) (import "env" "ifa" (func $internal3783)) (import "env" "jfa" (func $internal3784)) (import "env" "kfa" (func $internal3785)) (import "env" "lfa" (func $internal3786)) (import "env" "mfa" (func $internal3787)) (import "env" "nfa" (func $internal3788)) (import "env" "ofa" (func $internal3789)) (import "env" "pfa" (func $internal3790)) (import "env" "qfa" (func $internal3791)) (import "env" "rfa" (func $internal3792)) (import "env" "sfa" (func $internal3793)) (import "env" "tfa" (func $internal3794)) (import "env" "ufa" (func $internal3795)) (import "env" "vfa" (func $internal3796)) (import "env" "wfa" (func $internal3797)) (import "env" "xfa" (func $internal3798)) (import "env" "yfa" (func $internal3799)) (import "env" "zfa" (func $internal3800)) (import "env" "Afa" (func $internal3801)) (import "env" "Bfa" (func $internal3802)) (import "env" "Cfa" (func $internal3803)) (import "env" "Dfa" (func $internal3804)) (import "env" "Efa" (func $internal3805)) (import "env" "Ffa" (func $internal3806)) (import "env" "Gfa" (func $internal3807)) (import "env" "Hfa" (func $internal3808)) (import "env" "Ifa" (func $internal3809)) (import "env" "Jfa" (func $internal3810)) (import "env" "Kfa" (func $internal3811)) (import "env" "Lfa" (func $internal3812)) (import "env" "Mfa" (func $internal3813)) (import "env" "Nfa" (func $internal3814)) (import "env" "Ofa" (func $internal3815)) (import "env" "Pfa" (func $internal3816)) (import "env" "Qfa" (func $internal3817)) (import "env" "Rfa" (func $internal3818)) (import "env" "Sfa" (func $internal3819)) (import "env" "Tfa" (func $internal3820)) (import "env" "Ufa" (func $internal3821)) (import "env" "Vfa" (func $internal3822)) (import "env" "Wfa" (func $internal3823)) (import "env" "Xfa" (func $internal3824)) (import "env" "Yfa" (func $internal3825)) (import "env" "Zfa" (func $internal3826)) (import "env" "_fa" (func $internal3827)) (import "env" "$fa" (func $internal3828)) (import "env" "aga" (func $internal3829)) (import "env" "bga" (func $internal3830)) (import "env" "cga" (func $internal3831)) (import "env" "dga" (func $internal3832)) (import "env" "ega" (func $internal3833)) (import "env" "fga" (func $internal3834)) (import "env" "gga" (func $internal3835)) (import "env" "hga" (func $internal3836)) (import "env" "iga" (func $internal3837)) (import "env" "jga" (func $internal3838)) (import "env" "kga" (func $internal3839)) (import "env" "lga" (func $internal3840)) (import "env" "mga" (func $internal3841)) (import "env" "nga" (func $internal3842)) (import "env" "oga" (func $internal3843)) (import "env" "pga" (func $internal3844)) (import "env" "qga" (func $internal3845)) (import "env" "rga" (func $internal3846)) (import "env" "sga" (func $internal3847)) (import "env" "tga" (func $internal3848)) (import "env" "uga" (func $internal3849)) (import "env" "vga" (func $internal3850)) (import "env" "wga" (func $internal3851)) (import "env" "xga" (func $internal3852)) (import "env" "yga" (func $internal3853)) (import "env" "zga" (func $internal3854)) (import "env" "Aga" (func $internal3855)) (import "env" "Bga" (func $internal3856)) (import "env" "Cga" (func $internal3857)) (import "env" "Dga" (func $internal3858)) (import "env" "Ega" (func $internal3859)) (import "env" "Fga" (func $internal3860)) (import "env" "Gga" (func $internal3861)) (import "env" "Hga" (func $internal3862)) (import "env" "Iga" (func $internal3863)) (import "env" "Jga" (func $internal3864)) (import "env" "Kga" (func $internal3865)) (import "env" "Lga" (func $internal3866)) (import "env" "Mga" (func $internal3867)) (import "env" "Nga" (func $internal3868)) (import "env" "Oga" (func $internal3869)) (import "env" "Pga" (func $internal3870)) (import "env" "Qga" (func $internal3871)) (import "env" "Rga" (func $internal3872)) (import "env" "Sga" (func $internal3873)) (import "env" "Tga" (func $internal3874)) (import "env" "Uga" (func $internal3875)) (import "env" "Vga" (func $internal3876)) (import "env" "Wga" (func $internal3877)) (import "env" "Xga" (func $internal3878)) (import "env" "Yga" (func $internal3879)) (import "env" "Zga" (func $internal3880)) (import "env" "_ga" (func $internal3881)) (import "env" "$ga" (func $internal3882)) (import "env" "aha" (func $internal3883)) (import "env" "bha" (func $internal3884)) (import "env" "cha" (func $internal3885)) (import "env" "dha" (func $internal3886)) (import "env" "eha" (func $internal3887)) (import "env" "fha" (func $internal3888)) (import "env" "gha" (func $internal3889)) (import "env" "hha" (func $internal3890)) (import "env" "iha" (func $internal3891)) (import "env" "jha" (func $internal3892)) (import "env" "kha" (func $internal3893)) (import "env" "lha" (func $internal3894)) (import "env" "mha" (func $internal3895)) (import "env" "nha" (func $internal3896)) (import "env" "oha" (func $internal3897)) (import "env" "pha" (func $internal3898)) (import "env" "qha" (func $internal3899)) (import "env" "rha" (func $internal3900)) (import "env" "sha" (func $internal3901)) (import "env" "tha" (func $internal3902)) (import "env" "uha" (func $internal3903)) (import "env" "vha" (func $internal3904)) (import "env" "wha" (func $internal3905)) (import "env" "xha" (func $internal3906)) (import "env" "yha" (func $internal3907)) (import "env" "zha" (func $internal3908)) (import "env" "Aha" (func $internal3909)) (import "env" "Bha" (func $internal3910)) (import "env" "Cha" (func $internal3911)) (import "env" "Dha" (func $internal3912)) (import "env" "Eha" (func $internal3913)) (import "env" "Fha" (func $internal3914)) (import "env" "Gha" (func $internal3915)) (import "env" "Hha" (func $internal3916)) (import "env" "Iha" (func $internal3917)) (import "env" "Jha" (func $internal3918)) (import "env" "Kha" (func $internal3919)) (import "env" "Lha" (func $internal3920)) (import "env" "Mha" (func $internal3921)) (import "env" "Nha" (func $internal3922)) (import "env" "Oha" (func $internal3923)) (import "env" "Pha" (func $internal3924)) (import "env" "Qha" (func $internal3925)) (import "env" "Rha" (func $internal3926)) (import "env" "Sha" (func $internal3927)) (import "env" "Tha" (func $internal3928)) (import "env" "Uha" (func $internal3929)) (import "env" "Vha" (func $internal3930)) (import "env" "Wha" (func $internal3931)) (import "env" "Xha" (func $internal3932)) (import "env" "Yha" (func $internal3933)) (import "env" "Zha" (func $internal3934)) (import "env" "_ha" (func $internal3935)) (import "env" "$ha" (func $internal3936)) (import "env" "aia" (func $internal3937)) (import "env" "bia" (func $internal3938)) (import "env" "cia" (func $internal3939)) (import "env" "dia" (func $internal3940)) (import "env" "eia" (func $internal3941)) (import "env" "fia" (func $internal3942)) (import "env" "gia" (func $internal3943)) (import "env" "hia" (func $internal3944)) (import "env" "iia" (func $internal3945)) (import "env" "jia" (func $internal3946)) (import "env" "kia" (func $internal3947)) (import "env" "lia" (func $internal3948)) (import "env" "mia" (func $internal3949)) (import "env" "nia" (func $internal3950)) (import "env" "oia" (func $internal3951)) (import "env" "pia" (func $internal3952)) (import "env" "qia" (func $internal3953)) (import "env" "ria" (func $internal3954)) (import "env" "sia" (func $internal3955)) (import "env" "tia" (func $internal3956)) (import "env" "uia" (func $internal3957)) (import "env" "via" (func $internal3958)) (import "env" "wia" (func $internal3959)) (import "env" "xia" (func $internal3960)) (import "env" "yia" (func $internal3961)) (import "env" "zia" (func $internal3962)) (import "env" "Aia" (func $internal3963)) (import "env" "Bia" (func $internal3964)) (import "env" "Cia" (func $internal3965)) (import "env" "Dia" (func $internal3966)) (import "env" "Eia" (func $internal3967)) (import "env" "Fia" (func $internal3968)) (import "env" "Gia" (func $internal3969)) (import "env" "Hia" (func $internal3970)) (import "env" "Iia" (func $internal3971)) (import "env" "Jia" (func $internal3972)) (import "env" "Kia" (func $internal3973)) (import "env" "Lia" (func $internal3974)) (import "env" "Mia" (func $internal3975)) (import "env" "Nia" (func $internal3976)) (import "env" "Oia" (func $internal3977)) (import "env" "Pia" (func $internal3978)) (import "env" "Qia" (func $internal3979)) (import "env" "Ria" (func $internal3980)) (import "env" "Sia" (func $internal3981)) (import "env" "Tia" (func $internal3982)) (import "env" "Uia" (func $internal3983)) (import "env" "Via" (func $internal3984)) (import "env" "Wia" (func $internal3985)) (import "env" "Xia" (func $internal3986)) (import "env" "Yia" (func $internal3987)) (import "env" "Zia" (func $internal3988)) (import "env" "_ia" (func $internal3989)) (import "env" "$ia" (func $internal3990)) (import "env" "aja" (func $internal3991)) (import "env" "bja" (func $internal3992)) (import "env" "cja" (func $internal3993)) (import "env" "dja" (func $internal3994)) (import "env" "eja" (func $internal3995)) (import "env" "fja" (func $internal3996)) (import "env" "gja" (func $internal3997)) (import "env" "hja" (func $internal3998)) (import "env" "ija" (func $internal3999)) (import "env" "jja" (func $internal4000)) (import "env" "kja" (func $internal4001)) (import "env" "lja" (func $internal4002)) (import "env" "mja" (func $internal4003)) (import "env" "nja" (func $internal4004)) (import "env" "oja" (func $internal4005)) (import "env" "pja" (func $internal4006)) (import "env" "qja" (func $internal4007)) (import "env" "rja" (func $internal4008)) (import "env" "sja" (func $internal4009)) (import "env" "tja" (func $internal4010)) (import "env" "uja" (func $internal4011)) (import "env" "vja" (func $internal4012)) (import "env" "wja" (func $internal4013)) (import "env" "xja" (func $internal4014)) (import "env" "yja" (func $internal4015)) (import "env" "zja" (func $internal4016)) (import "env" "Aja" (func $internal4017)) (import "env" "Bja" (func $internal4018)) (import "env" "Cja" (func $internal4019)) (import "env" "Dja" (func $internal4020)) (import "env" "Eja" (func $internal4021)) (import "env" "Fja" (func $internal4022)) (import "env" "Gja" (func $internal4023)) (import "env" "Hja" (func $internal4024)) (import "env" "Ija" (func $internal4025)) (import "env" "Jja" (func $internal4026)) (import "env" "Kja" (func $internal4027)) (import "env" "Lja" (func $internal4028)) (import "env" "Mja" (func $internal4029)) (import "env" "Nja" (func $internal4030)) (import "env" "Oja" (func $internal4031)) (import "env" "Pja" (func $internal4032)) (import "env" "Qja" (func $internal4033)) (import "env" "Rja" (func $internal4034)) (import "env" "Sja" (func $internal4035)) (import "env" "Tja" (func $internal4036)) (import "env" "Uja" (func $internal4037)) (import "env" "Vja" (func $internal4038)) (import "env" "Wja" (func $internal4039)) (import "env" "Xja" (func $internal4040)) (import "env" "Yja" (func $internal4041)) (import "env" "Zja" (func $internal4042)) (import "env" "_ja" (func $internal4043)) (import "env" "$ja" (func $internal4044)) (import "env" "aka" (func $internal4045)) (import "env" "bka" (func $internal4046)) (import "env" "cka" (func $internal4047)) (import "env" "dka" (func $internal4048)) (import "env" "eka" (func $internal4049)) (import "env" "fka" (func $internal4050)) (import "env" "gka" (func $internal4051)) (import "env" "hka" (func $internal4052)) (import "env" "ika" (func $internal4053)) (import "env" "jka" (func $internal4054)) (import "env" "kka" (func $internal4055)) (import "env" "lka" (func $internal4056)) (import "env" "mka" (func $internal4057)) (import "env" "nka" (func $internal4058)) (import "env" "oka" (func $internal4059)) (import "env" "pka" (func $internal4060)) (import "env" "qka" (func $internal4061)) (import "env" "rka" (func $internal4062)) (import "env" "ska" (func $internal4063)) (import "env" "tka" (func $internal4064)) (import "env" "uka" (func $internal4065)) (import "env" "vka" (func $internal4066)) (import "env" "wka" (func $internal4067)) (import "env" "xka" (func $internal4068)) (import "env" "yka" (func $internal4069)) (import "env" "zka" (func $internal4070)) (import "env" "Aka" (func $internal4071)) (import "env" "Bka" (func $internal4072)) (import "env" "Cka" (func $internal4073)) (import "env" "Dka" (func $internal4074)) (import "env" "Eka" (func $internal4075)) (import "env" "Fka" (func $internal4076)) (import "env" "Gka" (func $internal4077)) (import "env" "Hka" (func $internal4078)) (import "env" "Ika" (func $internal4079)) (import "env" "Jka" (func $internal4080)) (import "env" "Kka" (func $internal4081)) (import "env" "Lka" (func $internal4082)) (import "env" "Mka" (func $internal4083)) (import "env" "Nka" (func $internal4084)) (import "env" "Oka" (func $internal4085)) (import "env" "Pka" (func $internal4086)) (import "env" "Qka" (func $internal4087)) (import "env" "Rka" (func $internal4088)) (import "env" "Ska" (func $internal4089)) (import "env" "Tka" (func $internal4090)) (import "env" "Uka" (func $internal4091)) (import "env" "Vka" (func $internal4092)) (import "env" "Wka" (func $internal4093)) (import "env" "Xka" (func $internal4094)) (import "env" "Yka" (func $internal4095)) (import "env" "Zka" (func $internal4096)) (import "env" "_ka" (func $internal4097)) (import "env" "$ka" (func $internal4098)) (import "env" "ala" (func $internal4099)) (import "env" "bla" (func $internal4100)) (import "env" "cla" (func $internal4101)) (import "env" "dla" (func $internal4102)) (import "env" "ela" (func $internal4103)) (import "env" "fla" (func $internal4104)) (import "env" "gla" (func $internal4105)) (import "env" "hla" (func $internal4106)) (import "env" "ila" (func $internal4107)) (import "env" "jla" (func $internal4108)) (import "env" "kla" (func $internal4109)) (import "env" "lla" (func $internal4110)) (import "env" "mla" (func $internal4111)) (import "env" "nla" (func $internal4112)) (import "env" "ola" (func $internal4113)) (import "env" "pla" (func $internal4114)) (import "env" "qla" (func $internal4115)) (import "env" "rla" (func $internal4116)) (import "env" "sla" (func $internal4117)) (import "env" "tla" (func $internal4118)) (import "env" "ula" (func $internal4119)) (import "env" "vla" (func $internal4120)) (import "env" "wla" (func $internal4121)) (import "env" "xla" (func $internal4122)) (import "env" "yla" (func $internal4123)) (import "env" "zla" (func $internal4124)) (import "env" "Ala" (func $internal4125)) (import "env" "Bla" (func $internal4126)) (import "env" "Cla" (func $internal4127)) (import "env" "Dla" (func $internal4128)) (import "env" "Ela" (func $internal4129)) (import "env" "Fla" (func $internal4130)) (import "env" "Gla" (func $internal4131)) (import "env" "Hla" (func $internal4132)) (import "env" "Ila" (func $internal4133)) (import "env" "Jla" (func $internal4134)) (import "env" "Kla" (func $internal4135)) (import "env" "Lla" (func $internal4136)) (import "env" "Mla" (func $internal4137)) (import "env" "Nla" (func $internal4138)) (import "env" "Ola" (func $internal4139)) (import "env" "Pla" (func $internal4140)) (import "env" "Qla" (func $internal4141)) (import "env" "Rla" (func $internal4142)) (import "env" "Sla" (func $internal4143)) (import "env" "Tla" (func $internal4144)) (import "env" "Ula" (func $internal4145)) (import "env" "Vla" (func $internal4146)) (import "env" "Wla" (func $internal4147)) (import "env" "Xla" (func $internal4148)) (import "env" "Yla" (func $internal4149)) (import "env" "Zla" (func $internal4150)) (import "env" "_la" (func $internal4151)) (import "env" "$la" (func $internal4152)) (import "env" "ama" (func $internal4153)) (import "env" "bma" (func $internal4154)) (import "env" "cma" (func $internal4155)) (import "env" "dma" (func $internal4156)) (import "env" "ema" (func $internal4157)) (import "env" "fma" (func $internal4158)) (import "env" "gma" (func $internal4159)) (import "env" "hma" (func $internal4160)) (import "env" "ima" (func $internal4161)) (import "env" "jma" (func $internal4162)) (import "env" "kma" (func $internal4163)) (import "env" "lma" (func $internal4164)) (import "env" "mma" (func $internal4165)) (import "env" "nma" (func $internal4166)) (import "env" "oma" (func $internal4167)) (import "env" "pma" (func $internal4168)) (import "env" "qma" (func $internal4169)) (import "env" "rma" (func $internal4170)) (import "env" "sma" (func $internal4171)) (import "env" "tma" (func $internal4172)) (import "env" "uma" (func $internal4173)) (import "env" "vma" (func $internal4174)) (import "env" "wma" (func $internal4175)) (import "env" "xma" (func $internal4176)) (import "env" "yma" (func $internal4177)) (import "env" "zma" (func $internal4178)) (import "env" "Ama" (func $internal4179)) (import "env" "Bma" (func $internal4180)) (import "env" "Cma" (func $internal4181)) (import "env" "Dma" (func $internal4182)) (import "env" "Ema" (func $internal4183)) (import "env" "Fma" (func $internal4184)) (import "env" "Gma" (func $internal4185)) (import "env" "Hma" (func $internal4186)) (import "env" "Ima" (func $internal4187)) (import "env" "Jma" (func $internal4188)) (import "env" "Kma" (func $internal4189)) (import "env" "Lma" (func $internal4190)) (import "env" "Mma" (func $internal4191)) (import "env" "Nma" (func $internal4192)) (import "env" "Oma" (func $internal4193)) (import "env" "Pma" (func $internal4194)) (import "env" "Qma" (func $internal4195)) (import "env" "Rma" (func $internal4196)) (import "env" "Sma" (func $internal4197)) (import "env" "Tma" (func $internal4198)) (import "env" "Uma" (func $internal4199)) (import "env" "Vma" (func $internal4200)) (import "env" "Wma" (func $internal4201)) (import "env" "Xma" (func $internal4202)) (import "env" "Yma" (func $internal4203)) (import "env" "Zma" (func $internal4204)) (import "env" "_ma" (func $internal4205)) (import "env" "$ma" (func $internal4206)) (import "env" "ana" (func $internal4207)) (import "env" "bna" (func $internal4208)) (import "env" "cna" (func $internal4209)) (import "env" "dna" (func $internal4210)) (import "env" "ena" (func $internal4211)) (import "env" "fna" (func $internal4212)) (import "env" "gna" (func $internal4213)) (import "env" "hna" (func $internal4214)) (import "env" "ina" (func $internal4215)) (import "env" "jna" (func $internal4216)) (import "env" "kna" (func $internal4217)) (import "env" "lna" (func $internal4218)) (import "env" "mna" (func $internal4219)) (import "env" "nna" (func $internal4220)) (import "env" "ona" (func $internal4221)) (import "env" "pna" (func $internal4222)) (import "env" "qna" (func $internal4223)) (import "env" "rna" (func $internal4224)) (import "env" "sna" (func $internal4225)) (import "env" "tna" (func $internal4226)) (import "env" "una" (func $internal4227)) (import "env" "vna" (func $internal4228)) (import "env" "wna" (func $internal4229)) (import "env" "xna" (func $internal4230)) (import "env" "yna" (func $internal4231)) (import "env" "zna" (func $internal4232)) (import "env" "Ana" (func $internal4233)) (import "env" "Bna" (func $internal4234)) (import "env" "Cna" (func $internal4235)) (import "env" "Dna" (func $internal4236)) (import "env" "Ena" (func $internal4237)) (import "env" "Fna" (func $internal4238)) (import "env" "Gna" (func $internal4239)) (import "env" "Hna" (func $internal4240)) (import "env" "Ina" (func $internal4241)) (import "env" "Jna" (func $internal4242)) (import "env" "Kna" (func $internal4243)) (import "env" "Lna" (func $internal4244)) (import "env" "Mna" (func $internal4245)) (import "env" "Nna" (func $internal4246)) (import "env" "Ona" (func $internal4247)) (import "env" "Pna" (func $internal4248)) (import "env" "Qna" (func $internal4249)) (import "env" "Rna" (func $internal4250)) (import "env" "Sna" (func $internal4251)) (import "env" "Tna" (func $internal4252)) (import "env" "Una" (func $internal4253)) (import "env" "Vna" (func $internal4254)) (import "env" "Wna" (func $internal4255)) (import "env" "Xna" (func $internal4256)) (import "env" "Yna" (func $internal4257)) (import "env" "Zna" (func $internal4258)) (import "env" "_na" (func $internal4259)) (import "env" "$na" (func $internal4260)) (import "env" "aoa" (func $internal4261)) (import "env" "boa" (func $internal4262)) (import "env" "coa" (func $internal4263)) (import "env" "doa" (func $internal4264)) (import "env" "eoa" (func $internal4265)) (import "env" "foa" (func $internal4266)) (import "env" "goa" (func $internal4267)) (import "env" "hoa" (func $internal4268)) (import "env" "ioa" (func $internal4269)) (import "env" "joa" (func $internal4270)) (import "env" "koa" (func $internal4271)) (import "env" "loa" (func $internal4272)) (import "env" "moa" (func $internal4273)) (import "env" "noa" (func $internal4274)) (import "env" "ooa" (func $internal4275)) (import "env" "poa" (func $internal4276)) (import "env" "qoa" (func $internal4277)) (import "env" "roa" (func $internal4278)) (import "env" "soa" (func $internal4279)) (import "env" "toa" (func $internal4280)) (import "env" "uoa" (func $internal4281)) (import "env" "voa" (func $internal4282)) (import "env" "woa" (func $internal4283)) (import "env" "xoa" (func $internal4284)) (import "env" "yoa" (func $internal4285)) (import "env" "zoa" (func $internal4286)) (import "env" "Aoa" (func $internal4287)) (import "env" "Boa" (func $internal4288)) (import "env" "Coa" (func $internal4289)) (import "env" "Doa" (func $internal4290)) (import "env" "Eoa" (func $internal4291)) (import "env" "Foa" (func $internal4292)) (import "env" "Goa" (func $internal4293)) (import "env" "Hoa" (func $internal4294)) (import "env" "Ioa" (func $internal4295)) (import "env" "Joa" (func $internal4296)) (import "env" "Koa" (func $internal4297)) (import "env" "Loa" (func $internal4298)) (import "env" "Moa" (func $internal4299)) (import "env" "Noa" (func $internal4300)) (import "env" "Ooa" (func $internal4301)) (import "env" "Poa" (func $internal4302)) (import "env" "Qoa" (func $internal4303)) (import "env" "Roa" (func $internal4304)) (import "env" "Soa" (func $internal4305)) (import "env" "Toa" (func $internal4306)) (import "env" "Uoa" (func $internal4307)) (import "env" "Voa" (func $internal4308)) (import "env" "Woa" (func $internal4309)) (import "env" "Xoa" (func $internal4310)) (import "env" "Yoa" (func $internal4311)) (import "env" "Zoa" (func $internal4312)) (import "env" "_oa" (func $internal4313)) (import "env" "$oa" (func $internal4314)) (import "env" "apa" (func $internal4315)) (import "env" "bpa" (func $internal4316)) (import "env" "cpa" (func $internal4317)) (import "env" "dpa" (func $internal4318)) (import "env" "epa" (func $internal4319)) (import "env" "fpa" (func $internal4320)) (import "env" "gpa" (func $internal4321)) (import "env" "hpa" (func $internal4322)) (import "env" "ipa" (func $internal4323)) (import "env" "jpa" (func $internal4324)) (import "env" "kpa" (func $internal4325)) (import "env" "lpa" (func $internal4326)) (import "env" "mpa" (func $internal4327)) (import "env" "npa" (func $internal4328)) (import "env" "opa" (func $internal4329)) (import "env" "ppa" (func $internal4330)) (import "env" "qpa" (func $internal4331)) (import "env" "rpa" (func $internal4332)) (import "env" "spa" (func $internal4333)) (import "env" "tpa" (func $internal4334)) (import "env" "upa" (func $internal4335)) (import "env" "vpa" (func $internal4336)) (import "env" "wpa" (func $internal4337)) (import "env" "xpa" (func $internal4338)) (import "env" "ypa" (func $internal4339)) (import "env" "zpa" (func $internal4340)) (import "env" "Apa" (func $internal4341)) (import "env" "Bpa" (func $internal4342)) (import "env" "Cpa" (func $internal4343)) (import "env" "Dpa" (func $internal4344)) (import "env" "Epa" (func $internal4345)) (import "env" "Fpa" (func $internal4346)) (import "env" "Gpa" (func $internal4347)) (import "env" "Hpa" (func $internal4348)) (import "env" "Ipa" (func $internal4349)) (import "env" "Jpa" (func $internal4350)) (import "env" "Kpa" (func $internal4351)) (import "env" "Lpa" (func $internal4352)) (import "env" "Mpa" (func $internal4353)) (import "env" "Npa" (func $internal4354)) (import "env" "Opa" (func $internal4355)) (import "env" "Ppa" (func $internal4356)) (import "env" "Qpa" (func $internal4357)) (import "env" "Rpa" (func $internal4358)) (import "env" "Spa" (func $internal4359)) (import "env" "Tpa" (func $internal4360)) (import "env" "Upa" (func $internal4361)) (import "env" "Vpa" (func $internal4362)) (import "env" "Wpa" (func $internal4363)) (import "env" "Xpa" (func $internal4364)) (import "env" "Ypa" (func $internal4365)) (import "env" "Zpa" (func $internal4366)) (import "env" "_pa" (func $internal4367)) (import "env" "$pa" (func $internal4368)) (import "env" "aqa" (func $internal4369)) (import "env" "bqa" (func $internal4370)) (import "env" "cqa" (func $internal4371)) (import "env" "dqa" (func $internal4372)) (import "env" "eqa" (func $internal4373)) (import "env" "fqa" (func $internal4374)) (import "env" "gqa" (func $internal4375)) (import "env" "hqa" (func $internal4376)) (import "env" "iqa" (func $internal4377)) (import "env" "jqa" (func $internal4378)) (import "env" "kqa" (func $internal4379)) (import "env" "lqa" (func $internal4380)) (import "env" "mqa" (func $internal4381)) (import "env" "nqa" (func $internal4382)) (import "env" "oqa" (func $internal4383)) (import "env" "pqa" (func $internal4384)) (import "env" "qqa" (func $internal4385)) (import "env" "rqa" (func $internal4386)) (import "env" "sqa" (func $internal4387)) (import "env" "tqa" (func $internal4388)) (import "env" "uqa" (func $internal4389)) (import "env" "vqa" (func $internal4390)) (import "env" "wqa" (func $internal4391)) (import "env" "xqa" (func $internal4392)) (import "env" "yqa" (func $internal4393)) (import "env" "zqa" (func $internal4394)) (import "env" "Aqa" (func $internal4395)) (import "env" "Bqa" (func $internal4396)) (import "env" "Cqa" (func $internal4397)) (import "env" "Dqa" (func $internal4398)) (import "env" "Eqa" (func $internal4399)) (import "env" "Fqa" (func $internal4400)) (import "env" "Gqa" (func $internal4401)) (import "env" "Hqa" (func $internal4402)) (import "env" "Iqa" (func $internal4403)) (import "env" "Jqa" (func $internal4404)) (import "env" "Kqa" (func $internal4405)) (import "env" "Lqa" (func $internal4406)) (import "env" "Mqa" (func $internal4407)) (import "env" "Nqa" (func $internal4408)) (import "env" "Oqa" (func $internal4409)) (import "env" "Pqa" (func $internal4410)) (import "env" "Qqa" (func $internal4411)) (import "env" "Rqa" (func $internal4412)) (import "env" "Sqa" (func $internal4413)) (import "env" "Tqa" (func $internal4414)) (import "env" "Uqa" (func $internal4415)) (import "env" "Vqa" (func $internal4416)) (import "env" "Wqa" (func $internal4417)) (import "env" "Xqa" (func $internal4418)) (import "env" "Yqa" (func $internal4419)) (import "env" "Zqa" (func $internal4420)) (import "env" "_qa" (func $internal4421)) (import "env" "$qa" (func $internal4422)) (import "env" "ara" (func $internal4423)) (import "env" "bra" (func $internal4424)) (import "env" "cra" (func $internal4425)) (import "env" "dra" (func $internal4426)) (import "env" "era" (func $internal4427)) (import "env" "fra" (func $internal4428)) (import "env" "gra" (func $internal4429)) (import "env" "hra" (func $internal4430)) (import "env" "ira" (func $internal4431)) (import "env" "jra" (func $internal4432)) (import "env" "kra" (func $internal4433)) (import "env" "lra" (func $internal4434)) (import "env" "mra" (func $internal4435)) (import "env" "nra" (func $internal4436)) (import "env" "ora" (func $internal4437)) (import "env" "pra" (func $internal4438)) (import "env" "qra" (func $internal4439)) (import "env" "rra" (func $internal4440)) (import "env" "sra" (func $internal4441)) (import "env" "tra" (func $internal4442)) (import "env" "ura" (func $internal4443)) (import "env" "vra" (func $internal4444)) (import "env" "wra" (func $internal4445)) (import "env" "xra" (func $internal4446)) (import "env" "yra" (func $internal4447)) (import "env" "zra" (func $internal4448)) (import "env" "Ara" (func $internal4449)) (import "env" "Bra" (func $internal4450)) (import "env" "Cra" (func $internal4451)) (import "env" "Dra" (func $internal4452)) (import "env" "Era" (func $internal4453)) (import "env" "Fra" (func $internal4454)) (import "env" "Gra" (func $internal4455)) (import "env" "Hra" (func $internal4456)) (import "env" "Ira" (func $internal4457)) (import "env" "Jra" (func $internal4458)) (import "env" "Kra" (func $internal4459)) (import "env" "Lra" (func $internal4460)) (import "env" "Mra" (func $internal4461)) (import "env" "Nra" (func $internal4462)) (import "env" "Ora" (func $internal4463)) (import "env" "Pra" (func $internal4464)) (import "env" "Qra" (func $internal4465)) (import "env" "Rra" (func $internal4466)) (import "env" "Sra" (func $internal4467)) (import "env" "Tra" (func $internal4468)) (import "env" "Ura" (func $internal4469)) (import "env" "Vra" (func $internal4470)) (import "env" "Wra" (func $internal4471)) (import "env" "Xra" (func $internal4472)) (import "env" "Yra" (func $internal4473)) (import "env" "Zra" (func $internal4474)) (import "env" "_ra" (func $internal4475)) (import "env" "$ra" (func $internal4476)) (import "env" "asa" (func $internal4477)) (import "env" "bsa" (func $internal4478)) (import "env" "csa" (func $internal4479)) (import "env" "dsa" (func $internal4480)) (import "env" "esa" (func $internal4481)) (import "env" "fsa" (func $internal4482)) (import "env" "gsa" (func $internal4483)) (import "env" "hsa" (func $internal4484)) (import "env" "isa" (func $internal4485)) (import "env" "jsa" (func $internal4486)) (import "env" "ksa" (func $internal4487)) (import "env" "lsa" (func $internal4488)) (import "env" "msa" (func $internal4489)) (import "env" "nsa" (func $internal4490)) (import "env" "osa" (func $internal4491)) (import "env" "psa" (func $internal4492)) (import "env" "qsa" (func $internal4493)) (import "env" "rsa" (func $internal4494)) (import "env" "ssa" (func $internal4495)) (import "env" "tsa" (func $internal4496)) (import "env" "usa" (func $internal4497)) (import "env" "vsa" (func $internal4498)) (import "env" "wsa" (func $internal4499)) (import "env" "xsa" (func $internal4500)) (import "env" "ysa" (func $internal4501)) (import "env" "zsa" (func $internal4502)) (import "env" "Asa" (func $internal4503)) (import "env" "Bsa" (func $internal4504)) (import "env" "Csa" (func $internal4505)) (import "env" "Dsa" (func $internal4506)) (import "env" "Esa" (func $internal4507)) (import "env" "Fsa" (func $internal4508)) (import "env" "Gsa" (func $internal4509)) (import "env" "Hsa" (func $internal4510)) (import "env" "Isa" (func $internal4511)) (import "env" "Jsa" (func $internal4512)) (import "env" "Ksa" (func $internal4513)) (import "env" "Lsa" (func $internal4514)) (import "env" "Msa" (func $internal4515)) (import "env" "Nsa" (func $internal4516)) (import "env" "Osa" (func $internal4517)) (import "env" "Psa" (func $internal4518)) (import "env" "Qsa" (func $internal4519)) (import "env" "Rsa" (func $internal4520)) (import "env" "Ssa" (func $internal4521)) (import "env" "Tsa" (func $internal4522)) (import "env" "Usa" (func $internal4523)) (import "env" "Vsa" (func $internal4524)) (import "env" "Wsa" (func $internal4525)) (import "env" "Xsa" (func $internal4526)) (import "env" "Ysa" (func $internal4527)) (import "env" "Zsa" (func $internal4528)) (import "env" "_sa" (func $internal4529)) (import "env" "$sa" (func $internal4530)) (import "env" "ata" (func $internal4531)) (import "env" "bta" (func $internal4532)) (import "env" "cta" (func $internal4533)) (import "env" "dta" (func $internal4534)) (import "env" "eta" (func $internal4535)) (import "env" "fta" (func $internal4536)) (import "env" "gta" (func $internal4537)) (import "env" "hta" (func $internal4538)) (import "env" "ita" (func $internal4539)) (import "env" "jta" (func $internal4540)) (import "env" "kta" (func $internal4541)) (import "env" "lta" (func $internal4542)) (import "env" "mta" (func $internal4543)) (import "env" "nta" (func $internal4544)) (import "env" "ota" (func $internal4545)) (import "env" "pta" (func $internal4546)) (import "env" "qta" (func $internal4547)) (import "env" "rta" (func $internal4548)) (import "env" "sta" (func $internal4549)) (import "env" "tta" (func $internal4550)) (import "env" "uta" (func $internal4551)) (import "env" "vta" (func $internal4552)) (import "env" "wta" (func $internal4553)) (import "env" "xta" (func $internal4554)) (import "env" "yta" (func $internal4555)) (import "env" "zta" (func $internal4556)) (import "env" "Ata" (func $internal4557)) (import "env" "Bta" (func $internal4558)) (import "env" "Cta" (func $internal4559)) (import "env" "Dta" (func $internal4560)) (import "env" "Eta" (func $internal4561)) (import "env" "Fta" (func $internal4562)) (import "env" "Gta" (func $internal4563)) (import "env" "Hta" (func $internal4564)) (import "env" "Ita" (func $internal4565)) (import "env" "Jta" (func $internal4566)) (import "env" "Kta" (func $internal4567)) (import "env" "Lta" (func $internal4568)) (import "env" "Mta" (func $internal4569)) (import "env" "Nta" (func $internal4570)) (import "env" "Ota" (func $internal4571)) (import "env" "Pta" (func $internal4572)) (import "env" "Qta" (func $internal4573)) (import "env" "Rta" (func $internal4574)) (import "env" "Sta" (func $internal4575)) (import "env" "Tta" (func $internal4576)) (import "env" "Uta" (func $internal4577)) (import "env" "Vta" (func $internal4578)) (import "env" "Wta" (func $internal4579)) (import "env" "Xta" (func $internal4580)) (import "env" "Yta" (func $internal4581)) (import "env" "Zta" (func $internal4582)) (import "env" "_ta" (func $internal4583)) (import "env" "$ta" (func $internal4584)) (import "env" "aua" (func $internal4585)) (import "env" "bua" (func $internal4586)) (import "env" "cua" (func $internal4587)) (import "env" "dua" (func $internal4588)) (import "env" "eua" (func $internal4589)) (import "env" "fua" (func $internal4590)) (import "env" "gua" (func $internal4591)) (import "env" "hua" (func $internal4592)) (import "env" "iua" (func $internal4593)) (import "env" "jua" (func $internal4594)) (import "env" "kua" (func $internal4595)) (import "env" "lua" (func $internal4596)) (import "env" "mua" (func $internal4597)) (import "env" "nua" (func $internal4598)) (import "env" "oua" (func $internal4599)) (import "env" "pua" (func $internal4600)) (import "env" "qua" (func $internal4601)) (import "env" "rua" (func $internal4602)) (import "env" "sua" (func $internal4603)) (import "env" "tua" (func $internal4604)) (import "env" "uua" (func $internal4605)) (import "env" "vua" (func $internal4606)) (import "env" "wua" (func $internal4607)) (import "env" "xua" (func $internal4608)) (import "env" "yua" (func $internal4609)) (import "env" "zua" (func $internal4610)) (import "env" "Aua" (func $internal4611)) (import "env" "Bua" (func $internal4612)) (import "env" "Cua" (func $internal4613)) (import "env" "Dua" (func $internal4614)) (import "env" "Eua" (func $internal4615)) (import "env" "Fua" (func $internal4616)) (import "env" "Gua" (func $internal4617)) (import "env" "Hua" (func $internal4618)) (import "env" "Iua" (func $internal4619)) (import "env" "Jua" (func $internal4620)) (import "env" "Kua" (func $internal4621)) (import "env" "Lua" (func $internal4622)) (import "env" "Mua" (func $internal4623)) (import "env" "Nua" (func $internal4624)) (import "env" "Oua" (func $internal4625)) (import "env" "Pua" (func $internal4626)) (import "env" "Qua" (func $internal4627)) (import "env" "Rua" (func $internal4628)) (import "env" "Sua" (func $internal4629)) (import "env" "Tua" (func $internal4630)) (import "env" "Uua" (func $internal4631)) (import "env" "Vua" (func $internal4632)) (import "env" "Wua" (func $internal4633)) (import "env" "Xua" (func $internal4634)) (import "env" "Yua" (func $internal4635)) (import "env" "Zua" (func $internal4636)) (import "env" "_ua" (func $internal4637)) (import "env" "$ua" (func $internal4638)) (import "env" "ava" (func $internal4639)) (import "env" "bva" (func $internal4640)) (import "env" "cva" (func $internal4641)) (import "env" "dva" (func $internal4642)) (import "env" "eva" (func $internal4643)) (import "env" "fva" (func $internal4644)) (import "env" "gva" (func $internal4645)) (import "env" "hva" (func $internal4646)) (import "env" "iva" (func $internal4647)) (import "env" "jva" (func $internal4648)) (import "env" "kva" (func $internal4649)) (import "env" "lva" (func $internal4650)) (import "env" "mva" (func $internal4651)) (import "env" "nva" (func $internal4652)) (import "env" "ova" (func $internal4653)) (import "env" "pva" (func $internal4654)) (import "env" "qva" (func $internal4655)) (import "env" "rva" (func $internal4656)) (import "env" "sva" (func $internal4657)) (import "env" "tva" (func $internal4658)) (import "env" "uva" (func $internal4659)) (import "env" "vva" (func $internal4660)) (import "env" "wva" (func $internal4661)) (import "env" "xva" (func $internal4662)) (import "env" "yva" (func $internal4663)) (import "env" "zva" (func $internal4664)) (import "env" "Ava" (func $internal4665)) (import "env" "Bva" (func $internal4666)) (import "env" "Cva" (func $internal4667)) (import "env" "Dva" (func $internal4668)) (import "env" "Eva" (func $internal4669)) (import "env" "Fva" (func $internal4670)) (import "env" "Gva" (func $internal4671)) (import "env" "Hva" (func $internal4672)) (import "env" "Iva" (func $internal4673)) (import "env" "Jva" (func $internal4674)) (import "env" "Kva" (func $internal4675)) (import "env" "Lva" (func $internal4676)) (import "env" "Mva" (func $internal4677)) (import "env" "Nva" (func $internal4678)) (import "env" "Ova" (func $internal4679)) (import "env" "Pva" (func $internal4680)) (import "env" "Qva" (func $internal4681)) (import "env" "Rva" (func $internal4682)) (import "env" "Sva" (func $internal4683)) (import "env" "Tva" (func $internal4684)) (import "env" "Uva" (func $internal4685)) (import "env" "Vva" (func $internal4686)) (import "env" "Wva" (func $internal4687)) (import "env" "Xva" (func $internal4688)) (import "env" "Yva" (func $internal4689)) (import "env" "Zva" (func $internal4690)) (import "env" "_va" (func $internal4691)) (import "env" "$va" (func $internal4692)) (import "env" "awa" (func $internal4693)) (import "env" "bwa" (func $internal4694)) (import "env" "cwa" (func $internal4695)) (import "env" "dwa" (func $internal4696)) (import "env" "ewa" (func $internal4697)) (import "env" "fwa" (func $internal4698)) (import "env" "gwa" (func $internal4699)) (import "env" "hwa" (func $internal4700)) (import "env" "iwa" (func $internal4701)) (import "env" "jwa" (func $internal4702)) (import "env" "kwa" (func $internal4703)) (import "env" "lwa" (func $internal4704)) (import "env" "mwa" (func $internal4705)) (import "env" "nwa" (func $internal4706)) (import "env" "owa" (func $internal4707)) (import "env" "pwa" (func $internal4708)) (import "env" "qwa" (func $internal4709)) (import "env" "rwa" (func $internal4710)) (import "env" "swa" (func $internal4711)) (import "env" "twa" (func $internal4712)) (import "env" "uwa" (func $internal4713)) (import "env" "vwa" (func $internal4714)) (import "env" "wwa" (func $internal4715)) (import "env" "xwa" (func $internal4716)) (import "env" "ywa" (func $internal4717)) (import "env" "zwa" (func $internal4718)) (import "env" "Awa" (func $internal4719)) (import "env" "Bwa" (func $internal4720)) (import "env" "Cwa" (func $internal4721)) (import "env" "Dwa" (func $internal4722)) (import "env" "Ewa" (func $internal4723)) (import "env" "Fwa" (func $internal4724)) (import "env" "Gwa" (func $internal4725)) (import "env" "Hwa" (func $internal4726)) (import "env" "Iwa" (func $internal4727)) (import "env" "Jwa" (func $internal4728)) (import "env" "Kwa" (func $internal4729)) (import "env" "Lwa" (func $internal4730)) (import "env" "Mwa" (func $internal4731)) (import "env" "Nwa" (func $internal4732)) (import "env" "Owa" (func $internal4733)) (import "env" "Pwa" (func $internal4734)) (import "env" "Qwa" (func $internal4735)) (import "env" "Rwa" (func $internal4736)) (import "env" "Swa" (func $internal4737)) (import "env" "Twa" (func $internal4738)) (import "env" "Uwa" (func $internal4739)) (import "env" "Vwa" (func $internal4740)) (import "env" "Wwa" (func $internal4741)) (import "env" "Xwa" (func $internal4742)) (import "env" "Ywa" (func $internal4743)) (import "env" "Zwa" (func $internal4744)) (import "env" "_wa" (func $internal4745)) (import "env" "$wa" (func $internal4746)) (import "env" "axa" (func $internal4747)) (import "env" "bxa" (func $internal4748)) (import "env" "cxa" (func $internal4749)) (import "env" "dxa" (func $internal4750)) (import "env" "exa" (func $internal4751)) (import "env" "fxa" (func $internal4752)) (import "env" "gxa" (func $internal4753)) (import "env" "hxa" (func $internal4754)) (import "env" "ixa" (func $internal4755)) (import "env" "jxa" (func $internal4756)) (import "env" "kxa" (func $internal4757)) (import "env" "lxa" (func $internal4758)) (import "env" "mxa" (func $internal4759)) (import "env" "nxa" (func $internal4760)) (import "env" "oxa" (func $internal4761)) (import "env" "pxa" (func $internal4762)) (import "env" "qxa" (func $internal4763)) (import "env" "rxa" (func $internal4764)) (import "env" "sxa" (func $internal4765)) (import "env" "txa" (func $internal4766)) (import "env" "uxa" (func $internal4767)) (import "env" "vxa" (func $internal4768)) (import "env" "wxa" (func $internal4769)) (import "env" "xxa" (func $internal4770)) (import "env" "yxa" (func $internal4771)) (import "env" "zxa" (func $internal4772)) (import "env" "Axa" (func $internal4773)) (import "env" "Bxa" (func $internal4774)) (import "env" "Cxa" (func $internal4775)) (import "env" "Dxa" (func $internal4776)) (import "env" "Exa" (func $internal4777)) (import "env" "Fxa" (func $internal4778)) (import "env" "Gxa" (func $internal4779)) (import "env" "Hxa" (func $internal4780)) (import "env" "Ixa" (func $internal4781)) (import "env" "Jxa" (func $internal4782)) (import "env" "Kxa" (func $internal4783)) (import "env" "Lxa" (func $internal4784)) (import "env" "Mxa" (func $internal4785)) (import "env" "Nxa" (func $internal4786)) (import "env" "Oxa" (func $internal4787)) (import "env" "Pxa" (func $internal4788)) (import "env" "Qxa" (func $internal4789)) (import "env" "Rxa" (func $internal4790)) (import "env" "Sxa" (func $internal4791)) (import "env" "Txa" (func $internal4792)) (import "env" "Uxa" (func $internal4793)) (import "env" "Vxa" (func $internal4794)) (import "env" "Wxa" (func $internal4795)) (import "env" "Xxa" (func $internal4796)) (import "env" "Yxa" (func $internal4797)) (import "env" "Zxa" (func $internal4798)) (import "env" "_xa" (func $internal4799)) (import "env" "$xa" (func $internal4800)) (import "env" "aya" (func $internal4801)) (import "env" "bya" (func $internal4802)) (import "env" "cya" (func $internal4803)) (import "env" "dya" (func $internal4804)) (import "env" "eya" (func $internal4805)) (import "env" "fya" (func $internal4806)) (import "env" "gya" (func $internal4807)) (import "env" "hya" (func $internal4808)) (import "env" "iya" (func $internal4809)) (import "env" "jya" (func $internal4810)) (import "env" "kya" (func $internal4811)) (import "env" "lya" (func $internal4812)) (import "env" "mya" (func $internal4813)) (import "env" "nya" (func $internal4814)) (import "env" "oya" (func $internal4815)) (import "env" "pya" (func $internal4816)) (import "env" "qya" (func $internal4817)) (import "env" "rya" (func $internal4818)) (import "env" "sya" (func $internal4819)) (import "env" "tya" (func $internal4820)) (import "env" "uya" (func $internal4821)) (import "env" "vya" (func $internal4822)) (import "env" "wya" (func $internal4823)) (import "env" "xya" (func $internal4824)) (import "env" "yya" (func $internal4825)) (import "env" "zya" (func $internal4826)) (import "env" "Aya" (func $internal4827)) (import "env" "Bya" (func $internal4828)) (import "env" "Cya" (func $internal4829)) (import "env" "Dya" (func $internal4830)) (import "env" "Eya" (func $internal4831)) (import "env" "Fya" (func $internal4832)) (import "env" "Gya" (func $internal4833)) (import "env" "Hya" (func $internal4834)) (import "env" "Iya" (func $internal4835)) (import "env" "Jya" (func $internal4836)) (import "env" "Kya" (func $internal4837)) (import "env" "Lya" (func $internal4838)) (import "env" "Mya" (func $internal4839)) (import "env" "Nya" (func $internal4840)) (import "env" "Oya" (func $internal4841)) (import "env" "Pya" (func $internal4842)) (import "env" "Qya" (func $internal4843)) (import "env" "Rya" (func $internal4844)) (import "env" "Sya" (func $internal4845)) (import "env" "Tya" (func $internal4846)) (import "env" "Uya" (func $internal4847)) (import "env" "Vya" (func $internal4848)) (import "env" "Wya" (func $internal4849)) (import "env" "Xya" (func $internal4850)) (import "env" "Yya" (func $internal4851)) (import "env" "Zya" (func $internal4852)) (import "env" "_ya" (func $internal4853)) (import "env" "$ya" (func $internal4854)) (import "env" "aza" (func $internal4855)) (import "env" "bza" (func $internal4856)) (import "env" "cza" (func $internal4857)) (import "env" "dza" (func $internal4858)) (import "env" "eza" (func $internal4859)) (import "env" "fza" (func $internal4860)) (import "env" "gza" (func $internal4861)) (import "env" "hza" (func $internal4862)) (import "env" "iza" (func $internal4863)) (import "env" "jza" (func $internal4864)) (import "env" "kza" (func $internal4865)) (import "env" "lza" (func $internal4866)) (import "env" "mza" (func $internal4867)) (import "env" "nza" (func $internal4868)) (import "env" "oza" (func $internal4869)) (import "env" "pza" (func $internal4870)) (import "env" "qza" (func $internal4871)) (import "env" "rza" (func $internal4872)) (import "env" "sza" (func $internal4873)) (import "env" "tza" (func $internal4874)) (import "env" "uza" (func $internal4875)) (import "env" "vza" (func $internal4876)) (import "env" "wza" (func $internal4877)) (import "env" "xza" (func $internal4878)) (import "env" "yza" (func $internal4879)) (import "env" "zza" (func $internal4880)) (import "env" "Aza" (func $internal4881)) (import "env" "Bza" (func $internal4882)) (import "env" "Cza" (func $internal4883)) (import "env" "Dza" (func $internal4884)) (import "env" "Eza" (func $internal4885)) (import "env" "Fza" (func $internal4886)) (import "env" "Gza" (func $internal4887)) (import "env" "Hza" (func $internal4888)) (import "env" "Iza" (func $internal4889)) (import "env" "Jza" (func $internal4890)) (import "env" "Kza" (func $internal4891)) (import "env" "Lza" (func $internal4892)) (import "env" "Mza" (func $internal4893)) (import "env" "Nza" (func $internal4894)) (import "env" "Oza" (func $internal4895)) (import "env" "Pza" (func $internal4896)) (import "env" "Qza" (func $internal4897)) (import "env" "Rza" (func $internal4898)) (import "env" "Sza" (func $internal4899)) (import "env" "Tza" (func $internal4900)) (import "env" "Uza" (func $internal4901)) (import "env" "Vza" (func $internal4902)) (import "env" "Wza" (func $internal4903)) (import "env" "Xza" (func $internal4904)) (import "env" "Yza" (func $internal4905)) (import "env" "Zza" (func $internal4906)) (import "env" "_za" (func $internal4907)) (import "env" "$za" (func $internal4908)) (import "env" "aAa" (func $internal4909)) (import "env" "bAa" (func $internal4910)) (import "env" "cAa" (func $internal4911)) (import "env" "dAa" (func $internal4912)) (import "env" "eAa" (func $internal4913)) (import "env" "fAa" (func $internal4914)) (import "env" "gAa" (func $internal4915)) (import "env" "hAa" (func $internal4916)) (import "env" "iAa" (func $internal4917)) (import "env" "jAa" (func $internal4918)) (import "env" "kAa" (func $internal4919)) (import "env" "lAa" (func $internal4920)) (import "env" "mAa" (func $internal4921)) (import "env" "nAa" (func $internal4922)) (import "env" "oAa" (func $internal4923)) (import "env" "pAa" (func $internal4924)) (import "env" "qAa" (func $internal4925)) (import "env" "rAa" (func $internal4926)) (import "env" "sAa" (func $internal4927)) (import "env" "tAa" (func $internal4928)) (import "env" "uAa" (func $internal4929)) (import "env" "vAa" (func $internal4930)) (import "env" "wAa" (func $internal4931)) (import "env" "xAa" (func $internal4932)) (import "env" "yAa" (func $internal4933)) (import "env" "zAa" (func $internal4934)) (import "env" "AAa" (func $internal4935)) (import "env" "BAa" (func $internal4936)) (import "env" "CAa" (func $internal4937)) (import "env" "DAa" (func $internal4938)) (import "env" "EAa" (func $internal4939)) (import "env" "FAa" (func $internal4940)) (import "env" "GAa" (func $internal4941)) (import "env" "HAa" (func $internal4942)) (import "env" "IAa" (func $internal4943)) (import "env" "JAa" (func $internal4944)) (import "env" "KAa" (func $internal4945)) (import "env" "LAa" (func $internal4946)) (import "env" "MAa" (func $internal4947)) (import "env" "NAa" (func $internal4948)) (import "env" "OAa" (func $internal4949)) (import "env" "PAa" (func $internal4950)) (import "env" "QAa" (func $internal4951)) (import "env" "RAa" (func $internal4952)) (import "env" "SAa" (func $internal4953)) (import "env" "TAa" (func $internal4954)) (import "env" "UAa" (func $internal4955)) (import "env" "VAa" (func $internal4956)) (import "env" "WAa" (func $internal4957)) (import "env" "XAa" (func $internal4958)) (import "env" "YAa" (func $internal4959)) (import "env" "ZAa" (func $internal4960)) (import "env" "_Aa" (func $internal4961)) (import "env" "$Aa" (func $internal4962)) (import "env" "aBa" (func $internal4963)) (import "env" "bBa" (func $internal4964)) (import "env" "cBa" (func $internal4965)) (import "env" "dBa" (func $internal4966)) (import "env" "eBa" (func $internal4967)) (import "env" "fBa" (func $internal4968)) (import "env" "gBa" (func $internal4969)) (import "env" "hBa" (func $internal4970)) (import "env" "iBa" (func $internal4971)) (import "env" "jBa" (func $internal4972)) (import "env" "kBa" (func $internal4973)) (import "env" "lBa" (func $internal4974)) (import "env" "mBa" (func $internal4975)) (import "env" "nBa" (func $internal4976)) (import "env" "oBa" (func $internal4977)) (import "env" "pBa" (func $internal4978)) (import "env" "qBa" (func $internal4979)) (import "env" "rBa" (func $internal4980)) (import "env" "sBa" (func $internal4981)) (import "env" "tBa" (func $internal4982)) (import "env" "uBa" (func $internal4983)) (import "env" "vBa" (func $internal4984)) (import "env" "wBa" (func $internal4985)) (import "env" "xBa" (func $internal4986)) (import "env" "yBa" (func $internal4987)) (import "env" "zBa" (func $internal4988)) (import "env" "ABa" (func $internal4989)) (import "env" "BBa" (func $internal4990)) (import "env" "CBa" (func $internal4991)) (import "env" "DBa" (func $internal4992)) (import "env" "EBa" (func $internal4993)) (import "env" "FBa" (func $internal4994)) (import "env" "GBa" (func $internal4995)) (import "env" "HBa" (func $internal4996)) (import "env" "IBa" (func $internal4997)) (import "env" "JBa" (func $internal4998)) (import "env" "KBa" (func $internal4999)) (import "other" "anything" (func $internalInfinity)) (import "env" "LBa" (tag $tagname1 (param i32))) (tag $tag1 (param i32 i32)) (export "foo1" (func $foo1)) (export "foo2" (func $foo2)) (export "tag1" (tag $tag1)) (func $foo1 (nop) ) (func $foo2 (nop) ) ) binaryen-version_108/test/passes/minify-imports_all-features.wast000066400000000000000000010017401423707623100255570ustar00rootroot00000000000000(module (import "env" "longname1" (func $internal1)) (import "env" "longname2" (func $internal2)) (import "env" "global" (global i32)) (import "env" "longname3" (func $internal3)) (import "env" "longname4" (func $internal4)) (import "env" "longname5" (func $internal5)) (import "env" "longname6" (func $internal6)) (import "env" "longname7" (func $internal7)) (import "env" "longname8" (func $internal8)) (import "env" "longname9" (func $internal9)) (import "env" "longname10" (func $internal10)) (import "env" "longname11" (func $internal11)) (import "env" "longname12" (func $internal12)) (import "env" "longname13" (func $internal13)) (import "env" "longname14" (func $internal14)) (import "env" "longname15" (func $internal15)) (import "env" "longname16" (func $internal16)) (import "env" "longname17" (func $internal17)) (import "env" "longname18" (func $internal18)) (import "env" "longname19" (func $internal19)) (import "env" "longname20" (func $internal20)) (import "env" "longname21" (func $internal21)) (import "env" "longname22" (func $internal22)) (import "env" "longname23" (func $internal23)) (import "env" "longname24" (func $internal24)) (import "env" "longname25" (func $internal25)) (import "env" "longname26" (func $internal26)) (import "env" "longname27" (func $internal27)) (import "env" "longname28" (func $internal28)) (import "env" "longname29" (func $internal29)) (import "env" "longname30" (func $internal30)) (import "env" "longname31" (func $internal31)) (import "env" "longname32" (func $internal32)) (import "env" "longname33" (func $internal33)) (import "env" "longname34" (func $internal34)) (import "env" "longname35" (func $internal35)) (import "env" "longname36" (func $internal36)) (import "env" "longname37" (func $internal37)) (import "env" "longname38" (func $internal38)) (import "env" "longname39" (func $internal39)) (import "env" "longname40" (func $internal40)) (import "env" "longname41" (func $internal41)) (import "env" "longname42" (func $internal42)) (import "env" "longname43" (func $internal43)) (import "env" "longname44" (func $internal44)) (import "env" "longname45" (func $internal45)) (import "env" "longname46" (func $internal46)) (import "env" "longname47" (func $internal47)) (import "env" "longname48" (func $internal48)) (import "env" "longname49" (func $internal49)) (import "env" "longname50" (func $internal50)) (import "env" "longname51" (func $internal51)) (import "env" "longname52" (func $internal52)) (import "env" "longname53" (func $internal53)) (import "env" "longname54" (func $internal54)) (import "env" "longname55" (func $internal55)) (import "env" "longname56" (func $internal56)) (import "env" "longname57" (func $internal57)) (import "env" "longname58" (func $internal58)) (import "env" "longname59" (func $internal59)) (import "env" "longname60" (func $internal60)) (import "env" "longname61" (func $internal61)) (import "env" "longname62" (func $internal62)) (import "env" "longname63" (func $internal63)) (import "env" "longname64" (func $internal64)) (import "env" "longname65" (func $internal65)) (import "env" "longname66" (func $internal66)) (import "env" "longname67" (func $internal67)) (import "env" "longname68" (func $internal68)) (import "env" "longname69" (func $internal69)) (import "env" "longname70" (func $internal70)) (import "env" "longname71" (func $internal71)) (import "env" "longname72" (func $internal72)) (import "env" "longname73" (func $internal73)) (import "env" "longname74" (func $internal74)) (import "env" "longname75" (func $internal75)) (import "env" "longname76" (func $internal76)) (import "env" "longname77" (func $internal77)) (import "env" "longname78" (func $internal78)) (import "env" "longname79" (func $internal79)) (import "env" "longname80" (func $internal80)) (import "env" "longname81" (func $internal81)) (import "env" "longname82" (func $internal82)) (import "env" "longname83" (func $internal83)) (import "env" "longname84" (func $internal84)) (import "env" "longname85" (func $internal85)) (import "env" "longname86" (func $internal86)) (import "env" "longname87" (func $internal87)) (import "env" "longname88" (func $internal88)) (import "env" "longname89" (func $internal89)) (import "env" "longname90" (func $internal90)) (import "env" "longname91" (func $internal91)) (import "env" "longname92" (func $internal92)) (import "env" "longname93" (func $internal93)) (import "env" "longname94" (func $internal94)) (import "env" "longname95" (func $internal95)) (import "env" "longname96" (func $internal96)) (import "env" "longname97" (func $internal97)) (import "env" "longname98" (func $internal98)) (import "env" "longname99" (func $internal99)) (import "env" "longname100" (func $internal100)) (import "env" "longname101" (func $internal101)) (import "env" "longname102" (func $internal102)) (import "env" "longname103" (func $internal103)) (import "env" "longname104" (func $internal104)) (import "env" "longname105" (func $internal105)) (import "env" "longname106" (func $internal106)) (import "env" "longname107" (func $internal107)) (import "env" "longname108" (func $internal108)) (import "env" "longname109" (func $internal109)) (import "env" "longname110" (func $internal110)) (import "env" "longname111" (func $internal111)) (import "env" "longname112" (func $internal112)) (import "env" "longname113" (func $internal113)) (import "env" "longname114" (func $internal114)) (import "env" "longname115" (func $internal115)) (import "env" "longname116" (func $internal116)) (import "env" "longname117" (func $internal117)) (import "env" "longname118" (func $internal118)) (import "env" "longname119" (func $internal119)) (import "env" "longname120" (func $internal120)) (import "env" "longname121" (func $internal121)) (import "env" "longname122" (func $internal122)) (import "env" "longname123" (func $internal123)) (import "env" "longname124" (func $internal124)) (import "env" "longname125" (func $internal125)) (import "env" "longname126" (func $internal126)) (import "env" "longname127" (func $internal127)) (import "env" "longname128" (func $internal128)) (import "env" "longname129" (func $internal129)) (import "env" "longname130" (func $internal130)) (import "env" "longname131" (func $internal131)) (import "env" "longname132" (func $internal132)) (import "env" "longname133" (func $internal133)) (import "env" "longname134" (func $internal134)) (import "env" "longname135" (func $internal135)) (import "env" "longname136" (func $internal136)) (import "env" "longname137" (func $internal137)) (import "env" "longname138" (func $internal138)) (import "env" "longname139" (func $internal139)) (import "env" "longname140" (func $internal140)) (import "env" "longname141" (func $internal141)) (import "env" "longname142" (func $internal142)) (import "env" "longname143" (func $internal143)) (import "env" "longname144" (func $internal144)) (import "env" "longname145" (func $internal145)) (import "env" "longname146" (func $internal146)) (import "env" "longname147" (func $internal147)) (import "env" "longname148" (func $internal148)) (import "env" "longname149" (func $internal149)) (import "env" "longname150" (func $internal150)) (import "env" "longname151" (func $internal151)) (import "env" "longname152" (func $internal152)) (import "env" "longname153" (func $internal153)) (import "env" "longname154" (func $internal154)) (import "env" "longname155" (func $internal155)) (import "env" "longname156" (func $internal156)) (import "env" "longname157" (func $internal157)) (import "env" "longname158" (func $internal158)) (import "env" "longname159" (func $internal159)) (import "env" "longname160" (func $internal160)) (import "env" "longname161" (func $internal161)) (import "env" "longname162" (func $internal162)) (import "env" "longname163" (func $internal163)) (import "env" "longname164" (func $internal164)) (import "env" "longname165" (func $internal165)) (import "env" "longname166" (func $internal166)) (import "env" "longname167" (func $internal167)) (import "env" "longname168" (func $internal168)) (import "env" "longname169" (func $internal169)) (import "env" "longname170" (func $internal170)) (import "env" "longname171" (func $internal171)) (import "env" "longname172" (func $internal172)) (import "env" "longname173" (func $internal173)) (import "env" "longname174" (func $internal174)) (import "env" "longname175" (func $internal175)) (import "env" "longname176" (func $internal176)) (import "env" "longname177" (func $internal177)) (import "env" "longname178" (func $internal178)) (import "env" "longname179" (func $internal179)) (import "env" "longname180" (func $internal180)) (import "env" "longname181" (func $internal181)) (import "env" "longname182" (func $internal182)) (import "env" "longname183" (func $internal183)) (import "env" "longname184" (func $internal184)) (import "env" "longname185" (func $internal185)) (import "env" "longname186" (func $internal186)) (import "env" "longname187" (func $internal187)) (import "env" "longname188" (func $internal188)) (import "env" "longname189" (func $internal189)) (import "env" "longname190" (func $internal190)) (import "env" "longname191" (func $internal191)) (import "env" "longname192" (func $internal192)) (import "env" "longname193" (func $internal193)) (import "env" "longname194" (func $internal194)) (import "env" "longname195" (func $internal195)) (import "env" "longname196" (func $internal196)) (import "env" "longname197" (func $internal197)) (import "env" "longname198" (func $internal198)) (import "env" "longname199" (func $internal199)) (import "env" "longname200" (func $internal200)) (import "env" "longname201" (func $internal201)) (import "env" "longname202" (func $internal202)) (import "env" "longname203" (func $internal203)) (import "env" "longname204" (func $internal204)) (import "env" "longname205" (func $internal205)) (import "env" "longname206" (func $internal206)) (import "env" "longname207" (func $internal207)) (import "env" "longname208" (func $internal208)) (import "env" "longname209" (func $internal209)) (import "env" "longname210" (func $internal210)) (import "env" "longname211" (func $internal211)) (import "env" "longname212" (func $internal212)) (import "env" "longname213" (func $internal213)) (import "env" "longname214" (func $internal214)) (import "env" "longname215" (func $internal215)) (import "env" "longname216" (func $internal216)) (import "env" "longname217" (func $internal217)) (import "env" "longname218" (func $internal218)) (import "env" "longname219" (func $internal219)) (import "env" "longname220" (func $internal220)) (import "env" "longname221" (func $internal221)) (import "env" "longname222" (func $internal222)) (import "env" "longname223" (func $internal223)) (import "env" "longname224" (func $internal224)) (import "env" "longname225" (func $internal225)) (import "env" "longname226" (func $internal226)) (import "env" "longname227" (func $internal227)) (import "env" "longname228" (func $internal228)) (import "env" "longname229" (func $internal229)) (import "env" "longname230" (func $internal230)) (import "env" "longname231" (func $internal231)) (import "env" "longname232" (func $internal232)) (import "env" "longname233" (func $internal233)) (import "env" "longname234" (func $internal234)) (import "env" "longname235" (func $internal235)) (import "env" "longname236" (func $internal236)) (import "env" "longname237" (func $internal237)) (import "env" "longname238" (func $internal238)) (import "env" "longname239" (func $internal239)) (import "env" "longname240" (func $internal240)) (import "env" "longname241" (func $internal241)) (import "env" "longname242" (func $internal242)) (import "env" "longname243" (func $internal243)) (import "env" "longname244" (func $internal244)) (import "env" "longname245" (func $internal245)) (import "env" "longname246" (func $internal246)) (import "env" "longname247" (func $internal247)) (import "env" "longname248" (func $internal248)) (import "env" "longname249" (func $internal249)) (import "env" "longname250" (func $internal250)) (import "env" "longname251" (func $internal251)) (import "env" "longname252" (func $internal252)) (import "env" "longname253" (func $internal253)) (import "env" "longname254" (func $internal254)) (import "env" "longname255" (func $internal255)) (import "env" "longname256" (func $internal256)) (import "env" "longname257" (func $internal257)) (import "env" "longname258" (func $internal258)) (import "env" "longname259" (func $internal259)) (import "env" "longname260" (func $internal260)) (import "env" "longname261" (func $internal261)) (import "env" "longname262" (func $internal262)) (import "env" "longname263" (func $internal263)) (import "env" "longname264" (func $internal264)) (import "env" "longname265" (func $internal265)) (import "env" "longname266" (func $internal266)) (import "env" "longname267" (func $internal267)) (import "env" "longname268" (func $internal268)) (import "env" "longname269" (func $internal269)) (import "env" "longname270" (func $internal270)) (import "env" "longname271" (func $internal271)) (import "env" "longname272" (func $internal272)) (import "env" "longname273" (func $internal273)) (import "env" "longname274" (func $internal274)) (import "env" "longname275" (func $internal275)) (import "env" "longname276" (func $internal276)) (import "env" "longname277" (func $internal277)) (import "env" "longname278" (func $internal278)) (import "env" "longname279" (func $internal279)) (import "env" "longname280" (func $internal280)) (import "env" "longname281" (func $internal281)) (import "env" "longname282" (func $internal282)) (import "env" "longname283" (func $internal283)) (import "env" "longname284" (func $internal284)) (import "env" "longname285" (func $internal285)) (import "env" "longname286" (func $internal286)) (import "env" "longname287" (func $internal287)) (import "env" "longname288" (func $internal288)) (import "env" "longname289" (func $internal289)) (import "env" "longname290" (func $internal290)) (import "env" "longname291" (func $internal291)) (import "env" "longname292" (func $internal292)) (import "env" "longname293" (func $internal293)) (import "env" "longname294" (func $internal294)) (import "env" "longname295" (func $internal295)) (import "env" "longname296" (func $internal296)) (import "env" "longname297" (func $internal297)) (import "env" "longname298" (func $internal298)) (import "env" "longname299" (func $internal299)) (import "env" "longname300" (func $internal300)) (import "env" "longname301" (func $internal301)) (import "env" "longname302" (func $internal302)) (import "env" "longname303" (func $internal303)) (import "env" "longname304" (func $internal304)) (import "env" "longname305" (func $internal305)) (import "env" "longname306" (func $internal306)) (import "env" "longname307" (func $internal307)) (import "env" "longname308" (func $internal308)) (import "env" "longname309" (func $internal309)) (import "env" "longname310" (func $internal310)) (import "env" "longname311" (func $internal311)) (import "env" "longname312" (func $internal312)) (import "env" "longname313" (func $internal313)) (import "env" "longname314" (func $internal314)) (import "env" "longname315" (func $internal315)) (import "env" "longname316" (func $internal316)) (import "env" "longname317" (func $internal317)) (import "env" "longname318" (func $internal318)) (import "env" "longname319" (func $internal319)) (import "env" "longname320" (func $internal320)) (import "env" "longname321" (func $internal321)) (import "env" "longname322" (func $internal322)) (import "env" "longname323" (func $internal323)) (import "env" "longname324" (func $internal324)) (import "env" "longname325" (func $internal325)) (import "env" "longname326" (func $internal326)) (import "env" "longname327" (func $internal327)) (import "env" "longname328" (func $internal328)) (import "env" "longname329" (func $internal329)) (import "env" "longname330" (func $internal330)) (import "env" "longname331" (func $internal331)) (import "env" "longname332" (func $internal332)) (import "env" "longname333" (func $internal333)) (import "env" "longname334" (func $internal334)) (import "env" "longname335" (func $internal335)) (import "env" "longname336" (func $internal336)) (import "env" "longname337" (func $internal337)) (import "env" "longname338" (func $internal338)) (import "env" "longname339" (func $internal339)) (import "env" "longname340" (func $internal340)) (import "env" "longname341" (func $internal341)) (import "env" "longname342" (func $internal342)) (import "env" "longname343" (func $internal343)) (import "env" "longname344" (func $internal344)) (import "env" "longname345" (func $internal345)) (import "env" "longname346" (func $internal346)) (import "env" "longname347" (func $internal347)) (import "env" "longname348" (func $internal348)) (import "env" "longname349" (func $internal349)) (import "env" "longname350" (func $internal350)) (import "env" "longname351" (func $internal351)) (import "env" "longname352" (func $internal352)) (import "env" "longname353" (func $internal353)) (import "env" "longname354" (func $internal354)) (import "env" "longname355" (func $internal355)) (import "env" "longname356" (func $internal356)) (import "env" "longname357" (func $internal357)) (import "env" "longname358" (func $internal358)) (import "env" "longname359" (func $internal359)) (import "env" "longname360" (func $internal360)) (import "env" "longname361" (func $internal361)) (import "env" "longname362" (func $internal362)) (import "env" "longname363" (func $internal363)) (import "env" "longname364" (func $internal364)) (import "env" "longname365" (func $internal365)) (import "env" "longname366" (func $internal366)) (import "env" "longname367" (func $internal367)) (import "env" "longname368" (func $internal368)) (import "env" "longname369" (func $internal369)) (import "env" "longname370" (func $internal370)) (import "env" "longname371" (func $internal371)) (import "env" "longname372" (func $internal372)) (import "env" "longname373" (func $internal373)) (import "env" "longname374" (func $internal374)) (import "env" "longname375" (func $internal375)) (import "env" "longname376" (func $internal376)) (import "env" "longname377" (func $internal377)) (import "env" "longname378" (func $internal378)) (import "env" "longname379" (func $internal379)) (import "env" "longname380" (func $internal380)) (import "env" "longname381" (func $internal381)) (import "env" "longname382" (func $internal382)) (import "env" "longname383" (func $internal383)) (import "env" "longname384" (func $internal384)) (import "env" "longname385" (func $internal385)) (import "env" "longname386" (func $internal386)) (import "env" "longname387" (func $internal387)) (import "env" "longname388" (func $internal388)) (import "env" "longname389" (func $internal389)) (import "env" "longname390" (func $internal390)) (import "env" "longname391" (func $internal391)) (import "env" "longname392" (func $internal392)) (import "env" "longname393" (func $internal393)) (import "env" "longname394" (func $internal394)) (import "env" "longname395" (func $internal395)) (import "env" "longname396" (func $internal396)) (import "env" "longname397" (func $internal397)) (import "env" "longname398" (func $internal398)) (import "env" "longname399" (func $internal399)) (import "env" "longname400" (func $internal400)) (import "env" "longname401" (func $internal401)) (import "env" "longname402" (func $internal402)) (import "env" "longname403" (func $internal403)) (import "env" "longname404" (func $internal404)) (import "env" "longname405" (func $internal405)) (import "env" "longname406" (func $internal406)) (import "env" "longname407" (func $internal407)) (import "env" "longname408" (func $internal408)) (import "env" "longname409" (func $internal409)) (import "env" "longname410" (func $internal410)) (import "env" "longname411" (func $internal411)) (import "env" "longname412" (func $internal412)) (import "env" "longname413" (func $internal413)) (import "env" "longname414" (func $internal414)) (import "env" "longname415" (func $internal415)) (import "env" "longname416" (func $internal416)) (import "env" "longname417" (func $internal417)) (import "env" "longname418" (func $internal418)) (import "env" "longname419" (func $internal419)) (import "env" "longname420" (func $internal420)) (import "env" "longname421" (func $internal421)) (import "env" "longname422" (func $internal422)) (import "env" "longname423" (func $internal423)) (import "env" "longname424" (func $internal424)) (import "env" "longname425" (func $internal425)) (import "env" "longname426" (func $internal426)) (import "env" "longname427" (func $internal427)) (import "env" "longname428" (func $internal428)) (import "env" "longname429" (func $internal429)) (import "env" "longname430" (func $internal430)) (import "env" "longname431" (func $internal431)) (import "env" "longname432" (func $internal432)) (import "env" "longname433" (func $internal433)) (import "env" "longname434" (func $internal434)) (import "env" "longname435" (func $internal435)) (import "env" "longname436" (func $internal436)) (import "env" "longname437" (func $internal437)) (import "env" "longname438" (func $internal438)) (import "env" "longname439" (func $internal439)) (import "env" "longname440" (func $internal440)) (import "env" "longname441" (func $internal441)) (import "env" "longname442" (func $internal442)) (import "env" "longname443" (func $internal443)) (import "env" "longname444" (func $internal444)) (import "env" "longname445" (func $internal445)) (import "env" "longname446" (func $internal446)) (import "env" "longname447" (func $internal447)) (import "env" "longname448" (func $internal448)) (import "env" "longname449" (func $internal449)) (import "env" "longname450" (func $internal450)) (import "env" "longname451" (func $internal451)) (import "env" "longname452" (func $internal452)) (import "env" "longname453" (func $internal453)) (import "env" "longname454" (func $internal454)) (import "env" "longname455" (func $internal455)) (import "env" "longname456" (func $internal456)) (import "env" "longname457" (func $internal457)) (import "env" "longname458" (func $internal458)) (import "env" "longname459" (func $internal459)) (import "env" "longname460" (func $internal460)) (import "env" "longname461" (func $internal461)) (import "env" "longname462" (func $internal462)) (import "env" "longname463" (func $internal463)) (import "env" "longname464" (func $internal464)) (import "env" "longname465" (func $internal465)) (import "env" "longname466" (func $internal466)) (import "env" "longname467" (func $internal467)) (import "env" "longname468" (func $internal468)) (import "env" "longname469" (func $internal469)) (import "env" "longname470" (func $internal470)) (import "env" "longname471" (func $internal471)) (import "env" "longname472" (func $internal472)) (import "env" "longname473" (func $internal473)) (import "env" "longname474" (func $internal474)) (import "env" "longname475" (func $internal475)) (import "env" "longname476" (func $internal476)) (import "env" "longname477" (func $internal477)) (import "env" "longname478" (func $internal478)) (import "env" "longname479" (func $internal479)) (import "env" "longname480" (func $internal480)) (import "env" "longname481" (func $internal481)) (import "env" "longname482" (func $internal482)) (import "env" "longname483" (func $internal483)) (import "env" "longname484" (func $internal484)) (import "env" "longname485" (func $internal485)) (import "env" "longname486" (func $internal486)) (import "env" "longname487" (func $internal487)) (import "env" "longname488" (func $internal488)) (import "env" "longname489" (func $internal489)) (import "env" "longname490" (func $internal490)) (import "env" "longname491" (func $internal491)) (import "env" "longname492" (func $internal492)) (import "env" "longname493" (func $internal493)) (import "env" "longname494" (func $internal494)) (import "env" "longname495" (func $internal495)) (import "env" "longname496" (func $internal496)) (import "env" "longname497" (func $internal497)) (import "env" "longname498" (func $internal498)) (import "env" "longname499" (func $internal499)) (import "env" "longname500" (func $internal500)) (import "env" "longname501" (func $internal501)) (import "env" "longname502" (func $internal502)) (import "env" "longname503" (func $internal503)) (import "env" "longname504" (func $internal504)) (import "env" "longname505" (func $internal505)) (import "env" "longname506" (func $internal506)) (import "env" "longname507" (func $internal507)) (import "env" "longname508" (func $internal508)) (import "env" "longname509" (func $internal509)) (import "env" "longname510" (func $internal510)) (import "env" "longname511" (func $internal511)) (import "env" "longname512" (func $internal512)) (import "env" "longname513" (func $internal513)) (import "env" "longname514" (func $internal514)) (import "env" "longname515" (func $internal515)) (import "env" "longname516" (func $internal516)) (import "env" "longname517" (func $internal517)) (import "env" "longname518" (func $internal518)) (import "env" "longname519" (func $internal519)) (import "env" "longname520" (func $internal520)) (import "env" "longname521" (func $internal521)) (import "env" "longname522" (func $internal522)) (import "env" "longname523" (func $internal523)) (import "env" "longname524" (func $internal524)) (import "env" "longname525" (func $internal525)) (import "env" "longname526" (func $internal526)) (import "env" "longname527" (func $internal527)) (import "env" "longname528" (func $internal528)) (import "env" "longname529" (func $internal529)) (import "env" "longname530" (func $internal530)) (import "env" "longname531" (func $internal531)) (import "env" "longname532" (func $internal532)) (import "env" "longname533" (func $internal533)) (import "env" "longname534" (func $internal534)) (import "env" "longname535" (func $internal535)) (import "env" "longname536" (func $internal536)) (import "env" "longname537" (func $internal537)) (import "env" "longname538" (func $internal538)) (import "env" "longname539" (func $internal539)) (import "env" "longname540" (func $internal540)) (import "env" "longname541" (func $internal541)) (import "env" "longname542" (func $internal542)) (import "env" "longname543" (func $internal543)) (import "env" "longname544" (func $internal544)) (import "env" "longname545" (func $internal545)) (import "env" "longname546" (func $internal546)) (import "env" "longname547" (func $internal547)) (import "env" "longname548" (func $internal548)) (import "env" "longname549" (func $internal549)) (import "env" "longname550" (func $internal550)) (import "env" "longname551" (func $internal551)) (import "env" "longname552" (func $internal552)) (import "env" "longname553" (func $internal553)) (import "env" "longname554" (func $internal554)) (import "env" "longname555" (func $internal555)) (import "env" "longname556" (func $internal556)) (import "env" "longname557" (func $internal557)) (import "env" "longname558" (func $internal558)) (import "env" "longname559" (func $internal559)) (import "env" "longname560" (func $internal560)) (import "env" "longname561" (func $internal561)) (import "env" "longname562" (func $internal562)) (import "env" "longname563" (func $internal563)) (import "env" "longname564" (func $internal564)) (import "env" "longname565" (func $internal565)) (import "env" "longname566" (func $internal566)) (import "env" "longname567" (func $internal567)) (import "env" "longname568" (func $internal568)) (import "env" "longname569" (func $internal569)) (import "env" "longname570" (func $internal570)) (import "env" "longname571" (func $internal571)) (import "env" "longname572" (func $internal572)) (import "env" "longname573" (func $internal573)) (import "env" "longname574" (func $internal574)) (import "env" "longname575" (func $internal575)) (import "env" "longname576" (func $internal576)) (import "env" "longname577" (func $internal577)) (import "env" "longname578" (func $internal578)) (import "env" "longname579" (func $internal579)) (import "env" "longname580" (func $internal580)) (import "env" "longname581" (func $internal581)) (import "env" "longname582" (func $internal582)) (import "env" "longname583" (func $internal583)) (import "env" "longname584" (func $internal584)) (import "env" "longname585" (func $internal585)) (import "env" "longname586" (func $internal586)) (import "env" "longname587" (func $internal587)) (import "env" "longname588" (func $internal588)) (import "env" "longname589" (func $internal589)) (import "env" "longname590" (func $internal590)) (import "env" "longname591" (func $internal591)) (import "env" "longname592" (func $internal592)) (import "env" "longname593" (func $internal593)) (import "env" "longname594" (func $internal594)) (import "env" "longname595" (func $internal595)) (import "env" "longname596" (func $internal596)) (import "env" "longname597" (func $internal597)) (import "env" "longname598" (func $internal598)) (import "env" "longname599" (func $internal599)) (import "env" "longname600" (func $internal600)) (import "env" "longname601" (func $internal601)) (import "env" "longname602" (func $internal602)) (import "env" "longname603" (func $internal603)) (import "env" "longname604" (func $internal604)) (import "env" "longname605" (func $internal605)) (import "env" "longname606" (func $internal606)) (import "env" "longname607" (func $internal607)) (import "env" "longname608" (func $internal608)) (import "env" "longname609" (func $internal609)) (import "env" "longname610" (func $internal610)) (import "env" "longname611" (func $internal611)) (import "env" "longname612" (func $internal612)) (import "env" "longname613" (func $internal613)) (import "env" "longname614" (func $internal614)) (import "env" "longname615" (func $internal615)) (import "env" "longname616" (func $internal616)) (import "env" "longname617" (func $internal617)) (import "env" "longname618" (func $internal618)) (import "env" "longname619" (func $internal619)) (import "env" "longname620" (func $internal620)) (import "env" "longname621" (func $internal621)) (import "env" "longname622" (func $internal622)) (import "env" "longname623" (func $internal623)) (import "env" "longname624" (func $internal624)) (import "env" "longname625" (func $internal625)) (import "env" "longname626" (func $internal626)) (import "env" "longname627" (func $internal627)) (import "env" "longname628" (func $internal628)) (import "env" "longname629" (func $internal629)) (import "env" "longname630" (func $internal630)) (import "env" "longname631" (func $internal631)) (import "env" "longname632" (func $internal632)) (import "env" "longname633" (func $internal633)) (import "env" "longname634" (func $internal634)) (import "env" "longname635" (func $internal635)) (import "env" "longname636" (func $internal636)) (import "env" "longname637" (func $internal637)) (import "env" "longname638" (func $internal638)) (import "env" "longname639" (func $internal639)) (import "env" "longname640" (func $internal640)) (import "env" "longname641" (func $internal641)) (import "env" "longname642" (func $internal642)) (import "env" "longname643" (func $internal643)) (import "env" "longname644" (func $internal644)) (import "env" "longname645" (func $internal645)) (import "env" "longname646" (func $internal646)) (import "env" "longname647" (func $internal647)) (import "env" "longname648" (func $internal648)) (import "env" "longname649" (func $internal649)) (import "env" "longname650" (func $internal650)) (import "env" "longname651" (func $internal651)) (import "env" "longname652" (func $internal652)) (import "env" "longname653" (func $internal653)) (import "env" "longname654" (func $internal654)) (import "env" "longname655" (func $internal655)) (import "env" "longname656" (func $internal656)) (import "env" "longname657" (func $internal657)) (import "env" "longname658" (func $internal658)) (import "env" "longname659" (func $internal659)) (import "env" "longname660" (func $internal660)) (import "env" "longname661" (func $internal661)) (import "env" "longname662" (func $internal662)) (import "env" "longname663" (func $internal663)) (import "env" "longname664" (func $internal664)) (import "env" "longname665" (func $internal665)) (import "env" "longname666" (func $internal666)) (import "env" "longname667" (func $internal667)) (import "env" "longname668" (func $internal668)) (import "env" "longname669" (func $internal669)) (import "env" "longname670" (func $internal670)) (import "env" "longname671" (func $internal671)) (import "env" "longname672" (func $internal672)) (import "env" "longname673" (func $internal673)) (import "env" "longname674" (func $internal674)) (import "env" "longname675" (func $internal675)) (import "env" "longname676" (func $internal676)) (import "env" "longname677" (func $internal677)) (import "env" "longname678" (func $internal678)) (import "env" "longname679" (func $internal679)) (import "env" "longname680" (func $internal680)) (import "env" "longname681" (func $internal681)) (import "env" "longname682" (func $internal682)) (import "env" "longname683" (func $internal683)) (import "env" "longname684" (func $internal684)) (import "env" "longname685" (func $internal685)) (import "env" "longname686" (func $internal686)) (import "env" "longname687" (func $internal687)) (import "env" "longname688" (func $internal688)) (import "env" "longname689" (func $internal689)) (import "env" "longname690" (func $internal690)) (import "env" "longname691" (func $internal691)) (import "env" "longname692" (func $internal692)) (import "env" "longname693" (func $internal693)) (import "env" "longname694" (func $internal694)) (import "env" "longname695" (func $internal695)) (import "env" "longname696" (func $internal696)) (import "env" "longname697" (func $internal697)) (import "env" "longname698" (func $internal698)) (import "env" "longname699" (func $internal699)) (import "env" "longname700" (func $internal700)) (import "env" "longname701" (func $internal701)) (import "env" "longname702" (func $internal702)) (import "env" "longname703" (func $internal703)) (import "env" "longname704" (func $internal704)) (import "env" "longname705" (func $internal705)) (import "env" "longname706" (func $internal706)) (import "env" "longname707" (func $internal707)) (import "env" "longname708" (func $internal708)) (import "env" "longname709" (func $internal709)) (import "env" "longname710" (func $internal710)) (import "env" "longname711" (func $internal711)) (import "env" "longname712" (func $internal712)) (import "env" "longname713" (func $internal713)) (import "env" "longname714" (func $internal714)) (import "env" "longname715" (func $internal715)) (import "env" "longname716" (func $internal716)) (import "env" "longname717" (func $internal717)) (import "env" "longname718" (func $internal718)) (import "env" "longname719" (func $internal719)) (import "env" "longname720" (func $internal720)) (import "env" "longname721" (func $internal721)) (import "env" "longname722" (func $internal722)) (import "env" "longname723" (func $internal723)) (import "env" "longname724" (func $internal724)) (import "env" "longname725" (func $internal725)) (import "env" "longname726" (func $internal726)) (import "env" "longname727" (func $internal727)) (import "env" "longname728" (func $internal728)) (import "env" "longname729" (func $internal729)) (import "env" "longname730" (func $internal730)) (import "env" "longname731" (func $internal731)) (import "env" "longname732" (func $internal732)) (import "env" "longname733" (func $internal733)) (import "env" "longname734" (func $internal734)) (import "env" "longname735" (func $internal735)) (import "env" "longname736" (func $internal736)) (import "env" "longname737" (func $internal737)) (import "env" "longname738" (func $internal738)) (import "env" "longname739" (func $internal739)) (import "env" "longname740" (func $internal740)) (import "env" "longname741" (func $internal741)) (import "env" "longname742" (func $internal742)) (import "env" "longname743" (func $internal743)) (import "env" "longname744" (func $internal744)) (import "env" "longname745" (func $internal745)) (import "env" "longname746" (func $internal746)) (import "env" "longname747" (func $internal747)) (import "env" "longname748" (func $internal748)) (import "env" "longname749" (func $internal749)) (import "env" "longname750" (func $internal750)) (import "env" "longname751" (func $internal751)) (import "env" "longname752" (func $internal752)) (import "env" "longname753" (func $internal753)) (import "env" "longname754" (func $internal754)) (import "env" "longname755" (func $internal755)) (import "env" "longname756" (func $internal756)) (import "env" "longname757" (func $internal757)) (import "env" "longname758" (func $internal758)) (import "env" "longname759" (func $internal759)) (import "env" "longname760" (func $internal760)) (import "env" "longname761" (func $internal761)) (import "env" "longname762" (func $internal762)) (import "env" "longname763" (func $internal763)) (import "env" "longname764" (func $internal764)) (import "env" "longname765" (func $internal765)) (import "env" "longname766" (func $internal766)) (import "env" "longname767" (func $internal767)) (import "env" "longname768" (func $internal768)) (import "env" "longname769" (func $internal769)) (import "env" "longname770" (func $internal770)) (import "env" "longname771" (func $internal771)) (import "env" "longname772" (func $internal772)) (import "env" "longname773" (func $internal773)) (import "env" "longname774" (func $internal774)) (import "env" "longname775" (func $internal775)) (import "env" "longname776" (func $internal776)) (import "env" "longname777" (func $internal777)) (import "env" "longname778" (func $internal778)) (import "env" "longname779" (func $internal779)) (import "env" "longname780" (func $internal780)) (import "env" "longname781" (func $internal781)) (import "env" "longname782" (func $internal782)) (import "env" "longname783" (func $internal783)) (import "env" "longname784" (func $internal784)) (import "env" "longname785" (func $internal785)) (import "env" "longname786" (func $internal786)) (import "env" "longname787" (func $internal787)) (import "env" "longname788" (func $internal788)) (import "env" "longname789" (func $internal789)) (import "env" "longname790" (func $internal790)) (import "env" "longname791" (func $internal791)) (import "env" "longname792" (func $internal792)) (import "env" "longname793" (func $internal793)) (import "env" "longname794" (func $internal794)) (import "env" "longname795" (func $internal795)) (import "env" "longname796" (func $internal796)) (import "env" "longname797" (func $internal797)) (import "env" "longname798" (func $internal798)) (import "env" "longname799" (func $internal799)) (import "env" "longname800" (func $internal800)) (import "env" "longname801" (func $internal801)) (import "env" "longname802" (func $internal802)) (import "env" "longname803" (func $internal803)) (import "env" "longname804" (func $internal804)) (import "env" "longname805" (func $internal805)) (import "env" "longname806" (func $internal806)) (import "env" "longname807" (func $internal807)) (import "env" "longname808" (func $internal808)) (import "env" "longname809" (func $internal809)) (import "env" "longname810" (func $internal810)) (import "env" "longname811" (func $internal811)) (import "env" "longname812" (func $internal812)) (import "env" "longname813" (func $internal813)) (import "env" "longname814" (func $internal814)) (import "env" "longname815" (func $internal815)) (import "env" "longname816" (func $internal816)) (import "env" "longname817" (func $internal817)) (import "env" "longname818" (func $internal818)) (import "env" "longname819" (func $internal819)) (import "env" "longname820" (func $internal820)) (import "env" "longname821" (func $internal821)) (import "env" "longname822" (func $internal822)) (import "env" "longname823" (func $internal823)) (import "env" "longname824" (func $internal824)) (import "env" "longname825" (func $internal825)) (import "env" "longname826" (func $internal826)) (import "env" "longname827" (func $internal827)) (import "env" "longname828" (func $internal828)) (import "env" "longname829" (func $internal829)) (import "env" "longname830" (func $internal830)) (import "env" "longname831" (func $internal831)) (import "env" "longname832" (func $internal832)) (import "env" "longname833" (func $internal833)) (import "env" "longname834" (func $internal834)) (import "env" "longname835" (func $internal835)) (import "env" "longname836" (func $internal836)) (import "env" "longname837" (func $internal837)) (import "env" "longname838" (func $internal838)) (import "env" "longname839" (func $internal839)) (import "env" "longname840" (func $internal840)) (import "env" "longname841" (func $internal841)) (import "env" "longname842" (func $internal842)) (import "env" "longname843" (func $internal843)) (import "env" "longname844" (func $internal844)) (import "env" "longname845" (func $internal845)) (import "env" "longname846" (func $internal846)) (import "env" "longname847" (func $internal847)) (import "env" "longname848" (func $internal848)) (import "env" "longname849" (func $internal849)) (import "env" "longname850" (func $internal850)) (import "env" "longname851" (func $internal851)) (import "env" "longname852" (func $internal852)) (import "env" "longname853" (func $internal853)) (import "env" "longname854" (func $internal854)) (import "env" "longname855" (func $internal855)) (import "env" "longname856" (func $internal856)) (import "env" "longname857" (func $internal857)) (import "env" "longname858" (func $internal858)) (import "env" "longname859" (func $internal859)) (import "env" "longname860" (func $internal860)) (import "env" "longname861" (func $internal861)) (import "env" "longname862" (func $internal862)) (import "env" "longname863" (func $internal863)) (import "env" "longname864" (func $internal864)) (import "env" "longname865" (func $internal865)) (import "env" "longname866" (func $internal866)) (import "env" "longname867" (func $internal867)) (import "env" "longname868" (func $internal868)) (import "env" "longname869" (func $internal869)) (import "env" "longname870" (func $internal870)) (import "env" "longname871" (func $internal871)) (import "env" "longname872" (func $internal872)) (import "env" "longname873" (func $internal873)) (import "env" "longname874" (func $internal874)) (import "env" "longname875" (func $internal875)) (import "env" "longname876" (func $internal876)) (import "env" "longname877" (func $internal877)) (import "env" "longname878" (func $internal878)) (import "env" "longname879" (func $internal879)) (import "env" "longname880" (func $internal880)) (import "env" "longname881" (func $internal881)) (import "env" "longname882" (func $internal882)) (import "env" "longname883" (func $internal883)) (import "env" "longname884" (func $internal884)) (import "env" "longname885" (func $internal885)) (import "env" "longname886" (func $internal886)) (import "env" "longname887" (func $internal887)) (import "env" "longname888" (func $internal888)) (import "env" "longname889" (func $internal889)) (import "env" "longname890" (func $internal890)) (import "env" "longname891" (func $internal891)) (import "env" "longname892" (func $internal892)) (import "env" "longname893" (func $internal893)) (import "env" "longname894" (func $internal894)) (import "env" "longname895" (func $internal895)) (import "env" "longname896" (func $internal896)) (import "env" "longname897" (func $internal897)) (import "env" "longname898" (func $internal898)) (import "env" "longname899" (func $internal899)) (import "env" "longname900" (func $internal900)) (import "env" "longname901" (func $internal901)) (import "env" "longname902" (func $internal902)) (import "env" "longname903" (func $internal903)) (import "env" "longname904" (func $internal904)) (import "env" "longname905" (func $internal905)) (import "env" "longname906" (func $internal906)) (import "env" "longname907" (func $internal907)) (import "env" "longname908" (func $internal908)) (import "env" "longname909" (func $internal909)) (import "env" "longname910" (func $internal910)) (import "env" "longname911" (func $internal911)) (import "env" "longname912" (func $internal912)) (import "env" "longname913" (func $internal913)) (import "env" "longname914" (func $internal914)) (import "env" "longname915" (func $internal915)) (import "env" "longname916" (func $internal916)) (import "env" "longname917" (func $internal917)) (import "env" "longname918" (func $internal918)) (import "env" "longname919" (func $internal919)) (import "env" "longname920" (func $internal920)) (import "env" "longname921" (func $internal921)) (import "env" "longname922" (func $internal922)) (import "env" "longname923" (func $internal923)) (import "env" "longname924" (func $internal924)) (import "env" "longname925" (func $internal925)) (import "env" "longname926" (func $internal926)) (import "env" "longname927" (func $internal927)) (import "env" "longname928" (func $internal928)) (import "env" "longname929" (func $internal929)) (import "env" "longname930" (func $internal930)) (import "env" "longname931" (func $internal931)) (import "env" "longname932" (func $internal932)) (import "env" "longname933" (func $internal933)) (import "env" "longname934" (func $internal934)) (import "env" "longname935" (func $internal935)) (import "env" "longname936" (func $internal936)) (import "env" "longname937" (func $internal937)) (import "env" "longname938" (func $internal938)) (import "env" "longname939" (func $internal939)) (import "env" "longname940" (func $internal940)) (import "env" "longname941" (func $internal941)) (import "env" "longname942" (func $internal942)) (import "env" "longname943" (func $internal943)) (import "env" "longname944" (func $internal944)) (import "env" "longname945" (func $internal945)) (import "env" "longname946" (func $internal946)) (import "env" "longname947" (func $internal947)) (import "env" "longname948" (func $internal948)) (import "env" "longname949" (func $internal949)) (import "env" "longname950" (func $internal950)) (import "env" "longname951" (func $internal951)) (import "env" "longname952" (func $internal952)) (import "env" "longname953" (func $internal953)) (import "env" "longname954" (func $internal954)) (import "env" "longname955" (func $internal955)) (import "env" "longname956" (func $internal956)) (import "env" "longname957" (func $internal957)) (import "env" "longname958" (func $internal958)) (import "env" "longname959" (func $internal959)) (import "env" "longname960" (func $internal960)) (import "env" "longname961" (func $internal961)) (import "env" "longname962" (func $internal962)) (import "env" "longname963" (func $internal963)) (import "env" "longname964" (func $internal964)) (import "env" "longname965" (func $internal965)) (import "env" "longname966" (func $internal966)) (import "env" "longname967" (func $internal967)) (import "env" "longname968" (func $internal968)) (import "env" "longname969" (func $internal969)) (import "env" "longname970" (func $internal970)) (import "env" "longname971" (func $internal971)) (import "env" "longname972" (func $internal972)) (import "env" "longname973" (func $internal973)) (import "env" "longname974" (func $internal974)) (import "env" "longname975" (func $internal975)) (import "env" "longname976" (func $internal976)) (import "env" "longname977" (func $internal977)) (import "env" "longname978" (func $internal978)) (import "env" "longname979" (func $internal979)) (import "env" "longname980" (func $internal980)) (import "env" "longname981" (func $internal981)) (import "env" "longname982" (func $internal982)) (import "env" "longname983" (func $internal983)) (import "env" "longname984" (func $internal984)) (import "env" "longname985" (func $internal985)) (import "env" "longname986" (func $internal986)) (import "env" "longname987" (func $internal987)) (import "env" "longname988" (func $internal988)) (import "env" "longname989" (func $internal989)) (import "env" "longname990" (func $internal990)) (import "env" "longname991" (func $internal991)) (import "env" "longname992" (func $internal992)) (import "env" "longname993" (func $internal993)) (import "env" "longname994" (func $internal994)) (import "env" "longname995" (func $internal995)) (import "env" "longname996" (func $internal996)) (import "env" "longname997" (func $internal997)) (import "env" "longname998" (func $internal998)) (import "env" "longname999" (func $internal999)) (import "env" "longname1000" (func $internal1000)) (import "env" "longname1001" (func $internal1001)) (import "env" "longname1002" (func $internal1002)) (import "env" "longname1003" (func $internal1003)) (import "env" "longname1004" (func $internal1004)) (import "env" "longname1005" (func $internal1005)) (import "env" "longname1006" (func $internal1006)) (import "env" "longname1007" (func $internal1007)) (import "env" "longname1008" (func $internal1008)) (import "env" "longname1009" (func $internal1009)) (import "env" "longname1010" (func $internal1010)) (import "env" "longname1011" (func $internal1011)) (import "env" "longname1012" (func $internal1012)) (import "env" "longname1013" (func $internal1013)) (import "env" "longname1014" (func $internal1014)) (import "env" "longname1015" (func $internal1015)) (import "env" "longname1016" (func $internal1016)) (import "env" "longname1017" (func $internal1017)) (import "env" "longname1018" (func $internal1018)) (import "env" "longname1019" (func $internal1019)) (import "env" "longname1020" (func $internal1020)) (import "env" "longname1021" (func $internal1021)) (import "env" "longname1022" (func $internal1022)) (import "env" "longname1023" (func $internal1023)) (import "env" "longname1024" (func $internal1024)) (import "env" "longname1025" (func $internal1025)) (import "env" "longname1026" (func $internal1026)) (import "env" "longname1027" (func $internal1027)) (import "env" "longname1028" (func $internal1028)) (import "env" "longname1029" (func $internal1029)) (import "env" "longname1030" (func $internal1030)) (import "env" "longname1031" (func $internal1031)) (import "env" "longname1032" (func $internal1032)) (import "env" "longname1033" (func $internal1033)) (import "env" "longname1034" (func $internal1034)) (import "env" "longname1035" (func $internal1035)) (import "env" "longname1036" (func $internal1036)) (import "env" "longname1037" (func $internal1037)) (import "env" "longname1038" (func $internal1038)) (import "env" "longname1039" (func $internal1039)) (import "env" "longname1040" (func $internal1040)) (import "env" "longname1041" (func $internal1041)) (import "env" "longname1042" (func $internal1042)) (import "env" "longname1043" (func $internal1043)) (import "env" "longname1044" (func $internal1044)) (import "env" "longname1045" (func $internal1045)) (import "env" "longname1046" (func $internal1046)) (import "env" "longname1047" (func $internal1047)) (import "env" "longname1048" (func $internal1048)) (import "env" "longname1049" (func $internal1049)) (import "env" "longname1050" (func $internal1050)) (import "env" "longname1051" (func $internal1051)) (import "env" "longname1052" (func $internal1052)) (import "env" "longname1053" (func $internal1053)) (import "env" "longname1054" (func $internal1054)) (import "env" "longname1055" (func $internal1055)) (import "env" "longname1056" (func $internal1056)) (import "env" "longname1057" (func $internal1057)) (import "env" "longname1058" (func $internal1058)) (import "env" "longname1059" (func $internal1059)) (import "env" "longname1060" (func $internal1060)) (import "env" "longname1061" (func $internal1061)) (import "env" "longname1062" (func $internal1062)) (import "env" "longname1063" (func $internal1063)) (import "env" "longname1064" (func $internal1064)) (import "env" "longname1065" (func $internal1065)) (import "env" "longname1066" (func $internal1066)) (import "env" "longname1067" (func $internal1067)) (import "env" "longname1068" (func $internal1068)) (import "env" "longname1069" (func $internal1069)) (import "env" "longname1070" (func $internal1070)) (import "env" "longname1071" (func $internal1071)) (import "env" "longname1072" (func $internal1072)) (import "env" "longname1073" (func $internal1073)) (import "env" "longname1074" (func $internal1074)) (import "env" "longname1075" (func $internal1075)) (import "env" "longname1076" (func $internal1076)) (import "env" "longname1077" (func $internal1077)) (import "env" "longname1078" (func $internal1078)) (import "env" "longname1079" (func $internal1079)) (import "env" "longname1080" (func $internal1080)) (import "env" "longname1081" (func $internal1081)) (import "env" "longname1082" (func $internal1082)) (import "env" "longname1083" (func $internal1083)) (import "env" "longname1084" (func $internal1084)) (import "env" "longname1085" (func $internal1085)) (import "env" "longname1086" (func $internal1086)) (import "env" "longname1087" (func $internal1087)) (import "env" "longname1088" (func $internal1088)) (import "env" "longname1089" (func $internal1089)) (import "env" "longname1090" (func $internal1090)) (import "env" "longname1091" (func $internal1091)) (import "env" "longname1092" (func $internal1092)) (import "env" "longname1093" (func $internal1093)) (import "env" "longname1094" (func $internal1094)) (import "env" "longname1095" (func $internal1095)) (import "env" "longname1096" (func $internal1096)) (import "env" "longname1097" (func $internal1097)) (import "env" "longname1098" (func $internal1098)) (import "env" "longname1099" (func $internal1099)) (import "env" "longname1100" (func $internal1100)) (import "env" "longname1101" (func $internal1101)) (import "env" "longname1102" (func $internal1102)) (import "env" "longname1103" (func $internal1103)) (import "env" "longname1104" (func $internal1104)) (import "env" "longname1105" (func $internal1105)) (import "env" "longname1106" (func $internal1106)) (import "env" "longname1107" (func $internal1107)) (import "env" "longname1108" (func $internal1108)) (import "env" "longname1109" (func $internal1109)) (import "env" "longname1110" (func $internal1110)) (import "env" "longname1111" (func $internal1111)) (import "env" "longname1112" (func $internal1112)) (import "env" "longname1113" (func $internal1113)) (import "env" "longname1114" (func $internal1114)) (import "env" "longname1115" (func $internal1115)) (import "env" "longname1116" (func $internal1116)) (import "env" "longname1117" (func $internal1117)) (import "env" "longname1118" (func $internal1118)) (import "env" "longname1119" (func $internal1119)) (import "env" "longname1120" (func $internal1120)) (import "env" "longname1121" (func $internal1121)) (import "env" "longname1122" (func $internal1122)) (import "env" "longname1123" (func $internal1123)) (import "env" "longname1124" (func $internal1124)) (import "env" "longname1125" (func $internal1125)) (import "env" "longname1126" (func $internal1126)) (import "env" "longname1127" (func $internal1127)) (import "env" "longname1128" (func $internal1128)) (import "env" "longname1129" (func $internal1129)) (import "env" "longname1130" (func $internal1130)) (import "env" "longname1131" (func $internal1131)) (import "env" "longname1132" (func $internal1132)) (import "env" "longname1133" (func $internal1133)) (import "env" "longname1134" (func $internal1134)) (import "env" "longname1135" (func $internal1135)) (import "env" "longname1136" (func $internal1136)) (import "env" "longname1137" (func $internal1137)) (import "env" "longname1138" (func $internal1138)) (import "env" "longname1139" (func $internal1139)) (import "env" "longname1140" (func $internal1140)) (import "env" "longname1141" (func $internal1141)) (import "env" "longname1142" (func $internal1142)) (import "env" "longname1143" (func $internal1143)) (import "env" "longname1144" (func $internal1144)) (import "env" "longname1145" (func $internal1145)) (import "env" "longname1146" (func $internal1146)) (import "env" "longname1147" (func $internal1147)) (import "env" "longname1148" (func $internal1148)) (import "env" "longname1149" (func $internal1149)) (import "env" "longname1150" (func $internal1150)) (import "env" "longname1151" (func $internal1151)) (import "env" "longname1152" (func $internal1152)) (import "env" "longname1153" (func $internal1153)) (import "env" "longname1154" (func $internal1154)) (import "env" "longname1155" (func $internal1155)) (import "env" "longname1156" (func $internal1156)) (import "env" "longname1157" (func $internal1157)) (import "env" "longname1158" (func $internal1158)) (import "env" "longname1159" (func $internal1159)) (import "env" "longname1160" (func $internal1160)) (import "env" "longname1161" (func $internal1161)) (import "env" "longname1162" (func $internal1162)) (import "env" "longname1163" (func $internal1163)) (import "env" "longname1164" (func $internal1164)) (import "env" "longname1165" (func $internal1165)) (import "env" "longname1166" (func $internal1166)) (import "env" "longname1167" (func $internal1167)) (import "env" "longname1168" (func $internal1168)) (import "env" "longname1169" (func $internal1169)) (import "env" "longname1170" (func $internal1170)) (import "env" "longname1171" (func $internal1171)) (import "env" "longname1172" (func $internal1172)) (import "env" "longname1173" (func $internal1173)) (import "env" "longname1174" (func $internal1174)) (import "env" "longname1175" (func $internal1175)) (import "env" "longname1176" (func $internal1176)) (import "env" "longname1177" (func $internal1177)) (import "env" "longname1178" (func $internal1178)) (import "env" "longname1179" (func $internal1179)) (import "env" "longname1180" (func $internal1180)) (import "env" "longname1181" (func $internal1181)) (import "env" "longname1182" (func $internal1182)) (import "env" "longname1183" (func $internal1183)) (import "env" "longname1184" (func $internal1184)) (import "env" "longname1185" (func $internal1185)) (import "env" "longname1186" (func $internal1186)) (import "env" "longname1187" (func $internal1187)) (import "env" "longname1188" (func $internal1188)) (import "env" "longname1189" (func $internal1189)) (import "env" "longname1190" (func $internal1190)) (import "env" "longname1191" (func $internal1191)) (import "env" "longname1192" (func $internal1192)) (import "env" "longname1193" (func $internal1193)) (import "env" "longname1194" (func $internal1194)) (import "env" "longname1195" (func $internal1195)) (import "env" "longname1196" (func $internal1196)) (import "env" "longname1197" (func $internal1197)) (import "env" "longname1198" (func $internal1198)) (import "env" "longname1199" (func $internal1199)) (import "env" "longname1200" (func $internal1200)) (import "env" "longname1201" (func $internal1201)) (import "env" "longname1202" (func $internal1202)) (import "env" "longname1203" (func $internal1203)) (import "env" "longname1204" (func $internal1204)) (import "env" "longname1205" (func $internal1205)) (import "env" "longname1206" (func $internal1206)) (import "env" "longname1207" (func $internal1207)) (import "env" "longname1208" (func $internal1208)) (import "env" "longname1209" (func $internal1209)) (import "env" "longname1210" (func $internal1210)) (import "env" "longname1211" (func $internal1211)) (import "env" "longname1212" (func $internal1212)) (import "env" "longname1213" (func $internal1213)) (import "env" "longname1214" (func $internal1214)) (import "env" "longname1215" (func $internal1215)) (import "env" "longname1216" (func $internal1216)) (import "env" "longname1217" (func $internal1217)) (import "env" "longname1218" (func $internal1218)) (import "env" "longname1219" (func $internal1219)) (import "env" "longname1220" (func $internal1220)) (import "env" "longname1221" (func $internal1221)) (import "env" "longname1222" (func $internal1222)) (import "env" "longname1223" (func $internal1223)) (import "env" "longname1224" (func $internal1224)) (import "env" "longname1225" (func $internal1225)) (import "env" "longname1226" (func $internal1226)) (import "env" "longname1227" (func $internal1227)) (import "env" "longname1228" (func $internal1228)) (import "env" "longname1229" (func $internal1229)) (import "env" "longname1230" (func $internal1230)) (import "env" "longname1231" (func $internal1231)) (import "env" "longname1232" (func $internal1232)) (import "env" "longname1233" (func $internal1233)) (import "env" "longname1234" (func $internal1234)) (import "env" "longname1235" (func $internal1235)) (import "env" "longname1236" (func $internal1236)) (import "env" "longname1237" (func $internal1237)) (import "env" "longname1238" (func $internal1238)) (import "env" "longname1239" (func $internal1239)) (import "env" "longname1240" (func $internal1240)) (import "env" "longname1241" (func $internal1241)) (import "env" "longname1242" (func $internal1242)) (import "env" "longname1243" (func $internal1243)) (import "env" "longname1244" (func $internal1244)) (import "env" "longname1245" (func $internal1245)) (import "env" "longname1246" (func $internal1246)) (import "env" "longname1247" (func $internal1247)) (import "env" "longname1248" (func $internal1248)) (import "env" "longname1249" (func $internal1249)) (import "env" "longname1250" (func $internal1250)) (import "env" "longname1251" (func $internal1251)) (import "env" "longname1252" (func $internal1252)) (import "env" "longname1253" (func $internal1253)) (import "env" "longname1254" (func $internal1254)) (import "env" "longname1255" (func $internal1255)) (import "env" "longname1256" (func $internal1256)) (import "env" "longname1257" (func $internal1257)) (import "env" "longname1258" (func $internal1258)) (import "env" "longname1259" (func $internal1259)) (import "env" "longname1260" (func $internal1260)) (import "env" "longname1261" (func $internal1261)) (import "env" "longname1262" (func $internal1262)) (import "env" "longname1263" (func $internal1263)) (import "env" "longname1264" (func $internal1264)) (import "env" "longname1265" (func $internal1265)) (import "env" "longname1266" (func $internal1266)) (import "env" "longname1267" (func $internal1267)) (import "env" "longname1268" (func $internal1268)) (import "env" "longname1269" (func $internal1269)) (import "env" "longname1270" (func $internal1270)) (import "env" "longname1271" (func $internal1271)) (import "env" "longname1272" (func $internal1272)) (import "env" "longname1273" (func $internal1273)) (import "env" "longname1274" (func $internal1274)) (import "env" "longname1275" (func $internal1275)) (import "env" "longname1276" (func $internal1276)) (import "env" "longname1277" (func $internal1277)) (import "env" "longname1278" (func $internal1278)) (import "env" "longname1279" (func $internal1279)) (import "env" "longname1280" (func $internal1280)) (import "env" "longname1281" (func $internal1281)) (import "env" "longname1282" (func $internal1282)) (import "env" "longname1283" (func $internal1283)) (import "env" "longname1284" (func $internal1284)) (import "env" "longname1285" (func $internal1285)) (import "env" "longname1286" (func $internal1286)) (import "env" "longname1287" (func $internal1287)) (import "env" "longname1288" (func $internal1288)) (import "env" "longname1289" (func $internal1289)) (import "env" "longname1290" (func $internal1290)) (import "env" "longname1291" (func $internal1291)) (import "env" "longname1292" (func $internal1292)) (import "env" "longname1293" (func $internal1293)) (import "env" "longname1294" (func $internal1294)) (import "env" "longname1295" (func $internal1295)) (import "env" "longname1296" (func $internal1296)) (import "env" "longname1297" (func $internal1297)) (import "env" "longname1298" (func $internal1298)) (import "env" "longname1299" (func $internal1299)) (import "env" "longname1300" (func $internal1300)) (import "env" "longname1301" (func $internal1301)) (import "env" "longname1302" (func $internal1302)) (import "env" "longname1303" (func $internal1303)) (import "env" "longname1304" (func $internal1304)) (import "env" "longname1305" (func $internal1305)) (import "env" "longname1306" (func $internal1306)) (import "env" "longname1307" (func $internal1307)) (import "env" "longname1308" (func $internal1308)) (import "env" "longname1309" (func $internal1309)) (import "env" "longname1310" (func $internal1310)) (import "env" "longname1311" (func $internal1311)) (import "env" "longname1312" (func $internal1312)) (import "env" "longname1313" (func $internal1313)) (import "env" "longname1314" (func $internal1314)) (import "env" "longname1315" (func $internal1315)) (import "env" "longname1316" (func $internal1316)) (import "env" "longname1317" (func $internal1317)) (import "env" "longname1318" (func $internal1318)) (import "env" "longname1319" (func $internal1319)) (import "env" "longname1320" (func $internal1320)) (import "env" "longname1321" (func $internal1321)) (import "env" "longname1322" (func $internal1322)) (import "env" "longname1323" (func $internal1323)) (import "env" "longname1324" (func $internal1324)) (import "env" "longname1325" (func $internal1325)) (import "env" "longname1326" (func $internal1326)) (import "env" "longname1327" (func $internal1327)) (import "env" "longname1328" (func $internal1328)) (import "env" "longname1329" (func $internal1329)) (import "env" "longname1330" (func $internal1330)) (import "env" "longname1331" (func $internal1331)) (import "env" "longname1332" (func $internal1332)) (import "env" "longname1333" (func $internal1333)) (import "env" "longname1334" (func $internal1334)) (import "env" "longname1335" (func $internal1335)) (import "env" "longname1336" (func $internal1336)) (import "env" "longname1337" (func $internal1337)) (import "env" "longname1338" (func $internal1338)) (import "env" "longname1339" (func $internal1339)) (import "env" "longname1340" (func $internal1340)) (import "env" "longname1341" (func $internal1341)) (import "env" "longname1342" (func $internal1342)) (import "env" "longname1343" (func $internal1343)) (import "env" "longname1344" (func $internal1344)) (import "env" "longname1345" (func $internal1345)) (import "env" "longname1346" (func $internal1346)) (import "env" "longname1347" (func $internal1347)) (import "env" "longname1348" (func $internal1348)) (import "env" "longname1349" (func $internal1349)) (import "env" "longname1350" (func $internal1350)) (import "env" "longname1351" (func $internal1351)) (import "env" "longname1352" (func $internal1352)) (import "env" "longname1353" (func $internal1353)) (import "env" "longname1354" (func $internal1354)) (import "env" "longname1355" (func $internal1355)) (import "env" "longname1356" (func $internal1356)) (import "env" "longname1357" (func $internal1357)) (import "env" "longname1358" (func $internal1358)) (import "env" "longname1359" (func $internal1359)) (import "env" "longname1360" (func $internal1360)) (import "env" "longname1361" (func $internal1361)) (import "env" "longname1362" (func $internal1362)) (import "env" "longname1363" (func $internal1363)) (import "env" "longname1364" (func $internal1364)) (import "env" "longname1365" (func $internal1365)) (import "env" "longname1366" (func $internal1366)) (import "env" "longname1367" (func $internal1367)) (import "env" "longname1368" (func $internal1368)) (import "env" "longname1369" (func $internal1369)) (import "env" "longname1370" (func $internal1370)) (import "env" "longname1371" (func $internal1371)) (import "env" "longname1372" (func $internal1372)) (import "env" "longname1373" (func $internal1373)) (import "env" "longname1374" (func $internal1374)) (import "env" "longname1375" (func $internal1375)) (import "env" "longname1376" (func $internal1376)) (import "env" "longname1377" (func $internal1377)) (import "env" "longname1378" (func $internal1378)) (import "env" "longname1379" (func $internal1379)) (import "env" "longname1380" (func $internal1380)) (import "env" "longname1381" (func $internal1381)) (import "env" "longname1382" (func $internal1382)) (import "env" "longname1383" (func $internal1383)) (import "env" "longname1384" (func $internal1384)) (import "env" "longname1385" (func $internal1385)) (import "env" "longname1386" (func $internal1386)) (import "env" "longname1387" (func $internal1387)) (import "env" "longname1388" (func $internal1388)) (import "env" "longname1389" (func $internal1389)) (import "env" "longname1390" (func $internal1390)) (import "env" "longname1391" (func $internal1391)) (import "env" "longname1392" (func $internal1392)) (import "env" "longname1393" (func $internal1393)) (import "env" "longname1394" (func $internal1394)) (import "env" "longname1395" (func $internal1395)) (import "env" "longname1396" (func $internal1396)) (import "env" "longname1397" (func $internal1397)) (import "env" "longname1398" (func $internal1398)) (import "env" "longname1399" (func $internal1399)) (import "env" "longname1400" (func $internal1400)) (import "env" "longname1401" (func $internal1401)) (import "env" "longname1402" (func $internal1402)) (import "env" "longname1403" (func $internal1403)) (import "env" "longname1404" (func $internal1404)) (import "env" "longname1405" (func $internal1405)) (import "env" "longname1406" (func $internal1406)) (import "env" "longname1407" (func $internal1407)) (import "env" "longname1408" (func $internal1408)) (import "env" "longname1409" (func $internal1409)) (import "env" "longname1410" (func $internal1410)) (import "env" "longname1411" (func $internal1411)) (import "env" "longname1412" (func $internal1412)) (import "env" "longname1413" (func $internal1413)) (import "env" "longname1414" (func $internal1414)) (import "env" "longname1415" (func $internal1415)) (import "env" "longname1416" (func $internal1416)) (import "env" "longname1417" (func $internal1417)) (import "env" "longname1418" (func $internal1418)) (import "env" "longname1419" (func $internal1419)) (import "env" "longname1420" (func $internal1420)) (import "env" "longname1421" (func $internal1421)) (import "env" "longname1422" (func $internal1422)) (import "env" "longname1423" (func $internal1423)) (import "env" "longname1424" (func $internal1424)) (import "env" "longname1425" (func $internal1425)) (import "env" "longname1426" (func $internal1426)) (import "env" "longname1427" (func $internal1427)) (import "env" "longname1428" (func $internal1428)) (import "env" "longname1429" (func $internal1429)) (import "env" "longname1430" (func $internal1430)) (import "env" "longname1431" (func $internal1431)) (import "env" "longname1432" (func $internal1432)) (import "env" "longname1433" (func $internal1433)) (import "env" "longname1434" (func $internal1434)) (import "env" "longname1435" (func $internal1435)) (import "env" "longname1436" (func $internal1436)) (import "env" "longname1437" (func $internal1437)) (import "env" "longname1438" (func $internal1438)) (import "env" "longname1439" (func $internal1439)) (import "env" "longname1440" (func $internal1440)) (import "env" "longname1441" (func $internal1441)) (import "env" "longname1442" (func $internal1442)) (import "env" "longname1443" (func $internal1443)) (import "env" "longname1444" (func $internal1444)) (import "env" "longname1445" (func $internal1445)) (import "env" "longname1446" (func $internal1446)) (import "env" "longname1447" (func $internal1447)) (import "env" "longname1448" (func $internal1448)) (import "env" "longname1449" (func $internal1449)) (import "env" "longname1450" (func $internal1450)) (import "env" "longname1451" (func $internal1451)) (import "env" "longname1452" (func $internal1452)) (import "env" "longname1453" (func $internal1453)) (import "env" "longname1454" (func $internal1454)) (import "env" "longname1455" (func $internal1455)) (import "env" "longname1456" (func $internal1456)) (import "env" "longname1457" (func $internal1457)) (import "env" "longname1458" (func $internal1458)) (import "env" "longname1459" (func $internal1459)) (import "env" "longname1460" (func $internal1460)) (import "env" "longname1461" (func $internal1461)) (import "env" "longname1462" (func $internal1462)) (import "env" "longname1463" (func $internal1463)) (import "env" "longname1464" (func $internal1464)) (import "env" "longname1465" (func $internal1465)) (import "env" "longname1466" (func $internal1466)) (import "env" "longname1467" (func $internal1467)) (import "env" "longname1468" (func $internal1468)) (import "env" "longname1469" (func $internal1469)) (import "env" "longname1470" (func $internal1470)) (import "env" "longname1471" (func $internal1471)) (import "env" "longname1472" (func $internal1472)) (import "env" "longname1473" (func $internal1473)) (import "env" "longname1474" (func $internal1474)) (import "env" "longname1475" (func $internal1475)) (import "env" "longname1476" (func $internal1476)) (import "env" "longname1477" (func $internal1477)) (import "env" "longname1478" (func $internal1478)) (import "env" "longname1479" (func $internal1479)) (import "env" "longname1480" (func $internal1480)) (import "env" "longname1481" (func $internal1481)) (import "env" "longname1482" (func $internal1482)) (import "env" "longname1483" (func $internal1483)) (import "env" "longname1484" (func $internal1484)) (import "env" "longname1485" (func $internal1485)) (import "env" "longname1486" (func $internal1486)) (import "env" "longname1487" (func $internal1487)) (import "env" "longname1488" (func $internal1488)) (import "env" "longname1489" (func $internal1489)) (import "env" "longname1490" (func $internal1490)) (import "env" "longname1491" (func $internal1491)) (import "env" "longname1492" (func $internal1492)) (import "env" "longname1493" (func $internal1493)) (import "env" "longname1494" (func $internal1494)) (import "env" "longname1495" (func $internal1495)) (import "env" "longname1496" (func $internal1496)) (import "env" "longname1497" (func $internal1497)) (import "env" "longname1498" (func $internal1498)) (import "env" "longname1499" (func $internal1499)) (import "env" "longname1500" (func $internal1500)) (import "env" "longname1501" (func $internal1501)) (import "env" "longname1502" (func $internal1502)) (import "env" "longname1503" (func $internal1503)) (import "env" "longname1504" (func $internal1504)) (import "env" "longname1505" (func $internal1505)) (import "env" "longname1506" (func $internal1506)) (import "env" "longname1507" (func $internal1507)) (import "env" "longname1508" (func $internal1508)) (import "env" "longname1509" (func $internal1509)) (import "env" "longname1510" (func $internal1510)) (import "env" "longname1511" (func $internal1511)) (import "env" "longname1512" (func $internal1512)) (import "env" "longname1513" (func $internal1513)) (import "env" "longname1514" (func $internal1514)) (import "env" "longname1515" (func $internal1515)) (import "env" "longname1516" (func $internal1516)) (import "env" "longname1517" (func $internal1517)) (import "env" "longname1518" (func $internal1518)) (import "env" "longname1519" (func $internal1519)) (import "env" "longname1520" (func $internal1520)) (import "env" "longname1521" (func $internal1521)) (import "env" "longname1522" (func $internal1522)) (import "env" "longname1523" (func $internal1523)) (import "env" "longname1524" (func $internal1524)) (import "env" "longname1525" (func $internal1525)) (import "env" "longname1526" (func $internal1526)) (import "env" "longname1527" (func $internal1527)) (import "env" "longname1528" (func $internal1528)) (import "env" "longname1529" (func $internal1529)) (import "env" "longname1530" (func $internal1530)) (import "env" "longname1531" (func $internal1531)) (import "env" "longname1532" (func $internal1532)) (import "env" "longname1533" (func $internal1533)) (import "env" "longname1534" (func $internal1534)) (import "env" "longname1535" (func $internal1535)) (import "env" "longname1536" (func $internal1536)) (import "env" "longname1537" (func $internal1537)) (import "env" "longname1538" (func $internal1538)) (import "env" "longname1539" (func $internal1539)) (import "env" "longname1540" (func $internal1540)) (import "env" "longname1541" (func $internal1541)) (import "env" "longname1542" (func $internal1542)) (import "env" "longname1543" (func $internal1543)) (import "env" "longname1544" (func $internal1544)) (import "env" "longname1545" (func $internal1545)) (import "env" "longname1546" (func $internal1546)) (import "env" "longname1547" (func $internal1547)) (import "env" "longname1548" (func $internal1548)) (import "env" "longname1549" (func $internal1549)) (import "env" "longname1550" (func $internal1550)) (import "env" "longname1551" (func $internal1551)) (import "env" "longname1552" (func $internal1552)) (import "env" "longname1553" (func $internal1553)) (import "env" "longname1554" (func $internal1554)) (import "env" "longname1555" (func $internal1555)) (import "env" "longname1556" (func $internal1556)) (import "env" "longname1557" (func $internal1557)) (import "env" "longname1558" (func $internal1558)) (import "env" "longname1559" (func $internal1559)) (import "env" "longname1560" (func $internal1560)) (import "env" "longname1561" (func $internal1561)) (import "env" "longname1562" (func $internal1562)) (import "env" "longname1563" (func $internal1563)) (import "env" "longname1564" (func $internal1564)) (import "env" "longname1565" (func $internal1565)) (import "env" "longname1566" (func $internal1566)) (import "env" "longname1567" (func $internal1567)) (import "env" "longname1568" (func $internal1568)) (import "env" "longname1569" (func $internal1569)) (import "env" "longname1570" (func $internal1570)) (import "env" "longname1571" (func $internal1571)) (import "env" "longname1572" (func $internal1572)) (import "env" "longname1573" (func $internal1573)) (import "env" "longname1574" (func $internal1574)) (import "env" "longname1575" (func $internal1575)) (import "env" "longname1576" (func $internal1576)) (import "env" "longname1577" (func $internal1577)) (import "env" "longname1578" (func $internal1578)) (import "env" "longname1579" (func $internal1579)) (import "env" "longname1580" (func $internal1580)) (import "env" "longname1581" (func $internal1581)) (import "env" "longname1582" (func $internal1582)) (import "env" "longname1583" (func $internal1583)) (import "env" "longname1584" (func $internal1584)) (import "env" "longname1585" (func $internal1585)) (import "env" "longname1586" (func $internal1586)) (import "env" "longname1587" (func $internal1587)) (import "env" "longname1588" (func $internal1588)) (import "env" "longname1589" (func $internal1589)) (import "env" "longname1590" (func $internal1590)) (import "env" "longname1591" (func $internal1591)) (import "env" "longname1592" (func $internal1592)) (import "env" "longname1593" (func $internal1593)) (import "env" "longname1594" (func $internal1594)) (import "env" "longname1595" (func $internal1595)) (import "env" "longname1596" (func $internal1596)) (import "env" "longname1597" (func $internal1597)) (import "env" "longname1598" (func $internal1598)) (import "env" "longname1599" (func $internal1599)) (import "env" "longname1600" (func $internal1600)) (import "env" "longname1601" (func $internal1601)) (import "env" "longname1602" (func $internal1602)) (import "env" "longname1603" (func $internal1603)) (import "env" "longname1604" (func $internal1604)) (import "env" "longname1605" (func $internal1605)) (import "env" "longname1606" (func $internal1606)) (import "env" "longname1607" (func $internal1607)) (import "env" "longname1608" (func $internal1608)) (import "env" "longname1609" (func $internal1609)) (import "env" "longname1610" (func $internal1610)) (import "env" "longname1611" (func $internal1611)) (import "env" "longname1612" (func $internal1612)) (import "env" "longname1613" (func $internal1613)) (import "env" "longname1614" (func $internal1614)) (import "env" "longname1615" (func $internal1615)) (import "env" "longname1616" (func $internal1616)) (import "env" "longname1617" (func $internal1617)) (import "env" "longname1618" (func $internal1618)) (import "env" "longname1619" (func $internal1619)) (import "env" "longname1620" (func $internal1620)) (import "env" "longname1621" (func $internal1621)) (import "env" "longname1622" (func $internal1622)) (import "env" "longname1623" (func $internal1623)) (import "env" "longname1624" (func $internal1624)) (import "env" "longname1625" (func $internal1625)) (import "env" "longname1626" (func $internal1626)) (import "env" "longname1627" (func $internal1627)) (import "env" "longname1628" (func $internal1628)) (import "env" "longname1629" (func $internal1629)) (import "env" "longname1630" (func $internal1630)) (import "env" "longname1631" (func $internal1631)) (import "env" "longname1632" (func $internal1632)) (import "env" "longname1633" (func $internal1633)) (import "env" "longname1634" (func $internal1634)) (import "env" "longname1635" (func $internal1635)) (import "env" "longname1636" (func $internal1636)) (import "env" "longname1637" (func $internal1637)) (import "env" "longname1638" (func $internal1638)) (import "env" "longname1639" (func $internal1639)) (import "env" "longname1640" (func $internal1640)) (import "env" "longname1641" (func $internal1641)) (import "env" "longname1642" (func $internal1642)) (import "env" "longname1643" (func $internal1643)) (import "env" "longname1644" (func $internal1644)) (import "env" "longname1645" (func $internal1645)) (import "env" "longname1646" (func $internal1646)) (import "env" "longname1647" (func $internal1647)) (import "env" "longname1648" (func $internal1648)) (import "env" "longname1649" (func $internal1649)) (import "env" "longname1650" (func $internal1650)) (import "env" "longname1651" (func $internal1651)) (import "env" "longname1652" (func $internal1652)) (import "env" "longname1653" (func $internal1653)) (import "env" "longname1654" (func $internal1654)) (import "env" "longname1655" (func $internal1655)) (import "env" "longname1656" (func $internal1656)) (import "env" "longname1657" (func $internal1657)) (import "env" "longname1658" (func $internal1658)) (import "env" "longname1659" (func $internal1659)) (import "env" "longname1660" (func $internal1660)) (import "env" "longname1661" (func $internal1661)) (import "env" "longname1662" (func $internal1662)) (import "env" "longname1663" (func $internal1663)) (import "env" "longname1664" (func $internal1664)) (import "env" "longname1665" (func $internal1665)) (import "env" "longname1666" (func $internal1666)) (import "env" "longname1667" (func $internal1667)) (import "env" "longname1668" (func $internal1668)) (import "env" "longname1669" (func $internal1669)) (import "env" "longname1670" (func $internal1670)) (import "env" "longname1671" (func $internal1671)) (import "env" "longname1672" (func $internal1672)) (import "env" "longname1673" (func $internal1673)) (import "env" "longname1674" (func $internal1674)) (import "env" "longname1675" (func $internal1675)) (import "env" "longname1676" (func $internal1676)) (import "env" "longname1677" (func $internal1677)) (import "env" "longname1678" (func $internal1678)) (import "env" "longname1679" (func $internal1679)) (import "env" "longname1680" (func $internal1680)) (import "env" "longname1681" (func $internal1681)) (import "env" "longname1682" (func $internal1682)) (import "env" "longname1683" (func $internal1683)) (import "env" "longname1684" (func $internal1684)) (import "env" "longname1685" (func $internal1685)) (import "env" "longname1686" (func $internal1686)) (import "env" "longname1687" (func $internal1687)) (import "env" "longname1688" (func $internal1688)) (import "env" "longname1689" (func $internal1689)) (import "env" "longname1690" (func $internal1690)) (import "env" "longname1691" (func $internal1691)) (import "env" "longname1692" (func $internal1692)) (import "env" "longname1693" (func $internal1693)) (import "env" "longname1694" (func $internal1694)) (import "env" "longname1695" (func $internal1695)) (import "env" "longname1696" (func $internal1696)) (import "env" "longname1697" (func $internal1697)) (import "env" "longname1698" (func $internal1698)) (import "env" "longname1699" (func $internal1699)) (import "env" "longname1700" (func $internal1700)) (import "env" "longname1701" (func $internal1701)) (import "env" "longname1702" (func $internal1702)) (import "env" "longname1703" (func $internal1703)) (import "env" "longname1704" (func $internal1704)) (import "env" "longname1705" (func $internal1705)) (import "env" "longname1706" (func $internal1706)) (import "env" "longname1707" (func $internal1707)) (import "env" "longname1708" (func $internal1708)) (import "env" "longname1709" (func $internal1709)) (import "env" "longname1710" (func $internal1710)) (import "env" "longname1711" (func $internal1711)) (import "env" "longname1712" (func $internal1712)) (import "env" "longname1713" (func $internal1713)) (import "env" "longname1714" (func $internal1714)) (import "env" "longname1715" (func $internal1715)) (import "env" "longname1716" (func $internal1716)) (import "env" "longname1717" (func $internal1717)) (import "env" "longname1718" (func $internal1718)) (import "env" "longname1719" (func $internal1719)) (import "env" "longname1720" (func $internal1720)) (import "env" "longname1721" (func $internal1721)) (import "env" "longname1722" (func $internal1722)) (import "env" "longname1723" (func $internal1723)) (import "env" "longname1724" (func $internal1724)) (import "env" "longname1725" (func $internal1725)) (import "env" "longname1726" (func $internal1726)) (import "env" "longname1727" (func $internal1727)) (import "env" "longname1728" (func $internal1728)) (import "env" "longname1729" (func $internal1729)) (import "env" "longname1730" (func $internal1730)) (import "env" "longname1731" (func $internal1731)) (import "env" "longname1732" (func $internal1732)) (import "env" "longname1733" (func $internal1733)) (import "env" "longname1734" (func $internal1734)) (import "env" "longname1735" (func $internal1735)) (import "env" "longname1736" (func $internal1736)) (import "env" "longname1737" (func $internal1737)) (import "env" "longname1738" (func $internal1738)) (import "env" "longname1739" (func $internal1739)) (import "env" "longname1740" (func $internal1740)) (import "env" "longname1741" (func $internal1741)) (import "env" "longname1742" (func $internal1742)) (import "env" "longname1743" (func $internal1743)) (import "env" "longname1744" (func $internal1744)) (import "env" "longname1745" (func $internal1745)) (import "env" "longname1746" (func $internal1746)) (import "env" "longname1747" (func $internal1747)) (import "env" "longname1748" (func $internal1748)) (import "env" "longname1749" (func $internal1749)) (import "env" "longname1750" (func $internal1750)) (import "env" "longname1751" (func $internal1751)) (import "env" "longname1752" (func $internal1752)) (import "env" "longname1753" (func $internal1753)) (import "env" "longname1754" (func $internal1754)) (import "env" "longname1755" (func $internal1755)) (import "env" "longname1756" (func $internal1756)) (import "env" "longname1757" (func $internal1757)) (import "env" "longname1758" (func $internal1758)) (import "env" "longname1759" (func $internal1759)) (import "env" "longname1760" (func $internal1760)) (import "env" "longname1761" (func $internal1761)) (import "env" "longname1762" (func $internal1762)) (import "env" "longname1763" (func $internal1763)) (import "env" "longname1764" (func $internal1764)) (import "env" "longname1765" (func $internal1765)) (import "env" "longname1766" (func $internal1766)) (import "env" "longname1767" (func $internal1767)) (import "env" "longname1768" (func $internal1768)) (import "env" "longname1769" (func $internal1769)) (import "env" "longname1770" (func $internal1770)) (import "env" "longname1771" (func $internal1771)) (import "env" "longname1772" (func $internal1772)) (import "env" "longname1773" (func $internal1773)) (import "env" "longname1774" (func $internal1774)) (import "env" "longname1775" (func $internal1775)) (import "env" "longname1776" (func $internal1776)) (import "env" "longname1777" (func $internal1777)) (import "env" "longname1778" (func $internal1778)) (import "env" "longname1779" (func $internal1779)) (import "env" "longname1780" (func $internal1780)) (import "env" "longname1781" (func $internal1781)) (import "env" "longname1782" (func $internal1782)) (import "env" "longname1783" (func $internal1783)) (import "env" "longname1784" (func $internal1784)) (import "env" "longname1785" (func $internal1785)) (import "env" "longname1786" (func $internal1786)) (import "env" "longname1787" (func $internal1787)) (import "env" "longname1788" (func $internal1788)) (import "env" "longname1789" (func $internal1789)) (import "env" "longname1790" (func $internal1790)) (import "env" "longname1791" (func $internal1791)) (import "env" "longname1792" (func $internal1792)) (import "env" "longname1793" (func $internal1793)) (import "env" "longname1794" (func $internal1794)) (import "env" "longname1795" (func $internal1795)) (import "env" "longname1796" (func $internal1796)) (import "env" "longname1797" (func $internal1797)) (import "env" "longname1798" (func $internal1798)) (import "env" "longname1799" (func $internal1799)) (import "env" "longname1800" (func $internal1800)) (import "env" "longname1801" (func $internal1801)) (import "env" "longname1802" (func $internal1802)) (import "env" "longname1803" (func $internal1803)) (import "env" "longname1804" (func $internal1804)) (import "env" "longname1805" (func $internal1805)) (import "env" "longname1806" (func $internal1806)) (import "env" "longname1807" (func $internal1807)) (import "env" "longname1808" (func $internal1808)) (import "env" "longname1809" (func $internal1809)) (import "env" "longname1810" (func $internal1810)) (import "env" "longname1811" (func $internal1811)) (import "env" "longname1812" (func $internal1812)) (import "env" "longname1813" (func $internal1813)) (import "env" "longname1814" (func $internal1814)) (import "env" "longname1815" (func $internal1815)) (import "env" "longname1816" (func $internal1816)) (import "env" "longname1817" (func $internal1817)) (import "env" "longname1818" (func $internal1818)) (import "env" "longname1819" (func $internal1819)) (import "env" "longname1820" (func $internal1820)) (import "env" "longname1821" (func $internal1821)) (import "env" "longname1822" (func $internal1822)) (import "env" "longname1823" (func $internal1823)) (import "env" "longname1824" (func $internal1824)) (import "env" "longname1825" (func $internal1825)) (import "env" "longname1826" (func $internal1826)) (import "env" "longname1827" (func $internal1827)) (import "env" "longname1828" (func $internal1828)) (import "env" "longname1829" (func $internal1829)) (import "env" "longname1830" (func $internal1830)) (import "env" "longname1831" (func $internal1831)) (import "env" "longname1832" (func $internal1832)) (import "env" "longname1833" (func $internal1833)) (import "env" "longname1834" (func $internal1834)) (import "env" "longname1835" (func $internal1835)) (import "env" "longname1836" (func $internal1836)) (import "env" "longname1837" (func $internal1837)) (import "env" "longname1838" (func $internal1838)) (import "env" "longname1839" (func $internal1839)) (import "env" "longname1840" (func $internal1840)) (import "env" "longname1841" (func $internal1841)) (import "env" "longname1842" (func $internal1842)) (import "env" "longname1843" (func $internal1843)) (import "env" "longname1844" (func $internal1844)) (import "env" "longname1845" (func $internal1845)) (import "env" "longname1846" (func $internal1846)) (import "env" "longname1847" (func $internal1847)) (import "env" "longname1848" (func $internal1848)) (import "env" "longname1849" (func $internal1849)) (import "env" "longname1850" (func $internal1850)) (import "env" "longname1851" (func $internal1851)) (import "env" "longname1852" (func $internal1852)) (import "env" "longname1853" (func $internal1853)) (import "env" "longname1854" (func $internal1854)) (import "env" "longname1855" (func $internal1855)) (import "env" "longname1856" (func $internal1856)) (import "env" "longname1857" (func $internal1857)) (import "env" "longname1858" (func $internal1858)) (import "env" "longname1859" (func $internal1859)) (import "env" "longname1860" (func $internal1860)) (import "env" "longname1861" (func $internal1861)) (import "env" "longname1862" (func $internal1862)) (import "env" "longname1863" (func $internal1863)) (import "env" "longname1864" (func $internal1864)) (import "env" "longname1865" (func $internal1865)) (import "env" "longname1866" (func $internal1866)) (import "env" "longname1867" (func $internal1867)) (import "env" "longname1868" (func $internal1868)) (import "env" "longname1869" (func $internal1869)) (import "env" "longname1870" (func $internal1870)) (import "env" "longname1871" (func $internal1871)) (import "env" "longname1872" (func $internal1872)) (import "env" "longname1873" (func $internal1873)) (import "env" "longname1874" (func $internal1874)) (import "env" "longname1875" (func $internal1875)) (import "env" "longname1876" (func $internal1876)) (import "env" "longname1877" (func $internal1877)) (import "env" "longname1878" (func $internal1878)) (import "env" "longname1879" (func $internal1879)) (import "env" "longname1880" (func $internal1880)) (import "env" "longname1881" (func $internal1881)) (import "env" "longname1882" (func $internal1882)) (import "env" "longname1883" (func $internal1883)) (import "env" "longname1884" (func $internal1884)) (import "env" "longname1885" (func $internal1885)) (import "env" "longname1886" (func $internal1886)) (import "env" "longname1887" (func $internal1887)) (import "env" "longname1888" (func $internal1888)) (import "env" "longname1889" (func $internal1889)) (import "env" "longname1890" (func $internal1890)) (import "env" "longname1891" (func $internal1891)) (import "env" "longname1892" (func $internal1892)) (import "env" "longname1893" (func $internal1893)) (import "env" "longname1894" (func $internal1894)) (import "env" "longname1895" (func $internal1895)) (import "env" "longname1896" (func $internal1896)) (import "env" "longname1897" (func $internal1897)) (import "env" "longname1898" (func $internal1898)) (import "env" "longname1899" (func $internal1899)) (import "env" "longname1900" (func $internal1900)) (import "env" "longname1901" (func $internal1901)) (import "env" "longname1902" (func $internal1902)) (import "env" "longname1903" (func $internal1903)) (import "env" "longname1904" (func $internal1904)) (import "env" "longname1905" (func $internal1905)) (import "env" "longname1906" (func $internal1906)) (import "env" "longname1907" (func $internal1907)) (import "env" "longname1908" (func $internal1908)) (import "env" "longname1909" (func $internal1909)) (import "env" "longname1910" (func $internal1910)) (import "env" "longname1911" (func $internal1911)) (import "env" "longname1912" (func $internal1912)) (import "env" "longname1913" (func $internal1913)) (import "env" "longname1914" (func $internal1914)) (import "env" "longname1915" (func $internal1915)) (import "env" "longname1916" (func $internal1916)) (import "env" "longname1917" (func $internal1917)) (import "env" "longname1918" (func $internal1918)) (import "env" "longname1919" (func $internal1919)) (import "env" "longname1920" (func $internal1920)) (import "env" "longname1921" (func $internal1921)) (import "env" "longname1922" (func $internal1922)) (import "env" "longname1923" (func $internal1923)) (import "env" "longname1924" (func $internal1924)) (import "env" "longname1925" (func $internal1925)) (import "env" "longname1926" (func $internal1926)) (import "env" "longname1927" (func $internal1927)) (import "env" "longname1928" (func $internal1928)) (import "env" "longname1929" (func $internal1929)) (import "env" "longname1930" (func $internal1930)) (import "env" "longname1931" (func $internal1931)) (import "env" "longname1932" (func $internal1932)) (import "env" "longname1933" (func $internal1933)) (import "env" "longname1934" (func $internal1934)) (import "env" "longname1935" (func $internal1935)) (import "env" "longname1936" (func $internal1936)) (import "env" "longname1937" (func $internal1937)) (import "env" "longname1938" (func $internal1938)) (import "env" "longname1939" (func $internal1939)) (import "env" "longname1940" (func $internal1940)) (import "env" "longname1941" (func $internal1941)) (import "env" "longname1942" (func $internal1942)) (import "env" "longname1943" (func $internal1943)) (import "env" "longname1944" (func $internal1944)) (import "env" "longname1945" (func $internal1945)) (import "env" "longname1946" (func $internal1946)) (import "env" "longname1947" (func $internal1947)) (import "env" "longname1948" (func $internal1948)) (import "env" "longname1949" (func $internal1949)) (import "env" "longname1950" (func $internal1950)) (import "env" "longname1951" (func $internal1951)) (import "env" "longname1952" (func $internal1952)) (import "env" "longname1953" (func $internal1953)) (import "env" "longname1954" (func $internal1954)) (import "env" "longname1955" (func $internal1955)) (import "env" "longname1956" (func $internal1956)) (import "env" "longname1957" (func $internal1957)) (import "env" "longname1958" (func $internal1958)) (import "env" "longname1959" (func $internal1959)) (import "env" "longname1960" (func $internal1960)) (import "env" "longname1961" (func $internal1961)) (import "env" "longname1962" (func $internal1962)) (import "env" "longname1963" (func $internal1963)) (import "env" "longname1964" (func $internal1964)) (import "env" "longname1965" (func $internal1965)) (import "env" "longname1966" (func $internal1966)) (import "env" "longname1967" (func $internal1967)) (import "env" "longname1968" (func $internal1968)) (import "env" "longname1969" (func $internal1969)) (import "env" "longname1970" (func $internal1970)) (import "env" "longname1971" (func $internal1971)) (import "env" "longname1972" (func $internal1972)) (import "env" "longname1973" (func $internal1973)) (import "env" "longname1974" (func $internal1974)) (import "env" "longname1975" (func $internal1975)) (import "env" "longname1976" (func $internal1976)) (import "env" "longname1977" (func $internal1977)) (import "env" "longname1978" (func $internal1978)) (import "env" "longname1979" (func $internal1979)) (import "env" "longname1980" (func $internal1980)) (import "env" "longname1981" (func $internal1981)) (import "env" "longname1982" (func $internal1982)) (import "env" "longname1983" (func $internal1983)) (import "env" "longname1984" (func $internal1984)) (import "env" "longname1985" (func $internal1985)) (import "env" "longname1986" (func $internal1986)) (import "env" "longname1987" (func $internal1987)) (import "env" "longname1988" (func $internal1988)) (import "env" "longname1989" (func $internal1989)) (import "env" "longname1990" (func $internal1990)) (import "env" "longname1991" (func $internal1991)) (import "env" "longname1992" (func $internal1992)) (import "env" "longname1993" (func $internal1993)) (import "env" "longname1994" (func $internal1994)) (import "env" "longname1995" (func $internal1995)) (import "env" "longname1996" (func $internal1996)) (import "env" "longname1997" (func $internal1997)) (import "env" "longname1998" (func $internal1998)) (import "env" "longname1999" (func $internal1999)) (import "env" "longname2000" (func $internal2000)) (import "env" "longname2001" (func $internal2001)) (import "env" "longname2002" (func $internal2002)) (import "env" "longname2003" (func $internal2003)) (import "env" "longname2004" (func $internal2004)) (import "env" "longname2005" (func $internal2005)) (import "env" "longname2006" (func $internal2006)) (import "env" "longname2007" (func $internal2007)) (import "env" "longname2008" (func $internal2008)) (import "env" "longname2009" (func $internal2009)) (import "env" "longname2010" (func $internal2010)) (import "env" "longname2011" (func $internal2011)) (import "env" "longname2012" (func $internal2012)) (import "env" "longname2013" (func $internal2013)) (import "env" "longname2014" (func $internal2014)) (import "env" "longname2015" (func $internal2015)) (import "env" "longname2016" (func $internal2016)) (import "env" "longname2017" (func $internal2017)) (import "env" "longname2018" (func $internal2018)) (import "env" "longname2019" (func $internal2019)) (import "env" "longname2020" (func $internal2020)) (import "env" "longname2021" (func $internal2021)) (import "env" "longname2022" (func $internal2022)) (import "env" "longname2023" (func $internal2023)) (import "env" "longname2024" (func $internal2024)) (import "env" "longname2025" (func $internal2025)) (import "env" "longname2026" (func $internal2026)) (import "env" "longname2027" (func $internal2027)) (import "env" "longname2028" (func $internal2028)) (import "env" "longname2029" (func $internal2029)) (import "env" "longname2030" (func $internal2030)) (import "env" "longname2031" (func $internal2031)) (import "env" "longname2032" (func $internal2032)) (import "env" "longname2033" (func $internal2033)) (import "env" "longname2034" (func $internal2034)) (import "env" "longname2035" (func $internal2035)) (import "env" "longname2036" (func $internal2036)) (import "env" "longname2037" (func $internal2037)) (import "env" "longname2038" (func $internal2038)) (import "env" "longname2039" (func $internal2039)) (import "env" "longname2040" (func $internal2040)) (import "env" "longname2041" (func $internal2041)) (import "env" "longname2042" (func $internal2042)) (import "env" "longname2043" (func $internal2043)) (import "env" "longname2044" (func $internal2044)) (import "env" "longname2045" (func $internal2045)) (import "env" "longname2046" (func $internal2046)) (import "env" "longname2047" (func $internal2047)) (import "env" "longname2048" (func $internal2048)) (import "env" "longname2049" (func $internal2049)) (import "env" "longname2050" (func $internal2050)) (import "env" "longname2051" (func $internal2051)) (import "env" "longname2052" (func $internal2052)) (import "env" "longname2053" (func $internal2053)) (import "env" "longname2054" (func $internal2054)) (import "env" "longname2055" (func $internal2055)) (import "env" "longname2056" (func $internal2056)) (import "env" "longname2057" (func $internal2057)) (import "env" "longname2058" (func $internal2058)) (import "env" "longname2059" (func $internal2059)) (import "env" "longname2060" (func $internal2060)) (import "env" "longname2061" (func $internal2061)) (import "env" "longname2062" (func $internal2062)) (import "env" "longname2063" (func $internal2063)) (import "env" "longname2064" (func $internal2064)) (import "env" "longname2065" (func $internal2065)) (import "env" "longname2066" (func $internal2066)) (import "env" "longname2067" (func $internal2067)) (import "env" "longname2068" (func $internal2068)) (import "env" "longname2069" (func $internal2069)) (import "env" "longname2070" (func $internal2070)) (import "env" "longname2071" (func $internal2071)) (import "env" "longname2072" (func $internal2072)) (import "env" "longname2073" (func $internal2073)) (import "env" "longname2074" (func $internal2074)) (import "env" "longname2075" (func $internal2075)) (import "env" "longname2076" (func $internal2076)) (import "env" "longname2077" (func $internal2077)) (import "env" "longname2078" (func $internal2078)) (import "env" "longname2079" (func $internal2079)) (import "env" "longname2080" (func $internal2080)) (import "env" "longname2081" (func $internal2081)) (import "env" "longname2082" (func $internal2082)) (import "env" "longname2083" (func $internal2083)) (import "env" "longname2084" (func $internal2084)) (import "env" "longname2085" (func $internal2085)) (import "env" "longname2086" (func $internal2086)) (import "env" "longname2087" (func $internal2087)) (import "env" "longname2088" (func $internal2088)) (import "env" "longname2089" (func $internal2089)) (import "env" "longname2090" (func $internal2090)) (import "env" "longname2091" (func $internal2091)) (import "env" "longname2092" (func $internal2092)) (import "env" "longname2093" (func $internal2093)) (import "env" "longname2094" (func $internal2094)) (import "env" "longname2095" (func $internal2095)) (import "env" "longname2096" (func $internal2096)) (import "env" "longname2097" (func $internal2097)) (import "env" "longname2098" (func $internal2098)) (import "env" "longname2099" (func $internal2099)) (import "env" "longname2100" (func $internal2100)) (import "env" "longname2101" (func $internal2101)) (import "env" "longname2102" (func $internal2102)) (import "env" "longname2103" (func $internal2103)) (import "env" "longname2104" (func $internal2104)) (import "env" "longname2105" (func $internal2105)) (import "env" "longname2106" (func $internal2106)) (import "env" "longname2107" (func $internal2107)) (import "env" "longname2108" (func $internal2108)) (import "env" "longname2109" (func $internal2109)) (import "env" "longname2110" (func $internal2110)) (import "env" "longname2111" (func $internal2111)) (import "env" "longname2112" (func $internal2112)) (import "env" "longname2113" (func $internal2113)) (import "env" "longname2114" (func $internal2114)) (import "env" "longname2115" (func $internal2115)) (import "env" "longname2116" (func $internal2116)) (import "env" "longname2117" (func $internal2117)) (import "env" "longname2118" (func $internal2118)) (import "env" "longname2119" (func $internal2119)) (import "env" "longname2120" (func $internal2120)) (import "env" "longname2121" (func $internal2121)) (import "env" "longname2122" (func $internal2122)) (import "env" "longname2123" (func $internal2123)) (import "env" "longname2124" (func $internal2124)) (import "env" "longname2125" (func $internal2125)) (import "env" "longname2126" (func $internal2126)) (import "env" "longname2127" (func $internal2127)) (import "env" "longname2128" (func $internal2128)) (import "env" "longname2129" (func $internal2129)) (import "env" "longname2130" (func $internal2130)) (import "env" "longname2131" (func $internal2131)) (import "env" "longname2132" (func $internal2132)) (import "env" "longname2133" (func $internal2133)) (import "env" "longname2134" (func $internal2134)) (import "env" "longname2135" (func $internal2135)) (import "env" "longname2136" (func $internal2136)) (import "env" "longname2137" (func $internal2137)) (import "env" "longname2138" (func $internal2138)) (import "env" "longname2139" (func $internal2139)) (import "env" "longname2140" (func $internal2140)) (import "env" "longname2141" (func $internal2141)) (import "env" "longname2142" (func $internal2142)) (import "env" "longname2143" (func $internal2143)) (import "env" "longname2144" (func $internal2144)) (import "env" "longname2145" (func $internal2145)) (import "env" "longname2146" (func $internal2146)) (import "env" "longname2147" (func $internal2147)) (import "env" "longname2148" (func $internal2148)) (import "env" "longname2149" (func $internal2149)) (import "env" "longname2150" (func $internal2150)) (import "env" "longname2151" (func $internal2151)) (import "env" "longname2152" (func $internal2152)) (import "env" "longname2153" (func $internal2153)) (import "env" "longname2154" (func $internal2154)) (import "env" "longname2155" (func $internal2155)) (import "env" "longname2156" (func $internal2156)) (import "env" "longname2157" (func $internal2157)) (import "env" "longname2158" (func $internal2158)) (import "env" "longname2159" (func $internal2159)) (import "env" "longname2160" (func $internal2160)) (import "env" "longname2161" (func $internal2161)) (import "env" "longname2162" (func $internal2162)) (import "env" "longname2163" (func $internal2163)) (import "env" "longname2164" (func $internal2164)) (import "env" "longname2165" (func $internal2165)) (import "env" "longname2166" (func $internal2166)) (import "env" "longname2167" (func $internal2167)) (import "env" "longname2168" (func $internal2168)) (import "env" "longname2169" (func $internal2169)) (import "env" "longname2170" (func $internal2170)) (import "env" "longname2171" (func $internal2171)) (import "env" "longname2172" (func $internal2172)) (import "env" "longname2173" (func $internal2173)) (import "env" "longname2174" (func $internal2174)) (import "env" "longname2175" (func $internal2175)) (import "env" "longname2176" (func $internal2176)) (import "env" "longname2177" (func $internal2177)) (import "env" "longname2178" (func $internal2178)) (import "env" "longname2179" (func $internal2179)) (import "env" "longname2180" (func $internal2180)) (import "env" "longname2181" (func $internal2181)) (import "env" "longname2182" (func $internal2182)) (import "env" "longname2183" (func $internal2183)) (import "env" "longname2184" (func $internal2184)) (import "env" "longname2185" (func $internal2185)) (import "env" "longname2186" (func $internal2186)) (import "env" "longname2187" (func $internal2187)) (import "env" "longname2188" (func $internal2188)) (import "env" "longname2189" (func $internal2189)) (import "env" "longname2190" (func $internal2190)) (import "env" "longname2191" (func $internal2191)) (import "env" "longname2192" (func $internal2192)) (import "env" "longname2193" (func $internal2193)) (import "env" "longname2194" (func $internal2194)) (import "env" "longname2195" (func $internal2195)) (import "env" "longname2196" (func $internal2196)) (import "env" "longname2197" (func $internal2197)) (import "env" "longname2198" (func $internal2198)) (import "env" "longname2199" (func $internal2199)) (import "env" "longname2200" (func $internal2200)) (import "env" "longname2201" (func $internal2201)) (import "env" "longname2202" (func $internal2202)) (import "env" "longname2203" (func $internal2203)) (import "env" "longname2204" (func $internal2204)) (import "env" "longname2205" (func $internal2205)) (import "env" "longname2206" (func $internal2206)) (import "env" "longname2207" (func $internal2207)) (import "env" "longname2208" (func $internal2208)) (import "env" "longname2209" (func $internal2209)) (import "env" "longname2210" (func $internal2210)) (import "env" "longname2211" (func $internal2211)) (import "env" "longname2212" (func $internal2212)) (import "env" "longname2213" (func $internal2213)) (import "env" "longname2214" (func $internal2214)) (import "env" "longname2215" (func $internal2215)) (import "env" "longname2216" (func $internal2216)) (import "env" "longname2217" (func $internal2217)) (import "env" "longname2218" (func $internal2218)) (import "env" "longname2219" (func $internal2219)) (import "env" "longname2220" (func $internal2220)) (import "env" "longname2221" (func $internal2221)) (import "env" "longname2222" (func $internal2222)) (import "env" "longname2223" (func $internal2223)) (import "env" "longname2224" (func $internal2224)) (import "env" "longname2225" (func $internal2225)) (import "env" "longname2226" (func $internal2226)) (import "env" "longname2227" (func $internal2227)) (import "env" "longname2228" (func $internal2228)) (import "env" "longname2229" (func $internal2229)) (import "env" "longname2230" (func $internal2230)) (import "env" "longname2231" (func $internal2231)) (import "env" "longname2232" (func $internal2232)) (import "env" "longname2233" (func $internal2233)) (import "env" "longname2234" (func $internal2234)) (import "env" "longname2235" (func $internal2235)) (import "env" "longname2236" (func $internal2236)) (import "env" "longname2237" (func $internal2237)) (import "env" "longname2238" (func $internal2238)) (import "env" "longname2239" (func $internal2239)) (import "env" "longname2240" (func $internal2240)) (import "env" "longname2241" (func $internal2241)) (import "env" "longname2242" (func $internal2242)) (import "env" "longname2243" (func $internal2243)) (import "env" "longname2244" (func $internal2244)) (import "env" "longname2245" (func $internal2245)) (import "env" "longname2246" (func $internal2246)) (import "env" "longname2247" (func $internal2247)) (import "env" "longname2248" (func $internal2248)) (import "env" "longname2249" (func $internal2249)) (import "env" "longname2250" (func $internal2250)) (import "env" "longname2251" (func $internal2251)) (import "env" "longname2252" (func $internal2252)) (import "env" "longname2253" (func $internal2253)) (import "env" "longname2254" (func $internal2254)) (import "env" "longname2255" (func $internal2255)) (import "env" "longname2256" (func $internal2256)) (import "env" "longname2257" (func $internal2257)) (import "env" "longname2258" (func $internal2258)) (import "env" "longname2259" (func $internal2259)) (import "env" "longname2260" (func $internal2260)) (import "env" "longname2261" (func $internal2261)) (import "env" "longname2262" (func $internal2262)) (import "env" "longname2263" (func $internal2263)) (import "env" "longname2264" (func $internal2264)) (import "env" "longname2265" (func $internal2265)) (import "env" "longname2266" (func $internal2266)) (import "env" "longname2267" (func $internal2267)) (import "env" "longname2268" (func $internal2268)) (import "env" "longname2269" (func $internal2269)) (import "env" "longname2270" (func $internal2270)) (import "env" "longname2271" (func $internal2271)) (import "env" "longname2272" (func $internal2272)) (import "env" "longname2273" (func $internal2273)) (import "env" "longname2274" (func $internal2274)) (import "env" "longname2275" (func $internal2275)) (import "env" "longname2276" (func $internal2276)) (import "env" "longname2277" (func $internal2277)) (import "env" "longname2278" (func $internal2278)) (import "env" "longname2279" (func $internal2279)) (import "env" "longname2280" (func $internal2280)) (import "env" "longname2281" (func $internal2281)) (import "env" "longname2282" (func $internal2282)) (import "env" "longname2283" (func $internal2283)) (import "env" "longname2284" (func $internal2284)) (import "env" "longname2285" (func $internal2285)) (import "env" "longname2286" (func $internal2286)) (import "env" "longname2287" (func $internal2287)) (import "env" "longname2288" (func $internal2288)) (import "env" "longname2289" (func $internal2289)) (import "env" "longname2290" (func $internal2290)) (import "env" "longname2291" (func $internal2291)) (import "env" "longname2292" (func $internal2292)) (import "env" "longname2293" (func $internal2293)) (import "env" "longname2294" (func $internal2294)) (import "env" "longname2295" (func $internal2295)) (import "env" "longname2296" (func $internal2296)) (import "env" "longname2297" (func $internal2297)) (import "env" "longname2298" (func $internal2298)) (import "env" "longname2299" (func $internal2299)) (import "env" "longname2300" (func $internal2300)) (import "env" "longname2301" (func $internal2301)) (import "env" "longname2302" (func $internal2302)) (import "env" "longname2303" (func $internal2303)) (import "env" "longname2304" (func $internal2304)) (import "env" "longname2305" (func $internal2305)) (import "env" "longname2306" (func $internal2306)) (import "env" "longname2307" (func $internal2307)) (import "env" "longname2308" (func $internal2308)) (import "env" "longname2309" (func $internal2309)) (import "env" "longname2310" (func $internal2310)) (import "env" "longname2311" (func $internal2311)) (import "env" "longname2312" (func $internal2312)) (import "env" "longname2313" (func $internal2313)) (import "env" "longname2314" (func $internal2314)) (import "env" "longname2315" (func $internal2315)) (import "env" "longname2316" (func $internal2316)) (import "env" "longname2317" (func $internal2317)) (import "env" "longname2318" (func $internal2318)) (import "env" "longname2319" (func $internal2319)) (import "env" "longname2320" (func $internal2320)) (import "env" "longname2321" (func $internal2321)) (import "env" "longname2322" (func $internal2322)) (import "env" "longname2323" (func $internal2323)) (import "env" "longname2324" (func $internal2324)) (import "env" "longname2325" (func $internal2325)) (import "env" "longname2326" (func $internal2326)) (import "env" "longname2327" (func $internal2327)) (import "env" "longname2328" (func $internal2328)) (import "env" "longname2329" (func $internal2329)) (import "env" "longname2330" (func $internal2330)) (import "env" "longname2331" (func $internal2331)) (import "env" "longname2332" (func $internal2332)) (import "env" "longname2333" (func $internal2333)) (import "env" "longname2334" (func $internal2334)) (import "env" "longname2335" (func $internal2335)) (import "env" "longname2336" (func $internal2336)) (import "env" "longname2337" (func $internal2337)) (import "env" "longname2338" (func $internal2338)) (import "env" "longname2339" (func $internal2339)) (import "env" "longname2340" (func $internal2340)) (import "env" "longname2341" (func $internal2341)) (import "env" "longname2342" (func $internal2342)) (import "env" "longname2343" (func $internal2343)) (import "env" "longname2344" (func $internal2344)) (import "env" "longname2345" (func $internal2345)) (import "env" "longname2346" (func $internal2346)) (import "env" "longname2347" (func $internal2347)) (import "env" "longname2348" (func $internal2348)) (import "env" "longname2349" (func $internal2349)) (import "env" "longname2350" (func $internal2350)) (import "env" "longname2351" (func $internal2351)) (import "env" "longname2352" (func $internal2352)) (import "env" "longname2353" (func $internal2353)) (import "env" "longname2354" (func $internal2354)) (import "env" "longname2355" (func $internal2355)) (import "env" "longname2356" (func $internal2356)) (import "env" "longname2357" (func $internal2357)) (import "env" "longname2358" (func $internal2358)) (import "env" "longname2359" (func $internal2359)) (import "env" "longname2360" (func $internal2360)) (import "env" "longname2361" (func $internal2361)) (import "env" "longname2362" (func $internal2362)) (import "env" "longname2363" (func $internal2363)) (import "env" "longname2364" (func $internal2364)) (import "env" "longname2365" (func $internal2365)) (import "env" "longname2366" (func $internal2366)) (import "env" "longname2367" (func $internal2367)) (import "env" "longname2368" (func $internal2368)) (import "env" "longname2369" (func $internal2369)) (import "env" "longname2370" (func $internal2370)) (import "env" "longname2371" (func $internal2371)) (import "env" "longname2372" (func $internal2372)) (import "env" "longname2373" (func $internal2373)) (import "env" "longname2374" (func $internal2374)) (import "env" "longname2375" (func $internal2375)) (import "env" "longname2376" (func $internal2376)) (import "env" "longname2377" (func $internal2377)) (import "env" "longname2378" (func $internal2378)) (import "env" "longname2379" (func $internal2379)) (import "env" "longname2380" (func $internal2380)) (import "env" "longname2381" (func $internal2381)) (import "env" "longname2382" (func $internal2382)) (import "env" "longname2383" (func $internal2383)) (import "env" "longname2384" (func $internal2384)) (import "env" "longname2385" (func $internal2385)) (import "env" "longname2386" (func $internal2386)) (import "env" "longname2387" (func $internal2387)) (import "env" "longname2388" (func $internal2388)) (import "env" "longname2389" (func $internal2389)) (import "env" "longname2390" (func $internal2390)) (import "env" "longname2391" (func $internal2391)) (import "env" "longname2392" (func $internal2392)) (import "env" "longname2393" (func $internal2393)) (import "env" "longname2394" (func $internal2394)) (import "env" "longname2395" (func $internal2395)) (import "env" "longname2396" (func $internal2396)) (import "env" "longname2397" (func $internal2397)) (import "env" "longname2398" (func $internal2398)) (import "env" "longname2399" (func $internal2399)) (import "env" "longname2400" (func $internal2400)) (import "env" "longname2401" (func $internal2401)) (import "env" "longname2402" (func $internal2402)) (import "env" "longname2403" (func $internal2403)) (import "env" "longname2404" (func $internal2404)) (import "env" "longname2405" (func $internal2405)) (import "env" "longname2406" (func $internal2406)) (import "env" "longname2407" (func $internal2407)) (import "env" "longname2408" (func $internal2408)) (import "env" "longname2409" (func $internal2409)) (import "env" "longname2410" (func $internal2410)) (import "env" "longname2411" (func $internal2411)) (import "env" "longname2412" (func $internal2412)) (import "env" "longname2413" (func $internal2413)) (import "env" "longname2414" (func $internal2414)) (import "env" "longname2415" (func $internal2415)) (import "env" "longname2416" (func $internal2416)) (import "env" "longname2417" (func $internal2417)) (import "env" "longname2418" (func $internal2418)) (import "env" "longname2419" (func $internal2419)) (import "env" "longname2420" (func $internal2420)) (import "env" "longname2421" (func $internal2421)) (import "env" "longname2422" (func $internal2422)) (import "env" "longname2423" (func $internal2423)) (import "env" "longname2424" (func $internal2424)) (import "env" "longname2425" (func $internal2425)) (import "env" "longname2426" (func $internal2426)) (import "env" "longname2427" (func $internal2427)) (import "env" "longname2428" (func $internal2428)) (import "env" "longname2429" (func $internal2429)) (import "env" "longname2430" (func $internal2430)) (import "env" "longname2431" (func $internal2431)) (import "env" "longname2432" (func $internal2432)) (import "env" "longname2433" (func $internal2433)) (import "env" "longname2434" (func $internal2434)) (import "env" "longname2435" (func $internal2435)) (import "env" "longname2436" (func $internal2436)) (import "env" "longname2437" (func $internal2437)) (import "env" "longname2438" (func $internal2438)) (import "env" "longname2439" (func $internal2439)) (import "env" "longname2440" (func $internal2440)) (import "env" "longname2441" (func $internal2441)) (import "env" "longname2442" (func $internal2442)) (import "env" "longname2443" (func $internal2443)) (import "env" "longname2444" (func $internal2444)) (import "env" "longname2445" (func $internal2445)) (import "env" "longname2446" (func $internal2446)) (import "env" "longname2447" (func $internal2447)) (import "env" "longname2448" (func $internal2448)) (import "env" "longname2449" (func $internal2449)) (import "env" "longname2450" (func $internal2450)) (import "env" "longname2451" (func $internal2451)) (import "env" "longname2452" (func $internal2452)) (import "env" "longname2453" (func $internal2453)) (import "env" "longname2454" (func $internal2454)) (import "env" "longname2455" (func $internal2455)) (import "env" "longname2456" (func $internal2456)) (import "env" "longname2457" (func $internal2457)) (import "env" "longname2458" (func $internal2458)) (import "env" "longname2459" (func $internal2459)) (import "env" "longname2460" (func $internal2460)) (import "env" "longname2461" (func $internal2461)) (import "env" "longname2462" (func $internal2462)) (import "env" "longname2463" (func $internal2463)) (import "env" "longname2464" (func $internal2464)) (import "env" "longname2465" (func $internal2465)) (import "env" "longname2466" (func $internal2466)) (import "env" "longname2467" (func $internal2467)) (import "env" "longname2468" (func $internal2468)) (import "env" "longname2469" (func $internal2469)) (import "env" "longname2470" (func $internal2470)) (import "env" "longname2471" (func $internal2471)) (import "env" "longname2472" (func $internal2472)) (import "env" "longname2473" (func $internal2473)) (import "env" "longname2474" (func $internal2474)) (import "env" "longname2475" (func $internal2475)) (import "env" "longname2476" (func $internal2476)) (import "env" "longname2477" (func $internal2477)) (import "env" "longname2478" (func $internal2478)) (import "env" "longname2479" (func $internal2479)) (import "env" "longname2480" (func $internal2480)) (import "env" "longname2481" (func $internal2481)) (import "env" "longname2482" (func $internal2482)) (import "env" "longname2483" (func $internal2483)) (import "env" "longname2484" (func $internal2484)) (import "env" "longname2485" (func $internal2485)) (import "env" "longname2486" (func $internal2486)) (import "env" "longname2487" (func $internal2487)) (import "env" "longname2488" (func $internal2488)) (import "env" "longname2489" (func $internal2489)) (import "env" "longname2490" (func $internal2490)) (import "env" "longname2491" (func $internal2491)) (import "env" "longname2492" (func $internal2492)) (import "env" "longname2493" (func $internal2493)) (import "env" "longname2494" (func $internal2494)) (import "env" "longname2495" (func $internal2495)) (import "env" "longname2496" (func $internal2496)) (import "env" "longname2497" (func $internal2497)) (import "env" "longname2498" (func $internal2498)) (import "env" "longname2499" (func $internal2499)) (import "env" "longname2500" (func $internal2500)) (import "env" "longname2501" (func $internal2501)) (import "env" "longname2502" (func $internal2502)) (import "env" "longname2503" (func $internal2503)) (import "env" "longname2504" (func $internal2504)) (import "env" "longname2505" (func $internal2505)) (import "env" "longname2506" (func $internal2506)) (import "env" "longname2507" (func $internal2507)) (import "env" "longname2508" (func $internal2508)) (import "env" "longname2509" (func $internal2509)) (import "env" "longname2510" (func $internal2510)) (import "env" "longname2511" (func $internal2511)) (import "env" "longname2512" (func $internal2512)) (import "env" "longname2513" (func $internal2513)) (import "env" "longname2514" (func $internal2514)) (import "env" "longname2515" (func $internal2515)) (import "env" "longname2516" (func $internal2516)) (import "env" "longname2517" (func $internal2517)) (import "env" "longname2518" (func $internal2518)) (import "env" "longname2519" (func $internal2519)) (import "env" "longname2520" (func $internal2520)) (import "env" "longname2521" (func $internal2521)) (import "env" "longname2522" (func $internal2522)) (import "env" "longname2523" (func $internal2523)) (import "env" "longname2524" (func $internal2524)) (import "env" "longname2525" (func $internal2525)) (import "env" "longname2526" (func $internal2526)) (import "env" "longname2527" (func $internal2527)) (import "env" "longname2528" (func $internal2528)) (import "env" "longname2529" (func $internal2529)) (import "env" "longname2530" (func $internal2530)) (import "env" "longname2531" (func $internal2531)) (import "env" "longname2532" (func $internal2532)) (import "env" "longname2533" (func $internal2533)) (import "env" "longname2534" (func $internal2534)) (import "env" "longname2535" (func $internal2535)) (import "env" "longname2536" (func $internal2536)) (import "env" "longname2537" (func $internal2537)) (import "env" "longname2538" (func $internal2538)) (import "env" "longname2539" (func $internal2539)) (import "env" "longname2540" (func $internal2540)) (import "env" "longname2541" (func $internal2541)) (import "env" "longname2542" (func $internal2542)) (import "env" "longname2543" (func $internal2543)) (import "env" "longname2544" (func $internal2544)) (import "env" "longname2545" (func $internal2545)) (import "env" "longname2546" (func $internal2546)) (import "env" "longname2547" (func $internal2547)) (import "env" "longname2548" (func $internal2548)) (import "env" "longname2549" (func $internal2549)) (import "env" "longname2550" (func $internal2550)) (import "env" "longname2551" (func $internal2551)) (import "env" "longname2552" (func $internal2552)) (import "env" "longname2553" (func $internal2553)) (import "env" "longname2554" (func $internal2554)) (import "env" "longname2555" (func $internal2555)) (import "env" "longname2556" (func $internal2556)) (import "env" "longname2557" (func $internal2557)) (import "env" "longname2558" (func $internal2558)) (import "env" "longname2559" (func $internal2559)) (import "env" "longname2560" (func $internal2560)) (import "env" "longname2561" (func $internal2561)) (import "env" "longname2562" (func $internal2562)) (import "env" "longname2563" (func $internal2563)) (import "env" "longname2564" (func $internal2564)) (import "env" "longname2565" (func $internal2565)) (import "env" "longname2566" (func $internal2566)) (import "env" "longname2567" (func $internal2567)) (import "env" "longname2568" (func $internal2568)) (import "env" "longname2569" (func $internal2569)) (import "env" "longname2570" (func $internal2570)) (import "env" "longname2571" (func $internal2571)) (import "env" "longname2572" (func $internal2572)) (import "env" "longname2573" (func $internal2573)) (import "env" "longname2574" (func $internal2574)) (import "env" "longname2575" (func $internal2575)) (import "env" "longname2576" (func $internal2576)) (import "env" "longname2577" (func $internal2577)) (import "env" "longname2578" (func $internal2578)) (import "env" "longname2579" (func $internal2579)) (import "env" "longname2580" (func $internal2580)) (import "env" "longname2581" (func $internal2581)) (import "env" "longname2582" (func $internal2582)) (import "env" "longname2583" (func $internal2583)) (import "env" "longname2584" (func $internal2584)) (import "env" "longname2585" (func $internal2585)) (import "env" "longname2586" (func $internal2586)) (import "env" "longname2587" (func $internal2587)) (import "env" "longname2588" (func $internal2588)) (import "env" "longname2589" (func $internal2589)) (import "env" "longname2590" (func $internal2590)) (import "env" "longname2591" (func $internal2591)) (import "env" "longname2592" (func $internal2592)) (import "env" "longname2593" (func $internal2593)) (import "env" "longname2594" (func $internal2594)) (import "env" "longname2595" (func $internal2595)) (import "env" "longname2596" (func $internal2596)) (import "env" "longname2597" (func $internal2597)) (import "env" "longname2598" (func $internal2598)) (import "env" "longname2599" (func $internal2599)) (import "env" "longname2600" (func $internal2600)) (import "env" "longname2601" (func $internal2601)) (import "env" "longname2602" (func $internal2602)) (import "env" "longname2603" (func $internal2603)) (import "env" "longname2604" (func $internal2604)) (import "env" "longname2605" (func $internal2605)) (import "env" "longname2606" (func $internal2606)) (import "env" "longname2607" (func $internal2607)) (import "env" "longname2608" (func $internal2608)) (import "env" "longname2609" (func $internal2609)) (import "env" "longname2610" (func $internal2610)) (import "env" "longname2611" (func $internal2611)) (import "env" "longname2612" (func $internal2612)) (import "env" "longname2613" (func $internal2613)) (import "env" "longname2614" (func $internal2614)) (import "env" "longname2615" (func $internal2615)) (import "env" "longname2616" (func $internal2616)) (import "env" "longname2617" (func $internal2617)) (import "env" "longname2618" (func $internal2618)) (import "env" "longname2619" (func $internal2619)) (import "env" "longname2620" (func $internal2620)) (import "env" "longname2621" (func $internal2621)) (import "env" "longname2622" (func $internal2622)) (import "env" "longname2623" (func $internal2623)) (import "env" "longname2624" (func $internal2624)) (import "env" "longname2625" (func $internal2625)) (import "env" "longname2626" (func $internal2626)) (import "env" "longname2627" (func $internal2627)) (import "env" "longname2628" (func $internal2628)) (import "env" "longname2629" (func $internal2629)) (import "env" "longname2630" (func $internal2630)) (import "env" "longname2631" (func $internal2631)) (import "env" "longname2632" (func $internal2632)) (import "env" "longname2633" (func $internal2633)) (import "env" "longname2634" (func $internal2634)) (import "env" "longname2635" (func $internal2635)) (import "env" "longname2636" (func $internal2636)) (import "env" "longname2637" (func $internal2637)) (import "env" "longname2638" (func $internal2638)) (import "env" "longname2639" (func $internal2639)) (import "env" "longname2640" (func $internal2640)) (import "env" "longname2641" (func $internal2641)) (import "env" "longname2642" (func $internal2642)) (import "env" "longname2643" (func $internal2643)) (import "env" "longname2644" (func $internal2644)) (import "env" "longname2645" (func $internal2645)) (import "env" "longname2646" (func $internal2646)) (import "env" "longname2647" (func $internal2647)) (import "env" "longname2648" (func $internal2648)) (import "env" "longname2649" (func $internal2649)) (import "env" "longname2650" (func $internal2650)) (import "env" "longname2651" (func $internal2651)) (import "env" "longname2652" (func $internal2652)) (import "env" "longname2653" (func $internal2653)) (import "env" "longname2654" (func $internal2654)) (import "env" "longname2655" (func $internal2655)) (import "env" "longname2656" (func $internal2656)) (import "env" "longname2657" (func $internal2657)) (import "env" "longname2658" (func $internal2658)) (import "env" "longname2659" (func $internal2659)) (import "env" "longname2660" (func $internal2660)) (import "env" "longname2661" (func $internal2661)) (import "env" "longname2662" (func $internal2662)) (import "env" "longname2663" (func $internal2663)) (import "env" "longname2664" (func $internal2664)) (import "env" "longname2665" (func $internal2665)) (import "env" "longname2666" (func $internal2666)) (import "env" "longname2667" (func $internal2667)) (import "env" "longname2668" (func $internal2668)) (import "env" "longname2669" (func $internal2669)) (import "env" "longname2670" (func $internal2670)) (import "env" "longname2671" (func $internal2671)) (import "env" "longname2672" (func $internal2672)) (import "env" "longname2673" (func $internal2673)) (import "env" "longname2674" (func $internal2674)) (import "env" "longname2675" (func $internal2675)) (import "env" "longname2676" (func $internal2676)) (import "env" "longname2677" (func $internal2677)) (import "env" "longname2678" (func $internal2678)) (import "env" "longname2679" (func $internal2679)) (import "env" "longname2680" (func $internal2680)) (import "env" "longname2681" (func $internal2681)) (import "env" "longname2682" (func $internal2682)) (import "env" "longname2683" (func $internal2683)) (import "env" "longname2684" (func $internal2684)) (import "env" "longname2685" (func $internal2685)) (import "env" "longname2686" (func $internal2686)) (import "env" "longname2687" (func $internal2687)) (import "env" "longname2688" (func $internal2688)) (import "env" "longname2689" (func $internal2689)) (import "env" "longname2690" (func $internal2690)) (import "env" "longname2691" (func $internal2691)) (import "env" "longname2692" (func $internal2692)) (import "env" "longname2693" (func $internal2693)) (import "env" "longname2694" (func $internal2694)) (import "env" "longname2695" (func $internal2695)) (import "env" "longname2696" (func $internal2696)) (import "env" "longname2697" (func $internal2697)) (import "env" "longname2698" (func $internal2698)) (import "env" "longname2699" (func $internal2699)) (import "env" "longname2700" (func $internal2700)) (import "env" "longname2701" (func $internal2701)) (import "env" "longname2702" (func $internal2702)) (import "env" "longname2703" (func $internal2703)) (import "env" "longname2704" (func $internal2704)) (import "env" "longname2705" (func $internal2705)) (import "env" "longname2706" (func $internal2706)) (import "env" "longname2707" (func $internal2707)) (import "env" "longname2708" (func $internal2708)) (import "env" "longname2709" (func $internal2709)) (import "env" "longname2710" (func $internal2710)) (import "env" "longname2711" (func $internal2711)) (import "env" "longname2712" (func $internal2712)) (import "env" "longname2713" (func $internal2713)) (import "env" "longname2714" (func $internal2714)) (import "env" "longname2715" (func $internal2715)) (import "env" "longname2716" (func $internal2716)) (import "env" "longname2717" (func $internal2717)) (import "env" "longname2718" (func $internal2718)) (import "env" "longname2719" (func $internal2719)) (import "env" "longname2720" (func $internal2720)) (import "env" "longname2721" (func $internal2721)) (import "env" "longname2722" (func $internal2722)) (import "env" "longname2723" (func $internal2723)) (import "env" "longname2724" (func $internal2724)) (import "env" "longname2725" (func $internal2725)) (import "env" "longname2726" (func $internal2726)) (import "env" "longname2727" (func $internal2727)) (import "env" "longname2728" (func $internal2728)) (import "env" "longname2729" (func $internal2729)) (import "env" "longname2730" (func $internal2730)) (import "env" "longname2731" (func $internal2731)) (import "env" "longname2732" (func $internal2732)) (import "env" "longname2733" (func $internal2733)) (import "env" "longname2734" (func $internal2734)) (import "env" "longname2735" (func $internal2735)) (import "env" "longname2736" (func $internal2736)) (import "env" "longname2737" (func $internal2737)) (import "env" "longname2738" (func $internal2738)) (import "env" "longname2739" (func $internal2739)) (import "env" "longname2740" (func $internal2740)) (import "env" "longname2741" (func $internal2741)) (import "env" "longname2742" (func $internal2742)) (import "env" "longname2743" (func $internal2743)) (import "env" "longname2744" (func $internal2744)) (import "env" "longname2745" (func $internal2745)) (import "env" "longname2746" (func $internal2746)) (import "env" "longname2747" (func $internal2747)) (import "env" "longname2748" (func $internal2748)) (import "env" "longname2749" (func $internal2749)) (import "env" "longname2750" (func $internal2750)) (import "env" "longname2751" (func $internal2751)) (import "env" "longname2752" (func $internal2752)) (import "env" "longname2753" (func $internal2753)) (import "env" "longname2754" (func $internal2754)) (import "env" "longname2755" (func $internal2755)) (import "env" "longname2756" (func $internal2756)) (import "env" "longname2757" (func $internal2757)) (import "env" "longname2758" (func $internal2758)) (import "env" "longname2759" (func $internal2759)) (import "env" "longname2760" (func $internal2760)) (import "env" "longname2761" (func $internal2761)) (import "env" "longname2762" (func $internal2762)) (import "env" "longname2763" (func $internal2763)) (import "env" "longname2764" (func $internal2764)) (import "env" "longname2765" (func $internal2765)) (import "env" "longname2766" (func $internal2766)) (import "env" "longname2767" (func $internal2767)) (import "env" "longname2768" (func $internal2768)) (import "env" "longname2769" (func $internal2769)) (import "env" "longname2770" (func $internal2770)) (import "env" "longname2771" (func $internal2771)) (import "env" "longname2772" (func $internal2772)) (import "env" "longname2773" (func $internal2773)) (import "env" "longname2774" (func $internal2774)) (import "env" "longname2775" (func $internal2775)) (import "env" "longname2776" (func $internal2776)) (import "env" "longname2777" (func $internal2777)) (import "env" "longname2778" (func $internal2778)) (import "env" "longname2779" (func $internal2779)) (import "env" "longname2780" (func $internal2780)) (import "env" "longname2781" (func $internal2781)) (import "env" "longname2782" (func $internal2782)) (import "env" "longname2783" (func $internal2783)) (import "env" "longname2784" (func $internal2784)) (import "env" "longname2785" (func $internal2785)) (import "env" "longname2786" (func $internal2786)) (import "env" "longname2787" (func $internal2787)) (import "env" "longname2788" (func $internal2788)) (import "env" "longname2789" (func $internal2789)) (import "env" "longname2790" (func $internal2790)) (import "env" "longname2791" (func $internal2791)) (import "env" "longname2792" (func $internal2792)) (import "env" "longname2793" (func $internal2793)) (import "env" "longname2794" (func $internal2794)) (import "env" "longname2795" (func $internal2795)) (import "env" "longname2796" (func $internal2796)) (import "env" "longname2797" (func $internal2797)) (import "env" "longname2798" (func $internal2798)) (import "env" "longname2799" (func $internal2799)) (import "env" "longname2800" (func $internal2800)) (import "env" "longname2801" (func $internal2801)) (import "env" "longname2802" (func $internal2802)) (import "env" "longname2803" (func $internal2803)) (import "env" "longname2804" (func $internal2804)) (import "env" "longname2805" (func $internal2805)) (import "env" "longname2806" (func $internal2806)) (import "env" "longname2807" (func $internal2807)) (import "env" "longname2808" (func $internal2808)) (import "env" "longname2809" (func $internal2809)) (import "env" "longname2810" (func $internal2810)) (import "env" "longname2811" (func $internal2811)) (import "env" "longname2812" (func $internal2812)) (import "env" "longname2813" (func $internal2813)) (import "env" "longname2814" (func $internal2814)) (import "env" "longname2815" (func $internal2815)) (import "env" "longname2816" (func $internal2816)) (import "env" "longname2817" (func $internal2817)) (import "env" "longname2818" (func $internal2818)) (import "env" "longname2819" (func $internal2819)) (import "env" "longname2820" (func $internal2820)) (import "env" "longname2821" (func $internal2821)) (import "env" "longname2822" (func $internal2822)) (import "env" "longname2823" (func $internal2823)) (import "env" "longname2824" (func $internal2824)) (import "env" "longname2825" (func $internal2825)) (import "env" "longname2826" (func $internal2826)) (import "env" "longname2827" (func $internal2827)) (import "env" "longname2828" (func $internal2828)) (import "env" "longname2829" (func $internal2829)) (import "env" "longname2830" (func $internal2830)) (import "env" "longname2831" (func $internal2831)) (import "env" "longname2832" (func $internal2832)) (import "env" "longname2833" (func $internal2833)) (import "env" "longname2834" (func $internal2834)) (import "env" "longname2835" (func $internal2835)) (import "env" "longname2836" (func $internal2836)) (import "env" "longname2837" (func $internal2837)) (import "env" "longname2838" (func $internal2838)) (import "env" "longname2839" (func $internal2839)) (import "env" "longname2840" (func $internal2840)) (import "env" "longname2841" (func $internal2841)) (import "env" "longname2842" (func $internal2842)) (import "env" "longname2843" (func $internal2843)) (import "env" "longname2844" (func $internal2844)) (import "env" "longname2845" (func $internal2845)) (import "env" "longname2846" (func $internal2846)) (import "env" "longname2847" (func $internal2847)) (import "env" "longname2848" (func $internal2848)) (import "env" "longname2849" (func $internal2849)) (import "env" "longname2850" (func $internal2850)) (import "env" "longname2851" (func $internal2851)) (import "env" "longname2852" (func $internal2852)) (import "env" "longname2853" (func $internal2853)) (import "env" "longname2854" (func $internal2854)) (import "env" "longname2855" (func $internal2855)) (import "env" "longname2856" (func $internal2856)) (import "env" "longname2857" (func $internal2857)) (import "env" "longname2858" (func $internal2858)) (import "env" "longname2859" (func $internal2859)) (import "env" "longname2860" (func $internal2860)) (import "env" "longname2861" (func $internal2861)) (import "env" "longname2862" (func $internal2862)) (import "env" "longname2863" (func $internal2863)) (import "env" "longname2864" (func $internal2864)) (import "env" "longname2865" (func $internal2865)) (import "env" "longname2866" (func $internal2866)) (import "env" "longname2867" (func $internal2867)) (import "env" "longname2868" (func $internal2868)) (import "env" "longname2869" (func $internal2869)) (import "env" "longname2870" (func $internal2870)) (import "env" "longname2871" (func $internal2871)) (import "env" "longname2872" (func $internal2872)) (import "env" "longname2873" (func $internal2873)) (import "env" "longname2874" (func $internal2874)) (import "env" "longname2875" (func $internal2875)) (import "env" "longname2876" (func $internal2876)) (import "env" "longname2877" (func $internal2877)) (import "env" "longname2878" (func $internal2878)) (import "env" "longname2879" (func $internal2879)) (import "env" "longname2880" (func $internal2880)) (import "env" "longname2881" (func $internal2881)) (import "env" "longname2882" (func $internal2882)) (import "env" "longname2883" (func $internal2883)) (import "env" "longname2884" (func $internal2884)) (import "env" "longname2885" (func $internal2885)) (import "env" "longname2886" (func $internal2886)) (import "env" "longname2887" (func $internal2887)) (import "env" "longname2888" (func $internal2888)) (import "env" "longname2889" (func $internal2889)) (import "env" "longname2890" (func $internal2890)) (import "env" "longname2891" (func $internal2891)) (import "env" "longname2892" (func $internal2892)) (import "env" "longname2893" (func $internal2893)) (import "env" "longname2894" (func $internal2894)) (import "env" "longname2895" (func $internal2895)) (import "env" "longname2896" (func $internal2896)) (import "env" "longname2897" (func $internal2897)) (import "env" "longname2898" (func $internal2898)) (import "env" "longname2899" (func $internal2899)) (import "env" "longname2900" (func $internal2900)) (import "env" "longname2901" (func $internal2901)) (import "env" "longname2902" (func $internal2902)) (import "env" "longname2903" (func $internal2903)) (import "env" "longname2904" (func $internal2904)) (import "env" "longname2905" (func $internal2905)) (import "env" "longname2906" (func $internal2906)) (import "env" "longname2907" (func $internal2907)) (import "env" "longname2908" (func $internal2908)) (import "env" "longname2909" (func $internal2909)) (import "env" "longname2910" (func $internal2910)) (import "env" "longname2911" (func $internal2911)) (import "env" "longname2912" (func $internal2912)) (import "env" "longname2913" (func $internal2913)) (import "env" "longname2914" (func $internal2914)) (import "env" "longname2915" (func $internal2915)) (import "env" "longname2916" (func $internal2916)) (import "env" "longname2917" (func $internal2917)) (import "env" "longname2918" (func $internal2918)) (import "env" "longname2919" (func $internal2919)) (import "env" "longname2920" (func $internal2920)) (import "env" "longname2921" (func $internal2921)) (import "env" "longname2922" (func $internal2922)) (import "env" "longname2923" (func $internal2923)) (import "env" "longname2924" (func $internal2924)) (import "env" "longname2925" (func $internal2925)) (import "env" "longname2926" (func $internal2926)) (import "env" "longname2927" (func $internal2927)) (import "env" "longname2928" (func $internal2928)) (import "env" "longname2929" (func $internal2929)) (import "env" "longname2930" (func $internal2930)) (import "env" "longname2931" (func $internal2931)) (import "env" "longname2932" (func $internal2932)) (import "env" "longname2933" (func $internal2933)) (import "env" "longname2934" (func $internal2934)) (import "env" "longname2935" (func $internal2935)) (import "env" "longname2936" (func $internal2936)) (import "env" "longname2937" (func $internal2937)) (import "env" "longname2938" (func $internal2938)) (import "env" "longname2939" (func $internal2939)) (import "env" "longname2940" (func $internal2940)) (import "env" "longname2941" (func $internal2941)) (import "env" "longname2942" (func $internal2942)) (import "env" "longname2943" (func $internal2943)) (import "env" "longname2944" (func $internal2944)) (import "env" "longname2945" (func $internal2945)) (import "env" "longname2946" (func $internal2946)) (import "env" "longname2947" (func $internal2947)) (import "env" "longname2948" (func $internal2948)) (import "env" "longname2949" (func $internal2949)) (import "env" "longname2950" (func $internal2950)) (import "env" "longname2951" (func $internal2951)) (import "env" "longname2952" (func $internal2952)) (import "env" "longname2953" (func $internal2953)) (import "env" "longname2954" (func $internal2954)) (import "env" "longname2955" (func $internal2955)) (import "env" "longname2956" (func $internal2956)) (import "env" "longname2957" (func $internal2957)) (import "env" "longname2958" (func $internal2958)) (import "env" "longname2959" (func $internal2959)) (import "env" "longname2960" (func $internal2960)) (import "env" "longname2961" (func $internal2961)) (import "env" "longname2962" (func $internal2962)) (import "env" "longname2963" (func $internal2963)) (import "env" "longname2964" (func $internal2964)) (import "env" "longname2965" (func $internal2965)) (import "env" "longname2966" (func $internal2966)) (import "env" "longname2967" (func $internal2967)) (import "env" "longname2968" (func $internal2968)) (import "env" "longname2969" (func $internal2969)) (import "env" "longname2970" (func $internal2970)) (import "env" "longname2971" (func $internal2971)) (import "env" "longname2972" (func $internal2972)) (import "env" "longname2973" (func $internal2973)) (import "env" "longname2974" (func $internal2974)) (import "env" "longname2975" (func $internal2975)) (import "env" "longname2976" (func $internal2976)) (import "env" "longname2977" (func $internal2977)) (import "env" "longname2978" (func $internal2978)) (import "env" "longname2979" (func $internal2979)) (import "env" "longname2980" (func $internal2980)) (import "env" "longname2981" (func $internal2981)) (import "env" "longname2982" (func $internal2982)) (import "env" "longname2983" (func $internal2983)) (import "env" "longname2984" (func $internal2984)) (import "env" "longname2985" (func $internal2985)) (import "env" "longname2986" (func $internal2986)) (import "env" "longname2987" (func $internal2987)) (import "env" "longname2988" (func $internal2988)) (import "env" "longname2989" (func $internal2989)) (import "env" "longname2990" (func $internal2990)) (import "env" "longname2991" (func $internal2991)) (import "env" "longname2992" (func $internal2992)) (import "env" "longname2993" (func $internal2993)) (import "env" "longname2994" (func $internal2994)) (import "env" "longname2995" (func $internal2995)) (import "env" "longname2996" (func $internal2996)) (import "env" "longname2997" (func $internal2997)) (import "env" "longname2998" (func $internal2998)) (import "env" "longname2999" (func $internal2999)) (import "env" "longname3000" (func $internal3000)) (import "env" "longname3001" (func $internal3001)) (import "env" "longname3002" (func $internal3002)) (import "env" "longname3003" (func $internal3003)) (import "env" "longname3004" (func $internal3004)) (import "env" "longname3005" (func $internal3005)) (import "env" "longname3006" (func $internal3006)) (import "env" "longname3007" (func $internal3007)) (import "env" "longname3008" (func $internal3008)) (import "env" "longname3009" (func $internal3009)) (import "env" "longname3010" (func $internal3010)) (import "env" "longname3011" (func $internal3011)) (import "env" "longname3012" (func $internal3012)) (import "env" "longname3013" (func $internal3013)) (import "env" "longname3014" (func $internal3014)) (import "env" "longname3015" (func $internal3015)) (import "env" "longname3016" (func $internal3016)) (import "env" "longname3017" (func $internal3017)) (import "env" "longname3018" (func $internal3018)) (import "env" "longname3019" (func $internal3019)) (import "env" "longname3020" (func $internal3020)) (import "env" "longname3021" (func $internal3021)) (import "env" "longname3022" (func $internal3022)) (import "env" "longname3023" (func $internal3023)) (import "env" "longname3024" (func $internal3024)) (import "env" "longname3025" (func $internal3025)) (import "env" "longname3026" (func $internal3026)) (import "env" "longname3027" (func $internal3027)) (import "env" "longname3028" (func $internal3028)) (import "env" "longname3029" (func $internal3029)) (import "env" "longname3030" (func $internal3030)) (import "env" "longname3031" (func $internal3031)) (import "env" "longname3032" (func $internal3032)) (import "env" "longname3033" (func $internal3033)) (import "env" "longname3034" (func $internal3034)) (import "env" "longname3035" (func $internal3035)) (import "env" "longname3036" (func $internal3036)) (import "env" "longname3037" (func $internal3037)) (import "env" "longname3038" (func $internal3038)) (import "env" "longname3039" (func $internal3039)) (import "env" "longname3040" (func $internal3040)) (import "env" "longname3041" (func $internal3041)) (import "env" "longname3042" (func $internal3042)) (import "env" "longname3043" (func $internal3043)) (import "env" "longname3044" (func $internal3044)) (import "env" "longname3045" (func $internal3045)) (import "env" "longname3046" (func $internal3046)) (import "env" "longname3047" (func $internal3047)) (import "env" "longname3048" (func $internal3048)) (import "env" "longname3049" (func $internal3049)) (import "env" "longname3050" (func $internal3050)) (import "env" "longname3051" (func $internal3051)) (import "env" "longname3052" (func $internal3052)) (import "env" "longname3053" (func $internal3053)) (import "env" "longname3054" (func $internal3054)) (import "env" "longname3055" (func $internal3055)) (import "env" "longname3056" (func $internal3056)) (import "env" "longname3057" (func $internal3057)) (import "env" "longname3058" (func $internal3058)) (import "env" "longname3059" (func $internal3059)) (import "env" "longname3060" (func $internal3060)) (import "env" "longname3061" (func $internal3061)) (import "env" "longname3062" (func $internal3062)) (import "env" "longname3063" (func $internal3063)) (import "env" "longname3064" (func $internal3064)) (import "env" "longname3065" (func $internal3065)) (import "env" "longname3066" (func $internal3066)) (import "env" "longname3067" (func $internal3067)) (import "env" "longname3068" (func $internal3068)) (import "env" "longname3069" (func $internal3069)) (import "env" "longname3070" (func $internal3070)) (import "env" "longname3071" (func $internal3071)) (import "env" "longname3072" (func $internal3072)) (import "env" "longname3073" (func $internal3073)) (import "env" "longname3074" (func $internal3074)) (import "env" "longname3075" (func $internal3075)) (import "env" "longname3076" (func $internal3076)) (import "env" "longname3077" (func $internal3077)) (import "env" "longname3078" (func $internal3078)) (import "env" "longname3079" (func $internal3079)) (import "env" "longname3080" (func $internal3080)) (import "env" "longname3081" (func $internal3081)) (import "env" "longname3082" (func $internal3082)) (import "env" "longname3083" (func $internal3083)) (import "env" "longname3084" (func $internal3084)) (import "env" "longname3085" (func $internal3085)) (import "env" "longname3086" (func $internal3086)) (import "env" "longname3087" (func $internal3087)) (import "env" "longname3088" (func $internal3088)) (import "env" "longname3089" (func $internal3089)) (import "env" "longname3090" (func $internal3090)) (import "env" "longname3091" (func $internal3091)) (import "env" "longname3092" (func $internal3092)) (import "env" "longname3093" (func $internal3093)) (import "env" "longname3094" (func $internal3094)) (import "env" "longname3095" (func $internal3095)) (import "env" "longname3096" (func $internal3096)) (import "env" "longname3097" (func $internal3097)) (import "env" "longname3098" (func $internal3098)) (import "env" "longname3099" (func $internal3099)) (import "env" "longname3100" (func $internal3100)) (import "env" "longname3101" (func $internal3101)) (import "env" "longname3102" (func $internal3102)) (import "env" "longname3103" (func $internal3103)) (import "env" "longname3104" (func $internal3104)) (import "env" "longname3105" (func $internal3105)) (import "env" "longname3106" (func $internal3106)) (import "env" "longname3107" (func $internal3107)) (import "env" "longname3108" (func $internal3108)) (import "env" "longname3109" (func $internal3109)) (import "env" "longname3110" (func $internal3110)) (import "env" "longname3111" (func $internal3111)) (import "env" "longname3112" (func $internal3112)) (import "env" "longname3113" (func $internal3113)) (import "env" "longname3114" (func $internal3114)) (import "env" "longname3115" (func $internal3115)) (import "env" "longname3116" (func $internal3116)) (import "env" "longname3117" (func $internal3117)) (import "env" "longname3118" (func $internal3118)) (import "env" "longname3119" (func $internal3119)) (import "env" "longname3120" (func $internal3120)) (import "env" "longname3121" (func $internal3121)) (import "env" "longname3122" (func $internal3122)) (import "env" "longname3123" (func $internal3123)) (import "env" "longname3124" (func $internal3124)) (import "env" "longname3125" (func $internal3125)) (import "env" "longname3126" (func $internal3126)) (import "env" "longname3127" (func $internal3127)) (import "env" "longname3128" (func $internal3128)) (import "env" "longname3129" (func $internal3129)) (import "env" "longname3130" (func $internal3130)) (import "env" "longname3131" (func $internal3131)) (import "env" "longname3132" (func $internal3132)) (import "env" "longname3133" (func $internal3133)) (import "env" "longname3134" (func $internal3134)) (import "env" "longname3135" (func $internal3135)) (import "env" "longname3136" (func $internal3136)) (import "env" "longname3137" (func $internal3137)) (import "env" "longname3138" (func $internal3138)) (import "env" "longname3139" (func $internal3139)) (import "env" "longname3140" (func $internal3140)) (import "env" "longname3141" (func $internal3141)) (import "env" "longname3142" (func $internal3142)) (import "env" "longname3143" (func $internal3143)) (import "env" "longname3144" (func $internal3144)) (import "env" "longname3145" (func $internal3145)) (import "env" "longname3146" (func $internal3146)) (import "env" "longname3147" (func $internal3147)) (import "env" "longname3148" (func $internal3148)) (import "env" "longname3149" (func $internal3149)) (import "env" "longname3150" (func $internal3150)) (import "env" "longname3151" (func $internal3151)) (import "env" "longname3152" (func $internal3152)) (import "env" "longname3153" (func $internal3153)) (import "env" "longname3154" (func $internal3154)) (import "env" "longname3155" (func $internal3155)) (import "env" "longname3156" (func $internal3156)) (import "env" "longname3157" (func $internal3157)) (import "env" "longname3158" (func $internal3158)) (import "env" "longname3159" (func $internal3159)) (import "env" "longname3160" (func $internal3160)) (import "env" "longname3161" (func $internal3161)) (import "env" "longname3162" (func $internal3162)) (import "env" "longname3163" (func $internal3163)) (import "env" "longname3164" (func $internal3164)) (import "env" "longname3165" (func $internal3165)) (import "env" "longname3166" (func $internal3166)) (import "env" "longname3167" (func $internal3167)) (import "env" "longname3168" (func $internal3168)) (import "env" "longname3169" (func $internal3169)) (import "env" "longname3170" (func $internal3170)) (import "env" "longname3171" (func $internal3171)) (import "env" "longname3172" (func $internal3172)) (import "env" "longname3173" (func $internal3173)) (import "env" "longname3174" (func $internal3174)) (import "env" "longname3175" (func $internal3175)) (import "env" "longname3176" (func $internal3176)) (import "env" "longname3177" (func $internal3177)) (import "env" "longname3178" (func $internal3178)) (import "env" "longname3179" (func $internal3179)) (import "env" "longname3180" (func $internal3180)) (import "env" "longname3181" (func $internal3181)) (import "env" "longname3182" (func $internal3182)) (import "env" "longname3183" (func $internal3183)) (import "env" "longname3184" (func $internal3184)) (import "env" "longname3185" (func $internal3185)) (import "env" "longname3186" (func $internal3186)) (import "env" "longname3187" (func $internal3187)) (import "env" "longname3188" (func $internal3188)) (import "env" "longname3189" (func $internal3189)) (import "env" "longname3190" (func $internal3190)) (import "env" "longname3191" (func $internal3191)) (import "env" "longname3192" (func $internal3192)) (import "env" "longname3193" (func $internal3193)) (import "env" "longname3194" (func $internal3194)) (import "env" "longname3195" (func $internal3195)) (import "env" "longname3196" (func $internal3196)) (import "env" "longname3197" (func $internal3197)) (import "env" "longname3198" (func $internal3198)) (import "env" "longname3199" (func $internal3199)) (import "env" "longname3200" (func $internal3200)) (import "env" "longname3201" (func $internal3201)) (import "env" "longname3202" (func $internal3202)) (import "env" "longname3203" (func $internal3203)) (import "env" "longname3204" (func $internal3204)) (import "env" "longname3205" (func $internal3205)) (import "env" "longname3206" (func $internal3206)) (import "env" "longname3207" (func $internal3207)) (import "env" "longname3208" (func $internal3208)) (import "env" "longname3209" (func $internal3209)) (import "env" "longname3210" (func $internal3210)) (import "env" "longname3211" (func $internal3211)) (import "env" "longname3212" (func $internal3212)) (import "env" "longname3213" (func $internal3213)) (import "env" "longname3214" (func $internal3214)) (import "env" "longname3215" (func $internal3215)) (import "env" "longname3216" (func $internal3216)) (import "env" "longname3217" (func $internal3217)) (import "env" "longname3218" (func $internal3218)) (import "env" "longname3219" (func $internal3219)) (import "env" "longname3220" (func $internal3220)) (import "env" "longname3221" (func $internal3221)) (import "env" "longname3222" (func $internal3222)) (import "env" "longname3223" (func $internal3223)) (import "env" "longname3224" (func $internal3224)) (import "env" "longname3225" (func $internal3225)) (import "env" "longname3226" (func $internal3226)) (import "env" "longname3227" (func $internal3227)) (import "env" "longname3228" (func $internal3228)) (import "env" "longname3229" (func $internal3229)) (import "env" "longname3230" (func $internal3230)) (import "env" "longname3231" (func $internal3231)) (import "env" "longname3232" (func $internal3232)) (import "env" "longname3233" (func $internal3233)) (import "env" "longname3234" (func $internal3234)) (import "env" "longname3235" (func $internal3235)) (import "env" "longname3236" (func $internal3236)) (import "env" "longname3237" (func $internal3237)) (import "env" "longname3238" (func $internal3238)) (import "env" "longname3239" (func $internal3239)) (import "env" "longname3240" (func $internal3240)) (import "env" "longname3241" (func $internal3241)) (import "env" "longname3242" (func $internal3242)) (import "env" "longname3243" (func $internal3243)) (import "env" "longname3244" (func $internal3244)) (import "env" "longname3245" (func $internal3245)) (import "env" "longname3246" (func $internal3246)) (import "env" "longname3247" (func $internal3247)) (import "env" "longname3248" (func $internal3248)) (import "env" "longname3249" (func $internal3249)) (import "env" "longname3250" (func $internal3250)) (import "env" "longname3251" (func $internal3251)) (import "env" "longname3252" (func $internal3252)) (import "env" "longname3253" (func $internal3253)) (import "env" "longname3254" (func $internal3254)) (import "env" "longname3255" (func $internal3255)) (import "env" "longname3256" (func $internal3256)) (import "env" "longname3257" (func $internal3257)) (import "env" "longname3258" (func $internal3258)) (import "env" "longname3259" (func $internal3259)) (import "env" "longname3260" (func $internal3260)) (import "env" "longname3261" (func $internal3261)) (import "env" "longname3262" (func $internal3262)) (import "env" "longname3263" (func $internal3263)) (import "env" "longname3264" (func $internal3264)) (import "env" "longname3265" (func $internal3265)) (import "env" "longname3266" (func $internal3266)) (import "env" "longname3267" (func $internal3267)) (import "env" "longname3268" (func $internal3268)) (import "env" "longname3269" (func $internal3269)) (import "env" "longname3270" (func $internal3270)) (import "env" "longname3271" (func $internal3271)) (import "env" "longname3272" (func $internal3272)) (import "env" "longname3273" (func $internal3273)) (import "env" "longname3274" (func $internal3274)) (import "env" "longname3275" (func $internal3275)) (import "env" "longname3276" (func $internal3276)) (import "env" "longname3277" (func $internal3277)) (import "env" "longname3278" (func $internal3278)) (import "env" "longname3279" (func $internal3279)) (import "env" "longname3280" (func $internal3280)) (import "env" "longname3281" (func $internal3281)) (import "env" "longname3282" (func $internal3282)) (import "env" "longname3283" (func $internal3283)) (import "env" "longname3284" (func $internal3284)) (import "env" "longname3285" (func $internal3285)) (import "env" "longname3286" (func $internal3286)) (import "env" "longname3287" (func $internal3287)) (import "env" "longname3288" (func $internal3288)) (import "env" "longname3289" (func $internal3289)) (import "env" "longname3290" (func $internal3290)) (import "env" "longname3291" (func $internal3291)) (import "env" "longname3292" (func $internal3292)) (import "env" "longname3293" (func $internal3293)) (import "env" "longname3294" (func $internal3294)) (import "env" "longname3295" (func $internal3295)) (import "env" "longname3296" (func $internal3296)) (import "env" "longname3297" (func $internal3297)) (import "env" "longname3298" (func $internal3298)) (import "env" "longname3299" (func $internal3299)) (import "env" "longname3300" (func $internal3300)) (import "env" "longname3301" (func $internal3301)) (import "env" "longname3302" (func $internal3302)) (import "env" "longname3303" (func $internal3303)) (import "env" "longname3304" (func $internal3304)) (import "env" "longname3305" (func $internal3305)) (import "env" "longname3306" (func $internal3306)) (import "env" "longname3307" (func $internal3307)) (import "env" "longname3308" (func $internal3308)) (import "env" "longname3309" (func $internal3309)) (import "env" "longname3310" (func $internal3310)) (import "env" "longname3311" (func $internal3311)) (import "env" "longname3312" (func $internal3312)) (import "env" "longname3313" (func $internal3313)) (import "env" "longname3314" (func $internal3314)) (import "env" "longname3315" (func $internal3315)) (import "env" "longname3316" (func $internal3316)) (import "env" "longname3317" (func $internal3317)) (import "env" "longname3318" (func $internal3318)) (import "env" "longname3319" (func $internal3319)) (import "env" "longname3320" (func $internal3320)) (import "env" "longname3321" (func $internal3321)) (import "env" "longname3322" (func $internal3322)) (import "env" "longname3323" (func $internal3323)) (import "env" "longname3324" (func $internal3324)) (import "env" "longname3325" (func $internal3325)) (import "env" "longname3326" (func $internal3326)) (import "env" "longname3327" (func $internal3327)) (import "env" "longname3328" (func $internal3328)) (import "env" "longname3329" (func $internal3329)) (import "env" "longname3330" (func $internal3330)) (import "env" "longname3331" (func $internal3331)) (import "env" "longname3332" (func $internal3332)) (import "env" "longname3333" (func $internal3333)) (import "env" "longname3334" (func $internal3334)) (import "env" "longname3335" (func $internal3335)) (import "env" "longname3336" (func $internal3336)) (import "env" "longname3337" (func $internal3337)) (import "env" "longname3338" (func $internal3338)) (import "env" "longname3339" (func $internal3339)) (import "env" "longname3340" (func $internal3340)) (import "env" "longname3341" (func $internal3341)) (import "env" "longname3342" (func $internal3342)) (import "env" "longname3343" (func $internal3343)) (import "env" "longname3344" (func $internal3344)) (import "env" "longname3345" (func $internal3345)) (import "env" "longname3346" (func $internal3346)) (import "env" "longname3347" (func $internal3347)) (import "env" "longname3348" (func $internal3348)) (import "env" "longname3349" (func $internal3349)) (import "env" "longname3350" (func $internal3350)) (import "env" "longname3351" (func $internal3351)) (import "env" "longname3352" (func $internal3352)) (import "env" "longname3353" (func $internal3353)) (import "env" "longname3354" (func $internal3354)) (import "env" "longname3355" (func $internal3355)) (import "env" "longname3356" (func $internal3356)) (import "env" "longname3357" (func $internal3357)) (import "env" "longname3358" (func $internal3358)) (import "env" "longname3359" (func $internal3359)) (import "env" "longname3360" (func $internal3360)) (import "env" "longname3361" (func $internal3361)) (import "env" "longname3362" (func $internal3362)) (import "env" "longname3363" (func $internal3363)) (import "env" "longname3364" (func $internal3364)) (import "env" "longname3365" (func $internal3365)) (import "env" "longname3366" (func $internal3366)) (import "env" "longname3367" (func $internal3367)) (import "env" "longname3368" (func $internal3368)) (import "env" "longname3369" (func $internal3369)) (import "env" "longname3370" (func $internal3370)) (import "env" "longname3371" (func $internal3371)) (import "env" "longname3372" (func $internal3372)) (import "env" "longname3373" (func $internal3373)) (import "env" "longname3374" (func $internal3374)) (import "env" "longname3375" (func $internal3375)) (import "env" "longname3376" (func $internal3376)) (import "env" "longname3377" (func $internal3377)) (import "env" "longname3378" (func $internal3378)) (import "env" "longname3379" (func $internal3379)) (import "env" "longname3380" (func $internal3380)) (import "env" "longname3381" (func $internal3381)) (import "env" "longname3382" (func $internal3382)) (import "env" "longname3383" (func $internal3383)) (import "env" "longname3384" (func $internal3384)) (import "env" "longname3385" (func $internal3385)) (import "env" "longname3386" (func $internal3386)) (import "env" "longname3387" (func $internal3387)) (import "env" "longname3388" (func $internal3388)) (import "env" "longname3389" (func $internal3389)) (import "env" "longname3390" (func $internal3390)) (import "env" "longname3391" (func $internal3391)) (import "env" "longname3392" (func $internal3392)) (import "env" "longname3393" (func $internal3393)) (import "env" "longname3394" (func $internal3394)) (import "env" "longname3395" (func $internal3395)) (import "env" "longname3396" (func $internal3396)) (import "env" "longname3397" (func $internal3397)) (import "env" "longname3398" (func $internal3398)) (import "env" "longname3399" (func $internal3399)) (import "env" "longname3400" (func $internal3400)) (import "env" "longname3401" (func $internal3401)) (import "env" "longname3402" (func $internal3402)) (import "env" "longname3403" (func $internal3403)) (import "env" "longname3404" (func $internal3404)) (import "env" "longname3405" (func $internal3405)) (import "env" "longname3406" (func $internal3406)) (import "env" "longname3407" (func $internal3407)) (import "env" "longname3408" (func $internal3408)) (import "env" "longname3409" (func $internal3409)) (import "env" "longname3410" (func $internal3410)) (import "env" "longname3411" (func $internal3411)) (import "env" "longname3412" (func $internal3412)) (import "env" "longname3413" (func $internal3413)) (import "env" "longname3414" (func $internal3414)) (import "env" "longname3415" (func $internal3415)) (import "env" "longname3416" (func $internal3416)) (import "env" "longname3417" (func $internal3417)) (import "env" "longname3418" (func $internal3418)) (import "env" "longname3419" (func $internal3419)) (import "env" "longname3420" (func $internal3420)) (import "env" "longname3421" (func $internal3421)) (import "env" "longname3422" (func $internal3422)) (import "env" "longname3423" (func $internal3423)) (import "env" "longname3424" (func $internal3424)) (import "env" "longname3425" (func $internal3425)) (import "env" "longname3426" (func $internal3426)) (import "env" "longname3427" (func $internal3427)) (import "env" "longname3428" (func $internal3428)) (import "env" "longname3429" (func $internal3429)) (import "env" "longname3430" (func $internal3430)) (import "env" "longname3431" (func $internal3431)) (import "env" "longname3432" (func $internal3432)) (import "env" "longname3433" (func $internal3433)) (import "env" "longname3434" (func $internal3434)) (import "env" "longname3435" (func $internal3435)) (import "env" "longname3436" (func $internal3436)) (import "env" "longname3437" (func $internal3437)) (import "env" "longname3438" (func $internal3438)) (import "env" "longname3439" (func $internal3439)) (import "env" "longname3440" (func $internal3440)) (import "env" "longname3441" (func $internal3441)) (import "env" "longname3442" (func $internal3442)) (import "env" "longname3443" (func $internal3443)) (import "env" "longname3444" (func $internal3444)) (import "env" "longname3445" (func $internal3445)) (import "env" "longname3446" (func $internal3446)) (import "env" "longname3447" (func $internal3447)) (import "env" "longname3448" (func $internal3448)) (import "env" "longname3449" (func $internal3449)) (import "env" "longname3450" (func $internal3450)) (import "env" "longname3451" (func $internal3451)) (import "env" "longname3452" (func $internal3452)) (import "env" "longname3453" (func $internal3453)) (import "env" "longname3454" (func $internal3454)) (import "env" "longname3455" (func $internal3455)) (import "env" "longname3456" (func $internal3456)) (import "env" "longname3457" (func $internal3457)) (import "env" "longname3458" (func $internal3458)) (import "env" "longname3459" (func $internal3459)) (import "env" "longname3460" (func $internal3460)) (import "env" "longname3461" (func $internal3461)) (import "env" "longname3462" (func $internal3462)) (import "env" "longname3463" (func $internal3463)) (import "env" "longname3464" (func $internal3464)) (import "env" "longname3465" (func $internal3465)) (import "env" "longname3466" (func $internal3466)) (import "env" "longname3467" (func $internal3467)) (import "env" "longname3468" (func $internal3468)) (import "env" "longname3469" (func $internal3469)) (import "env" "longname3470" (func $internal3470)) (import "env" "longname3471" (func $internal3471)) (import "env" "longname3472" (func $internal3472)) (import "env" "longname3473" (func $internal3473)) (import "env" "longname3474" (func $internal3474)) (import "env" "longname3475" (func $internal3475)) (import "env" "longname3476" (func $internal3476)) (import "env" "longname3477" (func $internal3477)) (import "env" "longname3478" (func $internal3478)) (import "env" "longname3479" (func $internal3479)) (import "env" "longname3480" (func $internal3480)) (import "env" "longname3481" (func $internal3481)) (import "env" "longname3482" (func $internal3482)) (import "env" "longname3483" (func $internal3483)) (import "env" "longname3484" (func $internal3484)) (import "env" "longname3485" (func $internal3485)) (import "env" "longname3486" (func $internal3486)) (import "env" "longname3487" (func $internal3487)) (import "env" "longname3488" (func $internal3488)) (import "env" "longname3489" (func $internal3489)) (import "env" "longname3490" (func $internal3490)) (import "env" "longname3491" (func $internal3491)) (import "env" "longname3492" (func $internal3492)) (import "env" "longname3493" (func $internal3493)) (import "env" "longname3494" (func $internal3494)) (import "env" "longname3495" (func $internal3495)) (import "env" "longname3496" (func $internal3496)) (import "env" "longname3497" (func $internal3497)) (import "env" "longname3498" (func $internal3498)) (import "env" "longname3499" (func $internal3499)) (import "env" "longname3500" (func $internal3500)) (import "env" "longname3501" (func $internal3501)) (import "env" "longname3502" (func $internal3502)) (import "env" "longname3503" (func $internal3503)) (import "env" "longname3504" (func $internal3504)) (import "env" "longname3505" (func $internal3505)) (import "env" "longname3506" (func $internal3506)) (import "env" "longname3507" (func $internal3507)) (import "env" "longname3508" (func $internal3508)) (import "env" "longname3509" (func $internal3509)) (import "env" "longname3510" (func $internal3510)) (import "env" "longname3511" (func $internal3511)) (import "env" "longname3512" (func $internal3512)) (import "env" "longname3513" (func $internal3513)) (import "env" "longname3514" (func $internal3514)) (import "env" "longname3515" (func $internal3515)) (import "env" "longname3516" (func $internal3516)) (import "env" "longname3517" (func $internal3517)) (import "env" "longname3518" (func $internal3518)) (import "env" "longname3519" (func $internal3519)) (import "env" "longname3520" (func $internal3520)) (import "env" "longname3521" (func $internal3521)) (import "env" "longname3522" (func $internal3522)) (import "env" "longname3523" (func $internal3523)) (import "env" "longname3524" (func $internal3524)) (import "env" "longname3525" (func $internal3525)) (import "env" "longname3526" (func $internal3526)) (import "env" "longname3527" (func $internal3527)) (import "env" "longname3528" (func $internal3528)) (import "env" "longname3529" (func $internal3529)) (import "env" "longname3530" (func $internal3530)) (import "env" "longname3531" (func $internal3531)) (import "env" "longname3532" (func $internal3532)) (import "env" "longname3533" (func $internal3533)) (import "env" "longname3534" (func $internal3534)) (import "env" "longname3535" (func $internal3535)) (import "env" "longname3536" (func $internal3536)) (import "env" "longname3537" (func $internal3537)) (import "env" "longname3538" (func $internal3538)) (import "env" "longname3539" (func $internal3539)) (import "env" "longname3540" (func $internal3540)) (import "env" "longname3541" (func $internal3541)) (import "env" "longname3542" (func $internal3542)) (import "env" "longname3543" (func $internal3543)) (import "env" "longname3544" (func $internal3544)) (import "env" "longname3545" (func $internal3545)) (import "env" "longname3546" (func $internal3546)) (import "env" "longname3547" (func $internal3547)) (import "env" "longname3548" (func $internal3548)) (import "env" "longname3549" (func $internal3549)) (import "env" "longname3550" (func $internal3550)) (import "env" "longname3551" (func $internal3551)) (import "env" "longname3552" (func $internal3552)) (import "env" "longname3553" (func $internal3553)) (import "env" "longname3554" (func $internal3554)) (import "env" "longname3555" (func $internal3555)) (import "env" "longname3556" (func $internal3556)) (import "env" "longname3557" (func $internal3557)) (import "env" "longname3558" (func $internal3558)) (import "env" "longname3559" (func $internal3559)) (import "env" "longname3560" (func $internal3560)) (import "env" "longname3561" (func $internal3561)) (import "env" "longname3562" (func $internal3562)) (import "env" "longname3563" (func $internal3563)) (import "env" "longname3564" (func $internal3564)) (import "env" "longname3565" (func $internal3565)) (import "env" "longname3566" (func $internal3566)) (import "env" "longname3567" (func $internal3567)) (import "env" "longname3568" (func $internal3568)) (import "env" "longname3569" (func $internal3569)) (import "env" "longname3570" (func $internal3570)) (import "env" "longname3571" (func $internal3571)) (import "env" "longname3572" (func $internal3572)) (import "env" "longname3573" (func $internal3573)) (import "env" "longname3574" (func $internal3574)) (import "env" "longname3575" (func $internal3575)) (import "env" "longname3576" (func $internal3576)) (import "env" "longname3577" (func $internal3577)) (import "env" "longname3578" (func $internal3578)) (import "env" "longname3579" (func $internal3579)) (import "env" "longname3580" (func $internal3580)) (import "env" "longname3581" (func $internal3581)) (import "env" "longname3582" (func $internal3582)) (import "env" "longname3583" (func $internal3583)) (import "env" "longname3584" (func $internal3584)) (import "env" "longname3585" (func $internal3585)) (import "env" "longname3586" (func $internal3586)) (import "env" "longname3587" (func $internal3587)) (import "env" "longname3588" (func $internal3588)) (import "env" "longname3589" (func $internal3589)) (import "env" "longname3590" (func $internal3590)) (import "env" "longname3591" (func $internal3591)) (import "env" "longname3592" (func $internal3592)) (import "env" "longname3593" (func $internal3593)) (import "env" "longname3594" (func $internal3594)) (import "env" "longname3595" (func $internal3595)) (import "env" "longname3596" (func $internal3596)) (import "env" "longname3597" (func $internal3597)) (import "env" "longname3598" (func $internal3598)) (import "env" "longname3599" (func $internal3599)) (import "env" "longname3600" (func $internal3600)) (import "env" "longname3601" (func $internal3601)) (import "env" "longname3602" (func $internal3602)) (import "env" "longname3603" (func $internal3603)) (import "env" "longname3604" (func $internal3604)) (import "env" "longname3605" (func $internal3605)) (import "env" "longname3606" (func $internal3606)) (import "env" "longname3607" (func $internal3607)) (import "env" "longname3608" (func $internal3608)) (import "env" "longname3609" (func $internal3609)) (import "env" "longname3610" (func $internal3610)) (import "env" "longname3611" (func $internal3611)) (import "env" "longname3612" (func $internal3612)) (import "env" "longname3613" (func $internal3613)) (import "env" "longname3614" (func $internal3614)) (import "env" "longname3615" (func $internal3615)) (import "env" "longname3616" (func $internal3616)) (import "env" "longname3617" (func $internal3617)) (import "env" "longname3618" (func $internal3618)) (import "env" "longname3619" (func $internal3619)) (import "env" "longname3620" (func $internal3620)) (import "env" "longname3621" (func $internal3621)) (import "env" "longname3622" (func $internal3622)) (import "env" "longname3623" (func $internal3623)) (import "env" "longname3624" (func $internal3624)) (import "env" "longname3625" (func $internal3625)) (import "env" "longname3626" (func $internal3626)) (import "env" "longname3627" (func $internal3627)) (import "env" "longname3628" (func $internal3628)) (import "env" "longname3629" (func $internal3629)) (import "env" "longname3630" (func $internal3630)) (import "env" "longname3631" (func $internal3631)) (import "env" "longname3632" (func $internal3632)) (import "env" "longname3633" (func $internal3633)) (import "env" "longname3634" (func $internal3634)) (import "env" "longname3635" (func $internal3635)) (import "env" "longname3636" (func $internal3636)) (import "env" "longname3637" (func $internal3637)) (import "env" "longname3638" (func $internal3638)) (import "env" "longname3639" (func $internal3639)) (import "env" "longname3640" (func $internal3640)) (import "env" "longname3641" (func $internal3641)) (import "env" "longname3642" (func $internal3642)) (import "env" "longname3643" (func $internal3643)) (import "env" "longname3644" (func $internal3644)) (import "env" "longname3645" (func $internal3645)) (import "env" "longname3646" (func $internal3646)) (import "env" "longname3647" (func $internal3647)) (import "env" "longname3648" (func $internal3648)) (import "env" "longname3649" (func $internal3649)) (import "env" "longname3650" (func $internal3650)) (import "env" "longname3651" (func $internal3651)) (import "env" "longname3652" (func $internal3652)) (import "env" "longname3653" (func $internal3653)) (import "env" "longname3654" (func $internal3654)) (import "env" "longname3655" (func $internal3655)) (import "env" "longname3656" (func $internal3656)) (import "env" "longname3657" (func $internal3657)) (import "env" "longname3658" (func $internal3658)) (import "env" "longname3659" (func $internal3659)) (import "env" "longname3660" (func $internal3660)) (import "env" "longname3661" (func $internal3661)) (import "env" "longname3662" (func $internal3662)) (import "env" "longname3663" (func $internal3663)) (import "env" "longname3664" (func $internal3664)) (import "env" "longname3665" (func $internal3665)) (import "env" "longname3666" (func $internal3666)) (import "env" "longname3667" (func $internal3667)) (import "env" "longname3668" (func $internal3668)) (import "env" "longname3669" (func $internal3669)) (import "env" "longname3670" (func $internal3670)) (import "env" "longname3671" (func $internal3671)) (import "env" "longname3672" (func $internal3672)) (import "env" "longname3673" (func $internal3673)) (import "env" "longname3674" (func $internal3674)) (import "env" "longname3675" (func $internal3675)) (import "env" "longname3676" (func $internal3676)) (import "env" "longname3677" (func $internal3677)) (import "env" "longname3678" (func $internal3678)) (import "env" "longname3679" (func $internal3679)) (import "env" "longname3680" (func $internal3680)) (import "env" "longname3681" (func $internal3681)) (import "env" "longname3682" (func $internal3682)) (import "env" "longname3683" (func $internal3683)) (import "env" "longname3684" (func $internal3684)) (import "env" "longname3685" (func $internal3685)) (import "env" "longname3686" (func $internal3686)) (import "env" "longname3687" (func $internal3687)) (import "env" "longname3688" (func $internal3688)) (import "env" "longname3689" (func $internal3689)) (import "env" "longname3690" (func $internal3690)) (import "env" "longname3691" (func $internal3691)) (import "env" "longname3692" (func $internal3692)) (import "env" "longname3693" (func $internal3693)) (import "env" "longname3694" (func $internal3694)) (import "env" "longname3695" (func $internal3695)) (import "env" "longname3696" (func $internal3696)) (import "env" "longname3697" (func $internal3697)) (import "env" "longname3698" (func $internal3698)) (import "env" "longname3699" (func $internal3699)) (import "env" "longname3700" (func $internal3700)) (import "env" "longname3701" (func $internal3701)) (import "env" "longname3702" (func $internal3702)) (import "env" "longname3703" (func $internal3703)) (import "env" "longname3704" (func $internal3704)) (import "env" "longname3705" (func $internal3705)) (import "env" "longname3706" (func $internal3706)) (import "env" "longname3707" (func $internal3707)) (import "env" "longname3708" (func $internal3708)) (import "env" "longname3709" (func $internal3709)) (import "env" "longname3710" (func $internal3710)) (import "env" "longname3711" (func $internal3711)) (import "env" "longname3712" (func $internal3712)) (import "env" "longname3713" (func $internal3713)) (import "env" "longname3714" (func $internal3714)) (import "env" "longname3715" (func $internal3715)) (import "env" "longname3716" (func $internal3716)) (import "env" "longname3717" (func $internal3717)) (import "env" "longname3718" (func $internal3718)) (import "env" "longname3719" (func $internal3719)) (import "env" "longname3720" (func $internal3720)) (import "env" "longname3721" (func $internal3721)) (import "env" "longname3722" (func $internal3722)) (import "env" "longname3723" (func $internal3723)) (import "env" "longname3724" (func $internal3724)) (import "env" "longname3725" (func $internal3725)) (import "env" "longname3726" (func $internal3726)) (import "env" "longname3727" (func $internal3727)) (import "env" "longname3728" (func $internal3728)) (import "env" "longname3729" (func $internal3729)) (import "env" "longname3730" (func $internal3730)) (import "env" "longname3731" (func $internal3731)) (import "env" "longname3732" (func $internal3732)) (import "env" "longname3733" (func $internal3733)) (import "env" "longname3734" (func $internal3734)) (import "env" "longname3735" (func $internal3735)) (import "env" "longname3736" (func $internal3736)) (import "env" "longname3737" (func $internal3737)) (import "env" "longname3738" (func $internal3738)) (import "env" "longname3739" (func $internal3739)) (import "env" "longname3740" (func $internal3740)) (import "env" "longname3741" (func $internal3741)) (import "env" "longname3742" (func $internal3742)) (import "env" "longname3743" (func $internal3743)) (import "env" "longname3744" (func $internal3744)) (import "env" "longname3745" (func $internal3745)) (import "env" "longname3746" (func $internal3746)) (import "env" "longname3747" (func $internal3747)) (import "env" "longname3748" (func $internal3748)) (import "env" "longname3749" (func $internal3749)) (import "env" "longname3750" (func $internal3750)) (import "env" "longname3751" (func $internal3751)) (import "env" "longname3752" (func $internal3752)) (import "env" "longname3753" (func $internal3753)) (import "env" "longname3754" (func $internal3754)) (import "env" "longname3755" (func $internal3755)) (import "env" "longname3756" (func $internal3756)) (import "env" "longname3757" (func $internal3757)) (import "env" "longname3758" (func $internal3758)) (import "env" "longname3759" (func $internal3759)) (import "env" "longname3760" (func $internal3760)) (import "env" "longname3761" (func $internal3761)) (import "env" "longname3762" (func $internal3762)) (import "env" "longname3763" (func $internal3763)) (import "env" "longname3764" (func $internal3764)) (import "env" "longname3765" (func $internal3765)) (import "env" "longname3766" (func $internal3766)) (import "env" "longname3767" (func $internal3767)) (import "env" "longname3768" (func $internal3768)) (import "env" "longname3769" (func $internal3769)) (import "env" "longname3770" (func $internal3770)) (import "env" "longname3771" (func $internal3771)) (import "env" "longname3772" (func $internal3772)) (import "env" "longname3773" (func $internal3773)) (import "env" "longname3774" (func $internal3774)) (import "env" "longname3775" (func $internal3775)) (import "env" "longname3776" (func $internal3776)) (import "env" "longname3777" (func $internal3777)) (import "env" "longname3778" (func $internal3778)) (import "env" "longname3779" (func $internal3779)) (import "env" "longname3780" (func $internal3780)) (import "env" "longname3781" (func $internal3781)) (import "env" "longname3782" (func $internal3782)) (import "env" "longname3783" (func $internal3783)) (import "env" "longname3784" (func $internal3784)) (import "env" "longname3785" (func $internal3785)) (import "env" "longname3786" (func $internal3786)) (import "env" "longname3787" (func $internal3787)) (import "env" "longname3788" (func $internal3788)) (import "env" "longname3789" (func $internal3789)) (import "env" "longname3790" (func $internal3790)) (import "env" "longname3791" (func $internal3791)) (import "env" "longname3792" (func $internal3792)) (import "env" "longname3793" (func $internal3793)) (import "env" "longname3794" (func $internal3794)) (import "env" "longname3795" (func $internal3795)) (import "env" "longname3796" (func $internal3796)) (import "env" "longname3797" (func $internal3797)) (import "env" "longname3798" (func $internal3798)) (import "env" "longname3799" (func $internal3799)) (import "env" "longname3800" (func $internal3800)) (import "env" "longname3801" (func $internal3801)) (import "env" "longname3802" (func $internal3802)) (import "env" "longname3803" (func $internal3803)) (import "env" "longname3804" (func $internal3804)) (import "env" "longname3805" (func $internal3805)) (import "env" "longname3806" (func $internal3806)) (import "env" "longname3807" (func $internal3807)) (import "env" "longname3808" (func $internal3808)) (import "env" "longname3809" (func $internal3809)) (import "env" "longname3810" (func $internal3810)) (import "env" "longname3811" (func $internal3811)) (import "env" "longname3812" (func $internal3812)) (import "env" "longname3813" (func $internal3813)) (import "env" "longname3814" (func $internal3814)) (import "env" "longname3815" (func $internal3815)) (import "env" "longname3816" (func $internal3816)) (import "env" "longname3817" (func $internal3817)) (import "env" "longname3818" (func $internal3818)) (import "env" "longname3819" (func $internal3819)) (import "env" "longname3820" (func $internal3820)) (import "env" "longname3821" (func $internal3821)) (import "env" "longname3822" (func $internal3822)) (import "env" "longname3823" (func $internal3823)) (import "env" "longname3824" (func $internal3824)) (import "env" "longname3825" (func $internal3825)) (import "env" "longname3826" (func $internal3826)) (import "env" "longname3827" (func $internal3827)) (import "env" "longname3828" (func $internal3828)) (import "env" "longname3829" (func $internal3829)) (import "env" "longname3830" (func $internal3830)) (import "env" "longname3831" (func $internal3831)) (import "env" "longname3832" (func $internal3832)) (import "env" "longname3833" (func $internal3833)) (import "env" "longname3834" (func $internal3834)) (import "env" "longname3835" (func $internal3835)) (import "env" "longname3836" (func $internal3836)) (import "env" "longname3837" (func $internal3837)) (import "env" "longname3838" (func $internal3838)) (import "env" "longname3839" (func $internal3839)) (import "env" "longname3840" (func $internal3840)) (import "env" "longname3841" (func $internal3841)) (import "env" "longname3842" (func $internal3842)) (import "env" "longname3843" (func $internal3843)) (import "env" "longname3844" (func $internal3844)) (import "env" "longname3845" (func $internal3845)) (import "env" "longname3846" (func $internal3846)) (import "env" "longname3847" (func $internal3847)) (import "env" "longname3848" (func $internal3848)) (import "env" "longname3849" (func $internal3849)) (import "env" "longname3850" (func $internal3850)) (import "env" "longname3851" (func $internal3851)) (import "env" "longname3852" (func $internal3852)) (import "env" "longname3853" (func $internal3853)) (import "env" "longname3854" (func $internal3854)) (import "env" "longname3855" (func $internal3855)) (import "env" "longname3856" (func $internal3856)) (import "env" "longname3857" (func $internal3857)) (import "env" "longname3858" (func $internal3858)) (import "env" "longname3859" (func $internal3859)) (import "env" "longname3860" (func $internal3860)) (import "env" "longname3861" (func $internal3861)) (import "env" "longname3862" (func $internal3862)) (import "env" "longname3863" (func $internal3863)) (import "env" "longname3864" (func $internal3864)) (import "env" "longname3865" (func $internal3865)) (import "env" "longname3866" (func $internal3866)) (import "env" "longname3867" (func $internal3867)) (import "env" "longname3868" (func $internal3868)) (import "env" "longname3869" (func $internal3869)) (import "env" "longname3870" (func $internal3870)) (import "env" "longname3871" (func $internal3871)) (import "env" "longname3872" (func $internal3872)) (import "env" "longname3873" (func $internal3873)) (import "env" "longname3874" (func $internal3874)) (import "env" "longname3875" (func $internal3875)) (import "env" "longname3876" (func $internal3876)) (import "env" "longname3877" (func $internal3877)) (import "env" "longname3878" (func $internal3878)) (import "env" "longname3879" (func $internal3879)) (import "env" "longname3880" (func $internal3880)) (import "env" "longname3881" (func $internal3881)) (import "env" "longname3882" (func $internal3882)) (import "env" "longname3883" (func $internal3883)) (import "env" "longname3884" (func $internal3884)) (import "env" "longname3885" (func $internal3885)) (import "env" "longname3886" (func $internal3886)) (import "env" "longname3887" (func $internal3887)) (import "env" "longname3888" (func $internal3888)) (import "env" "longname3889" (func $internal3889)) (import "env" "longname3890" (func $internal3890)) (import "env" "longname3891" (func $internal3891)) (import "env" "longname3892" (func $internal3892)) (import "env" "longname3893" (func $internal3893)) (import "env" "longname3894" (func $internal3894)) (import "env" "longname3895" (func $internal3895)) (import "env" "longname3896" (func $internal3896)) (import "env" "longname3897" (func $internal3897)) (import "env" "longname3898" (func $internal3898)) (import "env" "longname3899" (func $internal3899)) (import "env" "longname3900" (func $internal3900)) (import "env" "longname3901" (func $internal3901)) (import "env" "longname3902" (func $internal3902)) (import "env" "longname3903" (func $internal3903)) (import "env" "longname3904" (func $internal3904)) (import "env" "longname3905" (func $internal3905)) (import "env" "longname3906" (func $internal3906)) (import "env" "longname3907" (func $internal3907)) (import "env" "longname3908" (func $internal3908)) (import "env" "longname3909" (func $internal3909)) (import "env" "longname3910" (func $internal3910)) (import "env" "longname3911" (func $internal3911)) (import "env" "longname3912" (func $internal3912)) (import "env" "longname3913" (func $internal3913)) (import "env" "longname3914" (func $internal3914)) (import "env" "longname3915" (func $internal3915)) (import "env" "longname3916" (func $internal3916)) (import "env" "longname3917" (func $internal3917)) (import "env" "longname3918" (func $internal3918)) (import "env" "longname3919" (func $internal3919)) (import "env" "longname3920" (func $internal3920)) (import "env" "longname3921" (func $internal3921)) (import "env" "longname3922" (func $internal3922)) (import "env" "longname3923" (func $internal3923)) (import "env" "longname3924" (func $internal3924)) (import "env" "longname3925" (func $internal3925)) (import "env" "longname3926" (func $internal3926)) (import "env" "longname3927" (func $internal3927)) (import "env" "longname3928" (func $internal3928)) (import "env" "longname3929" (func $internal3929)) (import "env" "longname3930" (func $internal3930)) (import "env" "longname3931" (func $internal3931)) (import "env" "longname3932" (func $internal3932)) (import "env" "longname3933" (func $internal3933)) (import "env" "longname3934" (func $internal3934)) (import "env" "longname3935" (func $internal3935)) (import "env" "longname3936" (func $internal3936)) (import "env" "longname3937" (func $internal3937)) (import "env" "longname3938" (func $internal3938)) (import "env" "longname3939" (func $internal3939)) (import "env" "longname3940" (func $internal3940)) (import "env" "longname3941" (func $internal3941)) (import "env" "longname3942" (func $internal3942)) (import "env" "longname3943" (func $internal3943)) (import "env" "longname3944" (func $internal3944)) (import "env" "longname3945" (func $internal3945)) (import "env" "longname3946" (func $internal3946)) (import "env" "longname3947" (func $internal3947)) (import "env" "longname3948" (func $internal3948)) (import "env" "longname3949" (func $internal3949)) (import "env" "longname3950" (func $internal3950)) (import "env" "longname3951" (func $internal3951)) (import "env" "longname3952" (func $internal3952)) (import "env" "longname3953" (func $internal3953)) (import "env" "longname3954" (func $internal3954)) (import "env" "longname3955" (func $internal3955)) (import "env" "longname3956" (func $internal3956)) (import "env" "longname3957" (func $internal3957)) (import "env" "longname3958" (func $internal3958)) (import "env" "longname3959" (func $internal3959)) (import "env" "longname3960" (func $internal3960)) (import "env" "longname3961" (func $internal3961)) (import "env" "longname3962" (func $internal3962)) (import "env" "longname3963" (func $internal3963)) (import "env" "longname3964" (func $internal3964)) (import "env" "longname3965" (func $internal3965)) (import "env" "longname3966" (func $internal3966)) (import "env" "longname3967" (func $internal3967)) (import "env" "longname3968" (func $internal3968)) (import "env" "longname3969" (func $internal3969)) (import "env" "longname3970" (func $internal3970)) (import "env" "longname3971" (func $internal3971)) (import "env" "longname3972" (func $internal3972)) (import "env" "longname3973" (func $internal3973)) (import "env" "longname3974" (func $internal3974)) (import "env" "longname3975" (func $internal3975)) (import "env" "longname3976" (func $internal3976)) (import "env" "longname3977" (func $internal3977)) (import "env" "longname3978" (func $internal3978)) (import "env" "longname3979" (func $internal3979)) (import "env" "longname3980" (func $internal3980)) (import "env" "longname3981" (func $internal3981)) (import "env" "longname3982" (func $internal3982)) (import "env" "longname3983" (func $internal3983)) (import "env" "longname3984" (func $internal3984)) (import "env" "longname3985" (func $internal3985)) (import "env" "longname3986" (func $internal3986)) (import "env" "longname3987" (func $internal3987)) (import "env" "longname3988" (func $internal3988)) (import "env" "longname3989" (func $internal3989)) (import "env" "longname3990" (func $internal3990)) (import "env" "longname3991" (func $internal3991)) (import "env" "longname3992" (func $internal3992)) (import "env" "longname3993" (func $internal3993)) (import "env" "longname3994" (func $internal3994)) (import "env" "longname3995" (func $internal3995)) (import "env" "longname3996" (func $internal3996)) (import "env" "longname3997" (func $internal3997)) (import "env" "longname3998" (func $internal3998)) (import "env" "longname3999" (func $internal3999)) (import "env" "longname4000" (func $internal4000)) (import "env" "longname4001" (func $internal4001)) (import "env" "longname4002" (func $internal4002)) (import "env" "longname4003" (func $internal4003)) (import "env" "longname4004" (func $internal4004)) (import "env" "longname4005" (func $internal4005)) (import "env" "longname4006" (func $internal4006)) (import "env" "longname4007" (func $internal4007)) (import "env" "longname4008" (func $internal4008)) (import "env" "longname4009" (func $internal4009)) (import "env" "longname4010" (func $internal4010)) (import "env" "longname4011" (func $internal4011)) (import "env" "longname4012" (func $internal4012)) (import "env" "longname4013" (func $internal4013)) (import "env" "longname4014" (func $internal4014)) (import "env" "longname4015" (func $internal4015)) (import "env" "longname4016" (func $internal4016)) (import "env" "longname4017" (func $internal4017)) (import "env" "longname4018" (func $internal4018)) (import "env" "longname4019" (func $internal4019)) (import "env" "longname4020" (func $internal4020)) (import "env" "longname4021" (func $internal4021)) (import "env" "longname4022" (func $internal4022)) (import "env" "longname4023" (func $internal4023)) (import "env" "longname4024" (func $internal4024)) (import "env" "longname4025" (func $internal4025)) (import "env" "longname4026" (func $internal4026)) (import "env" "longname4027" (func $internal4027)) (import "env" "longname4028" (func $internal4028)) (import "env" "longname4029" (func $internal4029)) (import "env" "longname4030" (func $internal4030)) (import "env" "longname4031" (func $internal4031)) (import "env" "longname4032" (func $internal4032)) (import "env" "longname4033" (func $internal4033)) (import "env" "longname4034" (func $internal4034)) (import "env" "longname4035" (func $internal4035)) (import "env" "longname4036" (func $internal4036)) (import "env" "longname4037" (func $internal4037)) (import "env" "longname4038" (func $internal4038)) (import "env" "longname4039" (func $internal4039)) (import "env" "longname4040" (func $internal4040)) (import "env" "longname4041" (func $internal4041)) (import "env" "longname4042" (func $internal4042)) (import "env" "longname4043" (func $internal4043)) (import "env" "longname4044" (func $internal4044)) (import "env" "longname4045" (func $internal4045)) (import "env" "longname4046" (func $internal4046)) (import "env" "longname4047" (func $internal4047)) (import "env" "longname4048" (func $internal4048)) (import "env" "longname4049" (func $internal4049)) (import "env" "longname4050" (func $internal4050)) (import "env" "longname4051" (func $internal4051)) (import "env" "longname4052" (func $internal4052)) (import "env" "longname4053" (func $internal4053)) (import "env" "longname4054" (func $internal4054)) (import "env" "longname4055" (func $internal4055)) (import "env" "longname4056" (func $internal4056)) (import "env" "longname4057" (func $internal4057)) (import "env" "longname4058" (func $internal4058)) (import "env" "longname4059" (func $internal4059)) (import "env" "longname4060" (func $internal4060)) (import "env" "longname4061" (func $internal4061)) (import "env" "longname4062" (func $internal4062)) (import "env" "longname4063" (func $internal4063)) (import "env" "longname4064" (func $internal4064)) (import "env" "longname4065" (func $internal4065)) (import "env" "longname4066" (func $internal4066)) (import "env" "longname4067" (func $internal4067)) (import "env" "longname4068" (func $internal4068)) (import "env" "longname4069" (func $internal4069)) (import "env" "longname4070" (func $internal4070)) (import "env" "longname4071" (func $internal4071)) (import "env" "longname4072" (func $internal4072)) (import "env" "longname4073" (func $internal4073)) (import "env" "longname4074" (func $internal4074)) (import "env" "longname4075" (func $internal4075)) (import "env" "longname4076" (func $internal4076)) (import "env" "longname4077" (func $internal4077)) (import "env" "longname4078" (func $internal4078)) (import "env" "longname4079" (func $internal4079)) (import "env" "longname4080" (func $internal4080)) (import "env" "longname4081" (func $internal4081)) (import "env" "longname4082" (func $internal4082)) (import "env" "longname4083" (func $internal4083)) (import "env" "longname4084" (func $internal4084)) (import "env" "longname4085" (func $internal4085)) (import "env" "longname4086" (func $internal4086)) (import "env" "longname4087" (func $internal4087)) (import "env" "longname4088" (func $internal4088)) (import "env" "longname4089" (func $internal4089)) (import "env" "longname4090" (func $internal4090)) (import "env" "longname4091" (func $internal4091)) (import "env" "longname4092" (func $internal4092)) (import "env" "longname4093" (func $internal4093)) (import "env" "longname4094" (func $internal4094)) (import "env" "longname4095" (func $internal4095)) (import "env" "longname4096" (func $internal4096)) (import "env" "longname4097" (func $internal4097)) (import "env" "longname4098" (func $internal4098)) (import "env" "longname4099" (func $internal4099)) (import "env" "longname4100" (func $internal4100)) (import "env" "longname4101" (func $internal4101)) (import "env" "longname4102" (func $internal4102)) (import "env" "longname4103" (func $internal4103)) (import "env" "longname4104" (func $internal4104)) (import "env" "longname4105" (func $internal4105)) (import "env" "longname4106" (func $internal4106)) (import "env" "longname4107" (func $internal4107)) (import "env" "longname4108" (func $internal4108)) (import "env" "longname4109" (func $internal4109)) (import "env" "longname4110" (func $internal4110)) (import "env" "longname4111" (func $internal4111)) (import "env" "longname4112" (func $internal4112)) (import "env" "longname4113" (func $internal4113)) (import "env" "longname4114" (func $internal4114)) (import "env" "longname4115" (func $internal4115)) (import "env" "longname4116" (func $internal4116)) (import "env" "longname4117" (func $internal4117)) (import "env" "longname4118" (func $internal4118)) (import "env" "longname4119" (func $internal4119)) (import "env" "longname4120" (func $internal4120)) (import "env" "longname4121" (func $internal4121)) (import "env" "longname4122" (func $internal4122)) (import "env" "longname4123" (func $internal4123)) (import "env" "longname4124" (func $internal4124)) (import "env" "longname4125" (func $internal4125)) (import "env" "longname4126" (func $internal4126)) (import "env" "longname4127" (func $internal4127)) (import "env" "longname4128" (func $internal4128)) (import "env" "longname4129" (func $internal4129)) (import "env" "longname4130" (func $internal4130)) (import "env" "longname4131" (func $internal4131)) (import "env" "longname4132" (func $internal4132)) (import "env" "longname4133" (func $internal4133)) (import "env" "longname4134" (func $internal4134)) (import "env" "longname4135" (func $internal4135)) (import "env" "longname4136" (func $internal4136)) (import "env" "longname4137" (func $internal4137)) (import "env" "longname4138" (func $internal4138)) (import "env" "longname4139" (func $internal4139)) (import "env" "longname4140" (func $internal4140)) (import "env" "longname4141" (func $internal4141)) (import "env" "longname4142" (func $internal4142)) (import "env" "longname4143" (func $internal4143)) (import "env" "longname4144" (func $internal4144)) (import "env" "longname4145" (func $internal4145)) (import "env" "longname4146" (func $internal4146)) (import "env" "longname4147" (func $internal4147)) (import "env" "longname4148" (func $internal4148)) (import "env" "longname4149" (func $internal4149)) (import "env" "longname4150" (func $internal4150)) (import "env" "longname4151" (func $internal4151)) (import "env" "longname4152" (func $internal4152)) (import "env" "longname4153" (func $internal4153)) (import "env" "longname4154" (func $internal4154)) (import "env" "longname4155" (func $internal4155)) (import "env" "longname4156" (func $internal4156)) (import "env" "longname4157" (func $internal4157)) (import "env" "longname4158" (func $internal4158)) (import "env" "longname4159" (func $internal4159)) (import "env" "longname4160" (func $internal4160)) (import "env" "longname4161" (func $internal4161)) (import "env" "longname4162" (func $internal4162)) (import "env" "longname4163" (func $internal4163)) (import "env" "longname4164" (func $internal4164)) (import "env" "longname4165" (func $internal4165)) (import "env" "longname4166" (func $internal4166)) (import "env" "longname4167" (func $internal4167)) (import "env" "longname4168" (func $internal4168)) (import "env" "longname4169" (func $internal4169)) (import "env" "longname4170" (func $internal4170)) (import "env" "longname4171" (func $internal4171)) (import "env" "longname4172" (func $internal4172)) (import "env" "longname4173" (func $internal4173)) (import "env" "longname4174" (func $internal4174)) (import "env" "longname4175" (func $internal4175)) (import "env" "longname4176" (func $internal4176)) (import "env" "longname4177" (func $internal4177)) (import "env" "longname4178" (func $internal4178)) (import "env" "longname4179" (func $internal4179)) (import "env" "longname4180" (func $internal4180)) (import "env" "longname4181" (func $internal4181)) (import "env" "longname4182" (func $internal4182)) (import "env" "longname4183" (func $internal4183)) (import "env" "longname4184" (func $internal4184)) (import "env" "longname4185" (func $internal4185)) (import "env" "longname4186" (func $internal4186)) (import "env" "longname4187" (func $internal4187)) (import "env" "longname4188" (func $internal4188)) (import "env" "longname4189" (func $internal4189)) (import "env" "longname4190" (func $internal4190)) (import "env" "longname4191" (func $internal4191)) (import "env" "longname4192" (func $internal4192)) (import "env" "longname4193" (func $internal4193)) (import "env" "longname4194" (func $internal4194)) (import "env" "longname4195" (func $internal4195)) (import "env" "longname4196" (func $internal4196)) (import "env" "longname4197" (func $internal4197)) (import "env" "longname4198" (func $internal4198)) (import "env" "longname4199" (func $internal4199)) (import "env" "longname4200" (func $internal4200)) (import "env" "longname4201" (func $internal4201)) (import "env" "longname4202" (func $internal4202)) (import "env" "longname4203" (func $internal4203)) (import "env" "longname4204" (func $internal4204)) (import "env" "longname4205" (func $internal4205)) (import "env" "longname4206" (func $internal4206)) (import "env" "longname4207" (func $internal4207)) (import "env" "longname4208" (func $internal4208)) (import "env" "longname4209" (func $internal4209)) (import "env" "longname4210" (func $internal4210)) (import "env" "longname4211" (func $internal4211)) (import "env" "longname4212" (func $internal4212)) (import "env" "longname4213" (func $internal4213)) (import "env" "longname4214" (func $internal4214)) (import "env" "longname4215" (func $internal4215)) (import "env" "longname4216" (func $internal4216)) (import "env" "longname4217" (func $internal4217)) (import "env" "longname4218" (func $internal4218)) (import "env" "longname4219" (func $internal4219)) (import "env" "longname4220" (func $internal4220)) (import "env" "longname4221" (func $internal4221)) (import "env" "longname4222" (func $internal4222)) (import "env" "longname4223" (func $internal4223)) (import "env" "longname4224" (func $internal4224)) (import "env" "longname4225" (func $internal4225)) (import "env" "longname4226" (func $internal4226)) (import "env" "longname4227" (func $internal4227)) (import "env" "longname4228" (func $internal4228)) (import "env" "longname4229" (func $internal4229)) (import "env" "longname4230" (func $internal4230)) (import "env" "longname4231" (func $internal4231)) (import "env" "longname4232" (func $internal4232)) (import "env" "longname4233" (func $internal4233)) (import "env" "longname4234" (func $internal4234)) (import "env" "longname4235" (func $internal4235)) (import "env" "longname4236" (func $internal4236)) (import "env" "longname4237" (func $internal4237)) (import "env" "longname4238" (func $internal4238)) (import "env" "longname4239" (func $internal4239)) (import "env" "longname4240" (func $internal4240)) (import "env" "longname4241" (func $internal4241)) (import "env" "longname4242" (func $internal4242)) (import "env" "longname4243" (func $internal4243)) (import "env" "longname4244" (func $internal4244)) (import "env" "longname4245" (func $internal4245)) (import "env" "longname4246" (func $internal4246)) (import "env" "longname4247" (func $internal4247)) (import "env" "longname4248" (func $internal4248)) (import "env" "longname4249" (func $internal4249)) (import "env" "longname4250" (func $internal4250)) (import "env" "longname4251" (func $internal4251)) (import "env" "longname4252" (func $internal4252)) (import "env" "longname4253" (func $internal4253)) (import "env" "longname4254" (func $internal4254)) (import "env" "longname4255" (func $internal4255)) (import "env" "longname4256" (func $internal4256)) (import "env" "longname4257" (func $internal4257)) (import "env" "longname4258" (func $internal4258)) (import "env" "longname4259" (func $internal4259)) (import "env" "longname4260" (func $internal4260)) (import "env" "longname4261" (func $internal4261)) (import "env" "longname4262" (func $internal4262)) (import "env" "longname4263" (func $internal4263)) (import "env" "longname4264" (func $internal4264)) (import "env" "longname4265" (func $internal4265)) (import "env" "longname4266" (func $internal4266)) (import "env" "longname4267" (func $internal4267)) (import "env" "longname4268" (func $internal4268)) (import "env" "longname4269" (func $internal4269)) (import "env" "longname4270" (func $internal4270)) (import "env" "longname4271" (func $internal4271)) (import "env" "longname4272" (func $internal4272)) (import "env" "longname4273" (func $internal4273)) (import "env" "longname4274" (func $internal4274)) (import "env" "longname4275" (func $internal4275)) (import "env" "longname4276" (func $internal4276)) (import "env" "longname4277" (func $internal4277)) (import "env" "longname4278" (func $internal4278)) (import "env" "longname4279" (func $internal4279)) (import "env" "longname4280" (func $internal4280)) (import "env" "longname4281" (func $internal4281)) (import "env" "longname4282" (func $internal4282)) (import "env" "longname4283" (func $internal4283)) (import "env" "longname4284" (func $internal4284)) (import "env" "longname4285" (func $internal4285)) (import "env" "longname4286" (func $internal4286)) (import "env" "longname4287" (func $internal4287)) (import "env" "longname4288" (func $internal4288)) (import "env" "longname4289" (func $internal4289)) (import "env" "longname4290" (func $internal4290)) (import "env" "longname4291" (func $internal4291)) (import "env" "longname4292" (func $internal4292)) (import "env" "longname4293" (func $internal4293)) (import "env" "longname4294" (func $internal4294)) (import "env" "longname4295" (func $internal4295)) (import "env" "longname4296" (func $internal4296)) (import "env" "longname4297" (func $internal4297)) (import "env" "longname4298" (func $internal4298)) (import "env" "longname4299" (func $internal4299)) (import "env" "longname4300" (func $internal4300)) (import "env" "longname4301" (func $internal4301)) (import "env" "longname4302" (func $internal4302)) (import "env" "longname4303" (func $internal4303)) (import "env" "longname4304" (func $internal4304)) (import "env" "longname4305" (func $internal4305)) (import "env" "longname4306" (func $internal4306)) (import "env" "longname4307" (func $internal4307)) (import "env" "longname4308" (func $internal4308)) (import "env" "longname4309" (func $internal4309)) (import "env" "longname4310" (func $internal4310)) (import "env" "longname4311" (func $internal4311)) (import "env" "longname4312" (func $internal4312)) (import "env" "longname4313" (func $internal4313)) (import "env" "longname4314" (func $internal4314)) (import "env" "longname4315" (func $internal4315)) (import "env" "longname4316" (func $internal4316)) (import "env" "longname4317" (func $internal4317)) (import "env" "longname4318" (func $internal4318)) (import "env" "longname4319" (func $internal4319)) (import "env" "longname4320" (func $internal4320)) (import "env" "longname4321" (func $internal4321)) (import "env" "longname4322" (func $internal4322)) (import "env" "longname4323" (func $internal4323)) (import "env" "longname4324" (func $internal4324)) (import "env" "longname4325" (func $internal4325)) (import "env" "longname4326" (func $internal4326)) (import "env" "longname4327" (func $internal4327)) (import "env" "longname4328" (func $internal4328)) (import "env" "longname4329" (func $internal4329)) (import "env" "longname4330" (func $internal4330)) (import "env" "longname4331" (func $internal4331)) (import "env" "longname4332" (func $internal4332)) (import "env" "longname4333" (func $internal4333)) (import "env" "longname4334" (func $internal4334)) (import "env" "longname4335" (func $internal4335)) (import "env" "longname4336" (func $internal4336)) (import "env" "longname4337" (func $internal4337)) (import "env" "longname4338" (func $internal4338)) (import "env" "longname4339" (func $internal4339)) (import "env" "longname4340" (func $internal4340)) (import "env" "longname4341" (func $internal4341)) (import "env" "longname4342" (func $internal4342)) (import "env" "longname4343" (func $internal4343)) (import "env" "longname4344" (func $internal4344)) (import "env" "longname4345" (func $internal4345)) (import "env" "longname4346" (func $internal4346)) (import "env" "longname4347" (func $internal4347)) (import "env" "longname4348" (func $internal4348)) (import "env" "longname4349" (func $internal4349)) (import "env" "longname4350" (func $internal4350)) (import "env" "longname4351" (func $internal4351)) (import "env" "longname4352" (func $internal4352)) (import "env" "longname4353" (func $internal4353)) (import "env" "longname4354" (func $internal4354)) (import "env" "longname4355" (func $internal4355)) (import "env" "longname4356" (func $internal4356)) (import "env" "longname4357" (func $internal4357)) (import "env" "longname4358" (func $internal4358)) (import "env" "longname4359" (func $internal4359)) (import "env" "longname4360" (func $internal4360)) (import "env" "longname4361" (func $internal4361)) (import "env" "longname4362" (func $internal4362)) (import "env" "longname4363" (func $internal4363)) (import "env" "longname4364" (func $internal4364)) (import "env" "longname4365" (func $internal4365)) (import "env" "longname4366" (func $internal4366)) (import "env" "longname4367" (func $internal4367)) (import "env" "longname4368" (func $internal4368)) (import "env" "longname4369" (func $internal4369)) (import "env" "longname4370" (func $internal4370)) (import "env" "longname4371" (func $internal4371)) (import "env" "longname4372" (func $internal4372)) (import "env" "longname4373" (func $internal4373)) (import "env" "longname4374" (func $internal4374)) (import "env" "longname4375" (func $internal4375)) (import "env" "longname4376" (func $internal4376)) (import "env" "longname4377" (func $internal4377)) (import "env" "longname4378" (func $internal4378)) (import "env" "longname4379" (func $internal4379)) (import "env" "longname4380" (func $internal4380)) (import "env" "longname4381" (func $internal4381)) (import "env" "longname4382" (func $internal4382)) (import "env" "longname4383" (func $internal4383)) (import "env" "longname4384" (func $internal4384)) (import "env" "longname4385" (func $internal4385)) (import "env" "longname4386" (func $internal4386)) (import "env" "longname4387" (func $internal4387)) (import "env" "longname4388" (func $internal4388)) (import "env" "longname4389" (func $internal4389)) (import "env" "longname4390" (func $internal4390)) (import "env" "longname4391" (func $internal4391)) (import "env" "longname4392" (func $internal4392)) (import "env" "longname4393" (func $internal4393)) (import "env" "longname4394" (func $internal4394)) (import "env" "longname4395" (func $internal4395)) (import "env" "longname4396" (func $internal4396)) (import "env" "longname4397" (func $internal4397)) (import "env" "longname4398" (func $internal4398)) (import "env" "longname4399" (func $internal4399)) (import "env" "longname4400" (func $internal4400)) (import "env" "longname4401" (func $internal4401)) (import "env" "longname4402" (func $internal4402)) (import "env" "longname4403" (func $internal4403)) (import "env" "longname4404" (func $internal4404)) (import "env" "longname4405" (func $internal4405)) (import "env" "longname4406" (func $internal4406)) (import "env" "longname4407" (func $internal4407)) (import "env" "longname4408" (func $internal4408)) (import "env" "longname4409" (func $internal4409)) (import "env" "longname4410" (func $internal4410)) (import "env" "longname4411" (func $internal4411)) (import "env" "longname4412" (func $internal4412)) (import "env" "longname4413" (func $internal4413)) (import "env" "longname4414" (func $internal4414)) (import "env" "longname4415" (func $internal4415)) (import "env" "longname4416" (func $internal4416)) (import "env" "longname4417" (func $internal4417)) (import "env" "longname4418" (func $internal4418)) (import "env" "longname4419" (func $internal4419)) (import "env" "longname4420" (func $internal4420)) (import "env" "longname4421" (func $internal4421)) (import "env" "longname4422" (func $internal4422)) (import "env" "longname4423" (func $internal4423)) (import "env" "longname4424" (func $internal4424)) (import "env" "longname4425" (func $internal4425)) (import "env" "longname4426" (func $internal4426)) (import "env" "longname4427" (func $internal4427)) (import "env" "longname4428" (func $internal4428)) (import "env" "longname4429" (func $internal4429)) (import "env" "longname4430" (func $internal4430)) (import "env" "longname4431" (func $internal4431)) (import "env" "longname4432" (func $internal4432)) (import "env" "longname4433" (func $internal4433)) (import "env" "longname4434" (func $internal4434)) (import "env" "longname4435" (func $internal4435)) (import "env" "longname4436" (func $internal4436)) (import "env" "longname4437" (func $internal4437)) (import "env" "longname4438" (func $internal4438)) (import "env" "longname4439" (func $internal4439)) (import "env" "longname4440" (func $internal4440)) (import "env" "longname4441" (func $internal4441)) (import "env" "longname4442" (func $internal4442)) (import "env" "longname4443" (func $internal4443)) (import "env" "longname4444" (func $internal4444)) (import "env" "longname4445" (func $internal4445)) (import "env" "longname4446" (func $internal4446)) (import "env" "longname4447" (func $internal4447)) (import "env" "longname4448" (func $internal4448)) (import "env" "longname4449" (func $internal4449)) (import "env" "longname4450" (func $internal4450)) (import "env" "longname4451" (func $internal4451)) (import "env" "longname4452" (func $internal4452)) (import "env" "longname4453" (func $internal4453)) (import "env" "longname4454" (func $internal4454)) (import "env" "longname4455" (func $internal4455)) (import "env" "longname4456" (func $internal4456)) (import "env" "longname4457" (func $internal4457)) (import "env" "longname4458" (func $internal4458)) (import "env" "longname4459" (func $internal4459)) (import "env" "longname4460" (func $internal4460)) (import "env" "longname4461" (func $internal4461)) (import "env" "longname4462" (func $internal4462)) (import "env" "longname4463" (func $internal4463)) (import "env" "longname4464" (func $internal4464)) (import "env" "longname4465" (func $internal4465)) (import "env" "longname4466" (func $internal4466)) (import "env" "longname4467" (func $internal4467)) (import "env" "longname4468" (func $internal4468)) (import "env" "longname4469" (func $internal4469)) (import "env" "longname4470" (func $internal4470)) (import "env" "longname4471" (func $internal4471)) (import "env" "longname4472" (func $internal4472)) (import "env" "longname4473" (func $internal4473)) (import "env" "longname4474" (func $internal4474)) (import "env" "longname4475" (func $internal4475)) (import "env" "longname4476" (func $internal4476)) (import "env" "longname4477" (func $internal4477)) (import "env" "longname4478" (func $internal4478)) (import "env" "longname4479" (func $internal4479)) (import "env" "longname4480" (func $internal4480)) (import "env" "longname4481" (func $internal4481)) (import "env" "longname4482" (func $internal4482)) (import "env" "longname4483" (func $internal4483)) (import "env" "longname4484" (func $internal4484)) (import "env" "longname4485" (func $internal4485)) (import "env" "longname4486" (func $internal4486)) (import "env" "longname4487" (func $internal4487)) (import "env" "longname4488" (func $internal4488)) (import "env" "longname4489" (func $internal4489)) (import "env" "longname4490" (func $internal4490)) (import "env" "longname4491" (func $internal4491)) (import "env" "longname4492" (func $internal4492)) (import "env" "longname4493" (func $internal4493)) (import "env" "longname4494" (func $internal4494)) (import "env" "longname4495" (func $internal4495)) (import "env" "longname4496" (func $internal4496)) (import "env" "longname4497" (func $internal4497)) (import "env" "longname4498" (func $internal4498)) (import "env" "longname4499" (func $internal4499)) (import "env" "longname4500" (func $internal4500)) (import "env" "longname4501" (func $internal4501)) (import "env" "longname4502" (func $internal4502)) (import "env" "longname4503" (func $internal4503)) (import "env" "longname4504" (func $internal4504)) (import "env" "longname4505" (func $internal4505)) (import "env" "longname4506" (func $internal4506)) (import "env" "longname4507" (func $internal4507)) (import "env" "longname4508" (func $internal4508)) (import "env" "longname4509" (func $internal4509)) (import "env" "longname4510" (func $internal4510)) (import "env" "longname4511" (func $internal4511)) (import "env" "longname4512" (func $internal4512)) (import "env" "longname4513" (func $internal4513)) (import "env" "longname4514" (func $internal4514)) (import "env" "longname4515" (func $internal4515)) (import "env" "longname4516" (func $internal4516)) (import "env" "longname4517" (func $internal4517)) (import "env" "longname4518" (func $internal4518)) (import "env" "longname4519" (func $internal4519)) (import "env" "longname4520" (func $internal4520)) (import "env" "longname4521" (func $internal4521)) (import "env" "longname4522" (func $internal4522)) (import "env" "longname4523" (func $internal4523)) (import "env" "longname4524" (func $internal4524)) (import "env" "longname4525" (func $internal4525)) (import "env" "longname4526" (func $internal4526)) (import "env" "longname4527" (func $internal4527)) (import "env" "longname4528" (func $internal4528)) (import "env" "longname4529" (func $internal4529)) (import "env" "longname4530" (func $internal4530)) (import "env" "longname4531" (func $internal4531)) (import "env" "longname4532" (func $internal4532)) (import "env" "longname4533" (func $internal4533)) (import "env" "longname4534" (func $internal4534)) (import "env" "longname4535" (func $internal4535)) (import "env" "longname4536" (func $internal4536)) (import "env" "longname4537" (func $internal4537)) (import "env" "longname4538" (func $internal4538)) (import "env" "longname4539" (func $internal4539)) (import "env" "longname4540" (func $internal4540)) (import "env" "longname4541" (func $internal4541)) (import "env" "longname4542" (func $internal4542)) (import "env" "longname4543" (func $internal4543)) (import "env" "longname4544" (func $internal4544)) (import "env" "longname4545" (func $internal4545)) (import "env" "longname4546" (func $internal4546)) (import "env" "longname4547" (func $internal4547)) (import "env" "longname4548" (func $internal4548)) (import "env" "longname4549" (func $internal4549)) (import "env" "longname4550" (func $internal4550)) (import "env" "longname4551" (func $internal4551)) (import "env" "longname4552" (func $internal4552)) (import "env" "longname4553" (func $internal4553)) (import "env" "longname4554" (func $internal4554)) (import "env" "longname4555" (func $internal4555)) (import "env" "longname4556" (func $internal4556)) (import "env" "longname4557" (func $internal4557)) (import "env" "longname4558" (func $internal4558)) (import "env" "longname4559" (func $internal4559)) (import "env" "longname4560" (func $internal4560)) (import "env" "longname4561" (func $internal4561)) (import "env" "longname4562" (func $internal4562)) (import "env" "longname4563" (func $internal4563)) (import "env" "longname4564" (func $internal4564)) (import "env" "longname4565" (func $internal4565)) (import "env" "longname4566" (func $internal4566)) (import "env" "longname4567" (func $internal4567)) (import "env" "longname4568" (func $internal4568)) (import "env" "longname4569" (func $internal4569)) (import "env" "longname4570" (func $internal4570)) (import "env" "longname4571" (func $internal4571)) (import "env" "longname4572" (func $internal4572)) (import "env" "longname4573" (func $internal4573)) (import "env" "longname4574" (func $internal4574)) (import "env" "longname4575" (func $internal4575)) (import "env" "longname4576" (func $internal4576)) (import "env" "longname4577" (func $internal4577)) (import "env" "longname4578" (func $internal4578)) (import "env" "longname4579" (func $internal4579)) (import "env" "longname4580" (func $internal4580)) (import "env" "longname4581" (func $internal4581)) (import "env" "longname4582" (func $internal4582)) (import "env" "longname4583" (func $internal4583)) (import "env" "longname4584" (func $internal4584)) (import "env" "longname4585" (func $internal4585)) (import "env" "longname4586" (func $internal4586)) (import "env" "longname4587" (func $internal4587)) (import "env" "longname4588" (func $internal4588)) (import "env" "longname4589" (func $internal4589)) (import "env" "longname4590" (func $internal4590)) (import "env" "longname4591" (func $internal4591)) (import "env" "longname4592" (func $internal4592)) (import "env" "longname4593" (func $internal4593)) (import "env" "longname4594" (func $internal4594)) (import "env" "longname4595" (func $internal4595)) (import "env" "longname4596" (func $internal4596)) (import "env" "longname4597" (func $internal4597)) (import "env" "longname4598" (func $internal4598)) (import "env" "longname4599" (func $internal4599)) (import "env" "longname4600" (func $internal4600)) (import "env" "longname4601" (func $internal4601)) (import "env" "longname4602" (func $internal4602)) (import "env" "longname4603" (func $internal4603)) (import "env" "longname4604" (func $internal4604)) (import "env" "longname4605" (func $internal4605)) (import "env" "longname4606" (func $internal4606)) (import "env" "longname4607" (func $internal4607)) (import "env" "longname4608" (func $internal4608)) (import "env" "longname4609" (func $internal4609)) (import "env" "longname4610" (func $internal4610)) (import "env" "longname4611" (func $internal4611)) (import "env" "longname4612" (func $internal4612)) (import "env" "longname4613" (func $internal4613)) (import "env" "longname4614" (func $internal4614)) (import "env" "longname4615" (func $internal4615)) (import "env" "longname4616" (func $internal4616)) (import "env" "longname4617" (func $internal4617)) (import "env" "longname4618" (func $internal4618)) (import "env" "longname4619" (func $internal4619)) (import "env" "longname4620" (func $internal4620)) (import "env" "longname4621" (func $internal4621)) (import "env" "longname4622" (func $internal4622)) (import "env" "longname4623" (func $internal4623)) (import "env" "longname4624" (func $internal4624)) (import "env" "longname4625" (func $internal4625)) (import "env" "longname4626" (func $internal4626)) (import "env" "longname4627" (func $internal4627)) (import "env" "longname4628" (func $internal4628)) (import "env" "longname4629" (func $internal4629)) (import "env" "longname4630" (func $internal4630)) (import "env" "longname4631" (func $internal4631)) (import "env" "longname4632" (func $internal4632)) (import "env" "longname4633" (func $internal4633)) (import "env" "longname4634" (func $internal4634)) (import "env" "longname4635" (func $internal4635)) (import "env" "longname4636" (func $internal4636)) (import "env" "longname4637" (func $internal4637)) (import "env" "longname4638" (func $internal4638)) (import "env" "longname4639" (func $internal4639)) (import "env" "longname4640" (func $internal4640)) (import "env" "longname4641" (func $internal4641)) (import "env" "longname4642" (func $internal4642)) (import "env" "longname4643" (func $internal4643)) (import "env" "longname4644" (func $internal4644)) (import "env" "longname4645" (func $internal4645)) (import "env" "longname4646" (func $internal4646)) (import "env" "longname4647" (func $internal4647)) (import "env" "longname4648" (func $internal4648)) (import "env" "longname4649" (func $internal4649)) (import "env" "longname4650" (func $internal4650)) (import "env" "longname4651" (func $internal4651)) (import "env" "longname4652" (func $internal4652)) (import "env" "longname4653" (func $internal4653)) (import "env" "longname4654" (func $internal4654)) (import "env" "longname4655" (func $internal4655)) (import "env" "longname4656" (func $internal4656)) (import "env" "longname4657" (func $internal4657)) (import "env" "longname4658" (func $internal4658)) (import "env" "longname4659" (func $internal4659)) (import "env" "longname4660" (func $internal4660)) (import "env" "longname4661" (func $internal4661)) (import "env" "longname4662" (func $internal4662)) (import "env" "longname4663" (func $internal4663)) (import "env" "longname4664" (func $internal4664)) (import "env" "longname4665" (func $internal4665)) (import "env" "longname4666" (func $internal4666)) (import "env" "longname4667" (func $internal4667)) (import "env" "longname4668" (func $internal4668)) (import "env" "longname4669" (func $internal4669)) (import "env" "longname4670" (func $internal4670)) (import "env" "longname4671" (func $internal4671)) (import "env" "longname4672" (func $internal4672)) (import "env" "longname4673" (func $internal4673)) (import "env" "longname4674" (func $internal4674)) (import "env" "longname4675" (func $internal4675)) (import "env" "longname4676" (func $internal4676)) (import "env" "longname4677" (func $internal4677)) (import "env" "longname4678" (func $internal4678)) (import "env" "longname4679" (func $internal4679)) (import "env" "longname4680" (func $internal4680)) (import "env" "longname4681" (func $internal4681)) (import "env" "longname4682" (func $internal4682)) (import "env" "longname4683" (func $internal4683)) (import "env" "longname4684" (func $internal4684)) (import "env" "longname4685" (func $internal4685)) (import "env" "longname4686" (func $internal4686)) (import "env" "longname4687" (func $internal4687)) (import "env" "longname4688" (func $internal4688)) (import "env" "longname4689" (func $internal4689)) (import "env" "longname4690" (func $internal4690)) (import "env" "longname4691" (func $internal4691)) (import "env" "longname4692" (func $internal4692)) (import "env" "longname4693" (func $internal4693)) (import "env" "longname4694" (func $internal4694)) (import "env" "longname4695" (func $internal4695)) (import "env" "longname4696" (func $internal4696)) (import "env" "longname4697" (func $internal4697)) (import "env" "longname4698" (func $internal4698)) (import "env" "longname4699" (func $internal4699)) (import "env" "longname4700" (func $internal4700)) (import "env" "longname4701" (func $internal4701)) (import "env" "longname4702" (func $internal4702)) (import "env" "longname4703" (func $internal4703)) (import "env" "longname4704" (func $internal4704)) (import "env" "longname4705" (func $internal4705)) (import "env" "longname4706" (func $internal4706)) (import "env" "longname4707" (func $internal4707)) (import "env" "longname4708" (func $internal4708)) (import "env" "longname4709" (func $internal4709)) (import "env" "longname4710" (func $internal4710)) (import "env" "longname4711" (func $internal4711)) (import "env" "longname4712" (func $internal4712)) (import "env" "longname4713" (func $internal4713)) (import "env" "longname4714" (func $internal4714)) (import "env" "longname4715" (func $internal4715)) (import "env" "longname4716" (func $internal4716)) (import "env" "longname4717" (func $internal4717)) (import "env" "longname4718" (func $internal4718)) (import "env" "longname4719" (func $internal4719)) (import "env" "longname4720" (func $internal4720)) (import "env" "longname4721" (func $internal4721)) (import "env" "longname4722" (func $internal4722)) (import "env" "longname4723" (func $internal4723)) (import "env" "longname4724" (func $internal4724)) (import "env" "longname4725" (func $internal4725)) (import "env" "longname4726" (func $internal4726)) (import "env" "longname4727" (func $internal4727)) (import "env" "longname4728" (func $internal4728)) (import "env" "longname4729" (func $internal4729)) (import "env" "longname4730" (func $internal4730)) (import "env" "longname4731" (func $internal4731)) (import "env" "longname4732" (func $internal4732)) (import "env" "longname4733" (func $internal4733)) (import "env" "longname4734" (func $internal4734)) (import "env" "longname4735" (func $internal4735)) (import "env" "longname4736" (func $internal4736)) (import "env" "longname4737" (func $internal4737)) (import "env" "longname4738" (func $internal4738)) (import "env" "longname4739" (func $internal4739)) (import "env" "longname4740" (func $internal4740)) (import "env" "longname4741" (func $internal4741)) (import "env" "longname4742" (func $internal4742)) (import "env" "longname4743" (func $internal4743)) (import "env" "longname4744" (func $internal4744)) (import "env" "longname4745" (func $internal4745)) (import "env" "longname4746" (func $internal4746)) (import "env" "longname4747" (func $internal4747)) (import "env" "longname4748" (func $internal4748)) (import "env" "longname4749" (func $internal4749)) (import "env" "longname4750" (func $internal4750)) (import "env" "longname4751" (func $internal4751)) (import "env" "longname4752" (func $internal4752)) (import "env" "longname4753" (func $internal4753)) (import "env" "longname4754" (func $internal4754)) (import "env" "longname4755" (func $internal4755)) (import "env" "longname4756" (func $internal4756)) (import "env" "longname4757" (func $internal4757)) (import "env" "longname4758" (func $internal4758)) (import "env" "longname4759" (func $internal4759)) (import "env" "longname4760" (func $internal4760)) (import "env" "longname4761" (func $internal4761)) (import "env" "longname4762" (func $internal4762)) (import "env" "longname4763" (func $internal4763)) (import "env" "longname4764" (func $internal4764)) (import "env" "longname4765" (func $internal4765)) (import "env" "longname4766" (func $internal4766)) (import "env" "longname4767" (func $internal4767)) (import "env" "longname4768" (func $internal4768)) (import "env" "longname4769" (func $internal4769)) (import "env" "longname4770" (func $internal4770)) (import "env" "longname4771" (func $internal4771)) (import "env" "longname4772" (func $internal4772)) (import "env" "longname4773" (func $internal4773)) (import "env" "longname4774" (func $internal4774)) (import "env" "longname4775" (func $internal4775)) (import "env" "longname4776" (func $internal4776)) (import "env" "longname4777" (func $internal4777)) (import "env" "longname4778" (func $internal4778)) (import "env" "longname4779" (func $internal4779)) (import "env" "longname4780" (func $internal4780)) (import "env" "longname4781" (func $internal4781)) (import "env" "longname4782" (func $internal4782)) (import "env" "longname4783" (func $internal4783)) (import "env" "longname4784" (func $internal4784)) (import "env" "longname4785" (func $internal4785)) (import "env" "longname4786" (func $internal4786)) (import "env" "longname4787" (func $internal4787)) (import "env" "longname4788" (func $internal4788)) (import "env" "longname4789" (func $internal4789)) (import "env" "longname4790" (func $internal4790)) (import "env" "longname4791" (func $internal4791)) (import "env" "longname4792" (func $internal4792)) (import "env" "longname4793" (func $internal4793)) (import "env" "longname4794" (func $internal4794)) (import "env" "longname4795" (func $internal4795)) (import "env" "longname4796" (func $internal4796)) (import "env" "longname4797" (func $internal4797)) (import "env" "longname4798" (func $internal4798)) (import "env" "longname4799" (func $internal4799)) (import "env" "longname4800" (func $internal4800)) (import "env" "longname4801" (func $internal4801)) (import "env" "longname4802" (func $internal4802)) (import "env" "longname4803" (func $internal4803)) (import "env" "longname4804" (func $internal4804)) (import "env" "longname4805" (func $internal4805)) (import "env" "longname4806" (func $internal4806)) (import "env" "longname4807" (func $internal4807)) (import "env" "longname4808" (func $internal4808)) (import "env" "longname4809" (func $internal4809)) (import "env" "longname4810" (func $internal4810)) (import "env" "longname4811" (func $internal4811)) (import "env" "longname4812" (func $internal4812)) (import "env" "longname4813" (func $internal4813)) (import "env" "longname4814" (func $internal4814)) (import "env" "longname4815" (func $internal4815)) (import "env" "longname4816" (func $internal4816)) (import "env" "longname4817" (func $internal4817)) (import "env" "longname4818" (func $internal4818)) (import "env" "longname4819" (func $internal4819)) (import "env" "longname4820" (func $internal4820)) (import "env" "longname4821" (func $internal4821)) (import "env" "longname4822" (func $internal4822)) (import "env" "longname4823" (func $internal4823)) (import "env" "longname4824" (func $internal4824)) (import "env" "longname4825" (func $internal4825)) (import "env" "longname4826" (func $internal4826)) (import "env" "longname4827" (func $internal4827)) (import "env" "longname4828" (func $internal4828)) (import "env" "longname4829" (func $internal4829)) (import "env" "longname4830" (func $internal4830)) (import "env" "longname4831" (func $internal4831)) (import "env" "longname4832" (func $internal4832)) (import "env" "longname4833" (func $internal4833)) (import "env" "longname4834" (func $internal4834)) (import "env" "longname4835" (func $internal4835)) (import "env" "longname4836" (func $internal4836)) (import "env" "longname4837" (func $internal4837)) (import "env" "longname4838" (func $internal4838)) (import "env" "longname4839" (func $internal4839)) (import "env" "longname4840" (func $internal4840)) (import "env" "longname4841" (func $internal4841)) (import "env" "longname4842" (func $internal4842)) (import "env" "longname4843" (func $internal4843)) (import "env" "longname4844" (func $internal4844)) (import "env" "longname4845" (func $internal4845)) (import "env" "longname4846" (func $internal4846)) (import "env" "longname4847" (func $internal4847)) (import "env" "longname4848" (func $internal4848)) (import "env" "longname4849" (func $internal4849)) (import "env" "longname4850" (func $internal4850)) (import "env" "longname4851" (func $internal4851)) (import "env" "longname4852" (func $internal4852)) (import "env" "longname4853" (func $internal4853)) (import "env" "longname4854" (func $internal4854)) (import "env" "longname4855" (func $internal4855)) (import "env" "longname4856" (func $internal4856)) (import "env" "longname4857" (func $internal4857)) (import "env" "longname4858" (func $internal4858)) (import "env" "longname4859" (func $internal4859)) (import "env" "longname4860" (func $internal4860)) (import "env" "longname4861" (func $internal4861)) (import "env" "longname4862" (func $internal4862)) (import "env" "longname4863" (func $internal4863)) (import "env" "longname4864" (func $internal4864)) (import "env" "longname4865" (func $internal4865)) (import "env" "longname4866" (func $internal4866)) (import "env" "longname4867" (func $internal4867)) (import "env" "longname4868" (func $internal4868)) (import "env" "longname4869" (func $internal4869)) (import "env" "longname4870" (func $internal4870)) (import "env" "longname4871" (func $internal4871)) (import "env" "longname4872" (func $internal4872)) (import "env" "longname4873" (func $internal4873)) (import "env" "longname4874" (func $internal4874)) (import "env" "longname4875" (func $internal4875)) (import "env" "longname4876" (func $internal4876)) (import "env" "longname4877" (func $internal4877)) (import "env" "longname4878" (func $internal4878)) (import "env" "longname4879" (func $internal4879)) (import "env" "longname4880" (func $internal4880)) (import "env" "longname4881" (func $internal4881)) (import "env" "longname4882" (func $internal4882)) (import "env" "longname4883" (func $internal4883)) (import "env" "longname4884" (func $internal4884)) (import "env" "longname4885" (func $internal4885)) (import "env" "longname4886" (func $internal4886)) (import "env" "longname4887" (func $internal4887)) (import "env" "longname4888" (func $internal4888)) (import "env" "longname4889" (func $internal4889)) (import "env" "longname4890" (func $internal4890)) (import "env" "longname4891" (func $internal4891)) (import "env" "longname4892" (func $internal4892)) (import "env" "longname4893" (func $internal4893)) (import "env" "longname4894" (func $internal4894)) (import "env" "longname4895" (func $internal4895)) (import "env" "longname4896" (func $internal4896)) (import "env" "longname4897" (func $internal4897)) (import "env" "longname4898" (func $internal4898)) (import "env" "longname4899" (func $internal4899)) (import "env" "longname4900" (func $internal4900)) (import "env" "longname4901" (func $internal4901)) (import "env" "longname4902" (func $internal4902)) (import "env" "longname4903" (func $internal4903)) (import "env" "longname4904" (func $internal4904)) (import "env" "longname4905" (func $internal4905)) (import "env" "longname4906" (func $internal4906)) (import "env" "longname4907" (func $internal4907)) (import "env" "longname4908" (func $internal4908)) (import "env" "longname4909" (func $internal4909)) (import "env" "longname4910" (func $internal4910)) (import "env" "longname4911" (func $internal4911)) (import "env" "longname4912" (func $internal4912)) (import "env" "longname4913" (func $internal4913)) (import "env" "longname4914" (func $internal4914)) (import "env" "longname4915" (func $internal4915)) (import "env" "longname4916" (func $internal4916)) (import "env" "longname4917" (func $internal4917)) (import "env" "longname4918" (func $internal4918)) (import "env" "longname4919" (func $internal4919)) (import "env" "longname4920" (func $internal4920)) (import "env" "longname4921" (func $internal4921)) (import "env" "longname4922" (func $internal4922)) (import "env" "longname4923" (func $internal4923)) (import "env" "longname4924" (func $internal4924)) (import "env" "longname4925" (func $internal4925)) (import "env" "longname4926" (func $internal4926)) (import "env" "longname4927" (func $internal4927)) (import "env" "longname4928" (func $internal4928)) (import "env" "longname4929" (func $internal4929)) (import "env" "longname4930" (func $internal4930)) (import "env" "longname4931" (func $internal4931)) (import "env" "longname4932" (func $internal4932)) (import "env" "longname4933" (func $internal4933)) (import "env" "longname4934" (func $internal4934)) (import "env" "longname4935" (func $internal4935)) (import "env" "longname4936" (func $internal4936)) (import "env" "longname4937" (func $internal4937)) (import "env" "longname4938" (func $internal4938)) (import "env" "longname4939" (func $internal4939)) (import "env" "longname4940" (func $internal4940)) (import "env" "longname4941" (func $internal4941)) (import "env" "longname4942" (func $internal4942)) (import "env" "longname4943" (func $internal4943)) (import "env" "longname4944" (func $internal4944)) (import "env" "longname4945" (func $internal4945)) (import "env" "longname4946" (func $internal4946)) (import "env" "longname4947" (func $internal4947)) (import "env" "longname4948" (func $internal4948)) (import "env" "longname4949" (func $internal4949)) (import "env" "longname4950" (func $internal4950)) (import "env" "longname4951" (func $internal4951)) (import "env" "longname4952" (func $internal4952)) (import "env" "longname4953" (func $internal4953)) (import "env" "longname4954" (func $internal4954)) (import "env" "longname4955" (func $internal4955)) (import "env" "longname4956" (func $internal4956)) (import "env" "longname4957" (func $internal4957)) (import "env" "longname4958" (func $internal4958)) (import "env" "longname4959" (func $internal4959)) (import "env" "longname4960" (func $internal4960)) (import "env" "longname4961" (func $internal4961)) (import "env" "longname4962" (func $internal4962)) (import "env" "longname4963" (func $internal4963)) (import "env" "longname4964" (func $internal4964)) (import "env" "longname4965" (func $internal4965)) (import "env" "longname4966" (func $internal4966)) (import "env" "longname4967" (func $internal4967)) (import "env" "longname4968" (func $internal4968)) (import "env" "longname4969" (func $internal4969)) (import "env" "longname4970" (func $internal4970)) (import "env" "longname4971" (func $internal4971)) (import "env" "longname4972" (func $internal4972)) (import "env" "longname4973" (func $internal4973)) (import "env" "longname4974" (func $internal4974)) (import "env" "longname4975" (func $internal4975)) (import "env" "longname4976" (func $internal4976)) (import "env" "longname4977" (func $internal4977)) (import "env" "longname4978" (func $internal4978)) (import "env" "longname4979" (func $internal4979)) (import "env" "longname4980" (func $internal4980)) (import "env" "longname4981" (func $internal4981)) (import "env" "longname4982" (func $internal4982)) (import "env" "longname4983" (func $internal4983)) (import "env" "longname4984" (func $internal4984)) (import "env" "longname4985" (func $internal4985)) (import "env" "longname4986" (func $internal4986)) (import "env" "longname4987" (func $internal4987)) (import "env" "longname4988" (func $internal4988)) (import "env" "longname4989" (func $internal4989)) (import "env" "longname4990" (func $internal4990)) (import "env" "longname4991" (func $internal4991)) (import "env" "longname4992" (func $internal4992)) (import "env" "longname4993" (func $internal4993)) (import "env" "longname4994" (func $internal4994)) (import "env" "longname4995" (func $internal4995)) (import "env" "longname4996" (func $internal4996)) (import "env" "longname4997" (func $internal4997)) (import "env" "longname4998" (func $internal4998)) (import "env" "longname4999" (func $internal4999)) (import "env" "__memory_base" (global i32)) (import "env" "__table_base" (global i32)) (import "other" "anything" (func $internalInfinity)) (import "env" "tagname1" (tag $tagname1 (param i32))) (export "foo1" (func $foo1)) (export "foo2" (func $foo2)) (export "tag1" (tag $tag1)) (func $foo1) (func $foo2) (tag $tag1 (param i32 i32)) ) binaryen-version_108/test/passes/multi_line_table_dwarf.bin.txt000066400000000000000000000435361423707623100252400ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (130 bytes) Contains section .debug_abbrev (100 bytes) Contains section .debug_line (121 bytes) Contains section .debug_str (407 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 Abbrev table for offset: 0x00000032 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 .debug_info contents: 0x00000000: Compile Unit: length = 0x0000003d version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000041) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "fourth.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a0] = "/tmp/emscripten_test_wasm0_xkAHBX") DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a) DW_AT_high_pc [DW_FORM_data4] (0x0000000b) 0x00000026: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a) DW_AT_high_pc [DW_FORM_data4] (0x0000000b) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "sideg") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm0_xkAHBX/fourth.cpp") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x0039 => {0x00000039} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000039: DW_TAG_base_type [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000040: NULL 0x00000041: Compile Unit: length = 0x0000003d version = 0x0004 abbr_offset = 0x0032 addr_size = 0x04 (next unit at 0x00000082) 0x0000004c: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x000000cc] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "third.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x0000003d) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000016b] = "/tmp/emscripten_test_wasm0_xkAHBX") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000016) DW_AT_high_pc [DW_FORM_data4] (0x0000000b) 0x00000067: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000016) DW_AT_high_pc [DW_FORM_data4] (0x0000000b) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000018d] = "sidef") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm0_xkAHBX/third.cpp") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x0039 => {0x0000007a} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000007a: DW_TAG_base_type [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000193] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000081: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000039 version: 4 prologue_length: 0x00000022 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "fourth.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x0000002c: 00 DW_LNE_set_address (0x000000000000000a) 0x00000033: 01 DW_LNS_copy 0x000000000000000a 1 0 1 0 0 is_stmt 0x00000034: 05 DW_LNS_set_column (26) 0x00000036: 0a DW_LNS_set_prologue_end 0x00000037: 74 address += 7, line += 0 0x0000000000000011 1 26 1 0 0 is_stmt prologue_end 0x00000038: 02 DW_LNS_advance_pc (4) 0x0000003a: 00 DW_LNE_end_sequence 0x0000000000000015 1 26 1 0 0 is_stmt end_sequence debug_line[0x0000003d] Line table prologue: total_length: 0x00000038 version: 4 prologue_length: 0x00000021 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "third.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000068: 00 DW_LNE_set_address (0x0000000000000016) 0x0000006f: 01 DW_LNS_copy 0x0000000000000016 1 0 1 0 0 is_stmt 0x00000070: 05 DW_LNS_set_column (26) 0x00000072: 0a DW_LNS_set_prologue_end 0x00000073: 74 address += 7, line += 0 0x000000000000001d 1 26 1 0 0 is_stmt prologue_end 0x00000074: 02 DW_LNS_advance_pc (4) 0x00000076: 00 DW_LNE_end_sequence 0x0000000000000021 1 26 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)" 0x00000095: "fourth.cpp" 0x000000a0: "/tmp/emscripten_test_wasm0_xkAHBX" 0x000000c2: "sideg" 0x000000c8: "int" 0x000000cc: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)" 0x00000161: "third.cpp" 0x0000016b: "/tmp/emscripten_test_wasm0_xkAHBX" 0x0000018d: "sidef" 0x00000193: "int" DWARF debug info ================ Contains section .debug_info (130 bytes) Contains section .debug_abbrev (100 bytes) Contains section .debug_line (145 bytes) Contains section .debug_str (407 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 Abbrev table for offset: 0x00000032 [1] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 [2] DW_TAG_subprogram DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [3] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 .debug_info contents: 0x00000000: Compile Unit: length = 0x0000003d version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000041) 0x0000000b: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "fourth.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a0] = "/tmp/emscripten_test_wasm0_xkAHBX") DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a) DW_AT_high_pc [DW_FORM_data4] (0x0000000b) 0x00000026: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a) DW_AT_high_pc [DW_FORM_data4] (0x0000000b) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "sideg") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm0_xkAHBX/fourth.cpp") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x0039 => {0x00000039} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000039: DW_TAG_base_type [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000040: NULL 0x00000041: Compile Unit: length = 0x0000003d version = 0x0004 abbr_offset = 0x0032 addr_size = 0x04 (next unit at 0x00000082) 0x0000004c: DW_TAG_compile_unit [1] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x000000cc] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)") DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "third.cpp") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000049) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000016b] = "/tmp/emscripten_test_wasm0_xkAHBX") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000016) DW_AT_high_pc [DW_FORM_data4] (0x0000000b) 0x00000067: DW_TAG_subprogram [2] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000016) DW_AT_high_pc [DW_FORM_data4] (0x0000000b) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000018d] = "sidef") DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm0_xkAHBX/third.cpp") DW_AT_decl_line [DW_FORM_data1] (1) DW_AT_type [DW_FORM_ref4] (cu + 0x0039 => {0x0000007a} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x0000007a: DW_TAG_base_type [3] DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000193] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x00000081: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000045 version: 4 prologue_length: 0x00000022 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "fourth.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x0000002c: 00 DW_LNE_set_address (0x000000000000000a) 0x00000033: 01 DW_LNS_copy 0x000000000000000a 1 0 1 0 0 is_stmt 0x00000034: 00 DW_LNE_set_address (0x0000000000000011) 0x0000003b: 05 DW_LNS_set_column (26) 0x0000003d: 0a DW_LNS_set_prologue_end 0x0000003e: 01 DW_LNS_copy 0x0000000000000011 1 26 1 0 0 is_stmt prologue_end 0x0000003f: 00 DW_LNE_set_address (0x0000000000000015) 0x00000046: 00 DW_LNE_end_sequence 0x0000000000000015 1 26 1 0 0 is_stmt end_sequence debug_line[0x00000049] Line table prologue: total_length: 0x00000044 version: 4 prologue_length: 0x00000021 min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 file_names[ 1]: name: "third.cpp" dir_index: 0 mod_time: 0x00000000 length: 0x00000000 0x00000074: 00 DW_LNE_set_address (0x0000000000000016) 0x0000007b: 01 DW_LNS_copy 0x0000000000000016 1 0 1 0 0 is_stmt 0x0000007c: 00 DW_LNE_set_address (0x000000000000001d) 0x00000083: 05 DW_LNS_set_column (26) 0x00000085: 0a DW_LNS_set_prologue_end 0x00000086: 01 DW_LNS_copy 0x000000000000001d 1 26 1 0 0 is_stmt prologue_end 0x00000087: 00 DW_LNE_set_address (0x0000000000000021) 0x0000008e: 00 DW_LNE_end_sequence 0x0000000000000021 1 26 1 0 0 is_stmt end_sequence .debug_str contents: 0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)" 0x00000095: "fourth.cpp" 0x000000a0: "/tmp/emscripten_test_wasm0_xkAHBX" 0x000000c2: "sideg" 0x000000c8: "int" 0x000000cc: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)" 0x00000161: "third.cpp" 0x0000016b: "/tmp/emscripten_test_wasm0_xkAHBX" 0x0000018d: "sidef" 0x00000193: "int" (module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $mimport$0 0)) (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (import "env" "__stack_pointer" (global $gimport$0 (mut i32))) (import "env" "__memory_base" (global $gimport$1 i32)) (import "env" "__table_base" (global $gimport$2 i32)) (global $global$0 i32 (i32.const 0)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "__wasm_apply_relocs" (func $__wasm_apply_relocs)) (export "sideg" (func $sideg)) (export "sidef" (func $sidef)) (export "__dso_handle" (global $global$0)) (func $__wasm_call_ctors ;; code offset: 0x3 (call $__wasm_apply_relocs) ) (func $__wasm_apply_relocs ) (func $sideg (result i32) (local $0 i32) ;; code offset: 0xf (local.set $0 ;; code offset: 0xd (i32.const 17) ) ;; code offset: 0x13 (return ;; code offset: 0x11 (local.get $0) ) ) (func $sidef (result i32) (local $0 i32) ;; code offset: 0x1b (local.set $0 ;; code offset: 0x19 (i32.const 36) ) ;; code offset: 0x1f (return ;; code offset: 0x1d (local.get $0) ) ) ;; dylink section ;; memorysize: 0 ;; memoryalignment: 0 ;; tablesize: 0 ;; tablealignment: 0 ;; custom section ".debug_info", size 130 ;; custom section ".debug_abbrev", size 100 ;; custom section ".debug_line", size 145 ;; custom section ".debug_str", size 407 ;; custom section "producers", size 180 ) binaryen-version_108/test/passes/multi_line_table_dwarf.passes000066400000000000000000000000551423707623100251350ustar00rootroot00000000000000g_dwarfdump_roundtrip_dwarfdump_all-features binaryen-version_108/test/passes/multi_line_table_dwarf.wasm000066400000000000000000000025041423707623100246070ustar00rootroot00000000000000asm dylink``qenvmemoryenv__indirect_function_tablepenv__stack_pointerenv __memory_baseenv __table_baseA J__wasm_call_ctors__wasm_apply_relocssidegsidef __dso_handle !  A!  A$!  Ž .debug_info=•   Â9È=2Ìa=k  9“r .debug_abbrev%.: ; I?$> %.: ; I?$> … .debug_line9"û fourth.cpp  t8!û third.cpp t¢ .debug_strclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)fourth.cpp/tmp/emscripten_test_wasm0_xkAHBXsidegintclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)third.cpp/tmp/emscripten_test_wasm0_xkAHBXsidefint>name7__wasm_call_ctors__wasm_apply_relocssidegsidef¾ producerslanguage C_plus_plus processed-byclang†10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)binaryen-version_108/test/passes/multi_unit_abbrev_noprint.bin.txt000066400000000000000000000000001423707623100260030ustar00rootroot00000000000000binaryen-version_108/test/passes/multi_unit_abbrev_noprint.passes000066400000000000000000000000401423707623100257170ustar00rootroot00000000000000g_roundtrip_roundtrip_roundtrip binaryen-version_108/test/passes/multi_unit_abbrev_noprint.wasm000066400000000000000000001514261423707623100254070ustar00rootroot00000000000000asm±``~~`|```````````~`~`~~`~`~~`~``~``~`~``|„#–envmemory€€€env__indirect_function_tablepVenv"mono_register_symfile_for_assemblyenvmono_has_pdb_checksumenvmonoeg_g_setenvenvmono_method_get_classenvmono_class_get_imageenvmono_image_get_assemblyenvmono_assembly_get_nameenvmono_assembly_name_get_nameenvmono_class_get_nameenvmono_method_get_nameenv __assert_failenvmono_add_internal_callenvmono_wasm_invoke_js_marshalledenv mono_wasm_invoke_js_unmarshalled envcore_initialize_internals envmini_parse_debug_optionenvmono_dl_fallback_registerenv,mono_wasm_install_get_native_to_interp_tramp envmono_jit_set_aot_mode envmono_wasm_enable_debugging envmono_icall_table_init envmono_ee_interp_init envmono_marshal_ilgen_init envmono_method_builder_ilgen_init envmono_sgen_mono_ilgen_init env mono_register_bundled_assemblies envmono_trace_init envmono_trace_set_log_handlerenvmono_jit_init_versionenvmono_thread_set_main envmono_thread_current envmono_assembly_name_newenvmono_assembly_loadenvmono_assembly_name_free envmono_class_from_nameenvmono_assembly_get_imageenvmono_class_get_method_from_nameenvmono_runtime_invokeenvmono_object_to_stringenvmono_string_newenvmono_method_signatureenvmono_signature_get_return_typeenvmono_type_get_typeenvmono_image_get_entry_pointenvmono_get_methodenvmono_string_to_utf8envmono_string_charsenvmono_string_lengthenvemscripten_asm_const_intenvmono_get_corlib envmono_object_get_classenvmono_class_get_typeenvmono_class_get_element_classenvmono_class_is_assignable_fromenvmono_class_is_enumenvmono_type_is_referenceenvmono_class_is_delegateenvmono_class_is_subclass_ofenvmono_object_unboxenvmono_array_lengthenvmono_array_addr_with_sizeenvmono_array_newenvmono_get_object_class envmono_gc_wbarrier_set_arrayrefenvmono_get_string_class envmono_regression_test_stepenvexit envmono_runtime_set_main_argsenvmono_jit_parse_optionsenvmono_string_from_utf16envabort envSystemNative_AccessenvSystemNative_ChDirenvSystemNative_ChModenvSystemNative_CloseenvSystemNative_CloseDirenv&SystemNative_ConvertErrorPalToPlatformenv&SystemNative_ConvertErrorPlatformToPalenvSystemNative_CopyFileenvSystemNative_DupenvSystemNative_FcntlSetFDenvSystemNative_FLockenvSystemNative_FStatenvSystemNative_FSyncenvSystemNative_FTruncate envSystemNative_GetAddressFamilyenvSystemNative_GetCpuUtilizationenv2SystemNative_GetCryptographicallySecureRandomBytesenvSystemNative_GetCwdenvSystemNative_GetEGid envSystemNative_GetEUid env$SystemNative_GetIPSocketAddressSizesenvSystemNative_GetIPv4AddressenvSystemNative_GetIPv6Address env5SystemNative_GetNonCryptographicallySecureRandomBytesenvSystemNative_GetPid envSystemNative_GetPortenvSystemNative_GetPwUidRenv"SystemNative_GetReadDirRBufferSize env!SystemNative_GetSystemTimeAsTicksenvSystemNative_GetTimestampenv#SystemNative_GetTimestampResolutionenvSystemNative_LChflagsenv%SystemNative_LChflagsCanSetHiddenFlag envSystemNative_LinkenvSystemNative_LockFileRegionenvSystemNative_LSeekenvSystemNative_LStatenvSystemNative_MAdviseenvSystemNative_MkDirenvSystemNative_MksTempsenvSystemNative_MMapenvSystemNative_MSyncenvSystemNative_MUnmap envSystemNative_OpenenvSystemNative_OpenDirenvSystemNative_PosixFAdviseenvSystemNative_ReadenvSystemNative_ReadDirRenvSystemNative_ReadLinkenvSystemNative_RenameenvSystemNative_RmDirenvSystemNative_SetAddressFamilyenvSystemNative_SetIPv4AddressenvSystemNative_SetIPv6Address envSystemNative_SetPortenvSystemNative_ShmOpenenvSystemNative_ShmUnlinkenvSystemNative_StatenvSystemNative_StrErrorRenvSystemNative_SysConfenvSystemNative_SysLogenvSystemNative_UnlinkenvSystemNative_UTimensatenvSystemNative_WriteenvCompressionNative_Crc32envCompressionNative_DeflateenvCompressionNative_DeflateEndenvCompressionNative_DeflateInit2_envCompressionNative_InflateenvCompressionNative_InflateEndenvCompressionNative_InflateInit2_wasi_snapshot_preview1fd_closewasi_snapshot_preview1fd_seekwasi_snapshot_preview1fd_writeenvemscripten_get_sbrk_ptr envemscripten_resize_heapenvemscripten_memcpy_biga`              Að¼À Aè< ß$__wasm_call_ctors”mono_wasm_add_assemblyÑmono_wasm_setenvémono_wasm_load_runtimeßmono_wasm_assembly_load×mono_wasm_assembly_find_classÔmono_wasm_assembly_find_methodÕmono_wasm_invoke_methodÞ"mono_wasm_assembly_get_entry_pointÖmono_wasm_string_get_utf8îmono_wasm_string_convertìmono_wasm_string_from_jsímono_wasm_get_obj_typeÛmono_unbox_intÐmono_wasm_unbox_floatïmono_wasm_array_lengthÓmono_wasm_array_getÒmono_wasm_obj_array_newåmono_wasm_obj_array_setæmono_wasm_string_array_newëmono_wasm_exec_regressionÙmono_wasm_exitÚmono_wasm_set_main_argsèmono_wasm_strdupêmono_wasm_parse_runtime_optionsçmono_wasm_enable_on_demand_gcØ*__em_js__mono_wasm_timezone_get_local_nameÏfree¾fflushšmalloc½__errno_location¢putcharË stackSaveÌ stackRestoreÍ stackAllocÎ __data_end uA Už´¡µ¶·àáâãò óGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ þ™` Y -!@ -"E  AÿqG @ -! -"E  Aj! Aj!  AÿqF  Aÿqk -@ È€€Aj"½€€" A  Á€€ ŠA!@ -"E @@ -" !  @ Aÿq" F ™€€ -™€€F -!  Aj! -! Aj!  Aÿq™€€ -™€€k A¿jAI  A r ˜€€ Ú@@ E @ (LAJ ›€€ Æ€€! ›€€! E  Ç€€  A!@A(ˆ«€€E A(ˆ«€€š€€! @Ÿ€€("E @A!@ (LAH Æ€€! @ ( (M ›€€ r! @ E Ç€€ (8"  €€  s@ ( (M AA ($€€€€ ( A @ (" ("O  k¬A ((€€€ A6 B7 B7A 7#€€€€Ak"$€€€€  6  ¹€€! Aj$€€€€    (<€€Ž€€ A诀€º€€A𯀀 A诀€»€€ \#€€€€Ak"$€€€€@@ (<  Aÿq Aj€€¼€€ )!  B! B7 Aj$€€€€  Aô¯€€ APjA I ç AG!@@@ E AqE Aÿq!@ - F  Aj! Aj"AG! E  Aq E  @ - AÿqF AI AÿqA‚„l!@ ( s"As AÿýûwjqA€‚„xq  Aj! A|j"AK E Aÿq!@@ - G  Aj! Aj" A A¨€€ ­A!@@ E AÿM @@§€€(°( A€qA€¿F ¢€€A6  @ AÿK A?qA€r: AvAÀr:A @@ A€°I A€@qA€ÀG  A?qA€r: A vAàr: AvA?qA€r:A @ A€€|jAÿÿ?K A?qA€r: AvAðr: AvA?qA€r: A vA?qA€r:A ¢€€A6 A!  :A ¥€€ @ A A¦€€ °#€€€€AÐk"$€€€€  6ÌA! A jAA(€€  (Ì6È@@A  AÈj AÐj A j  ª€€AN A!  @ (LAH Æ€€! (!@ ,JAJ A_q6 A q!@@ (0E  AÈj AÐj A j  ª€€!  AÐ60 AÐj6 6 6 (,! 6,  AÈj AÐj A j  ª€€! E AA ($€€€€ A60 6, A6 A6 (! A6 A ! (" r6A  A q! E Ç€€ AÐj$€€€€  “~#€€€€AÐk"$€€€€  6L A7j! A8j! A! A! A!@@@ AH @ Aÿÿÿÿ kL ¢€€A=6A!   j! (L" !@@@@@ -" E @@@@ Aÿq" !  A%G  ! @ -A%G   Aj"6L Aj! -! ! A%F k!@ E «€€  A!A! (L,£€€! (L!@ E -A$G ,APj!A! A!   j"6LA! @@ ,"A`j"AM !  !A t"A‰ÑqE @  Aj"6L  r! ,"A`j"AK  !A t"A‰Ñq @@ A*G @@ ,£€€E (L"-A$G ,At jAÀ~jA 6 Aj! ,At jA€}j(!A!  A! A!@ E  ("Aj6 (! (LAj!  6L AJ A k! A€Àr!  AÌj¬€€"AH  (L! A!@ -A.G @ -A*G @ ,£€€E (L"-A$G ,At jAÀ~jA 6 ,At jA€}j(!  Aj"6L  @@ A!   ("Aj6 (!  (LAj"6L   Aj6L AÌj¬€€! (L! A!@ !A! ,A¿jA9K  Aj"6L ,! !  A:ljA߇€€j-"AjAI E @@@@ AG A! AL  AH   Atj 6   Atj)7@ A! E  E  AÀj   ­€€ (L! Aÿÿ{q" A€Àq! A!A„ˆ€€! !@@@@@@@@@@@@@@@@ Aj,"A_q  AqAF  "A¨j!  !@ A¿j  AÓF  A!A„ˆ€€! )@!  A!@@@@@@@ Aÿq (@ 6  (@ 6  (@ ¬7  (@ ;  (@ :  (@ 6  (@ ¬7  A AK! Ar! Aø! A!A„ˆ€€! )@ A q®€€! AqE  )@P  AvA„ˆ€€j!A!  A!A„ˆ€€! )@ ¯€€! AqE   k"Aj  J!  @ )@"BU B }"7@A!A„ˆ€€!  @ A€qE A!A…ˆ€€!  A†ˆ€€A„ˆ€€ Aq"!  °€€! Aÿÿ{q AJ! )@!@  PE A! !  k Pj"  J! A! (@"AŽˆ€€ " A ¤€€" j ! !  k  ! @ E (@!  A! A A ±€€  A6  )@>  Aj6@A! Aj! A!@@ ("E @ Aj ¨€€"AH"   kK Aj!   j"K   A! A   ±€€@  A!  A! (@!@ (" E  Aj ¨€€" j" J  Aj «€€ Aj!  I A   A€Às±€€    J! +@    ‚€€€!   )@<7A! ! ! !   Aj"6L -! ! !  E A!@@  Atj(" E   Atj  ­€€A! Aj"A G  A! A O @  Atj( A! Aj"A F  A!  ! A   k"   H"j"   H"  ±€€  «€€ A0   A€€s±€€ A0  A±€€ «€€ A   A€Às±€€  A! AÐj$€€€€  @ -A q   Ä€€ QA!@ (,£€€E @ (",! Aj6  A ljAPj! ,£€€  ¿@ AK @@@@@@@@@@ Awj   ("Aj6 (6  ("Aj6 47  ("Aj6 57  (AjAxq"Aj6 )7  ("Aj6 27  ("Aj6 37  ("Aj6 07  ("Aj6 17  (AjAxq"Aj6 )7  ƒ€€€ 8@ P @ Aj" §AqAð‹€€j- r: Bˆ"BR  .@ P @ Aj" §AqA0r: Bˆ"BR  ˆ~@@ B€€€€Z !  @ Aj" B €"B ~}§A0r: BÿÿÿÿŸV! !  @ §"E @ Aj"  A n"A lkA0r: A K! !   ˆ#€€€€A€k"$€€€€@  L A€Àq  Aÿq  k"A€ A€I"€€@  @ A€«€€ A€~j"AÿK  «€€ A€j$€€€€   AA©€€ 7#€€€€Ak"$€€€€  6  ²€€! Aj$€€€€  ù#€€€€A k"$€€€€  ("6 (!  6  6   k"6  j!A! Aj!@@@@ (< AjA A j€€¼€€ @  ( "F  AL    ("K"Atj" (  A k"j6 A A j" ( k6  k! (< Aj  "  k" A j€€¼€€E A6 AG  (,"6 6  (0j6 !  A! A6 B7 (A r6 AF  (k! A j$€€€€  A B 7 ("   ( k"  K"Á€€ ( j6  Ó#€€€€A k"$€€€€ AjAˆŒ€€AÁ€€@@@ AjAÿÿÿÿI   AŸj!A!  64  6 A~ k"   K"68  j"6$  6 Aj  ²€€! E  ("  (FkA:  ¢€€A=6A! A j$€€€€  Aÿÿÿÿ  ¸€€   @ A ¢€€ 6A ·3 #€€€€Ak"$€€€€@@@@@@@@@@@@@ AìK @A(ȸ€€"A AjApq A I"Av"v"AqE Aq rAs"At"Aø¸€€j("Aj!@@ (" A𸀀j"G A A~ wq6ȸ€€  A(ظ€€ K  6  6  At"Ar6  j" (Ar6 A(и€€"M @ E @@ tA t"A krq"A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vj"At"Aø¸€€j("(" A𸀀j"G A A~ wq"6ȸ€€  A(ظ€€ K 6  6 Aj!  Ar6  j" At" k"Ar6  j 6@ E Av"AtA𸀀j!A(ܸ€€!@@ A t"q A  r6ȸ€€ !  (!  6  6  6  6 A 6ܸ€€A 6и€€ A(̸€€" E  A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vjAtAøº€€j("(Axq k! !@@@ (" Aj("E  (Axq k"   I"!  ! !  j" M  (! @ ( " F @A(ظ€€ ("K ( G 6  6 @ Aj"(" ("E  Aj! @ ! "Aj"(" Aj! (" A6 A! A¿K Aj"Apq!A(̸€€"E A! @ Av"E A! AÿÿÿK A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv r rk"At  AjvAqrAj! A k!@@@@ AtAøº€€j(" A!A!  AA Avk AFt!A!A!@@ (Axq k" O ! !  A! ! !  Aj("   AvAqjAj("F !  AGt!  @ r A t"A kr q"E  A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vjAtAøº€€j(! E  @ (Axq k" I!@ (" Aj(!   !  ! !  E A(и€€ kO  j" M  (! @ ( " F @A(ظ€€ ("K ( G 6  6 @ Aj"(" ("E  Aj! @ ! "Aj"(" Aj! (" A6 @A(и€€" I A(ܸ€€!@@ k"AI A 6и€€A  j"6ܸ€€  Ar6  j 6  Ar6  AA6ܸ€€AA6и€€  Ar6  j" (Ar6 Aj! @A(Ô¸€€" M A  k"6Ô¸€€AA(฀€" j"6฀€  Ar6 Ar6 Aj! @@A( ¼€€E A(¨¼€€!  AB7¬¼€€AB€ €€€€7¤¼€€A A jApqAتժs6 ¼€€AA6´¼€€AA6„¼€€A€ ! A!  AÇj"j"A k" q" M A!@A(€¼€€"E A(ø»€€" j" M K A-„¼€€Aq @@@A(฀€"E Aˆ¼€€!@@ (" K  (j K  (" AÀ€€"AF  !@A(¤¼€€"Aj" qE  k  jA kqj!  M  AþÿÿÿK @A(€¼€€"E A(ø»€€" j" M   K  À€€" G    k q"AþÿÿÿK  À€€" ( (jF  ! @ AÈj M AF @  kA(¨¼€€"jA kq"AþÿÿÿM !  @ À€€AF  j! !  A kÀ€€  ! AG   A!  A!  AG  AA(„¼€€Ar6„¼€€ AþÿÿÿK  À€€"AÀ€€"O  AF  AF  k" A8jM  AA(ø»€€ j"6ø»€€@ A(ü»€€M A 6ü»€€ @@@@A(฀€"E Aˆ¼€€!@  (" ("jF  ("  @@A(ظ€€"E  O  A 6ظ€€ A!A 6Œ¼€€A 6ˆ¼€€AA6踀€AA( ¼€€6츀€AA6”¼€€@ At"Aø¸€€j A𸀀j"6 Aü¸€€j 6 Aj"A G A AHj"Ax kAqA AjAq"k"6Ô¸€€A  j"6฀€  Ar6  jA86AA(°¼€€6一€  - Aq  M  K  j6A Ax kAqA AjAq"j"6฀€AA(Ô¸€€ j" k"6Ô¸€€  Ar6  jA86AA(°¼€€6一€  @ A(ظ€€"O A 6ظ€€ !  j!Aˆ¼€€!@@@@@@@@ ( F  ("  - AqE  Aˆ¼€€!@@ (" K  (j" K  (! 6 ( j6 Ax kAqA AjAqj" Ar6 Ax kAqA AjAqj" k k! j!@  G A 6฀€AA(Ô¸€€ j"6Ô¸€€  Ar6  @A(ܸ€€ G A 6ܸ€€AA(и€€ j"6и€€  Ar6  j 6  @ ("AqAG Axq!@@ AÿK ( !@ (" Av" AtA𸀀j"F  K @  G AA(ȸ€€A~ wq6ȸ€€  @  F  K  6  6  (! @@ ( " F @  ("K ( G  6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! (" A6 E @@ ("AtAøº€€j"( G  6  AA(̸€€A~ wq6̸€€  AA ( Fj 6 E   6@ ("E  6  6 ("E Aj 6  6  j!  j!  (A~q6  Ar6  j 6@ AÿK Av"AtA𸀀j!@@A(ȸ€€"A t"q A  r6ȸ€€ !  (! 6  6  6  6  A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At AjvAqrAj!  6 B7 AtAøº€€j!@@A(̸€€"A t"q A  r6̸€€  6  6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"("  6  6  6  6  A AHj"Ax kAqA AjAq"k" 6Ô¸€€A  j"6฀€  Ar6  jA86AA(°¼€€6一€  A7 kAqA AIjAqjAAj" AjI"A#6 AjA)¼€€7 A)ˆ¼€€7A Aj6¼€€A 6Œ¼€€A 6ˆ¼€€AA6”¼€€ A j!@ A6 Aj! Aj!  K  F   (A~q6   k"Ar6  6@ AÿK Av"AtA𸀀j!@@A(ȸ€€"A t"q A  r6ȸ€€ !  (! 6  6  6  6  A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At  AjvAqrAj! B7 Aj 6 AtAøº€€j!@@A(̸€€"A t"q A  r6̸€€  6 Aj 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"("  6 Aj 6  6  6  (" 6  6 A6  6  6 Aj!  (" 6  6 AjA6  6  6 A(Ô¸€€" M A k"6Ô¸€€AA(฀€" j"6฀€  Ar6 Ar6 Aj!  ¢€€A06A!  @ E @@  ("AtAøº€€j"(G 6  A A~ wq"6̸€€  AA ( Fj 6 E   6@ ("E  6 6 Aj("E Aj 6 6 @@ AK   j"Ar6  j" (Ar6   Ar6 Ar6 j 6@ AÿK Av"AtA𸀀j!@@A(ȸ€€"A t"q A  r6ȸ€€ !  (! 6  6 6 6  @@ Av" A!  A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At  AjvAqrAj! 6 B7 AtAøº€€j!@@@ A t"q A  r6̸€€  6 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"("  6 6 6 6  (" 6  6 A6 6 6 Aj!  @ E @@  ("AtAøº€€j"(G 6  A A~ wq6̸€€  AA ( Fj 6 E   6@ ("E  6 6 Aj("E Aj 6 6 @@ AK   j"Ar6  j" (Ar6   Ar6 Ar6 j 6@ E Av"AtA𸀀j!A(ܸ€€!@@A t" q A  r6ȸ€€ !  (!  6  6 6 6 A 6ܸ€€A 6и€€ Aj! Aj$€€€€ ç@ E Axj" A|j("Axq"j!@ Aq AqE   ("k"A(ظ€€"I   j!@A(ܸ€€ F @ AÿK ( !@ (" Av"AtA𸀀j"F  K @  G AA(ȸ€€A~ wq6ȸ€€  @  F  K  6  6  (!@@ ( " F @  ("K ( G  6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! (" A6 E @@ ("AtAøº€€j"( G  6  AA(̸€€A~ wq6̸€€  AA ( Fj 6 E   6@ ("E  6  6 ("E  Aj 6  6  ("AqAG A 6и€€  A~q6  Ar6  j 6  M ("AqE @@ Aq @A(฀€ G A 6฀€AA(Ô¸€€ j"6Ô¸€€  Ar6 A(ܸ€€G AA6и€€AA6ܸ€€ @A(ܸ€€ G A 6ܸ€€AA(и€€ j"6и€€  Ar6  j 6 Axq j!@@ AÿK ( !@ (" Av"AtA𸀀j"F A(ظ€€ K @  G AA(ȸ€€A~ wq6ȸ€€  @  F A(ظ€€ K  6  6  (!@@ ( " F @A(ظ€€ ("K ( G  6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! (" A6 E @@ ("AtAøº€€j"( G  6  AA(̸€€A~ wq6̸€€  AA ( Fj 6 E   6@ ("E  6  6 ("E Aj 6  6  Ar6  j 6 A(ܸ€€G A 6и€€  A~q6  Ar6  j 6 @ AÿK Av"AtA𸀀j!@@A(ȸ€€"A t"q A  r6ȸ€€ !  (! 6  6  6  6 A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At AjvAqrAj! B7 Aj 6 AtAøº€€j!@@@@A(̸€€"A t"q A  r6̸€€  6 Aj 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"("  6 Aj 6  6  6  (" 6  6 AjA6  6  6 AA(踀€Aj"6踀€  A¼€€!@ ("Aj! AA6踀€ k~@@ A!  ­ ­~"§!  rA€€I A  B ˆ§AG! @ ½€€"E A|j-AqE A €€ a‘€€"(" AjA|q"j!@@ AH M  @ ?AtM ’€€E   6  ¢€€A06A ”@ A€I  “€€  j!@@  sAq @@ AN !  @ Aq !  !@  -: Aj! Aj" O  Aq @ A|q"AÀI  A@j"K @  (6  (6  (6  ( 6  (6  (6  (6  (6  ( 6  ($6$  ((6(  (,6,  (060  (464  (868  (<6< AÀj! AÀj" M  O @  (6 Aj! Aj" I  @ AO !  @ A|j" O !  !@  -:  -:  -:  -: Aj! Aj" M @  O @  -: Aj! Aj" G ó~@ E  j"Aj : : AI A~j : : A}j : : AI A|j : : A I A kAq"j" AÿqA‚„l"6   kA|q"j"A|j 6 A I  6  6 Axj 6 Atj 6 AI  6  6  6  6 Apj 6 Alj 6 Ahj 6 Adj 6  AqAr"k"A I ­"B † „!  j!@  7  7  7  7 A j! A`j"AK \ -J"Aj r:J@ ("AqE A r6A B7 (,"6 6  (0j6A Ó@@ (" A! À€  (! @  ("k O   ($€€€€ A!@ ,KAH !@ "E  Aj"j-A G   ($€€€€" I  j!  k! (! !  Á€€  ( j6  j!  >#€€€€Ak"$€€€€  6 A(€Œ€€ ²€€! Aj$€€€€  A  š !@@ AqE @ - k !@ Aj"AqE  -E  @ "Aj! ("As AÿýûwjqA€‚„xqE @ Aÿq  k @ -! Aj"!   k ¤#€€€€Ak"$€€€€  :@@ (" A! À€  (! @ (" O Aÿq" ,KF Aj6  :  A! AjA ($€€€€AG -! Aj$€€€€  ­@@ (LAH Æ€€  @ Aÿq" ,KF (" (O  Aj6  :   É€€ @@ Aÿq" ,KF (" (O  Aj6  :   É€€! Ç€€   A(€Œ€€Ê€€ #€€€€ $€€€€ #€€€€ kApq"$€€€€  Aœ–€€ Å#€€€€Ak"$€€€€A!@ E ²€€€³€€€! º€€€!@@@@@@@ ª€€€"A~j ,!  -!  .!  /!  AF   ª€€€6Aù•€€ Å€€  (! Aj$€€€€  ¯@Aô•€€ È€€" jA|j—€€  –€€"jA}jA䨱6  €€€€A AA¿€€! –€€!  6  6  6 A(À¼€€6 A 6À¼€€AA(¼¼€€Aj6¼¼€€  €€€  A ¼€€€( »€€€  £€€€  ¢€€€   ¤€€€ *@ £€€€"«€€€" A A¬€€€ U#€€€€Ak"$€€€€ Ÿ€€€!@@ A!  A A j €€€! ¡€€€ Aj$€€€€   AÁ€€€E €€€ ö@ A @A( A±€€€Aà”€€A甀€¢€€€6 @A(ȼ€€ A±€€€Aà”€€A𔀀¢€€€6ȼ€€ @A(̼€€ AÜ€€6̼€€ @A(м€€ A±€€€Aÿ”€€Až•€€¢€€€6м€€ A!@@@@@@ ²€€€"³€€€"ª€€€A~j A A @ A(G A @ A(ȼ€€G A @A(̼€€"E A!  µ€€€  A ! ¶€€€ @ ·€€€ A A! ¸€€€ A! Ý€€ @A(м€€"E A! F  A¹€€€  A A! ´€€€³€€€ª€€€A|j"A O  AtA¬•€€j( A!  .@Aà”€€×€€" A Aà”€€Að•€€Ô€€ a@@@A(Ô¼€€" A±€€€AÔ•€€Aë•€€¢€€€"6Ô¼€€ E  A!  F  A¹€€€  A!  ¿#€€€€Ak"$€€€€ A6 @ E A6   A j¥€€€!@@ ( "E @ E  6 A6  Aj¦€€€! (E A(¸¼€€AÉ”€€§€€€!  A  ¨€€€©€€€ª€€€AF! Aj$€€€€  áAö€€A…Ž€€A‚€€€A‹Ž€€A™Ž€€A‚€€€AœŽ€€A·Ž€€A‚€€€A¹Ž€€€€€A‡€€€Aˆ€€€AA€€€A‰€€€‘€€€A’€€€@@  Aõ€€!  “€€€AÖŽ€€! ”€€€ •€€€–€€€—€€€˜€€€@A(¼¼€€"E A!AÀ¼€€!A Aj¿€€!@@ ("E   Atj 6 Aj! A j! ™€€€ š€€€AŠ€€€A›€€€AAÛŽ€€AàŽ€€œ€€€6¸¼€€䀀ž€€€€€€ ð€€ n@ E A!A!@@@ Atj("E  •€€  Atj(!  Aj! A¸”€€A‰”€€AÄAº”€€Š€€€ #€€€€Ak"$€€€€ ƒ€€€"„€€€…€€€†€€€‡€€€! ˆ€€€! ‰€€€!@@ È€€AäO  6  6  6 AjA¯”€€ œ€€A! AjÈ€€"A AJ!@ F @ Aj j"-A.G Aß: Aj! Aõ“€€A‰”€€AÀA𔀀Š€€€ Aj ñ€€! Aj$€€€€ –#€€€€A k"$€€€€@ E A:Aš“€€ AjA°€€€  6A(€ˆ€€"Aê“€€ Aj³€€ š€€Æ€€€  6A(€Œ€€Aî“€€ ³€€ A j$€€€€ >A뎀€A‹€€€‹€€€A…€€AŒ€€€‹€€€A½€€A€€€‹€€€Ž€€€ A(¸¼€€¾€€€ ½€€€  A ¼€€€ ¿€€€ Ä€€€ À€€  –€€ –€€A‚€€€ –€€ A(¸¼€€À€€€ ½€€€ q#€€€€Ak"$€€€€@ E ®€€€! ¯€€€! A: AéÒ;  6  At6A€€ A j °€€€ Aj$€€€€ @ A A(¸¼€€ §€€€ ­€€€ ›|#€€€€Ak"$€€€€D!@ E ²€€€³€€€! º€€€!@@@ ª€€€Atj *»!  +!   ª€€€6A˜€€ Å€€ Aj$€€€€  RA!A!@@ AF AtAô—€€j(•€€  AtA€˜€€j(!  Aj! 3A!@Aº¦€€ •€€ A )7ؼ€€AŽ€€€!  Ž#€€€€Ak"$€€€€A!@ E ®€€€! ¯€€€! AéÒ¥6  6  6  At6A÷€€ A j °€€€"E Å€€€! ¾€€ Aj$€€€€  Q#€€€€Ak"$€€€€  6  6 A j AjA(ܼ€€A(ؼ€€„€€€ Aj$€€€€ õ4A€ ÷€-+ 0X0x(null)              0123456789ABCDEFøÿÿÿÿÿInvalid type %d to mono_wasm_unbox_float { MONO.string_decoder.decode($0, $0 + $1, true); }MONO_LOG_LEVELdebugMONO_LOG_MASKgcCOMPlus_DebugWriteToStdErr1top-runtime-invoke-unhandled-allmonov4.0.30319Interop/Runtime::InvokeJSWebAssembly.JSInterop.InternalCalls::InvokeJSMarshalledWebAssembly.JSInterop.InternalCalls::InvokeJSUnmarshalled{ var str = MONO.string_decoder.decode ($0, $0 + $1); try { var res = eval (str); if (res === null || res == undefined) return 0; res = res.toString (); setValue ($2, 0, "i32"); } catch (e) { res = e.toString (); setValue ($2, 1, "i32"); if (res === null || res === undefined) res = "unknown exception"; } var buff = Module._malloc((res.length + 1) * 2); stringToUTF16 (res, buff, (res.length + 1) * 2); return buff; }var err = new Error(); console.log ("Stacktrace: \n"); console.log (err.stack);%s L: %s strlen (name) < 100runtime/driver.cget_native_to_interp%s_%s_%s0wasm_dl_symbolException Double FaultSystemDateTimeDateTimeOffsetSystem.Runtime.InteropServicesSafeHandle System.Threading.TasksTaskUri.pdbInvalid type %d to mono_unbox_int ()<::>{ var res = "UTC"; try { res = Intl.DateTimeFormat().resolvedOptions().timeZone; } catch(e) {} var buff = Module._malloc((res.length + 1) * 2); stringToUTF16 (res, buff, (res.length + 1) * 2); return buff; }êû `CompressionNative_Crc32CompressionNative_DeflateCompressionNative_DeflateEndCompressionNative_DeflateInit2_CompressionNative_InflateCompressionNative_InflateEndCompressionNative_InflateInit2_SystemNative_AccessSystemNative_ChDirSystemNative_ChModSystemNative_CloseSystemNative_CloseDirSystemNative_ConvertErrorPalToPlatformSystemNative_ConvertErrorPlatformToPalSystemNative_CopyFileSystemNative_DupSystemNative_FcntlSetFDSystemNative_FLockSystemNative_FStatSystemNative_FSyncSystemNative_FTruncateSystemNative_GetAddressFamilySystemNative_GetCpuUtilizationSystemNative_GetCryptographicallySecureRandomBytesSystemNative_GetCwdSystemNative_GetEGidSystemNative_GetEUidSystemNative_GetIPSocketAddressSizesSystemNative_GetIPv4AddressSystemNative_GetIPv6AddressSystemNative_GetNonCryptographicallySecureRandomBytesSystemNative_GetPidSystemNative_GetPortSystemNative_GetPwUidRSystemNative_GetReadDirRBufferSizeSystemNative_GetSystemTimeAsTicksSystemNative_GetTimestampSystemNative_GetTimestampResolutionSystemNative_LChflagsSystemNative_LChflagsCanSetHiddenFlagSystemNative_LinkSystemNative_LockFileRegionSystemNative_LSeekSystemNative_LStatSystemNative_MAdviseSystemNative_MkDirSystemNative_MksTempsSystemNative_MMapSystemNative_MSyncSystemNative_MUnmapSystemNative_OpenSystemNative_OpenDirSystemNative_PosixFAdviseSystemNative_ReadSystemNative_ReadDirRSystemNative_ReadLinkSystemNative_RenameSystemNative_RmDirSystemNative_SetAddressFamilySystemNative_SetIPv4AddressSystemNative_SetIPv6AddressSystemNative_SetPortSystemNative_ShmOpenSystemNative_ShmUnlinkSystemNative_StatSystemNative_StrErrorRSystemNative_SysConfSystemNative_SysLogSystemNative_UnlinkSystemNative_UTimensatSystemNative_WritelibSystem.NativelibSystem.IO.Compression.NativelibSystem.Globalization.NativeSystem_Private_CoreLib_CalendarData_EnumCalendarInfoCallbackA€' àèÿÿÿÿÿ H ÿÿÿÿøÒ æ ù   5 \ ƒ ™ ª  Õ è û 0O‚ –!«"À#å$%&S'g(|)“*¶+Ø,ò-.,/R0d1€2“3¦4»5Î6ä7ö8 9:/;D<^=p>†?œ@°AÃBáCýDE.FCGZHlIƒJ˜K¬LÀM×N O$ P> Q[ R{ S• T² UAà/ ˆ †* .debug_info¤ •¦0Ñ12åéI,DNY ø I-H"I.L,I0P=¢F8§²U I`ÈŠ@ÍØÊƒ¼… kù† ·È‡ £{ w t-x ~>y ‘Oz2 7yC Hƒ–×1‹< ær© þI/TO1 1FYp…£ÁèOÔâùO 1?N`o|‰–£° ½ Ê × ä ñ 4DRbx™¥µÆØçû !!@4AGEXUËùÕÚ ùäﶪ # g $ y% % nn*5š ‰?ÁHPÍ\Ó1Orâ~èßr”Ÿø Z\ï º¯º     t-  r ^@íŸC -h@ÅíŸn ’1+ ’ß/ –ýG ˜r@•@Ÿ@·@AA/A¯íŸ} Ž1tŽ-~Ž>‘ŽO<K 1”X ˜ÈRA&hO ’7BAPA\AòvA„AŽAÝA@->1ßAퟔ Ëßb ËØ^ Ë1ìAñA ퟨ Å1b ÅØúAüA퟿ ¸Ik¸Ãh ¸-t¸-BBBíŸÝ ¾³| ¾It¾-r ¾1B B*íŸ ã³kãò‚ åÞX é(¦ æ³-B5BIBKBUíŸ* ªÃtª- ­ ­3Ä ¬C(ß ±ÃgB‡BË‘BcuØÝ{¡BíŸ] ã 1¤BíŸ{ ã1ê ã1‚ ã7±B´B ퟕ é1ø é1ÁBöퟤ ;1+ ;ßb| KIŽ/ Lý;C FEN€D.º#bIØ*cýãBõBC$CAC^CpCC˜C CD D,D>DLDuDˆDŽD”DJE¿íŸ» Äߦ ij?Äß8ÄŠ0Ä…öÆß.ß Çß’M×h°/ Øý•EFhHÐß…E¸E×EèEîEôE FaíŸÓ \z\-\1Î^-çFBž•Æì«–ȯ—1"F7FLFYFpF, }FX …Fe  Fr ¯Fy ·F† ½F ÃF” ÉFòF› )G· 0G¾ >GRGð _GeG$ kG $9 > rN rS ºÆI„Ü1!÷$  -!!!!9"!X#r}¨ ­ ² !“A£Ð rÕ "---1r#I>íŸO L{£I{µI{ÇI¾ 1 6 ÓÏIíŸê ÑØ‘Ñ1ßIçIéIíŸ ×b ר^ ×1+ ×ßéI6±ÙŠøIÓ J$ç Žë rõ ð  ïJ íŸ$ ûºû1µûF 4 J f1F %7J íŸD ïºï1µïF J&JíŸ\ £t£-¿£-&J.J6J9J íŸm õ1Åõ-BJDJíŸ~ ÝØ‘Ý1TJ\J^Jqퟙ ÷Ç÷èTËürÖý1J‹JÁJÐJퟲ èÇ-ìJ'îJ íŸâ ñ7Çñè÷JúJ›íŸü ²~+ ²ß/ ¶ý®G ¸r,K2K1L'HrƒH7õ¯C1H HHHH)H3HAHoHHæH,ùH–íŸC mLm-Wm-,m-4m‘ëmr.IRI[I‚I' <-’-(LŽíŸi IèÇIèaIcjËNˆÖO1¦nQÒß gèELOL†L“LL> )r¸D.íŸ} INðkÃ| IÉDåD.çDaíŸ 1| IEE=E¸S ü ÈÓP B Ýð  íø× Ë /> (4 #“ ˆ O ¿8ݳ ÄË SXcm/yf/Q071Š€2\œB Q1: ¦N ,¦H3+7œX0C1kNN  4r 4Jr 2\pƒ›ô 01k%7~¥š 5r1kÂJ0Î1kAÙ  4t-4r¦ 0Î1kÎ$—`0Î1k õ;¢5-1k R¡5r1ki+n"616161C&­LQퟞ ž7~ž17yž18–KRíŸñ r7t-*:¯1ÅK8éK3íŸ /r7/-7/rðK(9¯21L9'4rLð .debug_locÿÿÿÿh@/_íŸÿÿÿÿh@9_íŸÿÿÿÿ/AíŸ#íŸÿÿÿÿ/A-/íŸ/JíŸÿÿÿÿ/AW¯íŸÿÿÿÿ B íŸíŸÿÿÿÿ BíŸíŸÿÿÿÿKB&íŸÿÿÿÿKB>FíŸÿÿÿÿÁBx‡0ŸÿÿÿÿÁBÏÑíŸÑíŸÿÿÿÿÁB×ÙíŸÙíŸÿÿÿÿÁBÇÍíŸÿÿÿÿÁBÍÓíŸÿÿÿÿJE"0ŸFHíŸHKíŸÿÿÿÿJE=KíŸpxퟑíŸÿÿÿÿJEZa0ŸuvíŸÿÿÿÿJEž¤íŸÿÿÿÿJE¤ªíŸÿÿÿÿ FŠŒíŸÿÿÿÿ FòôíŸô÷íŸÿÿÿÿ F íŸÿÿÿÿéIíŸÿÿÿÿ^J%díŸÿÿÿÿ^JMPíŸÿÿÿÿúJ:ZíŸÿÿÿÿúJDZíŸÿÿÿÿmG íŸÿÿÿÿxGŸMOíŸÿÿÿÿèGíŸ_íŸÿÿÿÿèG%+íŸÿÿÿÿèG+1íŸÿÿÿÿèG17íŸÿÿÿÿèG9_íŸÿÿÿÿèGC_íŸÿÿÿÿèGM_íŸÿÿÿÿèGŒ£ŸÐÒíŸÿÿÿÿèG—™íŸ™£íŸÿÿÿÿèGíŸÿÿÿÿL)míŸÿÿÿÿLRUíŸÿÿÿÿLhjíŸjmíŸÿÿÿÿLwíŸÿÿÿÿ¸DíŸíŸÿÿÿÿ¸D--íŸÿÿÿÿ–K ŸNPíŸö .debug_ranges†G¹G¾GÇGKØKÝKæK^@f@h@-A/AÞAßAðAñAûAüABBB BJBKB B¡B£B¤B³B´B¿BÁB·DJE F FlGÏIèIéIJJJJJJ8J9JCJDJ]J^JÏJÐJíJîJøJúJ•KmGwGxGæGèG÷HùHIIÎIL¬L¸DæDçDHE­LþL–KèKéKL± .debug_abbrev%U4I?: ; $> 4I: ; II: ; < : ; I: ; 8  : ; &I 4I: ; I : ; (.@—B: ;I?.@—B: ;'I?: ;I4: ;I‰‚.@—B: ; 'I?: ; I4: ; I 4: ; I‰‚1.: ; '<?I4: ;I.@—B: ;'?: ;I I'!.: ; '<?"'#.@—B: ;?$.: ;'<?%I&.@—B: ; '?'.@—B: ;'I?(.@—B: ; 'I)4: ; I* U+4: ;I,.@—B: ; '-&..@—B: ;'I/I: ;0I1!I7 2$ > 34I?: ; 4 I: ; 8 5I6I7: ; I8.@—B: ; 'I?94: ; Ië .debug_line(sû runtime/Users/alexander/dev/runtime/Users/alexander/devdriver.cartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/object-forward.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/utils/mono-forward.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/assembly.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/jit/jit.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/image.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/blob.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/class.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/object.hemsdk/upstream/emscripten/system/lib/libc/musl/arch/emscripten/bits/alltypes.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/utils/mono-publib.hpinvoke.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/jit/mono-private-unstable.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/utils/mono-logger.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/threads.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/loader.hemsdk/upstream/emscripten/system/include/libc/stdlib.hartifacts/bin/mono/Browser.wasm.Debug/include/mono-2.0/mono/metadata/metadata.h^@† h@’ u(v‚„ ŸçzX™Jçzº œ äzž âz  àz¢ Þz™ çzt¬ 2.‚Ôz<¯/AŽ > &ƒt f1,„ Xf=ë~º .à~ ˜Xƒ ssw.< /L ŸßAË !äñAÅ !‚üA¸ ! ‚žB¾ !º Bã @Ÿƒ–|Jî.’|  í »KBª >ŸÒ|‚±tÎ|‚µ ¡B "¤Bã !È´Bé ! ÁB» =Ã{f.ñz À ¬.*/f ¿{tÀ Lt/0.f ½{tÄ ¬.0 fº{tÄ Nt/,.f ·{tËX= „²{‚Î.²{ä<ñz <ñz û  ..  …{..ñz û  0,0 t ƒ{..ñz ÿ ¬{XÿJž{.X‚0žýz..ñz …X‚ûz.‡J‚0¬÷zX"‰J6X9.º÷z.<ñz âXƒ h›{få.›{tfJEÄ =w u¶|tË /Y u²|tÐ uåX®|<)Ó.t­|Ö×tƒj¤|f Ü.¤| àJ FÜ @KNMÊg”}º÷.gˆ}‚û¬…}‚‹iƒggï|f”Jtì|X(•Öë|ȘY‚ZsŽ3ã|‚  gg-g. vhfgÏIÑ !& f‚éI× !YJû !ŸJï !­J£ !"‚Û~‚¥.u9Jõ !‚DJÝ !& f‚^J÷ =wŸ ,€Z|f‚  ÐJ… !ù{f‹.õ{ ˆ  …îJñ !‚úJ² #(v‚„ ŸÇzÖ¹.Çzf » Åzž½ Ãz¿ 9.‚Áz  mG­ !‚xGÀ >½~tÎÖ¬Yž/°~ÈÓ ­~<"Î ²~tÃ./èG´ KƒƒggƒŸ¢À}ºÀ<=-¾}¬ÃJ‚t/  /»}‚à ½}tÀ.À}ÈÈ åùHí =u 4z. Üz.z t=’‡tû  tæ IÌ !$!#iLÉ uwŸ. ,Ž.ZX[Ÿ˜‚ê ¸D™ =×ä{J .à{ ž +i¼çDŽ =äJ&/f ’í{X“X)X,.ºí{.—f/‘û runtime/Users/alexander/dev/runtimepinvoke.hartifacts/obj/mono/Browser.wasm.Debug/wasm/pinvoke-table.hpinvoke.c­L ";žs.;tu –K etžX/.äf /b! _<@ dtéK/ wò)0KX= Ž .debug_strclang version 12.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 55fa315b0352b63454206600d6803fafacb42d5e)runtime/driver.c/Users/alexander/dev/runtime/src/mono/wasmmono_wasm_enable_gcintdatetime_class_MonoClassMonoClassdatetimeoffset_classuri_classsafehandle_classroot_domain_MonoDomainMonoDomainassembliesassemblynamechardataunsigned charsizeunsigned intMonoBundledAssemblynextWasmAssembly_WasmAssemblyassembly_countsysglobal_native_handletask_classMONO_AOT_MODE_NONEMONO_AOT_MODE_NORMALMONO_AOT_MODE_HYBRIDMONO_AOT_MODE_FULLMONO_AOT_MODE_LLVMONLYMONO_AOT_MODE_INTERPMONO_AOT_MODE_INTERP_LLVMONLYMONO_AOT_MODE_LLVMONLY_INTERPMONO_AOT_MODE_LASTMONO_IMAGE_OKMONO_IMAGE_ERROR_ERRNOMONO_IMAGE_MISSING_ASSEMBLYREFMONO_IMAGE_IMAGE_INVALIDMONO_TYPE_ENDMONO_TYPE_VOIDMONO_TYPE_BOOLEANMONO_TYPE_CHARMONO_TYPE_I1MONO_TYPE_U1MONO_TYPE_I2MONO_TYPE_U2MONO_TYPE_I4MONO_TYPE_U4MONO_TYPE_I8MONO_TYPE_U8MONO_TYPE_R4MONO_TYPE_R8MONO_TYPE_STRINGMONO_TYPE_PTRMONO_TYPE_BYREFMONO_TYPE_VALUETYPEMONO_TYPE_CLASSMONO_TYPE_VARMONO_TYPE_ARRAYMONO_TYPE_GENERICINSTMONO_TYPE_TYPEDBYREFMONO_TYPE_IMONO_TYPE_UMONO_TYPE_FNPTRMONO_TYPE_OBJECTMONO_TYPE_SZARRAYMONO_TYPE_MVARMONO_TYPE_CMOD_REQDMONO_TYPE_CMOD_OPTMONO_TYPE_INTERNALMONO_TYPE_MODIFIERMONO_TYPE_SENTINELMONO_TYPE_PINNEDMONO_TYPE_ENUMvtableMonoVTablesynchronisation_MonoThreadsSyncMonoThreadsSync_MonoObjectMonoObjectsigned charshortunsigned shortfloatdoubleuint16_tmono_unichar2funcPinvokeImportruntime/pinvoke.cwasm_native_to_interp_ftndescsargInterpFtnDesc__ARRAY_SIZE_TYPE__pinvoke_namespinvoke_tableslibSystem_Native_importslibSystem_IO_Compression_Native_importslibSystem_Globalization_Native_importswasm_native_to_interp_mapwasm_native_to_interp_funcsWasmInterpEntrySig_0mono_register_symfile_for_assemblymono_assembly_name_free_MonoAssemblyNamemono_wasm_install_get_native_to_interp_tramp_MonoMethodmono_jit_set_aot_modemono_wasm_enable_debuggingmono_icall_table_initmono_ee_interp_initmono_marshal_ilgen_initmono_method_builder_ilgen_initmono_sgen_mono_ilgen_initmono_register_bundled_assembliesmono_trace_initmono_trace_set_log_handlermono_thread_set_main_MonoInternalThreadmono_gc_wbarrier_set_arrayref_MonoArraymono_jit_parse_optionsmono_add_internal_callfree__em_js__mono_wasm_timezone_get_local_namemono_unbox_intmono_wasm_add_assemblymono_wasm_array_getmono_wasm_array_lengthmono_wasm_assembly_find_classmono_wasm_assembly_find_methodMonoMethodmono_wasm_assembly_get_entry_pointmono_wasm_assembly_load_MonoAssemblyMonoAssemblymono_wasm_enable_on_demand_gcmono_wasm_exec_regressionmono_wasm_exitmono_wasm_get_obj_typemono_wasm_invoke_methodmono_wasm_load_runtimemono_wasm_obj_array_newMonoArraymono_wasm_obj_array_setmono_wasm_parse_runtime_optionsmono_wasm_set_main_argsmono_wasm_setenvmono_wasm_strdupmono_wasm_string_array_newmono_wasm_string_convertmono_wasm_string_from_js_MonoStringMonoStringmono_wasm_string_get_utf8mono_wasm_unbox_floatwasm_dl_loadwasm_dl_symbolget_native_to_interpwasm_loggermono_initialize_internalsmono_wasm_invoke_jsmono_get_uri_classclass_is_taskwasm_native_to_interp_System_Private_CoreLib_CalendarData_EnumCalendarInfoCallbackwasm_dl_lookup_pinvoke_tablewasm_dl_get_native_to_interpobjtype_MonoTypeMonoTypeptrlennew_nameentryidxarraynamespaceargumentsklassimage_MonoImageMonoImageuint32_tmethodanameMonoAssemblyNamestatusMonoImageOpenStatusresenableverbose_levelexit_codeexc_MonoExceptionMonoExceptioneklassetypeout_excparamsthis_argexc2sig_MonoMethodSignatureMonoMethodSignatureunusedinterp_optsenable_debuggingbundle_arraycuri__pargvargcvaluesstrnative_valnative_lenflagserruser_datahandletablekeyclass_namemethod_nameextra_argaddrmessagefatalint32_tmono_boollog_domainlog_levelis_exceptionnative_resarg1arg0¨*name *ô"mono_register_symfile_for_assemblymono_has_pdb_checksummonoeg_g_setenvmono_method_get_classmono_class_get_imagemono_image_get_assemblymono_assembly_get_namemono_assembly_name_get_namemono_class_get_name mono_method_get_name __assert_fail mono_add_internal_call mono_wasm_invoke_js_marshalled mono_wasm_invoke_js_unmarshalledcore_initialize_internalsmini_parse_debug_optionmono_dl_fallback_register,mono_wasm_install_get_native_to_interp_trampmono_jit_set_aot_modemono_wasm_enable_debuggingmono_icall_table_initmono_ee_interp_initmono_marshal_ilgen_initmono_method_builder_ilgen_initmono_sgen_mono_ilgen_init mono_register_bundled_assembliesmono_trace_initmono_trace_set_log_handlermono_jit_init_versionmono_thread_set_mainmono_thread_currentmono_assembly_name_new mono_assembly_load!mono_assembly_name_free"mono_class_from_name#mono_assembly_get_image$mono_class_get_method_from_name%mono_runtime_invoke&mono_object_to_string'mono_string_new(mono_method_signature)mono_signature_get_return_type*mono_type_get_type+mono_image_get_entry_point,mono_get_method-mono_string_to_utf8.mono_string_chars/mono_string_length0emscripten_asm_const_int1mono_get_corlib2mono_object_get_class3mono_class_get_type4mono_class_get_element_class5mono_class_is_assignable_from6mono_class_is_enum7mono_type_is_reference8mono_class_is_delegate9mono_class_is_subclass_of:mono_object_unbox;mono_array_length<mono_array_addr_with_size=mono_array_new>mono_get_object_class?mono_gc_wbarrier_set_arrayref@mono_get_string_classAmono_regression_test_stepBexitCmono_runtime_set_main_argsDmono_jit_parse_optionsEmono_string_from_utf16FabortGSystemNative_AccessHSystemNative_ChDirISystemNative_ChModJSystemNative_CloseKSystemNative_CloseDirL&SystemNative_ConvertErrorPalToPlatformM&SystemNative_ConvertErrorPlatformToPalNSystemNative_CopyFileOSystemNative_DupPSystemNative_FcntlSetFDQSystemNative_FLockRSystemNative_FStatSSystemNative_FSyncTSystemNative_FTruncateUSystemNative_GetAddressFamilyVSystemNative_GetCpuUtilizationW2SystemNative_GetCryptographicallySecureRandomBytesXSystemNative_GetCwdYSystemNative_GetEGidZSystemNative_GetEUid[$SystemNative_GetIPSocketAddressSizes\SystemNative_GetIPv4Address]SystemNative_GetIPv6Address^5SystemNative_GetNonCryptographicallySecureRandomBytes_SystemNative_GetPid`SystemNative_GetPortaSystemNative_GetPwUidRb"SystemNative_GetReadDirRBufferSizec!SystemNative_GetSystemTimeAsTicksdSystemNative_GetTimestampe#SystemNative_GetTimestampResolutionfSystemNative_LChflagsg%SystemNative_LChflagsCanSetHiddenFlaghSystemNative_LinkiSystemNative_LockFileRegionjSystemNative_LSeekkSystemNative_LStatlSystemNative_MAdvisemSystemNative_MkDirnSystemNative_MksTempsoSystemNative_MMappSystemNative_MSyncqSystemNative_MUnmaprSystemNative_OpensSystemNative_OpenDirtSystemNative_PosixFAdviseuSystemNative_ReadvSystemNative_ReadDirRwSystemNative_ReadLinkxSystemNative_RenameySystemNative_RmDirzSystemNative_SetAddressFamily{SystemNative_SetIPv4Address|SystemNative_SetIPv6Address}SystemNative_SetPort~SystemNative_ShmOpenSystemNative_ShmUnlink€SystemNative_StatSystemNative_StrErrorR‚SystemNative_SysConfƒSystemNative_SysLog„SystemNative_Unlink…SystemNative_UTimensat†SystemNative_Write‡CompressionNative_Crc32ˆCompressionNative_Deflate‰CompressionNative_DeflateEndŠCompressionNative_DeflateInit2_‹CompressionNative_InflateŒCompressionNative_InflateEndCompressionNative_InflateInit2_Ž__wasi_fd_close__wasi_fd_seek__wasi_fd_write‘emscripten_get_sbrk_ptr’emscripten_resize_heap“emscripten_memcpy_big”__wasm_call_ctors•strcmp–__strdup— strcasecmp˜isupper™toloweršfflush›__fflush_unlockedœsiprintfdummyž __stdio_closeŸ __ofl_lock  __ofl_unlock¡ __stdio_seek¢__errno_location£isdigit¤memchr¥ pthread_self¦wcrtomb§__pthread_self¨wctomb©__vfprintf_internalª printf_core«out¬getint­pop_arg®fmt_x¯fmt_o°fmt_u±pad² vfiprintf³fiprintf´ __stdio_writeµ__emscripten_stdout_close¶__emscripten_stdout_seek·sn_write¸ vsniprintf¹ vsiprintfº__lock»__unlock¼__wasi_syscall_ret½dlmalloc¾dlfree¿dlcallocÀsbrkÁmemcpyÂmemsetà __towriteÄ __fwritexÅiprintfÆ __lockfileÇ __unlockfileÈstrlenÉ __overflowÊfputcËputcharÌ stackSaveÍ stackRestoreÎ stackAllocÏ*__em_js__mono_wasm_timezone_get_local_nameÐmono_unbox_intÑmono_wasm_add_assemblyÒmono_wasm_array_getÓmono_wasm_array_lengthÔmono_wasm_assembly_find_classÕmono_wasm_assembly_find_methodÖ"mono_wasm_assembly_get_entry_point×mono_wasm_assembly_loadØmono_wasm_enable_on_demand_gcÙmono_wasm_exec_regressionÚmono_wasm_exitÛmono_wasm_get_obj_typeÜmono_get_uri_classÝ class_is_taskÞmono_wasm_invoke_methodßmono_wasm_load_runtimeà wasm_dl_loadáwasm_dl_symbolâget_native_to_interpã wasm_loggerämono_initialize_internalsåmono_wasm_obj_array_newæmono_wasm_obj_array_setçmono_wasm_parse_runtime_optionsèmono_wasm_set_main_argsémono_wasm_setenvêmono_wasm_strdupëmono_wasm_string_array_newìmono_wasm_string_convertímono_wasm_string_from_jsîmono_wasm_string_get_utf8ïmono_wasm_unbox_floatðwasm_dl_lookup_pinvoke_tableñwasm_dl_get_native_to_interpòmono_wasm_invoke_jsóRwasm_native_to_interp_System_Private_CoreLib_CalendarData_EnumCalendarInfoCallback¶ producerslanguageC99 processed-byclang†12.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project e412cc402e84444ff13cc4e4ae4c2c5830f9d9da)binaryen-version_108/test/passes/nm.txt000066400000000000000000000006731423707623100204030ustar00rootroot00000000000000 a : 1 b : 5 c : 13 (module (type $0 (func)) (memory $0 0) (func $a (nop) ) (func $b (drop (loop $loop-in1 (result i32) (nop) (i32.const 1000) ) ) ) (func $c (block $top (nop) (drop (i32.const 1000) ) (drop (i32.add (i32.add (i32.const 1001) (i32.const 1002) ) (i32.add (i32.const 1003) (i32.const 1004) ) ) ) (br $top) ) ) ) binaryen-version_108/test/passes/nm.wast000066400000000000000000000010411423707623100205300ustar00rootroot00000000000000(module (memory 0) (type $0 (func)) (func $a (type $0) (nop) ) (func $b (type $0) (drop (loop $loop-in1 (result i32) (nop) (i32.const 1000) ) ) ) (func $c (type $0) (block $top (nop) (drop (i32.const 1000) ) (drop (i32.add (i32.add (i32.const 1001) (i32.const 1002) ) (i32.add (i32.const 1003) (i32.const 1004) ) ) ) (br $top) ) ) ) binaryen-version_108/test/passes/optimize-added-constants-propagate_low-memory-unused.txt000066400000000000000000000122631423707623100323500ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 1 1) (func $consts (drop (i32.load (i32.const 0) ) ) (drop (i32.load (i32.const 1) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 1024) ) ) (drop (i32.load (i32.const 0) ) ) (drop (i32.load (i32.const 1) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 1024) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 1024) ) ) (i32.store (i32.const 1) (i32.const 1) ) ) (func $offsets (param $x i32) (drop (i32.load offset=1 (local.get $x) ) ) (drop (i32.load offset=8 (local.get $x) ) ) (drop (i32.load offset=1023 (local.get $x) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 1024) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 2048) ) ) ) (drop (i32.load offset=4 (local.get $x) ) ) ) (func $load-off-2 (param $0 i32) (result i32) (i32.store (i32.const 6) (local.get $0) ) (i32.store (i32.const 6) (local.get $0) ) (i32.store offset=7 (local.get $0) (local.get $0) ) (i32.store offset=9 (local.get $0) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -11) (local.get $0) ) (local.get $0) ) (i32.store offset=2 (i32.add (local.get $0) (i32.const -13) ) (local.get $0) ) (i32.store offset=19 (i32.const -15) (local.get $0) ) (i32.store offset=21 (i32.const -21) (local.get $0) ) (i32.store (i32.const 25) (local.get $0) ) (i32.store (i32.const -23) (local.get $0) ) (drop (i32.load (i32.const 8) ) ) (drop (i32.load (i32.const 8) ) ) (drop (i32.load offset=8 (local.get $0) ) ) (drop (i32.load (i32.const 10) ) ) (i32.load offset=12 (local.get $0) ) ) (func $offset-constant (drop (i32.load (i32.const 10) ) ) (drop (i32.load (i32.const 10) ) ) (drop (i32.load (i32.const 20) ) ) (drop (i32.load (i32.const 1024) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 100511) ) ) ) (func $offset-propagate-param (param $x i32) (local $y i32) (nop) (drop (i32.load offset=1 (local.get $y) ) ) ) (func $offset-propagate (local $x i32) (local $y i32) (nop) (drop (i32.load offset=1 (local.get $y) ) ) ) (func $offset-propagate2 (local $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.add (i32.const 1) (i32.const 2) ) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate3 (local $x i32) (local $y i32) (nop) (drop (i32.load offset=1 (local.get $y) ) ) ) (func $offset-propagate4 (local $x i32) (local $y i32) (local.set $y (i32.const -1) ) (nop) (drop (i32.load offset=1 (local.get $y) ) ) ) (func $offset-propagate5 (param $z i32) (local $x i32) (local $y i32) (local $3 i32) (if (local.get $z) (local.set $y (i32.const -1) ) ) (block (local.set $3 (local.get $y) ) (nop) ) (drop (i32.load offset=1 (local.get $3) ) ) ) (func $offset-propagate6 (param $z i32) (local $x i32) (local $y i32) (local $3 i32) (local.set $y (local.get $z) ) (block (local.set $3 (local.get $y) ) (nop) ) (local.set $y (i32.const -2) ) (drop (i32.load offset=1 (local.get $3) ) ) ) (func $offset-propagate7 (param $z i32) (local $x i32) (local $y i32) (local.set $y (local.get $z) ) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (if (i32.const 1) (local.set $x (i32.add (i32.const 2) (local.get $y) ) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-realistic (param $ptr i32) (local $x i32) (local $y i32) (local $z i32) (nop) (nop) (nop) (loop $l (call $offset-realistic (i32.load offset=8 (local.get $ptr) ) ) (call $offset-realistic (i32.load offset=16 (local.get $ptr) ) ) (call $offset-realistic (i32.load offset=16 (local.get $ptr) ) ) (i32.store offset=24 (local.get $ptr) (i32.add (i32.load offset=24 (local.get $ptr) ) (i32.const 1) ) ) (br_if $l (i32.load offset=24 (local.get $ptr) ) ) ) ) (func $multiadd (param $sp i32) (local $$vararg_buffer i32) (local $$vararg_ptr1 i32) (nop) (nop) (i32.store offset=20 (local.get $sp) (i32.const 1) ) ) (func $multiadd-extraUse (param $sp i32) (local $$vararg_buffer i32) (local $$vararg_ptr1 i32) (local.set $$vararg_buffer (i32.add (local.get $sp) (i32.const 16) ) ) (nop) (drop (local.get $$vararg_buffer) ) (i32.store offset=4 (local.get $$vararg_buffer) (i32.const 1) ) ) ) binaryen-version_108/test/passes/optimize-added-constants-propagate_low-memory-unused.wast000066400000000000000000000167331423707623100325150ustar00rootroot00000000000000(module (memory 1 1) (func $consts (drop (i32.load (i32.const 0)) ) (drop (i32.load (i32.const 1)) ) (drop (i32.load (i32.const 1023)) ) (drop (i32.load (i32.const 1024)) ) (drop (i32.load offset=0 (i32.const 0)) ) (drop (i32.load offset=1 (i32.const 0)) ) (drop (i32.load offset=1023 (i32.const 0)) ) (drop (i32.load offset=1024 (i32.const 0)) ) (drop (i32.load offset=512 (i32.const 511)) ) (drop (i32.load offset=512 (i32.const 512)) ) (i32.store (i32.const 1) (i32.const 1)) ) (func $offsets (param $x i32) (drop (i32.load (i32.add (local.get $x) (i32.const 1) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 8) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 1023) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 1024) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 2048) ) ) ) (drop (i32.load (i32.add (i32.const 4) (local.get $x) ) ) ) ) (func $load-off-2 (param $0 i32) (result i32) (i32.store offset=2 (i32.add (i32.const 1) (i32.const 3) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const 3) (i32.const 1) ) (local.get $0) ) (i32.store offset=2 (i32.add (local.get $0) (i32.const 5) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const 7) (local.get $0) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -11) ;; do not fold this! (local.get $0) ) (local.get $0) ) (i32.store offset=2 (i32.add (local.get $0) (i32.const -13) ;; do not fold this! ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -15) (i32.const 17) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -21) (i32.const 19) ) (local.get $0) ) (i32.store offset=2 (i32.const 23) (local.get $0) ) (i32.store offset=2 (i32.const -25) (local.get $0) ) (drop (i32.load offset=2 (i32.add (i32.const 2) (i32.const 4) ) ) ) (drop (i32.load offset=2 (i32.add (i32.const 4) (i32.const 2) ) ) ) (drop (i32.load offset=2 (i32.add (local.get $0) (i32.const 6) ) ) ) (drop (i32.load offset=2 (i32.const 8) ) ) (i32.load offset=2 (i32.add (i32.const 10) (local.get $0) ) ) ) (func $offset-constant (drop (i32.load offset=10 (i32.const 0) ) ) (drop (i32.load offset=0 (i32.const 10) ) ) (drop (i32.load offset=10 (i32.const 10) ) ) (drop (i32.load offset=512 (i32.const 512) ) ) (drop (i32.load offset=512 (i32.const 511) ) ) (drop (i32.load offset=511 (i32.const 512) ) ) (drop (i32.load offset=99999 (i32.const 512) ) ) ) (func $offset-propagate-param (param $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.const 1) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate (local $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.const 1) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate2 (local $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.add (i32.const 1) (i32.const 2) ) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate3 (local $x i32) (local $y i32) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate4 (local $x i32) (local $y i32) (local.set $y (i32.const -1)) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate5 (param $z i32) (local $x i32) (local $y i32) (if (local.get $z) (local.set $y (i32.const -1)) ;; y is not ssa ) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate6 (param $z i32) (local $x i32) (local $y i32) (local.set $y (local.get $z)) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (local.set $y (i32.const -2)) ;; y has another set, so not ssa (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate7 (param $z i32) (local $x i32) (local $y i32) (local.set $y (local.get $z)) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (if (i32.const 1) (local.set $x ;; x is not ssa (i32.add (i32.const 2) (local.get $y) ) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-realistic (param $ptr i32) (local $x i32) (local $y i32) (local $z i32) (local.set $x (i32.add (local.get $ptr) (i32.const 8) ) ) (local.set $y (i32.add (local.get $ptr) (i32.const 16) ) ) (local.set $z (i32.add (local.get $ptr) (i32.const 24) ) ) (loop $l (call $offset-realistic (i32.load (local.get $x) ) ) (call $offset-realistic (i32.load (local.get $y) ) ) (call $offset-realistic (i32.load (local.get $y) ) ) (i32.store (local.get $z) (i32.add (i32.load (local.get $z) ) (i32.const 1) ) ) (br_if $l (i32.load (local.get $z) ) ) ) ) (func $multiadd (param $sp i32) (local $$vararg_buffer i32) (local $$vararg_ptr1 i32) (local.set $$vararg_buffer (i32.add (local.get $sp) (i32.const 16) ) ) (local.set $$vararg_ptr1 (i32.add (local.get $$vararg_buffer) (i32.const 4) ) ) (i32.store (local.get $$vararg_ptr1) (i32.const 1) ) ) (func $multiadd-extraUse (param $sp i32) (local $$vararg_buffer i32) (local $$vararg_ptr1 i32) (local.set $$vararg_buffer (i32.add (local.get $sp) (i32.const 16) ) ) (local.set $$vararg_ptr1 (i32.add (local.get $$vararg_buffer) (i32.const 4) ) ) (drop (local.get $$vararg_buffer) ) (i32.store (local.get $$vararg_ptr1) (i32.const 1) ) ) ) binaryen-version_108/test/passes/optimize-added-constants_low-memory-unused.txt000066400000000000000000000112741423707623100303710ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 1 1) (func $consts (drop (i32.load (i32.const 0) ) ) (drop (i32.load (i32.const 1) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 1024) ) ) (drop (i32.load (i32.const 0) ) ) (drop (i32.load (i32.const 1) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 1024) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 1024) ) ) (i32.store (i32.const 1) (i32.const 1) ) ) (func $offsets (param $x i32) (drop (i32.load offset=1 (local.get $x) ) ) (drop (i32.load offset=8 (local.get $x) ) ) (drop (i32.load offset=1023 (local.get $x) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 1024) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 2048) ) ) ) (drop (i32.load offset=4 (local.get $x) ) ) ) (func $load-off-2 (param $0 i32) (result i32) (i32.store (i32.const 6) (local.get $0) ) (i32.store (i32.const 6) (local.get $0) ) (i32.store offset=7 (local.get $0) (local.get $0) ) (i32.store offset=9 (local.get $0) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -11) (local.get $0) ) (local.get $0) ) (i32.store offset=2 (i32.add (local.get $0) (i32.const -13) ) (local.get $0) ) (i32.store offset=19 (i32.const -15) (local.get $0) ) (i32.store offset=21 (i32.const -21) (local.get $0) ) (i32.store (i32.const 25) (local.get $0) ) (i32.store (i32.const -23) (local.get $0) ) (drop (i32.load (i32.const 8) ) ) (drop (i32.load (i32.const 8) ) ) (drop (i32.load offset=8 (local.get $0) ) ) (drop (i32.load (i32.const 10) ) ) (i32.load offset=12 (local.get $0) ) ) (func $offset-constant (drop (i32.load (i32.const 10) ) ) (drop (i32.load (i32.const 10) ) ) (drop (i32.load (i32.const 20) ) ) (drop (i32.load (i32.const 1024) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 1023) ) ) (drop (i32.load (i32.const 100511) ) ) ) (func $offset-propagate-param (param $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.const 1) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate (local $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.const 1) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate2 (local $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.add (i32.const 1) (i32.const 2) ) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate3 (local $x i32) (local $y i32) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate4 (local $x i32) (local $y i32) (local.set $y (i32.const -1) ) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate5 (param $z i32) (local $x i32) (local $y i32) (if (local.get $z) (local.set $y (i32.const -1) ) ) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate6 (param $z i32) (local $x i32) (local $y i32) (local.set $y (local.get $z) ) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (local.set $y (i32.const -2) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-realistic (param $ptr i32) (local $x i32) (local $y i32) (local $z i32) (local.set $x (i32.add (local.get $ptr) (i32.const 8) ) ) (local.set $y (i32.add (local.get $ptr) (i32.const 16) ) ) (local.set $z (i32.add (local.get $ptr) (i32.const 24) ) ) (loop $l (call $offset-realistic (i32.load (local.get $x) ) ) (call $offset-realistic (i32.load (local.get $y) ) ) (call $offset-realistic (i32.load (local.get $y) ) ) (i32.store (local.get $z) (i32.add (i32.load (local.get $z) ) (i32.const 1) ) ) (br_if $l (i32.load (local.get $z) ) ) ) ) ) binaryen-version_108/test/passes/optimize-added-constants_low-memory-unused.wast000066400000000000000000000143161423707623100305300ustar00rootroot00000000000000(module (memory 1 1) (func $consts (drop (i32.load (i32.const 0)) ) (drop (i32.load (i32.const 1)) ) (drop (i32.load (i32.const 1023)) ) (drop (i32.load (i32.const 1024)) ) (drop (i32.load offset=0 (i32.const 0)) ) (drop (i32.load offset=1 (i32.const 0)) ) (drop (i32.load offset=1023 (i32.const 0)) ) (drop (i32.load offset=1024 (i32.const 0)) ) (drop (i32.load offset=512 (i32.const 511)) ) (drop (i32.load offset=512 (i32.const 512)) ) (i32.store (i32.const 1) (i32.const 1)) ) (func $offsets (param $x i32) (drop (i32.load (i32.add (local.get $x) (i32.const 1) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 8) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 1023) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 1024) ) ) ) (drop (i32.load (i32.add (local.get $x) (i32.const 2048) ) ) ) (drop (i32.load (i32.add (i32.const 4) (local.get $x) ) ) ) ) (func $load-off-2 (param $0 i32) (result i32) (i32.store offset=2 (i32.add (i32.const 1) (i32.const 3) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const 3) (i32.const 1) ) (local.get $0) ) (i32.store offset=2 (i32.add (local.get $0) (i32.const 5) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const 7) (local.get $0) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -11) ;; do not fold this! (local.get $0) ) (local.get $0) ) (i32.store offset=2 (i32.add (local.get $0) (i32.const -13) ;; do not fold this! ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -15) (i32.const 17) ) (local.get $0) ) (i32.store offset=2 (i32.add (i32.const -21) (i32.const 19) ) (local.get $0) ) (i32.store offset=2 (i32.const 23) (local.get $0) ) (i32.store offset=2 (i32.const -25) (local.get $0) ) (drop (i32.load offset=2 (i32.add (i32.const 2) (i32.const 4) ) ) ) (drop (i32.load offset=2 (i32.add (i32.const 4) (i32.const 2) ) ) ) (drop (i32.load offset=2 (i32.add (local.get $0) (i32.const 6) ) ) ) (drop (i32.load offset=2 (i32.const 8) ) ) (i32.load offset=2 (i32.add (i32.const 10) (local.get $0) ) ) ) (func $offset-constant (drop (i32.load offset=10 (i32.const 0) ) ) (drop (i32.load offset=0 (i32.const 10) ) ) (drop (i32.load offset=10 (i32.const 10) ) ) (drop (i32.load offset=512 (i32.const 512) ) ) (drop (i32.load offset=512 (i32.const 511) ) ) (drop (i32.load offset=511 (i32.const 512) ) ) (drop (i32.load offset=99999 (i32.const 512) ) ) ) (func $offset-propagate-param (param $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.const 1) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate (local $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.const 1) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate2 (local $x i32) (local $y i32) (local.set $x (i32.add (local.get $y) (i32.add (i32.const 1) (i32.const 2) ) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate3 (local $x i32) (local $y i32) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate4 (local $x i32) (local $y i32) (local.set $y (i32.const -1)) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate5 (param $z i32) (local $x i32) (local $y i32) (if (local.get $z) (local.set $y (i32.const -1)) ) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (drop (i32.load (local.get $x) ) ) ) (func $offset-propagate6 (param $z i32) (local $x i32) (local $y i32) (local.set $y (local.get $z)) (local.set $x (i32.add (i32.const 1) (local.get $y) ) ) (local.set $y (i32.const -2)) (drop (i32.load (local.get $x) ) ) ) (func $offset-realistic (param $ptr i32) (local $x i32) (local $y i32) (local $z i32) (local.set $x (i32.add (local.get $ptr) (i32.const 8) ) ) (local.set $y (i32.add (local.get $ptr) (i32.const 16) ) ) (local.set $z (i32.add (local.get $ptr) (i32.const 24) ) ) (loop $l (call $offset-realistic (i32.load (local.get $x) ) ) (call $offset-realistic (i32.load (local.get $y) ) ) (call $offset-realistic (i32.load (local.get $y) ) ) (i32.store (local.get $z) (i32.add (i32.load (local.get $z) ) (i32.const 1) ) ) (br_if $l (i32.load (local.get $z) ) ) ) ) ) binaryen-version_108/test/passes/optimize-instructions_fuzz-exec.txt000066400000000000000000000205671423707623100263770ustar00rootroot00000000000000[fuzz-exec] calling test32 [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x7fff82] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [fuzz-exec] calling test64 [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0xfffffffffff82] [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0x8000000000000] [fuzz-exec] calling just-one-nan [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [fuzz-exec] calling ignore [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] (module (type $none_=>_none (func)) (type $f32_=>_none (func (param f32))) (type $f64_=>_none (func (param f64))) (import "fuzzing-support" "log-f32" (func $logf32 (param f32))) (import "fuzzing-support" "log-f64" (func $logf64 (param f64))) (export "test32" (func $0)) (export "test64" (func $1)) (export "just-one-nan" (func $2)) (export "ignore" (func $3)) (func $0 (call $logf32 (f32.add (f32.const -nan:0x7fff82) (f32.neg (f32.const -nan:0x7ff622) ) ) ) (call $logf32 (f32.sub (f32.const -nan:0x7fff82) (f32.neg (f32.const -nan:0x7ff622) ) ) ) (call $logf32 (f32.mul (f32.const -nan:0x7fff82) (f32.neg (f32.const -nan:0x7ff622) ) ) ) (call $logf32 (f32.div (f32.const nan:0x7fff82) (f32.const -nan:0x7ff622) ) ) (call $logf32 (f32.copysign (f32.const -nan:0x7fff82) (f32.neg (f32.const -nan:0x7ff622) ) ) ) (call $logf32 (f32.min (f32.const -nan:0x7fff82) (f32.neg (f32.const -nan:0x7ff622) ) ) ) (call $logf32 (f32.max (f32.const -nan:0x7fff82) (f32.neg (f32.const -nan:0x7ff622) ) ) ) ) (func $1 (call $logf64 (f64.add (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.sub (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.mul (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.div (f64.const nan:0xfffffffffff82) (f64.const -nan:0xfffffffffa622) ) ) (call $logf64 (f64.copysign (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.min (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.max (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) ) (func $2 (call $logf32 (f32.add (f32.neg (f32.const -nan:0x7ff622) ) (f32.const 0) ) ) (call $logf32 (f32.add (f32.const -nan:0x7ff622) (f32.neg (f32.const 0) ) ) ) (call $logf32 (f32.add (f32.neg (f32.const -nan:0x7ff622) ) (f32.const -0) ) ) (call $logf32 (f32.add (f32.const -nan:0x7ff622) (f32.neg (f32.const -0) ) ) ) (call $logf32 (f32.add (f32.neg (f32.const nan:0x7ff622) ) (f32.const 0) ) ) (call $logf32 (f32.add (f32.const nan:0x7ff622) (f32.neg (f32.const 0) ) ) ) ) (func $3 (call $logf32 (f32.div (f32.const -0) (f32.const 0) ) ) (call $logf32 (f32.div (f32.const 0) (f32.const 0) ) ) (call $logf32 (f32.div (f32.const -0) (f32.const -0) ) ) (call $logf32 (f32.div (f32.const 0) (f32.const -0) ) ) ) ) [fuzz-exec] calling test32 [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x7fff82] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [fuzz-exec] calling test64 [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0xfffffffffff82] [LoggingExternalInterface logging nan:0x8000000000000] [LoggingExternalInterface logging nan:0x8000000000000] [fuzz-exec] calling just-one-nan [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [fuzz-exec] calling ignore [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [LoggingExternalInterface logging nan:0x400000] [fuzz-exec] comparing ignore [fuzz-exec] comparing just-one-nan [fuzz-exec] comparing test32 [fuzz-exec] comparing test64 [fuzz-exec] calling foo [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [fuzz-exec] calling do-shift [LoggingExternalInterface logging -64] [fuzz-exec] calling call-compare-maybe-signed-eq [fuzz-exec] note result: call-compare-maybe-signed-eq => 0 [fuzz-exec] calling call-compare-maybe-signed-ne [fuzz-exec] note result: call-compare-maybe-signed-ne => 1 (module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (import "fuzzing-support" "log-i32" (func $log (param i32))) (export "foo" (func $1)) (export "do-shift" (func $3)) (export "call-compare-maybe-signed-eq" (func $5)) (export "call-compare-maybe-signed-ne" (func $7)) (func $signed-comparison-to-unsigned (call $log (block (result i32) (drop (i32.const -25749) ) (i32.const 0) ) ) (call $log (block (result i32) (drop (i32.const -25749) ) (i32.const 0) ) ) (call $log (block (result i32) (drop (i32.const -25749) ) (i32.const 1) ) ) ) (func $1 (param $0 i32) (call $log (i32.le_s (i32.sub (i32.const 8) (block $label$1 (result i32) (i32.const -2147483648) ) ) (i32.const 0) ) ) (call $log (i32.le_s (i32.const -2147483640) (i32.const 0) ) ) (call $log (i32.eq (i32.const 8) (i32.const -2147483648) ) ) ) (func $shift (param $0 i32) (call $log (i32.shr_s (i32.shl (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 30) ) (i32.const 24) ) ) ) (func $3 (call $shift (i32.const 65419) ) ) (func $compare-maybe-signed-eq (param $0 i32) (result i32) (drop (local.get $0) ) (i32.const 0) ) (func $5 (result i32) (call $compare-maybe-signed-eq (i32.const 128) ) ) (func $compare-maybe-signed-ne (param $0 i32) (result i32) (drop (local.get $0) ) (i32.const 1) ) (func $7 (result i32) (call $compare-maybe-signed-ne (i32.const 128) ) ) ) [fuzz-exec] calling foo [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 1] [LoggingExternalInterface logging 0] [fuzz-exec] calling do-shift [LoggingExternalInterface logging -64] [fuzz-exec] calling call-compare-maybe-signed-eq [fuzz-exec] note result: call-compare-maybe-signed-eq => 0 [fuzz-exec] calling call-compare-maybe-signed-ne [fuzz-exec] note result: call-compare-maybe-signed-ne => 1 [fuzz-exec] comparing call-compare-maybe-signed-eq [fuzz-exec] comparing call-compare-maybe-signed-ne [fuzz-exec] comparing do-shift [fuzz-exec] comparing foo binaryen-version_108/test/passes/optimize-instructions_fuzz-exec.wast000066400000000000000000000137711423707623100265350ustar00rootroot00000000000000(module (import "fuzzing-support" "log-f32" (func $logf32 (param f32))) (import "fuzzing-support" "log-f64" (func $logf64 (param f64))) (func "test32" (call $logf32 (f32.add (f32.const -nan:0xffff82) (f32.neg (f32.const -nan:0xfff622) ) ) ) (call $logf32 (f32.sub (f32.const -nan:0xffff82) (f32.neg (f32.const -nan:0xfff622) ) ) ) (call $logf32 (f32.mul (f32.const -nan:0xffff82) (f32.neg (f32.const -nan:0xfff622) ) ) ) (call $logf32 (f32.div (f32.const -nan:0xffff82) (f32.neg (f32.const -nan:0xfff622) ) ) ) (call $logf32 (f32.copysign (f32.const -nan:0xffff82) (f32.neg (f32.const -nan:0xfff622) ) ) ) (call $logf32 (f32.min (f32.const -nan:0xffff82) (f32.neg (f32.const -nan:0xfff622) ) ) ) (call $logf32 (f32.max (f32.const -nan:0xffff82) (f32.neg (f32.const -nan:0xfff622) ) ) ) ) (func "test64" (call $logf64 (f64.add (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.sub (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.mul (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.div (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.copysign (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.min (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) (call $logf64 (f64.max (f64.const -nan:0xfffffffffff82) (f64.neg (f64.const -nan:0xfffffffffa622) ) ) ) ) (func "just-one-nan" (call $logf32 (f32.add (f32.const 0) (f32.neg (f32.const -nan:0xfff622) ) ) ) (call $logf32 (f32.add (f32.const -nan:0xfff622) (f32.neg (f32.const 0) ) ) ) (call $logf32 (f32.add (f32.const -0) (f32.neg (f32.const -nan:0xfff622) ) ) ) (call $logf32 (f32.add (f32.const -nan:0xfff622) (f32.neg (f32.const -0) ) ) ) (call $logf32 (f32.add (f32.const 0) (f32.neg (f32.const nan:0xfff622) ) ) ) (call $logf32 (f32.add (f32.const nan:0xfff622) (f32.neg (f32.const 0) ) ) ) ) (func "ignore" ;; none of these are nan inputs, so the interpreter must not change the sign (call $logf32 (f32.div (f32.const 0) (f32.neg (f32.const 0) ) ) ) (call $logf32 (f32.div (f32.const -0) (f32.neg (f32.const 0) ) ) ) (call $logf32 (f32.div (f32.const 0) (f32.neg (f32.const -0) ) ) ) (call $logf32 (f32.div (f32.const -0) (f32.neg (f32.const -0) ) ) ) ) ) (module (import "fuzzing-support" "log-i32" (func $log (param i32))) (func $signed-comparison-to-unsigned (call $log (i32.eq ;; should be false (i32.shr_s ;; 0x0000006b after the sign-extend (i32.shl (i32.const -25749) ;; 0xffff9b6b (i32.const 24) ) (i32.const 24) ) (i32.const -149) ;; 0xffffff6b - high bits are set, but not sign bit ) ) ;; the same, with mixed high bits. mixed bits mean the two sides can never be ;; equal, so the eq is always false (call $log (i32.eq (i32.shr_s (i32.shl (i32.const -25749) (i32.const 24) ) (i32.const 24) ) (i32.const 0xffffeb) ) ) ;; the same, with !=, so the result is always true (call $log (i32.ne (i32.shr_s (i32.shl (i32.const -25749) (i32.const 24) ) (i32.const 24) ) (i32.const 0xffffeb) ) ) ) (func "foo" (param $0 i32) ;; 8 - 0x80000000 < 0 ;; ;; is not the same as ;; ;; 8 < 0x80000000 ;; ;; because of overflow. the former is true, the latter is false (call $log (i32.le_s (i32.sub (i32.const 8) (block $label$1 (result i32) ;; the block prevents us from optimizing this ;; which would avoid the issue. a global or a ;; call would do the same, all would make the ;; value only visible at runtime (i32.const 0x80000000) ) ) (i32.const 0) ) ) ;; for comparison, without the block. (call $log (i32.le_s (i32.sub (i32.const 8) (i32.const 0x80000000) ) (i32.const 0) ) ) ;; for comparison, what X - Y < 0 => X < Y would lead to, which has a ;; different value (call $log (i32.le_s (i32.const 8) (i32.const 0x80000000) ) ) ) (func $shift (param $0 i32) (call $log ;; x << 24 >> 24 << 30 >> 24 - the extra shifts make it invalid to do the ;; optimization of not repeating a sign-extend. That is, this would be valid ;; if the 30 were replaced by a 24. (i32.shr_s (i32.shl (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 30) ) (i32.const 24) ) ) ) (func "do-shift" (call $shift (i32.const 65419) ) ) ;; similar, but with the value compared to having the sign bit set but no ;; upper bits (func $compare-maybe-signed-eq (param $0 i32) (result i32) (i32.eq (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 128) ) ) (func "call-compare-maybe-signed-eq" (result i32) (call $compare-maybe-signed-eq (i32.const 128) ) ) ;; the same with != (func $compare-maybe-signed-ne (param $0 i32) (result i32) (i32.ne (i32.shr_s (i32.shl (local.get $0) (i32.const 24) ) (i32.const 24) ) (i32.const 128) ) ) (func "call-compare-maybe-signed-ne" (result i32) (call $compare-maybe-signed-ne (i32.const 128) ) ) ) binaryen-version_108/test/passes/pick-load-signs.txt000066400000000000000000000064711423707623100227570ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (memory $0 1) (func $a (local $y i32) (local.set $y (i32.load8_u (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) ) (func $b (local $y i32) (local.set $y (i32.load16_u (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 65535) ) ) ) (func $c (local $y i32) (local.set $y (i32.load8_u (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) ) (func $d (local $y i32) (local.set $y (i32.load16_u (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 65535) ) ) ) (func $one-of-each (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $more-of-one (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $many-more-of-one (local $y i32) (local.set $y (i32.load8_u (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $a-sign (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $multivar (local $x i32) (local $y i32) (local.set $x (i32.load8_u (i32.const 1024) ) ) (drop (i32.and (local.get $x) (i32.const 255) ) ) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $corners (local $y i32) (drop (i32.load8_s (i32.const 1024) ) ) (drop (i32.load8_u (i32.const 1024) ) ) (local.set $y (i32.const 1024) ) ) (func $wrong-size (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 65535) ) ) ) (func $wrong-size_s (local $y i32) (local.set $y (i32.load8_u (i32.const 1024) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 16) ) (i32.const 16) ) ) ) (func $non-sign-or-unsigned-use (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (local.get $y) ) ) (func $toplevel-load (result i32) (i32.load8_s (i32.const 1024) ) ) (func $tees (local $y i32) (drop (local.tee $y (i32.load8_s (i32.const 1024) ) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) ) ) binaryen-version_108/test/passes/pick-load-signs.wast000066400000000000000000000106511423707623100231110ustar00rootroot00000000000000(module (memory 1) (func $a ;; load 8s, but use is 8u, so load should be signed (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) ) (func $b ;; load 16s, but use is 16u, so load should be signed (local $y i32) (local.set $y (i32.load16_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 65535) ) ) ) (func $c ;; load 8u, keep (local $y i32) (local.set $y (i32.load8_u (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) ) (func $d ;; load 16u, keep (local $y i32) (local.set $y (i32.load16_u (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 65535) ) ) ) (func $one-of-each ;; prefer the signed, potential code removal is bigger (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $more-of-one ;; prefer the signed even if 2x more unsigned (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $many-more-of-one ;; but not 3x (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $a-sign ;; load 8s, use is s, so keep (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $multivar (local $x i32) (local $y i32) (local.set $x (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $x) (i32.const 255) ) ) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 24) ) (i32.const 24) ) ) ) (func $corners (local $y i32) (drop (i32.load8_s ;; not sent into a local.set (i32.const 1024) ) ) (drop (i32.load8_u ;; not sent into a local.set (i32.const 1024) ) ) (local.set $y (i32.const 1024) ;; not a load ) ) (func $wrong-size ;; load 8s, but use is 16 (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 65535) ) ) ) (func $wrong-size_s ;; load 8s, but use is 16 (local $y i32) (local.set $y (i32.load8_u (i32.const 1024) ) ) (drop (i32.shr_s (i32.shl (local.get $y) (i32.const 16) ) (i32.const 16) ) ) ) (func $non-sign-or-unsigned-use (local $y i32) (local.set $y (i32.load8_s (i32.const 1024) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) (drop (local.get $y) ) ) (func $toplevel-load (result i32) (i32.load8_s (i32.const 1024) ) ) (func $tees (local $y i32) (drop ;; a "use", so we can't alter the value (local.tee $y (i32.load8_s (i32.const 1024) ) ) ) (drop (i32.and (local.get $y) (i32.const 255) ) ) ) ) binaryen-version_108/test/passes/pick-load-signs_all-features.txt000066400000000000000000000006131423707623100254130ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 16 16)) (func $atomics-are-always-unsigned (result i32) (local $0 i32) (drop (block $block (result i32) (local.set $0 (i32.atomic.load16_u (i32.const 27) ) ) (i32.shr_s (i32.shl (local.get $0) (i32.const 16) ) (i32.const 16) ) ) ) (i32.const -65) ) ) binaryen-version_108/test/passes/pick-load-signs_all-features.wast000066400000000000000000000006021423707623100255500ustar00rootroot00000000000000(module (memory $0 (shared 16 16)) (func $atomics-are-always-unsigned (result i32) (local $0 i32) (drop (block (result i32) (local.set $0 (i32.atomic.load16_u ;; an atomic load cannot become signed (i32.const 27) ) ) (i32.shr_s (i32.shl (local.get $0) (i32.const 16) ) (i32.const 16) ) ) ) (i32.const -65) ) ) binaryen-version_108/test/passes/post-emscripten.txt000066400000000000000000000046061423707623100231250ustar00rootroot00000000000000(module (type $i32_f32_=>_none (func (param i32 f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_none (func)) (import "env" "invoke_vif" (func $invoke_vif (param i32 i32 f32))) (memory $0 256 256) (table $0 7 7 funcref) (elem (i32.const 1) $exc $other_safe $other_unsafe $deep_safe $deep_unsafe) (func $exc (call $other_safe (i32.const 42) (f32.const 3.141590118408203) ) (call $other_unsafe (i32.const 55) (f32.const 2.1828181743621826) ) (call $deep_safe (i32.const 100) (f32.const 1.1109999418258667) ) (call $deep_unsafe (i32.const 999) (f32.const 1.4140000343322754) ) (call $invoke_vif (i32.add (i32.const 1) (i32.const 1) ) (i32.const 42) (f32.const 3.141590118408203) ) (call $invoke_vif (i32.const 0) (i32.const 42) (f32.const 3.141590118408203) ) (call $invoke_vif (i32.const 1337) (i32.const 42) (f32.const 3.141590118408203) ) ) (func $other_safe (param $0 i32) (param $1 f32) (nop) ) (func $other_unsafe (param $0 i32) (param $1 f32) (nop) ) (func $deep_safe (param $0 i32) (param $1 f32) (call $other_safe (unreachable) (unreachable) ) ) (func $deep_unsafe (param $0 i32) (param $1 f32) (call $other_unsafe (unreachable) (unreachable) ) ) ) (module (type $none_=>_none (func)) (func $call (call $call) ) ) (module (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_none (func)) (type $i32_f32_=>_none (func (param i32 f32))) (import "env" "glob" (global $glob i32)) (import "env" "invoke_vif" (func $invoke_vif (param i32 i32 f32))) (memory $0 256 256) (table $0 7 7 funcref) (elem (global.get $glob) $other_safe) (func $exc (call $invoke_vif (i32.const 3) (i32.const 42) (f32.const 3.141590118408203) ) ) (func $other_safe (param $0 i32) (param $1 f32) (nop) ) ) (module (type $none_=>_none (func)) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $i32_f32_=>_none (func (param i32 f32))) (import "env" "glob" (global $glob i32)) (import "env" "invoke_vif" (func $invoke_vif (param i32 i32 f32))) (memory $0 256 256) (table $0 7 7 funcref) (elem (i32.const 0) $other_safe) (func $exc (call $invoke_vif (i32.const 0) (i32.const 42) (f32.const 3.141590118408203) ) ) (func $other_safe (param $0 i32) (param $1 f32) (call_indirect (type $none_=>_none) (i32.const 0) ) ) ) binaryen-version_108/test/passes/post-emscripten.wast000066400000000000000000000047631423707623100232700ustar00rootroot00000000000000(module (type $0 (func (param i32))) (import "env" "invoke_vif" (func $invoke_vif (param i32 i32 f32))) (memory 256 256) (table 7 7 funcref) (elem (i32.const 1) $exc $other_safe $other_unsafe $deep_safe $deep_unsafe) (func $exc (call $invoke_vif (i32.const 2) ;; other_safe() (i32.const 42) (f32.const 3.14159) ) (call $invoke_vif (i32.const 3) ;; other_unsafe() (i32.const 55) (f32.const 2.18281828) ) (call $invoke_vif (i32.const 4) ;; deep_safe() (i32.const 100) (f32.const 1.111) ) (call $invoke_vif (i32.const 5) ;; deep_unsafe() (i32.const 999) (f32.const 1.414) ) (call $invoke_vif (i32.add (i32.const 1) (i32.const 1)) ;; nonconstant (i32.const 42) (f32.const 3.14159) ) ;; there is no function at index 0, so this cannot be optimized (call $invoke_vif (i32.const 0) (i32.const 42) (f32.const 3.14159) ) ;; there is no function at index 1337, so this cannot be optimized (call $invoke_vif (i32.const 1337) (i32.const 42) (f32.const 3.14159) ) ) (func $other_safe (param i32) (param f32) ) (func $other_unsafe (param i32) (param f32) ) (func $deep_safe (param i32) (param f32) (call $other_safe (unreachable) (unreachable)) ) (func $deep_unsafe (param i32) (param f32) (call $other_unsafe (unreachable) (unreachable)) ) ) (module ;; no invokes (func $call (call $call) ) ) (module ;; non-constant base for elem (type $0 (func (param i32))) (import "env" "invoke_vif" (func $invoke_vif (param i32 i32 f32))) (import "env" "glob" (global $glob i32)) ;; non-constant table offset (memory 256 256) (table 7 7 funcref) (elem (global.get $glob) $other_safe) (func $exc (call $invoke_vif (i32.const 3) ;; other_safe() (i32.const 42) (f32.const 3.14159) ) ) (func $other_safe (param i32) (param f32) ) ) (module ;; indirect call in the invoke target, which we assume might throw (type $none_=>_none (func)) (import "env" "invoke_vif" (func $invoke_vif (param i32 i32 f32))) (import "env" "glob" (global $glob i32)) ;; non-constant table offset (memory 256 256) (table 7 7 funcref) (elem (i32.const 0) $other_safe) (func $exc (call $invoke_vif (i32.const 0) ;; other_safe() (i32.const 42) (f32.const 3.14159) ) ) (func $other_safe (param i32) (param f32) (call_indirect (type $none_=>_none) (i32.const 0) ) ) ) binaryen-version_108/test/passes/precompute-propagate_all-features.txt000066400000000000000000000105741423707623100266010ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32_i64 (func (result i32 i64))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_v128 (func (result v128))) (memory $0 10 10) (func $basic (param $p i32) (local $x i32) (local.set $x (i32.const 10) ) (call $basic (i32.const 20) ) ) (func $split (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 10) ) ) (call $basic (i32.add (local.get $x) (local.get $x) ) ) ) (func $split-but-join (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 10) ) (local.set $x (i32.const 10) ) ) (call $basic (i32.const 20) ) ) (func $split-but-join-different (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 10) ) (local.set $x (i32.const 20) ) ) (call $basic (i32.add (local.get $x) (local.get $x) ) ) ) (func $split-but-join-different-b (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 10) ) (local.set $x (local.get $p) ) ) (call $basic (i32.add (local.get $x) (local.get $x) ) ) ) (func $split-but-join-init0 (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 0) ) ) (call $basic (i32.const 0) ) ) (func $later (param $p i32) (local $x i32) (local.set $x (i32.const 10) ) (call $basic (i32.const 20) ) (local.set $x (i32.const 22) ) (call $basic (i32.const 44) ) (local.set $x (i32.const 39) ) ) (func $later2 (param $p i32) (result i32) (local $x i32) (local.set $x (i32.const 10) ) (local.set $x (i32.const 20) ) (i32.const 20) ) (func $two-ways-but-identical (param $p i32) (result i32) (local $x i32) (local $y i32) (local.set $x (i32.const 10) ) (if (i32.const 1) (local.set $y (i32.const 11) ) (local.set $y (i32.const 11) ) ) (local.set $y (i32.const 21) ) (i32.const 21) ) (func $two-ways-but-almost-identical (param $p i32) (result i32) (local $x i32) (local $y i32) (local.set $x (i32.const 10) ) (if (i32.const 1) (local.set $y (i32.const 12) ) (local.set $y (i32.const 11) ) ) (local.set $y (i32.add (i32.const 10) (local.get $y) ) ) (local.get $y) ) (func $deadloop (param $p i32) (result i32) (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.const 0) ) (local.set $y (i32.const 0) ) (br $loop) ) ) (func $deadloop2 (param $p i32) (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.const 0) ) (local.set $y (i32.const 0) ) (call $deadloop2 (i32.const 0) ) (call $deadloop2 (i32.const 0) ) (br $loop) ) ) (func $deadloop3 (param $p i32) (local $x i32) (local $y i32) (loop $loop (local.set $x (i32.const 0) ) (local.set $y (i32.const 0) ) (call $deadloop2 (i32.const 0) ) (call $deadloop2 (i32.const 0) ) (br $loop) ) ) (func $through-tee (param $x i32) (param $y i32) (result i32) (local.set $x (local.tee $y (i32.const 7) ) ) (return (i32.const 14) ) ) (func $through-tee-more (param $x i32) (param $y i32) (result i32) (local.set $x (i32.eqz (local.tee $y (i32.const 7) ) ) ) (return (i32.const 7) ) ) (func $multipass (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (nop) (if (local.get $3) (local.set $2 (i32.const 0) ) ) (local.get $2) ) (func $through-fallthrough (param $x i32) (param $y i32) (result i32) (local.set $x (block $block (result i32) (nop) (local.tee $y (i32.const 7) ) ) ) (return (i32.const 14) ) ) (func $simd-load (result v128) (local $x v128) (local.set $x (v128.load8_splat (i32.const 0) ) ) (local.get $x) ) (func $tuple-local (result i32 i64) (local $i32s (i32 i32)) (local $i64s (i64 i64)) (local.set $i32s (tuple.make (i32.const 42) (i32.const 0) ) ) (local.set $i64s (tuple.make (i64.const 42) (i64.const 0) ) ) (tuple.make (i32.const 42) (i64.const 0) ) ) ) binaryen-version_108/test/passes/precompute-propagate_all-features.wast000066400000000000000000000127731423707623100267430ustar00rootroot00000000000000(module (memory 10 10) (func $basic (param $p i32) (local $x i32) (local.set $x (i32.const 10)) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 10)) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split-but-join (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 10)) (local.set $x (i32.const 10)) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split-but-join-different (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 10)) (local.set $x (i32.const 20)) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split-but-join-different-b (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 10)) (local.set $x (local.get $p)) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split-but-join-init0 (param $p i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 0)) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $later (param $p i32) (local $x i32) (local.set $x (i32.const 10)) (call $basic (i32.add (local.get $x) (local.get $x))) (local.set $x (i32.const 22)) (call $basic (i32.add (local.get $x) (local.get $x))) (local.set $x (i32.const 39)) ) (func $later2 (param $p i32) (result i32) (local $x i32) (local.set $x (i32.const 10)) (local.set $x (i32.add (local.get $x) (local.get $x))) (local.get $x) ) (func $two-ways-but-identical (param $p i32) (result i32) (local $x i32) (local $y i32) (local.set $x (i32.const 10)) (if (i32.const 1) (local.set $y (i32.const 11)) (local.set $y (i32.add (local.get $x) (i32.const 1))) ) (local.set $y (i32.add (local.get $x) (local.get $y))) (local.get $y) ) (func $two-ways-but-almost-identical (param $p i32) (result i32) (local $x i32) (local $y i32) (local.set $x (i32.const 10)) (if (i32.const 1) (local.set $y (i32.const 12)) ;; 12, not 11... (local.set $y (i32.add (local.get $x) (i32.const 1))) ) (local.set $y (i32.add (local.get $x) (local.get $y))) (local.get $y) ) (func $deadloop (param $p i32) (result i32) (local $x i32) (local $y i32) (loop $loop ;; we look like we depend on the other, but we don't actually (local.set $x (if (result i32) (i32.const 1) (i32.const 0) (local.get $y))) (local.set $y (if (result i32) (i32.const 1) (i32.const 0) (local.get $x))) (br $loop) ) ) (func $deadloop2 (param $p i32) (local $x i32) (local $y i32) (loop $loop ;; we look like we depend on the other, but we don't actually (local.set $x (if (result i32) (i32.const 1) (i32.const 0) (local.get $y))) (local.set $y (if (result i32) (i32.const 1) (i32.const 0) (local.get $x))) (call $deadloop2 (local.get $x)) (call $deadloop2 (local.get $y)) (br $loop) ) ) (func $deadloop3 (param $p i32) (local $x i32) (local $y i32) (loop $loop ;; we look like we depend on the other, but we don't actually (local.set $x (if (result i32) (i32.const 1) (i32.const 0) (local.get $x))) (local.set $y (if (result i32) (i32.const 1) (i32.const 0) (local.get $y))) (call $deadloop2 (local.get $x)) (call $deadloop2 (local.get $y)) (br $loop) ) ) (func $through-tee (param $x i32) (param $y i32) (result i32) (local.set $x (local.tee $y (i32.const 7) ) ) (return (i32.add (local.get $x) (local.get $y) ) ) ) (func $through-tee-more (param $x i32) (param $y i32) (result i32) (local.set $x (i32.eqz (local.tee $y (i32.const 7) ) ) ) (return (i32.add (local.get $x) (local.get $y) ) ) ) (func $multipass (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (local.get $3) ;; this will be precomputed to 0. after that, the if will be ;; precomputed to not exist at all. removing the set in the ;; if body then allows us to optimize the value of $3 in the ;; if lower down, but we do not do an additional cycle of ;; this pass automatically as such things are fairly rare, ;; so that opportunity remains unoptimized in this test. (local.set $3 ;; this set is completely removed, allowing later opts (i32.const 24) ) ) (if (local.get $3) (local.set $2 (i32.const 0) ) ) (local.get $2) ) (func $through-fallthrough (param $x i32) (param $y i32) (result i32) (local.set $x (block (result i32) (nop) (local.tee $y (i32.const 7) ) ) ) (return (i32.add (local.get $x) (local.get $y) ) ) ) (func $simd-load (result v128) (local $x v128) (local.set $x (v128.load8_splat (i32.const 0))) (local.get $x) ) (func $tuple-local (result i32 i64) (local $i32s (i32 i32)) (local $i64s (i64 i64)) (local.set $i32s (tuple.make (i32.const 42) (i32.const 0) ) ) (local.set $i64s (tuple.make (i64.const 42) (i64.const 0) ) ) (tuple.make (tuple.extract 0 (local.get $i32s) ) (tuple.extract 1 (local.get $i64s) ) ) ) ) binaryen-version_108/test/passes/precompute_all-features.txt000066400000000000000000000112171423707623100246140ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $none_=>_f64 (func (result f64))) (type $0 (func (param i32))) (type $none_=>_v128 (func (result v128))) (type $none_=>_i32_i64 (func (result i32 i64))) (type $none_=>_anyref (func (result anyref))) (global $global i32 (i32.const 1)) (global $global-mut (mut i32) (i32.const 2)) (memory $0 512 512) (data (i32.const 0) "hello!") (elem declare func $dummy) (func $x (param $x i32) (call $x (i32.const 2300) ) (nop) (drop (i32.add (i32.const 1) (local.get $x) ) ) (nop) (nop) (nop) (nop) (loop $in (br $in) ) (nop) (block $c (nop) (call $x (i32.const 4) ) (br $c) (br $c) ) (drop (block $val (result i32) (nop) (call $x (i32.const 4) ) (br $val (i32.const 101) ) (br $val (i32.const 102) ) ) ) (nop) (drop (block $d0 (result i32) (call $x (i32.const 5) ) (nop) (i32.const 1) ) ) (drop (block $d2 (result i32) (call $x (i32.const 6) ) (nop) (i32.const 1) ) ) (drop (block $d4 (result i32) (call $x (i32.const 7) ) (nop) (i32.const 2) ) ) (call $x (i32.const 2) ) (call $x (i32.const 1) ) (call $x (i32.const 0) ) (call $x (i32.const 0) ) ) (func $ret (result i32) (if (call $ret) (return (i32.const 0) ) ) (if (call $ret) (return (i32.const 1) ) ) (i32.const 1) ) (func $noret (if (call $ret) (return) ) ) (func $refinalize-br-condition-unreachable (block $label$1 (drop (br_if $label$1 (unreachable) ) ) ) ) (func $br_if-condition-is-block-i32-but-unreachable-so-refinalize-tricky (drop (block $label$1 (result i32) (drop (br_if $label$1 (i32.const 100) (block $label$3 (unreachable) ) ) ) (i32.const 0) ) ) ) (func $reuse-br-value (result f64) (block $label$0 (result f64) (i32.store8 (i32.const 1919623207) (if (result i32) (i32.const 1) (block $label$2 (drop (i64.and (i64.trunc_f32_u (f32.const 70847791997969805621592064) ) (i64.const 729618461987467893) ) ) (br $label$0 (f64.const 6.134856208230095e-154) ) ) (i32.load offset=3 align=2 (i32.const 169901344) ) ) ) (f64.const 4776014875438170098655851e156) ) ) (func $refinalize-two-breaks-one-unreachable (drop (block $label$0 (result i64) (block (select (i64.const 1) (block $block (global.set $global-mut (i32.const 1) ) (br $label$0 (i64.const -22) ) ) (i32.const 0) ) (drop (i32.const 1) ) ) ) ) ) (func $one-break-value-and-it-is-unreachable (result f64) (local $var$0 i32) (block $label$6 (block (unreachable) (drop (i32.const 0) ) ) ) ) (func $global-notprecomputable (result i32) (i32.add (i32.const 1) (global.get $global-mut) ) ) (func $global-precomputable (result i32) (i32.const 2) ) (func $global-partiallyprecomputable (result i32) (i32.sub (i32.add (i32.const 1) (global.get $global-mut) ) (i32.const 2) ) ) (func $simd-precompute (result v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) ) (func $no-memory-init-precompute (memory.init 0 (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $no-data-drop-precompute (data.drop 0) ) (func $no-memory-copy-precompute (memory.copy (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $no-memory-fill-precompute (memory.fill (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $tuple-precompute (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) (func $loop-precompute (result i32) (i32.const 1) ) (func $reftype-test (result anyref) (ref.null any) ) (func $dummy (nop) ) (func $br_reuse_node (drop (block $l0 (result f32) (drop (block $l1 (global.set $global-mut (i32.const 1) ) (br $l0 (f32.const 3.5) ) ) ) (f32.const 0) ) ) (drop (block $l2 (result anyref) (drop (block $l3 (global.set $global-mut (i32.const 1) ) (br $l2 (ref.null any) ) ) ) (ref.null any) ) ) (drop (block $l4 (result funcref) (drop (block $l5 (global.set $global-mut (i32.const 1) ) (br $l4 (ref.func $dummy) ) ) ) (ref.null func) ) ) ) ) binaryen-version_108/test/passes/precompute_all-features.wast000066400000000000000000000213531423707623100247550ustar00rootroot00000000000000(module (memory 512 512 (data "hello!") ) (type $0 (func (param i32))) (global $global i32 (i32.const 1)) (global $global-mut (mut i32) (i32.const 2)) (func $x (type $0) (param $x i32) (call $x (i32.add (i32.const 100) (i32.const 2200) ) ) (drop (i32.add (i32.const 1) (i32.const 2) ) ) (drop (i32.add (i32.const 1) (local.get $x) ) ) (drop (i32.add (i32.const 1) (i32.add (i32.const 2) (i32.const 3) ) ) ) (drop (i32.sub (i32.const 1) (i32.const 2) ) ) (drop (i32.sub (i32.add (i32.const 0) (i32.const 4) ) (i32.const 1) ) ) (drop (tuple.make (tuple.extract 0 (tuple.make (i32.const 42) (i32.const 0) ) ) (tuple.extract 1 (tuple.make (i64.const 0) (i64.const 42) ) ) ) ) (loop $in (br $in) ) (block $b (br_if $b (i32.const 0)) (br_if $b (i32.const 1)) (call $x (i32.const 4)) ) (block $c (br_if $c (i32.const 0)) (call $x (i32.const 4)) (br_if $c (i32.const 1)) (br $c) ) (drop (block $val (result i32) (drop (br_if $val (i32.const 100) (i32.const 0))) (call $x (i32.const 4)) (drop (br_if $val (i32.const 101) (i32.const 1))) (br $val (i32.const 102)) ) ) (block $d (block $e (br_if $d (br $e)) (call $x (i32.const 4)) (br_if $e (br $d)) ) ) (drop (block $d (result i32) (call $x (i32.const 5)) (block $e (drop (br_if $d (br $e) (i32.const 1))) (drop (br_if $d (br $e) (i32.const 0))) (drop (br_if $d (i32.const 1) (br $e))) (drop (br_if $d (i32.const 0) (br $e))) (unreachable) ) (i32.const 1) ) ) (drop (block $d (result i32) (call $x (i32.const 6)) (block $e (drop (br_if $d (br $e) (i32.const 0))) (drop (br_if $d (i32.const 1) (br $e))) (drop (br_if $d (i32.const 0) (br $e))) (unreachable) ) (i32.const 1) ) ) (drop (block $d (result i32) (call $x (i32.const 7)) (block $e (drop (br_if $d (i32.const 1) (br $e))) ) (i32.const 2) ) ) (call $x (block $out (result i32) (block $waka1 (block $waka2 (block $waka3 (br_table $waka1 $waka2 $waka3 (i32.const 0) ) ) (br $out (i32.const 0)) ) (br $out (i32.const 1)) ) (br $out (i32.const 2)) ) ) (call $x (block $out (result i32) (block $waka1 (block $waka2 (block $waka3 (br_table $waka1 $waka2 $waka3 (i32.const 1) ) ) (br $out (i32.const 0)) ) (br $out (i32.const 1)) ) (br $out (i32.const 2)) ) ) (call $x (block $out (result i32) (block $waka1 (block $waka2 (block $waka3 (br_table $waka1 $waka2 $waka3 (i32.const 2) ) ) (br $out (i32.const 0)) ) (br $out (i32.const 1)) ) (br $out (i32.const 2)) ) ) (call $x (block $out (result i32) (block $waka1 (block $waka2 (block $waka3 (br_table $waka1 $waka2 $waka3 (i32.const 3) ) ) (br $out (i32.const 0)) ) (br $out (i32.const 1)) ) (br $out (i32.const 2)) ) ) ) (func $ret (result i32) (if (call $ret) (return (i32.const 0)) ) (if (call $ret) (return (return (i32.const 1))) ) (i32.const 1) ) (func $noret (if (call $ret) (return) ) ) (func $refinalize-br-condition-unreachable (block $label$1 (drop (br_if $label$1 (unreachable) ) ) ) ) (func $br_if-condition-is-block-i32-but-unreachable-so-refinalize-tricky (drop (block $label$1 (result i32) (drop (br_if $label$1 (i32.const 100) (block $label$3 (result i32) (unreachable) ) ) ) (i32.const 0) ) ) ) (func $reuse-br-value (result f64) (block $label$0 (result f64) (i32.store8 (i32.const 1919623207) (if (result i32) (i32.const 1) (block $label$2 (result i32) (drop (i64.and (i64.trunc_f32_u (f32.const 70847791997969805621592064) ) (i64.const 729618461987467893) ) ) (br_if $label$2 (i32.const 2049535349) (f32.eq (f32.demote_f64 (f64.mul (br_if $label$0 ;; this br is optimized, and br *and* values reused (f64.const 6.134856208230095e-154) (i32.const 690910817) ) (f64.const 1.515470884183969e-152) ) ) (f32.const 66524025679377434935296) ) ) ) (i32.load offset=3 align=2 (i32.const 169901344) ) ) ) (f64.const 4776014875438170098655851e156) ) ) (func $refinalize-two-breaks-one-unreachable (drop (block $label$0 (result i64) (br_if $label$0 (select (i64.const 1) (block (result i64) (global.set $global-mut (i32.const 1) ) (br_if $label$0 (i64.const -22) (i32.const -1) ) ) (i32.const 0) ) (i32.const 1) ) ) ) ) (func $one-break-value-and-it-is-unreachable (result f64) (local $var$0 i32) (block $label$6 (result f64) (br_if $label$6 (unreachable) (i32.const 0) ) ) ) (func $global-notprecomputable (result i32) (i32.add (i32.const 1) (global.get $global-mut) ) ) (func $global-precomputable (result i32) (i32.add (i32.const 1) (global.get $global) ) ) (func $global-partiallyprecomputable (result i32) (i32.sub (i32.add (i32.const 1) (global.get $global-mut) ) (i32.add (i32.const 1) (global.get $global) ) ) ) (func $simd-precompute (result v128) (i32x4.splat (i32.const 0) ) ) (func $no-memory-init-precompute (memory.init 0 (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $no-data-drop-precompute (data.drop 0) ) (func $no-memory-copy-precompute (memory.copy (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $no-memory-fill-precompute (memory.fill (i32.const 512) (i32.const 0) (i32.const 12) ) ) (func $tuple-precompute (result i32 i64) (tuple.make (tuple.extract 0 (tuple.make (i32.const 42) (i32.const 0) ) ) (tuple.extract 1 (tuple.make (i64.const 0) (i64.const 42) ) ) ) ) (func $loop-precompute (result i32) (block $block (result i32) (loop $loop (br $block (i32.const 1)) ) ) ) ;; Check if Precompute pass does not crash on reference types (func $reftype-test (result externref) (ref.null extern) ) ;; Check if constant nodes (const, ref.null, and ref.func) are correctly ;; reused. (We shouldn't reuse a const node for something like ref.null, which ;; will incorrectly cause an expression like 'someref.const'.) (func $dummy) (func $br_reuse_node (drop (block $l0 (result f32) (drop (block $l1 (result i32) (global.set $global-mut (i32.const 1) ) (br_if $l1 (i32.const 1) (f32.lt (br_if $l0 (f32.const 3.5) (i32.const 1) ) (f32.const 3) ) ) ) ) (f32.const 0) ) ) (drop (block $l2 (result externref) (drop (block $l3 (result i32) (global.set $global-mut (i32.const 1) ) (br_if $l3 (i32.const 1) (ref.is_null (br_if $l2 (ref.null extern) (i32.const 3) ) ) ) ) ) (ref.null extern) ) ) (drop (block $l4 (result funcref) (drop (block $l5 (result i32) (global.set $global-mut (i32.const 1) ) (br_if $l5 (i32.const 1) (ref.is_null (br_if $l4 (ref.func $dummy) (i32.const 3) ) ) ) ) ) (ref.null func) ) ) ) ) binaryen-version_108/test/passes/precompute_coalesce-locals_vacuum.txt000066400000000000000000000002361423707623100266400ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (func $nested-br_if-value (param $0 i32) (result i32) (loop $label$0 (br $label$0) ) ) ) binaryen-version_108/test/passes/precompute_coalesce-locals_vacuum.wast000066400000000000000000000005471423707623100270040ustar00rootroot00000000000000(module (func $nested-br_if-value (param $var$0 i32) (result i32) (local $1 i32) (local $2 i32) (loop $label$0 (result i32) (drop (i32.const 2) ) (block (result i32) (local.set $2 (i32.const 4) ) (br_if $label$0 ;; precomputing this into a br must change the type (i32.const 1) ) (local.get $2) ) ) ) ) binaryen-version_108/test/passes/print-call-graph.txt000066400000000000000000000750171423707623100231410ustar00rootroot00000000000000digraph call { rankdir = LR; subgraph cluster_key { node [shape=box, fontname=courier, fontsize=10]; edge [fontname=courier, fontsize=10]; label = "Key"; "Import" [style="filled", fillcolor="turquoise"]; "Export" [style="filled", fillcolor="gray"]; "Indirect Target" [style="filled, rounded", fillcolor="white"]; "A" -> "B" [style="filled, rounded", label = "Direct Call"]; } node [shape=box, fontname=courier, fontsize=10]; "stackAlloc" [style="filled", fillcolor="white"]; "stackSave" [style="filled", fillcolor="white"]; "stackRestore" [style="filled", fillcolor="white"]; "establishStackSpace" [style="filled", fillcolor="white"]; "setThrew" [style="filled", fillcolor="white"]; "setTempRet0" [style="filled", fillcolor="white"]; "getTempRet0" [style="filled", fillcolor="white"]; "_malloc" [style="filled", fillcolor="white"]; "_free" [style="filled", fillcolor="white"]; "_main" [style="filled", fillcolor="white"]; "___stdio_close" [style="filled", fillcolor="white"]; "___stdio_write" [style="filled", fillcolor="white"]; "___stdio_seek" [style="filled", fillcolor="white"]; "___syscall_ret" [style="filled", fillcolor="white"]; "___errno_location" [style="filled", fillcolor="white"]; "_cleanup_387" [style="filled", fillcolor="white"]; "___stdout_write" [style="filled", fillcolor="white"]; "_fflush" [style="filled", fillcolor="white"]; "___fflush_unlocked" [style="filled", fillcolor="white"]; "__Znwj" [style="filled", fillcolor="white"]; "__ZSt15get_new_handlerv" [style="filled", fillcolor="white"]; "runPostSets" [style="filled", fillcolor="white"]; "_memset" [style="filled", fillcolor="white"]; "_memcpy" [style="filled", fillcolor="white"]; "_pthread_self" [style="filled", fillcolor="white"]; "dynCall_ii" [style="filled", fillcolor="white"]; "dynCall_iiii" [style="filled", fillcolor="white"]; "dynCall_vi" [style="filled", fillcolor="white"]; "dynCall_v" [style="filled", fillcolor="white"]; "b0" [style="filled", fillcolor="white"]; "b1" [style="filled", fillcolor="white"]; "b2" [style="filled", fillcolor="white"]; "b3" [style="filled", fillcolor="white"]; "abort" [style="filled", fillcolor="turquoise"]; "_pthread_cleanup_pop" [style="filled", fillcolor="turquoise"]; "___lock" [style="filled", fillcolor="turquoise"]; "___syscall6" [style="filled", fillcolor="turquoise"]; "_pthread_cleanup_push" [style="filled", fillcolor="turquoise"]; "___syscall140" [style="filled", fillcolor="turquoise"]; "_emscripten_memcpy_big" [style="filled", fillcolor="turquoise"]; "___syscall54" [style="filled", fillcolor="turquoise"]; "___unlock" [style="filled", fillcolor="turquoise"]; "___syscall146" [style="filled", fillcolor="turquoise"]; "_fflush" [style="filled", fillcolor="gray"]; "_main" [style="filled", fillcolor="gray"]; "_pthread_self" [style="filled", fillcolor="gray"]; "_memset" [style="filled", fillcolor="gray"]; "_malloc" [style="filled", fillcolor="gray"]; "_memcpy" [style="filled", fillcolor="gray"]; "_free" [style="filled", fillcolor="gray"]; "___errno_location" [style="filled", fillcolor="gray"]; "runPostSets" [style="filled", fillcolor="gray"]; "stackAlloc" [style="filled", fillcolor="gray"]; "stackSave" [style="filled", fillcolor="gray"]; "stackRestore" [style="filled", fillcolor="gray"]; "establishStackSpace" [style="filled", fillcolor="gray"]; "setThrew" [style="filled", fillcolor="gray"]; "setTempRet0" [style="filled", fillcolor="gray"]; "getTempRet0" [style="filled", fillcolor="gray"]; "dynCall_ii" [style="filled", fillcolor="gray"]; "dynCall_iiii" [style="filled", fillcolor="gray"]; "dynCall_vi" [style="filled", fillcolor="gray"]; "dynCall_v" [style="filled", fillcolor="gray"]; "_main" -> "__Znwj"; // call "___stdio_close" -> "___syscall6"; // call "___stdio_close" -> "___syscall_ret"; // call "___stdio_write" -> "_pthread_cleanup_push"; // call "___stdio_write" -> "___syscall146"; // call "___stdio_write" -> "___syscall_ret"; // call "___stdio_write" -> "_pthread_cleanup_pop"; // call "___stdio_seek" -> "___syscall140"; // call "___stdio_seek" -> "___syscall_ret"; // call "___syscall_ret" -> "___errno_location"; // call "___errno_location" -> "_pthread_self"; // call "_cleanup_387" -> "_free"; // call "___stdout_write" -> "___syscall54"; // call "___stdout_write" -> "___stdio_write"; // call "_fflush" -> "___fflush_unlocked"; // call "_fflush" -> "_malloc"; // call "_fflush" -> "_free"; // call "_fflush" -> "_fflush"; // call "_fflush" -> "___lock"; // call "_fflush" -> "___unlock"; // call "__Znwj" -> "_malloc"; // call "__Znwj" -> "__ZSt15get_new_handlerv"; // call "_memcpy" -> "_emscripten_memcpy_big"; // call "b0" -> "abort"; // call "b1" -> "abort"; // call "b2" -> "abort"; // call "b3" -> "abort"; // call "b0" [style="filled, rounded"]; "___stdio_close" [style="filled, rounded"]; "b1" [style="filled, rounded"]; "___stdout_write" [style="filled, rounded"]; "___stdio_seek" [style="filled, rounded"]; "___stdio_write" [style="filled, rounded"]; "b2" [style="filled, rounded"]; "_cleanup_387" [style="filled, rounded"]; "b3" [style="filled, rounded"]; } (module (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$v (func)) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (import "env" "memory" (memory $0 256 256)) (data (global.get $memoryBase) "\05\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\b0\04\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\04") (import "env" "table" (table $timport$0 9 9 funcref)) (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) (import "global" "NaN" (global $nan$asm2wasm$import f64)) (import "global" "Infinity" (global $inf$asm2wasm$import f64)) (import "env" "memoryBase" (global $memoryBase i32)) (import "env" "tableBase" (global $tableBase i32)) (import "env" "abort" (func $abort (param i32))) (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) (import "env" "___lock" (func $___lock (param i32))) (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) (import "env" "___unlock" (func $___unlock (param i32))) (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) (global $STACKTOP (mut i32) (global.get $STACKTOP$asm2wasm$import)) (global $STACK_MAX (mut i32) (global.get $STACK_MAX$asm2wasm$import)) (global $ABORT (mut i32) (global.get $ABORT$asm2wasm$import)) (global $__THREW__ (mut i32) (i32.const 0)) (global $threwValue (mut i32) (i32.const 0)) (global $setjmpId (mut i32) (i32.const 0)) (global $undef (mut i32) (i32.const 0)) (global $nan (mut f64) (global.get $nan$asm2wasm$import)) (global $inf (mut f64) (global.get $inf$asm2wasm$import)) (global $tempInt (mut i32) (i32.const 0)) (global $tempBigInt (mut i32) (i32.const 0)) (global $tempBigIntP (mut i32) (i32.const 0)) (global $tempBigIntS (mut i32) (i32.const 0)) (global $tempBigIntR (mut f64) (f64.const 0)) (global $tempBigIntI (mut i32) (i32.const 0)) (global $tempBigIntD (mut i32) (i32.const 0)) (global $tempValue (mut i32) (i32.const 0)) (global $tempDouble (mut f64) (f64.const 0)) (global $tempRet0 (mut i32) (i32.const 0)) (global $tempFloat (mut f32) (f32.const 0)) (global $f0 (mut f32) (f32.const 0)) (elem (i32.const 0) $b0 $___stdio_close $b1 $___stdout_write $___stdio_seek $___stdio_write $b2 $_cleanup_387 $b3) (export "_fflush" (func $_fflush)) (export "_main" (func $_main)) (export "_pthread_self" (func $_pthread_self)) (export "_memset" (func $_memset)) (export "_malloc" (func $_malloc)) (export "_memcpy" (func $_memcpy)) (export "_free" (func $_free)) (export "___errno_location" (func $___errno_location)) (export "runPostSets" (func $runPostSets)) (export "stackAlloc" (func $stackAlloc)) (export "stackSave" (func $stackSave)) (export "stackRestore" (func $stackRestore)) (export "establishStackSpace" (func $establishStackSpace)) (export "setThrew" (func $setThrew)) (export "setTempRet0" (func $setTempRet0)) (export "getTempRet0" (func $getTempRet0)) (export "dynCall_ii" (func $dynCall_ii)) (export "dynCall_iiii" (func $dynCall_iiii)) (export "dynCall_vi" (func $dynCall_vi)) (export "dynCall_v" (func $dynCall_v)) (func $stackAlloc (param $0 i32) (result i32) (local $1 i32) (local.set $1 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (local.get $0) ) ) (global.set $STACKTOP (i32.and (i32.add (global.get $STACKTOP) (i32.const 15) ) (i32.const -16) ) ) (local.get $1) ) (func $stackSave (result i32) (global.get $STACKTOP) ) (func $stackRestore (param $0 i32) (global.set $STACKTOP (local.get $0) ) ) (func $establishStackSpace (param $0 i32) (param $1 i32) (global.set $STACKTOP (local.get $0) ) (global.set $STACK_MAX (local.get $1) ) ) (func $setThrew (param $0 i32) (param $1 i32) (if (i32.eqz (global.get $__THREW__) ) (block $block (global.set $__THREW__ (local.get $0) ) (global.set $threwValue (local.get $1) ) ) ) ) (func $setTempRet0 (param $0 i32) (global.set $tempRet0 (local.get $0) ) ) (func $getTempRet0 (result i32) (global.get $tempRet0) ) (func $_malloc (param $0 i32) (result i32) (i32.const 0) ) (func $_free (param $0 i32) (nop) ) (func $_main (result i32) (local $0 i32) (i64.store align=4 (local.tee $0 (call $__Znwj (i32.const 8) ) ) (i64.const 0) ) (local.get $0) ) (func $___stdio_close (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local.set $1 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 16) ) ) (i32.store (local.tee $2 (local.get $1) ) (i32.load offset=60 (local.get $0) ) ) (local.set $0 (call $___syscall_ret (call $___syscall6 (i32.const 6) (local.get $2) ) ) ) (global.set $STACKTOP (local.get $1) ) (local.get $0) ) (func $___stdio_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local.set $7 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 48) ) ) (local.set $8 (i32.add (local.get $7) (i32.const 16) ) ) (local.set $9 (local.get $7) ) (i32.store (local.tee $3 (i32.add (local.get $7) (i32.const 32) ) ) (local.tee $5 (i32.load (local.tee $6 (i32.add (local.get $0) (i32.const 28) ) ) ) ) ) (i32.store offset=4 (local.get $3) (local.tee $4 (i32.sub (i32.load (local.tee $10 (i32.add (local.get $0) (i32.const 20) ) ) ) (local.get $5) ) ) ) (i32.store offset=8 (local.get $3) (local.get $1) ) (i32.store offset=12 (local.get $3) (local.get $2) ) (local.set $13 (i32.add (local.get $0) (i32.const 60) ) ) (local.set $14 (i32.add (local.get $0) (i32.const 44) ) ) (local.set $1 (local.get $3) ) (local.set $5 (i32.const 2) ) (local.set $11 (i32.add (local.get $4) (local.get $2) ) ) (local.set $0 (block $jumpthreading$outer$1 (result i32) (block $jumpthreading$inner$1 (block $jumpthreading$inner$0 (loop $while-in (br_if $jumpthreading$inner$0 (i32.eq (local.get $11) (local.tee $4 (if (result i32) (i32.load (i32.const 1140) ) (block $block (result i32) (call $_pthread_cleanup_push (i32.const 1) (local.get $0) ) (i32.store (local.get $9) (i32.load (local.get $13) ) ) (i32.store offset=4 (local.get $9) (local.get $1) ) (i32.store offset=8 (local.get $9) (local.get $5) ) (local.set $3 (call $___syscall_ret (call $___syscall146 (i32.const 146) (local.get $9) ) ) ) (call $_pthread_cleanup_pop (i32.const 0) ) (local.get $3) ) (block $block0 (result i32) (i32.store (local.get $8) (i32.load (local.get $13) ) ) (i32.store offset=4 (local.get $8) (local.get $1) ) (i32.store offset=8 (local.get $8) (local.get $5) ) (call $___syscall_ret (call $___syscall146 (i32.const 146) (local.get $8) ) ) ) ) ) ) ) (br_if $jumpthreading$inner$1 (i32.lt_s (local.get $4) (i32.const 0) ) ) (local.set $11 (i32.sub (local.get $11) (local.get $4) ) ) (local.set $1 (if (result i32) (i32.gt_u (local.get $4) (local.tee $12 (i32.load offset=4 (local.get $1) ) ) ) (block $block2 (result i32) (i32.store (local.get $6) (local.tee $3 (i32.load (local.get $14) ) ) ) (i32.store (local.get $10) (local.get $3) ) (local.set $4 (i32.sub (local.get $4) (local.get $12) ) ) (local.set $3 (i32.add (local.get $1) (i32.const 8) ) ) (local.set $5 (i32.add (local.get $5) (i32.const -1) ) ) (i32.load offset=12 (local.get $1) ) ) (if (result i32) (i32.eq (local.get $5) (i32.const 2) ) (block $block4 (result i32) (i32.store (local.get $6) (i32.add (i32.load (local.get $6) ) (local.get $4) ) ) (local.set $3 (local.get $1) ) (local.set $5 (i32.const 2) ) (local.get $12) ) (block $block5 (result i32) (local.set $3 (local.get $1) ) (local.get $12) ) ) ) ) (i32.store (local.get $3) (i32.add (i32.load (local.get $3) ) (local.get $4) ) ) (i32.store offset=4 (local.get $3) (i32.sub (local.get $1) (local.get $4) ) ) (local.set $1 (local.get $3) ) (br $while-in) ) ) (i32.store offset=16 (local.get $0) (i32.add (local.tee $1 (i32.load (local.get $14) ) ) (i32.load offset=48 (local.get $0) ) ) ) (i32.store (local.get $6) (local.tee $0 (local.get $1) ) ) (i32.store (local.get $10) (local.get $0) ) (br $jumpthreading$outer$1 (local.get $2) ) ) (i32.store offset=16 (local.get $0) (i32.const 0) ) (i32.store (local.get $6) (i32.const 0) ) (i32.store (local.get $10) (i32.const 0) ) (i32.store (local.get $0) (i32.or (i32.load (local.get $0) ) (i32.const 32) ) ) (select (i32.const 0) (i32.sub (local.get $2) (i32.load offset=4 (local.get $1) ) ) (i32.eq (local.get $5) (i32.const 2) ) ) ) ) (global.set $STACKTOP (local.get $7) ) (local.get $0) ) (func $___stdio_seek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local.set $4 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 32) ) ) (i32.store (local.tee $3 (local.get $4) ) (i32.load offset=60 (local.get $0) ) ) (i32.store offset=4 (local.get $3) (i32.const 0) ) (i32.store offset=8 (local.get $3) (local.get $1) ) (i32.store offset=12 (local.get $3) (local.tee $0 (i32.add (local.get $4) (i32.const 20) ) ) ) (i32.store offset=16 (local.get $3) (local.get $2) ) (local.set $0 (if (result i32) (i32.lt_s (call $___syscall_ret (call $___syscall140 (i32.const 140) (local.get $3) ) ) (i32.const 0) ) (block $block (result i32) (i32.store (local.get $0) (i32.const -1) ) (i32.const -1) ) (i32.load (local.get $0) ) ) ) (global.set $STACKTOP (local.get $4) ) (local.get $0) ) (func $___syscall_ret (param $0 i32) (result i32) (if (result i32) (i32.gt_u (local.get $0) (i32.const -4096) ) (block $block (result i32) (i32.store (call $___errno_location) (i32.sub (i32.const 0) (local.get $0) ) ) (i32.const -1) ) (local.get $0) ) ) (func $___errno_location (result i32) (if (result i32) (i32.load (i32.const 1140) ) (i32.load offset=64 (call $_pthread_self) ) (i32.const 1184) ) ) (func $_cleanup_387 (param $0 i32) (if (i32.eqz (i32.load offset=68 (local.get $0) ) ) (call $_free (local.get $0) ) ) ) (func $___stdout_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $4 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 80) ) ) (local.set $3 (local.get $4) ) (local.set $5 (i32.add (local.get $4) (i32.const 12) ) ) (i32.store offset=36 (local.get $0) (i32.const 3) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 64) ) ) (block $block (i32.store (local.get $3) (i32.load offset=60 (local.get $0) ) ) (i32.store offset=4 (local.get $3) (i32.const 21505) ) (i32.store offset=8 (local.get $3) (local.get $5) ) (if (call $___syscall54 (i32.const 54) (local.get $3) ) (i32.store8 offset=75 (local.get $0) (i32.const -1) ) ) ) ) (local.set $0 (call $___stdio_write (local.get $0) (local.get $1) (local.get $2) ) ) (global.set $STACKTOP (local.get $4) ) (local.get $0) ) (func $_fflush (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (block $do-once (result i32) (if (result i32) (local.get $0) (block $block (result i32) (if (i32.le_s (i32.load offset=76 (local.get $0) ) (i32.const -1) ) (br $do-once (call $___fflush_unlocked (local.get $0) ) ) ) (local.set $2 (i32.eqz (call $_malloc (local.get $0) ) ) ) (local.set $1 (call $___fflush_unlocked (local.get $0) ) ) (if (result i32) (local.get $2) (local.get $1) (block $block9 (result i32) (call $_free (local.get $0) ) (local.get $1) ) ) ) (block $block10 (result i32) (local.set $0 (if (result i32) (i32.load (i32.const 1136) ) (call $_fflush (i32.load (i32.const 1136) ) ) (i32.const 0) ) ) (call $___lock (i32.const 1168) ) (if (local.tee $1 (i32.load (i32.const 1164) ) ) (loop $while-in (local.set $2 (if (result i32) (i32.gt_s (i32.load offset=76 (local.get $1) ) (i32.const -1) ) (call $_malloc (local.get $1) ) (i32.const 0) ) ) (local.set $0 (if (result i32) (i32.gt_u (i32.load offset=20 (local.get $1) ) (i32.load offset=28 (local.get $1) ) ) (i32.or (call $___fflush_unlocked (local.get $1) ) (local.get $0) ) (local.get $0) ) ) (if (local.get $2) (call $_free (local.get $1) ) ) (br_if $while-in (local.tee $1 (i32.load offset=56 (local.get $1) ) ) ) ) ) (call $___unlock (i32.const 1168) ) (local.get $0) ) ) ) ) (func $___fflush_unlocked (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (block $jumpthreading$outer$0 (result i32) (block $jumpthreading$inner$0 (br_if $jumpthreading$inner$0 (i32.le_u (i32.load (local.tee $1 (i32.add (local.get $0) (i32.const 20) ) ) ) (i32.load (local.tee $2 (i32.add (local.get $0) (i32.const 28) ) ) ) ) ) (drop (call_indirect (type $FUNCSIG$iiii) (local.get $0) (i32.const 0) (i32.const 0) (i32.add (i32.and (i32.load offset=36 (local.get $0) ) (i32.const 3) ) (i32.const 2) ) ) ) (br_if $jumpthreading$inner$0 (i32.load (local.get $1) ) ) (br $jumpthreading$outer$0 (i32.const -1) ) ) (if (i32.lt_u (local.tee $4 (i32.load (local.tee $3 (i32.add (local.get $0) (i32.const 4) ) ) ) ) (local.tee $6 (i32.load (local.tee $5 (i32.add (local.get $0) (i32.const 8) ) ) ) ) ) (drop (call_indirect (type $FUNCSIG$iiii) (local.get $0) (i32.sub (local.get $4) (local.get $6) ) (i32.const 1) (i32.add (i32.and (i32.load offset=40 (local.get $0) ) (i32.const 3) ) (i32.const 2) ) ) ) ) (i32.store offset=16 (local.get $0) (i32.const 0) ) (i32.store (local.get $2) (i32.const 0) ) (i32.store (local.get $1) (i32.const 0) ) (i32.store (local.get $5) (i32.const 0) ) (i32.store (local.get $3) (i32.const 0) ) (i32.const 0) ) ) (func $__Znwj (param $0 i32) (result i32) (local $1 i32) (local.set $1 (select (local.get $0) (i32.const 1) (local.get $0) ) ) (loop $while-in (block $while-out (br_if $while-out (local.tee $0 (call $_malloc (local.get $1) ) ) ) (if (local.tee $0 (call $__ZSt15get_new_handlerv) ) (block $block (call_indirect (type $FUNCSIG$v) (i32.add (i32.and (local.get $0) (i32.const 0) ) (i32.const 8) ) ) (br $while-in) ) (local.set $0 (i32.const 0) ) ) ) ) (local.get $0) ) (func $__ZSt15get_new_handlerv (result i32) (local $0 i32) (i32.store (i32.const 1188) (i32.add (local.tee $0 (i32.load (i32.const 1188) ) ) (i32.const 0) ) ) (local.get $0) ) (func $runPostSets (nop) ) (func $_memset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local.set $4 (i32.add (local.get $0) (local.get $2) ) ) (if (i32.ge_s (local.get $2) (i32.const 20) ) (block $block (local.set $5 (i32.or (i32.or (i32.or (local.tee $1 (i32.and (local.get $1) (i32.const 255) ) ) (i32.shl (local.get $1) (i32.const 8) ) ) (i32.shl (local.get $1) (i32.const 16) ) ) (i32.shl (local.get $1) (i32.const 24) ) ) ) (local.set $6 (i32.and (local.get $4) (i32.const -4) ) ) (if (local.tee $3 (i32.and (local.get $0) (i32.const 3) ) ) (block $block17 (local.set $3 (i32.sub (i32.add (local.get $0) (i32.const 4) ) (local.get $3) ) ) (loop $while-in (if (i32.lt_s (local.get $0) (local.get $3) ) (block $block19 (i32.store8 (local.get $0) (local.get $1) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (br $while-in) ) ) ) ) ) (loop $while-in1 (if (i32.lt_s (local.get $0) (local.get $6) ) (block $block21 (i32.store (local.get $0) (local.get $5) ) (local.set $0 (i32.add (local.get $0) (i32.const 4) ) ) (br $while-in1) ) ) ) ) ) (loop $while-in3 (if (i32.lt_s (local.get $0) (local.get $4) ) (block $block23 (i32.store8 (local.get $0) (local.get $1) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (br $while-in3) ) ) ) (i32.sub (local.get $0) (local.get $2) ) ) (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.ge_s (local.get $2) (i32.const 4096) ) (return (call $_emscripten_memcpy_big (local.get $0) (local.get $1) (local.get $2) ) ) ) (local.set $3 (local.get $0) ) (if (i32.eq (i32.and (local.get $0) (i32.const 3) ) (i32.and (local.get $1) (i32.const 3) ) ) (block $block (loop $while-in (block $while-out (br_if $while-out (i32.eqz (i32.and (local.get $0) (i32.const 3) ) ) ) (if (i32.eqz (local.get $2) ) (return (local.get $3) ) ) (i32.store8 (local.get $0) (i32.load8_s (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 1) ) ) (br $while-in) ) ) (loop $while-in1 (if (i32.ge_s (local.get $2) (i32.const 4) ) (block $block27 (i32.store (local.get $0) (i32.load (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 4) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 4) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 4) ) ) (br $while-in1) ) ) ) ) ) (loop $while-in3 (if (i32.gt_s (local.get $2) (i32.const 0) ) (block $block29 (i32.store8 (local.get $0) (i32.load8_s (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 1) ) ) (br $while-in3) ) ) ) (local.get $3) ) (func $_pthread_self (result i32) (i32.const 0) ) (func $dynCall_ii (param $0 i32) (param $1 i32) (result i32) (call_indirect (type $FUNCSIG$ii) (local.get $1) (i32.add (i32.and (local.get $0) (i32.const 1) ) (i32.const 0) ) ) ) (func $dynCall_iiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call_indirect (type $FUNCSIG$iiii) (local.get $1) (local.get $2) (local.get $3) (i32.add (i32.and (local.get $0) (i32.const 3) ) (i32.const 2) ) ) ) (func $dynCall_vi (param $0 i32) (param $1 i32) (call_indirect (type $FUNCSIG$vi) (local.get $1) (i32.add (i32.and (local.get $0) (i32.const 1) ) (i32.const 6) ) ) ) (func $dynCall_v (param $0 i32) (call_indirect (type $FUNCSIG$v) (i32.add (i32.and (local.get $0) (i32.const 0) ) (i32.const 8) ) ) ) (func $b0 (param $0 i32) (result i32) (call $abort (i32.const 0) ) (i32.const 0) ) (func $b1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (call $abort (i32.const 1) ) (i32.const 0) ) (func $b2 (param $0 i32) (call $abort (i32.const 2) ) ) (func $b3 (call $abort (i32.const 3) ) ) ) binaryen-version_108/test/passes/print-call-graph.wast000066400000000000000000001001371423707623100232700ustar00rootroot00000000000000(module (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$v (func)) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$vii (func (param i32 i32))) (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) (import "env" "ABORT" (global $ABORT$asm2wasm$import i32)) (import "global" "NaN" (global $nan$asm2wasm$import f64)) (import "global" "Infinity" (global $inf$asm2wasm$import f64)) (import "env" "abort" (func $abort (param i32))) (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) (import "env" "___lock" (func $___lock (param i32))) (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) (import "env" "___unlock" (func $___unlock (param i32))) (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) (import "env" "memory" (memory $0 256 256)) (import "env" "table" (table 9 9 funcref)) (import "env" "memoryBase" (global $memoryBase i32)) (import "env" "tableBase" (global $tableBase i32)) (elem (i32.const 0) $b0 $___stdio_close $b1 $___stdout_write $___stdio_seek $___stdio_write $b2 $_cleanup_387 $b3) (data (global.get $memoryBase) "\05\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\b0\04\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\04") (global $STACKTOP (mut i32) (global.get $STACKTOP$asm2wasm$import)) (global $STACK_MAX (mut i32) (global.get $STACK_MAX$asm2wasm$import)) (global $ABORT (mut i32) (global.get $ABORT$asm2wasm$import)) (global $__THREW__ (mut i32) (i32.const 0)) (global $threwValue (mut i32) (i32.const 0)) (global $setjmpId (mut i32) (i32.const 0)) (global $undef (mut i32) (i32.const 0)) (global $nan (mut f64) (global.get $nan$asm2wasm$import)) (global $inf (mut f64) (global.get $inf$asm2wasm$import)) (global $tempInt (mut i32) (i32.const 0)) (global $tempBigInt (mut i32) (i32.const 0)) (global $tempBigIntP (mut i32) (i32.const 0)) (global $tempBigIntS (mut i32) (i32.const 0)) (global $tempBigIntR (mut f64) (f64.const 0)) (global $tempBigIntI (mut i32) (i32.const 0)) (global $tempBigIntD (mut i32) (i32.const 0)) (global $tempValue (mut i32) (i32.const 0)) (global $tempDouble (mut f64) (f64.const 0)) (global $tempRet0 (mut i32) (i32.const 0)) (global $tempFloat (mut f32) (f32.const 0)) (global $f0 (mut f32) (f32.const 0)) (export "_fflush" (func $_fflush)) (export "_main" (func $_main)) (export "_pthread_self" (func $_pthread_self)) (export "_memset" (func $_memset)) (export "_malloc" (func $_malloc)) (export "_memcpy" (func $_memcpy)) (export "_free" (func $_free)) (export "___errno_location" (func $___errno_location)) (export "runPostSets" (func $runPostSets)) (export "stackAlloc" (func $stackAlloc)) (export "stackSave" (func $stackSave)) (export "stackRestore" (func $stackRestore)) (export "establishStackSpace" (func $establishStackSpace)) (export "setThrew" (func $setThrew)) (export "setTempRet0" (func $setTempRet0)) (export "getTempRet0" (func $getTempRet0)) (export "dynCall_ii" (func $dynCall_ii)) (export "dynCall_iiii" (func $dynCall_iiii)) (export "dynCall_vi" (func $dynCall_vi)) (export "dynCall_v" (func $dynCall_v)) (func $stackAlloc (param $0 i32) (result i32) (local $1 i32) (local.set $1 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (local.get $0) ) ) (global.set $STACKTOP (i32.and (i32.add (global.get $STACKTOP) (i32.const 15) ) (i32.const -16) ) ) (local.get $1) ) (func $stackSave (result i32) (global.get $STACKTOP) ) (func $stackRestore (param $0 i32) (global.set $STACKTOP (local.get $0) ) ) (func $establishStackSpace (param $0 i32) (param $1 i32) (global.set $STACKTOP (local.get $0) ) (global.set $STACK_MAX (local.get $1) ) ) (func $setThrew (param $0 i32) (param $1 i32) (if (i32.eqz (global.get $__THREW__) ) (block (global.set $__THREW__ (local.get $0) ) (global.set $threwValue (local.get $1) ) ) ) ) (func $setTempRet0 (param $0 i32) (global.set $tempRet0 (local.get $0) ) ) (func $getTempRet0 (result i32) (global.get $tempRet0) ) (func $_malloc (param $0 i32) (result i32) (i32.const 0) ) (func $_free (param $0 i32) (nop) ) (func $_main (result i32) (local $0 i32) (i64.store align=4 (local.tee $0 (call $__Znwj (i32.const 8) ) ) (i64.const 0) ) (local.get $0) ) (func $___stdio_close (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local.set $1 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 16) ) ) (i32.store (local.tee $2 (local.get $1) ) (i32.load offset=60 (local.get $0) ) ) (local.set $0 (call $___syscall_ret (call $___syscall6 (i32.const 6) (local.get $2) ) ) ) (global.set $STACKTOP (local.get $1) ) (local.get $0) ) (func $___stdio_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local.set $7 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 48) ) ) (local.set $8 (i32.add (local.get $7) (i32.const 16) ) ) (local.set $9 (local.get $7) ) (i32.store (local.tee $3 (i32.add (local.get $7) (i32.const 32) ) ) (local.tee $5 (i32.load (local.tee $6 (i32.add (local.get $0) (i32.const 28) ) ) ) ) ) (i32.store offset=4 (local.get $3) (local.tee $4 (i32.sub (i32.load (local.tee $10 (i32.add (local.get $0) (i32.const 20) ) ) ) (local.get $5) ) ) ) (i32.store offset=8 (local.get $3) (local.get $1) ) (i32.store offset=12 (local.get $3) (local.get $2) ) (local.set $13 (i32.add (local.get $0) (i32.const 60) ) ) (local.set $14 (i32.add (local.get $0) (i32.const 44) ) ) (local.set $1 (local.get $3) ) (local.set $5 (i32.const 2) ) (local.set $11 (i32.add (local.get $4) (local.get $2) ) ) (local.set $0 (block $jumpthreading$outer$1 (result i32) (block $jumpthreading$inner$1 (block $jumpthreading$inner$0 (loop $while-in (br_if $jumpthreading$inner$0 (i32.eq (local.get $11) (local.tee $4 (if (result i32) (i32.load (i32.const 1140) ) (block (result i32) (call $_pthread_cleanup_push (i32.const 1) (local.get $0) ) (i32.store (local.get $9) (i32.load (local.get $13) ) ) (i32.store offset=4 (local.get $9) (local.get $1) ) (i32.store offset=8 (local.get $9) (local.get $5) ) (local.set $3 (call $___syscall_ret (call $___syscall146 (i32.const 146) (local.get $9) ) ) ) (call $_pthread_cleanup_pop (i32.const 0) ) (local.get $3) ) (block (result i32) (i32.store (local.get $8) (i32.load (local.get $13) ) ) (i32.store offset=4 (local.get $8) (local.get $1) ) (i32.store offset=8 (local.get $8) (local.get $5) ) (call $___syscall_ret (call $___syscall146 (i32.const 146) (local.get $8) ) ) ) ) ) ) ) (br_if $jumpthreading$inner$1 (i32.lt_s (local.get $4) (i32.const 0) ) ) (local.set $11 (i32.sub (local.get $11) (local.get $4) ) ) (local.set $1 (if (result i32) (i32.gt_u (local.get $4) (local.tee $12 (i32.load offset=4 (local.get $1) ) ) ) (block (result i32) (i32.store (local.get $6) (local.tee $3 (i32.load (local.get $14) ) ) ) (i32.store (local.get $10) (local.get $3) ) (local.set $4 (i32.sub (local.get $4) (local.get $12) ) ) (local.set $3 (i32.add (local.get $1) (i32.const 8) ) ) (local.set $5 (i32.add (local.get $5) (i32.const -1) ) ) (i32.load offset=12 (local.get $1) ) ) (if (result i32) (i32.eq (local.get $5) (i32.const 2) ) (block (result i32) (i32.store (local.get $6) (i32.add (i32.load (local.get $6) ) (local.get $4) ) ) (local.set $3 (local.get $1) ) (local.set $5 (i32.const 2) ) (local.get $12) ) (block (result i32) (local.set $3 (local.get $1) ) (local.get $12) ) ) ) ) (i32.store (local.get $3) (i32.add (i32.load (local.get $3) ) (local.get $4) ) ) (i32.store offset=4 (local.get $3) (i32.sub (local.get $1) (local.get $4) ) ) (local.set $1 (local.get $3) ) (br $while-in) ) ) (i32.store offset=16 (local.get $0) (i32.add (local.tee $1 (i32.load (local.get $14) ) ) (i32.load offset=48 (local.get $0) ) ) ) (i32.store (local.get $6) (local.tee $0 (local.get $1) ) ) (i32.store (local.get $10) (local.get $0) ) (br $jumpthreading$outer$1 (local.get $2) ) ) (i32.store offset=16 (local.get $0) (i32.const 0) ) (i32.store (local.get $6) (i32.const 0) ) (i32.store (local.get $10) (i32.const 0) ) (i32.store (local.get $0) (i32.or (i32.load (local.get $0) ) (i32.const 32) ) ) (select (i32.const 0) (i32.sub (local.get $2) (i32.load offset=4 (local.get $1) ) ) (i32.eq (local.get $5) (i32.const 2) ) ) ) ) (global.set $STACKTOP (local.get $7) ) (local.get $0) ) (func $___stdio_seek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local.set $4 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 32) ) ) (i32.store (local.tee $3 (local.get $4) ) (i32.load offset=60 (local.get $0) ) ) (i32.store offset=4 (local.get $3) (i32.const 0) ) (i32.store offset=8 (local.get $3) (local.get $1) ) (i32.store offset=12 (local.get $3) (local.tee $0 (i32.add (local.get $4) (i32.const 20) ) ) ) (i32.store offset=16 (local.get $3) (local.get $2) ) (local.set $0 (if (result i32) (i32.lt_s (call $___syscall_ret (call $___syscall140 (i32.const 140) (local.get $3) ) ) (i32.const 0) ) (block (result i32) (i32.store (local.get $0) (i32.const -1) ) (i32.const -1) ) (i32.load (local.get $0) ) ) ) (global.set $STACKTOP (local.get $4) ) (local.get $0) ) (func $___syscall_ret (param $0 i32) (result i32) (if (result i32) (i32.gt_u (local.get $0) (i32.const -4096) ) (block (result i32) (i32.store (call $___errno_location) (i32.sub (i32.const 0) (local.get $0) ) ) (i32.const -1) ) (local.get $0) ) ) (func $___errno_location (result i32) (if (result i32) (i32.load (i32.const 1140) ) (i32.load offset=64 (call $_pthread_self) ) (i32.const 1184) ) ) (func $_cleanup_387 (param $0 i32) (if (i32.eqz (i32.load offset=68 (local.get $0) ) ) (call $_free (local.get $0) ) ) ) (func $___stdout_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $4 (global.get $STACKTOP) ) (global.set $STACKTOP (i32.add (global.get $STACKTOP) (i32.const 80) ) ) (local.set $3 (local.get $4) ) (local.set $5 (i32.add (local.get $4) (i32.const 12) ) ) (i32.store offset=36 (local.get $0) (i32.const 3) ) (if (i32.eqz (i32.and (i32.load (local.get $0) ) (i32.const 64) ) ) (block (i32.store (local.get $3) (i32.load offset=60 (local.get $0) ) ) (i32.store offset=4 (local.get $3) (i32.const 21505) ) (i32.store offset=8 (local.get $3) (local.get $5) ) (if (call $___syscall54 (i32.const 54) (local.get $3) ) (i32.store8 offset=75 (local.get $0) (i32.const -1) ) ) ) ) (local.set $0 (call $___stdio_write (local.get $0) (local.get $1) (local.get $2) ) ) (global.set $STACKTOP (local.get $4) ) (local.get $0) ) (func $_fflush (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (block $do-once (result i32) (if (result i32) (local.get $0) (block (result i32) (if (i32.le_s (i32.load offset=76 (local.get $0) ) (i32.const -1) ) (br $do-once (call $___fflush_unlocked (local.get $0) ) ) ) (local.set $2 (i32.eqz (call $_malloc (local.get $0) ) ) ) (local.set $1 (call $___fflush_unlocked (local.get $0) ) ) (if (result i32) (local.get $2) (local.get $1) (block (result i32) (call $_free (local.get $0) ) (local.get $1) ) ) ) (block (result i32) (local.set $0 (if (result i32) (i32.load (i32.const 1136) ) (call $_fflush (i32.load (i32.const 1136) ) ) (i32.const 0) ) ) (call $___lock (i32.const 1168) ) (if (local.tee $1 (i32.load (i32.const 1164) ) ) (loop $while-in (local.set $2 (if (result i32) (i32.gt_s (i32.load offset=76 (local.get $1) ) (i32.const -1) ) (call $_malloc (local.get $1) ) (i32.const 0) ) ) (local.set $0 (if (result i32) (i32.gt_u (i32.load offset=20 (local.get $1) ) (i32.load offset=28 (local.get $1) ) ) (i32.or (call $___fflush_unlocked (local.get $1) ) (local.get $0) ) (local.get $0) ) ) (if (local.get $2) (call $_free (local.get $1) ) ) (br_if $while-in (local.tee $1 (i32.load offset=56 (local.get $1) ) ) ) ) ) (call $___unlock (i32.const 1168) ) (local.get $0) ) ) ) ) (func $___fflush_unlocked (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (block $jumpthreading$outer$0 (result i32) (block $jumpthreading$inner$0 (br_if $jumpthreading$inner$0 (i32.le_u (i32.load (local.tee $1 (i32.add (local.get $0) (i32.const 20) ) ) ) (i32.load (local.tee $2 (i32.add (local.get $0) (i32.const 28) ) ) ) ) ) (drop (call_indirect (type $FUNCSIG$iiii) (local.get $0) (i32.const 0) (i32.const 0) (i32.add (i32.and (i32.load offset=36 (local.get $0) ) (i32.const 3) ) (i32.const 2) ) ) ) (br_if $jumpthreading$inner$0 (i32.load (local.get $1) ) ) (br $jumpthreading$outer$0 (i32.const -1) ) ) (if (i32.lt_u (local.tee $4 (i32.load (local.tee $3 (i32.add (local.get $0) (i32.const 4) ) ) ) ) (local.tee $6 (i32.load (local.tee $5 (i32.add (local.get $0) (i32.const 8) ) ) ) ) ) (drop (call_indirect (type $FUNCSIG$iiii) (local.get $0) (i32.sub (local.get $4) (local.get $6) ) (i32.const 1) (i32.add (i32.and (i32.load offset=40 (local.get $0) ) (i32.const 3) ) (i32.const 2) ) ) ) ) (i32.store offset=16 (local.get $0) (i32.const 0) ) (i32.store (local.get $2) (i32.const 0) ) (i32.store (local.get $1) (i32.const 0) ) (i32.store (local.get $5) (i32.const 0) ) (i32.store (local.get $3) (i32.const 0) ) (i32.const 0) ) ) (func $__Znwj (param $0 i32) (result i32) (local $1 i32) (local.set $1 (select (local.get $0) (i32.const 1) (local.get $0) ) ) (loop $while-in (block $while-out (br_if $while-out (local.tee $0 (call $_malloc (local.get $1) ) ) ) (if (local.tee $0 (call $__ZSt15get_new_handlerv) ) (block (call_indirect (type $FUNCSIG$v) (i32.add (i32.and (local.get $0) (i32.const 0) ) (i32.const 8) ) ) (br $while-in) ) (local.set $0 (i32.const 0) ) ) ) ) (local.get $0) ) (func $__ZSt15get_new_handlerv (result i32) (local $0 i32) (i32.store (i32.const 1188) (i32.add (local.tee $0 (i32.load (i32.const 1188) ) ) (i32.const 0) ) ) (local.get $0) ) (func $runPostSets (nop) ) (func $_memset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local.set $4 (i32.add (local.get $0) (local.get $2) ) ) (if (i32.ge_s (local.get $2) (i32.const 20) ) (block (local.set $5 (i32.or (i32.or (i32.or (local.tee $1 (i32.and (local.get $1) (i32.const 255) ) ) (i32.shl (local.get $1) (i32.const 8) ) ) (i32.shl (local.get $1) (i32.const 16) ) ) (i32.shl (local.get $1) (i32.const 24) ) ) ) (local.set $6 (i32.and (local.get $4) (i32.const -4) ) ) (if (local.tee $3 (i32.and (local.get $0) (i32.const 3) ) ) (block (local.set $3 (i32.sub (i32.add (local.get $0) (i32.const 4) ) (local.get $3) ) ) (loop $while-in (if (i32.lt_s (local.get $0) (local.get $3) ) (block (i32.store8 (local.get $0) (local.get $1) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (br $while-in) ) ) ) ) ) (loop $while-in1 (if (i32.lt_s (local.get $0) (local.get $6) ) (block (i32.store (local.get $0) (local.get $5) ) (local.set $0 (i32.add (local.get $0) (i32.const 4) ) ) (br $while-in1) ) ) ) ) ) (loop $while-in3 (if (i32.lt_s (local.get $0) (local.get $4) ) (block (i32.store8 (local.get $0) (local.get $1) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (br $while-in3) ) ) ) (i32.sub (local.get $0) (local.get $2) ) ) (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.ge_s (local.get $2) (i32.const 4096) ) (return (call $_emscripten_memcpy_big (local.get $0) (local.get $1) (local.get $2) ) ) ) (local.set $3 (local.get $0) ) (if (i32.eq (i32.and (local.get $0) (i32.const 3) ) (i32.and (local.get $1) (i32.const 3) ) ) (block (loop $while-in (block $while-out (br_if $while-out (i32.eqz (i32.and (local.get $0) (i32.const 3) ) ) ) (if (i32.eqz (local.get $2) ) (return (local.get $3) ) ) (i32.store8 (local.get $0) (i32.load8_s (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 1) ) ) (br $while-in) ) ) (loop $while-in1 (if (i32.ge_s (local.get $2) (i32.const 4) ) (block (i32.store (local.get $0) (i32.load (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 4) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 4) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 4) ) ) (br $while-in1) ) ) ) ) ) (loop $while-in3 (if (i32.gt_s (local.get $2) (i32.const 0) ) (block (i32.store8 (local.get $0) (i32.load8_s (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) (i32.const 1) ) ) (local.set $2 (i32.sub (local.get $2) (i32.const 1) ) ) (br $while-in3) ) ) ) (local.get $3) ) (func $_pthread_self (result i32) (i32.const 0) ) (func $dynCall_ii (param $0 i32) (param $1 i32) (result i32) (call_indirect (type $FUNCSIG$ii) (local.get $1) (i32.add (i32.and (local.get $0) (i32.const 1) ) (i32.const 0) ) ) ) (func $dynCall_iiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call_indirect (type $FUNCSIG$iiii) (local.get $1) (local.get $2) (local.get $3) (i32.add (i32.and (local.get $0) (i32.const 3) ) (i32.const 2) ) ) ) (func $dynCall_vi (param $0 i32) (param $1 i32) (call_indirect (type $FUNCSIG$vi) (local.get $1) (i32.add (i32.and (local.get $0) (i32.const 1) ) (i32.const 6) ) ) ) (func $dynCall_v (param $0 i32) (call_indirect (type $FUNCSIG$v) (i32.add (i32.and (local.get $0) (i32.const 0) ) (i32.const 8) ) ) ) (func $b0 (param $0 i32) (result i32) (call $abort (i32.const 0) ) (i32.const 0) ) (func $b1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (call $abort (i32.const 1) ) (i32.const 0) ) (func $b2 (param $0 i32) (call $abort (i32.const 2) ) ) (func $b3 (call $abort (i32.const 3) ) ) ) binaryen-version_108/test/passes/print-function-map.txt000066400000000000000000000002111423707623100235070ustar00rootroot000000000000000:Foo 1:bar 2:baz (module (type $none_=>_none (func)) (import "env" "foo" (func $Foo)) (func $bar (nop) ) (func $baz (nop) ) ) binaryen-version_108/test/passes/print-function-map.wast000066400000000000000000000001121423707623100236460ustar00rootroot00000000000000(module (import "env" "foo" (func $Foo)) (func $bar) (func $baz) ) binaryen-version_108/test/passes/print.bin.txt000066400000000000000000000077061423707623100217000ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (import "env" "memory" (memory $mimport$0 256 256)) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (export "stackSave" (func $stackSave)) (export "stackAlloc" (func $stackAlloc)) (export "stackRestore" (func $stackRestore)) (export "__growWasmMemory" (func $__growWasmMemory)) (func $__wasm_call_ctors (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (if (i32.ne (i32.rem_s (local.get $0) (i32.const 120) ) (i32.const 55) ) (loop $label$2 (br_if $label$2 (i32.ne (i32.rem_s (local.tee $0 (i32.add (i32.add (i32.mul (i32.mul (local.get $0) (local.get $0) ) (local.get $0) ) (i32.div_s (local.get $0) (i32.const -2) ) ) (i32.const 13) ) ) (i32.const 120) ) (i32.const 55) ) ) ) ) (local.get $0) ) (func $stackSave (result i32) (global.get $global$0) ) (func $stackAlloc (param $0 i32) (result i32) (global.set $global$0 (local.tee $0 (i32.and (i32.sub (global.get $global$0) (local.get $0) ) (i32.const -16) ) ) ) (local.get $0) ) (func $stackRestore (param $0 i32) (global.set $global$0 (local.get $0) ) ) (func $__growWasmMemory (param $0 i32) (result i32) (memory.grow (local.get $0) ) ) ;; custom section ".debug_info", size 105 ;; custom section ".debug_abbrev", size 73 ;; custom section ".debug_line", size 92 ;; custom section ".debug_str", size 205 ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (import "env" "memory" (memory $mimport$0 256 256)) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (export "stackSave" (func $stackSave)) (export "stackAlloc" (func $stackAlloc)) (export "stackRestore" (func $stackRestore)) (export "__growWasmMemory" (func $__growWasmMemory)) (func $__wasm_call_ctors (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (if (i32.ne (i32.rem_s (local.get $0) (i32.const 120) ) (i32.const 55) ) (loop $label$2 (br_if $label$2 (i32.ne (i32.rem_s (local.tee $0 (i32.add (i32.add (i32.mul (i32.mul (local.get $0) (local.get $0) ) (local.get $0) ) (i32.div_s (local.get $0) (i32.const -2) ) ) (i32.const 13) ) ) (i32.const 120) ) (i32.const 55) ) ) ) ) (local.get $0) ) (func $stackSave (result i32) (global.get $global$0) ) (func $stackAlloc (param $0 i32) (result i32) (global.set $global$0 (local.tee $0 (i32.and (i32.sub (global.get $global$0) (local.get $0) ) (i32.const -16) ) ) ) (local.get $0) ) (func $stackRestore (param $0 i32) (global.set $global$0 (local.get $0) ) ) (func $__growWasmMemory (param $0 i32) (result i32) (memory.grow (local.get $0) ) ) ;; custom section ".debug_info", size 105 ;; custom section ".debug_abbrev", size 73 ;; custom section ".debug_line", size 92 ;; custom section ".debug_str", size 205 ) binaryen-version_108/test/passes/print.wasm000066400000000000000000000015771423707623100212610ustar00rootroot00000000000000asm`````envmemory€€A€ˆÀ A€ d__wasm_call_ctorsmain __data_end stackSave stackAlloc stackRestore__growWasmMemory Y / AøoA7G@@ l l A~mjA j"AøoA7G # # kApq"$  $  @ XnameQ__wasm_call_ctorsmain stackSave stackAlloc stackRestore__growWasmMemoryu .debug_infoe•›11µP¾PÃWº\aÈW .debug_abbrev%.—B: ; I?: ; I$> Ih .debug_lineXû a.cpp =‚ ,wX<,<Z< MØ .debug_strclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)a.cpp/home/alon/Dev/emscriptenmainintargcargvcharbinaryen-version_108/test/passes/print_g.bin.txt000066400000000000000000000137401423707623100222010ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (import "env" "memory" (memory $mimport$0 256 256)) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (export "stackSave" (func $stackSave)) (export "stackAlloc" (func $stackAlloc)) (export "stackRestore" (func $stackRestore)) (export "__growWasmMemory" (func $__growWasmMemory)) (func $__wasm_call_ctors ;; code offset: 0x3 (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) ;; code offset: 0x10 (if ;; code offset: 0xf (i32.ne ;; code offset: 0xc (i32.rem_s ;; code offset: 0x7 (local.get $0) ;; code offset: 0x9 (i32.const 120) ) ;; code offset: 0xd (i32.const 55) ) ;; code offset: 0x12 (loop $label$2 ;; code offset: 0x2e (br_if $label$2 ;; code offset: 0x2d (i32.ne ;; code offset: 0x2a (i32.rem_s ;; code offset: 0x25 (local.tee $0 ;; code offset: 0x24 (i32.add ;; code offset: 0x21 (i32.add ;; code offset: 0x1b (i32.mul ;; code offset: 0x18 (i32.mul ;; code offset: 0x14 (local.get $0) ;; code offset: 0x16 (local.get $0) ) ;; code offset: 0x19 (local.get $0) ) ;; code offset: 0x20 (i32.div_s ;; code offset: 0x1c (local.get $0) ;; code offset: 0x1e (i32.const -2) ) ) ;; code offset: 0x22 (i32.const 13) ) ) ;; code offset: 0x27 (i32.const 120) ) ;; code offset: 0x2b (i32.const 55) ) ) ) ) ;; code offset: 0x32 (local.get $0) ) (func $stackSave (result i32) ;; code offset: 0x37 (global.get $global$0) ) (func $stackAlloc (param $0 i32) (result i32) ;; code offset: 0x46 (global.set $global$0 ;; code offset: 0x44 (local.tee $0 ;; code offset: 0x43 (i32.and ;; code offset: 0x40 (i32.sub ;; code offset: 0x3c (global.get $global$0) ;; code offset: 0x3e (local.get $0) ) ;; code offset: 0x41 (i32.const -16) ) ) ) ;; code offset: 0x48 (local.get $0) ) (func $stackRestore (param $0 i32) ;; code offset: 0x4f (global.set $global$0 ;; code offset: 0x4d (local.get $0) ) ) (func $__growWasmMemory (param $0 i32) (result i32) ;; code offset: 0x56 (memory.grow ;; code offset: 0x54 (local.get $0) ) ) ;; custom section ".debug_info", size 105 ;; custom section ".debug_abbrev", size 73 ;; custom section ".debug_line", size 92 ;; custom section ".debug_str", size 205 ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (import "env" "memory" (memory $mimport$0 256 256)) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (export "stackSave" (func $stackSave)) (export "stackAlloc" (func $stackAlloc)) (export "stackRestore" (func $stackRestore)) (export "__growWasmMemory" (func $__growWasmMemory)) (func $__wasm_call_ctors ;; code offset: 0x3 (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) ;; code offset: 0x10 (if ;; code offset: 0xf (i32.ne ;; code offset: 0xc (i32.rem_s ;; code offset: 0x7 (local.get $0) ;; code offset: 0x9 (i32.const 120) ) ;; code offset: 0xd (i32.const 55) ) ;; code offset: 0x12 (loop $label$2 ;; code offset: 0x2e (br_if $label$2 ;; code offset: 0x2d (i32.ne ;; code offset: 0x2a (i32.rem_s ;; code offset: 0x25 (local.tee $0 ;; code offset: 0x24 (i32.add ;; code offset: 0x21 (i32.add ;; code offset: 0x1b (i32.mul ;; code offset: 0x18 (i32.mul ;; code offset: 0x14 (local.get $0) ;; code offset: 0x16 (local.get $0) ) ;; code offset: 0x19 (local.get $0) ) ;; code offset: 0x20 (i32.div_s ;; code offset: 0x1c (local.get $0) ;; code offset: 0x1e (i32.const -2) ) ) ;; code offset: 0x22 (i32.const 13) ) ) ;; code offset: 0x27 (i32.const 120) ) ;; code offset: 0x2b (i32.const 55) ) ) ) ) ;; code offset: 0x32 (local.get $0) ) (func $stackSave (result i32) ;; code offset: 0x37 (global.get $global$0) ) (func $stackAlloc (param $0 i32) (result i32) ;; code offset: 0x46 (global.set $global$0 ;; code offset: 0x44 (local.tee $0 ;; code offset: 0x43 (i32.and ;; code offset: 0x40 (i32.sub ;; code offset: 0x3c (global.get $global$0) ;; code offset: 0x3e (local.get $0) ) ;; code offset: 0x41 (i32.const -16) ) ) ) ;; code offset: 0x48 (local.get $0) ) (func $stackRestore (param $0 i32) ;; code offset: 0x4f (global.set $global$0 ;; code offset: 0x4d (local.get $0) ) ) (func $__growWasmMemory (param $0 i32) (result i32) ;; code offset: 0x56 (memory.grow ;; code offset: 0x54 (local.get $0) ) ) ;; custom section ".debug_info", size 105 ;; custom section ".debug_abbrev", size 73 ;; custom section ".debug_line", size 92 ;; custom section ".debug_str", size 205 ) binaryen-version_108/test/passes/print_g.wasm000066400000000000000000000015771423707623100215670ustar00rootroot00000000000000asm`````envmemory€€A€ˆÀ A€ d__wasm_call_ctorsmain __data_end stackSave stackAlloc stackRestore__growWasmMemory Y / AøoA7G@@ l l A~mjA j"AøoA7G # # kApq"$  $  @ XnameQ__wasm_call_ctorsmain stackSave stackAlloc stackRestore__growWasmMemoryu .debug_infoe•›11µP¾PÃWº\aÈW .debug_abbrev%.—B: ; I?: ; I$> Ih .debug_lineXû a.cpp =‚ ,wX<,<Z< MØ .debug_strclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)a.cpp/home/alon/Dev/emscriptenmainintargcargvcharbinaryen-version_108/test/passes/print_g_metrics.bin.txt000066400000000000000000000056331423707623100237310ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (global $global$0 (mut i32) (i32.const 5243904)) (export "a" (func $__wasm_call_ctors)) (export "b" (func $main)) (export "c" (func $stackAlloc)) (func $stackAlloc (param $0 i32) (result i32) (global.set $global$0 (local.tee $0 (i32.and (i32.sub (global.get $global$0) (local.get $0) ) (i32.const -16) ) ) ) (local.get $0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (if (i32.ne (i32.rem_s (local.get $0) (i32.const 120) ) (i32.const 55) ) (loop $label$2 (br_if $label$2 (i32.ne (i32.rem_s (local.tee $0 (i32.add (i32.add (i32.mul (i32.mul (local.get $0) (local.get $0) ) (local.get $0) ) (i32.div_s (local.get $0) (i32.const -2) ) ) (i32.const 13) ) ) (i32.const 120) ) (i32.const 55) ) ) ) ) (local.get $0) ) (func $__wasm_call_ctors (nop) ) ) total [exports] : 3 [funcs] : 3 [globals] : 1 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 37 [vars] : 0 Binary : 11 Block : 2 Break : 1 Const : 8 GlobalGet : 1 GlobalSet : 1 If : 1 LocalGet : 8 LocalSet : 2 Loop : 1 Nop : 1 (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (global $global$0 (mut i32) (i32.const 5243904)) (export "a" (func $__wasm_call_ctors)) (export "b" (func $main)) (export "c" (func $stackAlloc)) (func $stackAlloc (param $0 i32) (result i32) (global.set $global$0 (local.tee $0 (i32.and (i32.sub (global.get $global$0) (local.get $0) ) (i32.const -16) ) ) ) (local.get $0) ) (func $main (param $0 i32) (param $1 i32) (result i32) (if (i32.ne (i32.rem_s (local.get $0) (i32.const 120) ) (i32.const 55) ) (loop $label$2 (br_if $label$2 (i32.ne (i32.rem_s (local.tee $0 (i32.add (i32.add (i32.mul (i32.mul (local.get $0) (local.get $0) ) (local.get $0) ) (i32.div_s (local.get $0) (i32.const -2) ) ) (i32.const 13) ) ) (i32.const 120) ) (i32.const 55) ) ) ) ) (local.get $0) ) (func $__wasm_call_ctors (nop) ) ) binaryen-version_108/test/passes/print_g_metrics.wasm000066400000000000000000000002601423707623100233010ustar00rootroot00000000000000asm``` A€ˆÀ  abc F# kApq"$ / AøoA7G@@ l l A~mjA j"AøoA7G  -name& stackAllocmain__wasm_call_ctorsbinaryen-version_108/test/passes/print_g_strip-dwarf.bin.txt000066400000000000000000000074331423707623100245250ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (import "env" "memory" (memory $mimport$0 256 256)) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (export "stackSave" (func $stackSave)) (export "stackAlloc" (func $stackAlloc)) (export "stackRestore" (func $stackRestore)) (export "__growWasmMemory" (func $__growWasmMemory)) (func $__wasm_call_ctors (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (if (i32.ne (i32.rem_s (local.get $0) (i32.const 120) ) (i32.const 55) ) (loop $label$2 (br_if $label$2 (i32.ne (i32.rem_s (local.tee $0 (i32.add (i32.add (i32.mul (i32.mul (local.get $0) (local.get $0) ) (local.get $0) ) (i32.div_s (local.get $0) (i32.const -2) ) ) (i32.const 13) ) ) (i32.const 120) ) (i32.const 55) ) ) ) ) (local.get $0) ) (func $stackSave (result i32) (global.get $global$0) ) (func $stackAlloc (param $0 i32) (result i32) (global.set $global$0 (local.tee $0 (i32.and (i32.sub (global.get $global$0) (local.get $0) ) (i32.const -16) ) ) ) (local.get $0) ) (func $stackRestore (param $0 i32) (global.set $global$0 (local.get $0) ) ) (func $__growWasmMemory (param $0 i32) (result i32) (memory.grow (local.get $0) ) ) ;; custom section ".debug_info", size 105 ;; custom section ".debug_abbrev", size 73 ;; custom section ".debug_line", size 92 ;; custom section ".debug_str", size 205 ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) (import "env" "memory" (memory $mimport$0 256 256)) (global $global$0 (mut i32) (i32.const 5243904)) (global $global$1 i32 (i32.const 1024)) (export "__wasm_call_ctors" (func $__wasm_call_ctors)) (export "main" (func $main)) (export "__data_end" (global $global$1)) (export "stackSave" (func $stackSave)) (export "stackAlloc" (func $stackAlloc)) (export "stackRestore" (func $stackRestore)) (export "__growWasmMemory" (func $__growWasmMemory)) (func $__wasm_call_ctors (nop) ) (func $main (param $0 i32) (param $1 i32) (result i32) (if (i32.ne (i32.rem_s (local.get $0) (i32.const 120) ) (i32.const 55) ) (loop $label$2 (br_if $label$2 (i32.ne (i32.rem_s (local.tee $0 (i32.add (i32.add (i32.mul (i32.mul (local.get $0) (local.get $0) ) (local.get $0) ) (i32.div_s (local.get $0) (i32.const -2) ) ) (i32.const 13) ) ) (i32.const 120) ) (i32.const 55) ) ) ) ) (local.get $0) ) (func $stackSave (result i32) (global.get $global$0) ) (func $stackAlloc (param $0 i32) (result i32) (global.set $global$0 (local.tee $0 (i32.and (i32.sub (global.get $global$0) (local.get $0) ) (i32.const -16) ) ) ) (local.get $0) ) (func $stackRestore (param $0 i32) (global.set $global$0 (local.get $0) ) ) (func $__growWasmMemory (param $0 i32) (result i32) (memory.grow (local.get $0) ) ) ) binaryen-version_108/test/passes/print_g_strip-dwarf.wasm000066400000000000000000000015771423707623100241110ustar00rootroot00000000000000asm`````envmemory€€A€ˆÀ A€ d__wasm_call_ctorsmain __data_end stackSave stackAlloc stackRestore__growWasmMemory Y / AøoA7G@@ l l A~mjA j"AøoA7G # # kApq"$  $  @ XnameQ__wasm_call_ctorsmain stackSave stackAlloc stackRestore__growWasmMemoryu .debug_infoe•›11µP¾PÃWº\aÈW .debug_abbrev%.—B: ; I?: ; I$> Ih .debug_lineXû a.cpp =‚ ,wX<,<Z< MØ .debug_strclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f39277c1d370ccbbec2e20a20375ee6fb7281ae4)a.cpp/home/alon/Dev/emscriptenmainintargcargvcharbinaryen-version_108/test/passes/remove-imports.txt000066400000000000000000000006051423707623100227540ustar00rootroot00000000000000(module (type $FUNCSIG$v (func)) (import "env" "table" (table $table 1 1 funcref)) (import "env" "memBase" (global $gimport$0 i32)) (import "somewhere" "waka-sneaky" (func $waka-sneaky)) (memory $0 1024 1024) (elem (i32.const 0) $waka-sneaky) (func $nada (nop) (drop (i32.const 0) ) (drop (f64.const 0) ) (call_indirect (type $FUNCSIG$v) (i32.const 0) ) ) ) binaryen-version_108/test/passes/remove-imports.wast000066400000000000000000000011751423707623100231160ustar00rootroot00000000000000(module (memory 1024 1024) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$d (func (result f64))) (import $waka "somewhere" "waka") (import $waka-ret "somewhere" "waka-ret" (result i32)) (import $waka-ret-d "somewhere" "waka-ret-d" (result f64)) (import $waka-sneaky "somewhere" "waka-sneaky") (import "env" "memBase" (global i32)) (import "env" "table" (table $table 1 1 funcref)) (elem (i32.const 0) $waka-sneaky) (func $nada (type $FUNCSIG$v) (call $waka) (drop (call $waka-ret) ) (drop (call $waka-ret-d) ) (call_indirect (i32.const 0)) ) ) binaryen-version_108/test/passes/remove-memory.txt000066400000000000000000000000411423707623100225610ustar00rootroot00000000000000(module (memory $0 1024 1024) ) binaryen-version_108/test/passes/remove-memory.wast000066400000000000000000000001201423707623100227160ustar00rootroot00000000000000(module (memory 1024 1024 (segment 10 "123") (segment 20 "149") ) ) binaryen-version_108/test/passes/remove-non-js-ops.txt000066400000000000000000000560531423707623100232720ustar00rootroot00000000000000(module (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $f64_=>_f64 (func (param f64) (result f64))) (type $f32_=>_f32 (func (param f32) (result f32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $f64_f64_=>_f64 (func (param f64 f64) (result f64))) (type $f32_f32_=>_f32 (func (param f32 f32) (result f32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_f32 (func (result f32))) (type $f32_=>_none (func (param f32))) (type $none_=>_f64 (func (result f64))) (type $f64_=>_none (func (param f64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32 i32) (result i32))) (type $none_=>_i32 (func (result i32))) (import "env" "wasm2js_scratch_load_i32" (func $wasm2js_scratch_load_i32 (param i32) (result i32))) (import "env" "wasm2js_scratch_store_i32" (func $wasm2js_scratch_store_i32 (param i32 i32))) (import "env" "wasm2js_scratch_load_f32" (func $wasm2js_scratch_load_f32 (result f32))) (import "env" "wasm2js_scratch_store_f32" (func $wasm2js_scratch_store_f32 (param f32))) (import "env" "wasm2js_scratch_load_f64" (func $wasm2js_scratch_load_f64 (result f64))) (import "env" "wasm2js_scratch_store_f64" (func $wasm2js_scratch_store_f64 (param f64))) (import "env" "wasm2js_memory_init" (func $wasm2js_memory_init (param i32 i32 i32 i32))) (import "env" "wasm2js_memory_fill" (func $wasm2js_memory_fill (param i32 i32 i32))) (import "env" "wasm2js_memory_copy" (func $wasm2js_memory_copy (param i32 i32 i32))) (import "env" "wasm2js_data_drop" (func $wasm2js_data_drop (param i32))) (import "env" "wasm2js_atomic_wait_i32" (func $wasm2js_atomic_wait_i32 (param i32 i32 i32 i32) (result i32))) (import "env" "wasm2js_atomic_rmw_i64" (func $wasm2js_atomic_rmw_i64 (param i32 i32 i32 i32 i32 i32) (result i32))) (import "env" "wasm2js_get_stashed_bits" (func $wasm2js_get_stashed_bits (result i32))) (global $__wasm-intrinsics-temp-i64 (mut i64) (i64.const 0)) (memory $0 1) (func $copysign64 (param $0 f64) (param $1 f64) (result f64) (f64.reinterpret_i64 (i64.or (i64.and (i64.reinterpret_f64 (local.get $0) ) (i64.const 9223372036854775807) ) (i64.and (i64.reinterpret_f64 (local.get $1) ) (i64.const -9223372036854775808) ) ) ) ) (func $copysign32 (param $0 f32) (param $1 f32) (result f32) (f32.reinterpret_i32 (i32.or (i32.and (i32.reinterpret_f32 (local.get $0) ) (i32.const 2147483647) ) (i32.and (i32.reinterpret_f32 (local.get $1) ) (i32.const -2147483648) ) ) ) ) (func $rotl32 (param $0 i32) (param $1 i32) (result i32) (call $__wasm_rotl_i32 (local.get $0) (local.get $1) ) ) (func $rotr32 (param $0 i32) (param $1 i32) (result i32) (call $__wasm_rotr_i32 (local.get $0) (local.get $1) ) ) (func $rotl64 (param $0 i64) (param $1 i64) (result i64) (call $__wasm_rotl_i64 (local.get $0) (local.get $1) ) ) (func $rotr64 (param $0 i64) (param $1 i64) (result i64) (call $__wasm_rotr_i64 (local.get $0) (local.get $1) ) ) (func $nearest64 (param $0 f64) (result f64) (call $__wasm_nearest_f64 (local.get $0) ) ) (func $nearest32 (param $0 f32) (result f32) (call $__wasm_nearest_f32 (local.get $0) ) ) (func $trunc64 (param $0 f64) (result f64) (f64.trunc (local.get $0) ) ) (func $trunc32 (param $0 f32) (result f32) (f32.trunc (local.get $0) ) ) (func $popcnt32 (param $0 i32) (result i32) (call $__wasm_popcnt_i32 (local.get $0) ) ) (func $ctz32 (param $0 i32) (result i32) (call $__wasm_ctz_i32 (local.get $0) ) ) (func $i64_sdiv (param $0 i64) (param $1 i64) (result i64) (call $__wasm_i64_sdiv (local.get $0) (local.get $1) ) ) (func $i64_udiv (param $0 i64) (param $1 i64) (result i64) (call $__wasm_i64_udiv (local.get $0) (local.get $1) ) ) (func $i64_srem (param $0 i64) (param $1 i64) (result i64) (call $__wasm_i64_srem (local.get $0) (local.get $1) ) ) (func $i64_urem (param $0 i64) (param $1 i64) (result i64) (call $__wasm_i64_urem (local.get $0) (local.get $1) ) ) (func $i64_mul (param $0 i64) (param $1 i64) (result i64) (call $__wasm_i64_mul (local.get $0) (local.get $1) ) ) (func $_ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i32) (local $var$3 i32) (local $var$4 i32) (local $var$5 i32) (local $var$6 i32) (i64.or (i64.shl (i64.extend_i32_u (i32.add (i32.add (i32.add (i32.add (i32.mul (local.tee $var$4 (i32.shr_u (local.tee $var$2 (i32.wrap_i64 (local.get $var$1) ) ) (i32.const 16) ) ) (local.tee $var$5 (i32.shr_u (local.tee $var$3 (i32.wrap_i64 (local.get $var$0) ) ) (i32.const 16) ) ) ) (i32.mul (local.get $var$2) (i32.wrap_i64 (i64.shr_u (local.get $var$0) (i64.const 32) ) ) ) ) (i32.mul (i32.wrap_i64 (i64.shr_u (local.get $var$1) (i64.const 32) ) ) (local.get $var$3) ) ) (i32.shr_u (local.tee $var$2 (i32.add (i32.shr_u (local.tee $var$6 (i32.mul (local.tee $var$2 (i32.and (local.get $var$2) (i32.const 65535) ) ) (local.tee $var$3 (i32.and (local.get $var$3) (i32.const 65535) ) ) ) ) (i32.const 16) ) (i32.mul (local.get $var$2) (local.get $var$5) ) ) ) (i32.const 16) ) ) (i32.shr_u (local.tee $var$2 (i32.add (i32.and (local.get $var$2) (i32.const 65535) ) (i32.mul (local.get $var$4) (local.get $var$3) ) ) ) (i32.const 16) ) ) ) (i64.const 32) ) (i64.extend_i32_u (i32.or (i32.shl (local.get $var$2) (i32.const 16) ) (i32.and (local.get $var$6) (i32.const 65535) ) ) ) ) ) (func $_ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i64) (i64.sub (i64.xor (call $__wasm_i64_udiv (i64.sub (i64.xor (local.tee $var$2 (i64.shr_s (local.get $var$0) (i64.const 63) ) ) (local.get $var$0) ) (local.get $var$2) ) (i64.sub (i64.xor (local.tee $var$2 (i64.shr_s (local.get $var$1) (i64.const 63) ) ) (local.get $var$1) ) (local.get $var$2) ) ) (local.tee $var$0 (i64.shr_s (i64.xor (local.get $var$1) (local.get $var$0) ) (i64.const 63) ) ) ) (local.get $var$0) ) ) (func $_ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i64) (i64.sub (i64.xor (call $__wasm_i64_urem (i64.sub (i64.xor (local.tee $var$2 (i64.shr_s (local.get $var$0) (i64.const 63) ) ) (local.get $var$0) ) (local.get $var$2) ) (i64.sub (i64.xor (local.tee $var$0 (i64.shr_s (local.get $var$1) (i64.const 63) ) ) (local.get $var$1) ) (local.get $var$0) ) ) (local.get $var$2) ) (local.get $var$2) ) ) (func $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i32) (local $var$3 i32) (local $var$4 i32) (local $var$5 i64) (local $var$6 i64) (local $var$7 i64) (local $var$8 i64) (block $label$1 (block $label$2 (block $label$3 (block $label$4 (block $label$5 (block $label$6 (block $label$7 (block $label$8 (block $label$9 (block $label$10 (block $label$11 (if (local.tee $var$2 (i32.wrap_i64 (i64.shr_u (local.get $var$0) (i64.const 32) ) ) ) (block $block (br_if $label$11 (i32.eqz (local.tee $var$3 (i32.wrap_i64 (local.get $var$1) ) ) ) ) (br_if $label$9 (i32.eqz (local.tee $var$4 (i32.wrap_i64 (i64.shr_u (local.get $var$1) (i64.const 32) ) ) ) ) ) (br_if $label$8 (i32.le_u (local.tee $var$2 (i32.sub (i32.clz (local.get $var$4) ) (i32.clz (local.get $var$2) ) ) ) (i32.const 31) ) ) (br $label$2) ) ) (br_if $label$2 (i64.ge_u (local.get $var$1) (i64.const 4294967296) ) ) (global.set $__wasm-intrinsics-temp-i64 (i64.extend_i32_u (i32.sub (local.tee $var$2 (i32.wrap_i64 (local.get $var$0) ) ) (i32.mul (local.tee $var$2 (i32.div_u (local.get $var$2) (local.tee $var$3 (i32.wrap_i64 (local.get $var$1) ) ) ) ) (local.get $var$3) ) ) ) ) (return (i64.extend_i32_u (local.get $var$2) ) ) ) (local.set $var$3 (i32.wrap_i64 (i64.shr_u (local.get $var$1) (i64.const 32) ) ) ) (br_if $label$7 (i32.eqz (i32.wrap_i64 (local.get $var$0) ) ) ) (br_if $label$6 (i32.eqz (local.get $var$3) ) ) (br_if $label$6 (i32.and (local.tee $var$4 (i32.add (local.get $var$3) (i32.const -1) ) ) (local.get $var$3) ) ) (global.set $__wasm-intrinsics-temp-i64 (i64.or (i64.shl (i64.extend_i32_u (i32.and (local.get $var$4) (local.get $var$2) ) ) (i64.const 32) ) (i64.and (local.get $var$0) (i64.const 4294967295) ) ) ) (return (i64.extend_i32_u (i32.shr_u (local.get $var$2) (i32.and (call $__wasm_ctz_i32 (local.get $var$3) ) (i32.const 31) ) ) ) ) ) (unreachable) ) (br_if $label$5 (i32.eqz (i32.and (local.tee $var$4 (i32.add (local.get $var$3) (i32.const -1) ) ) (local.get $var$3) ) ) ) (local.set $var$3 (i32.sub (i32.const 0) (local.tee $var$2 (i32.sub (i32.add (i32.clz (local.get $var$3) ) (i32.const 33) ) (i32.clz (local.get $var$2) ) ) ) ) ) (br $label$3) ) (local.set $var$3 (i32.sub (i32.const 63) (local.get $var$2) ) ) (local.set $var$2 (i32.add (local.get $var$2) (i32.const 1) ) ) (br $label$3) ) (global.set $__wasm-intrinsics-temp-i64 (i64.shl (i64.extend_i32_u (i32.sub (local.get $var$2) (i32.mul (local.tee $var$4 (i32.div_u (local.get $var$2) (local.get $var$3) ) ) (local.get $var$3) ) ) ) (i64.const 32) ) ) (return (i64.extend_i32_u (local.get $var$4) ) ) ) (br_if $label$4 (i32.lt_u (local.tee $var$2 (i32.sub (i32.clz (local.get $var$3) ) (i32.clz (local.get $var$2) ) ) ) (i32.const 31) ) ) (br $label$2) ) (global.set $__wasm-intrinsics-temp-i64 (i64.extend_i32_u (i32.and (local.get $var$4) (i32.wrap_i64 (local.get $var$0) ) ) ) ) (br_if $label$1 (i32.eq (local.get $var$3) (i32.const 1) ) ) (return (i64.shr_u (local.get $var$0) (i64.extend_i32_u (call $__wasm_ctz_i32 (local.get $var$3) ) ) ) ) ) (local.set $var$3 (i32.sub (i32.const 63) (local.get $var$2) ) ) (local.set $var$2 (i32.add (local.get $var$2) (i32.const 1) ) ) ) (local.set $var$5 (i64.shr_u (local.get $var$0) (i64.extend_i32_u (i32.and (local.get $var$2) (i32.const 63) ) ) ) ) (local.set $var$0 (i64.shl (local.get $var$0) (i64.extend_i32_u (i32.and (local.get $var$3) (i32.const 63) ) ) ) ) (block $label$13 (if (local.get $var$2) (block $block3 (local.set $var$8 (i64.add (local.get $var$1) (i64.const -1) ) ) (loop $label$15 (local.set $var$5 (i64.sub (local.tee $var$5 (i64.or (i64.shl (local.get $var$5) (i64.const 1) ) (i64.shr_u (local.get $var$0) (i64.const 63) ) ) ) (i64.and (local.tee $var$6 (i64.shr_s (i64.sub (local.get $var$8) (local.get $var$5) ) (i64.const 63) ) ) (local.get $var$1) ) ) ) (local.set $var$0 (i64.or (i64.shl (local.get $var$0) (i64.const 1) ) (local.get $var$7) ) ) (local.set $var$7 (local.tee $var$6 (i64.and (local.get $var$6) (i64.const 1) ) ) ) (br_if $label$15 (local.tee $var$2 (i32.add (local.get $var$2) (i32.const -1) ) ) ) ) (br $label$13) ) ) ) (global.set $__wasm-intrinsics-temp-i64 (local.get $var$5) ) (return (i64.or (i64.shl (local.get $var$0) (i64.const 1) ) (local.get $var$6) ) ) ) (global.set $__wasm-intrinsics-temp-i64 (local.get $var$0) ) (local.set $var$0 (i64.const 0) ) ) (local.get $var$0) ) (func $__wasm_ctz_i32 (param $var$0 i32) (result i32) (if (local.get $var$0) (return (i32.sub (i32.const 31) (i32.clz (i32.xor (i32.add (local.get $var$0) (i32.const -1) ) (local.get $var$0) ) ) ) ) ) (i32.const 32) ) (func $__wasm_i64_mul (param $var$0 i64) (param $var$1 i64) (result i64) (call $_ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE (local.get $var$0) (local.get $var$1) ) ) (func $__wasm_i64_sdiv (param $var$0 i64) (param $var$1 i64) (result i64) (call $_ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E (local.get $var$0) (local.get $var$1) ) ) (func $__wasm_i64_srem (param $var$0 i64) (param $var$1 i64) (result i64) (call $_ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E (local.get $var$0) (local.get $var$1) ) ) (func $__wasm_i64_udiv (param $var$0 i64) (param $var$1 i64) (result i64) (call $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E (local.get $var$0) (local.get $var$1) ) ) (func $__wasm_i64_urem (param $var$0 i64) (param $var$1 i64) (result i64) (drop (call $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E (local.get $var$0) (local.get $var$1) ) ) (global.get $__wasm-intrinsics-temp-i64) ) (func $__wasm_nearest_f32 (param $var$0 f32) (result f32) (local $var$1 f32) (local $var$2 f32) (if (i32.eqz (f32.lt (local.tee $var$2 (f32.sub (local.get $var$0) (local.tee $var$1 (f32.floor (local.get $var$0) ) ) ) ) (f32.const 0.5) ) ) (block $block (local.set $var$0 (f32.ceil (local.get $var$0) ) ) (if (f32.gt (local.get $var$2) (f32.const 0.5) ) (return (local.get $var$0) ) ) (local.set $var$1 (select (local.get $var$1) (local.get $var$0) (f32.eq (f32.sub (local.tee $var$2 (f32.mul (local.get $var$1) (f32.const 0.5) ) ) (f32.floor (local.get $var$2) ) ) (f32.const 0) ) ) ) ) ) (local.get $var$1) ) (func $__wasm_nearest_f64 (param $var$0 f64) (result f64) (local $var$1 f64) (local $var$2 f64) (if (i32.eqz (f64.lt (local.tee $var$2 (f64.sub (local.get $var$0) (local.tee $var$1 (f64.floor (local.get $var$0) ) ) ) ) (f64.const 0.5) ) ) (block $block (local.set $var$0 (f64.ceil (local.get $var$0) ) ) (if (f64.gt (local.get $var$2) (f64.const 0.5) ) (return (local.get $var$0) ) ) (local.set $var$1 (select (local.get $var$1) (local.get $var$0) (f64.eq (f64.sub (local.tee $var$2 (f64.mul (local.get $var$1) (f64.const 0.5) ) ) (f64.floor (local.get $var$2) ) ) (f64.const 0) ) ) ) ) ) (local.get $var$1) ) (func $__wasm_popcnt_i32 (param $var$0 i32) (result i32) (local $var$1 i32) (block $label$1 (result i32) (loop $label$2 (drop (br_if $label$1 (local.get $var$1) (i32.eqz (local.get $var$0) ) ) ) (local.set $var$0 (i32.and (local.get $var$0) (i32.sub (local.get $var$0) (i32.const 1) ) ) ) (local.set $var$1 (i32.add (local.get $var$1) (i32.const 1) ) ) (br $label$2) ) ) ) (func $__wasm_rotl_i32 (param $var$0 i32) (param $var$1 i32) (result i32) (local $var$2 i32) (i32.or (i32.shl (i32.and (i32.shr_u (i32.const -1) (local.tee $var$2 (i32.and (local.get $var$1) (i32.const 31) ) ) ) (local.get $var$0) ) (local.get $var$2) ) (i32.shr_u (i32.and (i32.shl (i32.const -1) (local.tee $var$1 (i32.and (i32.sub (i32.const 0) (local.get $var$1) ) (i32.const 31) ) ) ) (local.get $var$0) ) (local.get $var$1) ) ) ) (func $__wasm_rotl_i64 (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i64) (i64.or (i64.shl (i64.and (i64.shr_u (i64.const -1) (local.tee $var$2 (i64.and (local.get $var$1) (i64.const 63) ) ) ) (local.get $var$0) ) (local.get $var$2) ) (i64.shr_u (i64.and (i64.shl (i64.const -1) (local.tee $var$1 (i64.and (i64.sub (i64.const 0) (local.get $var$1) ) (i64.const 63) ) ) ) (local.get $var$0) ) (local.get $var$1) ) ) ) (func $__wasm_rotr_i32 (param $var$0 i32) (param $var$1 i32) (result i32) (local $var$2 i32) (i32.or (i32.shr_u (i32.and (i32.shl (i32.const -1) (local.tee $var$2 (i32.and (local.get $var$1) (i32.const 31) ) ) ) (local.get $var$0) ) (local.get $var$2) ) (i32.shl (i32.and (i32.shr_u (i32.const -1) (local.tee $var$1 (i32.and (i32.sub (i32.const 0) (local.get $var$1) ) (i32.const 31) ) ) ) (local.get $var$0) ) (local.get $var$1) ) ) ) (func $__wasm_rotr_i64 (param $var$0 i64) (param $var$1 i64) (result i64) (local $var$2 i64) (i64.or (i64.shr_u (i64.and (i64.shl (i64.const -1) (local.tee $var$2 (i64.and (local.get $var$1) (i64.const 63) ) ) ) (local.get $var$0) ) (local.get $var$2) ) (i64.shl (i64.and (i64.shr_u (i64.const -1) (local.tee $var$1 (i64.and (i64.sub (i64.const 0) (local.get $var$1) ) (i64.const 63) ) ) ) (local.get $var$0) ) (local.get $var$1) ) ) ) ) binaryen-version_108/test/passes/remove-non-js-ops.wast000066400000000000000000000031551423707623100234240ustar00rootroot00000000000000(module (memory 1) (func $copysign64 (param $0 f64) (param $1 f64) (result f64) (f64.copysign (local.get $0) (local.get $1))) (func $copysign32 (param $0 f32) (param $1 f32) (result f32) (f32.copysign (local.get $0) (local.get $1))) (func $rotl32 (param $0 i32) (param $1 i32) (result i32) (i32.rotl (local.get $0) (local.get $1))) (func $rotr32 (param $0 i32) (param $1 i32) (result i32) (i32.rotr (local.get $0) (local.get $1))) (func $rotl64 (param $0 i64) (param $1 i64) (result i64) (i64.rotl (local.get $0) (local.get $1))) (func $rotr64 (param $0 i64) (param $1 i64) (result i64) (i64.rotr (local.get $0) (local.get $1))) (func $nearest64 (param $0 f64) (result f64) (f64.nearest (local.get $0))) (func $nearest32 (param $0 f32) (result f32) (f32.nearest (local.get $0))) (func $trunc64 (param $0 f64) (result f64) (f64.trunc (local.get $0))) (func $trunc32 (param $0 f32) (result f32) (f32.trunc (local.get $0))) (func $popcnt32 (param $0 i32) (result i32) (i32.popcnt (local.get $0))) (func $ctz32 (param $0 i32) (result i32) (i32.ctz (local.get $0))) (func $i64_sdiv (param $0 i64) (param $1 i64) (result i64) (i64.div_s (local.get $0) (local.get $1))) (func $i64_udiv (param $0 i64) (param $1 i64) (result i64) (i64.div_u (local.get $0) (local.get $1))) (func $i64_srem (param $0 i64) (param $1 i64) (result i64) (i64.rem_s (local.get $0) (local.get $1))) (func $i64_urem (param $0 i64) (param $1 i64) (result i64) (i64.rem_u (local.get $0) (local.get $1))) (func $i64_mul (param $0 i64) (param $1 i64) (result i64) (i64.mul (local.get $0) (local.get $1))) ) binaryen-version_108/test/passes/remove-unused-brs_all-features.txt000066400000000000000000000066451423707623100260240ustar00rootroot00000000000000(module (type $vector (array (mut i32))) (type $struct (struct (field (ref null $vector)))) (type $ref|func|_=>_none (func (param (ref func)))) (type $i32_=>_none (func (param i32))) (type $none_=>_ref?|$struct| (func (result (ref null $struct)))) (type $none_=>_f64 (func (result f64))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_funcref (func (param i32) (result funcref))) (type $none_=>_none (func)) (import "out" "log" (func $log (param i32))) (elem declare func $br_on-to-br $br_on-to-flow $i32_=>_none $none_=>_i32) (func $foo (result (ref null $struct)) (if (result (ref null $struct)) (i32.const 1) (struct.new_with_rtt $struct (array.new_default_with_rtt $vector (i32.const 1) (rtt.canon $vector) ) (rtt.canon $struct) ) (ref.null $struct) ) ) (func $test-prefinalize (result f64) (loop $loop (result f64) (if (result f64) (i32.const 1) (f64.const 0) (block $block (result f64) (nop) (br_if $loop (i32.eqz (i32.const 0) ) ) (unreachable) ) ) ) ) (func $none_=>_i32 (result i32) (unreachable) ) (func $i32_=>_none (param $0 i32) (nop) ) (func $selectify (param $x i32) (result funcref) (select (result funcref) (ref.func $none_=>_i32) (ref.func $i32_=>_none) (local.get $x) ) ) (func $br_on-to-br (param $func (ref func)) (call $log (i32.const 0) ) (block $null (drop (ref.func $br_on-to-br) ) (call $log (i32.const 1) ) ) (call $log (i32.const 2) ) (drop (block $func (result (ref $ref|func|_=>_none)) (drop (br $func (ref.func $br_on-to-br) ) ) (call $log (i32.const 3) ) (ref.func $br_on-to-br) ) ) (call $log (i32.const 4) ) (drop (block $data (result (ref $vector)) (drop (br $data (array.new_default_with_rtt $vector (i32.const 1) (rtt.canon $vector) ) ) ) (call $log (i32.const 5) ) (array.new_default_with_rtt $vector (i32.const 2) (rtt.canon $vector) ) ) ) (call $log (i32.const 6) ) (drop (block $i31 (result i31ref) (drop (br $i31 (i31.new (i32.const 42) ) ) ) (call $log (i32.const 7) ) (i31.new (i32.const 1337) ) ) ) (call $log (i32.const 8) ) (drop (block $non-null (result (ref $ref|func|_=>_none)) (br $non-null (ref.func $br_on-to-br) ) (call $log (i32.const 9) ) (ref.func $br_on-to-br) ) ) ) (func $br_on-to-flow (drop (block $data (result (ref null data)) (drop (ref.func $br_on-to-flow) ) (ref.null data) ) ) (drop (block $datab (result (ref null data)) (drop (i31.new (i32.const 1337) ) ) (ref.null data) ) ) (drop (block $func (result funcref) (drop (array.new_default_with_rtt $vector (i32.const 2) (rtt.canon $vector) ) ) (ref.null func) ) ) (drop (block $funcb (result funcref) (drop (i31.new (i32.const 1337) ) ) (ref.null func) ) ) (drop (block $i31 (result (ref null i31)) (drop (array.new_default_with_rtt $vector (i32.const 2) (rtt.canon $vector) ) ) (ref.null i31) ) ) (drop (block $i31b (result (ref null i31)) (drop (ref.func $br_on-to-flow) ) (ref.null i31) ) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_all-features.wast000066400000000000000000000077411423707623100261610ustar00rootroot00000000000000(module (type $vector (array (mut i32))) (type $struct (struct (field (ref null $vector)))) (import "out" "log" (func $log (param i32))) (func $foo (result (ref null $struct)) (if (result (ref null $struct)) (i32.const 1) (struct.new_with_rtt $struct ;; regression test for computing the cost of an array.new_default, which ;; lacks the optional field "init" (array.new_default_with_rtt $vector (i32.const 1) (rtt.canon $vector) ) (rtt.canon $struct) ) (ref.null $struct) ) ) (func $test-prefinalize (result f64) (loop $loop (result f64) (block $block (result f64) (drop (br_if $block (f64.const 0) (i32.const 1) ) ) (if (i32.const 0) (unreachable) ) ;; this will be moved from $block into the if right before it. we must be ;; careful to properly finalize() things, as if we finalize the block too ;; early - before the if - then the block ends in a none type, which is ;; invalid. (br $loop) ) ) ) (func $none_=>_i32 (result i32) (unreachable) ) (func $i32_=>_none (param i32) ) (func $selectify (param $x i32) (result funcref) ;; this if has arms with different function types, for which funcref is the ;; LUB (if (result funcref) (local.get $x) (ref.func $none_=>_i32) (ref.func $i32_=>_none) ) ) (func $br_on-to-br (param $func (ref func)) (call $log (i32.const 0)) (block $null ;; a non-null reference is not null, and the br is never taken (drop (br_on_null $null (ref.func $br_on-to-br)) ) (call $log (i32.const 1)) ) (call $log (i32.const 2)) (drop (block $func (result funcref) ;; a non-null function reference means we always take the br (drop (br_on_func $func (ref.func $br_on-to-br)) ) (call $log (i32.const 3)) (ref.func $br_on-to-br) ) ) (call $log (i32.const 4)) (drop (block $data (result dataref) ;; a non-null data reference means we always take the br (drop (br_on_data $data (array.new_default_with_rtt $vector (i32.const 1) (rtt.canon $vector) ) ) ) (call $log (i32.const 5)) (array.new_default_with_rtt $vector (i32.const 2) (rtt.canon $vector) ) ) ) (call $log (i32.const 6)) (drop (block $i31 (result i31ref) ;; a non-null i31 reference means we always take the br (drop (br_on_i31 $i31 (i31.new (i32.const 42)) ) ) (call $log (i32.const 7)) (i31.new (i32.const 1337)) ) ) (call $log (i32.const 8)) (drop (block $non-null (result (ref func)) ;; a non-null reference is not null, and the br is always taken (br_on_non_null $non-null (ref.func $br_on-to-br)) (call $log (i32.const 9)) (ref.func $br_on-to-br) ) ) ) ;; a br_on of the obviously incorrect kind can just flow out the value as the ;; break is never taken (func $br_on-to-flow ;; brs to data (drop (block $data (result (ref null data)) (drop (br_on_data $data (ref.func $br_on-to-flow) ) ) (ref.null data) ) ) (drop (block $datab (result (ref null data)) (drop (br_on_data $datab (i31.new (i32.const 1337)) ) ) (ref.null data) ) ) ;; brs to func (drop (block $func (result (ref null func)) (drop (br_on_func $func (array.new_default_with_rtt $vector (i32.const 2) (rtt.canon $vector) ) ) ) (ref.null func) ) ) (drop (block $funcb (result (ref null func)) (drop (br_on_func $funcb (i31.new (i32.const 1337)) ) ) (ref.null func) ) ) ;; brs to i31 (drop (block $i31 (result (ref null i31)) (drop (br_on_i31 $i31 (array.new_default_with_rtt $vector (i32.const 2) (rtt.canon $vector) ) ) ) (ref.null i31) ) ) (drop (block $i31b (result (ref null i31)) (drop (br_on_i31 $i31b (ref.func $br_on-to-flow) ) ) (ref.null i31) ) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_enable-multivalue.txt000066400000000000000000001176211423707623100270500ustar00rootroot00000000000000(module (type $0 (func (param i32))) (type $1 (func)) (type $2 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_i32_i64 (func (result i32 i64))) (type $none_=>_i64 (func (result i64))) (type $i32_i32_=>_none (func (param i32 i32))) (type $f32_i32_f32_i32_i32_f64_f32_=>_i32 (func (param f32 i32 f32 i32 i32 f64 f32) (result i32))) (type $i32_=>_i64 (func (param i32) (result i64))) (type $none_=>_f32 (func (result f32))) (type $i32_=>_f32 (func (param i32) (result f32))) (type $i32_f64_i32_f64_f32_f32_=>_i32 (func (param i32 f64 i32 f64 f32 f32) (result i32))) (memory $0 256 256) (func $b0-yes (param $i1 i32) (block $topmost ) ) (func $b1 (param $i1 i32) (block $topmost (block $block (drop (i32.const 0) ) ) ) ) (func $b2 (param $i1 i32) (block $topmost (block $inner ) ) ) (func $b3-yes (param $i1 i32) (block $topmost (block $inner ) ) ) (func $b4 (param $i1 i32) (block $topmost (block $inner (block $block (drop (i32.const 0) ) ) ) ) ) (func $b5 (param $i1 i32) (block $topmost (block $inner (block $block (drop (i32.const 0) ) ) ) ) ) (func $b6 (param $i1 i32) (block $topmost (br_if $topmost (i32.const 1) ) ) ) (func $b7 (param $i1 i32) (block $topmost (block $block (drop (i32.const 0) ) (br_if $topmost (i32.const 1) ) ) ) ) (func $b8 (param $i1 i32) (block $topmost (block $inner (br_if $topmost (i32.const 1) ) ) ) ) (func $b9 (param $i1 i32) (block $topmost (block $inner (br_if $topmost (i32.const 1) ) ) ) ) (func $b10 (param $i1 i32) (block $topmost (block $inner (block $block (drop (i32.const 0) ) (br_if $topmost (i32.const 1) ) ) ) ) ) (func $b11 (param $i1 i32) (block $topmost (block $inner (block $block (drop (i32.const 0) ) (br_if $topmost (i32.const 1) ) ) ) ) ) (func $b12-yes (if (i32.const 1) (block $topmost (block $block1 (drop (i32.const 12) ) (block $block (drop (i32.const 1) ) ) ) ) (block $block3 (drop (i32.const 27) ) (block $block0 (drop (i32.const 2) ) ) ) ) ) (func $b13 (result i32) (block $topmost (result i32) (if (i32.const 1) (block $block1 (drop (i32.const 12) ) (drop (br_if $topmost (i32.const 1) (i32.const 1) ) ) ) (block $block3 (drop (i32.const 27) ) (br $topmost (i32.const 2) ) ) ) (i32.const 3) ) ) (func $b14 (result i32) (select (block $topmost (result i32) (block $block1 (result i32) (i32.const 12) ) ) (block $block3 (result i32) (i32.const 27) ) (i32.const 1) ) ) (func $b14-tuple (result i32 i64) (if (result i32 i64) (i32.const 1) (block $topmost (result i32 i64) (block $block1 (result i32 i64) (tuple.make (i32.const 12) (i64.const 12) ) ) ) (block $block3 (result i32 i64) (tuple.make (i32.const 27) (i64.const 27) ) ) ) ) (func $b15 (block $topmost (br_if $topmost (i32.const 17) ) ) ) (func $b15b (if (i32.const 18) (block $topmost (block $block (drop (i32.const 0) ) ) ) ) ) (func $b16 (block $a (block $b (block $c ) ) ) (block $a1 (block $b2 (block $c3 ) ) ) (block $a4 (block $b5 (block $c6 ) ) ) ) (func $b17 (if (i32.const 0) (block $a (block $block1 ) ) (block $block3 ) ) (if (i32.const 0) (block $a7 (drop (i32.const 1) ) ) (block $block6 ) ) (if (i32.const 0) (block $a9 (block $block8 ) ) (drop (i32.const 1) ) ) (if (i32.const 0) (block $c (block $b (block $block11 ) ) ) (block $block13 ) ) ) (func $ret-1 (nop) ) (func $ret-2 (block $block0 (block $block1 ) ) ) (func $ret-3 (if (i32.const 0) (block $block0 ) (block $block3 ) ) ) (func $ret-value (result i32) (block $block0 (result i32) (block $block1 (result i32) (i32.const 1) ) ) ) (func $no-select-but-the-last (block $a (if (i32.const 0) (drop (i32.const 1) ) (block $block2 (block $block (drop (i32.const 2) ) (br $a) ) (drop (i32.const 3) ) ) ) (if (i32.const 0) (block $block4 (block $block13 (drop (i32.const 2) ) (br $a) ) (drop (i32.const 3) ) ) (drop (i32.const 1) ) ) (if (block $block6 (result i32) (block $block15 (drop (i32.const 2) ) (br $a) ) (i32.const 3) ) (drop (i32.const 0) ) (drop (i32.const 1) ) ) (if (block $a17 (result i32) (i32.const 0) ) (block $a18 (block $block19 (drop (i32.const 1) ) ) ) (block $a20 (block $block21 (drop (i32.const 2) ) ) ) ) ) ) (func $side-effects-and-order (result i32) (local $x i32) (block $do-once$0 (if (call $b13) (block $block (drop (i32.const 0) ) (br $do-once$0) ) ) (drop (i32.const 1) ) ) (block $do-once$022 (if (call $b13) (block $block24 (drop (call $b14) ) (br $do-once$022) ) ) (drop (i32.const 1) ) ) (block $do-once$025 (if (i32.const 0) (block $block27 (drop (call $b14) ) (br $do-once$025) ) ) (drop (i32.const 1) ) ) (block $do-once$028 (result i32) (if (local.tee $x (i32.const 1) ) (br $do-once$028 (local.tee $x (i32.const 2) ) ) ) (i32.const 1) ) ) (func $loops (loop $in (block $out (br_if $in (i32.eqz (i32.const 0) ) ) ) ) (loop $in30 (br $in30) ) (loop $loop-in (block $out31 (br_if $out31 (i32.const 0) ) ) ) (loop $in33 (block $out34 (br_if $out34 (i32.const 0) ) ) ) (loop $in36 (nop) ) (loop $in37 (block $out38 ) ) (loop $in39 (if (i32.eqz (i32.const 0) ) (block $out40 (nop) (br_if $in39 (i32.const 1) ) ) ) ) (loop $in42 (block $out43 (br_if $in42 (i32.const 0) ) ) ) (loop $in45 (if (i32.const 0) (block $out46 (unreachable) ) (br $in45) ) ) (loop $in48 (if (i32.const 0) (block $out49 (block $block (call $loops) ) ) (br $in48) ) ) (loop $in-todo (if (i32.const 0) (block $out-todo ) (block (call $loops) (br $in-todo) ) ) ) (loop $in52 (if (i32.const 0) (block $out53 ) (block (call $loops) (br $in52) ) ) ) (loop $in55 (if (i32.const 0) (block (call $loops) (br $in55) ) (block $out56 ) ) ) (loop $in58 (if (i32.const 0) (block (block $block61 (drop (i32.const 1) ) (call $loops) ) (br $in58) ) (block $out59 ) ) ) (loop $in62 (if (i32.const 0) (block $out63 ) (block (call $loops) (drop (i32.const 100) ) (br $in62) ) ) ) (loop $in65 (if (i32.const 0) (block (call $loops) (drop (i32.const 101) ) (br $in65) ) (block $out66 ) ) ) (loop $in68 (if (i32.const 0) (block (block $block71 (drop (i32.const 1) ) (call $loops) ) (drop (i32.const 102) ) (br $in68) ) (block $out69 ) ) ) (loop $in72 (if (i32.eqz (i32.const 0) ) (block $out73 (nop) (call $loops) (return) (br $in72) ) ) ) (loop $in75 (block $out76 (br_if $out76 (i32.const 0) ) (call $loops) (br $out76) (br $in75) ) ) (loop $in78 (if (i32.const 0) (block $out79 ) (block (call $loops) (drop (block $out2 (result i32) (i32.const 1) ) ) (br $in78) ) ) ) (loop $in81 (block $out82 (br_if $in81 (i32.eqz (i32.const 0) ) ) ) ) (loop $in-todo2 (if (i32.const 0) (block $out-todo2 ) (block (call $loops) (br $in-todo2) ) ) ) (loop $in83 (block $out84 (br $out84) (br $in83) ) ) (loop $in85 (block $out86 (drop (i32.const 0) ) (br $in85) ) ) (loop $in-not (block $out-not (br_if $out-not (i32.const -1) ) (br_if $out-not (i32.const 0) ) (call $loops) (br $in-not) ) ) (loop $in-todo287 (if (i32.const 0) (block $out-todo288 ) (block (call $loops) (drop (i32.const 1) ) (br $in-todo287) ) ) ) ) (func $br_if_in_block (result i32) (block $outval (result i32) (block $in (drop (i32.const 1) ) (br $in) (drop (i32.const 2) ) (br_if $in (i32.eqz (i32.const 3) ) ) (unreachable) (drop (i32.const 4) ) (br_if $in (i32.const 5) ) (unreachable) (drop (i32.const 6) ) ) (select (i32.const 7) (i32.const 8) (i32.const 6) ) ) ) (func $threading (drop (block $value-out (result i32) (block $value-in (result i32) (block $out (block $in (br_if $out (i32.const 1) ) (br_if $out (i32.const 2) ) (br $value-in (i32.const 3) ) ) ) (i32.const 4) ) ) ) (block $stack1 (block $stack2 (block $stack3 (block $stack4 (br_if $stack1 (i32.const 1) ) (unreachable) ) ) ) ) ) (func $if-to-br_if-conflict (param $x i32) (param $y i32) (result i32) (block $leave (local.set $y (block $out (result i32) (if (local.get $x) (br $out (block $block (result i32) (local.set $x (i32.const 0) ) (i32.const 1) ) ) (br_if $leave (i32.const 1) ) ) (unreachable) ) ) ) (i32.add (local.get $x) (local.get $y) ) ) (func $if-to-br_if-conflict2 (param $x i32) (param $y i32) (result i32) (block $leave (local.set $y (block $out (result i32) (if (local.get $x) (br_if $leave (i32.const 1) ) (br $out (block $block (result i32) (local.set $x (i32.const 0) ) (i32.const 1) ) ) ) (unreachable) ) ) ) (i32.add (local.get $x) (local.get $y) ) ) (func $if-to-br_if-value-sideeffect (param $x i32) (param $y i32) (result i32) (block $leave (local.set $y (block $out (result i32) (if (local.get $x) (br $out (block $block (result i32) (drop (call $if-to-br_if-value-sideeffect (i32.const 0) (i32.const 1) ) ) (nop) (i32.const 1) ) ) ) (unreachable) ) ) ) (i32.add (local.get $x) (local.get $y) ) ) (func $fuzz (param $j i32) (param $g i32) (loop $label$continue$d (block $label$break$c (block $label$break$d (if (i32.lt_s (local.get $j) (i32.const 2147483640) ) (block $x (block $y (block $z (br_if $x (local.get $j) ) ) ) ) (block $switch$26 ) ) (i32.store (i32.const 5724) (i32.const -254899267) ) (br $label$continue$d) ) ) ) ) (func $iffify (if (i32.eqz (i32.const 0) ) (block $yes (nop) (drop (i32.const 1) ) (drop (i32.const 2) ) ) ) (block $no (br_if $no (i32.const 0) ) (drop (i32.const 1) ) (br $no) (drop (i32.const 2) ) ) (block $no2 (br_if $no2 (i32.const 0) ) ) (block $no3 (br $no3) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (block $no5 (block $no4 (br_if $no5 (i32.const 0) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) ) ) (func $loop-if (result i32) (loop $typed (result i32) (block $outer (result i32) (block (result i32) (br_if $typed (i32.eqz (i32.const 2) ) ) (block $block (result i32) (drop (call $loop-if) ) (i32.const 0) ) ) ) ) ) (func $block-break (param $0 i32) (block $block$7$break (block $shape$6$continue (call $block-break (i32.const 1) ) ) ) ) (func $loop-break (param $0 i32) (loop $shape$6$continue (block $block$7$break (block (call $loop-break (i32.const 1) ) (br_if $shape$6$continue (local.get $0) ) (nop) ) ) ) ) (func $untaken-brs-might-prevent-block-removal (param $0 f32) (param $1 i32) (param $2 f32) (param $3 i32) (param $4 i32) (param $5 f64) (param $6 f32) (result i32) (block $label$0 (result i32) (block $label$1 (br_if $label$1 (i32.const 607395945) ) (br_if $label$1 (i32.load offset=3 align=1 (select (call $untaken-brs-might-prevent-block-removal (f32.const 1.4904844647389837e-07) (br_if $label$0 (i32.store16 offset=4 align=1 (i32.const 1900641) (br $label$0 (i32.const 1628075109) ) ) (i32.const 1764950569) ) (f32.const 1.1910939690100655e-32) (i32.const 1628057906) (i32.const 859068982) (f64.const 2.524518840347722e-258) (f32.const -nan:0x40a63) ) (i32.const 688529440) (i32.const 1751478890) ) ) ) ) (i32.const 1935947830) ) ) (func $unexitable-loops-result (param $0 i32) (result i64) (loop $label$0 (loop $label$1 (br_if $label$0 (i32.load8_s (i32.const 201460482) ) ) (block (block $label$3 (br_if $label$1 (local.get $0) ) ) (br $label$1) ) ) ) ) (func $untaken-br-with-concrete-last-element (block $label$8 (block $label$11 (block $label$14 (br_if $label$8 (br $label$8) ) ) ) ) ) (func $untaken-br-with-concrete-last-element2 (result i32) (block $label$8 (result i32) (block $label$11 (result i32) (block $label$14 (result i32) (br_if $label$14 (i32.const 102) (br $label$11 (i32.const 103) ) ) ) ) ) ) (func $untaken-br_if-then-if (block $label$0 (br_if $label$0 (unreachable) ) (if (i32.const 0) (nop) ) ) ) (func $unreachable-if-that-could-be-a-br_if (result i64) (loop $label$3 (result i64) (drop (if (result f64) (unreachable) (f64.const 1) (br $label$3) ) ) (i64.const 1) ) ) (func $nop-br-might-update-type (block $label$39 (drop (if (result i32) (unreachable) (if (result i32) (i32.const 1) (br $label$39) (i32.const 0) ) (i32.const 0) ) ) ) ) (func $no-flow-through-if-without-else (result f32) (local $0 i32) (local $2 f32) (if (result f32) (local.get $0) (block $label$0 (block $label$11 (return (f32.const 239) ) (if (i32.const 0) (return (local.get $2) ) ) ) ) (f32.const -9223372036854775808) ) ) (func $unreachable-return-loop-value (result i64) (loop $loop (if (i32.const 1) (block $block (br_if $block (br $loop) ) (br $loop) ) ) (br $loop) ) ) (func $obviously-flows-out-maybe (param $var$0 i32) (result f32) (block $label$1 (result f32) (br $label$1 (f32.const 1) ) (loop $label$5 (if (i32.const 11) (block $label$8 (br_if $label$8 (unreachable) ) (br $label$5) ) ) (br $label$5) ) ) ) (func $br-to-table (param $a i32) (block $x (block $y (block $z (nop) (nop) (block $tablify|0 (br_table $x $y $z $tablify|0 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-too-few (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0) ) ) (br_if $x (i32.eq (local.get $a) (i32.const 1) ) ) ) ) ) ) (func $br-to-table-one-more (param $a i32) (block $x (block $y (block $z (nop) (nop) (nop) (block $tablify|0 (br_table $x $y $z $x $tablify|0 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-overlap (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0) ) ) (br_if $y (i32.eq (local.get $a) (i32.const 1) ) ) (br_if $z (i32.eq (local.get $a) (i32.const 1) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-overlap-start (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0) ) ) (br_if $y (i32.eq (local.get $a) (i32.const 0) ) ) (br_if $z (i32.eq (local.get $a) (i32.const 1) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-offset (param $a i32) (block $x (block $y (block $z (nop) (nop) (block $tablify|0 (br_table $x $y $z $tablify|0 (i32.sub (local.get $a) (i32.const 15) ) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-RANGE-high (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0) ) ) (br_if $y (i32.eq (local.get $a) (i32.const 1) ) ) (br_if $z (i32.eq (local.get $a) (i32.const 10) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-RANGE-low (param $a i32) (block $x (block $y (block $z (nop) (nop) (block $tablify|0 (br_table $x $tablify|0 $tablify|0 $y $tablify|0 $tablify|0 $tablify|0 $tablify|0 $tablify|0 $z $tablify|0 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad (param $a i32) (result i32) (block $value (result i32) (block $x (block $y (block $z (nop) (br $x) (nop) (nop) (block $tablify|0 (br_table $x $y $z $tablify|0 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (i32.const 2000) ) ) (func $br-to-table-bad2 (param $a i32) (result i32) (block $value (result i32) (block $x (block $y (block $z (nop) (drop (br_if $value (i32.const 1000) (i32.eq (local.get $a) (i32.const 0) ) ) ) (nop) (nop) (block $tablify|0 (br_table $x $y $z $tablify|0 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (i32.const 2000) ) ) (func $br-to-table-bad3 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (i32.const 10) (i32.const 0) ) ) (nop) (nop) (block $tablify|0 (br_table $x $y $z $tablify|0 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-multi (param $a i32) (block $x (block $y (block $z (nop) (nop) (block $tablify|0 (br_table $z $y $x $tablify|0 (i32.sub (i32.const 10) (i32.const 5) ) ) ) (nop) (nop) (block $tablify|00 (br_table $x $y $z $tablify|00 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad4 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.ne (local.get $a) (i32.const 0) ) ) (br_if $y (i32.eq (local.get $a) (i32.const 1) ) ) (br_if $z (i32.eq (local.get $a) (i32.const 2) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad5 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (local.get $a) ) ) (br_if $y (i32.eq (local.get $a) (local.get $a) ) ) (br_if $z (i32.eq (local.get $a) (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad6 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (call $b13) (i32.const 0) ) ) (br_if $y (i32.eq (call $b13) (i32.const 1) ) ) (br_if $z (i32.eq (call $b13) (i32.const 2) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad7 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const -1) ) ) (br_if $y (i32.eq (local.get $a) (i32.const -1) ) ) (br_if $z (i32.eq (local.get $a) (i32.const -1) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-defaultNameOverlaps (param $a i32) (block $x (block $tablify|0 (block $z (nop) (nop) (block $tablify|1 (br_table $x $tablify|0 $z $tablify|1 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-unreach (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (unreachable) (i32.const 0) ) ) (br_if $y (i32.eq (unreachable) (i32.const 1) ) ) (br_if $z (i32.eq (unreachable) (i32.const 2) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-overlap-but-later (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0) ) ) (br_if $y (i32.eq (local.get $a) (i32.const 1) ) ) (nop) (nop) (block $tablify|0 (br_table $z $x $y $tablify|0 (i32.sub (local.get $a) (i32.const 1) ) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-initial-tee (param $a i32) (block $x (block $y (block $z (nop) (nop) (block $tablify|0 (br_table $x $y $z $tablify|0 (i32.sub (local.tee $a (i32.add (i32.const 10) (i32.const 1) ) ) (i32.const 10) ) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-initial-tee-wrong-index (param $a i32) (local $b i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.tee $a (i32.const 99) ) (i32.const 10) ) ) (br_if $y (i32.eq (local.get $b) (i32.const 11) ) ) (br_if $z (i32.eq (local.get $b) (i32.const 12) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-eqz (param $a i32) (block $x (block $y (block $z (nop) (nop) (block $tablify|0 (br_table $x $y $z $tablify|0 (local.get $a) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-tee-eqz (param $a i32) (block $x (block $y (block $z (nop) (nop) (block $tablify|0 (br_table $x $y $z $tablify|0 (local.tee $a (i32.add (i32.const 0) (i32.const 1) ) ) ) ) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $tiny-switch (if (i32.const 0) (block $y ) (block $x ) ) (block $z (block (drop (i32.const 0) ) (nop) ) ) ) (func $trim-switch (block $A (block $y (br_table $A $y $A $y $A $y (i32.sub (i32.const 0) (i32.const 2) ) ) ) (call $trim-switch) ) ) (func $same-target-br_if-and-br (block $x (drop (i32.const 0) ) (br $x) (unreachable) ) ) (func $simple-switch (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $A $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) (func $simple-switch-2 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $y $y $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) (func $simple-switch-3 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $B $y (i32.const 0) ) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) (func $simple-switch43 (result i32) (local $0 i32) (block $A (block $B (block $y (br_if $A (i32.eqz (local.tee $0 (i32.const 0) ) ) ) (br_if $B (i32.eq (local.get $0) (i32.const 127) ) ) (br $y) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) (func $simple-switch-5 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $A $y $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) (func $undo-if-return (param $p i32) (result i32) (local $x i32) (block $out (block (br_if $out (local.get $p) ) (local.set $x (i32.const 1) ) ) (block (br_if $out (i32.eqz (local.get $p) ) ) (local.set $x (i32.const 2) ) ) (local.set $x (if (result i32) (local.get $p) (br $out) (br $out) ) ) ) (local.get $p) ) (func $if-unreachable-but-declares-value (param $var$0 i32) (param $var$1 f64) (param $var$2 i32) (param $var$3 f64) (param $var$4 f32) (param $var$5 f32) (result i32) (local $var$6 f64) (if (i32.const 0) (drop (loop $label$3 (result i64) (block $label$4 (result i64) (block $label$5 (block $label$6 (local.set $var$1 (if (result f64) (unreachable) (br $label$5) (f64.const 1) ) ) ) ) (i64.const 1) ) ) ) ) (i32.const 0) ) (func $if-flow-1 (result i32) (select (i32.const 1) (i32.const 2) (i32.const 0) ) ) (func $if-flow-2 (result i32) (if (result i32) (i32.const 0) (unreachable) (i32.const 2) ) ) (func $if-flow-3 (result i32) (if (result i32) (i32.const 0) (i32.const 1) (unreachable) ) ) (func $if-flow-4 (result i32) (if (return (i32.const 0) ) (return (i32.const 1) ) (return (i32.const 2) ) ) ) (func $iff-flow-fuzz-bug (result i32) (loop $label$1 (br_if $label$1 (i32.eqz (i32.const 1) ) ) (loop $label$2 (unreachable) (if (i32.const 0) (nop) (return (i32.const 0) ) ) ) ) ) (func $fuzz-block-unreachable-brs-with-values (result i32) (local $0 i32) (loop $label$1 (if (local.get $0) (block $label$2 (local.tee $0 (loop $label$5 (br_if $label$5 (block (unreachable) (drop (i32.const 0) ) ) ) ) ) ) (br $label$1) ) ) ) (func $drop-restructure-if (param $x i32) (param $y i32) (result i32) (if (result i32) (local.get $y) (local.get $x) (block $label$2 (result i32) (nop) (i32.const 0) ) ) ) (func $drop-restructure-if-final (param $x i32) (param $y i32) (result i32) (if (result i32) (local.get $y) (local.get $x) (block $label$2 (result i32) (nop) (unreachable) ) ) ) (func $drop-restructure-if-middle (param $x i32) (param $y i32) (result i32) (if (result i32) (local.get $y) (local.get $x) (block $label$2 (result i32) (nop) (nop) (i32.const 0) ) ) ) (func $drop-restructure-select (param $x i32) (param $y i32) (result i32) (select (local.tee $y (local.get $x) ) (block $label$2 (result i32) (nop) (i32.const 0) ) (local.get $y) ) ) (func $drop-restructure-if-bad-2 (param $x i32) (param $y i32) (result i32) (block $label$2 (result i32) (drop (br_if $label$2 (local.get $y) (local.tee $y (local.get $x) ) ) ) (i32.const 0) ) ) (func $if-block (if (i32.const 1) (block $label (block $block (drop (i32.const 2) ) (drop (i32.const 3) ) ) ) ) ) (func $if-block-bad (block $label (if (br $label) (block $block (drop (i32.const 2) ) (drop (i32.const 3) ) ) ) ) ) (func $if-block-br (block $label (br_if $label (i32.const 1) ) ) ) (func $if-block-br-1 (if (i32.const 1) (block $label ) (drop (i32.const 3) ) ) ) (func $if-block-br-2 (if (i32.const 1) (block $label (drop (i32.const 3) ) ) (nop) ) ) (func $if-block-br-3 (if (i32.const 1) (block $label ) (nop) ) ) (func $if-block-br-4-eithre (if (i32.const 1) (block $label (drop (i32.const 2) ) ) (drop (i32.const 3) ) ) ) (func $if-block-br-5-value (result i32) (select (block $label (result i32) (i32.const 2) ) (i32.const 3) (i32.const 1) ) ) (func $restructure-if-outerType-change (loop $label$1 (br_if $label$1 (block $label$2 (if (block $label$4 (unreachable) ) (block $label$3 (br $label$3) ) ) (unreachable) ) ) ) ) (func $if-arm-unreachable (if (unreachable) (block $label$1 (nop) ) (unreachable) ) ) (func $propagate-type-if-we-optimize (if (i32.const 1) (nop) (block $block (drop (loop $label$3 (result i64) (br_if $label$3 (if (i32.const 0) (block $label$4 (unreachable) ) (unreachable) ) ) (i64.const -9) ) ) (unreachable) ) ) ) (func $switch-to-br (block $A (block $y (block (drop (i32.const 0) ) (br $A) ) ) ) ) (func $switch-to-br-value (result i32) (block $A (result i32) (block $y (result i32) (block (drop (i32.const 1) ) (br $A (i32.const 0) ) ) ) ) ) (func $switch-threading-multi (param $x i32) (param $y i32) (result i32) (block $block$5$break (block $block$4$break (loop $shape$1$continue (block $block$3$break (block $switch$2$case$5 (block $switch$2$case$4 (block $switch$2$default (block $switch$2$case$2 (br_table $shape$1$continue $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$5$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$3$break $block$4$break $block$3$break (local.get $x) ) ) (br $shape$1$continue) ) (br $block$3$break) ) (br $block$4$break) ) (br $block$5$break) ) ) (unreachable) ) (local.set $y (i32.const 1) ) (unreachable) ) (local.set $y (i32.const 2) ) (unreachable) ) (func $fuzz-type-changes-in-our-cycles (result i32) (loop $label$1 (if (i32.const 0) (if (i32.const 0) (block $label$3 (block $block ) ) (return (i32.const -8192) ) ) ) (br $label$1) ) ) (func $refinalize-need-br-value (result i32) (loop $label$3 (result i32) (block $label$6 (result i32) (block $label$10 (unreachable) (block $label$503 (br_if $label$3 (block $label$530 (result i32) (br_if $label$503 (i32.const 0) ) (i32.const 0) ) ) (return (i32.const 127) ) ) ) ) ) ) (func $selectify (param $x i32) (drop (select (i32.mul (i32.const 2) (i32.const 3) ) (i32.mul (i32.const 2) (i32.const 3) ) (i32.eq (local.get $x) (i32.const 1) ) ) ) (drop (select (i32.add (i32.const 2) (i32.const 3) ) (i32.add (i32.const 2) (i32.const 3) ) (i32.eq (local.get $x) (i32.const 1) ) ) ) ) (func $selectify-even-with-condition-side-effects (param $0 i32) (drop (select (i32.const 1) (i32.const 0) (i32.rem_s (local.get $0) (i32.const 2) ) ) ) ) (func $no-selectify-when-arm-side-effects (param $0 i32) (drop (if (result i32) (i32.rem_s (local.get $0) (i32.const 2) ) (local.tee $0 (i32.const 1) ) (i32.const 0) ) ) (drop (if (result i32) (i32.rem_s (local.get $0) (i32.const 2) ) (i32.const 0) (local.tee $0 (i32.const 1) ) ) ) ) (func $no-selectify-when-effects-invalidate (param $0 i32) (local $1 i32) (drop (if (result i32) (i32.rem_s (local.tee $0 (i32.const 3) ) (i32.const 2) ) (local.get $0) (i32.const 0) ) ) (drop (if (result i32) (i32.rem_s (local.tee $0 (i32.const 3) ) (i32.const 2) ) (i32.const 0) (local.get $0) ) ) (drop (select (i32.const 0) (local.get $1) (i32.rem_s (local.tee $0 (i32.const 3) ) (i32.const 2) ) ) ) ) (func $if-one-side (result i32) (local $x i32) (local.set $x (select (i32.const 2) (local.get $x) (i32.const 1) ) ) (local.get $x) ) (func $if-one-side-b (result i32) (local $x i32) (local.set $x (select (local.get $x) (i32.const 2) (i32.const 1) ) ) (local.get $x) ) (func $if-one-side-tee-etc (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $x i32) (local $y i32) (local $z i32) (drop (call $if-one-side-tee-etc (local.tee $x (select (i32.const -4) (local.get $x) (i32.const -3) ) ) ) ) (i32.const 0) ) (func $ifs-copies-recursive (param $20 i32) (result i32) (local.set $20 (select (select (select (i32.const 4) (local.get $20) (i32.const 3) ) (local.get $20) (i32.const 2) ) (local.get $20) (i32.const 1) ) ) (local.get $20) ) (func $if-copy1 (local $x i32) (local $y i32) (loop $top (local.set $x (select (local.get $x) (local.get $y) (i32.const 1) ) ) (br $top) ) ) (func $if-copy3 (local $x i32) (local $y i32) (loop $top (if (i32.const 1) (local.tee $x (unreachable) ) ) (br $top) ) ) (func $if-copy4 (local $x i32) (local $y i32) (loop $top (local.set $x (if (result i32) (i32.const 1) (unreachable) (local.get $y) ) ) (br $top) ) ) (func $if-copy-tee (local $x i32) (local $y i32) (loop $top (drop (local.tee $x (select (local.get $x) (i32.const 2) (i32.const 1) ) ) ) (br $top) ) ) (func $loop-end-set (param $x i32) (result i32) (loop $loop (nop) (br_if $loop (local.get $x) ) (local.set $x (i32.const 1) ) ) (local.get $x) ) (func $loop-end-value (param $x i32) (result i32) (loop $loop (result i32) (nop) (br_if $loop (local.get $x) ) (i32.const 1) ) ) (func $do-not-flow-values-through-unreachable-code (result i32) (block $block (unreachable) (if (i32.const 0) (block $A (return (i32.const 0) ) ) (nop) ) ) ) (func $do-not-flow-values-through-unreachable-code-b (result i32) (loop $loop-in (unreachable) (if (i32.const 0) (block $A (return (i32.const 0) ) ) (nop) ) ) ) (func $if_br_if (local $0 i32) (block $label$1 (br_if $label$1 (select (local.tee $0 (i32.const 1024) ) (i32.const 0) (i32.eqz (i32.const -4) ) ) ) (br_if $label$1 (select (i32.const 1025) (i32.const 0) (i32.eqz (i32.const -5) ) ) ) (br_if $label$1 (select (local.tee $0 (i32.const 1025) ) (i32.const 0) (i32.eqz (i32.const -6) ) ) ) (if (i32.const 1026) (br_if $label$1 (local.tee $0 (i32.const -7) ) ) ) (i32.store (i32.const 1024) (i32.add (local.get $0) (i32.const 1) ) ) ) ) (func $unswitch-reordering (param $x i32) (result i32) (block $label$1 (result i32) (br_table $label$1 (block $label$2 (result i32) (i32.store (i32.const 1) (i32.const 2) ) (i32.const 3) ) (block $block (result i32) (if (local.get $x) (return (i32.const 5) ) ) (i32.const 6) ) ) ) ) (func $no-selectify-if-condition-unreachable (result i32) (select (if (result i32) (unreachable) (i32.const 3) (i32.const 4) ) (i32.const 1) (i32.const 2) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_enable-multivalue.wast000066400000000000000000001343541423707623100272110ustar00rootroot00000000000000(module (memory 256 256) (type $0 (func (param i32))) (type $1 (func)) (type $2 (func (result i32))) (func $b0-yes (type $0) (param $i1 i32) (block $topmost (br $topmost) ) ) (func $b1 (type $0) (param $i1 i32) (block $topmost (block (drop (i32.const 0) ) (br $topmost) ) ) ) (func $b2 (type $0) (param $i1 i32) (block $topmost (block $inner (br $topmost) ) ) ) (func $b3-yes (type $0) (param $i1 i32) (block $topmost (block $inner (br $inner) ) ) ) (func $b4 (type $0) (param $i1 i32) (block $topmost (block $inner (block (drop (i32.const 0) ) (br $topmost) ) ) ) ) (func $b5 (type $0) (param $i1 i32) (block $topmost (block $inner (block (drop (i32.const 0) ) (br $inner) ) ) ) ) (func $b6 (type $0) (param $i1 i32) (block $topmost (br_if $topmost (i32.const 1) ) ) ) (func $b7 (type $0) (param $i1 i32) (block $topmost (block (drop (i32.const 0) ) (br_if $topmost (i32.const 1) ) ) ) ) (func $b8 (type $0) (param $i1 i32) (block $topmost (block $inner (br_if $topmost (i32.const 1) ) ) ) ) (func $b9 (type $0) (param $i1 i32) (block $topmost (block $inner (br_if $topmost (i32.const 1) ) ) ) ) (func $b10 (type $0) (param $i1 i32) (block $topmost (block $inner (block (drop (i32.const 0) ) (br_if $topmost (i32.const 1) ) ) ) ) ) (func $b11 (type $0) (param $i1 i32) (block $topmost (block $inner (block (drop (i32.const 0) ) (br_if $inner (i32.const 1) ) ) ) ) ) (func $b12-yes (type $1) (block $topmost (if (i32.const 1) (block $block1 (drop (i32.const 12) ) (block (drop (i32.const 1) ) (br $topmost) ) ) (block $block3 (drop (i32.const 27) ) (block (drop (i32.const 2) ) (br $topmost) ) ) ) ) ) (func $b13 (type $2) (result i32) (block $topmost (result i32) (if (i32.const 1) (block $block1 (drop (i32.const 12) ) (drop (br_if $topmost (i32.const 1) (i32.const 1) ) ) ) (block $block3 (drop (i32.const 27) ) (br $topmost (i32.const 2) ) ) ) (i32.const 3) ) ) (func $b14 (type $2) (result i32) (block $topmost (result i32) (if (result i32) (i32.const 1) (block $block1 (result i32) (i32.const 12) ) (block $block3 (result i32) (i32.const 27) ) ) ) ) (func $b14-tuple (result i32 i64) (block $topmost (result i32 i64) (if (result i32 i64) (i32.const 1) (block $block1 (result i32 i64) (tuple.make (i32.const 12) (i64.const 12) ) ) (block $block3 (result i32 i64) (tuple.make (i32.const 27) (i64.const 27) ) ) ) ) ) (func $b15 (type $1) (block $topmost (if (i32.const 17) (br $topmost) ) ) ) (func $b15b (type $1) (block $topmost (if (i32.const 18) (block (drop (i32.const 0) ) (br $topmost) ) ) ) ) (func $b16 (type $1) (block $a (block $b (block $c (br $a) ) (br $a) ) (br $a) ) (block $a (block $b (block $c (br $c) ) (br $b) ) (br $a) ) (block $a (block $b (block $c (br $b) ) (br $a) ) (br $a) ) ) (func $b17 (type $1) (block $a (if (i32.const 0) (block $block1 (br $a) ) (block $block3 (br $a) ) ) ) (block $a (if (i32.const 0) (drop (i32.const 1) ) (block $block6 (br $a) ) ) ) (block $a (if (i32.const 0) (block $block8 (br $a) ) (drop (i32.const 1) ) ) ) (block $c (block $b (if (i32.const 0) (block $block11 (br $b) ) (block $block13 (br $c) ) ) ) ) ) (func $ret-1 (type $1) (return) ) (func $ret-2 (type $1) (block $block0 (block $block1 (return) ) ) ) (func $ret-3 (type $1) (block $block0 (if (i32.const 0) (return) (block $block3 (return) ) ) ) ) (func $ret-value (type $2) (result i32) (block $block0 (block $block1 (return (i32.const 1) ) ) ) ) (func $no-select-but-the-last (type $1) (block $a (if (i32.const 0) (drop (i32.const 1) ) (block $block2 (block (drop (i32.const 2) ) (br $a) ) (drop (i32.const 3) ) ) ) (if (i32.const 0) (block $block4 (block (drop (i32.const 2) ) (br $a) ) (drop (i32.const 3) ) ) (drop (i32.const 1) ) ) (if (block $block6 (result i32) (block (drop (i32.const 2) ) (br $a) ) (i32.const 3) ) (drop (i32.const 0) ) (drop (i32.const 1) ) ) (if (block $a (result i32) (br $a (i32.const 0) ) ) (block $a (block (drop (i32.const 1) ) (br $a) ) ) (block $a (block (drop (i32.const 2) ) (br $a) ) ) ) ) ) (func $side-effects-and-order (type $2) (result i32) (local $x i32) (block $do-once$0 (if (call $b13) (block (drop (i32.const 0) ) (br $do-once$0) ) ) (drop (i32.const 1) ) ) (block $do-once$0 (if (call $b13) (block (drop (call $b14) ) (br $do-once$0) ) ) (drop (i32.const 1) ) ) (block $do-once$0 (if (i32.const 0) (block (drop (call $b14) ) (br $do-once$0) ) ) (drop (i32.const 1) ) ) (block $do-once$0 (result i32) (if (local.tee $x (i32.const 1) ) (br $do-once$0 (local.tee $x (i32.const 2) ) ) ) (i32.const 1) ) ) (func $loops (loop $in (block $out (if (i32.const 0) (br $out)) (br $in) ;; we can conditionalize this, and then the br out can vanish ) ) (loop $in (br $in) ) (loop (block $out (if (i32.const 0) (br $out)) (br $out) ) ) (loop $in (block $out (if (i32.const 0) (br $out)) (br $out) ) ) (loop $in) (loop $in (block $out) ) (loop $in (block $out (if (i32.const 0) (br $out)) (br_if $in (i32.const 1)) ) ) (loop $in (block $out (if (i32.const 0) (br $in)) (br $out) ) ) (loop $in (block $out (if (i32.const 0) (unreachable)) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (block (call $loops) (br $out) ) ) (br $in) ) ) (loop $in-todo ;; br_if into if (block $out-todo (if (i32.const 0) (br $out-todo)) (call $loops) (br $in-todo) ) ) (loop $in (block $out (if (i32.const 0) (br $out) (call $loops) ) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (call $loops) (br $out) ) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (block (drop (i32.const 1)) (call $loops) ) (br $out) ) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (br $out) (call $loops) ) (drop (i32.const 100)) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (call $loops) (br $out) ) (drop (i32.const 101)) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (block (drop (i32.const 1)) (call $loops) ) (br $out) ) (drop (i32.const 102)) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (br $out) (call $loops) ) (return) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (br $out) (call $loops) ) (br $out) (br $in) ) ) (loop $in (block $out (if (i32.const 0) (br $out) (call $loops) ) (drop (block $out2 (result i32) (br $out2 (i32.const 1)) ) ) (br $in) ) ) (loop $in (block $out (br_if $out (i32.const 0)) (br $in) ) ) (loop $in-todo2 ;; if-ify (block $out-todo2 (br_if $out-todo2 (i32.const 0)) (call $loops) (br $in-todo2) ) ) (loop $in (block $out (br $out) (br $in) ) ) (loop $in (block $out (br_if $in (i32.const 0)) (br $in) ) ) (loop $in-not ;; do NOT if-ify, the block can't be removed (block $out-not (br_if $out-not (i32.const -1)) (br_if $out-not (i32.const 0)) (call $loops) (br $in-not) ) ) (loop $in-todo2 ;; if-ify a slice with 2 things (block $out-todo2 (br_if $out-todo2 (i32.const 0)) (call $loops) (drop (i32.const 1)) (br $in-todo2) ) ) ) (func $br_if_in_block (result i32) (block $outval (result i32) (block $in (if (i32.const 1) (br $in) (br $in)) (drop (i32.const 2)) (if (i32.const 3) (unreachable) (br $in)) (drop (i32.const 4)) (if (i32.const 5) (br $in) (unreachable)) (drop (i32.const 6)) ) (if (result i32) (i32.const 6) (br $outval (i32.const 7)) (i32.const 8)) ) ) (func $threading (drop (block $value-out (result i32) (block $value-in (result i32) (block $out (block $in (if (i32.const 1) (br $in) ) (br_if $in (i32.const 2)) (br $value-in (i32.const 3)) ) (br $out) ) (i32.const 4) ) ) ) (block $stack1 (block $stack2 (block $stack3 (block $stack4 (if (i32.const 1) (br $stack4) ) (unreachable) ) (br $stack3) ) (br $stack2) ) (br $stack1) ) ) (func $if-to-br_if-conflict (param $x i32) (param $y i32) (result i32) (block $leave (local.set $y (block $out (result i32) (if (local.get $x) (br $out (block (result i32) (local.set $x (i32.const 0)) (i32.const 1) ) ) (br_if $leave (i32.const 1)) ) (unreachable) ) ) ) (i32.add (local.get $x) (local.get $y)) ) (func $if-to-br_if-conflict2 (param $x i32) (param $y i32) (result i32) (block $leave (local.set $y (block $out (result i32) (if (local.get $x) (br_if $leave (i32.const 1)) (br $out (block (result i32) (local.set $x (i32.const 0)) (i32.const 1) ) ) ) (unreachable) ) ) ) (i32.add (local.get $x) (local.get $y)) ) (func $if-to-br_if-value-sideeffect (param $x i32) (param $y i32) (result i32) (block $leave (local.set $y (block $out (result i32) (if (local.get $x) (br $out (block (result i32) (drop (call $if-to-br_if-value-sideeffect (i32.const 0) (i32.const 1))) (nop) (i32.const 1) ) ) ) (unreachable) ) ) ) (i32.add (local.get $x) (local.get $y)) ) (func $fuzz (param $j i32) (param $g i32) (block $label$break$c (loop $label$continue$d (block $label$break$d (if (i32.lt_s (local.get $j) (i32.const 2147483640) ) (block $x (block $y (block $z (br_if $y (local.get $j) ) (br $x) ;; don't be confused by this ) (nop) ;; get me to the store! ) ) (block $switch$26 (nop) ) ) (i32.store (i32.const 5724) (i32.const -254899267) ) (br $label$continue$d) ) ) ) ) (func $iffify (block $yes (br_if $yes (i32.const 0) ) (drop (i32.const 1)) (drop (i32.const 2)) ) (block $no (br_if $no (i32.const 0) ) (drop (i32.const 1)) (br $no) (drop (i32.const 2)) ) (block $no2 (br_if $no2 (i32.const 0) ) ) (block $no3 (br $no3) (drop (i32.const 1)) (drop (i32.const 2)) ) (block $no5 (block $no4 (br_if $no5 (i32.const 0) ) (drop (i32.const 1)) (drop (i32.const 2)) ) ) ) (func $loop-if (result i32) (block $outer (result i32) (loop $typed (result i32) ;; we can move the br after us into our if-else, which means we are the final ;; element in the block, (if (i32.const 2) (block (drop (call $loop-if)) (br $outer (i32.const 0)) ) ) (br $typed) ) ) ) (func $block-break (param $0 i32) (block $block$7$break (block $shape$6$continue (call $block-break (i32.const 1)) (br $block$7$break) ) ) ) (func $loop-break (param $0 i32) (block $block$7$break (loop $shape$6$continue (call $loop-break (i32.const 1)) (br_if $shape$6$continue (local.get $0) ) (br $block$7$break) ) ) ) (func $untaken-brs-might-prevent-block-removal (param $0 f32) (param $1 i32) (param $2 f32) (param $3 i32) (param $4 i32) (param $5 f64) (param $6 f32) (result i32) (block $label$0 (result i32) (block $label$1 ;; this block has no taken brs, but we can't remove it without removing them first (br_if $label$1 (i32.const 607395945) ) (br_if $label$1 (i32.load16_s offset=3 align=1 (select (call $untaken-brs-might-prevent-block-removal (f32.const 1.4904844647389837e-07) (br_if $label$0 (i32.store16 offset=4 align=1 (i32.const 1900641) (br $label$0 (i32.const 1628075109) ) ) (i32.const 1764950569) ) (f32.const 1.1910939690100655e-32) (i32.const 1628057906) (i32.const 859068982) (f64.const 2.524518840347722e-258) (f32.const -nan:0x40a63) ) (i32.const 688529440) (i32.const 1751478890) ) ) ) ) (i32.const 1935947830) ) ) (func $unexitable-loops-result (param $0 i32) (result i64) (loop $label$0 (loop $label$1 (if (i32.load8_s (i32.const 201460482) ) (br $label$0) (block $label$3 (br_if $label$3 (local.get $0) ) ) ) (br $label$1) ) ) ) (func $untaken-br-with-concrete-last-element (block $label$8 (block $label$11 (block $label$14 (br_if $label$14 (br $label$11 ) ) ) ) ) ) (func $untaken-br-with-concrete-last-element2 (result i32) (block $label$8 (result i32) (block $label$11 (result i32) (block $label$14 (result i32) (br_if $label$14 (i32.const 102) (br $label$11 (i32.const 103) ) ) ) ) ) ) (func $untaken-br_if-then-if (block $label$0 (br_if $label$0 (unreachable) ) (if (i32.const 0) (nop) ) ) ) (func $unreachable-if-that-could-be-a-br_if (result i64) (loop $label$3 (result i64) (drop (if (result f64) (unreachable) (f64.const 1) (br $label$3) ) ) (i64.const 1) ) ) (func $nop-br-might-update-type (block $label$39 (drop (if (result i32) (unreachable) (if (result i32) (i32.const 1) (br $label$39) ;; if we nop this, then the parent type must change (i32.const 0) ) (i32.const 0) ) ) ) ) (func $no-flow-through-if-without-else (result f32) (local $0 i32) (local $2 f32) (block $label$0 (if (local.get $0) (block $label$11 (return (f32.const 239) ) (if (i32.const 0) (return (local.get $2) ) ) ) (return (f32.const -9223372036854775808) ) ) ) ) (func $unreachable-return-loop-value (result i64) (loop $loop (if (i32.const 1) (block $block (br_if $block (br $loop) ) (br $loop) ) ) (br $loop) ;; we 100% go back to the loop top, the loop is never exited. but opts move code around so that is not obvious anymore, and the loop becomes a nop, but the func has a return value ) ) (func $obviously-flows-out-maybe (param $var$0 i32) (result f32) (block $label$1 (result f32) (br $label$1 (f32.const 1) ) (loop $label$5 (if (i32.const 11) (block $label$8 ;; this block is none - it has a break, even if not taken - and so looks like it might flow out, (br_if $label$8 ;; and so we can't move it outside to be the end of the loop's block (unreachable) ) (br $label$5) ) ) (br $label$5) ) ) ) (func $br-to-table (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-too-few (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) ) ) ) ) (func $br-to-table-one-more (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (br_if $x (i32.eq (local.get $a) (i32.const 3))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-overlap (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 1))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-overlap-start (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 0))) (br_if $z (i32.eq (local.get $a) (i32.const 1))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-offset (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 15))) (br_if $y (i32.eq (local.get $a) (i32.const 16))) (br_if $z (i32.eq (local.get $a) (i32.const 17))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-RANGE-high (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 10))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-RANGE-low (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 3))) (br_if $z (i32.eq (local.get $a) (i32.const 9))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad (param $a i32) (result i32) (block $value (result i32) (block $x (block $y (block $z (nop) (br $x) (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (i32.const 2000) ) ) (func $br-to-table-bad2 (param $a i32) (result i32) (block $value (result i32) (block $x (block $y (block $z (nop) (drop (br_if $value (i32.const 1000) (i32.eq (local.get $a) (i32.const 0)))) (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (i32.const 2000) ) ) (func $br-to-table-bad3 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (i32.const 10) (i32.const 0))) (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-multi (param $a i32) (block $x (block $y (block $z (br_if $z (i32.eq (i32.const 10) (i32.const 5))) (br_if $y (i32.eq (i32.const 10) (i32.const 6))) (br_if $x (i32.eq (i32.const 10) (i32.const 7))) (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad4 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.ne (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad5 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (local.get $a))) (br_if $y (i32.eq (local.get $a) (local.get $a))) (br_if $z (i32.eq (local.get $a) (local.get $a))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad6 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (call $b13) (i32.const 0))) (br_if $y (i32.eq (call $b13) (i32.const 1))) (br_if $z (i32.eq (call $b13) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-bad7 (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const -1))) ;; negative, we support only positive up to int32_max (br_if $y (i32.eq (local.get $a) (i32.const -1))) (br_if $z (i32.eq (local.get $a) (i32.const -1))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-defaultNameOverlaps (param $a i32) (block $x (block $tablify|0 (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $tablify|0 (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-unreach (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (unreachable) (i32.const 0))) (br_if $y (i32.eq (unreachable) (i32.const 1))) (br_if $z (i32.eq (unreachable) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-overlap-but-later (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.get $a) (i32.const 0))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 1))) (br_if $x (i32.eq (local.get $a) (i32.const 2))) (br_if $y (i32.eq (local.get $a) (i32.const 3))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-initial-tee (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.tee $a (i32.add (i32.const 10) (i32.const 1) ) ) (i32.const 10) ) ) (br_if $y (i32.eq (local.get $a) (i32.const 11))) (br_if $z (i32.eq (local.get $a) (i32.const 12))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-initial-tee-wrong-index (param $a i32) (local $b i32) (block $x (block $y (block $z (br_if $x (i32.eq (local.tee $a (i32.const 99)) (i32.const 10) ) ) ;; The subsequent conditions use a different local, $b, so we cannot ;; optimize here. (br_if $y (i32.eq (local.get $b) (i32.const 11))) (br_if $z (i32.eq (local.get $b) (i32.const 12))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-eqz (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eqz (local.get $a))) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $br-to-table-tee-eqz (param $a i32) (block $x (block $y (block $z (br_if $x (i32.eqz (local.tee $a (i32.add (i32.const 0) (i32.const 1) ) ) ) ) (br_if $y (i32.eq (local.get $a) (i32.const 1))) (br_if $z (i32.eq (local.get $a) (i32.const 2))) (unreachable) ) (unreachable) ) (unreachable) ) (unreachable) ) (func $tiny-switch (block $x (block $y (br_table $x $y (i32.const 0) ) ) ) (block $z (br_table $z (i32.const 0) ) ) ) (func $trim-switch (block $A (block $y (br_table $y $y $A $y $A $y $A $y $y $y $y $y $y $y $y $y $y $y (i32.const 0) ) ) (call $trim-switch) ) ) (func $same-target-br_if-and-br (block $x (br_if $x (i32.const 0) ) (br $x) (unreachable) ) ) (func $simple-switch (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $A $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) (func $simple-switch-2 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $y $y $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) (func $simple-switch-3 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $B $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) (func $simple-switch43 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $B $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) (func $simple-switch-5 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $A $y $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) (func $undo-if-return (param $p i32) (result i32) (local $x i32) (block $out (local.set $x (if (result i32) (local.get $p) (br $out) (i32.const 1) ) ) (local.set $x (if (result i32) (local.get $p) (i32.const 2) (br $out) ) ) (local.set $x (if (result i32) (local.get $p) (br $out) (br $out) ) ) ) (local.get $p) ) (func $if-unreachable-but-declares-value (param $var$0 i32) (param $var$1 f64) (param $var$2 i32) (param $var$3 f64) (param $var$4 f32) (param $var$5 f32) (result i32) (local $var$6 f64) (if (i32.const 0) (drop (loop $label$3 (result i64) (block $label$4 (result i64) (block $label$5 (block $label$6 (local.set $var$1 (if (result f64) (unreachable) (br $label$5) (f64.const 1) ) ) ) (nop) ) (i64.const 1) ) ) ) ) (i32.const 0) ) (func $if-flow-1 (result i32) (if (i32.const 0) (return (i32.const 1)) (return (i32.const 2)) ) ) (func $if-flow-2 (result i32) (if (i32.const 0) (unreachable) (return (i32.const 2)) ) ) (func $if-flow-3 (result i32) (if (i32.const 0) (return (i32.const 1)) (unreachable) ) ) (func $if-flow-4 (result i32) (if (return (i32.const 0)) (return (i32.const 1)) (return (i32.const 2)) ) ) (func $iff-flow-fuzz-bug (result i32) (loop $label$1 (if (i32.const 1) (loop $label$2 (unreachable) (if ;; a loop that is never reached at the end of a loop (i32.const 0) (nop) (return (i32.const 0) ) ) ) ) (br $label$1) ) ) (func $fuzz-block-unreachable-brs-with-values (result i32) (local $0 i32) (loop $label$1 (result i32) (block $label$2 (result i32) (if (local.get $0) (local.set $0 (loop $label$5 (br_if $label$5 (br_if $label$2 (unreachable) (i32.const 0) ) ) ) ) ) (br $label$1) ) ) ) (func $drop-restructure-if (param $x i32) (param $y i32) (result i32) (block $label$2 (result i32) (drop (br_if $label$2 (local.get $x) (local.get $y) ) ) (i32.const 0) ) ) (func $drop-restructure-if-final (param $x i32) (param $y i32) (result i32) (block $label$2 (result i32) (drop (br_if $label$2 (local.get $x) (local.get $y) ) ) (unreachable) ) ) (func $drop-restructure-if-middle (param $x i32) (param $y i32) (result i32) (block $label$2 (result i32) (drop (br_if $label$2 (local.get $x) (local.get $y) ) ) (nop) ;; the middle (i32.const 0) ) ) (func $drop-restructure-select (param $x i32) (param $y i32) (result i32) (block $label$2 (result i32) (drop (br_if $label$2 (local.tee $y (local.get $x)) (local.get $y) ) ) (i32.const 0) ) ) (func $drop-restructure-if-bad-2 (param $x i32) (param $y i32) (result i32) (block $label$2 (result i32) (drop (br_if $label$2 (local.get $y) (local.tee $y (local.get $x)) ) ) (i32.const 0) ) ) (func $if-block (block $label (if (i32.const 1) (block (drop (i32.const 2)) (drop (i32.const 3)) ) ) ) ) (func $if-block-bad (block $label (if (br $label) ;; use outside of arm (block (drop (i32.const 2)) (drop (i32.const 3)) ) ) ) ) (func $if-block-br (block $label (if (i32.const 1) (br $label) ) ) ) (func $if-block-br-1 (block $label (if (i32.const 1) (br $label) (drop (i32.const 3)) ) ) ) (func $if-block-br-2 (block $label (if (i32.const 1) (drop (i32.const 3)) (br $label) ) ) ) (func $if-block-br-3 (block $label (if (i32.const 1) (br $label) (br $label) ) ) ) (func $if-block-br-4-eithre (block $label (if (i32.const 1) (drop (i32.const 2)) (drop (i32.const 3)) ) ) ) (func $if-block-br-5-value (result i32) (block $label (result i32) (if (result i32) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func $restructure-if-outerType-change (loop $label$1 (br_if $label$1 (block $label$2 (block $label$3 (if (block $label$4 (unreachable) ) (br $label$3) ) ) (unreachable) ) ) ) ) (func $if-arm-unreachable (block $label$1 (if (unreachable) ;; unreachable condition (nop) (unreachable) ) ) ) (func $propagate-type-if-we-optimize (if (i32.const 1) (nop) (block (drop (loop $label$3 (result i64) (br_if $label$3 (block $label$4 (result i32) (if (i32.const 0) (unreachable) (unreachable) ) ) ) (i64.const -9) ) ) (unreachable) ) ) ) (func $switch-to-br (block $A (block $y (br_table $y $y $A $A (i32.const 0) ) ) ) ) (func $switch-to-br-value (result i32) (block $A (result i32) (block $y (result i32) (br_table $A $A $A (i32.const 0) (i32.const 1) ) ) ) ) (func $switch-threading-multi (param $x i32) (param $y i32) (result i32) (block $block$5$break (block $block$4$break (loop $shape$1$continue (block $block$3$break (block $switch$2$case$5 (block $switch$2$case$4 (block $switch$2$default (block $switch$2$case$2 (br_table $switch$2$case$2 $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$case$5 $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$default $switch$2$case$4 $switch$2$default (local.get $x) ) ) (br $shape$1$continue) ) (br $block$3$break) ) ;; switch$2$case$4 (br $block$4$break) ) (br $block$5$break) ) ) (unreachable) ) ;; block$4$break (local.set $y (i32.const 1) ) (unreachable) ) (local.set $y (i32.const 2) ) (unreachable) ) (func $fuzz-type-changes-in-our-cycles (result i32) (loop $label$1 (if (i32.const 0) (block $label$3 (if (i32.const 0) (block (nop) (br $label$3) ) (return (i32.const -8192) ) ) ) ) (br $label$1) ) ) (func $refinalize-need-br-value (result i32) (loop $label$3 (result i32) (block $label$6 (result i32) (block $label$10 (unreachable) (block $label$503 ;; this block will get a value flowing out (br_if $label$3 (block $label$530 (result i32) (br_if $label$503 ;; while this br does not send a value (i32.const 0) ) (i32.const 0) ) ) (return (i32.const 127) ) ) ) ) ) ) (func $selectify (param $x i32) (drop (if (result i32) (i32.eq (local.get $x) (i32.const 1) ) (i32.mul (i32.const 2) (i32.const 3) ) (i32.mul (i32.const 2) (i32.const 3) ) ) ) (drop (if (result i32) (i32.eq (local.get $x) (i32.const 1) ) (i32.add (i32.const 2) (i32.const 3) ) (i32.add (i32.const 2) (i32.const 3) ) ) ) ) (func $selectify-even-with-condition-side-effects (param $0 i32) (drop (if (result i32) (i32.rem_s (local.get $0) (i32.const 2) ) (i32.const 1) (i32.const 0) )) ) (func $no-selectify-when-arm-side-effects (param $0 i32) (drop (if (result i32) (i32.rem_s (local.get $0) (i32.const 2) ) (local.tee $0 (i32.const 1)) (i32.const 0) )) (drop (if (result i32) (i32.rem_s (local.get $0) (i32.const 2) ) (i32.const 0) (local.tee $0 (i32.const 1)) )) ) (func $no-selectify-when-effects-invalidate (param $0 i32) (local $1 i32) (drop (if (result i32) (i32.rem_s (local.tee $0 (i32.const 3)) (i32.const 2) ) (local.get $0) (i32.const 0) )) (drop (if (result i32) (i32.rem_s (local.tee $0 (i32.const 3)) (i32.const 2) ) (i32.const 0) (local.get $0) )) ;; but different locals do not invalidate (drop (if (result i32) (i32.rem_s (local.tee $0 (i32.const 3)) (i32.const 2) ) (i32.const 0) (local.get $1) )) ) (func $if-one-side (result i32) (local $x i32) (local.set $x (if (result i32) (i32.const 1) (i32.const 2) (local.get $x) ) ) (local.get $x) ) (func $if-one-side-b (result i32) (local $x i32) (local.set $x (if (result i32) (i32.const 1) (local.get $x) (i32.const 2) ) ) (local.get $x) ) (func $if-one-side-tee-etc (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $x i32) (local $y i32) (local $z i32) (drop (call $if-one-side-tee-etc (local.tee $x (if (result i32) (i32.const -3) (i32.const -4) (local.get $x) ) ) ) ) (i32.const 0) ) (func $ifs-copies-recursive (param $20 i32) (result i32) (local.set $20 (if (result i32) (i32.const 1) (if (result i32) (i32.const 2) (if (result i32) (i32.const 3) (i32.const 4) (local.get $20) ) (local.get $20) ) (local.get $20) ) ) (local.get $20) ) (func $if-copy1 (local $x i32) (local $y i32) (loop $top (local.set $x (if (result i32) (i32.const 1) (local.get $x) (local.get $y) ) ) (br $top) ) ) (func $if-copy3 (local $x i32) (local $y i32) (loop $top (local.set $x (if (result i32) (i32.const 1) (unreachable) (local.get $x) ) ) (br $top) ) ) (func $if-copy4 (local $x i32) (local $y i32) (loop $top (local.set $x (if (result i32) (i32.const 1) (unreachable) (local.get $y) ) ) (br $top) ) ) (func $if-copy-tee (local $x i32) (local $y i32) (loop $top (drop (local.tee $x (if (result i32) (i32.const 1) (local.get $x) (i32.const 2) ) ) ) (br $top) ) ) (func $loop-end-set (param $x i32) (result i32) (loop $loop (nop) (if (local.get $x) (br $loop) (local.set $x (i32.const 1)) ) ) (local.get $x) ) (func $loop-end-value (param $x i32) (result i32) (loop $loop (result i32) (nop) (if (result i32) (local.get $x) (br $loop) (i32.const 1) ) ) ) (func $do-not-flow-values-through-unreachable-code (result i32) (block (unreachable) (block $A (if (i32.const 0) (return (i32.const 0) ;; seems to flow out, but we are in unreachable code, and do not actually reach anywhere ) (br $A) ;; can be a nop ) ) ) ) (func $do-not-flow-values-through-unreachable-code-b (result i32) (loop (unreachable) (block $A (if (i32.const 0) (return (i32.const 0) ) (br $A) ) ) ) ) (func $if_br_if (local $0 i32) (block $label$1 (if (local.tee $0 ;; note side effect; it's ok (i32.const 1024) ) (br_if $label$1 (i32.eqz (i32.const -4) ) ) ) (if (i32.const 1025) (br_if $label$1 (i32.eqz (i32.const -5) ) ) ) (if (local.tee $0 ;; note side effect; it's ok (i32.const 1025) ) (br_if $label$1 (i32.eqz (i32.const -6) ) ) ) (if (i32.const 1026) (br_if $label$1 (local.tee $0 ;; but here it is *not* ok (i32.const -7) ) ) ) (i32.store (i32.const 1024) (i32.add (local.get $0) (i32.const 1) ) ) ) ) (func $unswitch-reordering (param $x i32) (result i32) (block $label$1 (result i32) (br_table $label$1 (block $label$2 (result i32) (i32.store ;; has a possible side effect (i32.const 1) (i32.const 2) ) (i32.const 3) ) (block (result i32) (if (local.get $x) (return (i32.const 5) ) ) (i32.const 6) ) ) ) ) (func $no-selectify-if-condition-unreachable (result i32) (select (if (result i32) (unreachable) (i32.const 3) (i32.const 4) ) (i32.const 1) (i32.const 2) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_generate-stack-ir_print-stack-ir.txt000066400000000000000000000010301423707623100316530ustar00rootroot00000000000000(module (type $0 (func (param i64))) (func $0 (param $var$0 i64) block $label$1 block $label$2 loop $label$3 block $label$4 unreachable end unreachable end unreachable end unreachable end ) ) (module (type $0 (func (param i64))) (func $0 (; has Stack IR ;) (param $var$0 i64) (block $label$1 (br_if $label$1 (block $label$2 (loop $label$3 (local.tee $var$0 (block $label$4 (unreachable) ) ) ) (unreachable) ) ) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_generate-stack-ir_print-stack-ir.wast000066400000000000000000000005121423707623100320160ustar00rootroot00000000000000(module (type $0 (func (param i64))) (func $0 (; 0 ;) (type $0) (param $var$0 i64) (block $label$1 (br_if $label$1 (block $label$2 (result i32) (loop $label$3 (local.set $var$0 (block $label$4 (result i64) (unreachable) ) ) ) (unreachable) ) ) (nop) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.txt000066400000000000000000000004131423707623100326300ustar00rootroot00000000000000(module (type $i32_=>_f64 (func (param i32) (result f64))) (global $global$3 (mut f64) (f64.const 0)) (func $1 (param $x i32) (result f64) (local $var$0 f64) (block $label$0 (result f64) (local.set $var$0 (f64.const 0) ) (f64.const -3.4) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast000066400000000000000000000006161423707623100327740ustar00rootroot00000000000000(module (global $global$3 (mut f64) (f64.const 0)) (func $1 (param $x i32) (result f64) (local $var$0 f64) (block $label$0 (local.set $var$0 (f64.const 0) ) (if (i32.gt_s (i32.const 9) (i32.const 0) ) (return (f64.const -3.4) ) ) (if (local.get $x) (return (f64.const 5.6) ) ) (return (f64.const 1.2) ) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_shrink-level=1.txt000066400000000000000000000070521423707623100262120ustar00rootroot00000000000000(module (type $2 (func (result i32))) (type $1 (func)) (memory $0 256 256) (func $b14 (result i32) (drop (select (block $block1 (result i32) (i32.const 12) ) (block $block3 (result i32) (i32.const 27) ) (i32.const 1) ) ) (drop (if (result i32) (i32.const 1) (i32.load (i32.const 10) ) (i32.const 27) ) ) (drop (select (i32.rem_s (i32.const 11) (i32.const 12) ) (i32.const 27) (i32.const 1) ) ) (drop (if (result i32) (i32.const 1) (i32.trunc_f64_u (f64.const 12.34) ) (i32.const 27) ) ) (i32.const 0) ) (func $join-br_ifs (block $out (br_if $out (i32.or (i32.const 1) (i32.const 2) ) ) (nop) (br_if $out (i32.const 3) ) ) (block $out2 (block $out3 (br_if $out2 (i32.const 1) ) (br_if $out3 (i32.const 2) ) (br_if $out2 (i32.const 3) ) ) (unreachable) ) (block $out4 (block $out5 (br_if $out4 (i32.const 1) ) (br_if $out5 (i32.or (i32.const 2) (i32.const 3) ) ) (nop) ) (unreachable) ) (block $out6 (block $out7 (br_if $out6 (i32.or (i32.const 1) (i32.const 2) ) ) (nop) (br_if $out7 (i32.const 3) ) ) (unreachable) ) (if (i32.eqz (i32.or (call $b14) (i32.const 0) ) ) (block $out8 (nop) (nop) ) ) (block $out83 (br_if $out83 (i32.const 1) ) (br_if $out83 (call $b14) ) ) ) (func $join-and-it-becomes-unreachable (block $label$1 (block $block (br_if $label$1 (i32.load8_u (i32.const -93487262) ) ) (br_if $label$1 (loop $label$5 (br $label$5) ) ) ) ) ) (func $br-if-unreachable-pair (block $label$14 (br_if $label$14 (unreachable) ) (br_if $label$14 (i32.const 0) ) ) ) (func $br-if-unreachable-pair2 (block $label$14 (br_if $label$14 (i32.const 0) ) (br_if $label$14 (unreachable) ) ) ) (func $simple-switch (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $A $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) (func $simple-switch-2 (result i32) (local $0 i32) (block $A (block $B (block $y (br_if $A (i32.or (i32.eqz (local.tee $0 (i32.const 0) ) ) (i32.eq (local.get $0) (i32.const 12) ) ) ) (nop) (br $y) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) (func $simple-switch-3 (result i32) (local $0 i32) (block $A (block $B (block $y (br_if $A (i32.eqz (local.tee $0 (i32.const 0) ) ) ) (br_if $B (i32.eq (local.get $0) (i32.const 1025) ) ) (br $y) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) (func $simple-switch-4 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $A $y $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0) ) ) (return (i32.const 1) ) ) (return (i32.const 2) ) ) (i32.const 3) ) ) binaryen-version_108/test/passes/remove-unused-brs_shrink-level=1.wast000066400000000000000000000152461423707623100263550ustar00rootroot00000000000000(module (memory 256 256) (type $0 (func (param i32))) (type $1 (func)) (type $2 (func (result i32))) (func $b14 (type $2) (drop (if (result i32) ;; with shrinking, this can become a select (i32.const 1) (block $block1 (result i32) (i32.const 12) ) (block $block3 (result i32) (i32.const 27) ) ) ) (drop (if (result i32) (i32.const 1) (i32.load (i32.const 10)) ;; load may have side effects, unless ignored (i32.const 27) ) ) (drop (if (result i32) (i32.const 1) (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored (i32.const 27) ) ) (drop (if (result i32) (i32.const 1) (i32.trunc_f64_u (f64.const 12.34)) ;; float to int may have side effects, unless ignored (i32.const 27) ) ) (i32.const 0) ) (func $join-br_ifs (block $out (br_if $out (i32.const 1)) (br_if $out (i32.const 2)) (br_if $out (i32.const 3)) ) (block $out2 (block $out3 (br_if $out2 (i32.const 1)) (br_if $out3 (i32.const 2)) (br_if $out2 (i32.const 3)) ) (unreachable) ) (block $out4 (block $out5 (br_if $out4 (i32.const 1)) (br_if $out5 (i32.const 2)) (br_if $out5 (i32.const 3)) ) (unreachable) ) (block $out6 (block $out7 (br_if $out6 (i32.const 1)) (br_if $out6 (i32.const 2)) (br_if $out7 (i32.const 3)) ) (unreachable) ) (block $out8 (br_if $out8 (call $b14)) ;; side effect (br_if $out8 (i32.const 0)) ) (block $out8 (br_if $out8 (i32.const 1)) (br_if $out8 (call $b14)) ;; side effect ) ) (func $join-and-it-becomes-unreachable (block $label$1 (block (br_if $label$1 (i32.load8_u (i32.const -93487262) ) ) (br_if $label$1 (loop $label$5 ;; this is unreachable (infinite loop, no exit) (br $label$5) ) ) ) ) ) (func $br-if-unreachable-pair (block $label$14 (br_if $label$14 (unreachable) ) (br_if $label$14 (i32.const 0) ) ) ) (func $br-if-unreachable-pair2 (block $label$14 (br_if $label$14 (i32.const 0) ) (br_if $label$14 (unreachable) ) ) ) (func $simple-switch (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $A $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) (func $simple-switch-2 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $y $y $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) (func $simple-switch-3 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $y $B $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) (func $simple-switch-4 (result i32) (block $A (block $B (block $y (br_table $A $y $y $y $y $y $A $y $y $y $y $y $A $y (i32.const 0) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (return (i32.const 2)) ) (return (i32.const 3)) ) ) binaryen-version_108/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt000066400000000000000000000030571423707623100325150ustar00rootroot00000000000000(module (type $2 (func (result i32))) (type $1 (func)) (memory $0 256 256) (func $b14 (result i32) (drop (select (block $block1 (result i32) (i32.const 12) ) (block $block3 (result i32) (i32.const 27) ) (i32.const 1) ) ) (drop (select (i32.load (i32.const 10) ) (i32.const 27) (i32.const 1) ) ) (drop (select (i32.rem_s (i32.const 11) (i32.const 12) ) (i32.const 27) (i32.const 1) ) ) (drop (select (i32.trunc_f64_u (f64.const 12.34) ) (i32.const 27) (i32.const 1) ) ) (i32.const 0) ) (func $join-br_ifs (block $out (br_if $out (i32.or (i32.const 1) (i32.const 2) ) ) (nop) (br_if $out (i32.const 3) ) ) (block $out2 (block $out3 (br_if $out2 (i32.const 1) ) (br_if $out3 (i32.const 2) ) (br_if $out2 (i32.const 3) ) ) (unreachable) ) (block $out4 (block $out5 (br_if $out4 (i32.const 1) ) (br_if $out5 (i32.or (i32.const 2) (i32.const 3) ) ) (nop) ) (unreachable) ) (block $out6 (block $out7 (br_if $out6 (i32.or (i32.const 1) (i32.const 2) ) ) (nop) (br_if $out7 (i32.const 3) ) ) (unreachable) ) (if (i32.eqz (i32.or (call $b14) (i32.const 0) ) ) (block $out8 (nop) (nop) ) ) (block $out83 (br_if $out83 (i32.const 1) ) (br_if $out83 (call $b14) ) ) ) ) binaryen-version_108/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast000066400000000000000000000034711423707623100326540ustar00rootroot00000000000000(module (memory 256 256) (type $0 (func (param i32))) (type $1 (func)) (type $2 (func (result i32))) (func $b14 (type $2) (drop (if (result i32) ;; with shrinking, this can become a select (i32.const 1) (block $block1 (result i32) (i32.const 12) ) (block $block3 (result i32) (i32.const 27) ) ) ) (drop (if (result i32) (i32.const 1) (i32.load (i32.const 10)) ;; load may have side effects, unless ignored (i32.const 27) ) ) (drop (if (result i32) (i32.const 1) (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored (i32.const 27) ) ) (drop (if (result i32) (i32.const 1) (i32.trunc_f64_u (f64.const 12.34)) ;; float to int may have side effects, unless ignored (i32.const 27) ) ) (i32.const 0) ) (func $join-br_ifs (block $out (br_if $out (i32.const 1)) (br_if $out (i32.const 2)) (br_if $out (i32.const 3)) ) (block $out2 (block $out3 (br_if $out2 (i32.const 1)) (br_if $out3 (i32.const 2)) (br_if $out2 (i32.const 3)) ) (unreachable) ) (block $out4 (block $out5 (br_if $out4 (i32.const 1)) (br_if $out5 (i32.const 2)) (br_if $out5 (i32.const 3)) ) (unreachable) ) (block $out6 (block $out7 (br_if $out6 (i32.const 1)) (br_if $out6 (i32.const 2)) (br_if $out7 (i32.const 3)) ) (unreachable) ) (block $out8 (br_if $out8 (call $b14)) ;; side effect (br_if $out8 (i32.const 0)) ) (block $out8 (br_if $out8 (i32.const 1)) (br_if $out8 (call $b14)) ;; side effect ) ) ) binaryen-version_108/test/passes/remove-unused-module-elements_all-features.txt000066400000000000000000000122031423707623100303200ustar00rootroot00000000000000(module (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (param i32) (result i32))) (memory $0 0) (table $0 1 1 funcref) (elem (i32.const 0) $called_indirect) (export "memory" (memory $0)) (export "exported" (func $exported)) (export "other1" (func $other1)) (export "other2" (func $other2)) (start $start) (func $start (call $called0) ) (func $called0 (call $called1) ) (func $called1 (nop) ) (func $called_indirect (nop) ) (func $exported (call $called2) ) (func $called2 (call $called2) (call $called3) ) (func $called3 (call $called4) ) (func $called4 (call $called3) ) (func $other1 (param $0 i32) (call_indirect $0 (type $0) (i32.const 0) ) (call_indirect $0 (type $0) (i32.const 0) ) (call_indirect $0 (type $0) (i32.const 0) ) (call_indirect $0 (type $0) (i32.const 0) ) (call_indirect $0 (type $1) (i32.const 0) (i32.const 0) ) (call_indirect $0 (type $1) (i32.const 0) (i32.const 0) ) (drop (call_indirect $0 (type $2) (i32.const 0) (i32.const 0) ) ) (drop (call_indirect $0 (type $2) (i32.const 0) (i32.const 0) ) ) (drop (call_indirect $0 (type $2) (i32.const 0) (i32.const 0) ) ) ) (func $other2 (param $0 i32) (unreachable) ) ) (module ) (module ) (module (type $none_=>_none (func)) (import "env" "table2" (table $1 1 1 funcref)) (elem (i32.const 0) $f) (func $f (nop) ) ) (module ) (module ) (module (import "env" "memory" (memory $0 256)) (import "env" "table" (table $timport$0 1 funcref)) (export "mem" (memory $0)) (export "tab" (table $timport$0)) ) (module (type $none_=>_none (func)) (import "env" "memory" (memory $0 256)) (data (i32.const 1) "hello, world!") (import "env" "table" (table $timport$0 1 funcref)) (elem (i32.const 0) $waka) (func $waka (nop) ) ) (module (type $0 (func)) (import "env" "memory" (memory $0 256)) (import "env" "table" (table $timport$0 0 funcref)) (export "user" (func $user)) (func $user (drop (i32.load (i32.const 0) ) ) (call_indirect $timport$0 (type $0) (i32.const 0) ) ) ) (module (type $none_=>_none (func)) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (i32.store (i32.const 0) (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (result i32) (i32.atomic.rmw.add (i32.const 0) (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (result i32) (i32.atomic.rmw8.cmpxchg_u (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (module (type $none_=>_none (func)) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (local $0 i32) (local $1 i64) (drop (memory.atomic.wait32 (local.get $0) (local.get $0) (local.get $1) ) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (result i32) (memory.atomic.notify (i32.const 0) (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 23 256) (export "user" (func $user)) (func $user (result i32) (memory.grow (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $0 256)) (export "user" (func $user)) (func $user (result i32) (memory.grow (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 23 256) (export "user" (func $user)) (func $user (result i32) (memory.size) ) ) (module (type $none_=>_none (func)) (import "env" "memory" (memory $0 256)) (data (global.get $memoryBase) "hello, world!") (import "env" "table" (table $timport$0 0 funcref)) (import "env" "memoryBase" (global $memoryBase i32)) (import "env" "tableBase" (global $tableBase i32)) (elem (global.get $tableBase) $waka) (func $waka (nop) ) ) (module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "imported" (global $imported i32)) (import "env" "_puts" (func $_puts (param i32) (result i32))) (global $int (mut i32) (global.get $imported)) (global $set (mut i32) (i32.const 100)) (global $exp_glob i32 (i32.const 600)) (export "one" (func $one)) (export "three" (func $three)) (export "exp_glob" (global $exp_glob)) (func $one (result i32) (call $two) ) (func $two (result i32) (global.get $int) ) (func $three (call $four) ) (func $four (global.set $set (i32.const 200) ) (drop (call $_puts (i32.const 300) ) ) ) ) (module ) (module (type $none_=>_none (func)) (start $starter) (func $starter (drop (i32.const 0) ) ) ) (module (type $none_=>_none (func)) (import "env" "start" (func $start)) (start $start) ) (module ) (module ) (module (type $0 (func (param f64) (result f64))) (import "env" "table" (table $timport$0 6 6 funcref)) (elem (i32.const 0) $0) (func $0 (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (f64.const 1) (f64.const 0) ) ) ) binaryen-version_108/test/passes/remove-unused-module-elements_all-features.wast000066400000000000000000000161311423707623100304630ustar00rootroot00000000000000(module (memory 0) (start $start) (type $0 (func)) (type $0-dupe (func)) (type $1 (func (param i32))) (type $1-dupe (func (param i32))) (type $2 (func (param i32) (result i32))) (type $2-dupe (func (param i32) (result i32))) (type $2-thrupe (func (param i32) (result i32))) (export "memory" (memory $0)) (export "exported" $exported) (export "other1" $other1) (export "other2" $other2) (table 1 1 funcref) (elem (i32.const 0) $called_indirect) (func $start (type $0) (call $called0) ) (func $called0 (type $0) (call $called1) ) (func $called1 (type $0) (nop) ) (func $called_indirect (type $0) (nop) ) (func $exported (type $0-dupe) (call $called2) ) (func $called2 (type $0-dupe) (call $called2) (call $called3) ) (func $called3 (type $0-dupe) (call $called4) ) (func $called4 (type $0-dupe) (call $called3) ) (func $remove0 (type $0-dupe) (call $remove1) ) (func $remove1 (type $0-dupe) (nop) ) (func $remove2 (type $0-dupe) (call $remove2) ) (func $remove3 (type $0) (call $remove4) ) (func $remove4 (type $0) (call $remove3) ) (func $other1 (type $1) (param i32) (call_indirect (type $0) (i32.const 0)) (call_indirect (type $0) (i32.const 0)) (call_indirect (type $0-dupe) (i32.const 0)) (call_indirect (type $0-dupe) (i32.const 0)) (call_indirect (type $1) (i32.const 0) (i32.const 0)) (call_indirect (type $1-dupe) (i32.const 0) (i32.const 0)) (drop (call_indirect (type $2) (i32.const 0) (i32.const 0))) (drop (call_indirect (type $2-dupe) (i32.const 0) (i32.const 0))) (drop (call_indirect (type $2-thrupe) (i32.const 0) (i32.const 0))) ) (func $other2 (type $1-dupe) (param i32) (unreachable) ) ) (module ;; remove the table and memory (import "env" "memory" (memory $0 256)) (import "env" "table" (table 0 funcref)) ) (module ;; remove all tables and the memory (import "env" "memory" (memory $0 256)) (import "env" "table" (table 0 funcref)) (import "env" "table2" (table $1 1 2 funcref)) (elem (table $1) (offset (i32.const 0)) func) (elem (table $1) (offset (i32.const 1)) func) ) (module ;; remove the first table and memory, but not the second one (import "env" "memory" (memory $0 256)) (import "env" "table" (table 0 funcref)) (import "env" "table2" (table $1 1 1 funcref)) (elem (table $1) (offset (i32.const 0)) func) (elem (table $1) (offset (i32.const 0)) func $f) (func $f) ) (module ;; also when not imported (memory 256) (table 1 funcref) ) (module ;; also with multiple tables (memory 256) (table $0 1 funcref) (table $1 1 funcref) (elem (table $1) (i32.const 0) func) ) (module ;; but not when exported (import "env" "memory" (memory $0 256)) (import "env" "table" (table 1 funcref)) (export "mem" (memory 0)) (export "tab" (table 0)) ) (module ;; and not when there are segments (import "env" "memory" (memory $0 256)) (import "env" "table" (table 1 funcref)) (data (i32.const 1) "hello, world!") (elem (i32.const 0) $waka) (func $waka) ) (module ;; and not when used (type $0 (func)) (import "env" "memory" (memory $0 256)) (import "env" "table" (table 0 funcref)) (export "user" $user) (func $user (drop (i32.load (i32.const 0))) (call_indirect (type $0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (i32.store (i32.const 0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (result i32) (i32.atomic.rmw.add (i32.const 0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (result i32) (i32.atomic.rmw8.cmpxchg_u (i32.const 0) (i32.const 0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (local $0 i32) (local $1 i64) (drop (memory.atomic.wait32 (local.get $0) (local.get $0) (local.get $1) ) ) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (result i32) (memory.atomic.notify (i32.const 0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 23 256) (export "user" $user) (func $user (result i32) (memory.grow (i32.const 0)) ) ) (module ;; more use checks (import "env" "memory" (memory $0 256)) (export "user" $user) (func $user (result i32) (memory.grow (i32.const 0)) ) ) (module ;; more use checks (memory $0 23 256) (export "user" $user) (func $user (result i32) (memory.size) ) ) (module (import "env" "memory" (memory $0 256)) (import "env" "table" (table 0 funcref)) (import "env" "memoryBase" (global $memoryBase i32)) ;; used in init (import "env" "tableBase" (global $tableBase i32)) ;; used in init (data (global.get $memoryBase) "hello, world!") (elem (global.get $tableBase) $waka) (func $waka) ;; used in table ) (module ;; one is exported, and one->two->int global, whose init->imported (import "env" "imported" (global $imported i32)) (import "env" "forgetme" (global $forgetme i32)) (import "env" "_puts" (func $_puts (param i32) (result i32))) (import "env" "forget_puts" (func $forget_puts (param i32) (result i32))) (global $int (mut i32) (global.get $imported)) (global $set (mut i32) (i32.const 100)) (global $forglobal.get (mut i32) (i32.const 500)) (global $exp_glob i32 (i32.const 600)) (export "one" (func $one)) (export "three" (func $three)) (export "exp_glob" (global $exp_glob)) (start $starter) (func $one (result i32) (call $two) ) (func $two (result i32) (global.get $int) ) (func $three (call $four) ) (func $four (global.set $set (i32.const 200)) (drop (call $_puts (i32.const 300))) ) (func $forget_implemented (nop) ) (func $starter (nop) ) ) (module ;; empty start being removed (start $starter) (func $starter (nop) ) ) (module ;; non-empty start being kept (start $starter) (func $starter (drop (i32.const 0)) ) ) (module ;; imported start cannot be removed (import "env" "start" (func $start)) (start $start) ) (module ;; the function and the table can be removed (type $0 (func (param f64) (result f64))) (table 6 6 funcref) (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (f64.const 1) (f64.const 0) ) ) ) (module ;; the function uses the table, but all are removeable (type $0 (func (param f64) (result f64))) (table 6 6 funcref) (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (call_indirect (type $0) (f64.const 1) (i32.const 0)) (f64.const 0) ) ) ) (module ;; the table is imported - we can't remove it (type $0 (func (param f64) (result f64))) (import "env" "table" (table 6 6 funcref)) (elem (i32.const 0) $0) (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (f64.const 1) (f64.const 0) ) ) ) binaryen-version_108/test/passes/remove-unused-names.txt000066400000000000000000000022321423707623100236610ustar00rootroot00000000000000(module (type $1 (func)) (type $0 (func (param i32) (result i32))) (type $none_=>_i32 (func (result i32))) (memory $0 256 256) (func $b0 (param $i1 i32) (result i32) (i32.const 0) ) (func $loops (block $out (loop $in (br $out) (br $in) ) ) (loop $in0 (br $in0) ) (nop) (block $out4 (loop $in5 (br $out4) (br $in5) ) ) (block $out6 (loop $in7 (br $out6) (br $in7) ) ) (loop $in8 (block $out9 (br $out9) (br $in8) ) ) (loop $in10 (block $out11 (br $out11) (br $in10) ) ) (block $out12 (loop $in13 (br $out12) (br $in13) ) ) ) (func $merges (block $b (br $b) (br $b) ) (block $b15 (br_table $b15 $b15 (i32.const 3) ) ) (block $b17 (br_table $b17 $b17 (i32.const 3) ) ) ) (func $merge-typed-with-unreachable-child (result i32) (local $0 f32) (block $label$1 (result i32) (br_if $label$1 (i32.const 1) (br_if $label$1 (i32.const 0) (br $label$1 (i32.const 0) ) ) ) ) ) (func $loop-with-child-of-other-type (drop (loop (result i32) (unreachable) ) ) ) ) binaryen-version_108/test/passes/remove-unused-names.wast000066400000000000000000000032341423707623100240230ustar00rootroot00000000000000(module (memory 256 256) (type $0 (func (param i32) (result i32))) (type $1 (func)) (func $b0 (type $0) (param $i1 i32) (result i32) (block $topmost (result i32) (i32.const 0) ) ) (func $loops (type $1) (block $out (loop $in (br $out) (br $in) ) ) (loop $in (br $in) ) (loop $in (nop) ) (block $out (loop $in (block $out (loop $in (br $out) (br $in) ) ) ) ) (block $out (loop $in (br $out) (br $in) ) ) (loop $in (block $out (br $out) (br $in) ) ) (loop $in (block $out (br $out) (br $in) ) ) (block $out (loop $in (br $out) (br $in) ) ) ) (func $merges (type $1) (block $a (block $b (br $a) (br $b) ) ) (block $a (block $b (br_table $a $b (i32.const 3) ) ) ) (block $a (block $b (br_table $b $a (i32.const 3) ) ) ) ) (func $merge-typed-with-unreachable-child (result i32) (local $0 f32) (block $label$0 (result i32) (block $label$1 (result i32) (br_if $label$1 (i32.const 1) (br_if $label$0 (i32.const 0) (br $label$0 (i32.const 0) ) ) ) ) ) ) (func $loop-with-child-of-other-type (drop (loop (result i32) ;; the loop has no name, but can't be replaced by the child (block $l ;; as the type differs (unreachable) ) ) ) ) ) binaryen-version_108/test/passes/remove-unused-names_code-folding.txt000066400000000000000000000521461423707623100263040ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (func $ifs (if (i32.const 0) (nop) ) (block (drop (i32.const 0) ) (nop) ) (if (i32.const 0) (nop) (unreachable) ) (drop (block (result i32) (drop (i32.const 0) ) (i32.add (i32.const 1) (i32.const 2) ) ) ) (drop (if (result i32) (i32.const 0) (i32.add (i32.const 1) (i32.const 2) ) (i32.add (i32.const 1) (i32.const 333333333) ) ) ) ) (func $ifs-blocks (block (drop (i32.const 0) ) (block (nop) ) ) (block (if (i32.const 0) (unreachable) (block ) ) (nop) ) (block (if (i32.const 0) (block ) (unreachable) ) (nop) ) (if (i32.const 0) (block (nop) (unreachable) ) (nop) ) (if (i32.const 0) (nop) (block (nop) (unreachable) ) ) ) (func $ifs-blocks-big (block (drop (i32.const 0) ) (block (drop (i32.add (i32.const 1) (i32.const 2) ) ) ) ) (block (if (i32.const 0) (unreachable) (block ) ) (drop (i32.add (i32.const 1) (i32.const 2) ) ) ) (block (if (i32.const 0) (block ) (unreachable) ) (drop (i32.add (i32.const 1) (i32.const 2) ) ) ) (if (i32.const 0) (block (drop (i32.add (i32.const 1) (i32.const 2) ) ) (unreachable) ) (drop (i32.add (i32.const 1) (i32.const 2) ) ) ) (if (i32.const 0) (drop (i32.add (i32.const 1) (i32.const 2) ) ) (block (drop (i32.add (i32.const 1) (i32.const 2) ) ) (unreachable) ) ) ) (func $ifs-blocks-long (block (if (i32.const 1) (block (drop (i32.const -1234) ) (drop (i32.const -1000) ) ) (drop (i32.const 999) ) ) (drop (i32.const 1) ) (nop) (unreachable) ) (drop (block (result i32) (if (i32.const 2) (block (drop (i32.const -1234) ) (drop (i32.const -1000) ) ) (drop (i32.const 999) ) ) (drop (i32.const 1) ) (nop) (unreachable) (i32.const 2) ) ) (drop (block (result i32) (if (i32.const 3) (block (drop (i32.const -1234) ) (drop (i32.const -1000) ) ) (drop (i32.const 999) ) ) (drop (i32.const 1) ) (nop) (i32.const 2) ) ) ) (func $if-worth-it-i-dunno (block $folding-inner0 (block (if (i32.const 0) (if (i32.const 0) (block (drop (i32.const -1234) ) (drop (i32.const -1000) ) (br $folding-inner0) ) (block (drop (i32.const 999) ) (drop (i32.const 1) ) (br $folding-inner0) ) ) ) (if (i32.const 0) (block (if (i32.const 0) (block (drop (i32.const -1234) ) (drop (i32.const -1000) ) ) (block (drop (i32.const 999) ) (drop (i32.const 1) ) ) ) (unreachable) (br $folding-inner0) ) ) (if (i32.const 0) (block (if (i32.const 0) (block ) (block (drop (i32.const 999) ) (drop (i32.const 1) ) ) ) (br $folding-inner0) ) ) (if (i32.const 0) (block (if (i32.const 0) (block (drop (i32.const -1234) ) (drop (i32.const -1000) ) ) (block ) ) (br $folding-inner0) ) ) (block (block (if (i32.const 9999) (block (drop (i32.const -51234) ) (drop (i32.const -51000) ) ) (block (drop (i32.const 5999) ) (drop (i32.const 51) ) ) ) (br $folding-inner0) ) ) (drop (block (result i32) (block (result i32) (if (i32.const 9999) (block (drop (i32.const -51234) ) (drop (i32.const -51000) ) ) (block (drop (i32.const 5999) ) (drop (i32.const 51) ) ) ) (unreachable) (i32.const 10) ) ) ) (block (drop (if (result i32) (i32.const 9999) (block (result i32) (drop (i32.const -51234) ) (drop (i32.const -51000) ) (unreachable) (i32.const 10) ) (block (result i32) (drop (i32.const 5999) ) (drop (i32.const 51) ) (unreachable) (i32.const 10) ) ) ) ) ) ) (unreachable) (unreachable) ) (func $no-grandparent (if (i32.const 9999) (block (drop (i32.const -51234) ) (drop (i32.const -51000) ) (unreachable) (unreachable) ) (block (drop (i32.const 5999) ) (drop (i32.const 51) ) (unreachable) (unreachable) ) ) ) (func $yes-grandparent (block (if (i32.const 9999) (block (drop (i32.const -51234) ) (drop (i32.const -51000) ) ) (block (drop (i32.const 5999) ) (drop (i32.const 51) ) ) ) (unreachable) (unreachable) ) ) (func $ifs-named-block (param $x i32) (param $y i32) (result i32) (block $out (block $out2 (block (drop (local.get $x) ) (block (br_if $out (local.get $y) ) (nop) ) ) (block (if (local.get $x) (br_if $out (local.get $y) ) (br_if $out2 (local.get $y) ) ) (nop) ) (if (i32.const 1234) (if (local.get $x) (block (nop) (br_if $out (local.get $y) ) (nop) ) (block (nop) (br_if $out2 (local.get $y) ) (nop) ) ) ) (if (local.get $x) (block $left (br_if $left (local.get $y) ) (nop) ) (block (br_if $out (local.get $y) ) (nop) ) ) (if (local.get $x) (block (br_if $out (local.get $y) ) (nop) ) (block $right (br_if $right (local.get $y) ) (nop) ) ) ) (return (i32.const 10) ) ) (return (i32.const 20) ) ) (func $block (block $x (if (i32.const 0) (br $x) ) (if (i32.const 0) (br $x) ) (br $x) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (func $block2 (block $x (if (i32.const 0) (block (drop (i32.const 1) ) (drop (i32.const 333333) ) (br $x) ) ) (if (i32.const 0) (block (drop (i32.const 1) ) (drop (i32.const 2) ) (br $x) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) (br $x) ) ) (func $block3 (block $x (if (i32.const 0) (block (drop (i32.const 1000) ) (br $x) ) ) (if (i32.const 0) (block (drop (i32.const 2000) ) (drop (i32.const 3000) ) (br $x) ) ) (drop (i32.const 4000) ) (drop (i32.const 5000) ) (drop (i32.const 6000) ) (br $x) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (func $mixture (block $out (block (drop (i32.const 1) ) (block (drop (i32.const 2) ) (nop) (nop) (nop) (nop) (nop) (nop) (br $out) ) ) ) (block $out2 (block (if (i32.const 1) (drop (i32.const 3) ) (block (drop (i32.const 4) ) (drop (i32.const 5) ) ) ) (drop (i32.const 2) ) (nop) (nop) (nop) (nop) (nop) (nop) (br $out2) ) ) (block (block $out3 (block (drop (i32.const 1) ) (block (br $out3) ) ) (block (drop (i32.const 1) ) (block (br $out3) ) ) (br $out3) ) (drop (i32.const 2) ) (nop) (nop) (nop) (nop) (nop) (nop) ) ) (func $block-corners (block (block $x (if (i32.const 0) (br $x) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (drop (block $y (result i32) (if (i32.const 0) (block (drop (i32.const 1) ) (drop (i32.const 2) ) (br $y (i32.const 3) ) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) (br $y (i32.const 3) ) ) ) (drop (block $z (result i32) (if (i32.const 0) (block (drop (i32.const 1) ) (drop (i32.const 2) ) (br $z (i32.const 2) ) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) (i32.const 3) ) ) (block $w (if (i32.const 0) (block (drop (i32.const 1) ) (drop (i32.const 2) ) (br_if $w (i32.const 3) ) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (block $x1 (if (i32.const 0) (block (drop (i32.const 1) ) (drop (i32.const 2) ) (br $x1) (nop) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (block $side (block $x2 (br_table $x2 $side (i32.const 0) ) (if (i32.const 0) (block (drop (i32.const 1) ) (drop (i32.const 2) ) (br $x2) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (block $x3 (br_table $side $x3 (i32.const 0) ) (if (i32.const 0) (block (drop (i32.const 1) ) (drop (i32.const 2) ) (br $x3) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) ) ) (func $terminating (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) ) (return) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) (func $terminating-unreachable (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) (unreachable) ) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) (func $terminating-value (result i32) (block $folding-inner0 (return (block (result i32) (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) (i32.const 4) ) ) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) (func $terminating-just-2 (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (drop (i32.const 10) ) (unreachable) ) ) ) (return) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) (func $terminating-shortness (block $folding-inner1 (block (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner1) ) (if (i32.const 3) (block (drop (i32.const 10) ) (br $folding-inner0) ) ) ) (return) ) (nop) (br $folding-inner1) ) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) (func $terminating-multiple-separate (block $folding-inner1 (block (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 1) (br $folding-inner1) ) (if (i32.const 1) (br $folding-inner1) ) ) (return) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (drop (i32.const 1) ) (unreachable) ) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (drop (i32.const 2) ) (unreachable) ) (func $terminating-just-worth-it (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) ) (return) ) (nop) (nop) (nop) (unreachable) ) (func $terminating-not-worth-it (if (i32.const 1) (block (nop) (nop) (unreachable) ) ) (if (i32.const 2) (block (nop) (nop) (unreachable) ) ) (if (i32.const 3) (block (nop) (nop) (unreachable) ) ) ) (func $terminating-return (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) ) (return) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (return) ) (func $terminating-return-value (result i32) (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) (if (i32.const 3) (block (nop) (return (i32.add (i32.const 111111111) (i32.const 2222222) ) ) ) ) (return (i32.const 1234) ) ) ) (nop) (return (i32.add (i32.const 1) (i32.const 2) ) ) ) (func $terminating-fallthrough-value (result i32) (block $folding-inner0 (return (block (result i32) (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) (if (i32.const 3) (block (nop) (return (i32.add (i32.const 111111111) (i32.const 2222222) ) ) ) ) (i32.const 1234) ) ) ) (nop) (return (i32.add (i32.const 1) (i32.const 2) ) ) ) (func $big-return (result i32) (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) (if (i32.const 4) (br $folding-inner0) ) (if (i32.const 5) (br $folding-inner0) ) (if (i32.const 6) (br $folding-inner0) ) (unreachable) ) ) (return (i32.add (i32.const 1) (i32.const 2) ) ) ) (func $return-mix (result i32) (block $folding-inner0 (block (if (i32.const 1) (br $folding-inner0) ) (if (i32.const 2) (br $folding-inner0) ) (if (i32.const 3) (br $folding-inner0) ) (if (i32.const 4) (br $folding-inner0) ) (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 234567) ) ) ) (br $folding-inner0) ) ) (return (i32.add (i32.const 1) (i32.const 2) ) ) ) (func $just-unreachable (unreachable) ) (func $just-return (result i32) (return (i32.add (i32.const 1) (i32.const 2) ) ) ) (func $drop-if-with-value-but-unreachable (if (i32.const 0) (nop) ) (block (drop (i32.const 0) ) (block (nop) ) ) (if (i32.const 0) (nop) (unreachable) ) (nop) (drop (block (result i32) (drop (unreachable) ) (block (result i32) (i32.add (i32.const 1) (i32.const 2) ) ) ) ) (drop (if (result i32) (i32.const 0) (i32.add (i32.const 1) (i32.const 2) ) (i32.add (i32.const 1) (i32.const 333333333) ) ) ) ) (func $nested-control-flow (block $out (block (block $x (if (i32.const 0) (br $x) ) (if (i32.const 0) (br $x) ) (br $x) ) (if (i32.const 1) (br $out) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (drop (i32.const 3) ) ) ) (func $nested-control-flow-dangerous (block $folding-inner0 (block $out (block (if (i32.const 0) (block (if (i32.const 1) (br $out) ) (br $folding-inner0) ) ) (if (i32.const 0) (block (if (i32.const 1) (br $out) ) (br $folding-inner0) ) ) (if (i32.const 1) (br $out) ) (br $folding-inner0) ) (drop (i32.const 3) ) ) (return) ) (drop (i32.const 1) ) (drop (i32.const 2) ) (return) ) (func $nested-control-flow-dangerous-but-ok (block $folding-inner0 (block (block $middle (block (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1) ) (br $middle) ) (br $folding-inner0) ) ) (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1) ) (br $middle) ) (br $folding-inner0) ) ) (if (i32.add (i32.const 0) (i32.const 1) ) (br $middle) ) (br $folding-inner0) ) ) (drop (i32.const 3) ) ) (return) ) (drop (i32.const 1) ) (drop (i32.const 2) ) (return) ) (func $nested-control-flow-dangerous-but-ok-b (block $out (block $middle (block (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1) ) (br $middle) ) (br $out) ) ) (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1) ) (br $middle) ) (br $out) ) ) (if (i32.add (i32.const 0) (i32.const 1) ) (br $middle) ) ) ) (unreachable) ) (drop (i32.const 1) ) (drop (i32.const 2) ) (drop (i32.const 3) ) (drop (i32.const 4) ) (drop (i32.const 1) ) (drop (i32.const 2) ) (drop (i32.const 3) ) (drop (i32.const 4) ) ) (func $nested-control-flow-dangerous-but-ok-c (block $x (block (block $out (block (if (i32.const 0) (br $out) ) (if (i32.const 0) (br $out) ) (br $out) ) (unreachable) ) (if (i32.add (i32.const 0) (i32.const 1) ) (br $x) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (unreachable) ) (drop (i32.const 5) ) ) (func $nested-control-flow-dangerous-but-ok-d (block (block $out (block (if (i32.const 0) (br $out) ) (if (i32.const 0) (br $out) ) (br $out) ) ) (block $x (if (i32.add (i32.const 0) (i32.const 1) ) (br $x) ) ) (drop (i32.const 1) ) (drop (i32.const 2) ) ) (drop (i32.const 3) ) ) (func $if-suffix (param $x i32) (result i32) (block (if (local.get $x) (block ) (drop (call $if-suffix (i32.const -1) ) ) ) (local.set $x (i32.const 1) ) ) (block (result i32) (if (local.get $x) (block ) (drop (call $if-suffix (i32.const -2) ) ) ) (i32.const 2) ) ) ) binaryen-version_108/test/passes/remove-unused-names_code-folding.wast000066400000000000000000000662341423707623100264460ustar00rootroot00000000000000(module (func $ifs (if (i32.const 0) (nop)) (if (i32.const 0) (nop) (nop)) (if (i32.const 0) (nop) (unreachable)) (drop (if (result i32) (i32.const 0) (i32.add (i32.const 1) (i32.const 2)) (i32.add (i32.const 1) (i32.const 2)) ) ) (drop (if (result i32) (i32.const 0) (i32.add (i32.const 1) (i32.const 2)) (i32.add (i32.const 1) (i32.const 333333333)) ) ) ) (func $ifs-blocks (if (i32.const 0) (block (nop) ) (block (nop) ) ) (if (i32.const 0) (block (unreachable) (nop) ) (block (nop) ) ) (if (i32.const 0) (block (nop) ) (block (unreachable) (nop) ) ) (if (i32.const 0) (block (nop) (unreachable) ) (block (nop) ) ) (if (i32.const 0) (block (nop) ) (block (nop) (unreachable) ) ) ) (func $ifs-blocks-big (if (i32.const 0) (block (drop (i32.add (i32.const 1) (i32.const 2))) ) (block (drop (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 0) (block (unreachable) (drop (i32.add (i32.const 1) (i32.const 2))) ) (block (drop (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 0) (block (drop (i32.add (i32.const 1) (i32.const 2))) ) (block (unreachable) (drop (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 0) (block (drop (i32.add (i32.const 1) (i32.const 2))) (unreachable) ) (block (drop (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 0) (block (drop (i32.add (i32.const 1) (i32.const 2))) ) (block (drop (i32.add (i32.const 1) (i32.const 2))) (unreachable) ) ) ) (func $ifs-blocks-long (if (i32.const 1) (block (drop (i32.const -1234)) (drop (i32.const -1000)) (drop (i32.const 1)) (nop) (unreachable) ) (block (drop (i32.const 999)) (drop (i32.const 1)) (nop) (unreachable) ) ) (drop (if (result i32) (i32.const 2) (block (result i32) (drop (i32.const -1234)) (drop (i32.const -1000)) (drop (i32.const 1)) (nop) (unreachable) (i32.const 2) ) (block (result i32) (drop (i32.const 999)) (drop (i32.const 1)) (nop) (unreachable) (i32.const 2) ) ) ) (drop (if (result i32) (i32.const 3) (block (result i32) (drop (i32.const -1234)) (drop (i32.const -1000)) (drop (i32.const 1)) (nop) (i32.const 2) ) (block (result i32) (drop (i32.const 999)) (drop (i32.const 1)) (nop) (i32.const 2) ) ) ) ) (func $if-worth-it-i-dunno ;; just 2, so not worth it (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) (if (i32.const 0) (block (drop (i32.const -1234)) (drop (i32.const -1000)) (unreachable) (unreachable) ) (block (drop (i32.const 999)) (drop (i32.const 1)) (unreachable) (unreachable) ) ) ) ;; 3, so why not (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) (if (i32.const 0) (block (drop (i32.const -1234)) (drop (i32.const -1000)) (unreachable) (unreachable) (unreachable) ) (block (drop (i32.const 999)) (drop (i32.const 1)) (unreachable) (unreachable) (unreachable) ) ) ) ;; just 2, but we'll empty out a block (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) (if (i32.const 0) (block (unreachable) (unreachable) ) (block (drop (i32.const 999)) (drop (i32.const 1)) (unreachable) (unreachable) ) ) ) ;; just 2, but we'll empty out a block (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) (if (i32.const 0) (block (drop (i32.const -1234)) (drop (i32.const -1000)) (unreachable) (unreachable) ) (block (unreachable) (unreachable) ) ) ) ;; just two, but on a block, so we hope to merge, and can optimize here (block $a-holding-block (if (i32.const 9999) (block (drop (i32.const -51234)) (drop (i32.const -51000)) (unreachable) (unreachable) ) (block (drop (i32.const 5999)) (drop (i32.const 51)) (unreachable) (unreachable) ) ) ) ;; with value (drop (block $b-holding-block (result i32) (if (result i32) (i32.const 9999) (block (result i32) (drop (i32.const -51234)) (drop (i32.const -51000)) (unreachable) (i32.const 10) ) (block (result i32) (drop (i32.const 5999)) (drop (i32.const 51)) (unreachable) (i32.const 10) ) ) ) ) ;; oops, something in between (block $c-holding-block (drop (if (result i32) (i32.const 9999) (block (result i32) (drop (i32.const -51234)) (drop (i32.const -51000)) (unreachable) (i32.const 10) ) (block (result i32) (drop (i32.const 5999)) (drop (i32.const 51)) (unreachable) (i32.const 10) ) ) ) ) ) (func $no-grandparent ;; if we had a parent block, we might optimize this (if (i32.const 9999) (block (drop (i32.const -51234)) (drop (i32.const -51000)) (unreachable) (unreachable) ) (block (drop (i32.const 5999)) (drop (i32.const 51)) (unreachable) (unreachable) ) ) ) (func $yes-grandparent (block (if (i32.const 9999) (block (drop (i32.const -51234)) (drop (i32.const -51000)) (unreachable) (unreachable) ) (block (drop (i32.const 5999)) (drop (i32.const 51)) (unreachable) (unreachable) ) ) ) ) (func $ifs-named-block (param $x i32) (param $y i32) (result i32) (block $out (block $out2 (if (local.get $x) (block (br_if $out (local.get $y i32)) (nop) ) (block (br_if $out (local.get $y i32)) (nop) ) ) (if (local.get $x) (block (br_if $out (local.get $y i32)) (nop) ) (block (br_if $out2 (local.get $y i32)) (nop) ) ) (if (i32.const 1234) (if (local.get $x) (block (nop) (br_if $out (local.get $y i32)) (nop) ) (block (nop) (br_if $out2 (local.get $y i32)) (nop) ) ) ) (if (local.get $x) (block $left (br_if $left (local.get $y i32)) (nop) ) (block (br_if $out (local.get $y i32)) (nop) ) ) (if (local.get $x) (block (br_if $out (local.get $y i32)) (nop) ) (block $right (br_if $right (local.get $y i32)) (nop) ) ) ) (return (i32.const 10)) ) (return (i32.const 20)) ) (func $block (block $x (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) ;; no fallthrough, another thing to merge (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) (func $block2 (block $x (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 333333)) (br $x) ) ) (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) ;; no fallthrough, another thing to merge (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) (func $block3 (block $x (if (i32.const 0) (block (drop (i32.const 1000)) (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) (if (i32.const 0) (block (drop (i32.const 2000)) (drop (i32.const 3000)) (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) (drop (i32.const 4000)) (drop (i32.const 5000)) (drop (i32.const 6000)) ;; no fallthrough, another thing to merge (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) (func $mixture (block $out ;; then we reach the block, and the tail infos are stale, should ignore (if (i32.const 1) ;; then we optimize the if, pushing those brs outside! (block (drop (i32.const 2)) ;; first we note the block tails for $out (nop) (nop) (nop) (nop) (nop) (nop) ;; totally worth it (br $out) ) (block (drop (i32.const 2)) (nop) (nop) (nop) (nop) (nop) (nop) (br $out) ) ) ) (block $out2 (if (i32.const 1) (block (drop (i32.const 3)) ;; leave something (drop (i32.const 2)) (nop) (nop) (nop) (nop) (nop) (nop) (br $out2) ) (block (drop (i32.const 4)) ;; leave something (drop (i32.const 5)) ;; leave something (drop (i32.const 2)) (nop) (nop) (nop) (nop) (nop) (nop) (br $out2) ) ) ) ;; now a case where do **do** want to fold for the block (which we can only do in a later pass) (block $out3 (if (i32.const 1) (block (drop (i32.const 2)) (nop) (nop) (nop) (nop) (nop) (nop) (br $out3) ) (block (drop (i32.const 2)) (nop) (nop) (nop) (nop) (nop) (nop) (br $out3) ) ) (if (i32.const 1) (block (drop (i32.const 2)) (nop) (nop) (nop) (nop) (nop) (nop) (br $out3) ) (block (drop (i32.const 2)) (nop) (nop) (nop) (nop) (nop) (nop) (br $out3) ) ) (drop (i32.const 2)) (nop) (nop) (nop) (nop) (nop) (nop) (br $out3) ) ) (func $block-corners ;; these should be merged (block $x (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) (drop (i32.const 1)) (drop (i32.const 2)) ) ;; these should not ;; values (drop (block $y (result i32) (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $y (i32.const 3)) ) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $y (i32.const 3)) ) ) (drop (block $z (result i32) (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $z (i32.const 2)) ) ) (drop (i32.const 1)) (drop (i32.const 2)) (i32.const 3) ) ) ;; condition (block $w (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br_if $w (i32.const 3)) ) ) (drop (i32.const 1)) (drop (i32.const 2)) ) ;; not at the end (block $x1 (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $x1) (nop) ) ) (drop (i32.const 1)) (drop (i32.const 2)) ) ;; switches (block $side (block $x2 (br_table $x2 $side (i32.const 0)) (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $x2) ) ) (drop (i32.const 1)) (drop (i32.const 2)) ) (block $x3 (br_table $side $x3 (i32.const 0)) (if (i32.const 0) (block (drop (i32.const 1)) (drop (i32.const 2)) (br $x3) ) ) (drop (i32.const 1)) (drop (i32.const 2)) ) ) ) (func $terminating (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 2) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 3) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) ) (func $terminating-unreachable (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 2) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 3) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (unreachable) ) (func $terminating-value (result i32) (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 2) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 3) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (i32.const 4) ) (func $terminating-just-2 (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 2) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 3) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (drop (i32.const 10)) (unreachable) ) ) ) (func $terminating-shortness (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 2) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) ;; shorter. we do the two long ones greedily, then the merged one and this can also be opted (unreachable) ) ) (if (i32.const 3) (block (drop (i32.const 10)) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (unreachable) ) ) ) (func $terminating-multiple-separate (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (drop (i32.const 1)) (unreachable) ) ) (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (drop (i32.const 1)) (unreachable) ) ) (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (drop (i32.const 2)) (unreachable) ) ) (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (drop (i32.const 2)) (unreachable) ) ) ) (func $terminating-just-worth-it (if (i32.const 1) (block (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 2) (block (nop) (nop) (nop) (unreachable) ) ) (if (i32.const 3) (block (nop) (nop) (nop) (unreachable) ) ) ) (func $terminating-not-worth-it (if (i32.const 1) (block (nop) (nop) (unreachable) ) ) (if (i32.const 2) (block (nop) (nop) (unreachable) ) ) (if (i32.const 3) (block (nop) (nop) (unreachable) ) ) ) (func $terminating-return (if (i32.const 1) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (return) ) ) (if (i32.const 2) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (return) ) ) (if (i32.const 3) (block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (return) ) ) ) (func $terminating-return-value (result i32) (if (i32.const 1) (block (nop) (return (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 2) (block (nop) (return (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 3) (block (nop) (return (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 3) (block (nop) (return (i32.add (i32.const 111111111) (i32.const 2222222))) ) ) (return (i32.const 1234)) ) (func $terminating-fallthrough-value (result i32) (if (i32.const 1) (block (nop) (return (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 2) (block (nop) (return (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 3) (block (nop) (return (i32.add (i32.const 1) (i32.const 2))) ) ) (if (i32.const 3) (block (nop) (return (i32.add (i32.const 111111111) (i32.const 2222222))) ) ) (i32.const 1234) ) (func $big-return (result i32) (if (i32.const 1) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 2) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 4) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 5) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 6) (return (i32.add (i32.const 1) (i32.const 2)))) (unreachable) ) (func $return-mix (result i32) (if (i32.const 1) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 2) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 4) (return (i32.add (i32.const 1) (i32.const 2)))) (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 234567)))) (return (i32.add (i32.const 1) (i32.const 2))) ;; on a block, and the toplevel in fact ) (func $just-unreachable (unreachable) ) (func $just-return (result i32) (return (i32.add (i32.const 1) (i32.const 2))) ;; on a block, and the toplevel in fact ) (func $drop-if-with-value-but-unreachable (block $label$0 (if (i32.const 0) (block $label$1 (nop) ) ) (if (i32.const 0) (block $label$2 (nop) ) (block $label$3 (nop) ) ) (if (i32.const 0) (block $label$4 (nop) ) (block $label$5 (unreachable) ) ) (nop) (drop (if (result i32) ;; we replace this if, must replace with same type! (unreachable) (block $label$6 (result i32) (i32.add (i32.const 1) (i32.const 2) ) ) (block $label$7 (result i32) (i32.add (i32.const 1) (i32.const 2) ) ) ) ) (drop (if (result i32) (i32.const 0) (block $label$8 (result i32) (i32.add (i32.const 1) (i32.const 2) ) ) (block $label$9 (result i32) (i32.add (i32.const 1) (i32.const 333333333) ) ) ) ) ) ) (func $nested-control-flow (block $out (block $x (if (i32.const 0) (block (if (i32.const 1) (br $out) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) (if (i32.const 0) (block (if (i32.const 1) (br $out) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) ) ;; no fallthrough, another thing to merge (if (i32.const 1) (br $out) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $x) ) (drop (i32.const 3)) ) ) (func $nested-control-flow-dangerous (block $out (block $x (if (i32.const 0) (block (if (i32.const 1) (br $out) ;; this br cannot be moved out of the $out block! ) (drop (i32.const 1)) (drop (i32.const 2)) (return) ) ) (if (i32.const 0) (block (if (i32.const 1) (br $out) ) (drop (i32.const 1)) (drop (i32.const 2)) (return) ) ) ;; no fallthrough, another thing to merge (if (i32.const 1) (br $out) ) (drop (i32.const 1)) (drop (i32.const 2)) (return) ) (drop (i32.const 3)) ) ) (func $nested-control-flow-dangerous-but-ok (block $out (block $middle (block $x (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1)) (br $middle) ) (drop (i32.const 1)) (drop (i32.const 2)) (return) ) ) (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1)) (br $middle) ) (drop (i32.const 1)) (drop (i32.const 2)) (return) ) ) ;; no fallthrough, another thing to merge (if (i32.add (i32.const 0) (i32.const 1)) (br $middle) ) (drop (i32.const 1)) (drop (i32.const 2)) (return) ) ) (drop (i32.const 3)) ) ) (func $nested-control-flow-dangerous-but-ok-b (block $out (block $middle (block $x (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1)) (br $middle) ;; this is dangerous - we branch to middle with is inside out, so we can't move this out of out ) (drop (i32.const 1)) (drop (i32.const 2)) (drop (i32.const 3)) (drop (i32.const 4)) (drop (i32.const 1)) (drop (i32.const 2)) (drop (i32.const 3)) (drop (i32.const 4)) (br $out) ) ) (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1)) (br $middle) ) (drop (i32.const 1)) (drop (i32.const 2)) (drop (i32.const 3)) (drop (i32.const 4)) (drop (i32.const 1)) (drop (i32.const 2)) (drop (i32.const 3)) (drop (i32.const 4)) (br $out) ) ) ;; no fallthrough, another thing to merge (if (i32.add (i32.const 0) (i32.const 1)) (br $middle) ) ) ) (unreachable) ;; no fallthrough ) ) (func $nested-control-flow-dangerous-but-ok-c (block $x (block $out (block $middle (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1)) (br $x) ;; this is ok - we branch to x which is outside of out ) (drop (i32.const 1)) (drop (i32.const 2)) (br $out) ) ) (if (i32.const 0) (block (if (i32.add (i32.const 0) (i32.const 1)) (br $x) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $out) ) ) ;; no fallthrough, another thing to merge (if (i32.add (i32.const 0) (i32.const 1)) (br $x) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $out) ) (unreachable) ;; no fallthrough ) (unreachable) ;; no fallthrough ) (drop (i32.const 5)) ) (func $nested-control-flow-dangerous-but-ok-d (block $out (block $middle (if (i32.const 0) (block (block $x (if (i32.add (i32.const 0) (i32.const 1)) (br $x) ;; this is ok - we branch to x which is nested in us ) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $out) ) ) (if (i32.const 0) (block (block $x (if (i32.add (i32.const 0) (i32.const 1)) (br $x) ;; this is ok - we branch to x which is nested in us ) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $out) ) ) ;; no fallthrough, another thing to merge (block $x (if (i32.add (i32.const 0) (i32.const 1)) (br $x) ;; this is ok - we branch to x which is nested in us ) ) (drop (i32.const 1)) (drop (i32.const 2)) (br $out) ) ) (drop (i32.const 3)) ) (func $if-suffix (param $x i32) (result i32) (if (local.get $x) (local.set $x (i32.const 1)) (block (drop (call $if-suffix (i32.const -1))) (local.set $x (i32.const 1)) ) ) (if (result i32) (local.get $x) (i32.const 2) (block (result i32) (drop (call $if-suffix (i32.const -2))) (i32.const 2) ) ) ) ) binaryen-version_108/test/passes/remove-unused-names_merge-blocks_all-features.txt000066400000000000000000000501171423707623100307640ustar00rootroot00000000000000(module (type $3 (func)) (type $i (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $ii (func (param i32 i32))) (type $iii (func (param i32 i32 i32))) (type $none_=>_f64 (func (result f64))) (memory $0 (shared 256 256)) (table $0 1 1 funcref) (elem (i32.const 0) $call-i) (func $call-i (param $0 i32) (nop) ) (func $call-ii (param $0 i32) (param $1 i32) (nop) ) (func $call-iii (param $0 i32) (param $1 i32) (param $2 i32) (nop) ) (func $b0-yes (param $i1 i32) (drop (i32.const 10) ) ) (func $b0-no (param $i1 i32) (block $topmost (block $block0 (br $block0) ) (br $topmost) ) ) (func $b0-br-but-ok (param $i1 i32) (block $topmost (br $topmost) ) ) (func $b1-yes (param $i1 i32) (drop (i32.const 10) ) ) (func $b2-yes (param $i1 i32) (drop (i32.const 5) ) (drop (i32.const 10) ) (drop (i32.const 15) ) ) (func $b3-yes (param $i1 i32) (drop (i32.const 3) ) (drop (i32.const 6) ) (drop (i32.const 10) ) (drop (i32.const 15) ) (drop (i32.const 20) ) ) (func $b4 (param $i1 i32) (block $inner (drop (i32.const 10) ) (br $inner) ) ) (func $b5 (param $i1 i32) (block $middle (drop (i32.const 10) ) (block $inner (br $inner) ) (br $middle) ) ) (func $b6 (param $i1 i32) (drop (i32.const 5) ) (drop (i32.const 10) ) (block $inner (br $inner) ) (drop (i32.const 15) ) ) (func $b7 (param $i1 i32) (drop (i32.const 3) ) (drop (i32.const 6) ) (drop (i32.const 10) ) (block $inner (br $inner) ) (drop (i32.const 15) ) (block $middle (br $middle) ) (drop (i32.const 20) ) ) (func $unary (local $x i32) (drop (i32.eqz (block (result i32) (i32.const 10) ) ) ) (drop (i32.const 10) ) (drop (i32.eqz (i32.const 20) ) ) (drop (i32.const 10) ) (drop (i32.const 20) ) (drop (i32.eqz (i32.const 30) ) ) (drop (i32.const 10) ) (local.set $x (i32.const 20) ) (drop (i32.const 10) ) (drop (i32.load (i32.const 20) ) ) (return (block (drop (i32.const 10) ) (unreachable) ) ) ) (func $binary (drop (i32.add (block (result i32) (i32.const 10) ) (i32.const 20) ) ) (drop (i32.const 10) ) (drop (i32.add (i32.const 20) (i32.const 30) ) ) (drop (i32.const 10) ) (drop (i32.const 20) ) (drop (i32.add (i32.const 30) (i32.const 40) ) ) (drop (i32.add (i32.const 10) (block (result i32) (i32.const 20) ) ) ) (drop (i32.const 20) ) (drop (i32.add (i32.const 10) (i32.const 30) ) ) (drop (i32.const 20) ) (drop (i32.const 30) ) (drop (i32.add (i32.const 10) (i32.const 40) ) ) (drop (i32.add (block (result i32) (i32.const 10) ) (block (result i32) (i32.const 20) ) ) ) (drop (i32.const 10) ) (drop (i32.const 30) ) (drop (i32.add (i32.const 20) (i32.const 40) ) ) (drop (i32.const 10) ) (drop (i32.const 20) ) (drop (i32.const 40) ) (drop (i32.const 50) ) (drop (i32.add (i32.const 30) (i32.const 60) ) ) (drop (i32.const 20) ) (i32.store (i32.const 10) (i32.const 30) ) (drop (i32.const 10) ) (i32.store (i32.const 20) (i32.const 30) ) (drop (block (drop (i32.const 10) ) (i32.add (unreachable) (i32.const 20) ) ) ) (drop (i32.const 20) ) (drop (i32.add (block (result i32) (unreachable) (i32.const 10) ) (i32.const 30) ) ) ) (func $trinary (drop (i32.const 10) ) (drop (i32.const 30) ) (drop (i32.const 50) ) (drop (select (i32.const 20) (i32.const 40) (i32.const 60) ) ) (drop (i32.const 20) ) (drop (i32.const 40) ) (drop (select (block (result i32) (i32.const 10) ) (i32.const 30) (i32.const 50) ) ) (drop (i32.const 10) ) (drop (i32.const 40) ) (drop (select (i32.const 20) (block (result i32) (i32.const 30) ) (i32.const 50) ) ) (drop (i32.const 10) ) (drop (i32.const 30) ) (drop (select (i32.const 20) (i32.const 40) (block (result i32) (i32.const 50) ) ) ) (drop (i32.const 30) ) (drop (select (block (result i32) (i32.const 10) ) (block (result i32) (i32.const 20) ) (i32.const 40) ) ) (drop (i32.const 20) ) (drop (select (block (result i32) (i32.const 10) ) (i32.const 30) (block (result i32) (i32.const 40) ) ) ) (drop (i32.const 10) ) (drop (select (i32.const 20) (block (result i32) (i32.const 30) ) (block (result i32) (i32.const 40) ) ) ) (drop (i32.const 30) ) (drop (i32.const 50) ) (drop (select (block (result i32) (unreachable) (i32.const 20) ) (i32.const 40) (i32.const 60) ) ) (drop (i32.const 30) ) (drop (i32.const 50) ) (drop (select (block (result i32) (drop (i32.const 10) ) (unreachable) ) (i32.const 40) (i32.const 60) ) ) (drop (i32.const 10) ) (drop (i32.const 50) ) (drop (select (i32.const 20) (block (result i32) (unreachable) (i32.const 40) ) (i32.const 60) ) ) (drop (i32.const 10) ) (drop (i32.const 50) ) (drop (select (i32.const 20) (block (result i32) (drop (i32.const 30) ) (unreachable) ) (i32.const 60) ) ) (drop (i32.const 10) ) (drop (i32.const 30) ) (drop (select (i32.const 20) (i32.const 40) (block (result i32) (unreachable) (i32.const 60) ) ) ) (drop (i32.const 10) ) (drop (i32.const 30) ) (drop (select (i32.const 20) (i32.const 40) (block (result i32) (drop (i32.const 50) ) (unreachable) ) ) ) ) (func $breaks (block $out (drop (i32.const 10) ) (drop (i32.const 20) ) (br $out) (drop (i32.const 10) ) (br_if $out (i32.const 20) ) (drop (i32.const 10) ) (drop (i32.const 20) ) (drop (i32.const 30) ) (br_if $out (i32.const 40) ) (drop (i32.const 10) ) (br_table $out $out (i32.const 20) ) (drop (block $out2 (result i32) (drop (i32.const 10) ) (drop (i32.const 30) ) (br_table $out2 $out2 (i32.const 20) (i32.const 40) ) ) ) (unreachable) ) ) (func $calls (call $call-i (block (result i32) (i32.const 10) ) ) (drop (i32.const 10) ) (call $call-i (i32.const 20) ) (drop (i32.const 10) ) (drop (i32.const 20) ) (call $call-i (i32.const 30) ) (drop (i32.const 10) ) (drop (i32.const 30) ) (call $call-ii (i32.const 20) (i32.const 40) ) (drop (i32.const 20) ) (call $call-ii (block (result i32) (unreachable) (i32.const 10) ) (i32.const 30) ) (drop (i32.const 20) ) (call $call-ii (block (result i32) (drop (i32.const 10) ) (unreachable) ) (i32.const 30) ) (drop (i32.const 10) ) (call $call-ii (i32.const 20) (block (result i32) (unreachable) (i32.const 30) ) ) (drop (i32.const 10) ) (call $call-ii (i32.const 20) (block (result i32) (drop (i32.const 30) ) (unreachable) ) ) (drop (i32.const 10) ) (drop (i32.const 30) ) (drop (i32.const 50) ) (call $call-iii (i32.const 20) (i32.const 40) (i32.const 60) ) (drop (i32.const 10) ) (drop (i32.const 40) ) (call $call-iii (i32.const 20) (i32.const 30) (i32.const 50) ) (drop (i32.const 10) ) (drop (i32.const 30) ) (drop (i32.const 50) ) (call_indirect $0 (type $ii) (i32.const 20) (i32.const 40) (i32.const 60) ) (drop (i32.const 30) ) (drop (i32.const 50) ) (call_indirect $0 (type $ii) (unreachable) (i32.const 40) (i32.const 60) ) (drop (i32.const 31) ) (drop (i32.const 51) ) (call_indirect $0 (type $ii) (i32.const 41) (unreachable) (i32.const 61) ) (drop (i32.const 32) ) (drop (i32.const 52) ) (call_indirect $0 (type $ii) (i32.const 42) (i32.const 62) (unreachable) ) ) (func $atomics (drop (i32.const 10) ) (drop (i32.const 30) ) (drop (i32.const 50) ) (drop (i32.atomic.rmw.cmpxchg (i32.const 20) (i32.const 40) (i32.const 60) ) ) (drop (i32.const 10) ) (drop (i32.atomic.rmw.add (i32.const 20) (i32.const 30) ) ) ) (func $mix-select (param $x i32) (drop (select (local.get $x) (local.get $x) (block (result i32) (local.set $x (i32.const 1) ) (i32.const 2) ) ) ) ) (func $block-type-change (local $0 f64) (local $1 f64) (nop) (if (f64.gt (local.get $0) (local.get $1) ) (nop) ) ) (func $do-reorder (param $x i32) (local $y i32) (if (i32.const 1) (block (local.set $y (i32.const 5) ) (local.set $x (i32.le_u (local.get $x) (i32.const 10) ) ) ) ) ) (func $do-not-reorder (param $x i32) (local $y i32) (if (i32.const 1) (local.set $x (i32.le_u (local.get $y) (block (result i32) (local.set $y (i32.const 5) ) (i32.const 10) ) ) ) ) ) (func $return-different-type (result i32) (drop (f64.abs (block (drop (i32.const 2) ) (return (i32.const 1) ) ) ) ) (unreachable) ) (func $drop-unreachable (result i32) (local $0 i32) (drop (block (result i32) (unreachable) ) ) (unreachable) ) (func $concrete_finale_in_unreachable (result f64) (drop (block (result f64) (unreachable) (f64.const 6.322092475576799e-96) ) ) (f64.const -1) ) (func $dont-move-unreachable (loop $label$0 (drop (block (result i32) (br $label$0) (i32.const 1) ) ) ) ) (func $dont-move-unreachable-last (loop $label$0 (drop (block (result i32) (call $dont-move-unreachable-last) (br $label$0) ) ) ) ) (func $move-around-unreachable-in-middle (loop $label$0 (nop) (drop (block $label$3 (result i32) (drop (br_if $label$3 (br $label$0) (i32.const 0) ) ) (i32.const 1) ) ) ) ) (func $drop-unreachable-block-with-concrete-final (drop (block (result i32) (drop (block (drop (return) ) ) ) (i32.const -452) ) ) ) (func $merging-with-unreachable-in-middle (result i32) (block (result i32) (return (i32.const 21536) ) (block $label$15 (br $label$15) ) (i32.const 19299) ) ) (func $remove-br-after-unreachable (block $label$9 (drop (block (block (return) (br $label$9) ) ) ) ) ) (func $block-tails (block $l1 (drop (i32.const -2) ) (drop (i32.const -1) ) (br $l1) (drop (i32.const 0) ) (drop (i32.const 1) ) ) (block $l2 (br_if $l2 (i32.const 2) ) (drop (i32.const 3) ) ) (block $l3 (br_if $l3 (i32.const 4) ) (br_if $l3 (i32.const 5) ) (drop (i32.const 6) ) ) (block $l4 (br_if $l4 (i32.const 7) ) (br_if $l4 (i32.const 8) ) (drop (i32.const 9) ) ) (block $l5 (if (i32.const 10) (br_if $l5 (i32.const 11) ) ) (drop (i32.const 12) ) ) (block $l8 (br_if $l8 (i32.const 13) ) (br_if $l8 (i32.const 14) ) (br_if $l8 (i32.const 15) ) (drop (i32.const 16) ) ) (block $l11 (br_if $l11 (i32.const 17) ) (br_if $l11 (i32.const 18) ) (br_if $l11 (i32.const 19) ) (drop (i32.const 20) ) ) (block $l12 (br_if $l12 (i32.const 21) ) (block $l13 (br_if $l13 (i32.const 22) ) (block $l14 (br_if $l14 (i32.const 23) ) (drop (i32.const 24) ) ) (drop (i32.const 25) ) ) (drop (i32.const 26) ) ) (drop (i32.const 27) ) (block $l17 (br_if $l17 (i32.const 28) ) (drop (i32.const 29) ) ) (block $l16 (br_if $l16 (i32.const 30) ) (drop (i32.const 31) ) ) (block $l15 (br_if $l15 (i32.const 32) ) (drop (i32.const 33) ) ) ) (func $loop-tails (loop $l1 (drop (i32.const -2) ) (drop (i32.const -1) ) (br $l1) (drop (i32.const 0) ) (drop (i32.const 1) ) ) (loop $l2 (br_if $l2 (i32.const 2) ) ) (drop (i32.const 3) ) (block $b1 (loop $l3 (br_if $b1 (i32.const 4) ) (br_if $l3 (i32.const 5) ) ) (drop (i32.const 6) ) ) (loop $l4 (br_if $l4 (i32.const 7) ) ) (block $b2 (br_if $b2 (i32.const 8) ) (drop (i32.const 9) ) ) (loop $l5 (if (i32.const 10) (br_if $l5 (i32.const 11) ) ) ) (drop (i32.const 12) ) (loop $l6 (loop $l7 (loop $l8 (br_if $l6 (i32.const 13) ) (br_if $l7 (i32.const 14) ) (br_if $l8 (i32.const 15) ) (drop (i32.const 16) ) ) ) ) (loop $l9 (loop $l10 (loop $l11 (br_if $l11 (i32.const 17) ) (br_if $l10 (i32.const 18) ) (br_if $l9 (i32.const 19) ) (drop (i32.const 20) ) ) ) ) (loop $l12 (loop $l13 (loop $l14 (br_if $l12 (i32.const 21) ) (br_if $l13 (i32.const 22) ) (br_if $l14 (i32.const 23) ) ) ) ) (drop (i32.const 24) ) (drop (i32.const 25) ) (drop (i32.const 26) ) (loop $l15 (loop $l16 (loop $l17 (drop (i32.const 27) ) (br_if $l17 (i32.const 28) ) ) (drop (i32.const 29) ) (br_if $l16 (i32.const 30) ) ) (drop (i32.const 31) ) (br_if $l15 (i32.const 32) ) ) (drop (i32.const 33) ) ) (func $block-tail-one (block $l1 (drop (i32.const -2) ) (drop (i32.const -1) ) (br $l1) (drop (i32.const 0) ) (drop (i32.const 1) ) ) (drop (i32.const 2) ) ) (func $loop-tail-one (loop $l1 (drop (i32.const -2) ) (drop (i32.const -1) ) (br $l1) (drop (i32.const 0) ) (drop (i32.const 1) ) ) (drop (i32.const 2) ) ) (func $block-tail-value (result i32) (block $l1 (result i32) (drop (i32.const -1) ) (br $l1 (i32.const 0) ) (drop (i32.const 1) ) (i32.const 2) ) ) (func $block-tail-empty (block $l1 (drop (i32.const -1) ) (br $l1) ) ) (func $loop-tail-empty (loop $l1 (drop (i32.const -1) ) (br $l1) ) ) (func $block-tail-unreachable (result i32) (block $l1 (result i32) (drop (i32.const -1) ) (drop (br_if $l1 (i32.const 0) (i32.const 1) ) ) (drop (i32.const 1) ) (unreachable) ) ) (func $loop-tail-unreachable (result i32) (loop $l1 (drop (i32.const -1) ) (br_if $l1 (i32.const 1) ) ) (drop (i32.const 1) ) (unreachable) ) ) (module (type $none_=>_i32 (func (result i32))) (type $f64_i32_=>_i32 (func (param f64 i32) (result i32))) (func $unreachable-in-sub-block (param $0 f64) (param $1 i32) (result i32) (local $2 i32) (local $9 i32) (loop $label$1 (local.set $9 (local.tee $2 (block $label$2 (result i32) (drop (br_if $label$2 (local.tee $2 (i32.const 0) ) (i32.const 0) ) ) (br_if $label$1 (i32.const 0) ) (block (unreachable) (nop) ) ) ) ) ) (nop) (local.get $9) ) (func $trivial (result i32) (block (unreachable) (nop) ) ) (func $trivial-more (result i32) (block (nop) (unreachable) (nop) (nop) (nop) ) (block (nop) (unreachable) (nop) ) ) ) (module (type $none_=>_none (func)) (func $merge-some-block (drop (i32.const 1) ) (block $b1 (br_if $b1 (i32.const 0) ) ) (block $b2 (br_if $b2 (i32.const 0) ) (drop (i32.const 2) ) ) (drop (i32.const 3) ) (block $b3 (br_if $b3 (i32.const 0) ) (drop (i32.const 4) ) ) (block $b3-dead-code-so-ignore (drop (i32.const 3) ) (br $b3-dead-code-so-ignore) (drop (i32.const 4) ) ) (drop (i32.const 5) ) (block $b4 (br_if $b4 (i32.const 0) ) (drop (i32.const 6) ) (br_if $b4 (i32.const 0) ) ) (block $b5 (br_if $b5 (i32.const 0) ) (drop (i32.const 7) ) (br_if $b5 (i32.const 0) ) (drop (i32.const 8) ) ) (drop (i32.const 9) ) (drop (i32.const 10) ) (block $b6 (br_if $b6 (i32.const 0) ) ) ) (func $merge-some-loop (drop (i32.const 1) ) (block $b1 (br_if $b1 (i32.const 0) ) ) (block $b2 (br_if $b2 (i32.const 0) ) (drop (i32.const 2) ) ) (drop (i32.const 3) ) (block $b3 (br_if $b3 (i32.const 0) ) (drop (i32.const 4) ) ) (drop (i32.const 5) ) (block $b4 (br_if $b4 (i32.const 0) ) (drop (i32.const 6) ) (br_if $b4 (i32.const 0) ) ) (block $b5 (br_if $b5 (i32.const 0) ) (drop (i32.const 7) ) (br_if $b5 (i32.const 0) ) (drop (i32.const 8) ) ) (drop (i32.const 9) ) (drop (i32.const 10) ) (block $b6 (br_if $b6 (i32.const 0) ) ) ) (func $merge-some-loop-taken (loop $l1 (block $b1 (drop (i32.const 1) ) (br_if $l1 (i32.const 0) ) (drop (i32.const 2) ) (br_if $b1 (i32.const 0) ) (drop (i32.const 3) ) ) ) (loop $l2 (block $b2 (drop (i32.const 4) ) (br_if $b2 (i32.const 0) ) (drop (i32.const 5) ) (br_if $l2 (i32.const 0) ) (drop (i32.const 6) ) ) ) (loop $l3 (block $b3 (drop (i32.const 7) ) (br_if $b3 (i32.const 0) ) (drop (i32.const 8) ) (br_if $l3 (i32.const 0) ) ) ) (loop $l4 (block $b4 (br_if $l4 (i32.const 0) ) (drop (i32.const 9) ) (br_if $b4 (i32.const 0) ) (drop (i32.const 10) ) ) ) (loop $l5 (block $b5 (drop (i32.const 7) ) (br_if $b5 (i32.const 0) ) (br_if $l5 (i32.const 0) ) ) ) (loop $l6 (block $b6 (br_if $l6 (i32.const 0) ) (br_if $b6 (i32.const 0) ) (drop (i32.const 10) ) ) ) (loop $l7 (block $b7 (drop (i32.const 11) ) (br_if $l7 (i32.const 0) ) (br_if $b7 (i32.const 0) ) (drop (i32.const 13) ) ) ) (loop $l8 (block $b8 (drop (i32.const 14) ) (br_if $b8 (i32.const 0) ) (br_if $l8 (i32.const 0) ) (drop (i32.const 16) ) ) ) (loop $l9 (drop (i32.const 17) ) (br_if $l9 (i32.const 0) ) (drop (i32.const 18) ) (br_if $l9 (i32.const 0) ) ) (drop (i32.const 19) ) (loop $l10 (drop (i32.const 20) ) (br_if $l10 (i32.const 0) ) ) (drop (i32.const 21) ) (loop $l11 (br_if $l11 (i32.const 0) ) ) (drop (i32.const 23) ) (loop $l12 (drop (i32.const 24) ) (br_if $l12 (i32.const 0) ) ) ) ) (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (tag $e (param i32)) (func $foo (nop) ) (func $throw (nop) (throw $e (i32.const 3) ) ) ) binaryen-version_108/test/passes/remove-unused-names_merge-blocks_all-features.wast000066400000000000000000000674611423707623100311350ustar00rootroot00000000000000(module (memory (shared 256 256)) (type $i (func (param i32))) (type $ii (func (param i32 i32))) (type $iii (func (param i32 i32 i32))) (type $3 (func)) (table 1 1 funcref) (elem (i32.const 0) $call-i) (func $call-i (type $i) (param $0 i32) (nop) ) (func $call-ii (type $ii) (param $0 i32) (param $1 i32) (nop) ) (func $call-iii (type $iii) (param $0 i32) (param $1 i32) (param $2 i32) (nop) ) (func $b0-yes (type $i) (param $i1 i32) (block $topmost (block $block0 (drop (i32.const 10) ) ) ) ) (func $b0-no (type $i) (param $i1 i32) (block $topmost (block $block0 (br $block0) ) (br $topmost) ) ) (func $b0-br-but-ok (type $i) (param $i1 i32) (block $topmost (block $block0 (br $topmost) ) ) ) (func $b1-yes (type $i) (param $i1 i32) (block $topmost (block $block0 (block $block1 (drop (i32.const 10) ) ) ) ) ) (func $b2-yes (type $i) (param $i1 i32) (block $topmost (drop (i32.const 5) ) (block $block0 (drop (i32.const 10) ) ) (drop (i32.const 15) ) ) ) (func $b3-yes (type $i) (param $i1 i32) (block $topmost (drop (i32.const 3) ) (block $block0 (drop (i32.const 6) ) (block $block1 (drop (i32.const 10) ) ) (drop (i32.const 15) ) ) (drop (i32.const 20) ) ) ) (func $b4 (type $i) (param $i1 i32) (block $topmost (block $inner (drop (i32.const 10) ) (br $inner) ) ) ) (func $b5 (type $i) (param $i1 i32) (block $topmost (block $middle (block $inner (drop (i32.const 10) ) (br $inner) ) (br $middle) ) ) ) (func $b6 (type $i) (param $i1 i32) (block $topmost (drop (i32.const 5) ) (block $inner (drop (i32.const 10) ) (br $inner) ) (drop (i32.const 15) ) ) ) (func $b7 (type $i) (param $i1 i32) (block $topmost (drop (i32.const 3) ) (block $middle (drop (i32.const 6) ) (block $inner (drop (i32.const 10) ) (br $inner) ) (drop (i32.const 15) ) (br $middle) ) (drop (i32.const 20) ) ) ) (func $unary (type $3) (local $x i32) (drop (i32.eqz (block $block0 (result i32) (i32.const 10) ) ) ) (drop (i32.eqz (block $block1 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) ) (drop (i32.eqz (block $block2 (result i32) (drop (i32.const 10) ) (drop (i32.const 20) ) (i32.const 30) ) ) ) (local.set $x (block $block3 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) (drop (i32.load (block $block4 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) ) (return (block $block5 (drop (i32.const 10) ) (unreachable) ) ) ) (func $binary (type $3) (drop (i32.add (block $block0 (result i32) (i32.const 10) ) (i32.const 20) ) ) (drop (i32.add (block $block1 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (i32.const 30) ) ) (drop (i32.add (block $block2 (result i32) (drop (i32.const 10) ) (drop (i32.const 20) ) (i32.const 30) ) (i32.const 40) ) ) (drop (i32.add (i32.const 10) (block $block3 (result i32) (i32.const 20) ) ) ) (drop (i32.add (i32.const 10) (block $block4 (result i32) (drop (i32.const 20) ) (i32.const 30) ) ) ) (drop (i32.add (i32.const 10) (block $block5 (result i32) (drop (i32.const 20) ) (drop (i32.const 30) ) (i32.const 40) ) ) ) (drop (i32.add (block $block6 (result i32) (i32.const 10) ) (block $block7 (result i32) (i32.const 20) ) ) ) (drop (i32.add (block $block8 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block9 (result i32) (drop (i32.const 30) ) (i32.const 40) ) ) ) (drop (i32.add (block $block10 (result i32) (drop (i32.const 10) ) (drop (i32.const 20) ) (i32.const 30) ) (block $block11 (result i32) (drop (i32.const 40) ) (drop (i32.const 50) ) (i32.const 60) ) ) ) (i32.store (i32.const 10) (block $block12 (result i32) (drop (i32.const 20) ) (i32.const 30) ) ) (i32.store (block $block13 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (i32.const 30) ) (drop (i32.add (unreachable) (block $block14 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) ) (drop (i32.add (block $block15 (result i32) (unreachable) (i32.const 10) ) (block $block16 (result i32) (drop (i32.const 20) ) (i32.const 30) ) ) ) ) (func $trinary (type $3) (drop (select (block $block0 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block1 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block2 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) ) (drop (select (block $block3 (result i32) (i32.const 10) ) (block $block4 (result i32) (drop (i32.const 20) ) (i32.const 30) ) (block $block5 (result i32) (drop (i32.const 40) ) (i32.const 50) ) ) ) (drop (select (block $block6 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block7 (result i32) (i32.const 30) ) (block $block8 (result i32) (drop (i32.const 40) ) (i32.const 50) ) ) ) (drop (select (block $block9 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block10 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block11 (result i32) (i32.const 50) ) ) ) (drop (select (block $block12 (result i32) (i32.const 10) ) (block $block13 (result i32) (i32.const 20) ) (block $block14 (result i32) (drop (i32.const 30) ) (i32.const 40) ) ) ) (drop (select (block $block15 (result i32) (i32.const 10) ) (block $block16 (result i32) (drop (i32.const 20) ) (i32.const 30) ) (block $block17 (result i32) (i32.const 40) ) ) ) (drop (select (block $block18 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block19 (result i32) (i32.const 30) ) (block $block20 (result i32) (i32.const 40) ) ) ) (drop (select (block $block21 (result i32) (unreachable) (i32.const 20) ) (block $block22 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block23 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) ) (drop (select (block $block24 (result i32) (drop (i32.const 10) ) (unreachable) ) (block $block25 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block26 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) ) (drop (select (block $block27 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block28 (result i32) (unreachable) (i32.const 40) ) (block $block29 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) ) (drop (select (block $block30 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block31 (result i32) (drop (i32.const 30) ) (unreachable) ) (block $block32 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) ) (drop (select (block $block33 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block34 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block35 (result i32) (unreachable) (i32.const 60) ) ) ) (drop (select (block $block36 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block37 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block38 (result i32) (drop (i32.const 50) ) (unreachable) ) ) ) ) (func $breaks (type $3) (block $out (block (drop (block $block0 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) (br $out) ) (br_if $out (block $block1 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) (block (drop (block $block2 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) (br_if $out (block $block3 (result i32) (drop (i32.const 30) ) (i32.const 40) ) ) ) (br_table $out $out (block $block4 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) (drop (block $out2 (result i32) (br_table $out2 $out2 (block $block5 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block6 (result i32) (drop (i32.const 30) ) (i32.const 40) ) ) ) ) (unreachable) ) ) (func $calls (type $3) (call $call-i (block $block0 (result i32) (i32.const 10) ) ) (call $call-i (block $block1 (result i32) (drop (i32.const 10) ) (i32.const 20) ) ) (call $call-i (block $block2 (result i32) (drop (i32.const 10) ) (drop (i32.const 20) ) (i32.const 30) ) ) (call $call-ii (block $block3 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block4 (result i32) (drop (i32.const 30) ) (i32.const 40) ) ) (call $call-ii (block $block5 (result i32) (unreachable) (i32.const 10) ) (block $block6 (result i32) (drop (i32.const 20) ) (i32.const 30) ) ) (call $call-ii (block $block7 (result i32) (drop (i32.const 10) ) (unreachable) ) (block $block8 (result i32) (drop (i32.const 20) ) (i32.const 30) ) ) (call $call-ii (block $block9 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block10 (result i32) (unreachable) (i32.const 30) ) ) (call $call-ii (block $block11 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block12 (result i32) (drop (i32.const 30) ) (unreachable) ) ) (call $call-iii (block $block13 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block14 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block15 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) (call $call-iii (block $block16 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (i32.const 30) (block $block17 (result i32) (drop (i32.const 40) ) (i32.const 50) ) ) (call_indirect (type $ii) (block $block18 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block19 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block20 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) (call_indirect (type $ii) (unreachable) (block $block21 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block22 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) (call_indirect (type $ii) (block $block21 (result i32) (drop (i32.const 31) ) (i32.const 41) ) (unreachable) (block $block22 (result i32) (drop (i32.const 51) ) (i32.const 61) ) ) (call_indirect (type $ii) (block $block21 (result i32) (drop (i32.const 32) ) (i32.const 42) ) (block $block22 (result i32) (drop (i32.const 52) ) (i32.const 62) ) (unreachable) ) ) (func $atomics (type $3) (drop (i32.atomic.rmw.cmpxchg ;; mergeblock logic should be same as select (block $block0 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (block $block1 (result i32) (drop (i32.const 30) ) (i32.const 40) ) (block $block2 (result i32) (drop (i32.const 50) ) (i32.const 60) ) ) ) (drop (i32.atomic.rmw.add ;; atomicrmw is like a binary (block $block1 (result i32) (drop (i32.const 10) ) (i32.const 20) ) (i32.const 30) ) ) ) (func $mix-select (param $x i32) (drop (select (local.get $x) (local.get $x) (block (result i32) (local.set $x ;; cannot be moved before the gets (i32.const 1) ) (i32.const 2) ) ) ) ) (func $block-type-change (type $3) (local $0 f64) (local $1 f64) (if (f64.gt (local.get $0) (block $block0 (result f64) (nop) (local.get $1) ) ) (nop) ) ) (func $do-reorder (param $x i32) (local $y i32) (if (i32.const 1) (block (local.set $x (i32.le_u (local.get $x) (block (result i32) (local.set $y (i32.const 5)) (i32.const 10) ) ) ) ) ) ) (func $do-not-reorder (param $x i32) (local $y i32) (if (i32.const 1) (block (local.set $x (i32.le_u (local.get $y) (block (result i32) (local.set $y (i32.const 5)) (i32.const 10) ) ) ) ) ) ) (func $return-different-type (result i32) (drop (f64.abs (return (block (result i32) ;; when we flip the block out, it should have an ok type for the (dead) f64 op (drop (i32.const 2)) (i32.const 1) ) ) ) ) (unreachable) ) (func $drop-unreachable (result i32) (local $0 i32) (block $label$1 (result i32) (drop (block (result i32) (unreachable) ) ) (unreachable) ) ) (func $concrete_finale_in_unreachable (result f64) (block $label$0 (result f64) (drop (block (result f64) (unreachable) (f64.const 6.322092475576799e-96) ) ) (f64.const -1) ) ) (func $dont-move-unreachable (loop $label$0 (drop (block $label$3 (result i32) (br $label$0) (i32.const 1) ) ) ) ) (func $dont-move-unreachable-last (loop $label$0 (drop (block $label$3 (result i32) (call $dont-move-unreachable-last) (br $label$0) ) ) ) ) (func $move-around-unreachable-in-middle (loop $label$0 (drop (block $label$2 (result i32) (block $block2 (nop) ) (block $label$3 (result i32) (drop (br_if $label$3 (br $label$0) (i32.const 0) ) ) (i32.const 1) ) ) ) ) ) (func $drop-unreachable-block-with-concrete-final (drop (block (result i32) (drop (block (drop (return) ) ) ) (i32.const -452) ) ) ) (func $merging-with-unreachable-in-middle (result i32) (block $label$1 (result i32) (block (result i32) (return (i32.const 21536) ) (block $label$15 (br $label$15) ) (i32.const 19299) ) ) ) (func $remove-br-after-unreachable (block $label$9 (drop (block (block (return) (br $label$9) ;; removing this leads to the block becoming unreachable ) ) ) ) ) (func $block-tails (block $l1 (drop (i32.const -2)) (drop (i32.const -1)) (br $l1) (drop (i32.const 0)) (drop (i32.const 1)) ) (block $l2 (br_if $l2 (i32.const 2)) (drop (i32.const 3)) ) (block $b1 (block $l3 (br_if $b1 (i32.const 4)) (br_if $l3 (i32.const 5)) (drop (i32.const 6)) ) ) (block $b2 (block $l4 (br_if $l4 (i32.const 7)) (br_if $b2 (i32.const 8)) (drop (i32.const 9)) ) ) (block $l5 (if (i32.const 10) (br_if $l5 (i32.const 11)) ) (drop (i32.const 12)) ) (block $l6 (block $l7 (block $l8 (br_if $l6 (i32.const 13)) (br_if $l7 (i32.const 14)) (br_if $l8 (i32.const 15)) (drop (i32.const 16)) ) ) ) (block $l9 (block $l10 (block $l11 (br_if $l11 (i32.const 17)) (br_if $l10 (i32.const 18)) (br_if $l9 (i32.const 19)) (drop (i32.const 20)) ) ) ) (block $l12 (block $l13 (block $l14 (br_if $l12 (i32.const 21)) (br_if $l13 (i32.const 22)) (br_if $l14 (i32.const 23)) (drop (i32.const 24)) ) (drop (i32.const 25)) ) (drop (i32.const 26)) ) (block $l15 (block $l16 (block $l17 (drop (i32.const 27)) (br_if $l17 (i32.const 28)) (drop (i32.const 29)) ) (br_if $l16 (i32.const 30)) (drop (i32.const 31)) ) (br_if $l15 (i32.const 32)) (drop (i32.const 33)) ) ) (func $loop-tails (loop $l1 (drop (i32.const -2)) (drop (i32.const -1)) (br $l1) (drop (i32.const 0)) (drop (i32.const 1)) ) (loop $l2 (br_if $l2 (i32.const 2)) (drop (i32.const 3)) ) (block $b1 (loop $l3 (br_if $b1 (i32.const 4)) (br_if $l3 (i32.const 5)) (drop (i32.const 6)) ) ) (block $b2 (loop $l4 (br_if $l4 (i32.const 7)) (br_if $b2 (i32.const 8)) (drop (i32.const 9)) ) ) (loop $l5 (if (i32.const 10) (br_if $l5 (i32.const 11)) ) (drop (i32.const 12)) ) (loop $l6 (loop $l7 (loop $l8 (br_if $l6 (i32.const 13)) (br_if $l7 (i32.const 14)) (br_if $l8 (i32.const 15)) (drop (i32.const 16)) ) ) ) (loop $l9 (loop $l10 (loop $l11 (br_if $l11 (i32.const 17)) (br_if $l10 (i32.const 18)) (br_if $l9 (i32.const 19)) (drop (i32.const 20)) ) ) ) (loop $l12 (loop $l13 (loop $l14 (br_if $l12 (i32.const 21)) (br_if $l13 (i32.const 22)) (br_if $l14 (i32.const 23)) (drop (i32.const 24)) ) (drop (i32.const 25)) ) (drop (i32.const 26)) ) (loop $l15 (loop $l16 (loop $l17 (drop (i32.const 27)) (br_if $l17 (i32.const 28)) (drop (i32.const 29)) ) (br_if $l16 (i32.const 30)) (drop (i32.const 31)) ) (br_if $l15 (i32.const 32)) (drop (i32.const 33)) ) ) (func $block-tail-one (block $outer (block $l1 (drop (i32.const -2)) (drop (i32.const -1)) (br $l1) (drop (i32.const 0)) (drop (i32.const 1)) ) (drop (i32.const 2)) ) ) (func $loop-tail-one (block $outer (loop $l1 (drop (i32.const -2)) (drop (i32.const -1)) (br $l1) (drop (i32.const 0)) (drop (i32.const 1)) ) (drop (i32.const 2)) ) ) (func $block-tail-value (result i32) (block $outer (result i32) (block $l1 (result i32) (drop (i32.const -1)) (br $l1 (i32.const 0)) (drop (i32.const 1)) (i32.const 2) ) ) ) (func $block-tail-empty (block $outer (block $l1 (drop (i32.const -1)) (br $l1) ) ) ) (func $loop-tail-empty (block $outer (loop $l1 (drop (i32.const -1)) (br $l1) ) ) ) (func $block-tail-unreachable (result i32) (block $outer (result i32) (block $l1 (result i32) (drop (i32.const -1)) (drop (br_if $l1 (i32.const 0) (i32.const 1))) (drop (i32.const 1)) (unreachable) ) ) ) (func $loop-tail-unreachable (result i32) (block $outer (result i32) (loop $l1 (result i32) (drop (i32.const -1)) (br_if $l1 (i32.const 1)) (drop (i32.const 1)) (unreachable) ) ) ) ) (module (func $unreachable-in-sub-block (param $0 f64) (param $1 i32) (result i32) (local $2 i32) (local $9 i32) (loop $label$1 (local.set $9 (local.tee $2 (block $label$2 (result i32) (block (drop (br_if $label$2 (local.tee $2 (i32.const 0) ) (i32.const 0) ) ) ) (br_if $label$1 (i32.const 0) ) (block (unreachable) (nop) ;; bad if moved out to the outer block which is i32. current state works since this block is unreachable! ) ) ) ) ) (nop) (local.get $9) ) (func $trivial (result i32) (block (result i32) (block (unreachable) (nop) ) ) ) (func $trivial-more (result i32) (block (result i32) (block (nop) (unreachable) (nop) (nop) (nop) ) (block (nop) (unreachable) (nop) ) ) ) ) (module (func $merge-some-block (block $b1 (drop (i32.const 1)) (br_if $b1 (i32.const 0)) ) (block $b2 (br_if $b2 (i32.const 0)) (drop (i32.const 2)) ) (block $b3 (drop (i32.const 3)) (br_if $b3 (i32.const 0)) (drop (i32.const 4)) ) (block $b3-dead-code-so-ignore (drop (i32.const 3)) (br $b3-dead-code-so-ignore) (drop (i32.const 4)) ) (block $b4 (drop (i32.const 5)) (br_if $b4 (i32.const 0)) (drop (i32.const 6)) (br_if $b4 (i32.const 0)) ) (block $b5 (br_if $b5 (i32.const 0)) (drop (i32.const 7)) (br_if $b5 (i32.const 0)) (drop (i32.const 8)) ) (block $b6 (drop (i32.const 9)) (drop (i32.const 10)) (br_if $b6 (i32.const 0)) ) ) (func $merge-some-loop (loop $l1 (block $b1 (drop (i32.const 1)) (br_if $b1 (i32.const 0)) ) ) (loop $l2 (block $b2 (br_if $b2 (i32.const 0)) (drop (i32.const 2)) ) ) (loop $l3 (block $b3 (drop (i32.const 3)) (br_if $b3 (i32.const 0)) (drop (i32.const 4)) ) ) (loop $l4 (block $b4 (drop (i32.const 5)) (br_if $b4 (i32.const 0)) (drop (i32.const 6)) (br_if $b4 (i32.const 0)) ) ) (loop $l5 (block $b5 (br_if $b5 (i32.const 0)) (drop (i32.const 7)) (br_if $b5 (i32.const 0)) (drop (i32.const 8)) ) ) (loop $l6 (block $b6 (drop (i32.const 9)) (drop (i32.const 10)) (br_if $b6 (i32.const 0)) ) ) ) (func $merge-some-loop-taken (loop $l1 (block $b1 (drop (i32.const 1)) (br_if $l1 (i32.const 0)) (drop (i32.const 2)) (br_if $b1 (i32.const 0)) (drop (i32.const 3)) ) ) (loop $l2 (block $b2 (drop (i32.const 4)) (br_if $b2 (i32.const 0)) (drop (i32.const 5)) (br_if $l2 (i32.const 0)) (drop (i32.const 6)) ) ) (loop $l3 (block $b3 (drop (i32.const 7)) (br_if $b3 (i32.const 0)) (drop (i32.const 8)) (br_if $l3 (i32.const 0)) ) ) (loop $l4 (block $b4 (br_if $l4 (i32.const 0)) (drop (i32.const 9)) (br_if $b4 (i32.const 0)) (drop (i32.const 10)) ) ) (loop $l5 (block $b5 (drop (i32.const 7)) (br_if $b5 (i32.const 0)) (br_if $l5 (i32.const 0)) ) ) (loop $l6 (block $b6 (br_if $l6 (i32.const 0)) (br_if $b6 (i32.const 0)) (drop (i32.const 10)) ) ) (loop $l7 (block $b7 (drop (i32.const 11)) (br_if $l7 (i32.const 0)) (br_if $b7 (i32.const 0)) (drop (i32.const 13)) ) ) (loop $l8 (block $b8 (drop (i32.const 14)) (br_if $b8 (i32.const 0)) (br_if $l8 (i32.const 0)) (drop (i32.const 16)) ) ) (loop $l9 (block $b9 (drop (i32.const 17)) (br_if $l9 (i32.const 0)) (drop (i32.const 18)) (br_if $l9 (i32.const 0)) (drop (i32.const 19)) ) ) (loop $l10 (block $b10 (drop (i32.const 20)) (br_if $l10 (i32.const 0)) (drop (i32.const 21)) ) ) (loop $l11 (block $b11 (br_if $l11 (i32.const 0)) (drop (i32.const 23)) ) ) (loop $l12 (block $b12 (drop (i32.const 24)) (br_if $l12 (i32.const 0)) ) ) ) ) (module (tag $e (param i32)) (func $foo) ;; 'nop' within 'block' of `throw' can be hoisted (func $throw (throw $e (block (result i32) (nop) (i32.const 3) ) ) ) ) binaryen-version_108/test/passes/remove-unused-names_precompute.txt000066400000000000000000000005571423707623100261340ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (memory $0 256 256) (func $__ZN10WasmAssertC2Ev__async_cb (param $$0 i32) (block $switch-default (nop) (block (i32.store (i32.const 12) (i32.const 26) ) (return) ) ) (block (local.set $$0 (i32.const 4) ) (i32.store (local.get $$0) (i32.const 1) ) ) ) ) binaryen-version_108/test/passes/remove-unused-names_precompute.wast000066400000000000000000000006361423707623100262710ustar00rootroot00000000000000(module (memory $0 256 256) (func $__ZN10WasmAssertC2Ev__async_cb (param $$0 i32) (block $switch-default (block $switch-case (br_table $switch-case $switch-default (i32.const 0) ) ) (block (i32.store (i32.const 12) (i32.const 26) ) (return) ) ) (block (local.set $$0 (i32.const 4) ) (i32.store (local.get $$0) (i32.const 1) ) ) ) ) binaryen-version_108/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt000066400000000000000000000103161423707623100307050ustar00rootroot00000000000000(module (type $4 (func (param i32))) (type $2 (func (param i32 i32) (result i32))) (type $5 (func (result i32))) (type $0 (func (param i32 i32 i32) (result i32))) (type $6 (func)) (type $7 (func (param i32 i32))) (type $1 (func (param f64) (result i32))) (type $13 (func (param i32 i32 i32 i32 i32))) (type $i32_=>_i64 (func (param i32) (result i64))) (import "env" "memory" (memory $0 256)) (import "env" "table" (table $timport$0 18 18 funcref)) (import "env" "ABORT" (global $import$2 i32)) (import "env" "STACKTOP" (global $import$3 i32)) (import "env" "STACK_MAX" (global $import$4 i32)) (import "global" "NaN" (global $import$5 f64)) (import "global" "Infinity" (global $import$6 f64)) (import "env" "memoryBase" (global $import$32 i32)) (import "env" "tableBase" (global $import$33 i32)) (import "env" "enlargeMemory" (func $import$7 (result i32))) (import "env" "getTotalMemory" (func $import$8 (result i32))) (import "env" "abortOnCannotGrowMemory" (func $import$9 (result i32))) (import "env" "abortStackOverflow" (func $import$10 (param i32))) (import "env" "nullFunc_ii" (func $import$11 (param i32))) (import "env" "nullFunc_iiii" (func $import$12 (param i32))) (import "env" "nullFunc_vi" (func $import$13 (param i32))) (import "env" "_pthread_cleanup_pop" (func $import$14 (param i32))) (import "env" "___lock" (func $import$15 (param i32))) (import "env" "_abort" (func $import$16)) (import "env" "___setErrNo" (func $import$17 (param i32))) (import "env" "___syscall6" (func $import$18 (param i32 i32) (result i32))) (import "env" "___syscall140" (func $import$19 (param i32 i32) (result i32))) (import "env" "_pthread_cleanup_push" (func $import$20 (param i32 i32))) (import "env" "_emscripten_memcpy_big" (func $import$21 (param i32 i32 i32) (result i32))) (import "env" "___syscall54" (func $import$22 (param i32 i32) (result i32))) (import "env" "___unlock" (func $import$23 (param i32))) (import "env" "___syscall146" (func $import$24 (param i32 i32) (result i32))) (import "asm2wasm" "f64-to-int" (func $import$25 (param f64) (result i32))) (import "asm2wasm" "i32s-div" (func $import$26 (param i32 i32) (result i32))) (import "asm2wasm" "i32s-rem" (func $import$27 (param i32 i32) (result i32))) (import "asm2wasm" "i32u-rem" (func $import$28 (param i32 i32) (result i32))) (import "asm2wasm" "i32u-div" (func $import$29 (param i32 i32) (result i32))) (global $global$2 (mut i32) (global.get $import$2)) (global $global$3 (mut i32) (global.get $import$3)) (global $global$4 (mut i32) (global.get $import$4)) (global $global$5 (mut i32) (i32.const 0)) (global $global$6 (mut i32) (i32.const 0)) (global $global$7 (mut i32) (i32.const 0)) (global $global$8 (mut i32) (i32.const 0)) (global $global$9 (mut f64) (global.get $import$5)) (global $global$10 (mut f64) (global.get $import$6)) (global $global$11 (mut i32) (i32.const 0)) (global $global$12 (mut i32) (i32.const 0)) (global $global$13 (mut i32) (i32.const 0)) (global $global$14 (mut i32) (i32.const 0)) (global $global$15 (mut f64) (f64.const 0)) (global $global$16 (mut i32) (i32.const 0)) (global $global$17 (mut i32) (i32.const 0)) (global $global$18 (mut i32) (i32.const 0)) (global $global$19 (mut f64) (f64.const 0)) (global $global$20 (mut i32) (i32.const 0)) (global $global$21 (mut f32) (f32.const 0)) (global $global$22 (mut f32) (f32.const 0)) (func $27 (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (local $var$5 i32) (local $var$6 i32) (local $var$7 i32) (local $var$8 i32) (if (local.get $var$4) (block $label$3 (block (if (i32.eqz (local.get $var$8) ) (if (i32.eqz (local.get $var$6) ) (br $label$3) ) ) (drop (call $23 (local.get $var$7) (local.get $var$4) (local.get $var$0) ) ) ) ) ) ) (func $23 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (unreachable) ) (func $unexitable-loops-result (param $0 i32) (result i64) (loop $label$0 (loop $label$1 (br_if $label$0 (i32.load8_s (i32.const 201460482) ) ) (block (br_if $label$1 (local.get $0) ) (br $label$1) ) ) ) ) ) binaryen-version_108/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast000066400000000000000000000130161423707623100310440ustar00rootroot00000000000000(module (type $0 (func (param i32 i32 i32) (result i32))) (type $1 (func (param f64) (result i32))) (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32) (result i32))) (type $4 (func (param i32))) (type $5 (func (result i32))) (type $6 (func)) (type $7 (func (param i32 i32))) (type $8 (func (param i64 i32 i32))) (type $9 (func (param i64 i64) (result i64))) (type $10 (func (param i32 i32 i32 i32 i32) (result i32))) (type $11 (func (param i32 i32 i32))) (type $12 (func (param i64 i32) (result i32))) (type $13 (func (param i32 i32 i32 i32 i32))) (type $14 (func (param f64 i32) (result f64))) (type $15 (func (param i32 i32 i32 i32) (result i32))) (import "env" "ABORT" (global $import$2 i32)) (import "env" "STACKTOP" (global $import$3 i32)) (import "env" "STACK_MAX" (global $import$4 i32)) (import "global" "NaN" (global $import$5 f64)) (import "global" "Infinity" (global $import$6 f64)) (import "env" "enlargeMemory" (func $import$7 (result i32))) (import "env" "getTotalMemory" (func $import$8 (result i32))) (import "env" "abortOnCannotGrowMemory" (func $import$9 (result i32))) (import "env" "abortStackOverflow" (func $import$10 (param i32))) (import "env" "nullFunc_ii" (func $import$11 (param i32))) (import "env" "nullFunc_iiii" (func $import$12 (param i32))) (import "env" "nullFunc_vi" (func $import$13 (param i32))) (import "env" "_pthread_cleanup_pop" (func $import$14 (param i32))) (import "env" "___lock" (func $import$15 (param i32))) (import "env" "_abort" (func $import$16)) (import "env" "___setErrNo" (func $import$17 (param i32))) (import "env" "___syscall6" (func $import$18 (param i32 i32) (result i32))) (import "env" "___syscall140" (func $import$19 (param i32 i32) (result i32))) (import "env" "_pthread_cleanup_push" (func $import$20 (param i32 i32))) (import "env" "_emscripten_memcpy_big" (func $import$21 (param i32 i32 i32) (result i32))) (import "env" "___syscall54" (func $import$22 (param i32 i32) (result i32))) (import "env" "___unlock" (func $import$23 (param i32))) (import "env" "___syscall146" (func $import$24 (param i32 i32) (result i32))) (import "asm2wasm" "f64-to-int" (func $import$25 (param f64) (result i32))) (import "asm2wasm" "i32s-div" (func $import$26 (param i32 i32) (result i32))) (import "asm2wasm" "i32s-rem" (func $import$27 (param i32 i32) (result i32))) (import "asm2wasm" "i32u-rem" (func $import$28 (param i32 i32) (result i32))) (import "asm2wasm" "i32u-div" (func $import$29 (param i32 i32) (result i32))) (import "env" "memory" (memory $0 256)) (import "env" "table" (table 18 18 funcref)) (import "env" "memoryBase" (global $import$32 i32)) (import "env" "tableBase" (global $import$33 i32)) (global $global$2 (mut i32) (global.get $import$2)) (global $global$3 (mut i32) (global.get $import$3)) (global $global$4 (mut i32) (global.get $import$4)) (global $global$5 (mut i32) (i32.const 0)) (global $global$6 (mut i32) (i32.const 0)) (global $global$7 (mut i32) (i32.const 0)) (global $global$8 (mut i32) (i32.const 0)) (global $global$9 (mut f64) (global.get $import$5)) (global $global$10 (mut f64) (global.get $import$6)) (global $global$11 (mut i32) (i32.const 0)) (global $global$12 (mut i32) (i32.const 0)) (global $global$13 (mut i32) (i32.const 0)) (global $global$14 (mut i32) (i32.const 0)) (global $global$15 (mut f64) (f64.const 0)) (global $global$16 (mut i32) (i32.const 0)) (global $global$17 (mut i32) (i32.const 0)) (global $global$18 (mut i32) (i32.const 0)) (global $global$19 (mut f64) (f64.const 0)) (global $global$20 (mut i32) (i32.const 0)) (global $global$21 (mut f32) (f32.const 0)) (global $global$22 (mut f32) (f32.const 0)) (func $27 (type $13) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (local $var$5 i32) (local $var$6 i32) (local $var$7 i32) (local $var$8 i32) (block $label$0 (block $label$1 (block $label$3 (if (local.get $var$4) (block $label$4 (if (local.get $var$8) (block $label$7 (loop $label$8 (block $label$9 (if (local.get $var$3) (block $label$12 ;; these empty blocks must never be unreachable-typed ) (block $label$13 (br $label$9) ) ) (br $label$8) ) ) ) (block $label$16 (if (local.get $var$6) (block $label$17 ) (block $label$18 (br $label$3) ) ) ) ) (drop (call $23 (local.get $var$7) (local.get $var$4) (local.get $var$0) ) ) ) ) ) ) ) ) (func $23 (param i32) (param i32) (param i32) (result i32) (unreachable) ) (func $unexitable-loops-result (param $0 i32) (result i64) (loop $label$0 (loop $label$1 (if (i32.load8_s (i32.const 201460482) ) (br $label$0) (block $label$3 (br_if $label$3 (local.get $0) ) ) ) (br $label$1) ) ) ) ) binaryen-version_108/test/passes/remove-unused-names_vacuum.txt000066400000000000000000000011101423707623100252330ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (func $return-i32-but-body-is-unreachable3 (result i32) (local $label i32) (loop $while-in$1 (br $while-in$1) ) ) (func $return-i32-but-body-is-unreachable4 (result i32) (local $label i32) (loop $while-in$1 (br $while-in$1) ) ) (func $to-drop-unreachable (drop (unreachable) ) ) (func $return-i32-but-body-is-unreachable5 (result i32) (local $label i32) (unreachable) ) (func $return-i32-but-body-is-unreachable6 (result i32) (local $label i32) (unreachable) ) ) binaryen-version_108/test/passes/remove-unused-names_vacuum.wast000066400000000000000000000016151423707623100254040ustar00rootroot00000000000000(module (func $return-i32-but-body-is-unreachable3 (result i32) (local $label i32) (block ;; without a name here, vaccum had a too-eager bug (loop $while-in$1 (br $while-in$1) ) ) ) (func $return-i32-but-body-is-unreachable4 (result i32) (local $label i32) (block ;; without a name here, vaccum had a too-eager bug (loop $while-in$1 (br $while-in$1) ) ) (i32.const 0) ) (func $to-drop-unreachable (drop (block (result i32) (unreachable) ) ) ) (func $return-i32-but-body-is-unreachable5 (result i32) (local $label i32) (block ;; without a name here, vaccum had a too-eager bug (unreachable) ) ) (func $return-i32-but-body-is-unreachable6 (result i32) (local $label i32) (block ;; without a name here, vaccum had a too-eager bug (unreachable) ) (i32.const 0) ) ) binaryen-version_108/test/passes/remove-unused-names_vacuum_ignore-implicit-traps.txt000066400000000000000000000036731423707623100315550ustar00rootroot00000000000000(module (type $FUNCSIG$vj (func (param i32 i32))) (type $FUNCSIG$i (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_f32 (func (result f32))) (type $f32_=>_none (func (param f32))) (type $none_=>_f64 (func (result f64))) (type $f64_=>_none (func (param f64))) (type $none_=>_i64 (func (result i64))) (type $i64_=>_none (func (param i64))) (type $0 (func)) (import "env" "wasm2js_scratch_load_i32" (func $wasm2js_scratch_load_i32 (param i32) (result i32))) (import "env" "wasm2js_scratch_store_i32" (func $wasm2js_scratch_store_i32 (param i32 i32))) (import "env" "wasm2js_scratch_load_f32" (func $wasm2js_scratch_load_f32 (result f32))) (import "env" "wasm2js_scratch_store_f32" (func $wasm2js_scratch_store_f32 (param f32))) (import "env" "wasm2js_scratch_load_f64" (func $wasm2js_scratch_load_f64 (result f64))) (import "env" "wasm2js_scratch_store_f64" (func $wasm2js_scratch_store_f64 (param f64))) (import "env" "getTempRet0" (func $getTempRet0 (result i32))) (import "env" "wasm2js_scratch_load_i64" (func $legalimport$wasm2js_scratch_load_i64 (result i32))) (import "env" "wasm2js_scratch_store_i64" (func $legalimport$wasm2js_scratch_store_i64 (param i32 i32))) (import "env" "wasm2js_scratch_load_i64" (func $wasm2js_scratch_load_i64 (result i64))) (import "env" "wasm2js_scratch_store_i64" (func $wasm2js_scratch_store_i64 (param i64))) (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0)) (memory $0 1 1) (func $0 (local $0 f64) (local $1 i32) (nop) ) (func $legalfunc$wasm2js_scratch_load_i64 (result i32) (local $0 i32) (local $1 i32) (local.set $1 (i32.or (call $legalimport$wasm2js_scratch_load_i64) (i32.const 0) ) ) (global.set $i64toi32_i32$HIGH_BITS (call $getTempRet0) ) (local.get $1) ) (func $legalfunc$wasm2js_scratch_store_i64 (param $0 i32) (param $1 i32) (call $legalimport$wasm2js_scratch_store_i64 (local.get $0) (local.get $1) ) ) ) binaryen-version_108/test/passes/remove-unused-names_vacuum_ignore-implicit-traps.wast000066400000000000000000000044751423707623100317150ustar00rootroot00000000000000(module (type $0 (func)) (type $FUNCSIG$j (func (result i32))) (type $FUNCSIG$i (func (result i32))) (type $legaltype$wasm2js_scratch_load_i64 (func (result i32))) (type $FUNCSIG$vj (func (param i32 i32))) (type $legaltype$wasm2js_scratch_store_i64 (func (param i32 i32))) (import "env" "wasm2js_scratch_load_i32" (func $wasm2js_scratch_load_i32 (param i32) (result i32))) (import "env" "wasm2js_scratch_store_i32" (func $wasm2js_scratch_store_i32 (param i32 i32))) (import "env" "wasm2js_scratch_load_f32" (func $wasm2js_scratch_load_f32 (result f32))) (import "env" "wasm2js_scratch_store_f32" (func $wasm2js_scratch_store_f32 (param f32))) (import "env" "wasm2js_scratch_load_f64" (func $wasm2js_scratch_load_f64 (result f64))) (import "env" "wasm2js_scratch_store_f64" (func $wasm2js_scratch_store_f64 (param f64))) (import "env" "getTempRet0" (func $getTempRet0 (result i32))) (import "env" "wasm2js_scratch_load_i64" (func $legalimport$wasm2js_scratch_load_i64 (result i32))) (import "env" "wasm2js_scratch_store_i64" (func $legalimport$wasm2js_scratch_store_i64 (param i32 i32))) (import "env" "wasm2js_scratch_load_i64" (func $wasm2js_scratch_load_i64 (result i64))) (import "env" "wasm2js_scratch_store_i64" (func $wasm2js_scratch_store_i64 (param i64))) (memory $0 1 1) (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0)) (func $0 (; 11 ;) (type $0) (local $0 f64) (local $1 i32) (block $label$1 (block (nop) (drop (if (result f64) (i32.const 1) (block (result f64) (nop) (f64.load (i32.const 19) ) ) (block (drop (f64.const 1) ) (br $label$1) (nop) ) ) ) ) (nop) ) ) (func $legalfunc$wasm2js_scratch_load_i64 (; 12 ;) (result i32) (local $0 i32) (local $1 i32) (local.set $1 (i32.or (call $legalimport$wasm2js_scratch_load_i64) (block (result i32) (nop) (block (result i32) (nop) (i32.const 0) ) ) ) ) (global.set $i64toi32_i32$HIGH_BITS (call $getTempRet0) ) (local.get $1) ) (func $legalfunc$wasm2js_scratch_store_i64 (; 13 ;) (param $0 i32) (param $1 i32) (call $legalimport$wasm2js_scratch_store_i64 (block (result i32) (nop) (local.get $0) ) (block (result i32) (nop) (local.get $1) ) ) ) ) binaryen-version_108/test/passes/remove-unused-nonfunction-module-elements_all-features.txt000066400000000000000000000134621423707623100326660ustar00rootroot00000000000000(module (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (param i32) (result i32))) (memory $0 0) (table $0 1 1 funcref) (elem (i32.const 0) $called_indirect) (export "memory" (memory $0)) (export "exported" (func $exported)) (export "other1" (func $other1)) (export "other2" (func $other2)) (start $start) (func $start (call $called0) ) (func $called0 (call $called1) ) (func $called1 (nop) ) (func $called_indirect (nop) ) (func $exported (call $called2) ) (func $called2 (call $called2) (call $called3) ) (func $called3 (call $called4) ) (func $called4 (call $called3) ) (func $remove0 (call $remove1) ) (func $remove1 (nop) ) (func $remove2 (call $remove2) ) (func $remove3 (call $remove4) ) (func $remove4 (call $remove3) ) (func $other1 (param $0 i32) (call_indirect $0 (type $0) (i32.const 0) ) (call_indirect $0 (type $0) (i32.const 0) ) (call_indirect $0 (type $0) (i32.const 0) ) (call_indirect $0 (type $0) (i32.const 0) ) (call_indirect $0 (type $1) (i32.const 0) (i32.const 0) ) (call_indirect $0 (type $1) (i32.const 0) (i32.const 0) ) (drop (call_indirect $0 (type $2) (i32.const 0) (i32.const 0) ) ) (drop (call_indirect $0 (type $2) (i32.const 0) (i32.const 0) ) ) (drop (call_indirect $0 (type $2) (i32.const 0) (i32.const 0) ) ) ) (func $other2 (param $0 i32) (unreachable) ) ) (module ) (module ) (module (import "env" "memory" (memory $0 256)) (import "env" "table" (table $timport$0 1 funcref)) (export "mem" (memory $0)) (export "tab" (table $timport$0)) ) (module (type $none_=>_none (func)) (import "env" "memory" (memory $0 256)) (data (i32.const 1) "hello, world!") (import "env" "table" (table $timport$0 1 funcref)) (elem (i32.const 0) $waka) (func $waka (nop) ) ) (module (type $0 (func)) (import "env" "memory" (memory $0 256)) (import "env" "table" (table $timport$0 0 funcref)) (export "user" (func $user)) (func $user (drop (i32.load (i32.const 0) ) ) (call_indirect $timport$0 (type $0) (i32.const 0) ) ) ) (module (type $none_=>_none (func)) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (i32.store (i32.const 0) (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (result i32) (i32.atomic.rmw.add (i32.const 0) (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (result i32) (i32.atomic.rmw8.cmpxchg_u (i32.const 0) (i32.const 0) (i32.const 0) ) ) ) (module (type $none_=>_none (func)) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (local $0 i32) (local $1 i64) (drop (memory.atomic.wait32 (local.get $0) (local.get $0) (local.get $1) ) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 23 256)) (export "user" (func $user)) (func $user (result i32) (memory.atomic.notify (i32.const 0) (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 23 256) (export "user" (func $user)) (func $user (result i32) (memory.grow (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (import "env" "memory" (memory $0 256)) (export "user" (func $user)) (func $user (result i32) (memory.grow (i32.const 0) ) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 23 256) (export "user" (func $user)) (func $user (result i32) (memory.size) ) ) (module (type $none_=>_none (func)) (import "env" "memory" (memory $0 256)) (data (global.get $memoryBase) "hello, world!") (import "env" "table" (table $timport$0 0 funcref)) (import "env" "memoryBase" (global $memoryBase i32)) (import "env" "tableBase" (global $tableBase i32)) (elem (global.get $tableBase) $waka) (func $waka (nop) ) ) (module (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "imported" (global $imported i32)) (import "env" "_puts" (func $_puts (param i32) (result i32))) (global $int (mut i32) (global.get $imported)) (global $set (mut i32) (i32.const 100)) (global $exp_glob i32 (i32.const 600)) (export "one" (func $one)) (export "three" (func $three)) (export "exp_glob" (global $exp_glob)) (func $one (result i32) (call $two) ) (func $two (result i32) (global.get $int) ) (func $three (call $four) ) (func $four (global.set $set (i32.const 200) ) (drop (call $_puts (i32.const 300) ) ) ) (func $forget_implemented (nop) ) (func $starter (nop) ) ) (module (type $none_=>_none (func)) (func $starter (nop) ) ) (module (type $none_=>_none (func)) (start $starter) (func $starter (drop (i32.const 0) ) ) ) (module (type $0 (func (param f64) (result f64))) (func $0 (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (f64.const 1) (f64.const 0) ) ) ) (module (type $0 (func (param f64) (result f64))) (table $0 6 6 funcref) (func $0 (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (call_indirect $0 (type $0) (f64.const 1) (i32.const 0) ) (f64.const 0) ) ) ) (module (type $0 (func (param f64) (result f64))) (import "env" "table" (table $timport$0 6 6 funcref)) (elem (i32.const 0) $0) (func $0 (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (f64.const 1) (f64.const 0) ) ) ) (module (type $i64_=>_none (func (param i64))) (type $0 (func (param i32))) (tag $e1 (param i64)) (export "e1" (tag $e1)) (func $f (param $0 i32) (nop) ) ) binaryen-version_108/test/passes/remove-unused-nonfunction-module-elements_all-features.wast000066400000000000000000000147451423707623100330320ustar00rootroot00000000000000(module (memory 0) (start $start) (type $0 (func)) (type $0-dupe (func)) (type $1 (func (param i32))) (type $1-dupe (func (param i32))) (type $2 (func (param i32) (result i32))) (type $2-dupe (func (param i32) (result i32))) (type $2-thrupe (func (param i32) (result i32))) (export "memory" (memory $0)) (export "exported" $exported) (export "other1" $other1) (export "other2" $other2) (table 1 1 funcref) (elem (i32.const 0) $called_indirect) (func $start (type $0) (call $called0) ) (func $called0 (type $0) (call $called1) ) (func $called1 (type $0) (nop) ) (func $called_indirect (type $0) (nop) ) (func $exported (type $0-dupe) (call $called2) ) (func $called2 (type $0-dupe) (call $called2) (call $called3) ) (func $called3 (type $0-dupe) (call $called4) ) (func $called4 (type $0-dupe) (call $called3) ) (func $remove0 (type $0-dupe) (call $remove1) ) (func $remove1 (type $0-dupe) (nop) ) (func $remove2 (type $0-dupe) (call $remove2) ) (func $remove3 (type $0) (call $remove4) ) (func $remove4 (type $0) (call $remove3) ) (func $other1 (type $1) (param i32) (call_indirect (type $0) (i32.const 0)) (call_indirect (type $0) (i32.const 0)) (call_indirect (type $0-dupe) (i32.const 0)) (call_indirect (type $0-dupe) (i32.const 0)) (call_indirect (type $1) (i32.const 0) (i32.const 0)) (call_indirect (type $1-dupe) (i32.const 0) (i32.const 0)) (drop (call_indirect (type $2) (i32.const 0) (i32.const 0))) (drop (call_indirect (type $2-dupe) (i32.const 0) (i32.const 0))) (drop (call_indirect (type $2-thrupe) (i32.const 0) (i32.const 0))) ) (func $other2 (type $1-dupe) (param i32) (unreachable) ) ) (module ;; remove the table and memory (import "env" "memory" (memory $0 256)) (import "env" "table" (table 0 funcref)) ) (module ;; also when not imported (memory 256) (table 1 funcref) ) (module ;; but not when exported (import "env" "memory" (memory $0 256)) (import "env" "table" (table 1 funcref)) (export "mem" (memory 0)) (export "tab" (table 0)) ) (module ;; and not when there are segments (import "env" "memory" (memory $0 256)) (import "env" "table" (table 1 funcref)) (data (i32.const 1) "hello, world!") (elem (i32.const 0) $waka) (func $waka) ) (module ;; and not when used (type $0 (func)) (import "env" "memory" (memory $0 256)) (import "env" "table" (table 0 funcref)) (export "user" $user) (func $user (drop (i32.load (i32.const 0))) (call_indirect (type $0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (i32.store (i32.const 0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (result i32) (i32.atomic.rmw.add (i32.const 0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (result i32) (i32.atomic.rmw8.cmpxchg_u (i32.const 0) (i32.const 0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (local $0 i32) (local $1 i64) (drop (memory.atomic.wait32 (local.get $0) (local.get $0) (local.get $1) ) ) ) ) (module ;; more use checks (memory $0 (shared 23 256)) (export "user" $user) (func $user (result i32) (memory.atomic.notify (i32.const 0) (i32.const 0)) ) ) (module ;; more use checks (memory $0 23 256) (export "user" $user) (func $user (result i32) (memory.grow (i32.const 0)) ) ) (module ;; more use checks (import "env" "memory" (memory $0 256)) (export "user" $user) (func $user (result i32) (memory.grow (i32.const 0)) ) ) (module ;; more use checks (memory $0 23 256) (export "user" $user) (func $user (result i32) (memory.size) ) ) (module (import "env" "memory" (memory $0 256)) (import "env" "table" (table 0 funcref)) (import "env" "memoryBase" (global $memoryBase i32)) ;; used in init (import "env" "tableBase" (global $tableBase i32)) ;; used in init (data (global.get $memoryBase) "hello, world!") (elem (global.get $tableBase) $waka) (func $waka) ;; used in table ) (module ;; one is exported, and one->two->int global, whose init->imported (import "env" "imported" (global $imported i32)) (import "env" "forgetme" (global $forgetme i32)) (import "env" "_puts" (func $_puts (param i32) (result i32))) (import "env" "forget_puts" (func $forget_puts (param i32) (result i32))) (global $int (mut i32) (global.get $imported)) (global $set (mut i32) (i32.const 100)) (global $forglobal.get (mut i32) (i32.const 500)) (global $exp_glob i32 (i32.const 600)) (export "one" (func $one)) (export "three" (func $three)) (export "exp_glob" (global $exp_glob)) (start $starter) (func $one (result i32) (call $two) ) (func $two (result i32) (global.get $int) ) (func $three (call $four) ) (func $four (global.set $set (i32.const 200)) (drop (call $_puts (i32.const 300))) ) (func $forget_implemented (nop) ) (func $starter (nop) ) ) (module ;; empty start being removed (start $starter) (func $starter (nop) ) ) (module ;; non-empty start being kept (start $starter) (func $starter (drop (i32.const 0)) ) ) (module ;; the function stays but the table can be removed (type $0 (func (param f64) (result f64))) (table 6 6 funcref) (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (f64.const 1) (f64.const 0) ) ) ) (module ;; the function keeps the table alive (type $0 (func (param f64) (result f64))) (table 6 6 funcref) (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (call_indirect (type $0) (f64.const 1) (i32.const 0)) (f64.const 0) ) ) ) (module ;; the table is imported - we can't remove it (type $0 (func (param f64) (result f64))) (import "env" "table" (table 6 6 funcref)) (elem (i32.const 0) $0) (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64) (if (result f64) (f64.eq (f64.const 1) (f64.const 1) ) (f64.const 1) (f64.const 0) ) ) ) (module ;; non-exported tags can be removed (type $0 (func (param i32))) (tag $e0 (type $0)) (tag $e1 (param i64)) (export "e1" (tag $e1)) (import "env" "e" (tag $e2 (param i32))) (func $f (; 0 ;) (type $0)) ) binaryen-version_108/test/passes/reorder-functions.txt000066400000000000000000000002401423707623100234270ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 256 256) (func $c (call $c) (call $c) (call $c) ) (func $b (call $b) (call $b) ) (func $a (call $a) ) ) binaryen-version_108/test/passes/reorder-functions.wast000066400000000000000000000003171423707623100235730ustar00rootroot00000000000000(module (memory 256 256) (type $0 (func)) (func $a (type $0) (call $a) ) (func $b (type $0) (call $b) (call $b) ) (func $c (type $0) (call $c) (call $c) (call $c) ) ) binaryen-version_108/test/passes/reorder-locals.txt000066400000000000000000000013251423707623100227010ustar00rootroot00000000000000(module (type $1 (func)) (type $0 (func (param i32 i32))) (memory $0 256 256) (func $b0-yes (param $a i32) (param $b i32) (local $z i32) (local $y i32) (local $x i32) (local.set $x (local.get $x) ) (local.set $y (local.get $y) ) (local.set $y (local.get $y) ) (local.set $z (local.get $z) ) (local.set $z (local.get $z) ) (local.set $z (local.get $z) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) ) (func $zero (local $b i32) (drop (local.get $b) ) ) (func $null (nop) ) ) binaryen-version_108/test/passes/reorder-locals.wast000066400000000000000000000016521423707623100230430ustar00rootroot00000000000000(module (memory 256 256) (type $0 (func (param i32 i32))) (type $1 (func)) (func $b0-yes (type $0) (param $a i32) (param $b i32) (local $x i32) (local $y i32) (local $z i32) (local.set $x (local.get $x) ) (local.set $y (local.get $y) ) (local.set $y (local.get $y) ) (local.set $z (local.get $z) ) (local.set $z (local.get $z) ) (local.set $z (local.get $z) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) (local.set $b (local.get $b) ) ) (func $zero (type $1) (local $a i32) (local $b i32) (local $c i32) (drop (local.get $b) ) ) (func $null (type $1) (local $a i32) (local $c i32) (nop) ) ) binaryen-version_108/test/passes/reorder-locals_print_roundtrip.txt000066400000000000000000000011621423707623100262220ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $a (local $x i32) (local $y f64) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $y) ) ) (func $b (local $y f64) (local $x i32) (drop (local.get $x) ) (drop (local.get $y) ) (drop (local.get $y) ) ) ) (module (type $none_=>_none (func)) (func $a (local $x i32) (local $y f64) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $y) ) ) (func $b (local $y f64) (local $x i32) (drop (local.get $x) ) (drop (local.get $y) ) (drop (local.get $y) ) ) ) binaryen-version_108/test/passes/reorder-locals_print_roundtrip.wast000066400000000000000000000006351423707623100263650ustar00rootroot00000000000000(module (func $a (local $x i32) (local $y f64) ;; x appears twice (drop (local.get $x)) (drop (local.get $x)) (drop (local.get $y)) ) (func $b (local $x i32) (local $y f64) ;; y appears twice, so it will be reordered to be first, and that should be ;; preserved in the binary format (drop (local.get $x)) (drop (local.get $y)) (drop (local.get $y)) ) ) binaryen-version_108/test/passes/reverse_dwarf_abbrevs.bin.txt000066400000000000000000001453341423707623100251060ustar00rootroot00000000000000DWARF debug info ================ Contains section .debug_info (79 bytes) Contains section .debug_abbrev (64 bytes) Contains section .debug_line (53 bytes) Contains section .debug_str (206 bytes) .debug_abbrev contents: Abbrev table for offset: 0x00000000 [1] DW_TAG_base_type DW_CHILDREN_no DW_AT_name DW_FORM_strp DW_AT_encoding DW_FORM_data1 DW_AT_byte_size DW_FORM_data1 [2] DW_TAG_GNU_call_site DW_CHILDREN_no DW_AT_low_pc DW_FORM_addr [3] DW_TAG_subprogram DW_CHILDREN_yes DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 DW_AT_frame_base DW_FORM_exprloc DW_AT_GNU_all_call_sites DW_FORM_flag_present DW_AT_name DW_FORM_strp DW_AT_decl_file DW_FORM_data1 DW_AT_decl_line DW_FORM_data1 DW_AT_type DW_FORM_ref4 DW_AT_external DW_FORM_flag_present [4] DW_TAG_compile_unit DW_CHILDREN_yes DW_AT_producer DW_FORM_strp DW_AT_language DW_FORM_data2 DW_AT_name DW_FORM_strp DW_AT_stmt_list DW_FORM_sec_offset DW_AT_comp_dir DW_FORM_strp DW_AT_low_pc DW_FORM_addr DW_AT_high_pc DW_FORM_data4 .debug_info contents: 0x00000000: Compile Unit: length = 0x0000004b version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000004f) 0x0000000b: DW_TAG_compile_unit [4] * DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 12.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 576bd52f778405de08f309678e4fe4f7523bf7c4)") DW_AT_language [DW_FORM_data2] (DW_LANG_C99) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "tests/hello_world.c") DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a9] = "/home/azakai/Dev/emscripten") DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_high_pc [DW_FORM_data4] (0x00000000) 0x00000026: DW_TAG_subprogram [3] * DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) DW_AT_high_pc [DW_FORM_data4] (0x00000000) DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 +0, 00 00 9f) DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c5] = "main") DW_AT_decl_file [DW_FORM_data1] ("/home/azakai/Dev/emscripten/tests/hello_world.c") DW_AT_decl_line [DW_FORM_data1] (10) DW_AT_type [DW_FORM_ref4] (cu + 0x0047 => {0x00000047} "int") DW_AT_external [DW_FORM_flag_present] (true) 0x00000041: DW_TAG_GNU_call_site [2] DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) 0x00000046: NULL 0x00000047: DW_TAG_base_type [1] DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ca] = "int") DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) DW_AT_byte_size [DW_FORM_data1] (0x04) 0x0000004e: NULL .debug_line contents: debug_line[0x00000000] Line table prologue: total_length: 0x00000031 version: 4 prologue_length: 0x0000002b min_inst_length: 1 max_ops_per_inst: 1 default_is_stmt: 1 line_base: -5 line_range: 14 opcode_base: 13 standard_opcode_lengths[DW_LNS_copy] = 0 standard_opcode_lengths[DW_LNS_advance_pc] = 1 standard_opcode_lengths[DW_LNS_advance_line] = 1 standard_opcode_lengths[DW_LNS_set_file] = 1 standard_opcode_lengths[DW_LNS_set_column] = 1 standard_opcode_lengths[DW_LNS_negate_stmt] = 0 standard_opcode_lengths[DW_LNS_set_basic_block] = 0 standard_opcode_lengths[DW_LNS_const_add_pc] = 0 standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 standard_opcode_lengths[DW_LNS_set_isa] = 1 include_directories[ 1] = "tests" file_names[ 1]: name: "hello_world.c" dir_index: 1 mod_time: 0x00000000 length: 0x00000000 .debug_str contents: 0x00000000: "clang version 12.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 576bd52f778405de08f309678e4fe4f7523bf7c4)" 0x00000095: "tests/hello_world.c" 0x000000a9: "/home/azakai/Dev/emscripten" 0x000000c5: "main" 0x000000ca: "int" (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i64_i32_=>_i64 (func (param i32 i64 i32) (result i64))) (type $none_=>_none (func)) (type $i32_i32_i64_i32_=>_i64 (func (param i32 i32 i64 i32) (result i64))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (import "env" "memory" (memory $mimport$0 256 256)) (data (i32.const 1024) "hello, world!\00\00\00\18\04") (data (i32.const 1048) "\05") (data (i32.const 1060) "\01") (data (i32.const 1084) "\02\00\00\00\03\00\00\00\c8\04\00\00\00\04") (data (i32.const 1108) "\01") (data (i32.const 1123) "\n\ff\ff\ff\ff") (import "env" "__indirect_function_table" (table $timport$0 4 funcref)) (import "wasi_snapshot_preview1" "fd_write" (func $fimport$0 (param i32 i32 i32 i32) (result i32))) (import "env" "emscripten_memcpy_big" (func $fimport$1 (param i32 i32 i32) (result i32))) (import "env" "setTempRet0" (func $fimport$2 (param i32))) (global $global$0 (mut i32) (i32.const 5245136)) (global $global$1 i32 (i32.const 2248)) (elem (i32.const 1) $6 $5 $7) (export "__wasm_call_ctors" (func $0)) (export "main" (func $2)) (export "__errno_location" (func $3)) (export "stackSave" (func $18)) (export "stackRestore" (func $19)) (export "stackAlloc" (func $20)) (export "__data_end" (global $global$1)) (export "dynCall_jiji" (func $22)) (export "__growWasmMemory" (func $23)) (func $0 ;; code offset: 0x3 (nop) ) (func $1 (result i32) ;; code offset: 0xc (drop ;; code offset: 0xa (call $14 ;; code offset: 0x7 (i32.const 1024) ) ) ;; code offset: 0xd (i32.const 0) ) (func $2 (param $0 i32) (param $1 i32) (result i32) ;; code offset: 0x12 (call $1) ) (func $3 (result i32) ;; code offset: 0x17 (i32.const 1200) ) (func $4 (param $0 i32) (result i32) ;; code offset: 0x20 (if ;; code offset: 0x1f (i32.eqz ;; code offset: 0x1d (local.get $0) ) ;; code offset: 0x24 (return ;; code offset: 0x22 (i32.const 0) ) ) ;; code offset: 0x2a (i32.store ;; code offset: 0x26 (call $3) ;; code offset: 0x28 (local.get $0) ) ;; code offset: 0x2d (i32.const -1) ) (func $5 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) ;; code offset: 0x48 (global.set $global$0 ;; code offset: 0x46 (local.tee $3 ;; code offset: 0x45 (i32.sub ;; code offset: 0x41 (global.get $global$0) ;; code offset: 0x43 (i32.const 32) ) ) ) ;; code offset: 0x53 (i32.store offset=16 ;; code offset: 0x4a (local.get $3) ;; code offset: 0x51 (local.tee $4 ;; code offset: 0x4e (i32.load offset=28 ;; code offset: 0x4c (local.get $0) ) ) ) ;; code offset: 0x5b (local.set $5 ;; code offset: 0x58 (i32.load offset=20 ;; code offset: 0x56 (local.get $0) ) ) ;; code offset: 0x61 (i32.store offset=28 ;; code offset: 0x5d (local.get $3) ;; code offset: 0x5f (local.get $2) ) ;; code offset: 0x68 (i32.store offset=24 ;; code offset: 0x64 (local.get $3) ;; code offset: 0x66 (local.get $1) ) ;; code offset: 0x74 (i32.store offset=20 ;; code offset: 0x6b (local.get $3) ;; code offset: 0x72 (local.tee $1 ;; code offset: 0x71 (i32.sub ;; code offset: 0x6d (local.get $5) ;; code offset: 0x6f (local.get $4) ) ) ) ;; code offset: 0x7c (local.set $6 ;; code offset: 0x7b (i32.add ;; code offset: 0x77 (local.get $1) ;; code offset: 0x79 (local.get $2) ) ) ;; code offset: 0x80 (local.set $7 ;; code offset: 0x7e (i32.const 2) ) ;; code offset: 0x87 (local.set $1 ;; code offset: 0x86 (i32.add ;; code offset: 0x82 (local.get $3) ;; code offset: 0x84 (i32.const 16) ) ) ;; code offset: 0x18d (local.set $4 ;; code offset: 0x89 (block $label$1 (result i32) (block $label$2 (block $label$3 ;; code offset: 0xa5 (if ;; code offset: 0xa4 (i32.eqz ;; code offset: 0xa2 (call $4 ;; code offset: 0xa0 (call $fimport$0 ;; code offset: 0x91 (i32.load offset=60 ;; code offset: 0x8f (local.get $0) ) ;; code offset: 0x98 (i32.add ;; code offset: 0x94 (local.get $3) ;; code offset: 0x96 (i32.const 16) ) ;; code offset: 0x99 (i32.const 2) ;; code offset: 0x9f (i32.add ;; code offset: 0x9b (local.get $3) ;; code offset: 0x9d (i32.const 12) ) ) ) ) ;; code offset: 0xa7 (loop $label$5 ;; code offset: 0xb3 (br_if $label$3 ;; code offset: 0xb2 (i32.eq ;; code offset: 0xa9 (local.get $6) ;; code offset: 0xb0 (local.tee $4 ;; code offset: 0xad (i32.load offset=12 ;; code offset: 0xab (local.get $3) ) ) ) ) ;; code offset: 0xba (br_if $label$2 ;; code offset: 0xb9 (i32.le_s ;; code offset: 0xb5 (local.get $4) ;; code offset: 0xb7 (i32.const -1) ) ) ;; code offset: 0xe2 (i32.store ;; code offset: 0xce (local.tee $9 ;; code offset: 0xcd (i32.add ;; code offset: 0xbc (local.get $1) ;; code offset: 0xcc (i32.shl ;; code offset: 0xc8 (local.tee $5 ;; code offset: 0xc7 (i32.gt_u ;; code offset: 0xbe (local.get $4) ;; code offset: 0xc5 (local.tee $8 ;; code offset: 0xc2 (i32.load offset=4 ;; code offset: 0xc0 (local.get $1) ) ) ) ) ;; code offset: 0xca (i32.const 3) ) ) ) ;; code offset: 0xe1 (i32.add ;; code offset: 0xda (local.tee $8 ;; code offset: 0xd9 (i32.sub ;; code offset: 0xd0 (local.get $4) ;; code offset: 0xd8 (select ;; code offset: 0xd2 (local.get $8) ;; code offset: 0xd4 (i32.const 0) ;; code offset: 0xd6 (local.get $5) ) ) ) ;; code offset: 0xde (i32.load ;; code offset: 0xdc (local.get $9) ) ) ) ;; code offset: 0xf9 (i32.store ;; code offset: 0xef (local.tee $9 ;; code offset: 0xee (i32.add ;; code offset: 0xe5 (local.get $1) ;; code offset: 0xed (select ;; code offset: 0xe7 (i32.const 12) ;; code offset: 0xe9 (i32.const 4) ;; code offset: 0xeb (local.get $5) ) ) ) ;; code offset: 0xf8 (i32.sub ;; code offset: 0xf3 (i32.load ;; code offset: 0xf1 (local.get $9) ) ;; code offset: 0xf6 (local.get $8) ) ) ;; code offset: 0x101 (local.set $6 ;; code offset: 0x100 (i32.sub ;; code offset: 0xfc (local.get $6) ;; code offset: 0xfe (local.get $4) ) ) ;; code offset: 0x125 (br_if $label$5 ;; code offset: 0x124 (i32.eqz ;; code offset: 0x122 (call $4 ;; code offset: 0x120 (call $fimport$0 ;; code offset: 0x105 (i32.load offset=60 ;; code offset: 0x103 (local.get $0) ) ;; code offset: 0x112 (local.tee $1 ;; code offset: 0x111 (select ;; code offset: 0x10c (i32.add ;; code offset: 0x108 (local.get $1) ;; code offset: 0x10a (i32.const 8) ) ;; code offset: 0x10d (local.get $1) ;; code offset: 0x10f (local.get $5) ) ) ;; code offset: 0x119 (local.tee $7 ;; code offset: 0x118 (i32.sub ;; code offset: 0x114 (local.get $7) ;; code offset: 0x116 (local.get $5) ) ) ;; code offset: 0x11f (i32.add ;; code offset: 0x11b (local.get $3) ;; code offset: 0x11d (i32.const 12) ) ) ) ) ) ) ) ;; code offset: 0x12d (i32.store offset=12 ;; code offset: 0x129 (local.get $3) ;; code offset: 0x12b (i32.const -1) ) ;; code offset: 0x135 (br_if $label$2 ;; code offset: 0x134 (i32.ne ;; code offset: 0x130 (local.get $6) ;; code offset: 0x132 (i32.const -1) ) ) ) ;; code offset: 0x141 (i32.store offset=28 ;; code offset: 0x138 (local.get $0) ;; code offset: 0x13f (local.tee $1 ;; code offset: 0x13c (i32.load offset=44 ;; code offset: 0x13a (local.get $0) ) ) ) ;; code offset: 0x148 (i32.store offset=20 ;; code offset: 0x144 (local.get $0) ;; code offset: 0x146 (local.get $1) ) ;; code offset: 0x155 (i32.store offset=16 ;; code offset: 0x14b (local.get $0) ;; code offset: 0x154 (i32.add ;; code offset: 0x14d (local.get $1) ;; code offset: 0x151 (i32.load offset=48 ;; code offset: 0x14f (local.get $0) ) ) ) ;; code offset: 0x15a (br $label$1 ;; code offset: 0x158 (local.get $2) ) ) ;; code offset: 0x161 (i32.store offset=28 ;; code offset: 0x15d (local.get $0) ;; code offset: 0x15f (i32.const 0) ) ;; code offset: 0x168 (i64.store offset=16 ;; code offset: 0x164 (local.get $0) ;; code offset: 0x166 (i64.const 0) ) ;; code offset: 0x175 (i32.store ;; code offset: 0x16b (local.get $0) ;; code offset: 0x174 (i32.or ;; code offset: 0x16f (i32.load ;; code offset: 0x16d (local.get $0) ) ;; code offset: 0x172 (i32.const 32) ) ) ;; code offset: 0x183 (drop ;; code offset: 0x181 (br_if $label$1 ;; code offset: 0x17a (local.tee $4 ;; code offset: 0x178 (i32.const 0) ) ;; code offset: 0x180 (i32.eq ;; code offset: 0x17c (local.get $7) ;; code offset: 0x17e (i32.const 2) ) ) ) ;; code offset: 0x18b (i32.sub ;; code offset: 0x184 (local.get $2) ;; code offset: 0x188 (i32.load offset=4 ;; code offset: 0x186 (local.get $1) ) ) ) ) ;; code offset: 0x194 (global.set $global$0 ;; code offset: 0x193 (i32.add ;; code offset: 0x18f (local.get $3) ;; code offset: 0x191 (i32.const 32) ) ) ;; code offset: 0x196 (local.get $4) ) (func $6 (param $0 i32) (result i32) ;; code offset: 0x19b (i32.const 0) ) (func $7 (param $0 i32) (param $1 i64) (param $2 i32) (result i64) ;; code offset: 0x1a0 (i64.const 0) ) (func $8 (param $0 i32) (result i32) (local $1 i32) ;; code offset: 0x1b6 (i32.store8 offset=74 ;; code offset: 0x1a7 (local.get $0) ;; code offset: 0x1b5 (i32.or ;; code offset: 0x1b2 (i32.add ;; code offset: 0x1ae (local.tee $1 ;; code offset: 0x1ab (i32.load8_u offset=74 ;; code offset: 0x1a9 (local.get $0) ) ) ;; code offset: 0x1b0 (i32.const -1) ) ;; code offset: 0x1b3 (local.get $1) ) ) ;; code offset: 0x1c3 (if ;; code offset: 0x1c2 (i32.and ;; code offset: 0x1be (local.tee $1 ;; code offset: 0x1bb (i32.load ;; code offset: 0x1b9 (local.get $0) ) ) ;; code offset: 0x1c0 (i32.const 8) ) (block ;; code offset: 0x1cc (i32.store ;; code offset: 0x1c5 (local.get $0) ;; code offset: 0x1cb (i32.or ;; code offset: 0x1c7 (local.get $1) ;; code offset: 0x1c9 (i32.const 32) ) ) ;; code offset: 0x1d1 (return ;; code offset: 0x1cf (i32.const -1) ) ) ) ;; code offset: 0x1d7 (i64.store offset=4 align=4 ;; code offset: 0x1d3 (local.get $0) ;; code offset: 0x1d5 (i64.const 0) ) ;; code offset: 0x1e3 (i32.store offset=28 ;; code offset: 0x1da (local.get $0) ;; code offset: 0x1e1 (local.tee $1 ;; code offset: 0x1de (i32.load offset=44 ;; code offset: 0x1dc (local.get $0) ) ) ) ;; code offset: 0x1ea (i32.store offset=20 ;; code offset: 0x1e6 (local.get $0) ;; code offset: 0x1e8 (local.get $1) ) ;; code offset: 0x1f7 (i32.store offset=16 ;; code offset: 0x1ed (local.get $0) ;; code offset: 0x1f6 (i32.add ;; code offset: 0x1ef (local.get $1) ;; code offset: 0x1f3 (i32.load offset=48 ;; code offset: 0x1f1 (local.get $0) ) ) ) ;; code offset: 0x1fa (i32.const 0) ) (func $9 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) ;; code offset: 0x20c (if ;; code offset: 0x20b (i32.ge_u ;; code offset: 0x206 (local.get $2) ;; code offset: 0x208 (i32.const 512) ) (block ;; code offset: 0x216 (drop ;; code offset: 0x214 (call $fimport$1 ;; code offset: 0x20e (local.get $0) ;; code offset: 0x210 (local.get $1) ;; code offset: 0x212 (local.get $2) ) ) ;; code offset: 0x219 (return ;; code offset: 0x217 (local.get $0) ) ) ) ;; code offset: 0x220 (local.set $3 ;; code offset: 0x21f (i32.add ;; code offset: 0x21b (local.get $0) ;; code offset: 0x21d (local.get $2) ) ) ;; code offset: 0x222 (block $label$2 ;; code offset: 0x22d (if ;; code offset: 0x22c (i32.eqz ;; code offset: 0x22b (i32.and ;; code offset: 0x228 (i32.xor ;; code offset: 0x224 (local.get $0) ;; code offset: 0x226 (local.get $1) ) ;; code offset: 0x229 (i32.const 3) ) ) (block ;; code offset: 0x22f (block $label$4 ;; code offset: 0x236 (if ;; code offset: 0x235 (i32.lt_s ;; code offset: 0x231 (local.get $2) ;; code offset: 0x233 (i32.const 1) ) (block ;; code offset: 0x23a (local.set $2 ;; code offset: 0x238 (local.get $0) ) ;; code offset: 0x23c (br $label$4) ) ) ;; code offset: 0x245 (if ;; code offset: 0x244 (i32.eqz ;; code offset: 0x243 (i32.and ;; code offset: 0x23f (local.get $0) ;; code offset: 0x241 (i32.const 3) ) ) (block ;; code offset: 0x249 (local.set $2 ;; code offset: 0x247 (local.get $0) ) ;; code offset: 0x24b (br $label$4) ) ) ;; code offset: 0x250 (local.set $2 ;; code offset: 0x24e (local.get $0) ) ;; code offset: 0x252 (loop $label$7 ;; code offset: 0x25b (i32.store8 ;; code offset: 0x254 (local.get $2) ;; code offset: 0x258 (i32.load8_u ;; code offset: 0x256 (local.get $1) ) ) ;; code offset: 0x263 (local.set $1 ;; code offset: 0x262 (i32.add ;; code offset: 0x25e (local.get $1) ;; code offset: 0x260 (i32.const 1) ) ) ;; code offset: 0x26f (br_if $label$4 ;; code offset: 0x26e (i32.ge_u ;; code offset: 0x26a (local.tee $2 ;; code offset: 0x269 (i32.add ;; code offset: 0x265 (local.get $2) ;; code offset: 0x267 (i32.const 1) ) ) ;; code offset: 0x26c (local.get $3) ) ) ;; code offset: 0x276 (br_if $label$7 ;; code offset: 0x275 (i32.and ;; code offset: 0x271 (local.get $2) ;; code offset: 0x273 (i32.const 3) ) ) ) ) ;; code offset: 0x27a (block $label$8 ;; code offset: 0x287 (br_if $label$8 ;; code offset: 0x286 (i32.lt_u ;; code offset: 0x281 (local.tee $4 ;; code offset: 0x280 (i32.and ;; code offset: 0x27c (local.get $3) ;; code offset: 0x27e (i32.const -4) ) ) ;; code offset: 0x283 (i32.const 64) ) ) ;; code offset: 0x293 (br_if $label$8 ;; code offset: 0x292 (i32.gt_u ;; code offset: 0x289 (local.get $2) ;; code offset: 0x290 (local.tee $5 ;; code offset: 0x28f (i32.add ;; code offset: 0x28b (local.get $4) ;; code offset: 0x28d (i32.const -64) ) ) ) ) ;; code offset: 0x295 (loop $label$9 ;; code offset: 0x29e (i32.store ;; code offset: 0x297 (local.get $2) ;; code offset: 0x29b (i32.load ;; code offset: 0x299 (local.get $1) ) ) ;; code offset: 0x2a8 (i32.store offset=4 ;; code offset: 0x2a1 (local.get $2) ;; code offset: 0x2a5 (i32.load offset=4 ;; code offset: 0x2a3 (local.get $1) ) ) ;; code offset: 0x2b2 (i32.store offset=8 ;; code offset: 0x2ab (local.get $2) ;; code offset: 0x2af (i32.load offset=8 ;; code offset: 0x2ad (local.get $1) ) ) ;; code offset: 0x2bc (i32.store offset=12 ;; code offset: 0x2b5 (local.get $2) ;; code offset: 0x2b9 (i32.load offset=12 ;; code offset: 0x2b7 (local.get $1) ) ) ;; code offset: 0x2c6 (i32.store offset=16 ;; code offset: 0x2bf (local.get $2) ;; code offset: 0x2c3 (i32.load offset=16 ;; code offset: 0x2c1 (local.get $1) ) ) ;; code offset: 0x2d0 (i32.store offset=20 ;; code offset: 0x2c9 (local.get $2) ;; code offset: 0x2cd (i32.load offset=20 ;; code offset: 0x2cb (local.get $1) ) ) ;; code offset: 0x2da (i32.store offset=24 ;; code offset: 0x2d3 (local.get $2) ;; code offset: 0x2d7 (i32.load offset=24 ;; code offset: 0x2d5 (local.get $1) ) ) ;; code offset: 0x2e4 (i32.store offset=28 ;; code offset: 0x2dd (local.get $2) ;; code offset: 0x2e1 (i32.load offset=28 ;; code offset: 0x2df (local.get $1) ) ) ;; code offset: 0x2ee (i32.store offset=32 ;; code offset: 0x2e7 (local.get $2) ;; code offset: 0x2eb (i32.load offset=32 ;; code offset: 0x2e9 (local.get $1) ) ) ;; code offset: 0x2f8 (i32.store offset=36 ;; code offset: 0x2f1 (local.get $2) ;; code offset: 0x2f5 (i32.load offset=36 ;; code offset: 0x2f3 (local.get $1) ) ) ;; code offset: 0x302 (i32.store offset=40 ;; code offset: 0x2fb (local.get $2) ;; code offset: 0x2ff (i32.load offset=40 ;; code offset: 0x2fd (local.get $1) ) ) ;; code offset: 0x30c (i32.store offset=44 ;; code offset: 0x305 (local.get $2) ;; code offset: 0x309 (i32.load offset=44 ;; code offset: 0x307 (local.get $1) ) ) ;; code offset: 0x316 (i32.store offset=48 ;; code offset: 0x30f (local.get $2) ;; code offset: 0x313 (i32.load offset=48 ;; code offset: 0x311 (local.get $1) ) ) ;; code offset: 0x320 (i32.store offset=52 ;; code offset: 0x319 (local.get $2) ;; code offset: 0x31d (i32.load offset=52 ;; code offset: 0x31b (local.get $1) ) ) ;; code offset: 0x32a (i32.store offset=56 ;; code offset: 0x323 (local.get $2) ;; code offset: 0x327 (i32.load offset=56 ;; code offset: 0x325 (local.get $1) ) ) ;; code offset: 0x334 (i32.store offset=60 ;; code offset: 0x32d (local.get $2) ;; code offset: 0x331 (i32.load offset=60 ;; code offset: 0x32f (local.get $1) ) ) ;; code offset: 0x33c (local.set $1 ;; code offset: 0x33b (i32.sub ;; code offset: 0x337 (local.get $1) ;; code offset: 0x339 (i32.const -64) ) ) ;; code offset: 0x348 (br_if $label$9 ;; code offset: 0x347 (i32.le_u ;; code offset: 0x343 (local.tee $2 ;; code offset: 0x342 (i32.sub ;; code offset: 0x33e (local.get $2) ;; code offset: 0x340 (i32.const -64) ) ) ;; code offset: 0x345 (local.get $5) ) ) ) ) ;; code offset: 0x351 (br_if $label$2 ;; code offset: 0x350 (i32.ge_u ;; code offset: 0x34c (local.get $2) ;; code offset: 0x34e (local.get $4) ) ) ;; code offset: 0x353 (loop $label$10 ;; code offset: 0x35c (i32.store ;; code offset: 0x355 (local.get $2) ;; code offset: 0x359 (i32.load ;; code offset: 0x357 (local.get $1) ) ) ;; code offset: 0x364 (local.set $1 ;; code offset: 0x363 (i32.add ;; code offset: 0x35f (local.get $1) ;; code offset: 0x361 (i32.const 4) ) ) ;; code offset: 0x370 (br_if $label$10 ;; code offset: 0x36f (i32.lt_u ;; code offset: 0x36b (local.tee $2 ;; code offset: 0x36a (i32.add ;; code offset: 0x366 (local.get $2) ;; code offset: 0x368 (i32.const 4) ) ) ;; code offset: 0x36d (local.get $4) ) ) ) ;; code offset: 0x373 (br $label$2) ) ) ;; code offset: 0x37b (if ;; code offset: 0x37a (i32.lt_u ;; code offset: 0x376 (local.get $3) ;; code offset: 0x378 (i32.const 4) ) (block ;; code offset: 0x37f (local.set $2 ;; code offset: 0x37d (local.get $0) ) ;; code offset: 0x381 (br $label$2) ) ) ;; code offset: 0x38e (if ;; code offset: 0x38d (i32.lt_u ;; code offset: 0x389 (local.tee $4 ;; code offset: 0x388 (i32.add ;; code offset: 0x384 (local.get $3) ;; code offset: 0x386 (i32.const -4) ) ) ;; code offset: 0x38b (local.get $0) ) (block ;; code offset: 0x392 (local.set $2 ;; code offset: 0x390 (local.get $0) ) ;; code offset: 0x394 (br $label$2) ) ) ;; code offset: 0x399 (local.set $2 ;; code offset: 0x397 (local.get $0) ) ;; code offset: 0x39b (loop $label$13 ;; code offset: 0x3a4 (i32.store8 ;; code offset: 0x39d (local.get $2) ;; code offset: 0x3a1 (i32.load8_u ;; code offset: 0x39f (local.get $1) ) ) ;; code offset: 0x3ae (i32.store8 offset=1 ;; code offset: 0x3a7 (local.get $2) ;; code offset: 0x3ab (i32.load8_u offset=1 ;; code offset: 0x3a9 (local.get $1) ) ) ;; code offset: 0x3b8 (i32.store8 offset=2 ;; code offset: 0x3b1 (local.get $2) ;; code offset: 0x3b5 (i32.load8_u offset=2 ;; code offset: 0x3b3 (local.get $1) ) ) ;; code offset: 0x3c2 (i32.store8 offset=3 ;; code offset: 0x3bb (local.get $2) ;; code offset: 0x3bf (i32.load8_u offset=3 ;; code offset: 0x3bd (local.get $1) ) ) ;; code offset: 0x3ca (local.set $1 ;; code offset: 0x3c9 (i32.add ;; code offset: 0x3c5 (local.get $1) ;; code offset: 0x3c7 (i32.const 4) ) ) ;; code offset: 0x3d6 (br_if $label$13 ;; code offset: 0x3d5 (i32.le_u ;; code offset: 0x3d1 (local.tee $2 ;; code offset: 0x3d0 (i32.add ;; code offset: 0x3cc (local.get $2) ;; code offset: 0x3ce (i32.const 4) ) ) ;; code offset: 0x3d3 (local.get $4) ) ) ) ) ;; code offset: 0x3df (if ;; code offset: 0x3de (i32.lt_u ;; code offset: 0x3da (local.get $2) ;; code offset: 0x3dc (local.get $3) ) ;; code offset: 0x3e1 (loop $label$15 ;; code offset: 0x3ea (i32.store8 ;; code offset: 0x3e3 (local.get $2) ;; code offset: 0x3e7 (i32.load8_u ;; code offset: 0x3e5 (local.get $1) ) ) ;; code offset: 0x3f2 (local.set $1 ;; code offset: 0x3f1 (i32.add ;; code offset: 0x3ed (local.get $1) ;; code offset: 0x3ef (i32.const 1) ) ) ;; code offset: 0x3fe (br_if $label$15 ;; code offset: 0x3fd (i32.ne ;; code offset: 0x3f9 (local.tee $2 ;; code offset: 0x3f8 (i32.add ;; code offset: 0x3f4 (local.get $2) ;; code offset: 0x3f6 (i32.const 1) ) ) ;; code offset: 0x3fb (local.get $3) ) ) ) ) ;; code offset: 0x402 (local.get $0) ) (func $10 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) ;; code offset: 0x410 (block $label$1 ;; code offset: 0x43a (if (block $label$2 (result i32) ;; code offset: 0x41c (if ;; code offset: 0x41b (i32.eqz ;; code offset: 0x419 (local.tee $3 ;; code offset: 0x416 (i32.load offset=16 ;; code offset: 0x414 (local.get $2) ) ) ) (block ;; code offset: 0x422 (br_if $label$1 ;; code offset: 0x420 (call $8 ;; code offset: 0x41e (local.get $2) ) ) ;; code offset: 0x429 (local.set $3 ;; code offset: 0x426 (i32.load offset=16 ;; code offset: 0x424 (local.get $2) ) ) ) ) ;; code offset: 0x438 (i32.lt_u ;; code offset: 0x435 (i32.sub ;; code offset: 0x42c (local.get $3) ;; code offset: 0x433 (local.tee $5 ;; code offset: 0x430 (i32.load offset=20 ;; code offset: 0x42e (local.get $2) ) ) ) ;; code offset: 0x436 (local.get $1) ) ) ;; code offset: 0x44a (return ;; code offset: 0x447 (call_indirect (type $i32_i32_i32_=>_i32) ;; code offset: 0x43c (local.get $2) ;; code offset: 0x43e (local.get $0) ;; code offset: 0x440 (local.get $1) ;; code offset: 0x444 (i32.load offset=36 ;; code offset: 0x442 (local.get $2) ) ) ) ) ;; code offset: 0x44c (block $label$5 ;; code offset: 0x456 (br_if $label$5 ;; code offset: 0x455 (i32.lt_s ;; code offset: 0x450 (i32.load8_s offset=75 ;; code offset: 0x44e (local.get $2) ) ;; code offset: 0x453 (i32.const 0) ) ) ;; code offset: 0x45a (local.set $4 ;; code offset: 0x458 (local.get $1) ) ;; code offset: 0x45c (loop $label$6 ;; code offset: 0x463 (br_if $label$5 ;; code offset: 0x462 (i32.eqz ;; code offset: 0x460 (local.tee $3 ;; code offset: 0x45e (local.get $4) ) ) ) ;; code offset: 0x475 (br_if $label$6 ;; code offset: 0x474 (i32.ne ;; code offset: 0x46f (i32.load8_u ;; code offset: 0x46e (i32.add ;; code offset: 0x465 (local.get $0) ;; code offset: 0x46c (local.tee $4 ;; code offset: 0x46b (i32.add ;; code offset: 0x467 (local.get $3) ;; code offset: 0x469 (i32.const -1) ) ) ) ) ;; code offset: 0x472 (i32.const 10) ) ) ) ;; code offset: 0x48b (br_if $label$1 ;; code offset: 0x48a (i32.lt_u ;; code offset: 0x486 (local.tee $4 ;; code offset: 0x483 (call_indirect (type $i32_i32_i32_=>_i32) ;; code offset: 0x478 (local.get $2) ;; code offset: 0x47a (local.get $0) ;; code offset: 0x47c (local.get $3) ;; code offset: 0x480 (i32.load offset=36 ;; code offset: 0x47e (local.get $2) ) ) ) ;; code offset: 0x488 (local.get $3) ) ) ;; code offset: 0x492 (local.set $0 ;; code offset: 0x491 (i32.add ;; code offset: 0x48d (local.get $0) ;; code offset: 0x48f (local.get $3) ) ) ;; code offset: 0x499 (local.set $1 ;; code offset: 0x498 (i32.sub ;; code offset: 0x494 (local.get $1) ;; code offset: 0x496 (local.get $3) ) ) ;; code offset: 0x4a0 (local.set $5 ;; code offset: 0x49d (i32.load offset=20 ;; code offset: 0x49b (local.get $2) ) ) ;; code offset: 0x4a4 (local.set $6 ;; code offset: 0x4a2 (local.get $3) ) ) ;; code offset: 0x4af (drop ;; code offset: 0x4ad (call $9 ;; code offset: 0x4a7 (local.get $5) ;; code offset: 0x4a9 (local.get $0) ;; code offset: 0x4ab (local.get $1) ) ) ;; code offset: 0x4ba (i32.store offset=20 ;; code offset: 0x4b0 (local.get $2) ;; code offset: 0x4b9 (i32.add ;; code offset: 0x4b4 (i32.load offset=20 ;; code offset: 0x4b2 (local.get $2) ) ;; code offset: 0x4b7 (local.get $1) ) ) ;; code offset: 0x4c2 (local.set $4 ;; code offset: 0x4c1 (i32.add ;; code offset: 0x4bd (local.get $1) ;; code offset: 0x4bf (local.get $6) ) ) ) ;; code offset: 0x4c5 (local.get $4) ) (func $11 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) ;; code offset: 0x4d3 (local.set $4 ;; code offset: 0x4d2 (i32.mul ;; code offset: 0x4ce (local.get $1) ;; code offset: 0x4d0 (local.get $2) ) ) ;; code offset: 0x4d5 (block $label$1 ;; code offset: 0x4df (if ;; code offset: 0x4de (i32.le_s ;; code offset: 0x4d9 (i32.load offset=76 ;; code offset: 0x4d7 (local.get $3) ) ;; code offset: 0x4dc (i32.const -1) ) (block ;; code offset: 0x4e9 (local.set $0 ;; code offset: 0x4e7 (call $10 ;; code offset: 0x4e1 (local.get $0) ;; code offset: 0x4e3 (local.get $4) ;; code offset: 0x4e5 (local.get $3) ) ) ;; code offset: 0x4eb (br $label$1) ) ) ;; code offset: 0x4f2 (local.set $5 ;; code offset: 0x4f0 (call $15 ;; code offset: 0x4ee (local.get $3) ) ) ;; code offset: 0x4fc (local.set $0 ;; code offset: 0x4fa (call $10 ;; code offset: 0x4f4 (local.get $0) ;; code offset: 0x4f6 (local.get $4) ;; code offset: 0x4f8 (local.get $3) ) ) ;; code offset: 0x501 (br_if $label$1 ;; code offset: 0x500 (i32.eqz ;; code offset: 0x4fe (local.get $5) ) ) ;; code offset: 0x505 (call $16 ;; code offset: 0x503 (local.get $3) ) ) ;; code offset: 0x50d (if ;; code offset: 0x50c (i32.eq ;; code offset: 0x508 (local.get $0) ;; code offset: 0x50a (local.get $4) ) ;; code offset: 0x516 (return ;; code offset: 0x515 (select ;; code offset: 0x50f (local.get $2) ;; code offset: 0x511 (i32.const 0) ;; code offset: 0x513 (local.get $1) ) ) ) ;; code offset: 0x51c (i32.div_u ;; code offset: 0x518 (local.get $0) ;; code offset: 0x51a (local.get $1) ) ) (func $12 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) ;; code offset: 0x537 (select ;; code offset: 0x522 (i32.const -1) ;; code offset: 0x524 (i32.const 0) ;; code offset: 0x536 (i32.ne ;; code offset: 0x532 (call $11 ;; code offset: 0x526 (local.get $0) ;; code offset: 0x528 (i32.const 1) ;; code offset: 0x52e (local.tee $2 ;; code offset: 0x52c (call $17 ;; code offset: 0x52a (local.get $0) ) ) ;; code offset: 0x530 (local.get $1) ) ;; code offset: 0x534 (local.get $2) ) ) ) (func $13 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) ;; code offset: 0x549 (global.set $global$0 ;; code offset: 0x547 (local.tee $3 ;; code offset: 0x546 (i32.sub ;; code offset: 0x542 (global.get $global$0) ;; code offset: 0x544 (i32.const 16) ) ) ) ;; code offset: 0x54f (i32.store8 offset=15 ;; code offset: 0x54b (local.get $3) ;; code offset: 0x54d (local.get $1) ) ;; code offset: 0x552 (block $label$1 ;; code offset: 0x55c (if ;; code offset: 0x55b (i32.eqz ;; code offset: 0x559 (local.tee $2 ;; code offset: 0x556 (i32.load offset=16 ;; code offset: 0x554 (local.get $0) ) ) ) (block ;; code offset: 0x560 (local.set $2 ;; code offset: 0x55e (i32.const -1) ) ;; code offset: 0x566 (br_if $label$1 ;; code offset: 0x564 (call $8 ;; code offset: 0x562 (local.get $0) ) ) ;; code offset: 0x56d (local.set $2 ;; code offset: 0x56a (i32.load offset=16 ;; code offset: 0x568 (local.get $0) ) ) ) ) ;; code offset: 0x570 (block $label$3 ;; code offset: 0x57c (br_if $label$3 ;; code offset: 0x57b (i32.ge_u ;; code offset: 0x577 (local.tee $4 ;; code offset: 0x574 (i32.load offset=20 ;; code offset: 0x572 (local.get $0) ) ) ;; code offset: 0x579 (local.get $2) ) ) ;; code offset: 0x58c (br_if $label$3 ;; code offset: 0x58b (i32.eq ;; code offset: 0x584 (local.tee $2 ;; code offset: 0x583 (i32.and ;; code offset: 0x57e (local.get $1) ;; code offset: 0x580 (i32.const 255) ) ) ;; code offset: 0x588 (i32.load8_s offset=75 ;; code offset: 0x586 (local.get $0) ) ) ) ;; code offset: 0x595 (i32.store offset=20 ;; code offset: 0x58e (local.get $0) ;; code offset: 0x594 (i32.add ;; code offset: 0x590 (local.get $4) ;; code offset: 0x592 (i32.const 1) ) ) ;; code offset: 0x59c (i32.store8 ;; code offset: 0x598 (local.get $4) ;; code offset: 0x59a (local.get $1) ) ;; code offset: 0x59f (br $label$1) ) ;; code offset: 0x5a4 (local.set $2 ;; code offset: 0x5a2 (i32.const -1) ) ;; code offset: 0x5ba (br_if $label$1 ;; code offset: 0x5b9 (i32.ne ;; code offset: 0x5b4 (call_indirect (type $i32_i32_i32_=>_i32) ;; code offset: 0x5a6 (local.get $0) ;; code offset: 0x5ac (i32.add ;; code offset: 0x5a8 (local.get $3) ;; code offset: 0x5aa (i32.const 15) ) ;; code offset: 0x5ad (i32.const 1) ;; code offset: 0x5b1 (i32.load offset=36 ;; code offset: 0x5af (local.get $0) ) ) ;; code offset: 0x5b7 (i32.const 1) ) ) ;; code offset: 0x5c1 (local.set $2 ;; code offset: 0x5be (i32.load8_u offset=15 ;; code offset: 0x5bc (local.get $3) ) ) ) ;; code offset: 0x5c9 (global.set $global$0 ;; code offset: 0x5c8 (i32.add ;; code offset: 0x5c4 (local.get $3) ;; code offset: 0x5c6 (i32.const 16) ) ) ;; code offset: 0x5cb (local.get $2) ) (func $14 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) ;; code offset: 0x5e2 (if ;; code offset: 0x5e1 (i32.ge_s ;; code offset: 0x5dc (i32.load offset=76 ;; code offset: 0x5da (local.tee $1 ;; code offset: 0x5d7 (i32.load ;; code offset: 0x5d4 (i32.const 1040) ) ) ) ;; code offset: 0x5df (i32.const 0) ) ;; code offset: 0x5e8 (local.set $2 ;; code offset: 0x5e6 (call $15 ;; code offset: 0x5e4 (local.get $1) ) ) ) ;; code offset: 0x636 (local.set $0 ;; code offset: 0x5eb (block $label$2 (result i32) ;; code offset: 0x5fa (drop ;; code offset: 0x5f8 (br_if $label$2 ;; code offset: 0x5ed (i32.const -1) ;; code offset: 0x5f7 (i32.lt_s ;; code offset: 0x5f3 (call $12 ;; code offset: 0x5ef (local.get $0) ;; code offset: 0x5f1 (local.get $1) ) ;; code offset: 0x5f5 (i32.const 0) ) ) ) ;; code offset: 0x5fb (block $label$3 ;; code offset: 0x605 (br_if $label$3 ;; code offset: 0x604 (i32.eq ;; code offset: 0x5ff (i32.load8_u offset=75 ;; code offset: 0x5fd (local.get $1) ) ;; code offset: 0x602 (i32.const 10) ) ) ;; code offset: 0x614 (br_if $label$3 ;; code offset: 0x613 (i32.ge_u ;; code offset: 0x60c (local.tee $0 ;; code offset: 0x609 (i32.load offset=20 ;; code offset: 0x607 (local.get $1) ) ) ;; code offset: 0x610 (i32.load offset=16 ;; code offset: 0x60e (local.get $1) ) ) ) ;; code offset: 0x61d (i32.store offset=20 ;; code offset: 0x616 (local.get $1) ;; code offset: 0x61c (i32.add ;; code offset: 0x618 (local.get $0) ;; code offset: 0x61a (i32.const 1) ) ) ;; code offset: 0x624 (i32.store8 ;; code offset: 0x620 (local.get $0) ;; code offset: 0x622 (i32.const 10) ) ;; code offset: 0x629 (br $label$2 ;; code offset: 0x627 (i32.const 0) ) ) ;; code offset: 0x634 (i32.shr_s ;; code offset: 0x630 (call $13 ;; code offset: 0x62c (local.get $1) ;; code offset: 0x62e (i32.const 10) ) ;; code offset: 0x632 (i32.const 31) ) ) ) ;; code offset: 0x63a (if ;; code offset: 0x638 (local.get $2) ;; code offset: 0x63e (call $16 ;; code offset: 0x63c (local.get $1) ) ) ;; code offset: 0x641 (local.get $0) ) (func $15 (param $0 i32) (result i32) ;; code offset: 0x646 (i32.const 1) ) (func $16 (param $0 i32) ;; code offset: 0x64b (nop) ) (func $17 (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) ;; code offset: 0x658 (local.set $1 ;; code offset: 0x656 (local.get $0) ) ;; code offset: 0x65a (block $label$1 (block $label$2 ;; code offset: 0x664 (br_if $label$2 ;; code offset: 0x663 (i32.eqz ;; code offset: 0x662 (i32.and ;; code offset: 0x65e (local.get $0) ;; code offset: 0x660 (i32.const 3) ) ) ) ;; code offset: 0x66c (if ;; code offset: 0x66b (i32.eqz ;; code offset: 0x668 (i32.load8_u ;; code offset: 0x666 (local.get $0) ) ) ;; code offset: 0x670 (return ;; code offset: 0x66e (i32.const 0) ) ) ;; code offset: 0x672 (loop $label$4 ;; code offset: 0x67f (br_if $label$2 ;; code offset: 0x67e (i32.eqz ;; code offset: 0x67d (i32.and ;; code offset: 0x679 (local.tee $1 ;; code offset: 0x678 (i32.add ;; code offset: 0x674 (local.get $1) ;; code offset: 0x676 (i32.const 1) ) ) ;; code offset: 0x67b (i32.const 3) ) ) ) ;; code offset: 0x686 (br_if $label$4 ;; code offset: 0x683 (i32.load8_u ;; code offset: 0x681 (local.get $1) ) ) ) ;; code offset: 0x689 (br $label$1) ) ;; code offset: 0x68c (loop $label$5 ;; code offset: 0x695 (local.set $1 ;; code offset: 0x694 (i32.add ;; code offset: 0x690 (local.tee $2 ;; code offset: 0x68e (local.get $1) ) ;; code offset: 0x692 (i32.const 4) ) ) ;; code offset: 0x6b2 (br_if $label$5 ;; code offset: 0x6b1 (i32.eqz ;; code offset: 0x6b0 (i32.and ;; code offset: 0x6a9 (i32.and ;; code offset: 0x6a0 (i32.xor ;; code offset: 0x69c (local.tee $3 ;; code offset: 0x699 (i32.load ;; code offset: 0x697 (local.get $2) ) ) ;; code offset: 0x69e (i32.const -1) ) ;; code offset: 0x6a8 (i32.add ;; code offset: 0x6a1 (local.get $3) ;; code offset: 0x6a3 (i32.const -16843009) ) ) ;; code offset: 0x6aa (i32.const -2139062144) ) ) ) ) ;; code offset: 0x6bc (if ;; code offset: 0x6bb (i32.eqz ;; code offset: 0x6ba (i32.and ;; code offset: 0x6b5 (local.get $3) ;; code offset: 0x6b7 (i32.const 255) ) ) ;; code offset: 0x6c3 (return ;; code offset: 0x6c2 (i32.sub ;; code offset: 0x6be (local.get $2) ;; code offset: 0x6c0 (local.get $0) ) ) ) ;; code offset: 0x6c5 (loop $label$7 ;; code offset: 0x6cc (local.set $3 ;; code offset: 0x6c9 (i32.load8_u offset=1 ;; code offset: 0x6c7 (local.get $2) ) ) ;; code offset: 0x6d5 (local.set $2 ;; code offset: 0x6d3 (local.tee $1 ;; code offset: 0x6d2 (i32.add ;; code offset: 0x6ce (local.get $2) ;; code offset: 0x6d0 (i32.const 1) ) ) ) ;; code offset: 0x6d9 (br_if $label$7 ;; code offset: 0x6d7 (local.get $3) ) ) ) ;; code offset: 0x6e1 (i32.sub ;; code offset: 0x6dd (local.get $1) ;; code offset: 0x6df (local.get $0) ) ) (func $18 (result i32) ;; code offset: 0x6e5 (global.get $global$0) ) (func $19 (param $0 i32) ;; code offset: 0x6ec (global.set $global$0 ;; code offset: 0x6ea (local.get $0) ) ) (func $20 (param $0 i32) (result i32) (local $1 i32) ;; code offset: 0x6fd (global.set $global$0 ;; code offset: 0x6fb (local.tee $1 ;; code offset: 0x6fa (i32.and ;; code offset: 0x6f7 (i32.sub ;; code offset: 0x6f3 (global.get $global$0) ;; code offset: 0x6f5 (local.get $0) ) ;; code offset: 0x6f8 (i32.const -16) ) ) ) ;; code offset: 0x6ff (local.get $1) ) (func $21 (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i32) (result i64) ;; code offset: 0x70c (call_indirect (type $i32_i64_i32_=>_i64) ;; code offset: 0x704 (local.get $1) ;; code offset: 0x706 (local.get $2) ;; code offset: 0x708 (local.get $3) ;; code offset: 0x70a (local.get $0) ) ) (func $22 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i64) ;; code offset: 0x72c (call $fimport$2 ;; code offset: 0x72b (i32.wrap_i64 ;; code offset: 0x72a (i64.shr_u ;; code offset: 0x726 (local.tee $5 ;; code offset: 0x724 (call $21 ;; code offset: 0x714 (local.get $0) ;; code offset: 0x716 (local.get $1) ;; code offset: 0x721 (i64.or ;; code offset: 0x71a (i64.extend_i32_u ;; code offset: 0x718 (local.get $2) ) ;; code offset: 0x720 (i64.shl ;; code offset: 0x71d (i64.extend_i32_u ;; code offset: 0x71b (local.get $3) ) ;; code offset: 0x71e (i64.const 32) ) ) ;; code offset: 0x722 (local.get $4) ) ) ;; code offset: 0x728 (i64.const 32) ) ) ) ;; code offset: 0x730 (i32.wrap_i64 ;; code offset: 0x72e (local.get $5) ) ) (func $23 (param $0 i32) (result i32) ;; code offset: 0x736 (memory.grow ;; code offset: 0x734 (local.get $0) ) ) ;; custom section ".debug_info", size 79 ;; custom section ".debug_abbrev", size 64 ;; custom section ".debug_line", size 53 ;; custom section ".debug_str", size 206 ) binaryen-version_108/test/passes/reverse_dwarf_abbrevs.passes000066400000000000000000000000261423707623100250020ustar00rootroot00000000000000roundtrip_dwarfdump_g binaryen-version_108/test/passes/reverse_dwarf_abbrevs.wasm000066400000000000000000000053461423707623100244650ustar00rootroot00000000000000asm> ```````~~```~~„wasi_snapshot_preview1fd_writeenvemscripten_memcpy_bigenv setTempRet0envmemory€€env__indirect_function_tablep AБÀ AÈ † __wasm_call_ctorsmain__errno_location stackSave stackRestore stackAlloc __data_end dynCall_jiji__growWasmMemory A   ¹ A€A  A°  E@A  6A ç#A k"$  ("6 (!  6  6   k"6  j!A! Aj!@@ (< AjA A jE@@  ( "F  AL    ("K"Atj"  A k" (j6 A A j" ( k6  k! (< Aj  "  k" A jE A6 AG  (,"6 6  (0j6   A6 B7 (A r6A" AF   (k ! A j$  A B Y -J"Aj r:J ("Aq@ A r6A B7 (,"6 6  (0j6A † A€O@    j!@ sAqE@@ AH@ !  AqE@ !  !@  -: Aj! Aj" O  Aq @ A|q"AÀI  A@j"K @  (6  (6  (6  ( 6  (6  (6  (6  (6  ( 6  ($6$  ((6(  (,6,  (060  (464  (868  (<6< A@k! A@k" M  O @  (6 Aj! Aj" I  AI@ !  A|j" I@ !  !@  -:  -:  -:  -: Aj! Aj" M  I@@  -: Aj! Aj" G Á@ ("E@   (!  ("k I @   ($ @ ,KAH !@ "E  Aj"j-A G   ($" I  j!  k! (! !     ( j6  j!  U  l!@ (LAL@   !  !   ! E  F@ A  n AA A "  G “#Ak"$  :@ ("E@A!   (! @ (" O Aÿq" ,KF Aj6  :  A! AjA ($AG -! Aj$  uA("(LAN@ ! A AH @ -KA F (" (O  Aj6 A :A  A Au ! @  A  ” !@@ AqE -E@A @ Aj"AqE  -  @ "Aj! ("As AÿýûwjqA€‚„xqE AÿqE@  k @ -! Aj"!   k #  $ # kApq"$      !~  ­ ­B †„ "B ˆ§ §  @ MA€ hello, world!A˜ A¤ A¼ ÈAÔ Aã  ÿÿÿÿ[ .debug_infoK •©íŸÅ GÊN .debug_abbrev$> ‰‚.@—B: ; I?%A .debug_line1+û testshello_world.cÙ .debug_strclang version 12.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 576bd52f778405de08f309678e4fe4f7523bf7c4)tests/hello_world.c/home/azakai/Dev/emscriptenmainintbinaryen-version_108/test/passes/roundtrip.txt000066400000000000000000000002171423707623100220110ustar00rootroot00000000000000(module (type $none_=>_none (func)) (export "foo" (func $0)) (func $0 (unreachable) ) ) (module (memory $0 1 1) (table $0 0 funcref) ) binaryen-version_108/test/passes/roundtrip.wast000066400000000000000000000003231423707623100221460ustar00rootroot00000000000000(module (func "foo" ;; binaryen skips unreachable code while reading the binary format (unreachable) (nop) (nop) (nop) (nop) (nop) ) ) (module (memory 1 1) (table 0 funcref) ) binaryen-version_108/test/passes/roundtrip_signed.bin.txt000066400000000000000000000006211423707623100241100ustar00rootroot00000000000000(module (type $none_=>_none (func)) (global $global$0 (mut i32) (i32.const 10)) (memory $0 16 17) (export "as-br_table-index" (func $0)) (export "as-local.set-value" (func $0)) (func $0 (if (i32.eqz (global.get $global$0) ) (return) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (drop (i32.load (i32.const 0) ) ) ) ) binaryen-version_108/test/passes/roundtrip_signed.passes000066400000000000000000000001641423707623100240220ustar00rootroot00000000000000remove-unused-module-elements_roundtrip_vacuum_remove-unused-brs_merge-blocks_vacuum_duplicate-function-elimination binaryen-version_108/test/passes/roundtrip_signed.wasm000066400000000000000000000002271423707623100234730ustar00rootroot00000000000000asm``A *as-br_table-indexas-local.set-value C"@#E@ #Ak$ @@A(  A @#E@ #Ak$ A( binaryen-version_108/test/passes/roundtrip_typenames_features.passes000066400000000000000000000001001423707623100264420ustar00rootroot00000000000000enable-reference-types_enable-gc_emit-target-features_roundtrip binaryen-version_108/test/passes/roundtrip_typenames_features.txt000066400000000000000000000003631423707623100257760ustar00rootroot00000000000000(module (type $ref?|$NamedStruct|_=>_none (func (param (ref null $NamedStruct)))) (type $NamedStruct (struct )) (export "export" (func $0)) (func $0 (param $0 (ref null $NamedStruct)) (nop) ) ;; features section: reference-types, gc ) binaryen-version_108/test/passes/roundtrip_typenames_features.wast000066400000000000000000000005201423707623100261300ustar00rootroot00000000000000;; This test enables two features, then roundtrips through binary. We should ;; preserve the features and type names while doing so. (module (type $ref?|$NamedStruct|_=>_none (func (param (ref null $NamedStruct)))) (type $NamedStruct (struct )) (export "export" (func $0)) (func $0 (param $0 (ref null $NamedStruct)) (nop) ) ) binaryen-version_108/test/passes/rse_all-features.txt000066400000000000000000000133161423707623100232240ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_f64_=>_none (func (param i32 f64))) (func $basic (param $x i32) (param $y f64) (local $a f32) (local $b i64) (local.set $x (i32.const 0) ) (local.set $y (f64.const 0) ) (drop (f32.const 0) ) (drop (i64.const 0) ) ) (func $later-param-use (param $x i32) (local.set $x (i32.const 0) ) (drop (i32.const 0) ) ) (func $diff-value (param $x i32) (local $a i32) (local.set $x (i32.const 0) ) (local.set $x (i32.const 1) ) (drop (i32.const 1) ) (local.set $a (i32.const 1) ) (drop (i32.const 1) ) (local.set $a (i32.const 0) ) ) (func $tuple-value (local $x (i32 i64)) (local.set $x (tuple.make (i32.const 42) (i64.const 42) ) ) (drop (tuple.make (i32.const 42) (i64.const 42) ) ) ) (func $unreach (local $a i32) (block $x (drop (i32.const 0) ) (local.set $a (i32.const 1) ) (drop (i32.const 1) ) (br $x) (local.set $a (i32.const 1) ) (local.set $a (i32.const 2) ) (local.set $a (i32.const 2) ) ) ) (func $loop (local $a i32) (local $b i32) (loop $x (local.set $a (i32.const 0) ) (local.set $a (i32.const 1) ) (br_if $x (i32.const 1) ) ) (block $y (drop (i32.const 0) ) (local.set $b (i32.const 1) ) (br $y) ) (drop (i32.const 1) ) ) (func $if (local $x i32) (if (i32.const 0) (local.set $x (i32.const 1) ) (local.set $x (i32.const 1) ) ) (drop (i32.const 1) ) ) (func $if2 (local $x i32) (if (local.tee $x (i32.const 1) ) (drop (i32.const 1) ) (drop (i32.const 1) ) ) (drop (i32.const 1) ) ) (func $if3 (local $x i32) (if (local.tee $x (i32.const 1) ) (drop (i32.const 1) ) (local.set $x (i32.const 2) ) ) (local.set $x (i32.const 1) ) ) (func $copy (local $x i32) (local $y i32) (local.set $x (i32.const 1) ) (local.set $y (local.get $x) ) (drop (i32.const 1) ) (local.set $x (i32.const 2) ) (if (i32.const 1) (nop) (nop) ) (local.set $y (local.get $x) ) (drop (i32.const 2) ) (if (i32.const 1) (nop) (nop) ) (drop (i32.const 2) ) (local.set $x (i32.const 3) ) (local.set $y (i32.const 3) ) (drop (local.get $x) ) ) (func $param-unique (param $x i32) (local $a i32) (local.set $a (local.get $x) ) (drop (local.get $x) ) (local.set $x (i32.eqz (i32.const 9999) ) ) (local.set $a (local.get $x) ) (drop (local.get $x) ) ) (func $set-unique (local $x i32) (local $y i32) (local.set $x (i32.eqz (i32.const 123) ) ) (local.set $y (local.get $x) ) (drop (local.get $x) ) (local.set $x (i32.eqz (i32.const 456) ) ) (local.set $y (local.get $x) ) (drop (local.get $x) ) (local.set $x (i32.eqz (i32.const 789) ) ) (if (i32.const 1) (nop) (nop) ) (local.set $y (local.get $x) ) (drop (local.get $x) ) (local.set $x (i32.eqz (i32.const 1000) ) ) (local.set $y (local.get $x) ) (if (i32.const 1) (nop) (nop) ) (drop (local.get $x) ) ) (func $identical_complex (param $x i32) (local $y i32) (local.set $y (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $y) ) (drop (local.get $y) ) ) (func $merge (local $x i32) (if (i32.const 1) (local.set $x (i32.const 1) ) (local.set $x (i32.const 1) ) ) (drop (i32.const 1) ) (local.set $x (i32.const 2) ) (loop $loop (drop (i32.const 2) ) (local.set $x (i32.const 3) ) (local.set $x (i32.const 2) ) (br_if $loop (i32.const 2) ) ) (drop (i32.const 2) ) ) (func $one-arm (param $1 i32) (param $3 i32) (local.set $1 (local.get $3) ) (if (i32.const 1) (nop) (drop (local.get $1) ) ) ) (func $one-arm2 (param $1 i32) (param $3 i32) (local.set $1 (local.get $3) ) (if (i32.const 1) (drop (local.get $1) ) ) ) (func $many-merges (local $0 i32) (local $1 i32) (block $block (br_if $block (i32.const 0) ) (loop $loop (local.set $1 (local.get $0) ) (local.set $0 (i32.const 99) ) (br_if $loop (i32.const 1) ) ) ) (local.set $0 (local.get $1) ) (if (i32.const 0) (drop (local.get $0) ) ) ) (func $fuzz (local $x i32) (loop $label$4 (block $label$5 (if (i32.const 1) (block $block (local.set $x (i32.const 203) ) (br $label$5) ) ) (br_if $label$4 (i32.const 2) ) ) ) (loop $label$7 (if (if (result i32) (i32.const 3) (i32.const 4) (i32.const 5) ) (br $label$7) ) ) ) (func $fuzz2 (local $var$1 i32) (if (i32.const 0) (if (i32.const 1) (local.set $var$1 (i32.const 2) ) ) ) (loop $label$10 (block $label$11 (if (i32.const 5) (br_if $label$11 (i32.const 6) ) ) (br $label$10) ) ) ) (func $fuzz-nan (local $0 f64) (local $1 f64) (block $block (br_if $block (i32.const 0) ) (loop $loop (local.set $1 (local.get $0) ) (local.set $0 (f64.const -nan:0xfffffffffff87) ) (br_if $loop (i32.const 1) ) ) ) (local.set $0 (local.get $1) ) (if (i32.const 0) (drop (local.get $0) ) ) ) ) binaryen-version_108/test/passes/rse_all-features.wast000066400000000000000000000135271423707623100233670ustar00rootroot00000000000000(module (func $basic (param $x i32) (param $y f64) (local $a f32) (local $b i64) (local.set $x (i32.const 0)) (local.set $y (f64.const 0)) (local.set $a (f32.const 0)) (local.set $b (i64.const 0)) ) (func $later-param-use (param $x i32) (local.set $x (i32.const 0)) (local.set $x (i32.const 0)) ) (func $diff-value (param $x i32) (local $a i32) (local.set $x (i32.const 0)) (local.set $x (i32.const 1)) (local.set $x (i32.const 1)) (local.set $a (i32.const 1)) (local.set $a (i32.const 1)) (local.set $a (i32.const 0)) ) (func $tuple-value (local $x (i32 i64)) (local.set $x (tuple.make (i32.const 42) (i64.const 42)) ) (local.set $x (tuple.make (i32.const 42) (i64.const 42)) ) ) (func $unreach (local $a i32) (block $x (local.set $a (i32.const 0)) (local.set $a (i32.const 1)) (local.set $a (i32.const 1)) (br $x) (local.set $a (i32.const 1)) ;; ignore all these (local.set $a (i32.const 2)) (local.set $a (i32.const 2)) ) ) (func $loop (local $a i32) (local $b i32) (loop $x (local.set $a (i32.const 0)) (local.set $a (i32.const 1)) (br_if $x (i32.const 1)) ) (block $y (local.set $b (i32.const 0)) (local.set $b (i32.const 1)) (br $y) ) (local.set $b (i32.const 1)) ) (func $if (local $x i32) (if (local.tee $x (i32.const 0)) (local.set $x (i32.const 1)) (local.set $x (i32.const 1)) ) (local.set $x (i32.const 1)) ) (func $if2 (local $x i32) (if (local.tee $x (i32.const 1)) (local.set $x (i32.const 1)) (local.set $x (i32.const 1)) ) (local.set $x (i32.const 1)) ) (func $if3 (local $x i32) (if (local.tee $x (i32.const 1)) (local.set $x (i32.const 1)) (local.set $x (i32.const 2)) ) (local.set $x (i32.const 1)) ) (func $copy (local $x i32) (local $y i32) (local.set $x (i32.const 1)) (local.set $y (local.get $x)) (local.set $y (i32.const 1)) (local.set $x (i32.const 2)) (if (i32.const 1) (nop) (nop)) ;; control flow (local.set $y (local.get $x)) (local.set $y (i32.const 2)) (if (i32.const 1) (nop) (nop)) ;; control flow (local.set $y (i32.const 2)) ;; flip (local.set $x (i32.const 3)) (local.set $y (i32.const 3)) (local.set $y (local.get $x)) ;; do this last ) (func $param-unique (param $x i32) (local $a i32) (local.set $a (local.get $x)) (local.set $a (local.get $x)) (local.set $x (i32.eqz (i32.const 9999))) (local.set $a (local.get $x)) (local.set $a (local.get $x)) ) (func $set-unique (local $x i32) (local $y i32) (local.set $x (i32.eqz (i32.const 123))) (local.set $y (local.get $x)) (local.set $y (local.get $x)) (local.set $x (i32.eqz (i32.const 456))) (local.set $y (local.get $x)) (local.set $y (local.get $x)) (local.set $x (i32.eqz (i32.const 789))) (if (i32.const 1) (nop) (nop)) ;; control flow (local.set $y (local.get $x)) (local.set $y (local.get $x)) (local.set $x (i32.eqz (i32.const 1000))) (local.set $y (local.get $x)) (if (i32.const 1) (nop) (nop)) ;; control flow (local.set $y (local.get $x)) ) (func $identical_complex (param $x i32) (local $y i32) (local.set $y (local.get $x)) (local.set $y (local.get $x)) (local.set $y (local.get $x)) (local.set $x (local.get $x)) (local.set $y (local.get $y)) (local.set $x (local.get $y)) ) (func $merge (local $x i32) (if (i32.const 1) (local.set $x (i32.const 1)) (local.set $x (i32.const 1)) ) (local.set $x (i32.const 1)) (local.set $x (i32.const 2)) (loop $loop (local.set $x (i32.const 2)) (local.set $x (i32.const 3)) (local.set $x (i32.const 2)) (br_if $loop (i32.const 2)) ) (local.set $x (i32.const 2)) ) (func $one-arm (param $1 i32) (param $3 i32) (local.set $1 (local.get $3) ) (if (i32.const 1) (nop) (local.set $3 (local.get $1) ) ) ) (func $one-arm2 (param $1 i32) (param $3 i32) (local.set $1 (local.get $3) ) (if (i32.const 1) (local.set $3 (local.get $1) ) ) ) (func $many-merges (local $0 i32) (local $1 i32) (block $block (br_if $block (i32.const 0) ) (loop $loop (local.set $1 (local.get $0) ) (local.set $0 (i32.const 99) ) (br_if $loop (i32.const 1) ) ) ) (local.set $0 ;; make them equal (local.get $1) ) (if (i32.const 0) (local.set $1 ;; we can drop this (local.get $0) ) ) ) (func $fuzz (local $x i32) (loop $label$4 (block $label$5 (if (i32.const 1) (block (local.set $x (i32.const 203) ) (br $label$5) ) ) (br_if $label$4 (i32.const 2) ) ) ) (loop $label$7 (if (if (result i32) (i32.const 3) (i32.const 4) (i32.const 5) ) (br $label$7) ) ) ) (func $fuzz2 (local $var$1 i32) (if (i32.const 0) (if (i32.const 1) (local.set $var$1 (i32.const 2) ) ) ) (loop $label$10 (block $label$11 (if (i32.const 5) (br_if $label$11 (i32.const 6) ) ) (br $label$10) ) ) ) (func $fuzz-nan (local $0 f64) (local $1 f64) (block $block (br_if $block (i32.const 0) ) (loop $loop (local.set $1 (local.get $0) ) (local.set $0 (f64.const -nan:0xfffffffffff87) ) (br_if $loop (i32.const 1) ) ) ) (local.set $0 ;; make them equal (local.get $1) ) (if (i32.const 0) (local.set $1 ;; we can drop this (local.get $0) ) ) ) ) binaryen-version_108/test/passes/safe-heap_disable-simd.txt000066400000000000000000002455301423707623100242420ustar00rootroot00000000000000(module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 1 1) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) ) (module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (import "env" "emscripten_get_sbrk_ptr" (func $foo (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 1 1) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) ) (module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 1 1) (export "emscripten_get_sbrk_ptr" (func $foo)) (func $foo (result i32) (drop (i32.load (i32.const 0) ) ) (i32.const 1234) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) ) binaryen-version_108/test/passes/safe-heap_disable-simd.wast000066400000000000000000000004601423707623100243700ustar00rootroot00000000000000(module (memory 1 1) ) (module (memory 1 1) (import "env" "emscripten_get_sbrk_ptr" (func $foo (result i32))) ) (module (memory 1 1) (export "emscripten_get_sbrk_ptr" (func $foo)) (func $foo (result i32) (drop (i32.load (i32.const 0))) ;; should not be modified! (i32.const 1234) ) ) binaryen-version_108/test/passes/safe-heap_enable-threads_enable-simd.txt000066400000000000000000003705311423707623100270230ustar00rootroot00000000000000(module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_v128 (func (param i32 i32) (result v128))) (type $i32_i32_v128_=>_none (func (param i32 i32 v128))) (type $none_=>_none (func)) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_i32 (func (result i32))) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 (shared 100 100)) (func $loads (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 1) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_A (i32.const 1) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 2) (i32.const 31) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_2 (i32.const 3) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_1 (i32.const 4) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_1_1 (i32.const 5) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_2_U_2 (i32.const 6) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_1_1 (i32.const 7) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_2_U_2 (i32.const 8) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_4_4 (i32.const 9) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_8_4 (i32.const 10) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_8_8 (i32.const 11) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_f32_4_4 (i32.const 12) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_f64_8_8 (i32.const 13) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_v128_16_16 (i32.const 14) (i32.const 0) ) ) ) (func $stores (call $SAFE_HEAP_STORE_i32_4_4 (i32.const 1) (i32.const 0) (i32.const 100) ) (call $SAFE_HEAP_STORE_i32_4_A (i32.const 1) (i32.const 0) (i32.const 100) ) (call $SAFE_HEAP_STORE_i32_4_4 (i32.const 2) (i32.const 31) (i32.const 200) ) (call $SAFE_HEAP_STORE_i32_4_2 (i32.const 3) (i32.const 0) (i32.const 300) ) (call $SAFE_HEAP_STORE_i32_4_1 (i32.const 4) (i32.const 0) (i32.const 400) ) (call $SAFE_HEAP_STORE_i32_1_1 (i32.const 5) (i32.const 0) (i32.const 500) ) (call $SAFE_HEAP_STORE_i32_2_2 (i32.const 6) (i32.const 0) (i32.const 600) ) (call $SAFE_HEAP_STORE_i64_1_1 (i32.const 7) (i32.const 0) (i64.const 700) ) (call $SAFE_HEAP_STORE_i64_2_2 (i32.const 8) (i32.const 0) (i64.const 800) ) (call $SAFE_HEAP_STORE_i64_4_4 (i32.const 9) (i32.const 0) (i64.const 900) ) (call $SAFE_HEAP_STORE_i64_8_4 (i32.const 10) (i32.const 0) (i64.const 1000) ) (call $SAFE_HEAP_STORE_i64_8_8 (i32.const 11) (i32.const 0) (i64.const 1100) ) (call $SAFE_HEAP_STORE_f32_4_4 (i32.const 12) (i32.const 0) (f32.const 1200) ) (call $SAFE_HEAP_STORE_f64_8_8 (i32.const 13) (i32.const 0) (f64.const 1300) ) (call $SAFE_HEAP_STORE_v128_16_16 (i32.const 14) (i32.const 0) (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004) ) ) (func $SAFE_HEAP_LOAD_i32_1_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.shr_s (i32.shl (i32.atomic.load8_u (local.get $2) ) (i32.const 24) ) (i32.const 24) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.shr_s (i32.shl (i32.atomic.load16_u (local.get $2) ) (i32.const 16) ) (i32.const 16) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.shr_s (i64.shl (i64.atomic.load8_u (local.get $2) ) (i64.const 56) ) (i64.const 56) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load16_u (local.get $2) ) (i64.const 48) ) (i64.const 48) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load32_u (local.get $2) ) (i64.const 32) ) (i64.const 32) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.atomic.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.atomic.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) (module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_v128 (func (param i32 i32) (result v128))) (type $i32_i32_v128_=>_none (func (param i32 i32 v128))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $none_=>_none (func)) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_i32 (func (result i32))) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 100 100) (func $loads (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 1) (i32.const 0) ) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) (module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_v128 (func (param i32 i32) (result v128))) (type $i32_i32_v128_=>_none (func (param i32 i32 v128))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $FUNCSIG$v (func)) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_i32 (func (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32))) (memory $0 (shared 100 100)) (func $actions (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 1) (i32.const 0) ) ) (call $SAFE_HEAP_STORE_i32_4_4 (i32.const 1) (i32.const 0) (i32.const 100) ) ) (func $SAFE_HEAP_LOAD_i32_1_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.shr_s (i32.shl (i32.atomic.load8_u (local.get $2) ) (i32.const 24) ) (i32.const 24) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.shr_s (i32.shl (i32.atomic.load16_u (local.get $2) ) (i32.const 16) ) (i32.const 16) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.shr_s (i64.shl (i64.atomic.load8_u (local.get $2) ) (i64.const 56) ) (i64.const 56) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load16_u (local.get $2) ) (i64.const 48) ) (i64.const 48) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load32_u (local.get $2) ) (i64.const 32) ) (i64.const 32) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.atomic.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.atomic.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) binaryen-version_108/test/passes/safe-heap_enable-threads_enable-simd.wast000066400000000000000000000033151423707623100271530ustar00rootroot00000000000000(module (memory (shared 100 100)) (func $loads (drop (i32.load (i32.const 1))) (drop (i32.atomic.load (i32.const 1))) (drop (i32.load offset=31 (i32.const 2))) (drop (i32.load align=2 (i32.const 3))) (drop (i32.load align=1 (i32.const 4))) (drop (i32.load8_s (i32.const 5))) (drop (i32.load16_u (i32.const 6))) (drop (i64.load8_s (i32.const 7))) (drop (i64.load16_u (i32.const 8))) (drop (i64.load32_s (i32.const 9))) (drop (i64.load align=4 (i32.const 10))) (drop (i64.load (i32.const 11))) (drop (f32.load (i32.const 12))) (drop (f64.load (i32.const 13))) (drop (v128.load (i32.const 14))) ) (func $stores (i32.store (i32.const 1) (i32.const 100)) (i32.atomic.store (i32.const 1) (i32.const 100)) (i32.store offset=31 (i32.const 2) (i32.const 200)) (i32.store align=2 (i32.const 3) (i32.const 300)) (i32.store align=1 (i32.const 4) (i32.const 400)) (i32.store8 (i32.const 5) (i32.const 500)) (i32.store16 (i32.const 6) (i32.const 600)) (i64.store8 (i32.const 7) (i64.const 700)) (i64.store16 (i32.const 8) (i64.const 800)) (i64.store32 (i32.const 9) (i64.const 900)) (i64.store align=4 (i32.const 10) (i64.const 1000)) (i64.store (i32.const 11) (i64.const 1100)) (f32.store (i32.const 12) (f32.const 1200)) (f64.store (i32.const 13) (f64.const 1300)) (v128.store (i32.const 14) (v128.const i32x4 1 2 3 4)) ) ) ;; not shared (module (memory 100 100) (func $loads (drop (i32.load (i32.const 1))) ) ) ;; pre-existing (module (type $FUNCSIG$v (func)) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 (shared 100 100)) (func $actions (drop (i32.load (i32.const 1))) (i32.store (i32.const 1) (i32.const 100)) ) ) binaryen-version_108/test/passes/safe-heap_enable-threads_enable-simd64.passes000066400000000000000000000000651423707623100276440ustar00rootroot00000000000000safe-heap_enable-threads_enable-simd_enable-memory64 binaryen-version_108/test/passes/safe-heap_enable-threads_enable-simd64.txt000066400000000000000000003744031423707623100271770ustar00rootroot00000000000000(module (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i64_i64_=>_i32 (func (param i64 i64) (result i32))) (type $i64_i64_i64_=>_none (func (param i64 i64 i64))) (type $i64_i64_i32_=>_none (func (param i64 i64 i32))) (type $i64_i64_=>_v128 (func (param i64 i64) (result v128))) (type $i64_i64_v128_=>_none (func (param i64 i64 v128))) (type $none_=>_none (func)) (type $i64_i64_=>_f64 (func (param i64 i64) (result f64))) (type $i64_i64_f64_=>_none (func (param i64 i64 f64))) (type $i64_i64_=>_f32 (func (param i64 i64) (result f32))) (type $i64_i64_f32_=>_none (func (param i64 i64 f32))) (type $none_=>_i64 (func (result i64))) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i64))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 (shared i64 100 100)) (func $loads (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i64.const 1) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_A (i64.const 1) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i64.const 2) (i64.const 31) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_2 (i64.const 3) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_1 (i64.const 4) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_1_1 (i64.const 5) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_2_U_2 (i64.const 6) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_1_1 (i64.const 7) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_2_U_2 (i64.const 8) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_4_4 (i64.const 9) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_8_4 (i64.const 10) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_8_8 (i64.const 11) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_f32_4_4 (i64.const 12) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_f64_8_8 (i64.const 13) (i64.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_v128_16_16 (i64.const 14) (i64.const 0) ) ) ) (func $stores (call $SAFE_HEAP_STORE_i32_4_4 (i64.const 1) (i64.const 0) (i32.const 100) ) (call $SAFE_HEAP_STORE_i32_4_A (i64.const 1) (i64.const 0) (i32.const 100) ) (call $SAFE_HEAP_STORE_i32_4_4 (i64.const 2) (i64.const 31) (i32.const 200) ) (call $SAFE_HEAP_STORE_i32_4_2 (i64.const 3) (i64.const 0) (i32.const 300) ) (call $SAFE_HEAP_STORE_i32_4_1 (i64.const 4) (i64.const 0) (i32.const 400) ) (call $SAFE_HEAP_STORE_i32_1_1 (i64.const 5) (i64.const 0) (i32.const 500) ) (call $SAFE_HEAP_STORE_i32_2_2 (i64.const 6) (i64.const 0) (i32.const 600) ) (call $SAFE_HEAP_STORE_i64_1_1 (i64.const 7) (i64.const 0) (i64.const 700) ) (call $SAFE_HEAP_STORE_i64_2_2 (i64.const 8) (i64.const 0) (i64.const 800) ) (call $SAFE_HEAP_STORE_i64_4_4 (i64.const 9) (i64.const 0) (i64.const 900) ) (call $SAFE_HEAP_STORE_i64_8_4 (i64.const 10) (i64.const 0) (i64.const 1000) ) (call $SAFE_HEAP_STORE_i64_8_8 (i64.const 11) (i64.const 0) (i64.const 1100) ) (call $SAFE_HEAP_STORE_f32_4_4 (i64.const 12) (i64.const 0) (f32.const 1200) ) (call $SAFE_HEAP_STORE_f64_8_8 (i64.const 13) (i64.const 0) (f64.const 1300) ) (call $SAFE_HEAP_STORE_v128_16_16 (i64.const 14) (i64.const 0) (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004) ) ) (func $SAFE_HEAP_LOAD_i32_1_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.shr_s (i32.shl (i32.atomic.load8_u (local.get $2) ) (i32.const 24) ) (i32.const 24) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.shr_s (i32.shl (i32.atomic.load16_u (local.get $2) ) (i32.const 16) ) (i32.const 16) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i32.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.shr_s (i64.shl (i64.atomic.load8_u (local.get $2) ) (i64.const 56) ) (i64.const 56) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load16_u (local.get $2) ) (i64.const 48) ) (i64.const 48) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load32_u (local.get $2) ) (i64.const 32) ) (i64.const 32) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.atomic.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (i64.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_A (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_A (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i32.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_A (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i32.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_A (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_A (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_A (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i64.atomic.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_A (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (i64.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) (module (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i64_i64_i64_=>_none (func (param i64 i64 i64))) (type $i64_i64_=>_i32 (func (param i64 i64) (result i32))) (type $i64_i64_i32_=>_none (func (param i64 i64 i32))) (type $i64_i64_=>_v128 (func (param i64 i64) (result v128))) (type $i64_i64_v128_=>_none (func (param i64 i64 v128))) (type $i64_i64_=>_f64 (func (param i64 i64) (result f64))) (type $i64_i64_f64_=>_none (func (param i64 i64 f64))) (type $none_=>_none (func)) (type $i64_i64_=>_f32 (func (param i64 i64) (result f32))) (type $i64_i64_f32_=>_none (func (param i64 i64 f32))) (type $none_=>_i64 (func (result i64))) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i64))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 i64 100 100) (func $loads (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i64.const 1) (i64.const 0) ) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) (module (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i64_i64_=>_i32 (func (param i64 i64) (result i32))) (type $i64_i64_i64_=>_none (func (param i64 i64 i64))) (type $i64_i64_i32_=>_none (func (param i64 i64 i32))) (type $i64_i64_=>_v128 (func (param i64 i64) (result v128))) (type $i64_i64_v128_=>_none (func (param i64 i64 v128))) (type $i64_i64_=>_f64 (func (param i64 i64) (result f64))) (type $i64_i64_f64_=>_none (func (param i64 i64 f64))) (type $FUNCSIG$v (func)) (type $i64_i64_=>_f32 (func (param i64 i64) (result f32))) (type $i64_i64_f32_=>_none (func (param i64 i64 f32))) (type $none_=>_i64 (func (result i64))) (import "env" "emscripten_get_sbrk_ptr" (func $foo (result i64))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 (shared i64 100 100)) (func $actions (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i64.const 1) (i64.const 0) ) ) (call $SAFE_HEAP_STORE_i32_4_4 (i64.const 1) (i64.const 0) (i32.const 100) ) ) (func $SAFE_HEAP_LOAD_i32_1_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.shr_s (i32.shl (i32.atomic.load8_u (local.get $2) ) (i32.const 24) ) (i32.const 24) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.shr_s (i32.shl (i32.atomic.load16_u (local.get $2) ) (i32.const 16) ) (i32.const 16) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_A (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i32.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i64) (param $1 i64) (result i32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.shr_s (i64.shl (i64.atomic.load8_u (local.get $2) ) (i64.const 56) ) (i64.const 56) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load16_u (local.get $2) ) (i64.const 48) ) (i64.const 48) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load32_u (local.get $2) ) (i64.const 32) ) (i64.const 32) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.atomic.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_A (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (i64.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i64) (param $1 i64) (result i64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i64) (param $1 i64) (result f32) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i64) (param $1 i64) (result f64) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i64) (param $1 i64) (result v128) (local $2 i64) (local.set $2 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $2) (i64.const 0) ) (i64.gt_u (i64.add (local.get $2) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $2) ) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_A (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_A (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i32.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_A (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i32.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i64) (param $1 i64) (param $2 i32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_A (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 1) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_A (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 2) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_A (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i64.atomic.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_A (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (i64.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i64) (param $1 i64) (param $2 i64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i64) (param $1 i64) (param $2 f32) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 4) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i64) (param $1 i64) (param $2 f64) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 8) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i64) (param $1 i64) (param $2 v128) (local $3 i64) (local.set $3 (i64.add (local.get $0) (local.get $1) ) ) (if (i32.or (i64.eq (local.get $3) (i64.const 0) ) (i64.gt_u (i64.add (local.get $3) (i64.const 16) ) (i64.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (i32.wrap_i64 (local.get $3) ) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) binaryen-version_108/test/passes/safe-heap_enable-threads_enable-simd64.wast000066400000000000000000000034341423707623100273270ustar00rootroot00000000000000(module (memory (shared i64 100 100)) (func $loads (drop (i32.load (i64.const 1))) (drop (i32.atomic.load (i64.const 1))) (drop (i32.load offset=31 (i64.const 2))) (drop (i32.load align=2 (i64.const 3))) (drop (i32.load align=1 (i64.const 4))) (drop (i32.load8_s (i64.const 5))) (drop (i32.load16_u (i64.const 6))) (drop (i64.load8_s (i64.const 7))) (drop (i64.load16_u (i64.const 8))) (drop (i64.load32_s (i64.const 9))) (drop (i64.load align=4 (i64.const 10))) (drop (i64.load (i64.const 11))) (drop (f32.load (i64.const 12))) (drop (f64.load (i64.const 13))) (drop (v128.load (i64.const 14))) ) (func $stores (i32.store (i64.const 1) (i32.const 100)) (i32.atomic.store (i64.const 1) (i32.const 100)) (i32.store offset=31 (i64.const 2) (i32.const 200)) (i32.store align=2 (i64.const 3) (i32.const 300)) (i32.store align=1 (i64.const 4) (i32.const 400)) (i32.store8 (i64.const 5) (i32.const 500)) (i32.store16 (i64.const 6) (i32.const 600)) (i64.store8 (i64.const 7) (i64.const 700)) (i64.store16 (i64.const 8) (i64.const 800)) (i64.store32 (i64.const 9) (i64.const 900)) (i64.store align=4 (i64.const 10) (i64.const 1000)) (i64.store (i64.const 11) (i64.const 1100)) (f32.store (i64.const 12) (f32.const 1200)) (f64.store (i64.const 13) (f64.const 1300)) (v128.store (i64.const 14) (v128.const i32x4 1 2 3 4)) ) ) ;; not shared (module (memory i64 100 100) (func $loads (drop (i32.load (i64.const 1))) ) ) ;; pre-existing (module (type $FUNCSIG$v (func)) (import "env" "emscripten_get_sbrk_ptr" (func $foo (result i64))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 (shared i64 100 100)) (func $actions (drop (i32.load (i64.const 1))) (i32.store (i64.const 1) (i32.const 100)) ) ) binaryen-version_108/test/passes/safe-heap_low-memory-unused_enable-threads_enable-simd.txt000066400000000000000000003675021423707623100325170ustar00rootroot00000000000000(module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_v128 (func (param i32 i32) (result v128))) (type $i32_i32_v128_=>_none (func (param i32 i32 v128))) (type $none_=>_none (func)) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_i32 (func (result i32))) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 (shared 100 100)) (func $loads (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 1) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_A (i32.const 1) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 2) (i32.const 31) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_2 (i32.const 3) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_4_1 (i32.const 4) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_1_1 (i32.const 5) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i32_2_U_2 (i32.const 6) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_1_1 (i32.const 7) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_2_U_2 (i32.const 8) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_4_4 (i32.const 9) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_8_4 (i32.const 10) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_i64_8_8 (i32.const 11) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_f32_4_4 (i32.const 12) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_f64_8_8 (i32.const 13) (i32.const 0) ) ) (drop (call $SAFE_HEAP_LOAD_v128_16_16 (i32.const 14) (i32.const 0) ) ) ) (func $stores (call $SAFE_HEAP_STORE_i32_4_4 (i32.const 1) (i32.const 0) (i32.const 100) ) (call $SAFE_HEAP_STORE_i32_4_A (i32.const 1) (i32.const 0) (i32.const 100) ) (call $SAFE_HEAP_STORE_i32_4_4 (i32.const 2) (i32.const 31) (i32.const 200) ) (call $SAFE_HEAP_STORE_i32_4_2 (i32.const 3) (i32.const 0) (i32.const 300) ) (call $SAFE_HEAP_STORE_i32_4_1 (i32.const 4) (i32.const 0) (i32.const 400) ) (call $SAFE_HEAP_STORE_i32_1_1 (i32.const 5) (i32.const 0) (i32.const 500) ) (call $SAFE_HEAP_STORE_i32_2_2 (i32.const 6) (i32.const 0) (i32.const 600) ) (call $SAFE_HEAP_STORE_i64_1_1 (i32.const 7) (i32.const 0) (i64.const 700) ) (call $SAFE_HEAP_STORE_i64_2_2 (i32.const 8) (i32.const 0) (i64.const 800) ) (call $SAFE_HEAP_STORE_i64_4_4 (i32.const 9) (i32.const 0) (i64.const 900) ) (call $SAFE_HEAP_STORE_i64_8_4 (i32.const 10) (i32.const 0) (i64.const 1000) ) (call $SAFE_HEAP_STORE_i64_8_8 (i32.const 11) (i32.const 0) (i64.const 1100) ) (call $SAFE_HEAP_STORE_f32_4_4 (i32.const 12) (i32.const 0) (f32.const 1200) ) (call $SAFE_HEAP_STORE_f64_8_8 (i32.const 13) (i32.const 0) (f64.const 1300) ) (call $SAFE_HEAP_STORE_v128_16_16 (i32.const 14) (i32.const 0) (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004) ) ) (func $SAFE_HEAP_LOAD_i32_1_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.shr_s (i32.shl (i32.atomic.load8_u (local.get $2) ) (i32.const 24) ) (i32.const 24) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.shr_s (i32.shl (i32.atomic.load16_u (local.get $2) ) (i32.const 16) ) (i32.const 16) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.shr_s (i64.shl (i64.atomic.load8_u (local.get $2) ) (i64.const 56) ) (i64.const 56) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load16_u (local.get $2) ) (i64.const 48) ) (i64.const 48) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load32_u (local.get $2) ) (i64.const 32) ) (i64.const 32) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.atomic.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.atomic.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) (module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_v128 (func (param i32 i32) (result v128))) (type $i32_i32_v128_=>_none (func (param i32 i32 v128))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $none_=>_none (func)) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_i32 (func (result i32))) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 100 100) (func $loads (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 1) (i32.const 0) ) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) (module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_v128 (func (param i32 i32) (result v128))) (type $i32_i32_v128_=>_none (func (param i32 i32 v128))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $FUNCSIG$v (func)) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_i32 (func (result i32))) (import "env" "emscripten_get_sbrk_ptr" (func $foo (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 (shared 100 100)) (func $actions (drop (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 1) (i32.const 0) ) ) (call $SAFE_HEAP_STORE_i32_4_4 (i32.const 1) (i32.const 0) (i32.const 100) ) ) (func $SAFE_HEAP_LOAD_i32_1_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.shr_s (i32.shl (i32.atomic.load8_u (local.get $2) ) (i32.const 24) ) (i32.const 24) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.shr_s (i32.shl (i32.atomic.load16_u (local.get $2) ) (i32.const 16) ) (i32.const 16) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_A (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.shr_s (i64.shl (i64.atomic.load8_u (local.get $2) ) (i64.const 56) ) (i64.const 56) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.atomic.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load16_u (local.get $2) ) (i64.const 48) ) (i64.const 48) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.atomic.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.shr_s (i64.shl (i64.atomic.load32_u (local.get $2) ) (i64.const 32) ) (i64.const 32) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.atomic.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_A (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.atomic.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (v128.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (v128.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (v128.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (v128.load align=8 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $2) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $2) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 15) ) (call $alignfault) ) (v128.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_A (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.atomic.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.atomic.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.atomic.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_A (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.atomic.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (v128.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (v128.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (v128.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (v128.store align=8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.lt_u (local.get $3) (i32.const 1024) ) (i32.gt_u (i32.add (local.get $3) (i32.const 16) ) (i32.load (call $foo) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 15) ) (call $alignfault) ) (v128.store (local.get $3) (local.get $2) ) ) ) binaryen-version_108/test/passes/safe-heap_low-memory-unused_enable-threads_enable-simd.wast000066400000000000000000000034201423707623100326400ustar00rootroot00000000000000(module (memory (shared 100 100)) (func $loads (drop (i32.load (i32.const 1))) (drop (i32.atomic.load (i32.const 1))) (drop (i32.load offset=31 (i32.const 2))) (drop (i32.load align=2 (i32.const 3))) (drop (i32.load align=1 (i32.const 4))) (drop (i32.load8_s (i32.const 5))) (drop (i32.load16_u (i32.const 6))) (drop (i64.load8_s (i32.const 7))) (drop (i64.load16_u (i32.const 8))) (drop (i64.load32_s (i32.const 9))) (drop (i64.load align=4 (i32.const 10))) (drop (i64.load (i32.const 11))) (drop (f32.load (i32.const 12))) (drop (f64.load (i32.const 13))) (drop (v128.load (i32.const 14))) ) (func $stores (i32.store (i32.const 1) (i32.const 100)) (i32.atomic.store (i32.const 1) (i32.const 100)) (i32.store offset=31 (i32.const 2) (i32.const 200)) (i32.store align=2 (i32.const 3) (i32.const 300)) (i32.store align=1 (i32.const 4) (i32.const 400)) (i32.store8 (i32.const 5) (i32.const 500)) (i32.store16 (i32.const 6) (i32.const 600)) (i64.store8 (i32.const 7) (i64.const 700)) (i64.store16 (i32.const 8) (i64.const 800)) (i64.store32 (i32.const 9) (i64.const 900)) (i64.store align=4 (i32.const 10) (i64.const 1000)) (i64.store (i32.const 11) (i64.const 1100)) (f32.store (i32.const 12) (f32.const 1200)) (f64.store (i32.const 13) (f64.const 1300)) (v128.store (i32.const 14) (v128.const i32x4 1 2 3 4)) ) ) ;; not shared (module (memory 100 100) (func $loads (drop (i32.load (i32.const 1))) ) ) ;; pre-existing (module (type $FUNCSIG$v (func)) (import "env" "emscripten_get_sbrk_ptr" (func $foo (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 (shared 100 100)) (func $actions (drop (i32.load (i32.const 1))) (i32.store (i32.const 1) (i32.const 100)) ) ) binaryen-version_108/test/passes/safe-heap_start-function.passes000066400000000000000000000000121423707623100253240ustar00rootroot00000000000000safe-heap binaryen-version_108/test/passes/safe-heap_start-function.txt000066400000000000000000000714471423707623100246710ustar00rootroot00000000000000(module (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_f32_=>_none (func (param i32 i32 f32))) (type $none_=>_i32 (func (result i32))) (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32))) (import "env" "segfault" (func $segfault)) (import "env" "alignfault" (func $alignfault)) (memory $0 1 1) (start $mystart) (func $mystart (i32.store (i32.load (i32.const 42) ) (i32.const 43) ) (call $foo) ) (func $foo (i32.store (i32.load (i32.const 1234) ) (i32.const 5678) ) (call $foo2) ) (func $foo2 (i32.store (i32.load (i32.const 98) ) (i32.const 99) ) ) (func $bar (call $SAFE_HEAP_STORE_i32_4_4 (call $SAFE_HEAP_LOAD_i32_4_4 (i32.const 1234) (i32.const 0) ) (i32.const 0) (i32.const 5678) ) ) (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load8_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load16_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load16_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_s align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_s align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_s (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load32_u align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load32_u align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load32_u (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (i64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (i64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (i64.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f32.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f32.load (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.load align=1 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 1) ) (call $alignfault) ) (f64.load align=2 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 3) ) (call $alignfault) ) (f64.load align=4 (local.get $2) ) ) (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local.set $2 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $2) (i32.const 0) ) (i32.gt_u (i32.add (local.get $2) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $2) (i32.const 7) ) (call $alignfault) ) (f64.load (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 1) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store8 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store16 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 2) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store16 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store32 align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store32 align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store32 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (i64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (i64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (i64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (i64.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f32.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f32.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 4) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f32.store (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (f64.store align=1 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 1) ) (call $alignfault) ) (f64.store align=2 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 3) ) (call $alignfault) ) (f64.store align=4 (local.get $3) (local.get $2) ) ) (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64) (local $3 i32) (local.set $3 (i32.add (local.get $0) (local.get $1) ) ) (if (i32.or (i32.eq (local.get $3) (i32.const 0) ) (i32.gt_u (i32.add (local.get $3) (i32.const 8) ) (i32.load (call $emscripten_get_sbrk_ptr) ) ) ) (call $segfault) ) (if (i32.and (local.get $3) (i32.const 7) ) (call $alignfault) ) (f64.store (local.get $3) (local.get $2) ) ) ) binaryen-version_108/test/passes/safe-heap_start-function.wast000066400000000000000000000011061423707623100250110ustar00rootroot00000000000000(module (memory 1 1) (func $mystart ;; should not be modified because its the start function (i32.store (i32.load (i32.const 42)) (i32.const 43)) (call $foo) ) (func $foo ;; should not be modified because its reachable from start function (i32.store (i32.load (i32.const 1234)) (i32.const 5678)) (call $foo2) ) (func $foo2 ;; should not be modified because its reachable from start function (i32.store (i32.load (i32.const 98)) (i32.const 99)) ) (func $bar (i32.store (i32.load (i32.const 1234)) (i32.const 5678)) ) (start $mystart) ) binaryen-version_108/test/passes/set-globals.passes000066400000000000000000000000611423707623100226530ustar00rootroot00000000000000set-globals_pass-arg=set-globals@foo=1337,bar=42 binaryen-version_108/test/passes/set-globals.txt000066400000000000000000000001201423707623100221700ustar00rootroot00000000000000(module (global $foo i32 (i32.const 1337)) (global $bar i64 (i64.const 42)) ) binaryen-version_108/test/passes/set-globals.wast000066400000000000000000000001741423707623100223400ustar00rootroot00000000000000(module ;; an imported i32 (import "env" "in" (global $foo i32)) ;; a defined i64 (global $bar i64 (i64.const 1234)) ) binaryen-version_108/test/passes/simplify-globals-optimizing_enable-mutable-globals.txt000066400000000000000000000060111423707623100320030ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "global-1" (global $g1 i32)) (global $g2 i32 (global.get $g1)) (func $foo (drop (global.get $g1) ) (drop (global.get $g1) ) ) ) (module (type $none_=>_none (func)) (import "env" "global-1" (global $g1 i32)) (global $g2 i32 (global.get $g1)) (global $g3 i32 (global.get $g2)) (global $g4 i32 (global.get $g3)) (func $foo (drop (global.get $g1) ) (drop (global.get $g1) ) (drop (global.get $g1) ) (drop (global.get $g1) ) ) ) (module (import "env" "global-1" (global $g1 (mut i32))) (global $g2 i32 (global.get $g1)) ) (module (type $none_=>_none (func)) (import "env" "global-1" (global $g1 i32)) (global $g2 i32 (global.get $g1)) (func $foo (unreachable) ) ) (module (import "env" "global-1" (global $g1 (mut i32))) (global $g2 (mut i32) (global.get $g1)) (export "global-2" (global $g2)) ) (module (type $none_=>_none (func)) (global $g1 i32 (i32.const 1)) (global $g2 i32 (i32.const 1)) (global $g3 f64 (f64.const -3.4)) (global $g4 f64 (f64.const -2.8)) (global $g5 i32 (i32.const 2)) (global $g6 i32 (i32.const 2)) (global $g7 i32 (i32.const 3)) (global $g8 i32 (i32.const 3)) (global $g9 i32 (i32.const 4)) (global $ga (mut i32) (i32.const 4)) (global $gb (mut i32) (i32.const 5)) (global $gc i32 (i32.const 5)) (func $foo (global.set $ga (i32.const 6) ) (global.set $gb (i32.const 7) ) ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $f (param $0 i32) (result i32) (global.set $g1 (i32.const 100) ) (global.set $g2 (local.get $0) ) (if (local.get $0) (return (i32.const 0) ) ) (if (local.tee $0 (i32.add (global.get $g1) (global.get $g2) ) ) (return (i32.const 1) ) ) (global.set $g1 (i32.const 200) ) (global.set $g2 (local.get $0) ) (i32.add (global.get $g2) (i32.const 200) ) ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $f (param $0 i32) (result i32) (global.set $g1 (i32.const 100) ) (global.set $g2 (local.get $0) ) (i32.add (global.get $g2) (i32.const 200) ) ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (global $g1 (mut i32) (i32.const 1)) (global $g2 i32 (i32.const 1)) (func $no (param $x i32) (result i32) (global.set $g1 (i32.const 100) ) (drop (call $no (i32.const 200) ) ) (global.get $g1) ) (func $no2 (param $x i32) (result i32) (global.set $g1 (i32.const 100) ) (global.set $g1 (local.get $x) ) (global.get $g1) ) (func $yes (param $0 i32) (result i32) (global.set $g1 (i32.const 100) ) (i32.const 100) ) ) (module (type $none_=>_f64 (func (result f64))) (global $global$0 i32 (i32.const 0)) (global $global$1 i32 (i32.const 0)) (export "func_9" (func $0)) (func $0 (result f64) (drop (unreachable) ) ) ) binaryen-version_108/test/passes/simplify-globals-optimizing_enable-mutable-globals.wast000066400000000000000000000070461423707623100321530ustar00rootroot00000000000000(module (import "env" "global-1" (global $g1 i32)) (global $g2 (mut i32) (global.get $g1)) (func $foo (drop (global.get $g1)) (drop (global.get $g2)) ) ) (module (import "env" "global-1" (global $g1 i32)) (global $g2 (mut i32) (global.get $g1)) (global $g3 (mut i32) (global.get $g2)) (global $g4 (mut i32) (global.get $g3)) (func $foo (drop (global.get $g1)) (drop (global.get $g2)) (drop (global.get $g3)) (drop (global.get $g4)) ) ) (module (import "env" "global-1" (global $g1 (mut i32))) (global $g2 (mut i32) (global.get $g1)) ) (module (import "env" "global-1" (global $g1 i32)) (global $g2 (mut i32) (global.get $g1)) (func $foo (global.set $g2 (unreachable)) ) ) (module (import "env" "global-1" (global $g1 (mut i32))) (global $g2 (mut i32) (global.get $g1)) (export "global-2" (global $g2)) ) (module (global $g1 i32 (i32.const 1)) (global $g2 i32 (global.get $g1)) (global $g3 f64 (f64.const -3.4)) (global $g4 (mut f64) (f64.const -2.8)) (global $g5 i32 (i32.const 2)) (global $g6 (mut i32) (global.get $g5)) (global $g7 (mut i32) (i32.const 3)) (global $g8 i32 (global.get $g7)) (global $g9 i32 (i32.const 4)) (global $ga (mut i32) (global.get $g9)) (global $gb (mut i32) (i32.const 5)) (global $gc i32 (global.get $gb)) (func $foo (drop (global.get $g1)) (drop (global.get $g2)) (drop (global.get $g3)) (drop (global.get $g4)) (drop (global.get $g5)) (drop (global.get $g6)) (drop (global.get $g7)) (drop (global.get $g8)) (drop (global.get $g9)) (drop (global.get $ga)) (drop (global.get $gb)) (drop (global.get $gc)) (global.set $ga (i32.const 6)) (global.set $gb (i32.const 7)) ) ) (module (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $f (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g2 (local.get $x)) (if (local.get $x) (return (i32.const 0))) (local.set $x (i32.add (global.get $g1) (global.get $g2) ) ) (if (local.get $x) (return (i32.const 1))) (global.set $g1 (i32.const 200)) (global.set $g2 (local.get $x)) (local.set $x (i32.add (global.get $g1) (global.get $g2) ) ) (local.get $x) ) ) (module (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $f (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g2 (local.get $x)) (local.set $x (i32.add (i32.add (global.get $g1) (global.get $g1) ) (global.get $g2) ) ) (local.get $x) ) ) (module (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $no (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (drop (call $no (i32.const 200))) ;; invalidate (global.get $g1) ) (func $no2 (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g1 (local.get $x)) ;; invalidate (global.get $g1) ) (func $yes (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g2 (local.get $x)) ;; almost invalidate (global.get $g1) ) ) ;; don't remove a value with a side effect (module (global $global$0 (mut i32) (i32.const 0)) (global $global$1 (mut i32) (i32.const 0)) (export "func_9" (func $0)) (func $0 (result f64) (global.set $global$0 (block $label$1 (result i32) (if (i32.eqz (global.get $global$1) ) (unreachable) ) (i32.const 2) ) ) (f64.const 1) ) ) binaryen-version_108/test/passes/simplify-globals_all-features.txt000066400000000000000000000073531423707623100257140ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "global-1" (global $g1 i32)) (global $g2 i32 (global.get $g1)) (func $foo (drop (global.get $g1) ) (drop (global.get $g1) ) ) ) (module (type $none_=>_none (func)) (import "env" "global-1" (global $g1 i32)) (global $g2 i32 (global.get $g1)) (global $g3 i32 (global.get $g2)) (global $g4 i32 (global.get $g3)) (func $foo (drop (global.get $g1) ) (drop (global.get $g1) ) (drop (global.get $g1) ) (drop (global.get $g1) ) ) ) (module (import "env" "global-1" (global $g1 (mut i32))) (global $g2 i32 (global.get $g1)) ) (module (type $none_=>_none (func)) (import "env" "global-1" (global $g1 i32)) (global $g2 i32 (global.get $g1)) (func $foo (drop (unreachable) ) ) ) (module (import "env" "global-1" (global $g1 (mut i32))) (global $g2 (mut i32) (global.get $g1)) (export "global-2" (global $g2)) ) (module (type $none_=>_none (func)) (global $g1 i32 (i32.const 1)) (global $g2 i32 (i32.const 1)) (global $g3 f64 (f64.const -3.4)) (global $g4 f64 (f64.const -2.8)) (global $g5 i32 (i32.const 2)) (global $g6 i32 (i32.const 2)) (global $g7 i32 (i32.const 3)) (global $g8 i32 (i32.const 3)) (global $g9 i32 (i32.const 4)) (global $ga (mut i32) (i32.const 4)) (global $gb (mut i32) (i32.const 5)) (global $gc i32 (i32.const 5)) (func $foo (drop (i32.const 1) ) (drop (i32.const 1) ) (drop (f64.const -3.4) ) (drop (f64.const -2.8) ) (drop (i32.const 2) ) (drop (i32.const 2) ) (drop (i32.const 3) ) (drop (i32.const 3) ) (drop (i32.const 4) ) (drop (global.get $ga) ) (drop (global.get $gb) ) (drop (i32.const 5) ) (global.set $ga (i32.const 6) ) (global.set $gb (i32.const 7) ) ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $f (param $x i32) (result i32) (global.set $g1 (i32.const 100) ) (global.set $g2 (local.get $x) ) (if (local.get $x) (return (i32.const 0) ) ) (local.set $x (i32.add (global.get $g1) (global.get $g2) ) ) (if (local.get $x) (return (i32.const 1) ) ) (global.set $g1 (i32.const 200) ) (global.set $g2 (local.get $x) ) (local.set $x (i32.add (i32.const 200) (global.get $g2) ) ) (local.get $x) ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $f (param $x i32) (result i32) (global.set $g1 (i32.const 100) ) (global.set $g2 (local.get $x) ) (local.set $x (i32.add (i32.add (i32.const 100) (i32.const 100) ) (global.get $g2) ) ) (local.get $x) ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (global $g1 (mut i32) (i32.const 1)) (global $g2 i32 (i32.const 1)) (func $no (param $x i32) (result i32) (global.set $g1 (i32.const 100) ) (drop (call $no (i32.const 200) ) ) (global.get $g1) ) (func $no2 (param $x i32) (result i32) (global.set $g1 (i32.const 100) ) (global.set $g1 (local.get $x) ) (global.get $g1) ) (func $yes (param $x i32) (result i32) (global.set $g1 (i32.const 100) ) (drop (local.get $x) ) (i32.const 100) ) ) (module (type $none_=>_none (func)) (import "env" "global-1" (global $g1 anyref)) (global $g2 anyref (global.get $g1)) (global $g3 anyref (ref.null any)) (func $test1 (drop (global.get $g1) ) (drop (global.get $g1) ) ) (func $test2 (drop (ref.null any) ) ) ) (module (type $none_=>_none (func)) (global $write-only i32 (i32.const 1)) (func $foo (drop (i32.const 2) ) ) ) binaryen-version_108/test/passes/simplify-globals_all-features.wast000066400000000000000000000072111423707623100260440ustar00rootroot00000000000000(module (import "env" "global-1" (global $g1 i32)) (global $g2 (mut i32) (global.get $g1)) (func $foo (drop (global.get $g1)) (drop (global.get $g2)) ) ) (module (import "env" "global-1" (global $g1 i32)) (global $g2 (mut i32) (global.get $g1)) (global $g3 (mut i32) (global.get $g2)) (global $g4 (mut i32) (global.get $g3)) (func $foo (drop (global.get $g1)) (drop (global.get $g2)) (drop (global.get $g3)) (drop (global.get $g4)) ) ) (module (import "env" "global-1" (global $g1 (mut i32))) (global $g2 (mut i32) (global.get $g1)) ) (module (import "env" "global-1" (global $g1 i32)) (global $g2 (mut i32) (global.get $g1)) (func $foo (global.set $g2 (unreachable)) ) ) (module (import "env" "global-1" (global $g1 (mut i32))) (global $g2 (mut i32) (global.get $g1)) (export "global-2" (global $g2)) ) (module (global $g1 i32 (i32.const 1)) (global $g2 i32 (global.get $g1)) (global $g3 f64 (f64.const -3.4)) (global $g4 (mut f64) (f64.const -2.8)) (global $g5 i32 (i32.const 2)) (global $g6 (mut i32) (global.get $g5)) (global $g7 (mut i32) (i32.const 3)) (global $g8 i32 (global.get $g7)) (global $g9 i32 (i32.const 4)) (global $ga (mut i32) (global.get $g9)) (global $gb (mut i32) (i32.const 5)) (global $gc i32 (global.get $gb)) (func $foo (drop (global.get $g1)) (drop (global.get $g2)) (drop (global.get $g3)) (drop (global.get $g4)) (drop (global.get $g5)) (drop (global.get $g6)) (drop (global.get $g7)) (drop (global.get $g8)) (drop (global.get $g9)) (drop (global.get $ga)) (drop (global.get $gb)) (drop (global.get $gc)) (global.set $ga (i32.const 6)) (global.set $gb (i32.const 7)) ) ) (module (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $f (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g2 (local.get $x)) (if (local.get $x) (return (i32.const 0))) (local.set $x (i32.add (global.get $g1) (global.get $g2) ) ) (if (local.get $x) (return (i32.const 1))) (global.set $g1 (i32.const 200)) (global.set $g2 (local.get $x)) (local.set $x (i32.add (global.get $g1) (global.get $g2) ) ) (local.get $x) ) ) (module (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $f (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g2 (local.get $x)) (local.set $x (i32.add (i32.add (global.get $g1) (global.get $g1) ) (global.get $g2) ) ) (local.get $x) ) ) (module (global $g1 (mut i32) (i32.const 1)) (global $g2 (mut i32) (i32.const 1)) (func $no (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (drop (call $no (i32.const 200))) ;; invalidate (global.get $g1) ) (func $no2 (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g1 (local.get $x)) ;; invalidate (global.get $g1) ) (func $yes (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g2 (local.get $x)) ;; almost invalidate (global.get $g1) ) ) ;; Reference type tests (module (import "env" "global-1" (global $g1 externref)) (global $g2 (mut externref) (global.get $g1)) (global $g3 externref (ref.null extern)) (func $test1 (drop (global.get $g1)) (drop (global.get $g2)) ) (func $test2 (drop (global.get $g3)) ) ) ;; Global is used by `set` but never `get` can be eliminated. (module (global $write-only (mut i32) (i32.const 1)) (func $foo (global.set $write-only (i32.const 2)) ) ) binaryen-version_108/test/passes/simplify-globals_all-features_fuzz-exec.txt000066400000000000000000000011431423707623100277030ustar00rootroot00000000000000[fuzz-exec] calling export [fuzz-exec] note result: export => funcref (module (type $f32_i31ref_i64_f64_funcref_=>_none (func (param f32 i31ref i64 f64 funcref))) (type $none_=>_funcref (func (result funcref))) (global $global$0 (mut funcref) (ref.null func)) (elem declare func $0) (export "export" (func $1)) (func $0 (param $0 f32) (param $1 i31ref) (param $2 i64) (param $3 f64) (param $4 funcref) (nop) ) (func $1 (result funcref) (global.set $global$0 (ref.func $0) ) (ref.func $0) ) ) [fuzz-exec] calling export [fuzz-exec] note result: export => funcref [fuzz-exec] comparing export binaryen-version_108/test/passes/simplify-globals_all-features_fuzz-exec.wast000066400000000000000000000006541423707623100300500ustar00rootroot00000000000000(module (global $global$0 (mut funcref) (ref.null func)) (func $0 (param $0 f32) (param $1 i31ref) (param $2 i64) (param $3 f64) (param $4 funcref) (nop) ) (func "export" (result funcref) ;; this set's value will be applied to the get right after it. we should carry ;; over the specific typed function reference type properly while doing so. (global.set $global$0 (ref.func $0) ) (global.get $global$0) ) ) binaryen-version_108/test/passes/simplify-locals-nonesting.txt000066400000000000000000000057041423707623100251020ustar00rootroot00000000000000(module (type $0 (func (param i64 i64 i64) (result i32))) (type $1 (func (param i32) (result i32))) (func $figure-1a (param $a i64) (param $x i64) (param $y i64) (result i32) (local $i i32) (local $j i32) (local $r i32) (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i64) (local $10 i64) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (block $block (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (local.set $12 (i64.eq (local.get $a) (local.get $x) ) ) (local.set $13 (i64.ne (local.get $a) (local.get $y) ) ) (nop) (nop) (nop) (local.set $15 (i32.and (local.get $12) (local.get $13) ) ) (return (local.get $15) ) (unreachable) ) (nop) (return (local.get $16) ) ) (func $figure-1b (param $a i64) (param $x i64) (param $y i64) (result i32) (local $i i32) (local $j i32) (local $r i32) (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i64) (local $10 i64) (local $11 i32) (local $12 i64) (local $13 i64) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (local $18 i32) (block $block (nop) (nop) (local.set $8 (i64.lt_s (local.get $x) (local.get $y) ) ) (if (local.get $8) (block $block0 (block $block1 (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (local.set $15 (i64.eq (local.get $a) (local.get $x) ) ) (local.set $16 (i64.ne (local.get $a) (local.get $y) ) ) (nop) (nop) (nop) (local.set $18 (i32.and (local.get $15) (local.get $16) ) ) (return (local.get $18) ) (unreachable) ) (unreachable) ) (block $block2 (unreachable) (unreachable) ) ) ) (unreachable) ) (func $figure-3-if (param $x i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (block $block (block $block3 (nop) (local.set $2 (i32.and (local.get $x) (i32.const 1) ) ) (if (local.get $2) (block $block4 (nop) (nop) (local.set $x (i32.add (local.get $x) (i32.const 1) ) ) (nop) ) (block $block5 (nop) (nop) (local.set $x (i32.add (local.get $x) (i32.const 2) ) ) (nop) ) ) ) (nop) (nop) (local.set $8 (i32.and (local.get $x) (i32.const 1) ) ) (return (local.get $8) ) (unreachable) ) (nop) (return (local.get $9) ) ) ) binaryen-version_108/test/passes/simplify-locals-nonesting.wast000066400000000000000000000077441423707623100252470ustar00rootroot00000000000000(module (type $0 (func (param i64 i64 i64) (result i32))) (type $1 (func (param i32) (result i32))) (func $figure-1a (; 0 ;) (type $0) (param $a i64) (param $x i64) (param $y i64) (result i32) (local $i i32) (local $j i32) (local $r i32) (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i64) (local $10 i64) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (block (local.set $6 (local.get $a) ) (local.set $7 (local.get $x) ) (local.set $8 (i64.eq (local.get $6) (local.get $7) ) ) (local.set $i (local.get $8) ) (nop) (local.set $9 (local.get $a) ) (local.set $10 (local.get $y) ) (local.set $11 (i64.ne (local.get $9) (local.get $10) ) ) (local.set $j (local.get $11) ) (nop) (local.set $12 (local.get $i) ) (local.set $13 (local.get $j) ) (local.set $14 (i32.and (local.get $12) (local.get $13) ) ) (local.set $r (local.get $14) ) (nop) (local.set $15 (local.get $r) ) (return (local.get $15) ) (unreachable) ) (local.set $17 (local.get $16) ) (return (local.get $17) ) ) (func $figure-1b (; 1 ;) (type $0) (param $a i64) (param $x i64) (param $y i64) (result i32) (local $i i32) (local $j i32) (local $r i32) (local $6 i64) (local $7 i64) (local $8 i32) (local $9 i64) (local $10 i64) (local $11 i32) (local $12 i64) (local $13 i64) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (local $18 i32) (block (local.set $6 (local.get $x) ) (local.set $7 (local.get $y) ) (local.set $8 (i64.lt_s (local.get $6) (local.get $7) ) ) (if (local.get $8) (block (block $block (local.set $9 (local.get $a) ) (local.set $10 (local.get $x) ) (local.set $11 (i64.eq (local.get $9) (local.get $10) ) ) (local.set $i (local.get $11) ) (nop) (local.set $12 (local.get $a) ) (local.set $13 (local.get $y) ) (local.set $14 (i64.ne (local.get $12) (local.get $13) ) ) (local.set $j (local.get $14) ) (nop) (local.set $15 (local.get $i) ) (local.set $16 (local.get $j) ) (local.set $17 (i32.and (local.get $15) (local.get $16) ) ) (local.set $r (local.get $17) ) (nop) (local.set $18 (local.get $r) ) (return (local.get $18) ) (unreachable) ) (unreachable) ) (block (unreachable) (unreachable) ) ) ) (unreachable) ) (func $figure-3-if (; 2 ;) (type $1) (param $x i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (block (block (local.set $1 (local.get $x) ) (local.set $2 (i32.and (local.get $1) (i32.const 1) ) ) (if (local.get $2) (block (local.set $3 (local.get $x) ) (local.set $4 (i32.add (local.get $3) (i32.const 1) ) ) (local.set $x (local.get $4) ) (nop) ) (block (local.set $5 (local.get $x) ) (local.set $6 (i32.add (local.get $5) (i32.const 2) ) ) (local.set $x (local.get $6) ) (nop) ) ) ) (nop) (local.set $7 (local.get $x) ) (local.set $8 (i32.and (local.get $7) (i32.const 1) ) ) (return (local.get $8) ) (unreachable) ) (local.set $10 (local.get $9) ) (return (local.get $10) ) ) ) binaryen-version_108/test/passes/simplify-locals-nostructure.txt000066400000000000000000000036021423707623100254660ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_=>_i32 (func (param i32) (result i32))) (memory $0 1) (func $contrast (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (nop) (if (local.tee $x (i32.const 1) ) (nop) ) (if (local.get $x) (nop) ) (nop) (drop (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4) ) ) (nop) (drop (block $block (result i32) (i32.const 5) ) ) (if (i32.const 6) (local.set $a (i32.const 7) ) (local.set $a (i32.const 8) ) ) (drop (local.get $a) ) (block $val (if (i32.const 10) (block $block4 (local.set $b (i32.const 11) ) (br $val) ) ) (local.set $b (i32.const 12) ) ) (drop (local.get $b) ) ) (func $no-unreachable (local $x i32) (unreachable) ) (func $implicit-trap-and-global-effects (local $var$0 i32) (local.set $var$0 (i32.trunc_f64_u (f64.const -nan:0xfffffffffffc3) ) ) (f32.store align=1 (i32.const 22) (f32.const 154) ) (drop (local.get $var$0) ) ) (func $implicit-trap-and-local-effects (local $var$0 i32) (local $other i32) (nop) (local.set $other (i32.const 100) ) (drop (i32.trunc_f64_u (f64.const -nan:0xfffffffffffc3) ) ) (if (i32.const 1) (drop (local.get $other) ) ) ) (func $multi-pass-get-equivs-right (param $var$0 i32) (param $var$1 i32) (result f64) (local $var$2 i32) (nop) (i32.store (local.get $var$0) (i32.const 1) ) (f64.promote_f32 (f32.load (local.get $var$0) ) ) ) (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (if (i32.const 1) (local.set $x (i32.const 2) ) (block $block (nop) (nop) ) ) (local.get $x) ) ) binaryen-version_108/test/passes/simplify-locals-nostructure.wast000066400000000000000000000044131423707623100256260ustar00rootroot00000000000000(module (memory 1) (func $contrast ;; check for tee and structure sinking (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local.set $x (i32.const 1)) (if (local.get $x) (nop)) (if (local.get $x) (nop)) (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) (local.set $a (i32.const 7)) (local.set $a (i32.const 8)) ) (drop (local.get $a)) (block $val (if (i32.const 10) (block (local.set $b (i32.const 11)) (br $val) ) ) (local.set $b (i32.const 12)) ) (drop (local.get $b)) ) (func $no-unreachable (local $x i32) (drop (local.tee $x (unreachable) ) ) ) (func $implicit-trap-and-global-effects (local $var$0 i32) (local.set $var$0 (i32.trunc_f64_u (f64.const -nan:0xfffffffffffc3) ;; this implicit trap will actually trap ) ) (f32.store align=1 ;; and if we move it across this store, the store will execute, having global side effects (i32.const 22) (f32.const 154) ) (drop (local.get $var$0) ) ) (func $implicit-trap-and-local-effects (local $var$0 i32) (local $other i32) (local.set $var$0 (i32.trunc_f64_u (f64.const -nan:0xfffffffffffc3) ;; this implicit trap will actually trap ) ) (local.set $other (i32.const 100)) ;; but it's fine to move it across a local effect, that vanishes anyhow (drop (local.get $var$0) ) (if (i32.const 1) (drop (local.get $other) ) ) ) (func $multi-pass-get-equivs-right (param $var$0 i32) (param $var$1 i32) (result f64) (local $var$2 i32) (local.set $var$2 (local.get $var$0) ) (i32.store (local.get $var$2) (i32.const 1) ) (f64.promote_f32 (f32.load (local.get $var$2) ) ) ) (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (if (i32.const 1) (local.set $x (i32.const 2)) (block (local.set $y (local.get $x)) (local.set $x (local.get $y)) ) ) (local.get $x) ) ) binaryen-version_108/test/passes/simplify-locals-notee-nostructure.txt000066400000000000000000000014031423707623100265730ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $contrast (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local.set $x (i32.const 1) ) (if (local.get $x) (nop) ) (if (local.get $x) (nop) ) (nop) (drop (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4) ) ) (nop) (drop (block $block (result i32) (i32.const 5) ) ) (if (i32.const 6) (local.set $a (i32.const 7) ) (local.set $a (i32.const 8) ) ) (drop (local.get $a) ) (block $val (if (i32.const 10) (block $block4 (local.set $b (i32.const 11) ) (br $val) ) ) (local.set $b (i32.const 12) ) ) (drop (local.get $b) ) ) ) binaryen-version_108/test/passes/simplify-locals-notee-nostructure.wast000066400000000000000000000014031423707623100267320ustar00rootroot00000000000000(module (func $contrast ;; check for tee and structure sinking (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local.set $x (i32.const 1)) (if (local.get $x) (nop)) (if (local.get $x) (nop)) (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) (local.set $a (i32.const 7)) (local.set $a (i32.const 8)) ) (drop (local.get $a)) (block $val (if (i32.const 10) (block (local.set $b (i32.const 11)) (br $val) ) ) (local.set $b (i32.const 12)) ) (drop (local.get $b)) ) ) binaryen-version_108/test/passes/simplify-locals-notee.txt000066400000000000000000000014521423707623100242040ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $contrast (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local.set $x (i32.const 1) ) (if (local.get $x) (nop) ) (if (local.get $x) (nop) ) (nop) (drop (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4) ) ) (nop) (drop (block $block (result i32) (i32.const 5) ) ) (nop) (drop (if (result i32) (i32.const 6) (block (result i32) (nop) (i32.const 7) ) (block (result i32) (nop) (i32.const 8) ) ) ) (nop) (drop (block $val (result i32) (if (i32.const 10) (block $block4 (nop) (br $val (i32.const 11) ) ) ) (nop) (i32.const 12) ) ) ) ) binaryen-version_108/test/passes/simplify-locals-notee.wast000066400000000000000000000014031423707623100243370ustar00rootroot00000000000000(module (func $contrast ;; check for tee and structure sinking (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local.set $x (i32.const 1)) (if (local.get $x) (nop)) (if (local.get $x) (nop)) (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) (local.set $a (i32.const 7)) (local.set $a (i32.const 8)) ) (drop (local.get $a)) (block $val (if (i32.const 10) (block (local.set $b (i32.const 11)) (br $val) ) ) (local.set $b (i32.const 12)) ) (drop (local.get $b)) ) ) binaryen-version_108/test/passes/simplify-locals.txt000066400000000000000000000004771423707623100231020ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (func $sink-from-inside (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (nop) (i32.and (select (i32.const 0) (i32.const 1) (i32.const 1) ) (block $block (result i32) (nop) (nop) (nop) (i32.const 1) ) ) ) ) binaryen-version_108/test/passes/simplify-locals.wast000066400000000000000000000007661423707623100232420ustar00rootroot00000000000000(module (func $sink-from-inside (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local.set $2 (block (result i32) (local.set $0 (i32.const 1) ) (drop (local.get $0) ) (local.set $1 ;; after we sink this, must be careful about sinking the parent, to not reorder other things badly (select (i32.const 0) (i32.const 1) (local.get $0) ) ) (i32.const 1) ) ) (i32.and (local.get $1) (local.get $2) ) ) ) binaryen-version_108/test/passes/simplify-locals_all-features.txt000066400000000000000000000716711423707623100255520ustar00rootroot00000000000000(module (type $5 (func (param i32) (result i32))) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) (type $6 (func (param i32 i32 i32 i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $f32_=>_none (func (param f32))) (type $4 (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i64_=>_none (func (param i64))) (type $i32_f64_f64_f32_i32_=>_f64 (func (param i32 f64 f64 f32 i32) (result f64))) (import "env" "waka" (func $waka)) (import "env" "waka_int" (func $waka_int (result i32))) (import "env" "i64sub" (func $_i64Subtract (param i32 i32 i32 i32) (result i32))) (import "env" "moddi" (func $___udivmoddi4 (param i32 i32 i32 i32 i32) (result i32))) (import "env" "lp" (func $lp (param i32 i32) (result i32))) (import "fuzzing-support" "log-f32" (func $fimport$0 (param f32))) (global $global$0 (mut i32) (i32.const 10)) (memory $0 256 256) (func $contrast (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (nop) (if (local.tee $x (i32.const 1) ) (nop) ) (if (local.get $x) (nop) ) (nop) (drop (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4) ) ) (nop) (drop (block $block (result i32) (i32.const 5) ) ) (nop) (drop (if (result i32) (i32.const 6) (block (result i32) (nop) (i32.const 7) ) (block (result i32) (nop) (i32.const 8) ) ) ) (nop) (drop (block $val (result i32) (if (i32.const 10) (block $block4 (nop) (br $val (i32.const 11) ) ) ) (nop) (i32.const 12) ) ) ) (func $b0-yes (param $i1 i32) (local $x i32) (local $y i32) (local $a i32) (local $b i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (nop) (drop (i32.const 5) ) (block $block0 (nop) (drop (i32.const 7) ) ) (nop) (drop (i32.const 11) ) (drop (i32.const 9) ) (drop (local.get $y) ) (block $block1 (drop (i32.const 8) ) (drop (local.get $y) ) ) (drop (i32.const 11) ) (drop (local.get $y) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (block $block2 (nop) (nop) (drop (i32.const 1) ) (drop (i32.const 2) ) (drop (i32.const 3) ) (drop (i32.const 4) ) (nop) (nop) (drop (i32.const 6) ) (drop (i32.const 5) ) (drop (i32.const 7) ) (drop (i32.const 8) ) (local.set $a (i32.const 9) ) (local.set $b (i32.const 10) ) (call $waka) (drop (local.get $a) ) (drop (local.get $b) ) (drop (i32.const 11) ) (drop (i32.const 12) ) (nop) (nop) (drop (i32.load (i32.const 24) ) ) (drop (i32.const 13) ) (drop (i32.const 14) ) (drop (i32.const 15) ) (drop (i32.const 16) ) (nop) (nop) (i32.store (i32.const 48) (i32.const 96) ) (local.set $a (i32.const 17) ) (local.set $b (i32.const 18) ) ) (block $block3 (nop) (local.set $a (call $waka_int) ) (call $waka) (local.set $a (call $waka_int) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) (nop) (local.set $a (i32.load (i32.const 100) ) ) (call $waka) (nop) (drop (i32.load (i32.const 1) ) ) (local.set $a (i32.load (i32.const 101) ) ) (call $waka) (local.set $a (i32.load (i32.const 102) ) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 103) ) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) (nop) (local.set $a (block $block (result i32) (block $block5 (nop) (i32.store (i32.const 104) (local.tee $5 (i32.const 105) ) ) ) (local.get $5) ) ) (call $waka) (local.set $a (block $block6 (result i32) (block $block7 (nop) (i32.store (i32.const 106) (local.tee $6 (i32.const 107) ) ) ) (local.get $6) ) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (block $block8 (result i32) (block $block9 (nop) (i32.store (i32.const 108) (local.tee $7 (i32.const 109) ) ) ) (local.get $7) ) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (block $block10 (result i32) (block $block11 (nop) (i32.store (i32.const 110) (local.tee $8 (i32.const 111) ) ) ) (local.get $8) ) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) ) (block $out-of-block (nop) (nop) (drop (block $b (result i32) (block $c (br $b (i32.const 1337) ) ) (nop) (i32.const 9876) ) ) ) (block $loopey (local.set $a (i32.const 1337) ) (drop (loop $loop-in5 (result i32) (drop (local.get $a) ) (local.tee $a (i32.const 9876) ) ) ) (drop (local.get $a) ) ) ) (func $Ia (param $a i32) (result i32) (local $b i32) (block $switch$0 (block $switch-default$6 (nop) ) ) (return (i32.const 60) ) ) (func $memories (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32) (local $set_with_no_get i32) (nop) (i32.store8 (local.get $i2) (i32.const 1) ) (nop) (i32.store8 (local.tee $bi3 (i32.const 1) ) (local.get $bi3) ) (nop) (i32.store8 (local.get $bi3) (local.get $bi3) ) (local.set $di3 (local.tee $bi3 (i32.const 123) ) ) (i32.store8 (local.get $bi3) (local.get $di3) ) (nop) ) (func $___remdi3 (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) (local $$1$1 i32) (local $$1$0 i32) (local $$rem i32) (local $__stackBase__ i32) (local $$2$1 i32) (local $$2$0 i32) (local $$4$1 i32) (local $$4$0 i32) (local $$10$1 i32) (local $$10$0 i32) (local $$6$0 i32) (local.set $__stackBase__ (i32.load (i32.const 8) ) ) (i32.store (i32.const 8) (i32.add (i32.load (i32.const 8) ) (i32.const 16) ) ) (local.set $$rem (local.get $__stackBase__) ) (local.set $$1$0 (i32.or (i32.shr_s (local.get $$a$1) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$1$1 (i32.or (i32.shr_s (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$2$0 (i32.or (i32.shr_s (local.get $$b$1) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$2$1 (i32.or (i32.shr_s (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (nop) (nop) (drop (call $___udivmoddi4 (call $_i64Subtract (i32.xor (local.get $$1$0) (local.get $$a$0) ) (i32.xor (local.get $$1$1) (local.get $$a$1) ) (local.get $$1$0) (local.get $$1$1) ) (i32.load (i32.const 168) ) (call $_i64Subtract (i32.xor (local.get $$2$0) (local.get $$b$0) ) (i32.xor (local.get $$2$1) (local.get $$b$1) ) (local.get $$2$0) (local.get $$2$1) ) (i32.load (i32.const 168) ) (local.get $$rem) ) ) (local.set $$10$0 (call $_i64Subtract (i32.xor (i32.load (local.get $$rem) ) (local.get $$1$0) ) (i32.xor (i32.load offset=4 (local.get $$rem) ) (local.get $$1$1) ) (local.get $$1$0) (local.get $$1$1) ) ) (local.set $$10$1 (i32.load (i32.const 168) ) ) (i32.store (i32.const 8) (local.get $__stackBase__) ) (return (block $block12 (result i32) (i32.store (i32.const 168) (local.get $$10$1) ) (local.get $$10$0) ) ) ) (func $block-returns (local $x i32) (local.set $x (block $out (result i32) (nop) (drop (br_if $out (local.tee $x (block $waka (result i32) (nop) (drop (br_if $waka (local.tee $x (i32.const 12) ) (i32.const 1) ) ) (nop) (i32.const 34) ) ) (i32.const 1) ) ) (drop (local.get $x) ) (block $waka2 (local.set $x (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 13) ) (block (result i32) (nop) (i32.const 24) ) ) ) (nop) ) (drop (br_if $out (local.tee $x (if (result i32) (i32.const 1) (block (result i32) (block $block3 (nop) ) (i32.const 14) ) (block (result i32) (block $block5 (nop) ) (i32.const 25) ) ) ) (i32.const 1) ) ) (block $sink-out-of-me-i-have-but-one-exit (nop) ) (nop) (i32.const 99) ) ) ) (func $multiple (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32) (nop) (local.set $r (i32.add (local.get $f) (local.get $p) ) ) (local.set $t (local.get $p) ) (local.set $p (i32.load (i32.const 0) ) ) (i32.store (local.get $r) (local.get $t) ) (drop (local.get $m) ) (drop (local.get $t) ) ) (func $switch-def (param $i3 i32) (result i32) (local $i1 i32) (local.set $i1 (i32.const 10) ) (block $switch$def (block $switch-case$1 (br_table $switch-case$1 $switch$def (local.get $i3) ) ) (local.set $i1 (i32.const 1) ) ) (return (local.get $i1) ) ) (func $no-out-of-label (param $x i32) (param $y i32) (nop) (local.set $x (loop $moar (result i32) (nop) (block $block (result i32) (br_if $moar (local.get $x) ) (i32.const 0) ) ) ) (block $moar18 (local.set $y (block $block19 (result i32) (br_if $moar18 (local.get $y) ) (i32.const 0) ) ) ) (drop (local.get $y) ) ) (func $freetype-cd (param $a i32) (result i32) (local $e i32) (nop) (local.tee $a (loop $while-in$1 (result i32) (nop) (block $while-out$0 (result i32) (local.set $e (local.get $a) ) (nop) (drop (br_if $while-out$0 (local.tee $a (i32.const 4) ) (local.get $e) ) ) (nop) (i32.add (local.get $a) (i32.const 0) ) ) ) ) ) (func $drop-if-value (param $x i32) (param $y i32) (param $z i32) (result i32) (local $temp i32) (drop (if (result i32) (local.get $x) (block $block53 (result i32) (nop) (local.set $temp (local.get $y) ) (local.get $z) ) (block $block54 (result i32) (nop) (local.set $temp (local.get $y) ) (local.get $z) ) ) ) (drop (local.get $temp) ) (return (i32.const 0) ) ) (func $drop-br_if (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32) (nop) (local.tee $label (block $label$break$L4 (result i32) (if (i32.eq (local.get $label) (i32.const 15) ) (block $block (nop) (nop) (drop (br_if $label$break$L4 (local.tee $label (i32.const 0) ) (i32.eqz (i32.eq (local.get $$$0151) (i32.const 0) ) ) ) ) ) ) (nop) (i32.const 1) ) ) ) (func $drop-tee-unreachable (local $x i32) (local.tee $x (unreachable) ) (drop (local.get $x) ) ) (func $if-return-but-unreachable (param $var$0 i64) (if (unreachable) (drop (local.get $var$0) ) (local.set $var$0 (i64.const 1) ) ) ) (func $if-one-side (result i32) (local $x i32) (nop) (local.tee $x (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 2) ) (local.get $x) ) ) ) (func $if-one-side-undo (result i32) (local $x i32) (local $y i32) (local.set $y (i32.const 0) ) (local.set $x (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 2) ) (local.get $x) ) ) (local.get $y) ) (func $if-one-side-multi (param $0 i32) (result i32) (nop) (local.tee $0 (if (result i32) (i32.lt_s (local.get $0) (i32.const -1073741824) ) (block (result i32) (nop) (i32.const -1073741824) ) (block (result i32) (nop) (if (result i32) (i32.gt_s (local.get $0) (i32.const 1073741823) ) (block (result i32) (nop) (i32.const 1073741823) ) (local.get $0) ) ) ) ) ) (func $if-one-side-undo-but-its-a-tee (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $x i32) (local $y i32) (local $z i32) (local.set $x (if (result i32) (i32.const -1) (i32.const -2) (local.get $x) ) ) (drop (call $if-one-side-undo-but-its-a-tee (local.tee $x (if (result i32) (i32.const -3) (i32.const -4) (local.get $x) ) ) ) ) (nop) (drop (i32.eqz (local.tee $y (if (result i32) (i32.const -5) (i32.const -6) (local.get $y) ) ) ) ) (nop) (drop (i32.add (local.tee $z (if (result i32) (i32.const -7) (i32.const -8) (local.get $z) ) ) (local.get $z) ) ) (if (block $label$1 (result i32) (nop) (nop) (local.tee $4 (if (result i32) (local.tee $4 (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 2) ) (local.get $4) ) ) (block (result i32) (nop) (i32.const 0) ) (local.get $4) ) ) ) (unreachable) ) (i32.const 0) ) (func $splittable-ifs-multicycle (param $20 i32) (result i32) (nop) (local.tee $20 (if (result i32) (i32.const 1) (if (result i32) (i32.const 2) (if (result i32) (i32.const 3) (i32.const 4) (local.get $20) ) (local.get $20) ) (local.get $20) ) ) ) (func $update-getCounter (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f32) (param $4 i32) (result f64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (loop $label$1 (result f64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (call $fimport$0 (local.tee $3 (if (result f32) (i32.eqz (local.get $0) ) (f32.const 4623408228068004207103214e13) (local.get $3) ) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (if (result f64) (global.get $global$0) (block $block (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (local.set $0 (i32.const -65) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (br $label$1) ) (f64.const -70) ) ) ) ) (module (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $5 (func (param i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func (param i32))) (type $f32_=>_none (func (param f32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_f64 (func (result f64))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "fuzzing-support" "log1" (func $fimport$0 (result i32))) (import "fuzzing-support" "log2" (func $fimport$1 (param i32))) (import "fuzzing-support" "log3" (func $fimport$2 (param f32))) (global $global$0 (mut i32) (i32.const 10)) (memory $0 (shared 256 256)) (func $nonatomics (result i32) (local $x i32) (nop) (drop (i32.load (i32.const 1028) ) ) (i32.load (i32.const 1024) ) ) (func $nonatomic-growmem (result i32) (local $x i32) (local.set $x (i32.load (memory.grow (i32.const 1) ) ) ) (drop (i32.load (i32.const 1028) ) ) (local.get $x) ) (func $atomics (local $x i32) (local.set $x (i32.atomic.load (i32.const 1024) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $one-atomic (local $x i32) (local.set $x (i32.load (i32.const 1024) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $other-atomic (local $x i32) (local.set $x (i32.atomic.load (i32.const 1024) ) ) (drop (i32.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $atomic-growmem (result i32) (local $x i32) (local.set $x (i32.load (memory.grow (i32.const 1) ) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (local.get $x) ) (func $atomicrmw (local $x i32) (local.set $x (i32.atomic.rmw.add (i32.const 1024) (i32.const 1) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $atomic-cmpxchg (local $x i32) (local.set $x (i32.atomic.rmw.cmpxchg (i32.const 1024) (i32.const 1) (i32.const 2) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $br-value-reordering (result i32) (local $temp i32) (block $outside (loop $loop (br_if $outside (block $block (result i32) (br_if $loop (local.get $temp) ) (unreachable) (local.set $temp (i32.const -1) ) (i32.const 0) ) ) ) (local.set $temp (i32.const -1) ) ) (unreachable) ) (func $br-value-reordering-safe (result i32) (local $temp i32) (local.set $temp (block $outside (result i32) (loop $loop (drop (local.get $temp) ) (drop (br_if $outside (local.tee $temp (i32.const -1) ) (block $block (result i32) (nop) (i32.const 0) ) ) ) ) (nop) (i32.const -1) ) ) (unreachable) ) (func $if-one-side-unreachable (local $x i32) (block $out (drop (if (result i32) (i32.const 1) (block (br $out) (nop) ) (block (result i32) (nop) (i32.const 2) ) ) ) (drop (if (result i32) (i32.const 3) (block (result i32) (nop) (i32.const 4) ) (block (br $out) (nop) ) ) ) (if (i32.const 5) (br $out) (br $out) ) ) ) (func $if-one-side-unreachable-blocks (local $x i32) (local $y i32) (block $out (drop (if (result i32) (i32.const 1) (block (block $block (nop) (nop) (br $out) ) (nop) ) (block (result i32) (block $block2 (nop) (nop) ) (i32.const 4) ) ) ) (drop (if (result i32) (i32.const 6) (block (result i32) (block $block4 (nop) (nop) ) (i32.const 7) ) (block (block $block5 (nop) (nop) (br $out) ) (nop) ) ) ) (if (i32.const 11) (block $block7 (nop) (nop) (br $out) ) (block $block8 (nop) (nop) (br $out) ) ) ) ) (func $loop-value (param $x i32) (result i32) (loop $loopy (unreachable) ) (nop) (loop $loopy9 (result i32) (nop) (i32.const 1) ) ) (func $loop-loop-loopy-value (param $x i32) (result i32) (nop) (loop $loopy1 (result i32) (nop) (loop $loopy2 (result i32) (nop) (loop $loopy3 (result i32) (nop) (i32.const 1) ) ) ) ) (func $loop-modified-during-main-pass-be-careful-fuzz (result i32) (local $0 i32) (nop) (if (result i32) (i32.const 0) (block (result i32) (nop) (i32.const 0) ) (block (loop $label$4 (br $label$4) ) (nop) ) ) ) (func $loop-later (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) (nop) (i32.const 0) ) (func $pick (local $x i32) (local $y i32) (local.set $x (local.get $y) ) (drop (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $x) ) ) (drop (local.get $y) ) (local.set $x (local.get $y) ) ) (func $pick-2 (local $x i32) (local $y i32) (local.set $y (local.get $x) ) (drop (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $y) ) ) (drop (local.get $x) ) (local.set $y (local.get $x) ) ) (func $many (local $x i32) (local $y i32) (local $z i32) (local $w i32) (nop) (nop) (local.set $z (local.tee $y (local.get $x) ) ) (drop (local.get $x) ) (local.set $y (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $y) ) ) (local.set $x (local.get $z) ) (drop (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $y) ) ) (nop) (nop) (local.set $y (local.get $x) ) (nop) (local.set $x (local.tee $z (i32.const 2) ) ) (drop (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $y) ) ) (nop) (nop) (local.set $y (local.get $x) ) (local.set $z (i32.const 2) ) (drop (local.get $x) ) ) (func $loop-copies (param $x i32) (param $y i32) (loop $loop (nop) (drop (local.get $y) ) (br_if $loop (local.get $y) ) ) ) (func $proper-type (result f64) (local $var$0 i32) (local $var$2 f64) (local.set $var$0 (select (i32.const 0) (i32.const 1) (local.get $var$0) ) ) (local.get $var$2) ) (func $multi-pass-get-equivs-right (param $var$0 i32) (param $var$1 i32) (result f64) (local $var$2 i32) (nop) (i32.store (local.get $var$0) (i32.const 1) ) (f64.promote_f32 (f32.load (local.get $var$0) ) ) ) (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (nop) (local.tee $x (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 2) ) (block (result i32) (block $block (nop) (nop) ) (local.get $x) ) ) ) ) (func $set-tee-need-one-of-them (param $var$0 i32) (param $var$1 i32) (result i32) (local $var$2 i32) (local $var$3 i32) (local.set $var$2 (local.get $var$0) ) (loop $loop (br_if $loop (local.get $var$1) ) ) (local.get $var$2) ) (func $loop-value-harder (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 f32) (local $4 f32) (local $5 f32) (local $6 f32) (local $7 f32) (local $8 f32) (local $9 f32) (local $10 f32) (block $label$1 (nop) (nop) (call $fimport$2 (loop $label$2 (result f32) (block $label$3 (global.set $global$0 (i32.const -1) ) (block $label$4 (nop) (nop) ) (nop) (nop) ) (nop) (nop) (if (result f32) (call $fimport$0) (block (result f32) (nop) (f32.const -2048) ) (block (block $block (call $fimport$1 (i32.const -25732) ) (br $label$2) ) (nop) ) ) ) ) (nop) ) (nop) (return (i32.const -5417091) ) ) (func $tee-chain (param $x i32) (param $z i32) (param $t1 i32) (param $t2 i32) (param $t3 i32) (result i32) (nop) (drop (i32.const 10) ) (nop) (local.set $t2 (local.tee $t3 (local.tee $t1 (call $tee-chain (local.get $x) (local.tee $z (i32.const 10) ) (local.get $t1) (local.get $t2) (local.get $t3) ) ) ) ) (call $tee-chain (local.get $x) (local.get $z) (local.get $t1) (local.get $t2) (local.get $t3) ) ) ) (module (type $none_=>_none (func)) (memory $0 256 256) (data "hello, there!") (func $memory-init-load (local $x i32) (local.set $x (i32.load (i32.const 0) ) ) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5) ) (drop (local.get $x) ) ) (func $memory-init-store (local $x i32) (local.set $x (block $block (result i32) (i32.store (i32.const 0) (i32.const 42) ) (i32.const 0) ) ) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5) ) (drop (local.get $x) ) ) (func $memory-copy-load (local $x i32) (local.set $x (i32.load (i32.const 0) ) ) (memory.copy (i32.const 0) (i32.const 8) (i32.const 8) ) (drop (local.get $x) ) ) (func $memory-copy-store (local $x i32) (local.set $x (block $block (result i32) (i32.store (i32.const 0) (i32.const 42) ) (i32.const 0) ) ) (memory.copy (i32.const 0) (i32.const 8) (i32.const 8) ) (drop (local.get $x) ) ) (func $memory-fill-load (local $x i32) (local.set $x (i32.load (i32.const 0) ) ) (memory.fill (i32.const 0) (i32.const 42) (i32.const 8) ) (drop (local.get $x) ) ) (func $memory-fill-store (local $x i32) (local.set $x (block $block (result i32) (i32.store (i32.const 0) (i32.const 42) ) (i32.const 0) ) ) (memory.fill (i32.const 0) (i32.const 8) (i32.const 8) ) (drop (local.get $x) ) ) (func $data-drop-load (local $x i32) (local.set $x (i32.load (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) (func $data-drop-store (local $x i32) (local.set $x (block $block (result i32) (i32.store (i32.const 0) (i32.const 42) ) (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) (func $data-drop-memory-init (local $x i32) (local.set $x (block $block (result i32) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5) ) (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) ) (module (type $none_=>_anyref (func (result anyref))) (func $subtype-test (result anyref) (local $0 anyref) (local $1 anyref) (local $2 anyref) (block $block (nop) ) (nop) (local.get $0) ) ) (module (type $none_=>_i32 (func (result i32))) (memory $0 (shared 1 1)) (data "data") (export "foo" (func $0)) (func $0 (result i32) (local $0 i32) (block $block (result i32) (local.set $0 (i32.rem_u (i32.const 0) (i32.const 0) ) ) (data.drop 0) (local.get $0) ) ) ) (module (type $eqref_ref?|i31|_=>_i32 (func (param eqref (ref null i31)) (result i32))) (export "test" (func $0)) (func $0 (param $0 eqref) (param $1 (ref null i31)) (result i32) (local $2 eqref) (local $3 (ref null i31)) (local.set $2 (local.get $0) ) (local.set $0 (local.get $3) ) (ref.eq (local.get $2) (local.get $1) ) ) ) binaryen-version_108/test/passes/simplify-locals_all-features.wast000066400000000000000000001021631423707623100257000ustar00rootroot00000000000000(module (memory 256 256) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func (param i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i32 i32 i32 i32))) (import $waka "env" "waka") (import $waka_int "env" "waka_int" (result i32)) (import $_i64Subtract "env" "i64sub" (param i32 i32 i32 i32) (result i32)) (import $___udivmoddi4 "env" "moddi" (param i32 i32 i32 i32 i32) (result i32)) (import $lp "env" "lp" (param i32 i32) (result i32)) (import "fuzzing-support" "log-f32" (func $fimport$0 (param f32))) (global $global$0 (mut i32) (i32.const 10)) (func $contrast ;; check for tee and structure sinking (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local.set $x (i32.const 1)) (if (local.get $x) (nop)) (if (local.get $x) (nop)) (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) (local.set $a (i32.const 7)) (local.set $a (i32.const 8)) ) (drop (local.get $a)) (block $val (if (i32.const 10) (block (local.set $b (i32.const 11)) (br $val) ) ) (local.set $b (i32.const 12)) ) (drop (local.get $b)) ) (func $b0-yes (type $4) (param $i1 i32) (local $x i32) (local $y i32) (local $a i32) (local $b i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local.set $x (i32.const 5) ) (drop (local.get $x) ) (block $block0 (local.set $x (i32.const 7) ) (drop (local.get $x) ) ) (local.set $x (i32.const 11) ) (drop (local.get $x) ) (local.set $x (i32.const 9) ) (drop (local.get $y) ) (block $block1 (local.set $x (i32.const 8) ) (drop (local.get $y) ) ) (local.set $x (i32.const 11) ) (drop (local.get $y) ) (local.set $x (i32.const 17) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (block $block2 (local.set $a (i32.const 1) ) (local.set $b (i32.const 2) ) (drop (local.get $a) ) (drop (local.get $b) ) (local.set $a (i32.const 3) ) (local.set $b (i32.const 4) ) (local.set $a (i32.const 5) ) (local.set $b (i32.const 6) ) (drop (local.get $b) ) (drop (local.get $a) ) (local.set $a (i32.const 7) ) (local.set $b (i32.const 8) ) (local.set $a (i32.const 9) ) (local.set $b (i32.const 10) ) (call $waka) (drop (local.get $a) ) (drop (local.get $b) ) (local.set $a (i32.const 11) ) (local.set $b (i32.const 12) ) (local.set $a (i32.const 13) ) (local.set $b (i32.const 14) ) (drop (i32.load (i32.const 24) ) ) (drop (local.get $a) ) (drop (local.get $b) ) (local.set $a (i32.const 15) ) (local.set $b (i32.const 16) ) (local.set $a (i32.const 17) ) (local.set $b (i32.const 18) ) (i32.store (i32.const 48) (i32.const 96) ) (drop (local.get $a) ) (drop (local.get $b) ) ) (block $block3 (local.set $a (call $waka_int) ) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 100) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 101) ) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 102) ) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 103) ) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) (local.set $a (block (result i32) (block (local.set $5 (i32.const 105) ) (i32.store (i32.const 104) (local.get $5) ) ) (local.get $5) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (block (result i32) (block (local.set $6 (i32.const 107) ) (i32.store (i32.const 106) (local.get $6) ) ) (local.get $6) ) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (block (result i32) (block (local.set $7 (i32.const 109) ) (i32.store (i32.const 108) (local.get $7) ) ) (local.get $7) ) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (block (result i32) (block (local.set $8 (i32.const 111) ) (i32.store (i32.const 110) (local.get $8) ) ) (local.get $8) ) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) ) (block $out-of-block (local.set $a (i32.const 1337) ) (block $b (block $c (br $b) ) (local.set $a (i32.const 9876) ) ) (drop (local.get $a) ) ) (block $loopey (local.set $a (i32.const 1337) ) (drop (loop $loop-in5 (result i32) (drop (local.get $a) ) (local.tee $a (i32.const 9876) ) ) ) (drop (local.get $a) ) ) ) (func $Ia (type $5) (param $a i32) (result i32) (local $b i32) (block $switch$0 (block $switch-default$6 (local.set $b (i32.const 60) ) ) ) (return (local.get $b) ) ) (func $memories (type $6) (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32) (local $set_with_no_get i32) (local.set $i3 (i32.const 1) ) (i32.store8 (local.get $i2) (local.get $i3) ) (local.set $bi3 (i32.const 1) ) (i32.store8 (local.get $bi3) (local.get $bi3) ) (local.set $ci3 (local.get $bi3) ) (i32.store8 (local.get $bi3) (local.get $ci3) ) (local.set $di3 (local.tee $bi3 (i32.const 123) ) ) (i32.store8 (local.get $bi3) (local.get $di3) ) (local.set $set_with_no_get (i32.const 456) ) ) (func $___remdi3 (type $FUNCSIG$iiiii) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) (local $$1$1 i32) (local $$1$0 i32) (local $$rem i32) (local $__stackBase__ i32) (local $$2$1 i32) (local $$2$0 i32) (local $$4$1 i32) (local $$4$0 i32) (local $$10$1 i32) (local $$10$0 i32) (local $$6$0 i32) (local.set $__stackBase__ (i32.load (i32.const 8) ) ) (i32.store (i32.const 8) (i32.add (i32.load (i32.const 8) ) (i32.const 16) ) ) (local.set $$rem (local.get $__stackBase__) ) (local.set $$1$0 (i32.or (i32.shr_s (local.get $$a$1) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$1$1 (i32.or (i32.shr_s (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$2$0 (i32.or (i32.shr_s (local.get $$b$1) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$2$1 (i32.or (i32.shr_s (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$4$0 (call $_i64Subtract (i32.xor (local.get $$1$0) (local.get $$a$0) ) (i32.xor (local.get $$1$1) (local.get $$a$1) ) (local.get $$1$0) (local.get $$1$1) ) ) (local.set $$4$1 (i32.load (i32.const 168) ) ) (drop (call $___udivmoddi4 (local.get $$4$0) (local.get $$4$1) (call $_i64Subtract (i32.xor (local.get $$2$0) (local.get $$b$0) ) (i32.xor (local.get $$2$1) (local.get $$b$1) ) (local.get $$2$0) (local.get $$2$1) ) (i32.load (i32.const 168) ) (local.get $$rem) ) ) (local.set $$10$0 (call $_i64Subtract (i32.xor (i32.load (local.get $$rem) ) (local.get $$1$0) ) (i32.xor (i32.load offset=4 (local.get $$rem) ) (local.get $$1$1) ) (local.get $$1$0) (local.get $$1$1) ) ) (local.set $$10$1 (i32.load (i32.const 168) ) ) (i32.store (i32.const 8) (local.get $__stackBase__) ) (return (block $block12 (result i32) (i32.store (i32.const 168) (local.get $$10$1) ) (local.get $$10$0) ) ) ) (func $block-returns (type $FUNCSIG$v) (local $x i32) (block $out (block $waka (local.set $x (i32.const 12) ) (br_if $waka (i32.const 1) ) (local.set $x (i32.const 34) ) ) (br_if $out (i32.const 1) ) (drop (local.get $x) ) (block $waka2 (if (i32.const 1) (local.set $x (i32.const 13) ) (local.set $x (i32.const 24) ) ) (if (i32.const 1) (block $block3 (local.set $x (i32.const 14) ) ) (block $block5 (local.set $x (i32.const 25) ) ) ) ) (br_if $out (i32.const 1) ) (block $sink-out-of-me-i-have-but-one-exit (local.set $x (i32.const 99) ) ) (drop (local.get $x) ) ) ) (func $multiple (type $6) (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32) (local.set $s (local.get $m) ) (local.set $r (i32.add (local.get $f) (local.get $p) ) ) (local.set $t (local.get $p) ) (local.set $p (i32.load (i32.const 0) ) ) (i32.store (local.get $r) (local.get $t) ) (drop (local.get $s) ) (drop (local.get $t) ) ) (func $switch-def (type $5) (param $i3 i32) (result i32) (local $i1 i32) (local.set $i1 (i32.const 10) ) (block $switch$def (block $switch-case$1 (br_table $switch-case$1 $switch$def (local.get $i3) ) ) (local.set $i1 (i32.const 1) ) ) (return (local.get $i1) ) ) (func $no-out-of-label (param $x i32) (param $y i32) (loop $moar (local.set $x (block (result i32) (br_if $moar (local.get $x)) (i32.const 0) ) ) ) (drop (local.get $x)) (block $moar (local.set $y (block (result i32) (br_if $moar (local.get $y)) (i32.const 0) ) ) ) (drop (local.get $y)) ) (func $freetype-cd (param $a i32) (result i32) (local $e i32) (loop $while-in$1 (block $while-out$0 (local.set $e (local.get $a) ) (local.set $a ;; this set must happen, so that if the br_if does not break, we have the right $a later down - once we use a block return value, the $a set's outside the block (i32.const 4) ) (br_if $while-out$0 (local.get $e) ) (local.set $a (i32.add (local.get $a) (i32.const 0) ) ) ) ) (local.get $a) ) (func $drop-if-value (param $x i32) (param $y i32) (param $z i32) (result i32) (local $temp i32) (drop (if (result i32) (local.get $x) (block $block53 (result i32) (nop) (local.set $temp (local.get $y) ) (local.get $z) ) (block $block54 (result i32) (nop) (local.set $temp (local.get $y) ) (local.get $z) ) ) ) (drop (local.get $temp)) (return (i32.const 0) ) ) (func $drop-br_if (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32) (block $label$break$L4 (if (i32.eq (local.get $label) (i32.const 15) ) (block $block (local.set $label (i32.const 0) ) (local.set $$cond2 (i32.eq (local.get $$$0151) (i32.const 0) ) ) (br_if $label$break$L4 ;; when we add a value to this, its type changes as it returns the value too, so must be dropped (i32.eqz (local.get $$cond2) ) ) ) ) (local.set $label (i32.const 1) ) ) (local.get $label) ) (func $drop-tee-unreachable (local $x i32) (drop (local.tee $x (unreachable) ) ) (drop (local.get $x) ) ) (func $if-return-but-unreachable (param $var$0 i64) (if (unreachable) (local.set $var$0 (local.get $var$0) ) (local.set $var$0 (i64.const 1) ) ) ) (func $if-one-side (result i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 2) ) ) (local.get $x) ) (func $if-one-side-undo (result i32) (local $x i32) (local $y i32) (local.set $y (i32.const 0) ) (if (i32.const 1) (local.set $x (i32.const 2) ) ) (local.get $y) ) (func $if-one-side-multi (param $0 i32) (result i32) (if (i32.lt_s (local.get $0) (i32.const -1073741824) ) (local.set $0 (i32.const -1073741824) ) (if (i32.gt_s (local.get $0) (i32.const 1073741823) ) (local.set $0 (i32.const 1073741823) ) ) ) (local.get $0) ) (func $if-one-side-undo-but-its-a-tee (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $x i32) (local $y i32) (local $z i32) ;; break these splittable ifs up (local.set $x (if (result i32) (i32.const -1) (i32.const -2) (local.get $x) ) ) ;; oops, this one is a tee (drop (call $if-one-side-undo-but-its-a-tee (local.tee $x (if (result i32) (i32.const -3) (i32.const -4) (local.get $x) ) ) ) ) ;; sinkable (local.set $y (if (result i32) (i32.const -5) (i32.const -6) (local.get $y) ) ) (drop (i32.eqz (local.get $y))) ;; tee-able at best (local.set $z (if (result i32) (i32.const -7) (i32.const -8) (local.get $z) ) ) (drop (i32.add (local.get $z) (local.get $z) ) ) (if (block $label$1 (result i32) (if (i32.const 1) (local.set $4 (i32.const 2) ) ) (if (local.get $4) (local.set $4 (i32.const 0) ) ) (local.get $4) ) (unreachable) ) (i32.const 0) ) (func $splittable-ifs-multicycle (param $20 i32) (result i32) (local.set $20 (if (result i32) (i32.const 1) (if (result i32) (i32.const 2) (if (result i32) (i32.const 3) (i32.const 4) (local.get $20) ) (local.get $20) ) (local.get $20) ) ) (local.get $20) ) (func $update-getCounter (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f32) (param $4 i32) (result f64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (loop $label$1 (result f64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (call $fimport$0 (local.tee $3 (if (result f32) (i32.eqz (local.get $0) ) (f32.const 4623408228068004207103214e13) (local.get $3) ) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (if (result f64) (global.get $global$0) (block (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (local.set $0 (i32.const -65) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (br $label$1) ) (f64.const -70) ) ) ) ) (module (memory (shared 256 256)) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func (param i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i32 i32 i32 i32))) (import "fuzzing-support" "log1" (func $fimport$0 (result i32))) (import "fuzzing-support" "log2" (func $fimport$1 (param i32))) (import "fuzzing-support" "log3" (func $fimport$2 (param f32))) (global $global$0 (mut i32) (i32.const 10)) (func $nonatomics (result i32) ;; loads are reordered (local $x i32) (local.set $x (i32.load (i32.const 1024))) (drop (i32.load (i32.const 1028))) (local.get $x) ) (func $nonatomic-growmem (result i32) ;; memory.grow is modeled as modifying memory (local $x i32) (local.set $x (i32.load (memory.grow (i32.const 1)))) (drop (i32.load (i32.const 1028))) (local.get $x) ) (func $atomics ;; atomic loads don't pass each other (local $x i32) (local.set $x (i32.atomic.load (i32.const 1024))) (drop (i32.atomic.load (i32.const 1028))) (drop (local.get $x)) ) (func $one-atomic ;; atomic loads don't pass other loads (local $x i32) (local.set $x (i32.load (i32.const 1024))) (drop (i32.atomic.load (i32.const 1028))) (drop (local.get $x)) ) (func $other-atomic ;; atomic loads don't pass other loads (local $x i32) (local.set $x (i32.atomic.load (i32.const 1024))) (drop (i32.load (i32.const 1028))) (drop (local.get $x)) ) (func $atomic-growmem (result i32) ;; memory.grow is modeled as modifying memory (local $x i32) (local.set $x (i32.load (memory.grow (i32.const 1)))) (drop (i32.atomic.load (i32.const 1028))) (local.get $x) ) (func $atomicrmw ;; atomic rmw don't pass loads (local $x i32) (local.set $x (i32.atomic.rmw.add (i32.const 1024) (i32.const 1))) (drop (i32.atomic.load (i32.const 1028))) (drop (local.get $x)) ) (func $atomic-cmpxchg ;; cmpxchg don't pass loads (local $x i32) (local.set $x (i32.atomic.rmw.cmpxchg (i32.const 1024) (i32.const 1) (i32.const 2))) (drop (i32.atomic.load (i32.const 1028))) (drop (local.get $x)) ) (func $br-value-reordering (result i32) (local $temp i32) (block $outside (loop $loop ;; we should exit this loop, hit the unreachable outside ;; loop logic (br_if $outside ;; we should not create a block value that adds a value to a br, if the value&condition of the br cannot be reordered, ;; as the value comes first (block (result i32) (br_if $loop (local.get $temp) ;; false, don't loop ) (unreachable) ;; the end (local.set $temp (i32.const -1) ) (i32.const 0) ) ) ) (local.set $temp (i32.const -1) ) ) (unreachable) ) (func $br-value-reordering-safe (result i32) (local $temp i32) (block $outside (loop $loop ;; we should exit this loop, hit the unreachable outside ;; loop logic (drop (local.get $temp)) ;; different from above - add a use here (br_if $outside ;; we should not create a block value that adds a value to a br, if the value&condition of the br cannot be reordered, ;; as the value comes first (block (result i32) (local.set $temp ;; the use *is* in the condition, but it's ok, no conflicts (i32.const -1) ) (i32.const 0) ) ) ) (local.set $temp (i32.const -1) ) ) (unreachable) ) (func $if-one-side-unreachable (local $x i32) (block $out (if (i32.const 1) (br $out) (local.set $x (i32.const 2) ) ) (if (i32.const 3) (local.set $x (i32.const 4) ) (br $out) ) (if (i32.const 5) (br $out) (br $out) ) ) ) (func $if-one-side-unreachable-blocks (local $x i32) (local $y i32) (block $out (if (i32.const 1) (block (local.set $x (i32.const 2) ) (local.set $y (i32.const 3) ) (br $out) ) (block (local.set $x (i32.const 4) ) (local.set $y (i32.const 5) ) ) ) (if (i32.const 6) (block (local.set $x (i32.const 7) ) (local.set $y (i32.const 8) ) ) (block (local.set $x (i32.const 9) ) (local.set $y (i32.const 10) ) (br $out) ) ) (if (i32.const 11) (block (local.set $x (i32.const 12) ) (local.set $y (i32.const 13) ) (br $out) ) (block (local.set $x (i32.const 14) ) (local.set $y (i32.const 15) ) (br $out) ) ) ) ) (func $loop-value (param $x i32) (result i32) (loop $loopy (local.set $x (unreachable)) ) (loop $loopy (local.set $x (i32.const 1)) ) (local.get $x) ) (func $loop-loop-loopy-value (param $x i32) (result i32) (loop $loopy1 (loop $loopy2 (loop $loopy3 (local.set $x (i32.const 1)) ) ) ) (local.get $x) ) (func $loop-modified-during-main-pass-be-careful-fuzz (result i32) (local $0 i32) (if (i32.const 0) (local.set $0 (i32.const 0) ) (loop $label$4 (br $label$4) ) ) (local.get $0) ) (func $loop-later (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) (loop $label$1 (block $label$2 (if (i32.const 0) (block (local.set $var$0 (i32.const -1) ) (br $label$2) ) ) (local.set $var$0 (i32.const -1) ) ) ) (i32.const 0) ) (func $pick (local $x i32) (local $y i32) (local.set $x (local.get $y)) (if (i32.const 1) (local.set $x (i32.const 1)) ) (local.set $x (local.get $y)) (local.set $x (local.get $y)) ) (func $pick-2 (local $x i32) (local $y i32) (local.set $y (local.get $x)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $y (local.get $x)) ) (func $many (local $x i32) (local $y i32) (local $z i32) (local $w i32) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $z (i32.const 2)) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $z (i32.const 2)) (local.set $x (local.get $w)) ) (func $loop-copies (param $x i32) (param $y i32) (loop $loop (local.set $x (local.get $y)) (local.set $y (local.get $x)) (br_if $loop (local.get $x)) ) ) (func $proper-type (result f64) (local $var$0 i32) (local $var$2 f64) (local.set $var$0 (select (i32.const 0) (i32.const 1) (local.get $var$0) ) ) (local.tee $var$2 (local.get $var$2) ) ) (func $multi-pass-get-equivs-right (param $var$0 i32) (param $var$1 i32) (result f64) (local $var$2 i32) (local.set $var$2 (local.get $var$0) ) (i32.store (local.get $var$2) (i32.const 1) ) (f64.promote_f32 (f32.load (local.get $var$2) ) ) ) (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (if (i32.const 1) (local.set $x (i32.const 2)) (block (local.set $y (local.get $x)) (local.set $x (local.get $y)) ) ) (local.get $x) ) (func $set-tee-need-one-of-them (param $var$0 i32) (param $var$1 i32) (result i32) (local $var$2 i32) (local $var$3 i32) (local.set $var$0 ;; this is redundant (local.tee $var$2 ;; but this is not - we need this set, we read it at the end (local.get $var$0) ) ) (loop $loop (br_if $loop (local.get $var$1) ) ) (local.get $var$2) ) (func $loop-value-harder (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 f32) (local $4 f32) (local $5 f32) (local $6 f32) (local $7 f32) (local $8 f32) (local $9 f32) (local $10 f32) (block $label$1 (loop $label$2 (block $label$3 (global.set $global$0 (i32.const -1) ) (block $label$4 (local.set $0 (call $fimport$0) ) (if (local.get $0) (local.set $5 (f32.const -2048) ) (block (call $fimport$1 (i32.const -25732) ) (br $label$2) ) ) ) (local.set $6 (local.get $5) ) (local.set $7 (local.get $6) ) ) (local.set $8 (local.get $7) ) (local.set $9 (local.get $8) ) ) (local.set $10 (local.get $9) ) (call $fimport$2 (local.get $10) ) (local.set $1 (i32.const -5417091) ) ) (local.set $2 (local.get $1) ) (return (local.get $2) ) ) (func $tee-chain (param $x i32) (param $z i32) (param $t1 i32) (param $t2 i32) (param $t3 i32) (result i32) (local.set $x (local.get $x) ) (local.set $z (local.tee $z (i32.const 10) ) ) (local.set $z (local.tee $z (i32.const 10) ) ) (local.set $t1 (local.tee $t2 (local.tee $t3 (local.tee $t1 (call $tee-chain (local.get $x) (local.get $z) (local.get $t1) (local.get $t2) (local.get $t3)) ) ) ) ) (call $tee-chain (local.get $x) (local.get $z) (local.get $t1) (local.get $t2) (local.get $t3)) ) ) (module (memory 256 256) (data "hello, there!") (func $memory-init-load (local $x i32) (local.set $x (i32.load (i32.const 0)) ) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5)) (drop (local.get $x) ) ) (func $memory-init-store (local $x i32) (local.set $x (block i32 (i32.store (i32.const 0) (i32.const 42)) (i32.const 0) ) ) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5)) (drop (local.get $x) ) ) (func $memory-copy-load (local $x i32) (local.set $x (i32.load (i32.const 0)) ) (memory.copy (i32.const 0) (i32.const 8) (i32.const 8)) (drop (local.get $x) ) ) (func $memory-copy-store (local $x i32) (local.set $x (block i32 (i32.store (i32.const 0) (i32.const 42)) (i32.const 0) ) ) (memory.copy (i32.const 0) (i32.const 8) (i32.const 8)) (drop (local.get $x) ) ) (func $memory-fill-load (local $x i32) (local.set $x (i32.load (i32.const 0)) ) (memory.fill (i32.const 0) (i32.const 42) (i32.const 8)) (drop (local.get $x) ) ) (func $memory-fill-store (local $x i32) (local.set $x (block i32 (i32.store (i32.const 0) (i32.const 42)) (i32.const 0) ) ) (memory.fill (i32.const 0) (i32.const 8) (i32.const 8)) (drop (local.get $x) ) ) (func $data-drop-load (local $x i32) (local.set $x (i32.load (i32.const 0)) ) (data.drop 0) (drop (local.get $x) ) ) (func $data-drop-store (local $x i32) (local.set $x (block i32 (i32.store (i32.const 0) (i32.const 42)) (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) (func $data-drop-memory-init (local $x i32) (local.set $x (block i32 (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5)) (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) ) (module (func $subtype-test (result anyref) (local $0 externref) (local $1 anyref) (local $2 anyref) (block (local.set $1 (local.get $0) ) ) (local.set $2 (local.get $1) ) (local.get $1) ) ) ;; data.drop has global side effects (module (memory $0 (shared 1 1)) (data "data") (func "foo" (result i32) (local $0 i32) (block (result i32) (local.set $0 (i32.rem_u ;; will trap, so cannot be reordered to the end (i32.const 0) (i32.const 0) ) ) (data.drop 0) ;; has global side effects that may be noticed later (local.get $0) ) ) ) ;; do not be confused by subtyping: when an index is set, even to another type, ;; it is no longer equivalent ;; (see https://github.com/WebAssembly/binaryen/issues/3266) (module (func "test" (param $0 eqref) (param $1 (ref null i31)) (result i32) (local $2 eqref) (local $3 (ref null i31)) (local.set $2 (local.get $0) ;; $0 and $2 are equivalent ) (local.set $0 ;; set $0 to something with another type (local.get $3) ) ;; compares a null eqref and a zero (ref null i31) - should be false (ref.eq (local.get $2) (local.get $1) ) ) ) binaryen-version_108/test/passes/simplify-locals_all-features_disable-exception-handling.txt000066400000000000000000000707341423707623100330120ustar00rootroot00000000000000(module (type $5 (func (param i32) (result i32))) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) (type $6 (func (param i32 i32 i32 i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $f32_=>_none (func (param f32))) (type $4 (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i64_=>_none (func (param i64))) (type $i32_f64_f64_f32_i32_=>_f64 (func (param i32 f64 f64 f32 i32) (result f64))) (import "env" "waka" (func $waka)) (import "env" "waka_int" (func $waka_int (result i32))) (import "env" "i64sub" (func $_i64Subtract (param i32 i32 i32 i32) (result i32))) (import "env" "moddi" (func $___udivmoddi4 (param i32 i32 i32 i32 i32) (result i32))) (import "env" "lp" (func $lp (param i32 i32) (result i32))) (import "fuzzing-support" "log-f32" (func $fimport$0 (param f32))) (global $global$0 (mut i32) (i32.const 10)) (memory $0 256 256) (func $contrast (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (nop) (if (local.tee $x (i32.const 1) ) (nop) ) (if (local.get $x) (nop) ) (nop) (drop (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4) ) ) (nop) (drop (block $block (result i32) (i32.const 5) ) ) (nop) (drop (if (result i32) (i32.const 6) (block (result i32) (nop) (i32.const 7) ) (block (result i32) (nop) (i32.const 8) ) ) ) (nop) (drop (block $val (result i32) (if (i32.const 10) (block $block4 (nop) (br $val (i32.const 11) ) ) ) (nop) (i32.const 12) ) ) ) (func $b0-yes (param $i1 i32) (local $x i32) (local $y i32) (local $a i32) (local $b i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (nop) (drop (i32.const 5) ) (block $block0 (nop) (drop (i32.const 7) ) ) (nop) (drop (i32.const 11) ) (drop (i32.const 9) ) (drop (local.get $y) ) (block $block1 (drop (i32.const 8) ) (drop (local.get $y) ) ) (drop (i32.const 11) ) (drop (local.get $y) ) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (block $block2 (nop) (nop) (drop (i32.const 1) ) (drop (i32.const 2) ) (drop (i32.const 3) ) (drop (i32.const 4) ) (nop) (nop) (drop (i32.const 6) ) (drop (i32.const 5) ) (drop (i32.const 7) ) (drop (i32.const 8) ) (nop) (nop) (call $waka) (drop (i32.const 9) ) (drop (i32.const 10) ) (drop (i32.const 11) ) (drop (i32.const 12) ) (nop) (nop) (drop (i32.load (i32.const 24) ) ) (drop (i32.const 13) ) (drop (i32.const 14) ) (drop (i32.const 15) ) (drop (i32.const 16) ) (nop) (nop) (i32.store (i32.const 48) (i32.const 96) ) (drop (i32.const 17) ) (nop) ) (block $block3 (nop) (local.set $a (call $waka_int) ) (call $waka) (local.set $a (call $waka_int) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) (nop) (local.set $a (i32.load (i32.const 100) ) ) (call $waka) (nop) (drop (i32.load (i32.const 1) ) ) (local.set $a (i32.load (i32.const 101) ) ) (call $waka) (local.set $a (i32.load (i32.const 102) ) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 103) ) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) (nop) (local.set $a (block $block (result i32) (block $block5 (nop) (i32.store (i32.const 104) (local.tee $5 (i32.const 105) ) ) ) (local.get $5) ) ) (call $waka) (local.set $a (block $block6 (result i32) (block $block7 (nop) (i32.store (i32.const 106) (local.tee $6 (i32.const 107) ) ) ) (local.get $6) ) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (block $block8 (result i32) (block $block9 (nop) (i32.store (i32.const 108) (local.tee $7 (i32.const 109) ) ) ) (local.get $7) ) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (block $block10 (result i32) (block $block11 (nop) (i32.store (i32.const 110) (local.tee $8 (i32.const 111) ) ) ) (local.get $8) ) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) ) (block $out-of-block (nop) (nop) (drop (block $b (result i32) (block $c (br $b (i32.const 1337) ) ) (nop) (i32.const 9876) ) ) ) (block $loopey (local.set $a (i32.const 1337) ) (drop (loop $loop-in5 (result i32) (drop (local.get $a) ) (local.tee $a (i32.const 9876) ) ) ) (drop (local.get $a) ) ) ) (func $Ia (param $a i32) (result i32) (local $b i32) (block $switch$0 (block $switch-default$6 (nop) ) ) (return (i32.const 60) ) ) (func $memories (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32) (local $set_with_no_get i32) (nop) (i32.store8 (local.get $i2) (i32.const 1) ) (nop) (i32.store8 (local.tee $bi3 (i32.const 1) ) (local.get $bi3) ) (nop) (i32.store8 (local.get $bi3) (local.get $bi3) ) (local.set $di3 (local.tee $bi3 (i32.const 123) ) ) (i32.store8 (local.get $bi3) (local.get $di3) ) (nop) ) (func $___remdi3 (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) (local $$1$1 i32) (local $$1$0 i32) (local $$rem i32) (local $__stackBase__ i32) (local $$2$1 i32) (local $$2$0 i32) (local $$4$1 i32) (local $$4$0 i32) (local $$10$1 i32) (local $$10$0 i32) (local $$6$0 i32) (local.set $__stackBase__ (i32.load (i32.const 8) ) ) (i32.store (i32.const 8) (i32.add (i32.load (i32.const 8) ) (i32.const 16) ) ) (local.set $$rem (local.get $__stackBase__) ) (nop) (nop) (nop) (nop) (nop) (nop) (drop (call $___udivmoddi4 (call $_i64Subtract (i32.xor (local.tee $$1$0 (i32.or (i32.shr_s (local.get $$a$1) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.get $$a$0) ) (i32.xor (local.tee $$1$1 (i32.or (i32.shr_s (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.get $$a$1) ) (local.get $$1$0) (local.get $$1$1) ) (i32.load (i32.const 168) ) (call $_i64Subtract (i32.xor (local.tee $$2$0 (i32.or (i32.shr_s (local.get $$b$1) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.get $$b$0) ) (i32.xor (local.tee $$2$1 (i32.or (i32.shr_s (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.get $$b$1) ) (local.get $$2$0) (local.get $$2$1) ) (i32.load (i32.const 168) ) (local.get $$rem) ) ) (local.set $$10$0 (call $_i64Subtract (i32.xor (i32.load (local.get $$rem) ) (local.get $$1$0) ) (i32.xor (i32.load offset=4 (local.get $$rem) ) (local.get $$1$1) ) (local.get $$1$0) (local.get $$1$1) ) ) (local.set $$10$1 (i32.load (i32.const 168) ) ) (i32.store (i32.const 8) (local.get $__stackBase__) ) (return (block $block12 (result i32) (i32.store (i32.const 168) (local.get $$10$1) ) (local.get $$10$0) ) ) ) (func $block-returns (local $x i32) (local.set $x (block $out (result i32) (nop) (drop (br_if $out (local.tee $x (block $waka (result i32) (nop) (drop (br_if $waka (local.tee $x (i32.const 12) ) (i32.const 1) ) ) (nop) (i32.const 34) ) ) (i32.const 1) ) ) (drop (local.get $x) ) (block $waka2 (local.set $x (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 13) ) (block (result i32) (nop) (i32.const 24) ) ) ) (nop) ) (drop (br_if $out (local.tee $x (if (result i32) (i32.const 1) (block (result i32) (block $block3 (nop) ) (i32.const 14) ) (block (result i32) (block $block5 (nop) ) (i32.const 25) ) ) ) (i32.const 1) ) ) (block $sink-out-of-me-i-have-but-one-exit (nop) ) (nop) (i32.const 99) ) ) ) (func $multiple (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32) (nop) (local.set $r (i32.add (local.get $f) (local.get $p) ) ) (local.set $t (local.get $p) ) (local.set $p (i32.load (i32.const 0) ) ) (i32.store (local.get $r) (local.get $t) ) (drop (local.get $m) ) (drop (local.get $t) ) ) (func $switch-def (param $i3 i32) (result i32) (local $i1 i32) (local.set $i1 (i32.const 10) ) (block $switch$def (block $switch-case$1 (br_table $switch-case$1 $switch$def (local.get $i3) ) ) (local.set $i1 (i32.const 1) ) ) (return (local.get $i1) ) ) (func $no-out-of-label (param $x i32) (param $y i32) (nop) (local.set $x (loop $moar (result i32) (nop) (block $block (result i32) (br_if $moar (local.get $x) ) (i32.const 0) ) ) ) (block $moar18 (local.set $y (block $block19 (result i32) (br_if $moar18 (local.get $y) ) (i32.const 0) ) ) ) (drop (local.get $y) ) ) (func $freetype-cd (param $a i32) (result i32) (local $e i32) (nop) (local.tee $a (loop $while-in$1 (result i32) (nop) (block $while-out$0 (result i32) (local.set $e (local.get $a) ) (nop) (drop (br_if $while-out$0 (local.tee $a (i32.const 4) ) (local.get $e) ) ) (nop) (i32.add (local.get $a) (i32.const 0) ) ) ) ) ) (func $drop-if-value (param $x i32) (param $y i32) (param $z i32) (result i32) (local $temp i32) (drop (if (result i32) (local.get $x) (block $block53 (result i32) (nop) (local.set $temp (local.get $y) ) (local.get $z) ) (block $block54 (result i32) (nop) (local.set $temp (local.get $y) ) (local.get $z) ) ) ) (drop (local.get $temp) ) (return (i32.const 0) ) ) (func $drop-br_if (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32) (nop) (local.tee $label (block $label$break$L4 (result i32) (if (i32.eq (local.get $label) (i32.const 15) ) (block $block (nop) (nop) (drop (br_if $label$break$L4 (local.tee $label (i32.const 0) ) (i32.eqz (i32.eq (local.get $$$0151) (i32.const 0) ) ) ) ) ) ) (nop) (i32.const 1) ) ) ) (func $drop-tee-unreachable (local $x i32) (local.tee $x (unreachable) ) (drop (local.get $x) ) ) (func $if-return-but-unreachable (param $var$0 i64) (if (unreachable) (drop (local.get $var$0) ) (local.set $var$0 (i64.const 1) ) ) ) (func $if-one-side (result i32) (local $x i32) (nop) (local.tee $x (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 2) ) (local.get $x) ) ) ) (func $if-one-side-undo (result i32) (local $x i32) (local $y i32) (local.set $y (i32.const 0) ) (local.set $x (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 2) ) (local.get $x) ) ) (local.get $y) ) (func $if-one-side-multi (param $0 i32) (result i32) (nop) (local.tee $0 (if (result i32) (i32.lt_s (local.get $0) (i32.const -1073741824) ) (block (result i32) (nop) (i32.const -1073741824) ) (block (result i32) (nop) (if (result i32) (i32.gt_s (local.get $0) (i32.const 1073741823) ) (block (result i32) (nop) (i32.const 1073741823) ) (local.get $0) ) ) ) ) ) (func $if-one-side-undo-but-its-a-tee (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $x i32) (local $y i32) (local $z i32) (local.set $x (if (result i32) (i32.const -1) (i32.const -2) (local.get $x) ) ) (drop (call $if-one-side-undo-but-its-a-tee (local.tee $x (if (result i32) (i32.const -3) (i32.const -4) (local.get $x) ) ) ) ) (nop) (drop (i32.eqz (local.tee $y (if (result i32) (i32.const -5) (i32.const -6) (local.get $y) ) ) ) ) (nop) (drop (i32.add (local.tee $z (if (result i32) (i32.const -7) (i32.const -8) (local.get $z) ) ) (local.get $z) ) ) (if (block $label$1 (result i32) (nop) (nop) (local.tee $4 (if (result i32) (local.tee $4 (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 2) ) (local.get $4) ) ) (block (result i32) (nop) (i32.const 0) ) (local.get $4) ) ) ) (unreachable) ) (i32.const 0) ) (func $splittable-ifs-multicycle (param $20 i32) (result i32) (nop) (local.tee $20 (if (result i32) (i32.const 1) (if (result i32) (i32.const 2) (if (result i32) (i32.const 3) (i32.const 4) (local.get $20) ) (local.get $20) ) (local.get $20) ) ) ) (func $update-getCounter (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f32) (param $4 i32) (result f64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (loop $label$1 (result f64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (call $fimport$0 (local.tee $3 (if (result f32) (i32.eqz (local.get $0) ) (f32.const 4623408228068004207103214e13) (local.get $3) ) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (if (result f64) (global.get $global$0) (block $block (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (local.set $0 (i32.const -65) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (br $label$1) ) (f64.const -70) ) ) ) ) (module (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $5 (func (param i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func (param i32))) (type $f32_=>_none (func (param f32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_f64 (func (result f64))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "fuzzing-support" "log1" (func $fimport$0 (result i32))) (import "fuzzing-support" "log2" (func $fimport$1 (param i32))) (import "fuzzing-support" "log3" (func $fimport$2 (param f32))) (global $global$0 (mut i32) (i32.const 10)) (memory $0 (shared 256 256)) (func $nonatomics (result i32) (local $x i32) (nop) (drop (i32.load (i32.const 1028) ) ) (i32.load (i32.const 1024) ) ) (func $nonatomic-growmem (result i32) (local $x i32) (local.set $x (i32.load (memory.grow (i32.const 1) ) ) ) (drop (i32.load (i32.const 1028) ) ) (local.get $x) ) (func $atomics (local $x i32) (local.set $x (i32.atomic.load (i32.const 1024) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $one-atomic (local $x i32) (local.set $x (i32.load (i32.const 1024) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $other-atomic (local $x i32) (local.set $x (i32.atomic.load (i32.const 1024) ) ) (drop (i32.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $atomic-growmem (result i32) (local $x i32) (local.set $x (i32.load (memory.grow (i32.const 1) ) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (local.get $x) ) (func $atomicrmw (local $x i32) (local.set $x (i32.atomic.rmw.add (i32.const 1024) (i32.const 1) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $atomic-cmpxchg (local $x i32) (local.set $x (i32.atomic.rmw.cmpxchg (i32.const 1024) (i32.const 1) (i32.const 2) ) ) (drop (i32.atomic.load (i32.const 1028) ) ) (drop (local.get $x) ) ) (func $br-value-reordering (result i32) (local $temp i32) (block $outside (loop $loop (br_if $outside (block $block (result i32) (br_if $loop (local.get $temp) ) (unreachable) (local.set $temp (i32.const -1) ) (i32.const 0) ) ) ) (local.set $temp (i32.const -1) ) ) (unreachable) ) (func $br-value-reordering-safe (result i32) (local $temp i32) (local.set $temp (block $outside (result i32) (loop $loop (drop (local.get $temp) ) (drop (br_if $outside (local.tee $temp (i32.const -1) ) (block $block (result i32) (nop) (i32.const 0) ) ) ) ) (nop) (i32.const -1) ) ) (unreachable) ) (func $if-one-side-unreachable (local $x i32) (block $out (drop (if (result i32) (i32.const 1) (block (br $out) (nop) ) (block (result i32) (nop) (i32.const 2) ) ) ) (drop (if (result i32) (i32.const 3) (block (result i32) (nop) (i32.const 4) ) (block (br $out) (nop) ) ) ) (if (i32.const 5) (br $out) (br $out) ) ) ) (func $if-one-side-unreachable-blocks (local $x i32) (local $y i32) (block $out (drop (if (result i32) (i32.const 1) (block (block $block (nop) (nop) (br $out) ) (nop) ) (block (result i32) (block $block2 (nop) (nop) ) (i32.const 4) ) ) ) (drop (if (result i32) (i32.const 6) (block (result i32) (block $block4 (nop) (nop) ) (i32.const 7) ) (block (block $block5 (nop) (nop) (br $out) ) (nop) ) ) ) (if (i32.const 11) (block $block7 (nop) (nop) (br $out) ) (block $block8 (nop) (nop) (br $out) ) ) ) ) (func $loop-value (param $x i32) (result i32) (loop $loopy (unreachable) ) (nop) (loop $loopy9 (result i32) (nop) (i32.const 1) ) ) (func $loop-loop-loopy-value (param $x i32) (result i32) (nop) (loop $loopy1 (result i32) (nop) (loop $loopy2 (result i32) (nop) (loop $loopy3 (result i32) (nop) (i32.const 1) ) ) ) ) (func $loop-modified-during-main-pass-be-careful-fuzz (result i32) (local $0 i32) (nop) (if (result i32) (i32.const 0) (block (result i32) (nop) (i32.const 0) ) (block (loop $label$4 (br $label$4) ) (nop) ) ) ) (func $loop-later (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) (nop) (i32.const 0) ) (func $pick (local $x i32) (local $y i32) (local.set $x (local.get $y) ) (drop (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $x) ) ) (drop (local.get $y) ) (local.set $x (local.get $y) ) ) (func $pick-2 (local $x i32) (local $y i32) (local.set $y (local.get $x) ) (drop (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $y) ) ) (drop (local.get $x) ) (local.set $y (local.get $x) ) ) (func $many (local $x i32) (local $y i32) (local $z i32) (local $w i32) (nop) (nop) (local.set $z (local.tee $y (local.get $x) ) ) (drop (local.get $x) ) (local.set $y (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $y) ) ) (local.set $x (local.get $z) ) (drop (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $y) ) ) (nop) (nop) (local.set $y (local.get $x) ) (nop) (local.set $x (local.tee $z (i32.const 2) ) ) (drop (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 1) ) (local.get $y) ) ) (nop) (nop) (local.set $y (local.get $x) ) (local.set $z (i32.const 2) ) (drop (local.get $x) ) ) (func $loop-copies (param $x i32) (param $y i32) (loop $loop (nop) (drop (local.get $y) ) (br_if $loop (local.get $y) ) ) ) (func $proper-type (result f64) (local $var$0 i32) (local $var$2 f64) (local.set $var$0 (select (i32.const 0) (i32.const 1) (local.get $var$0) ) ) (local.get $var$2) ) (func $multi-pass-get-equivs-right (param $var$0 i32) (param $var$1 i32) (result f64) (local $var$2 i32) (nop) (i32.store (local.get $var$0) (i32.const 1) ) (f64.promote_f32 (f32.load (local.get $var$0) ) ) ) (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (nop) (local.tee $x (if (result i32) (i32.const 1) (block (result i32) (nop) (i32.const 2) ) (block (result i32) (block $block (nop) (nop) ) (local.get $x) ) ) ) ) (func $set-tee-need-one-of-them (param $var$0 i32) (param $var$1 i32) (result i32) (local $var$2 i32) (local $var$3 i32) (local.set $var$2 (local.get $var$0) ) (loop $loop (br_if $loop (local.get $var$1) ) ) (local.get $var$2) ) (func $loop-value-harder (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 f32) (local $4 f32) (local $5 f32) (local $6 f32) (local $7 f32) (local $8 f32) (local $9 f32) (local $10 f32) (block $label$1 (nop) (nop) (call $fimport$2 (loop $label$2 (result f32) (block $label$3 (global.set $global$0 (i32.const -1) ) (block $label$4 (nop) (nop) ) (nop) (nop) ) (nop) (nop) (if (result f32) (call $fimport$0) (block (result f32) (nop) (f32.const -2048) ) (block (block $block (call $fimport$1 (i32.const -25732) ) (br $label$2) ) (nop) ) ) ) ) (nop) ) (nop) (return (i32.const -5417091) ) ) (func $tee-chain (param $x i32) (param $z i32) (param $t1 i32) (param $t2 i32) (param $t3 i32) (result i32) (nop) (drop (i32.const 10) ) (nop) (local.set $t2 (local.tee $t3 (local.tee $t1 (call $tee-chain (local.get $x) (local.tee $z (i32.const 10) ) (local.get $t1) (local.get $t2) (local.get $t3) ) ) ) ) (call $tee-chain (local.get $x) (local.get $z) (local.get $t1) (local.get $t2) (local.get $t3) ) ) ) (module (type $none_=>_none (func)) (memory $0 256 256) (data "hello, there!") (func $memory-init-load (local $x i32) (local.set $x (i32.load (i32.const 0) ) ) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5) ) (drop (local.get $x) ) ) (func $memory-init-store (local $x i32) (local.set $x (block $block (result i32) (i32.store (i32.const 0) (i32.const 42) ) (i32.const 0) ) ) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5) ) (drop (local.get $x) ) ) (func $memory-copy-load (local $x i32) (local.set $x (i32.load (i32.const 0) ) ) (memory.copy (i32.const 0) (i32.const 8) (i32.const 8) ) (drop (local.get $x) ) ) (func $memory-copy-store (local $x i32) (local.set $x (block $block (result i32) (i32.store (i32.const 0) (i32.const 42) ) (i32.const 0) ) ) (memory.copy (i32.const 0) (i32.const 8) (i32.const 8) ) (drop (local.get $x) ) ) (func $memory-fill-load (local $x i32) (local.set $x (i32.load (i32.const 0) ) ) (memory.fill (i32.const 0) (i32.const 42) (i32.const 8) ) (drop (local.get $x) ) ) (func $memory-fill-store (local $x i32) (local.set $x (block $block (result i32) (i32.store (i32.const 0) (i32.const 42) ) (i32.const 0) ) ) (memory.fill (i32.const 0) (i32.const 8) (i32.const 8) ) (drop (local.get $x) ) ) (func $data-drop-load (local $x i32) (local.set $x (i32.load (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) (func $data-drop-store (local $x i32) (local.set $x (block $block (result i32) (i32.store (i32.const 0) (i32.const 42) ) (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) (func $data-drop-memory-init (local $x i32) (local.set $x (block $block (result i32) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5) ) (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) ) (module (type $none_=>_anyref (func (result anyref))) (func $subtype-test (result anyref) (local $0 funcref) (local $1 anyref) (local $2 anyref) (block $block (nop) ) (nop) (local.get $0) ) ) binaryen-version_108/test/passes/simplify-locals_all-features_disable-exception-handling.wast000066400000000000000000001002711423707623100331370ustar00rootroot00000000000000(module (memory 256 256) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func (param i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i32 i32 i32 i32))) (import $waka "env" "waka") (import $waka_int "env" "waka_int" (result i32)) (import $_i64Subtract "env" "i64sub" (param i32 i32 i32 i32) (result i32)) (import $___udivmoddi4 "env" "moddi" (param i32 i32 i32 i32 i32) (result i32)) (import $lp "env" "lp" (param i32 i32) (result i32)) (import "fuzzing-support" "log-f32" (func $fimport$0 (param f32))) (global $global$0 (mut i32) (i32.const 10)) (func $contrast ;; check for tee and structure sinking (local $x i32) (local $y i32) (local $z i32) (local $a i32) (local $b i32) (local.set $x (i32.const 1)) (if (local.get $x) (nop)) (if (local.get $x) (nop)) (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) (local.set $a (i32.const 7)) (local.set $a (i32.const 8)) ) (drop (local.get $a)) (block $val (if (i32.const 10) (block (local.set $b (i32.const 11)) (br $val) ) ) (local.set $b (i32.const 12)) ) (drop (local.get $b)) ) (func $b0-yes (type $4) (param $i1 i32) (local $x i32) (local $y i32) (local $a i32) (local $b i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local.set $x (i32.const 5) ) (drop (local.get $x) ) (block $block0 (local.set $x (i32.const 7) ) (drop (local.get $x) ) ) (local.set $x (i32.const 11) ) (drop (local.get $x) ) (local.set $x (i32.const 9) ) (drop (local.get $y) ) (block $block1 (local.set $x (i32.const 8) ) (drop (local.get $y) ) ) (local.set $x (i32.const 11) ) (drop (local.get $y) ) (local.set $x (i32.const 17) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (drop (local.get $x) ) (block $block2 (local.set $a (i32.const 1) ) (local.set $b (i32.const 2) ) (drop (local.get $a) ) (drop (local.get $b) ) (local.set $a (i32.const 3) ) (local.set $b (i32.const 4) ) (local.set $a (i32.const 5) ) (local.set $b (i32.const 6) ) (drop (local.get $b) ) (drop (local.get $a) ) (local.set $a (i32.const 7) ) (local.set $b (i32.const 8) ) (local.set $a (i32.const 9) ) (local.set $b (i32.const 10) ) (call $waka) (drop (local.get $a) ) (drop (local.get $b) ) (local.set $a (i32.const 11) ) (local.set $b (i32.const 12) ) (local.set $a (i32.const 13) ) (local.set $b (i32.const 14) ) (drop (i32.load (i32.const 24) ) ) (drop (local.get $a) ) (drop (local.get $b) ) (local.set $a (i32.const 15) ) (local.set $b (i32.const 16) ) (local.set $a (i32.const 17) ) (local.set $b (i32.const 18) ) (i32.store (i32.const 48) (i32.const 96) ) (drop (local.get $a) ) (drop (local.get $b) ) ) (block $block3 (local.set $a (call $waka_int) ) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (call $waka_int) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 100) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 101) ) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 102) ) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (i32.load (i32.const 103) ) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) (local.set $a (block (result i32) (block (local.set $5 (i32.const 105) ) (i32.store (i32.const 104) (local.get $5) ) ) (local.get $5) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (block (result i32) (block (local.set $6 (i32.const 107) ) (i32.store (i32.const 106) (local.get $6) ) ) (local.get $6) ) ) (call $waka) (drop (local.get $a) ) (call $waka) (local.set $a (block (result i32) (block (local.set $7 (i32.const 109) ) (i32.store (i32.const 108) (local.get $7) ) ) (local.get $7) ) ) (drop (i32.load (i32.const 1) ) ) (drop (local.get $a) ) (call $waka) (local.set $a (block (result i32) (block (local.set $8 (i32.const 111) ) (i32.store (i32.const 110) (local.get $8) ) ) (local.get $8) ) ) (i32.store (i32.const 1) (i32.const 2) ) (drop (local.get $a) ) (call $waka) ) (block $out-of-block (local.set $a (i32.const 1337) ) (block $b (block $c (br $b) ) (local.set $a (i32.const 9876) ) ) (drop (local.get $a) ) ) (block $loopey (local.set $a (i32.const 1337) ) (drop (loop $loop-in5 (result i32) (drop (local.get $a) ) (local.tee $a (i32.const 9876) ) ) ) (drop (local.get $a) ) ) ) (func $Ia (type $5) (param $a i32) (result i32) (local $b i32) (block $switch$0 (block $switch-default$6 (local.set $b (i32.const 60) ) ) ) (return (local.get $b) ) ) (func $memories (type $6) (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32) (local $set_with_no_get i32) (local.set $i3 (i32.const 1) ) (i32.store8 (local.get $i2) (local.get $i3) ) (local.set $bi3 (i32.const 1) ) (i32.store8 (local.get $bi3) (local.get $bi3) ) (local.set $ci3 (local.get $bi3) ) (i32.store8 (local.get $bi3) (local.get $ci3) ) (local.set $di3 (local.tee $bi3 (i32.const 123) ) ) (i32.store8 (local.get $bi3) (local.get $di3) ) (local.set $set_with_no_get (i32.const 456) ) ) (func $___remdi3 (type $FUNCSIG$iiiii) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) (local $$1$1 i32) (local $$1$0 i32) (local $$rem i32) (local $__stackBase__ i32) (local $$2$1 i32) (local $$2$0 i32) (local $$4$1 i32) (local $$4$0 i32) (local $$10$1 i32) (local $$10$0 i32) (local $$6$0 i32) (local.set $__stackBase__ (i32.load (i32.const 8) ) ) (i32.store (i32.const 8) (i32.add (i32.load (i32.const 8) ) (i32.const 16) ) ) (local.set $$rem (local.get $__stackBase__) ) (local.set $$1$0 (i32.or (i32.shr_s (local.get $$a$1) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$1$1 (i32.or (i32.shr_s (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$a$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$2$0 (i32.or (i32.shr_s (local.get $$b$1) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$2$1 (i32.or (i32.shr_s (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 31) ) (i32.shl (if (result i32) (i32.lt_s (local.get $$b$1) (i32.const 0) ) (i32.const -1) (i32.const 0) ) (i32.const 1) ) ) ) (local.set $$4$0 (call $_i64Subtract (i32.xor (local.get $$1$0) (local.get $$a$0) ) (i32.xor (local.get $$1$1) (local.get $$a$1) ) (local.get $$1$0) (local.get $$1$1) ) ) (local.set $$4$1 (i32.load (i32.const 168) ) ) (drop (call $___udivmoddi4 (local.get $$4$0) (local.get $$4$1) (call $_i64Subtract (i32.xor (local.get $$2$0) (local.get $$b$0) ) (i32.xor (local.get $$2$1) (local.get $$b$1) ) (local.get $$2$0) (local.get $$2$1) ) (i32.load (i32.const 168) ) (local.get $$rem) ) ) (local.set $$10$0 (call $_i64Subtract (i32.xor (i32.load (local.get $$rem) ) (local.get $$1$0) ) (i32.xor (i32.load offset=4 (local.get $$rem) ) (local.get $$1$1) ) (local.get $$1$0) (local.get $$1$1) ) ) (local.set $$10$1 (i32.load (i32.const 168) ) ) (i32.store (i32.const 8) (local.get $__stackBase__) ) (return (block $block12 (result i32) (i32.store (i32.const 168) (local.get $$10$1) ) (local.get $$10$0) ) ) ) (func $block-returns (type $FUNCSIG$v) (local $x i32) (block $out (block $waka (local.set $x (i32.const 12) ) (br_if $waka (i32.const 1) ) (local.set $x (i32.const 34) ) ) (br_if $out (i32.const 1) ) (drop (local.get $x) ) (block $waka2 (if (i32.const 1) (local.set $x (i32.const 13) ) (local.set $x (i32.const 24) ) ) (if (i32.const 1) (block $block3 (local.set $x (i32.const 14) ) ) (block $block5 (local.set $x (i32.const 25) ) ) ) ) (br_if $out (i32.const 1) ) (block $sink-out-of-me-i-have-but-one-exit (local.set $x (i32.const 99) ) ) (drop (local.get $x) ) ) ) (func $multiple (type $6) (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32) (local.set $s (local.get $m) ) (local.set $r (i32.add (local.get $f) (local.get $p) ) ) (local.set $t (local.get $p) ) (local.set $p (i32.load (i32.const 0) ) ) (i32.store (local.get $r) (local.get $t) ) (drop (local.get $s) ) (drop (local.get $t) ) ) (func $switch-def (type $5) (param $i3 i32) (result i32) (local $i1 i32) (local.set $i1 (i32.const 10) ) (block $switch$def (block $switch-case$1 (br_table $switch-case$1 $switch$def (local.get $i3) ) ) (local.set $i1 (i32.const 1) ) ) (return (local.get $i1) ) ) (func $no-out-of-label (param $x i32) (param $y i32) (loop $moar (local.set $x (block (result i32) (br_if $moar (local.get $x)) (i32.const 0) ) ) ) (drop (local.get $x)) (block $moar (local.set $y (block (result i32) (br_if $moar (local.get $y)) (i32.const 0) ) ) ) (drop (local.get $y)) ) (func $freetype-cd (param $a i32) (result i32) (local $e i32) (loop $while-in$1 (block $while-out$0 (local.set $e (local.get $a) ) (local.set $a ;; this set must happen, so that if the br_if does not break, we have the right $a later down - once we use a block return value, the $a set's outside the block (i32.const 4) ) (br_if $while-out$0 (local.get $e) ) (local.set $a (i32.add (local.get $a) (i32.const 0) ) ) ) ) (local.get $a) ) (func $drop-if-value (param $x i32) (param $y i32) (param $z i32) (result i32) (local $temp i32) (drop (if (result i32) (local.get $x) (block $block53 (result i32) (nop) (local.set $temp (local.get $y) ) (local.get $z) ) (block $block54 (result i32) (nop) (local.set $temp (local.get $y) ) (local.get $z) ) ) ) (drop (local.get $temp)) (return (i32.const 0) ) ) (func $drop-br_if (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32) (block $label$break$L4 (if (i32.eq (local.get $label) (i32.const 15) ) (block $block (local.set $label (i32.const 0) ) (local.set $$cond2 (i32.eq (local.get $$$0151) (i32.const 0) ) ) (br_if $label$break$L4 ;; when we add a value to this, its type changes as it returns the value too, so must be dropped (i32.eqz (local.get $$cond2) ) ) ) ) (local.set $label (i32.const 1) ) ) (local.get $label) ) (func $drop-tee-unreachable (local $x i32) (drop (local.tee $x (unreachable) ) ) (drop (local.get $x) ) ) (func $if-return-but-unreachable (param $var$0 i64) (if (unreachable) (local.set $var$0 (local.get $var$0) ) (local.set $var$0 (i64.const 1) ) ) ) (func $if-one-side (result i32) (local $x i32) (if (i32.const 1) (local.set $x (i32.const 2) ) ) (local.get $x) ) (func $if-one-side-undo (result i32) (local $x i32) (local $y i32) (local.set $y (i32.const 0) ) (if (i32.const 1) (local.set $x (i32.const 2) ) ) (local.get $y) ) (func $if-one-side-multi (param $0 i32) (result i32) (if (i32.lt_s (local.get $0) (i32.const -1073741824) ) (local.set $0 (i32.const -1073741824) ) (if (i32.gt_s (local.get $0) (i32.const 1073741823) ) (local.set $0 (i32.const 1073741823) ) ) ) (local.get $0) ) (func $if-one-side-undo-but-its-a-tee (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $x i32) (local $y i32) (local $z i32) ;; break these splittable ifs up (local.set $x (if (result i32) (i32.const -1) (i32.const -2) (local.get $x) ) ) ;; oops, this one is a tee (drop (call $if-one-side-undo-but-its-a-tee (local.tee $x (if (result i32) (i32.const -3) (i32.const -4) (local.get $x) ) ) ) ) ;; sinkable (local.set $y (if (result i32) (i32.const -5) (i32.const -6) (local.get $y) ) ) (drop (i32.eqz (local.get $y))) ;; tee-able at best (local.set $z (if (result i32) (i32.const -7) (i32.const -8) (local.get $z) ) ) (drop (i32.add (local.get $z) (local.get $z) ) ) (if (block $label$1 (result i32) (if (i32.const 1) (local.set $4 (i32.const 2) ) ) (if (local.get $4) (local.set $4 (i32.const 0) ) ) (local.get $4) ) (unreachable) ) (i32.const 0) ) (func $splittable-ifs-multicycle (param $20 i32) (result i32) (local.set $20 (if (result i32) (i32.const 1) (if (result i32) (i32.const 2) (if (result i32) (i32.const 3) (i32.const 4) (local.get $20) ) (local.get $20) ) (local.get $20) ) ) (local.get $20) ) (func $update-getCounter (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f32) (param $4 i32) (result f64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (loop $label$1 (result f64) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (call $fimport$0 (local.tee $3 (if (result f32) (i32.eqz (local.get $0) ) (f32.const 4623408228068004207103214e13) (local.get $3) ) ) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (if (result f64) (global.get $global$0) (block (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (local.set $0 (i32.const -65) ) (global.set $global$0 (i32.sub (global.get $global$0) (i32.const 1) ) ) (br $label$1) ) (f64.const -70) ) ) ) ) (module (memory (shared 256 256)) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func (param i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i32 i32 i32 i32))) (import "fuzzing-support" "log1" (func $fimport$0 (result i32))) (import "fuzzing-support" "log2" (func $fimport$1 (param i32))) (import "fuzzing-support" "log3" (func $fimport$2 (param f32))) (global $global$0 (mut i32) (i32.const 10)) (func $nonatomics (result i32) ;; loads are reordered (local $x i32) (local.set $x (i32.load (i32.const 1024))) (drop (i32.load (i32.const 1028))) (local.get $x) ) (func $nonatomic-growmem (result i32) ;; memory.grow is modeled as modifying memory (local $x i32) (local.set $x (i32.load (memory.grow (i32.const 1)))) (drop (i32.load (i32.const 1028))) (local.get $x) ) (func $atomics ;; atomic loads don't pass each other (local $x i32) (local.set $x (i32.atomic.load (i32.const 1024))) (drop (i32.atomic.load (i32.const 1028))) (drop (local.get $x)) ) (func $one-atomic ;; atomic loads don't pass other loads (local $x i32) (local.set $x (i32.load (i32.const 1024))) (drop (i32.atomic.load (i32.const 1028))) (drop (local.get $x)) ) (func $other-atomic ;; atomic loads don't pass other loads (local $x i32) (local.set $x (i32.atomic.load (i32.const 1024))) (drop (i32.load (i32.const 1028))) (drop (local.get $x)) ) (func $atomic-growmem (result i32) ;; memory.grow is modeled as modifying memory (local $x i32) (local.set $x (i32.load (memory.grow (i32.const 1)))) (drop (i32.atomic.load (i32.const 1028))) (local.get $x) ) (func $atomicrmw ;; atomic rmw don't pass loads (local $x i32) (local.set $x (i32.atomic.rmw.add (i32.const 1024) (i32.const 1))) (drop (i32.atomic.load (i32.const 1028))) (drop (local.get $x)) ) (func $atomic-cmpxchg ;; cmpxchg don't pass loads (local $x i32) (local.set $x (i32.atomic.rmw.cmpxchg (i32.const 1024) (i32.const 1) (i32.const 2))) (drop (i32.atomic.load (i32.const 1028))) (drop (local.get $x)) ) (func $br-value-reordering (result i32) (local $temp i32) (block $outside (loop $loop ;; we should exit this loop, hit the unreachable outside ;; loop logic (br_if $outside ;; we should not create a block value that adds a value to a br, if the value&condition of the br cannot be reordered, ;; as the value comes first (block (result i32) (br_if $loop (local.get $temp) ;; false, don't loop ) (unreachable) ;; the end (local.set $temp (i32.const -1) ) (i32.const 0) ) ) ) (local.set $temp (i32.const -1) ) ) (unreachable) ) (func $br-value-reordering-safe (result i32) (local $temp i32) (block $outside (loop $loop ;; we should exit this loop, hit the unreachable outside ;; loop logic (drop (local.get $temp)) ;; different from above - add a use here (br_if $outside ;; we should not create a block value that adds a value to a br, if the value&condition of the br cannot be reordered, ;; as the value comes first (block (result i32) (local.set $temp ;; the use *is* in the condition, but it's ok, no conflicts (i32.const -1) ) (i32.const 0) ) ) ) (local.set $temp (i32.const -1) ) ) (unreachable) ) (func $if-one-side-unreachable (local $x i32) (block $out (if (i32.const 1) (br $out) (local.set $x (i32.const 2) ) ) (if (i32.const 3) (local.set $x (i32.const 4) ) (br $out) ) (if (i32.const 5) (br $out) (br $out) ) ) ) (func $if-one-side-unreachable-blocks (local $x i32) (local $y i32) (block $out (if (i32.const 1) (block (local.set $x (i32.const 2) ) (local.set $y (i32.const 3) ) (br $out) ) (block (local.set $x (i32.const 4) ) (local.set $y (i32.const 5) ) ) ) (if (i32.const 6) (block (local.set $x (i32.const 7) ) (local.set $y (i32.const 8) ) ) (block (local.set $x (i32.const 9) ) (local.set $y (i32.const 10) ) (br $out) ) ) (if (i32.const 11) (block (local.set $x (i32.const 12) ) (local.set $y (i32.const 13) ) (br $out) ) (block (local.set $x (i32.const 14) ) (local.set $y (i32.const 15) ) (br $out) ) ) ) ) (func $loop-value (param $x i32) (result i32) (loop $loopy (local.set $x (unreachable)) ) (loop $loopy (local.set $x (i32.const 1)) ) (local.get $x) ) (func $loop-loop-loopy-value (param $x i32) (result i32) (loop $loopy1 (loop $loopy2 (loop $loopy3 (local.set $x (i32.const 1)) ) ) ) (local.get $x) ) (func $loop-modified-during-main-pass-be-careful-fuzz (result i32) (local $0 i32) (if (i32.const 0) (local.set $0 (i32.const 0) ) (loop $label$4 (br $label$4) ) ) (local.get $0) ) (func $loop-later (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32) (loop $label$1 (block $label$2 (if (i32.const 0) (block (local.set $var$0 (i32.const -1) ) (br $label$2) ) ) (local.set $var$0 (i32.const -1) ) ) ) (i32.const 0) ) (func $pick (local $x i32) (local $y i32) (local.set $x (local.get $y)) (if (i32.const 1) (local.set $x (i32.const 1)) ) (local.set $x (local.get $y)) (local.set $x (local.get $y)) ) (func $pick-2 (local $x i32) (local $y i32) (local.set $y (local.get $x)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $y (local.get $x)) ) (func $many (local $x i32) (local $y i32) (local $z i32) (local $w i32) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $z (i32.const 2)) (local.set $x (local.get $z)) (if (i32.const 1) (local.set $y (i32.const 1)) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) (local.set $w (local.get $z)) (local.set $z (i32.const 2)) (local.set $x (local.get $w)) ) (func $loop-copies (param $x i32) (param $y i32) (loop $loop (local.set $x (local.get $y)) (local.set $y (local.get $x)) (br_if $loop (local.get $x)) ) ) (func $proper-type (result f64) (local $var$0 i32) (local $var$2 f64) (local.set $var$0 (select (i32.const 0) (i32.const 1) (local.get $var$0) ) ) (local.tee $var$2 (local.get $var$2) ) ) (func $multi-pass-get-equivs-right (param $var$0 i32) (param $var$1 i32) (result f64) (local $var$2 i32) (local.set $var$2 (local.get $var$0) ) (i32.store (local.get $var$2) (i32.const 1) ) (f64.promote_f32 (f32.load (local.get $var$2) ) ) ) (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (if (i32.const 1) (local.set $x (i32.const 2)) (block (local.set $y (local.get $x)) (local.set $x (local.get $y)) ) ) (local.get $x) ) (func $set-tee-need-one-of-them (param $var$0 i32) (param $var$1 i32) (result i32) (local $var$2 i32) (local $var$3 i32) (local.set $var$0 ;; this is redundant (local.tee $var$2 ;; but this is not - we need this set, we read it at the end (local.get $var$0) ) ) (loop $loop (br_if $loop (local.get $var$1) ) ) (local.get $var$2) ) (func $loop-value-harder (result i32) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 f32) (local $4 f32) (local $5 f32) (local $6 f32) (local $7 f32) (local $8 f32) (local $9 f32) (local $10 f32) (block $label$1 (loop $label$2 (block $label$3 (global.set $global$0 (i32.const -1) ) (block $label$4 (local.set $0 (call $fimport$0) ) (if (local.get $0) (local.set $5 (f32.const -2048) ) (block (call $fimport$1 (i32.const -25732) ) (br $label$2) ) ) ) (local.set $6 (local.get $5) ) (local.set $7 (local.get $6) ) ) (local.set $8 (local.get $7) ) (local.set $9 (local.get $8) ) ) (local.set $10 (local.get $9) ) (call $fimport$2 (local.get $10) ) (local.set $1 (i32.const -5417091) ) ) (local.set $2 (local.get $1) ) (return (local.get $2) ) ) (func $tee-chain (param $x i32) (param $z i32) (param $t1 i32) (param $t2 i32) (param $t3 i32) (result i32) (local.set $x (local.get $x) ) (local.set $z (local.tee $z (i32.const 10) ) ) (local.set $z (local.tee $z (i32.const 10) ) ) (local.set $t1 (local.tee $t2 (local.tee $t3 (local.tee $t1 (call $tee-chain (local.get $x) (local.get $z) (local.get $t1) (local.get $t2) (local.get $t3)) ) ) ) ) (call $tee-chain (local.get $x) (local.get $z) (local.get $t1) (local.get $t2) (local.get $t3)) ) ) (module (memory 256 256) (data "hello, there!") (func $memory-init-load (local $x i32) (local.set $x (i32.load (i32.const 0)) ) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5)) (drop (local.get $x) ) ) (func $memory-init-store (local $x i32) (local.set $x (block i32 (i32.store (i32.const 0) (i32.const 42)) (i32.const 0) ) ) (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5)) (drop (local.get $x) ) ) (func $memory-copy-load (local $x i32) (local.set $x (i32.load (i32.const 0)) ) (memory.copy (i32.const 0) (i32.const 8) (i32.const 8)) (drop (local.get $x) ) ) (func $memory-copy-store (local $x i32) (local.set $x (block i32 (i32.store (i32.const 0) (i32.const 42)) (i32.const 0) ) ) (memory.copy (i32.const 0) (i32.const 8) (i32.const 8)) (drop (local.get $x) ) ) (func $memory-fill-load (local $x i32) (local.set $x (i32.load (i32.const 0)) ) (memory.fill (i32.const 0) (i32.const 42) (i32.const 8)) (drop (local.get $x) ) ) (func $memory-fill-store (local $x i32) (local.set $x (block i32 (i32.store (i32.const 0) (i32.const 42)) (i32.const 0) ) ) (memory.fill (i32.const 0) (i32.const 8) (i32.const 8)) (drop (local.get $x) ) ) (func $data-drop-load (local $x i32) (local.set $x (i32.load (i32.const 0)) ) (data.drop 0) (drop (local.get $x) ) ) (func $data-drop-store (local $x i32) (local.set $x (block i32 (i32.store (i32.const 0) (i32.const 42)) (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) (func $data-drop-memory-init (local $x i32) (local.set $x (block i32 (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 5)) (i32.const 0) ) ) (data.drop 0) (drop (local.get $x) ) ) ) (module (func $subtype-test (result anyref) (local $0 funcref) (local $1 anyref) (local $2 anyref) (block (local.set $1 (local.get $0) ) ) (local.set $2 (local.get $1) ) (local.get $1) ) ) binaryen-version_108/test/passes/souperify.txt000066400000000000000000000005201423707623100220050ustar00rootroot00000000000000 ; function: if-loop-test ; start LHS (in if-loop-test) %0 = sub 0:i32, 0:i32 %1 = ne 0:i32, 0:i32 pc %1 1:i1 infer %0 (module (type $none_=>_none (func)) (func $if-loop-test (local $0 i32) (if (i32.const 0) (loop $label$0 (local.set $0 (i32.sub (i32.const 0) (i32.const 0) ) ) ) ) ) ) binaryen-version_108/test/passes/souperify.wast000066400000000000000000000004761423707623100221560ustar00rootroot00000000000000(module ;; This tests if we can create dataflow graph correctly in the presence of ;; loops. (func $if-loop-test (local $0 i32) (if (i32.const 0) (loop $label$0 (local.set $0 (i32.sub (i32.const 0) (i32.const 0) ) ) ) ) ) ) binaryen-version_108/test/passes/sparse_matrix_liveness.bin.txt000066400000000000000000000015121423707623100253220ustar00rootroot00000000000000total [exports] : 1 [funcs] : 1 [globals] : 0 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 4 [vars] : 8194 Block : 1 Const : 1 LocalGet : 1 LocalSet : 1 total [exports] : 1 [funcs] : 1 [globals] : 0 [imports] : 0 [tables] : 0 [tags] : 0 [total] : 4 [vars] : 1 -8193 Block : 1 Const : 1 LocalGet : 1 LocalSet : 1 (module (type $none_=>_i32 (func (result i32))) (export "foo" (func $0)) (func $0 (result i32) (local $0 i32) (local.set $0 (i32.const 0) ) (local.get $0) ) ) binaryen-version_108/test/passes/sparse_matrix_liveness.passes000066400000000000000000000000571423707623100252350ustar00rootroot00000000000000metrics_coalesce-locals_metrics_reorder-locals binaryen-version_108/test/passes/sparse_matrix_liveness.wasm000066400000000000000000000000531423707623100247020ustar00rootroot00000000000000asm`foo  ‚@A! binaryen-version_108/test/passes/ssa-nomerge_enable-simd.txt000066400000000000000000000052711423707623100244500ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (global $global$0 (mut i32) (i32.const 1)) (memory $0 1 1) (func $basics (param $x i32) (local $y i32) (local $z f32) (local $w i64) (local $t f64) (local $5 i32) (local $6 f64) (local $7 f64) (drop (local.get $x) ) (drop (i32.const 0) ) (drop (f32.const 0) ) (drop (i64.const 0) ) (drop (f64.const 0) ) (local.set $5 (i32.const 100) ) (drop (local.get $5) ) (local.set $6 (f64.const 2) ) (drop (local.get $6) ) (local.set $7 (f64.const 33) ) (drop (local.get $7) ) (drop (local.get $7) ) ) (func $if (param $p i32) (local $x i32) (local $y i32) (local $3 i32) (drop (if (result i32) (i32.const 1) (i32.const 0) (i32.const 0) ) ) (if (i32.const 1) (local.set $x (i32.const 1) ) ) (drop (local.get $x) ) (if (i32.const 1) (local.set $p (i32.const 1) ) ) (drop (local.get $p) ) (if (i32.const 1) (local.set $x (i32.const 2) ) (nop) ) (drop (local.get $x) ) (if (i32.const 1) (nop) (local.set $x (i32.const 3) ) ) (drop (local.get $x) ) (if (i32.const 1) (local.set $x (i32.const 4) ) (local.set $x (i32.const 5) ) ) (drop (local.get $x) ) (if (i32.const 1) (local.set $x (i32.const 6) ) (block $block (local.set $3 (i32.const 7) ) (local.set $x (i32.const 8) ) ) ) (drop (local.get $x) ) ) (func $if2 (param $x i32) (if (i32.const 1) (block $block (local.set $x (i32.const 1) ) (drop (local.get $x) ) ) ) (drop (local.get $x) ) ) (func $nomerge (param $p i32) (param $q i32) (local $x i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $3 (i32.const 1) ) (call $nomerge (local.get $3) (local.get $3) ) (local.set $4 (i32.const 2) ) (call $nomerge (local.get $4) (local.get $4) ) (local.set $x (i32.const 3) ) (call $nomerge (local.get $x) (local.get $x) ) (if (i32.const 1) (local.set $x (i32.const 4) ) ) (call $nomerge (local.get $x) (local.get $x) ) (local.set $5 (i32.const 5) ) (call $nomerge (local.get $5) (local.get $5) ) (if (i32.const 1) (local.set $x (i32.const 6) ) (local.set $x (i32.const 7) ) ) (call $nomerge (local.get $x) (local.get $x) ) ) (func $simd-zero (local $0 v128) (v128.store align=4 (i32.const 0) (i32x4.splat (i32.const 0) ) ) (unreachable) ) ) binaryen-version_108/test/passes/ssa-nomerge_enable-simd.wast000066400000000000000000000052301423707623100246020ustar00rootroot00000000000000(module (memory 1 1) (global $global$0 (mut i32) (i32.const 1)) (func $basics (param $x i32) (local $y i32) (local $z f32) (local $w i64) (local $t f64) (drop (local.get $x)) ;; keep as param get (drop (local.get $y)) ;; turn into get of 0-init (drop (local.get $z)) (drop (local.get $w)) (drop (local.get $t)) (local.set $x (i32.const 100)) ;; overwrite param (drop (local.get $x)) ;; no longer a param! (local.set $t (f64.const 2)) ;; overwrite local (drop (local.get $t)) (local.set $t (f64.const 33)) ;; overwrite local AGAIN (drop (local.get $t)) (drop (local.get $t)) ;; use twice ) (func $if (param $p i32) (local $x i32) (local $y i32) (drop (if i32 (i32.const 1) (local.get $x) (local.get $y) ) ) (if (i32.const 1) (local.set $x (i32.const 1)) ) (drop (local.get $x)) ;; same but with param (if (i32.const 1) (local.set $p (i32.const 1)) ) (drop (local.get $p)) ;; if-else (if (i32.const 1) (local.set $x (i32.const 2)) (nop) ) (drop (local.get $x)) (if (i32.const 1) (nop) (local.set $x (i32.const 3)) ) (drop (local.get $x)) (if (i32.const 1) (local.set $x (i32.const 4)) (local.set $x (i32.const 5)) ) (drop (local.get $x)) (if (i32.const 1) (local.set $x (i32.const 6)) (block (local.set $x (i32.const 7)) (local.set $x (i32.const 8)) ) ) (drop (local.get $x)) ) (func $if2 (param $x i32) (if (i32.const 1) (block (local.set $x (i32.const 1)) (drop (local.get $x)) ;; use between phi set and use ) ) (drop (local.get $x)) ) (func $nomerge (param $p i32) (param $q i32) (local $x i32) (local.set $x (i32.const 1)) ;; untangle this (call $nomerge (local.get $x) (local.get $x)) (local.set $x (i32.const 2)) ;; and this (call $nomerge (local.get $x) (local.get $x)) (local.set $x (i32.const 3)) ;; but this reaches a merge later (call $nomerge (local.get $x) (local.get $x)) (if (i32.const 1) (local.set $x (i32.const 4)) ) (call $nomerge (local.get $x) (local.get $x)) (local.set $x (i32.const 5)) ;; this is good again (call $nomerge (local.get $x) (local.get $x)) (if (i32.const 1) (local.set $x (i32.const 6)) ;; these merge, (local.set $x (i32.const 7)) ;; so no ) (call $nomerge (local.get $x) (local.get $x)) ) (func $simd-zero (local $0 v128) (v128.store align=4 (i32.const 0) (local.get $0) ) (unreachable) ) ) binaryen-version_108/test/passes/ssa_enable-threads.txt000066400000000000000000000247771423707623100235300ustar00rootroot00000000000000(module (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (global $global$0 (mut i32) (i32.const 1)) (func $basics (param $x i32) (local $y i32) (local $z f32) (local $w i64) (local $t f64) (local $5 i32) (local $6 f64) (local $7 f64) (drop (local.get $x) ) (drop (i32.const 0) ) (drop (f32.const 0) ) (drop (i64.const 0) ) (drop (f64.const 0) ) (local.set $5 (i32.const 100) ) (drop (local.get $5) ) (local.set $6 (f64.const 2) ) (drop (local.get $6) ) (local.set $7 (f64.const 33) ) (drop (local.get $7) ) (drop (local.get $7) ) ) (func $if (param $p i32) (local $x i32) (local $y i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) (local $17 i32) (local.set $13 (local.get $p) ) (block (drop (if (result i32) (i32.const 1) (i32.const 0) (i32.const 0) ) ) (if (i32.const 1) (local.set $3 (local.tee $15 (local.tee $14 (local.tee $12 (i32.const 1) ) ) ) ) ) (drop (local.get $12) ) (if (i32.const 1) (local.set $4 (local.tee $13 (i32.const 1) ) ) ) (drop (local.get $13) ) (if (i32.const 1) (local.set $5 (local.tee $15 (local.tee $14 (i32.const 2) ) ) ) (nop) ) (drop (local.get $14) ) (if (i32.const 1) (nop) (local.set $6 (local.tee $15 (i32.const 3) ) ) ) (drop (local.get $15) ) (if (i32.const 1) (local.set $7 (local.tee $16 (i32.const 4) ) ) (local.set $8 (local.tee $16 (i32.const 5) ) ) ) (drop (local.get $16) ) (if (i32.const 1) (local.set $9 (local.tee $17 (i32.const 6) ) ) (block $block (local.set $10 (i32.const 7) ) (local.set $11 (local.tee $17 (i32.const 8) ) ) ) ) (drop (local.get $17) ) ) ) (func $if2 (param $x i32) (local $1 i32) (local $2 i32) (local.set $2 (local.get $x) ) (block (if (i32.const 1) (block $block (local.set $1 (local.tee $2 (i32.const 1) ) ) (drop (local.get $1) ) ) ) (drop (local.get $2) ) ) ) (func $block (param $x i32) (local $1 i32) (local $2 i32) (local.set $2 (local.get $x) ) (block (block $out (br_if $out (i32.const 2) ) (local.set $1 (local.tee $2 (i32.const 1) ) ) ) (drop (local.get $2) ) ) ) (func $block2 (param $x i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (block $out (local.set $1 (local.tee $6 (i32.const 1) ) ) (drop (local.get $1) ) (br_if $out (i32.const 2) ) (drop (local.get $1) ) (if (i32.const 3) (block $block (local.set $2 (local.tee $6 (i32.const 1) ) ) (drop (local.get $2) ) (br $out) ) ) (drop (local.get $1) ) (local.set $3 (local.tee $6 (i32.const 4) ) ) (drop (local.get $3) ) (if (i32.const 5) (br $out) ) (drop (local.get $3) ) (if (i32.const 6) (nop) ) (if (i32.const 7) (nop) (nop) ) (block $in (local.set $4 (local.tee $6 (i32.const 8) ) ) (drop (local.get $4) ) (br_table $in $out (i32.const 9) ) ) (drop (local.get $4) ) (block $in2 (local.set $5 (local.tee $6 (i32.const 10) ) ) (drop (local.get $5) ) (br_table $out $in2 (i32.const 11) ) ) (drop (local.get $5) ) ) (drop (local.get $6) ) ) (func $loop (param $x i32) (local $1 i32) (local $2 i32) (local.set $2 (local.get $x) ) (block (drop (local.get $x) ) (loop $moar (drop (local.get $2) ) (local.set $1 (local.tee $2 (i32.const 1) ) ) (br_if $moar (i32.const 2) ) ) (drop (local.get $1) ) ) ) (func $loop2 (param $x i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local.set $4 (local.get $x) ) (block (drop (local.get $x) ) (loop $moar (drop (local.get $4) ) (local.set $1 (i32.const 1) ) (drop (local.get $1) ) (local.set $2 (local.tee $4 (i32.const 123) ) ) (drop (local.get $2) ) (br_if $moar (i32.const 2) ) (drop (local.get $2) ) (local.set $3 (i32.const 3) ) (drop (local.get $3) ) ) (drop (local.get $3) ) ) ) (func $loop2-zeroinit (local $x i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (drop (i32.const 0) ) (loop $moar (drop (local.get $4) ) (local.set $1 (i32.const 1) ) (drop (local.get $1) ) (local.set $2 (local.tee $4 (i32.const 123) ) ) (drop (local.get $2) ) (br_if $moar (i32.const 2) ) (drop (local.get $2) ) (local.set $3 (i32.const 3) ) (drop (local.get $3) ) ) (drop (local.get $3) ) ) (func $real-loop (param $param i32) (local $loopvar i32) (local $inc i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local.set $3 (local.tee $6 (local.tee $5 (local.get $param) ) ) ) (loop $more (block $stop (if (i32.const 1) (br $stop) ) (local.set $inc (i32.add (local.get $5) (i32.const 1) ) ) (local.set $4 (local.tee $6 (local.tee $5 (local.get $inc) ) ) ) (br $more) ) ) (drop (local.get $6) ) ) (func $real-loop-outblock (param $param i32) (local $loopvar i32) (local $inc i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local.set $3 (local.tee $6 (local.tee $5 (local.get $param) ) ) ) (block $stop (loop $more (if (i32.const 1) (br $stop) ) (local.set $inc (i32.add (local.get $5) (i32.const 1) ) ) (local.set $4 (local.tee $6 (local.tee $5 (local.get $inc) ) ) ) (br $more) ) ) (drop (local.get $6) ) ) (func $loop-loop-param (param $param i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local.set $3 (local.get $param) ) (local.set $4 (local.get $param) ) (block (loop $loop1 (block $out1 (if (local.get $3) (br $out1) ) (local.set $1 (local.tee $4 (local.tee $3 (i32.const 1) ) ) ) (br $loop1) ) ) (loop $loop2 (block $out2 (if (local.get $4) (br $out2) ) (local.set $2 (local.tee $4 (i32.const 2) ) ) (br $loop2) ) ) ) ) (func $loop-loop-param-nomerge (param $param i32) (local $1 i32) (local $2 i32) (local $3 i32) (loop $loop1 (block $out1 (local.set $1 (local.tee $3 (i32.const 1) ) ) (if (local.get $1) (br $out1) ) (br $loop1) ) ) (loop $loop2 (block $out2 (if (local.get $3) (br $out2) ) (local.set $2 (local.tee $3 (i32.const 2) ) ) (br $loop2) ) ) ) (func $loop-nesting (param $x i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $3 (local.get $x) ) (local.set $4 (local.get $x) ) (local.set $5 (local.get $x) ) (block (block $out (loop $loop1 (if (local.get $3) (br $out) ) (loop $loop2 (if (local.get $4) (br $out) ) (local.set $1 (local.tee $5 (local.tee $4 (i32.const 1) ) ) ) (br $loop2) ) (local.set $2 (local.tee $5 (local.tee $4 (local.tee $3 (i32.const 2) ) ) ) ) (br $loop1) ) ) (drop (local.get $5) ) ) ) (func $loop-nesting-2 (param $x i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local.set $3 (local.get $x) ) (local.set $4 (local.get $x) ) (local.set $5 (local.get $x) ) (block (block $out (loop $loop1 (if (local.get $3) (br $out) ) (loop $loop2 (if (local.get $4) (br $out) ) (local.set $1 (local.tee $5 (local.tee $4 (i32.const 1) ) ) ) (br_if $loop2 (i32.const 3) ) ) (local.set $2 (local.tee $5 (local.tee $4 (local.tee $3 (i32.const 2) ) ) ) ) (br $loop1) ) ) (drop (local.get $5) ) ) ) (func $func_6 (result i32) (local $result i32) (local $zero i32) (local $2 i32) (local $3 i32) (local $4 i32) (loop $label$1 (if (i32.eqz (global.get $global$0) ) (return (local.get $4) ) ) (global.set $global$0 (i32.const 0) ) (local.set $2 (local.tee $4 (i32.const 1) ) ) (br_if $label$1 (i32.const 0) ) (local.set $3 (local.tee $4 (i32.const 0) ) ) (br $label$1) ) ) (func $ssa-merge-tricky (result i32) (local $var$0 i32) (local $var$1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local.set $3 (local.tee $8 (local.tee $2 (local.tee $7 (i32.const 0) ) ) ) ) (loop $label$1 (if (i32.eqz (global.get $global$0) ) (return (i32.const 12345) ) ) (global.set $global$0 (i32.const 0) ) (if (i32.eqz (local.get $7) ) (br_if $label$1 (i32.eqz (local.tee $4 (local.tee $7 (i32.const 1) ) ) ) ) ) (br_if $label$1 (i32.eqz (local.tee $6 (local.tee $8 (local.tee $5 (local.tee $7 (local.get $8) ) ) ) ) ) ) ) (i32.const -54) ) ) binaryen-version_108/test/passes/ssa_enable-threads.wast000066400000000000000000000207551423707623100236570ustar00rootroot00000000000000(module (global $global$0 (mut i32) (i32.const 1)) (func $basics (param $x i32) (local $y i32) (local $z f32) (local $w i64) (local $t f64) (drop (local.get $x)) ;; keep as param get (drop (local.get $y)) ;; turn into get of 0-init (drop (local.get $z)) (drop (local.get $w)) (drop (local.get $t)) (local.set $x (i32.const 100)) ;; overwrite param (drop (local.get $x)) ;; no longer a param! (local.set $t (f64.const 2)) ;; overwrite local (drop (local.get $t)) (local.set $t (f64.const 33)) ;; overwrite local AGAIN (drop (local.get $t)) (drop (local.get $t)) ;; use twice ) (func $if (param $p i32) (local $x i32) (local $y i32) (drop (if i32 (i32.const 1) (local.get $x) (local.get $y) ) ) (if (i32.const 1) (local.set $x (i32.const 1)) ) (drop (local.get $x)) ;; same but with param (if (i32.const 1) (local.set $p (i32.const 1)) ) (drop (local.get $p)) ;; if-else (if (i32.const 1) (local.set $x (i32.const 2)) (nop) ) (drop (local.get $x)) (if (i32.const 1) (nop) (local.set $x (i32.const 3)) ) (drop (local.get $x)) (if (i32.const 1) (local.set $x (i32.const 4)) (local.set $x (i32.const 5)) ) (drop (local.get $x)) (if (i32.const 1) (local.set $x (i32.const 6)) (block (local.set $x (i32.const 7)) (local.set $x (i32.const 8)) ) ) (drop (local.get $x)) ) (func $if2 (param $x i32) (if (i32.const 1) (block (local.set $x (i32.const 1)) (drop (local.get $x)) ;; use between phi set and use ) ) (drop (local.get $x)) ) (func $block (param $x i32) (block $out (br_if $out (i32.const 2)) (local.set $x (i32.const 1)) ) (drop (local.get $x)) ) (func $block2 (param $x i32) (block $out (local.set $x (i32.const 1)) (drop (local.get $x)) (br_if $out (i32.const 2)) (drop (local.get $x)) (if (i32.const 3) (block (local.set $x (i32.const 1)) (drop (local.get $x)) (br $out) ) ) (drop (local.get $x)) (local.set $x (i32.const 4)) (drop (local.get $x)) (if (i32.const 5) (br $out) ) (drop (local.get $x)) (if (i32.const 6) (nop) ) (if (i32.const 7) (nop) (nop) ) ;; finally, switching (block $in (local.set $x (i32.const 8)) (drop (local.get $x)) (br_table $in $out (i32.const 9)) ) (drop (local.get $x)) (block $in2 (local.set $x (i32.const 10)) (drop (local.get $x)) (br_table $out $in2 (i32.const 11)) ) (drop (local.get $x)) ) (drop (local.get $x)) ) (func $loop (param $x i32) (drop (local.get $x)) (loop $moar (drop (local.get $x)) (local.set $x (i32.const 1)) (br_if $moar (i32.const 2)) ) (drop (local.get $x)) ) (func $loop2 (param $x i32) (drop (local.get $x)) (loop $moar (drop (local.get $x)) (local.set $x (i32.const 1)) (drop (local.get $x)) (local.set $x (i32.const 123)) (drop (local.get $x)) (br_if $moar (i32.const 2)) (drop (local.get $x)) ;; add use in loop before it ends, we should update this to the phi (local.set $x (i32.const 3)) (drop (local.get $x)) ;; another use, but should *not* be phi'd ) (drop (local.get $x)) ) (func $loop2-zeroinit (local $x i32) (drop (local.get $x)) (loop $moar (drop (local.get $x)) (local.set $x (i32.const 1)) (drop (local.get $x)) (local.set $x (i32.const 123)) (drop (local.get $x)) (br_if $moar (i32.const 2)) (drop (local.get $x)) ;; add use in loop before it ends, we should update this to the phi (local.set $x (i32.const 3)) (drop (local.get $x)) ;; another use, but should *not* be phi'd ) (drop (local.get $x)) ) (func $real-loop (param $param i32) (local $loopvar i32) (local $inc i32) (local.set $loopvar (local.get $param) ) (loop $more (block $stop (if (i32.const 1) (br $stop) ) (local.set $inc (i32.add (local.get $loopvar) ;; this var should be written to from before the loop and the inc at the end (i32.const 1) ) ) (local.set $loopvar (local.get $inc) ) (br $more) ) ) (drop (local.get $loopvar)) ) (func $real-loop-outblock (param $param i32) (local $loopvar i32) (local $inc i32) (local.set $loopvar (local.get $param) ) (block $stop (loop $more (if (i32.const 1) (br $stop) ) (local.set $inc (i32.add (local.get $loopvar) ;; this var should be written to from before the loop and the inc at the end (i32.const 1) ) ) (local.set $loopvar (local.get $inc) ) (br $more) ) ) (drop (local.get $loopvar)) ) (func $loop-loop-param (param $param i32) (loop $loop1 (block $out1 (if (local.get $param) (br $out1) ) (local.set $param (i32.const 1)) (br $loop1) ) ) (loop $loop2 (block $out2 (if (local.get $param) (br $out2) ) (local.set $param (i32.const 2)) (br $loop2) ) ) ) (func $loop-loop-param-nomerge (param $param i32) (loop $loop1 (block $out1 (local.set $param (i32.const 1)) (if (local.get $param) (br $out1) ) (br $loop1) ) ) (loop $loop2 (block $out2 (if (local.get $param) (br $out2) ) (local.set $param (i32.const 2)) (br $loop2) ) ) ) (func $loop-nesting (param $x i32) (block $out (loop $loop1 (if (local.get $x) (br $out) ) (loop $loop2 (if (local.get $x) (br $out) ) (local.set $x (i32.const 1)) (br $loop2) ) (local.set $x (i32.const 2)) (br $loop1) ) ) (drop (local.get $x)) ;; can receive from either set, or input param ) (func $loop-nesting-2 (param $x i32) (block $out (loop $loop1 (if (local.get $x) (br $out) ) (loop $loop2 (if (local.get $x) (br $out) ) (local.set $x (i32.const 1)) (br_if $loop2 (i32.const 3)) ;; add fallthrough ) (local.set $x (i32.const 2)) (br $loop1) ) ) (drop (local.get $x)) ;; can receive from either set, or input param ) (func $func_6 (result i32) (local $result i32) (local $zero i32) (loop $label$1 (if (i32.eqz (global.get $global$0) ) (return (local.get $result) ;; we eventually reach here ) ) (global.set $global$0 (i32.const 0) ;; tell next iteration to return ) (local.set $result (i32.const 1) ;; set the return value to 1, temporarily ) (br_if $label$1 (i32.const 0) ;; don't do anything here ) (local.set $result (local.get $zero) ;; set it to zero instead ) (br $label$1) ;; back to the top, where we will return the zero ) ) (func $ssa-merge-tricky (result i32) (local $var$0 i32) (local $var$1 i32) (local.set $var$1 (local.tee $var$0 (i32.const 0) ;; both vars start out identical ) ) (loop $label$1 (if (i32.eqz (global.get $global$0) ) (return (i32.const 12345) ) ) (global.set $global$0 (i32.const 0) ) (if (i32.eqz (local.get $var$0) ;; check $0 here. this will get a phi var ) (br_if $label$1 (i32.eqz (local.tee $var$0 ;; set $0 to 1. here the two diverge. for the phi, we'll get a set here and above (i32.const 1) ) ) ) ) (br_if $label$1 (i32.eqz ;; indeed equal, enter loop again, and then hang prevention kicks in (local.tee $var$1 ;; set them all to 0 (local.tee $var$0 (local.get $var$1) ;; this must get $1, not the phis, as even though the sets appear in both sources, we only execute 1. ) ) ) ) ) (i32.const -54) ) ) binaryen-version_108/test/passes/ssa_fuzz-exec_enable-threads.txt000066400000000000000000000053571423707623100255210ustar00rootroot00000000000000[fuzz-exec] calling func_0 [fuzz-exec] note result: func_0 => 16384 (module (type $0 (func (result i32))) (memory $0 (shared 1 1)) (table $0 0 0 funcref) (export "func_0" (func $0)) (func $0 (result i32) (local $var$0 i32) (local $var$1 i32) (local $var$2 i32) (local $var$3 f64) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 f64) (local $10 i32) (local $11 i32) (block $label$1 (result i32) (if (result i32) (i32.const 0) (unreachable) (block $label$4 (result i32) (loop $label$5 (block $label$6 (block $label$7 (local.set $8 (if (result i32) (local.get $10) (select (loop $label$9 (result i32) (if (result i32) (local.tee $4 (i32.const 16384) ) (i32.const 1) (i32.const 0) ) ) (br_if $label$4 (i32.const 0) (local.tee $var$1 (local.tee $5 (block $label$12 (result i32) (br_if $label$5 (br $label$6) ) (unreachable) ) ) ) ) (i32.const 1) ) (block $block (result i32) (loop $label$15 (if (i32.const 0) (return (local.get $11) ) ) (if (local.tee $var$1 (local.tee $6 (local.tee $11 (i32.const 0) ) ) ) (block $block4 (br_if $label$15 (i32.const 0) ) ) ) (br_if $label$15 (i32.eqz (local.tee $7 (local.tee $11 (local.tee $10 (i32.const 129) ) ) ) ) ) ) (i32.const -5742806) ) ) ) ) (br_if $label$6 (if (result i32) (local.get $var$1) (unreachable) (block $label$25 (result i32) (local.set $9 (block $label$26 (result f64) (drop (br_if $label$4 (br_if $label$25 (br $label$5) (i32.const 0) ) (i32.const 0) ) ) (f64.const 1) ) ) (i32.const 0) ) ) ) ) ) (local.get $4) ) ) ) ) ) [fuzz-exec] calling func_0 [fuzz-exec] note result: func_0 => 16384 [fuzz-exec] comparing func_0 binaryen-version_108/test/passes/ssa_fuzz-exec_enable-threads.wast000066400000000000000000000045431423707623100256540ustar00rootroot00000000000000(module (type $0 (func (result i32))) (type $1 (func)) (table 0 0 funcref) (memory $0 (shared 1 1)) (export "func_0" (func $0)) (func $0 (; 0 ;) (type $0) (result i32) (local $var$0 i32) (local $var$1 i32) (local $var$2 i32) (local $var$3 f64) (block $label$1 (result i32) (if (result i32) (i32.const 0) (unreachable) (block $label$4 (result i32) (loop $label$5 (block $label$6 (block $label$7 (local.set $var$0 (if (result i32) (local.get $var$2) (select (loop $label$9 (result i32) (if (result i32) (local.tee $var$2 (i32.const 16384) ) (i32.const 1) (i32.const 0) ) ) (br_if $label$4 (i32.const 0) (local.tee $var$1 (local.tee $var$2 (block $label$12 (result i32) (br_if $label$5 (br $label$6) ) (unreachable) ) ) ) ) (i32.const 1) ) (block (result i32) (loop $label$15 (if (i32.const 0) (return (local.get $var$2) ) ) (if (local.tee $var$1 (local.tee $var$2 (i32.const 0) ) ) (block (br_if $label$15 (i32.const 0) ) ) ) (br_if $label$15 (i32.eqz (local.tee $var$2 (i32.const 129) ) ) ) ) (i32.const -5742806) ) ) ) ) (br_if $label$6 (if (result i32) (local.get $var$1) (unreachable) (block $label$25 (result i32) (local.set $var$3 (block $label$26 (result f64) (drop (br_if $label$4 (br_if $label$25 (br $label$5) (i32.const 0) ) (i32.const 0) ) ) (f64.const 1) ) ) (i32.const 0) ) ) ) ) ) (local.get $var$2) ) ) ) ) ) binaryen-version_108/test/passes/stack-check_enable-mutable-globals.txt000066400000000000000000000027371423707623100265320ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "__stack_pointer" (global $sp (mut i32))) (global $__stack_base (mut i32) (i32.const 0)) (global $__stack_limit (mut i32) (i32.const 0)) (export "use_stack" (func $0)) (export "__set_stack_limits" (func $__set_stack_limits)) (func $0 (result i32) (local $0 i32) (block (if (i32.or (i32.gt_u (local.tee $0 (i32.const 42) ) (global.get $__stack_base) ) (i32.lt_u (local.get $0) (global.get $__stack_limit) ) ) (unreachable) ) (global.set $sp (local.get $0) ) ) (global.get $sp) ) (func $__set_stack_limits (param $0 i32) (param $1 i32) (global.set $__stack_base (local.get $0) ) (global.set $__stack_limit (local.get $1) ) ) ) (module (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "__stack_pointer" (global $sp (mut i32))) (global $__stack_base (mut i32) (i32.const 0)) (global $__stack_limit (mut i32) (i32.const 0)) (global $__stack_base_0 (mut i32) (i32.const 0)) (global $__stack_limit_0 (mut i32) (i32.const 0)) (export "use_stack" (func $0)) (export "__set_stack_limits" (func $__set_stack_limits)) (func $0 (result i32) (unreachable) ) (func $__set_stack_limits (param $0 i32) (param $1 i32) (global.set $__stack_base_0 (local.get $0) ) (global.set $__stack_limit_0 (local.get $1) ) ) ) binaryen-version_108/test/passes/stack-check_enable-mutable-globals.wast000066400000000000000000000006761423707623100266710ustar00rootroot00000000000000(module (import "env" "__stack_pointer" (global $sp (mut i32))) (func "use_stack" (result i32) (global.set $sp (i32.const 42)) (global.get $sp) ) ) ;; if the global names are taken we should not crash (module (import "env" "__stack_pointer" (global $sp (mut i32))) (global $__stack_base (mut i32) (i32.const 0)) (global $__stack_limit (mut i32) (i32.const 0)) (export "use_stack" (func $0)) (func $0 (result i32) (unreachable) ) ) binaryen-version_108/test/passes/strip-debug.bin.txt000066400000000000000000000005121423707623100227550ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (import "env" "__linear_memory" (memory $mimport$0 0)) (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (func $0 (result i32) (local $0 i32) (local.set $0 (i32.const 1) ) (return (local.get $0) ) ) ;; custom section "zinking", size 28 ) binaryen-version_108/test/passes/strip-debug.wasm000066400000000000000000000014031423707623100223360ustar00rootroot00000000000000asm…€€€`º€€€env__linear_memoryenv__indirect_function_tablep‚€€€ €€€ A!  ‚€€ .debug_strclang version 8.0.0 (git@github.com:llvm-mirror/clang.git f8ec7c38feebd5cccae31acc7a50182b5474bfa9) (git@github.com:llvm-mirror/llvm.git 2aeaa6efdf56a4db6c6bc07ba5ef0b25da2a040c)a.cpp/usr/local/google/home/azakai/Dev/emscripten_Z3onevoneint€€€ .debug_abbrev%.n: ; I?$> Ñ€€€ .debug_infoA³¹  æî=ò€€€.debug_macinfoÄ€€€ .debug_line4û a.cpp t¤€€€zinking•€€€_Z3onevÁ€€€reloc..debug_info   ³  ¹' /æ 3î >ò˜€€€reloc..debug_line*binaryen-version_108/test/passes/strip-dwarf.bin.txt000066400000000000000000000025171423707623100230010ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) (import "env" "__wasm_call_ctors" (func $fimport$0)) (import "env" "dlmalloc" (func $fimport$1 (param i32) (result i32))) (import "env" "dlfree" (func $fimport$2 (param i32))) (import "env" "setThrew" (func $fimport$3 (param i32 i32))) (import "env" "stackSave" (func $fimport$4 (result i32))) (import "env" "stackAlloc" (func $fimport$5 (param i32) (result i32))) (import "env" "stackRestore" (func $fimport$6 (param i32))) (import "env" "__growWasmMemory" (func $fimport$7 (param i32) (result i32))) (global $global$0 i32 (i32.const 1532)) (export "__wasm_call_ctors" (func $fimport$0)) (export "_Z3foov" (func $fimport$0)) (export "__errno_location" (func $0)) (export "setThrew" (func $fimport$3)) (export "malloc" (func $fimport$1)) (export "free" (func $fimport$2)) (export "__data_end" (global $global$0)) (export "stackSave" (func $fimport$4)) (export "stackAlloc" (func $fimport$5)) (export "stackRestore" (func $fimport$6)) (export "__growWasmMemory" (func $fimport$7)) (func $0 (result i32) (i32.const 1024) ) ;; custom section "sourceMappingURL", size 15 ;; custom section "sourceMappingURL", size 15 ) binaryen-version_108/test/passes/strip-dwarf.wasm000066400000000000000000000015131423707623100223550ustar00rootroot00000000000000asm`````env__wasm_call_ctorsenvdlmallocenvdlfreeenvsetThrewenv stackSaveenv stackAllocenv stackRestoreenv__growWasmMemoryAü • __wasm_call_ctors_Z3foov__errno_locationsetThrewmallocfree __data_end stackSave stackAlloc stackRestore__growWasmMemory A€ sourceMappingURLa.out.wasm.map sourceMappingURLa.out.wasm.mapF .debug_info6•›ÈÐ5 .debug_abbrev%.n: ; ?D .debug_line4û a.cpp !ß .debug_strclang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project f2e65447b3cb6340883957e033e77095a025ebdc)a.cpp/usr/local/google/home/azakai/Dev/emscripten_Z3foovfoobinaryen-version_108/test/passes/strip-producers.bin.txt000066400000000000000000000011771423707623100237050ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (import "env" "__linear_memory" (memory $mimport$0 0)) (import "env" "__indirect_function_table" (table $timport$0 0 funcref)) (func $0 (result i32) (local $0 i32) (local.set $0 (i32.const 1) ) (return (local.get $0) ) ) ;; custom section ".debug_str", size 246 ;; custom section ".debug_abbrev", size 52 ;; custom section ".debug_info", size 69 ;; custom section ".debug_macinfo", size 1 ;; custom section ".debug_line", size 56 ;; custom section "zinking", size 28 ;; custom section "reloc..debug_info", size 47 ;; custom section "reloc..debug_line", size 6 ) binaryen-version_108/test/passes/strip-producers.wasm000066400000000000000000000014031423707623100232560ustar00rootroot00000000000000asm…€€€`º€€€env__linear_memoryenv__indirect_function_tablep‚€€€ €€€ A!  ‚€€ .debug_strclang version 8.0.0 (git@github.com:llvm-mirror/clang.git f8ec7c38feebd5cccae31acc7a50182b5474bfa9) (git@github.com:llvm-mirror/llvm.git 2aeaa6efdf56a4db6c6bc07ba5ef0b25da2a040c)a.cpp/usr/local/google/home/azakai/Dev/emscripten_Z3onevoneint€€€ .debug_abbrev%.n: ; I?$> Ñ€€€ .debug_infoA³¹  æî=ò€€€.debug_macinfoÄ€€€ .debug_line4û a.cpp t¤€€€zinking•€€€_Z3onevÁ€€€reloc..debug_info   ³  ¹' /æ 3î >ò˜€€€reloc..debug_line*binaryen-version_108/test/passes/strip-target-features.bin.txt000066400000000000000000000000571423707623100247750ustar00rootroot00000000000000(module ;; custom section "linking", size 1 ) binaryen-version_108/test/passes/strip-target-features.wasm000066400000000000000000000000531423707623100243520ustar00rootroot00000000000000asm linkingtarget_features+foobinaryen-version_108/test/passes/strip-target-features_roundtrip_print-features_all-features.txt000066400000000000000000000011221423707623100340220ustar00rootroot00000000000000--enable-threads --enable-mutable-globals --enable-nontrapping-float-to-int --enable-simd --enable-bulk-memory --enable-sign-ext --enable-exception-handling --enable-tail-call --enable-reference-types --enable-multivalue --enable-gc --enable-memory64 --enable-typed-function-references --enable-relaxed-simd --enable-extended-const (module (type $none_=>_v128_anyref (func (result v128 anyref))) (func $foo (result v128 anyref) (tuple.make (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) (ref.null any) ) ) (func $bar (result v128 anyref) (return_call $foo) ) ) binaryen-version_108/test/passes/strip-target-features_roundtrip_print-features_all-features.wast000066400000000000000000000005011423707623100341610ustar00rootroot00000000000000;; Test that features enabled on the IR Module survive a round trip ;; even if the target features section is stripped first (module (func $foo (result v128 externref ) (tuple.make (v128.const i32x4 0 0 0 0) (ref.null extern) ) ) (func $bar (result v128 externref) (return_call $foo) ) ) binaryen-version_108/test/passes/stub-unsupported-js.txt000066400000000000000000000016061423707623100237430ustar00rootroot00000000000000(module (type $none_=>_f32 (func (result f32))) (type $i64_=>_f32 (func (param i64) (result f32))) (type $i32_=>_f32 (func (param i32) (result f32))) (func $yes (param $x i64) (result f32) (drop (local.get $x) ) (f32.const 0) ) (func $no (param $x i32) (result f32) (f32.convert_i32_u (local.get $x) ) ) (func $yes-unreach (result f32) (unreachable) ) (func $no-unreach (result f32) (f32.convert_i32_u (unreachable) ) ) ) (module (type $none_=>_f32 (func (result f32))) (type $none_=>_none (func)) (type $none_=>_i32 (func (result i32))) (table $0 2 2 funcref) (elem (i32.const 1) $return-f32) (func $return-f32 (result f32) (f32.const 3.141590118408203) ) (func $bad-indirect-call (drop (i32.const 1) ) ) (func $bad-indirect-call-2 (result i32) (block (drop (i64.const 1234) ) (drop (i32.const 1) ) ) (i32.const 0) ) ) binaryen-version_108/test/passes/stub-unsupported-js.wast000066400000000000000000000014351423707623100241020ustar00rootroot00000000000000(module (func $yes (param $x i64) (result f32) (f32.convert_i64_u (local.get $x)) ) (func $no (param $x i32) (result f32) (f32.convert_i32_u (local.get $x)) ) (func $yes-unreach (result f32) (f32.convert_i64_u (unreachable)) ) (func $no-unreach (result f32) (f32.convert_i32_u (unreachable)) ) ) (module (type $none_=>_none (func)) (type $i64_=>_i32 (func (param $foo i64) (result i32))) (table $0 2 2 funcref) (elem (i32.const 1) $return-f32) (func $return-f32 (result f32) (f32.const 3.14159) ) (func $bad-indirect-call (call_indirect (type $none_=>_none) ;; note how it's the wrong type (i32.const 1) ) ) (func $bad-indirect-call-2 (result i32) (call_indirect (type $i64_=>_i32) ;; note how it's the wrong type (i64.const 1234) (i32.const 1) ) ) ) binaryen-version_108/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt000066400000000000000000000016671423707623100313510ustar00rootroot00000000000000total [exports] : 5 [funcs] : 4 [globals] : 6 [imports] : 5 [memory-data] : 22 [table-data] : 0 [tables] : 1 [tags] : 1 [total] : 363 [vars] : 9 AtomicFence : 1 AtomicRMW : 1 Binary : 65 Block : 36 Break : 7 Call : 2 CallRef : 1 Const : 75 Drop : 1 GlobalGet : 19 GlobalSet : 10 I31New : 1 If : 13 Load : 19 LocalGet : 47 LocalSet : 24 Loop : 6 MemoryCopy : 1 Nop : 6 RefFunc : 2 Return : 10 Select : 2 Store : 2 TupleMake : 1 Unary : 11 binaryen-version_108/test/passes/translate-to-fuzz_all-features_metrics_noprint.wast000066400000000000000000000042361423707623100315030ustar00rootroot00000000000000(module # fake module here, for test harness, but it is really not needed .. any 3INPUT h e r e *will* d0 0.753538467597066 2.2339337309978227 ................. lorem ipsum whatever through the darkness of future past the magician longs to see one [chants|chance] out between two worlds fire, walk with me h e r e *will* d0 0.753538467597066 2.2339337309978227 ................. lorem ipsum whatever through the darkness of future past the magician longs to see one [chants|chance] out between two worlds fire, walk with me (&!*^@$*&@!^*&@#^$*&@#$*&@#$^*&@^#$)(&)(!&$(*&^@&#*$ MOAR testing09237861235980723894570389yfskdjhgfm13jo847rtnjcsjjdhfgnc12o387456vb1p98364vlaisutfvlKUYASDOV*&Q@$%VOUAYFROVLUKSYDFP(*A^*&%DFASF________ <>?><>?>>?<>??>DS?><>?>>?<>??>DS?><>?>>?<>??>DS_i32 (func (param i32 i32) (result i32))) (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $f32_=>_i32 (func (param f32) (result i32))) (type $f32_=>_i64 (func (param f32) (result i64))) (type $f64_=>_i32 (func (param f64) (result i32))) (type $f64_=>_i64 (func (param f64) (result i64))) (type $f32_=>_none (func (param f32))) (type $f64_=>_none (func (param f64))) (func $test_div (param $0 i32) (param $1 i64) (drop (call $i32s-div (local.get $0) (local.get $0) ) ) (drop (call $i32u-div (local.get $0) (local.get $0) ) ) (drop (call $i64s-div (local.get $1) (local.get $1) ) ) (drop (call $i64u-div (local.get $1) (local.get $1) ) ) ) (func $test_rem (param $0 i32) (param $1 i64) (drop (call $i32s-rem (local.get $0) (local.get $0) ) ) (drop (call $i32u-rem (local.get $0) (local.get $0) ) ) (drop (call $i64s-rem (local.get $1) (local.get $1) ) ) (drop (call $i64u-rem (local.get $1) (local.get $1) ) ) ) (func $test_f32_to_int (param $0 f32) (drop (call $f32-to-int (local.get $0) ) ) (drop (call $f32-to-uint (local.get $0) ) ) (drop (call $f32-to-int64 (local.get $0) ) ) (drop (call $f32-to-uint64 (local.get $0) ) ) ) (func $test_f64_to_int (param $0 f64) (drop (call $f64-to-int (local.get $0) ) ) (drop (call $f64-to-uint (local.get $0) ) ) (drop (call $f64-to-int64 (local.get $0) ) ) (drop (call $f64-to-uint64 (local.get $0) ) ) ) (func $f32-to-int (param $0 f32) (result i32) (if (result i32) (f32.ne (local.get $0) (local.get $0) ) (i32.const -2147483648) (if (result i32) (f32.ge (local.get $0) (f32.const 2147483648) ) (i32.const -2147483648) (if (result i32) (f32.le (local.get $0) (f32.const -2147483648) ) (i32.const -2147483648) (i32.trunc_f32_s (local.get $0) ) ) ) ) ) (func $f32-to-int64 (param $0 f32) (result i64) (if (result i64) (f32.ne (local.get $0) (local.get $0) ) (i64.const -9223372036854775808) (if (result i64) (f32.ge (local.get $0) (f32.const 9223372036854775808) ) (i64.const -9223372036854775808) (if (result i64) (f32.le (local.get $0) (f32.const -9223372036854775808) ) (i64.const -9223372036854775808) (i64.trunc_f32_s (local.get $0) ) ) ) ) ) (func $f32-to-uint (param $0 f32) (result i32) (if (result i32) (f32.ne (local.get $0) (local.get $0) ) (i32.const 0) (if (result i32) (f32.ge (local.get $0) (f32.const 4294967296) ) (i32.const 0) (if (result i32) (f32.le (local.get $0) (f32.const -1) ) (i32.const 0) (i32.trunc_f32_u (local.get $0) ) ) ) ) ) (func $f32-to-uint64 (param $0 f32) (result i64) (if (result i64) (f32.ne (local.get $0) (local.get $0) ) (i64.const 0) (if (result i64) (f32.ge (local.get $0) (f32.const 18446744073709551615) ) (i64.const 0) (if (result i64) (f32.le (local.get $0) (f32.const -1) ) (i64.const 0) (i64.trunc_f32_u (local.get $0) ) ) ) ) ) (func $f64-to-int (param $0 f64) (result i32) (if (result i32) (f64.ne (local.get $0) (local.get $0) ) (i32.const -2147483648) (if (result i32) (f64.ge (local.get $0) (f64.const 2147483648) ) (i32.const -2147483648) (if (result i32) (f64.le (local.get $0) (f64.const -2147483649) ) (i32.const -2147483648) (i32.trunc_f64_s (local.get $0) ) ) ) ) ) (func $f64-to-int64 (param $0 f64) (result i64) (if (result i64) (f64.ne (local.get $0) (local.get $0) ) (i64.const -9223372036854775808) (if (result i64) (f64.ge (local.get $0) (f64.const 9223372036854775808) ) (i64.const -9223372036854775808) (if (result i64) (f64.le (local.get $0) (f64.const -9223372036854775808) ) (i64.const -9223372036854775808) (i64.trunc_f64_s (local.get $0) ) ) ) ) ) (func $f64-to-uint (param $0 f64) (result i32) (if (result i32) (f64.ne (local.get $0) (local.get $0) ) (i32.const 0) (if (result i32) (f64.ge (local.get $0) (f64.const 4294967296) ) (i32.const 0) (if (result i32) (f64.le (local.get $0) (f64.const -1) ) (i32.const 0) (i32.trunc_f64_u (local.get $0) ) ) ) ) ) (func $f64-to-uint64 (param $0 f64) (result i64) (if (result i64) (f64.ne (local.get $0) (local.get $0) ) (i64.const 0) (if (result i64) (f64.ge (local.get $0) (f64.const 18446744073709551615) ) (i64.const 0) (if (result i64) (f64.le (local.get $0) (f64.const -1) ) (i64.const 0) (i64.trunc_f64_u (local.get $0) ) ) ) ) ) (func $i32s-div (param $0 i32) (param $1 i32) (result i32) (if (result i32) (i32.eqz (local.get $1) ) (i32.const 0) (if (result i32) (i32.and (i32.eq (local.get $0) (i32.const -2147483648) ) (i32.eq (local.get $1) (i32.const -1) ) ) (i32.const 0) (i32.div_s (local.get $0) (local.get $1) ) ) ) ) (func $i32s-rem (param $0 i32) (param $1 i32) (result i32) (if (result i32) (i32.eqz (local.get $1) ) (i32.const 0) (i32.rem_s (local.get $0) (local.get $1) ) ) ) (func $i32u-div (param $0 i32) (param $1 i32) (result i32) (if (result i32) (i32.eqz (local.get $1) ) (i32.const 0) (i32.div_u (local.get $0) (local.get $1) ) ) ) (func $i32u-rem (param $0 i32) (param $1 i32) (result i32) (if (result i32) (i32.eqz (local.get $1) ) (i32.const 0) (i32.rem_u (local.get $0) (local.get $1) ) ) ) (func $i64s-div (param $0 i64) (param $1 i64) (result i64) (if (result i64) (i64.eqz (local.get $1) ) (i64.const 0) (if (result i64) (i32.and (i64.eq (local.get $0) (i64.const -9223372036854775808) ) (i64.eq (local.get $1) (i64.const -1) ) ) (i64.const 0) (i64.div_s (local.get $0) (local.get $1) ) ) ) ) (func $i64s-rem (param $0 i64) (param $1 i64) (result i64) (if (result i64) (i64.eqz (local.get $1) ) (i64.const 0) (i64.rem_s (local.get $0) (local.get $1) ) ) ) (func $i64u-div (param $0 i64) (param $1 i64) (result i64) (if (result i64) (i64.eqz (local.get $1) ) (i64.const 0) (i64.div_u (local.get $0) (local.get $1) ) ) ) (func $i64u-rem (param $0 i64) (param $1 i64) (result i64) (if (result i64) (i64.eqz (local.get $1) ) (i64.const 0) (i64.rem_u (local.get $0) (local.get $1) ) ) ) ) binaryen-version_108/test/passes/trap-mode-clamp.wast000066400000000000000000000016521423707623100231100ustar00rootroot00000000000000(module (func $test_div (param $0 i32) (param $1 i64) (drop (i32.div_s (local.get $0) (local.get $0))) (drop (i32.div_u (local.get $0) (local.get $0))) (drop (i64.div_s (local.get $1) (local.get $1))) (drop (i64.div_u (local.get $1) (local.get $1))) ) (func $test_rem (param $0 i32) (param $1 i64) (drop (i32.rem_s (local.get $0) (local.get $0))) (drop (i32.rem_u (local.get $0) (local.get $0))) (drop (i64.rem_s (local.get $1) (local.get $1))) (drop (i64.rem_u (local.get $1) (local.get $1))) ) (func $test_f32_to_int (param $0 f32) (drop (i32.trunc_f32_s (local.get $0))) (drop (i32.trunc_f32_u (local.get $0))) (drop (i64.trunc_f32_s (local.get $0))) (drop (i64.trunc_f32_u (local.get $0))) ) (func $test_f64_to_int (param $0 f64) (drop (i32.trunc_f64_s (local.get $0))) (drop (i32.trunc_f64_u (local.get $0))) (drop (i64.trunc_f64_s (local.get $0))) (drop (i64.trunc_f64_u (local.get $0))) ) ) binaryen-version_108/test/passes/trap-mode-js.txt000066400000000000000000000127471423707623100223000ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i64_i64_=>_i64 (func (param i64 i64) (result i64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $f32_=>_i64 (func (param f32) (result i64))) (type $f64_=>_i64 (func (param f64) (result i64))) (type $f32_=>_none (func (param f32))) (type $f64_=>_none (func (param f64))) (type $f64_=>_i32 (func (param f64) (result i32))) (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) (func $test_div (param $0 i32) (param $1 i64) (drop (call $i32s-div (local.get $0) (local.get $0) ) ) (drop (call $i32u-div (local.get $0) (local.get $0) ) ) (drop (call $i64s-div (local.get $1) (local.get $1) ) ) (drop (call $i64u-div (local.get $1) (local.get $1) ) ) ) (func $test_rem (param $0 i32) (param $1 i64) (drop (call $i32s-rem (local.get $0) (local.get $0) ) ) (drop (call $i32u-rem (local.get $0) (local.get $0) ) ) (drop (call $i64s-rem (local.get $1) (local.get $1) ) ) (drop (call $i64u-rem (local.get $1) (local.get $1) ) ) ) (func $test_f32_to_int (param $0 f32) (drop (call $f64-to-int (f64.promote_f32 (local.get $0) ) ) ) (drop (call $f64-to-int (f64.promote_f32 (local.get $0) ) ) ) (drop (call $f32-to-int64 (local.get $0) ) ) (drop (call $f32-to-uint64 (local.get $0) ) ) ) (func $test_f64_to_int (param $0 f64) (drop (call $f64-to-int (local.get $0) ) ) (drop (call $f64-to-int (local.get $0) ) ) (drop (call $f64-to-int64 (local.get $0) ) ) (drop (call $f64-to-uint64 (local.get $0) ) ) ) (func $f32-to-int64 (param $0 f32) (result i64) (if (result i64) (f32.ne (local.get $0) (local.get $0) ) (i64.const -9223372036854775808) (if (result i64) (f32.ge (local.get $0) (f32.const 9223372036854775808) ) (i64.const -9223372036854775808) (if (result i64) (f32.le (local.get $0) (f32.const -9223372036854775808) ) (i64.const -9223372036854775808) (i64.trunc_f32_s (local.get $0) ) ) ) ) ) (func $f32-to-uint64 (param $0 f32) (result i64) (if (result i64) (f32.ne (local.get $0) (local.get $0) ) (i64.const 0) (if (result i64) (f32.ge (local.get $0) (f32.const 18446744073709551615) ) (i64.const 0) (if (result i64) (f32.le (local.get $0) (f32.const -1) ) (i64.const 0) (i64.trunc_f32_u (local.get $0) ) ) ) ) ) (func $f64-to-int64 (param $0 f64) (result i64) (if (result i64) (f64.ne (local.get $0) (local.get $0) ) (i64.const -9223372036854775808) (if (result i64) (f64.ge (local.get $0) (f64.const 9223372036854775808) ) (i64.const -9223372036854775808) (if (result i64) (f64.le (local.get $0) (f64.const -9223372036854775808) ) (i64.const -9223372036854775808) (i64.trunc_f64_s (local.get $0) ) ) ) ) ) (func $f64-to-uint64 (param $0 f64) (result i64) (if (result i64) (f64.ne (local.get $0) (local.get $0) ) (i64.const 0) (if (result i64) (f64.ge (local.get $0) (f64.const 18446744073709551615) ) (i64.const 0) (if (result i64) (f64.le (local.get $0) (f64.const -1) ) (i64.const 0) (i64.trunc_f64_u (local.get $0) ) ) ) ) ) (func $i32s-div (param $0 i32) (param $1 i32) (result i32) (if (result i32) (i32.eqz (local.get $1) ) (i32.const 0) (if (result i32) (i32.and (i32.eq (local.get $0) (i32.const -2147483648) ) (i32.eq (local.get $1) (i32.const -1) ) ) (i32.const 0) (i32.div_s (local.get $0) (local.get $1) ) ) ) ) (func $i32s-rem (param $0 i32) (param $1 i32) (result i32) (if (result i32) (i32.eqz (local.get $1) ) (i32.const 0) (i32.rem_s (local.get $0) (local.get $1) ) ) ) (func $i32u-div (param $0 i32) (param $1 i32) (result i32) (if (result i32) (i32.eqz (local.get $1) ) (i32.const 0) (i32.div_u (local.get $0) (local.get $1) ) ) ) (func $i32u-rem (param $0 i32) (param $1 i32) (result i32) (if (result i32) (i32.eqz (local.get $1) ) (i32.const 0) (i32.rem_u (local.get $0) (local.get $1) ) ) ) (func $i64s-div (param $0 i64) (param $1 i64) (result i64) (if (result i64) (i64.eqz (local.get $1) ) (i64.const 0) (if (result i64) (i32.and (i64.eq (local.get $0) (i64.const -9223372036854775808) ) (i64.eq (local.get $1) (i64.const -1) ) ) (i64.const 0) (i64.div_s (local.get $0) (local.get $1) ) ) ) ) (func $i64s-rem (param $0 i64) (param $1 i64) (result i64) (if (result i64) (i64.eqz (local.get $1) ) (i64.const 0) (i64.rem_s (local.get $0) (local.get $1) ) ) ) (func $i64u-div (param $0 i64) (param $1 i64) (result i64) (if (result i64) (i64.eqz (local.get $1) ) (i64.const 0) (i64.div_u (local.get $0) (local.get $1) ) ) ) (func $i64u-rem (param $0 i64) (param $1 i64) (result i64) (if (result i64) (i64.eqz (local.get $1) ) (i64.const 0) (i64.rem_u (local.get $0) (local.get $1) ) ) ) ) binaryen-version_108/test/passes/trap-mode-js.wast000066400000000000000000000016521423707623100224300ustar00rootroot00000000000000(module (func $test_div (param $0 i32) (param $1 i64) (drop (i32.div_s (local.get $0) (local.get $0))) (drop (i32.div_u (local.get $0) (local.get $0))) (drop (i64.div_s (local.get $1) (local.get $1))) (drop (i64.div_u (local.get $1) (local.get $1))) ) (func $test_rem (param $0 i32) (param $1 i64) (drop (i32.rem_s (local.get $0) (local.get $0))) (drop (i32.rem_u (local.get $0) (local.get $0))) (drop (i64.rem_s (local.get $1) (local.get $1))) (drop (i64.rem_u (local.get $1) (local.get $1))) ) (func $test_f32_to_int (param $0 f32) (drop (i32.trunc_f32_s (local.get $0))) (drop (i32.trunc_f32_u (local.get $0))) (drop (i64.trunc_f32_s (local.get $0))) (drop (i64.trunc_f32_u (local.get $0))) ) (func $test_f64_to_int (param $0 f64) (drop (i32.trunc_f64_s (local.get $0))) (drop (i32.trunc_f64_u (local.get $0))) (drop (i64.trunc_f64_s (local.get $0))) (drop (i64.trunc_f64_u (local.get $0))) ) ) binaryen-version_108/test/passes/vacuum_all-features.txt000066400000000000000000000153401423707623100237320ustar00rootroot00000000000000(module (type $0 (func)) (type $3 (func (result i32))) (type $1 (func (param i32))) (type $2 (func (result f32))) (type $4 (func (param i32 f64 i32 i32))) (type $none_=>_f64 (func (result f64))) (import "env" "int" (func $int (result i32))) (global $Int i32 (i32.const 0)) (memory $0 256 256) (func $b (nop) ) (func $l (local $x i32) (local $y i32) (local.set $x (local.get $x) ) (local.set $x (local.get $x) ) (local.set $x (local.get $y) ) ) (func $loopy (param $0 i32) (nop) ) (func $unary (result f32) (f32.abs (unreachable) ) ) (func $binary (result f32) (drop (f32.add (unreachable) (f32.const 3) ) ) ) (func $select (result i32) (drop (select (unreachable) (i32.const 4) (i32.const 5) ) ) ) (func $block-to-one (unreachable) ) (func $recurse (nop) ) (func $func-block (nop) ) (func $Gu (param $b i32) (param $e f64) (param $l i32) (param $d i32) (if (if (result i32) (local.get $d) (f64.ne (f64.promote_f32 (f32.load (local.tee $l (i32.add (local.get $b) (i32.const 60) ) ) ) ) (local.get $e) ) (i32.const 0) ) (unreachable) ) ) (func $if-drop (result i32) (block $out (if (call $if-drop) (drop (call $int) ) (br $out) ) (if (call $if-drop) (br $out) (drop (call $int) ) ) ) (i32.const 1) ) (func $drop-silly (drop (call $int) ) (drop (call $int) ) (drop (call $int) ) (drop (i32.add (call $int) (call $int) ) ) ) (func $drop-get-global (call $drop-get-global) ) (func $relooperJumpThreading1 (local $$vararg_ptr5 i32) (local $$11 i32) (nop) ) (func $relooperJumpThreading2 (nop) ) (func $relooperJumpThreading3 (nop) ) (func $if2drops (result i32) (drop (if (result i32) (call $if2drops) (call $if2drops) (call $if2drops) ) ) (i32.const 2) ) (func $if2drops-different (result i32) (if (call $if2drops) (drop (call $if2drops) ) (drop (call $unary) ) ) (i32.const 2) ) (func $if-const (param $x i32) (call $if-const (i32.const 3) ) (call $if-const (i32.const 5) ) (call $if-const (i32.const 7) ) ) (func $drop-if-both-unreachable (param $0 i32) (block $out (drop (if (result i32) (local.get $0) (br $out) (br $out) ) ) ) (drop (if (result i32) (local.get $0) (unreachable) (unreachable) ) ) ) (func $if-1-block (param $x i32) (block $out (if (local.get $x) (block $block9 (local.set $x (local.get $x) ) (br $out) ) ) ) ) (func $block-resize-br-gone (block $out (block $in (call $block-resize-br-gone) (br $in) ) (return) ) ) (func $block-unreachable-but-last-element-concrete (local $2 i32) (nop) ) (func $a (block $block (i32.store (i32.const 1) (i32.const 2) ) (f64.div (f64.const -nan:0xfffffffffa361) (loop $label$1 (br $label$1) ) ) ) ) (func $leave-block-even-if-br-not-taken (result f64) (block $label$0 (result f64) (f64.store align=1 (i32.const 879179022) (br_if $label$0 (loop $label$9 (br $label$9) ) (i32.const 677803374) ) ) ) ) (func $executed-if-in-block (unreachable) ) (func $executed-if-in-block2 (unreachable) ) (func $executed-if-in-block3 (block $label$0 (br $label$0) ) (unreachable) ) (func $load-may-have-side-effects (result i32) (i64.ge_s (block $block (result i64) (drop (i64.load32_s (i32.const 678585719) ) ) (i64.const 2912825531628789796) ) (i64.const 0) ) ) (func $unary-binary-may-trap (drop (i64.trunc_f32_u (f32.const 70847791997969805621592064) ) ) ) (func $unreachable-if-with-nop-arm-that-leaves-a-concrete-value-if-nop-is-removed (block $label$0 (loop $label$1 (drop (br_if $label$0 (loop $label$9 (br $label$9) ) ) ) ) ) ) (func $if-arm-vanishes (result i32) (block $label$0 (result i32) (br $label$0 (i32.const 1) ) ) ) (func $if-arm-vanishes-2 (result i32) (block $label$0 (result i32) (br $label$0 (i32.const 1) ) ) ) (func $nop-if-type-changes (local $0 i32) (nop) ) ) (module (type $0 (func (param i64))) (type $1 (func (param f32 i32) (result i32))) (func $0 (param $0 i64) (nop) ) (func $1 (param $0 f32) (param $1 i32) (result i32) (drop (block $label$2 (result i64) (call $0 (br_if $label$2 (i64.const -137438953472) (i32.const 1) ) ) (unreachable) ) ) (unreachable) ) ) (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (global $global$1 (mut i32) (i32.const 0)) (memory $0 1 1) (export "compress" (func $3)) (func $_deflate (param $0 i32) (result i32) (call $_deflate (local.get $0) ) ) (func $_deflateInit2_ (param $0 i32) (result i32) (call $_deflateInit2_ (local.get $0) ) ) (func $_deflateEnd (param $0 i32) (result i32) (call $_deflateEnd (local.get $0) ) ) (func $3 (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (global.get $global$1) ) (global.set $global$1 (i32.sub (global.get $global$1) (i32.const -64) ) ) (i32.store (local.get $3) (local.get $2) ) (i32.store offset=4 (local.get $3) (i32.const 100000) ) (i32.store offset=12 (local.get $3) (local.get $0) ) (i32.store offset=16 (local.get $3) (i32.load (local.get $1) ) ) (i32.store offset=32 (local.get $3) (i32.const 0) ) (i32.store offset=36 (local.get $3) (i32.const 0) ) (i32.store offset=40 (local.get $3) (i32.const 0) ) (if (call $_deflateInit2_ (local.get $3) ) (block $block (global.set $global$1 (local.get $3) ) (return) ) ) (drop (if (result i32) (i32.eq (local.tee $0 (call $_deflate (local.get $3) ) ) (i32.const 1) ) (block $block1 (result i32) (i32.store (local.get $1) (i32.load offset=20 (local.get $3) ) ) (local.set $0 (call $_deflateEnd (local.get $3) ) ) (global.set $global$1 (local.get $3) ) (i32.const 0) ) (block $block2 (result i32) (drop (call $_deflateEnd (local.get $3) ) ) (global.set $global$1 (local.get $3) ) (i32.const 0) ) ) ) ) ) (module (type $none_=>_none (func)) (func $foo (nop) ) ) (module (type $none_=>_none (func)) (global $global$0 (mut i32) (i32.const 10)) (func $1 (nop) ) ) binaryen-version_108/test/passes/vacuum_all-features.wast000066400000000000000000000354271423707623100241010ustar00rootroot00000000000000(module (memory 256 256) (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (result f32))) (type $3 (func (result i32))) (type $4 (func (param i32 f64 i32 i32))) (import $int "env" "int" (result i32)) (global $Int i32 (i32.const 0)) (func $b (type $0) (drop (i32.const 50) ) (nop) (drop (i32.const 51) ) (nop) (nop) (drop (i32.const 52) ) (block $waka1 (drop (i32.const 53) ) (br $waka1) (drop (i32.const 54) ) ) (block $waka2 (nop) (br $waka2) (drop (i32.const 56) ) ) (block $waka3 (br_table $waka3 $waka3 $waka3 (i32.const 57) ) (drop (i32.const 58) ) ) (if (i32.const 100) (nop) (drop (i32.const 101) ) ) (if (i32.const 102) (drop (i32.const 103) ) (nop) ) (if (i32.const 104) (nop) (nop) ) ) (func $l (type $0) (local $x i32) (local $y i32) (drop (local.get $x) ) (local.set $x (local.get $x) ) (block $in-a-block (drop (local.get $x) ) ) (block $two-in-a-block (drop (local.get $x) ) (drop (local.get $y) ) ) (local.set $x (block $result-used (result i32) (local.get $x) ) ) (local.set $x (block $two-and-result-used (result i32) (drop (local.get $x) ) (local.get $y) ) ) ) (func $loopy (type $1) (param $0 i32) (loop $loop-in1 (nop) ) (loop $loop-in3 (nop) (nop) ) (drop (loop $loop-in5 (result i32) (drop (local.get $0) ) (i32.const 20) ) ) ) (func $unary (type $2) (result f32) (drop (f32.abs (f32.const 1) ) ) (f32.abs (unreachable) ) (f32.abs (f32.const 2) ) ) (func $binary (type $2) (result f32) (drop (f32.add (f32.const 1) (f32.const 2) ) ) (drop (f32.add (unreachable) (f32.const 3) ) ) (drop (f32.add (f32.const 4) (unreachable) ) ) (f32.add (unreachable) (unreachable) ) (f32.add (f32.const 5) (f32.const 6) ) ) (func $select (type $3) (result i32) (drop (select (i32.const 1) (i32.const 2) (i32.const 3) ) ) (drop (select (unreachable) (i32.const 4) (i32.const 5) ) ) (drop (select (i32.const 6) (unreachable) (i32.const 7) ) ) (drop (select (i32.const 8) (i32.const 9) (unreachable) ) ) (select (unreachable) (unreachable) (i32.const 10) ) (drop (select (unreachable) (i32.const 11) (unreachable) ) ) (drop (select (i32.const 12) (unreachable) (unreachable) ) ) (select (unreachable) (unreachable) (unreachable) ) (select (i32.const 13) (i32.const 14) (i32.const 15) ) ) (func $block-to-one (type $0) (block $block0 (nop) (nop) ) (block $block1 (nop) (unreachable) ) (block $block2 (nop) (unreachable) (nop) ) (block $block3 (unreachable) (nop) ) (block $block4 (unreachable) ) ) (func $recurse (type $0) (nop) (drop (f32.abs (f32.abs (f32.abs (f32.abs (f32.abs (f32.abs (f32.const 1) ) ) ) ) ) ) ) ) (func $func-block (type $0) (drop (f32.abs (f32.abs (f32.abs (f32.abs (f32.abs (f32.abs (f32.const 1) ) ) ) ) ) ) ) ) (func $Gu (type $4) (param $b i32) (param $e f64) (param $l i32) (param $d i32) (if (if (result i32) (local.get $d) (block $block1 (result i32) (nop) (f64.ne (f64.promote_f32 (f32.load (local.tee $l (i32.add (local.get $b) (i32.const 60) ) ) ) ) (local.get $e) ) ) (i32.const 0) ) (unreachable) ) ) (func $if-drop (result i32) (block $out (drop (if (result i32) (call $if-drop) (call $int) (br $out) ) ) (drop (if (result i32) (call $if-drop) (br $out) (call $int) ) ) ) (i32.const 1) ) (func $drop-silly (drop (i32.eqz (i32.eqz (i32.const 1) ) ) ) (drop (i32.eqz (i32.eqz (call $int) ) ) ) (drop (i32.add (i32.const 2) (i32.const 3) ) ) (drop (i32.add (i32.const 4) (call $int) ) ) (drop (i32.add (call $int) (i32.const 5) ) ) (drop (i32.add (call $int) (call $int) ) ) ) (func $drop-get-global (drop (block (result i32) (call $drop-get-global) (global.get $Int) ;; this is not needed due to the block being drop'd, but make sure the call is not then dropped either ) ) ) (func $relooperJumpThreading1 (local $$vararg_ptr5 i32) (local $$11 i32) (loop $while-in$1 (drop (block $jumpthreading$outer$8 (result i32) (block $jumpthreading$inner$8 (br $jumpthreading$outer$8 ;; the rest is dead in the outer block, but be careful to leave the return value! (i32.const 0) ) ) (i32.store (local.get $$vararg_ptr5) (local.get $$11) ) (i32.const 0) ) ) ) ) (func $relooperJumpThreading2 (loop $while-in$1 (drop (block $jumpthreading$outer$8 (result i32) (block $jumpthreading$inner$8 (br $jumpthreading$outer$8 (i32.const 0) ) ) (i32.const 0) ) ) ) ) (func $relooperJumpThreading3 (loop $while-in$1 (drop (block $jumpthreading$outer$8 (result i32) (br $jumpthreading$outer$8 ;; code after this is dead, can kill it, but preserve the return value at the end! (i32.const 0) ) (drop (i32.const 3)) (drop (i32.const 2)) (drop (i32.const 1)) (i32.const 0) ) ) ) ) (func $if2drops (result i32) (if (call $if2drops) (drop (call $if2drops) ) (drop (call $if2drops) ) ) (i32.const 2) ) (func $if2drops-different (result i32) (if (call $if2drops) (drop (call $if2drops) ;; i32 ) (drop (call $unary) ;; f32! ) ) (i32.const 2) ) (func $if-const (param $x i32) (if (i32.const 0) (call $if-const (i32.const 1))) (if (i32.const 2) (call $if-const (i32.const 3))) (if (i32.const 0) (call $if-const (i32.const 4)) (call $if-const (i32.const 5))) (if (i32.const 6) (call $if-const (i32.const 7)) (call $if-const (i32.const 8))) ) (func $drop-if-both-unreachable (param $0 i32) (block $out (drop (if (result i32) (local.get $0) (br $out) (br $out) ) ) ) (drop (if (result i32) (local.get $0) (unreachable) (unreachable) ) ) ) (func $if-1-block (param $x i32) (block $out (if (local.get $x) (block (if (i32.const 1) (block (local.set $x (local.get $x) ) (br $out) ) ) ) ) ) ) (func $block-resize-br-gone (block $out (block $in (call $block-resize-br-gone) (br $in) (br $out) ) (return) ) (block $out2 (block $in2 (br $in2) (br $out2) ) (return) ) ) (func $block-unreachable-but-last-element-concrete (local $2 i32) (block $label$0 (drop (block (result i32) (br $label$0) (local.get $2) ) ) ) ) (func $a (block (i32.store (i32.const 1) (i32.const 2)) (f64.div (f64.const -nan:0xfffffffffa361) (loop $label$1 ;; unreachable, so the div is too. keep (br $label$1) ) ) ) ) (func $leave-block-even-if-br-not-taken (result f64) (block $label$0 (result f64) (f64.store align=1 (i32.const 879179022) (br_if $label$0 (loop $label$9 (br $label$9) ) (i32.const 677803374) ) ) (f64.const 2097914503796645752267195e31) ) ) (func $executed-if-in-block (block $label$0 (if (i32.const 170996275) (unreachable) (br $label$0) ) ) (unreachable) ) (func $executed-if-in-block2 (block $label$0 (if (i32.const 170996275) (nop) (br $label$0) ) ) (unreachable) ) (func $executed-if-in-block3 (block $label$0 (if (i32.const 170996275) (br $label$0) (nop) ) ) (unreachable) ) (func $load-may-have-side-effects (result i32) (i64.ge_s (block (result i64) (drop (i64.eq (i64.load32_s (i32.const 678585719) ) (i64.const 8097879367757079605) ) ) (i64.const 2912825531628789796) ) (i64.const 0) ) ) (func $unary-binary-may-trap (drop (i64.div_s (i64.const -1) (i64.const 729618461987467893) ) ) (drop (i64.trunc_f32_u (f32.const 70847791997969805621592064) ) ) ) (func $unreachable-if-with-nop-arm-that-leaves-a-concrete-value-if-nop-is-removed (block $label$0 (loop $label$1 (drop (if (result i32) (br_if $label$0 (loop $label$9 (br $label$9) ) ) (unreachable) (i32.const 1920103026) ) ) ) ) ) (func $if-arm-vanishes (result i32) (block $label$0 (result i32) (block $label$1 (if (br $label$0 (i32.const 1) ) (br $label$1) ) ) (i32.const 1579493952) ) ) (func $if-arm-vanishes-2 (result i32) (block $label$0 (result i32) (block $label$1 (if (br $label$0 (i32.const 1) ) (br $label$1) ) ) (i32.const 1579493952) ) ) (func $nop-if-type-changes (type $0) (local $0 i32) (block $label$0 (if (i32.eqz (local.get $0) ) (block $label$1 (block (if ;; we nop this if, which has a type change for block $label$1, no more brs to it (i32.const 0) (br_if $label$1 (i32.const 1717966400) ) ) (drop (br $label$0) ) ) ) ) ) ) ) (module ;; a child with a different type, cannot simply replace the parent with it (type $0 (func (param i64))) (type $1 (func (param f32 i32) (result i32))) (func $0 (; 0 ;) (type $0) (param $0 i64) (nop) ) (func $1 (; 1 ;) (type $1) (param $0 f32) (param $1 i32) (result i32) (drop (block $label$1 (result i32) (i32.wrap_i64 (block $label$2 (result i64) (call $0 (br_if $label$2 (i64.const -137438953472) (i32.const 1) ) ) (unreachable) ) ) ) ) (unreachable) ) ) (module ;; vacuum away a drop on an if where both arms can be vacuumed (memory 1 1) (global $global$1 (mut i32) (i32.const 0)) (func $_deflate (param i32) (result i32) (call $_deflate (local.get $0)) ) (func $_deflateInit2_ (param i32) (result i32) (call $_deflateInit2_ (local.get $0)) ) (func $_deflateEnd (param i32) (result i32) (call $_deflateEnd (local.get $0)) ) (func "compress" (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local.set $3 (global.get $global$1) ) (global.set $global$1 (i32.sub (global.get $global$1) (i32.const -64) ) ) (i32.store (local.get $3) (local.get $2) ) (i32.store offset=4 (local.get $3) (i32.const 100000) ) (i32.store offset=12 (local.get $3) (local.get $0) ) (i32.store offset=16 (local.get $3) (i32.load (local.get $1) ) ) (i32.store offset=32 (local.get $3) (i32.const 0) ) (i32.store offset=36 (local.get $3) (i32.const 0) ) (i32.store offset=40 (local.get $3) (i32.const 0) ) (if (call $_deflateInit2_ (local.get $3) ) (block (global.set $global$1 (local.get $3) ) (return) ) ) (drop (if (result i32) (i32.eq (local.tee $0 (call $_deflate (local.get $3) ) ) (i32.const 1) ) (block (result i32) (i32.store (local.get $1) (i32.load offset=20 (local.get $3) ) ) (local.set $0 (call $_deflateEnd (local.get $3) ) ) (global.set $global$1 (local.get $3) ) (local.get $0) ) (block (result i32) (drop (call $_deflateEnd (local.get $3) ) ) (global.set $global$1 (local.get $3) ) (select (local.get $0) (i32.const -5) (local.get $0) ) ) ) ) ) ) (module (type $A (struct (field (mut i32)))) (func $foo (drop (block (result dataref) ;; this dropped item can be vacuumed out in principle, but it is a non- ;; nullable reference type and we don't have a type to put in its place, so ;; don't try to replace it. (later operations will remove all the body of ;; this function; this test verifies we don't crash along the way) (struct.new_default_with_rtt $A (rtt.canon $A) ) ) ) ) ) (module (global $global$0 (mut i32) (i32.const 10)) (func $1 (drop (block $block (result funcref i32) ;; we can vaccum out all parts of this block: the br_if is not taken, there ;; is a nop, and the tuple at the end goes to a dropped block anyhow. this ;; test specifically verifies handling of tuples containing non-nullable ;; types, for which we try to create a zero in an intermediate step along ;; the way. (drop (br_if $block (tuple.make (ref.func $1) (i32.const 0) ) (i32.const 0) ) ) (nop) (tuple.make (ref.func $1) (i32.const 1) ) ) ) ) ) binaryen-version_108/test/passes/vacuum_ignore-implicit-traps.txt000066400000000000000000000004121423707623100255620ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (memory $0 1) (func $load-would-normally-have-side-effects (result i32) (i64.ge_s (i64.const 2912825531628789796) (i64.const 0) ) ) (func $unary-binary-may-trap (nop) ) ) binaryen-version_108/test/passes/vacuum_ignore-implicit-traps.wast000066400000000000000000000010351423707623100257230ustar00rootroot00000000000000(module (memory 1) (func $load-would-normally-have-side-effects (result i32) (i64.ge_s (block (result i64) (drop (i64.eq (i64.load32_s (i32.const 678585719) ) (i64.const 8097879367757079605) ) ) (i64.const 2912825531628789796) ) (i64.const 0) ) ) (func $unary-binary-may-trap (drop (i64.div_s (i64.const -1) (i64.const 729618461987467893) ) ) (drop (i64.trunc_f32_u (f32.const 70847791997969805621592064) ) ) ) ) binaryen-version_108/test/passes/vacuum_remove-unused-names_merge-blocks.txt000066400000000000000000000002701423707623100276730ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (func $return-block (param $x i32) (result i32) (local.set $x (local.get $x) ) (return (local.get $x) ) ) ) binaryen-version_108/test/passes/vacuum_remove-unused-names_merge-blocks.wast000066400000000000000000000010251423707623100300310ustar00rootroot00000000000000(module ;; vacuum and remove-unused names leave us with a return at the top, and then ;; merge-blocks wants to move the first line of the block into an outer block ;; that then becomes the fallthrough of the function, so it must be properly typed. ;; and here the new last element is a return, with unreachable type, bad for a block ;; in that position (func $return-block (param $x i32) (result i32) (return (block (result i32) (local.set $x (local.get $x)) (local.get $x) ) ) ) ) binaryen-version_108/test/polymorphic_stack.wast000066400000000000000000000043571423707623100223670ustar00rootroot00000000000000(module (type $FUNCSIG$ii (func (param i32) (result i32))) (import "env" "table" (table 9 9 funcref)) (func $break-and-binary (result i32) (block $x (result i32) (f32.add (br_if $x (i32.trunc_f64_u (unreachable) ) (i32.trunc_f64_u (unreachable) ) ) (f32.const 1) ) ) ) (func $call-and-unary (param i32) (result i32) (drop (i64.eqz (call $call-and-unary (unreachable) ) ) ) (drop (i64.eqz (i32.eqz (unreachable) ) ) ) (drop (i64.eqz (call_indirect (type $FUNCSIG$ii) (unreachable) (unreachable) ) ) ) ) (func $tee (param $x i32) (local $y f32) (drop (i64.eqz (local.tee $x (unreachable) ) ) ) (drop (local.tee $y (i64.eqz (unreachable) ) ) ) ) (func $tee2 (local $0 f32) (if (i32.const 259) (local.set $0 (unreachable) ) ) ) (func $select (drop (i64.eqz (select (unreachable) (i32.const 1) (i32.const 2) ) ) ) ) (func $untaken-break-should-have-value (result i32) (block $x (result i32) (block (br_if $x (i32.const 0) (unreachable) ) ) ) ) (func $unreachable-in-block-but-code-before (param $0 i32) (result i32) (if (local.get $0) (return (i32.const 127) ) ) (block $label$0 (result i32) (br_if $label$0 (i32.const 0) (return (i32.const -32) ) ) ) ) (func $br_table_unreachable_to_also_unreachable (result i32) (block $a (result i32) (block $b (result i32) (br_table $a $b ;; seems to send a value, but is not taken (unreachable) (unreachable) ) ) ) ) (func $untaken-br_if (result i32) (block $label$8 (result i32) (block $label$9 (drop (if (i32.const 0) (br_if $label$8 (unreachable) (i32.const 0) ) (unreachable) ) ) ) ) ) ) binaryen-version_108/test/polymorphic_stack.wast.from-wast000066400000000000000000000037671423707623100243110ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "env" "table" (table $timport$0 9 9 funcref)) (func $break-and-binary (result i32) (block $x (result i32) (f32.add (br_if $x (i32.trunc_f64_u (unreachable) ) (i32.trunc_f64_u (unreachable) ) ) (f32.const 1) ) ) ) (func $call-and-unary (param $0 i32) (result i32) (drop (i64.eqz (call $call-and-unary (unreachable) ) ) ) (drop (i64.eqz (i32.eqz (unreachable) ) ) ) (drop (i64.eqz (call_indirect $timport$0 (type $FUNCSIG$ii) (unreachable) (unreachable) ) ) ) ) (func $tee (param $x i32) (local $y f32) (drop (i64.eqz (local.tee $x (unreachable) ) ) ) (drop (local.tee $y (i64.eqz (unreachable) ) ) ) ) (func $tee2 (local $0 f32) (if (i32.const 259) (local.tee $0 (unreachable) ) ) ) (func $select (drop (i64.eqz (select (unreachable) (i32.const 1) (i32.const 2) ) ) ) ) (func $untaken-break-should-have-value (result i32) (block $x (result i32) (block $block (br_if $x (i32.const 0) (unreachable) ) ) ) ) (func $unreachable-in-block-but-code-before (param $0 i32) (result i32) (if (local.get $0) (return (i32.const 127) ) ) (block $label$0 (result i32) (br_if $label$0 (i32.const 0) (return (i32.const -32) ) ) ) ) (func $br_table_unreachable_to_also_unreachable (result i32) (block $a (result i32) (block $b (result i32) (br_table $a $b (unreachable) (unreachable) ) ) ) ) (func $untaken-br_if (result i32) (block $label$8 (result i32) (block $label$9 (drop (if (i32.const 0) (br_if $label$8 (unreachable) (i32.const 0) ) (unreachable) ) ) ) ) ) ) binaryen-version_108/test/polymorphic_stack.wast.fromBinary000066400000000000000000000024671423707623100244760ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "env" "table" (table $timport$0 9 9 funcref)) (func $break-and-binary (result i32) (block $label$1 (result i32) (unreachable) ) ) (func $call-and-unary (param $0 i32) (result i32) (unreachable) ) (func $tee (param $x i32) (local $y f32) (unreachable) ) (func $tee2 (local $0 f32) (if (i32.const 259) (unreachable) ) ) (func $select (unreachable) ) (func $untaken-break-should-have-value (result i32) (block $label$1 (result i32) (block $label$2 (drop (i32.const 0) ) (unreachable) ) (unreachable) ) ) (func $unreachable-in-block-but-code-before (param $0 i32) (result i32) (if (local.get $0) (return (i32.const 127) ) ) (block $label$2 (result i32) (drop (i32.const 0) ) (return (i32.const -32) ) ) ) (func $br_table_unreachable_to_also_unreachable (result i32) (block $label$1 (result i32) (block $label$2 (result i32) (unreachable) ) ) ) (func $untaken-br_if (result i32) (block $label$1 (result i32) (block $label$2 (if (i32.const 0) (unreachable) (unreachable) ) ) (unreachable) ) ) ) binaryen-version_108/test/polymorphic_stack.wast.fromBinary.noDebugInfo000066400000000000000000000022351423707623100266650ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (import "env" "table" (table $timport$0 9 9 funcref)) (func $0 (result i32) (block $label$1 (result i32) (unreachable) ) ) (func $1 (param $0 i32) (result i32) (unreachable) ) (func $2 (param $0 i32) (local $1 f32) (unreachable) ) (func $3 (local $0 f32) (if (i32.const 259) (unreachable) ) ) (func $4 (unreachable) ) (func $5 (result i32) (block $label$1 (result i32) (block $label$2 (drop (i32.const 0) ) (unreachable) ) (unreachable) ) ) (func $6 (param $0 i32) (result i32) (if (local.get $0) (return (i32.const 127) ) ) (block $label$2 (result i32) (drop (i32.const 0) ) (return (i32.const -32) ) ) ) (func $7 (result i32) (block $label$1 (result i32) (block $label$2 (result i32) (unreachable) ) ) ) (func $8 (result i32) (block $label$1 (result i32) (block $label$2 (if (i32.const 0) (unreachable) (unreachable) ) ) (unreachable) ) ) ) binaryen-version_108/test/print/000077500000000000000000000000001423707623100170605ustar00rootroot00000000000000binaryen-version_108/test/print/memory-import-shared.minified.txt000066400000000000000000000000741423707623100254710ustar00rootroot00000000000000(module(import "env" "memory" (memory $0 (shared 256 256))))binaryen-version_108/test/print/memory-import-shared.txt000066400000000000000000000001001423707623100236740ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 (shared 256 256))) ) binaryen-version_108/test/print/memory-import-shared.wast000066400000000000000000000001001423707623100240330ustar00rootroot00000000000000(module (import "env" "memory" (memory $0 (shared 256 256))) ) binaryen-version_108/test/print/memory-shared.minified.txt000066400000000000000000000000441423707623100241560ustar00rootroot00000000000000(module(memory $0 (shared 23 256)) )binaryen-version_108/test/print/memory-shared.txt000066400000000000000000000000471423707623100223760ustar00rootroot00000000000000(module (memory $0 (shared 23 256)) ) binaryen-version_108/test/print/memory-shared.wast000066400000000000000000000000471423707623100225350ustar00rootroot00000000000000(module (memory $0 (shared 23 256)) ) binaryen-version_108/test/print/min.minified.txt000066400000000000000000000015661423707623100221770ustar00rootroot00000000000000(module(type $0 (func(param f32)(result f32)))(type $1 (func(param i32 i32)(result f32)))(type $2 (func(param i32)(result i32)))(type $3 (func(param i32 i32 i32)(result i32)))(memory $0 256 256) (export "floats" (func $floats))(func $floats(param $f f32)(result f32)(local $t f32)(f32.add(local.get $t)(local.get $f)))(func $neg(param $k i32)(param $p i32)(result f32)(local $n f32)(local.tee $n(f32.neg(block $block0 (result f32)(i32.store(local.get $k)(local.get $p))(f32.load(local.get $k))))))(func $littleswitch(param $x i32)(result i32)(block $topmost (result i32)(block $switch-case$2(block $switch-case$1(br_table $switch-case$1 $switch-case$2 $switch-case$1(i32.sub(local.get $x)(i32.const 1)))) (br $topmost(i32.const 1))) (br $topmost(i32.const 2))(i32.const 0)))(func $f1(param $i1 i32)(param $i2 i32)(param $i3 i32)(result i32)(block $topmost (result i32)(local.get $i3))))binaryen-version_108/test/print/min.txt000066400000000000000000000021521423707623100204040ustar00rootroot00000000000000(module (type $0 (func (param f32) (result f32))) (type $1 (func (param i32 i32) (result f32))) (type $2 (func (param i32) (result i32))) (type $3 (func (param i32 i32 i32) (result i32))) (memory $0 256 256) (export "floats" (func $floats)) (func $floats (param $f f32) (result f32) (local $t f32) (f32.add (local.get $t) (local.get $f) ) ) (func $neg (param $k i32) (param $p i32) (result f32) (local $n f32) (local.tee $n (f32.neg (block $block0 (result f32) (i32.store (local.get $k) (local.get $p) ) (f32.load (local.get $k) ) ) ) ) ) (func $littleswitch (param $x i32) (result i32) (block $topmost (result i32) (block $switch-case$2 (block $switch-case$1 (br_table $switch-case$1 $switch-case$2 $switch-case$1 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $topmost (i32.const 1) ) ) (br $topmost (i32.const 2) ) (i32.const 0) ) ) (func $f1 (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) (block $topmost (result i32) (local.get $i3) ) ) ) binaryen-version_108/test/print/min.wast000066400000000000000000000024751423707623100205530ustar00rootroot00000000000000(module (type $0 (func (param f32) (result f32))) (type $1 (func (param i32 i32) (result f32))) (type $2 (func (param i32) (result i32))) (type $3 (func (param i32 i32 i32) (result i32))) (memory $0 256 256) (export "floats" (func $floats)) (func $floats (type $0) (param $f f32) (result f32) (local $t f32) (f32.add (local.get $t) (local.get $f) ) ) (func $neg (type $1) (param $k i32) (param $p i32) (result f32) (local $n f32) (local.tee $n (f32.neg (block $block0 (result f32) (i32.store (local.get $k) (local.get $p) ) (f32.load (local.get $k) ) ) ) ) ) (func $littleswitch (type $2) (param $x i32) (result i32) (block $topmost (result i32) (block $switch-case$2 (block $switch-case$1 (br_table $switch-case$1 $switch-case$2 $switch-case$1 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $topmost (i32.const 1) ) ) (br $topmost (i32.const 2) ) (i32.const 0) ) ) (func $f1 (type $3) (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) (block $topmost (result i32) (local.get $i3) ) ) ) binaryen-version_108/test/printf.c000066400000000000000000000007301423707623100173720ustar00rootroot00000000000000#include int main() { int a = 12345; unsigned b = 123456; long c = 1234567; unsigned long d = 12345678; long long e = 1234567891011; unsigned long long f = 123456789101112; printf("int a = %d\n" "unsigned b = %u\n" "long c = %ld\n" "unsigned long d = %lu\n" "long long e = %lld\n" "unsigned long long f = %llu\n", a, b, c, d, e, f); return 0; } binaryen-version_108/test/printf.txt000066400000000000000000000002211423707623100177620ustar00rootroot00000000000000int a = 12345 unsigned b = 123456 long c = 1234567 unsigned long d = 12345678 long long e = 1234567891011 unsigned long long f = 123456789101112 binaryen-version_108/test/reduce/000077500000000000000000000000001423707623100171735ustar00rootroot00000000000000binaryen-version_108/test/reduce/atomics-and-bulk-memory.wast000066400000000000000000000007441423707623100245400ustar00rootroot00000000000000(module (memory 1 1) ;; this can be removed destructively (data "some-data") (func "foo" (result i32) ;; this can be removed destructively (memory.init 0 (i32.const 3) (i32.const 3) (i32.const 3)) (i32.atomic.store8 (i32.const 0) ;; an add that can be optimized (i32.add (i32.const 97) (i32.const 2) ) ) ;; add some nops and blocks for reduction to remove (nop) (block (result i32) (i32.atomic.load8_u (i32.const 0) ) ) ) ) binaryen-version_108/test/reduce/atomics-and-bulk-memory.wast.txt000066400000000000000000000003401423707623100253460ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (memory $0 1 1) (export "foo" (func $0)) (func $0 (result i32) (i32.atomic.store8 (i32.const 0) (i32.const 99) ) (i32.atomic.load8_u (i32.const 0) ) ) ) binaryen-version_108/test/reduce/destructive.wast000066400000000000000000000003701423707623100224340ustar00rootroot00000000000000(module (export "x" (func $x)) (func $x (param $x i32) (result i32) (if (i32.eq (local.get $x) (i32.const 98658746)) (unreachable) ;; this can be removed destructively, since we do not sent this param ) (i32.const 100) ) ) binaryen-version_108/test/reduce/destructive.wast.txt000066400000000000000000000002221423707623100232460ustar00rootroot00000000000000(module (type $i32_=>_i32 (func (param i32) (result i32))) (export "x" (func $0)) (func $0 (param $0 i32) (result i32) (i32.const 100) ) ) binaryen-version_108/test/reduce/imports.wast000066400000000000000000000004231423707623100215670ustar00rootroot00000000000000(module (import "env" "func" (func $import)) (export "x" (func $x)) (func $x (result i32) (nop) (nop) (nop) (call $import) (drop (i32.const 1234)) (i32.const 5678) ;; easily reducible ) (func $not-exported (nop) (unreachable) ) ) binaryen-version_108/test/reduce/imports.wast.txt000066400000000000000000000001711423707623100224050ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (export "x" (func $0)) (func $0 (result i32) (i32.const 5678) ) ) binaryen-version_108/test/reduce/memory_table.wast000066400000000000000000000013451423707623100225550ustar00rootroot00000000000000(module (type $i (func (result i32))) (memory $0 256 256) (table 481 481 funcref) (elem (i32.const 0) $f0 $f0 $f1 $f2 $f0 $f3 $f0) (data (i32.const 0) "p\0bflkj") (data (i32.const 10960) "1234hello") (export "f1" (func $f1)) (export "f2" (func $f2)) (export "f4" (func $f4)) (func $f0 (result i32) (i32.const 1234) ) (func $f1 (i32.store (i32.const 1000) (i32.const 65530)) ;; dead store ) (func $f2 (result i32) (i32.store (i32.const 0) (i32.const 65530)) (i32.load (i32.const 0)) ;; load the written stuff ) (func $f3 (result i32) (i32.load (i32.const 10964)) ;; load the 'hell' ) (func $f4 (result i32) (i32.add (call_indirect (type $i) (i32.const 3)) (call_indirect (type $i) (i32.const 0)) ) ) ) binaryen-version_108/test/reduce/memory_table.wast.txt000066400000000000000000000006021423707623100233660ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (memory $0 256 256) (export "f1" (func $0)) (export "f2" (func $1)) (export "f4" (func $2)) (func $0 (nop) ) (func $1 (result i32) (i32.store (i32.const 0) (i32.const 65530) ) (i32.load (i32.const 0) ) ) (func $2 (result i32) (i32.add (call $1) (i32.const 1234) ) ) ) binaryen-version_108/test/reduce/simple.wast000066400000000000000000000003311423707623100213610ustar00rootroot00000000000000(module (export "x" (func $x)) (func $x (result i32) (nop) (nop) (nop) (drop (i32.const 1234)) (i32.const 5678) ;; easily reducible ) (func $not-exported (nop) (unreachable) ) ) binaryen-version_108/test/reduce/simple.wast.txt000066400000000000000000000001711423707623100222010ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (export "x" (func $0)) (func $0 (result i32) (i32.const 5678) ) ) binaryen-version_108/test/reference-types.wast000066400000000000000000000354041423707623100217320ustar00rootroot00000000000000;; reftype :: externref | funcref ;; NOTE: the subtyping relationship has been removed from the reference-types proposal but an ;; `--enable-anyref` feature flag is present in Binaryen that we use below to test subtyping. ;; ;; reftype :: reftype | anyref ;; reftype <: anyref (module (type $sig_externref (func (param externref))) (type $sig_funcref (func (param funcref))) (type $sig_anyref (func (param anyref))) (func $take_externref (param externref)) (func $take_funcref (param funcref)) (func $take_anyref (param anyref)) (func $foo) (table funcref (elem $take_externref $take_funcref $take_anyref)) (elem declare func $ref-taken-but-not-in-table) (import "env" "import_func" (func $import_func (param externref) (result funcref))) (import "env" "import_global" (global $import_global externref)) (export "export_func" (func $import_func (param externref) (result funcref))) (export "export_global" (global $import_global)) ;; Test global initializer expressions (global $global_externref (mut externref) (ref.null extern)) (global $global_funcref (mut funcref) (ref.null func)) (global $global_funcref_func (mut funcref) (ref.func $foo)) (global $global_anyref (mut anyref) (ref.null any)) ;; Test subtype relationship in global initializer expressions (global $global_anyref2 (mut anyref) (ref.null extern)) (global $global_anyref3 (mut anyref) (ref.null func)) (global $global_anyref4 (mut anyref) (ref.func $foo)) (tag $e-i32 (param i32)) (func $test (local $local_externref externref) (local $local_funcref funcref) (local $local_anyref anyref) ;; Test types for local.get/set (local.set $local_externref (local.get $local_externref)) (local.set $local_externref (global.get $global_externref)) (local.set $local_externref (ref.null extern)) (local.set $local_funcref (local.get $local_funcref)) (local.set $local_funcref (global.get $global_funcref)) (local.set $local_funcref (ref.null func)) (local.set $local_funcref (ref.func $foo)) (local.set $local_anyref (local.get $local_anyref)) (local.set $local_anyref (global.get $global_anyref)) (local.set $local_anyref (ref.null any)) ;; Test subtype relationship for local.set (local.set $local_anyref (local.get $local_externref)) (local.set $local_anyref (global.get $global_externref)) (local.set $local_anyref (ref.null extern)) (local.set $local_anyref (local.get $local_funcref)) (local.set $local_anyref (global.get $global_funcref)) (local.set $local_anyref (ref.null func)) (local.set $local_anyref (ref.func $foo)) ;; Test types for global.get/set (global.set $global_externref (global.get $global_externref)) (global.set $global_externref (local.get $local_externref)) (global.set $global_externref (ref.null extern)) (global.set $global_funcref (global.get $global_funcref)) (global.set $global_funcref (local.get $local_funcref)) (global.set $global_funcref (ref.null func)) (global.set $global_funcref (ref.func $foo)) (global.set $global_anyref (global.get $global_anyref)) (global.set $global_anyref (local.get $local_anyref)) (global.set $global_anyref (ref.null any)) ;; Test subtype relationship for global.set (global.set $global_anyref (global.get $global_externref)) (global.set $global_anyref (local.get $local_externref)) (global.set $global_anyref (ref.null extern)) (global.set $global_anyref (global.get $global_funcref)) (global.set $global_anyref (local.get $local_funcref)) (global.set $global_anyref (ref.null func)) (global.set $global_anyref (ref.func $foo)) ;; Test function call params (call $take_externref (local.get $local_externref)) (call $take_externref (global.get $global_externref)) (call $take_externref (ref.null extern)) (call $take_funcref (local.get $local_funcref)) (call $take_funcref (global.get $global_funcref)) (call $take_funcref (ref.null func)) (call $take_funcref (ref.func $foo)) (call $take_anyref (local.get $local_anyref)) (call $take_anyref (global.get $global_anyref)) (call $take_anyref (ref.null any)) ;; Test subtype relationship for function call params (call $take_anyref (local.get $local_externref)) (call $take_anyref (global.get $global_externref)) (call $take_anyref (ref.null extern)) (call $take_anyref (local.get $local_funcref)) (call $take_anyref (global.get $global_funcref)) (call $take_anyref (ref.null func)) (call $take_anyref (ref.func $foo)) ;; Test call_indirect params (call_indirect (type $sig_externref) (local.get $local_externref) (i32.const 0)) (call_indirect (type $sig_externref) (global.get $global_externref) (i32.const 0)) (call_indirect (type $sig_externref) (ref.null extern) (i32.const 0)) (call_indirect (type $sig_funcref) (local.get $local_funcref) (i32.const 1)) (call_indirect (type $sig_funcref) (global.get $global_funcref) (i32.const 1)) (call_indirect (type $sig_funcref) (ref.null func) (i32.const 1)) (call_indirect (type $sig_funcref) (ref.func $foo) (i32.const 1)) (call_indirect (type $sig_anyref) (local.get $local_anyref) (i32.const 3)) (call_indirect (type $sig_anyref) (global.get $global_anyref) (i32.const 3)) (call_indirect (type $sig_anyref) (ref.null any) (i32.const 3)) ;; Test subtype relationship for call_indirect params (call_indirect (type $sig_anyref) (local.get $local_externref) (i32.const 3)) (call_indirect (type $sig_anyref) (global.get $global_externref) (i32.const 3)) (call_indirect (type $sig_anyref) (ref.null extern) (i32.const 3)) (call_indirect (type $sig_anyref) (local.get $local_funcref) (i32.const 3)) (call_indirect (type $sig_anyref) (global.get $global_funcref) (i32.const 3)) (call_indirect (type $sig_anyref) (ref.null func) (i32.const 3)) (call_indirect (type $sig_anyref) (ref.func $foo) (i32.const 3)) ;; Test block return type (drop (block (result externref) (br_if 0 (local.get $local_externref) (i32.const 1)) ) ) (drop (block (result externref) (br_if 0 (global.get $global_externref) (i32.const 1)) ) ) (drop (block (result externref) (br_if 0 (ref.null extern) (i32.const 1)) ) ) (drop (block (result funcref) (br_if 0 (local.get $local_funcref) (i32.const 1)) ) ) (drop (block (result funcref) (br_if 0 (global.get $global_funcref) (i32.const 1)) ) ) (drop (block (result funcref) (br_if 0 (ref.null func) (i32.const 1)) ) ) (drop (block (result funcref) (br_if 0 (ref.func $foo) (i32.const 1)) ) ) (drop (block (result anyref) (br_if 0 (local.get $local_anyref) (i32.const 1)) ) ) (drop (block (result anyref) (br_if 0 (global.get $global_anyref) (i32.const 1)) ) ) (drop (block (result anyref) (br_if 0 (ref.null any) (i32.const 1)) ) ) ;; Test subtype relationship for block return type (drop (block (result anyref) (br_if 0 (local.get $local_externref) (i32.const 1)) ) ) (drop (block (result anyref) (br_if 0 (local.get $local_funcref) (i32.const 1)) ) ) (drop (block (result anyref) (br_if 0 (ref.null extern) (i32.const 1)) ) ) (drop (block (result anyref) (br_if 0 (ref.null func) (i32.const 1)) ) ) (drop (block (result anyref) (br_if 0 (ref.func $foo) (i32.const 1)) ) ) ;; Test loop return type (drop (loop (result externref) (local.get $local_externref) ) ) (drop (loop (result externref) (global.get $global_externref) ) ) (drop (loop (result externref) (ref.null extern) ) ) (drop (loop (result funcref) (local.get $local_funcref) ) ) (drop (loop (result funcref) (global.get $global_funcref) ) ) (drop (loop (result funcref) (ref.null func) ) ) (drop (loop (result funcref) (ref.func $foo) ) ) (drop (loop (result anyref) (local.get $local_anyref) ) ) (drop (loop (result anyref) (global.get $global_anyref) ) ) (drop (loop (result anyref) (ref.null any) ) ) ;; Test subtype relationship for loop return type (drop (loop (result anyref) (local.get $local_externref) ) ) (drop (loop (result anyref) (global.get $global_externref) ) ) (drop (loop (result anyref) (ref.null extern) ) ) (drop (loop (result anyref) (local.get $local_funcref) ) ) (drop (loop (result anyref) (global.get $global_funcref) ) ) (drop (loop (result anyref) (ref.null func) ) ) (drop (loop (result anyref) (ref.func $foo) ) ) ;; Test if return type (drop (if (result externref) (i32.const 1) (local.get $local_externref) (ref.null extern) ) ) (drop (if (result funcref) (i32.const 1) (local.get $local_funcref) (ref.null func) ) ) (drop (if (result anyref) (i32.const 1) (local.get $local_anyref) (ref.null any) ) ) ;; Test subtype relationship for if return type (drop (if (result anyref) (i32.const 1) (local.get $local_externref) (local.get $local_funcref) ) ) (drop (if (result anyref) (i32.const 1) (ref.null extern) (ref.null func) ) ) (drop (if (result anyref) (i32.const 1) (ref.func $foo) (ref.null extern) ) ) ;; Test try return type (drop (try (result externref) (do (local.get $local_externref) ) (catch $e-i32 (drop (pop i32)) (ref.null extern) ) ) ) (drop (try (result funcref) (do (ref.func $foo) ) (catch $e-i32 (drop (pop i32)) (ref.null func) ) ) ) ;; Test subtype relationship for try return type (drop (try (result anyref) (do (local.get $local_externref) ) (catch $e-i32 (drop (pop i32)) (ref.func $foo) ) ) ) (drop (try (result anyref) (do (ref.func $foo) ) (catch $e-i32 (drop (pop i32)) (local.get $local_externref) ) ) ) ;; Test typed select (drop (select (result externref) (local.get $local_externref) (ref.null extern) (i32.const 1) ) ) (drop (select (result funcref) (local.get $local_funcref) (ref.null func) (i32.const 1) ) ) (drop (select (result i32) (i32.const 0) (i32.const 2) (i32.const 1) ) ) ;; Test subtype relationship for typed select (drop (select (result anyref) (local.get $local_externref) (local.get $local_funcref) (i32.const 1) ) ) (drop (select (result anyref) (local.get $local_funcref) (local.get $local_externref) (i32.const 1) ) ) ;; ref.is_null takes any reference types (drop (ref.is_null (local.get $local_externref))) (drop (ref.is_null (global.get $global_externref))) (drop (ref.is_null (ref.null extern))) (drop (ref.is_null (local.get $local_funcref))) (drop (ref.is_null (global.get $global_funcref))) (drop (ref.is_null (ref.null func))) (drop (ref.is_null (ref.func $foo))) (drop (ref.is_null (local.get $local_anyref))) (drop (ref.is_null (global.get $global_anyref))) (drop (ref.is_null (ref.null any))) ) ;; Test function return type (func $return_externref_local (result externref) (local $local_externref externref) (local.get $local_externref) ) (func $return_externref_global (result externref) (global.get $global_externref) ) (func $return_externref_null (result externref) (ref.null extern) ) (func $return_funcref_local (result funcref) (local $local_funcref funcref) (local.get $local_funcref) ) (func $return_funcref_global (result funcref) (global.get $global_funcref) ) (func $return_funcref_null (result funcref) (ref.null func) ) (func $return_funcref_func (result funcref) (ref.func $foo) ) (func $return_anyref_local (result anyref) (local $local_anyref anyref) (local.get $local_anyref) ) (func $return_anyref_global (result anyref) (global.get $global_anyref) ) (func $return_anyref_null (result anyref) (ref.null any) ) ;; Test subtype relationship in function return type (func $return_anyref2 (result anyref) (local $local_externref externref) (local.get $local_externref) ) (func $return_anyref3 (result anyref) (global.get $global_externref) ) (func $return_anyref4 (result anyref) (ref.null extern) ) (func $return_anyref5 (result anyref) (local $local_funcref funcref) (local.get $local_funcref) ) (func $return_anyref6 (result anyref) (global.get $global_funcref) ) (func $return_anyref7 (result anyref) (ref.null func) ) (func $return_anyref8 (result anyref) (ref.func $foo) ) ;; Test returns (func $returns_externref (result externref) (local $local_externref externref) (return (local.get $local_externref)) (return (global.get $global_externref)) (return (ref.null extern)) ) (func $returns_funcref (result funcref) (local $local_funcref funcref) (return (local.get $local_funcref)) (return (global.get $global_funcref)) (return (ref.func $foo)) (return (ref.null func)) ) (func $returns_anyref (result anyref) (local $local_anyref anyref) (return (local.get $local_anyref)) (return (global.get $global_anyref)) (return (ref.null any)) ) ;; Test subtype relationship in returns (func $returns_anyref2 (result anyref) (local $local_externref externref) (local $local_funcref funcref) (return (local.get $local_externref)) (return (global.get $global_externref)) (return (ref.null extern)) (return (local.get $local_funcref)) (return (global.get $global_funcref)) (return (ref.func $foo)) (return (ref.null func)) ) (func $ref-user (drop ;; an "elem declare func" must be emitted for this ref.func which is not ;; in the table (ref.func $ref-taken-but-not-in-table) ) ) (func $ref-taken-but-not-in-table) ) binaryen-version_108/test/reference-types.wast.from-wast000066400000000000000000000332521423707623100236470ustar00rootroot00000000000000(module (type $none_=>_anyref (func (result anyref))) (type $sig_anyref (func (param anyref))) (type $sig_funcref (func (param funcref))) (type $none_=>_funcref (func (result funcref))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $anyref_=>_funcref (func (param anyref) (result funcref))) (import "env" "import_global" (global $import_global anyref)) (import "env" "import_func" (func $import_func (param anyref) (result funcref))) (global $global_externref (mut anyref) (ref.null any)) (global $global_funcref (mut funcref) (ref.null func)) (global $global_funcref_func (mut funcref) (ref.func $foo)) (global $global_anyref (mut anyref) (ref.null any)) (global $global_anyref2 (mut anyref) (ref.null any)) (global $global_anyref3 (mut anyref) (ref.null func)) (global $global_anyref4 (mut anyref) (ref.func $foo)) (table $0 3 3 funcref) (elem (i32.const 0) $take_externref $take_funcref $take_anyref) (elem declare func $foo $ref-taken-but-not-in-table) (tag $e-i32 (param i32)) (export "export_func" (func $import_func)) (export "export_global" (global $import_global)) (func $take_externref (param $0 anyref) (nop) ) (func $take_funcref (param $0 funcref) (nop) ) (func $take_anyref (param $0 anyref) (nop) ) (func $foo (nop) ) (func $test (local $local_externref anyref) (local $local_funcref funcref) (local $local_anyref anyref) (local.set $local_externref (local.get $local_externref) ) (local.set $local_externref (global.get $global_externref) ) (local.set $local_externref (ref.null any) ) (local.set $local_funcref (local.get $local_funcref) ) (local.set $local_funcref (global.get $global_funcref) ) (local.set $local_funcref (ref.null func) ) (local.set $local_funcref (ref.func $foo) ) (local.set $local_anyref (local.get $local_anyref) ) (local.set $local_anyref (global.get $global_anyref) ) (local.set $local_anyref (ref.null any) ) (local.set $local_anyref (local.get $local_externref) ) (local.set $local_anyref (global.get $global_externref) ) (local.set $local_anyref (ref.null any) ) (local.set $local_anyref (local.get $local_funcref) ) (local.set $local_anyref (global.get $global_funcref) ) (local.set $local_anyref (ref.null func) ) (local.set $local_anyref (ref.func $foo) ) (global.set $global_externref (global.get $global_externref) ) (global.set $global_externref (local.get $local_externref) ) (global.set $global_externref (ref.null any) ) (global.set $global_funcref (global.get $global_funcref) ) (global.set $global_funcref (local.get $local_funcref) ) (global.set $global_funcref (ref.null func) ) (global.set $global_funcref (ref.func $foo) ) (global.set $global_anyref (global.get $global_anyref) ) (global.set $global_anyref (local.get $local_anyref) ) (global.set $global_anyref (ref.null any) ) (global.set $global_anyref (global.get $global_externref) ) (global.set $global_anyref (local.get $local_externref) ) (global.set $global_anyref (ref.null any) ) (global.set $global_anyref (global.get $global_funcref) ) (global.set $global_anyref (local.get $local_funcref) ) (global.set $global_anyref (ref.null func) ) (global.set $global_anyref (ref.func $foo) ) (call $take_externref (local.get $local_externref) ) (call $take_externref (global.get $global_externref) ) (call $take_externref (ref.null any) ) (call $take_funcref (local.get $local_funcref) ) (call $take_funcref (global.get $global_funcref) ) (call $take_funcref (ref.null func) ) (call $take_funcref (ref.func $foo) ) (call $take_anyref (local.get $local_anyref) ) (call $take_anyref (global.get $global_anyref) ) (call $take_anyref (ref.null any) ) (call $take_anyref (local.get $local_externref) ) (call $take_anyref (global.get $global_externref) ) (call $take_anyref (ref.null any) ) (call $take_anyref (local.get $local_funcref) ) (call $take_anyref (global.get $global_funcref) ) (call $take_anyref (ref.null func) ) (call $take_anyref (ref.func $foo) ) (call_indirect $0 (type $sig_anyref) (local.get $local_externref) (i32.const 0) ) (call_indirect $0 (type $sig_anyref) (global.get $global_externref) (i32.const 0) ) (call_indirect $0 (type $sig_anyref) (ref.null any) (i32.const 0) ) (call_indirect $0 (type $sig_funcref) (local.get $local_funcref) (i32.const 1) ) (call_indirect $0 (type $sig_funcref) (global.get $global_funcref) (i32.const 1) ) (call_indirect $0 (type $sig_funcref) (ref.null func) (i32.const 1) ) (call_indirect $0 (type $sig_funcref) (ref.func $foo) (i32.const 1) ) (call_indirect $0 (type $sig_anyref) (local.get $local_anyref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (global.get $global_anyref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (ref.null any) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (local.get $local_externref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (global.get $global_externref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (ref.null any) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (local.get $local_funcref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (global.get $global_funcref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (ref.null func) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (ref.func $foo) (i32.const 3) ) (drop (block $block (result anyref) (br_if $block (local.get $local_externref) (i32.const 1) ) ) ) (drop (block $block0 (result anyref) (br_if $block0 (global.get $global_externref) (i32.const 1) ) ) ) (drop (block $block1 (result anyref) (br_if $block1 (ref.null any) (i32.const 1) ) ) ) (drop (block $block2 (result funcref) (br_if $block2 (local.get $local_funcref) (i32.const 1) ) ) ) (drop (block $block3 (result funcref) (br_if $block3 (global.get $global_funcref) (i32.const 1) ) ) ) (drop (block $block4 (result funcref) (br_if $block4 (ref.null func) (i32.const 1) ) ) ) (drop (block $block5 (result funcref) (br_if $block5 (ref.func $foo) (i32.const 1) ) ) ) (drop (block $block6 (result anyref) (br_if $block6 (local.get $local_anyref) (i32.const 1) ) ) ) (drop (block $block7 (result anyref) (br_if $block7 (global.get $global_anyref) (i32.const 1) ) ) ) (drop (block $block8 (result anyref) (br_if $block8 (ref.null any) (i32.const 1) ) ) ) (drop (block $block9 (result anyref) (br_if $block9 (local.get $local_externref) (i32.const 1) ) ) ) (drop (block $block10 (result anyref) (br_if $block10 (local.get $local_funcref) (i32.const 1) ) ) ) (drop (block $block11 (result anyref) (br_if $block11 (ref.null any) (i32.const 1) ) ) ) (drop (block $block12 (result anyref) (br_if $block12 (ref.null func) (i32.const 1) ) ) ) (drop (block $block13 (result anyref) (br_if $block13 (ref.func $foo) (i32.const 1) ) ) ) (drop (loop $loop-in (result anyref) (local.get $local_externref) ) ) (drop (loop $loop-in14 (result anyref) (global.get $global_externref) ) ) (drop (loop $loop-in15 (result anyref) (ref.null any) ) ) (drop (loop $loop-in16 (result funcref) (local.get $local_funcref) ) ) (drop (loop $loop-in17 (result funcref) (global.get $global_funcref) ) ) (drop (loop $loop-in18 (result funcref) (ref.null func) ) ) (drop (loop $loop-in19 (result funcref) (ref.func $foo) ) ) (drop (loop $loop-in20 (result anyref) (local.get $local_anyref) ) ) (drop (loop $loop-in21 (result anyref) (global.get $global_anyref) ) ) (drop (loop $loop-in22 (result anyref) (ref.null any) ) ) (drop (loop $loop-in23 (result anyref) (local.get $local_externref) ) ) (drop (loop $loop-in24 (result anyref) (global.get $global_externref) ) ) (drop (loop $loop-in25 (result anyref) (ref.null any) ) ) (drop (loop $loop-in26 (result anyref) (local.get $local_funcref) ) ) (drop (loop $loop-in27 (result anyref) (global.get $global_funcref) ) ) (drop (loop $loop-in28 (result anyref) (ref.null func) ) ) (drop (loop $loop-in29 (result anyref) (ref.func $foo) ) ) (drop (if (result anyref) (i32.const 1) (local.get $local_externref) (ref.null any) ) ) (drop (if (result funcref) (i32.const 1) (local.get $local_funcref) (ref.null func) ) ) (drop (if (result anyref) (i32.const 1) (local.get $local_anyref) (ref.null any) ) ) (drop (if (result anyref) (i32.const 1) (local.get $local_externref) (local.get $local_funcref) ) ) (drop (if (result anyref) (i32.const 1) (ref.null any) (ref.null func) ) ) (drop (if (result anyref) (i32.const 1) (ref.func $foo) (ref.null any) ) ) (drop (try $try (result anyref) (do (local.get $local_externref) ) (catch $e-i32 (drop (pop i32) ) (ref.null any) ) ) ) (drop (try $try35 (result funcref) (do (ref.func $foo) ) (catch $e-i32 (drop (pop i32) ) (ref.null func) ) ) ) (drop (try $try36 (result anyref) (do (local.get $local_externref) ) (catch $e-i32 (drop (pop i32) ) (ref.func $foo) ) ) ) (drop (try $try37 (result anyref) (do (ref.func $foo) ) (catch $e-i32 (drop (pop i32) ) (local.get $local_externref) ) ) ) (drop (select (result anyref) (local.get $local_externref) (ref.null any) (i32.const 1) ) ) (drop (select (result funcref) (local.get $local_funcref) (ref.null func) (i32.const 1) ) ) (drop (select (i32.const 0) (i32.const 2) (i32.const 1) ) ) (drop (select (result anyref) (local.get $local_externref) (local.get $local_funcref) (i32.const 1) ) ) (drop (select (result anyref) (local.get $local_funcref) (local.get $local_externref) (i32.const 1) ) ) (drop (ref.is_null (local.get $local_externref) ) ) (drop (ref.is_null (global.get $global_externref) ) ) (drop (ref.is_null (ref.null any) ) ) (drop (ref.is_null (local.get $local_funcref) ) ) (drop (ref.is_null (global.get $global_funcref) ) ) (drop (ref.is_null (ref.null func) ) ) (drop (ref.is_null (ref.func $foo) ) ) (drop (ref.is_null (local.get $local_anyref) ) ) (drop (ref.is_null (global.get $global_anyref) ) ) (drop (ref.is_null (ref.null any) ) ) ) (func $return_externref_local (result anyref) (local $local_externref anyref) (local.get $local_externref) ) (func $return_externref_global (result anyref) (global.get $global_externref) ) (func $return_externref_null (result anyref) (ref.null any) ) (func $return_funcref_local (result funcref) (local $local_funcref funcref) (local.get $local_funcref) ) (func $return_funcref_global (result funcref) (global.get $global_funcref) ) (func $return_funcref_null (result funcref) (ref.null func) ) (func $return_funcref_func (result funcref) (ref.func $foo) ) (func $return_anyref_local (result anyref) (local $local_anyref anyref) (local.get $local_anyref) ) (func $return_anyref_global (result anyref) (global.get $global_anyref) ) (func $return_anyref_null (result anyref) (ref.null any) ) (func $return_anyref2 (result anyref) (local $local_externref anyref) (local.get $local_externref) ) (func $return_anyref3 (result anyref) (global.get $global_externref) ) (func $return_anyref4 (result anyref) (ref.null any) ) (func $return_anyref5 (result anyref) (local $local_funcref funcref) (local.get $local_funcref) ) (func $return_anyref6 (result anyref) (global.get $global_funcref) ) (func $return_anyref7 (result anyref) (ref.null func) ) (func $return_anyref8 (result anyref) (ref.func $foo) ) (func $returns_externref (result anyref) (local $local_externref anyref) (return (local.get $local_externref) ) (return (global.get $global_externref) ) (return (ref.null any) ) ) (func $returns_funcref (result funcref) (local $local_funcref funcref) (return (local.get $local_funcref) ) (return (global.get $global_funcref) ) (return (ref.func $foo) ) (return (ref.null func) ) ) (func $returns_anyref (result anyref) (local $local_anyref anyref) (return (local.get $local_anyref) ) (return (global.get $global_anyref) ) (return (ref.null any) ) ) (func $returns_anyref2 (result anyref) (local $local_externref anyref) (local $local_funcref funcref) (return (local.get $local_externref) ) (return (global.get $global_externref) ) (return (ref.null any) ) (return (local.get $local_funcref) ) (return (global.get $global_funcref) ) (return (ref.func $foo) ) (return (ref.null func) ) ) (func $ref-user (drop (ref.func $ref-taken-but-not-in-table) ) ) (func $ref-taken-but-not-in-table (nop) ) ) binaryen-version_108/test/reference-types.wast.fromBinary000066400000000000000000000323251423707623100240400ustar00rootroot00000000000000(module (type $none_=>_anyref (func (result anyref))) (type $sig_anyref (func (param anyref))) (type $sig_funcref (func (param funcref))) (type $none_=>_funcref (func (result funcref))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $anyref_=>_funcref (func (param anyref) (result funcref))) (import "env" "import_global" (global $import_global anyref)) (import "env" "import_func" (func $import_func (param anyref) (result funcref))) (global $global_externref (mut anyref) (ref.null any)) (global $global_funcref (mut funcref) (ref.null func)) (global $global_funcref_func (mut funcref) (ref.func $foo)) (global $global_anyref (mut anyref) (ref.null any)) (global $global_anyref2 (mut anyref) (ref.null any)) (global $global_anyref3 (mut anyref) (ref.null func)) (global $global_anyref4 (mut anyref) (ref.func $foo)) (table $0 3 3 funcref) (elem (i32.const 0) $take_externref $take_funcref $take_anyref) (elem declare func $foo $ref-taken-but-not-in-table) (tag $tag$0 (param i32)) (export "export_func" (func $import_func)) (export "export_global" (global $import_global)) (func $take_externref (param $0 anyref) (nop) ) (func $take_funcref (param $0 funcref) (nop) ) (func $take_anyref (param $0 anyref) (nop) ) (func $foo (nop) ) (func $test (local $local_externref anyref) (local $local_anyref anyref) (local $local_funcref funcref) (local.set $local_externref (local.get $local_externref) ) (local.set $local_externref (global.get $global_externref) ) (local.set $local_externref (ref.null any) ) (local.set $local_funcref (local.get $local_funcref) ) (local.set $local_funcref (global.get $global_funcref) ) (local.set $local_funcref (ref.null func) ) (local.set $local_funcref (ref.func $foo) ) (local.set $local_anyref (local.get $local_anyref) ) (local.set $local_anyref (global.get $global_anyref) ) (local.set $local_anyref (ref.null any) ) (local.set $local_anyref (local.get $local_externref) ) (local.set $local_anyref (global.get $global_externref) ) (local.set $local_anyref (ref.null any) ) (local.set $local_anyref (local.get $local_funcref) ) (local.set $local_anyref (global.get $global_funcref) ) (local.set $local_anyref (ref.null func) ) (local.set $local_anyref (ref.func $foo) ) (global.set $global_externref (global.get $global_externref) ) (global.set $global_externref (local.get $local_externref) ) (global.set $global_externref (ref.null any) ) (global.set $global_funcref (global.get $global_funcref) ) (global.set $global_funcref (local.get $local_funcref) ) (global.set $global_funcref (ref.null func) ) (global.set $global_funcref (ref.func $foo) ) (global.set $global_anyref (global.get $global_anyref) ) (global.set $global_anyref (local.get $local_anyref) ) (global.set $global_anyref (ref.null any) ) (global.set $global_anyref (global.get $global_externref) ) (global.set $global_anyref (local.get $local_externref) ) (global.set $global_anyref (ref.null any) ) (global.set $global_anyref (global.get $global_funcref) ) (global.set $global_anyref (local.get $local_funcref) ) (global.set $global_anyref (ref.null func) ) (global.set $global_anyref (ref.func $foo) ) (call $take_externref (local.get $local_externref) ) (call $take_externref (global.get $global_externref) ) (call $take_externref (ref.null any) ) (call $take_funcref (local.get $local_funcref) ) (call $take_funcref (global.get $global_funcref) ) (call $take_funcref (ref.null func) ) (call $take_funcref (ref.func $foo) ) (call $take_anyref (local.get $local_anyref) ) (call $take_anyref (global.get $global_anyref) ) (call $take_anyref (ref.null any) ) (call $take_anyref (local.get $local_externref) ) (call $take_anyref (global.get $global_externref) ) (call $take_anyref (ref.null any) ) (call $take_anyref (local.get $local_funcref) ) (call $take_anyref (global.get $global_funcref) ) (call $take_anyref (ref.null func) ) (call $take_anyref (ref.func $foo) ) (call_indirect $0 (type $sig_anyref) (local.get $local_externref) (i32.const 0) ) (call_indirect $0 (type $sig_anyref) (global.get $global_externref) (i32.const 0) ) (call_indirect $0 (type $sig_anyref) (ref.null any) (i32.const 0) ) (call_indirect $0 (type $sig_funcref) (local.get $local_funcref) (i32.const 1) ) (call_indirect $0 (type $sig_funcref) (global.get $global_funcref) (i32.const 1) ) (call_indirect $0 (type $sig_funcref) (ref.null func) (i32.const 1) ) (call_indirect $0 (type $sig_funcref) (ref.func $foo) (i32.const 1) ) (call_indirect $0 (type $sig_anyref) (local.get $local_anyref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (global.get $global_anyref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (ref.null any) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (local.get $local_externref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (global.get $global_externref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (ref.null any) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (local.get $local_funcref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (global.get $global_funcref) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (ref.null func) (i32.const 3) ) (call_indirect $0 (type $sig_anyref) (ref.func $foo) (i32.const 3) ) (drop (block $label$1 (result anyref) (br_if $label$1 (local.get $local_externref) (i32.const 1) ) ) ) (drop (block $label$2 (result anyref) (br_if $label$2 (global.get $global_externref) (i32.const 1) ) ) ) (drop (block $label$3 (result anyref) (br_if $label$3 (ref.null any) (i32.const 1) ) ) ) (drop (block $label$4 (result funcref) (br_if $label$4 (local.get $local_funcref) (i32.const 1) ) ) ) (drop (block $label$5 (result funcref) (br_if $label$5 (global.get $global_funcref) (i32.const 1) ) ) ) (drop (block $label$6 (result funcref) (br_if $label$6 (ref.null func) (i32.const 1) ) ) ) (drop (block $label$7 (result funcref) (br_if $label$7 (ref.func $foo) (i32.const 1) ) ) ) (drop (block $label$8 (result anyref) (br_if $label$8 (local.get $local_anyref) (i32.const 1) ) ) ) (drop (block $label$9 (result anyref) (br_if $label$9 (global.get $global_anyref) (i32.const 1) ) ) ) (drop (block $label$10 (result anyref) (br_if $label$10 (ref.null any) (i32.const 1) ) ) ) (drop (block $label$11 (result anyref) (br_if $label$11 (local.get $local_externref) (i32.const 1) ) ) ) (drop (block $label$12 (result anyref) (br_if $label$12 (local.get $local_funcref) (i32.const 1) ) ) ) (drop (block $label$13 (result anyref) (br_if $label$13 (ref.null any) (i32.const 1) ) ) ) (drop (block $label$14 (result anyref) (br_if $label$14 (ref.null func) (i32.const 1) ) ) ) (drop (block $label$15 (result anyref) (br_if $label$15 (ref.func $foo) (i32.const 1) ) ) ) (drop (loop $label$16 (result anyref) (local.get $local_externref) ) ) (drop (loop $label$17 (result anyref) (global.get $global_externref) ) ) (drop (loop $label$18 (result anyref) (ref.null any) ) ) (drop (loop $label$19 (result funcref) (local.get $local_funcref) ) ) (drop (loop $label$20 (result funcref) (global.get $global_funcref) ) ) (drop (loop $label$21 (result funcref) (ref.null func) ) ) (drop (loop $label$22 (result funcref) (ref.func $foo) ) ) (drop (loop $label$23 (result anyref) (local.get $local_anyref) ) ) (drop (loop $label$24 (result anyref) (global.get $global_anyref) ) ) (drop (loop $label$25 (result anyref) (ref.null any) ) ) (drop (loop $label$26 (result anyref) (local.get $local_externref) ) ) (drop (loop $label$27 (result anyref) (global.get $global_externref) ) ) (drop (loop $label$28 (result anyref) (ref.null any) ) ) (drop (loop $label$29 (result anyref) (local.get $local_funcref) ) ) (drop (loop $label$30 (result anyref) (global.get $global_funcref) ) ) (drop (loop $label$31 (result anyref) (ref.null func) ) ) (drop (loop $label$32 (result anyref) (ref.func $foo) ) ) (drop (if (result anyref) (i32.const 1) (local.get $local_externref) (ref.null any) ) ) (drop (if (result funcref) (i32.const 1) (local.get $local_funcref) (ref.null func) ) ) (drop (if (result anyref) (i32.const 1) (local.get $local_anyref) (ref.null any) ) ) (drop (if (result anyref) (i32.const 1) (local.get $local_externref) (local.get $local_funcref) ) ) (drop (if (result anyref) (i32.const 1) (ref.null any) (ref.null func) ) ) (drop (if (result anyref) (i32.const 1) (ref.func $foo) (ref.null any) ) ) (drop (try $label$47 (result anyref) (do (local.get $local_externref) ) (catch $tag$0 (drop (pop i32) ) (ref.null any) ) ) ) (drop (try $label$50 (result funcref) (do (ref.func $foo) ) (catch $tag$0 (drop (pop i32) ) (ref.null func) ) ) ) (drop (try $label$53 (result anyref) (do (local.get $local_externref) ) (catch $tag$0 (drop (pop i32) ) (ref.func $foo) ) ) ) (drop (try $label$56 (result anyref) (do (ref.func $foo) ) (catch $tag$0 (drop (pop i32) ) (local.get $local_externref) ) ) ) (drop (select (result anyref) (local.get $local_externref) (ref.null any) (i32.const 1) ) ) (drop (select (result funcref) (local.get $local_funcref) (ref.null func) (i32.const 1) ) ) (drop (select (i32.const 0) (i32.const 2) (i32.const 1) ) ) (drop (select (result anyref) (local.get $local_externref) (local.get $local_funcref) (i32.const 1) ) ) (drop (select (result anyref) (local.get $local_funcref) (local.get $local_externref) (i32.const 1) ) ) (drop (ref.is_null (local.get $local_externref) ) ) (drop (ref.is_null (global.get $global_externref) ) ) (drop (ref.is_null (ref.null any) ) ) (drop (ref.is_null (local.get $local_funcref) ) ) (drop (ref.is_null (global.get $global_funcref) ) ) (drop (ref.is_null (ref.null func) ) ) (drop (ref.is_null (ref.func $foo) ) ) (drop (ref.is_null (local.get $local_anyref) ) ) (drop (ref.is_null (global.get $global_anyref) ) ) (drop (ref.is_null (ref.null any) ) ) ) (func $return_externref_local (result anyref) (local $local_externref anyref) (local.get $local_externref) ) (func $return_externref_global (result anyref) (global.get $global_externref) ) (func $return_externref_null (result anyref) (ref.null any) ) (func $return_funcref_local (result funcref) (local $local_funcref funcref) (local.get $local_funcref) ) (func $return_funcref_global (result funcref) (global.get $global_funcref) ) (func $return_funcref_null (result funcref) (ref.null func) ) (func $return_funcref_func (result funcref) (ref.func $foo) ) (func $return_anyref_local (result anyref) (local $local_anyref anyref) (local.get $local_anyref) ) (func $return_anyref_global (result anyref) (global.get $global_anyref) ) (func $return_anyref_null (result anyref) (ref.null any) ) (func $return_anyref2 (result anyref) (local $local_externref anyref) (local.get $local_externref) ) (func $return_anyref3 (result anyref) (global.get $global_externref) ) (func $return_anyref4 (result anyref) (ref.null any) ) (func $return_anyref5 (result anyref) (local $local_funcref funcref) (local.get $local_funcref) ) (func $return_anyref6 (result anyref) (global.get $global_funcref) ) (func $return_anyref7 (result anyref) (ref.null func) ) (func $return_anyref8 (result anyref) (ref.func $foo) ) (func $returns_externref (result anyref) (local $local_externref anyref) (return (local.get $local_externref) ) ) (func $returns_funcref (result funcref) (local $local_funcref funcref) (return (local.get $local_funcref) ) ) (func $returns_anyref (result anyref) (local $local_anyref anyref) (return (local.get $local_anyref) ) ) (func $returns_anyref2 (result anyref) (local $local_externref anyref) (local $local_funcref funcref) (return (local.get $local_externref) ) ) (func $ref-user (drop (ref.func $ref-taken-but-not-in-table) ) ) (func $ref-taken-but-not-in-table (nop) ) ) binaryen-version_108/test/reference-types.wast.fromBinary.noDebugInfo000066400000000000000000000262461423707623100262430ustar00rootroot00000000000000(module (type $none_=>_anyref (func (result anyref))) (type $anyref_=>_none (func (param anyref))) (type $funcref_=>_none (func (param funcref))) (type $none_=>_funcref (func (result funcref))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) (type $anyref_=>_funcref (func (param anyref) (result funcref))) (import "env" "import_global" (global $gimport$0 anyref)) (import "env" "import_func" (func $fimport$0 (param anyref) (result funcref))) (global $global$0 (mut anyref) (ref.null any)) (global $global$1 (mut funcref) (ref.null func)) (global $global$2 (mut funcref) (ref.func $3)) (global $global$3 (mut anyref) (ref.null any)) (global $global$4 (mut anyref) (ref.null any)) (global $global$5 (mut anyref) (ref.null func)) (global $global$6 (mut anyref) (ref.func $3)) (table $0 3 3 funcref) (elem (i32.const 0) $0 $1 $2) (elem declare func $27 $3) (tag $tag$0 (param i32)) (export "export_func" (func $fimport$0)) (export "export_global" (global $gimport$0)) (func $0 (param $0 anyref) (nop) ) (func $1 (param $0 funcref) (nop) ) (func $2 (param $0 anyref) (nop) ) (func $3 (nop) ) (func $4 (local $0 anyref) (local $1 anyref) (local $2 funcref) (local.set $0 (local.get $0) ) (local.set $0 (global.get $global$0) ) (local.set $0 (ref.null any) ) (local.set $2 (local.get $2) ) (local.set $2 (global.get $global$1) ) (local.set $2 (ref.null func) ) (local.set $2 (ref.func $3) ) (local.set $1 (local.get $1) ) (local.set $1 (global.get $global$3) ) (local.set $1 (ref.null any) ) (local.set $1 (local.get $0) ) (local.set $1 (global.get $global$0) ) (local.set $1 (ref.null any) ) (local.set $1 (local.get $2) ) (local.set $1 (global.get $global$1) ) (local.set $1 (ref.null func) ) (local.set $1 (ref.func $3) ) (global.set $global$0 (global.get $global$0) ) (global.set $global$0 (local.get $0) ) (global.set $global$0 (ref.null any) ) (global.set $global$1 (global.get $global$1) ) (global.set $global$1 (local.get $2) ) (global.set $global$1 (ref.null func) ) (global.set $global$1 (ref.func $3) ) (global.set $global$3 (global.get $global$3) ) (global.set $global$3 (local.get $1) ) (global.set $global$3 (ref.null any) ) (global.set $global$3 (global.get $global$0) ) (global.set $global$3 (local.get $0) ) (global.set $global$3 (ref.null any) ) (global.set $global$3 (global.get $global$1) ) (global.set $global$3 (local.get $2) ) (global.set $global$3 (ref.null func) ) (global.set $global$3 (ref.func $3) ) (call $0 (local.get $0) ) (call $0 (global.get $global$0) ) (call $0 (ref.null any) ) (call $1 (local.get $2) ) (call $1 (global.get $global$1) ) (call $1 (ref.null func) ) (call $1 (ref.func $3) ) (call $2 (local.get $1) ) (call $2 (global.get $global$3) ) (call $2 (ref.null any) ) (call $2 (local.get $0) ) (call $2 (global.get $global$0) ) (call $2 (ref.null any) ) (call $2 (local.get $2) ) (call $2 (global.get $global$1) ) (call $2 (ref.null func) ) (call $2 (ref.func $3) ) (call_indirect $0 (type $anyref_=>_none) (local.get $0) (i32.const 0) ) (call_indirect $0 (type $anyref_=>_none) (global.get $global$0) (i32.const 0) ) (call_indirect $0 (type $anyref_=>_none) (ref.null any) (i32.const 0) ) (call_indirect $0 (type $funcref_=>_none) (local.get $2) (i32.const 1) ) (call_indirect $0 (type $funcref_=>_none) (global.get $global$1) (i32.const 1) ) (call_indirect $0 (type $funcref_=>_none) (ref.null func) (i32.const 1) ) (call_indirect $0 (type $funcref_=>_none) (ref.func $3) (i32.const 1) ) (call_indirect $0 (type $anyref_=>_none) (local.get $1) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (global.get $global$3) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (ref.null any) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (local.get $0) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (global.get $global$0) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (ref.null any) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (local.get $2) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (global.get $global$1) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (ref.null func) (i32.const 3) ) (call_indirect $0 (type $anyref_=>_none) (ref.func $3) (i32.const 3) ) (drop (block $label$1 (result anyref) (br_if $label$1 (local.get $0) (i32.const 1) ) ) ) (drop (block $label$2 (result anyref) (br_if $label$2 (global.get $global$0) (i32.const 1) ) ) ) (drop (block $label$3 (result anyref) (br_if $label$3 (ref.null any) (i32.const 1) ) ) ) (drop (block $label$4 (result funcref) (br_if $label$4 (local.get $2) (i32.const 1) ) ) ) (drop (block $label$5 (result funcref) (br_if $label$5 (global.get $global$1) (i32.const 1) ) ) ) (drop (block $label$6 (result funcref) (br_if $label$6 (ref.null func) (i32.const 1) ) ) ) (drop (block $label$7 (result funcref) (br_if $label$7 (ref.func $3) (i32.const 1) ) ) ) (drop (block $label$8 (result anyref) (br_if $label$8 (local.get $1) (i32.const 1) ) ) ) (drop (block $label$9 (result anyref) (br_if $label$9 (global.get $global$3) (i32.const 1) ) ) ) (drop (block $label$10 (result anyref) (br_if $label$10 (ref.null any) (i32.const 1) ) ) ) (drop (block $label$11 (result anyref) (br_if $label$11 (local.get $0) (i32.const 1) ) ) ) (drop (block $label$12 (result anyref) (br_if $label$12 (local.get $2) (i32.const 1) ) ) ) (drop (block $label$13 (result anyref) (br_if $label$13 (ref.null any) (i32.const 1) ) ) ) (drop (block $label$14 (result anyref) (br_if $label$14 (ref.null func) (i32.const 1) ) ) ) (drop (block $label$15 (result anyref) (br_if $label$15 (ref.func $3) (i32.const 1) ) ) ) (drop (loop $label$16 (result anyref) (local.get $0) ) ) (drop (loop $label$17 (result anyref) (global.get $global$0) ) ) (drop (loop $label$18 (result anyref) (ref.null any) ) ) (drop (loop $label$19 (result funcref) (local.get $2) ) ) (drop (loop $label$20 (result funcref) (global.get $global$1) ) ) (drop (loop $label$21 (result funcref) (ref.null func) ) ) (drop (loop $label$22 (result funcref) (ref.func $3) ) ) (drop (loop $label$23 (result anyref) (local.get $1) ) ) (drop (loop $label$24 (result anyref) (global.get $global$3) ) ) (drop (loop $label$25 (result anyref) (ref.null any) ) ) (drop (loop $label$26 (result anyref) (local.get $0) ) ) (drop (loop $label$27 (result anyref) (global.get $global$0) ) ) (drop (loop $label$28 (result anyref) (ref.null any) ) ) (drop (loop $label$29 (result anyref) (local.get $2) ) ) (drop (loop $label$30 (result anyref) (global.get $global$1) ) ) (drop (loop $label$31 (result anyref) (ref.null func) ) ) (drop (loop $label$32 (result anyref) (ref.func $3) ) ) (drop (if (result anyref) (i32.const 1) (local.get $0) (ref.null any) ) ) (drop (if (result funcref) (i32.const 1) (local.get $2) (ref.null func) ) ) (drop (if (result anyref) (i32.const 1) (local.get $1) (ref.null any) ) ) (drop (if (result anyref) (i32.const 1) (local.get $0) (local.get $2) ) ) (drop (if (result anyref) (i32.const 1) (ref.null any) (ref.null func) ) ) (drop (if (result anyref) (i32.const 1) (ref.func $3) (ref.null any) ) ) (drop (try $label$47 (result anyref) (do (local.get $0) ) (catch $tag$0 (drop (pop i32) ) (ref.null any) ) ) ) (drop (try $label$50 (result funcref) (do (ref.func $3) ) (catch $tag$0 (drop (pop i32) ) (ref.null func) ) ) ) (drop (try $label$53 (result anyref) (do (local.get $0) ) (catch $tag$0 (drop (pop i32) ) (ref.func $3) ) ) ) (drop (try $label$56 (result anyref) (do (ref.func $3) ) (catch $tag$0 (drop (pop i32) ) (local.get $0) ) ) ) (drop (select (result anyref) (local.get $0) (ref.null any) (i32.const 1) ) ) (drop (select (result funcref) (local.get $2) (ref.null func) (i32.const 1) ) ) (drop (select (i32.const 0) (i32.const 2) (i32.const 1) ) ) (drop (select (result anyref) (local.get $0) (local.get $2) (i32.const 1) ) ) (drop (select (result anyref) (local.get $2) (local.get $0) (i32.const 1) ) ) (drop (ref.is_null (local.get $0) ) ) (drop (ref.is_null (global.get $global$0) ) ) (drop (ref.is_null (ref.null any) ) ) (drop (ref.is_null (local.get $2) ) ) (drop (ref.is_null (global.get $global$1) ) ) (drop (ref.is_null (ref.null func) ) ) (drop (ref.is_null (ref.func $3) ) ) (drop (ref.is_null (local.get $1) ) ) (drop (ref.is_null (global.get $global$3) ) ) (drop (ref.is_null (ref.null any) ) ) ) (func $5 (result anyref) (local $0 anyref) (local.get $0) ) (func $6 (result anyref) (global.get $global$0) ) (func $7 (result anyref) (ref.null any) ) (func $8 (result funcref) (local $0 funcref) (local.get $0) ) (func $9 (result funcref) (global.get $global$1) ) (func $10 (result funcref) (ref.null func) ) (func $11 (result funcref) (ref.func $3) ) (func $12 (result anyref) (local $0 anyref) (local.get $0) ) (func $13 (result anyref) (global.get $global$3) ) (func $14 (result anyref) (ref.null any) ) (func $15 (result anyref) (local $0 anyref) (local.get $0) ) (func $16 (result anyref) (global.get $global$0) ) (func $17 (result anyref) (ref.null any) ) (func $18 (result anyref) (local $0 funcref) (local.get $0) ) (func $19 (result anyref) (global.get $global$1) ) (func $20 (result anyref) (ref.null func) ) (func $21 (result anyref) (ref.func $3) ) (func $22 (result anyref) (local $0 anyref) (return (local.get $0) ) ) (func $23 (result funcref) (local $0 funcref) (return (local.get $0) ) ) (func $24 (result anyref) (local $0 anyref) (return (local.get $0) ) ) (func $25 (result anyref) (local $0 anyref) (local $1 funcref) (return (local.get $0) ) ) (func $26 (drop (ref.func $27) ) ) (func $27 (nop) ) ) binaryen-version_108/test/reg_switch.wast000066400000000000000000000002671423707623100207670ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 0) (func $0 (type $0) (if (i32.const 0) (block $A (br_table $A (i32.const 0) ) ) ) ) ) binaryen-version_108/test/reg_switch.wast.from-wast000066400000000000000000000002171423707623100227000ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 0) (func $0 (if (i32.const 0) (block $A (br_table $A (i32.const 0) ) ) ) ) ) binaryen-version_108/test/reg_switch.wast.fromBinary000066400000000000000000000002341423707623100230700ustar00rootroot00000000000000(module (type $0 (func)) (memory $0 0) (func $0 (if (i32.const 0) (block $label$2 (br_table $label$2 (i32.const 0) ) ) ) ) ) binaryen-version_108/test/reg_switch.wast.fromBinary.noDebugInfo000066400000000000000000000002471423707623100252720ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 0) (func $0 (if (i32.const 0) (block $label$2 (br_table $label$2 (i32.const 0) ) ) ) ) ) binaryen-version_108/test/revision000066400000000000000000000000061423707623100175010ustar00rootroot0000000000000013645 binaryen-version_108/test/segment-overlap.wast000066400000000000000000000002171423707623100217340ustar00rootroot00000000000000(module (memory $0 10) (data (i32.const 100) "\ff\ff\ff\ff\ff\ff\ff\ff") ;; overlaps with the next (data (i32.const 104) "\00\00\00\00") ) binaryen-version_108/test/segment-overlap.wast.from-wast000066400000000000000000000001641423707623100236530ustar00rootroot00000000000000(module (memory $0 10) (data (i32.const 100) "\ff\ff\ff\ff\ff\ff\ff\ff") (data (i32.const 104) "\00\00\00\00") ) binaryen-version_108/test/segment-overlap.wast.fromBinary000066400000000000000000000001651423707623100240450ustar00rootroot00000000000000(module (memory $0 10) (data (i32.const 100) "\ff\ff\ff\ff\ff\ff\ff\ff") (data (i32.const 104) "\00\00\00\00") ) binaryen-version_108/test/segment-overlap.wast.fromBinary.noDebugInfo000066400000000000000000000001651423707623100262430ustar00rootroot00000000000000(module (memory $0 10) (data (i32.const 100) "\ff\ff\ff\ff\ff\ff\ff\ff") (data (i32.const 104) "\00\00\00\00") ) binaryen-version_108/test/signext.wast000066400000000000000000000004471423707623100203120ustar00rootroot00000000000000(module (type $0 (func)) (func $signext (type $0) (local $0 i32) (local $1 i64) (drop (i32.extend8_s (local.get $0))) (drop (i32.extend16_s (local.get $0))) (drop (i64.extend8_s (local.get $1))) (drop (i64.extend16_s (local.get $1))) (drop (i64.extend32_s (local.get $1))) ) ) binaryen-version_108/test/signext.wast.from-wast000066400000000000000000000005421423707623100222240ustar00rootroot00000000000000(module (type $0 (func)) (func $signext (local $0 i32) (local $1 i64) (drop (i32.extend8_s (local.get $0) ) ) (drop (i32.extend16_s (local.get $0) ) ) (drop (i64.extend8_s (local.get $1) ) ) (drop (i64.extend16_s (local.get $1) ) ) (drop (i64.extend32_s (local.get $1) ) ) ) ) binaryen-version_108/test/signext.wast.fromBinary000066400000000000000000000005431423707623100224160ustar00rootroot00000000000000(module (type $0 (func)) (func $signext (local $0 i32) (local $1 i64) (drop (i32.extend8_s (local.get $0) ) ) (drop (i32.extend16_s (local.get $0) ) ) (drop (i64.extend8_s (local.get $1) ) ) (drop (i64.extend16_s (local.get $1) ) ) (drop (i64.extend32_s (local.get $1) ) ) ) ) binaryen-version_108/test/signext.wast.fromBinary.noDebugInfo000066400000000000000000000005501423707623100246120ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $0 (local $0 i32) (local $1 i64) (drop (i32.extend8_s (local.get $0) ) ) (drop (i32.extend16_s (local.get $0) ) ) (drop (i64.extend8_s (local.get $1) ) ) (drop (i64.extend16_s (local.get $1) ) ) (drop (i64.extend32_s (local.get $1) ) ) ) ) binaryen-version_108/test/simd.wast000066400000000000000000000701301423707623100175610ustar00rootroot00000000000000(module (memory 1 1) (func $v128.load (param $0 i32) (result v128) (v128.load offset=0 align=16 (local.get $0) ) ) (func $v128.load8x8_s (param $0 i32) (result v128) (v128.load8x8_s (local.get $0) ) ) (func $v128.load8x8_u (param $0 i32) (result v128) (v128.load8x8_u (local.get $0) ) ) (func $v128.load16x4_s (param $0 i32) (result v128) (v128.load16x4_s (local.get $0) ) ) (func $v128.load16x4_u (param $0 i32) (result v128) (v128.load16x4_u (local.get $0) ) ) (func $v128.load32x2_s (param $0 i32) (result v128) (v128.load32x2_s (local.get $0) ) ) (func $v128.load32x2_u (param $0 i32) (result v128) (v128.load32x2_u (local.get $0) ) ) (func $v128.load8_splat (param $0 i32) (result v128) (v128.load8_splat (local.get $0) ) ) (func $v128.load16_splat (param $0 i32) (result v128) (v128.load16_splat (local.get $0) ) ) (func $v128.load32_splat (param $0 i32) (result v128) (v128.load32_splat (local.get $0) ) ) (func $v128.load64_splat (param $0 i32) (result v128) (v128.load64_splat (local.get $0) ) ) (func $v128.store (param $0 i32) (param $1 v128) (v128.store offset=0 align=16 (local.get $0) (local.get $1) ) ) (func $v128.const.i8x16 (result v128) (v128.const i8x16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) ) (func $v128.const.i16x8 (result v128) (v128.const i16x8 1 2 3 4 5 6 7 8) ) (func $v128.const.i32x4 (result v128) (v128.const i32x4 1 2 3 4) ) (func $v128.const.i64x2 (result v128) (v128.const i64x2 1 2) ) (func $v128.const.f32x4 (result v128) (v128.const f32x4 1.0 2 3 4) ) (func $v128.const.f64x2 (result v128) (v128.const f64x2 1.0 2) ) (func $i8x16.shuffle (param $0 v128) (param $1 v128) (result v128) (i8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31 (local.get $0) (local.get $1) ) ) (func $i8x16.swizzle (param $0 v128) (param $1 v128) (result v128) (i8x16.swizzle (local.get $0) (local.get $1) ) ) (func $i8x16.splat (param $0 i32) (result v128) (i8x16.splat (local.get $0) ) ) (func $i16x8.splat (param $0 i32) (result v128) (i16x8.splat (local.get $0) ) ) (func $f32x4.splat (param $0 f32) (result v128) (f32x4.splat (local.get $0) ) ) (func $f64x2.splat (param $0 f64) (result v128) (f64x2.splat (local.get $0) ) ) (func $i8x16.extract_lane_s (param $0 v128) (result i32) (i8x16.extract_lane_s 0 (local.get $0) ) ) (func $i8x16.extract_lane_u (param $0 v128) (result i32) (i8x16.extract_lane_u 0 (local.get $0) ) ) (func $i8x16.replace_lane (param $0 v128) (param $1 i32) (result v128) (i8x16.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i16x8.extract_lane_s (param $0 v128) (result i32) (i16x8.extract_lane_s 0 (local.get $0) ) ) (func $i16x8.extract_lane_u (param $0 v128) (result i32) (i16x8.extract_lane_u 0 (local.get $0) ) ) (func $i16x8.replace_lane (param $0 v128) (param $1 i32) (result v128) (i16x8.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i32x4.extract_lane (param $0 v128) (result i32) (i32x4.extract_lane 0 (local.get $0) ) ) (func $i32x4.replace_lane (param $0 v128) (param $1 i32) (result v128) (i32x4.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i64x2.extract_lane (param $0 v128) (result i64) (i64x2.extract_lane 0 (local.get $0) ) ) (func $i64x2.replace_lane (param $0 v128) (param $1 i64) (result v128) (i64x2.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $f32x4.extract_lane (param $0 v128) (result f32) (f32x4.extract_lane 0 (local.get $0) ) ) (func $f32x4.replace_lane (param $0 v128) (param $1 f32) (result v128) (f32x4.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $f64x2.extract_lane (param $0 v128) (result f64) (f64x2.extract_lane 0 (local.get $0) ) ) (func $f64x2.replace_lane (param $0 v128) (param $1 f64) (result v128) (f64x2.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i8x16.eq (param $0 v128) (param $1 v128) (result v128) (i8x16.eq (local.get $0) (local.get $1) ) ) (func $i8x16.ne (param $0 v128) (param $1 v128) (result v128) (i8x16.ne (local.get $0) (local.get $1) ) ) (func $i8x16.lt_s (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_s (local.get $0) (local.get $1) ) ) (func $i8x16.lt_u (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_u (local.get $0) (local.get $1) ) ) (func $i8x16.gt_s (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_s (local.get $0) (local.get $1) ) ) (func $i8x16.gt_u (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_u (local.get $0) (local.get $1) ) ) (func $i8x16.le_s (param $0 v128) (param $1 v128) (result v128) (i8x16.le_s (local.get $0) (local.get $1) ) ) (func $i8x16.le_u (param $0 v128) (param $1 v128) (result v128) (i8x16.le_u (local.get $0) (local.get $1) ) ) (func $i8x16.ge_s (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_s (local.get $0) (local.get $1) ) ) (func $i8x16.ge_u (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_u (local.get $0) (local.get $1) ) ) (func $i16x8.eq (param $0 v128) (param $1 v128) (result v128) (i16x8.eq (local.get $0) (local.get $1) ) ) (func $i16x8.ne (param $0 v128) (param $1 v128) (result v128) (i16x8.ne (local.get $0) (local.get $1) ) ) (func $i16x8.lt_s (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_s (local.get $0) (local.get $1) ) ) (func $i16x8.lt_u (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_u (local.get $0) (local.get $1) ) ) (func $i16x8.gt_s (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_s (local.get $0) (local.get $1) ) ) (func $i16x8.gt_u (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_u (local.get $0) (local.get $1) ) ) (func $i16x8.le_s (param $0 v128) (param $1 v128) (result v128) (i16x8.le_s (local.get $0) (local.get $1) ) ) (func $i16x8.le_u (param $0 v128) (param $1 v128) (result v128) (i16x8.le_u (local.get $0) (local.get $1) ) ) (func $i16x8.ge_s (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_s (local.get $0) (local.get $1) ) ) (func $i16x8.ge_u (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_u (local.get $0) (local.get $1) ) ) (func $i32x4.eq (param $0 v128) (param $1 v128) (result v128) (i32x4.eq (local.get $0) (local.get $1) ) ) (func $i32x4.ne (param $0 v128) (param $1 v128) (result v128) (i32x4.ne (local.get $0) (local.get $1) ) ) (func $i32x4.lt_s (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_s (local.get $0) (local.get $1) ) ) (func $i32x4.lt_u (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_u (local.get $0) (local.get $1) ) ) (func $i32x4.gt_s (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_s (local.get $0) (local.get $1) ) ) (func $i32x4.gt_u (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_u (local.get $0) (local.get $1) ) ) (func $i32x4.le_s (param $0 v128) (param $1 v128) (result v128) (i32x4.le_s (local.get $0) (local.get $1) ) ) (func $i32x4.le_u (param $0 v128) (param $1 v128) (result v128) (i32x4.le_u (local.get $0) (local.get $1) ) ) (func $i32x4.ge_s (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_s (local.get $0) (local.get $1) ) ) (func $i32x4.ge_u (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_u (local.get $0) (local.get $1) ) ) (func $f32x4.eq (param $0 v128) (param $1 v128) (result v128) (f32x4.eq (local.get $0) (local.get $1) ) ) (func $f32x4.ne (param $0 v128) (param $1 v128) (result v128) (f32x4.ne (local.get $0) (local.get $1) ) ) (func $f32x4.lt (param $0 v128) (param $1 v128) (result v128) (f32x4.lt (local.get $0) (local.get $1) ) ) (func $f32x4.gt (param $0 v128) (param $1 v128) (result v128) (f32x4.gt (local.get $0) (local.get $1) ) ) (func $f32x4.le (param $0 v128) (param $1 v128) (result v128) (f32x4.le (local.get $0) (local.get $1) ) ) (func $f32x4.ge (param $0 v128) (param $1 v128) (result v128) (f32x4.ge (local.get $0) (local.get $1) ) ) (func $f64x2.eq (param $0 v128) (param $1 v128) (result v128) (f64x2.eq (local.get $0) (local.get $1) ) ) (func $f64x2.ne (param $0 v128) (param $1 v128) (result v128) (f64x2.ne (local.get $0) (local.get $1) ) ) (func $f64x2.lt (param $0 v128) (param $1 v128) (result v128) (f64x2.lt (local.get $0) (local.get $1) ) ) (func $f64x2.gt (param $0 v128) (param $1 v128) (result v128) (f64x2.gt (local.get $0) (local.get $1) ) ) (func $f64x2.le (param $0 v128) (param $1 v128) (result v128) (f64x2.le (local.get $0) (local.get $1) ) ) (func $f64x2.ge (param $0 v128) (param $1 v128) (result v128) (f64x2.ge (local.get $0) (local.get $1) ) ) (func $v128.not (param $0 v128) (result v128) (v128.not (local.get $0) ) ) (func $v128.and (param $0 v128) (param $1 v128) (result v128) (v128.and (local.get $0) (local.get $1) ) ) (func $v128.andnot (param $0 v128) (param $1 v128) (result v128) (v128.andnot (local.get $0) (local.get $1) ) ) (func $v128.or (param $0 v128) (param $1 v128) (result v128) (v128.or (local.get $0) (local.get $1) ) ) (func $v128.xor (param $0 v128) (param $1 v128) (result v128) (v128.xor (local.get $0) (local.get $1) ) ) (func $v128.bitselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (v128.bitselect (local.get $0) (local.get $1) (local.get $2) ) ) (func $v128.any_true (param $0 v128) (result i32) (v128.any_true (local.get $0) ) ) (func $v128.load8_lane (param $0 i32) (param $1 v128) (result v128) (v128.load8_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load16_lane (param $0 i32) (param $1 v128) (result v128) (v128.load16_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load32_lane (param $0 i32) (param $1 v128) (result v128) (v128.load32_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_align (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_offset (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane offset=32 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_align_offset (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane align=1 offset=32 0 (local.get $0) (local.get $1) ) ) (func $v128.store8_lane (param $0 i32) (param $1 v128) (v128.store8_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store16_lane (param $0 i32) (param $1 v128) (v128.store16_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store32_lane (param $0 i32) (param $1 v128) (v128.store32_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane (param $0 i32) (param $1 v128) (v128.store64_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_align (param $0 i32) (param $1 v128) (v128.store64_lane align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_offset (param $0 i32) (param $1 v128) (v128.store64_lane offset=32 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_align_offset (param $0 i32) (param $1 v128) (v128.store64_lane align=1 offset=32 0 (local.get $0) (local.get $1) ) ) (func $v128.load32_zero (param $0 i32) (result v128) (v128.load32_zero (local.get $0) ) ) (func $v128.load64_zero (param $0 i32) (result v128) (v128.load64_zero (local.get $0) ) ) (func $f32x4.demote_f64x2_zero (param $0 v128) (result v128) (f32x4.demote_f64x2_zero (local.get $0) ) ) (func $f64x2.promote_low_f32x4 (param $0 v128) (result v128) (f64x2.promote_low_f32x4 (local.get $0) ) ) (func $i8x16.abs (param $0 v128) (result v128) (i8x16.abs (local.get $0) ) ) (func $i8x16.neg (param $0 v128) (result v128) (i8x16.neg (local.get $0) ) ) (func $i8x16.popcnt (param $0 v128) (result v128) (i8x16.popcnt (local.get $0) ) ) (func $i8x16.all_true (param $0 v128) (result i32) (i8x16.all_true (local.get $0) ) ) (func $i8x16.bitmask (param $0 v128) (result i32) (i8x16.bitmask (local.get $0) ) ) (func $i8x16.narrow_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_s (local.get $0) (local.get $1) ) ) (func $i8x16.narrow_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_u (local.get $0) (local.get $1) ) ) (func $f32x4.ceil (param $0 v128) (result v128) (f32x4.ceil (local.get $0) ) ) (func $f32x4.floor (param $0 v128) (result v128) (f32x4.floor (local.get $0) ) ) (func $f32x4.trunc (param $0 v128) (result v128) (f32x4.trunc (local.get $0) ) ) (func $f32x4.nearest (param $0 v128) (result v128) (f32x4.nearest (local.get $0) ) ) (func $i8x16.shl (param $0 v128) (param $1 i32) (result v128) (i8x16.shl (local.get $0) (local.get $1) ) ) (func $i8x16.shr_s (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_s (local.get $0) (local.get $1) ) ) (func $i8x16.shr_u (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_u (local.get $0) (local.get $1) ) ) (func $i8x16.add (param $0 v128) (param $1 v128) (result v128) (i8x16.add (local.get $0) (local.get $1) ) ) (func $i8x16.add_sat_s (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_s (local.get $0) (local.get $1) ) ) (func $i8x16.add_sat_u (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_u (local.get $0) (local.get $1) ) ) (func $i8x16.sub (param $0 v128) (param $1 v128) (result v128) (i8x16.sub (local.get $0) (local.get $1) ) ) (func $i8x16.sub_sat_s (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_s (local.get $0) (local.get $1) ) ) (func $i8x16.sub_sat_u (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_u (local.get $0) (local.get $1) ) ) (func $f64x2.ceil (param $0 v128) (result v128) (f64x2.ceil (local.get $0) ) ) (func $f64x2.floor (param $0 v128) (result v128) (f64x2.floor (local.get $0) ) ) (func $i8x16.min_s (param $0 v128) (param $1 v128) (result v128) (i8x16.min_s (local.get $0) (local.get $1) ) ) (func $i8x16.min_u (param $0 v128) (param $1 v128) (result v128) (i8x16.min_u (local.get $0) (local.get $1) ) ) (func $i8x16.max_s (param $0 v128) (param $1 v128) (result v128) (i8x16.max_s (local.get $0) (local.get $1) ) ) (func $i8x16.max_u (param $0 v128) (param $1 v128) (result v128) (i8x16.max_u (local.get $0) (local.get $1) ) ) (func $f64x2.trunc (param $0 v128) (result v128) (f64x2.trunc (local.get $0) ) ) (func $i8x16.avgr_u (param $0 v128) (param $1 v128) (result v128) (i8x16.avgr_u (local.get $0) (local.get $1) ) ) (func $i16x8.extadd_pairwise_i8x16_s (param $0 v128) (result v128) (i16x8.extadd_pairwise_i8x16_s (local.get $0) ) ) (func $i16x8.extadd_pairwise_i8x16_u (param $0 v128) (result v128) (i16x8.extadd_pairwise_i8x16_u (local.get $0) ) ) (func $i32x4.extadd_pairwise_i16x8_s (param $0 v128) (result v128) (i32x4.extadd_pairwise_i16x8_s (local.get $0) ) ) (func $i32x4.extadd_pairwise_i16x8_u (param $0 v128) (result v128) (i32x4.extadd_pairwise_i16x8_u (local.get $0) ) ) (func $i16x8.abs (param $0 v128) (result v128) (i16x8.abs (local.get $0) ) ) (func $i16x8.neg (param $0 v128) (result v128) (i16x8.neg (local.get $0) ) ) (func $i16x8.q15mulr_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.q15mulr_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.all_true (param $0 v128) (result i32) (i16x8.all_true (local.get $0) ) ) (func $i16x8.bitmask (param $0 v128) (result i32) (i16x8.bitmask (local.get $0) ) ) (func $i16x8.narrow_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_s (local.get $0) (local.get $1) ) ) (func $i16x8.narrow_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_u (local.get $0) (local.get $1) ) ) (func $i16x8.extend_low_i8x16_s (param $0 v128) (result v128) (i16x8.extend_low_i8x16_s (local.get $0) ) ) (func $i16x8.extend_high_i8x16_s (param $0 v128) (result v128) (i16x8.extend_high_i8x16_s (local.get $0) ) ) (func $i16x8.extend_low_i8x16_u (param $0 v128) (result v128) (i16x8.extend_low_i8x16_u (local.get $0) ) ) (func $i16x8.extend_high_i8x16_u (param $0 v128) (result v128) (i16x8.extend_high_i8x16_u (local.get $0) ) ) (func $i16x8.shl (param $0 v128) (param $1 i32) (result v128) (i16x8.shl (local.get $0) (local.get $1) ) ) (func $i16x8.shr_s (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_s (local.get $0) (local.get $1) ) ) (func $i16x8.shr_u (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_u (local.get $0) (local.get $1) ) ) (func $i16x8.add (param $0 v128) (param $1 v128) (result v128) (i16x8.add (local.get $0) (local.get $1) ) ) (func $i16x8.add_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.add_sat_u (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_u (local.get $0) (local.get $1) ) ) (func $i16x8.sub (param $0 v128) (param $1 v128) (result v128) (i16x8.sub (local.get $0) (local.get $1) ) ) (func $i16x8.sub_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.sub_sat_u (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_u (local.get $0) (local.get $1) ) ) (func $f64x2.nearest (param $0 v128) (result v128) (f64x2.nearest (local.get $0) ) ) (func $i16x8.mul (param $0 v128) (param $1 v128) (result v128) (i16x8.mul (local.get $0) (local.get $1) ) ) (func $i16x8.min_s (param $0 v128) (param $1 v128) (result v128) (i16x8.min_s (local.get $0) (local.get $1) ) ) (func $i16x8.min_u (param $0 v128) (param $1 v128) (result v128) (i16x8.min_u (local.get $0) (local.get $1) ) ) (func $i16x8.max_s (param $0 v128) (param $1 v128) (result v128) (i16x8.max_s (local.get $0) (local.get $1) ) ) (func $i16x8.max_u (param $0 v128) (param $1 v128) (result v128) (i16x8.max_u (local.get $0) (local.get $1) ) ) (func $i16x8.avgr_u (param $0 v128) (param $1 v128) (result v128) (i16x8.avgr_u (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_low_i8x16_s (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_s (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_high_i8x16_s (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_s (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_low_i8x16_u (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_u (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_high_i8x16_u (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_u (local.get $0) (local.get $1) ) ) (func $i32x4.abs (param $0 v128) (result v128) (i32x4.abs (local.get $0) ) ) (func $i32x4.neg (param $0 v128) (result v128) (i32x4.neg (local.get $0) ) ) (func $i32x4.all_true (param $0 v128) (result i32) (i32x4.all_true (local.get $0) ) ) (func $i32x4.bitmask (param $0 v128) (result i32) (i32x4.bitmask (local.get $0) ) ) (func $i32x4.extend_low_i16x8_s (param $0 v128) (result v128) (i32x4.extend_low_i16x8_s (local.get $0) ) ) (func $i32x4.extend_high_i16x8_s (param $0 v128) (result v128) (i32x4.extend_high_i16x8_s (local.get $0) ) ) (func $i32x4.extend_low_i16x8_u (param $0 v128) (result v128) (i32x4.extend_low_i16x8_u (local.get $0) ) ) (func $i32x4.extend_high_i16x8_u (param $0 v128) (result v128) (i32x4.extend_high_i16x8_u (local.get $0) ) ) (func $i32x4.shl (param $0 v128) (param $1 i32) (result v128) (i32x4.shl (local.get $0) (local.get $1) ) ) (func $i32x4.shr_s (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_s (local.get $0) (local.get $1) ) ) (func $i32x4.shr_u (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_u (local.get $0) (local.get $1) ) ) (func $i32x4.add (param $0 v128) (param $1 v128) (result v128) (i32x4.add (local.get $0) (local.get $1) ) ) (func $i32x4.sub (param $0 v128) (param $1 v128) (result v128) (i32x4.sub (local.get $0) (local.get $1) ) ) (func $i32x4.mul (param $0 v128) (param $1 v128) (result v128) (i32x4.mul (local.get $0) (local.get $1) ) ) (func $i32x4.min_s (param $0 v128) (param $1 v128) (result v128) (i32x4.min_s (local.get $0) (local.get $1) ) ) (func $i32x4.min_u (param $0 v128) (param $1 v128) (result v128) (i32x4.min_u (local.get $0) (local.get $1) ) ) (func $i32x4.max_s (param $0 v128) (param $1 v128) (result v128) (i32x4.max_s (local.get $0) (local.get $1) ) ) (func $i32x4.max_u (param $0 v128) (param $1 v128) (result v128) (i32x4.max_u (local.get $0) (local.get $1) ) ) (func $i32x4.dot_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.dot_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_low_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_high_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_low_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_u (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_high_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_u (local.get $0) (local.get $1) ) ) (func $i64x2.abs (param $0 v128) (result v128) (i64x2.abs (local.get $0) ) ) (func $i64x2.neg (param $0 v128) (result v128) (i64x2.neg (local.get $0) ) ) (func $i64x2.all_true (param $0 v128) (result i32) (i64x2.all_true (local.get $0) ) ) (func $i64x2.bitmask (param $0 v128) (result i32) (i64x2.bitmask (local.get $0) ) ) (func $i64x2.extend_low_i32x4_s (param $0 v128) (result v128) (i64x2.extend_low_i32x4_s (local.get $0) ) ) (func $i64x2.extend_high_i32x4_s (param $0 v128) (result v128) (i64x2.extend_high_i32x4_s (local.get $0) ) ) (func $i64x2.extend_low_i32x4_u (param $0 v128) (result v128) (i64x2.extend_low_i32x4_u (local.get $0) ) ) (func $i64x2.extend_high_i32x4_u (param $0 v128) (result v128) (i64x2.extend_high_i32x4_u (local.get $0) ) ) (func $i64x2.shl (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (local.get $0) (local.get $1) ) ) (func $i64x2.shr_s (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (local.get $0) (local.get $1) ) ) (func $i64x2.shr_u (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_u (local.get $0) (local.get $1) ) ) (func $i64x2.add (param $0 v128) (param $1 v128) (result v128) (i64x2.add (local.get $0) (local.get $1) ) ) (func $i64x2.sub (param $0 v128) (param $1 v128) (result v128) (i64x2.sub (local.get $0) (local.get $1) ) ) (func $i64x2.mul (param $0 v128) (param $1 v128) (result v128) (i64x2.mul (local.get $0) (local.get $1) ) ) (func $i64x2.eq (param $0 v128) (param $1 v128) (result v128) (i64x2.eq (local.get $0) (local.get $1) ) ) (func $i64x2.ne (param $0 v128) (param $1 v128) (result v128) (i64x2.ne (local.get $0) (local.get $1) ) ) (func $i64x2.lt_s (param $0 v128) (param $1 v128) (result v128) (i64x2.lt_s (local.get $0) (local.get $1) ) ) (func $i64x2.gt_s (param $0 v128) (param $1 v128) (result v128) (i64x2.gt_s (local.get $0) (local.get $1) ) ) (func $i64x2.le_s (param $0 v128) (param $1 v128) (result v128) (i64x2.le_s (local.get $0) (local.get $1) ) ) (func $i64x2.ge_s (param $0 v128) (param $1 v128) (result v128) (i64x2.ge_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_low_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_high_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_low_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_u (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_high_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_u (local.get $0) (local.get $1) ) ) (func $f32x4.abs (param $0 v128) (result v128) (f32x4.abs (local.get $0) ) ) (func $f32x4.neg (param $0 v128) (result v128) (f32x4.neg (local.get $0) ) ) (func $f32x4.sqrt (param $0 v128) (result v128) (f32x4.sqrt (local.get $0) ) ) (func $f32x4.add (param $0 v128) (param $1 v128) (result v128) (f32x4.add (local.get $0) (local.get $1) ) ) (func $f32x4.sub (param $0 v128) (param $1 v128) (result v128) (f32x4.sub (local.get $0) (local.get $1) ) ) (func $f32x4.mul (param $0 v128) (param $1 v128) (result v128) (f32x4.mul (local.get $0) (local.get $1) ) ) (func $f32x4.div (param $0 v128) (param $1 v128) (result v128) (f32x4.div (local.get $0) (local.get $1) ) ) (func $f32x4.min (param $0 v128) (param $1 v128) (result v128) (f32x4.min (local.get $0) (local.get $1) ) ) (func $f32x4.max (param $0 v128) (param $1 v128) (result v128) (f32x4.max (local.get $0) (local.get $1) ) ) (func $f32x4.pmin (param $0 v128) (param $1 v128) (result v128) (f32x4.pmin (local.get $0) (local.get $1) ) ) (func $f32x4.pmax (param $0 v128) (param $1 v128) (result v128) (f32x4.pmax (local.get $0) (local.get $1) ) ) (func $f64x2.abs (param $0 v128) (result v128) (f64x2.abs (local.get $0) ) ) (func $f64x2.neg (param $0 v128) (result v128) (f64x2.neg (local.get $0) ) ) (func $f64x2.sqrt (param $0 v128) (result v128) (f64x2.sqrt (local.get $0) ) ) (func $f64x2.add (param $0 v128) (param $1 v128) (result v128) (f64x2.add (local.get $0) (local.get $1) ) ) (func $f64x2.sub (param $0 v128) (param $1 v128) (result v128) (f64x2.sub (local.get $0) (local.get $1) ) ) (func $f64x2.mul (param $0 v128) (param $1 v128) (result v128) (f64x2.mul (local.get $0) (local.get $1) ) ) (func $f64x2.div (param $0 v128) (param $1 v128) (result v128) (f64x2.div (local.get $0) (local.get $1) ) ) (func $f64x2.min (param $0 v128) (param $1 v128) (result v128) (f64x2.min (local.get $0) (local.get $1) ) ) (func $f64x2.max (param $0 v128) (param $1 v128) (result v128) (f64x2.max (local.get $0) (local.get $1) ) ) (func $f64x2.pmin (param $0 v128) (param $1 v128) (result v128) (f64x2.pmin (local.get $0) (local.get $1) ) ) (func $f64x2.pmax (param $0 v128) (param $1 v128) (result v128) (f64x2.pmax (local.get $0) (local.get $1) ) ) (func $i32x4.trunc_sat_f32x4_s (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0) ) ) (func $i32x4.trunc_sat_f32x4_u (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_u (local.get $0) ) ) (func $f32x4.convert_i32x4_s (param $0 v128) (result v128) (f32x4.convert_i32x4_s (local.get $0) ) ) (func $f32x4.convert_i32x4_u (param $0 v128) (result v128) (f32x4.convert_i32x4_u (local.get $0) ) ) (func $i32x4.trunc_sat_f64x2_s_zero (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_s_zero (local.get $0) ) ) (func $i32x4.trunc_sat_f64x2_u_zero (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_u_zero (local.get $0) ) ) (func $f64x2.convert_low_i32x4_s (param $0 v128) (result v128) (f64x2.convert_low_i32x4_s (local.get $0) ) ) (func $f64x2.convert_low_i32x4_u (param $0 v128) (result v128) (f64x2.convert_low_i32x4_u (local.get $0) ) ) ) binaryen-version_108/test/simd.wast.from-wast000066400000000000000000000723101423707623100215010ustar00rootroot00000000000000(module (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) (type $v128_=>_v128 (func (param v128) (result v128))) (type $i32_=>_v128 (func (param i32) (result v128))) (type $v128_i32_=>_v128 (func (param v128 i32) (result v128))) (type $v128_=>_i32 (func (param v128) (result i32))) (type $i32_v128_=>_none (func (param i32 v128))) (type $i32_v128_=>_v128 (func (param i32 v128) (result v128))) (type $none_=>_v128 (func (result v128))) (type $f32_=>_v128 (func (param f32) (result v128))) (type $f64_=>_v128 (func (param f64) (result v128))) (type $v128_=>_i64 (func (param v128) (result i64))) (type $v128_i64_=>_v128 (func (param v128 i64) (result v128))) (type $v128_=>_f32 (func (param v128) (result f32))) (type $v128_f32_=>_v128 (func (param v128 f32) (result v128))) (type $v128_=>_f64 (func (param v128) (result f64))) (type $v128_f64_=>_v128 (func (param v128 f64) (result v128))) (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) (memory $0 1 1) (func $v128.load (param $0 i32) (result v128) (v128.load (local.get $0) ) ) (func $v128.load8x8_s (param $0 i32) (result v128) (v128.load8x8_s (local.get $0) ) ) (func $v128.load8x8_u (param $0 i32) (result v128) (v128.load8x8_u (local.get $0) ) ) (func $v128.load16x4_s (param $0 i32) (result v128) (v128.load16x4_s (local.get $0) ) ) (func $v128.load16x4_u (param $0 i32) (result v128) (v128.load16x4_u (local.get $0) ) ) (func $v128.load32x2_s (param $0 i32) (result v128) (v128.load32x2_s (local.get $0) ) ) (func $v128.load32x2_u (param $0 i32) (result v128) (v128.load32x2_u (local.get $0) ) ) (func $v128.load8_splat (param $0 i32) (result v128) (v128.load8_splat (local.get $0) ) ) (func $v128.load16_splat (param $0 i32) (result v128) (v128.load16_splat (local.get $0) ) ) (func $v128.load32_splat (param $0 i32) (result v128) (v128.load32_splat (local.get $0) ) ) (func $v128.load64_splat (param $0 i32) (result v128) (v128.load64_splat (local.get $0) ) ) (func $v128.store (param $0 i32) (param $1 v128) (v128.store (local.get $0) (local.get $1) ) ) (func $v128.const.i8x16 (result v128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (func $v128.const.i16x8 (result v128) (v128.const i32x4 0x00020001 0x00040003 0x00060005 0x00080007) ) (func $v128.const.i32x4 (result v128) (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004) ) (func $v128.const.i64x2 (result v128) (v128.const i32x4 0x00000001 0x00000000 0x00000002 0x00000000) ) (func $v128.const.f32x4 (result v128) (v128.const i32x4 0x3f800000 0x40000000 0x40400000 0x40800000) ) (func $v128.const.f64x2 (result v128) (v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x40000000) ) (func $i8x16.shuffle (param $0 v128) (param $1 v128) (result v128) (i8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31 (local.get $0) (local.get $1) ) ) (func $i8x16.swizzle (param $0 v128) (param $1 v128) (result v128) (i8x16.swizzle (local.get $0) (local.get $1) ) ) (func $i8x16.splat (param $0 i32) (result v128) (i8x16.splat (local.get $0) ) ) (func $i16x8.splat (param $0 i32) (result v128) (i16x8.splat (local.get $0) ) ) (func $f32x4.splat (param $0 f32) (result v128) (f32x4.splat (local.get $0) ) ) (func $f64x2.splat (param $0 f64) (result v128) (f64x2.splat (local.get $0) ) ) (func $i8x16.extract_lane_s (param $0 v128) (result i32) (i8x16.extract_lane_s 0 (local.get $0) ) ) (func $i8x16.extract_lane_u (param $0 v128) (result i32) (i8x16.extract_lane_u 0 (local.get $0) ) ) (func $i8x16.replace_lane (param $0 v128) (param $1 i32) (result v128) (i8x16.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i16x8.extract_lane_s (param $0 v128) (result i32) (i16x8.extract_lane_s 0 (local.get $0) ) ) (func $i16x8.extract_lane_u (param $0 v128) (result i32) (i16x8.extract_lane_u 0 (local.get $0) ) ) (func $i16x8.replace_lane (param $0 v128) (param $1 i32) (result v128) (i16x8.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i32x4.extract_lane (param $0 v128) (result i32) (i32x4.extract_lane 0 (local.get $0) ) ) (func $i32x4.replace_lane (param $0 v128) (param $1 i32) (result v128) (i32x4.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i64x2.extract_lane (param $0 v128) (result i64) (i64x2.extract_lane 0 (local.get $0) ) ) (func $i64x2.replace_lane (param $0 v128) (param $1 i64) (result v128) (i64x2.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $f32x4.extract_lane (param $0 v128) (result f32) (f32x4.extract_lane 0 (local.get $0) ) ) (func $f32x4.replace_lane (param $0 v128) (param $1 f32) (result v128) (f32x4.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $f64x2.extract_lane (param $0 v128) (result f64) (f64x2.extract_lane 0 (local.get $0) ) ) (func $f64x2.replace_lane (param $0 v128) (param $1 f64) (result v128) (f64x2.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i8x16.eq (param $0 v128) (param $1 v128) (result v128) (i8x16.eq (local.get $0) (local.get $1) ) ) (func $i8x16.ne (param $0 v128) (param $1 v128) (result v128) (i8x16.ne (local.get $0) (local.get $1) ) ) (func $i8x16.lt_s (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_s (local.get $0) (local.get $1) ) ) (func $i8x16.lt_u (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_u (local.get $0) (local.get $1) ) ) (func $i8x16.gt_s (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_s (local.get $0) (local.get $1) ) ) (func $i8x16.gt_u (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_u (local.get $0) (local.get $1) ) ) (func $i8x16.le_s (param $0 v128) (param $1 v128) (result v128) (i8x16.le_s (local.get $0) (local.get $1) ) ) (func $i8x16.le_u (param $0 v128) (param $1 v128) (result v128) (i8x16.le_u (local.get $0) (local.get $1) ) ) (func $i8x16.ge_s (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_s (local.get $0) (local.get $1) ) ) (func $i8x16.ge_u (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_u (local.get $0) (local.get $1) ) ) (func $i16x8.eq (param $0 v128) (param $1 v128) (result v128) (i16x8.eq (local.get $0) (local.get $1) ) ) (func $i16x8.ne (param $0 v128) (param $1 v128) (result v128) (i16x8.ne (local.get $0) (local.get $1) ) ) (func $i16x8.lt_s (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_s (local.get $0) (local.get $1) ) ) (func $i16x8.lt_u (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_u (local.get $0) (local.get $1) ) ) (func $i16x8.gt_s (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_s (local.get $0) (local.get $1) ) ) (func $i16x8.gt_u (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_u (local.get $0) (local.get $1) ) ) (func $i16x8.le_s (param $0 v128) (param $1 v128) (result v128) (i16x8.le_s (local.get $0) (local.get $1) ) ) (func $i16x8.le_u (param $0 v128) (param $1 v128) (result v128) (i16x8.le_u (local.get $0) (local.get $1) ) ) (func $i16x8.ge_s (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_s (local.get $0) (local.get $1) ) ) (func $i16x8.ge_u (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_u (local.get $0) (local.get $1) ) ) (func $i32x4.eq (param $0 v128) (param $1 v128) (result v128) (i32x4.eq (local.get $0) (local.get $1) ) ) (func $i32x4.ne (param $0 v128) (param $1 v128) (result v128) (i32x4.ne (local.get $0) (local.get $1) ) ) (func $i32x4.lt_s (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_s (local.get $0) (local.get $1) ) ) (func $i32x4.lt_u (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_u (local.get $0) (local.get $1) ) ) (func $i32x4.gt_s (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_s (local.get $0) (local.get $1) ) ) (func $i32x4.gt_u (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_u (local.get $0) (local.get $1) ) ) (func $i32x4.le_s (param $0 v128) (param $1 v128) (result v128) (i32x4.le_s (local.get $0) (local.get $1) ) ) (func $i32x4.le_u (param $0 v128) (param $1 v128) (result v128) (i32x4.le_u (local.get $0) (local.get $1) ) ) (func $i32x4.ge_s (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_s (local.get $0) (local.get $1) ) ) (func $i32x4.ge_u (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_u (local.get $0) (local.get $1) ) ) (func $f32x4.eq (param $0 v128) (param $1 v128) (result v128) (f32x4.eq (local.get $0) (local.get $1) ) ) (func $f32x4.ne (param $0 v128) (param $1 v128) (result v128) (f32x4.ne (local.get $0) (local.get $1) ) ) (func $f32x4.lt (param $0 v128) (param $1 v128) (result v128) (f32x4.lt (local.get $0) (local.get $1) ) ) (func $f32x4.gt (param $0 v128) (param $1 v128) (result v128) (f32x4.gt (local.get $0) (local.get $1) ) ) (func $f32x4.le (param $0 v128) (param $1 v128) (result v128) (f32x4.le (local.get $0) (local.get $1) ) ) (func $f32x4.ge (param $0 v128) (param $1 v128) (result v128) (f32x4.ge (local.get $0) (local.get $1) ) ) (func $f64x2.eq (param $0 v128) (param $1 v128) (result v128) (f64x2.eq (local.get $0) (local.get $1) ) ) (func $f64x2.ne (param $0 v128) (param $1 v128) (result v128) (f64x2.ne (local.get $0) (local.get $1) ) ) (func $f64x2.lt (param $0 v128) (param $1 v128) (result v128) (f64x2.lt (local.get $0) (local.get $1) ) ) (func $f64x2.gt (param $0 v128) (param $1 v128) (result v128) (f64x2.gt (local.get $0) (local.get $1) ) ) (func $f64x2.le (param $0 v128) (param $1 v128) (result v128) (f64x2.le (local.get $0) (local.get $1) ) ) (func $f64x2.ge (param $0 v128) (param $1 v128) (result v128) (f64x2.ge (local.get $0) (local.get $1) ) ) (func $v128.not (param $0 v128) (result v128) (v128.not (local.get $0) ) ) (func $v128.and (param $0 v128) (param $1 v128) (result v128) (v128.and (local.get $0) (local.get $1) ) ) (func $v128.andnot (param $0 v128) (param $1 v128) (result v128) (v128.andnot (local.get $0) (local.get $1) ) ) (func $v128.or (param $0 v128) (param $1 v128) (result v128) (v128.or (local.get $0) (local.get $1) ) ) (func $v128.xor (param $0 v128) (param $1 v128) (result v128) (v128.xor (local.get $0) (local.get $1) ) ) (func $v128.bitselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (v128.bitselect (local.get $0) (local.get $1) (local.get $2) ) ) (func $v128.any_true (param $0 v128) (result i32) (v128.any_true (local.get $0) ) ) (func $v128.load8_lane (param $0 i32) (param $1 v128) (result v128) (v128.load8_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load16_lane (param $0 i32) (param $1 v128) (result v128) (v128.load16_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load32_lane (param $0 i32) (param $1 v128) (result v128) (v128.load32_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_align (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_offset (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane offset=32 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_align_offset (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane offset=32 align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.store8_lane (param $0 i32) (param $1 v128) (v128.store8_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store16_lane (param $0 i32) (param $1 v128) (v128.store16_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store32_lane (param $0 i32) (param $1 v128) (v128.store32_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane (param $0 i32) (param $1 v128) (v128.store64_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_align (param $0 i32) (param $1 v128) (v128.store64_lane align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_offset (param $0 i32) (param $1 v128) (v128.store64_lane offset=32 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_align_offset (param $0 i32) (param $1 v128) (v128.store64_lane offset=32 align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.load32_zero (param $0 i32) (result v128) (v128.load32_zero (local.get $0) ) ) (func $v128.load64_zero (param $0 i32) (result v128) (v128.load64_zero (local.get $0) ) ) (func $f32x4.demote_f64x2_zero (param $0 v128) (result v128) (f32x4.demote_f64x2_zero (local.get $0) ) ) (func $f64x2.promote_low_f32x4 (param $0 v128) (result v128) (f64x2.promote_low_f32x4 (local.get $0) ) ) (func $i8x16.abs (param $0 v128) (result v128) (i8x16.abs (local.get $0) ) ) (func $i8x16.neg (param $0 v128) (result v128) (i8x16.neg (local.get $0) ) ) (func $i8x16.popcnt (param $0 v128) (result v128) (i8x16.popcnt (local.get $0) ) ) (func $i8x16.all_true (param $0 v128) (result i32) (i8x16.all_true (local.get $0) ) ) (func $i8x16.bitmask (param $0 v128) (result i32) (i8x16.bitmask (local.get $0) ) ) (func $i8x16.narrow_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_s (local.get $0) (local.get $1) ) ) (func $i8x16.narrow_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_u (local.get $0) (local.get $1) ) ) (func $f32x4.ceil (param $0 v128) (result v128) (f32x4.ceil (local.get $0) ) ) (func $f32x4.floor (param $0 v128) (result v128) (f32x4.floor (local.get $0) ) ) (func $f32x4.trunc (param $0 v128) (result v128) (f32x4.trunc (local.get $0) ) ) (func $f32x4.nearest (param $0 v128) (result v128) (f32x4.nearest (local.get $0) ) ) (func $i8x16.shl (param $0 v128) (param $1 i32) (result v128) (i8x16.shl (local.get $0) (local.get $1) ) ) (func $i8x16.shr_s (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_s (local.get $0) (local.get $1) ) ) (func $i8x16.shr_u (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_u (local.get $0) (local.get $1) ) ) (func $i8x16.add (param $0 v128) (param $1 v128) (result v128) (i8x16.add (local.get $0) (local.get $1) ) ) (func $i8x16.add_sat_s (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_s (local.get $0) (local.get $1) ) ) (func $i8x16.add_sat_u (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_u (local.get $0) (local.get $1) ) ) (func $i8x16.sub (param $0 v128) (param $1 v128) (result v128) (i8x16.sub (local.get $0) (local.get $1) ) ) (func $i8x16.sub_sat_s (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_s (local.get $0) (local.get $1) ) ) (func $i8x16.sub_sat_u (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_u (local.get $0) (local.get $1) ) ) (func $f64x2.ceil (param $0 v128) (result v128) (f64x2.ceil (local.get $0) ) ) (func $f64x2.floor (param $0 v128) (result v128) (f64x2.floor (local.get $0) ) ) (func $i8x16.min_s (param $0 v128) (param $1 v128) (result v128) (i8x16.min_s (local.get $0) (local.get $1) ) ) (func $i8x16.min_u (param $0 v128) (param $1 v128) (result v128) (i8x16.min_u (local.get $0) (local.get $1) ) ) (func $i8x16.max_s (param $0 v128) (param $1 v128) (result v128) (i8x16.max_s (local.get $0) (local.get $1) ) ) (func $i8x16.max_u (param $0 v128) (param $1 v128) (result v128) (i8x16.max_u (local.get $0) (local.get $1) ) ) (func $f64x2.trunc (param $0 v128) (result v128) (f64x2.trunc (local.get $0) ) ) (func $i8x16.avgr_u (param $0 v128) (param $1 v128) (result v128) (i8x16.avgr_u (local.get $0) (local.get $1) ) ) (func $i16x8.extadd_pairwise_i8x16_s (param $0 v128) (result v128) (i16x8.extadd_pairwise_i8x16_s (local.get $0) ) ) (func $i16x8.extadd_pairwise_i8x16_u (param $0 v128) (result v128) (i16x8.extadd_pairwise_i8x16_u (local.get $0) ) ) (func $i32x4.extadd_pairwise_i16x8_s (param $0 v128) (result v128) (i32x4.extadd_pairwise_i16x8_s (local.get $0) ) ) (func $i32x4.extadd_pairwise_i16x8_u (param $0 v128) (result v128) (i32x4.extadd_pairwise_i16x8_u (local.get $0) ) ) (func $i16x8.abs (param $0 v128) (result v128) (i16x8.abs (local.get $0) ) ) (func $i16x8.neg (param $0 v128) (result v128) (i16x8.neg (local.get $0) ) ) (func $i16x8.q15mulr_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.q15mulr_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.all_true (param $0 v128) (result i32) (i16x8.all_true (local.get $0) ) ) (func $i16x8.bitmask (param $0 v128) (result i32) (i16x8.bitmask (local.get $0) ) ) (func $i16x8.narrow_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_s (local.get $0) (local.get $1) ) ) (func $i16x8.narrow_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_u (local.get $0) (local.get $1) ) ) (func $i16x8.extend_low_i8x16_s (param $0 v128) (result v128) (i16x8.extend_low_i8x16_s (local.get $0) ) ) (func $i16x8.extend_high_i8x16_s (param $0 v128) (result v128) (i16x8.extend_high_i8x16_s (local.get $0) ) ) (func $i16x8.extend_low_i8x16_u (param $0 v128) (result v128) (i16x8.extend_low_i8x16_u (local.get $0) ) ) (func $i16x8.extend_high_i8x16_u (param $0 v128) (result v128) (i16x8.extend_high_i8x16_u (local.get $0) ) ) (func $i16x8.shl (param $0 v128) (param $1 i32) (result v128) (i16x8.shl (local.get $0) (local.get $1) ) ) (func $i16x8.shr_s (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_s (local.get $0) (local.get $1) ) ) (func $i16x8.shr_u (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_u (local.get $0) (local.get $1) ) ) (func $i16x8.add (param $0 v128) (param $1 v128) (result v128) (i16x8.add (local.get $0) (local.get $1) ) ) (func $i16x8.add_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.add_sat_u (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_u (local.get $0) (local.get $1) ) ) (func $i16x8.sub (param $0 v128) (param $1 v128) (result v128) (i16x8.sub (local.get $0) (local.get $1) ) ) (func $i16x8.sub_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.sub_sat_u (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_u (local.get $0) (local.get $1) ) ) (func $f64x2.nearest (param $0 v128) (result v128) (f64x2.nearest (local.get $0) ) ) (func $i16x8.mul (param $0 v128) (param $1 v128) (result v128) (i16x8.mul (local.get $0) (local.get $1) ) ) (func $i16x8.min_s (param $0 v128) (param $1 v128) (result v128) (i16x8.min_s (local.get $0) (local.get $1) ) ) (func $i16x8.min_u (param $0 v128) (param $1 v128) (result v128) (i16x8.min_u (local.get $0) (local.get $1) ) ) (func $i16x8.max_s (param $0 v128) (param $1 v128) (result v128) (i16x8.max_s (local.get $0) (local.get $1) ) ) (func $i16x8.max_u (param $0 v128) (param $1 v128) (result v128) (i16x8.max_u (local.get $0) (local.get $1) ) ) (func $i16x8.avgr_u (param $0 v128) (param $1 v128) (result v128) (i16x8.avgr_u (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_low_i8x16_s (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_s (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_high_i8x16_s (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_s (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_low_i8x16_u (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_u (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_high_i8x16_u (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_u (local.get $0) (local.get $1) ) ) (func $i32x4.abs (param $0 v128) (result v128) (i32x4.abs (local.get $0) ) ) (func $i32x4.neg (param $0 v128) (result v128) (i32x4.neg (local.get $0) ) ) (func $i32x4.all_true (param $0 v128) (result i32) (i32x4.all_true (local.get $0) ) ) (func $i32x4.bitmask (param $0 v128) (result i32) (i32x4.bitmask (local.get $0) ) ) (func $i32x4.extend_low_i16x8_s (param $0 v128) (result v128) (i32x4.extend_low_i16x8_s (local.get $0) ) ) (func $i32x4.extend_high_i16x8_s (param $0 v128) (result v128) (i32x4.extend_high_i16x8_s (local.get $0) ) ) (func $i32x4.extend_low_i16x8_u (param $0 v128) (result v128) (i32x4.extend_low_i16x8_u (local.get $0) ) ) (func $i32x4.extend_high_i16x8_u (param $0 v128) (result v128) (i32x4.extend_high_i16x8_u (local.get $0) ) ) (func $i32x4.shl (param $0 v128) (param $1 i32) (result v128) (i32x4.shl (local.get $0) (local.get $1) ) ) (func $i32x4.shr_s (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_s (local.get $0) (local.get $1) ) ) (func $i32x4.shr_u (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_u (local.get $0) (local.get $1) ) ) (func $i32x4.add (param $0 v128) (param $1 v128) (result v128) (i32x4.add (local.get $0) (local.get $1) ) ) (func $i32x4.sub (param $0 v128) (param $1 v128) (result v128) (i32x4.sub (local.get $0) (local.get $1) ) ) (func $i32x4.mul (param $0 v128) (param $1 v128) (result v128) (i32x4.mul (local.get $0) (local.get $1) ) ) (func $i32x4.min_s (param $0 v128) (param $1 v128) (result v128) (i32x4.min_s (local.get $0) (local.get $1) ) ) (func $i32x4.min_u (param $0 v128) (param $1 v128) (result v128) (i32x4.min_u (local.get $0) (local.get $1) ) ) (func $i32x4.max_s (param $0 v128) (param $1 v128) (result v128) (i32x4.max_s (local.get $0) (local.get $1) ) ) (func $i32x4.max_u (param $0 v128) (param $1 v128) (result v128) (i32x4.max_u (local.get $0) (local.get $1) ) ) (func $i32x4.dot_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.dot_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_low_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_high_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_low_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_u (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_high_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_u (local.get $0) (local.get $1) ) ) (func $i64x2.abs (param $0 v128) (result v128) (i64x2.abs (local.get $0) ) ) (func $i64x2.neg (param $0 v128) (result v128) (i64x2.neg (local.get $0) ) ) (func $i64x2.all_true (param $0 v128) (result i32) (i64x2.all_true (local.get $0) ) ) (func $i64x2.bitmask (param $0 v128) (result i32) (i64x2.bitmask (local.get $0) ) ) (func $i64x2.extend_low_i32x4_s (param $0 v128) (result v128) (i64x2.extend_low_i32x4_s (local.get $0) ) ) (func $i64x2.extend_high_i32x4_s (param $0 v128) (result v128) (i64x2.extend_high_i32x4_s (local.get $0) ) ) (func $i64x2.extend_low_i32x4_u (param $0 v128) (result v128) (i64x2.extend_low_i32x4_u (local.get $0) ) ) (func $i64x2.extend_high_i32x4_u (param $0 v128) (result v128) (i64x2.extend_high_i32x4_u (local.get $0) ) ) (func $i64x2.shl (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (local.get $0) (local.get $1) ) ) (func $i64x2.shr_s (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (local.get $0) (local.get $1) ) ) (func $i64x2.shr_u (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_u (local.get $0) (local.get $1) ) ) (func $i64x2.add (param $0 v128) (param $1 v128) (result v128) (i64x2.add (local.get $0) (local.get $1) ) ) (func $i64x2.sub (param $0 v128) (param $1 v128) (result v128) (i64x2.sub (local.get $0) (local.get $1) ) ) (func $i64x2.mul (param $0 v128) (param $1 v128) (result v128) (i64x2.mul (local.get $0) (local.get $1) ) ) (func $i64x2.eq (param $0 v128) (param $1 v128) (result v128) (i64x2.eq (local.get $0) (local.get $1) ) ) (func $i64x2.ne (param $0 v128) (param $1 v128) (result v128) (i64x2.ne (local.get $0) (local.get $1) ) ) (func $i64x2.lt_s (param $0 v128) (param $1 v128) (result v128) (i64x2.lt_s (local.get $0) (local.get $1) ) ) (func $i64x2.gt_s (param $0 v128) (param $1 v128) (result v128) (i64x2.gt_s (local.get $0) (local.get $1) ) ) (func $i64x2.le_s (param $0 v128) (param $1 v128) (result v128) (i64x2.le_s (local.get $0) (local.get $1) ) ) (func $i64x2.ge_s (param $0 v128) (param $1 v128) (result v128) (i64x2.ge_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_low_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_high_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_low_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_u (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_high_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_u (local.get $0) (local.get $1) ) ) (func $f32x4.abs (param $0 v128) (result v128) (f32x4.abs (local.get $0) ) ) (func $f32x4.neg (param $0 v128) (result v128) (f32x4.neg (local.get $0) ) ) (func $f32x4.sqrt (param $0 v128) (result v128) (f32x4.sqrt (local.get $0) ) ) (func $f32x4.add (param $0 v128) (param $1 v128) (result v128) (f32x4.add (local.get $0) (local.get $1) ) ) (func $f32x4.sub (param $0 v128) (param $1 v128) (result v128) (f32x4.sub (local.get $0) (local.get $1) ) ) (func $f32x4.mul (param $0 v128) (param $1 v128) (result v128) (f32x4.mul (local.get $0) (local.get $1) ) ) (func $f32x4.div (param $0 v128) (param $1 v128) (result v128) (f32x4.div (local.get $0) (local.get $1) ) ) (func $f32x4.min (param $0 v128) (param $1 v128) (result v128) (f32x4.min (local.get $0) (local.get $1) ) ) (func $f32x4.max (param $0 v128) (param $1 v128) (result v128) (f32x4.max (local.get $0) (local.get $1) ) ) (func $f32x4.pmin (param $0 v128) (param $1 v128) (result v128) (f32x4.pmin (local.get $0) (local.get $1) ) ) (func $f32x4.pmax (param $0 v128) (param $1 v128) (result v128) (f32x4.pmax (local.get $0) (local.get $1) ) ) (func $f64x2.abs (param $0 v128) (result v128) (f64x2.abs (local.get $0) ) ) (func $f64x2.neg (param $0 v128) (result v128) (f64x2.neg (local.get $0) ) ) (func $f64x2.sqrt (param $0 v128) (result v128) (f64x2.sqrt (local.get $0) ) ) (func $f64x2.add (param $0 v128) (param $1 v128) (result v128) (f64x2.add (local.get $0) (local.get $1) ) ) (func $f64x2.sub (param $0 v128) (param $1 v128) (result v128) (f64x2.sub (local.get $0) (local.get $1) ) ) (func $f64x2.mul (param $0 v128) (param $1 v128) (result v128) (f64x2.mul (local.get $0) (local.get $1) ) ) (func $f64x2.div (param $0 v128) (param $1 v128) (result v128) (f64x2.div (local.get $0) (local.get $1) ) ) (func $f64x2.min (param $0 v128) (param $1 v128) (result v128) (f64x2.min (local.get $0) (local.get $1) ) ) (func $f64x2.max (param $0 v128) (param $1 v128) (result v128) (f64x2.max (local.get $0) (local.get $1) ) ) (func $f64x2.pmin (param $0 v128) (param $1 v128) (result v128) (f64x2.pmin (local.get $0) (local.get $1) ) ) (func $f64x2.pmax (param $0 v128) (param $1 v128) (result v128) (f64x2.pmax (local.get $0) (local.get $1) ) ) (func $i32x4.trunc_sat_f32x4_s (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0) ) ) (func $i32x4.trunc_sat_f32x4_u (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_u (local.get $0) ) ) (func $f32x4.convert_i32x4_s (param $0 v128) (result v128) (f32x4.convert_i32x4_s (local.get $0) ) ) (func $f32x4.convert_i32x4_u (param $0 v128) (result v128) (f32x4.convert_i32x4_u (local.get $0) ) ) (func $i32x4.trunc_sat_f64x2_s_zero (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_s_zero (local.get $0) ) ) (func $i32x4.trunc_sat_f64x2_u_zero (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_u_zero (local.get $0) ) ) (func $f64x2.convert_low_i32x4_s (param $0 v128) (result v128) (f64x2.convert_low_i32x4_s (local.get $0) ) ) (func $f64x2.convert_low_i32x4_u (param $0 v128) (result v128) (f64x2.convert_low_i32x4_u (local.get $0) ) ) ) binaryen-version_108/test/simd.wast.fromBinary000066400000000000000000000723111423707623100216730ustar00rootroot00000000000000(module (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) (type $v128_=>_v128 (func (param v128) (result v128))) (type $i32_=>_v128 (func (param i32) (result v128))) (type $v128_i32_=>_v128 (func (param v128 i32) (result v128))) (type $v128_=>_i32 (func (param v128) (result i32))) (type $i32_v128_=>_none (func (param i32 v128))) (type $i32_v128_=>_v128 (func (param i32 v128) (result v128))) (type $none_=>_v128 (func (result v128))) (type $f32_=>_v128 (func (param f32) (result v128))) (type $f64_=>_v128 (func (param f64) (result v128))) (type $v128_=>_i64 (func (param v128) (result i64))) (type $v128_i64_=>_v128 (func (param v128 i64) (result v128))) (type $v128_=>_f32 (func (param v128) (result f32))) (type $v128_f32_=>_v128 (func (param v128 f32) (result v128))) (type $v128_=>_f64 (func (param v128) (result f64))) (type $v128_f64_=>_v128 (func (param v128 f64) (result v128))) (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) (memory $0 1 1) (func $v128.load (param $0 i32) (result v128) (v128.load (local.get $0) ) ) (func $v128.load8x8_s (param $0 i32) (result v128) (v128.load8x8_s (local.get $0) ) ) (func $v128.load8x8_u (param $0 i32) (result v128) (v128.load8x8_u (local.get $0) ) ) (func $v128.load16x4_s (param $0 i32) (result v128) (v128.load16x4_s (local.get $0) ) ) (func $v128.load16x4_u (param $0 i32) (result v128) (v128.load16x4_u (local.get $0) ) ) (func $v128.load32x2_s (param $0 i32) (result v128) (v128.load32x2_s (local.get $0) ) ) (func $v128.load32x2_u (param $0 i32) (result v128) (v128.load32x2_u (local.get $0) ) ) (func $v128.load8_splat (param $0 i32) (result v128) (v128.load8_splat (local.get $0) ) ) (func $v128.load16_splat (param $0 i32) (result v128) (v128.load16_splat (local.get $0) ) ) (func $v128.load32_splat (param $0 i32) (result v128) (v128.load32_splat (local.get $0) ) ) (func $v128.load64_splat (param $0 i32) (result v128) (v128.load64_splat (local.get $0) ) ) (func $v128.store (param $0 i32) (param $1 v128) (v128.store (local.get $0) (local.get $1) ) ) (func $v128.const.i8x16 (result v128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (func $v128.const.i16x8 (result v128) (v128.const i32x4 0x00020001 0x00040003 0x00060005 0x00080007) ) (func $v128.const.i32x4 (result v128) (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004) ) (func $v128.const.i64x2 (result v128) (v128.const i32x4 0x00000001 0x00000000 0x00000002 0x00000000) ) (func $v128.const.f32x4 (result v128) (v128.const i32x4 0x3f800000 0x40000000 0x40400000 0x40800000) ) (func $v128.const.f64x2 (result v128) (v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x40000000) ) (func $i8x16.shuffle (param $0 v128) (param $1 v128) (result v128) (i8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31 (local.get $0) (local.get $1) ) ) (func $i8x16.swizzle (param $0 v128) (param $1 v128) (result v128) (i8x16.swizzle (local.get $0) (local.get $1) ) ) (func $i8x16.splat (param $0 i32) (result v128) (i8x16.splat (local.get $0) ) ) (func $i16x8.splat (param $0 i32) (result v128) (i16x8.splat (local.get $0) ) ) (func $f32x4.splat (param $0 f32) (result v128) (f32x4.splat (local.get $0) ) ) (func $f64x2.splat (param $0 f64) (result v128) (f64x2.splat (local.get $0) ) ) (func $i8x16.extract_lane_s (param $0 v128) (result i32) (i8x16.extract_lane_s 0 (local.get $0) ) ) (func $i8x16.extract_lane_u (param $0 v128) (result i32) (i8x16.extract_lane_u 0 (local.get $0) ) ) (func $i8x16.replace_lane (param $0 v128) (param $1 i32) (result v128) (i8x16.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i16x8.extract_lane_s (param $0 v128) (result i32) (i16x8.extract_lane_s 0 (local.get $0) ) ) (func $i16x8.extract_lane_u (param $0 v128) (result i32) (i16x8.extract_lane_u 0 (local.get $0) ) ) (func $i16x8.replace_lane (param $0 v128) (param $1 i32) (result v128) (i16x8.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i32x4.extract_lane (param $0 v128) (result i32) (i32x4.extract_lane 0 (local.get $0) ) ) (func $i32x4.replace_lane (param $0 v128) (param $1 i32) (result v128) (i32x4.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i64x2.extract_lane (param $0 v128) (result i64) (i64x2.extract_lane 0 (local.get $0) ) ) (func $i64x2.replace_lane (param $0 v128) (param $1 i64) (result v128) (i64x2.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $f32x4.extract_lane (param $0 v128) (result f32) (f32x4.extract_lane 0 (local.get $0) ) ) (func $f32x4.replace_lane (param $0 v128) (param $1 f32) (result v128) (f32x4.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $f64x2.extract_lane (param $0 v128) (result f64) (f64x2.extract_lane 0 (local.get $0) ) ) (func $f64x2.replace_lane (param $0 v128) (param $1 f64) (result v128) (f64x2.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $i8x16.eq (param $0 v128) (param $1 v128) (result v128) (i8x16.eq (local.get $0) (local.get $1) ) ) (func $i8x16.ne (param $0 v128) (param $1 v128) (result v128) (i8x16.ne (local.get $0) (local.get $1) ) ) (func $i8x16.lt_s (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_s (local.get $0) (local.get $1) ) ) (func $i8x16.lt_u (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_u (local.get $0) (local.get $1) ) ) (func $i8x16.gt_s (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_s (local.get $0) (local.get $1) ) ) (func $i8x16.gt_u (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_u (local.get $0) (local.get $1) ) ) (func $i8x16.le_s (param $0 v128) (param $1 v128) (result v128) (i8x16.le_s (local.get $0) (local.get $1) ) ) (func $i8x16.le_u (param $0 v128) (param $1 v128) (result v128) (i8x16.le_u (local.get $0) (local.get $1) ) ) (func $i8x16.ge_s (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_s (local.get $0) (local.get $1) ) ) (func $i8x16.ge_u (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_u (local.get $0) (local.get $1) ) ) (func $i16x8.eq (param $0 v128) (param $1 v128) (result v128) (i16x8.eq (local.get $0) (local.get $1) ) ) (func $i16x8.ne (param $0 v128) (param $1 v128) (result v128) (i16x8.ne (local.get $0) (local.get $1) ) ) (func $i16x8.lt_s (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_s (local.get $0) (local.get $1) ) ) (func $i16x8.lt_u (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_u (local.get $0) (local.get $1) ) ) (func $i16x8.gt_s (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_s (local.get $0) (local.get $1) ) ) (func $i16x8.gt_u (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_u (local.get $0) (local.get $1) ) ) (func $i16x8.le_s (param $0 v128) (param $1 v128) (result v128) (i16x8.le_s (local.get $0) (local.get $1) ) ) (func $i16x8.le_u (param $0 v128) (param $1 v128) (result v128) (i16x8.le_u (local.get $0) (local.get $1) ) ) (func $i16x8.ge_s (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_s (local.get $0) (local.get $1) ) ) (func $i16x8.ge_u (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_u (local.get $0) (local.get $1) ) ) (func $i32x4.eq (param $0 v128) (param $1 v128) (result v128) (i32x4.eq (local.get $0) (local.get $1) ) ) (func $i32x4.ne (param $0 v128) (param $1 v128) (result v128) (i32x4.ne (local.get $0) (local.get $1) ) ) (func $i32x4.lt_s (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_s (local.get $0) (local.get $1) ) ) (func $i32x4.lt_u (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_u (local.get $0) (local.get $1) ) ) (func $i32x4.gt_s (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_s (local.get $0) (local.get $1) ) ) (func $i32x4.gt_u (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_u (local.get $0) (local.get $1) ) ) (func $i32x4.le_s (param $0 v128) (param $1 v128) (result v128) (i32x4.le_s (local.get $0) (local.get $1) ) ) (func $i32x4.le_u (param $0 v128) (param $1 v128) (result v128) (i32x4.le_u (local.get $0) (local.get $1) ) ) (func $i32x4.ge_s (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_s (local.get $0) (local.get $1) ) ) (func $i32x4.ge_u (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_u (local.get $0) (local.get $1) ) ) (func $f32x4.eq (param $0 v128) (param $1 v128) (result v128) (f32x4.eq (local.get $0) (local.get $1) ) ) (func $f32x4.ne (param $0 v128) (param $1 v128) (result v128) (f32x4.ne (local.get $0) (local.get $1) ) ) (func $f32x4.lt (param $0 v128) (param $1 v128) (result v128) (f32x4.lt (local.get $0) (local.get $1) ) ) (func $f32x4.gt (param $0 v128) (param $1 v128) (result v128) (f32x4.gt (local.get $0) (local.get $1) ) ) (func $f32x4.le (param $0 v128) (param $1 v128) (result v128) (f32x4.le (local.get $0) (local.get $1) ) ) (func $f32x4.ge (param $0 v128) (param $1 v128) (result v128) (f32x4.ge (local.get $0) (local.get $1) ) ) (func $f64x2.eq (param $0 v128) (param $1 v128) (result v128) (f64x2.eq (local.get $0) (local.get $1) ) ) (func $f64x2.ne (param $0 v128) (param $1 v128) (result v128) (f64x2.ne (local.get $0) (local.get $1) ) ) (func $f64x2.lt (param $0 v128) (param $1 v128) (result v128) (f64x2.lt (local.get $0) (local.get $1) ) ) (func $f64x2.gt (param $0 v128) (param $1 v128) (result v128) (f64x2.gt (local.get $0) (local.get $1) ) ) (func $f64x2.le (param $0 v128) (param $1 v128) (result v128) (f64x2.le (local.get $0) (local.get $1) ) ) (func $f64x2.ge (param $0 v128) (param $1 v128) (result v128) (f64x2.ge (local.get $0) (local.get $1) ) ) (func $v128.not (param $0 v128) (result v128) (v128.not (local.get $0) ) ) (func $v128.and (param $0 v128) (param $1 v128) (result v128) (v128.and (local.get $0) (local.get $1) ) ) (func $v128.andnot (param $0 v128) (param $1 v128) (result v128) (v128.andnot (local.get $0) (local.get $1) ) ) (func $v128.or (param $0 v128) (param $1 v128) (result v128) (v128.or (local.get $0) (local.get $1) ) ) (func $v128.xor (param $0 v128) (param $1 v128) (result v128) (v128.xor (local.get $0) (local.get $1) ) ) (func $v128.bitselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (v128.bitselect (local.get $0) (local.get $1) (local.get $2) ) ) (func $v128.any_true (param $0 v128) (result i32) (v128.any_true (local.get $0) ) ) (func $v128.load8_lane (param $0 i32) (param $1 v128) (result v128) (v128.load8_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load16_lane (param $0 i32) (param $1 v128) (result v128) (v128.load16_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load32_lane (param $0 i32) (param $1 v128) (result v128) (v128.load32_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_align (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_offset (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane offset=32 0 (local.get $0) (local.get $1) ) ) (func $v128.load64_lane_align_offset (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane offset=32 align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.store8_lane (param $0 i32) (param $1 v128) (v128.store8_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store16_lane (param $0 i32) (param $1 v128) (v128.store16_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store32_lane (param $0 i32) (param $1 v128) (v128.store32_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane (param $0 i32) (param $1 v128) (v128.store64_lane 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_align (param $0 i32) (param $1 v128) (v128.store64_lane align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_offset (param $0 i32) (param $1 v128) (v128.store64_lane offset=32 0 (local.get $0) (local.get $1) ) ) (func $v128.store64_lane_align_offset (param $0 i32) (param $1 v128) (v128.store64_lane offset=32 align=1 0 (local.get $0) (local.get $1) ) ) (func $v128.load32_zero (param $0 i32) (result v128) (v128.load32_zero (local.get $0) ) ) (func $v128.load64_zero (param $0 i32) (result v128) (v128.load64_zero (local.get $0) ) ) (func $f32x4.demote_f64x2_zero (param $0 v128) (result v128) (f32x4.demote_f64x2_zero (local.get $0) ) ) (func $f64x2.promote_low_f32x4 (param $0 v128) (result v128) (f64x2.promote_low_f32x4 (local.get $0) ) ) (func $i8x16.abs (param $0 v128) (result v128) (i8x16.abs (local.get $0) ) ) (func $i8x16.neg (param $0 v128) (result v128) (i8x16.neg (local.get $0) ) ) (func $i8x16.popcnt (param $0 v128) (result v128) (i8x16.popcnt (local.get $0) ) ) (func $i8x16.all_true (param $0 v128) (result i32) (i8x16.all_true (local.get $0) ) ) (func $i8x16.bitmask (param $0 v128) (result i32) (i8x16.bitmask (local.get $0) ) ) (func $i8x16.narrow_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_s (local.get $0) (local.get $1) ) ) (func $i8x16.narrow_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_u (local.get $0) (local.get $1) ) ) (func $f32x4.ceil (param $0 v128) (result v128) (f32x4.ceil (local.get $0) ) ) (func $f32x4.floor (param $0 v128) (result v128) (f32x4.floor (local.get $0) ) ) (func $f32x4.trunc (param $0 v128) (result v128) (f32x4.trunc (local.get $0) ) ) (func $f32x4.nearest (param $0 v128) (result v128) (f32x4.nearest (local.get $0) ) ) (func $i8x16.shl (param $0 v128) (param $1 i32) (result v128) (i8x16.shl (local.get $0) (local.get $1) ) ) (func $i8x16.shr_s (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_s (local.get $0) (local.get $1) ) ) (func $i8x16.shr_u (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_u (local.get $0) (local.get $1) ) ) (func $i8x16.add (param $0 v128) (param $1 v128) (result v128) (i8x16.add (local.get $0) (local.get $1) ) ) (func $i8x16.add_sat_s (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_s (local.get $0) (local.get $1) ) ) (func $i8x16.add_sat_u (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_u (local.get $0) (local.get $1) ) ) (func $i8x16.sub (param $0 v128) (param $1 v128) (result v128) (i8x16.sub (local.get $0) (local.get $1) ) ) (func $i8x16.sub_sat_s (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_s (local.get $0) (local.get $1) ) ) (func $i8x16.sub_sat_u (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_u (local.get $0) (local.get $1) ) ) (func $f64x2.ceil (param $0 v128) (result v128) (f64x2.ceil (local.get $0) ) ) (func $f64x2.floor (param $0 v128) (result v128) (f64x2.floor (local.get $0) ) ) (func $i8x16.min_s (param $0 v128) (param $1 v128) (result v128) (i8x16.min_s (local.get $0) (local.get $1) ) ) (func $i8x16.min_u (param $0 v128) (param $1 v128) (result v128) (i8x16.min_u (local.get $0) (local.get $1) ) ) (func $i8x16.max_s (param $0 v128) (param $1 v128) (result v128) (i8x16.max_s (local.get $0) (local.get $1) ) ) (func $i8x16.max_u (param $0 v128) (param $1 v128) (result v128) (i8x16.max_u (local.get $0) (local.get $1) ) ) (func $f64x2.trunc (param $0 v128) (result v128) (f64x2.trunc (local.get $0) ) ) (func $i8x16.avgr_u (param $0 v128) (param $1 v128) (result v128) (i8x16.avgr_u (local.get $0) (local.get $1) ) ) (func $i16x8.extadd_pairwise_i8x16_s (param $0 v128) (result v128) (i16x8.extadd_pairwise_i8x16_s (local.get $0) ) ) (func $i16x8.extadd_pairwise_i8x16_u (param $0 v128) (result v128) (i16x8.extadd_pairwise_i8x16_u (local.get $0) ) ) (func $i32x4.extadd_pairwise_i16x8_s (param $0 v128) (result v128) (i32x4.extadd_pairwise_i16x8_s (local.get $0) ) ) (func $i32x4.extadd_pairwise_i16x8_u (param $0 v128) (result v128) (i32x4.extadd_pairwise_i16x8_u (local.get $0) ) ) (func $i16x8.abs (param $0 v128) (result v128) (i16x8.abs (local.get $0) ) ) (func $i16x8.neg (param $0 v128) (result v128) (i16x8.neg (local.get $0) ) ) (func $i16x8.q15mulr_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.q15mulr_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.all_true (param $0 v128) (result i32) (i16x8.all_true (local.get $0) ) ) (func $i16x8.bitmask (param $0 v128) (result i32) (i16x8.bitmask (local.get $0) ) ) (func $i16x8.narrow_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_s (local.get $0) (local.get $1) ) ) (func $i16x8.narrow_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_u (local.get $0) (local.get $1) ) ) (func $i16x8.extend_low_i8x16_s (param $0 v128) (result v128) (i16x8.extend_low_i8x16_s (local.get $0) ) ) (func $i16x8.extend_high_i8x16_s (param $0 v128) (result v128) (i16x8.extend_high_i8x16_s (local.get $0) ) ) (func $i16x8.extend_low_i8x16_u (param $0 v128) (result v128) (i16x8.extend_low_i8x16_u (local.get $0) ) ) (func $i16x8.extend_high_i8x16_u (param $0 v128) (result v128) (i16x8.extend_high_i8x16_u (local.get $0) ) ) (func $i16x8.shl (param $0 v128) (param $1 i32) (result v128) (i16x8.shl (local.get $0) (local.get $1) ) ) (func $i16x8.shr_s (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_s (local.get $0) (local.get $1) ) ) (func $i16x8.shr_u (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_u (local.get $0) (local.get $1) ) ) (func $i16x8.add (param $0 v128) (param $1 v128) (result v128) (i16x8.add (local.get $0) (local.get $1) ) ) (func $i16x8.add_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.add_sat_u (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_u (local.get $0) (local.get $1) ) ) (func $i16x8.sub (param $0 v128) (param $1 v128) (result v128) (i16x8.sub (local.get $0) (local.get $1) ) ) (func $i16x8.sub_sat_s (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_s (local.get $0) (local.get $1) ) ) (func $i16x8.sub_sat_u (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_u (local.get $0) (local.get $1) ) ) (func $f64x2.nearest (param $0 v128) (result v128) (f64x2.nearest (local.get $0) ) ) (func $i16x8.mul (param $0 v128) (param $1 v128) (result v128) (i16x8.mul (local.get $0) (local.get $1) ) ) (func $i16x8.min_s (param $0 v128) (param $1 v128) (result v128) (i16x8.min_s (local.get $0) (local.get $1) ) ) (func $i16x8.min_u (param $0 v128) (param $1 v128) (result v128) (i16x8.min_u (local.get $0) (local.get $1) ) ) (func $i16x8.max_s (param $0 v128) (param $1 v128) (result v128) (i16x8.max_s (local.get $0) (local.get $1) ) ) (func $i16x8.max_u (param $0 v128) (param $1 v128) (result v128) (i16x8.max_u (local.get $0) (local.get $1) ) ) (func $i16x8.avgr_u (param $0 v128) (param $1 v128) (result v128) (i16x8.avgr_u (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_low_i8x16_s (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_s (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_high_i8x16_s (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_s (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_low_i8x16_u (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_u (local.get $0) (local.get $1) ) ) (func $i16x8.extmul_high_i8x16_u (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_u (local.get $0) (local.get $1) ) ) (func $i32x4.abs (param $0 v128) (result v128) (i32x4.abs (local.get $0) ) ) (func $i32x4.neg (param $0 v128) (result v128) (i32x4.neg (local.get $0) ) ) (func $i32x4.all_true (param $0 v128) (result i32) (i32x4.all_true (local.get $0) ) ) (func $i32x4.bitmask (param $0 v128) (result i32) (i32x4.bitmask (local.get $0) ) ) (func $i32x4.extend_low_i16x8_s (param $0 v128) (result v128) (i32x4.extend_low_i16x8_s (local.get $0) ) ) (func $i32x4.extend_high_i16x8_s (param $0 v128) (result v128) (i32x4.extend_high_i16x8_s (local.get $0) ) ) (func $i32x4.extend_low_i16x8_u (param $0 v128) (result v128) (i32x4.extend_low_i16x8_u (local.get $0) ) ) (func $i32x4.extend_high_i16x8_u (param $0 v128) (result v128) (i32x4.extend_high_i16x8_u (local.get $0) ) ) (func $i32x4.shl (param $0 v128) (param $1 i32) (result v128) (i32x4.shl (local.get $0) (local.get $1) ) ) (func $i32x4.shr_s (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_s (local.get $0) (local.get $1) ) ) (func $i32x4.shr_u (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_u (local.get $0) (local.get $1) ) ) (func $i32x4.add (param $0 v128) (param $1 v128) (result v128) (i32x4.add (local.get $0) (local.get $1) ) ) (func $i32x4.sub (param $0 v128) (param $1 v128) (result v128) (i32x4.sub (local.get $0) (local.get $1) ) ) (func $i32x4.mul (param $0 v128) (param $1 v128) (result v128) (i32x4.mul (local.get $0) (local.get $1) ) ) (func $i32x4.min_s (param $0 v128) (param $1 v128) (result v128) (i32x4.min_s (local.get $0) (local.get $1) ) ) (func $i32x4.min_u (param $0 v128) (param $1 v128) (result v128) (i32x4.min_u (local.get $0) (local.get $1) ) ) (func $i32x4.max_s (param $0 v128) (param $1 v128) (result v128) (i32x4.max_s (local.get $0) (local.get $1) ) ) (func $i32x4.max_u (param $0 v128) (param $1 v128) (result v128) (i32x4.max_u (local.get $0) (local.get $1) ) ) (func $i32x4.dot_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.dot_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_low_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_high_i16x8_s (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_s (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_low_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_u (local.get $0) (local.get $1) ) ) (func $i32x4.extmul_high_i16x8_u (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_u (local.get $0) (local.get $1) ) ) (func $i64x2.abs (param $0 v128) (result v128) (i64x2.abs (local.get $0) ) ) (func $i64x2.neg (param $0 v128) (result v128) (i64x2.neg (local.get $0) ) ) (func $i64x2.all_true (param $0 v128) (result i32) (i64x2.all_true (local.get $0) ) ) (func $i64x2.bitmask (param $0 v128) (result i32) (i64x2.bitmask (local.get $0) ) ) (func $i64x2.extend_low_i32x4_s (param $0 v128) (result v128) (i64x2.extend_low_i32x4_s (local.get $0) ) ) (func $i64x2.extend_high_i32x4_s (param $0 v128) (result v128) (i64x2.extend_high_i32x4_s (local.get $0) ) ) (func $i64x2.extend_low_i32x4_u (param $0 v128) (result v128) (i64x2.extend_low_i32x4_u (local.get $0) ) ) (func $i64x2.extend_high_i32x4_u (param $0 v128) (result v128) (i64x2.extend_high_i32x4_u (local.get $0) ) ) (func $i64x2.shl (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (local.get $0) (local.get $1) ) ) (func $i64x2.shr_s (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (local.get $0) (local.get $1) ) ) (func $i64x2.shr_u (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_u (local.get $0) (local.get $1) ) ) (func $i64x2.add (param $0 v128) (param $1 v128) (result v128) (i64x2.add (local.get $0) (local.get $1) ) ) (func $i64x2.sub (param $0 v128) (param $1 v128) (result v128) (i64x2.sub (local.get $0) (local.get $1) ) ) (func $i64x2.mul (param $0 v128) (param $1 v128) (result v128) (i64x2.mul (local.get $0) (local.get $1) ) ) (func $i64x2.eq (param $0 v128) (param $1 v128) (result v128) (i64x2.eq (local.get $0) (local.get $1) ) ) (func $i64x2.ne (param $0 v128) (param $1 v128) (result v128) (i64x2.ne (local.get $0) (local.get $1) ) ) (func $i64x2.lt_s (param $0 v128) (param $1 v128) (result v128) (i64x2.lt_s (local.get $0) (local.get $1) ) ) (func $i64x2.gt_s (param $0 v128) (param $1 v128) (result v128) (i64x2.gt_s (local.get $0) (local.get $1) ) ) (func $i64x2.le_s (param $0 v128) (param $1 v128) (result v128) (i64x2.le_s (local.get $0) (local.get $1) ) ) (func $i64x2.ge_s (param $0 v128) (param $1 v128) (result v128) (i64x2.ge_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_low_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_high_i32x4_s (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_s (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_low_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_u (local.get $0) (local.get $1) ) ) (func $i64x2.extmul_high_i32x4_u (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_u (local.get $0) (local.get $1) ) ) (func $f32x4.abs (param $0 v128) (result v128) (f32x4.abs (local.get $0) ) ) (func $f32x4.neg (param $0 v128) (result v128) (f32x4.neg (local.get $0) ) ) (func $f32x4.sqrt (param $0 v128) (result v128) (f32x4.sqrt (local.get $0) ) ) (func $f32x4.add (param $0 v128) (param $1 v128) (result v128) (f32x4.add (local.get $0) (local.get $1) ) ) (func $f32x4.sub (param $0 v128) (param $1 v128) (result v128) (f32x4.sub (local.get $0) (local.get $1) ) ) (func $f32x4.mul (param $0 v128) (param $1 v128) (result v128) (f32x4.mul (local.get $0) (local.get $1) ) ) (func $f32x4.div (param $0 v128) (param $1 v128) (result v128) (f32x4.div (local.get $0) (local.get $1) ) ) (func $f32x4.min (param $0 v128) (param $1 v128) (result v128) (f32x4.min (local.get $0) (local.get $1) ) ) (func $f32x4.max (param $0 v128) (param $1 v128) (result v128) (f32x4.max (local.get $0) (local.get $1) ) ) (func $f32x4.pmin (param $0 v128) (param $1 v128) (result v128) (f32x4.pmin (local.get $0) (local.get $1) ) ) (func $f32x4.pmax (param $0 v128) (param $1 v128) (result v128) (f32x4.pmax (local.get $0) (local.get $1) ) ) (func $f64x2.abs (param $0 v128) (result v128) (f64x2.abs (local.get $0) ) ) (func $f64x2.neg (param $0 v128) (result v128) (f64x2.neg (local.get $0) ) ) (func $f64x2.sqrt (param $0 v128) (result v128) (f64x2.sqrt (local.get $0) ) ) (func $f64x2.add (param $0 v128) (param $1 v128) (result v128) (f64x2.add (local.get $0) (local.get $1) ) ) (func $f64x2.sub (param $0 v128) (param $1 v128) (result v128) (f64x2.sub (local.get $0) (local.get $1) ) ) (func $f64x2.mul (param $0 v128) (param $1 v128) (result v128) (f64x2.mul (local.get $0) (local.get $1) ) ) (func $f64x2.div (param $0 v128) (param $1 v128) (result v128) (f64x2.div (local.get $0) (local.get $1) ) ) (func $f64x2.min (param $0 v128) (param $1 v128) (result v128) (f64x2.min (local.get $0) (local.get $1) ) ) (func $f64x2.max (param $0 v128) (param $1 v128) (result v128) (f64x2.max (local.get $0) (local.get $1) ) ) (func $f64x2.pmin (param $0 v128) (param $1 v128) (result v128) (f64x2.pmin (local.get $0) (local.get $1) ) ) (func $f64x2.pmax (param $0 v128) (param $1 v128) (result v128) (f64x2.pmax (local.get $0) (local.get $1) ) ) (func $i32x4.trunc_sat_f32x4_s (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0) ) ) (func $i32x4.trunc_sat_f32x4_u (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_u (local.get $0) ) ) (func $f32x4.convert_i32x4_s (param $0 v128) (result v128) (f32x4.convert_i32x4_s (local.get $0) ) ) (func $f32x4.convert_i32x4_u (param $0 v128) (result v128) (f32x4.convert_i32x4_u (local.get $0) ) ) (func $i32x4.trunc_sat_f64x2_s_zero (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_s_zero (local.get $0) ) ) (func $i32x4.trunc_sat_f64x2_u_zero (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_u_zero (local.get $0) ) ) (func $f64x2.convert_low_i32x4_s (param $0 v128) (result v128) (f64x2.convert_low_i32x4_s (local.get $0) ) ) (func $f64x2.convert_low_i32x4_u (param $0 v128) (result v128) (f64x2.convert_low_i32x4_u (local.get $0) ) ) ) binaryen-version_108/test/simd.wast.fromBinary.noDebugInfo000066400000000000000000000646571423707623100241070ustar00rootroot00000000000000(module (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) (type $v128_=>_v128 (func (param v128) (result v128))) (type $i32_=>_v128 (func (param i32) (result v128))) (type $v128_i32_=>_v128 (func (param v128 i32) (result v128))) (type $v128_=>_i32 (func (param v128) (result i32))) (type $i32_v128_=>_none (func (param i32 v128))) (type $i32_v128_=>_v128 (func (param i32 v128) (result v128))) (type $none_=>_v128 (func (result v128))) (type $f32_=>_v128 (func (param f32) (result v128))) (type $f64_=>_v128 (func (param f64) (result v128))) (type $v128_=>_i64 (func (param v128) (result i64))) (type $v128_i64_=>_v128 (func (param v128 i64) (result v128))) (type $v128_=>_f32 (func (param v128) (result f32))) (type $v128_f32_=>_v128 (func (param v128 f32) (result v128))) (type $v128_=>_f64 (func (param v128) (result f64))) (type $v128_f64_=>_v128 (func (param v128 f64) (result v128))) (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) (memory $0 1 1) (func $0 (param $0 i32) (result v128) (v128.load (local.get $0) ) ) (func $1 (param $0 i32) (result v128) (v128.load8x8_s (local.get $0) ) ) (func $2 (param $0 i32) (result v128) (v128.load8x8_u (local.get $0) ) ) (func $3 (param $0 i32) (result v128) (v128.load16x4_s (local.get $0) ) ) (func $4 (param $0 i32) (result v128) (v128.load16x4_u (local.get $0) ) ) (func $5 (param $0 i32) (result v128) (v128.load32x2_s (local.get $0) ) ) (func $6 (param $0 i32) (result v128) (v128.load32x2_u (local.get $0) ) ) (func $7 (param $0 i32) (result v128) (v128.load8_splat (local.get $0) ) ) (func $8 (param $0 i32) (result v128) (v128.load16_splat (local.get $0) ) ) (func $9 (param $0 i32) (result v128) (v128.load32_splat (local.get $0) ) ) (func $10 (param $0 i32) (result v128) (v128.load64_splat (local.get $0) ) ) (func $11 (param $0 i32) (param $1 v128) (v128.store (local.get $0) (local.get $1) ) ) (func $12 (result v128) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (func $13 (result v128) (v128.const i32x4 0x00020001 0x00040003 0x00060005 0x00080007) ) (func $14 (result v128) (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004) ) (func $15 (result v128) (v128.const i32x4 0x00000001 0x00000000 0x00000002 0x00000000) ) (func $16 (result v128) (v128.const i32x4 0x3f800000 0x40000000 0x40400000 0x40800000) ) (func $17 (result v128) (v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x40000000) ) (func $18 (param $0 v128) (param $1 v128) (result v128) (i8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31 (local.get $0) (local.get $1) ) ) (func $19 (param $0 v128) (param $1 v128) (result v128) (i8x16.swizzle (local.get $0) (local.get $1) ) ) (func $20 (param $0 i32) (result v128) (i8x16.splat (local.get $0) ) ) (func $21 (param $0 i32) (result v128) (i16x8.splat (local.get $0) ) ) (func $22 (param $0 f32) (result v128) (f32x4.splat (local.get $0) ) ) (func $23 (param $0 f64) (result v128) (f64x2.splat (local.get $0) ) ) (func $24 (param $0 v128) (result i32) (i8x16.extract_lane_s 0 (local.get $0) ) ) (func $25 (param $0 v128) (result i32) (i8x16.extract_lane_u 0 (local.get $0) ) ) (func $26 (param $0 v128) (param $1 i32) (result v128) (i8x16.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $27 (param $0 v128) (result i32) (i16x8.extract_lane_s 0 (local.get $0) ) ) (func $28 (param $0 v128) (result i32) (i16x8.extract_lane_u 0 (local.get $0) ) ) (func $29 (param $0 v128) (param $1 i32) (result v128) (i16x8.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $30 (param $0 v128) (result i32) (i32x4.extract_lane 0 (local.get $0) ) ) (func $31 (param $0 v128) (param $1 i32) (result v128) (i32x4.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $32 (param $0 v128) (result i64) (i64x2.extract_lane 0 (local.get $0) ) ) (func $33 (param $0 v128) (param $1 i64) (result v128) (i64x2.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $34 (param $0 v128) (result f32) (f32x4.extract_lane 0 (local.get $0) ) ) (func $35 (param $0 v128) (param $1 f32) (result v128) (f32x4.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $36 (param $0 v128) (result f64) (f64x2.extract_lane 0 (local.get $0) ) ) (func $37 (param $0 v128) (param $1 f64) (result v128) (f64x2.replace_lane 0 (local.get $0) (local.get $1) ) ) (func $38 (param $0 v128) (param $1 v128) (result v128) (i8x16.eq (local.get $0) (local.get $1) ) ) (func $39 (param $0 v128) (param $1 v128) (result v128) (i8x16.ne (local.get $0) (local.get $1) ) ) (func $40 (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_s (local.get $0) (local.get $1) ) ) (func $41 (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_u (local.get $0) (local.get $1) ) ) (func $42 (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_s (local.get $0) (local.get $1) ) ) (func $43 (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_u (local.get $0) (local.get $1) ) ) (func $44 (param $0 v128) (param $1 v128) (result v128) (i8x16.le_s (local.get $0) (local.get $1) ) ) (func $45 (param $0 v128) (param $1 v128) (result v128) (i8x16.le_u (local.get $0) (local.get $1) ) ) (func $46 (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_s (local.get $0) (local.get $1) ) ) (func $47 (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_u (local.get $0) (local.get $1) ) ) (func $48 (param $0 v128) (param $1 v128) (result v128) (i16x8.eq (local.get $0) (local.get $1) ) ) (func $49 (param $0 v128) (param $1 v128) (result v128) (i16x8.ne (local.get $0) (local.get $1) ) ) (func $50 (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_s (local.get $0) (local.get $1) ) ) (func $51 (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_u (local.get $0) (local.get $1) ) ) (func $52 (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_s (local.get $0) (local.get $1) ) ) (func $53 (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_u (local.get $0) (local.get $1) ) ) (func $54 (param $0 v128) (param $1 v128) (result v128) (i16x8.le_s (local.get $0) (local.get $1) ) ) (func $55 (param $0 v128) (param $1 v128) (result v128) (i16x8.le_u (local.get $0) (local.get $1) ) ) (func $56 (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_s (local.get $0) (local.get $1) ) ) (func $57 (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_u (local.get $0) (local.get $1) ) ) (func $58 (param $0 v128) (param $1 v128) (result v128) (i32x4.eq (local.get $0) (local.get $1) ) ) (func $59 (param $0 v128) (param $1 v128) (result v128) (i32x4.ne (local.get $0) (local.get $1) ) ) (func $60 (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_s (local.get $0) (local.get $1) ) ) (func $61 (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_u (local.get $0) (local.get $1) ) ) (func $62 (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_s (local.get $0) (local.get $1) ) ) (func $63 (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_u (local.get $0) (local.get $1) ) ) (func $64 (param $0 v128) (param $1 v128) (result v128) (i32x4.le_s (local.get $0) (local.get $1) ) ) (func $65 (param $0 v128) (param $1 v128) (result v128) (i32x4.le_u (local.get $0) (local.get $1) ) ) (func $66 (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_s (local.get $0) (local.get $1) ) ) (func $67 (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_u (local.get $0) (local.get $1) ) ) (func $68 (param $0 v128) (param $1 v128) (result v128) (f32x4.eq (local.get $0) (local.get $1) ) ) (func $69 (param $0 v128) (param $1 v128) (result v128) (f32x4.ne (local.get $0) (local.get $1) ) ) (func $70 (param $0 v128) (param $1 v128) (result v128) (f32x4.lt (local.get $0) (local.get $1) ) ) (func $71 (param $0 v128) (param $1 v128) (result v128) (f32x4.gt (local.get $0) (local.get $1) ) ) (func $72 (param $0 v128) (param $1 v128) (result v128) (f32x4.le (local.get $0) (local.get $1) ) ) (func $73 (param $0 v128) (param $1 v128) (result v128) (f32x4.ge (local.get $0) (local.get $1) ) ) (func $74 (param $0 v128) (param $1 v128) (result v128) (f64x2.eq (local.get $0) (local.get $1) ) ) (func $75 (param $0 v128) (param $1 v128) (result v128) (f64x2.ne (local.get $0) (local.get $1) ) ) (func $76 (param $0 v128) (param $1 v128) (result v128) (f64x2.lt (local.get $0) (local.get $1) ) ) (func $77 (param $0 v128) (param $1 v128) (result v128) (f64x2.gt (local.get $0) (local.get $1) ) ) (func $78 (param $0 v128) (param $1 v128) (result v128) (f64x2.le (local.get $0) (local.get $1) ) ) (func $79 (param $0 v128) (param $1 v128) (result v128) (f64x2.ge (local.get $0) (local.get $1) ) ) (func $80 (param $0 v128) (result v128) (v128.not (local.get $0) ) ) (func $81 (param $0 v128) (param $1 v128) (result v128) (v128.and (local.get $0) (local.get $1) ) ) (func $82 (param $0 v128) (param $1 v128) (result v128) (v128.andnot (local.get $0) (local.get $1) ) ) (func $83 (param $0 v128) (param $1 v128) (result v128) (v128.or (local.get $0) (local.get $1) ) ) (func $84 (param $0 v128) (param $1 v128) (result v128) (v128.xor (local.get $0) (local.get $1) ) ) (func $85 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (v128.bitselect (local.get $0) (local.get $1) (local.get $2) ) ) (func $86 (param $0 v128) (result i32) (v128.any_true (local.get $0) ) ) (func $87 (param $0 i32) (param $1 v128) (result v128) (v128.load8_lane 0 (local.get $0) (local.get $1) ) ) (func $88 (param $0 i32) (param $1 v128) (result v128) (v128.load16_lane 0 (local.get $0) (local.get $1) ) ) (func $89 (param $0 i32) (param $1 v128) (result v128) (v128.load32_lane 0 (local.get $0) (local.get $1) ) ) (func $90 (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane 0 (local.get $0) (local.get $1) ) ) (func $91 (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane align=1 0 (local.get $0) (local.get $1) ) ) (func $92 (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane offset=32 0 (local.get $0) (local.get $1) ) ) (func $93 (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane offset=32 align=1 0 (local.get $0) (local.get $1) ) ) (func $94 (param $0 i32) (param $1 v128) (v128.store8_lane 0 (local.get $0) (local.get $1) ) ) (func $95 (param $0 i32) (param $1 v128) (v128.store16_lane 0 (local.get $0) (local.get $1) ) ) (func $96 (param $0 i32) (param $1 v128) (v128.store32_lane 0 (local.get $0) (local.get $1) ) ) (func $97 (param $0 i32) (param $1 v128) (v128.store64_lane 0 (local.get $0) (local.get $1) ) ) (func $98 (param $0 i32) (param $1 v128) (v128.store64_lane align=1 0 (local.get $0) (local.get $1) ) ) (func $99 (param $0 i32) (param $1 v128) (v128.store64_lane offset=32 0 (local.get $0) (local.get $1) ) ) (func $100 (param $0 i32) (param $1 v128) (v128.store64_lane offset=32 align=1 0 (local.get $0) (local.get $1) ) ) (func $101 (param $0 i32) (result v128) (v128.load32_zero (local.get $0) ) ) (func $102 (param $0 i32) (result v128) (v128.load64_zero (local.get $0) ) ) (func $103 (param $0 v128) (result v128) (f32x4.demote_f64x2_zero (local.get $0) ) ) (func $104 (param $0 v128) (result v128) (f64x2.promote_low_f32x4 (local.get $0) ) ) (func $105 (param $0 v128) (result v128) (i8x16.abs (local.get $0) ) ) (func $106 (param $0 v128) (result v128) (i8x16.neg (local.get $0) ) ) (func $107 (param $0 v128) (result v128) (i8x16.popcnt (local.get $0) ) ) (func $108 (param $0 v128) (result i32) (i8x16.all_true (local.get $0) ) ) (func $109 (param $0 v128) (result i32) (i8x16.bitmask (local.get $0) ) ) (func $110 (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_s (local.get $0) (local.get $1) ) ) (func $111 (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_u (local.get $0) (local.get $1) ) ) (func $112 (param $0 v128) (result v128) (f32x4.ceil (local.get $0) ) ) (func $113 (param $0 v128) (result v128) (f32x4.floor (local.get $0) ) ) (func $114 (param $0 v128) (result v128) (f32x4.trunc (local.get $0) ) ) (func $115 (param $0 v128) (result v128) (f32x4.nearest (local.get $0) ) ) (func $116 (param $0 v128) (param $1 i32) (result v128) (i8x16.shl (local.get $0) (local.get $1) ) ) (func $117 (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_s (local.get $0) (local.get $1) ) ) (func $118 (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_u (local.get $0) (local.get $1) ) ) (func $119 (param $0 v128) (param $1 v128) (result v128) (i8x16.add (local.get $0) (local.get $1) ) ) (func $120 (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_s (local.get $0) (local.get $1) ) ) (func $121 (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_u (local.get $0) (local.get $1) ) ) (func $122 (param $0 v128) (param $1 v128) (result v128) (i8x16.sub (local.get $0) (local.get $1) ) ) (func $123 (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_s (local.get $0) (local.get $1) ) ) (func $124 (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_u (local.get $0) (local.get $1) ) ) (func $125 (param $0 v128) (result v128) (f64x2.ceil (local.get $0) ) ) (func $126 (param $0 v128) (result v128) (f64x2.floor (local.get $0) ) ) (func $127 (param $0 v128) (param $1 v128) (result v128) (i8x16.min_s (local.get $0) (local.get $1) ) ) (func $128 (param $0 v128) (param $1 v128) (result v128) (i8x16.min_u (local.get $0) (local.get $1) ) ) (func $129 (param $0 v128) (param $1 v128) (result v128) (i8x16.max_s (local.get $0) (local.get $1) ) ) (func $130 (param $0 v128) (param $1 v128) (result v128) (i8x16.max_u (local.get $0) (local.get $1) ) ) (func $131 (param $0 v128) (result v128) (f64x2.trunc (local.get $0) ) ) (func $132 (param $0 v128) (param $1 v128) (result v128) (i8x16.avgr_u (local.get $0) (local.get $1) ) ) (func $133 (param $0 v128) (result v128) (i16x8.extadd_pairwise_i8x16_s (local.get $0) ) ) (func $134 (param $0 v128) (result v128) (i16x8.extadd_pairwise_i8x16_u (local.get $0) ) ) (func $135 (param $0 v128) (result v128) (i32x4.extadd_pairwise_i16x8_s (local.get $0) ) ) (func $136 (param $0 v128) (result v128) (i32x4.extadd_pairwise_i16x8_u (local.get $0) ) ) (func $137 (param $0 v128) (result v128) (i16x8.abs (local.get $0) ) ) (func $138 (param $0 v128) (result v128) (i16x8.neg (local.get $0) ) ) (func $139 (param $0 v128) (param $1 v128) (result v128) (i16x8.q15mulr_sat_s (local.get $0) (local.get $1) ) ) (func $140 (param $0 v128) (result i32) (i16x8.all_true (local.get $0) ) ) (func $141 (param $0 v128) (result i32) (i16x8.bitmask (local.get $0) ) ) (func $142 (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_s (local.get $0) (local.get $1) ) ) (func $143 (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_u (local.get $0) (local.get $1) ) ) (func $144 (param $0 v128) (result v128) (i16x8.extend_low_i8x16_s (local.get $0) ) ) (func $145 (param $0 v128) (result v128) (i16x8.extend_high_i8x16_s (local.get $0) ) ) (func $146 (param $0 v128) (result v128) (i16x8.extend_low_i8x16_u (local.get $0) ) ) (func $147 (param $0 v128) (result v128) (i16x8.extend_high_i8x16_u (local.get $0) ) ) (func $148 (param $0 v128) (param $1 i32) (result v128) (i16x8.shl (local.get $0) (local.get $1) ) ) (func $149 (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_s (local.get $0) (local.get $1) ) ) (func $150 (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_u (local.get $0) (local.get $1) ) ) (func $151 (param $0 v128) (param $1 v128) (result v128) (i16x8.add (local.get $0) (local.get $1) ) ) (func $152 (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_s (local.get $0) (local.get $1) ) ) (func $153 (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_u (local.get $0) (local.get $1) ) ) (func $154 (param $0 v128) (param $1 v128) (result v128) (i16x8.sub (local.get $0) (local.get $1) ) ) (func $155 (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_s (local.get $0) (local.get $1) ) ) (func $156 (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_u (local.get $0) (local.get $1) ) ) (func $157 (param $0 v128) (result v128) (f64x2.nearest (local.get $0) ) ) (func $158 (param $0 v128) (param $1 v128) (result v128) (i16x8.mul (local.get $0) (local.get $1) ) ) (func $159 (param $0 v128) (param $1 v128) (result v128) (i16x8.min_s (local.get $0) (local.get $1) ) ) (func $160 (param $0 v128) (param $1 v128) (result v128) (i16x8.min_u (local.get $0) (local.get $1) ) ) (func $161 (param $0 v128) (param $1 v128) (result v128) (i16x8.max_s (local.get $0) (local.get $1) ) ) (func $162 (param $0 v128) (param $1 v128) (result v128) (i16x8.max_u (local.get $0) (local.get $1) ) ) (func $163 (param $0 v128) (param $1 v128) (result v128) (i16x8.avgr_u (local.get $0) (local.get $1) ) ) (func $164 (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_s (local.get $0) (local.get $1) ) ) (func $165 (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_s (local.get $0) (local.get $1) ) ) (func $166 (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_u (local.get $0) (local.get $1) ) ) (func $167 (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_u (local.get $0) (local.get $1) ) ) (func $168 (param $0 v128) (result v128) (i32x4.abs (local.get $0) ) ) (func $169 (param $0 v128) (result v128) (i32x4.neg (local.get $0) ) ) (func $170 (param $0 v128) (result i32) (i32x4.all_true (local.get $0) ) ) (func $171 (param $0 v128) (result i32) (i32x4.bitmask (local.get $0) ) ) (func $172 (param $0 v128) (result v128) (i32x4.extend_low_i16x8_s (local.get $0) ) ) (func $173 (param $0 v128) (result v128) (i32x4.extend_high_i16x8_s (local.get $0) ) ) (func $174 (param $0 v128) (result v128) (i32x4.extend_low_i16x8_u (local.get $0) ) ) (func $175 (param $0 v128) (result v128) (i32x4.extend_high_i16x8_u (local.get $0) ) ) (func $176 (param $0 v128) (param $1 i32) (result v128) (i32x4.shl (local.get $0) (local.get $1) ) ) (func $177 (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_s (local.get $0) (local.get $1) ) ) (func $178 (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_u (local.get $0) (local.get $1) ) ) (func $179 (param $0 v128) (param $1 v128) (result v128) (i32x4.add (local.get $0) (local.get $1) ) ) (func $180 (param $0 v128) (param $1 v128) (result v128) (i32x4.sub (local.get $0) (local.get $1) ) ) (func $181 (param $0 v128) (param $1 v128) (result v128) (i32x4.mul (local.get $0) (local.get $1) ) ) (func $182 (param $0 v128) (param $1 v128) (result v128) (i32x4.min_s (local.get $0) (local.get $1) ) ) (func $183 (param $0 v128) (param $1 v128) (result v128) (i32x4.min_u (local.get $0) (local.get $1) ) ) (func $184 (param $0 v128) (param $1 v128) (result v128) (i32x4.max_s (local.get $0) (local.get $1) ) ) (func $185 (param $0 v128) (param $1 v128) (result v128) (i32x4.max_u (local.get $0) (local.get $1) ) ) (func $186 (param $0 v128) (param $1 v128) (result v128) (i32x4.dot_i16x8_s (local.get $0) (local.get $1) ) ) (func $187 (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_s (local.get $0) (local.get $1) ) ) (func $188 (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_s (local.get $0) (local.get $1) ) ) (func $189 (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_u (local.get $0) (local.get $1) ) ) (func $190 (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_u (local.get $0) (local.get $1) ) ) (func $191 (param $0 v128) (result v128) (i64x2.abs (local.get $0) ) ) (func $192 (param $0 v128) (result v128) (i64x2.neg (local.get $0) ) ) (func $193 (param $0 v128) (result i32) (i64x2.all_true (local.get $0) ) ) (func $194 (param $0 v128) (result i32) (i64x2.bitmask (local.get $0) ) ) (func $195 (param $0 v128) (result v128) (i64x2.extend_low_i32x4_s (local.get $0) ) ) (func $196 (param $0 v128) (result v128) (i64x2.extend_high_i32x4_s (local.get $0) ) ) (func $197 (param $0 v128) (result v128) (i64x2.extend_low_i32x4_u (local.get $0) ) ) (func $198 (param $0 v128) (result v128) (i64x2.extend_high_i32x4_u (local.get $0) ) ) (func $199 (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (local.get $0) (local.get $1) ) ) (func $200 (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (local.get $0) (local.get $1) ) ) (func $201 (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_u (local.get $0) (local.get $1) ) ) (func $202 (param $0 v128) (param $1 v128) (result v128) (i64x2.add (local.get $0) (local.get $1) ) ) (func $203 (param $0 v128) (param $1 v128) (result v128) (i64x2.sub (local.get $0) (local.get $1) ) ) (func $204 (param $0 v128) (param $1 v128) (result v128) (i64x2.mul (local.get $0) (local.get $1) ) ) (func $205 (param $0 v128) (param $1 v128) (result v128) (i64x2.eq (local.get $0) (local.get $1) ) ) (func $206 (param $0 v128) (param $1 v128) (result v128) (i64x2.ne (local.get $0) (local.get $1) ) ) (func $207 (param $0 v128) (param $1 v128) (result v128) (i64x2.lt_s (local.get $0) (local.get $1) ) ) (func $208 (param $0 v128) (param $1 v128) (result v128) (i64x2.gt_s (local.get $0) (local.get $1) ) ) (func $209 (param $0 v128) (param $1 v128) (result v128) (i64x2.le_s (local.get $0) (local.get $1) ) ) (func $210 (param $0 v128) (param $1 v128) (result v128) (i64x2.ge_s (local.get $0) (local.get $1) ) ) (func $211 (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_s (local.get $0) (local.get $1) ) ) (func $212 (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_s (local.get $0) (local.get $1) ) ) (func $213 (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_u (local.get $0) (local.get $1) ) ) (func $214 (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_u (local.get $0) (local.get $1) ) ) (func $215 (param $0 v128) (result v128) (f32x4.abs (local.get $0) ) ) (func $216 (param $0 v128) (result v128) (f32x4.neg (local.get $0) ) ) (func $217 (param $0 v128) (result v128) (f32x4.sqrt (local.get $0) ) ) (func $218 (param $0 v128) (param $1 v128) (result v128) (f32x4.add (local.get $0) (local.get $1) ) ) (func $219 (param $0 v128) (param $1 v128) (result v128) (f32x4.sub (local.get $0) (local.get $1) ) ) (func $220 (param $0 v128) (param $1 v128) (result v128) (f32x4.mul (local.get $0) (local.get $1) ) ) (func $221 (param $0 v128) (param $1 v128) (result v128) (f32x4.div (local.get $0) (local.get $1) ) ) (func $222 (param $0 v128) (param $1 v128) (result v128) (f32x4.min (local.get $0) (local.get $1) ) ) (func $223 (param $0 v128) (param $1 v128) (result v128) (f32x4.max (local.get $0) (local.get $1) ) ) (func $224 (param $0 v128) (param $1 v128) (result v128) (f32x4.pmin (local.get $0) (local.get $1) ) ) (func $225 (param $0 v128) (param $1 v128) (result v128) (f32x4.pmax (local.get $0) (local.get $1) ) ) (func $226 (param $0 v128) (result v128) (f64x2.abs (local.get $0) ) ) (func $227 (param $0 v128) (result v128) (f64x2.neg (local.get $0) ) ) (func $228 (param $0 v128) (result v128) (f64x2.sqrt (local.get $0) ) ) (func $229 (param $0 v128) (param $1 v128) (result v128) (f64x2.add (local.get $0) (local.get $1) ) ) (func $230 (param $0 v128) (param $1 v128) (result v128) (f64x2.sub (local.get $0) (local.get $1) ) ) (func $231 (param $0 v128) (param $1 v128) (result v128) (f64x2.mul (local.get $0) (local.get $1) ) ) (func $232 (param $0 v128) (param $1 v128) (result v128) (f64x2.div (local.get $0) (local.get $1) ) ) (func $233 (param $0 v128) (param $1 v128) (result v128) (f64x2.min (local.get $0) (local.get $1) ) ) (func $234 (param $0 v128) (param $1 v128) (result v128) (f64x2.max (local.get $0) (local.get $1) ) ) (func $235 (param $0 v128) (param $1 v128) (result v128) (f64x2.pmin (local.get $0) (local.get $1) ) ) (func $236 (param $0 v128) (param $1 v128) (result v128) (f64x2.pmax (local.get $0) (local.get $1) ) ) (func $237 (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0) ) ) (func $238 (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_u (local.get $0) ) ) (func $239 (param $0 v128) (result v128) (f32x4.convert_i32x4_s (local.get $0) ) ) (func $240 (param $0 v128) (result v128) (f32x4.convert_i32x4_u (local.get $0) ) ) (func $241 (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_s_zero (local.get $0) ) ) (func $242 (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_u_zero (local.get $0) ) ) (func $243 (param $0 v128) (result v128) (f64x2.convert_low_i32x4_s (local.get $0) ) ) (func $244 (param $0 v128) (result v128) (f64x2.convert_low_i32x4_u (local.get $0) ) ) ) binaryen-version_108/test/simd64.wast000066400000000000000000000026331423707623100177360ustar00rootroot00000000000000(module (memory i64 1 1) (func $v128.load (param $0 i64) (result v128) (v128.load offset=0 align=16 (local.get $0) ) ) (func $v128.store (param $0 i64) (param $1 v128) (v128.store offset=0 align=16 (local.get $0) (local.get $1) ) ) (func $v128.load8_splat (param $0 i64) (result v128) (v128.load8_splat (local.get $0) ) ) (func $v128.load16_splat (param $0 i64) (result v128) (v128.load16_splat (local.get $0) ) ) (func $v128.load32_splat (param $0 i64) (result v128) (v128.load32_splat (local.get $0) ) ) (func $v128.load64_splat (param $0 i64) (result v128) (v128.load64_splat (local.get $0) ) ) (func $v128.load8x8_u (param $0 i64) (result v128) (v128.load8x8_u (local.get $0) ) ) (func $v128.load8x8_s (param $0 i64) (result v128) (v128.load8x8_s (local.get $0) ) ) (func $v128.load16x4_s (param $0 i64) (result v128) (v128.load16x4_s (local.get $0) ) ) (func $v128.load16x4_u (param $0 i64) (result v128) (v128.load16x4_u (local.get $0) ) ) (func $v128.load32x2_s (param $0 i64) (result v128) (v128.load32x2_s (local.get $0) ) ) (func $v128.load32x2_u (param $0 i64) (result v128) (v128.load32x2_u (local.get $0) ) ) (func $v128.load32_zero (param $0 i64) (result v128) (v128.load32_zero (local.get $0) ) ) (func $v128.load64_zero (param $0 i64) (result v128) (v128.load64_zero (local.get $0) ) ) ) binaryen-version_108/test/simd64.wast.from-wast000066400000000000000000000027411423707623100216540ustar00rootroot00000000000000(module (type $i64_=>_v128 (func (param i64) (result v128))) (type $i64_v128_=>_none (func (param i64 v128))) (memory $0 i64 1 1) (func $v128.load (param $0 i64) (result v128) (v128.load (local.get $0) ) ) (func $v128.store (param $0 i64) (param $1 v128) (v128.store (local.get $0) (local.get $1) ) ) (func $v128.load8_splat (param $0 i64) (result v128) (v128.load8_splat (local.get $0) ) ) (func $v128.load16_splat (param $0 i64) (result v128) (v128.load16_splat (local.get $0) ) ) (func $v128.load32_splat (param $0 i64) (result v128) (v128.load32_splat (local.get $0) ) ) (func $v128.load64_splat (param $0 i64) (result v128) (v128.load64_splat (local.get $0) ) ) (func $v128.load8x8_u (param $0 i64) (result v128) (v128.load8x8_u (local.get $0) ) ) (func $v128.load8x8_s (param $0 i64) (result v128) (v128.load8x8_s (local.get $0) ) ) (func $v128.load16x4_s (param $0 i64) (result v128) (v128.load16x4_s (local.get $0) ) ) (func $v128.load16x4_u (param $0 i64) (result v128) (v128.load16x4_u (local.get $0) ) ) (func $v128.load32x2_s (param $0 i64) (result v128) (v128.load32x2_s (local.get $0) ) ) (func $v128.load32x2_u (param $0 i64) (result v128) (v128.load32x2_u (local.get $0) ) ) (func $v128.load32_zero (param $0 i64) (result v128) (v128.load32_zero (local.get $0) ) ) (func $v128.load64_zero (param $0 i64) (result v128) (v128.load64_zero (local.get $0) ) ) ) binaryen-version_108/test/simd64.wast.fromBinary000066400000000000000000000027421423707623100220460ustar00rootroot00000000000000(module (type $i64_=>_v128 (func (param i64) (result v128))) (type $i64_v128_=>_none (func (param i64 v128))) (memory $0 i64 1 1) (func $v128.load (param $0 i64) (result v128) (v128.load (local.get $0) ) ) (func $v128.store (param $0 i64) (param $1 v128) (v128.store (local.get $0) (local.get $1) ) ) (func $v128.load8_splat (param $0 i64) (result v128) (v128.load8_splat (local.get $0) ) ) (func $v128.load16_splat (param $0 i64) (result v128) (v128.load16_splat (local.get $0) ) ) (func $v128.load32_splat (param $0 i64) (result v128) (v128.load32_splat (local.get $0) ) ) (func $v128.load64_splat (param $0 i64) (result v128) (v128.load64_splat (local.get $0) ) ) (func $v128.load8x8_u (param $0 i64) (result v128) (v128.load8x8_u (local.get $0) ) ) (func $v128.load8x8_s (param $0 i64) (result v128) (v128.load8x8_s (local.get $0) ) ) (func $v128.load16x4_s (param $0 i64) (result v128) (v128.load16x4_s (local.get $0) ) ) (func $v128.load16x4_u (param $0 i64) (result v128) (v128.load16x4_u (local.get $0) ) ) (func $v128.load32x2_s (param $0 i64) (result v128) (v128.load32x2_s (local.get $0) ) ) (func $v128.load32x2_u (param $0 i64) (result v128) (v128.load32x2_u (local.get $0) ) ) (func $v128.load32_zero (param $0 i64) (result v128) (v128.load32_zero (local.get $0) ) ) (func $v128.load64_zero (param $0 i64) (result v128) (v128.load64_zero (local.get $0) ) ) ) binaryen-version_108/test/simd64.wast.fromBinary.noDebugInfo000066400000000000000000000024461423707623100242450ustar00rootroot00000000000000(module (type $i64_=>_v128 (func (param i64) (result v128))) (type $i64_v128_=>_none (func (param i64 v128))) (memory $0 i64 1 1) (func $0 (param $0 i64) (result v128) (v128.load (local.get $0) ) ) (func $1 (param $0 i64) (param $1 v128) (v128.store (local.get $0) (local.get $1) ) ) (func $2 (param $0 i64) (result v128) (v128.load8_splat (local.get $0) ) ) (func $3 (param $0 i64) (result v128) (v128.load16_splat (local.get $0) ) ) (func $4 (param $0 i64) (result v128) (v128.load32_splat (local.get $0) ) ) (func $5 (param $0 i64) (result v128) (v128.load64_splat (local.get $0) ) ) (func $6 (param $0 i64) (result v128) (v128.load8x8_u (local.get $0) ) ) (func $7 (param $0 i64) (result v128) (v128.load8x8_s (local.get $0) ) ) (func $8 (param $0 i64) (result v128) (v128.load16x4_s (local.get $0) ) ) (func $9 (param $0 i64) (result v128) (v128.load16x4_u (local.get $0) ) ) (func $10 (param $0 i64) (result v128) (v128.load32x2_s (local.get $0) ) ) (func $11 (param $0 i64) (result v128) (v128.load32x2_u (local.get $0) ) ) (func $12 (param $0 i64) (result v128) (v128.load32_zero (local.get $0) ) ) (func $13 (param $0 i64) (result v128) (v128.load64_zero (local.get $0) ) ) ) binaryen-version_108/test/spec/000077500000000000000000000000001423707623100166565ustar00rootroot00000000000000binaryen-version_108/test/spec/Contributing.md000066400000000000000000000005311423707623100216460ustar00rootroot00000000000000# Contributing to WebAssembly Interested in participating? Please follow [the same contributing guidelines as the design repository][]. [the same contributing guidelines as the design repository]: https://github.com/WebAssembly/design/blob/master/Contributing.md Also, please be sure to read [the README.md](README.md) for this repository. binaryen-version_108/test/spec/LICENSE000066400000000000000000000261361423707623100176730ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. binaryen-version_108/test/spec/README.md000066400000000000000000000016461423707623100201440ustar00rootroot00000000000000This directory contains tests for the core WebAssembly semantics, as described in [Semantics.md](https://github.com/WebAssembly/design/blob/master/Semantics.md) and specified by the [spec interpreter](https://github.com/WebAssembly/spec/blob/master/interpreter). Tests are written in the [S-Expression script format](https://github.com/WebAssembly/spec/blob/master/interpreter/README.md#s-expression-syntax) defined by the interpreter. The test suite can be run with the spec interpreter as follows: ``` ./run.py --wasm ``` where the path points to the spec interpreter executable (or a tool that understands similar options). If the binary is in the working directory, this option can be omitted. In addition, the option `--js ` can be given to point to a stand-alone JavaScript interpreter supporting the WebAssembly API. If provided, all tests are also executed in JavaScript. binaryen-version_108/test/spec/address-offset-range.fail.wast000066400000000000000000000001271423707623100244730ustar00rootroot00000000000000(module (memory 1) (func $bad (drop (i32.load offset=4294967296 (i32.const 0)))) ) binaryen-version_108/test/spec/address.wast000066400000000000000000000675361423707623100212240ustar00rootroot00000000000000;; Load i32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i32) (i32.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i32) (i32.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i32) (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i32) (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i32) (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i32) (i32.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i32) (i32.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i32) (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i32) (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i32) (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i32) (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i32) (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i32) (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i32) (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i32) (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i32) (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i32) (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i32) (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i32) (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i32) (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32_good1") (param $i i32) (result i32) (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good2") (param $i i32) (result i32) (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good3") (param $i i32) (result i32) (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32_good4") (param $i i32) (result i32) (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32_good5") (param $i i32) (result i32) (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i32.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i32.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i32.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i32.load16_s offset=4294967295 (local.get $i))) ) (func (export "32_bad") (param $i i32) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i32.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i32.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i32.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i32.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i32.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "32_good1" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good2" (i32.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good3" (i32.const 0)) (i32.const 1701077858)) (assert_return (invoke "32_good4" (i32.const 0)) (i32.const 1717920867)) (assert_return (invoke "32_good5" (i32.const 0)) (i32.const 122)) (assert_return (invoke "8u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "32_good5" (i32.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good4" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good5" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good1" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good2" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good3" (i32.const 65508)) (i32.const 0)) (assert_return (invoke "32_good4" (i32.const 65508)) (i32.const 0)) (assert_trap (invoke "32_good5" (i32.const 65508)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") (assert_malformed (module quote "(memory 1)" "(func (drop (i32.load offset=4294967296 (i32.const 0))))" ) "i32 constant" ) ;; Load i64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i32) (result i64) (i64.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i32) (result i64) (i64.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i32) (result i64) (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i32) (result i64) (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i32) (result i64) (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i32) (result i64) (i64.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i32) (result i64) (i64.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i32) (result i64) (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i32) (result i64) (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i32) (result i64) (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i32) (result i64) (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i32) (result i64) (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i32) (result i64) (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i32) (result i64) (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i32) (result i64) (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i32) (result i64) (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i32) (result i64) (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i32) (result i64) (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i32) (result i64) (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i32) (result i64) (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32u_good1") (param $i i32) (result i64) (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good2") (param $i i32) (result i64) (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good3") (param $i i32) (result i64) (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32u_good4") (param $i i32) (result i64) (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32u_good5") (param $i i32) (result i64) (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "32s_good1") (param $i i32) (result i64) (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good2") (param $i i32) (result i64) (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good3") (param $i i32) (result i64) (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32s_good4") (param $i i32) (result i64) (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32s_good5") (param $i i32) (result i64) (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "64_good1") (param $i i32) (result i64) (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good2") (param $i i32) (result i64) (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good3") (param $i i32) (result i64) (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi' ) (func (export "64_good4") (param $i i32) (result i64) (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij' ) (func (export "64_good5") (param $i i32) (result i64) (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0' ) (func (export "8u_bad") (param $i i32) (drop (i64.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i32) (drop (i64.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i32) (drop (i64.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i32) (drop (i64.load16_s offset=4294967295 (local.get $i))) ) (func (export "32u_bad") (param $i i32) (drop (i64.load32_u offset=4294967295 (local.get $i))) ) (func (export "32s_bad") (param $i i32) (drop (i64.load32_s offset=4294967295 (local.get $i))) ) (func (export "64_bad") (param $i i32) (drop (i64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8u_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8u_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8s_good1" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good2" (i32.const 0)) (i64.const 97)) (assert_return (invoke "8s_good3" (i32.const 0)) (i64.const 98)) (assert_return (invoke "8s_good4" (i32.const 0)) (i64.const 99)) (assert_return (invoke "8s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16u_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16u_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "16s_good1" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good2" (i32.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good3" (i32.const 0)) (i64.const 25442)) (assert_return (invoke "16s_good4" (i32.const 0)) (i64.const 25699)) (assert_return (invoke "16s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32u_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32u_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32u_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "32s_good1" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good2" (i32.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good3" (i32.const 0)) (i64.const 1701077858)) (assert_return (invoke "32s_good4" (i32.const 0)) (i64.const 1717920867)) (assert_return (invoke "32s_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "64_good1" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good2" (i32.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good3" (i32.const 0)) (i64.const 0x6968676665646362)) (assert_return (invoke "64_good4" (i32.const 0)) (i64.const 0x6a69686766656463)) (assert_return (invoke "64_good5" (i32.const 0)) (i64.const 122)) (assert_return (invoke "8u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "64_good5" (i32.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good4" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good5" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good1" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good2" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good3" (i32.const 65504)) (i64.const 0)) (assert_return (invoke "64_good4" (i32.const 65504)) (i64.const 0)) (assert_trap (invoke "64_good5" (i32.const 65504)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") ;; Load f32 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f") (func (export "32_good1") (param $i i32) (result f32) (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good2") (param $i i32) (result f32) (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good3") (param $i i32) (result f32) (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good4") (param $i i32) (result f32) (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good5") (param $i i32) (result f32) (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f' ) (func (export "32_bad") (param $i i32) (drop (f32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "32_good1" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 0)) (f32.const nan:0x500001)) (assert_return (invoke "32_good1" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i32.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good1" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i32.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i32.const 65525)) (f32.const 0.0)) (assert_trap (invoke "32_good5" (i32.const 65525)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") ;; Load f64 data with different offset/align arguments (module (memory 1) (data (i32.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f") (func (export "64_good1") (param $i i32) (result f64) (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good2") (param $i i32) (result f64) (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good3") (param $i i32) (result f64) (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good4") (param $i i32) (result f64) (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good5") (param $i i32) (result f64) (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f' ) (func (export "64_bad") (param $i i32) (drop (f64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "64_good1" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 0)) (f64.const nan:0xc000000000001)) (assert_return (invoke "64_good1" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i32.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good1" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i32.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i32.const 65511)) (f64.const 0.0)) (assert_trap (invoke "64_good5" (i32.const 65511)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access") binaryen-version_108/test/spec/address64.wast000066400000000000000000000675621423707623100213750ustar00rootroot00000000000000;; Load i32 data with different offset/align arguments (module (memory i64 1) (data (i64.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i64) (result i32) (i32.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i64) (result i32) (i32.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i64) (result i32) (i32.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i64) (result i32) (i32.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i64) (result i32) (i32.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i64) (result i32) (i32.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i64) (result i32) (i32.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i64) (result i32) (i32.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i64) (result i32) (i32.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i64) (result i32) (i32.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i64) (result i32) (i32.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i64) (result i32) (i32.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i64) (result i32) (i32.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i64) (result i32) (i32.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i64) (result i32) (i32.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i64) (result i32) (i32.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i64) (result i32) (i32.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i64) (result i32) (i32.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i64) (result i32) (i32.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i64) (result i32) (i32.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32_good1") (param $i i64) (result i32) (i32.load offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good2") (param $i i64) (result i32) (i32.load align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32_good3") (param $i i64) (result i32) (i32.load offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32_good4") (param $i i64) (result i32) (i32.load offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32_good5") (param $i i64) (result i32) (i32.load offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "8u_bad") (param $i i64) (drop (i32.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i64) (drop (i32.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i64) (drop (i32.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i64) (drop (i32.load16_s offset=4294967295 (local.get $i))) ) (func (export "32_bad") (param $i i64) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i64.const 0)) (i32.const 97)) (assert_return (invoke "8u_good2" (i64.const 0)) (i32.const 97)) (assert_return (invoke "8u_good3" (i64.const 0)) (i32.const 98)) (assert_return (invoke "8u_good4" (i64.const 0)) (i32.const 99)) (assert_return (invoke "8u_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "8s_good1" (i64.const 0)) (i32.const 97)) (assert_return (invoke "8s_good2" (i64.const 0)) (i32.const 97)) (assert_return (invoke "8s_good3" (i64.const 0)) (i32.const 98)) (assert_return (invoke "8s_good4" (i64.const 0)) (i32.const 99)) (assert_return (invoke "8s_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "16u_good1" (i64.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good2" (i64.const 0)) (i32.const 25185)) (assert_return (invoke "16u_good3" (i64.const 0)) (i32.const 25442)) (assert_return (invoke "16u_good4" (i64.const 0)) (i32.const 25699)) (assert_return (invoke "16u_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "16s_good1" (i64.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good2" (i64.const 0)) (i32.const 25185)) (assert_return (invoke "16s_good3" (i64.const 0)) (i32.const 25442)) (assert_return (invoke "16s_good4" (i64.const 0)) (i32.const 25699)) (assert_return (invoke "16s_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "32_good1" (i64.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good2" (i64.const 0)) (i32.const 1684234849)) (assert_return (invoke "32_good3" (i64.const 0)) (i32.const 1701077858)) (assert_return (invoke "32_good4" (i64.const 0)) (i32.const 1717920867)) (assert_return (invoke "32_good5" (i64.const 0)) (i32.const 122)) (assert_return (invoke "8u_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8s_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16u_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "16s_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good1" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good2" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good3" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good4" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "32_good5" (i64.const 65507)) (i32.const 0)) (assert_return (invoke "8u_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good4" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8u_good5" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good4" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "8s_good5" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good4" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16u_good5" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good4" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "16s_good5" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "32_good1" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "32_good2" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "32_good3" (i64.const 65508)) (i32.const 0)) (assert_return (invoke "32_good4" (i64.const 65508)) (i32.const 0)) (assert_trap (invoke "32_good5" (i64.const 65508)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i64.const 1)) "out of bounds memory access") (assert_malformed (module quote "(memory i64 1)" "(func (drop (i32.load offset=4294967296 (i64.const 0))))" ) "i32 constant" ) ;; Load i64 data with different offset/align arguments (module (memory i64 1) (data (i64.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "8u_good1") (param $i i64) (result i64) (i64.load8_u offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8u_good2") (param $i i64) (result i64) (i64.load8_u align=1 (local.get $i)) ;; 97 'a' ) (func (export "8u_good3") (param $i i64) (result i64) (i64.load8_u offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8u_good4") (param $i i64) (result i64) (i64.load8_u offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8u_good5") (param $i i64) (result i64) (i64.load8_u offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "8s_good1") (param $i i64) (result i64) (i64.load8_s offset=0 (local.get $i)) ;; 97 'a' ) (func (export "8s_good2") (param $i i64) (result i64) (i64.load8_s align=1 (local.get $i)) ;; 97 'a' ) (func (export "8s_good3") (param $i i64) (result i64) (i64.load8_s offset=1 align=1 (local.get $i)) ;; 98 'b' ) (func (export "8s_good4") (param $i i64) (result i64) (i64.load8_s offset=2 align=1 (local.get $i)) ;; 99 'c' ) (func (export "8s_good5") (param $i i64) (result i64) (i64.load8_s offset=25 align=1 (local.get $i)) ;; 122 'z' ) (func (export "16u_good1") (param $i i64) (result i64) (i64.load16_u offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good2") (param $i i64) (result i64) (i64.load16_u align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16u_good3") (param $i i64) (result i64) (i64.load16_u offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16u_good4") (param $i i64) (result i64) (i64.load16_u offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16u_good5") (param $i i64) (result i64) (i64.load16_u offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "16s_good1") (param $i i64) (result i64) (i64.load16_s offset=0 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good2") (param $i i64) (result i64) (i64.load16_s align=1 (local.get $i)) ;; 25185 'ab' ) (func (export "16s_good3") (param $i i64) (result i64) (i64.load16_s offset=1 align=1 (local.get $i)) ;; 25442 'bc' ) (func (export "16s_good4") (param $i i64) (result i64) (i64.load16_s offset=2 align=2 (local.get $i)) ;; 25699 'cd' ) (func (export "16s_good5") (param $i i64) (result i64) (i64.load16_s offset=25 align=2 (local.get $i)) ;; 122 'z\0' ) (func (export "32u_good1") (param $i i64) (result i64) (i64.load32_u offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good2") (param $i i64) (result i64) (i64.load32_u align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32u_good3") (param $i i64) (result i64) (i64.load32_u offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32u_good4") (param $i i64) (result i64) (i64.load32_u offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32u_good5") (param $i i64) (result i64) (i64.load32_u offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "32s_good1") (param $i i64) (result i64) (i64.load32_s offset=0 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good2") (param $i i64) (result i64) (i64.load32_s align=1 (local.get $i)) ;; 1684234849 'abcd' ) (func (export "32s_good3") (param $i i64) (result i64) (i64.load32_s offset=1 align=1 (local.get $i)) ;; 1701077858 'bcde' ) (func (export "32s_good4") (param $i i64) (result i64) (i64.load32_s offset=2 align=2 (local.get $i)) ;; 1717920867 'cdef' ) (func (export "32s_good5") (param $i i64) (result i64) (i64.load32_s offset=25 align=4 (local.get $i)) ;; 122 'z\0\0\0' ) (func (export "64_good1") (param $i i64) (result i64) (i64.load offset=0 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good2") (param $i i64) (result i64) (i64.load align=1 (local.get $i)) ;; 0x6867666564636261 'abcdefgh' ) (func (export "64_good3") (param $i i64) (result i64) (i64.load offset=1 align=1 (local.get $i)) ;; 0x6968676665646362 'bcdefghi' ) (func (export "64_good4") (param $i i64) (result i64) (i64.load offset=2 align=2 (local.get $i)) ;; 0x6a69686766656463 'cdefghij' ) (func (export "64_good5") (param $i i64) (result i64) (i64.load offset=25 align=8 (local.get $i)) ;; 122 'z\0\0\0\0\0\0\0' ) (func (export "8u_bad") (param $i i64) (drop (i64.load8_u offset=4294967295 (local.get $i))) ) (func (export "8s_bad") (param $i i64) (drop (i64.load8_s offset=4294967295 (local.get $i))) ) (func (export "16u_bad") (param $i i64) (drop (i64.load16_u offset=4294967295 (local.get $i))) ) (func (export "16s_bad") (param $i i64) (drop (i64.load16_s offset=4294967295 (local.get $i))) ) (func (export "32u_bad") (param $i i64) (drop (i64.load32_u offset=4294967295 (local.get $i))) ) (func (export "32s_bad") (param $i i64) (drop (i64.load32_s offset=4294967295 (local.get $i))) ) (func (export "64_bad") (param $i i64) (drop (i64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "8u_good1" (i64.const 0)) (i64.const 97)) (assert_return (invoke "8u_good2" (i64.const 0)) (i64.const 97)) (assert_return (invoke "8u_good3" (i64.const 0)) (i64.const 98)) (assert_return (invoke "8u_good4" (i64.const 0)) (i64.const 99)) (assert_return (invoke "8u_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "8s_good1" (i64.const 0)) (i64.const 97)) (assert_return (invoke "8s_good2" (i64.const 0)) (i64.const 97)) (assert_return (invoke "8s_good3" (i64.const 0)) (i64.const 98)) (assert_return (invoke "8s_good4" (i64.const 0)) (i64.const 99)) (assert_return (invoke "8s_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "16u_good1" (i64.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good2" (i64.const 0)) (i64.const 25185)) (assert_return (invoke "16u_good3" (i64.const 0)) (i64.const 25442)) (assert_return (invoke "16u_good4" (i64.const 0)) (i64.const 25699)) (assert_return (invoke "16u_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "16s_good1" (i64.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good2" (i64.const 0)) (i64.const 25185)) (assert_return (invoke "16s_good3" (i64.const 0)) (i64.const 25442)) (assert_return (invoke "16s_good4" (i64.const 0)) (i64.const 25699)) (assert_return (invoke "16s_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "32u_good1" (i64.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good2" (i64.const 0)) (i64.const 1684234849)) (assert_return (invoke "32u_good3" (i64.const 0)) (i64.const 1701077858)) (assert_return (invoke "32u_good4" (i64.const 0)) (i64.const 1717920867)) (assert_return (invoke "32u_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "32s_good1" (i64.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good2" (i64.const 0)) (i64.const 1684234849)) (assert_return (invoke "32s_good3" (i64.const 0)) (i64.const 1701077858)) (assert_return (invoke "32s_good4" (i64.const 0)) (i64.const 1717920867)) (assert_return (invoke "32s_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "64_good1" (i64.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good2" (i64.const 0)) (i64.const 0x6867666564636261)) (assert_return (invoke "64_good3" (i64.const 0)) (i64.const 0x6968676665646362)) (assert_return (invoke "64_good4" (i64.const 0)) (i64.const 0x6a69686766656463)) (assert_return (invoke "64_good5" (i64.const 0)) (i64.const 122)) (assert_return (invoke "8u_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8s_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16u_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "16s_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32u_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "32s_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good1" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good2" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good3" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good4" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "64_good5" (i64.const 65503)) (i64.const 0)) (assert_return (invoke "8u_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8u_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "8s_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16u_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "16s_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32u_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good4" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "32s_good5" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "64_good1" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "64_good2" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "64_good3" (i64.const 65504)) (i64.const 0)) (assert_return (invoke "64_good4" (i64.const 65504)) (i64.const 0)) (assert_trap (invoke "64_good5" (i64.const 65504)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "8u_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "8s_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "16u_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "16s_bad" (i64.const 1)) "out of bounds memory access") (assert_trap (invoke "32u_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32s_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i64.const 1)) "out of bounds memory access") ;; Load f32 data with different offset/align arguments (module (memory i64 1) (data (i64.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f") (func (export "32_good1") (param $i i64) (result f32) (f32.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good2") (param $i i64) (result f32) (f32.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good3") (param $i i64) (result f32) (f32.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good4") (param $i i64) (result f32) (f32.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00' ) (func (export "32_good5") (param $i i64) (result f32) (f32.load offset=8 align=4 (local.get $i)) ;; nan:0x500001 '\01\00\d0\7f' ) (func (export "32_bad") (param $i i64) (drop (f32.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "32_good1" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i64.const 0)) (f32.const nan:0x500001)) (assert_return (invoke "32_good1" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good5" (i64.const 65524)) (f32.const 0.0)) (assert_return (invoke "32_good1" (i64.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good2" (i64.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good3" (i64.const 65525)) (f32.const 0.0)) (assert_return (invoke "32_good4" (i64.const 65525)) (f32.const 0.0)) (assert_trap (invoke "32_good5" (i64.const 65525)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "32_bad" (i64.const 1)) "out of bounds memory access") ;; Load f64 data with different offset/align arguments (module (memory i64 1) (data (i64.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f") (func (export "64_good1") (param $i i64) (result f64) (f64.load offset=0 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good2") (param $i i64) (result f64) (f64.load align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good3") (param $i i64) (result f64) (f64.load offset=1 align=1 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good4") (param $i i64) (result f64) (f64.load offset=2 align=2 (local.get $i)) ;; 0.0 '\00\00\00\00\00\00\00\00' ) (func (export "64_good5") (param $i i64) (result f64) (f64.load offset=18 align=8 (local.get $i)) ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f' ) (func (export "64_bad") (param $i i64) (drop (f64.load offset=4294967295 (local.get $i))) ) ) (assert_return (invoke "64_good1" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i64.const 0)) (f64.const nan:0xc000000000001)) (assert_return (invoke "64_good1" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good5" (i64.const 65510)) (f64.const 0.0)) (assert_return (invoke "64_good1" (i64.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good2" (i64.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good3" (i64.const 65511)) (f64.const 0.0)) (assert_return (invoke "64_good4" (i64.const 65511)) (f64.const 0.0)) (assert_trap (invoke "64_good5" (i64.const 65511)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "64_bad" (i64.const 1)) "out of bounds memory access") binaryen-version_108/test/spec/align.wast000066400000000000000000000701431423707623100206550ustar00rootroot00000000000000;; Test alignment annotation rules (module (memory 0) (func (drop (i32.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_s align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load8_u align=1 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_s align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load16_u align=2 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_s align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load32_u align=4 (i32.const 0))))) (module (memory 0) (func (drop (i64.load align=8 (i32.const 0))))) (module (memory 0) (func (drop (f32.load align=4 (i32.const 0))))) (module (memory 0) (func (drop (f64.load align=8 (i32.const 0))))) (module (memory 0) (func (i32.store8 align=1 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store16 align=2 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i32.store align=4 (i32.const 0) (i32.const 1)))) (module (memory 0) (func (i64.store8 align=1 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store16 align=2 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store32 align=4 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (i64.store align=8 (i32.const 0) (i64.const 1)))) (module (memory 0) (func (f32.store align=4 (i32.const 0) (f32.const 1.0)))) (module (memory 0) (func (f64.store align=8 (i32.const 0) (f64.const 1.0)))) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load8_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load16_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_s align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load32_u align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (i64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f32.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=0 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (drop (f64.load align=7 (i32.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store8 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store16 align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=0 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i32.store align=7 (i32.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store8 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store16 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store32 align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=0 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (i64.store align=7 (i32.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f32.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=0 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory 0) (func (f64.store align=7 (i32.const 0) (f32.const 0))))" ) "alignment" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_s align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load8_u align=2 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_s align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load16_u align=4 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_s align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load32_u align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f32.load align=8 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (drop (f64.load align=16 (i32.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store8 align=2 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store16 align=4 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i32.store align=8 (i32.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store8 align=2 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store16 align=4 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store32 align=8 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (i64.store align=16 (i32.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f32.store align=8 (i32.const 0) (f32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory 0) (func (f64.store align=16 (i32.const 0) (f64.const 0)))) "alignment must not be larger than natural" ) ;; Test aligned and unaligned read/write (module (memory 1) ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 (func (export "f32_align_switch") (param i32) (result f32) (local f32 f32) (local.set 1 (f32.const 10.0)) (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 (local.get 0)) ) ;; 0 (f32.store (i32.const 0) (local.get 1)) (local.set 2 (f32.load (i32.const 0))) (br $4) ) ;; default (f32.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=1 (i32.const 0))) (br $4) ) ;; 1 (f32.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=2 (i32.const 0))) (br $4) ) ;; 2 (f32.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f32.load align=4 (i32.const 0))) ) ;; 4 (local.get 2) ) (func (export "f64_align_switch") (param i32) (result f64) (local f64 f64) (local.set 1 (f64.const 10.0)) (block $8 (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 $8 (local.get 0)) ) ;; 0 (f64.store (i32.const 0) (local.get 1)) (local.set 2 (f64.load (i32.const 0))) (br $8) ) ;; default (f64.store align=1 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=1 (i32.const 0))) (br $8) ) ;; 1 (f64.store align=2 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=2 (i32.const 0))) (br $8) ) ;; 2 (f64.store align=4 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=4 (i32.const 0))) (br $8) ) ;; 4 (f64.store align=8 (i32.const 0) (local.get 1)) (local.set 2 (f64.load align=8 (i32.const 0))) ) ;; 8 (local.get 2) ) ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load (func (export "i32_align_switch") (param i32 i32) (result i32) (local i32 i32) (local.set 2 (i32.const 10)) (block $32 (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_s align=1 (i32.const 0))) ) ) (br $32) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load8_u align=1 (i32.const 0))) ) ) (br $32) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=2 (i32.const 0))) ) ) (br $32) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=2 (i32.const 0))) ) ) (br $32) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store (i32.const 0) (local.get 2)) (local.set 3 (i32.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i32.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i32.load align=4 (i32.const 0))) ) ) ) ;; 32 (local.get 3) ) (func (export "i64_align_switch") (param i32 i32) (result i64) (local i64 i64) (local.set 2 (i64.const 10)) (block $64 (block $32u (block $32s (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_s align=1 (i32.const 0))) ) ) (br $64) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load8_u align=1 (i32.const 0))) ) ) (br $64) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=2 (i32.const 0))) ) ) (br $64) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=2 (i32.const 0))) ) ) (br $64) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=4 (i32.const 0))) ) ) (br $64) ) ;; 32s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=4 (i32.const 0))) ) ) (br $64) ) ;; 32u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store (i32.const 0) (local.get 2)) (local.set 3 (i64.load (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store align=1 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=1 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store align=2 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=2 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store align=4 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=4 (i32.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 8)) (then (i64.store align=8 (i32.const 0) (local.get 2)) (local.set 3 (i64.load align=8 (i32.const 0))) ) ) ) ;; 64 (local.get 3) ) ) (assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) ;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything (module (memory 1) (func (export "store") (param i32 i64) (i64.store align=4 (local.get 0) (local.get 1)) ) (func (export "load") (param i32) (result i32) (i32.load (local.get 0)) ) ) (assert_trap (invoke "store" (i32.const 65532) (i64.const -1)) "out of bounds memory access") ;; No memory was changed (assert_return (invoke "load" (i32.const 65532)) (i32.const 0)) binaryen-version_108/test/spec/align64.wast000066400000000000000000000710231423707623100210250ustar00rootroot00000000000000;; Test alignment annotation rules (module (memory i64 0) (func (drop (i32.load8_s align=1 (i64.const 0))))) (module (memory i64 0) (func (drop (i32.load8_u align=1 (i64.const 0))))) (module (memory i64 0) (func (drop (i32.load16_s align=2 (i64.const 0))))) (module (memory i64 0) (func (drop (i32.load16_u align=2 (i64.const 0))))) (module (memory i64 0) (func (drop (i32.load align=4 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load8_s align=1 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load8_u align=1 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load16_s align=2 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load16_u align=2 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load32_s align=4 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load32_u align=4 (i64.const 0))))) (module (memory i64 0) (func (drop (i64.load align=8 (i64.const 0))))) (module (memory i64 0) (func (drop (f32.load align=4 (i64.const 0))))) (module (memory i64 0) (func (drop (f64.load align=8 (i64.const 0))))) (module (memory i64 0) (func (i32.store8 align=1 (i64.const 0) (i32.const 1)))) (module (memory i64 0) (func (i32.store16 align=2 (i64.const 0) (i32.const 1)))) (module (memory i64 0) (func (i32.store align=4 (i64.const 0) (i32.const 1)))) (module (memory i64 0) (func (i64.store8 align=1 (i64.const 0) (i64.const 1)))) (module (memory i64 0) (func (i64.store16 align=2 (i64.const 0) (i64.const 1)))) (module (memory i64 0) (func (i64.store32 align=4 (i64.const 0) (i64.const 1)))) (module (memory i64 0) (func (i64.store align=8 (i64.const 0) (i64.const 1)))) (module (memory i64 0) (func (f32.store align=4 (i64.const 0) (f32.const 1.0)))) (module (memory i64 0) (func (f64.store align=8 (i64.const 0) (f64.const 1.0)))) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load8_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load8_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load8_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load8_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load16_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load16_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load16_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load16_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i32.load align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load8_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load8_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load8_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load8_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load16_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load16_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load16_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load16_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load32_s align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load32_s align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load32_u align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load32_u align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (i64.load align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (f32.load align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (f32.load align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (f64.load align=0 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (drop (f64.load align=7 (i64.const 0)))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store8 align=0 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store8 align=7 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store16 align=0 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store16 align=7 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store align=0 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i32.store align=7 (i64.const 0) (i32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store8 align=0 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store8 align=7 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store16 align=0 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store16 align=7 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store32 align=0 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store32 align=7 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store align=0 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (i64.store align=7 (i64.const 0) (i64.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (f32.store align=0 (i64.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (f32.store align=7 (i64.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (f64.store align=0 (i64.const 0) (f32.const 0))))" ) "alignment" ) (assert_malformed (module quote "(module (memory i64 0) (func (f64.store align=7 (i64.const 0) (f32.const 0))))" ) "alignment" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load8_s align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load8_u align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load16_s align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load16_u align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load8_s align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load8_u align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load16_s align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load16_u align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load32_s align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load32_u align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load align=16 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (f32.load align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (f64.load align=16 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load8_s align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load8_u align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load16_s align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load16_u align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i32.load align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load8_s align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load8_u align=2 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load16_s align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load16_u align=4 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load32_s align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load32_u align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (i64.load align=16 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (f32.load align=8 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (drop (f64.load align=16 (i64.const 0))))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i32.store8 align=2 (i64.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i32.store16 align=4 (i64.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i32.store align=8 (i64.const 0) (i32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i64.store8 align=2 (i64.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i64.store16 align=4 (i64.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i64.store32 align=8 (i64.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (i64.store align=16 (i64.const 0) (i64.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (f32.store align=8 (i64.const 0) (f32.const 0)))) "alignment must not be larger than natural" ) (assert_invalid (module (memory i64 0) (func (f64.store align=16 (i64.const 0) (f64.const 0)))) "alignment must not be larger than natural" ) ;; Test aligned and unaligned read/write (module (memory i64 1) ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 (func (export "f32_align_switch") (param i32) (result f32) (local f32 f32) (local.set 1 (f32.const 10.0)) (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 (local.get 0)) ) ;; 0 (f32.store (i64.const 0) (local.get 1)) (local.set 2 (f32.load (i64.const 0))) (br $4) ) ;; default (f32.store align=1 (i64.const 0) (local.get 1)) (local.set 2 (f32.load align=1 (i64.const 0))) (br $4) ) ;; 1 (f32.store align=2 (i64.const 0) (local.get 1)) (local.set 2 (f32.load align=2 (i64.const 0))) (br $4) ) ;; 2 (f32.store align=4 (i64.const 0) (local.get 1)) (local.set 2 (f32.load align=4 (i64.const 0))) ) ;; 4 (local.get 2) ) (func (export "f64_align_switch") (param i32) (result f64) (local f64 f64) (local.set 1 (f64.const 10.0)) (block $8 (block $4 (block $2 (block $1 (block $default (block $0 (br_table $0 $default $1 $2 $4 $8 (local.get 0)) ) ;; 0 (f64.store (i64.const 0) (local.get 1)) (local.set 2 (f64.load (i64.const 0))) (br $8) ) ;; default (f64.store align=1 (i64.const 0) (local.get 1)) (local.set 2 (f64.load align=1 (i64.const 0))) (br $8) ) ;; 1 (f64.store align=2 (i64.const 0) (local.get 1)) (local.set 2 (f64.load align=2 (i64.const 0))) (br $8) ) ;; 2 (f64.store align=4 (i64.const 0) (local.get 1)) (local.set 2 (f64.load align=4 (i64.const 0))) (br $8) ) ;; 4 (f64.store align=8 (i64.const 0) (local.get 1)) (local.set 2 (f64.load align=8 (i64.const 0))) ) ;; 8 (local.get 2) ) ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load (func (export "i32_align_switch") (param i32 i32) (result i32) (local i32 i32) (local.set 2 (i32.const 10)) (block $32 (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i64.const 0) (local.get 2)) (local.set 3 (i32.load8_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load8_s align=1 (i64.const 0))) ) ) (br $32) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store8 (i64.const 0) (local.get 2)) (local.set 3 (i32.load8_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store8 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load8_u align=1 (i64.const 0))) ) ) (br $32) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_s align=2 (i64.const 0))) ) ) (br $32) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store16 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store16 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store16 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i32.load16_u align=2 (i64.const 0))) ) ) (br $32) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i32.store (i64.const 0) (local.get 2)) (local.set 3 (i32.load (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i32.store align=1 (i64.const 0) (local.get 2)) (local.set 3 (i32.load align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i32.store align=2 (i64.const 0) (local.get 2)) (local.set 3 (i32.load align=2 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i32.store align=4 (i64.const 0) (local.get 2)) (local.set 3 (i32.load align=4 (i64.const 0))) ) ) ) ;; 32 (local.get 3) ) (func (export "i64_align_switch") (param i32 i32) (result i64) (local i64 i64) (local.set 2 (i64.const 10)) (block $64 (block $32u (block $32s (block $16u (block $16s (block $8u (block $8s (block $0 (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) ) ;; 0 (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i64.const 0) (local.get 2)) (local.set 3 (i64.load8_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load8_s align=1 (i64.const 0))) ) ) (br $64) ) ;; 8s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store8 (i64.const 0) (local.get 2)) (local.set 3 (i64.load8_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store8 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load8_u align=1 (i64.const 0))) ) ) (br $64) ) ;; 8u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_s align=2 (i64.const 0))) ) ) (br $64) ) ;; 16s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store16 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store16 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store16 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load16_u align=2 (i64.const 0))) ) ) (br $64) ) ;; 16u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_s (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=2 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_s align=4 (i64.const 0))) ) ) (br $64) ) ;; 32s (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store32 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_u (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store32 align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store32 align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=2 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store32 align=4 (i64.const 0) (local.get 2)) (local.set 3 (i64.load32_u align=4 (i64.const 0))) ) ) (br $64) ) ;; 32u (if (i32.eq (local.get 1) (i32.const 0)) (then (i64.store (i64.const 0) (local.get 2)) (local.set 3 (i64.load (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 1)) (then (i64.store align=1 (i64.const 0) (local.get 2)) (local.set 3 (i64.load align=1 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 2)) (then (i64.store align=2 (i64.const 0) (local.get 2)) (local.set 3 (i64.load align=2 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 4)) (then (i64.store align=4 (i64.const 0) (local.get 2)) (local.set 3 (i64.load align=4 (i64.const 0))) ) ) (if (i32.eq (local.get 1) (i32.const 8)) (then (i64.store align=8 (i64.const 0) (local.get 2)) (local.set 3 (i64.load align=8 (i64.const 0))) ) ) ) ;; 64 (local.get 3) ) ) (assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) (assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) (assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) ;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything (module (memory i64 1) (func (export "store") (param i64 i64) (i64.store align=4 (local.get 0) (local.get 1)) ) (func (export "load") (param i64) (result i32) (i32.load (local.get 0)) ) ) (assert_trap (invoke "store" (i64.const 65532) (i64.const -1)) "out of bounds memory access") ;; No memory was changed (assert_return (invoke "load" (i64.const 65532)) (i32.const 0)) binaryen-version_108/test/spec/array.wast000066400000000000000000000067411423707623100207040ustar00rootroot00000000000000;; XXX BINARYEN: rename array.new_default => array.new_default_with_rtt ;; Type syntax (module (type (array i8)) (type (array i16)) (type (array i32)) (type (array i64)) (type (array f32)) (type (array f64)) (type (array anyref)) (type (array (ref data))) (type (array (ref 0))) (type (array (ref null 1))) (type (array (rtt 1))) (type (array (rtt 10 1))) (type (array (mut i8))) (type (array (mut i16))) (type (array (mut i32))) (type (array (mut i64))) (type (array (mut i32))) (type (array (mut i64))) (type (array (mut anyref))) (type (array (mut (ref data)))) (type (array (mut (ref 0)))) (type (array (mut (ref null i31)))) (type (array (mut (rtt 0)))) (type (array (mut (rtt 10 0)))) ) (assert_invalid (module (type (array (mut (ref null 10)))) ) "unknown type" ) ;; Binding structure (module (type $s0 (array (ref $s1))) (type $s1 (array (ref $s0))) (func (param (ref $forward))) (type $forward (array i32)) ) (assert_invalid (module (type (array (ref 1)))) "unknown type" ) (assert_invalid (module (type (array (mut (ref 1))))) "unknown type" ) ;; Basic instructions (module (type $vec (array f32)) (type $mvec (array (mut f32))) (func $get (param $i i32) (param $v (ref $vec)) (result f32) (array.get $vec (local.get $v) (local.get $i)) ) (func (export "get") (param $i i32) (result f32) (call $get (local.get $i) (array.new_default_with_rtt $vec (i32.const 3) (rtt.canon $vec)) ) ) (func $set_get (param $i i32) (param $v (ref $mvec)) (param $y f32) (result f32) (array.set $mvec (local.get $v) (local.get $i) (local.get $y)) (array.get $mvec (local.get $v) (local.get $i)) ) (func (export "set_get") (param $i i32) (param $y f32) (result f32) (call $set_get (local.get $i) (array.new_default_with_rtt $mvec (i32.const 3) (rtt.canon $mvec)) (local.get $y) ) ) (func $len (param $v (ref $vec)) (result i32) (array.len $vec (local.get $v)) ) (func (export "len") (result i32) (call $len (array.new_default_with_rtt $vec (i32.const 3) (rtt.canon $vec))) ) ) (assert_return (invoke "get" (i32.const 0)) (f32.const 0)) (assert_return (invoke "set_get" (i32.const 1) (f32.const 7)) (f32.const 7)) (assert_return (invoke "len") (i32.const 3)) (assert_trap (invoke "get" (i32.const 10)) "out of bounds") (assert_trap (invoke "set_get" (i32.const 10) (f32.const 7)) "out of bounds") (assert_invalid (module (type $a (array i64)) (func (export "array.set-immutable") (param $a (ref $a)) (array.set $a (local.get $a) (i32.const 0) (i64.const 1)) ) ) "array is immutable" ) ;; Null dereference (module (type $t (array (mut i32))) (func (export "array.get-null") (local (ref null $t)) (drop (array.get $t (local.get 0) (i32.const 0))) ) (func (export "array.set-null") (local (ref null $t)) (array.set $t (local.get 0) (i32.const 0) (i32.const 0)) ) ) (assert_trap (invoke "array.get-null") "null array") (assert_trap (invoke "array.set-null") "null array") (assert_invalid (module (type $t (array i32)) (func (export "array.new-null") (local (ref null (rtt $t))) (drop (array.new_default_with_rtt $t (i32.const 1) (i32.const 3) (local.get 0))) ) ) "type mismatch" ) (assert_invalid (module (type $t (array (mut i32))) (func (export "array.new_default_with_rtt-null") (local (ref null (rtt $t))) (drop (array.new_default_with_rtt $t (i32.const 3) (local.get 0))) ) ) "type mismatch" ) binaryen-version_108/test/spec/atomics.wast000066400000000000000000000002101423707623100212060ustar00rootroot00000000000000(module (memory $0 (shared 23 256)) (func (export "atomic-fence") (atomic.fence) ) ) (assert_return (invoke "atomic-fence")) binaryen-version_108/test/spec/binary-leb128.wast000066400000000000000000001111601423707623100220350ustar00rootroot00000000000000;; Unsigned LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\05\04\01" ;; Memory section with 1 entry "\00\82\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\00" ;; no max, minimum 2 ) (module binary "\00asm" "\01\00\00\00" "\05\06\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\00" ;; max 2 ) (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\07\01" ;; Data section with 1 entry "\80\00" ;; Memory index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with contents "" ) (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\07\01" ;; Element section with 1 entry "\80\00" ;; Table index 0, encoded with 2 bytes "\41\00\0b\00" ;; (i32.const 0) with no elements ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\8a\00" ;; section size 10, encoded with 2 bytes "\01" ;; name byte count "1" ;; name "23456789" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0b" ;; section size "\88\00" ;; name byte count 8, encoded with 2 bytes "12345678" ;; name "9" ;; sequence of bytes ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\82\00" ;; num params 2, encoded with 2 bytes "\7f\7e" ;; param type "\01" ;; num results "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\00" ;; num results 1, encoded with 2 bytes "\7f" ;; result type ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\88\00" ;; module name length 8, encoded with 2 bytes "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\00" ;; entity name length 9, encoded with 2 bytes "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\17\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\00" ;; import signature index, encoded with 2 bytes ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\00" ;; function 0 signature index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\82\00" ;; string length 2, encoded with 2 bytes "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\07\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\00" ;; export func index, encoded with 2 bytes "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\00" ;; num functions, encoded with 2 bytes "\02\00\0b" ;; function body ) ;; Signed LEB128 can have non-minimal length (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\00" ;; i32.const 0 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\7f" ;; i32.const -1 "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\07\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with unused bits set "\0b" ;; end ) (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with unused bits unset "\0b" ;; end ) ;; Unsigned LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\08\01" ;; Memory section with 1 entry "\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\0a\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\80\00" ;; max 2 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0b\01" ;; Data section with 1 entry "\80\80\80\80\80\00" ;; Memory index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0b\01" ;; Element section with 1 entry "\80\80\80\80\80\00" ;; Table index 0 with one byte too many "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\80\00" ;; section size 3 with one byte too many "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\0A" ;; section size "\83\80\80\80\80\00" ;; name byte count 3 with one byte too many "123" ;; name "4" ;; sequence of bytes ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0c\01" ;; type section "\60" ;; func type "\82\80\80\80\80\00" ;; num params 2 with one byte too many "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\08\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\80\00" ;; num result 1 with one byte too many "\7f" ;; result type ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\88\80\80\80\80\00" ;; module name length 8 with one byte too many "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\80\00" ;; entity name length 9 with one byte too many "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1b\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\80\00" ;; import signature index 0 with one byte too many ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\03\01" ;; function section "\80\80\80\80\80\00" ;; function 0 signature index with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\82\80\80\80\80\00" ;; string length 2 with one byte too many "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0b\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\80\00" ;; export func index 0 with one byte too many "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\05" ;; section size "\81\80\80\80\80\00" ;; num functions 1 with one byte too many "\02\00\0b" ;; function body ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\80\00" ;; alignment 2 with one byte too many "\03" ;; offset 3 "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\12\01" ;; Code section ;; function 0 "\10\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\80\00" ;; offset 2 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Signed LEB128 must not be overlong (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many "\0b" ;; end ) "integer representation too long" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\10\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many "\0b" ;; end ) "integer representation too long" ) ;; Unsigned LEB128s zero-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\07\01" ;; Memory section with 1 entry "\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\10" ;; max 2 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\09\01" ;; Memory section with 1 entry "\01\82\00" ;; minimum 2 "\82\80\80\80\40" ;; max 2 with some unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; Memory section with 1 entry "\00\00" ;; no max, minimum 0 "\0b\0a\01" ;; Data section with 1 entry "\80\80\80\80\10" ;; Memory index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with contents "" ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\04\01" ;; Table section with 1 entry "\70\00\00" ;; no max, minimum 0, funcref "\09\0a\01" ;; Element section with 1 entry "\80\80\80\80\10" ;; Table index 0 with unused bits set "\41\00\0b\00" ;; (i32.const 0) with no elements ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\83\80\80\80\10" ;; section size 3 with unused bits set "\01" ;; name byte count "1" ;; name "2" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ;; custom section "\09" ;; section size "\83\80\80\80\40" ;; name byte count 3 with unused bits set "123" ;; name "4" ;; sequence of bytes ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\82\80\80\80\10" ;; num params 2 with unused bits set "\7f\7e" ;; param type "\01" ;; num result "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\0b\01" ;; type section "\60" ;; func type "\02" ;; num params "\7f\7e" ;; param type "\81\80\80\80\40" ;; num result 1 with unused bits set "\7f" ;; result type ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\88\80\80\80\10" ;; module name length 8 with unused bits set "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\89\80\80\80\40" ;; entity name length 9 with unused bits set "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\00" ;; import signature index ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; function type "\02\1a\01" ;; import section "\08" ;; module name length "\73\70\65\63\74\65\73\74" ;; module name "\09" ;; entity name length 9 "\70\72\69\6e\74\5f\69\33\32" ;; entity name "\00" ;; import kind "\80\80\80\80\10" ;; import signature index 0 with unused bits set ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; function type "\03\06\01" ;; function section "\80\80\80\80\10" ;; function 0 signature index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\82\80\80\80\10" ;; string length 2 with unused bits set "\66\31" ;; export name f1 "\00" ;; export kind "\00" ;; export func index "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\07\0a\01" ;; export section "\02" ;; string length 2 "\66\31" ;; export name f1 "\00" ;; export kind "\80\80\80\80\10" ;; export func index with unused bits set "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; fun type "\03\02\01\00" ;; function section "\0a" ;; code section "\08" ;; section size "\81\80\80\80\10" ;; num functions 1 with unused bits set "\02\00\0b" ;; function body ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\10" ;; alignment 2 with unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\10\01" ;; Code section ;; function 0 "\0e\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\28" ;; i32.load "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\00" ;; offset 0 "\1a" ;; drop "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\10" ;; alignment 2 with unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\82\80\80\80\40" ;; alignment 2 with some unused bits set "\03" ;; offset 3 "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\03" ;; alignment 2 "\82\80\80\80\10" ;; offset 2 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\01" ;; Memory section "\0a\11\01" ;; Code section ;; function 0 "\0f\01\01" ;; local type count "\7f" ;; i32 "\41\00" ;; i32.const 0 "\41\03" ;; i32.const 3 "\36" ;; i32.store "\02" ;; alignment 2 "\82\80\80\80\40" ;; offset 2 with some unused bits set "\0b" ;; end ) "integer too large" ) ;; Signed LEB128s sign-extend (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\70" ;; i32.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0a\01" ;; Global section with 1 entry "\7f\00" ;; i32, immutable "\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set "\0b" ;; end ) "integer too large" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0f\01" ;; Global section with 1 entry "\7e\00" ;; i64, immutable "\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset "\0b" ;; end ) "integer too large" ) binaryen-version_108/test/spec/binary.wast000066400000000000000000000700241423707623100210450ustar00rootroot00000000000000(module binary "\00asm\01\00\00\00") (module binary "\00asm" "\01\00\00\00") (module $M1 binary "\00asm\01\00\00\00") (module $M2 binary "\00asm" "\01\00\00\00") (assert_malformed (module binary "") "unexpected end") (assert_malformed (module binary "\01") "unexpected end") (assert_malformed (module binary "\00as") "unexpected end") (assert_malformed (module binary "asm\00") "magic header not detected") (assert_malformed (module binary "msa\00") "magic header not detected") (assert_malformed (module binary "msa\00\01\00\00\00") "magic header not detected") (assert_malformed (module binary "msa\00\00\00\00\01") "magic header not detected") (assert_malformed (module binary "asm\01\00\00\00\00") "magic header not detected") (assert_malformed (module binary "wasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\7fasm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\80asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\82asm\01\00\00\00") "magic header not detected") (assert_malformed (module binary "\ffasm\01\00\00\00") "magic header not detected") ;; 8-byte endian-reversed. (assert_malformed (module binary "\00\00\00\01msa\00") "magic header not detected") ;; Middle-endian byte orderings. (assert_malformed (module binary "a\00ms\00\01\00\00") "magic header not detected") (assert_malformed (module binary "sm\00a\00\00\01\00") "magic header not detected") ;; Upper-cased. (assert_malformed (module binary "\00ASM\01\00\00\00") "magic header not detected") ;; EBCDIC-encoded magic. (assert_malformed (module binary "\00\81\a2\94\01\00\00\00") "magic header not detected") ;; Leading UTF-8 BOM. (assert_malformed (module binary "\ef\bb\bf\00asm\01\00\00\00") "magic header not detected") ;; Malformed binary version. (assert_malformed (module binary "\00asm") "unexpected end") (assert_malformed (module binary "\00asm\01") "unexpected end") (assert_malformed (module binary "\00asm\01\00\00") "unexpected end") (assert_malformed (module binary "\00asm\00\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0d\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\0e\00\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\01\00\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\01\00") "unknown binary version") (assert_malformed (module binary "\00asm\00\00\00\01") "unknown binary version") ;; call_indirect reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\01" ;; call_indirect reserved byte is not equal to zero! "\0b" ;; end ) "zero flag expected" ) ;; call_indirect reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0a\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0b\01" ;; Code section ;; function 0 "\08\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0c\01" ;; Code section ;; function 0 "\09\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\04\04\01\70\00\00" ;; Table section "\0a\0d\01" ;; Code section ;; function 0 "\0a\00" "\41\00" ;; i32.const 0 "\11\00" ;; call_indirect (type 0) "\80\80\80\80\00" ;; call_indirect reserved byte "\0b" ;; end ) "zero flag expected" ) ;; memory.grow reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\01" ;; memory.grow reserved byte is not equal to zero! "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.grow reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0a\01" ;; Code section ;; function 0 "\08\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0b\01" ;; Code section ;; function 0 "\09\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0c\01" ;; Code section ;; function 0 "\0a\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0d\01" ;; Code section ;; function 0 "\0b\00" "\41\00" ;; i32.const 0 "\40" ;; memory.grow "\80\80\80\80\00" ;; memory.grow reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.size reserved byte equal to zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\07\01" ;; Code section ;; function 0 "\05\00" "\3f" ;; memory.size "\01" ;; memory.size reserved byte is not equal to zero! "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; memory.size reserved byte should not be a "long" LEB128 zero. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\08\01" ;; Code section ;; function 0 "\06\00" "\3f" ;; memory.size "\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; Same as above for 3, 4, and 5-byte zero encodings. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\09\01" ;; Code section ;; function 0 "\07\00" "\3f" ;; memory.size "\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0a\01" ;; Code section ;; function 0 "\08\00" "\3f" ;; memory.size "\80\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\05\03\01\00\00" ;; Memory section "\0a\0b\01" ;; Code section ;; function 0 "\09\00" "\3f" ;; memory.size "\80\80\80\80\00" ;; memory.size reserved byte "\1a" ;; drop "\0b" ;; end ) "zero flag expected" ) ;; No more than 2^32 locals. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0c\01" ;; Code section ;; function 0 "\0a\02" "\ff\ff\ff\ff\0f\7f" ;; 0xFFFFFFFF i32 "\02\7e" ;; 0x00000002 i64 "\0b" ;; end ) "too many locals" ) ;; Local count can be 0. (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\0a\0a\01" ;; Code section ;; function 0 "\08\03" "\00\7f" ;; 0 i32 "\00\7e" ;; 0 i64 "\02\7d" ;; 2 f32 "\0b" ;; end ) ;; Function section has non-zero count, but code section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions ) "function and code section have inconsistent lengths" ) ;; Code section has non-zero count, but function section is absent. (assert_malformed (module binary "\00asm" "\01\00\00\00" "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count > code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\03\02\00\00" ;; Function section with 2 functions "\0a\04\01\02\00\0b" ;; Code section with 1 empty function ) "function and code section have inconsistent lengths" ) ;; Function section count < code section count (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section with 1 function "\0a\07\02\02\00\0b\02\00\0b" ;; Code section with 2 empty functions ) "function and code section have inconsistent lengths" ) ;; Function section has zero count, and code section is absent. (module binary "\00asm" "\01\00\00\00" "\03\01\00" ;; Function section with 0 functions ) ;; Code section has zero count, and function section is absent. (module binary "\00asm" "\01\00\00\00" "\0a\01\00" ;; Code section with 0 functions ) ;; Type count can be zero (module binary "\00asm" "\01\00\00\00" "\01\01\00" ;; type count can be zero ) ;; 2 type declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\02" ;; type section with inconsistent count (2 declared, 1 given) "\60\00\00" ;; 1st type ;; "\60\00\00" ;; 2nd type (missed) ) "unexpected end of section or function" ) ;; 1 type declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01" ;; type section with inconsistent count (1 declared, 2 given) "\60\00\00" ;; 1st type "\60\00\00" ;; 2nd type (redundant) ) "section size mismatch" ) ;; Import count can be zero (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\01\00" ;; import count can be zero ) ;; 2 import declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\05\01" ;; type section "\60\01\7f\00" ;; type 0 "\02\16\02" ;; import section with inconsistent count (2 declared, 1 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (missed) ) "unexpected end of section or function" ) ;; 1 import declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\09\02" ;; type section "\60\01\7f\00" ;; type 0 "\60\01\7d\00" ;; type 1 "\02\2b\01" ;; import section with inconsistent count (1 declared, 2 given) ;; 1st import "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 "\00\00" ;; import kind, import signature index ;; 2nd import ;; (redundant) "\08" ;; string length "\73\70\65\63\74\65\73\74" ;; spectest "\09" ;; string length "\70\72\69\6e\74\5f\66\33\32" ;; print_f32 "\00\01" ;; import kind, import signature index ) "section size mismatch" ) ;; Table count can be zero (module binary "\00asm" "\01\00\00\00" "\04\01\00" ;; table count can be zero ) ;; 1 table declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\04\01\01" ;; table section with inconsistent count (1 declared, 0 given) ;; "\70\01\00\00" ;; table entity ) "unexpected end of section or function" ) ;; Memory count can be zero (module binary "\00asm" "\01\00\00\00" "\05\01\00" ;; memory count can be zero ) ;; 1 memory declared, 0 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\01\01" ;; memory section with inconsistent count (1 declared, 0 given) ;; "\00\00" ;; memory 0 (missed) ) "unexpected end of section or function" ) ;; Global count can be zero (module binary "\00asm" "\01\00\00\00" "\06\01\00" ;; global count can be zero ) ;; 2 global declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\06\02" ;; global section with inconsistent count (2 declared, 1 given) "\7f\00\41\00\0b" ;; global 0 ;; "\7f\00\41\00\0b" ;; global 1 (missed) ) "unexpected end of section or function" ) ;; 1 global declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\0b\01" ;; global section with inconsistent count (1 declared, 2 given) "\7f\00\41\00\0b" ;; global 0 "\7f\00\41\00\0b" ;; global 1 (redundant) ) "section size mismatch" ) ;; Export count can be 0 (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\01\00" ;; export count can be zero "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) ;; 2 export declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\06\02" ;; export section with inconsistent count (2 declared, 1 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index ;; "\02" ;; export 1 (missed) ;; "\66\32" ;; export name ;; "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "unexpected end of section or function" ) ;; 1 export declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\03\02\00\00" ;; func section "\07\0b\01" ;; export section with inconsistent count (1 declared, 2 given) "\02" ;; export 0 "\66\31" ;; export name "\00\00" ;; export kind, export func index "\02" ;; export 1 (redundant) "\66\32" ;; export name "\00\01" ;; export kind, export func index "\0a\07\02" ;; code section "\02\00\0b" ;; function body 0 "\02\00\0b" ;; function body 1 ) "section size mismatch" ) ;; elem segment count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\01\00" ;; elem segment count can be zero "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) ;; 2 elem segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\07\02" ;; elem with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\00" ;; elem 0 ;; "\00\41\00\0b\01\00" ;; elem 1 (missed) "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "invalid value type" ) ;; 1 elem segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\04\04\01" ;; table section "\70\00\01" ;; table 0 "\09\0d\01" ;; elem with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\00" ;; elem 0 "\00\41\00\0b\01\00" ;; elem 1 (redundant) "\0a\04\01" ;; code section "\02\00\0b" ;; function body ) "section size mismatch" ) ;; data segment count can be zero (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\01\00" ;; data segment count can be zero ) ;; 2 data segment declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\07\02" ;; data with inconsistent segment count (2 declared, 1 given) "\00\41\00\0b\01\61" ;; data 0 ;; "\00\41\01\0b\01\62" ;; data 1 (missed) ) "unexpected end of section or function" ) ;; 1 data segment declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0d\01" ;; data with inconsistent segment count (1 declared, 2 given) "\00\41\00\0b\01\61" ;; data 0 "\00\41\01\0b\01\62" ;; data 1 (redundant) ) "section size mismatch" ) ;; data segment has 7 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\03\0b" ;; data segment 0 "\07" ;; data segment size with inconsistent lengths (7 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "unexpected end of section or function" ) ;; data segment has 5 bytes declared, but 6 bytes given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\01" ;; memory 0 "\0b\0c\01" ;; data section "\00\41\00\0b" ;; data segment 0 "\05" ;; data segment size with inconsistent lengths (5 declared, 6 given) "\61\62\63\64\65\66" ;; 6 bytes given ) "section size mismatch" ) ;; br_table target count can be zero (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\11\01" ;; code section "\0f\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\00" ;; br_table target count can be zero "\02" ;; break depth for default "\0b\0b\0b" ;; end ) ;; 2 br_table target declared, 1 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\12\01" ;; code section "\10\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\02" ;; br_table with inconsistent target count (2 declared, 1 given) "\00" ;; break depth 0 ;; "\01" ;; break depth 1 (missed) "\02" ;; break depth for default "\0b\0b\0b" ;; end ) "unexpected end of section or function" ) ;; 1 br_table target declared, 2 given (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01" ;; type section "\60\00\00" ;; type 0 "\03\02\01\00" ;; func section "\0a\12\01" ;; code section "\11\00" ;; func 0 "\02\40" ;; block 0 "\41\01" ;; condition of if 0 "\04\40" ;; if 0 "\41\01" ;; index of br_table element "\0e\01" ;; br_table with inconsistent target count (1 declared, 2 given) "\00" ;; break depth 0 "\01" ;; break depth 1 "\02" ;; break depth for default "\0b\0b\0b" ;; end ) "invalid value type" ) ;; Start section (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) ;; Multiple start sections (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\04\01\60\00\00" ;; Type section "\03\02\01\00" ;; Function section "\08\01\00" ;; Start section: function 0 "\08\01\00" ;; Start section: function 0 "\0a\04\01" ;; Code section ;; function 0 "\02\00" "\0b" ;; end ) "junk after last section" ) binaryen-version_108/test/spec/block.wast000066400000000000000000000733241423707623100206610ustar00rootroot00000000000000;; Test `block` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (block) (block $l) ) (func (export "singular") (result i32) (block (nop)) (block (result i32) (i32.const 7)) ) (func (export "multi") (result i32) (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) (block (result i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 8)) ) (func (export "nested") (result i32) (block (result i32) (block (call $dummy) (block) (nop)) (block (result i32) (call $dummy) (i32.const 9)) ) ) (func (export "deep") (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (block (result i32) (call $dummy) (i32.const 150) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) )) ) (func (export "as-select-first") (result i32) (select (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (block (result i32) (i32.const 1))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (block (result i32) (i32.const 1)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (block (result i32) (i32.const 1)) (call $dummy)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (block (result i32) (i32.const 1))) ) (func (export "as-if-condition") (block (result i32) (i32.const 1)) (if (then (call $dummy))) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (block (result i32) (i32.const 1))) (else (i32.const 2))) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 1) (then (i32.const 2)) (else (block (result i32) (i32.const 1)))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (block (result i32) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (block (result i32) (i32.const 1)))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (block (result i32) (i32.const 1)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (block (result i32) (i32.const 1)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (block (result i32) (i32.const 1)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (block (result i32) (i32.const 1)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (block (result i32) (i32.const 0)) ) ) ) (func (export "as-store-first") (block (result i32) (i32.const 1)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (block (result i32) (i32.const 1)) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (block (result i32) (i32.const 1))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (block (result i32) (i32.const 1))) ) (func (export "as-return-value") (result i32) (block (result i32) (i32.const 1)) (return) ) (func (export "as-drop-operand") (drop (block (result i32) (i32.const 1))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (block (result i32) (i32.const 1)))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (block (result i32) (i32.const 1))) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (block (result i32) (i32.const 1))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (block (result i32) (i32.const 1))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (block (result i32) (i32.const 1))) ) (func (export "as-unary-operand") (result i32) (i32.ctz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-binary-operand") (result i32) (i32.mul (block (result i32) (call $dummy) (i32.const 3)) (block (result i32) (call $dummy) (i32.const 4)) ) ) (func (export "as-test-operand") (result i32) (i32.eqz (block (result i32) (call $dummy) (i32.const 13))) ) (func (export "as-compare-operand") (result i32) (f32.gt (block (result f32) (call $dummy) (f32.const 3)) (block (result f32) (call $dummy) (f32.const 3)) ) ) (func (export "break-bare") (result i32) (block (br 0) (unreachable)) (block (br_if 0 (i32.const 1)) (unreachable)) (block (br_table 0 (i32.const 0)) (unreachable)) (block (br_table 0 0 0 (i32.const 1)) (unreachable)) (i32.const 19) ) (func (export "break-value") (result i32) (block (result i32) (br 0 (i32.const 18)) (i32.const 19)) ) (func (export "break-repeated") (result i32) (block (result i32) (br 0 (i32.const 18)) (br 0 (i32.const 19)) (drop (br_if 0 (i32.const 20) (i32.const 0))) (drop (br_if 0 (i32.const 20) (i32.const 1))) (br 0 (i32.const 21)) (br_table 0 (i32.const 22) (i32.const 4)) (br_table 0 0 0 (i32.const 23) (i32.const 1)) (i32.const 21) ) ) (func (export "break-inner") (result i32) (local i32) (local.set 0 (i32.const 0)) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (result i32) (br 1 (i32.const 0x1)))))) (local.set 0 (i32.add (local.get 0) (block (result i32) (block (br 0)) (i32.const 0x2)))) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (br 0 (i32.const 0x4))))) ) (local.set 0 (i32.add (local.get 0) (block (result i32) (i32.ctz (block (result i32) (br 1 (i32.const 0x8)))))) ) (local.get 0) ) (func (export "effects") (result i32) (local i32) (block (local.set 0 (i32.const 1)) (local.set 0 (i32.mul (local.get 0) (i32.const 3))) (local.set 0 (i32.sub (local.get 0) (i32.const 5))) (local.set 0 (i32.mul (local.get 0) (i32.const 7))) (br 0) (local.set 0 (i32.mul (local.get 0) (i32.const 100))) ) (i32.eq (local.get 0) (i32.const -14)) ) ) (assert_return (invoke "empty")) (assert_return (invoke "singular") (i32.const 7)) (assert_return (invoke "multi") (i32.const 8)) (assert_return (invoke "nested") (i32.const 9)) (assert_return (invoke "deep") (i32.const 150)) (assert_return (invoke "as-select-first") (i32.const 1)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 1)) (assert_return (invoke "as-loop-mid") (i32.const 1)) (assert_return (invoke "as-loop-last") (i32.const 1)) (assert_return (invoke "as-if-condition")) (assert_return (invoke "as-if-then") (i32.const 1)) (assert_return (invoke "as-if-else") (i32.const 2)) (assert_return (invoke "as-br_if-first") (i32.const 1)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 1)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-local.set-value") (i32.const 1)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 12)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-operand") (i32.const 0)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value") (i32.const 18)) (assert_return (invoke "break-repeated") (i32.const 18)) (assert_return (invoke "break-inner") (i32.const 0xf)) (assert_return (invoke "effects") (i32.const 1)) (assert_invalid (module (func $type-empty-i32 (result i32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (block))) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-void (block (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-void (block (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-void (block (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-void (block (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i32 (result i32) (block (result i32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-i64 (result i64) (block (result i64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f32 (result f32) (block (result f32)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-f64 (result f64) (block (result f64)) )) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-block (i32.const 0) (block (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-loop (i32.const 0) (loop (block (result i32)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (block (result i32)) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i32 (result i32) (block (result i32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-i64 (result i64) (block (result i64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f32 (result f32) (block (result f32) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-f64 (result f64) (block (result f64) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-i64 (result i32) (block (result i32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f32 (result i32) (block (result i32) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i32-vs-f64 (result i32) (block (result i32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-i32 (result i64) (block (result i64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f32 (result i64) (block (result i64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-i64-vs-f64 (result i64) (block (result i64) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i32 (result f32) (block (result f32) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-i64 (result f32) (block (result f32) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f32-vs-f64 (result f32) (block (result f32) (f64.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i32 (result f64) (block (result f64) (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-i64 (result f64) (block (result f64) (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-f64-vs-f32 (result f32) (block (result f64) (f32.const 0.0)) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-i64 (result i32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f32 (result i32) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i32-f64 (result i32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-i32 (result i64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f32 (result i64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-i64-f64 (result i64) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i32 (result f32) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-i64 (result f32) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f32-f64 (result f32) (block (result f64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i32 (result f64) (block (result i32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-i64 (result f64) (block (result i64) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-value-unreached-select-f64-f32 (result f64) (block (result f32) (select (unreachable) (unreachable) (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i32 (result i32) (block (result i32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-i64 (result i64) (block (result i64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f32 (result f32) (block (result f32) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-f64 (result f64) (block (result f64) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i32 (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-i64 (result i64) (block (result i64) (br 0) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f32 (result f32) (block (result f32) (br 0) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-empty-vs-f64 (result f64) (block (result f64) (br 0) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (i64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (f32.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i32 (result f64) (block (result i64) (br 0 (i32.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (f64.const 1.0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i32 (result i32) (block (result i32) (br 0 (nop)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-i64 (result i64) (block (result i64) (br 0 (nop)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f32 (result f32) (block (result f32) (br 0 (nop)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-f64 (result f64) (block (result f64) (br 0 (nop)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-i64 (result i32) (block (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f32 (result i32) (block (result i32) (br 0 (f32.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i32-vs-f64 (result i32) (block (result i32) (br 0 (f64.const 1.0)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-i32 (result i64) (block (result i64) (br 0 (i32.const 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f32 (result i64) (block (result i64) (br 0 (f32.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-i64-vs-f64 (result i64) (block (result i64) (br 0 (f64.const 1.0)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i32 (result f32) (block (result f32) (br 0 (i32.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-i64 (result f32) (block (result f32) (br 0 (i64.const 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f32-vs-f64 (result f32) (block (result f32) (br 0 (f64.const 1.0)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i32 (result f64) (block (result f64) (br 0 (i32.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-i64 (result f64) (block (result f64) (br 0 (i64.const 1)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-f64-vs-f32 (result f64) (block (result f64) (br 0 (f32.const 1.0)) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-void (block (result i32) (block (result i32) (br 1 (i32.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-void (block (result i64) (block (result i64) (br 1 (i64.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-void (block (result f32) (block (result f32) (br 1 (f32.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-void (block (result f64) (block (result f64) (br 1 (f64.const 1.0))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i32 (result i32) (block (result i32) (block (br 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-i64 (result i64) (block (result i64) (block (br 1)) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f32 (result f32) (block (result f32) (block (br 1)) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-f64 (result f64) (block (result f64) (block (br 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i32 (result i32) (block (result i32) (block (result i32) (br 1 (nop))) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-i64 (result i64) (block (result i64) (block (result i64) (br 1 (nop))) (br 0 (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f32 (result f32) (block (result f32) (block (result f32) (br 1 (nop))) (br 0 (f32.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-f64 (result f64) (block (result f64) (block (result f64) (br 1 (nop))) (br 0 (f64.const 1.0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-i64 (result i32) (block (result i32) (block (result i32) (br 1 (i64.const 1))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f32 (result i32) (block (result i32) (block (result i32) (br 1 (f32.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i32-vs-f64 (result i32) (block (result i32) (block (result i32) (br 1 (f64.const 1.0))) (br 0 (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-i32 (result i64) (block (result i64) (block (result i64) (br 1 (i32.const 1))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f32 (result i64) (block (result i64) (block (result i64) (br 1 (f32.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-i64-vs-f64 (result i64) (block (result i64) (block (result i64) (br 1 (f64.const 1.0))) (br 0 (i64.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i32 (result f32) (block (result f32) (block (result f32) (br 1 (i32.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-i64 (result f32) (block (result f32) (block (result f32) (br 1 (i64.const 1))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f32-vs-f64 (result f32) (block (result f32) (block (result f32) (br 1 (f64.const 1.0))) (br 0 (f32.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i32 (result f64) (block (result f64) (block (result f64) (br 1 (i32.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-i64 (result f64) (block (result f64) (block (result f64) (br 1 (i64.const 1))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-f64-vs-f32 (result f64) (block (result f64) (block (result f64) (br 1 (f32.const 1.0))) (br 0 (f64.const 1.0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i32 (result i32) (i32.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-i64 (result i64) (i64.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f32 (result f32) (f32.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-f64 (result f64) (f64.floor (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i32 (result i32) (i32.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-i64 (result i64) (i64.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f32 (result f32) (f32.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-f64 (result f64) (f64.floor (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-i64 (result i32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f32 (result i32) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i32-vs-f64 (result i32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-i32 (result i64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f32 (result i64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-i64-vs-f64 (result i64) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i32 (result f32) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-i64 (result f32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f32-vs-f64 (result f32) (f64.floor (block (br 0 (f64.const 9.0)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i32 (result f64) (i32.ctz (block (br 0 (i32.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-i64 (result f64) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-f64-vs-f32 (result f64) (f32.floor (block (br 0 (f32.const 9.0)))) )) "type mismatch" ) (assert_malformed (module quote "(func block end $l)") "mismatching label" ) (assert_malformed (module quote "(func block $a end $l)") "mismatching label" ) binaryen-version_108/test/spec/br.wast000066400000000000000000000376151423707623100201750ustar00rootroot00000000000000;; Test `br` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br 0))))) (func (export "type-i64") (block (drop (i64.ctz (br 0))))) (func (export "type-f32") (block (drop (f32.neg (br 0))))) (func (export "type-f64") (block (drop (f64.neg (br 0))))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br 0 (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br 0 (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br 0 (f64.const 4)))) ) (func (export "as-block-first") (block (br 0) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br 0) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br 0)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br 0 (i32.const 2))) ) (func (export "as-loop-first") (result i32) (block (result i32) (loop (result i32) (br 1 (i32.const 3)) (i32.const 2))) ) (func (export "as-loop-mid") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 4)) (i32.const 2)) ) ) (func (export "as-loop-last") (result i32) (block (result i32) (loop (result i32) (nop) (call $dummy) (br 1 (i32.const 5))) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br 0 (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br 0))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br 0 (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br 0 (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br 0))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br 0 (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br 0 (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br 0 (i64.const 7)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br 0 (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br 1 (i32.const 3))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br 1 (i32.const 4))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br 0 (i32.const 5)) (local.get 0) (local.get 1)) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br 0 (i32.const 6)) (local.get 1)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br 0 (i32.const 7))) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br 0 (i32.const 12)) (i32.const 2) (i32.const 3)) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br 0 (i32.const 13)) (i32.const 3)) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br 0 (i32.const 14))) ) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (br 0 (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br 0 (i32.const 21)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br 0 (i32.const 22)) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br 0 (i32.const 23)) ) ) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br 0 (i32.const 17))) (i32.const -1)) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.tee 0 (br 0 (i32.const 1)))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br 0 (i32.const 1)))) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br 0 (f32.const 1.7)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br 0 (i64.const 30)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br 0 (i32.const 30)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br 0 (i32.const 31))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br 0 (i32.const 32)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br 0 (i32.const 33))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br 0 (f32.const 3.4)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br 0 (i32.const 3)) (i32.const 10))) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br 0 (i64.const 45)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br 0 (i32.const 44)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br 0 (i32.const 43)) (f64.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br 0 (i32.const 42)))) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br 0 (i32.const 41)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br 0 (i32.const 40)))) ) (func (export "nested-block-value") (result i32) (i32.add (i32.const 1) (block (result i32) (call $dummy) (i32.add (i32.const 4) (br 0 (i32.const 8))) ) ) ) (func (export "nested-br-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br 1 (i32.const 8))) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br 1 (i32.const 8)) (i32.const 1))) (i32.const 32) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br 0 (i32.const 8)))) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br 1 (i32.const 8)) (i32.const 1)) ) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br 0 (i32.const 8))) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value") (i32.const 9)) (assert_return (invoke "nested-br-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value") (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond") (i32.const 9)) (assert_return (invoke "nested-br_table-value") (i32.const 9)) (assert_return (invoke "nested-br_table-value-index") (i32.const 9)) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (result i32) (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br (i32.const 0) (block (result i32) (br 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_if (i32.const 0) (block (result i32) (br_if 0 (br 0) (i32.const 1))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-br_table (i32.const 0) (block (result i32) (br_table 0 (br 0))) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-return (block (result i32) (return (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-select (block (result i32) (select (br 0) (i32.const 1) (i32.const 2)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-call (block (result i32) (call 1 (br 0)) ) (i32.eqz) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-arg-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (br 0) (i32.const 0) ) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.set (local i32) (block (result i32) (local.set 0 (br 0)) (local.get 0) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-in-local.tee (local i32) (block (result i32) (local.tee 0 (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-arg-empty-in-global.set (block (result i32) (global.set $x (br 0)) (global.get $x) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-arg-empty-in-memory.grow (block (result i32) (memory.grow (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-load (block (result i32) (i32.load (br 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-arg-empty-in-store (block (result i32) (i32.store (br 0) (i32.const 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br 1))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br 5))))) "unknown label" ) (assert_invalid (module (func $large-label (br 0x10000001))) "unknown label" ) binaryen-version_108/test/spec/br_if.wast000066400000000000000000000502141423707623100206410ustar00rootroot00000000000000;; Test `br_if` operator (module (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_if 0 (i32.const 0) (i32.const 1))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_if 0 (i64.const 0) (i32.const 1))))) ) (func (export "type-f32") (block (drop (f32.neg (br_if 0 (f32.const 0) (i32.const 1))))) ) (func (export "type-f64") (block (drop (f64.neg (br_if 0 (f64.const 0) (i32.const 1))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_if 0 (i64.const 2) (i32.const 1)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_if 0 (f32.const 3) (i32.const 1)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 4) (i32.const 1)))) ) (func (export "as-block-first") (param i32) (result i32) (block (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-mid") (param i32) (result i32) (block (call $dummy) (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-last") (param i32) (block (call $dummy) (call $dummy) (br_if 0 (local.get 0))) ) (func (export "as-block-first-value") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 10) (local.get 0))) (return (i32.const 11)) ) ) (func (export "as-block-mid-value") (param i32) (result i32) (block (result i32) (call $dummy) (drop (br_if 0 (i32.const 20) (local.get 0))) (return (i32.const 21)) ) ) (func (export "as-block-last-value") (param i32) (result i32) (block (result i32) (call $dummy) (call $dummy) (br_if 0 (i32.const 11) (local.get 0)) ) ) (func (export "as-loop-first") (param i32) (result i32) (block (loop (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 3) ) (func (export "as-loop-mid") (param i32) (result i32) (block (loop (call $dummy) (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 4) ) (func (export "as-loop-last") (param i32) (loop (call $dummy) (br_if 1 (local.get 0))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3))) (i32.const 4) ) ) (func (export "as-br_if-value-cond") (param i32) (result i32) (block (result i32) (drop (br_if 0 (i32.const 2) (br_if 0 (i32.const 1) (local.get 0)))) (i32.const 4) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_if 0 (i32.const 1) (i32.const 2)) (i32.const 3)) (i32.const 4) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 2) (br_if 0 (i32.const 1) (i32.const 3))) (i32.const 4) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_if 0 (i64.const 1) (i32.const 2)))) ) (func (export "as-if-cond") (param i32) (result i32) (block (result i32) (if (result i32) (br_if 0 (i32.const 1) (local.get 0)) (then (i32.const 2)) (else (i32.const 3)) ) ) ) (func (export "as-if-then") (param i32 i32) (block (if (local.get 0) (then (br_if 1 (local.get 1))) (else (call $dummy))) ) ) (func (export "as-if-else") (param i32 i32) (block (if (local.get 0) (then (call $dummy)) (else (br_if 1 (local.get 1)))) ) ) (func (export "as-select-first") (param i32) (result i32) (block (result i32) (select (br_if 0 (i32.const 3) (i32.const 10)) (i32.const 2) (local.get 0)) ) ) (func (export "as-select-second") (param i32) (result i32) (block (result i32) (select (i32.const 1) (br_if 0 (i32.const 3) (i32.const 10)) (local.get 0)) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 1) (i32.const 2) (br_if 0 (i32.const 3) (i32.const 10))) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_if 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_if 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_if 0 (i32.const 14) (i32.const 1)) ) ) ) (func $func (param i32 i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $check) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 1) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (br_if 0 (i32.const 4) (i32.const 10)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (i32.const 3) (br_if 0 (i32.const 4) (i32.const 10)) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (block (result i32) (local.set 0 (br_if 0 (i32.const 17) (local.get 0))) (i32.const -1) ) ) (func (export "as-local.tee-value") (param i32) (result i32) (block (result i32) (local.tee 0 (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (block (result i32) (global.set $a (br_if 0 (i32.const 1) (local.get 0))) (return (i32.const -1)) ) ) (memory 1) (func (export "as-load-address") (result i32) (block (result i32) (i32.load (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-loadN-address") (result i32) (block (result i32) (i32.load8_s (br_if 0 (i32.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (i32.store (br_if 0 (i32.const 30) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i32.store (i32.const 2) (br_if 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_if 0 (i32.const 32) (i32.const 1)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i32.store16 (i32.const 2) (br_if 0 (i32.const 33) (i32.const 1))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f64) (block (result f64) (f64.neg (br_if 0 (f64.const 1.0) (i32.const 1)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_if 0 (i32.const 0) (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (br_if 0 (i32.const 1) (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (br_if 0 (i32.const 1) (i32.const 42)))) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_if 0 (i32.const 1) (i32.const 1)))) ) (func (export "nested-block-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (i32.add (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) )) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) )) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4) ) (i32.const 1) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (block (result i32) (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1) ) ) (i32.const 16) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "as-block-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-mid" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-last" (i32.const 0))) (assert_return (invoke "as-block-last" (i32.const 1))) (assert_return (invoke "as-block-first-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-first-value" (i32.const 1)) (i32.const 10)) (assert_return (invoke "as-block-mid-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "as-block-mid-value" (i32.const 1)) (i32.const 20)) (assert_return (invoke "as-block-last-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-last-value" (i32.const 1)) (i32.const 11)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 4)) (assert_return (invoke "as-loop-last" (i32.const 0))) (assert_return (invoke "as-loop-last" (i32.const 1))) (assert_return (invoke "as-br-value") (i32.const 1)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 1)) (assert_return (invoke "as-br_if-value-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-value-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 1)) (assert_return (invoke "as-br_table-value-index") (i32.const 1)) (assert_return (invoke "as-return-value") (i64.const 1)) (assert_return (invoke "as-if-cond" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-if-cond" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 1))) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-second" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-select-cond") (i32.const 3)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 4)) (assert_return (invoke "as-call_indirect-first") (i32.const 4)) (assert_return (invoke "as-call_indirect-mid") (i32.const 4)) (assert_return (invoke "as-call_indirect-last") (i32.const 4)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const -1)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-address") (i32.const 1)) (assert_return (invoke "as-loadN-address") (i32.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f64.const 1.0)) (assert_return (invoke "as-binary-left") (i32.const 1)) (assert_return (invoke "as-binary-right") (i32.const 1)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-memory.grow-size") (i32.const 1)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 9)) (assert_invalid (module (func $type-false-i32 (block (i32.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-i64 (block (i64.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f32 (block (f32.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f64 (block (f64.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i32 (block (i32.ctz (br_if 0 (i32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i64 (block (i64.ctz (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f32 (block (f32.neg (br_if 0 (f32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f64 (block (f64.neg (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block (result i32) (br_if 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-num (result i32) (block (result i32) (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-cond-empty-vs-i32 (block (br_if 0)) )) "type mismatch" ) (assert_invalid (module (func $type-cond-void-vs-i32 (block (br_if 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cond-num-vs-i32 (block (br_if 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-void-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_if 1 (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-num-vs-i32 (result i32) (block (result i32) (br_if 0 (i32.const 0) (i64.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_if 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-cond-empty-in-return (block (result i32) (return (br_if 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-cond-empty-in-return (block (result i32) (return (br_if 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (br_if 1 (i32.const 1)))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_if 5 (i32.const 1)))))) "unknown label" ) (assert_invalid (module (func $large-label (br_if 0x10000001 (i32.const 1)))) "unknown label" ) binaryen-version_108/test/spec/br_on_null.wast000066400000000000000000000030571423707623100217140ustar00rootroot00000000000000(module (type $t (func (result i32))) (func $nn (param $r (ref $t)) (result i32) (block $l (return (call_ref (br_on_null $l (local.get $r)))) ) (i32.const -1) ) (func $n (param $r (ref null $t)) (result i32) (block $l (return (call_ref (br_on_null $l (local.get $r)))) ) (i32.const -1) ) (func $f (result i32) (i32.const 7)) (func (export "nullable-null") (result i32) (call $n (ref.null $t))) (func (export "nonnullable-f") (result i32) (call $nn (ref.func $f))) (func (export "nullable-f") (result i32) (call $n (ref.func $f))) (func (export "unreachable") (result i32) (block $l (return (call_ref (br_on_null $l (unreachable)))) ) (i32.const -1) ) ) (assert_trap (invoke "unreachable") "unreachable") (assert_return (invoke "nullable-null") (i32.const -1)) (assert_return (invoke "nonnullable-f") (i32.const 7)) (assert_return (invoke "nullable-f") (i32.const 7)) (module (type $t (func)) (func (param $r (ref $t)) (drop (br_on_null 0 (local.get $r)))) (func (param $r (ref func)) (drop (br_on_null 0 (local.get $r)))) (func (param $r (ref extern)) (drop (br_on_null 0 (local.get $r)))) ) (assert_invalid ;; the same module as the first one in this file, but with a type added to ;; the block (module (type $t (func (result i32))) (func $nn (param $r (ref $t)) (result i32) (block $l (ref null $t) ;; br_on_null sends no value; a br to here is bad (return (call_ref (br_on_null $l (local.get $r)))) ) (i32.const -1) ) ) "bad break type" ) binaryen-version_108/test/spec/br_table.wast000066400000000000000000002426611423707623100213430ustar00rootroot00000000000000;; Test `br_table` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-f32") (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-f64") (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) ) (func (export "empty") (param i32) (result i32) (block (br_table 0 (local.get 0)) (return (i32.const 21))) (i32.const 22) ) (func (export "empty-value") (param i32) (result i32) (block (result i32) (br_table 0 (i32.const 33) (local.get 0)) (i32.const 31) ) ) (func (export "singleton") (param i32) (result i32) (block (block (br_table 1 0 (local.get 0)) (return (i32.const 21)) ) (return (i32.const 20)) ) (i32.const 22) ) (func (export "singleton-value") (param i32) (result i32) (block (result i32) (drop (block (result i32) (br_table 0 1 (i32.const 33) (local.get 0)) (return (i32.const 31)) ) ) (i32.const 32) ) ) (func (export "multiple") (param i32) (result i32) (block (block (block (block (block (br_table 3 2 1 0 4 (local.get 0)) (return (i32.const 99)) ) (return (i32.const 100)) ) (return (i32.const 101)) ) (return (i32.const 102)) ) (return (i32.const 103)) ) (i32.const 104) ) (func (export "multiple-value") (param i32) (result i32) (local i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (local.set 1 (block (result i32) (br_table 3 2 1 0 4 (i32.const 200) (local.get 0)) (return (i32.add (local.get 1) (i32.const 99))) )) (return (i32.add (local.get 1) (i32.const 10))) )) (return (i32.add (local.get 1) (i32.const 11))) )) (return (i32.add (local.get 1) (i32.const 12))) )) (return (i32.add (local.get 1) (i32.const 13))) )) (i32.add (local.get 1) (i32.const 14)) ) (func (export "large") (param i32) (result i32) (block (block (br_table 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (local.get 0) ) (return (i32.const -1)) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (func (export "as-block-first") (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0)) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (br_table 1 1 1 (i32.const 4) (i32.const -1)) (i32.const 2) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (br_table 0 (i32.const 9) (i32.const 0)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (block (result i64) (return (br_table 0 (i64.const 7) (i32.const 0)))) ) (func (export "as-if-cond") (result i32) (block (result i32) (if (result i32) (br_table 0 (i32.const 2) (i32.const 0)) (then (i32.const 0)) (else (i32.const 1)) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (br_table 1 (i32.const 3) (i32.const 0))) (else (local.get 1)) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (br_table 1 0 (i32.const 4) (i32.const 0))) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block (result i32) (select (br_table 0 (i32.const 5) (i32.const 0)) (local.get 0) (local.get 1) ) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block (result i32) (select (local.get 0) (br_table 0 (i32.const 6) (i32.const 1)) (local.get 1) ) ) ) (func (export "as-select-cond") (result i32) (block (result i32) (select (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) ) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block (result i32) (call $f (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block (result i32) (call $f (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block (result i32) (call $f (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) ) ) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $sig) (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call_indirect-func") (result i32) (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br_table 0 (i32.const 23) (i32.const 1)) ) ) ) (func (export "as-local.set-value") (result i32) (local f32) (block (result i32) (local.set 0 (br_table 0 (i32.const 17) (i32.const 1))) (i32.const -1) ) ) (func (export "as-local.tee-value") (result i32) (local i32) (block (result i32) (local.set 0 (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (block (result i32) (global.set $a (br_table 0 (i32.const 1) (i32.const 1))) (i32.const -1) ) ) (memory 1) (func (export "as-load-address") (result f32) (block (result f32) (f32.load (br_table 0 (f32.const 1.7) (i32.const 1)))) ) (func (export "as-loadN-address") (result i64) (block (result i64) (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1)))) ) (func (export "as-store-address") (result i32) (block (result i32) (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block (result i32) (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block (result i32) (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block (result i32) (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) (i32.const -1) ) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.neg (br_table 0 (f32.const 3.4) (i32.const 0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) ) ) (func (export "as-binary-right") (result i64) (block (result i64) (i64.sub (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0))) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) ) ) (func (export "as-convert-operand") (result i32) (block (result i32) (i32.wrap_i64 (br_table 0 (i32.const 41) (i32.const 0))) ) ) (func (export "as-memory.grow-size") (result i32) (block (result i32) (memory.grow (br_table 0 (i32.const 40) (i32.const 0)))) ) (func (export "nested-block-value") (param i32) (result i32) (block (result i32) (drop (i32.const -1)) (i32.add (i32.const 1) (block (result i32) (i32.add (i32.const 2) (block (result i32) (drop (i32.const 4)) (i32.add (i32.const 8) (br_table 0 1 2 (i32.const 16) (local.get 0)) ) ) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br 0 (br_table 2 1 0 (i32.const 8) (local.get 0))) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (drop (br_if 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1) ) ) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (drop (block (result i32) (drop (i32.const 4)) (br_table 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1)) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (block (result i32) (i32.add (i32.const 1) (block (result i32) (drop (i32.const 2)) (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) (func (export "nested-br_table-loop-block") (param i32) (result i32) (local.set 0 (loop (result i32) (block (br_table 1 0 0 (local.get 0)) ) (i32.const 0) ) ) (loop (result i32) (block (br_table 0 1 1 (local.get 0)) ) (i32.const 3) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) (assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) (assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) (assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) (assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) (assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) (assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) (assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) (assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) (assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) (assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) (assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) (assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) (assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) (assert_return (invoke "large" (i32.const 0)) (i32.const 0)) (assert_return (invoke "large" (i32.const 1)) (i32.const 1)) (assert_return (invoke "large" (i32.const 100)) (i32.const 0)) (assert_return (invoke "large" (i32.const 101)) (i32.const 1)) (assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) (assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-first") (i32.const 20)) (assert_return (invoke "as-call_indirect-mid") (i32.const 21)) (assert_return (invoke "as-call_indirect-last") (i32.const 22)) (assert_return (invoke "as-call_indirect-func") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-loop-block" (i32.const 1)) (i32.const 3)) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-empty-vs-num (result i32) (block (br_table 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (result i32) (br_table 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block (result i32) (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-arg-num (block (block (result f32) (br_table 0 1 (f32.const 0) (i32.const 0)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func $type-index-void-vs-i32 (block (br_table 0 0 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-index-num-vs-i32 (block (br_table 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-void-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num-nested (result i32) (block (result i32) (i32.const 0) (block (br_table 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-num-vs-i32 (result i32) (block (result i32) (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1) ) )) "type mismatch" ) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-then (block (i32.const 0) (i32.const 0) (if (result i32) (then (br_table 0 (i32.const 1)))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-index-empty-in-return (block (result i32) (return (br_table 0)) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-arg-value-empty-in-return (block (result i32) (return (br_table 0 (i32.const 1))) ) (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $unbound-label (block (br_table 2 1 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label (block (br_table 0 0x10000001 0 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-label-default (block (br_table 1 2 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label-default (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label-default (block (br_table 0 0 0x10000001 (i32.const 1))) )) "unknown label" ) binaryen-version_108/test/spec/break-drop.wast000066400000000000000000000004161423707623100216050ustar00rootroot00000000000000(module (func (export "br") (block (br 0))) (func (export "br_if") (block (br_if 0 (i32.const 1)))) (func (export "br_table") (block (br_table 0 (i32.const 0)))) ) (assert_return (invoke "br")) (assert_return (invoke "br_if")) (assert_return (invoke "br_table")) binaryen-version_108/test/spec/bulk-memory.wast000066400000000000000000000144621423707623100220300ustar00rootroot00000000000000;; Passive segment syntax (module (memory 1) (data "foo")) ;; memory.fill (module (memory 1) (func (export "fill") (param i32 i32 i32) (memory.fill (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) ;; Basic fill test. (invoke "fill" (i32.const 1) (i32.const 0xff) (i32.const 3)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 2)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 3)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i32.const 4)) (i32.const 0)) ;; Fill value is stored as a byte. (invoke "fill" (i32.const 0) (i32.const 0xbbaa) (i32.const 2)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xaa)) ;; Fill all of memory (invoke "fill" (i32.const 0) (i32.const 0) (i32.const 0x10000)) ;; Succeed when writing 0 bytes at the end of the region. (invoke "fill" (i32.const 0x10000) (i32.const 0) (i32.const 0)) ;; Writing 0 bytes outside of memory limit is NOT allowed. (assert_trap (invoke "fill" (i32.const 0x10001) (i32.const 0) (i32.const 0))) ;; Negative size (assert_trap (invoke "fill" (i32.const 15) (i32.const 14) (i32.const -2))) (assert_return (invoke "load8_u" (i32.const 15)) (i32.const 0)) ;; memory.copy (module (memory 1 1) (data (i32.const 0) "\aa\bb\cc\dd") (func (export "copy") (param i32 i32 i32) (memory.copy (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) ;; Non-overlapping copy. (invoke "copy" (i32.const 10) (i32.const 0) (i32.const 4)) (assert_return (invoke "load8_u" (i32.const 9)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 14)) (i32.const 0)) ;; Overlap, source > dest (invoke "copy" (i32.const 8) (i32.const 10) (i32.const 4)) (assert_return (invoke "load8_u" (i32.const 8)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 9)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xdd)) ;; Overlap, source < dest (invoke "copy" (i32.const 10) (i32.const 7) (i32.const 6)) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 14)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 15)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 16)) (i32.const 0)) ;; Overlap, source < dest but size is out of bounds (assert_trap (invoke "copy" (i32.const 13) (i32.const 11) (i32.const -1))) (assert_return (invoke "load8_u" (i32.const 10)) (i32.const 0)) (assert_return (invoke "load8_u" (i32.const 11)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i32.const 12)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 13)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 14)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i32.const 15)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 16)) (i32.const 0)) ;; Copy ending at memory limit is ok. (invoke "copy" (i32.const 0xff00) (i32.const 0) (i32.const 0x100)) (invoke "copy" (i32.const 0xfe00) (i32.const 0xff00) (i32.const 0x100)) ;; Succeed when copying 0 bytes at the end of the region. (invoke "copy" (i32.const 0x10000) (i32.const 0) (i32.const 0)) (invoke "copy" (i32.const 0) (i32.const 0x10000) (i32.const 0)) ;; Copying 0 bytes outside of memory limit is NOT allowed. (assert_trap (invoke "copy" (i32.const 0x10001) (i32.const 0) (i32.const 0))) (assert_trap (invoke "copy" (i32.const 0) (i32.const 0x10001) (i32.const 0))) ;; memory.init (module (memory 1) (data "\aa\bb\cc\dd") (func (export "init") (param i32 i32 i32) (memory.init 0 (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i32) (result i32) (i32.load8_u (local.get 0))) ) (invoke "init" (i32.const 0) (i32.const 1) (i32.const 2)) (assert_return (invoke "load8_u" (i32.const 0)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i32.const 1)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 2)) (i32.const 0)) ;; Init ending at memory limit and segment limit is ok. (invoke "init" (i32.const 0xfffc) (i32.const 0) (i32.const 4)) ;; Out-of-bounds writes trap, and no partial writes has been made. (assert_trap (invoke "init" (i32.const 0xfffe) (i32.const 0) (i32.const 3)) "out of bounds memory access") (assert_return (invoke "load8_u" (i32.const 0xfffe)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i32.const 0xffff)) (i32.const 0xdd)) ;; Succeed when writing 0 bytes at the end of either region. (invoke "init" (i32.const 0x10000) (i32.const 0) (i32.const 0)) (invoke "init" (i32.const 0) (i32.const 4) (i32.const 0)) ;; Writing 0 bytes outside of memory / segment limit is NOT allowed. (assert_trap (invoke "init" (i32.const 0x10001) (i32.const 0) (i32.const 0))) (assert_trap (invoke "init" (i32.const 0) (i32.const 5) (i32.const 0))) ;; OK to access 0 bytes at offset 0 in a dropped segment. (invoke "init" (i32.const 0) (i32.const 0) (i32.const 0)) ;; data.drop (module (memory 1) (data "") (data (i32.const 0) "") (func (export "drop_passive") (data.drop 0)) (func (export "init_passive") (memory.init 0 (i32.const 0) (i32.const 0) (i32.const 0))) (func (export "drop_active") (data.drop 1)) (func (export "init_active") (memory.init 1 (i32.const 0) (i32.const 0) (i32.const 0))) ) ;; OK to drop the same segment multiple times or drop an active segment. (invoke "init_passive") (invoke "drop_passive") (invoke "drop_passive") (invoke "drop_active") binaryen-version_108/test/spec/bulk-memory64.wast000066400000000000000000000145061423707623100222010ustar00rootroot00000000000000;; Passive segment syntax (module (memory i64 1) (data "foo")) ;; memory.fill (module (memory i64 1) (func (export "fill") (param i64 i32 i64) (memory.fill (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i64) (result i32) (i32.load8_u (local.get 0))) ) ;; Basic fill test. (invoke "fill" (i64.const 1) (i32.const 0xff) (i64.const 3)) (assert_return (invoke "load8_u" (i64.const 0)) (i32.const 0)) (assert_return (invoke "load8_u" (i64.const 1)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i64.const 2)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i64.const 3)) (i32.const 0xff)) (assert_return (invoke "load8_u" (i64.const 4)) (i32.const 0)) ;; Fill value is stored as a byte. (invoke "fill" (i64.const 0) (i32.const 0xbbaa) (i64.const 2)) (assert_return (invoke "load8_u" (i64.const 0)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 1)) (i32.const 0xaa)) ;; Fill all of memory (invoke "fill" (i64.const 0) (i32.const 0) (i64.const 0x10000)) ;; Succeed when writing 0 bytes at the end of the region. (invoke "fill" (i64.const 0x10000) (i32.const 0) (i64.const 0)) ;; Writing 0 bytes outside of memory limit is NOT allowed. (assert_trap (invoke "fill" (i64.const 0x10001) (i32.const 0) (i64.const 0))) ;; Negative size (assert_trap (invoke "fill" (i64.const 15) (i32.const 14) (i64.const -2))) (assert_return (invoke "load8_u" (i64.const 15)) (i32.const 0)) ;; memory.copy (module (memory i64 1 1) (data (i64.const 0) "\aa\bb\cc\dd") (func (export "copy") (param i64 i64 i64) (memory.copy (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i64) (result i32) (i32.load8_u (local.get 0))) ) ;; Non-overlapping copy. (invoke "copy" (i64.const 10) (i64.const 0) (i64.const 4)) (assert_return (invoke "load8_u" (i64.const 9)) (i32.const 0)) (assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 13)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i64.const 14)) (i32.const 0)) ;; Overlap, source > dest (invoke "copy" (i64.const 8) (i64.const 10) (i64.const 4)) (assert_return (invoke "load8_u" (i64.const 8)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 9)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 13)) (i32.const 0xdd)) ;; Overlap, source < dest (invoke "copy" (i64.const 10) (i64.const 7) (i64.const 6)) (assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0)) (assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 13)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 14)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i64.const 15)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 16)) (i32.const 0)) ;; Overlap, source < dest but size is out of bounds (assert_trap (invoke "copy" (i64.const 13) (i64.const 11) (i64.const -1))) (assert_return (invoke "load8_u" (i64.const 10)) (i32.const 0)) (assert_return (invoke "load8_u" (i64.const 11)) (i32.const 0xaa)) (assert_return (invoke "load8_u" (i64.const 12)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 13)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 14)) (i32.const 0xdd)) (assert_return (invoke "load8_u" (i64.const 15)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 16)) (i32.const 0)) ;; Copy ending at memory limit is ok. (invoke "copy" (i64.const 0xff00) (i64.const 0) (i64.const 0x100)) (invoke "copy" (i64.const 0xfe00) (i64.const 0xff00) (i64.const 0x100)) ;; Succeed when copying 0 bytes at the end of the region. (invoke "copy" (i64.const 0x10000) (i64.const 0) (i64.const 0)) (invoke "copy" (i64.const 0) (i64.const 0x10000) (i64.const 0)) ;; Copying 0 bytes outside of memory limit is NOT allowed. (assert_trap (invoke "copy" (i64.const 0x10001) (i64.const 0) (i64.const 0))) (assert_trap (invoke "copy" (i64.const 0) (i64.const 0x10001) (i64.const 0))) ;; memory.init (module (memory i64 1) (data "\aa\bb\cc\dd") (func (export "init") (param i64 i32 i32) (memory.init 0 (local.get 0) (local.get 1) (local.get 2))) (func (export "load8_u") (param i64) (result i32) (i32.load8_u (local.get 0))) ) (invoke "init" (i64.const 0) (i32.const 1) (i32.const 2)) (assert_return (invoke "load8_u" (i64.const 0)) (i32.const 0xbb)) (assert_return (invoke "load8_u" (i64.const 1)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 2)) (i32.const 0)) ;; Init ending at memory limit and segment limit is ok. (invoke "init" (i64.const 0xfffc) (i32.const 0) (i32.const 4)) ;; Out-of-bounds writes trap, and no partial writes has been made. (assert_trap (invoke "init" (i64.const 0xfffe) (i32.const 0) (i32.const 3)) "out of bounds memory access") (assert_return (invoke "load8_u" (i64.const 0xfffe)) (i32.const 0xcc)) (assert_return (invoke "load8_u" (i64.const 0xffff)) (i32.const 0xdd)) ;; Succeed when writing 0 bytes at the end of either region. (invoke "init" (i64.const 0x10000) (i32.const 0) (i32.const 0)) (invoke "init" (i64.const 0) (i32.const 4) (i32.const 0)) ;; Writing 0 bytes outside of memory / segment limit is NOT allowed. (assert_trap (invoke "init" (i64.const 0x10001) (i32.const 0) (i32.const 0))) (assert_trap (invoke "init" (i64.const 0) (i32.const 5) (i32.const 0))) ;; OK to access 0 bytes at offset 0 in a dropped segment. (invoke "init" (i64.const 0) (i32.const 0) (i32.const 0)) ;; data.drop (module (memory i64 1) (data "") (data (i64.const 0) "") (func (export "drop_passive") (data.drop 0)) (func (export "init_passive") (memory.init 0 (i64.const 0) (i32.const 0) (i32.const 0))) (func (export "drop_active") (data.drop 1)) (func (export "init_active") (memory.init 1 (i64.const 0) (i32.const 0) (i32.const 0))) ) ;; OK to drop the same segment multiple times or drop an active segment. (invoke "init_passive") (invoke "drop_passive") (invoke "drop_passive") (invoke "drop_active") binaryen-version_108/test/spec/call.wast000066400000000000000000000365621423707623100205050ustar00rootroot00000000000000;; Test `call` operator (module ;; Auxiliary definitions (func $const-i32 (result i32) (i32.const 0x132)) (func $const-i64 (result i64) (i64.const 0x164)) (func $const-f32 (result f32) (f32.const 0xf32)) (func $const-f64 (result f64) (f64.const 0xf64)) (func $id-i32 (param i32) (result i32) (local.get 0)) (func $id-i64 (param i64) (result i64) (local.get 0)) (func $id-f32 (param f32) (result f32) (local.get 0)) (func $id-f64 (param f64) (result f64) (local.get 0)) (func $f32-i32 (param f32 i32) (result i32) (local.get 1)) (func $i32-i64 (param i32 i64) (result i64) (local.get 1)) (func $f64-f32 (param f64 f32) (result f32) (local.get 1)) (func $i64-f64 (param i64 f64) (result f64) (local.get 1)) ;; Typing (func (export "type-i32") (result i32) (call $const-i32)) (func (export "type-i64") (result i64) (call $const-i64)) (func (export "type-f32") (result f32) (call $const-f32)) (func (export "type-f64") (result f64) (call $const-f64)) (func (export "type-first-i32") (result i32) (call $id-i32 (i32.const 32))) (func (export "type-first-i64") (result i64) (call $id-i64 (i64.const 64))) (func (export "type-first-f32") (result f32) (call $id-f32 (f32.const 1.32))) (func (export "type-first-f64") (result f64) (call $id-f64 (f64.const 1.64))) (func (export "type-second-i32") (result i32) (call $f32-i32 (f32.const 32.1) (i32.const 32)) ) (func (export "type-second-i64") (result i64) (call $i32-i64 (i32.const 32) (i64.const 64)) ) (func (export "type-second-f32") (result f32) (call $f64-f32 (f64.const 64) (f32.const 32)) ) (func (export "type-second-f64") (result f64) (call $i64-f64 (i64.const 64) (f64.const 64.1)) ) ;; Recursion (func $fac (export "fac") (param i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call $fac (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) (if (result i64) (i64.eqz (local.get 0)) (then (local.get 1)) (else (call $fac-acc (i64.sub (local.get 0) (i64.const 1)) (i64.mul (local.get 0) (local.get 1)) ) ) ) ) (func $fib (export "fib") (param i64) (result i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call $fib (i64.sub (local.get 0) (i64.const 2))) (call $fib (i64.sub (local.get 0) (i64.const 1))) ) ) ) ) (func $even (export "even") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 44)) (else (call $odd (i64.sub (local.get 0) (i64.const 1)))) ) ) (func $odd (export "odd") (param i64) (result i32) (if (result i32) (i64.eqz (local.get 0)) (then (i32.const 99)) (else (call $even (i64.sub (local.get 0) (i64.const 1)))) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call $runaway)) (func $mutual-runaway1 (export "mutual-runaway") (call $mutual-runaway2)) (func $mutual-runaway2 (call $mutual-runaway1)) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call $const-i32) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call $const-i32) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call $const-i32)) ) (func (export "as-if-condition") (result i32) (if (result i32) (call $const-i32) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (call $const-i32) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call $const-i32))) ) (func (export "as-br_table-first") (result i32) (block (result i32) (call $const-i32) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call $const-i32) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (call $const-i32) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (call $const-i32) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 2) (call $const-i32) ) ) ) (func (export "as-store-first") (call $const-i32) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call $const-i32) (i32.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call $const-i32)) ) (func (export "as-return-value") (result i32) (call $const-i32) (return) ) (func (export "as-drop-operand") (call $const-i32) (drop) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (call $const-i32))) ) (func (export "as-local.set-value") (result i32) (local i32) (local.set 0 (call $const-i32)) (local.get 0) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (call $const-i32)) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (result i32) (global.set $a (call $const-i32)) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call $const-i32)) ) (func $dummy (param i32) (result i32) (local.get 0)) (func $du (param f32) (result f32) (local.get 0)) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call $du (f32.const 0x0p+0)))) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call $dummy (i32.const 1)))) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call $dummy (i32.const 1)) (i32.const 10))) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call $dummy (i32.const 1)))) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call $dummy (i32.const 1)))) ) ;; Test correct argument passing (func $return-from-long-argument-list-helper (param f32 i32 i32 f64 f32 f32 f32 f64 f32 i32 i32 f32 f64 i64 i64 i32 i64 i64 f32 i64 i64 i64 i32 f32 f32 f32 f64 f32 i32 i64 f32 f64 f64 f32 i32 f32 f32 f64 i64 f64 i32 i64 f32 f64 i32 i32 i32 i64 f64 i32 i64 i64 f64 f64 f64 f64 f64 f64 i32 f32 f64 f64 i32 i64 f32 f32 f32 i32 f64 f64 f64 f64 f64 f32 i64 i64 i32 i32 i32 f32 f64 i32 i64 f32 f32 f32 i32 i32 f32 f64 i64 f32 f64 f32 f32 f32 i32 f32 i64 i32) (result i32) (local.get 99) ) (func (export "return-from-long-argument-list") (param i32) (result i32) (call $return-from-long-argument-list-helper (f32.const 0) (i32.const 0) (i32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f64.const 0) (f32.const 0) (i64.const 0) (i64.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (i32.const 0) (f32.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (f64.const 0) (f32.const 0) (f32.const 0) (f32.const 0) (i32.const 0) (f32.const 0) (i64.const 0) (local.get 0)) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) (assert_return (invoke "fac-acc" (i64.const 25) (i64.const 1)) (i64.const 7034535277573963776) ) (assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "even" (i64.const 0)) (i32.const 44)) (assert_return (invoke "even" (i64.const 1)) (i32.const 99)) (assert_return (invoke "even" (i64.const 100)) (i32.const 44)) (assert_return (invoke "even" (i64.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i64.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i32.const 0x132)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 0x132)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 0x132)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 0x132)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 0x132)) (assert_return (invoke "as-local.set-value") (i32.const 0x132)) (assert_return (invoke "as-local.tee-value") (i32.const 0x132)) (assert_return (invoke "as-global.set-value") (i32.const 0x132)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) (assert_return (invoke "return-from-long-argument-list" (i32.const 42)) (i32.const 42)) ;; Invalid typing (assert_invalid (module (func $type-void-vs-num (i32.eqz (call 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (i32.eqz (call 1))) (func (result i64) (i64.const 1)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-1 (call 1)) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-2 (call 1)) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-1-vs-0 (call 1 (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $arity-2-vs-0 (call 1 (f64.const 2) (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-first-void-vs-num (call 1 (nop) (i32.const 1))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-void-vs-num (call 1 (i32.const 1) (nop))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-num-vs-num (call 1 (f64.const 1) (i32.const 1))) (func (param i32 f64)) ) "type mismatch" ) (assert_invalid (module (func $type-second-num-vs-num (call 1 (i32.const 1) (f64.const 1))) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-block (block (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-block (block (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-loop (loop (call 1)) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-loop (loop (call 1 (i32.const 0))) ) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-empty-in-then (if (i32.const 0) (then (call 1))) ) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-empty-in-then (if (i32.const 0) (then (call 1 (i32.const 0)))) ) (func (param i32 i32)) ) "type mismatch" ) ;; Unbound function (assert_invalid (module (func $unbound-func (call 1))) "unknown function" ) (assert_invalid (module (func $large-func (call 1012321300))) "unknown function" ) binaryen-version_108/test/spec/call_indirect.wast000066400000000000000000000710131423707623100223540ustar00rootroot00000000000000;; Test `call_indirect` operator (module ;; Auxiliary definitions (type $proc (func)) (type $out-i32 (func (result i32))) (type $out-i64 (func (result i64))) (type $out-f32 (func (result f32))) (type $out-f64 (func (result f64))) (type $over-i32 (func (param i32) (result i32))) (type $over-i64 (func (param i64) (result i64))) (type $over-f32 (func (param f32) (result f32))) (type $over-f64 (func (param f64) (result f64))) (type $f32-i32 (func (param f32 i32) (result i32))) (type $i32-i64 (func (param i32 i64) (result i64))) (type $f64-f32 (func (param f64 f32) (result f32))) (type $i64-f64 (func (param i64 f64) (result f64))) (type $over-i32-duplicate (func (param i32) (result i32))) (type $over-i64-duplicate (func (param i64) (result i64))) (type $over-f32-duplicate (func (param f32) (result f32))) (type $over-f64-duplicate (func (param f64) (result f64))) (func $const-i32 (type $out-i32) (i32.const 0x132)) (func $const-i64 (type $out-i64) (i64.const 0x164)) (func $const-f32 (type $out-f32) (f32.const 0xf32)) (func $const-f64 (type $out-f64) (f64.const 0xf64)) (func $id-i32 (type $over-i32) (local.get 0)) (func $id-i64 (type $over-i64) (local.get 0)) (func $id-f32 (type $over-f32) (local.get 0)) (func $id-f64 (type $over-f64) (local.get 0)) (func $i32-i64 (type $i32-i64) (local.get 1)) (func $i64-f64 (type $i64-f64) (local.get 1)) (func $f32-i32 (type $f32-i32) (local.get 1)) (func $f64-f32 (type $f64-f32) (local.get 1)) (func $over-i32-duplicate (type $over-i32-duplicate) (local.get 0)) (func $over-i64-duplicate (type $over-i64-duplicate) (local.get 0)) (func $over-f32-duplicate (type $over-f32-duplicate) (local.get 0)) (func $over-f64-duplicate (type $over-f64-duplicate) (local.get 0)) (table funcref (elem $const-i32 $const-i64 $const-f32 $const-f64 $id-i32 $id-i64 $id-f32 $id-f64 $f32-i32 $i32-i64 $f64-f32 $i64-f64 $fac-i64 $fib-i64 $even $odd $runaway $mutual-runaway1 $mutual-runaway2 $over-i32-duplicate $over-i64-duplicate $over-f32-duplicate $over-f64-duplicate $fac-i32 $fac-f32 $fac-f64 $fib-i32 $fib-f32 $fib-f64 ) ) ;; Syntax (func (call_indirect (i32.const 0)) (call_indirect (param i64) (i64.const 0) (i32.const 0)) (call_indirect (param i64) (param) (param f64 i32 i64) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) (call_indirect (result) (i32.const 0)) (drop (i32.eqz (call_indirect (result i32) (i32.const 0)))) (drop (i32.eqz (call_indirect (result i32) (result) (i32.const 0)))) (drop (i32.eqz (call_indirect (param i64) (result i32) (i64.const 0) (i32.const 0)) )) (drop (i32.eqz (call_indirect (param) (param i64) (param) (param f64 i32 i64) (param) (param) (result) (result i32) (result) (result) (i64.const 0) (f64.const 0) (i32.const 0) (i64.const 0) (i32.const 0) ) )) (drop (i64.eqz (call_indirect (type $over-i64) (param i64) (result i64) (i64.const 0) (i32.const 0) ) )) ) ;; Typing (func (export "type-i32") (result i32) (call_indirect (type $out-i32) (i32.const 0)) ) (func (export "type-i64") (result i64) (call_indirect (type $out-i64) (i32.const 1)) ) (func (export "type-f32") (result f32) (call_indirect (type $out-f32) (i32.const 2)) ) (func (export "type-f64") (result f64) (call_indirect (type $out-f64) (i32.const 3)) ) (func (export "type-index") (result i64) (call_indirect (type $over-i64) (i64.const 100) (i32.const 5)) ) (func (export "type-first-i32") (result i32) (call_indirect (type $over-i32) (i32.const 32) (i32.const 4)) ) (func (export "type-first-i64") (result i64) (call_indirect (type $over-i64) (i64.const 64) (i32.const 5)) ) (func (export "type-first-f32") (result f32) (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6)) ) (func (export "type-first-f64") (result f64) (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7)) ) (func (export "type-second-i32") (result i32) (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8)) ) (func (export "type-second-i64") (result i64) (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9)) ) (func (export "type-second-f32") (result f32) (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10)) ) (func (export "type-second-f64") (result f64) (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11)) ) ;; Dispatch (func (export "dispatch") (param i32 i64) (result i64) (call_indirect (type $over-i64) (local.get 1) (local.get 0)) ) (func (export "dispatch-structural-i64") (param i32) (result i64) (call_indirect (type $over-i64-duplicate) (i64.const 9) (local.get 0)) ) (func (export "dispatch-structural-i32") (param i32) (result i32) (call_indirect (type $over-i32-duplicate) (i32.const 9) (local.get 0)) ) (func (export "dispatch-structural-f32") (param i32) (result f32) (call_indirect (type $over-f32-duplicate) (f32.const 9.0) (local.get 0)) ) (func (export "dispatch-structural-f64") (param i32) (result f64) (call_indirect (type $over-f64-duplicate) (f64.const 9.0) (local.get 0)) ) ;; Recursion (func $fac-i64 (export "fac-i64") (type $over-i64) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 12) ) ) ) ) ) (func $fib-i64 (export "fib-i64") (type $over-i64) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 2)) (i32.const 13) ) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 13) ) ) ) ) ) (func $fac-i32 (export "fac-i32") (type $over-i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 1)) (else (i32.mul (local.get 0) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 23) ) ) ) ) ) (func $fac-f32 (export "fac-f32") (type $over-f32) (if (result f32) (f32.eq (local.get 0) (f32.const 0.0)) (then (f32.const 1.0)) (else (f32.mul (local.get 0) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 24) ) ) ) ) ) (func $fac-f64 (export "fac-f64") (type $over-f64) (if (result f64) (f64.eq (local.get 0) (f64.const 0.0)) (then (f64.const 1.0)) (else (f64.mul (local.get 0) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 25) ) ) ) ) ) (func $fib-i32 (export "fib-i32") (type $over-i32) (if (result i32) (i32.le_u (local.get 0) (i32.const 1)) (then (i32.const 1)) (else (i32.add (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 2)) (i32.const 26) ) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 26) ) ) ) ) ) (func $fib-f32 (export "fib-f32") (type $over-f32) (if (result f32) (f32.le (local.get 0) (f32.const 1.0)) (then (f32.const 1.0)) (else (f32.add (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 2.0)) (i32.const 27) ) (call_indirect (type $over-f32) (f32.sub (local.get 0) (f32.const 1.0)) (i32.const 27) ) ) ) ) ) (func $fib-f64 (export "fib-f64") (type $over-f64) (if (result f64) (f64.le (local.get 0) (f64.const 1.0)) (then (f64.const 1.0)) (else (f64.add (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 2.0)) (i32.const 28) ) (call_indirect (type $over-f64) (f64.sub (local.get 0) (f64.const 1.0)) (i32.const 28) ) ) ) ) ) (func $even (export "even") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 44)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 15) ) ) ) ) (func $odd (export "odd") (param i32) (result i32) (if (result i32) (i32.eqz (local.get 0)) (then (i32.const 99)) (else (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 14) ) ) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16))) (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18))) (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17))) ;; As parameter of control constructs and instructions (memory 1) (func (export "as-select-first") (result i32) (select (call_indirect (type $out-i32) (i32.const 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-if-condition") (result i32) (if (result i32) (call_indirect (type $out-i32) (i32.const 0)) (then (i32.const 1)) (else (i32.const 2))) ) (func (export "as-br_if-first") (result i64) (block (result i64) (br_if 0 (call_indirect (type $out-i64) (i32.const 1)) (i32.const 2))) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)))) ) (func (export "as-br_table-first") (result f32) (block (result f32) (call_indirect (type $out-f32) (i32.const 2)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (call_indirect (type $out-i32) (i32.const 0)) (br_table 0 0)) ) (func (export "as-store-first") (call_indirect (type $out-i32) (i32.const 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 10) (call_indirect (type $out-f64) (i32.const 3)) (f64.store) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-return-value") (result i32) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (return) ) (func (export "as-drop-operand") (call_indirect (type $over-i64) (i64.const 1) (i32.const 5)) (drop) ) (func (export "as-br-value") (result f32) (block (result f32) (br 0 (call_indirect (type $over-f32) (f32.const 1) (i32.const 6)))) ) (func (export "as-local.set-value") (result f64) (local f64) (local.set 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) (local.get 0) ) (func (export "as-local.tee-value") (result f64) (local f64) (local.tee 0 (call_indirect (type $over-f64) (f64.const 1) (i32.const 7))) ) (global $a (mut f64) (f64.const 10.0)) (func (export "as-global.set-value") (result f64) (global.set $a (call_indirect (type $over-f64) (f64.const 1.0) (i32.const 7))) (global.get $a) ) (func (export "as-load-operand") (result i32) (i32.load (call_indirect (type $out-i32) (i32.const 0))) ) (func (export "as-unary-operand") (result f32) (block (result f32) (f32.sqrt (call_indirect (type $over-f32) (f32.const 0x0p+0) (i32.const 6)) ) ) ) (func (export "as-binary-left") (result i32) (block (result i32) (i32.add (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-binary-right") (result i32) (block (result i32) (i32.sub (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-test-operand") (result i32) (block (result i32) (i32.eqz (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-compare-left") (result i32) (block (result i32) (i32.le_u (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) (i32.const 10) ) ) ) (func (export "as-compare-right") (result i32) (block (result i32) (i32.ne (i32.const 10) (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) (func (export "as-convert-operand") (result i64) (block (result i64) (i64.extend_i32_s (call_indirect (type $over-i32) (i32.const 1) (i32.const 4)) ) ) ) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-index") (i64.const 100)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) (assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) (assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) (assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) (assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call type mismatch") (assert_trap (invoke "dispatch" (i32.const 29) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") (assert_return (invoke "dispatch-structural-i64" (i32.const 5)) (i64.const 9)) (assert_return (invoke "dispatch-structural-i64" (i32.const 12)) (i64.const 362880)) (assert_return (invoke "dispatch-structural-i64" (i32.const 13)) (i64.const 55)) (assert_return (invoke "dispatch-structural-i64" (i32.const 20)) (i64.const 9)) (assert_trap (invoke "dispatch-structural-i64" (i32.const 11)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i64" (i32.const 22)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-i32" (i32.const 4)) (i32.const 9)) (assert_return (invoke "dispatch-structural-i32" (i32.const 23)) (i32.const 362880)) (assert_return (invoke "dispatch-structural-i32" (i32.const 26)) (i32.const 55)) (assert_return (invoke "dispatch-structural-i32" (i32.const 19)) (i32.const 9)) (assert_trap (invoke "dispatch-structural-i32" (i32.const 9)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-i32" (i32.const 21)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f32" (i32.const 6)) (f32.const 9.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 24)) (f32.const 362880.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 27)) (f32.const 55.0)) (assert_return (invoke "dispatch-structural-f32" (i32.const 21)) (f32.const 9.0)) (assert_trap (invoke "dispatch-structural-f32" (i32.const 8)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f32" (i32.const 19)) "indirect call type mismatch") (assert_return (invoke "dispatch-structural-f64" (i32.const 7)) (f64.const 9.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 25)) (f64.const 362880.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 28)) (f64.const 55.0)) (assert_return (invoke "dispatch-structural-f64" (i32.const 22)) (f64.const 9.0)) (assert_trap (invoke "dispatch-structural-f64" (i32.const 10)) "indirect call type mismatch") (assert_trap (invoke "dispatch-structural-f64" (i32.const 18)) "indirect call type mismatch") (assert_return (invoke "fac-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-i64" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac-i64" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fac-i32" (i32.const 5)) (i32.const 120)) (assert_return (invoke "fac-i32" (i32.const 10)) (i32.const 3628800)) (assert_return (invoke "fac-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fac-f32" (f32.const 5.0)) (f32.const 120.0)) (assert_return (invoke "fac-f32" (f32.const 10.0)) (f32.const 3628800.0)) (assert_return (invoke "fac-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fac-f64" (f64.const 5.0)) (f64.const 120.0)) (assert_return (invoke "fac-f64" (f64.const 10.0)) (f64.const 3628800.0)) (assert_return (invoke "fib-i64" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib-i64" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib-i64" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib-i64" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "fib-i32" (i32.const 0)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 1)) (i32.const 1)) (assert_return (invoke "fib-i32" (i32.const 2)) (i32.const 2)) (assert_return (invoke "fib-i32" (i32.const 5)) (i32.const 8)) (assert_return (invoke "fib-i32" (i32.const 20)) (i32.const 10946)) (assert_return (invoke "fib-f32" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 1.0)) (f32.const 1.0)) (assert_return (invoke "fib-f32" (f32.const 2.0)) (f32.const 2.0)) (assert_return (invoke "fib-f32" (f32.const 5.0)) (f32.const 8.0)) (assert_return (invoke "fib-f32" (f32.const 20.0)) (f32.const 10946.0)) (assert_return (invoke "fib-f64" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 1.0)) (f64.const 1.0)) (assert_return (invoke "fib-f64" (f64.const 2.0)) (f64.const 2.0)) (assert_return (invoke "fib-f64" (f64.const 5.0)) (f64.const 8.0)) (assert_return (invoke "fib-f64" (f64.const 20.0)) (f64.const 10946.0)) (assert_return (invoke "even" (i32.const 0)) (i32.const 44)) (assert_return (invoke "even" (i32.const 1)) (i32.const 99)) (assert_return (invoke "even" (i32.const 100)) (i32.const 44)) (assert_return (invoke "even" (i32.const 77)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i32.const 200)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 77)) (i32.const 44)) (assert_exhaustion (invoke "runaway") "call stack exhausted") (assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") (assert_return (invoke "as-select-first") (i32.const 0x132)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-if-condition") (i32.const 1)) (assert_return (invoke "as-br_if-first") (i64.const 0x164)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (f32.const 0xf32)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-return-value") (i32.const 1)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (f32.const 1)) (assert_return (invoke "as-local.set-value") (f64.const 1)) (assert_return (invoke "as-local.tee-value") (f64.const 1)) (assert_return (invoke "as-global.set-value") (f64.const 1.0)) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-unary-operand") (f32.const 0x0p+0)) (assert_return (invoke "as-binary-left") (i32.const 11)) (assert_return (invoke "as-binary-right") (i32.const 9)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-left") (i32.const 1)) (assert_return (invoke "as-compare-right") (i32.const 1)) (assert_return (invoke "as-convert-operand") (i64.const 1)) ;; Invalid syntax (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (type $sig) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (param i32) (result i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (type $sig) (param i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (type $sig)" " (i32.const 0) (i32.const 0)" " )" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (result i32)" " (call_indirect (result i32) (param i32) (i32.const 0) (i32.const 0))" ")" ) "unexpected token" ) (assert_malformed (module quote "(table 0 funcref)" "(func (call_indirect (param $x i32) (i32.const 0) (i32.const 0)))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (result i32) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(table 0 funcref)" "(func" " (call_indirect (type $sig) (param i32) (i32.const 0) (i32.const 0))" ")" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(table 0 funcref)" "(func (result i32)" " (call_indirect (type $sig) (param i32) (result i32)" " (i32.const 0) (i32.const 0)" " )" ")" ) "inline function type" ) ;; Invalid typing (assert_invalid (module (type (func)) (func $no-table (call_indirect (type 0) (i32.const 0))) ) "unknown table" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (result i64))) (table 0 funcref) (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-2-vs-0 (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-first-void-vs-num (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-second-void-vs-num (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 f64))) (table 0 funcref) (func $type-first-num-vs-num (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $type-second-num-vs-num (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-block (block (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-block (block (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-loop (loop (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32)) (type $sig (func (param i32))) (table funcref (elem $f)) (func $type-first-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0)) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32 i32)) (type $sig (func (param i32 i32))) (table funcref (elem $f)) (func $type-second-empty-in-then (i32.const 0) (i32.const 0) (if (then (call_indirect (type $sig) (i32.const 0) (i32.const 0)) ) ) ) ) "type mismatch" ) ;; Unbound type (assert_invalid (module (table 0 funcref) (func $unbound-type (call_indirect (type 1) (i32.const 0))) ) "unknown type" ) (assert_invalid (module (table 0 funcref) (func $large-type (call_indirect (type 1012321300) (i32.const 0))) ) "unknown type" ) ;; Unbound function in table (assert_invalid (module (table funcref (elem 0 0))) "unknown function" ) binaryen-version_108/test/spec/call_indirect_refnull.wast000066400000000000000000000004241423707623100241010ustar00rootroot00000000000000(module (table $t 1 1 funcref) (elem (table $t) (i32.const 0) funcref (ref.null func)) (func $call-refnull (export "call-refnull") (result f32) (call_indirect (result f32) (i32.const 0)) ) ) (assert_trap (invoke "call-refnull") "uninitialized table element" )binaryen-version_108/test/spec/call_indirect_sig_mismatch.wast000066400000000000000000000005751423707623100251100ustar00rootroot00000000000000(module (type $funcref_=>_none (func (param funcref))) (table funcref (elem $callee)) (export "sig_mismatch" (func $sig_mismatch)) (func $callee (param $0 externref)) (func $sig_mismatch (call_indirect (type $funcref_=>_none) (ref.null func) (i32.const 0) ) ) ) (assert_trap (invoke "sig_mismatch") "callIndirect: function signatures don't match") binaryen-version_108/test/spec/call_ref.wast000066400000000000000000000100301423707623100213170ustar00rootroot00000000000000(module (type $ii (func (param i32) (result i32))) (func $apply (param $f (ref $ii)) (param $x i32) (result i32) (call_ref (local.get $x) (local.get $f)) ) (func $f (type $ii) (i32.mul (local.get 0) (local.get 0))) (func $g (type $ii) (i32.sub (i32.const 0) (local.get 0))) (elem declare func $f $g) (func (export "run") (param $x i32) (result i32) (local $rf (ref null $ii)) (local $rg (ref null $ii)) (local.set $rf (ref.func $f)) (local.set $rg (ref.func $g)) (call_ref (call_ref (local.get $x) (local.get $rf)) (local.get $rg)) ) (func (export "null") (result i32) (call_ref (i32.const 1) (ref.null $ii)) ) ;; Recursion (type $ll (func (param i64) (result i64))) (type $lll (func (param i64 i64) (result i64))) (elem declare func $fac) (global $fac (ref $ll) (ref.func $fac)) (func $fac (export "fac") (type $ll) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call_ref (i64.sub (local.get 0) (i64.const 1)) (global.get $fac)) ) ) ) ) (elem declare func $fac-acc) (global $fac-acc (ref $lll) (ref.func $fac-acc)) (func $fac-acc (export "fac-acc") (type $lll) (if (result i64) (i64.eqz (local.get 0)) (then (local.get 1)) (else (call_ref (i64.sub (local.get 0) (i64.const 1)) (i64.mul (local.get 0) (local.get 1)) (global.get $fac-acc) ) ) ) ) (elem declare func $fib) (global $fib (ref $ll) (ref.func $fib)) (func $fib (export "fib") (type $ll) (if (result i64) (i64.le_u (local.get 0) (i64.const 1)) (then (i64.const 1)) (else (i64.add (call_ref (i64.sub (local.get 0) (i64.const 2)) (global.get $fib)) (call_ref (i64.sub (local.get 0) (i64.const 1)) (global.get $fib)) ) ) ) ) (elem declare func $even $odd) (global $even (ref $ll) (ref.func $even)) (global $odd (ref $ll) (ref.func $odd)) (func $even (export "even") (type $ll) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 44)) (else (call_ref (i64.sub (local.get 0) (i64.const 1)) (global.get $odd))) ) ) (func $odd (export "odd") (type $ll) (if (result i64) (i64.eqz (local.get 0)) (then (i64.const 99)) (else (call_ref (i64.sub (local.get 0) (i64.const 1)) (global.get $even))) ) ) ) (assert_return (invoke "run" (i32.const 0)) (i32.const 0)) (assert_return (invoke "run" (i32.const 3)) (i32.const -9)) (assert_trap (invoke "null") "null function") (assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) (assert_return (invoke "fac-acc" (i64.const 25) (i64.const 1)) (i64.const 7034535277573963776) ) (assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "even" (i64.const 0)) (i64.const 44)) (assert_return (invoke "even" (i64.const 1)) (i64.const 99)) (assert_return (invoke "even" (i64.const 100)) (i64.const 44)) (assert_return (invoke "even" (i64.const 77)) (i64.const 99)) (assert_return (invoke "odd" (i64.const 0)) (i64.const 99)) (assert_return (invoke "odd" (i64.const 1)) (i64.const 44)) (assert_return (invoke "odd" (i64.const 200)) (i64.const 99)) (assert_return (invoke "odd" (i64.const 77)) (i64.const 44)) (assert_invalid (module (func $f (param $r externref) (call_ref (local.get $r)) ) ) "type mismatch" ) binaryen-version_108/test/spec/comments.wast000066400000000000000000000012751423707623100214100ustar00rootroot00000000000000;; Test comment syntax ;;comment ;;;;;;;;;;; ;;comment ( ;;comment module;;comment );;comment ;;) ;;;) ;; ;) ;; (; (;;) (;comment;) (;;comment;) (;;;comment;) (;;;;;;;;;;;;;;) (;(((((((((( ;) (;)))))))))));) (;comment";) (;comment"";) (;comment""";) ;; ASCII 00-1F, 7F (; ;) (;Heiße Würstchen;) (;;) (;comment comment;) (;comment;) (;comment;)((;comment;) (;comment;)module(;comment;) (;comment;))(;comment;) (;comment(;nested;)comment;) (;comment (;nested ;)comment ;) (module (;comment(;nested(;further;)nested;)comment;) ) (;comment;;comment;) (;comment;;comment ;) (module (;comment;;comment(;nested;)comment;) )binaryen-version_108/test/spec/const.wast000066400000000000000000001570061423707623100207150ustar00rootroot00000000000000;; Test t.const instructions ;; Syntax error (module (func (i32.const 0_123_456_789) drop)) (module (func (i32.const 0x0_9acf_fBDF) drop)) (assert_malformed (module quote "(func (i32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i32.const 0xg) drop)") "unknown operator" ) (module (func (i64.const 0_123_456_789) drop)) (module (func (i64.const 0x0125_6789_ADEF_bcef) drop)) (assert_malformed (module quote "(func (i64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (i64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (i64.const 0xg) drop)") "unknown operator" ) (module (func (f32.const 0123456789) drop)) (module (func (f32.const 0123456789e019) drop)) (module (func (f32.const 0123456789e+019) drop)) (module (func (f32.const 0123456789e-019) drop)) (module (func (f32.const 0123456789.) drop)) (module (func (f32.const 0123456789.e019) drop)) (module (func (f32.const 0123456789.e+019) drop)) (module (func (f32.const 0123456789.e-019) drop)) (module (func (f32.const 0123456789.0123456789) drop)) (module (func (f32.const 0123456789.0123456789e019) drop)) (module (func (f32.const 0123456789.0123456789e+019) drop)) (module (func (f32.const 0123456789.0123456789e-019) drop)) (module (func (f32.const 0x0123456789ABCDEF) drop)) (module (func (f32.const 0x0123456789ABCDEFp019) drop)) (module (func (f32.const 0x0123456789ABCDEFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEFp-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.) drop)) (module (func (f32.const 0x0123456789ABCDEF.p019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.p-019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aF) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp+019) drop)) (module (func (f32.const 0x0123456789ABCDEF.019aFp-019) drop)) (assert_malformed (module quote "(func (f32.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f32.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const 0x0pA) drop)") "unknown operator" ) (module (func (f64.const 0123456789) drop)) (module (func (f64.const 0123456789e019) drop)) (module (func (f64.const 0123456789e+019) drop)) (module (func (f64.const 0123456789e-019) drop)) (module (func (f64.const 0123456789.) drop)) (module (func (f64.const 0123456789.e019) drop)) (module (func (f64.const 0123456789.e+019) drop)) (module (func (f64.const 0123456789.e-019) drop)) (module (func (f64.const 0123456789.0123456789) drop)) (module (func (f64.const 0123456789.0123456789e019) drop)) (module (func (f64.const 0123456789.0123456789e+019) drop)) (module (func (f64.const 0123456789.0123456789e-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdefp-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.p-019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdef) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp+019) drop)) (module (func (f64.const 0x0123456789ABCDEFabcdef.0123456789ABCDEFabcdefp-019) drop)) (assert_malformed (module quote "(func (f64.const) drop)") "unexpected token" ) (assert_malformed (module quote "(func (f64.const .0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const .0e0) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0e+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0.0e-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 1x) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0xg) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x.) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.g) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p+) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0.0p-) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const 0x0pA) drop)") "unknown operator" ) ;; Range error (module (func (i32.const 0xffffffff) drop)) (module (func (i32.const -0x80000000) drop)) (assert_malformed (module quote "(func (i32.const 0x100000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -0x80000001) drop)") "constant out of range" ) (module (func (i32.const 4294967295) drop)) (module (func (i32.const -2147483648) drop)) (assert_malformed (module quote "(func (i32.const 4294967296) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i32.const -2147483649) drop)") "constant out of range" ) (module (func (i64.const 0xffffffffffffffff) drop)) (module (func (i64.const -0x8000000000000000) drop)) (assert_malformed (module quote "(func (i64.const 0x10000000000000000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -0x8000000000000001) drop)") "constant out of range" ) (module (func (i64.const 18446744073709551615) drop)) (module (func (i64.const -9223372036854775808) drop)) (assert_malformed (module quote "(func (i64.const 18446744073709551616) drop)") "constant out of range" ) (assert_malformed (module quote "(func (i64.const -9223372036854775809) drop)") "constant out of range" ) (module (func (f32.const 0x1p127) drop)) (module (func (f32.const -0x1p127) drop)) (module (func (f32.const 0x1.fffffep127) drop)) (module (func (f32.const -0x1.fffffep127) drop)) (module (func (f32.const 0x1.fffffe7p127) drop)) (module (func (f32.const -0x1.fffffe7p127) drop)) (module (func (f32.const 0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const -0x1.fffffefffffff8000000p127) drop)) (module (func (f32.const 0x1.fffffefffffffffffffp127) drop)) (module (func (f32.const -0x1.fffffefffffffffffffp127) drop)) (assert_malformed (module quote "(func (f32.const 0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1p128) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const 0x1.ffffffp127) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -0x1.ffffffp127) drop)") "constant out of range" ) (module (func (f32.const 1e38) drop)) (module (func (f32.const -1e38) drop)) (assert_malformed (module quote "(func (f32.const 1e39) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -1e39) drop)") "constant out of range" ) (module (func (f32.const 340282356779733623858607532500980858880) drop)) (module (func (f32.const -340282356779733623858607532500980858880) drop)) (assert_malformed (module quote "(func (f32.const 340282356779733661637539395458142568448) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const -340282356779733661637539395458142568448) drop)") "constant out of range" ) (module (func (f64.const 0x1p1023) drop)) (module (func (f64.const -0x1p1023) drop)) (module (func (f64.const 0x1.fffffffffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffffp1023) drop)) (module (func (f64.const 0x1.fffffffffffff7p1023) drop)) (module (func (f64.const -0x1.fffffffffffff7p1023) drop)) (module (func (f64.const 0x1.fffffffffffff7ffffffp1023) drop)) (module (func (f64.const -0x1.fffffffffffff7ffffffp1023) drop)) (assert_malformed (module quote "(func (f64.const 0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1p1024) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const 0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -0x1.fffffffffffff8p1023) drop)") "constant out of range" ) (module (func (f64.const 1e308) drop)) (module (func (f64.const -1e308) drop)) (assert_malformed (module quote "(func (f64.const 1e309) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -1e309) drop)") "constant out of range" ) (module (func (f64.const 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (module (func (f64.const -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368) drop)) (assert_malformed (module quote "(func (f64.const 269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const -269653970229347356221791135597556535197105851288767494898376215204735891170042808140884337949150317257310688430271573696351481990334196274152701320055306275479074865864826923114368235135583993416113802762682700913456874855354834422248712838998185022412196739306217084753107265771378949821875606039276187287552) drop)") "constant out of range" ) (module (func (f32.const nan:0x1) drop)) (module (func (f64.const nan:0x1) drop)) (module (func (f32.const nan:0x7f_ffff) drop)) (module (func (f64.const nan:0xf_ffff_ffff_ffff) drop)) (assert_malformed (module quote "(func (f32.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f64.const nan:1) drop)") "unknown operator" ) (assert_malformed (module quote "(func (f32.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x0) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f32.const nan:0x80_0000) drop)") "constant out of range" ) (assert_malformed (module quote "(func (f64.const nan:0x10_0000_0000_0000) drop)") "constant out of range" ) ;; Rounding behaviour ;; f32, small exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p-50))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p-50))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.004000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.007ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.008000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00bffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000000p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00c000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.00fffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.010000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.013ffffffp-64))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const +0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const +0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const -0x4000.014000001p-64))) (assert_return (invoke "f") (f32.const -0x1.000006p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const +0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443573e-16))) (assert_return (invoke "f") (f32.const -0x1.000000p-50)) (module (func (export "f") (result f32) (f32.const +8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817847263968443574e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const +0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284252e-16))) (assert_return (invoke "f") (f32.const -0x1.000002p-50)) (module (func (export "f") (result f32) (f32.const +8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const +0x1.000004p-50)) (module (func (export "f") (result f32) (f32.const -8.8817857851880284253e-16))) (assert_return (invoke "f") (f32.const -0x1.000004p-50)) ;; f32, large exponent (module (func (export "f") (result f32) (f32.const +0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000100000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000001fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000200000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000002fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000300000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000003fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000400000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.000004fffffffffffp+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000000p+50))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const +0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const -0x1.00000500000000001p+50))) (assert_return (invoke "f") (f32.const -0x1.000006p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000000))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000000))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +0x4000004000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000004000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000007ffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000007ffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000000))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000000))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x4000008000001))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x4000008000001))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000bffffff))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -0x400000bffffff))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +0x400000c000000))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -0x400000c000000))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951488))) (assert_return (invoke "f") (f32.const +0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951488))) (assert_return (invoke "f") (f32.const -0x1.000000p+50)) (module (func (export "f") (result f32) (f32.const +1125899973951489))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125899973951489))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169215))) (assert_return (invoke "f") (f32.const +0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169215))) (assert_return (invoke "f") (f32.const -0x1.000002p+50)) (module (func (export "f") (result f32) (f32.const +1125900108169216))) (assert_return (invoke "f") (f32.const +0x1.000004p+50)) (module (func (export "f") (result f32) (f32.const -1125900108169216))) (assert_return (invoke "f") (f32.const -0x1.000004p+50)) ;; f32, subnormal (module (func (export "f") (result f32) (f32.const +0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000000p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000100000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000001fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000200000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000002fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000002p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000300000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000003fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000400000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.000004fffffffffffp-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const +0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000000p-126))) (assert_return (invoke "f") (f32.const -0x0.000004p-126)) (module (func (export "f") (result f32) (f32.const +0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const +0x0.000006p-126)) (module (func (export "f") (result f32) (f32.const -0x0.00000500000000001p-126))) (assert_return (invoke "f") (f32.const -0x0.000006p-126)) ;; f32, round down at limit to infinity (module (func (export "f") (result f32) (f32.const +0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffe8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffff8p127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const +0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const +0x1.fffffep127)) (module (func (export "f") (result f32) (f32.const -0x1.fffffefffffffffffp127))) (assert_return (invoke "f") (f32.const -0x1.fffffep127)) ;; f64, small exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000007fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000800000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000bfffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000c00000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000000ffffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000000p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001000000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.0000013fffffffffffp-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p-600)) (module (func (export "f") (result f64) (f64.const +0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const -0x8000000.000001400000000001p-627))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-600)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371995e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313371996e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383891e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+999)) (module (func (export "f") (result f64) (f64.const +5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+999)) (module (func (export "f") (result f64) (f64.const -5.3575430359313383892e+300))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+999)) ;; f64, large exponent (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000080000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000000fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000100000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000017ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000180000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.0000000000001fffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000200000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.00000000000027ffffffffffp+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000000p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+600)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p+600))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+600)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000100000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000001fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000200000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000002fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000300000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000003fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000400000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x20000000000004fffffffffff))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000000))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+97)) (module (func (export "f") (result f64) (f64.const +0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const -0x2000000000000500000000001))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p+97)) (module (func (export "f") (result f64) (f64.const +1152921504606847104))) (assert_return (invoke "f") (f64.const +0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847104))) (assert_return (invoke "f") (f64.const -0x1.0000000000000p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847105))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847105))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847359))) (assert_return (invoke "f") (f64.const +0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847359))) (assert_return (invoke "f") (f64.const -0x1.0000000000001p+60)) (module (func (export "f") (result f64) (f64.const +1152921504606847360))) (assert_return (invoke "f") (f64.const +0x1.0000000000002p+60)) (module (func (export "f") (result f64) (f64.const -1152921504606847360))) (assert_return (invoke "f") (f64.const -0x1.0000000000002p+60)) ;; f64, subnormal (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000000p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000080000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000000fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000100000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000017ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000001p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000180000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.0000000000001fffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000200000000001p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.00000000000027ffffffffffp-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const +0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const -0x0.000000000000280000000000p-1022))) (assert_return (invoke "f") (f64.const -0x0.0000000000002p-1022)) (module (func (export "f") (result f64) (f64.const +0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const +0x1.0000000000003p-1022)) (module (func (export "f") (result f64) (f64.const -0x1.000000000000280000000001p-1022))) (assert_return (invoke "f") (f64.const -0x1.0000000000003p-1022)) ;; f64, round down at limit to infinity (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff4p1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const +0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const +0x1.fffffffffffffp1023)) (module (func (export "f") (result f64) (f64.const -0x1.fffffffffffff7ffffffp1023))) (assert_return (invoke "f") (f64.const -0x1.fffffffffffffp1023)) binaryen-version_108/test/spec/conversions.wast000066400000000000000000001240371423707623100221350ustar00rootroot00000000000000(module (func (export "i64.extend_i32_s") (param $x i32) (result i64) (i64.extend_i32_s (local.get $x))) (func (export "i64.extend_i32_u") (param $x i32) (result i64) (i64.extend_i32_u (local.get $x))) (func (export "i32.wrap_i64") (param $x i64) (result i32) (i32.wrap_i64 (local.get $x))) (func (export "i32.trunc_f32_s") (param $x f32) (result i32) (i32.trunc_f32_s (local.get $x))) (func (export "i32.trunc_f32_u") (param $x f32) (result i32) (i32.trunc_f32_u (local.get $x))) (func (export "i32.trunc_f64_s") (param $x f64) (result i32) (i32.trunc_f64_s (local.get $x))) (func (export "i32.trunc_f64_u") (param $x f64) (result i32) (i32.trunc_f64_u (local.get $x))) (func (export "i64.trunc_f32_s") (param $x f32) (result i64) (i64.trunc_f32_s (local.get $x))) (func (export "i64.trunc_f32_u") (param $x f32) (result i64) (i64.trunc_f32_u (local.get $x))) (func (export "i64.trunc_f64_s") (param $x f64) (result i64) (i64.trunc_f64_s (local.get $x))) (func (export "i64.trunc_f64_u") (param $x f64) (result i64) (i64.trunc_f64_u (local.get $x))) (func (export "f32.convert_i32_s") (param $x i32) (result f32) (f32.convert_i32_s (local.get $x))) (func (export "f32.convert_i64_s") (param $x i64) (result f32) (f32.convert_i64_s (local.get $x))) (func (export "f64.convert_i32_s") (param $x i32) (result f64) (f64.convert_i32_s (local.get $x))) (func (export "f64.convert_i64_s") (param $x i64) (result f64) (f64.convert_i64_s (local.get $x))) (func (export "f32.convert_i32_u") (param $x i32) (result f32) (f32.convert_i32_u (local.get $x))) (func (export "f32.convert_i64_u") (param $x i64) (result f32) (f32.convert_i64_u (local.get $x))) (func (export "f64.convert_i32_u") (param $x i32) (result f64) (f64.convert_i32_u (local.get $x))) (func (export "f64.convert_i64_u") (param $x i64) (result f64) (f64.convert_i64_u (local.get $x))) (func (export "f64.promote_f32") (param $x f32) (result f64) (f64.promote_f32 (local.get $x))) (func (export "f32.demote_f64") (param $x f64) (result f32) (f32.demote_f64 (local.get $x))) (func (export "f32.reinterpret_i32") (param $x i32) (result f32) (f32.reinterpret_i32 (local.get $x))) (func (export "f64.reinterpret_i64") (param $x i64) (result f64) (f64.reinterpret_i64 (local.get $x))) (func (export "i32.reinterpret_f32") (param $x f32) (result i32) (i32.reinterpret_f32 (local.get $x))) (func (export "i64.reinterpret_f64") (param $x f64) (result i64) (i64.reinterpret_f64 (local.get $x))) ) (assert_return (invoke "i64.extend_i32_s" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_s" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -10000)) (i64.const -10000)) (assert_return (invoke "i64.extend_i32_s" (i32.const -1)) (i64.const -1)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_s" (i32.const 0x80000000)) (i64.const 0xffffffff80000000)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_i32_u" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_i32_u" (i32.const -10000)) (i64.const 0x00000000ffffd8f0)) (assert_return (invoke "i64.extend_i32_u" (i32.const -1)) (i64.const 0xffffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_i32_u" (i32.const 0x80000000)) (i64.const 0x0000000080000000)) (assert_return (invoke "i32.wrap_i64" (i64.const -1)) (i32.const -1)) (assert_return (invoke "i32.wrap_i64" (i64.const -100000)) (i32.const -100000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x80000000)) (i32.const 0x80000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff7fffffff)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xfffffffeffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.wrap_i64" (i64.const 0)) (i32.const 0)) (assert_return (invoke "i32.wrap_i64" (i64.const 1311768467463790320)) (i32.const 0x9abcdef0)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x00000000ffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f32_s" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_f32_s" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_f32_s" (f32.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -2147483904.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f32_u" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f32_u" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f32_u" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_trap (invoke "i32.trunc_f32_u" (f32.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_f64_s" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -2147483649.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") ;; f64 -> i32 rounding to the exact i32 limit (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9)) (i32.const -2147483648)) (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.9)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.9)) (i32.const 4294967295)) ;; f64 -> i32 rounding at the exact boundary + float parsing (assert_return (invoke "i32.trunc_f64_s" (f64.const -2147483648.9999997)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_f64_s" (f64.const -2147483648.9999998)) "integer overflow") (assert_return (invoke "i32.trunc_f64_s" (f64.const 2147483647.9999998)) (i32.const 2147483647)) (assert_trap (invoke "i32.trunc_f64_s" (f64.const 2147483647.9999999)) "integer overflow") (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.99999999999999994)) (i32.const 0)) (assert_trap (invoke "i32.trunc_f64_u" (f64.const -0.99999999999999995)) "integer overflow") (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.9999997)) (i32.const 4294967295)) (assert_trap (invoke "i32.trunc_f64_u" (f64.const 4294967295.9999998)) "integer overflow") (assert_return (invoke "i32.trunc_f64_u" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_f64_u" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_f64_u" (f64.const 1e8)) (i32.const 100000000)) (assert_trap (invoke "i32.trunc_f64_u" (f64.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e16)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 1e30)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const 9223372036854775808)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i32.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_s" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f32_s" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f32_s" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_f32_s" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f32_s" (f32.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -9223373136366403584.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_s" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f32_u" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_f32_u" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f32_u" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_trap (invoke "i64.trunc_f32_u" (f32.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const nan:0x200000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f32_u" (f32.const -nan:0x200000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_s" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_f64_s" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_f64_s" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_f64_s" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_s" (f64.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -9223372036854777856.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_s" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_f64_u" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_f64_u" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_f64_u" (f64.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -inf)) "integer overflow") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const nan:0x4000000000000)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan)) "invalid conversion to integer") (assert_trap (invoke "i64.trunc_f64_u" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") (assert_return (invoke "f32.convert_i32_s" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const -2147483648)) (f32.const -2147483648)) (assert_return (invoke "f32.convert_i32_s" (i32.const 1234567890)) (f32.const 0x1.26580cp+30)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_s" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i32_s" (i32.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_s" (i64.const -9223372036854775808)) (f32.const -9223372036854775808)) (assert_return (invoke "f32.convert_i64_s" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_s" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x7fffff4000000001)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x8000004000000001)) (f32.const -0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_s" (i64.const 0xffdfffffdfffffff)) (f32.const -0x1.000002p+53)) (assert_return (invoke "f64.convert_i32_s" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_s" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_s" (i32.const -2147483648)) (f64.const -2147483648)) (assert_return (invoke "f64.convert_i32_s" (i32.const 987654321)) (f64.const 987654321)) (assert_return (invoke "f64.convert_i64_s" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9223372036854775808)) (f64.const -9223372036854775808)) (assert_return (invoke "f64.convert_i64_s" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740993)) (f64.const -9007199254740992)) (assert_return (invoke "f64.convert_i64_s" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.convert_i64_s" (i64.const -9007199254740995)) (f64.const -9007199254740996)) (assert_return (invoke "f32.convert_i32_u" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const -2147483648)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x12345678)) (f32.const 0x1.234568p+28)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xffffffff)) (f32.const 4294967296.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000080)) (f32.const 0x1.000000p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000081)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0x80000082)) (f32.const 0x1.000002p+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe80)) (f32.const 0x1.fffffcp+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe81)) (f32.const 0x1.fffffep+31)) (assert_return (invoke "f32.convert_i32_u" (i32.const 0xfffffe82)) (f32.const 0x1.fffffep+31)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i32_u" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i32_u" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_i64_u" (i64.const -9223372036854775808)) (f32.const 9223372036854775808)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_i64_u" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x7fffffbfffffffff)) (f32.const 0x1.fffffep+62)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0x8000008000000001)) (f32.const 0x1.000002p+63)) (assert_return (invoke "f32.convert_i64_u" (i64.const 0xfffffe8000000001)) (f32.const 0x1.fffffep+63)) (assert_return (invoke "f64.convert_i32_u" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i32_u" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_i32_u" (i32.const -2147483648)) (f64.const 2147483648)) (assert_return (invoke "f64.convert_i32_u" (i32.const 0xffffffff)) (f64.const 4294967295.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_i64_u" (i64.const -9223372036854775808)) (f64.const 9223372036854775808)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000400)) (f64.const 0x1.0000000000000p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000401)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0x8000000000000402)) (f64.const 0x1.0000000000001p+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff400)) (f64.const 0x1.ffffffffffffep+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff401)) (f64.const 0x1.fffffffffffffp+63)) (assert_return (invoke "f64.convert_i64_u" (i64.const 0xfffffffffffff402)) (f64.const 0x1.fffffffffffffp+63)) ;; Test rounding directions. (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_i64_u" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-149)) (f64.const 0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1p-149)) (f64.const -0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const 1.0)) (f64.const 1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -1.0)) (f64.const -1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1.fffffep+127)) (f64.const -0x1.fffffep+127)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1.fffffep+127)) (f64.const 0x1.fffffep+127)) ;; Generated randomly by picking a random int and reinterpret it to float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-119)) (f64.const 0x1p-119)) ;; Generated randomly by picking a random float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1.8f867ep+125)) (f64.const 6.6382536710104395e+37)) (assert_return (invoke "f64.promote_f32" (f32.const inf)) (f64.const inf)) (assert_return (invoke "f64.promote_f32" (f32.const -inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "f64.promote_f32" (f32.const nan))) (assert_return_arithmetic_nan (invoke "f64.promote_f32" (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "f64.promote_f32" (f32.const -nan))) (assert_return_arithmetic_nan (invoke "f64.promote_f32" (f32.const -nan:0x200000))) (assert_return (invoke "f32.demote_f64" (f64.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 1.0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const -1.0)) (f32.const -1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffe0000000p-127)) (f32.const 0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffe0000000p-127)) (f32.const -0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffdfffffffp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffdfffffffp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000000p+127)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000000p+127)) (f32.const -0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000001p+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000001p+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffefffffffp+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffefffffffp+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.ffffffp+127)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.ffffffp+127)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-119)) (f32.const 0x1p-119)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.8f867ep+125)) (f32.const 0x1.8f867ep+125)) (assert_return (invoke "f32.demote_f64" (f64.const inf)) (f32.const inf)) (assert_return (invoke "f32.demote_f64" (f64.const -inf)) (f32.const -inf)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p+0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffffffffffp-1)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+0)) (f32.const 0x1.000000p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000050000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+24)) (f32.const 0x1.0p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+24)) (f32.const 0x1.000004p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.4eae4f7024c7p+108)) (f32.const 0x1.4eae5p+108)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.a12e71e358685p-113)) (f32.const 0x1.a12e72p-113)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.cb98354d521ffp-127)) (f32.const 0x1.cb9834p-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.6972b30cfb562p+1)) (f32.const -0x1.6972b4p+1)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.bedbe4819d4c4p+112)) (f32.const -0x1.bedbe4p+112)) (assert_return_canonical_nan (invoke "f32.demote_f64" (f64.const nan))) (assert_return_arithmetic_nan (invoke "f32.demote_f64" (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "f32.demote_f64" (f64.const -nan))) (assert_return_arithmetic_nan (invoke "f32.demote_f64" (f64.const -nan:0x4000000000000))) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0p-150)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0p-150)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0000000000001p-150)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x80000000)) (f32.const -0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 1)) (f32.const 0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -1)) (f32.const -nan:0x7fffff)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 123456789)) (f32.const 0x1.b79a2ap-113)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -2147483647)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7f800000)) (f32.const inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xff800000)) (f32.const -inf)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fc00000)) (f32.const nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffc00000)) (f32.const -nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -1)) (f64.const -nan:0xfffffffffffff)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x8000000000000000)) (f64.const -0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1234567890)) (f64.const 0x0.00000499602d2p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -9223372036854775807)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff0000000000000)) (f64.const inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff0000000000000)) (f64.const -inf)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff8000000000000)) (f64.const nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff8000000000000)) (f64.const -nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff4000000000000)) (f64.const nan:0x4000000000000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff4000000000000)) (f64.const -nan:0x4000000000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x7fffff)) (i32.const -1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1p-149)) (i32.const 0x80000001)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 1.0)) (i32.const 1065353216)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 3.1415926)) (i32.const 1078530010)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1.fffffep+127)) (i32.const 2139095039)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1.fffffep+127)) (i32.const -8388609)) (assert_return (invoke "i32.reinterpret_f32" (f32.const inf)) (i32.const 0x7f800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -inf)) (i32.const 0xff800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan)) (i32.const 0x7fc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan)) (i32.const 0xffc00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const nan:0x200000)) (i32.const 0x7fa00000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x200000)) (i32.const 0xffa00000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0xfffffffffffff)) (i64.const -1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0x8000000000000001)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 1.0)) (i64.const 4607182418800017408)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 3.14159265358979)) (i64.const 4614256656552045841)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x1.fffffffffffffp+1023)) (i64.const 9218868437227405311)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x1.fffffffffffffp+1023)) (i64.const -4503599627370497)) (assert_return (invoke "i64.reinterpret_f64" (f64.const inf)) (i64.const 0x7ff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -inf)) (i64.const 0xfff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan)) (i64.const 0xfff8000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const nan:0x4000000000000)) (i64.const 0x7ff4000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0x4000000000000)) (i64.const 0xfff4000000000000)) ;; Type check (assert_invalid (module (func (result i32) (i32.wrap_i64 (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.trunc_f64_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.reinterpret_f32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_s (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.extend_i32_u (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f32_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.trunc_f64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.reinterpret_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.demote_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.reinterpret_i32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.promote_f32 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.reinterpret_i64 (i32.const 0)))) "type mismatch") binaryen-version_108/test/spec/custom.wast000066400000000000000000000064171423707623100211000ustar00rootroot00000000000000(module binary "\00asm" "\01\00\00\00" "\00\24\10" "a custom section" "this is the payload" "\00\20\10" "a custom section" "this is payload" "\00\11\10" "a custom section" "" "\00\10\00" "" "this is payload" "\00\01\00" "" "" "\00\24\10" "\00\00custom sectio\00" "this is the payload" "\00\24\10" "\ef\bb\bfa custom sect" "this is the payload" "\00\24\10" "a custom sect\e2\8c\a3" "this is the payload" "\00\1f\16" "module within a module" "\00asm" "\01\00\00\00" ) (module binary "\00asm" "\01\00\00\00" "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\01\01\00" ;; type section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\02\01\00" ;; import section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\03\01\00" ;; function section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\04\01\00" ;; table section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\05\01\00" ;; memory section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\06\01\00" ;; global section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\07\01\00" ;; export section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\09\01\00" ;; element section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0a\01\00" ;; code section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" "\0b\01\00" ;; data section "\00\0e\06" "custom" "payload" "\00\0e\06" "custom" "payload" ) (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\1a\06" "custom" "this is the payload" ;; custom section "\03\02\01\00" ;; function section "\07\0a\01\06\61\64\64\54\77\6f\00\00" ;; export section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\00\00\05\01\00\07\00\00" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\26\10" "a custom section" "this is the payload" ) "unexpected end" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\25\10" "a custom section" "this is the payload" "\00\24\10" "a custom section" "this is the payload" ) "invalid section id" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\01\07\01\60\02\7f\7f\01\7f" ;; type section "\00\25\10" "a custom section" "this is the payload" ;; invalid length! "\03\02\01\00" ;; function section "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section "\00\1b\07" "custom2" "this is the payload" ;; custom section ) "function and code section have inconsistent lengths" ) ;; Test concatenated modules. (assert_malformed (module binary "\00asm\01\00\00\00" "\00asm\01\00\00\00" ) "length out of bounds" ) binaryen-version_108/test/spec/data.wast000066400000000000000000000241351423707623100204740ustar00rootroot00000000000000;; Test the data section ;; Syntax (module (memory $m 1) (data (i32.const 0)) (data (i32.const 1) "a" "" "bcd") (data (offset (i32.const 0))) (data (offset (i32.const 0)) "" "a" "bc" "") (data (memory 0) (i32.const 0)) (data (memory 0x0) (i32.const 1) "a" "" "bcd") (data (memory 0x000) (offset (i32.const 0))) (data (memory 0) (offset (i32.const 0)) "" "a" "bc" "") (data (memory $m) (i32.const 0)) (data (memory $m) (i32.const 1) "a" "" "bcd") (data (memory $m) (offset (i32.const 0))) (data (memory $m) (offset (i32.const 0)) "" "a" "bc" "") (data $d1 (i32.const 0)) (data $d2 (i32.const 1) "a" "" "bcd") (data $d3 (offset (i32.const 0))) (data $d4 (offset (i32.const 0)) "" "a" "bc" "") (data $d5 (memory 0) (i32.const 0)) (data $d6 (memory 0x0) (i32.const 1) "a" "" "bcd") (data $d7 (memory 0x000) (offset (i32.const 0))) (data $d8 (memory 0) (offset (i32.const 0)) "" "a" "bc" "") (data $d9 (memory $m) (i32.const 0)) (data $d10 (memory $m) (i32.const 1) "a" "" "bcd") (data $d11 (memory $m) (offset (i32.const 0))) (data $d12 (memory $m) (offset (i32.const 0)) "" "a" "bc" "") ) ;; Basic use (module (memory 1) (data (i32.const 0) "a") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") ) (module (memory 1) (data (i32.const 0) "a") (data (i32.const 3) "b") (data (i32.const 100) "cde") (data (i32.const 5) "x") (data (i32.const 3) "c") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 1) "b") (data (i32.const 2) "cde") (data (i32.const 3) "f") (data (i32.const 2) "g") (data (i32.const 1) "h") ) (module (global (import "spectest" "global_i32") i32) (memory 1) (data (global.get 0) "a") ) (module (global (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get 0) "a") ) (module (global $g (import "spectest" "global_i32") i32) (memory 1) (data (global.get $g) "a") ) (module (global $g (import "spectest" "global_i32") i32) (import "spectest" "memory" (memory 1)) (data (global.get $g) "a") ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (module (memory 1) (data (global.get 0) "a") (global i32 (i32.const 0))) ;; (module (memory 1) (data (global.get $g) "a") (global $g i32 (i32.const 0))) ;; Corner cases (module (memory 1) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (import "spectest" "memory" (memory 1)) (data (i32.const 0) "a") (data (i32.const 0xffff) "b") ) (module (memory 2) (data (i32.const 0x1_ffff) "a") ) (module (memory 0) (data (i32.const 0)) ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0)) ) (module (memory 0 0) (data (i32.const 0)) ) (module (memory 1) (data (i32.const 0x1_0000) "") ) (module (memory 0) (data (i32.const 0) "" "") ) (module (import "spectest" "memory" (memory 0)) (data (i32.const 0) "" "") ) (module (memory 0 0) (data (i32.const 0) "" "") ) ;; (module ;; (import "spectest" "memory" (memory 0)) ;; (data (i32.const 0) "a") ;; ) ;; (module ;; (import "spectest" "memory" (memory 0 3)) ;; (data (i32.const 0) "a") ;; ) ;; (module ;; (global (import "spectest" "global_i32") i32) ;; (import "spectest" "memory" (memory 0)) ;; (data (global.get 0) "a") ;; ) ;; (module ;; (global (import "spectest" "global_i32") i32) ;; (import "spectest" "memory" (memory 0 3)) ;; (data (global.get 0) "a") ;; ) ;; (module ;; (import "spectest" "memory" (memory 0)) ;; (data (i32.const 1) "a") ;; ) ;; (module ;; (import "spectest" "memory" (memory 0 3)) ;; (data (i32.const 1) "a") ;; ) ;; Invalid bounds for data (assert_trap (module (memory 0) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0 0) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0 1) (data (i32.const 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 0) (data (i32.const 1)) ) "out of bounds memory access" ) (assert_trap (module (memory 0 1) (data (i32.const 1)) ) "out of bounds memory access" ) ;; This seems to cause a time-out on Travis. (;assert_unlinkable (module (memory 0x10000) (data (i32.const 0xffffffff) "ab") ) "" ;; either out of memory or out of bounds ;) (assert_trap (module (global (import "spectest" "global_i32") i32) (memory 0) (data (global.get 0) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 1 2) (data (i32.const 0x1_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const 0x1_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2) (data (i32.const 0x2_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2 3) (data (i32.const 0x2_0000) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 1) (data (i32.const -1) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const -1) "a") ) "out of bounds memory access" ) (assert_trap (module (memory 2) (data (i32.const -100) "a") ) "out of bounds memory access" ) (assert_trap (module (import "spectest" "memory" (memory 1)) (data (i32.const -100) "a") ) "out of bounds memory access" ) ;; Data without memory (assert_invalid (module (data (i32.const 0) "") ) "unknown memory" ) ;; Data segment with memory index 1 (only memory 0 available) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\00" ;; memory 0 "\0b\07\01" ;; data section "\02\01\41\00\0b" ;; active data segment 0 for memory 1 "\00" ;; empty vec(byte) ) "unknown memory 1" ) ;; Data segment with memory index 0 (no memory section) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\06\01" ;; data section "\00\41\00\0b" ;; active data segment 0 for memory 0 "\00" ;; empty vec(byte) ) "unknown memory 0" ) ;; Data segment with memory index 1 (no memory section) (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\07\01" ;; data section "\02\01\41\00\0b" ;; active data segment 0 for memory 1 "\00" ;; empty vec(byte) ) "unknown memory 1" ) ;; Data segment with memory index 1 and vec(byte) as above, ;; only memory 0 available. (assert_invalid (module binary "\00asm" "\01\00\00\00" "\05\03\01" ;; memory section "\00\00" ;; memory 0 "\0b\45\01" ;; data section "\02" ;; active segment "\01" ;; memory index "\41\00\0b" ;; offset constant expression "\3e" ;; vec(byte) length "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" ) "unknown memory 1" ) ;; Data segment with memory index 1 and specially crafted vec(byte) after. ;; This is to detect incorrect validation where memory index is interpreted ;; as a flag followed by "\41" interpreted as the size of vec(byte) ;; with the expected number of bytes following. (assert_invalid (module binary "\00asm" "\01\00\00\00" "\0b\45\01" ;; data section "\02" ;; active segment "\01" ;; memory index "\41\00\0b" ;; offset constant expression "\3e" ;; vec(byte) length "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f" "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f" "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" ) "unknown memory 1" ) ;; Invalid offsets (assert_invalid (module (memory 1) (data (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (offset (;empty instruction sequence;))) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (offset (i32.const 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (offset (global.get 0) (global.get 0))) ) "type mismatch" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (offset (global.get 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (memory 1) (data (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (nop)) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (memory 1) (data (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0))) ;; "constant expression required" ;; ) (assert_invalid (module (memory 1) (data (global.get 0)) ) "unknown global 0" ) (assert_invalid (module (global (import "test" "global-i32") i32) (memory 1) (data (global.get 1)) ) "unknown global 1" ) (assert_invalid (module (global (import "test" "global-mut-i32") (mut i32)) (memory 1) (data (global.get 0)) ) "constant expression required" )binaryen-version_108/test/spec/elem.wast000066400000000000000000000175301423707623100205060ustar00rootroot00000000000000;; Test the element section ;; Syntax (module (table $t 10 funcref) (func $f) (elem (i32.const 0)) (elem (i32.const 0) $f $f) (elem (offset (i32.const 0))) (elem (offset (i32.const 0)) $f $f) (elem (i32.const 0)) (elem 0x0 (i32.const 0) $f $f) (elem 0x000 (offset (i32.const 0))) (elem (offset (i32.const 0)) $f $f) (elem $t (i32.const 0)) (elem $t (i32.const 0) $f $f) (elem $t (offset (i32.const 0))) (elem $t (offset (i32.const 0)) $f $f) ) ;; Basic use (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 5) $f) (elem (i32.const 3) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 3) $f) (elem (i32.const 5) $f) ) (module (global (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get 0) $f) ) (module (global $g (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get $g) $f) ) (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 7) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-7") (i32.const 65)) (assert_return (invoke "call-9") (i32.const 66)) ;; Corner cases (module (table 10 funcref) (func $f) (elem (i32.const 9) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) ) (module (table 0 funcref) (elem (i32.const 0)) ) (module (import "spectest" "table" (table 0 funcref)) (elem (i32.const 0)) ) (module (table 0 0 funcref) (elem (i32.const 0)) ) (module (table 20 funcref) (elem (i32.const 20)) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 100 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 0 funcref)) (func $f) (elem (i32.const 1) $f) ) (module (import "spectest" "table" (table 0 30 funcref)) (func $f) (elem (i32.const 1) $f) ) ;; Invalid bounds for elements (assert_unlinkable (module (table 0 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 0 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 1 funcref) (func $f) (elem (i32.const 0) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 0 funcref) (elem (i32.const 1)) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 20 funcref) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const -1) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -1) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (table 10 funcref) (func $f) (elem (i32.const -10) $f) ) "elements segment does not fit" ) (assert_unlinkable (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const -10) $f) ) "elements segment does not fit" ) ;; Element without table (assert_invalid (module (func $f) (elem (i32.const 0) $f) ) "unknown table" ) ;; Invalid offsets (assert_invalid (module (table 1 funcref) (elem (i64.const 0)) ) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop)) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (nop) (i32.const 0))) ) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (offset (i32.const 0) (nop))) ) "constant expression required" ) ;; Use of internal globals in constant expressions is not allowed in MVP. ;; (assert_invalid ;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0))) ;; "constant expression required" ;; ) ;; Two elements target the same slot (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten") (i32.const 66)) (module (type $out-i32 (func (result i32))) (import "spectest" "table" (table 10 funcref)) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten-element") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten-element") (i32.const 66)) ;; Element sections across multiple modules change the same table (module $module1 (type $out-i32 (func (result i32))) (table (export "shared-table") 10 funcref) (elem (i32.const 8) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-8") (type $out-i32) (call_indirect (type $out-i32) (i32.const 8)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (register "module1" $module1) (assert_trap (invoke $module1 "call-7") "uninitialized element") (assert_return (invoke $module1 "call-8") (i32.const 65)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module2 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 7) $const-i32-c) (elem (i32.const 8) $const-i32-d) (func $const-i32-c (type $out-i32) (i32.const 67)) (func $const-i32-d (type $out-i32) (i32.const 68)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 68)) (assert_return (invoke $module1 "call-9") (i32.const 66)) (module $module3 (type $out-i32 (func (result i32))) (import "module1" "shared-table" (table 10 funcref)) (elem (i32.const 8) $const-i32-e) (elem (i32.const 9) $const-i32-f) (func $const-i32-e (type $out-i32) (i32.const 69)) (func $const-i32-f (type $out-i32) (i32.const 70)) ) (assert_return (invoke $module1 "call-7") (i32.const 67)) (assert_return (invoke $module1 "call-8") (i32.const 69)) (assert_return (invoke $module1 "call-9") (i32.const 70)) binaryen-version_108/test/spec/elem_reftypes.wast000066400000000000000000000157351423707623100224340ustar00rootroot00000000000000;; Test the element section ;; Syntax (module (table $t 10 funcref) (func $f) (func $g) ;; Passive (elem funcref) (elem funcref (ref.func $f) (item ref.func $f) (item (ref.null func)) (ref.func $g)) (elem func) (elem func $f $f $g $g) (elem $p1 funcref) (elem $p2 funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem $p3 func) (elem $p4 func $f $f $g $g) ;; Active (elem (table $t) (i32.const 0) funcref) (elem (table $t) (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem (table $t) (i32.const 0) func) (elem (table $t) (i32.const 0) func $f $g) (elem (table $t) (offset (i32.const 0)) funcref) (elem (table $t) (offset (i32.const 0)) func $f $g) (elem (table 0) (i32.const 0) func) ;; (elem (table 0x0) (i32.const 0) func $f $f) ;; (elem (table 0x000) (offset (i32.const 0)) func) (elem (table 0) (offset (i32.const 0)) func $f $f) (elem (table $t) (i32.const 0) func) (elem (table $t) (i32.const 0) func $f $f) (elem (table $t) (offset (i32.const 0)) func) (elem (table $t) (offset (i32.const 0)) func $f $f) (elem (offset (i32.const 0))) (elem (offset (i32.const 0)) funcref (ref.func $f) (ref.null func)) (elem (offset (i32.const 0)) func $f $f) (elem (offset (i32.const 0)) $f $f) (elem (i32.const 0)) (elem (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem (i32.const 0) func $f $f) (elem (i32.const 0) $f $f) (elem $a1 (table $t) (i32.const 0) funcref) (elem $a2 (table $t) (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem $a3 (table $t) (i32.const 0) func) (elem $a4 (table $t) (i32.const 0) func $f $g) (elem $a9 (table $t) (offset (i32.const 0)) funcref) (elem $a10 (table $t) (offset (i32.const 0)) func $f $g) (elem $a11 (table 0) (i32.const 0) func) ;; (elem $a12 (table 0x0) (i32.const 0) func $f $f) ;; (elem $a13 (table 0x000) (offset (i32.const 0)) func) (elem $a14 (table 0) (offset (i32.const 0)) func $f $f) (elem $a15 (table $t) (i32.const 0) func) (elem $a16 (table $t) (i32.const 0) func $f $f) (elem $a17 (table $t) (offset (i32.const 0)) func) (elem $a18 (table $t) (offset (i32.const 0)) func $f $f) (elem $a19 (offset (i32.const 0))) (elem $a20 (offset (i32.const 0)) funcref (ref.func $f) (ref.null func)) (elem $a21 (offset (i32.const 0)) func $f $f) (elem $a22 (offset (i32.const 0)) $f $f) (elem $a23 (i32.const 0)) (elem $a24 (i32.const 0) funcref (ref.func $f) (ref.null func)) (elem $a25 (i32.const 0) func $f $f) (elem $a26 (i32.const 0) $f $f) ;; Declarative (elem declare funcref) (elem declare funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem declare func) (elem declare func $f $f $g $g) (elem $d1 declare funcref) (elem $d2 declare funcref (ref.func $f) (ref.func $f) (ref.null func) (ref.func $g)) (elem $d3 declare func) (elem $d4 declare func $f $f $g $g) ) (module (func $f) (func $g) (table $t1 funcref (elem (ref.func $f) (ref.null func) (ref.func $g))) (table $t2 (ref null func) (elem (ref.func $f) (ref.null func) (ref.func $g))) ) ;; Basic use (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 0) $f) ) (module (table 10 funcref) (func $f) (elem (i32.const 0) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 5) $f) (elem (i32.const 3) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) (elem (i32.const 3) $f) (elem (i32.const 7) $f) (elem (i32.const 3) $f) (elem (i32.const 5) $f) ) (module (global (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get 0) $f) ) (module (global $g (import "spectest" "global_i32") i32) (table 1000 funcref) (func $f) (elem (global.get $g) $f) ) (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 7) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-7") (i32.const 65)) (assert_return (invoke "call-9") (i32.const 66)) ;; Corner cases (module (table 10 funcref) (func $f) (elem (i32.const 9) $f) ) (module (import "spectest" "table" (table 10 funcref)) (func $f) (elem (i32.const 9) $f) ) (module (table 0 funcref) (elem (i32.const 0)) ) (module (import "spectest" "table" (table 0 funcref)) (elem (i32.const 0)) ) (module (table 0 0 funcref) (elem (i32.const 0)) ) (module (table 20 funcref) (elem (i32.const 20)) ) ;;; We cannot enable these yet since we check table bounds at validation stage, ;;; which is incorrect for imported tables. ;; (module ;; (import "spectest" "table" (table 0 funcref)) ;; (func $f) ;; (elem (i32.const 0) $f) ;; ) ;; (module ;; (import "spectest" "table" (table 0 100 funcref)) ;; (func $f) ;; (elem (i32.const 0) $f) ;; ) ;; (module ;; (import "spectest" "table" (table 0 funcref)) ;; (func $f) ;; (elem (i32.const 1) $f) ;; ) ;; (module ;; (import "spectest" "table" (table 0 30 funcref)) ;; (func $f) ;; (elem (i32.const 1) $f) ;; ) ;; Two elements target the same slot (module (type $out-i32 (func (result i32))) (table 10 funcref) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten") (i32.const 66)) (module (type $out-i32 (func (result i32))) (import "spectest" "table" (table 10 funcref)) (elem (i32.const 9) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-overwritten-element") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_return (invoke "call-overwritten-element") (i32.const 66)) ;; Element sections across multiple modules change the same table (module $module1 (type $out-i32 (func (result i32))) (table (export "shared-table") 10 funcref) (elem (i32.const 8) $const-i32-a) (elem (i32.const 9) $const-i32-b) (func $const-i32-a (type $out-i32) (i32.const 65)) (func $const-i32-b (type $out-i32) (i32.const 66)) (func (export "call-7") (type $out-i32) (call_indirect (type $out-i32) (i32.const 7)) ) (func (export "call-8") (type $out-i32) (call_indirect (type $out-i32) (i32.const 8)) ) (func (export "call-9") (type $out-i32) (call_indirect (type $out-i32) (i32.const 9)) ) ) (assert_invalid (module (type $none_=>_none (func)) (table 0 (ref null $none_=>_none)) (elem (i32.const 0) funcref) ) )binaryen-version_108/test/spec/endianness.wast000066400000000000000000000235431423707623100217140ustar00rootroot00000000000000(module (memory 1) ;; Stores an i16 value in little-endian-format (func $i16_store_little (param $address i32) (param $value i32) (i32.store8 (local.get $address) (local.get $value)) (i32.store8 (i32.add (local.get $address) (i32.const 1)) (i32.shr_u (local.get $value) (i32.const 8))) ) ;; Stores an i32 value in little-endian format (func $i32_store_little (param $address i32) (param $value i32) (call $i16_store_little (local.get $address) (local.get $value)) (call $i16_store_little (i32.add (local.get $address) (i32.const 2)) (i32.shr_u (local.get $value) (i32.const 16))) ) ;; Stores an i64 value in little-endian format (func $i64_store_little (param $address i32) (param $value i64) (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value))) (call $i32_store_little (i32.add (local.get $address) (i32.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32)))) ) ;; Loads an i16 value in little-endian format (func $i16_load_little (param $address i32) (result i32) (i32.or (i32.load8_u (local.get $address)) (i32.shl (i32.load8_u (i32.add (local.get $address) (i32.const 1))) (i32.const 8)) ) ) ;; Loads an i32 value in little-endian format (func $i32_load_little (param $address i32) (result i32) (i32.or (call $i16_load_little (local.get $address)) (i32.shl (call $i16_load_little (i32.add (local.get $address) (i32.const 2))) (i32.const 16)) ) ) ;; Loads an i64 value in little-endian format (func $i64_load_little (param $address i32) (result i64) (i64.or (i64.extend_i32_u (call $i32_load_little (local.get $address))) (i64.shl (i64.extend_i32_u (call $i32_load_little (i32.add (local.get $address) (i32.const 4)))) (i64.const 32)) ) ) (func (export "i32_load16_s") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_s (i32.const 0)) ) (func (export "i32_load16_u") (param $value i32) (result i32) (call $i16_store_little (i32.const 0) (local.get $value)) (i32.load16_u (i32.const 0)) ) (func (export "i32_load") (param $value i32) (result i32) (call $i32_store_little (i32.const 0) (local.get $value)) (i32.load (i32.const 0)) ) (func (export "i64_load16_s") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_s (i32.const 0)) ) (func (export "i64_load16_u") (param $value i64) (result i64) (call $i16_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_u (i32.const 0)) ) (func (export "i64_load32_s") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_s (i32.const 0)) ) (func (export "i64_load32_u") (param $value i64) (result i64) (call $i32_store_little (i32.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_u (i32.const 0)) ) (func (export "i64_load") (param $value i64) (result i64) (call $i64_store_little (i32.const 0) (local.get $value)) (i64.load (i32.const 0)) ) (func (export "f32_load") (param $value f32) (result f32) (call $i32_store_little (i32.const 0) (i32.reinterpret_f32 (local.get $value))) (f32.load (i32.const 0)) ) (func (export "f64_load") (param $value f64) (result f64) (call $i64_store_little (i32.const 0) (i64.reinterpret_f64 (local.get $value))) (f64.load (i32.const 0)) ) (func (export "i32_store16") (param $value i32) (result i32) (i32.store16 (i32.const 0) (local.get $value)) (call $i16_load_little (i32.const 0)) ) (func (export "i32_store") (param $value i32) (result i32) (i32.store (i32.const 0) (local.get $value)) (call $i32_load_little (i32.const 0)) ) (func (export "i64_store16") (param $value i64) (result i64) (i64.store16 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i16_load_little (i32.const 0))) ) (func (export "i64_store32") (param $value i64) (result i64) (i64.store32 (i32.const 0) (local.get $value)) (i64.extend_i32_u (call $i32_load_little (i32.const 0))) ) (func (export "i64_store") (param $value i64) (result i64) (i64.store (i32.const 0) (local.get $value)) (call $i64_load_little (i32.const 0)) ) (func (export "f32_store") (param $value f32) (result f32) (f32.store (i32.const 0) (local.get $value)) (f32.reinterpret_i32 (call $i32_load_little (i32.const 0))) ) (func (export "f64_store") (param $value f64) (result f64) (f64.store (i32.const 0) (local.get $value)) (f64.reinterpret_i64 (call $i64_load_little (i32.const 0))) ) ) (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) binaryen-version_108/test/spec/endianness64.wast000066400000000000000000000235471423707623100220720ustar00rootroot00000000000000(module (memory i64 1) ;; Stores an i16 value in little-endian-format (func $i16_store_little (param $address i64) (param $value i32) (i32.store8 (local.get $address) (local.get $value)) (i32.store8 (i64.add (local.get $address) (i64.const 1)) (i32.shr_u (local.get $value) (i32.const 8))) ) ;; Stores an i32 value in little-endian format (func $i32_store_little (param $address i64) (param $value i32) (call $i16_store_little (local.get $address) (local.get $value)) (call $i16_store_little (i64.add (local.get $address) (i64.const 2)) (i32.shr_u (local.get $value) (i32.const 16))) ) ;; Stores an i64 value in little-endian format (func $i64_store_little (param $address i64) (param $value i64) (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value))) (call $i32_store_little (i64.add (local.get $address) (i64.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32)))) ) ;; Loads an i16 value in little-endian format (func $i16_load_little (param $address i64) (result i32) (i32.or (i32.load8_u (local.get $address)) (i32.shl (i32.load8_u (i64.add (local.get $address) (i64.const 1))) (i32.const 8)) ) ) ;; Loads an i32 value in little-endian format (func $i32_load_little (param $address i64) (result i32) (i32.or (call $i16_load_little (local.get $address)) (i32.shl (call $i16_load_little (i64.add (local.get $address) (i64.const 2))) (i32.const 16)) ) ) ;; Loads an i64 value in little-endian format (func $i64_load_little (param $address i64) (result i64) (i64.or (i64.extend_i32_u (call $i32_load_little (local.get $address))) (i64.shl (i64.extend_i32_u (call $i32_load_little (i64.add (local.get $address) (i64.const 4)))) (i64.const 32)) ) ) (func (export "i32_load16_s") (param $value i32) (result i32) (call $i16_store_little (i64.const 0) (local.get $value)) (i32.load16_s (i64.const 0)) ) (func (export "i32_load16_u") (param $value i32) (result i32) (call $i16_store_little (i64.const 0) (local.get $value)) (i32.load16_u (i64.const 0)) ) (func (export "i32_load") (param $value i32) (result i32) (call $i32_store_little (i64.const 0) (local.get $value)) (i32.load (i64.const 0)) ) (func (export "i64_load16_s") (param $value i64) (result i64) (call $i16_store_little (i64.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_s (i64.const 0)) ) (func (export "i64_load16_u") (param $value i64) (result i64) (call $i16_store_little (i64.const 0) (i32.wrap_i64 (local.get $value))) (i64.load16_u (i64.const 0)) ) (func (export "i64_load32_s") (param $value i64) (result i64) (call $i32_store_little (i64.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_s (i64.const 0)) ) (func (export "i64_load32_u") (param $value i64) (result i64) (call $i32_store_little (i64.const 0) (i32.wrap_i64 (local.get $value))) (i64.load32_u (i64.const 0)) ) (func (export "i64_load") (param $value i64) (result i64) (call $i64_store_little (i64.const 0) (local.get $value)) (i64.load (i64.const 0)) ) (func (export "f32_load") (param $value f32) (result f32) (call $i32_store_little (i64.const 0) (i32.reinterpret_f32 (local.get $value))) (f32.load (i64.const 0)) ) (func (export "f64_load") (param $value f64) (result f64) (call $i64_store_little (i64.const 0) (i64.reinterpret_f64 (local.get $value))) (f64.load (i64.const 0)) ) (func (export "i32_store16") (param $value i32) (result i32) (i32.store16 (i64.const 0) (local.get $value)) (call $i16_load_little (i64.const 0)) ) (func (export "i32_store") (param $value i32) (result i32) (i32.store (i64.const 0) (local.get $value)) (call $i32_load_little (i64.const 0)) ) (func (export "i64_store16") (param $value i64) (result i64) (i64.store16 (i64.const 0) (local.get $value)) (i64.extend_i32_u (call $i16_load_little (i64.const 0))) ) (func (export "i64_store32") (param $value i64) (result i64) (i64.store32 (i64.const 0) (local.get $value)) (i64.extend_i32_u (call $i32_load_little (i64.const 0))) ) (func (export "i64_store") (param $value i64) (result i64) (i64.store (i64.const 0) (local.get $value)) (call $i64_load_little (i64.const 0)) ) (func (export "f32_store") (param $value f32) (result f32) (f32.store (i64.const 0) (local.get $value)) (f32.reinterpret_i32 (call $i32_load_little (i64.const 0))) ) (func (export "f64_store") (param $value f64) (result f64) (f64.store (i64.const 0) (local.get $value)) (f64.reinterpret_i64 (call $i64_load_little (i64.const 0))) ) ) (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) binaryen-version_108/test/spec/exception-handling.wast000066400000000000000000000266051423707623100233470ustar00rootroot00000000000000(module (tag $e-v) (tag $e-i32 (param i32)) (tag $e-f32 (param f32)) (tag $e-i32-f32 (param i32 f32)) (func $throw_single_value (export "throw_single_value") (throw $e-i32 (i32.const 5)) ) (func (export "throw_multiple_values") (throw $e-i32-f32 (i32.const 3) (f32.const 3.5)) ) (func (export "try_nothrow") (result i32) (try (result i32) (do (i32.const 3) ) (catch $e-i32 (drop (pop i32)) (i32.const 0) ) ) ) (func (export "try_throw_catch") (result i32) (try (result i32) (do (throw $e-i32 (i32.const 5)) ) (catch $e-i32 (drop (pop i32)) (i32.const 3) ) ) ) (func (export "try_throw_nocatch") (result i32) (try (result i32) (do (throw $e-i32 (i32.const 5)) ) (catch $e-f32 (drop (pop f32)) (i32.const 3) ) ) ) (func (export "try_throw_catchall") (result i32) (try (result i32) (do (throw $e-i32 (i32.const 5)) ) (catch $e-f32 (drop (pop f32)) (i32.const 4) ) (catch_all (i32.const 3) ) ) ) (func (export "try_call_catch") (result i32) (try (result i32) (do (call $throw_single_value) (unreachable) ) (catch $e-i32 (pop i32) ) ) ) (func (export "try_throw_multivalue_catch") (result i32) (local $x (i32 f32)) (try (result i32) (do (throw $e-i32-f32 (i32.const 5) (f32.const 1.5)) ) (catch $e-i32-f32 (local.set $x (pop i32 f32) ) (tuple.extract 0 (local.get $x) ) ) ) ) (func (export "try_throw_rethrow") (try $l0 (do (throw $e-i32 (i32.const 5)) ) (catch $e-i32 (drop (pop i32)) (rethrow $l0) ) ) ) (func (export "try_call_rethrow") (try $l0 (do (call $throw_single_value) ) (catch_all (rethrow $l0) ) ) ) (func (export "rethrow_target_test1") (result i32) (try (result i32) (do (try (do (throw $e-i32 (i32.const 1)) ) (catch_all (try $l0 (do (throw $e-i32 (i32.const 2)) ) (catch $e-i32 (drop (pop i32)) (rethrow $l0) ;; rethrow (i32.const 2) ) ) ) ) ) (catch $e-i32 (pop i32) ;; result is (i32.const 2) ) ) ) ;; Can we handle rethrows with the depth > 0? (func (export "rethrow_target_test2") (result i32) (try (result i32) (do (try $l0 (do (throw $e-i32 (i32.const 1)) ) (catch_all (try (do (throw $e-i32 (i32.const 2)) ) (catch $e-i32 (drop (pop i32)) (rethrow 1) ;; rethrow (i32.const 1) ) ) ) ) ) (catch $e-i32 (pop i32) ;; result is (i32.const 1) ) ) ) ;; Tests whether the exception stack is managed correctly after rethrows (func (export "rethrow_target_test3") (result i32) (try (result i32) (do (try $l0 (do (try $l1 (do (throw $e-i32 (i32.const 1)) ) (catch_all (try (do (throw $e-i32 (i32.const 2)) ) (catch $e-i32 (drop (pop i32)) (rethrow $l1) ;; rethrow (i32.const 1) ) ) ) ) ) (catch $e-i32 (drop (pop i32)) (rethrow $l0) ;; rethrow (i32.const 1) again ) ) ) (catch $e-i32 (pop i32) ;; result is (i32.const 1) ) ) ) (func (export "try_delegate_caught") (result i32) (try $l0 (result i32) (do (try (result i32) (do (try (result i32) (do (throw $e-i32 (i32.const 3)) ) (delegate $l0) ) ) (catch_all (i32.const 0) ) ) ) (catch $e-i32 (pop i32) ) ) ) (func (export "try_delegate_to_catchless_try") (result i32) (try $l0 (result i32) (do (try (result i32) (do (try (result i32) (do (throw $e-i32 (i32.const 3)) ) (delegate $l0) ) ) (catch_all (i32.const 0) ) ) ) ) ) (func (export "try_delegate_to_delegate") (result i32) (try $l0 (result i32) (do (try $l1 (result i32) (do (try (result i32) (do (throw $e-i32 (i32.const 3)) ) (delegate $l1) ) ) (delegate $l0) ) ) (catch $e-i32 (pop i32) ) ) ) (func (export "try_delegate_to_caller") (try $l0 (do (try $l1 (do (try (do (throw $e-i32 (i32.const 3)) ) (delegate 2) ;; to caller ) ) ) ) (catch_all) ) ) ) (assert_trap (invoke "throw_single_value")) (assert_trap (invoke "throw_multiple_values")) (assert_return (invoke "try_nothrow") (i32.const 3)) (assert_return (invoke "try_throw_catch") (i32.const 3)) (assert_trap (invoke "try_throw_nocatch")) (assert_return (invoke "try_throw_catchall") (i32.const 3)) (assert_return (invoke "try_call_catch") (i32.const 5)) (assert_return (invoke "try_throw_multivalue_catch") (i32.const 5)) (assert_trap (invoke "try_throw_rethrow")) (assert_trap (invoke "try_call_rethrow")) (assert_return (invoke "rethrow_target_test1") (i32.const 2)) (assert_return (invoke "rethrow_target_test2") (i32.const 1)) (assert_return (invoke "rethrow_target_test3") (i32.const 1)) (assert_return (invoke "try_delegate_caught") (i32.const 3)) (assert_trap (invoke "try_delegate_to_catchless_try")) (assert_return (invoke "try_delegate_to_delegate") (i32.const 3)) (assert_trap (invoke "try_delegate_to_caller")) (assert_invalid (module (func $f0 (try (do (nop)) (catch $e-i32 (pop i32) ) ) ) ) "try's body type must match catch's body type" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (try (do (i32.const 0)) (catch $e-i32 (pop i32) ) ) ) ) "try's type does not match try body's type" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (throw $e-i32 (f32.const 0)) ) ) "tag param types must match" ) (assert_invalid (module (tag $e-i32 (param i32 f32)) (func $f0 (throw $e-i32 (f32.const 0)) ) ) "tag's param numbers must match" ) (assert_invalid (module (func $f0 (block $l0 (try (do (try (do) (delegate $l0) ;; target is a block ) ) (catch_all) ) ) ) ) "all delegate targets must be valid" ) (assert_invalid (module (func $f0 (try $l0 (do) (catch_all (try (do) (delegate $l0) ;; the target catch is above the delegate ) ) ) ) ) "all delegate targets must be valid" ) (assert_invalid (module (func $f0 (block $l0 (try (do) (catch_all (rethrow $l0) ;; target is a block ) ) ) ) ) "all rethrow targets must be valid" ) (assert_invalid (module (func $f0 (try $l0 (do (rethrow $l0) ;; Not within the target try's catch ) (catch_all) ) ) ) "all rethrow targets must be valid" ) (assert_invalid (module (func $f0 (try (do) (catch $e) ) ) ) "catch's tag name is invalid: e" ) (assert_invalid (module (tag $e-none (param)) (func $f0 (result i32) (try (result i32) (do (i32.const 0) ) (catch $e-none (pop i32) ) ) ) ) "catch's tag (e-none) doesn't have any params, but there are pops" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (try (do) (catch $e-i32) ) ) ) "catch's tag (e-i32) has params, so there should be a single pop within the catch body" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (try (do) (catch $e-i32 (drop (pop i32) ) (drop (pop i32) ) ) ) ) ) "catch's tag (e-i32) has params, so there should be a single pop within the catch body" ) (assert_invalid (module (func $f0 (result i32) (try (result i32) (do (i32.const 0) ) (catch_all (pop i32) ) ) ) ) "catch_all's body should not have pops" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (result f32) (try (result f32) (do (f32.const 0) ) (catch $e-i32 (pop f32) ) ) ) ) "catch's tag (e-i32)'s pop doesn't have the same type as the tag's params" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (result i32) (try (result i32) (do (i32.const 0) ) (catch $e-i32 (drop (i32.const 0) ) (pop i32) ;; Not the first children within 'catch' ) ) ) ) "catch's body (e-i32)'s pop's location is not valid" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (try (do) (catch $e-i32 (throw $e-i32 (block (result i32) (pop i32) ;; pop is within a block ) ) ) ) ) ) "catch's body (e-i32)'s pop's location is not valid" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (try (do) (catch $e-i32 (throw $e-i32 (loop (result i32) (pop i32) ;; pop is within a loop ) ) ) ) ) ) "catch's body (e-i32)'s pop's location is not valid" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (try (do) (catch $e-i32 (throw $e-i32 (try (result i32) (do (pop i32) ;; pop is within a try ) (catch_all (i32.const 0) ) ) ) ) ) ) ) "catch's body (e-i32)'s pop's location is not valid" ) (assert_invalid (module (tag $e-i32 (param i32)) (func $f0 (try (do) (catch $e-i32 (throw $e-i32 (if (result i32) (i32.const 0) (pop i32) ;; pop is within an if true body (i32.const 3) ) ) ) ) ) ) "catch's body (e-i32)'s pop's location is not valid" ) binaryen-version_108/test/spec/expected-output/000077500000000000000000000000001423707623100220155ustar00rootroot00000000000000binaryen-version_108/test/spec/expected-output/func_ptrs.wast.log000066400000000000000000000000111423707623100254700ustar00rootroot0000000000000083 : i32 binaryen-version_108/test/spec/expected-output/names.wast.log000066400000000000000000000000231423707623100245730ustar00rootroot0000000000000042 : i32 123 : i32 binaryen-version_108/test/spec/expected-output/old_imports.wast.log000066400000000000000000000001321423707623100260240ustar00rootroot0000000000000013 : i32 14 : i32 42 : f32 13 : i32 13 : i32 24 : i64 25 : i64 53 : f64 24 : i64 24 : i64 binaryen-version_108/test/spec/expected-output/old_start.wast.log000066400000000000000000000000201423707623100254600ustar00rootroot000000000000001 : i32 2 : i32 binaryen-version_108/test/spec/exports.wast000066400000000000000000000144211423707623100212640ustar00rootroot00000000000000;; Functions (module (func) (export "a" (func 0))) (module (func) (export "a" (func 0)) (export "b" (func 0))) (module (func) (func) (export "a" (func 0)) (export "b" (func 1))) (module (func (export "a"))) (module (func (export "a") (export "b") (export "c"))) (module (func (export "a") (export "b") (param i32))) (module (func) (export "a" (func 0))) (module (func $a (export "a"))) (module (func $a) (export "a" (func $a))) (module (export "a" (func 0)) (func)) (module (export "a" (func $a)) (func $a)) (module $Func (export "e" (func $f)) (func $f (param $n i32) (result i32) (return (i32.add (local.get $n) (i32.const 1))) ) ) (assert_return (invoke "e" (i32.const 42)) (i32.const 43)) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (module) (module $Other1) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (assert_invalid (module (func) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (func) (func) (export "a" (func 0)) (export "a" (func 1))) "duplicate export name" ) (assert_invalid (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (func) (table 0 funcref) (export "a" (func 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Globals (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0))) (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1))) (module (global (export "a") i32 (i32.const 0))) (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global $a (export "a") i32 (i32.const 0))) (module (global $a i32 (i32.const 0)) (export "a" (global $a))) (module (export "a" (global 0)) (global i32 (i32.const 0))) (module (export "a" (global $a)) (global $a i32 (i32.const 0))) (module $Global (export "e" (global $g)) (global $g i32 (i32.const 42)) ) (assert_return (get "e") (i32.const 42)) (assert_return (get $Global "e") (i32.const 42)) (module) (module $Other2) (assert_return (get $Global "e") (i32.const 42)) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (table 0 funcref) (export "a" (global 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Tables (module (table 0 funcref) (export "a" (table 0))) (module (table 0 funcref) (export "a" (table 0)) (export "b" (table 0))) ;; No multiple tables yet. ;; (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "b" (table 1))) (module (table (export "a") 0 funcref)) (module (table (export "a") 0 1 funcref)) (module (table 0 funcref) (export "a" (table 0))) (module (table 0 1 funcref) (export "a" (table 0))) (module (table $a (export "a") 0 funcref)) (module (table $a (export "a") 0 1 funcref)) (module (table $a 0 funcref) (export "a" (table $a))) (module (table $a 0 1 funcref) (export "a" (table $a))) (module (export "a" (table 0)) (table 0 funcref)) (module (export "a" (table 0)) (table 0 1 funcref)) (module (export "a" (table $a)) (table $a 0 funcref)) (module (export "a" (table $a)) (table $a 0 1 funcref)) (; TODO: access table ;) (assert_invalid (module (table 0 funcref) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 0)) (export "a" (table 0))) "duplicate export name" ) ;; No multiple tables yet. ;; (assert_invalid ;; (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "a" (table 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (table 0 funcref) (func) (export "a" (table 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (memory 0) (export "a" (table 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Memories (module (memory 0) (export "a" (memory 0))) (module (memory 0) (export "a" (memory 0)) (export "b" (memory 0))) ;; No multiple memories yet. ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1))) (module (memory (export "a") 0)) (module (memory (export "a") 0 1)) (module (memory 0) (export "a" (memory 0))) (module (memory 0 1) (export "a" (memory 0))) (module (memory $a (export "a") 0)) (module (memory $a (export "a") 0 1)) (module (memory $a 0) (export "a" (memory $a))) (module (memory $a 0 1) (export "a" (memory $a))) (module (export "a" (memory 0)) (memory 0)) (module (export "a" (memory 0)) (memory 0 1)) (module (export "a" (memory $a)) (memory $a 0)) (module (export "a" (memory $a)) (memory $a 0 1)) (; TODO: access memory ;) (assert_invalid (module (memory 0) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0))) "duplicate export name" ) ;; No multiple memories yet. ;; (assert_invalid ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (table 0 funcref) (export "a" (memory 0)) (export "a" (table 0))) "duplicate export name" ) binaryen-version_108/test/spec/f32.load32.fail.wast000066400000000000000000000001171423707623100221440ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result f32) (f32.load32 (local.get 0)))) binaryen-version_108/test/spec/f32.load64.fail.wast000066400000000000000000000001171423707623100221510ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result f32) (f32.load64 (local.get 0)))) binaryen-version_108/test/spec/f32.store32.fail.wast000066400000000000000000000001351423707623100223610ustar00rootroot00000000000000(module (memory 1) (func (param i32) (param f32) (f32.store32 (local.get 0) (local.get 1)))) binaryen-version_108/test/spec/f32.store64.fail.wast000066400000000000000000000001351423707623100223660ustar00rootroot00000000000000(module (memory 1) (func (param i32) (param f64) (f32.store64 (local.get 0) (local.get 1)))) binaryen-version_108/test/spec/f32.wast000066400000000000000000007060541423707623100201640ustar00rootroot00000000000000;; Test all the f32 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f32_bitwise.wast and f32_cmp.wast). (module (func (export "add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) ) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "add" (f32.const -0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x0p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x0p+0) (f32.const nan:0x200000))) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "add" (f32.const -0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-149) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-149) (f32.const nan:0x200000))) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "add" (f32.const -0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-126) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-126) (f32.const nan:0x200000))) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "add" (f32.const -0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-1) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-1) (f32.const nan:0x200000))) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "add" (f32.const -0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p+0) (f32.const nan:0x200000))) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "add" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "add" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "add" (f32.const -inf) (f32.const inf))) (assert_return_canonical_nan (invoke "add" (f32.const inf) (f32.const -inf))) (assert_return (invoke "add" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "add" (f32.const -inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const nan:0x200000))) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "sub" (f32.const -0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x0p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x0p+0) (f32.const nan:0x200000))) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-148)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-149) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-149) (f32.const nan:0x200000))) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.000002p-126)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-125)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-126) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-126) (f32.const nan:0x200000))) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-1) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-1) (f32.const nan:0x200000))) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1.8p+0)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+1)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p+0) (f32.const nan:0x200000))) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.b21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.721fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.d21fb6p+2)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.521fb6p+2)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return_canonical_nan (invoke "sub" (f32.const -inf) (f32.const -inf))) (assert_return (invoke "sub" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "sub" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "sub" (f32.const inf) (f32.const inf))) (assert_return_canonical_nan (invoke "sub" (f32.const -inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const nan:0x200000))) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "mul" (f32.const -0x0p+0) (f32.const -inf))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x0p+0) (f32.const inf))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x0p+0) (f32.const -inf))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x0p+0) (f32.const inf))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x0p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x0p+0) (f32.const nan:0x200000))) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-149) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-149) (f32.const nan:0x200000))) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-126) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-126) (f32.const nan:0x200000))) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-127)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-127)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-2)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-2)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-1) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-1) (f32.const nan:0x200000))) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p+0) (f32.const nan:0x200000))) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.8p-147)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.8p-147)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p-124)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+1)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep-22)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+1)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+126)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -inf) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const -inf) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const inf) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const inf) (f32.const 0x0p+0))) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "mul" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "mul" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "mul" (f32.const -inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -0x0p+0) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "div" (f32.const -0x0p+0) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "div" (f32.const 0x0p+0) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "div" (f32.const 0x0p+0) (f32.const 0x0p+0))) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f32.const -0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x0p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x0p+0) (f32.const nan:0x200000))) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-23)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-23)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-148)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-148)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f32.const -0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-149) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-149) (f32.const nan:0x200000))) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p+23)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p+23)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-125)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-125)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f32.const -0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-126) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-126) (f32.const nan:0x200000))) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p+125)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p+125)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-129)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-129)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f32.const -0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-1) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-1) (f32.const nan:0x200000))) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+126)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+126)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+1)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+1)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-128)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-128)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f32.const -0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p+0) (f32.const nan:0x200000))) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+3)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "div" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return_canonical_nan (invoke "div" (f32.const -inf) (f32.const -inf))) (assert_return_canonical_nan (invoke "div" (f32.const -inf) (f32.const inf))) (assert_return_canonical_nan (invoke "div" (f32.const inf) (f32.const -inf))) (assert_return_canonical_nan (invoke "div" (f32.const inf) (f32.const inf))) (assert_return_canonical_nan (invoke "div" (f32.const -inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const nan:0x200000))) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "min" (f32.const -0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x0p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x0p+0) (f32.const nan:0x200000))) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return_canonical_nan (invoke "min" (f32.const -0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-149) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-149) (f32.const nan:0x200000))) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return_canonical_nan (invoke "min" (f32.const -0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-126) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-126) (f32.const nan:0x200000))) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return_canonical_nan (invoke "min" (f32.const -0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-1) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-1) (f32.const nan:0x200000))) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return_canonical_nan (invoke "min" (f32.const -0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p+0) (f32.const nan:0x200000))) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return_canonical_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return_canonical_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "min" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "min" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const -inf) (f32.const inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "min" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "min" (f32.const -inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const nan:0x200000))) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "max" (f32.const -0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x0p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x0p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x0p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x0p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x0p+0) (f32.const nan:0x200000))) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -inf)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "max" (f32.const -0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-149) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1p-149) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-149) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1p-149) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-149) (f32.const nan:0x200000))) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -inf)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "max" (f32.const -0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-126) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1p-126) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-126) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1p-126) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-126) (f32.const nan:0x200000))) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -inf)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "max" (f32.const -0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-1) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1p-1) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-1) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1p-1) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-1) (f32.const nan:0x200000))) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -inf)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "max" (f32.const -0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p+0) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1p+0) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p+0) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1p+0) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p+0) (f32.const nan:0x200000))) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "max" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "max" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const -inf)) (f32.const inf)) (assert_return (invoke "max" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "max" (f32.const -inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const inf) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const inf) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const inf) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const inf) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x0p+0))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x0p+0))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1p-149))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-149))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1p-149))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-149))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1p-126))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-126))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1p-126))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-126))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-1))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-1))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p+0))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p+0))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1.921fb6p+2))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1.fffffep+127))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -inf))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -inf))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const inf))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const inf))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan) (f32.const -nan:0x200000))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const nan))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan) (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const nan:0x200000))) (assert_return (invoke "sqrt" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "sqrt" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1p-149))) (assert_return (invoke "sqrt" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75)) (assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1p-126))) (assert_return (invoke "sqrt" (f32.const 0x1p-126)) (f32.const 0x1p-63)) (assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1p-1))) (assert_return (invoke "sqrt" (f32.const 0x1p-1)) (f32.const 0x1.6a09e6p-1)) (assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1p+0))) (assert_return (invoke "sqrt" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1.921fb6p+2))) (assert_return (invoke "sqrt" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.40d932p+1)) (assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1.fffffep+127))) (assert_return (invoke "sqrt" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+63)) (assert_return_canonical_nan (invoke "sqrt" (f32.const -inf))) (assert_return (invoke "sqrt" (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "sqrt" (f32.const -nan))) (assert_return_arithmetic_nan (invoke "sqrt" (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "sqrt" (f32.const nan))) (assert_return_arithmetic_nan (invoke "sqrt" (f32.const nan:0x200000))) (assert_return (invoke "floor" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "floor" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "floor" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "floor" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "floor" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.cp+2)) (assert_return (invoke "floor" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "floor" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "floor" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "floor" (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "floor" (f32.const -nan))) (assert_return_arithmetic_nan (invoke "floor" (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "floor" (f32.const nan))) (assert_return_arithmetic_nan (invoke "floor" (f32.const nan:0x200000))) (assert_return (invoke "ceil" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "ceil" (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "ceil" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "ceil" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "ceil" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.cp+2)) (assert_return (invoke "ceil" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "ceil" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "ceil" (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "ceil" (f32.const -nan))) (assert_return_arithmetic_nan (invoke "ceil" (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "ceil" (f32.const nan))) (assert_return_arithmetic_nan (invoke "ceil" (f32.const nan:0x200000))) (assert_return (invoke "trunc" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "trunc" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "trunc" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "trunc" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "trunc" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "trunc" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "trunc" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "trunc" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "trunc" (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "trunc" (f32.const -nan))) (assert_return_arithmetic_nan (invoke "trunc" (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "trunc" (f32.const nan))) (assert_return_arithmetic_nan (invoke "trunc" (f32.const nan:0x200000))) (assert_return (invoke "nearest" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "nearest" (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "nearest" (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "nearest" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "nearest" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) (assert_return (invoke "nearest" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) (assert_return (invoke "nearest" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "nearest" (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "nearest" (f32.const inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "nearest" (f32.const -nan))) (assert_return_arithmetic_nan (invoke "nearest" (f32.const -nan:0x200000))) (assert_return_canonical_nan (invoke "nearest" (f32.const nan))) (assert_return_arithmetic_nan (invoke "nearest" (f32.const nan:0x200000))) ;; Type check (assert_invalid (module (func (result f32) (f32.add (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.div (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.max (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.min (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.mul (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sub (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.trunc (i64.const 0)))) "type mismatch") binaryen-version_108/test/spec/f32_bitwise.wast000066400000000000000000001051341423707623100217020ustar00rootroot00000000000000;; Test all the f32 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) (assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) (assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) (assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) (assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) (assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -inf)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const inf)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const -inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const -nan)) (f32.const -inf)) (assert_return (invoke "copysign" (f32.const inf) (f32.const nan)) (f32.const inf)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x0p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-149)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-126)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-1)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p+0)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -inf)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const inf)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const -nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const -nan)) (f32.const -nan)) (assert_return (invoke "copysign" (f32.const nan) (f32.const nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "abs" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "abs" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "abs" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const 0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "abs" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const 0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "abs" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "abs" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "abs" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const inf)) (f32.const inf)) (assert_return (invoke "abs" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "abs" (f32.const nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const -0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "neg" (f32.const 0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "neg" (f32.const -0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "neg" (f32.const 0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "neg" (f32.const -0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "neg" (f32.const 0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "neg" (f32.const -0x1p-1)) (f32.const 0x1p-1)) (assert_return (invoke "neg" (f32.const 0x1p-1)) (f32.const -0x1p-1)) (assert_return (invoke "neg" (f32.const -0x1p+0)) (f32.const 0x1p+0)) (assert_return (invoke "neg" (f32.const 0x1p+0)) (f32.const -0x1p+0)) (assert_return (invoke "neg" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) (assert_return (invoke "neg" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "neg" (f32.const -inf)) (f32.const inf)) (assert_return (invoke "neg" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "neg" (f32.const -nan)) (f32.const nan)) (assert_return (invoke "neg" (f32.const nan)) (f32.const -nan)) ;; Type check (assert_invalid (module (func (result f32) (f32.copysign (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.neg (i64.const 0)))) "type mismatch") binaryen-version_108/test/spec/f32_cmp.wast000066400000000000000000006323421423707623100210210ustar00rootroot00000000000000;; Test all the f32 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f32) (param $y f32) (result i32) (f32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f32) (param $y f32) (result i32) (f32.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f32) (param $y f32) (result i32) (f32.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f32) (param $y f32) (result i32) (f32.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f32) (param $y f32) (result i32) (f32.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f32) (param $y f32) (result i32) (f32.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const inf) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f32.const inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const inf) (f32.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) (assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f32) (f32.eq (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ge (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.gt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.le (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.lt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (result f32) (f32.ne (i64.const 0) (f64.const 0)))) "type mismatch") binaryen-version_108/test/spec/f64.load32.fail.wast000066400000000000000000000001171423707623100221510ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result f64) (f64.load32 (local.get 0)))) binaryen-version_108/test/spec/f64.load64.fail.wast000066400000000000000000000001171423707623100221560ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result f64) (f64.load64 (local.get 0)))) binaryen-version_108/test/spec/f64.store32.fail.wast000066400000000000000000000001351423707623100223660ustar00rootroot00000000000000(module (memory 1) (func (param i32) (param f32) (f64.store32 (local.get 0) (local.get 1)))) binaryen-version_108/test/spec/f64.store64.fail.wast000066400000000000000000000001351423707623100223730ustar00rootroot00000000000000(module (memory 1) (func (param i32) (param f64) (f64.store64 (local.get 0) (local.get 1)))) binaryen-version_108/test/spec/f64.wast000066400000000000000000007641251423707623100201740ustar00rootroot00000000000000;; Test all the f64 operators on major boundary values and all special ;; values (except comparison and bitwise operators, which are tested in ;; f64_bitwise.wast and f64_cmp.wast). (module (func (export "add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) (func (export "ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) ) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "add" (f64.const -0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "add" (f64.const -0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "add" (f64.const -0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "add" (f64.const -0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "add" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "add" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "add" (f64.const -inf) (f64.const inf))) (assert_return_canonical_nan (invoke "add" (f64.const inf) (f64.const -inf))) (assert_return (invoke "add" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "add" (f64.const -inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "sub" (f64.const -0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1021)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1.8p+0)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+1)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return_canonical_nan (invoke "sub" (f64.const -inf) (f64.const -inf))) (assert_return (invoke "sub" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "sub" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "sub" (f64.const inf) (f64.const inf))) (assert_return_canonical_nan (invoke "sub" (f64.const -inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "mul" (f64.const -0x0p+0) (f64.const -inf))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x0p+0) (f64.const inf))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x0p+0) (f64.const -inf))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x0p+0) (f64.const inf))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x0.8p-1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x0.8p-1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-2)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-2)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -inf) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const -inf) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const inf) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const inf) (f64.const 0x0p+0))) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "mul" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "mul" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "mul" (f64.const -inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -0x0p+0) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "div" (f64.const -0x0p+0) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "div" (f64.const 0x0p+0) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "div" (f64.const 0x0p+0) (f64.const 0x0p+0))) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f64.const -0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-52)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-52)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000002p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+52)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+52)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1021)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1021)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f64.const -0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p+1021)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p+1021)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f64.const -0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+1)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+1)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f64.const -0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "div" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return_canonical_nan (invoke "div" (f64.const -inf) (f64.const -inf))) (assert_return_canonical_nan (invoke "div" (f64.const -inf) (f64.const inf))) (assert_return_canonical_nan (invoke "div" (f64.const inf) (f64.const -inf))) (assert_return_canonical_nan (invoke "div" (f64.const inf) (f64.const inf))) (assert_return_canonical_nan (invoke "div" (f64.const -inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "min" (f64.const -0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return_canonical_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return_canonical_nan (invoke "min" (f64.const -0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return_canonical_nan (invoke "min" (f64.const -0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return_canonical_nan (invoke "min" (f64.const -0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return_canonical_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return_canonical_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "min" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const -inf) (f64.const inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "min" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "min" (f64.const -inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "max" (f64.const -0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x0p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x0p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "max" (f64.const -0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1p-1022) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1p-1022) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -inf)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "max" (f64.const -0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1p-1) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1p-1) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -inf)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "max" (f64.const -0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1p+0) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1p+0) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "max" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "max" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const -inf)) (f64.const inf)) (assert_return (invoke "max" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "max" (f64.const -inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const inf) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const inf) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const inf) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const inf) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x0p+0))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x0p+0))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1p-1022))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1p-1022))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1p-1))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1p-1))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1p+0))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1p+0))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -inf))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -inf))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const inf))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const inf))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan) (f64.const -nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan) (f64.const nan:0x4000000000000))) (assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) (assert_return (invoke "sqrt" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "sqrt" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return_canonical_nan (invoke "sqrt" (f64.const -0x0.0000000000001p-1022))) (assert_return (invoke "sqrt" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-537)) (assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1p-1022))) (assert_return (invoke "sqrt" (f64.const 0x1p-1022)) (f64.const 0x1p-511)) (assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1p-1))) (assert_return (invoke "sqrt" (f64.const 0x1p-1)) (f64.const 0x1.6a09e667f3bcdp-1)) (assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1p+0))) (assert_return (invoke "sqrt" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1.921fb54442d18p+2))) (assert_return (invoke "sqrt" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.40d931ff62705p+1)) (assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1.fffffffffffffp+1023))) (assert_return (invoke "sqrt" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+511)) (assert_return_canonical_nan (invoke "sqrt" (f64.const -inf))) (assert_return (invoke "sqrt" (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "sqrt" (f64.const -nan))) (assert_return_arithmetic_nan (invoke "sqrt" (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "sqrt" (f64.const nan))) (assert_return_arithmetic_nan (invoke "sqrt" (f64.const nan:0x4000000000000))) (assert_return (invoke "floor" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "floor" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "floor" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "floor" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "floor" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.cp+2)) (assert_return (invoke "floor" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "floor" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "floor" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "floor" (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "floor" (f64.const -nan))) (assert_return_arithmetic_nan (invoke "floor" (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "floor" (f64.const nan))) (assert_return_arithmetic_nan (invoke "floor" (f64.const nan:0x4000000000000))) (assert_return (invoke "ceil" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "ceil" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "ceil" (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "ceil" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "ceil" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "ceil" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.cp+2)) (assert_return (invoke "ceil" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "ceil" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "ceil" (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "ceil" (f64.const -nan))) (assert_return_arithmetic_nan (invoke "ceil" (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "ceil" (f64.const nan))) (assert_return_arithmetic_nan (invoke "ceil" (f64.const nan:0x4000000000000))) (assert_return (invoke "trunc" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "trunc" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "trunc" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "trunc" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "trunc" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "trunc" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "trunc" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "trunc" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "trunc" (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "trunc" (f64.const -nan))) (assert_return_arithmetic_nan (invoke "trunc" (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "trunc" (f64.const nan))) (assert_return_arithmetic_nan (invoke "trunc" (f64.const nan:0x4000000000000))) (assert_return (invoke "nearest" (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "nearest" (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "nearest" (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "nearest" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "nearest" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) (assert_return (invoke "nearest" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) (assert_return (invoke "nearest" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "nearest" (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "nearest" (f64.const inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "nearest" (f64.const -nan))) (assert_return_arithmetic_nan (invoke "nearest" (f64.const -nan:0x4000000000000))) (assert_return_canonical_nan (invoke "nearest" (f64.const nan))) (assert_return_arithmetic_nan (invoke "nearest" (f64.const nan:0x4000000000000))) ;; Type check (assert_invalid (module (func (result f64) (f64.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.div (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.max (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.min (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.trunc (i64.const 0)))) "type mismatch") binaryen-version_108/test/spec/f64_bitwise.wast000066400000000000000000001141501423707623100217050ustar00rootroot00000000000000;; Test all the f64 bitwise operators on major boundary values and all special ;; values. (module (func (export "abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) ) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) (assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) (assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) (assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) (assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -inf)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const inf)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const -inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const -nan)) (f64.const -inf)) (assert_return (invoke "copysign" (f64.const inf) (f64.const nan)) (f64.const inf)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1022)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p+0)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -inf)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const inf)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const -nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const -nan)) (f64.const -nan)) (assert_return (invoke "copysign" (f64.const nan) (f64.const nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const 0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "abs" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "abs" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const 0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "abs" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const 0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "abs" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "abs" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "abs" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const inf)) (f64.const inf)) (assert_return (invoke "abs" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "abs" (f64.const nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const -0x0p+0)) (f64.const 0x0p+0)) (assert_return (invoke "neg" (f64.const 0x0p+0)) (f64.const -0x0p+0)) (assert_return (invoke "neg" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) (assert_return (invoke "neg" (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) (assert_return (invoke "neg" (f64.const -0x1p-1)) (f64.const 0x1p-1)) (assert_return (invoke "neg" (f64.const 0x1p-1)) (f64.const -0x1p-1)) (assert_return (invoke "neg" (f64.const -0x1p+0)) (f64.const 0x1p+0)) (assert_return (invoke "neg" (f64.const 0x1p+0)) (f64.const -0x1p+0)) (assert_return (invoke "neg" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) (assert_return (invoke "neg" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) (assert_return (invoke "neg" (f64.const -inf)) (f64.const inf)) (assert_return (invoke "neg" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "neg" (f64.const -nan)) (f64.const nan)) (assert_return (invoke "neg" (f64.const nan)) (f64.const -nan)) ;; Type check (assert_invalid (module (func (result f64) (f64.copysign (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.neg (i64.const 0)))) "type mismatch") binaryen-version_108/test/spec/f64_cmp.wast000066400000000000000000006760421423707623100210330ustar00rootroot00000000000000;; Test all the f64 comparison operators on major boundary values and all ;; special values. (module (func (export "eq") (param $x f64) (param $y f64) (result i32) (f64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x f64) (param $y f64) (result i32) (f64.ne (local.get $x) (local.get $y))) (func (export "lt") (param $x f64) (param $y f64) (result i32) (f64.lt (local.get $x) (local.get $y))) (func (export "le") (param $x f64) (param $y f64) (result i32) (f64.le (local.get $x) (local.get $y))) (func (export "gt") (param $x f64) (param $y f64) (result i32) (f64.gt (local.get $x) (local.get $y))) (func (export "ge") (param $x f64) (param $y f64) (result i32) (f64.ge (local.get $x) (local.get $y))) ) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "lt" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "gt" (f64.const inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const inf) (f64.const inf)) (i32.const 1)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) (assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result f64) (f64.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ge (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.gt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.le (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.lt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.ne (i64.const 0) (f32.const 0)))) "type mismatch") binaryen-version_108/test/spec/fac.wast000066400000000000000000000050521423707623100203110ustar00rootroot00000000000000(module ;; Recursive factorial (func (export "fac-rec") (param i64) (result i64) (if (result i64) (i64.eq (local.get 0) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get 0) (call 0 (i64.sub (local.get 0) (i64.const 1)))) ) ) ) ;; Recursive factorial named (func $fac-rec-named (export "fac-rec-named") (param $n i64) (result i64) (if (result i64) (i64.eq (local.get $n) (i64.const 0)) (then (i64.const 1)) (else (i64.mul (local.get $n) (call $fac-rec-named (i64.sub (local.get $n) (i64.const 1))) ) ) ) ) ;; Iterative factorial (func (export "fac-iter") (param i64) (result i64) (local i64 i64) (local.set 1 (local.get 0)) (local.set 2 (i64.const 1)) (block (loop (if (i64.eq (local.get 1) (i64.const 0)) (then (br 2)) (else (local.set 2 (i64.mul (local.get 1) (local.get 2))) (local.set 1 (i64.sub (local.get 1) (i64.const 1))) ) ) (br 0) ) ) (local.get 2) ) ;; Iterative factorial named (func (export "fac-iter-named") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) ;; Optimized factorial. (func (export "fac-opt") (param i64) (result i64) (local i64) (local.set 1 (i64.const 1)) (block (br_if 0 (i64.lt_s (local.get 0) (i64.const 2))) (loop (local.set 1 (i64.mul (local.get 1) (local.get 0))) (local.set 0 (i64.add (local.get 0) (i64.const -1))) (br_if 0 (i64.gt_s (local.get 0) (i64.const 1))) ) ) (local.get 1) ) ) (assert_return (invoke "fac-rec" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-rec-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-iter-named" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-opt" (i64.const 25)) (i64.const 7034535277573963776)) (assert_exhaustion (invoke "fac-rec" (i64.const 1073741824)) "call stack exhausted") binaryen-version_108/test/spec/float_exprs.wast000066400000000000000000004740301423707623100221140ustar00rootroot00000000000000;; Test interesting floating-point "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x*y+z is not done with x87-style intermediate precision. (module (func (export "f64.no_contraction") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.9e87ce14273afp-103) (f64.const 0x1.2515ad31db63ep+664) (f64.const 0x1.868c6685e6185p+533)) (f64.const -0x1.da94885b11493p+561)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.da21c460a6f44p+52) (f64.const 0x1.60859d2e7714ap-321) (f64.const 0x1.e63f1b7b660e1p-302)) (f64.const 0x1.4672f256d1794p-268)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.f3eaf43f327cp-594) (f64.const 0x1.dfcc009906b57p+533) (f64.const 0x1.5984e03c520a1p-104)) (f64.const -0x1.d4797fb3db166p-60)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.dab6c772cb2e2p-69) (f64.const -0x1.d761663679a84p-101) (f64.const 0x1.f22f92c843226p-218)) (f64.const -0x1.b50d72dfcef68p-169)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.87c5def1e4d3dp-950) (f64.const -0x1.50cd5dab2207fp+935) (f64.const 0x1.e629bd0da8c5dp-54)) (f64.const 0x1.01b6feb4e78a7p-14)) ;; Test that x*y+z is not folded to fma. (module (func (export "f32.no_fma") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_fma") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_fma" (f32.const 0x1.a78402p+124) (f32.const 0x1.cf8548p-23) (f32.const 0x1.992adap+107)) (f32.const 0x1.a5262cp+107)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ed15a4p-28) (f32.const -0x1.613c72p-50) (f32.const 0x1.4757bp-88)) (f32.const -0x1.5406b8p-77)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ae63a2p+37) (f32.const 0x1.b3a59ap-13) (f32.const 0x1.c16918p+10)) (f32.const 0x1.6e385cp+25)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.2a77fap-8) (f32.const -0x1.bb7356p+22) (f32.const -0x1.32be2ap+1)) (f32.const -0x1.0286d4p+15)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.298fb6p+126) (f32.const -0x1.03080cp-70) (f32.const -0x1.418de6p+34)) (f32.const -0x1.2d15c6p+56)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.ac357ff46eed4p+557) (f64.const 0x1.852c01a5e7297p+430) (f64.const -0x1.05995704eda8ap+987)) (f64.const 0x1.855d905d338ep+987)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.e2fd6bf32010cp+749) (f64.const 0x1.01c2238d405e4p-130) (f64.const 0x1.2ecc0db4b9f94p+573)) (f64.const 0x1.e64eb07e063bcp+619)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.92b7c7439ede3p-721) (f64.const -0x1.6aa97586d3de6p+1011) (f64.const 0x1.8de4823f6358ap+237)) (f64.const -0x1.1d4139fd20ecdp+291)) (assert_return (invoke "f64.no_fma" (f64.const -0x1.466d30bddb453p-386) (f64.const -0x1.185a4d739c7aap+443) (f64.const 0x1.5f9c436fbfc7bp+55)) (f64.const 0x1.bd61a350fcc1ap+57)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.7e2c44058a799p+52) (f64.const 0x1.c73b71765b8b2p+685) (f64.const -0x1.16c641df0b108p+690)) (f64.const 0x1.53ccb53de0bd1p+738)) ;; Test that x+0.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_add_zero") (param $x f32) (result f32) (f32.add (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_add_zero") (param $x f64) (result f64) (f64.add (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_add_zero" (f32.const -0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const -0.0)) (f64.const 0.0)) (assert_return_arithmetic_nan (invoke "f32.no_fold_add_zero" (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "f64.no_fold_add_zero" (f64.const nan:0x4000000000000))) ;; Test that 0.0 - x is not folded to -x. (module (func (export "f32.no_fold_zero_sub") (param $x f32) (result f32) (f32.sub (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_sub") (param $x f64) (result f64) (f64.sub (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const 0.0)) (f64.const 0.0)) (assert_return_arithmetic_nan (invoke "f32.no_fold_zero_sub" (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "f64.no_fold_zero_sub" (f64.const nan:0x4000000000000))) ;; Test that x - 0.0 is not folded to x. (module (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) (f32.sub (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) (f64.sub (local.get $x) (f64.const 0.0))) ) (assert_return_arithmetic_nan (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000))) ;; Test that x*0.0 is not folded to 0.0. (module (func (export "f32.no_fold_mul_zero") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_mul_zero") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -2.0)) (f32.const -0.0)) (assert_return_arithmetic_nan (invoke "f32.no_fold_mul_zero" (f32.const nan:0x200000))) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -1.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -2.0)) (f64.const -0.0)) (assert_return_arithmetic_nan (invoke "f64.no_fold_mul_zero" (f64.const nan:0x4000000000000))) ;; Test that x*1.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 1.0))) ) (assert_return_arithmetic_nan (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000))) ;; Test that 0.0/x is not folded to 0.0. (module (func (export "f32.no_fold_zero_div") (param $x f32) (result f32) (f32.div (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_div") (param $x f64) (result f64) (f64.div (f64.const 0.0) (local.get $x))) ) (assert_return_canonical_nan (invoke "f32.no_fold_zero_div" (f32.const 0.0))) (assert_return_canonical_nan (invoke "f32.no_fold_zero_div" (f32.const -0.0))) (assert_return_canonical_nan (invoke "f32.no_fold_zero_div" (f32.const nan))) (assert_return_arithmetic_nan (invoke "f32.no_fold_zero_div" (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "f64.no_fold_zero_div" (f64.const 0.0))) (assert_return_canonical_nan (invoke "f64.no_fold_zero_div" (f64.const -0.0))) (assert_return_canonical_nan (invoke "f64.no_fold_zero_div" (f64.const nan))) (assert_return_arithmetic_nan (invoke "f64.no_fold_zero_div" (f64.const nan:0x4000000000000))) ;; Test that x/1.0 is not folded to x. (module (func (export "f32.no_fold_div_one") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_div_one") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 1.0))) ) (assert_return_arithmetic_nan (invoke "f32.no_fold_div_one" (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000))) ;; Test that x/-1.0 is not folded to -x. (module (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -1.0))) (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -1.0))) ) (assert_return_arithmetic_nan (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000))) ;; Test that -0.0 - x is not folded to -x. (module (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) (f32.sub (f32.const -0.0) (local.get $x))) (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) (f64.sub (f64.const -0.0) (local.get $x))) ) (assert_return_arithmetic_nan (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000))) ;; Test that -1.0 * x is not folded to -x. (module (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) (f32.mul (f32.const -1.0) (local.get $x))) (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) (f64.mul (f64.const -1.0) (local.get $x))) ) (assert_return_arithmetic_nan (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000))) (assert_return_arithmetic_nan (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000))) ;; Test that x == x is not folded to true. (module (func (export "f32.no_fold_eq_self") (param $x f32) (result i32) (f32.eq (local.get $x) (local.get $x))) (func (export "f64.no_fold_eq_self") (param $x f64) (result i32) (f64.eq (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_eq_self" (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_eq_self" (f64.const nan)) (i32.const 0)) ;; Test that x != x is not folded to false. (module (func (export "f32.no_fold_ne_self") (param $x f32) (result i32) (f32.ne (local.get $x) (local.get $x))) (func (export "f64.no_fold_ne_self") (param $x f64) (result i32) (f64.ne (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_ne_self" (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.no_fold_ne_self" (f64.const nan)) (i32.const 1)) ;; Test that x - x is not folded to 0.0. (module (func (export "f32.no_fold_sub_self") (param $x f32) (result f32) (f32.sub (local.get $x) (local.get $x))) (func (export "f64.no_fold_sub_self") (param $x f64) (result f64) (f64.sub (local.get $x) (local.get $x))) ) (assert_return_canonical_nan (invoke "f32.no_fold_sub_self" (f32.const inf))) (assert_return_canonical_nan (invoke "f32.no_fold_sub_self" (f32.const nan))) (assert_return_canonical_nan (invoke "f64.no_fold_sub_self" (f64.const inf))) (assert_return_canonical_nan (invoke "f64.no_fold_sub_self" (f64.const nan))) ;; Test that x / x is not folded to 1.0. (module (func (export "f32.no_fold_div_self") (param $x f32) (result f32) (f32.div (local.get $x) (local.get $x))) (func (export "f64.no_fold_div_self") (param $x f64) (result f64) (f64.div (local.get $x) (local.get $x))) ) (assert_return_canonical_nan (invoke "f32.no_fold_div_self" (f32.const inf))) (assert_return_canonical_nan (invoke "f32.no_fold_div_self" (f32.const nan))) (assert_return_canonical_nan (invoke "f32.no_fold_div_self" (f32.const 0.0))) (assert_return_canonical_nan (invoke "f32.no_fold_div_self" (f32.const -0.0))) (assert_return_canonical_nan (invoke "f64.no_fold_div_self" (f64.const inf))) (assert_return_canonical_nan (invoke "f64.no_fold_div_self" (f64.const nan))) (assert_return_canonical_nan (invoke "f64.no_fold_div_self" (f64.const 0.0))) (assert_return_canonical_nan (invoke "f64.no_fold_div_self" (f64.const -0.0))) ;; Test that x/3 is not folded to x*(1/3). (module (func (export "f32.no_fold_div_3") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 3.0))) (func (export "f64.no_fold_div_3") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 3.0))) ) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.359c26p+50)) (f32.const -0x1.9cd032p+48)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.e45646p+93)) (f32.const -0x1.42e42ep+92)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.2a3916p-83)) (f32.const -0x1.8da172p-85)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.1f8b38p-124)) (f32.const -0x1.7f644ap-126)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.d64f64p-56)) (f32.const -0x1.398a42p-57)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.a8a88d29e2cc3p+632)) (f64.const -0x1.1b1b08c69732dp+631)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.bcf52dc950972p-167)) (f64.const -0x1.28a373db8b0f7p-168)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.bd3c0d989f7a4p-874)) (f64.const 0x1.28d2b3bb14fc3p-875)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.0138bf530a53cp+1007)) (f64.const -0x1.56f6546eb86fbp+1005)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.052b87f9d794dp+415)) (f64.const 0x1.5c3a0aa274c67p+413)) ;; Test that (x*z)+(y*z) is not folded to (x+y)*z. (module (func (export "f32.no_factor") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $z)) (f32.mul (local.get $y) (local.get $z)))) (func (export "f64.no_factor") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $z)) (f64.mul (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_factor" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7dp+109)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a342p-14)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651aaep+82)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa15p+55)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9cep-50)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1ap-649)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const 0x0p+0)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e2p+198)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f184p-512)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af53p-90)) ;; Test that (x+y)*z is not folded to (x*z)+(y*z). (module (func (export "f32.no_distribute") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (f32.add (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_distribute") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (f64.add (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7d2p+109)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a34p-14)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651abp+82)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa14ep+55)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9ccp-50)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1bp-649)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e1fp+198)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f183p-512)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af52p-90)) ;; Test that x*(y/z) is not folded to (x*y)/z. (module (func (export "f32.no_regroup_div_mul") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (local.get $x) (f32.div (local.get $y) (local.get $z)))) (func (export "f64.no_regroup_div_mul") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (local.get $x) (f64.div (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x1.2844cap-63)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x0p+0)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.792258p+118)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df2p-89)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -0x1.47d0eap+66)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2dp+99)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const inf)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -0x1.926fa3cacc651p+255)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x1.38d55f56406dp-639)) ;; Test that (x*y)/z is not folded to x*(y/z). (module (func (export "f32.no_regroup_mul_div") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_regroup_mul_div") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x0p+0)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x1.1a00e8p-96)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.79225ap+118)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df4p-89)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2ep+99)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x1.0da0b6328e09p-907)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const 0x1.4886b6d9a9a79p+871)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -inf)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x0p+0)) ;; Test that x+y+z+w is not reassociated. (module (func (export "f32.no_reassociate_add") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.add (f32.add (f32.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_add") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.add (f64.add (f64.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.5f7ddcp+44) (f32.const 0x1.854e1p+34) (f32.const -0x1.b2068cp+47) (f32.const -0x1.209692p+41)) (f32.const -0x1.e26c76p+47)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.da3b78p-9) (f32.const -0x1.4312fap-7) (f32.const 0x1.0395e6p-4) (f32.const -0x1.6d5ea6p-7)) (f32.const 0x1.78b31ap-5)) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.fdb93ap+34) (f32.const -0x1.b6fce6p+41) (f32.const 0x1.c131d8p+44) (f32.const 0x1.8835b6p+38)) (f32.const 0x1.8ff3a2p+44)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.1739fcp+47) (f32.const 0x1.a4b186p+49) (f32.const -0x1.0c623cp+35) (f32.const 0x1.16a102p+51)) (f32.const 0x1.913ff6p+51)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.733cfap+108) (f32.const -0x1.38d30cp+108) (f32.const 0x1.2f5854p+105) (f32.const -0x1.ccb058p+94)) (f32.const 0x1.813716p+106)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.697a4d9ff19a6p+841) (f64.const 0x1.b305466238397p+847) (f64.const 0x1.e0b2d9bfb4e72p+855) (f64.const -0x1.6e1f3ae2b06bbp+857)) (f64.const -0x1.eb0e5936f087ap+856)) (assert_return (invoke "f64.no_reassociate_add" (f64.const 0x1.00ef6746b30e1p-543) (f64.const 0x1.cc1cfafdf3fe1p-544) (f64.const -0x1.f7726df3ecba6p-543) (f64.const -0x1.b26695f99d307p-594)) (f64.const -0x1.074892e3fad76p-547)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.e807b3bd6d854p+440) (f64.const 0x1.cedae26c2c5fp+407) (f64.const -0x1.00ab6e1442541p+437) (f64.const 0x1.28538a55997bdp+397)) (f64.const -0x1.040e90bf871ebp+441)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ba2b6f35a2402p-317) (f64.const 0x1.ad1c3fea7cd9ep-307) (f64.const -0x1.93aace2bf1261p-262) (f64.const 0x1.9fddbe472847ep-260)) (f64.const 0x1.3af30abc2c01bp-260)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ccb9c6092fb1dp+641) (f64.const -0x1.4b7c28c108244p+614) (f64.const 0x1.8a7cefef4bde1p+646) (f64.const -0x1.901b28b08b482p+644)) (f64.const 0x1.1810579194126p+646)) ;; Test that x*y*z*w is not reassociated. (module (func (export "f32.no_reassociate_mul") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.mul (f32.mul (f32.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_mul") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.mul (f64.mul (f64.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.950ba8p-116) (f32.const 0x1.efdacep-33) (f32.const -0x1.5f9bcp+102) (f32.const 0x1.f04508p-56)) (f32.const -0x1.ff356ep-101)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.5990aep-56) (f32.const -0x1.7dfb04p+102) (f32.const -0x1.4f774ap-125) (f32.const -0x1.595fe6p+70)) (f32.const -0x1.c7c8fcp-8)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.6ad9a4p-48) (f32.const -0x1.9138aap+55) (f32.const -0x1.4a774ep-40) (f32.const 0x1.1ff08p+76)) (f32.const 0x1.9cd8ecp+44)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.e1caecp-105) (f32.const 0x1.af0dd2p+77) (f32.const -0x1.016eep+56) (f32.const -0x1.ab70d6p+59)) (f32.const 0x1.54870ep+89)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const -0x1.3b1dcp-99) (f32.const 0x1.4e5a34p-49) (f32.const -0x1.38ba5ap+3) (f32.const 0x1.7fb8eep+59)) (f32.const 0x1.5bbf98p-85)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const -0x1.e7842ab7181p-667) (f64.const -0x1.fabf40ceeceafp+990) (f64.const -0x1.1a38a825ab01ap-376) (f64.const -0x1.27e8ea469b14fp+664)) (f64.const 0x1.336eb428af4f3p+613)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.4ca2292a6acbcp+454) (f64.const 0x1.6ffbab850089ap-516) (f64.const -0x1.547c32e1f5b93p-899) (f64.const -0x1.c7571d9388375p+540)) (f64.const 0x1.1ac796954fc1p-419)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.73881a52e0401p-501) (f64.const -0x1.1b68dd9efb1a7p+788) (f64.const 0x1.d1c5e6a3eb27cp-762) (f64.const -0x1.56cb2fcc7546fp+88)) (f64.const 0x1.f508db92c34efp-386)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.2efa87859987cp+692) (f64.const 0x1.68e4373e241p-423) (f64.const 0x1.4e2d0fb383a57p+223) (f64.const -0x1.301d3265c737bp-23)) (f64.const -0x1.4b2b6c393f30cp+470)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.1013f7498b95fp-234) (f64.const 0x1.d2d1c36fff138p-792) (f64.const -0x1.cbf1824ea7bfdp+728) (f64.const -0x1.440da9c8b836dp-599)) (f64.const 0x1.1a16512881c91p-895)) ;; Test that x/0 is not folded away. (module (func (export "f32.no_fold_div_0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_div_0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_div_0" (f32.const 1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const inf)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -inf)) (f32.const -inf)) (assert_return_canonical_nan (invoke "f32.no_fold_div_0" (f32.const 0))) (assert_return_canonical_nan (invoke "f32.no_fold_div_0" (f32.const -0))) (assert_return_arithmetic_nan (invoke "f32.no_fold_div_0" (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "f32.no_fold_div_0" (f32.const nan))) (assert_return (invoke "f64.no_fold_div_0" (f64.const 1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const inf)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -inf)) (f64.const -inf)) (assert_return_canonical_nan (invoke "f64.no_fold_div_0" (f64.const 0))) (assert_return_canonical_nan (invoke "f64.no_fold_div_0" (f64.const -0))) (assert_return_canonical_nan (invoke "f64.no_fold_div_0" (f64.const nan))) (assert_return_arithmetic_nan (invoke "f64.no_fold_div_0" (f64.const nan:0x4000000000000))) ;; Test that x/-0 is not folded away. (module (func (export "f32.no_fold_div_neg0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -0.0))) (func (export "f64.no_fold_div_neg0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -0.0))) ) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 1.0)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -1.0)) (f32.const inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const inf)) (f32.const -inf)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -inf)) (f32.const inf)) (assert_return_canonical_nan (invoke "f32.no_fold_div_neg0" (f32.const 0))) (assert_return_canonical_nan (invoke "f32.no_fold_div_neg0" (f32.const -0))) (assert_return_arithmetic_nan (invoke "f32.no_fold_div_neg0" (f32.const nan:0x200000))) (assert_return_canonical_nan (invoke "f32.no_fold_div_neg0" (f32.const nan))) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 1.0)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -1.0)) (f64.const inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const inf)) (f64.const -inf)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -inf)) (f64.const inf)) (assert_return_canonical_nan (invoke "f64.no_fold_div_neg0" (f64.const 0))) (assert_return_canonical_nan (invoke "f64.no_fold_div_neg0" (f64.const -0))) (assert_return_canonical_nan (invoke "f64.no_fold_div_neg0" (f64.const nan))) (assert_return_arithmetic_nan (invoke "f64.no_fold_div_neg0" (f64.const nan:0x4000000000000))) ;; Test that sqrt(x*x+y*y) is not folded to hypot. (module (func (export "f32.no_fold_to_hypot") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.add (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.no_fold_to_hypot") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.add (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.c2f338p-81) (f32.const 0x1.401b5ep-68)) (f32.const 0x1.401cccp-68)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.c38d1p-71) (f32.const -0x1.359ddp-107)) (f32.const 0x1.c36a62p-71)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.99e0cap-114) (f32.const -0x1.ed0c6cp-69)) (f32.const 0x1.ed0e48p-69)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.1b6ceap+5) (f32.const 0x1.5440bep+17)) (f32.const 0x1.5440cp+17)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.8f019ep-76) (f32.const -0x1.182308p-71)) (f32.const 0x1.17e2bcp-71)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.1a0ac4f7c8711p-636) (f64.const 0x1.1372ebafff551p-534)) (f64.const 0x1.13463fa37014ep-534)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.b793512167499p+395) (f64.const -0x1.11cbc52af4c36p+410)) (f64.const 0x1.11cbc530783a2p+410)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.76777f44ff40bp-536) (f64.const -0x1.c3896e4dc1fbp-766)) (f64.const 0x1.8p-536)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const -0x1.889ac72cc6b5dp-521) (f64.const 0x1.8d7084e659f3bp-733)) (f64.const 0x1.889ac72ca843ap-521)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.5ee588c02cb08p-670) (f64.const -0x1.05ce25788d9ecp-514)) (f64.const 0x1.05ce25788d9dfp-514)) ;; Test that 1.0/x isn't approximated. (module (func (export "f32.no_approximate_reciprocal") (param $x f32) (result f32) (f32.div (f32.const 1.0) (local.get $x))) ) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.2900b6p-10)) (f32.const -0x1.b950d4p+9)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.e7212p+127)) (f32.const 0x1.0d11f8p-128)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.42a466p-93)) (f32.const -0x1.963ee6p+92)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.5d0c32p+76)) (f32.const 0x1.778362p-77)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.601de2p-82)) (f32.const -0x1.743d7ep+81)) ;; Test that 1.0/sqrt(x) isn't approximated or fused. (module (func (export "f32.no_approximate_reciprocal_sqrt") (param $x f32) (result f32) (f32.div (f32.const 1.0) (f32.sqrt (local.get $x)))) (func (export "f64.no_fuse_reciprocal_sqrt") (param $x f64) (result f64) (f64.div (f64.const 1.0) (f64.sqrt (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.6af12ap-43)) (f32.const 0x1.300ed4p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.e82fc6p-8)) (f32.const 0x1.72c376p+3)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.b9fa9cp-66)) (f32.const 0x1.85a9bap+32)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.f4f546p-44)) (f32.const 0x1.6e01c2p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.5da7aap-86)) (f32.const 0x1.b618cap+42)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.1568a63b55fa3p+889)) (f64.const 0x1.5bc9c74c9952p-445)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.239fcd0939cafp+311)) (f64.const 0x1.5334a922b4818p-156)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.6e36a24e11054p+104)) (f64.const 0x1.ac13f20977f29p-53)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.23ee173219f83p+668)) (f64.const 0x1.df753e055862dp-335)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.b30f74caf9babp+146)) (f64.const 0x1.88bfc3d1764a9p-74)) ;; Test that sqrt(1.0/x) isn't approximated. (module (func (export "f32.no_approximate_sqrt_reciprocal") (param $x f32) (result f32) (f32.sqrt (f32.div (f32.const 1.0) (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.a4c986p+60)) (f32.const 0x1.8f5ac6p-31)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.50511ep-9)) (f32.const 0x1.3bdd46p+4)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.125ec2p+69)) (f32.const 0x1.5db572p-35)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.ba4c5p+13)) (f32.const 0x1.136f16p-7)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.4a5be2p+104)) (f32.const 0x1.c2b5bp-53)) ;; Test that converting i32/i64 to f32/f64 and back isn't folded away. (module (func (export "i32.no_fold_f32_s") (param i32) (result i32) (i32.trunc_f32_s (f32.convert_i32_s (local.get 0)))) (func (export "i32.no_fold_f32_u") (param i32) (result i32) (i32.trunc_f32_u (f32.convert_i32_u (local.get 0)))) (func (export "i64.no_fold_f64_s") (param i64) (result i64) (i64.trunc_f64_s (f64.convert_i64_s (local.get 0)))) (func (export "i64.no_fold_f64_u") (param i64) (result i64) (i64.trunc_f64_u (f64.convert_i64_u (local.get 0)))) ) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0xf0000010)) (i32.const 0xf0000010)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0xf0000010)) (i32.const 0xf0000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000400)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000000)) ;; Test that x+y-y is not folded to x. (module (func (export "f32.no_fold_add_sub") (param $x f32) (param $y f32) (result f32) (f32.sub (f32.add (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_add_sub") (param $x f64) (param $y f64) (result f64) (f64.sub (f64.add (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.b553e4p-47) (f32.const -0x1.67db2cp-26)) (f32.const 0x1.cp-47)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.a884dp-23) (f32.const 0x1.f2ae1ep-19)) (f32.const -0x1.a884ep-23)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.fc04fp+82) (f32.const -0x1.65403ap+101)) (f32.const -0x1p+83)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.870fa2p-78) (f32.const 0x1.c54916p-56)) (f32.const 0x1.8p-78)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.17e966p-108) (f32.const -0x1.5fa61ap-84)) (f32.const -0x1p-107)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1053ea172dba8p-874) (f64.const 0x1.113c413408ac8p-857)) (f64.const -0x1.1053ea172p-874)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const 0x1.e377d54807972p-546) (f64.const 0x1.040a0a4d1ff7p-526)) (f64.const 0x1.e377d548p-546)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.75f53cd926b62p-30) (f64.const -0x1.66b176e602bb5p-3)) (f64.const -0x1.75f53dp-30)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.c450ff28332ap-341) (f64.const 0x1.15a5855023baep-305)) (f64.const -0x1.c451p-341)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1ad4a596d3ea8p-619) (f64.const -0x1.17d81a41c0ea8p-588)) (f64.const -0x1.1ad4a8p-619)) ;; Test that x-y+y is not folded to x. (module (func (export "f32.no_fold_sub_add") (param $x f32) (param $y f32) (result f32) (f32.add (f32.sub (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_sub_add") (param $x f64) (param $y f64) (result f64) (f64.add (f64.sub (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.523cb8p+9) (f32.const 0x1.93096cp+8)) (f32.const -0x1.523cbap+9)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.a31a1p-111) (f32.const 0x1.745efp-95)) (f32.const -0x1.a4p-111)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.3d5328p+26) (f32.const 0x1.58567p+35)) (f32.const 0x1.3d54p+26)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.374e26p-39) (f32.const -0x1.66a5p-27)) (f32.const 0x1.374p-39)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.320facp-3) (f32.const -0x1.ac069ap+14)) (f32.const 0x1.34p-3)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.8f92aad2c9b8dp+255) (f64.const -0x1.08cd4992266cbp+259)) (f64.const 0x1.8f92aad2c9b9p+255)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.5aaff55742c8bp-666) (f64.const 0x1.8f5f47181f46dp-647)) (f64.const 0x1.5aaff5578p-666)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.21bc52967a98dp+251) (f64.const -0x1.fcffaa32d0884p+300)) (f64.const 0x1.2p+251)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.9c78361f47374p-26) (f64.const -0x1.69d69f4edc61cp-13)) (f64.const 0x1.9c78361f48p-26)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.4dbe68e4afab2p-367) (f64.const -0x1.dc24e5b39cd02p-361)) (f64.const 0x1.4dbe68e4afacp-367)) ;; Test that x*y/y is not folded to x. (module (func (export "f32.no_fold_mul_div") (param $x f32) (param $y f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_mul_div") (param $x f64) (param $y f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.cd859ap+54) (f32.const 0x1.6ca936p-47)) (f32.const -0x1.cd8598p+54)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.0b56b8p-26) (f32.const 0x1.48264cp-106)) (f32.const -0x1.0b56a4p-26)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.e7555cp-48) (f32.const -0x1.9161cp+48)) (f32.const -0x1.e7555ap-48)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const 0x1.aaa50ep+52) (f32.const -0x1.dfb39ep+60)) (f32.const 0x1.aaa50cp+52)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.2b7dfap-92) (f32.const -0x1.7c4ca6p-37)) (f32.const -0x1.2b7dfep-92)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.3d79ff4118a1ap-837) (f64.const -0x1.b8b5dda31808cp-205)) (f64.const -0x1.3d79ff412263ep-837)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.f894d1ee6b3a4p+384) (f64.const 0x1.8c2606d03d58ap+585)) (f64.const 0x1.f894d1ee6b3a5p+384)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.a022260acc993p+238) (f64.const -0x1.5fbc128fc8e3cp-552)) (f64.const -0x1.a022260acc992p+238)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.9d4b8ed174f54p-166) (f64.const 0x1.ee3d467aeeac6p-906)) (f64.const 0x1.8dcc95a053b2bp-166)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.e95ea897cdcd4p+660) (f64.const -0x1.854d5df085f2ep-327)) (f64.const -0x1.e95ea897cdcd5p+660)) ;; Test that x/y*y is not folded to x. (module (func (export "f32.no_fold_div_mul") (param $x f32) (param $y f32) (result f32) (f32.mul (f32.div (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_div_mul") (param $x f64) (param $y f64) (result f64) (f64.mul (f64.div (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.dc6364p+38) (f32.const 0x1.d630ecp+29)) (f32.const -0x1.dc6362p+38)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.1f9836p-52) (f32.const -0x1.16c4e4p-18)) (f32.const -0x1.1f9838p-52)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.c5972cp-126) (f32.const -0x1.d6659ep+7)) (f32.const 0x1.c5980ep-126)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.2e3a9ep-74) (f32.const -0x1.353994p+59)) (f32.const -0x1.2e3a4p-74)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.d96b82p-98) (f32.const 0x1.95d908p+27)) (f32.const 0x1.d96b84p-98)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const 0x1.d01f913a52481p-876) (f64.const -0x1.2cd0668b28344p+184)) (f64.const 0x1.d020daf71cdcp-876)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.81cb7d400918dp-714) (f64.const 0x1.7caa643586d6ep-53)) (f64.const -0x1.81cb7d400918ep-714)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.66904c97b5c8ep-145) (f64.const 0x1.5c3481592ad4cp+428)) (f64.const -0x1.66904c97b5c8dp-145)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.e75859d2f0765p-278) (f64.const -0x1.5f19b6ab497f9p+283)) (f64.const -0x1.e75859d2f0764p-278)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.515fe9c3b5f5p+620) (f64.const 0x1.36be869c99f7ap+989)) (f64.const -0x1.515fe9c3b5f4fp+620)) ;; Test that x/2*2 is not folded to x. (module (func (export "f32.no_fold_div2_mul2") (param $x f32) (result f32) (f32.mul (f32.div (local.get $x) (f32.const 2.0)) (f32.const 2.0))) (func (export "f64.no_fold_div2_mul2") (param $x f64) (result f64) (f64.mul (f64.div (local.get $x) (f64.const 2.0)) (f64.const 2.0))) ) (assert_return (invoke "f32.no_fold_div2_mul2" (f32.const 0x1.fffffep-126)) (f32.const 0x1p-125)) (assert_return (invoke "f64.no_fold_div2_mul2" (f64.const 0x1.fffffffffffffp-1022)) (f64.const 0x1p-1021)) ;; Test that promote(demote(x)) is not folded to x. (module (func (export "no_fold_demote_promote") (param $x f64) (result f64) (f64.promote_f32 (f32.demote_f64 (local.get $x)))) ) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.dece272390f5dp-133)) (f64.const -0x1.decep-133)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.19e6c79938a6fp-85)) (f64.const -0x1.19e6c8p-85)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.49b297ec44dc1p+107)) (f64.const 0x1.49b298p+107)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.74f5bd865163p-88)) (f64.const -0x1.74f5bep-88)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.26d675662367ep+104)) (f64.const 0x1.26d676p+104)) ;; Test that demote(promote(x)) is not folded to x, and aside from NaN is ;; bit-preserving. (module (func (export "no_fold_promote_demote") (param $x f32) (result f32) (f32.demote_f64 (f64.promote_f32 (local.get $x)))) ) (assert_return_arithmetic_nan (invoke "no_fold_promote_demote" (f32.const nan:0x200000))) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffcp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffcp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const inf)) (f32.const inf)) (assert_return (invoke "no_fold_promote_demote" (f32.const -inf)) (f32.const -inf)) ;; Test that demote(x+promote(y)) is not folded to demote(x)+y. (module (func (export "no_demote_mixed_add") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.add (local.get $x) (f64.promote_f32 (local.get $y))))) (func (export "no_demote_mixed_add_commuted") (param $y f32) (param $x f64) (result f32) (f32.demote_f64 (f64.add (f64.promote_f32 (local.get $y)) (local.get $x)))) ) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.f51a9d04854f9p-95) (f32.const 0x1.3f4e9cp-119)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.065b3d81ad8dp+37) (f32.const 0x1.758cd8p+38)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.626c80963bd17p-119) (f32.const -0x1.9bbf86p-121)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.0d5110e3385bbp-20) (f32.const 0x1.096f4ap-29)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.73852db4e5075p-20) (f32.const -0x1.24e474p-41)) (f32.const -0x1.738536p-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.3f4e9cp-119) (f64.const 0x1.f51a9d04854f9p-95)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.758cd8p+38) (f64.const 0x1.065b3d81ad8dp+37)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.9bbf86p-121) (f64.const 0x1.626c80963bd17p-119)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.096f4ap-29) (f64.const -0x1.0d5110e3385bbp-20)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.24e474p-41) (f64.const -0x1.73852db4e5075p-20)) (f32.const -0x1.738536p-20)) ;; Test that demote(x-promote(y)) is not folded to demote(x)-y. (module (func (export "no_demote_mixed_sub") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.sub (local.get $x) (f64.promote_f32 (local.get $y))))) ) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a0a183220e9b1p+82) (f32.const 0x1.c5acf8p+61)) (f32.const 0x1.a0a174p+82)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.6e2c5ac39f63ep+30) (f32.const 0x1.d48ca4p+17)) (f32.const -0x1.6e3bp+30)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.98c74350dde6ap+6) (f32.const 0x1.9d69bcp-12)) (f32.const -0x1.98c7aap+6)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.0459f34091dbfp-54) (f32.const 0x1.61ad08p-71)) (f32.const 0x1.045942p-54)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a7498dca3fdb7p+14) (f32.const 0x1.ed21c8p+15)) (f32.const -0x1.197d02p+15)) ;; Test that converting between integer and float and back isn't folded away. (module (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_u (local.get $x)))) (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_u (local.get $x)))) ) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+32)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1.fffffffep+31)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+64)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1p+64)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) ;; Test that dividing by a loop-invariant constant isn't optimized to be a ;; multiplication by a reciprocal, which would be particularly tempting since ;; the reciprocal computation could be hoisted. (module (memory 1 1) (func (export "init") (param $i i32) (param $x f32) (f32.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f32) (local $i i32) (block $exit (loop $cont (f32.store (local.get $i) (f32.div (f32.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 4))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f32) (f32.load (local.get $i))) ) (invoke "init" (i32.const 0) (f32.const 15.1)) (invoke "init" (i32.const 4) (f32.const 15.2)) (invoke "init" (i32.const 8) (f32.const 15.3)) (invoke "init" (i32.const 12) (f32.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f32.const 15.1)) (assert_return (invoke "check" (i32.const 4)) (f32.const 15.2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 15.3)) (assert_return (invoke "check" (i32.const 12)) (f32.const 15.4)) (invoke "run" (i32.const 16) (f32.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f32.const 0x1.422222p+2)) (assert_return (invoke "check" (i32.const 4)) (f32.const 0x1.444444p+2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 0x1.466666p+2)) (assert_return (invoke "check" (i32.const 12)) (f32.const 0x1.488888p+2)) (module (memory 1 1) (func (export "init") (param $i i32) (param $x f64) (f64.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f64) (local $i i32) (block $exit (loop $cont (f64.store (local.get $i) (f64.div (f64.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 8))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f64) (f64.load (local.get $i))) ) (invoke "init" (i32.const 0) (f64.const 15.1)) (invoke "init" (i32.const 8) (f64.const 15.2)) (invoke "init" (i32.const 16) (f64.const 15.3)) (invoke "init" (i32.const 24) (f64.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f64.const 15.1)) (assert_return (invoke "check" (i32.const 8)) (f64.const 15.2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 15.3)) (assert_return (invoke "check" (i32.const 24)) (f64.const 15.4)) (invoke "run" (i32.const 32) (f64.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f64.const 0x1.4222222222222p+2)) (assert_return (invoke "check" (i32.const 8)) (f64.const 0x1.4444444444444p+2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 0x1.4666666666667p+2)) (assert_return (invoke "check" (i32.const 24)) (f64.const 0x1.4888888888889p+2)) ;; Test that ult/ugt/etc. aren't folded to olt/ogt/etc. (module (func (export "f32.ult") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.ule") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.ugt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.uge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.ult") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.ule") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.ugt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.uge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.ult" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const nan)) (i32.const 1)) ;; Test that x= y+z is not optimized to x >= y (monotonicity). ;; http://cs.nyu.edu/courses/spring13/CSCI-UA.0201-003/lecture6.pdf (module (func (export "f32.no_fold_add_le_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.le (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f32.no_fold_add_ge_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.ge (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_le_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.le (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_ge_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.ge (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const 0.0) (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const inf) (f32.const -inf) (f32.const inf)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const 0.0) (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const inf) (f64.const -inf) (f64.const inf)) (i32.const 0)) ;; Test that !(x < y) and friends are not optimized to x >= y and friends. (module (func (export "f32.not_lt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f32.not_le") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.not_gt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.not_ge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f64.not_lt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) (func (export "f64.not_le") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.not_gt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.not_ge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.not_lt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_le" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_gt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_ge" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_lt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_le" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_gt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_ge" (f64.const nan) (f64.const 0.0)) (i32.const 1)) ;; Test that a method for approximating a "machine epsilon" produces the expected ;; approximation. ;; http://blogs.mathworks.com/cleve/2014/07/07/floating-point-numbers/#24cb4f4d-b8a9-4c19-b22b-9d2a9f7f3812 (module (func (export "f32.epsilon") (result f32) (f32.sub (f32.const 1.0) (f32.mul (f32.const 3.0) (f32.sub (f32.div (f32.const 4.0) (f32.const 3.0)) (f32.const 1.0))))) (func (export "f64.epsilon") (result f64) (f64.sub (f64.const 1.0) (f64.mul (f64.const 3.0) (f64.sub (f64.div (f64.const 4.0) (f64.const 3.0)) (f64.const 1.0))))) ) (assert_return (invoke "f32.epsilon") (f32.const -0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that a method for computing a "machine epsilon" produces the expected ;; result. ;; https://www.math.utah.edu/~beebe/software/ieee/ (module (func (export "f32.epsilon") (result f32) (local $x f32) (local $result f32) (local.set $x (f32.const 1)) (loop $loop (br_if $loop (f32.gt (f32.add (local.tee $x (f32.mul (local.tee $result (local.get $x)) (f32.const 0.5) ) ) (f32.const 1) ) (f32.const 1) ) ) ) (local.get $result) ) (func (export "f64.epsilon") (result f64) (local $x f64) (local $result f64) (local.set $x (f64.const 1)) (loop $loop (br_if $loop (f64.gt (f64.add (local.tee $x (f64.mul (local.tee $result (local.get $x)) (f64.const 0.5) ) ) (f64.const 1) ) (f64.const 1) ) ) ) (local.get $result) ) ) (assert_return (invoke "f32.epsilon") (f32.const 0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that floating-point numbers are not optimized as if they form a ;; trichotomy. (module (func (export "f32.no_trichotomy_lt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.lt (local.get $x) (local.get $y)) (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_le") (param $x f32) (param $y f32) (result i32) (i32.or (f32.le (local.get $x) (local.get $y)) (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_gt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.gt (local.get $x) (local.get $y)) (f32.le (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_ge") (param $x f32) (param $y f32) (result i32) (i32.or (f32.ge (local.get $x) (local.get $y)) (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_lt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.lt (local.get $x) (local.get $y)) (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_le") (param $x f64) (param $y f64) (result i32) (i32.or (f64.le (local.get $x) (local.get $y)) (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_gt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.gt (local.get $x) (local.get $y)) (f64.le (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_ge") (param $x f64) (param $y f64) (result i32) (i32.or (f64.ge (local.get $x) (local.get $y)) (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.no_trichotomy_lt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_le" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_gt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_ge" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_lt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_le" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_gt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_ge" (f64.const 0.0) (f64.const nan)) (i32.const 0)) ;; Some test harnesses which can run this testsuite are unable to perform tests ;; of NaN bitpatterns. The following tests whether the underlying platform is ;; generally producing the kinds of NaNs expected. (module (func (export "f32.arithmetic_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fc00000))) (func (export "f32.canonical_nan_bitpattern") (param $x i32) (param $y i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.reinterpret_i32 (local.get $y)))) (i32.const 0x7fffffff))) (func (export "f32.nonarithmetic_nan_bitpattern") (param $x i32) (result i32) (i32.reinterpret_f32 (f32.neg (f32.reinterpret_i32 (local.get $x))))) (func (export "f64.arithmetic_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7ff8000000000000))) (func (export "f64.canonical_nan_bitpattern") (param $x i64) (param $y i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.reinterpret_i64 (local.get $y)))) (i64.const 0x7fffffffffffffff))) (func (export "f64.nonarithmetic_nan_bitpattern") (param $x i64) (result i64) (i64.reinterpret_f64 (f64.neg (f64.reinterpret_i64 (local.get $x))))) ;; Versions of no_fold testcases that only care about NaN bitpatterns. (func (export "f32.no_fold_sub_zero") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.reinterpret_i32 (local.get $x)) (f32.const 0.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg0_sub") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.sub (f32.const -0.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_mul_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_neg1_mul") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.mul (f32.const -1.0) (f32.reinterpret_i32 (local.get $x)))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_one") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const 1.0))) (i32.const 0x7fc00000))) (func (export "f32.no_fold_div_neg1") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $x)) (f32.const -1.0))) (i32.const 0x7fc00000))) (func (export "f64.no_fold_sub_zero") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.reinterpret_i64 (local.get $x)) (f64.const 0.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg0_sub") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.sub (f64.const -0.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_mul_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_neg1_mul") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.mul (f64.const -1.0) (f64.reinterpret_i64 (local.get $x)))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_one") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const 1.0))) (i64.const 0x7ff8000000000000))) (func (export "f64.no_fold_div_neg1") (param $x i64) (result i64) (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $x)) (f64.const -1.0))) (i64.const 0x7ff8000000000000))) (func (export "no_fold_promote_demote") (param $x i32) (result i32) (i32.and (i32.reinterpret_f32 (f32.demote_f64 (f64.promote_f32 (f32.reinterpret_i32 (local.get $x))))) (i32.const 0x7fc00000))) ) (assert_return (invoke "f32.arithmetic_nan_bitpattern" (i32.const 0x7f803210) (i32.const 0x7f803210)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0) (i32.const 0)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7fc03210)) (i32.const 0xffc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xffc03210)) (i32.const 0x7fc03210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7f803210)) (i32.const 0xff803210)) (assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xff803210)) (i32.const 0x7f803210)) (assert_return (invoke "f64.arithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210) (i64.const 0x7ff0000000003210)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0) (i64.const 0)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff8000000003210)) (i64.const 0xfff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff8000000003210)) (i64.const 0x7ff8000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210)) (i64.const 0xfff0000000003210)) (assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff0000000003210)) (i64.const 0x7ff0000000003210)) (assert_return (invoke "f32.no_fold_sub_zero" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg0_sub" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_mul_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_neg1_mul" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f32.no_fold_div_neg1" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) (assert_return (invoke "f64.no_fold_sub_zero" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg0_sub" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_mul_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_neg1_mul" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.no_fold_div_neg1" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) (assert_return (invoke "no_fold_promote_demote" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) ;; Test that IEEE 754 double precision does, in fact, compute a certain dot ;; product correctly. (module (func (export "dot_product_example") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.mul (local.get $x2) (local.get $y2))) (f64.mul (local.get $x3) (local.get $y3))) ) (func (export "with_binary_sum_collapse") (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) (result f64) (f64.add (f64.add (f64.mul (local.get $x0) (local.get $y0)) (f64.mul (local.get $x1) (local.get $y1))) (f64.add (f64.mul (local.get $x2) (local.get $y2)) (f64.mul (local.get $x3) (local.get $y3)))) ) ) (assert_return (invoke "dot_product_example" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) (assert_return (invoke "with_binary_sum_collapse" (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) (f64.const 2.0)) ;; http://www.vinc17.org/research/fptest.en.html#contract2fma (module (func (export "f32.contract2fma") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.sub (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.contract2fma") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.sub (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.contract2fma" (f32.const 1.0) (f32.const 1.0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.19999ap+0) (f32.const 0x1.19999ap+0)) (f32.const 0.0)) (assert_return (invoke "f32.contract2fma" (f32.const 0x1.333332p+0) (f32.const 0x1.333332p+0)) (f32.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 1.0) (f64.const 1.0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.199999999999ap+0) (f64.const 0x1.199999999999ap+0)) (f64.const 0.0)) (assert_return (invoke "f64.contract2fma" (f64.const 0x1.3333333333333p+0) (f64.const 0x1.3333333333333p+0)) (f64.const 0.0)) ;; Test that floating-point isn't implemented with QuickBasic for MS-DOS. ;; https://support.microsoft.com/en-us/help/42980/-complete-tutorial-to-understand-ieee-floating-point-errors (module (func (export "f32.division_by_small_number") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.sub (local.get $a) (f32.div (local.get $b) (local.get $c)))) (func (export "f64.division_by_small_number") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.sub (local.get $a) (f64.div (local.get $b) (local.get $c)))) ) (assert_return (invoke "f32.division_by_small_number" (f32.const 112000000) (f32.const 100000) (f32.const 0.0009)) (f32.const 888888)) (assert_return (invoke "f64.division_by_small_number" (f64.const 112000000) (f64.const 100000) (f64.const 0.0009)) (f64.const 888888.8888888806)) ;; Test a simple golden ratio computation. ;; http://mathworld.wolfram.com/GoldenRatio.html (module (func (export "f32.golden_ratio") (param $a f32) (param $b f32) (param $c f32) (result f32) (f32.mul (local.get 0) (f32.add (local.get 1) (f32.sqrt (local.get 2))))) (func (export "f64.golden_ratio") (param $a f64) (param $b f64) (param $c f64) (result f64) (f64.mul (local.get 0) (f64.add (local.get 1) (f64.sqrt (local.get 2))))) ) (assert_return (invoke "f32.golden_ratio" (f32.const 0.5) (f32.const 1.0) (f32.const 5.0)) (f32.const 1.618034)) (assert_return (invoke "f64.golden_ratio" (f64.const 0.5) (f64.const 1.0) (f64.const 5.0)) (f64.const 1.618033988749895)) ;; Test some silver means computations. ;; http://mathworld.wolfram.com/SilverRatio.html (module (func (export "f32.silver_means") (param $n f32) (result f32) (f32.mul (f32.const 0.5) (f32.add (local.get $n) (f32.sqrt (f32.add (f32.mul (local.get $n) (local.get $n)) (f32.const 4.0)))))) (func (export "f64.silver_means") (param $n f64) (result f64) (f64.mul (f64.const 0.5) (f64.add (local.get $n) (f64.sqrt (f64.add (f64.mul (local.get $n) (local.get $n)) (f64.const 4.0)))))) ) (assert_return (invoke "f32.silver_means" (f32.const 0.0)) (f32.const 1.0)) (assert_return (invoke "f32.silver_means" (f32.const 1.0)) (f32.const 1.6180340)) (assert_return (invoke "f32.silver_means" (f32.const 2.0)) (f32.const 2.4142136)) (assert_return (invoke "f32.silver_means" (f32.const 3.0)) (f32.const 3.3027756)) (assert_return (invoke "f32.silver_means" (f32.const 4.0)) (f32.const 4.2360680)) (assert_return (invoke "f32.silver_means" (f32.const 5.0)) (f32.const 5.1925821)) (assert_return (invoke "f64.silver_means" (f64.const 0.0)) (f64.const 1.0)) (assert_return (invoke "f64.silver_means" (f64.const 1.0)) (f64.const 1.618033988749895)) (assert_return (invoke "f64.silver_means" (f64.const 2.0)) (f64.const 2.414213562373095)) (assert_return (invoke "f64.silver_means" (f64.const 3.0)) (f64.const 3.302775637731995)) (assert_return (invoke "f64.silver_means" (f64.const 4.0)) (f64.const 4.236067977499790)) (assert_return (invoke "f64.silver_means" (f64.const 5.0)) (f64.const 5.192582403567252)) ;; Test that an f64 0.4 isn't double-rounded as via extended precision. ;; https://bugs.llvm.org/show_bug.cgi?id=11200 (module (func (export "point_four") (param $four f64) (param $ten f64) (result i32) (f64.lt (f64.div (local.get $four) (local.get $ten)) (f64.const 0.4))) ) (assert_return (invoke "point_four" (f64.const 4.0) (f64.const 10.0)) (i32.const 0)) ;; Test an approximation function for tau; it should produces the correctly ;; rounded result after (and only after) the expected number of iterations. (module (func (export "tau") (param i32) (result f64) (local f64 f64 f64 f64) f64.const 0x0p+0 local.set 1 block local.get 0 i32.const 1 i32.lt_s br_if 0 f64.const 0x1p+0 local.set 2 f64.const 0x0p+0 local.set 3 loop local.get 1 local.get 2 f64.const 0x1p+3 local.get 3 f64.const 0x1p+3 f64.mul local.tee 4 f64.const 0x1p+0 f64.add f64.div f64.const 0x1p+2 local.get 4 f64.const 0x1p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.4p+2 f64.add f64.div f64.sub f64.const 0x1p+1 local.get 4 f64.const 0x1.8p+2 f64.add f64.div f64.sub f64.mul f64.add local.set 1 local.get 3 f64.const 0x1p+0 f64.add local.set 3 local.get 2 f64.const 0x1p-4 f64.mul local.set 2 local.get 0 i32.const -1 i32.add local.tee 0 br_if 0 end end local.get 1 ) ) (assert_return (invoke "tau" (i32.const 10)) (f64.const 0x1.921fb54442d14p+2)) (assert_return (invoke "tau" (i32.const 11)) (f64.const 0x1.921fb54442d18p+2)) ;; Test that y < 0 ? x : (x + 1) is not folded to x + (y < 0). (module (func (export "f32.no_fold_conditional_inc") (param $x f32) (param $y f32) (result f32) (select (local.get $x) (f32.add (local.get $x) (f32.const 1.0)) (f32.lt (local.get $y) (f32.const 0.0)))) (func (export "f64.no_fold_conditional_inc") (param $x f64) (param $y f64) (result f64) (select (local.get $x) (f64.add (local.get $x) (f64.const 1.0)) (f64.lt (local.get $y) (f64.const 0.0)))) ) (assert_return (invoke "f32.no_fold_conditional_inc" (f32.const -0.0) (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f64.no_fold_conditional_inc" (f64.const -0.0) (f64.const -1.0)) (f64.const -0.0)) binaryen-version_108/test/spec/float_literals.wast000066400000000000000000000503761423707623100225750ustar00rootroot00000000000000;; Test floating-point literal parsing. (module ;; f32 special values (func (export "f32.nan") (result i32) (i32.reinterpret_f32 (f32.const nan))) (func (export "f32.positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan))) (func (export "f32.negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan))) (func (export "f32.plain_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x400000))) (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x200000))) (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x7fffff))) (func (export "f32.misc_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x012345))) (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan:0x304050))) (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x2abcde))) (func (export "f32.infinity") (result i32) (i32.reinterpret_f32 (f32.const inf))) (func (export "f32.positive_infinity") (result i32) (i32.reinterpret_f32 (f32.const +inf))) (func (export "f32.negative_infinity") (result i32) (i32.reinterpret_f32 (f32.const -inf))) ;; f32 numbers (func (export "f32.zero") (result i32) (i32.reinterpret_f32 (f32.const 0x0.0p0))) (func (export "f32.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0x0.0p0))) (func (export "f32.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0x0.0p0))) (func (export "f32.misc") (result i32) (i32.reinterpret_f32 (f32.const 0x1.921fb6p+2))) (func (export "f32.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-149))) (func (export "f32.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-126))) (func (export "f32.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffep+127))) (func (export "f32.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffcp-127))) (func (export "f32.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 0x1.p10))) ;; f32 in decimal format (func (export "f32_dec.zero") (result i32) (i32.reinterpret_f32 (f32.const 0.0e0))) (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0.0e0))) (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0.0e0))) (func (export "f32_dec.misc") (result i32) (i32.reinterpret_f32 (f32.const 6.28318548202514648))) (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 1.4013e-45))) (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754944e-38))) (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754942e-38))) (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 3.4028234e+38))) (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 1.e10))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f32_dec.root_beer_float") (result i32) (i32.reinterpret_f32 (f32.const 1.000000119))) ;; f64 special values (func (export "f64.nan") (result i64) (i64.reinterpret_f64 (f64.const nan))) (func (export "f64.positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan))) (func (export "f64.negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan))) (func (export "f64.plain_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x8000000000000))) (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x4000000000000))) (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0xfffffffffffff))) (func (export "f64.misc_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x0123456789abc))) (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan:0x3040506070809))) (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0x2abcdef012345))) (func (export "f64.infinity") (result i64) (i64.reinterpret_f64 (f64.const inf))) (func (export "f64.positive_infinity") (result i64) (i64.reinterpret_f64 (f64.const +inf))) (func (export "f64.negative_infinity") (result i64) (i64.reinterpret_f64 (f64.const -inf))) ;; f64 numbers (func (export "f64.zero") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0p0))) (func (export "f64.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0x0.0p0))) (func (export "f64.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0x0.0p0))) (func (export "f64.misc") (result i64) (i64.reinterpret_f64 (f64.const 0x1.921fb54442d18p+2))) (func (export "f64.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0000000000001p-1022))) (func (export "f64.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 0x1p-1022))) (func (export "f64.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 0x0.fffffffffffffp-1022))) (func (export "f64.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 0x1.fffffffffffffp+1023))) (func (export "f64.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 0x1.p100))) ;; f64 numbers in decimal format (func (export "f64_dec.zero") (result i64) (i64.reinterpret_f64 (f64.const 0.0e0))) (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0.0e0))) (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0.0e0))) (func (export "f64_dec.misc") (result i64) (i64.reinterpret_f64 (f64.const 6.28318530717958623))) (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 4.94066e-324))) (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072012e-308))) (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072011e-308))) (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 1.7976931348623157e+308))) (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 1.e100))) ;; https://twitter.com/Archivd/status/994637336506912768 (func (export "f64_dec.root_beer_float") (result i64) (i64.reinterpret_f64 (f64.const 1.000000119))) (func (export "f32-dec-sep1") (result f32) (f32.const 1_000_000)) (func (export "f32-dec-sep2") (result f32) (f32.const 1_0_0_0)) (func (export "f32-dec-sep3") (result f32) (f32.const 100_3.141_592)) (func (export "f32-dec-sep4") (result f32) (f32.const 99e+1_3)) (func (export "f32-dec-sep5") (result f32) (f32.const 122_000.11_3_54E0_2_3)) (func (export "f32-hex-sep1") (result f32) (f32.const 0xa_0f_00_99)) (func (export "f32-hex-sep2") (result f32) (f32.const 0x1_a_A_0_f)) (func (export "f32-hex-sep3") (result f32) (f32.const 0xa0_ff.f141_a59a)) (func (export "f32-hex-sep4") (result f32) (f32.const 0xf0P+1_3)) (func (export "f32-hex-sep5") (result f32) (f32.const 0x2a_f00a.1f_3_eep2_3)) (func (export "f64-dec-sep1") (result f64) (f64.const 1_000_000)) (func (export "f64-dec-sep2") (result f64) (f64.const 1_0_0_0)) (func (export "f64-dec-sep3") (result f64) (f64.const 100_3.141_592)) (func (export "f64-dec-sep4") (result f64) (f64.const 99e-1_23)) (func (export "f64-dec-sep5") (result f64) (f64.const 122_000.11_3_54e0_2_3)) (func (export "f64-hex-sep1") (result f64) (f64.const 0xa_f00f_0000_9999)) (func (export "f64-hex-sep2") (result f64) (f64.const 0x1_a_A_0_f)) (func (export "f64-hex-sep3") (result f64) (f64.const 0xa0_ff.f141_a59a)) (func (export "f64-hex-sep4") (result f64) (f64.const 0xf0P+1_3)) (func (export "f64-hex-sep5") (result f64) (f64.const 0x2a_f00a.1f_3_eep2_3)) ) (assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) (assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) (assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) (assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) (assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) (assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) (assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) (assert_return (invoke "f32.zero") (i32.const 0)) (assert_return (invoke "f32.positive_zero") (i32.const 0)) (assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32.min_positive") (i32.const 1)) (assert_return (invoke "f32.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) (assert_return (invoke "f32_dec.zero") (i32.const 0)) (assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) (assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32_dec.min_positive") (i32.const 1)) (assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) (assert_return (invoke "f32_dec.root_beer_float") (i32.const 0x3f800001)) (assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) (assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) (assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) (assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) (assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) (assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) (assert_return (invoke "f64.zero") (i64.const 0)) (assert_return (invoke "f64.positive_zero") (i64.const 0)) (assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64.min_positive") (i64.const 1)) (assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) (assert_return (invoke "f64_dec.zero") (i64.const 0)) (assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) (assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64_dec.min_positive") (i64.const 1)) (assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) (assert_return (invoke "f64_dec.root_beer_float") (i64.const 0x3ff000001ff19e24)) (assert_return (invoke "f32-dec-sep1") (f32.const 1000000)) (assert_return (invoke "f32-dec-sep2") (f32.const 1000)) (assert_return (invoke "f32-dec-sep3") (f32.const 1003.141592)) (assert_return (invoke "f32-dec-sep4") (f32.const 99e+13)) (assert_return (invoke "f32-dec-sep5") (f32.const 122000.11354e23)) (assert_return (invoke "f32-hex-sep1") (f32.const 0xa0f0099)) (assert_return (invoke "f32-hex-sep2") (f32.const 0x1aa0f)) (assert_return (invoke "f32-hex-sep3") (f32.const 0xa0ff.f141a59a)) (assert_return (invoke "f32-hex-sep4") (f32.const 0xf0P+13)) (assert_return (invoke "f32-hex-sep5") (f32.const 0x2af00a.1f3eep23)) (assert_return (invoke "f64-dec-sep1") (f64.const 1000000)) (assert_return (invoke "f64-dec-sep2") (f64.const 1000)) (assert_return (invoke "f64-dec-sep3") (f64.const 1003.141592)) (assert_return (invoke "f64-dec-sep4") (f64.const 99e-123)) (assert_return (invoke "f64-dec-sep5") (f64.const 122000.11354e23)) (assert_return (invoke "f64-hex-sep1") (f64.const 0xaf00f00009999)) (assert_return (invoke "f64-hex-sep2") (f64.const 0x1aa0f)) (assert_return (invoke "f64-hex-sep3") (f64.const 0xa0ff.f141a59a)) (assert_return (invoke "f64-hex-sep4") (f64.const 0xf0P+13)) (assert_return (invoke "f64-hex-sep5") (f64.const 0x2af00a.1f3eep23)) ;; Test parsing a float from binary (module binary ;; (func (export "4294967249") (result f64) (f64.const 4294967249)) "\00\61\73\6d\01\00\00\00\01\85\80\80\80\00\01\60" "\00\01\7c\03\82\80\80\80\00\01\00\07\8e\80\80\80" "\00\01\0a\34\32\39\34\39\36\37\32\34\39\00\00\0a" "\91\80\80\80\00\01\8b\80\80\80\00\00\44\00\00\20" "\fa\ff\ff\ef\41\0b" ) (assert_return (invoke "4294967249") (f64.const 4294967249)) (assert_malformed (module quote "(global f32 (f32.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f32 (f32.const 0x1.0p_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const +_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const -_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 99_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1__000))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _1.0e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0_e1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 1.0e_+1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const _0x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0_x100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_100))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x00_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0xff__ffff))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_.0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1._0))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x_1.0p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p1_))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0_p1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p+_1))") "unknown operator" ) (assert_malformed (module quote "(global f64 (f64.const 0x1.0p_+1))") "unknown operator" ) binaryen-version_108/test/spec/float_memory.wast000066400000000000000000000152121423707623100222540ustar00rootroot00000000000000;; Test that floating-point load and store are bit-preserving. ;; Test that load and store do not canonicalize NaNs as x87 does. (module (memory (data "\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that unaligned load and store do not canonicalize NaNs. (module (memory (data "\00\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 1))) (func (export "i32.load") (result i32) (i32.load (i32.const 1))) (func (export "f32.store") (f32.store (i32.const 1) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i32.const 1) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i32.const 1) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data "\00\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 1))) (func (export "i64.load") (result i64) (i64.load (i32.const 1))) (func (export "f64.store") (f64.store (i32.const 1) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i32.const 1) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i32.const 1) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that load and store do not canonicalize NaNs as some JS engines do. (module (memory (data "\01\00\d0\7f")) (func (export "f32.load") (result f32) (f32.load (i32.const 0))) (func (export "i32.load") (result i32) (i32.load (i32.const 0))) (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x500001))) (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fd00001))) (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (module (memory (data "\01\00\00\00\00\00\fc\7f")) (func (export "f64.load") (result f64) (f64.load (i32.const 0))) (func (export "i64.load") (result i64) (i64.load (i32.const 0))) (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0xc000000000001))) (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ffc000000000001))) (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) binaryen-version_108/test/spec/float_memory64.wast000066400000000000000000000152421423707623100224310ustar00rootroot00000000000000;; Test that floating-point load and store are bit-preserving. ;; Test that load and store do not canonicalize NaNs as x87 does. (module (memory (data i64 "\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i64.const 0))) (func (export "i32.load") (result i32) (i32.load (i64.const 0))) (func (export "f32.store") (f32.store (i64.const 0) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i64.const 0) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i64.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data i64 "\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i64.const 0))) (func (export "i64.load") (result i64) (i64.load (i64.const 0))) (func (export "f64.store") (f64.store (i64.const 0) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i64.const 0) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i64.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that unaligned load and store do not canonicalize NaNs. (module (memory (data i64 "\00\00\00\a0\7f")) (func (export "f32.load") (result f32) (f32.load (i64.const 1))) (func (export "i32.load") (result i32) (i32.load (i64.const 1))) (func (export "f32.store") (f32.store (i64.const 1) (f32.const nan:0x200000))) (func (export "i32.store") (i32.store (i64.const 1) (i32.const 0x7fa00000))) (func (export "reset") (i32.store (i64.const 1) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fa00000)) (assert_return (invoke "f32.load") (f32.const nan:0x200000)) (module (memory (data i64 "\00\00\00\00\00\00\00\f4\7f")) (func (export "f64.load") (result f64) (f64.load (i64.const 1))) (func (export "i64.load") (result i64) (i64.load (i64.const 1))) (func (export "f64.store") (f64.store (i64.const 1) (f64.const nan:0x4000000000000))) (func (export "i64.store") (i64.store (i64.const 1) (i64.const 0x7ff4000000000000))) (func (export "reset") (i64.store (i64.const 1) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) ;; Test that load and store do not canonicalize NaNs as some JS engines do. (module (memory (data i64 "\01\00\d0\7f")) (func (export "f32.load") (result f32) (f32.load (i64.const 0))) (func (export "i32.load") (result i32) (i32.load (i64.const 0))) (func (export "f32.store") (f32.store (i64.const 0) (f32.const nan:0x500001))) (func (export "i32.store") (i32.store (i64.const 0) (i32.const 0x7fd00001))) (func (export "reset") (i32.store (i64.const 0) (i32.const 0))) ) (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "f32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (invoke "reset") (assert_return (invoke "i32.load") (i32.const 0x0)) (assert_return (invoke "f32.load") (f32.const 0.0)) (invoke "i32.store") (assert_return (invoke "i32.load") (i32.const 0x7fd00001)) (assert_return (invoke "f32.load") (f32.const nan:0x500001)) (module (memory (data i64 "\01\00\00\00\00\00\fc\7f")) (func (export "f64.load") (result f64) (f64.load (i64.const 0))) (func (export "i64.load") (result i64) (i64.load (i64.const 0))) (func (export "f64.store") (f64.store (i64.const 0) (f64.const nan:0xc000000000001))) (func (export "i64.store") (i64.store (i64.const 0) (i64.const 0x7ffc000000000001))) (func (export "reset") (i64.store (i64.const 0) (i64.const 0))) ) (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "f64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) (invoke "reset") (assert_return (invoke "i64.load") (i64.const 0x0)) (assert_return (invoke "f64.load") (f64.const 0.0)) (invoke "i64.store") (assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) (assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) binaryen-version_108/test/spec/float_misc.wast000066400000000000000000001662161423707623100217120ustar00rootroot00000000000000;; Platforms intended to run WebAssembly must support IEEE 754 arithmetic. ;; This testsuite is not currently sufficient for full IEEE 754 conformance ;; testing; platforms are currently expected to meet these requirements in ;; their own way (widely-used hardware platforms already do this). ;; ;; What this testsuite does test is that (a) the platform is basically IEEE 754 ;; rather than something else entirely, (b) it's configured correctly for ;; WebAssembly (rounding direction, exception masks, precision level, subnormal ;; mode, etc.), (c) the WebAssembly implementation doesn't perform any common ;; value-changing optimizations, and (d) that the WebAssembly implementation ;; doesn't exhibit any known implementation bugs. ;; ;; This file supplements f32.wast, f64.wast, f32_bitwise.wast, f64_bitwise.wast, ;; f32_cmp.wast, and f64_cmp.wast with additional single-instruction tests ;; covering additional miscellaneous interesting cases. (module (func (export "f32.add") (param $x f32) (param $y f32) (result f32) (f32.add (local.get $x) (local.get $y))) (func (export "f32.sub") (param $x f32) (param $y f32) (result f32) (f32.sub (local.get $x) (local.get $y))) (func (export "f32.mul") (param $x f32) (param $y f32) (result f32) (f32.mul (local.get $x) (local.get $y))) (func (export "f32.div") (param $x f32) (param $y f32) (result f32) (f32.div (local.get $x) (local.get $y))) (func (export "f32.sqrt") (param $x f32) (result f32) (f32.sqrt (local.get $x))) (func (export "f32.abs") (param $x f32) (result f32) (f32.abs (local.get $x))) (func (export "f32.neg") (param $x f32) (result f32) (f32.neg (local.get $x))) (func (export "f32.copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (local.get $x) (local.get $y))) (func (export "f32.ceil") (param $x f32) (result f32) (f32.ceil (local.get $x))) (func (export "f32.floor") (param $x f32) (result f32) (f32.floor (local.get $x))) (func (export "f32.trunc") (param $x f32) (result f32) (f32.trunc (local.get $x))) (func (export "f32.nearest") (param $x f32) (result f32) (f32.nearest (local.get $x))) (func (export "f32.min") (param $x f32) (param $y f32) (result f32) (f32.min (local.get $x) (local.get $y))) (func (export "f32.max") (param $x f32) (param $y f32) (result f32) (f32.max (local.get $x) (local.get $y))) (func (export "f64.add") (param $x f64) (param $y f64) (result f64) (f64.add (local.get $x) (local.get $y))) (func (export "f64.sub") (param $x f64) (param $y f64) (result f64) (f64.sub (local.get $x) (local.get $y))) (func (export "f64.mul") (param $x f64) (param $y f64) (result f64) (f64.mul (local.get $x) (local.get $y))) (func (export "f64.div") (param $x f64) (param $y f64) (result f64) (f64.div (local.get $x) (local.get $y))) (func (export "f64.sqrt") (param $x f64) (result f64) (f64.sqrt (local.get $x))) (func (export "f64.abs") (param $x f64) (result f64) (f64.abs (local.get $x))) (func (export "f64.neg") (param $x f64) (result f64) (f64.neg (local.get $x))) (func (export "f64.copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (local.get $x) (local.get $y))) (func (export "f64.ceil") (param $x f64) (result f64) (f64.ceil (local.get $x))) (func (export "f64.floor") (param $x f64) (result f64) (f64.floor (local.get $x))) (func (export "f64.trunc") (param $x f64) (result f64) (f64.trunc (local.get $x))) (func (export "f64.nearest") (param $x f64) (result f64) (f64.nearest (local.get $x))) (func (export "f64.min") (param $x f64) (param $y f64) (result f64) (f64.min (local.get $x) (local.get $y))) (func (export "f64.max") (param $x f64) (param $y f64) (result f64) (f64.max (local.get $x) (local.get $y))) ) ;; Miscellaneous values. (assert_return (invoke "f32.add" (f32.const 1.1234567890) (f32.const 1.2345e-10)) (f32.const 1.123456789)) (assert_return (invoke "f64.add" (f64.const 1.1234567890) (f64.const 1.2345e-10)) (f64.const 0x1.1f9add37c11f7p+0)) ;; Test adding the greatest value to 1.0 that rounds back to 1.0, and the ;; least that rounds to something greater. (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1p-24)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1.000002p-24)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1p-53)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1.0000000000001p-53)) (f64.const 0x1.0000000000001p+0)) ;; Max subnormal + min subnormal = min normal. (assert_return (invoke "f32.add" (f32.const 0x1p-149) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-126)) (assert_return (invoke "f64.add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1p-1022)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.add" (f32.const 0x1p+31) (f32.const 1024.25)) (f32.const 0x1.000008p+31)) (assert_return (invoke "f64.add" (f64.const 0x1p+63) (f64.const 1024.25)) (f64.const 0x1.0000000000001p+63)) ;; Test a case that was "tricky" on MMIX. ;; http://mmix.cs.hm.edu/bugs/bug_rounding.html (assert_return (invoke "f64.add" (f64.const -0x1p-1008) (f64.const 0x0.0000000001716p-1022)) (f64.const -0x1.fffffffffffffp-1009)) ;; http://www.vinc17.org/software/tst-ieee754.xsl (assert_return (invoke "f64.add" (f64.const 9007199254740992) (f64.const 1.00001)) (f64.const 9007199254740994)) ;; http://www.vinc17.org/software/test.java (assert_return (invoke "f64.add" (f64.const 9007199254740994) (f64.const 0x1.fffep-1)) (f64.const 9007199254740994)) ;; Computations that round differently in ties-to-odd mode. (assert_return (invoke "f32.add" (f32.const 0x1p23) (f32.const 0x1p-1)) (f32.const 0x1p23)) (assert_return (invoke "f32.add" (f32.const 0x1.000002p+23) (f32.const 0x1p-1)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f64.add" (f64.const 0x1p52) (f64.const 0x1p-1)) (f64.const 0x1p52)) (assert_return (invoke "f64.add" (f64.const 0x1.0000000000001p+52) (f64.const 0x1p-1)) (f64.const 0x1.0000000000002p+52)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.add" (f32.const -0x1.39675ap+102) (f32.const 0x1.76c94cp-99)) (f32.const -0x1.39675ap+102)) (assert_return (invoke "f32.add" (f32.const 0x1.6c0f24p+67) (f32.const -0x1.2b92dp+52)) (f32.const 0x1.6c0cccp+67)) (assert_return (invoke "f32.add" (f32.const 0x1.e62318p-83) (f32.const 0x1.f74abep-125)) (f32.const 0x1.e62318p-83)) (assert_return (invoke "f32.add" (f32.const 0x1.2a71d4p+39) (f32.const -0x1.c9f10cp+55)) (f32.const -0x1.c9efe2p+55)) (assert_return (invoke "f32.add" (f32.const 0x1.f8f736p-15) (f32.const 0x1.7bd45ep+106)) (f32.const 0x1.7bd45ep+106)) (assert_return (invoke "f64.add" (f64.const 0x1.f33e1fbca27aap-413) (f64.const -0x1.6b192891ed61p+249)) (f64.const -0x1.6b192891ed61p+249)) (assert_return (invoke "f64.add" (f64.const -0x1.46f75d130eeb1p+76) (f64.const 0x1.25275d6f7a4acp-184)) (f64.const -0x1.46f75d130eeb1p+76)) (assert_return (invoke "f64.add" (f64.const 0x1.04dec9265a731p-148) (f64.const -0x1.11eed4e8c127cp-12)) (f64.const -0x1.11eed4e8c127cp-12)) (assert_return (invoke "f64.add" (f64.const 0x1.05773b7166b0ap+497) (f64.const 0x1.134022f2da37bp+66)) (f64.const 0x1.05773b7166b0ap+497)) (assert_return (invoke "f64.add" (f64.const 0x1.ef4f794282a82p+321) (f64.const 0x1.14a82266badep+394)) (f64.const 0x1.14a82266badep+394)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.add" (f32.const 0x1.1bf976p+72) (f32.const -0x1.7f5868p+20)) (f32.const 0x1.1bf976p+72)) (assert_return (invoke "f32.add" (f32.const 0x1.7f9c6cp-45) (f32.const -0x1.b9bb0ep-78)) (f32.const 0x1.7f9c6cp-45)) (assert_return (invoke "f32.add" (f32.const -0x1.32d1bcp-42) (f32.const 0x1.f7d214p+125)) (f32.const 0x1.f7d214p+125)) (assert_return (invoke "f32.add" (f32.const -0x1.8e5c0ep-44) (f32.const -0x1.3afa4cp-106)) (f32.const -0x1.8e5c0ep-44)) (assert_return (invoke "f32.add" (f32.const 0x1.13cd78p-10) (f32.const -0x1.3af316p-107)) (f32.const 0x1.13cd78p-10)) (assert_return (invoke "f64.add" (f64.const 0x1.f8dd15ca97d4ap+179) (f64.const -0x1.367317d1fe8bfp-527)) (f64.const 0x1.f8dd15ca97d4ap+179)) (assert_return (invoke "f64.add" (f64.const 0x1.5db08d739228cp+155) (f64.const -0x1.fb316fa147dcbp-61)) (f64.const 0x1.5db08d739228cp+155)) (assert_return (invoke "f64.add" (f64.const 0x1.bbb403cb85c07p-404) (f64.const -0x1.7e44046b8bbf3p-979)) (f64.const 0x1.bbb403cb85c07p-404)) (assert_return (invoke "f64.add" (f64.const -0x1.34d38af291831p+147) (f64.const -0x1.9890b47439953p+139)) (f64.const -0x1.366c1ba705bcap+147)) (assert_return (invoke "f64.add" (f64.const -0x1.b61dedf4e0306p+3) (f64.const 0x1.09e2f31773c4ap+290)) (f64.const 0x1.09e2f31773c4ap+290)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.add" (f32.const -0x1.129bd8p-117) (f32.const 0x1.c75012p-43)) (f32.const 0x1.c75012p-43)) (assert_return (invoke "f32.add" (f32.const -0x1.c204a2p-16) (f32.const 0x1.80b132p-27)) (f32.const -0x1.c1d48cp-16)) (assert_return (invoke "f32.add" (f32.const -0x1.decc1cp+36) (f32.const 0x1.c688dap-109)) (f32.const -0x1.decc1cp+36)) (assert_return (invoke "f32.add" (f32.const 0x1.61ce6ap-118) (f32.const -0x1.772892p+30)) (f32.const -0x1.772892p+30)) (assert_return (invoke "f32.add" (f32.const -0x1.3dc826p-120) (f32.const 0x1.fc3f66p+95)) (f32.const 0x1.fc3f66p+95)) (assert_return (invoke "f64.add" (f64.const 0x1.bf68acc263a0fp-777) (f64.const -0x1.5f9352965e5a6p+1004)) (f64.const -0x1.5f9352965e5a6p+1004)) (assert_return (invoke "f64.add" (f64.const -0x1.76eaa70911f51p+516) (f64.const -0x1.2d746324ce47ap+493)) (f64.const -0x1.76eaa963fabb6p+516)) (assert_return (invoke "f64.add" (f64.const -0x1.b637d82c15a7ap-967) (f64.const 0x1.cc654ccab4152p-283)) (f64.const 0x1.cc654ccab4152p-283)) (assert_return (invoke "f64.add" (f64.const -0x1.a5b1fb66e846ep-509) (f64.const 0x1.4bdd36f0bb5ccp-860)) (f64.const -0x1.a5b1fb66e846ep-509)) (assert_return (invoke "f64.add" (f64.const -0x1.14108da880f9ep+966) (f64.const 0x1.417f35701e89fp+800)) (f64.const -0x1.14108da880f9ep+966)) ;; Computations that round differently on x87. (assert_return (invoke "f64.add" (f64.const -0x1.fa0caf21ffebcp+804) (f64.const 0x1.4ca8fdcff89f9p+826)) (f64.const 0x1.4ca8f5e7c5e31p+826)) (assert_return (invoke "f64.add" (f64.const 0x1.016f1fcbdfd38p+784) (f64.const 0x1.375dffcbc9a2cp+746)) (f64.const 0x1.016f1fcbe4b0fp+784)) (assert_return (invoke "f64.add" (f64.const -0x1.dffda6d5bff3ap+624) (f64.const 0x1.f9e8cc2dff782p+674)) (f64.const 0x1.f9e8cc2dff77bp+674)) (assert_return (invoke "f64.add" (f64.const 0x1.fff4b43687dfbp+463) (f64.const 0x1.0fd5617c4a809p+517)) (f64.const 0x1.0fd5617c4a809p+517)) (assert_return (invoke "f64.add" (f64.const 0x1.535d380035da2p-995) (f64.const 0x1.cce37dddbb73bp-963)) (f64.const 0x1.cce37ddf0ed0fp-963)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.add" (f64.const -0x1.d91cd3fc0c66fp+752) (f64.const -0x1.4e18c80229734p+952)) (f64.const -0x1.4e18c80229734p+952)) (assert_return (invoke "f64.add" (f64.const 0x1.afc70fd36e372p+193) (f64.const -0x1.bd10a9b377b46p+273)) (f64.const -0x1.bd10a9b377b46p+273)) (assert_return (invoke "f64.add" (f64.const -0x1.2abd570b078b2p+302) (f64.const 0x1.b3c1ad759cb5bp-423)) (f64.const -0x1.2abd570b078b2p+302)) (assert_return (invoke "f64.add" (f64.const -0x1.5b2ae84c0686cp-317) (f64.const -0x1.dba7a1c022823p+466)) (f64.const -0x1.dba7a1c022823p+466)) (assert_return (invoke "f64.add" (f64.const -0x1.ac627bd7cbf38p-198) (f64.const 0x1.2312e265b8d59p-990)) (f64.const -0x1.ac627bd7cbf38p-198)) ;; Computations that utilize the maximum exponent value to avoid overflow. (assert_return (invoke "f32.add" (f32.const 0x1.2b91ap+116) (f32.const 0x1.cbcd52p+127)) (f32.const 0x1.cbf2c4p+127)) (assert_return (invoke "f32.add" (f32.const 0x1.96f392p+127) (f32.const -0x1.6b3fecp+107)) (f32.const 0x1.96f37cp+127)) (assert_return (invoke "f32.add" (f32.const 0x1.132f1cp+118) (f32.const -0x1.63d632p+127)) (f32.const -0x1.634c9ap+127)) (assert_return (invoke "f32.add" (f32.const -0x1.1dda64p+120) (f32.const -0x1.ef02ep+127)) (f32.const -0x1.f13e94p+127)) (assert_return (invoke "f32.add" (f32.const -0x1.4ad8dap+127) (f32.const -0x1.eae082p+125)) (f32.const -0x1.c590fap+127)) (assert_return (invoke "f64.add" (f64.const 0x1.017099f2a4b8bp+1023) (f64.const 0x1.1f63b28f05454p+981)) (f64.const 0x1.017099f2a5009p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.d88b6c74984efp+1023) (f64.const 0x1.33b444775eabcp+990)) (f64.const 0x1.d88b6c7532291p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.84576422fdf5p+1023) (f64.const 0x1.60ee6aa12fb9cp+1012)) (f64.const -0x1.842b4655a9cf1p+1023)) (assert_return (invoke "f64.add" (f64.const -0x1.9aaace3e79f7dp+1001) (f64.const 0x1.e4068af295cb6p+1023)) (f64.const 0x1.e4068487ea926p+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.06cdae79f27b9p+1023) (f64.const -0x1.e05cb0c96f975p+991)) (f64.const 0x1.06cdae78121eep+1023)) ;; Computations that utilize the minimum exponent value. (assert_return (invoke "f32.add" (f32.const 0x1.6a1a2p-127) (f32.const 0x1.378p-140)) (f32.const 0x1.6a23dcp-127)) (assert_return (invoke "f32.add" (f32.const 0x1.28p-144) (f32.const -0x1p-148)) (f32.const 0x1.18p-144)) (assert_return (invoke "f32.add" (f32.const -0x1p-146) (f32.const 0x1.c3cap-128)) (f32.const 0x1.c3c9cp-128)) (assert_return (invoke "f32.add" (f32.const -0x1.4p-145) (f32.const 0x1.424052p-122)) (f32.const 0x1.42405p-122)) (assert_return (invoke "f32.add" (f32.const 0x1.c5p-141) (f32.const -0x1.72f8p-135)) (f32.const -0x1.6be4p-135)) (assert_return (invoke "f64.add" (f64.const 0x1.4774c681d1e21p-1022) (f64.const -0x1.271e58e9f58cap-1021)) (f64.const -0x1.06c7eb5219373p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.10b3a75e31916p-1021) (f64.const -0x1.ffb82b0e868a7p-1021)) (f64.const -0x1.de090760a9f22p-1022)) (assert_return (invoke "f64.add" (f64.const -0x0.6b58448b8098ap-1022) (f64.const -0x1.579796ed04cbep-1022)) (f64.const -0x1.c2efdb7885648p-1022)) (assert_return (invoke "f64.add" (f64.const 0x1.9eb9e7baae8d1p-1020) (f64.const -0x1.d58e136f8c6eep-1020)) (f64.const -0x0.db50aed377874p-1022)) (assert_return (invoke "f64.add" (f64.const -0x1.f1115deeafa0bp-1022) (f64.const 0x1.221b1c87dca29p-1022)) (f64.const -0x0.cef64166d2fe2p-1022)) ;; Test an add of the second-greatest finite value with the distance to greatest ;; finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffcp+127) (f32.const 0x1p+104)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f64.add" (f64.const 0x1.ffffffffffffep+1023) (f64.const 0x1p+971)) (f64.const 0x1.fffffffffffffp+1023)) ;; http://news.harvard.edu/gazette/story/2013/09/dawn-of-a-revolution/ (assert_return (invoke "f32.add" (f32.const 2.0) (f32.const 2.0)) (f32.const 4.0)) (assert_return (invoke "f64.add" (f64.const 2.0) (f64.const 2.0)) (f64.const 4.0)) ;; Test rounding above the greatest finite value. (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const inf)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const inf)) ;; Test for a historic spreadsheet bug. ;; https://blogs.office.com/2007/09/25/calculation-issue-update/ (assert_return (invoke "f32.sub" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 65536.0)) (assert_return (invoke "f64.sub" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1.fffffffffffffp+15)) ;; Test subtracting the greatest value from 1.0 that rounds back to 1.0, and the ;; least that rounds to something less. (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1p-25)) (f32.const 0x1.0p+0)) (assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1.000002p-25)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1p-54)) (f64.const 0x1.0p+0)) (assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1.0000000000001p-54)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ee2466p-106) (f32.const -0x1.16277ep+119)) (f32.const 0x1.16277ep+119)) (assert_return (invoke "f32.sub" (f32.const -0x1.446f9ep+119) (f32.const -0x1.4396a4p+43)) (f32.const -0x1.446f9ep+119)) (assert_return (invoke "f32.sub" (f32.const 0x1.74773cp+0) (f32.const -0x1.a25512p-82)) (f32.const 0x1.74773cp+0)) (assert_return (invoke "f32.sub" (f32.const 0x1.9345c4p-117) (f32.const 0x1.6792c2p-76)) (f32.const -0x1.6792c2p-76)) (assert_return (invoke "f32.sub" (f32.const 0x1.9ecfa4p-18) (f32.const -0x1.864b44p-107)) (f32.const 0x1.9ecfa4p-18)) (assert_return (invoke "f64.sub" (f64.const -0x1.5b798875e7845p-333) (f64.const -0x1.b5147117452fep-903)) (f64.const -0x1.5b798875e7845p-333)) (assert_return (invoke "f64.sub" (f64.const -0x1.6c87baeb6d72dp+552) (f64.const -0x1.64fb35d4b5571p-158)) (f64.const -0x1.6c87baeb6d72dp+552)) (assert_return (invoke "f64.sub" (f64.const 0x1.b3d369fcf74bp-461) (f64.const -0x1.ea1668c0dec93p-837)) (f64.const 0x1.b3d369fcf74bp-461)) (assert_return (invoke "f64.sub" (f64.const 0x1.0abd449353eadp-1005) (f64.const -0x1.0422ea3e82ee9p+154)) (f64.const 0x1.0422ea3e82ee9p+154)) (assert_return (invoke "f64.sub" (f64.const -0x1.aadbc6b43cc3dp-143) (f64.const -0x1.e7f922ef1ee58p-539)) (f64.const -0x1.aadbc6b43cc3dp-143)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sub" (f32.const -0x1.61e262p+108) (f32.const -0x1.baf3e4p+112)) (f32.const 0x1.a4d5bep+112)) (assert_return (invoke "f32.sub" (f32.const -0x1.62c2f6p+109) (f32.const 0x1.6e514ap+6)) (f32.const -0x1.62c2f6p+109)) (assert_return (invoke "f32.sub" (f32.const -0x1.287c94p-83) (f32.const 0x1.0f2f9cp-24)) (f32.const -0x1.0f2f9cp-24)) (assert_return (invoke "f32.sub" (f32.const -0x1.c8825cp-77) (f32.const -0x1.4aead6p-12)) (f32.const 0x1.4aead6p-12)) (assert_return (invoke "f32.sub" (f32.const -0x1.2976a4p+99) (f32.const 0x1.c6e3b8p-59)) (f32.const -0x1.2976a4p+99)) (assert_return (invoke "f64.sub" (f64.const -0x1.76cb28ae6c045p+202) (f64.const -0x1.0611f2af4e9b9p+901)) (f64.const 0x1.0611f2af4e9b9p+901)) (assert_return (invoke "f64.sub" (f64.const 0x1.baf35eff22e9ep-368) (f64.const 0x1.5c3e08ecf73ecp-451)) (f64.const 0x1.baf35eff22e9ep-368)) (assert_return (invoke "f64.sub" (f64.const -0x1.8fd354b376f1fp-200) (f64.const 0x1.513c860f386ffp-508)) (f64.const -0x1.8fd354b376f1fp-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.760d447230ae6p-992) (f64.const -0x1.16f788438ae3ep-328)) (f64.const 0x1.16f788438ae3ep-328)) (assert_return (invoke "f64.sub" (f64.const -0x1.73aab4fcfc7ap+112) (f64.const 0x1.7c589f990b884p+171)) (f64.const -0x1.7c589f990b884p+171)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sub" (f32.const 0x1.ea264cp+95) (f32.const 0x1.852988p-15)) (f32.const 0x1.ea264cp+95)) (assert_return (invoke "f32.sub" (f32.const -0x1.14ec7cp+19) (f32.const -0x1.0ad3fep-35)) (f32.const -0x1.14ec7cp+19)) (assert_return (invoke "f32.sub" (f32.const -0x1.3251dap-36) (f32.const -0x1.49c97ep-56)) (f32.const -0x1.3251c6p-36)) (assert_return (invoke "f32.sub" (f32.const -0x1.13565ep-14) (f32.const 0x1.2f89a8p-13)) (f32.const -0x1.b934d8p-13)) (assert_return (invoke "f32.sub" (f32.const -0x1.6032b6p-33) (f32.const -0x1.bb5196p-104)) (f32.const -0x1.6032b6p-33)) (assert_return (invoke "f64.sub" (f64.const -0x1.b5b0797af491p-157) (f64.const -0x1.694b8348189e8p+722)) (f64.const 0x1.694b8348189e8p+722)) (assert_return (invoke "f64.sub" (f64.const -0x1.72b142826ed73p+759) (f64.const -0x1.010477bc9afbdp+903)) (f64.const 0x1.010477bc9afbdp+903)) (assert_return (invoke "f64.sub" (f64.const 0x1.83273b6bb94cfp-796) (f64.const 0x1.1a93f948a2abbp+181)) (f64.const -0x1.1a93f948a2abbp+181)) (assert_return (invoke "f64.sub" (f64.const -0x1.207e7156cbf2p-573) (f64.const 0x1.cf3f12fd3814dp-544)) (f64.const -0x1.cf3f13063c086p-544)) (assert_return (invoke "f64.sub" (f64.const -0x1.837e6844f1718p-559) (f64.const -0x1.1c29b757f98abp-14)) (f64.const 0x1.1c29b757f98abp-14)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sub" (f64.const 0x1.c21151a709b6cp-78) (f64.const 0x1.0a12fff8910f6p-115)) (f64.const 0x1.c21151a701663p-78)) (assert_return (invoke "f64.sub" (f64.const 0x1.c57912aae2f64p-982) (f64.const 0x1.dbfbd4800b7cfp-1010)) (f64.const 0x1.c579128d2338fp-982)) (assert_return (invoke "f64.sub" (f64.const 0x1.ffef4399af9c6p-254) (f64.const 0x1.edb96dfaea8b1p-200)) (f64.const -0x1.edb96dfaea8b1p-200)) (assert_return (invoke "f64.sub" (f64.const -0x1.363eee391cde2p-39) (f64.const -0x1.a65462000265fp-69)) (f64.const -0x1.363eee32838c9p-39)) (assert_return (invoke "f64.sub" (f64.const 0x1.59016dba002a1p-25) (f64.const 0x1.5d4374f124cccp-3)) (f64.const -0x1.5d436f8d1f15dp-3)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.sub" (f64.const -0x1.18196bca005cfp-814) (f64.const -0x1.db7b01ce3f52fp-766)) (f64.const 0x1.db7b01ce3f51dp-766)) (assert_return (invoke "f64.sub" (f64.const -0x1.d17b3528d219p+33) (f64.const 0x1.fd739d4ea220ap+367)) (f64.const -0x1.fd739d4ea220ap+367)) (assert_return (invoke "f64.sub" (f64.const 0x1.dea46994de319p+114) (f64.const 0x1.b5b19cd55c7d3p-590)) (f64.const 0x1.dea46994de319p+114)) (assert_return (invoke "f64.sub" (f64.const 0x1.b60f9b2fbd9ecp-489) (f64.const -0x1.6f81c59ec5b8ep-694)) (f64.const 0x1.b60f9b2fbd9ecp-489)) (assert_return (invoke "f64.sub" (f64.const 0x1.5e423fe8571f4p-57) (f64.const 0x1.9624ed7c162dfp-618)) (f64.const 0x1.5e423fe8571f4p-57)) ;; pow(e, Ï€) - Ï€ ;; https://xkcd.com/217/ (assert_return (invoke "f32.sub" (f32.const 0x1.724046p+4) (f32.const 0x1.921fb6p+1)) (f32.const 0x1.3ffc5p+4)) (assert_return (invoke "f64.sub" (f64.const 0x1.724046eb0933ap+4) (f64.const 0x1.921fb54442d18p+1)) (f64.const 0x1.3ffc504280d97p+4)) ;; https://www.cnet.com/news/googles-calculator-muffs-some-math-problems/ (assert_return (invoke "f32.sub" (f32.const 2999999) (f32.const 2999998)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999995)) (f32.const 4.0)) (assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999993)) (f32.const 6.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400001)) (f32.const 1.0)) (assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400000)) (f32.const 2.0)) (assert_return (invoke "f64.sub" (f64.const 2999999999999999) (f64.const 2999999999999998)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999995)) (f64.const 4.0)) (assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999993)) (f64.const 6.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000001)) (f64.const 1.0)) (assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000000)) (f64.const 2.0)) ;; Min normal - max subnormal = min subnormal. (assert_return (invoke "f32.sub" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.sub" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x0.0000000000001p-1022)) ;; Test subtraction of numbers very close to 1. (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.8p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.0p+0)) (f32.const 0x1p-23)) (assert_return (invoke "f32.sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p-24)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.8p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0p+0)) (f64.const 0x1p-52)) (assert_return (invoke "f64.sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p-53)) ;; Test the least value that can be subtracted from the max value to produce a ;; different value. (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) (assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const 0x1.ffffffffffffep+1023)) ;; Miscellaneous values. (assert_return (invoke "f32.mul" (f32.const 1e15) (f32.const 1e15)) (f32.const 0x1.93e592p+99)) (assert_return (invoke "f32.mul" (f32.const 1e20) (f32.const 1e20)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const 1e25) (f32.const 1e25)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 1e15) (f64.const 1e15)) (f64.const 0x1.93e5939a08ceap+99)) (assert_return (invoke "f64.mul" (f64.const 1e20) (f64.const 1e20)) (f64.const 0x1.d6329f1c35ca5p+132)) (assert_return (invoke "f64.mul" (f64.const 1e25) (f64.const 1e25)) (f64.const 0x1.11b0ec57e649bp+166)) ;; Test for a case of double rounding, example from: ;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html ;; section 3.3.1: A typical problem: "double rounding" (assert_return (invoke "f32.mul" (f32.const 1848874880.0) (f32.const 19954563072.0)) (f32.const 0x1.000002p+65)) (assert_return (invoke "f64.mul" (f64.const 1848874847.0) (f64.const 19954562207.0)) (f64.const 3.6893488147419111424e+19)) ;; Test for a historic spreadsheet bug. ;; http://www.joelonsoftware.com/items/2007/09/26b.html (assert_return (invoke "f32.mul" (f32.const 77.1) (f32.const 850)) (f32.const 65535)) (assert_return (invoke "f64.mul" (f64.const 77.1) (f64.const 850)) (f64.const 65534.99999999999272404)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.14df2ep+61) (f32.const 0x1.748878p-36)) (f32.const -0x1.92e7e8p+25)) (assert_return (invoke "f32.mul" (f32.const -0x1.5629e2p+102) (f32.const -0x1.c33012p-102)) (f32.const 0x1.2d8604p+1)) (assert_return (invoke "f32.mul" (f32.const -0x1.b17694p+92) (f32.const -0x1.e4b56ap-97)) (f32.const 0x1.9a5baep-4)) (assert_return (invoke "f32.mul" (f32.const -0x1.1626a6p+79) (f32.const -0x1.c57d7p-75)) (f32.const 0x1.ecbaaep+4)) (assert_return (invoke "f32.mul" (f32.const 0x1.7acf72p+53) (f32.const 0x1.6c89acp+5)) (f32.const 0x1.0db556p+59)) (assert_return (invoke "f64.mul" (f64.const -0x1.25c293f6f37e4p+425) (f64.const 0x1.f5fd4fa41c6d8p+945)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const -0x1.cc1ae79fffc5bp-986) (f64.const -0x1.c36ccc2861ca6p-219)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.c0232b3e64b56p+606) (f64.const -0x1.f6939cf3affaap+106)) (f64.const -0x1.b7e3aedf190d3p+713)) (assert_return (invoke "f64.mul" (f64.const -0x1.60f289966b271p-313) (f64.const 0x1.28a5497f0c259p+583)) (f64.const -0x1.98fc50bcec259p+270)) (assert_return (invoke "f64.mul" (f64.const 0x1.37dab12d3afa2p+795) (f64.const 0x1.81e156bd393f1p-858)) (f64.const 0x1.d6126554b8298p-63)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.mul" (f32.const -0x1.3f57a2p-89) (f32.const -0x1.041d68p+92)) (f32.const 0x1.4479bp+3)) (assert_return (invoke "f32.mul" (f32.const 0x1.4d0582p+73) (f32.const 0x1.6e043ap+19)) (f32.const 0x1.dc236p+92)) (assert_return (invoke "f32.mul" (f32.const -0x1.2fdap-32) (f32.const -0x1.e1731cp+74)) (f32.const 0x1.1db89ep+43)) (assert_return (invoke "f32.mul" (f32.const 0x1.7bc8fep+67) (f32.const -0x1.3ad592p+15)) (f32.const -0x1.d3115ep+82)) (assert_return (invoke "f32.mul" (f32.const 0x1.936742p+30) (f32.const -0x1.a7a19p+66)) (f32.const -0x1.4dc71ap+97)) (assert_return (invoke "f64.mul" (f64.const -0x1.ba737b4ca3b13p-639) (f64.const 0x1.8923309857438p-314)) (f64.const -0x1.53bc0d07baa37p-952)) (assert_return (invoke "f64.mul" (f64.const 0x1.7c1932e610219p-276) (f64.const -0x1.2605db646489fp-635)) (f64.const -0x1.b48da2b0d2ae3p-911)) (assert_return (invoke "f64.mul" (f64.const -0x1.e43cdf3b2108p+329) (f64.const -0x1.99d96abbd61d1p+835)) (f64.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.4c19466551da3p+947) (f64.const 0x1.0bdcd6c7646e9p-439)) (f64.const 0x1.5b7cd8c3f638ap+508)) (assert_return (invoke "f64.mul" (f64.const 0x1.ff1da1726e3dfp+339) (f64.const -0x1.043c44f52b158p+169)) (f64.const -0x1.03c9364bb585cp+509)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.mul" (f32.const -0x1.907e8ap+46) (f32.const -0x1.5d3668p+95)) (f32.const inf)) (assert_return (invoke "f32.mul" (f32.const -0x1.8c9f74p-3) (f32.const 0x1.e2b452p-99)) (f32.const -0x1.75edccp-101)) (assert_return (invoke "f32.mul" (f32.const -0x1.cc605ap-19) (f32.const 0x1.ec321ap+105)) (f32.const -0x1.ba91a4p+87)) (assert_return (invoke "f32.mul" (f32.const -0x1.5fbb7ap+56) (f32.const 0x1.a8965ep-96)) (f32.const -0x1.23ae8ep-39)) (assert_return (invoke "f32.mul" (f32.const -0x1.fb7f12p+16) (f32.const 0x1.3a701ap-119)) (f32.const -0x1.37ac0cp-102)) (assert_return (invoke "f64.mul" (f64.const -0x1.5b0266454c26bp-496) (f64.const -0x1.af5787e3e0399p+433)) (f64.const 0x1.2457d81949e0bp-62)) (assert_return (invoke "f64.mul" (f64.const 0x1.0d54a82393d45p+478) (f64.const -0x1.425760807ceaep-764)) (f64.const -0x1.532068c8d0d5dp-286)) (assert_return (invoke "f64.mul" (f64.const -0x1.b532af981786p+172) (f64.const 0x1.ada95085ba36fp+359)) (f64.const -0x1.6ee38c1e01864p+532)) (assert_return (invoke "f64.mul" (f64.const 0x1.e132f4d49d1cep+768) (f64.const -0x1.a75afe9a7d864p+374)) (f64.const -inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.68bbf1cfff90ap+81) (f64.const 0x1.09cd17d652c5p+70)) (f64.const 0x1.768b8d67d794p+151)) ;; Computations that round differently on x87. (assert_return (invoke "f64.mul" (f64.const 0x1.f99fb602c89b7p-341) (f64.const 0x1.6caab46a31a2ep-575)) (f64.const 0x1.68201f986e9d7p-915)) (assert_return (invoke "f64.mul" (f64.const -0x1.86999c5eee379p-9) (f64.const 0x1.6e3b9e0d53e0dp+723)) (f64.const -0x1.17654a0ef35f5p+715)) (assert_return (invoke "f64.mul" (f64.const -0x1.069571b176f9p+367) (f64.const -0x1.e248b6ab0a0e3p-652)) (f64.const 0x1.eeaff575cae1dp-285)) (assert_return (invoke "f64.mul" (f64.const 0x1.c217645777dd2p+775) (f64.const 0x1.d93f5715dd646p+60)) (f64.const 0x1.a0064aa1d920dp+836)) (assert_return (invoke "f64.mul" (f64.const -0x1.848981b6e694ap-276) (f64.const 0x1.f5aacb64a0d19p+896)) (f64.const -0x1.7cb2296e6c2e5p+621)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.mul" (f64.const 0x1.db3bd2a286944p-599) (f64.const 0x1.ce910af1d55cap-425)) (f64.const 0x0.d6accdd538a39p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.aca223916012p-57) (f64.const -0x1.2b2b4958dd228p-966)) (f64.const 0x0.fa74eccae5615p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.bd062def16cffp-488) (f64.const -0x1.7ddd91a0c4c0ep-536)) (f64.const 0x0.a5f4d7769d90dp-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.c6a56169e9cep-772) (f64.const 0x1.517d55a474122p-255)) (f64.const -0x0.12baf260afb77p-1022)) (assert_return (invoke "f64.mul" (f64.const -0x1.08951b0b41705p-516) (f64.const -0x1.102dc27168d09p-507)) (f64.const 0x0.8ca6dbf3f592bp-1022)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.mul" (f64.const 0x1.8d0dea50c8c9bp+852) (f64.const 0x1.21cac31d87a24p-881)) (f64.const 0x1.c177311f7cd73p-29)) (assert_return (invoke "f64.mul" (f64.const 0x1.98049118e3063p-7) (f64.const 0x1.6362525151b58p-149)) (f64.const 0x1.1b358514103f9p-155)) (assert_return (invoke "f64.mul" (f64.const -0x1.ea65cb0631323p+1) (f64.const 0x1.fce683201a19bp-41)) (f64.const -0x1.e76dc8c223667p-39)) (assert_return (invoke "f64.mul" (f64.const 0x1.e4d235961d543p-373) (f64.const 0x1.bc56f20ef9a48p-205)) (f64.const 0x1.a4c09efcb71d6p-577)) (assert_return (invoke "f64.mul" (f64.const -0x1.b9612e66faba8p+77) (f64.const 0x1.e2bc6aa782273p-348)) (f64.const -0x1.a026ea4f81db1p-270)) ;; Test the least positive value with a positive square. (assert_return (invoke "f32.mul" (f32.const 0x1p-75) (f32.const 0x1p-75)) (f32.const 0x0p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000002p-75) (f32.const 0x1.000002p-75)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bccp-538) (f64.const 0x1.6a09e667f3bccp-538)) (f64.const 0x0p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bcdp-538) (f64.const 0x1.6a09e667f3bcdp-538)) (f64.const 0x0.0000000000001p-1022)) ;; Test the greatest positive value with a finite square. (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep+63) (f32.const 0x1.fffffep+63)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.mul" (f32.const 0x1p+64) (f32.const 0x1p+64)) (f32.const inf)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp+511) (f64.const 0x1.fffffffffffffp+511)) (f64.const 0x1.ffffffffffffep+1023)) (assert_return (invoke "f64.mul" (f64.const 0x1p+512) (f64.const 0x1p+512)) (f64.const inf)) ;; Test the squares of values very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.fffffep-1) (f32.const 0x1.fffffep-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test multiplication of numbers very close to 1. (assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p+0)) (assert_return (invoke "f32.mul" (f32.const 0x1.000004p+0) (f32.const 0x1.fffffcp-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p+0)) (assert_return (invoke "f64.mul" (f64.const 0x1.0000000000002p+0) (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.0000000000001p+0)) ;; Test MIN * EPSILON. ;; http://www.mpfr.org/mpfr-2.0.1/patch2 (assert_return (invoke "f32.mul" (f32.const 0x1p-126) (f32.const 0x1p-23)) (f32.const 0x1p-149)) (assert_return (invoke "f64.mul" (f64.const 0x1p-1022) (f64.const 0x1p-52)) (f64.const 0x0.0000000000001p-1022)) ;; http://opencores.org/bug,view,2454 (assert_return (invoke "f32.mul" (f32.const -0x1.0006p+4) (f32.const 0x1.ap-132)) (f32.const -0x1.a009cp-128)) ;; Miscellaneous values. (assert_return (invoke "f32.div" (f32.const 1.123456789) (f32.const 100)) (f32.const 0x1.702264p-7)) (assert_return (invoke "f32.div" (f32.const 8391667.0) (f32.const 12582905.0)) (f32.const 0x1.55754p-1)) (assert_return (invoke "f32.div" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 0x1p+53)) (assert_return (invoke "f32.div" (f32.const 0x1.dcbf6ap+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.dcbf68p-128)) (assert_return (invoke "f32.div" (f32.const 4) (f32.const 3)) (f32.const 0x1.555556p+0)) (assert_return (invoke "f64.div" (f64.const 1.123456789) (f64.const 100)) (f64.const 0.01123456789)) (assert_return (invoke "f64.div" (f64.const 8391667.0) (f64.const 12582905.0)) (f64.const 0x1.55753f1d9ba27p-1)) (assert_return (invoke "f64.div" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1p+53)) (assert_return (invoke "f64.div" (f64.const 0x1.dcbf6ap+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda8p-1022)) (assert_return (invoke "f64.div" (f64.const 4) (f64.const 3)) (f64.const 0x1.5555555555555p+0)) ;; Test for a historic hardware bug. ;; https://en.wikipedia.org/wiki/Pentium_FDIV_bug (assert_return (invoke "f32.div" (f32.const 4195835) (f32.const 3145727)) (f32.const 0x1.557542p+0)) (assert_return (invoke "f64.div" (f64.const 4195835) (f64.const 3145727)) (f64.const 0x1.557541c7c6b43p+0)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.div" (f32.const 0x1.6a6c5ap-48) (f32.const 0x1.fa0b7p+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.616fb2p-87) (f32.const 0x1.332172p+68)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const -0x1.96e778p+16) (f32.const 0x1.eb0c56p-80)) (f32.const -0x1.a8440ap+95)) (assert_return (invoke "f32.div" (f32.const -0x1.e2624p-76) (f32.const -0x1.ed236ep-122)) (f32.const 0x1.f4d584p+45)) (assert_return (invoke "f32.div" (f32.const -0x1.e2374ep+41) (f32.const 0x1.71fcdcp-80)) (f32.const -0x1.4da706p+121)) (assert_return (invoke "f64.div" (f64.const 0x1.163c09d0c38c1p+147) (f64.const 0x1.e04cc737348e6p+223)) (f64.const 0x1.289921caeed23p-77)) (assert_return (invoke "f64.div" (f64.const 0x1.d6867e741e0a9p-626) (f64.const 0x1.335eb19a9aae4p-972)) (f64.const 0x1.87e342d11f519p+346)) (assert_return (invoke "f64.div" (f64.const -0x1.d5edf648aeb98p+298) (f64.const 0x1.0dda15b079355p+640)) (f64.const -0x1.bdceaf9734b5cp-342)) (assert_return (invoke "f64.div" (f64.const -0x1.b683e3934aedap+691) (f64.const 0x1.c364e1df00dffp+246)) (f64.const -0x1.f16456e7afe3bp+444)) (assert_return (invoke "f64.div" (f64.const -0x1.44ca7539cc851p+540) (f64.const 0x1.58501bccc58fep+453)) (f64.const -0x1.e2f8657e0924ep+86)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.div" (f32.const -0x1.c2c54ap+69) (f32.const -0x1.00d142p-86)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 0x1.e35abep-46) (f32.const 0x1.c69dfp+44)) (f32.const 0x1.102eb4p-90)) (assert_return (invoke "f32.div" (f32.const 0x1.45ff2ap+0) (f32.const -0x1.1e8754p+89)) (f32.const -0x1.23434ep-89)) (assert_return (invoke "f32.div" (f32.const 0x1.8db18ap-51) (f32.const 0x1.47c678p-128)) (f32.const 0x1.369b96p+77)) (assert_return (invoke "f32.div" (f32.const 0x1.78599p+90) (f32.const 0x1.534144p+87)) (f32.const 0x1.1bfddcp+3)) (assert_return (invoke "f64.div" (f64.const 0x0.f331c4f47eb51p-1022) (f64.const -0x1.c7ff45bf6f03ap+362)) (f64.const -0x0p+0)) (assert_return (invoke "f64.div" (f64.const -0x1.0fc8707b9d19cp-987) (f64.const 0x1.77524d5f4a563p-536)) (f64.const -0x1.72c1a937d231p-452)) (assert_return (invoke "f64.div" (f64.const -0x1.edb3aa64bb338p-403) (f64.const -0x1.1c7c164320e4p+45)) (f64.const 0x1.bc44cc1c5ae63p-448)) (assert_return (invoke "f64.div" (f64.const -0x1.6534b34e8686bp+80) (f64.const 0x1.c34a7fc59e3c3p-791)) (f64.const -0x1.95421bf291b66p+870)) (assert_return (invoke "f64.div" (f64.const -0x1.91f58d7ed1237p+236) (f64.const -0x1.f190d808383c8p+55)) (f64.const 0x1.9d9eb0836f906p+180)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.div" (f32.const 0x1.64b2a4p+26) (f32.const 0x1.e95752p-119)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const -0x1.53c9b6p+77) (f32.const 0x1.d689ap+27)) (f32.const -0x1.71baa4p+49)) (assert_return (invoke "f32.div" (f32.const 0x1.664a8ap+38) (f32.const -0x1.59dba2p+96)) (f32.const -0x1.0933f4p-58)) (assert_return (invoke "f32.div" (f32.const -0x1.99e0fap+111) (f32.const -0x1.c2b5a8p+9)) (f32.const 0x1.d19de6p+101)) (assert_return (invoke "f32.div" (f32.const -0x1.5a815ap+92) (f32.const -0x1.b5820ap+13)) (f32.const 0x1.9580b8p+78)) (assert_return (invoke "f64.div" (f64.const -0x1.81fd1e2af7bebp-655) (f64.const 0x1.edefc4eae536cp-691)) (f64.const -0x1.901abdd91b661p+35)) (assert_return (invoke "f64.div" (f64.const -0x1.47cf932953c43p+782) (f64.const -0x1.bc40496b1f2a1p-553)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const -0x1.2bd2e8fbdcad7p-746) (f64.const 0x1.b115674cc476ep-65)) (f64.const -0x1.62752bf19fa81p-682)) (assert_return (invoke "f64.div" (f64.const -0x1.f923e3fea9efep+317) (f64.const -0x1.8044c74d27a39p-588)) (f64.const 0x1.5086518cc7186p+905)) (assert_return (invoke "f64.div" (f64.const 0x1.516ed2051d6bbp+181) (f64.const -0x1.c9f455eb9c2eep+214)) (f64.const -0x1.79414d67f2889p-34)) ;; Computations that round differently on x87. (assert_return (invoke "f64.div" (f64.const -0x1.9c52726aed366p+585) (f64.const -0x1.7d0568c75660fp+195)) (f64.const 0x1.1507ca2a65f23p+390)) (assert_return (invoke "f64.div" (f64.const -0x1.522672f461667p+546) (f64.const -0x1.36d36572c9f71p+330)) (f64.const 0x1.1681369370619p+216)) (assert_return (invoke "f64.div" (f64.const 0x1.01051b4e8cd61p+185) (f64.const -0x1.2cbb5ca3d33ebp+965)) (f64.const -0x1.b59471598a2f3p-781)) (assert_return (invoke "f64.div" (f64.const 0x1.5f93bb80fc2cbp+217) (f64.const 0x1.7e051aae9f0edp+427)) (f64.const 0x1.d732fa926ba4fp-211)) (assert_return (invoke "f64.div" (f64.const -0x1.e251d762163ccp+825) (f64.const 0x1.3ee63581e1796p+349)) (f64.const -0x1.8330077d90a07p+476)) ;; Computations that round differently on x87 in double-precision mode. (assert_return (invoke "f64.div" (f64.const 0x1.dcbf69f10006dp+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda7c4001bp-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.e14169442fbcap-1011) (f64.const 0x1.505451d62ff7dp+12)) (f64.const 0x0.b727e85f38b39p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.d3ebe726ec964p-144) (f64.const -0x1.4a7bfc0b83608p+880)) (f64.const 0x0.5a9d8c50cbf87p-1022)) (assert_return (invoke "f64.div" (f64.const -0x1.6c3def770aee1p-393) (f64.const -0x1.8b84724347598p+631)) (f64.const 0x0.3af0707fcd0c7p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.16abda1bb3cb3p-856) (f64.const 0x1.6c9c7198eb1e6p+166)) (f64.const 0x0.c3a8fd6741649p-1022)) (assert_return (invoke "f64.div" (f64.const 0x1.7057d6ab553cap-1005) (f64.const -0x1.2abf1e98660ebp+23)) (f64.const -0x0.04ee8d8ec01cdp-1022)) ;; Computations that round differently when div is mul by reciprocal. (assert_return (invoke "f32.div" (f32.const 0x1.ada9aap+89) (f32.const 0x1.69884cp+42)) (f32.const 0x1.303e2ep+47)) (assert_return (invoke "f32.div" (f32.const 0x1.8281c8p+90) (f32.const -0x1.62883cp+106)) (f32.const -0x1.17169cp-16)) (assert_return (invoke "f32.div" (f32.const 0x1.5c6be2p+81) (f32.const 0x1.d01dfep-1)) (f32.const 0x1.805e32p+81)) (assert_return (invoke "f32.div" (f32.const -0x1.bbd252p+19) (f32.const -0x1.fba95p+33)) (f32.const 0x1.bf9d56p-15)) (assert_return (invoke "f32.div" (f32.const -0x1.0f41d6p-42) (f32.const -0x1.3f2dbep+56)) (f32.const 0x1.b320d8p-99)) (assert_return (invoke "f64.div" (f64.const 0x1.b2348a1c81899p+61) (f64.const -0x1.4a58aad903dd3p-861)) (f64.const -0x1.507c1e2a41b35p+922)) (assert_return (invoke "f64.div" (f64.const 0x1.23fa5137a918ap-130) (f64.const -0x1.7268db1951263p-521)) (f64.const -0x1.93965e0d896bep+390)) (assert_return (invoke "f64.div" (f64.const 0x1.dcb3915d82deep+669) (f64.const 0x1.50caaa1dc6b19p+638)) (f64.const 0x1.6a58ec814b09dp+31)) (assert_return (invoke "f64.div" (f64.const -0x1.046e378c0cc46p+182) (f64.const 0x1.ac925009a922bp+773)) (f64.const -0x1.3720aa94dab18p-592)) (assert_return (invoke "f64.div" (f64.const -0x1.8945fd69d8e11p-871) (f64.const -0x1.0a37870af809ap-646)) (f64.const 0x1.7a2e286c62382p-225)) ;; Computations that round differently when computed via f32. (assert_return (invoke "f64.div" (f64.const 0x1.82002af0ea1f3p-57) (f64.const 0x1.d0a9b0c2fa339p+0)) (f64.const 0x1.a952fbd1fc17cp-58)) (assert_return (invoke "f64.div" (f64.const 0x1.1e12b515db471p-102) (f64.const -0x1.41fc3c94fba5p-42)) (f64.const -0x1.c6e50cccb7cb6p-61)) (assert_return (invoke "f64.div" (f64.const 0x1.aba5adcd6f583p-41) (f64.const 0x1.17dfac639ce0fp-112)) (f64.const 0x1.872b0a008c326p+71)) (assert_return (invoke "f64.div" (f64.const 0x1.cf82510d0ae6bp+89) (f64.const 0x1.0207d86498053p+97)) (f64.const 0x1.cbdc804e2cf14p-8)) (assert_return (invoke "f64.div" (f64.const 0x1.4c82cbb508e21p-11) (f64.const -0x1.6b57208c2d5d5p+52)) (f64.const -0x1.d48e8b369129ap-64)) ;; Division involving the maximum subnormal value and the minimum normal value. (assert_return (invoke "f32.div" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffcp-127) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x0.fffffffffffffp-1022) (f64.const 0x1p-1022)) (f64.const 0x1.ffffffffffffep-1)) ;; Test the least positive value with a positive quotient with the maximum value. (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-23) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) (assert_return (invoke "f32.div" (f32.const 0x1p-22) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-52) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) (assert_return (invoke "f64.div" (f64.const 0x1p-51) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) ;; Test the least positive value with a finite reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p-128)) (f32.const inf)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000008p-128)) (f32.const 0x1.fffffp+127)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4p-1022)) (f64.const inf)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4000000000001p-1022)) (f64.const 0x1.ffffffffffff8p+1023)) ;; Test the least positive value that has a subnormal reciprocal. (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000002p+126)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p+126)) (f32.const 0x1p-126)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1.0000000000001p+1022)) (f64.const 0x0.fffffffffffffp-1022)) (assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1p+1022)) (f64.const 0x1p-1022)) ;; Test that the last binary digit of 1.0/3.0 is even in f32, ;; https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Single-precision_examples ;; ;; and odd in f64, ;; https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Double-precision_examples ;; ;; and that 1.0/3.0, 3.0/9.0, and 9.0/27.0 all agree. ;; http://www.netlib.org/paranoia (assert_return (invoke "f32.div" (f32.const 0x1p+0) (f32.const 0x1.8p+1)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x3p+0) (f32.const 0x1.2p+3)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f32.div" (f32.const 0x1.2p+3) (f32.const 0x1.bp+4)) (f32.const 0x1.555556p-2)) (assert_return (invoke "f64.div" (f64.const 0x1p+0) (f64.const 0x1.8p+1)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x3p+0) (f64.const 0x1.2p+3)) (f64.const 0x1.5555555555555p-2)) (assert_return (invoke "f64.div" (f64.const 0x1.2p+3) (f64.const 0x1.bp+4)) (f64.const 0x1.5555555555555p-2)) ;; Test division of numbers very close to 1. (assert_return (invoke "f32.div" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.fffffep-1) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffap-1)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000002p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffdp-1)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000001p+0)) (assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffep-1)) ;; Test for bugs found in an early RISC-V implementation. ;; https://github.com/riscv/riscv-tests/pull/8 (assert_return (invoke "f32.sqrt" (f32.const 0x1.56p+7)) (f32.const 0x1.a2744cp+3)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.594dfcp-23)) (f32.const 0x1.a4789cp-12)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.56p+7)) (f64.const 0x1.a2744ce9674f5p+3)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.594dfc70aa105p-23)) (f64.const 0x1.a4789c0e37f99p-12)) ;; Computations that round differently on x87. (assert_return (invoke "f64.sqrt" (f64.const 0x1.0263fcc94f259p-164)) (f64.const 0x1.0131485de579fp-82)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.352dfa278c43dp+338)) (f64.const 0x1.195607dac5417p+169)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.b15daa23924fap+402)) (f64.const 0x1.4d143db561493p+201)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.518c8e68cb753p-37)) (f64.const 0x1.9fb8ef1ad5bfdp-19)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.86d8b6518078ep-370)) (f64.const 0x1.3c5142a48fcadp-185)) ;; Test another sqrt case on x87. ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52593 (assert_return (invoke "f64.sqrt" (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.fffffffffffffp-1)) ;; Computations that round differently in round-upward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.098064p-3)) (f32.const 0x1.70b23p-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d9befp+100)) (f32.const 0x1.5c4052p+50)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.42b5b6p-4)) (f32.const 0x1.1f6d0ep-2)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3684dp-71)) (f32.const 0x1.8ebae2p-36)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.d8bc4ep-11)) (f32.const 0x1.ebf9eap-6)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.5c39f220d5704p-924)) (f64.const 0x1.2a92bc24ceae9p-462)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.53521a635745cp+727)) (f64.const 0x1.a0cfdc4ef8ff1p+363)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.dfd5bbc9f4678p+385)) (f64.const 0x1.efa817117c94cp+192)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.33f9640811cd4p+105)) (f64.const 0x1.8d17c9243baa3p+52)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.6c0ef0267ff45p+999)) (f64.const 0x1.afbcfae3f2b4p+499)) ;; Computations that round differently in round-downward mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.26a62ep+27)) (f32.const 0x1.84685p+13)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.166002p-113)) (f32.const 0x1.798762p-57)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.3dfb5p-15)) (f32.const 0x1.937e38p-8)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.30eb2cp-120)) (f32.const 0x1.176406p-60)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.cb705cp-123)) (f32.const 0x1.e5020ap-62)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.edae8aea0543p+695)) (f64.const 0x1.f6c1ea4fc8dd2p+347)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.f7ee4bda5c9c3p-763)) (f64.const 0x1.fbf30bdaf11c5p-382)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a48f348266ad1p-30)) (f64.const 0x1.481ee7540baf7p-15)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.feb5a1ce3ed9cp-242)) (f64.const 0x1.6995060c20d46p-121)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.957d9796e3834p+930)) (f64.const 0x1.42305213157bap+465)) ;; Computations that round differently in round-toward-zero mode. (assert_return (invoke "f32.sqrt" (f32.const 0x1.65787cp+118)) (f32.const 0x1.2e82a4p+59)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.736044p+15)) (f32.const 0x1.b40e4p+7)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.a00edp-1)) (f32.const 0x1.cd8aecp-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.7a4c8p-87)) (f32.const 0x1.b819e4p-44)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.5d24d4p-94)) (f32.const 0x1.2af75ep-47)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.a008948ead274p+738)) (f64.const 0x1.4659b37c39b19p+369)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.70f6199ed21f5p-381)) (f64.const 0x1.b2a2bddf3300dp-191)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.35c1d49f2a352p+965)) (f64.const 0x1.8e3d9f01a9716p+482)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.3fbdcfb2b2a15p-45)) (f64.const 0x1.949ba4feca42ap-23)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.c201b94757145p-492)) (f64.const 0x1.5369ee6bf2967p-246)) ;; Computations that round differently when computed via f32. (assert_return_canonical_nan (invoke "f64.sqrt" (f64.const -0x1.360e8d0032adp-963))) (assert_return (invoke "f64.sqrt" (f64.const 0x1.d9a6f5eef0503p+103)) (f64.const 0x1.ec73f56c166f6p+51)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.aa051a5c4ec27p-760)) (f64.const 0x1.4a3e771ff5149p-380)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.e5522a741babep-276)) (f64.const 0x1.607ae2b6feb7dp-138)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.4832badc0c061p+567)) (f64.const 0x1.99ec7934139b2p+283)) ;; Test the least value with a sqrt that rounds to one. (assert_return (invoke "f32.sqrt" (f32.const 0x1.000002p+0)) (f32.const 0x1p+0)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.000004p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000001p+0)) (f64.const 0x1p+0)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000002p+0)) (f64.const 0x1.0000000000001p+0)) ;; Test the greatest value less than one for which sqrt is not an identity. (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffcp-1)) (f32.const 0x1.fffffep-1)) (assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffap-1)) (f32.const 0x1.fffffcp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.fffffffffffffp-1)) (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffdp-1)) (f64.const 0x1.ffffffffffffep-1)) ;; Test that the bitwise floating point operators are bitwise on NaN. (assert_return (invoke "f32.abs" (f32.const nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.abs" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.abs" (f64.const nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.abs" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.neg" (f32.const nan:0x0f1e2)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.neg" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f64.neg" (f64.const nan:0x0f1e27a6b)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.neg" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) (assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) (assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) ;; Test values close to 1.0. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep-1)) (f32.const 1.0)) (assert_return (invoke "f32.ceil" (f32.const 0x1.000002p+0)) (f32.const 2.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp-1)) (f64.const 1.0)) (assert_return (invoke "f64.ceil" (f64.const 0x1.0000000000001p+0)) (f64.const 2.0)) ;; Test the maximum and minimum value for which ceil is not an identity operator. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) ;; Test that implementations don't do the x+0x1p52-0x1p52 trick outside the ;; range where it's safe. (assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+23)) (f32.const 0x1.fffffep+23)) (assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+23)) (f32.const -0x1.fffffep+23)) (assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+52)) (f64.const 0x1.fffffffffffffp+52)) (assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+52)) (f64.const -0x1.fffffffffffffp+52)) ;; Test values close to -1.0. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep-1)) (f32.const -1.0)) (assert_return (invoke "f32.floor" (f32.const -0x1.000002p+0)) (f32.const -2.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp-1)) (f64.const -1.0)) (assert_return (invoke "f64.floor" (f64.const -0x1.0000000000001p+0)) (f64.const -2.0)) ;; Test the maximum and minimum value for which floor is not an identity operator. (assert_return (invoke "f32.floor" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.floor" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.floor" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that floor isn't implemented as XMVectorFloor. ;; http://dss.stephanierct.com/DevBlog/?p=8#comment-4 (assert_return (invoke "f32.floor" (f32.const 88607.0)) (f32.const 88607.0)) (assert_return (invoke "f64.floor" (f64.const 88607.0)) (f64.const 88607.0)) ;; Test the maximum and minimum value for which trunc is not an identity operator. (assert_return (invoke "f32.trunc" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) (assert_return (invoke "f32.trunc" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) (assert_return (invoke "f64.trunc" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) (assert_return (invoke "f64.trunc" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) ;; Test that nearest isn't implemented naively. ;; http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 ;; http://blog.frama-c.com/index.php?post/2013/05/04/nearbyintf3 (assert_return (invoke "f32.nearest" (f32.const 0x1.000002p+23)) (f32.const 0x1.000002p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.000004p+23)) (f32.const 0x1.000004p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep-2)) (f32.const 0.0)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+47)) (f32.const 0x1.fffffep+47)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000001p+52)) (f64.const 0x1.0000000000001p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000002p+52)) (f64.const 0x1.0000000000002p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp-2)) (f64.const 0.0)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+105)) (f64.const 0x1.fffffffffffffp+105)) ;; Nearest should not round halfway cases away from zero (as C's round(3) does) ;; or up (as JS's Math.round does). (assert_return (invoke "f32.nearest" (f32.const 4.5)) (f32.const 4.0)) (assert_return (invoke "f32.nearest" (f32.const -4.5)) (f32.const -4.0)) (assert_return (invoke "f32.nearest" (f32.const -3.5)) (f32.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const 4.5)) (f64.const 4.0)) (assert_return (invoke "f64.nearest" (f64.const -4.5)) (f64.const -4.0)) (assert_return (invoke "f64.nearest" (f64.const -3.5)) (f64.const -4.0)) ;; Test the maximum and minimum value for which nearest is not an identity operator. (assert_return (invoke "f32.nearest" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f64.nearest" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) binaryen-version_108/test/spec/forward.wast000066400000000000000000000012611423707623100212220ustar00rootroot00000000000000(module (func $even (export "even") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 1)) (else (call $odd (i32.sub (local.get $n) (i32.const 1)))) ) ) (func $odd (export "odd") (param $n i32) (result i32) (if (result i32) (i32.eq (local.get $n) (i32.const 0)) (then (i32.const 0)) (else (call $even (i32.sub (local.get $n) (i32.const 1)))) ) ) ) (assert_return (invoke "even" (i32.const 13)) (i32.const 0)) (assert_return (invoke "even" (i32.const 20)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 13)) (i32.const 1)) (assert_return (invoke "odd" (i32.const 20)) (i32.const 0)) binaryen-version_108/test/spec/func-local-after-body.fail.wast000066400000000000000000000000421423707623100245410ustar00rootroot00000000000000(module (func (nop) (local i32))) binaryen-version_108/test/spec/func-local-before-param.fail.wast000066400000000000000000000000501423707623100250440ustar00rootroot00000000000000(module (func (local i32) (param i32))) binaryen-version_108/test/spec/func-local-before-result.fail.wast000066400000000000000000000000671423707623100252720ustar00rootroot00000000000000(module (func (local i32) (result i32) (local.get 0))) binaryen-version_108/test/spec/func-param-after-body.fail.wast000066400000000000000000000000421423707623100245470ustar00rootroot00000000000000(module (func (nop) (param i32))) binaryen-version_108/test/spec/func-result-after-body.fail.wast000066400000000000000000000000431423707623100247660ustar00rootroot00000000000000(module (func (nop) (result i32))) binaryen-version_108/test/spec/func-result-before-param.fail.wast000066400000000000000000000000671423707623100253000ustar00rootroot00000000000000(module (func (result i32) (param i32) (local.get 0))) binaryen-version_108/test/spec/func.wast000066400000000000000000000465031423707623100205210ustar00rootroot00000000000000;; Test `func` declarations, i.e. functions (module ;; Auxiliary definition (type $sig (func)) (func $dummy) ;; Syntax (func) (func (export "f")) (func $f) (func $h (export "g")) (func (local)) (func (local) (local)) (func (local i32)) (func (local $x i32)) (func (local i32 f64 i64)) (func (local i32) (local f64)) (func (local i32 f32) (local $x i64) (local) (local i32 f64)) (func (param)) (func (param) (param)) (func (param i32)) (func (param $x i32)) (func (param i32 f64 i64)) (func (param i32) (param f64)) (func (param i32 f32) (param $x i64) (param) (param i32 f64)) (func (result i32) (unreachable)) (type $sig-1 (func)) (type $sig-2 (func (result i32))) (type $sig-3 (func (param $x i32))) (type $sig-4 (func (param i32 f64 i32) (result i32))) (func (export "type-use-1") (type $sig-1)) (func (export "type-use-2") (type $sig-2) (i32.const 0)) (func (export "type-use-3") (type $sig-3)) (func (export "type-use-4") (type $sig-4) (i32.const 0)) (func (export "type-use-5") (type $sig-2) (result i32) (i32.const 0)) (func (export "type-use-6") (type $sig-3) (param i32)) (func (export "type-use-7") (type $sig-4) (param i32) (param f64 i32) (result i32) (i32.const 0) ) (func (type $sig)) (func (type $forward)) ;; forward reference (func $complex (param i32 f32) (param $x i64) (param) (param i32) (result) (result i32) (result) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (func $complex-sig (type $sig) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (type $forward (func)) ;; Typing of locals (func (export "local-first-i32") (result i32) (local i32 i32) (local.get 0)) (func (export "local-first-i64") (result i64) (local i64 i64) (local.get 0)) (func (export "local-first-f32") (result f32) (local f32 f32) (local.get 0)) (func (export "local-first-f64") (result f64) (local f64 f64) (local.get 0)) (func (export "local-second-i32") (result i32) (local i32 i32) (local.get 1)) (func (export "local-second-i64") (result i64) (local i64 i64) (local.get 1)) (func (export "local-second-f32") (result f32) (local f32 f32) (local.get 1)) (func (export "local-second-f64") (result f64) (local f64 f64) (local.get 1)) (func (export "local-mixed") (result f64) (local f32) (local $x i32) (local i64 i32) (local) (local f64 i32) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of parameters (func (export "param-first-i32") (param i32 i32) (result i32) (local.get 0)) (func (export "param-first-i64") (param i64 i64) (result i64) (local.get 0)) (func (export "param-first-f32") (param f32 f32) (result f32) (local.get 0)) (func (export "param-first-f64") (param f64 f64) (result f64) (local.get 0)) (func (export "param-second-i32") (param i32 i32) (result i32) (local.get 1)) (func (export "param-second-i64") (param i64 i64) (result i64) (local.get 1)) (func (export "param-second-f32") (param f32 f32) (result f32) (local.get 1)) (func (export "param-second-f64") (param f64 f64) (result f64) (local.get 1)) (func (export "param-mixed") (param f32 i32) (param) (param $x i64) (param i32 f64 i32) (result f64) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of result (func (export "empty")) (func (export "value-void") (call $dummy)) (func (export "value-i32") (result i32) (i32.const 77)) (func (export "value-i64") (result i64) (i64.const 7777)) (func (export "value-f32") (result f32) (f32.const 77.7)) (func (export "value-f64") (result f64) (f64.const 77.77)) (func (export "value-block-void") (block (call $dummy) (call $dummy))) (func (export "value-block-i32") (result i32) (block (result i32) (call $dummy) (i32.const 77)) ) (func (export "return-empty") (return)) (func (export "return-i32") (result i32) (return (i32.const 78))) (func (export "return-i64") (result i64) (return (i64.const 7878))) (func (export "return-f32") (result f32) (return (f32.const 78.7))) (func (export "return-f64") (result f64) (return (f64.const 78.78))) (func (export "return-block-i32") (result i32) (return (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "break-empty") (br 0)) (func (export "break-i32") (result i32) (br 0 (i32.const 79))) (func (export "break-i64") (result i64) (br 0 (i64.const 7979))) (func (export "break-f32") (result f32) (br 0 (f32.const 79.9))) (func (export "break-f64") (result f64) (br 0 (f64.const 79.79))) (func (export "break-block-i32") (result i32) (br 0 (block (result i32) (call $dummy) (i32.const 77))) ) (func (export "break-br_if-empty") (param i32) (br_if 0 (local.get 0)) ) (func (export "break-br_if-num") (param i32) (result i32) (drop (br_if 0 (i32.const 50) (local.get 0))) (i32.const 51) ) (func (export "break-br_table-empty") (param i32) (br_table 0 0 0 (local.get 0)) ) (func (export "break-br_table-num") (param i32) (result i32) (br_table 0 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (func (export "break-br_table-nested-empty") (param i32) (block (br_table 0 1 0 (local.get 0))) ) (func (export "break-br_table-nested-num") (param i32) (result i32) (i32.add (block (result i32) (br_table 0 1 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (i32.const 2) ) ) ;; Default initialization of locals (func (export "init-local-i32") (result i32) (local i32) (local.get 0)) (func (export "init-local-i64") (result i64) (local i64) (local.get 0)) (func (export "init-local-f32") (result f32) (local f32) (local.get 0)) (func (export "init-local-f64") (result f64) (local f64) (local.get 0)) ) (assert_return (invoke "type-use-1")) (assert_return (invoke "type-use-2") (i32.const 0)) (assert_return (invoke "type-use-3" (i32.const 1))) (assert_return (invoke "type-use-4" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "type-use-5") (i32.const 0)) (assert_return (invoke "type-use-6" (i32.const 1))) (assert_return (invoke "type-use-7" (i32.const 1) (f64.const 1) (i32.const 1)) (i32.const 0) ) (assert_return (invoke "local-first-i32") (i32.const 0)) (assert_return (invoke "local-first-i64") (i64.const 0)) (assert_return (invoke "local-first-f32") (f32.const 0)) (assert_return (invoke "local-first-f64") (f64.const 0)) (assert_return (invoke "local-second-i32") (i32.const 0)) (assert_return (invoke "local-second-i64") (i64.const 0)) (assert_return (invoke "local-second-f32") (f32.const 0)) (assert_return (invoke "local-second-f64") (f64.const 0)) (assert_return (invoke "local-mixed") (f64.const 0)) (assert_return (invoke "param-first-i32" (i32.const 2) (i32.const 3)) (i32.const 2) ) (assert_return (invoke "param-first-i64" (i64.const 2) (i64.const 3)) (i64.const 2) ) (assert_return (invoke "param-first-f32" (f32.const 2) (f32.const 3)) (f32.const 2) ) (assert_return (invoke "param-first-f64" (f64.const 2) (f64.const 3)) (f64.const 2) ) (assert_return (invoke "param-second-i32" (i32.const 2) (i32.const 3)) (i32.const 3) ) (assert_return (invoke "param-second-i64" (i64.const 2) (i64.const 3)) (i64.const 3) ) (assert_return (invoke "param-second-f32" (f32.const 2) (f32.const 3)) (f32.const 3) ) (assert_return (invoke "param-second-f64" (f64.const 2) (f64.const 3)) (f64.const 3) ) (assert_return (invoke "param-mixed" (f32.const 1) (i32.const 2) (i64.const 3) (i32.const 4) (f64.const 5.5) (i32.const 6) ) (f64.const 5.5) ) (assert_return (invoke "empty")) (assert_return (invoke "value-void")) (assert_return (invoke "value-i32") (i32.const 77)) (assert_return (invoke "value-i64") (i64.const 7777)) (assert_return (invoke "value-f32") (f32.const 77.7)) (assert_return (invoke "value-f64") (f64.const 77.77)) (assert_return (invoke "value-block-void")) (assert_return (invoke "value-block-i32") (i32.const 77)) (assert_return (invoke "return-empty")) (assert_return (invoke "return-i32") (i32.const 78)) (assert_return (invoke "return-i64") (i64.const 7878)) (assert_return (invoke "return-f32") (f32.const 78.7)) (assert_return (invoke "return-f64") (f64.const 78.78)) (assert_return (invoke "return-block-i32") (i32.const 77)) (assert_return (invoke "break-empty")) (assert_return (invoke "break-i32") (i32.const 79)) (assert_return (invoke "break-i64") (i64.const 7979)) (assert_return (invoke "break-f32") (f32.const 79.9)) (assert_return (invoke "break-f64") (f64.const 79.79)) (assert_return (invoke "break-block-i32") (i32.const 77)) (assert_return (invoke "break-br_if-empty" (i32.const 0))) (assert_return (invoke "break-br_if-empty" (i32.const 2))) (assert_return (invoke "break-br_if-num" (i32.const 0)) (i32.const 51)) (assert_return (invoke "break-br_if-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_table-empty" (i32.const 0))) (assert_return (invoke "break-br_table-empty" (i32.const 1))) (assert_return (invoke "break-br_table-empty" (i32.const 5))) (assert_return (invoke "break-br_table-empty" (i32.const -1))) (assert_return (invoke "break-br_table-num" (i32.const 0)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 10)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const -100)) (i32.const 50)) (assert_return (invoke "break-br_table-nested-empty" (i32.const 0))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 1))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 3))) (assert_return (invoke "break-br_table-nested-empty" (i32.const -2))) (assert_return (invoke "break-br_table-nested-num" (i32.const 0)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 1)) (i32.const 50) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 2)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const -3)) (i32.const 52) ) (assert_return (invoke "init-local-i32") (i32.const 0)) (assert_return (invoke "init-local-i64") (i64.const 0)) (assert_return (invoke "init-local-f32") (f32.const 0)) (assert_return (invoke "init-local-f64") (f64.const 0)) ;; Expansion of inline function types (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (type $t (func (param i32))) (func $i32->void (type 0)) ;; (param i32) (func $void->f64 (type 1) (f64.const 0)) ;; (result f64) (func $check (call $i32->void (i32.const 0)) (drop (call $void->f64)) ) ) (assert_invalid (module (func $f (result f64) (f64.const 0)) ;; adds implicit type definition (func $g (param i32)) ;; reuses explicit type definition (func $h (result f64) (f64.const 1)) ;; reuses implicit type definition (type $t (func (param i32))) (func (type 2)) ;; does not exist ) "unknown type" ) (module (type $sig (func)) (func $empty-sig-1) ;; should be assigned type $sig (func $complex-sig-1 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $empty-sig-2) ;; should be assigned type $sig (func $complex-sig-2 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-3 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-4 (param i64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-5 (param i64 i64 f64 i64 f64 i64 f32 i32)) (type $empty-sig-duplicate (func)) (type $complex-sig-duplicate (func (param i64 i64 f64 i64 f64 i64 f32 i32))) (table funcref (elem $complex-sig-3 $empty-sig-2 $complex-sig-1 $complex-sig-3 $empty-sig-1 $complex-sig-4 $complex-sig-5 ) ) (func (export "signature-explicit-reused") (call_indirect (type $sig) (i32.const 1)) (call_indirect (type $sig) (i32.const 4)) ) (func (export "signature-implicit-reused") ;; The implicit index 3 in this test depends on the function and ;; type definitions, and may need adapting if they change. (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 2) ) (call_indirect (type 3) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 3) ) ) (func (export "signature-explicit-duplicate") (call_indirect (type $empty-sig-duplicate) (i32.const 1)) ) (func (export "signature-implicit-duplicate") (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 5) ) (call_indirect (type $complex-sig-duplicate) (i64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 6) ) ) ) (assert_return (invoke "signature-explicit-reused")) (assert_return (invoke "signature-implicit-reused")) (assert_return (invoke "signature-explicit-duplicate")) (assert_return (invoke "signature-implicit-duplicate")) ;; Malformed type use (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (type $sig) (result i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (param i32) (result i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (type $sig) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (result i32) (param i32) (type $sig) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (i32.const 0))" ) "unexpected token" ) (assert_malformed (module quote "(type $sig (func))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (result i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32) (result i32)))" "(func (type $sig) (param i32) (i32.const 0))" ) "inline function type" ) (assert_malformed (module quote "(type $sig (func (param i32 i32) (result i32)))" "(func (type $sig) (param i32) (result i32) (unreachable))" ) "inline function type" ) ;; Invalid typing of locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of result (assert_invalid (module (func $type-multiple-result (result i32 i32) (unreachable))) "invalid result arity" ) (assert_invalid (module (type (func (result i32 i32))) (func $type-multiple-result (type 0) (unreachable)) ) "invalid result arity" ) (assert_invalid (module (func $type-empty-i32 (result i32))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64))) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-void (i32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result i32) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-empty-vs-num (result i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-num (result i32) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-num (result i32) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-num (result i32) (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-num (result i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-num (result i32) (return (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-num (result i32) (return (i64.const 1)) (return (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-void-vs-num (result i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-num (result i32) (br 0 (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-num (result i32) (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-num (result i32) (br 0 (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-num (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-num (result i32) (block (br 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-num (result i32) (block (br 1 (nop))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-num (result i32) (block (br 1 (i64.const 1))) (br 0 (i32.const 1)) )) "type mismatch" ) ;; Syntax errors (assert_malformed (module quote "(func (nop) (local i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (nop) (result i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (param i32))") "unexpected token" ) (assert_malformed (module quote "(func (local i32) (result i32) (local.get 0))") "unexpected token" ) (assert_malformed (module quote "(func (result i32) (param i32) (local.get 0))") "unexpected token" ) binaryen-version_108/test/spec/func_ptrs.wast000066400000000000000000000074771423707623100216000ustar00rootroot00000000000000(module (type (func)) ;; 0: void -> void (type $S (func)) ;; 1: void -> void (type (func (param))) ;; 2: void -> void (type (func (result i32))) ;; 3: void -> i32 (type (func (param) (result i32))) ;; 4: void -> i32 (type $T (func (param i32) (result i32))) ;; 5: i32 -> i32 (type $U (func (param i32))) ;; 6: i32 -> void (func $print (import "spectest" "print_i32") (type 6)) (func (type 0)) (func (type $S)) (func (export "one") (type 4) (i32.const 13)) (func (export "two") (type $T) (i32.add (local.get 0) (i32.const 1))) ;; Both signature and parameters are allowed (and required to match) ;; since this allows the naming of parameters. (func (export "three") (type $T) (param $a i32) (result i32) (i32.sub (local.get 0) (i32.const 2)) ) (func (export "four") (type $U) (call $print (local.get 0))) ) (assert_return (invoke "one") (i32.const 13)) (assert_return (invoke "two" (i32.const 13)) (i32.const 14)) (assert_return (invoke "three" (i32.const 13)) (i32.const 11)) (invoke "four" (i32.const 83)) (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) 0) (func)) "unknown table") (assert_invalid (module (table 1 funcref) (elem (i64.const 0))) "type mismatch" ) (assert_invalid (module (table 1 funcref) (elem (i32.ctz (i32.const 0)))) "constant expression required" ) (assert_invalid (module (table 1 funcref) (elem (nop))) "constant expression required" ) (assert_invalid (module (func (type 42))) "unknown type") (assert_invalid (module (import "spectest" "print_i32" (func (type 43)))) "unknown type") (module (type $T (func (param) (result i32))) (type $U (func (param) (result i32))) (table funcref (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func $t3 (type $T) (i32.const 3)) (func $u1 (type $U) (i32.const 4)) (func $u2 (type $U) (i32.const 5)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) (func (export "callu") (param $i i32) (result i32) (call_indirect (type $U) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callt" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callt" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callt" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callt" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callt" (i32.const 7)) "undefined element") (assert_trap (invoke "callt" (i32.const 100)) "undefined element") (assert_trap (invoke "callt" (i32.const -1)) "undefined element") (assert_return (invoke "callu" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 1)) (i32.const 2)) (assert_return (invoke "callu" (i32.const 2)) (i32.const 3)) (assert_return (invoke "callu" (i32.const 3)) (i32.const 4)) (assert_return (invoke "callu" (i32.const 4)) (i32.const 5)) (assert_return (invoke "callu" (i32.const 5)) (i32.const 1)) (assert_return (invoke "callu" (i32.const 6)) (i32.const 3)) (assert_trap (invoke "callu" (i32.const 7)) "undefined element") (assert_trap (invoke "callu" (i32.const 100)) "undefined element") (assert_trap (invoke "callu" (i32.const -1)) "undefined element") (module (type $T (func (result i32))) (table funcref (elem 0 1)) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func (export "callt") (param $i i32) (result i32) (call_indirect (type $T) (local.get $i)) ) ) (assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) (assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) binaryen-version_108/test/spec/get_local.wast000066400000000000000000000100351423707623100215060ustar00rootroot00000000000000;; Test `local.get` operator (module ;; Typing (func (export "type-local-i32") (result i32) (local i32) (local.get 0)) (func (export "type-local-i64") (result i64) (local i64) (local.get 0)) (func (export "type-local-f32") (result f32) (local f32) (local.get 0)) (func (export "type-local-f64") (result f64) (local f64) (local.get 0)) (func (export "type-param-i32") (param i32) (result i32) (local.get 0)) (func (export "type-param-i64") (param i64) (result i64) (local.get 0)) (func (export "type-param-f32") (param f32) (result f32) (local.get 0)) (func (export "type-param-f64") (param f64) (result f64) (local.get 0)) (func (export "type-mixed") (param i64 f32 f64 i32 i32) (local f32 i64 i64 f64) (drop (i64.eqz (local.get 0))) (drop (f32.neg (local.get 1))) (drop (f64.neg (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (i32.eqz (local.get 4))) (drop (f32.neg (local.get 5))) (drop (i64.eqz (local.get 6))) (drop (i64.eqz (local.get 7))) (drop (f64.neg (local.get 8))) ) ;; Reading (func (export "read") (param i64 f32 f64 i32 i32) (result f64) (local f32 i64 i64 f64) (local.set 5 (f32.const 5.5)) (local.set 6 (i64.const 6)) (local.set 8 (f64.const 8)) (f64.add (f64.convert_i64_u (local.get 0)) (f64.add (f64.promote_f32 (local.get 1)) (f64.add (local.get 2) (f64.add (f64.convert_i32_u (local.get 3)) (f64.add (f64.convert_i32_s (local.get 4)) (f64.add (f64.promote_f32 (local.get 5)) (f64.add (f64.convert_i64_u (local.get 6)) (f64.add (f64.convert_i64_u (local.get 7)) (local.get 8) ) ) ) ) ) ) ) ) ) ) (assert_return (invoke "type-local-i32") (i32.const 0)) (assert_return (invoke "type-local-i64") (i64.const 0)) (assert_return (invoke "type-local-f32") (f32.const 0)) (assert_return (invoke "type-local-f64") (f64.const 0)) (assert_return (invoke "type-param-i32" (i32.const 2)) (i32.const 2)) (assert_return (invoke "type-param-i64" (i64.const 3)) (i64.const 3)) (assert_return (invoke "type-param-f32" (f32.const 4.4)) (f32.const 4.4)) (assert_return (invoke "type-param-f64" (f64.const 5.5)) (f64.const 5.5)) (assert_return (invoke "type-mixed" (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) ) ) (assert_return (invoke "read" (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) ) (f64.const 34.8) ) ;; Invalid typing of access to locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of access to parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid local index (assert_invalid (module (func $unbound-local (local i32 i64) (local.get 3))) "unknown local" ) (assert_invalid (module (func $large-local (local i32 i64) (local.get 14324343))) "unknown local" ) (assert_invalid (module (func $unbound-param (param i32 i64) (local.get 2))) "unknown local" ) (assert_invalid (module (func $large-param (local i32 i64) (local.get 714324343))) "unknown local" ) (assert_invalid (module (func $unbound-mixed (param i32) (local i32 i64) (local.get 3))) "unknown local" ) (assert_invalid (module (func $large-mixed (param i64) (local i32 i64) (local.get 214324343))) "unknown local" ) binaryen-version_108/test/spec/globals.wast000066400000000000000000000311311423707623100212000ustar00rootroot00000000000000;; Test globals (module (global $a i32 (i32.const -2)) (global (;1;) f32 (f32.const -3)) (global (;2;) f64 (f64.const -4)) (global $b i64 (i64.const -5)) (global $x (mut i32) (i32.const -12)) (global (;5;) (mut f32) (f32.const -13)) (global (;6;) (mut f64) (f64.const -14)) (global $y (mut i64) (i64.const -15)) (func (export "get-a") (result i32) (global.get $a)) (func (export "get-b") (result i64) (global.get $b)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i64) (global.get $y)) (func (export "set-x") (param i32) (global.set $x (local.get 0))) (func (export "set-y") (param i64) (global.set $y (local.get 0))) (func (export "get-1") (result f32) (global.get 1)) (func (export "get-2") (result f64) (global.get 2)) (func (export "get-5") (result f32) (global.get 5)) (func (export "get-6") (result f64) (global.get 6)) (func (export "set-5") (param f32) (global.set 5 (local.get 0))) (func (export "set-6") (param f64) (global.set 6 (local.get 0))) ;; As the argument of control constructs and instructions (memory 1) (func $dummy) (func (export "as-select-first") (result i32) (select (global.get $x) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (result i32) (select (i32.const 2) (global.get $x) (i32.const 3)) ) (func (export "as-select-last") (result i32) (select (i32.const 2) (i32.const 3) (global.get $x)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (global.get $x) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (global.get $x) (call $dummy) ) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (call $dummy) (global.get $x) ) ) (func (export "as-if-condition") (result i32) (if (result i32) (global.get $x) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-if-then") (result i32) (if (result i32) (i32.const 1) (then (global.get $x)) (else (i32.const 2)) ) ) (func (export "as-if-else") (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (global.get $x)) ) ) (func (export "as-br_if-first") (result i32) (block (result i32) (br_if 0 (global.get $x) (i32.const 2)) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (result i32) (block (result i32) (br_if 0 (i32.const 2) (global.get $x)) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (result i32) (block (result i32) (global.get $x) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (result i32) (block (result i32) (i32.const 2) (global.get $x) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (call_indirect (type $check) (global.get $x) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (global.get $x) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (global.get $x) ) ) ) (func (export "as-store-first") (global.get $x) (i32.const 1) (i32.store) ) (func (export "as-store-last") (i32.const 0) (global.get $x) (i32.store) ) (func (export "as-load-operand") (result i32) (i32.load (global.get $x)) ) (func (export "as-memory.grow-value") (result i32) (memory.grow (global.get $x)) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (result i32) (call $f (global.get $x)) ) (func (export "as-return-value") (result i32) (global.get $x) (return) ) (func (export "as-drop-operand") (drop (global.get $x)) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (global.get $x))) ) (func (export "as-local.set-value") (param i32) (result i32) (local.set 0 (global.get $x)) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (global.get $x)) ) (func (export "as-global.set-value") (result i32) (global.set $x (global.get $x)) (global.get $x) ) (func (export "as-unary-operand") (result i32) (i32.eqz (global.get $x)) ) (func (export "as-binary-operand") (result i32) (i32.mul (global.get $x) (global.get $x) ) ) (func (export "as-compare-operand") (result i32) (i32.gt_u (global.get 0) (i32.const 1) ) ) ) (assert_return (invoke "get-a") (i32.const -2)) (assert_return (invoke "get-b") (i64.const -5)) (assert_return (invoke "get-x") (i32.const -12)) (assert_return (invoke "get-y") (i64.const -15)) (assert_return (invoke "get-1") (f32.const -3)) (assert_return (invoke "get-2") (f64.const -4)) (assert_return (invoke "get-5") (f32.const -13)) (assert_return (invoke "get-6") (f64.const -14)) (assert_return (invoke "set-x" (i32.const 6))) (assert_return (invoke "set-y" (i64.const 7))) (assert_return (invoke "set-5" (f32.const 8))) (assert_return (invoke "set-6" (f64.const 9))) (assert_return (invoke "get-x") (i32.const 6)) (assert_return (invoke "get-y") (i64.const 7)) (assert_return (invoke "get-5") (f32.const 8)) (assert_return (invoke "get-6") (f64.const 9)) (assert_return (invoke "as-select-first") (i32.const 6)) (assert_return (invoke "as-select-mid") (i32.const 2)) (assert_return (invoke "as-select-last") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 6)) (assert_return (invoke "as-loop-mid") (i32.const 6)) (assert_return (invoke "as-loop-last") (i32.const 6)) (assert_return (invoke "as-if-condition") (i32.const 2)) (assert_return (invoke "as-if-then") (i32.const 6)) (assert_return (invoke "as-if-else") (i32.const 6)) (assert_return (invoke "as-br_if-first") (i32.const 6)) (assert_return (invoke "as-br_if-last") (i32.const 2)) (assert_return (invoke "as-br_table-first") (i32.const 6)) (assert_return (invoke "as-br_table-last") (i32.const 2)) (assert_return (invoke "as-call_indirect-first") (i32.const 6)) (assert_return (invoke "as-call_indirect-mid") (i32.const 2)) (assert_trap (invoke "as-call_indirect-last") "undefined element") (assert_return (invoke "as-store-first")) (assert_return (invoke "as-store-last")) (assert_return (invoke "as-load-operand") (i32.const 1)) (assert_return (invoke "as-memory.grow-value") (i32.const 1)) (assert_return (invoke "as-call-value") (i32.const 6)) (assert_return (invoke "as-return-value") (i32.const 6)) (assert_return (invoke "as-drop-operand")) (assert_return (invoke "as-br-value") (i32.const 6)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 6)) (assert_return (invoke "as-global.set-value") (i32.const 6)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 36)) (assert_return (invoke "as-compare-operand") (i32.const 1)) (assert_invalid (module (global f32 (f32.const 0)) (func (global.set 0 (f32.const 1)))) "global is immutable" ) ;; mutable globals can be exported (module (global (mut f32) (f32.const 0)) (export "a" (global 0))) (module (global (export "a") (mut f32) (f32.const 0))) (assert_invalid (module (global f32 (f32.neg (f32.const 0)))) "constant expression required" ) (assert_invalid (module (global f32 (local.get 0))) "constant expression required" ) (assert_invalid (module (global f32 (f32.neg (f32.const 1)))) "constant expression required" ) (assert_invalid (module (global i32 (i32.const 0) (nop))) "constant expression required" ) (assert_invalid (module (global i32 (nop))) "constant expression required" ) (assert_invalid (module (global i32 (f32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (i32.const 0) (i32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (;empty instruction sequence;))) "type mismatch" ) (assert_invalid (module (global i32 (global.get 0))) "unknown global" ) (assert_invalid (module (global i32 (global.get 1)) (global i32 (i32.const 0))) "unknown global" ) (module (import "spectest" "global_i32" (global i32)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\02" ;; invalid mutability ) "invalid mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\98\80\80\80\00" ;; import section "\01" ;; length 1 "\08\73\70\65\63\74\65\73\74" ;; "spectest" "\0a\67\6c\6f\62\61\6c\5f\69\33\32" ;; "global_i32" "\03" ;; GlobalImport "\7f" ;; i32 "\ff" ;; invalid mutability ) "invalid mutability" ) (module (global i32 (i32.const 0)) ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\02" ;; invalid mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "invalid mutability" ) (assert_malformed (module binary "\00asm" "\01\00\00\00" "\06\86\80\80\80\00" ;; global section "\01" ;; length 1 "\7f" ;; i32 "\ff" ;; invalid mutability "\41\00" ;; i32.const 0 "\0b" ;; end ) "invalid mutability" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty (global.set $x) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-block (i32.const 0) (block (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-loop (i32.const 0) (loop (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-then (i32.const 0) (i32.const 0) (if (then (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br (i32.const 0) (block (br 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_if (i32.const 0) (block (br_if 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-br_table (i32.const 0) (block (br_table 0 (global.set $x))) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-return (return (global.set $x)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-select (select (global.set $x) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-global.set-value-empty-in-call (call 1 (global.set $x)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-global.set-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (global.set $x) (i32.const 0) ) ) ) ) "type mismatch" ) binaryen-version_108/test/spec/i31.wast000066400000000000000000000026741423707623100201630ustar00rootroot00000000000000(module (func (export "new") (param $i i32) (result (ref i31)) (i31.new (local.get $i)) ) (func (export "get_u") (param $i i32) (result i32) (i31.get_u (i31.new (local.get $i))) ) (func (export "get_s") (param $i i32) (result i32) (i31.get_s (i31.new (local.get $i))) ) ) (assert_return (invoke "get_u" (i32.const 0)) (i32.const 0)) (assert_return (invoke "get_u" (i32.const 100)) (i32.const 100)) (assert_return (invoke "get_u" (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "get_u" (i32.const 0x3fffffff)) (i32.const 0x3fffffff)) (assert_return (invoke "get_u" (i32.const 0x40000000)) (i32.const 0x40000000)) (assert_return (invoke "get_u" (i32.const 0x7fffffff)) (i32.const 0x7fffffff)) (assert_return (invoke "get_u" (i32.const 0xaaaaaaaa)) (i32.const 0x2aaaaaaa)) (assert_return (invoke "get_u" (i32.const 0xcaaaaaaa)) (i32.const 0x4aaaaaaa)) (assert_return (invoke "get_s" (i32.const 0)) (i32.const 0)) (assert_return (invoke "get_s" (i32.const 100)) (i32.const 100)) (assert_return (invoke "get_s" (i32.const -1)) (i32.const -1)) (assert_return (invoke "get_s" (i32.const 0x3fffffff)) (i32.const 0x3fffffff)) (assert_return (invoke "get_s" (i32.const 0x40000000)) (i32.const -0x40000000)) (assert_return (invoke "get_s" (i32.const 0x7fffffff)) (i32.const -1)) (assert_return (invoke "get_s" (i32.const 0xaaaaaaaa)) (i32.const 0x2aaaaaaa)) (assert_return (invoke "get_s" (i32.const 0xcaaaaaaa)) (i32.const 0xcaaaaaaa)) binaryen-version_108/test/spec/i32.load32_s.fail.wast000066400000000000000000000001211423707623100224640ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result i32) (i32.load32_s (local.get 0)))) binaryen-version_108/test/spec/i32.load32_u.fail.wast000066400000000000000000000001211423707623100224660ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result i32) (i32.load32_u (local.get 0)))) binaryen-version_108/test/spec/i32.load64_s.fail.wast000066400000000000000000000001211423707623100224710ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result i32) (i32.load64_s (local.get 0)))) binaryen-version_108/test/spec/i32.load64_u.fail.wast000066400000000000000000000001211423707623100224730ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result i32) (i32.load64_u (local.get 0)))) binaryen-version_108/test/spec/i32.store32.fail.wast000066400000000000000000000001351423707623100223640ustar00rootroot00000000000000(module (memory 1) (func (param i32) (param i32) (i32.store32 (local.get 0) (local.get 1)))) binaryen-version_108/test/spec/i32.store64.fail.wast000066400000000000000000000001351423707623100223710ustar00rootroot00000000000000(module (memory 1) (func (param i32) (param i64) (i32.store64 (local.get 0) (local.get 1)))) binaryen-version_108/test/spec/i32.wast000066400000000000000000001300721423707623100201560ustar00rootroot00000000000000;; i32 operations (module (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i32) (param $y i32) (result i32) (i32.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i32) (param $y i32) (result i32) (i32.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i32) (param $y i32) (result i32) (i32.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i32) (param $y i32) (result i32) (i32.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i32) (param $y i32) (result i32) (i32.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i32) (param $y i32) (result i32) (i32.and (local.get $x) (local.get $y))) (func (export "or") (param $x i32) (param $y i32) (result i32) (i32.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i32) (param $y i32) (result i32) (i32.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i32) (param $y i32) (result i32) (i32.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i32) (param $y i32) (result i32) (i32.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i32) (param $y i32) (result i32) (i32.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i32) (param $y i32) (result i32) (i32.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i32) (param $y i32) (result i32) (i32.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i32) (result i32) (i32.clz (local.get $x))) (func (export "ctz") (param $x i32) (result i32) (i32.ctz (local.get $x))) (func (export "popcnt") (param $x i32) (result i32) (i32.popcnt (local.get $x))) (func (export "eqz") (param $x i32) (result i32) (i32.eqz (local.get $x))) (func (export "eq") (param $x i32) (param $y i32) (result i32) (i32.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i32) (param $y i32) (result i32) (i32.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i32) (param $y i32) (result i32) (i32.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i32) (param $y i32) (result i32) (i32.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i32) (param $y i32) (result i32) (i32.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i32) (param $y i32) (result i32) (i32.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i32) (param $y i32) (result i32) (i32.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i32) (param $y i32) (result i32) (i32.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i32) (param $y i32) (result i32) (i32.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i32) (param $y i32) (result i32) (i32.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "add" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "add" (i32.const -1) (i32.const -1)) (i32.const -2)) (assert_return (invoke "add" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "add" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "add" (i32.const 0x3fffffff) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "sub" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "sub" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "sub" (i32.const 0x3fffffff) (i32.const -1)) (i32.const 0x40000000)) (assert_return (invoke "mul" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "mul" (i32.const 0x10000000) (i32.const 4096)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "mul" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000001)) (assert_return (invoke "mul" (i32.const 0x01234567) (i32.const 0x76543210)) (i32.const 0x358e7470)) (assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_trap (invoke "div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0xc0000000)) (assert_return (invoke "div_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0xffdf3b65)) (assert_return (invoke "div_s" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const 2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 5) (i32.const -2)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -5) (i32.const -2)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const 3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const 7) (i32.const -3)) (i32.const -2)) (assert_return (invoke "div_s" (i32.const -7) (i32.const -3)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_s" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0x40000000)) (assert_return (invoke "div_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8fef)) (assert_return (invoke "div_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0x20c49b)) (assert_return (invoke "div_u" (i32.const 5) (i32.const 2)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const -5) (i32.const 2)) (i32.const 0x7ffffffd)) (assert_return (invoke "div_u" (i32.const 5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const -5) (i32.const -2)) (i32.const 0)) (assert_return (invoke "div_u" (i32.const 7) (i32.const 3)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 11) (i32.const 5)) (i32.const 2)) (assert_return (invoke "div_u" (i32.const 17) (i32.const 7)) (i32.const 2)) (assert_trap (invoke "rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const -647)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const 2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 5) (i32.const -2)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -5) (i32.const -2)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const 3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 7) (i32.const -3)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const -7) (i32.const -3)) (i32.const -1)) (assert_return (invoke "rem_s" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_s" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_trap (invoke "rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) (assert_return (invoke "rem_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8001)) (assert_return (invoke "rem_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 649)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 5) (i32.const -2)) (i32.const 5)) (assert_return (invoke "rem_u" (i32.const -5) (i32.const -2)) (i32.const -5)) (assert_return (invoke "rem_u" (i32.const 7) (i32.const 3)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 11) (i32.const 5)) (i32.const 1)) (assert_return (invoke "rem_u" (i32.const 17) (i32.const 7)) (i32.const 3)) (assert_return (invoke "and" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "and" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "and" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x7fffffff)) (assert_return (invoke "and" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xf0f0f0f0)) (assert_return (invoke "and" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "or" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "or" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "or" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "or" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xffffffff)) (assert_return (invoke "or" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "xor" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "xor" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "xor" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "xor" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x80000000)) (i32.const 0x7fffffff)) (assert_return (invoke "xor" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "xor" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0xffffffff) (i32.const 1)) (i32.const 0xfffffffe)) (assert_return (invoke "shl" (i32.const 0x80000000) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shl" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shl" (i32.const 1) (i32.const 33)) (i32.const 2)) (assert_return (invoke "shl" (i32.const 1) (i32.const -1)) (i32.const 0x80000000)) (assert_return (invoke "shl" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 1)) (i32.const 0xc0000000)) (assert_return (invoke "shr_s" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 31)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 33)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const -1)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x7fffffff)) (i32.const -1)) (assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 1)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x40000000)) (assert_return (invoke "shr_u" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 33)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 32)) (i32.const -1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 33)) (i32.const 0x7fffffff)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 0xabcd9876) (i32.const 1)) (i32.const 0x579b30ed)) (assert_return (invoke "rotl" (i32.const 0xfe00dc00) (i32.const 4)) (i32.const 0xe00dc00f)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00100000)) (assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x183a5c76)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0x579beed3)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) (assert_return (invoke "rotl" (i32.const 0x80000000) (i32.const 1)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 1)) (i32.const 0x80000000)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const -1) (i32.const 1)) (i32.const -1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 32)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 0xff00cc00) (i32.const 1)) (i32.const 0x7f806600)) (assert_return (invoke "rotr" (i32.const 0x00080000) (i32.const 4)) (i32.const 0x00008000)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00000400)) (assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x1d860e97)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0xe6fbb4d5)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 31)) (i32.const 2)) (assert_return (invoke "rotr" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) (assert_return (invoke "clz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "clz" (i32.const 0x00008000)) (i32.const 16)) (assert_return (invoke "clz" (i32.const 0xff)) (i32.const 24)) (assert_return (invoke "clz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "clz" (i32.const 1)) (i32.const 31)) (assert_return (invoke "clz" (i32.const 2)) (i32.const 30)) (assert_return (invoke "clz" (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ctz" (i32.const -1)) (i32.const 0)) (assert_return (invoke "ctz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "ctz" (i32.const 0x00008000)) (i32.const 15)) (assert_return (invoke "ctz" (i32.const 0x00010000)) (i32.const 16)) (assert_return (invoke "ctz" (i32.const 0x80000000)) (i32.const 31)) (assert_return (invoke "ctz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const -1)) (i32.const 32)) (assert_return (invoke "popcnt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "popcnt" (i32.const 0x00008000)) (i32.const 1)) (assert_return (invoke "popcnt" (i32.const 0x80008000)) (i32.const 2)) (assert_return (invoke "popcnt" (i32.const 0x7fffffff)) (i32.const 31)) (assert_return (invoke "popcnt" (i32.const 0xAAAAAAAA)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0x55555555)) (i32.const 16)) (assert_return (invoke "popcnt" (i32.const 0xDEADBEEF)) (i32.const 24)) (assert_return (invoke "eqz" (i32.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i32.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "eq" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ne" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) (assert_invalid (module (func $type-unary-operand-empty (i32.eqz) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-block (i32.const 0) (block (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-loop (i32.const 0) (loop (i32.eqz) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-if (i32.const 0) (i32.const 0) (if (then (i32.eqz) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.eqz))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br (i32.const 0) (block (br 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.eqz) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.eqz)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-return (return (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-select (select (i32.eqz) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-call (call 1 (i32.eqz)) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-unary-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.eqz) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.set (local i32) (local.set 0 (i32.eqz)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-unary-operand-empty-in-global.set (global.set $x (i32.eqz)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-memory.grow (memory.grow (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-unary-operand-empty-in-load (i32.load (i32.eqz)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-unary-operand-empty-in-store (i32.store (i32.eqz) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty (i32.const 0) (i32.add) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.add) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-if (i32.const 0) (i32.const 0) (i32.const 0) (if (i32.add) (then (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-if (i32.const 0) (i32.const 0) (if (i32.const 0) (then (i32.add)) (else (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-else (i32.const 0) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add) (i32.const 0))) (drop) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.add))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.add) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.add)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-return (return (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-return (return (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-select (select (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-select (select (i32.const 0) (i32.add) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-call (call 1 (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-call (call 1 (i32.const 0) (i32.add)) (drop) ) (func (param i32 i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-1st-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-binary-2nd-operand-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.add) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.set (local i32) (local.set 0 (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.set (local i32) (local.set 0 (i32.const 0) (i32.add)) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-empty-in-local.tee (local i32) (local.tee 0 (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-1st-operand-empty-in-global.set (global.set $x (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-binary-2nd-operand-empty-in-global.set (global.set $x (i32.const 0) (i32.add)) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-memory.grow (memory.grow (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-memory.grow (memory.grow (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-1st-operand-empty-in-load (i32.load (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-binary-2nd-operand-empty-in-load (i32.load (i32.const 0) (i32.add)) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-1st-operand-empty-in-store (i32.store (i32.add) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-binary-2nd-operand-empty-in-store (i32.store (i32.const 1) (i32.add) (i32.const 0)) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (func (result i32) (i32.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.and (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.div_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.or (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rem_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.rotr (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.shr_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.xor (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eqz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.clz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ctz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.popcnt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ge_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.gt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.le_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.lt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i32) (i32.ne (i64.const 0) (f32.const 0)))) "type mismatch") binaryen-version_108/test/spec/i64.load64_s.fail.wast000066400000000000000000000001211423707623100224760ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result i64) (i64.load64_s (local.get 0)))) binaryen-version_108/test/spec/i64.load64_u.fail.wast000066400000000000000000000001211423707623100225000ustar00rootroot00000000000000(module (memory 1) (func (param i32) (result i64) (i64.load64_u (local.get 0)))) binaryen-version_108/test/spec/i64.store64.fail.wast000066400000000000000000000001351423707623100223760ustar00rootroot00000000000000(module (memory 1) (func (param i32) (param i64) (i64.store64 (local.get 0) (local.get 1)))) binaryen-version_108/test/spec/i64.wast000066400000000000000000001107371423707623100201710ustar00rootroot00000000000000;; i64 operations (module (func (export "add") (param $x i64) (param $y i64) (result i64) (i64.add (local.get $x) (local.get $y))) (func (export "sub") (param $x i64) (param $y i64) (result i64) (i64.sub (local.get $x) (local.get $y))) (func (export "mul") (param $x i64) (param $y i64) (result i64) (i64.mul (local.get $x) (local.get $y))) (func (export "div_s") (param $x i64) (param $y i64) (result i64) (i64.div_s (local.get $x) (local.get $y))) (func (export "div_u") (param $x i64) (param $y i64) (result i64) (i64.div_u (local.get $x) (local.get $y))) (func (export "rem_s") (param $x i64) (param $y i64) (result i64) (i64.rem_s (local.get $x) (local.get $y))) (func (export "rem_u") (param $x i64) (param $y i64) (result i64) (i64.rem_u (local.get $x) (local.get $y))) (func (export "and") (param $x i64) (param $y i64) (result i64) (i64.and (local.get $x) (local.get $y))) (func (export "or") (param $x i64) (param $y i64) (result i64) (i64.or (local.get $x) (local.get $y))) (func (export "xor") (param $x i64) (param $y i64) (result i64) (i64.xor (local.get $x) (local.get $y))) (func (export "shl") (param $x i64) (param $y i64) (result i64) (i64.shl (local.get $x) (local.get $y))) (func (export "shr_s") (param $x i64) (param $y i64) (result i64) (i64.shr_s (local.get $x) (local.get $y))) (func (export "shr_u") (param $x i64) (param $y i64) (result i64) (i64.shr_u (local.get $x) (local.get $y))) (func (export "rotl") (param $x i64) (param $y i64) (result i64) (i64.rotl (local.get $x) (local.get $y))) (func (export "rotr") (param $x i64) (param $y i64) (result i64) (i64.rotr (local.get $x) (local.get $y))) (func (export "clz") (param $x i64) (result i64) (i64.clz (local.get $x))) (func (export "ctz") (param $x i64) (result i64) (i64.ctz (local.get $x))) (func (export "popcnt") (param $x i64) (result i64) (i64.popcnt (local.get $x))) (func (export "eqz") (param $x i64) (result i32) (i64.eqz (local.get $x))) (func (export "eq") (param $x i64) (param $y i64) (result i32) (i64.eq (local.get $x) (local.get $y))) (func (export "ne") (param $x i64) (param $y i64) (result i32) (i64.ne (local.get $x) (local.get $y))) (func (export "lt_s") (param $x i64) (param $y i64) (result i32) (i64.lt_s (local.get $x) (local.get $y))) (func (export "lt_u") (param $x i64) (param $y i64) (result i32) (i64.lt_u (local.get $x) (local.get $y))) (func (export "le_s") (param $x i64) (param $y i64) (result i32) (i64.le_s (local.get $x) (local.get $y))) (func (export "le_u") (param $x i64) (param $y i64) (result i32) (i64.le_u (local.get $x) (local.get $y))) (func (export "gt_s") (param $x i64) (param $y i64) (result i32) (i64.gt_s (local.get $x) (local.get $y))) (func (export "gt_u") (param $x i64) (param $y i64) (result i32) (i64.gt_u (local.get $x) (local.get $y))) (func (export "ge_s") (param $x i64) (param $y i64) (result i32) (i64.ge_s (local.get $x) (local.get $y))) (func (export "ge_u") (param $x i64) (param $y i64) (result i32) (i64.ge_u (local.get $x) (local.get $y))) ) (assert_return (invoke "add" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "add" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "add" (i64.const -1) (i64.const -1)) (i64.const -2)) (assert_return (invoke "add" (i64.const -1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "add" (i64.const 0x3fffffff) (i64.const 1)) (i64.const 0x40000000)) (assert_return (invoke "sub" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "sub" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "sub" (i64.const 0x3fffffff) (i64.const -1)) (i64.const 0x40000000)) (assert_return (invoke "mul" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "mul" (i64.const 0x1000000000000000) (i64.const 4096)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0)) (assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000001)) (assert_return (invoke "mul" (i64.const 0x0123456789abcdef) (i64.const 0xfedcba9876543210)) (i64.const 0x2236d88fe5618cf0)) (assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_trap (invoke "div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_s" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_s" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0xc000000000000000)) (assert_return (invoke "div_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0xffdf3b645a1cac09)) (assert_return (invoke "div_s" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const 2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 5) (i64.const -2)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -5) (i64.const -2)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const 3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const 7) (i64.const -3)) (i64.const -2)) (assert_return (invoke "div_s" (i64.const -7) (i64.const -3)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_s" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "div_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "div_u" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0x4000000000000000)) (assert_return (invoke "div_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x8ff00fef)) (assert_return (invoke "div_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0x20c49ba5e353f7)) (assert_return (invoke "div_u" (i64.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const -5) (i64.const 2)) (i64.const 0x7ffffffffffffffd)) (assert_return (invoke "div_u" (i64.const 5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const -5) (i64.const -2)) (i64.const 0)) (assert_return (invoke "div_u" (i64.const 7) (i64.const 3)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 11) (i64.const 5)) (i64.const 2)) (assert_return (invoke "div_u" (i64.const 17) (i64.const 7)) (i64.const 2)) (assert_trap (invoke "rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_s" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_s" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const -807)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const 2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 5) (i64.const -2)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -5) (i64.const -2)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const 3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 7) (i64.const -3)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const -7) (i64.const -3)) (i64.const -1)) (assert_return (invoke "rem_s" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_s" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_trap (invoke "rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "rem_u" (i64.const 0) (i64.const 0)) "integer divide by zero") (assert_return (invoke "rem_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const -1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) (assert_return (invoke "rem_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x80000001)) (assert_return (invoke "rem_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 809)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const 2)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 5) (i64.const -2)) (i64.const 5)) (assert_return (invoke "rem_u" (i64.const -5) (i64.const -2)) (i64.const -5)) (assert_return (invoke "rem_u" (i64.const 7) (i64.const 3)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 11) (i64.const 5)) (i64.const 1)) (assert_return (invoke "rem_u" (i64.const 17) (i64.const 7)) (i64.const 3)) (assert_return (invoke "and" (i64.const 1) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0) (i64.const 1)) (i64.const 0)) (assert_return (invoke "and" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "and" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "and" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xf0f0f0f0)) (assert_return (invoke "and" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "or" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "or" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "or" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "or" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "or" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xffffffff)) (assert_return (invoke "or" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) (assert_return (invoke "xor" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "xor" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0) (i64.const 0)) (i64.const 0)) (assert_return (invoke "xor" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "xor" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "xor" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "xor" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0x0f0f0f0f)) (assert_return (invoke "xor" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0xffffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) (assert_return (invoke "shl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shl" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shl" (i64.const 1) (i64.const 65)) (i64.const 2)) (assert_return (invoke "shl" (i64.const 1) (i64.const -1)) (i64.const 0x8000000000000000)) (assert_return (invoke "shl" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0xc000000000000000)) (assert_return (invoke "shr_s" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 65)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const -1)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const -1)) (assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 1)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x4000000000000000)) (assert_return (invoke "shr_u" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 65)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const -1)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 64)) (i64.const -1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 65)) (i64.const 0x7fffffffffffffff)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const -1)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 1)) (i64.const 2)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotl" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x579b30ec048d159d)) (assert_return (invoke "rotl" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0xe000000dc000000f)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x013579a2469deacf)) (assert_return (invoke "rotl" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0xcf013579ae529dea)) (assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x55e891a77ab3c04e)) (assert_return (invoke "rotl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 0)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const -1) (i64.const 1)) (i64.const -1)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 64)) (i64.const 1)) (assert_return (invoke "rotr" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x55e6cc3b01234567)) (assert_return (invoke "rotr" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0x0fe000000dc00000)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x6891a77ab3c04d5e)) (assert_return (invoke "rotr" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0x94a77ab3c04d5e6b)) (assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x57a2469deacf0139)) (assert_return (invoke "rotr" (i64.const 1) (i64.const 63)) (i64.const 2)) (assert_return (invoke "rotr" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) (assert_return (invoke "clz" (i64.const 0xffffffffffffffff)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "clz" (i64.const 0x00008000)) (i64.const 48)) (assert_return (invoke "clz" (i64.const 0xff)) (i64.const 56)) (assert_return (invoke "clz" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "clz" (i64.const 1)) (i64.const 63)) (assert_return (invoke "clz" (i64.const 2)) (i64.const 62)) (assert_return (invoke "clz" (i64.const 0x7fffffffffffffff)) (i64.const 1)) (assert_return (invoke "ctz" (i64.const -1)) (i64.const 0)) (assert_return (invoke "ctz" (i64.const 0)) (i64.const 64)) (assert_return (invoke "ctz" (i64.const 0x00008000)) (i64.const 15)) (assert_return (invoke "ctz" (i64.const 0x00010000)) (i64.const 16)) (assert_return (invoke "ctz" (i64.const 0x8000000000000000)) (i64.const 63)) (assert_return (invoke "ctz" (i64.const 0x7fffffffffffffff)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const -1)) (i64.const 64)) (assert_return (invoke "popcnt" (i64.const 0)) (i64.const 0)) (assert_return (invoke "popcnt" (i64.const 0x00008000)) (i64.const 1)) (assert_return (invoke "popcnt" (i64.const 0x8000800080008000)) (i64.const 4)) (assert_return (invoke "popcnt" (i64.const 0x7fffffffffffffff)) (i64.const 63)) (assert_return (invoke "popcnt" (i64.const 0xAAAAAAAA55555555)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0x99999999AAAAAAAA)) (i64.const 32)) (assert_return (invoke "popcnt" (i64.const 0xDEADBEEFDEADBEEF)) (i64.const 48)) (assert_return (invoke "eqz" (i64.const 0)) (i32.const 1)) (assert_return (invoke "eqz" (i64.const 1)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eqz" (i64.const 0xffffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "eq" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "eq" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "eq" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ne" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ne" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ne" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "lt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 1) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) (assert_return (invoke "le_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "gt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) (assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const -1)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 1) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) (assert_return (invoke "ge_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) (assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) ;; Type check (assert_invalid (module (func (result i64) (i64.add (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.and (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.div_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.mul (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.or (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rem_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.rotr (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.shr_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.sub (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.xor (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eqz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.clz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ctz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.popcnt (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (result i64) (i64.ne (i32.const 0) (f32.const 0)))) "type mismatch") binaryen-version_108/test/spec/if.wast000066400000000000000000000637541423707623100201730ustar00rootroot00000000000000;; Test `if` operator (module ;; Auxiliary definition (memory 1) (func $dummy) (func (export "empty") (param i32) (if (local.get 0) (then)) (if (local.get 0) (then) (else)) (if $l (local.get 0) (then)) (if $l (local.get 0) (then) (else)) ) (func (export "singular") (param i32) (result i32) (if (local.get 0) (then (nop))) (if (local.get 0) (then (nop)) (else (nop))) (if (result i32) (local.get 0) (then (i32.const 7)) (else (i32.const 8))) ) (func (export "multi") (param i32) (result i32) (if (local.get 0) (then (call $dummy) (call $dummy) (call $dummy))) (if (local.get 0) (then) (else (call $dummy) (call $dummy) (call $dummy))) (if (result i32) (local.get 0) (then (call $dummy) (call $dummy) (i32.const 8)) (else (call $dummy) (call $dummy) (i32.const 9)) ) ) (func (export "nested") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 9)) (else (call $dummy) (i32.const 10)) ) ) (else (if (local.get 1) (then (call $dummy) (block) (nop))) (if (local.get 1) (then) (else (call $dummy) (block) (nop))) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 10)) (else (call $dummy) (i32.const 11)) ) ) ) ) (func (export "as-select-first") (param i32) (result i32) (select (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 3) ) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 3) ) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) (call $dummy) ) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (call $dummy) ) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-if-condition") (param i32) (result i32) (if (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) (then (call $dummy) (i32.const 2)) (else (call $dummy) (i32.const 3)) ) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) ) (return (i32.const 3)) ) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) (return (i32.const 3)) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (br_table 0 0) ) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (br_table 0 0) ) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 2) (i32.const 0) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) ) ) ) (func (export "as-store-first") (param i32) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.const 2) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 2) (if (result i32) (local.get 0) (then (call $dummy) (i32.const 1)) (else (call $dummy) (i32.const 0)) ) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-return-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0))) (return) ) (func (export "as-drop-operand") (param i32) (drop (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (if (result i32) (local.get 0) (then (i32.const 1)) (else (i32.const 0)) ) ) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (if (result i32) (local.get 0) (then (i32.const 11)) (else (i32.const 10)) ) ) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.ctz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const -13)) ) ) ) (func (export "as-binary-operand") (param i32 i32) (result i32) (i32.mul (if (result i32) (local.get 0) (then (call $dummy) (i32.const 3)) (else (call $dummy) (i32.const -3)) ) (if (result i32) (local.get 1) (then (call $dummy) (i32.const 4)) (else (call $dummy) (i32.const -5)) ) ) ) (func (export "as-test-operand") (param i32) (result i32) (i32.eqz (if (result i32) (local.get 0) (then (call $dummy) (i32.const 13)) (else (call $dummy) (i32.const 0)) ) ) ) (func (export "as-compare-operand") (param i32 i32) (result i32) (f32.gt (if (result f32) (local.get 0) (then (call $dummy) (f32.const 3)) (else (call $dummy) (f32.const -3)) ) (if (result f32) (local.get 1) (then (call $dummy) (f32.const 4)) (else (call $dummy) (f32.const -4)) ) ) ) (func (export "break-bare") (result i32) (if (i32.const 1) (then (br 0) (unreachable))) (if (i32.const 1) (then (br 0) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br 0) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_if 0 (i32.const 1)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable))) (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable)) (else (unreachable))) (if (i32.const 0) (then (unreachable)) (else (br_table 0 (i32.const 0)) (unreachable))) (i32.const 19) ) (func (export "break-value") (param i32) (result i32) (if (result i32) (local.get 0) (then (br 0 (i32.const 18)) (i32.const 19)) (else (br 0 (i32.const 21)) (i32.const 20)) ) ) (func (export "effects") (param i32) (result i32) (local i32) (if (block (result i32) (local.set 1 (i32.const 1)) (local.get 0)) (then (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (local.set 1 (i32.sub (local.get 1) (i32.const 5))) (local.set 1 (i32.mul (local.get 1) (i32.const 7))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 100))) ) (else (local.set 1 (i32.mul (local.get 1) (i32.const 5))) (local.set 1 (i32.sub (local.get 1) (i32.const 7))) (local.set 1 (i32.mul (local.get 1) (i32.const 3))) (br 0) (local.set 1 (i32.mul (local.get 1) (i32.const 1000))) ) ) (local.get 1) ) ) (assert_return (invoke "empty" (i32.const 0))) (assert_return (invoke "empty" (i32.const 1))) (assert_return (invoke "empty" (i32.const 100))) (assert_return (invoke "empty" (i32.const -2))) (assert_return (invoke "singular" (i32.const 0)) (i32.const 8)) (assert_return (invoke "singular" (i32.const 1)) (i32.const 7)) (assert_return (invoke "singular" (i32.const 10)) (i32.const 7)) (assert_return (invoke "singular" (i32.const -10)) (i32.const 7)) (assert_return (invoke "multi" (i32.const 0)) (i32.const 9)) (assert_return (invoke "multi" (i32.const 1)) (i32.const 8)) (assert_return (invoke "multi" (i32.const 13)) (i32.const 8)) (assert_return (invoke "multi" (i32.const -5)) (i32.const 8)) (assert_return (invoke "nested" (i32.const 0) (i32.const 0)) (i32.const 11)) (assert_return (invoke "nested" (i32.const 1) (i32.const 0)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 0) (i32.const 1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 3) (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -100)) (i32.const 10)) (assert_return (invoke "nested" (i32.const 10) (i32.const 10)) (i32.const 9)) (assert_return (invoke "nested" (i32.const 0) (i32.const -1)) (i32.const 10)) (assert_return (invoke "nested" (i32.const -111) (i32.const -2)) (i32.const 9)) (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-if-condition" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-condition" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-last" (i32.const 0)) (i32.const 2)) (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const -1)) (i32.const 0)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 0)) (i32.const 15)) (assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 1)) (i32.const -12)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 0)) (i32.const -15)) (assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 1)) (i32.const 12)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 1)) (i32.const 0)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value" (i32.const 1)) (i32.const 18)) (assert_return (invoke "break-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "effects" (i32.const 1)) (i32.const -14)) (assert_return (invoke "effects" (i32.const 0)) (i32.const -6)) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then) (else)))) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void (if (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-void (if (i32.const 1) (then (i32.const 1)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-num-vs-void (if (i32.const 1) (then) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-void (if (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then) (else)) )) "type mismatch" ) (assert_invalid (module (func $type-no-else-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 0)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (nop)) (else (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-both-different-value-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i64.const 1)) (else (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-then-value-unreached-select (result i32) (if (result i64) (i32.const 0) (then (select (unreachable) (unreachable) (unreachable))) (else (i64.const 0)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (i64.const 0)) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-value-unreached-select (result i32) (if (result i64) (i32.const 1) (then (select (unreachable) (unreachable) (unreachable))) (else (select (unreachable) (unreachable) (unreachable))) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0)) (else (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-last-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-empty-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (nop)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-void-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (nop)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-then-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (br 0 (i64.const 1)) (i32.const 1)) (else (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-else-break-num-vs-num (result i32) (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0 (i64.const 1)) (i32.const 1)) ) )) "type mismatch" ) (assert_invalid (module (func $type-condition-empty (if (then)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-block (i32.const 0) (block (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-loop (i32.const 0) (loop (if (then))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-then (i32.const 0) (i32.const 0) (if (then (if (then)))) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (if (then)) (i32.const 0))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br (i32.const 0) (block (br 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_if (i32.const 0) (block (br_if 0 (if(then)) (i32.const 1)) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-br_table (i32.const 0) (block (br_table 0 (if(then))) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-return (return (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-select (select (if(then)) (i32.const 1) (i32.const 2)) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-call (call 1 (if(then))) (drop) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-condition-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (if(then)) (i32.const 0) ) (drop) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.set (local i32) (local.set 0 (if(then))) (local.get 0) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-condition-empty-in-local.tee (local i32) (local.tee 0 (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-condition-empty-in-global.set (global.set $x (if(then))) (global.get $x) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-memory.grow (memory.grow (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-condition-empty-in-load (i32.load (if(then))) (drop) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-condition-empty-in-store (i32.store (if(then)) (i32.const 1)) ) ) "type mismatch" ) (assert_malformed (module quote "(func i32.const 0 if end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if else $l1 end $l2)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $a end $l)") "mismatching label" ) (assert_malformed (module quote "(func i32.const 0 if $a else $l end $l)") "mismatching label" )binaryen-version_108/test/spec/import-after-func.fail.wast000066400000000000000000000000521423707623100240270ustar00rootroot00000000000000(module (func) (import "" "" (memory 0))) binaryen-version_108/test/spec/import-after-global.fail.wast000066400000000000000000000000671423707623100243420ustar00rootroot00000000000000(module (global i64) (import "" "" (table 0 funcref))) binaryen-version_108/test/spec/import-after-memory.fail.wast000066400000000000000000000000601423707623100244030ustar00rootroot00000000000000(module (memory 0) (import "" "" (global i32))) binaryen-version_108/test/spec/import-after-table.fail.wast000066400000000000000000000000611423707623100241630ustar00rootroot00000000000000(module (table 0 funcref) (import "" "" (func))) binaryen-version_108/test/spec/imports.wast000066400000000000000000000517151423707623100212640ustar00rootroot00000000000000;; Auxiliary module to import from (module (func (export "func")) (func (export "func-i32") (param i32)) (func (export "func-f32") (param f32)) (func (export "func->i32") (result i32) (i32.const 22)) (func (export "func->f32") (result f32) (f32.const 11)) (func (export "func-i32->i32") (param i32) (result i32) (local.get 0)) (func (export "func-i64->i64") (param i64) (result i64) (local.get 0)) (global (export "global-i32") i32 (i32.const 55)) (global (export "global-f32") f32 (f32.const 44)) ;;; FIXME: Exporting a mutable global is currently not supported. Make mutable ;;; when support is added. (global (export "global-mut-i64") i64 (i64.const 66)) (table (export "table-10-inf") 10 funcref) (table (export "table-10-20") 10 20 funcref) (memory (export "memory-2-inf") 2) ;; Multiple memories are not yet supported ;; (memory (export "memory-2-4") 2 4) ) (register "test") ;; Functions (module (type $func_i32 (func (param i32))) (type $func_i64 (func (param i64))) (type $func_f32 (func (param f32))) (type $func_f64 (func (param f64))) (import "spectest" "print_i32" (func (param i32))) ;; JavaScript can't handle i64 yet. ;; (func (import "spectest" "print_i64") (param i64)) (import "spectest" "print_i32" (func $print_i32 (param i32))) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "print_i64" (func $print_i64 (param i64))) (import "spectest" "print_f32" (func $print_f32 (param f32))) (import "spectest" "print_f64" (func $print_f64 (param f64))) (import "spectest" "print_i32_f32" (func $print_i32_f32 (param i32 f32))) (import "spectest" "print_f64_f64" (func $print_f64_f64 (param f64 f64))) (func $print_i32-2 (import "spectest" "print_i32") (param i32)) (func $print_f64-2 (import "spectest" "print_f64") (param f64)) (import "test" "func-i64->i64" (func $i64->i64 (param i64) (result i64))) (func (export "p1") (import "spectest" "print_i32") (param i32)) (func $p (export "p2") (import "spectest" "print_i32") (param i32)) (func (import "spectest" "print_i32") (param i32)) (func (export "p5") (import "spectest" "print_i32") (type 0)) (func (export "p6") (import "spectest" "print_i32") (type 0) (param i32) (result)) ;; (export "p3" (func $print_i32)) ;; (export "p4" (func $print_i32)) (import "spectest" "print_i32" (func (type $forward))) (func (import "spectest" "print_i32") (type $forward)) (type $forward (func (param i32))) (table funcref (elem $print_i32 $print_f64)) (func (export "print32") (param $i i32) (local $x f32) (local.set $x (f32.convert_i32_s (local.get $i))) (call 0 (local.get $i)) (call $print_i32_f32 (i32.add (local.get $i) (i32.const 1)) (f32.const 42) ) (call $print_i32 (local.get $i)) (call $print_i32-2 (local.get $i)) (call $print_f32 (local.get $x)) (call_indirect (type $func_i32) (local.get $i) (i32.const 0)) ) (func (export "print64") (param $i i64) (local $x f64) (local.set $x (f64.convert_i64_s (call $i64->i64 (local.get $i)))) ;; JavaScript can't handle i64 yet. ;; (call 1 (local.get $i)) (call $print_f64_f64 (f64.add (local.get $x) (f64.const 1)) (f64.const 53) ) ;; JavaScript can't handle i64 yet. ;; (call $print_i64 (local.get $i)) (call $print_f64 (local.get $x)) (call $print_f64-2 (local.get $x)) (call_indirect (type $func_f64) (local.get $x) (i32.const 1)) ) ) (assert_return (invoke "print32" (i32.const 13))) (assert_return (invoke "print64" (i64.const 24))) (assert_invalid (module (type (func (result i32))) (import "test" "func" (func (type 1))) ) "unknown type" ) ;; Export sharing name with import (module (import "spectest" "print_i32" (func $imported_print (param i32))) (func (export "print_i32") (param $i i32) (call $imported_print (local.get $i)) ) ) (assert_return (invoke "print_i32" (i32.const 13))) ;; Export sharing name with import (module (import "spectest" "print_i32" (func $imported_print (param i32))) (func (export "print_i32") (param $i i32) (param $j i32) (result i32) (i32.add (local.get $i) (local.get $j)) ) ) (assert_return (invoke "print_i32" (i32.const 5) (i32.const 11)) (i32.const 16)) (module (import "test" "func" (func))) (module (import "test" "func-i32" (func (param i32)))) (module (import "test" "func-f32" (func (param f32)))) (module (import "test" "func->i32" (func (result i32)))) (module (import "test" "func->f32" (func (result f32)))) (module (import "test" "func-i32->i32" (func (param i32) (result i32)))) (module (import "test" "func-i64->i64" (func (param i64) (result i64)))) (assert_unlinkable (module (import "test" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "test" "func" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (result i64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func->i32" (func (param i32) (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (param i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32->i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (func (result i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (func))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (func))) "incompatible import type" ) ;; Globals (module (import "spectest" "global_i32" (global i32)) (global (import "spectest" "global_i32") i32) (import "spectest" "global_i32" (global $x i32)) (global $y (import "spectest" "global_i32") i32) ;; JavaScript can't handle i64 yet. ;; (import "spectest" "global_i64" (global i64)) (import "spectest" "global_f32" (global f32)) (import "spectest" "global_f64" (global f64)) (func (export "get-0") (result i32) (global.get 0)) (func (export "get-1") (result i32) (global.get 1)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i32) (global.get $y)) ) (assert_return (invoke "get-0") (i32.const 666)) (assert_return (invoke "get-1") (i32.const 666)) (assert_return (invoke "get-x") (i32.const 666)) (assert_return (invoke "get-y") (i32.const 666)) (module (import "test" "global-i32" (global i32))) (module (import "test" "global-f32" (global f32))) (module (import "test" "global-mut-i64" (global (mut i64)))) (assert_unlinkable (module (import "test" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "test" "global-i32" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global f32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global f64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (global (mut i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global f64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-f32" (global (mut f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut i32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut f32)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global (mut f64)))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-mut-i64" (global i64))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (global i32))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (global i32))) "incompatible import type" ) ;; Tables (module (type (func (result i32))) (import "spectest" "table" (table $tab 10 20 funcref)) (elem (table $tab) (i32.const 1) func $f $g) (func (export "call") (param i32) (result i32) (call_indirect $tab (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (type (func (result i32))) (table $tab (import "spectest" "table") 10 20 funcref) (elem (table $tab) (i32.const 1) func $f $g) (func (export "call") (param i32) (result i32) (call_indirect $tab (type 0) (local.get 0)) ) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (import "spectest" "table" (table 0 funcref)) (import "spectest" "table" (table 0 funcref)) (table 10 funcref) (table 10 funcref) ) (module (import "test" "table-10-inf" (table 10 funcref))) (module (import "test" "table-10-inf" (table 5 funcref))) (module (import "test" "table-10-inf" (table 0 funcref))) (module (import "test" "table-10-20" (table 10 funcref))) (module (import "test" "table-10-20" (table 5 funcref))) (module (import "test" "table-10-20" (table 0 funcref))) (module (import "test" "table-10-20" (table 10 20 funcref))) (module (import "test" "table-10-20" (table 5 20 funcref))) (module (import "test" "table-10-20" (table 0 20 funcref))) (module (import "test" "table-10-20" (table 10 25 funcref))) (module (import "test" "table-10-20" (table 5 25 funcref))) (module (import "test" "table-10-20" (table 0 25 funcref))) (module (import "spectest" "table" (table 10 funcref))) (module (import "spectest" "table" (table 5 funcref))) (module (import "spectest" "table" (table 0 funcref))) (module (import "spectest" "table" (table 10 20 funcref))) (module (import "spectest" "table" (table 5 20 funcref))) (module (import "spectest" "table" (table 0 20 funcref))) (module (import "spectest" "table" (table 10 25 funcref))) (module (import "spectest" "table" (table 5 25 funcref))) (assert_unlinkable (module (import "test" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (table 10 20 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-20" (table 12 20 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-20" (table 10 18 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 12 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (table 10 15 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (table 10 funcref))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (table 10 funcref))) "incompatible import type" ) ;; Memories (module (import "spectest" "memory" (memory 1 2)) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (module (memory (import "spectest" "memory") 1 2) (data (memory 0) (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (assert_invalid (module (import "" "" (memory 1)) (import "" "" (memory 1))) "multiple memories" ) (assert_invalid (module (import "" "" (memory 1)) (memory 0)) "multiple memories" ) (assert_invalid (module (memory 0) (memory 0)) "multiple memories" ) (module (import "test" "memory-2-inf" (memory 2))) (module (import "test" "memory-2-inf" (memory 1))) (module (import "test" "memory-2-inf" (memory 0))) (module (import "spectest" "memory" (memory 1))) (module (import "spectest" "memory" (memory 0))) (module (import "spectest" "memory" (memory 1 2))) (module (import "spectest" "memory" (memory 0 2))) (module (import "spectest" "memory" (memory 1 3))) (module (import "spectest" "memory" (memory 0 3))) (assert_unlinkable (module (import "test" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "spectest" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 3))) "incompatible import type" ) (assert_unlinkable (module (import "test" "memory-2-inf" (memory 2 3))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "func-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "global-i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "test" "table-10-inf" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "print_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "global_i32" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "table" (memory 1))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "incompatible import type" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "incompatible import type" ) (module (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (module $Mgm (memory (export "memory") 1) ;; initial size is 1 (func (export "grow") (result i32) (memory.grow (i32.const 1))) ) (register "grown-memory" $Mgm) (assert_return (invoke $Mgm "grow") (i32.const 1)) ;; now size is 2 (module $Mgim1 ;; imported memory limits should match, because external memory size is 2 now (memory (import "grown-memory" "memory") 2) (export "memory" (memory 0)) (func (export "grow") (result i32) (memory.grow (i32.const 1))) ) (register "grown-imported-memory" $Mgim1) (assert_return (invoke $Mgim1 "grow") (i32.const 2)) ;; now size is 3 (module $Mgim2 ;; imported memory limits should match, because external memory size is 3 now (import "grown-imported-memory" "memory" (memory 3)) (func (export "size") (result i32) (memory.size)) ) (assert_return (invoke $Mgim2 "size") (i32.const 3)) ;; Syntax errors (assert_malformed (module quote "(func) (import \"\" \"\" (func))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (global i64))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (table 0 funcref))") "import after function" ) (assert_malformed (module quote "(func) (import \"\" \"\" (memory 0))") "import after function" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (func))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (global f32))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (table 0 funcref))") "import after global" ) (assert_malformed (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (memory 0))") "import after global" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (func))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (global i32))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (table 0 funcref))") "import after table" ) (assert_malformed (module quote "(table 0 funcref) (import \"\" \"\" (memory 0))") "import after table" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (func))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (global i32))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (table 1 3 funcref))") "import after memory" ) (assert_malformed (module quote "(memory 0) (import \"\" \"\" (memory 1 2))") "import after memory" ) ;; This module is required to validate, regardless of whether it can be ;; linked. Overloading is not possible in wasm itself, but it is possible ;; in modules from which wasm can import. (module) (register "not wasm") (assert_unlinkable (module (import "not wasm" "overloaded" (func)) (import "not wasm" "overloaded" (func (param i32))) (import "not wasm" "overloaded" (func (param i32 i32))) (import "not wasm" "overloaded" (func (param i64))) (import "not wasm" "overloaded" (func (param f32))) (import "not wasm" "overloaded" (func (param f64))) (import "not wasm" "overloaded" (func (result i32))) (import "not wasm" "overloaded" (func (result i64))) (import "not wasm" "overloaded" (func (result f32))) (import "not wasm" "overloaded" (func (result f64))) (import "not wasm" "overloaded" (global i32)) (import "not wasm" "overloaded" (global i64)) (import "not wasm" "overloaded" (global f32)) (import "not wasm" "overloaded" (global f64)) (import "not wasm" "overloaded" (table 0 funcref)) (import "not wasm" "overloaded" (memory 0)) ) "unknown import" ) binaryen-version_108/test/spec/inline-module.wast000066400000000000000000000000461423707623100223170ustar00rootroot00000000000000(func) (memory 0) (func (export "f")) binaryen-version_108/test/spec/int_exprs.wast000066400000000000000000000375201423707623100216000ustar00rootroot00000000000000;; Test interesting integer "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x+1>n is not folded to x. (module (func (export "i32.no_fold_shl_shr_s") (param $x i32) (result i32) (i32.shr_s (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i32.no_fold_shl_shr_u") (param $x i32) (result i32) (i32.shr_u (i32.shl (local.get $x) (i32.const 1)) (i32.const 1))) (func (export "i64.no_fold_shl_shr_s") (param $x i64) (result i64) (i64.shr_s (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) (func (export "i64.no_fold_shl_shr_u") (param $x i64) (result i64) (i64.shr_u (i64.shl (local.get $x) (i64.const 1)) (i64.const 1))) ) (assert_return (invoke "i32.no_fold_shl_shr_s" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i32.no_fold_shl_shr_u" (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_s" (i64.const 0x8000000000000000)) (i64.const 0)) (assert_return (invoke "i64.no_fold_shl_shr_u" (i64.const 0x8000000000000000)) (i64.const 0)) ;; Test that x>>n<?,./ ") (result i32) (i32.const 6)) ;; Test that we can use names that have special meaning in JS. (func (export "NaN") (result i32) (i32.const 7)) (func (export "Infinity") (result i32) (i32.const 8)) (func (export "if") (result i32) (i32.const 9)) ;; Test that we can use common libc names without conflict. (func (export "malloc") (result i32) (i32.const 10)) ;; Test that we can use some libc hidden names without conflict. (func (export "_malloc") (result i32) (i32.const 11)) (func (export "__malloc") (result i32) (i32.const 12)) ;; Test that names are case-sensitive. (func (export "a") (result i32) (i32.const 13)) (func (export "A") (result i32) (i32.const 14)) ;; Test that UTF-8 BOM code points can appear in identifiers. (func (export "") (result i32) (i32.const 15)) ;; Test that Unicode normalization is not applied. These function names ;; contain different codepoints which normalize to the same thing under ;; NFC or NFD. (func (export "Ã…") (result i32) (i32.const 16)) (func (export "AÌŠ") (result i32) (i32.const 17)) (func (export "â„«") (result i32) (i32.const 18)) ;; Test that Unicode compatibility normalization is not applied. These ;; function names contain different codepoints which normalize to the ;; same thing under NFKC or NFKD. (func (export "ffi") (result i32) (i32.const 19)) (func (export "fï¬") (result i32) (i32.const 20)) (func (export "ffi") (result i32) (i32.const 21)) ;; Test the C0 control codes. (func (export "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (result i32) (i32.const 22)) (func (export "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (result i32) (i32.const 23)) ;; Test miscellaneous control codes. (func (export " \7f") (result i32) (i32.const 24)) ;; Test the C1 control codes. (func (export "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (result i32) (i32.const 25)) (func (export "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (result i32) (i32.const 26)) ;; Test the Unicode Specials. (func (export "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (result i32) (i32.const 27)) (func (export "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (result i32) (i32.const 28)) ;; Test that the control pictures are distinct from the control codes they ;; depict. These correspond to the C0 and miscellaneous control code tests ;; above. (func (export "â€ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹âŒââŽâ") (result i32) (i32.const 29)) (func (export "ââ‘â’â“â”â•â–â—â˜â™âšâ›âœââžâŸ") (result i32) (i32.const 30)) (func (export "â â¡") (result i32) (i32.const 31)) ;; Test the Unicode Specials in non-escaped form (excluding U+FFFE and ;; U+FFFF, so that generic tools don't detect this file as non-UTF-8). (func (export "￰￱￲￳￴￵￶￷￸�") (result i32) (i32.const 32)) ;; Test a bare ZWJ code point. (func (export "â€") (result i32) (i32.const 33)) ;; Test a bare ZWNJ code point. (func (export "‌") (result i32) (i32.const 34)) ;; Test various bare joiner code points. (func (export "Í") (result i32) (i32.const 35)) (func (export "â ") (result i32) (i32.const 36)) (func (export "⵿") (result i32) (i32.const 37)) (func (export "ð‘¿") (result i32) (i32.const 38)) (func (export "á Ž") (result i32) (i32.const 39)) ;; Test various interesting code points: reverse BOM, zero-width space, ;; no-break space, soft hyphen, word joiner, ogham space mark, ;; right-to-left override, left-to-right override. (func (export "￯​ ­â áš€â€®â€­") (result i32) (i32.const 40)) ;; Test more interesting code points: left-to-right mark, right-to-left mark, ;; non-breaking hyphen, line separator, paragraph separator, ;; left-to-right embedding, right-to-left embedding, ;; pop directional formatting, narrow no-break space, left-to-right isolate, ;; right-to-left isolate, first strong isolate, pop directional isolate. (func (export "‎â€â€‘

‪‫‬ â¦â§â¨â©") (result i32) (i32.const 41)) ;; Test some deprecated code points: inhibit symmetric swapping, ;; activate symmetric swapping, inhibit arabic form shaping, ;; activate arabic form shaping, national digit shapes, nominal digit shapes. (func (export "âªâ«â¬â­â®â¯") (result i32) (i32.const 42)) ;; Test "invisible" operator code points. (func (export "â¡â¢â£â¤") (result i32) (i32.const 43)) ;; Test that code points outside the BMP are supported. (func (export "ð€€óŸ¿¿ô¿¿") (result i32) (i32.const 44)) ;; Test that WebAssembly implementations cope in the presence of Zalgo. (func (export "ZÌ̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠͆̆͛͌͘͞a̶͗ͨ̎̄̆͗̿̀͟͡Í̥̰̳̭͙̲̱̹Ì͎̼l̈́͊͗ͦ̈́ͫ̇̚Í̶̷͉̩̹̫Ì͖̙̲̼͇͚ͅÍ̮͎̥̞ͅg̓Ì̅ͮ̔ÌÌŽÌ‚Ì̾͊Ì͋͊ͧÌ̶͕͔͚̩̆ͦ͞o͋̔Í̡ͪͩÍ̢̧Í̫̙̤̮͖͙͓̺̜̩̼̘̠") (result i32) (i32.const 45)) ;; Test Hangul filler code points. (func (export "ᅟᅠㅤᅠ") (result i32) (i32.const 46)) ;; Test variation selectors (which are also ID_Continue code points). (func (export "︀") (result i32) (i32.const 47)) (func (export "︄") (result i32) (i32.const 48)) (func (export "ó „€") (result i32) (i32.const 49)) (func (export "󠇯") (result i32) (i32.const 50)) ;; Test an uncombined combining code point. (func (export "̈") (result i32) (i32.const 51)) ;; Test that numerous different present and historical representations of the ;; "newline" concept are distinct. Tests largely inspired by: ;; https://en.wikipedia.org/wiki/Newline#Representations ;; https://en.wikipedia.org/wiki/Newline#Unicode and ;; https://en.wikipedia.org/wiki/Newline#Reverse_and_partial_line_feeds (func (export "\0a") (result i32) (i32.const 52)) (func (export "â¤") (result i32) (i32.const 53)) (func (export "
") (result i32) (i32.const 54)) (func (export "\0d") (result i32) (i32.const 55)) (func (export "\0d\0a") (result i32) (i32.const 56)) (func (export "\0a\0d") (result i32) (i32.const 57)) (func (export "\1e") (result i32) (i32.const 58)) (func (export "\0b") (result i32) (i32.const 59)) (func (export "\0c") (result i32) (i32.const 60)) (func (export "\c2\85") (result i32) (i32.const 61)) (func (export "
") (result i32) (i32.const 62)) (func (export "…") (result i32) (i32.const 63)) (func (export "âŽ") (result i32) (i32.const 64)) (func (export "\c2\8b") (result i32) (i32.const 65)) (func (export "\c2\8c") (result i32) (i32.const 66)) (func (export "\c2\8d") (result i32) (i32.const 67)) (func (export "↵") (result i32) (i32.const 68)) (func (export "↩") (result i32) (i32.const 69)) (func (export "⌤") (result i32) (i32.const 70)) (func (export "⤶") (result i32) (i32.const 71)) (func (export "↲") (result i32) (i32.const 72)) (func (export "⮨") (result i32) (i32.const 73)) (func (export "â®°") (result i32) (i32.const 74)) ;; Test that non-characters are not replaced by the replacement character. (func (export "�") (result i32) (i32.const 75)) (func (export "\ef\b7\90") (result i32) (i32.const 76)) (func (export "\ef\b7\91") (result i32) (i32.const 77)) (func (export "\ef\b7\92") (result i32) (i32.const 78)) (func (export "\ef\b7\93") (result i32) (i32.const 79)) (func (export "\ef\b7\94") (result i32) (i32.const 80)) (func (export "\ef\b7\95") (result i32) (i32.const 81)) (func (export "\ef\b7\96") (result i32) (i32.const 82)) (func (export "\ef\b7\97") (result i32) (i32.const 83)) (func (export "\ef\b7\98") (result i32) (i32.const 84)) (func (export "\ef\b7\99") (result i32) (i32.const 85)) (func (export "\ef\b7\9a") (result i32) (i32.const 86)) (func (export "\ef\b7\9b") (result i32) (i32.const 87)) (func (export "\ef\b7\9c") (result i32) (i32.const 88)) (func (export "\ef\b7\9d") (result i32) (i32.const 89)) (func (export "\ef\b7\9e") (result i32) (i32.const 90)) (func (export "\ef\b7\9f") (result i32) (i32.const 91)) (func (export "\ef\b7\a0") (result i32) (i32.const 92)) (func (export "\ef\b7\a1") (result i32) (i32.const 93)) (func (export "\ef\b7\a2") (result i32) (i32.const 94)) (func (export "\ef\b7\a3") (result i32) (i32.const 95)) (func (export "\ef\b7\a4") (result i32) (i32.const 96)) (func (export "\ef\b7\a5") (result i32) (i32.const 97)) (func (export "\ef\b7\a6") (result i32) (i32.const 98)) (func (export "\ef\b7\a7") (result i32) (i32.const 99)) (func (export "\ef\b7\a8") (result i32) (i32.const 100)) (func (export "\ef\b7\a9") (result i32) (i32.const 101)) (func (export "\ef\b7\aa") (result i32) (i32.const 102)) (func (export "\ef\b7\ab") (result i32) (i32.const 103)) (func (export "\ef\b7\ac") (result i32) (i32.const 104)) (func (export "\ef\b7\ad") (result i32) (i32.const 105)) (func (export "\ef\b7\ae") (result i32) (i32.const 106)) (func (export "\ef\b7\af") (result i32) (i32.const 107)) (func (export "\ef\bf\be") (result i32) (i32.const 108)) (func (export "\ef\bf\bf") (result i32) (i32.const 109)) (func (export "\f0\9f\bf\be") (result i32) (i32.const 110)) (func (export "\f0\9f\bf\bf") (result i32) (i32.const 111)) (func (export "\f0\af\bf\be") (result i32) (i32.const 112)) (func (export "\f0\af\bf\bf") (result i32) (i32.const 113)) (func (export "\f0\bf\bf\be") (result i32) (i32.const 114)) (func (export "\f0\bf\bf\bf") (result i32) (i32.const 115)) (func (export "\f1\8f\bf\be") (result i32) (i32.const 116)) (func (export "\f1\8f\bf\bf") (result i32) (i32.const 117)) (func (export "\f1\9f\bf\be") (result i32) (i32.const 118)) (func (export "\f1\9f\bf\bf") (result i32) (i32.const 119)) (func (export "\f1\af\bf\be") (result i32) (i32.const 120)) (func (export "\f1\af\bf\bf") (result i32) (i32.const 121)) (func (export "\f1\bf\bf\be") (result i32) (i32.const 122)) (func (export "\f1\bf\bf\bf") (result i32) (i32.const 123)) (func (export "\f2\8f\bf\be") (result i32) (i32.const 124)) (func (export "\f2\8f\bf\bf") (result i32) (i32.const 125)) (func (export "\f2\9f\bf\be") (result i32) (i32.const 126)) (func (export "\f2\9f\bf\bf") (result i32) (i32.const 127)) (func (export "\f2\af\bf\be") (result i32) (i32.const 128)) (func (export "\f2\af\bf\bf") (result i32) (i32.const 129)) (func (export "\f2\bf\bf\be") (result i32) (i32.const 130)) (func (export "\f2\bf\bf\bf") (result i32) (i32.const 131)) (func (export "\f3\8f\bf\be") (result i32) (i32.const 132)) (func (export "\f3\8f\bf\bf") (result i32) (i32.const 133)) (func (export "\f3\9f\bf\be") (result i32) (i32.const 134)) (func (export "\f3\9f\bf\bf") (result i32) (i32.const 135)) (func (export "\f3\af\bf\be") (result i32) (i32.const 136)) (func (export "\f3\af\bf\bf") (result i32) (i32.const 137)) (func (export "\f3\bf\bf\be") (result i32) (i32.const 138)) (func (export "\f3\bf\bf\bf") (result i32) (i32.const 139)) (func (export "\f4\8f\bf\be") (result i32) (i32.const 140)) (func (export "\f4\8f\bf\bf") (result i32) (i32.const 141)) ;; Test an interrobang with combining diacritical marks above. ;; https://xkcd.com/1209/ (func (export "̈‽̈̉") (result i32) (i32.const 142)) ;; Test that RLM/LRM don't change the logical byte order. (func (export "abc") (result i32) (i32.const 143)) (func (export "‭abc") (result i32) (i32.const 144)) (func (export "‮cba") (result i32) (i32.const 145)) (func (export "‭abc‮") (result i32) (i32.const 146)) (func (export "‮cba‭") (result i32) (i32.const 147)) ;; Test that Unicode font variations are preserved. (func (export "ð‘¨") (result i32) (i32.const 148)) (func (export "ð´") (result i32) (i32.const 149)) (func (export "ð˜ˆ") (result i32) (i32.const 150)) (func (export "ð˜¼") (result i32) (i32.const 151)) (func (export "ð€") (result i32) (i32.const 152)) (func (export "ð“") (result i32) (i32.const 153)) (func (export "ð•¬") (result i32) (i32.const 154)) (func (export "ð—”") (result i32) (i32.const 155)) (func (export "ð’œ") (result i32) (i32.const 156)) (func (export "ð”„") (result i32) (i32.const 157)) (func (export "ð”¸") (result i32) (i32.const 158)) (func (export "ð– ") (result i32) (i32.const 159)) (func (export "ð™°") (result i32) (i32.const 160)) (func (export "á´€") (result i32) (i32.const 161)) ;; Test that various additional letter variations are preserved. ;; (U+0040, U+0061, U+0041, U+00C5, U+0041 U+030A, U+212B, and the font ;; variations are covered above.) (func (export "á´¬") (result i32) (i32.const 162)) (func (export "â’¶") (result i32) (i32.const 163)) (func (export "A") (result i32) (i32.const 164)) (func (export "ðŸ„") (result i32) (i32.const 165)) (func (export "🄰") (result i32) (i32.const 166)) (func (export "ó ") (result i32) (i32.const 167)) (func (export "U+0041") (result i32) (i32.const 168)) (func (export "A​") (result i32) (i32.const 169)) (func (export "Ð") (result i32) (i32.const 170)) (func (export "ê™–") (result i32) (i32.const 171)) (func (export "â·¼") (result i32) (i32.const 172)) (func (export "â·¶") (result i32) (i32.const 173)) (func (export "Ɐ") (result i32) (i32.const 174)) (func (export "ðŸ…") (result i32) (i32.const 175)) (func (export "🅰") (result i32) (i32.const 176)) (func (export "â°­") (result i32) (i32.const 177)) (func (export "ð‚") (result i32) (i32.const 178)) (func (export "ðˆ") (result i32) (i32.const 179)) (func (export "ð’°") (result i32) (i32.const 180)) (func (export "À") (result i32) (i32.const 181)) (func (export "Ã") (result i32) (i32.const 182)) (func (export "Â") (result i32) (i32.const 183)) (func (export "Ã") (result i32) (i32.const 184)) (func (export "Ä") (result i32) (i32.const 185)) (func (export "Ä€") (result i32) (i32.const 186)) (func (export "Ä‚") (result i32) (i32.const 187)) (func (export "Ä„") (result i32) (i32.const 188)) (func (export "Ç") (result i32) (i32.const 189)) (func (export "Çž") (result i32) (i32.const 190)) (func (export "Ç ") (result i32) (i32.const 191)) (func (export "Ǻ") (result i32) (i32.const 192)) (func (export "È€") (result i32) (i32.const 193)) (func (export "È‚") (result i32) (i32.const 194)) (func (export "Ȧ") (result i32) (i32.const 195)) (func (export "Ⱥ") (result i32) (i32.const 196)) (func (export "Ó") (result i32) (i32.const 197)) (func (export "Ó’") (result i32) (i32.const 198)) (func (export "ߊ") (result i32) (i32.const 199)) (func (export "à ¡") (result i32) (i32.const 200)) (func (export "à ¢") (result i32) (i32.const 201)) (func (export "à £") (result i32) (i32.const 202)) (func (export "à ¤") (result i32) (i32.const 203)) (func (export "à ¥") (result i32) (i32.const 204)) (func (export "ऄ") (result i32) (i32.const 205)) (func (export "अ") (result i32) (i32.const 206)) (func (export "ॲ") (result i32) (i32.const 207)) (func (export "অ") (result i32) (i32.const 208)) (func (export "ਅ") (result i32) (i32.const 209)) (func (export "અ") (result i32) (i32.const 210)) (func (export "ଅ") (result i32) (i32.const 211)) (func (export "à®…") (result i32) (i32.const 212)) (func (export "à°…") (result i32) (i32.const 213)) (func (export "ಅ") (result i32) (i32.const 214)) (func (export "à´…") (result i32) (i32.const 215)) (func (export "ะ") (result i32) (i32.const 216)) (func (export "ະ") (result i32) (i32.const 217)) (func (export "à¼") (result i32) (i32.const 218)) (func (export "ཨ") (result i32) (i32.const 219)) (func (export "ྸ") (result i32) (i32.const 220)) (func (export "အ") (result i32) (i32.const 221)) (func (export "ဢ") (result i32) (i32.const 222)) (func (export "ႜ") (result i32) (i32.const 223)) (func (export "á…¡") (result i32) (i32.const 224)) (func (export "አ") (result i32) (i32.const 225)) (func (export "á‹") (result i32) (i32.const 226)) (func (export "Ꭰ") (result i32) (i32.const 227)) (func (export "áŠ") (result i32) (i32.const 228)) (func (export "á–³") (result i32) (i32.const 229)) (func (export "ᚨ") (result i32) (i32.const 230)) (func (export "ᚪ") (result i32) (i32.const 231)) (func (export "ᛆ") (result i32) (i32.const 232)) (func (export "ᜀ") (result i32) (i32.const 233)) (func (export "ᜠ") (result i32) (i32.const 234)) (func (export "á€") (result i32) (i32.const 235)) (func (export "á ") (result i32) (i32.const 236)) (func (export "á  ") (result i32) (i32.const 237)) (func (export "ᢇ") (result i32) (i32.const 238)) (func (export "ᤠ") (result i32) (i32.const 239)) (func (export "ᥣ") (result i32) (i32.const 240)) (func (export "ᨕ") (result i32) (i32.const 241)) (func (export "á©‹") (result i32) (i32.const 242)) (func (export "á©¡") (result i32) (i32.const 243)) (func (export "ᮃ") (result i32) (i32.const 244)) (func (export "ᯀ") (result i32) (i32.const 245)) (func (export "á¯") (result i32) (i32.const 246)) (func (export "á°£") (result i32) (i32.const 247)) (func (export "Ḁ") (result i32) (i32.const 248)) (func (export "Ạ") (result i32) (i32.const 249)) (func (export "Ả") (result i32) (i32.const 250)) (func (export "Ấ") (result i32) (i32.const 251)) (func (export "Ầ") (result i32) (i32.const 252)) (func (export "Ẩ") (result i32) (i32.const 253)) (func (export "Ẫ") (result i32) (i32.const 254)) (func (export "Ậ") (result i32) (i32.const 255)) (func (export "Ắ") (result i32) (i32.const 256)) (func (export "Ằ") (result i32) (i32.const 257)) (func (export "Ẳ") (result i32) (i32.const 258)) (func (export "Ẵ") (result i32) (i32.const 259)) (func (export "Ặ") (result i32) (i32.const 260)) (func (export "ã‚") (result i32) (i32.const 261)) (func (export "ã‚¢") (result i32) (i32.const 262)) (func (export "ㄚ") (result i32) (i32.const 263)) (func (export "ã…") (result i32) (i32.const 264)) (func (export "㈎") (result i32) (i32.const 265)) (func (export "ãˆ") (result i32) (i32.const 266)) (func (export "ãˆ") (result i32) (i32.const 267)) (func (export "㈑") (result i32) (i32.const 268)) (func (export "㈒") (result i32) (i32.const 269)) (func (export "㈓") (result i32) (i32.const 270)) (func (export "㈔") (result i32) (i32.const 271)) (func (export "㈕") (result i32) (i32.const 272)) (func (export "㈖") (result i32) (i32.const 273)) (func (export "㈗") (result i32) (i32.const 274)) (func (export "㈘") (result i32) (i32.const 275)) (func (export "㈙") (result i32) (i32.const 276)) (func (export "㈚") (result i32) (i32.const 277)) (func (export "㈛") (result i32) (i32.const 278)) (func (export "㉮") (result i32) (i32.const 279)) (func (export "㉯") (result i32) (i32.const 280)) (func (export "㉰") (result i32) (i32.const 281)) (func (export "㉱") (result i32) (i32.const 282)) (func (export "㉲") (result i32) (i32.const 283)) (func (export "㉳") (result i32) (i32.const 284)) (func (export "㉴") (result i32) (i32.const 285)) (func (export "㉵") (result i32) (i32.const 286)) (func (export "㉶") (result i32) (i32.const 287)) (func (export "㉷") (result i32) (i32.const 288)) (func (export "㉸") (result i32) (i32.const 289)) (func (export "㉹") (result i32) (i32.const 290)) (func (export "㉺") (result i32) (i32.const 291)) (func (export "㉻") (result i32) (i32.const 292)) (func (export "ã‹") (result i32) (i32.const 293)) (func (export "ꀊ") (result i32) (i32.const 294)) (func (export "ê“®") (result i32) (i32.const 295)) (func (export "ꕉ") (result i32) (i32.const 296)) (func (export "êš ") (result i32) (i32.const 297)) (func (export "ê €") (result i32) (i32.const 298)) (func (export "ê £") (result i32) (i32.const 299)) (func (export "ê¡") (result i32) (i32.const 300)) (func (export "ꢂ") (result i32) (i32.const 301)) (func (export "꣪") (result i32) (i32.const 302)) (func (export "ꤢ") (result i32) (i32.const 303)) (func (export "ꥆ") (result i32) (i32.const 304)) (func (export "ꦄ") (result i32) (i32.const 305)) (func (export "ꨀ") (result i32) (i32.const 306)) (func (export "ï½±") (result i32) (i32.const 307)) (func (export "ï¿‚") (result i32) (i32.const 308)) (func (export "ð€€") (result i32) (i32.const 309)) (func (export "ðŠ€") (result i32) (i32.const 310)) (func (export "ðŠ ") (result i32) (i32.const 311)) (func (export "ðŒ€") (result i32) (i32.const 312)) (func (export "ðŽ ") (result i32) (i32.const 313)) (func (export "ð’–") (result i32) (i32.const 314)) (func (export "ð”€") (result i32) (i32.const 315)) (func (export "ð€") (result i32) (i32.const 316)) (func (export "ð €") (result i32) (i32.const 317)) (func (export "ð¤ ") (result i32) (i32.const 318)) (func (export "ð¦€") (result i32) (i32.const 319)) (func (export "ð¦ ") (result i32) (i32.const 320)) (func (export "ð¨€") (result i32) (i32.const 321)) (func (export "ð¬€") (result i32) (i32.const 322)) (func (export "ð°€") (result i32) (i32.const 323)) (func (export "ð°") (result i32) (i32.const 324)) (func (export "ð²€") (result i32) (i32.const 325)) (func (export "ð‘€…") (result i32) (i32.const 326)) (func (export "𑂃") (result i32) (i32.const 327)) (func (export "ð‘„§") (result i32) (i32.const 328)) (func (export "ð‘…") (result i32) (i32.const 329)) (func (export "𑆃") (result i32) (i32.const 330)) (func (export "𑈀") (result i32) (i32.const 331)) (func (export "𑊀") (result i32) (i32.const 332)) (func (export "𑊰") (result i32) (i32.const 333)) (func (export "𑌅") (result i32) (i32.const 334)) (func (export "ð‘°") (result i32) (i32.const 335)) (func (export "ð‘€") (result i32) (i32.const 336)) (func (export "ð‘’") (result i32) (i32.const 337)) (func (export "ð‘–€") (result i32) (i32.const 338)) (func (export "𑘀") (result i32) (i32.const 339)) (func (export "𑚀") (result i32) (i32.const 340)) (func (export "𑜒") (result i32) (i32.const 341)) (func (export "𑜠") (result i32) (i32.const 342)) (func (export "𑢡") (result i32) (i32.const 343)) (func (export "ð‘«•") (result i32) (i32.const 344)) (func (export "ð‘°€") (result i32) (i32.const 345)) (func (export "ð‘²") (result i32) (i32.const 346)) (func (export "𑲯") (result i32) (i32.const 347)) (func (export "ð’€€") (result i32) (i32.const 348)) (func (export "ð–§•") (result i32) (i32.const 349)) (func (export "𖩆") (result i32) (i32.const 350)) (func (export "ð–«§") (result i32) (i32.const 351)) (func (export "ð–½”") (result i32) (i32.const 352)) (func (export "ð›±") (result i32) (i32.const 353)) (func (export "𛱤") (result i32) (i32.const 354)) (func (export "ðž £") (result i32) (i32.const 355)) (func (export "🇦") (result i32) (i32.const 356)) (func (export "â±­") (result i32) (i32.const 357)) (func (export "Λ") (result i32) (i32.const 358)) (func (export "â±°") (result i32) (i32.const 359)) (func (export "ª") (result i32) (i32.const 360)) (func (export "∀") (result i32) (i32.const 361)) (func (export "₳") (result i32) (i32.const 362)) (func (export "ð¤€") (result i32) (i32.const 363)) (func (export "â²€") (result i32) (i32.const 364)) (func (export "ðŒ°") (result i32) (i32.const 365)) (func (export "Ά") (result i32) (i32.const 366)) (func (export "Α") (result i32) (i32.const 367)) (func (export "Ἀ") (result i32) (i32.const 368)) (func (export "Ἁ") (result i32) (i32.const 369)) (func (export "Ἂ") (result i32) (i32.const 370)) (func (export "Ἃ") (result i32) (i32.const 371)) (func (export "Ἄ") (result i32) (i32.const 372)) (func (export "á¼") (result i32) (i32.const 373)) (func (export "Ἆ") (result i32) (i32.const 374)) (func (export "á¼") (result i32) (i32.const 375)) (func (export "ᾈ") (result i32) (i32.const 376)) (func (export "ᾉ") (result i32) (i32.const 377)) (func (export "ᾊ") (result i32) (i32.const 378)) (func (export "ᾋ") (result i32) (i32.const 379)) (func (export "ᾌ") (result i32) (i32.const 380)) (func (export "á¾") (result i32) (i32.const 381)) (func (export "ᾎ") (result i32) (i32.const 382)) (func (export "á¾") (result i32) (i32.const 383)) (func (export "Ᾰ") (result i32) (i32.const 384)) (func (export "á¾¹") (result i32) (i32.const 385)) (func (export "Ὰ") (result i32) (i32.const 386)) (func (export "á¾»") (result i32) (i32.const 387)) (func (export "á¾¼") (result i32) (i32.const 388)) (func (export "ðš¨") (result i32) (i32.const 389)) (func (export "ð›¢") (result i32) (i32.const 390)) (func (export "ðœœ") (result i32) (i32.const 391)) (func (export "ð–") (result i32) (i32.const 392)) (func (export "ðž") (result i32) (i32.const 393)) (func (export "â¶") (result i32) (i32.const 394)) (func (export "âº") (result i32) (i32.const 395)) (func (export "⩜") (result i32) (i32.const 396)) (func (export "á—…") (result i32) (i32.const 397)) (func (export "Ꭺ") (result i32) (i32.const 398)) ;; Test unmatched "closing" and "opening" code points. (func (export ")˺˼ð”—ð…´ð…¶ð…¸ð…ºâ¾â‚Žâ©â«âŸ¯ï´¿ï¸¶ï¹šï¼‰ï½ ó €©â³âµâŸ§âŸ©âŸ«âŸ­â¦ˆâ¦Šâ¦–⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]ï½ï½£ó ó ½Â»â€™â€â€ºâ¯") (result i32) (i32.const 399)) (func (export "(˹˻𔗎ð…³ð…µð…·ð…¹â½â‚â¨âªâŸ®ï´¾ï¸µï¹™ï¼ˆï½Ÿó €¨â²â´âŸ¦âŸ¨âŸªâŸ¬â¦‡â¦‰â¦•⸢⸤︗︷︹︻︽︿ï¹ï¹ƒï¹‡ï¹›ï¹ï¼»ï½›ï½¢ó ›ó »Â«â€˜â€œâ€¹â®") (result i32) (i32.const 400)) (func (export "ðª‹ðª¤") (result i32) (i32.const 401)) (func (export "ðª‹") (result i32) (i32.const 402)) ;; Test that Unicode fraction normalization is not applied. (func (export "½") (result i32) (i32.const 403)) (func (export "1â„2") (result i32) (i32.const 404)) (func (export "1/2") (result i32) (i32.const 405)) (func (export "à­³") (result i32) (i32.const 406)) (func (export "൴") (result i32) (i32.const 407)) (func (export "â³½") (result i32) (i32.const 408)) (func (export "ê ±") (result i32) (i32.const 409)) (func (export "ð…") (result i32) (i32.const 410)) (func (export "ð…µ") (result i32) (i32.const 411)) (func (export "ð…¶") (result i32) (i32.const 412)) (func (export "ð¦½") (result i32) (i32.const 413)) (func (export "ð¹»") (result i32) (i32.const 414)) ;; Test a full-width quote. (func (export """) (result i32) (i32.const 415)) ;; Test that different present and historical representations of the "delete" ;; concept are distinct. (func (export "\7f") (result i32) (i32.const 416)) (func (export "\08") (result i32) (i32.const 417)) (func (export "⌫") (result i32) (i32.const 418)) (func (export "⌦") (result i32) (i32.const 419)) (func (export "âˆ") (result i32) (i32.const 420)) (func (export "â¡") (result i32) (i32.const 421)) (func (export "á·»") (result i32) (i32.const 422)) (func (export "\0f") (result i32) (i32.const 423)) (func (export "â†") (result i32) (i32.const 424)) (func (export "⌧") (result i32) (i32.const 425)) (func (export "â’") (result i32) (i32.const 426)) (func (export "â”") (result i32) (i32.const 427)) (func (export "â¢") (result i32) (i32.const 428)) (func (export "â«") (result i32) (i32.const 429)) ;; Test that different representations of the "substitute" concept are ;; distinct. (U+FFFD is covered above.) (func (export "\1a") (result i32) (i32.const 430)) (func (export "â¦") (result i32) (i32.const 431)) (func (export "âš") (result i32) (i32.const 432)) (func (export "") (result i32) (i32.const 433)) (func (export "?") (result i32) (i32.const 434)) (func (export "¿") (result i32) (i32.const 435)) (func (export "᥅") (result i32) (i32.const 436)) (func (export ";") (result i32) (i32.const 437)) (func (export "Õž") (result i32) (i32.const 438)) (func (export "ØŸ") (result i32) (i32.const 439)) (func (export "á§") (result i32) (i32.const 440)) (func (export "â‡") (result i32) (i32.const 441)) (func (export "â°") (result i32) (i32.const 442)) (func (export "â“") (result i32) (i32.const 443)) (func (export "â”") (result i32) (i32.const 444)) (func (export "⳺") (result i32) (i32.const 445)) (func (export "â³»") (result i32) (i32.const 446)) (func (export "⸮") (result i32) (i32.const 447)) (func (export "㉄") (result i32) (i32.const 448)) (func (export "ê˜") (result i32) (i32.const 449)) (func (export "ê›·") (result i32) (i32.const 450)) (func (export "︖") (result i32) (i32.const 451)) (func (export "ï¹–") (result i32) (i32.const 452)) (func (export "?") (result i32) (i32.const 453)) (func (export "ð‘…ƒ") (result i32) (i32.const 454)) (func (export "𞥟") (result i32) (i32.const 455)) (func (export "󠀿") (result i32) (i32.const 456)) (func (export "ð–¡„") (result i32) (i32.const 457)) (func (export "⯑") (result i32) (i32.const 458)) ;; Test that different present and historical representations of the ;; "paragraph" concept are distinct. (U+2029 is covered above). (func (export "¶") (result i32) (i32.const 459)) (func (export "â‹") (result i32) (i32.const 460)) (func (export "Ü€") (result i32) (i32.const 461)) (func (export "჻") (result i32) (i32.const 462)) (func (export "á¨") (result i32) (i32.const 463)) (func (export "〷") (result i32) (i32.const 464)) (func (export "â¡") (result i32) (i32.const 465)) (func (export "â¸") (result i32) (i32.const 466)) (func (export "â¸") (result i32) (i32.const 467)) (func (export "⸑") (result i32) (i32.const 468)) (func (export "⸎") (result i32) (i32.const 469)) (func (export "\14") (result i32) (i32.const 470)) ;; ¶ in CP437 (func (export "☙") (result i32) (i32.const 471)) (func (export "⸿") (result i32) (i32.const 472)) (func (export "〇") (result i32) (i32.const 473)) (func (export "๛") (result i32) (i32.const 474)) ;; Test an unusual character. (func (export "ê™®") (result i32) (i32.const 475)) ;; Test the three characters whose normalization forms under NFC, NFD, NFKC, ;; and NFKD are all different. ;; http://unicode.org/faq/normalization.html#6 (func (export "Ï“") (result i32) (i32.const 476)) (func (export "Ï”") (result i32) (i32.const 477)) (func (export "ẛ") (result i32) (i32.const 478)) ) (assert_return (invoke "") (i32.const 0)) (assert_return (invoke "0") (i32.const 1)) (assert_return (invoke "-0") (i32.const 2)) (assert_return (invoke "_") (i32.const 3)) (assert_return (invoke "$") (i32.const 4)) (assert_return (invoke "@") (i32.const 5)) (assert_return (invoke "~!@#$%^&*()_+`-={}|[]\\:\";'<>?,./ ") (i32.const 6)) (assert_return (invoke "NaN") (i32.const 7)) (assert_return (invoke "Infinity") (i32.const 8)) (assert_return (invoke "if") (i32.const 9)) (assert_return (invoke "malloc") (i32.const 10)) (assert_return (invoke "_malloc") (i32.const 11)) (assert_return (invoke "__malloc") (i32.const 12)) (assert_return (invoke "a") (i32.const 13)) (assert_return (invoke "A") (i32.const 14)) (assert_return (invoke "") (i32.const 15)) (assert_return (invoke "Ã…") (i32.const 16)) (assert_return (invoke "AÌŠ") (i32.const 17)) (assert_return (invoke "â„«") (i32.const 18)) (assert_return (invoke "ffi") (i32.const 19)) (assert_return (invoke "fï¬") (i32.const 20)) (assert_return (invoke "ffi") (i32.const 21)) (assert_return (invoke "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (i32.const 22)) (assert_return (invoke "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (i32.const 23)) (assert_return (invoke " \7f") (i32.const 24)) (assert_return (invoke "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (i32.const 25)) (assert_return (invoke "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (i32.const 26)) (assert_return (invoke "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (i32.const 27)) (assert_return (invoke "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (i32.const 28)) (assert_return (invoke "â€ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹âŒââŽâ") (i32.const 29)) (assert_return (invoke "ââ‘â’â“â”â•â–â—â˜â™âšâ›âœââžâŸ") (i32.const 30)) (assert_return (invoke "â â¡") (i32.const 31)) (assert_return (invoke "￰￱￲￳￴￵￶￷￸�") (i32.const 32)) (assert_return (invoke "â€") (i32.const 33)) (assert_return (invoke "‌") (i32.const 34)) (assert_return (invoke "Í") (i32.const 35)) (assert_return (invoke "â ") (i32.const 36)) (assert_return (invoke "⵿") (i32.const 37)) (assert_return (invoke "ð‘¿") (i32.const 38)) (assert_return (invoke "á Ž") (i32.const 39)) (assert_return (invoke "￯​ ­â áš€â€®â€­") (i32.const 40)) (assert_return (invoke "‎â€â€‘

‪‫‬ â¦â§â¨â©") (i32.const 41)) (assert_return (invoke "âªâ«â¬â­â®â¯") (i32.const 42)) (assert_return (invoke "â¡â¢â£â¤") (i32.const 43)) (assert_return (invoke "ð€€óŸ¿¿ô¿¿") (i32.const 44)) (assert_return (invoke "ZÌ̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠͆̆͛͌͘͞a̶͗ͨ̎̄̆͗̿̀͟͡Í̥̰̳̭͙̲̱̹Ì͎̼l̈́͊͗ͦ̈́ͫ̇̚Í̶̷͉̩̹̫Ì͖̙̲̼͇͚ͅÍ̮͎̥̞ͅg̓Ì̅ͮ̔ÌÌŽÌ‚Ì̾͊Ì͋͊ͧÌ̶͕͔͚̩̆ͦ͞o͋̔Í̡ͪͩÍ̢̧Í̫̙̤̮͖͙͓̺̜̩̼̘̠") (i32.const 45)) (assert_return (invoke "ᅟᅠㅤᅠ") (i32.const 46)) (assert_return (invoke "︀") (i32.const 47)) (assert_return (invoke "︄") (i32.const 48)) (assert_return (invoke "ó „€") (i32.const 49)) (assert_return (invoke "󠇯") (i32.const 50)) (assert_return (invoke "̈") (i32.const 51)) (assert_return (invoke "\0a") (i32.const 52)) (assert_return (invoke "â¤") (i32.const 53)) (assert_return (invoke "
") (i32.const 54)) (assert_return (invoke "\0d") (i32.const 55)) (assert_return (invoke "\0d\0a") (i32.const 56)) (assert_return (invoke "\0a\0d") (i32.const 57)) (assert_return (invoke "\1e") (i32.const 58)) (assert_return (invoke "\0b") (i32.const 59)) (assert_return (invoke "\0c") (i32.const 60)) (assert_return (invoke "\c2\85") (i32.const 61)) (assert_return (invoke "
") (i32.const 62)) (assert_return (invoke "…") (i32.const 63)) (assert_return (invoke "âŽ") (i32.const 64)) (assert_return (invoke "\c2\8b") (i32.const 65)) (assert_return (invoke "\c2\8c") (i32.const 66)) (assert_return (invoke "\c2\8d") (i32.const 67)) (assert_return (invoke "↵") (i32.const 68)) (assert_return (invoke "↩") (i32.const 69)) (assert_return (invoke "⌤") (i32.const 70)) (assert_return (invoke "⤶") (i32.const 71)) (assert_return (invoke "↲") (i32.const 72)) (assert_return (invoke "⮨") (i32.const 73)) (assert_return (invoke "â®°") (i32.const 74)) (assert_return (invoke "�") (i32.const 75)) (assert_return (invoke "\ef\b7\90") (i32.const 76)) (assert_return (invoke "\ef\b7\91") (i32.const 77)) (assert_return (invoke "\ef\b7\92") (i32.const 78)) (assert_return (invoke "\ef\b7\93") (i32.const 79)) (assert_return (invoke "\ef\b7\94") (i32.const 80)) (assert_return (invoke "\ef\b7\95") (i32.const 81)) (assert_return (invoke "\ef\b7\96") (i32.const 82)) (assert_return (invoke "\ef\b7\97") (i32.const 83)) (assert_return (invoke "\ef\b7\98") (i32.const 84)) (assert_return (invoke "\ef\b7\99") (i32.const 85)) (assert_return (invoke "\ef\b7\9a") (i32.const 86)) (assert_return (invoke "\ef\b7\9b") (i32.const 87)) (assert_return (invoke "\ef\b7\9c") (i32.const 88)) (assert_return (invoke "\ef\b7\9d") (i32.const 89)) (assert_return (invoke "\ef\b7\9e") (i32.const 90)) (assert_return (invoke "\ef\b7\9f") (i32.const 91)) (assert_return (invoke "\ef\b7\a0") (i32.const 92)) (assert_return (invoke "\ef\b7\a1") (i32.const 93)) (assert_return (invoke "\ef\b7\a2") (i32.const 94)) (assert_return (invoke "\ef\b7\a3") (i32.const 95)) (assert_return (invoke "\ef\b7\a4") (i32.const 96)) (assert_return (invoke "\ef\b7\a5") (i32.const 97)) (assert_return (invoke "\ef\b7\a6") (i32.const 98)) (assert_return (invoke "\ef\b7\a7") (i32.const 99)) (assert_return (invoke "\ef\b7\a8") (i32.const 100)) (assert_return (invoke "\ef\b7\a9") (i32.const 101)) (assert_return (invoke "\ef\b7\aa") (i32.const 102)) (assert_return (invoke "\ef\b7\ab") (i32.const 103)) (assert_return (invoke "\ef\b7\ac") (i32.const 104)) (assert_return (invoke "\ef\b7\ad") (i32.const 105)) (assert_return (invoke "\ef\b7\ae") (i32.const 106)) (assert_return (invoke "\ef\b7\af") (i32.const 107)) (assert_return (invoke "\ef\bf\be") (i32.const 108)) (assert_return (invoke "\ef\bf\bf") (i32.const 109)) (assert_return (invoke "\f0\9f\bf\be") (i32.const 110)) (assert_return (invoke "\f0\9f\bf\bf") (i32.const 111)) (assert_return (invoke "\f0\af\bf\be") (i32.const 112)) (assert_return (invoke "\f0\af\bf\bf") (i32.const 113)) (assert_return (invoke "\f0\bf\bf\be") (i32.const 114)) (assert_return (invoke "\f0\bf\bf\bf") (i32.const 115)) (assert_return (invoke "\f1\8f\bf\be") (i32.const 116)) (assert_return (invoke "\f1\8f\bf\bf") (i32.const 117)) (assert_return (invoke "\f1\9f\bf\be") (i32.const 118)) (assert_return (invoke "\f1\9f\bf\bf") (i32.const 119)) (assert_return (invoke "\f1\af\bf\be") (i32.const 120)) (assert_return (invoke "\f1\af\bf\bf") (i32.const 121)) (assert_return (invoke "\f1\bf\bf\be") (i32.const 122)) (assert_return (invoke "\f1\bf\bf\bf") (i32.const 123)) (assert_return (invoke "\f2\8f\bf\be") (i32.const 124)) (assert_return (invoke "\f2\8f\bf\bf") (i32.const 125)) (assert_return (invoke "\f2\9f\bf\be") (i32.const 126)) (assert_return (invoke "\f2\9f\bf\bf") (i32.const 127)) (assert_return (invoke "\f2\af\bf\be") (i32.const 128)) (assert_return (invoke "\f2\af\bf\bf") (i32.const 129)) (assert_return (invoke "\f2\bf\bf\be") (i32.const 130)) (assert_return (invoke "\f2\bf\bf\bf") (i32.const 131)) (assert_return (invoke "\f3\8f\bf\be") (i32.const 132)) (assert_return (invoke "\f3\8f\bf\bf") (i32.const 133)) (assert_return (invoke "\f3\9f\bf\be") (i32.const 134)) (assert_return (invoke "\f3\9f\bf\bf") (i32.const 135)) (assert_return (invoke "\f3\af\bf\be") (i32.const 136)) (assert_return (invoke "\f3\af\bf\bf") (i32.const 137)) (assert_return (invoke "\f3\bf\bf\be") (i32.const 138)) (assert_return (invoke "\f3\bf\bf\bf") (i32.const 139)) (assert_return (invoke "\f4\8f\bf\be") (i32.const 140)) (assert_return (invoke "\f4\8f\bf\bf") (i32.const 141)) (assert_return (invoke "̈‽̈̉") (i32.const 142)) (assert_return (invoke "abc") (i32.const 143)) (assert_return (invoke "‭abc") (i32.const 144)) (assert_return (invoke "‮cba") (i32.const 145)) (assert_return (invoke "‭abc‮") (i32.const 146)) (assert_return (invoke "‮cba‭") (i32.const 147)) (assert_return (invoke "ð‘¨") (i32.const 148)) (assert_return (invoke "ð´") (i32.const 149)) (assert_return (invoke "ð˜ˆ") (i32.const 150)) (assert_return (invoke "ð˜¼") (i32.const 151)) (assert_return (invoke "ð€") (i32.const 152)) (assert_return (invoke "ð“") (i32.const 153)) (assert_return (invoke "ð•¬") (i32.const 154)) (assert_return (invoke "ð—”") (i32.const 155)) (assert_return (invoke "ð’œ") (i32.const 156)) (assert_return (invoke "ð”„") (i32.const 157)) (assert_return (invoke "ð”¸") (i32.const 158)) (assert_return (invoke "ð– ") (i32.const 159)) (assert_return (invoke "ð™°") (i32.const 160)) (assert_return (invoke "á´€") (i32.const 161)) (assert_return (invoke "á´¬") (i32.const 162)) (assert_return (invoke "â’¶") (i32.const 163)) (assert_return (invoke "A") (i32.const 164)) (assert_return (invoke "ðŸ„") (i32.const 165)) (assert_return (invoke "🄰") (i32.const 166)) (assert_return (invoke "ó ") (i32.const 167)) (assert_return (invoke "U+0041") (i32.const 168)) (assert_return (invoke "A​") (i32.const 169)) (assert_return (invoke "Ð") (i32.const 170)) (assert_return (invoke "ê™–") (i32.const 171)) (assert_return (invoke "â·¼") (i32.const 172)) (assert_return (invoke "â·¶") (i32.const 173)) (assert_return (invoke "Ɐ") (i32.const 174)) (assert_return (invoke "ðŸ…") (i32.const 175)) (assert_return (invoke "🅰") (i32.const 176)) (assert_return (invoke "â°­") (i32.const 177)) (assert_return (invoke "ð‚") (i32.const 178)) (assert_return (invoke "ðˆ") (i32.const 179)) (assert_return (invoke "ð’°") (i32.const 180)) (assert_return (invoke "À") (i32.const 181)) (assert_return (invoke "Ã") (i32.const 182)) (assert_return (invoke "Â") (i32.const 183)) (assert_return (invoke "Ã") (i32.const 184)) (assert_return (invoke "Ä") (i32.const 185)) (assert_return (invoke "Ä€") (i32.const 186)) (assert_return (invoke "Ä‚") (i32.const 187)) (assert_return (invoke "Ä„") (i32.const 188)) (assert_return (invoke "Ç") (i32.const 189)) (assert_return (invoke "Çž") (i32.const 190)) (assert_return (invoke "Ç ") (i32.const 191)) (assert_return (invoke "Ǻ") (i32.const 192)) (assert_return (invoke "È€") (i32.const 193)) (assert_return (invoke "È‚") (i32.const 194)) (assert_return (invoke "Ȧ") (i32.const 195)) (assert_return (invoke "Ⱥ") (i32.const 196)) (assert_return (invoke "Ó") (i32.const 197)) (assert_return (invoke "Ó’") (i32.const 198)) (assert_return (invoke "ߊ") (i32.const 199)) (assert_return (invoke "à ¡") (i32.const 200)) (assert_return (invoke "à ¢") (i32.const 201)) (assert_return (invoke "à £") (i32.const 202)) (assert_return (invoke "à ¤") (i32.const 203)) (assert_return (invoke "à ¥") (i32.const 204)) (assert_return (invoke "ऄ") (i32.const 205)) (assert_return (invoke "अ") (i32.const 206)) (assert_return (invoke "ॲ") (i32.const 207)) (assert_return (invoke "অ") (i32.const 208)) (assert_return (invoke "ਅ") (i32.const 209)) (assert_return (invoke "અ") (i32.const 210)) (assert_return (invoke "ଅ") (i32.const 211)) (assert_return (invoke "à®…") (i32.const 212)) (assert_return (invoke "à°…") (i32.const 213)) (assert_return (invoke "ಅ") (i32.const 214)) (assert_return (invoke "à´…") (i32.const 215)) (assert_return (invoke "ะ") (i32.const 216)) (assert_return (invoke "ະ") (i32.const 217)) (assert_return (invoke "à¼") (i32.const 218)) (assert_return (invoke "ཨ") (i32.const 219)) (assert_return (invoke "ྸ") (i32.const 220)) (assert_return (invoke "အ") (i32.const 221)) (assert_return (invoke "ဢ") (i32.const 222)) (assert_return (invoke "ႜ") (i32.const 223)) (assert_return (invoke "á…¡") (i32.const 224)) (assert_return (invoke "አ") (i32.const 225)) (assert_return (invoke "á‹") (i32.const 226)) (assert_return (invoke "Ꭰ") (i32.const 227)) (assert_return (invoke "áŠ") (i32.const 228)) (assert_return (invoke "á–³") (i32.const 229)) (assert_return (invoke "ᚨ") (i32.const 230)) (assert_return (invoke "ᚪ") (i32.const 231)) (assert_return (invoke "ᛆ") (i32.const 232)) (assert_return (invoke "ᜀ") (i32.const 233)) (assert_return (invoke "ᜠ") (i32.const 234)) (assert_return (invoke "á€") (i32.const 235)) (assert_return (invoke "á ") (i32.const 236)) (assert_return (invoke "á  ") (i32.const 237)) (assert_return (invoke "ᢇ") (i32.const 238)) (assert_return (invoke "ᤠ") (i32.const 239)) (assert_return (invoke "ᥣ") (i32.const 240)) (assert_return (invoke "ᨕ") (i32.const 241)) (assert_return (invoke "á©‹") (i32.const 242)) (assert_return (invoke "á©¡") (i32.const 243)) (assert_return (invoke "ᮃ") (i32.const 244)) (assert_return (invoke "ᯀ") (i32.const 245)) (assert_return (invoke "á¯") (i32.const 246)) (assert_return (invoke "á°£") (i32.const 247)) (assert_return (invoke "Ḁ") (i32.const 248)) (assert_return (invoke "Ạ") (i32.const 249)) (assert_return (invoke "Ả") (i32.const 250)) (assert_return (invoke "Ấ") (i32.const 251)) (assert_return (invoke "Ầ") (i32.const 252)) (assert_return (invoke "Ẩ") (i32.const 253)) (assert_return (invoke "Ẫ") (i32.const 254)) (assert_return (invoke "Ậ") (i32.const 255)) (assert_return (invoke "Ắ") (i32.const 256)) (assert_return (invoke "Ằ") (i32.const 257)) (assert_return (invoke "Ẳ") (i32.const 258)) (assert_return (invoke "Ẵ") (i32.const 259)) (assert_return (invoke "Ặ") (i32.const 260)) (assert_return (invoke "ã‚") (i32.const 261)) (assert_return (invoke "ã‚¢") (i32.const 262)) (assert_return (invoke "ㄚ") (i32.const 263)) (assert_return (invoke "ã…") (i32.const 264)) (assert_return (invoke "㈎") (i32.const 265)) (assert_return (invoke "ãˆ") (i32.const 266)) (assert_return (invoke "ãˆ") (i32.const 267)) (assert_return (invoke "㈑") (i32.const 268)) (assert_return (invoke "㈒") (i32.const 269)) (assert_return (invoke "㈓") (i32.const 270)) (assert_return (invoke "㈔") (i32.const 271)) (assert_return (invoke "㈕") (i32.const 272)) (assert_return (invoke "㈖") (i32.const 273)) (assert_return (invoke "㈗") (i32.const 274)) (assert_return (invoke "㈘") (i32.const 275)) (assert_return (invoke "㈙") (i32.const 276)) (assert_return (invoke "㈚") (i32.const 277)) (assert_return (invoke "㈛") (i32.const 278)) (assert_return (invoke "㉮") (i32.const 279)) (assert_return (invoke "㉯") (i32.const 280)) (assert_return (invoke "㉰") (i32.const 281)) (assert_return (invoke "㉱") (i32.const 282)) (assert_return (invoke "㉲") (i32.const 283)) (assert_return (invoke "㉳") (i32.const 284)) (assert_return (invoke "㉴") (i32.const 285)) (assert_return (invoke "㉵") (i32.const 286)) (assert_return (invoke "㉶") (i32.const 287)) (assert_return (invoke "㉷") (i32.const 288)) (assert_return (invoke "㉸") (i32.const 289)) (assert_return (invoke "㉹") (i32.const 290)) (assert_return (invoke "㉺") (i32.const 291)) (assert_return (invoke "㉻") (i32.const 292)) (assert_return (invoke "ã‹") (i32.const 293)) (assert_return (invoke "ꀊ") (i32.const 294)) (assert_return (invoke "ê“®") (i32.const 295)) (assert_return (invoke "ꕉ") (i32.const 296)) (assert_return (invoke "êš ") (i32.const 297)) (assert_return (invoke "ê €") (i32.const 298)) (assert_return (invoke "ê £") (i32.const 299)) (assert_return (invoke "ê¡") (i32.const 300)) (assert_return (invoke "ꢂ") (i32.const 301)) (assert_return (invoke "꣪") (i32.const 302)) (assert_return (invoke "ꤢ") (i32.const 303)) (assert_return (invoke "ꥆ") (i32.const 304)) (assert_return (invoke "ꦄ") (i32.const 305)) (assert_return (invoke "ꨀ") (i32.const 306)) (assert_return (invoke "ï½±") (i32.const 307)) (assert_return (invoke "ï¿‚") (i32.const 308)) (assert_return (invoke "ð€€") (i32.const 309)) (assert_return (invoke "ðŠ€") (i32.const 310)) (assert_return (invoke "ðŠ ") (i32.const 311)) (assert_return (invoke "ðŒ€") (i32.const 312)) (assert_return (invoke "ðŽ ") (i32.const 313)) (assert_return (invoke "ð’–") (i32.const 314)) (assert_return (invoke "ð”€") (i32.const 315)) (assert_return (invoke "ð€") (i32.const 316)) (assert_return (invoke "ð €") (i32.const 317)) (assert_return (invoke "ð¤ ") (i32.const 318)) (assert_return (invoke "ð¦€") (i32.const 319)) (assert_return (invoke "ð¦ ") (i32.const 320)) (assert_return (invoke "ð¨€") (i32.const 321)) (assert_return (invoke "ð¬€") (i32.const 322)) (assert_return (invoke "ð°€") (i32.const 323)) (assert_return (invoke "ð°") (i32.const 324)) (assert_return (invoke "ð²€") (i32.const 325)) (assert_return (invoke "ð‘€…") (i32.const 326)) (assert_return (invoke "𑂃") (i32.const 327)) (assert_return (invoke "ð‘„§") (i32.const 328)) (assert_return (invoke "ð‘…") (i32.const 329)) (assert_return (invoke "𑆃") (i32.const 330)) (assert_return (invoke "𑈀") (i32.const 331)) (assert_return (invoke "𑊀") (i32.const 332)) (assert_return (invoke "𑊰") (i32.const 333)) (assert_return (invoke "𑌅") (i32.const 334)) (assert_return (invoke "ð‘°") (i32.const 335)) (assert_return (invoke "ð‘€") (i32.const 336)) (assert_return (invoke "ð‘’") (i32.const 337)) (assert_return (invoke "ð‘–€") (i32.const 338)) (assert_return (invoke "𑘀") (i32.const 339)) (assert_return (invoke "𑚀") (i32.const 340)) (assert_return (invoke "𑜒") (i32.const 341)) (assert_return (invoke "𑜠") (i32.const 342)) (assert_return (invoke "𑢡") (i32.const 343)) (assert_return (invoke "ð‘«•") (i32.const 344)) (assert_return (invoke "ð‘°€") (i32.const 345)) (assert_return (invoke "ð‘²") (i32.const 346)) (assert_return (invoke "𑲯") (i32.const 347)) (assert_return (invoke "ð’€€") (i32.const 348)) (assert_return (invoke "ð–§•") (i32.const 349)) (assert_return (invoke "𖩆") (i32.const 350)) (assert_return (invoke "ð–«§") (i32.const 351)) (assert_return (invoke "ð–½”") (i32.const 352)) (assert_return (invoke "ð›±") (i32.const 353)) (assert_return (invoke "𛱤") (i32.const 354)) (assert_return (invoke "ðž £") (i32.const 355)) (assert_return (invoke "🇦") (i32.const 356)) (assert_return (invoke "â±­") (i32.const 357)) (assert_return (invoke "Λ") (i32.const 358)) (assert_return (invoke "â±°") (i32.const 359)) (assert_return (invoke "ª") (i32.const 360)) (assert_return (invoke "∀") (i32.const 361)) (assert_return (invoke "₳") (i32.const 362)) (assert_return (invoke "ð¤€") (i32.const 363)) (assert_return (invoke "â²€") (i32.const 364)) (assert_return (invoke "ðŒ°") (i32.const 365)) (assert_return (invoke "Ά") (i32.const 366)) (assert_return (invoke "Α") (i32.const 367)) (assert_return (invoke "Ἀ") (i32.const 368)) (assert_return (invoke "Ἁ") (i32.const 369)) (assert_return (invoke "Ἂ") (i32.const 370)) (assert_return (invoke "Ἃ") (i32.const 371)) (assert_return (invoke "Ἄ") (i32.const 372)) (assert_return (invoke "á¼") (i32.const 373)) (assert_return (invoke "Ἆ") (i32.const 374)) (assert_return (invoke "á¼") (i32.const 375)) (assert_return (invoke "ᾈ") (i32.const 376)) (assert_return (invoke "ᾉ") (i32.const 377)) (assert_return (invoke "ᾊ") (i32.const 378)) (assert_return (invoke "ᾋ") (i32.const 379)) (assert_return (invoke "ᾌ") (i32.const 380)) (assert_return (invoke "á¾") (i32.const 381)) (assert_return (invoke "ᾎ") (i32.const 382)) (assert_return (invoke "á¾") (i32.const 383)) (assert_return (invoke "Ᾰ") (i32.const 384)) (assert_return (invoke "á¾¹") (i32.const 385)) (assert_return (invoke "Ὰ") (i32.const 386)) (assert_return (invoke "á¾»") (i32.const 387)) (assert_return (invoke "á¾¼") (i32.const 388)) (assert_return (invoke "ðš¨") (i32.const 389)) (assert_return (invoke "ð›¢") (i32.const 390)) (assert_return (invoke "ðœœ") (i32.const 391)) (assert_return (invoke "ð–") (i32.const 392)) (assert_return (invoke "ðž") (i32.const 393)) (assert_return (invoke "â¶") (i32.const 394)) (assert_return (invoke "âº") (i32.const 395)) (assert_return (invoke "⩜") (i32.const 396)) (assert_return (invoke "á—…") (i32.const 397)) (assert_return (invoke "Ꭺ") (i32.const 398)) (assert_return (invoke ")˺˼ð”—ð…´ð…¶ð…¸ð…ºâ¾â‚Žâ©â«âŸ¯ï´¿ï¸¶ï¹šï¼‰ï½ ó €©â³âµâŸ§âŸ©âŸ«âŸ­â¦ˆâ¦Šâ¦–⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]ï½ï½£ó ó ½Â»â€™â€â€ºâ¯") (i32.const 399)) (assert_return (invoke "(˹˻𔗎ð…³ð…µð…·ð…¹â½â‚â¨âªâŸ®ï´¾ï¸µï¹™ï¼ˆï½Ÿó €¨â²â´âŸ¦âŸ¨âŸªâŸ¬â¦‡â¦‰â¦•⸢⸤︗︷︹︻︽︿ï¹ï¹ƒï¹‡ï¹›ï¹ï¼»ï½›ï½¢ó ›ó »Â«â€˜â€œâ€¹â®") (i32.const 400)) (assert_return (invoke "ðª‹ðª¤") (i32.const 401)) (assert_return (invoke "ðª‹") (i32.const 402)) (assert_return (invoke "½") (i32.const 403)) (assert_return (invoke "1â„2") (i32.const 404)) (assert_return (invoke "1/2") (i32.const 405)) (assert_return (invoke "à­³") (i32.const 406)) (assert_return (invoke "൴") (i32.const 407)) (assert_return (invoke "â³½") (i32.const 408)) (assert_return (invoke "ê ±") (i32.const 409)) (assert_return (invoke "ð…") (i32.const 410)) (assert_return (invoke "ð…µ") (i32.const 411)) (assert_return (invoke "ð…¶") (i32.const 412)) (assert_return (invoke "ð¦½") (i32.const 413)) (assert_return (invoke "ð¹»") (i32.const 414)) (assert_return (invoke """) (i32.const 415)) (assert_return (invoke "\7f") (i32.const 416)) (assert_return (invoke "\08") (i32.const 417)) (assert_return (invoke "⌫") (i32.const 418)) (assert_return (invoke "⌦") (i32.const 419)) (assert_return (invoke "âˆ") (i32.const 420)) (assert_return (invoke "â¡") (i32.const 421)) (assert_return (invoke "á·»") (i32.const 422)) (assert_return (invoke "\0f") (i32.const 423)) (assert_return (invoke "â†") (i32.const 424)) (assert_return (invoke "⌧") (i32.const 425)) (assert_return (invoke "â’") (i32.const 426)) (assert_return (invoke "â”") (i32.const 427)) (assert_return (invoke "â¢") (i32.const 428)) (assert_return (invoke "â«") (i32.const 429)) (assert_return (invoke "\1a") (i32.const 430)) (assert_return (invoke "â¦") (i32.const 431)) (assert_return (invoke "âš") (i32.const 432)) (assert_return (invoke "") (i32.const 433)) (assert_return (invoke "?") (i32.const 434)) (assert_return (invoke "¿") (i32.const 435)) (assert_return (invoke "᥅") (i32.const 436)) (assert_return (invoke ";") (i32.const 437)) (assert_return (invoke "Õž") (i32.const 438)) (assert_return (invoke "ØŸ") (i32.const 439)) (assert_return (invoke "á§") (i32.const 440)) (assert_return (invoke "â‡") (i32.const 441)) (assert_return (invoke "â°") (i32.const 442)) (assert_return (invoke "â“") (i32.const 443)) (assert_return (invoke "â”") (i32.const 444)) (assert_return (invoke "⳺") (i32.const 445)) (assert_return (invoke "â³»") (i32.const 446)) (assert_return (invoke "⸮") (i32.const 447)) (assert_return (invoke "㉄") (i32.const 448)) (assert_return (invoke "ê˜") (i32.const 449)) (assert_return (invoke "ê›·") (i32.const 450)) (assert_return (invoke "︖") (i32.const 451)) (assert_return (invoke "ï¹–") (i32.const 452)) (assert_return (invoke "?") (i32.const 453)) (assert_return (invoke "ð‘…ƒ") (i32.const 454)) (assert_return (invoke "𞥟") (i32.const 455)) (assert_return (invoke "󠀿") (i32.const 456)) (assert_return (invoke "ð–¡„") (i32.const 457)) (assert_return (invoke "⯑") (i32.const 458)) (assert_return (invoke "¶") (i32.const 459)) (assert_return (invoke "â‹") (i32.const 460)) (assert_return (invoke "Ü€") (i32.const 461)) (assert_return (invoke "჻") (i32.const 462)) (assert_return (invoke "á¨") (i32.const 463)) (assert_return (invoke "〷") (i32.const 464)) (assert_return (invoke "â¡") (i32.const 465)) (assert_return (invoke "â¸") (i32.const 466)) (assert_return (invoke "â¸") (i32.const 467)) (assert_return (invoke "⸑") (i32.const 468)) (assert_return (invoke "⸎") (i32.const 469)) (assert_return (invoke "\14") (i32.const 470)) (assert_return (invoke "☙") (i32.const 471)) (assert_return (invoke "⸿") (i32.const 472)) (assert_return (invoke "〇") (i32.const 473)) (assert_return (invoke "๛") (i32.const 474)) (assert_return (invoke "ê™®") (i32.const 475)) (assert_return (invoke "Ï“") (i32.const 476)) (assert_return (invoke "Ï”") (i32.const 477)) (assert_return (invoke "ẛ") (i32.const 478)) (module ;; Test that we can use indices instead of names to reference imports, ;; exports, functions and parameters. (import "spectest" "print_i32" (func (param i32))) (func (import "spectest" "print_i32") (param i32)) (func (param i32) (param i32) (call 0 (local.get 0)) (call 1 (local.get 1)) ) (export "print32" (func 2)) ) (assert_return (invoke "print32" (i32.const 42) (i32.const 123))) binaryen-version_108/test/spec/nop.wast000066400000000000000000000376061423707623100203660ustar00rootroot00000000000000;; Test `nop` operator. (module ;; Auxiliary definitions (func $dummy) (func $3-ary (param i32 i32 i32) (result i32) local.get 0 local.get 1 local.get 2 i32.sub i32.add ) (memory 1) (func (export "as-func-first") (result i32) (nop) (i32.const 1) ) (func (export "as-func-mid") (result i32) (call $dummy) (nop) (i32.const 2) ) (func (export "as-func-last") (result i32) (call $dummy) (i32.const 3) (nop) ) (func (export "as-func-everywhere") (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) (func (export "as-drop-first") (param i32) (nop) (local.get 0) (drop) ) (func (export "as-drop-last") (param i32) (local.get 0) (nop) (drop) ) (func (export "as-drop-everywhere") (param i32) (nop) (nop) (local.get 0) (nop) (nop) (drop) ) (func (export "as-select-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid1") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (local.get 0) (select) ) (func (export "as-select-mid2") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (local.get 0) (select) ) (func (export "as-select-last") (param i32) (result i32) (local.get 0) (local.get 0) (local.get 0) (nop) (select) ) (func (export "as-select-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (select) ) (func (export "as-block-first") (result i32) (block (result i32) (nop) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-block-last") (result i32) (block (result i32) (nop) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-block-everywhere") (result i32) (block (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-loop-first") (result i32) (loop (result i32) (nop) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (nop) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (call $dummy) (i32.const 3) (nop)) ) (func (export "as-loop-everywhere") (result i32) (loop (result i32) (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) ) ) (func (export "as-if-condition") (param i32) (local.get 0) (nop) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (if (local.get 0) (then (nop)) (else (call $dummy))) ) (func (export "as-if-else") (param i32) (if (local.get 0) (then (call $dummy)) (else (nop))) ) (func (export "as-br-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (br 0)) ) (func (export "as-br-last") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (br 0)) ) (func (export "as-br-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (br 0)) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_if 0)) ) (func (export "as-br_if-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_if 0)) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_if 0)) ) (func (export "as-br_if-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_if 0) ) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (nop) (local.get 0) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-mid") (param i32) (result i32) (block (result i32) (local.get 0) (nop) (local.get 0) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (local.get 0) (local.get 0) (nop) (br_table 0 0)) ) (func (export "as-br_table-everywhere") (param i32) (result i32) (block (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (br_table 0 0) ) ) (func (export "as-return-first") (param i32) (result i32) (nop) (local.get 0) (return) ) (func (export "as-return-last") (param i32) (result i32) (local.get 0) (nop) (return) ) (func (export "as-return-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (return) ) (func (export "as-call-first") (param i32 i32 i32) (result i32) (nop) (local.get 0) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid1") (param i32 i32 i32) (result i32) (local.get 0) (nop) (local.get 1) (local.get 2) (call $3-ary) ) (func (export "as-call-mid2") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (nop) (local.get 2) (call $3-ary) ) (func (export "as-call-last") (param i32 i32 i32) (result i32) (local.get 0) (local.get 1) (local.get 2) (nop) (call $3-ary) ) (func (export "as-call-everywhere") (param i32 i32 i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (local.get 2) (nop) (nop) (call $3-ary) ) (func (export "as-unary-first") (param i32) (result i32) (nop) (local.get 0) (i32.ctz) ) (func (export "as-unary-last") (param i32) (result i32) (local.get 0) (nop) (i32.ctz) ) (func (export "as-unary-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.ctz) ) (func (export "as-binary-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.add) ) (func (export "as-binary-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.add) ) (func (export "as-binary-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.add) ) (func (export "as-binary-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.add) ) (func (export "as-test-first") (param i32) (result i32) (nop) (local.get 0) (i32.eqz) ) (func (export "as-test-last") (param i32) (result i32) (local.get 0) (nop) (i32.eqz) ) (func (export "as-test-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) i32.eqz ) (func (export "as-compare-first") (param i32) (result i32) (nop) (local.get 0) (local.get 0) (i32.ne) ) (func (export "as-compare-mid") (param i32) (result i32) (local.get 0) (nop) (local.get 0) (i32.ne) ) (func (export "as-compare-last") (param i32) (result i32) (local.get 0) (local.get 0) (nop) (i32.lt_u) ) (func (export "as-compare-everywhere") (param i32) (result i32) (nop) (local.get 0) (nop) (nop) (local.get 0) (nop) (nop) (i32.le_s) ) (func (export "as-memory.grow-first") (param i32) (result i32) (nop) (local.get 0) (memory.grow) ) (func (export "as-memory.grow-last") (param i32) (result i32) (local.get 0) (nop) (memory.grow) ) (func (export "as-memory.grow-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (memory.grow) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (result i32) (block (result i32) (nop) (i32.const 1) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid1") (result i32) (block (result i32) (i32.const 1) (nop) (i32.const 2) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-mid2") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (nop) (i32.const 0) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-last") (result i32) (block (result i32) (i32.const 1) (i32.const 2) (i32.const 0) (nop) (call_indirect (type $check)) ) ) (func (export "as-call_indirect-everywhere") (result i32) (block (result i32) (nop) (nop) (i32.const 1) (nop) (nop) (i32.const 2) (nop) (nop) (i32.const 0) (nop) (nop) (call_indirect (type $check)) ) ) (func (export "as-local.set-first") (param i32) (result i32) (nop) (i32.const 2) (local.set 0) (local.get 0) ) (func (export "as-local.set-last") (param i32) (result i32) (i32.const 2) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.set-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.set 0) (local.get 0) ) (func (export "as-local.tee-first") (param i32) (result i32) (nop) (i32.const 2) (local.tee 0) ) (func (export "as-local.tee-last") (param i32) (result i32) (i32.const 2) (nop) (local.tee 0) ) (func (export "as-local.tee-everywhere") (param i32) (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (local.tee 0) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-first") (result i32) (nop) (i32.const 2) (global.set $a) (global.get $a) ) (func (export "as-global.set-last") (result i32) (i32.const 2) (nop) (global.set $a) (global.get $a) ) (func (export "as-global.set-everywhere") (result i32) (nop) (nop) (i32.const 2) (nop) (nop) (global.set 0) (global.get $a) ) (func (export "as-load-first") (param i32) (result i32) (nop) (local.get 0) (i32.load) ) (func (export "as-load-last") (param i32) (result i32) (local.get 0) (nop) (i32.load) ) (func (export "as-load-everywhere") (param i32) (result i32) (nop) (nop) (local.get 0) (nop) (nop) (i32.load) ) (func (export "as-store-first") (param i32 i32) (nop) (local.get 0) (local.get 1) (i32.store) ) (func (export "as-store-mid") (param i32 i32) (local.get 0) (nop) (local.get 1) (i32.store) ) (func (export "as-store-last") (param i32 i32) (local.get 0) (local.get 1) (nop) (i32.store) ) (func (export "as-store-everywhere") (param i32 i32) (nop) (nop) (local.get 0) (nop) (nop) (local.get 1) (nop) (nop) (i32.store) ) ) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last") (i32.const 3)) (assert_return (invoke "as-func-everywhere") (i32.const 4)) (assert_return (invoke "as-drop-first" (i32.const 0))) (assert_return (invoke "as-drop-last" (i32.const 0))) (assert_return (invoke "as-drop-everywhere" (i32.const 0))) (assert_return (invoke "as-select-first" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid1" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-mid2" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-last" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-select-everywhere" (i32.const 3)) (i32.const 3)) (assert_return (invoke "as-block-first") (i32.const 2)) (assert_return (invoke "as-block-mid") (i32.const 2)) (assert_return (invoke "as-block-last") (i32.const 3)) (assert_return (invoke "as-block-everywhere") (i32.const 4)) (assert_return (invoke "as-loop-first") (i32.const 2)) (assert_return (invoke "as-loop-mid") (i32.const 2)) (assert_return (invoke "as-loop-last") (i32.const 3)) (assert_return (invoke "as-loop-everywhere") (i32.const 4)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const -1))) (assert_return (invoke "as-if-then" (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4))) (assert_return (invoke "as-if-else" (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3))) (assert_return (invoke "as-br-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_if-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_if-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_if-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_if-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-br_table-first" (i32.const 4)) (i32.const 4)) (assert_return (invoke "as-br_table-mid" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-br_table-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-br_table-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-return-first" (i32.const 5)) (i32.const 5)) (assert_return (invoke "as-return-last" (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-return-everywhere" (i32.const 7)) (i32.const 7)) (assert_return (invoke "as-call-first" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid1" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) (assert_return (invoke "as-call-mid2" (i32.const 0) (i32.const 3) (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call-last" (i32.const 10) (i32.const 9) (i32.const -1)) (i32.const 20)) (assert_return (invoke "as-call-everywhere" (i32.const 2) (i32.const 1) (i32.const 5)) (i32.const -2)) (assert_return (invoke "as-unary-first" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-last" (i32.const 30)) (i32.const 1)) (assert_return (invoke "as-unary-everywhere" (i32.const 12)) (i32.const 2)) (assert_return (invoke "as-binary-first" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-mid" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-last" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-binary-everywhere" (i32.const 3)) (i32.const 6)) (assert_return (invoke "as-test-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-last" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-test-everywhere" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-compare-first" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-mid" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-last" (i32.const 3)) (i32.const 0)) (assert_return (invoke "as-compare-everywhere" (i32.const 3)) (i32.const 1)) (assert_return (invoke "as-memory.grow-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-last" (i32.const 2)) (i32.const 1)) (assert_return (invoke "as-memory.grow-everywhere" (i32.const 12)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid1") (i32.const 1)) (assert_return (invoke "as-call_indirect-mid2") (i32.const 1)) (assert_return (invoke "as-call_indirect-last") (i32.const 1)) (assert_return (invoke "as-call_indirect-everywhere") (i32.const 1)) (assert_return (invoke "as-local.set-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.set-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-local.tee-everywhere" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-global.set-first") (i32.const 2)) (assert_return (invoke "as-global.set-last") (i32.const 2)) (assert_return (invoke "as-global.set-everywhere") (i32.const 2)) (assert_return (invoke "as-load-first" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-last" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-load-everywhere" (i32.const 100)) (i32.const 0)) (assert_return (invoke "as-store-first" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-store-mid" (i32.const 0) (i32.const 2))) (assert_return (invoke "as-store-last" (i32.const 0) (i32.const 3))) (assert_return (invoke "as-store-everywhere" (i32.const 0) (i32.const 4))) (assert_invalid (module (func $type-i32 (result i32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-i64 (result i64) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f32 (result f32) (nop))) "type mismatch" ) (assert_invalid (module (func $type-f64 (result f64) (nop))) "type mismatch" ) binaryen-version_108/test/spec/of_string-overflow-hex-u32.fail.wast000066400000000000000000000000501423707623100255070ustar00rootroot00000000000000(module (func (i32.const 0x100000000))) binaryen-version_108/test/spec/of_string-overflow-hex-u64.fail.wast000066400000000000000000000000601423707623100255150ustar00rootroot00000000000000(module (func (i64.const 0x10000000000000000))) binaryen-version_108/test/spec/of_string-overflow-s32.fail.wast000066400000000000000000000000501423707623100247230ustar00rootroot00000000000000(module (func (i32.const -2147483649))) binaryen-version_108/test/spec/of_string-overflow-s64.fail.wast000066400000000000000000000000611423707623100247320ustar00rootroot00000000000000(module (func (i64.const -9223372036854775809))) binaryen-version_108/test/spec/of_string-overflow-u32.fail.wast000066400000000000000000000000471423707623100247330ustar00rootroot00000000000000(module (func (i32.const 4294967296))) binaryen-version_108/test/spec/of_string-overflow-u64.fail.wast000066400000000000000000000000611423707623100247340ustar00rootroot00000000000000(module (func (i64.const 18446744073709551616))) binaryen-version_108/test/spec/old_address.wast000066400000000000000000000030311423707623100220360ustar00rootroot00000000000000(module (import "spectest" "print" (func $print (param i32))) (memory 1) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "good") (param $i i32) (call $print (i32.load8_u offset=0 (local.get $i))) ;; 97 'a' (call $print (i32.load8_u offset=1 (local.get $i))) ;; 98 'b' (call $print (i32.load8_u offset=2 (local.get $i))) ;; 99 'c' (call $print (i32.load8_u offset=25 (local.get $i))) ;; 122 'z' (call $print (i32.load16_u offset=0 (local.get $i))) ;; 25185 'ab' (call $print (i32.load16_u align=1 (local.get $i))) ;; 25185 'ab' (call $print (i32.load16_u offset=1 align=1 (local.get $i))) ;; 25442 'bc' (call $print (i32.load16_u offset=2 (local.get $i))) ;; 25699 'cd' (call $print (i32.load16_u offset=25 align=1 (local.get $i))) ;; 122 'z\0' (call $print (i32.load offset=0 (local.get $i))) ;; 1684234849 'abcd' (call $print (i32.load offset=1 align=1 (local.get $i))) ;; 1701077858 'bcde' (call $print (i32.load offset=2 align=2 (local.get $i))) ;; 1717920867 'cdef' (call $print (i32.load offset=25 align=1 (local.get $i))) ;; 122 'z\0\0\0' ) (func (export "bad") (param $i i32) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (invoke "good" (i32.const 0)) (invoke "good" (i32.const 65507)) (assert_trap (invoke "good" (i32.const 65508)) "out of bounds memory access") (assert_trap (invoke "bad" (i32.const 0)) "out of bounds memory access") (assert_trap (invoke "bad" (i32.const 1)) "out of bounds memory access") binaryen-version_108/test/spec/old_address64.wast000066400000000000000000000030351423707623100222140ustar00rootroot00000000000000(module (import "spectest" "print" (func $print (param i32))) (memory i64 1) (data (i64.const 0) "abcdefghijklmnopqrstuvwxyz") (func (export "good") (param $i i64) (call $print (i32.load8_u offset=0 (local.get $i))) ;; 97 'a' (call $print (i32.load8_u offset=1 (local.get $i))) ;; 98 'b' (call $print (i32.load8_u offset=2 (local.get $i))) ;; 99 'c' (call $print (i32.load8_u offset=25 (local.get $i))) ;; 122 'z' (call $print (i32.load16_u offset=0 (local.get $i))) ;; 25185 'ab' (call $print (i32.load16_u align=1 (local.get $i))) ;; 25185 'ab' (call $print (i32.load16_u offset=1 align=1 (local.get $i))) ;; 25442 'bc' (call $print (i32.load16_u offset=2 (local.get $i))) ;; 25699 'cd' (call $print (i32.load16_u offset=25 align=1 (local.get $i))) ;; 122 'z\0' (call $print (i32.load offset=0 (local.get $i))) ;; 1684234849 'abcd' (call $print (i32.load offset=1 align=1 (local.get $i))) ;; 1701077858 'bcde' (call $print (i32.load offset=2 align=2 (local.get $i))) ;; 1717920867 'cdef' (call $print (i32.load offset=25 align=1 (local.get $i))) ;; 122 'z\0\0\0' ) (func (export "bad") (param $i i64) (drop (i32.load offset=4294967295 (local.get $i))) ) ) (invoke "good" (i64.const 0)) (invoke "good" (i64.const 65507)) (assert_trap (invoke "good" (i64.const 65508)) "out of bounds memory access") (assert_trap (invoke "bad" (i64.const 0)) "out of bounds memory access") (assert_trap (invoke "bad" (i64.const 1)) "out of bounds memory access") binaryen-version_108/test/spec/old_block.wast000066400000000000000000000164531423707623100215170ustar00rootroot00000000000000;; Test `block` operator (module ;; Auxiliary definition (func $dummy) (func (export "empty") (block) (block $l) ) (func (export "singular") (result i32) (block (nop)) (block i32 (i32.const 7)) ) (func (export "multi") (result i32) (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) (block i32 (call $dummy) (call $dummy) (call $dummy) (i32.const 8)) ) (func (export "nested") (result i32) (block i32 (block (call $dummy) (block) (nop)) (block i32 (call $dummy) (i32.const 9)) ) ) (func (export "deep") (result i32) (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (block i32 (call $dummy) (i32.const 150))) )))))) )))))) )))))) )))))) )))))) )))))) ) (func (export "as-unary-operand") (result i32) (i32.ctz (block i32 (call $dummy) (i32.const 13))) ) (func (export "as-binary-operand") (result i32) (i32.mul (block i32 (call $dummy) (i32.const 3)) (block i32 (call $dummy) (i32.const 4)) ) ) (func (export "as-test-operand") (result i32) (i32.eqz (block i32 (call $dummy) (i32.const 13))) ) (func (export "as-compare-operand") (result i32) (f32.gt (block f32 (call $dummy) (f32.const 3)) (block f32 (call $dummy) (f32.const 3)) ) ) (func (export "break-bare") (result i32) (block (br 0) (unreachable)) (block (br_if 0 (i32.const 1)) (unreachable)) (block (br_table 0 (i32.const 0)) (unreachable)) (block (br_table 0 0 0 (i32.const 1)) (unreachable)) (i32.const 19) ) (func (export "break-value") (result i32) (block i32 (br 0 (i32.const 18)) (i32.const 19)) ) (func (export "break-repeated") (result i32) (block i32 (br 0 (i32.const 18)) (br 0 (i32.const 19)) (drop (br_if 0 (i32.const 20) (i32.const 0))) (drop (br_if 0 (i32.const 20) (i32.const 1))) (br 0 (i32.const 21)) (br_table 0 (i32.const 22) (i32.const 4)) (br_table 0 0 0 (i32.const 23) (i32.const 1)) (i32.const 21) ) ) (func (export "break-inner") (result i32) (local i32) (local.set 0 (i32.const 0)) (local.set 0 (i32.add (local.get 0) (block i32 (block i32 (br 1 (i32.const 0x1)))))) (local.set 0 (i32.add (local.get 0) (block i32 (block (br 0)) (i32.const 0x2)))) (local.set 0 (i32.add (local.get 0) (block i32 (i32.ctz (br 0 (i32.const 0x4))))) ) (local.set 0 (i32.add (local.get 0) (block i32 (i32.ctz (block i32 (br 1 (i32.const 0x8)))))) ) (local.get 0) ) (func (export "effects") (result i32) (local i32) (block (local.set 0 (i32.const 1)) (local.set 0 (i32.mul (local.get 0) (i32.const 3))) (local.set 0 (i32.sub (local.get 0) (i32.const 5))) (local.set 0 (i32.mul (local.get 0) (i32.const 7))) (br 0) (local.set 0 (i32.mul (local.get 0) (i32.const 100))) ) (i32.eq (local.get 0) (i32.const -14)) ) ) (assert_return (invoke "empty")) (assert_return (invoke "singular") (i32.const 7)) (assert_return (invoke "multi") (i32.const 8)) (assert_return (invoke "nested") (i32.const 9)) (assert_return (invoke "deep") (i32.const 150)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 12)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-operand") (i32.const 0)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value") (i32.const 18)) (assert_return (invoke "break-repeated") (i32.const 18)) (assert_return (invoke "break-inner") (i32.const 0xf)) (assert_return (invoke "effects") (i32.const 1)) (assert_invalid (module (func $type-empty-i32 (result i32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (block))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (block))) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-void (block (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result i32) (block (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result i32) (block (f32.const 0)) )) "type mismatch" ) (; TODO(stack): soft failure (assert_invalid (module (func $type-value-num-vs-void-after-break (block (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num-after-break (result i32) (block (i32.const 1) (br 0) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num-after-break (result i32) (block (i32.const 1) (br 0) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-second-void-vs-num (result i32) (block i32 (br 0 (i32.const 1)) (br 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-break-second-num-vs-num (result i32) (block i32 (br 0 (i32.const 1)) (br 0 (f64.const 1))) )) "type mismatch" ) ;) (assert_invalid (module (func $type-break-last-void-vs-num (result i32) (block i32 (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-num (result i32) (block i32 (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-num (result i32) (block (br 0 (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-num (result i32) (block (br 0 (i64.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-void-vs-num (result i32) (block (br 0 (nop)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-num (result i32) (block (br 0 (i64.const 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-void (block i32 (block i32 (br 1 (i32.const 1))) (br 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-empty-vs-num (result i32) (block (block (br 1)) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-num (result i32) (block (block (br 1 (nop))) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-num (result i32) (block (block (br 1 (i64.const 1))) (br 0 (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-empty-vs-num (result i32) (i32.ctz (block (br 0))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-void-vs-num (result i32) (i64.ctz (block (br 0 (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-break-operand-num-vs-num (result i32) (i64.ctz (block (br 0 (i64.const 9)))) )) "type mismatch" ) binaryen-version_108/test/spec/old_br_if.wast000066400000000000000000000216721423707623100215050ustar00rootroot00000000000000;; Test `br_if` operator (module (func $dummy) (func (export "as-block-first") (param i32) (result i32) (block (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-mid") (param i32) (result i32) (block (call $dummy) (br_if 0 (local.get 0)) (return (i32.const 2))) (i32.const 3) ) (func (export "as-block-last") (param i32) (block (call $dummy) (call $dummy) (br_if 0 (local.get 0))) ) (func (export "as-block-first-value") (param i32) (result i32) (block i32 (drop (br_if 0 (i32.const 10) (local.get 0))) (return (i32.const 11))) ) (func (export "as-block-mid-value") (param i32) (result i32) (block i32 (call $dummy) (drop (br_if 0 (i32.const 20) (local.get 0))) (return (i32.const 21))) ) (func (export "as-block-last-value") (param i32) (result i32) (block i32 (call $dummy) (call $dummy) (br_if 0 (i32.const 11) (local.get 0)) ) ) (func (export "as-loop-first") (param i32) (result i32) (block (loop (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 3) ) (func (export "as-loop-mid") (param i32) (result i32) (block (loop (call $dummy) (br_if 1 (local.get 0)) (return (i32.const 2)))) (i32.const 4) ) (func (export "as-loop-last") (param i32) (loop (call $dummy) (br_if 1 (local.get 0))) ) (func (export "as-if-then") (param i32 i32) (block (if (local.get 0) (br_if 1 (local.get 1)) (call $dummy))) ) (func (export "as-if-else") (param i32 i32) (block (if (local.get 0) (call $dummy) (br_if 1 (local.get 1)))) ) (func (export "nested-block-value") (param i32) (result i32) (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (i32.add (i32.const 4) (block i32 (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (br 0 (block i32 (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4)) ) (i32.const 16) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (drop (br_if 0 (block i32 (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4)) (i32.const 1) )) (i32.const 16) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (block i32 (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1)) )) (i32.const 16) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (br_table 0 (block i32 (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 4)) (i32.const 1) ) (i32.const 16) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (br_table 0 (i32.const 4) (block i32 (drop (br_if 1 (i32.const 8) (local.get 0))) (i32.const 1)) ) (i32.const 16) ) ) ) ) (assert_return (invoke "as-block-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-block-mid" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-block-last" (i32.const 0))) (assert_return (invoke "as-block-last" (i32.const 1))) (assert_return (invoke "as-block-last-value" (i32.const 0)) (i32.const 11)) (assert_return (invoke "as-block-last-value" (i32.const 1)) (i32.const 11)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 4)) (assert_return (invoke "as-loop-last" (i32.const 0))) (assert_return (invoke "as-loop-last" (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 0))) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 4) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 0))) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 1))) (assert_return (invoke "as-if-else" (i32.const 3) (i32.const 1))) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 21)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 5)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 9)) (assert_invalid (module (func $type-false-i32 (block (i32.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-i64 (block (i64.ctz (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f32 (block (f32.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-false-f64 (block (f64.neg (br_if 0 (i32.const 0)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i32 (block (i32.ctz (br_if 0 (i32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-i64 (block (i64.ctz (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f32 (block (f32.neg (br_if 0 (f32.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-true-f64 (block (f64.neg (br_if 0 (i64.const 1)))))) "type mismatch" ) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block i32 (br_if 0 (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block i32 (br_if 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-void (block (br_if 0 (i32.const 0) (i32.const 1))) )) "type mismatch" ) (; TODO(stack): soft failure (assert_invalid (module (func $type-false-arg-poly-vs-empty (block (br_if 0 (unreachable) (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-poly-vs-empty (block (br_if 0 (unreachable) (i32.const 1))) )) "type mismatch" ) ;) (assert_invalid (module (func $type-false-arg-void-vs-num (result i32) (block i32 (br_if 0 (nop) (i32.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-void-vs-num (result i32) (block i32 (br_if 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-false-arg-num-vs-num (result i32) (block i32 (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-true-arg-num-vs-num (result i32) (block i32 (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-cond-void-vs-i32 (block (br_if 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cond-num-vs-i32 (block (br_if 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-void-vs-i32 (result i32) (block i32 (br_if 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-cond-num-vs-i32 (result i32) (block i32 (br_if 0 (i32.const 0) (i64.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $unbound-label (br_if 1 (i32.const 1)))) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_if 5 (i32.const 1)))))) "unknown label" ) (assert_invalid (module (func $large-label (br_if 0x10000001 (i32.const 1)))) "unknown label" ) binaryen-version_108/test/spec/old_call.wast000066400000000000000000000157201423707623100213340ustar00rootroot00000000000000;; Test `call` operator (module ;; Auxiliary definitions (func $const-i32 (result i32) (i32.const 0x132)) (func $const-i64 (result i64) (i64.const 0x164)) (func $const-f32 (result f32) (f32.const 0xf32)) (func $const-f64 (result f64) (f64.const 0xf64)) (func $id-i32 (param i32) (result i32) (local.get 0)) (func $id-i64 (param i64) (result i64) (local.get 0)) (func $id-f32 (param f32) (result f32) (local.get 0)) (func $id-f64 (param f64) (result f64) (local.get 0)) (func $f32-i32 (param f32 i32) (result i32) (local.get 1)) (func $i32-i64 (param i32 i64) (result i64) (local.get 1)) (func $f64-f32 (param f64 f32) (result f32) (local.get 1)) (func $i64-f64 (param i64 f64) (result f64) (local.get 1)) ;; Typing (func (export "type-i32") (result i32) (call $const-i32)) (func (export "type-i64") (result i64) (call $const-i64)) (func (export "type-f32") (result f32) (call $const-f32)) (func (export "type-f64") (result f64) (call $const-f64)) (func (export "type-first-i32") (result i32) (call $id-i32 (i32.const 32))) (func (export "type-first-i64") (result i64) (call $id-i64 (i64.const 64))) (func (export "type-first-f32") (result f32) (call $id-f32 (f32.const 1.32))) (func (export "type-first-f64") (result f64) (call $id-f64 (f64.const 1.64))) (func (export "type-second-i32") (result i32) (call $f32-i32 (f32.const 32.1) (i32.const 32)) ) (func (export "type-second-i64") (result i64) (call $i32-i64 (i32.const 32) (i64.const 64)) ) (func (export "type-second-f32") (result f32) (call $f64-f32 (f64.const 64) (f32.const 32)) ) (func (export "type-second-f64") (result f64) (call $i64-f64 (i64.const 64) (f64.const 64.1)) ) ;; Recursion (func $fac (export "fac") (param i64) (result i64) (if i64 (i64.eqz (local.get 0)) (i64.const 1) (i64.mul (local.get 0) (call $fac (i64.sub (local.get 0) (i64.const 1)))) ) ) (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) (if i64 (i64.eqz (local.get 0)) (local.get 1) (call $fac-acc (i64.sub (local.get 0) (i64.const 1)) (i64.mul (local.get 0) (local.get 1)) ) ) ) (func $fib (export "fib") (param i64) (result i64) (if i64 (i64.le_u (local.get 0) (i64.const 1)) (i64.const 1) (i64.add (call $fib (i64.sub (local.get 0) (i64.const 2))) (call $fib (i64.sub (local.get 0) (i64.const 1))) ) ) ) (func $even (export "even") (param i64) (result i32) (if i32 (i64.eqz (local.get 0)) (i32.const 44) (call $odd (i64.sub (local.get 0) (i64.const 1))) ) ) (func $odd (export "odd") (param i64) (result i32) (if i32 (i64.eqz (local.get 0)) (i32.const 99) (call $even (i64.sub (local.get 0) (i64.const 1))) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call $runaway)) (func $mutual-runaway1 (export "mutual-runaway") (call $mutual-runaway2)) (func $mutual-runaway2 (call $mutual-runaway1)) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) (assert_return (invoke "fac-acc" (i64.const 25) (i64.const 1)) (i64.const 7034535277573963776) ) (assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "even" (i64.const 0)) (i32.const 44)) (assert_return (invoke "even" (i64.const 1)) (i32.const 99)) (assert_return (invoke "even" (i64.const 10)) (i32.const 44)) (assert_return (invoke "even" (i64.const 7)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i64.const 20)) (i32.const 99)) (assert_return (invoke "odd" (i64.const 7)) (i32.const 44)) (assert_trap (invoke "runaway") "call stack exhausted") (assert_trap (invoke "mutual-runaway") "call stack exhausted") ;; Invalid typing (assert_invalid (module (func $type-void-vs-num (i32.eqz (call 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (i32.eqz (call 1))) (func (result i64) (i64.const 1)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-1 (call 1)) (func (param i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-0-vs-2 (call 1)) (func (param f64 i32)) ) "type mismatch" ) (assert_invalid (module (func $arity-1-vs-0 (call 1 (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $arity-2-vs-0 (call 1 (f64.const 2) (i32.const 1))) (func) ) "type mismatch" ) (assert_invalid (module (func $type-first-void-vs-num (call 1 (nop) (i32.const 1))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-second-void-vs-num (call 1 (i32.const 1) (nop))) (func (param i32 i32)) ) "type mismatch" ) (assert_invalid (module (func $type-first-num-vs-num (call 1 (f64.const 1) (i32.const 1))) (func (param i32 f64)) ) "type mismatch" ) (assert_invalid (module (func $type-second-num-vs-num (call 1 (i32.const 1) (f64.const 1))) (func (param f64 i32)) ) "type mismatch" ) ;; Unbound function (assert_invalid (module (func $unbound-func (call 1))) "unknown function" ) (assert_invalid (module (func $large-func (call 1012321300))) "unknown function" ) binaryen-version_108/test/spec/old_call_indirect.wast000066400000000000000000000267351423707623100232250ustar00rootroot00000000000000;; Test `call_indirect` operator (module ;; Auxiliary definitions (type $proc (func)) (type $out-i32 (func (result i32))) (type $out-i64 (func (result i64))) (type $out-f32 (func (result f32))) (type $out-f64 (func (result f64))) (type $over-i32 (func (param i32) (result i32))) (type $over-i64 (func (param i64) (result i64))) (type $over-f32 (func (param f32) (result f32))) (type $over-f64 (func (param f64) (result f64))) (type $f32-i32 (func (param f32 i32) (result i32))) (type $i32-i64 (func (param i32 i64) (result i64))) (type $f64-f32 (func (param f64 f32) (result f32))) (type $i64-f64 (func (param i64 f64) (result f64))) (type $over-i32-duplicate (func (param i32) (result i32))) (type $over-i64-duplicate (func (param i64) (result i64))) (type $over-f32-duplicate (func (param f32) (result f32))) (type $over-f64-duplicate (func (param f64) (result f64))) (func $const-i32 (type $out-i32) (i32.const 0x132)) (func $const-i64 (type $out-i64) (i64.const 0x164)) (func $const-f32 (type $out-f32) (f32.const 0xf32)) (func $const-f64 (type $out-f64) (f64.const 0xf64)) (func $id-i32 (type $over-i32) (local.get 0)) (func $id-i64 (type $over-i64) (local.get 0)) (func $id-f32 (type $over-f32) (local.get 0)) (func $id-f64 (type $over-f64) (local.get 0)) (func $i32-i64 (type $i32-i64) (local.get 1)) (func $i64-f64 (type $i64-f64) (local.get 1)) (func $f32-i32 (type $f32-i32) (local.get 1)) (func $f64-f32 (type $f64-f32) (local.get 1)) (func $over-i32-duplicate (type $over-i32-duplicate) (local.get 0)) (func $over-i64-duplicate (type $over-i64-duplicate) (local.get 0)) (func $over-f32-duplicate (type $over-f32-duplicate) (local.get 0)) (func $over-f64-duplicate (type $over-f64-duplicate) (local.get 0)) (table funcref (elem $const-i32 $const-i64 $const-f32 $const-f64 $id-i32 $id-i64 $id-f32 $id-f64 $f32-i32 $i32-i64 $f64-f32 $i64-f64 $fac $fib $even $odd $runaway $mutual-runaway1 $mutual-runaway2 $over-i32-duplicate $over-i64-duplicate $over-f32-duplicate $over-f64-duplicate ) ) ;; Typing (func (export "type-i32") (result i32) (call_indirect (type $out-i32) (i32.const 0))) (func (export "type-i64") (result i64) (call_indirect (type $out-i64) (i32.const 1))) (func (export "type-f32") (result f32) (call_indirect (type $out-f32) (i32.const 2))) (func (export "type-f64") (result f64) (call_indirect (type $out-f64) (i32.const 3))) (func (export "type-index") (result i64) (call_indirect (type $over-i64) (i64.const 100) (i32.const 5)) ) (func (export "type-first-i32") (result i32) (call_indirect (type $over-i32) (i32.const 32) (i32.const 4)) ) (func (export "type-first-i64") (result i64) (call_indirect (type $over-i64) (i64.const 64) (i32.const 5)) ) (func (export "type-first-f32") (result f32) (call_indirect (type $over-f32) (f32.const 1.32) (i32.const 6)) ) (func (export "type-first-f64") (result f64) (call_indirect (type $over-f64) (f64.const 1.64) (i32.const 7)) ) (func (export "type-second-i32") (result i32) (call_indirect (type $f32-i32) (f32.const 32.1) (i32.const 32) (i32.const 8)) ) (func (export "type-second-i64") (result i64) (call_indirect (type $i32-i64) (i32.const 32) (i64.const 64) (i32.const 9)) ) (func (export "type-second-f32") (result f32) (call_indirect (type $f64-f32) (f64.const 64) (f32.const 32) (i32.const 10)) ) (func (export "type-second-f64") (result f64) (call_indirect (type $i64-f64) (i64.const 64) (f64.const 64.1) (i32.const 11)) ) ;; Dispatch (func (export "dispatch") (param i32 i64) (result i64) (call_indirect (type $over-i64) (local.get 1) (local.get 0)) ) (func (export "dispatch-structural") (param i32) (result i64) (call_indirect (type $over-i64-duplicate) (i64.const 9) (local.get 0)) ) ;; Recursion (func $fac (export "fac") (type $over-i64) (if i64 (i64.eqz (local.get 0)) (i64.const 1) (i64.mul (local.get 0) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 12) ) ) ) ) (func $fib (export "fib") (type $over-i64) (if i64 (i64.le_u (local.get 0) (i64.const 1)) (i64.const 1) (i64.add (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 2)) (i32.const 13) ) (call_indirect (type $over-i64) (i64.sub (local.get 0) (i64.const 1)) (i32.const 13) ) ) ) ) (func $even (export "even") (param i32) (result i32) (if i32 (i32.eqz (local.get 0)) (i32.const 44) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 15) ) ) ) (func $odd (export "odd") (param i32) (result i32) (if i32 (i32.eqz (local.get 0)) (i32.const 99) (call_indirect (type $over-i32) (i32.sub (local.get 0) (i32.const 1)) (i32.const 14) ) ) ) ;; Stack exhaustion ;; Implementations are required to have every call consume some abstract ;; resource towards exhausting some abstract finite limit, such that ;; infinitely recursive test cases reliably trap in finite time. This is ;; because otherwise applications could come to depend on it on those ;; implementations and be incompatible with implementations that don't do ;; it (or don't do it under the same circumstances). (func $runaway (export "runaway") (call_indirect (type $proc) (i32.const 16))) (func $mutual-runaway1 (export "mutual-runaway") (call_indirect (type $proc) (i32.const 18))) (func $mutual-runaway2 (call_indirect (type $proc) (i32.const 17))) ) (assert_return (invoke "type-i32") (i32.const 0x132)) (assert_return (invoke "type-i64") (i64.const 0x164)) (assert_return (invoke "type-f32") (f32.const 0xf32)) (assert_return (invoke "type-f64") (f64.const 0xf64)) (assert_return (invoke "type-index") (i64.const 100)) (assert_return (invoke "type-first-i32") (i32.const 32)) (assert_return (invoke "type-first-i64") (i64.const 64)) (assert_return (invoke "type-first-f32") (f32.const 1.32)) (assert_return (invoke "type-first-f64") (f64.const 1.64)) (assert_return (invoke "type-second-i32") (i32.const 32)) (assert_return (invoke "type-second-i64") (i64.const 64)) (assert_return (invoke "type-second-f32") (f32.const 32)) (assert_return (invoke "type-second-f64") (f64.const 64.1)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) (assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) (assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) (assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) (assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) (assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call signature mismatch") (assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call signature mismatch") (assert_trap (invoke "dispatch" (i32.const 23) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") (assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") (assert_return (invoke "dispatch-structural" (i32.const 5)) (i64.const 9)) (assert_return (invoke "dispatch-structural" (i32.const 5)) (i64.const 9)) (assert_return (invoke "dispatch-structural" (i32.const 12)) (i64.const 362880)) (assert_return (invoke "dispatch-structural" (i32.const 20)) (i64.const 9)) (assert_trap (invoke "dispatch-structural" (i32.const 11)) "indirect call signature mismatch") (assert_trap (invoke "dispatch-structural" (i32.const 22)) "indirect call signature mismatch") (assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) (assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) (assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) (assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) (assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) (assert_return (invoke "even" (i32.const 0)) (i32.const 44)) (assert_return (invoke "even" (i32.const 1)) (i32.const 99)) (assert_return (invoke "even" (i32.const 10)) (i32.const 44)) (assert_return (invoke "even" (i32.const 7)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) (assert_return (invoke "odd" (i32.const 20)) (i32.const 99)) (assert_return (invoke "odd" (i32.const 7)) (i32.const 44)) (assert_trap (invoke "runaway") "call stack exhausted") (assert_trap (invoke "mutual-runaway") "call stack exhausted") ;; Invalid typing (assert_invalid (module (type (func)) (func $no-table (call_indirect (type 0) (i32.const 0))) ) "unknown table" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $type-void-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (result i64))) (table 0 funcref) (func $type-num-vs-num (i32.eqz (call_indirect (type 0) (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $arity-0-vs-1 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $arity-0-vs-2 (call_indirect (type 0) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-1-vs-0 (call_indirect (type 0) (i32.const 1) (i32.const 0))) ) "type mismatch" ) (assert_invalid (module (type (func)) (table 0 funcref) (func $arity-2-vs-0 (call_indirect (type 0) (f64.const 2) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-void-vs-i32 (call_indirect (type 0) (i32.const 1) (nop))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32))) (table 0 funcref) (func $type-func-num-vs-i32 (call_indirect (type 0) (i32.const 0) (i64.const 1))) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-first-void-vs-num (call_indirect (type 0) (nop) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 i32))) (table 0 funcref) (func $type-second-void-vs-num (call_indirect (type 0) (i32.const 1) (nop) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param i32 f64))) (table 0 funcref) (func $type-first-num-vs-num (call_indirect (type 0) (f64.const 1) (i32.const 1) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (type (func (param f64 i32))) (table 0 funcref) (func $type-second-num-vs-num (call_indirect (type 0) (i32.const 1) (f64.const 1) (i32.const 0)) ) ) "type mismatch" ) ;; Unbound type (assert_invalid (module (table 0 funcref) (func $unbound-type (call_indirect (type 1) (i32.const 0))) ) "unknown type" ) (assert_invalid (module (table 0 funcref) (func $large-type (call_indirect (type 1012321300) (i32.const 0))) ) "unknown type" ) binaryen-version_108/test/spec/old_exports.wast000066400000000000000000000117541423707623100221300ustar00rootroot00000000000000;; Functions (module (func) (export "a" (func 0))) (module (func) (export "a" (func 0)) (export "b" (func 0))) (module (func) (func) (export "a" (func 0)) (export "b" (func 1))) (module (func (export "a"))) (module (func $a (export "a"))) (module $Func (export "e" (func $f)) (func $f (param $n i32) (result i32) (return (i32.add (local.get $n) (i32.const 1))) ) ) (assert_return (invoke "e" (i32.const 42)) (i32.const 43)) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (module) (module $Other1) (assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) (assert_invalid (module (func) (export "a" (func 1))) "unknown function" ) (assert_invalid (module (func) (export "a" (func 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (func) (func) (export "a" (func 0)) (export "a" (func 1))) "duplicate export name" ) (assert_invalid (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (func) (table 0 funcref) (export "a" (func 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Globals (module (global i32 (i32.const 0)) (export "a" (global 0))) (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0))) (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1))) (module (global (export "a") i32 (i32.const 0))) (module (global $a (export "a") i32 (i32.const 0))) (module $Global (export "e" (global $g)) (global $g i32 (i32.const 42)) ) (assert_return (get "e") (i32.const 42)) (assert_return (get $Global "e") (i32.const 42)) (module) (module $Other2) (assert_return (get $Global "e") (i32.const 42)) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 1))) "unknown global" ) (assert_invalid (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (table 0 funcref) (export "a" (global 0)) (export "a" (table 0))) "duplicate export name" ) (assert_invalid (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Tables (module (table 0 funcref) (export "a" (table 0))) (module (table 0 funcref) (export "a" (table 0)) (export "b" (table 0))) ;; No multiple tables yet. ;; (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "b" (table 1))) (module (table (export "a") 0 funcref)) (module (table (export "a") 0 1 funcref)) (module (table $a (export "a") 0 funcref)) (module (table $a (export "a") 0 1 funcref)) (; TODO: access table ;) (assert_invalid (module (table 0 funcref) (export "a" (table 1))) "unknown table" ) (assert_invalid (module (table 0 funcref) (export "a" (table 0)) (export "a" (table 0))) "duplicate export name" ) ;; No multiple tables yet. ;; (assert_invalid ;; (module (table 0 funcref) (table 0 funcref) (export "a" (table 0)) (export "a" (table 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (table 0 funcref) (func) (export "a" (table 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (table 0 funcref) (memory 0) (export "a" (table 0)) (export "a" (memory 0))) "duplicate export name" ) ;; Memories (module (memory 0) (export "a" (memory 0))) (module (memory 0) (export "a" (memory 0)) (export "b" (memory 0))) ;; No multiple memories yet. ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1))) (module (memory (export "a") 0)) (module (memory (export "a") 0 1)) (module (memory $a (export "a") 0)) (module (memory $a (export "a") 0 1)) (; TODO: access memory ;) (assert_invalid (module (memory 0) (export "a" (memory 1))) "unknown memory" ) (assert_invalid (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0))) "duplicate export name" ) ;; No multiple memories yet. ;; (assert_invalid ;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1))) ;; "duplicate export name" ;; ) (assert_invalid (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0))) "duplicate export name" ) (assert_invalid (module (memory 0) (table 0 funcref) (export "a" (memory 0)) (export "a" (table 0))) "duplicate export name" ) binaryen-version_108/test/spec/old_float_exprs.wast000066400000000000000000004120011423707623100227400ustar00rootroot00000000000000;; Test interesting floating-point "expressions". These tests contain code ;; patterns which tempt common value-changing optimizations. ;; Test that x*y+z is not done with x87-style intermediate precision. (module (func (export "f64.no_contraction") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.9e87ce14273afp-103) (f64.const 0x1.2515ad31db63ep+664) (f64.const 0x1.868c6685e6185p+533)) (f64.const -0x1.da94885b11493p+561)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.da21c460a6f44p+52) (f64.const 0x1.60859d2e7714ap-321) (f64.const 0x1.e63f1b7b660e1p-302)) (f64.const 0x1.4672f256d1794p-268)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.f3eaf43f327cp-594) (f64.const 0x1.dfcc009906b57p+533) (f64.const 0x1.5984e03c520a1p-104)) (f64.const -0x1.d4797fb3db166p-60)) (assert_return (invoke "f64.no_contraction" (f64.const 0x1.dab6c772cb2e2p-69) (f64.const -0x1.d761663679a84p-101) (f64.const 0x1.f22f92c843226p-218)) (f64.const -0x1.b50d72dfcef68p-169)) (assert_return (invoke "f64.no_contraction" (f64.const -0x1.87c5def1e4d3dp-950) (f64.const -0x1.50cd5dab2207fp+935) (f64.const 0x1.e629bd0da8c5dp-54)) (f64.const 0x1.01b6feb4e78a7p-14)) ;; Test that x*y+z is not folded to fma. (module (func (export "f32.no_fma") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_fma") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_fma" (f32.const 0x1.a78402p+124) (f32.const 0x1.cf8548p-23) (f32.const 0x1.992adap+107)) (f32.const 0x1.a5262cp+107)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ed15a4p-28) (f32.const -0x1.613c72p-50) (f32.const 0x1.4757bp-88)) (f32.const -0x1.5406b8p-77)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.ae63a2p+37) (f32.const 0x1.b3a59ap-13) (f32.const 0x1.c16918p+10)) (f32.const 0x1.6e385cp+25)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.2a77fap-8) (f32.const -0x1.bb7356p+22) (f32.const -0x1.32be2ap+1)) (f32.const -0x1.0286d4p+15)) (assert_return (invoke "f32.no_fma" (f32.const 0x1.298fb6p+126) (f32.const -0x1.03080cp-70) (f32.const -0x1.418de6p+34)) (f32.const -0x1.2d15c6p+56)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.ac357ff46eed4p+557) (f64.const 0x1.852c01a5e7297p+430) (f64.const -0x1.05995704eda8ap+987)) (f64.const 0x1.855d905d338ep+987)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.e2fd6bf32010cp+749) (f64.const 0x1.01c2238d405e4p-130) (f64.const 0x1.2ecc0db4b9f94p+573)) (f64.const 0x1.e64eb07e063bcp+619)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.92b7c7439ede3p-721) (f64.const -0x1.6aa97586d3de6p+1011) (f64.const 0x1.8de4823f6358ap+237)) (f64.const -0x1.1d4139fd20ecdp+291)) (assert_return (invoke "f64.no_fma" (f64.const -0x1.466d30bddb453p-386) (f64.const -0x1.185a4d739c7aap+443) (f64.const 0x1.5f9c436fbfc7bp+55)) (f64.const 0x1.bd61a350fcc1ap+57)) (assert_return (invoke "f64.no_fma" (f64.const 0x1.7e2c44058a799p+52) (f64.const 0x1.c73b71765b8b2p+685) (f64.const -0x1.16c641df0b108p+690)) (f64.const 0x1.53ccb53de0bd1p+738)) ;; Test that x+0.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_add_zero") (param $x f32) (result f32) (f32.add (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_add_zero") (param $x f64) (result f64) (f64.add (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_add_zero" (f32.const -0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const -0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_add_zero" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_add_zero" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that 0.0 - x is not folded to -x. (module (func (export "f32.no_fold_zero_sub") (param $x f32) (result f32) (f32.sub (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_sub") (param $x f64) (result f64) (f64.sub (f64.const 0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f32.no_fold_zero_sub" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_zero_sub" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that x - 0.0 is not folded to x. (module (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) (f32.sub (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) (f64.sub (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that x*0.0 is not folded to 0.0. (module (func (export "f32.no_fold_mul_zero") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_mul_zero") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -1.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const -2.0)) (f32.const -0.0)) (assert_return (invoke "f32.no_fold_mul_zero" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -1.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const -2.0)) (f64.const -0.0)) (assert_return (invoke "f64.no_fold_mul_zero" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that x*1.0 is not folded to x. ;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". (module (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) (f32.mul (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) (f64.mul (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that 0.0/x is not folded to 0.0. (module (func (export "f32.no_fold_zero_div") (param $x f32) (result f32) (f32.div (f32.const 0.0) (local.get $x))) (func (export "f64.no_fold_zero_div") (param $x f64) (result f64) (f64.div (f64.const 0.0) (local.get $x))) ) (assert_return_nan (invoke "f32.no_fold_zero_div" (f32.const 0.0))) (assert_return_nan (invoke "f32.no_fold_zero_div" (f32.const -0.0))) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan)) (f32.const nan)) (assert_return (invoke "f32.no_fold_zero_div" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return_nan (invoke "f64.no_fold_zero_div" (f64.const 0.0))) (assert_return_nan (invoke "f64.no_fold_zero_div" (f64.const -0.0))) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan)) (f64.const nan)) (assert_return (invoke "f64.no_fold_zero_div" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that x/1.0 is not folded to x. (module (func (export "f32.no_fold_div_one") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 1.0))) (func (export "f64.no_fold_div_one") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 1.0))) ) (assert_return (invoke "f32.no_fold_div_one" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that x/-1.0 is not folded to -x. (module (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -1.0))) (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -1.0))) ) (assert_return (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that -0.0 - x is not folded to -x. (module (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) (f32.sub (f32.const -0.0) (local.get $x))) (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) (f64.sub (f64.const -0.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that -1.0 * x is not folded to -x. (module (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) (f32.mul (f32.const -1.0) (local.get $x))) (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) (f64.mul (f64.const -1.0) (local.get $x))) ) (assert_return (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that x == x is not folded to true. (module (func (export "f32.no_fold_eq_self") (param $x f32) (result i32) (f32.eq (local.get $x) (local.get $x))) (func (export "f64.no_fold_eq_self") (param $x f64) (result i32) (f64.eq (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_eq_self" (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_eq_self" (f64.const nan)) (i32.const 0)) ;; Test that x != x is not folded to false. (module (func (export "f32.no_fold_ne_self") (param $x f32) (result i32) (f32.ne (local.get $x) (local.get $x))) (func (export "f64.no_fold_ne_self") (param $x f64) (result i32) (f64.ne (local.get $x) (local.get $x))) ) (assert_return (invoke "f32.no_fold_ne_self" (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.no_fold_ne_self" (f64.const nan)) (i32.const 1)) ;; Test that x - x is not folded to 0.0. (module (func (export "f32.no_fold_sub_self") (param $x f32) (result f32) (f32.sub (local.get $x) (local.get $x))) (func (export "f64.no_fold_sub_self") (param $x f64) (result f64) (f64.sub (local.get $x) (local.get $x))) ) (assert_return_nan (invoke "f32.no_fold_sub_self" (f32.const infinity))) (assert_return (invoke "f32.no_fold_sub_self" (f32.const nan)) (f32.const nan)) (assert_return_nan (invoke "f64.no_fold_sub_self" (f64.const infinity))) (assert_return (invoke "f64.no_fold_sub_self" (f64.const nan)) (f64.const nan)) ;; Test that x/3 is not folded to x*(1/3). (module (func (export "f32.no_fold_div_3") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 3.0))) (func (export "f64.no_fold_div_3") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 3.0))) ) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.359c26p+50)) (f32.const -0x1.9cd032p+48)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.e45646p+93)) (f32.const -0x1.42e42ep+92)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.2a3916p-83)) (f32.const -0x1.8da172p-85)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.1f8b38p-124)) (f32.const -0x1.7f644ap-126)) (assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.d64f64p-56)) (f32.const -0x1.398a42p-57)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.a8a88d29e2cc3p+632)) (f64.const -0x1.1b1b08c69732dp+631)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.bcf52dc950972p-167)) (f64.const -0x1.28a373db8b0f7p-168)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.bd3c0d989f7a4p-874)) (f64.const 0x1.28d2b3bb14fc3p-875)) (assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.0138bf530a53cp+1007)) (f64.const -0x1.56f6546eb86fbp+1005)) (assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.052b87f9d794dp+415)) (f64.const 0x1.5c3a0aa274c67p+413)) ;; Test that (x*z)+(y*z) is not folded to (x+y)*z (module (func (export "f32.no_factor") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.add (f32.mul (local.get $x) (local.get $z)) (f32.mul (local.get $y) (local.get $z)))) (func (export "f64.no_factor") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.add (f64.mul (local.get $x) (local.get $z)) (f64.mul (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_factor" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7dp+109)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a342p-14)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651aaep+82)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa15p+55)) (assert_return (invoke "f32.no_factor" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9cep-50)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1ap-649)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const 0x0p+0)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e2p+198)) (assert_return (invoke "f64.no_factor" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f184p-512)) (assert_return (invoke "f64.no_factor" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af53p-90)) ;; Test that (x+y)*z is not folded to (x*z)+(y*z) (module (func (export "f32.no_distribute") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (f32.add (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_distribute") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (f64.add (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7d2p+109)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a34p-14)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651abp+82)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa14ep+55)) (assert_return (invoke "f32.no_distribute" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9ccp-50)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1bp-649)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e1fp+198)) (assert_return (invoke "f64.no_distribute" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f183p-512)) (assert_return (invoke "f64.no_distribute" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af52p-90)) ;; Test that x*(y/z) is not folded to (x*y)/z (module (func (export "f32.no_regroup_div_mul") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.mul (local.get $x) (f32.div (local.get $y) (local.get $z)))) (func (export "f64.no_regroup_div_mul") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.mul (local.get $x) (f64.div (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x1.2844cap-63)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x0p+0)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.792258p+118)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df2p-89)) (assert_return (invoke "f32.no_regroup_div_mul" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -0x1.47d0eap+66)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2dp+99)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x0p+0)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const infinity)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -0x1.926fa3cacc651p+255)) (assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x1.38d55f56406dp-639)) ;; Test that (x*y)/z is not folded to x*(y/z) (module (func (export "f32.no_regroup_mul_div") (param $x f32) (param $y f32) (param $z f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $z))) (func (export "f64.no_regroup_mul_div") (param $x f64) (param $y f64) (param $z f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $z))) ) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x0p+0)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x1.1a00e8p-96)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.79225ap+118)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df4p-89)) (assert_return (invoke "f32.no_regroup_mul_div" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -infinity)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2ep+99)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x1.0da0b6328e09p-907)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const 0x1.4886b6d9a9a79p+871)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -infinity)) (assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x0p+0)) ;; Test that x+y+z+w is not reassociated. (module (func (export "f32.no_reassociate_add") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.add (f32.add (f32.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_add") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.add (f64.add (f64.add (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.5f7ddcp+44) (f32.const 0x1.854e1p+34) (f32.const -0x1.b2068cp+47) (f32.const -0x1.209692p+41)) (f32.const -0x1.e26c76p+47)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.da3b78p-9) (f32.const -0x1.4312fap-7) (f32.const 0x1.0395e6p-4) (f32.const -0x1.6d5ea6p-7)) (f32.const 0x1.78b31ap-5)) (assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.fdb93ap+34) (f32.const -0x1.b6fce6p+41) (f32.const 0x1.c131d8p+44) (f32.const 0x1.8835b6p+38)) (f32.const 0x1.8ff3a2p+44)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.1739fcp+47) (f32.const 0x1.a4b186p+49) (f32.const -0x1.0c623cp+35) (f32.const 0x1.16a102p+51)) (f32.const 0x1.913ff6p+51)) (assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.733cfap+108) (f32.const -0x1.38d30cp+108) (f32.const 0x1.2f5854p+105) (f32.const -0x1.ccb058p+94)) (f32.const 0x1.813716p+106)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.697a4d9ff19a6p+841) (f64.const 0x1.b305466238397p+847) (f64.const 0x1.e0b2d9bfb4e72p+855) (f64.const -0x1.6e1f3ae2b06bbp+857)) (f64.const -0x1.eb0e5936f087ap+856)) (assert_return (invoke "f64.no_reassociate_add" (f64.const 0x1.00ef6746b30e1p-543) (f64.const 0x1.cc1cfafdf3fe1p-544) (f64.const -0x1.f7726df3ecba6p-543) (f64.const -0x1.b26695f99d307p-594)) (f64.const -0x1.074892e3fad76p-547)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.e807b3bd6d854p+440) (f64.const 0x1.cedae26c2c5fp+407) (f64.const -0x1.00ab6e1442541p+437) (f64.const 0x1.28538a55997bdp+397)) (f64.const -0x1.040e90bf871ebp+441)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ba2b6f35a2402p-317) (f64.const 0x1.ad1c3fea7cd9ep-307) (f64.const -0x1.93aace2bf1261p-262) (f64.const 0x1.9fddbe472847ep-260)) (f64.const 0x1.3af30abc2c01bp-260)) (assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ccb9c6092fb1dp+641) (f64.const -0x1.4b7c28c108244p+614) (f64.const 0x1.8a7cefef4bde1p+646) (f64.const -0x1.901b28b08b482p+644)) (f64.const 0x1.1810579194126p+646)) ;; Test that x*y*z*w is not reassociated. (module (func (export "f32.no_reassociate_mul") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) (f32.mul (f32.mul (f32.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) (func (export "f64.no_reassociate_mul") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) (f64.mul (f64.mul (f64.mul (local.get $x) (local.get $y)) (local.get $z)) (local.get $w))) ) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.950ba8p-116) (f32.const 0x1.efdacep-33) (f32.const -0x1.5f9bcp+102) (f32.const 0x1.f04508p-56)) (f32.const -0x1.ff356ep-101)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.5990aep-56) (f32.const -0x1.7dfb04p+102) (f32.const -0x1.4f774ap-125) (f32.const -0x1.595fe6p+70)) (f32.const -0x1.c7c8fcp-8)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.6ad9a4p-48) (f32.const -0x1.9138aap+55) (f32.const -0x1.4a774ep-40) (f32.const 0x1.1ff08p+76)) (f32.const 0x1.9cd8ecp+44)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.e1caecp-105) (f32.const 0x1.af0dd2p+77) (f32.const -0x1.016eep+56) (f32.const -0x1.ab70d6p+59)) (f32.const 0x1.54870ep+89)) (assert_return (invoke "f32.no_reassociate_mul" (f32.const -0x1.3b1dcp-99) (f32.const 0x1.4e5a34p-49) (f32.const -0x1.38ba5ap+3) (f32.const 0x1.7fb8eep+59)) (f32.const 0x1.5bbf98p-85)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const -0x1.e7842ab7181p-667) (f64.const -0x1.fabf40ceeceafp+990) (f64.const -0x1.1a38a825ab01ap-376) (f64.const -0x1.27e8ea469b14fp+664)) (f64.const 0x1.336eb428af4f3p+613)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.4ca2292a6acbcp+454) (f64.const 0x1.6ffbab850089ap-516) (f64.const -0x1.547c32e1f5b93p-899) (f64.const -0x1.c7571d9388375p+540)) (f64.const 0x1.1ac796954fc1p-419)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.73881a52e0401p-501) (f64.const -0x1.1b68dd9efb1a7p+788) (f64.const 0x1.d1c5e6a3eb27cp-762) (f64.const -0x1.56cb2fcc7546fp+88)) (f64.const 0x1.f508db92c34efp-386)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.2efa87859987cp+692) (f64.const 0x1.68e4373e241p-423) (f64.const 0x1.4e2d0fb383a57p+223) (f64.const -0x1.301d3265c737bp-23)) (f64.const -0x1.4b2b6c393f30cp+470)) (assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.1013f7498b95fp-234) (f64.const 0x1.d2d1c36fff138p-792) (f64.const -0x1.cbf1824ea7bfdp+728) (f64.const -0x1.440da9c8b836dp-599)) (f64.const 0x1.1a16512881c91p-895)) ;; Test that x/0 is not folded away. (module (func (export "f32.no_fold_div_0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const 0.0))) (func (export "f64.no_fold_div_0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const 0.0))) ) (assert_return (invoke "f32.no_fold_div_0" (f32.const 1.0)) (f32.const infinity)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -1.0)) (f32.const -infinity)) (assert_return (invoke "f32.no_fold_div_0" (f32.const infinity)) (f32.const infinity)) (assert_return (invoke "f32.no_fold_div_0" (f32.const -infinity)) (f32.const -infinity)) (assert_return_nan (invoke "f32.no_fold_div_0" (f32.const 0))) (assert_return_nan (invoke "f32.no_fold_div_0" (f32.const -0))) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f32.no_fold_div_0" (f32.const nan)) (f32.const nan)) (assert_return (invoke "f64.no_fold_div_0" (f64.const 1.0)) (f64.const infinity)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -1.0)) (f64.const -infinity)) (assert_return (invoke "f64.no_fold_div_0" (f64.const infinity)) (f64.const infinity)) (assert_return (invoke "f64.no_fold_div_0" (f64.const -infinity)) (f64.const -infinity)) (assert_return_nan (invoke "f64.no_fold_div_0" (f64.const 0))) (assert_return_nan (invoke "f64.no_fold_div_0" (f64.const -0))) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan)) (f64.const nan)) (assert_return (invoke "f64.no_fold_div_0" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that x/-0 is not folded away. (module (func (export "f32.no_fold_div_neg0") (param $x f32) (result f32) (f32.div (local.get $x) (f32.const -0.0))) (func (export "f64.no_fold_div_neg0") (param $x f64) (result f64) (f64.div (local.get $x) (f64.const -0.0))) ) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const 1.0)) (f32.const -infinity)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -1.0)) (f32.const infinity)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const infinity)) (f32.const -infinity)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const -infinity)) (f32.const infinity)) (assert_return_nan (invoke "f32.no_fold_div_neg0" (f32.const 0))) (assert_return_nan (invoke "f32.no_fold_div_neg0" (f32.const -0))) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan:0x200000)) (f32.const nan:0x400000)) (assert_return (invoke "f32.no_fold_div_neg0" (f32.const nan)) (f32.const nan)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const 1.0)) (f64.const -infinity)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -1.0)) (f64.const infinity)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const infinity)) (f64.const -infinity)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const -infinity)) (f64.const infinity)) (assert_return_nan (invoke "f64.no_fold_div_neg0" (f64.const 0))) (assert_return_nan (invoke "f64.no_fold_div_neg0" (f64.const -0))) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan)) (f64.const nan)) (assert_return (invoke "f64.no_fold_div_neg0" (f64.const nan:0x4000000000000)) (f64.const nan:0x8000000000000)) ;; Test that sqrt(x*x+y*y) is not folded to hypot. (module (func (export "f32.no_fold_to_hypot") (param $x f32) (param $y f32) (result f32) (f32.sqrt (f32.add (f32.mul (local.get $x) (local.get $x)) (f32.mul (local.get $y) (local.get $y))))) (func (export "f64.no_fold_to_hypot") (param $x f64) (param $y f64) (result f64) (f64.sqrt (f64.add (f64.mul (local.get $x) (local.get $x)) (f64.mul (local.get $y) (local.get $y))))) ) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.c2f338p-81) (f32.const 0x1.401b5ep-68)) (f32.const 0x1.401cccp-68)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.c38d1p-71) (f32.const -0x1.359ddp-107)) (f32.const 0x1.c36a62p-71)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.99e0cap-114) (f32.const -0x1.ed0c6cp-69)) (f32.const 0x1.ed0e48p-69)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.1b6ceap+5) (f32.const 0x1.5440bep+17)) (f32.const 0x1.5440cp+17)) (assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.8f019ep-76) (f32.const -0x1.182308p-71)) (f32.const 0x1.17e2bcp-71)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.1a0ac4f7c8711p-636) (f64.const 0x1.1372ebafff551p-534)) (f64.const 0x1.13463fa37014ep-534)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.b793512167499p+395) (f64.const -0x1.11cbc52af4c36p+410)) (f64.const 0x1.11cbc530783a2p+410)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.76777f44ff40bp-536) (f64.const -0x1.c3896e4dc1fbp-766)) (f64.const 0x1.8p-536)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const -0x1.889ac72cc6b5dp-521) (f64.const 0x1.8d7084e659f3bp-733)) (f64.const 0x1.889ac72ca843ap-521)) (assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.5ee588c02cb08p-670) (f64.const -0x1.05ce25788d9ecp-514)) (f64.const 0x1.05ce25788d9dfp-514)) ;; Test that 1.0/x isn't approximated. (module (func (export "f32.no_approximate_reciprocal") (param $x f32) (result f32) (f32.div (f32.const 1.0) (local.get $x))) ) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.2900b6p-10)) (f32.const -0x1.b950d4p+9)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.e7212p+127)) (f32.const 0x1.0d11f8p-128)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.42a466p-93)) (f32.const -0x1.963ee6p+92)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.5d0c32p+76)) (f32.const 0x1.778362p-77)) (assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.601de2p-82)) (f32.const -0x1.743d7ep+81)) ;; Test that 1.0/sqrt(x) isn't approximated or fused. (module (func (export "f32.no_approximate_reciprocal_sqrt") (param $x f32) (result f32) (f32.div (f32.const 1.0) (f32.sqrt (local.get $x)))) (func (export "f64.no_fuse_reciprocal_sqrt") (param $x f64) (result f64) (f64.div (f64.const 1.0) (f64.sqrt (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.6af12ap-43)) (f32.const 0x1.300ed4p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.e82fc6p-8)) (f32.const 0x1.72c376p+3)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.b9fa9cp-66)) (f32.const 0x1.85a9bap+32)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.f4f546p-44)) (f32.const 0x1.6e01c2p+21)) (assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.5da7aap-86)) (f32.const 0x1.b618cap+42)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.1568a63b55fa3p+889)) (f64.const 0x1.5bc9c74c9952p-445)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.239fcd0939cafp+311)) (f64.const 0x1.5334a922b4818p-156)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.6e36a24e11054p+104)) (f64.const 0x1.ac13f20977f29p-53)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.23ee173219f83p+668)) (f64.const 0x1.df753e055862dp-335)) (assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.b30f74caf9babp+146)) (f64.const 0x1.88bfc3d1764a9p-74)) ;; Test that sqrt(1.0/x) isn't approximated. (module (func (export "f32.no_approximate_sqrt_reciprocal") (param $x f32) (result f32) (f32.sqrt (f32.div (f32.const 1.0) (local.get $x)))) ) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.a4c986p+60)) (f32.const 0x1.8f5ac6p-31)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.50511ep-9)) (f32.const 0x1.3bdd46p+4)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.125ec2p+69)) (f32.const 0x1.5db572p-35)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.ba4c5p+13)) (f32.const 0x1.136f16p-7)) (assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.4a5be2p+104)) (f32.const 0x1.c2b5bp-53)) ;; Test that converting i32/i64 to f32/f64 and back isn't folded away (module (func (export "i32.no_fold_f32_s") (param i32) (result i32) (i32.trunc_f32_s (f32.convert_i32_s (local.get 0)))) (func (export "i32.no_fold_f32_u") (param i32) (result i32) (i32.trunc_f32_u (f32.convert_i32_u (local.get 0)))) (func (export "i64.no_fold_f64_s") (param i64) (result i64) (i64.trunc_f64_s (f64.convert_i64_s (local.get 0)))) (func (export "i64.no_fold_f64_u") (param i64) (result i64) (i64.trunc_f64_u (f64.convert_i64_u (local.get 0)))) ) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_s" (i32.const 0xf0000010)) (i32.const 0xf0000010)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000000)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000001)) (i32.const 0x1000000)) (assert_return (invoke "i32.no_fold_f32_u" (i32.const 0xf0000010)) (i32.const 0xf0000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_s" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000400)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) (assert_return (invoke "i64.no_fold_f64_u" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000000)) ;; Test that x+y-y is not folded to x. (module (func (export "f32.no_fold_add_sub") (param $x f32) (param $y f32) (result f32) (f32.sub (f32.add (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_add_sub") (param $x f64) (param $y f64) (result f64) (f64.sub (f64.add (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.b553e4p-47) (f32.const -0x1.67db2cp-26)) (f32.const 0x1.cp-47)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.a884dp-23) (f32.const 0x1.f2ae1ep-19)) (f32.const -0x1.a884ep-23)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.fc04fp+82) (f32.const -0x1.65403ap+101)) (f32.const -0x1p+83)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.870fa2p-78) (f32.const 0x1.c54916p-56)) (f32.const 0x1.8p-78)) (assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.17e966p-108) (f32.const -0x1.5fa61ap-84)) (f32.const -0x1p-107)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1053ea172dba8p-874) (f64.const 0x1.113c413408ac8p-857)) (f64.const -0x1.1053ea172p-874)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const 0x1.e377d54807972p-546) (f64.const 0x1.040a0a4d1ff7p-526)) (f64.const 0x1.e377d548p-546)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.75f53cd926b62p-30) (f64.const -0x1.66b176e602bb5p-3)) (f64.const -0x1.75f53dp-30)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.c450ff28332ap-341) (f64.const 0x1.15a5855023baep-305)) (f64.const -0x1.c451p-341)) (assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1ad4a596d3ea8p-619) (f64.const -0x1.17d81a41c0ea8p-588)) (f64.const -0x1.1ad4a8p-619)) ;; Test that x-y+y is not folded to x. (module (func (export "f32.no_fold_sub_add") (param $x f32) (param $y f32) (result f32) (f32.add (f32.sub (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_sub_add") (param $x f64) (param $y f64) (result f64) (f64.add (f64.sub (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.523cb8p+9) (f32.const 0x1.93096cp+8)) (f32.const -0x1.523cbap+9)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.a31a1p-111) (f32.const 0x1.745efp-95)) (f32.const -0x1.a4p-111)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.3d5328p+26) (f32.const 0x1.58567p+35)) (f32.const 0x1.3d54p+26)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.374e26p-39) (f32.const -0x1.66a5p-27)) (f32.const 0x1.374p-39)) (assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.320facp-3) (f32.const -0x1.ac069ap+14)) (f32.const 0x1.34p-3)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.8f92aad2c9b8dp+255) (f64.const -0x1.08cd4992266cbp+259)) (f64.const 0x1.8f92aad2c9b9p+255)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.5aaff55742c8bp-666) (f64.const 0x1.8f5f47181f46dp-647)) (f64.const 0x1.5aaff5578p-666)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.21bc52967a98dp+251) (f64.const -0x1.fcffaa32d0884p+300)) (f64.const 0x1.2p+251)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.9c78361f47374p-26) (f64.const -0x1.69d69f4edc61cp-13)) (f64.const 0x1.9c78361f48p-26)) (assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.4dbe68e4afab2p-367) (f64.const -0x1.dc24e5b39cd02p-361)) (f64.const 0x1.4dbe68e4afacp-367)) ;; Test that x*y/y is not folded to x. (module (func (export "f32.no_fold_mul_div") (param $x f32) (param $y f32) (result f32) (f32.div (f32.mul (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_mul_div") (param $x f64) (param $y f64) (result f64) (f64.div (f64.mul (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.cd859ap+54) (f32.const 0x1.6ca936p-47)) (f32.const -0x1.cd8598p+54)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.0b56b8p-26) (f32.const 0x1.48264cp-106)) (f32.const -0x1.0b56a4p-26)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.e7555cp-48) (f32.const -0x1.9161cp+48)) (f32.const -0x1.e7555ap-48)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const 0x1.aaa50ep+52) (f32.const -0x1.dfb39ep+60)) (f32.const 0x1.aaa50cp+52)) (assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.2b7dfap-92) (f32.const -0x1.7c4ca6p-37)) (f32.const -0x1.2b7dfep-92)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.3d79ff4118a1ap-837) (f64.const -0x1.b8b5dda31808cp-205)) (f64.const -0x1.3d79ff412263ep-837)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.f894d1ee6b3a4p+384) (f64.const 0x1.8c2606d03d58ap+585)) (f64.const 0x1.f894d1ee6b3a5p+384)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.a022260acc993p+238) (f64.const -0x1.5fbc128fc8e3cp-552)) (f64.const -0x1.a022260acc992p+238)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.9d4b8ed174f54p-166) (f64.const 0x1.ee3d467aeeac6p-906)) (f64.const 0x1.8dcc95a053b2bp-166)) (assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.e95ea897cdcd4p+660) (f64.const -0x1.854d5df085f2ep-327)) (f64.const -0x1.e95ea897cdcd5p+660)) ;; Test that x/y*y is not folded to x. (module (func (export "f32.no_fold_div_mul") (param $x f32) (param $y f32) (result f32) (f32.mul (f32.div (local.get $x) (local.get $y)) (local.get $y))) (func (export "f64.no_fold_div_mul") (param $x f64) (param $y f64) (result f64) (f64.mul (f64.div (local.get $x) (local.get $y)) (local.get $y))) ) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.dc6364p+38) (f32.const 0x1.d630ecp+29)) (f32.const -0x1.dc6362p+38)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.1f9836p-52) (f32.const -0x1.16c4e4p-18)) (f32.const -0x1.1f9838p-52)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.c5972cp-126) (f32.const -0x1.d6659ep+7)) (f32.const 0x1.c5980ep-126)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.2e3a9ep-74) (f32.const -0x1.353994p+59)) (f32.const -0x1.2e3a4p-74)) (assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.d96b82p-98) (f32.const 0x1.95d908p+27)) (f32.const 0x1.d96b84p-98)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const 0x1.d01f913a52481p-876) (f64.const -0x1.2cd0668b28344p+184)) (f64.const 0x1.d020daf71cdcp-876)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.81cb7d400918dp-714) (f64.const 0x1.7caa643586d6ep-53)) (f64.const -0x1.81cb7d400918ep-714)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.66904c97b5c8ep-145) (f64.const 0x1.5c3481592ad4cp+428)) (f64.const -0x1.66904c97b5c8dp-145)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.e75859d2f0765p-278) (f64.const -0x1.5f19b6ab497f9p+283)) (f64.const -0x1.e75859d2f0764p-278)) (assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.515fe9c3b5f5p+620) (f64.const 0x1.36be869c99f7ap+989)) (f64.const -0x1.515fe9c3b5f4fp+620)) ;; Test that promote(demote(x)) is not folded to x. (module (func (export "no_fold_demote_promote") (param $x f64) (result f64) (f64.promote_f32 (f32.demote_f64 (local.get $x)))) ) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.dece272390f5dp-133)) (f64.const -0x1.decep-133)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.19e6c79938a6fp-85)) (f64.const -0x1.19e6c8p-85)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.49b297ec44dc1p+107)) (f64.const 0x1.49b298p+107)) (assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.74f5bd865163p-88)) (f64.const -0x1.74f5bep-88)) (assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.26d675662367ep+104)) (f64.const 0x1.26d676p+104)) ;; Test that demote(promote(x)) is not folded to x, and aside from NaN is ;; bit-preserving. (module (func (export "no_fold_promote_demote") (param $x f32) (result f32) (f32.demote_f64 (f64.promote_f32 (local.get $x)))) ) (assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:0x600000)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x0p+0)) (f32.const 0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x0p+0)) (f32.const -0x0p+0)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffcp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffcp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-126)) (f32.const 0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-126)) (f32.const -0x1p-126)) (assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "no_fold_promote_demote" (f32.const infinity)) (f32.const infinity)) (assert_return (invoke "no_fold_promote_demote" (f32.const -infinity)) (f32.const -infinity)) ;; Test that demote(x+promote(y)) is not folded to demote(x)+y. (module (func (export "no_demote_mixed_add") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.add (local.get $x) (f64.promote_f32 (local.get $y))))) (func (export "no_demote_mixed_add_commuted") (param $y f32) (param $x f64) (result f32) (f32.demote_f64 (f64.add (f64.promote_f32 (local.get $y)) (local.get $x)))) ) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.f51a9d04854f9p-95) (f32.const 0x1.3f4e9cp-119)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.065b3d81ad8dp+37) (f32.const 0x1.758cd8p+38)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.626c80963bd17p-119) (f32.const -0x1.9bbf86p-121)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.0d5110e3385bbp-20) (f32.const 0x1.096f4ap-29)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.73852db4e5075p-20) (f32.const -0x1.24e474p-41)) (f32.const -0x1.738536p-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.3f4e9cp-119) (f64.const 0x1.f51a9d04854f9p-95)) (f32.const 0x1.f51a9ep-95)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.758cd8p+38) (f64.const 0x1.065b3d81ad8dp+37)) (f32.const 0x1.f8ba76p+38)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.9bbf86p-121) (f64.const 0x1.626c80963bd17p-119)) (f32.const 0x1.f6f93ep-120)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.096f4ap-29) (f64.const -0x1.0d5110e3385bbp-20)) (f32.const -0x1.0ccc5ap-20)) (assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.24e474p-41) (f64.const -0x1.73852db4e5075p-20)) (f32.const -0x1.738536p-20)) ;; Test that demote(x-promote(y)) is not folded to demote(x)-y. (module (func (export "no_demote_mixed_sub") (param $x f64) (param $y f32) (result f32) (f32.demote_f64 (f64.sub (local.get $x) (f64.promote_f32 (local.get $y))))) ) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a0a183220e9b1p+82) (f32.const 0x1.c5acf8p+61)) (f32.const 0x1.a0a174p+82)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.6e2c5ac39f63ep+30) (f32.const 0x1.d48ca4p+17)) (f32.const -0x1.6e3bp+30)) (assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.98c74350dde6ap+6) (f32.const 0x1.9d69bcp-12)) (f32.const -0x1.98c7aap+6)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.0459f34091dbfp-54) (f32.const 0x1.61ad08p-71)) (f32.const 0x1.045942p-54)) (assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a7498dca3fdb7p+14) (f32.const 0x1.ed21c8p+15)) (f32.const -0x1.197d02p+15)) ;; Test that converting between integer and float and back isn't folded away. (module (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i32_s (i32.trunc_f32_u (local.get $x)))) (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_s (local.get $x)))) (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i32_u (i32.trunc_f32_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i32_s (i32.trunc_f64_u (local.get $x)))) (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_s (local.get $x)))) (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i32_u (i32.trunc_f64_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $x f32) (result f32) (f32.convert_i64_s (i64.trunc_f32_u (local.get $x)))) (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_s (local.get $x)))) (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $x f32) (result f32) (f32.convert_i64_u (i64.trunc_f32_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $x f64) (result f64) (f64.convert_i64_s (i64.trunc_f64_u (local.get $x)))) (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_s (local.get $x)))) (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $x f64) (result f64) (f64.convert_i64_u (i64.trunc_f64_u (local.get $x)))) ) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+32)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1.fffffffep+31)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+64)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) (assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1p+64)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) (assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) ;; Test that dividing by a loop-invariant constant isn't optimized to be a ;; multiplication by a reciprocal, which would be particularly tempting since ;; the reciprocal computation could be hoisted. (module (memory 1 1) (func (export "init") (param $i i32) (param $x f32) (f32.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f32) (local $i i32) (block $exit (loop $cont (f32.store (local.get $i) (f32.div (f32.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 4))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f32) (f32.load (local.get $i))) ) (invoke "init" (i32.const 0) (f32.const 15.1)) (invoke "init" (i32.const 4) (f32.const 15.2)) (invoke "init" (i32.const 8) (f32.const 15.3)) (invoke "init" (i32.const 12) (f32.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f32.const 15.1)) (assert_return (invoke "check" (i32.const 4)) (f32.const 15.2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 15.3)) (assert_return (invoke "check" (i32.const 12)) (f32.const 15.4)) (invoke "run" (i32.const 16) (f32.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f32.const 0x1.422222p+2)) (assert_return (invoke "check" (i32.const 4)) (f32.const 0x1.444444p+2)) (assert_return (invoke "check" (i32.const 8)) (f32.const 0x1.466666p+2)) (assert_return (invoke "check" (i32.const 12)) (f32.const 0x1.488888p+2)) (module (memory 1 1) (func (export "init") (param $i i32) (param $x f64) (f64.store (local.get $i) (local.get $x))) (func (export "run") (param $n i32) (param $z f64) (local $i i32) (block $exit (loop $cont (f64.store (local.get $i) (f64.div (f64.load (local.get $i)) (local.get $z)) ) (local.set $i (i32.add (local.get $i) (i32.const 8))) (br_if $cont (i32.lt_u (local.get $i) (local.get $n))) ) ) ) (func (export "check") (param $i i32) (result f64) (f64.load (local.get $i))) ) (invoke "init" (i32.const 0) (f64.const 15.1)) (invoke "init" (i32.const 8) (f64.const 15.2)) (invoke "init" (i32.const 16) (f64.const 15.3)) (invoke "init" (i32.const 24) (f64.const 15.4)) (assert_return (invoke "check" (i32.const 0)) (f64.const 15.1)) (assert_return (invoke "check" (i32.const 8)) (f64.const 15.2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 15.3)) (assert_return (invoke "check" (i32.const 24)) (f64.const 15.4)) (invoke "run" (i32.const 32) (f64.const 3.0)) (assert_return (invoke "check" (i32.const 0)) (f64.const 0x1.4222222222222p+2)) (assert_return (invoke "check" (i32.const 8)) (f64.const 0x1.4444444444444p+2)) (assert_return (invoke "check" (i32.const 16)) (f64.const 0x1.4666666666667p+2)) (assert_return (invoke "check" (i32.const 24)) (f64.const 0x1.4888888888889p+2)) ;; Test that ult/ugt/etc. aren't folded to olt/ogt/etc. (module (func (export "f32.ult") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.ule") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.ugt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.uge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.ult") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.ule") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.ugt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.uge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.ult" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) (assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) (assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const nan)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) (assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const nan)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) (assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const nan)) (i32.const 1)) ;; Test that x= y+z is not optimized to x >= y (monotonicity). ;; http://cs.nyu.edu/courses/spring13/CSCI-UA.0201-003/lecture6.pdf (module (func (export "f32.no_fold_add_le_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.le (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f32.no_fold_add_ge_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) (f32.ge (f32.add (local.get $x) (local.get $z)) (f32.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_le_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.le (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) (func (export "f64.no_fold_add_ge_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) (f64.ge (f64.add (local.get $x) (local.get $z)) (f64.add (local.get $y) (local.get $z)))) ) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const 0.0) (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const infinity) (f32.const -infinity) (f32.const infinity)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const 0.0) (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const infinity) (f64.const -infinity) (f64.const infinity)) (i32.const 0)) ;; Test that !(x < y) and friends are not optimized to x >= y and friends. (module (func (export "f32.not_lt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (local.get $x) (local.get $y)))) (func (export "f32.not_le") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (local.get $x) (local.get $y)))) (func (export "f32.not_gt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.not_ge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (local.get $x) (local.get $y)))) (func (export "f64.not_lt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (local.get $x) (local.get $y)))) (func (export "f64.not_le") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (local.get $x) (local.get $y)))) (func (export "f64.not_gt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.not_ge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.not_lt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_le" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_gt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f32.not_ge" (f32.const nan) (f32.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_lt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_le" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_gt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) (assert_return (invoke "f64.not_ge" (f64.const nan) (f64.const 0.0)) (i32.const 1)) ;; Test that a method for approximating a "machine epsilon" produces the expected ;; approximation. ;; http://blogs.mathworks.com/cleve/2014/07/07/floating-point-numbers/#24cb4f4d-b8a9-4c19-b22b-9d2a9f7f3812 (module (func (export "f32.epsilon") (result f32) (f32.sub (f32.const 1.0) (f32.mul (f32.const 3.0) (f32.sub (f32.div (f32.const 4.0) (f32.const 3.0)) (f32.const 1.0))))) (func (export "f64.epsilon") (result f64) (f64.sub (f64.const 1.0) (f64.mul (f64.const 3.0) (f64.sub (f64.div (f64.const 4.0) (f64.const 3.0)) (f64.const 1.0))))) ) (assert_return (invoke "f32.epsilon") (f32.const -0x1p-23)) (assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) ;; Test that floating-point numbers are not optimized as if they form a ;; trichotomy. (module (func (export "f32.no_trichotomy_lt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.lt (local.get $x) (local.get $y)) (f32.ge (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_le") (param $x f32) (param $y f32) (result i32) (i32.or (f32.le (local.get $x) (local.get $y)) (f32.gt (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_gt") (param $x f32) (param $y f32) (result i32) (i32.or (f32.gt (local.get $x) (local.get $y)) (f32.le (local.get $x) (local.get $y)))) (func (export "f32.no_trichotomy_ge") (param $x f32) (param $y f32) (result i32) (i32.or (f32.ge (local.get $x) (local.get $y)) (f32.lt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_lt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.lt (local.get $x) (local.get $y)) (f64.ge (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_le") (param $x f64) (param $y f64) (result i32) (i32.or (f64.le (local.get $x) (local.get $y)) (f64.gt (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_gt") (param $x f64) (param $y f64) (result i32) (i32.or (f64.gt (local.get $x) (local.get $y)) (f64.le (local.get $x) (local.get $y)))) (func (export "f64.no_trichotomy_ge") (param $x f64) (param $y f64) (result i32) (i32.or (f64.ge (local.get $x) (local.get $y)) (f64.lt (local.get $x) (local.get $y)))) ) (assert_return (invoke "f32.no_trichotomy_lt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_le" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_gt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f32.no_trichotomy_ge" (f32.const 0.0) (f32.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_lt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_le" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_gt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) (assert_return (invoke "f64.no_trichotomy_ge" (f64.const 0.0) (f64.const nan)) (i32.const 0)) binaryen-version_108/test/spec/old_float_literals.wast000066400000000000000000000236651423707623100234340ustar00rootroot00000000000000;; Test floating-point literal parsing. (module ;; f32 special values (func (export "f32.nan") (result i32) (i32.reinterpret_f32 (f32.const nan))) (func (export "f32.positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan))) (func (export "f32.negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan))) (func (export "f32.plain_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x400000))) (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x200000))) (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x7fffff))) (func (export "f32.misc_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x012345))) (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan:0x304050))) (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x2abcde))) (func (export "f32.infinity") (result i32) (i32.reinterpret_f32 (f32.const infinity))) (func (export "f32.positive_infinity") (result i32) (i32.reinterpret_f32 (f32.const +infinity))) (func (export "f32.negative_infinity") (result i32) (i32.reinterpret_f32 (f32.const -infinity))) ;; f32 numbers (func (export "f32.zero") (result i32) (i32.reinterpret_f32 (f32.const 0x0.0p0))) (func (export "f32.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0x0.0p0))) (func (export "f32.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0x0.0p0))) (func (export "f32.misc") (result i32) (i32.reinterpret_f32 (f32.const 0x1.921fb6p+2))) (func (export "f32.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-149))) (func (export "f32.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-126))) (func (export "f32.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffep+127))) (func (export "f32.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffcp-127))) (func (export "f32.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 0x1.p10))) ;; f32 in decimal format (func (export "f32_dec.zero") (result i32) (i32.reinterpret_f32 (f32.const 0.0e0))) (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0.0e0))) (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0.0e0))) (func (export "f32_dec.misc") (result i32) (i32.reinterpret_f32 (f32.const 6.28318548202514648))) (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 1.4013e-45))) (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754944e-38))) (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754942e-38))) (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 3.4028234e+38))) (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 1.e10))) ;; f64 special values (func (export "f64.nan") (result i64) (i64.reinterpret_f64 (f64.const nan))) (func (export "f64.positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan))) (func (export "f64.negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan))) (func (export "f64.plain_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x8000000000000))) (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x4000000000000))) (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0xfffffffffffff))) (func (export "f64.misc_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x0123456789abc))) (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan:0x3040506070809))) (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0x2abcdef012345))) (func (export "f64.infinity") (result i64) (i64.reinterpret_f64 (f64.const infinity))) (func (export "f64.positive_infinity") (result i64) (i64.reinterpret_f64 (f64.const +infinity))) (func (export "f64.negative_infinity") (result i64) (i64.reinterpret_f64 (f64.const -infinity))) ;; f64 numbers (func (export "f64.zero") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0p0))) (func (export "f64.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0x0.0p0))) (func (export "f64.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0x0.0p0))) (func (export "f64.misc") (result i64) (i64.reinterpret_f64 (f64.const 0x1.921fb54442d18p+2))) (func (export "f64.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0000000000001p-1022))) (func (export "f64.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 0x1p-1022))) (func (export "f64.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 0x0.fffffffffffffp-1022))) (func (export "f64.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 0x1.fffffffffffffp+1023))) (func (export "f64.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 0x1.p100))) ;; f64 numbers in decimal format (func (export "f64_dec.zero") (result i64) (i64.reinterpret_f64 (f64.const 0.0e0))) (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0.0e0))) (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0.0e0))) (func (export "f64_dec.misc") (result i64) (i64.reinterpret_f64 (f64.const 6.28318530717958623))) (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 4.94066e-324))) (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072012e-308))) (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072011e-308))) (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 1.7976931348623157e+308))) (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 1.e100))) ) (assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) (assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) (assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) (assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) (assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) (assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) (assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) (assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) (assert_return (invoke "f32.zero") (i32.const 0)) (assert_return (invoke "f32.positive_zero") (i32.const 0)) (assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32.min_positive") (i32.const 1)) (assert_return (invoke "f32.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) (assert_return (invoke "f32_dec.zero") (i32.const 0)) (assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) (assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32_dec.min_positive") (i32.const 1)) (assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) (assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) (assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) (assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) (assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) (assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) (assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) (assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) (assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) (assert_return (invoke "f64.zero") (i64.const 0)) (assert_return (invoke "f64.positive_zero") (i64.const 0)) (assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64.min_positive") (i64.const 1)) (assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) (assert_return (invoke "f64_dec.zero") (i64.const 0)) (assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) (assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64_dec.min_positive") (i64.const 1)) (assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) binaryen-version_108/test/spec/old_func.wast000066400000000000000000000374061423707623100213610ustar00rootroot00000000000000;; Test `func` declarations, i.e. functions (module ;; Auxiliary definition (type $sig (func)) (func $dummy) ;; Syntax (func) (func (export "f")) (func $f) (func $h (export "g")) (func (local)) (func (local) (local)) (func (local i32)) (func (local $x i32)) (func (local i32 f64 i64)) (func (local i32) (local f64)) (func (local i32 f32) (local $x i64) (local) (local i32 f64)) (func (param)) (func (param) (param)) (func (param i32)) (func (param $x i32)) (func (param i32 f64 i64)) (func (param i32) (param f64)) (func (param i32 f32) (param $x i64) (param) (param i32 f64)) (func (result i32) (unreachable)) (func (type $sig)) (func $complex (param i32 f32) (param $x i64) (param) (param i32) (result i32) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) (func $complex-sig (type $sig) (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) (unreachable) (unreachable) ) ;; Typing of locals (func (export "local-first-i32") (result i32) (local i32 i32) (local.get 0)) (func (export "local-first-i64") (result i64) (local i64 i64) (local.get 0)) (func (export "local-first-f32") (result f32) (local f32 f32) (local.get 0)) (func (export "local-first-f64") (result f64) (local f64 f64) (local.get 0)) (func (export "local-second-i32") (result i32) (local i32 i32) (local.get 1)) (func (export "local-second-i64") (result i64) (local i64 i64) (local.get 1)) (func (export "local-second-f32") (result f32) (local f32 f32) (local.get 1)) (func (export "local-second-f64") (result f64) (local f64 f64) (local.get 1)) (func (export "local-mixed") (result f64) (local f32) (local $x i32) (local i64 i32) (local) (local f64 i32) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of parameters (func (export "param-first-i32") (param i32 i32) (result i32) (local.get 0)) (func (export "param-first-i64") (param i64 i64) (result i64) (local.get 0)) (func (export "param-first-f32") (param f32 f32) (result f32) (local.get 0)) (func (export "param-first-f64") (param f64 f64) (result f64) (local.get 0)) (func (export "param-second-i32") (param i32 i32) (result i32) (local.get 1)) (func (export "param-second-i64") (param i64 i64) (result i64) (local.get 1)) (func (export "param-second-f32") (param f32 f32) (result f32) (local.get 1)) (func (export "param-second-f64") (param f64 f64) (result f64) (local.get 1)) (func (export "param-mixed") (param f32 i32) (param) (param $x i64) (param i32 f64 i32) (result f64) (drop (f32.neg (local.get 0))) (drop (i32.eqz (local.get 1))) (drop (i64.eqz (local.get 2))) (drop (i32.eqz (local.get 3))) (drop (f64.neg (local.get 4))) (drop (i32.eqz (local.get 5))) (local.get 4) ) ;; Typing of result (func (export "empty")) (func (export "value-void") (call $dummy)) (func (export "value-i32") (result i32) (i32.const 77)) (func (export "value-i64") (result i64) (i64.const 7777)) (func (export "value-f32") (result f32) (f32.const 77.7)) (func (export "value-f64") (result f64) (f64.const 77.77)) (func (export "value-block-void") (block (call $dummy) (call $dummy))) (func (export "value-block-i32") (result i32) (block i32 (call $dummy) (i32.const 77)) ) (func (export "return-empty") (return)) (func (export "return-i32") (result i32) (return (i32.const 78))) (func (export "return-i64") (result i64) (return (i64.const 7878))) (func (export "return-f32") (result f32) (return (f32.const 78.7))) (func (export "return-f64") (result f64) (return (f64.const 78.78))) (func (export "return-block-i32") (result i32) (return (block i32 (call $dummy) (i32.const 77))) ) (func (export "break-empty") (br 0)) (func (export "break-i32") (result i32) (br 0 (i32.const 79))) (func (export "break-i64") (result i64) (br 0 (i64.const 7979))) (func (export "break-f32") (result f32) (br 0 (f32.const 79.9))) (func (export "break-f64") (result f64) (br 0 (f64.const 79.79))) (func (export "break-block-i32") (result i32) (br 0 (block i32 (call $dummy) (i32.const 77))) ) (func (export "break-br_if-empty") (param i32) (br_if 0 (local.get 0)) ) (func (export "break-br_if-num") (param i32) (result i32) (drop (br_if 0 (i32.const 50) (local.get 0))) (i32.const 51) ) (func (export "break-br_table-empty") (param i32) (br_table 0 0 0 (local.get 0)) ) (func (export "break-br_table-num") (param i32) (result i32) (br_table 0 0 (i32.const 50) (local.get 0)) (i32.const 51) ) (func (export "break-br_table-nested-empty") (param i32) (block (br_table 0 1 0 (local.get 0))) ) (func (export "break-br_table-nested-num") (param i32) (result i32) (i32.add (block i32 (br_table 0 1 0 (i32.const 50) (local.get 0)) (i32.const 51)) (i32.const 2) ) ) ;; Default initialization of locals (func (export "init-local-i32") (result i32) (local i32) (local.get 0)) (func (export "init-local-i64") (result i64) (local i64) (local.get 0)) (func (export "init-local-f32") (result f32) (local f32) (local.get 0)) (func (export "init-local-f64") (result f64) (local f64) (local.get 0)) ;; Desugaring of implicit type signature (func $empty-sig-1) ;; should be assigned type $sig (func $complex-sig-1 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $empty-sig-2) ;; should be assigned type $sig (func $complex-sig-2 (param f64 i64 f64 i64 f64 i64 f32 i32)) (func $complex-sig-3 (param f64 i64 f64 i64 f64 i64 f32 i32)) (type $empty-sig-duplicate (func)) (type $complex-sig-duplicate (func (param f64 i64 f64 i64 f64 i64 f32 i32))) (table funcref (elem $complex-sig-3 $empty-sig-2 $complex-sig-1 $complex-sig-3 $empty-sig-1 ) ) (func (export "signature-explicit-reused") (call_indirect (type $sig) (i32.const 1)) (call_indirect (type $sig) (i32.const 4)) ) (func (export "signature-implicit-reused") ;; XXX: Use numeric indices in this test again once we have a ;; spec-compliant text parser. Original comment follows. ;; The implicit index 16 in this test depends on the function and ;; type definitions, and may need adapting if they change. (call_indirect (type 2) ;; XXX: was `(type 16)` (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) ) (call_indirect (type 2) ;; XXX: was `(type 16)` (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 2) ) (call_indirect (type 2) ;; XXX: was `(type 16)` (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 3) ) ) (func (export "signature-explicit-duplicate") (call_indirect (type $empty-sig-duplicate) (i32.const 1)) ) (func (export "signature-implicit-duplicate") (call_indirect (type $complex-sig-duplicate) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) (i32.const 0) ) ) ) (assert_return (invoke "local-first-i32") (i32.const 0)) (assert_return (invoke "local-first-i64") (i64.const 0)) (assert_return (invoke "local-first-f32") (f32.const 0)) (assert_return (invoke "local-first-f64") (f64.const 0)) (assert_return (invoke "local-second-i32") (i32.const 0)) (assert_return (invoke "local-second-i64") (i64.const 0)) (assert_return (invoke "local-second-f32") (f32.const 0)) (assert_return (invoke "local-second-f64") (f64.const 0)) (assert_return (invoke "local-mixed") (f64.const 0)) (assert_return (invoke "param-first-i32" (i32.const 2) (i32.const 3)) (i32.const 2) ) (assert_return (invoke "param-first-i64" (i64.const 2) (i64.const 3)) (i64.const 2) ) (assert_return (invoke "param-first-f32" (f32.const 2) (f32.const 3)) (f32.const 2) ) (assert_return (invoke "param-first-f64" (f64.const 2) (f64.const 3)) (f64.const 2) ) (assert_return (invoke "param-second-i32" (i32.const 2) (i32.const 3)) (i32.const 3) ) (assert_return (invoke "param-second-i64" (i64.const 2) (i64.const 3)) (i64.const 3) ) (assert_return (invoke "param-second-f32" (f32.const 2) (f32.const 3)) (f32.const 3) ) (assert_return (invoke "param-second-f64" (f64.const 2) (f64.const 3)) (f64.const 3) ) (assert_return (invoke "param-mixed" (f32.const 1) (i32.const 2) (i64.const 3) (i32.const 4) (f64.const 5.5) (i32.const 6) ) (f64.const 5.5) ) (assert_return (invoke "empty")) (assert_return (invoke "value-void")) (assert_return (invoke "value-i32") (i32.const 77)) (assert_return (invoke "value-i64") (i64.const 7777)) (assert_return (invoke "value-f32") (f32.const 77.7)) (assert_return (invoke "value-f64") (f64.const 77.77)) (assert_return (invoke "value-block-void")) (assert_return (invoke "value-block-i32") (i32.const 77)) (assert_return (invoke "return-empty")) (assert_return (invoke "return-i32") (i32.const 78)) (assert_return (invoke "return-i64") (i64.const 7878)) (assert_return (invoke "return-f32") (f32.const 78.7)) (assert_return (invoke "return-f64") (f64.const 78.78)) (assert_return (invoke "return-block-i32") (i32.const 77)) (assert_return (invoke "break-empty")) (assert_return (invoke "break-i32") (i32.const 79)) (assert_return (invoke "break-i64") (i64.const 7979)) (assert_return (invoke "break-f32") (f32.const 79.9)) (assert_return (invoke "break-f64") (f64.const 79.79)) (assert_return (invoke "break-block-i32") (i32.const 77)) (assert_return (invoke "break-br_if-empty" (i32.const 0))) (assert_return (invoke "break-br_if-empty" (i32.const 2))) (assert_return (invoke "break-br_if-num" (i32.const 0)) (i32.const 51)) (assert_return (invoke "break-br_if-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_table-empty" (i32.const 0))) (assert_return (invoke "break-br_table-empty" (i32.const 1))) (assert_return (invoke "break-br_table-empty" (i32.const 5))) (assert_return (invoke "break-br_table-empty" (i32.const -1))) (assert_return (invoke "break-br_table-num" (i32.const 0)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 1)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const 10)) (i32.const 50)) (assert_return (invoke "break-br_table-num" (i32.const -100)) (i32.const 50)) (assert_return (invoke "break-br_table-nested-empty" (i32.const 0))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 1))) (assert_return (invoke "break-br_table-nested-empty" (i32.const 3))) (assert_return (invoke "break-br_table-nested-empty" (i32.const -2))) (assert_return (invoke "break-br_table-nested-num" (i32.const 0)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 1)) (i32.const 50) ) (assert_return (invoke "break-br_table-nested-num" (i32.const 2)) (i32.const 52) ) (assert_return (invoke "break-br_table-nested-num" (i32.const -3)) (i32.const 52) ) (assert_return (invoke "init-local-i32") (i32.const 0)) (assert_return (invoke "init-local-i64") (i64.const 0)) (assert_return (invoke "init-local-f32") (f32.const 0)) (assert_return (invoke "init-local-f64") (f64.const 0)) (assert_return (invoke "signature-explicit-reused")) (assert_return (invoke "signature-implicit-reused")) (assert_return (invoke "signature-explicit-duplicate")) (assert_return (invoke "signature-implicit-duplicate")) ;; Invalid typing of locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) ;; Invalid typing of result (assert_invalid (module (func $type-empty-i32 (result i32))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64))) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result i32) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-void (i32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result i32) (f32.const 0) )) "type mismatch" ) (; TODO(stack): Should these become legal? (assert_invalid (module (func $type-value-void-vs-num-after-return (result i32) (return (i32.const 1)) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num-after-return (result i32) (return (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num-after-break (result i32) (br 0 (i32.const 1)) (nop) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num-after-break (result i32) (br 0 (i32.const 1)) (f32.const 0) )) "arity mismatch" ) ;) (assert_invalid (module (func $type-return-last-empty-vs-num (result i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-void-vs-num (result i32) (return (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-return-last-num-vs-num (result i32) (return (i64.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-return-empty-vs-num (result i32) (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-void-vs-num (result i32) (return (nop)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-num-vs-num (result i32) (return (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-return-first-num-vs-num (result i32) (return (i64.const 1)) (return (i32.const 1)) )) "type mismatch" ) (; TODO(stack): Should this become legal? (assert_invalid (module (func $type-return-second-num-vs-num (result i32) (return (i32.const 1)) (return (f64.const 1)) )) "type mismatch" ) ;) (assert_invalid (module (func $type-break-last-void-vs-num (result i32) (br 0) )) "type mismatch" ) (assert_invalid (module (func $type-break-last-num-vs-num (result i32) (br 0 (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-break-void-vs-num (result i32) (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-num-vs-num (result i32) (br 0 (i64.const 1)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-break-first-num-vs-num (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (; TODO(stack): soft failure (assert_invalid (module (func $type-break-second-num-vs-num (result i32) (br 0 (i32.const 1)) (br 0 (f64.const 1)) )) "type mismatch" ) ;) (assert_invalid (module (func $type-break-nested-empty-vs-num (result i32) (block (br 1)) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-void-vs-num (result i32) (block (br 1 (nop))) (br 0 (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-break-nested-num-vs-num (result i32) (block (br 1 (i64.const 1))) (br 0 (i32.const 1)) )) "type mismatch" ) binaryen-version_108/test/spec/old_globals.wast000066400000000000000000000043331423707623100220420ustar00rootroot00000000000000;; Test globals (module (global $a i32 (i32.const -2)) (global (;1;) f32 (f32.const -3)) (global (;2;) f64 (f64.const -4)) (global $b i64 (i64.const -5)) (global $x (mut i32) (i32.const -12)) (global (;5;) (mut f32) (f32.const -13)) (global (;6;) (mut f64) (f64.const -14)) (global $y (mut i64) (i64.const -15)) (func (export "get-a") (result i32) (global.get $a)) (func (export "get-b") (result i64) (global.get $b)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i64) (global.get $y)) (func (export "set-x") (param i32) (global.set $x (local.get 0))) (func (export "set-y") (param i64) (global.set $y (local.get 0))) (func (export "get-1") (result f32) (global.get 1)) (func (export "get-2") (result f64) (global.get 2)) (func (export "get-5") (result f32) (global.get 5)) (func (export "get-6") (result f64) (global.get 6)) (func (export "set-5") (param f32) (global.set 5 (local.get 0))) (func (export "set-6") (param f64) (global.set 6 (local.get 0))) ) (assert_return (invoke "get-a") (i32.const -2)) (assert_return (invoke "get-b") (i64.const -5)) (assert_return (invoke "get-x") (i32.const -12)) (assert_return (invoke "get-y") (i64.const -15)) (assert_return (invoke "get-1") (f32.const -3)) (assert_return (invoke "get-2") (f64.const -4)) (assert_return (invoke "get-5") (f32.const -13)) (assert_return (invoke "get-6") (f64.const -14)) (assert_return (invoke "set-x" (i32.const 6))) (assert_return (invoke "set-y" (i64.const 7))) (assert_return (invoke "set-5" (f32.const 8))) (assert_return (invoke "set-6" (f64.const 9))) (assert_return (invoke "get-x") (i32.const 6)) (assert_return (invoke "get-y") (i64.const 7)) (assert_return (invoke "get-5") (f32.const 8)) (assert_return (invoke "get-6") (f64.const 9)) (assert_invalid (module (global f32 (f32.const 0)) (func (global.set 0 (i32.const 1)))) "global is immutable" ) (assert_invalid (module (global f32 (f32.neg (f32.const 0)))) "constant expression required" ) (assert_invalid (module (global f32 (local.get 0))) "constant expression required" ) (assert_invalid (module (global i32 (f32.const 0))) "type mismatch" ) (assert_invalid (module (global i32 (global.get 0))) "unknown global" ) binaryen-version_108/test/spec/old_import.wast000066400000000000000000000147171423707623100217400ustar00rootroot00000000000000;; Functions (module (import "spectest" "print" (func (param i32))) (func (import "spectest" "print") (param i64)) (import "spectest" "print" (func $print_i32 (param i32))) (import "spectest" "print" (func $print_i64 (param i64))) (import "spectest" "print" (func $print_i32_f32 (param i32 f32))) (import "spectest" "print" (func $print_i64_f64 (param i64 f64))) (func $print_i32-2 (import "spectest" "print") (param i32)) (func $print_i64-2 (import "spectest" "print") (param i64)) (func (export "print32") (param $i i32) (call 0 (local.get $i)) (call $print_i32_f32 (i32.add (local.get $i) (i32.const 1)) (f32.const 42) ) (call $print_i32 (local.get $i)) (call $print_i32-2 (local.get $i)) ) (func (export "print64") (param $i i64) (call 1 (local.get $i)) (call $print_i64_f64 (i64.add (local.get $i) (i64.const 1)) (f64.const 53) ) (call $print_i64 (local.get $i)) (call $print_i64-2 (local.get $i)) ) ) (assert_return (invoke "print32" (i32.const 13))) (assert_return (invoke "print64" (i64.const 24))) (assert_unlinkable (module (import "spectest" "unknown" (func))) "unknown import" ) (assert_unlinkable (module (import "spectest" "table" (func))) "type mismatch" ) (assert_unlinkable (module (import "spectest" "print" (func)) (table funcref (elem 0))) "invalid use of host function" ) ;; Globals (module (import "spectest" "global_i32" (global i32)) (global (import "spectest" "global_i32") i32) (import "spectest" "global_i32" (global $x i32)) (global $y (import "spectest" "global_i32") i32) (func (export "get-0") (result i32) (global.get 0)) (func (export "get-1") (result i32) (global.get 1)) (func (export "get-x") (result i32) (global.get $x)) (func (export "get-y") (result i32) (global.get $y)) ;; TODO: mutable globals ;; (func (export "set-0") (param i32) (global.set 0 (local.get 0))) ;; (func (export "set-1") (param i32) (global.set 1 (local.get 0))) ;; (func (export "set-x") (param i32) (global.set $x (local.get 0))) ;; (func (export "set-y") (param i32) (global.set $y (local.get 0))) ) (assert_return (invoke "get-0") (i32.const 666)) (assert_return (invoke "get-1") (i32.const 666)) (assert_return (invoke "get-x") (i32.const 666)) (assert_return (invoke "get-y") (i32.const 666)) (assert_unlinkable (module (import "spectest" "unknown" (global i32))) "unknown import" ) (assert_unlinkable (module (import "spectest" "print" (global i32))) "type mismatch" ) (module (import "spectest" "global_i64" (global i64))) (module (import "spectest" "global_i64" (global f32))) (module (import "spectest" "global_i64" (global f64))) ;; Tables (module (type (func (result i32))) (import "spectest" "table" (table 10 20 funcref)) (elem (i32.const 1) $f $g) (func (export "call") (param i32) (result i32) (call_indirect (type 0) (local.get 0))) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (module (type (func (result i32))) (table (import "spectest" "table") 10 20 funcref) (elem (i32.const 1) $f $g) (func (export "call") (param i32) (result i32) (call_indirect (type 0) (local.get 0))) (func $f (result i32) (i32.const 11)) (func $g (result i32) (i32.const 22)) ) (assert_trap (invoke "call" (i32.const 0)) "uninitialized element") (assert_return (invoke "call" (i32.const 1)) (i32.const 11)) (assert_return (invoke "call" (i32.const 2)) (i32.const 22)) (assert_trap (invoke "call" (i32.const 3)) "uninitialized element") (assert_trap (invoke "call" (i32.const 100)) "undefined element") (assert_invalid (module (import "" "" (table 10 funcref)) (import "" "" (table 10 funcref))) "multiple tables" ) (assert_invalid (module (import "" "" (table 10 funcref)) (table 10 funcref)) "multiple tables" ) (assert_unlinkable (module (import "spectest" "unknown" (table 10 funcref))) "unknown import" ) (assert_unlinkable (module (import "spectest" "print" (table 10 funcref))) "type mismatch" ) (assert_unlinkable (module (import "spectest" "table" (table 12 funcref))) "actual size smaller than declared" ) (assert_unlinkable (module (import "spectest" "table" (table 10 15 funcref))) "maximum size larger than declared" ) ;; Memories (module (import "spectest" "memory" (memory 1 2)) (data (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (module (memory (import "spectest" "memory") 1 2) (data (i32.const 10) "\10") (func (export "load") (param i32) (result i32) (i32.load (local.get 0))) ) (assert_return (invoke "load" (i32.const 0)) (i32.const 0)) (assert_return (invoke "load" (i32.const 10)) (i32.const 16)) (assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) (assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") (assert_invalid (module (import "" "" (memory 1)) (import "" "" (memory 1))) "multiple memories" ) (assert_invalid (module (import "" "" (memory 1)) (memory 0)) "multiple memories" ) (assert_invalid (module (memory 0) (memory 0)) "multiple memories" ) (assert_unlinkable (module (import "spectest" "unknown" (memory 1))) "unknown import" ) (assert_unlinkable (module (import "spectest" "print" (memory 1))) "type mismatch" ) (assert_unlinkable (module (import "spectest" "memory" (memory 2))) "actual size smaller than declared" ) (assert_unlinkable (module (import "spectest" "memory" (memory 1 1))) "maximum size larger than declared" ) (module (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) binaryen-version_108/test/spec/old_int_literals.wast000066400000000000000000000061151423707623100231100ustar00rootroot00000000000000(module (func (export "i32.test") (result i32) (return (i32.const 0x0bAdD00D))) (func (export "i32.umax") (result i32) (return (i32.const 0xffffffff))) (func (export "i32.smax") (result i32) (return (i32.const 0x7fffffff))) (func (export "i32.neg_smax") (result i32) (return (i32.const -0x7fffffff))) (func (export "i32.smin") (result i32) (return (i32.const -0x80000000))) (func (export "i32.alt_smin") (result i32) (return (i32.const 0x80000000))) (func (export "i32.inc_smin") (result i32) (return (i32.add (i32.const -0x80000000) (i32.const 1)))) (func (export "i32.neg_zero") (result i32) (return (i32.const -0x0))) (func (export "i32.not_octal") (result i32) (return (i32.const 010))) (func (export "i32.unsigned_decimal") (result i32) (return (i32.const 4294967295))) (func (export "i32.plus_sign") (result i32) (return (i32.const +42))) (func (export "i64.test") (result i64) (return (i64.const 0x0CABBA6E0ba66a6e))) (func (export "i64.umax") (result i64) (return (i64.const 0xffffffffffffffff))) (func (export "i64.smax") (result i64) (return (i64.const 0x7fffffffffffffff))) (func (export "i64.neg_smax") (result i64) (return (i64.const -0x7fffffffffffffff))) (func (export "i64.smin") (result i64) (return (i64.const -0x8000000000000000))) (func (export "i64.alt_smin") (result i64) (return (i64.const 0x8000000000000000))) (func (export "i64.inc_smin") (result i64) (return (i64.add (i64.const -0x8000000000000000) (i64.const 1)))) (func (export "i64.neg_zero") (result i64) (return (i64.const -0x0))) (func (export "i64.not_octal") (result i64) (return (i64.const 010))) (func (export "i64.unsigned_decimal") (result i64) (return (i64.const 18446744073709551615))) (func (export "i64.plus_sign") (result i64) (return (i64.const +42))) ) (assert_return (invoke "i32.test") (i32.const 195940365)) (assert_return (invoke "i32.umax") (i32.const -1)) (assert_return (invoke "i32.smax") (i32.const 2147483647)) (assert_return (invoke "i32.neg_smax") (i32.const -2147483647)) (assert_return (invoke "i32.smin") (i32.const -2147483648)) (assert_return (invoke "i32.alt_smin") (i32.const -2147483648)) (assert_return (invoke "i32.inc_smin") (i32.const -2147483647)) (assert_return (invoke "i32.neg_zero") (i32.const 0)) (assert_return (invoke "i32.not_octal") (i32.const 10)) (assert_return (invoke "i32.unsigned_decimal") (i32.const -1)) (assert_return (invoke "i32.plus_sign") (i32.const 42)) (assert_return (invoke "i64.test") (i64.const 913028331277281902)) (assert_return (invoke "i64.umax") (i64.const -1)) (assert_return (invoke "i64.smax") (i64.const 9223372036854775807)) (assert_return (invoke "i64.neg_smax") (i64.const -9223372036854775807)) (assert_return (invoke "i64.smin") (i64.const -9223372036854775808)) (assert_return (invoke "i64.alt_smin") (i64.const -9223372036854775808)) (assert_return (invoke "i64.inc_smin") (i64.const -9223372036854775807)) (assert_return (invoke "i64.neg_zero") (i64.const 0)) (assert_return (invoke "i64.not_octal") (i64.const 10)) (assert_return (invoke "i64.unsigned_decimal") (i64.const -1)) (assert_return (invoke "i64.plus_sign") (i64.const 42)) binaryen-version_108/test/spec/old_loop.wast000066400000000000000000000222661423707623100213750ustar00rootroot00000000000000;; Test `loop` opcode (module (func $dummy) (func (export "empty") (loop) (loop $l) ) (func (export "singular") (result i32) (loop (nop)) (loop i32 (i32.const 7)) ) (func (export "multi") (result i32) (loop (call $dummy) (call $dummy) (call $dummy) (call $dummy)) (loop i32 (call $dummy) (call $dummy) (call $dummy) (i32.const 8)) ) (func (export "nested") (result i32) (loop i32 (loop (call $dummy) (block) (nop)) (loop i32 (call $dummy) (i32.const 9)) ) ) (func (export "deep") (result i32) (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 (call $dummy) (i32.const 150))) )))))) )))))) )))))) )))))) )))))) )))))) )))))) ) (func (export "as-unary-operand") (result i32) (i32.ctz (loop i32 (call $dummy) (i32.const 13))) ) (func (export "as-binary-operand") (result i32) (i32.mul (loop i32 (call $dummy) (i32.const 3)) (loop i32 (call $dummy) (i32.const 4)) ) ) (func (export "as-test-operand") (result i32) (i32.eqz (loop i32 (call $dummy) (i32.const 13))) ) (func (export "as-compare-operand") (result i32) (f32.gt (loop f32 (call $dummy) (f32.const 3)) (loop f32 (call $dummy) (f32.const 3)) ) ) (func (export "break-bare") (result i32) (block (loop (br 1) (br 0) (unreachable))) (block (loop (br_if 1 (i32.const 1)) (unreachable))) (block (loop (br_table 1 (i32.const 0)) (unreachable))) (block (loop (br_table 1 1 1 (i32.const 1)) (unreachable))) (i32.const 19) ) (func (export "break-value") (result i32) (block i32 (loop i32 (br 1 (i32.const 18)) (br 0) (i32.const 19))) ) (func (export "break-repeated") (result i32) (block i32 (loop i32 (br 1 (i32.const 18)) (br 1 (i32.const 19)) (drop (br_if 1 (i32.const 20) (i32.const 0))) (drop (br_if 1 (i32.const 20) (i32.const 1))) (br 1 (i32.const 21)) (br_table 1 (i32.const 22) (i32.const 0)) (br_table 1 1 1 (i32.const 23) (i32.const 1)) (i32.const 21) ) ) ) (func (export "break-inner") (result i32) (local i32) (local.set 0 (i32.const 0)) (local.set 0 (i32.add (local.get 0) (block i32 (loop i32 (block i32 (br 2 (i32.const 0x1))))))) (local.set 0 (i32.add (local.get 0) (block i32 (loop i32 (loop i32 (br 2 (i32.const 0x2))))))) (local.set 0 (i32.add (local.get 0) (block i32 (loop i32 (block i32 (loop i32 (br 1 (i32.const 0x4)))))))) (local.set 0 (i32.add (local.get 0) (block i32 (loop i32 (i32.ctz (br 1 (i32.const 0x8))))))) (local.set 0 (i32.add (local.get 0) (block i32 (loop i32 (i32.ctz (loop i32 (br 2 (i32.const 0x10)))))))) (local.get 0) ) (func (export "cont-inner") (result i32) (local i32) (local.set 0 (i32.const 0)) (local.set 0 (i32.add (local.get 0) (loop i32 (loop i32 (br 1))))) (local.set 0 (i32.add (local.get 0) (loop i32 (i32.ctz (br 0))))) (local.set 0 (i32.add (local.get 0) (loop i32 (i32.ctz (loop i32 (br 1)))))) (local.get 0) ) (func $fx (export "effects") (result i32) (local i32) (block (loop (local.set 0 (i32.const 1)) (local.set 0 (i32.mul (local.get 0) (i32.const 3))) (local.set 0 (i32.sub (local.get 0) (i32.const 5))) (local.set 0 (i32.mul (local.get 0) (i32.const 7))) (br 1) (local.set 0 (i32.mul (local.get 0) (i32.const 100))) ) ) (i32.eq (local.get 0) (i32.const -14)) ) (func (export "while") (param i64) (result i64) (local i64) (local.set 1 (i64.const 1)) (block (loop (br_if 1 (i64.eqz (local.get 0))) (local.set 1 (i64.mul (local.get 0) (local.get 1))) (local.set 0 (i64.sub (local.get 0) (i64.const 1))) (br 0) ) ) (local.get 1) ) (func (export "for") (param i64) (result i64) (local i64 i64) (local.set 1 (i64.const 1)) (local.set 2 (i64.const 2)) (block (loop (br_if 1 (i64.gt_u (local.get 2) (local.get 0))) (local.set 1 (i64.mul (local.get 1) (local.get 2))) (local.set 2 (i64.add (local.get 2) (i64.const 1))) (br 0) ) ) (local.get 1) ) (func (export "nesting") (param f32 f32) (result f32) (local f32 f32) (block (loop (br_if 1 (f32.eq (local.get 0) (f32.const 0))) (local.set 2 (local.get 1)) (block (loop (br_if 1 (f32.eq (local.get 2) (f32.const 0))) (br_if 3 (f32.lt (local.get 2) (f32.const 0))) (local.set 3 (f32.add (local.get 3) (local.get 2))) (local.set 2 (f32.sub (local.get 2) (f32.const 2))) (br 0) ) ) (local.set 3 (f32.div (local.get 3) (local.get 0))) (local.set 0 (f32.sub (local.get 0) (f32.const 1))) (br 0) ) ) (local.get 3) ) ) (assert_return (invoke "empty")) (assert_return (invoke "singular") (i32.const 7)) (assert_return (invoke "multi") (i32.const 8)) (assert_return (invoke "nested") (i32.const 9)) (assert_return (invoke "deep") (i32.const 150)) (assert_return (invoke "as-unary-operand") (i32.const 0)) (assert_return (invoke "as-binary-operand") (i32.const 12)) (assert_return (invoke "as-test-operand") (i32.const 0)) (assert_return (invoke "as-compare-operand") (i32.const 0)) (assert_return (invoke "break-bare") (i32.const 19)) (assert_return (invoke "break-value") (i32.const 18)) (assert_return (invoke "break-repeated") (i32.const 18)) (assert_return (invoke "break-inner") (i32.const 0x1f)) (assert_return (invoke "effects") (i32.const 1)) (assert_return (invoke "while" (i64.const 0)) (i64.const 1)) (assert_return (invoke "while" (i64.const 1)) (i64.const 1)) (assert_return (invoke "while" (i64.const 2)) (i64.const 2)) (assert_return (invoke "while" (i64.const 3)) (i64.const 6)) (assert_return (invoke "while" (i64.const 5)) (i64.const 120)) (assert_return (invoke "while" (i64.const 20)) (i64.const 2432902008176640000)) (assert_return (invoke "for" (i64.const 0)) (i64.const 1)) (assert_return (invoke "for" (i64.const 1)) (i64.const 1)) (assert_return (invoke "for" (i64.const 2)) (i64.const 2)) (assert_return (invoke "for" (i64.const 3)) (i64.const 6)) (assert_return (invoke "for" (i64.const 5)) (i64.const 120)) (assert_return (invoke "for" (i64.const 20)) (i64.const 2432902008176640000)) (assert_return (invoke "nesting" (f32.const 0) (f32.const 7)) (f32.const 0)) (assert_return (invoke "nesting" (f32.const 7) (f32.const 0)) (f32.const 0)) (assert_return (invoke "nesting" (f32.const 1) (f32.const 1)) (f32.const 1)) (assert_return (invoke "nesting" (f32.const 1) (f32.const 2)) (f32.const 2)) (assert_return (invoke "nesting" (f32.const 1) (f32.const 3)) (f32.const 4)) (assert_return (invoke "nesting" (f32.const 1) (f32.const 4)) (f32.const 6)) (assert_return (invoke "nesting" (f32.const 1) (f32.const 100)) (f32.const 2550)) (assert_return (invoke "nesting" (f32.const 1) (f32.const 101)) (f32.const 2601)) (assert_return (invoke "nesting" (f32.const 2) (f32.const 1)) (f32.const 1)) (assert_return (invoke "nesting" (f32.const 3) (f32.const 1)) (f32.const 1)) (assert_return (invoke "nesting" (f32.const 10) (f32.const 1)) (f32.const 1)) (assert_return (invoke "nesting" (f32.const 2) (f32.const 2)) (f32.const 3)) (assert_return (invoke "nesting" (f32.const 2) (f32.const 3)) (f32.const 4)) (assert_return (invoke "nesting" (f32.const 7) (f32.const 4)) (f32.const 10.3095235825)) (assert_return (invoke "nesting" (f32.const 7) (f32.const 100)) (f32.const 4381.54785156)) (assert_return (invoke "nesting" (f32.const 7) (f32.const 101)) (f32.const 2601)) (assert_invalid (module (func $type-empty-i32 (result i32) (loop))) "type mismatch" ) (assert_invalid (module (func $type-empty-i64 (result i64) (loop))) "type mismatch" ) (assert_invalid (module (func $type-empty-f32 (result f32) (loop))) "type mismatch" ) (assert_invalid (module (func $type-empty-f64 (result f64) (loop))) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result i32) (loop (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result i32) (loop (f32.const 0)) )) "type mismatch" ) (; TODO(stack): soft failure (assert_invalid (module (func $type-value-void-vs-num-after-break (result i32) (loop (br 1 (i32.const 1)) (nop)) )) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num-after-break (result i32) (loop (br 1 (i32.const 1)) (f32.const 0)) )) "type mismatch" ) ;) (assert_invalid (module (func $type-cont-last-void-vs-empty (result i32) (loop (br 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-num-vs-empty (result i32) (loop (br 0 (i32.const 0))) )) "type mismatch" ) binaryen-version_108/test/spec/old_select.wast000066400000000000000000000166111423707623100217000ustar00rootroot00000000000000(module (func $dummy) (func (export "select_i32") (param $lhs i32) (param $rhs i32) (param $cond i32) (result i32) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_i64") (param $lhs i64) (param $rhs i64) (param $cond i32) (result i64) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_f32") (param $lhs f32) (param $rhs f32) (param $cond i32) (result f32) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_f64") (param $lhs f64) (param $rhs f64) (param $cond i32) (result f64) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select-i32-t") (param i32 i32 i32) (result i32) (select (result i32) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-i64-t") (param i64 i64 i32) (result i64) (select (result i64) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f32-t") (param f32 f32 i32) (result f32) (select (result f32) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-f64-t") (param f64 f64 i32) (result f64) (select (result f64) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-funcref") (param funcref funcref i32) (result funcref) (select (result funcref) (local.get 0) (local.get 1) (local.get 2)) ) (func (export "select-externref") (param externref externref i32) (result externref) (select (result externref) (local.get 0) (local.get 1) (local.get 2)) ) ;; Check that both sides of the select are evaluated (func (export "select_trap_l") (param $cond i32) (result i32) (select (unreachable) (i32.const 0) (local.get $cond))) (func (export "select_trap_r") (param $cond i32) (result i32) (select (i32.const 0) (unreachable) (local.get $cond))) ) (assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select_f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select_f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select_i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select-f32-t" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select-f64-t" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select-i32-t" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_return (invoke "select-funcref" (ref.func "dummy") (ref.null func) (i32.const 1)) (ref.func "dummy")) (assert_return (invoke "select-funcref" (ref.func "dummy") (ref.null func) (i32.const 0)) (ref.null func)) (assert_return (invoke "select-externref" (ref.null extern) (ref.null extern) (i32.const 1)) (ref.null extern)) (assert_return (invoke "select-externref" (ref.null extern) (ref.null extern) (i32.const 0)) (ref.null extern)) (assert_trap (invoke "select_trap_l" (i32.const 1)) "unreachable executed") (assert_trap (invoke "select_trap_l" (i32.const 0)) "unreachable executed") (assert_trap (invoke "select_trap_r" (i32.const 1)) "unreachable executed") (assert_trap (invoke "select_trap_r" (i32.const 0)) "unreachable executed") (assert_invalid (module (func $arity-0 (select (nop) (nop) (i32.const 1)))) "type mismatch" ) binaryen-version_108/test/spec/old_start.wast000066400000000000000000000031661423707623100215570ustar00rootroot00000000000000(assert_invalid (module (func) (start 1)) "unknown function" ) (assert_invalid (module (func $main (result i32) (return (i32.const 0))) (start $main) ) "start function" ) (assert_invalid (module (func $main (param $a i32)) (start $main) ) "start function" ) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start $main) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start 2) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (func $print_i32 (import "spectest" "print") (param i32)) (func $main (call $print_i32 (i32.const 1))) (start 1) ) (module (func $print_i32 (import "spectest" "print") (param i32)) (func $main (call $print_i32 (i32.const 2))) (start $main) ) binaryen-version_108/test/spec/old_unreachable.wast000066400000000000000000000207561423707623100226770ustar00rootroot00000000000000;; Test `unreachable` operator (module ;; Auxiliary definitions (func $dummy) (func $dummy3 (param i32 i32 i32)) (func (export "type-i32") (result i32) (unreachable)) (func (export "type-i64") (result i32) (unreachable)) (func (export "type-f32") (result f64) (unreachable)) (func (export "type-f64") (result f64) (unreachable)) (func (export "as-func-first") (result i32) (unreachable) (i32.const -1) ) (func (export "as-func-mid") (result i32) (call $dummy) (unreachable) (i32.const -1) ) (func (export "as-func-last") (call $dummy) (unreachable) ) (func (export "as-func-value") (result i32) (call $dummy) (unreachable) ) (func (export "as-block-first") (result i32) (block i32 (unreachable) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block i32 (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-block-last") (block (nop) (call $dummy) (unreachable)) ) (func (export "as-block-value") (result i32) (block i32 (nop) (call $dummy) (unreachable)) ) (func (export "as-block-broke") (result i32) (block i32 (call $dummy) (br 0 (i32.const 1)) (unreachable)) ) (func (export "as-loop-first") (result i32) (loop i32 (unreachable) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop i32 (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-loop-last") (loop (nop) (call $dummy) (unreachable)) ) (func (export "as-loop-broke") (result i32) (block i32 (loop i32 (call $dummy) (br 1 (i32.const 1)) (unreachable))) ) (func (export "as-br-value") (result i32) (block i32 (br 0 (unreachable))) ) (func (export "as-br_if-cond") (block (br_if 0 (unreachable))) ) (func (export "as-br_if-value") (result i32) (block i32 (br_if 0 (unreachable) (i32.const 1)) (i32.const 7)) ) (func (export "as-br_if-value-cond") (result i32) (block i32 (drop (br_if 0 (i32.const 6) (unreachable))) (i32.const 7)) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (unreachable))) ) (func (export "as-br_table-value") (result i32) (block i32 (br_table 0 0 0 (unreachable) (i32.const 1)) (i32.const 7)) ) (func (export "as-br_table-value-index") (result i32) (block i32 (br_table 0 0 (i32.const 6) (unreachable)) (i32.const 7)) ) (func (export "as-return-value") (result i64) (return (unreachable)) ) (func (export "as-if-cond") (result i32) (if i32 (unreachable) (i32.const 0) (i32.const 1)) ) (func (export "as-if-then") (param i32 i32) (result i32) (if i32 (local.get 0) (unreachable) (local.get 1)) ) (func (export "as-if-else") (param i32 i32) (result i32) (if i32 (local.get 0) (local.get 1) (unreachable)) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (unreachable) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (unreachable) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (unreachable)) ) (func (export "as-call-first") (call $dummy3 (unreachable) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (call $dummy3 (i32.const 1) (unreachable) (i32.const 3)) ) (func (export "as-call-last") (call $dummy3 (i32.const 1) (i32.const 2) (unreachable)) ) (type $sig (func (param i32 i32 i32))) (table funcref (elem $dummy3)) (func (export "as-call_indirect-func") (call_indirect (type $sig) (unreachable) (i32.const 1) (i32.const 2) (i32.const 3)) ) (func (export "as-call_indirect-first") (call_indirect (type $sig) (i32.const 0) (unreachable) (i32.const 2) (i32.const 3)) ) (func (export "as-call_indirect-mid") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (unreachable) (i32.const 3)) ) (func (export "as-call_indirect-last") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (unreachable)) ) (func (export "as-local.set-value") (local f32) (local.set 0 (unreachable)) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (unreachable)) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (unreachable)) ) (func (export "as-store-address") (f64.store (unreachable) (f64.const 7)) ) (func (export "as-store-value") (i64.store (i32.const 2) (unreachable)) ) (func (export "as-storeN-address") (i32.store8 (unreachable) (i32.const 7)) ) (func (export "as-storeN-value") (i64.store16 (i32.const 2) (unreachable)) ) (func (export "as-unary-operand") (result f32) (f32.neg (unreachable)) ) (func (export "as-binary-left") (result i32) (i32.add (unreachable) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (unreachable)) ) (func (export "as-test-operand") (result i32) (i32.eqz (unreachable)) ) (func (export "as-compare-left") (result i32) (f64.le (unreachable) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (unreachable)) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (unreachable)) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (unreachable)) ) ) (assert_trap (invoke "type-i32") "unreachable") (assert_trap (invoke "type-i64") "unreachable") (assert_trap (invoke "type-f32") "unreachable") (assert_trap (invoke "type-f64") "unreachable") (assert_trap (invoke "as-func-first") "unreachable") (assert_trap (invoke "as-func-mid") "unreachable") (assert_trap (invoke "as-func-last") "unreachable") (assert_trap (invoke "as-func-value") "unreachable") (assert_trap (invoke "as-block-first") "unreachable") (assert_trap (invoke "as-block-mid") "unreachable") (assert_trap (invoke "as-block-last") "unreachable") (assert_trap (invoke "as-block-value") "unreachable") (assert_return (invoke "as-block-broke") (i32.const 1)) (assert_trap (invoke "as-loop-first") "unreachable") (assert_trap (invoke "as-loop-mid") "unreachable") (assert_trap (invoke "as-loop-last") "unreachable") (assert_return (invoke "as-loop-broke") (i32.const 1)) (assert_trap (invoke "as-br-value") "unreachable") (assert_trap (invoke "as-br_if-cond") "unreachable") (assert_trap (invoke "as-br_if-value") "unreachable") (assert_trap (invoke "as-br_if-value-cond") "unreachable") (assert_trap (invoke "as-br_table-index") "unreachable") (assert_trap (invoke "as-br_table-value") "unreachable") (assert_trap (invoke "as-br_table-value-index") "unreachable") (assert_trap (invoke "as-return-value") "unreachable") (assert_trap (invoke "as-if-cond") "unreachable") (assert_trap (invoke "as-if-then" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-else" (i32.const 0) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-select-first" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-first" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-cond") "unreachable") (assert_trap (invoke "as-call-first") "unreachable") (assert_trap (invoke "as-call-mid") "unreachable") (assert_trap (invoke "as-call-last") "unreachable") (assert_trap (invoke "as-call_indirect-func") "unreachable") (assert_trap (invoke "as-call_indirect-first") "unreachable") (assert_trap (invoke "as-call_indirect-mid") "unreachable") (assert_trap (invoke "as-call_indirect-last") "unreachable") (assert_trap (invoke "as-local.set-value") "unreachable") (assert_trap (invoke "as-load-address") "unreachable") (assert_trap (invoke "as-loadN-address") "unreachable") (assert_trap (invoke "as-store-address") "unreachable") (assert_trap (invoke "as-store-value") "unreachable") (assert_trap (invoke "as-storeN-address") "unreachable") (assert_trap (invoke "as-storeN-value") "unreachable") (assert_trap (invoke "as-unary-operand") "unreachable") (assert_trap (invoke "as-binary-left") "unreachable") (assert_trap (invoke "as-binary-right") "unreachable") (assert_trap (invoke "as-test-operand") "unreachable") (assert_trap (invoke "as-compare-left") "unreachable") (assert_trap (invoke "as-compare-right") "unreachable") (assert_trap (invoke "as-convert-operand") "unreachable") (assert_trap (invoke "as-memory.grow-size") "unreachable") binaryen-version_108/test/spec/ref_as_non_null.wast000066400000000000000000000016251423707623100227250ustar00rootroot00000000000000(module (type $t (func (result i32))) (func $nn (param $r (ref $t)) (result i32) (call_ref (ref.as_non_null (local.get $r))) ) (func $n (param $r (ref null $t)) (result i32) (call_ref (ref.as_non_null (local.get $r))) ) (elem func $f) (func $f (result i32) (i32.const 7)) (func (export "nullable-null") (result i32) (call $n (ref.null $t))) (func (export "nonnullable-f") (result i32) (call $nn (ref.func $f))) (func (export "nullable-f") (result i32) (call $n (ref.func $f))) ) (assert_trap (invoke "nullable-null") "null reference") (assert_return (invoke "nonnullable-f") (i32.const 7)) (assert_return (invoke "nullable-f") (i32.const 7)) (module (type $t (func)) (func (param $r (ref $t)) (drop (ref.as_non_null (local.get $r)))) (func (param $r (ref func)) (drop (ref.as_non_null (local.get $r)))) (func (param $r (ref extern)) (drop (ref.as_non_null (local.get $r)))) ) binaryen-version_108/test/spec/ref_cast.wast000066400000000000000000000071101423707623100213430ustar00rootroot00000000000000(module (type $t0 (struct)) (type $t1 (struct (field i32))) (type $t1' (struct (field i32))) (type $t2 (struct (field i32) (field i32))) (type $t2' (struct (field i32) (field i32))) (type $t3 (struct (field i32) (field i32))) (global $t0 (rtt $t0) (rtt.canon $t0)) (global $t0' (rtt $t0) (rtt.canon $t0)) (global $t1 (rtt $t1) (rtt.sub $t1 (global.get $t0))) (global $t1' (rtt $t1') (rtt.sub $t1' (global.get $t0))) (global $t2 (rtt $t2) (rtt.sub $t2 (global.get $t1))) (global $t2' (rtt $t2') (rtt.sub $t2' (global.get $t1'))) (global $t3 (rtt $t3) (rtt.sub $t3 (global.get $t0))) (global $t4 (rtt $t3) (rtt.sub $t3 (rtt.sub $t0 (global.get $t0)))) (global $tab.0 (mut (ref null data)) (ref.null data)) (global $tab.1 (mut (ref null data)) (ref.null data)) (global $tab.2 (mut (ref null data)) (ref.null data)) (global $tab.3 (mut (ref null data)) (ref.null data)) (global $tab.4 (mut (ref null data)) (ref.null data)) (global $tab.10 (mut (ref null data)) (ref.null data)) (global $tab.11 (mut (ref null data)) (ref.null data)) (global $tab.12 (mut (ref null data)) (ref.null data)) (func $init (global.set $tab.0 (struct.new_default_with_rtt $t0 (global.get $t0))) (global.set $tab.10 (struct.new_default_with_rtt $t0 (global.get $t0'))) (global.set $tab.1 (struct.new_default_with_rtt $t1 (global.get $t1))) (global.set $tab.11 (struct.new_default_with_rtt $t1' (global.get $t1'))) (global.set $tab.2 (struct.new_default_with_rtt $t2 (global.get $t2))) (global.set $tab.12 (struct.new_default_with_rtt $t2' (global.get $t2'))) (global.set $tab.3 (struct.new_default_with_rtt $t3 (global.get $t3))) (global.set $tab.4 (struct.new_default_with_rtt $t3 (global.get $t4))) ) (func (export "test-sub") (call $init) (drop (ref.cast (ref.null data) (global.get $t0))) (drop (ref.cast (global.get $tab.0) (global.get $t0))) (drop (ref.cast (global.get $tab.1) (global.get $t0))) (drop (ref.cast (global.get $tab.2) (global.get $t0))) (drop (ref.cast (global.get $tab.3) (global.get $t0))) (drop (ref.cast (global.get $tab.4) (global.get $t0))) (drop (ref.cast (ref.null data) (global.get $t0))) (drop (ref.cast (global.get $tab.1) (global.get $t1))) (drop (ref.cast (global.get $tab.2) (global.get $t1))) (drop (ref.cast (ref.null data) (global.get $t0))) (drop (ref.cast (global.get $tab.2) (global.get $t2))) (drop (ref.cast (ref.null data) (global.get $t0))) (drop (ref.cast (global.get $tab.3) (global.get $t3))) (drop (ref.cast (ref.null data) (global.get $t0))) (drop (ref.cast (global.get $tab.4) (global.get $t4))) ) (func (export "test-canon") (call $init) (drop (ref.cast (global.get $tab.0) (global.get $t0'))) (drop (ref.cast (global.get $tab.1) (global.get $t0'))) (drop (ref.cast (global.get $tab.2) (global.get $t0'))) (drop (ref.cast (global.get $tab.3) (global.get $t0'))) (drop (ref.cast (global.get $tab.4) (global.get $t0'))) (drop (ref.cast (global.get $tab.10) (global.get $t0))) (drop (ref.cast (global.get $tab.11) (global.get $t0))) (drop (ref.cast (global.get $tab.12) (global.get $t0))) (drop (ref.cast (global.get $tab.1) (global.get $t1'))) (drop (ref.cast (global.get $tab.2) (global.get $t1'))) (drop (ref.cast (global.get $tab.11) (global.get $t1))) (drop (ref.cast (global.get $tab.12) (global.get $t1))) (drop (ref.cast (global.get $tab.2) (global.get $t2'))) (drop (ref.cast (global.get $tab.12) (global.get $t2))) ) ) (invoke "test-sub") (invoke "test-canon") binaryen-version_108/test/spec/ref_eq.wast000066400000000000000000000004431423707623100210200ustar00rootroot00000000000000(module (func $compare (export "compare") (param $x eqref) (param $y eqref) (result i32) (ref.eq (local.get $x) (local.get $y) ) ) ) ;; All nulls compare equal, regardless of their type. (assert_return (invoke "compare" (ref.null data) (ref.null eq)) (i32.const 1)) binaryen-version_108/test/spec/ref_func.wast000066400000000000000000000021531423707623100213460ustar00rootroot00000000000000(module (func (export "f") (param $x i32) (result i32) (local.get $x)) ) (module (func $f (import "M" "f") (param i32) (result i32)) (func $g (param $x i32) (result i32) (i32.add (local.get $x) (i32.const 1))) (global externref (ref.null extern)) (global funcref (ref.func $f)) (global funcref (ref.func $g)) (global $v (mut funcref) (ref.func $f)) (func (export "is_null-f") (result i32) (ref.is_null (ref.func $f)) ) (func (export "is_null-g") (result i32) (ref.is_null (ref.func $g)) ) (func (export "is_null-v") (result i32) (ref.is_null (global.get $v)) ) (func (export "set-f") (global.set $v (ref.func $f))) (func (export "set-g") (global.set $v (ref.func $g))) (table $t 1 funcref) ) (assert_return (invoke "is_null-f") (i32.const 0)) (assert_return (invoke "is_null-g") (i32.const 0)) (assert_return (invoke "is_null-v") (i32.const 0)) (invoke "set-g") (invoke "set-f") (assert_invalid (module (func $f (import "M" "f") (param i32) (result i32)) (func $g (import "M" "g") (param i32) (result i32)) (global funcref (ref.func 7)) ) "unknown function 7" ) binaryen-version_108/test/spec/ref_is_null.wast000066400000000000000000000005351423707623100220620ustar00rootroot00000000000000(module (func $f1 (export "externref") (param $x externref) (result i32) (ref.is_null (local.get $x)) ) (func $f2 (export "funcref") (param $x funcref) (result i32) (ref.is_null (local.get $x)) ) ) (assert_return (invoke "externref" (ref.null extern)) (i32.const 1)) (assert_return (invoke "funcref" (ref.null func)) (i32.const 1)) binaryen-version_108/test/spec/ref_null.wast000066400000000000000000000005001423707623100213570ustar00rootroot00000000000000(module (func (export "externref") (result externref) (ref.null extern)) (func (export "funcref") (result funcref) (ref.null func)) (global externref (ref.null extern)) (global funcref (ref.null func)) ) (assert_return (invoke "externref") (ref.null extern)) (assert_return (invoke "funcref") (ref.null func)) binaryen-version_108/test/spec/resizing.wast000066400000000000000000000050201423707623100214050ustar00rootroot00000000000000(module (memory 0) (func (export "load_at_zero") (result i32) (i32.load (i32.const 0))) (func (export "store_at_zero") (i32.store (i32.const 0) (i32.const 2))) (func (export "load_at_page_size") (result i32) (i32.load (i32.const 0x10000))) (func (export "store_at_page_size") (i32.store (i32.const 0x10000) (i32.const 3))) (func (export "grow") (param $sz i32) (result i32) (memory.grow (local.get $sz))) (func (export "size") (result i32) (memory.size)) ) (assert_return (invoke "size") (i32.const 0)) (assert_trap (invoke "store_at_zero") "out of bounds memory access") (assert_trap (invoke "load_at_zero") "out of bounds memory access") (assert_trap (invoke "store_at_page_size") "out of bounds memory access") (assert_trap (invoke "load_at_page_size") "out of bounds memory access") (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "size") (i32.const 1)) (assert_return (invoke "load_at_zero") (i32.const 0)) (assert_return (invoke "store_at_zero")) (assert_return (invoke "load_at_zero") (i32.const 2)) (assert_trap (invoke "store_at_page_size") "out of bounds memory access") (assert_trap (invoke "load_at_page_size") "out of bounds memory access") (assert_return (invoke "grow" (i32.const 4)) (i32.const 1)) (assert_return (invoke "size") (i32.const 5)) (assert_return (invoke "load_at_zero") (i32.const 2)) (assert_return (invoke "store_at_zero")) (assert_return (invoke "load_at_zero") (i32.const 2)) (assert_return (invoke "load_at_page_size") (i32.const 0)) (assert_return (invoke "store_at_page_size")) (assert_return (invoke "load_at_page_size") (i32.const 3)) (module (memory 0) (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 2)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 10000)) (i32.const 3)) (module (memory 0 10) (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 2)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 6)) (i32.const 4)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 10)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) binaryen-version_108/test/spec/resizing64.wast000066400000000000000000000050341423707623100215640ustar00rootroot00000000000000(module (memory i64 0) (func (export "load_at_zero") (result i32) (i32.load (i64.const 0))) (func (export "store_at_zero") (i32.store (i64.const 0) (i32.const 2))) (func (export "load_at_page_size") (result i32) (i32.load (i64.const 0x10000))) (func (export "store_at_page_size") (i32.store (i64.const 0x10000) (i32.const 3))) (func (export "grow") (param $sz i64) (result i64) (memory.grow (local.get $sz))) (func (export "size") (result i64) (memory.size)) ) (assert_return (invoke "size") (i64.const 0)) (assert_trap (invoke "store_at_zero") "out of bounds memory access") (assert_trap (invoke "load_at_zero") "out of bounds memory access") (assert_trap (invoke "store_at_page_size") "out of bounds memory access") (assert_trap (invoke "load_at_page_size") "out of bounds memory access") (assert_return (invoke "grow" (i64.const 1)) (i64.const 0)) (assert_return (invoke "size") (i64.const 1)) (assert_return (invoke "load_at_zero") (i32.const 0)) (assert_return (invoke "store_at_zero")) (assert_return (invoke "load_at_zero") (i32.const 2)) (assert_trap (invoke "store_at_page_size") "out of bounds memory access") (assert_trap (invoke "load_at_page_size") "out of bounds memory access") (assert_return (invoke "grow" (i64.const 4)) (i64.const 1)) (assert_return (invoke "size") (i64.const 5)) (assert_return (invoke "load_at_zero") (i32.const 2)) (assert_return (invoke "store_at_zero")) (assert_return (invoke "load_at_zero") (i32.const 2)) (assert_return (invoke "load_at_page_size") (i32.const 0)) (assert_return (invoke "store_at_page_size")) (assert_return (invoke "load_at_page_size") (i32.const 3)) (module (memory i64 0) (func (export "grow") (param i64) (result i64) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i64.const 0)) (i64.const 0)) (assert_return (invoke "grow" (i64.const 1)) (i64.const 0)) (assert_return (invoke "grow" (i64.const 0)) (i64.const 1)) (assert_return (invoke "grow" (i64.const 2)) (i64.const 1)) (assert_return (invoke "grow" (i64.const 10000)) (i64.const 3)) (module (memory i64 0 10) (func (export "grow") (param i64) (result i64) (memory.grow (local.get 0))) ) (assert_return (invoke "grow" (i64.const 0)) (i64.const 0)) (assert_return (invoke "grow" (i64.const 1)) (i64.const 0)) (assert_return (invoke "grow" (i64.const 1)) (i64.const 1)) (assert_return (invoke "grow" (i64.const 2)) (i64.const 2)) (assert_return (invoke "grow" (i64.const 6)) (i64.const 4)) (assert_return (invoke "grow" (i64.const 0)) (i64.const 10)) (assert_return (invoke "grow" (i64.const 1)) (i64.const -1)) binaryen-version_108/test/spec/return.wast000066400000000000000000000330671423707623100211060ustar00rootroot00000000000000;; Test `return` operator (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (drop (i32.ctz (return)))) (func (export "type-i64") (drop (i64.ctz (return)))) (func (export "type-f32") (drop (f32.neg (return)))) (func (export "type-f64") (drop (f64.neg (return)))) (func (export "type-i32-value") (result i32) (block (result i32) (i32.ctz (return (i32.const 1)))) ) (func (export "type-i64-value") (result i64) (block (result i64) (i64.ctz (return (i64.const 2)))) ) (func (export "type-f32-value") (result f32) (block (result f32) (f32.neg (return (f32.const 3)))) ) (func (export "type-f64-value") (result f64) (block (result f64) (f64.neg (return (f64.const 4)))) ) (func (export "nullary") (return)) (func (export "unary") (result f64) (return (f64.const 3))) (func (export "as-func-first") (result i32) (return (i32.const 1)) (i32.const 2) ) (func (export "as-func-mid") (result i32) (call $dummy) (return (i32.const 2)) (i32.const 3) ) (func (export "as-func-last") (nop) (call $dummy) (return) ) (func (export "as-func-value") (result i32) (nop) (call $dummy) (return (i32.const 3)) ) (func (export "as-block-first") (block (return) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (return) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (return)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (return (i32.const 2))) ) (func (export "as-loop-first") (result i32) (loop (result i32) (return (i32.const 3)) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (return (i32.const 4)) (i32.const 2)) ) (func (export "as-loop-last") (result i32) (loop (result i32) (nop) (call $dummy) (return (i32.const 5))) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (return (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (return))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (return (i32.const 8)) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7) ) ) (func (export "as-br_table-index") (result i64) (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7) ) ) (func (export "as-return-value") (result i64) (return (return (i64.const 7))) ) (func (export "as-if-cond") (result i32) (if (result i32) (return (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (return (i32.const 3))) (else (local.get 1)) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (return (i32.const 4))) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (return (i32.const 5)) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (return (i32.const 6)) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (return (i32.const 7))) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (result i32) (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3)) ) (func (export "as-call-last") (result i32) (call $f (i32.const 1) (i32.const 2) (return (i32.const 14))) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-func") (result i32) (call_indirect (type $sig) (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (result i32) (call_indirect (type $sig) (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3) ) ) (func (export "as-call_indirect-last") (result i32) (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23)) ) ) (func (export "as-local.set-value") (result i32) (local f32) (local.set 0 (return (i32.const 17))) (i32.const -1) ) (func (export "as-local.tee-value") (result i32) (local i32) (local.tee 0 (return (i32.const 1))) ) (global $a (mut i32) (i32.const 0)) (func (export "as-global.set-value") (result i32) (global.set $a (return (i32.const 1))) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (return (f32.const 1.7))) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (return (i64.const 30))) ) (func (export "as-store-address") (result i32) (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1) ) (func (export "as-store-value") (result i32) (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1) ) (func (export "as-storeN-address") (result i32) (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1) ) (func (export "as-storeN-value") (result i32) (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1) ) (func (export "as-unary-operand") (result f32) (f32.neg (return (f32.const 3.4))) ) (func (export "as-binary-left") (result i32) (i32.add (return (i32.const 3)) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (return (i64.const 45))) ) (func (export "as-test-operand") (result i32) (i32.eqz (return (i32.const 44))) ) (func (export "as-compare-left") (result i32) (f64.le (return (i32.const 43)) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (return (i32.const 42))) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (return (i32.const 41))) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (return (i32.const 40))) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i64.const 2)) (assert_return (invoke "type-f32-value") (f32.const 3)) (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "nullary")) (assert_return (invoke "unary") (f64.const 3)) (assert_return (invoke "as-func-first") (i32.const 1)) (assert_return (invoke "as-func-mid") (i32.const 2)) (assert_return (invoke "as-func-last")) (assert_return (invoke "as-func-value") (i32.const 3)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index") (i64.const 9)) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i64.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-func") (i32.const 20)) (assert_return (invoke "as-call_indirect-first") (i32.const 21)) (assert_return (invoke "as-call_indirect-mid") (i32.const 22)) (assert_return (invoke "as-call_indirect-last") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-local.tee-value") (i32.const 1)) (assert_return (invoke "as-global.set-value") (i32.const 1)) (assert_return (invoke "as-load-address") (f32.const 1.7)) (assert_return (invoke "as-loadN-address") (i64.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (f32.const 3.4)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i64.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_invalid (module (func $type-value-empty-vs-num (result i32) (return))) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-block (result i32) (i32.const 0) (block (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-loop (result i32) (i32.const 0) (loop (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-then (result i32) (i32.const 0) (i32.const 0) (if (then (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-else (result i32) (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (return))) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br (result i32) (i32.const 0) (block (br 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_if (result i32) (i32.const 0) (block (br_if 0 (return) (i32.const 1))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-br_table (result i32) (i32.const 0) (block (br_table 0 (return))) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-return (result i32) (return (return)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-select (result i32) (select (return) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-call (result i32) (call 1 (return)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-vs-num-in-call_indirect (result i32) (block (result i32) (call_indirect (type $sig) (return) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.set (result i32) (local i32) (local.set 0 (return)) (local.get 0) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-empty-vs-num-in-local.tee (result i32) (local i32) (local.tee 0 (return)) ) ) "type mismatch" ) (assert_invalid (module (global $x (mut i32) (i32.const 0)) (func $type-value-empty-vs-num-in-global.set (result i32) (global.set $x (return)) (global.get $x) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-memory.grow (result i32) (memory.grow (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 0) (func $type-value-empty-vs-num-in-load (result i32) (i32.load (return)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-vs-num-in-store (result i32) (i32.store (return) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (func $type-value-void-vs-num (result f64) (return (nop)))) "type mismatch" ) (assert_invalid (module (func $type-value-num-vs-num (result f64) (return (i64.const 1)))) "type mismatch" ) binaryen-version_108/test/spec/run.py000077500000000000000000000075461423707623100200530ustar00rootroot00000000000000#!/usr/bin/env python3 from __future__ import print_function import argparse import os import os.path import unittest import subprocess import glob import sys ownDir = os.path.dirname(os.path.abspath(sys.argv[0])) inputDir = ownDir outputDir = os.path.join(inputDir, "_output") parser = argparse.ArgumentParser() parser.add_argument("--wasm", metavar="", default=os.path.join(os.getcwd(), "wasm")) parser.add_argument("--js", metavar="") parser.add_argument("--out", metavar="", default=outputDir) parser.add_argument("file", nargs='*') arguments = parser.parse_args() sys.argv = sys.argv[:1] wasmCommand = arguments.wasm jsCommand = arguments.js outputDir = arguments.out inputFiles = arguments.file if arguments.file else glob.glob(os.path.join(inputDir, "*.wast")) if not os.path.exists(wasmCommand): sys.stderr.write("""\ Error: The executable '%s' does not exist. Provide the correct path with the '--wasm' flag. """ % (wasmCommand)) parser.print_help() sys.exit(1) class RunTests(unittest.TestCase): def _runCommand(self, command, logPath, expectedExitCode = 0): with open(logPath, 'w+') as out: exitCode = subprocess.call(command, shell=True, stdout=out, stderr=subprocess.STDOUT) self.assertEqual(expectedExitCode, exitCode, "failed with exit code %i (expected %i) for %s" % (exitCode, expectedExitCode, command)) def _auxFile(self, path): if os.path.exists(path): os.remove(path) return path def _compareFile(self, expectFile, actualFile): if os.path.exists(expectFile): with open(expectFile) as expect: with open(actualFile) as actual: expectText = expect.read() actualText = actual.read() self.assertEqual(expectText, actualText) def _runTestFile(self, inputPath): dir, inputFile = os.path.split(inputPath) outputPath = os.path.join(outputDir, inputFile) # Run original file expectedExitCode = 1 if ".fail." in inputFile else 0 logPath = self._auxFile(outputPath + ".log") self._runCommand(('%s "%s"') % (wasmCommand, inputPath), logPath, expectedExitCode) if expectedExitCode != 0: return # Convert to binary and run again wasmPath = self._auxFile(outputPath + ".bin.wast") logPath = self._auxFile(wasmPath + ".log") self._runCommand(('%s -d "%s" -o "%s"') % (wasmCommand, inputPath, wasmPath), logPath) self._runCommand(('%s "%s"') % (wasmCommand, wasmPath), logPath) # Convert back to text and run again wastPath = self._auxFile(wasmPath + ".wast") logPath = self._auxFile(wastPath + ".log") self._runCommand(('%s -d "%s" -o "%s"') % (wasmCommand, wasmPath, wastPath), logPath) self._runCommand(('%s "%s"') % (wasmCommand, wastPath), logPath) # Convert back to binary once more and compare wasm2Path = self._auxFile(wastPath + ".bin.wast") logPath = self._auxFile(wasm2Path + ".log") self._runCommand(('%s -d "%s" -o "%s"') % (wasmCommand, wastPath, wasm2Path), logPath) self._compareFile(wasmPath, wasm2Path) # Convert back to text once more and compare wast2Path = self._auxFile(wasm2Path + ".wast") logPath = self._auxFile(wast2Path + ".log") self._runCommand(('%s -d "%s" -o "%s"') % (wasmCommand, wasm2Path, wast2Path), logPath) self._compareFile(wastPath, wast2Path) # Convert to JavaScript jsPath = self._auxFile(outputPath.replace(".wast", ".js")) logPath = self._auxFile(jsPath + ".log") self._runCommand(('%s -d "%s" -o "%s"') % (wasmCommand, inputPath, jsPath), logPath) if jsCommand != None: self._runCommand(('%s "%s"') % (jsCommand, jsPath), logPath) if __name__ == "__main__": if not os.path.exists(outputDir): os.makedirs(outputDir) for fileName in inputFiles: testName = 'test ' + os.path.basename(fileName) setattr(RunTests, testName, lambda self, file=fileName: self._runTestFile(file)) unittest.main() binaryen-version_108/test/spec/select.wast000066400000000000000000000404041423707623100210370ustar00rootroot00000000000000(module (memory 1) (func $dummy) (func (export "select_i32") (param $lhs i32) (param $rhs i32) (param $cond i32) (result i32) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_i64") (param $lhs i64) (param $rhs i64) (param $cond i32) (result i64) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_f32") (param $lhs f32) (param $rhs f32) (param $cond i32) (result f32) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) (func (export "select_f64") (param $lhs f64) (param $rhs f64) (param $cond i32) (result f64) (select (local.get $lhs) (local.get $rhs) (local.get $cond))) ;; Check that both sides of the select are evaluated (func (export "select_trap_l") (param $cond i32) (result i32) (select (unreachable) (i32.const 0) (local.get $cond)) ) (func (export "select_trap_r") (param $cond i32) (result i32) (select (i32.const 0) (unreachable) (local.get $cond)) ) (func (export "select_unreached") (unreachable) (select) (unreachable) (i32.const 0) (select) (unreachable) (i32.const 0) (i32.const 0) (select) (unreachable) (f32.const 0) (i32.const 0) (select) (unreachable) ) ;; As the argument of control constructs and instructions (func (export "as-select-first") (param i32) (result i32) (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3)) ) (func (export "as-select-mid") (param i32) (result i32) (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3)) ) (func (export "as-select-last") (param i32) (result i32) (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-loop-first") (param i32) (result i32) (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy)) ) (func (export "as-loop-mid") (param i32) (result i32) (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy)) ) (func (export "as-loop-last") (param i32) (result i32) (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0))) ) (func (export "as-if-condition") (param i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy))) ) (func (export "as-if-then") (param i32) (result i32) (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4))) ) (func (export "as-if-else") (param i32) (result i32) (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_if-first") (param i32) (result i32) (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4))) ) (func (export "as-br_if-last") (param i32) (result i32) (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)))) ) (func (export "as-br_table-first") (param i32) (result i32) (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0)) ) (func (export "as-br_table-last") (param i32) (result i32) (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0)) ) (func $func (param i32 i32) (result i32) (local.get 0)) (type $check (func (param i32 i32) (result i32))) (table funcref (elem $func)) (func (export "as-call_indirect-first") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 1) (i32.const 0) ) ) ) (func (export "as-call_indirect-mid") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 0) ) ) ) (func (export "as-call_indirect-last") (param i32) (result i32) (block (result i32) (call_indirect (type $check) (i32.const 1) (i32.const 4) (select (i32.const 2) (i32.const 3) (local.get 0)) ) ) ) (func (export "as-store-first") (param i32) (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store) ) (func (export "as-store-last") (param i32) (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store) ) (func (export "as-memory.grow-value") (param i32) (result i32) (memory.grow (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func $f (param i32) (result i32) (local.get 0)) (func (export "as-call-value") (param i32) (result i32) (call $f (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-return-value") (param i32) (result i32) (select (i32.const 1) (i32.const 2) (local.get 0)) (return) ) (func (export "as-drop-operand") (param i32) (drop (select (i32.const 1) (i32.const 2) (local.get 0))) ) (func (export "as-br-value") (param i32) (result i32) (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0)))) ) (func (export "as-local.set-value") (param i32) (result i32) (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0) ) (func (export "as-local.tee-value") (param i32) (result i32) (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0))) ) (global $a (mut i32) (i32.const 10)) (func (export "as-global.set-value") (param i32) (result i32) (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0))) (global.get $a) ) (func (export "as-load-operand") (param i32) (result i32) (i32.load (select (i32.const 0) (i32.const 4) (local.get 0))) ) (func (export "as-unary-operand") (param i32) (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) (func (export "as-binary-operand") (param i32) (result i32) (i32.mul (select (i32.const 1) (i32.const 2) (local.get 0)) (select (i32.const 1) (i32.const 2) (local.get 0)) ) ) (func (export "as-test-operand") (param i32) (result i32) (block (result i32) (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-compare-left") (param i32) (result i32) (block (result i32) (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1)) ) ) (func (export "as-compare-right") (param i32) (result i32) (block (result i32) (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0))) ) ) (func (export "as-convert-operand") (param i32) (result i32) (block (result i32) (i32.wrap_i64 (select (i64.const 1) (i64.const 0) (local.get 0))) ) ) ) (assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) (assert_return (invoke "select_f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) (assert_return (invoke "select_f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) (assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) (assert_return (invoke "select_i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) (assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) (assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) (assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) (assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) (assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) (assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) (assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) (assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) (assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) (assert_trap (invoke "select_trap_l" (i32.const 1)) "unreachable") (assert_trap (invoke "select_trap_l" (i32.const 0)) "unreachable") (assert_trap (invoke "select_trap_r" (i32.const 1)) "unreachable") (assert_trap (invoke "select_trap_r" (i32.const 0)) "unreachable") (assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0)) (assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-condition" (i32.const 0))) (assert_return (invoke "as-if-condition" (i32.const 1))) (assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 3)) (assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 2)) (assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 1)) (assert_trap (invoke "as-call_indirect-last" (i32.const 0)) "undefined element") (assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element") (assert_return (invoke "as-store-first" (i32.const 0))) (assert_return (invoke "as-store-first" (i32.const 1))) (assert_return (invoke "as-store-last" (i32.const 0))) (assert_return (invoke "as-store-last" (i32.const 1))) (assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 3)) (assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-drop-operand" (i32.const 0))) (assert_return (invoke "as-drop-operand" (i32.const 1))) (assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2)) (assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1)) (assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4)) (assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1)) (assert_return (invoke "as-convert-operand" (i32.const 0)) (i32.const 0)) (assert_return (invoke "as-convert-operand" (i32.const 1)) (i32.const 1)) (assert_invalid (module (func $arity-0 (select (nop) (nop) (i32.const 1)))) "type mismatch" ) ;; The first two operands should have the same type as each other (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-num-vs-num (select (i32.const 1) (f64.const 1.0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty (i32.const 0) (i32.const 0) (select) (drop) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-block (i32.const 0) (i32.const 0) (i32.const 0) (block (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-block (i32.const 0) (i32.const 0) (block (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-block (i32.const 0) (block (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-loop (i32.const 0) (i32.const 0) (i32.const 0) (loop (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.const 0) (select) (drop)) ) ) "type mismatch" ) (assert_invalid (module (func $type-1st-operand-empty-in-then (i32.const 0) (i32.const 0) (i32.const 0) (if (then (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-2nd-operand-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.const 0) (select) (drop))) ) ) "type mismatch" ) (assert_invalid (module (func $type-3rd-operand-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.const 0) (select) (drop))) ) ) "type mismatch" ) binaryen-version_108/test/spec/set_local.wast000066400000000000000000000127471423707623100215360ustar00rootroot00000000000000;; Test `local.set` operator (module ;; Typing (func (export "type-local-i32") (local i32) (local.set 0 (i32.const 0))) (func (export "type-local-i64") (local i64) (local.set 0 (i64.const 0))) (func (export "type-local-f32") (local f32) (local.set 0 (f32.const 0))) (func (export "type-local-f64") (local f64) (local.set 0 (f64.const 0))) (func (export "type-param-i32") (param i32) (local.set 0 (i32.const 10))) (func (export "type-param-i64") (param i64) (local.set 0 (i64.const 11))) (func (export "type-param-f32") (param f32) (local.set 0 (f32.const 11.1))) (func (export "type-param-f64") (param f64) (local.set 0 (f64.const 12.2))) (func (export "type-mixed") (param i64 f32 f64 i32 i32) (local f32 i64 i64 f64) (local.set 0 (i64.const 0)) (local.set 1 (f32.const 0)) (local.set 2 (f64.const 0)) (local.set 3 (i32.const 0)) (local.set 4 (i32.const 0)) (local.set 5 (f32.const 0)) (local.set 6 (i64.const 0)) (local.set 7 (i64.const 0)) (local.set 8 (f64.const 0)) ) ;; Writing (func (export "write") (param i64 f32 f64 i32 i32) (result i64) (local f32 i64 i64 f64) (local.set 1 (f32.const -0.3)) (local.set 3 (i32.const 40)) (local.set 4 (i32.const -7)) (local.set 5 (f32.const 5.5)) (local.set 6 (i64.const 6)) (local.set 8 (f64.const 8)) (i64.trunc_f64_s (f64.add (f64.convert_i64_u (local.get 0)) (f64.add (f64.promote_f32 (local.get 1)) (f64.add (local.get 2) (f64.add (f64.convert_i32_u (local.get 3)) (f64.add (f64.convert_i32_s (local.get 4)) (f64.add (f64.promote_f32 (local.get 5)) (f64.add (f64.convert_i64_u (local.get 6)) (f64.add (f64.convert_i64_u (local.get 7)) (local.get 8) ) ) ) ) ) ) ) ) ) ) ) (assert_return (invoke "type-local-i32")) (assert_return (invoke "type-local-i64")) (assert_return (invoke "type-local-f32")) (assert_return (invoke "type-local-f64")) (assert_return (invoke "type-param-i32" (i32.const 2))) (assert_return (invoke "type-param-i64" (i64.const 3))) (assert_return (invoke "type-param-f32" (f32.const 4.4))) (assert_return (invoke "type-param-f64" (f64.const 5.5))) (assert_return (invoke "type-mixed" (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) ) ) (assert_return (invoke "write" (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) ) (i64.const 56) ) ;; Invalid typing of access to locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.set 0 (i32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.set 0 (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.set 1 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-local-arg-void-vs-num (local i32) (local.set 0 (nop)))) "type mismatch" ) (assert_invalid (module (func $type-local-arg-num-vs-num (local i32) (local.set 0 (f32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-arg-num-vs-num (local f32) (local.set 0 (f64.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-arg-num-vs-num (local f64 i64) (local.set 1 (f64.const 0)))) "type mismatch" ) ;; Invalid typing of access to parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) (assert_invalid (module (func $type-param-arg-void-vs-num (param i32) (local.set 0 (nop)))) "type mismatch" ) (assert_invalid (module (func $type-param-arg-num-vs-num (param i32) (local.set 0 (f32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-arg-num-vs-num (param f32) (local.set 0 (f64.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-arg-num-vs-num (param f64 i64) (local.set 1 (f64.const 0)))) "type mismatch" ) ;; Invalid local index (assert_invalid (module (func $unbound-local (local i32 i64) (local.get 3))) "unknown local" ) (assert_invalid (module (func $large-local (local i32 i64) (local.get 14324343))) "unknown local" ) (assert_invalid (module (func $unbound-param (param i32 i64) (local.get 2))) "unknown local" ) (assert_invalid (module (func $large-param (local i32 i64) (local.get 714324343))) "unknown local" ) (assert_invalid (module (func $unbound-mixed (param i32) (local i32 i64) (local.get 3))) "unknown local" ) (assert_invalid (module (func $large-mixed (param i64) (local i32 i64) (local.get 214324343))) "unknown local" ) (assert_invalid (module (func $type-mixed-arg-num-vs-num (param f32) (local i32) (local.set 1 (f32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-mixed-arg-num-vs-num (param i64 i32) (local f32) (local.set 1 (f32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-mixed-arg-num-vs-num (param i64) (local f64 i64) (local.set 1 (i64.const 0)))) "type mismatch" ) binaryen-version_108/test/spec/simd.wast000066400000000000000000002316521423707623100205230ustar00rootroot00000000000000(module (memory 1) (data (i32.const 128) "WASMSIMDGOESFAST") (data (i32.const 256) "\80\90\a0\b0\c0\d0\e0\f0") (data (i32.const 1024) "\ff\ff\ff\ff\ff\ff\ff\ff") (func (export "v128.load") (param $0 i32) (result v128) (v128.load (local.get $0))) (func (export "v128.store") (param $0 i32) (param $1 v128) (result v128) (v128.store offset=0 align=16 (local.get $0) (local.get $1)) (v128.load (local.get $0)) ) (func (export "v128.const.i8x16") (result v128) (v128.const i8x16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (func (export "v128.const.i16x8") (result v128) (v128.const i16x8 1 2 3 4 5 6 7 8)) (func (export "v128.const.i32x4") (result v128) (v128.const i32x4 1 2 3 4)) (func (export "v128.const.i64x2") (result v128) (v128.const i64x2 1 2)) (func (export "v128.const.f32x4") (result v128) (v128.const f32x4 1.0 2 3 4)) (func (export "v128.const.f64x2") (result v128) (v128.const f64x2 1.0 2)) (func (export "i8x16.shuffle_interleave_bytes") (param $0 v128) (param $1 v128) (result v128) (i8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31 (local.get $0) (local.get $1)) ) (func (export "i8x16.shuffle_reverse_i32s") (param $0 v128) (result v128) (i8x16.shuffle 12 13 14 15 8 9 10 11 4 5 6 7 0 1 2 3 (local.get $0) (local.get $0)) ) (func (export "i8x16.splat") (param $0 i32) (result v128) (i8x16.splat (local.get $0))) (func (export "i8x16.extract_lane_s_first") (param $0 v128) (result i32) (i8x16.extract_lane_s 0 (local.get $0))) (func (export "i8x16.extract_lane_s_last") (param $0 v128) (result i32) (i8x16.extract_lane_s 15 (local.get $0))) (func (export "i8x16.extract_lane_u_first") (param $0 v128) (result i32) (i8x16.extract_lane_u 0 (local.get $0))) (func (export "i8x16.extract_lane_u_last") (param $0 v128) (result i32) (i8x16.extract_lane_u 15 (local.get $0))) (func (export "i8x16.replace_lane_first") (param $0 v128) (param $1 i32) (result v128) (i8x16.replace_lane 0 (local.get $0) (local.get $1))) (func (export "i8x16.replace_lane_last") (param $0 v128) (param $1 i32) (result v128) (i8x16.replace_lane 15 (local.get $0) (local.get $1))) (func (export "i16x8.splat") (param $0 i32) (result v128) (i16x8.splat (local.get $0))) (func (export "i16x8.extract_lane_s_first") (param $0 v128) (result i32) (i16x8.extract_lane_s 0 (local.get $0))) (func (export "i16x8.extract_lane_s_last") (param $0 v128) (result i32) (i16x8.extract_lane_s 7 (local.get $0))) (func (export "i16x8.extract_lane_u_first") (param $0 v128) (result i32) (i16x8.extract_lane_u 0 (local.get $0))) (func (export "i16x8.extract_lane_u_last") (param $0 v128) (result i32) (i16x8.extract_lane_u 7 (local.get $0))) (func (export "i16x8.replace_lane_first") (param $0 v128) (param $1 i32) (result v128) (i16x8.replace_lane 0 (local.get $0) (local.get $1))) (func (export "i16x8.replace_lane_last") (param $0 v128) (param $1 i32) (result v128) (i16x8.replace_lane 7 (local.get $0) (local.get $1))) (func (export "i32x4.splat") (param $0 i32) (result v128) (i32x4.splat (local.get $0))) (func (export "i32x4.extract_lane_first") (param $0 v128) (result i32) (i32x4.extract_lane 0 (local.get $0))) (func (export "i32x4.extract_lane_last") (param $0 v128) (result i32) (i32x4.extract_lane 3 (local.get $0))) (func (export "i32x4.replace_lane_first") (param $0 v128) (param $1 i32) (result v128) (i32x4.replace_lane 0 (local.get $0) (local.get $1))) (func (export "i32x4.replace_lane_last") (param $0 v128) (param $1 i32) (result v128) (i32x4.replace_lane 3 (local.get $0) (local.get $1))) (func (export "i64x2.splat") (param $0 i64) (result v128) (i64x2.splat (local.get $0))) (func (export "i64x2.extract_lane_first") (param $0 v128) (result i64) (i64x2.extract_lane 0 (local.get $0))) (func (export "i64x2.extract_lane_last") (param $0 v128) (result i64) (i64x2.extract_lane 1 (local.get $0))) (func (export "i64x2.replace_lane_first") (param $0 v128) (param $1 i64) (result v128) (i64x2.replace_lane 0 (local.get $0) (local.get $1))) (func (export "i64x2.replace_lane_last") (param $0 v128) (param $1 i64) (result v128) (i64x2.replace_lane 1 (local.get $0) (local.get $1))) (func (export "f32x4.splat") (param $0 f32) (result v128) (f32x4.splat (local.get $0))) (func (export "f32x4.extract_lane_first") (param $0 v128) (result f32) (f32x4.extract_lane 0 (local.get $0))) (func (export "f32x4.extract_lane_last") (param $0 v128) (result f32) (f32x4.extract_lane 3 (local.get $0))) (func (export "f32x4.replace_lane_first") (param $0 v128) (param $1 f32) (result v128) (f32x4.replace_lane 0 (local.get $0) (local.get $1))) (func (export "f32x4.replace_lane_last") (param $0 v128) (param $1 f32) (result v128) (f32x4.replace_lane 3 (local.get $0) (local.get $1))) (func (export "f64x2.splat") (param $0 f64) (result v128) (f64x2.splat (local.get $0))) (func (export "f64x2.extract_lane_first") (param $0 v128) (result f64) (f64x2.extract_lane 0 (local.get $0))) (func (export "f64x2.extract_lane_last") (param $0 v128) (result f64) (f64x2.extract_lane 1 (local.get $0))) (func (export "f64x2.replace_lane_first") (param $0 v128) (param $1 f64) (result v128) (f64x2.replace_lane 0 (local.get $0) (local.get $1))) (func (export "f64x2.replace_lane_last") (param $0 v128) (param $1 f64) (result v128) (f64x2.replace_lane 1 (local.get $0) (local.get $1))) (func (export "i8x16.eq") (param $0 v128) (param $1 v128) (result v128) (i8x16.eq (local.get $0) (local.get $1))) (func (export "i8x16.ne") (param $0 v128) (param $1 v128) (result v128) (i8x16.ne (local.get $0) (local.get $1))) (func (export "i8x16.lt_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_s (local.get $0) (local.get $1))) (func (export "i8x16.lt_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_u (local.get $0) (local.get $1))) (func (export "i8x16.gt_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_s (local.get $0) (local.get $1))) (func (export "i8x16.gt_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_u (local.get $0) (local.get $1))) (func (export "i8x16.le_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.le_s (local.get $0) (local.get $1))) (func (export "i8x16.le_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.le_u (local.get $0) (local.get $1))) (func (export "i8x16.ge_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_s (local.get $0) (local.get $1))) (func (export "i8x16.ge_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_u (local.get $0) (local.get $1))) (func (export "i16x8.eq") (param $0 v128) (param $1 v128) (result v128) (i16x8.eq (local.get $0) (local.get $1))) (func (export "i16x8.ne") (param $0 v128) (param $1 v128) (result v128) (i16x8.ne (local.get $0) (local.get $1))) (func (export "i16x8.lt_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_s (local.get $0) (local.get $1))) (func (export "i16x8.lt_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_u (local.get $0) (local.get $1))) (func (export "i16x8.gt_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_s (local.get $0) (local.get $1))) (func (export "i16x8.gt_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_u (local.get $0) (local.get $1))) (func (export "i16x8.le_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.le_s (local.get $0) (local.get $1))) (func (export "i16x8.le_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.le_u (local.get $0) (local.get $1))) (func (export "i16x8.ge_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_s (local.get $0) (local.get $1))) (func (export "i16x8.ge_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_u (local.get $0) (local.get $1))) (func (export "i32x4.eq") (param $0 v128) (param $1 v128) (result v128) (i32x4.eq (local.get $0) (local.get $1))) (func (export "i32x4.ne") (param $0 v128) (param $1 v128) (result v128) (i32x4.ne (local.get $0) (local.get $1))) (func (export "i32x4.lt_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_s (local.get $0) (local.get $1))) (func (export "i32x4.lt_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_u (local.get $0) (local.get $1))) (func (export "i32x4.gt_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_s (local.get $0) (local.get $1))) (func (export "i32x4.gt_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_u (local.get $0) (local.get $1))) (func (export "i32x4.le_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.le_s (local.get $0) (local.get $1))) (func (export "i32x4.le_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.le_u (local.get $0) (local.get $1))) (func (export "i32x4.ge_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_s (local.get $0) (local.get $1))) (func (export "i32x4.ge_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_u (local.get $0) (local.get $1))) (func (export "i64x2.eq") (param $0 v128) (param $1 v128) (result v128) (i64x2.eq (local.get $0) (local.get $1))) (func (export "f32x4.eq") (param $0 v128) (param $1 v128) (result v128) (f32x4.eq (local.get $0) (local.get $1))) (func (export "f32x4.ne") (param $0 v128) (param $1 v128) (result v128) (f32x4.ne (local.get $0) (local.get $1))) (func (export "f32x4.lt") (param $0 v128) (param $1 v128) (result v128) (f32x4.lt (local.get $0) (local.get $1))) (func (export "f32x4.gt") (param $0 v128) (param $1 v128) (result v128) (f32x4.gt (local.get $0) (local.get $1))) (func (export "f32x4.le") (param $0 v128) (param $1 v128) (result v128) (f32x4.le (local.get $0) (local.get $1))) (func (export "f32x4.ge") (param $0 v128) (param $1 v128) (result v128) (f32x4.ge (local.get $0) (local.get $1))) (func (export "f64x2.eq") (param $0 v128) (param $1 v128) (result v128) (f64x2.eq (local.get $0) (local.get $1))) (func (export "f64x2.ne") (param $0 v128) (param $1 v128) (result v128) (f64x2.ne (local.get $0) (local.get $1))) (func (export "f64x2.lt") (param $0 v128) (param $1 v128) (result v128) (f64x2.lt (local.get $0) (local.get $1))) (func (export "f64x2.gt") (param $0 v128) (param $1 v128) (result v128) (f64x2.gt (local.get $0) (local.get $1))) (func (export "f64x2.le") (param $0 v128) (param $1 v128) (result v128) (f64x2.le (local.get $0) (local.get $1))) (func (export "f64x2.ge") (param $0 v128) (param $1 v128) (result v128) (f64x2.ge (local.get $0) (local.get $1))) (func (export "v128.not") (param $0 v128) (result v128) (v128.not (local.get $0))) (func (export "v128.and") (param $0 v128) (param $1 v128) (result v128) (v128.and (local.get $0) (local.get $1))) (func (export "v128.or") (param $0 v128) (param $1 v128) (result v128) (v128.or (local.get $0) (local.get $1))) (func (export "v128.xor") (param $0 v128) (param $1 v128) (result v128) (v128.xor (local.get $0) (local.get $1))) (func (export "v128.andnot") (param $0 v128) (param $1 v128) (result v128) (v128.andnot (local.get $0) (local.get $1))) (func (export "v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (v128.bitselect (local.get $0) (local.get $1) (local.get $2)) ) (func (export "v128.load8_lane") (param $0 i32) (param $1 v128) (result v128) (v128.load8_lane 0 (local.get $0) (local.get $1))) (func (export "v128.load16_lane") (param $0 i32) (param $1 v128) (result v128) (v128.load16_lane 0 (local.get $0) (local.get $1))) (func (export "v128.load32_lane") (param $0 i32) (param $1 v128) (result v128) (v128.load32_lane 0 (local.get $0) (local.get $1))) (func (export "v128.load64_lane") (param $0 i32) (param $1 v128) (result v128) (v128.load64_lane 0 (local.get $0) (local.get $1))) (func (export "v128.store8_lane") (param $0 i32) (param $1 v128) (v128.store8_lane 0 (local.get $0) (local.get $1))) (func (export "v128.store16_lane") (param $0 i32) (param $1 v128) (v128.store16_lane 0 (local.get $0) (local.get $1))) (func (export "v128.store32_lane") (param $0 i32) (param $1 v128) (v128.store32_lane 0 (local.get $0) (local.get $1))) (func (export "v128.store64_lane") (param $0 i32) (param $1 v128) (v128.store64_lane 0 (local.get $0) (local.get $1))) (func (export "i8x16.popcnt") (param $0 v128) (result v128) (i8x16.popcnt (local.get $0))) (func (export "i8x16.abs") (param $0 v128) (result v128) (i8x16.abs (local.get $0))) (func (export "i8x16.neg") (param $0 v128) (result v128) (i8x16.neg (local.get $0))) (func (export "i8x16.all_true") (param $0 v128) (result i32) (i8x16.all_true (local.get $0))) (func (export "i8x16.bitmask") (param $0 v128) (result i32) (i8x16.bitmask (local.get $0))) (func (export "i8x16.shl") (param $0 v128) (param $1 i32) (result v128) (i8x16.shl (local.get $0) (local.get $1))) (func (export "i8x16.shr_s") (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_s (local.get $0) (local.get $1))) (func (export "i8x16.shr_u") (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_u (local.get $0) (local.get $1))) (func (export "i8x16.add") (param $0 v128) (param $1 v128) (result v128) (i8x16.add (local.get $0) (local.get $1))) (func (export "i8x16.add_sat_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_s (local.get $0) (local.get $1))) (func (export "i8x16.add_sat_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.add_sat_u (local.get $0) (local.get $1))) (func (export "i8x16.sub") (param $0 v128) (param $1 v128) (result v128) (i8x16.sub (local.get $0) (local.get $1))) (func (export "i8x16.sub_sat_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_s (local.get $0) (local.get $1))) (func (export "i8x16.sub_sat_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_sat_u (local.get $0) (local.get $1))) (func (export "i8x16.min_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.min_s (local.get $0) (local.get $1))) (func (export "i8x16.min_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.min_u (local.get $0) (local.get $1))) (func (export "i8x16.max_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.max_s (local.get $0) (local.get $1))) (func (export "i8x16.max_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.max_u (local.get $0) (local.get $1))) (func (export "i8x16.avgr_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.avgr_u (local.get $0) (local.get $1))) (func (export "i16x8.abs") (param $0 v128) (result v128) (i16x8.abs (local.get $0))) (func (export "i16x8.neg") (param $0 v128) (result v128) (i16x8.neg (local.get $0))) (func (export "i16x8.all_true") (param $0 v128) (result i32) (i16x8.all_true (local.get $0))) (func (export "i16x8.bitmask") (param $0 v128) (result i32) (i16x8.bitmask (local.get $0))) (func (export "i16x8.shl") (param $0 v128) (param $1 i32) (result v128) (i16x8.shl (local.get $0) (local.get $1))) (func (export "i16x8.shr_s") (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_s (local.get $0) (local.get $1))) (func (export "i16x8.shr_u") (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_u (local.get $0) (local.get $1))) (func (export "i16x8.add") (param $0 v128) (param $1 v128) (result v128) (i16x8.add (local.get $0) (local.get $1))) (func (export "i16x8.add_sat_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_s (local.get $0) (local.get $1))) (func (export "i16x8.add_sat_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.add_sat_u (local.get $0) (local.get $1))) (func (export "i16x8.sub") (param $0 v128) (param $1 v128) (result v128) (i16x8.sub (local.get $0) (local.get $1))) (func (export "i16x8.sub_sat_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_s (local.get $0) (local.get $1))) (func (export "i16x8.sub_sat_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_sat_u (local.get $0) (local.get $1))) (func (export "i16x8.mul") (param $0 v128) (param $1 v128) (result v128) (i16x8.mul (local.get $0) (local.get $1))) (func (export "i16x8.min_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.min_s (local.get $0) (local.get $1))) (func (export "i16x8.min_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.min_u (local.get $0) (local.get $1))) (func (export "i16x8.max_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.max_s (local.get $0) (local.get $1))) (func (export "i16x8.max_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.max_u (local.get $0) (local.get $1))) (func (export "i16x8.avgr_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.avgr_u (local.get $0) (local.get $1))) (func (export "i16x8.q15mulr_sat_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.q15mulr_sat_s (local.get $0) (local.get $1))) (func (export "i16x8.extmul_low_i8x16_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_s (local.get $0) (local.get $1))) (func (export "i16x8.extmul_high_i8x16_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_s (local.get $0) (local.get $1))) (func (export "i16x8.extmul_low_i8x16_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_low_i8x16_u (local.get $0) (local.get $1))) (func (export "i16x8.extmul_high_i8x16_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.extmul_high_i8x16_u (local.get $0) (local.get $1))) (func (export "i32x4.extmul_low_i16x8_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_s (local.get $0) (local.get $1))) (func (export "i32x4.extmul_high_i16x8_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_s (local.get $0) (local.get $1))) (func (export "i32x4.extmul_low_i16x8_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_low_i16x8_u (local.get $0) (local.get $1))) (func (export "i32x4.extmul_high_i16x8_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.extmul_high_i16x8_u (local.get $0) (local.get $1))) (func (export "i64x2.extmul_low_i32x4_s") (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_s (local.get $0) (local.get $1))) (func (export "i64x2.extmul_high_i32x4_s") (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_s (local.get $0) (local.get $1))) (func (export "i64x2.extmul_low_i32x4_u") (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_u (local.get $0) (local.get $1))) (func (export "i64x2.extmul_high_i32x4_u") (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_u (local.get $0) (local.get $1))) (func (export "i32x4.abs") (param $0 v128) (result v128) (i32x4.abs (local.get $0))) (func (export "i32x4.neg") (param $0 v128) (result v128) (i32x4.neg (local.get $0))) (func (export "i32x4.all_true") (param $0 v128) (result i32) (i32x4.all_true (local.get $0))) (func (export "i32x4.bitmask") (param $0 v128) (result i32) (i32x4.bitmask (local.get $0))) (func (export "i32x4.shl") (param $0 v128) (param $1 i32) (result v128) (i32x4.shl (local.get $0) (local.get $1))) (func (export "i32x4.shr_s") (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_s (local.get $0) (local.get $1))) (func (export "i32x4.shr_u") (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_u (local.get $0) (local.get $1))) (func (export "i32x4.add") (param $0 v128) (param $1 v128) (result v128) (i32x4.add (local.get $0) (local.get $1))) (func (export "i32x4.sub") (param $0 v128) (param $1 v128) (result v128) (i32x4.sub (local.get $0) (local.get $1))) (func (export "i32x4.mul") (param $0 v128) (param $1 v128) (result v128) (i32x4.mul (local.get $0) (local.get $1))) (func (export "i32x4.min_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.min_s (local.get $0) (local.get $1))) (func (export "i32x4.min_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.min_u (local.get $0) (local.get $1))) (func (export "i32x4.max_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.max_s (local.get $0) (local.get $1))) (func (export "i32x4.max_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.max_u (local.get $0) (local.get $1))) (func (export "i32x4.dot_i16x8_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.dot_i16x8_s (local.get $0) (local.get $1))) (func (export "i64x2.neg") (param $0 v128) (result v128) (i64x2.neg (local.get $0))) (func (export "i64x2.bitmask") (param $0 v128) (result i32) (i64x2.bitmask (local.get $0))) (func (export "i64x2.shl") (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (local.get $0) (local.get $1))) (func (export "i64x2.shr_s") (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (local.get $0) (local.get $1))) (func (export "i64x2.shr_u") (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_u (local.get $0) (local.get $1))) (func (export "i64x2.add") (param $0 v128) (param $1 v128) (result v128) (i64x2.add (local.get $0) (local.get $1))) (func (export "i64x2.sub") (param $0 v128) (param $1 v128) (result v128) (i64x2.sub (local.get $0) (local.get $1))) (func (export "i64x2.mul") (param $0 v128) (param $1 v128) (result v128) (i64x2.mul (local.get $0) (local.get $1))) (func (export "f32x4.abs") (param $0 v128) (result v128) (f32x4.abs (local.get $0))) (func (export "f32x4.neg") (param $0 v128) (result v128) (f32x4.neg (local.get $0))) (func (export "f32x4.sqrt") (param $0 v128) (result v128) (f32x4.sqrt (local.get $0))) (func (export "f32x4.add") (param $0 v128) (param $1 v128) (result v128) (f32x4.add (local.get $0) (local.get $1))) (func (export "f32x4.sub") (param $0 v128) (param $1 v128) (result v128) (f32x4.sub (local.get $0) (local.get $1))) (func (export "f32x4.mul") (param $0 v128) (param $1 v128) (result v128) (f32x4.mul (local.get $0) (local.get $1))) (func (export "f32x4.div") (param $0 v128) (param $1 v128) (result v128) (f32x4.div (local.get $0) (local.get $1))) (func (export "f32x4.min") (param $0 v128) (param $1 v128) (result v128) (f32x4.min (local.get $0) (local.get $1))) (func (export "f32x4.max") (param $0 v128) (param $1 v128) (result v128) (f32x4.max (local.get $0) (local.get $1))) (func (export "f32x4.pmin") (param $0 v128) (param $1 v128) (result v128) (f32x4.pmin (local.get $0) (local.get $1))) (func (export "f32x4.pmax") (param $0 v128) (param $1 v128) (result v128) (f32x4.pmax (local.get $0) (local.get $1))) (func (export "f32x4.ceil") (param $0 v128) (result v128) (f32x4.ceil (local.get $0))) (func (export "f32x4.floor") (param $0 v128) (result v128) (f32x4.floor (local.get $0))) (func (export "f32x4.trunc") (param $0 v128) (result v128) (f32x4.trunc (local.get $0))) (func (export "f32x4.nearest") (param $0 v128) (result v128) (f32x4.nearest (local.get $0))) (func (export "f64x2.abs") (param $0 v128) (result v128) (f64x2.abs (local.get $0))) (func (export "f64x2.neg") (param $0 v128) (result v128) (f64x2.neg (local.get $0))) (func (export "f64x2.sqrt") (param $0 v128) (result v128) (f64x2.sqrt (local.get $0))) (func (export "f64x2.add") (param $0 v128) (param $1 v128) (result v128) (f64x2.add (local.get $0) (local.get $1))) (func (export "f64x2.sub") (param $0 v128) (param $1 v128) (result v128) (f64x2.sub (local.get $0) (local.get $1))) (func (export "f64x2.mul") (param $0 v128) (param $1 v128) (result v128) (f64x2.mul (local.get $0) (local.get $1))) (func (export "f64x2.div") (param $0 v128) (param $1 v128) (result v128) (f64x2.div (local.get $0) (local.get $1))) (func (export "f64x2.min") (param $0 v128) (param $1 v128) (result v128) (f64x2.min (local.get $0) (local.get $1))) (func (export "f64x2.max") (param $0 v128) (param $1 v128) (result v128) (f64x2.max (local.get $0) (local.get $1))) (func (export "f64x2.pmin") (param $0 v128) (param $1 v128) (result v128) (f64x2.pmin (local.get $0) (local.get $1))) (func (export "f64x2.pmax") (param $0 v128) (param $1 v128) (result v128) (f64x2.pmax (local.get $0) (local.get $1))) (func (export "f64x2.ceil") (param $0 v128) (result v128) (f64x2.ceil (local.get $0))) (func (export "f64x2.floor") (param $0 v128) (result v128) (f64x2.floor (local.get $0))) (func (export "f64x2.trunc") (param $0 v128) (result v128) (f64x2.trunc (local.get $0))) (func (export "f64x2.nearest") (param $0 v128) (result v128) (f64x2.nearest (local.get $0))) (func (export "i16x8.extadd_pairwise_i8x16_s") (param v128) (result v128) (i16x8.extadd_pairwise_i8x16_s (local.get 0))) (func (export "i16x8.extadd_pairwise_i8x16_u") (param v128) (result v128) (i16x8.extadd_pairwise_i8x16_u (local.get 0))) (func (export "i32x4.extadd_pairwise_i16x8_s") (param v128) (result v128) (i32x4.extadd_pairwise_i16x8_s (local.get 0))) (func (export "i32x4.extadd_pairwise_i16x8_u") (param v128) (result v128) (i32x4.extadd_pairwise_i16x8_u (local.get 0))) (func (export "i32x4.trunc_sat_f32x4_s") (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0))) (func (export "i32x4.trunc_sat_f32x4_u") (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_u (local.get $0))) (func (export "f32x4.convert_i32x4_s") (param $0 v128) (result v128) (f32x4.convert_i32x4_s (local.get $0))) (func (export "f32x4.convert_i32x4_u") (param $0 v128) (result v128) (f32x4.convert_i32x4_u (local.get $0))) (func (export "v128.load8_splat") (param $0 i32) (result v128) (v128.load8_splat (local.get $0))) (func (export "v128.load16_splat") (param $0 i32) (result v128) (v128.load16_splat (local.get $0))) (func (export "v128.load32_splat") (param $0 i32) (result v128) (v128.load32_splat (local.get $0))) (func (export "v128.load64_splat") (param $0 i32) (result v128) (v128.load64_splat (local.get $0))) (func (export "i8x16.narrow_i16x8_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_s (local.get $0) (local.get $1))) (func (export "i8x16.narrow_i16x8_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_u (local.get $0) (local.get $1))) (func (export "i16x8.narrow_i32x4_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_s (local.get $0) (local.get $1))) (func (export "i16x8.narrow_i32x4_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_u (local.get $0) (local.get $1))) (func (export "i16x8.extend_low_i8x16_s") (param $0 v128) (result v128) (i16x8.extend_low_i8x16_s (local.get $0))) (func (export "i16x8.extend_high_i8x16_s") (param $0 v128) (result v128) (i16x8.extend_high_i8x16_s (local.get $0))) (func (export "i16x8.extend_low_i8x16_u") (param $0 v128) (result v128) (i16x8.extend_low_i8x16_u (local.get $0))) (func (export "i16x8.extend_high_i8x16_u") (param $0 v128) (result v128) (i16x8.extend_high_i8x16_u (local.get $0))) (func (export "i32x4.extend_low_i16x8_s") (param $0 v128) (result v128) (i32x4.extend_low_i16x8_s (local.get $0))) (func (export "i32x4.extend_high_i16x8_s") (param $0 v128) (result v128) (i32x4.extend_high_i16x8_s (local.get $0))) (func (export "i32x4.extend_low_i16x8_u") (param $0 v128) (result v128) (i32x4.extend_low_i16x8_u (local.get $0))) (func (export "i32x4.extend_high_i16x8_u") (param $0 v128) (result v128) (i32x4.extend_high_i16x8_u (local.get $0))) (func (export "i64x2.extend_low_i32x4_s") (param $0 v128) (result v128) (i64x2.extend_low_i32x4_s (local.get $0))) (func (export "i64x2.extend_high_i32x4_s") (param $0 v128) (result v128) (i64x2.extend_high_i32x4_s (local.get $0))) (func (export "i64x2.extend_low_i32x4_u") (param $0 v128) (result v128) (i64x2.extend_low_i32x4_u (local.get $0))) (func (export "i64x2.extend_high_i32x4_u") (param $0 v128) (result v128) (i64x2.extend_high_i32x4_u (local.get $0))) (func (export "v128.load8x8_u") (param $0 i32) (result v128) (v128.load8x8_u (local.get $0))) (func (export "v128.load8x8_s") (param $0 i32) (result v128) (v128.load8x8_s (local.get $0))) (func (export "v128.load16x4_u") (param $0 i32) (result v128) (v128.load16x4_u (local.get $0))) (func (export "v128.load16x4_s") (param $0 i32) (result v128) (v128.load16x4_s (local.get $0))) (func (export "v128.load32x2_u") (param $0 i32) (result v128) (v128.load32x2_u (local.get $0))) (func (export "v128.load32x2_s") (param $0 i32) (result v128) (v128.load32x2_s (local.get $0))) (func (export "v128.load32_zero") (param $0 i32) (result v128) (v128.load32_zero (local.get $0))) (func (export "v128.load64_zero") (param $0 i32) (result v128) (v128.load64_zero (local.get $0))) (func (export "i8x16.swizzle") (param $0 v128) (param $1 v128) (result v128) (i8x16.swizzle (local.get $0) (local.get $1))) (func (export "f64x2.convert_low_i32x4_s") (param $0 v128) (result v128) (f64x2.convert_low_i32x4_s (local.get $0))) (func (export "f64x2.convert_low_i32x4_u") (param $0 v128) (result v128) (f64x2.convert_low_i32x4_u (local.get $0))) (func (export "i32x4.trunc_sat_f64x2_s_zero") (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_s_zero (local.get $0))) (func (export "i32x4.trunc_sat_f64x2_u_zero") (param $0 v128) (result v128) (i32x4.trunc_sat_f64x2_u_zero (local.get $0))) (func (export "f32x4.demote_f64x2_zero") (param $0 v128) (result v128) (f32x4.demote_f64x2_zero (local.get $0))) (func (export "f64x2.promote_low_f32x4") (param $0 v128) (result v128) (f64x2.promote_low_f32x4 (local.get $0))) ) ;; TODO: Additional f64x2 conversions if specified ;; Basic v128 manipulation (assert_return (invoke "v128.load" (i32.const 128)) (v128.const i8x16 87 65 83 77 83 73 77 68 71 79 69 83 70 65 83 84)) (assert_return (invoke "v128.store" (i32.const 16) (v128.const i32x4 1 2 3 4)) (v128.const i32x4 1 2 3 4)) (assert_return (invoke "v128.load8_splat" (i32.const 128)) (v128.const i8x16 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87)) (assert_return (invoke "v128.load16_splat" (i32.const 128)) (v128.const i8x16 87 65 87 65 87 65 87 65 87 65 87 65 87 65 87 65)) (assert_return (invoke "v128.load32_splat" (i32.const 128)) (v128.const i8x16 87 65 83 77 87 65 83 77 87 65 83 77 87 65 83 77)) (assert_return (invoke "v128.load64_splat" (i32.const 128)) (v128.const i8x16 87 65 83 77 83 73 77 68 87 65 83 77 83 73 77 68)) (assert_return (invoke "v128.const.i8x16") (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)) (assert_return (invoke "v128.const.i16x8") (v128.const i8x16 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00)) (assert_return (invoke "v128.const.i32x4") (v128.const i8x16 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00)) (assert_return (invoke "v128.const.i64x2") (v128.const i8x16 01 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00)) (assert_return (invoke "v128.const.f32x4") (v128.const f32x4 1 2 3 4)) (assert_return (invoke "v128.const.f64x2") (v128.const f64x2 1 2)) (assert_return (invoke "i8x16.shuffle_interleave_bytes" (v128.const i8x16 1 0 3 0 5 0 7 0 9 0 11 0 13 0 15 0) (v128.const i8x16 0 2 0 4 0 6 0 8 0 10 0 12 0 14 0 16) ) (v128.const i8x16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) ) (assert_return (invoke "i8x16.shuffle_reverse_i32s" (v128.const i32x4 1 2 3 4)) (v128.const i32x4 4 3 2 1)) ;; i8x16 lane accesses (assert_return (invoke "i8x16.splat" (i32.const 5)) (v128.const i8x16 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5)) (assert_return (invoke "i8x16.splat" (i32.const 257)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (assert_return (invoke "i8x16.extract_lane_s_first" (v128.const i8x16 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const -1)) (assert_return (invoke "i8x16.extract_lane_s_last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255)) (i32.const -1)) (assert_return (invoke "i8x16.extract_lane_u_first" (v128.const i8x16 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 255)) (assert_return (invoke "i8x16.extract_lane_u_last" (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255)) (i32.const 255)) (assert_return (invoke "i8x16.replace_lane_first" (v128.const i64x2 0 0) (i32.const 7)) (v128.const i8x16 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (assert_return (invoke "i8x16.replace_lane_last" (v128.const i64x2 0 0) (i32.const 7)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7)) ;; i16x8 lane accesses (assert_return (invoke "i16x8.splat" (i32.const 5)) (v128.const i16x8 5 5 5 5 5 5 5 5)) (assert_return (invoke "i16x8.splat" (i32.const 65537)) (v128.const i32x4 1 1 1 1 1 1 1 1)) (assert_return (invoke "i16x8.extract_lane_s_first" (v128.const i32x4 65535 0 0 0 0 0 0 0)) (i32.const -1)) (assert_return (invoke "i16x8.extract_lane_s_last" (v128.const i32x4 0 0 0 0 0 0 0 65535)) (i32.const -1)) (assert_return (invoke "i16x8.extract_lane_u_first" (v128.const i32x4 65535 0 0 0 0 0 0 0)) (i32.const 65535)) (assert_return (invoke "i16x8.extract_lane_u_last" (v128.const i32x4 0 0 0 0 0 0 0 65535)) (i32.const 65535)) (assert_return (invoke "i16x8.replace_lane_first" (v128.const i64x2 0 0) (i32.const 7)) (v128.const i32x4 7 0 0 0 0 0 0 0)) (assert_return (invoke "i16x8.replace_lane_last" (v128.const i64x2 0 0) (i32.const 7)) (v128.const i32x4 0 0 0 0 0 0 0 7)) ;; i32x4 lane accesses (assert_return (invoke "i32x4.splat" (i32.const -5)) (v128.const i32x4 -5 -5 -5 -5)) (assert_return (invoke "i32x4.extract_lane_first" (v128.const i32x4 -5 0 0 0)) (i32.const -5)) (assert_return (invoke "i32x4.extract_lane_last" (v128.const i32x4 0 0 0 -5)) (i32.const -5)) (assert_return (invoke "i32x4.replace_lane_first" (v128.const i64x2 0 0) (i32.const 53)) (v128.const i32x4 53 0 0 0)) (assert_return (invoke "i32x4.replace_lane_last" (v128.const i64x2 0 0) (i32.const 53)) (v128.const i32x4 0 0 0 53)) ;; i64x2 lane accesses (assert_return (invoke "i64x2.splat" (i64.const -5)) (v128.const i64x2 -5 -5)) (assert_return (invoke "i64x2.extract_lane_first" (v128.const i64x2 -5 0)) (i64.const -5)) (assert_return (invoke "i64x2.extract_lane_last" (v128.const i64x2 0 -5)) (i64.const -5)) (assert_return (invoke "i64x2.replace_lane_first" (v128.const i64x2 0 0) (i64.const 53)) (v128.const i64x2 53 0)) (assert_return (invoke "i64x2.replace_lane_last" (v128.const i64x2 0 0) (i64.const 53)) (v128.const i64x2 0 53)) ;; f32x4 lane accesses (assert_return (invoke "f32x4.splat" (f32.const -5)) (v128.const f32x4 -5 -5 -5 -5)) (assert_return (invoke "f32x4.extract_lane_first" (v128.const f32x4 -5 0 0 0)) (f32.const -5)) (assert_return (invoke "f32x4.extract_lane_last" (v128.const f32x4 0 0 0 -5)) (f32.const -5)) (assert_return (invoke "f32x4.replace_lane_first" (v128.const i64x2 0 0) (f32.const 53)) (v128.const f32x4 53 0 0 0)) (assert_return (invoke "f32x4.replace_lane_last" (v128.const i64x2 0 0) (f32.const 53)) (v128.const f32x4 0 0 0 53)) ;; f64x2 lane accesses (assert_return (invoke "f64x2.splat" (f64.const -5)) (v128.const f64x2 -5 -5)) (assert_return (invoke "f64x2.extract_lane_first" (v128.const f64x2 -5 0)) (f64.const -5)) (assert_return (invoke "f64x2.extract_lane_last" (v128.const f64x2 0 -5)) (f64.const -5)) (assert_return (invoke "f64x2.replace_lane_first" (v128.const f64x2 0 0) (f64.const 53)) (v128.const f64x2 53 0)) (assert_return (invoke "f64x2.replace_lane_last" (v128.const f64x2 0 0) (f64.const 53)) (v128.const f64x2 0 53)) ;; i8x16 comparisons (assert_return (invoke "i8x16.eq" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 -1 0 -1 0 0 0 0 0 -1 0 0 -1 0 0 0 0) ) (assert_return (invoke "i8x16.ne" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 0 -1 0 -1 -1 -1 -1 -1 0 -1 -1 0 -1 -1 -1 -1) ) (assert_return (invoke "i8x16.lt_s" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 0 0 0 -1 0 -1 -1 0 0 0 -1 0 0 -1 -1 0) ) (assert_return (invoke "i8x16.lt_u" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 0 -1 0 0 -1 -1 0 -1 0 -1 0 0 -1 -1 0 -1) ) (assert_return (invoke "i8x16.gt_s" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1) ) (assert_return (invoke "i8x16.gt_u" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 0 0 0 -1 0 0 -1 0 0 0 -1 0 0 0 -1 0) ) (assert_return (invoke "i8x16.le_s" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 -1 0 -1 -1 0 -1 -1 0 -1 0 -1 -1 0 -1 -1 0) ) (assert_return (invoke "i8x16.le_u" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 -1 -1 -1 0 -1 -1 0 -1 -1 -1 0 -1 -1 -1 0 -1) ) (assert_return (invoke "i8x16.ge_s" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 -1 -1 -1 0 -1 0 0 -1 -1 -1 0 -1 -1 0 0 -1) ) (assert_return (invoke "i8x16.ge_u" (v128.const i32x4 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42) (v128.const i32x4 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128) ) (v128.const i32x4 -1 0 -1 -1 0 0 -1 0 -1 0 -1 -1 0 0 -1 0) ) ;; i16x8 comparisons (assert_return (invoke "i16x8.eq" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 -1 0 0 0 0 0 0 0) ) (assert_return (invoke "i16x8.ne" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 0 -1 -1 -1 -1 -1 -1 -1) ) (assert_return (invoke "i16x8.lt_s" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 0 0 0 -1 0 -1 0 -1) ) (assert_return (invoke "i16x8.lt_u" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 0 0 0 0 -1 0 -1 0) ) (assert_return (invoke "i16x8.gt_s" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 0 -1 -1 0 -1 0 -1 0) ) (assert_return (invoke "i16x8.gt_u" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 0 -1 -1 -1 0 -1 0 -1) ) (assert_return (invoke "i16x8.le_s" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 -1 0 0 -1 0 -1 0 -1) ) (assert_return (invoke "i16x8.le_u" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 -1 0 0 0 -1 0 -1 0) ) (assert_return (invoke "i16x8.ge_s" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 -1 -1 -1 0 -1 0 -1 0) ) (assert_return (invoke "i16x8.ge_u" (v128.const i32x4 0 32767 13 32768 1 32769 42 40000) (v128.const i32x4 0 13 1 32767 32769 42 40000 32767) ) (v128.const i32x4 -1 -1 -1 -1 0 -1 0 -1) ) ;; i32x4 comparisons (assert_return (invoke "i32x4.eq" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "i32x4.ne" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "i32x4.lt_s" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 0 -1 0 -1)) (assert_return (invoke "i32x4.lt_u" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 0 0 -1 -1)) (assert_return (invoke "i32x4.gt_s" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 0 0 -1 0)) (assert_return (invoke "i32x4.gt_u" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 0 -1 0 0)) (assert_return (invoke "i32x4.le_s" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 -1 -1 0 -1)) (assert_return (invoke "i32x4.le_u" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 -1 0 -1 -1)) (assert_return (invoke "i32x4.ge_s" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 -1 0 -1 0)) (assert_return (invoke "i32x4.ge_u" (v128.const i32x4 0 -1 53 -7) (v128.const i32x4 0 53 -7 -1)) (v128.const i32x4 -1 -1 0 0)) ;; i64x2 comparisons (assert_return (invoke "i64x2.eq" (v128.const i64x2 0 -1) (v128.const i64x2 -1 -1)) (v128.const i64x2 0 -1)) ;; f32x4 comparisons (assert_return (invoke "f32x4.eq" (v128.const f32x4 0 -1 1 0) (v128.const f32x4 0 0 -1 1)) (v128.const i32x4 -1 0 0 0)) (assert_return (invoke "f32x4.ne" (v128.const f32x4 0 -1 1 0) (v128.const f32x4 0 0 -1 1)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "f32x4.lt" (v128.const f32x4 0 -1 1 0) (v128.const f32x4 0 0 -1 1)) (v128.const i32x4 0 -1 0 -1)) (assert_return (invoke "f32x4.gt" (v128.const f32x4 0 -1 1 0) (v128.const f32x4 0 0 -1 1)) (v128.const i32x4 0 0 -1 0)) (assert_return (invoke "f32x4.le" (v128.const f32x4 0 -1 1 0) (v128.const f32x4 0 0 -1 1)) (v128.const i32x4 -1 -1 0 -1)) (assert_return (invoke "f32x4.ge" (v128.const f32x4 0 -1 1 0) (v128.const f32x4 0 0 -1 1)) (v128.const i32x4 -1 0 -1 0)) (assert_return (invoke "f32x4.eq" (v128.const f32x4 nan 0 nan infinity) (v128.const f32x4 0 nan nan infinity)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "f32x4.ne" (v128.const f32x4 nan 0 nan infinity) (v128.const f32x4 0 nan nan infinity)) (v128.const i32x4 -1 -1 -1 0)) (assert_return (invoke "f32x4.lt" (v128.const f32x4 nan 0 nan infinity) (v128.const f32x4 0 nan nan infinity)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "f32x4.gt" (v128.const f32x4 nan 0 nan infinity) (v128.const f32x4 0 nan nan infinity)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "f32x4.le" (v128.const f32x4 nan 0 nan infinity) (v128.const f32x4 0 nan nan infinity)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "f32x4.ge" (v128.const f32x4 nan 0 nan infinity) (v128.const f32x4 0 nan nan infinity)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "f32x4.eq" (v128.const f32x4 -infinity 0 nan -infinity) (v128.const f32x4 0 infinity infinity nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "f32x4.ne" (v128.const f32x4 -infinity 0 nan -infinity) (v128.const f32x4 0 infinity infinity nan)) (v128.const i32x4 -1 -1 -1 -1)) (assert_return (invoke "f32x4.lt" (v128.const f32x4 -infinity 0 nan -infinity) (v128.const f32x4 0 infinity infinity nan)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "f32x4.gt" (v128.const f32x4 -infinity 0 nan -infinity) (v128.const f32x4 0 infinity infinity nan)) (v128.const i32x4 0 0 0 0)) (assert_return (invoke "f32x4.le" (v128.const f32x4 -infinity 0 nan -infinity) (v128.const f32x4 0 infinity infinity nan)) (v128.const i32x4 -1 -1 0 0)) (assert_return (invoke "f32x4.ge" (v128.const f32x4 -infinity 0 nan -infinity) (v128.const f32x4 0 infinity infinity nan)) (v128.const i32x4 0 0 0 0)) ;; f64x2 comparisons (assert_return (invoke "f64x2.eq" (v128.const f64x2 0 1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 0 1) (v128.const f64x2 0 0)) (v128.const i64x2 0 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 0 1) (v128.const f64x2 0 0)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 0 1) (v128.const f64x2 0 0)) (v128.const i64x2 0 -1)) (assert_return (invoke "f64x2.le" (v128.const f64x2 0 1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 0)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 0 1) (v128.const f64x2 0 0)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.eq" (v128.const f64x2 nan 0) (v128.const f64x2 infinity infinity)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.ne" (v128.const f64x2 nan 0) (v128.const f64x2 infinity infinity)) (v128.const i64x2 -1 -1)) (assert_return (invoke "f64x2.lt" (v128.const f64x2 nan 0) (v128.const f64x2 infinity infinity)) (v128.const i64x2 0 -1)) (assert_return (invoke "f64x2.gt" (v128.const f64x2 nan 0) (v128.const f64x2 infinity infinity)) (v128.const i64x2 0 0)) (assert_return (invoke "f64x2.le" (v128.const f64x2 nan 0) (v128.const f64x2 infinity infinity)) (v128.const i64x2 0 -1)) (assert_return (invoke "f64x2.ge" (v128.const f64x2 nan 0) (v128.const f64x2 infinity infinity)) (v128.const i64x2 0 0)) ;; bitwise operations (assert_return (invoke "v128.not" (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 -1 0 -1 0)) (assert_return (invoke "v128.and" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 0 0 -1)) (assert_return (invoke "v128.or" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 -1 -1 -1)) (assert_return (invoke "v128.xor" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 -1 -1 0)) (assert_return (invoke "v128.andnot" (v128.const i32x4 0 0 -1 -1) (v128.const i32x4 0 -1 0 -1)) (v128.const i32x4 0 0 -1 0)) (assert_return (invoke "v128.bitselect" (v128.const i32x4 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA) (v128.const i32x4 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB) (v128.const i32x4 0xF0F0F0F0 0xFFFFFFFF 0x00000000 0xFF00FF00) ) (v128.const i32x4 0xABABABAB 0xAAAAAAAA 0xBBBBBBBB 0xAABBAABB) ) ;; TODO: signselect tests ;; load/store lane (assert_return (invoke "v128.load8_lane" (i32.const 1024) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.const i32x4 0x040302ff 0x08070605 0x0c0b0a09 0x100f0e0d) ) (assert_return (invoke "v128.load16_lane" (i32.const 1024) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.const i32x4 0x0403ffff 0x08070605 0x0c0b0a09 0x100f0e0d) ) (assert_return (invoke "v128.load32_lane" (i32.const 1024) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.const i32x4 0xffffffff 0x08070605 0x0c0b0a09 0x100f0e0d) ) (assert_return (invoke "v128.load64_lane" (i32.const 1024) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) (v128.const i32x4 0xffffffff 0xffffffff 0x0c0b0a09 0x100f0e0d) ) (assert_return (invoke "v128.store8_lane" (i32.const 1024) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (assert_return (invoke "v128.load" (i32.const 1024)) (v128.const i32x4 0xffffff01 0xffffffff 0x00000000 0x00000000)) (assert_return (invoke "v128.store16_lane" (i32.const 1024) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (assert_return (invoke "v128.load" (i32.const 1024)) (v128.const i32x4 0xffff0201 0xffffffff 0x00000000 0x00000000)) (assert_return (invoke "v128.store32_lane" (i32.const 1024) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (assert_return (invoke "v128.load" (i32.const 1024)) (v128.const i32x4 0x04030201 0xffffffff 0x00000000 0x00000000)) (assert_return (invoke "v128.store64_lane" (i32.const 1024) (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) (assert_return (invoke "v128.load" (i32.const 1024)) (v128.const i32x4 0x04030201 0x08070605 0x00000000 0x00000000)) ;; i8x16 arithmetic (assert_return (invoke "i8x16.popcnt" (v128.const i8x16 0 1 42 -3 -56 127 -128 -126 0 -1 -42 3 56 -127 -128 126)) (v128.const i8x16 0 1 3 7 3 7 1 2 0 8 5 2 3 2 1 6) ) (assert_return (invoke "i8x16.abs" (v128.const i8x16 0 1 42 -3 -56 127 -128 -126 0 -1 -42 3 56 -127 -128 126)) (v128.const i8x16 0 1 42 3 56 127 -128 126 0 1 42 3 56 127 -128 126) ) (assert_return (invoke "i8x16.neg" (v128.const i32x4 0 1 42 -3 -56 127 -128 -126 0 -1 -42 3 56 -127 -128 126)) (v128.const i32x4 0 -1 -42 3 56 -127 -128 126 0 1 42 -3 -56 127 -128 -126) ) (assert_return (invoke "i8x16.all_true" (v128.const i32x4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16.all_true" (v128.const i32x4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i8x16.all_true" (v128.const i32x4 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1)) (i32.const 0)) (assert_return (invoke "i8x16.all_true" (v128.const i32x4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i8x16.bitmask" (v128.const i8x16 -1 0 1 -128 127 -127 0 128 -1 0 1 -128 127 -127 0 128)) (i32.const 43433)) (assert_return (invoke "i8x16.shl" (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 1)) (v128.const i32x4 0 2 4 8 16 32 64 -128 0 6 12 24 48 96 -64 -128) ) (assert_return (invoke "i8x16.shl" (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 8)) (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) ) (assert_return (invoke "i8x16.shr_u" (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 1)) (v128.const i32x4 0 0 1 2 4 8 16 32 64 1 3 6 12 24 48 96) ) (assert_return (invoke "i8x16.shr_u" (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 8)) (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) ) (assert_return (invoke "i8x16.shr_s" (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 1)) (v128.const i32x4 0 0 1 2 4 8 16 32 -64 1 3 6 12 24 48 -32) ) (assert_return (invoke "i8x16.shr_s" (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 8)) (v128.const i32x4 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) ) (assert_return (invoke "i8x16.add" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i32x4 3 17 0 0 0 135 109 46 145 225 48 184 17 249 128 215) ) (assert_return (invoke "i8x16.add_sat_s" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i32x4 3 17 0 128 0 135 109 46 127 225 48 184 17 249 127 215) ) (assert_return (invoke "i8x16.add_sat_u" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i32x4 3 255 255 255 255 135 109 46 145 225 255 184 17 255 128 215) ) (assert_return (invoke "i8x16.sub" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i32x4 253 67 254 0 254 123 159 12 61 167 158 100 17 251 130 187) ) (assert_return (invoke "i8x16.sub_sat_s" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i32x4 253 67 254 0 127 128 159 12 61 167 158 128 17 251 130 127) ) (assert_return (invoke "i8x16.sub_sat_u" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i32x4 0 0 254 0 0 123 0 12 61 167 158 100 17 0 0 0) ) (assert_return (invoke "i8x16.min_s" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i8x16 0 231 255 128 129 129 6 17 42 196 231 142 0 250 1 142) ) (assert_return (invoke "i8x16.min_u" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i8x16 0 42 1 128 127 6 6 17 42 29 73 42 0 250 1 73) ) (assert_return (invoke "i8x16.max_s" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i8x16 3 42 1 128 127 6 103 29 103 29 73 42 17 255 127 73) ) (assert_return (invoke "i8x16.max_u" (v128.const i32x4 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i32x4 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i8x16 3 231 255 128 129 129 103 29 103 196 231 142 17 255 127 142) ) (assert_return (invoke "i8x16.avgr_u" (v128.const i8x16 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73) (v128.const i8x16 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142) ) (v128.const i8x16 2 137 128 128 128 68 55 23 73 113 152 92 9 253 64 108) ) ;; i16x8 arithmetic (assert_return (invoke "i16x8.abs" (v128.const i16x8 0 1 42 -3 -56 32767 -32768 32766)) (v128.const i16x8 0 1 42 3 56 32767 -32768 32766) ) (assert_return (invoke "i16x8.neg" (v128.const i32x4 0 1 42 -3 -56 32767 -32768 32766)) (v128.const i32x4 0 -1 -42 3 56 -32767 -32768 -32766) ) (assert_return (invoke "i16x8.all_true" (v128.const i32x4 0 0 0 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8.all_true" (v128.const i32x4 0 0 1 0 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i16x8.all_true" (v128.const i32x4 1 1 1 1 1 0 1 1)) (i32.const 0)) (assert_return (invoke "i16x8.all_true" (v128.const i32x4 1 1 1 1 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i16x8.bitmask" (v128.const i16x8 -1 0 1 -32768 32767 -32767 0 32768)) (i32.const 169)) (assert_return (invoke "i16x8.shl" (v128.const i32x4 0 8 16 128 256 2048 4096 -32768) (i32.const 1)) (v128.const i32x4 0 16 32 256 512 4096 8192 0)) (assert_return (invoke "i16x8.shl" (v128.const i32x4 0 8 16 128 256 2048 4096 -32768) (i32.const 16)) (v128.const i32x4 0 8 16 128 256 2048 4096 -32768)) (assert_return (invoke "i16x8.shr_u" (v128.const i32x4 0 8 16 128 256 2048 4096 -32768) (i32.const 1)) (v128.const i32x4 0 4 8 64 128 1024 2048 16384)) (assert_return (invoke "i16x8.shr_u" (v128.const i32x4 0 8 16 128 256 2048 4096 -32768) (i32.const 16)) (v128.const i32x4 0 8 16 128 256 2048 4096 -32768)) (assert_return (invoke "i16x8.shr_s" (v128.const i32x4 0 8 16 128 256 2048 4096 -32768) (i32.const 1)) (v128.const i32x4 0 4 8 64 128 1024 2048 -16384)) (assert_return (invoke "i16x8.shr_s" (v128.const i32x4 0 8 16 128 256 2048 4096 -32768) (i32.const 16)) (v128.const i32x4 0 8 16 128 256 2048 4096 -32768)) (assert_return (invoke "i16x8.add" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 768 65281 0 0 34560 12288 63744 32768) ) (assert_return (invoke "i16x8.add_sat_s" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 768 65281 32768 0 34560 12288 63744 32767) ) (assert_return (invoke "i16x8.add_sat_u" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 768 65281 65535 65535 34560 65535 65535 32768) ) (assert_return (invoke "i16x8.sub" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 64768 65279 0 65024 31488 40448 64256 32764) ) (assert_return (invoke "i16x8.sub_sat_s" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 64768 65279 0 32767 32768 40448 64256 32764) ) (assert_return (invoke "i16x8.sub_sat_u" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 0 65279 0 0 31488 40448 0 32764) ) (assert_return (invoke "i16x8.mul" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 0 65280 0 0 0 0 0 65532) ) (assert_return (invoke "i16x8.min_s" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 0 65280 32768 33024 33024 59136 64000 2) ) (assert_return (invoke "i16x8.min_u" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 0 1 32768 32512 1536 18688 64000 2) ) (assert_return (invoke "i16x8.max_s" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 768 1 32768 32512 1536 18688 65280 32766) ) (assert_return (invoke "i16x8.max_u" (v128.const i32x4 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i32x4 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i32x4 768 65280 32768 33024 33024 59136 65280 32766) ) (assert_return (invoke "i16x8.avgr_u" (v128.const i16x8 0 65280 32768 32512 33024 59136 64000 32766) (v128.const i16x8 768 1 32768 33024 1536 18688 65280 2) ) (v128.const i16x8 384 32641 32768 32768 17280 38912 64640 16384) ) (assert_return (invoke "i16x8.q15mulr_sat_s" (v128.const i16x8 -1 -16383 32765 65535 -32768 65535 -16385 -32768) (v128.const i16x8 -1 -16384 1 -32768 -32768 1 -16384 -1) ) (v128.const i16x8 0 8192 1 1 32767 0 8193 1) ) (assert_return (invoke "i16x8.extmul_low_i8x16_s" (v128.const i8x16 63 -63 128 -127 -128 -128 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 64 -64 1 -1 -1 -127 1 255 0 0 0 0 0 0 0 0) ) (v128.const i16x8 4032 4032 -128 127 128 16256 -1 1) ) (assert_return (invoke "i16x8.extmul_high_i8x16_s" (v128.const i8x16 0 0 0 0 0 0 0 0 63 -63 128 -127 -128 -128 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 64 -64 1 -1 -1 -127 1 255) ) (v128.const i16x8 4032 4032 -128 127 128 16256 -1 1) ) (assert_return (invoke "i16x8.extmul_low_i8x16_u" (v128.const i8x16 1 -1 63 -65 -126 -128 255 255 0 0 0 0 0 0 0 0) (v128.const i8x16 -1 -1 64 -64 -1 -128 -128 255 0 0 0 0 0 0 0 0) ) (v128.const i16x8 255 -511 4032 -28864 -32386 16384 32640 -511) ) (assert_return (invoke "i16x8.extmul_high_i8x16_u" (v128.const i8x16 0 0 0 0 0 0 0 0 1 -1 63 -65 -126 -128 255 255) (v128.const i8x16 0 0 0 0 0 0 0 0 -1 -1 64 -64 -1 -128 -128 255) ) (v128.const i16x8 255 -511 4032 -28864 -32386 16384 32640 -511) ) (assert_return (invoke "i32x4.extmul_low_i16x8_s" (v128.const i16x8 1 16384 -32766 65535 0 0 0 0) (v128.const i16x8 -1 16384 -1 -1 0 0 0 0) ) (v128.const i32x4 -1 268435456 32766 1) ) (assert_return (invoke "i32x4.extmul_high_i16x8_s" (v128.const i16x8 0 0 0 0 16383 32768 -32766 65535) (v128.const i16x8 0 0 0 0 16384 1 -1 -32768) ) (v128.const i32x4 268419072 -32768 32766 32768) ) (assert_return (invoke "i32x4.extmul_low_i16x8_u" (v128.const i16x8 16383 -16383 -32768 65535 0 0 0 0) (v128.const i16x8 16384 -16384 -1 65535 0 0 0 0) ) (v128.const i32x4 268419072 -1878999040 2147450880 -131071) ) (assert_return (invoke "i32x4.extmul_high_i16x8_u" (v128.const i16x8 0 0 0 0 16383 -16383 -32768 65535) (v128.const i16x8 0 0 0 0 16384 -16384 -1 65535) ) (v128.const i32x4 268419072 -1878999040 2147450880 -131071) ) (assert_return (invoke "i64x2.extmul_low_i32x4_s" (v128.const i32x4 1073741823 -2147483648 0 0) (v128.const i32x4 1073741824 -1 0 0) ) (v128.const i64x2 1152921503533105152 2147483648) ) (assert_return (invoke "i64x2.extmul_high_i32x4_s" (v128.const i32x4 0 0 -1073741825 4294967295) (v128.const i32x4 0 0 -1073741824 4294967295) ) (v128.const i64x2 1152921505680588800 1) ) (assert_return (invoke "i64x2.extmul_low_i32x4_u" (v128.const i32x4 -1 -1073741825 0 0) (v128.const i32x4 -1 -1073741824 0 0) ) (v128.const i64x2 -8589934591 -8070450535469154304) ) (assert_return (invoke "i64x2.extmul_high_i32x4_u" (v128.const i32x4 0 0 -2147483648 4294967295) (v128.const i32x4 0 0 -1 4294967295) ) (v128.const i64x2 9223372034707292160 -8589934591) ) ;; i32x4 arithmetic (assert_return (invoke "i32x4.abs" (v128.const i32x4 0 1 0x80000000 0x80000001)) (v128.const i32x4 0 1 0x80000000 0x7fffffff)) (assert_return (invoke "i32x4.neg" (v128.const i32x4 0 1 0x80000000 0x80000001)) (v128.const i32x4 0 -1 0x80000000 0x7fffffff)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0 0 0 0)) (i32.const 0)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 0 0 1 0)) (i32.const 0)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 1 0 1 1)) (i32.const 0)) (assert_return (invoke "i32x4.all_true" (v128.const i32x4 1 1 1 1)) (i32.const 1)) (assert_return (invoke "i32x4.bitmask" (v128.const i32x4 -1 0 -128 127)) (i32.const 5)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 1 0x40000000 0x80000000 -1) (i32.const 1)) (v128.const i32x4 2 0x80000000 0 -2)) (assert_return (invoke "i32x4.shl" (v128.const i32x4 1 0x40000000 0x80000000 -1) (i32.const 32)) (v128.const i32x4 1 0x40000000 0x80000000 -1)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 1 0x40000000 0x80000000 -1) (i32.const 1)) (v128.const i32x4 0 0x20000000 0xc0000000 -1)) (assert_return (invoke "i32x4.shr_s" (v128.const i32x4 1 0x40000000 0x80000000 -1) (i32.const 32)) (v128.const i32x4 1 0x40000000 0x80000000 -1)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 1 0x40000000 0x80000000 -1) (i32.const 1)) (v128.const i32x4 0 0x20000000 0x40000000 0x7fffffff)) (assert_return (invoke "i32x4.shr_u" (v128.const i32x4 1 0x40000000 0x80000000 -1) (i32.const 32)) (v128.const i32x4 1 0x40000000 0x80000000 -1)) (assert_return (invoke "i32x4.add" (v128.const i32x4 0 0x80000001 42 5) (v128.const i32x4 0 0x80000001 5 42)) (v128.const i32x4 0 2 47 47)) (assert_return (invoke "i32x4.sub" (v128.const i32x4 0 2 47 47) (v128.const i32x4 0 0x80000001 42 5)) (v128.const i32x4 0 0x80000001 5 42)) (assert_return (invoke "i32x4.mul" (v128.const i32x4 0 0x80000001 42 5) (v128.const i32x4 0 0x80000001 42 5)) (v128.const i32x4 0 1 1764 25)) (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0x80000001 42 0xc0000000) (v128.const i32x4 0xffffffff 42 0 0xb0000000)) (v128.const i32x4 0xffffffff 0x80000001 0 0xb0000000) ) (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0x80000001 42 0xc0000000) (v128.const i32x4 0xffffffff 42 0 0xb0000000)) (v128.const i32x4 0 42 0 0xb0000000) ) (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0x80000001 42 0xc0000000) (v128.const i32x4 0xffffffff 42 0 0xb0000000)) (v128.const i32x4 0 42 42 0xc0000000) ) (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0x80000001 42 0xc0000000) (v128.const i32x4 0xffffffff 42 0 0xb0000000)) (v128.const i32x4 0xffffffff 0x80000001 42 0xc0000000) ) (assert_return (invoke "i32x4.dot_i16x8_s" (v128.const i32x4 0 1 2 3 4 5 6 7) (v128.const i32x4 -1 2 -3 4 5 6 -7 -8)) (v128.const i32x4 2 6 50 -98) ) ;; i64x2 arithmetic (assert_return (invoke "i64x2.neg" (v128.const i64x2 0x8000000000000000 42)) (v128.const i64x2 0x8000000000000000 -42)) (assert_return (invoke "i64x2.bitmask" (v128.const i64x2 0x8000000000000000 42)) (i32.const 1)) (assert_return (invoke "i64x2.bitmask" (v128.const i64x2 1 -1)) (i32.const 2)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x8000000000000000) (i32.const 1)) (v128.const i64x2 2 0)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x8000000000000000) (i32.const 64)) (v128.const i64x2 1 0x8000000000000000)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x8000000000000000) (i32.const 1)) (v128.const i64x2 0 0xc000000000000000)) (assert_return (invoke "i64x2.shr_s" (v128.const i64x2 1 0x8000000000000000) (i32.const 64)) (v128.const i64x2 1 0x8000000000000000)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x8000000000000000) (i32.const 1)) (v128.const i64x2 0 0x4000000000000000)) (assert_return (invoke "i64x2.shr_u" (v128.const i64x2 1 0x8000000000000000) (i32.const 64)) (v128.const i64x2 1 0x8000000000000000)) (assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000001 42) (v128.const i64x2 0x8000000000000001 0)) (v128.const i64x2 2 42)) (assert_return (invoke "i64x2.sub" (v128.const i64x2 2 42) (v128.const i64x2 0x8000000000000001 0)) (v128.const i64x2 0x8000000000000001 42)) (assert_return (invoke "i64x2.mul" (v128.const i64x2 2 42) (v128.const i64x2 0x8000000000000001 0)) (v128.const i64x2 2 0)) ;; f32x4 arithmetic (assert_return (invoke "f32x4.abs" (v128.const f32x4 -0 nan -infinity 5)) (v128.const f32x4 0 nan infinity 5)) (assert_return (invoke "f32x4.neg" (v128.const f32x4 -0 nan -infinity 5)) (v128.const f32x4 0 -nan infinity -5)) (assert_return (invoke "f32x4.sqrt" (v128.const f32x4 -0 nan infinity 4)) (v128.const f32x4 -0 nan infinity 2)) (assert_return (invoke "f32x4.add" (v128.const f32x4 nan -nan infinity 42) (v128.const f32x4 42 infinity infinity 1)) (v128.const f32x4 nan nan infinity 43)) (assert_return (invoke "f32x4.sub" (v128.const f32x4 nan -nan infinity 42) (v128.const f32x4 42 infinity -infinity 1)) (v128.const f32x4 nan nan infinity 41)) (assert_return (invoke "f32x4.mul" (v128.const f32x4 nan -nan infinity 42) (v128.const f32x4 42 infinity infinity 2)) (v128.const f32x4 nan nan infinity 84)) (assert_return (invoke "f32x4.div" (v128.const f32x4 nan -nan infinity 42) (v128.const f32x4 42 infinity 2 2)) (v128.const f32x4 nan nan infinity 21)) (assert_return (invoke "f32x4.min" (v128.const f32x4 -0 0 nan 5) (v128.const f32x4 0 -0 5 nan)) (v128.const f32x4 -0 -0 nan nan)) (assert_return (invoke "f32x4.max" (v128.const f32x4 -0 0 nan 5) (v128.const f32x4 0 -0 5 nan)) (v128.const f32x4 0 0 nan nan)) (assert_return (invoke "f32x4.pmin" (v128.const f32x4 -0 0 nan 5) (v128.const f32x4 0 -0 5 nan)) (v128.const f32x4 -0 0 nan 5)) (assert_return (invoke "f32x4.pmax" (v128.const f32x4 -0 0 nan 5) (v128.const f32x4 0 -0 5 nan)) (v128.const f32x4 -0 0 nan 5)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 -0 0 infinity -infinity)) (v128.const f32x4 -0 0 infinity -infinity)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 nan 42 0.5 -0.5)) (v128.const f32x4 nan 42 1 -0)) (assert_return (invoke "f32x4.ceil" (v128.const f32x4 1.5 -1.5 4.2 -4.2)) (v128.const f32x4 2 -1 5 -4)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 -0 0 infinity -infinity)) (v128.const f32x4 -0 0 infinity -infinity)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 nan 42 0.5 -0.5)) (v128.const f32x4 nan 42 0 -1)) (assert_return (invoke "f32x4.floor" (v128.const f32x4 1.5 -1.5 4.2 -4.2)) (v128.const f32x4 1 -2 4 -5)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 -0 0 infinity -infinity)) (v128.const f32x4 -0 0 infinity -infinity)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 nan 42 0.5 -0.5)) (v128.const f32x4 nan 42 0 -0)) (assert_return (invoke "f32x4.trunc" (v128.const f32x4 1.5 -1.5 4.2 -4.2)) (v128.const f32x4 1 -1 4 -4)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 -0 0 infinity -infinity)) (v128.const f32x4 -0 0 infinity -infinity)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 nan 42 0.5 -0.5)) (v128.const f32x4 nan 42 0 -0)) (assert_return (invoke "f32x4.nearest" (v128.const f32x4 1.5 -1.5 4.2 -4.2)) (v128.const f32x4 2 -2 4 -4)) ;; f64x2 arithmetic (assert_return (invoke "f64x2.abs" (v128.const f64x2 -0 nan)) (v128.const f64x2 0 nan)) (assert_return (invoke "f64x2.abs" (v128.const f64x2 -infinity 5)) (v128.const f64x2 infinity 5)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -0 nan)) (v128.const f64x2 0 -nan)) (assert_return (invoke "f64x2.neg" (v128.const f64x2 -infinity 5)) (v128.const f64x2 infinity -5)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 -0 nan)) (v128.const f64x2 -0 nan)) (assert_return (invoke "f64x2.sqrt" (v128.const f64x2 infinity 4)) (v128.const f64x2 infinity 2)) (assert_return (invoke "f64x2.add" (v128.const f64x2 nan -nan) (v128.const f64x2 42 infinity)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.add" (v128.const f64x2 infinity 42) (v128.const f64x2 infinity 1)) (v128.const f64x2 infinity 43)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 nan -nan) (v128.const f64x2 42 infinity)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.sub" (v128.const f64x2 infinity 42) (v128.const f64x2 -infinity 1)) (v128.const f64x2 infinity 41)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 nan -nan) (v128.const f64x2 42 infinity)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.mul" (v128.const f64x2 infinity 42) (v128.const f64x2 infinity 2)) (v128.const f64x2 infinity 84)) (assert_return (invoke "f64x2.div" (v128.const f64x2 nan -nan) (v128.const f64x2 42 infinity)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.div" (v128.const f64x2 infinity 42) (v128.const f64x2 2 2)) (v128.const f64x2 infinity 21)) (assert_return (invoke "f64x2.min" (v128.const f64x2 -0 0) (v128.const f64x2 0 -0)) (v128.const f64x2 -0 -0)) (assert_return (invoke "f64x2.min" (v128.const f64x2 nan 5) (v128.const f64x2 5 nan)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.max" (v128.const f64x2 -0 0) (v128.const f64x2 0 -0)) (v128.const f64x2 0 0)) (assert_return (invoke "f64x2.max" (v128.const f64x2 nan 5) (v128.const f64x2 5 nan)) (v128.const f64x2 nan nan)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 -0 0) (v128.const f64x2 0 -0)) (v128.const f64x2 -0 0)) (assert_return (invoke "f64x2.pmin" (v128.const f64x2 nan 5) (v128.const f64x2 5 nan)) (v128.const f64x2 nan 5)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 -0 0) (v128.const f64x2 0 -0)) (v128.const f64x2 -0 0)) (assert_return (invoke "f64x2.pmax" (v128.const f64x2 nan 5) (v128.const f64x2 5 nan)) (v128.const f64x2 nan 5)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 -0 0)) (v128.const f64x2 -0 0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 infinity -infinity)) (v128.const f64x2 infinity -infinity)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 nan 42)) (v128.const f64x2 nan 42)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 0.5 -0.5)) (v128.const f64x2 1 -0)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 1.5 -1.5)) (v128.const f64x2 2 -1)) (assert_return (invoke "f64x2.ceil" (v128.const f64x2 4.2 -4.2)) (v128.const f64x2 5 -4)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 -0 0)) (v128.const f64x2 -0 0)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 infinity -infinity)) (v128.const f64x2 infinity -infinity)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 nan 42)) (v128.const f64x2 nan 42)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 0.5 -0.5)) (v128.const f64x2 0 -1)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 1.5 -1.5)) (v128.const f64x2 1 -2)) (assert_return (invoke "f64x2.floor" (v128.const f64x2 4.2 -4.2)) (v128.const f64x2 4 -5)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 -0 0)) (v128.const f64x2 -0 0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 infinity -infinity)) (v128.const f64x2 infinity -infinity)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 nan 42)) (v128.const f64x2 nan 42)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 0.5 -0.5)) (v128.const f64x2 0 -0)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 1.5 -1.5)) (v128.const f64x2 1 -1)) (assert_return (invoke "f64x2.trunc" (v128.const f64x2 4.2 -4.2)) (v128.const f64x2 4 -4)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 -0 0)) (v128.const f64x2 -0 0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 infinity -infinity)) (v128.const f64x2 infinity -infinity)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 nan 42)) (v128.const f64x2 nan 42)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 0.5 -0.5)) (v128.const f64x2 0 -0)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 1.5 -1.5)) (v128.const f64x2 2 -2)) (assert_return (invoke "f64x2.nearest" (v128.const f64x2 4.2 -4.2)) (v128.const f64x2 4 -4)) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_s" (v128.const i8x16 -1 -1 -127 -127 -128 -128 127 127 255 255 1 1 0 0 126 126) ) (v128.const i16x8 -2 -254 -256 254 -2 2 0 252) ) (assert_return (invoke "i16x8.extadd_pairwise_i8x16_u" (v128.const i8x16 0 0 1 1 -1 -1 126 126 -127 -127 -128 -128 127 127 255 255) ) (v128.const i16x8 0 2 510 252 258 256 254 510) ) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_s" (v128.const i16x8 32766 32766 -32767 -32767 65535 65535 -1 -1) ) (v128.const i32x4 65532 -65534 -2 -2) ) (assert_return (invoke "i32x4.extadd_pairwise_i16x8_u" (v128.const i16x8 -1 -1 -32767 -32767 -32768 -32768 65535 65535) ) (v128.const i32x4 131070 65538 65536 131070) ) ;; conversions (assert_return (invoke "i32x4.trunc_sat_f32x4_s" (v128.const f32x4 42 nan infinity -infinity)) (v128.const i32x4 42 0 2147483647 -2147483648)) (assert_return (invoke "i32x4.trunc_sat_f32x4_u" (v128.const f32x4 42 nan infinity -infinity)) (v128.const i32x4 42 0 4294967295 0)) (assert_return (invoke "f32x4.convert_i32x4_s" (v128.const i32x4 0 -1 2147483647 -2147483648)) (v128.const f32x4 0 -1 2147483648 -2147483648)) (assert_return (invoke "f32x4.convert_i32x4_u" (v128.const i32x4 0 -1 2147483647 -2147483648)) (v128.const f32x4 0 4294967296 2147483648 2147483648)) (assert_return (invoke "i8x16.narrow_i16x8_s" (v128.const i16x8 129 127 -32767 32767 -32768 -1 1 0) (v128.const i16x8 0 1 -1 -32768 32767 -32767 127 129) ) (v128.const i8x16 127 127 -128 127 -128 -1 1 0 0 1 -1 -128 127 -128 127 127) ) (assert_return (invoke "i8x16.narrow_i16x8_u" (v128.const i16x8 129 127 -32767 32767 -32768 -1 1 0) (v128.const i16x8 0 1 -1 -32768 32767 -32767 127 129) ) (v128.const i8x16 129 127 0 255 0 0 1 0 0 1 0 0 255 0 127 129) ) (assert_return (invoke "i16x8.narrow_i32x4_s" (v128.const i32x4 32769 32767 -2147483647 2147483647) (v128.const i32x4 0 1 -1 -2147483648) ) (v128.const i16x8 32767 32767 -32768 32767 0 1 -1 -32768) ) (assert_return (invoke "i16x8.narrow_i32x4_u" (v128.const i32x4 32769 32767 -2147483647 2147483647) (v128.const i32x4 0 1 -1 -2147483648) ) (v128.const i16x8 32769 32767 0 65535 0 1 0 0) ) (assert_return (invoke "i16x8.extend_low_i8x16_s" (v128.const i8x16 0 1 -1 -128 127 129 64 -64 -64 64 129 127 -128 -1 1 0) ) (v128.const i16x8 0 1 -1 -128 127 -127 64 -64) ) (assert_return (invoke "i16x8.extend_high_i8x16_s" (v128.const i8x16 0 1 -1 -128 127 129 64 -64 -64 64 129 127 -128 -1 1 0) ) (v128.const i16x8 -64 64 -127 127 -128 -1 1 0) ) (assert_return (invoke "i16x8.extend_low_i8x16_u" (v128.const i8x16 0 1 -1 -128 127 129 64 -64 -64 64 129 127 -128 -1 1 0) ) (v128.const i16x8 0 1 255 128 127 129 64 192) ) (assert_return (invoke "i16x8.extend_high_i8x16_u" (v128.const i8x16 0 1 -1 -128 127 129 64 -64 -64 64 129 127 -128 -1 1 0) ) (v128.const i16x8 192 64 129 127 128 255 1 0) ) (assert_return (invoke "i32x4.extend_low_i16x8_s" (v128.const i16x8 0 1 -1 32768 32767 32769 16384 -16384)) (v128.const i32x4 0 1 -1 -32768)) (assert_return (invoke "i32x4.extend_high_i16x8_s" (v128.const i16x8 0 1 -1 32768 32767 32769 16384 -16384)) (v128.const i32x4 32767 -32767 16384 -16384)) (assert_return (invoke "i32x4.extend_low_i16x8_u" (v128.const i16x8 0 1 -1 32768 32767 32769 16384 -16384)) (v128.const i32x4 0 1 65535 32768)) (assert_return (invoke "i32x4.extend_high_i16x8_u" (v128.const i16x8 0 1 -1 32768 32767 32769 16384 -16384)) (v128.const i32x4 32767 32769 16384 49152)) (assert_return (invoke "i64x2.extend_low_i32x4_s" (v128.const i32x4 -1 -1 -2147483648 -2147483648)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_high_i32x4_s" (v128.const i32x4 2147483647 2147483647 -1 -1)) (v128.const i64x2 -1 -1)) (assert_return (invoke "i64x2.extend_low_i32x4_u" (v128.const i32x4 -1 -1 2 2)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "i64x2.extend_high_i32x4_u" (v128.const i32x4 2 2 -1 -1)) (v128.const i64x2 4294967295 4294967295)) (assert_return (invoke "v128.load8x8_s" (i32.const 256)) (v128.const i16x8 0xff80 0xff90 0xffa0 0xffb0 0xffc0 0xffd0 0xffe0 0xfff0)) (assert_return (invoke "v128.load8x8_u" (i32.const 256)) (v128.const i16x8 0x0080 0x0090 0x00a0 0x00b0 0x00c0 0x00d0 0x00e0 0x00f0)) (assert_return (invoke "v128.load16x4_s" (i32.const 256)) (v128.const i32x4 0xffff9080 0xffffb0a0 0xffffd0c0 0xfffff0e0)) (assert_return (invoke "v128.load16x4_u" (i32.const 256)) (v128.const i32x4 0x00009080 0x0000b0a0 0x0000d0c0 0x0000f0e0)) (assert_return (invoke "v128.load32x2_s" (i32.const 256)) (v128.const i64x2 0xffffffffb0a09080 0xfffffffff0e0d0c0)) (assert_return (invoke "v128.load32x2_u" (i32.const 256)) (v128.const i64x2 0x00000000b0a09080 0x00000000f0e0d0c0)) (assert_return (invoke "v128.load32_zero" (i32.const 256)) (v128.const i32x4 0xb0a09080 0 0 0)) (assert_return (invoke "v128.load64_zero" (i32.const 256)) (v128.const i64x2 0xf0e0d0c0b0a09080 0)) (assert_return (invoke "i8x16.swizzle" (v128.const i8x16 0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7 0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff) (v128.const i8x16 0 4 8 12 16 255 129 128 127 17 15 13 12 8 4 0) ) (v128.const i8x16 0xf0 0xf4 0xf8 0xfc 0x00 0x00 0x00 0x00 0x00 0x00 0xff 0xfd 0xfc 0xf8 0xf4 0xf0) ) (assert_return (invoke "f64x2.convert_low_i32x4_s" (v128.const i32x4 1 -2147483648 0 0)) (v128.const f64x2 1.0 -2147483648)) (assert_return (invoke "f64x2.convert_low_i32x4_u" (v128.const i32x4 -2147483648 0xffffffff 0 0)) (v128.const f64x2 2147483648 4294967295.0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_s_zero" (v128.const f64x2 -inf 4294967296.0)) (v128.const i32x4 -2147483648 2147483647 0 0)) (assert_return (invoke "i32x4.trunc_sat_f64x2_u_zero" (v128.const f64x2 -inf 4294967296.0)) (v128.const i32x4 0 4294967295 0 0)) (assert_return (invoke "f32x4.demote_f64x2_zero" (v128.const f64x2 0x1.fffffe0000000p-127 -0x1.6972b30cfb562p+1) ) (v128.const f32x4 0x1p-126 -0x1.6972b4p+1 0 0) ) (assert_return (invoke "f64x2.promote_low_f32x4" (v128.const f32x4 -0x1p-149 0x1.8f867ep+125 0 0) ) (v128.const f64x2 -0x1p-149 6.6382536710104395e+37) ) binaryen-version_108/test/spec/skip-stack-guard-page.wast000066400000000000000000004734371423707623100236630ustar00rootroot00000000000000;; This tests that the stack overflow guard page can't be skipped by a function with more than a page of locals. (module (memory 1) (export "test-guard-page-skip" (func $test-guard-page-skip)) (func $test-guard-page-skip (param $depth i32) (if (i32.eq (local.get $depth) (i32.const 0)) (then (call $function-with-many-locals)) (else (call $test-guard-page-skip (i32.sub (local.get $depth) (i32.const 1)))) ) ) (func $function-with-many-locals ;; 1056 i64 = 8448 bytes of locals (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x000-0x007 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x008-0x00f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x010-0x017 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x018-0x01f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x020-0x027 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x028-0x02f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x030-0x037 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x038-0x03f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x040-0x047 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x048-0x04f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x050-0x057 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x058-0x05f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x060-0x067 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x068-0x06f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x070-0x077 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x078-0x07f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x080-0x087 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x088-0x08f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x090-0x097 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x098-0x09f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a0-0x0a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a8-0x0af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b0-0x0b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b8-0x0bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c0-0x0c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c8-0x0cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d0-0x0d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d8-0x0df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e0-0x0e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e8-0x0ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f0-0x0f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f8-0x0ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x100-0x107 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x108-0x10f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x110-0x117 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x118-0x11f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x120-0x127 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x128-0x12f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x130-0x137 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x138-0x13f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x140-0x147 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x148-0x14f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x150-0x157 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x158-0x15f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x160-0x167 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x168-0x16f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x170-0x177 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x178-0x17f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x180-0x187 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x188-0x18f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x190-0x197 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x198-0x19f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a0-0x1a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a8-0x1af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b0-0x1b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b8-0x1bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c0-0x1c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c8-0x1cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d0-0x1d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d8-0x1df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e0-0x1e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e8-0x1ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f0-0x1f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f8-0x1ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x200-0x207 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x208-0x20f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x210-0x217 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x218-0x21f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x220-0x227 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x228-0x22f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x230-0x237 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x238-0x23f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x240-0x247 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x248-0x24f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x250-0x257 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x258-0x25f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x260-0x267 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x268-0x26f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x270-0x277 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x278-0x27f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x280-0x287 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x288-0x28f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x290-0x297 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x298-0x29f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a0-0x2a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a8-0x2af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b0-0x2b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b8-0x2bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c0-0x2c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c8-0x2cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d0-0x2d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d8-0x2df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e0-0x2e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e8-0x2ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f0-0x2f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f8-0x2ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x300-0x307 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x308-0x30f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x310-0x317 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x318-0x31f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x320-0x327 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x328-0x32f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x330-0x337 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x338-0x33f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x340-0x347 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x348-0x34f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x350-0x357 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x358-0x35f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x360-0x367 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x368-0x36f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x370-0x377 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x378-0x37f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x380-0x387 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x388-0x38f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x390-0x397 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x398-0x39f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a0-0x3a7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a8-0x3af (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b0-0x3b7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b8-0x3bf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c0-0x3c7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c8-0x3cf (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d0-0x3d7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d8-0x3df (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e0-0x3e7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e8-0x3ef (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f0-0x3f7 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f8-0x3ff (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x400-0x407 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x408-0x40f (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x410-0x417 (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x418-0x41f ;; recurse first to try to make the callee access the stack below the space allocated for the locals before the locals themselves have been initialized. (call $function-with-many-locals) ;; load from memory into the locals (local.set 0x000 (i64.load offset=0x000 align=1 (i32.const 0))) (local.set 0x001 (i64.load offset=0x001 align=1 (i32.const 0))) (local.set 0x002 (i64.load offset=0x002 align=1 (i32.const 0))) (local.set 0x003 (i64.load offset=0x003 align=1 (i32.const 0))) (local.set 0x004 (i64.load offset=0x004 align=1 (i32.const 0))) (local.set 0x005 (i64.load offset=0x005 align=1 (i32.const 0))) (local.set 0x006 (i64.load offset=0x006 align=1 (i32.const 0))) (local.set 0x007 (i64.load offset=0x007 align=1 (i32.const 0))) (local.set 0x008 (i64.load offset=0x008 align=1 (i32.const 0))) (local.set 0x009 (i64.load offset=0x009 align=1 (i32.const 0))) (local.set 0x00a (i64.load offset=0x00a align=1 (i32.const 0))) (local.set 0x00b (i64.load offset=0x00b align=1 (i32.const 0))) (local.set 0x00c (i64.load offset=0x00c align=1 (i32.const 0))) (local.set 0x00d (i64.load offset=0x00d align=1 (i32.const 0))) (local.set 0x00e (i64.load offset=0x00e align=1 (i32.const 0))) (local.set 0x00f (i64.load offset=0x00f align=1 (i32.const 0))) (local.set 0x010 (i64.load offset=0x010 align=1 (i32.const 0))) (local.set 0x011 (i64.load offset=0x011 align=1 (i32.const 0))) (local.set 0x012 (i64.load offset=0x012 align=1 (i32.const 0))) (local.set 0x013 (i64.load offset=0x013 align=1 (i32.const 0))) (local.set 0x014 (i64.load offset=0x014 align=1 (i32.const 0))) (local.set 0x015 (i64.load offset=0x015 align=1 (i32.const 0))) (local.set 0x016 (i64.load offset=0x016 align=1 (i32.const 0))) (local.set 0x017 (i64.load offset=0x017 align=1 (i32.const 0))) (local.set 0x018 (i64.load offset=0x018 align=1 (i32.const 0))) (local.set 0x019 (i64.load offset=0x019 align=1 (i32.const 0))) (local.set 0x01a (i64.load offset=0x01a align=1 (i32.const 0))) (local.set 0x01b (i64.load offset=0x01b align=1 (i32.const 0))) (local.set 0x01c (i64.load offset=0x01c align=1 (i32.const 0))) (local.set 0x01d (i64.load offset=0x01d align=1 (i32.const 0))) (local.set 0x01e (i64.load offset=0x01e align=1 (i32.const 0))) (local.set 0x01f (i64.load offset=0x01f align=1 (i32.const 0))) (local.set 0x020 (i64.load offset=0x020 align=1 (i32.const 0))) (local.set 0x021 (i64.load offset=0x021 align=1 (i32.const 0))) (local.set 0x022 (i64.load offset=0x022 align=1 (i32.const 0))) (local.set 0x023 (i64.load offset=0x023 align=1 (i32.const 0))) (local.set 0x024 (i64.load offset=0x024 align=1 (i32.const 0))) (local.set 0x025 (i64.load offset=0x025 align=1 (i32.const 0))) (local.set 0x026 (i64.load offset=0x026 align=1 (i32.const 0))) (local.set 0x027 (i64.load offset=0x027 align=1 (i32.const 0))) (local.set 0x028 (i64.load offset=0x028 align=1 (i32.const 0))) (local.set 0x029 (i64.load offset=0x029 align=1 (i32.const 0))) (local.set 0x02a (i64.load offset=0x02a align=1 (i32.const 0))) (local.set 0x02b (i64.load offset=0x02b align=1 (i32.const 0))) (local.set 0x02c (i64.load offset=0x02c align=1 (i32.const 0))) (local.set 0x02d (i64.load offset=0x02d align=1 (i32.const 0))) (local.set 0x02e (i64.load offset=0x02e align=1 (i32.const 0))) (local.set 0x02f (i64.load offset=0x02f align=1 (i32.const 0))) (local.set 0x030 (i64.load offset=0x030 align=1 (i32.const 0))) (local.set 0x031 (i64.load offset=0x031 align=1 (i32.const 0))) (local.set 0x032 (i64.load offset=0x032 align=1 (i32.const 0))) (local.set 0x033 (i64.load offset=0x033 align=1 (i32.const 0))) (local.set 0x034 (i64.load offset=0x034 align=1 (i32.const 0))) (local.set 0x035 (i64.load offset=0x035 align=1 (i32.const 0))) (local.set 0x036 (i64.load offset=0x036 align=1 (i32.const 0))) (local.set 0x037 (i64.load offset=0x037 align=1 (i32.const 0))) (local.set 0x038 (i64.load offset=0x038 align=1 (i32.const 0))) (local.set 0x039 (i64.load offset=0x039 align=1 (i32.const 0))) (local.set 0x03a (i64.load offset=0x03a align=1 (i32.const 0))) (local.set 0x03b (i64.load offset=0x03b align=1 (i32.const 0))) (local.set 0x03c (i64.load offset=0x03c align=1 (i32.const 0))) (local.set 0x03d (i64.load offset=0x03d align=1 (i32.const 0))) (local.set 0x03e (i64.load offset=0x03e align=1 (i32.const 0))) (local.set 0x03f (i64.load offset=0x03f align=1 (i32.const 0))) (local.set 0x040 (i64.load offset=0x040 align=1 (i32.const 0))) (local.set 0x041 (i64.load offset=0x041 align=1 (i32.const 0))) (local.set 0x042 (i64.load offset=0x042 align=1 (i32.const 0))) (local.set 0x043 (i64.load offset=0x043 align=1 (i32.const 0))) (local.set 0x044 (i64.load offset=0x044 align=1 (i32.const 0))) (local.set 0x045 (i64.load offset=0x045 align=1 (i32.const 0))) (local.set 0x046 (i64.load offset=0x046 align=1 (i32.const 0))) (local.set 0x047 (i64.load offset=0x047 align=1 (i32.const 0))) (local.set 0x048 (i64.load offset=0x048 align=1 (i32.const 0))) (local.set 0x049 (i64.load offset=0x049 align=1 (i32.const 0))) (local.set 0x04a (i64.load offset=0x04a align=1 (i32.const 0))) (local.set 0x04b (i64.load offset=0x04b align=1 (i32.const 0))) (local.set 0x04c (i64.load offset=0x04c align=1 (i32.const 0))) (local.set 0x04d (i64.load offset=0x04d align=1 (i32.const 0))) (local.set 0x04e (i64.load offset=0x04e align=1 (i32.const 0))) (local.set 0x04f (i64.load offset=0x04f align=1 (i32.const 0))) (local.set 0x050 (i64.load offset=0x050 align=1 (i32.const 0))) (local.set 0x051 (i64.load offset=0x051 align=1 (i32.const 0))) (local.set 0x052 (i64.load offset=0x052 align=1 (i32.const 0))) (local.set 0x053 (i64.load offset=0x053 align=1 (i32.const 0))) (local.set 0x054 (i64.load offset=0x054 align=1 (i32.const 0))) (local.set 0x055 (i64.load offset=0x055 align=1 (i32.const 0))) (local.set 0x056 (i64.load offset=0x056 align=1 (i32.const 0))) (local.set 0x057 (i64.load offset=0x057 align=1 (i32.const 0))) (local.set 0x058 (i64.load offset=0x058 align=1 (i32.const 0))) (local.set 0x059 (i64.load offset=0x059 align=1 (i32.const 0))) (local.set 0x05a (i64.load offset=0x05a align=1 (i32.const 0))) (local.set 0x05b (i64.load offset=0x05b align=1 (i32.const 0))) (local.set 0x05c (i64.load offset=0x05c align=1 (i32.const 0))) (local.set 0x05d (i64.load offset=0x05d align=1 (i32.const 0))) (local.set 0x05e (i64.load offset=0x05e align=1 (i32.const 0))) (local.set 0x05f (i64.load offset=0x05f align=1 (i32.const 0))) (local.set 0x060 (i64.load offset=0x060 align=1 (i32.const 0))) (local.set 0x061 (i64.load offset=0x061 align=1 (i32.const 0))) (local.set 0x062 (i64.load offset=0x062 align=1 (i32.const 0))) (local.set 0x063 (i64.load offset=0x063 align=1 (i32.const 0))) (local.set 0x064 (i64.load offset=0x064 align=1 (i32.const 0))) (local.set 0x065 (i64.load offset=0x065 align=1 (i32.const 0))) (local.set 0x066 (i64.load offset=0x066 align=1 (i32.const 0))) (local.set 0x067 (i64.load offset=0x067 align=1 (i32.const 0))) (local.set 0x068 (i64.load offset=0x068 align=1 (i32.const 0))) (local.set 0x069 (i64.load offset=0x069 align=1 (i32.const 0))) (local.set 0x06a (i64.load offset=0x06a align=1 (i32.const 0))) (local.set 0x06b (i64.load offset=0x06b align=1 (i32.const 0))) (local.set 0x06c (i64.load offset=0x06c align=1 (i32.const 0))) (local.set 0x06d (i64.load offset=0x06d align=1 (i32.const 0))) (local.set 0x06e (i64.load offset=0x06e align=1 (i32.const 0))) (local.set 0x06f (i64.load offset=0x06f align=1 (i32.const 0))) (local.set 0x070 (i64.load offset=0x070 align=1 (i32.const 0))) (local.set 0x071 (i64.load offset=0x071 align=1 (i32.const 0))) (local.set 0x072 (i64.load offset=0x072 align=1 (i32.const 0))) (local.set 0x073 (i64.load offset=0x073 align=1 (i32.const 0))) (local.set 0x074 (i64.load offset=0x074 align=1 (i32.const 0))) (local.set 0x075 (i64.load offset=0x075 align=1 (i32.const 0))) (local.set 0x076 (i64.load offset=0x076 align=1 (i32.const 0))) (local.set 0x077 (i64.load offset=0x077 align=1 (i32.const 0))) (local.set 0x078 (i64.load offset=0x078 align=1 (i32.const 0))) (local.set 0x079 (i64.load offset=0x079 align=1 (i32.const 0))) (local.set 0x07a (i64.load offset=0x07a align=1 (i32.const 0))) (local.set 0x07b (i64.load offset=0x07b align=1 (i32.const 0))) (local.set 0x07c (i64.load offset=0x07c align=1 (i32.const 0))) (local.set 0x07d (i64.load offset=0x07d align=1 (i32.const 0))) (local.set 0x07e (i64.load offset=0x07e align=1 (i32.const 0))) (local.set 0x07f (i64.load offset=0x07f align=1 (i32.const 0))) (local.set 0x080 (i64.load offset=0x080 align=1 (i32.const 0))) (local.set 0x081 (i64.load offset=0x081 align=1 (i32.const 0))) (local.set 0x082 (i64.load offset=0x082 align=1 (i32.const 0))) (local.set 0x083 (i64.load offset=0x083 align=1 (i32.const 0))) (local.set 0x084 (i64.load offset=0x084 align=1 (i32.const 0))) (local.set 0x085 (i64.load offset=0x085 align=1 (i32.const 0))) (local.set 0x086 (i64.load offset=0x086 align=1 (i32.const 0))) (local.set 0x087 (i64.load offset=0x087 align=1 (i32.const 0))) (local.set 0x088 (i64.load offset=0x088 align=1 (i32.const 0))) (local.set 0x089 (i64.load offset=0x089 align=1 (i32.const 0))) (local.set 0x08a (i64.load offset=0x08a align=1 (i32.const 0))) (local.set 0x08b (i64.load offset=0x08b align=1 (i32.const 0))) (local.set 0x08c (i64.load offset=0x08c align=1 (i32.const 0))) (local.set 0x08d (i64.load offset=0x08d align=1 (i32.const 0))) (local.set 0x08e (i64.load offset=0x08e align=1 (i32.const 0))) (local.set 0x08f (i64.load offset=0x08f align=1 (i32.const 0))) (local.set 0x090 (i64.load offset=0x090 align=1 (i32.const 0))) (local.set 0x091 (i64.load offset=0x091 align=1 (i32.const 0))) (local.set 0x092 (i64.load offset=0x092 align=1 (i32.const 0))) (local.set 0x093 (i64.load offset=0x093 align=1 (i32.const 0))) (local.set 0x094 (i64.load offset=0x094 align=1 (i32.const 0))) (local.set 0x095 (i64.load offset=0x095 align=1 (i32.const 0))) (local.set 0x096 (i64.load offset=0x096 align=1 (i32.const 0))) (local.set 0x097 (i64.load offset=0x097 align=1 (i32.const 0))) (local.set 0x098 (i64.load offset=0x098 align=1 (i32.const 0))) (local.set 0x099 (i64.load offset=0x099 align=1 (i32.const 0))) (local.set 0x09a (i64.load offset=0x09a align=1 (i32.const 0))) (local.set 0x09b (i64.load offset=0x09b align=1 (i32.const 0))) (local.set 0x09c (i64.load offset=0x09c align=1 (i32.const 0))) (local.set 0x09d (i64.load offset=0x09d align=1 (i32.const 0))) (local.set 0x09e (i64.load offset=0x09e align=1 (i32.const 0))) (local.set 0x09f (i64.load offset=0x09f align=1 (i32.const 0))) (local.set 0x0a0 (i64.load offset=0x0a0 align=1 (i32.const 0))) (local.set 0x0a1 (i64.load offset=0x0a1 align=1 (i32.const 0))) (local.set 0x0a2 (i64.load offset=0x0a2 align=1 (i32.const 0))) (local.set 0x0a3 (i64.load offset=0x0a3 align=1 (i32.const 0))) (local.set 0x0a4 (i64.load offset=0x0a4 align=1 (i32.const 0))) (local.set 0x0a5 (i64.load offset=0x0a5 align=1 (i32.const 0))) (local.set 0x0a6 (i64.load offset=0x0a6 align=1 (i32.const 0))) (local.set 0x0a7 (i64.load offset=0x0a7 align=1 (i32.const 0))) (local.set 0x0a8 (i64.load offset=0x0a8 align=1 (i32.const 0))) (local.set 0x0a9 (i64.load offset=0x0a9 align=1 (i32.const 0))) (local.set 0x0aa (i64.load offset=0x0aa align=1 (i32.const 0))) (local.set 0x0ab (i64.load offset=0x0ab align=1 (i32.const 0))) (local.set 0x0ac (i64.load offset=0x0ac align=1 (i32.const 0))) (local.set 0x0ad (i64.load offset=0x0ad align=1 (i32.const 0))) (local.set 0x0ae (i64.load offset=0x0ae align=1 (i32.const 0))) (local.set 0x0af (i64.load offset=0x0af align=1 (i32.const 0))) (local.set 0x0b0 (i64.load offset=0x0b0 align=1 (i32.const 0))) (local.set 0x0b1 (i64.load offset=0x0b1 align=1 (i32.const 0))) (local.set 0x0b2 (i64.load offset=0x0b2 align=1 (i32.const 0))) (local.set 0x0b3 (i64.load offset=0x0b3 align=1 (i32.const 0))) (local.set 0x0b4 (i64.load offset=0x0b4 align=1 (i32.const 0))) (local.set 0x0b5 (i64.load offset=0x0b5 align=1 (i32.const 0))) (local.set 0x0b6 (i64.load offset=0x0b6 align=1 (i32.const 0))) (local.set 0x0b7 (i64.load offset=0x0b7 align=1 (i32.const 0))) (local.set 0x0b8 (i64.load offset=0x0b8 align=1 (i32.const 0))) (local.set 0x0b9 (i64.load offset=0x0b9 align=1 (i32.const 0))) (local.set 0x0ba (i64.load offset=0x0ba align=1 (i32.const 0))) (local.set 0x0bb (i64.load offset=0x0bb align=1 (i32.const 0))) (local.set 0x0bc (i64.load offset=0x0bc align=1 (i32.const 0))) (local.set 0x0bd (i64.load offset=0x0bd align=1 (i32.const 0))) (local.set 0x0be (i64.load offset=0x0be align=1 (i32.const 0))) (local.set 0x0bf (i64.load offset=0x0bf align=1 (i32.const 0))) (local.set 0x0c0 (i64.load offset=0x0c0 align=1 (i32.const 0))) (local.set 0x0c1 (i64.load offset=0x0c1 align=1 (i32.const 0))) (local.set 0x0c2 (i64.load offset=0x0c2 align=1 (i32.const 0))) (local.set 0x0c3 (i64.load offset=0x0c3 align=1 (i32.const 0))) (local.set 0x0c4 (i64.load offset=0x0c4 align=1 (i32.const 0))) (local.set 0x0c5 (i64.load offset=0x0c5 align=1 (i32.const 0))) (local.set 0x0c6 (i64.load offset=0x0c6 align=1 (i32.const 0))) (local.set 0x0c7 (i64.load offset=0x0c7 align=1 (i32.const 0))) (local.set 0x0c8 (i64.load offset=0x0c8 align=1 (i32.const 0))) (local.set 0x0c9 (i64.load offset=0x0c9 align=1 (i32.const 0))) (local.set 0x0ca (i64.load offset=0x0ca align=1 (i32.const 0))) (local.set 0x0cb (i64.load offset=0x0cb align=1 (i32.const 0))) (local.set 0x0cc (i64.load offset=0x0cc align=1 (i32.const 0))) (local.set 0x0cd (i64.load offset=0x0cd align=1 (i32.const 0))) (local.set 0x0ce (i64.load offset=0x0ce align=1 (i32.const 0))) (local.set 0x0cf (i64.load offset=0x0cf align=1 (i32.const 0))) (local.set 0x0d0 (i64.load offset=0x0d0 align=1 (i32.const 0))) (local.set 0x0d1 (i64.load offset=0x0d1 align=1 (i32.const 0))) (local.set 0x0d2 (i64.load offset=0x0d2 align=1 (i32.const 0))) (local.set 0x0d3 (i64.load offset=0x0d3 align=1 (i32.const 0))) (local.set 0x0d4 (i64.load offset=0x0d4 align=1 (i32.const 0))) (local.set 0x0d5 (i64.load offset=0x0d5 align=1 (i32.const 0))) (local.set 0x0d6 (i64.load offset=0x0d6 align=1 (i32.const 0))) (local.set 0x0d7 (i64.load offset=0x0d7 align=1 (i32.const 0))) (local.set 0x0d8 (i64.load offset=0x0d8 align=1 (i32.const 0))) (local.set 0x0d9 (i64.load offset=0x0d9 align=1 (i32.const 0))) (local.set 0x0da (i64.load offset=0x0da align=1 (i32.const 0))) (local.set 0x0db (i64.load offset=0x0db align=1 (i32.const 0))) (local.set 0x0dc (i64.load offset=0x0dc align=1 (i32.const 0))) (local.set 0x0dd (i64.load offset=0x0dd align=1 (i32.const 0))) (local.set 0x0de (i64.load offset=0x0de align=1 (i32.const 0))) (local.set 0x0df (i64.load offset=0x0df align=1 (i32.const 0))) (local.set 0x0e0 (i64.load offset=0x0e0 align=1 (i32.const 0))) (local.set 0x0e1 (i64.load offset=0x0e1 align=1 (i32.const 0))) (local.set 0x0e2 (i64.load offset=0x0e2 align=1 (i32.const 0))) (local.set 0x0e3 (i64.load offset=0x0e3 align=1 (i32.const 0))) (local.set 0x0e4 (i64.load offset=0x0e4 align=1 (i32.const 0))) (local.set 0x0e5 (i64.load offset=0x0e5 align=1 (i32.const 0))) (local.set 0x0e6 (i64.load offset=0x0e6 align=1 (i32.const 0))) (local.set 0x0e7 (i64.load offset=0x0e7 align=1 (i32.const 0))) (local.set 0x0e8 (i64.load offset=0x0e8 align=1 (i32.const 0))) (local.set 0x0e9 (i64.load offset=0x0e9 align=1 (i32.const 0))) (local.set 0x0ea (i64.load offset=0x0ea align=1 (i32.const 0))) (local.set 0x0eb (i64.load offset=0x0eb align=1 (i32.const 0))) (local.set 0x0ec (i64.load offset=0x0ec align=1 (i32.const 0))) (local.set 0x0ed (i64.load offset=0x0ed align=1 (i32.const 0))) (local.set 0x0ee (i64.load offset=0x0ee align=1 (i32.const 0))) (local.set 0x0ef (i64.load offset=0x0ef align=1 (i32.const 0))) (local.set 0x0f0 (i64.load offset=0x0f0 align=1 (i32.const 0))) (local.set 0x0f1 (i64.load offset=0x0f1 align=1 (i32.const 0))) (local.set 0x0f2 (i64.load offset=0x0f2 align=1 (i32.const 0))) (local.set 0x0f3 (i64.load offset=0x0f3 align=1 (i32.const 0))) (local.set 0x0f4 (i64.load offset=0x0f4 align=1 (i32.const 0))) (local.set 0x0f5 (i64.load offset=0x0f5 align=1 (i32.const 0))) (local.set 0x0f6 (i64.load offset=0x0f6 align=1 (i32.const 0))) (local.set 0x0f7 (i64.load offset=0x0f7 align=1 (i32.const 0))) (local.set 0x0f8 (i64.load offset=0x0f8 align=1 (i32.const 0))) (local.set 0x0f9 (i64.load offset=0x0f9 align=1 (i32.const 0))) (local.set 0x0fa (i64.load offset=0x0fa align=1 (i32.const 0))) (local.set 0x0fb (i64.load offset=0x0fb align=1 (i32.const 0))) (local.set 0x0fc (i64.load offset=0x0fc align=1 (i32.const 0))) (local.set 0x0fd (i64.load offset=0x0fd align=1 (i32.const 0))) (local.set 0x0fe (i64.load offset=0x0fe align=1 (i32.const 0))) (local.set 0x0ff (i64.load offset=0x0ff align=1 (i32.const 0))) (local.set 0x100 (i64.load offset=0x100 align=1 (i32.const 0))) (local.set 0x101 (i64.load offset=0x101 align=1 (i32.const 0))) (local.set 0x102 (i64.load offset=0x102 align=1 (i32.const 0))) (local.set 0x103 (i64.load offset=0x103 align=1 (i32.const 0))) (local.set 0x104 (i64.load offset=0x104 align=1 (i32.const 0))) (local.set 0x105 (i64.load offset=0x105 align=1 (i32.const 0))) (local.set 0x106 (i64.load offset=0x106 align=1 (i32.const 0))) (local.set 0x107 (i64.load offset=0x107 align=1 (i32.const 0))) (local.set 0x108 (i64.load offset=0x108 align=1 (i32.const 0))) (local.set 0x109 (i64.load offset=0x109 align=1 (i32.const 0))) (local.set 0x10a (i64.load offset=0x10a align=1 (i32.const 0))) (local.set 0x10b (i64.load offset=0x10b align=1 (i32.const 0))) (local.set 0x10c (i64.load offset=0x10c align=1 (i32.const 0))) (local.set 0x10d (i64.load offset=0x10d align=1 (i32.const 0))) (local.set 0x10e (i64.load offset=0x10e align=1 (i32.const 0))) (local.set 0x10f (i64.load offset=0x10f align=1 (i32.const 0))) (local.set 0x110 (i64.load offset=0x110 align=1 (i32.const 0))) (local.set 0x111 (i64.load offset=0x111 align=1 (i32.const 0))) (local.set 0x112 (i64.load offset=0x112 align=1 (i32.const 0))) (local.set 0x113 (i64.load offset=0x113 align=1 (i32.const 0))) (local.set 0x114 (i64.load offset=0x114 align=1 (i32.const 0))) (local.set 0x115 (i64.load offset=0x115 align=1 (i32.const 0))) (local.set 0x116 (i64.load offset=0x116 align=1 (i32.const 0))) (local.set 0x117 (i64.load offset=0x117 align=1 (i32.const 0))) (local.set 0x118 (i64.load offset=0x118 align=1 (i32.const 0))) (local.set 0x119 (i64.load offset=0x119 align=1 (i32.const 0))) (local.set 0x11a (i64.load offset=0x11a align=1 (i32.const 0))) (local.set 0x11b (i64.load offset=0x11b align=1 (i32.const 0))) (local.set 0x11c (i64.load offset=0x11c align=1 (i32.const 0))) (local.set 0x11d (i64.load offset=0x11d align=1 (i32.const 0))) (local.set 0x11e (i64.load offset=0x11e align=1 (i32.const 0))) (local.set 0x11f (i64.load offset=0x11f align=1 (i32.const 0))) (local.set 0x120 (i64.load offset=0x120 align=1 (i32.const 0))) (local.set 0x121 (i64.load offset=0x121 align=1 (i32.const 0))) (local.set 0x122 (i64.load offset=0x122 align=1 (i32.const 0))) (local.set 0x123 (i64.load offset=0x123 align=1 (i32.const 0))) (local.set 0x124 (i64.load offset=0x124 align=1 (i32.const 0))) (local.set 0x125 (i64.load offset=0x125 align=1 (i32.const 0))) (local.set 0x126 (i64.load offset=0x126 align=1 (i32.const 0))) (local.set 0x127 (i64.load offset=0x127 align=1 (i32.const 0))) (local.set 0x128 (i64.load offset=0x128 align=1 (i32.const 0))) (local.set 0x129 (i64.load offset=0x129 align=1 (i32.const 0))) (local.set 0x12a (i64.load offset=0x12a align=1 (i32.const 0))) (local.set 0x12b (i64.load offset=0x12b align=1 (i32.const 0))) (local.set 0x12c (i64.load offset=0x12c align=1 (i32.const 0))) (local.set 0x12d (i64.load offset=0x12d align=1 (i32.const 0))) (local.set 0x12e (i64.load offset=0x12e align=1 (i32.const 0))) (local.set 0x12f (i64.load offset=0x12f align=1 (i32.const 0))) (local.set 0x130 (i64.load offset=0x130 align=1 (i32.const 0))) (local.set 0x131 (i64.load offset=0x131 align=1 (i32.const 0))) (local.set 0x132 (i64.load offset=0x132 align=1 (i32.const 0))) (local.set 0x133 (i64.load offset=0x133 align=1 (i32.const 0))) (local.set 0x134 (i64.load offset=0x134 align=1 (i32.const 0))) (local.set 0x135 (i64.load offset=0x135 align=1 (i32.const 0))) (local.set 0x136 (i64.load offset=0x136 align=1 (i32.const 0))) (local.set 0x137 (i64.load offset=0x137 align=1 (i32.const 0))) (local.set 0x138 (i64.load offset=0x138 align=1 (i32.const 0))) (local.set 0x139 (i64.load offset=0x139 align=1 (i32.const 0))) (local.set 0x13a (i64.load offset=0x13a align=1 (i32.const 0))) (local.set 0x13b (i64.load offset=0x13b align=1 (i32.const 0))) (local.set 0x13c (i64.load offset=0x13c align=1 (i32.const 0))) (local.set 0x13d (i64.load offset=0x13d align=1 (i32.const 0))) (local.set 0x13e (i64.load offset=0x13e align=1 (i32.const 0))) (local.set 0x13f (i64.load offset=0x13f align=1 (i32.const 0))) (local.set 0x140 (i64.load offset=0x140 align=1 (i32.const 0))) (local.set 0x141 (i64.load offset=0x141 align=1 (i32.const 0))) (local.set 0x142 (i64.load offset=0x142 align=1 (i32.const 0))) (local.set 0x143 (i64.load offset=0x143 align=1 (i32.const 0))) (local.set 0x144 (i64.load offset=0x144 align=1 (i32.const 0))) (local.set 0x145 (i64.load offset=0x145 align=1 (i32.const 0))) (local.set 0x146 (i64.load offset=0x146 align=1 (i32.const 0))) (local.set 0x147 (i64.load offset=0x147 align=1 (i32.const 0))) (local.set 0x148 (i64.load offset=0x148 align=1 (i32.const 0))) (local.set 0x149 (i64.load offset=0x149 align=1 (i32.const 0))) (local.set 0x14a (i64.load offset=0x14a align=1 (i32.const 0))) (local.set 0x14b (i64.load offset=0x14b align=1 (i32.const 0))) (local.set 0x14c (i64.load offset=0x14c align=1 (i32.const 0))) (local.set 0x14d (i64.load offset=0x14d align=1 (i32.const 0))) (local.set 0x14e (i64.load offset=0x14e align=1 (i32.const 0))) (local.set 0x14f (i64.load offset=0x14f align=1 (i32.const 0))) (local.set 0x150 (i64.load offset=0x150 align=1 (i32.const 0))) (local.set 0x151 (i64.load offset=0x151 align=1 (i32.const 0))) (local.set 0x152 (i64.load offset=0x152 align=1 (i32.const 0))) (local.set 0x153 (i64.load offset=0x153 align=1 (i32.const 0))) (local.set 0x154 (i64.load offset=0x154 align=1 (i32.const 0))) (local.set 0x155 (i64.load offset=0x155 align=1 (i32.const 0))) (local.set 0x156 (i64.load offset=0x156 align=1 (i32.const 0))) (local.set 0x157 (i64.load offset=0x157 align=1 (i32.const 0))) (local.set 0x158 (i64.load offset=0x158 align=1 (i32.const 0))) (local.set 0x159 (i64.load offset=0x159 align=1 (i32.const 0))) (local.set 0x15a (i64.load offset=0x15a align=1 (i32.const 0))) (local.set 0x15b (i64.load offset=0x15b align=1 (i32.const 0))) (local.set 0x15c (i64.load offset=0x15c align=1 (i32.const 0))) (local.set 0x15d (i64.load offset=0x15d align=1 (i32.const 0))) (local.set 0x15e (i64.load offset=0x15e align=1 (i32.const 0))) (local.set 0x15f (i64.load offset=0x15f align=1 (i32.const 0))) (local.set 0x160 (i64.load offset=0x160 align=1 (i32.const 0))) (local.set 0x161 (i64.load offset=0x161 align=1 (i32.const 0))) (local.set 0x162 (i64.load offset=0x162 align=1 (i32.const 0))) (local.set 0x163 (i64.load offset=0x163 align=1 (i32.const 0))) (local.set 0x164 (i64.load offset=0x164 align=1 (i32.const 0))) (local.set 0x165 (i64.load offset=0x165 align=1 (i32.const 0))) (local.set 0x166 (i64.load offset=0x166 align=1 (i32.const 0))) (local.set 0x167 (i64.load offset=0x167 align=1 (i32.const 0))) (local.set 0x168 (i64.load offset=0x168 align=1 (i32.const 0))) (local.set 0x169 (i64.load offset=0x169 align=1 (i32.const 0))) (local.set 0x16a (i64.load offset=0x16a align=1 (i32.const 0))) (local.set 0x16b (i64.load offset=0x16b align=1 (i32.const 0))) (local.set 0x16c (i64.load offset=0x16c align=1 (i32.const 0))) (local.set 0x16d (i64.load offset=0x16d align=1 (i32.const 0))) (local.set 0x16e (i64.load offset=0x16e align=1 (i32.const 0))) (local.set 0x16f (i64.load offset=0x16f align=1 (i32.const 0))) (local.set 0x170 (i64.load offset=0x170 align=1 (i32.const 0))) (local.set 0x171 (i64.load offset=0x171 align=1 (i32.const 0))) (local.set 0x172 (i64.load offset=0x172 align=1 (i32.const 0))) (local.set 0x173 (i64.load offset=0x173 align=1 (i32.const 0))) (local.set 0x174 (i64.load offset=0x174 align=1 (i32.const 0))) (local.set 0x175 (i64.load offset=0x175 align=1 (i32.const 0))) (local.set 0x176 (i64.load offset=0x176 align=1 (i32.const 0))) (local.set 0x177 (i64.load offset=0x177 align=1 (i32.const 0))) (local.set 0x178 (i64.load offset=0x178 align=1 (i32.const 0))) (local.set 0x179 (i64.load offset=0x179 align=1 (i32.const 0))) (local.set 0x17a (i64.load offset=0x17a align=1 (i32.const 0))) (local.set 0x17b (i64.load offset=0x17b align=1 (i32.const 0))) (local.set 0x17c (i64.load offset=0x17c align=1 (i32.const 0))) (local.set 0x17d (i64.load offset=0x17d align=1 (i32.const 0))) (local.set 0x17e (i64.load offset=0x17e align=1 (i32.const 0))) (local.set 0x17f (i64.load offset=0x17f align=1 (i32.const 0))) (local.set 0x180 (i64.load offset=0x180 align=1 (i32.const 0))) (local.set 0x181 (i64.load offset=0x181 align=1 (i32.const 0))) (local.set 0x182 (i64.load offset=0x182 align=1 (i32.const 0))) (local.set 0x183 (i64.load offset=0x183 align=1 (i32.const 0))) (local.set 0x184 (i64.load offset=0x184 align=1 (i32.const 0))) (local.set 0x185 (i64.load offset=0x185 align=1 (i32.const 0))) (local.set 0x186 (i64.load offset=0x186 align=1 (i32.const 0))) (local.set 0x187 (i64.load offset=0x187 align=1 (i32.const 0))) (local.set 0x188 (i64.load offset=0x188 align=1 (i32.const 0))) (local.set 0x189 (i64.load offset=0x189 align=1 (i32.const 0))) (local.set 0x18a (i64.load offset=0x18a align=1 (i32.const 0))) (local.set 0x18b (i64.load offset=0x18b align=1 (i32.const 0))) (local.set 0x18c (i64.load offset=0x18c align=1 (i32.const 0))) (local.set 0x18d (i64.load offset=0x18d align=1 (i32.const 0))) (local.set 0x18e (i64.load offset=0x18e align=1 (i32.const 0))) (local.set 0x18f (i64.load offset=0x18f align=1 (i32.const 0))) (local.set 0x190 (i64.load offset=0x190 align=1 (i32.const 0))) (local.set 0x191 (i64.load offset=0x191 align=1 (i32.const 0))) (local.set 0x192 (i64.load offset=0x192 align=1 (i32.const 0))) (local.set 0x193 (i64.load offset=0x193 align=1 (i32.const 0))) (local.set 0x194 (i64.load offset=0x194 align=1 (i32.const 0))) (local.set 0x195 (i64.load offset=0x195 align=1 (i32.const 0))) (local.set 0x196 (i64.load offset=0x196 align=1 (i32.const 0))) (local.set 0x197 (i64.load offset=0x197 align=1 (i32.const 0))) (local.set 0x198 (i64.load offset=0x198 align=1 (i32.const 0))) (local.set 0x199 (i64.load offset=0x199 align=1 (i32.const 0))) (local.set 0x19a (i64.load offset=0x19a align=1 (i32.const 0))) (local.set 0x19b (i64.load offset=0x19b align=1 (i32.const 0))) (local.set 0x19c (i64.load offset=0x19c align=1 (i32.const 0))) (local.set 0x19d (i64.load offset=0x19d align=1 (i32.const 0))) (local.set 0x19e (i64.load offset=0x19e align=1 (i32.const 0))) (local.set 0x19f (i64.load offset=0x19f align=1 (i32.const 0))) (local.set 0x1a0 (i64.load offset=0x1a0 align=1 (i32.const 0))) (local.set 0x1a1 (i64.load offset=0x1a1 align=1 (i32.const 0))) (local.set 0x1a2 (i64.load offset=0x1a2 align=1 (i32.const 0))) (local.set 0x1a3 (i64.load offset=0x1a3 align=1 (i32.const 0))) (local.set 0x1a4 (i64.load offset=0x1a4 align=1 (i32.const 0))) (local.set 0x1a5 (i64.load offset=0x1a5 align=1 (i32.const 0))) (local.set 0x1a6 (i64.load offset=0x1a6 align=1 (i32.const 0))) (local.set 0x1a7 (i64.load offset=0x1a7 align=1 (i32.const 0))) (local.set 0x1a8 (i64.load offset=0x1a8 align=1 (i32.const 0))) (local.set 0x1a9 (i64.load offset=0x1a9 align=1 (i32.const 0))) (local.set 0x1aa (i64.load offset=0x1aa align=1 (i32.const 0))) (local.set 0x1ab (i64.load offset=0x1ab align=1 (i32.const 0))) (local.set 0x1ac (i64.load offset=0x1ac align=1 (i32.const 0))) (local.set 0x1ad (i64.load offset=0x1ad align=1 (i32.const 0))) (local.set 0x1ae (i64.load offset=0x1ae align=1 (i32.const 0))) (local.set 0x1af (i64.load offset=0x1af align=1 (i32.const 0))) (local.set 0x1b0 (i64.load offset=0x1b0 align=1 (i32.const 0))) (local.set 0x1b1 (i64.load offset=0x1b1 align=1 (i32.const 0))) (local.set 0x1b2 (i64.load offset=0x1b2 align=1 (i32.const 0))) (local.set 0x1b3 (i64.load offset=0x1b3 align=1 (i32.const 0))) (local.set 0x1b4 (i64.load offset=0x1b4 align=1 (i32.const 0))) (local.set 0x1b5 (i64.load offset=0x1b5 align=1 (i32.const 0))) (local.set 0x1b6 (i64.load offset=0x1b6 align=1 (i32.const 0))) (local.set 0x1b7 (i64.load offset=0x1b7 align=1 (i32.const 0))) (local.set 0x1b8 (i64.load offset=0x1b8 align=1 (i32.const 0))) (local.set 0x1b9 (i64.load offset=0x1b9 align=1 (i32.const 0))) (local.set 0x1ba (i64.load offset=0x1ba align=1 (i32.const 0))) (local.set 0x1bb (i64.load offset=0x1bb align=1 (i32.const 0))) (local.set 0x1bc (i64.load offset=0x1bc align=1 (i32.const 0))) (local.set 0x1bd (i64.load offset=0x1bd align=1 (i32.const 0))) (local.set 0x1be (i64.load offset=0x1be align=1 (i32.const 0))) (local.set 0x1bf (i64.load offset=0x1bf align=1 (i32.const 0))) (local.set 0x1c0 (i64.load offset=0x1c0 align=1 (i32.const 0))) (local.set 0x1c1 (i64.load offset=0x1c1 align=1 (i32.const 0))) (local.set 0x1c2 (i64.load offset=0x1c2 align=1 (i32.const 0))) (local.set 0x1c3 (i64.load offset=0x1c3 align=1 (i32.const 0))) (local.set 0x1c4 (i64.load offset=0x1c4 align=1 (i32.const 0))) (local.set 0x1c5 (i64.load offset=0x1c5 align=1 (i32.const 0))) (local.set 0x1c6 (i64.load offset=0x1c6 align=1 (i32.const 0))) (local.set 0x1c7 (i64.load offset=0x1c7 align=1 (i32.const 0))) (local.set 0x1c8 (i64.load offset=0x1c8 align=1 (i32.const 0))) (local.set 0x1c9 (i64.load offset=0x1c9 align=1 (i32.const 0))) (local.set 0x1ca (i64.load offset=0x1ca align=1 (i32.const 0))) (local.set 0x1cb (i64.load offset=0x1cb align=1 (i32.const 0))) (local.set 0x1cc (i64.load offset=0x1cc align=1 (i32.const 0))) (local.set 0x1cd (i64.load offset=0x1cd align=1 (i32.const 0))) (local.set 0x1ce (i64.load offset=0x1ce align=1 (i32.const 0))) (local.set 0x1cf (i64.load offset=0x1cf align=1 (i32.const 0))) (local.set 0x1d0 (i64.load offset=0x1d0 align=1 (i32.const 0))) (local.set 0x1d1 (i64.load offset=0x1d1 align=1 (i32.const 0))) (local.set 0x1d2 (i64.load offset=0x1d2 align=1 (i32.const 0))) (local.set 0x1d3 (i64.load offset=0x1d3 align=1 (i32.const 0))) (local.set 0x1d4 (i64.load offset=0x1d4 align=1 (i32.const 0))) (local.set 0x1d5 (i64.load offset=0x1d5 align=1 (i32.const 0))) (local.set 0x1d6 (i64.load offset=0x1d6 align=1 (i32.const 0))) (local.set 0x1d7 (i64.load offset=0x1d7 align=1 (i32.const 0))) (local.set 0x1d8 (i64.load offset=0x1d8 align=1 (i32.const 0))) (local.set 0x1d9 (i64.load offset=0x1d9 align=1 (i32.const 0))) (local.set 0x1da (i64.load offset=0x1da align=1 (i32.const 0))) (local.set 0x1db (i64.load offset=0x1db align=1 (i32.const 0))) (local.set 0x1dc (i64.load offset=0x1dc align=1 (i32.const 0))) (local.set 0x1dd (i64.load offset=0x1dd align=1 (i32.const 0))) (local.set 0x1de (i64.load offset=0x1de align=1 (i32.const 0))) (local.set 0x1df (i64.load offset=0x1df align=1 (i32.const 0))) (local.set 0x1e0 (i64.load offset=0x1e0 align=1 (i32.const 0))) (local.set 0x1e1 (i64.load offset=0x1e1 align=1 (i32.const 0))) (local.set 0x1e2 (i64.load offset=0x1e2 align=1 (i32.const 0))) (local.set 0x1e3 (i64.load offset=0x1e3 align=1 (i32.const 0))) (local.set 0x1e4 (i64.load offset=0x1e4 align=1 (i32.const 0))) (local.set 0x1e5 (i64.load offset=0x1e5 align=1 (i32.const 0))) (local.set 0x1e6 (i64.load offset=0x1e6 align=1 (i32.const 0))) (local.set 0x1e7 (i64.load offset=0x1e7 align=1 (i32.const 0))) (local.set 0x1e8 (i64.load offset=0x1e8 align=1 (i32.const 0))) (local.set 0x1e9 (i64.load offset=0x1e9 align=1 (i32.const 0))) (local.set 0x1ea (i64.load offset=0x1ea align=1 (i32.const 0))) (local.set 0x1eb (i64.load offset=0x1eb align=1 (i32.const 0))) (local.set 0x1ec (i64.load offset=0x1ec align=1 (i32.const 0))) (local.set 0x1ed (i64.load offset=0x1ed align=1 (i32.const 0))) (local.set 0x1ee (i64.load offset=0x1ee align=1 (i32.const 0))) (local.set 0x1ef (i64.load offset=0x1ef align=1 (i32.const 0))) (local.set 0x1f0 (i64.load offset=0x1f0 align=1 (i32.const 0))) (local.set 0x1f1 (i64.load offset=0x1f1 align=1 (i32.const 0))) (local.set 0x1f2 (i64.load offset=0x1f2 align=1 (i32.const 0))) (local.set 0x1f3 (i64.load offset=0x1f3 align=1 (i32.const 0))) (local.set 0x1f4 (i64.load offset=0x1f4 align=1 (i32.const 0))) (local.set 0x1f5 (i64.load offset=0x1f5 align=1 (i32.const 0))) (local.set 0x1f6 (i64.load offset=0x1f6 align=1 (i32.const 0))) (local.set 0x1f7 (i64.load offset=0x1f7 align=1 (i32.const 0))) (local.set 0x1f8 (i64.load offset=0x1f8 align=1 (i32.const 0))) (local.set 0x1f9 (i64.load offset=0x1f9 align=1 (i32.const 0))) (local.set 0x1fa (i64.load offset=0x1fa align=1 (i32.const 0))) (local.set 0x1fb (i64.load offset=0x1fb align=1 (i32.const 0))) (local.set 0x1fc (i64.load offset=0x1fc align=1 (i32.const 0))) (local.set 0x1fd (i64.load offset=0x1fd align=1 (i32.const 0))) (local.set 0x1fe (i64.load offset=0x1fe align=1 (i32.const 0))) (local.set 0x1ff (i64.load offset=0x1ff align=1 (i32.const 0))) (local.set 0x200 (i64.load offset=0x200 align=1 (i32.const 0))) (local.set 0x201 (i64.load offset=0x201 align=1 (i32.const 0))) (local.set 0x202 (i64.load offset=0x202 align=1 (i32.const 0))) (local.set 0x203 (i64.load offset=0x203 align=1 (i32.const 0))) (local.set 0x204 (i64.load offset=0x204 align=1 (i32.const 0))) (local.set 0x205 (i64.load offset=0x205 align=1 (i32.const 0))) (local.set 0x206 (i64.load offset=0x206 align=1 (i32.const 0))) (local.set 0x207 (i64.load offset=0x207 align=1 (i32.const 0))) (local.set 0x208 (i64.load offset=0x208 align=1 (i32.const 0))) (local.set 0x209 (i64.load offset=0x209 align=1 (i32.const 0))) (local.set 0x20a (i64.load offset=0x20a align=1 (i32.const 0))) (local.set 0x20b (i64.load offset=0x20b align=1 (i32.const 0))) (local.set 0x20c (i64.load offset=0x20c align=1 (i32.const 0))) (local.set 0x20d (i64.load offset=0x20d align=1 (i32.const 0))) (local.set 0x20e (i64.load offset=0x20e align=1 (i32.const 0))) (local.set 0x20f (i64.load offset=0x20f align=1 (i32.const 0))) (local.set 0x210 (i64.load offset=0x210 align=1 (i32.const 0))) (local.set 0x211 (i64.load offset=0x211 align=1 (i32.const 0))) (local.set 0x212 (i64.load offset=0x212 align=1 (i32.const 0))) (local.set 0x213 (i64.load offset=0x213 align=1 (i32.const 0))) (local.set 0x214 (i64.load offset=0x214 align=1 (i32.const 0))) (local.set 0x215 (i64.load offset=0x215 align=1 (i32.const 0))) (local.set 0x216 (i64.load offset=0x216 align=1 (i32.const 0))) (local.set 0x217 (i64.load offset=0x217 align=1 (i32.const 0))) (local.set 0x218 (i64.load offset=0x218 align=1 (i32.const 0))) (local.set 0x219 (i64.load offset=0x219 align=1 (i32.const 0))) (local.set 0x21a (i64.load offset=0x21a align=1 (i32.const 0))) (local.set 0x21b (i64.load offset=0x21b align=1 (i32.const 0))) (local.set 0x21c (i64.load offset=0x21c align=1 (i32.const 0))) (local.set 0x21d (i64.load offset=0x21d align=1 (i32.const 0))) (local.set 0x21e (i64.load offset=0x21e align=1 (i32.const 0))) (local.set 0x21f (i64.load offset=0x21f align=1 (i32.const 0))) (local.set 0x220 (i64.load offset=0x220 align=1 (i32.const 0))) (local.set 0x221 (i64.load offset=0x221 align=1 (i32.const 0))) (local.set 0x222 (i64.load offset=0x222 align=1 (i32.const 0))) (local.set 0x223 (i64.load offset=0x223 align=1 (i32.const 0))) (local.set 0x224 (i64.load offset=0x224 align=1 (i32.const 0))) (local.set 0x225 (i64.load offset=0x225 align=1 (i32.const 0))) (local.set 0x226 (i64.load offset=0x226 align=1 (i32.const 0))) (local.set 0x227 (i64.load offset=0x227 align=1 (i32.const 0))) (local.set 0x228 (i64.load offset=0x228 align=1 (i32.const 0))) (local.set 0x229 (i64.load offset=0x229 align=1 (i32.const 0))) (local.set 0x22a (i64.load offset=0x22a align=1 (i32.const 0))) (local.set 0x22b (i64.load offset=0x22b align=1 (i32.const 0))) (local.set 0x22c (i64.load offset=0x22c align=1 (i32.const 0))) (local.set 0x22d (i64.load offset=0x22d align=1 (i32.const 0))) (local.set 0x22e (i64.load offset=0x22e align=1 (i32.const 0))) (local.set 0x22f (i64.load offset=0x22f align=1 (i32.const 0))) (local.set 0x230 (i64.load offset=0x230 align=1 (i32.const 0))) (local.set 0x231 (i64.load offset=0x231 align=1 (i32.const 0))) (local.set 0x232 (i64.load offset=0x232 align=1 (i32.const 0))) (local.set 0x233 (i64.load offset=0x233 align=1 (i32.const 0))) (local.set 0x234 (i64.load offset=0x234 align=1 (i32.const 0))) (local.set 0x235 (i64.load offset=0x235 align=1 (i32.const 0))) (local.set 0x236 (i64.load offset=0x236 align=1 (i32.const 0))) (local.set 0x237 (i64.load offset=0x237 align=1 (i32.const 0))) (local.set 0x238 (i64.load offset=0x238 align=1 (i32.const 0))) (local.set 0x239 (i64.load offset=0x239 align=1 (i32.const 0))) (local.set 0x23a (i64.load offset=0x23a align=1 (i32.const 0))) (local.set 0x23b (i64.load offset=0x23b align=1 (i32.const 0))) (local.set 0x23c (i64.load offset=0x23c align=1 (i32.const 0))) (local.set 0x23d (i64.load offset=0x23d align=1 (i32.const 0))) (local.set 0x23e (i64.load offset=0x23e align=1 (i32.const 0))) (local.set 0x23f (i64.load offset=0x23f align=1 (i32.const 0))) (local.set 0x240 (i64.load offset=0x240 align=1 (i32.const 0))) (local.set 0x241 (i64.load offset=0x241 align=1 (i32.const 0))) (local.set 0x242 (i64.load offset=0x242 align=1 (i32.const 0))) (local.set 0x243 (i64.load offset=0x243 align=1 (i32.const 0))) (local.set 0x244 (i64.load offset=0x244 align=1 (i32.const 0))) (local.set 0x245 (i64.load offset=0x245 align=1 (i32.const 0))) (local.set 0x246 (i64.load offset=0x246 align=1 (i32.const 0))) (local.set 0x247 (i64.load offset=0x247 align=1 (i32.const 0))) (local.set 0x248 (i64.load offset=0x248 align=1 (i32.const 0))) (local.set 0x249 (i64.load offset=0x249 align=1 (i32.const 0))) (local.set 0x24a (i64.load offset=0x24a align=1 (i32.const 0))) (local.set 0x24b (i64.load offset=0x24b align=1 (i32.const 0))) (local.set 0x24c (i64.load offset=0x24c align=1 (i32.const 0))) (local.set 0x24d (i64.load offset=0x24d align=1 (i32.const 0))) (local.set 0x24e (i64.load offset=0x24e align=1 (i32.const 0))) (local.set 0x24f (i64.load offset=0x24f align=1 (i32.const 0))) (local.set 0x250 (i64.load offset=0x250 align=1 (i32.const 0))) (local.set 0x251 (i64.load offset=0x251 align=1 (i32.const 0))) (local.set 0x252 (i64.load offset=0x252 align=1 (i32.const 0))) (local.set 0x253 (i64.load offset=0x253 align=1 (i32.const 0))) (local.set 0x254 (i64.load offset=0x254 align=1 (i32.const 0))) (local.set 0x255 (i64.load offset=0x255 align=1 (i32.const 0))) (local.set 0x256 (i64.load offset=0x256 align=1 (i32.const 0))) (local.set 0x257 (i64.load offset=0x257 align=1 (i32.const 0))) (local.set 0x258 (i64.load offset=0x258 align=1 (i32.const 0))) (local.set 0x259 (i64.load offset=0x259 align=1 (i32.const 0))) (local.set 0x25a (i64.load offset=0x25a align=1 (i32.const 0))) (local.set 0x25b (i64.load offset=0x25b align=1 (i32.const 0))) (local.set 0x25c (i64.load offset=0x25c align=1 (i32.const 0))) (local.set 0x25d (i64.load offset=0x25d align=1 (i32.const 0))) (local.set 0x25e (i64.load offset=0x25e align=1 (i32.const 0))) (local.set 0x25f (i64.load offset=0x25f align=1 (i32.const 0))) (local.set 0x260 (i64.load offset=0x260 align=1 (i32.const 0))) (local.set 0x261 (i64.load offset=0x261 align=1 (i32.const 0))) (local.set 0x262 (i64.load offset=0x262 align=1 (i32.const 0))) (local.set 0x263 (i64.load offset=0x263 align=1 (i32.const 0))) (local.set 0x264 (i64.load offset=0x264 align=1 (i32.const 0))) (local.set 0x265 (i64.load offset=0x265 align=1 (i32.const 0))) (local.set 0x266 (i64.load offset=0x266 align=1 (i32.const 0))) (local.set 0x267 (i64.load offset=0x267 align=1 (i32.const 0))) (local.set 0x268 (i64.load offset=0x268 align=1 (i32.const 0))) (local.set 0x269 (i64.load offset=0x269 align=1 (i32.const 0))) (local.set 0x26a (i64.load offset=0x26a align=1 (i32.const 0))) (local.set 0x26b (i64.load offset=0x26b align=1 (i32.const 0))) (local.set 0x26c (i64.load offset=0x26c align=1 (i32.const 0))) (local.set 0x26d (i64.load offset=0x26d align=1 (i32.const 0))) (local.set 0x26e (i64.load offset=0x26e align=1 (i32.const 0))) (local.set 0x26f (i64.load offset=0x26f align=1 (i32.const 0))) (local.set 0x270 (i64.load offset=0x270 align=1 (i32.const 0))) (local.set 0x271 (i64.load offset=0x271 align=1 (i32.const 0))) (local.set 0x272 (i64.load offset=0x272 align=1 (i32.const 0))) (local.set 0x273 (i64.load offset=0x273 align=1 (i32.const 0))) (local.set 0x274 (i64.load offset=0x274 align=1 (i32.const 0))) (local.set 0x275 (i64.load offset=0x275 align=1 (i32.const 0))) (local.set 0x276 (i64.load offset=0x276 align=1 (i32.const 0))) (local.set 0x277 (i64.load offset=0x277 align=1 (i32.const 0))) (local.set 0x278 (i64.load offset=0x278 align=1 (i32.const 0))) (local.set 0x279 (i64.load offset=0x279 align=1 (i32.const 0))) (local.set 0x27a (i64.load offset=0x27a align=1 (i32.const 0))) (local.set 0x27b (i64.load offset=0x27b align=1 (i32.const 0))) (local.set 0x27c (i64.load offset=0x27c align=1 (i32.const 0))) (local.set 0x27d (i64.load offset=0x27d align=1 (i32.const 0))) (local.set 0x27e (i64.load offset=0x27e align=1 (i32.const 0))) (local.set 0x27f (i64.load offset=0x27f align=1 (i32.const 0))) (local.set 0x280 (i64.load offset=0x280 align=1 (i32.const 0))) (local.set 0x281 (i64.load offset=0x281 align=1 (i32.const 0))) (local.set 0x282 (i64.load offset=0x282 align=1 (i32.const 0))) (local.set 0x283 (i64.load offset=0x283 align=1 (i32.const 0))) (local.set 0x284 (i64.load offset=0x284 align=1 (i32.const 0))) (local.set 0x285 (i64.load offset=0x285 align=1 (i32.const 0))) (local.set 0x286 (i64.load offset=0x286 align=1 (i32.const 0))) (local.set 0x287 (i64.load offset=0x287 align=1 (i32.const 0))) (local.set 0x288 (i64.load offset=0x288 align=1 (i32.const 0))) (local.set 0x289 (i64.load offset=0x289 align=1 (i32.const 0))) (local.set 0x28a (i64.load offset=0x28a align=1 (i32.const 0))) (local.set 0x28b (i64.load offset=0x28b align=1 (i32.const 0))) (local.set 0x28c (i64.load offset=0x28c align=1 (i32.const 0))) (local.set 0x28d (i64.load offset=0x28d align=1 (i32.const 0))) (local.set 0x28e (i64.load offset=0x28e align=1 (i32.const 0))) (local.set 0x28f (i64.load offset=0x28f align=1 (i32.const 0))) (local.set 0x290 (i64.load offset=0x290 align=1 (i32.const 0))) (local.set 0x291 (i64.load offset=0x291 align=1 (i32.const 0))) (local.set 0x292 (i64.load offset=0x292 align=1 (i32.const 0))) (local.set 0x293 (i64.load offset=0x293 align=1 (i32.const 0))) (local.set 0x294 (i64.load offset=0x294 align=1 (i32.const 0))) (local.set 0x295 (i64.load offset=0x295 align=1 (i32.const 0))) (local.set 0x296 (i64.load offset=0x296 align=1 (i32.const 0))) (local.set 0x297 (i64.load offset=0x297 align=1 (i32.const 0))) (local.set 0x298 (i64.load offset=0x298 align=1 (i32.const 0))) (local.set 0x299 (i64.load offset=0x299 align=1 (i32.const 0))) (local.set 0x29a (i64.load offset=0x29a align=1 (i32.const 0))) (local.set 0x29b (i64.load offset=0x29b align=1 (i32.const 0))) (local.set 0x29c (i64.load offset=0x29c align=1 (i32.const 0))) (local.set 0x29d (i64.load offset=0x29d align=1 (i32.const 0))) (local.set 0x29e (i64.load offset=0x29e align=1 (i32.const 0))) (local.set 0x29f (i64.load offset=0x29f align=1 (i32.const 0))) (local.set 0x2a0 (i64.load offset=0x2a0 align=1 (i32.const 0))) (local.set 0x2a1 (i64.load offset=0x2a1 align=1 (i32.const 0))) (local.set 0x2a2 (i64.load offset=0x2a2 align=1 (i32.const 0))) (local.set 0x2a3 (i64.load offset=0x2a3 align=1 (i32.const 0))) (local.set 0x2a4 (i64.load offset=0x2a4 align=1 (i32.const 0))) (local.set 0x2a5 (i64.load offset=0x2a5 align=1 (i32.const 0))) (local.set 0x2a6 (i64.load offset=0x2a6 align=1 (i32.const 0))) (local.set 0x2a7 (i64.load offset=0x2a7 align=1 (i32.const 0))) (local.set 0x2a8 (i64.load offset=0x2a8 align=1 (i32.const 0))) (local.set 0x2a9 (i64.load offset=0x2a9 align=1 (i32.const 0))) (local.set 0x2aa (i64.load offset=0x2aa align=1 (i32.const 0))) (local.set 0x2ab (i64.load offset=0x2ab align=1 (i32.const 0))) (local.set 0x2ac (i64.load offset=0x2ac align=1 (i32.const 0))) (local.set 0x2ad (i64.load offset=0x2ad align=1 (i32.const 0))) (local.set 0x2ae (i64.load offset=0x2ae align=1 (i32.const 0))) (local.set 0x2af (i64.load offset=0x2af align=1 (i32.const 0))) (local.set 0x2b0 (i64.load offset=0x2b0 align=1 (i32.const 0))) (local.set 0x2b1 (i64.load offset=0x2b1 align=1 (i32.const 0))) (local.set 0x2b2 (i64.load offset=0x2b2 align=1 (i32.const 0))) (local.set 0x2b3 (i64.load offset=0x2b3 align=1 (i32.const 0))) (local.set 0x2b4 (i64.load offset=0x2b4 align=1 (i32.const 0))) (local.set 0x2b5 (i64.load offset=0x2b5 align=1 (i32.const 0))) (local.set 0x2b6 (i64.load offset=0x2b6 align=1 (i32.const 0))) (local.set 0x2b7 (i64.load offset=0x2b7 align=1 (i32.const 0))) (local.set 0x2b8 (i64.load offset=0x2b8 align=1 (i32.const 0))) (local.set 0x2b9 (i64.load offset=0x2b9 align=1 (i32.const 0))) (local.set 0x2ba (i64.load offset=0x2ba align=1 (i32.const 0))) (local.set 0x2bb (i64.load offset=0x2bb align=1 (i32.const 0))) (local.set 0x2bc (i64.load offset=0x2bc align=1 (i32.const 0))) (local.set 0x2bd (i64.load offset=0x2bd align=1 (i32.const 0))) (local.set 0x2be (i64.load offset=0x2be align=1 (i32.const 0))) (local.set 0x2bf (i64.load offset=0x2bf align=1 (i32.const 0))) (local.set 0x2c0 (i64.load offset=0x2c0 align=1 (i32.const 0))) (local.set 0x2c1 (i64.load offset=0x2c1 align=1 (i32.const 0))) (local.set 0x2c2 (i64.load offset=0x2c2 align=1 (i32.const 0))) (local.set 0x2c3 (i64.load offset=0x2c3 align=1 (i32.const 0))) (local.set 0x2c4 (i64.load offset=0x2c4 align=1 (i32.const 0))) (local.set 0x2c5 (i64.load offset=0x2c5 align=1 (i32.const 0))) (local.set 0x2c6 (i64.load offset=0x2c6 align=1 (i32.const 0))) (local.set 0x2c7 (i64.load offset=0x2c7 align=1 (i32.const 0))) (local.set 0x2c8 (i64.load offset=0x2c8 align=1 (i32.const 0))) (local.set 0x2c9 (i64.load offset=0x2c9 align=1 (i32.const 0))) (local.set 0x2ca (i64.load offset=0x2ca align=1 (i32.const 0))) (local.set 0x2cb (i64.load offset=0x2cb align=1 (i32.const 0))) (local.set 0x2cc (i64.load offset=0x2cc align=1 (i32.const 0))) (local.set 0x2cd (i64.load offset=0x2cd align=1 (i32.const 0))) (local.set 0x2ce (i64.load offset=0x2ce align=1 (i32.const 0))) (local.set 0x2cf (i64.load offset=0x2cf align=1 (i32.const 0))) (local.set 0x2d0 (i64.load offset=0x2d0 align=1 (i32.const 0))) (local.set 0x2d1 (i64.load offset=0x2d1 align=1 (i32.const 0))) (local.set 0x2d2 (i64.load offset=0x2d2 align=1 (i32.const 0))) (local.set 0x2d3 (i64.load offset=0x2d3 align=1 (i32.const 0))) (local.set 0x2d4 (i64.load offset=0x2d4 align=1 (i32.const 0))) (local.set 0x2d5 (i64.load offset=0x2d5 align=1 (i32.const 0))) (local.set 0x2d6 (i64.load offset=0x2d6 align=1 (i32.const 0))) (local.set 0x2d7 (i64.load offset=0x2d7 align=1 (i32.const 0))) (local.set 0x2d8 (i64.load offset=0x2d8 align=1 (i32.const 0))) (local.set 0x2d9 (i64.load offset=0x2d9 align=1 (i32.const 0))) (local.set 0x2da (i64.load offset=0x2da align=1 (i32.const 0))) (local.set 0x2db (i64.load offset=0x2db align=1 (i32.const 0))) (local.set 0x2dc (i64.load offset=0x2dc align=1 (i32.const 0))) (local.set 0x2dd (i64.load offset=0x2dd align=1 (i32.const 0))) (local.set 0x2de (i64.load offset=0x2de align=1 (i32.const 0))) (local.set 0x2df (i64.load offset=0x2df align=1 (i32.const 0))) (local.set 0x2e0 (i64.load offset=0x2e0 align=1 (i32.const 0))) (local.set 0x2e1 (i64.load offset=0x2e1 align=1 (i32.const 0))) (local.set 0x2e2 (i64.load offset=0x2e2 align=1 (i32.const 0))) (local.set 0x2e3 (i64.load offset=0x2e3 align=1 (i32.const 0))) (local.set 0x2e4 (i64.load offset=0x2e4 align=1 (i32.const 0))) (local.set 0x2e5 (i64.load offset=0x2e5 align=1 (i32.const 0))) (local.set 0x2e6 (i64.load offset=0x2e6 align=1 (i32.const 0))) (local.set 0x2e7 (i64.load offset=0x2e7 align=1 (i32.const 0))) (local.set 0x2e8 (i64.load offset=0x2e8 align=1 (i32.const 0))) (local.set 0x2e9 (i64.load offset=0x2e9 align=1 (i32.const 0))) (local.set 0x2ea (i64.load offset=0x2ea align=1 (i32.const 0))) (local.set 0x2eb (i64.load offset=0x2eb align=1 (i32.const 0))) (local.set 0x2ec (i64.load offset=0x2ec align=1 (i32.const 0))) (local.set 0x2ed (i64.load offset=0x2ed align=1 (i32.const 0))) (local.set 0x2ee (i64.load offset=0x2ee align=1 (i32.const 0))) (local.set 0x2ef (i64.load offset=0x2ef align=1 (i32.const 0))) (local.set 0x2f0 (i64.load offset=0x2f0 align=1 (i32.const 0))) (local.set 0x2f1 (i64.load offset=0x2f1 align=1 (i32.const 0))) (local.set 0x2f2 (i64.load offset=0x2f2 align=1 (i32.const 0))) (local.set 0x2f3 (i64.load offset=0x2f3 align=1 (i32.const 0))) (local.set 0x2f4 (i64.load offset=0x2f4 align=1 (i32.const 0))) (local.set 0x2f5 (i64.load offset=0x2f5 align=1 (i32.const 0))) (local.set 0x2f6 (i64.load offset=0x2f6 align=1 (i32.const 0))) (local.set 0x2f7 (i64.load offset=0x2f7 align=1 (i32.const 0))) (local.set 0x2f8 (i64.load offset=0x2f8 align=1 (i32.const 0))) (local.set 0x2f9 (i64.load offset=0x2f9 align=1 (i32.const 0))) (local.set 0x2fa (i64.load offset=0x2fa align=1 (i32.const 0))) (local.set 0x2fb (i64.load offset=0x2fb align=1 (i32.const 0))) (local.set 0x2fc (i64.load offset=0x2fc align=1 (i32.const 0))) (local.set 0x2fd (i64.load offset=0x2fd align=1 (i32.const 0))) (local.set 0x2fe (i64.load offset=0x2fe align=1 (i32.const 0))) (local.set 0x2ff (i64.load offset=0x2ff align=1 (i32.const 0))) (local.set 0x300 (i64.load offset=0x300 align=1 (i32.const 0))) (local.set 0x301 (i64.load offset=0x301 align=1 (i32.const 0))) (local.set 0x302 (i64.load offset=0x302 align=1 (i32.const 0))) (local.set 0x303 (i64.load offset=0x303 align=1 (i32.const 0))) (local.set 0x304 (i64.load offset=0x304 align=1 (i32.const 0))) (local.set 0x305 (i64.load offset=0x305 align=1 (i32.const 0))) (local.set 0x306 (i64.load offset=0x306 align=1 (i32.const 0))) (local.set 0x307 (i64.load offset=0x307 align=1 (i32.const 0))) (local.set 0x308 (i64.load offset=0x308 align=1 (i32.const 0))) (local.set 0x309 (i64.load offset=0x309 align=1 (i32.const 0))) (local.set 0x30a (i64.load offset=0x30a align=1 (i32.const 0))) (local.set 0x30b (i64.load offset=0x30b align=1 (i32.const 0))) (local.set 0x30c (i64.load offset=0x30c align=1 (i32.const 0))) (local.set 0x30d (i64.load offset=0x30d align=1 (i32.const 0))) (local.set 0x30e (i64.load offset=0x30e align=1 (i32.const 0))) (local.set 0x30f (i64.load offset=0x30f align=1 (i32.const 0))) (local.set 0x310 (i64.load offset=0x310 align=1 (i32.const 0))) (local.set 0x311 (i64.load offset=0x311 align=1 (i32.const 0))) (local.set 0x312 (i64.load offset=0x312 align=1 (i32.const 0))) (local.set 0x313 (i64.load offset=0x313 align=1 (i32.const 0))) (local.set 0x314 (i64.load offset=0x314 align=1 (i32.const 0))) (local.set 0x315 (i64.load offset=0x315 align=1 (i32.const 0))) (local.set 0x316 (i64.load offset=0x316 align=1 (i32.const 0))) (local.set 0x317 (i64.load offset=0x317 align=1 (i32.const 0))) (local.set 0x318 (i64.load offset=0x318 align=1 (i32.const 0))) (local.set 0x319 (i64.load offset=0x319 align=1 (i32.const 0))) (local.set 0x31a (i64.load offset=0x31a align=1 (i32.const 0))) (local.set 0x31b (i64.load offset=0x31b align=1 (i32.const 0))) (local.set 0x31c (i64.load offset=0x31c align=1 (i32.const 0))) (local.set 0x31d (i64.load offset=0x31d align=1 (i32.const 0))) (local.set 0x31e (i64.load offset=0x31e align=1 (i32.const 0))) (local.set 0x31f (i64.load offset=0x31f align=1 (i32.const 0))) (local.set 0x320 (i64.load offset=0x320 align=1 (i32.const 0))) (local.set 0x321 (i64.load offset=0x321 align=1 (i32.const 0))) (local.set 0x322 (i64.load offset=0x322 align=1 (i32.const 0))) (local.set 0x323 (i64.load offset=0x323 align=1 (i32.const 0))) (local.set 0x324 (i64.load offset=0x324 align=1 (i32.const 0))) (local.set 0x325 (i64.load offset=0x325 align=1 (i32.const 0))) (local.set 0x326 (i64.load offset=0x326 align=1 (i32.const 0))) (local.set 0x327 (i64.load offset=0x327 align=1 (i32.const 0))) (local.set 0x328 (i64.load offset=0x328 align=1 (i32.const 0))) (local.set 0x329 (i64.load offset=0x329 align=1 (i32.const 0))) (local.set 0x32a (i64.load offset=0x32a align=1 (i32.const 0))) (local.set 0x32b (i64.load offset=0x32b align=1 (i32.const 0))) (local.set 0x32c (i64.load offset=0x32c align=1 (i32.const 0))) (local.set 0x32d (i64.load offset=0x32d align=1 (i32.const 0))) (local.set 0x32e (i64.load offset=0x32e align=1 (i32.const 0))) (local.set 0x32f (i64.load offset=0x32f align=1 (i32.const 0))) (local.set 0x330 (i64.load offset=0x330 align=1 (i32.const 0))) (local.set 0x331 (i64.load offset=0x331 align=1 (i32.const 0))) (local.set 0x332 (i64.load offset=0x332 align=1 (i32.const 0))) (local.set 0x333 (i64.load offset=0x333 align=1 (i32.const 0))) (local.set 0x334 (i64.load offset=0x334 align=1 (i32.const 0))) (local.set 0x335 (i64.load offset=0x335 align=1 (i32.const 0))) (local.set 0x336 (i64.load offset=0x336 align=1 (i32.const 0))) (local.set 0x337 (i64.load offset=0x337 align=1 (i32.const 0))) (local.set 0x338 (i64.load offset=0x338 align=1 (i32.const 0))) (local.set 0x339 (i64.load offset=0x339 align=1 (i32.const 0))) (local.set 0x33a (i64.load offset=0x33a align=1 (i32.const 0))) (local.set 0x33b (i64.load offset=0x33b align=1 (i32.const 0))) (local.set 0x33c (i64.load offset=0x33c align=1 (i32.const 0))) (local.set 0x33d (i64.load offset=0x33d align=1 (i32.const 0))) (local.set 0x33e (i64.load offset=0x33e align=1 (i32.const 0))) (local.set 0x33f (i64.load offset=0x33f align=1 (i32.const 0))) (local.set 0x340 (i64.load offset=0x340 align=1 (i32.const 0))) (local.set 0x341 (i64.load offset=0x341 align=1 (i32.const 0))) (local.set 0x342 (i64.load offset=0x342 align=1 (i32.const 0))) (local.set 0x343 (i64.load offset=0x343 align=1 (i32.const 0))) (local.set 0x344 (i64.load offset=0x344 align=1 (i32.const 0))) (local.set 0x345 (i64.load offset=0x345 align=1 (i32.const 0))) (local.set 0x346 (i64.load offset=0x346 align=1 (i32.const 0))) (local.set 0x347 (i64.load offset=0x347 align=1 (i32.const 0))) (local.set 0x348 (i64.load offset=0x348 align=1 (i32.const 0))) (local.set 0x349 (i64.load offset=0x349 align=1 (i32.const 0))) (local.set 0x34a (i64.load offset=0x34a align=1 (i32.const 0))) (local.set 0x34b (i64.load offset=0x34b align=1 (i32.const 0))) (local.set 0x34c (i64.load offset=0x34c align=1 (i32.const 0))) (local.set 0x34d (i64.load offset=0x34d align=1 (i32.const 0))) (local.set 0x34e (i64.load offset=0x34e align=1 (i32.const 0))) (local.set 0x34f (i64.load offset=0x34f align=1 (i32.const 0))) (local.set 0x350 (i64.load offset=0x350 align=1 (i32.const 0))) (local.set 0x351 (i64.load offset=0x351 align=1 (i32.const 0))) (local.set 0x352 (i64.load offset=0x352 align=1 (i32.const 0))) (local.set 0x353 (i64.load offset=0x353 align=1 (i32.const 0))) (local.set 0x354 (i64.load offset=0x354 align=1 (i32.const 0))) (local.set 0x355 (i64.load offset=0x355 align=1 (i32.const 0))) (local.set 0x356 (i64.load offset=0x356 align=1 (i32.const 0))) (local.set 0x357 (i64.load offset=0x357 align=1 (i32.const 0))) (local.set 0x358 (i64.load offset=0x358 align=1 (i32.const 0))) (local.set 0x359 (i64.load offset=0x359 align=1 (i32.const 0))) (local.set 0x35a (i64.load offset=0x35a align=1 (i32.const 0))) (local.set 0x35b (i64.load offset=0x35b align=1 (i32.const 0))) (local.set 0x35c (i64.load offset=0x35c align=1 (i32.const 0))) (local.set 0x35d (i64.load offset=0x35d align=1 (i32.const 0))) (local.set 0x35e (i64.load offset=0x35e align=1 (i32.const 0))) (local.set 0x35f (i64.load offset=0x35f align=1 (i32.const 0))) (local.set 0x360 (i64.load offset=0x360 align=1 (i32.const 0))) (local.set 0x361 (i64.load offset=0x361 align=1 (i32.const 0))) (local.set 0x362 (i64.load offset=0x362 align=1 (i32.const 0))) (local.set 0x363 (i64.load offset=0x363 align=1 (i32.const 0))) (local.set 0x364 (i64.load offset=0x364 align=1 (i32.const 0))) (local.set 0x365 (i64.load offset=0x365 align=1 (i32.const 0))) (local.set 0x366 (i64.load offset=0x366 align=1 (i32.const 0))) (local.set 0x367 (i64.load offset=0x367 align=1 (i32.const 0))) (local.set 0x368 (i64.load offset=0x368 align=1 (i32.const 0))) (local.set 0x369 (i64.load offset=0x369 align=1 (i32.const 0))) (local.set 0x36a (i64.load offset=0x36a align=1 (i32.const 0))) (local.set 0x36b (i64.load offset=0x36b align=1 (i32.const 0))) (local.set 0x36c (i64.load offset=0x36c align=1 (i32.const 0))) (local.set 0x36d (i64.load offset=0x36d align=1 (i32.const 0))) (local.set 0x36e (i64.load offset=0x36e align=1 (i32.const 0))) (local.set 0x36f (i64.load offset=0x36f align=1 (i32.const 0))) (local.set 0x370 (i64.load offset=0x370 align=1 (i32.const 0))) (local.set 0x371 (i64.load offset=0x371 align=1 (i32.const 0))) (local.set 0x372 (i64.load offset=0x372 align=1 (i32.const 0))) (local.set 0x373 (i64.load offset=0x373 align=1 (i32.const 0))) (local.set 0x374 (i64.load offset=0x374 align=1 (i32.const 0))) (local.set 0x375 (i64.load offset=0x375 align=1 (i32.const 0))) (local.set 0x376 (i64.load offset=0x376 align=1 (i32.const 0))) (local.set 0x377 (i64.load offset=0x377 align=1 (i32.const 0))) (local.set 0x378 (i64.load offset=0x378 align=1 (i32.const 0))) (local.set 0x379 (i64.load offset=0x379 align=1 (i32.const 0))) (local.set 0x37a (i64.load offset=0x37a align=1 (i32.const 0))) (local.set 0x37b (i64.load offset=0x37b align=1 (i32.const 0))) (local.set 0x37c (i64.load offset=0x37c align=1 (i32.const 0))) (local.set 0x37d (i64.load offset=0x37d align=1 (i32.const 0))) (local.set 0x37e (i64.load offset=0x37e align=1 (i32.const 0))) (local.set 0x37f (i64.load offset=0x37f align=1 (i32.const 0))) (local.set 0x380 (i64.load offset=0x380 align=1 (i32.const 0))) (local.set 0x381 (i64.load offset=0x381 align=1 (i32.const 0))) (local.set 0x382 (i64.load offset=0x382 align=1 (i32.const 0))) (local.set 0x383 (i64.load offset=0x383 align=1 (i32.const 0))) (local.set 0x384 (i64.load offset=0x384 align=1 (i32.const 0))) (local.set 0x385 (i64.load offset=0x385 align=1 (i32.const 0))) (local.set 0x386 (i64.load offset=0x386 align=1 (i32.const 0))) (local.set 0x387 (i64.load offset=0x387 align=1 (i32.const 0))) (local.set 0x388 (i64.load offset=0x388 align=1 (i32.const 0))) (local.set 0x389 (i64.load offset=0x389 align=1 (i32.const 0))) (local.set 0x38a (i64.load offset=0x38a align=1 (i32.const 0))) (local.set 0x38b (i64.load offset=0x38b align=1 (i32.const 0))) (local.set 0x38c (i64.load offset=0x38c align=1 (i32.const 0))) (local.set 0x38d (i64.load offset=0x38d align=1 (i32.const 0))) (local.set 0x38e (i64.load offset=0x38e align=1 (i32.const 0))) (local.set 0x38f (i64.load offset=0x38f align=1 (i32.const 0))) (local.set 0x390 (i64.load offset=0x390 align=1 (i32.const 0))) (local.set 0x391 (i64.load offset=0x391 align=1 (i32.const 0))) (local.set 0x392 (i64.load offset=0x392 align=1 (i32.const 0))) (local.set 0x393 (i64.load offset=0x393 align=1 (i32.const 0))) (local.set 0x394 (i64.load offset=0x394 align=1 (i32.const 0))) (local.set 0x395 (i64.load offset=0x395 align=1 (i32.const 0))) (local.set 0x396 (i64.load offset=0x396 align=1 (i32.const 0))) (local.set 0x397 (i64.load offset=0x397 align=1 (i32.const 0))) (local.set 0x398 (i64.load offset=0x398 align=1 (i32.const 0))) (local.set 0x399 (i64.load offset=0x399 align=1 (i32.const 0))) (local.set 0x39a (i64.load offset=0x39a align=1 (i32.const 0))) (local.set 0x39b (i64.load offset=0x39b align=1 (i32.const 0))) (local.set 0x39c (i64.load offset=0x39c align=1 (i32.const 0))) (local.set 0x39d (i64.load offset=0x39d align=1 (i32.const 0))) (local.set 0x39e (i64.load offset=0x39e align=1 (i32.const 0))) (local.set 0x39f (i64.load offset=0x39f align=1 (i32.const 0))) (local.set 0x3a0 (i64.load offset=0x3a0 align=1 (i32.const 0))) (local.set 0x3a1 (i64.load offset=0x3a1 align=1 (i32.const 0))) (local.set 0x3a2 (i64.load offset=0x3a2 align=1 (i32.const 0))) (local.set 0x3a3 (i64.load offset=0x3a3 align=1 (i32.const 0))) (local.set 0x3a4 (i64.load offset=0x3a4 align=1 (i32.const 0))) (local.set 0x3a5 (i64.load offset=0x3a5 align=1 (i32.const 0))) (local.set 0x3a6 (i64.load offset=0x3a6 align=1 (i32.const 0))) (local.set 0x3a7 (i64.load offset=0x3a7 align=1 (i32.const 0))) (local.set 0x3a8 (i64.load offset=0x3a8 align=1 (i32.const 0))) (local.set 0x3a9 (i64.load offset=0x3a9 align=1 (i32.const 0))) (local.set 0x3aa (i64.load offset=0x3aa align=1 (i32.const 0))) (local.set 0x3ab (i64.load offset=0x3ab align=1 (i32.const 0))) (local.set 0x3ac (i64.load offset=0x3ac align=1 (i32.const 0))) (local.set 0x3ad (i64.load offset=0x3ad align=1 (i32.const 0))) (local.set 0x3ae (i64.load offset=0x3ae align=1 (i32.const 0))) (local.set 0x3af (i64.load offset=0x3af align=1 (i32.const 0))) (local.set 0x3b0 (i64.load offset=0x3b0 align=1 (i32.const 0))) (local.set 0x3b1 (i64.load offset=0x3b1 align=1 (i32.const 0))) (local.set 0x3b2 (i64.load offset=0x3b2 align=1 (i32.const 0))) (local.set 0x3b3 (i64.load offset=0x3b3 align=1 (i32.const 0))) (local.set 0x3b4 (i64.load offset=0x3b4 align=1 (i32.const 0))) (local.set 0x3b5 (i64.load offset=0x3b5 align=1 (i32.const 0))) (local.set 0x3b6 (i64.load offset=0x3b6 align=1 (i32.const 0))) (local.set 0x3b7 (i64.load offset=0x3b7 align=1 (i32.const 0))) (local.set 0x3b8 (i64.load offset=0x3b8 align=1 (i32.const 0))) (local.set 0x3b9 (i64.load offset=0x3b9 align=1 (i32.const 0))) (local.set 0x3ba (i64.load offset=0x3ba align=1 (i32.const 0))) (local.set 0x3bb (i64.load offset=0x3bb align=1 (i32.const 0))) (local.set 0x3bc (i64.load offset=0x3bc align=1 (i32.const 0))) (local.set 0x3bd (i64.load offset=0x3bd align=1 (i32.const 0))) (local.set 0x3be (i64.load offset=0x3be align=1 (i32.const 0))) (local.set 0x3bf (i64.load offset=0x3bf align=1 (i32.const 0))) (local.set 0x3c0 (i64.load offset=0x3c0 align=1 (i32.const 0))) (local.set 0x3c1 (i64.load offset=0x3c1 align=1 (i32.const 0))) (local.set 0x3c2 (i64.load offset=0x3c2 align=1 (i32.const 0))) (local.set 0x3c3 (i64.load offset=0x3c3 align=1 (i32.const 0))) (local.set 0x3c4 (i64.load offset=0x3c4 align=1 (i32.const 0))) (local.set 0x3c5 (i64.load offset=0x3c5 align=1 (i32.const 0))) (local.set 0x3c6 (i64.load offset=0x3c6 align=1 (i32.const 0))) (local.set 0x3c7 (i64.load offset=0x3c7 align=1 (i32.const 0))) (local.set 0x3c8 (i64.load offset=0x3c8 align=1 (i32.const 0))) (local.set 0x3c9 (i64.load offset=0x3c9 align=1 (i32.const 0))) (local.set 0x3ca (i64.load offset=0x3ca align=1 (i32.const 0))) (local.set 0x3cb (i64.load offset=0x3cb align=1 (i32.const 0))) (local.set 0x3cc (i64.load offset=0x3cc align=1 (i32.const 0))) (local.set 0x3cd (i64.load offset=0x3cd align=1 (i32.const 0))) (local.set 0x3ce (i64.load offset=0x3ce align=1 (i32.const 0))) (local.set 0x3cf (i64.load offset=0x3cf align=1 (i32.const 0))) (local.set 0x3d0 (i64.load offset=0x3d0 align=1 (i32.const 0))) (local.set 0x3d1 (i64.load offset=0x3d1 align=1 (i32.const 0))) (local.set 0x3d2 (i64.load offset=0x3d2 align=1 (i32.const 0))) (local.set 0x3d3 (i64.load offset=0x3d3 align=1 (i32.const 0))) (local.set 0x3d4 (i64.load offset=0x3d4 align=1 (i32.const 0))) (local.set 0x3d5 (i64.load offset=0x3d5 align=1 (i32.const 0))) (local.set 0x3d6 (i64.load offset=0x3d6 align=1 (i32.const 0))) (local.set 0x3d7 (i64.load offset=0x3d7 align=1 (i32.const 0))) (local.set 0x3d8 (i64.load offset=0x3d8 align=1 (i32.const 0))) (local.set 0x3d9 (i64.load offset=0x3d9 align=1 (i32.const 0))) (local.set 0x3da (i64.load offset=0x3da align=1 (i32.const 0))) (local.set 0x3db (i64.load offset=0x3db align=1 (i32.const 0))) (local.set 0x3dc (i64.load offset=0x3dc align=1 (i32.const 0))) (local.set 0x3dd (i64.load offset=0x3dd align=1 (i32.const 0))) (local.set 0x3de (i64.load offset=0x3de align=1 (i32.const 0))) (local.set 0x3df (i64.load offset=0x3df align=1 (i32.const 0))) (local.set 0x3e0 (i64.load offset=0x3e0 align=1 (i32.const 0))) (local.set 0x3e1 (i64.load offset=0x3e1 align=1 (i32.const 0))) (local.set 0x3e2 (i64.load offset=0x3e2 align=1 (i32.const 0))) (local.set 0x3e3 (i64.load offset=0x3e3 align=1 (i32.const 0))) (local.set 0x3e4 (i64.load offset=0x3e4 align=1 (i32.const 0))) (local.set 0x3e5 (i64.load offset=0x3e5 align=1 (i32.const 0))) (local.set 0x3e6 (i64.load offset=0x3e6 align=1 (i32.const 0))) (local.set 0x3e7 (i64.load offset=0x3e7 align=1 (i32.const 0))) (local.set 0x3e8 (i64.load offset=0x3e8 align=1 (i32.const 0))) (local.set 0x3e9 (i64.load offset=0x3e9 align=1 (i32.const 0))) (local.set 0x3ea (i64.load offset=0x3ea align=1 (i32.const 0))) (local.set 0x3eb (i64.load offset=0x3eb align=1 (i32.const 0))) (local.set 0x3ec (i64.load offset=0x3ec align=1 (i32.const 0))) (local.set 0x3ed (i64.load offset=0x3ed align=1 (i32.const 0))) (local.set 0x3ee (i64.load offset=0x3ee align=1 (i32.const 0))) (local.set 0x3ef (i64.load offset=0x3ef align=1 (i32.const 0))) (local.set 0x3f0 (i64.load offset=0x3f0 align=1 (i32.const 0))) (local.set 0x3f1 (i64.load offset=0x3f1 align=1 (i32.const 0))) (local.set 0x3f2 (i64.load offset=0x3f2 align=1 (i32.const 0))) (local.set 0x3f3 (i64.load offset=0x3f3 align=1 (i32.const 0))) (local.set 0x3f4 (i64.load offset=0x3f4 align=1 (i32.const 0))) (local.set 0x3f5 (i64.load offset=0x3f5 align=1 (i32.const 0))) (local.set 0x3f6 (i64.load offset=0x3f6 align=1 (i32.const 0))) (local.set 0x3f7 (i64.load offset=0x3f7 align=1 (i32.const 0))) (local.set 0x3f8 (i64.load offset=0x3f8 align=1 (i32.const 0))) (local.set 0x3f9 (i64.load offset=0x3f9 align=1 (i32.const 0))) (local.set 0x3fa (i64.load offset=0x3fa align=1 (i32.const 0))) (local.set 0x3fb (i64.load offset=0x3fb align=1 (i32.const 0))) (local.set 0x3fc (i64.load offset=0x3fc align=1 (i32.const 0))) (local.set 0x3fd (i64.load offset=0x3fd align=1 (i32.const 0))) (local.set 0x3fe (i64.load offset=0x3fe align=1 (i32.const 0))) (local.set 0x3ff (i64.load offset=0x3ff align=1 (i32.const 0))) (local.set 0x400 (i64.load offset=0x400 align=1 (i32.const 0))) (local.set 0x401 (i64.load offset=0x401 align=1 (i32.const 0))) (local.set 0x402 (i64.load offset=0x402 align=1 (i32.const 0))) (local.set 0x403 (i64.load offset=0x403 align=1 (i32.const 0))) (local.set 0x404 (i64.load offset=0x404 align=1 (i32.const 0))) (local.set 0x405 (i64.load offset=0x405 align=1 (i32.const 0))) (local.set 0x406 (i64.load offset=0x406 align=1 (i32.const 0))) (local.set 0x407 (i64.load offset=0x407 align=1 (i32.const 0))) (local.set 0x408 (i64.load offset=0x408 align=1 (i32.const 0))) (local.set 0x409 (i64.load offset=0x409 align=1 (i32.const 0))) (local.set 0x40a (i64.load offset=0x40a align=1 (i32.const 0))) (local.set 0x40b (i64.load offset=0x40b align=1 (i32.const 0))) (local.set 0x40c (i64.load offset=0x40c align=1 (i32.const 0))) (local.set 0x40d (i64.load offset=0x40d align=1 (i32.const 0))) (local.set 0x40e (i64.load offset=0x40e align=1 (i32.const 0))) (local.set 0x40f (i64.load offset=0x40f align=1 (i32.const 0))) (local.set 0x410 (i64.load offset=0x410 align=1 (i32.const 0))) (local.set 0x411 (i64.load offset=0x411 align=1 (i32.const 0))) (local.set 0x412 (i64.load offset=0x412 align=1 (i32.const 0))) (local.set 0x413 (i64.load offset=0x413 align=1 (i32.const 0))) (local.set 0x414 (i64.load offset=0x414 align=1 (i32.const 0))) (local.set 0x415 (i64.load offset=0x415 align=1 (i32.const 0))) (local.set 0x416 (i64.load offset=0x416 align=1 (i32.const 0))) (local.set 0x417 (i64.load offset=0x417 align=1 (i32.const 0))) (local.set 0x418 (i64.load offset=0x418 align=1 (i32.const 0))) (local.set 0x419 (i64.load offset=0x419 align=1 (i32.const 0))) (local.set 0x41a (i64.load offset=0x41a align=1 (i32.const 0))) (local.set 0x41b (i64.load offset=0x41b align=1 (i32.const 0))) (local.set 0x41c (i64.load offset=0x41c align=1 (i32.const 0))) (local.set 0x41d (i64.load offset=0x41d align=1 (i32.const 0))) (local.set 0x41e (i64.load offset=0x41e align=1 (i32.const 0))) (local.set 0x41f (i64.load offset=0x41f align=1 (i32.const 0))) ;; store the locals back to memory (i64.store offset=0x000 align=1 (i32.const 0) (local.get 0x000)) (i64.store offset=0x001 align=1 (i32.const 0) (local.get 0x001)) (i64.store offset=0x002 align=1 (i32.const 0) (local.get 0x002)) (i64.store offset=0x003 align=1 (i32.const 0) (local.get 0x003)) (i64.store offset=0x004 align=1 (i32.const 0) (local.get 0x004)) (i64.store offset=0x005 align=1 (i32.const 0) (local.get 0x005)) (i64.store offset=0x006 align=1 (i32.const 0) (local.get 0x006)) (i64.store offset=0x007 align=1 (i32.const 0) (local.get 0x007)) (i64.store offset=0x008 align=1 (i32.const 0) (local.get 0x008)) (i64.store offset=0x009 align=1 (i32.const 0) (local.get 0x009)) (i64.store offset=0x00a align=1 (i32.const 0) (local.get 0x00a)) (i64.store offset=0x00b align=1 (i32.const 0) (local.get 0x00b)) (i64.store offset=0x00c align=1 (i32.const 0) (local.get 0x00c)) (i64.store offset=0x00d align=1 (i32.const 0) (local.get 0x00d)) (i64.store offset=0x00e align=1 (i32.const 0) (local.get 0x00e)) (i64.store offset=0x00f align=1 (i32.const 0) (local.get 0x00f)) (i64.store offset=0x010 align=1 (i32.const 0) (local.get 0x010)) (i64.store offset=0x011 align=1 (i32.const 0) (local.get 0x011)) (i64.store offset=0x012 align=1 (i32.const 0) (local.get 0x012)) (i64.store offset=0x013 align=1 (i32.const 0) (local.get 0x013)) (i64.store offset=0x014 align=1 (i32.const 0) (local.get 0x014)) (i64.store offset=0x015 align=1 (i32.const 0) (local.get 0x015)) (i64.store offset=0x016 align=1 (i32.const 0) (local.get 0x016)) (i64.store offset=0x017 align=1 (i32.const 0) (local.get 0x017)) (i64.store offset=0x018 align=1 (i32.const 0) (local.get 0x018)) (i64.store offset=0x019 align=1 (i32.const 0) (local.get 0x019)) (i64.store offset=0x01a align=1 (i32.const 0) (local.get 0x01a)) (i64.store offset=0x01b align=1 (i32.const 0) (local.get 0x01b)) (i64.store offset=0x01c align=1 (i32.const 0) (local.get 0x01c)) (i64.store offset=0x01d align=1 (i32.const 0) (local.get 0x01d)) (i64.store offset=0x01e align=1 (i32.const 0) (local.get 0x01e)) (i64.store offset=0x01f align=1 (i32.const 0) (local.get 0x01f)) (i64.store offset=0x020 align=1 (i32.const 0) (local.get 0x020)) (i64.store offset=0x021 align=1 (i32.const 0) (local.get 0x021)) (i64.store offset=0x022 align=1 (i32.const 0) (local.get 0x022)) (i64.store offset=0x023 align=1 (i32.const 0) (local.get 0x023)) (i64.store offset=0x024 align=1 (i32.const 0) (local.get 0x024)) (i64.store offset=0x025 align=1 (i32.const 0) (local.get 0x025)) (i64.store offset=0x026 align=1 (i32.const 0) (local.get 0x026)) (i64.store offset=0x027 align=1 (i32.const 0) (local.get 0x027)) (i64.store offset=0x028 align=1 (i32.const 0) (local.get 0x028)) (i64.store offset=0x029 align=1 (i32.const 0) (local.get 0x029)) (i64.store offset=0x02a align=1 (i32.const 0) (local.get 0x02a)) (i64.store offset=0x02b align=1 (i32.const 0) (local.get 0x02b)) (i64.store offset=0x02c align=1 (i32.const 0) (local.get 0x02c)) (i64.store offset=0x02d align=1 (i32.const 0) (local.get 0x02d)) (i64.store offset=0x02e align=1 (i32.const 0) (local.get 0x02e)) (i64.store offset=0x02f align=1 (i32.const 0) (local.get 0x02f)) (i64.store offset=0x030 align=1 (i32.const 0) (local.get 0x030)) (i64.store offset=0x031 align=1 (i32.const 0) (local.get 0x031)) (i64.store offset=0x032 align=1 (i32.const 0) (local.get 0x032)) (i64.store offset=0x033 align=1 (i32.const 0) (local.get 0x033)) (i64.store offset=0x034 align=1 (i32.const 0) (local.get 0x034)) (i64.store offset=0x035 align=1 (i32.const 0) (local.get 0x035)) (i64.store offset=0x036 align=1 (i32.const 0) (local.get 0x036)) (i64.store offset=0x037 align=1 (i32.const 0) (local.get 0x037)) (i64.store offset=0x038 align=1 (i32.const 0) (local.get 0x038)) (i64.store offset=0x039 align=1 (i32.const 0) (local.get 0x039)) (i64.store offset=0x03a align=1 (i32.const 0) (local.get 0x03a)) (i64.store offset=0x03b align=1 (i32.const 0) (local.get 0x03b)) (i64.store offset=0x03c align=1 (i32.const 0) (local.get 0x03c)) (i64.store offset=0x03d align=1 (i32.const 0) (local.get 0x03d)) (i64.store offset=0x03e align=1 (i32.const 0) (local.get 0x03e)) (i64.store offset=0x03f align=1 (i32.const 0) (local.get 0x03f)) (i64.store offset=0x040 align=1 (i32.const 0) (local.get 0x040)) (i64.store offset=0x041 align=1 (i32.const 0) (local.get 0x041)) (i64.store offset=0x042 align=1 (i32.const 0) (local.get 0x042)) (i64.store offset=0x043 align=1 (i32.const 0) (local.get 0x043)) (i64.store offset=0x044 align=1 (i32.const 0) (local.get 0x044)) (i64.store offset=0x045 align=1 (i32.const 0) (local.get 0x045)) (i64.store offset=0x046 align=1 (i32.const 0) (local.get 0x046)) (i64.store offset=0x047 align=1 (i32.const 0) (local.get 0x047)) (i64.store offset=0x048 align=1 (i32.const 0) (local.get 0x048)) (i64.store offset=0x049 align=1 (i32.const 0) (local.get 0x049)) (i64.store offset=0x04a align=1 (i32.const 0) (local.get 0x04a)) (i64.store offset=0x04b align=1 (i32.const 0) (local.get 0x04b)) (i64.store offset=0x04c align=1 (i32.const 0) (local.get 0x04c)) (i64.store offset=0x04d align=1 (i32.const 0) (local.get 0x04d)) (i64.store offset=0x04e align=1 (i32.const 0) (local.get 0x04e)) (i64.store offset=0x04f align=1 (i32.const 0) (local.get 0x04f)) (i64.store offset=0x050 align=1 (i32.const 0) (local.get 0x050)) (i64.store offset=0x051 align=1 (i32.const 0) (local.get 0x051)) (i64.store offset=0x052 align=1 (i32.const 0) (local.get 0x052)) (i64.store offset=0x053 align=1 (i32.const 0) (local.get 0x053)) (i64.store offset=0x054 align=1 (i32.const 0) (local.get 0x054)) (i64.store offset=0x055 align=1 (i32.const 0) (local.get 0x055)) (i64.store offset=0x056 align=1 (i32.const 0) (local.get 0x056)) (i64.store offset=0x057 align=1 (i32.const 0) (local.get 0x057)) (i64.store offset=0x058 align=1 (i32.const 0) (local.get 0x058)) (i64.store offset=0x059 align=1 (i32.const 0) (local.get 0x059)) (i64.store offset=0x05a align=1 (i32.const 0) (local.get 0x05a)) (i64.store offset=0x05b align=1 (i32.const 0) (local.get 0x05b)) (i64.store offset=0x05c align=1 (i32.const 0) (local.get 0x05c)) (i64.store offset=0x05d align=1 (i32.const 0) (local.get 0x05d)) (i64.store offset=0x05e align=1 (i32.const 0) (local.get 0x05e)) (i64.store offset=0x05f align=1 (i32.const 0) (local.get 0x05f)) (i64.store offset=0x060 align=1 (i32.const 0) (local.get 0x060)) (i64.store offset=0x061 align=1 (i32.const 0) (local.get 0x061)) (i64.store offset=0x062 align=1 (i32.const 0) (local.get 0x062)) (i64.store offset=0x063 align=1 (i32.const 0) (local.get 0x063)) (i64.store offset=0x064 align=1 (i32.const 0) (local.get 0x064)) (i64.store offset=0x065 align=1 (i32.const 0) (local.get 0x065)) (i64.store offset=0x066 align=1 (i32.const 0) (local.get 0x066)) (i64.store offset=0x067 align=1 (i32.const 0) (local.get 0x067)) (i64.store offset=0x068 align=1 (i32.const 0) (local.get 0x068)) (i64.store offset=0x069 align=1 (i32.const 0) (local.get 0x069)) (i64.store offset=0x06a align=1 (i32.const 0) (local.get 0x06a)) (i64.store offset=0x06b align=1 (i32.const 0) (local.get 0x06b)) (i64.store offset=0x06c align=1 (i32.const 0) (local.get 0x06c)) (i64.store offset=0x06d align=1 (i32.const 0) (local.get 0x06d)) (i64.store offset=0x06e align=1 (i32.const 0) (local.get 0x06e)) (i64.store offset=0x06f align=1 (i32.const 0) (local.get 0x06f)) (i64.store offset=0x070 align=1 (i32.const 0) (local.get 0x070)) (i64.store offset=0x071 align=1 (i32.const 0) (local.get 0x071)) (i64.store offset=0x072 align=1 (i32.const 0) (local.get 0x072)) (i64.store offset=0x073 align=1 (i32.const 0) (local.get 0x073)) (i64.store offset=0x074 align=1 (i32.const 0) (local.get 0x074)) (i64.store offset=0x075 align=1 (i32.const 0) (local.get 0x075)) (i64.store offset=0x076 align=1 (i32.const 0) (local.get 0x076)) (i64.store offset=0x077 align=1 (i32.const 0) (local.get 0x077)) (i64.store offset=0x078 align=1 (i32.const 0) (local.get 0x078)) (i64.store offset=0x079 align=1 (i32.const 0) (local.get 0x079)) (i64.store offset=0x07a align=1 (i32.const 0) (local.get 0x07a)) (i64.store offset=0x07b align=1 (i32.const 0) (local.get 0x07b)) (i64.store offset=0x07c align=1 (i32.const 0) (local.get 0x07c)) (i64.store offset=0x07d align=1 (i32.const 0) (local.get 0x07d)) (i64.store offset=0x07e align=1 (i32.const 0) (local.get 0x07e)) (i64.store offset=0x07f align=1 (i32.const 0) (local.get 0x07f)) (i64.store offset=0x080 align=1 (i32.const 0) (local.get 0x080)) (i64.store offset=0x081 align=1 (i32.const 0) (local.get 0x081)) (i64.store offset=0x082 align=1 (i32.const 0) (local.get 0x082)) (i64.store offset=0x083 align=1 (i32.const 0) (local.get 0x083)) (i64.store offset=0x084 align=1 (i32.const 0) (local.get 0x084)) (i64.store offset=0x085 align=1 (i32.const 0) (local.get 0x085)) (i64.store offset=0x086 align=1 (i32.const 0) (local.get 0x086)) (i64.store offset=0x087 align=1 (i32.const 0) (local.get 0x087)) (i64.store offset=0x088 align=1 (i32.const 0) (local.get 0x088)) (i64.store offset=0x089 align=1 (i32.const 0) (local.get 0x089)) (i64.store offset=0x08a align=1 (i32.const 0) (local.get 0x08a)) (i64.store offset=0x08b align=1 (i32.const 0) (local.get 0x08b)) (i64.store offset=0x08c align=1 (i32.const 0) (local.get 0x08c)) (i64.store offset=0x08d align=1 (i32.const 0) (local.get 0x08d)) (i64.store offset=0x08e align=1 (i32.const 0) (local.get 0x08e)) (i64.store offset=0x08f align=1 (i32.const 0) (local.get 0x08f)) (i64.store offset=0x090 align=1 (i32.const 0) (local.get 0x090)) (i64.store offset=0x091 align=1 (i32.const 0) (local.get 0x091)) (i64.store offset=0x092 align=1 (i32.const 0) (local.get 0x092)) (i64.store offset=0x093 align=1 (i32.const 0) (local.get 0x093)) (i64.store offset=0x094 align=1 (i32.const 0) (local.get 0x094)) (i64.store offset=0x095 align=1 (i32.const 0) (local.get 0x095)) (i64.store offset=0x096 align=1 (i32.const 0) (local.get 0x096)) (i64.store offset=0x097 align=1 (i32.const 0) (local.get 0x097)) (i64.store offset=0x098 align=1 (i32.const 0) (local.get 0x098)) (i64.store offset=0x099 align=1 (i32.const 0) (local.get 0x099)) (i64.store offset=0x09a align=1 (i32.const 0) (local.get 0x09a)) (i64.store offset=0x09b align=1 (i32.const 0) (local.get 0x09b)) (i64.store offset=0x09c align=1 (i32.const 0) (local.get 0x09c)) (i64.store offset=0x09d align=1 (i32.const 0) (local.get 0x09d)) (i64.store offset=0x09e align=1 (i32.const 0) (local.get 0x09e)) (i64.store offset=0x09f align=1 (i32.const 0) (local.get 0x09f)) (i64.store offset=0x0a0 align=1 (i32.const 0) (local.get 0x0a0)) (i64.store offset=0x0a1 align=1 (i32.const 0) (local.get 0x0a1)) (i64.store offset=0x0a2 align=1 (i32.const 0) (local.get 0x0a2)) (i64.store offset=0x0a3 align=1 (i32.const 0) (local.get 0x0a3)) (i64.store offset=0x0a4 align=1 (i32.const 0) (local.get 0x0a4)) (i64.store offset=0x0a5 align=1 (i32.const 0) (local.get 0x0a5)) (i64.store offset=0x0a6 align=1 (i32.const 0) (local.get 0x0a6)) (i64.store offset=0x0a7 align=1 (i32.const 0) (local.get 0x0a7)) (i64.store offset=0x0a8 align=1 (i32.const 0) (local.get 0x0a8)) (i64.store offset=0x0a9 align=1 (i32.const 0) (local.get 0x0a9)) (i64.store offset=0x0aa align=1 (i32.const 0) (local.get 0x0aa)) (i64.store offset=0x0ab align=1 (i32.const 0) (local.get 0x0ab)) (i64.store offset=0x0ac align=1 (i32.const 0) (local.get 0x0ac)) (i64.store offset=0x0ad align=1 (i32.const 0) (local.get 0x0ad)) (i64.store offset=0x0ae align=1 (i32.const 0) (local.get 0x0ae)) (i64.store offset=0x0af align=1 (i32.const 0) (local.get 0x0af)) (i64.store offset=0x0b0 align=1 (i32.const 0) (local.get 0x0b0)) (i64.store offset=0x0b1 align=1 (i32.const 0) (local.get 0x0b1)) (i64.store offset=0x0b2 align=1 (i32.const 0) (local.get 0x0b2)) (i64.store offset=0x0b3 align=1 (i32.const 0) (local.get 0x0b3)) (i64.store offset=0x0b4 align=1 (i32.const 0) (local.get 0x0b4)) (i64.store offset=0x0b5 align=1 (i32.const 0) (local.get 0x0b5)) (i64.store offset=0x0b6 align=1 (i32.const 0) (local.get 0x0b6)) (i64.store offset=0x0b7 align=1 (i32.const 0) (local.get 0x0b7)) (i64.store offset=0x0b8 align=1 (i32.const 0) (local.get 0x0b8)) (i64.store offset=0x0b9 align=1 (i32.const 0) (local.get 0x0b9)) (i64.store offset=0x0ba align=1 (i32.const 0) (local.get 0x0ba)) (i64.store offset=0x0bb align=1 (i32.const 0) (local.get 0x0bb)) (i64.store offset=0x0bc align=1 (i32.const 0) (local.get 0x0bc)) (i64.store offset=0x0bd align=1 (i32.const 0) (local.get 0x0bd)) (i64.store offset=0x0be align=1 (i32.const 0) (local.get 0x0be)) (i64.store offset=0x0bf align=1 (i32.const 0) (local.get 0x0bf)) (i64.store offset=0x0c0 align=1 (i32.const 0) (local.get 0x0c0)) (i64.store offset=0x0c1 align=1 (i32.const 0) (local.get 0x0c1)) (i64.store offset=0x0c2 align=1 (i32.const 0) (local.get 0x0c2)) (i64.store offset=0x0c3 align=1 (i32.const 0) (local.get 0x0c3)) (i64.store offset=0x0c4 align=1 (i32.const 0) (local.get 0x0c4)) (i64.store offset=0x0c5 align=1 (i32.const 0) (local.get 0x0c5)) (i64.store offset=0x0c6 align=1 (i32.const 0) (local.get 0x0c6)) (i64.store offset=0x0c7 align=1 (i32.const 0) (local.get 0x0c7)) (i64.store offset=0x0c8 align=1 (i32.const 0) (local.get 0x0c8)) (i64.store offset=0x0c9 align=1 (i32.const 0) (local.get 0x0c9)) (i64.store offset=0x0ca align=1 (i32.const 0) (local.get 0x0ca)) (i64.store offset=0x0cb align=1 (i32.const 0) (local.get 0x0cb)) (i64.store offset=0x0cc align=1 (i32.const 0) (local.get 0x0cc)) (i64.store offset=0x0cd align=1 (i32.const 0) (local.get 0x0cd)) (i64.store offset=0x0ce align=1 (i32.const 0) (local.get 0x0ce)) (i64.store offset=0x0cf align=1 (i32.const 0) (local.get 0x0cf)) (i64.store offset=0x0d0 align=1 (i32.const 0) (local.get 0x0d0)) (i64.store offset=0x0d1 align=1 (i32.const 0) (local.get 0x0d1)) (i64.store offset=0x0d2 align=1 (i32.const 0) (local.get 0x0d2)) (i64.store offset=0x0d3 align=1 (i32.const 0) (local.get 0x0d3)) (i64.store offset=0x0d4 align=1 (i32.const 0) (local.get 0x0d4)) (i64.store offset=0x0d5 align=1 (i32.const 0) (local.get 0x0d5)) (i64.store offset=0x0d6 align=1 (i32.const 0) (local.get 0x0d6)) (i64.store offset=0x0d7 align=1 (i32.const 0) (local.get 0x0d7)) (i64.store offset=0x0d8 align=1 (i32.const 0) (local.get 0x0d8)) (i64.store offset=0x0d9 align=1 (i32.const 0) (local.get 0x0d9)) (i64.store offset=0x0da align=1 (i32.const 0) (local.get 0x0da)) (i64.store offset=0x0db align=1 (i32.const 0) (local.get 0x0db)) (i64.store offset=0x0dc align=1 (i32.const 0) (local.get 0x0dc)) (i64.store offset=0x0dd align=1 (i32.const 0) (local.get 0x0dd)) (i64.store offset=0x0de align=1 (i32.const 0) (local.get 0x0de)) (i64.store offset=0x0df align=1 (i32.const 0) (local.get 0x0df)) (i64.store offset=0x0e0 align=1 (i32.const 0) (local.get 0x0e0)) (i64.store offset=0x0e1 align=1 (i32.const 0) (local.get 0x0e1)) (i64.store offset=0x0e2 align=1 (i32.const 0) (local.get 0x0e2)) (i64.store offset=0x0e3 align=1 (i32.const 0) (local.get 0x0e3)) (i64.store offset=0x0e4 align=1 (i32.const 0) (local.get 0x0e4)) (i64.store offset=0x0e5 align=1 (i32.const 0) (local.get 0x0e5)) (i64.store offset=0x0e6 align=1 (i32.const 0) (local.get 0x0e6)) (i64.store offset=0x0e7 align=1 (i32.const 0) (local.get 0x0e7)) (i64.store offset=0x0e8 align=1 (i32.const 0) (local.get 0x0e8)) (i64.store offset=0x0e9 align=1 (i32.const 0) (local.get 0x0e9)) (i64.store offset=0x0ea align=1 (i32.const 0) (local.get 0x0ea)) (i64.store offset=0x0eb align=1 (i32.const 0) (local.get 0x0eb)) (i64.store offset=0x0ec align=1 (i32.const 0) (local.get 0x0ec)) (i64.store offset=0x0ed align=1 (i32.const 0) (local.get 0x0ed)) (i64.store offset=0x0ee align=1 (i32.const 0) (local.get 0x0ee)) (i64.store offset=0x0ef align=1 (i32.const 0) (local.get 0x0ef)) (i64.store offset=0x0f0 align=1 (i32.const 0) (local.get 0x0f0)) (i64.store offset=0x0f1 align=1 (i32.const 0) (local.get 0x0f1)) (i64.store offset=0x0f2 align=1 (i32.const 0) (local.get 0x0f2)) (i64.store offset=0x0f3 align=1 (i32.const 0) (local.get 0x0f3)) (i64.store offset=0x0f4 align=1 (i32.const 0) (local.get 0x0f4)) (i64.store offset=0x0f5 align=1 (i32.const 0) (local.get 0x0f5)) (i64.store offset=0x0f6 align=1 (i32.const 0) (local.get 0x0f6)) (i64.store offset=0x0f7 align=1 (i32.const 0) (local.get 0x0f7)) (i64.store offset=0x0f8 align=1 (i32.const 0) (local.get 0x0f8)) (i64.store offset=0x0f9 align=1 (i32.const 0) (local.get 0x0f9)) (i64.store offset=0x0fa align=1 (i32.const 0) (local.get 0x0fa)) (i64.store offset=0x0fb align=1 (i32.const 0) (local.get 0x0fb)) (i64.store offset=0x0fc align=1 (i32.const 0) (local.get 0x0fc)) (i64.store offset=0x0fd align=1 (i32.const 0) (local.get 0x0fd)) (i64.store offset=0x0fe align=1 (i32.const 0) (local.get 0x0fe)) (i64.store offset=0x0ff align=1 (i32.const 0) (local.get 0x0ff)) (i64.store offset=0x100 align=1 (i32.const 0) (local.get 0x100)) (i64.store offset=0x101 align=1 (i32.const 0) (local.get 0x101)) (i64.store offset=0x102 align=1 (i32.const 0) (local.get 0x102)) (i64.store offset=0x103 align=1 (i32.const 0) (local.get 0x103)) (i64.store offset=0x104 align=1 (i32.const 0) (local.get 0x104)) (i64.store offset=0x105 align=1 (i32.const 0) (local.get 0x105)) (i64.store offset=0x106 align=1 (i32.const 0) (local.get 0x106)) (i64.store offset=0x107 align=1 (i32.const 0) (local.get 0x107)) (i64.store offset=0x108 align=1 (i32.const 0) (local.get 0x108)) (i64.store offset=0x109 align=1 (i32.const 0) (local.get 0x109)) (i64.store offset=0x10a align=1 (i32.const 0) (local.get 0x10a)) (i64.store offset=0x10b align=1 (i32.const 0) (local.get 0x10b)) (i64.store offset=0x10c align=1 (i32.const 0) (local.get 0x10c)) (i64.store offset=0x10d align=1 (i32.const 0) (local.get 0x10d)) (i64.store offset=0x10e align=1 (i32.const 0) (local.get 0x10e)) (i64.store offset=0x10f align=1 (i32.const 0) (local.get 0x10f)) (i64.store offset=0x110 align=1 (i32.const 0) (local.get 0x110)) (i64.store offset=0x111 align=1 (i32.const 0) (local.get 0x111)) (i64.store offset=0x112 align=1 (i32.const 0) (local.get 0x112)) (i64.store offset=0x113 align=1 (i32.const 0) (local.get 0x113)) (i64.store offset=0x114 align=1 (i32.const 0) (local.get 0x114)) (i64.store offset=0x115 align=1 (i32.const 0) (local.get 0x115)) (i64.store offset=0x116 align=1 (i32.const 0) (local.get 0x116)) (i64.store offset=0x117 align=1 (i32.const 0) (local.get 0x117)) (i64.store offset=0x118 align=1 (i32.const 0) (local.get 0x118)) (i64.store offset=0x119 align=1 (i32.const 0) (local.get 0x119)) (i64.store offset=0x11a align=1 (i32.const 0) (local.get 0x11a)) (i64.store offset=0x11b align=1 (i32.const 0) (local.get 0x11b)) (i64.store offset=0x11c align=1 (i32.const 0) (local.get 0x11c)) (i64.store offset=0x11d align=1 (i32.const 0) (local.get 0x11d)) (i64.store offset=0x11e align=1 (i32.const 0) (local.get 0x11e)) (i64.store offset=0x11f align=1 (i32.const 0) (local.get 0x11f)) (i64.store offset=0x120 align=1 (i32.const 0) (local.get 0x120)) (i64.store offset=0x121 align=1 (i32.const 0) (local.get 0x121)) (i64.store offset=0x122 align=1 (i32.const 0) (local.get 0x122)) (i64.store offset=0x123 align=1 (i32.const 0) (local.get 0x123)) (i64.store offset=0x124 align=1 (i32.const 0) (local.get 0x124)) (i64.store offset=0x125 align=1 (i32.const 0) (local.get 0x125)) (i64.store offset=0x126 align=1 (i32.const 0) (local.get 0x126)) (i64.store offset=0x127 align=1 (i32.const 0) (local.get 0x127)) (i64.store offset=0x128 align=1 (i32.const 0) (local.get 0x128)) (i64.store offset=0x129 align=1 (i32.const 0) (local.get 0x129)) (i64.store offset=0x12a align=1 (i32.const 0) (local.get 0x12a)) (i64.store offset=0x12b align=1 (i32.const 0) (local.get 0x12b)) (i64.store offset=0x12c align=1 (i32.const 0) (local.get 0x12c)) (i64.store offset=0x12d align=1 (i32.const 0) (local.get 0x12d)) (i64.store offset=0x12e align=1 (i32.const 0) (local.get 0x12e)) (i64.store offset=0x12f align=1 (i32.const 0) (local.get 0x12f)) (i64.store offset=0x130 align=1 (i32.const 0) (local.get 0x130)) (i64.store offset=0x131 align=1 (i32.const 0) (local.get 0x131)) (i64.store offset=0x132 align=1 (i32.const 0) (local.get 0x132)) (i64.store offset=0x133 align=1 (i32.const 0) (local.get 0x133)) (i64.store offset=0x134 align=1 (i32.const 0) (local.get 0x134)) (i64.store offset=0x135 align=1 (i32.const 0) (local.get 0x135)) (i64.store offset=0x136 align=1 (i32.const 0) (local.get 0x136)) (i64.store offset=0x137 align=1 (i32.const 0) (local.get 0x137)) (i64.store offset=0x138 align=1 (i32.const 0) (local.get 0x138)) (i64.store offset=0x139 align=1 (i32.const 0) (local.get 0x139)) (i64.store offset=0x13a align=1 (i32.const 0) (local.get 0x13a)) (i64.store offset=0x13b align=1 (i32.const 0) (local.get 0x13b)) (i64.store offset=0x13c align=1 (i32.const 0) (local.get 0x13c)) (i64.store offset=0x13d align=1 (i32.const 0) (local.get 0x13d)) (i64.store offset=0x13e align=1 (i32.const 0) (local.get 0x13e)) (i64.store offset=0x13f align=1 (i32.const 0) (local.get 0x13f)) (i64.store offset=0x140 align=1 (i32.const 0) (local.get 0x140)) (i64.store offset=0x141 align=1 (i32.const 0) (local.get 0x141)) (i64.store offset=0x142 align=1 (i32.const 0) (local.get 0x142)) (i64.store offset=0x143 align=1 (i32.const 0) (local.get 0x143)) (i64.store offset=0x144 align=1 (i32.const 0) (local.get 0x144)) (i64.store offset=0x145 align=1 (i32.const 0) (local.get 0x145)) (i64.store offset=0x146 align=1 (i32.const 0) (local.get 0x146)) (i64.store offset=0x147 align=1 (i32.const 0) (local.get 0x147)) (i64.store offset=0x148 align=1 (i32.const 0) (local.get 0x148)) (i64.store offset=0x149 align=1 (i32.const 0) (local.get 0x149)) (i64.store offset=0x14a align=1 (i32.const 0) (local.get 0x14a)) (i64.store offset=0x14b align=1 (i32.const 0) (local.get 0x14b)) (i64.store offset=0x14c align=1 (i32.const 0) (local.get 0x14c)) (i64.store offset=0x14d align=1 (i32.const 0) (local.get 0x14d)) (i64.store offset=0x14e align=1 (i32.const 0) (local.get 0x14e)) (i64.store offset=0x14f align=1 (i32.const 0) (local.get 0x14f)) (i64.store offset=0x150 align=1 (i32.const 0) (local.get 0x150)) (i64.store offset=0x151 align=1 (i32.const 0) (local.get 0x151)) (i64.store offset=0x152 align=1 (i32.const 0) (local.get 0x152)) (i64.store offset=0x153 align=1 (i32.const 0) (local.get 0x153)) (i64.store offset=0x154 align=1 (i32.const 0) (local.get 0x154)) (i64.store offset=0x155 align=1 (i32.const 0) (local.get 0x155)) (i64.store offset=0x156 align=1 (i32.const 0) (local.get 0x156)) (i64.store offset=0x157 align=1 (i32.const 0) (local.get 0x157)) (i64.store offset=0x158 align=1 (i32.const 0) (local.get 0x158)) (i64.store offset=0x159 align=1 (i32.const 0) (local.get 0x159)) (i64.store offset=0x15a align=1 (i32.const 0) (local.get 0x15a)) (i64.store offset=0x15b align=1 (i32.const 0) (local.get 0x15b)) (i64.store offset=0x15c align=1 (i32.const 0) (local.get 0x15c)) (i64.store offset=0x15d align=1 (i32.const 0) (local.get 0x15d)) (i64.store offset=0x15e align=1 (i32.const 0) (local.get 0x15e)) (i64.store offset=0x15f align=1 (i32.const 0) (local.get 0x15f)) (i64.store offset=0x160 align=1 (i32.const 0) (local.get 0x160)) (i64.store offset=0x161 align=1 (i32.const 0) (local.get 0x161)) (i64.store offset=0x162 align=1 (i32.const 0) (local.get 0x162)) (i64.store offset=0x163 align=1 (i32.const 0) (local.get 0x163)) (i64.store offset=0x164 align=1 (i32.const 0) (local.get 0x164)) (i64.store offset=0x165 align=1 (i32.const 0) (local.get 0x165)) (i64.store offset=0x166 align=1 (i32.const 0) (local.get 0x166)) (i64.store offset=0x167 align=1 (i32.const 0) (local.get 0x167)) (i64.store offset=0x168 align=1 (i32.const 0) (local.get 0x168)) (i64.store offset=0x169 align=1 (i32.const 0) (local.get 0x169)) (i64.store offset=0x16a align=1 (i32.const 0) (local.get 0x16a)) (i64.store offset=0x16b align=1 (i32.const 0) (local.get 0x16b)) (i64.store offset=0x16c align=1 (i32.const 0) (local.get 0x16c)) (i64.store offset=0x16d align=1 (i32.const 0) (local.get 0x16d)) (i64.store offset=0x16e align=1 (i32.const 0) (local.get 0x16e)) (i64.store offset=0x16f align=1 (i32.const 0) (local.get 0x16f)) (i64.store offset=0x170 align=1 (i32.const 0) (local.get 0x170)) (i64.store offset=0x171 align=1 (i32.const 0) (local.get 0x171)) (i64.store offset=0x172 align=1 (i32.const 0) (local.get 0x172)) (i64.store offset=0x173 align=1 (i32.const 0) (local.get 0x173)) (i64.store offset=0x174 align=1 (i32.const 0) (local.get 0x174)) (i64.store offset=0x175 align=1 (i32.const 0) (local.get 0x175)) (i64.store offset=0x176 align=1 (i32.const 0) (local.get 0x176)) (i64.store offset=0x177 align=1 (i32.const 0) (local.get 0x177)) (i64.store offset=0x178 align=1 (i32.const 0) (local.get 0x178)) (i64.store offset=0x179 align=1 (i32.const 0) (local.get 0x179)) (i64.store offset=0x17a align=1 (i32.const 0) (local.get 0x17a)) (i64.store offset=0x17b align=1 (i32.const 0) (local.get 0x17b)) (i64.store offset=0x17c align=1 (i32.const 0) (local.get 0x17c)) (i64.store offset=0x17d align=1 (i32.const 0) (local.get 0x17d)) (i64.store offset=0x17e align=1 (i32.const 0) (local.get 0x17e)) (i64.store offset=0x17f align=1 (i32.const 0) (local.get 0x17f)) (i64.store offset=0x180 align=1 (i32.const 0) (local.get 0x180)) (i64.store offset=0x181 align=1 (i32.const 0) (local.get 0x181)) (i64.store offset=0x182 align=1 (i32.const 0) (local.get 0x182)) (i64.store offset=0x183 align=1 (i32.const 0) (local.get 0x183)) (i64.store offset=0x184 align=1 (i32.const 0) (local.get 0x184)) (i64.store offset=0x185 align=1 (i32.const 0) (local.get 0x185)) (i64.store offset=0x186 align=1 (i32.const 0) (local.get 0x186)) (i64.store offset=0x187 align=1 (i32.const 0) (local.get 0x187)) (i64.store offset=0x188 align=1 (i32.const 0) (local.get 0x188)) (i64.store offset=0x189 align=1 (i32.const 0) (local.get 0x189)) (i64.store offset=0x18a align=1 (i32.const 0) (local.get 0x18a)) (i64.store offset=0x18b align=1 (i32.const 0) (local.get 0x18b)) (i64.store offset=0x18c align=1 (i32.const 0) (local.get 0x18c)) (i64.store offset=0x18d align=1 (i32.const 0) (local.get 0x18d)) (i64.store offset=0x18e align=1 (i32.const 0) (local.get 0x18e)) (i64.store offset=0x18f align=1 (i32.const 0) (local.get 0x18f)) (i64.store offset=0x190 align=1 (i32.const 0) (local.get 0x190)) (i64.store offset=0x191 align=1 (i32.const 0) (local.get 0x191)) (i64.store offset=0x192 align=1 (i32.const 0) (local.get 0x192)) (i64.store offset=0x193 align=1 (i32.const 0) (local.get 0x193)) (i64.store offset=0x194 align=1 (i32.const 0) (local.get 0x194)) (i64.store offset=0x195 align=1 (i32.const 0) (local.get 0x195)) (i64.store offset=0x196 align=1 (i32.const 0) (local.get 0x196)) (i64.store offset=0x197 align=1 (i32.const 0) (local.get 0x197)) (i64.store offset=0x198 align=1 (i32.const 0) (local.get 0x198)) (i64.store offset=0x199 align=1 (i32.const 0) (local.get 0x199)) (i64.store offset=0x19a align=1 (i32.const 0) (local.get 0x19a)) (i64.store offset=0x19b align=1 (i32.const 0) (local.get 0x19b)) (i64.store offset=0x19c align=1 (i32.const 0) (local.get 0x19c)) (i64.store offset=0x19d align=1 (i32.const 0) (local.get 0x19d)) (i64.store offset=0x19e align=1 (i32.const 0) (local.get 0x19e)) (i64.store offset=0x19f align=1 (i32.const 0) (local.get 0x19f)) (i64.store offset=0x1a0 align=1 (i32.const 0) (local.get 0x1a0)) (i64.store offset=0x1a1 align=1 (i32.const 0) (local.get 0x1a1)) (i64.store offset=0x1a2 align=1 (i32.const 0) (local.get 0x1a2)) (i64.store offset=0x1a3 align=1 (i32.const 0) (local.get 0x1a3)) (i64.store offset=0x1a4 align=1 (i32.const 0) (local.get 0x1a4)) (i64.store offset=0x1a5 align=1 (i32.const 0) (local.get 0x1a5)) (i64.store offset=0x1a6 align=1 (i32.const 0) (local.get 0x1a6)) (i64.store offset=0x1a7 align=1 (i32.const 0) (local.get 0x1a7)) (i64.store offset=0x1a8 align=1 (i32.const 0) (local.get 0x1a8)) (i64.store offset=0x1a9 align=1 (i32.const 0) (local.get 0x1a9)) (i64.store offset=0x1aa align=1 (i32.const 0) (local.get 0x1aa)) (i64.store offset=0x1ab align=1 (i32.const 0) (local.get 0x1ab)) (i64.store offset=0x1ac align=1 (i32.const 0) (local.get 0x1ac)) (i64.store offset=0x1ad align=1 (i32.const 0) (local.get 0x1ad)) (i64.store offset=0x1ae align=1 (i32.const 0) (local.get 0x1ae)) (i64.store offset=0x1af align=1 (i32.const 0) (local.get 0x1af)) (i64.store offset=0x1b0 align=1 (i32.const 0) (local.get 0x1b0)) (i64.store offset=0x1b1 align=1 (i32.const 0) (local.get 0x1b1)) (i64.store offset=0x1b2 align=1 (i32.const 0) (local.get 0x1b2)) (i64.store offset=0x1b3 align=1 (i32.const 0) (local.get 0x1b3)) (i64.store offset=0x1b4 align=1 (i32.const 0) (local.get 0x1b4)) (i64.store offset=0x1b5 align=1 (i32.const 0) (local.get 0x1b5)) (i64.store offset=0x1b6 align=1 (i32.const 0) (local.get 0x1b6)) (i64.store offset=0x1b7 align=1 (i32.const 0) (local.get 0x1b7)) (i64.store offset=0x1b8 align=1 (i32.const 0) (local.get 0x1b8)) (i64.store offset=0x1b9 align=1 (i32.const 0) (local.get 0x1b9)) (i64.store offset=0x1ba align=1 (i32.const 0) (local.get 0x1ba)) (i64.store offset=0x1bb align=1 (i32.const 0) (local.get 0x1bb)) (i64.store offset=0x1bc align=1 (i32.const 0) (local.get 0x1bc)) (i64.store offset=0x1bd align=1 (i32.const 0) (local.get 0x1bd)) (i64.store offset=0x1be align=1 (i32.const 0) (local.get 0x1be)) (i64.store offset=0x1bf align=1 (i32.const 0) (local.get 0x1bf)) (i64.store offset=0x1c0 align=1 (i32.const 0) (local.get 0x1c0)) (i64.store offset=0x1c1 align=1 (i32.const 0) (local.get 0x1c1)) (i64.store offset=0x1c2 align=1 (i32.const 0) (local.get 0x1c2)) (i64.store offset=0x1c3 align=1 (i32.const 0) (local.get 0x1c3)) (i64.store offset=0x1c4 align=1 (i32.const 0) (local.get 0x1c4)) (i64.store offset=0x1c5 align=1 (i32.const 0) (local.get 0x1c5)) (i64.store offset=0x1c6 align=1 (i32.const 0) (local.get 0x1c6)) (i64.store offset=0x1c7 align=1 (i32.const 0) (local.get 0x1c7)) (i64.store offset=0x1c8 align=1 (i32.const 0) (local.get 0x1c8)) (i64.store offset=0x1c9 align=1 (i32.const 0) (local.get 0x1c9)) (i64.store offset=0x1ca align=1 (i32.const 0) (local.get 0x1ca)) (i64.store offset=0x1cb align=1 (i32.const 0) (local.get 0x1cb)) (i64.store offset=0x1cc align=1 (i32.const 0) (local.get 0x1cc)) (i64.store offset=0x1cd align=1 (i32.const 0) (local.get 0x1cd)) (i64.store offset=0x1ce align=1 (i32.const 0) (local.get 0x1ce)) (i64.store offset=0x1cf align=1 (i32.const 0) (local.get 0x1cf)) (i64.store offset=0x1d0 align=1 (i32.const 0) (local.get 0x1d0)) (i64.store offset=0x1d1 align=1 (i32.const 0) (local.get 0x1d1)) (i64.store offset=0x1d2 align=1 (i32.const 0) (local.get 0x1d2)) (i64.store offset=0x1d3 align=1 (i32.const 0) (local.get 0x1d3)) (i64.store offset=0x1d4 align=1 (i32.const 0) (local.get 0x1d4)) (i64.store offset=0x1d5 align=1 (i32.const 0) (local.get 0x1d5)) (i64.store offset=0x1d6 align=1 (i32.const 0) (local.get 0x1d6)) (i64.store offset=0x1d7 align=1 (i32.const 0) (local.get 0x1d7)) (i64.store offset=0x1d8 align=1 (i32.const 0) (local.get 0x1d8)) (i64.store offset=0x1d9 align=1 (i32.const 0) (local.get 0x1d9)) (i64.store offset=0x1da align=1 (i32.const 0) (local.get 0x1da)) (i64.store offset=0x1db align=1 (i32.const 0) (local.get 0x1db)) (i64.store offset=0x1dc align=1 (i32.const 0) (local.get 0x1dc)) (i64.store offset=0x1dd align=1 (i32.const 0) (local.get 0x1dd)) (i64.store offset=0x1de align=1 (i32.const 0) (local.get 0x1de)) (i64.store offset=0x1df align=1 (i32.const 0) (local.get 0x1df)) (i64.store offset=0x1e0 align=1 (i32.const 0) (local.get 0x1e0)) (i64.store offset=0x1e1 align=1 (i32.const 0) (local.get 0x1e1)) (i64.store offset=0x1e2 align=1 (i32.const 0) (local.get 0x1e2)) (i64.store offset=0x1e3 align=1 (i32.const 0) (local.get 0x1e3)) (i64.store offset=0x1e4 align=1 (i32.const 0) (local.get 0x1e4)) (i64.store offset=0x1e5 align=1 (i32.const 0) (local.get 0x1e5)) (i64.store offset=0x1e6 align=1 (i32.const 0) (local.get 0x1e6)) (i64.store offset=0x1e7 align=1 (i32.const 0) (local.get 0x1e7)) (i64.store offset=0x1e8 align=1 (i32.const 0) (local.get 0x1e8)) (i64.store offset=0x1e9 align=1 (i32.const 0) (local.get 0x1e9)) (i64.store offset=0x1ea align=1 (i32.const 0) (local.get 0x1ea)) (i64.store offset=0x1eb align=1 (i32.const 0) (local.get 0x1eb)) (i64.store offset=0x1ec align=1 (i32.const 0) (local.get 0x1ec)) (i64.store offset=0x1ed align=1 (i32.const 0) (local.get 0x1ed)) (i64.store offset=0x1ee align=1 (i32.const 0) (local.get 0x1ee)) (i64.store offset=0x1ef align=1 (i32.const 0) (local.get 0x1ef)) (i64.store offset=0x1f0 align=1 (i32.const 0) (local.get 0x1f0)) (i64.store offset=0x1f1 align=1 (i32.const 0) (local.get 0x1f1)) (i64.store offset=0x1f2 align=1 (i32.const 0) (local.get 0x1f2)) (i64.store offset=0x1f3 align=1 (i32.const 0) (local.get 0x1f3)) (i64.store offset=0x1f4 align=1 (i32.const 0) (local.get 0x1f4)) (i64.store offset=0x1f5 align=1 (i32.const 0) (local.get 0x1f5)) (i64.store offset=0x1f6 align=1 (i32.const 0) (local.get 0x1f6)) (i64.store offset=0x1f7 align=1 (i32.const 0) (local.get 0x1f7)) (i64.store offset=0x1f8 align=1 (i32.const 0) (local.get 0x1f8)) (i64.store offset=0x1f9 align=1 (i32.const 0) (local.get 0x1f9)) (i64.store offset=0x1fa align=1 (i32.const 0) (local.get 0x1fa)) (i64.store offset=0x1fb align=1 (i32.const 0) (local.get 0x1fb)) (i64.store offset=0x1fc align=1 (i32.const 0) (local.get 0x1fc)) (i64.store offset=0x1fd align=1 (i32.const 0) (local.get 0x1fd)) (i64.store offset=0x1fe align=1 (i32.const 0) (local.get 0x1fe)) (i64.store offset=0x1ff align=1 (i32.const 0) (local.get 0x1ff)) (i64.store offset=0x200 align=1 (i32.const 0) (local.get 0x200)) (i64.store offset=0x201 align=1 (i32.const 0) (local.get 0x201)) (i64.store offset=0x202 align=1 (i32.const 0) (local.get 0x202)) (i64.store offset=0x203 align=1 (i32.const 0) (local.get 0x203)) (i64.store offset=0x204 align=1 (i32.const 0) (local.get 0x204)) (i64.store offset=0x205 align=1 (i32.const 0) (local.get 0x205)) (i64.store offset=0x206 align=1 (i32.const 0) (local.get 0x206)) (i64.store offset=0x207 align=1 (i32.const 0) (local.get 0x207)) (i64.store offset=0x208 align=1 (i32.const 0) (local.get 0x208)) (i64.store offset=0x209 align=1 (i32.const 0) (local.get 0x209)) (i64.store offset=0x20a align=1 (i32.const 0) (local.get 0x20a)) (i64.store offset=0x20b align=1 (i32.const 0) (local.get 0x20b)) (i64.store offset=0x20c align=1 (i32.const 0) (local.get 0x20c)) (i64.store offset=0x20d align=1 (i32.const 0) (local.get 0x20d)) (i64.store offset=0x20e align=1 (i32.const 0) (local.get 0x20e)) (i64.store offset=0x20f align=1 (i32.const 0) (local.get 0x20f)) (i64.store offset=0x210 align=1 (i32.const 0) (local.get 0x210)) (i64.store offset=0x211 align=1 (i32.const 0) (local.get 0x211)) (i64.store offset=0x212 align=1 (i32.const 0) (local.get 0x212)) (i64.store offset=0x213 align=1 (i32.const 0) (local.get 0x213)) (i64.store offset=0x214 align=1 (i32.const 0) (local.get 0x214)) (i64.store offset=0x215 align=1 (i32.const 0) (local.get 0x215)) (i64.store offset=0x216 align=1 (i32.const 0) (local.get 0x216)) (i64.store offset=0x217 align=1 (i32.const 0) (local.get 0x217)) (i64.store offset=0x218 align=1 (i32.const 0) (local.get 0x218)) (i64.store offset=0x219 align=1 (i32.const 0) (local.get 0x219)) (i64.store offset=0x21a align=1 (i32.const 0) (local.get 0x21a)) (i64.store offset=0x21b align=1 (i32.const 0) (local.get 0x21b)) (i64.store offset=0x21c align=1 (i32.const 0) (local.get 0x21c)) (i64.store offset=0x21d align=1 (i32.const 0) (local.get 0x21d)) (i64.store offset=0x21e align=1 (i32.const 0) (local.get 0x21e)) (i64.store offset=0x21f align=1 (i32.const 0) (local.get 0x21f)) (i64.store offset=0x220 align=1 (i32.const 0) (local.get 0x220)) (i64.store offset=0x221 align=1 (i32.const 0) (local.get 0x221)) (i64.store offset=0x222 align=1 (i32.const 0) (local.get 0x222)) (i64.store offset=0x223 align=1 (i32.const 0) (local.get 0x223)) (i64.store offset=0x224 align=1 (i32.const 0) (local.get 0x224)) (i64.store offset=0x225 align=1 (i32.const 0) (local.get 0x225)) (i64.store offset=0x226 align=1 (i32.const 0) (local.get 0x226)) (i64.store offset=0x227 align=1 (i32.const 0) (local.get 0x227)) (i64.store offset=0x228 align=1 (i32.const 0) (local.get 0x228)) (i64.store offset=0x229 align=1 (i32.const 0) (local.get 0x229)) (i64.store offset=0x22a align=1 (i32.const 0) (local.get 0x22a)) (i64.store offset=0x22b align=1 (i32.const 0) (local.get 0x22b)) (i64.store offset=0x22c align=1 (i32.const 0) (local.get 0x22c)) (i64.store offset=0x22d align=1 (i32.const 0) (local.get 0x22d)) (i64.store offset=0x22e align=1 (i32.const 0) (local.get 0x22e)) (i64.store offset=0x22f align=1 (i32.const 0) (local.get 0x22f)) (i64.store offset=0x230 align=1 (i32.const 0) (local.get 0x230)) (i64.store offset=0x231 align=1 (i32.const 0) (local.get 0x231)) (i64.store offset=0x232 align=1 (i32.const 0) (local.get 0x232)) (i64.store offset=0x233 align=1 (i32.const 0) (local.get 0x233)) (i64.store offset=0x234 align=1 (i32.const 0) (local.get 0x234)) (i64.store offset=0x235 align=1 (i32.const 0) (local.get 0x235)) (i64.store offset=0x236 align=1 (i32.const 0) (local.get 0x236)) (i64.store offset=0x237 align=1 (i32.const 0) (local.get 0x237)) (i64.store offset=0x238 align=1 (i32.const 0) (local.get 0x238)) (i64.store offset=0x239 align=1 (i32.const 0) (local.get 0x239)) (i64.store offset=0x23a align=1 (i32.const 0) (local.get 0x23a)) (i64.store offset=0x23b align=1 (i32.const 0) (local.get 0x23b)) (i64.store offset=0x23c align=1 (i32.const 0) (local.get 0x23c)) (i64.store offset=0x23d align=1 (i32.const 0) (local.get 0x23d)) (i64.store offset=0x23e align=1 (i32.const 0) (local.get 0x23e)) (i64.store offset=0x23f align=1 (i32.const 0) (local.get 0x23f)) (i64.store offset=0x240 align=1 (i32.const 0) (local.get 0x240)) (i64.store offset=0x241 align=1 (i32.const 0) (local.get 0x241)) (i64.store offset=0x242 align=1 (i32.const 0) (local.get 0x242)) (i64.store offset=0x243 align=1 (i32.const 0) (local.get 0x243)) (i64.store offset=0x244 align=1 (i32.const 0) (local.get 0x244)) (i64.store offset=0x245 align=1 (i32.const 0) (local.get 0x245)) (i64.store offset=0x246 align=1 (i32.const 0) (local.get 0x246)) (i64.store offset=0x247 align=1 (i32.const 0) (local.get 0x247)) (i64.store offset=0x248 align=1 (i32.const 0) (local.get 0x248)) (i64.store offset=0x249 align=1 (i32.const 0) (local.get 0x249)) (i64.store offset=0x24a align=1 (i32.const 0) (local.get 0x24a)) (i64.store offset=0x24b align=1 (i32.const 0) (local.get 0x24b)) (i64.store offset=0x24c align=1 (i32.const 0) (local.get 0x24c)) (i64.store offset=0x24d align=1 (i32.const 0) (local.get 0x24d)) (i64.store offset=0x24e align=1 (i32.const 0) (local.get 0x24e)) (i64.store offset=0x24f align=1 (i32.const 0) (local.get 0x24f)) (i64.store offset=0x250 align=1 (i32.const 0) (local.get 0x250)) (i64.store offset=0x251 align=1 (i32.const 0) (local.get 0x251)) (i64.store offset=0x252 align=1 (i32.const 0) (local.get 0x252)) (i64.store offset=0x253 align=1 (i32.const 0) (local.get 0x253)) (i64.store offset=0x254 align=1 (i32.const 0) (local.get 0x254)) (i64.store offset=0x255 align=1 (i32.const 0) (local.get 0x255)) (i64.store offset=0x256 align=1 (i32.const 0) (local.get 0x256)) (i64.store offset=0x257 align=1 (i32.const 0) (local.get 0x257)) (i64.store offset=0x258 align=1 (i32.const 0) (local.get 0x258)) (i64.store offset=0x259 align=1 (i32.const 0) (local.get 0x259)) (i64.store offset=0x25a align=1 (i32.const 0) (local.get 0x25a)) (i64.store offset=0x25b align=1 (i32.const 0) (local.get 0x25b)) (i64.store offset=0x25c align=1 (i32.const 0) (local.get 0x25c)) (i64.store offset=0x25d align=1 (i32.const 0) (local.get 0x25d)) (i64.store offset=0x25e align=1 (i32.const 0) (local.get 0x25e)) (i64.store offset=0x25f align=1 (i32.const 0) (local.get 0x25f)) (i64.store offset=0x260 align=1 (i32.const 0) (local.get 0x260)) (i64.store offset=0x261 align=1 (i32.const 0) (local.get 0x261)) (i64.store offset=0x262 align=1 (i32.const 0) (local.get 0x262)) (i64.store offset=0x263 align=1 (i32.const 0) (local.get 0x263)) (i64.store offset=0x264 align=1 (i32.const 0) (local.get 0x264)) (i64.store offset=0x265 align=1 (i32.const 0) (local.get 0x265)) (i64.store offset=0x266 align=1 (i32.const 0) (local.get 0x266)) (i64.store offset=0x267 align=1 (i32.const 0) (local.get 0x267)) (i64.store offset=0x268 align=1 (i32.const 0) (local.get 0x268)) (i64.store offset=0x269 align=1 (i32.const 0) (local.get 0x269)) (i64.store offset=0x26a align=1 (i32.const 0) (local.get 0x26a)) (i64.store offset=0x26b align=1 (i32.const 0) (local.get 0x26b)) (i64.store offset=0x26c align=1 (i32.const 0) (local.get 0x26c)) (i64.store offset=0x26d align=1 (i32.const 0) (local.get 0x26d)) (i64.store offset=0x26e align=1 (i32.const 0) (local.get 0x26e)) (i64.store offset=0x26f align=1 (i32.const 0) (local.get 0x26f)) (i64.store offset=0x270 align=1 (i32.const 0) (local.get 0x270)) (i64.store offset=0x271 align=1 (i32.const 0) (local.get 0x271)) (i64.store offset=0x272 align=1 (i32.const 0) (local.get 0x272)) (i64.store offset=0x273 align=1 (i32.const 0) (local.get 0x273)) (i64.store offset=0x274 align=1 (i32.const 0) (local.get 0x274)) (i64.store offset=0x275 align=1 (i32.const 0) (local.get 0x275)) (i64.store offset=0x276 align=1 (i32.const 0) (local.get 0x276)) (i64.store offset=0x277 align=1 (i32.const 0) (local.get 0x277)) (i64.store offset=0x278 align=1 (i32.const 0) (local.get 0x278)) (i64.store offset=0x279 align=1 (i32.const 0) (local.get 0x279)) (i64.store offset=0x27a align=1 (i32.const 0) (local.get 0x27a)) (i64.store offset=0x27b align=1 (i32.const 0) (local.get 0x27b)) (i64.store offset=0x27c align=1 (i32.const 0) (local.get 0x27c)) (i64.store offset=0x27d align=1 (i32.const 0) (local.get 0x27d)) (i64.store offset=0x27e align=1 (i32.const 0) (local.get 0x27e)) (i64.store offset=0x27f align=1 (i32.const 0) (local.get 0x27f)) (i64.store offset=0x280 align=1 (i32.const 0) (local.get 0x280)) (i64.store offset=0x281 align=1 (i32.const 0) (local.get 0x281)) (i64.store offset=0x282 align=1 (i32.const 0) (local.get 0x282)) (i64.store offset=0x283 align=1 (i32.const 0) (local.get 0x283)) (i64.store offset=0x284 align=1 (i32.const 0) (local.get 0x284)) (i64.store offset=0x285 align=1 (i32.const 0) (local.get 0x285)) (i64.store offset=0x286 align=1 (i32.const 0) (local.get 0x286)) (i64.store offset=0x287 align=1 (i32.const 0) (local.get 0x287)) (i64.store offset=0x288 align=1 (i32.const 0) (local.get 0x288)) (i64.store offset=0x289 align=1 (i32.const 0) (local.get 0x289)) (i64.store offset=0x28a align=1 (i32.const 0) (local.get 0x28a)) (i64.store offset=0x28b align=1 (i32.const 0) (local.get 0x28b)) (i64.store offset=0x28c align=1 (i32.const 0) (local.get 0x28c)) (i64.store offset=0x28d align=1 (i32.const 0) (local.get 0x28d)) (i64.store offset=0x28e align=1 (i32.const 0) (local.get 0x28e)) (i64.store offset=0x28f align=1 (i32.const 0) (local.get 0x28f)) (i64.store offset=0x290 align=1 (i32.const 0) (local.get 0x290)) (i64.store offset=0x291 align=1 (i32.const 0) (local.get 0x291)) (i64.store offset=0x292 align=1 (i32.const 0) (local.get 0x292)) (i64.store offset=0x293 align=1 (i32.const 0) (local.get 0x293)) (i64.store offset=0x294 align=1 (i32.const 0) (local.get 0x294)) (i64.store offset=0x295 align=1 (i32.const 0) (local.get 0x295)) (i64.store offset=0x296 align=1 (i32.const 0) (local.get 0x296)) (i64.store offset=0x297 align=1 (i32.const 0) (local.get 0x297)) (i64.store offset=0x298 align=1 (i32.const 0) (local.get 0x298)) (i64.store offset=0x299 align=1 (i32.const 0) (local.get 0x299)) (i64.store offset=0x29a align=1 (i32.const 0) (local.get 0x29a)) (i64.store offset=0x29b align=1 (i32.const 0) (local.get 0x29b)) (i64.store offset=0x29c align=1 (i32.const 0) (local.get 0x29c)) (i64.store offset=0x29d align=1 (i32.const 0) (local.get 0x29d)) (i64.store offset=0x29e align=1 (i32.const 0) (local.get 0x29e)) (i64.store offset=0x29f align=1 (i32.const 0) (local.get 0x29f)) (i64.store offset=0x2a0 align=1 (i32.const 0) (local.get 0x2a0)) (i64.store offset=0x2a1 align=1 (i32.const 0) (local.get 0x2a1)) (i64.store offset=0x2a2 align=1 (i32.const 0) (local.get 0x2a2)) (i64.store offset=0x2a3 align=1 (i32.const 0) (local.get 0x2a3)) (i64.store offset=0x2a4 align=1 (i32.const 0) (local.get 0x2a4)) (i64.store offset=0x2a5 align=1 (i32.const 0) (local.get 0x2a5)) (i64.store offset=0x2a6 align=1 (i32.const 0) (local.get 0x2a6)) (i64.store offset=0x2a7 align=1 (i32.const 0) (local.get 0x2a7)) (i64.store offset=0x2a8 align=1 (i32.const 0) (local.get 0x2a8)) (i64.store offset=0x2a9 align=1 (i32.const 0) (local.get 0x2a9)) (i64.store offset=0x2aa align=1 (i32.const 0) (local.get 0x2aa)) (i64.store offset=0x2ab align=1 (i32.const 0) (local.get 0x2ab)) (i64.store offset=0x2ac align=1 (i32.const 0) (local.get 0x2ac)) (i64.store offset=0x2ad align=1 (i32.const 0) (local.get 0x2ad)) (i64.store offset=0x2ae align=1 (i32.const 0) (local.get 0x2ae)) (i64.store offset=0x2af align=1 (i32.const 0) (local.get 0x2af)) (i64.store offset=0x2b0 align=1 (i32.const 0) (local.get 0x2b0)) (i64.store offset=0x2b1 align=1 (i32.const 0) (local.get 0x2b1)) (i64.store offset=0x2b2 align=1 (i32.const 0) (local.get 0x2b2)) (i64.store offset=0x2b3 align=1 (i32.const 0) (local.get 0x2b3)) (i64.store offset=0x2b4 align=1 (i32.const 0) (local.get 0x2b4)) (i64.store offset=0x2b5 align=1 (i32.const 0) (local.get 0x2b5)) (i64.store offset=0x2b6 align=1 (i32.const 0) (local.get 0x2b6)) (i64.store offset=0x2b7 align=1 (i32.const 0) (local.get 0x2b7)) (i64.store offset=0x2b8 align=1 (i32.const 0) (local.get 0x2b8)) (i64.store offset=0x2b9 align=1 (i32.const 0) (local.get 0x2b9)) (i64.store offset=0x2ba align=1 (i32.const 0) (local.get 0x2ba)) (i64.store offset=0x2bb align=1 (i32.const 0) (local.get 0x2bb)) (i64.store offset=0x2bc align=1 (i32.const 0) (local.get 0x2bc)) (i64.store offset=0x2bd align=1 (i32.const 0) (local.get 0x2bd)) (i64.store offset=0x2be align=1 (i32.const 0) (local.get 0x2be)) (i64.store offset=0x2bf align=1 (i32.const 0) (local.get 0x2bf)) (i64.store offset=0x2c0 align=1 (i32.const 0) (local.get 0x2c0)) (i64.store offset=0x2c1 align=1 (i32.const 0) (local.get 0x2c1)) (i64.store offset=0x2c2 align=1 (i32.const 0) (local.get 0x2c2)) (i64.store offset=0x2c3 align=1 (i32.const 0) (local.get 0x2c3)) (i64.store offset=0x2c4 align=1 (i32.const 0) (local.get 0x2c4)) (i64.store offset=0x2c5 align=1 (i32.const 0) (local.get 0x2c5)) (i64.store offset=0x2c6 align=1 (i32.const 0) (local.get 0x2c6)) (i64.store offset=0x2c7 align=1 (i32.const 0) (local.get 0x2c7)) (i64.store offset=0x2c8 align=1 (i32.const 0) (local.get 0x2c8)) (i64.store offset=0x2c9 align=1 (i32.const 0) (local.get 0x2c9)) (i64.store offset=0x2ca align=1 (i32.const 0) (local.get 0x2ca)) (i64.store offset=0x2cb align=1 (i32.const 0) (local.get 0x2cb)) (i64.store offset=0x2cc align=1 (i32.const 0) (local.get 0x2cc)) (i64.store offset=0x2cd align=1 (i32.const 0) (local.get 0x2cd)) (i64.store offset=0x2ce align=1 (i32.const 0) (local.get 0x2ce)) (i64.store offset=0x2cf align=1 (i32.const 0) (local.get 0x2cf)) (i64.store offset=0x2d0 align=1 (i32.const 0) (local.get 0x2d0)) (i64.store offset=0x2d1 align=1 (i32.const 0) (local.get 0x2d1)) (i64.store offset=0x2d2 align=1 (i32.const 0) (local.get 0x2d2)) (i64.store offset=0x2d3 align=1 (i32.const 0) (local.get 0x2d3)) (i64.store offset=0x2d4 align=1 (i32.const 0) (local.get 0x2d4)) (i64.store offset=0x2d5 align=1 (i32.const 0) (local.get 0x2d5)) (i64.store offset=0x2d6 align=1 (i32.const 0) (local.get 0x2d6)) (i64.store offset=0x2d7 align=1 (i32.const 0) (local.get 0x2d7)) (i64.store offset=0x2d8 align=1 (i32.const 0) (local.get 0x2d8)) (i64.store offset=0x2d9 align=1 (i32.const 0) (local.get 0x2d9)) (i64.store offset=0x2da align=1 (i32.const 0) (local.get 0x2da)) (i64.store offset=0x2db align=1 (i32.const 0) (local.get 0x2db)) (i64.store offset=0x2dc align=1 (i32.const 0) (local.get 0x2dc)) (i64.store offset=0x2dd align=1 (i32.const 0) (local.get 0x2dd)) (i64.store offset=0x2de align=1 (i32.const 0) (local.get 0x2de)) (i64.store offset=0x2df align=1 (i32.const 0) (local.get 0x2df)) (i64.store offset=0x2e0 align=1 (i32.const 0) (local.get 0x2e0)) (i64.store offset=0x2e1 align=1 (i32.const 0) (local.get 0x2e1)) (i64.store offset=0x2e2 align=1 (i32.const 0) (local.get 0x2e2)) (i64.store offset=0x2e3 align=1 (i32.const 0) (local.get 0x2e3)) (i64.store offset=0x2e4 align=1 (i32.const 0) (local.get 0x2e4)) (i64.store offset=0x2e5 align=1 (i32.const 0) (local.get 0x2e5)) (i64.store offset=0x2e6 align=1 (i32.const 0) (local.get 0x2e6)) (i64.store offset=0x2e7 align=1 (i32.const 0) (local.get 0x2e7)) (i64.store offset=0x2e8 align=1 (i32.const 0) (local.get 0x2e8)) (i64.store offset=0x2e9 align=1 (i32.const 0) (local.get 0x2e9)) (i64.store offset=0x2ea align=1 (i32.const 0) (local.get 0x2ea)) (i64.store offset=0x2eb align=1 (i32.const 0) (local.get 0x2eb)) (i64.store offset=0x2ec align=1 (i32.const 0) (local.get 0x2ec)) (i64.store offset=0x2ed align=1 (i32.const 0) (local.get 0x2ed)) (i64.store offset=0x2ee align=1 (i32.const 0) (local.get 0x2ee)) (i64.store offset=0x2ef align=1 (i32.const 0) (local.get 0x2ef)) (i64.store offset=0x2f0 align=1 (i32.const 0) (local.get 0x2f0)) (i64.store offset=0x2f1 align=1 (i32.const 0) (local.get 0x2f1)) (i64.store offset=0x2f2 align=1 (i32.const 0) (local.get 0x2f2)) (i64.store offset=0x2f3 align=1 (i32.const 0) (local.get 0x2f3)) (i64.store offset=0x2f4 align=1 (i32.const 0) (local.get 0x2f4)) (i64.store offset=0x2f5 align=1 (i32.const 0) (local.get 0x2f5)) (i64.store offset=0x2f6 align=1 (i32.const 0) (local.get 0x2f6)) (i64.store offset=0x2f7 align=1 (i32.const 0) (local.get 0x2f7)) (i64.store offset=0x2f8 align=1 (i32.const 0) (local.get 0x2f8)) (i64.store offset=0x2f9 align=1 (i32.const 0) (local.get 0x2f9)) (i64.store offset=0x2fa align=1 (i32.const 0) (local.get 0x2fa)) (i64.store offset=0x2fb align=1 (i32.const 0) (local.get 0x2fb)) (i64.store offset=0x2fc align=1 (i32.const 0) (local.get 0x2fc)) (i64.store offset=0x2fd align=1 (i32.const 0) (local.get 0x2fd)) (i64.store offset=0x2fe align=1 (i32.const 0) (local.get 0x2fe)) (i64.store offset=0x2ff align=1 (i32.const 0) (local.get 0x2ff)) (i64.store offset=0x300 align=1 (i32.const 0) (local.get 0x300)) (i64.store offset=0x301 align=1 (i32.const 0) (local.get 0x301)) (i64.store offset=0x302 align=1 (i32.const 0) (local.get 0x302)) (i64.store offset=0x303 align=1 (i32.const 0) (local.get 0x303)) (i64.store offset=0x304 align=1 (i32.const 0) (local.get 0x304)) (i64.store offset=0x305 align=1 (i32.const 0) (local.get 0x305)) (i64.store offset=0x306 align=1 (i32.const 0) (local.get 0x306)) (i64.store offset=0x307 align=1 (i32.const 0) (local.get 0x307)) (i64.store offset=0x308 align=1 (i32.const 0) (local.get 0x308)) (i64.store offset=0x309 align=1 (i32.const 0) (local.get 0x309)) (i64.store offset=0x30a align=1 (i32.const 0) (local.get 0x30a)) (i64.store offset=0x30b align=1 (i32.const 0) (local.get 0x30b)) (i64.store offset=0x30c align=1 (i32.const 0) (local.get 0x30c)) (i64.store offset=0x30d align=1 (i32.const 0) (local.get 0x30d)) (i64.store offset=0x30e align=1 (i32.const 0) (local.get 0x30e)) (i64.store offset=0x30f align=1 (i32.const 0) (local.get 0x30f)) (i64.store offset=0x310 align=1 (i32.const 0) (local.get 0x310)) (i64.store offset=0x311 align=1 (i32.const 0) (local.get 0x311)) (i64.store offset=0x312 align=1 (i32.const 0) (local.get 0x312)) (i64.store offset=0x313 align=1 (i32.const 0) (local.get 0x313)) (i64.store offset=0x314 align=1 (i32.const 0) (local.get 0x314)) (i64.store offset=0x315 align=1 (i32.const 0) (local.get 0x315)) (i64.store offset=0x316 align=1 (i32.const 0) (local.get 0x316)) (i64.store offset=0x317 align=1 (i32.const 0) (local.get 0x317)) (i64.store offset=0x318 align=1 (i32.const 0) (local.get 0x318)) (i64.store offset=0x319 align=1 (i32.const 0) (local.get 0x319)) (i64.store offset=0x31a align=1 (i32.const 0) (local.get 0x31a)) (i64.store offset=0x31b align=1 (i32.const 0) (local.get 0x31b)) (i64.store offset=0x31c align=1 (i32.const 0) (local.get 0x31c)) (i64.store offset=0x31d align=1 (i32.const 0) (local.get 0x31d)) (i64.store offset=0x31e align=1 (i32.const 0) (local.get 0x31e)) (i64.store offset=0x31f align=1 (i32.const 0) (local.get 0x31f)) (i64.store offset=0x320 align=1 (i32.const 0) (local.get 0x320)) (i64.store offset=0x321 align=1 (i32.const 0) (local.get 0x321)) (i64.store offset=0x322 align=1 (i32.const 0) (local.get 0x322)) (i64.store offset=0x323 align=1 (i32.const 0) (local.get 0x323)) (i64.store offset=0x324 align=1 (i32.const 0) (local.get 0x324)) (i64.store offset=0x325 align=1 (i32.const 0) (local.get 0x325)) (i64.store offset=0x326 align=1 (i32.const 0) (local.get 0x326)) (i64.store offset=0x327 align=1 (i32.const 0) (local.get 0x327)) (i64.store offset=0x328 align=1 (i32.const 0) (local.get 0x328)) (i64.store offset=0x329 align=1 (i32.const 0) (local.get 0x329)) (i64.store offset=0x32a align=1 (i32.const 0) (local.get 0x32a)) (i64.store offset=0x32b align=1 (i32.const 0) (local.get 0x32b)) (i64.store offset=0x32c align=1 (i32.const 0) (local.get 0x32c)) (i64.store offset=0x32d align=1 (i32.const 0) (local.get 0x32d)) (i64.store offset=0x32e align=1 (i32.const 0) (local.get 0x32e)) (i64.store offset=0x32f align=1 (i32.const 0) (local.get 0x32f)) (i64.store offset=0x330 align=1 (i32.const 0) (local.get 0x330)) (i64.store offset=0x331 align=1 (i32.const 0) (local.get 0x331)) (i64.store offset=0x332 align=1 (i32.const 0) (local.get 0x332)) (i64.store offset=0x333 align=1 (i32.const 0) (local.get 0x333)) (i64.store offset=0x334 align=1 (i32.const 0) (local.get 0x334)) (i64.store offset=0x335 align=1 (i32.const 0) (local.get 0x335)) (i64.store offset=0x336 align=1 (i32.const 0) (local.get 0x336)) (i64.store offset=0x337 align=1 (i32.const 0) (local.get 0x337)) (i64.store offset=0x338 align=1 (i32.const 0) (local.get 0x338)) (i64.store offset=0x339 align=1 (i32.const 0) (local.get 0x339)) (i64.store offset=0x33a align=1 (i32.const 0) (local.get 0x33a)) (i64.store offset=0x33b align=1 (i32.const 0) (local.get 0x33b)) (i64.store offset=0x33c align=1 (i32.const 0) (local.get 0x33c)) (i64.store offset=0x33d align=1 (i32.const 0) (local.get 0x33d)) (i64.store offset=0x33e align=1 (i32.const 0) (local.get 0x33e)) (i64.store offset=0x33f align=1 (i32.const 0) (local.get 0x33f)) (i64.store offset=0x340 align=1 (i32.const 0) (local.get 0x340)) (i64.store offset=0x341 align=1 (i32.const 0) (local.get 0x341)) (i64.store offset=0x342 align=1 (i32.const 0) (local.get 0x342)) (i64.store offset=0x343 align=1 (i32.const 0) (local.get 0x343)) (i64.store offset=0x344 align=1 (i32.const 0) (local.get 0x344)) (i64.store offset=0x345 align=1 (i32.const 0) (local.get 0x345)) (i64.store offset=0x346 align=1 (i32.const 0) (local.get 0x346)) (i64.store offset=0x347 align=1 (i32.const 0) (local.get 0x347)) (i64.store offset=0x348 align=1 (i32.const 0) (local.get 0x348)) (i64.store offset=0x349 align=1 (i32.const 0) (local.get 0x349)) (i64.store offset=0x34a align=1 (i32.const 0) (local.get 0x34a)) (i64.store offset=0x34b align=1 (i32.const 0) (local.get 0x34b)) (i64.store offset=0x34c align=1 (i32.const 0) (local.get 0x34c)) (i64.store offset=0x34d align=1 (i32.const 0) (local.get 0x34d)) (i64.store offset=0x34e align=1 (i32.const 0) (local.get 0x34e)) (i64.store offset=0x34f align=1 (i32.const 0) (local.get 0x34f)) (i64.store offset=0x350 align=1 (i32.const 0) (local.get 0x350)) (i64.store offset=0x351 align=1 (i32.const 0) (local.get 0x351)) (i64.store offset=0x352 align=1 (i32.const 0) (local.get 0x352)) (i64.store offset=0x353 align=1 (i32.const 0) (local.get 0x353)) (i64.store offset=0x354 align=1 (i32.const 0) (local.get 0x354)) (i64.store offset=0x355 align=1 (i32.const 0) (local.get 0x355)) (i64.store offset=0x356 align=1 (i32.const 0) (local.get 0x356)) (i64.store offset=0x357 align=1 (i32.const 0) (local.get 0x357)) (i64.store offset=0x358 align=1 (i32.const 0) (local.get 0x358)) (i64.store offset=0x359 align=1 (i32.const 0) (local.get 0x359)) (i64.store offset=0x35a align=1 (i32.const 0) (local.get 0x35a)) (i64.store offset=0x35b align=1 (i32.const 0) (local.get 0x35b)) (i64.store offset=0x35c align=1 (i32.const 0) (local.get 0x35c)) (i64.store offset=0x35d align=1 (i32.const 0) (local.get 0x35d)) (i64.store offset=0x35e align=1 (i32.const 0) (local.get 0x35e)) (i64.store offset=0x35f align=1 (i32.const 0) (local.get 0x35f)) (i64.store offset=0x360 align=1 (i32.const 0) (local.get 0x360)) (i64.store offset=0x361 align=1 (i32.const 0) (local.get 0x361)) (i64.store offset=0x362 align=1 (i32.const 0) (local.get 0x362)) (i64.store offset=0x363 align=1 (i32.const 0) (local.get 0x363)) (i64.store offset=0x364 align=1 (i32.const 0) (local.get 0x364)) (i64.store offset=0x365 align=1 (i32.const 0) (local.get 0x365)) (i64.store offset=0x366 align=1 (i32.const 0) (local.get 0x366)) (i64.store offset=0x367 align=1 (i32.const 0) (local.get 0x367)) (i64.store offset=0x368 align=1 (i32.const 0) (local.get 0x368)) (i64.store offset=0x369 align=1 (i32.const 0) (local.get 0x369)) (i64.store offset=0x36a align=1 (i32.const 0) (local.get 0x36a)) (i64.store offset=0x36b align=1 (i32.const 0) (local.get 0x36b)) (i64.store offset=0x36c align=1 (i32.const 0) (local.get 0x36c)) (i64.store offset=0x36d align=1 (i32.const 0) (local.get 0x36d)) (i64.store offset=0x36e align=1 (i32.const 0) (local.get 0x36e)) (i64.store offset=0x36f align=1 (i32.const 0) (local.get 0x36f)) (i64.store offset=0x370 align=1 (i32.const 0) (local.get 0x370)) (i64.store offset=0x371 align=1 (i32.const 0) (local.get 0x371)) (i64.store offset=0x372 align=1 (i32.const 0) (local.get 0x372)) (i64.store offset=0x373 align=1 (i32.const 0) (local.get 0x373)) (i64.store offset=0x374 align=1 (i32.const 0) (local.get 0x374)) (i64.store offset=0x375 align=1 (i32.const 0) (local.get 0x375)) (i64.store offset=0x376 align=1 (i32.const 0) (local.get 0x376)) (i64.store offset=0x377 align=1 (i32.const 0) (local.get 0x377)) (i64.store offset=0x378 align=1 (i32.const 0) (local.get 0x378)) (i64.store offset=0x379 align=1 (i32.const 0) (local.get 0x379)) (i64.store offset=0x37a align=1 (i32.const 0) (local.get 0x37a)) (i64.store offset=0x37b align=1 (i32.const 0) (local.get 0x37b)) (i64.store offset=0x37c align=1 (i32.const 0) (local.get 0x37c)) (i64.store offset=0x37d align=1 (i32.const 0) (local.get 0x37d)) (i64.store offset=0x37e align=1 (i32.const 0) (local.get 0x37e)) (i64.store offset=0x37f align=1 (i32.const 0) (local.get 0x37f)) (i64.store offset=0x380 align=1 (i32.const 0) (local.get 0x380)) (i64.store offset=0x381 align=1 (i32.const 0) (local.get 0x381)) (i64.store offset=0x382 align=1 (i32.const 0) (local.get 0x382)) (i64.store offset=0x383 align=1 (i32.const 0) (local.get 0x383)) (i64.store offset=0x384 align=1 (i32.const 0) (local.get 0x384)) (i64.store offset=0x385 align=1 (i32.const 0) (local.get 0x385)) (i64.store offset=0x386 align=1 (i32.const 0) (local.get 0x386)) (i64.store offset=0x387 align=1 (i32.const 0) (local.get 0x387)) (i64.store offset=0x388 align=1 (i32.const 0) (local.get 0x388)) (i64.store offset=0x389 align=1 (i32.const 0) (local.get 0x389)) (i64.store offset=0x38a align=1 (i32.const 0) (local.get 0x38a)) (i64.store offset=0x38b align=1 (i32.const 0) (local.get 0x38b)) (i64.store offset=0x38c align=1 (i32.const 0) (local.get 0x38c)) (i64.store offset=0x38d align=1 (i32.const 0) (local.get 0x38d)) (i64.store offset=0x38e align=1 (i32.const 0) (local.get 0x38e)) (i64.store offset=0x38f align=1 (i32.const 0) (local.get 0x38f)) (i64.store offset=0x390 align=1 (i32.const 0) (local.get 0x390)) (i64.store offset=0x391 align=1 (i32.const 0) (local.get 0x391)) (i64.store offset=0x392 align=1 (i32.const 0) (local.get 0x392)) (i64.store offset=0x393 align=1 (i32.const 0) (local.get 0x393)) (i64.store offset=0x394 align=1 (i32.const 0) (local.get 0x394)) (i64.store offset=0x395 align=1 (i32.const 0) (local.get 0x395)) (i64.store offset=0x396 align=1 (i32.const 0) (local.get 0x396)) (i64.store offset=0x397 align=1 (i32.const 0) (local.get 0x397)) (i64.store offset=0x398 align=1 (i32.const 0) (local.get 0x398)) (i64.store offset=0x399 align=1 (i32.const 0) (local.get 0x399)) (i64.store offset=0x39a align=1 (i32.const 0) (local.get 0x39a)) (i64.store offset=0x39b align=1 (i32.const 0) (local.get 0x39b)) (i64.store offset=0x39c align=1 (i32.const 0) (local.get 0x39c)) (i64.store offset=0x39d align=1 (i32.const 0) (local.get 0x39d)) (i64.store offset=0x39e align=1 (i32.const 0) (local.get 0x39e)) (i64.store offset=0x39f align=1 (i32.const 0) (local.get 0x39f)) (i64.store offset=0x3a0 align=1 (i32.const 0) (local.get 0x3a0)) (i64.store offset=0x3a1 align=1 (i32.const 0) (local.get 0x3a1)) (i64.store offset=0x3a2 align=1 (i32.const 0) (local.get 0x3a2)) (i64.store offset=0x3a3 align=1 (i32.const 0) (local.get 0x3a3)) (i64.store offset=0x3a4 align=1 (i32.const 0) (local.get 0x3a4)) (i64.store offset=0x3a5 align=1 (i32.const 0) (local.get 0x3a5)) (i64.store offset=0x3a6 align=1 (i32.const 0) (local.get 0x3a6)) (i64.store offset=0x3a7 align=1 (i32.const 0) (local.get 0x3a7)) (i64.store offset=0x3a8 align=1 (i32.const 0) (local.get 0x3a8)) (i64.store offset=0x3a9 align=1 (i32.const 0) (local.get 0x3a9)) (i64.store offset=0x3aa align=1 (i32.const 0) (local.get 0x3aa)) (i64.store offset=0x3ab align=1 (i32.const 0) (local.get 0x3ab)) (i64.store offset=0x3ac align=1 (i32.const 0) (local.get 0x3ac)) (i64.store offset=0x3ad align=1 (i32.const 0) (local.get 0x3ad)) (i64.store offset=0x3ae align=1 (i32.const 0) (local.get 0x3ae)) (i64.store offset=0x3af align=1 (i32.const 0) (local.get 0x3af)) (i64.store offset=0x3b0 align=1 (i32.const 0) (local.get 0x3b0)) (i64.store offset=0x3b1 align=1 (i32.const 0) (local.get 0x3b1)) (i64.store offset=0x3b2 align=1 (i32.const 0) (local.get 0x3b2)) (i64.store offset=0x3b3 align=1 (i32.const 0) (local.get 0x3b3)) (i64.store offset=0x3b4 align=1 (i32.const 0) (local.get 0x3b4)) (i64.store offset=0x3b5 align=1 (i32.const 0) (local.get 0x3b5)) (i64.store offset=0x3b6 align=1 (i32.const 0) (local.get 0x3b6)) (i64.store offset=0x3b7 align=1 (i32.const 0) (local.get 0x3b7)) (i64.store offset=0x3b8 align=1 (i32.const 0) (local.get 0x3b8)) (i64.store offset=0x3b9 align=1 (i32.const 0) (local.get 0x3b9)) (i64.store offset=0x3ba align=1 (i32.const 0) (local.get 0x3ba)) (i64.store offset=0x3bb align=1 (i32.const 0) (local.get 0x3bb)) (i64.store offset=0x3bc align=1 (i32.const 0) (local.get 0x3bc)) (i64.store offset=0x3bd align=1 (i32.const 0) (local.get 0x3bd)) (i64.store offset=0x3be align=1 (i32.const 0) (local.get 0x3be)) (i64.store offset=0x3bf align=1 (i32.const 0) (local.get 0x3bf)) (i64.store offset=0x3c0 align=1 (i32.const 0) (local.get 0x3c0)) (i64.store offset=0x3c1 align=1 (i32.const 0) (local.get 0x3c1)) (i64.store offset=0x3c2 align=1 (i32.const 0) (local.get 0x3c2)) (i64.store offset=0x3c3 align=1 (i32.const 0) (local.get 0x3c3)) (i64.store offset=0x3c4 align=1 (i32.const 0) (local.get 0x3c4)) (i64.store offset=0x3c5 align=1 (i32.const 0) (local.get 0x3c5)) (i64.store offset=0x3c6 align=1 (i32.const 0) (local.get 0x3c6)) (i64.store offset=0x3c7 align=1 (i32.const 0) (local.get 0x3c7)) (i64.store offset=0x3c8 align=1 (i32.const 0) (local.get 0x3c8)) (i64.store offset=0x3c9 align=1 (i32.const 0) (local.get 0x3c9)) (i64.store offset=0x3ca align=1 (i32.const 0) (local.get 0x3ca)) (i64.store offset=0x3cb align=1 (i32.const 0) (local.get 0x3cb)) (i64.store offset=0x3cc align=1 (i32.const 0) (local.get 0x3cc)) (i64.store offset=0x3cd align=1 (i32.const 0) (local.get 0x3cd)) (i64.store offset=0x3ce align=1 (i32.const 0) (local.get 0x3ce)) (i64.store offset=0x3cf align=1 (i32.const 0) (local.get 0x3cf)) (i64.store offset=0x3d0 align=1 (i32.const 0) (local.get 0x3d0)) (i64.store offset=0x3d1 align=1 (i32.const 0) (local.get 0x3d1)) (i64.store offset=0x3d2 align=1 (i32.const 0) (local.get 0x3d2)) (i64.store offset=0x3d3 align=1 (i32.const 0) (local.get 0x3d3)) (i64.store offset=0x3d4 align=1 (i32.const 0) (local.get 0x3d4)) (i64.store offset=0x3d5 align=1 (i32.const 0) (local.get 0x3d5)) (i64.store offset=0x3d6 align=1 (i32.const 0) (local.get 0x3d6)) (i64.store offset=0x3d7 align=1 (i32.const 0) (local.get 0x3d7)) (i64.store offset=0x3d8 align=1 (i32.const 0) (local.get 0x3d8)) (i64.store offset=0x3d9 align=1 (i32.const 0) (local.get 0x3d9)) (i64.store offset=0x3da align=1 (i32.const 0) (local.get 0x3da)) (i64.store offset=0x3db align=1 (i32.const 0) (local.get 0x3db)) (i64.store offset=0x3dc align=1 (i32.const 0) (local.get 0x3dc)) (i64.store offset=0x3dd align=1 (i32.const 0) (local.get 0x3dd)) (i64.store offset=0x3de align=1 (i32.const 0) (local.get 0x3de)) (i64.store offset=0x3df align=1 (i32.const 0) (local.get 0x3df)) (i64.store offset=0x3e0 align=1 (i32.const 0) (local.get 0x3e0)) (i64.store offset=0x3e1 align=1 (i32.const 0) (local.get 0x3e1)) (i64.store offset=0x3e2 align=1 (i32.const 0) (local.get 0x3e2)) (i64.store offset=0x3e3 align=1 (i32.const 0) (local.get 0x3e3)) (i64.store offset=0x3e4 align=1 (i32.const 0) (local.get 0x3e4)) (i64.store offset=0x3e5 align=1 (i32.const 0) (local.get 0x3e5)) (i64.store offset=0x3e6 align=1 (i32.const 0) (local.get 0x3e6)) (i64.store offset=0x3e7 align=1 (i32.const 0) (local.get 0x3e7)) (i64.store offset=0x3e8 align=1 (i32.const 0) (local.get 0x3e8)) (i64.store offset=0x3e9 align=1 (i32.const 0) (local.get 0x3e9)) (i64.store offset=0x3ea align=1 (i32.const 0) (local.get 0x3ea)) (i64.store offset=0x3eb align=1 (i32.const 0) (local.get 0x3eb)) (i64.store offset=0x3ec align=1 (i32.const 0) (local.get 0x3ec)) (i64.store offset=0x3ed align=1 (i32.const 0) (local.get 0x3ed)) (i64.store offset=0x3ee align=1 (i32.const 0) (local.get 0x3ee)) (i64.store offset=0x3ef align=1 (i32.const 0) (local.get 0x3ef)) (i64.store offset=0x3f0 align=1 (i32.const 0) (local.get 0x3f0)) (i64.store offset=0x3f1 align=1 (i32.const 0) (local.get 0x3f1)) (i64.store offset=0x3f2 align=1 (i32.const 0) (local.get 0x3f2)) (i64.store offset=0x3f3 align=1 (i32.const 0) (local.get 0x3f3)) (i64.store offset=0x3f4 align=1 (i32.const 0) (local.get 0x3f4)) (i64.store offset=0x3f5 align=1 (i32.const 0) (local.get 0x3f5)) (i64.store offset=0x3f6 align=1 (i32.const 0) (local.get 0x3f6)) (i64.store offset=0x3f7 align=1 (i32.const 0) (local.get 0x3f7)) (i64.store offset=0x3f8 align=1 (i32.const 0) (local.get 0x3f8)) (i64.store offset=0x3f9 align=1 (i32.const 0) (local.get 0x3f9)) (i64.store offset=0x3fa align=1 (i32.const 0) (local.get 0x3fa)) (i64.store offset=0x3fb align=1 (i32.const 0) (local.get 0x3fb)) (i64.store offset=0x3fc align=1 (i32.const 0) (local.get 0x3fc)) (i64.store offset=0x3fd align=1 (i32.const 0) (local.get 0x3fd)) (i64.store offset=0x3fe align=1 (i32.const 0) (local.get 0x3fe)) (i64.store offset=0x3ff align=1 (i32.const 0) (local.get 0x3ff)) (i64.store offset=0x400 align=1 (i32.const 0) (local.get 0x400)) (i64.store offset=0x401 align=1 (i32.const 0) (local.get 0x401)) (i64.store offset=0x402 align=1 (i32.const 0) (local.get 0x402)) (i64.store offset=0x403 align=1 (i32.const 0) (local.get 0x403)) (i64.store offset=0x404 align=1 (i32.const 0) (local.get 0x404)) (i64.store offset=0x405 align=1 (i32.const 0) (local.get 0x405)) (i64.store offset=0x406 align=1 (i32.const 0) (local.get 0x406)) (i64.store offset=0x407 align=1 (i32.const 0) (local.get 0x407)) (i64.store offset=0x408 align=1 (i32.const 0) (local.get 0x408)) (i64.store offset=0x409 align=1 (i32.const 0) (local.get 0x409)) (i64.store offset=0x40a align=1 (i32.const 0) (local.get 0x40a)) (i64.store offset=0x40b align=1 (i32.const 0) (local.get 0x40b)) (i64.store offset=0x40c align=1 (i32.const 0) (local.get 0x40c)) (i64.store offset=0x40d align=1 (i32.const 0) (local.get 0x40d)) (i64.store offset=0x40e align=1 (i32.const 0) (local.get 0x40e)) (i64.store offset=0x40f align=1 (i32.const 0) (local.get 0x40f)) (i64.store offset=0x410 align=1 (i32.const 0) (local.get 0x410)) (i64.store offset=0x411 align=1 (i32.const 0) (local.get 0x411)) (i64.store offset=0x412 align=1 (i32.const 0) (local.get 0x412)) (i64.store offset=0x413 align=1 (i32.const 0) (local.get 0x413)) (i64.store offset=0x414 align=1 (i32.const 0) (local.get 0x414)) (i64.store offset=0x415 align=1 (i32.const 0) (local.get 0x415)) (i64.store offset=0x416 align=1 (i32.const 0) (local.get 0x416)) (i64.store offset=0x417 align=1 (i32.const 0) (local.get 0x417)) (i64.store offset=0x418 align=1 (i32.const 0) (local.get 0x418)) (i64.store offset=0x419 align=1 (i32.const 0) (local.get 0x419)) (i64.store offset=0x41a align=1 (i32.const 0) (local.get 0x41a)) (i64.store offset=0x41b align=1 (i32.const 0) (local.get 0x41b)) (i64.store offset=0x41c align=1 (i32.const 0) (local.get 0x41c)) (i64.store offset=0x41d align=1 (i32.const 0) (local.get 0x41d)) (i64.store offset=0x41e align=1 (i32.const 0) (local.get 0x41e)) (i64.store offset=0x41f align=1 (i32.const 0) (local.get 0x41f)) ) ) (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 0)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 100)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 200)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 300)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 400)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 500)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 600)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 700)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 800)) "call stack exhausted") (assert_exhaustion (invoke "test-guard-page-skip" (i32.const 900)) "call stack exhausted") binaryen-version_108/test/spec/stack.wast000066400000000000000000000142551423707623100206720ustar00rootroot00000000000000(module (func (export "fac-expr") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (if (i64.eq (local.get $i) (i64.const 0)) (then (br $done)) (else (local.set $res (i64.mul (local.get $i) (local.get $res))) (local.set $i (i64.sub (local.get $i) (i64.const 1))) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.get $n) (local.set $i) (i64.const 1) (local.set $res) (block $done (loop $loop (local.get $i) (i64.const 0) (i64.eq) (if (then (br $done)) (else (local.get $i) (local.get $res) (i64.mul) (local.set $res) (local.get $i) (i64.const 1) (i64.sub) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-stack-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) local.get $n local.set $i i64.const 1 local.set $res block $done loop $loop local.get $i i64.const 0 i64.eq if $body br $done else $body local.get $i local.get $res i64.mul local.set $res local.get $i i64.const 1 i64.sub local.set $i end $body br $loop end $loop end $done local.get $res ) (func (export "fac-mixed") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) (block $done (loop $loop (i64.eq (local.get $i) (i64.const 0)) (if (then (br $done)) (else (i64.mul (local.get $i) (local.get $res)) (local.set $res) (i64.sub (local.get $i) (i64.const 1)) (local.set $i) ) ) (br $loop) ) ) (local.get $res) ) (func (export "fac-mixed-raw") (param $n i64) (result i64) (local $i i64) (local $res i64) (local.set $i (local.get $n)) (local.set $res (i64.const 1)) block $done loop $loop (i64.eq (local.get $i) (i64.const 0)) if br $done else (i64.mul (local.get $i) (local.get $res)) local.set $res (i64.sub (local.get $i) (i64.const 1)) local.set $i end br $loop end end local.get $res ) ) (assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776)) ;; Syntax of flat call_indirect (module (type $proc (func)) (table 1 funcref) (func (block i32.const 0 call_indirect) (loop i32.const 0 call_indirect) (if (i32.const 0) (then i32.const 0 call_indirect)) (if (i32.const 0) (then i32.const 0 call_indirect) (else i32.const 0 call_indirect) ) (block i32.const 0 call_indirect (type $proc)) (loop i32.const 0 call_indirect (type $proc)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc))) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc)) (else i32.const 0 call_indirect (type $proc)) ) (block i32.const 0 i32.const 0 call_indirect (param i32)) (loop i32.const 0 i32.const 0 call_indirect (param i32)) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32))) (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32)) (else i32.const 0 i32.const 0 call_indirect (param i32)) ) (block (result i32) i32.const 0 call_indirect (result i32)) (drop) (loop (result i32) i32.const 0 call_indirect (result i32)) (drop) (if (result i32) (i32.const 0) (then i32.const 0 call_indirect (result i32)) (else i32.const 0 call_indirect (result i32)) ) (drop) (block i32.const 0 call_indirect (type $proc) (param) (result)) (loop i32.const 0 call_indirect (type $proc) (param) (result)) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (result)) ) (if (i32.const 0) (then i32.const 0 call_indirect (type $proc) (param) (param) (result)) (else i32.const 0 call_indirect (type $proc) (param) (result) (result)) ) block i32.const 0 call_indirect end loop i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect end i32.const 0 if i32.const 0 call_indirect else i32.const 0 call_indirect end block i32.const 0 call_indirect (type $proc) end loop i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) end i32.const 0 if i32.const 0 call_indirect (type $proc) else i32.const 0 call_indirect (type $proc) end block i32.const 0 i32.const 0 call_indirect (param i32) end loop i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) end i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) else i32.const 0 i32.const 0 call_indirect (param i32) end block (result i32) i32.const 0 call_indirect (result i32) end drop loop (result i32) i32.const 0 call_indirect (result i32) end drop i32.const 0 if (result i32) i32.const 0 call_indirect (result i32) else i32.const 0 call_indirect (result i32) end drop block i32.const 0 call_indirect (type $proc) (param) (result) end loop i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) end i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) else i32.const 0 call_indirect (type $proc) (param) (param) (result) (result) end i32.const 0 call_indirect ) ) binaryen-version_108/test/spec/start.wast000066400000000000000000000036571423707623100207260ustar00rootroot00000000000000(assert_invalid (module (func) (start 1)) "unknown function" ) (assert_invalid (module (func $main (result i32) (return (i32.const 0))) (start $main) ) "start function" ) (assert_invalid (module (func $main (param $a i32)) (start $main) ) "start function" ) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start $main) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (memory (data "A")) (func $inc (i32.store8 (i32.const 0) (i32.add (i32.load8_u (i32.const 0)) (i32.const 1) ) ) ) (func $get (result i32) (return (i32.load8_u (i32.const 0))) ) (func $main (call $inc) (call $inc) (call $inc) ) (start 2) (export "inc" (func $inc)) (export "get" (func $get)) ) (assert_return (invoke "get") (i32.const 68)) (invoke "inc") (assert_return (invoke "get") (i32.const 69)) (invoke "inc") (assert_return (invoke "get") (i32.const 70)) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 1))) (start 1) ) (module (func $print_i32 (import "spectest" "print_i32") (param i32)) (func $main (call $print_i32 (i32.const 2))) (start $main) ) (module (func $print (import "spectest" "print")) (start $print) ) (assert_trap (module (func $main (unreachable)) (start $main)) "unreachable" ) (assert_malformed (module quote "(module (func $a (unreachable)) (func $b (unreachable)) (start $a) (start $b))") "multiple start sections" ) binaryen-version_108/test/spec/store.wast000066400000000000000000000234771423707623100207270ustar00rootroot00000000000000;; Store operator as the argument of control constructs and instructions (module (memory 1) (func (export "as-block-value") (block (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-loop-value") (loop (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-br-value") (block (br 0 (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-br_if-value") (block (br_if 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-br_if-value-cond") (block (br_if 0 (i32.const 6) (i32.store (i32.const 0) (i32.const 1))) ) ) (func (export "as-br_table-value") (block (br_table 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) ) ) (func (export "as-return-value") (return (i32.store (i32.const 0) (i32.const 1))) ) (func (export "as-if-then") (if (i32.const 1) (then (i32.store (i32.const 0) (i32.const 1)))) ) (func (export "as-if-else") (if (i32.const 0) (then) (else (i32.store (i32.const 0) (i32.const 1)))) ) ) (assert_return (invoke "as-block-value")) (assert_return (invoke "as-loop-value")) (assert_return (invoke "as-br-value")) (assert_return (invoke "as-br_if-value")) (assert_return (invoke "as-br_if-value-cond")) (assert_return (invoke "as-br_table-value")) (assert_return (invoke "as-return-value")) (assert_return (invoke "as-if-then")) (assert_return (invoke "as-if-else")) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store32 (local.get 0) (i32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i32.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (i64.store64 (local.get 0) (i64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f32.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store32 (local.get 0) (f32.const 0)))" ) "unknown operator" ) (assert_malformed (module quote "(memory 1)" "(func (param i32) (f64.store64 (local.get 0) (f64.const 0)))" ) "unknown operator" ) ;; store should have no retval (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty (i32.const 0) (i32.store) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-block (i32.const 0) (i32.const 0) (block (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-block (i32.const 0) (block (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-loop (i32.const 0) (i32.const 0) (loop (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-loop (i32.const 0) (loop (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-then (i32.const 0) (i32.const 0) (if (then (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-then (i32.const 0) (if (then (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-else (i32.const 0) (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-else (i32.const 0) (if (result i32) (then (i32.const 0)) (else (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br (i32.const 0) (i32.const 0) (block (br 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br (i32.const 0) (block (br 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_if (i32.const 0) (i32.const 0) (block (br_if 0 (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_if (i32.const 0) (block (br_if 0 (i32.const 0) (i32.store) (i32.const 1)) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-br_table (i32.const 0) (i32.const 0) (block (br_table 0 (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-br_table (i32.const 0) (block (br_table 0 (i32.const 0) (i32.store))) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-return (return (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-return (return (i32.const 0) (i32.store)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-select (select (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-select (select (i32.const 0) (i32.store) (i32.const 1) (i32.const 2)) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-address-empty-in-call (call 1 (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $type-value-empty-in-call (call 1 (i32.const 0) (i32.store)) ) (func (param i32) (result i32) (local.get 0)) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-address-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) (assert_invalid (module (memory 1) (func $f (param i32) (result i32) (local.get 0)) (type $sig (func (param i32) (result i32))) (table funcref (elem $f)) (func $type-value-empty-in-call_indirect (block (result i32) (call_indirect (type $sig) (i32.const 0) (i32.store) (i32.const 0) ) ) ) ) "type mismatch" ) ;; Type check (assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch") binaryen-version_108/test/spec/store_retval.wast000066400000000000000000000031111423707623100222630ustar00rootroot00000000000000(assert_invalid (module (func (param i32) (result i32) (local.set 0 (i32.const 1)))) "type mismatch" ) (assert_invalid (module (func (param i64) (result i64) (local.set 0 (i64.const 1)))) "type mismatch" ) (assert_invalid (module (func (param f32) (result f32) (local.set 0 (f32.const 1)))) "type mismatch" ) (assert_invalid (module (func (param f64) (result f64) (local.set 0 (f64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) "type mismatch" ) (assert_invalid (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) "type mismatch" ) binaryen-version_108/test/spec/struct.wast000066400000000000000000000064131423707623100211060ustar00rootroot00000000000000;; Binding structure (module (type $s0 (struct (field (ref 0) (ref 1) (ref $s0) (ref $s1)))) (type $s1 (struct (field (ref 0) (ref 1) (ref $s0) (ref $s1)))) (func (param (ref $forward))) (type $forward (struct)) ) (assert_invalid (module (type (struct (field (ref 1))))) "unknown type" ) (assert_invalid (module (type (struct (field (mut (ref 1)))))) "unknown type" ) ;; Basic instructions (module (type $vec (struct (field f32) (field $y (mut f32)) (field $z f32))) (func $get_0 (param $v (ref $vec)) (result f32) (struct.get $vec 0 (local.get $v)) ) (func (export "get_0") (result f32) (call $get_0 (struct.new_default_with_rtt $vec (rtt.canon $vec))) ) (func $set_get_y (param $v (ref $vec)) (param $y f32) (result f32) (struct.set $vec $y (local.get $v) (local.get $y)) (struct.get $vec $y (local.get $v)) ) (func (export "set_get_y") (param $y f32) (result f32) (call $set_get_y (struct.new_default_with_rtt $vec (rtt.canon $vec)) (local.get $y)) ) (func $set_get_1 (param $v (ref $vec)) (param $y f32) (result f32) (struct.set $vec 1 (local.get $v) (local.get $y)) (struct.get $vec $y (local.get $v)) ) (func (export "set_get_1") (param $y f32) (result f32) (call $set_get_1 (struct.new_default_with_rtt $vec (rtt.canon $vec)) (local.get $y)) ) ) (assert_return (invoke "get_0") (f32.const 0)) (assert_return (invoke "set_get_y" (f32.const 7)) (f32.const 7)) (assert_return (invoke "set_get_1" (f32.const 7)) (f32.const 7)) (assert_invalid (module (type $s (struct (field i64))) (func (export "struct.set-immutable") (param $s (ref $s)) (struct.set $s 0 (local.get $s) (i64.const 1)) ) ) "field is immutable" ) ;; Null dereference (module (type $t (struct (field i32) (field (mut i32)))) (func (export "struct.get-null") (local (ref null $t)) (drop (struct.get $t 1 (local.get 0))) ) (func (export "struct.set-null") (local (ref null $t)) (struct.set $t 1 (local.get 0) (i32.const 0)) ) ) (assert_trap (invoke "struct.get-null") "null structure") (assert_trap (invoke "struct.set-null") "null structure") (assert_invalid (module (type $t (struct (field i32) (field (mut i32)))) (func (export "struct.new-null") (local (ref null (rtt $t))) (drop (struct.new $t (i32.const 1) (i32.const 2) (local.get 0))) ) ) "type mismatch" ) (assert_invalid (module (type $t (struct (field i32) (field (mut i32)))) (func (export "struct.new_default-null") (local (ref null (rtt $t))) (drop (struct.new_default_with_rtt $t (local.get 0))) ) ) "type mismatch" ) (assert_invalid (module (type $A (struct (field i32))) (type $B (struct (field i64))) (global $glob (rtt $A) (rtt.sub $A (rtt.canon $B))) ) "invalid rtt" ) (assert_invalid (module (type $vec (struct (field i32))) (func $test (drop ;; too many arguments (struct.new_with_rtt $vec (i32.const 1) (i32.const 2) (rtt.canon $vec)) ) ) ) "invalid number of arguments to struct.new" ) (assert_invalid (module (type $vec (struct (field i32) (field i32))) (func $test (drop ;; too few arguments (struct.new_with_rtt $vec (i32.const 1) (rtt.canon $vec)) ) ) ) "invalid number of arguments to struct.new" ) binaryen-version_108/test/spec/switch.wast000066400000000000000000000113651423707623100210650ustar00rootroot00000000000000(module ;; Statement switch (func (export "stmt") (param $i i32) (result i32) (local $j i32) (local.set $j (i32.const 100)) (block $switch (block $7 (block $default (block $6 (block $5 (block $4 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (local.get $i) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (local.set $j (i32.sub (i32.const 0) (local.get $i))) (br $switch) ) ;; 4 (br $switch) ) ;; 5 (local.set $j (i32.const 101)) (br $switch) ) ;; 6 (local.set $j (i32.const 101)) ;; fallthrough ) ;; default (local.set $j (i32.const 102)) ) ;; 7 ;; fallthrough ) (return (local.get $j)) ) ;; Expression switch (func (export "expr") (param $i i64) (result i64) (local $j i64) (local.set $j (i64.const 100)) (return (block $switch (result i64) (block $7 (block $default (block $4 (block $5 (block $6 (block $3 (block $2 (block $1 (block $0 (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default (i32.wrap_i64 (local.get $i)) ) ) ;; 0 (return (local.get $i)) ) ;; 1 (nop) ;; fallthrough ) ;; 2 ;; fallthrough ) ;; 3 (br $switch (i64.sub (i64.const 0) (local.get $i))) ) ;; 6 (local.set $j (i64.const 101)) ;; fallthrough ) ;; 4 ;; fallthrough ) ;; 5 ;; fallthrough ) ;; default (br $switch (local.get $j)) ) ;; 7 (i64.const -5) ) ) ) ;; Argument switch (func (export "arg") (param $i i32) (result i32) (return (block $2 (result i32) (i32.add (i32.const 10) (block $1 (result i32) (i32.add (i32.const 100) (block $0 (result i32) (i32.add (i32.const 1000) (block $default (result i32) (br_table $0 $1 $2 $default (i32.mul (i32.const 2) (local.get $i)) (i32.and (i32.const 3) (local.get $i)) ) ) ) ) ) ) ) ) ) ) ;; Corner cases (func (export "corner") (result i32) (block (br_table 0 (i32.const 0)) ) (i32.const 1) ) ) (assert_return (invoke "stmt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "stmt" (i32.const 1)) (i32.const -1)) (assert_return (invoke "stmt" (i32.const 2)) (i32.const -2)) (assert_return (invoke "stmt" (i32.const 3)) (i32.const -3)) (assert_return (invoke "stmt" (i32.const 4)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const 5)) (i32.const 101)) (assert_return (invoke "stmt" (i32.const 6)) (i32.const 102)) (assert_return (invoke "stmt" (i32.const 7)) (i32.const 100)) (assert_return (invoke "stmt" (i32.const -10)) (i32.const 102)) (assert_return (invoke "expr" (i64.const 0)) (i64.const 0)) (assert_return (invoke "expr" (i64.const 1)) (i64.const -1)) (assert_return (invoke "expr" (i64.const 2)) (i64.const -2)) (assert_return (invoke "expr" (i64.const 3)) (i64.const -3)) (assert_return (invoke "expr" (i64.const 6)) (i64.const 101)) (assert_return (invoke "expr" (i64.const 7)) (i64.const -5)) (assert_return (invoke "expr" (i64.const -10)) (i64.const 100)) (assert_return (invoke "arg" (i32.const 0)) (i32.const 110)) (assert_return (invoke "arg" (i32.const 1)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 2)) (i32.const 4)) (assert_return (invoke "arg" (i32.const 3)) (i32.const 1116)) (assert_return (invoke "arg" (i32.const 4)) (i32.const 118)) (assert_return (invoke "arg" (i32.const 5)) (i32.const 20)) (assert_return (invoke "arg" (i32.const 6)) (i32.const 12)) (assert_return (invoke "arg" (i32.const 7)) (i32.const 1124)) (assert_return (invoke "arg" (i32.const 8)) (i32.const 126)) (assert_return (invoke "corner") (i32.const 1)) (assert_invalid (module (func (br_table 3 (i32.const 0)))) "unknown label") binaryen-version_108/test/spec/table.wast000066400000000000000000000012561423707623100206510ustar00rootroot00000000000000 ;; Test table section structure (module (table 0 funcref)) (module (table 0 (ref null func))) (module (table 1 funcref)) (module (table 0 0 funcref)) (module (table 0 1 funcref)) (module (table 0 1 (ref null func))) (module (table 1 256 funcref)) (module (table 0 65536 externref)) ;; (module (table 0 0xffff_ffff funcref)) (module (table 0 funcref) (table 0 funcref)) (module (table (import "spectest" "table") 0 funcref) (table 0 funcref)) (assert_invalid (module (elem (i32.const 0))) "unknown table") (assert_invalid (module (elem (i32.const 0) $f) (func $f)) "unknown table") (assert_invalid (module (table 1 0 funcref)) "size minimum must not be greater than maximum" ) binaryen-version_108/test/spec/table_get.wast000066400000000000000000000034621423707623100215110ustar00rootroot00000000000000(module (table $t2 2 externref) (table $t3 3 funcref) (elem (table $t3) (i32.const 1) func $dummy) (func $dummy) (func (export "get-externref") (param $i i32) (result externref) (table.get $t2 (local.get $i)) ) (func $f3 (export "get-funcref") (param $i i32) (result funcref) (table.get $t3 (local.get $i)) ) (func (export "is_null-funcref") (param $i i32) (result i32) (ref.is_null (call $f3 (local.get $i))) ) ) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_return (invoke "is_null-funcref" (i32.const 1)) (i32.const 0)) (assert_trap (invoke "get-externref" (i32.const 2)) "out of bounds") (assert_trap (invoke "get-funcref" (i32.const 3)) "out of bounds") (assert_trap (invoke "get-externref" (i32.const -1)) "out of bounds") (assert_trap (invoke "get-funcref" (i32.const -1)) "out of bounds") ;; Type errors (assert_invalid (module (table $t 10 externref) (func $type-index-empty-vs-i32 (result externref) (table.get $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-index-f32-vs-i32 (result externref) (table.get $t (f32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-externref-vs-empty (table.get $t (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-externref-vs-funcref (result funcref) (table.get $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t1 1 funcref) (table $t2 1 externref) (func $type-result-externref-vs-funcref-multi (result funcref) (table.get $t2 (i32.const 0)) ) ) "type mismatch" ) binaryen-version_108/test/spec/table_grow.wast000066400000000000000000000123671423707623100217140ustar00rootroot00000000000000(module (table $t 0 externref) (func (export "get") (param $i i32) (result externref) (table.get $t (local.get $i))) (func (export "set") (param $i i32) (param $r externref) (table.set $t (local.get $i) (local.get $r))) (func (export "grow") (param $sz i32) (param $init externref) (result i32) (table.grow $t (local.get $init) (local.get $sz)) ) (func (export "size") (result i32) (table.size $t)) ) (assert_return (invoke "size") (i32.const 0)) ;; (assert_trap (invoke "set" (i32.const 0) (ref.extern 2)) "out of bounds table access") (assert_trap (invoke "get" (i32.const 0)) "out of bounds table access") (assert_return (invoke "grow" (i32.const 1) (ref.null extern)) (i32.const 0)) (assert_return (invoke "size") (i32.const 1)) (assert_return (invoke "get" (i32.const 0)) (ref.null extern)) ;; (assert_return (invoke "set" (i32.const 0) (ref.extern 2))) ;; (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) ;; (assert_trap (invoke "set" (i32.const 1) (ref.extern 2)) "out of bounds table access") ;; (assert_trap (invoke "get" (i32.const 1)) "out of bounds table access") ;; (assert_return (invoke "grow" (i32.const 4) (ref.extern 3)) (i32.const 1)) ;; (assert_return (invoke "size") (i32.const 5)) ;; (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) ;; (assert_return (invoke "set" (i32.const 0) (ref.extern 2))) ;; (assert_return (invoke "get" (i32.const 0)) (ref.extern 2)) ;; (assert_return (invoke "get" (i32.const 1)) (ref.extern 3)) ;; (assert_return (invoke "get" (i32.const 4)) (ref.extern 3)) ;; (assert_return (invoke "set" (i32.const 4) (ref.extern 4))) ;; (assert_return (invoke "get" (i32.const 4)) (ref.extern 4)) ;; (assert_trap (invoke "set" (i32.const 5) (ref.extern 2)) "out of bounds table access") ;; (assert_trap (invoke "get" (i32.const 5)) "out of bounds table access") ;; Reject growing to size outside i32 value range ;; TODO: parse error ;; (module ;; (table $t 0x10 funcref) ;; (elem declare func $f) ;; (func $f (export "grow") (result i32) ;; (table.grow $t (ref.func $f) (i32.const 0xffff_fff0)) ;; ) ;; ) ;; (assert_return (invoke "grow") (i32.const -1)) (module (table $t 0 externref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null extern) (local.get 0)) ) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 2)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 800)) (i32.const 3)) (module (table $t 0 10 externref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null extern) (local.get 0)) ) ) (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) (assert_return (invoke "grow" (i32.const 2)) (i32.const 2)) (assert_return (invoke "grow" (i32.const 6)) (i32.const 4)) (assert_return (invoke "grow" (i32.const 0)) (i32.const 10)) (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) (assert_return (invoke "grow" (i32.const 0x10000)) (i32.const -1)) (module (table $t 10 funcref) (func (export "grow") (param i32) (result i32) (table.grow $t (ref.null func) (local.get 0)) ) (elem declare func 1) (func (export "check-table-null") (param i32 i32) (result funcref) (local funcref) (local.set 2 (ref.func 1)) (block (loop (local.set 2 (table.get $t (local.get 0))) (br_if 1 (i32.eqz (ref.is_null (local.get 2)))) (br_if 1 (i32.ge_u (local.get 0) (local.get 1))) (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br_if 0 (i32.le_u (local.get 0) (local.get 1))) ) ) (local.get 2) ) ) (assert_return (invoke "check-table-null" (i32.const 0) (i32.const 9)) (ref.null func)) (assert_return (invoke "grow" (i32.const 10)) (i32.const 10)) (assert_return (invoke "check-table-null" (i32.const 0) (i32.const 19)) (ref.null func)) ;; Type errors (assert_invalid (module (table $t 0 externref) (func $type-init-size-empty-vs-i32-externref (result i32) (table.grow $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-size-empty-vs-i32 (result i32) (table.grow $t (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-init-empty-vs-externref (result i32) (table.grow $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 externref) (func $type-size-f32-vs-i32 (result i32) (table.grow $t (ref.null extern) (f32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 0 funcref) (func $type-init-externref-vs-funcref (param $r externref) (result i32) (table.grow $t (local.get $r) (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-empty (table.grow $t (ref.null extern) (i32.const 0)) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-f32 (result f32) (table.grow $t (ref.null extern) (i32.const 0)) ) ) "type mismatch" ) binaryen-version_108/test/spec/table_set.wast000066400000000000000000000070401423707623100215210ustar00rootroot00000000000000(module (table $t2 1 externref) (table $t3 2 funcref) (elem (table $t3) (i32.const 1) func $dummy) (func $dummy) (func (export "get-externref") (param $i i32) (result externref) (table.get $t2 (local.get $i)) ) (func $f3 (export "get-funcref") (param $i i32) (result funcref) (table.get $t3 (local.get $i)) ) (func (export "set-externref") (param $i i32) (param $r externref) (table.set $t2 (local.get $i) (local.get $r)) ) (func (export "set-funcref") (param $i i32) (param $r funcref) (table.set $t3 (local.get $i) (local.get $r)) ) (func (export "set-funcref-from") (param $i i32) (param $j i32) (table.set $t3 (local.get $i) (table.get $t3 (local.get $j))) ) (func (export "is_null-funcref") (param $i i32) (result i32) (ref.is_null (call $f3 (local.get $i))) ) ) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) ;; (assert_return (invoke "set-externref" (i32.const 0) (ref.extern 1))) ;; (assert_return (invoke "get-externref" (i32.const 0)) (ref.extern 1)) (assert_return (invoke "set-externref" (i32.const 0) (ref.null extern))) (assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_return (invoke "set-funcref-from" (i32.const 0) (i32.const 1))) (assert_return (invoke "is_null-funcref" (i32.const 0)) (i32.const 0)) (assert_return (invoke "set-funcref" (i32.const 0) (ref.null func))) (assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) (assert_trap (invoke "set-externref" (i32.const 2) (ref.null extern)) "out of bounds table access") (assert_trap (invoke "set-funcref" (i32.const 3) (ref.null func)) "out of bounds table access") (assert_trap (invoke "set-externref" (i32.const -1) (ref.null extern)) "out of bounds table access") (assert_trap (invoke "set-funcref" (i32.const -1) (ref.null func)) "out of bounds table access") ;; (assert_trap (invoke "set-externref" (i32.const 2) (ref.extern 0)) "out of bounds table access") (assert_trap (invoke "set-funcref-from" (i32.const 3) (i32.const 1)) "out of bounds table access") ;; (assert_trap (invoke "set-externref" (i32.const -1) (ref.extern 0)) "out of bounds table access") (assert_trap (invoke "set-funcref-from" (i32.const -1) (i32.const 1)) "out of bounds table access") ;; Type errors (assert_invalid (module (table $t 10 externref) (func $type-index-value-empty-vs-i32-externref (table.set $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-index-empty-vs-i32 (table.set $t (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-value-empty-vs-externref (table.set $t (i32.const 1)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-size-f32-vs-i32 (table.set $t (f32.const 1) (ref.null extern)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 funcref) (func $type-value-externref-vs-funcref (param $r externref) (table.set $t (i32.const 1) (local.get $r)) ) ) "type mismatch" ) (assert_invalid (module (table $t1 1 externref) (table $t2 1 funcref) (func $type-value-externref-vs-funcref-multi (param $r externref) (table.set $t2 (i32.const 0) (local.get $r)) ) ) "type mismatch" ) (assert_invalid (module (table $t 10 externref) (func $type-result-empty-vs-num (result i32) (table.set $t (i32.const 0) (ref.null extern)) ) ) "type mismatch" ) binaryen-version_108/test/spec/table_size.wast000066400000000000000000000054631423707623100217070ustar00rootroot00000000000000(module (table $t0 0 externref) (table $t1 1 externref) (table $t2 0 2 externref) (table $t3 3 8 externref) (func (export "size-t0") (result i32) (table.size $t0)) (func (export "size-t1") (result i32) (table.size $t1)) (func (export "size-t2") (result i32) (table.size $t2)) (func (export "size-t3") (result i32) (table.size $t3)) (func (export "grow-t0") (param $sz i32) (drop (table.grow $t0 (ref.null extern) (local.get $sz))) ) (func (export "grow-t1") (param $sz i32) (drop (table.grow $t1 (ref.null extern) (local.get $sz))) ) (func (export "grow-t2") (param $sz i32) (drop (table.grow $t2 (ref.null extern) (local.get $sz))) ) (func (export "grow-t3") (param $sz i32) (drop (table.grow $t3 (ref.null extern) (local.get $sz))) ) ) (assert_return (invoke "size-t0") (i32.const 0)) (assert_return (invoke "grow-t0" (i32.const 1))) (assert_return (invoke "size-t0") (i32.const 1)) (assert_return (invoke "grow-t0" (i32.const 4))) (assert_return (invoke "size-t0") (i32.const 5)) (assert_return (invoke "grow-t0" (i32.const 0))) (assert_return (invoke "size-t0") (i32.const 5)) (assert_return (invoke "size-t1") (i32.const 1)) (assert_return (invoke "grow-t1" (i32.const 1))) (assert_return (invoke "size-t1") (i32.const 2)) (assert_return (invoke "grow-t1" (i32.const 4))) (assert_return (invoke "size-t1") (i32.const 6)) (assert_return (invoke "grow-t1" (i32.const 0))) (assert_return (invoke "size-t1") (i32.const 6)) (assert_return (invoke "size-t2") (i32.const 0)) (assert_return (invoke "grow-t2" (i32.const 3))) (assert_return (invoke "size-t2") (i32.const 0)) (assert_return (invoke "grow-t2" (i32.const 1))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 0))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 4))) (assert_return (invoke "size-t2") (i32.const 1)) (assert_return (invoke "grow-t2" (i32.const 1))) (assert_return (invoke "size-t2") (i32.const 2)) (assert_return (invoke "size-t3") (i32.const 3)) (assert_return (invoke "grow-t3" (i32.const 1))) (assert_return (invoke "size-t3") (i32.const 4)) (assert_return (invoke "grow-t3" (i32.const 3))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 0))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 2))) (assert_return (invoke "size-t3") (i32.const 7)) (assert_return (invoke "grow-t3" (i32.const 1))) (assert_return (invoke "size-t3") (i32.const 8)) ;; Type errors (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-empty (table.size $t) ) ) "type mismatch" ) (assert_invalid (module (table $t 1 externref) (func $type-result-i32-vs-f32 (result f32) (table.size $t) ) ) "type mismatch" ) binaryen-version_108/test/spec/tags.wast000066400000000000000000000012221423707623100205110ustar00rootroot00000000000000;; Test tags (module (tag (param i32)) (tag $e (param i32 f32)) (tag $e-params0 (param i32 f32)) (tag $e-params1 (param i32) (param f32)) (tag $e-export (export "ex0") (param i32)) (tag $e-import (import "env" "im0") (param i32)) (import "env" "im1" (tag (param i32 f32))) (export "ex1" (tag $e)) ) (assert_invalid (module (tag $e (param i32) (result i32))) "Tag type's result type should be none" ) (assert_invalid (module (tag $e (attr 1) (param i32))) "Currently only attribute 0 is supported" ) (assert_invalid (module (type $t (param i32)) (tag $e (type $t) (param i32 f32)) ) "type and param don't match" ) binaryen-version_108/test/spec/tee_local.wast000066400000000000000000000155731423707623100215200ustar00rootroot00000000000000;; Test `local.tee` operator (module ;; Typing (func (export "type-local-i32") (result i32) (local i32) (local.tee 0 (i32.const 0))) (func (export "type-local-i64") (result i64) (local i64) (local.tee 0 (i64.const 0))) (func (export "type-local-f32") (result f32) (local f32) (local.tee 0 (f32.const 0))) (func (export "type-local-f64") (result f64) (local f64) (local.tee 0 (f64.const 0))) (func (export "type-param-i32") (param i32) (result i32) (local.tee 0 (i32.const 10))) (func (export "type-param-i64") (param i64) (result i64) (local.tee 0 (i64.const 11))) (func (export "type-param-f32") (param f32) (result f32) (local.tee 0 (f32.const 11.1))) (func (export "type-param-f64") (param f64) (result f64) (local.tee 0 (f64.const 12.2))) (func (export "type-mixed") (param i64 f32 f64 i32 i32) (local f32 i64 i64 f64) (drop (i64.eqz (local.tee 0 (i64.const 0)))) (drop (f32.neg (local.tee 1 (f32.const 0)))) (drop (f64.neg (local.tee 2 (f64.const 0)))) (drop (i32.eqz (local.tee 3 (i32.const 0)))) (drop (i32.eqz (local.tee 4 (i32.const 0)))) (drop (f32.neg (local.tee 5 (f32.const 0)))) (drop (i64.eqz (local.tee 6 (i64.const 0)))) (drop (i64.eqz (local.tee 7 (i64.const 0)))) (drop (f64.neg (local.tee 8 (f64.const 0)))) ) ;; Writing (func (export "write") (param i64 f32 f64 i32 i32) (result i64) (local f32 i64 i64 f64) (drop (local.tee 1 (f32.const -0.3))) (drop (local.tee 3 (i32.const 40))) (drop (local.tee 4 (i32.const -7))) (drop (local.tee 5 (f32.const 5.5))) (drop (local.tee 6 (i64.const 6))) (drop (local.tee 8 (f64.const 8))) (i64.trunc_f64_s (f64.add (f64.convert_i64_u (local.get 0)) (f64.add (f64.promote_f32 (local.get 1)) (f64.add (local.get 2) (f64.add (f64.convert_i32_u (local.get 3)) (f64.add (f64.convert_i32_s (local.get 4)) (f64.add (f64.promote_f32 (local.get 5)) (f64.add (f64.convert_i64_u (local.get 6)) (f64.add (f64.convert_i64_u (local.get 7)) (local.get 8) ) ) ) ) ) ) ) ) ) ) ;; Result (func (export "result") (param i64 f32 f64 i32 i32) (result f64) (local f32 i64 i64 f64) (f64.add (f64.convert_i64_u (local.tee 0 (i64.const 1))) (f64.add (f64.promote_f32 (local.tee 1 (f32.const 2))) (f64.add (local.tee 2 (f64.const 3.3)) (f64.add (f64.convert_i32_u (local.tee 3 (i32.const 4))) (f64.add (f64.convert_i32_s (local.tee 4 (i32.const 5))) (f64.add (f64.promote_f32 (local.tee 5 (f32.const 5.5))) (f64.add (f64.convert_i64_u (local.tee 6 (i64.const 6))) (f64.add (f64.convert_i64_u (local.tee 7 (i64.const 0))) (local.tee 8 (f64.const 8)) ) ) ) ) ) ) ) ) ) ) (assert_return (invoke "type-local-i32") (i32.const 0)) (assert_return (invoke "type-local-i64") (i64.const 0)) (assert_return (invoke "type-local-f32") (f32.const 0)) (assert_return (invoke "type-local-f64") (f64.const 0)) (assert_return (invoke "type-param-i32" (i32.const 2)) (i32.const 10)) (assert_return (invoke "type-param-i64" (i64.const 3)) (i64.const 11)) (assert_return (invoke "type-param-f32" (f32.const 4.4)) (f32.const 11.1)) (assert_return (invoke "type-param-f64" (f64.const 5.5)) (f64.const 12.2)) (assert_return (invoke "type-mixed" (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) ) ) (assert_return (invoke "write" (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) ) (i64.const 56) ) (assert_return (invoke "result" (i64.const -1) (f32.const -2) (f64.const -3.3) (i32.const -4) (i32.const -5) ) (f64.const 34.8) ) ;; Invalid typing of access to locals (assert_invalid (module (func $type-local-num-vs-num (result i64) (local i32) (local.tee 0 (i32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f32) (i32.eqz (local.tee 0 (f32.const 0))))) "type mismatch" ) (assert_invalid (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (local.tee 1 (i64.const 0))))) "type mismatch" ) (assert_invalid (module (func $type-local-arg-void-vs-num (local i32) (local.tee 0 (nop)))) "type mismatch" ) (assert_invalid (module (func $type-local-arg-num-vs-num (local i32) (local.tee 0 (f32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-arg-num-vs-num (local f32) (local.tee 0 (f64.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-local-arg-num-vs-num (local f64 i64) (local.tee 1 (f64.const 0)))) "type mismatch" ) ;; Invalid typing of access to parameters (assert_invalid (module (func $type-param-num-vs-num (param i32) (result i64) (local.get 0))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f32) (i32.eqz (local.get 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (local.get 1)))) "type mismatch" ) (assert_invalid (module (func $type-param-arg-void-vs-num (param i32) (local.tee 0 (nop)))) "type mismatch" ) (assert_invalid (module (func $type-param-arg-num-vs-num (param i32) (local.tee 0 (f32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-arg-num-vs-num (param f32) (local.tee 0 (f64.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-param-arg-num-vs-num (param f64 i64) (local.tee 1 (f64.const 0)))) "type mismatch" ) ;; Invalid local index (assert_invalid (module (func $unbound-local (local i32 i64) (local.get 3))) "unknown local" ) (assert_invalid (module (func $large-local (local i32 i64) (local.get 14324343))) "unknown local" ) (assert_invalid (module (func $unbound-param (param i32 i64) (local.get 2))) "unknown local" ) (assert_invalid (module (func $large-param (local i32 i64) (local.get 714324343))) "unknown local" ) (assert_invalid (module (func $unbound-mixed (param i32) (local i32 i64) (local.get 3))) "unknown local" ) (assert_invalid (module (func $large-mixed (param i64) (local i32 i64) (local.get 214324343))) "unknown local" ) (assert_invalid (module (func $type-mixed-arg-num-vs-num (param f32) (local i32) (local.tee 1 (f32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-mixed-arg-num-vs-num (param i64 i32) (local f32) (local.tee 1 (f32.const 0)))) "type mismatch" ) (assert_invalid (module (func $type-mixed-arg-num-vs-num (param i64) (local f64 i64) (local.tee 1 (i64.const 0)))) "type mismatch" ) binaryen-version_108/test/spec/token.wast000066400000000000000000000002711423707623100206760ustar00rootroot00000000000000;; Test tokenization (assert_malformed (module quote "(func (drop (i32.const0)))") "unknown operator" ) (assert_malformed (module quote "(func br 0drop)") "unknown operator" ) binaryen-version_108/test/spec/traps.wast000066400000000000000000000142061423707623100207120ustar00rootroot00000000000000;; Test that traps are preserved even in instructions which might otherwise ;; be dead-code-eliminated. These functions all perform an operation and ;; discard its return value. (module (func (export "no_dce.i32.div_s") (param $x i32) (param $y i32) (drop (i32.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.div_u") (param $x i32) (param $y i32) (drop (i32.div_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_s") (param $x i64) (param $y i64) (drop (i64.div_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.div_u") (param $x i64) (param $y i64) (drop (i64.div_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") (assert_trap (invoke "no_dce.i64.div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") (module (func (export "no_dce.i32.rem_s") (param $x i32) (param $y i32) (drop (i32.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i32.rem_u") (param $x i32) (param $y i32) (drop (i32.rem_u (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_s") (param $x i64) (param $y i64) (drop (i64.rem_s (local.get $x) (local.get $y)))) (func (export "no_dce.i64.rem_u") (param $x i64) (param $y i64) (drop (i64.rem_u (local.get $x) (local.get $y)))) ) (assert_trap (invoke "no_dce.i32.rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i32.rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") (assert_trap (invoke "no_dce.i64.rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") (module (func (export "no_dce.i32.trunc_f32_s") (param $x f32) (drop (i32.trunc_f32_s (local.get $x)))) (func (export "no_dce.i32.trunc_f32_u") (param $x f32) (drop (i32.trunc_f32_u (local.get $x)))) (func (export "no_dce.i32.trunc_f64_s") (param $x f64) (drop (i32.trunc_f64_s (local.get $x)))) (func (export "no_dce.i32.trunc_f64_u") (param $x f64) (drop (i32.trunc_f64_u (local.get $x)))) (func (export "no_dce.i64.trunc_f32_s") (param $x f32) (drop (i64.trunc_f32_s (local.get $x)))) (func (export "no_dce.i64.trunc_f32_u") (param $x f32) (drop (i64.trunc_f32_u (local.get $x)))) (func (export "no_dce.i64.trunc_f64_s") (param $x f64) (drop (i64.trunc_f64_s (local.get $x)))) (func (export "no_dce.i64.trunc_f64_u") (param $x f64) (drop (i64.trunc_f64_u (local.get $x)))) ) (assert_trap (invoke "no_dce.i32.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i32.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_s" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f32_u" (f32.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_s" (f64.const nan)) "invalid conversion to integer") (assert_trap (invoke "no_dce.i64.trunc_f64_u" (f64.const nan)) "invalid conversion to integer") (module (memory 1) (func (export "no_dce.i32.load") (param $i i32) (drop (i32.load (local.get $i)))) (func (export "no_dce.i32.load16_s") (param $i i32) (drop (i32.load16_s (local.get $i)))) (func (export "no_dce.i32.load16_u") (param $i i32) (drop (i32.load16_u (local.get $i)))) (func (export "no_dce.i32.load8_s") (param $i i32) (drop (i32.load8_s (local.get $i)))) (func (export "no_dce.i32.load8_u") (param $i i32) (drop (i32.load8_u (local.get $i)))) (func (export "no_dce.i64.load") (param $i i32) (drop (i64.load (local.get $i)))) (func (export "no_dce.i64.load32_s") (param $i i32) (drop (i64.load32_s (local.get $i)))) (func (export "no_dce.i64.load32_u") (param $i i32) (drop (i64.load32_u (local.get $i)))) (func (export "no_dce.i64.load16_s") (param $i i32) (drop (i64.load16_s (local.get $i)))) (func (export "no_dce.i64.load16_u") (param $i i32) (drop (i64.load16_u (local.get $i)))) (func (export "no_dce.i64.load8_s") (param $i i32) (drop (i64.load8_s (local.get $i)))) (func (export "no_dce.i64.load8_u") (param $i i32) (drop (i64.load8_u (local.get $i)))) (func (export "no_dce.f32.load") (param $i i32) (drop (f32.load (local.get $i)))) (func (export "no_dce.f64.load") (param $i i32) (drop (f64.load (local.get $i)))) ) (assert_trap (invoke "no_dce.i32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i32.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load32_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load16_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_s" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.i64.load8_u" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f32.load" (i32.const 65536)) "out of bounds memory access") (assert_trap (invoke "no_dce.f64.load" (i32.const 65536)) "out of bounds memory access") binaryen-version_108/test/spec/tuples.wast000066400000000000000000000001671423707623100210760ustar00rootroot00000000000000(assert_invalid (module (func $foo (local $temp ((ref func) i32)) ) ) "var must be defaultable" ) binaryen-version_108/test/spec/type.wast000066400000000000000000000032171423707623100205420ustar00rootroot00000000000000;; Test type definitions (module (type (func)) (type $t (func)) (type (func (param i32))) (type (func (param $x i32))) (type (func (result i32))) (type (func (param i32) (result i32))) (type (func (param $x i32) (result i32))) (type (func (param f32 f64))) ;; (type (func (result i64 f32))) ;; (type (func (param i32 i64) (result f32 f64))) (type (func (param f32) (param f64))) (type (func (param $x f32) (param f64))) (type (func (param f32) (param $y f64))) (type (func (param $x f32) (param $y f64))) ;; (type (func (result i64) (result f32))) ;; (type (func (param i32) (param i64) (result f32) (result f64))) ;; (type (func (param $x i32) (param $y i64) (result f32) (result f64))) (type (func (param f32 f64) (param $x i32) (param f64 i32 i32))) ;; (type (func (result i64 i64 f32) (result f32 i32))) ;; (type ;; (func (param i32 i32) (param i64 i32) (result f32 f64) (result f64 i32)) ;; ) (type (func (param) (param $x f32) (param) (param) (param f64 i32) (param))) ;; (type ;; (func (result) (result) (result i64 i64) (result) (result f32) (result)) ;; ) ;; (type ;; (func ;; (param i32 i32) (param i64 i32) (param) (param $x i32) (param) ;; (result) (result f32 f64) (result f64 i32) (result) ;; ) ;; ) ) (assert_malformed (module quote "(type (func (result i32) (param i32)))") "result before parameter" ) (assert_malformed (module quote "(type (func (result $x i32)))") "unexpected token" ) (assert_invalid (module (type (func (result i32 i32)))) "invalid result arity" ) (assert_invalid (module (type (func (result i32) (result i32)))) "invalid result arity" ) binaryen-version_108/test/spec/typecheck.wast000066400000000000000000000455771423707623100215570ustar00rootroot00000000000000;; TODO: move all tests in this file to appropriate operator-specific files. (assert_invalid (module (func $type-unary-operand-missing (i32.eqz) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-missing-in-block (i32.const 0) (block (i32.eqz) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-missing-in-loop (i32.const 0) (loop (i32.eqz) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-missing-in-if (i32.const 0) (i32.const 0) (if (then (i32.eqz) (drop))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-operand-missing-in-else (i32.const 0) (i32.const 0) (if i32 (then (i32.const 0)) (else (i32.eqz))) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-missing (i32.add) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-missing (i32.const 0) (i32.add) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-missing-in-block (i32.const 0) (i32.const 0) (block (i32.add) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-missing-in-block (i32.const 0) (block (i32.const 0) (i32.add) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-missing-in-loop (i32.const 0) (i32.const 0) (loop (i32.add) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-missing-in-loop (i32.const 0) (loop (i32.const 0) (i32.add) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-missing-in-if (i32.const 0) (i32.const 0) (i32.const 0) (if (i32.add) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-missing-in-if (i32.const 0) (i32.const 0) (if (i32.const 0) (i32.add) (drop)) )) "type mismatch" ) (assert_invalid (module (func $type-binary-1st-operand-missing-in-else (i32.const 0) (i32.const 0) (i32.const 0) (if i32 (then (i32.const 0)) (else (i32.add) (i32.const 0))) (drop) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-binary-2nd-operand-missing-in-else (i32.const 0) (i32.const 0) (if i32 (then (i32.const 0)) (else (i32.add))) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-if-operand-missing (if (then)) )) "type mismatch" ) (assert_invalid (module (func $type-if-operand-missing-in-block (i32.const 0) (block (if (then))) )) "type mismatch" ) (assert_invalid (module (func $type-if-operand-missing-in-loop (i32.const 0) (loop (if (then))) )) "type mismatch" ) (assert_invalid (module (func $type-if-operand-missing-in-if (i32.const 0) (i32.const 0) (if (then (if (then)))) )) "type mismatch" ) (assert_invalid (module (func $type-if-operand-missing-in-else (i32.const 0) (i32.const 0) (if i32 (then (i32.const 0)) (else (if (then)) (i32.const 0))) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-br-operand-missing (block i32 (br 0)) (i32.eqz) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-br-operand-missing-in-block (i32.const 0) (block i32 (br 0)) (i32.eqz) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-br-operand-missing-in-loop (i32.const 0) (loop i32 (br 0)) (i32.eqz) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-br-operand-missing-in-if (block (i32.const 0) (i32.const 0) (if i32 (then (br 0))) ) (i32.eqz) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-br-operand-missing-in-else (block (i32.const 0) (i32.const 0) (if i32 (then (i32.const 0)) (else (br 0))) ) (i32.eqz) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-return-operand-missing (result i32) (return) )) "type mismatch" ) (assert_invalid (module (func $type-return-operand-missing-in-block (result i32) (i32.const 0) (block (return)) )) "type mismatch" ) (assert_invalid (module (func $type-return-operand-missing-in-loop (result i32) (i32.const 0) (loop (return)) )) "type mismatch" ) (assert_invalid (module (func $type-return-operand-missing-in-if (result i32) (i32.const 0) (i32.const 0) (if (then (return))) )) "type mismatch" ) (assert_invalid (module (func $type-return-operand-missing-in-else (result i32) (i32.const 0) (i32.const 0) (if i32 (then (i32.const 0)) (else (return))) (drop) )) "type mismatch" ) ;; TODO(stack): more of the above ;; if condition (assert_invalid (module (func (if (f32.const 0) (nop) (nop)))) "type mismatch") ;; br_if condition (assert_invalid (module (func (block (br_if 0 (f32.const 0))))) "type mismatch") ;; br_table key (assert_invalid (module (func (block (br_table 0 (f32.const 0))))) "type mismatch") ;; call params (assert_invalid (module (func (param i32)) (func (call 0 (f32.const 0)))) "type mismatch") (assert_invalid (module (type (func (param i32))) (func (type 0)) (table 0 funcref) (func (call_indirect (type 0) (i32.const 0) (f32.const 0)))) "type mismatch") ;; call_indirect (type index) (assert_invalid (module (type (func)) (func (type 0)) (table 0 funcref) (func (call_indirect (type 0) (f32.const 0)))) "type mismatch") ;; return (assert_invalid (module (func (result i32) (return (f32.const 0)))) "type mismatch") ;; local.set (assert_invalid (module (func (local i32) (local.set 0 (f32.const 0)))) "type mismatch") ;; load index (assert_invalid (module (memory 1) (func (i32.load (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.load8_s (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.load8_u (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.load16_s (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.load16_u (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.load (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.load8_s (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.load8_u (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.load16_s (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.load16_u (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.load32_s (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.load32_u (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.load (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.load (f32.const 0)))) "type mismatch") ;; store index (assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") ;; store value (assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") (assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch") ;; binary (assert_invalid (module (func (i32.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.and (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.div_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.div_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.or (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.rem_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.rem_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.rotl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.rotr (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.shl (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.shr_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.shr_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.sub (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.xor (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.add (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.and (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.div_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.div_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.mul (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.or (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.rem_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.rem_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.rotl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.rotr (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.shl (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.shr_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.shr_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.sub (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.xor (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f32.add (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.copysign (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.div (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.max (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.min (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.mul (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.sub (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.add (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.copysign (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.div (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.max (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.min (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.mul (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.sub (i64.const 0) (f32.const 0)))) "type mismatch") ;; unary (assert_invalid (module (func (i32.eqz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i32.clz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i32.ctz (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i32.popcnt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i64.eqz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.clz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.ctz (i32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.popcnt (i32.const 0)))) "type mismatch") (assert_invalid (module (func (f32.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.neg (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.trunc (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.abs (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.ceil (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.floor (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.nearest (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.neg (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.sqrt (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.trunc (i64.const 0)))) "type mismatch") ;; compare (assert_invalid (module (func (i32.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.ge_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.ge_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.gt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.gt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.le_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.le_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.lt_s (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.lt_u (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.ne (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.eq (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.le_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.le_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.ne (i32.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f32.eq (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.ge (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.gt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.le (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.lt (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.ne (i64.const 0) (f64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.eq (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.ge (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.gt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.le (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.lt (i64.const 0) (f32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.ne (i64.const 0) (f32.const 0)))) "type mismatch") ;; convert (assert_invalid (module (func (i32.wrap_i64 (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i32.trunc_f32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i32.trunc_f32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i32.trunc_f64_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i32.trunc_f64_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i32.reinterpret_f32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (i64.extend_i32_s (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.extend_i32_u (f32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.trunc_f32_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.trunc_f32_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.trunc_f64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.trunc_f64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (i64.reinterpret_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (f32.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f32.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (f32.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (f32.demote_f64 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (f32.reinterpret_i32 (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.convert_i32_s (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.convert_i32_u (i64.const 0)))) "type mismatch") (assert_invalid (module (func (f64.convert_i64_s (i32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.promote_f32 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (f64.reinterpret_i64 (i32.const 0)))) "type mismatch") ;; memory.grow (assert_invalid (module (memory 1) (func (memory.grow (f32.const 0)))) "type mismatch") binaryen-version_108/test/spec/unreachable.wast000066400000000000000000000234671423707623100220430ustar00rootroot00000000000000;; Test `unreachable` operator (module ;; Auxiliary definitions (func $dummy) (func $dummy3 (param i32 i32 i32)) (func (export "type-i32") (result i32) (unreachable)) (func (export "type-i64") (result i32) (unreachable)) (func (export "type-f32") (result f64) (unreachable)) (func (export "type-f64") (result f64) (unreachable)) (func (export "as-func-first") (result i32) (unreachable) (i32.const -1) ) (func (export "as-func-mid") (result i32) (call $dummy) (unreachable) (i32.const -1) ) (func (export "as-func-last") (call $dummy) (unreachable) ) (func (export "as-func-value") (result i32) (call $dummy) (unreachable) ) (func (export "as-block-first") (result i32) (block (result i32) (unreachable) (i32.const 2)) ) (func (export "as-block-mid") (result i32) (block (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-block-last") (block (nop) (call $dummy) (unreachable)) ) (func (export "as-block-value") (result i32) (block (result i32) (nop) (call $dummy) (unreachable)) ) (func (export "as-block-broke") (result i32) (block (result i32) (call $dummy) (br 0 (i32.const 1)) (unreachable)) ) (func (export "as-loop-first") (result i32) (loop (result i32) (unreachable) (i32.const 2)) ) (func (export "as-loop-mid") (result i32) (loop (result i32) (call $dummy) (unreachable) (i32.const 2)) ) (func (export "as-loop-last") (loop (nop) (call $dummy) (unreachable)) ) (func (export "as-loop-broke") (result i32) (block (result i32) (loop (result i32) (call $dummy) (br 1 (i32.const 1)) (unreachable)) ) ) (func (export "as-br-value") (result i32) (block (result i32) (br 0 (unreachable))) ) (func (export "as-br_if-cond") (block (br_if 0 (unreachable))) ) (func (export "as-br_if-value") (result i32) (block (result i32) (drop (br_if 0 (unreachable) (i32.const 1))) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block (result i32) (drop (br_if 0 (i32.const 6) (unreachable))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (unreachable))) ) (func (export "as-br_table-value") (result i32) (block (result i32) (br_table 0 0 0 (unreachable) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-2") (result i32) (block (result i32) (block (result i32) (br_table 0 1 (unreachable) (i32.const 1))) ) ) (func (export "as-br_table-value-index") (result i32) (block (result i32) (br_table 0 0 (i32.const 6) (unreachable)) (i32.const 7) ) ) (func (export "as-br_table-value-and-index") (result i32) (block (result i32) (br_table 0 0 (unreachable)) (i32.const 8)) ) (func (export "as-return-value") (result i64) (return (unreachable)) ) (func (export "as-if-cond") (result i32) (if (result i32) (unreachable) (then (i32.const 0)) (else (i32.const 1))) ) (func (export "as-if-then") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (unreachable)) (else (local.get 1))) ) (func (export "as-if-else") (param i32 i32) (result i32) (if (result i32) (local.get 0) (then (local.get 1)) (else (unreachable))) ) (func (export "as-if-then-no-else") (param i32 i32) (result i32) (if (local.get 0) (then (unreachable))) (local.get 1) ) (func (export "as-select-first") (param i32 i32) (result i32) (select (unreachable) (local.get 0) (local.get 1)) ) (func (export "as-select-second") (param i32 i32) (result i32) (select (local.get 0) (unreachable) (local.get 1)) ) (func (export "as-select-cond") (result i32) (select (i32.const 0) (i32.const 1) (unreachable)) ) (func (export "as-call-first") (call $dummy3 (unreachable) (i32.const 2) (i32.const 3)) ) (func (export "as-call-mid") (call $dummy3 (i32.const 1) (unreachable) (i32.const 3)) ) (func (export "as-call-last") (call $dummy3 (i32.const 1) (i32.const 2) (unreachable)) ) (type $sig (func (param i32 i32 i32))) (table funcref (elem $dummy3)) (func (export "as-call_indirect-func") (call_indirect (type $sig) (unreachable) (i32.const 1) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-first") (call_indirect (type $sig) (i32.const 0) (unreachable) (i32.const 2) (i32.const 3) ) ) (func (export "as-call_indirect-mid") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (unreachable) (i32.const 3) ) ) (func (export "as-call_indirect-last") (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (unreachable) ) ) (func (export "as-local.set-value") (local f32) (local.set 0 (unreachable)) ) (func (export "as-local.tee-value") (result f32) (local f32) (local.tee 0 (unreachable)) ) (global $a (mut f32) (f32.const 0)) (func (export "as-global.set-value") (result f32) (global.set $a (unreachable)) ) (memory 1) (func (export "as-load-address") (result f32) (f32.load (unreachable)) ) (func (export "as-loadN-address") (result i64) (i64.load8_s (unreachable)) ) (func (export "as-store-address") (f64.store (unreachable) (f64.const 7)) ) (func (export "as-store-value") (i64.store (i32.const 2) (unreachable)) ) (func (export "as-storeN-address") (i32.store8 (unreachable) (i32.const 7)) ) (func (export "as-storeN-value") (i64.store16 (i32.const 2) (unreachable)) ) (func (export "as-unary-operand") (result f32) (f32.neg (unreachable)) ) (func (export "as-binary-left") (result i32) (i32.add (unreachable) (i32.const 10)) ) (func (export "as-binary-right") (result i64) (i64.sub (i64.const 10) (unreachable)) ) (func (export "as-test-operand") (result i32) (i32.eqz (unreachable)) ) (func (export "as-compare-left") (result i32) (f64.le (unreachable) (f64.const 10)) ) (func (export "as-compare-right") (result i32) (f32.ne (f32.const 10) (unreachable)) ) (func (export "as-convert-operand") (result i32) (i32.wrap_i64 (unreachable)) ) (func (export "as-memory.grow-size") (result i32) (memory.grow (unreachable)) ) ) (assert_trap (invoke "type-i32") "unreachable") (assert_trap (invoke "type-i64") "unreachable") (assert_trap (invoke "type-f32") "unreachable") (assert_trap (invoke "type-f64") "unreachable") (assert_trap (invoke "as-func-first") "unreachable") (assert_trap (invoke "as-func-mid") "unreachable") (assert_trap (invoke "as-func-last") "unreachable") (assert_trap (invoke "as-func-value") "unreachable") (assert_trap (invoke "as-block-first") "unreachable") (assert_trap (invoke "as-block-mid") "unreachable") (assert_trap (invoke "as-block-last") "unreachable") (assert_trap (invoke "as-block-value") "unreachable") (assert_return (invoke "as-block-broke") (i32.const 1)) (assert_trap (invoke "as-loop-first") "unreachable") (assert_trap (invoke "as-loop-mid") "unreachable") (assert_trap (invoke "as-loop-last") "unreachable") (assert_return (invoke "as-loop-broke") (i32.const 1)) (assert_trap (invoke "as-br-value") "unreachable") (assert_trap (invoke "as-br_if-cond") "unreachable") (assert_trap (invoke "as-br_if-value") "unreachable") (assert_trap (invoke "as-br_if-value-cond") "unreachable") (assert_trap (invoke "as-br_table-index") "unreachable") (assert_trap (invoke "as-br_table-value") "unreachable") (assert_trap (invoke "as-br_table-value-2") "unreachable") (assert_trap (invoke "as-br_table-value-index") "unreachable") (assert_trap (invoke "as-br_table-value-and-index") "unreachable") (assert_trap (invoke "as-return-value") "unreachable") (assert_trap (invoke "as-if-cond") "unreachable") (assert_trap (invoke "as-if-then" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-else" (i32.const 0) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-if-then-no-else" (i32.const 1) (i32.const 6)) "unreachable") (assert_return (invoke "as-if-then-no-else" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_trap (invoke "as-select-first" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-first" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 0) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-second" (i32.const 1) (i32.const 6)) "unreachable") (assert_trap (invoke "as-select-cond") "unreachable") (assert_trap (invoke "as-call-first") "unreachable") (assert_trap (invoke "as-call-mid") "unreachable") (assert_trap (invoke "as-call-last") "unreachable") (assert_trap (invoke "as-call_indirect-func") "unreachable") (assert_trap (invoke "as-call_indirect-first") "unreachable") (assert_trap (invoke "as-call_indirect-mid") "unreachable") (assert_trap (invoke "as-call_indirect-last") "unreachable") (assert_trap (invoke "as-local.set-value") "unreachable") (assert_trap (invoke "as-local.tee-value") "unreachable") (assert_trap (invoke "as-global.set-value") "unreachable") (assert_trap (invoke "as-load-address") "unreachable") (assert_trap (invoke "as-loadN-address") "unreachable") (assert_trap (invoke "as-store-address") "unreachable") (assert_trap (invoke "as-store-value") "unreachable") (assert_trap (invoke "as-storeN-address") "unreachable") (assert_trap (invoke "as-storeN-value") "unreachable") (assert_trap (invoke "as-unary-operand") "unreachable") (assert_trap (invoke "as-binary-left") "unreachable") (assert_trap (invoke "as-binary-right") "unreachable") (assert_trap (invoke "as-test-operand") "unreachable") (assert_trap (invoke "as-compare-left") "unreachable") (assert_trap (invoke "as-compare-right") "unreachable") (assert_trap (invoke "as-convert-operand") "unreachable") (assert_trap (invoke "as-memory.grow-size") "unreachable") binaryen-version_108/test/spec/unreached-invalid.wast000066400000000000000000000423651423707623100231520ustar00rootroot00000000000000;; Failures in unreachable code. (assert_invalid (module (func $local-index (unreachable) (drop (local.get 0)))) "unknown local" ) (assert_invalid (module (func $global-index (unreachable) (drop (global.get 0)))) "unknown global" ) (assert_invalid (module (func $func-index (unreachable) (call 1))) "unknown function" ) (assert_invalid (module (func $label-index (unreachable) (br 1))) "unknown label" ) (assert_invalid (module (func $type-num-vs-num (unreachable) (drop (i64.eqz (i32.const 0)))) ) "type mismatch" ) (assert_invalid (module (func $type-poly-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-poly-transitive-num-vs-num (result i32) (unreachable) (i64.const 0) (i32.const 0) (select) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-const (unreachable) (i32.const 0))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result (unreachable) (i32.eqz))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-result2 (unreachable) (i32.const 0) (i32.add) )) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly0 (unreachable) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly1 (unreachable) (i32.const 0) (select))) "type mismatch" ) (assert_invalid (module (func $type-unconsumed-poly2 (unreachable) (i32.const 0) (i32.const 0) (select) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-break (block (br 0) (block (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-break (block (br 0) (drop (i32.eqz (f32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-break (block (br 0) (block (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-break (block (br 0) (drop (f32.eq (i32.const 1) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-break (block (br 0) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-break (result i32) (block (result i32) (i32.const 1) (br 0) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-break (block (loop (br 1) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-break (result i32) (loop (result i32) (br 1 (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-break (br 0) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-break (result i32) (br 0 (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-return (return) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-return (return) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-return (return) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-return (return) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-return (block (return) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-return (result i32) (block (result i32) (i32.const 1) (return (i32.const 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-return (block (loop (return) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-return (result i32) (loop (result i32) (return (i32.const 1)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-return (return) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-return (result i32) (return (i32.const 1)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-unreachable (unreachable) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-loop-after-unreachable (unreachable) (loop (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-i32-loop-after-unreachable (unreachable) (loop (result i32) (i32.eqz (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-unreachable (unreachable) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-unreachable (unreachable) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-unreachable (unreachable) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-unreachable (block (unreachable) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-unreachable (result i32) (block (result i32) (i32.const 1) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-unreachable (block (loop (unreachable) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-unreachable (result i32) (loop (result i32) (unreachable) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-unreachable (unreachable) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-unreachable (result i32) (unreachable) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-if-after-unreachable (unreachable) (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable (unreachable) (if (i32.const 0) (then (nop)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-else-after-unreachable-if (if (i32.const 0) (then (unreachable)) (else (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-nested-unreachable (block (unreachable)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-nested-unreachable (block (unreachable)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-nested-unreachable (block (block (unreachable)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-nested-unreachable (result i32) (block (result i32) (i32.const 1) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-nested-unreachable (block (loop (block (unreachable)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-nested-unreachable (result i32) (loop (result i32) (block (unreachable)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-nested-unreachable (block (unreachable)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-nested-unreachable (result i32) (block (unreachable)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (i32.eqz (nop)))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (i32.eqz (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-after-infinite-loop (loop (br 0)) (block (drop (f32.eq (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-after-infinite-loop (loop (br 0)) (drop (f32.eq (i32.const 1) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-after-infinite-loop (block (loop (br 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-after-infinite-loop (result i32) (block (result i32) (i32.const 1) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-void-after-infinite-loop (block (loop (loop (br 0)) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-num-vs-num-after-infinite-loop (result i32) (loop (result i32) (loop (br 0)) (f32.const 0)) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-void-after-infinite-loop (loop (br 0)) (i32.const 1) )) "type mismatch" ) (assert_invalid (module (func $type-func-value-num-vs-num-after-infinite-loop (result i32) (loop (br 0)) (f32.const 0) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (nop))))) )) "type mismatch" ) (assert_invalid (module (func $type-unary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (i32.eqz (f32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-void-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1))))) )) "type mismatch" ) (assert_invalid (module (func $type-binary-num-vs-num-in-dead-body (if (i32.const 0) (then (drop (f32.eq (i32.const 1) (f32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-void-in-dead-body (if (i32.const 0) (then (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-if-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (block (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (block (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-void-in-dead-body (if (i32.const 0) (then (loop (i32.const 1)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-num-vs-num-in-dead-body (result i32) (if (result i32) (i32.const 0) (then (loop (result i32) (f32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-return-second-num-vs-num (result i32) (return (i32.const 1)) (return (f64.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-br-second-num-vs-num (result i32) (block (result i32) (br 0 (i32.const 1)) (br 0 (f64.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-cond-num-vs-num-after-unreachable (block (br_if 0 (unreachable) (f32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-void-after-unreachable (result i32) (block (result i32) (block (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num-vs-num-after-unreachable (result i32) (block (result i32) (block (result f32) (unreachable) (br_if 1 (i32.const 0) (i32.const 0))) (drop) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-num2-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_if 0 (i32.const 0) (i32.const 0)) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-num-vs-num-after-unreachable (block (br_table 0 (unreachable) (f32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-num-after-unreachable (result i32) (block (result i32) (unreachable) (br_table 0 (f32.const 0) (i32.const 1))) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-label-void-after-unreachable (block (block (result f32) (unreachable) (br_table 0 1 0 (i32.const 1)) ) (drop) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_table-label-num-vs-label-num-after-unreachable (block (result f64) (block (result f32) (unreachable) (br_table 0 1 1 (i32.const 1)) ) (drop) (f64.const 0) ) (drop) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-void (block (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-void-vs-num (result i32) (block (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-unreachable-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (unreachable))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-void (block (i32.const 3) (block (br 1))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-void-vs-num (result i32) (block (result i32) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-br-num-vs-num (result i32) (block (result i32) (i64.const 0) (block (br 1 (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-void (block (block (i32.const 3) (block (br 2)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-void-vs-num (result i32) (block (result i32) (block (block (br 2 (i32.const 0))))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num-vs-num (result i32) (block (result i32) (block (result i64) (i64.const 0) (block (br 2 (i32.const 0)))) ) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested2-br-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (br 1))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-void (block (i32.const 3) (block (return))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-void-vs-num (result i32) (block (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num-vs-num (result i32) (block (result i64) (i64.const 0) (block (return (i32.const 0)))) )) "type mismatch" ) (assert_invalid (module (func $type-block-value-nested-return-num2-vs-void (result i32) (block (i32.const 3) (block (i64.const 1) (return (i32.const 0)))) (i32.const 9) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-void (loop (i32.const 3) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-void-vs-num (result i32) (loop (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-loop-value-nested-unreachable-num-vs-num (result i32) (loop (result i64) (i64.const 0) (block (unreachable))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-void-vs-empty (result i32) (loop (br 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-cont-last-num-vs-empty (result i32) (loop (br 0 (i32.const 0))) )) "type mismatch" ) (assert_invalid (module (func $tee-local-unreachable-value (local i32) (local.tee 0 (unreachable)) )) "type mismatch" ) (assert_invalid (module (func $br_if-unreachable (result i32) (block (result i32) (block (br_if 1 (unreachable) (i32.const 0)) ) (i32.const 0) ) )) "type mismatch" ) (assert_invalid (module (func $type-br_if-after-unreachable (result i64) unreachable br_if 0 i64.extend_i32_u ) ) "type mismatch" ) binaryen-version_108/test/spec/unwind.wast000066400000000000000000000240441423707623100210660ustar00rootroot00000000000000;; Test that control-flow transfer unwinds stack and it can be anything after. (module (func (export "func-unwind-by-unreachable") (i32.const 3) (i64.const 1) (unreachable) ) (func (export "func-unwind-by-br") (i32.const 3) (i64.const 1) (br 0) ) (func (export "func-unwind-by-br-value") (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9)) ) (func (export "func-unwind-by-br_if") (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1)))) ) (func (export "func-unwind-by-br_if-value") (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) (func (export "func-unwind-by-br_table") (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0)) ) (func (export "func-unwind-by-br_table-value") (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) (func (export "func-unwind-by-return") (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9)) ) (func (export "block-unwind-by-unreachable") (block (i32.const 3) (i64.const 1) (unreachable)) ) (func (export "block-unwind-by-br") (result i32) (block (i32.const 3) (i64.const 1) (br 0)) (i32.const 9) ) (func (export "block-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9))) ) (func (export "block-unwind-by-br_if") (result i32) (block (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 1))))) (i32.const 9) ) (func (export "block-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (drop (drop (br_if 0 (i32.const 9) (i32.const 1)))) ) ) (func (export "block-unwind-by-br_table") (result i32) (block (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0))) (i32.const 9) ) (func (export "block-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9))) ) (func (export "block-nested-unwind-by-unreachable") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (unreachable))) ) (func (export "block-nested-unwind-by-br") (result i32) (block (i32.const 3) (block (i64.const 1) (br 1)) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br 1 (i32.const 9))) ) ) (func (export "block-nested-unwind-by-br_if") (result i32) (block (i32.const 3) (block (i64.const 1) (drop (br_if 1 (i32.const 1)))) (drop)) (i32.const 9) ) (func (export "block-nested-unwind-by-br_if-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (drop (drop (br_if 1 (i32.const 9) (i32.const 1))))) ) ) (func (export "block-nested-unwind-by-br_table") (result i32) (block (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 1))) (drop) ) (i32.const 9) ) (func (export "block-nested-unwind-by-br_table-value") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 9) (i32.const 1))) ) ) (func (export "block-nested-unwind-by-return") (result i32) (block (result i32) (i32.const 3) (block (i64.const 1) (return (i32.const 9))) ) ) (func (export "unary-after-unreachable") (result i32) (f32.const 0) (unreachable) (i64.eqz) ) (func (export "unary-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9)) (i64.eqz)) ) (func (export "unary-after-br_if") (result i32) (block (result i32) (i64.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eqz) ) ) (func (export "unary-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) (i64.eqz) ) ) (func (export "unary-after-return") (result i32) (f32.const 0) (return (i32.const 9)) (i64.eqz) ) (func (export "binary-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (unreachable) (i64.eq) ) (func (export "binary-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br 0 (i32.const 9)) (i64.eq) ) ) (func (export "binary-after-br_if") (result i32) (block (result i32) (i64.const 0) (i64.const 1) (drop (br_if 0 (i32.const 9) (i32.const 1))) (i64.eq) ) ) (func (export "binary-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) (i64.eq) ) ) (func (export "binary-after-return") (result i32) (f32.const 0) (f64.const 1) (return (i32.const 9)) (i64.eq) ) (func (export "select-after-unreachable") (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (unreachable) (select) ) (func (export "select-after-br") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br 0 (i32.const 9)) (select) ) ) (func (export "select-after-br_if") (result i32) (block (result i32) (i32.const 0) (i32.const 1) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) (select) ) ) (func (export "select-after-br_table") (result i32) (block (result i32) (f32.const 0) (f64.const 1) (i64.const 0) (br_table 0 (i32.const 9) (i32.const 0)) (select) ) ) (func (export "select-after-return") (result i32) (f32.const 0) (f64.const 1) (i64.const 1) (return (i32.const 9)) (select) ) (func (export "block-value-after-unreachable") (result i32) (block (result i32) (f32.const 0) (unreachable)) ) (func (export "block-value-after-br") (result i32) (block (result i32) (f32.const 0) (br 0 (i32.const 9))) ) (func (export "block-value-after-br_if") (result i32) (block (result i32) (i32.const 0) (drop (br_if 0 (i32.const 9) (i32.const 1))) ) ) (func (export "block-value-after-br_table") (result i32) (block (result i32) (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) ) ) (func (export "block-value-after-return") (result i32) (block (result i32) (f32.const 0) (return (i32.const 9))) ) (func (export "loop-value-after-unreachable") (result i32) (loop (result i32) (f32.const 0) (unreachable)) ) (func (export "loop-value-after-br") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br 1 (i32.const 9)))) ) (func (export "loop-value-after-br_if") (result i32) (block (result i32) (loop (result i32) (i32.const 0) (drop (br_if 1 (i32.const 9) (i32.const 1))) ) ) ) (func (export "loop-value-after-br_table") (result i32) (block (result i32) (loop (result i32) (f32.const 0) (br_table 1 1 (i32.const 9) (i32.const 0)) ) ) ) (func (export "loop-value-after-return") (result i32) (loop (result i32) (f32.const 0) (return (i32.const 9))) ) ) (assert_trap (invoke "func-unwind-by-unreachable") "unreachable") (assert_return (invoke "func-unwind-by-br")) (assert_return (invoke "func-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_if")) (assert_return (invoke "func-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-br_table")) (assert_return (invoke "func-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "func-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-unwind-by-return") (i32.const 9)) (assert_trap (invoke "block-nested-unwind-by-unreachable") "unreachable") (assert_return (invoke "block-nested-unwind-by-br") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_if-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-br_table-value") (i32.const 9)) (assert_return (invoke "block-nested-unwind-by-return") (i32.const 9)) (assert_trap (invoke "unary-after-unreachable") "unreachable") (assert_return (invoke "unary-after-br") (i32.const 9)) (assert_return (invoke "unary-after-br_if") (i32.const 9)) (assert_return (invoke "unary-after-br_table") (i32.const 9)) (assert_return (invoke "unary-after-return") (i32.const 9)) (assert_trap (invoke "binary-after-unreachable") "unreachable") (assert_return (invoke "binary-after-br") (i32.const 9)) (assert_return (invoke "binary-after-br_if") (i32.const 9)) (assert_return (invoke "binary-after-br_table") (i32.const 9)) (assert_return (invoke "binary-after-return") (i32.const 9)) (assert_trap (invoke "select-after-unreachable") "unreachable") (assert_return (invoke "select-after-br") (i32.const 9)) (assert_return (invoke "select-after-br_if") (i32.const 9)) (assert_return (invoke "select-after-br_table") (i32.const 9)) (assert_return (invoke "select-after-return") (i32.const 9)) (assert_trap (invoke "block-value-after-unreachable") "unreachable") (assert_return (invoke "block-value-after-br") (i32.const 9)) (assert_return (invoke "block-value-after-br_if") (i32.const 9)) (assert_return (invoke "block-value-after-br_table") (i32.const 9)) (assert_return (invoke "block-value-after-return") (i32.const 9)) (assert_trap (invoke "loop-value-after-unreachable") "unreachable") (assert_return (invoke "loop-value-after-br") (i32.const 9)) (assert_return (invoke "loop-value-after-br_if") (i32.const 9)) (assert_return (invoke "loop-value-after-br_table") (i32.const 9)) (assert_return (invoke "loop-value-after-return") (i32.const 9)) binaryen-version_108/test/spec/utf8-custom-section-id.wast000066400000000000000000001313121423707623100240110ustar00rootroot00000000000000;;;;;; Invalid UTF-8 custom section names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\80" ;; "\80" ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\8f" ;; "\8f" ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\90" ;; "\90" ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\9f" ;; "\9f" ) "invalid UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\a0" ;; "\a0" ) "invalid UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\bf" ;; "\bf" ) "invalid UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\c2\80\80" ;; "\c2\80\80" ) "invalid UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\c2" ;; "\c2" ) "invalid UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\2e" ;; "\c2." ) "invalid UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\80" ;; "\c0\80" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c0\bf" ;; "\c0\bf" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\80" ;; "\c1\80" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c1\bf" ;; "\c1\bf" ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\00" ;; "\c2\00" ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\7f" ;; "\c2\7f" ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\c0" ;; "\c2\c0" ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\c2\fd" ;; "\c2\fd" ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\00" ;; "\df\00" ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\7f" ;; "\df\7f" ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\c0" ;; "\df\c0" ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\df\fd" ;; "\df\fd" ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\e1\80\80\80" ;; "\e1\80\80\80" ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\80" ;; "\e1\80" ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\2e" ;; "\e1\80." ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\e1" ;; "\e1" ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\e1\2e" ;; "\e1." ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\00\a0" ;; "\e0\00\a0" ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\7f\a0" ;; "\e0\7f\a0" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\80" ;; "\e0\80\80" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\80\a0" ;; "\e0\80\a0" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\a0" ;; "\e0\9f\a0" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\9f\bf" ;; "\e0\9f\bf" ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\c0\a0" ;; "\e0\c0\a0" ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\fd\a0" ;; "\e0\fd\a0" ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\00\80" ;; "\e1\00\80" ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\7f\80" ;; "\e1\7f\80" ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\c0\80" ;; "\e1\c0\80" ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\fd\80" ;; "\e1\fd\80" ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\00\80" ;; "\ec\00\80" ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\7f\80" ;; "\ec\7f\80" ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\c0\80" ;; "\ec\c0\80" ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\fd\80" ;; "\ec\fd\80" ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\00\80" ;; "\ed\00\80" ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\7f\80" ;; "\ed\7f\80" ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\80" ;; "\ed\a0\80" ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\a0\bf" ;; "\ed\a0\bf" ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\80" ;; "\ed\bf\80" ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\bf\bf" ;; "\ed\bf\bf" ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\c0\80" ;; "\ed\c0\80" ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\fd\80" ;; "\ed\fd\80" ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\00\80" ;; "\ee\00\80" ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\7f\80" ;; "\ee\7f\80" ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\c0\80" ;; "\ee\c0\80" ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\fd\80" ;; "\ee\fd\80" ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\00\80" ;; "\ef\00\80" ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\7f\80" ;; "\ef\7f\80" ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\c0\80" ;; "\ef\c0\80" ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\fd\80" ;; "\ef\fd\80" ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\00" ;; "\e0\a0\00" ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\7f" ;; "\e0\a0\7f" ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\c0" ;; "\e0\a0\c0" ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e0\a0\fd" ;; "\e0\a0\fd" ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\00" ;; "\e1\80\00" ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\7f" ;; "\e1\80\7f" ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\c0" ;; "\e1\80\c0" ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\e1\80\fd" ;; "\e1\80\fd" ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\00" ;; "\ec\80\00" ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\7f" ;; "\ec\80\7f" ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\c0" ;; "\ec\80\c0" ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ec\80\fd" ;; "\ec\80\fd" ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\00" ;; "\ed\80\00" ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\7f" ;; "\ed\80\7f" ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\c0" ;; "\ed\80\c0" ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ed\80\fd" ;; "\ed\80\fd" ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\00" ;; "\ee\80\00" ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\7f" ;; "\ee\80\7f" ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\c0" ;; "\ee\80\c0" ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ee\80\fd" ;; "\ee\80\fd" ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\00" ;; "\ef\80\00" ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\7f" ;; "\ef\80\7f" ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\c0" ;; "\ef\80\c0" ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\ef\80\fd" ;; "\ef\80\fd" ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\80" ;; "\f1\80\80" ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\23" ;; "\f1\80\80#" ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\80" ;; "\f1\80" ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f1\80\23" ;; "\f1\80#" ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f1" ;; "\f1" ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f1\23" ;; "\f1#" ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\00\90\90" ;; "\f0\00\90\90" ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\7f\90\90" ;; "\f0\7f\90\90" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\80\80" ;; "\f0\80\80\80" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\80\90\90" ;; "\f0\80\90\90" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\90\90" ;; "\f0\8f\90\90" ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\c0\90\90" ;; "\f0\c0\90\90" ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\fd\90\90" ;; "\f0\fd\90\90" ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\00\80\80" ;; "\f1\00\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\7f\80\80" ;; "\f1\7f\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\c0\80\80" ;; "\f1\c0\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\fd\80\80" ;; "\f1\fd\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\00\80\80" ;; "\f3\00\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\7f\80\80" ;; "\f3\7f\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\c0\80\80" ;; "\f3\c0\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\fd\80\80" ;; "\f3\fd\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\00\80\80" ;; "\f4\00\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\7f\80\80" ;; "\f4\7f\80\80" ) "invalid UTF-8 encoding" ) ;; (first) invalid code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\90\80\80" ;; "\f4\90\80\80" ) "invalid UTF-8 encoding" ) ;; invalid code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\bf\80\80" ;; "\f4\bf\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\c0\80\80" ;; "\f4\c0\80\80" ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\fd\80\80" ;; "\f4\fd\80\80" ) "invalid UTF-8 encoding" ) ;; (first) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f5\80\80\80" ;; "\f5\80\80\80" ) "invalid UTF-8 encoding" ) ;; (last) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\80\80\80" ;; "\f7\80\80\80" ) "invalid UTF-8 encoding" ) ;; (last) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\00\90" ;; "\f0\90\00\90" ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\7f\90" ;; "\f0\90\7f\90" ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\c0\90" ;; "\f0\90\c0\90" ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\fd\90" ;; "\f0\90\fd\90" ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\00\80" ;; "\f1\80\00\80" ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\7f\80" ;; "\f1\80\7f\80" ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\c0\80" ;; "\f1\80\c0\80" ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\fd\80" ;; "\f1\80\fd\80" ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\00\80" ;; "\f3\80\00\80" ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\7f\80" ;; "\f3\80\7f\80" ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\c0\80" ;; "\f3\80\c0\80" ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\fd\80" ;; "\f3\80\fd\80" ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\00\80" ;; "\f4\80\00\80" ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\7f\80" ;; "\f4\80\7f\80" ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\c0\80" ;; "\f4\80\c0\80" ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\fd\80" ;; "\f4\80\fd\80" ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\00" ;; "\f0\90\90\00" ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\7f" ;; "\f0\90\90\7f" ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\c0" ;; "\f0\90\90\c0" ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f0\90\90\fd" ;; "\f0\90\90\fd" ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\00" ;; "\f1\80\80\00" ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\7f" ;; "\f1\80\80\7f" ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\c0" ;; "\f1\80\80\c0" ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f1\80\80\fd" ;; "\f1\80\80\fd" ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\00" ;; "\f3\80\80\00" ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\7f" ;; "\f3\80\80\7f" ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\c0" ;; "\f3\80\80\c0" ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f3\80\80\fd" ;; "\f3\80\80\fd" ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\00" ;; "\f4\80\80\00" ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\7f" ;; "\f4\80\80\7f" ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\c0" ;; "\f4\80\80\c0" ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f4\80\80\fd" ;; "\f4\80\80\fd" ) "invalid UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\80" ;; "\f8\80\80\80" ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\80" ;; "\f8\80\80" ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\f8\80\80\23" ;; "\f8\80\80#" ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\80" ;; "\f8\80" ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\f8\80\23" ;; "\f8\80#" ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\f8" ;; "\f8" ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\f8\23" ;; "\f8#" ) "invalid UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) invalid 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" ) "invalid UTF-8 encoding" ) ;; (last) invalid 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" ) "invalid UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\08" ;; custom section "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\80" ;; "\fc\80\80\80" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\06" ;; custom section "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\80" ;; "\fc\80\80" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\fc\80\80\23" ;; "\fc\80\80#" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\80" ;; "\fc\80" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\04" ;; custom section "\03\fc\80\23" ;; "\fc\80#" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fc" ;; "\fc" ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fc\23" ;; "\fc#" ) "invalid UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) invalid 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" ) "invalid UTF-8 encoding" ) ;; (last) invalid 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\07" ;; custom section "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" ) "invalid UTF-8 encoding" ) ;;;; Miscellaneous invalid bytes ;; invalid byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\fe" ;; "\fe" ) "invalid UTF-8 encoding" ) ;; invalid byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\02" ;; custom section "\01\ff" ;; "\ff" ) "invalid UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\fe\ff" ;; "\fe\ff" ) "invalid UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\00\00\fe\ff" ;; "\00\00\fe\ff" ) "invalid UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\03" ;; custom section "\02\ff\fe" ;; "\ff\fe" ) "invalid UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\00\05" ;; custom section "\04\ff\fe\00\00" ;; "\ff\fe\00\00" ) "invalid UTF-8 encoding" ) binaryen-version_108/test/spec/utf8-import-field.wast000066400000000000000000002513701423707623100230450ustar00rootroot00000000000000;;;;;; Invalid UTF-8 import field names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\80" ;; "\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\8f" ;; "\8f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\90" ;; "\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\9f" ;; "\9f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\a0" ;; "\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\bf" ;; "\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\c2\80\80" ;; "\c2\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\c2" ;; "\c2" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\2e" ;; "\c2." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\80" ;; "\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c0\bf" ;; "\c0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\80" ;; "\c1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c1\bf" ;; "\c1\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\00" ;; "\c2\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\7f" ;; "\c2\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\c0" ;; "\c2\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\c2\fd" ;; "\c2\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\00" ;; "\df\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\7f" ;; "\df\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\c0" ;; "\df\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\df\fd" ;; "\df\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\e1\80\80\80" ;; "\e1\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\80" ;; "\e1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\2e" ;; "\e1\80." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\e1" ;; "\e1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\e1\2e" ;; "\e1." "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\00\a0" ;; "\e0\00\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\7f\a0" ;; "\e0\7f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\80" ;; "\e0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\80\a0" ;; "\e0\80\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\a0" ;; "\e0\9f\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\9f\bf" ;; "\e0\9f\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\c0\a0" ;; "\e0\c0\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\fd\a0" ;; "\e0\fd\a0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\00\80" ;; "\e1\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\7f\80" ;; "\e1\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\c0\80" ;; "\e1\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\fd\80" ;; "\e1\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\00\80" ;; "\ec\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\7f\80" ;; "\ec\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\c0\80" ;; "\ec\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\fd\80" ;; "\ec\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\00\80" ;; "\ed\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\7f\80" ;; "\ed\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\80" ;; "\ed\a0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\a0\bf" ;; "\ed\a0\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\80" ;; "\ed\bf\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\bf\bf" ;; "\ed\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\c0\80" ;; "\ed\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\fd\80" ;; "\ed\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\00\80" ;; "\ee\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\7f\80" ;; "\ee\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\c0\80" ;; "\ee\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\fd\80" ;; "\ee\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\00\80" ;; "\ef\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\7f\80" ;; "\ef\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\c0\80" ;; "\ef\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\fd\80" ;; "\ef\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\00" ;; "\e0\a0\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\7f" ;; "\e0\a0\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\c0" ;; "\e0\a0\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e0\a0\fd" ;; "\e0\a0\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\00" ;; "\e1\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\7f" ;; "\e1\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\c0" ;; "\e1\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\e1\80\fd" ;; "\e1\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\00" ;; "\ec\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\7f" ;; "\ec\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\c0" ;; "\ec\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ec\80\fd" ;; "\ec\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\00" ;; "\ed\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\7f" ;; "\ed\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\c0" ;; "\ed\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ed\80\fd" ;; "\ed\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\00" ;; "\ee\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\7f" ;; "\ee\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\c0" ;; "\ee\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ee\80\fd" ;; "\ee\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\00" ;; "\ef\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\7f" ;; "\ef\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\c0" ;; "\ef\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\ef\80\fd" ;; "\ef\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\80" ;; "\f1\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\23" ;; "\f1\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\80" ;; "\f1\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f1\80\23" ;; "\f1\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f1" ;; "\f1" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f1\23" ;; "\f1#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\00\90\90" ;; "\f0\00\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\80\80" ;; "\f0\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\80\90\90" ;; "\f0\80\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\00\80\80" ;; "\f1\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\00\80\80" ;; "\f3\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\00\80\80" ;; "\f4\00\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (first) invalid code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\90\80\80" ;; "\f4\90\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; invalid code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (first) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f5\80\80\80" ;; "\f5\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (last) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\80\80\80" ;; "\f7\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (last) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\00\90" ;; "\f0\90\00\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\00\80" ;; "\f1\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\00\80" ;; "\f3\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\00\80" ;; "\f4\80\00\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\00" ;; "\f0\90\90\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\00" ;; "\f1\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\00" ;; "\f3\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\00" ;; "\f4\80\80\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\80" ;; "\f8\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\80" ;; "\f8\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\f8\80\80\23" ;; "\f8\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\80" ;; "\f8\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\f8\80\23" ;; "\f8\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\f8" ;; "\f8" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\f8\23" ;; "\f8#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) invalid 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (last) invalid 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\80" ;; "\fc\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\80" ;; "\fc\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\fc\80\80\23" ;; "\fc\80\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\80" ;; "\fc\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\03\fc\80\23" ;; "\fc\80#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fc" ;; "\fc" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fc\23" ;; "\fc#" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) invalid 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (last) invalid 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; Miscellaneous invalid bytes ;; invalid byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\fe" ;; "\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; invalid byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\01\ff" ;; "\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\fe\ff" ;; "\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\02\ff\fe" ;; "\ff\fe" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\04\74\65\73\74" ;; "test" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) binaryen-version_108/test/spec/utf8-import-module.wast000066400000000000000000002513711423707623100232500ustar00rootroot00000000000000;;;;;; Invalid UTF-8 import module names ;;;; Continuation bytes not preceded by prefixes ;; encoding starts with (first) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\80" ;; "\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x8f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\8f" ;; "\8f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x90) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\90" ;; "\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (0x9f) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\9f" ;; "\9f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (0xa0) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\a0" ;; "\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; encoding starts with (last) continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\bf" ;; "\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 2-byte sequences ;; 2-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\c2\80\80" ;; "\c2\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\c2" ;; "\c2" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 2-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\2e" ;; "\c2." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 2-byte sequence contents ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\80" ;; "\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c0\bf" ;; "\c0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\80" ;; "\c1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xc1 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c1\bf" ;; "\c1\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a contination byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\00" ;; "\c2\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\7f" ;; "\c2\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\c0" ;; "\c2\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (first) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\c2\fd" ;; "\c2\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\00" ;; "\df\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\7f" ;; "\df\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\c0" ;; "\df\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte after (last) 2-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\df\fd" ;; "\df\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequences ;; 3-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\e1\80\80\80" ;; "\e1\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\80" ;; "\e1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\2e" ;; "\e1\80." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\e1" ;; "\e1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 3-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\e1\2e" ;; "\e1." "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequence contents ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\00\a0" ;; "\e0\00\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\7f\a0" ;; "\e0\7f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\80" ;; "\e0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\80\a0" ;; "\e0\80\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\a0" ;; "\e0\9f\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xe0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\9f\bf" ;; "\e0\9f\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\c0\a0" ;; "\e0\c0\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\fd\a0" ;; "\e0\fd\a0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\00\80" ;; "\e1\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\7f\80" ;; "\e1\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\c0\80" ;; "\e1\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\fd\80" ;; "\e1\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\00\80" ;; "\ec\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\7f\80" ;; "\ec\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\c0\80" ;; "\ec\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\fd\80" ;; "\ec\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\00\80" ;; "\ed\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\7f\80" ;; "\ed\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\80" ;; "\ed\a0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\a0\bf" ;; "\ed\a0\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\80" ;; "\ed\bf\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; byte sequence reserved for UTF-16 surrogate half (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\bf\bf" ;; "\ed\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\c0\80" ;; "\ed\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\fd\80" ;; "\ed\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\00\80" ;; "\ee\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\7f\80" ;; "\ee\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\c0\80" ;; "\ee\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\fd\80" ;; "\ee\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\00\80" ;; "\ef\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\7f\80" ;; "\ef\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\c0\80" ;; "\ef\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\fd\80" ;; "\ef\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 3-byte sequence contents (third byte) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\00" ;; "\e0\a0\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\7f" ;; "\e0\a0\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\c0" ;; "\e0\a0\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xe0) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e0\a0\fd" ;; "\e0\a0\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\00" ;; "\e1\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\7f" ;; "\e1\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\c0" ;; "\e1\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\e1\80\fd" ;; "\e1\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\00" ;; "\ec\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\7f" ;; "\ec\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\c0" ;; "\ec\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ec\80\fd" ;; "\ec\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\00" ;; "\ed\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\7f" ;; "\ed\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\c0" ;; "\ed\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xed) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ed\80\fd" ;; "\ed\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\00" ;; "\ee\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\7f" ;; "\ee\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\c0" ;; "\ee\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ee\80\fd" ;; "\ee\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\00" ;; "\ef\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\7f" ;; "\ef\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\c0" ;; "\ef\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 3-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\ef\80\fd" ;; "\ef\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequences ;; 4-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\80" ;; "\f1\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\23" ;; "\f1\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\80" ;; "\f1\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f1\80\23" ;; "\f1\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f1" ;; "\f1" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 4-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f1\23" ;; "\f1#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\00\90\90" ;; "\f0\00\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\7f\90\90" ;; "\f0\7f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\80\80" ;; "\f0\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\80\90\90" ;; "\f0\80\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\90\90" ;; "\f0\8f\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; overlong encoding after 0xf0 prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\c0\90\90" ;; "\f0\c0\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\fd\90\90" ;; "\f0\fd\90\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\00\80\80" ;; "\f1\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\7f\80\80" ;; "\f1\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\c0\80\80" ;; "\f1\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\fd\80\80" ;; "\f1\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\00\80\80" ;; "\f3\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\7f\80\80" ;; "\f3\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\c0\80\80" ;; "\f3\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\fd\80\80" ;; "\f3\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\00\80\80" ;; "\f4\00\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\7f\80\80" ;; "\f4\7f\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (first) invalid code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\90\80\80" ;; "\f4\90\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; invalid code point (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\bf\80\80" ;; "\f4\bf\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\c0\80\80" ;; "\f4\c0\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; first byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\fd\80\80" ;; "\f4\fd\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (first) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f5\80\80\80" ;; "\f5\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (last) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\80\80\80" ;; "\f7\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (last) invalid 4-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents (third byte) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\00\90" ;; "\f0\90\00\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\7f\90" ;; "\f0\90\7f\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\c0\90" ;; "\f0\90\c0\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\fd\90" ;; "\f0\90\fd\90" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\00\80" ;; "\f1\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\7f\80" ;; "\f1\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\c0\80" ;; "\f1\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\fd\80" ;; "\f1\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\00\80" ;; "\f3\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\7f\80" ;; "\f3\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\c0\80" ;; "\f3\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\fd\80" ;; "\f3\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\00\80" ;; "\f4\80\00\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\7f\80" ;; "\f4\80\7f\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\c0\80" ;; "\f4\80\c0\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; second byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\fd\80" ;; "\f4\80\fd\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 4-byte sequence contents (fourth byte) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\00" ;; "\f0\90\90\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\7f" ;; "\f0\90\90\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\c0" ;; "\f0\90\90\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf0) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f0\90\90\fd" ;; "\f0\90\90\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\00" ;; "\f1\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\7f" ;; "\f1\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\c0" ;; "\f1\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (first normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f1\80\80\fd" ;; "\f1\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\00" ;; "\f3\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\7f" ;; "\f3\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\c0" ;; "\f3\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (last normal) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f3\80\80\fd" ;; "\f3\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\00" ;; "\f4\80\80\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\7f" ;; "\f4\80\80\7f" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\c0" ;; "\f4\80\80\c0" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; third byte after (0xf4) 4-byte prefix not a continuation byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f4\80\80\fd" ;; "\f4\80\80\fd" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 5-byte sequences ;; 5-byte sequence contains 6 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\80" ;; "\f8\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\80" ;; "\f8\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\f8\80\80\23" ;; "\f8\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\80" ;; "\f8\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\f8\80\23" ;; "\f8\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\f8" ;; "\f8" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 5-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\f8\23" ;; "\f8#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 5-byte sequence contents ;; (first) invalid 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (last) invalid 5-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 6-byte sequences ;; 6-byte sequence contains 7 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\11" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 5 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\80" ;; "\fc\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 4 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0f" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\80" ;; "\fc\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 3 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\fc\80\80\23" ;; "\fc\80\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\80" ;; "\fc\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 2 bytes (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0d" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\03\fc\80\23" ;; "\fc\80#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte at end of string (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fc" ;; "\fc" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; 6-byte sequence contains 1 byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fc\23" ;; "\fc#" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; 6-byte sequence contents ;; (first) invalid 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; (last) invalid 6-byte prefix (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\10" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;;;; Miscellaneous invalid bytes ;; invalid byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\fe" ;; "\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; invalid byte (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0b" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\01\ff" ;; "\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; UTF-16BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\fe\ff" ;; "\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; UTF-32BE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\00\00\fe\ff" ;; "\00\00\fe\ff" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; UTF-16LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0c" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\02\ff\fe" ;; "\ff\fe" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) ;; UTF-32LE BOM (assert_malformed (module binary "\00asm" "\01\00\00\00" "\02\0e" ;; import section "\01" ;; length 1 "\04\74\65\73\74" ;; "test" "\04\ff\fe\00\00" ;; "\ff\fe\00\00" "\03" ;; GlobalImport "\7f" ;; i32 "\00" ;; immutable ) "invalid UTF-8 encoding" ) binaryen-version_108/test/spec/utf8-invalid-encoding.wast000066400000000000000000000405201423707623100236550ustar00rootroot00000000000000(assert_malformed (module quote "(func (export \"\\00\\00\\fe\\ff\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\8f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\9f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\a0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c0\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c1\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\2e\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\c2\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\df\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\00\\a0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\7f\\a0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\80\\a0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\a0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\9f\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\a0\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\c0\\a0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e0\\fd\\a0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\00\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\2e\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\7f\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\2e\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\80\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\e1\\fd\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\00\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\7f\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\80\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ec\\fd\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\00\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\7f\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\80\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\a0\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\bf\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ed\\fd\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\00\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\7f\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\80\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ee\\fd\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\00\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\7f\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\80\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ef\\fd\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\00\\90\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\7f\\90\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\80\\90\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\90\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\8f\\bf\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\00\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\7f\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\90\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\c0\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\90\\fd\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\c0\\90\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f0\\fd\\90\\90\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\00\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\7f\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\00\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\7f\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\80\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\80\\fd\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\c0\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f1\\fd\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\00\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\7f\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\00\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\7f\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\80\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\80\\fd\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\c0\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f3\\fd\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\00\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\7f\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\00\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\7f\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\7f\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\c0\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\80\\fd\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\c0\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\80\\fd\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\90\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\bf\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\c0\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f4\\fd\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f5\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f7\\bf\\bf\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\f8\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fb\\bf\\bf\\bf\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\23\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\\80\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fc\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fd\\bf\\bf\\bf\\bf\\bf\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\fe\\ff\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\\00\\00\"))") "invalid UTF-8 encoding") (assert_malformed (module quote "(func (export \"\\ff\\fe\"))") "invalid UTF-8 encoding") binaryen-version_108/test/stacky.wasm000066400000000000000000000000661423707623100201150ustar00rootroot00000000000000asm`€€add  Aä! j binaryen-version_108/test/stacky.wasm.fromBinary000066400000000000000000000005501423707623100222220ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (memory $0 256 256) (export "add" (func $0)) (func $0 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (i32.add (block (result i32) (local.set $2 (local.get $0) ) (local.set $0 (i32.const 100) ) (local.get $2) ) (local.get $1) ) ) ) binaryen-version_108/test/subtypes.wast000066400000000000000000000031651423707623100205070ustar00rootroot00000000000000;; Test that we can roundtrip struct and array types (module ;; Arrays (type $vector-i32 (array i32)) (type $vector-i31 (array (ref i31))) (type $vector-any (array (ref any))) ;; Structs (type $struct-i31 (struct (field (ref i31)) )) (type $struct-any (struct (field (ref any)) )) (type $struct-i31_any (struct (field (ref i31)) (field (ref any)) )) ;; Recursive structs (type $struct-rec-one (struct (field (ref $struct-rec-one)) )) (type $struct-rec-two (struct (field (ref $struct-rec-two)) (field (ref $struct-rec-two)) )) (func $foo (param $no-null (ref $vector-i32)) (param $yes-null (ref null $vector-i32)) ;; ok to set a non-nullable reference to a nullable target (local.set $yes-null (local.get $no-null)) ) (func $bar (param $v-i31 (ref $vector-i31)) (param $v-any (ref $vector-any)) ;; ok to set a vector of (immutable) i31s to a vector of anyies (local.set $v-any (local.get $v-i31)) ) (func $baz (param $s-i31 (ref $struct-i31)) (param $s-any (ref $struct-any)) ;; ok to set a struct of an (immutable) i31 to a one of an any (local.set $s-any (local.get $s-i31)) ) (func $boo (param $s-i31 (ref $struct-i31)) (param $s-i31_any (ref $struct-i31_any)) ;; also ok to have extra fields (local.set $s-i31 (local.get $s-i31_any)) ) (func $coinductive (param $rec-one (ref $struct-rec-one)) (param $rec-two (ref $struct-rec-two)) ;; Do not infinitely recurse when determining this subtype relation! (local.set $rec-one (local.get $rec-two)) ) ) binaryen-version_108/test/subtypes.wast.from-wast000066400000000000000000000031661423707623100224260ustar00rootroot00000000000000(module (type $struct-rec-two (struct (field (ref $struct-rec-two)) (field (ref $struct-rec-two)))) (type $vector-i32 (array i32)) (type $struct-i31 (struct (field i31ref))) (type $struct-rec-one (struct (field (ref $struct-rec-one)))) (type $ref|$vector-i32|_ref?|$vector-i32|_=>_none (func (param (ref $vector-i32) (ref null $vector-i32)))) (type $ref|$vector-i31|_ref|$vector-any|_=>_none (func (param (ref $vector-i31) (ref $vector-any)))) (type $ref|$struct-i31|_ref|$struct-any|_=>_none (func (param (ref $struct-i31) (ref $struct-any)))) (type $ref|$struct-i31|_ref|$struct-i31_any|_=>_none (func (param (ref $struct-i31) (ref $struct-i31_any)))) (type $ref|$struct-rec-one|_ref|$struct-rec-two|_=>_none (func (param (ref $struct-rec-one) (ref $struct-rec-two)))) (type $vector-i31 (array i31ref)) (type $vector-any (array (ref any))) (type $struct-any (struct (field (ref any)))) (type $struct-i31_any (struct (field i31ref) (field (ref any)))) (func $foo (param $no-null (ref $vector-i32)) (param $yes-null (ref null $vector-i32)) (local.set $yes-null (local.get $no-null) ) ) (func $bar (param $v-i31 (ref $vector-i31)) (param $v-any (ref $vector-any)) (local.set $v-any (local.get $v-i31) ) ) (func $baz (param $s-i31 (ref $struct-i31)) (param $s-any (ref $struct-any)) (local.set $s-any (local.get $s-i31) ) ) (func $boo (param $s-i31 (ref $struct-i31)) (param $s-i31_any (ref $struct-i31_any)) (local.set $s-i31 (local.get $s-i31_any) ) ) (func $coinductive (param $rec-one (ref $struct-rec-one)) (param $rec-two (ref $struct-rec-two)) (local.set $rec-one (local.get $rec-two) ) ) ) binaryen-version_108/test/subtypes.wast.fromBinary000066400000000000000000000031671423707623100226200ustar00rootroot00000000000000(module (type $struct-rec-two (struct (field (ref $struct-rec-two)) (field (ref $struct-rec-two)))) (type $vector-i32 (array i32)) (type $struct-i31 (struct (field i31ref))) (type $struct-rec-one (struct (field (ref $struct-rec-one)))) (type $ref|$vector-i32|_ref?|$vector-i32|_=>_none (func (param (ref $vector-i32) (ref null $vector-i32)))) (type $ref|$vector-i31|_ref|$vector-any|_=>_none (func (param (ref $vector-i31) (ref $vector-any)))) (type $ref|$struct-i31|_ref|$struct-any|_=>_none (func (param (ref $struct-i31) (ref $struct-any)))) (type $ref|$struct-i31|_ref|$struct-i31_any|_=>_none (func (param (ref $struct-i31) (ref $struct-i31_any)))) (type $ref|$struct-rec-one|_ref|$struct-rec-two|_=>_none (func (param (ref $struct-rec-one) (ref $struct-rec-two)))) (type $vector-i31 (array i31ref)) (type $vector-any (array (ref any))) (type $struct-any (struct (field (ref any)))) (type $struct-i31_any (struct (field i31ref) (field (ref any)))) (func $foo (param $no-null (ref $vector-i32)) (param $yes-null (ref null $vector-i32)) (local.set $yes-null (local.get $no-null) ) ) (func $bar (param $v-i31 (ref $vector-i31)) (param $v-any (ref $vector-any)) (local.set $v-any (local.get $v-i31) ) ) (func $baz (param $s-i31 (ref $struct-i31)) (param $s-any (ref $struct-any)) (local.set $s-any (local.get $s-i31) ) ) (func $boo (param $s-i31 (ref $struct-i31)) (param $s-i31_any (ref $struct-i31_any)) (local.set $s-i31 (local.get $s-i31_any) ) ) (func $coinductive (param $rec-one (ref $struct-rec-one)) (param $rec-two (ref $struct-rec-two)) (local.set $rec-one (local.get $rec-two) ) ) ) binaryen-version_108/test/subtypes.wast.fromBinary.noDebugInfo000066400000000000000000000027371423707623100250200ustar00rootroot00000000000000(module (type ${ref|...0|_ref|...0|} (struct (field (ref ${ref|...0|_ref|...0|})) (field (ref ${ref|...0|_ref|...0|})))) (type $[i32] (array i32)) (type ${i31ref} (struct (field i31ref))) (type ${ref|...0|} (struct (field (ref ${ref|...0|})))) (type $ref|[i32]|_ref?|[i32]|_=>_none (func (param (ref $[i32]) (ref null $[i32])))) (type $ref|[i31ref]|_ref|[ref|any|]|_=>_none (func (param (ref $[i31ref]) (ref $[ref|any|])))) (type $ref|{i31ref}|_ref|{ref|any|}|_=>_none (func (param (ref ${i31ref}) (ref ${ref|any|})))) (type $ref|{i31ref}|_ref|{i31ref_ref|any|}|_=>_none (func (param (ref ${i31ref}) (ref ${i31ref_ref|any|})))) (type $ref|{ref|...0|}|_ref|{ref|...0|_ref|...0|}|_=>_none (func (param (ref ${ref|...0|}) (ref ${ref|...0|_ref|...0|})))) (type $[i31ref] (array i31ref)) (type $[ref|any|] (array (ref any))) (type ${ref|any|} (struct (field (ref any)))) (type ${i31ref_ref|any|} (struct (field i31ref) (field (ref any)))) (func $0 (param $0 (ref $[i32])) (param $1 (ref null $[i32])) (local.set $1 (local.get $0) ) ) (func $1 (param $0 (ref $[i31ref])) (param $1 (ref $[ref|any|])) (local.set $1 (local.get $0) ) ) (func $2 (param $0 (ref ${i31ref})) (param $1 (ref ${ref|any|})) (local.set $1 (local.get $0) ) ) (func $3 (param $0 (ref ${i31ref})) (param $1 (ref ${i31ref_ref|any|})) (local.set $0 (local.get $1) ) ) (func $4 (param $0 (ref ${ref|...0|})) (param $1 (ref ${ref|...0|_ref|...0|})) (local.set $0 (local.get $1) ) ) ) binaryen-version_108/test/table-import.wast000066400000000000000000000002331423707623100212210ustar00rootroot00000000000000(module (type $0 (func)) (import "env" "table" (table 1 1 funcref)) (elem (i32.const 0) $foo) (memory $0 0) (func $foo (type $0) (nop) ) ) binaryen-version_108/test/table-import.wast.from-wast000066400000000000000000000002241423707623100231370ustar00rootroot00000000000000(module (type $0 (func)) (import "env" "table" (table $timport$0 1 1 funcref)) (memory $0 0) (elem (i32.const 0) $foo) (func $foo (nop) ) ) binaryen-version_108/test/table-import.wast.fromBinary000066400000000000000000000002251423707623100233310ustar00rootroot00000000000000(module (type $0 (func)) (import "env" "table" (table $timport$0 1 1 funcref)) (memory $0 0) (elem (i32.const 0) $foo) (func $foo (nop) ) ) binaryen-version_108/test/table-import.wast.fromBinary.noDebugInfo000066400000000000000000000002341423707623100255270ustar00rootroot00000000000000(module (type $none_=>_none (func)) (import "env" "table" (table $timport$0 1 1 funcref)) (memory $0 0) (elem (i32.const 0) $0) (func $0 (nop) ) ) binaryen-version_108/test/tags.wast000066400000000000000000000005161423707623100175640ustar00rootroot00000000000000;; Test tags (module (tag (param i32)) (tag $e (param i32 f32)) (tag $empty) (tag $e-params0 (param i32 f32)) (tag $e-params1 (param i32) (param f32)) (tag $e-export (export "ex0") (param i32)) (tag $e-import (import "env" "im0") (param i32)) (import "env" "im1" (tag (param i32 f32))) (export "ex1" (tag $e)) ) binaryen-version_108/test/tags.wast.from-wast000066400000000000000000000006501423707623100215010ustar00rootroot00000000000000(module (type $i32_f32_=>_none (func (param i32 f32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "env" "im0" (tag $e-import (param i32))) (import "env" "im1" (tag $eimport$1 (param i32 f32))) (tag $2 (param i32)) (tag $e (param i32 f32)) (tag $empty (param)) (tag $e-params0 (param i32 f32)) (tag $e-params1 (param i32 f32)) (tag $e-export (param i32)) (export "ex1" (tag $e)) ) binaryen-version_108/test/tags.wast.fromBinary000066400000000000000000000006531423707623100216750ustar00rootroot00000000000000(module (type $i32_f32_=>_none (func (param i32 f32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "env" "im0" (tag $eimport$0 (param i32))) (import "env" "im1" (tag $eimport$1 (param i32 f32))) (tag $tag$0 (param i32)) (tag $tag$1 (param i32 f32)) (tag $tag$2 (param)) (tag $tag$3 (param i32 f32)) (tag $tag$4 (param i32 f32)) (tag $tag$5 (param i32)) (export "ex1" (tag $tag$1)) ) binaryen-version_108/test/tags.wast.fromBinary.noDebugInfo000066400000000000000000000006531423707623100240730ustar00rootroot00000000000000(module (type $i32_f32_=>_none (func (param i32 f32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (import "env" "im0" (tag $eimport$0 (param i32))) (import "env" "im1" (tag $eimport$1 (param i32 f32))) (tag $tag$0 (param i32)) (tag $tag$1 (param i32 f32)) (tag $tag$2 (param)) (tag $tag$3 (param i32 f32)) (tag $tag$4 (param i32 f32)) (tag $tag$5 (param i32)) (export "ex1" (tag $tag$1)) ) binaryen-version_108/test/tail-call.wast.from-wast000066400000000000000000000003021423707623100223770ustar00rootroot00000000000000(module (type $void (func)) (table $0 1 1 funcref) (elem (i32.const 0) $foo) (func $foo (return_call $bar) ) (func $bar (return_call_indirect $0 (type $void) (i32.const 0) ) ) ) binaryen-version_108/test/tail-call.wast.fromBinary000066400000000000000000000003031423707623100225710ustar00rootroot00000000000000(module (type $void (func)) (table $0 1 1 funcref) (elem (i32.const 0) $foo) (func $foo (return_call $bar) ) (func $bar (return_call_indirect $0 (type $void) (i32.const 0) ) ) ) binaryen-version_108/test/tail-call.wast.fromBinary.noDebugInfo000066400000000000000000000003131423707623100247700ustar00rootroot00000000000000(module (type $none_=>_none (func)) (table $0 1 1 funcref) (elem (i32.const 0) $0) (func $0 (return_call $1) ) (func $1 (return_call_indirect $0 (type $none_=>_none) (i32.const 0) ) ) ) binaryen-version_108/test/try-delegate.wasm000066400000000000000000000000731423707623100212030ustar00rootroot00000000000000asm`  ! @@ @@A@  binaryen-version_108/test/try-delegate.wasm.fromBinary000066400000000000000000000010021423707623100233030ustar00rootroot00000000000000(module (type $none_=>_none (func)) (tag $tag$0 (param)) (func $0 (try $label$6 (do (block $label$1 (try $label$4 (do ) (delegate $label$6) ) ) ) (catch $tag$0 ) ) ) (func $1 (try $label$9 (do (block $label$1 (try $label$7 (do ) (catch $tag$0 (drop (i32.const 0) ) (try $label$6 (do ) (delegate $label$9) ) ) ) ) ) (catch $tag$0 ) ) ) ) binaryen-version_108/test/typed-function-references.wast000066400000000000000000000024601423707623100237150ustar00rootroot00000000000000(module ;; inline ref type in result (type $_=>_eqref (func (result eqref))) (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $_=>_eqref)))) (type $=>eqref (func (result eqref))) (type $=>anyref (func (result anyref))) (type $mixed_results (func (result anyref f32 anyref f32))) (type $i32-i32 (func (param i32) (result i32))) (func $call-ref (call_ref (ref.func $call-ref)) ) (func $return-call-ref (return_call_ref (ref.func $call-ref)) ) (func $call-ref-more (param i32) (result i32) (call_ref (i32.const 42) (ref.func $call-ref-more)) ) (func $call_from-param (param $f (ref $i32-i32)) (result i32) (call_ref (i32.const 42) (local.get $f)) ) (func $call_from-param-null (param $f (ref null $i32-i32)) (result i32) (call_ref (i32.const 42) (local.get $f)) ) (func $call_from-local-null (result i32) (local $f (ref null $i32-i32)) (local.set $f (ref.func $call-ref-more)) (call_ref (i32.const 42) (local.get $f)) ) (func $ref-in-sig (param $0 f64) (result (ref null $=>eqref)) (ref.null $=>eqref) ) (func $type-only-in-tuple-local (local $x (i32 (ref null $=>anyref) f64)) ) (func $type-only-in-tuple-block (drop (block (result i32 (ref null $mixed_results) f64) (unreachable) ) ) ) ) binaryen-version_108/test/typed-function-references.wast.from-wast000066400000000000000000000031361423707623100256340ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32-i32 (func (param i32) (result i32))) (type $=>eqref (func (result eqref))) (type $ref|$i32-i32|_=>_i32 (func (param (ref $i32-i32)) (result i32))) (type $ref?|$i32-i32|_=>_i32 (func (param (ref null $i32-i32)) (result i32))) (type $none_=>_i32 (func (result i32))) (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $=>eqref)))) (type $=>anyref (func (result anyref))) (type $none_=>_i32_ref?|$mixed_results|_f64 (func (result i32 (ref null $mixed_results) f64))) (type $mixed_results (func (result anyref f32 anyref f32))) (elem declare func $call-ref $call-ref-more) (func $call-ref (call_ref (ref.func $call-ref) ) ) (func $return-call-ref (return_call_ref (ref.func $call-ref) ) ) (func $call-ref-more (param $0 i32) (result i32) (call_ref (i32.const 42) (ref.func $call-ref-more) ) ) (func $call_from-param (param $f (ref $i32-i32)) (result i32) (call_ref (i32.const 42) (local.get $f) ) ) (func $call_from-param-null (param $f (ref null $i32-i32)) (result i32) (call_ref (i32.const 42) (local.get $f) ) ) (func $call_from-local-null (result i32) (local $f (ref null $i32-i32)) (local.set $f (ref.func $call-ref-more) ) (call_ref (i32.const 42) (local.get $f) ) ) (func $ref-in-sig (param $0 f64) (result (ref null $=>eqref)) (ref.null $=>eqref) ) (func $type-only-in-tuple-local (local $x (i32 (ref null $=>anyref) f64)) (nop) ) (func $type-only-in-tuple-block (drop (block $block (result i32 (ref null $mixed_results) f64) (unreachable) ) ) ) ) binaryen-version_108/test/typed-function-references.wast.fromBinary000066400000000000000000000041521423707623100260240ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32-i32 (func (param i32) (result i32))) (type $mixed_results (func (result anyref f32 anyref f32))) (type $=>eqref (func (result eqref))) (type $ref|$i32-i32|_=>_i32 (func (param (ref $i32-i32)) (result i32))) (type $ref?|$i32-i32|_=>_i32 (func (param (ref null $i32-i32)) (result i32))) (type $none_=>_i32 (func (result i32))) (type $f64_=>_ref_null<_->_eqref> (func (param f64) (result (ref null $=>eqref)))) (type $=>anyref (func (result anyref))) (type $none_=>_i32_ref?|$mixed_results|_f64 (func (result i32 (ref null $mixed_results) f64))) (elem declare func $call-ref $call-ref-more) (func $call-ref (call_ref (ref.func $call-ref) ) ) (func $return-call-ref (return_call_ref (ref.func $call-ref) ) ) (func $call-ref-more (param $0 i32) (result i32) (call_ref (i32.const 42) (ref.func $call-ref-more) ) ) (func $call_from-param (param $f (ref $i32-i32)) (result i32) (call_ref (i32.const 42) (local.get $f) ) ) (func $call_from-param-null (param $f (ref null $i32-i32)) (result i32) (call_ref (i32.const 42) (local.get $f) ) ) (func $call_from-local-null (result i32) (local $f (ref null $i32-i32)) (local.set $f (ref.func $call-ref-more) ) (call_ref (i32.const 42) (local.get $f) ) ) (func $ref-in-sig (param $0 f64) (result (ref null $=>eqref)) (ref.null $=>eqref) ) (func $type-only-in-tuple-local (local $x i32) (local $1 (ref null $=>anyref)) (local $2 f64) (nop) ) (func $type-only-in-tuple-block (local $0 (i32 (ref null $mixed_results) f64)) (local $1 (ref null $mixed_results)) (local $2 i32) (local.set $0 (block $label$1 (result i32 (ref null $mixed_results) f64) (unreachable) ) ) (drop (block (result i32) (local.set $2 (tuple.extract 0 (local.get $0) ) ) (drop (block (result (ref null $mixed_results)) (local.set $1 (tuple.extract 1 (local.get $0) ) ) (drop (tuple.extract 2 (local.get $0) ) ) (local.get $1) ) ) (local.get $2) ) ) ) ) binaryen-version_108/test/typed-function-references.wast.fromBinary.noDebugInfo000066400000000000000000000041161423707623100302220ustar00rootroot00000000000000(module (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_anyref_f32_anyref_f32 (func (result anyref f32 anyref f32))) (type $none_=>_eqref (func (result eqref))) (type $ref|i32_->_i32|_=>_i32 (func (param (ref $i32_=>_i32)) (result i32))) (type $ref?|i32_->_i32|_=>_i32 (func (param (ref null $i32_=>_i32)) (result i32))) (type $none_=>_i32 (func (result i32))) (type $f64_=>_ref?|none_->_eqref| (func (param f64) (result (ref null $none_=>_eqref)))) (type $none_=>_anyref (func (result anyref))) (type $none_=>_i32_ref?|none_->_anyref_f32_anyref_f32|_f64 (func (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64))) (elem declare func $0 $2) (func $0 (call_ref (ref.func $0) ) ) (func $1 (return_call_ref (ref.func $0) ) ) (func $2 (param $0 i32) (result i32) (call_ref (i32.const 42) (ref.func $2) ) ) (func $3 (param $0 (ref $i32_=>_i32)) (result i32) (call_ref (i32.const 42) (local.get $0) ) ) (func $4 (param $0 (ref null $i32_=>_i32)) (result i32) (call_ref (i32.const 42) (local.get $0) ) ) (func $5 (result i32) (local $0 (ref null $i32_=>_i32)) (local.set $0 (ref.func $2) ) (call_ref (i32.const 42) (local.get $0) ) ) (func $6 (param $0 f64) (result (ref null $none_=>_eqref)) (ref.null $none_=>_eqref) ) (func $7 (local $0 i32) (local $1 (ref null $none_=>_anyref)) (local $2 f64) (nop) ) (func $8 (local $0 (i32 (ref null $none_=>_anyref_f32_anyref_f32) f64)) (local $1 (ref null $none_=>_anyref_f32_anyref_f32)) (local $2 i32) (local.set $0 (block $label$1 (result i32 (ref null $none_=>_anyref_f32_anyref_f32) f64) (unreachable) ) ) (drop (block (result i32) (local.set $2 (tuple.extract 0 (local.get $0) ) ) (drop (block (result (ref null $none_=>_anyref_f32_anyref_f32)) (local.set $1 (tuple.extract 1 (local.get $0) ) ) (drop (tuple.extract 2 (local.get $0) ) ) (local.get $1) ) ) (local.get $2) ) ) ) ) binaryen-version_108/test/unit.wast.from-wast000066400000000000000000000240311423707623100215210ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $f32_=>_none (func (param f32))) (type $none_=>_f64 (func (result f64))) (type $f64_f64_=>_f64 (func (param f64 f64) (result f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $f64_=>_i32 (func (param f64) (result i32))) (type $none_=>_i64 (func (result i64))) (type $f64_=>_f64 (func (param f64) (result f64))) (import "env" "_emscripten_asm_const_vi" (func $_emscripten_asm_const_vi)) (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (table $0 10 funcref) (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) (export "big_negative" (func $big_negative)) (func $big_negative (; 3 ;) (local $temp f64) (block $block0 (local.set $temp (f64.const -2147483648) ) (local.set $temp (f64.const -2147483648) ) (local.set $temp (f64.const -21474836480) ) (local.set $temp (f64.const 0.039625) ) (local.set $temp (f64.const -0.039625) ) ) ) (func $importedDoubles (; 4 ;) (result f64) (local $temp f64) (block $topmost (result f64) (local.set $temp (f64.add (f64.add (f64.add (f64.load (i32.const 8) ) (f64.load (i32.const 16) ) ) (f64.neg (f64.load (i32.const 16) ) ) ) (f64.neg (f64.load (i32.const 8) ) ) ) ) (if (i32.gt_s (i32.load (i32.const 24) ) (i32.const 0) ) (br $topmost (f64.const -3.4) ) ) (if (f64.gt (f64.load (i32.const 32) ) (f64.const 0) ) (br $topmost (f64.const 5.6) ) ) (f64.const 1.2) ) ) (func $doubleCompares (; 5 ;) (param $x f64) (param $y f64) (result f64) (local $t f64) (local $Int f64) (local $Double i32) (block $topmost (result f64) (if (f64.gt (local.get $x) (f64.const 0) ) (br $topmost (f64.const 1.2) ) ) (if (f64.gt (local.get $Int) (f64.const 0) ) (br $topmost (f64.const -3.4) ) ) (if (i32.gt_s (local.get $Double) (i32.const 0) ) (br $topmost (f64.const 5.6) ) ) (if (f64.lt (local.get $x) (local.get $y) ) (br $topmost (local.get $x) ) ) (local.get $y) ) ) (func $intOps (; 6 ;) (result i32) (local $x i32) (i32.eq (local.get $x) (i32.const 0) ) ) (func $hexLiterals (; 7 ;) (drop (i32.add (i32.add (i32.const 0) (i32.const 313249263) ) (i32.const -19088752) ) ) ) (func $conversions (; 8 ;) (local $i i32) (local $d f64) (block $block0 (local.set $i (call $f64-to-int (local.get $d) ) ) (local.set $d (f64.convert_i32_s (local.get $i) ) ) (local.set $d (f64.convert_i32_u (i32.shr_u (local.get $i) (i32.const 0) ) ) ) ) ) (func $seq (; 9 ;) (local $J f64) (local.set $J (f64.sub (block $block0 (result f64) (drop (f64.const 0.1) ) (f64.const 5.1) ) (block $block1 (result f64) (drop (f64.const 3.2) ) (f64.const 4.2) ) ) ) ) (func $switcher (; 10 ;) (param $x i32) (result i32) (block $topmost (result i32) (block $switch$0 (block $switch-default$3 (block $switch-case$2 (block $switch-case$1 (br_table $switch-case$1 $switch-case$2 $switch-default$3 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $topmost (i32.const 1) ) ) (br $topmost (i32.const 2) ) ) (nop) ) (block $switch$4 (block $switch-default$7 (block $switch-case$6 (block $switch-case$5 (br_table $switch-case$6 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-case$5 $switch-default$7 (i32.sub (local.get $x) (i32.const 5) ) ) ) (br $topmost (i32.const 121) ) ) (br $topmost (i32.const 51) ) ) (nop) ) (block $label$break$Lout (block $switch-default$16 (block $switch-case$15 (block $switch-case$12 (block $switch-case$9 (block $switch-case$8 (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 (i32.sub (local.get $x) (i32.const 2) ) ) ) (br $label$break$Lout) ) (br $label$break$Lout) ) (block $while-out$10 (loop $while-in$11 (block $block1 (br $while-out$10) (br $while-in$11) ) ) (br $label$break$Lout) ) ) (block $while-out$13 (loop $while-in$14 (block $block3 (br $label$break$Lout) (br $while-in$14) ) ) (br $label$break$Lout) ) ) (nop) ) (i32.const 0) ) ) (func $blocker (; 11 ;) (block $label$break$L (br $label$break$L) ) ) (func $frem (; 12 ;) (result f64) (call $f64-rem (f64.const 5.5) (f64.const 1.2) ) ) (func $big_uint_div_u (; 13 ;) (result i32) (local $x i32) (block $topmost (result i32) (local.set $x (i32.and (i32.div_u (i32.const -1) (i32.const 2) ) (i32.const -1) ) ) (local.get $x) ) ) (func $fr (; 14 ;) (param $x f32) (local $y f32) (local $z f64) (block $block0 (drop (f32.demote_f64 (local.get $z) ) ) (drop (local.get $y) ) (drop (f32.const 5) ) (drop (f32.const 0) ) (drop (f32.const 5) ) (drop (f32.const 0) ) ) ) (func $negZero (; 15 ;) (result f64) (f64.const -0) ) (func $abs (; 16 ;) (local $x i32) (local $y f64) (local $z f32) (local $asm2wasm_i32_temp i32) (block $block0 (local.set $x (block $block1 (result i32) (local.set $asm2wasm_i32_temp (i32.const 0) ) (select (i32.sub (i32.const 0) (local.get $asm2wasm_i32_temp) ) (local.get $asm2wasm_i32_temp) (i32.lt_s (local.get $asm2wasm_i32_temp) (i32.const 0) ) ) ) ) (local.set $y (f64.abs (f64.const 0) ) ) (local.set $z (f32.abs (f32.const 0) ) ) ) ) (func $neg (; 17 ;) (local $x f32) (block $block0 (local.set $x (f32.neg (local.get $x) ) ) (call_indirect (type $f32_=>_none) (local.get $x) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) ) (func $cneg (; 18 ;) (param $x f32) (call_indirect (type $f32_=>_none) (local.get $x) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) (func $___syscall_ret (; 19 ;) (local $$0 i32) (drop (i32.gt_u (i32.shr_u (local.get $$0) (i32.const 0) ) (i32.const -4096) ) ) ) (func $z (; 20 ;) (nop) ) (func $w (; 21 ;) (nop) ) (func $block_and_after (; 22 ;) (result i32) (block $waka (drop (i32.const 1) ) (br $waka) ) (i32.const 0) ) (func $loop-roundtrip (; 23 ;) (param $0 f64) (result f64) (loop $loop-in1 (result f64) (drop (local.get $0) ) (local.get $0) ) ) (func $big-i64 (; 24 ;) (result i64) (i64.const -9218868437227405313) ) (func $i64-store32 (; 25 ;) (param $0 i32) (param $1 i64) (i64.store32 (local.get $0) (local.get $1) ) ) (func $return-unreachable (; 26 ;) (result i32) (return (i32.const 1) ) ) (func $unreachable-block (; 27 ;) (result i32) (f64.abs (block $block (drop (i32.const 1) ) (return (i32.const 2) ) ) ) ) (func $unreachable-block-toplevel (; 28 ;) (result i32) (block $block (drop (i32.const 1) ) (return (i32.const 2) ) ) ) (func $unreachable-block0 (; 29 ;) (result i32) (f64.abs (block $block (return (i32.const 2) ) ) ) ) (func $unreachable-block0-toplevel (; 30 ;) (result i32) (block $block (return (i32.const 2) ) ) ) (func $unreachable-block-with-br (; 31 ;) (result i32) (block $block (drop (i32.const 1) ) (br $block) ) (i32.const 1) ) (func $unreachable-if (; 32 ;) (result i32) (f64.abs (if (i32.const 3) (return (i32.const 2) ) (return (i32.const 1) ) ) ) ) (func $unreachable-if-toplevel (; 33 ;) (result i32) (if (i32.const 3) (return (i32.const 2) ) (return (i32.const 1) ) ) ) (func $unreachable-loop (; 34 ;) (result i32) (f64.abs (loop $loop-in (nop) (return (i32.const 1) ) ) ) ) (func $unreachable-loop0 (; 35 ;) (result i32) (f64.abs (loop $loop-in (return (i32.const 1) ) ) ) ) (func $unreachable-loop-toplevel (; 36 ;) (result i32) (loop $loop-in (nop) (return (i32.const 1) ) ) ) (func $unreachable-loop0-toplevel (; 37 ;) (result i32) (loop $loop-in (return (i32.const 1) ) ) ) (func $unreachable-ifs (; 38 ;) (if (unreachable) (nop) ) (if (unreachable) (unreachable) ) (if (unreachable) (nop) (nop) ) (if (unreachable) (unreachable) (nop) ) (if (unreachable) (nop) (unreachable) ) (if (unreachable) (unreachable) (unreachable) ) (if (i32.const 1) (unreachable) (nop) ) (if (i32.const 1) (nop) (unreachable) ) (if (i32.const 1) (unreachable) (unreachable) ) ) (func $unreachable-if-arm (; 39 ;) (if (i32.const 1) (block $block (nop) ) (block $block12 (unreachable) (drop (i32.const 1) ) ) ) ) ) binaryen-version_108/test/unit.wast.fromBinary000066400000000000000000000210301423707623100217060ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $f32_=>_none (func (param f32))) (type $none_=>_f64 (func (result f64))) (type $f64_f64_=>_f64 (func (param f64 f64) (result f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $f64_=>_i32 (func (param f64) (result i32))) (type $none_=>_i64 (func (result i64))) (type $f64_=>_f64 (func (param f64) (result f64))) (import "env" "_emscripten_asm_const_vi" (func $_emscripten_asm_const_vi)) (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (table $0 10 funcref) (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) (export "big_negative" (func $big_negative)) (func $big_negative (; 3 ;) (local $0 f64) (local.set $0 (f64.const -2147483648) ) (local.set $0 (f64.const -2147483648) ) (local.set $0 (f64.const -21474836480) ) (local.set $0 (f64.const 0.039625) ) (local.set $0 (f64.const -0.039625) ) ) (func $importedDoubles (; 4 ;) (result f64) (local $0 f64) (block $label$1 (result f64) (local.set $0 (f64.add (f64.add (f64.add (f64.load (i32.const 8) ) (f64.load (i32.const 16) ) ) (f64.neg (f64.load (i32.const 16) ) ) ) (f64.neg (f64.load (i32.const 8) ) ) ) ) (if (i32.gt_s (i32.load (i32.const 24) ) (i32.const 0) ) (br $label$1 (f64.const -3.4) ) ) (if (f64.gt (f64.load (i32.const 32) ) (f64.const 0) ) (br $label$1 (f64.const 5.6) ) ) (f64.const 1.2) ) ) (func $doubleCompares (; 5 ;) (param $0 f64) (param $1 f64) (result f64) (local $2 i32) (local $3 f64) (local $4 f64) (block $label$1 (result f64) (if (f64.gt (local.get $0) (f64.const 0) ) (br $label$1 (f64.const 1.2) ) ) (if (f64.gt (local.get $4) (f64.const 0) ) (br $label$1 (f64.const -3.4) ) ) (if (i32.gt_s (local.get $2) (i32.const 0) ) (br $label$1 (f64.const 5.6) ) ) (if (f64.lt (local.get $0) (local.get $1) ) (br $label$1 (local.get $0) ) ) (local.get $1) ) ) (func $intOps (; 6 ;) (result i32) (local $0 i32) (i32.eq (local.get $0) (i32.const 0) ) ) (func $hexLiterals (; 7 ;) (drop (i32.add (i32.add (i32.const 0) (i32.const 313249263) ) (i32.const -19088752) ) ) ) (func $conversions (; 8 ;) (local $0 i32) (local $1 f64) (local.set $0 (call $f64-to-int (local.get $1) ) ) (local.set $1 (f64.convert_i32_s (local.get $0) ) ) (local.set $1 (f64.convert_i32_u (i32.shr_u (local.get $0) (i32.const 0) ) ) ) ) (func $seq (; 9 ;) (local $0 f64) (local.set $0 (f64.sub (block $label$1 (result f64) (drop (f64.const 0.1) ) (f64.const 5.1) ) (block $label$2 (result f64) (drop (f64.const 3.2) ) (f64.const 4.2) ) ) ) ) (func $switcher (; 10 ;) (param $0 i32) (result i32) (block $label$1 (result i32) (block $label$2 (block $label$3 (block $label$4 (block $label$5 (br_table $label$5 $label$4 $label$3 (i32.sub (local.get $0) (i32.const 1) ) ) ) (br $label$1 (i32.const 1) ) ) (br $label$1 (i32.const 2) ) ) (nop) ) (block $label$6 (block $label$7 (block $label$8 (block $label$9 (br_table $label$8 $label$7 $label$7 $label$7 $label$7 $label$7 $label$7 $label$9 $label$7 (i32.sub (local.get $0) (i32.const 5) ) ) ) (br $label$1 (i32.const 121) ) ) (br $label$1 (i32.const 51) ) ) (nop) ) (block $label$10 (block $label$11 (block $label$12 (block $label$13 (block $label$14 (block $label$15 (br_table $label$12 $label$11 $label$11 $label$13 $label$11 $label$11 $label$11 $label$11 $label$14 $label$11 $label$15 $label$11 (i32.sub (local.get $0) (i32.const 2) ) ) ) (br $label$10) ) (br $label$10) ) (block $label$16 (loop $label$17 (br $label$16) ) ) ) (block $label$18 (loop $label$19 (br $label$10) ) ) ) (nop) ) (i32.const 0) ) ) (func $blocker (; 11 ;) (block $label$1 (br $label$1) ) ) (func $frem (; 12 ;) (result f64) (call $f64-rem (f64.const 5.5) (f64.const 1.2) ) ) (func $big_uint_div_u (; 13 ;) (result i32) (local $0 i32) (local.set $0 (i32.and (i32.div_u (i32.const -1) (i32.const 2) ) (i32.const -1) ) ) (local.get $0) ) (func $fr (; 14 ;) (param $0 f32) (local $1 f32) (local $2 f64) (drop (f32.demote_f64 (local.get $2) ) ) (drop (local.get $1) ) (drop (f32.const 5) ) (drop (f32.const 0) ) (drop (f32.const 5) ) (drop (f32.const 0) ) ) (func $negZero (; 15 ;) (result f64) (f64.const -0) ) (func $abs (; 16 ;) (local $0 i32) (local $1 i32) (local $2 f32) (local $3 f64) (local.set $0 (block $label$1 (result i32) (local.set $1 (i32.const 0) ) (select (i32.sub (i32.const 0) (local.get $1) ) (local.get $1) (i32.lt_s (local.get $1) (i32.const 0) ) ) ) ) (local.set $3 (f64.abs (f64.const 0) ) ) (local.set $2 (f32.abs (f32.const 0) ) ) ) (func $neg (; 17 ;) (local $0 f32) (local.set $0 (f32.neg (local.get $0) ) ) (call_indirect (type $f32_=>_none) (local.get $0) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) (func $cneg (; 18 ;) (param $0 f32) (call_indirect (type $f32_=>_none) (local.get $0) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) (func $___syscall_ret (; 19 ;) (local $0 i32) (drop (i32.gt_u (i32.shr_u (local.get $0) (i32.const 0) ) (i32.const -4096) ) ) ) (func $z (; 20 ;) (nop) ) (func $w (; 21 ;) (nop) ) (func $block_and_after (; 22 ;) (result i32) (block $label$1 (drop (i32.const 1) ) (br $label$1) ) (i32.const 0) ) (func $loop-roundtrip (; 23 ;) (param $0 f64) (result f64) (loop $label$1 (result f64) (drop (local.get $0) ) (local.get $0) ) ) (func $big-i64 (; 24 ;) (result i64) (i64.const -9218868437227405313) ) (func $i64-store32 (; 25 ;) (param $0 i32) (param $1 i64) (i64.store32 (local.get $0) (local.get $1) ) ) (func $return-unreachable (; 26 ;) (result i32) (return (i32.const 1) ) ) (func $unreachable-block (; 27 ;) (result i32) (block $label$1 (drop (i32.const 1) ) (return (i32.const 2) ) ) ) (func $unreachable-block-toplevel (; 28 ;) (result i32) (drop (i32.const 1) ) (return (i32.const 2) ) ) (func $unreachable-block0 (; 29 ;) (result i32) (block $label$1 (return (i32.const 2) ) ) ) (func $unreachable-block0-toplevel (; 30 ;) (result i32) (return (i32.const 2) ) ) (func $unreachable-block-with-br (; 31 ;) (result i32) (block $label$1 (drop (i32.const 1) ) (br $label$1) ) (i32.const 1) ) (func $unreachable-if (; 32 ;) (result i32) (if (i32.const 3) (return (i32.const 2) ) (return (i32.const 1) ) ) ) (func $unreachable-if-toplevel (; 33 ;) (result i32) (if (i32.const 3) (return (i32.const 2) ) (return (i32.const 1) ) ) ) (func $unreachable-loop (; 34 ;) (result i32) (loop $label$1 (nop) (return (i32.const 1) ) ) ) (func $unreachable-loop0 (; 35 ;) (result i32) (loop $label$1 (return (i32.const 1) ) ) ) (func $unreachable-loop-toplevel (; 36 ;) (result i32) (loop $label$1 (nop) (return (i32.const 1) ) ) ) (func $unreachable-loop0-toplevel (; 37 ;) (result i32) (loop $label$1 (return (i32.const 1) ) ) ) (func $unreachable-ifs (; 38 ;) (unreachable) ) (func $unreachable-if-arm (; 39 ;) (if (i32.const 1) (nop) (unreachable) ) ) ) binaryen-version_108/test/unit.wast.fromBinary.noDebugInfo000066400000000000000000000201241423707623100241070ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (type $f32_=>_none (func (param f32))) (type $none_=>_f64 (func (result f64))) (type $f64_f64_=>_f64 (func (param f64 f64) (result f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $f64_=>_i32 (func (param f64) (result i32))) (type $none_=>_i64 (func (result i64))) (type $f64_=>_f64 (func (param f64) (result f64))) (import "env" "_emscripten_asm_const_vi" (func $fimport$0)) (import "asm2wasm" "f64-to-int" (func $fimport$1 (param f64) (result i32))) (import "asm2wasm" "f64-rem" (func $fimport$2 (param f64 f64) (result f64))) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (table $0 10 funcref) (elem (i32.const 0) $17 $0 $17 $17 $18 $18 $1 $18 $17 $15) (export "big_negative" (func $0)) (func $0 (; 3 ;) (local $0 f64) (local.set $0 (f64.const -2147483648) ) (local.set $0 (f64.const -2147483648) ) (local.set $0 (f64.const -21474836480) ) (local.set $0 (f64.const 0.039625) ) (local.set $0 (f64.const -0.039625) ) ) (func $1 (; 4 ;) (result f64) (local $0 f64) (block $label$1 (result f64) (local.set $0 (f64.add (f64.add (f64.add (f64.load (i32.const 8) ) (f64.load (i32.const 16) ) ) (f64.neg (f64.load (i32.const 16) ) ) ) (f64.neg (f64.load (i32.const 8) ) ) ) ) (if (i32.gt_s (i32.load (i32.const 24) ) (i32.const 0) ) (br $label$1 (f64.const -3.4) ) ) (if (f64.gt (f64.load (i32.const 32) ) (f64.const 0) ) (br $label$1 (f64.const 5.6) ) ) (f64.const 1.2) ) ) (func $2 (; 5 ;) (param $0 f64) (param $1 f64) (result f64) (local $2 i32) (local $3 f64) (local $4 f64) (block $label$1 (result f64) (if (f64.gt (local.get $0) (f64.const 0) ) (br $label$1 (f64.const 1.2) ) ) (if (f64.gt (local.get $4) (f64.const 0) ) (br $label$1 (f64.const -3.4) ) ) (if (i32.gt_s (local.get $2) (i32.const 0) ) (br $label$1 (f64.const 5.6) ) ) (if (f64.lt (local.get $0) (local.get $1) ) (br $label$1 (local.get $0) ) ) (local.get $1) ) ) (func $3 (; 6 ;) (result i32) (local $0 i32) (i32.eq (local.get $0) (i32.const 0) ) ) (func $4 (; 7 ;) (drop (i32.add (i32.add (i32.const 0) (i32.const 313249263) ) (i32.const -19088752) ) ) ) (func $5 (; 8 ;) (local $0 i32) (local $1 f64) (local.set $0 (call $fimport$1 (local.get $1) ) ) (local.set $1 (f64.convert_i32_s (local.get $0) ) ) (local.set $1 (f64.convert_i32_u (i32.shr_u (local.get $0) (i32.const 0) ) ) ) ) (func $6 (; 9 ;) (local $0 f64) (local.set $0 (f64.sub (block $label$1 (result f64) (drop (f64.const 0.1) ) (f64.const 5.1) ) (block $label$2 (result f64) (drop (f64.const 3.2) ) (f64.const 4.2) ) ) ) ) (func $7 (; 10 ;) (param $0 i32) (result i32) (block $label$1 (result i32) (block $label$2 (block $label$3 (block $label$4 (block $label$5 (br_table $label$5 $label$4 $label$3 (i32.sub (local.get $0) (i32.const 1) ) ) ) (br $label$1 (i32.const 1) ) ) (br $label$1 (i32.const 2) ) ) (nop) ) (block $label$6 (block $label$7 (block $label$8 (block $label$9 (br_table $label$8 $label$7 $label$7 $label$7 $label$7 $label$7 $label$7 $label$9 $label$7 (i32.sub (local.get $0) (i32.const 5) ) ) ) (br $label$1 (i32.const 121) ) ) (br $label$1 (i32.const 51) ) ) (nop) ) (block $label$10 (block $label$11 (block $label$12 (block $label$13 (block $label$14 (block $label$15 (br_table $label$12 $label$11 $label$11 $label$13 $label$11 $label$11 $label$11 $label$11 $label$14 $label$11 $label$15 $label$11 (i32.sub (local.get $0) (i32.const 2) ) ) ) (br $label$10) ) (br $label$10) ) (block $label$16 (loop $label$17 (br $label$16) ) ) ) (block $label$18 (loop $label$19 (br $label$10) ) ) ) (nop) ) (i32.const 0) ) ) (func $8 (; 11 ;) (block $label$1 (br $label$1) ) ) (func $9 (; 12 ;) (result f64) (call $fimport$2 (f64.const 5.5) (f64.const 1.2) ) ) (func $10 (; 13 ;) (result i32) (local $0 i32) (local.set $0 (i32.and (i32.div_u (i32.const -1) (i32.const 2) ) (i32.const -1) ) ) (local.get $0) ) (func $11 (; 14 ;) (param $0 f32) (local $1 f32) (local $2 f64) (drop (f32.demote_f64 (local.get $2) ) ) (drop (local.get $1) ) (drop (f32.const 5) ) (drop (f32.const 0) ) (drop (f32.const 5) ) (drop (f32.const 0) ) ) (func $12 (; 15 ;) (result f64) (f64.const -0) ) (func $13 (; 16 ;) (local $0 i32) (local $1 i32) (local $2 f32) (local $3 f64) (local.set $0 (block $label$1 (result i32) (local.set $1 (i32.const 0) ) (select (i32.sub (i32.const 0) (local.get $1) ) (local.get $1) (i32.lt_s (local.get $1) (i32.const 0) ) ) ) ) (local.set $3 (f64.abs (f64.const 0) ) ) (local.set $2 (f32.abs (f32.const 0) ) ) ) (func $14 (; 17 ;) (local $0 f32) (local.set $0 (f32.neg (local.get $0) ) ) (call_indirect (type $f32_=>_none) (local.get $0) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) (func $15 (; 18 ;) (param $0 f32) (call_indirect (type $f32_=>_none) (local.get $0) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) (func $16 (; 19 ;) (local $0 i32) (drop (i32.gt_u (i32.shr_u (local.get $0) (i32.const 0) ) (i32.const -4096) ) ) ) (func $17 (; 20 ;) (nop) ) (func $18 (; 21 ;) (nop) ) (func $19 (; 22 ;) (result i32) (block $label$1 (drop (i32.const 1) ) (br $label$1) ) (i32.const 0) ) (func $20 (; 23 ;) (param $0 f64) (result f64) (loop $label$1 (result f64) (drop (local.get $0) ) (local.get $0) ) ) (func $21 (; 24 ;) (result i64) (i64.const -9218868437227405313) ) (func $22 (; 25 ;) (param $0 i32) (param $1 i64) (i64.store32 (local.get $0) (local.get $1) ) ) (func $23 (; 26 ;) (result i32) (return (i32.const 1) ) ) (func $24 (; 27 ;) (result i32) (block $label$1 (drop (i32.const 1) ) (return (i32.const 2) ) ) ) (func $25 (; 28 ;) (result i32) (drop (i32.const 1) ) (return (i32.const 2) ) ) (func $26 (; 29 ;) (result i32) (block $label$1 (return (i32.const 2) ) ) ) (func $27 (; 30 ;) (result i32) (return (i32.const 2) ) ) (func $28 (; 31 ;) (result i32) (block $label$1 (drop (i32.const 1) ) (br $label$1) ) (i32.const 1) ) (func $29 (; 32 ;) (result i32) (if (i32.const 3) (return (i32.const 2) ) (return (i32.const 1) ) ) ) (func $30 (; 33 ;) (result i32) (if (i32.const 3) (return (i32.const 2) ) (return (i32.const 1) ) ) ) (func $31 (; 34 ;) (result i32) (loop $label$1 (nop) (return (i32.const 1) ) ) ) (func $32 (; 35 ;) (result i32) (loop $label$1 (return (i32.const 1) ) ) ) (func $33 (; 36 ;) (result i32) (loop $label$1 (nop) (return (i32.const 1) ) ) ) (func $34 (; 37 ;) (result i32) (loop $label$1 (return (i32.const 1) ) ) ) (func $35 (; 38 ;) (unreachable) ) (func $36 (; 39 ;) (if (i32.const 1) (nop) (unreachable) ) ) ) binaryen-version_108/test/unit.wat000066400000000000000000000303721423707623100174250ustar00rootroot00000000000000(module (type $FUNCSIG$vf (func (param f32))) (type $FUNCSIG$v (func)) (type $FUNCSIG$id (func (param f64) (result i32))) (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) (type $4 (func (result f64))) (type $5 (func (result i32))) (type $6 (func (param i32) (result i32))) (type $7 (func (param f64) (result f64))) (type $8 (func (result i64))) (type $9 (func (param i32 i64))) (import "env" "_emscripten_asm_const_vi" (func $_emscripten_asm_const_vi)) (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32))) (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64))) (table 10 funcref) (elem (i32.const 0) $z $big_negative $z $z $w $w $importedDoubles $w $z $cneg) (memory $0 4096 4096) (data (i32.const 1026) "\14\00") (export "big_negative" (func $big_negative)) (func $big_negative (type $FUNCSIG$v) (local $temp f64) (block $block0 (local.set $temp (f64.const -2147483648) ) (local.set $temp (f64.const -2147483648) ) (local.set $temp (f64.const -21474836480) ) (local.set $temp (f64.const 0.039625) ) (local.set $temp (f64.const -0.039625) ) ) ) (func $importedDoubles (type $4) (result f64) (local $temp f64) (block $topmost (result f64) (local.set $temp (f64.add (f64.add (f64.add (f64.load (i32.const 8) ) (f64.load (i32.const 16) ) ) (f64.neg (f64.load (i32.const 16) ) ) ) (f64.neg (f64.load (i32.const 8) ) ) ) ) (if (i32.gt_s (i32.load (i32.const 24) ) (i32.const 0) ) (br $topmost (f64.const -3.4) ) ) (if (f64.gt (f64.load (i32.const 32) ) (f64.const 0) ) (br $topmost (f64.const 5.6) ) ) (f64.const 1.2) ) ) (func $doubleCompares (type $FUNCSIG$ddd) (param $x f64) (param $y f64) (result f64) (local $t f64) (local $Int f64) (local $Double i32) (block $topmost (result f64) (if (f64.gt (local.get $x) (f64.const 0) ) (br $topmost (f64.const 1.2) ) ) (if (f64.gt (local.get $Int) (f64.const 0) ) (br $topmost (f64.const -3.4) ) ) (if (i32.gt_s (local.get $Double) (i32.const 0) ) (br $topmost (f64.const 5.6) ) ) (if (f64.lt (local.get $x) (local.get $y) ) (br $topmost (local.get $x) ) ) (local.get $y) ) ) (func $intOps (type $5) (result i32) (local $x i32) (i32.eq (local.get $x) (i32.const 0) ) ) (func $hexLiterals (type $FUNCSIG$v) (drop (i32.add (i32.add (i32.const 0) (i32.const 313249263) ) (i32.const -19088752) ) ) ) (func $conversions (type $FUNCSIG$v) (local $i i32) (local $d f64) (block $block0 (local.set $i (call $f64-to-int (local.get $d) ) ) (local.set $d (f64.convert_i32_s (local.get $i) ) ) (local.set $d (f64.convert_i32_u (i32.shr_u (local.get $i) (i32.const 0) ) ) ) ) ) (func $seq (type $FUNCSIG$v) (local $J f64) (local.set $J (f64.sub (block $block0 (result f64) (drop (f64.const 0.1) ) (f64.const 5.1) ) (block $block1 (result f64) (drop (f64.const 3.2) ) (f64.const 4.2) ) ) ) ) (func $switcher (type $6) (param $x i32) (result i32) (block $topmost (result i32) (block $switch$0 (block $switch-default$3 (block $switch-case$2 (block $switch-case$1 (br_table $switch-case$1 $switch-case$2 $switch-default$3 (i32.sub (local.get $x) (i32.const 1) ) ) ) (br $topmost (i32.const 1) ) ) (br $topmost (i32.const 2) ) ) (nop) ) (block $switch$4 (block $switch-default$7 (block $switch-case$6 (block $switch-case$5 (br_table $switch-case$6 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-default$7 $switch-case$5 $switch-default$7 (i32.sub (local.get $x) (i32.const 5) ) ) ) (br $topmost (i32.const 121) ) ) (br $topmost (i32.const 51) ) ) (nop) ) (block $label$break$Lout (block $switch-default$16 (block $switch-case$15 (block $switch-case$12 (block $switch-case$9 (block $switch-case$8 (br_table $switch-case$15 $switch-default$16 $switch-default$16 $switch-case$12 $switch-default$16 $switch-default$16 $switch-default$16 $switch-default$16 $switch-case$9 $switch-default$16 $switch-case$8 $switch-default$16 (i32.sub (local.get $x) (i32.const 2) ) ) ) (br $label$break$Lout) ) (br $label$break$Lout) ) (block $while-out$10 (loop $while-in$11 (block $block1 (br $while-out$10) (br $while-in$11) ) ) (br $label$break$Lout) ) ) (block $while-out$13 (loop $while-in$14 (block $block3 (br $label$break$Lout) (br $while-in$14) ) ) (br $label$break$Lout) ) ) (nop) ) (i32.const 0) ) ) (func $blocker (type $FUNCSIG$v) (block $label$break$L (br $label$break$L) ) ) (func $frem (type $4) (result f64) (call $f64-rem (f64.const 5.5) (f64.const 1.2) ) ) (func $big_uint_div_u (type $5) (result i32) (local $x i32) (block $topmost (result i32) (local.set $x (i32.and (i32.div_u (i32.const -1) (i32.const 2) ) (i32.const -1) ) ) (local.get $x) ) ) (func $fr (type $FUNCSIG$vf) (param $x f32) (local $y f32) (local $z f64) (block $block0 (drop (f32.demote_f64 (local.get $z) ) ) (drop (local.get $y) ) (drop (f32.const 5) ) (drop (f32.const 0) ) (drop (f32.const 5) ) (drop (f32.const 0) ) ) ) (func $negZero (type $4) (result f64) (f64.const -0) ) (func $abs (type $FUNCSIG$v) (local $x i32) (local $y f64) (local $z f32) (local $asm2wasm_i32_temp i32) (block $block0 (local.set $x (block $block1 (result i32) (local.set $asm2wasm_i32_temp (i32.const 0) ) (select (i32.sub (i32.const 0) (local.get $asm2wasm_i32_temp) ) (local.get $asm2wasm_i32_temp) (i32.lt_s (local.get $asm2wasm_i32_temp) (i32.const 0) ) ) ) ) (local.set $y (f64.abs (f64.const 0) ) ) (local.set $z (f32.abs (f32.const 0) ) ) ) ) (func $neg (type $FUNCSIG$v) (local $x f32) (block $block0 (local.set $x (f32.neg (local.get $x) ) ) (call_indirect (type $FUNCSIG$vf) (local.get $x) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) ) (func $cneg (type $FUNCSIG$vf) (param $x f32) (call_indirect (type $FUNCSIG$vf) (local.get $x) (i32.add (i32.and (i32.const 1) (i32.const 7) ) (i32.const 8) ) ) ) (func $___syscall_ret (type $FUNCSIG$v) (local $$0 i32) (drop (i32.gt_u (i32.shr_u (local.get $$0) (i32.const 0) ) (i32.const -4096) ) ) ) (func $z (type $FUNCSIG$v) (nop) ) (func $w (type $FUNCSIG$v) (nop) ) (func $block_and_after (type $5) (result i32) (block $waka (drop (i32.const 1) ) (br $waka) ) (i32.const 0) ) (func $loop-roundtrip (type $7) (param $0 f64) (result f64) (loop $loop-in1 (result f64) (drop (local.get $0) ) (local.get $0) ) ) (func $big-i64 (type $8) (result i64) (i64.const -9218868437227405313) ) (func $i64-store32 (type $9) (param $0 i32) (param $1 i64) (i64.store32 (local.get $0) (local.get $1) ) ) (func $return-unreachable (result i32) (return (i32.const 1)) ) (func $unreachable-block (result i32) (f64.abs (block ;; note no type - valid in binaryen IR, in wasm must be i32 (drop (i32.const 1)) (return (i32.const 2)) ) ) ) (func $unreachable-block-toplevel (result i32) (block ;; note no type - valid in binaryen IR, in wasm must be i32 (drop (i32.const 1)) (return (i32.const 2)) ) ) (func $unreachable-block0 (result i32) (f64.abs (block ;; note no type - valid in binaryen IR, in wasm must be i32 (return (i32.const 2)) ) ) ) (func $unreachable-block0-toplevel (result i32) (block ;; note no type - valid in binaryen IR, in wasm must be i32 (return (i32.const 2)) ) ) (func $unreachable-block-with-br (result i32) (block $block ;; unreachable type due to last element having that type, but the block is exitable (drop (i32.const 1)) (br $block) ) (i32.const 1) ) (func $unreachable-if (result i32) (f64.abs (if ;; note no type - valid in binaryen IR, in wasm must be i32 (i32.const 3) (return (i32.const 2)) (return (i32.const 1)) ) ) ) (func $unreachable-if-toplevel (result i32) (if ;; note no type - valid in binaryen IR, in wasm must be i32 (i32.const 3) (return (i32.const 2)) (return (i32.const 1)) ) ) (func $unreachable-loop (result i32) (f64.abs (loop ;; note no type - valid in binaryen IR, in wasm must be i32 (nop) (return (i32.const 1)) ) ) ) (func $unreachable-loop0 (result i32) (f64.abs (loop ;; note no type - valid in binaryen IR, in wasm must be i32 (return (i32.const 1)) ) ) ) (func $unreachable-loop-toplevel (result i32) (loop ;; note no type - valid in binaryen IR, in wasm must be i32 (nop) (return (i32.const 1)) ) ) (func $unreachable-loop0-toplevel (result i32) (loop ;; note no type - valid in binaryen IR, in wasm must be i32 (return (i32.const 1)) ) ) (func $unreachable-ifs (if (unreachable) (nop)) (if (unreachable) (unreachable)) (if (unreachable) (nop) (nop)) (if (unreachable) (unreachable) (nop)) (if (unreachable) (nop) (unreachable)) (if (unreachable) (unreachable) (unreachable)) ;; (if (i32.const 1) (unreachable) (nop)) (if (i32.const 1) (nop) (unreachable)) (if (i32.const 1) (unreachable) (unreachable)) ) (func $unreachable-if-arm (if (i32.const 1) (block (nop) ) (block (unreachable) (drop (i32.const 1) ) ) ) ) ) binaryen-version_108/test/unit/000077500000000000000000000000001423707623100167035ustar00rootroot00000000000000binaryen-version_108/test/unit/__init__.py000066400000000000000000000000001423707623100210020ustar00rootroot00000000000000binaryen-version_108/test/unit/input/000077500000000000000000000000001423707623100200425ustar00rootroot00000000000000binaryen-version_108/test/unit/input/asyncify-coroutine.wat000066400000000000000000000020531423707623100244110ustar00rootroot00000000000000(module (memory 1 2) ;; import a "yield" function that receives the current value, ;; then pauses execution until it is resumed later. (import "env" "yield" (func $yield (param i32))) (export "memory" (memory 0)) ;; simple linear progression in a loop (func "linear" (result i32) (local $x i32) (loop $l (call $yield (local.get $x)) (local.set $x (i32.add (local.get $x) (i32.const 10)) ) (br $l) ) ) ;; exponential in a loop (func "exponential" (result i32) (local $x i32) (local.set $x (i32.const 1) ) (loop $l (call $yield (local.get $x)) (local.set $x (i32.mul (local.get $x) (i32.const 2)) ) (br $l) ) ) ;; just some weird numbers, no loop (func "weird" (result i32) (call $yield (i32.const 42)) (call $yield (i32.const 1337)) (call $yield (i32.const 0)) (call $yield (i32.const -1000)) (call $yield (i32.const 42)) (call $yield (i32.const 314159)) (call $yield (i32.const 21828)) (unreachable) ) ) binaryen-version_108/test/unit/input/asyncify-pure.txt000066400000000000000000000002501423707623100233760ustar00rootroot00000000000000100 : i32 10 : i32 1 : i32 20 : i32 1000 : i32 2000 : i32 4000 : i32 200 : i32 300 : i32 400 : i32 1000 : i32 3000 : i32 4000 : i32 30 : i32 2 : i32 40 : i32 500 : i32 binaryen-version_108/test/unit/input/asyncify-pure.wat000066400000000000000000000036011423707623100233550ustar00rootroot00000000000000(module (memory 1 1) (import "spectest" "print" (func $print (param i32))) (import "asyncify" "start_unwind" (func $asyncify_start_unwind (param i32))) (import "asyncify" "stop_unwind" (func $asyncify_stop_unwind)) (import "asyncify" "start_rewind" (func $asyncify_start_rewind (param i32))) (import "asyncify" "stop_rewind" (func $asyncify_stop_rewind)) (global $sleeping (mut i32) (i32.const 0)) (start $runtime) (func $main (call $print (i32.const 10)) (call $before) (call $print (i32.const 20)) (call $sleep) (call $print (i32.const 30)) (call $after) (call $print (i32.const 40)) ) (func $before (call $print (i32.const 1)) ) (func $sleep (call $print (i32.const 1000)) (if (i32.eqz (global.get $sleeping)) (block (call $print (i32.const 2000)) (global.set $sleeping (i32.const 1)) (i32.store (i32.const 16) (i32.const 24)) (i32.store (i32.const 20) (i32.const 1024)) (call $asyncify_start_unwind (i32.const 16)) ) (block (call $print (i32.const 3000)) (call $asyncify_stop_rewind) (global.set $sleeping (i32.const 0)) ) ) (call $print (i32.const 4000)) ) (func $after (call $print (i32.const 2)) ) (func $runtime (call $print (i32.const 100)) ;; call main the first time, let the stack unwind (call $main) (call $print (i32.const 200)) (call $asyncify_stop_unwind) (call $print (i32.const 300)) ;; ...can do some async stuff around here... ;; set the rewind in motion (call $asyncify_start_rewind (i32.const 16)) (call $print (i32.const 400)) (call $main) (call $print (i32.const 500)) ) ;; interesting escaped name (func $DOS_ReadFile\28unsigned\20short\2c\20unsigned\20char*\2c\20unsigned\20short*\2c\20bool\29 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) ) ) binaryen-version_108/test/unit/input/asyncify-sleep.wat000066400000000000000000000114541423707623100235170ustar00rootroot00000000000000(module (memory 1 2) (type $ii (func (param i32) (result i32))) (import "env" "sleep" (func $sleep)) (import "env" "tunnel" (func $tunnel (param $x i32) (result i32))) (export "memory" (memory 0)) (export "factorial-recursive" (func $factorial-recursive)) (global $temp (mut i32) (i32.const 0)) (table 10 funcref) (elem (i32.const 5) $tablefunc) (func "minimal" (result i32) (call $sleep) (i32.const 21) ) (func "repeat" (result i32) ;; sleep twice, then return 42 (call $sleep) (call $sleep) (i32.const 42) ) (func "local" (result i32) (local $x i32) (local.set $x (i32.load (i32.const 0))) ;; a zero that the optimizer won't see (local.set $x (i32.add (local.get $x) (i32.const 10)) ;; add 10 ) (call $sleep) (local.get $x) ) (func "local2" (result i32) (local $x i32) (local.set $x (i32.load (i32.const 0))) ;; a zero that the optimizer won't see (local.set $x (i32.add (local.get $x) (i32.const 10)) ;; add 10 ) (call $sleep) (local.set $x (i32.add (local.get $x) (i32.const 12)) ;; add 12 more ) (local.get $x) ) (func "params" (param $x i32) (param $y i32) (result i32) (local.set $x (i32.add (local.get $x) (i32.const 17)) ;; add 10 ) (local.set $y (i32.add (local.get $y) (i32.const 1)) ;; add 12 more ) (call $sleep) (i32.add (local.get $x) (local.get $y)) ) (func $pre (global.set $temp (i32.const 1)) ) (func $inner (param $x i32) (if (i32.eqz (local.get $x)) (call $post)) (if (local.get $x) (call $sleep)) (if (i32.eqz (local.get $x)) (call $post)) ) (func $post (global.set $temp (i32.mul (global.get $temp) (i32.const 3) ) ) ) (func "deeper" (param $x i32) (result i32) (call $pre) (call $inner (local.get $x)) (call $post) (global.get $temp) ) (func $factorial-recursive (param $x i32) (result i32) (if (i32.eq (local.get $x) (i32.const 1) ) (return (i32.const 1)) ) (call $sleep) (return (i32.mul (local.get $x) (call $factorial-recursive (i32.sub (local.get $x) (i32.const 1) ) ) ) ) ) (func "factorial-loop" (param $x i32) (result i32) (local $i i32) (local $ret i32) (local.set $ret (i32.const 1)) (local.set $i (i32.const 2)) (loop $l (if (i32.gt_u (local.get $i) (local.get $x) ) (return (local.get $ret)) ) (local.set $ret (i32.mul (local.get $ret) (local.get $i) ) ) (call $sleep) (local.set $i (i32.add (local.get $i) (i32.const 1) ) ) (br $l) ) ) (func "end_tunnel" (param $x i32) (result i32) (local.set $x (i32.add (local.get $x) (i32.const 22)) ) (call $sleep) (i32.add (local.get $x) (i32.const 5)) ) (func "do_tunnel" (param $x i32) (result i32) (local.set $x (i32.add (local.get $x) (i32.const 11)) ) (local.set $x (call $tunnel (local.get $x)) ;; calls js which calls back into wasm for end_tunnel ) (call $sleep) (i32.add (local.get $x) (i32.const 33)) ) (func $tablefunc (param $y i32) (result i32) (local.set $y (i32.add (local.get $y) (i32.const 10)) ) (call $sleep) (i32.add (local.get $y) (i32.const 30)) ) (func "call_indirect" (param $x i32) (param $y i32) (result i32) (local.set $x (i32.add (local.get $x) (i32.const 1)) ) (call $sleep) (local.set $x (i32.add (local.get $x) (i32.const 3)) ) (local.set $y (call_indirect (type $ii) (local.get $y) (local.get $x)) ;; call function pointer x + 4, which will be 5 ) (local.set $y (i32.add (local.get $y) (i32.const 90)) ) (call $sleep) (i32.add (local.get $y) (i32.const 300)) ;; total is 10+30+90+300=430 + y's original value ) (func "if_else" (param $x i32) (param $y i32) (result i32) (if (i32.eq (local.get $x) (i32.const 1)) (local.set $y (i32.add (local.get $y) (i32.const 10)) ) (local.set $y (i32.add (local.get $y) (i32.const 20)) ) ) (if (i32.eq (local.get $x) (i32.const 1)) (local.set $y (i32.add (local.get $y) (i32.const 40)) ) (call $sleep) ) (if (i32.eq (local.get $x) (i32.const 1)) (call $sleep) (local.set $y (i32.add (local.get $y) (i32.const 90)) ) ) (if (i32.eq (local.get $x) (i32.const 1)) (call $sleep) (call $sleep) ) (local.set $y (i32.add (local.get $y) (i32.const 160)) ) (call $sleep) (local.set $y (i32.add (local.get $y) (i32.const 250)) ) (local.get $y) ) ) binaryen-version_108/test/unit/input/asyncify-stackOverflow.wat000066400000000000000000000006531423707623100252370ustar00rootroot00000000000000(module (memory 1 2) (import "env" "sleep" (func $sleep)) (export "memory" (memory 0)) (func "many_locals" (param $x i32) (result i32) (local $y i32) (local $z i32) (local.set $y (i32.add (local.get $x) (i32.const 10)) ) (local.set $z (i32.add (local.get $y) (i32.const 20)) ) (call $sleep) (select (local.get $y) (local.get $z) (local.get $x) ) ) ) binaryen-version_108/test/unit/input/asyncify.js000066400000000000000000000210201423707623100222200ustar00rootroot00000000000000 function assert(x, y) { if (!x) throw (y || 'assertion failed') + '\n' + new Error().stack; } var fs = require('fs'); function sleepTests() { console.log('\nsleep tests\n\n'); // Get and compile the wasm. var binary = fs.readFileSync('a.wasm'); var module = new WebAssembly.Module(binary); var DATA_ADDR = 4; var sleeps = 0; var sleeping = false; var instance = new WebAssembly.Instance(module, { env: { sleep: function() { logMemory(); if (!sleeping) { // We are called in order to start a sleep/unwind. console.log('sleep...'); sleeps++; sleeping = true; // Unwinding. // Fill in the data structure. The first value has the stack location, // which for simplicity we can start right after the data structure itself. view[DATA_ADDR >> 2] = DATA_ADDR + 8; // The end of the stack will not be reached here anyhow. view[DATA_ADDR + 4 >> 2] = 1024; exports.asyncify_start_unwind(DATA_ADDR); } else { // We are called as part of a resume/rewind. Stop sleeping. console.log('resume...'); exports.asyncify_stop_rewind(); // The stack should have been all used up, and so returned to the original state. assert(view[DATA_ADDR >> 2] == DATA_ADDR + 8); assert(view[DATA_ADDR + 4 >> 2] == 1024); sleeping = false; } logMemory(); }, tunnel: function(x) { console.log('tunneling, sleep == ' + sleeping); return exports.end_tunnel(x); } } }); var exports = instance.exports; var view = new Int32Array(exports.memory.buffer); function logMemory() { // Log the relevant memory locations for debugging purposes. console.log('memory: ', view[0 >> 2], view[4 >> 2], view[8 >> 2], view[12 >> 2], view[16 >> 2], view[20 >> 2], view[24 >> 2]); } function runTest(name, expectedSleeps, expectedResult, params) { params = params || []; console.log('\n==== testing ' + name + ' ===='); sleeps = 0; logMemory(); // Run until the sleep. var result = exports[name].apply(null, params); logMemory(); if (expectedSleeps > 0) { assert(!result, 'results during sleep are meaningless, just 0'); exports.asyncify_stop_unwind(); for (var i = 0; i < expectedSleeps - 1; i++) { console.log('rewind, run until the next sleep'); exports.asyncify_start_rewind(DATA_ADDR); result = exports[name](); // no need for params on later times assert(!result, 'results during sleep are meaningless, just 0'); logMemory(); exports.asyncify_stop_unwind(); } console.log('rewind and run til the end.'); exports.asyncify_start_rewind(DATA_ADDR); result = exports[name](); } console.log('final result: ' + result); assert(result == expectedResult, 'bad final result'); logMemory(); assert(sleeps == expectedSleeps, 'expectedSleeps'); } //================ // Tests //================ // A minimal single sleep. runTest('minimal', 1, 21); // Two sleeps. runTest('repeat', 2, 42); // A value in a local is preserved across a sleep. runTest('local', 1, 10); // A local with more operations done on it. runTest('local2', 1, 22); // A local with more operations done on it. runTest('params', 1, 18); runTest('params', 1, 21, [1, 2]); // Calls to multiple other functions, only one of whom // sleeps, and keep locals and globals valid throughout. runTest('deeper', 0, 27, [0]); runTest('deeper', 1, 3, [1]); // A recursive factorial, that sleeps on each iteration // above 1. runTest('factorial-recursive', 0, 1, [1]); runTest('factorial-recursive', 1, 2, [2]); runTest('factorial-recursive', 2, 6, [3]); runTest('factorial-recursive', 3, 24, [4]); runTest('factorial-recursive', 4, 120, [5]); // A looping factorial, that sleeps on each iteration // above 1. runTest('factorial-loop', 0, 1, [1]); runTest('factorial-loop', 1, 2, [2]); runTest('factorial-loop', 2, 6, [3]); runTest('factorial-loop', 3, 24, [4]); runTest('factorial-loop', 4, 120, [5]); // Test calling into JS in the middle (which can work if // the JS just forwards the call and has no side effects or // state of its own that needs to be saved). runTest('do_tunnel', 2, 72, [1]); // Test indirect function calls. runTest('call_indirect', 3, 432, [1, 2]); // Test indirect function calls. runTest('if_else', 3, 1460, [1, 1000]); runTest('if_else', 3, 2520, [2, 2000]); } function coroutineTests() { console.log('\ncoroutine tests\n\n'); // Get and compile the wasm. var binary = fs.readFileSync('b.wasm'); var module = new WebAssembly.Module(binary); // Create a coroutine, for a specific export to // call, and whose unwind/rewind data is in // a specific range. function Coroutine(name, dataStart, dataEnd) { this.name = name; this.start = function() { exports[name](); }; this.startUnwind = function() { // Initialize the data. view[dataStart >> 2] = dataStart + 8; view[dataStart + 4 >> 2] = dataEnd; exports.asyncify_start_unwind(dataStart); // (With C etc. coroutines we would also have // a C stack to pause and resume here.) }; this.stopUnwind = function() { exports.asyncify_stop_unwind(); }; this.startRewind = function() { exports.asyncify_start_rewind(dataStart); exports[name](); }; this.stopRewind = function() { exports.asyncify_stop_rewind(); }; } var Runtime = { coroutines: [ new Coroutine('linear', 1000, 2000), new Coroutine('exponential', 2000, 3000), new Coroutine('weird', 3000, 4000) ], active: null, rewinding: false, run: function(iters) { Runtime.coroutines.forEach(function(coroutine) { console.log('starting ' + coroutine.name); Runtime.active = coroutine; coroutine.start(); coroutine.stopUnwind(); Runtime.active = null; }); for (var i = 0; i < iters; i++) { Runtime.coroutines.forEach(function(coroutine) { console.log('resuming ' + coroutine.name); Runtime.active = coroutine; Runtime.rewinding = true; coroutine.startRewind(); Runtime.active = null; }); } }, values: [], yield: function(value) { console.log('yield reached', Runtime.rewinding, value); var coroutine = Runtime.active; if (Runtime.rewinding) { coroutine.stopRewind(); Runtime.rewinding = false; } else { Runtime.values.push(value); coroutine.startUnwind(); console.log('pausing ' + coroutine.name); } }, }; var instance = new WebAssembly.Instance(module, { env: { yield: Runtime.yield } }); var exports = instance.exports; var view = new Int32Array(exports.memory.buffer); Runtime.run(4); console.log(Runtime.values); assert(JSON.stringify(Runtime.values) === JSON.stringify([ 0, 1, 42, 10, 2, 1337, 20, 4, 0, 30, 8, -1000, 40, 16, 42 ]), 'check yielded values') } function stackOverflowAssertTests() { console.log('\nstack overflow assertion tests\n\n'); // Get and compile the wasm. var binary = fs.readFileSync('c.wasm'); var module = new WebAssembly.Module(binary); var DATA_ADDR = 4; var instance = new WebAssembly.Instance(module, { env: { sleep: function() { console.log('sleep...'); exports.asyncify_start_unwind(DATA_ADDR); view[DATA_ADDR >> 2] = DATA_ADDR + 8; // The end of the stack will be reached as the stack is tiny. view[DATA_ADDR + 4 >> 2] = view[DATA_ADDR >> 2] + 1; } } }); var exports = instance.exports; var view = new Int32Array(exports.memory.buffer); exports.many_locals(); assert(view[DATA_ADDR >> 2] > view[DATA_ADDR + 4 >> 2], 'should have wrote past the end of the stack'); // All API calls should now fail, since we wrote past the end of the // stack var fails = 0; ['asyncify_stop_unwind', 'asyncify_start_rewind', 'asyncify_stop_rewind', 'asyncify_start_unwind'].forEach(function(name) { try { exports[name](DATA_ADDR); console.log('no fail on', name); } catch (e) { console.log('expected fail on', name); fails++; } }); assert(fails == 4, 'all 4 should have failed'); } // Main sleepTests(); coroutineTests(); stackOverflowAssertTests(); console.log('\ntests completed successfully'); binaryen-version_108/test/unit/input/atomics_target_feature.wasm000077500000000000000000000003231423707623100254540ustar00rootroot00000000000000asm`pA€ˆ A€ˆ A€ +memory __heap_base __data_endfoo  A*þ Bnamefoo000global$0global$1global$2target_features+atomicsbinaryen-version_108/test/unit/input/bulkmem_bad_datacount.wasm000077500000000000000000000002611423707623100252410ustar00rootroot00000000000000asm`pAˆ Aˆ A† %memory __heap_base __data_end   A€ hello!name__wasm_call_ctorstarget_features+ bulk-memorybinaryen-version_108/test/unit/input/bulkmem_data.wasm000077500000000000000000000003371423707623100233660ustar00rootroot00000000000000asm`pAˆ Aˆ A† %memory __heap_base __data_end   A€ hello!Hname__wasm_call_ctors00global$0global$1global$2target_features+ bulk-memorybinaryen-version_108/test/unit/input/bulkmem_target_feature.wasm000077500000000000000000000003331423707623100254520ustar00rootroot00000000000000asm`pA€ˆ A€ˆ A€ +memory __heap_base __data_endfoo  A*ü Enamefoo 0100global$0global$1global$2target_features+ bulk-memorybinaryen-version_108/test/unit/input/dwarf/000077500000000000000000000000001423707623100211455ustar00rootroot00000000000000binaryen-version_108/test/unit/input/dwarf/cubescript.wasm000066400000000000000000005720121423707623100242100ustar00rootroot00000000000000asm£,```````````|``````` `}}}`}`}`}`}`}}`~`~~`~`|`||`~~`~~~~`~~`||`~`~`|~`~~~~`|`~~|`|}`}`|}`}}`~~â envmemory€€env__indirect_function_tableptenv __cxa_atexit envexitenvtime wasi_snapshot_preview1fd_write envabortenvemscripten_get_sbrk_ptr envemscripten_resize_heap envemscripten_memcpy_big äâ                                         !"! # $$$$%&''()*   +  A âÀ A”â y__wasm_call_ctorsmainÎ__errno_locationôsetThrewç_ZSt18uncaught_exceptionvèmallocÝfreeÞ __data_end ØA s%8?[mortvwpxy|}†~‰‘“•—™›Ÿ¡£¥§©«­¯±³µ·¹»½¿ÁÃÅÇÉËÍÏÑÓÕ×ÙÜßâåèëîñô÷ùüÿƒ…‡‰‹“•—™›Ÿ¡£¥©­°´½¾ú—û€“”ËÎÌÍÑÛÙÔÏÚØÕ £ÚâÍ @ E ƒ€€ Š€€€  Õ‚€€‹€€€  ߀€€ Ajà€€€ ñ@ (AÿÿÿÿF @ ("AK @@@@  ("-E @  ( F ƒ€€ A€ˆ€€Š€€€6  ($ ( 6 ((€€€€  ($ ( 6 ((€€€€  @ ($("E ƒ€€ ($ ( 6 ((€€€€ Aÿÿÿÿ6 V@ (AG A¿ƒ€€!@ ( ("G Š€€€!  6  (6 6 6 ^@ (AG (E @ ("E  ( F ƒ€€ ("(6 (6 E Áƒ€€ ‘#€€€€A0k"$€€€€  6,@A(°¶€€ A,j€€€" A (,Š€€€A€ˆ€€Š€€€A- ³€€‘€€€!A(°¶€€ Aj ’€€€! “€€€ A0j$€€€€ P@ ( (Aj ("”€€€qAtj("E @@  •€€€E Aj (0" A = 6( A6 6 Bÿÿÿÿ7 6 6 Aä‘€€6 ƒA!@@ ( (Aj ("”€€€q"Atj("E @@  •€€€E Aj!A!  (0" @ E  –€€€Aj —€€€!   Aä‘€€6 @A…*!@ -"E A!@ A!l AtAus! Aj"j-"   (¿‚€€  À‚€€" (6 ^ )7 A(j A(j(6 A j A j)7 Aj Aj)7 Aj Aj)7 Aj Aj)7  €€€ €€€  Š€€€˜€€€ K#€€€€Ak"$€€€€  6 @A(°¶€€ A j€€€"E Ž€€€ Aj$€€€€ u#€€€€Ak"$€€€€  6 @A(°¶€€ A j€€€"E @ -(AqE  (6AAˆ€€ œ€€€  Œ€€€ Aj$€€€€ 3#€€€€Ak"$€€€€  6  €€€ Aj$€€€€ 0Að½€€  A€䀀€ Að½€€·‚€€Að½€€õ‚€€ Ašˆ€€A€€€AŸˆ€€Ÿ€€€ #€€€€A0k"$€€€€  6,@A(°¶€€ A¿ƒ€€"A€ €€€A 6°¶€€ A (,  AA¡€€€!A(°¶€€ A,j ’€€€ “€€€ A0j$€€€€A  ©€€€ D 6( 6 6 6 Aÿÿÿÿ6 6 6 Aä‘€€6 A¢ˆ€€A‚€€€A¦ˆ€€Ÿ€€€ A¨ˆ€€Aƒ€€€A¦ˆ€€Ÿ€€€ î#€€€€AÀk"$€€€€  6<@@A(°¶€€ A#€€€€Ak"$€€€€  6 A(ø”€€ –ƒ€€! Aj$€€€€  Ó#€€€€A k"$€€€€ AjA€•€€A僀€@@@ AjAÿÿÿÿI   AŸj!A!  64  6 A~ k"   K"68  j"6$  6 Aj  ’ƒ€€! E  ("  (FkA:  ô‚€€A=6A! A j$€€€€ 7 ("   ( k"  K"僀€ ( j6  Ó#€€€€A k"$€€€€ AjA€•€€A僀€@@@ AjAÿÿÿÿI   AŸj!A!  64  6 A~ k"   K"68  j"6$  6 Aj  –ƒ€€! E  ("  (FkA:  ô‚€€A=6A! A j$€€€€ 7#€€€€Ak"$€€€€  6  ˜ƒ€€! Aj$€€€€  ¤#€€€€Ak"$€€€€  :@@ (" A! ÷‚€€  (! @ (" O Aÿq" ,KF Aj6  :  A! AjA ($‰€€€AG -! Aj$€€€€  AÀ´€€ ­A!@@ E AÿM @@†ƒ€€(°( A€qA€¿F ô‚€€A6  @ AÿK A?qA€r: AvAÀr:A @@ A€°I A€@qA€ÀG  A?qA€r: A vAàr: AvA?qA€r:A @ A€€|jAÿÿ?K A?qA€r: AvAðr: AvA?qA€r: A vA?qA€r:A ô‚€€A6 A!  :A „ƒ€€ @ A A…ƒ€€ ’~@ ½"B4ˆ§Aÿq"AÿF @  @@ Db A!  DðC¢ ˆƒ€€! (A@j!  6   A‚xj6 Bÿÿÿÿÿÿÿ‡€ƒB€€€€€€€ð?„¿! °#€€€€AÐk"$€€€€  6ÌA! A jAA(惀€  (Ì6È@@A  AÈj AÐj A j  Šƒ€€AN A!  @ (LAH ü‚€€! (!@ ,JAJ A_q6 A q!@@ (0E  AÈj AÐj A j  Šƒ€€!  AÐ60 AÐj6 6 6 (,! 6,  AÈj AÐj A j  Šƒ€€! E AA ($‰€€€ A60 6, A6 A6 (! A6 A ! (" r6A  A q! E ý‚€€ AÐj$€€€€  ©~#€€€€AÐk"$€€€€  6L A7j! A8j! A! A! A!@@@ AH @ Aÿÿÿÿ kL ô‚€€A=6A!   j! (L" !@@@@@@@@@@@@@@@ -" E @@@@@ Aÿq" !  A%G  ! @ -A%G   Aj"6L Aj! -! ! A%F k!@ E ‹ƒ€€   (L,ð‚€€!A!A! (L!@ E -A$G ,APj!A! A!   j"6LA! @@ ,"A`j"AM !  !A t"A‰ÑqE @  Aj"6L  r! ,"A`j"AK  !A t"A‰Ñq @@ A*G @@ ,ð‚€€E (L"-A$G ,At jAÀ~jA 6 Aj! ,At jA€}j(!A!  A! A!@ E  ("Aj6 (! (LAj!  6L AJ A k! A€Àr!  AÌjŒƒ€€"AH  (L! A!@ -A.G @ -A*G @ ,ð‚€€E (L"-A$G ,At jAÀ~jA 6 ,At jA€}j(!  Aj"6L  @@ A!   ("Aj6 (!  (LAj"6L   Aj6L AÌjŒƒ€€! (L! A!@ !A! ,A¿jA9K   Aj"6L ,! !  A:ljAï•€€j-"AjAI E @@@@ AG A! AL   AH   Atj 6   Atj)7@ A! E   E  AÀj   ƒ€€ (L! Aÿÿ{q" A€Àq! A!A–€€! ! Aj,"A_q  AqAF  "A¨j"A M @@@@@ A¿j"AM AÓG  E  (@!    A! A A Žƒ€€  A6  )@>  Aj6@A! Aj! A!@@ ("E @ Aj ‡ƒ€€"AH"   kK Aj!   j"K   A!  A   Žƒ€€@  A!  A! (@!@ (" E  Aj ‡ƒ€€" j" J  Aj ‹ƒ€€ Aj!  I A   A€ÀsŽƒ€€    J!   Aj"6L -! ! !       !  E A!@@  Atj(" E   Atj  ƒ€€A! Aj"A G  A! A O @  Atj( A! AK! Aj!  A!  +@    Š€€€! A! (@"Aš–€€ " A Û‚€€" j ! !  k  !  )@<7A! ! ! !  @ )@"BU B }"7@A!A–€€!  @ A€qE A!A‘–€€!  A’–€€A–€€ Aq"!  )@ ƒ€€! A!A–€€! AqE   k"Aj  J!  A AK! Ar! Aø! )@ A qƒ€€! A!A–€€! AqE  )@P  AvA–€€j!A!  A! Aÿq" AK @@@@@@@   (@ 6 (@ 6 (@ ¬7 (@ ;  (@ :  (@ 6  (@ ¬7  A!A–€€! )@!  ‘ƒ€€! Aÿÿ{q AJ! )@!@@  PE A! !   k Pj"  J! ! A   k"   H"j"   H"  Žƒ€€  ‹ƒ€€ A0   A€€sŽƒ€€ A0  AŽƒ€€ ‹ƒ€€ A   A€ÀsŽƒ€€  A! AÐj$€€€€  @ -A q   ø‚€€ QA!@ (,ð‚€€E @ (",! Aj6  A ljAPj! ,ð‚€€  È@ AK Awj"A K @@@@@@@@@@    ("Aj6 (6  ("Aj6 47  ("Aj6 57  (AjAxq"Aj6 )7  ("Aj6 27  ("Aj6 37  ("Aj6 07  ("Aj6 17  (AjAxq"Aj6 )7  €€€ “#€€€€A€k"$€€€€@  L A€Àq    k"A€ A€I"惀€@   k!@ A€‹ƒ€€ A€~j"AÿK Aÿq!  ‹ƒ€€ A€j$€€€€ .@ P @ Aj" §AqA0r: Bˆ"BR  8@ P @ Aj" §AqA€š€€j- r: Bˆ"BR  ˆ~@@ B€€€€Z !  @ Aj" B €"B ~}§A0r: BÿÿÿÿŸV! !  @ §"E @ Aj"  A n"A lkA0r: A K! !     A怀€A瀀€‰ƒ€€ ž~ ~|#€€€€A°k"$€€€€ A6,@@ •ƒ€€"BU š"•ƒ€€!A!Aš€€!  @ A€qE A!A“š€€!  A–š€€A‘š€€ Aq"! @@ B€€€€€€€øÿƒB€€€€€€€øÿR A  Aj" Aÿÿ{qŽƒ€€ ‹ƒ€€ A«š€€A¯š€€ AvAq" A£š€€A§š€€   bA‹ƒ€€ A  A€ÀsŽƒ€€  Aj! @@@@  A,jˆƒ€€"  "Da  (," Aj6, A r" AáG   A r" AáF A  AH! (,!   Acj"6,A  AH! D°A¢! A0j AÐj AH"!@@@ DðAc DfqE «!  A!  6 Aj!  ¸¡DeÍÍA¢"Db @@ AN ! !  !@ A AH!@ A|j" I ­!B!@ 5 † Bÿÿÿÿƒ|" B€”ëÜ€"B€”ëÜ~}> A|j" O §" E A|j" 6 @@ " M  A|j"(E  (, k"6, ! AJ @ AJ AjA mAj! AæF!@A A k AwH! @@  I  Aj (!  A€”ëÜ v!A tAs!A! !@  (" v j6  q l! Aj" I  Aj (! E 6 Aj!  (, j"6,   " Atj kAu J! AH A!@  O  kAuA l!A ! ("A I @ Aj!  A l"O @ A  AæFk AG AçFqk" kAuA lAwjN A€Èj"A m" At jA„`j!A !@  A lk"AJ @ A l! AH! Aj! (" n" lk!@@ Aj" G E  Dà?Dð?Dø?  Av"FDø?  F  I!D@CD@C Aq!@ E -A-G š! š!  k"6    a   j"6@ A€”ëÜI @ A6@ A|j" O A|j"A6  (Aj"6 Aÿ“ëÜK  kAuA l!A ! ("A I @ Aj!  A l"O Aj" K! @@@ " K A!  A|j" (E A! @@ AçF Aq!  AsA A " J A{Jq" j!AA~  j! Aq" A ! @ E A ! A|j(" E A !A! A p @ Aj! A l"pE  kAuA lAwj!@ A rAæG A!   k" A AJ"  H!  A!   j k" A AJ"  H!  r" AG!@@ A r"AæG A AJ!  @  Au" j s­ ‘ƒ€€" kAJ @ Aj" A0: kAH A~j" : AjA-A+ AH: k! A   j j jAj" Žƒ€€ ‹ƒ€€ A0  A€€sŽƒ€€@@@@ AæG AjAr! AjA r!    K"!@ 5 ‘ƒ€€! @@  F AjM @ Aj" A0: AjK  G A0: !  k‹ƒ€€ Aj" M @ E A³š€€A‹ƒ€€  O  AH @@ 5 ‘ƒ€€" AjM @ Aj" A0: AjK A A H‹ƒ€€ Awj! Aj" O  A J! !   @ AH  Aj ! AjAr! AjA r! !@@ 5 ‘ƒ€€" G A0: ! @@  F AjM @ Aj" A0: AjK  A‹ƒ€€ Aj! @  AH  A³š€€A‹ƒ€€  k"   J‹ƒ€€  k! Aj" O  AJ A0 AjAAŽƒ€€  k‹ƒ€€  ! A0 A jA AŽƒ€€ A  A€ÀsŽƒ€€  A j A q"!@ A K A k" E D @!@ D0@¢! Aj" @ -A-G  š ¡ š!     ¡! @ (," Au" j s­ ‘ƒ€€" G A0: Aj! Ar! (,! A~j" Aj: AjA-A+ AH: Aq! Aj!@ ! @@ ™DàAcE ª!  A€€€€x! A€š€€j- r:  ·¡D0@¢!@ Aj" AjkAG @  AJ Da  A.: Aj! Db @@ E  AjkA~j N  j kAj!  Ajk k j! A  j" Žƒ€€  ‹ƒ€€ A0  A€€sŽƒ€€ Aj  Ajk"‹ƒ€€ A0  k"jkAAŽƒ€€  ‹ƒ€€ A  A€ÀsŽƒ€€ A°j$€€€€  H .  (AjApq"Aj6 ) )«ƒ€€9  ½   AA‰ƒ€€ ç#€€€€A k"$€€€€  ("6 (!  6  6   k"6  j!A! Aj!@@@@ (< AjA A jƒ€€€›ƒ€€ @  ( "F  AL  Aj   ("K"" (  A k"j6  ( k6  k! (<   k" A jƒ€€€›ƒ€€E A6 AG  (,"6 6  (0j6 !  A! A6 B7 (A r6 AF  (k! A j$€€€€   Aÿÿÿÿ  ƒ€€ … -J"Aj r:J@ ( (M AA ($‰€€€ A6 B7@ ("AqE A r6A (, (0j"6 6 AtAu T#€€€€Ak"$€€€€A!@ ™ƒ€€ AjA ( ‰€€€AG -! Aj$€€€€  @ A ô‚€€ 6A ª ~~#€€€€Aðk"$€€€€ Bÿÿÿÿÿÿÿÿÿƒ!@@@ B|"BQ Bÿÿÿÿÿÿÿÿÿƒ"  T­|B|"Bÿÿÿÿÿÿ¿ÿÿV Bÿÿÿÿÿÿ¿ÿÿQ B|"BR   T­|B|"Bÿÿÿÿÿÿ¿ÿÿT Bÿÿÿÿÿÿ¿ÿÿQ  @ P B€€€€€€ÀÿÿT B€€€€€€ÀÿÿQ B€€€€€€ „! !  @ P B€€€€€€ÀÿÿT B€€€€€€ÀÿÿQ B€€€€€€ „!  @  B€€€€€€Àÿÿ…„BR B€€€€€€àÿÿ   …  …B€€€€€€€€€…„P" !B  !   B€€€€€€Àÿÿ…„P @  „BR  „BR   ƒ!  ƒ!   „PE ! !     V  V  Q" !   "Bÿÿÿÿÿÿ?ƒ!   "B0ˆ§Aÿÿq! @ B0ˆ§Aÿÿq" Aàj     P" y At­|§" Aqjƒ€€A k! Aèj)! )`!   ! Bÿÿÿÿÿÿ?ƒ!@ AÐj     P" y At­|§" Aqjƒ€€A k! AØj)! )P! B† B=ˆ„B€€€€€€€„! B† B=ˆ„! B†!  …!@ k" E @ AÿM B!B!  AÀj  A€ kƒ€€ A0j   §ƒ€€ )0 )@ AÀjAj)„BR­„! A0jAj)! B€€€€€€€„! B†!@@ BU @  }" }  T­}"„PE B!B!  BÿÿÿÿÿÿÿV  A j     P" y At­|§Atj" ƒ€€ k! A(j)! ) !   |  |" T­|"B€€€€€€€ƒP Bˆ B?†„ Bƒ„! Aj! Bˆ! B€€€€€€€€€ƒ!@ AÿÿH B€€€€€€Àÿÿ„!B!  A! @@ AL !  Aj   Aÿjƒ€€   A k§ƒ€€ ) ) AjAj)„BR­„! Aj)! BˆBÿÿÿÿÿÿ?ƒ „ ­B0†„ Bˆ B=†„" §Aq" AK­|" T­| BƒB AF" |" T­|! 7 7 Aðj$€€€€ ]~@@@ AÀqE  A@j­†!B!  E  AÀ k­ˆ  ­"†„!  †! B„! 7 7 à~A!@ BR Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿV B€€€€€€ÀÿÿQ BR Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿV B€€€€€€ÀÿÿQ @  „  „„PE A @  ƒBS A! T  S  Q  …  …„BR A! V  U  Q …  …„BR!  Ø~A!@ BR Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿV B€€€€€€ÀÿÿQ BR Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿV B€€€€€€ÀÿÿQ @  „  „„PE A @  ƒBS T  S  Q  …  …„BR V  U  Q …  …„BR!  à~A!@ BR Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿV B€€€€€€ÀÿÿQ BR Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿV B€€€€€€ÀÿÿQ @  „  „„PE A @  ƒBS A! T  S  Q  …  …„BR A! V  U  Q …  …„BR!  à~A!@ BR Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿV B€€€€€€ÀÿÿQ BR Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿV B€€€€€€ÀÿÿQ @  „  „„PE A @  ƒBS A! T  S  Q  …  …„BR A! V  U  Q …  …„BR!  †~~~#€€€€AÀk"$€€€€ Bÿÿÿÿÿÿ?ƒ! Bÿÿÿÿÿÿ?ƒ!  …B€€€€€€€€€ƒ! B0ˆ§Aÿÿq! @@@@ B0ˆ§Aÿÿq" AjAýÿK A! AjAþÿI  @ P Bÿÿÿÿÿÿÿÿÿƒ" B€€€€€€ÀÿÿT B€€€€€€ÀÿÿQ B€€€€€€ „!  @ P Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿT B€€€€€€ÀÿÿQ B€€€€€€ „! !  @  B€€€€€€Àÿÿ…„BR @  B€€€€€€Àÿÿ…„PE B!B€€€€€€àÿÿ!  B€€€€€€Àÿÿ„!B!  @  B€€€€€€Àÿÿ…„BR B!   „BQ @  „BR B€€€€€€Àÿÿ„!B!  A! @ Bÿÿÿÿÿÿ?V A°j     P" y At­|§" Aqjƒ€€A k! A¸j)! )°! Bÿÿÿÿÿÿ?V A j     P" y At­|§" Aqjƒ€€ jApj! A¨j)! ) ! Aj B1ˆ B€€€€€€À„"B†„"BB„Éùο漂õ }"B©ƒ€€ A€jB AjAj)}B B©ƒ€€ Aðj )€B?ˆ A€jAj)B†„"B B©ƒ€€ Aàj BB AðjAj)}B©ƒ€€ AÐj )`B?ˆ AàjAj)B†„"B B©ƒ€€ AÀj BB AÐjAj)}B©ƒ€€ A0j )@B?ˆ AÀjAj)B†„"B B©ƒ€€ A j BB A0jAj)}B©ƒ€€ Aj ) B?ˆ A jAj)B†„"B B©ƒ€€  BB AjAj)}B©ƒ€€ kj! @@B )B?ˆ Aj)B†„B|" Bÿÿÿÿƒ" B ˆ"~" B ˆ" Bÿÿÿÿƒ"~|"B †"  ~|" T­ B ˆ  T­B †„ ~||   BˆBÿÿÿÿƒ"~" B†B€€þÿƒ"~|"B †"  ~| T­ B ˆ  T­B †„ ~|||" T­| BR­|}"Bÿÿÿÿƒ" ~"  ~"  B ˆ"~|"B †|" T­ B ˆ  T­B †„ ~|| B }"B ˆ" ~" Bÿÿÿÿƒ" ~|"B †"  ~| T­ B ˆ  T­B †„  ~|||" T­| B~|" T­|B|"Bÿÿÿÿƒ" B>ˆ B†„Bÿÿÿÿƒ"~" BˆBÿÿÿÿƒ" B ˆ"~|" T­  B ˆ" BˆBÿÿïÿƒB€€„"~|" T­|  ~|  ~"  ~|" T­B † B ˆ„|  B †|" T­|   ~" Bÿÿÿÿƒ" ~|" T­   B†Büÿÿÿƒ"~|" T­||" T­|   ~"  ~|"  ~|"  ~|"B ˆ  T­  T­|  T­|B †„|" T­|    ~"  ~|" B ˆ T­B †„|" T­  B †| T­||" T­|"BÿÿÿÿÿÿÿV B1† Bÿÿÿÿƒ" Bÿÿÿÿƒ" ~"BR­}B }" B ˆ" ~"  B ˆ"~|"B †"T­} Bÿÿÿÿƒ ~  Bÿÿÿÿƒ~|  ~| B ˆ  T­B †„|  B ˆ~  B ˆ~|  ~|  ~|B †|}!  }! Aj!  B!ˆ! B0† Bˆ B?†„"Bÿÿÿÿƒ" Bÿÿÿÿƒ" ~"BR­}B }"  B ˆ"~"  B†„"Bÿÿÿÿƒ" ~|"B †"T­}  ~ Bˆ"Bÿÿÿÿƒ ~|  Bÿÿÿÿƒ~| B ˆ  T­B †„|  B ˆ~  B!ˆ~|  ~|  ~|B †|}!  }! ! @ A€€H B€€€€€€Àÿÿ„!B!  @ A€J B!  Aÿÿj­B0† Bÿÿÿÿÿÿ?ƒ„  B† Z B† B?ˆ„" Z  Q­|" T­| „! 7 7 AÀj$€€€€ B7 B€€€€€€àÿÿ  „BR7 AÀj$€€€€ °~#€€€€Ak"$€€€€ ½"B€€€€€€€€€ƒ!@@ Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€€x|BÿÿÿÿÿÿÿïÿV B<†! BˆB€€€€€€€€<|!  @ B€€€€€€€øÿT B<†! BˆB€€€€€€Àÿÿ„!  @ PE B!B!  @@ B€€€€T B ˆ§g!  §gA j!  B A1jƒ€€ Aj)B€€€€€€À…AŒø k­B0†„! )! 7  „7 Aj$€€€€ ô~#€€€€Ak"$€€€€ ¼"A€€€€xq!@@ Aÿÿÿÿq"A€€€|jAÿÿÿ÷K ­B†B€€€€€€€À?|!B!  @ A€€€üI ­B†B€€€€€€Àÿÿ„!B!  @  B!B!   ­B g"AÑjƒ€€ Aj)B€€€€€€À…A‰ÿ k­B0†„! )! 7  ­B †„7 Aj$€€€€ ž~#€€€€Ak"$€€€€@@  B!B!    Au"j s"­B g"AÑjƒ€€ Aj)B€€€€€€À…Až€ k­B0†| A€€€€xq­B †„! )! 7 7 Aj$€€€€ „~#€€€€Ak"$€€€€@@  B!B!   ­BAð gAs"kƒ€€ Aj)B€€€€€€À… Aÿÿj­B0†|! )! 7 7 Aj$€€€€ e~@@@ AÀqE  A@j­ˆ!B!B!  E  AÀ k­†  ­"ˆ„!  ˆ!B!  „! 7 7 ‘ ~~~#€€€€Aàk"$€€€€ Bˆ B/†„! B ˆ B †„! B1ˆ Bÿÿÿÿÿÿ?ƒ"B†„!  …B€€€€€€€€€ƒ! Bˆ! Bÿÿÿÿÿÿ?ƒ" B ˆ! B0ˆ§Aÿÿq!@@@ B0ˆ§Aÿÿq"AjAýÿK A! AjAþÿI  @ P Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿT B€€€€€€ÀÿÿQ B€€€€€€ „!  @ P Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿÿT B€€€€€€ÀÿÿQ B€€€€€€ „! !  @  B€€€€€€Àÿÿ…„BR @  „PE B€€€€€€àÿÿ! B!  B€€€€€€Àÿÿ„! B!  @  B€€€€€€Àÿÿ…„BR  „!B!@ PE B€€€€€€àÿÿ!  B€€€€€€Àÿÿ„!  @  „BR B!  @  „BR B!  A!@ Bÿÿÿÿÿÿ?V AÐj   P"y At­|§"Aqjƒ€€A k! )P"B ˆ AØj)" B †„! B ˆ! Bÿÿÿÿÿÿ?V AÀj     P"y At­|§"Aqjƒ€€  kAj! )@"B1ˆ AÈj)"B†„! Bˆ B/†„! Bˆ! Bÿÿÿÿƒ" Bÿÿÿÿƒ"~" B†B€€þÿƒ" Bÿÿÿÿƒ"~|"B †"  ~|" T­  ~"  Bÿÿÿÿƒ"~|" Bÿÿÿÿƒ" ~|" B ˆ  T­B †„|"  ~"  B€€„"~|" ~|" BÿÿÿÿƒB€€€€„" ~|" B †|"|!  j jA€j!@@ ~"  ~|" T­   ~|" T­|   T­ T­||" T­|  ~|  ~" ~|" T­B † B ˆ„|  B †|" T­|  B ˆ T­  T­| T­|B †„|" T­|   T­  T­||" T­|"B€€€€€€ÀƒP Aj!  B?ˆ! B† B?ˆ„! B?ˆ B†„! B†!  B†„! @ AÿÿH B€€€€€€Àÿÿ„! B!  @@ AJ @A k"AÿK Aj   §ƒ€€ A j   Aÿj"ƒ€€ A0j   ƒ€€    §ƒ€€ ) )„ )0 A0jAj)„BR­„! A jAj) AjAj)„! Aj)! )!  B!  ­B0† Bÿÿÿÿÿÿ?ƒ„!  „! @ P BU B€€€€€€€€€Q B|" T­|!  @  B€€€€€€€€€…„BQ !   Bƒ|" T­|! 7 7 Aàj$€€€€ u~  ~  ~| B ˆ" B ˆ"~| Bÿÿÿÿƒ" Bÿÿÿÿƒ"~"B ˆ  ~|"B ˆ| Bÿÿÿÿƒ  ~|"B ˆ|7 B † Bÿÿÿÿƒ„7 T#€€€€Ak"$€€€€     B€€€€€€€€€…œƒ€€ )! )7 7 Aj$€€€€ þ~#€€€€A k"$€€€€@@ Bÿÿÿÿÿÿÿÿÿƒ"B€€€€€€ÀÿC| B€€€€€€À€¼|Z B<ˆ B†„!@ Bÿÿÿÿÿÿÿÿƒ"B€€€€€€€T B€€€€€€€À|!  B€€€€€€€€À|! B€€€€€€€€…BR  Bƒ |!  @ P B€€€€€€ÀÿÿT B€€€€€€ÀÿÿQ B<ˆ B†„BÿÿÿÿÿÿÿƒB€€€€€€€üÿ„!  B€€€€€€€øÿ! Bÿÿÿÿÿÿ¿ÿÃV B! B0ˆ§"A‘÷I  Bÿÿÿÿÿÿ?ƒB€€€€€€À„"Aø k§ƒ€€ Aj  Aÿˆjƒ€€ )"B<ˆ Aj)B†„!@ Bÿÿÿÿÿÿÿÿƒ ) AjAj)„BR­„"B€€€€€€€T B|!  B€€€€€€€€…BR Bƒ |! A j$€€€€  B€€€€€€€€€ƒ„¿ O| ¢"D^ ýÿÿß¿¢Dð?  ¢"DB:áSU¥?¢  ¢ DiPîàB“ù>¢D'è‡ÀV¿ ¢ ¶ K| ¢" ¢"  ¢¢ D§F;Œ‡ÍÆ>¢DtçÊâù*¿ ¢  D²ûn‰?¢Dw¬ËTUUÅ¿ ¢   ¶  œ ®|||~#€€€€A°k"$€€€€  A}jAm"A AJ"Ahlj!@ AtAÀš€€j(" Aj" jAH j!  k!A!@@@ AN D!  AtAК€€j(·! AÀj Atj 9 Aj! Aj" G Ahj! A! AH!@@@ E D!  j!A!D! @ Atj+ AÀj  kAtj+¢ ! Aj" G  Atj 9 H! Aj!  A k!A k! ! @@  Atj+! A! !@ AH" @ At!@@ Dp>¢"™DàAcE ª!  A€€€€x! Aàj j!@@ ·"DpÁ¢ " ™DàAcE ª!  A€€€€x!  6  Aj"Atj+  ! Aj! AJ! ! @@ ダ€" DÀ?¢®ƒ€€D À¢ " ™DàAcE ª!  A€€€€x! ·¡! @@@@@ AH" At AàjjA|j" ("  u" tk"6  u!  j!   At AàjjA|j(Au! AH   A! Dà?fAsE A!  A!A!@  @ Aàj Atj" (!Aÿÿÿ!@@@  E A!A€€€!  k6  A! Aj" G @  Aj"AK @@  At AàjjA|j" (Aÿÿÿq6  At AàjjA|j" (Aÿÿÿq6 Aj! AG Dð? ¡! A! E Dð? ダ€¡! @ Db A! !@ L @ Aàj Aj"Atj( r!  J E !@ Ahj! Aàj Aj" Atj(E  A!@ "Aj! Aàj kAtj(E  j!@ AÀj j"Atj Aj" jAtAК€€j(·9A!D! @ AH @ Atj+ AÀj  kAtj+¢ ! Aj" G  Atj 9 H !  @@ A kダ€" DpAfAs At!@@ Dp>¢"™DàAcE ª!  A€€€€x! Aàj j!@@ ·DpÁ¢ " ™DàAcE ª!  A€€€€x!  6 Aj!  @@ ™DàAcE ª!  A€€€€x! ! Aàj Atj 6 Dð? ダ€! @ AL !@  Atj Aàj Atj(·¢9 Dp>¢! AJ! Aj!  AL !@ "k!D! A!@@ AtA °€€j+   jAtj+¢ !  N   I! Aj!  A j Atj 9 Aj! AJ @ AK @@@@  D!@ AH A j Atj+! !@ A j Atj A j Aj"Atj"+"   "¡ 9  9 AJ! ! !  AH A j Atj+! !@ A j Atj A j Aj"Atj"+"   "¡ 9  9 AJ! ! !  D! AL @  A j Atj+ ! AJ! Aj!  + !    9 )¨!  9  7  D! @ AH @ A j Atj+ ! AJ! Aj!   š 9  D! @ AH !@ A j Atj+ ! AJ! Aj!   š 9 +  ¡! A!@ AH @ A j Atj+ !  G! Aj!   š 9   š9 +¨!  š9  š9 A°j$€€€€ Aq  |#€€€€Ak"$€€€€@@ ¼"Aÿÿÿÿq"AÚŸ¤îK  »" DƒÈÉm0_ä?¢D8C D8à"DPû!ù¿¢  Dcba´Q¾¢ 9@ ™DàAcE ª!  A€€€€x!  @ A€€€üI  “»9A!    AvAê~j"Atk¾»9 Aj  AA¯ƒ€€! +!@ AJ  š9A k!   9 Aj$€€€€  ×}|#€€€€Ak"$€€€€@@ ¼"Aÿÿÿÿq"AÚŸ¤úK C€?! A€€€ÌI  »¬ƒ€€!  @ AѧíƒK »!@ Aä—Û€I D-DTû! @D-DTû! À AH  ¬ƒ€€Œ!  @ AJ D-DTû!ù? ­ƒ€€!  D-DTû!ù? ¡­ƒ€€!  @ AÕ㈇K @ AàÛ¿…I D-DTû!@D-DTû!À AH » ¬ƒ€€!  @ AJ DÒ!3|ÙÀ »¡­ƒ€€!  »DÒ!3|ÙÀ ­ƒ€€!  @ A€€€üI “!  @ Aj°ƒ€€Aq"AK @@@  +¬ƒ€€!  +š­ƒ€€!  +¬ƒ€€Œ!  +­ƒ€€! Aj$€€€€  Ò|#€€€€Ak"$€€€€@@ ¼"Aÿÿÿÿq"AÚŸ¤úK A€€€ÌI  »­ƒ€€!  @ AѧíƒK »!@ Aã—Û€K @ AJ D-DTû!ù? ¬ƒ€€Œ!  D-DTû!ù¿ ¬ƒ€€!  D-DTû! @D-DTû! À AH  š­ƒ€€!  @ AÕ㈇K »!@ AßÛ¿…K @ AJ DÒ!3|Ù@ ¬ƒ€€!  DÒ!3|ÙÀ ¬ƒ€€Œ!  D-DTû!@D-DTû!À AH  ­ƒ€€!  @ A€€€üI “!  @ Aj°ƒ€€Aq"AK @@@  +­ƒ€€!  +¬ƒ€€!  +š­ƒ€€!  +¬ƒ€€Œ! Aj$€€€€ x|Dð¿ ¢" ¢" DrŸ™8ýÁ?¢DŸÉ4MUÕ? ¢     ¢"¢ DÎ3Œó™?¢DþZ†ÉT«?  DÍ—¿¹bƒ?¢DNôìü­]h? ¢ ¢ "£  ¶ ñ|#€€€€Ak"$€€€€@@ ¼"Aÿÿÿÿq"AÚŸ¤úK A€€€ÌI  »A³ƒ€€!  @ AѧíƒK »!@ Aã—Û€K D-DTû!ù?D-DTû!ù¿ AH  A³ƒ€€!  D-DTû! @D-DTû! À AH  A³ƒ€€!  @ AÕ㈇K »!@ AßÛ¿…K DÒ!3|Ù@DÒ!3|ÙÀ AH  A³ƒ€€!  D-DTû!@D-DTû!À AH  A³ƒ€€!  @ A€€€üI “!  Aj°ƒ€€! + Aq³ƒ€€! Aj$€€€€  ‘ õ}@ ¼"Aÿÿÿÿq"A€€€üI @ A€€€üG CÚI@C AH C “• @@ Aÿÿÿ÷K CÚÉ?! A€€”I Ch!¢3 ”"  CkÓ ¼”Cº/½’”Cuª*>’” C®å4¿”C€?’• ”“ “CÚÉ?’ @ AJ CÚÉ? C€?’C?”"µƒ€€"  CkÓ ¼”Cº/½’”Cuª*>’” C®å4¿”C€?’•”Ch!¢³’’“" ’ C€? “C?”" CkÓ ¼”Cº/½’”Cuª*>’” C®å4¿”C€?’• µƒ€€"” ¼A€`q¾" ”“  ’•’ ’" ’!   ‹  Ÿ ˜}|@@@ ¼"Aÿÿÿÿq"A€€€üI A€€€üG  »D-DTû!ù?¢Dp8 ¶ @ Aÿÿÿ÷K A€€€|jA€€€ÈI  ”"  CkÓ ¼”Cº/½’”Cuª*>’” C®å4¿”C€?’• ” ’ D-DTû!ù?C€? ·ƒ€€“C?”"»¸ƒ€€"  CkÓ ¼”Cº/½’”Cuª*>’” C®å4¿”C€?’•»¢ "  ¡¶"Œ AH C “•! ø}@ ¼"Aÿÿÿÿq"A€€€äO @@@ AÿÿÿöK A! A€€€ÌO   ·ƒ€€!@ AÿÿßüK @ Aÿÿ¿ùK ’C€¿’ C@’•!A!  C€¿’ C€?’•!A!  @ Aÿÿï€K CÀ¿’ CÀ?”C€?’•!A!  C€¿ •!A! ”" ”" CGÚ½”C˜ÊL¾’”!   C%¬|=”C õ>’”C©ªª>’”!@ AJ  ’”“ At"Aà°€€j*  ’” Að°€€j*“ ““"Œ AH!  CÚÉ? ˜ A€€€üK  @@ A€H C”!@ AÿN Aj!  C”! Aý AýHA‚~j!  AJ C€”!@ Aƒ~L Aþj!  C€”! A†} A†}JAüj! AtA€€€üj¾” è} ¼"Av!@@@@@@@@ Aÿÿÿÿq"AÐØº•I @ A€€€üM  @ AH A˜äÅ•I C” AJ C! A´ã¿–M   A™äÅõI  A“«”üI  @ C;ª¸?” AtA€±€€j*’"‹CO]E ¨!  A€€€€x!  As k! ²"Cr1¿”’" C޾¿5”"“!  A€€€ÈM A!C! !    ”" CR5»”Cª*>’”“"”C@ “• “’C€?’! E  »ƒ€€!  C€?’ –}@@@@ ¼"A€€€I AJ  @ Aÿÿÿÿq C€¿ ”• @ AJ “C• CL”¼!Aè~!  AÿÿÿûK A!C! A€€€üF   Aö«j"Avj²"C€q1?” AÿÿÿqAó‰Ôùj¾C€¿’" CÑ÷7” C@’•" C?””"  ”" ”"Cîé‘>”Cªª*?’” C&žx>”CÎÌ>’”’’”’ “’’! Ø }}C€?!@ ¼"A€€€üF ¼"Aÿÿÿÿq"E @@ Aÿÿÿÿq"A€€€üK A€€üI  ’ @@ AL A!  A! AÿÿÿÛK @ A€€€üO A!  A! A– Avk"v" t G A Aqk! @@ A€€€üF A€€€üG  A€€€üF @ A€€üI C AJ C Œ AJ C€? • AJ @ A€€€€G ” @ AH A€€€øG µƒ€€ ·ƒ€€!@@ E A€€€€rA€€€üG  C€? •  AH! AJ @  A€€€„|jr  “" • Œ  AF C€?! @ AJ AK @@  “" • C€¿! @@ A€€èI @ A÷ÿÿûK CÊòIq”CÊòIq” C`B¢ ”C`B¢ ” AH @ Aˆ€€üI CÊòIq”CÊòIq” C`B¢ ”C`B¢ ” AJ C€¿’"Cª¸?”" Cp¥ì6” ”C? C€¾”C«ªª>’”“”C;ª¸¿”’" ’¼A€`q¾" “!  C€K”¼  A€€€I""Aÿÿÿq"A€€€ür!Aé~A  Auj!A!@ AòˆóI @ A×çöO A!  A€€€|j! Aj! At"A˜±€€j*" ¾" Aˆ±€€j*" “"C€? ’•"”"¼A€`q¾" ”"C@@’  ’   AuA€àÿÿ}qA€€€€r AtjA€€€j¾"”“  ““”“”" ”  ”" ” CBñS>”CU2l>’”C£‹>’”C«ªª>’”C·mÛ>’”Cš™?’”’" ’¼A€`q¾"”" ”  C@À’ ““”’"’¼A€`q¾"C@v?”" A±€€j*  ““CO8v?” CÆ#ö¸”’’" ’’ ²"’¼A€`q¾" “ “ “! @ A€`q¾"”" “ ”  “ ”’"’"¼"A€€˜H CÊòIq”CÊòIq” A€€€˜!@@@ A€€€˜G C<ª83’  “^As  CÊòIq”CÊòIq” @ Aÿÿÿÿq"A€Ø˜I C`B¢ ”C`B¢ ” @ A€€Ø˜|G  “_As C`B¢ ”C`B¢ ” A! A€€øI  AA€€€ AvA‚jv j"AÿÿÿqA€€€rA– AvAÿq"kv"k  AH! A€€€| Aju q¾“" ’¼! @@ At A€€~q¾"Cr1?”" CŒ¾¿5”  ““Cr1?”’" ’" ”"    CL»13”Cêݵ’”CU³Š8’”Ca 6»’”C«ª*>’”“"” CÀ’• ““" ”’““C€?’"¼j"AÿÿÿJ »ƒ€€!  ¾! ”!  7 A !@@ ݃€€" Ƀ€€"E  ˆ€€€  ¿ƒ€€ Þƒ€€ Áƒ€€  As -AG  A6 ƃ€€  (Ar6  (  ( A˜Þ€€ȃ€€  ʃ€€    ˃€€ Áƒ€€  ˃€€ Áƒ€€ &@  F ǃ€€ ǃ€€Ø‚€€E Í#€€€€AÀk"$€€€€A!@ AЃ€€ A! E A! Aܱ€€AŒ²€€AÒƒ€€"E A6  6A! A6  6 AjAA'惀€ A68  Aj (A ((ƒ€€€ ( AG  (6A! AÀj$€€€€  Í#€€€€AÀk"$€€€€ ("Axj(! A|j(!  6  6  6  6A! AjAA'惀€ j!@@  AЃ€€E A68  Aj AA ((…€€€ A ( AF!   Aj AA ((„€€€ (,"AK @@  (A ((AFA ($AFA (0AF!  @ ( AF (0  ($AG  ((AG  (! AÀj$€€€€  `@ (" A6$  6  6 @@  G (AG   6 A:6 A6  ($Aj6$ %@ (AЃ€€E    Óƒ€€ B@ (AЃ€€E    Óƒ€€ ("    ((ƒ€€€ ¨ A:5@ ( G A:4@ (" A6$  6  6 AG  (0AG  A:6 @  G @ ("AG  6 ! (0AG  AG  A:6 A:6  ($Aj6$ @ ( G (AF  6 “@ ( Ѓ€€E    ׃€€ @@ ( Ѓ€€E @@ ( F ( G  AG  A6   6 @ (,AF A;4 ("   A  ((…€€€@ -5E A6, -4E   A6,  6  ((Aj6( ($AG  (AG  A:6 ("     ((„€€€ ¤@ ( Ѓ€€E    ׃€€ @ ( Ѓ€€E @@ ( F ( G  AG  A6   6  6  ((Aj6(@ ($AG (AG A:6 A6, H@ ( Ѓ€€E     Öƒ€€ ("      ((…€€€ '@ ( Ѓ€€E     Öƒ€€ A á6 #€€€€Ak"$€€€€@@@@@ AôK @A(œÞ€€"A A jAxq A I"Av"v"AqE @@ AsAq j"At"AÌÞ€€j("(" AÄÞ€€j"G A A~ wq6œÞ€€  A(¬Þ€€ K  ( G  6  6 Aj!  At"Ar6  j" (Ar6  A(¤Þ€€"M @ E @@ tA t"A krq"A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vj"At"AÌÞ€€j("(" AÄÞ€€j"G A A~ wq"6œÞ€€  A(¬Þ€€ K  ( G   6  6 Ar6 j" At" k"Ar6 j 6@ E Av"AtAÄÞ€€j!A(°Þ€€!@@ A t"q A  r6œÞ€€ !  A(¬Þ€€ ("K   6  6  6  6 Aj!A 6°Þ€€A 6¤Þ€€  A( Þ€€" E  A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vjAtAÌà€€j("(Axq k! !@@@ (" Aj("E  (Axq k"   I"!  ! ! A(¬Þ€€" K   j" M  (! @@ ( " F ("K  ( G  ( G  6  6  @@ Aj"(" ("E  Aj! @ ! "Aj"(" Aj! (" K  A6  A! @ E @@  ("AtAÌà€€j"(G 6  A A~ wq6 Þ€€  A(¬Þ€€ K  AA ( Fj 6 E  A(¬Þ€€" K   6@ ("E  K   6 6 Aj("E A(¬Þ€€ K  Aj 6 6 @@ AK   j"Ar6  j" (Ar6   Ar6 Ar6 j 6@ E Av"AtAÄÞ€€j!A(°Þ€€!@@A t" q A  r6œÞ€€ !  A(¬Þ€€ ("K   6  6 6 6 A 6°Þ€€A 6¤Þ€€ Aj!  A! A¿K A j"Axq!A( Þ€€"E A! @ Av"E A! AÿÿÿK A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv r rk"At  AjvAqrAj! A k!@@@@ AtAÌà€€j(" A!A!  AA Avk AFt!A!A!@@ (Axq k" O ! !  A! ! !  Aj("   AvAqjAj("F !  AGt!  @ r A t"A kr q"E  A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vjAtAÌà€€j(! E  @ (Axq k" I!@ (" Aj(!   !  ! !  E A(¤Þ€€ kO A(¬Þ€€" K   j" M  (! @@ ( " F ("K  ( G  ( G  6  6  @@ Aj"(" ("E  Aj! @ ! "Aj"(" Aj! (" K  A6  A! @ E @@  ("AtAÌà€€j"(G 6  A A~ wq"6 Þ€€  A(¬Þ€€ K  AA ( Fj 6 E  A(¬Þ€€" K   6@ ("E  K   6 6 Aj("E A(¬Þ€€ K  Aj 6 6 @@ AK   j"Ar6  j" (Ar6   Ar6 Ar6 j 6@ AÿK Av"AtAÄÞ€€j!@@A(œÞ€€"A t"q A  r6œÞ€€ !  A(¬Þ€€ ("K  6  6 6 6  @@ Av" A!  A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At  AjvAqrAj! 6 B7 AtAÌà€€j!@@@ A t"q A  r6 Þ€€  6 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A(¬Þ€€ K   6 6 6 6  A(¬Þ€€" ("K   K  6  6 A6 6 6 Aj!  @A(¤Þ€€" I A(°Þ€€!@@ k"AI A 6¤Þ€€A  j"6°Þ€€  Ar6  j 6  Ar6  AA6°Þ€€AA6¤Þ€€  Ar6  j" (Ar6 Aj!  @A(¨Þ€€" M A  k"6¨Þ€€AA(´Þ€€" j"6´Þ€€  Ar6 Ar6 Aj!  @@A(ôကE A(üက!  AB7€â€€AB€ €€€€7øá€€A A jApqAتժs6ôကAA6ˆâ€€AA6Øá€€A€ ! A!  A/j"j"A k" q" M A!@A(Ôက"E A(Ìက" j" M  K  @@A-Øá€€Aq @@@@@A(´Þ€€"E AÜက!@@ (" K  (j K  (" A߃€€"AF  !@A(øá€€"Aj" qE  k  jA kqj!  M  AþÿÿÿK @A(Ôက"E A(Ìက" j" M   K  ߃€€" G    k q"AþÿÿÿK  ߃€€" ( (jF  ! !@ A0j M AþÿÿÿK AF  kA(üက"jA kq"AþÿÿÿK @ ߃€€AF j!  A k߃€€  AG   AG  AA(Øá€€Ar6Øá€€ AþÿÿÿK  ߃€€"A߃€€"O  AF  AF  k" A(jM  AA(Ìက j"6Ìက@ A(ÐကM A 6Ðက @@@@A(´Þ€€"E AÜက!@  (" ("jF  ("  @@A(¬Þ€€"E  O  A 6¬Þ€€ A!A 6àကA 6ÜကAA6¼Þ€€AA(ôက6ÀÞ€€AA6èက@ At"AÌÞ€€j AÄÞ€€j"6 AÐÞ€€j 6 Aj"A G A AXj"Ax kAqA AjAq"k"6¨Þ€€A  j"6´Þ€€  Ar6  jA(6AA(„ 6¸Þ€€  - Aq  M  K  j6A Ax kAqA AjAq"j"6´Þ€€AA(¨Þ€€ j" k"6¨Þ€€  Ar6  jA(6AA(„ 6¸Þ€€  @ A(¬Þ€€"O A 6¬Þ€€ !  j!AÜက!@@@@@ ( F  ("  - AqE  AÜက!@@ (" K  (j" K  (! 6 ( j6 Ax kAqA AjAqj" Ar6 Ax kAqA AjAqj" k k! j!@@  G A 6´Þ€€AA(¨Þ€€ j"6¨Þ€€  Ar6  @A(°Þ€€ G A 6°Þ€€AA(¤Þ€€ j"6¤Þ€€  Ar6  j 6  @ (" AqAG @@ AÿK ( !@ (" Av"AtAÄÞ€€j"F  K  ( G  @  G AA(œÞ€€A~ wq6œÞ€€  @  F  K  ( G   6  6  (! @@ ( " F  ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! ("  K  A6 E @@ ("AtAÌà€€j"( G  6  AA( Þ€€A~ wq6 Þ€€  A(¬Þ€€ K  AA ( Fj 6 E  A(¬Þ€€" K   6@ ("E  K   6  6 ("E A(¬Þ€€ K  Aj 6  6 Axq" j!  j!  (A~q6  Ar6  j 6@ AÿK Av"AtAÄÞ€€j!@@A(œÞ€€"A t"q A  r6œÞ€€ !  A(¬Þ€€ ("K  6  6  6  6  A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At AjvAqrAj!  6 B7 AtAÌà€€j!@@@A( Þ€€"A t"q A  r6 Þ€€  6  6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A(¬Þ€€ K   6  6  6  6  A(¬Þ€€" ("K   K  6  6 A6  6  6 Aj!  A AXj"Ax kAqA AjAq"k" 6¨Þ€€A  j"6´Þ€€  Ar6  jA(6AA(„ 6¸Þ€€  A' kAqA AYjAqjAQj" AjI"A6 AjA)äက7 A)Üက7A Aj6äကA 6àကA 6ÜကAA6èက Aj!@ A6 Aj! Aj!  K  F  (A~q6   k"Ar6  6@ AÿK Av"AtAÄÞ€€j!@@A(œÞ€€"A t"q A  r6œÞ€€ !  A(¬Þ€€ ("K  6  6  6  6  A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At  AjvAqrAj! B7 Aj 6 AtAÌà€€j!@@@A( Þ€€"A t"q A  r6 Þ€€  6 Aj 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A(¬Þ€€ K   6 Aj 6  6  6  A(¬Þ€€" ("K   K  6  6 AjA6  6  6 A(¨Þ€€" M A k"6¨Þ€€AA(´Þ€€" j"6´Þ€€  Ar6 Ar6 Aj!  „€€€ ô‚€€A06A! Aj$€€€€ è@@ E Axj"A(¬Þ€€"I  A|j("Aq"AF   Axq"j!@ Aq E   ("k" I   j!@A(°Þ€€ F @ AÿK ( !@ (" Av"AtAÄÞ€€j"F  K  ( G  @  G AA(œÞ€€A~ wq6œÞ€€  @  F  K  ( G   6  6  (!@@ ( " F  ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! ("  K  A6 E @@ ("AtAÌà€€j"( G  6  AA( Þ€€A~ wq6 Þ€€  A(¬Þ€€ K  AA ( Fj 6 E  A(¬Þ€€" K   6@ ("E  K   6  6 ("E A(¬Þ€€ K  Aj 6  6  ("AqAG A 6¤Þ€€  A~q6  Ar6  j 6  M  ("AqE @@ Aq @A(´Þ€€ G A 6´Þ€€AA(¨Þ€€ j"6¨Þ€€  Ar6 A(°Þ€€G AA6¤Þ€€AA6°Þ€€ @A(°Þ€€ G A 6°Þ€€AA(¤Þ€€ j"6¤Þ€€  Ar6  j 6 @@ AÿK ( !@ (" Av"AtAÄÞ€€j"F A(¬Þ€€ K  ( G  @  G AA(œÞ€€A~ wq6œÞ€€  @  F A(¬Þ€€ K  ( G   6  6  (!@@ ( " F A(¬Þ€€ ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! (" A(¬Þ€€ K  A6 E @@ ("AtAÌà€€j"( G  6  AA( Þ€€A~ wq6 Þ€€  A(¬Þ€€ K  AA ( Fj 6 E  A(¬Þ€€" K   6@ ("E  K   6  6 ("E A(¬Þ€€ K  Aj 6  6  Axq j"Ar6  j 6 A(°Þ€€G A 6¤Þ€€  A~q6  Ar6  j 6 @ AÿK Av"AtAÄÞ€€j!@@A(œÞ€€"A t"q A  r6œÞ€€ !  A(¬Þ€€ ("K  6  6  6  6 A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At AjvAqrAj! B7 Aj 6 AtAÌà€€j!@@@@A( Þ€€"A t"q A  r6 Þ€€  6 Aj 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A(¬Þ€€ K   6 Aj 6  6  6  A(¬Þ€€" ("K   K  6  6 AjA6  6  6 AA(¼Þ€€Aj"6¼Þ€€  Aäက!@ ("Aj! AA6¼Þ€€  „€€€ `@…€€€"(" AjA|qj"AJ ô‚€€A06A @ ?AtM †€€€ ô‚€€A06A  6  ñ@@ ¼"At"E AÿÿÿÿqA€€€üK ¼"AvAÿq"AÿG  ”" • @ At" M AvAÿq!@@  A!@ A t"AH @ Aj! At"AJ A kt!  AÿÿÿqA€€€r! @@  A!@ A t"AH @ Aj! At"AJ A kt!  AÿÿÿqA€€€r!  k"AJ!@  L @@ AqE !  C” At" k"AJ! Aj" J ! @ E !  C” @@ AÿÿÿM !  @ Aj! A€€€I! At"!  A€€€€xq!@@ AH A€€€|j Atr!  A kv!  r¾ C”  F ¤~~#€€€€A€k"$€€€€@@@  BB ƒ€€E  䃀€! B0ˆ§"Aÿÿq"AÿÿF   Aj    ¨ƒ€€  )" AjAj)"  ¢ƒ€€ Aj)! )!  @  ­B0† Bÿÿÿÿÿÿ?ƒ„"  B0ˆ§Aÿÿq" ­B0† Bÿÿÿÿÿÿ?ƒ„" žƒ€€AJ @   ¡ƒ€€E !  Aðj  BB¨ƒ€€ Aøj)! )p!  @@ E !  Aàj  BB€€€€€€À»À¨ƒ€€ Aèj)" B0ˆ§Aˆj! )`! @ AÐj  BB€€€€€€À»À¨ƒ€€ AØj)" B0ˆ§Aˆj! )P! Bÿÿÿÿÿÿ?ƒB€€€€€€À„" Bÿÿÿÿÿÿ?ƒB€€€€€€À„" }  T­}" BU!  }! @  L @@@ AqE @ „BR A j  BB¨ƒ€€ A(j)! ) !  B?ˆ! B†!  B?ˆ! B†! ! „" } B†" T­}" BU!  }! Aj" J ! @ E ! ! „BR A0j  BB¨ƒ€€ A8j)! )0!  @ Bÿÿÿÿÿÿ?V @ B?ˆ! Aj! B†!  B†„" B€€€€€€ÀT A€€q!@ AJ AÀj  Bÿÿÿÿÿÿ?ƒ Aøj r­B0†„BB€€€€€€ÀÃ?¨ƒ€€ AÈj)! )@!  Bÿÿÿÿÿÿ?ƒ  r­B0†„! 7 7 A€j$€€€€ Á}@@@@ ¼"A€€€I AJ  @ Aÿÿÿÿq C€¿ ”• @ AJ “C• CL”¼!Aè~!  AÿÿÿûK A!C! A€€€üF   Aö«j"Avj²"C€ š>” AÿÿÿqAó‰Ôùj¾C€¿’" C?””"“¼A€`q¾"C`Þ>” “ “ C@’•"  ”" ”"Cîé‘>”Cªª*?’” C&žx>”CÎÌ>’”’’”’"C`Þ>” CÛ'T5” ’CÙ긔’’’’! ®@@ A€H Dà¢!@ AÿN Axj!  Dà¢! Aý AýHA‚pj!  AxJ D¢!@ AƒpL Aþj!  D¢! A†h A†hJAüj! Aÿj­B4†¿¢ K~ Bÿÿÿÿÿÿ?ƒ!@@ B0ˆ§Aÿÿq"AÿÿF A!  AA  „P  „P!  •@ A€ÀI  ‡€€€  j!@@  sAq @@ AN !  @ Aq !  !@  -: Aj! Aj" O  Aq @ A|q"AÀI  A@j"K @  (6  (6  (6  ( 6  (6  (6  (6  (6  ( 6  ($6$  ((6(  (,6,  (060  (464  (868  (<6< AÀj! AÀj" M  O @  (6 Aj! Aj" I  @ AO !  @ A|j" O !  !@  -:  -:  -:  -: Aj! Aj" M @  O @  -: Aj! Aj" G ó~@ E  j"Aj : : AI A~j : : A}j : : AI A|j : : A I A kAq"j" AÿqA‚„l"6   kA|q"j"A|j 6 A I  6  6 Axj 6 Atj 6 AI  6  6  6  6 Apj 6 Alj 6 Ahj 6 Adj 6  AqAr"k"A I ­"B † „!  j!@  7  7  7  7 A j! A`j"AK &@A(Œâ€€ A 6 A 6Œâ€€ 郀€AJ ܃€€ žZA€ œ+variable %s is read-onlypushsspopsresetvarcannot redefine builtin %s with an aliasaliascannot override persistent variable %svalid range for %s is %d..0x%Xvalid range for %s is 0x%X..0x%Xvalid range for %s is %d..%dvalid range for %s is %s..%s @"/()[] missing "%c"unknown alias lookup: %s /; numargs; unknown command: %sbuiltin declared with illegal typebuiltin declared with too many args (use V?)%s = 0x%.6X (%d, %d, %d)%s = 0x%X%s = %d%s = %s%s = [%s]%s = "%s"arg%d%d%.1f%.7gifsss?loopsis0loopwhilesisswhile " concatCresultconcatwordVformatatsisubstrlistlengetaliasprettylistlistdelindexoflistfindlooplist+ii*-+fff*f-f=!=<><=>==f!=ff<=f>=f^!i&|~^~&~|~<<>>&&||divmoddivfmodfsinfcostanasinacosatansqrtpowlogelog2log10expminmaxminfmaxfcondcaseiVcaseffVcasessVrndstrcmp=s!=ss<=s>=secho%serrorstrstrstrlenstrreplacemaxconsomevarsomevar 9temp = (+ 22 $somevar)if (> $temp 30) [ temp = (+ $temp 1) ] [ temp = (* $temp 2) ]if (< $temp 30) [ temp = 0 ] [ temp = (+ $temp 1) ]echo [Temp is] $temp%d x = 2push x 5push x 11pop xecho $xgreet = [ echo hello, $arg1 ]greet everyoneø_`a5ident ð**ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿ  !"#ÿÿÿÿÿÿ  !"#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿinfinitynanÑtžW½*€pRÿÿ>' dè' †@B€–˜áõ5qkÿÿÿÎûÿÿ’¿ÿÿ°eÿÿÿÿÿ-+ 0X0x(null)              0123456789ABCDEF-0X+0X 0X-0x+0x 0xinfINFnanNAN.ƒù¢DNnü)ÑW'Ý4õbÛÀ<™•ACcQþ»Þ«·aÅ:n$ÒMBIà ê.’Ñëþ)±è>§õ5‚D».œé„´&pA~_Ö‘9Sƒ9œô9‹_„(ù½ø;Þÿ—˜/ï Z‹mmÏ~6 Ë'FO·žf?-ê_º'uåëÇ={ñ÷9’RŠûkê±_]0V{üFð«k ¼Ï6ôšã©^a‘æ…™e _@h€Øÿ'sM1ÊVɨs{â`kŒÀÄGÍgà èÜYƒ*‹vĦ–D¯ÝWÑ¥>ÿ3~?Â2è˜OÞ»}2&=ÃkïŸø^5:òÊñ‡|!j$|Õnú0-w;CµÆÃ­ÄÂ,MA ]†}Fãq-›Æš3b´Ò|´§—7UÕ×>ö£Mvüd*p׫c|øz°WçÀIV;ÖÙ§„8$#ËÖŠwZT#¹ñ Îߟ1ÿfj™Wa¬ûG~Ø"e·2è‰æ¿`ïÄÍl6 ]?ÔÞ×X;ÞÞ›’Ò"((†èâXMÆÊ2ãà}ËÀPó§à[.4ƒbƒHõŽ[­°éòHJCgÓªÝØ®_BjaÎ (¤Ó™´¦ò\w£Âƒa<ˆŠsx¯ŒZo×½-¦cô¿Ëï&ÁgUÊEÊÙ6(¨ÒÂaÉw&F›ÄYÄÈÅDM²‘óÔC­)IåýÕ¾ü”ÌpÎî>õìñ€³çÃÇø(“”Áq>. ³ E󈜫 {.µŸG’Â{2/ Umr§kç1Ë–yJAyâôß‰è”—âæ„™1—ˆík__6»ýHš´g¤lqrB]2Ÿ¸¼å 1%÷t90 Kh,îXGªtç½Ö$÷}¦nHrŸ¦´‘öÑSQÏ ò ˜3õK~²chÝ>_@]…‰UR)7dÀmØ2H2[LuNqÔETn Á*õifÕ']P´;ÛêvŇùIk}'º–i)ÆÌ¬­TâjˆÙ‰,rP¤¾w”ó0pü'êq¨fÂIdà=—݃£?—C”ý †Œ1AÞ’9ÝpŒ·çß;7+\€ Z€“’èØl€¯ÛÿK8Yvb¥a˻lj¹@½ÒòIu'ë¶öÛ"» ª‰&/dƒv ;3”Q:ª£Â¯í®\&mÂM-zœÀV—?ƒ ðö+@Œm1™9´ ØÃ[õ’ÄÆ­KNÊ¥§7Íæ©6«’”ÝBhcÞvŒïh‹RüÛ7®¡«ß1®¡ ûÚdMfí·)e0WV¿Gÿ:jù¹u¾ó(“ß«€0fŒöËú"Ùä=³¤W6Í NB龤3#µðªOe¨ÒÁ¥ ?[xÍ#ùv{‹‰rƦSonâïë›JXÄÚ·ªfºvÏÏѱñ-Œ™Áíw†HÚ÷] Æ€ô¬ð/Ýìš?\¼ÐÞmÇ*Û¶£%:¯š­S“¶W)-´K€~Ú§vª{Y¡*Ü·-úåý‰Ûþ‰¾ýävl©ü>€p…ný‡ÿ(>ag3*†M½ê³ç¯mn•g91¿[„×H0ßÇ-C%a5ÉpÎ0˸¿lý¤¢läZÝ !oGbÒ¹\„paIkVà™RPU7Õ·3ñÄn_]0ä….©²Ã¡26·¤ê±Ô÷!iä'ÿw €@-OÍ  ¥™³¢Ó/] ´ùBÚË}¾Ð›ÛÁ«½Ê¢j\.U'Uðᆠd–A‡¾ÞÚý*k%¶{‰4óþ¹¿žhjOJ*¨OÄZ-ø¼×Z˜ôÇ• M :¦¤W_?±€8•Ì q݆ÉÞ¶¿`õMekŒ°¬²ÀÐQUHû•rã;À@5Ü{àEÌN)úÖÊÈèóA|dÞ›dØÙ¾1¤—ÃwXÔiãÅðÚº:<FFUu_Ò½õn’Ƭ.]Dí>Bać)ýéçÖó"|Êo‘5àÅÿ×njâ°ýÆ“Á|]tk­²Ín>r{Æj÷Ï©)sߵɺ·Qâ² tº$å}`tØŠ , ~f”)Ÿzvýý¾VEïÙ~6ìÙ‹º¹Ä—ü1¨'ñnÔÅ6بV´¨µÏ̉-oW4,V‰™ÎãÖ ¹k^ª>*œ_Ìý JáôûŽ;mâ†,éÔ„ü´©ïîÑ.5É/9a8!DÙÈü ûJj/ØS´„N™ŒT"Ì*UÜÀÆÖ –p¸i•d&Z`?RîôµüËõ4¼-4¼îè]ÌÝ^`gŽ›’3ïɸaX›áW¼QƒÆØ>ÝqH-ݯ¡!,FYó×Ùz˜žTÀO†úVüåy®‰"68­"g“ÜU誂&8Êç›Q ¤™3±©×iHe²ðˆ§ˆL—ùÑ6!’³{‚J˜Ï!@ŸÜÜGUát:gëBþß^Ô_{g¤º¬zUö¢+ˆ#AºUYn!*†9Gƒ‰ãæåžÔIû@ÿVéÊÅYŠ”ú+ÓÁÅÅÏÛZ®Gņ…Cb!†;,y”a‡*L{€,C¿ˆ&x<‰¨ÄäåÛ{Ä:Â&ôê÷gŠ ’¿e£+=“±½| ¤QÜ'ÝciáÝš”¨)•hÎ( í´DŸ N˜Êp‚c~|#¹2§õŽVç!ñµ*o~M¥Qµù«‚ßÖ–Ýa6Ä:Ÿƒ¢¡rím9z‚¸©k2\F'[4íÒwüôUYMàq€@û!ù?-Dt>€˜Fø<`QÌx;€ƒð9@ %z8€"‚ã6ói58cí>ÚI?^˜{?ÚÉ?i7¬1h!"3´3h!¢3?¿€?À?ÜÏÑ5À?St9type_info  N10__cxxabiv116__shim_type_infoEH¸°N10__cxxabiv117__class_type_infoEHèÜ hijklmnohpjklqrsN10__cxxabiv120__si_class_type_infoEHh A 3 ˆÿÿÿÿÿÿÿÿbcdØ* ÿÿÿÿ/A°6 ä+ˬ .debug_info;–•²ØÇ7Z0<G6X|Mꃯ ¶ ô®…´¯ q ˜ Ç~ !GŒ¹¯ q NG‘]¯ q b yš–]¯ q ¥x›¾  ~8 ÉìœÃ  ó´]  / @¼ï ζù ×¶ú à½û84ö çÇö ^Âö0<{8{ >{ý Y ÷ à€÷^{÷ <JYJ dÂþk“ ¶s “ |®Â“ ˜ÇQ“ >Z“ Dxc  €´dª  Ç£ô‡5@ÓÂ~0g ì/i õ@jllml q b / @<l49ð@½,ú ¶ /!w" " ¶$'³%''5¶)<³*D¶,Ï--Mº/QÀ0õ22n/4Wç5sì6'8 8†:‹ç;—ì<£>$·¶?(½AX½CX ¶ / ¶ ¶ ¶ I  ¶½GX ¶ / ³ ³ ³ N  ¶½KX ¶ / ç S  ¶½OX ¶ / ç ¶½RX ¶ / /   ¶ÃU@XÊÛW]X båùY@X¥® ¶/¿!Å"c Wç ^À 9#}w¶y³{ç$#«wIyN{S¶³ç@%@%g@Ç%v/Æ&~'Œ@(EM£Â µ%ÇG%Š@%/AÙ\4PUÙ\ )cÙÊp)‚ÙËŽ)ŸṴ̀)ÆÙïÔ*çC®8Q": Õ+ðÖ ×øÛ Ùü¶Ú¶ÚÜ<à< A å<õ ÛçK< A AïP< U- AöP<F mýP<_ ‰< K | §Ù_ › š §Ù_ ¶ ¸ õP< Ñ P<ë (< DÙ_ !d¶_ @…¶_ ]šP< ¶ tš U_ ¶ŒÈ"< ¶¨ç#< ¶Å%<ê<&< `(Û < )`)d_ F˜*Ù_ df¶2< ¶ ƒÖAi< ¶¸d G< ¶Õ L< n ÿª QÛ < ¶T X< U5T Z< d ¶Só a< ¶ ¶ pó gà < ¶ Œ2 oà < ¶²^ ~< UÕ‹ ƒ< U ÿ®P< ¶ U ®•Û < ¶ d ¶Bè ž< _ £¶ ¶ €1 ¤¶ ¶ŸU ¦< ¾v «¶< ¶ Ú— ¸P< U û¸ ¾¶< ¶ Ý Ñà < à ¶à å "è Õ+ðÖ ×øçÙü¶Ú¶ÚÜxàx } åxÛç‡x }+AïŒx ‘EAöŒxYmýŒxq‰x ‡ Ž§Ù– › ȧٖ ¶ áõŒx ùŒx(x -DÙ– Jd¶– m…¶– ŒšŒx ¶ žš ‘– ¶±È"x ¶Ïç#x ¶ï%x<&x I`(çx g`)/– ˜*Ù– /ž¶2x ¶ ¾ÖA­x ¶L d Gx ¶l Lx 7 – ª Qçx ¶® T Xx ‘Ä T Zx / ¶Û ó ax ¶ ¶ ú ó g9x ¶  2 o9x ¶B ^ ~x ‘h ‹ ƒx ‘ › ®Œx ¶ ‘ µ ®•çx ¶ / ¶Ð è žx ð £¶ ¶  1 ¤¶ ¶; U ¦x _ v «¶x ¶ } — ¸Œx ‘ Ÿ ¸ ¾¶x ¶ Á Ý Ñ9x 9å %‚å %å %9%4‚¦Áx¯"> ‡øçÞ¶â¶·‘ ý“(  ˜‘( 6  ­( ¶,= T §( ‘,X T ­( / ¶p  ´¶( ç ¶‡ …½¶-  ¼ ¾¶-Æ á ¿Ù-ê  ÀÙ-, 0 Â( 9-£‰‘5š5+<– ¶)<( ç ¶!÷ é­2­%2C%FC%C%à %Zà FZ. %si/—÷íŸñAB³0½å ÆD1òS³Ã1T³¶1ûS³‡2iôSµ¶2Àb>Ê/3&H2¢ T¾ç35/4 TÁç5505O5‹5š5¯6VË5Ý5 55F5S5Y5m7^¶uX7gç|\8<v ퟹBËB~ç0rðö`90òS~/:‘ð0TÙ•2N@T€Ö 2jIT‚ç3[G 4PT„Ù3[G 2¼UT†¶2Ù]T†¶2/ Sç;2wŽS ¹;ð:‘ðÍS¬å•:‘€2T±ñ•2³ŠS²¶2ùfT²¶2MiT³ç;Ð2u¤Sµ/3G! 2mcTÏç3Ã^2¯sÞ¶3ßÕ4oTÙ2}Tç3Iª2Ûw÷¶3eT:‘ð8Tû 739 2$cTç3ƒ12Bw ¶3½2•cT¥ç;(2w‡¶3k!-2‹ŠT¶5œ5Ø5Z6lKg55£6lJ¼5É55S5Ž6ð7³6¾[‡6¾[À5Ï5ñ56=S5C6¾[_5p6ŠSv5’6¾[Ë6YTÜ55 555b5w6T”5¢5¸5Ë6EGã5A56G¦6ð7&!<­ w¶¯ y³°"ã Õ+ðÖ ×øƒÙü¶Ú¶ÚÜˆàˆ  åˆyÛç—ˆ •A ¡³AöœˆÍmýœˆç‰ˆ — §Ù« › $§Ù« ¶ Cõœˆ ]œˆx(ˆ “DÙ« °d¶« Ð…¶« îšœˆ ¶ š ¡« ¶È"ˆ ¶<ç#ˆ ¶Z%ˆ€<&ˆ ¤`(ƒˆ Á`)°« ߘ*Ù« °¶2ˆ ¶ ÖAµˆ ¶Md Gˆ ¶k Lˆ º –ª Qƒˆ ¶°T Xˆ ¡ÎT Zˆ ° ¶íó aˆ ¶ ¶ ó g¹ˆ ¶ (2 o¹ˆ ¶O^ ~ˆ ¡s‹ ƒˆ ¡ ž®œˆ ¶ ¡ À®•ƒˆ ¶ ° ¶ãè žˆ  £¶ ¶ #1 ¤¶ ¶CU ¦ˆ cv «¶ˆ ¶ €— ¸œˆ ¡ ¢¸ ¾¶ˆ ¶ ÁÝ Ñ¹ˆ ¹¹ð%’ð%ð%¹%¦¹’¦.<%¿µ=ÝŒ,Q>óÙQøQ ç ç ç?¶Ñ=*tgR>óÙRFR ç ç ç?¶Ò=wŽ»®S>óÙSŽS ç I ç?¶ß=Äø`>óÙ`Õ` ç I ç ç?¶í=J=n>óÙnn ç ç?¶î@dÙÊs@‡ÙË–@ªÙ̽@ÕÙÍä@øÙÎ@ÙÏ"=¾‘^QÐ>óÙÐ6Ð ç?¶Ð@xÙÑŠ@¡Ù´=!’ùë1>óÙ1Ì1 ç ç?¶±=i“A32>óÙ22 ç ç?¶²=±”Œ~3>óÙ3\3 ç ç ç?¶³=þ•×É4>óÙ4§4 ç ç ç?¶´=K–6>óÙ6ò6 I I?¶¶=“—gY7>óÙ7:7 I I?¶·=Û˜¯¡8>óÙ8‚8 I I?¶¸=# ™÷é9>óÙ9Ê9 N N?¶¹=k š?1:>óÙ:: N N?¶º=³ ›‡y;>óÙ;Z; N N?¶»=û œÏÁ<>óÙ<¢< I I?¶¼=C! =>óÙ=ê= I I?¶½=‹!ž_Q>>óÙ>2> I I?¶¾=Ó!Ÿ§™?>óÙ?z? I I?¶¿=" ïá@>óÙ@Â@ I I?¶À=c"¡7)A>óÙA A I I?¶Á=«"¢qB>óÙBRB N N?¶Â=ó"£Ç¹C>óÙCšC N N?¶Ã=;#¤  D>óÙDâD N N?¶Ä=ƒ#¥W I E>óÙE* E N N?¶Å=Ë#¦Ÿ ‘ F>óÙFr F N N?¶Æ=$§ç Ù G>óÙGº G N N?¶Ç=[$¨/!!!H>óÙH!H I I?¶È=£$©t!f!I>óÙIJ!I I?¶É=æ$ª¼!®!J>óÙJ!J I I?¶Ê=.%«"ö!K>óÙK×!K I I?¶Ë=v%¬I";"L>óÙL"L I?¶Ì=¹%­‘"ƒ"M>óÙMd"M I I?¶Í=&®Ù"Ë"N>óÙN¬"N I I?¶Î=I&¯!##O>óÙOô"O I I?¶Ï=‘&°i#[#P>óÙP<#P I I?¶Ð=Ù&±±#£#Q>óÙQ„#Q I I?¶Ñ=!'²ù#ë#R>óÙRÌ#R S I?¶×=i'³A$3$X>óÙX$X S I?¶Ý=±'´‰${$_>óÙ_\$_ I I?¶ß=ù'µÑ$Ã$`>óÙ`¤$` I I?¶à=A(¶% %a>óÙaì$a N N?¶á=‰(·a%S%b>óÙb4%b N N?¶â=Ñ(¸¦%˜%c>óÙc|%c N?¶ã=)¹ë%Ý%d>óÙdÁ%d N?¶ä=W)º0&"&e>óÙe&e N?¶å=š)»u&g&f>óÙfK&f N?¶æ=Ý)¼º&¬&g>óÙg&g N?¶ç= *½ÿ&ñ&h>óÙhÕ&h N?¶è=c*¾D'6'i>óÙi'i N?¶é=¦*¿Œ'~'j>óÙj_'j N N?¶ê=î*ÀÑ'Ã'k>óÙk§'k N?¶ë=1+Á((l>óÙlì'l N?¶ì=t+Â[(M(m>óÙm1(m N?¶í=·+à(’(n>óÙnv(n N?¶î=ú+Äè(Ú(o>óÙo»(o S I?¶ô=B,Å0)")u>óÙu)u S I?¶ú=Š,Æx)j){>óÙ{K){ S I?¶€ =Ò,ÇÀ)²)>óÙ“) S I?¶† =-È*ú)ˆ>óÙˆÛ)ˆ S I?¶’ =b-ÉS*E*¡>óÙ¡#*¡ I S I?¶¡ =¯-Ê**¢>óÙ¢n*¢ N S I?¶¢ =ü-Ëè*Ú*£>óÙ£¸*£ ç S I?¶£ =I.Ì0+"+¥>óÙ¥+¥ I I?¶¥ =‘.Íx+j+¦>óÙ¦K+¦ ç ç?¶¦ =Ù.ÎÀ+²+§>óÙ§“+§ ç ç?¶§ =!/Ï,ú+¨>óÙ¨Û+¨ ç ç?¶¨ =i/ÐP,B,©>óÙ©#,© ç ç?¶© =±/ј,Š,ª>óÙªk,ª ç ç?¶ª =ù/Òà,Ò,«>óÙ«³,« ç ç?¶« =A0Ó(--¬>óÙ¬û,¬ ç ç?¶¬ =‰0Ôm-_-­>óÙ­C-­ ç?¶­ =Ì0Õ²-¤-®>óÙ®ˆ-® ç?¶® =1Öú-ì-¯>óÙ¯Í-¯ ç ç?¶¯ =W1×?.1.°>óÙ°.° ç?¶° =š1ØŠ.|.Ê>óÙÊZ.Ê ç ç ç?¶Ê 7¥.à1Ü"ý3 Õ+ðÖ ×øs6Ùü¶Ú¶Úܪ6àª6 ¯6 åª6Á.Ûç¹6ª6 ¯6Ü.Aï¾6ª6 Ã6ù.Aö¾6ª6/mý¾6ª6+/‰ª6 ¹6 H/§ÙÍ6 › f/§ÙÍ6 ¶ „/õ¾6ª6 /¾6ª6·/(ª6 Ñ/DÙÍ6 í/d¶Í6 0…¶Í6 )0š¾6ª6 ¶ @0š Ã6Í6 ¶X0È"ª6 ¶t0ç#ª6 ¶‘0%ª6¶0<&ª6 Ù0`(s6ª6 õ0`)Ò6Í6 1˜*ÙÍ6 Ò621¶2ª6 ¶ O1ÖA×6ª6 ¶{1d Gª6 ¶˜1 Lª6 Ü6 Â1ª Qs6ª6 ¶Û1T Xª6 Ã6ø1T Zª6 Ò6 ¶2ó aª6 ¶ ¶ 32ó gx6ª6 ¶ O22 ox6ª6 ¶u2^ ~ª6 Ã6˜2‹ ƒª6 Ã6 Â2®¾6ª6 ¶ Ã6 ã2®•s6ª6 ¶ Ò6 ¶3è žª6 "3 £¶ ¶ C31 ¤¶ ¶b3U ¦ª6 3v «¶ª6 ¶ 3— ¸¾6ª6 Ã6 ¾3¸ ¾¶ª6 ¶ Ü3Ý Ñx6ª6 x6x6».  ®.ç ¶ ³.¶à1%´6à1%à1%x6%È6x6´6È6.l1%á6×67 4¶74 77$4j&9AŒ7+4ç794ç7G4¶7R4¶¤7^4¶è/”0ퟖP¨P%0øã7'ð1%¶1ÇS%/1¨S%¸•6\_¨6:ж5Â&9AŒ/€'eퟴCÁCr0e4¶t¸*1{r/3µ'%:‘ŸTy 73µ'4£Ty¸•B6\_Î'5Ù'7l4¶€¼**t4¶¯T|4*ˆ4¶4p4*š4º83€¡4& 7'Œ*¬4Ü8Ið ²4&˜AŒq*¼4¶K¨Á4*^9J´*Ê4˜-£Ó4Ú4â4ê4õ45-£ 5ÿÿÿÿ5-£!5-5:5B5-£O5X5a5k5u5~5 ³9C ¿9C  Ð9C   æ9C    :C     !:C      F:C       p:C        "¤5pøçr¤5sÙ: ç,´5Ð5tÙ: /Bš:"h: Õ+ðÖ ×øSÙü¶Ú¶ÚÜv?àv? {? åv?Û5Ûç…?v? {?ò5AïŠ?v? ? 6AöŠ?v? 6mýŠ?v?56‰v? …? N6§Ù™? › h6§Ù™? ¶ ‚6õŠ?v? —6Š?v?­6(v? Ã6DÙ™? Û6d¶™? ö6…¶™? 7šŠ?v? ¶ "7š ?™? ¶67È"v? ¶N7ç#v? ¶g7%v?ˆ7<&v? §7`(Sv? ¿7`)ž?™? Ø7˜*Ù™? ž?ô7¶2v? ¶ 8ÖA£?v? ¶68d Gv? ¶O8 Lv? ¨? u8ª QSv? ¶Š8T Xv? ?£8T Zv? ž? ¶½8ó av? ¶ ¶ Ö8ó gçv? ¶ î82 oçv? ¶9^ ~v? ?/9‹ ƒv? ? U9®Š?v? ¶ ? r9®•Sv? ¶ ž? ¶9è žv? ©9 £¶ ¶ Æ91 ¤¶ ¶á9U ¦v? ü9v «¶v? ¶ :— ¸Š?v? ? 1:¸ ¾¶v? ¶ K:Ý Ñçv? çã:%€?ã:%ã:%ç%”?ç€?”?.&8%­?£?Dw:ï@:9E—:F2û@F3›Fd›Fe AFfAFhBAFjrAFkŠAFl›AFn¬AFp½AFqÝAFróAFsBFu+BFwFBFyaBF{ƒBF|ŽBF}›BF~±BF¾BF€ÏBFåBF‚ìBFƒýBF„ CF†CF‡(CF‰9CFŠyCF‹•CFŒ«CF޼CFÍCF‘çCF“ýCF•DF–)DF—UDF˜kDF™†DG{:F4·?A¤:‚›:A®: >H$A½: ?I ?´:A ?¹:A ?MAÒ: @I @´:kA @¹:kA @Ä:JÚ: ƒA /ß:Jæ: ¶ /Jë: A /Jð: kA /Jö: ƒA ÓA ØAK/KSJý: ³ ÓA ØAJ;  B ÓA ØA ;J; A ÓA ØA ¶J; kA ÓA ØA ¶J'; ¦ ÓA ØA ¶J/; !|B ÓA ØA ¶8;LO; #¶T; $ £JZ; ' › ›a; ) Jf; & ›Jm; (  ›Mu; ,J{; -¶ ºN‚; . ¶N‡; / ¶J; 3ç /J”; 5¶ /J›; 7 ^C ^C › › dCcCOiCP¶ ^C ^C£; 8  › › dC ©;±;  B BJµ; ;A AJº;  Ù1 /1M º1n /:‘ S£@555A5Y5b[ÇíŸ >Ë5à[ãíŸ%>Ì5üSníŸ=>L>ÎRÎ/RWÎçT[ËSй;XY‘ËSÓ@545J5[5‰5’6lJ¼SoíŸS>b>íRí/RWí/5z6lK€[‚íŸh>ï5›QŸ“íŸ>›>ó¶Ró/R×Só¶RÓSó¶RÏSó¶R£óIRMóºR·ó¶Y‘ÍSö@5Ï5Ú5 5 5# ZríŸâL¤>WW›S³•1΃¶5}Z3 [íŸMÁ>vW›S¹R¦SC¶RŠSC/RÝSC¶R SC¶RÛSC¶R{CIRyCR·C¶Q“íŸÚ>õ>û³Rû/R×Sû³RÓSû³RÏSû³R£ûNRMûºR·û¶Y‘ÍSþ@55555Z[íŸ$Nÿ>«W›S¹R¦SG¶RŠSG/RÝSG³R SG³RÛSG³R{GNRyGR·G¶8œíŸ?4?ç1/1ÓS/1£S1Mº1·¶:‘ÍS@555555ZDíŸ'O>?àW›S¹R¦SK¶RŠSK/R SKçR{KSRyKR·K¶/íŸX?h? 1 /1w ¶1çS Ù1ßS Ù2yŽS"¹56lJ55\ íŸo?‚?0¶R¤S0¶RËS0¶ ¶\÷ ퟋ?ž?5¶R¤S5¶RËS5¶ ¶/ퟧ?¸?(1(/1y(³1çS(Ù1ßS(Ù2—ŽS*¹56lJ55\ íŸÀ?Ó?0³R¤S0³RËS0³ ³\ íŸÞ?ñ?5³R¤S5³RËS5³ ³/@íŸü?@010/1îS0/1çS0Ù2µŽS2¹56lJ58+ ZíŸ@#@7¶17/2ÓŽS9¹5` 8WíŸ*@:@<¶1</2ñŽS>¹58WíŸD@T@A¶1A/2ŽSC¹58BíŸ^@q@FÙ1F/58?íŸ}@Œ@G¹1G/5/^ퟕ@¤@I1I/2-ŽSK¹58† ^ퟭ@¼@V/1V/2KwX¹5¿ /æ qíŸÅ@ß@\1ŽS\¹1s\¶6lJ( 6lJp 6lJ. /Y oíŸí@Aw1ŽSw¹1sw³6lJŸ 6lJç 5o 5~ 6lJŸ 8Ê ²íŸA$AB/1ÍSB³56TXV‰9íŸ/TÁ:W›S–RÇSt/UÍSv¸•B6\_¶/Ä>íŸ-AJAŽ1ŽS޹1sŽ/6lJ6lJK5ØZ‚D퟼TYA,W›S¹R¦SR¶RŠSR/RnR/RyRR{RR·R¶/kíŸsA‰A¨1¨/1ŽS¨¹555]$ퟒA®55%Z(ퟃU«A|W›SÏ•];íŸÂA ®5HZK%íŸÇUÚA›W›SÏ•6ÚUXVq$íŸðU W›SÏ•1w"¶6¯ˆVU íŸ%V W›Sà 1w#¶VMíŸQVd W›Sà RÛSï‘6oV°VhퟅVDW›Sà 1`U2¶2·cU4¶2ÕhU8Þ:5£5Ä5à8ÞSíŸB,Bôç1òSôÃ1Tô¶2ÞûS÷‡4¼4ø¶4{"ç;˜2üTù¶;x2ŠSû›27 Sÿ¶3Åf2UT /3§B2s T&ç55$5,5E5_5™62X¡6lJx6V‚5º5Ù5ë62Xö5$6xD5_5—5»5Ä5Ê5Ô5å5ò5ú56V V_BíŸHXÖW›Sà 1ÍSZ/1ŠSZ¶:‘ø\­6åZ6[‹6d[•Z2ퟮX5B W›Sà ]EíŸGB Ì5RZ»!%íŸòXbB= W›Sà 6YÈ!Vá!$íŸY« W›Sà 1w"¶6Ïø!V_íŸPYý W›Sà 8¢|íŸtB‡BÎ/9‘òSÎ/8"³íŸ“B¬Bݶ1$TÝç9½ TÝ/1TÝ/4(Tßç3"”2é Sâ¶;¸2.Tæ¶VùíŸ Z½W›SÔ•VOíŸ@ZÂW›SÏ•RÛSïU6^Z"V¼"–íŸtZ¢ W›SÏ•1`U2¶2ócU4¶2hU8Þ:5÷"5#5:#VQ íŸÏZÓW›SÏ•1w¶VS#9íŸûZ[W›Sà 1`UA¶6oVt#5Š#V#`íŸ5[8W›S4–RwU­/RoU­¶5È#5Î#5æ#Vî#íŸz[W›Sà 1òSL75ù#6ïÿ#Vퟴ[õ W›Sà /æ'3íŸÇCÊ=.1ÇS./4¨S0¸•B6|7 (87íŸÖBi<ç1{/1ŒT›5@5MV³!íŸP\_ W›Sý•8Ý(äíŸçBóB3ç1ŠS3ç2¶ŽS5¹5)5N)5T)5i)5o)5„)5–)6lJ²)8Ã)ƒíŸúBC6/1ÍS6¶5 *6T"*8$èíŸ C CAç1òSAÃ1ŽTA¶1]TA–2 {bç4’TU/3Å$Q2ÔTL/2ò{Mç5,$5u$5$5Ã$5Ù$5ä$5õ$51%5‚%5Ò%5ä%8°( íŸ*Ci<ç1ŒT›5¼(8¹&ÆíŸ8CECgç10TgS1ŠSg¶1—TgÙ2. Þi¶2w Tkç3Ý&-2L ŠTj¶3'`2• wl¶5Ø&5÷&5'50'5S'5r']G**íŸJCu5d*^ë%DíŸcCsCwÙ1 Swç\0&íŸ}CCc¶R{c/5=&\?&xퟖC©Ch³R{h/TÀ TkçTÞ slƒA5l&5¥&Sr*ퟱPËPlR8UlçRÇSl/RÍSl¸•RÞl¶5*Q( íŸÖC÷C NçRªT NçR¦T N¶5%(Z'(íŸø_þC)W›S–]:(íŸD 5G(Zž*%íŸ<`1DHW›S–6O`«*VÄ*$íŸe`¶W›S–1w"¶6~‘Û*VJ(ퟚ`jW›S –Z} ퟾`ID¯:W›S–RøsçVR(OíŸé`oW›S–RÛSï¡6as(Vê*–íŸaOW›S–1`U2¶2/cU4¶2MhU8Þ:5%+5I+5h+V¢( íŸxa€W›S–1w¶8+*íŸcDqD¶1òS/2ü w¶2' Tç5Ž+5ž+/¬+íŸyD„D=1ÍS=¶5·+5½+/Æ+ퟋD˜DI1ÍSI³5Ñ+5×+]à+&ퟡDQ5ù+X,:íŸé1®TQç1¦SQç1yQç5,5',59,]B,&ퟺDR5[,Xi,1íŸ61®TRç1¦SRç1yRç5~,5‰,6c™,/›,íŸÓDàDq1{q/5¦,]¯,&íŸçDS5È,X×,µíŸƒ1¸TSç1ŠSSI1³TSç3ë,”2E ŽSS¹3 -n2c wS¶5ÿ,5B-5V-6EG\-5e-6G-]-&íŸE`5¦-Xµ-ÀíŸÐ1¸T`ç1ŠS`I1®T`ç1³T`ç3É-Ÿ2Ž ŽS`¹3ç-y2¬ w`¶5Ý-5 .54.6EG:.5C.5N.6Gh.]v.&íŸEn5.X.&íŸ"1®Tnç1³Tnç5¨.5µ.5¾./Ä.íŸ2E?Ep1{p/5Ï./Ø.íŸFEZEs1¨SsS1UTsI5ê./ô.*íŸeEtEx1¨SxS1UTxI:‘{zå 2× y{ç3,/®4 S~¶;X2 w¶;@2H T…/5/5–/5¶/5Ù/5ú/506c 050/÷íŸ{EšE“9f {“/1¼T“…?;p4ç˜/5555555VOퟓfb;W›S–RÛSï?6±fV–íŸÇfB=W›S–1`U2¶2kcU4¶2‰hU8Þ:5558 0ퟦE·EŸç9® {Ÿ/1ÂTŸ¶4.T¨/;2 w¢¶5305h05‰0505Ù05ú0501831íŸÁEÏE²¶9h {²/2= ŠS´¶5F15v15•15»1/Ã1íŸ×EáEº1{ºç1ÂTºI5Ó1/Ü1oíŸäEôE¿1{¿ç1(T¿I1ÍT¿ç2¾ ÞÁ¶2Ü ÆTÁ¶5ð15ø15þ1525$25*25C2/L2íŸûE FÅ1{Åç5U26c[2]]2íŸFÊ5v2]y2íŸ-FË5’2]•2íŸFFÌ5®2]±2íŸ_FÍ5Ê2]Í2íŸxFÎ5æ2]é2ퟑFÏ53]3&ퟪFÐ53X,3íŸÊ1{Ðç5536âa;3]=3íŸÃFÑ5V3/Z3CíŸÜFòFÓ1¸TÓ/1ÚTÓ/1³TÓ/1ÓTÓÙ2ú ŽSÕ¹2R ŠS×¶;À2 {Ø/;¨4TÞ/4(TÜ/2~ sàç5i35ž35Ï35ð35/46lKG46EGT45d46âa|46GŠ46âaš4/Ÿ4€íŸûFGè9œ {è/1ßTè/:‘òSêå ;ð4ŠSì¶4Þì¶;Ø4çî/5¾45Ô45Ý455556c55'55J55k562X~55°55Ú55ç562Xí55656] 6íŸG5968=6ìíŸ4GLG¶1ÚT/1îT/1äT¶2ä {/2ÆT¶;2<Þ ¶2Zç /5P65ˆ65©65ñ6578+72íŸYGjGç9x{/1õT/:‘òSå ;(2ÀÞ ¶2Þç/5J75b75†75 75©75¯75¹75Þ75&85585K862XY8V^8íŸm3 W›Sý•]g8&íŸrG15€8XŽ8íŸ-1ÚT1ç1õT1ç5›8]¤8&ퟋG25½8XË8íŸu1ÚT2ç1ç2ç5Ø85Þ86âaä8]æ8&ퟤG35ÿ8X 9퟽1¸T3ç1ÚT3ç1³T3ç6Îi9]9&퟽G4579XE9íŸ 1¸T4ç1ÚT4ç1³T4ç6ÎiT9]V9&íŸÖG65o9X}9íŸW1¤S6I1ËS6I6âa9]‘9&íŸïG75ª9X¸9ퟟ1¤S7I1ËS7I6âaÊ9]Ì9&íŸH85å9Xó9íŸç1¤S8I1ËS8I6âa:]:&íŸ!H95 :X.:íŸ/ 1¤S9N1ËS9N6b@:]B:&íŸ:H:5[:Xi:íŸw 1¤S:N1ËS:N6b{:]}:&íŸSH;5–:X¤:퟿ 1¤S;N1ËS;N6b¶:]¸:&íŸmH<5Ñ:Xß:íŸ!1¤S<I1ËS<I6âañ:]ó:&퟇H=5 ;X;íŸO!1¤S=I1ËS=I6âa,;].;&ퟡH>5G;XU;ퟗ!1¤S>I1ËS>I6âag;]i;&ퟻH?5‚;X;íŸß!1¤S?I1ËS?I6âa¢;]¤;&íŸÕH@5½;XË;íŸ'"1¤S@I1ËS@I6âaÝ;]ß;&íŸïHA5ø;X<íŸo"1¤SAI1ËSAI6âa<]<&íŸ IB53<XA<ퟷ"1¤SBN1ËSBN6âaS<]U<&íŸ#IC5n<X|<íŸÿ"1¤SCN1ËSCN6âaŽ<]<&íŸ=ID5©<X·<íŸG#1¤SDN1ËSDN6âaÉ<]Ë<&íŸWIE5ä<Xò<íŸ#1¤SEN1ËSEN6âa=]=&íŸqIF5=X-=íŸ×#1¤SFN1ËSFN6âa?=]A=&ퟋIG5Z=Xh=íŸ$1¤SGN1ËSGN6âaz=]|=&ퟥIH5•=X£=íŸg$1¤SHI1ËSHI6âaµ=]·=&퟿II5Ð=XÞ=ퟯ$1¤SII6âaë=]í=&íŸÙIJ5>X>íŸò$1¤SJI1ËSJI6âa&>](>&íŸóIK5A>XO>íŸ:%1¤SKI1ËSKI6âaa>]c>&íŸ JL5|>XŠ>ퟂ%1¤SLI6âa™>]›>&íŸ'JM5´>XÂ>íŸÅ%1¤SMI1ËSMI6âa×>]Ù>&íŸAJN5ò>X?íŸ &1¤SNI1ËSNI6âa?]?&íŸ[JO50?X>?íŸU&1¤SOI1ËSOI6âaS?]U?&íŸuJP5n?X|?íŸ&1¤SPI1ËSPI6âaŽ?]?&íŸJQ5©?X·?íŸå&1¤SQI1ËSQI6âaÉ?]Ë?&ퟩJR5ä?Xò?ZíŸ-'1¨SRS1UTRI;X2üsR¶;@2'wR¶6âa @5&@6âaK@]M@&íŸÃJX5f@Xt@YíŸu'1¨SXS1UTXI;ˆ2RsX¶;p2ŠwX¶6âa‹@5¦@6âaÂ@6âaÌ@]Î@&íŸÝJ_5ç@Xõ@%퟽'1¤S_I1ËS_I6âa A6âaA]A&íŸ÷J`54AXBA%íŸ(1¤S`I1ËS`I6âaVA6âafA]hA&íŸKa5AXA/íŸM(1¤SaN1ËSaN6b½A]¿A&íŸ+Kb5ØAXæA4ퟕ(1¤SbN1ËSbN5B6bB8B íŸEKOK г1U г1ùT г5&B](B&íŸTKc5ABXOBíŸÝ(1¤ScN5aB6bgB8iB íŸnKvK ï³1U ï³5rB]tB&íŸzKd5BX›BíŸ )1¤SdN5­B6b³B8µB ퟔKœK N³1U N³5¾B]ÀB&ퟠKe5ÙBXçBíŸc)1¤SeN5ùB6bÿB8C ퟺKÂK ³1U ³5 C] C&íŸÆKf5%CX3Cퟦ)1¤SfN5?C6bKC8MC íŸàKéK ³1U ³5VC]XC&íŸîKg5qCXCíŸé)1¤SgN5‹C6b—C8™C íŸLL ³1U ³5¢C]¤C&íŸLh5½CXËCíŸ,*1¤ShN5×C6bãC8åC íŸ0L9L ³1U ³5îC]ðC&íŸ>Li5 DXDíŸo*1¤SiN5#D6b)D8+DíŸXLaL ³1U ³]1D&íŸfLj5JDXXDퟲ*1¤SjN1ËSjN5iD6boD8qD ퟀL‰L س1U س1ùT س5|D]~D&íŸLk5—DX¥DíŸú*1¤SkN5±D6b·D8¹D ퟧL¯L ¹³1U ¹³5ÂD]ÄD&ퟳLl5ÝDXëDíŸ=+1¤SlN5÷D6b E] E&íŸÍLm5$EX2Eퟀ+1¤SmN5>E6bDE8FE íŸçLñL ų1U ų5OE]QE&íŸ÷Ln5jEXxEíŸÃ+1¤SnN5„E6bŠE8ŒE íŸMM f³1U f³5•E]—E&íŸMo5°EX¾EvíŸ,1¨SoS1UToI3ÅEn2µso¶3îE=2Ówo¶5ëE5F5F6âa3F]5F&íŸ7Mu5NFX\FvíŸN,1¨SuS1UTuI3cFn2þsu¶3ŒF=2wu¶5‰F5­F5³F6âaÑF]ÓF&íŸQM{5ìFXûF€íŸ–,1¨S{S1UT{I3ûF2Gs{³31GA2ew{¶5.G5VG5\G6bzG]|G&íŸkM5•GX¤G€íŸÞ,1¨SS1UTI3¤G2s³3ÚGA2®w¶5×G5ÿG5H6b#H]%H&ퟅMˆ5>HXLHhíŸ&-1¨SˆS1UTˆI;¨2Ùwˆ¶5tH5™H]µH&ퟟM¡5ÎHXÝHšíŸn-1s¡I1¨S¡S1UT¡I3äH‘2w¡¶5I5BI5nI]xI&ퟹM¢5‘IX IšíŸ»-1s¢N1¨S¢S1UT¢I3§I‘2/w¢¶5ÈI5J51J];J&íŸÓM£5TJXcJ˜íŸ.1s£ç1¨S£S1UT£I3jJ2Zw£¶5‹J5ËJ5òJ]üJ&íŸíM¥5KX#K=íŸU.1¤S¥I1ËS¥I5=K6âa_K8aKvíŸNNc˜2… Ue˜5ŠK]€M&íŸN¦5™MX§MíŸ.1¤S¦ç1ËS¦ç5²M6âa¹M]»M&íŸ7N§5ÔMXâMíŸå.1¤S§ç1ËS§ç5íM6âaôM]öM&íŸQN¨5NXNíŸ-/1¤S¨ç1ËS¨ç5(N6âa1N]3N&íŸkN©5LNXZNíŸu/1¤S©ç1ËS©ç5eN6âanN]pN&ퟅNª5‰NX—N퟽/1¤Sªç1ËSªç5¢N6âa«N]­N&ퟟN«5ÆNXÔNíŸ01¤S«ç1ËS«ç5ßN6âaèN]êN&ퟹN¬5OXOíŸM01¤S¬ç1ËS¬ç5O6âa(O]*O&íŸÓN­5COXQO5ퟕ01{­ç6¾[zO]‡O&íŸíN®5 OX®OíŸØ01{®ç6lJ»O]½O&íŸO¯5ÖOXäOíŸ11¤S¯ç1ËS¯ç3äO2Í{¯ç5ïO6âaÿOQP íŸ!ODO jçRU jçR U j/5 P]P&íŸKO°54PXBPíŸc11{°ç5KP6âaQP8TP%íŸeO}O²ç9ë{²/1U²/1U²/:‘ø´å 2%%U¶¶3†PÈ2C,Uº/3¬P)4ŠS¾/5sP5P5˜P5ÀP5áP5Q5'Q50Q58Q5>Q5_Q5jQQzQ ퟈ODO h/RU h/R U h/5…Q]‡Q&ퟬOÊ5 QX®Qퟦ11{Êç1ŒSÊç1ŠSÊç5½Q]ÆQ$íŸÆO5ÓQ5èQZëQíŸ*‰àO2W›S–]þQíŸ÷O 5 RZR%íŸn‰P82W›S–6‰RV4R$ퟗ‰¦3W›S–1w"¶6ž‘KR]YR1íŸ*P5|R/‹RYíŸDPTP5œR5¸R5ÕRVåR퟊Z3W›S –VíRíŸ0Šð2W›S–/ S íŸ_PnP1¶15U/:‘2Ux651S5IS5`S5S5 SV¯SÐퟪŠm5W›S–1w¶1.TÃ6;À2aòS¶5ÞSQ¾(íŸvP‹PmçR8UmçR{m/RÞm›5Í(/æTMíŸÙPäPM1:UM˜2{O92ÉÛSO˜2õŠTP¶8ÙK¦íŸëPøPT˜2?UV92MBUV92yEUV92³HUV˜23ŠTW¶2{KUV˜5ôK6*‹úK]4U+íŸQ€5RU_aUøíŸQ‚¶5U5ŽU5›U5¨U5µU5ÂU5ÑU5âU5ïU5üU5 V5V5#V50V5=V5JVZZVퟫŒ QWW›S¹5cVVkVíŸÐŒ†W›S¹Q‘* íŸ.QFQ JçRªT J/R¦T J¶5œ*QP íŸVQpQ fçRU f/R U f/5PÆ`#íŸl÷€QìW›S{5~` íŸö¹Q¢W›SÂ5`íŸÉgìQ#W›S%–5^¯@íŸRRÙ˜1ìÙ/2™¢SÛ˜3·52Åwܶ2ðXUܶ^ðíŸ$RYRqÙ1ÛSq/1 Uq*–5þ 9)< / @^„V íŸzRŠRàÙ1ÛSà/1 Uà/5VVíŸãŽjW›S³•1ì…q1¢S…˜22 S‡¾5 V^íŸ0lW›S¹RŒSWbV“V£íŸ[1W›S®•1¢S˜2n SÂ3¢VX4ZU{3ÉV2Pw¶5¨V5°V`7W)íŸØ÷R÷W›S{5NW`aW íŸöÉR­W›SÂ5jWZoWíŸ-üRëW›S%–5{WZ€WíŸVSiW›S¹Z gíŸz-SW›S®•1ζ3Ì '2Œw¶5Ç VWíŸÅW›SÏ•V WíŸå! W›Sà VÙWퟑvW›Sà 1`UG¶Z°W íŸ5‘ZSõW›S4–Rø–çRâ–¶ ¶)<VÑWíŸt‘rW›S9–VéWퟔ‘,W›S–VùWퟴ‘3W›S–V€TeíŸÔ‘_2W›S–RÛSïÃ66ò‘¡TV X–ퟒ?4W›S–1`U2¶2§cU4¶2ÅhU8Þ:5EX5iX5ˆXa¢X6íŸsS6´J©X68K¯X6RKµX6L»X6IUÁX6š^ÇX6BbÍX6£bÓX63cÙX6ßcßX6œdåX6ÉhëX6ähñX6ÿh÷X6iýX65iY6Pi Y6kiY6³iY6˜kY6#m!Y6nm'Y6Çm-Y6"n3Y6}n9Y6Ìn?Y6oEY6joKY6¹oQY6pWY6Wp]Y6¦pcY6õpiY6DqoY6“quY6âq{Y61rY6€r‡Y6ÏrY6s“Y6ms™Y6¼sŸY6 t¥Y6Zt«Y6t±Y6ìt·Y6;u½Y6~uÃY6ÍuÉY6vÏY6kvÕY6ºvÛY6 wáY6’wçY6$xíY6|xóY6ÔxùY6#yÿY6²yZ6)z Z6 zZ6{Z6Ž{Z6|#Z6||)Z6î|/Z6}}5Z6ô};Z6<~AZ6³~GZ6*MZ6¼SZ6N€YZ6à€_Z6reZ6ØkZ6S‚qZ6΂wZ6Iƒ}Z6ЃƒZ6$„‰Z6x„Z6Ì„•Z6 …›Z6t…¡Z6È…§Z6†­Z6_†³Z6¢†¹Z6H‡¿Z6™ˆÅZ6ðˆËZ6¶‰ÑZ6 Œ×ZMGÕ¿S ­S #CF&ç'Œ&'Œ&Î'Œ‚%¶ð’š:ã:à1´6Ç%/–Ç­2î- .debug_locÿÿÿÿ íŸ-=íŸÿÿÿÿŸ«¼íŸÿÿÿÿ03íŸIUíŸÿÿÿÿ?UíŸÿÿÿÿ Ÿ=BíŸÿÿÿÿŸ^oíŸÿÿÿÿ03íŸIUíŸÿÿÿÿ?UíŸÿÿÿÿB*íŸÿÿÿÿ™?TíŸÿÿÿÿù35íŸy‚íŸÿÿÿÿ‹'*íŸIKíŸÿÿÿÿ14íŸZ\íŸÿÿÿÿ(4íŸÿÿÿÿž36íŸÿÿÿÿê36íŸÿÿÿÿ68íŸÿÿÿÿ36íŸÿÿÿÿ36íŸÿÿÿÿ36íŸÿÿÿÿ+ 7:íŸÿÿÿÿ7:íŸÿÿÿÿ7:íŸÿÿÿÿ36íŸÿÿÿÿ† ;>íŸÿÿÿÿ—,ŸATퟀ„íŸÿÿÿÿ—›žíŸÿÿÿÿ—ÄÊíŸÿÿÿÿÞ† íŸÿÿÿÿÞœ ŸÿÿÿÿÞ½öíŸÿÿÿÿÞðöíŸÿÿÿÿÞ+íŸÿÿÿÿÞîûíŸÿÿÿÿ¢_fíŸnwíŸÿÿÿÿ",íŸUdíŸÿÿÿÿ"&,í%0 $!Ÿÿÿÿÿ"NdíŸÿÿÿÿ<Ž¢íŸÿÿÿÿ<.IŸÿÿÿÿ<.0ŸÚé0Ÿ•íŸíŸ  íŸÿÿÿÿ<0<Ÿÿÿÿÿ<0<ŸæéíŸÿÿÿÿ<8<Ÿ}‚íŸÿÿÿÿ<·ÂíŸüíŸaiíŸ÷%íŸÿÿÿÿ<UWíŸÿÿÿÿ<•íŸÿÿÿÿ<ÂÖŸÖ䟗²ퟺÌíŸÿÿÿÿ<ÂÖŸåôŸrwí Ÿª¯í Ÿýí Ÿÿÿÿÿ<ÂÖ0Ÿåô0Ÿÿÿÿÿ<ìôíŸ "íŸÁÌíŸÿÿÿÿ<•žíŸÀÇíŸÿÿÿÿ<Ÿ®³íŸÿÿÿÿ<ñíŸÿÿÿÿ<íŸÿÿÿÿ<CNŸqxíŸÿÿÿÿ<  íŸÿÿÿÿ<& / ŸW \ íŸÿÿÿÿÝ(>AíŸÿÿÿÿ$Ù íŸÿÿÿÿ$ä íŸÿÿÿÿ$ÒÚíŸÿÿÿÿ¹&COíŸÿÿÿÿ¹&"+ŸJOíŸÿÿÿÿ¹&ajíŸÿÿÿÿ¹&aƒŸ¬ÁíŸÿÿÿÿ?&BGíŸÿÿÿÿ?&/;íŸÿÿÿÿ+Ÿ'íŸÿÿÿÿ+íŸÿÿÿÿ×,*2íŸÿÿÿÿ×,2>Ÿ–žíŸÿÿÿÿµ-*2íŸÿÿÿÿµ-2>Ÿ¡©íŸÿÿÿÿô.*2íŸJ_íŸÑæíŸÿÿÿÿô.S_í%0 $!ŸpxíŸÿÿÿÿô.ª¬íŸÿÿÿÿSUíŸjyíŸ{†íŸóõíŸÿÿÿÿ 0íŸ:IíŸKXퟀ†ퟫºíŸ¼ÉíŸÿÿÿÿ 0Ÿ’íŸÿÿÿÿ31ŸxíŸÿÿÿÿ31íŸFHíŸTcíŸepퟋíŸÿÿÿÿÜ13íŸÿÿÿÿÜ1$3íŸÿÿÿÿZ3íŸÿÿÿÿZ3GQíŸgvíŸx…íŸÿÿÿÿZ3.QíŸíŸÿÿÿÿZ3×àíŸÿÿÿÿŸ48Eퟬퟮ»íŸx~íŸÿÿÿÿ=6íŸ=LíŸN[íŸÿÿÿÿ=6ÐãíŸÿÿÿÿ=6w€íŸÿÿÿÿ=6‡œíŸÿÿÿÿ+7:DíŸ^`ퟥ´ퟶÁíŸÿÿÿÿ+7ÉÒíŸÿÿÿÿ+7ÙîíŸÿÿÿÿò?Ÿ69íŸÿÿÿÿò?Ÿ@JíŸÿÿÿÿt@Ÿ46íŸ6EŸÿÿÿÿt@Ÿ=EíŸÿÿÿÿ¾EYkíŸÿÿÿÿ¾E0<Ÿ`kíŸÿÿÿÿ\FYkíŸÿÿÿÿ\F0<Ÿ`kíŸÿÿÿÿûFcuíŸÿÿÿÿûF6BŸjuíŸÿÿÿÿ¤GcuíŸÿÿÿÿ¤G6BŸjuíŸÿÿÿÿLHŸ]eíŸÿÿÿÿÝH0Ÿ?PíŸÿÿÿÿ I0Ÿ?PíŸÿÿÿÿcJ*Ÿ@QíŸÿÿÿÿaKIOíŸQ^íŸ`míŸovíŸÿÿÿÿäO íŸÿÿÿÿTP•—ퟷ¹íŸöúíŸÿÿÿÿTP/2íŸÿÿÿÿTPFIíŸÿÿÿÿ¯S@Cí1ŸEJퟒíŸÿÿÿÿæT&+íŸBKíŸÿÿÿÿæT +íŸ8KíŸÿÿÿÿæTIKíŸÿÿÿÿÙK[xퟴØíŸ<íŸÿÿÿÿÙKcxíŸÍØíŸÿÿÿÿÙKkxퟻØíŸ!<íŸÿÿÿÿÙKHxíŸÂØíŸè(íŸ(<íŸJퟎíŸíŸŸ¦íŸÿÿÿÿÙK=päŸpxãŸÖØíŸ:<íŸÿÿÿÿÙKSxíŸÿÿÿÿ¯…*Ÿ*;íŸÿÿÿÿ¯Ÿ3;íŸÿÿÿÿ¯í%0 $!Ÿ9;í%0 $!Ÿÿÿÿÿ íŸÿÿÿÿ“VOTíŸÿÿÿÿ“Vq£íŸÿÿÿÿ ;DŸ]bíŸÿÿÿÿhíŸÿÿÿÿh^gíŸÿÿÿÿ¼"íŸÿÿÿÿ¼"ajíŸÿÿÿÿê*íŸÿÿÿÿê*ajíŸÿÿÿÿíŸÿÿÿÿajíŸÿÿÿÿ XíŸÿÿÿÿ XajíŸæ .debug_ranges.IKZ\r‹“«ËÍÚ"+Ey8LN]aŠ~z|‚†d~z|‚†>"G"N"k"[j!´¼[j´[![j|[!x§²¾]/…/Œ/ /7/…/Œ/·/80‘0—0´0s3~3Ž3|4s3~3Ž3|455666Õ4ü455666s677 7v7‹7É7[8ù?@@B@ù? @@K@t@ƒ@•@º@t@‹@•@Â@Ä@Ì@LH H¢H³HæS*T5TCT #$6PAB˜™÷ùŠ‹ÛÜžŸ®xŠ‹žéê_`“ÅàâqÇâãþno‚Ÿ2 r3 Ž   ÷   *   + … † ä æ W Y È Ê |Ä‚Æ'(:;JKp—ŽÜÞ12DET»!à!U^_f¢"º"ùPQ^_¡:<²!7N³!º!Ý(Á)Ã)F*$ê%°(½(¹&'G*q*ë%/&0&>&?&·&€'å'æ'((&('(9(:(I(ž*Ã*J(Q(}ˆ‰ÂR(¡(¢(¯(+«+¬+Å+Æ+ß+à+,,A,B,h,i,š,›,®,¯,Õ,×,Œ--³-µ-u.v.œ..Ã.Ä.×.Ø.ò.ô.0 01131Â1Ã1Û1Ü1K2L2\2]2x2y2”2•2°2±2Ì2Í2è2é233+3,3<3=3X3Z34Ÿ46 6;6=6)7+7]8^8f8g88Ž8£8¤8Ê8Ë8å8æ8 9 999D9E9U9V9|9}99‘9·9¸9Ë9Ì9ò9ó9::-:.:A:B:h:i:|:}:£:¤:·:¸:Þ:ß:ò:ó:;;-;.;T;U;h;i;;;£;¤;Ê;Ë;Þ;ß;<<<<@<A<T<U<{<|<<<¶<·<Ê<Ë<ñ<ò<==,=-=@=A=g=h={=|=¢=£=¶=·=Ý=Þ=ì=í=>>'>(>N>O>b>c>‰>Š>š>›>Á>Â>Ø>Ù>ÿ>???=?>?T?U?{?|???¶?·?Ê?Ë?ñ?ò?L@M@s@t@Í@Î@ô@õ@AAAABAgAhAŽAA¾A¿AåAæABB'B(BNBOBhBiBsBtBšB›B´BµB¿BÀBæBçBCC C C2C3CLCMCWCXC~CC˜C™C£C¤CÊCËCäCåCïCðCDD*D+D0D1DWDXDpDqD}D~D¤D¥D¸D¹DÃDÄDêDëD E E1E2EEEFEPEQEwExE‹EŒE–E—E½E¾E4F5F[F\FÒFÓFùFûF{G|G¢G¤G$H%HKHLH´HµHÛHÝHwIxIžI I:J;JaJcJûJüJ"K#K`KaK×K€M¦M§MºM»MáMâMõMöMNN2N3NYNZNoNpN–N—N¬N­NÓNÔNéNêNOO)O*OPOQO†O‡O­O®O¼O½OãOäOPP PPAPBPRPTPyQzQ†Q‡Q­Q®QÅQÆQêQëQýQþQ RR3RYRŠR‹RäRåRìRíR S S­S¯ST¾(Û(”Är**æT3UÙKM4U_UaUYVZVjVkVƒV‘**PP¯ïðÿ„V‘Vw“V6W7W`WaWnWoWW€WW ö q•WŸWhøá!" W¯W¼"R#S#Œ##í#î#$°WÐWÙWèWÑWØWÄ*è*éWøWê*€+4RXRùWX€TåT X X¢XØZÎ .debug_abbrev%U4I?: ; II: ; 6  : ;I8 .: ;<?I4 I .n: ;I<? I: ; /I I: ;8 .<4?6  : ; I: ;8.n: ;<?I : ;($> &I6  : ;  I8 4 I: ; 8  I: ; 8 ‰6 : ; .: ; <?.: ; L M<?.n: ; I<?.n: ; L M<?I I!"6  : ; #6  : ; $%I&I'!I7 ($ > )4I: ; n*4I: ;n+ I: ; ?< ,.n: ; <?-I : ; .</.@—Bn: ;?04I: ;1: ;I24: ;I3 44: ;I5‰‚6‰‚174I?: ;8.@—Bn: ;I?9: ;I:4: ;I; U<6 : ;=4Gn> I: ;?<?0I @4I: ;nA!I7BCD9E9‰F: ; G;H<I6 : ; J.: ; I<?K7IL.: ; I<?M.: ; <?‡N.: ; <?‡O&PIQ.@—Bn: ; I?R: ; IS.@—Bn: ; ?T4: ; IU4: ; IV.@d—BGWI4X.@—BGY4: ; IZ.@d—BnG[.@—B: ; \.@—Bn: ; I].@—B: ;^.@—Bn: ;I_.@—B: ;I?`.@d—B: ;nGa.@—Bn4­ .debug_lineH¨û /usr/local/google/home/azakai/Dev/emscripten/system/lib/libc/musl/arch/emscripten/bits/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/tmp/emscripten_testtools.hcommand.hsrc.cppalltypes.h__nullptrstddef.hcstddefcstdlibstdlib.hmath.hstdlib.hsrc.cppstring.h Õ- ªä@Ö 9‚$›: G.:‚3fÞ =uZ Èå  uš‚áJmuë =f.fXž.tX“äí tX“äí X<“‚í f“XíJÈKt’‚ï œC )XšB -XÚ = t =ž£{.ݬä <žLs v {‚á Pñ =È /¬Œ<÷<XX">.".X /.‡‚ú .º†Xþ *XX=‚<*XX=ý~!†<t <ú~ȇ *XX=ø~‹ õ~¬Œ Ž =f.fÈfð~XJÈKB“ = ë~.–.ƒ(t#X<1.é~ž— u.X>sç~t› ™ = #.X =tà~t X%<à~‚¢ -YX=.X=Ü~È¥ ù§ Ÿ¬­L(JX/f·>1t2#tXŸÒ~¯ ‹Œ !tòzXŽ.òz. Žu¼ ÅÉ â  Ÿ¬Þ|.¢.Þ|f¢X t.Þ| £ J X I K 0 tØ 82ÇÊ ãË Î ­È­L%tXf+41t Nt'<¬~t Õ X‘ª~¬×   0H. X/¦~ÈÞ< t¢~t ÞX)<¢~‚ß  u¬(< .(. ~Xã È 8.~¬äȬ>8Jš~ºè 6X˜~žë  oì4 A.4‚Uf‚î Ÿó Ÿ¬‹~.õ.‹~fõX t.‹~ ö  -/ X ;0 tØr‚# 9¬3 ÄJ 3t(¬tt tu¬ tfsur f<!=û Ÿ¬ƒ~.ý.ƒ~fýX t.ƒ~ þ J X ;0 tØÈL 5t)¬tt tu¬ thswt h<!=ƒ Ÿ¬û}.….û}f…X t.û} † JX ‚ Õ0 t×uÌP 4tt¬ tu¬ t!t  ŸXž/‚Ý}<£ ž<Ý}£<º.Ý}X£ º.Ý}¬¤ "tÜ}¦¬XÚ}§   0 !J X ÷ 5 !J X ¨ ŸXÈ/‚Õ}<« ž<Õ}«<º.Õ}X« º.Õ}¬¬ "tÔ}®¬XÒ}¯   0 !J X  5 !J X ° ŸXÈ/‚Í}<³ ž<Í}³ÈÖ.Í}ò³ Í}ȳ<Ö.Í}<³ Í}¬³ Í}J´ žXYXË}¶  + · Ÿž/ XÆ}X» ¼ Ÿž/Á}tÀ Á Ÿž/¼}tÅ Å- ž5&ÈA¬-.A.& Æ, ž4%ÈÉ Ÿ¬­X tA¯}Ô  † Ö #¬­Xt (.§}tÙ æ Ü =È  <S. X¢}X å›}tåÈ›}<åtîz‚ ” žìzX”Jyçz‚&™JX+.çzž2™tçz‚™ çzžšJæzž t!t»L‚‚/Üzf¥ ÛzÖ§äÙz<´ä  6.<.6XÌzt-µ 3XXËzXHµžA¬Ëz‚*·I/X*X;.Éz#· (ºÉzt0¸t5X0XJ.AäÈz‚W¸ ,fWX,<\.XÈz0¹ž5X0XL.AäÇz‚[¹ #f[X#<`.XÇz&¾ 6fÂzÖR¾ WºÂzt"¿ ÁzÖ#½.*º:X&fÃzX:½JX40f%X¬Ëz.Áf¿zteÄÖ`X!X¼zteÅ<kX`X!X»zteÆ<kXqX`X!XºzteÇ<kXqXwX`X!X¹zteÈ<kXqXwX}X`f!X¸ztmÉ<sXyXX…X‹fhf!X·ztuÊ<{XX‡XX“f™fpf!X¶zt}Ë<ƒX‰XX•X›f¡f§fxf!Xµzt"Ì<´zÖ`Ã.!X½ztÎ t²z‚Ï<±z ÐJ°ztŽò!tòy‚ Ž òyºŽ.òz‚ 7šE :‚W.:X3f³!! XÝ(³ = ¬!. XXX Ê{<¸<@.3X,<fÈ{ž¹ C.6X-<fÇ{žº :.-X<Æ{ž» 2.XÅ{ž½ Ã{f¿ Ã)¶ =È< ‘10 ¬e g $Á ? ò.t Ö gºº{.ƺº{žÆ   /J Ö¹{f Æ #·{<Ô ¬›{ Óžž›{  Ë »!ƒXg .. X ‚$< = ut .ž›{< Ø .X ò g .§{Ö Úf- Y¦{X Û ·J Ö gt N t<£{Jå.›{  Þ<X$t> {tâ Ÿ t .{žå °(™D :X3f¹&ç u¬t—{‚ê<X–{.!ê.¬fXžK•{òì.X 0. X’{‚ ïX‘{XðJ{ò î .,”{XîJ X u XMG*ô )ë%÷ u ¬J‡{.)ùº‡{‚OùtGt‡{fù 0&ã !º?&è “”. í¬ .XX.(t“t>í “tKí “¬í €'ò  L‹uf÷ .X 0ƒ†uºý <æ'®  >Ïut² .   (Í6 /ž'(Ü$ tv :( Èž*ä <žt$X›~‚;å J(! X}ò! 3t‰ô >u XÊ R(ï =tt .$.X~fò XJ X=ž ‚¢(ž; 4¬+“ = éyJ˜.èy — "žƒ¬+½ !.‚fuÆ+É !.‚fuà+Ð %,Ð ¯yòÑ ¯yJÑ B,Ñ %i,Ñ ®yòÒ ®yJÒ  ›,ð) +.)‚9t¯,Ò %×,Ò <žž‚.ž­y.ÓJ¬­yòÓ ­yXÓ ÈJ­y‚Ó  -ß %µ-ß <žž‚.ž y.àJ¬ yòà  yXà ‚ºÈJ y‚à  v.í %.í %Ä.ï) +.)‚9tØ.ó !..X.fuô.ø =É uX„yXÿf 0tÿxt‚Jþxž„ž'Y%t# 2.ûxȆ úx.†t'¬úxt‚.4tøxÖŠÖtöxÖ ü X ftׂg“ = /ò “çx.<ãxº ™ çxX™.çx¬š ¬ ..3X:?ž8. æxžQš b.QXæx‚š t ×zJ låxï =tt .$.X~fò XJ X=ž ‚ 0Ÿ =ßx.¢.XÞx. ¤JÜxJ¤.ÜxȤ Üx.¥ F j u XÚx< ¦X“×x5© ×x.©<Y 1t.t  ;Ôxt ¯ . Xf31² >Ëx. ¶JòÊx.·<Éx<¶ ÊxX¶.Êx¬¶ !tI!gÊxÃ1º !..XfuÜ1¿ >#IX#‚×(X¾xº3Â.¾xºa ¾xt .žuL2Å !‚g]2É y2Ê •2Ë ±2Ì Í2Í é2Î 3Ï %,3Ï =3Ð Z3Ó = »t ªx. Úž  ¥x<Û‚¥xf Ý £xXÝ.£xÈÝ £x.ßX X¡x.'ßtt..t'  <¡xtà ).X ƒXŸx‚â<žxž ã‚xÖåž X›x‚!Ö<ªxX)Ö.fšx æ Ÿ4è =”x‚&ìt  ftׂgxJ ï ‘xXï.‘xÈï ‘x. ð J Xxf ñ.X X0‚Xx.+ó 'txÖô<X<.X>t×J‚‰xfù t‡xÖ û pJ f…x 6ÿ =6‚ >ûw. ‡Jùwt–.êw  Š öwXŠ.öwÈŠ öw.‹ õwtŒ. X0ufž  ñw<‘ !. ºïw.“. ssJ  fîw–f+7˜ =æwÈ œf ¡áw. ­<t× ‚ƒÑwf Ÿ áwXŸ.áw¬  àwt¡. X0ufž  Üw< ¦ Úwº)¦. 0ž".tØwÖ© ×wº^8š! %X g8° %Ž8° ¤8± %Ë8± æ8² % 9² 9³ %E9³ V9µ %}9µ ‘9¶ %¸9¶ Ì9· %ó9· :¸ %.:¸ B:¹ %i:¹ }:º %¤:º ¸:» %ß:» ó:¼ %;¼ .;½ %U;½ i;¾ %;¾ ¤;¿ %Ë;¿ ß;À %<À <Á %A<Á U< %|< <à %·<à Ë<Ä %ò<Ä =Å %-=Å A=Æ %h=Æ |=Ç %£=Ç ·=È %Þ=È  í=É %>É (>Ê %O>Ê c>Ë %Š>Ë ›>Ì %Â>Ì Ù>Í %?Í ?Î %>?Î U?Ï %|?Ï ?Ð %·?Ð Ë?Ñ %ò?Ñ tž®w.Ò.f®w Òt®wXÒX‚J®wfÒ ‚M@× %t@× <ž¨w.Ø.f¨w بwJØX‚¨w<Ø.f¨w Ø ‚Î@Þ %õ@Þ ¡w¬ß.¡wtß Aß %BAß  w¬à. wtà hAà %Aà žŸwžá  ¿Aá %æAá žžwäâ   B‰q jž(Bâ %OBâ  iBîZ S‚tBã %›Bã  µBÍZ S‚ÀBä %çBä  C’Z S‚ Cå %3Cå šw¬æX MC’[ T‚XCæ %Cæ ™w¬çX ™C†[ T‚¤Cç %ËCç ˜w¬èX åCž[ T‚ðCè %Dè  +D†[ T<1Dé %XDé  qD×p iž~Dê %¥Dê  ¹D¸Z S‚ÄDë %ëDë  Eì %2Eì  FEÄ\ U‚QEí %xEí  ŒEåZ S‚—Eî %¾Eî t‘w(ï ž‘w.ï.+J‚5Fô %\Fô t‹w(õ ž‹w.õ.+J‚ÓFú %ûFú X…wòûž…wXû ž…w.ûf+J‚|G€  %¤G€  Xÿvò žÿvX žÿv. f+J‚%H‡  %LH‡  <žøv.ˆ ‚<È.øv ˆ ÈJµH   %ÝH   tòßv.¡ Jßv.¡ ‚Xßv.¡ JfJßv.¡ XXßv.¡ ¬xI¡  % I¡  tòÞv.¢ JÞv.¢ ‚XÞv.¢ JfJÞv.¢ XXÞv.¢ ¬;J¢  %cJ¢  tò.äÝv.£ äXÝv.£ J.XÝv.£ XXÝv.£ ¬üJ¤  %#K¤  <Ûvf¥ XÛv<¥  aKã  >‚.. .l”u æ K .™uX è J ˜u< é Jt —u< ê Jt –u<ë J =€M¥  %§M¥  »M¦  %âM¦  öM§  %N§  Øvž¨ .3N¨  %ZN¨  ×vž© .pN©  %—N©  Övžª .­Nª  %ÔNª  Õvž« .êN«  %O«  Ôvž¬ . *O¬  %QO¬  <!‡O­  %®O­  < ½O®  %äO®   Pé@ 9žP¯  %BP¯  TP²  =Ê»[ !Z Ãv.)¾ J X6<)È.tÂvX ¾ .e".(¬Ãvtà J <!¬½vt à .½v.Ä Jt"×0‚‚»vž¿ Ávt· ¬.ÉvžÈ  zQç@ 9ž‡QÉ  %®QÉ  ÆQŽ  #ëQÜ$ tv þQŽ  ÈRä <žt$X›~‚;å YR–  0‹R–  <éu:— åR! XíR— <ä¬ S›  >!ò  .3f9fâut@ž âu Ÿ sv.=e/‘X» ¯S = ñ|¬tð|tX Xð|.'.5º0X.fð|tò XKž‘ t¬ X¾(ìd K.dº_Xh<m<”¥  "/-geiur*ëW xäst|<<æTÍ  ?,Z ¯u.(Ñ t,.(t%XtXYÙKÔ  ? È ..f¨ufØ ƒs Ys¨u.Ø  0§u‚Ø ºH0,l„ScJP J iXH E<Mt¦ut>Ú ¬¦uX,Ú JX¦už4Û .¥ufXÛ J?OJ< 6 UX4 1<9t't¥ut*Û J¥uXÛ .XY.¤uÜ ‚/È X 8.5È =.X£u Þ Jt ¢u<ß Jt ¡u<à J <4Uÿ  *aU‚  =ÉÉÉÉÉÉ.º!ÉÉÉÉÉÉÉÉZVÔ ÖkVØ! t&X§-Ù  ‘*É@ 2ž PåJ <žÑ$ = t!Z Ÿ3Ó ¬kö <‰|‚÷..õ æ# º¯Ù „t¤|X5ÜfX8‚<&.Xfgðñ !. Xf„Và !¬…$ !Ÿt =Ö( IZ“V = tî{.!”<%f‘.XKê{¬1—.H.1X9<6XH<é{X —J -=/.-XKç{tœ -YX=.ò=u É7Wö  aWõ  oWë º€WÀ ¬  >« ryJtú{< ‡.X.ä <žKq¡9 =t3<A.9ž=X3<IJW™ +Èh² = ­YXXÊ}.$¶.XX IJË}ž ·t X/È}ž¹. X 0. X­Ä}Ⱦ Â}t¿ á!¡9 =t3<A.9ž=X3<IJ W™ +ȼ"² = ­YXXÊ}.$¶.XX IJË}ž ·t X'/XÈ}‚¹. X 0.%t XuÄ}Ⱦ Â}t¿ S#Á =t<t .½}žÄ . XX  #­ =tX< X&.Ñ~Ȱ  ‚!. ž u.XX< ‚gî#Ì !. ‚g°W•H 3t+t!tRtÙWÇ !ÉÑW¼! XÄ*¡9 =t3<A.9ž=X3<IJéW™ +Èê*² = ­YXXÊ}.$¶.XX IJË}ž ·t X'/XÈ}‚¹. X 0.%t XuÄ}Ⱦ Â}t¿ ² = ­YXXÊ}.$¶.XX IJË}ž ·t X'/XÈ}‚¹. X 0.%t XuÄ}Ⱦ Â}t¿ 4R¡9 =t3<A.9ž=X3<IJùW™ +È€Tï =tt .$.X~fò Xt.‘ä ¬ X² = ­YXXÊ}.$¶.XX IJË}ž ·t X'/XÈ}‚¹. X 0.%t XuÄ}Ⱦ Â}t¿  ¢X¶‡« .debug_strclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)/tmp/emscripten_test/src.cpp/tmp/emscripten_testidentssizeintnumelemschainselemkeychardata_vptr$ident__vtbl_ptr_typetypenameminvalminvalffloatmaxvalmaxvalfoverridefunstackactionnextidentstacknargvalifsidentvalselfisexecutingoverridevalstorageidentvalptrflagsident~ident_ZN5identaSERKS_operator=_ZN5ident7changedEvchangedhashtableentryKThashtableentrychainchunks__ARRAY_SIZE_TYPE__chainchunkunusedhashset~hashset_ZN7hashsetI14hashtableentryIPKc5identEE6insertEjinsertunsigned intuint_ZN7hashsetI14hashtableentryIPKc5identEE12deletechunksEvdeletechunks_ZN7hashsetI14hashtableentryIPKc5identEE5clearEvclear_ZN7hashsetI14hashtableentryIPKc5identEE7getnextEPvgetnext_ZN7hashsetI14hashtableentryIPKc5identEE7getdataEPvgetdatahashset >hashtable_ZN9hashtableIPKc5identE6insertERKS1_jentry_ZN9hashtableIPKc5identE6accessERKS1_access_ZN9hashtableIPKc5identE6accessERKS1_RKS2__ZN9hashtableIPKc5identEixERKS1_operator[]_ZN9hashtableIPKc5identE7getnextEPv_ZN9hashtableIPKc5identE6getkeyEPvgetkey_ZN9hashtableIPKc5identE7getdataEPvhashtableidenttableoverrideidentsboolpersistidents__dummy_push_ZL12__dummy_push__dummy_pop_ZL11__dummy_pop__dummy_resetvar_ZL16__dummy_resetvar__dummy_alias_ZL13__dummy_aliaswordbufsMINSIZEbufalenulenvector~vector_ZN6vectorIcEaSERKS0__ZN6vectorIcE3addERKcadd_ZN6vectorIcE3addEv_ZN6vectorIcE3dupEvdup_ZN6vectorIcE4moveERS0_move_ZNK6vectorIcE7inrangeEminrangelong unsigned intsize_t_ZNK6vectorIcE7inrangeEi_ZN6vectorIcE3popEvpop_ZN6vectorIcE4lastEvlast_ZN6vectorIcE4dropEvdrop_ZNK6vectorIcE5emptyEvempty_ZNK6vectorIcE8capacityEvcapacity_ZNK6vectorIcE6lengthEvlength_ZN6vectorIcEixEi_ZNK6vectorIcEixEi_ZN6vectorIcE6shrinkEishrink_ZN6vectorIcE7setsizeEisetsize_ZN6vectorIcE14deletecontentsEvdeletecontents_ZN6vectorIcE12deletearraysEvdeletearrays_ZN6vectorIcE6getbufEvgetbuf_ZNK6vectorIcE6getbufEv_ZNK6vectorIcE5inbufEPKcinbuf_ZN6vectorIcE7growbufEigrowbuf_ZN6vectorIcE7reserveEireservelenmaxlenunsigned charuchardatabuf_ZN7databufIcE3getEvget_ZN7databufIcE6subbufEisubbuf_ZN7databufIcE3putERKcput_ZN7databufIcE3putEPKci_ZN7databufIcE3getEPci_ZNK7databufIcE6lengthEv_ZNK7databufIcE9remainingEvremaining_ZNK7databufIcE8overreadEvoverread_ZNK7databufIcE9overwroteEvoverwrote_ZN7databufIcE13forceoverreadEvforceoverreaddatabuf_ZN6vectorIcE7advanceEiadvance_ZN6vectorIcE6addbufERK7databufIcEaddbuf_ZN6vectorIcE3padEipad_ZN6vectorIcE3putERKc_ZN6vectorIcE3putEPKci_ZN6vectorIcE6removeEiiremove_ZN6vectorIcE6removeEi_ZN6vectorIcE15removeunorderedEiremoveunordered_ZN6vectorIcE9removeobjERKcremoveobj_ZN6vectorIcE15replacewithlastERKcreplacewithlast_ZN6vectorIcE6insertEiRKc_ZN6vectorIcE6insertEiPKci_ZN6vectorIcE7reverseEvreverse_ZN6vectorIcE10heapparentEiheapparent_ZN6vectorIcE9heapchildEiheapchild_ZN6vectorIcE9buildheapEvbuildheap_ZN6vectorIcE6upheapEiupheap_ZN6vectorIcE7addheapERKcaddheap_ZN6vectorIcE8downheapEidownheap_ZN6vectorIcE10removeheapEvremoveheapvector_ZN6vectorIPS_IcEEaSERKS2__ZN6vectorIPS_IcEE3addERKS1__ZN6vectorIPS_IcEE3addEv_ZN6vectorIPS_IcEE3dupEv_ZN6vectorIPS_IcEE4moveERS2__ZNK6vectorIPS_IcEE7inrangeEm_ZNK6vectorIPS_IcEE7inrangeEi_ZN6vectorIPS_IcEE3popEv_ZN6vectorIPS_IcEE4lastEv_ZN6vectorIPS_IcEE4dropEv_ZNK6vectorIPS_IcEE5emptyEv_ZNK6vectorIPS_IcEE8capacityEv_ZNK6vectorIPS_IcEE6lengthEv_ZN6vectorIPS_IcEEixEi_ZNK6vectorIPS_IcEEixEi_ZN6vectorIPS_IcEE6shrinkEi_ZN6vectorIPS_IcEE7setsizeEi_ZN6vectorIPS_IcEE14deletecontentsEv_ZN6vectorIPS_IcEE12deletearraysEv_ZN6vectorIPS_IcEE6getbufEv_ZNK6vectorIPS_IcEE6getbufEv_ZNK6vectorIPS_IcEE5inbufEPKS1__ZN6vectorIPS_IcEE7growbufEi_ZN6vectorIPS_IcEE7reserveEidatabuf *>_ZN6vectorIPS_IcEE7advanceEi_ZN6vectorIPS_IcEE6addbufERK7databufIS1_E_ZN6vectorIPS_IcEE3padEi_ZN6vectorIPS_IcEE3putERKS1__ZN6vectorIPS_IcEE3putEPKS1_i_ZN6vectorIPS_IcEE6removeEii_ZN6vectorIPS_IcEE6removeEi_ZN6vectorIPS_IcEE15removeunorderedEi_ZN6vectorIPS_IcEE9removeobjERKS1__ZN6vectorIPS_IcEE15replacewithlastERKS1__ZN6vectorIPS_IcEE6insertEiRKS1__ZN6vectorIPS_IcEE6insertEiPKS1_i_ZN6vectorIPS_IcEE7reverseEv_ZN6vectorIPS_IcEE10heapparentEi_ZN6vectorIPS_IcEE9heapchildEi_ZN6vectorIPS_IcEE9buildheapEv_ZN6vectorIPS_IcEE6upheapEi_ZN6vectorIPS_IcEE7addheapERKS1__ZN6vectorIPS_IcEE8downheapEi_ZN6vectorIPS_IcEE10removeheapEvvector *>_ZL8wordbufs_numargscommandretargids_ZN6vectorIP5identEaSERKS2__ZN6vectorIP5identE3addERKS1__ZN6vectorIP5identE3addEv_ZN6vectorIP5identE3dupEv_ZN6vectorIP5identE4moveERS2__ZNK6vectorIP5identE7inrangeEm_ZNK6vectorIP5identE7inrangeEi_ZN6vectorIP5identE3popEv_ZN6vectorIP5identE4lastEv_ZN6vectorIP5identE4dropEv_ZNK6vectorIP5identE5emptyEv_ZNK6vectorIP5identE8capacityEv_ZNK6vectorIP5identE6lengthEv_ZN6vectorIP5identEixEi_ZNK6vectorIP5identEixEi_ZN6vectorIP5identE6shrinkEi_ZN6vectorIP5identE7setsizeEi_ZN6vectorIP5identE14deletecontentsEv_ZN6vectorIP5identE12deletearraysEv_ZN6vectorIP5identE6getbufEv_ZNK6vectorIP5identE6getbufEv_ZNK6vectorIP5identE5inbufEPKS1__ZN6vectorIP5identE7growbufEi_ZN6vectorIP5identE7reserveEidatabuf_ZN6vectorIP5identE7advanceEi_ZN6vectorIP5identE6addbufERK7databufIS1_E_ZN6vectorIP5identE3padEi_ZN6vectorIP5identE3putERKS1__ZN6vectorIP5identE3putEPKS1_i_ZN6vectorIP5identE6removeEii_ZN6vectorIP5identE6removeEi_ZN6vectorIP5identE15removeunorderedEi_ZN6vectorIP5identE9removeobjERKS1__ZN6vectorIP5identE15replacewithlastERKS1__ZN6vectorIP5identE6insertEiRKS1__ZN6vectorIP5identE6insertEiPKS1_i_ZN6vectorIP5identE7reverseEv_ZN6vectorIP5identE10heapparentEi_ZN6vectorIP5identE9heapchildEi_ZN6vectorIP5identE9buildheapEv_ZN6vectorIP5identE6upheapEi_ZN6vectorIP5identE7addheapERKS1__ZN6vectorIP5identE8downheapEi_ZN6vectorIP5identE10removeheapEvvectorinit_ZN7_stdcmdILi849EE3runEPcS1_S1_runN_stdcmd<849>_ZN7_stdcmdILi849EE4initE_ZN7_stdcmdILi850EE3runEPcS1_S1__stdcmd<850>_ZN7_stdcmdILi850EE4initE_ZN7_stdcmdILi863EE3runEPcPiS1__stdcmd<863>_ZN7_stdcmdILi863EE4initE_ZN7_stdcmdILi877EE3runEPcPiS1_S1__stdcmd<877>_ZN7_stdcmdILi877EE4initE_ZN7_stdcmdILi878EE3runEPcS1__stdcmd<878>_ZN7_stdcmdILi878EE4initE__dummy_concat_ZL14__dummy_concat__dummy_result_ZL14__dummy_result__dummy_concatword_ZL18__dummy_concatword__dummy_format_ZL14__dummy_format__dummy_at_ZL10__dummy_at__dummy_substr_ZL14__dummy_substr_ZN7_stdcmdILi976EE3runEPc_stdcmd<976>_ZN7_stdcmdILi976EE4initE__dummy_getalias__ZL17__dummy_getalias___dummy_prettylist_ZL18__dummy_prettylist_ZN7_stdcmdILi1073EE3runEPcS1__stdcmd<1073>_ZN7_stdcmdILi1073EE4initE_ZN7_stdcmdILi1074EE3runEPcS1__stdcmd<1074>_ZN7_stdcmdILi1074EE4initE_ZN7_stdcmdILi1075EE3runEPcS1_S1__stdcmd<1075>_ZN7_stdcmdILi1075EE4initE_ZN7_stdcmdILi1076EE3runEPcS1_S1__stdcmd<1076>_ZN7_stdcmdILi1076EE4initE_ZN7_stdcmdILi1078EE3runEPiS1__stdcmd<1078>_ZN7_stdcmdILi1078EE4initE_ZN7_stdcmdILi1079EE3runEPiS1__stdcmd<1079>_ZN7_stdcmdILi1079EE4initE_ZN7_stdcmdILi1080EE3runEPiS1__stdcmd<1080>_ZN7_stdcmdILi1080EE4initE_ZN7_stdcmdILi1081EE3runEPfS1__stdcmd<1081>_ZN7_stdcmdILi1081EE4initE_ZN7_stdcmdILi1082EE3runEPfS1__stdcmd<1082>_ZN7_stdcmdILi1082EE4initE_ZN7_stdcmdILi1083EE3runEPfS1__stdcmd<1083>_ZN7_stdcmdILi1083EE4initE_ZN7_stdcmdILi1084EE3runEPiS1__stdcmd<1084>_ZN7_stdcmdILi1084EE4initE_ZN7_stdcmdILi1085EE3runEPiS1__stdcmd<1085>_ZN7_stdcmdILi1085EE4initE_ZN7_stdcmdILi1086EE3runEPiS1__stdcmd<1086>_ZN7_stdcmdILi1086EE4initE_ZN7_stdcmdILi1087EE3runEPiS1__stdcmd<1087>_ZN7_stdcmdILi1087EE4initE_ZN7_stdcmdILi1088EE3runEPiS1__stdcmd<1088>_ZN7_stdcmdILi1088EE4initE_ZN7_stdcmdILi1089EE3runEPiS1__stdcmd<1089>_ZN7_stdcmdILi1089EE4initE_ZN7_stdcmdILi1090EE3runEPfS1__stdcmd<1090>_ZN7_stdcmdILi1090EE4initE_ZN7_stdcmdILi1091EE3runEPfS1__stdcmd<1091>_ZN7_stdcmdILi1091EE4initE_ZN7_stdcmdILi1092EE3runEPfS1__stdcmd<1092>_ZN7_stdcmdILi1092EE4initE_ZN7_stdcmdILi1093EE3runEPfS1__stdcmd<1093>_ZN7_stdcmdILi1093EE4initE_ZN7_stdcmdILi1094EE3runEPfS1__stdcmd<1094>_ZN7_stdcmdILi1094EE4initE_ZN7_stdcmdILi1095EE3runEPfS1__stdcmd<1095>_ZN7_stdcmdILi1095EE4initE_ZN7_stdcmdILi1096EE3runEPiS1__stdcmd<1096>_ZN7_stdcmdILi1096EE4initE_ZN7_stdcmdILi1097EE3runEPi_stdcmd<1097>_ZN7_stdcmdILi1097EE4initE_ZN7_stdcmdILi1098EE3runEPiS1__stdcmd<1098>_ZN7_stdcmdILi1098EE4initE_ZN7_stdcmdILi1099EE3runEPiS1__stdcmd<1099>_ZN7_stdcmdILi1099EE4initE_ZN7_stdcmdILi1100EE3runEPi_stdcmd<1100>_ZN7_stdcmdILi1100EE4initE_ZN7_stdcmdILi1101EE3runEPiS1__stdcmd<1101>_ZN7_stdcmdILi1101EE4initE_ZN7_stdcmdILi1102EE3runEPiS1__stdcmd<1102>_ZN7_stdcmdILi1102EE4initE_ZN7_stdcmdILi1103EE3runEPiS1__stdcmd<1103>_ZN7_stdcmdILi1103EE4initE_ZN7_stdcmdILi1104EE3runEPiS1__stdcmd<1104>_ZN7_stdcmdILi1104EE4initE_ZN7_stdcmdILi1105EE3runEPiS1__stdcmd<1105>_ZN7_stdcmdILi1105EE4initE_ZN7_stdcmdILi1111EE3runEPPcPi_stdcmd<1111>_ZN7_stdcmdILi1111EE4initE_ZN7_stdcmdILi1117EE3runEPPcPi_stdcmd<1117>_ZN7_stdcmdILi1117EE4initE_ZN7_stdcmdILi1119EE3runEPiS1__stdcmd<1119>_ZN7_stdcmdILi1119EE4initE_ZN7_stdcmdILi1120EE3runEPiS1__stdcmd<1120>_ZN7_stdcmdILi1120EE4initE_ZN7_stdcmdILi1121EE3runEPfS1__stdcmd<1121>_ZN7_stdcmdILi1121EE4initE_ZN7_stdcmdILi1122EE3runEPfS1__stdcmd<1122>_ZN7_stdcmdILi1122EE4initE_ZN7_stdcmdILi1123EE3runEPf_stdcmd<1123>_ZN7_stdcmdILi1123EE4initE_ZN7_stdcmdILi1124EE3runEPf_stdcmd<1124>_ZN7_stdcmdILi1124EE4initE_ZN7_stdcmdILi1125EE3runEPf_stdcmd<1125>_ZN7_stdcmdILi1125EE4initE_ZN7_stdcmdILi1126EE3runEPf_stdcmd<1126>_ZN7_stdcmdILi1126EE4initE_ZN7_stdcmdILi1127EE3runEPf_stdcmd<1127>_ZN7_stdcmdILi1127EE4initE_ZN7_stdcmdILi1128EE3runEPf_stdcmd<1128>_ZN7_stdcmdILi1128EE4initE_ZN7_stdcmdILi1129EE3runEPf_stdcmd<1129>_ZN7_stdcmdILi1129EE4initE_ZN7_stdcmdILi1130EE3runEPfS1__stdcmd<1130>_ZN7_stdcmdILi1130EE4initE_ZN7_stdcmdILi1131EE3runEPf_stdcmd<1131>_ZN7_stdcmdILi1131EE4initE_ZN7_stdcmdILi1132EE3runEPf_stdcmd<1132>_ZN7_stdcmdILi1132EE4initE_ZN7_stdcmdILi1133EE3runEPf_stdcmd<1133>_ZN7_stdcmdILi1133EE4initE_ZN7_stdcmdILi1134EE3runEPf_stdcmd<1134>_ZN7_stdcmdILi1134EE4initE_ZN7_stdcmdILi1140EE3runEPPcPi_stdcmd<1140>_ZN7_stdcmdILi1140EE4initE_ZN7_stdcmdILi1146EE3runEPPcPi_stdcmd<1146>_ZN7_stdcmdILi1146EE4initE_ZN7_stdcmdILi1152EE3runEPPcPi_stdcmd<1152>_ZN7_stdcmdILi1152EE4initE_ZN7_stdcmdILi1158EE3runEPPcPi_stdcmd<1158>_ZN7_stdcmdILi1158EE4initE_ZN7_stdcmdILi1170EE3runEPPcPi_stdcmd<1170>_ZN7_stdcmdILi1170EE4initE_ZN7_stdcmdILi1185EE3runEPiPPcS1__stdcmd<1185>_ZN7_stdcmdILi1185EE4initE_ZN7_stdcmdILi1186EE3runEPfPPcPi_stdcmd<1186>_ZN7_stdcmdILi1186EE4initE_ZN7_stdcmdILi1187EE3runEPcPS1_Pi_stdcmd<1187>_ZN7_stdcmdILi1187EE4initE_ZN7_stdcmdILi1189EE3runEPiS1__stdcmd<1189>_ZN7_stdcmdILi1189EE4initE_ZN7_stdcmdILi1190EE3runEPcS1__stdcmd<1190>_ZN7_stdcmdILi1190EE4initE_ZN7_stdcmdILi1191EE3runEPcS1__stdcmd<1191>_ZN7_stdcmdILi1191EE4initE_ZN7_stdcmdILi1192EE3runEPcS1__stdcmd<1192>_ZN7_stdcmdILi1192EE4initE_ZN7_stdcmdILi1193EE3runEPcS1__stdcmd<1193>_ZN7_stdcmdILi1193EE4initE_ZN7_stdcmdILi1194EE3runEPcS1__stdcmd<1194>_ZN7_stdcmdILi1194EE4initE_ZN7_stdcmdILi1195EE3runEPcS1__stdcmd<1195>_ZN7_stdcmdILi1195EE4initE_ZN7_stdcmdILi1196EE3runEPcS1__stdcmd<1196>_ZN7_stdcmdILi1196EE4initE_ZN7_stdcmdILi1197EE3runEPc_stdcmd<1197>_ZN7_stdcmdILi1197EE4initE_ZN7_stdcmdILi1198EE3runEPc_stdcmd<1198>_ZN7_stdcmdILi1198EE4initE_ZN7_stdcmdILi1199EE3runEPcS1__stdcmd<1199>_ZN7_stdcmdILi1199EE4initE_ZN7_stdcmdILi1200EE3runEPc_stdcmd<1200>_ZN7_stdcmdILi1200EE4initE_ZN7_stdcmdILi1226EE3runEPcS1_S1__stdcmd<1226>_ZN7_stdcmdILi1226EE4initEconlineslineouttimecline_ZN6vectorI5clineEaSERKS1__ZN6vectorI5clineE3addERKS0__ZN6vectorI5clineE3addEv_ZN6vectorI5clineE3dupEv_ZN6vectorI5clineE4moveERS1__ZNK6vectorI5clineE7inrangeEm_ZNK6vectorI5clineE7inrangeEi_ZN6vectorI5clineE3popEv_ZN6vectorI5clineE4lastEv_ZN6vectorI5clineE4dropEv_ZNK6vectorI5clineE5emptyEv_ZNK6vectorI5clineE8capacityEv_ZNK6vectorI5clineE6lengthEv_ZN6vectorI5clineEixEi_ZNK6vectorI5clineEixEi_ZN6vectorI5clineE6shrinkEi_ZN6vectorI5clineE7setsizeEi_ZN6vectorI5clineE14deletecontentsEv_ZN6vectorI5clineE12deletearraysEv_ZN6vectorI5clineE6getbufEv_ZNK6vectorI5clineE6getbufEv_ZNK6vectorI5clineE5inbufEPKS0__ZN6vectorI5clineE7growbufEi_ZN6vectorI5clineE7reserveEidatabuf_ZN6vectorI5clineE7advanceEi_ZN6vectorI5clineE6addbufERK7databufIS0_E_ZN6vectorI5clineE3padEi_ZN6vectorI5clineE3putERKS0__ZN6vectorI5clineE3putEPKS0_i_ZN6vectorI5clineE6removeEii_ZN6vectorI5clineE6removeEi_ZN6vectorI5clineE15removeunorderedEi_ZN6vectorI5clineE9removeobjERKS0__ZN6vectorI5clineE15replacewithlastERKS0__ZN6vectorI5clineE6insertEiRKS0__ZN6vectorI5clineE6insertEiPKS0_i_ZN6vectorI5clineE7reverseEv_ZN6vectorI5clineE10heapparentEi_ZN6vectorI5clineE9heapchildEi_ZN6vectorI5clineE9buildheapEv_ZN6vectorI5clineE6upheapEi_ZN6vectorI5clineE7addheapERKS0__ZN6vectorI5clineE8downheapEi_ZN6vectorI5clineE10removeheapEvvectorcommandmilliscommandbufstringcommandactioncommandpromptcommandpostotalmillismaxconerrorssomevarbufnest_ZL7bufnestretidx_ZL6retidxretbuf_ZL6retbufstate_ZL5stateleft_ZL4left_ZL4nextID_VARID_FVARID_SVARID_COMMANDID_CCOMMANDID_ALIASNO_OVERRIDEOVERRIDDENIDF_PERSISTIDF_OVERRIDEIDF_HEXIDF_READONLYCON_INFOCON_WARNCON_ERRORCON_DEBUGCON_INITCON_ECHOCHUNKSIZEOVERREADOVERWROTEstringformatter_ZN15stringformatterclEPKczoperator()_ZN6vectorIPcEaSERKS1__ZN6vectorIPcE3addERKS0__ZN6vectorIPcE3addEv_ZN6vectorIPcE3dupEv_ZN6vectorIPcE4moveERS1__ZNK6vectorIPcE7inrangeEm_ZNK6vectorIPcE7inrangeEi_ZN6vectorIPcE3popEv_ZN6vectorIPcE4lastEv_ZN6vectorIPcE4dropEv_ZNK6vectorIPcE5emptyEv_ZNK6vectorIPcE8capacityEv_ZNK6vectorIPcE6lengthEv_ZN6vectorIPcEixEi_ZNK6vectorIPcEixEi_ZN6vectorIPcE6shrinkEi_ZN6vectorIPcE7setsizeEi_ZN6vectorIPcE14deletecontentsEv_ZN6vectorIPcE12deletearraysEv_ZN6vectorIPcE6getbufEv_ZNK6vectorIPcE6getbufEv_ZNK6vectorIPcE5inbufEPKS0__ZN6vectorIPcE7growbufEi_ZN6vectorIPcE7reserveEidatabuf_ZN6vectorIPcE7advanceEi_ZN6vectorIPcE6addbufERK7databufIS0_E_ZN6vectorIPcE3padEi_ZN6vectorIPcE3putERKS0__ZN6vectorIPcE3putEPKS0_i_ZN6vectorIPcE6removeEii_ZN6vectorIPcE6removeEi_ZN6vectorIPcE15removeunorderedEi_ZN6vectorIPcE9removeobjERKS0__ZN6vectorIPcE15replacewithlastERKS0__ZN6vectorIPcE6insertEiRKS0__ZN6vectorIPcE6insertEiPKS0_i_ZN6vectorIPcE7reverseEv_ZN6vectorIPcE10heapparentEi_ZN6vectorIPcE9heapchildEi_ZN6vectorIPcE9buildheapEv_ZN6vectorIPcE6upheapEi_ZN6vectorIPcE7addheapERKS0__ZN6vectorIPcE8downheapEi_ZN6vectorIPcE10removeheapEvvectorstddecltype(nullptr)nullptr_t__2long intptrdiff_tdiv_tquotremldiv_tlong long intlldiv_tatofdoubleatoiatolatollstrtodstrtofstrtoldlong doublestrtolstrtollstrtoulstrtoulllong long unsigned intrandsrandcallocfreemallocreallocabortatexitexit_Exitgetenvsystembsearchqsort_Z3abseabslabsllabs_Z3divxxdivldivlldivmblenmbtowcwchar_twctombmbstowcswcstombs~chainchunk~chain~hashtableentryUdatabuf_Z11exchangestrPcPKcexchangestr_Z9newstringPKcnewstring_Z10clearstackR5identclearstack_Z13clear_commandvclear_command_Z13clearoverrideR5identclearoverride_Z14clearoverridesvclearoverrides_Z9pushidentR5identPcpushident_Z8popidentR5identpopident_Z8newidentPKcnewident_ZN5identC2EiPKcPci_ZN5identD2Ev_Z5pushaPKcPcpusha_Z4pushPcS_push_Z3popPc_Z8resetvarPcresetvar_Z7conoutfiPKczconoutf__cxx_global_var_init_Z10addcommandPKcPFvvES0_addcommand__cxx_global_var_init.4__cxx_global_var_init.7_Z6aliasaPKcPcaliasa_Z5aliasPKcS0_alias__cxx_global_var_init.10_Z8variablePKciiiPiPFvvEivariable_ZN9hashtableIPKc5identEC2Ei_ZN5identC2EiPKciiiPiPvi_Z9fvariablePKcfffPfPFvvEifvariable_ZN5identC2EiPKcfffPfPvi_Z9svariablePKcS0_PPcPFvvEisvariable_ZN5identC2EiPKcPcPS2_Pvi_Z6setvarPKcibbsetvar_ZL3maxIiET_S0_S0_max_ZL3minIiET_S0_S0_min_Z7setfvarPKcfbbsetfvar_ZL3maxIfET_S0_S0_max_ZL3minIfET_S0_S0_min_Z7setsvarPKcS0_bsetsvar_Z6getvarPKcgetvar_Z9getvarminPKcgetvarmin_Z9getvarmaxPKcgetvarmax_Z11identexistsPKcidentexists_Z8getidentPKcgetident_Z8touchvarPKctouchvar_Z8getaliasPKcgetalias_Z13setvarcheckedP5identisetvarchecked_Z14setfvarcheckedP5identfsetfvarchecked_Z8floatstrffloatstr_Z14setsvarcheckedP5identPKcsetsvarchecked_ZN5identC2EiPKcS1_PvS2_i_Z8addidentPKcP5identaddident__cxx_global_var_init.17_ZN6vectorIPS_IcEEC2Ev__cxx_global_array_dtor_ZN6vectorIPS_IcEED2Ev_Z10parsemacroRPKciR6vectorIcEparsemacro_Z8parseexpRPKciparseexp_ZN6vectorIcEC2Ev__cxx_global_array_dtor.18_ZN6vectorIcED2Ev_Z11parsestringPKcparsestring_Z12escapestringPcPKcS1_escapestring_Z10executeretPKcexecuteret_Z9newstringPKcm_Z6lookupPclookup_Z6intstriintstr_Z9parsewordRPKciRiparseword_Z9newstringm_Z4concPPcibconc__cxx_global_var_init.26_ZL9isintegerPcisinteger_ZL8parseintPKcparseint_ZL10parsefloatPKcparsefloat_Z5fatalPKczfatal_Z7conoutfPKcz_Z6strchrUa9enable_ifIXLb1EEEPcistrchr_ZN6vectorIP5identEC2Ev__cxx_global_array_dtor.38_ZN6vectorIP5identED2Ev_ZN15stringformatterC2EPc_Z7executePKcexecute_Z6intretiintret_Z8floatretffloatret__cxx_global_var_init.43__cxx_global_var_init.46_Z6resultPKcresult__cxx_global_var_init.48__cxx_global_var_init.52__cxx_global_var_init.55_Z6concatPKcconcat_Z10concatwordPPcPiconcatword_Z6formatPPcPiformat_Z11explodelistPKcR6vectorIPcEexplodelist_Z9indexlistPKciindexlist_Z7listlenPKclistlen_Z2atPcPiat_Z6substrPcPiS_substr_Z9getalias_Pcgetalias___cxx_global_var_init.60__cxx_global_var_init.63__cxx_global_var_init.65__cxx_global_var_init.68__cxx_global_var_init.70__cxx_global_var_init.73__cxx_global_var_init.75__cxx_global_var_init.77_Z8looplistPKcS0_S0_blooplist_Z10prettylistPKcS0_prettylist__cxx_global_var_init.79_Z12listincludesPKcS0_ilistincludes_Z7listdelPKcS0_listdel__cxx_global_var_init.81__cxx_global_var_init.83__cxx_global_var_init.85__cxx_global_var_init.87__cxx_global_var_init.89__cxx_global_var_init.92__cxx_global_var_init.94__cxx_global_var_init.96__cxx_global_var_init.99__cxx_global_var_init.101__cxx_global_var_init.103__cxx_global_var_init.105__cxx_global_var_init.107__cxx_global_var_init.109__cxx_global_var_init.111__cxx_global_var_init.113__cxx_global_var_init.115__cxx_global_var_init.117__cxx_global_var_init.119__cxx_global_var_init.121__cxx_global_var_init.123__cxx_global_var_init.125__cxx_global_var_init.127__cxx_global_var_init.129__cxx_global_var_init.132__cxx_global_var_init.134__cxx_global_var_init.136__cxx_global_var_init.138__cxx_global_var_init.140__cxx_global_var_init.142__cxx_global_var_init.144__cxx_global_var_init.146__cxx_global_var_init.148__cxx_global_var_init.150__cxx_global_var_init.152__cxx_global_var_init.154__cxx_global_var_init.156__cxx_global_var_init.158_Z4fmodfffmod__cxx_global_var_init.160_Z3sinfsin__cxx_global_var_init.163_Z3cosfcos__cxx_global_var_init.165_Z3tanftan__cxx_global_var_init.167_Z4asinfasin__cxx_global_var_init.169_Z4acosfacos__cxx_global_var_init.171_Z4atanfatan__cxx_global_var_init.173_Z4sqrtfsqrt__cxx_global_var_init.175_Z3powffpow__cxx_global_var_init.177_Z3logflog__cxx_global_var_init.179__cxx_global_var_init.181_Z5log10flog10__cxx_global_var_init.183_Z3expfexp__cxx_global_var_init.185__cxx_global_var_init.187__cxx_global_var_init.189__cxx_global_var_init.191__cxx_global_var_init.193__cxx_global_var_init.195__cxx_global_var_init.198__cxx_global_var_init.201__cxx_global_var_init.204_Z8randomMTvrandomMT__cxx_global_var_init.206__cxx_global_var_init.208__cxx_global_var_init.210__cxx_global_var_init.212__cxx_global_var_init.214__cxx_global_var_init.216__cxx_global_var_init.218__cxx_global_var_init.220__cxx_global_var_init.223__cxx_global_var_init.225_Z6strstrUa9enable_ifIXLb1EEEPcPKcstrstr__cxx_global_var_init.227_Z10strreplacePKcS0_S0_strreplace_Z6strstrUa9enable_ifIXLb1EEEPKcS0___cxx_global_var_init.229__cxx_global_var_init.231_ZN6vectorI5clineEC2Ev__cxx_global_array_dtor.232_ZN6vectorI5clineED2Ev__cxx_global_var_init.233_Z10var_maxconvvar_maxcon_Z7conlineiPKcconline_Z10copystringPcPKcmcopystring_Z8conoutfviPKcPvconoutfv_Z13vformatstringPcPKcPvivformatstring_Z6seedMTjseedMT_Z8reloadMTvreloadMT__cxx_global_var_init.235main_ZN5identD0Ev_Z15__libcpp_strchrPKci__libcpp_strchr_Z15__libcpp_strstrPKcS0___libcpp_strstr_ZN7hashsetI14hashtableentryIPKc5identEE10chainchunkD2Ev_ZN7hashsetI14hashtableentryIPKc5identEE5chainD2Ev_ZN14hashtableentryIPKc5identED2Ev_ZL6hthashPKchthash_ZL5htcmpIcPKc5identEbPKT_RK14hashtableentryIT0_T1_Ehtcmp_ZL5htcmpPKcS0_htcmp_ZN7hashsetI14hashtableentryIPKc5identEE10chainchunkC2Ev_ZN7hashsetI14hashtableentryIPKc5identEE5chainC2Ev_ZN14hashtableentryIPKc5identEC2Ev_ZN5identC2Ev_ZN7hashsetI14hashtableentryIPKc5identEEC2Ei_ZN7databufIcEC2IiEEPcT__GLOBAL__sub_I_src.cppnoidtmpenumcthischatargs__builtin_va_listva_listfmtbvmaxcurminxmdoclampdofuncstrpescapewordbuflevelretsubrightbrakendsrcdststartewnstorargnameMAXWORDSretvalcontnumargsinfixrvwncargswasoverridingwasexecutingjlargwordspacermsgap__c__scondbodyvarelemsposoffsetcountsearchlistconjneedlelenneedledel__lcpp_y__lcpp_xy__s2__s1oldvalnewvaloldlenfoundclsfdseedp0p2pMs1s0nextchunkkchunkszolennewbufnumvalsvalsæjnameÞjê __cxa_atexitexittime__wasi_fd_writeabortemscripten_get_sbrk_ptremscripten_resize_heapemscripten_memcpy_big__wasm_call_ctors exchangestr(char*, char const*) newstring(char const*) %newstring(char const*, unsigned long) clearoverride(ident&) pushident(ident&, char*)popident(ident&)newident(char const*)9hashtable::access(char const* const&)*ident::ident(int, char const*, char*, int)Ghashtable::access(char const* const&, ident const&)ident::~ident()hthash(char const*)\bool htcmp(char const*, hashtableentry const&)Ghashtable::insert(char const* const&, unsigned int)ident::operator=(ident const&)pusha(char const*, char*)push(char*, char*) pop(char*)resetvar(char*)conoutf(int, char const*, ...)!conoutfv(int, char const*, void*)__cxx_global_var_init0addcommand(char const*, void (*)(), char const*) -hashtable::hashtable(int)!>ident::ident(int, char const*, char const*, void*, void*, int)"__cxx_global_var_init.4#__cxx_global_var_init.7$aliasa(char const*, char*)%alias(char const*, char const*)&__cxx_global_var_init.10';variable(char const*, int, int, int, int*, void (*)(), int)(?ident::ident(int, char const*, int, int, int, int*, void*, int)):hashset >::hashset(int)*int min(int, int)+int max(int, int),float min(float, float)-float max(float, float).getvar(char const*)/getalias(char const*)0setvarchecked(ident*, int)1setfvarchecked(ident*, float)2floatstr(float)3'stringformatter::stringformatter(char*)4-stringformatter::operator()(char const*, ...)5#setsvarchecked(ident*, char const*)6__cxx_global_var_init.177vector*>::vector()8__cxx_global_array_dtor9 vector*>::~vector():"vector*>::shrink(int);,parsemacro(char const*&, int, vector&)<vector::add(char const&)=parseexp(char const*&, int)>vector::vector()?__cxx_global_array_dtor.18@vector::setsize(int)Avector::getbuf()Bvector::growbuf(int)C%vector*>::length() constD0vector*>::add(vector* const&)E&vector*>::operator[](int)F#vector::put(char const*, int)Gparsestring(char const*)Hvector::pop()Iexecuteret(char const*)Jvector::length() constKvector::~vector()Lvector::shrink(int)M-escapestring(char*, char const*, char const*)N#vector*>::growbuf(int)Ovector::reserve(int)P$databuf::put(char const*, int)Q*vector::addbuf(databuf const&)R"parseword(char const*&, int, int&)Sisinteger(char*)Tparseint(char const*)Uparsefloat(char const*)Vconc(char**, int, bool)Wfatal(char const*, ...)Xconoutf(char const*, ...)Y#strchr(char*, int) [enable_if:true]Zvector::vector()[__cxx_global_array_dtor.38\vector::length() const]"vector::add(ident* const&)^vector::operator[](int)_newstring(unsigned long)`-copystring(char*, char const*, unsigned long)a lookup(char*)b intstr(int)c__cxx_global_var_init.26d-vformatstring(char*, char const*, void*, int)e!__libcpp_strchr(char const*, int)fvector::~vector()gvector::shrink(int)hvector::growbuf(int)iexecute(char const*)j intret(int)kfloatret(float)l__cxx_global_var_init.43m&_stdcmd<849>::run(char*, char*, char*)n__cxx_global_var_init.46o&_stdcmd<850>::run(char*, char*, char*)presult(char const*)q__cxx_global_var_init.48r%_stdcmd<863>::run(char*, int*, char*)s__cxx_global_var_init.52t,_stdcmd<877>::run(char*, int*, char*, char*)u__cxx_global_var_init.55v_stdcmd<878>::run(char*, char*)wconcat(char const*)xconcatword(char**, int*)yformat(char**, int*)zindexlist(char const*, int){listlen(char const*)|at(char*, int*)}substr(char*, int*, char*)~getalias_(char*)__cxx_global_var_init.60€__cxx_global_var_init.63__cxx_global_var_init.65‚__cxx_global_var_init.68ƒ__cxx_global_var_init.70„__cxx_global_var_init.73…__cxx_global_var_init.75†_stdcmd<976>::run(char*)‡__cxx_global_var_init.77ˆ5looplist(char const*, char const*, char const*, bool)‰$prettylist(char const*, char const*)Š__cxx_global_var_init.79‹+listincludes(char const*, char const*, int)Œ!listdel(char const*, char const*)vector::empty() constŽ__cxx_global_var_init.81 _stdcmd<1073>::run(char*, char*)__cxx_global_var_init.83‘ _stdcmd<1074>::run(char*, char*)’__cxx_global_var_init.85“'_stdcmd<1075>::run(char*, char*, char*)”__cxx_global_var_init.87•'_stdcmd<1076>::run(char*, char*, char*)–__cxx_global_var_init.89—_stdcmd<1078>::run(int*, int*)˜__cxx_global_var_init.92™_stdcmd<1079>::run(int*, int*)š__cxx_global_var_init.94›_stdcmd<1080>::run(int*, int*)œ__cxx_global_var_init.96"_stdcmd<1081>::run(float*, float*)ž__cxx_global_var_init.99Ÿ"_stdcmd<1082>::run(float*, float*) __cxx_global_var_init.101¡"_stdcmd<1083>::run(float*, float*)¢__cxx_global_var_init.103£_stdcmd<1084>::run(int*, int*)¤__cxx_global_var_init.105¥_stdcmd<1085>::run(int*, int*)¦__cxx_global_var_init.107§_stdcmd<1086>::run(int*, int*)¨__cxx_global_var_init.109©_stdcmd<1087>::run(int*, int*)ª__cxx_global_var_init.111«_stdcmd<1088>::run(int*, int*)¬__cxx_global_var_init.113­_stdcmd<1089>::run(int*, int*)®__cxx_global_var_init.115¯"_stdcmd<1090>::run(float*, float*)°__cxx_global_var_init.117±"_stdcmd<1091>::run(float*, float*)²__cxx_global_var_init.119³"_stdcmd<1092>::run(float*, float*)´__cxx_global_var_init.121µ"_stdcmd<1093>::run(float*, float*)¶__cxx_global_var_init.123·"_stdcmd<1094>::run(float*, float*)¸__cxx_global_var_init.125¹"_stdcmd<1095>::run(float*, float*)º__cxx_global_var_init.127»_stdcmd<1096>::run(int*, int*)¼__cxx_global_var_init.129½_stdcmd<1097>::run(int*)¾__cxx_global_var_init.132¿_stdcmd<1098>::run(int*, int*)À__cxx_global_var_init.134Á_stdcmd<1099>::run(int*, int*)Â__cxx_global_var_init.136Ã_stdcmd<1100>::run(int*)Ä__cxx_global_var_init.138Å_stdcmd<1101>::run(int*, int*)Æ__cxx_global_var_init.140Ç_stdcmd<1102>::run(int*, int*)È__cxx_global_var_init.142É_stdcmd<1103>::run(int*, int*)Ê__cxx_global_var_init.144Ë_stdcmd<1104>::run(int*, int*)Ì__cxx_global_var_init.146Í_stdcmd<1105>::run(int*, int*)Î__cxx_global_var_init.148Ï _stdcmd<1111>::run(char**, int*)Ð__cxx_global_var_init.150Ñ _stdcmd<1117>::run(char**, int*)Ò__cxx_global_var_init.152Ó_stdcmd<1119>::run(int*, int*)Ô__cxx_global_var_init.154Õ_stdcmd<1120>::run(int*, int*)Ö__cxx_global_var_init.156×"_stdcmd<1121>::run(float*, float*)Ø__cxx_global_var_init.158Ù"_stdcmd<1122>::run(float*, float*)Úfmod(float, float)Û__cxx_global_var_init.160Ü_stdcmd<1123>::run(float*)Ý sin(float)Þ__cxx_global_var_init.163ß_stdcmd<1124>::run(float*)à cos(float)á__cxx_global_var_init.165â_stdcmd<1125>::run(float*)ã tan(float)ä__cxx_global_var_init.167å_stdcmd<1126>::run(float*)æ asin(float)ç__cxx_global_var_init.169è_stdcmd<1127>::run(float*)é acos(float)ê__cxx_global_var_init.171ë_stdcmd<1128>::run(float*)ì atan(float)í__cxx_global_var_init.173î_stdcmd<1129>::run(float*)ï sqrt(float)ð__cxx_global_var_init.175ñ"_stdcmd<1130>::run(float*, float*)òpow(float, float)ó__cxx_global_var_init.177ô_stdcmd<1131>::run(float*)õ log(float)ö__cxx_global_var_init.179÷_stdcmd<1132>::run(float*)ø__cxx_global_var_init.181ù_stdcmd<1133>::run(float*)ú log10(float)û__cxx_global_var_init.183ü_stdcmd<1134>::run(float*)ý exp(float)þ__cxx_global_var_init.185ÿ _stdcmd<1140>::run(char**, int*)€__cxx_global_var_init.187 _stdcmd<1146>::run(char**, int*)‚__cxx_global_var_init.189ƒ _stdcmd<1152>::run(char**, int*)„__cxx_global_var_init.191… _stdcmd<1158>::run(char**, int*)†__cxx_global_var_init.193‡ _stdcmd<1170>::run(char**, int*)ˆ__cxx_global_var_init.195‰&_stdcmd<1185>::run(int*, char**, int*)Š__cxx_global_var_init.198‹(_stdcmd<1186>::run(float*, char**, int*)Œ__cxx_global_var_init.201'_stdcmd<1187>::run(char*, char**, int*)Ž__cxx_global_var_init.204_stdcmd<1189>::run(int*, int*) randomMT()‘ reloadMT()’__cxx_global_var_init.206“ _stdcmd<1190>::run(char*, char*)”__cxx_global_var_init.208• _stdcmd<1191>::run(char*, char*)–__cxx_global_var_init.210— _stdcmd<1192>::run(char*, char*)˜__cxx_global_var_init.212™ _stdcmd<1193>::run(char*, char*)š__cxx_global_var_init.214› _stdcmd<1194>::run(char*, char*)œ__cxx_global_var_init.216 _stdcmd<1195>::run(char*, char*)ž__cxx_global_var_init.218Ÿ _stdcmd<1196>::run(char*, char*) __cxx_global_var_init.220¡_stdcmd<1197>::run(char*)¢__cxx_global_var_init.223£_stdcmd<1198>::run(char*)¤__cxx_global_var_init.225¥ _stdcmd<1199>::run(char*, char*)¦+strstr(char*, char const*) [enable_if:true]§)__libcpp_strstr(char const*, char const*)¨__cxx_global_var_init.227©_stdcmd<1200>::run(char*)ª1strreplace(char const*, char const*, char const*)«1strstr(char const*, char const*) [enable_if:true]¬__cxx_global_var_init.229­'_stdcmd<1226>::run(char*, char*, char*)®__cxx_global_var_init.231¯vector::vector()°__cxx_global_array_dtor.232±vector::~vector()²vector::shrink(int)³__cxx_global_var_init.233´ var_maxcon()µvector::length() const¶vector::pop()·conline(int, char const*)¸(vector::insert(int, cline const&)¹ vector::add(cline const&)ºseedMT(unsigned int)»__cxx_global_var_init.235¼__original_main½ident::~ident()¾ident::changed()¿htcmp(char const*, char const*)ÀBhashset >::insert(unsigned int)ÁFhashset >::chainchunk::chainchunk() >::chain::chain()Ã4hashtableentry::hashtableentry()Äident::ident()Åvector*>::drop()Ævector::drop()Ç'databuf::databuf(char*, int)Èdatabuf::length() constÉvector::advance(int)Êvector::drop()Ëvector::drop()Ìvector::growbuf(int)Í_GLOBAL__sub_I_src.cppÎmainÏstrchrÐstrstrÑtwobyte_strstrÒthreebyte_strstrÓfourbyte_strstrÔ twoway_strstrÕstrlenÖstrcspn×memcmpØstrcmpÙ __strchrnulÚstrncpyÛmemchrÜstrncmpÝstrspnÞ __stpncpyß__stpcpyàstrcpyástrcatâ__shlimã__shgetcä __intscanåstrtoxæstrtolç __floatscanèhexfloatédecfloatêscanexpëstrtoxìstrtodífabsîscalbnlï copysignlðisdigitñisalnumòisspaceóisalphaô__errno_locationõputsöfputs÷ __towriteø __fwritexùfwriteú__emscripten_stdout_closeû__emscripten_stdout_seekü __lockfileý __unlockfileþiprintfÿ vsnprintf€sn_write vsniprintf‚siprintfƒ __overflow„ pthread_self…wcrtomb†__pthread_self‡wctombˆfrexp‰__vfprintf_internalŠ printf_core‹outŒgetintpop_argŽpadfmt_ofmt_x‘fmt_u’vfprintf“fmt_fp”pop_arg_long_double• __DOUBLE_BITS– vfiprintf— __stdio_write˜ vsiprintf™__toreadš__uflow›__wasi_syscall_retœ__addtf3 __ashlti3ž__letf2Ÿ__getf2 __eqtf2¡__netf2¢__divtf3£ __extenddftf2¤ __extendsftf2¥ __floatsitf¦ __floatunsitf§ __lshrti3¨__multf3©__multi3ª__subtf3« __trunctfdf2¬__cosdf­__sindf®floor¯__rem_pio2_large° __rem_pio2f±cosf²sinf³__tandf´tanfµsqrtf¶acosf·fabsf¸sqrt¹asinfºatanf»scalbnf¼expf½logf¾powf¿operator new(unsigned long)Àoperator new[](unsigned long)Áoperator delete(void*)Âoperator delete[](void*)Ã__cxa_guard_acquireÄ@__cxxabiv1::(anonymous namespace)::is_initialized(unsigned int*)Å__cxa_guard_releaseÆA__cxxabiv1::(anonymous namespace)::set_initialized(unsigned int*)Çstd::type_info::name() constÈcvoid (*std::__2::(anonymous namespace)::__libcpp_atomic_load(void (* const*)(), int))()Éstd::get_new_handler()Êstd::type_info::~type_info()Ë1__cxxabiv1::__shim_type_info::~__shim_type_info()Ì+__cxxabiv1::__shim_type_info::noop1() constÍ+__cxxabiv1::__shim_type_info::noop2() constÎ3__cxxabiv1::__class_type_info::~__class_type_info()Ï9__cxxabiv1::__si_class_type_info::~__si_class_type_info()Ð @@ Aj" E! E  A j Atj/  A! @@@    K!A! @ AM A! @ A j Atj/  Aj" G !   I! A!A!@A! At A j Atj/k"AH  Aj"AG @ AH E  AG  A! A;A!@ At!  Aj"Atj A jj/ j"; AG @ E A!@@  Atj/"E  Atj" /"Aj;  Atj ; Aj" G @@ AK A! ! !@  A€! Aþ߀€!A¾ß€€!  A! A€å€€!AÀ䀀! A! @ AG A K  @ AG A K  A t"Aj! (!A! !A!A!A!@ k! A!@  Atj/"J @ H Aà!A!   At"j/!  j-!  v!A t!A t"!@   k" jAtj" ;  :  :  A Ajt!@ "Av!  q A j Atj" /Aj"; Aj q jA ! Aj!@ Aÿÿq @ G @ E @@@  A!   q F (! ! A! !   vAtj"A;  : AÀ:A Ajt!@ "Av!  q Aj q jA "  ( Atj6  6    Atj/Atj/! M  q" F  "k!@ O k!A t! ! @  A j Atj/k"AH  At! Aj" j" I ! A! AFA t j"AÓKq  AF AÏKq  (" Atj" :  :   Atj" kAv; !  ("Aj6 AÀ6  ("Aj6 AÀ6 A6 A! s A6¼- A;¸- A6´- A¸jA€€6 Aüj6° A¬jAüÿ€€6 Aˆj6¤ A jAèÿ€€6 A”j6˜ ¸€€€ ”A!A!@ AtjA”jA; Aj"AžG @A! AtjAˆjA; Aj"AG @ AtjAüjA; Aj"AG A6°- B7¨- A6 - A” jA; © /¸- Aÿÿq" (¼-"tr";¸-@@ AH ("Aj6  (j : ("Aj6  (j A¹-j-: A (¼-"kv;¸- Asj!  Aj! 6¼-  º€€€ Í »€€€ A6´- ("Aj6  (j : ("Aj6  (j Av: ("Aj6  (j As": ("Aj6  (j Av:@ E @ -! ("Aj6  (j : Aj! Aj" Ÿ@@@ (¼-"A H ("Aj6  (j -¸-: ("Aj6  (j! A¹-j-!  AH  ("Aj6  (j! -¸-!  : A6¼- A;¸- ¼ /¸-A (¼-"tr";¸-@@ AH ("Aj6  (j : ("Aj6  (j A¹-j-: AA (¼-"kv;¸- Asj!  Aj! 6¼-@@ A H ("Aj6  (j -¸-: ("Aj6  (j A¹-j-: A;¸- (¼-Awj!  Aj! 6¼- ½€€€@ (´- (¼-"kA jAJ /¸-A tr";¸-@@ AH ("Aj6  (j : ("Aj6  (j A¹-j-: AA (¼-"kv;¸- Asj!  Aj! 6¼-@@ A H ("Aj6  (j -¸-: ("Aj6  (j A¹-j-: A;¸- (¼-Awj!  Aj! 6¼- ½€€€ A6´- ´@@@ (¼-"AG ("Aj6  (j -¸-: ("Aj6  (j A¹-j-:A! A;¸-  AH  ("Aj6  (j -¸-: A¹-j-;¸- (¼-Axj! 6¼- éA!@@ („AH @ ("(,AG  ¿€€€6, A˜jÀ€€€ A¤jÀ€€€ Á€€€! (¨-A jAv" (¬-A jAv"  K! Aj!  Aj"! @@ E Aj K   ¹€€€  (¼-!@@  F (ˆAG  /¸- AjAÿÿq" tr";¸-@@ AH ("Aj6  (j : ("Aj6  (j A¹-j-: A (¼-"kv;¸- Asj!  Aj! 6¼- AÀ뀀AÀô€€€€€  /¸- AjAÿÿq" tr";¸-@@ AH ("Aj6  (j : ("Aj6  (j A¹-j-: A (¼-"kv;¸- Asj!  Aj! 6¼- Aœj(Aj A¨j(Aj À€€ A”j Aˆj€€€ ¸€€€@ E »€€€ ¢Aÿ€ÿŸ!A!@@ AqE AtjA”j/E A Av! Aj"A G A!@ A¸j/ A¼j/ AÈj/ A !@@ AtjA”j/ A! Aj"A€F  A!  Å (! ("(! ( ! B€€€€ÐÇ7Ð(A!A!@ AL @@@  Atj"/E (Ð(Aj"6Ð( AtjAÜj 6 jAØ(jA: !  A; Aj" G @ (Ð("AJ @ Aj"6Ð( AtjAÜj Aj"A AH""6  At" jA; jAØ(jA: (¨-Aj6¨-@ E (¬-  j/k6¬-   ! (Ð("AH  6@ AH Am!@  Ä€€€ AJ! Aj!  @ (Ð("Aj6Ð( (à! AÜj" Atj(6à AÄ€€€ (Ô(Aj"6Ô( (à!  Atj 6 (Ô(Aj"6Ô(  Atj 6  Atj  Atj"/  Atj" /j; AØ(j" j  j-"  j-"  IAj:  ; ; 6à AÄ€€€ Aj! (Ð(AJ (Ô(Aj"6Ô( AtjAÜj Aàj(6 Å€€€   A¼jÆ€€€ ’ A”j Aœj(Ç€€€ Aˆj A¨j(Ç€€€ A°jÀ€€€A!@@ Aø€€j-AtjAþj/  AK! Aj!  A! Al (¨-jAj6¨-  ´  @ ( -E A! A¹-j!@ "Aj!  (˜-j-!@@ (¤- Atj/"  Atj"/! /¸- /" (¼-"tr";¸-@ A kL ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸-  jApj6¼-   j6¼-  AÀ退j-" At" A€r j"Aj/! /¸- Aj/" (¼-"tr" ;¸-@@ A kL ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸-  jApj!   j! 6¼-@ AxjAK /¸-  A°ø€€j(kAÿÿq" tr" ;¸-@@ A AÀõ€€j("kL ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸-  jApj!   j! 6¼-  Aj" AvA€j A€IAÀ倀j-"At" j"/! /¸- /" (¼-"tr" ;¸-@@ A kL ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸-  jApj!   j! 6¼- A|jAK /¸-  A°ù€€j(kAÿÿq" tr";¸-@@ A AÀö€€j("kL ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸-  jApj!   j! 6¼-  ( -I A‚j/! /¸- /€" (¼-"tr";¸-@@ A kL ("Aj6  (j : ("Aj6  (j A¹-j-: A (¼-"kv;¸-  jApj!   j! 6¼- /‚6´-  /¸- AÿýjAÿÿq" (¼-"tr";¸-@@ A H ("Aj6  (j : ("Aj6  (j A¹-j-: A (¼-"kv;¸- Auj!  Aj! 6¼- /¸- AjAÿÿq" tr";¸-@@ A H ("Aj6  (j : ("Aj6  (j A¹-j-: A (¼-"kv;¸- Auj!  Aj! 6¼- /¸- AüÿjAÿÿq" tr";¸-@@ A H ("Aj6  (j : ("Aj6  (j A¹-j-: A (¼-"kv;¸- Atj!  Aj! 6¼-@ AH A! A¹-j!@ /¸- Aø€€j-AtjAþj/" (¼-"tr";¸-@@ AH ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸- Asj!  Aj! 6¼- Aj" G A”j AjÈ€€€ Aˆj AjÈ€€€ ß  AtjAÜj(!@@ At" (Ð("L !  jAØ(j!  Atj! AÜj! AØ(j! @@@  H !  @  Ar"Atj(" Atj/"  Atj(" Atj/" I @  F !  ! j- j-K  ! @ /"  AtjAÜj("Atj/" O !  @  G - jAØ(j-K !  AtjAÜj 6 ! At" (Ð("L AtjAÜj 6   (! ("(! (! (! (! (! AÔjB7 AÌjB7 AÄjB7 A¼jB7A!  (Ô(AtjAÜj(AtjA; (Ô("Aj!@@ A»L !  A! @  AtjAÜj(" At" j"  /Atj/"Aj   J" ;  L!@ J AtjA¼j" /Aj;A!@ H  kAtj(!  j /" l (¨-j6¨- E   j/j l (¬-j6¬- j! A½! Aj"A½G @ E AtjA¼j!@ !@ "Aj"AtjA¼j" /" E Aj; AtjA¼j" /Aj;  /Aj; AJ! A~j!  E @ AtjA¼j/! !@@ E  Aj"AtjAÜj(" J @   Atj" /" F  k /l (¨-j6¨- Aj ; Aj! ! Aj" º#€€€€A k"$€€€€A!A!@  At"j Aþÿq  jA~j/jAt"; Aj"AG A!@ AH @@ Atj"/"E  Atj" /"Aj;   É€€€;  G! Aj!  A j$€€€€ â  /! At jAjAÿÿ;A!@ AH AAŠ !AA ! AÀj! AÄj! A¼j! A! A! @ !  " Aj" Atj/!@@ Aj" N G !  @@  N AtjAüj"/ j!  @ E @ F AtjAüj" /Aj; /Aj! !  @ A J /Aj! !  /Aj! !  ;A!@@  A!AŠ!  AA F"!AA ! ! G ì  A!@ AH AA /"!AAŠ ! A¹-j!A!A! @ !  " Aj"Atj/!@@ Aj" N G !  @@ N Atj" Aüj! Aþj!@ /! /¸- /" (¼-"tr";¸-@@ A kL ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸- jApj!   j! 6¼- Aj"  @ E @ F Atj" Aþj/! /¸- Aüj/" (¼-" tr";¸-@@ A kL (" Aj6 (j : (" Aj6 (j -: A (¼-" kv;¸-  jApj!  j! 6¼- ! /¸- /¼" (¼-" tr";¸-@@ A /¾"kL (" Aj6 (j : (" Aj6 (j -: A (¼-" kv;¸-  jApj!  j! 6¼- /¸- AýÿjAÿÿq" tr" ;¸-@ AH (" Aj6 (j : (" Aj6 (j -: A (¼-" kv;¸- Arj6¼-  Aj6¼-  @ A J /¸- /À" (¼-"tr";¸-@@ A /Â" kL ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸- jApj!   j! 6¼- /¸- AþÿjAÿÿq" tr" ;¸-@ AH ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸- Asj6¼-  Aj6¼-  /¸- /Ä" (¼-"tr";¸-@@ A /Æ" kL ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸- jApj!   j! 6¼- /¸- AöÿjAÿÿq" tr" ;¸-@@ A H ("Aj6  (j : ("Aj6  (j -: A (¼-"kv;¸- Awj!  Aj! 6¼- A! @@  AŠ!A!  AA F" !AA ! ! G <A!@  Aqr"At! AJ! Av! Aj!  Aÿÿÿÿq Ü#€€€€AÀk"$€€€€  6  6  6 (! B7(  6@ AjA¨ú€€A8®€€€" @ AjA¯€€€"AF Aj²€€€@ Aj"AM !  A}!@@  ( E  !   (6 Aj²€€€! AÀj$€€€€  AØû€€ AÕ  ló€€€ ô€€€ š !@@ AqE @ - !  !@ Aj"AqE  -E  @ "Aj! ("As AÿýûwjqA€‚„xqE @ Aÿq !  @ -! Aj"!   k Y -!@ -"E  AÿqG @ -! -"E  Aj! Aj!  AÿqF  Aÿqk ‹ AG!@@@@ E AqE Aÿq!@ - F  Aj! Aj"AG! E  Aq E  - AÿqF @@ AI AÿqA‚„l! A|j"Aq! A|q jAj!@ ( s"As AÿýûwjqA€‚„xq  Aj! A|j"AK ! ! E  Aÿq!@ - F  Aj! Aj" A A´„€ A¤€€  —A!@A(àû€€"(LAH Ü€€€! @@ Ö€€€AN A!  @ -KA F (" (O  Aj6 A :A!  A à€€€Au! @ E Ý€€€ "AA Ï€€€" A  Ù€€€G \ -J"Aj r:J@ ("AqE A r6A B7 (,"6 6  (0j6A Ó@@ (" A! ×€€€  (! @  ("k O   ($€€€€ A!@ ,KAH !@ "E  Aj"j-A G   ($€€€€" I   k! j! (! !  ÷€€€  ( j6  j!  g  l!@@ (LAJ  Ø€€€!  Ü€€€!  Ø€€€! E Ý€€€ @ G A  n A B A  >#€€€€Ak"$€€€€  6 A(àû€€ €! Aj$€€€€  7#€€€€Ak"$€€€€  6  €! Aj$€€€€  ¤#€€€€Ak"$€€€€  :@@ (" A! ×€€€  (! @ (" O Aÿq" ,KF Aj6  :  A! AjA ($€€€€AG -! Aj$€€€€  APjA I ­A!@@ E AÿM @@ €(°( A€qA€¿F Ò€€€A6  @ AÿK A?qA€r: AvAÀr:A @@ A€°I A€@qA€ÀG  A?qA€r: A vAàr: AvA?qA€r:A @ A€€|jAÿÿ?K A?qA€r: AvAðr: AvA?qA€r: A vA?qA€r:A Ò€€€A6 A!  :A Ó€€€ @ A A € °#€€€€AÐk"$€€€€  6ÌA! A jAA(ø€€€  (Ì6È@@A  AÈj AÐj A j  怀€AN A!  @ (LAH Ü€€€! (!@ ,JAJ A_q6 A q!@@ (0E  AÈj AÐj A j  怀€!  AÐ60 AÐj6 6 6 (,! 6,  AÈj AÐj A j  怀€! E AA ($€€€€ A60 6, A6 A6 (! A6 A ! (" r6A  A q! E Ý€€€ AÐj$€€€€  ©~#€€€€AÐk"$€€€€  6L A7j! A8j! A! A! A!@@@ AH @ Aÿÿÿÿ kL Ò€€€A=6A!   j! (L" !@@@@@@@@@@@@@@@ -" E @@@@@ Aÿq" !  A%G  ! @ -A%G   Aj"6L Aj! -! ! A%F k!@ E 瀀€   (L,က€!A!A! (L!@ E -A$G ,APj!A! A!   j"6LA! @@ ,"A`j"AM !  !A t"A‰ÑqE @  Aj"6L  r! ,"A`j"AK  !A t"A‰Ñq @@ A*G @@ ,က€E (L"-A$G ,At jAÀ~jA 6 Aj! ,At jA€}j(!A!  A! A!@ E  ("Aj6 (! (LAj!  6L AJ A k! A€Àr!  AÌj耀€"AH  (L! A!@ -A.G @ -A*G @ ,က€E (L"-A$G ,At jAÀ~jA 6 ,At jA€}j(!  Aj"6L  @@ A!   ("Aj6 (!  (LAj"6L   Aj6L AÌj耀€! (L! A!@ !A! ,A¿jA9K   Aj"6L ,! !  A:ljA¿û€€j-"AjAI E @@@@ AG A! AL   AH   Atj 6   Atj)7@ A! E   E  AÀj   退€ (L! Aÿÿ{q" A€Àq! A!Aäû€€! ! Aj,"A_q  AqAF  "A¨j"A M @@@@@ A¿j"AM AÓG  E  (@!    A! A A ꀀ€  A6  )@>  Aj6@A! Aj! A!@@ ("E @ Aj 䀀€"AH"   kK Aj!   j"K   A!  A   ꀀ€@  A!  A! (@!@ (" E  Aj 䀀€" j" J  Aj 瀀€ Aj!  I A   A€Àsꀀ€    J!   Aj"6L -! ! !       !  E A!@@  Atj(" E   Atj  退€A! Aj"A G  A! A O @  Atj( A! AK! Aj!  A!  +@    ƒ€€€! A! (@"Aîû€€ " A Ñ€€€" j ! !  k  !  )@<7A! ! ! !  @ )@"BU B }"7@A!Aäû€€!  @ A€qE A!Aåû€€!  Aæû€€Aäû€€ Aq"!  )@ 뀀€! A!Aäû€€! AqE   k"Aj  J!  A AK! Ar! Aø! )@ A q쀀€! A!Aäû€€! AqE  )@P  AvAäû€€j!A!  A! Aÿq" AK @@@@@@@   (@ 6 (@ 6 (@ ¬7 (@ ;  (@ :  (@ 6  (@ ¬7  A!Aäû€€! )@!  퀀€! Aÿÿ{q AJ! )@!@@  PE A! !   k Pj"  J! ! A   k"   H"j"   H"  ꀀ€  瀀€ A0   A€€sꀀ€ A0  Aꀀ€ 瀀€ A   A€Àsꀀ€  A! AÐj$€€€€  @ -A q   Ø€€€ QA!@ (,က€E @ (",! Aj6  A ljAPj! ,က€  È@ AK Awj"A K @@@@@@@@@@    ("Aj6 (6  ("Aj6 47  ("Aj6 57  (AjAxq"Aj6 )7  ("Aj6 27  ("Aj6 37  ("Aj6 07  ("Aj6 17  (AjAxq"Aj6 )7  €€€ “#€€€€A€k"$€€€€@  L A€Àq    k"A€ A€I"ø€€€@   k!@ A€瀀€ A€~j"AÿK Aÿq!  瀀€ A€j$€€€€ .@ P @ Aj" §AqA0r: Bˆ"BR  8@ P @ Aj" §AqAÐÿ€€j- r: Bˆ"BR  ˆ~@@ B€€€€Z !  @ Aj" B €"B ~}§A0r: BÿÿÿÿŸV! !  @ §"E @ Aj"  A n"A lkA0r: A K! !     AA倀€  (<Ô€€€‚€€€ \#€€€€Ak"$€€€€@@ (<  Aÿq Aj€€€ò€€€ )!  B! B7 Aj$€€€€  ç#€€€€A k"$€€€€  ("6 (!  6  6   k"6  j!A! Aj!@@@@ (< AjA A jƒ€€€ò€€€ @  ( "F  AL  Aj   ("K"" (  A k"j6  ( k6  k! (<   k" A jƒ€€€ò€€€E A6 AG  (,"6 6  (0j6 !  A! A6 B7 (A r6 AF  (k! A j$€€€€  @ A Ò€€€ 6A á6 #€€€€Ak"$€€€€@@@@@ AôK @A(€"A A jAxq A I"Av"v"AqE @@ AsAq j"At"AÀ€j("(" A¸€j"G A A~ wq6€  A( € K  ( G  6  6 Aj!  At"Ar6  j" (Ar6  A(˜€"M @ E @@ tA t"A krq"A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vj"At"AÀ€j("(" A¸€j"G A A~ wq"6€  A( € K  ( G   6  6 Ar6 j" At" k"Ar6 j 6@ E Av"AtA¸€j!A(¤€!@@ A t"q A  r6€ !  A( € ("K   6  6  6  6 Aj!A 6¤€A 6˜€  A(”€" E  A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vjAtAÀ€j("(Axq k! !@@@ (" Aj("E  (Axq k"   I"!  ! ! A( €" K   j" M  (! @@ ( " F ("K  ( G  ( G  6  6  @@ Aj"(" ("E  Aj! @ ! "Aj"(" Aj! (" K  A6  A! @ E @@  ("AtAÀ€j"(G 6  A A~ wq6”€  A( € K  AA ( Fj 6 E  A( €" K   6@ ("E  K   6 6 Aj("E A( € K  Aj 6 6 @@ AK   j"Ar6  j" (Ar6   Ar6 Ar6 j 6@ E Av"AtA¸€j!A(¤€!@@A t" q A  r6€ !  A( € ("K   6  6 6 6 A 6¤€A 6˜€ Aj!  A! A¿K A j"Axq!A(”€"E A! @ Av"E A! AÿÿÿK A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv r rk"At  AjvAqrAj! A k!@@@@ AtAÀ€j(" A!A!  AA Avk AFt!A!A!@@ (Axq k" O ! !  A! ! !  Aj("   AvAqjAj("F !  AGt!  @ r A t"A kr q"E  A kqAj" A vAq"v"AvAq" r  v"AvAq"r v"AvAq"r v"AvAq"r vjAtAÀ€j(! E  @ (Axq k" I!@ (" Aj(!   !  ! !  E A(˜€ kO A( €" K   j" M  (! @@ ( " F ("K  ( G  ( G  6  6  @@ Aj"(" ("E  Aj! @ ! "Aj"(" Aj! (" K  A6  A! @ E @@  ("AtAÀ€j"(G 6  A A~ wq"6”€  A( € K  AA ( Fj 6 E  A( €" K   6@ ("E  K   6 6 Aj("E A( € K  Aj 6 6 @@ AK   j"Ar6  j" (Ar6   Ar6 Ar6 j 6@ AÿK Av"AtA¸€j!@@A(€"A t"q A  r6€ !  A( € ("K  6  6 6 6  @@ Av" A!  A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At  AjvAqrAj! 6 B7 AtAÀ€j!@@@ A t"q A  r6”€  6 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A( € K   6 6 6 6  A( €" ("K   K  6  6 A6 6 6 Aj!  @A(˜€" I A(¤€!@@ k"AI A 6˜€A  j"6¤€  Ar6  j 6  Ar6  AA6¤€AA6˜€  Ar6  j" (Ar6 Aj!  @A(œ€" M A  k"6œ€AA(¨€" j"6¨€  Ar6 Ar6 Aj!  @@A(è€E A(ð€!  AB7ô€AB€ €€€€7ì€A A jApqAتժs6è€AA6ü€AA6Ì€A€ ! A!  A/j"j"A k" q" M A!@A(È€"E A(À€" j" M  K  @@A-Ì€Aq @@@@@A(¨€"E AЀ!@@ (" K  (j K  (" Aö€€€"AF  !@A(ì€"Aj" qE  k  jA kqj!  M  AþÿÿÿK @A(È€"E A(À€" j" M   K  ö€€€" G    k q"AþÿÿÿK  ö€€€" ( (jF  ! !@ A0j M AþÿÿÿK AF  kA(ð€"jA kq"AþÿÿÿK @ ö€€€AF j!  A kö€€€  AG   AG  AA(Ì€Ar6Ì€ AþÿÿÿK  ö€€€"Aö€€€"O  AF  AF  k" A(jM  AA(À€ j"6À€@ A(Ä€M A 6Ä€ @@@@A(¨€"E AЀ!@  (" ("jF  ("  @@A( €"E  O  A 6 € A!A 6Ô€A 6ЀAA6°€AA(è€6´€AA6Ü€@ At"AÀ€j A¸€j"6 AÄ€j 6 Aj"A G A AXj"Ax kAqA AjAq"k"6œ€A  j"6¨€  Ar6  jA(6AA(ø€6¬€  - Aq  M  K  j6A Ax kAqA AjAq"j"6¨€AA(œ€ j" k"6œ€  Ar6  jA(6AA(ø€6¬€  @ A( €"O A 6 € !  j!AЀ!@@@@@ ( F  ("  - AqE  AЀ!@@ (" K  (j" K  (! 6 ( j6 Ax kAqA AjAqj" Ar6 Ax kAqA AjAqj" k k! j!@@  G A 6¨€AA(œ€ j"6œ€  Ar6  @A(¤€ G A 6¤€AA(˜€ j"6˜€  Ar6  j 6  @ (" AqAG @@ AÿK ( !@ (" Av"AtA¸€j"F  K  ( G  @  G AA(€A~ wq6€  @  F  K  ( G   6  6  (! @@ ( " F  ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! ("  K  A6 E @@ ("AtAÀ€j"( G  6  AA(”€A~ wq6”€  A( € K  AA ( Fj 6 E  A( €" K   6@ ("E  K   6  6 ("E A( € K  Aj 6  6 Axq" j!  j!  (A~q6  Ar6  j 6@ AÿK Av"AtA¸€j!@@A(€"A t"q A  r6€ !  A( € ("K  6  6  6  6  A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At AjvAqrAj!  6 B7 AtAÀ€j!@@@A(”€"A t"q A  r6”€  6  6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A( € K   6  6  6  6  A( €" ("K   K  6  6 A6  6  6 Aj!  A AXj"Ax kAqA AjAq"k" 6œ€A  j"6¨€  Ar6  jA(6AA(ø€6¬€  A' kAqA AYjAqjAQj" AjI"A6 AjA)Ø€7 A)Ѐ7A Aj6Ø€A 6Ô€A 6ЀAA6Ü€ Aj!@ A6 Aj! Aj!  K  F  (A~q6   k"Ar6  6@ AÿK Av"AtA¸€j!@@A(€"A t"q A  r6€ !  A( € ("K  6  6  6  6  A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At  AjvAqrAj! B7 Aj 6 AtAÀ€j!@@@A(”€"A t"q A  r6”€  6 Aj 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A( € K   6 Aj 6  6  6  A( €" ("K   K  6  6 AjA6  6  6 A(œ€" M A k"6œ€AA(¨€" j"6¨€  Ar6 Ar6 Aj!  „€€€ Ò€€€A06A! Aj$€€€€ è@@ E Axj"A( €"I  A|j("Aq"AF   Axq"j!@ Aq E   ("k" I   j!@A(¤€ F @ AÿK ( !@ (" Av"AtA¸€j"F  K  ( G  @  G AA(€A~ wq6€  @  F  K  ( G   6  6  (!@@ ( " F  ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! ("  K  A6 E @@ ("AtAÀ€j"( G  6  AA(”€A~ wq6”€  A( € K  AA ( Fj 6 E  A( €" K   6@ ("E  K   6  6 ("E A( € K  Aj 6  6  ("AqAG A 6˜€  A~q6  Ar6  j 6  M  ("AqE @@ Aq @A(¨€ G A 6¨€AA(œ€ j"6œ€  Ar6 A(¤€G AA6˜€AA6¤€ @A(¤€ G A 6¤€AA(˜€ j"6˜€  Ar6  j 6 @@ AÿK ( !@ (" Av"AtA¸€j"F A( € K  ( G  @  G AA(€A~ wq6€  @  F A( € K  ( G   6  6  (!@@ ( " F A( € ("K  ( G  ( G   6  6  @ Aj"(" Aj"(" A!  @ ! "Aj"(" Aj! (" A( € K  A6 E @@ ("AtAÀ€j"( G  6  AA(”€A~ wq6”€  A( € K  AA ( Fj 6 E  A( €" K   6@ ("E  K   6  6 ("E A( € K  Aj 6  6  Axq j"Ar6  j 6 A(¤€G A 6˜€  A~q6  Ar6  j 6 @ AÿK Av"AtA¸€j!@@A(€"A t"q A  r6€ !  A( € ("K  6  6  6  6 A!@ Av"E A! AÿÿÿK  A€þ?jAvAq"t" A€àjAvAq"t" A€€jAvAq"tAv  r rk"At AjvAqrAj! B7 Aj 6 AtAÀ€j!@@@@A(”€"A t"q A  r6”€  6 Aj 6  AA Avk AFt! (!@ "(Axq F  Av! At!  AqjAj"(" A( € K   6 Aj 6  6  6  A( €" ("K   K  6  6 AjA6  6  6 AA(°€Aj"6°€  AØ€!@ ("Aj! AA6°€  „€€€ k~@@ A!  ­ ­~"§!  rA€€I A  B ˆ§AG! @ ó€€€"E A|j-AqE A ø€€€ `@…€€€"(" AjA|qj"AJ Ò€€€A06A @ ?AtM †€€€ Ò€€€A06A  6  •@ A€ÀI  ‡€€€  j!@@  sAq @@ AN !  @ Aq !  !@  -: Aj! Aj" O  Aq @ A|q"AÀI  A@j"K @  (6  (6  (6  ( 6  (6  (6  (6  (6  ( 6  ($6$  ((6(  (,6,  (060  (464  (868  (<6< AÀj! AÀj" M  O @  (6 Aj! Aj" I  @ AO !  @ A|j" O !  !@  -:  -:  -:  -: Aj! Aj" M @  O @  -: Aj! Aj" G ó~@ E  j"Aj : : AI A~j : : A}j : : AI A|j : : A I A kAq"j" AÿqA‚„l"6   kA|q"j"A|j 6 A I  6  6 Axj 6 Atj 6 AI  6  6  6  6 Apj 6 Alj 6 Ahj 6 Adj 6  AqAr"k"A I ­"B † „!  j!@  7  7  7  7 A j! A`j"AK &@A(€‘€ A 6„‘€A 6€‘€ œ‰A€ äwhello, hello!hello%s error: %d compressuncompressbad uncompress uncompress(): %s 1.2.5deflateInitdeflatedeflateEndinflateInitinflateinflateEndbad inflate inflate(): %s deflate not greedy deflate should report Z_STREAM_END large inflatebad large inflate: %ld inflateSyncinflate should report DATA_ERROR after inflateSync(): hel%s deflateSetDictionaryunexpected dictionaryinflate with dictbad inflate with dict inflate with dictionary: %s incompatible zlib version warning: different zlib version (%s, %s) zlib version %s = %d, compile flags = %lu large_inflate(): OKout of memory1.2.5–0w,aîºQ ™Ämôjp5¥c飕dž2ˆÛ¤¸ÜyéÕàˆÙÒ—+L¶ ½|±~-¸ç‘¿d·ò °jHq¹óÞA¾„}ÔÚëäÝmQµÔôÇ…ÓƒV˜lÀ¨kdzùbýìÉeŠO\Ùlcc=úõ È n;^iLäA`Õrqg¢Ñäjm ¨Zjz Ïäÿ “'® ±ž}D“ðÒ£‡hòþÂi]Wb÷Ëge€q6lçknvÔþà+Ó‰ZzÚÌJÝgoß¹ùùホC¾·Õް`è£ÖÖ~“Ñ¡ÄÂØ8RòßOñg»ÑgW¼¦Ýµ?K6²HÚ+ ØL ¯öJ6`zAÃï`ßUßg¨ïŽn1y¾iFŒ³a˃f¼ Òo%6âhR•w ÌG »¹"/&U¾;ºÅ( ½²’Z´+j³\§ÿ×Â1Ïе‹žÙ,®Þ[°Âd›&òc윣ju “m© œ?6ë…grW‚J¿•z¸â®+±{8¶ ›ŽÒ’ ¾Õå·ïÜ|!ßÛ ÔÒÓ†BâÔñø³ÝhnƒÚ;[&¹öáw°owG·æZˆpjÿÊ;f\ ÿžei®bøÓÿkaEÏlxâ  îÒ ×TƒN³9a&g§÷`ÐMGiIÛwn>JjÑ®ÜZÖÙf ß@ð;Ø7S®¼©Åž»ÞϲGéÿµ0ò½½ŠÂºÊ0“³S¦£´$6к“×Í)WÞT¿gÙ#.zf³¸JaÄh]”+o*7¾ ´¡Ž ÃßZï-A1‚b62ÃS-+ÅldEôw}†§ZVÇ–AOŠÙÈI»ÂÑŠèïúËÙôã Oµ¬M~®µŽ-ƒžÏ˜‡QÂJ#ÙSÓpôx’AïaU×®.æµ7×µ˜–„ƒY˜‚©›Ûú-°šË6©]]wællÿß?AÔžZÍ¢$„•㟌 F²§aw©¾¦áèñçÐóè$ƒÞÃe²ÅÚª®]]ëŸFD(Ìkoiýpv®k19ïZ* ,  m8ó6Fß²]ÆqTpí0ekô÷ó*»¶Â1¢u‘‰4 û¼Ÿº„yÞ©%8ï²<ÿyós¾Hèj}ÅA<*ÞXOyðD~bé‡-OÂÆTÛŠ”@»ƒè#¦ÂÙ8¿ Å 8Lô»!§– Ζ Ì\H1×E‹búnÊSáwT]»ºl £Ö?ˆ—–‘P˜×Þ©ÌÇÒúáì“Ëúõ\×bræykÞµT@Ÿ„OYX#Úp8$›A#=§kýeæZæ|% ËWd8ÐN£®‘⟊!̧3`ý¼*¯á$­îÐ?´-ƒŸl² †«$HÉêSÐ)F~ûhweâöy?/·H$6t 5*ò¼SK³HRpÞey1ï~`þóæç¿Âýþ|‘ÐÕ= ËÌú6Šƒ»‘šxT¼±9e§¨K˜ƒ; ©˜"Éúµ ˆË®O]ï_lôFÍ?ÙmŒÂtCZó#AêÁplÁ€AwØG×6—æ-ŽÅµ¥„„¼ŠAq[»Zh˜èwCÙÙlZO-_~6 œ-'Ý>˜¹S1ƒ b®‹ÑSµ’ÅôÝWôïÄ”§ÂïÕ–Ùöé¼®¨·kÞ1œ*ï*…íykʬHpÓo]ø.*Fáá6Þf ÅcTèT"eóMåó²¤Â©g‘„0& Ÿ)¸®ÅäùŸÞý:ÌóÖ{ýèϼk©€ýZ²™> Ÿ²8„«°$,ñ52F*sw1´ápHõÐkQ6ƒFzw²]cN×úËæáÒ̵Ìù„×àJ–¯ #¶Èp ‰A»„F]#l8Ä?1…(B˜Og©T~ÀúyUËbLÅ8^ô#˜§³Ü–ªTåZ1Oü™bbרSyÎOáIV~úP•-×{ÔÌbŠ-R»–4‘è»ÐÙ ìó~^­ÂeGn‘Hl/ Suè6:© #jT$+e?äy§–¥H¼f‘¤'*нà¼Ëò¡ÐëbÞýÀ#ïæÙ½á¼üЧ ?ƒŠ&~²‘?¹$ÐpøËi;FæBzwý[µkeÜôZ~Å7 Sîv8H÷±® ¸ðŸ¡3Ì?Šrý$“7jÂnÔ„Y¾Fܨ ëÂ˲|…O¸Q;ÑÖ…— áïU dù S“Ø -ž =G\ p£&GÉäw¢)`¬ /›aíÂß«õµiÈò5ÿ˜÷¦&±‘LsZ<#0þzޏMäzàFM8×,9Ž’É;¹ø :<îD? „†>R:À(ôq-Ãv³,šÈõ.­¢7/Àšp÷çXq®Ys™3Ür%“w+OQvrñtE›Õux܉~O¶K }!bÏ|¤t€y“BxÊ zýÊÆ{°.¼l‡D~mÞú8oéúnl†µk[ìwjR1h58ói¯b?mcf«+aQÁé`Ôצeã½ddº"fiàg Ë×H¡INSKyu‘JücÞOË N’·ZL¥Ý˜M˜šÄF¯ðGöN@EÁ$‚DD2ÍAsX@*æIBŒ‹CPhñTg3U>¼uW Ö·VŒÀøS»ª:Râ|PÕ~¾Qè9âZßS [†ífY±‡¤X4‘ë]û)\ZEo^m/­_€5á·q÷àîϱâÙ¥sã\³<ækÙþç2g¸å zä8J&ï äîVž¢ìaô`íäâ/èÓˆíéŠ6«ë½\iêð¸ýÇÒÑüžl—þ©Uÿ,úzØûBÄžùu®\øHéóƒÂò&=„ðWFñ”A ô£+Ëõú•÷ÍÿOö`]xÙW7ºØ‰üÚ9ã>Û¼õqÞ‹Ÿ³ßÒ!õÝåK7ÜØ k×ïf©Ö¶ØïÔ²-Õ¤bÐ3ΠÑjpæÓ]$Òþ^Å'”œÄ~*ÚÆI@ÇÌVWÂû<•â‚ÓÁ•èÀ¨¯MËŸÅÊÆ{ÉÈñ ÉtDÌCm†ÍÓÀÏ-¹Î@–¯‘wüm.B+’(铜>¦–«Td—òê"•Å€à”øÇ¼ŸÏ­~ž–8œ¡yú$oµ˜w™J»1›}Ñóš05‰_KŒ^á Ži‹Ï쀊Û÷B‹‚I‰µ#ƈˆdšƒ¿X‚æ°€ÑÚÜTÌ“„c¦Q…:‡ rÕ† Ðâ©—º ¨Îfªùn¤«|xë®K)¯¬o­%Æ­¬ñ§/ë3¦vUu¤A?·¥Ä)ø óC:¡ªý|£—¾¢Ðsĵç´¾§@¶‰Í‚· ÛͲ;±³bI±Ue‹°h"×»_HºöS¸1œ‘¹´ŠÞ¼ƒà½Ú^Z¿í4˜¾eg¼¸‹È ªî¯µW—b2ðÞ7Ü_k%¹8×ï(´ÅŠO}dà½o‡׸¿ÖJÝØjò3wßàVcXŸWPú0¥èŸúqø¬BÈÀ{ß­§ÇgCru&oÎÍp­•-û·¤?žÐ‡'èÏBs¢¬ ưÉGz>¯2 [ÈŽµg; Ї²i8P/ _ì—âðY…‡—å=ч†e´à:ÝZOÏ?(3w†äêãwXR Øí@h¿Qø¡ø+ðÄŸ—H*0"ZOWžâöoI“õÇ}§@ÕÀümNП5+·#Å–Ÿ *'Gýº| A’ô÷èH¨=X›X?¨#¶1Ó÷¡‰jÏv¨Ê¬á¾„`ÃÒp ^·æY¸©ô<ßL…çÂÑà€~i/Ë{kHwâ ËÇh±s)ÇaL ¸Ùõ˜oDÿÓü~Pfî7ÚVM'¹(@¶Æï°¤£ˆ °Û×g9‘xÒ+ôn“÷&;fšƒˆ?/‘íX“)T`D´1ø ߨMºÏñ¦ìß’þ‰¸.Fg›Tp'ì»HðqÞ/LÉ0€ùÛUçEcœ ?kùǃÓh6ÁrŠyË7]ä®Pá\@ÿTN%˜èösˆ‹®ï7ø@‚'>¼$é!AxU™¯×à‹Ê°\3;¶Yí^ÑåU°~PGÕìÿl!;b F‡Úçé2È‚ŽŽpÔží(±ùQ_Vä‚:1X:ƒ §æn3Á† m¦:µ¤á@½Á†ü/)IJNõ¯óv"2–žŠx¾+˜Ù— KÉôx.®HÀÀýÒ¥fAj^–÷y9*O—–Ÿ]òñ#åkM`~×õŽÑbçë¶Þ_RŽ Â7éµzÙFh¼!¼Ðê1߈Vc0aùÖ"žj𽦽ØÁ¿6n´­S šNrÿ)Î¥†{·táÇÍÙ’¨¾¬*F8#v¥€ufÆØz`þ®Ïr›ÉsÊ"ñ¤WG–ï©9­ýÌ^EîMvc‰ñÎ&DÜèAødQy/ù4“AÚ±&S¿ÖšëéÆù³Œ¡E bðiL¡¾Q›<Û6'„5™’–Pþ..™¹T&üÞèžq]Œwá4Î.6©«IŠEæ? ƒ»v‘àãö\[ýYéI˜>Uñ!‚lDa>Ԫ΋ÆÏ©7~8AÖ]&Ãn³‰v|ÖîÊÄoÖY ±¡áäóy¨K×i˲w«\¡Â¹9Æ~€þ©œå™$ 6 6nQާf†ÂqÚ>,Þo,I¹Ó”ð •渱{I £.±H>ÒC-YnûÃöÛ馑gQ©°ÌzÎ t”a¹fñÞw0–îa,™ QºmÄpjôéc¥5žd•£Ûˆ2yܸ¤àÕé—ÒÙˆ ¶L+~±|½ç¸-¿‘·dj° òó¹qH„¾AÞÚÔ}mÝäëôÔµQƒÓ…Çl˜Vdk¨ÀýbùzŠeÉì\OclÙú=c õ;n ÈLi^Õ`Aä¢gqr<äÑKÔGÒ …ý¥ µk5µ¨úB²˜lÛ»ÉÖ¬¼ù@2ØlãEß\uÜÖ Ï«Ñ=Y&Ù0¬QÞ:È×Q€¿Ða!´ôµV³Ä#Ϻ•™¸½¥(¸ž_ˆÆ Ù²± é$/o|‡XhLÁa«¶f-=vÜAÛq˜Ò ¼ïÕ*q±…‰¶µŸ¿ä¥è¸Ô3xÉ¢ù4– ¨Žá˜j »m=-‘dl—æc\kkQôlab…e0ØòbNl•í¥{‚ôÁõÄWe°ÙÆ·éP‹¾¸êü¹ˆ|bÝßÚ-IŒÓ|óûÔLeM²aX:µQΣ¼tÔ»0âJߥA=ؕפÑÄmÓÖôûCiéj4nÙü­gˆFÚ`¸ÐD-s3åª L_Ý |ÉPq<'Aª¾ É †Whµ% o…³¹fÔ ÎaäŸ^Þù)Ùɘ°Ð˜"Çר´Y³=.´ ·½\;Àºl­í¸ƒ š¿³¶¶â t±ÒšêÕG9Òw¯Û&s܃ãc ”d;„ mj>zjZ¨äÏ “ ÿ ®'}ž±ð“D‡£ÒòhiÂþ÷bW]€egËl6qnkçþÔv‰Ó+àÚzZgÝJÌù¹ßo޾ïù·¾C`°ŽÕÖÖ£è¡Ñ“~8ØÂÄOßòRÑ»gñ¦¼Wg?µÝH²6KØ +Ú¯ L6JöAz`ß`ïègßU1nŽïFi¾yËa³Œ¼fƒ%oÒ Rhâ6Ì w•» G"¹U&/ź;¾²½ (+´Z’\³jÂ×ÿ§µÐÏ1,Ùž‹[Þ®›d°ìcò&uj£œm“ œ ©ë6?rg…W•¿J‚â¸z{±+® ¶8’ÒŽ›åÕ¾ |Üï· Ûß!†ÓÒÔñÔâBhݳøÚƒn¾Íö¹&[o°wá·GwˆZæÿjpf;Ê \ežÿøb®iakÿÓlÏE  âx× ÒîNƒT9³Â§g&aÐ`÷IiGM>nwÛ®ÑjJÙÖZÜ@ß f7Ø;𩼮SÞ»žÅG²Ï0µÿé½½òʺŠS³“0$´£¦ºÐ6ÍדTÞW)#Ùg¿³fz.ÄaJ¸]h*o+”´ ¾7Ã Ž¡Zß-ï1A26b‚+-SÃdlÅ}wôEVZ§†OA–ÇÈÙŠÑ»IúïèŠãôÙˬµO µ®~Mžƒ-އ˜ÏJÂQSÙ#xôpÓaïA’.®×U7µæ˜µ×ƒ„–‚˜Y›©°-úÛ©6Ëšæw]]ÿllÔA?ßÍZž•„$¢ŒŸã§²F ¾©wañèá¦èóÐçÃÞƒ$ÚŲe]]®ªDFŸëokÌ(vpýi91k® *Zï  ,8mßF6óÆ]²ípTqôke0»*ó÷¢1¶‰‘u 4Ÿ¼û„º%©Þy<²ï8sóyÿjèH¾AÅ}XÞ*<ðyOéb~DÂO-‡ÛTÆ”Š»@¦#胿8ÙÂ8 Å !»ôL –§–Î\Ì E×1Hnúb‹wáSʺ»]T£ lˆ?Ö‘–—ÞטPÇÌ©ìáúÒõúË“rb×\kyæ@TµÞYO„ŸX#$8pÚ=#A›eýk§|æZæWË %NÐ8d‘®£ŠŸâ3§Ì!*¼ý`­$᯴?Ð-† ²lÉH$«ÐSêû~F)âewh/?yö6$H· t*5KS¼òRH³yeÞp`~ï1çæóþþý¿ÕБ|ÌË =ƒŠ6úš‘»±¼Tx¨§e9;ƒ˜K"˜© µúɮˈ_ï]OFôlmÙ?ÍtÂŒóZCêA#ÁlpÁØwA€—6×GŽ-極ż„„qAŠhZ»[Cwè˜ZlÙÙ-O 6~_'-œ>ݹ˜ ƒ1S‹®b’µSÑÝôÅÄïôWï§”öÙ–Õ®¼é·¨œ1Þk…*ï*ÊkyíÓpH¬ø]oáF*.fÞ6áÅ TèTcMóe"²óå©Â¤0„‘g)Ÿ &äÅ®¸ýÞŸùÖóÌ:Ïèý{€©k¼™²Zý²Ÿ >«„8,$°5ñ*F21wsHpá´QkÐõzFƒ6c]²wËú×NÒáæù̵Ìàׄ¯–J¶#  pÈ„»A‰#]F8l1?Ä(…gO˜B~T©UyúÀLbË8Ř#ô^³§ª–ÜåTüO1Z×bb™ÎySØIáOPú~V{×-•bÌÔ-Š4–»R»è‘ ÙÐ^~óìGe­lH‘nuS /:6è# ©$Tj?e+–§yä¼H¥¤‘f½Š*'ò˼àëСÀýÞbÙæï#¼á½ §Ðü&Šƒ??‘²~pÐ$¹iËøBæF;[ýwzÜekµÅ~ZôîS 7÷H8v¸ ®±¡ŸðŠ?Ì3“$ýrÂj7„ÔnF¾Y ¨ÜËÂë|²O…Q¸Ñ; —…Ö Uïá ùdØ“S ž- \G=&£päÉG¢w`)/ ¬ía›«ßÂiµõ5òÈ÷˜ÿ±&¦sL‘†„ <À:R=Pe6^X7œ}o5ÚÃ64©1W¿„0•Õ³2Ókê3Ý$kå%©§'ï1þ&-[É#bML" '{ æ™"!$ó*x´(+ºÞ)ü`F(> q-qô,³vÃ.õÈš/7¢­pšÀqXç÷sY®rÜ3™w“%vQO+tñruÕ›E~‰ÜxK¶O} |Ïb!y€t¤xB“z Ê{ÆÊýl¼.°m~D‡o8úÞnúékµ†ljwì[h1Rió85b¯cm?a+«f`éÁQe¦×Ôdd½ãf"ºgàiH×Ë I¡KSNJ‘uyOÞcüN ËLZ·’M˜Ý¥FÄš˜Gð¯E@NöD‚$ÁAÍ2D@XsBIæ*C‹ŒTñhPU3gWu¼>V·Ö SøÀŒR:ª»P|âQ¾~ÕZâ9è[ SßYfí†X¤‡±]ë‘4\)û^oEZ_­/má5€à÷q·â±Ïîãs¥Ùæ<³\çþÙkå¸g2äz ï&J8îä 좞Ví`ôaè/âäéíˆÓë«6Šêi\½ý¸ðüÑÒÇþ—lžÿU©ú,ûØzùžÄBø\®uóéHòƒð„=&ñFWô A”õË+£÷•úöOÿÍÙx]`غ7WÚü‰Û>ã9Þqõ¼ß³Ÿ‹Ýõ!ÒÜ7Kå×k ØÖ©fïÔïØ¶Õ-²Ðb¤Ñ Î3ÓæpjÒ$]Å^þÄœ”'ÆÚ*~Ç@IÂWVÌÕ<ûÁÓ‚¢Àè•ËM¯¨ÊÅŸÈÉ{ÆÉ ñÌDt͆mCÏÀÓι-‘¯–@müw’+B.“é(–¦>œ—dT«•"êò”à€ÅŸ¼Çøž~­Ïœ8–úy¡˜µo$™w›1»JšóÑ}‰50ŒK_Ž á^Ï‹iŠ€ì‹B÷Û‰I‚ˆÆ#µƒšdˆ‚X¿€°æÜÚÑ„“ÌT…Q¦c‡:†Õr ©âР¨ º—ªfΫ¤nù®ëx|¯)K­o¬¬­Æ%§ñ¦3ë/¤uUv¥·?A ø)Ä¡:Có£|ýª¢¾—µÄsдç¶@§¾·‚͉²ÍÛ ³±;±Ib°‹eU»×"hºH_¸Sö¹‘œ1¼ÞŠ´½àƒ¿Z^Ú¾˜4í¸¼geª È‹µ¯îb—W7Þð2%k_Ü×8¹Å´(ï}OŠo½àdׇJÖ¿¸òjØÝàßw3XcVPWŸè¥0úúŸB¬øqß{ÀÈgǧ­urCÍÎo&•­p-?¤·û‡ОÏè'¢sB°Æ ¬zGÉ 2¯>ŽÈ[ ;gµ²‡Ð/P8i—ì_ …Yðâ=å—‡e†‡ÑÝ:à´ÏOZw3(?êä†RXwã@íØ øQ¿hð+ø¡H—ŸÄZ"0*âžWOIoöÇõ“Õ@§}müÀ5ŸÐN#·+Ÿ–Å'* ºýGA |ô’¨Hè÷›X=#¨?X1¶‰¡÷ÓvÏj¬Ê¨¾áÃ`„^ pÒæ·ô©¸YLß<ÑÂç…i~€à{Ë/ÃwHkË ¢s±hÇaÇ)Ù¸ LDo˜õüÓÿîfP~VÚ7¹'M¶@(¤°ïÆ ˆ£Û°9g×+Òx‘“nô;&÷ƒšf‘/?ˆ)“Xí´D`T ø1M¨ß¦ñϺþ’ßìF.¸‰T›gì'pqðH»ÉL/ÞÛù€0cEçUk? œÓƒÇùÁ6hyŠrä]7Ë\áP®NTÿ@öè˜%®‹ˆs7ï‚@ø¼>'!é$™UxA‹àׯ3\°ÊíY¶;UåÑ^GP~°ÿìÕb;!lÚ‡F È2éçpŽŽ‚(ížÔQù±‚äV_:X1:§ ƒ3næ †Áµ:¦m½@á¤ü†ÁI)/¯õNJ2"vóŠž–˜+¾x —ÙxôÉKÀH®.ÒýÀjAf¥÷–^O*9y]Ÿ–—å#ñòMkõ×~`çbÑŽ_Þ¶ë ŽRzµé7hFÙм!¼ˆß1ê0cV"Öùašjž½¦½¿ÁØ­´n6 SrNš¥Î)ÿ·{†Çát’ÙÍ*¬¾¨8F€¥v#ØÆfu`zrÏ®þÊsÉ›W¤ñ"ï–Gý­9©E^ÌvMîÎñ‰cÜD&døAèù/yQA“4S&±ÚëšÖ¿³ùÆé E¡Œðb¡Li<›Q¾„'6Û–’™5..þP&T¹™žèÞüŒ]q4áw©6.ΊI«?æE»ƒ ãà‘v[\öIéYýñU>˜l‚!Ô>aDƋΪ~7©ÏÖA8nÃ&]|v‰³ÄÊîÖYÖoᡱ óäK¨yËi׫w²¹Â¡\~Æ9œ©þ€$™å6 6 ŽQn†f§>ÚqÂ,oÞ,”Ó¹I ð±¸æ•£ I{±.CÒ>HûnY-éÛöÃQg‘¦Ì°©t Îzf¹a”Þñ  €€ € € invalid distance too far backinvalid distance codeinvalid literal/length code     incorrect header checkunknown compression methodinvalid window sizeunknown header flags setheader crc mismatchinvalid block typeinvalid stored block lengthstoo many length or distance symbolsinvalid code lengths setinvalid bit length repeatinvalid code -- missing end-of-blockinvalid literal/lengths setinvalid distances setinvalid literal/length codeinvalid distance codeinvalid distance too far backincorrect data checkincorrect length check`Psp0 À `  €@ àX ;x8 Ðh( °ˆH ðTã+t4 È d$ ¨„D è\ ˜S|< Øl, ¸ ŒL øR£#r2 Ä b" ¤‚B äZ ”Cz: Ôj* ´ ŠJ ôV@3v6 Ìf& ¬†F ì ^ œc~> Ün. ¼ŽN ü`Qƒq1  a! ¢A âY ’;y9 Òi) ² ‰I òU+u5 Ê e% ª…E ê] šS}= Úm- º M úSÃ#s3 Æ c# ¦ƒC æ[ –C{; Ök+ ¶ ‹K öW@3w7 Îg' ®‡G î _ žc? Þo/ ¾O þ`Psp0 Á ` ¡€@ áX ‘;x8 Ñh( ±ˆH ñTã+t4 É d$ ©„D é\ ™S|< Ùl, ¹ ŒL ùR£#r2 Å b" ¥‚B åZ •Cz: Õj* µ ŠJ õV@3v6 Íf& ­†F í ^ c~> Ýn. ½ŽN ý`Qƒq1 à a! £A ãY “;y9 Ói) ³ ‰I óU+u5 Ë e% «…E ë] ›S}= Ûm- » M ûSÃ#s3 Ç c# §ƒC ç[ —C{; ×k+ · ‹K ÷W@3w7 Ïg' ¯‡G ï _ Ÿc? ßo/ ¿O ÿA@!  @a`10  Á@ #+3;CScsƒ£ÃãIà !1AaÁ  0@`@@   ŒLÌ,¬lìœ\Ü<¼|ü‚BÂ"¢bâ’RÒ2²rò ŠJÊ*ªjêšZÚ:ºzú†FÆ&¦fæ–VÖ6¶vöŽNÎ.®nîž^Þ>¾~þAÁ!¡aá‘QÑ1±qñ ‰IÉ)©ié™YÙ9¹yù…EÅ%¥eå•UÕ5µuõ MÍ-­mí]Ý=½}ý  “ “ S S Ó Ó 3 3 ³ ³ s s ó ó  ‹ ‹ K K Ë Ë + + « « k k ë ë   › › [ [ Û Û ; ; » » { { û û   ‡ ‡ G G Ç Ç ' ' § § g g ç ç   — — W W × × 7 7 · · w w ÷ ÷    O O Ï Ï / / ¯ ¯ o o ï ï   Ÿ Ÿ _ _ ß ß ? ? ¿ ¿   ÿ ÿ @ `P0pH(hX8xD$dT4tƒCÃ#£cã             (08@P`p€ Àà  0@`€À€  0@`1.2.5need dictionarystream endfile errorstream errordata errorinsufficient memorybuffer errorincompatible version.=>=I=J=U=b=m==Ž=I=1.2.5A-+ 0X0x(null)              0123456789ABCDEF AAèÿ ÈÀ5À:@:@;À;`BˆB ÿÿÿÿ  FÿÿÿÿÿA°„ Ø ³ä .debug_info•  •°Å7COHËÐäg"CO]ÄíŸâ ï‹  "â '“ ï*¡ ;¡ Z7m x=m „ ”   © × á    r> J \ n Å€ R ×  nµ ãÇ Ï × ÿ Cù¡#0B­P¹¾Ê+VÖ&MH1ö=°Ö5µMZoP44@@éc_jOWzQ\44¾Ê,퟉;7­ ?& ,@¢ %A˜ B]ë íŸeK] L]X¿ h8Uz&V‚JW‹]X”&Z J[§]\±p^º|_Õpa Ü¢b$â•c(é­e,ó]f0ù]g4uµÆ@À­@+§]4[‡‡E Ú‹ â€7pJVVO! J g5 yP'C ‹\‚S —n ¡ §g íŸfÏD ííŸÝZñÞOíߢäàfø Âõën%퟇Oñ Oäí ¢Öä yü nþ’ퟔ¬Z ­Z®Z¯‹ëퟢtZ uZvZJw‹‘€{r‘|rhzO’y~tttt4íŸÁi)j…%k…½m~ퟱ´Z µZ¶Z·‹:íŸÓXOù%Y…Û0ZO4\O INZz[OtPyèOOV ! OÂí8 Í(×Èú.ퟕ×e?‰W`A‚Y ‹B&íŸ'›v¢œv›vž¾‹íŸ7ƒv¢„v›…v†¾… `‰‚± ©Š&Ï ­ˆ‚íŸH£v¢¤v›¥v¦¾ ‚!P &iO š Ÿ «…V ·€Mr’‰‰² G äQ Àt 76CODH† ‹ K’íŸïÒo Ÿ /ß J Ô 5  Õo ù Öo '×o Øo  Ùo Ú} Ûo S m Þo } 2Ý › 4á‘ 0 ¾ Û ò  C — ×COª Lƒp&XO ]h¡{˜ u¾ ­vÝ ­wæ ­xò ­yü ¿z¸Ù 'Ê ÊŠIÏßoê> G B  # 2  #|mÄ^J _1 o`8 ÔaD vb Y Ôce ødm oer fñ øg ù åh$ oi( øm, øn0 øo4 Ôq8' v{<3 A€@A A†DF øˆHL ø‰LV øŠP` ø‹Tj øXu \”\Š ø™`— cšd§ o›h· øœlÀ øpÌ øžtÖ ø xâ ø¥|ó ø«€ o¶„ o·ˆ ø¹Œ o¼' nÀ”S ÖÁˆ ] âÂ| e îÄ Æ îÅ$ Í îÆ0 Õ PÈ< Þ \Ë\ ã oÌPì oÍTõ iÒXÿ Ö˜ øØœøì ‘î¤*vô¨2võ¬=øö°Eo÷´R­þ¸Yo¼bvÀ' j# h 8UO ÔVp øW~ XŸ ÔZ ¨ ø[² \¼ ^À _Æ !a ß Sb$ï Fc(ö oe, f0 g4Ùåj Vñe MW  y O™ P‡ H#,Ô P1FFøøRÍ _^å QcFF U )Œæ ‘œÜ Ð 4py oq~ rƒ osŠ ot  Ôu“ øv øw§ Ôx¬ øy µ Ôz$½ ø{(Æ o|,Ë o}0FQ< W­8 V  ¢ X{O=I >1 B?4 ­@9 ­A> ¸FCA ­DE ­E{O={O'º Pl Q} oR† +S {u G0;© N– › o›­OoO=vO=ñû %†v&–­%(¦H¨X1íŸâÆo J Ç  Èo É} Êo Hß*íŸý€o J !¹ 1 ƒo ÊíŸbo J c"2e › ¬#€ É#Ž Ñ$®%%×°íŸ* 2 ‰GíŸ8o J 9 N:‚ <;ø!× G>ø!õ Y@c"2=! c?ø â 1íŸ2†o J ‡ A ˆ9íŸC‘o J ’ k“o e”oÒöíŸPo J ž&;  Ÿo   o!Y p¤o"2¢"ü £¿ W Ê a íŸ^Go J H tIo"2L!v zKo'ç$®!” „ø"‹‘ø'°%!Î —­ø'ð&!ú —Éø! ›Êo'(ú!6 —èø!T ›éo(ð"Ÿ3ß ‚! Ñ$#Ð \%#Ð v%#Ð ƒ% ’% &#þ & §& :'#þ F' Ø' _(#þ k( ý(#þ M) ²)#þ Ý) ‹* š* ½*#5 +#C 1+ _+#þ ~+#Ð ð,#Ð ý,#þ -%,-?íŸ% 2& Ä'ø%m-ŽíŸ‹3 J 4!ä E 6  ¢-$·)$Á*o?íŸfÄo J Å ¾ Æo Ý Ço æ Èo ò Éo"2Ë5íŸrç J è ¦é"°ì"2ë!r ¸ì!¸ ÀíÔ)ý-wíŸ™ß 2 to"Éo(! Æ&v#­.#Yæ.#þ û.#Y?/#þ T/%3íŸç 2!›"ø!¹! !×c !" A!K$ (¨!w&€v!•+v R3 #4 Ç4 5$Ò'o)v/ŽíŸ¦Ðß 2Ñ tÒo!. ÐÖÔ!x 3 Õø!– ÕÖÔ!ú ÉÔo( !´ Üü­!Ü E üv(8!Æv#­”/#Yv2#þ ‹2#YÏ2#þ ä2Mퟲ£o è¤ á¥"í«!6ðª!T4¬‘ )5¶íŸ¾¹ß 2º t»o!róÀv!‘Áv#­Q5#YÞ5#þ ó5#YD6#þ Y6#Y6#þ ²6)Ô6íŸÍóß 2ô tõo!¯Y÷c"Éøo(P"Ü­!ËE v(h!éÆCv#­ò6 ¢7#YI:#þ ^:#Y¢:#þ ·:)=íŸÚSß 2T tUo!YWc"ÉXo'd>é!A ø(€"Ü•­!#E •v'X@n!_ưv'fA\!}ÆÃv#­:= >#Y,@#þ A@#Yù@#þ A#YB#þ B)7B¥íŸóâo J ã 5äÔ 0å !ÝE ç  ‘B «B ¾B)Ù:AíŸü*ø 2+&!n,c"9Få! B. !CO2o!aX4c! 3o!«Ð/Ô!åÕDÔ"^Eå!h:ø"3 9A!?x0Ô!kE 1oC‡Ù+—~ t,+2¸x7B¯wŒZ@O\IO]LV^Vb_ ci`uiazpb‹pcpd ”if$™Og(bh,£bi0§Oj4«Ok8²Om<¸On@ÁbpDÆOqHËOsLÏVtPÓ|vTE[QZhu}‡¦h›8UØ8VëUWùaX8Z #U[-a\ÏV^7t_Ra kÁb${µc(‚Oe,Œaf0’ag4= IåV uàM iôO mPy C@ =O@›`P  µ µ U U &Y_ÌqQÑ µ µ+íŸÂ OÊ 7' "Õ &Ï`ÔqÜ q-y€2x7B wŒZœO\¥O]¨V^²b_ ¿i`ÑiaÖpbçpcëpd ðif$õOg(ùbh,ÿbi0Oj4Ok8Om<On@bpD"OqH'OsL+VtP/|vT¡[­¶ÄuÙ‡h÷8U48VGUWUaXv8Z U[‰a\+V^“t_®a ÇÁb$×µc(ÞOe,èaf0îag4= IAV u<M iPO mpP^y Ÿ@ ™O@›¼P  µ µ U U &µ_ÌÍQÑ µ µ é&°uµ < &6`íŸHÄô¨ÅÈœÆÈ>íŸOWô¨XÈ¥YO‰œZȵ“\'ÆÆÓC) &GíŸzG“H' íŸWÌô¨ÍÈœÎÈkíŸ`Ôô¥ÕOœÖÈÓ¨ØVñÙÙôÆBíŸhäOÜåô¿æi“è'GíŸqýOÜþô“'ÓÖíŸŒå“æ''çO+èÈÆ†íŸƒbÜôèbáO“'ïb;ói ퟕ_bÜ`ôèabábOïdbSퟜkbÜlô“n' ퟥ|bÜ}ôïbaퟬ†b܇ô“Š'Yè‰b ퟷbÜžôï b4íŸÀ§Oܨô“ª'OíŸÆ¹Èܺôõ»Ò“½'8íŸÎÍÜÎô“Ð' Í[O[  ü ‘í4š25x7B,wŒZ½O\ÆO]ÉV^Ób_ ài`òia÷pbpc pd if$Og(bh, bi0$Oj4(Ok8/Om<5On@>bpDCOqHHOsLLVtPP|vTÂ[Î×åuú‡#h8UU8VhUWvaX—8Z  U[ªa\LV^´t_Ïa èÁb$øµc(ÿOe, af0ag4= IbV u]M iqO m‘Py À@ ºO@›ÝP  µ µ U U &Ö_ÌîQÑ µ µiÂíŸMjOÈk* w¾l ºmi´p'Pq6 •Þoi³âoi~?{ • O šBŸ[íŸTJO´K'íºLb âNi±íŸ\0O´1'P36 ~íŸdO´'¾pºiÝ)äO~éíŸléO´ê'GPï6 èíieäìOìîmºîm~~~~~~~œíŸvÅOÈÆ* ‘¾ÉF ´Ê'ƒäÈO^íŸ}âOãOÈä* ´æ'A¡pÍ  p~CퟆVÈ* ù¾VºO´#'!V iCâ ia"p>íŸ[OÈ\* ´^'ÑퟖhO´i'Pk6 lOºmi~~~~H) &€íŸžsOÈt* ´w'»ävO~Nퟨ2O´3'P56 ퟱIO´J'äKY PO6 "Nm&MO &Â`  ÍA Ôj|u R !ðmú¿ ) ¾ÊCÈ€2cx7BZwŒZëO\ôO]÷V^b_ i` ia%pb6pc:pd ?if$DOg(Hbh,Nbi0ROj4VOk8]Om<cOn@lbpDqOqHvOsLzVtP~|vTð[üu(‡QhF8Uƒ8V–UW¤aXÅ8Z ÎU[Øa\zV^ât_ýa Áb$&µc(-Oe,7af0=ag4= IV u‹M iŸO m¿P­y î@ èO@› P  µ µ U U &_ÌQÑ µ µ &m`híŸOé·÷Þ‘¥ÙÖ’iÚ”iâ–'~—Ãÿ•i‚s{ ™ O žB£[ü퟉Oâ'~ÃO‚‚|) &®íŸ‘oOâp'AÖqb~uÃ_sO|ÿtiퟙ;Oâ<' =Oš~Aø?Oã?@i?O‚‚ÖퟡÝOéÞ·)ßO‘ÞáÓââ'~ãÃ$ퟨOé ·+ ž-Ö iK OퟯOé·/žâ'~ÃiO6æ‡ÖOkퟸªOé«· ¬Oâ®'¶íŸÀÊOéË·]ÌOcÍOâÏ'~ÐðíŸÌôOéõ·¥÷Oâø'‚ ±â^¶ ÝîÎõj|!u"ß#ñK &9Ñ S è¡LòÞB ï"'-25;AFNS Z _ d k rx}ƒ‹”™¤©±·»ÁÈÍÑÕûŽ ÌQÚ¢Rì­Sõ­Tú­U ­V ïW´X&´Y,»Z Íï\$Óï](Ùï^,ßï_0å·`4ì´b8ñïc<öïe@ýïfDKïhH ¼jL' ¼kP0 ïlT8 ïmXA ïo\G ïp`L ïqdR ïrhW sl\ tpu uðz 'v0€ ­wÀ… ­xÄŠ ïyÈ &ß5ñ ÆÂË Ö¸ ¬4p1­q6{rA­sH­t K‡uj«vy«wƒ‡xˆ«y ‘‡z$™«{(¢­|,§­}0 ´;PŒ ˜dV ¤_MQ ïtO¤Á Æ Ñ"   ¤ñ¤ ú Æú@a ú Ƥ9œ ÞB ퟡ C® D°j!EïÂp!J·rt!K·ˆî GöžßRï´ÓPïåS·Êx!Yïà~!Xïö„!L· ˆ!H·ZìI·p‹!W¼†‘!V¼œñUïLìT´ÙQï—!ZÆî [﬜!]ïÞ !^ï¥!_·ª!€XE°!ŸüD »`!jÀ ËW!h L!8U³ ‡V» «WÄ {XÍ ‡Z Ö «[à {\ê 4^î |_!†a !¸b$,!«c(3!­e,=!{f0C!{g4ô ‘!P–«««« · !_ Ã"!QÈ««· « ·! L"RV"ØK8íŸ(&MMy"ña@'Ë&Nz 'OM‘ '_Ÿ §%Q–9'SP'WtŸ'WtË']Mº"Vt6 ª$UTæ"õ$RPž#"'Ttô#ð$Ttš%''\tÞ%+'XtÀ&0'ZdÄ'5'YP¸#[d:'¿êe ±L ÎL oN O ¡O QP ÛP þP ÙQ ¹R †S cT U HV ‘X ¢X ,Z Ú] )^ c©^ »e ;f ·f Èf ý  "Ž"9g$íŸ0&ð¢"R @)È"ŸW@1§%ñ– _  doÃ"©"˜º"˜¿"¬" _  tÝ"â"è"í"ð"ö"ü"# ## # # # &# -#3#8#>#F#O#T#X#_#d#l#r#v#|#ƒ#ˆ#Œ##Ð"t6•#›# #›%ÌQ¦#BR¸#MSÁ#MTÆ#MU Ï#MVÕ#tWÚ#TXò#TYø#[Z ‹$t\$‘$t](—$t^,$t_0£$P`4ª$Tb8º"tc<¯$te@¶$tfD$thH½$UjLÅ$UkPÎ$tlTÖ$tmXß$to\å$tp`ê$tqdð$trhõ$Zslú$_tpÿ$luð%yv0 %MwÀ%MxÄ%tyÈ««#5½#à#f€$kvv$j$4pý#Mq$r $Ms$Mt $'u($Dv7$DwA$'xF$Dy O$'z$W$D{(`$M|,e$M}0T$P,8"$V˜$Mt2$O˜_d  @    d ¤’&%_ž-%P£† † D DÃ8%QÈ! † †Ù"B%ãQ%V%#éH–íŸå%gMË&hz $§%j–#IªíŸò%‚MË&ƒz %¤ã&„M$§%‡–&ÂÁ#†M %J#-JÀíŸ&¨MË&©z ã&ªMú&«• î&¬M&ß§%¯–&ý'®M ªJ ÊJ#îJíŸ&ÉMË&Êz ú&Ë• î&ÌM ýJ#níŸ&ÑMË&Òz º"ÓM'ÔM$§%Ö–'_% u tzÚ%8Ul%'Vt%DW}%X†%'Z %D[™%\£%Þ^§%Ô_­%“a ´%¸b$º%†c(Á%Me,Ë%f0Ñ%g4(_g<íŸ<&fMË&gz 'htþ'§%j–(+'ktH(D'kt “g çg )h KhœhdíŸI&ÖMË&×z §%Ù–i×íŸT&äMË&åz T'æ« I'çD§%é–_'êT Ki Ui mi ¤i Ái9íŸi&MË&z ø#[§%–ÛidíŸz&AMË&Bz ‘ b'FŸ §%G–t(''Dt'ET¬('ET ¶j Îj k(@kgퟆ&*tð$+µ b',P''-tÊ(õ$0tô(f'/t2ퟑ&tMË&uz §%w–“ퟢ&~Mq'z j'€z §%‚– )+'ƒ–>)£$„P‘$…t (ퟮ&­MË&®z v'¯M§%±–r퟿&¾êË&¿z §%Á–… Ù&jŠ zÐ&hš ã ˜ ° ,tã®~' (cl(©kCA(7 CO/HS(X(©kCíŸÁ( { l(.<À1 (.?2 †(FB@2 Œ(FF€2 )!Ö )"Ž ú(#m è($˜ ã(%“ Þ(&Ž ‘ Ï(:‚ ‘Õ(;‚ h)Ú((m ¢)))m ø))+m **)*m L* )*m |*$).{ É*))8á í*/)7á +4)9{ +8)0m I+=)6 {+B),m Ÿ+G)-m Í+L)3m â+P)/m ,U)4m ,Z)5¢ •,_)1m ã,d)2m:O?r(:O m6ž(¤(©(‘(¯(½(?O?m¢­õ(î(tã(tñ(?R )::k–i) þ)6p*8)*7IÀ2D[ITB*%4*F*Z*sfÀ4D[ g*‘‚è?œ+N î*z u*á{ ¾*c| Ò*y} Ý*y~ ã*y æëö¶*G ¬*> * B ? „*Q@ œ*QA ¡*3F C ¤*QD ¨*QE\˜*'‰* hmyÍ*YÉ* +‘>À:[y +‘…ü? ,+ÄA@;[ 8+‘ˆ@ G+òDÀ;[ T+À5æ[  a+-G<D[ j+J@@:æ[ w+‘v0< ƒ+Ä{°<+ „Â+T ¶+ P š+¼Q £+yR ¬+ÁS ë ‘ ËÌ+Ýã+)Ñ+ç+Tð+MípsíŸõ+‚ã,ƒÎ"_qbq”íŸþ+Ÿã, Î-o0¢yøq©íŸ ,gã,hÎ0i]v0jÒq0kyøqœN-¨*my'r\‹0myÓ r£rÍíŸ,Æã,ÇΦ-0È]ˆ-¨*Éxk-0Êy.®rrsŸíŸ,³ã,´Ît<íŸ%,€ã,Ît™Ä-¨*ƒy;t\á-‹0ƒy¬tpþ-¨*„y³tX.‹0„y=u8.¨*y\u\U.‹0yÍupr.¨*yÔuX.‹0yT$uTEvQv´íŸ/,¢ã,£ÎwiíŸ8,ã,žÎ0Ÿ]v0 Òq0¡y¬.–0¤y×.¢0£Ò/«0£Òh//¨*àyx\‹0ày€L/¨*æy³x\‹0æy8w–Jw–Xw`wT»wa‡xóByaVy"_y.nyzÅíŸY,oã,pÎÂ0q³/Ç0s¼Ñ/Ì0táï/Ý*uy 0£+wy80o0vyq0Ò0xy0×0vya {{a Í{a „|» Ê|µ Ú|q}´íŸr,4ã,5Îâ06¼Ü07¼­0Ù0;xå0è09x1í0:y?1œ*<x‰1û-=y»}§!1¨*Cy˜‹0Cys~²k1¨*Hy·~[‹0Hy°¨*Lyq[‹0Lyе1¨*Ry=€[‹0Ryè¨*Vyõ€[‹0Vyo©Ó1¨*`y¨_‹0`y'‚ÂíŸ,Jã,KÎð0Lyÿ0Ly÷0LyH21Ny'‚¡ñ1¨*Ty[‚\‹0TyÈ‚–2¨*Uyñ‚\‹0Uy^ƒš+2¨*Vy‰ƒ\‹0Vy „©s2¨*YyK„X‹0Yy< Õ„< è„ry¢íŸH,qyã,rÎi/·0x݇/o0yyë„_ퟤ,Ëã,ÌÎÇ0ͼ 1Îy®2 1ÐyÌ21ÑyL†íŸ¯,îã,ïÎÂ0ðø2£+óy3ã*÷y431öyR3û-õcp3Ì0ôáŽ3Ç0ò¼¬31ýy×31úy4$1øyh4o0ùy¢4&1ûy,1üQ¿4×0ùyÞˆºíŸº,EÇ0F¼£+Gy¾/HM‘.1Jœ*KQÝ41Ly5o0My?‰8%5¨*]yt‰Ý|’íŸd,'yã,(Ζ0*y– ÷|– }–}š‰bíŸÏ,Çã,ÈÎÇ0ɼ£+Êyo5<1Ðy§5B1ÑyÅ5L1ÒyV1Ïyã5^1Íy6o0Ìy6f1ÎyþŠìíŸÙ,ôã,õÎÇ0ö¼£+÷y;6<1ýy6B1þyŸ6L1ÿy½6o0ùyè6^1úyV1üy7f1ûyy‹º¨* yÇ‹[‹0 yPŒ°#7¨* y”Œ[‹0 y ¨*y9[‹0y¥“A7¨*y‹0yBŽ ¨*yvŽ[‹0y⎓^7¨*y ‹0yv ¨*yª[‹0y”{7¨*yAX‹0yÎퟚ,yã,Î2è0xí0xë<íŸÄ,“xœ*”x¨*•yC581—x Óßa0R0Ä^ å,Ä_ £-y` ª-a ¶-Òb Ç-c Ó-¡d Û-ye à- f _.¡g g.ëh$ n.yi( y.¡m, €.¡n0 ‡.¡o4 Ž.q8 •.Ò{< ¡.Ì€@ ¯.̆D ´.¡ˆH º.¡‰L Ä.¡ŠP Î.¡‹T Ø.¡X ã.ä”\ ï.¡™` ü.çšd /y›h /¡œl %/¡p 1/¡žt ;/¡ x G/¡¥| X/¡«€ g/y¶„ m/y·ˆ v/¡¹Œ /y¼ Œ/òÀ”–/ÿÁˆ  / Â| ¨/Ä ¯/Å$ ¶/Æ0 ¾/È< Ç/#Ë\ Ì/yÌPÕ/yÍTÞ/0ÒXä/=Ö˜ï/¡Øœû/¡ì 0Mî¤0Òô¨0Òõ¬"0¡ö°*0y÷´70Qþ¸>0y¼G0ÒÀÏ™-j Ôß-h …-8U ê,V ø,¡W -­X -Z -¡[ (-­\ 2-Æ^ 6-¹_ <-¾a U-ðb$ e-ãc( l-ye, v-­f0 |-­g4 •ëò,Vx-OÝ-P ßÉJ-P Î ã!ã!¡!¡ïC-_"û[-Q #!ã!ãT. 'J. >.4p ç-yq ì-­r ñ-ys ø-yt û-u .¡v .¡w .x .¡y #.z$ +.¡{( 4.y|, 9.y}0 Ñܪ.WQ¦.Vx/Xö[=ö[=ö['Q[y[=I[= BIê/& RQ 0( bË…0X7Rm1 2ç€ 2)‘Ü+7B2VC=2M/2VU2OH2il2PZ2{y2P€••JJ¡r2_­„2Q² •• )‘Üퟎ24 @3& V3) O3 E3] ‘2; ˜7e34}‘‘¢‘ó‘™2F73h,38U¤2&V¬2JWµ2]X¾2&Z Ç2J[Ñ2]\Û2÷^ä2_ÿ2pa 3¢b$ 3•c(34e,3]f0#3]g4üß2ð2@ê24@$+.]^3[s9i3 þ3˜4à)47°=CY HMR2474 lK4_ ’íŸW4H ’íŸc4 U U¢4"Uퟌ4…H¨4†h’ ퟓ4,`È4-`°4.oÃ4/o!’#’ ퟛ46È47`Ï48`H,’R4)l a†4Pt4¬4¶4Ço .debug_locÿÿÿÿ"A>Ÿÿÿÿÿ?AíŸegíŸÿÿÿÿ@Ÿÿÿÿÿ=@ퟩ¬íŸÿÿÿÿíŸÿÿÿÿ4@>Ÿÿÿÿÿ4>@퟇ŠíŸÛàíŸ-/íŸÿÿÿÿáacퟚŸíŸéëíŸÿÿÿÿ—IKíŸwyퟲ´íŸãåíŸíŸÿÿÿÿZ\ퟄíŸÎÐíŸÿÿÿÿ¤D>Ÿÿÿÿÿ¤BDíŸvxퟛ ퟭ¯íŸÿÿÿÿF \^ퟑ“ퟲ´íŸÿÿÿÿé BDíŸY[ퟨªíŸÿÿÿÿi \^ퟋíŸíŸÿÿÿÿ]/À¸Ÿ©ÊÀ¸ŸÏ#À¸ŸCˆÀ¸Ÿÿÿÿÿ]/À¸Ÿÿÿÿÿ]·ÊíŸÿÿÿÿ]ÅÊíŸÿÿÿÿ#_aíŸrwíŸÿÿÿÿí 1Ÿ“0Ÿ“ÿÿÿÿCMíŸíŸÿÿÿÿ íŸ<M퟈ÕíŸÝ*íŸ2퟇ÔíŸÜ)íŸ1~ퟆÓíŸÛ=íŸn½íŸ½ÐíŸ íŸÿÿÿÿJMíŸ8=íŸËÐíŸíŸÿÿÿÿ1=íŸÄÐíŸÿÿÿÿÐÒíŸÿÿÿÿ)11ŸGSíŸÿÿÿÿ)1ŸNSíŸÿÿÿÿ-2íŸÿÿÿÿ35íŸÿÿÿÿ,5íŸÿÿÿÿ0Ÿÿÿÿÿ. íŸ*9íŸ;Xퟒퟟ¨íŸª³íŸµ¾íŸÀÉíŸËÔíŸÖßíŸáêíŸìõíŸ÷íŸ íŸ íŸ!íŸ#,íŸ.7íŸ9LíŸ_oퟢ­íŸ¯¸íŸºÃíŸÅÎíŸÐÙíŸÛäíŸæïíŸñúíŸüíŸíŸíŸ&íŸ(1íŸ3<íŸ>GíŸI_ퟂ—íŸÉÞíŸÿÿÿÿ. íŸ@XíŸ<LíŸVoíŸL_퟇—ퟢ«íŸÎÞíŸÿÿÿÿ.}†íŸZ_ퟕ—íŸÜÞíŸÿÿÿÿ.CLíŸgoíŸS_íŸÿÿÿÿ.‚†ÛŸJLíŸÿÿÿÿ:BíŸD‹íŸÿÿÿÿ‹íŸÿÿÿÿ#níŸpxíŸz‰íŸÿÿÿÿKz|íŸÿíŸÿÿÿÿK«°íŸÿÿÿÿKŸo|ŸÿÿÿÿKçêíŸÿÿÿÿKúíŸÿÿÿÿß#.íŸÿÿÿÿ‰ôíŸÿÿÿÿ‰0Ÿÿÿÿÿ‰Ðô0Ÿ=BíŸÿÿÿÿÒ+0íŸÿÿÿÿÒŸÿÿÿÿÊ ŽžíŸÿÿÿÿÊ ,=íŸvퟃŒíŸÿÿÿÿÊ ííŸRZíŸÿÿÿÿÊ ƒ‹íŸÿÿÿÿÊ µÕíŸÿÿÿÿÊ ¨°íŸÿÿÿÿÊ ÚúíŸÿÿÿÿ\^íŸ_jBŸ£µíŸÌÞíŸÿÿÿÿ—šíŸÀÃíŸÿÿÿÿm-íŸ #íŸÿÿÿÿý-@·íŸÿÿÿÿv/fiퟯµí#Ÿõûí Ÿ í Ÿÿÿÿÿv/nvíŸÿÿÿÿv/’–íŸÿÿÿÿv/ƒ¸1Ÿ¸?0Ÿÿÿÿÿv/µ?íŸÿÿÿÿv/=?íŸÿÿÿÿv/PÅíŸÿÿÿÿ§ªíŸÿÿÿÿN_íŸÿÿÿÿ5ÿÿŸÿÿÿÿ5víŸÿÿÿÿÔ6=M0ŸÿÿÿÿÔ6¹íŸÿÿÿÿÔ6Å:íŸÿÿÿÿ==M0Ÿÿÿÿÿ=“:íŸÿÿÿÿ=':íŸÿÿÿÿ=O¬íŸÿÿÿÿ=]­íŸÿÿÿÿ3 íŸÿÿÿÿ3)8íŸÿÿÿÿ3€†íŸ­¯íŸèêíŸÿÿÿÿ3¯íŸ½ÁíŸÊêíŸÿÿÿÿ3˜¯íŸÓêíŸÿÿÿÿ3›žíŸÿÿÿÿ3¯¹íŸ»ÎíŸôúíŸüíŸÿÿÿÿ7BíŸíŸÿÿÿÿÙ: íŸ ŠíŸ24íŸÿÿÿÿÙ:ŠíŸÿÿÿÿÙ:=ŠíŸÿÿÿÿÙ:LTíŸTŠíŸÿÿÿÿÙ:`Ší Ÿ÷íŸdhíŸÿÿÿÿÙ:fŠí ŸÿÿÿÿÙ:ƒŠíŸÿÿÿÿÙ:(+íŸÿÿÿÿÙ:—¨íŸÚÞíŸÿÿÿÿÙ:ÝâíŸÿÿÿÿh„íŸMVíŸÿÿÿÿ#%íŸÿÿÿÿ+.íŸÿÿÿÿT\íŸÿÿÿÿGIíŸûíŸÿÿÿÿ<aíŸÿÿÿÿ=BíŸÿÿÿÿ¢©íŸÿÿÿÿ›©íŸÿÿÿÿ¬ËíŸÍÝퟩíŸÿÿÿÿY[íŸÿÿÿÿ4[íŸÿÿÿÿ*/íŸÿÿÿÿ'íŸÿÿÿÿt~íŸÿÿÿÿ~íŸÿÿÿÿðíŸ !íŸÿÿÿÿùíŸ!íŸÿÿÿÿ%)íŸÿÿÿÿz}íŸ02íŸÿÿÿÿÐÛíŸÿÿÿÿØÛíŸÿÿÿÿ íŸÿÿÿÿÙàíŸÿÿÿÿk|íŸÿÿÿÿòõíŸÿÿÿÿüíŸÿÿÿÿÂÈíŸÊõíŸÿÿÿÿ¤¦íŸÿÿÿÿ'-ŸÿÿÿÿPWíŸÿÿÿÿ(3íŸÿÿÿÿ(3ŸáæíŸÿÿÿÿcfíŸÓæíŸÿÿÿÿy~íŸÿÿÿÿ$íŸÿÿÿÿ$íŸÿÿÿÿ§ÑíŸÿÿÿÿÌÑíŸÿÿÿÿŸ —ퟕ§íŸßïíŸ 0íŸjzퟻÎíŸíïíŸýíŸ"5íŸUWíŸikíŸ}ퟗíŸ!—íŸ&—íŸ-—íŸG—í ŸT—í Ÿ_—í Ÿn—í Ÿ^kíŸòôí Ÿüí ŸÙ íŸt—íŸ{—ퟂ—퟉—íŸÂÉíŸáÿíŸWkíŸsŠíŸ´»íŸÓííŸ:íŸz”íŸæëíŸ%AíŸõ ퟗퟻÉíŸèÿíŸzŠíŸ­»íŸÚííŸ%:ퟔíŸÝëíŸ íŸ,AíŸüÿíŸ-/íŸèííŸ3:ퟔíŸÂÅíŸ>AíŸJOퟣ§íŸÃÌíŸíïíŸ.0íŸxzíŸ"/íŸÉÎíŸ05ퟵÅíŸ7AíŸw‚ퟜ§íŸ¼ÌíŸæïíŸ'0íŸ8AíŸLWíŸqzퟃŠíŸÂÎíŸ)5íŸÿÿÿÿI.0íŸÿÿÿÿI#0Ÿÿÿÿÿ-JíŸÿÿÿÿ-JŸ¢íŸÿÿÿÿKMUíŸÿÿÿÿK^ u íŸù û íŸÓÝíŸu…íŸÿÿÿÿKY†íŸÿÿÿÿKS k íŸn†íŸÿÿÿÿKŒ¶Ÿ.1íŸÜßíŸ+.íŸÿÿÿÿK›¶íŸÐä0Ÿ¥íŸs‚0Ÿ0Ÿ¥´0Ÿ  0ŸÇ â íŸ( 5 íŸ\ e íŸy ~ íŸß ü 0Ÿø íŸe € ퟳ Ë íŸú íŸmrퟖŸíŸõúíŸíŸ0Tퟌ‘ퟩíŸíòíŸþ ퟰÝíŸn–íŸMtퟛ¢íŸÅØíŸ™žíŸÌÓíŸeíŸ7^ퟌ“ퟪ¼íŸ\aíŸ–íŸØÞ0ŸÿÿÿÿK¢¶íŸqŠíŸÐä0Ÿ`uíŸÊãíŸs‚0Ÿ§ÀíŸ0Ÿ9Rퟥ´0ŸëíŸ)BíŸÀÙíŸ  0Ÿ± º íŸÛ â íŸ/ 5 íŸc e íŸp ~ ퟙ ² íŸß ü 0Ÿ¤ ½ íŸÿ íŸy € ퟺ Ë íŸ* C íŸ1JíŸ íŸ_rퟟíŸçúíŸ íŸ7TíŸ~‘ퟤ©íŸ©µíŸßòíŸ íŸ íŸ·ÝíŸ|–íŸZtíŸÌØíŸ‰žíŸsíŸD^ퟱ¼íŸLaíŸØÞ0ŸÿÿÿÿKíŸäôíŸÄÔíŸl u íŸì íŸÅÝíŸ`–íŸ?tퟞíŸWíŸ)^íŸSaíŸÿÿÿÿK©¶íŸe u íŸò û íŸÌÝퟔíŸÿÿÿÿK´¶íŸdŠíŸ½ãퟚÀíŸ,RíŸÞíŸëôíŸËÔíŸBퟳÙíŸÎ â ퟌ ² íŸs u ퟗ ½ íŸl € íŸ C íŸ$JíŸó íŸRríŸÚúíŸq‘íŸÒò퟾ÝíŸg–íŸFtíŸ|žíŸ^íŸ0^íŸ?aíŸÿÿÿÿKju퟽Üퟩµ0Ÿ 0ŸÿÿÿÿK–ퟘ›íŸ¤¯íŸ„íŸ  íŸ+ 1 íŸ3 5 íŸATퟳµíŸMO퟾ÁíŸÊÒíŸ íŸZbퟃ…íŸÿÿÿÿK““ퟓY–“ퟓóõ“õû“ퟓln“nt“ퟓ£Ø““  “ “ퟓP“ퟓÝß“ßå“ퟓVX“X^“ퟓ”¼““ÿÿÿÿK57íŸ?FíŸ|…íŸÿÿÿÿ_gíŸÿÿÿÿ_gisíŸÔ×íŸÿÿÿÿ_g¼ÂíŸÄ×íŸÿÿÿÿÛiT€0Ÿ¨±íŸõ,íŸÿÿÿÿÛi3UíŸÿÿÿÿ@k0Ÿ*TíŸÿÿÿÿ@kíŸOTíŸÿÿÿÿJMíŸÿÿÿÿMV0Ÿz|íŸ/0Ÿ1Ÿ6;íŸ]a1Ÿ/60Ÿdiퟒ™0ŸÝâíŸ2?0ŸbmíŸrƒíŸÅÒíŸí Ÿzƒ?ŸŽ–í ŸÅÒ1Ÿïôí ŸäæíŸŸ*/íŸimퟂ‡íŸŽŸíŸíŸ)1íŸíŸ€Ÿ2?0Ÿ[míŸüþíŸkퟟ«íŸôíŸR[ퟕŸíŸ2?0Ÿ˜«0ŸO[íŸ2?0 Ÿ_ퟸ¿íŸd퟈ “í Ÿ“Ïæ“v}“‡“Ÿ«“¬×“êþ“: @Ÿ“1Ÿ“0Ÿ“ÝæíŸ"'íŸ'.íŸÝâíŸâéíŸäæíŸñíŸÿÿÿÿbq Ÿ%+íŸJOíŸjoíŸÿÿÿÿøq/Ÿÿÿÿÿ£r•Ÿÿÿÿÿ£rÈÊíŸÿÿÿÿ£rÁÊíŸÿÿÿÿt(Ÿÿÿÿÿt(„Ÿÿÿÿÿt• Ÿÿÿÿÿt øŸÿÿÿÿt*IŸÿÿÿÿtI¥Ÿÿÿÿÿt¶ÁŸÿÿÿÿtÁŸÿÿÿÿwŸ[ˆíŸÿÿÿÿwiˆíŸ’íŸÿÿÿÿwwˆíŸ’íŸÿÿÿÿwÖÿŸÿÿÿÿwƒ¬Ÿÿÿÿÿry8DíŸÿÿÿÿry?DퟘíŸÿÿÿÿz <íŸÿÿÿÿz<íŸÿÿÿÿz<íŸÿÿÿÿz<Ÿ1>íŸÿÿÿÿz/<Ÿ˜íŸ”€íŸÿÿÿÿzu€íŸÿÿÿÿzЀíŸÿÿÿÿq}0Ÿ %íŸ%JíŸÿÿÿÿq}vÌíŸÿÿÿÿq}3JíŸÿÿÿÿq}Y„íŸÿÿÿÿq}Fí Ÿ’ÌíŸÿÿÿÿq}FíŸÿÿÿÿq}üퟀ„íŸÿÿÿÿq}ŸÌíŸÿÿÿÿq} 7íŸÿÿÿÿ'‚4Ÿÿÿÿÿ'‚¿ÊŸÿÿÿÿ'‚WbŸÿÿÿÿ'‚ÏØŸ”™íŸÿÿÿÿ'‚æ$Ÿÿÿÿÿ‹¯íŸÿÿÿÿë„*íŸÿÿÿÿë„*íŸ@KíŸÿÿÿÿL† ™íŸÿÿÿÿL†™íŸÿÿÿÿL†™íŸÿÿÿÿL†$™íŸÿÿÿÿL†+™íŸÿÿÿÿL†2™íŸÿÿÿÿL†S™Ÿjoí ŸÿÿÿÿL†S^ŸÞñí Ÿ¦¸íŸ‹íŸÿÿÿÿL†ˆí#Ÿ™íŸv|íŸ*<íŸÿÿÿÿL†¹ñí ŸíŸ|‚íŸÿÿÿÿL† ŸÿÿÿÿL†7<í ŸÿÿÿÿÞˆŸJOíŸÿÿÿÿÞˆP]ŸÿÿÿÿÞˆpsíŸÿÿÿÿëíŸ1íŸÿÿÿÿš‰)Ÿ†íŸ'/Ÿÿÿÿÿš‰3\íŸÿÿÿÿš‰<\íŸÿÿÿÿš‰)Ÿÿÿÿÿš‰ )Ÿÿÿÿÿš‰b†í ŸÿÿÿÿþŠŸ]bí Ÿ<@í Ÿ­¹ŸÿÿÿÿþŠ(8íŸÿÿÿÿþŠ8íŸÿÿÿÿþŠŸDbí ŸÿÿÿÿþŠŸÿÿÿÿþŠ>bí ŸÿÿÿÿþŠe–íŸÿÿÿÿþŠÇПÿÿÿÿþŠ ŸÿÿÿÿþŠ8CŸVXíŸinퟞ .debug_ranges24ßá•—¢¤D F ç é g i []!#ÙÚìí,.0a*ò*ô*Ž+-.†.¢.².ù0y1¡1µ1¶12)2;2¶7^8r8†8‰9â9ü9:k>‡>Œ>?C?V?ó?ø?“4Ó4Õ451IKÝß  Õ‰ÐׇÒÈ Ê +-,-k-m-û-ý-t/v/35Ò6Ô6×:=5B357BÜBÙ:=éHII+J-JíJîJþJK8g9g]g_g›hœhiiÙiÛi?k@k§kÝwÿwxsxŠx¬x±x yõ}D~F~N~/7J_kÝÞà€©€³€»€Î€ã€ï€aÎŽŽ$Ž Z\aíp`qbqöqøq¡r£rpstOvQvwwpyryzzÛ|Ý|o}q}%‚'‚é„rstë„J†L†ÜˆÞˆ˜‰ë'‘š‰üŠþŠê’’’’’"’#’-’) .debug_abbrev%U4I?: ; I!I7 &I$> $ > .@—B: ;I? 4I: ; : ;I 4: ;I ‰‚ ‰‚1II: ;I: ; I'I'.@—B: ; ?: ; I4: ; I4: ; I4: ; I.@—B: ;?4: ;I.: ; '<? : ;  I: ; 8  : ; I: ;8 %UII: ;$> I: ; I'I ' .@—B: ; I? : ; I 4: ; I 4: ; I‰‚ : ;  I: ; 8  : ; I: ;8 &I%U4I: ; I!I7 !I7&I$> $ > I I: ; & .@—B: ; 'I? .@—B: ; I?: ; I 4: ; I‰‚.@—B: ;I: ;I: ;I4: ;I.@—B: ;I?4: ;I‰‚1.@—B: ;I: ;%U$> .@—B: ; I?: ; I4: ; I: ; I‰‚.@—B: ; I I: ; I &I%U4I?: ; I!I7 &I$> $ > .@—B: ; I? 4I: ; : ; I : ; I 4: ; I ‰‚4I: ; I: ;  : ;  I: ; 8 II'II : ; (I: ; : ;  I: ; 8 I: ;8'!I7 : ; .@—B: ;I? : ;I!4: ;I"4: ;I#‰‚1$.: ;'<?%.@—B: ;&: ;I' ( U).@—B: ;I%I: ; I : ;  I: ; 8 $>  : ; I: ;  : ; I: ;8 I' I'.@—B: ; I?: ; I4: ; I‰‚%UI: ; I : ;  I: ; 8 $>  : ; I: ;  : ; I: ;8 I' I'.@—B: ; I?: ; I‰‚.@—B: ; I: ; I4: ; I‰‚1.: ; '<?.@—B: ; 4: ; I4: ;I.@—B: ;?: ;I.@—B: ;I?: ;I4: ;I&I%UI: ; I : ;  I: ; 8 $>  : ; I: ;  : ; I: ;8 I' I'.@—B: ;I?: ;I: ;I4: ;I4: ;I‰‚1‰‚.: ; '<?&I.@—B: ;I.@—B: ; I: ; I4: ; I4: ; I4: ;I I !I7 !$ > %UI: ; I : ;  I: ; 8 $>  : ; I: ;  : ; I: ;8 I' I'.@—B: ; I?: ; I: ; I4: ; I4: ; I‰‚1‰‚.: ; '<?&I.@—B: ; I4: ; I.@—B: ;I?: ;I4: ;I.@—B: ;'I?4: ;I &!I"!I7 #$ > %I : ; ($> I : ;  I: ; 8  I: ; 8 I: ;  : ; I: ; &I  : ; I!I7$ > .@—B: ; ?: ; I4: ; I4: ; I : ; <I'I'%U.@—B: ;I?4I: ;: ;I4: ;I4: ;I4: ;I : ; ‰‚ ‰‚1 I !I7 &I$> $ > .@—B: ; 4I: ; : ; I!I7I: ;  : ;  I: ; 8 I : ; (I : ;  I: ; 8 : ; I: ;I' I!'"<#.@—B: ; I?$4: ; I%: ; I&4: ; I'.: ; '<?(.@—B: ;I%4I?: ; I!I7 &I$> $ > .@—B: ; I? 4I: ;  : ; I 4: ; I 4: ; I I : ; (II: ;  : ;  I: ; 8 %U4I?: ; I!I7&II: ; $> $ > 4I: ;   : ; I: ; 8 I  : ; I: ;!I7 .@—B: ;?: ;I‰‚1.@—B: ;4: ;I 4: ;I: ;I U‰‚.@—B: ;I4: ;I.@—B: ;I? : ;  I: ; 8 I: ;8 I'!I"#'%II: ;$> I: ; I'I ' .@—B: ; I? : ; I 4: ; I 4: ; I‰‚ : ;  I: ; 8  : ; I: ;8 &I%U4I?: ; I!I7 &II$> $ > I: ;  .@—B: ; 'I? .@—B: ; 'I? 4: ; I.@—B: ; I?: ; I.@—B: ;I?: ;I‰‚.@—B: ;?‰‚1.: ; '<?Iš… .debug_line– fû /usr/local/google/home/azakai/Dev/emscripten/tests/zlib/usr/local/google/home/azakai/Dev/emscripten/system/lib/libc/musl/arch/emscripten/bits/usr/local/google/home/azakai/Dev/emscripten/system/include/wasi/usr/local/google/home/azakai/Dev/emscripten/system/include/libcsrc.czconf.halltypes.hapi.hzlib.hstdlib.h= "ŸL Ø3 Xg LÖ2Z°ºà ½6È ¸6 Ë ž ‘Ø  f $\ »˜Öè. 2”Ö*ì. 2É ’ ×\ ؆º5ú. 2Ö2 …û~º †J .ú~‚"†. 4ô~‚Œ. ô~.‘.ï~‚‘. 3 Éé~‚ —. 2Ö2[’Ü~È ä ž ‘›té -. ÖJ K–tí /. Ö< K’tõ ž ‘Štû -. Ö< K„tÿ t K€t‡ "/ ž >÷~t ž ‘ò~t’ ž ‘í~t˜ :. Ö< =ç~tœ ž ‘4« Qr xƒMs¯¬ Å~.»XY0tu ÉfÂ~3Âtu½~È ÄJ¼~<Ät /»~6 È ­K¶~ȶ Ê~6É 7áÑ NÚrzss xƒL<~.ãXY0tu›~ä æJš~<æ‚ !™~3 ê ­ LÖ2„~Èá Ÿ~6ë •~6 î ž ‘—ú Pr x$Ms{s v×K X4'.X; v×Ms v× LÝ}Ö ¤.   2»KÖ}È„ ü}7 ñ}6 ‘ ž ‘î}tš æ}6¡ ß}6 ¥ ž ‘Ú}t© 4± NÚrys wƒNÇv»}È ÆJº}<Æt /¹}3 Ê ­L t6X,X  2Ê­}ÈÀ À}6Ë µ}6 Î t =¤Ú Qr x»Ms®u .X =É LÉ v}È òJ ?­L.X=‡}Èå ›}6ì ”}6 ó }3ö 7F € NÚrys wŸMswÙ'.X =­ Lå|È œ.   3­LYÛ|È ñ|6™ ç|6  ž ’á|t¢ 7é ¬ Pr x» L0 L. Xvsxs ¯½|È Ä.   2­K¶|ȶ Ê|6º Æ|6 Å  wž . t‘º|tÉ 4i Ñ NÚrys wŸMsxš|. çJ™|‚éž#t t 2“|J ð f|3 ó ­ LÖ2„„|Èà  |6ê ž‘•|tô Œ|6 ÷ ž ‘]„ > ”ä 2‚ºG= ‚- gž ð{ “ (/eÄjí{ –fê{‚—f†¢'»"!"É.X»’»"ƒ„Ê{Ö Œ ž ‘ó{tœ åí9û .zconf.hzlib.hcompress.c#  Jos{yrq { g LOä 2J  0 MÖ6 .X >HÈ: Ú !òÌ !#.X7 *X!>W=™œû ./usr/local/google/home/azakai/Dev/emscripten/system/lib/libc/musl/arch/emscripten/bitscrc32.hcrc32.calltypes.hzconf.hÏ %íà !ž~fý.ƒ~ ï º‹ Auî}t’Xî}<'“.f'X <4¬/X#< uVî}X’Xî}J˜JXè}.˜t =ç}ž™Jç}Q™Jç}Q™Jç}Q™Jç}Q™Jç}Q™Jç}Q™Jç}Q™J Tæ}X˜J è}žœ<X Kã}žJ Tâ}XœJä}<œ ä}'£žf'X <4¬/X#<uÜ}X ¥fY¯ !º÷ m X 2ý|¬ †ž‚ Yrû|X…J BÙ Üì|ò•. X=ê|òš< X 2â|ÖŸ. X=à|º¡ [Ü|J š   Ù|t© · !ºë ”+. X<+.‚f;‘}XïJ >Ú x¡}tàJ X=XŸ}X ã  sUl¸.û .adler32.czconf.h.? B»t Éf X/.X¶ Ìf . t"³XÐJœv 0<€  Ô ¬t Ø. X¨.ä.fœ. å.›‚è䬬¬¬¬¬¬¬¬¬¬¬¬¬Éu–X ìXŒ‚œ.ñ t L䬬¬¬¬¬¬¬¬¬¬¬¬¬ÉrŽXñJ< ñ Ö÷‚..X!s‰Xö.ŠX ûf†ÿ X=€  Ù u..X!s¦XÙ. Xl¡tà. s. t# <€ ž !º†  <2X'XJy9-uñ~<JJ"#w î~t•. të~ —Ju&z .&tZ ï~t“. tí~ ”f< t# ¦ !ºŒPû .deflate.czutil.hzconf.hzlib.hdeflate.h1Ê !XKÛ  tu:Wš~.欚~< êJZu t0s’~¬ñ  t2.~¬ùX X‡~.ûf…~X€<V.X‚~Öƒ ý}tƒÖý}žƒtý}<ƒtý}<‰J YYyð}J‚W sr|.XUJ<Y.XA..1t :J<Y!.X?.J=.tYJ!t u’€x%JX i-KY#./ž  >#<2XG<Ú}XG¦XÚ}.¨ ƒJt = ¬Ë} ± „p.0.X I.(.X  QÌ}žµ ß w!t XZùxˆXøx‚“4tXíx.” žXìx.• žXëx.– žXêx.˜ Y® fåx<œ  ã w!t1XY'X0< WCr&tyu.X >¬ /J<‹}<÷ tX<w X†}.úf†}ž üt„}‚ø ±vƒ€}‚ƒ ‰» z1t¾}X1ÂXY Ƚ}<1Ĭ8t 4¸}XÉ %.Xž·}<ËX X3 TJ Xf X¢’s{.XXY»¦}t Ûº+BXXO× =!.t >& (uq°uwt2,9‚’JI9-‘<I9.ºM9.º<ˆ u!t XYt /ô|¬Ž ” u!t XYƒ6J'f<è|‚š Ò  y!t X`Ò|t®ÖAž"<#,*‚H®*äN Í|.´t sÍ|.¶tÊ|º ¸ ‚ </…:,ÊJI:-‘<I:.ºM:.ºÃ|<¿ Á|‚Á Ê É x1t²{t1ÎX^"="t+.:X«{. Ö -t$Xª{ž × ¦òƒy Ù  t.¤òƒy  Û uu“ X0 /‚f =­»­tK­­­­å“{äí.“{<í ¯­{žô j&)))‚{äþ.‚{<þ ¯& tX=#üz)†  t<!=/.9X,Y#W!fùz<Š ÷z. =tðz‚“Jž/ 5.;ž íz.•XXëz.—féz‚Ÿ  ƒ)åzX*œJ .Xäz $J  iit=-.‚g-.XÛzf§ ‚fÙz< « ž /t <=v%t-XX /& t 7/)tÏz.)±X%=3.=XIX8='W%fÎz<´ ƒ*Y$t Êz.¹ /uä%.-XX  Jt!<'</XX/+.5XAX0=WfÃz<¿ "X*X< 0ÀzÅ »z‚ Ç ž /t <=x&¬ t 7/)t²z.)΂%=3.=XIX8='W%f±z<Ñ ƒ*Y$t ­z.Øt"X1XäŸ ­¦zÛ t!<'</XX/+.5XAX0=Wf¤z<Þ L¡zä œz‚ æ ž /t <=x&¬ t 7/)t“z.)í‚%=3.=XIX8='W%f’z<ð ƒ*Y$t Žz.÷t"X4XäŸ ­‡zú t!<'</XX/+.5XAX0=Wf…z<ý K‚zž ÿy‚ ƒ ž /t <=%  X /úy‚‡ &  X /É&‚f=õyž ñy‚ ”  =ƒ X5àƒy -Ö $ÏXÛy$¥X 0Öòƒy  « º# ,. X=Ñòƒy ± /yX2lÏy<2±XÏy<µ ºËy‚2µºËyÖ-¶ ÊyÖ· 3J:‚¬Éy&¹<ŸÆy‚!¼<Äyt½JX/?ƒy É  X·y.ÊJ¶yºËȵy‚Í<ÚX/(X(0%s¬yt Ù ƒX/"ƒy -ÖX ŒXžy. ãJ y.ç¬ X/­&&&#&&‘y(ô +. Xg%. X‹yf÷  †¬ . J<…y<ü X„y<ý É w!t X\…®|¬Ô é C t4=:t& ?! XŒ|Jõ )Xâ{ ù ȇ|<þX‚|<‚< tþ{Jƒtý{.+„ttü{<… uú{Xˆ.ut÷{X‰.G2uõ{X.utò{XŽ.G3W.Xñ{X ˜f¬ .)t è{.™fAâ{ œ #.X7 *X!>W#!'X!,-§ =×­m-´ ?r!t Z t!Z*XX‘ ÉXÉÉÉ å"K1."X¾{<Ä ý-” A È/ƒX/ãqJ­.Óq ¤  vYÉ â õ×q.©J×q¬© &‚tJfÕqt« .ž.ZÓq  ¬XÔqX­ v/Ò   <ò /ƒ*t¡rÖŒ.ôq â žrXæ u¬' -. XYX˜r<é X=t! ).,.)X4 <.?.-ƒ Z%X4XJ<¼xXJÄX¼x. Æ ¬§x Ê .)X0t uX%X,t uX%X/t u"X9XX@v.tz .fI.fI.fF.:X't =..*ž  K!.2.!X ¯x‚Ù 5»  C.tt tCä 3ƒ#t°ttê .–t Ò ®tXÖ usè$Xu¥tòÞ s/.X v¡tfß #‚¡t<ä $XX3<0¬ œt.å J›tfå #‚mJf˜ttè .ž.Z–t  é X—tXê Ô6õ   <ò /ƒ.tþsÖË .µs … ûsXŒ X /ósY“ $t-X<<9 3.žès<› È 1¨ tX  <9WÙsJ9§ f >×sž « */@äYÏsº!¶ sæ.X‚YÈsÈ à YÉ Æ½s Ç ¹sXÇ J¹s¬Ç )‚¾JÄf·stÉ .ž.Zµs  Ê X¶sXË =Õ   <ò /ƒ.tsÖÈ .¸r æ šsXí X /’sYó .X9X>.9X=v0t5.0fD /X(<% 4.ž![&X-.6ž"%.2X/&X!X2Js.!‰ ÷rt ¬) /.\¼rtÆ XºrtÆ .ž.Z¸r  Ç X¹rXÈ 3  @ÞuX¥ ‚3*XF =X"X.!.".!X  0)X t‘ÉÉ ÈW¼uXÅ J»uJÇ .¹uXÇ JYÈ= X\X³u‚Ï f±uXÏ JYÈ@ XZªutØ X X< -"..X)X< 7X ƒË X/.%XXf Y“u¬ö <+f1.7X<Šu.ö   X‚ </1+ X? <5#›ùtXˆ X v‘".XJçt ,  fX 6'œ)Wut "‘êtä™ 7Bå = 0, Z t!–xJû.…x ì  t X’x‚ïº%.2XX‚‘xXó #.0XX‚x<ö .X‘ÉËÙ:¬ =ÒwX Ï.cXX‚ ±w<+¯.&]t!ä^X"‚ tZ<&XÑwX Æ‚¹užs"t -¬ž,t /‚,t /"XX,  /"XX øv.š "XX& ).4X1X= /XX& ).4X1X= /XX& ).4X1X= /XX& /âv‚* .ãvX= XãvJ º&U.æv*š æv› åv*› åvœ äv*œ äv ãvt¢ ± X/vtÖv.¯ t'‚Òvf4² X.*.t4X=.WKÍv.µ JËvX· ŽDû .gzguts.hzconf.hzlib.hgzclose.c  $of.g  ž %.†g 7 †ã>û ./usr/local/google/home/azakai/Dev/emscripten/system/lib/libc/musl/arch/emscripten/bits/usr/local/google/home/azakai/Dev/emscripten/system/include/wasi/usr/local/google/home/azakai/Dev/emscripten/system/include/libcgzguts.hzconf.hzlib.halltypes.hapi.hgzlib.cstdlib.hÆ !ºÚ ¢ g JätrΫ w¬–X ëfÖ×".X”X î ’Èðažô Œ¬÷ ‰!€ €ƒ ý~† ú~‰ ÷~t   ]tX'f X^.é~‚'—. f Y\ÙX /_‚f y à~žŸ t X/Ñ~‚³  X/Ì~· ž É~.¸Jå XÇ~ ½JÃ~‚Á Î !ºÖ ”X¥~.Û. fZ uס~‚á æ xw È’~¬ ò Ž~X òX4ˆ~¬ú þ xy‚ *. X2!X tô}f2Œ. 0ò}‚XÈ !ž 1ªµtÐ u¼‚;v– zw Èà}¬¨  TÜ}. ¤X6ƒ.XÓ}<®<X=XÑ}X° “ f*..t6 /X'<X Í}.µJ'X0.'X <Ë}t¶.  2r w»uä¤}<Ât Xq. f0X»}<ÆJ  º}.ÈJ¸}‚È. ¸}.Í ž 1 ,;X!.;f!X !X"gÉÉ­}t × vs¨}tÛ X¥}XÜ è > tY /“|‚î ’|tò  u|t ÷. X/tú{ ý ,.X4‚2‚@< f Xh«|ú{ ‚ ­X*Xü{† â #»ì xw ÈŒ}¬ø !tˆ}./øtˆ}tø ˆ}tù ý #ƒ‡ yw Èð|¬”Xì|t•J  0ž é|.š.æ| ˜ .Xè|<š ž #ƒ¨ xw ‚AX$<2X<.AXË|<¶ » xw Ƚ|¬ Ç u.X¸|<É  X·|ÈÊ Î @w ȱ¥|tÜ ¤|ºÝ Ùû ./usr/local/google/home/azakai/Dev/emscripten/system/include/libcgzguts.hzconf.hzlib.hgzread.cstdlib.hí zz‚ *. X†}.ÿf X/€}ò…<û|f‰t t= ­#. Xõ|f)‹. õ|.“X äY.JX  Y . X‘tXgé|º› t&<Xå|. t%,X6.;t,  à|.¢XÞ|‚ ¢. Þ|Jª<XÖ|.«JÕ|.«. Õ|J² s®Í|‚"³. 0.XË|t½q[ es sÆ|t¾X ¼JÈ.Ì @’ ¬[%H?f%X %X"gÉɧ}tÝ<t,<X£}<ãX}‚ ã. }.Ñ  J£}fç ± ? Ë}. ¶JÊ}‚¶. Ê}.¸J XÈ}.»  Å}‚ ¼ò#./X4tC  XÄ}fJ¼. 0.XÂ}X !fX;"f't  v½}‚Ã. ½}.Çf ?v#%.#X0<Xaf J  0åX g X/"J ä[f+.U  ( gWt+<ê @…¯!¬‹~.$õJ‹~‚4õ. ‹~.÷  t/ˆ~òýƒ~ž#þJ‚~‚ ÿ.~ò„tü}òˆtK «ø}fŒtXô}fŒ #.XY."<YÈž w Xì}. •Jë}#•.) ,.ë}ÈB•. ë}.– ê}ò™<tf /æ}òtt /â}ò¡¬ß}t§ Æ zy‚ *. X2 tYŸÉä§| Ý £| Þ.X X¢|<ß ä @—|f˜.è{ î ž ’|.˜.è{ *î  t’|<˜.è{ ò  = u#. X £ SŒ|.˜.è{  ô Œ|t˜.è{  ù  X‡|.˜.è{ ý  tKu.,X1t" 7< YuÈè{< † . .%t  </ù{ò˜.è{ Œ tX <*0)svt ñ{..ð{X.XX;.X Lï{t“ ÉåuÊž CÚ{fØ.¨{ ¦ Ú{fØ.¨{ ¦<Ú{tØ.¨{ « ž Õ{.Ø.¨{ *«  tÕ{<Ø.¨{ ¯  Ñ{<°J u#. XÏ{f)±. Ï{.¹t YÆ{X¼J /Ã{ž ½. Ã{.Ø.¨{ ¿ XÁ{.ÀJXÀ{JÈ  «.X t! ƒ/Y)./X¶{f Í ×ÉÉ Êu­{JÓX iª{tØXÜ xy‚ 3t&. X/”{ï ‘{tð é =‡ t0#.X‚Y).XfYŒÈõ uŠ‚÷ tYˆ‚ ù ‡òß.¡~ ü {r‚:‚ A = Xg Xg uø~òß.¡~ Žt ¬ò~. Jñ~‚. 0 Xï~<–  tt ê~.—Jå!Ÿ$fç~‚4™. ç~.› t%XX0‚ 0»¡ß~‚¡Jß~‚¡.ß~<¡ ß~.¡<X/Þ~òß.¡~ ¥ Û~¬¥JÛ~‚¥.Û~<¥ Û~¬¥tÛ~ä¦<f=Ù~òß.¡~  ª Ö~.ª.Ö~<ª Ö~ò« Õ~.«.Õ~<« Õ~ò¬ Ô~.¬.Ô~<¬ Ô~ò­ Ó~.­.Ó~<­ Ó~ò® Ò~.®.Ò~<® Ò~ò¯ Ñ~.¯.Ñ~<¯ Ñ~ò°<X!=Ï~¬±JÏ~‚±.Ï~<± Ï~¬±tÏ~ä"² Î~.².Î~<²‚Î~¬²‚Î~#² uuÌ~¬´JÌ~‚´.Ì~<´ Ì~¬´tÌ~ä ´‚XiX=È~ȸJÈ~‚¸.È~<¸ È~¬¸tÈ~ä¸ XhX=Å~È»JÅ~‚».Å~<» Å~¬»tÅ~ä» XhX=Â~.¾.Â~<¾ Â~ò¿ Á~¿.Á~<¿ Á~ò Å åƒsft¡~ Í t=²~tÕ .X=.XY tY%.X1  X‘us§~ÈÜ ¤~¬ßfô yy‚ 2 t= fu Xg Xúzfˆ »Xg Xƒõz‚ ŒJôzX 3 w tI.9J XG. :J#..X%Y eFf0;. 1 .XC<ÀXË y¯¬ÑJ¯‚Ñ.¯<Ñ ¯¬Ñt¯äÒ ®.Ò.®<Ò‚®¬Ò‚®#Ó ­.Ó.­<Ó­¬Ó­# Ô ¬¬ÔJ¬‚Ô.¬<Ô ¬¬Ôt¬ä Õt X 1 X !¨tÚ Óöû ./usr/local/google/home/azakai/Dev/emscripten/system/include/libc/usr/local/google/home/azakai/Dev/emscripten/system/lib/libc/musl/arch/emscripten/bitsgzguts.hzconf.hzlib.hgzwrite.cstdlib.halltypes.h’ {z! +. Xà~.¥. X/Ú~òÚ.¦~  « \t.Ñ~‚,¯. Ñ~.³  tÍ~<´J u#. XË~f)µ. Ë~.º   <Æ~.½JK(.XÂ~< "X <,-X=t "‘ÉÊYV»~tÇJ¹~ž3Ç.  sJ.t³~<ÍJ³~ž:Í. ³~.Ò sv ¬~ž(Ô. ¬~.Úf A.X‚Y.‚YhÈ  uf‚  tYd‚  cò5.K  $ ‚ :‚qX f Ê= XgWò5.K  1 c[U xfXY’ñ zˆ<øJˆž6ø. ˆ.ý ƒfŒ.ô~  þX!. J;X!t !X >€tJ tÿ~„ u .X=ú~È ‡Jù~ž(‡. ù~.ýXtô~ Œ = B¼.ÄJ¼‚,Ä. ¼.Ì<"¬:<´X:Ì‚´<%Î 7t.X=.X!t±žFÏJJ ±Ñ *Jä¯fì.” Ô t!/*.!X =). Xª<Ø !.X¨<Ü u£ºÞJ  /¡òì.” ä -Y… X/˜ì ß zz! +. X2 t= ­#. XŽ~f)ò. Ž~.ø !tt  /g$.X†~<%û ž X)<Y„~È tÿ}t ‚Jþ}ä‚.þ} …JŠ BI ƒï}‚’J‚™ Cß}‚§¬! +. X2t.Õ}‚,«. Õ}.¯  tÑ}<°J u#. XÏ}f)±. Ï}.¶ tÊ}<¶JÊ}ž6¶. Ê}. »XWÆ}X»J X=%t X³}º ÓJ 0)X f2u.X=§}ÈÛX¬ @Ï|fÇ.¹| ¶X¬! 2 TÊ|. ¶X6 t= ­#. XÀ|f)À. À|.Å ­º|tÇ Í yz! +. X2t<£|.5ÝJ+X <£|.á  t= ­#. X|f)ã. |.è  t>t<–|ž?ê. /^|  ìt”|¬ï s’|¬ñ õ yy €|.„J t=u&.Xú{‚ Š » fuXgXg»Xg Xƒï{‚ ŠJö{X ’.î{t“ øSû .inflate.hzlib.hzconf.hinftrees.hinffast.cÞBÅ <t !t/~ XV•tîX’Xôt%XŒfó.$X"tf‚9Wt!!XW.Y =%s„tƒ ý~.ÿ.tƒtWþ~t … û~X„‚¥X=ô~JYò~J¬ñ~.‘¬-s6º<ð~X• s's5J'f í~X˜<X)/2X<)>W2Y =)så~t¢ Þ~.ž.â~t¢tWß~t¤ò Ü~.›Jf‡.Þ~./œ.=J/f 'tä}<¢tWß~t¤ò ÷Jå}ò¥<fÞ~.ý~.+¦.9J+f #tÚ}<ƒtWþ~t …ºû~t¥ Û} ©ºX×}J¥ Û~§J-Y<Ù~.-¨¬6X<Ø~X©.YXÖ~.1«ž:º<YÔ~X(¯<6J(f ".9)-YÉ} ¼J >!.‚@ v. XW x.J f(?Ânû .inflate.cinftrees.hinffixed.hinflate.hzlib.hzconf.hinffast.héHè w!t X”X5îJvr&tt&¹6.&fxXu‘w4wvtywv…t€ I„ y!t Xö~XŽJ Xò~.fð~X–< W. X:"tí~<› å~t›tå~< !t+X1X <//á~t¤ s vÛ~ž¦ -J¬ xu -ŒyXõ.$X > -ŠyX÷.$<  =ˆyÖúJ#X†yû ­„y‚ sÿxt„ )X t üx.…fûxt…tûx%.†<ž.5f3X=Ó)X t üxJ‚ .þvfƒ t-.X>ssývtˆ <tøv<‰ .tžt÷vX‰ .÷vX‰ .!hs!YgÉvñv* ñvÖ0Ž !tòvt“ 0þX/"%Xïv.ž Èâvt  t'<Xàv<¡ .tžtßvX¡ .ßvX¡ .g%.X Þv.« ÕvòäŽ{ !­ïy– !­év£ !­Üv‰  ¬ ÷x.Š..3‚.< ÷x<‰ ÷xt ss¯òxò‘X­îx— sêxt™X7t)t.X < <çx.+›</g-+.t/u<äx.šžãx‚.#¸vãxX+›Jº/u<;åxt› è /àxä .X,’ž0ºWßxÖ¥Ûxº¦ÖºÚxä¦.X‘×'g)­Öxt¯t$Õ"t7;XÓxÖ²<ºÎxä².X”›ÍxX¶J$;"tËx<¹XºÇxä¹.X”›ÆxX½J%;#‚Äx<%¿f,X<04»xtÅ.4º0X sX0Y»xt™ 7X)t.X < <çxJ¿ #!%­¿xtÊ t 1‚/­±xØ ss¯ôY­£xá s9.X4v=.4tJfX¼Y­šxê –x¬ëX•x.ít“xt#ï<f‘*Ÿ*!t !/Œxž÷ „+K-'tò+u<†x. øž…x‚û.¸v…xt'ùJº+u<;‡xtù öƒxJýäƒx<.‚¬,/8ò4;t.Z;<<þw.ÿtýw‚ƒ.ýwº.‚J,1V8X4;t.Z;<<þw.€.^ûwÖŠ .t; ãøwÖ‹.fNñw’<X?sìwž˜<f=­æwž s0.Xãw<  tYÈßw‚¡.ßw‚¡JX“â"t¬KÝwÖ¨ s!.XÙwJ« +K-(tò+u<Ôw. ªžÓw‚­.¸vÓwt(«Jº+u<;Õwt« N Ñw<.´¬,/8ò5;t.Z;<<Ìw.±tËw‚µ.Ëwº.´J,1V8X5;t.Z;<<Ìw.².^ãÉwÖ»  ãÆwÖ¼.f=­Âwà s0ž ;.t¿w<Å tYȺw‚Æ.ºw‚ÆJX“â"t¬K¸wÖÓ ­wtÕ «wf×tu<&/#ut  /f#=%­¤w#í J#.X<40W:Y‘wtò Žwt#ó X..Xw<öÈu‰wtû rJX"…wfýJ..X<tu XTyX1.w˜ X<(v*‚(fXu ft O<·fßvtÀ X*5..X¿v.Á t¿v<  ž=½vÈ r.X"g r. X"gɵvtË X >³v-Í ³vÖ$Ì t´vtÎ -.&ž #X!º<K,u$ ,X7?)ÖX¯vfÔ 9gñ # ­»®_gè/ @“ X}.ñJ/ [Œ}Xø  t1r%JX ‡}<ÿ ..X!t </&X/X <‘u.XXê| ˆ &VZ5<>X ;-Y t !‘ uY*X3X <‘u#.X Xê| (ƒ.(.X<ï| ’<XX;.î|ž– œh×  v!t1X:X X[ t"X£vòÞ ¢vXß J¡vtâ iç  y!t XZt$<)t ‘v.ó  v.ô žgŸX Šv."û  .". Xf=ôu ÿ ‚ X/+.8X <’þu… .X <ûu¬‰ ÷utŒ º  x!t XZ ‚?­åut Ûi  {!t XZt´u.'Ì J,t ´u.Ï  /°ut Ñ .‘®u Ñ X%tX¯uJ Ô Jv «žYsv U¬uXÖ tªutÙ t g¦uÖÞ ,f;X XƒÉÉ1t '/u+‘tu˜u¬ê @k­  xÎut´ J u –ztº X&‚"X  <Ëu ´ J   ¬uõ  w!t X‡uXû Jt" ,.1X…u<ü €  {7ÖGXY)X4X Wøt<  J /Z tît.” t ŸKêt.« Õt<œ jåf(Xât.(ž f>.7f%t =&.0.9X&< ßt<£ .(.-X<J  ¡ .sX !Útt¨ u’¯  w!t X^Çtº¼ ¿  “!t XZ!‚u ºt‚'Æ <ºt,Ç 9f0X¹t<(Å »ttÈ Ï2û .inftrees.cinftrees.h©k& ÅÉ“t îJt È.#ÇXX Nt ó‚t.&òJXX YÖIŽf õ ‹žþ X‚. ÿJò!-XX‚< €XJ X€<…ÖYÖú~ ‡J  ù~.„ ü~<‰.X$.÷~º Xó~t%f t. %.#¬<WX@î~t “‚¬"X1‚ä5‚í~X#’ XX#‚Ë~tÓIX­~Ô<X¬~ Ëȵ~t)Ú<¦~Ûf.¬ <#2t¡~.áº'-Y'X ~Xéž—~Xê.–~<íJ+/-!Y+t gwXŽ~<ô‚; X < ¬wä (ƒ~t þ.t/t/.Ò}t °(X <1Í}t¸È.t“XÅ}<½‚; X >pò f ó¸}€ .È€~t„ X!.)X X .y.{ Z t«ò}XJ..Öð} ‘J 0sU X Xñ}<ÓÄt<é}<'˜X è}<˜º4t gsvà}.7 ‚‚ Õ~2äƒäƒ…tÊf­Yû .zutil.htrees.hdeflate.htrees.czconf.hzlib.hípƒ  „~f.fHf.fHf.fJƒbq 4 Ì9Ö <Û|X¥X Û|<4¦f9Ö <Ú|X¦J Ú|<2§.7Ö <Ù|X§J @ƒ€"‚?øqë ”y<íä“y‚íÖX.¬#“yží<“ytò»£rÊ  =ƒ …¬×òÞ u,Xit þx<ƒžýxfƒÖX.¬#ýxºƒ ýxt„ÈX.ff<#üxJ„ üxtˆˆ'‚"f0‚ òx. tX.¬#ñxº ñxtÈX.ff<#ðxJ ðxt”ìx‚– ƒQv£  =ò /ä'Ùvž© X /ååÔv¬® žw¡ yº 1t t  /". ‚Õx< ® *. fj*. f f¡!‚$<!'ž*<& tºxº-Ê ¶xX"ÐX°x"ÐX  X§xÖ6Þ¬'¢x.Þ‚¢x< à(.¬# xºà  xtáŸx<æ*.¬#šxºæ šxtç%.-¬; C¬ „&.?f f—xfò  „u‹x‚ü ryò  .X2< äƒw<Œ .ôv *ü t„wXüJ •#7. ‘!. ÿv.… ‚ äûv.!„ JüvX„ X  Kûv.Œ Xzñ# =u.Xu t‚{ €fX€{.fó &º Y¬ýz<…tûzt€ XXJº òz..È;º5,X)<Yº =¬=0X?‚0‚îzXŽžž<5ëztš.t*tÖ&tæzX ¡‚> þ „"‚Y "‚[2‚#È(È != f0X!‚-ž!t<=#>t| ƒ!¹w‚Êz< ¸  i. iXJ i  f<A¡+JfgÝ|¨ @.5fg.5fi&.fÏyf/»‚./Ö 0-AtÆyXº.Æy¾ .X*f<\q}· C ‚Áw<Á<<.fež ’K½wä ÃȽw‚ ú‚.¬Ö½w< Ã.½w‚ ýwXÇt¹wº ÈJ¸w< È‚¸wX È<¸w‚ ÈÖ‚.¬Ö¸wäÈ ¸wtʬ‚¶w.Ë‚.ºµw ÌJ´wJ̺J.¬Ö´wÈÌ<´wt Òž*²wXÏ.±w ÒJ®w¬ ÒÈ®w‚ ÒÖ‚.¬Ö®wäÒ ®wtÔ‚¬w.Õ‚.º«w ÖJªwJÖºJ.¬ÖªwÈÖ<ªwtÞž.f L w¬àÖ w‚àÖ‚.¬# wäà  wtá(.fK'‚Ì ³y<Ô<¬y‚ÔÖX.¬#¬yºÔ ¬ytÕ+X.¬#«yºÕ «ytÖ-X.¬#ªyºÖ ªyt׬X©y. Ù/§y‚ ÙÖX.¬Ö§yºÙ §yt(×XXP.1fXi.1fXhrs´  =ò /äÉv&¸ X /Çvò¼ ‡… =fž.Y¬.f  Y„õwò ë&Ö/J3 7t$É z.ñwX•.$¬ëw‚ªÖf*‚  ë„Î =°|Ò‚<®|.Ô,¬¬|. Õ«|A Õ¬ÿ¬|.Ùf§|(Ùtž§|. Ütº¤|XÒ‚<®|.á.ºYL†ð" >u-[sss"r@ tò@‚|< „J .. ‚ ¬$J>ú{f†¬fú{.ˆÈ -ù{äˆJ"f."t& !. X!Wx t 0ºñ{È‘J t .'. tï{t“ &.WY< ­"X<.8.<‚, "<ì{¬†f ú{. –.ê{tžXâ{‚žX ¬g Ÿº ÉÍsÛ{X¦._Ó{X ®.Ò{ ¯J‘.Ð{X°J‘XÏ{.(².$.(È<0+..YXÌ{¬¶XÊ{X¸ È{t ¯f,,XfÞˆÈ  È7. X#<*t(¬<< *W®{XÒJ ®{<ÜfX¤{.ÝJ É#Z1‚ä.ž {<Ü "t¤{XÜ. f ë•  “. Xçv š J=sævX› .åvX› .Yš‰Ê @zXž«zt×.X©z. ÔX¬zXÔJ¬zX/Ø&+‚/X ­X!X§zÛt /%º¤zºÝ ut7.;º¢zÈ%ß ¡zòà<X'/Ÿzò)ã zÖ æºšz‚+Ùò§z.×fXJþŠ÷  Xüy. ‚þyX‚XþyX/…XûyJ+…J/X ­X!Xúyˆtøy.‰t÷y‰È÷y‚‰Ö‚.¬Ö÷yä‰ ÷yt=‰4Xe1ut/óy.‚óyf<óy‚Ö‚.¬Öóyä óyt ¬ðy‚ ÖJfJ.¬Öðyä ðyt0+X.¬Öðy<0.ðyX0ðyX’Xîy. “Öíy‚ “ÖJfJ.¬Öíyä“ íyt2“+X.¬Öíy<2“.íyX2“íyX –Jêy‚ –ÖJfJ.¬Öêyä– êyt4–-X.¬Öêyº– êyt ™Öçy‚+†òúy.„fXJ­8û .zconf.hzlib.huncompr.c)‘  Jpszwq z K LPä 1J  / ×MºA3º XM<7‚.X >GÈ; òyû ./usr/local/google/home/azakai/Dev/emscripten/system/include/libczutil.czconf.hstdlib.h’ !’  ÏJ† =ò’¯4 "'Xf#’¸ !„Þi .debug_strclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)/tmp/emscripten_test/src.c/tmp/emscripten_testhellochar__ARRAY_SIZE_TYPE__dictionarymyVersiondictIdlong unsigned intuLongunsigned charByteBytefintuint8_t__wasi_whence_tunsigned intlong intvoidpfuIntalloc_funcfree_funcfreetest_compresstest_gziotest_deflatetest_inflatetest_large_deflatetest_large_inflatetest_flushtest_synctest_dict_deflatetest_dict_inflatemainuncomprLencomprLenlencompruncomprerrfnamefilevoidpgzFileposlong long intoff_tc_streamnext_inavail_intotal_innext_outavail_outtotal_outmsgstatedummyinternal_statezalloczfreeopaquedata_typeadlerreservedz_stream_sz_streamd_streamargcargvclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)compress.c/tmp/emscripten_test/building/zlibunsigned charByteBytefunsigned intuIntlong unsigned intuLongvoidpfalloc_funcfree_funccompress2intcompresscompressBoundstreamnext_inavail_intotal_innext_outavail_outtotal_outmsgcharstatedummyinternal_statezalloczfreeopaquedata_typeadlerreservedz_stream_sz_streamdestsourceLensourcedestLenuLongflevelerrclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)crc32.c/tmp/emscripten_test/building/zlibcrc_tablelong unsigned int__ARRAY_SIZE_TYPE__unsigned charunsigned intu4long intptrdiff_tget_crc_tableuLonguLongfcrc32crc32_littlecrc32_combinecrc32_combine_crc32_combine64gf2_matrix_squaregf2_matrix_timeslenuIntbufcrcendiancbuf4len2crc2crc1evenoddrownintmatsquarevecsumclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)adler32.c/tmp/emscripten_test/building/zlibunsigned intadler32long unsigned intuLongadler32_combineadler32_combine_adler32_combine64adlersum2lenuIntbufunsigned charByteBytefnlen2long intadler2adler1remsum1clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)deflate.c/tmp/emscripten_test/building/zlibdeflate_copyrightchar__ARRAY_SIZE_TYPE__my_versionconfiguration_tablegood_lengthunsigned shortushmax_lazynice_lengthmax_chainfuncunsigned intneed_moreblock_donefinish_startedfinish_doneblock_statestrmnext_inunsigned charByteBytefavail_inuInttotal_inlong unsigned intuLongnext_outavail_outtotal_outmsgstatezallocvoidpfalloc_funczfreefree_funcopaquedata_typeintadlerreservedz_stream_sz_streamz_streampstatuspending_bufpending_buf_sizeulgpending_outpendingwrapgzheadtexttimexflagsosextraextra_lenextra_maxnamename_maxcommentcomm_maxhcrcdonegz_header_sgz_headergz_headerpgzindexmethodlast_flushw_sizew_bitsw_maskwindowwindow_sizeprevPosPosfheadins_hhash_sizehash_bitshash_maskhash_shiftblock_startlong intmatch_lengthprev_matchIPosmatch_availablestrstartmatch_startlookaheadprev_lengthmax_chain_lengthmax_lazy_matchlevelstrategygood_matchnice_matchdyn_ltreefcfreqcodedldadlenct_data_sdyn_dtreebl_treel_descdyn_treect_datamax_codestat_descdummystatic_tree_desc_sstatic_tree_desctree_desc_sd_descbl_descbl_countheapheap_lenheap_maxdepthuchl_bufuchflit_bufsizelast_litd_bufushfopt_lenstatic_lenmatcheslast_eob_lenbi_bufbi_validhigh_waterinternal_statedeflate_statecompress_funcconfig_sconfigcharf_tr_init_tr_align_tr_stored_block_tr_flush_blockdeflateInit_deflateInit2_deflateEnddeflateResetdeflateSetDictionarylm_initdeflateSetHeaderdeflatePrimedeflateParamsdeflatedeflateTunedeflateBoundputShortMSBflush_pendingdeflate_huffdeflate_rledeflateCopydeflate_storeddeflate_fastdeflate_slowfill_windowread_buflongest_matchstream_sizeversionmemLevelwindowBitssoverlaydictLengthlengthdictionaryhash_headnvaluebitserrflushold_flushheaderlevel_flagsbegvalbstatesourceLencomplenwraplenstrbccbflushscanstrenddistsourcedestssdsmax_block_sizemax_startmax_insertwsizemorepmcurrinitsizebufscan_endchain_lengthbest_lenlimitscan_end1wmaskcur_matchmatchclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)gzclose.c/tmp/emscripten_test/building/zlibmodeintfdpathcharposlong intsizeunsigned intwantinunsigned charoutnexthaveeofstartrawhowdirectlevelstrategyskipseekerrmsgstrmnext_inByteBytefavail_inuInttotal_inlong unsigned intuLongnext_outavail_outtotal_outstatedummyinternal_statezallocvoidpfalloc_funczfreefree_funcopaquedata_typeadlerreservedz_stream_sz_streamgz_stategz_statepgzclosefilevoidpgzFileclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)gzlib.c/tmp/emscripten_test/building/zlibmodeintfdpathcharposlong intsizeunsigned intwantinunsigned charoutnexthaveeofstartrawhowdirectlevelstrategyskipseekerrmsgstrmnext_inByteBytefavail_inuInttotal_inlong unsigned intuLongnext_outavail_outtotal_outstatedummyinternal_statezallocvoidpfalloc_funczfreefree_funcopaquedata_typeadlerreservedz_stream_sz_streamgz_stategz_statepuint8_t__wasi_whence_tvoidpgzFilefreegzopengz_opengzopen64gzdopengzbuffergzrewindgz_resetgzseek64gz_errorgzseekgztell64gztellgzoffset64gzoffsetgzeofgzerrorgzclearerrgzfilewhenceoffsetretnerrnumclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)gzread.c/tmp/emscripten_test/building/zlibmodeintfdpathcharposlong intsizeunsigned intwantinunsigned charoutnexthaveeofstartrawhowdirectlevelstrategyskipseekerrmsgstrmnext_inByteBytefavail_inuInttotal_inlong unsigned intuLongnext_outavail_outtotal_outstatedummyinternal_statezallocvoidpfalloc_funczfreefree_funcopaquedata_typeadlerreservedz_stream_sz_streamgz_stategz_statepgz_errorfreegzreadgz_skipgz_makegz_loadgz_decompgzgetcgzungetcgzgetsgzdirectgz_headgzclose_rgz_availgz_next4lenbufvoidpfilegzFilez_streampgotnrethadcrc__ARRAY_SIZE_TYPE__cdestsrcstrlefteolflagsvalchclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)gzwrite.c/tmp/emscripten_test/building/zlibmodeintfdpathcharposlong intsizeunsigned intwantinunsigned charoutnexthaveeofstartrawhowdirectlevelstrategyskipseekerrmsgstrmnext_inByteBytefavail_inuInttotal_inlong unsigned intuLongnext_outavail_outtotal_outstatedummyinternal_statezallocvoidpfalloc_funczfreefree_funcopaquedata_typeadlerreservedz_stream_sz_streamgz_stategz_statepvoidpgz_errorfreegzwritegz_initgz_zerogz_compgzputcgzputsgzprintfgzflushgzsetparamsgzclose_wlenputbufvoidpcfilegzFilez_streampnretfirstflushgot__ARRAY_SIZE_TYPE__cstrformatva__builtin_va_listva_listclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)inffast.c/tmp/emscripten_test/building/zlibunsigned intHEADFLAGSTIMEOSEXLENEXTRANAMECOMMENTHCRCDICTIDDICTTYPETYPEDOSTOREDCOPY_COPYTABLELENLENSCODELENSLEN_LENLENEXTDISTDISTEXTMATCHLITCHECKLENGTHDONEBADMEMSYNCmodeinflate_modelastintwraphavedictflagsdmaxchecklong unsigned inttotalheadtexttimeuLongxflagsosextraunsigned charByteBytefextra_lenuIntextra_maxnamename_maxcommentcomm_maxhcrcdonegz_header_sgz_headergz_headerpwbitswsizewhavewnextwindowholdbitslengthoffsetlencodeopvalunsigned shortcodedistcodelenbitsdistbitsncodenlenndisthavenextlens__ARRAY_SIZE_TYPE__workcodessanebackwasinflate_statecharinflate_faststrmnext_inavail_intotal_innext_outavail_outtotal_outmsgstateinternal_statezallocvoidpfalloc_funczfreefree_funcopaquedata_typeadlerreservedz_stream_sz_streamz_streampstartoutbegdmasklmaskendindcodelcodeherelendistfromdolendodistclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)inflate.c/tmp/emscripten_test/building/zliborderunsigned short__ARRAY_SIZE_TYPE__lenfixopunsigned charbitsvalcodedistfixunsigned intHEADFLAGSTIMEOSEXLENEXTRANAMECOMMENTHCRCDICTIDDICTTYPETYPEDOSTOREDCOPY_COPYTABLELENLENSCODELENSLEN_LENLENEXTDISTDISTEXTMATCHLITCHECKLENGTHDONEBADMEMSYNCCODESLENSDISTSmodeinflate_modelastintwraphavedictflagsdmaxchecklong unsigned inttotalheadtexttimeuLongxflagsosextraByteBytefextra_lenuIntextra_maxnamename_maxcommentcomm_maxhcrcdonegz_header_sgz_headergz_headerpwbitswsizewhavewnextwindowholdlengthoffsetlencodedistcodelenbitsdistbitsncodenlenndisthavenextlensworkcodessanebackwasinflate_statevoidpfalloc_funcfree_funcinternal_statecharlong intinflate_fastnext_inavail_intotal_innext_outavail_outtotal_outmsgstatezalloczfreeopaquedata_typeadlerreservedz_stream_sinflateResetinflateReset2inflateInit2_inflateInit_inflatePrimeinflatefixedtablesupdatewindowinflateEndinflateSetDictionaryinflateGetHeaderinflateSyncsyncsearchinflateSyncPointinflateCopyinflateUndermineinflateMarkstrmz_streamz_streampwindowBitsstream_sizeversionretvaluehbufflushputinoutleftlencopyherefrominf_leavedistdictLengthdictionaryidbufgotsourcedestsubvertclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)inftrees.c/tmp/emscripten_test/building/zlibinflate_copyrightchar__ARRAY_SIZE_TYPE__lbaseunsigned shortlextdbasedextunsigned intCODESLENSDISTSunsigned charintinflate_tablecountoffslenworkbitstableopvalcodecodeslenstypecodetypesymrootmaxminleftextrabaseendhuffnextcurrdroplowusedmaskhereincrfillclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)trees.c/tmp/emscripten_test/building/zlib_dist_codeunsigned charuch__ARRAY_SIZE_TYPE___length_codestatic_l_descstatic_treefcfrequnsigned shortushcodedldadlenct_data_sct_dataextra_bitsintintfextra_baseelemsmax_lengthstatic_tree_desc_sstatic_tree_descextra_lbitsstatic_d_descextra_dbitsstatic_bl_descextra_blbitsstatic_ltreebl_orderstatic_dtreebase_lengthbase_distunsigned intdyn_treemax_codestat_desctree_desc_stree_desccharlong unsigned intulglong intByte_tr_initinit_block_tr_stored_blockcopy_block_tr_alignbi_flush_tr_flush_blockdetect_data_typebuild_treebuild_bl_treecompress_blocksend_all_treesbi_windup_tr_tallypqdownheapgen_bitlengen_codesbi_reversescan_treesend_treesstrmnext_inBytefavail_inuInttotal_inuLongnext_outavail_outtotal_outmsgstatezallocvoidpfalloc_funczfreefree_funcopaquedata_typeadlerreservedz_stream_sz_streamz_streampstatuspending_bufpending_buf_sizepending_outpendingwrapgzheadtexttimexflagsosextraextra_lenextra_maxnamename_maxcommentcomm_maxhcrcdonegz_header_sgz_headergz_headerpgzindexmethodlast_flushw_sizew_bitsw_maskwindowwindow_sizeprevPosPosfheadins_hhash_sizehash_bitshash_maskhash_shiftblock_startmatch_lengthprev_matchIPosmatch_availablestrstartmatch_startlookaheadprev_lengthmax_chain_lengthmax_lazy_matchlevelstrategygood_matchnice_matchdyn_ltreedyn_dtreebl_treel_descd_descbl_descbl_countheapheap_lenheap_maxdepthl_bufuchflit_bufsizelast_litd_bufushfopt_lenstatic_lenmatcheslast_eob_lenbi_bufbi_validhigh_waterinternal_statedeflate_statenlaststored_lenbufcharfvalheadermax_blindexopt_lenbstatic_lenbblack_maskdesctreestreenodemlxdtreeltreedistlclcodesblcodesdcodesrankkvjbaseoverflowbitshxbitsfnext_coderescountmax_countmin_countnextlenprevlencurlenclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)uncompr.c/tmp/emscripten_test/building/zlibunsigned charByteBytefunsigned intuIntlong unsigned intuLongvoidpfalloc_funcfree_funcuncompressintstreamnext_inavail_intotal_innext_outavail_outtotal_outmsgcharstatedummyinternal_statezalloczfreeopaquedata_typeadlerreservedz_stream_sz_streamdestsourceLensourcedestLenuLongferrclang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)zutil.c/tmp/emscripten_test/building/zlibz_errmsgchar__ARRAY_SIZE_TYPE__voidpffreezlibVersionzlibCompileFlagslong unsigned intuLongzErrorzcalloczcfreeflagserrintitemsunsigned intsizeopaqueptr§ nameŸ zexit__wasi_fd_seek__wasi_fd_close__wasi_fd_writeabortemscripten_get_sbrk_ptremscripten_resize_heapemscripten_memcpy_big__wasm_call_ctors test_compress test_deflate test_inflate test_large_deflate test_large_inflate test_flush test_synctest_dict_deflatetest_dict_inflatemain compress2compresscrc32 crc32_littleadler32 deflateInit_ deflateInit2_ deflateEnd deflateResetlm_initdeflateSetDictionary deflateParamsdeflate putShortMSB! flush_pending" deflate_huff# deflate_rle$ fill_window%deflate_stored& deflate_fast' longest_match( deflate_slow)read_buf* inflate_fast+ inflateReset, inflateReset2- inflateInit2_. inflateInit_/inflate0 fixedtables1 updatewindow2 inflateEnd3inflateSetDictionary4 inflateSync5 syncsearch6 inflate_table7_tr_init8 init_block9_tr_stored_block: copy_block; bi_windup< _tr_align=bi_flush>_tr_flush_block?detect_data_type@ build_treeA build_bl_treeBcompress_blockCsend_all_treesD pqdownheapE gen_bitlenF gen_codesG scan_treeH send_treeI bi_reverseJ uncompressK zlibVersionLzlibCompileFlagsMzcallocNzcfreeOstrlenPstrcmpQmemchrR__errno_locationS pthread_selfTdummyUputsVfputsW __towriteX __fwritexYfwriteZ__emscripten_stdout_close[__emscripten_stdout_seek\ __lockfile] __unlockfile^iprintf_fiprintf` __overflowaisdigitbwcrtombc__pthread_selfdwctombe__vfprintf_internalf printf_coregouthgetintipop_argjpadkfmt_olfmt_xmfmt_un vfiprintfo __stdio_closep __stdio_seekq __stdio_writer__wasi_syscall_retsdlmalloctdlfreeudlcallocvsbrkwmemcpyxmemsetysetThrew¶ producerslanguageC99 processed-byclang†11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project c8695ba9cdebfc25af3312a84d91ae6f0f98487b)binaryen-version_108/test/unit/input/empty.wasm000066400000000000000000000000101423707623100220600ustar00rootroot00000000000000asmbinaryen-version_108/test/unit/input/empty_lld.wat000066400000000000000000000003651423707623100225540ustar00rootroot00000000000000(module (global $global$0 (mut i32) (i32.const 66192)) (global $global$1 i32 (i32.const 652)) (export "__data_end" (global $global$1)) (export "main" (func $main)) (func $main (param $0 i32) (param $1 i32) (result i32) (i32.const 0) ) ) binaryen-version_108/test/unit/input/exception_handling_target_feature.wasm000066400000000000000000000001311423707623100276510ustar00rootroot00000000000000asm``  A name0%target_features+exception-handlingbinaryen-version_108/test/unit/input/gc_target_feature.wasm000066400000000000000000000001361423707623100244050ustar00rootroot00000000000000asm oÐo mÐm nameglobal$0global$1&target_features+reference-types+gcbinaryen-version_108/test/unit/input/hello_world.wat000066400000000000000000000003441423707623100230720ustar00rootroot00000000000000(module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (memory $0 256 256) (export "add" (func $add)) (func $add (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y) ) ) ) binaryen-version_108/test/unit/input/mutable_globals_target_feature.wasm000066400000000000000000000001631423707623100271500ustar00rootroot00000000000000asm`env global-mut  #Aj$ name0  gimport$0"target_features+mutable-globalsbinaryen-version_108/test/unit/input/random_data.txt000066400000000000000000000001031423707623100230460ustar00rootroot000000000000006sgkjdfghk34589n-947-vn98f2yr-nb8f7t08b7gv*~&!%&^@}{PASD kjgsdf768 binaryen-version_108/test/unit/input/reference_types_target_feature.wasm000066400000000000000000000002621423707623100271760ustar00rootroot00000000000000asm`ooenvtest1envtest2otest1test2   8nametest1 anyref_test00  gimport$1"target_features+reference-typesbinaryen-version_108/test/unit/input/signext_target_feature.wasm000077500000000000000000000003061423707623100254770ustar00rootroot00000000000000asm`pA€ˆ A€ˆ A€ +memory __heap_base __data_endfoo  À :namefoo00global$0global$1global$2target_features+sign-extbinaryen-version_108/test/unit/input/simd_target_feature.wasm000077500000000000000000000003051423707623100247510ustar00rootroot00000000000000asm`{pA€ˆ A€ˆ A€ +memory __heap_base __data_endfoo A*ý :namefoo00global$0global$1global$2target_features+simd128binaryen-version_108/test/unit/input/stack_ir.wat000066400000000000000000000004061423707623100223560ustar00rootroot00000000000000(module (import "env" "bar" (func $bar (param i32) (result i32))) (func "foo1" (result i32) (local $x i32) (local.set $x (call $bar (i32.const 0))) (drop (call $bar (i32.const 1)) ) (local.get $x) ;; local2stack can help here ) ) binaryen-version_108/test/unit/input/tail_call_target_feature.wasm000077500000000000000000000001661423707623100257460ustar00rootroot00000000000000asm` envbarmemoryfoo  name barfoo0target_features+ tail-callbinaryen-version_108/test/unit/input/truncsat_target_feature.wasm000077500000000000000000000003321423707623100256600ustar00rootroot00000000000000asm`}pA€ˆ A€ˆ A€ +memory __heap_base __data_endfoo  ü Bnamefoo000global$0global$1global$2&target_features+nontrapping-fptointbinaryen-version_108/test/unit/input/update.sh000066400000000000000000000031541423707623100216630ustar00rootroot00000000000000#!/bin/bash # This file updates the target_feature tests in the rare but unfortunate case # that their roundtripped binary representations do not match the input anymore # due to otherwise unrelated binary format changes. WASM_OPT="../../../bin/wasm-opt" # edit when building out of tree $WASM_OPT atomics_target_feature.wasm --enable-threads -g --emit-target-features -o atomics_target_feature.wasm $WASM_OPT bulkmem_data.wasm --enable-bulk-memory -g --emit-target-features -o bulkmem_data.wasm $WASM_OPT bulkmem_target_feature.wasm --enable-bulk-memory -g --emit-target-features -o bulkmem_target_feature.wasm $WASM_OPT exception_handling_target_feature.wasm --enable-exception-handling --enable-reference-types -g --emit-target-features -o exception_handling_target_feature.wasm $WASM_OPT gc_target_feature.wasm --enable-reference-types --enable-gc -g --emit-target-features -o gc_target_feature.wasm $WASM_OPT mutable_globals_target_feature.wasm --enable-mutable-globals -g --emit-target-features -o mutable_globals_target_feature.wasm $WASM_OPT reference_types_target_feature.wasm --enable-reference-types -g --emit-target-features -o reference_types_target_feature.wasm $WASM_OPT signext_target_feature.wasm --enable-sign-ext -g --emit-target-features -o signext_target_feature.wasm $WASM_OPT simd_target_feature.wasm --enable-simd -g --emit-target-features -o simd_target_feature.wasm $WASM_OPT truncsat_target_feature.wasm --enable-nontrapping-float-to-int -g --emit-target-features -o truncsat_target_feature.wasm $WASM_OPT tail_call_target_feature.wasm --enable-tail-call -g --emit-target-features -o tail_call_target_feature.wasm binaryen-version_108/test/unit/test_asyncify.py000066400000000000000000000114411423707623100221420ustar00rootroot00000000000000import os import subprocess import tempfile from scripts.test import shared from . import utils class AsyncifyTest(utils.BinaryenTestCase): def test_asyncify_js(self): def test(args): print(args) shared.run_process(shared.WASM_OPT + args + [self.input_path('asyncify-sleep.wat'), '--asyncify', '-o', 'a.wasm']) shared.run_process(shared.WASM_OPT + args + [self.input_path('asyncify-coroutine.wat'), '--asyncify', '-o', 'b.wasm']) shared.run_process(shared.WASM_OPT + args + [self.input_path('asyncify-stackOverflow.wat'), '--asyncify', '-o', 'c.wasm']) print(' file size: %d' % os.path.getsize('a.wasm')) if shared.NODEJS: shared.run_process([shared.NODEJS, self.input_path('asyncify.js')]) test(['-g']) test([]) test(['-O1']) test(['--optimize-level=1']) test(['-O3']) test(['-Os', '-g']) def test_asyncify_pure_wasm(self): def test(input_file): shared.run_process(shared.WASM_OPT + [input_file, '--asyncify', '-o', 'a.wasm']) shared.run_process(shared.WASM_DIS + ['a.wasm', '-o', 'a.wat']) output = shared.run_process(shared.WASM_SHELL + ['a.wat'], capture_output=True).stdout with open(self.input_path('asyncify-pure.txt'), 'r') as f: self.assert_equal_ignoring_line_endings(f.read(), output) # test wat input wat = self.input_path('asyncify-pure.wat') test(wat) # test wasm input shared.run_process(shared.WASM_AS + [wat, '-o', 'a.wasm']) test('a.wasm') def test_asyncify_list_bad(self): for arg, warning in [ ('--pass-arg=asyncify-removelist@nonexistent', 'nonexistent'), ('--pass-arg=asyncify-onlylist@nonexistent', 'nonexistent'), ('--pass-arg=asyncify-removelist@main', None), ('--pass-arg=asyncify-onlylist@main', None), ('--pass-arg=asyncify-removelist@m*n', None), ('--pass-arg=asyncify-onlylist@m*n', None), ('--pass-arg=asyncify-onlylist@main*', None), ('--pass-arg=asyncify-onlylist@*main', None), ('--pass-arg=asyncify-removelist@non*existent', 'non*existent'), ('--pass-arg=asyncify-onlylist@non*existent', 'non*existent'), ('--pass-arg=asyncify-onlylist@DOS_ReadFile(unsigned short, unsigned char*, unsigned short*, bool)', None), ]: print(arg, warning) err = shared.run_process(shared.WASM_OPT + ['-q', self.input_path('asyncify-pure.wat'), '--asyncify', arg], stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.strip() if warning: self.assertIn('warning', err) self.assertIn(warning, err) else: self.assertNotIn('warning', err) def test_asyncify_onlylist_and_other(self): def test(list_name): args = shared.WASM_OPT + [self.input_path('asyncify-pure.wat'), '--asyncify', '--pass-arg=asyncify-onlylist@main', '--pass-arg=asyncify-%slist@main' % list_name] proc = shared.run_process(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, check=False) self.assertNotEqual(proc.returncode, 0, 'must error on using both lists at once') self.assertIn('It makes no sense to use both an asyncify only-list together with another list', proc.stdout) test('remove') test('add') def test_asyncify_imports(self): def test(args): return shared.run_process(shared.WASM_OPT + [self.input_path('asyncify-sleep.wat'), '--asyncify', '--print'] + args, stdout=subprocess.PIPE).stdout normal = test(['--pass-arg=asyncify-imports@env.sleep']) temp = tempfile.NamedTemporaryFile().name with open(temp, 'w') as f: f.write('env.sleep') response = test(['--pass-arg=asyncify-imports@@%s' % temp]) self.assertEqual(normal, response) without = test(['--pass-arg=asyncify-imports@without.anything']) self.assertNotEqual(normal, without) def test_asyncify_too_many_locals(self): # With 64K+ locals we cannot run the liveness analysis optimization, but # should at least not fatally error. temp = tempfile.NamedTemporaryFile().name with open(temp, 'w') as f: f.write('(module\n') f.write(' (import "env" "foo" (func $import))\n') f.write(' (func $many-locals\n') for i in range(65 * 1024): f.write(f' (local $x{i} i32)\n') f.write(' (call $import)\n') f.write(' )\n') f.write(')\n') shared.run_process(shared.WASM_OPT + [temp, '--asyncify']) binaryen-version_108/test/unit/test_datacount.py000066400000000000000000000010671423707623100223020ustar00rootroot00000000000000from scripts.test import shared from . import utils class DataCountTest(utils.BinaryenTestCase): def test_datacount(self): self.roundtrip('bulkmem_data.wasm') def test_bad_datacount(self): path = self.input_path('bulkmem_bad_datacount.wasm') p = shared.run_process(shared.WASM_OPT + ['-g', '-o', '-', path], check=False, capture_output=True) self.assertNotEqual(p.returncode, 0) self.assertIn('Number of segments does not agree with DataCount section', p.stderr) binaryen-version_108/test/unit/test_dwarf.py000066400000000000000000000050261423707623100214220ustar00rootroot00000000000000import os import subprocess from scripts.test import shared from . import utils class DWARFTest(utils.BinaryenTestCase): def test_no_crash(self): # run dwarf processing on some interesting large files, too big to be # worth putting in passes where the text output would be massive. We # just check that no assertion are hit. path = self.input_path('dwarf') for name in os.listdir(path): args = [os.path.join(path, name)] + \ ['-g', '--dwarfdump', '--roundtrip', '--dwarfdump'] shared.run_process(shared.WASM_OPT + args, capture_output=True) def test_dwarf_incompatibility(self): warning = 'not fully compatible with DWARF' path = self.input_path(os.path.join('dwarf', 'cubescript.wasm')) args = [path, '-g'] # flatten warns err = shared.run_process(shared.WASM_OPT + args + ['--flatten'], stderr=subprocess.PIPE).stderr self.assertIn(warning, err) # safe passes do not err = shared.run_process(shared.WASM_OPT + args + ['--metrics'], stderr=subprocess.PIPE).stderr self.assertNotIn(warning, err) def test_strip_dwarf_and_opts(self): # some optimizations are disabled when DWARF is present (as they would # destroy it). we scan the wasm to see if there is any DWARF when # making the decision whether to run them. this test checks that we also # check if --strip* is being run, which would remove the DWARF anyhow path = self.input_path(os.path.join('dwarf', 'cubescript.wasm')) # strip the DWARF, then run all the opts to check as much as possible args = [path, '--strip-dwarf', '-Oz'] # run it normally, without -g. in this case no DWARF will be preserved # in a trivial way shared.run_process(shared.WASM_OPT + args + ['-o', 'a.wasm']) # run it with -g. in this case we need to be clever as described above, # and see --strip-dwarf removes the need for DWARF shared.run_process(shared.WASM_OPT + args + ['-o', 'b.wasm', '-g']) # run again on the last output without -g, as we don't want the names # section to skew the results shared.run_process(shared.WASM_OPT + ['b.wasm', '-o', 'c.wasm']) # compare the sizes. there might be a tiny difference in size to to # minor roundtrip changes, so ignore up to a tiny % a_size = os.path.getsize('a.wasm') c_size = os.path.getsize('c.wasm') self.assertLess((100 * abs(a_size - c_size)) / c_size, 1) binaryen-version_108/test/unit/test_features.py000066400000000000000000000314171423707623100221400ustar00rootroot00000000000000import os from scripts.test import shared from . import utils class FeatureValidationTest(utils.BinaryenTestCase): def check_feature(self, module, error, flag, const_flags=[]): p = shared.run_process(shared.WASM_OPT + ['--mvp-features', '--print', '-o', os.devnull] + const_flags, input=module, check=False, capture_output=True) self.assertIn(error, p.stderr) self.assertIn('Fatal: error validating input', p.stderr) self.assertNotEqual(p.returncode, 0) p = shared.run_process( shared.WASM_OPT + ['--mvp-features', '--print', '-o', os.devnull] + const_flags + [flag], input=module, check=False, capture_output=True) self.assertEqual(p.returncode, 0) def check_simd(self, module, error): self.check_feature(module, error, '--enable-simd') def check_sign_ext(self, module, error): self.check_feature(module, error, '--enable-sign-ext') def check_bulk_mem(self, module, error): self.check_feature(module, error, '--enable-bulk-memory') def check_exception_handling(self, module, error): self.check_feature(module, error, '--enable-exception-handling') def check_tail_call(self, module, error): self.check_feature(module, error, '--enable-tail-call') def check_reference_types(self, module, error): self.check_feature(module, error, '--enable-reference-types') def check_multivalue(self, module, error): self.check_feature(module, error, '--enable-multivalue') def check_multivalue_exception_handling(self, module, error): self.check_feature(module, error, '--enable-multivalue', ['--enable-exception-handling']) def check_gc(self, module, error): # GC implies reference types self.check_feature(module, error, '--enable-gc', ['--enable-reference-types']) def test_v128_signature(self): module = ''' (module (func $foo (param $0 v128) (result v128) (local.get $0) ) ) ''' self.check_simd(module, 'all used types should be allowed') def test_v128_global(self): module = ''' (module (global $foo (mut v128) (v128.const i32x4 0 0 0 0)) ) ''' self.check_simd(module, 'all used types should be allowed') def test_v128_local(self): module = ''' (module (func $foo (local v128) ) ) ''' self.check_simd(module, 'all used types should be allowed') def test_simd_const(self): module = ''' (module (func $foo (drop (v128.const i32x4 0 0 0 0)) ) ) ''' self.check_simd(module, 'all used features should be allowed') def test_simd_load(self): module = ''' (module (memory 1 1) (func $foo (drop (v128.load (i32.const 0))) ) ) ''' self.check_simd(module, 'SIMD operation (SIMD is disabled)') def test_simd_splat(self): module = ''' (module (func $foo (drop (i32x4.splat (i32.const 0))) ) ) ''' self.check_simd(module, 'all used features should be allowed') def test_sign_ext(self): module = ''' (module (func $foo (drop (i32.extend8_s (i32.const 7))) ) ) ''' self.check_sign_ext(module, 'all used features should be allowed') def test_bulk_mem_inst(self): module = ''' (module (memory 1 1) (func $foo (memory.copy (i32.const 0) (i32.const 8) (i32.const 8)) ) ) ''' self.check_bulk_mem(module, 'Bulk memory operation (bulk memory is disabled') def test_bulk_mem_segment(self): module = ''' (module (memory 256 256) (data "42") ) ''' self.check_bulk_mem(module, 'nonzero segment flags (bulk memory is disabled)') def test_tail_call(self): module = ''' (module (func $bar) (func $foo (return_call $bar) ) ) ''' self.check_tail_call(module, 'return_call* requires tail calls to be enabled') def test_tail_call_indirect(self): module = ''' (module (type $T (func)) (table $0 1 1 funcref) (func $foo (return_call_indirect (type $T) (i32.const 0) ) ) ) ''' self.check_tail_call(module, 'return_call* requires tail calls to be enabled') def test_reference_types_externref(self): module = ''' (module (import "env" "test1" (func $test1 (param externref) (result externref))) (import "env" "test2" (global $test2 externref)) (export "test1" (func $test1 (param externref) (result externref))) (export "test2" (global $test2)) (func $externref_test (param $0 externref) (result externref) (return (call $test1 (local.get $0) ) ) ) ) ''' self.check_reference_types(module, 'all used types should be allowed') def test_tag(self): module = ''' (module (tag $e (param i32)) (func $foo (throw $e (i32.const 0)) ) ) ''' self.check_exception_handling(module, 'Module has tags') def test_multivalue_import(self): module = ''' (module (import "env" "foo" (func $foo (result i32 i64))) ) ''' self.check_multivalue(module, 'Imported multivalue function ' + '(multivalue is not enabled)') def test_multivalue_function(self): module = ''' (module (func $foo (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) ''' self.check_multivalue(module, 'Multivalue function results ' + '(multivalue is not enabled)') def test_multivalue_tag(self): module = ''' (module (tag $foo (param i32 i64)) ) ''' self.check_multivalue_exception_handling(module, 'Multivalue tag type ' + '(multivalue is not enabled)') def test_multivalue_block(self): module = ''' (module (func $foo (drop (block (result i32 i64) (tuple.make (i32.const 42) (i64.const 42) ) ) ) ) ) ''' self.check_multivalue(module, 'Multivalue block type ' + '(multivalue is not enabled)') def test_i31_global(self): module = ''' (module (global $foo (ref null i31) (ref.null i31)) ) ''' self.check_gc(module, 'all used types should be allowed') def test_i31_local(self): module = ''' (module (func $foo (local $0 (ref null i31)) ) ) ''' self.check_gc(module, 'all used types should be allowed') def test_eqref_global(self): module = ''' (module (global $foo eqref (ref.null eq)) ) ''' self.check_gc(module, 'all used types should be allowed') def test_eqref_local(self): module = ''' (module (func $foo (local $0 eqref) ) ) ''' self.check_gc(module, 'all used types should be allowed') class TargetFeaturesSectionTest(utils.BinaryenTestCase): def test_atomics(self): filename = 'atomics_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['threads']) self.assertIn('i32.atomic.rmw.add', self.disassemble(filename)) def test_bulk_memory(self): filename = 'bulkmem_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['bulk-memory']) self.assertIn('memory.copy', self.disassemble(filename)) def test_nontrapping_fptoint(self): filename = 'truncsat_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['nontrapping-float-to-int']) self.assertIn('i32.trunc_sat_f32_u', self.disassemble(filename)) def test_mutable_globals(self): filename = 'mutable_globals_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['mutable-globals']) self.assertIn('(import "env" "global-mut" (global $gimport$0 (mut i32)))', self.disassemble(filename)) def test_sign_ext(self): filename = 'signext_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['sign-ext']) self.assertIn('i32.extend8_s', self.disassemble(filename)) def test_simd(self): filename = 'simd_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['simd']) self.assertIn('i32x4.splat', self.disassemble(filename)) def test_tailcall(self): filename = 'tail_call_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['tail-call']) self.assertIn('return_call', self.disassemble(filename)) def test_reference_types(self): filename = 'reference_types_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['reference-types']) self.assertIn('anyref', self.disassemble(filename)) def test_exception_handling(self): filename = 'exception_handling_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['exception-handling']) self.assertIn('throw', self.disassemble(filename)) def test_gc(self): filename = 'gc_target_feature.wasm' self.roundtrip(filename) self.check_features(filename, ['reference-types', 'gc']) disassembly = self.disassemble(filename) self.assertIn('anyref', disassembly) self.assertIn('eqref', disassembly) def test_superset(self): # It is ok to enable additional features past what is in the section. shared.run_process( shared.WASM_OPT + ['--print', '--detect-features', '-mvp', '--enable-simd', '--enable-sign-ext', self.input_path('signext_target_feature.wasm')]) def test_superset_even_without_detect_features(self): # It is ok to enable additional features past what is in the section, # even without passing --detect-features (which is now a no-op). path = self.input_path('signext_target_feature.wasm') shared.run_process( shared.WASM_OPT + ['--print', '--enable-simd', '-o', os.devnull, path]) def test_superset_with_detect_features(self): path = self.input_path('signext_target_feature.wasm') shared.run_process( shared.WASM_OPT + ['--print', '--detect-features', '--enable-simd', '-o', os.devnull, path]) def test_explicit_detect_features(self): self.check_features('signext_target_feature.wasm', ['simd', 'sign-ext'], opts=['-mvp', '--detect-features', '--enable-simd']) def test_emit_all_features(self): p = shared.run_process(shared.WASM_OPT + ['--emit-target-features', '-all', '-o', '-'], input="(module)", check=False, capture_output=True, decode_output=False) self.assertEqual(p.returncode, 0) p2 = shared.run_process(shared.WASM_OPT + ['--print-features', '-o', os.devnull], input=p.stdout, check=False, capture_output=True) self.assertEqual(p2.returncode, 0) self.assertEqual([ '--enable-threads', '--enable-mutable-globals', '--enable-nontrapping-float-to-int', '--enable-simd', '--enable-bulk-memory', '--enable-sign-ext', '--enable-exception-handling', '--enable-tail-call', '--enable-reference-types', '--enable-multivalue', '--enable-gc', '--enable-memory64', '--enable-typed-function-references', '--enable-relaxed-simd', '--enable-extended-const', ], p2.stdout.splitlines()) binaryen-version_108/test/unit/test_finalize.py000066400000000000000000000015321423707623100221160ustar00rootroot00000000000000from scripts.test import shared from . import utils class EmscriptenFinalizeTest(utils.BinaryenTestCase): def do_output_test(self, args): # without any output file specified, don't error, don't write the wasm, # but do emit metadata p = shared.run_process(shared.WASM_EMSCRIPTEN_FINALIZE + [ self.input_path('empty_lld.wat'), '--global-base=1024' ] + args, capture_output=True) # metadata is always present self.assertIn('{', p.stdout) self.assertIn('}', p.stdout) return p.stdout def test_no_output(self): stdout = self.do_output_test([]) # module is not present self.assertNotIn('(module', stdout) def test_text_output(self): stdout = self.do_output_test(['-S']) # module is present self.assertIn('(module', stdout) binaryen-version_108/test/unit/test_fuzz_empty_data.py000066400000000000000000000006211423707623100235200ustar00rootroot00000000000000import os import tempfile from scripts.test import shared from . import utils class EmptyDataFuzzTest(utils.BinaryenTestCase): def test_empty_data(self): try: temp = tempfile.NamedTemporaryFile(delete=False).name shared.run_process(shared.WASM_OPT + ['-ttf', temp], capture_output=True) finally: os.unlink(temp) binaryen-version_108/test/unit/test_initial_fuzz.py000066400000000000000000000025631423707623100230310ustar00rootroot00000000000000import subprocess from scripts.test import shared from . import utils class InitialFuzzTest(utils.BinaryenTestCase): def test_empty_initial(self): # generate fuzz from random data data = self.input_path('random_data.txt') a = shared.run_process(shared.WASM_OPT + ['-ttf', '--print', data], stdout=subprocess.PIPE).stdout # generate fuzz from random data with initial empty wasm empty_wasm = self.input_path('empty.wasm') b = shared.run_process( shared.WASM_OPT + ['-ttf', '--print', data, '--initial-fuzz=' + empty_wasm], stdout=subprocess.PIPE).stdout # an empty initial wasm causes no changes self.assertEqual(a, b) def test_small_initial(self): data = self.input_path('random_data.txt') hello_wat = self.input_path('hello_world.wat') out = shared.run_process(shared.WASM_OPT + ['-ttf', '--print', data, '--initial-fuzz=' + hello_wat], stdout=subprocess.PIPE).stdout # the function should be there (perhaps with modified contents - don't # check that) self.assertIn('(export "add" (func $add))', out) # there should be other fuzz contents added as well self.assertGreater(out.count('(export '), 1) binaryen-version_108/test/unit/test_memory_packing.py000066400000000000000000000032031423707623100233160ustar00rootroot00000000000000import os from scripts.test import shared from . import utils """Test that MemoryPacking correctly respects the web limitations by not generating more than 100K data segments""" class MemoryPackingTest(utils.BinaryenTestCase): def test_large_segment(self): data = '"' + (('A' + ('\\00' * 9)) * 100001) + '"' module = ''' (module (memory 256 256) (data $d (i32.const 0) %s) ) ''' % data opts = ['--memory-packing', '--disable-bulk-memory', '--print', '-o', os.devnull] p = shared.run_process(shared.WASM_OPT + opts, input=module, check=False, capture_output=True) output = [ '(data $d (i32.const 0) "A")', '(data $d.1 (i32.const 10) "A")', '(data $d.99998 (i32.const 999980) "A")', '(data $d.99999 (i32.const 999990) "A' + ('\\00' * 9) + 'A")' ] self.assertEqual(p.returncode, 0) for line in output: self.assertIn(line, p.stdout) def test_large_segment_unmergeable(self): data = '\n'.join('(data (i32.const %i) "A")' % i for i in range(100001)) module = '(module (memory 256 256) %s)' % data opts = ['--memory-packing', '--enable-bulk-memory', '--print', '-o', os.devnull] p = shared.run_process(shared.WASM_OPT + opts, input=module, check=False, capture_output=True) self.assertEqual(p.returncode, 0) self.assertIn('Some VMs may not accept this binary', p.stderr) self.assertIn('Run the limit-segments pass to merge segments.', p.stderr) binaryen-version_108/test/unit/test_poppy_validation.py000066400000000000000000000115501423707623100236770ustar00rootroot00000000000000import os from scripts.test import shared from . import utils class PoppyValidationTest(utils.BinaryenTestCase): def check_invalid(self, module, error): p = shared.run_process(shared.WASM_OPT + ['--experimental-poppy', '--print', '-o', os.devnull], input=module, check=False, capture_output=True) self.assertIn(error, p.stderr) self.assertIn('Fatal: error validating input', p.stderr) self.assertNotEqual(p.returncode, 0) def check_valid(self, module): p = shared.run_process(shared.WASM_OPT + ['--experimental-poppy', '--print', '-o', os.devnull], input=module, check=False, capture_output=True) self.assertEqual(p.stderr, "") self.assertEqual(p.returncode, 0) def test_top_level_pop(self): module = ''' (module (func $foo (result i32) (block (result i32) (i32.const 0) (pop i32) ) ) ) ''' self.check_invalid(module, "Unexpected top-level pop in block") def test_top_level_pop_fixed(self): module = ''' (module (func $foo (result i32) (block (result i32) (i32.const 0) ) ) ) ''' self.check_valid(module) def test_incompatible_type(self): module = ''' (module (func $foo (result i32) (f32.const 42) (i32.const 42) (i32.add (pop i32) (pop i32) ) ) ) ''' self.check_invalid(module, "block element has incompatible type") self.check_invalid(module, "required: (i32 i32), available: (f32 i32)") def test_incorrect_pop_type(self): module = ''' (module (func $foo (result i32) (i32.const 42) (i32.const 42) (i32.add (pop i32) (pop f32) ) ) ) ''' self.check_invalid(module, "binary child types must be equal") def test_incompatible_type_fixed(self): module = ''' (module (func $foo (result i32) (i32.const 42) (i32.const 42) (i32.add (pop i32) (pop i32) ) ) ) ''' self.check_valid(module) def test_incorrect_block_type(self): module = ''' (module (func $foo (result i32) (f32.const 42) (nop) ) ) ''' self.check_invalid(module, "block contents should satisfy block type") def test_nonblock_body(self): module = ''' (module (func $foo (result f32) (f32.const 42) ) ) ''' self.check_invalid(module, "Function body must be a block") def test_nonpop_if_condition(self): module = ''' (module (func $foo (nop) (i32.const 1) (if (i32.const 42) (block) ) ) ) ''' self.check_invalid(module, "Expected condition to be a Pop") def test_nonblock_if_true(self): module = ''' (module (func $foo (nop) (i32.const 1) (if (pop i32) (nop) ) ) ) ''' self.check_invalid(module, "Expected control flow child to be a block") def test_nonblock_if_false(self): module = ''' (module (func $foo (nop) (i32.const 1) (if (pop i32) (block) (nop) ) ) ) ''' self.check_invalid(module, "Expected control flow child to be a block") def test_nonblock_if_fixed(self): module = ''' (module (func $foo (nop) (i32.const 1) (if (pop i32) (block) (block) ) ) ) ''' self.check_valid(module) def test_nonblock_loop_body(self): module = ''' (module (func $foo (nop) (loop (nop) ) ) ) ''' self.check_invalid(module, "Expected control flow child to be a block") def test_nonpop_child(self): module = ''' (module (func $foo (result i32) (i32.const 42) (i32.const 5) (i32.add (pop i32) (i32.const -1) ) ) ) ''' self.check_invalid(module, "Unexpected non-Pop child") binaryen-version_108/test/unit/test_reduce.py000066400000000000000000000013541423707623100215660ustar00rootroot00000000000000import subprocess from scripts.test import shared from . import utils class ReduceTest(utils.BinaryenTestCase): def test_warn_on_no_passes(self): # run a reducer command that does nothing, and so ignores the input open('do_nothing.py', 'w').close() cmd = shared.WASM_REDUCE + [self.input_path('empty.wasm'), '-w', 'w.wasm', '-t', 't.wasm', '--command=python do_nothing.py'] err = shared.run_process(cmd, check=False, stderr=subprocess.PIPE).stderr self.assertIn('Fatal: running the command on the given input gives the same result as when running it on either a trivial valid wasm or a file with nonsense in it. does the script not look at the test file (t.wasm)? (use -f to ignore this check)', err) binaryen-version_108/test/unit/test_stack_ir.py000066400000000000000000000017201423707623100221130ustar00rootroot00000000000000import os from scripts.test import shared from . import utils class StackIRTest(utils.BinaryenTestCase): # test that stack IR opts make a difference. def test_stack_ir_opts(self): path = self.input_path('stack_ir.wat') opt = shared.run_process(shared.WASM_OPT + [path, '-O', '--generate-stack-ir', '--optimize-stack-ir', '--print-stack-ir', '-o', 'a.wasm'], capture_output=True).stdout nonopt = shared.run_process(shared.WASM_OPT + [path, '-O', '--generate-stack-ir', '--print-stack-ir', '-o', 'b.wasm'], capture_output=True).stdout # see a difference in the printed stack IR (the optimizations let us # remove a pair of local.set/get) self.assertNotEqual(opt, nonopt) self.assertLess(len(opt), len(nonopt)) # see a difference in the actual emitted wasm binary. opt_size = os.path.getsize('a.wasm') nonopt_size = os.path.getsize('b.wasm') self.assertLess(opt_size, nonopt_size) binaryen-version_108/test/unit/test_symbolmap.py000066400000000000000000000015461423707623100223250ustar00rootroot00000000000000from scripts.test import shared from . import utils class SymbolMapTest(utils.BinaryenTestCase): def test_symbolmap(self): input_wasm = self.input_path('hello_world.wat') # write the symbol map to a file args = [input_wasm, '--symbolmap=out.symbols'] shared.run_process(shared.WASM_OPT + args) with open('out.symbols') as f: file_output = f.read() # write the symbol map to stdout args = [input_wasm, '--symbolmap'] stdout_output = shared.run_process(shared.WASM_OPT + args, capture_output=True).stdout # ignore whitespace in the comparison as on windows stdout gets an \r self.assertEqual(file_output.strip(), stdout_output.strip()) # the wat contains a single function "add" self.assertIn('0:add', file_output) binaryen-version_108/test/unit/test_tail_call_type.py000066400000000000000000000024141423707623100233020ustar00rootroot00000000000000import os from scripts.test import shared from . import utils class TailCallTypeTest(utils.BinaryenTestCase): def test_return_call(self): module = ''' (module (func $foo (result f32) (return_call $bar) ) (func $bar (result i32) (i32.const 1) ) ) ''' p = shared.run_process(shared.WASM_OPT + ['--enable-tail-call', '-o', os.devnull], input=module, check=False, capture_output=True) self.assertNotEqual(p.returncode, 0) self.assertIn( 'return_call* callee return type must match caller return type', p.stderr) def test_return_call_indirect(self): module = ''' (module (type $T (func (result i32))) (table $0 1 1 funcref) (func $foo (result f32) (return_call_indirect (type $T) (i32.const 0) ) ) ) ''' p = shared.run_process(shared.WASM_OPT + ['--enable-tail-call', '-o', os.devnull], input=module, check=False, capture_output=True) self.assertNotEqual(p.returncode, 0) self.assertIn( 'return_call* callee return type must match caller return type', p.stderr) binaryen-version_108/test/unit/test_warnings.py000066400000000000000000000015111423707623100221420ustar00rootroot00000000000000import subprocess from scripts.test import shared from . import utils class WarningsText(utils.BinaryenTestCase): def test_warn_on_no_passes(self): err = shared.run_process(shared.WASM_OPT + [self.input_path('asyncify-pure.wat'), '-o', 'a.wasm'], stderr=subprocess.PIPE).stderr self.assertIn('warning: no passes specified, not doing any work', err) def test_warn_on_no_output(self): err = shared.run_process(shared.WASM_OPT + [self.input_path('asyncify-pure.wat'), '-O1'], stderr=subprocess.PIPE).stderr self.assertIn('warning: no output file specified, not emitting output', err) def test_quiet_suppresses_warnings(self): err = shared.run_process(shared.WASM_OPT + [self.input_path('asyncify-pure.wat'), '-q'], stderr=subprocess.PIPE).stderr self.assertNotIn('warning', err) binaryen-version_108/test/unit/test_wasm2c.py000066400000000000000000000015621423707623100215140ustar00rootroot00000000000000from scripts.test import shared from . import utils class Wasm2CTest(utils.BinaryenTestCase): def test_wrapper(self): # the wrapper C code should only call the hang limit initializer if # that is present. empty_wasm = self.input_path('empty.wasm') args = [empty_wasm, '--emit-wasm2c-wrapper=output.c'] shared.run_process(shared.WASM_OPT + args) with open('output.c') as f: normal_output = f.read() # running with ttf generates a new wasm for fuzzing, which always # includes the hang limit initializer function shared.run_process(shared.WASM_OPT + args + ['-ttf']) with open('output.c') as f: ttf_output = f.read() hang_limit_name = 'hangLimitInitializer' self.assertIn(hang_limit_name, ttf_output) self.assertNotIn(hang_limit_name, normal_output) binaryen-version_108/test/unit/utils.py000066400000000000000000000033431423707623100204200ustar00rootroot00000000000000import os import unittest from scripts.test import shared class BinaryenTestCase(unittest.TestCase): def input_path(self, filename): return os.path.join(shared.options.binaryen_test, 'unit', 'input', filename) def roundtrip(self, filename, opts=[]): path = self.input_path(filename) p = shared.run_process(shared.WASM_OPT + ['-g', '-o', 'a.wasm', path] + opts) self.assertEqual(p.returncode, 0) with open(path, 'rb') as f: with open('a.wasm', 'rb') as g: self.assertEqual(g.read(), f.read()) def disassemble(self, filename): path = self.input_path(filename) p = shared.run_process(shared.WASM_OPT + ['--print', '-o', os.devnull, path], check=False, capture_output=True) self.assertEqual(p.returncode, 0) self.assertEqual(p.stderr, '') return p.stdout def check_features(self, filename, features, opts=[]): path = self.input_path(filename) cmd = shared.WASM_OPT + \ ['--print-features', '-o', os.devnull, path] + opts p = shared.run_process(cmd, check=False, capture_output=True) self.assertEqual(p.returncode, 0) self.assertEqual(p.stderr, '') self.assertEqual(p.stdout.splitlines(), ['--enable-' + f for f in features]) # similar to assertEqual, but while ignoring line ending differences such # as those between windows and unix def assert_equal_ignoring_line_endings(self, left, right): left = left.replace('\r\n', '\n') right = right.replace('\r\n', '\n') self.assertEqual(left, right) binaryen-version_108/test/unreachable-code.wast000066400000000000000000000021071423707623100220050ustar00rootroot00000000000000(module (func $a (if (i32.const 1) (unreachable) ) ) (func $b (if (i32.const 1) (unreachable) (unreachable) ) ) (func $a-block (block (if (i32.const 1) (unreachable) ) ) ) (func $b-block (block (if (i32.const 1) (unreachable) (unreachable) ) ) ) (func $a-prepost (nop) (if (i32.const 1) (unreachable) ) (nop) ) (func $b-prepost (nop) (if (i32.const 1) (unreachable) (unreachable) ) (nop) ) (func $a-block-prepost (nop) (block (if (i32.const 1) (unreachable) ) ) (nop) ) (func $b-block-prepost (nop) (block (if (i32.const 1) (unreachable) (unreachable) ) ) (nop) ) (func $recurse (block $a (nop) (block $b (nop) (br $b) (nop) ) (nop) ) ) (func $recurse-b (block $a (nop) (block $b (nop) (br $a) (nop) ) (nop) ) ) ) binaryen-version_108/test/unreachable-code.wast.from-wast000066400000000000000000000017351423707623100237310ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $a (if (i32.const 1) (unreachable) ) ) (func $b (if (i32.const 1) (unreachable) (unreachable) ) ) (func $a-block (block $block (if (i32.const 1) (unreachable) ) ) ) (func $b-block (block $block (if (i32.const 1) (unreachable) (unreachable) ) ) ) (func $a-prepost (nop) (if (i32.const 1) (unreachable) ) (nop) ) (func $b-prepost (nop) (if (i32.const 1) (unreachable) (unreachable) ) (nop) ) (func $a-block-prepost (nop) (block $block (if (i32.const 1) (unreachable) ) ) (nop) ) (func $b-block-prepost (nop) (block $block (if (i32.const 1) (unreachable) (unreachable) ) ) (nop) ) (func $recurse (block $a (nop) (block $b (nop) (br $b) (nop) ) (nop) ) ) (func $recurse-b (block $a (nop) (block $b (nop) (br $a) (nop) ) (nop) ) ) ) binaryen-version_108/test/unreachable-code.wast.fromBinary000066400000000000000000000016141423707623100241160ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $a (if (i32.const 1) (unreachable) ) ) (func $b (if (i32.const 1) (unreachable) (unreachable) ) ) (func $a-block (if (i32.const 1) (unreachable) ) ) (func $b-block (if (i32.const 1) (unreachable) (unreachable) ) ) (func $a-prepost (nop) (if (i32.const 1) (unreachable) ) (nop) ) (func $b-prepost (nop) (if (i32.const 1) (unreachable) (unreachable) ) ) (func $a-block-prepost (nop) (block $label$1 (if (i32.const 1) (unreachable) ) ) (nop) ) (func $b-block-prepost (nop) (block $label$1 (if (i32.const 1) (unreachable) (unreachable) ) ) ) (func $recurse (nop) (block $label$1 (nop) (br $label$1) ) (nop) ) (func $recurse-b (block $label$1 (nop) (block $label$2 (nop) (br $label$1) ) ) ) ) binaryen-version_108/test/unreachable-code.wast.fromBinary.noDebugInfo000066400000000000000000000015061423707623100263140ustar00rootroot00000000000000(module (type $none_=>_none (func)) (func $0 (if (i32.const 1) (unreachable) ) ) (func $1 (if (i32.const 1) (unreachable) (unreachable) ) ) (func $2 (if (i32.const 1) (unreachable) ) ) (func $3 (if (i32.const 1) (unreachable) (unreachable) ) ) (func $4 (nop) (if (i32.const 1) (unreachable) ) (nop) ) (func $5 (nop) (if (i32.const 1) (unreachable) (unreachable) ) ) (func $6 (nop) (block $label$1 (if (i32.const 1) (unreachable) ) ) (nop) ) (func $7 (nop) (block $label$1 (if (i32.const 1) (unreachable) (unreachable) ) ) ) (func $8 (nop) (block $label$1 (nop) (br $label$1) ) (nop) ) (func $9 (block $label$1 (nop) (block $label$2 (nop) (br $label$1) ) ) ) ) binaryen-version_108/test/unreachable-instr-type.wast000066400000000000000000000006221423707623100232110ustar00rootroot00000000000000(module (memory (shared 1 1)) (func $test (f32.load (unreachable)) (f32.store (unreachable) (f32.const 0) ) (i64.atomic.rmw.add (unreachable) (i64.const 0) ) (i64.atomic.rmw.cmpxchg (unreachable) (i64.const 0) (i64.const 1) ) (memory.atomic.wait64 (unreachable) (i64.const 0) (i64.const 0) ) ) ) binaryen-version_108/test/unreachable-instr-type.wast.from-wast000066400000000000000000000006011423707623100251240ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 (shared 1 1)) (func $test (i32.load (unreachable) ) (f32.store (unreachable) (f32.const 0) ) (i32.atomic.rmw.add (unreachable) (i64.const 0) ) (i32.atomic.rmw.cmpxchg (unreachable) (i64.const 0) (i64.const 1) ) (memory.atomic.wait64 (unreachable) (i64.const 0) (i64.const 0) ) ) ) binaryen-version_108/test/unreachable-instr-type.wast.fromBinary000066400000000000000000000001421423707623100253150ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 (shared 1 1)) (func $test (unreachable) ) ) binaryen-version_108/test/unreachable-instr-type.wast.fromBinary.noDebugInfo000066400000000000000000000001371423707623100275170ustar00rootroot00000000000000(module (type $none_=>_none (func)) (memory $0 (shared 1 1)) (func $0 (unreachable) ) ) binaryen-version_108/test/unreachable-pops.wasm000066400000000000000000000000361423707623100220440ustar00rootroot00000000000000asm` j binaryen-version_108/test/unreachable-pops.wasm.fromBinary000066400000000000000000000002021423707623100241460ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (func $0 (result i32) (block $label$1 (result i32) (unreachable) ) ) ) binaryen-version_108/test/untaken-br_if.wast000066400000000000000000000003301423707623100213440ustar00rootroot00000000000000(module (func $binaryify-untaken-br_if (result f32) (if (result f32) (i32.const 1) (unreachable) (block $label$1 (result f32) (br_if $label$1 (f32.const 1) (unreachable) ) ) ) ) ) binaryen-version_108/test/untaken-br_if.wast.from-wast000066400000000000000000000004011423707623100232610ustar00rootroot00000000000000(module (type $none_=>_f32 (func (result f32))) (func $binaryify-untaken-br_if (result f32) (if (result f32) (i32.const 1) (unreachable) (block $label$1 (result f32) (br_if $label$1 (f32.const 1) (unreachable) ) ) ) ) ) binaryen-version_108/test/untaken-br_if.wast.fromBinary000066400000000000000000000003671423707623100234650ustar00rootroot00000000000000(module (type $none_=>_f32 (func (result f32))) (func $binaryify-untaken-br_if (result f32) (if (result f32) (i32.const 1) (unreachable) (block $label$3 (result f32) (drop (f32.const 1) ) (unreachable) ) ) ) ) binaryen-version_108/test/untaken-br_if.wast.fromBinary.noDebugInfo000066400000000000000000000003411423707623100256530ustar00rootroot00000000000000(module (type $none_=>_f32 (func (result f32))) (func $0 (result f32) (if (result f32) (i32.const 1) (unreachable) (block $label$3 (result f32) (drop (f32.const 1) ) (unreachable) ) ) ) ) binaryen-version_108/test/validator/000077500000000000000000000000001423707623100177115ustar00rootroot00000000000000binaryen-version_108/test/validator/invalid_export.wast000066400000000000000000000001131423707623100236330ustar00rootroot00000000000000(module (func $export64 (result i64) (i64.const 1)) (export "a" $export64))binaryen-version_108/test/validator/invalid_import.wast000066400000000000000000000000571423707623100236330ustar00rootroot00000000000000(module (import $bad "test" "bad" (param i64)))binaryen-version_108/test/validator/invalid_number.wast000066400000000000000000000001211423707623100236010ustar00rootroot00000000000000(module (func $invalid_number (i64.const 70847791997969805621592064) ) ) binaryen-version_108/test/validator/invalid_return.wast000066400000000000000000000000601423707623100236320ustar00rootroot00000000000000(module (func $foo (result i32) (i64.const 1)))binaryen-version_108/test/wasm2asm.asserts.js000066400000000000000000000055401423707623100215030ustar00rootroot00000000000000function asmFunc(global, env, buffer) { "use asm"; var HEAP8 = new global.Int8Array(buffer); var HEAP16 = new global.Int16Array(buffer); var HEAP32 = new global.Int32Array(buffer); var HEAPU8 = new global.Uint8Array(buffer); var HEAPU16 = new global.Uint16Array(buffer); var HEAPU32 = new global.Uint32Array(buffer); var HEAPF32 = new global.Float32Array(buffer); var HEAPF64 = new global.Float64Array(buffer); var Math_imul = global.Math.imul; var Math_fround = global.Math.fround; var Math_abs = global.Math.abs; var Math_clz32 = global.Math.clz32; var Math_min = global.Math.min; var Math_max = global.Math.max; var Math_floor = global.Math.floor; var Math_ceil = global.Math.ceil; var Math_sqrt = global.Math.sqrt; var abort = env.abort; var nan = global.NaN; var infinity = global.Infinity; var i64toi32_i32$HIGH_BITS = 0; function $0() { } function $1(x, y) { x = x | 0; y = y | 0; return x + y | 0 | 0; } function $2(x, y) { x = x | 0; y = y | 0; return (x | 0) / (y | 0) | 0 | 0; } function __wasm_fetch_high_bits() { return i64toi32_i32$HIGH_BITS | 0; } return { empty: $0, add: $1, div_s: $2, __wasm_fetch_high_bits: __wasm_fetch_high_bits }; } var __array_buffer = new ArrayBuffer(65536) var HEAP32 = new Int32Array(__array_buffer); var HEAPF32 = new Float32Array(__array_buffer); var HEAPF64 = new Float64Array(__array_buffer); var nan = NaN; var infinity = Infinity; ; function f32Equal(a, b) { var i = new Int32Array(1); var f = new Float32Array(i.buffer); f[0] = a; var ai = f[0]; f[0] = b; var bi = f[0]; return (isNaN(a) && isNaN(b)) || a == b; } function f64Equal(a, b) { var i = new Int32Array(2); var f = new Float64Array(i.buffer); f[0] = a; var ai1 = i[0]; var ai2 = i[1]; f[0] = b; var bi1 = i[0]; var bi2 = i[1]; return (isNaN(a) && isNaN(b)) || (ai1 == bi1 && ai2 == bi2); } ; var asmModule = asmFunc({ Math: Math, Int8Array: Int8Array, Int16Array: Int16Array, Int32Array: Int32Array, Uint8Array: Uint8Array, Uint16Array: Uint16Array, Uint32Array: Uint32Array, Float32Array: Float32Array, Float64Array: Float64Array, Infinity: Infinity, NaN: NaN }, { abort: function abort() { unreachable(); console_log(); } , print: function print() {} }, __array_buffer); function i64Equal(actual_lo, actual_hi, expected_lo, expected_hi) { return actual_lo == (expected_lo | 0) && actual_hi == (expected_hi | 0); } ; function check1() { var wasm2asm_i32$0 = 0; asmModule.empty(); wasm2asm_i32$0 = 1; return wasm2asm_i32$0 | 0; } if (!check1()) fail1(); function check2() { return (asmModule.add(1 | 0, 1 | 0) | 0 | 0) == (2 | 0) | 0; } if (!check2()) fail2(); binaryen-version_108/test/wasm2asm.traps.js000066400000000000000000000063741423707623100211560ustar00rootroot00000000000000function asmFunc(global, env, buffer) { "use asm"; var HEAP8 = new global.Int8Array(buffer); var HEAP16 = new global.Int16Array(buffer); var HEAP32 = new global.Int32Array(buffer); var HEAPU8 = new global.Uint8Array(buffer); var HEAPU16 = new global.Uint16Array(buffer); var HEAPU32 = new global.Uint32Array(buffer); var HEAPF32 = new global.Float32Array(buffer); var HEAPF64 = new global.Float64Array(buffer); var Math_imul = global.Math.imul; var Math_fround = global.Math.fround; var Math_abs = global.Math.abs; var Math_clz32 = global.Math.clz32; var Math_min = global.Math.min; var Math_max = global.Math.max; var Math_floor = global.Math.floor; var Math_ceil = global.Math.ceil; var Math_sqrt = global.Math.sqrt; var abort = env.abort; var nan = global.NaN; var infinity = global.Infinity; var i64toi32_i32$HIGH_BITS = 0; function $0() { } function $1(x, y) { x = x | 0; y = y | 0; return x + y | 0 | 0; } function $2(x, y) { x = x | 0; y = y | 0; return (x | 0) / (y | 0) | 0 | 0; } function __wasm_fetch_high_bits() { return i64toi32_i32$HIGH_BITS | 0; } return { empty: $0, add: $1, div_s: $2, __wasm_fetch_high_bits: __wasm_fetch_high_bits }; } var __array_buffer = new ArrayBuffer(65536) var HEAP32 = new Int32Array(__array_buffer); var HEAPF32 = new Float32Array(__array_buffer); var HEAPF64 = new Float64Array(__array_buffer); var nan = NaN; var infinity = Infinity; ; function f32Equal(a, b) { var i = new Int32Array(1); var f = new Float32Array(i.buffer); f[0] = a; var ai = f[0]; f[0] = b; var bi = f[0]; return (isNaN(a) && isNaN(b)) || a == b; } function f64Equal(a, b) { var i = new Int32Array(2); var f = new Float64Array(i.buffer); f[0] = a; var ai1 = i[0]; var ai2 = i[1]; f[0] = b; var bi1 = i[0]; var bi2 = i[1]; return (isNaN(a) && isNaN(b)) || (ai1 == bi1 && ai2 == bi2); } ; var asmModule = asmFunc({ Math: Math, Int8Array: Int8Array, Int16Array: Int16Array, Int32Array: Int32Array, Uint8Array: Uint8Array, Uint16Array: Uint16Array, Uint32Array: Uint32Array, Float32Array: Float32Array, Float64Array: Float64Array, Infinity: Infinity, NaN: NaN }, { abort: function abort() { unreachable(); console_log(); } , print: function print() {} }, __array_buffer); function i64Equal(actual_lo, actual_hi, expected_lo, expected_hi) { return actual_lo == (expected_lo | 0) && actual_hi == (expected_hi | 0); } ; function check1() { var wasm2asm_i32$0 = 0; asmModule.empty(); wasm2asm_i32$0 = 1; return wasm2asm_i32$0 | 0; } if (!check1()) fail1(); function check2() { return (asmModule.add(1 | 0, 1 | 0) | 0 | 0) == (2 | 0) | 0; } if (!check2()) fail2(); function check3() { function f() { asmModule.div_s(0 | 0, 0 | 0); } try { f(); } catch (e) { return e.message.includes("integer divide by zero"); }; return 0; } if (!check3()) fail3(); function check4() { function f() { asmModule.div_s(2147483648 | 0, 4294967295 | 0); } try { f(); } catch (e) { return e.message.includes("integer overflow"); }; return 0; } if (!check4()) fail4(); binaryen-version_108/test/wasm2js.asserts.js000066400000000000000000000034501423707623100213350ustar00rootroot00000000000000 var nan = NaN; var infinity = Infinity; function f32Equal(a, b) { var i = new Int32Array(1); var f = new Float32Array(i.buffer); f[0] = a; var ai = f[0]; f[0] = b; var bi = f[0]; return (isNaN(a) && isNaN(b)) || a == b; } function f64Equal(a, b) { var i = new Int32Array(2); var f = new Float64Array(i.buffer); f[0] = a; var ai1 = i[0]; var ai2 = i[1]; f[0] = b; var bi1 = i[0]; var bi2 = i[1]; return (isNaN(a) && isNaN(b)) || (ai1 == bi1 && ai2 == bi2); } function i64Equal(actual_lo, actual_hi, expected_lo, expected_hi) { return (actual_lo | 0) == (expected_lo | 0) && (actual_hi | 0) == (expected_hi | 0); } function asmFunc0(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { } function $1(x, y) { x = x | 0; y = y | 0; return x + y | 0 | 0; } function $2(x, y) { x = x | 0; y = y | 0; return (x | 0) / (y | 0) | 0 | 0; } return { "empty": $0, "add": $1, "div_s": $2 }; } var retasmFunc0 = asmFunc0( { abort: function() { throw new Error('abort'); } }); function check1() { retasmFunc0.empty(); return 1 | 0; } if (!check1()) throw 'assertion failed: ( assert_return ( invoke empty ) )'; function check2() { return (retasmFunc0.add(1 | 0, 1 | 0) | 0 | 0) == (2 | 0) | 0; } if (!check2()) throw 'assertion failed: ( assert_return ( invoke add ( i32.const 1 ) ( i32.const 1 ) ) ( i32.const 2 ) )'; binaryen-version_108/test/wasm2js.traps.js000066400000000000000000000046671423707623100210150ustar00rootroot00000000000000 var nan = NaN; var infinity = Infinity; function f32Equal(a, b) { var i = new Int32Array(1); var f = new Float32Array(i.buffer); f[0] = a; var ai = f[0]; f[0] = b; var bi = f[0]; return (isNaN(a) && isNaN(b)) || a == b; } function f64Equal(a, b) { var i = new Int32Array(2); var f = new Float64Array(i.buffer); f[0] = a; var ai1 = i[0]; var ai2 = i[1]; f[0] = b; var bi1 = i[0]; var bi2 = i[1]; return (isNaN(a) && isNaN(b)) || (ai1 == bi1 && ai2 == bi2); } function i64Equal(actual_lo, actual_hi, expected_lo, expected_hi) { return (actual_lo | 0) == (expected_lo | 0) && (actual_hi | 0) == (expected_hi | 0); } function asmFunc0(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { } function $1(x, y) { x = x | 0; y = y | 0; return x + y | 0 | 0; } function $2(x, y) { x = x | 0; y = y | 0; return (x | 0) / (y | 0) | 0 | 0; } return { "empty": $0, "add": $1, "div_s": $2 }; } var retasmFunc0 = asmFunc0( { abort: function() { throw new Error('abort'); } }); function check1() { retasmFunc0.empty(); return 1 | 0; } if (!check1()) throw 'assertion failed: ( assert_return ( invoke empty ) )'; function check2() { return (retasmFunc0.add(1 | 0, 1 | 0) | 0 | 0) == (2 | 0) | 0; } if (!check2()) throw 'assertion failed: ( assert_return ( invoke add ( i32.const 1 ) ( i32.const 1 ) ) ( i32.const 2 ) )'; function check3() { function f() { return retasmFunc0.div_s(0 | 0, 0 | 0) | 0 | 0; } try { f(); } catch (e) { return e.message.includes("integer divide by zero"); }; return 0; } if (!check3()) throw 'assertion failed: ( assert_trap ( invoke div_s ( i32.const 0 ) ( i32.const 0 ) ) integer divide by zero )'; function check4() { function f() { return retasmFunc0.div_s(-2147483648 | 0, -1 | 0) | 0 | 0; } try { f(); } catch (e) { return e.message.includes("integer overflow"); }; return 0; } if (!check4()) throw 'assertion failed: ( assert_trap ( invoke div_s ( i32.const 0x80000000 ) ( i32.const -1 ) ) integer overflow )'; binaryen-version_108/test/wasm2js/000077500000000000000000000000001423707623100173125ustar00rootroot00000000000000binaryen-version_108/test/wasm2js/add_div.2asm.js000066400000000000000000000012001423707623100220740ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function foo($0) { $0 = $0 | 0; return (($0 >>> 0) / (100 >>> 0) | 0) + (($0 | 0) / (-100 | 0) | 0) | 0 | 0; } return { "foo": foo }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/add_div.2asm.js.opt000066400000000000000000000011561423707623100227070ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function foo($0) { $0 = $0 | 0; return (($0 | 0) / -100 | 0) + (($0 >>> 0) / 100 | 0) | 0; } return { "foo": foo }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/add_div.wast000066400000000000000000000003551423707623100216070ustar00rootroot00000000000000(module (export "foo" (func $foo (param i32) (result i32))) (func $foo (param $0 i32) (result i32) (i32.add (i32.div_u (local.get $0) (i32.const 100) ) (i32.div_s (local.get $0) (i32.const -100) ) ) ) )binaryen-version_108/test/wasm2js/atomic_fence.2asm.js000066400000000000000000000032671423707623100231350ustar00rootroot00000000000000 function asmFunc(env) { var buffer = new ArrayBuffer(1507328); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; } return oldPages; } return { "atomic_fence": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var atomic_fence = retasmFunc.atomic_fence; binaryen-version_108/test/wasm2js/atomic_fence.2asm.js.opt000066400000000000000000000010741423707623100237300ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { } return { "atomic_fence": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var atomic_fence = retasmFunc.atomic_fence; binaryen-version_108/test/wasm2js/atomic_fence.wast000066400000000000000000000001371423707623100226270ustar00rootroot00000000000000(module (memory $0 (shared 23 256)) (func (export "atomic-fence") (atomic.fence) ) ) binaryen-version_108/test/wasm2js/atomics_32.2asm.js000066400000000000000000000133021423707623100224530ustar00rootroot00000000000000 var bufferView; var memorySegments = {}; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "aGVsbG8s"); memorySegments[1] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "d29ybGQh"); var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_atomic_wait_i32(ptr, expected, timeoutLow, timeoutHigh) { var timeout = Infinity; if (timeoutHigh >= 0) { // Convert from nanoseconds to milliseconds // Taken from convertI32PairToI53 in emscripten's library_int53.js timeout = ((timeoutLow >>> 0) / 1e6) + timeoutHigh * (4294967296 / 1e6); } var view = new Int32Array(bufferView.buffer); // TODO cache var result = Atomics.wait(view, ptr >> 2, expected, timeout); if (result == 'ok') return 0; if (result == 'not-equal') return 1; if (result == 'timed-out') return 2; throw 'bad result ' + result; } function wasm2js_atomic_rmw_i64(op, bytes, offset, ptr, valueLow, valueHigh) { // TODO: support bytes=1, 2, 4 as well as 8. var view = new BigInt64Array(bufferView.buffer); // TODO cache ptr = (ptr + offset) >> 3; var value = BigInt(valueLow >>> 0) | (BigInt(valueHigh >>> 0) << BigInt(32)); var result; switch (op) { case 0: { // Add result = Atomics.add(view, ptr, value); break; } case 1: { // Sub result = Atomics.sub(view, ptr, value); break; } case 2: { // And result = Atomics.and(view, ptr, value); break; } case 3: { // Or result = Atomics.or(view, ptr, value); break; } case 4: { // Xor result = Atomics.xor(view, ptr, value); break; } case 5: { // Xchg result = Atomics.exchange(view, ptr, value); break; } default: throw 'bad op'; } var low = Number(result & BigInt(0xffffffff)) | 0; var high = Number((result >> BigInt(32)) & BigInt(0xffffffff)) | 0; stashedBits = high; return low; } var stashedBits = 0; function wasm2js_get_stashed_bits() { return stashedBits; } function wasm2js_memory_init(segment, dest, offset, size) { // TODO: traps on invalid things bufferView.set(memorySegments[segment].subarray(offset, offset + size), dest); } function asmFunc(env) { var buffer = new ArrayBuffer(16777216); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0; Atomics.compareExchange(HEAP8, 1024, 1, 2) | 0; Atomics.compareExchange(HEAP16, 1024 >> 1, 1, 2) | 0; Atomics.compareExchange(HEAP32, 1024 >> 2, 1, 2) | 0; Atomics.load(HEAPU8, 1028 >> 0) | 0; Atomics.load(HEAPU16, 1028 >> 1) | 0; Atomics.load(HEAP32, 1028 >> 2) | 0; Atomics.store(HEAP32, 100 >> 2, 200); i64toi32_i32$0 = -1; wasm2js_atomic_wait_i32(4 | 0, 8 | 0, -1 | 0, i64toi32_i32$0 | 0) | 0; wasm2js_memory_init(0, 512, 0, 4); wasm2js_memory_init(1, 1024, 4, 2); Atomics.notify(HEAP32, 4 >> 2, 2); Atomics.notify(HEAP32, (4 + 20 | 0) >> 2, 2); Atomics.add(HEAP32, 8 >> 2, 12); Atomics.sub(HEAP32, 8 >> 2, 12); Atomics.and(HEAP32, 8 >> 2, 12); Atomics.or(HEAP32, 8 >> 2, 12); Atomics.xor(HEAP32, 8 >> 2, 12); Atomics.exchange(HEAP32, 8 >> 2, 12); Atomics.add(HEAP8, 8, 12); Atomics.sub(HEAP16, 8 >> 1, 12); i64toi32_i32$0 = 0; i64toi32_i32$1 = wasm2js_atomic_rmw_i64(0 | 0, 8 | 0, 0 | 0, 8 | 0, 16 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = wasm2js_get_stashed_bits() | 0; i64toi32_i32$2 = -1; i64toi32_i32$1 = wasm2js_atomic_rmw_i64(4 | 0, 8 | 0, 32 | 0, 8 | 0, -1 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = wasm2js_get_stashed_bits() | 0; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "test": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var test = retasmFunc.test; binaryen-version_108/test/wasm2js/atomics_32.2asm.js.opt000066400000000000000000000124661423707623100232660ustar00rootroot00000000000000 var bufferView; var memorySegments = {}; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "aGVsbG8s"); memorySegments[1] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "d29ybGQh"); var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_atomic_wait_i32(ptr, expected, timeoutLow, timeoutHigh) { var timeout = Infinity; if (timeoutHigh >= 0) { // Convert from nanoseconds to milliseconds // Taken from convertI32PairToI53 in emscripten's library_int53.js timeout = ((timeoutLow >>> 0) / 1e6) + timeoutHigh * (4294967296 / 1e6); } var view = new Int32Array(bufferView.buffer); // TODO cache var result = Atomics.wait(view, ptr >> 2, expected, timeout); if (result == 'ok') return 0; if (result == 'not-equal') return 1; if (result == 'timed-out') return 2; throw 'bad result ' + result; } function wasm2js_atomic_rmw_i64(op, bytes, offset, ptr, valueLow, valueHigh) { // TODO: support bytes=1, 2, 4 as well as 8. var view = new BigInt64Array(bufferView.buffer); // TODO cache ptr = (ptr + offset) >> 3; var value = BigInt(valueLow >>> 0) | (BigInt(valueHigh >>> 0) << BigInt(32)); var result; switch (op) { case 0: { // Add result = Atomics.add(view, ptr, value); break; } case 1: { // Sub result = Atomics.sub(view, ptr, value); break; } case 2: { // And result = Atomics.and(view, ptr, value); break; } case 3: { // Or result = Atomics.or(view, ptr, value); break; } case 4: { // Xor result = Atomics.xor(view, ptr, value); break; } case 5: { // Xchg result = Atomics.exchange(view, ptr, value); break; } default: throw 'bad op'; } var low = Number(result & BigInt(0xffffffff)) | 0; var high = Number((result >> BigInt(32)) & BigInt(0xffffffff)) | 0; stashedBits = high; return low; } var stashedBits = 0; function wasm2js_get_stashed_bits() { return stashedBits; } function wasm2js_memory_init(segment, dest, offset, size) { // TODO: traps on invalid things bufferView.set(memorySegments[segment].subarray(offset, offset + size), dest); } function asmFunc(env) { var buffer = new ArrayBuffer(16777216); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { Atomics.compareExchange(HEAP8, 1024, 1, 2) | 0; Atomics.compareExchange(HEAP16, 512, 1, 2) | 0; Atomics.compareExchange(HEAP32, 256, 1, 2) | 0; Atomics.load(HEAPU8, 1028); Atomics.load(HEAPU16, 514); Atomics.load(HEAP32, 257); Atomics.store(HEAP32, 25, 200); wasm2js_atomic_wait_i32(4, 8, -1, -1) | 0; wasm2js_memory_init(0, 512, 0, 4); wasm2js_memory_init(1, 1024, 4, 2); Atomics.notify(HEAP32, 1, 2); Atomics.notify(HEAP32, 4 + 20 >> 2, 2); Atomics.add(HEAP32, 2, 12); Atomics.sub(HEAP32, 2, 12); Atomics.and(HEAP32, 2, 12); Atomics.or(HEAP32, 2, 12); Atomics.xor(HEAP32, 2, 12); Atomics.exchange(HEAP32, 2, 12); Atomics.add(HEAP8, 8, 12); Atomics.sub(HEAP16, 4, 12); wasm2js_atomic_rmw_i64(0, 8, 0, 8, 16, 0) | 0; wasm2js_get_stashed_bits() | 0; wasm2js_atomic_rmw_i64(4, 8, 32, 8, -1, -1) | 0; wasm2js_get_stashed_bits() | 0; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "test": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var test = retasmFunc.test; binaryen-version_108/test/wasm2js/atomics_32.wast000066400000000000000000000032441423707623100221600ustar00rootroot00000000000000(module (memory (shared 256 256)) (data "hello,") (data "world!") (func "test" (local $x i32) (local $y i64) (local.set $x (i32.atomic.rmw8.cmpxchg_u (i32.const 1024) (i32.const 1) (i32.const 2))) (local.set $x (i32.atomic.rmw16.cmpxchg_u (i32.const 1024) (i32.const 1) (i32.const 2))) (local.set $x (i32.atomic.rmw.cmpxchg (i32.const 1024) (i32.const 1) (i32.const 2))) (local.set $x (i32.atomic.load8_u (i32.const 1028))) (local.set $x (i32.atomic.load16_u (i32.const 1028))) (local.set $x (i32.atomic.load (i32.const 1028))) (i32.atomic.store (i32.const 100) (i32.const 200)) (local.set $x (memory.atomic.wait32 (i32.const 4) (i32.const 8) (i64.const -1))) (memory.init 0 (i32.const 512) (i32.const 0) (i32.const 4)) (memory.init 1 (i32.const 1024) (i32.const 4) (i32.const 2)) (local.set $x (memory.atomic.notify (i32.const 4) (i32.const 2))) (local.set $x (memory.atomic.notify offset=20 (i32.const 4) (i32.const 2))) (local.set $x (i32.atomic.rmw.add (i32.const 8) (i32.const 12))) (local.set $x (i32.atomic.rmw.sub (i32.const 8) (i32.const 12))) (local.set $x (i32.atomic.rmw.and (i32.const 8) (i32.const 12))) (local.set $x (i32.atomic.rmw.or (i32.const 8) (i32.const 12))) (local.set $x (i32.atomic.rmw.xor (i32.const 8) (i32.const 12))) (local.set $x (i32.atomic.rmw.xchg (i32.const 8) (i32.const 12))) (local.set $x (i32.atomic.rmw8.add_u (i32.const 8) (i32.const 12))) (local.set $x (i32.atomic.rmw16.sub_u (i32.const 8) (i32.const 12))) (local.set $y (i64.atomic.rmw.add (i32.const 8) (i64.const 16))) (local.set $y (i64.atomic.rmw.xor offset=32 (i32.const 8) (i64.const -1))) ) ) binaryen-version_108/test/wasm2js/base64.2asm.js000066400000000000000000000007361423707623100216030ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/base64.2asm.js.opt000066400000000000000000000007361423707623100224040ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/base64.wast000066400000000000000000000001031423707623100212700ustar00rootroot00000000000000(module (memory $memory 1 1) (data (i32.const 2) "\00\fe\ff") )binaryen-version_108/test/wasm2js/br.2asm.js000066400000000000000000000364161423707623100211260ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function dummy() { } function $1() { } function $2() { } function $3() { } function $4() { } function $5() { var $0 = 0; block : { $0 = 1; break block; } return $0 | 0; } function $6() { var i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0; block : { i64toi32_i32$0 = 0; $0 = 2; $0$hi = i64toi32_i32$0; break block; } i64toi32_i32$0 = $0$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return $0 | 0; } function $7() { var $0 = Math_fround(0); block : { $0 = Math_fround(3.0); break block; } return Math_fround($0); } function $8() { var $0 = 0.0; block : { $0 = 4.0; break block; } return +$0; } function $9() { } function $10() { block : { dummy(); break block; } } function $11() { block : { dummy(); break block; } } function $12() { var $0 = 0; block : { dummy(); $0 = 2; break block; } return $0 | 0; } function $13() { var $0 = 0, $1_1 = 0, $3_1 = 0; block : { loop_in : while (1) { $0 = 3; break block; }; } return $0 | 0; } function $14() { var $0 = 0, $1_1 = 0, $3_1 = 0; block : { loop_in : while (1) { dummy(); $0 = 4; break block; }; } return $0 | 0; } function $15() { var $0 = 0; block : { loop_in : while (1) { dummy(); $0 = 5; break block; }; } return $0 | 0; } function $16() { var $0 = 0; block : { $0 = 9; break block; } return $0 | 0; } function $17() { } function $18() { var $0 = 0; block : { $0 = 8; break block; } return $0 | 0; } function $19() { var $0 = 0; block : { $0 = 9; break block; } return $0 | 0; } function $20() { } function $21() { var $0 = 0; block : { $0 = 10; break block; } return $0 | 0; } function $22() { var $0 = 0; block : { $0 = 11; break block; } return $0 | 0; } function $23() { var i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0; block : { i64toi32_i32$0 = 0; $0 = 7; $0$hi = i64toi32_i32$0; break block; } i64toi32_i32$0 = $0$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return $0 | 0; } function $24() { var $0 = 0, $5_1 = 0; if_ : { $0 = 2; break if_; } return $0 | 0; } function $25($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $3_1 = 0, $7_1 = 0; block : { if ($0) { $3_1 = 3; break block; } else { $7_1 = $1_1 } $3_1 = $7_1; } return $3_1 | 0; } function $26($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $6_1 = 0, $7_1 = 0; block : { if ($0) { $7_1 = $1_1 } else { $6_1 = 4; break block; } $6_1 = $7_1; } return $6_1 | 0; } function $27($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0; block : { $2_1 = 5; break block; } return $2_1 | 0; } function $28($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0; block : { $2_1 = $0; $3_1 = 6; break block; } return $3_1 | 0; } function $29() { var $0 = 0; block : { $0 = 7; break block; } return $0 | 0; } function f($0, $1_1, $2_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; return -1 | 0; } function $31() { var $0 = 0; block : { $0 = 12; break block; } return $0 | 0; } function $32() { var $0 = 0; block : { $0 = 13; break block; } return $0 | 0; } function $33() { var $0 = 0; block : { $0 = 14; break block; } return $0 | 0; } function $34() { var $0 = 0; block : { $0 = 20; break block; } return $0 | 0; } function $35() { var $0 = 0; block : { $0 = 21; break block; } return $0 | 0; } function $36() { var $0 = 0; block : { $0 = 22; break block; } return $0 | 0; } function $37() { var $0 = 0; block : { $0 = 23; break block; } return $0 | 0; } function $38() { var $1_1 = 0; block : { $1_1 = 17; break block; } return $1_1 | 0; } function $39() { var $1_1 = 0; block : { $1_1 = 1; break block; } return $1_1 | 0; } function $40() { var $0 = 0; block : { $0 = 1; break block; } return $0 | 0; } function $41() { var $0 = Math_fround(0); block : { $0 = Math_fround(1.7000000476837158); break block; } return Math_fround($0); } function $42() { var i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0; block : { i64toi32_i32$0 = 0; $0 = 30; $0$hi = i64toi32_i32$0; break block; } i64toi32_i32$0 = $0$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return $0 | 0; } function $43() { var $0 = 0; block : { $0 = 30; break block; } return $0 | 0; } function $44() { var $0 = 0; block : { $0 = 31; break block; } return $0 | 0; } function $45() { var $0 = 0; block : { $0 = 32; break block; } return $0 | 0; } function $46() { var $0 = 0; block : { $0 = 33; break block; } return $0 | 0; } function $47() { var $0 = Math_fround(0); block : { $0 = Math_fround(3.4000000953674316); break block; } return Math_fround($0); } function $48() { var $0 = 0; block : { $0 = 3; break block; } return $0 | 0; } function $49() { var $0 = 0, $0$hi = 0, i64toi32_i32$1 = 0; block : { $0 = 45; $0$hi = 0; break block; } i64toi32_i32$1 = $0$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return $0 | 0; } function $50() { var $0 = 0; block : { $0 = 44; break block; } return $0 | 0; } function $51() { var $0 = 0; block : { $0 = 43; break block; } return $0 | 0; } function $52() { var $0 = 0; block : { $0 = 42; break block; } return $0 | 0; } function $53() { var $0 = 0; block : { $0 = 41; break block; } return $0 | 0; } function $54() { var $0 = 0; block : { $0 = 40; break block; } return $0 | 0; } function $55() { var $0 = 0; block : { dummy(); $0 = 8; break block; } return 1 + $0 | 0 | 0; } function $56() { var $0 = 0; block : { block0 : { $0 = 8; break block; } } return 1 + $0 | 0 | 0; } function $57() { var $0 = 0, $1_1 = 0; block : { $0 = 8; break block; } return 1 + $0 | 0 | 0; } function $58() { var $0 = 0; block : { $0 = 8; break block; } return 1 + $0 | 0 | 0; } function $59() { var $0 = 0; block : { $0 = 8; break block; } return 1 + $0 | 0 | 0; } function $60() { var $0 = 0; block : { $0 = 8; break block; } return 1 + $0 | 0 | 0; } function legalstub$6() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $6() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0 | 0; } function legalstub$23() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $23() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0 | 0; } function legalstub$42() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $42() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0 | 0; } function legalstub$49() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $49() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0 | 0; } return { "type_i32": $1, "type_i64": $2, "type_f32": $3, "type_f64": $4, "type_i32_value": $5, "type_i64_value": legalstub$6, "type_f32_value": $7, "type_f64_value": $8, "as_block_first": $9, "as_block_mid": $10, "as_block_last": $11, "as_block_value": $12, "as_loop_first": $13, "as_loop_mid": $14, "as_loop_last": $15, "as_br_value": $16, "as_br_if_cond": $17, "as_br_if_value": $18, "as_br_if_value_cond": $19, "as_br_table_index": $20, "as_br_table_value": $21, "as_br_table_value_index": $22, "as_return_value": legalstub$23, "as_if_cond": $24, "as_if_then": $25, "as_if_else": $26, "as_select_first": $27, "as_select_second": $28, "as_select_cond": $29, "as_call_first": $31, "as_call_mid": $32, "as_call_last": $33, "as_call_indirect_func": $34, "as_call_indirect_first": $35, "as_call_indirect_mid": $36, "as_call_indirect_last": $37, "as_local_set_value": $38, "as_local_tee_value": $39, "as_global_set_value": $40, "as_load_address": $41, "as_loadN_address": legalstub$42, "as_store_address": $43, "as_store_value": $44, "as_storeN_address": $45, "as_storeN_value": $46, "as_unary_operand": $47, "as_binary_left": $48, "as_binary_right": legalstub$49, "as_test_operand": $50, "as_compare_left": $51, "as_compare_right": $52, "as_convert_operand": $53, "as_memory_grow_size": $54, "nested_block_value": $55, "nested_br_value": $56, "nested_br_if_value": $57, "nested_br_if_value_cond": $58, "nested_br_table_value": $59, "nested_br_table_value_index": $60 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var type_i32 = retasmFunc.type_i32; export var type_i64 = retasmFunc.type_i64; export var type_f32 = retasmFunc.type_f32; export var type_f64 = retasmFunc.type_f64; export var type_i32_value = retasmFunc.type_i32_value; export var type_i64_value = retasmFunc.type_i64_value; export var type_f32_value = retasmFunc.type_f32_value; export var type_f64_value = retasmFunc.type_f64_value; export var as_block_first = retasmFunc.as_block_first; export var as_block_mid = retasmFunc.as_block_mid; export var as_block_last = retasmFunc.as_block_last; export var as_block_value = retasmFunc.as_block_value; export var as_loop_first = retasmFunc.as_loop_first; export var as_loop_mid = retasmFunc.as_loop_mid; export var as_loop_last = retasmFunc.as_loop_last; export var as_br_value = retasmFunc.as_br_value; export var as_br_if_cond = retasmFunc.as_br_if_cond; export var as_br_if_value = retasmFunc.as_br_if_value; export var as_br_if_value_cond = retasmFunc.as_br_if_value_cond; export var as_br_table_index = retasmFunc.as_br_table_index; export var as_br_table_value = retasmFunc.as_br_table_value; export var as_br_table_value_index = retasmFunc.as_br_table_value_index; export var as_return_value = retasmFunc.as_return_value; export var as_if_cond = retasmFunc.as_if_cond; export var as_if_then = retasmFunc.as_if_then; export var as_if_else = retasmFunc.as_if_else; export var as_select_first = retasmFunc.as_select_first; export var as_select_second = retasmFunc.as_select_second; export var as_select_cond = retasmFunc.as_select_cond; export var as_call_first = retasmFunc.as_call_first; export var as_call_mid = retasmFunc.as_call_mid; export var as_call_last = retasmFunc.as_call_last; export var as_call_indirect_func = retasmFunc.as_call_indirect_func; export var as_call_indirect_first = retasmFunc.as_call_indirect_first; export var as_call_indirect_mid = retasmFunc.as_call_indirect_mid; export var as_call_indirect_last = retasmFunc.as_call_indirect_last; export var as_local_set_value = retasmFunc.as_local_set_value; export var as_local_tee_value = retasmFunc.as_local_tee_value; export var as_global_set_value = retasmFunc.as_global_set_value; export var as_load_address = retasmFunc.as_load_address; export var as_loadN_address = retasmFunc.as_loadN_address; export var as_store_address = retasmFunc.as_store_address; export var as_store_value = retasmFunc.as_store_value; export var as_storeN_address = retasmFunc.as_storeN_address; export var as_storeN_value = retasmFunc.as_storeN_value; export var as_unary_operand = retasmFunc.as_unary_operand; export var as_binary_left = retasmFunc.as_binary_left; export var as_binary_right = retasmFunc.as_binary_right; export var as_test_operand = retasmFunc.as_test_operand; export var as_compare_left = retasmFunc.as_compare_left; export var as_compare_right = retasmFunc.as_compare_right; export var as_convert_operand = retasmFunc.as_convert_operand; export var as_memory_grow_size = retasmFunc.as_memory_grow_size; export var nested_block_value = retasmFunc.nested_block_value; export var nested_br_value = retasmFunc.nested_br_value; export var nested_br_if_value = retasmFunc.nested_br_if_value; export var nested_br_if_value_cond = retasmFunc.nested_br_if_value_cond; export var nested_br_table_value = retasmFunc.nested_br_table_value; export var nested_br_table_value_index = retasmFunc.nested_br_table_value_index; binaryen-version_108/test/wasm2js/br_table.2asm.js000066400000000000000000006113311423707623100222700ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function dummy() { } function $1() { } function $2() { } function $3() { } function $4() { } function $5() { var $1_1 = 0; block : { $1_1 = 1; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $6() { var i64toi32_i32$0 = 0, $1_1 = 0, $1$hi = 0; block : { i64toi32_i32$0 = 0; $1_1 = 2; $1$hi = i64toi32_i32$0; switch (0 | 0) { default: break block; }; } i64toi32_i32$0 = $1$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return $1_1 | 0; } function $7() { var $1_1 = Math_fround(0); block : { $1_1 = Math_fround(3.0); switch (0 | 0) { default: break block; }; } return Math_fround($1_1); } function $8() { var $1_1 = 0.0; block : { $1_1 = 4.0; switch (0 | 0) { default: break block; }; } return +$1_1; } function $9($0) { $0 = $0 | 0; return 22 | 0; } function $10($0) { $0 = $0 | 0; var $3_1 = 0; block : { $3_1 = 33; switch ($0 | 0) { default: break block; }; } return $3_1 | 0; } function $11($0) { $0 = $0 | 0; block : { switch ($0 | 0) { default: return 20 | 0; case 0: break block; }; } return 22 | 0; } function $12($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0; block : { block1 : { $2_1 = 33; $3_1 = $2_1; $4_1 = $2_1; switch ($0 | 0) { case 0: break block1; default: break block; }; } $3_1 = 32; } return $3_1 | 0; } function $13($0) { $0 = $0 | 0; block : { switch ($0 | 0) { case 3: return 100 | 0; case 2: return 101 | 0; case 1: return 102 | 0; case 0: return 103 | 0; default: break block; }; } return 104 | 0; } function $14($0) { $0 = $0 | 0; var $1_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0; block : { block6 : { block7 : { block8 : { block9 : { $3_1 = 200; $4_1 = $3_1; $5_1 = $3_1; $6_1 = $3_1; $7_1 = $3_1; $8_1 = $3_1; switch ($0 | 0) { case 0: break block6; case 1: break block7; case 2: break block8; case 3: break block9; default: break block; }; } $1_1 = $8_1; return $1_1 + 10 | 0 | 0; } $1_1 = $7_1; return $1_1 + 11 | 0 | 0; } $1_1 = $6_1; return $1_1 + 12 | 0 | 0; } $1_1 = $5_1; return $1_1 + 13 | 0 | 0; } $1_1 = $4_1; return $1_1 + 14 | 0 | 0; } function $15($0) { $0 = $0 | 0; block : { switch ($0 | 0) { case 0: case 2: case 4: case 6: case 8: case 10: case 12: case 14: case 16: case 18: case 20: case 22: case 24: case 26: case 28: case 30: case 32: case 34: case 36: case 38: case 40: case 42: case 44: case 46: case 48: case 50: case 52: case 54: case 56: case 58: case 60: case 62: case 64: case 66: case 68: case 70: case 72: case 74: case 76: case 78: case 80: case 82: case 84: case 86: case 88: case 90: case 92: case 94: case 96: case 98: case 100: case 102: case 104: case 106: case 108: case 110: case 112: case 114: case 116: case 118: case 120: case 122: case 124: case 126: case 128: case 130: case 132: case 134: case 136: case 138: case 140: case 142: case 144: case 146: case 148: case 150: case 152: case 154: case 156: case 158: case 160: case 162: case 164: case 166: case 168: case 170: case 172: case 174: case 176: case 178: case 180: case 182: case 184: case 186: case 188: case 190: case 192: case 194: case 196: case 198: case 200: case 202: case 204: case 206: case 208: case 210: case 212: case 214: case 216: case 218: case 220: case 222: case 224: case 226: case 228: case 230: case 232: case 234: case 236: case 238: case 240: case 242: case 244: case 246: case 248: case 250: case 252: case 254: case 256: case 258: case 260: case 262: case 264: case 266: case 268: case 270: case 272: case 274: case 276: case 278: case 280: case 282: case 284: case 286: case 288: case 290: case 292: case 294: case 296: case 298: case 300: case 302: case 304: case 306: case 308: case 310: case 312: case 314: case 316: case 318: case 320: case 322: case 324: case 326: case 328: case 330: case 332: case 334: case 336: case 338: case 340: case 342: case 344: case 346: case 348: case 350: case 352: case 354: case 356: case 358: case 360: case 362: case 364: case 366: case 368: case 370: case 372: case 374: case 376: case 378: case 380: case 382: case 384: case 386: case 388: case 390: case 392: case 394: case 396: case 398: case 400: case 402: case 404: case 406: case 408: case 410: case 412: case 414: case 416: case 418: case 420: case 422: case 424: case 426: case 428: case 430: case 432: case 434: case 436: case 438: case 440: case 442: case 444: case 446: case 448: case 450: case 452: case 454: case 456: case 458: case 460: case 462: case 464: case 466: case 468: case 470: case 472: case 474: case 476: case 478: case 480: case 482: case 484: case 486: case 488: case 490: case 492: case 494: case 496: case 498: case 500: case 502: case 504: case 506: case 508: case 510: case 512: case 514: case 516: case 518: case 520: case 522: case 524: case 526: case 528: case 530: case 532: case 534: case 536: case 538: case 540: case 542: case 544: case 546: case 548: case 550: case 552: case 554: case 556: case 558: case 560: case 562: case 564: case 566: case 568: case 570: case 572: case 574: case 576: case 578: case 580: case 582: case 584: case 586: case 588: case 590: case 592: case 594: case 596: case 598: case 600: case 602: case 604: case 606: case 608: case 610: case 612: case 614: case 616: case 618: case 620: case 622: case 624: case 626: case 628: case 630: case 632: case 634: case 636: case 638: case 640: case 642: case 644: case 646: case 648: case 650: case 652: case 654: case 656: case 658: case 660: case 662: case 664: case 666: case 668: case 670: case 672: case 674: case 676: case 678: case 680: case 682: case 684: case 686: case 688: case 690: case 692: case 694: case 696: case 698: case 700: case 702: case 704: case 706: case 708: case 710: case 712: case 714: case 716: case 718: case 720: case 722: case 724: case 726: case 728: case 730: case 732: case 734: case 736: case 738: case 740: case 742: case 744: case 746: case 748: case 750: case 752: case 754: case 756: case 758: case 760: case 762: case 764: case 766: case 768: case 770: case 772: case 774: case 776: case 778: case 780: case 782: case 784: case 786: case 788: case 790: case 792: case 794: case 796: case 798: case 800: case 802: case 804: case 806: case 808: case 810: case 812: case 814: case 816: case 818: case 820: case 822: case 824: case 826: case 828: case 830: case 832: case 834: case 836: case 838: case 840: case 842: case 844: case 846: case 848: case 850: case 852: case 854: case 856: case 858: case 860: case 862: case 864: case 866: case 868: case 870: case 872: case 874: case 876: case 878: case 880: case 882: case 884: case 886: case 888: case 890: case 892: case 894: case 896: case 898: case 900: case 902: case 904: case 906: case 908: case 910: case 912: case 914: case 916: case 918: case 920: case 922: case 924: case 926: case 928: case 930: case 932: case 934: case 936: case 938: case 940: case 942: case 944: case 946: case 948: case 950: case 952: case 954: case 956: case 958: case 960: case 962: case 964: case 966: case 968: case 970: case 972: case 974: case 976: case 978: case 980: case 982: case 984: case 986: case 988: case 990: case 992: case 994: case 996: case 998: case 1e3: case 1002: case 1004: case 1006: case 1008: case 1010: case 1012: case 1014: case 1016: case 1018: case 1020: case 1022: case 1024: case 1026: case 1028: case 1030: case 1032: case 1034: case 1036: case 1038: case 1040: case 1042: case 1044: case 1046: case 1048: case 1050: case 1052: case 1054: case 1056: case 1058: case 1060: case 1062: case 1064: case 1066: case 1068: case 1070: case 1072: case 1074: case 1076: case 1078: case 1080: case 1082: case 1084: case 1086: case 1088: case 1090: case 1092: case 1094: case 1096: case 1098: case 1100: case 1102: case 1104: case 1106: case 1108: case 1110: case 1112: case 1114: case 1116: case 1118: case 1120: case 1122: case 1124: case 1126: case 1128: case 1130: case 1132: case 1134: case 1136: case 1138: case 1140: case 1142: case 1144: case 1146: case 1148: case 1150: case 1152: case 1154: case 1156: case 1158: case 1160: case 1162: case 1164: case 1166: case 1168: case 1170: case 1172: case 1174: case 1176: case 1178: case 1180: case 1182: case 1184: case 1186: case 1188: case 1190: case 1192: case 1194: case 1196: case 1198: case 1200: case 1202: case 1204: case 1206: case 1208: case 1210: case 1212: case 1214: case 1216: case 1218: case 1220: case 1222: case 1224: case 1226: case 1228: case 1230: case 1232: case 1234: case 1236: case 1238: case 1240: case 1242: case 1244: case 1246: case 1248: case 1250: case 1252: case 1254: case 1256: case 1258: case 1260: case 1262: case 1264: case 1266: case 1268: case 1270: case 1272: case 1274: case 1276: case 1278: case 1280: case 1282: case 1284: case 1286: case 1288: case 1290: case 1292: case 1294: case 1296: case 1298: case 1300: case 1302: case 1304: case 1306: case 1308: case 1310: case 1312: case 1314: case 1316: case 1318: case 1320: case 1322: case 1324: case 1326: case 1328: case 1330: case 1332: case 1334: case 1336: case 1338: case 1340: case 1342: case 1344: case 1346: case 1348: case 1350: case 1352: case 1354: case 1356: case 1358: case 1360: case 1362: case 1364: case 1366: case 1368: case 1370: case 1372: case 1374: case 1376: case 1378: case 1380: case 1382: case 1384: case 1386: case 1388: case 1390: case 1392: case 1394: case 1396: case 1398: case 1400: case 1402: case 1404: case 1406: case 1408: case 1410: case 1412: case 1414: case 1416: case 1418: case 1420: case 1422: case 1424: case 1426: case 1428: case 1430: case 1432: case 1434: case 1436: case 1438: case 1440: case 1442: case 1444: case 1446: case 1448: case 1450: case 1452: case 1454: case 1456: case 1458: case 1460: case 1462: case 1464: case 1466: case 1468: case 1470: case 1472: case 1474: case 1476: case 1478: case 1480: case 1482: case 1484: case 1486: case 1488: case 1490: case 1492: case 1494: case 1496: case 1498: case 1500: case 1502: case 1504: case 1506: case 1508: case 1510: case 1512: case 1514: case 1516: case 1518: case 1520: case 1522: case 1524: case 1526: case 1528: case 1530: case 1532: case 1534: case 1536: case 1538: case 1540: case 1542: case 1544: case 1546: case 1548: case 1550: case 1552: case 1554: case 1556: case 1558: case 1560: case 1562: case 1564: case 1566: case 1568: case 1570: case 1572: case 1574: case 1576: case 1578: case 1580: case 1582: case 1584: case 1586: case 1588: case 1590: case 1592: case 1594: case 1596: case 1598: case 1600: case 1602: case 1604: case 1606: case 1608: case 1610: case 1612: case 1614: case 1616: case 1618: case 1620: case 1622: case 1624: case 1626: case 1628: case 1630: case 1632: case 1634: case 1636: case 1638: case 1640: case 1642: case 1644: case 1646: case 1648: case 1650: case 1652: case 1654: case 1656: case 1658: case 1660: case 1662: case 1664: case 1666: case 1668: case 1670: case 1672: case 1674: case 1676: case 1678: case 1680: case 1682: case 1684: case 1686: case 1688: case 1690: case 1692: case 1694: case 1696: case 1698: case 1700: case 1702: case 1704: case 1706: case 1708: case 1710: case 1712: case 1714: case 1716: case 1718: case 1720: case 1722: case 1724: case 1726: case 1728: case 1730: case 1732: case 1734: case 1736: case 1738: case 1740: case 1742: case 1744: case 1746: case 1748: case 1750: case 1752: case 1754: case 1756: case 1758: case 1760: case 1762: case 1764: case 1766: case 1768: case 1770: case 1772: case 1774: case 1776: case 1778: case 1780: case 1782: case 1784: case 1786: case 1788: case 1790: case 1792: case 1794: case 1796: case 1798: case 1800: case 1802: case 1804: case 1806: case 1808: case 1810: case 1812: case 1814: case 1816: case 1818: case 1820: case 1822: case 1824: case 1826: case 1828: case 1830: case 1832: case 1834: case 1836: case 1838: case 1840: case 1842: case 1844: case 1846: case 1848: case 1850: case 1852: case 1854: case 1856: case 1858: case 1860: case 1862: case 1864: case 1866: case 1868: case 1870: case 1872: case 1874: case 1876: case 1878: case 1880: case 1882: case 1884: case 1886: case 1888: case 1890: case 1892: case 1894: case 1896: case 1898: case 1900: case 1902: case 1904: case 1906: case 1908: case 1910: case 1912: case 1914: case 1916: case 1918: case 1920: case 1922: case 1924: case 1926: case 1928: case 1930: case 1932: case 1934: case 1936: case 1938: case 1940: case 1942: case 1944: case 1946: case 1948: case 1950: case 1952: case 1954: case 1956: case 1958: case 1960: case 1962: case 1964: case 1966: case 1968: case 1970: case 1972: case 1974: case 1976: case 1978: case 1980: case 1982: case 1984: case 1986: case 1988: case 1990: case 1992: case 1994: case 1996: case 1998: case 2e3: case 2002: case 2004: case 2006: case 2008: case 2010: case 2012: case 2014: case 2016: case 2018: case 2020: case 2022: case 2024: case 2026: case 2028: case 2030: case 2032: case 2034: case 2036: case 2038: case 2040: case 2042: case 2044: case 2046: case 2048: case 2050: case 2052: case 2054: case 2056: case 2058: case 2060: case 2062: case 2064: case 2066: case 2068: case 2070: case 2072: case 2074: case 2076: case 2078: case 2080: case 2082: case 2084: case 2086: case 2088: case 2090: case 2092: case 2094: case 2096: case 2098: case 2100: case 2102: case 2104: case 2106: case 2108: case 2110: case 2112: case 2114: case 2116: case 2118: case 2120: case 2122: case 2124: case 2126: case 2128: case 2130: case 2132: case 2134: case 2136: case 2138: case 2140: case 2142: case 2144: case 2146: case 2148: case 2150: case 2152: case 2154: case 2156: case 2158: case 2160: case 2162: case 2164: case 2166: case 2168: case 2170: case 2172: case 2174: case 2176: case 2178: case 2180: case 2182: case 2184: case 2186: case 2188: case 2190: case 2192: case 2194: case 2196: case 2198: case 2200: case 2202: case 2204: case 2206: case 2208: case 2210: case 2212: case 2214: case 2216: case 2218: case 2220: case 2222: case 2224: case 2226: case 2228: case 2230: case 2232: case 2234: case 2236: case 2238: case 2240: case 2242: case 2244: case 2246: case 2248: case 2250: case 2252: case 2254: case 2256: case 2258: case 2260: case 2262: case 2264: case 2266: case 2268: case 2270: case 2272: case 2274: case 2276: case 2278: case 2280: case 2282: case 2284: case 2286: case 2288: case 2290: case 2292: case 2294: case 2296: case 2298: case 2300: case 2302: case 2304: case 2306: case 2308: case 2310: case 2312: case 2314: case 2316: case 2318: case 2320: case 2322: case 2324: case 2326: case 2328: case 2330: case 2332: case 2334: case 2336: case 2338: case 2340: case 2342: case 2344: case 2346: case 2348: case 2350: case 2352: case 2354: case 2356: case 2358: case 2360: case 2362: case 2364: case 2366: case 2368: case 2370: case 2372: case 2374: case 2376: case 2378: case 2380: case 2382: case 2384: case 2386: case 2388: case 2390: case 2392: case 2394: case 2396: case 2398: case 2400: case 2402: case 2404: case 2406: case 2408: case 2410: case 2412: case 2414: case 2416: case 2418: case 2420: case 2422: case 2424: case 2426: case 2428: case 2430: case 2432: case 2434: case 2436: case 2438: case 2440: case 2442: case 2444: case 2446: case 2448: case 2450: case 2452: case 2454: case 2456: case 2458: case 2460: case 2462: case 2464: case 2466: case 2468: case 2470: case 2472: case 2474: case 2476: case 2478: case 2480: case 2482: case 2484: case 2486: case 2488: case 2490: case 2492: case 2494: case 2496: case 2498: case 2500: case 2502: case 2504: case 2506: case 2508: case 2510: case 2512: case 2514: case 2516: case 2518: case 2520: case 2522: case 2524: case 2526: case 2528: case 2530: case 2532: case 2534: case 2536: case 2538: case 2540: case 2542: case 2544: case 2546: case 2548: case 2550: case 2552: case 2554: case 2556: case 2558: case 2560: case 2562: case 2564: case 2566: case 2568: case 2570: case 2572: case 2574: case 2576: case 2578: case 2580: case 2582: case 2584: case 2586: case 2588: case 2590: case 2592: case 2594: case 2596: case 2598: case 2600: case 2602: case 2604: case 2606: case 2608: case 2610: case 2612: case 2614: case 2616: case 2618: case 2620: case 2622: case 2624: case 2626: case 2628: case 2630: case 2632: case 2634: case 2636: case 2638: case 2640: case 2642: case 2644: case 2646: case 2648: case 2650: case 2652: case 2654: case 2656: case 2658: case 2660: case 2662: case 2664: case 2666: case 2668: case 2670: case 2672: case 2674: case 2676: case 2678: case 2680: case 2682: case 2684: case 2686: case 2688: case 2690: case 2692: case 2694: case 2696: case 2698: case 2700: case 2702: case 2704: case 2706: case 2708: case 2710: case 2712: case 2714: case 2716: case 2718: case 2720: case 2722: case 2724: case 2726: case 2728: case 2730: case 2732: case 2734: case 2736: case 2738: case 2740: case 2742: case 2744: case 2746: case 2748: case 2750: case 2752: case 2754: case 2756: case 2758: case 2760: case 2762: case 2764: case 2766: case 2768: case 2770: case 2772: case 2774: case 2776: case 2778: case 2780: case 2782: case 2784: case 2786: case 2788: case 2790: case 2792: case 2794: case 2796: case 2798: case 2800: case 2802: case 2804: case 2806: case 2808: case 2810: case 2812: case 2814: case 2816: case 2818: case 2820: case 2822: case 2824: case 2826: case 2828: case 2830: case 2832: case 2834: case 2836: case 2838: case 2840: case 2842: case 2844: case 2846: case 2848: case 2850: case 2852: case 2854: case 2856: case 2858: case 2860: case 2862: case 2864: case 2866: case 2868: case 2870: case 2872: case 2874: case 2876: case 2878: case 2880: case 2882: case 2884: case 2886: case 2888: case 2890: case 2892: case 2894: case 2896: case 2898: case 2900: case 2902: case 2904: case 2906: case 2908: case 2910: case 2912: case 2914: case 2916: case 2918: case 2920: case 2922: case 2924: case 2926: case 2928: case 2930: case 2932: case 2934: case 2936: case 2938: case 2940: case 2942: case 2944: case 2946: case 2948: case 2950: case 2952: case 2954: case 2956: case 2958: case 2960: case 2962: case 2964: case 2966: case 2968: case 2970: case 2972: case 2974: case 2976: case 2978: case 2980: case 2982: case 2984: case 2986: case 2988: case 2990: case 2992: case 2994: case 2996: case 2998: case 3e3: case 3002: case 3004: case 3006: case 3008: case 3010: case 3012: case 3014: case 3016: case 3018: case 3020: case 3022: case 3024: case 3026: case 3028: case 3030: case 3032: case 3034: case 3036: case 3038: case 3040: case 3042: case 3044: case 3046: case 3048: case 3050: case 3052: case 3054: case 3056: case 3058: case 3060: case 3062: case 3064: case 3066: case 3068: case 3070: case 3072: case 3074: case 3076: case 3078: case 3080: case 3082: case 3084: case 3086: case 3088: case 3090: case 3092: case 3094: case 3096: case 3098: case 3100: case 3102: case 3104: case 3106: case 3108: case 3110: case 3112: case 3114: case 3116: case 3118: case 3120: case 3122: case 3124: case 3126: case 3128: case 3130: case 3132: case 3134: case 3136: case 3138: case 3140: case 3142: case 3144: case 3146: case 3148: case 3150: case 3152: case 3154: case 3156: case 3158: case 3160: case 3162: case 3164: case 3166: case 3168: case 3170: case 3172: case 3174: case 3176: case 3178: case 3180: case 3182: case 3184: case 3186: case 3188: case 3190: case 3192: case 3194: case 3196: case 3198: case 3200: case 3202: case 3204: case 3206: case 3208: case 3210: case 3212: case 3214: case 3216: case 3218: case 3220: case 3222: case 3224: case 3226: case 3228: case 3230: case 3232: case 3234: case 3236: case 3238: case 3240: case 3242: case 3244: case 3246: case 3248: case 3250: case 3252: case 3254: case 3256: case 3258: case 3260: case 3262: case 3264: case 3266: case 3268: case 3270: case 3272: case 3274: case 3276: case 3278: case 3280: case 3282: case 3284: case 3286: case 3288: case 3290: case 3292: case 3294: case 3296: case 3298: case 3300: case 3302: case 3304: case 3306: case 3308: case 3310: case 3312: case 3314: case 3316: case 3318: case 3320: case 3322: case 3324: case 3326: case 3328: case 3330: case 3332: case 3334: case 3336: case 3338: case 3340: case 3342: case 3344: case 3346: case 3348: case 3350: case 3352: case 3354: case 3356: case 3358: case 3360: case 3362: case 3364: case 3366: case 3368: case 3370: case 3372: case 3374: case 3376: case 3378: case 3380: case 3382: case 3384: case 3386: case 3388: case 3390: case 3392: case 3394: case 3396: case 3398: case 3400: case 3402: case 3404: case 3406: case 3408: case 3410: case 3412: case 3414: case 3416: case 3418: case 3420: case 3422: case 3424: case 3426: case 3428: case 3430: case 3432: case 3434: case 3436: case 3438: case 3440: case 3442: case 3444: case 3446: case 3448: case 3450: case 3452: case 3454: case 3456: case 3458: case 3460: case 3462: case 3464: case 3466: case 3468: case 3470: case 3472: case 3474: case 3476: case 3478: case 3480: case 3482: case 3484: case 3486: case 3488: case 3490: case 3492: case 3494: case 3496: case 3498: case 3500: case 3502: case 3504: case 3506: case 3508: case 3510: case 3512: case 3514: case 3516: case 3518: case 3520: case 3522: case 3524: case 3526: case 3528: case 3530: case 3532: case 3534: case 3536: case 3538: case 3540: case 3542: case 3544: case 3546: case 3548: case 3550: case 3552: case 3554: case 3556: case 3558: case 3560: case 3562: case 3564: case 3566: case 3568: case 3570: case 3572: case 3574: case 3576: case 3578: case 3580: case 3582: case 3584: case 3586: case 3588: case 3590: case 3592: case 3594: case 3596: case 3598: case 3600: case 3602: case 3604: case 3606: case 3608: case 3610: case 3612: case 3614: case 3616: case 3618: case 3620: case 3622: case 3624: case 3626: case 3628: case 3630: case 3632: case 3634: case 3636: case 3638: case 3640: case 3642: case 3644: case 3646: case 3648: case 3650: case 3652: case 3654: case 3656: case 3658: case 3660: case 3662: case 3664: case 3666: case 3668: case 3670: case 3672: case 3674: case 3676: case 3678: case 3680: case 3682: case 3684: case 3686: case 3688: case 3690: case 3692: case 3694: case 3696: case 3698: case 3700: case 3702: case 3704: case 3706: case 3708: case 3710: case 3712: case 3714: case 3716: case 3718: case 3720: case 3722: case 3724: case 3726: case 3728: case 3730: case 3732: case 3734: case 3736: case 3738: case 3740: case 3742: case 3744: case 3746: case 3748: case 3750: case 3752: case 3754: case 3756: case 3758: case 3760: case 3762: case 3764: case 3766: case 3768: case 3770: case 3772: case 3774: case 3776: case 3778: case 3780: case 3782: case 3784: case 3786: case 3788: case 3790: case 3792: case 3794: case 3796: case 3798: case 3800: case 3802: case 3804: case 3806: case 3808: case 3810: case 3812: case 3814: case 3816: case 3818: case 3820: case 3822: case 3824: case 3826: case 3828: case 3830: case 3832: case 3834: case 3836: case 3838: case 3840: case 3842: case 3844: case 3846: case 3848: case 3850: case 3852: case 3854: case 3856: case 3858: case 3860: case 3862: case 3864: case 3866: case 3868: case 3870: case 3872: case 3874: case 3876: case 3878: case 3880: case 3882: case 3884: case 3886: case 3888: case 3890: case 3892: case 3894: case 3896: case 3898: case 3900: case 3902: case 3904: case 3906: case 3908: case 3910: case 3912: case 3914: case 3916: case 3918: case 3920: case 3922: case 3924: case 3926: case 3928: case 3930: case 3932: case 3934: case 3936: case 3938: case 3940: case 3942: case 3944: case 3946: case 3948: case 3950: case 3952: case 3954: case 3956: case 3958: case 3960: case 3962: case 3964: case 3966: case 3968: case 3970: case 3972: case 3974: case 3976: case 3978: case 3980: case 3982: case 3984: case 3986: case 3988: case 3990: case 3992: case 3994: case 3996: case 3998: case 4e3: case 4002: case 4004: case 4006: case 4008: case 4010: case 4012: case 4014: case 4016: case 4018: case 4020: case 4022: case 4024: case 4026: case 4028: case 4030: case 4032: case 4034: case 4036: case 4038: case 4040: case 4042: case 4044: case 4046: case 4048: case 4050: case 4052: case 4054: case 4056: case 4058: case 4060: case 4062: case 4064: case 4066: case 4068: case 4070: case 4072: case 4074: case 4076: case 4078: case 4080: case 4082: case 4084: case 4086: case 4088: case 4090: case 4092: case 4094: case 4096: case 4098: case 4100: case 4102: case 4104: case 4106: case 4108: case 4110: case 4112: case 4114: case 4116: case 4118: case 4120: case 4122: case 4124: case 4126: case 4128: case 4130: case 4132: case 4134: case 4136: case 4138: case 4140: case 4142: case 4144: case 4146: case 4148: case 4150: case 4152: case 4154: case 4156: case 4158: case 4160: case 4162: case 4164: case 4166: case 4168: case 4170: case 4172: case 4174: case 4176: case 4178: case 4180: case 4182: case 4184: case 4186: case 4188: case 4190: case 4192: case 4194: case 4196: case 4198: case 4200: case 4202: case 4204: case 4206: case 4208: case 4210: case 4212: case 4214: case 4216: case 4218: case 4220: case 4222: case 4224: case 4226: case 4228: case 4230: case 4232: case 4234: case 4236: case 4238: case 4240: case 4242: case 4244: case 4246: case 4248: case 4250: case 4252: case 4254: case 4256: case 4258: case 4260: case 4262: case 4264: case 4266: case 4268: case 4270: case 4272: case 4274: case 4276: case 4278: case 4280: case 4282: case 4284: case 4286: case 4288: case 4290: case 4292: case 4294: case 4296: case 4298: case 4300: case 4302: case 4304: case 4306: case 4308: case 4310: case 4312: case 4314: case 4316: case 4318: case 4320: case 4322: case 4324: case 4326: case 4328: case 4330: case 4332: case 4334: case 4336: case 4338: case 4340: case 4342: case 4344: case 4346: case 4348: case 4350: case 4352: case 4354: case 4356: case 4358: case 4360: case 4362: case 4364: case 4366: case 4368: case 4370: case 4372: case 4374: case 4376: case 4378: case 4380: case 4382: case 4384: case 4386: case 4388: case 4390: case 4392: case 4394: case 4396: case 4398: case 4400: case 4402: case 4404: case 4406: case 4408: case 4410: case 4412: case 4414: case 4416: case 4418: case 4420: case 4422: case 4424: case 4426: case 4428: case 4430: case 4432: case 4434: case 4436: case 4438: case 4440: case 4442: case 4444: case 4446: case 4448: case 4450: case 4452: case 4454: case 4456: case 4458: case 4460: case 4462: case 4464: case 4466: case 4468: case 4470: case 4472: case 4474: case 4476: case 4478: case 4480: case 4482: case 4484: case 4486: case 4488: case 4490: case 4492: case 4494: case 4496: case 4498: case 4500: case 4502: case 4504: case 4506: case 4508: case 4510: case 4512: case 4514: case 4516: case 4518: case 4520: case 4522: case 4524: case 4526: case 4528: case 4530: case 4532: case 4534: case 4536: case 4538: case 4540: case 4542: case 4544: case 4546: case 4548: case 4550: case 4552: case 4554: case 4556: case 4558: case 4560: case 4562: case 4564: case 4566: case 4568: case 4570: case 4572: case 4574: case 4576: case 4578: case 4580: case 4582: case 4584: case 4586: case 4588: case 4590: case 4592: case 4594: case 4596: case 4598: case 4600: case 4602: case 4604: case 4606: case 4608: case 4610: case 4612: case 4614: case 4616: case 4618: case 4620: case 4622: case 4624: case 4626: case 4628: case 4630: case 4632: case 4634: case 4636: case 4638: case 4640: case 4642: case 4644: case 4646: case 4648: case 4650: case 4652: case 4654: case 4656: case 4658: case 4660: case 4662: case 4664: case 4666: case 4668: case 4670: case 4672: case 4674: case 4676: case 4678: case 4680: case 4682: case 4684: case 4686: case 4688: case 4690: case 4692: case 4694: case 4696: case 4698: case 4700: case 4702: case 4704: case 4706: case 4708: case 4710: case 4712: case 4714: case 4716: case 4718: case 4720: case 4722: case 4724: case 4726: case 4728: case 4730: case 4732: case 4734: case 4736: case 4738: case 4740: case 4742: case 4744: case 4746: case 4748: case 4750: case 4752: case 4754: case 4756: case 4758: case 4760: case 4762: case 4764: case 4766: case 4768: case 4770: case 4772: case 4774: case 4776: case 4778: case 4780: case 4782: case 4784: case 4786: case 4788: case 4790: case 4792: case 4794: case 4796: case 4798: case 4800: case 4802: case 4804: case 4806: case 4808: case 4810: case 4812: case 4814: case 4816: case 4818: case 4820: case 4822: case 4824: case 4826: case 4828: case 4830: case 4832: case 4834: case 4836: case 4838: case 4840: case 4842: case 4844: case 4846: case 4848: case 4850: case 4852: case 4854: case 4856: case 4858: case 4860: case 4862: case 4864: case 4866: case 4868: case 4870: case 4872: case 4874: case 4876: case 4878: case 4880: case 4882: case 4884: case 4886: case 4888: case 4890: case 4892: case 4894: case 4896: case 4898: case 4900: case 4902: case 4904: case 4906: case 4908: case 4910: case 4912: case 4914: case 4916: case 4918: case 4920: case 4922: case 4924: case 4926: case 4928: case 4930: case 4932: case 4934: case 4936: case 4938: case 4940: case 4942: case 4944: case 4946: case 4948: case 4950: case 4952: case 4954: case 4956: case 4958: case 4960: case 4962: case 4964: case 4966: case 4968: case 4970: case 4972: case 4974: case 4976: case 4978: case 4980: case 4982: case 4984: case 4986: case 4988: case 4990: case 4992: case 4994: case 4996: case 4998: case 5e3: case 5002: case 5004: case 5006: case 5008: case 5010: case 5012: case 5014: case 5016: case 5018: case 5020: case 5022: case 5024: case 5026: case 5028: case 5030: case 5032: case 5034: case 5036: case 5038: case 5040: case 5042: case 5044: case 5046: case 5048: case 5050: case 5052: case 5054: case 5056: case 5058: case 5060: case 5062: case 5064: case 5066: case 5068: case 5070: case 5072: case 5074: case 5076: case 5078: case 5080: case 5082: case 5084: case 5086: case 5088: case 5090: case 5092: case 5094: case 5096: case 5098: case 5100: case 5102: case 5104: case 5106: case 5108: case 5110: case 5112: case 5114: case 5116: case 5118: case 5120: case 5122: case 5124: case 5126: case 5128: case 5130: case 5132: case 5134: case 5136: case 5138: case 5140: case 5142: case 5144: case 5146: case 5148: case 5150: case 5152: case 5154: case 5156: case 5158: case 5160: case 5162: case 5164: case 5166: case 5168: case 5170: case 5172: case 5174: case 5176: case 5178: case 5180: case 5182: case 5184: case 5186: case 5188: case 5190: case 5192: case 5194: case 5196: case 5198: case 5200: case 5202: case 5204: case 5206: case 5208: case 5210: case 5212: case 5214: case 5216: case 5218: case 5220: case 5222: case 5224: case 5226: case 5228: case 5230: case 5232: case 5234: case 5236: case 5238: case 5240: case 5242: case 5244: case 5246: case 5248: case 5250: case 5252: case 5254: case 5256: case 5258: case 5260: case 5262: case 5264: case 5266: case 5268: case 5270: case 5272: case 5274: case 5276: case 5278: case 5280: case 5282: case 5284: case 5286: case 5288: case 5290: case 5292: case 5294: case 5296: case 5298: case 5300: case 5302: case 5304: case 5306: case 5308: case 5310: case 5312: case 5314: case 5316: case 5318: case 5320: case 5322: case 5324: case 5326: case 5328: case 5330: case 5332: case 5334: case 5336: case 5338: case 5340: case 5342: case 5344: case 5346: case 5348: case 5350: case 5352: case 5354: case 5356: case 5358: case 5360: case 5362: case 5364: case 5366: case 5368: case 5370: case 5372: case 5374: case 5376: case 5378: case 5380: case 5382: case 5384: case 5386: case 5388: case 5390: case 5392: case 5394: case 5396: case 5398: case 5400: case 5402: case 5404: case 5406: case 5408: case 5410: case 5412: case 5414: case 5416: case 5418: case 5420: case 5422: case 5424: case 5426: case 5428: case 5430: case 5432: case 5434: case 5436: case 5438: case 5440: case 5442: case 5444: case 5446: case 5448: case 5450: case 5452: case 5454: case 5456: case 5458: case 5460: case 5462: case 5464: case 5466: case 5468: case 5470: case 5472: case 5474: case 5476: case 5478: case 5480: case 5482: case 5484: case 5486: case 5488: case 5490: case 5492: case 5494: case 5496: case 5498: case 5500: case 5502: case 5504: case 5506: case 5508: case 5510: case 5512: case 5514: case 5516: case 5518: case 5520: case 5522: case 5524: case 5526: case 5528: case 5530: case 5532: case 5534: case 5536: case 5538: case 5540: case 5542: case 5544: case 5546: case 5548: case 5550: case 5552: case 5554: case 5556: case 5558: case 5560: case 5562: case 5564: case 5566: case 5568: case 5570: case 5572: case 5574: case 5576: case 5578: case 5580: case 5582: case 5584: case 5586: case 5588: case 5590: case 5592: case 5594: case 5596: case 5598: case 5600: case 5602: case 5604: case 5606: case 5608: case 5610: case 5612: case 5614: case 5616: case 5618: case 5620: case 5622: case 5624: case 5626: case 5628: case 5630: case 5632: case 5634: case 5636: case 5638: case 5640: case 5642: case 5644: case 5646: case 5648: case 5650: case 5652: case 5654: case 5656: case 5658: case 5660: case 5662: case 5664: case 5666: case 5668: case 5670: case 5672: case 5674: case 5676: case 5678: case 5680: case 5682: case 5684: case 5686: case 5688: case 5690: case 5692: case 5694: case 5696: case 5698: case 5700: case 5702: case 5704: case 5706: case 5708: case 5710: case 5712: case 5714: case 5716: case 5718: case 5720: case 5722: case 5724: case 5726: case 5728: case 5730: case 5732: case 5734: case 5736: case 5738: case 5740: case 5742: case 5744: case 5746: case 5748: case 5750: case 5752: case 5754: case 5756: case 5758: case 5760: case 5762: case 5764: case 5766: case 5768: case 5770: case 5772: case 5774: case 5776: case 5778: case 5780: case 5782: case 5784: case 5786: case 5788: case 5790: case 5792: case 5794: case 5796: case 5798: case 5800: case 5802: case 5804: case 5806: case 5808: case 5810: case 5812: case 5814: case 5816: case 5818: case 5820: case 5822: case 5824: case 5826: case 5828: case 5830: case 5832: case 5834: case 5836: case 5838: case 5840: case 5842: case 5844: case 5846: case 5848: case 5850: case 5852: case 5854: case 5856: case 5858: case 5860: case 5862: case 5864: case 5866: case 5868: case 5870: case 5872: case 5874: case 5876: case 5878: case 5880: case 5882: case 5884: case 5886: case 5888: case 5890: case 5892: case 5894: case 5896: case 5898: case 5900: case 5902: case 5904: case 5906: case 5908: case 5910: case 5912: case 5914: case 5916: case 5918: case 5920: case 5922: case 5924: case 5926: case 5928: case 5930: case 5932: case 5934: case 5936: case 5938: case 5940: case 5942: case 5944: case 5946: case 5948: case 5950: case 5952: case 5954: case 5956: case 5958: case 5960: case 5962: case 5964: case 5966: case 5968: case 5970: case 5972: case 5974: case 5976: case 5978: case 5980: case 5982: case 5984: case 5986: case 5988: case 5990: case 5992: case 5994: case 5996: case 5998: case 6e3: case 6002: case 6004: case 6006: case 6008: case 6010: case 6012: case 6014: case 6016: case 6018: case 6020: case 6022: case 6024: case 6026: case 6028: case 6030: case 6032: case 6034: case 6036: case 6038: case 6040: case 6042: case 6044: case 6046: case 6048: case 6050: case 6052: case 6054: case 6056: case 6058: case 6060: case 6062: case 6064: case 6066: case 6068: case 6070: case 6072: case 6074: case 6076: case 6078: case 6080: case 6082: case 6084: case 6086: case 6088: case 6090: case 6092: case 6094: case 6096: case 6098: case 6100: case 6102: case 6104: case 6106: case 6108: case 6110: case 6112: case 6114: case 6116: case 6118: case 6120: case 6122: case 6124: case 6126: case 6128: case 6130: case 6132: case 6134: case 6136: case 6138: case 6140: case 6142: case 6144: case 6146: case 6148: case 6150: case 6152: case 6154: case 6156: case 6158: case 6160: case 6162: case 6164: case 6166: case 6168: case 6170: case 6172: case 6174: case 6176: case 6178: case 6180: case 6182: case 6184: case 6186: case 6188: case 6190: case 6192: case 6194: case 6196: case 6198: case 6200: case 6202: case 6204: case 6206: case 6208: case 6210: case 6212: case 6214: case 6216: case 6218: case 6220: case 6222: case 6224: case 6226: case 6228: case 6230: case 6232: case 6234: case 6236: case 6238: case 6240: case 6242: case 6244: case 6246: case 6248: case 6250: case 6252: case 6254: case 6256: case 6258: case 6260: case 6262: case 6264: case 6266: case 6268: case 6270: case 6272: case 6274: case 6276: case 6278: case 6280: case 6282: case 6284: case 6286: case 6288: case 6290: case 6292: case 6294: case 6296: case 6298: case 6300: case 6302: case 6304: case 6306: case 6308: case 6310: case 6312: case 6314: case 6316: case 6318: case 6320: case 6322: case 6324: case 6326: case 6328: case 6330: case 6332: case 6334: case 6336: case 6338: case 6340: case 6342: case 6344: case 6346: case 6348: case 6350: case 6352: case 6354: case 6356: case 6358: case 6360: case 6362: case 6364: case 6366: case 6368: case 6370: case 6372: case 6374: case 6376: case 6378: case 6380: case 6382: case 6384: case 6386: case 6388: case 6390: case 6392: case 6394: case 6396: case 6398: case 6400: case 6402: case 6404: case 6406: case 6408: case 6410: case 6412: case 6414: case 6416: case 6418: case 6420: case 6422: case 6424: case 6426: case 6428: case 6430: case 6432: case 6434: case 6436: case 6438: case 6440: case 6442: case 6444: case 6446: case 6448: case 6450: case 6452: case 6454: case 6456: case 6458: case 6460: case 6462: case 6464: case 6466: case 6468: case 6470: case 6472: case 6474: case 6476: case 6478: case 6480: case 6482: case 6484: case 6486: case 6488: case 6490: case 6492: case 6494: case 6496: case 6498: case 6500: case 6502: case 6504: case 6506: case 6508: case 6510: case 6512: case 6514: case 6516: case 6518: case 6520: case 6522: case 6524: case 6526: case 6528: case 6530: case 6532: case 6534: case 6536: case 6538: case 6540: case 6542: case 6544: case 6546: case 6548: case 6550: case 6552: case 6554: case 6556: case 6558: case 6560: case 6562: case 6564: case 6566: case 6568: case 6570: case 6572: case 6574: case 6576: case 6578: case 6580: case 6582: case 6584: case 6586: case 6588: case 6590: case 6592: case 6594: case 6596: case 6598: case 6600: case 6602: case 6604: case 6606: case 6608: case 6610: case 6612: case 6614: case 6616: case 6618: case 6620: case 6622: case 6624: case 6626: case 6628: case 6630: case 6632: case 6634: case 6636: case 6638: case 6640: case 6642: case 6644: case 6646: case 6648: case 6650: case 6652: case 6654: case 6656: case 6658: case 6660: case 6662: case 6664: case 6666: case 6668: case 6670: case 6672: case 6674: case 6676: case 6678: case 6680: case 6682: case 6684: case 6686: case 6688: case 6690: case 6692: case 6694: case 6696: case 6698: case 6700: case 6702: case 6704: case 6706: case 6708: case 6710: case 6712: case 6714: case 6716: case 6718: case 6720: case 6722: case 6724: case 6726: case 6728: case 6730: case 6732: case 6734: case 6736: case 6738: case 6740: case 6742: case 6744: case 6746: case 6748: case 6750: case 6752: case 6754: case 6756: case 6758: case 6760: case 6762: case 6764: case 6766: case 6768: case 6770: case 6772: case 6774: case 6776: case 6778: case 6780: case 6782: case 6784: case 6786: case 6788: case 6790: case 6792: case 6794: case 6796: case 6798: case 6800: case 6802: case 6804: case 6806: case 6808: case 6810: case 6812: case 6814: case 6816: case 6818: case 6820: case 6822: case 6824: case 6826: case 6828: case 6830: case 6832: case 6834: case 6836: case 6838: case 6840: case 6842: case 6844: case 6846: case 6848: case 6850: case 6852: case 6854: case 6856: case 6858: case 6860: case 6862: case 6864: case 6866: case 6868: case 6870: case 6872: case 6874: case 6876: case 6878: case 6880: case 6882: case 6884: case 6886: case 6888: case 6890: case 6892: case 6894: case 6896: case 6898: case 6900: case 6902: case 6904: case 6906: case 6908: case 6910: case 6912: case 6914: case 6916: case 6918: case 6920: case 6922: case 6924: case 6926: case 6928: case 6930: case 6932: case 6934: case 6936: case 6938: case 6940: case 6942: case 6944: case 6946: case 6948: case 6950: case 6952: case 6954: case 6956: case 6958: case 6960: case 6962: case 6964: case 6966: case 6968: case 6970: case 6972: case 6974: case 6976: case 6978: case 6980: case 6982: case 6984: case 6986: case 6988: case 6990: case 6992: case 6994: case 6996: case 6998: case 7e3: case 7002: case 7004: case 7006: case 7008: case 7010: case 7012: case 7014: case 7016: case 7018: case 7020: case 7022: case 7024: case 7026: case 7028: case 7030: case 7032: case 7034: case 7036: case 7038: case 7040: case 7042: case 7044: case 7046: case 7048: case 7050: case 7052: case 7054: case 7056: case 7058: case 7060: case 7062: case 7064: case 7066: case 7068: case 7070: case 7072: case 7074: case 7076: case 7078: case 7080: case 7082: case 7084: case 7086: case 7088: case 7090: case 7092: case 7094: case 7096: case 7098: case 7100: case 7102: case 7104: case 7106: case 7108: case 7110: case 7112: case 7114: case 7116: case 7118: case 7120: case 7122: case 7124: case 7126: case 7128: case 7130: case 7132: case 7134: case 7136: case 7138: case 7140: case 7142: case 7144: case 7146: case 7148: case 7150: case 7152: case 7154: case 7156: case 7158: case 7160: case 7162: case 7164: case 7166: case 7168: case 7170: case 7172: case 7174: case 7176: case 7178: case 7180: case 7182: case 7184: case 7186: case 7188: case 7190: case 7192: case 7194: case 7196: case 7198: case 7200: case 7202: case 7204: case 7206: case 7208: case 7210: case 7212: case 7214: case 7216: case 7218: case 7220: case 7222: case 7224: case 7226: case 7228: case 7230: case 7232: case 7234: case 7236: case 7238: case 7240: case 7242: case 7244: case 7246: case 7248: case 7250: case 7252: case 7254: case 7256: case 7258: case 7260: case 7262: case 7264: case 7266: case 7268: case 7270: case 7272: case 7274: case 7276: case 7278: case 7280: case 7282: case 7284: case 7286: case 7288: case 7290: case 7292: case 7294: case 7296: case 7298: case 7300: case 7302: case 7304: case 7306: case 7308: case 7310: case 7312: case 7314: case 7316: case 7318: case 7320: case 7322: case 7324: case 7326: case 7328: case 7330: case 7332: case 7334: case 7336: case 7338: case 7340: case 7342: case 7344: case 7346: case 7348: case 7350: case 7352: case 7354: case 7356: case 7358: case 7360: case 7362: case 7364: case 7366: case 7368: case 7370: case 7372: case 7374: case 7376: case 7378: case 7380: case 7382: case 7384: case 7386: case 7388: case 7390: case 7392: case 7394: case 7396: case 7398: case 7400: case 7402: case 7404: case 7406: case 7408: case 7410: case 7412: case 7414: case 7416: case 7418: case 7420: case 7422: case 7424: case 7426: case 7428: case 7430: case 7432: case 7434: case 7436: case 7438: case 7440: case 7442: case 7444: case 7446: case 7448: case 7450: case 7452: case 7454: case 7456: case 7458: case 7460: case 7462: case 7464: case 7466: case 7468: case 7470: case 7472: case 7474: case 7476: case 7478: case 7480: case 7482: case 7484: case 7486: case 7488: case 7490: case 7492: case 7494: case 7496: case 7498: case 7500: case 7502: case 7504: case 7506: case 7508: case 7510: case 7512: case 7514: case 7516: case 7518: case 7520: case 7522: case 7524: case 7526: case 7528: case 7530: case 7532: case 7534: case 7536: case 7538: case 7540: case 7542: case 7544: case 7546: case 7548: case 7550: case 7552: case 7554: case 7556: case 7558: case 7560: case 7562: case 7564: case 7566: case 7568: case 7570: case 7572: case 7574: case 7576: case 7578: case 7580: case 7582: case 7584: case 7586: case 7588: case 7590: case 7592: case 7594: case 7596: case 7598: case 7600: case 7602: case 7604: case 7606: case 7608: case 7610: case 7612: case 7614: case 7616: case 7618: case 7620: case 7622: case 7624: case 7626: case 7628: case 7630: case 7632: case 7634: case 7636: case 7638: case 7640: case 7642: case 7644: case 7646: case 7648: case 7650: case 7652: case 7654: case 7656: case 7658: case 7660: case 7662: case 7664: case 7666: case 7668: case 7670: case 7672: case 7674: case 7676: case 7678: case 7680: case 7682: case 7684: case 7686: case 7688: case 7690: case 7692: case 7694: case 7696: case 7698: case 7700: case 7702: case 7704: case 7706: case 7708: case 7710: case 7712: case 7714: case 7716: case 7718: case 7720: case 7722: case 7724: case 7726: case 7728: case 7730: case 7732: case 7734: case 7736: case 7738: case 7740: case 7742: case 7744: case 7746: case 7748: case 7750: case 7752: case 7754: case 7756: case 7758: case 7760: case 7762: case 7764: case 7766: case 7768: case 7770: case 7772: case 7774: case 7776: case 7778: case 7780: case 7782: case 7784: case 7786: case 7788: case 7790: case 7792: case 7794: case 7796: case 7798: case 7800: case 7802: case 7804: case 7806: case 7808: case 7810: case 7812: case 7814: case 7816: case 7818: case 7820: case 7822: case 7824: case 7826: case 7828: case 7830: case 7832: case 7834: case 7836: case 7838: case 7840: case 7842: case 7844: case 7846: case 7848: case 7850: case 7852: case 7854: case 7856: case 7858: case 7860: case 7862: case 7864: case 7866: case 7868: case 7870: case 7872: case 7874: case 7876: case 7878: case 7880: case 7882: case 7884: case 7886: case 7888: case 7890: case 7892: case 7894: case 7896: case 7898: case 7900: case 7902: case 7904: case 7906: case 7908: case 7910: case 7912: case 7914: case 7916: case 7918: case 7920: case 7922: case 7924: case 7926: case 7928: case 7930: case 7932: case 7934: case 7936: case 7938: case 7940: case 7942: case 7944: case 7946: case 7948: case 7950: case 7952: case 7954: case 7956: case 7958: case 7960: case 7962: case 7964: case 7966: case 7968: case 7970: case 7972: case 7974: case 7976: case 7978: case 7980: case 7982: case 7984: case 7986: case 7988: case 7990: case 7992: case 7994: case 7996: case 7998: case 8e3: case 8002: case 8004: case 8006: case 8008: case 8010: case 8012: case 8014: case 8016: case 8018: case 8020: case 8022: case 8024: case 8026: case 8028: case 8030: case 8032: case 8034: case 8036: case 8038: case 8040: case 8042: case 8044: case 8046: case 8048: case 8050: case 8052: case 8054: case 8056: case 8058: case 8060: case 8062: case 8064: case 8066: case 8068: case 8070: case 8072: case 8074: case 8076: case 8078: case 8080: case 8082: case 8084: case 8086: case 8088: case 8090: case 8092: case 8094: case 8096: case 8098: case 8100: case 8102: case 8104: case 8106: case 8108: case 8110: case 8112: case 8114: case 8116: case 8118: case 8120: case 8122: case 8124: case 8126: case 8128: case 8130: case 8132: case 8134: case 8136: case 8138: case 8140: case 8142: case 8144: case 8146: case 8148: case 8150: case 8152: case 8154: case 8156: case 8158: case 8160: case 8162: case 8164: case 8166: case 8168: case 8170: case 8172: case 8174: case 8176: case 8178: case 8180: case 8182: case 8184: case 8186: case 8188: case 8190: case 8192: case 8194: case 8196: case 8198: case 8200: case 8202: case 8204: case 8206: case 8208: case 8210: case 8212: case 8214: case 8216: case 8218: case 8220: case 8222: case 8224: case 8226: case 8228: case 8230: case 8232: case 8234: case 8236: case 8238: case 8240: case 8242: case 8244: case 8246: case 8248: case 8250: case 8252: case 8254: case 8256: case 8258: case 8260: case 8262: case 8264: case 8266: case 8268: case 8270: case 8272: case 8274: case 8276: case 8278: case 8280: case 8282: case 8284: case 8286: case 8288: case 8290: case 8292: case 8294: case 8296: case 8298: case 8300: case 8302: case 8304: case 8306: case 8308: case 8310: case 8312: case 8314: case 8316: case 8318: case 8320: case 8322: case 8324: case 8326: case 8328: case 8330: case 8332: case 8334: case 8336: case 8338: case 8340: case 8342: case 8344: case 8346: case 8348: case 8350: case 8352: case 8354: case 8356: case 8358: case 8360: case 8362: case 8364: case 8366: case 8368: case 8370: case 8372: case 8374: case 8376: case 8378: case 8380: case 8382: case 8384: case 8386: case 8388: case 8390: case 8392: case 8394: case 8396: case 8398: case 8400: case 8402: case 8404: case 8406: case 8408: case 8410: case 8412: case 8414: case 8416: case 8418: case 8420: case 8422: case 8424: case 8426: case 8428: case 8430: case 8432: case 8434: case 8436: case 8438: case 8440: case 8442: case 8444: case 8446: case 8448: case 8450: case 8452: case 8454: case 8456: case 8458: case 8460: case 8462: case 8464: case 8466: case 8468: case 8470: case 8472: case 8474: case 8476: case 8478: case 8480: case 8482: case 8484: case 8486: case 8488: case 8490: case 8492: case 8494: case 8496: case 8498: case 8500: case 8502: case 8504: case 8506: case 8508: case 8510: case 8512: case 8514: case 8516: case 8518: case 8520: case 8522: case 8524: case 8526: case 8528: case 8530: case 8532: case 8534: case 8536: case 8538: case 8540: case 8542: case 8544: case 8546: case 8548: case 8550: case 8552: case 8554: case 8556: case 8558: case 8560: case 8562: case 8564: case 8566: case 8568: case 8570: case 8572: case 8574: case 8576: case 8578: case 8580: case 8582: case 8584: case 8586: case 8588: case 8590: case 8592: case 8594: case 8596: case 8598: case 8600: case 8602: case 8604: case 8606: case 8608: case 8610: case 8612: case 8614: case 8616: case 8618: case 8620: case 8622: case 8624: case 8626: case 8628: case 8630: case 8632: case 8634: case 8636: case 8638: case 8640: case 8642: case 8644: case 8646: case 8648: case 8650: case 8652: case 8654: case 8656: case 8658: case 8660: case 8662: case 8664: case 8666: case 8668: case 8670: case 8672: case 8674: case 8676: case 8678: case 8680: case 8682: case 8684: case 8686: case 8688: case 8690: case 8692: case 8694: case 8696: case 8698: case 8700: case 8702: case 8704: case 8706: case 8708: case 8710: case 8712: case 8714: case 8716: case 8718: case 8720: case 8722: case 8724: case 8726: case 8728: case 8730: case 8732: case 8734: case 8736: case 8738: case 8740: case 8742: case 8744: case 8746: case 8748: case 8750: case 8752: case 8754: case 8756: case 8758: case 8760: case 8762: case 8764: case 8766: case 8768: case 8770: case 8772: case 8774: case 8776: case 8778: case 8780: case 8782: case 8784: case 8786: case 8788: case 8790: case 8792: case 8794: case 8796: case 8798: case 8800: case 8802: case 8804: case 8806: case 8808: case 8810: case 8812: case 8814: case 8816: case 8818: case 8820: case 8822: case 8824: case 8826: case 8828: case 8830: case 8832: case 8834: case 8836: case 8838: case 8840: case 8842: case 8844: case 8846: case 8848: case 8850: case 8852: case 8854: case 8856: case 8858: case 8860: case 8862: case 8864: case 8866: case 8868: case 8870: case 8872: case 8874: case 8876: case 8878: case 8880: case 8882: case 8884: case 8886: case 8888: case 8890: case 8892: case 8894: case 8896: case 8898: case 8900: case 8902: case 8904: case 8906: case 8908: case 8910: case 8912: case 8914: case 8916: case 8918: case 8920: case 8922: case 8924: case 8926: case 8928: case 8930: case 8932: case 8934: case 8936: case 8938: case 8940: case 8942: case 8944: case 8946: case 8948: case 8950: case 8952: case 8954: case 8956: case 8958: case 8960: case 8962: case 8964: case 8966: case 8968: case 8970: case 8972: case 8974: case 8976: case 8978: case 8980: case 8982: case 8984: case 8986: case 8988: case 8990: case 8992: case 8994: case 8996: case 8998: case 9e3: case 9002: case 9004: case 9006: case 9008: case 9010: case 9012: case 9014: case 9016: case 9018: case 9020: case 9022: case 9024: case 9026: case 9028: case 9030: case 9032: case 9034: case 9036: case 9038: case 9040: case 9042: case 9044: case 9046: case 9048: case 9050: case 9052: case 9054: case 9056: case 9058: case 9060: case 9062: case 9064: case 9066: case 9068: case 9070: case 9072: case 9074: case 9076: case 9078: case 9080: case 9082: case 9084: case 9086: case 9088: case 9090: case 9092: case 9094: case 9096: case 9098: case 9100: case 9102: case 9104: case 9106: case 9108: case 9110: case 9112: case 9114: case 9116: case 9118: case 9120: case 9122: case 9124: case 9126: case 9128: case 9130: case 9132: case 9134: case 9136: case 9138: case 9140: case 9142: case 9144: case 9146: case 9148: case 9150: case 9152: case 9154: case 9156: case 9158: case 9160: case 9162: case 9164: case 9166: case 9168: case 9170: case 9172: case 9174: case 9176: case 9178: case 9180: case 9182: case 9184: case 9186: case 9188: case 9190: case 9192: case 9194: case 9196: case 9198: case 9200: case 9202: case 9204: case 9206: case 9208: case 9210: case 9212: case 9214: case 9216: case 9218: case 9220: case 9222: case 9224: case 9226: case 9228: case 9230: case 9232: case 9234: case 9236: case 9238: case 9240: case 9242: case 9244: case 9246: case 9248: case 9250: case 9252: case 9254: case 9256: case 9258: case 9260: case 9262: case 9264: case 9266: case 9268: case 9270: case 9272: case 9274: case 9276: case 9278: case 9280: case 9282: case 9284: case 9286: case 9288: case 9290: case 9292: case 9294: case 9296: case 9298: case 9300: case 9302: case 9304: case 9306: case 9308: case 9310: case 9312: case 9314: case 9316: case 9318: case 9320: case 9322: case 9324: case 9326: case 9328: case 9330: case 9332: case 9334: case 9336: case 9338: case 9340: case 9342: case 9344: case 9346: case 9348: case 9350: case 9352: case 9354: case 9356: case 9358: case 9360: case 9362: case 9364: case 9366: case 9368: case 9370: case 9372: case 9374: case 9376: case 9378: case 9380: case 9382: case 9384: case 9386: case 9388: case 9390: case 9392: case 9394: case 9396: case 9398: case 9400: case 9402: case 9404: case 9406: case 9408: case 9410: case 9412: case 9414: case 9416: case 9418: case 9420: case 9422: case 9424: case 9426: case 9428: case 9430: case 9432: case 9434: case 9436: case 9438: case 9440: case 9442: case 9444: case 9446: case 9448: case 9450: case 9452: case 9454: case 9456: case 9458: case 9460: case 9462: case 9464: case 9466: case 9468: case 9470: case 9472: case 9474: case 9476: case 9478: case 9480: case 9482: case 9484: case 9486: case 9488: case 9490: case 9492: case 9494: case 9496: case 9498: case 9500: case 9502: case 9504: case 9506: case 9508: case 9510: case 9512: case 9514: case 9516: case 9518: case 9520: case 9522: case 9524: case 9526: case 9528: case 9530: case 9532: case 9534: case 9536: case 9538: case 9540: case 9542: case 9544: case 9546: case 9548: case 9550: case 9552: case 9554: case 9556: case 9558: case 9560: case 9562: case 9564: case 9566: case 9568: case 9570: case 9572: case 9574: case 9576: case 9578: case 9580: case 9582: case 9584: case 9586: case 9588: case 9590: case 9592: case 9594: case 9596: case 9598: case 9600: case 9602: case 9604: case 9606: case 9608: case 9610: case 9612: case 9614: case 9616: case 9618: case 9620: case 9622: case 9624: case 9626: case 9628: case 9630: case 9632: case 9634: case 9636: case 9638: case 9640: case 9642: case 9644: case 9646: case 9648: case 9650: case 9652: case 9654: case 9656: case 9658: case 9660: case 9662: case 9664: case 9666: case 9668: case 9670: case 9672: case 9674: case 9676: case 9678: case 9680: case 9682: case 9684: case 9686: case 9688: case 9690: case 9692: case 9694: case 9696: case 9698: case 9700: case 9702: case 9704: case 9706: case 9708: case 9710: case 9712: case 9714: case 9716: case 9718: case 9720: case 9722: case 9724: case 9726: case 9728: case 9730: case 9732: case 9734: case 9736: case 9738: case 9740: case 9742: case 9744: case 9746: case 9748: case 9750: case 9752: case 9754: case 9756: case 9758: case 9760: case 9762: case 9764: case 9766: case 9768: case 9770: case 9772: case 9774: case 9776: case 9778: case 9780: case 9782: case 9784: case 9786: case 9788: case 9790: case 9792: case 9794: case 9796: case 9798: case 9800: case 9802: case 9804: case 9806: case 9808: case 9810: case 9812: case 9814: case 9816: case 9818: case 9820: case 9822: case 9824: case 9826: case 9828: case 9830: case 9832: case 9834: case 9836: case 9838: case 9840: case 9842: case 9844: case 9846: case 9848: case 9850: case 9852: case 9854: case 9856: case 9858: case 9860: case 9862: case 9864: case 9866: case 9868: case 9870: case 9872: case 9874: case 9876: case 9878: case 9880: case 9882: case 9884: case 9886: case 9888: case 9890: case 9892: case 9894: case 9896: case 9898: case 9900: case 9902: case 9904: case 9906: case 9908: case 9910: case 9912: case 9914: case 9916: case 9918: case 9920: case 9922: case 9924: case 9926: case 9928: case 9930: case 9932: case 9934: case 9936: case 9938: case 9940: case 9942: case 9944: case 9946: case 9948: case 9950: case 9952: case 9954: case 9956: case 9958: case 9960: case 9962: case 9964: case 9966: case 9968: case 9970: case 9972: case 9974: case 9976: case 9978: case 9980: case 9982: case 9984: case 9986: case 9988: case 9990: case 9992: case 9994: case 9996: case 9998: case 1e4: case 10002: case 10004: case 10006: case 10008: case 10010: case 10012: case 10014: case 10016: case 10018: case 10020: case 10022: case 10024: case 10026: case 10028: case 10030: case 10032: case 10034: case 10036: case 10038: case 10040: case 10042: case 10044: case 10046: case 10048: case 10050: case 10052: case 10054: case 10056: case 10058: case 10060: case 10062: case 10064: case 10066: case 10068: case 10070: case 10072: case 10074: case 10076: case 10078: case 10080: case 10082: case 10084: case 10086: case 10088: case 10090: case 10092: case 10094: case 10096: case 10098: case 10100: case 10102: case 10104: case 10106: case 10108: case 10110: case 10112: case 10114: case 10116: case 10118: case 10120: case 10122: case 10124: case 10126: case 10128: case 10130: case 10132: case 10134: case 10136: case 10138: case 10140: case 10142: case 10144: case 10146: case 10148: case 10150: case 10152: case 10154: case 10156: case 10158: case 10160: case 10162: case 10164: case 10166: case 10168: case 10170: case 10172: case 10174: case 10176: case 10178: case 10180: case 10182: case 10184: case 10186: case 10188: case 10190: case 10192: case 10194: case 10196: case 10198: case 10200: case 10202: case 10204: case 10206: case 10208: case 10210: case 10212: case 10214: case 10216: case 10218: case 10220: case 10222: case 10224: case 10226: case 10228: case 10230: case 10232: case 10234: case 10236: case 10238: case 10240: case 10242: case 10244: case 10246: case 10248: case 10250: case 10252: case 10254: case 10256: case 10258: case 10260: case 10262: case 10264: case 10266: case 10268: case 10270: case 10272: case 10274: case 10276: case 10278: case 10280: case 10282: case 10284: case 10286: case 10288: case 10290: case 10292: case 10294: case 10296: case 10298: case 10300: case 10302: case 10304: case 10306: case 10308: case 10310: case 10312: case 10314: case 10316: case 10318: case 10320: case 10322: case 10324: case 10326: case 10328: case 10330: case 10332: case 10334: case 10336: case 10338: case 10340: case 10342: case 10344: case 10346: case 10348: case 10350: case 10352: case 10354: case 10356: case 10358: case 10360: case 10362: case 10364: case 10366: case 10368: case 10370: case 10372: case 10374: case 10376: case 10378: case 10380: case 10382: case 10384: case 10386: case 10388: case 10390: case 10392: case 10394: case 10396: case 10398: case 10400: case 10402: case 10404: case 10406: case 10408: case 10410: case 10412: case 10414: case 10416: case 10418: case 10420: case 10422: case 10424: case 10426: case 10428: case 10430: case 10432: case 10434: case 10436: case 10438: case 10440: case 10442: case 10444: case 10446: case 10448: case 10450: case 10452: case 10454: case 10456: case 10458: case 10460: case 10462: case 10464: case 10466: case 10468: case 10470: case 10472: case 10474: case 10476: case 10478: case 10480: case 10482: case 10484: case 10486: case 10488: case 10490: case 10492: case 10494: case 10496: case 10498: case 10500: case 10502: case 10504: case 10506: case 10508: case 10510: case 10512: case 10514: case 10516: case 10518: case 10520: case 10522: case 10524: case 10526: case 10528: case 10530: case 10532: case 10534: case 10536: case 10538: case 10540: case 10542: case 10544: case 10546: case 10548: case 10550: case 10552: case 10554: case 10556: case 10558: case 10560: case 10562: case 10564: case 10566: case 10568: case 10570: case 10572: case 10574: case 10576: case 10578: case 10580: case 10582: case 10584: case 10586: case 10588: case 10590: case 10592: case 10594: case 10596: case 10598: case 10600: case 10602: case 10604: case 10606: case 10608: case 10610: case 10612: case 10614: case 10616: case 10618: case 10620: case 10622: case 10624: case 10626: case 10628: case 10630: case 10632: case 10634: case 10636: case 10638: case 10640: case 10642: case 10644: case 10646: case 10648: case 10650: case 10652: case 10654: case 10656: case 10658: case 10660: case 10662: case 10664: case 10666: case 10668: case 10670: case 10672: case 10674: case 10676: case 10678: case 10680: case 10682: case 10684: case 10686: case 10688: case 10690: case 10692: case 10694: case 10696: case 10698: case 10700: case 10702: case 10704: case 10706: case 10708: case 10710: case 10712: case 10714: case 10716: case 10718: case 10720: case 10722: case 10724: case 10726: case 10728: case 10730: case 10732: case 10734: case 10736: case 10738: case 10740: case 10742: case 10744: case 10746: case 10748: case 10750: case 10752: case 10754: case 10756: case 10758: case 10760: case 10762: case 10764: case 10766: case 10768: case 10770: case 10772: case 10774: case 10776: case 10778: case 10780: case 10782: case 10784: case 10786: case 10788: case 10790: case 10792: case 10794: case 10796: case 10798: case 10800: case 10802: case 10804: case 10806: case 10808: case 10810: case 10812: case 10814: case 10816: case 10818: case 10820: case 10822: case 10824: case 10826: case 10828: case 10830: case 10832: case 10834: case 10836: case 10838: case 10840: case 10842: case 10844: case 10846: case 10848: case 10850: case 10852: case 10854: case 10856: case 10858: case 10860: case 10862: case 10864: case 10866: case 10868: case 10870: case 10872: case 10874: case 10876: case 10878: case 10880: case 10882: case 10884: case 10886: case 10888: case 10890: case 10892: case 10894: case 10896: case 10898: case 10900: case 10902: case 10904: case 10906: case 10908: case 10910: case 10912: case 10914: case 10916: case 10918: case 10920: case 10922: case 10924: case 10926: case 10928: case 10930: case 10932: case 10934: case 10936: case 10938: case 10940: case 10942: case 10944: case 10946: case 10948: case 10950: case 10952: case 10954: case 10956: case 10958: case 10960: case 10962: case 10964: case 10966: case 10968: case 10970: case 10972: case 10974: case 10976: case 10978: case 10980: case 10982: case 10984: case 10986: case 10988: case 10990: case 10992: case 10994: case 10996: case 10998: case 11e3: case 11002: case 11004: case 11006: case 11008: case 11010: case 11012: case 11014: case 11016: case 11018: case 11020: case 11022: case 11024: case 11026: case 11028: case 11030: case 11032: case 11034: case 11036: case 11038: case 11040: case 11042: case 11044: case 11046: case 11048: case 11050: case 11052: case 11054: case 11056: case 11058: case 11060: case 11062: case 11064: case 11066: case 11068: case 11070: case 11072: case 11074: case 11076: case 11078: case 11080: case 11082: case 11084: case 11086: case 11088: case 11090: case 11092: case 11094: case 11096: case 11098: case 11100: case 11102: case 11104: case 11106: case 11108: case 11110: case 11112: case 11114: case 11116: case 11118: case 11120: case 11122: case 11124: case 11126: case 11128: case 11130: case 11132: case 11134: case 11136: case 11138: case 11140: case 11142: case 11144: case 11146: case 11148: case 11150: case 11152: case 11154: case 11156: case 11158: case 11160: case 11162: case 11164: case 11166: case 11168: case 11170: case 11172: case 11174: case 11176: case 11178: case 11180: case 11182: case 11184: case 11186: case 11188: case 11190: case 11192: case 11194: case 11196: case 11198: case 11200: case 11202: case 11204: case 11206: case 11208: case 11210: case 11212: case 11214: case 11216: case 11218: case 11220: case 11222: case 11224: case 11226: case 11228: case 11230: case 11232: case 11234: case 11236: case 11238: case 11240: case 11242: case 11244: case 11246: case 11248: case 11250: case 11252: case 11254: case 11256: case 11258: case 11260: case 11262: case 11264: case 11266: case 11268: case 11270: case 11272: case 11274: case 11276: case 11278: case 11280: case 11282: case 11284: case 11286: case 11288: case 11290: case 11292: case 11294: case 11296: case 11298: case 11300: case 11302: case 11304: case 11306: case 11308: case 11310: case 11312: case 11314: case 11316: case 11318: case 11320: case 11322: case 11324: case 11326: case 11328: case 11330: case 11332: case 11334: case 11336: case 11338: case 11340: case 11342: case 11344: case 11346: case 11348: case 11350: case 11352: case 11354: case 11356: case 11358: case 11360: case 11362: case 11364: case 11366: case 11368: case 11370: case 11372: case 11374: case 11376: case 11378: case 11380: case 11382: case 11384: case 11386: case 11388: case 11390: case 11392: case 11394: case 11396: case 11398: case 11400: case 11402: case 11404: case 11406: case 11408: case 11410: case 11412: case 11414: case 11416: case 11418: case 11420: case 11422: case 11424: case 11426: case 11428: case 11430: case 11432: case 11434: case 11436: case 11438: case 11440: case 11442: case 11444: case 11446: case 11448: case 11450: case 11452: case 11454: case 11456: case 11458: case 11460: case 11462: case 11464: case 11466: case 11468: case 11470: case 11472: case 11474: case 11476: case 11478: case 11480: case 11482: case 11484: case 11486: case 11488: case 11490: case 11492: case 11494: case 11496: case 11498: case 11500: case 11502: case 11504: case 11506: case 11508: case 11510: case 11512: case 11514: case 11516: case 11518: case 11520: case 11522: case 11524: case 11526: case 11528: case 11530: case 11532: case 11534: case 11536: case 11538: case 11540: case 11542: case 11544: case 11546: case 11548: case 11550: case 11552: case 11554: case 11556: case 11558: case 11560: case 11562: case 11564: case 11566: case 11568: case 11570: case 11572: case 11574: case 11576: case 11578: case 11580: case 11582: case 11584: case 11586: case 11588: case 11590: case 11592: case 11594: case 11596: case 11598: case 11600: case 11602: case 11604: case 11606: case 11608: case 11610: case 11612: case 11614: case 11616: case 11618: case 11620: case 11622: case 11624: case 11626: case 11628: case 11630: case 11632: case 11634: case 11636: case 11638: case 11640: case 11642: case 11644: case 11646: case 11648: case 11650: case 11652: case 11654: case 11656: case 11658: case 11660: case 11662: case 11664: case 11666: case 11668: case 11670: case 11672: case 11674: case 11676: case 11678: case 11680: case 11682: case 11684: case 11686: case 11688: case 11690: case 11692: case 11694: case 11696: case 11698: case 11700: case 11702: case 11704: case 11706: case 11708: case 11710: case 11712: case 11714: case 11716: case 11718: case 11720: case 11722: case 11724: case 11726: case 11728: case 11730: case 11732: case 11734: case 11736: case 11738: case 11740: case 11742: case 11744: case 11746: case 11748: case 11750: case 11752: case 11754: case 11756: case 11758: case 11760: case 11762: case 11764: case 11766: case 11768: case 11770: case 11772: case 11774: case 11776: case 11778: case 11780: case 11782: case 11784: case 11786: case 11788: case 11790: case 11792: case 11794: case 11796: case 11798: case 11800: case 11802: case 11804: case 11806: case 11808: case 11810: case 11812: case 11814: case 11816: case 11818: case 11820: case 11822: case 11824: case 11826: case 11828: case 11830: case 11832: case 11834: case 11836: case 11838: case 11840: case 11842: case 11844: case 11846: case 11848: case 11850: case 11852: case 11854: case 11856: case 11858: case 11860: case 11862: case 11864: case 11866: case 11868: case 11870: case 11872: case 11874: case 11876: case 11878: case 11880: case 11882: case 11884: case 11886: case 11888: case 11890: case 11892: case 11894: case 11896: case 11898: case 11900: case 11902: case 11904: case 11906: case 11908: case 11910: case 11912: case 11914: case 11916: case 11918: case 11920: case 11922: case 11924: case 11926: case 11928: case 11930: case 11932: case 11934: case 11936: case 11938: case 11940: case 11942: case 11944: case 11946: case 11948: case 11950: case 11952: case 11954: case 11956: case 11958: case 11960: case 11962: case 11964: case 11966: case 11968: case 11970: case 11972: case 11974: case 11976: case 11978: case 11980: case 11982: case 11984: case 11986: case 11988: case 11990: case 11992: case 11994: case 11996: case 11998: case 12e3: case 12002: case 12004: case 12006: case 12008: case 12010: case 12012: case 12014: case 12016: case 12018: case 12020: case 12022: case 12024: case 12026: case 12028: case 12030: case 12032: case 12034: case 12036: case 12038: case 12040: case 12042: case 12044: case 12046: case 12048: case 12050: case 12052: case 12054: case 12056: case 12058: case 12060: case 12062: case 12064: case 12066: case 12068: case 12070: case 12072: case 12074: case 12076: case 12078: case 12080: case 12082: case 12084: case 12086: case 12088: case 12090: case 12092: case 12094: case 12096: case 12098: case 12100: case 12102: case 12104: case 12106: case 12108: case 12110: case 12112: case 12114: case 12116: case 12118: case 12120: case 12122: case 12124: case 12126: case 12128: case 12130: case 12132: case 12134: case 12136: case 12138: case 12140: case 12142: case 12144: case 12146: case 12148: case 12150: case 12152: case 12154: case 12156: case 12158: case 12160: case 12162: case 12164: case 12166: case 12168: case 12170: case 12172: case 12174: case 12176: case 12178: case 12180: case 12182: case 12184: case 12186: case 12188: case 12190: case 12192: case 12194: case 12196: case 12198: case 12200: case 12202: case 12204: case 12206: case 12208: case 12210: case 12212: case 12214: case 12216: case 12218: case 12220: case 12222: case 12224: case 12226: case 12228: case 12230: case 12232: case 12234: case 12236: case 12238: case 12240: case 12242: case 12244: case 12246: case 12248: case 12250: case 12252: case 12254: case 12256: case 12258: case 12260: case 12262: case 12264: case 12266: case 12268: case 12270: case 12272: case 12274: case 12276: case 12278: case 12280: case 12282: case 12284: case 12286: case 12288: case 12290: case 12292: case 12294: case 12296: case 12298: case 12300: case 12302: case 12304: case 12306: case 12308: case 12310: case 12312: case 12314: case 12316: case 12318: case 12320: case 12322: case 12324: case 12326: case 12328: case 12330: case 12332: case 12334: case 12336: case 12338: case 12340: case 12342: case 12344: case 12346: case 12348: case 12350: case 12352: case 12354: case 12356: case 12358: case 12360: case 12362: case 12364: case 12366: case 12368: case 12370: case 12372: case 12374: case 12376: case 12378: case 12380: case 12382: case 12384: case 12386: case 12388: case 12390: case 12392: case 12394: case 12396: case 12398: case 12400: case 12402: case 12404: case 12406: case 12408: case 12410: case 12412: case 12414: case 12416: case 12418: case 12420: case 12422: case 12424: case 12426: case 12428: case 12430: case 12432: case 12434: case 12436: case 12438: case 12440: case 12442: case 12444: case 12446: case 12448: case 12450: case 12452: case 12454: case 12456: case 12458: case 12460: case 12462: case 12464: case 12466: case 12468: case 12470: case 12472: case 12474: case 12476: case 12478: case 12480: case 12482: case 12484: case 12486: case 12488: case 12490: case 12492: case 12494: case 12496: case 12498: case 12500: case 12502: case 12504: case 12506: case 12508: case 12510: case 12512: case 12514: case 12516: case 12518: case 12520: case 12522: case 12524: case 12526: case 12528: case 12530: case 12532: case 12534: case 12536: case 12538: case 12540: case 12542: case 12544: case 12546: case 12548: case 12550: case 12552: case 12554: case 12556: case 12558: case 12560: case 12562: case 12564: case 12566: case 12568: case 12570: case 12572: case 12574: case 12576: case 12578: case 12580: case 12582: case 12584: case 12586: case 12588: case 12590: case 12592: case 12594: case 12596: case 12598: case 12600: case 12602: case 12604: case 12606: case 12608: case 12610: case 12612: case 12614: case 12616: case 12618: case 12620: case 12622: case 12624: case 12626: case 12628: case 12630: case 12632: case 12634: case 12636: case 12638: case 12640: case 12642: case 12644: case 12646: case 12648: case 12650: case 12652: case 12654: case 12656: case 12658: case 12660: case 12662: case 12664: case 12666: case 12668: case 12670: case 12672: case 12674: case 12676: case 12678: case 12680: case 12682: case 12684: case 12686: case 12688: case 12690: case 12692: case 12694: case 12696: case 12698: case 12700: case 12702: case 12704: case 12706: case 12708: case 12710: case 12712: case 12714: case 12716: case 12718: case 12720: case 12722: case 12724: case 12726: case 12728: case 12730: case 12732: case 12734: case 12736: case 12738: case 12740: case 12742: case 12744: case 12746: case 12748: case 12750: case 12752: case 12754: case 12756: case 12758: case 12760: case 12762: case 12764: case 12766: case 12768: case 12770: case 12772: case 12774: case 12776: case 12778: case 12780: case 12782: case 12784: case 12786: case 12788: case 12790: case 12792: case 12794: case 12796: case 12798: case 12800: case 12802: case 12804: case 12806: case 12808: case 12810: case 12812: case 12814: case 12816: case 12818: case 12820: case 12822: case 12824: case 12826: case 12828: case 12830: case 12832: case 12834: case 12836: case 12838: case 12840: case 12842: case 12844: case 12846: case 12848: case 12850: case 12852: case 12854: case 12856: case 12858: case 12860: case 12862: case 12864: case 12866: case 12868: case 12870: case 12872: case 12874: case 12876: case 12878: case 12880: case 12882: case 12884: case 12886: case 12888: case 12890: case 12892: case 12894: case 12896: case 12898: case 12900: case 12902: case 12904: case 12906: case 12908: case 12910: case 12912: case 12914: case 12916: case 12918: case 12920: case 12922: case 12924: case 12926: case 12928: case 12930: case 12932: case 12934: case 12936: case 12938: case 12940: case 12942: case 12944: case 12946: case 12948: case 12950: case 12952: case 12954: case 12956: case 12958: case 12960: case 12962: case 12964: case 12966: case 12968: case 12970: case 12972: case 12974: case 12976: case 12978: case 12980: case 12982: case 12984: case 12986: case 12988: case 12990: case 12992: case 12994: case 12996: case 12998: case 13e3: case 13002: case 13004: case 13006: case 13008: case 13010: case 13012: case 13014: case 13016: case 13018: case 13020: case 13022: case 13024: case 13026: case 13028: case 13030: case 13032: case 13034: case 13036: case 13038: case 13040: case 13042: case 13044: case 13046: case 13048: case 13050: case 13052: case 13054: case 13056: case 13058: case 13060: case 13062: case 13064: case 13066: case 13068: case 13070: case 13072: case 13074: case 13076: case 13078: case 13080: case 13082: case 13084: case 13086: case 13088: case 13090: case 13092: case 13094: case 13096: case 13098: case 13100: case 13102: case 13104: case 13106: case 13108: case 13110: case 13112: case 13114: case 13116: case 13118: case 13120: case 13122: case 13124: case 13126: case 13128: case 13130: case 13132: case 13134: case 13136: case 13138: case 13140: case 13142: case 13144: case 13146: case 13148: case 13150: case 13152: case 13154: case 13156: case 13158: case 13160: case 13162: case 13164: case 13166: case 13168: case 13170: case 13172: case 13174: case 13176: case 13178: case 13180: case 13182: case 13184: case 13186: case 13188: case 13190: case 13192: case 13194: case 13196: case 13198: case 13200: case 13202: case 13204: case 13206: case 13208: case 13210: case 13212: case 13214: case 13216: case 13218: case 13220: case 13222: case 13224: case 13226: case 13228: case 13230: case 13232: case 13234: case 13236: case 13238: case 13240: case 13242: case 13244: case 13246: case 13248: case 13250: case 13252: case 13254: case 13256: case 13258: case 13260: case 13262: case 13264: case 13266: case 13268: case 13270: case 13272: case 13274: case 13276: case 13278: case 13280: case 13282: case 13284: case 13286: case 13288: case 13290: case 13292: case 13294: case 13296: case 13298: case 13300: case 13302: case 13304: case 13306: case 13308: case 13310: case 13312: case 13314: case 13316: case 13318: case 13320: case 13322: case 13324: case 13326: case 13328: case 13330: case 13332: case 13334: case 13336: case 13338: case 13340: case 13342: case 13344: case 13346: case 13348: case 13350: case 13352: case 13354: case 13356: case 13358: case 13360: case 13362: case 13364: case 13366: case 13368: case 13370: case 13372: case 13374: case 13376: case 13378: case 13380: case 13382: case 13384: case 13386: case 13388: case 13390: case 13392: case 13394: case 13396: case 13398: case 13400: case 13402: case 13404: case 13406: case 13408: case 13410: case 13412: case 13414: case 13416: case 13418: case 13420: case 13422: case 13424: case 13426: case 13428: case 13430: case 13432: case 13434: case 13436: case 13438: case 13440: case 13442: case 13444: case 13446: case 13448: case 13450: case 13452: case 13454: case 13456: case 13458: case 13460: case 13462: case 13464: case 13466: case 13468: case 13470: case 13472: case 13474: case 13476: case 13478: case 13480: case 13482: case 13484: case 13486: case 13488: case 13490: case 13492: case 13494: case 13496: case 13498: case 13500: case 13502: case 13504: case 13506: case 13508: case 13510: case 13512: case 13514: case 13516: case 13518: case 13520: case 13522: case 13524: case 13526: case 13528: case 13530: case 13532: case 13534: case 13536: case 13538: case 13540: case 13542: case 13544: case 13546: case 13548: case 13550: case 13552: case 13554: case 13556: case 13558: case 13560: case 13562: case 13564: case 13566: case 13568: case 13570: case 13572: case 13574: case 13576: case 13578: case 13580: case 13582: case 13584: case 13586: case 13588: case 13590: case 13592: case 13594: case 13596: case 13598: case 13600: case 13602: case 13604: case 13606: case 13608: case 13610: case 13612: case 13614: case 13616: case 13618: case 13620: case 13622: case 13624: case 13626: case 13628: case 13630: case 13632: case 13634: case 13636: case 13638: case 13640: case 13642: case 13644: case 13646: case 13648: case 13650: case 13652: case 13654: case 13656: case 13658: case 13660: case 13662: case 13664: case 13666: case 13668: case 13670: case 13672: case 13674: case 13676: case 13678: case 13680: case 13682: case 13684: case 13686: case 13688: case 13690: case 13692: case 13694: case 13696: case 13698: case 13700: case 13702: case 13704: case 13706: case 13708: case 13710: case 13712: case 13714: case 13716: case 13718: case 13720: case 13722: case 13724: case 13726: case 13728: case 13730: case 13732: case 13734: case 13736: case 13738: case 13740: case 13742: case 13744: case 13746: case 13748: case 13750: case 13752: case 13754: case 13756: case 13758: case 13760: case 13762: case 13764: case 13766: case 13768: case 13770: case 13772: case 13774: case 13776: case 13778: case 13780: case 13782: case 13784: case 13786: case 13788: case 13790: case 13792: case 13794: case 13796: case 13798: case 13800: case 13802: case 13804: case 13806: case 13808: case 13810: case 13812: case 13814: case 13816: case 13818: case 13820: case 13822: case 13824: case 13826: case 13828: case 13830: case 13832: case 13834: case 13836: case 13838: case 13840: case 13842: case 13844: case 13846: case 13848: case 13850: case 13852: case 13854: case 13856: case 13858: case 13860: case 13862: case 13864: case 13866: case 13868: case 13870: case 13872: case 13874: case 13876: case 13878: case 13880: case 13882: case 13884: case 13886: case 13888: case 13890: case 13892: case 13894: case 13896: case 13898: case 13900: case 13902: case 13904: case 13906: case 13908: case 13910: case 13912: case 13914: case 13916: case 13918: case 13920: case 13922: case 13924: case 13926: case 13928: case 13930: case 13932: case 13934: case 13936: case 13938: case 13940: case 13942: case 13944: case 13946: case 13948: case 13950: case 13952: case 13954: case 13956: case 13958: case 13960: case 13962: case 13964: case 13966: case 13968: case 13970: case 13972: case 13974: case 13976: case 13978: case 13980: case 13982: case 13984: case 13986: case 13988: case 13990: case 13992: case 13994: case 13996: case 13998: case 14e3: case 14002: case 14004: case 14006: case 14008: case 14010: case 14012: case 14014: case 14016: case 14018: case 14020: case 14022: case 14024: case 14026: case 14028: case 14030: case 14032: case 14034: case 14036: case 14038: case 14040: case 14042: case 14044: case 14046: case 14048: case 14050: case 14052: case 14054: case 14056: case 14058: case 14060: case 14062: case 14064: case 14066: case 14068: case 14070: case 14072: case 14074: case 14076: case 14078: case 14080: case 14082: case 14084: case 14086: case 14088: case 14090: case 14092: case 14094: case 14096: case 14098: case 14100: case 14102: case 14104: case 14106: case 14108: case 14110: case 14112: case 14114: case 14116: case 14118: case 14120: case 14122: case 14124: case 14126: case 14128: case 14130: case 14132: case 14134: case 14136: case 14138: case 14140: case 14142: case 14144: case 14146: case 14148: case 14150: case 14152: case 14154: case 14156: case 14158: case 14160: case 14162: case 14164: case 14166: case 14168: case 14170: case 14172: case 14174: case 14176: case 14178: case 14180: case 14182: case 14184: case 14186: case 14188: case 14190: case 14192: case 14194: case 14196: case 14198: case 14200: case 14202: case 14204: case 14206: case 14208: case 14210: case 14212: case 14214: case 14216: case 14218: case 14220: case 14222: case 14224: case 14226: case 14228: case 14230: case 14232: case 14234: case 14236: case 14238: case 14240: case 14242: case 14244: case 14246: case 14248: case 14250: case 14252: case 14254: case 14256: case 14258: case 14260: case 14262: case 14264: case 14266: case 14268: case 14270: case 14272: case 14274: case 14276: case 14278: case 14280: case 14282: case 14284: case 14286: case 14288: case 14290: case 14292: case 14294: case 14296: case 14298: case 14300: case 14302: case 14304: case 14306: case 14308: case 14310: case 14312: case 14314: case 14316: case 14318: case 14320: case 14322: case 14324: case 14326: case 14328: case 14330: case 14332: case 14334: case 14336: case 14338: case 14340: case 14342: case 14344: case 14346: case 14348: case 14350: case 14352: case 14354: case 14356: case 14358: case 14360: case 14362: case 14364: case 14366: case 14368: case 14370: case 14372: case 14374: case 14376: case 14378: case 14380: case 14382: case 14384: case 14386: case 14388: case 14390: case 14392: case 14394: case 14396: case 14398: case 14400: case 14402: case 14404: case 14406: case 14408: case 14410: case 14412: case 14414: case 14416: case 14418: case 14420: case 14422: case 14424: case 14426: case 14428: case 14430: case 14432: case 14434: case 14436: case 14438: case 14440: case 14442: case 14444: case 14446: case 14448: case 14450: case 14452: case 14454: case 14456: case 14458: case 14460: case 14462: case 14464: case 14466: case 14468: case 14470: case 14472: case 14474: case 14476: case 14478: case 14480: case 14482: case 14484: case 14486: case 14488: case 14490: case 14492: case 14494: case 14496: case 14498: case 14500: case 14502: case 14504: case 14506: case 14508: case 14510: case 14512: case 14514: case 14516: case 14518: case 14520: case 14522: case 14524: case 14526: case 14528: case 14530: case 14532: case 14534: case 14536: case 14538: case 14540: case 14542: case 14544: case 14546: case 14548: case 14550: case 14552: case 14554: case 14556: case 14558: case 14560: case 14562: case 14564: case 14566: case 14568: case 14570: case 14572: case 14574: case 14576: case 14578: case 14580: case 14582: case 14584: case 14586: case 14588: case 14590: case 14592: case 14594: case 14596: case 14598: case 14600: case 14602: case 14604: case 14606: case 14608: case 14610: case 14612: case 14614: case 14616: case 14618: case 14620: case 14622: case 14624: case 14626: case 14628: case 14630: case 14632: case 14634: case 14636: case 14638: case 14640: case 14642: case 14644: case 14646: case 14648: case 14650: case 14652: case 14654: case 14656: case 14658: case 14660: case 14662: case 14664: case 14666: case 14668: case 14670: case 14672: case 14674: case 14676: case 14678: case 14680: case 14682: case 14684: case 14686: case 14688: case 14690: case 14692: case 14694: case 14696: case 14698: case 14700: case 14702: case 14704: case 14706: case 14708: case 14710: case 14712: case 14714: case 14716: case 14718: case 14720: case 14722: case 14724: case 14726: case 14728: case 14730: case 14732: case 14734: case 14736: case 14738: case 14740: case 14742: case 14744: case 14746: case 14748: case 14750: case 14752: case 14754: case 14756: case 14758: case 14760: case 14762: case 14764: case 14766: case 14768: case 14770: case 14772: case 14774: case 14776: case 14778: case 14780: case 14782: case 14784: case 14786: case 14788: case 14790: case 14792: case 14794: case 14796: case 14798: case 14800: case 14802: case 14804: case 14806: case 14808: case 14810: case 14812: case 14814: case 14816: case 14818: case 14820: case 14822: case 14824: case 14826: case 14828: case 14830: case 14832: case 14834: case 14836: case 14838: case 14840: case 14842: case 14844: case 14846: case 14848: case 14850: case 14852: case 14854: case 14856: case 14858: case 14860: case 14862: case 14864: case 14866: case 14868: case 14870: case 14872: case 14874: case 14876: case 14878: case 14880: case 14882: case 14884: case 14886: case 14888: case 14890: case 14892: case 14894: case 14896: case 14898: case 14900: case 14902: case 14904: case 14906: case 14908: case 14910: case 14912: case 14914: case 14916: case 14918: case 14920: case 14922: case 14924: case 14926: case 14928: case 14930: case 14932: case 14934: case 14936: case 14938: case 14940: case 14942: case 14944: case 14946: case 14948: case 14950: case 14952: case 14954: case 14956: case 14958: case 14960: case 14962: case 14964: case 14966: case 14968: case 14970: case 14972: case 14974: case 14976: case 14978: case 14980: case 14982: case 14984: case 14986: case 14988: case 14990: case 14992: case 14994: case 14996: case 14998: case 15e3: case 15002: case 15004: case 15006: case 15008: case 15010: case 15012: case 15014: case 15016: case 15018: case 15020: case 15022: case 15024: case 15026: case 15028: case 15030: case 15032: case 15034: case 15036: case 15038: case 15040: case 15042: case 15044: case 15046: case 15048: case 15050: case 15052: case 15054: case 15056: case 15058: case 15060: case 15062: case 15064: case 15066: case 15068: case 15070: case 15072: case 15074: case 15076: case 15078: case 15080: case 15082: case 15084: case 15086: case 15088: case 15090: case 15092: case 15094: case 15096: case 15098: case 15100: case 15102: case 15104: case 15106: case 15108: case 15110: case 15112: case 15114: case 15116: case 15118: case 15120: case 15122: case 15124: case 15126: case 15128: case 15130: case 15132: case 15134: case 15136: case 15138: case 15140: case 15142: case 15144: case 15146: case 15148: case 15150: case 15152: case 15154: case 15156: case 15158: case 15160: case 15162: case 15164: case 15166: case 15168: case 15170: case 15172: case 15174: case 15176: case 15178: case 15180: case 15182: case 15184: case 15186: case 15188: case 15190: case 15192: case 15194: case 15196: case 15198: case 15200: case 15202: case 15204: case 15206: case 15208: case 15210: case 15212: case 15214: case 15216: case 15218: case 15220: case 15222: case 15224: case 15226: case 15228: case 15230: case 15232: case 15234: case 15236: case 15238: case 15240: case 15242: case 15244: case 15246: case 15248: case 15250: case 15252: case 15254: case 15256: case 15258: case 15260: case 15262: case 15264: case 15266: case 15268: case 15270: case 15272: case 15274: case 15276: case 15278: case 15280: case 15282: case 15284: case 15286: case 15288: case 15290: case 15292: case 15294: case 15296: case 15298: case 15300: case 15302: case 15304: case 15306: case 15308: case 15310: case 15312: case 15314: case 15316: case 15318: case 15320: case 15322: case 15324: case 15326: case 15328: case 15330: case 15332: case 15334: case 15336: case 15338: case 15340: case 15342: case 15344: case 15346: case 15348: case 15350: case 15352: case 15354: case 15356: case 15358: case 15360: case 15362: case 15364: case 15366: case 15368: case 15370: case 15372: case 15374: case 15376: case 15378: case 15380: case 15382: case 15384: case 15386: case 15388: case 15390: case 15392: case 15394: case 15396: case 15398: case 15400: case 15402: case 15404: case 15406: case 15408: case 15410: case 15412: case 15414: case 15416: case 15418: case 15420: case 15422: case 15424: case 15426: case 15428: case 15430: case 15432: case 15434: case 15436: case 15438: case 15440: case 15442: case 15444: case 15446: case 15448: case 15450: case 15452: case 15454: case 15456: case 15458: case 15460: case 15462: case 15464: case 15466: case 15468: case 15470: case 15472: case 15474: case 15476: case 15478: case 15480: case 15482: case 15484: case 15486: case 15488: case 15490: case 15492: case 15494: case 15496: case 15498: case 15500: case 15502: case 15504: case 15506: case 15508: case 15510: case 15512: case 15514: case 15516: case 15518: case 15520: case 15522: case 15524: case 15526: case 15528: case 15530: case 15532: case 15534: case 15536: case 15538: case 15540: case 15542: case 15544: case 15546: case 15548: case 15550: case 15552: case 15554: case 15556: case 15558: case 15560: case 15562: case 15564: case 15566: case 15568: case 15570: case 15572: case 15574: case 15576: case 15578: case 15580: case 15582: case 15584: case 15586: case 15588: case 15590: case 15592: case 15594: case 15596: case 15598: case 15600: case 15602: case 15604: case 15606: case 15608: case 15610: case 15612: case 15614: case 15616: case 15618: case 15620: case 15622: case 15624: case 15626: case 15628: case 15630: case 15632: case 15634: case 15636: case 15638: case 15640: case 15642: case 15644: case 15646: case 15648: case 15650: case 15652: case 15654: case 15656: case 15658: case 15660: case 15662: case 15664: case 15666: case 15668: case 15670: case 15672: case 15674: case 15676: case 15678: case 15680: case 15682: case 15684: case 15686: case 15688: case 15690: case 15692: case 15694: case 15696: case 15698: case 15700: case 15702: case 15704: case 15706: case 15708: case 15710: case 15712: case 15714: case 15716: case 15718: case 15720: case 15722: case 15724: case 15726: case 15728: case 15730: case 15732: case 15734: case 15736: case 15738: case 15740: case 15742: case 15744: case 15746: case 15748: case 15750: case 15752: case 15754: case 15756: case 15758: case 15760: case 15762: case 15764: case 15766: case 15768: case 15770: case 15772: case 15774: case 15776: case 15778: case 15780: case 15782: case 15784: case 15786: case 15788: case 15790: case 15792: case 15794: case 15796: case 15798: case 15800: case 15802: case 15804: case 15806: case 15808: case 15810: case 15812: case 15814: case 15816: case 15818: case 15820: case 15822: case 15824: case 15826: case 15828: case 15830: case 15832: case 15834: case 15836: case 15838: case 15840: case 15842: case 15844: case 15846: case 15848: case 15850: case 15852: case 15854: case 15856: case 15858: case 15860: case 15862: case 15864: case 15866: case 15868: case 15870: case 15872: case 15874: case 15876: case 15878: case 15880: case 15882: case 15884: case 15886: case 15888: case 15890: case 15892: case 15894: case 15896: case 15898: case 15900: case 15902: case 15904: case 15906: case 15908: case 15910: case 15912: case 15914: case 15916: case 15918: case 15920: case 15922: case 15924: case 15926: case 15928: case 15930: case 15932: case 15934: case 15936: case 15938: case 15940: case 15942: case 15944: case 15946: case 15948: case 15950: case 15952: case 15954: case 15956: case 15958: case 15960: case 15962: case 15964: case 15966: case 15968: case 15970: case 15972: case 15974: case 15976: case 15978: case 15980: case 15982: case 15984: case 15986: case 15988: case 15990: case 15992: case 15994: case 15996: case 15998: case 16e3: case 16002: case 16004: case 16006: case 16008: case 16010: case 16012: case 16014: case 16016: case 16018: case 16020: case 16022: case 16024: case 16026: case 16028: case 16030: case 16032: case 16034: case 16036: case 16038: case 16040: case 16042: case 16044: case 16046: case 16048: case 16050: case 16052: case 16054: case 16056: case 16058: case 16060: case 16062: case 16064: case 16066: case 16068: case 16070: case 16072: case 16074: case 16076: case 16078: case 16080: case 16082: case 16084: case 16086: case 16088: case 16090: case 16092: case 16094: case 16096: case 16098: case 16100: case 16102: case 16104: case 16106: case 16108: case 16110: case 16112: case 16114: case 16116: case 16118: case 16120: case 16122: case 16124: case 16126: case 16128: case 16130: case 16132: case 16134: case 16136: case 16138: case 16140: case 16142: case 16144: case 16146: case 16148: case 16150: case 16152: case 16154: case 16156: case 16158: case 16160: case 16162: case 16164: case 16166: case 16168: case 16170: case 16172: case 16174: case 16176: case 16178: case 16180: case 16182: case 16184: case 16186: case 16188: case 16190: case 16192: case 16194: case 16196: case 16198: case 16200: case 16202: case 16204: case 16206: case 16208: case 16210: case 16212: case 16214: case 16216: case 16218: case 16220: case 16222: case 16224: case 16226: case 16228: case 16230: case 16232: case 16234: case 16236: case 16238: case 16240: case 16242: case 16244: case 16246: case 16248: case 16250: case 16252: case 16254: case 16256: case 16258: case 16260: case 16262: case 16264: case 16266: case 16268: case 16270: case 16272: case 16274: case 16276: case 16278: case 16280: case 16282: case 16284: case 16286: case 16288: case 16290: case 16292: case 16294: case 16296: case 16298: case 16300: case 16302: case 16304: case 16306: case 16308: case 16310: case 16312: case 16314: case 16316: case 16318: case 16320: case 16322: case 16324: case 16326: case 16328: case 16330: case 16332: case 16334: case 16336: case 16338: case 16340: case 16342: case 16344: case 16346: case 16348: case 16350: case 16352: case 16354: case 16356: case 16358: case 16360: case 16362: case 16364: case 16366: case 16368: case 16370: case 16372: case 16374: case 16376: case 16378: case 16380: case 16382: case 16384: case 16386: case 16388: case 16390: case 16392: case 16394: case 16396: case 16398: case 16400: case 16402: case 16404: case 16406: case 16408: case 16410: case 16412: case 16414: case 16416: case 16418: case 16420: case 16422: case 16424: case 16426: case 16428: case 16430: case 16432: case 16434: case 16436: case 16438: case 16440: case 16442: case 16444: case 16446: case 16448: case 16450: case 16452: case 16454: case 16456: case 16458: case 16460: case 16462: case 16464: case 16466: case 16468: case 16470: case 16472: case 16474: case 16476: case 16478: case 16480: case 16482: case 16484: case 16486: case 16488: case 16490: case 16492: case 16494: case 16496: case 16498: case 16500: case 16502: case 16504: case 16506: case 16508: case 16510: case 16512: case 16514: case 16516: case 16518: case 16520: case 16522: case 16524: case 16526: case 16528: case 16530: case 16532: case 16534: case 16536: case 16538: case 16540: case 16542: case 16544: case 16546: case 16548: case 16550: case 16552: case 16554: case 16556: case 16558: case 16560: case 16562: case 16564: case 16566: case 16568: case 16570: case 16572: case 16574: case 16576: case 16578: case 16580: case 16582: case 16584: case 16586: case 16588: case 16590: case 16592: case 16594: case 16596: case 16598: case 16600: case 16602: case 16604: case 16606: case 16608: case 16610: case 16612: case 16614: case 16616: case 16618: case 16620: case 16622: case 16624: case 16626: case 16628: case 16630: case 16632: case 16634: case 16636: case 16638: case 16640: case 16642: case 16644: case 16646: case 16648: case 16650: case 16652: case 16654: case 16656: case 16658: case 16660: case 16662: case 16664: case 16666: case 16668: case 16670: case 16672: case 16674: case 16676: case 16678: case 16680: case 16682: case 16684: case 16686: case 16688: case 16690: case 16692: case 16694: case 16696: case 16698: case 16700: case 16702: case 16704: case 16706: case 16708: case 16710: case 16712: case 16714: case 16716: case 16718: case 16720: case 16722: case 16724: case 16726: case 16728: case 16730: case 16732: case 16734: case 16736: case 16738: case 16740: case 16742: case 16744: case 16746: case 16748: case 16750: case 16752: case 16754: case 16756: case 16758: case 16760: case 16762: case 16764: case 16766: case 16768: case 16770: case 16772: case 16774: case 16776: case 16778: case 16780: case 16782: case 16784: case 16786: case 16788: case 16790: case 16792: case 16794: case 16796: case 16798: case 16800: case 16802: case 16804: case 16806: case 16808: case 16810: case 16812: case 16814: case 16816: case 16818: case 16820: case 16822: case 16824: case 16826: case 16828: case 16830: case 16832: case 16834: case 16836: case 16838: case 16840: case 16842: case 16844: case 16846: case 16848: case 16850: case 16852: case 16854: case 16856: case 16858: case 16860: case 16862: case 16864: case 16866: case 16868: case 16870: case 16872: case 16874: case 16876: case 16878: case 16880: case 16882: case 16884: case 16886: case 16888: case 16890: case 16892: case 16894: case 16896: case 16898: case 16900: case 16902: case 16904: case 16906: case 16908: case 16910: case 16912: case 16914: case 16916: case 16918: case 16920: case 16922: case 16924: case 16926: case 16928: case 16930: case 16932: case 16934: case 16936: case 16938: case 16940: case 16942: case 16944: case 16946: case 16948: case 16950: case 16952: case 16954: case 16956: case 16958: case 16960: case 16962: case 16964: case 16966: case 16968: case 16970: case 16972: case 16974: case 16976: case 16978: case 16980: case 16982: case 16984: case 16986: case 16988: case 16990: case 16992: case 16994: case 16996: case 16998: case 17e3: case 17002: case 17004: case 17006: case 17008: case 17010: case 17012: case 17014: case 17016: case 17018: case 17020: case 17022: case 17024: case 17026: case 17028: case 17030: case 17032: case 17034: case 17036: case 17038: case 17040: case 17042: case 17044: case 17046: case 17048: case 17050: case 17052: case 17054: case 17056: case 17058: case 17060: case 17062: case 17064: case 17066: case 17068: case 17070: case 17072: case 17074: case 17076: case 17078: case 17080: case 17082: case 17084: case 17086: case 17088: case 17090: case 17092: case 17094: case 17096: case 17098: case 17100: case 17102: case 17104: case 17106: case 17108: case 17110: case 17112: case 17114: case 17116: case 17118: case 17120: case 17122: case 17124: case 17126: case 17128: case 17130: case 17132: case 17134: case 17136: case 17138: case 17140: case 17142: case 17144: case 17146: case 17148: case 17150: case 17152: case 17154: case 17156: case 17158: case 17160: case 17162: case 17164: case 17166: case 17168: case 17170: case 17172: case 17174: case 17176: case 17178: case 17180: case 17182: case 17184: case 17186: case 17188: case 17190: case 17192: case 17194: case 17196: case 17198: case 17200: case 17202: case 17204: case 17206: case 17208: case 17210: case 17212: case 17214: case 17216: case 17218: case 17220: case 17222: case 17224: case 17226: case 17228: case 17230: case 17232: case 17234: case 17236: case 17238: case 17240: case 17242: case 17244: case 17246: case 17248: case 17250: case 17252: case 17254: case 17256: case 17258: case 17260: case 17262: case 17264: case 17266: case 17268: case 17270: case 17272: case 17274: case 17276: case 17278: case 17280: case 17282: case 17284: case 17286: case 17288: case 17290: case 17292: case 17294: case 17296: case 17298: case 17300: case 17302: case 17304: case 17306: case 17308: case 17310: case 17312: case 17314: case 17316: case 17318: case 17320: case 17322: case 17324: case 17326: case 17328: case 17330: case 17332: case 17334: case 17336: case 17338: case 17340: case 17342: case 17344: case 17346: case 17348: case 17350: case 17352: case 17354: case 17356: case 17358: case 17360: case 17362: case 17364: case 17366: case 17368: case 17370: case 17372: case 17374: case 17376: case 17378: case 17380: case 17382: case 17384: case 17386: case 17388: case 17390: case 17392: case 17394: case 17396: case 17398: case 17400: case 17402: case 17404: case 17406: case 17408: case 17410: case 17412: case 17414: case 17416: case 17418: case 17420: case 17422: case 17424: case 17426: case 17428: case 17430: case 17432: case 17434: case 17436: case 17438: case 17440: case 17442: case 17444: case 17446: case 17448: case 17450: case 17452: case 17454: case 17456: case 17458: case 17460: case 17462: case 17464: case 17466: case 17468: case 17470: case 17472: case 17474: case 17476: case 17478: case 17480: case 17482: case 17484: case 17486: case 17488: case 17490: case 17492: case 17494: case 17496: case 17498: case 17500: case 17502: case 17504: case 17506: case 17508: case 17510: case 17512: case 17514: case 17516: case 17518: case 17520: case 17522: case 17524: case 17526: case 17528: case 17530: case 17532: case 17534: case 17536: case 17538: case 17540: case 17542: case 17544: case 17546: case 17548: case 17550: case 17552: case 17554: case 17556: case 17558: case 17560: case 17562: case 17564: case 17566: case 17568: case 17570: case 17572: case 17574: case 17576: case 17578: case 17580: case 17582: case 17584: case 17586: case 17588: case 17590: case 17592: case 17594: case 17596: case 17598: case 17600: case 17602: case 17604: case 17606: case 17608: case 17610: case 17612: case 17614: case 17616: case 17618: case 17620: case 17622: case 17624: case 17626: case 17628: case 17630: case 17632: case 17634: case 17636: case 17638: case 17640: case 17642: case 17644: case 17646: case 17648: case 17650: case 17652: case 17654: case 17656: case 17658: case 17660: case 17662: case 17664: case 17666: case 17668: case 17670: case 17672: case 17674: case 17676: case 17678: case 17680: case 17682: case 17684: case 17686: case 17688: case 17690: case 17692: case 17694: case 17696: case 17698: case 17700: case 17702: case 17704: case 17706: case 17708: case 17710: case 17712: case 17714: case 17716: case 17718: case 17720: case 17722: case 17724: case 17726: case 17728: case 17730: case 17732: case 17734: case 17736: case 17738: case 17740: case 17742: case 17744: case 17746: case 17748: case 17750: case 17752: case 17754: case 17756: case 17758: case 17760: case 17762: case 17764: case 17766: case 17768: case 17770: case 17772: case 17774: case 17776: case 17778: case 17780: case 17782: case 17784: case 17786: case 17788: case 17790: case 17792: case 17794: case 17796: case 17798: case 17800: case 17802: case 17804: case 17806: case 17808: case 17810: case 17812: case 17814: case 17816: case 17818: case 17820: case 17822: case 17824: case 17826: case 17828: case 17830: case 17832: case 17834: case 17836: case 17838: case 17840: case 17842: case 17844: case 17846: case 17848: case 17850: case 17852: case 17854: case 17856: case 17858: case 17860: case 17862: case 17864: case 17866: case 17868: case 17870: case 17872: case 17874: case 17876: case 17878: case 17880: case 17882: case 17884: case 17886: case 17888: case 17890: case 17892: case 17894: case 17896: case 17898: case 17900: case 17902: case 17904: case 17906: case 17908: case 17910: case 17912: case 17914: case 17916: case 17918: case 17920: case 17922: case 17924: case 17926: case 17928: case 17930: case 17932: case 17934: case 17936: case 17938: case 17940: case 17942: case 17944: case 17946: case 17948: case 17950: case 17952: case 17954: case 17956: case 17958: case 17960: case 17962: case 17964: case 17966: case 17968: case 17970: case 17972: case 17974: case 17976: case 17978: case 17980: case 17982: case 17984: case 17986: case 17988: case 17990: case 17992: case 17994: case 17996: case 17998: case 18e3: case 18002: case 18004: case 18006: case 18008: case 18010: case 18012: case 18014: case 18016: case 18018: case 18020: case 18022: case 18024: case 18026: case 18028: case 18030: case 18032: case 18034: case 18036: case 18038: case 18040: case 18042: case 18044: case 18046: case 18048: case 18050: case 18052: case 18054: case 18056: case 18058: case 18060: case 18062: case 18064: case 18066: case 18068: case 18070: case 18072: case 18074: case 18076: case 18078: case 18080: case 18082: case 18084: case 18086: case 18088: case 18090: case 18092: case 18094: case 18096: case 18098: case 18100: case 18102: case 18104: case 18106: case 18108: case 18110: case 18112: case 18114: case 18116: case 18118: case 18120: case 18122: case 18124: case 18126: case 18128: case 18130: case 18132: case 18134: case 18136: case 18138: case 18140: case 18142: case 18144: case 18146: case 18148: case 18150: case 18152: case 18154: case 18156: case 18158: case 18160: case 18162: case 18164: case 18166: case 18168: case 18170: case 18172: case 18174: case 18176: case 18178: case 18180: case 18182: case 18184: case 18186: case 18188: case 18190: case 18192: case 18194: case 18196: case 18198: case 18200: case 18202: case 18204: case 18206: case 18208: case 18210: case 18212: case 18214: case 18216: case 18218: case 18220: case 18222: case 18224: case 18226: case 18228: case 18230: case 18232: case 18234: case 18236: case 18238: case 18240: case 18242: case 18244: case 18246: case 18248: case 18250: case 18252: case 18254: case 18256: case 18258: case 18260: case 18262: case 18264: case 18266: case 18268: case 18270: case 18272: case 18274: case 18276: case 18278: case 18280: case 18282: case 18284: case 18286: case 18288: case 18290: case 18292: case 18294: case 18296: case 18298: case 18300: case 18302: case 18304: case 18306: case 18308: case 18310: case 18312: case 18314: case 18316: case 18318: case 18320: case 18322: case 18324: case 18326: case 18328: case 18330: case 18332: case 18334: case 18336: case 18338: case 18340: case 18342: case 18344: case 18346: case 18348: case 18350: case 18352: case 18354: case 18356: case 18358: case 18360: case 18362: case 18364: case 18366: case 18368: case 18370: case 18372: case 18374: case 18376: case 18378: case 18380: case 18382: case 18384: case 18386: case 18388: case 18390: case 18392: case 18394: case 18396: case 18398: case 18400: case 18402: case 18404: case 18406: case 18408: case 18410: case 18412: case 18414: case 18416: case 18418: case 18420: case 18422: case 18424: case 18426: case 18428: case 18430: case 18432: case 18434: case 18436: case 18438: case 18440: case 18442: case 18444: case 18446: case 18448: case 18450: case 18452: case 18454: case 18456: case 18458: case 18460: case 18462: case 18464: case 18466: case 18468: case 18470: case 18472: case 18474: case 18476: case 18478: case 18480: case 18482: case 18484: case 18486: case 18488: case 18490: case 18492: case 18494: case 18496: case 18498: case 18500: case 18502: case 18504: case 18506: case 18508: case 18510: case 18512: case 18514: case 18516: case 18518: case 18520: case 18522: case 18524: case 18526: case 18528: case 18530: case 18532: case 18534: case 18536: case 18538: case 18540: case 18542: case 18544: case 18546: case 18548: case 18550: case 18552: case 18554: case 18556: case 18558: case 18560: case 18562: case 18564: case 18566: case 18568: case 18570: case 18572: case 18574: case 18576: case 18578: case 18580: case 18582: case 18584: case 18586: case 18588: case 18590: case 18592: case 18594: case 18596: case 18598: case 18600: case 18602: case 18604: case 18606: case 18608: case 18610: case 18612: case 18614: case 18616: case 18618: case 18620: case 18622: case 18624: case 18626: case 18628: case 18630: case 18632: case 18634: case 18636: case 18638: case 18640: case 18642: case 18644: case 18646: case 18648: case 18650: case 18652: case 18654: case 18656: case 18658: case 18660: case 18662: case 18664: case 18666: case 18668: case 18670: case 18672: case 18674: case 18676: case 18678: case 18680: case 18682: case 18684: case 18686: case 18688: case 18690: case 18692: case 18694: case 18696: case 18698: case 18700: case 18702: case 18704: case 18706: case 18708: case 18710: case 18712: case 18714: case 18716: case 18718: case 18720: case 18722: case 18724: case 18726: case 18728: case 18730: case 18732: case 18734: case 18736: case 18738: case 18740: case 18742: case 18744: case 18746: case 18748: case 18750: case 18752: case 18754: case 18756: case 18758: case 18760: case 18762: case 18764: case 18766: case 18768: case 18770: case 18772: case 18774: case 18776: case 18778: case 18780: case 18782: case 18784: case 18786: case 18788: case 18790: case 18792: case 18794: case 18796: case 18798: case 18800: case 18802: case 18804: case 18806: case 18808: case 18810: case 18812: case 18814: case 18816: case 18818: case 18820: case 18822: case 18824: case 18826: case 18828: case 18830: case 18832: case 18834: case 18836: case 18838: case 18840: case 18842: case 18844: case 18846: case 18848: case 18850: case 18852: case 18854: case 18856: case 18858: case 18860: case 18862: case 18864: case 18866: case 18868: case 18870: case 18872: case 18874: case 18876: case 18878: case 18880: case 18882: case 18884: case 18886: case 18888: case 18890: case 18892: case 18894: case 18896: case 18898: case 18900: case 18902: case 18904: case 18906: case 18908: case 18910: case 18912: case 18914: case 18916: case 18918: case 18920: case 18922: case 18924: case 18926: case 18928: case 18930: case 18932: case 18934: case 18936: case 18938: case 18940: case 18942: case 18944: case 18946: case 18948: case 18950: case 18952: case 18954: case 18956: case 18958: case 18960: case 18962: case 18964: case 18966: case 18968: case 18970: case 18972: case 18974: case 18976: case 18978: case 18980: case 18982: case 18984: case 18986: case 18988: case 18990: case 18992: case 18994: case 18996: case 18998: case 19e3: case 19002: case 19004: case 19006: case 19008: case 19010: case 19012: case 19014: case 19016: case 19018: case 19020: case 19022: case 19024: case 19026: case 19028: case 19030: case 19032: case 19034: case 19036: case 19038: case 19040: case 19042: case 19044: case 19046: case 19048: case 19050: case 19052: case 19054: case 19056: case 19058: case 19060: case 19062: case 19064: case 19066: case 19068: case 19070: case 19072: case 19074: case 19076: case 19078: case 19080: case 19082: case 19084: case 19086: case 19088: case 19090: case 19092: case 19094: case 19096: case 19098: case 19100: case 19102: case 19104: case 19106: case 19108: case 19110: case 19112: case 19114: case 19116: case 19118: case 19120: case 19122: case 19124: case 19126: case 19128: case 19130: case 19132: case 19134: case 19136: case 19138: case 19140: case 19142: case 19144: case 19146: case 19148: case 19150: case 19152: case 19154: case 19156: case 19158: case 19160: case 19162: case 19164: case 19166: case 19168: case 19170: case 19172: case 19174: case 19176: case 19178: case 19180: case 19182: case 19184: case 19186: case 19188: case 19190: case 19192: case 19194: case 19196: case 19198: case 19200: case 19202: case 19204: case 19206: case 19208: case 19210: case 19212: case 19214: case 19216: case 19218: case 19220: case 19222: case 19224: case 19226: case 19228: case 19230: case 19232: case 19234: case 19236: case 19238: case 19240: case 19242: case 19244: case 19246: case 19248: case 19250: case 19252: case 19254: case 19256: case 19258: case 19260: case 19262: case 19264: case 19266: case 19268: case 19270: case 19272: case 19274: case 19276: case 19278: case 19280: case 19282: case 19284: case 19286: case 19288: case 19290: case 19292: case 19294: case 19296: case 19298: case 19300: case 19302: case 19304: case 19306: case 19308: case 19310: case 19312: case 19314: case 19316: case 19318: case 19320: case 19322: case 19324: case 19326: case 19328: case 19330: case 19332: case 19334: case 19336: case 19338: case 19340: case 19342: case 19344: case 19346: case 19348: case 19350: case 19352: case 19354: case 19356: case 19358: case 19360: case 19362: case 19364: case 19366: case 19368: case 19370: case 19372: case 19374: case 19376: case 19378: case 19380: case 19382: case 19384: case 19386: case 19388: case 19390: case 19392: case 19394: case 19396: case 19398: case 19400: case 19402: case 19404: case 19406: case 19408: case 19410: case 19412: case 19414: case 19416: case 19418: case 19420: case 19422: case 19424: case 19426: case 19428: case 19430: case 19432: case 19434: case 19436: case 19438: case 19440: case 19442: case 19444: case 19446: case 19448: case 19450: case 19452: case 19454: case 19456: case 19458: case 19460: case 19462: case 19464: case 19466: case 19468: case 19470: case 19472: case 19474: case 19476: case 19478: case 19480: case 19482: case 19484: case 19486: case 19488: case 19490: case 19492: case 19494: case 19496: case 19498: case 19500: case 19502: case 19504: case 19506: case 19508: case 19510: case 19512: case 19514: case 19516: case 19518: case 19520: case 19522: case 19524: case 19526: case 19528: case 19530: case 19532: case 19534: case 19536: case 19538: case 19540: case 19542: case 19544: case 19546: case 19548: case 19550: case 19552: case 19554: case 19556: case 19558: case 19560: case 19562: case 19564: case 19566: case 19568: case 19570: case 19572: case 19574: case 19576: case 19578: case 19580: case 19582: case 19584: case 19586: case 19588: case 19590: case 19592: case 19594: case 19596: case 19598: case 19600: case 19602: case 19604: case 19606: case 19608: case 19610: case 19612: case 19614: case 19616: case 19618: case 19620: case 19622: case 19624: case 19626: case 19628: case 19630: case 19632: case 19634: case 19636: case 19638: case 19640: case 19642: case 19644: case 19646: case 19648: case 19650: case 19652: case 19654: case 19656: case 19658: case 19660: case 19662: case 19664: case 19666: case 19668: case 19670: case 19672: case 19674: case 19676: case 19678: case 19680: case 19682: case 19684: case 19686: case 19688: case 19690: case 19692: case 19694: case 19696: case 19698: case 19700: case 19702: case 19704: case 19706: case 19708: case 19710: case 19712: case 19714: case 19716: case 19718: case 19720: case 19722: case 19724: case 19726: case 19728: case 19730: case 19732: case 19734: case 19736: case 19738: case 19740: case 19742: case 19744: case 19746: case 19748: case 19750: case 19752: case 19754: case 19756: case 19758: case 19760: case 19762: case 19764: case 19766: case 19768: case 19770: case 19772: case 19774: case 19776: case 19778: case 19780: case 19782: case 19784: case 19786: case 19788: case 19790: case 19792: case 19794: case 19796: case 19798: case 19800: case 19802: case 19804: case 19806: case 19808: case 19810: case 19812: case 19814: case 19816: case 19818: case 19820: case 19822: case 19824: case 19826: case 19828: case 19830: case 19832: case 19834: case 19836: case 19838: case 19840: case 19842: case 19844: case 19846: case 19848: case 19850: case 19852: case 19854: case 19856: case 19858: case 19860: case 19862: case 19864: case 19866: case 19868: case 19870: case 19872: case 19874: case 19876: case 19878: case 19880: case 19882: case 19884: case 19886: case 19888: case 19890: case 19892: case 19894: case 19896: case 19898: case 19900: case 19902: case 19904: case 19906: case 19908: case 19910: case 19912: case 19914: case 19916: case 19918: case 19920: case 19922: case 19924: case 19926: case 19928: case 19930: case 19932: case 19934: case 19936: case 19938: case 19940: case 19942: case 19944: case 19946: case 19948: case 19950: case 19952: case 19954: case 19956: case 19958: case 19960: case 19962: case 19964: case 19966: case 19968: case 19970: case 19972: case 19974: case 19976: case 19978: case 19980: case 19982: case 19984: case 19986: case 19988: case 19990: case 19992: case 19994: case 19996: case 19998: case 2e4: case 20002: case 20004: case 20006: case 20008: case 20010: case 20012: case 20014: case 20016: case 20018: case 20020: case 20022: case 20024: case 20026: case 20028: case 20030: case 20032: case 20034: case 20036: case 20038: case 20040: case 20042: case 20044: case 20046: case 20048: case 20050: case 20052: case 20054: case 20056: case 20058: case 20060: case 20062: case 20064: case 20066: case 20068: case 20070: case 20072: case 20074: case 20076: case 20078: case 20080: case 20082: case 20084: case 20086: case 20088: case 20090: case 20092: case 20094: case 20096: case 20098: case 20100: case 20102: case 20104: case 20106: case 20108: case 20110: case 20112: case 20114: case 20116: case 20118: case 20120: case 20122: case 20124: case 20126: case 20128: case 20130: case 20132: case 20134: case 20136: case 20138: case 20140: case 20142: case 20144: case 20146: case 20148: case 20150: case 20152: case 20154: case 20156: case 20158: case 20160: case 20162: case 20164: case 20166: case 20168: case 20170: case 20172: case 20174: case 20176: case 20178: case 20180: case 20182: case 20184: case 20186: case 20188: case 20190: case 20192: case 20194: case 20196: case 20198: case 20200: case 20202: case 20204: case 20206: case 20208: case 20210: case 20212: case 20214: case 20216: case 20218: case 20220: case 20222: case 20224: case 20226: case 20228: case 20230: case 20232: case 20234: case 20236: case 20238: case 20240: case 20242: case 20244: case 20246: case 20248: case 20250: case 20252: case 20254: case 20256: case 20258: case 20260: case 20262: case 20264: case 20266: case 20268: case 20270: case 20272: case 20274: case 20276: case 20278: case 20280: case 20282: case 20284: case 20286: case 20288: case 20290: case 20292: case 20294: case 20296: case 20298: case 20300: case 20302: case 20304: case 20306: case 20308: case 20310: case 20312: case 20314: case 20316: case 20318: case 20320: case 20322: case 20324: case 20326: case 20328: case 20330: case 20332: case 20334: case 20336: case 20338: case 20340: case 20342: case 20344: case 20346: case 20348: case 20350: case 20352: case 20354: case 20356: case 20358: case 20360: case 20362: case 20364: case 20366: case 20368: case 20370: case 20372: case 20374: case 20376: case 20378: case 20380: case 20382: case 20384: case 20386: case 20388: case 20390: case 20392: case 20394: case 20396: case 20398: case 20400: case 20402: case 20404: case 20406: case 20408: case 20410: case 20412: case 20414: case 20416: case 20418: case 20420: case 20422: case 20424: case 20426: case 20428: case 20430: case 20432: case 20434: case 20436: case 20438: case 20440: case 20442: case 20444: case 20446: case 20448: case 20450: case 20452: case 20454: case 20456: case 20458: case 20460: case 20462: case 20464: case 20466: case 20468: case 20470: case 20472: case 20474: case 20476: case 20478: case 20480: case 20482: case 20484: case 20486: case 20488: case 20490: case 20492: case 20494: case 20496: case 20498: case 20500: case 20502: case 20504: case 20506: case 20508: case 20510: case 20512: case 20514: case 20516: case 20518: case 20520: case 20522: case 20524: case 20526: case 20528: case 20530: case 20532: case 20534: case 20536: case 20538: case 20540: case 20542: case 20544: case 20546: case 20548: case 20550: case 20552: case 20554: case 20556: case 20558: case 20560: case 20562: case 20564: case 20566: case 20568: case 20570: case 20572: case 20574: case 20576: case 20578: case 20580: case 20582: case 20584: case 20586: case 20588: case 20590: case 20592: case 20594: case 20596: case 20598: case 20600: case 20602: case 20604: case 20606: case 20608: case 20610: case 20612: case 20614: case 20616: case 20618: case 20620: case 20622: case 20624: case 20626: case 20628: case 20630: case 20632: case 20634: case 20636: case 20638: case 20640: case 20642: case 20644: case 20646: case 20648: case 20650: case 20652: case 20654: case 20656: case 20658: case 20660: case 20662: case 20664: case 20666: case 20668: case 20670: case 20672: case 20674: case 20676: case 20678: case 20680: case 20682: case 20684: case 20686: case 20688: case 20690: case 20692: case 20694: case 20696: case 20698: case 20700: case 20702: case 20704: case 20706: case 20708: case 20710: case 20712: case 20714: case 20716: case 20718: case 20720: case 20722: case 20724: case 20726: case 20728: case 20730: case 20732: case 20734: case 20736: case 20738: case 20740: case 20742: case 20744: case 20746: case 20748: case 20750: case 20752: case 20754: case 20756: case 20758: case 20760: case 20762: case 20764: case 20766: case 20768: case 20770: case 20772: case 20774: case 20776: case 20778: case 20780: case 20782: case 20784: case 20786: case 20788: case 20790: case 20792: case 20794: case 20796: case 20798: case 20800: case 20802: case 20804: case 20806: case 20808: case 20810: case 20812: case 20814: case 20816: case 20818: case 20820: case 20822: case 20824: case 20826: case 20828: case 20830: case 20832: case 20834: case 20836: case 20838: case 20840: case 20842: case 20844: case 20846: case 20848: case 20850: case 20852: case 20854: case 20856: case 20858: case 20860: case 20862: case 20864: case 20866: case 20868: case 20870: case 20872: case 20874: case 20876: case 20878: case 20880: case 20882: case 20884: case 20886: case 20888: case 20890: case 20892: case 20894: case 20896: case 20898: case 20900: case 20902: case 20904: case 20906: case 20908: case 20910: case 20912: case 20914: case 20916: case 20918: case 20920: case 20922: case 20924: case 20926: case 20928: case 20930: case 20932: case 20934: case 20936: case 20938: case 20940: case 20942: case 20944: case 20946: case 20948: case 20950: case 20952: case 20954: case 20956: case 20958: case 20960: case 20962: case 20964: case 20966: case 20968: case 20970: case 20972: case 20974: case 20976: case 20978: case 20980: case 20982: case 20984: case 20986: case 20988: case 20990: case 20992: case 20994: case 20996: case 20998: case 21e3: case 21002: case 21004: case 21006: case 21008: case 21010: case 21012: case 21014: case 21016: case 21018: case 21020: case 21022: case 21024: case 21026: case 21028: case 21030: case 21032: case 21034: case 21036: case 21038: case 21040: case 21042: case 21044: case 21046: case 21048: case 21050: case 21052: case 21054: case 21056: case 21058: case 21060: case 21062: case 21064: case 21066: case 21068: case 21070: case 21072: case 21074: case 21076: case 21078: case 21080: case 21082: case 21084: case 21086: case 21088: case 21090: case 21092: case 21094: case 21096: case 21098: case 21100: case 21102: case 21104: case 21106: case 21108: case 21110: case 21112: case 21114: case 21116: case 21118: case 21120: case 21122: case 21124: case 21126: case 21128: case 21130: case 21132: case 21134: case 21136: case 21138: case 21140: case 21142: case 21144: case 21146: case 21148: case 21150: case 21152: case 21154: case 21156: case 21158: case 21160: case 21162: case 21164: case 21166: case 21168: case 21170: case 21172: case 21174: case 21176: case 21178: case 21180: case 21182: case 21184: case 21186: case 21188: case 21190: case 21192: case 21194: case 21196: case 21198: case 21200: case 21202: case 21204: case 21206: case 21208: case 21210: case 21212: case 21214: case 21216: case 21218: case 21220: case 21222: case 21224: case 21226: case 21228: case 21230: case 21232: case 21234: case 21236: case 21238: case 21240: case 21242: case 21244: case 21246: case 21248: case 21250: case 21252: case 21254: case 21256: case 21258: case 21260: case 21262: case 21264: case 21266: case 21268: case 21270: case 21272: case 21274: case 21276: case 21278: case 21280: case 21282: case 21284: case 21286: case 21288: case 21290: case 21292: case 21294: case 21296: case 21298: case 21300: case 21302: case 21304: case 21306: case 21308: case 21310: case 21312: case 21314: case 21316: case 21318: case 21320: case 21322: case 21324: case 21326: case 21328: case 21330: case 21332: case 21334: case 21336: case 21338: case 21340: case 21342: case 21344: case 21346: case 21348: case 21350: case 21352: case 21354: case 21356: case 21358: case 21360: case 21362: case 21364: case 21366: case 21368: case 21370: case 21372: case 21374: case 21376: case 21378: case 21380: case 21382: case 21384: case 21386: case 21388: case 21390: case 21392: case 21394: case 21396: case 21398: case 21400: case 21402: case 21404: case 21406: case 21408: case 21410: case 21412: case 21414: case 21416: case 21418: case 21420: case 21422: case 21424: case 21426: case 21428: case 21430: case 21432: case 21434: case 21436: case 21438: case 21440: case 21442: case 21444: case 21446: case 21448: case 21450: case 21452: case 21454: case 21456: case 21458: case 21460: case 21462: case 21464: case 21466: case 21468: case 21470: case 21472: case 21474: case 21476: case 21478: case 21480: case 21482: case 21484: case 21486: case 21488: case 21490: case 21492: case 21494: case 21496: case 21498: case 21500: case 21502: case 21504: case 21506: case 21508: case 21510: case 21512: case 21514: case 21516: case 21518: case 21520: case 21522: case 21524: case 21526: case 21528: case 21530: case 21532: case 21534: case 21536: case 21538: case 21540: case 21542: case 21544: case 21546: case 21548: case 21550: case 21552: case 21554: case 21556: case 21558: case 21560: case 21562: case 21564: case 21566: case 21568: case 21570: case 21572: case 21574: case 21576: case 21578: case 21580: case 21582: case 21584: case 21586: case 21588: case 21590: case 21592: case 21594: case 21596: case 21598: case 21600: case 21602: case 21604: case 21606: case 21608: case 21610: case 21612: case 21614: case 21616: case 21618: case 21620: case 21622: case 21624: case 21626: case 21628: case 21630: case 21632: case 21634: case 21636: case 21638: case 21640: case 21642: case 21644: case 21646: case 21648: case 21650: case 21652: case 21654: case 21656: case 21658: case 21660: case 21662: case 21664: case 21666: case 21668: case 21670: case 21672: case 21674: case 21676: case 21678: case 21680: case 21682: case 21684: case 21686: case 21688: case 21690: case 21692: case 21694: case 21696: case 21698: case 21700: case 21702: case 21704: case 21706: case 21708: case 21710: case 21712: case 21714: case 21716: case 21718: case 21720: case 21722: case 21724: case 21726: case 21728: case 21730: case 21732: case 21734: case 21736: case 21738: case 21740: case 21742: case 21744: case 21746: case 21748: case 21750: case 21752: case 21754: case 21756: case 21758: case 21760: case 21762: case 21764: case 21766: case 21768: case 21770: case 21772: case 21774: case 21776: case 21778: case 21780: case 21782: case 21784: case 21786: case 21788: case 21790: case 21792: case 21794: case 21796: case 21798: case 21800: case 21802: case 21804: case 21806: case 21808: case 21810: case 21812: case 21814: case 21816: case 21818: case 21820: case 21822: case 21824: case 21826: case 21828: case 21830: case 21832: case 21834: case 21836: case 21838: case 21840: case 21842: case 21844: case 21846: case 21848: case 21850: case 21852: case 21854: case 21856: case 21858: case 21860: case 21862: case 21864: case 21866: case 21868: case 21870: case 21872: case 21874: case 21876: case 21878: case 21880: case 21882: case 21884: case 21886: case 21888: case 21890: case 21892: case 21894: case 21896: case 21898: case 21900: case 21902: case 21904: case 21906: case 21908: case 21910: case 21912: case 21914: case 21916: case 21918: case 21920: case 21922: case 21924: case 21926: case 21928: case 21930: case 21932: case 21934: case 21936: case 21938: case 21940: case 21942: case 21944: case 21946: case 21948: case 21950: case 21952: case 21954: case 21956: case 21958: case 21960: case 21962: case 21964: case 21966: case 21968: case 21970: case 21972: case 21974: case 21976: case 21978: case 21980: case 21982: case 21984: case 21986: case 21988: case 21990: case 21992: case 21994: case 21996: case 21998: case 22e3: case 22002: case 22004: case 22006: case 22008: case 22010: case 22012: case 22014: case 22016: case 22018: case 22020: case 22022: case 22024: case 22026: case 22028: case 22030: case 22032: case 22034: case 22036: case 22038: case 22040: case 22042: case 22044: case 22046: case 22048: case 22050: case 22052: case 22054: case 22056: case 22058: case 22060: case 22062: case 22064: case 22066: case 22068: case 22070: case 22072: case 22074: case 22076: case 22078: case 22080: case 22082: case 22084: case 22086: case 22088: case 22090: case 22092: case 22094: case 22096: case 22098: case 22100: case 22102: case 22104: case 22106: case 22108: case 22110: case 22112: case 22114: case 22116: case 22118: case 22120: case 22122: case 22124: case 22126: case 22128: case 22130: case 22132: case 22134: case 22136: case 22138: case 22140: case 22142: case 22144: case 22146: case 22148: case 22150: case 22152: case 22154: case 22156: case 22158: case 22160: case 22162: case 22164: case 22166: case 22168: case 22170: case 22172: case 22174: case 22176: case 22178: case 22180: case 22182: case 22184: case 22186: case 22188: case 22190: case 22192: case 22194: case 22196: case 22198: case 22200: case 22202: case 22204: case 22206: case 22208: case 22210: case 22212: case 22214: case 22216: case 22218: case 22220: case 22222: case 22224: case 22226: case 22228: case 22230: case 22232: case 22234: case 22236: case 22238: case 22240: case 22242: case 22244: case 22246: case 22248: case 22250: case 22252: case 22254: case 22256: case 22258: case 22260: case 22262: case 22264: case 22266: case 22268: case 22270: case 22272: case 22274: case 22276: case 22278: case 22280: case 22282: case 22284: case 22286: case 22288: case 22290: case 22292: case 22294: case 22296: case 22298: case 22300: case 22302: case 22304: case 22306: case 22308: case 22310: case 22312: case 22314: case 22316: case 22318: case 22320: case 22322: case 22324: case 22326: case 22328: case 22330: case 22332: case 22334: case 22336: case 22338: case 22340: case 22342: case 22344: case 22346: case 22348: case 22350: case 22352: case 22354: case 22356: case 22358: case 22360: case 22362: case 22364: case 22366: case 22368: case 22370: case 22372: case 22374: case 22376: case 22378: case 22380: case 22382: case 22384: case 22386: case 22388: case 22390: case 22392: case 22394: case 22396: case 22398: case 22400: case 22402: case 22404: case 22406: case 22408: case 22410: case 22412: case 22414: case 22416: case 22418: case 22420: case 22422: case 22424: case 22426: case 22428: case 22430: case 22432: case 22434: case 22436: case 22438: case 22440: case 22442: case 22444: case 22446: case 22448: case 22450: case 22452: case 22454: case 22456: case 22458: case 22460: case 22462: case 22464: case 22466: case 22468: case 22470: case 22472: case 22474: case 22476: case 22478: case 22480: case 22482: case 22484: case 22486: case 22488: case 22490: case 22492: case 22494: case 22496: case 22498: case 22500: case 22502: case 22504: case 22506: case 22508: case 22510: case 22512: case 22514: case 22516: case 22518: case 22520: case 22522: case 22524: case 22526: case 22528: case 22530: case 22532: case 22534: case 22536: case 22538: case 22540: case 22542: case 22544: case 22546: case 22548: case 22550: case 22552: case 22554: case 22556: case 22558: case 22560: case 22562: case 22564: case 22566: case 22568: case 22570: case 22572: case 22574: case 22576: case 22578: case 22580: case 22582: case 22584: case 22586: case 22588: case 22590: case 22592: case 22594: case 22596: case 22598: case 22600: case 22602: case 22604: case 22606: case 22608: case 22610: case 22612: case 22614: case 22616: case 22618: case 22620: case 22622: case 22624: case 22626: case 22628: case 22630: case 22632: case 22634: case 22636: case 22638: case 22640: case 22642: case 22644: case 22646: case 22648: case 22650: case 22652: case 22654: case 22656: case 22658: case 22660: case 22662: case 22664: case 22666: case 22668: case 22670: case 22672: case 22674: case 22676: case 22678: case 22680: case 22682: case 22684: case 22686: case 22688: case 22690: case 22692: case 22694: case 22696: case 22698: case 22700: case 22702: case 22704: case 22706: case 22708: case 22710: case 22712: case 22714: case 22716: case 22718: case 22720: case 22722: case 22724: case 22726: case 22728: case 22730: case 22732: case 22734: case 22736: case 22738: case 22740: case 22742: case 22744: case 22746: case 22748: case 22750: case 22752: case 22754: case 22756: case 22758: case 22760: case 22762: case 22764: case 22766: case 22768: case 22770: case 22772: case 22774: case 22776: case 22778: case 22780: case 22782: case 22784: case 22786: case 22788: case 22790: case 22792: case 22794: case 22796: case 22798: case 22800: case 22802: case 22804: case 22806: case 22808: case 22810: case 22812: case 22814: case 22816: case 22818: case 22820: case 22822: case 22824: case 22826: case 22828: case 22830: case 22832: case 22834: case 22836: case 22838: case 22840: case 22842: case 22844: case 22846: case 22848: case 22850: case 22852: case 22854: case 22856: case 22858: case 22860: case 22862: case 22864: case 22866: case 22868: case 22870: case 22872: case 22874: case 22876: case 22878: case 22880: case 22882: case 22884: case 22886: case 22888: case 22890: case 22892: case 22894: case 22896: case 22898: case 22900: case 22902: case 22904: case 22906: case 22908: case 22910: case 22912: case 22914: case 22916: case 22918: case 22920: case 22922: case 22924: case 22926: case 22928: case 22930: case 22932: case 22934: case 22936: case 22938: case 22940: case 22942: case 22944: case 22946: case 22948: case 22950: case 22952: case 22954: case 22956: case 22958: case 22960: case 22962: case 22964: case 22966: case 22968: case 22970: case 22972: case 22974: case 22976: case 22978: case 22980: case 22982: case 22984: case 22986: case 22988: case 22990: case 22992: case 22994: case 22996: case 22998: case 23e3: case 23002: case 23004: case 23006: case 23008: case 23010: case 23012: case 23014: case 23016: case 23018: case 23020: case 23022: case 23024: case 23026: case 23028: case 23030: case 23032: case 23034: case 23036: case 23038: case 23040: case 23042: case 23044: case 23046: case 23048: case 23050: case 23052: case 23054: case 23056: case 23058: case 23060: case 23062: case 23064: case 23066: case 23068: case 23070: case 23072: case 23074: case 23076: case 23078: case 23080: case 23082: case 23084: case 23086: case 23088: case 23090: case 23092: case 23094: case 23096: case 23098: case 23100: case 23102: case 23104: case 23106: case 23108: case 23110: case 23112: case 23114: case 23116: case 23118: case 23120: case 23122: case 23124: case 23126: case 23128: case 23130: case 23132: case 23134: case 23136: case 23138: case 23140: case 23142: case 23144: case 23146: case 23148: case 23150: case 23152: case 23154: case 23156: case 23158: case 23160: case 23162: case 23164: case 23166: case 23168: case 23170: case 23172: case 23174: case 23176: case 23178: case 23180: case 23182: case 23184: case 23186: case 23188: case 23190: case 23192: case 23194: case 23196: case 23198: case 23200: case 23202: case 23204: case 23206: case 23208: case 23210: case 23212: case 23214: case 23216: case 23218: case 23220: case 23222: case 23224: case 23226: case 23228: case 23230: case 23232: case 23234: case 23236: case 23238: case 23240: case 23242: case 23244: case 23246: case 23248: case 23250: case 23252: case 23254: case 23256: case 23258: case 23260: case 23262: case 23264: case 23266: case 23268: case 23270: case 23272: case 23274: case 23276: case 23278: case 23280: case 23282: case 23284: case 23286: case 23288: case 23290: case 23292: case 23294: case 23296: case 23298: case 23300: case 23302: case 23304: case 23306: case 23308: case 23310: case 23312: case 23314: case 23316: case 23318: case 23320: case 23322: case 23324: case 23326: case 23328: case 23330: case 23332: case 23334: case 23336: case 23338: case 23340: case 23342: case 23344: case 23346: case 23348: case 23350: case 23352: case 23354: case 23356: case 23358: case 23360: case 23362: case 23364: case 23366: case 23368: case 23370: case 23372: case 23374: case 23376: case 23378: case 23380: case 23382: case 23384: case 23386: case 23388: case 23390: case 23392: case 23394: case 23396: case 23398: case 23400: case 23402: case 23404: case 23406: case 23408: case 23410: case 23412: case 23414: case 23416: case 23418: case 23420: case 23422: case 23424: case 23426: case 23428: case 23430: case 23432: case 23434: case 23436: case 23438: case 23440: case 23442: case 23444: case 23446: case 23448: case 23450: case 23452: case 23454: case 23456: case 23458: case 23460: case 23462: case 23464: case 23466: case 23468: case 23470: case 23472: case 23474: case 23476: case 23478: case 23480: case 23482: case 23484: case 23486: case 23488: case 23490: case 23492: case 23494: case 23496: case 23498: case 23500: case 23502: case 23504: case 23506: case 23508: case 23510: case 23512: case 23514: case 23516: case 23518: case 23520: case 23522: case 23524: case 23526: case 23528: case 23530: case 23532: case 23534: case 23536: case 23538: case 23540: case 23542: case 23544: case 23546: case 23548: case 23550: case 23552: case 23554: case 23556: case 23558: case 23560: case 23562: case 23564: case 23566: case 23568: case 23570: case 23572: case 23574: case 23576: case 23578: case 23580: case 23582: case 23584: case 23586: case 23588: case 23590: case 23592: case 23594: case 23596: case 23598: case 23600: case 23602: case 23604: case 23606: case 23608: case 23610: case 23612: case 23614: case 23616: case 23618: case 23620: case 23622: case 23624: case 23626: case 23628: case 23630: case 23632: case 23634: case 23636: case 23638: case 23640: case 23642: case 23644: case 23646: case 23648: case 23650: case 23652: case 23654: case 23656: case 23658: case 23660: case 23662: case 23664: case 23666: case 23668: case 23670: case 23672: case 23674: case 23676: case 23678: case 23680: case 23682: case 23684: case 23686: case 23688: case 23690: case 23692: case 23694: case 23696: case 23698: case 23700: case 23702: case 23704: case 23706: case 23708: case 23710: case 23712: case 23714: case 23716: case 23718: case 23720: case 23722: case 23724: case 23726: case 23728: case 23730: case 23732: case 23734: case 23736: case 23738: case 23740: case 23742: case 23744: case 23746: case 23748: case 23750: case 23752: case 23754: case 23756: case 23758: case 23760: case 23762: case 23764: case 23766: case 23768: case 23770: case 23772: case 23774: case 23776: case 23778: case 23780: case 23782: case 23784: case 23786: case 23788: case 23790: case 23792: case 23794: case 23796: case 23798: case 23800: case 23802: case 23804: case 23806: case 23808: case 23810: case 23812: case 23814: case 23816: case 23818: case 23820: case 23822: case 23824: case 23826: case 23828: case 23830: case 23832: case 23834: case 23836: case 23838: case 23840: case 23842: case 23844: case 23846: case 23848: case 23850: case 23852: case 23854: case 23856: case 23858: case 23860: case 23862: case 23864: case 23866: case 23868: case 23870: case 23872: case 23874: case 23876: case 23878: case 23880: case 23882: case 23884: case 23886: case 23888: case 23890: case 23892: case 23894: case 23896: case 23898: case 23900: case 23902: case 23904: case 23906: case 23908: case 23910: case 23912: case 23914: case 23916: case 23918: case 23920: case 23922: case 23924: case 23926: case 23928: case 23930: case 23932: case 23934: case 23936: case 23938: case 23940: case 23942: case 23944: case 23946: case 23948: case 23950: case 23952: case 23954: case 23956: case 23958: case 23960: case 23962: case 23964: case 23966: case 23968: case 23970: case 23972: case 23974: case 23976: case 23978: case 23980: case 23982: case 23984: case 23986: case 23988: case 23990: case 23992: case 23994: case 23996: case 23998: case 24e3: case 24002: case 24004: case 24006: case 24008: case 24010: case 24012: case 24014: case 24016: case 24018: case 24020: case 24022: case 24024: case 24026: case 24028: case 24030: case 24032: case 24034: case 24036: case 24038: case 24040: case 24042: case 24044: case 24046: case 24048: case 24050: case 24052: case 24054: case 24056: case 24058: case 24060: case 24062: case 24064: case 24066: case 24068: case 24070: case 24072: case 24074: case 24076: case 24078: case 24080: case 24082: case 24084: case 24086: case 24088: case 24090: case 24092: case 24094: case 24096: case 24098: case 24100: case 24102: case 24104: case 24106: case 24108: case 24110: case 24112: case 24114: case 24116: case 24118: case 24120: case 24122: case 24124: case 24126: case 24128: case 24130: case 24132: case 24134: case 24136: case 24138: case 24140: case 24142: case 24144: case 24146: case 24148: case 24150: case 24152: case 24154: case 24156: case 24158: case 24160: case 24162: case 24164: case 24166: case 24168: case 24170: case 24172: case 24174: case 24176: case 24178: case 24180: case 24182: case 24184: case 24186: case 24188: case 24190: case 24192: case 24194: case 24196: case 24198: case 24200: case 24202: case 24204: case 24206: case 24208: case 24210: case 24212: case 24214: case 24216: case 24218: case 24220: case 24222: case 24224: case 24226: case 24228: case 24230: case 24232: case 24234: case 24236: case 24238: case 24240: case 24242: case 24244: case 24246: case 24248: case 24250: case 24252: case 24254: case 24256: case 24258: case 24260: case 24262: case 24264: case 24266: case 24268: case 24270: case 24272: case 24274: case 24276: case 24278: case 24280: case 24282: case 24284: case 24286: case 24288: case 24290: case 24292: case 24294: case 24296: case 24298: case 24300: case 24302: case 24304: case 24306: case 24308: case 24310: case 24312: case 24314: case 24316: case 24318: case 24320: case 24322: case 24324: case 24326: case 24328: case 24330: case 24332: case 24334: case 24336: case 24338: case 24340: case 24342: case 24344: case 24346: case 24348: case 24350: case 24352: case 24354: case 24356: case 24358: case 24360: case 24362: case 24364: case 24366: case 24368: case 24370: case 24372: case 24374: case 24376: case 24378: case 24380: case 24382: case 24384: case 24386: case 24388: case 24390: case 24392: case 24394: case 24396: case 24398: case 24400: case 24402: case 24404: case 24406: case 24408: case 24410: case 24412: case 24414: case 24416: case 24418: case 24420: case 24422: case 24424: case 24426: case 24428: case 24430: case 24432: case 24434: case 24436: case 24438: case 24440: case 24442: case 24444: case 24446: case 24448: case 24450: case 24452: case 24454: case 24456: case 24458: case 24460: case 24462: case 24464: case 24466: case 24468: case 24470: case 24472: case 24474: case 24476: case 24478: case 24480: case 24482: case 24484: case 24486: case 24488: case 24490: case 24492: case 24494: case 24496: case 24498: case 24500: case 24502: case 24504: case 24506: case 24508: case 24510: case 24512: case 24514: case 24516: case 24518: case 24520: case 24522: case 24524: case 24526: case 24528: case 24530: case 24532: case 24534: case 24536: case 24538: case 24540: case 24542: case 24544: case 24546: case 24548: case 24550: case 24552: case 24554: case 24556: case 24558: case 24560: case 24562: case 24564: case 24566: case 24568: case 24570: case 24572: case 24574: case 24576: case 24578: case 24580: case 24582: case 24584: case 24586: case 24588: case 24590: case 24592: case 24594: case 24596: case 24598: case 24600: case 24602: case 24604: case 24606: case 24608: case 24610: case 24612: case 24614: return 0 | 0; default: break block; }; } return 1 | 0; } function $16() { } function $17() { block : { dummy(); switch (0 | 0) { default: break block; }; } } function $18() { block : { dummy(); switch (0 | 0) { default: break block; }; } } function $19() { var $1_1 = 0; block : { dummy(); $1_1 = 2; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $20() { var $1_1 = 0, $2_1 = 0, $4_1 = 0; __binaryen_fake_return : { loop_in : while (1) { $1_1 = 3; switch (0 | 0) { default: break __binaryen_fake_return; }; }; } return $1_1 | 0; } function $21() { var $1_1 = 0, $2_1 = 0, $4_1 = 0; __binaryen_fake_return : { loop_in : while (1) { dummy(); $1_1 = 4; switch (-1 | 0) { default: break __binaryen_fake_return; }; }; } return $1_1 | 0; } function $22() { var $1_1 = 0; __binaryen_fake_return : { loop_in : while (1) { dummy(); $1_1 = 5; switch (1 | 0) { default: break __binaryen_fake_return; }; }; } return $1_1 | 0; } function $23() { var $1_1 = 0; block : { $1_1 = 9; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $24() { } function $25() { var $1_1 = 0; block : { $1_1 = 8; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $26() { var $1_1 = 0; block : { $1_1 = 9; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $27() { } function $28() { var $1_1 = 0; block : { $1_1 = 10; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $29() { var $1_1 = 0; block : { $1_1 = 11; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $30() { var i64toi32_i32$0 = 0, $1_1 = 0, $1$hi = 0; block : { i64toi32_i32$0 = 0; $1_1 = 7; $1$hi = i64toi32_i32$0; switch (0 | 0) { default: break block; }; } i64toi32_i32$0 = $1$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return $1_1 | 0; } function $31() { var $1_1 = 0, $6_1 = 0; if_ : { $1_1 = 2; switch (0 | 0) { default: break if_; }; } return $1_1 | 0; } function $32($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $4_1 = 0, $8_1 = 0; block : { if ($0) { $4_1 = 3; switch (0 | 0) { default: break block; }; } else { $8_1 = $1_1 } $4_1 = $8_1; } return $4_1 | 0; } function $33($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $6_1 = 0, $7_1 = 0, $8_1 = 0, $9_1 = 0; block : { if_ : { if ($0) { $9_1 = $1_1 } else { $6_1 = 4; $7_1 = $6_1; $8_1 = $6_1; switch (0 | 0) { case 0: break block; default: break if_; }; } $8_1 = $9_1; } $7_1 = $8_1; } return $7_1 | 0; } function $34($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { $3_1 = 5; switch (0 | 0) { default: break block; }; } return $3_1 | 0; } function $35($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $2_1 = 0, $4_1 = 0, $5_1 = 0; block : { $2_1 = $0; $4_1 = 6; switch (1 | 0) { default: break block; }; } return $4_1 | 0; } function $36() { var $1_1 = 0; block : { $1_1 = 7; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function f($0, $1_1, $2_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; return -1 | 0; } function $38() { var $1_1 = 0; block : { $1_1 = 12; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $39() { var $1_1 = 0; block : { $1_1 = 13; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $40() { var $1_1 = 0; block : { $1_1 = 14; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $41() { var $1_1 = 0; block : { $1_1 = 20; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $42() { var $1_1 = 0; block : { $1_1 = 21; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $43() { var $1_1 = 0; block : { $1_1 = 22; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $44() { var $1_1 = 0; block : { $1_1 = 23; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $45() { var $2_1 = 0; block : { $2_1 = 17; switch (1 | 0) { default: break block; }; } return $2_1 | 0; } function $46() { var $2_1 = 0; block : { $2_1 = 1; switch (1 | 0) { default: break block; }; } return $2_1 | 0; } function $47() { var $1_1 = 0; block : { $1_1 = 1; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $48() { var $1_1 = Math_fround(0); block : { $1_1 = Math_fround(1.7000000476837158); switch (1 | 0) { default: break block; }; } return Math_fround($1_1); } function $49() { var i64toi32_i32$0 = 0, $1_1 = 0, $1$hi = 0; block : { i64toi32_i32$0 = 0; $1_1 = 30; $1$hi = i64toi32_i32$0; switch (1 | 0) { default: break block; }; } i64toi32_i32$0 = $1$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return $1_1 | 0; } function $50() { var $1_1 = 0; block : { $1_1 = 30; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $51() { var $1_1 = 0; block : { $1_1 = 31; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $52() { var $1_1 = 0; block : { $1_1 = 32; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $53() { var $1_1 = 0; block : { $1_1 = 33; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $54() { var $1_1 = Math_fround(0); block : { $1_1 = Math_fround(3.4000000953674316); switch (0 | 0) { default: break block; }; } return Math_fround($1_1); } function $55() { var $1_1 = 0; block : { $1_1 = 3; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $56() { var i64toi32_i32$0 = 0, $1_1 = 0, $1$hi = 0, i64toi32_i32$1 = 0; block : { i64toi32_i32$0 = 0; $1_1 = 45; $1$hi = i64toi32_i32$0; switch (0 | 0) { default: break block; }; } i64toi32_i32$1 = $1$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return $1_1 | 0; } function $57() { var $1_1 = 0; block : { $1_1 = 44; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $58() { var $1_1 = 0; block : { $1_1 = 43; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $59() { var $1_1 = 0; block : { $1_1 = 42; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $60() { var $1_1 = 0; block : { $1_1 = 41; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $61() { var $1_1 = 0; block : { $1_1 = 40; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $62($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { block11 : { block12 : { $2_1 = 16; $3_1 = $2_1; $4_1 = $2_1; $5_1 = $2_1; switch ($0 | 0) { case 1: break block11; case 0: break block12; default: break block; }; } $4_1 = 2 + $5_1 | 0; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $63($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { block13 : { block14 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; $5_1 = $2_1; switch ($0 | 0) { case 0: break block; case 1: break block13; default: break block14; }; } $4_1 = 16; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $64($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { block15 : { block16 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; $5_1 = $2_1; switch ($0 | 0) { case 1: break block15; case 0: break block16; default: break block; }; } $4_1 = 16; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $65($0) { $0 = $0 | 0; var $4_1 = 0, $2_1 = 0, $3_1 = 0; block : { block17 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; switch ($0 | 0) { case 1: break block; default: break block17; }; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $66($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { block18 : { block19 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; $5_1 = $2_1; switch ($0 | 0) { case 1: break block18; case 0: break block19; default: break block; }; } $4_1 = 16; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $67($0) { $0 = $0 | 0; var $4_1 = 0, $2_1 = 0, $3_1 = 0; block : { block20 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; switch ($0 | 0) { case 1: break block; default: break block20; }; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $68($0) { $0 = $0 | 0; var $4_1 = 0, $9_1 = 0; loop_in : while (1) { block : { switch ($0 | 0) { case 0: continue loop_in; default: break block; }; } $4_1 = 0; break loop_in; }; $0 = $4_1; loop_in21 : while (1) { block22 : { switch ($0 | 0) { case 0: break block22; default: continue loop_in21; }; } $9_1 = 3; break loop_in21; }; return $9_1 | 0; } function legalstub$6() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $6() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0 | 0; } function legalstub$30() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $30() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0 | 0; } function legalstub$49() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $49() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0 | 0; } function legalstub$56() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $56() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0 | 0; } return { "type_i32": $1, "type_i64": $2, "type_f32": $3, "type_f64": $4, "type_i32_value": $5, "type_i64_value": legalstub$6, "type_f32_value": $7, "type_f64_value": $8, "empty": $9, "empty_value": $10, "singleton": $11, "singleton_value": $12, "multiple": $13, "multiple_value": $14, "large": $15, "as_block_first": $16, "as_block_mid": $17, "as_block_last": $18, "as_block_value": $19, "as_loop_first": $20, "as_loop_mid": $21, "as_loop_last": $22, "as_br_value": $23, "as_br_if_cond": $24, "as_br_if_value": $25, "as_br_if_value_cond": $26, "as_br_table_index": $27, "as_br_table_value": $28, "as_br_table_value_index": $29, "as_return_value": legalstub$30, "as_if_cond": $31, "as_if_then": $32, "as_if_else": $33, "as_select_first": $34, "as_select_second": $35, "as_select_cond": $36, "as_call_first": $38, "as_call_mid": $39, "as_call_last": $40, "as_call_indirect_first": $41, "as_call_indirect_mid": $42, "as_call_indirect_last": $43, "as_call_indirect_func": $44, "as_local_set_value": $45, "as_local_tee_value": $46, "as_global_set_value": $47, "as_load_address": $48, "as_loadN_address": legalstub$49, "as_store_address": $50, "as_store_value": $51, "as_storeN_address": $52, "as_storeN_value": $53, "as_unary_operand": $54, "as_binary_left": $55, "as_binary_right": legalstub$56, "as_test_operand": $57, "as_compare_left": $58, "as_compare_right": $59, "as_convert_operand": $60, "as_memory_grow_size": $61, "nested_block_value": $62, "nested_br_value": $63, "nested_br_if_value": $64, "nested_br_if_value_cond": $65, "nested_br_table_value": $66, "nested_br_table_value_index": $67, "nested_br_table_loop_block": $68 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var type_i32 = retasmFunc.type_i32; export var type_i64 = retasmFunc.type_i64; export var type_f32 = retasmFunc.type_f32; export var type_f64 = retasmFunc.type_f64; export var type_i32_value = retasmFunc.type_i32_value; export var type_i64_value = retasmFunc.type_i64_value; export var type_f32_value = retasmFunc.type_f32_value; export var type_f64_value = retasmFunc.type_f64_value; export var empty = retasmFunc.empty; export var empty_value = retasmFunc.empty_value; export var singleton = retasmFunc.singleton; export var singleton_value = retasmFunc.singleton_value; export var multiple = retasmFunc.multiple; export var multiple_value = retasmFunc.multiple_value; export var large = retasmFunc.large; export var as_block_first = retasmFunc.as_block_first; export var as_block_mid = retasmFunc.as_block_mid; export var as_block_last = retasmFunc.as_block_last; export var as_block_value = retasmFunc.as_block_value; export var as_loop_first = retasmFunc.as_loop_first; export var as_loop_mid = retasmFunc.as_loop_mid; export var as_loop_last = retasmFunc.as_loop_last; export var as_br_value = retasmFunc.as_br_value; export var as_br_if_cond = retasmFunc.as_br_if_cond; export var as_br_if_value = retasmFunc.as_br_if_value; export var as_br_if_value_cond = retasmFunc.as_br_if_value_cond; export var as_br_table_index = retasmFunc.as_br_table_index; export var as_br_table_value = retasmFunc.as_br_table_value; export var as_br_table_value_index = retasmFunc.as_br_table_value_index; export var as_return_value = retasmFunc.as_return_value; export var as_if_cond = retasmFunc.as_if_cond; export var as_if_then = retasmFunc.as_if_then; export var as_if_else = retasmFunc.as_if_else; export var as_select_first = retasmFunc.as_select_first; export var as_select_second = retasmFunc.as_select_second; export var as_select_cond = retasmFunc.as_select_cond; export var as_call_first = retasmFunc.as_call_first; export var as_call_mid = retasmFunc.as_call_mid; export var as_call_last = retasmFunc.as_call_last; export var as_call_indirect_first = retasmFunc.as_call_indirect_first; export var as_call_indirect_mid = retasmFunc.as_call_indirect_mid; export var as_call_indirect_last = retasmFunc.as_call_indirect_last; export var as_call_indirect_func = retasmFunc.as_call_indirect_func; export var as_local_set_value = retasmFunc.as_local_set_value; export var as_local_tee_value = retasmFunc.as_local_tee_value; export var as_global_set_value = retasmFunc.as_global_set_value; export var as_load_address = retasmFunc.as_load_address; export var as_loadN_address = retasmFunc.as_loadN_address; export var as_store_address = retasmFunc.as_store_address; export var as_store_value = retasmFunc.as_store_value; export var as_storeN_address = retasmFunc.as_storeN_address; export var as_storeN_value = retasmFunc.as_storeN_value; export var as_unary_operand = retasmFunc.as_unary_operand; export var as_binary_left = retasmFunc.as_binary_left; export var as_binary_right = retasmFunc.as_binary_right; export var as_test_operand = retasmFunc.as_test_operand; export var as_compare_left = retasmFunc.as_compare_left; export var as_compare_right = retasmFunc.as_compare_right; export var as_convert_operand = retasmFunc.as_convert_operand; export var as_memory_grow_size = retasmFunc.as_memory_grow_size; export var nested_block_value = retasmFunc.nested_block_value; export var nested_br_value = retasmFunc.nested_br_value; export var nested_br_if_value = retasmFunc.nested_br_if_value; export var nested_br_if_value_cond = retasmFunc.nested_br_if_value_cond; export var nested_br_table_value = retasmFunc.nested_br_table_value; export var nested_br_table_value_index = retasmFunc.nested_br_table_value_index; export var nested_br_table_loop_block = retasmFunc.nested_br_table_loop_block; binaryen-version_108/test/wasm2js/br_table_hoisting.2asm.js000066400000000000000000000052421423707623100241720ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function zed($0) { $0 = $0 | 0; zed($0 | 0); } function $1(x) { x = x | 0; a : { b : { switch (x | 0) { default: zed(-1 | 0); zed(-2 | 0); case 3: zed(-3 | 0); zed(-4 | 0); case 2: zed(-5 | 0); zed(-6 | 0); break a; case 0: break a; case 1: break b; }; } zed(-7 | 0); zed(-8 | 0); break a; } zed(-9 | 0); zed(-10 | 0); } function $2(x) { x = x | 0; a : { b : { c : { d : { switch (x | 0) { default: zed(-1 | 0); zed(-2 | 0); break c; case 0: break a; case 1: break b; case 2: break c; case 3: break d; }; } zed(-3 | 0); zed(-4 | 0); break c; } zed(-5 | 0); zed(-6 | 0); break a; } zed(-7 | 0); zed(-8 | 0); break a; } zed(-9 | 0); zed(-10 | 0); } function $3(x) { x = x | 0; a : { b : { c : { d : { switch (x | 0) { default: if (x) { break c } zed(-1 | 0); zed(-2 | 0); break; case 0: break a; case 1: break b; case 2: break c; case 3: break d; }; } zed(-3 | 0); zed(-4 | 0); break c; } zed(-5 | 0); zed(-6 | 0); break a; } zed(-7 | 0); zed(-8 | 0); break a; } zed(-9 | 0); zed(-10 | 0); } function $4(x) { x = x | 0; a : { b : { c : { d : { if (x) { break c } e : { switch (x | 0) { case 0: break a; case 1: break b; case 2: break c; case 3: break d; default: break e; }; } if (x) { break c } zed(-1 | 0); zed(-2 | 0); } zed(-3 | 0); zed(-4 | 0); break c; } zed(-5 | 0); zed(-6 | 0); break a; } zed(-7 | 0); zed(-8 | 0); break a; } zed(-9 | 0); zed(-10 | 0); } return { "foo1": $1, "foo2": $2, "foo3": $3, "foo4": $4 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var foo1 = retasmFunc.foo1; export var foo2 = retasmFunc.foo2; export var foo3 = retasmFunc.foo3; export var foo4 = retasmFunc.foo4; binaryen-version_108/test/wasm2js/br_table_hoisting.2asm.js.opt000066400000000000000000000046101423707623100247710ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function zed($0) { zed($0); } function $1($0) { $0 = $0 | 0; a : { b : { switch ($0 | 0) { default: zed(-1); zed(-2); case 3: zed(-3); zed(-4); case 2: zed(-5); zed(-6); break a; case 0: break a; case 1: break b; }; } zed(-7); zed(-8); } zed(-9); zed(-10); } function $2($0) { $0 = $0 | 0; a : { b : { c : { d : { switch ($0 | 0) { default: zed(-1); zed(-2); break c; case 0: break a; case 1: break b; case 2: break c; case 3: break d; }; } zed(-3); zed(-4); } zed(-5); zed(-6); break a; } zed(-7); zed(-8); } zed(-9); zed(-10); } function $3($0) { $0 = $0 | 0; a : { b : { c : { d : { switch ($0 | 0) { default: if ($0) { break c } zed(-1); zed(-2); break; case 0: break a; case 1: break b; case 2: break c; case 3: break d; }; } zed(-3); zed(-4); } zed(-5); zed(-6); break a; } zed(-7); zed(-8); } zed(-9); zed(-10); } function $4($0) { $0 = $0 | 0; a : { b : { c : { if ($0) { break c } d : { switch ($0 | 0) { default: if ($0) { break c } zed(-1); zed(-2); break; case 0: break a; case 1: break b; case 2: break c; case 3: break d; }; } zed(-3); zed(-4); } zed(-5); zed(-6); break a; } zed(-7); zed(-8); } zed(-9); zed(-10); } return { "foo1": $1, "foo2": $2, "foo3": $3, "foo4": $4 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var foo1 = retasmFunc.foo1; export var foo2 = retasmFunc.foo2; export var foo3 = retasmFunc.foo3; export var foo4 = retasmFunc.foo4; binaryen-version_108/test/wasm2js/br_table_hoisting.wast000066400000000000000000000053271423707623100236770ustar00rootroot00000000000000(module (func $zed (param i32) (call $zed (local.get 0)) ) (func "foo1" (param $x i32) (block $a (block $b (block $c (block $d (block $e (br_table $a $b $c $d $e (local.get $x)) ) (call $zed (i32.const -1)) (call $zed (i32.const -2)) ;; implicit fallthrough - can be done in the switch too ) (call $zed (i32.const -3)) (call $zed (i32.const -4)) (br $c) ;; branch which is identical to a fallthrough ) (call $zed (i32.const -5)) (call $zed (i32.const -6)) (br $a) ;; skip some blocks - can't do this in a switch! ) (call $zed (i32.const -7)) (call $zed (i32.const -8)) (br $a) ) (call $zed (i32.const -9)) (call $zed (i32.const -10)) ) (func "foo2" (param $x i32) (block $a (block $b (block $c (block $d (block $e (br_table $a $b $c $d $e (local.get $x)) ) (call $zed (i32.const -1)) (call $zed (i32.const -2)) (br $c) ;; skip some blocks - can't do this in a switch! ) (call $zed (i32.const -3)) (call $zed (i32.const -4)) (br $c) ;; branch which is identical to a fallthrough ) (call $zed (i32.const -5)) (call $zed (i32.const -6)) (br $a) ;; skip some blocks - can't do this in a switch! ) (call $zed (i32.const -7)) (call $zed (i32.const -8)) (br $a) ) (call $zed (i32.const -9)) (call $zed (i32.const -10)) ) (func "foo3" (param $x i32) (block $a (block $b (block $c (block $d (block $e (br_table $a $b $c $d $e (local.get $x)) ) (br_if $c (local.get $x)) (call $zed (i32.const -1)) (call $zed (i32.const -2)) ) (call $zed (i32.const -3)) (call $zed (i32.const -4)) (br $c) ;; branch which is identical to a fallthrough ) (call $zed (i32.const -5)) (call $zed (i32.const -6)) (br $a) ;; skip some blocks - can't do this in a switch! ) (call $zed (i32.const -7)) (call $zed (i32.const -8)) (br $a) ) (call $zed (i32.const -9)) (call $zed (i32.const -10)) ) (func "foo4" (param $x i32) (block $a (block $b (block $c (block $d (br_if $c (local.get $x)) (block $e (br_table $a $b $c $d $e (local.get $x)) ) (br_if $c (local.get $x)) (call $zed (i32.const -1)) (call $zed (i32.const -2)) ) (call $zed (i32.const -3)) (call $zed (i32.const -4)) (br $c) ;; branch which is identical to a fallthrough ) (call $zed (i32.const -5)) (call $zed (i32.const -6)) (br $a) ;; skip some blocks - can't do this in a switch! ) (call $zed (i32.const -7)) (call $zed (i32.const -8)) (br $a) ) (call $zed (i32.const -9)) (call $zed (i32.const -10)) ) ) binaryen-version_108/test/wasm2js/br_table_temp.2asm.js000066400000000000000000005777071423707623100233370ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function dummy() { } function $1() { } function $2() { } function $3() { } function $4() { } function $5() { var $1_1 = 0; block : { $1_1 = 1; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $6() { var i64toi32_i32$0 = 0, $1_1 = 0, $1$hi = 0; block : { i64toi32_i32$0 = 0; $1_1 = 2; $1$hi = i64toi32_i32$0; switch (0 | 0) { default: break block; }; } i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function $7() { var $1_1 = Math_fround(0); block : { $1_1 = Math_fround(3.0); switch (0 | 0) { default: break block; }; } return Math_fround($1_1); } function $8() { var $1_1 = 0.0; block : { $1_1 = 4.0; switch (0 | 0) { default: break block; }; } return +$1_1; } function $9($0) { $0 = $0 | 0; return 22 | 0; } function $10($0) { $0 = $0 | 0; var $3_1 = 0; block : { $3_1 = 33; switch ($0 | 0) { default: break block; }; } return $3_1 | 0; } function $11($0) { $0 = $0 | 0; block : { switch ($0 | 0) { default: return 20 | 0; case 0: break block; }; } return 22 | 0; } function $12($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0; block : { block1 : { $2_1 = 33; $3_1 = $2_1; $4_1 = $2_1; switch ($0 | 0) { case 0: break block1; default: break block; }; } $3_1 = 32; } return $3_1 | 0; } function $13($0) { $0 = $0 | 0; block : { switch ($0 | 0) { case 3: return 100 | 0; case 2: return 101 | 0; case 1: return 102 | 0; case 0: return 103 | 0; default: break block; }; } return 104 | 0; } function $14($0) { $0 = $0 | 0; var $1_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0, $8_1 = 0; block : { block6 : { block7 : { block8 : { block9 : { $3_1 = 200; $4_1 = $3_1; $5_1 = $3_1; $6_1 = $3_1; $7_1 = $3_1; $8_1 = $3_1; switch ($0 | 0) { case 0: break block6; case 1: break block7; case 2: break block8; case 3: break block9; default: break block; }; } $1_1 = $8_1; return $1_1 + 10 | 0 | 0; } $1_1 = $7_1; return $1_1 + 11 | 0 | 0; } $1_1 = $6_1; return $1_1 + 12 | 0 | 0; } $1_1 = $5_1; return $1_1 + 13 | 0 | 0; } $1_1 = $4_1; return $1_1 + 14 | 0 | 0; } function $15($0) { $0 = $0 | 0; block : { switch ($0 | 0) { case 0: case 2: case 4: case 6: case 8: case 10: case 12: case 14: case 16: case 18: case 20: case 22: case 24: case 26: case 28: case 30: case 32: case 34: case 36: case 38: case 40: case 42: case 44: case 46: case 48: case 50: case 52: case 54: case 56: case 58: case 60: case 62: case 64: case 66: case 68: case 70: case 72: case 74: case 76: case 78: case 80: case 82: case 84: case 86: case 88: case 90: case 92: case 94: case 96: case 98: case 100: case 102: case 104: case 106: case 108: case 110: case 112: case 114: case 116: case 118: case 120: case 122: case 124: case 126: case 128: case 130: case 132: case 134: case 136: case 138: case 140: case 142: case 144: case 146: case 148: case 150: case 152: case 154: case 156: case 158: case 160: case 162: case 164: case 166: case 168: case 170: case 172: case 174: case 176: case 178: case 180: case 182: case 184: case 186: case 188: case 190: case 192: case 194: case 196: case 198: case 200: case 202: case 204: case 206: case 208: case 210: case 212: case 214: case 216: case 218: case 220: case 222: case 224: case 226: case 228: case 230: case 232: case 234: case 236: case 238: case 240: case 242: case 244: case 246: case 248: case 250: case 252: case 254: case 256: case 258: case 260: case 262: case 264: case 266: case 268: case 270: case 272: case 274: case 276: case 278: case 280: case 282: case 284: case 286: case 288: case 290: case 292: case 294: case 296: case 298: case 300: case 302: case 304: case 306: case 308: case 310: case 312: case 314: case 316: case 318: case 320: case 322: case 324: case 326: case 328: case 330: case 332: case 334: case 336: case 338: case 340: case 342: case 344: case 346: case 348: case 350: case 352: case 354: case 356: case 358: case 360: case 362: case 364: case 366: case 368: case 370: case 372: case 374: case 376: case 378: case 380: case 382: case 384: case 386: case 388: case 390: case 392: case 394: case 396: case 398: case 400: case 402: case 404: case 406: case 408: case 410: case 412: case 414: case 416: case 418: case 420: case 422: case 424: case 426: case 428: case 430: case 432: case 434: case 436: case 438: case 440: case 442: case 444: case 446: case 448: case 450: case 452: case 454: case 456: case 458: case 460: case 462: case 464: case 466: case 468: case 470: case 472: case 474: case 476: case 478: case 480: case 482: case 484: case 486: case 488: case 490: case 492: case 494: case 496: case 498: case 500: case 502: case 504: case 506: case 508: case 510: case 512: case 514: case 516: case 518: case 520: case 522: case 524: case 526: case 528: case 530: case 532: case 534: case 536: case 538: case 540: case 542: case 544: case 546: case 548: case 550: case 552: case 554: case 556: case 558: case 560: case 562: case 564: case 566: case 568: case 570: case 572: case 574: case 576: case 578: case 580: case 582: case 584: case 586: case 588: case 590: case 592: case 594: case 596: case 598: case 600: case 602: case 604: case 606: case 608: case 610: case 612: case 614: case 616: case 618: case 620: case 622: case 624: case 626: case 628: case 630: case 632: case 634: case 636: case 638: case 640: case 642: case 644: case 646: case 648: case 650: case 652: case 654: case 656: case 658: case 660: case 662: case 664: case 666: case 668: case 670: case 672: case 674: case 676: case 678: case 680: case 682: case 684: case 686: case 688: case 690: case 692: case 694: case 696: case 698: case 700: case 702: case 704: case 706: case 708: case 710: case 712: case 714: case 716: case 718: case 720: case 722: case 724: case 726: case 728: case 730: case 732: case 734: case 736: case 738: case 740: case 742: case 744: case 746: case 748: case 750: case 752: case 754: case 756: case 758: case 760: case 762: case 764: case 766: case 768: case 770: case 772: case 774: case 776: case 778: case 780: case 782: case 784: case 786: case 788: case 790: case 792: case 794: case 796: case 798: case 800: case 802: case 804: case 806: case 808: case 810: case 812: case 814: case 816: case 818: case 820: case 822: case 824: case 826: case 828: case 830: case 832: case 834: case 836: case 838: case 840: case 842: case 844: case 846: case 848: case 850: case 852: case 854: case 856: case 858: case 860: case 862: case 864: case 866: case 868: case 870: case 872: case 874: case 876: case 878: case 880: case 882: case 884: case 886: case 888: case 890: case 892: case 894: case 896: case 898: case 900: case 902: case 904: case 906: case 908: case 910: case 912: case 914: case 916: case 918: case 920: case 922: case 924: case 926: case 928: case 930: case 932: case 934: case 936: case 938: case 940: case 942: case 944: case 946: case 948: case 950: case 952: case 954: case 956: case 958: case 960: case 962: case 964: case 966: case 968: case 970: case 972: case 974: case 976: case 978: case 980: case 982: case 984: case 986: case 988: case 990: case 992: case 994: case 996: case 998: case 1e3: case 1002: case 1004: case 1006: case 1008: case 1010: case 1012: case 1014: case 1016: case 1018: case 1020: case 1022: case 1024: case 1026: case 1028: case 1030: case 1032: case 1034: case 1036: case 1038: case 1040: case 1042: case 1044: case 1046: case 1048: case 1050: case 1052: case 1054: case 1056: case 1058: case 1060: case 1062: case 1064: case 1066: case 1068: case 1070: case 1072: case 1074: case 1076: case 1078: case 1080: case 1082: case 1084: case 1086: case 1088: case 1090: case 1092: case 1094: case 1096: case 1098: case 1100: case 1102: case 1104: case 1106: case 1108: case 1110: case 1112: case 1114: case 1116: case 1118: case 1120: case 1122: case 1124: case 1126: case 1128: case 1130: case 1132: case 1134: case 1136: case 1138: case 1140: case 1142: case 1144: case 1146: case 1148: case 1150: case 1152: case 1154: case 1156: case 1158: case 1160: case 1162: case 1164: case 1166: case 1168: case 1170: case 1172: case 1174: case 1176: case 1178: case 1180: case 1182: case 1184: case 1186: case 1188: case 1190: case 1192: case 1194: case 1196: case 1198: case 1200: case 1202: case 1204: case 1206: case 1208: case 1210: case 1212: case 1214: case 1216: case 1218: case 1220: case 1222: case 1224: case 1226: case 1228: case 1230: case 1232: case 1234: case 1236: case 1238: case 1240: case 1242: case 1244: case 1246: case 1248: case 1250: case 1252: case 1254: case 1256: case 1258: case 1260: case 1262: case 1264: case 1266: case 1268: case 1270: case 1272: case 1274: case 1276: case 1278: case 1280: case 1282: case 1284: case 1286: case 1288: case 1290: case 1292: case 1294: case 1296: case 1298: case 1300: case 1302: case 1304: case 1306: case 1308: case 1310: case 1312: case 1314: case 1316: case 1318: case 1320: case 1322: case 1324: case 1326: case 1328: case 1330: case 1332: case 1334: case 1336: case 1338: case 1340: case 1342: case 1344: case 1346: case 1348: case 1350: case 1352: case 1354: case 1356: case 1358: case 1360: case 1362: case 1364: case 1366: case 1368: case 1370: case 1372: case 1374: case 1376: case 1378: case 1380: case 1382: case 1384: case 1386: case 1388: case 1390: case 1392: case 1394: case 1396: case 1398: case 1400: case 1402: case 1404: case 1406: case 1408: case 1410: case 1412: case 1414: case 1416: case 1418: case 1420: case 1422: case 1424: case 1426: case 1428: case 1430: case 1432: case 1434: case 1436: case 1438: case 1440: case 1442: case 1444: case 1446: case 1448: case 1450: case 1452: case 1454: case 1456: case 1458: case 1460: case 1462: case 1464: case 1466: case 1468: case 1470: case 1472: case 1474: case 1476: case 1478: case 1480: case 1482: case 1484: case 1486: case 1488: case 1490: case 1492: case 1494: case 1496: case 1498: case 1500: case 1502: case 1504: case 1506: case 1508: case 1510: case 1512: case 1514: case 1516: case 1518: case 1520: case 1522: case 1524: case 1526: case 1528: case 1530: case 1532: case 1534: case 1536: case 1538: case 1540: case 1542: case 1544: case 1546: case 1548: case 1550: case 1552: case 1554: case 1556: case 1558: case 1560: case 1562: case 1564: case 1566: case 1568: case 1570: case 1572: case 1574: case 1576: case 1578: case 1580: case 1582: case 1584: case 1586: case 1588: case 1590: case 1592: case 1594: case 1596: case 1598: case 1600: case 1602: case 1604: case 1606: case 1608: case 1610: case 1612: case 1614: case 1616: case 1618: case 1620: case 1622: case 1624: case 1626: case 1628: case 1630: case 1632: case 1634: case 1636: case 1638: case 1640: case 1642: case 1644: case 1646: case 1648: case 1650: case 1652: case 1654: case 1656: case 1658: case 1660: case 1662: case 1664: case 1666: case 1668: case 1670: case 1672: case 1674: case 1676: case 1678: case 1680: case 1682: case 1684: case 1686: case 1688: case 1690: case 1692: case 1694: case 1696: case 1698: case 1700: case 1702: case 1704: case 1706: case 1708: case 1710: case 1712: case 1714: case 1716: case 1718: case 1720: case 1722: case 1724: case 1726: case 1728: case 1730: case 1732: case 1734: case 1736: case 1738: case 1740: case 1742: case 1744: case 1746: case 1748: case 1750: case 1752: case 1754: case 1756: case 1758: case 1760: case 1762: case 1764: case 1766: case 1768: case 1770: case 1772: case 1774: case 1776: case 1778: case 1780: case 1782: case 1784: case 1786: case 1788: case 1790: case 1792: case 1794: case 1796: case 1798: case 1800: case 1802: case 1804: case 1806: case 1808: case 1810: case 1812: case 1814: case 1816: case 1818: case 1820: case 1822: case 1824: case 1826: case 1828: case 1830: case 1832: case 1834: case 1836: case 1838: case 1840: case 1842: case 1844: case 1846: case 1848: case 1850: case 1852: case 1854: case 1856: case 1858: case 1860: case 1862: case 1864: case 1866: case 1868: case 1870: case 1872: case 1874: case 1876: case 1878: case 1880: case 1882: case 1884: case 1886: case 1888: case 1890: case 1892: case 1894: case 1896: case 1898: case 1900: case 1902: case 1904: case 1906: case 1908: case 1910: case 1912: case 1914: case 1916: case 1918: case 1920: case 1922: case 1924: case 1926: case 1928: case 1930: case 1932: case 1934: case 1936: case 1938: case 1940: case 1942: case 1944: case 1946: case 1948: case 1950: case 1952: case 1954: case 1956: case 1958: case 1960: case 1962: case 1964: case 1966: case 1968: case 1970: case 1972: case 1974: case 1976: case 1978: case 1980: case 1982: case 1984: case 1986: case 1988: case 1990: case 1992: case 1994: case 1996: case 1998: case 2e3: case 2002: case 2004: case 2006: case 2008: case 2010: case 2012: case 2014: case 2016: case 2018: case 2020: case 2022: case 2024: case 2026: case 2028: case 2030: case 2032: case 2034: case 2036: case 2038: case 2040: case 2042: case 2044: case 2046: case 2048: case 2050: case 2052: case 2054: case 2056: case 2058: case 2060: case 2062: case 2064: case 2066: case 2068: case 2070: case 2072: case 2074: case 2076: case 2078: case 2080: case 2082: case 2084: case 2086: case 2088: case 2090: case 2092: case 2094: case 2096: case 2098: case 2100: case 2102: case 2104: case 2106: case 2108: case 2110: case 2112: case 2114: case 2116: case 2118: case 2120: case 2122: case 2124: case 2126: case 2128: case 2130: case 2132: case 2134: case 2136: case 2138: case 2140: case 2142: case 2144: case 2146: case 2148: case 2150: case 2152: case 2154: case 2156: case 2158: case 2160: case 2162: case 2164: case 2166: case 2168: case 2170: case 2172: case 2174: case 2176: case 2178: case 2180: case 2182: case 2184: case 2186: case 2188: case 2190: case 2192: case 2194: case 2196: case 2198: case 2200: case 2202: case 2204: case 2206: case 2208: case 2210: case 2212: case 2214: case 2216: case 2218: case 2220: case 2222: case 2224: case 2226: case 2228: case 2230: case 2232: case 2234: case 2236: case 2238: case 2240: case 2242: case 2244: case 2246: case 2248: case 2250: case 2252: case 2254: case 2256: case 2258: case 2260: case 2262: case 2264: case 2266: case 2268: case 2270: case 2272: case 2274: case 2276: case 2278: case 2280: case 2282: case 2284: case 2286: case 2288: case 2290: case 2292: case 2294: case 2296: case 2298: case 2300: case 2302: case 2304: case 2306: case 2308: case 2310: case 2312: case 2314: case 2316: case 2318: case 2320: case 2322: case 2324: case 2326: case 2328: case 2330: case 2332: case 2334: case 2336: case 2338: case 2340: case 2342: case 2344: case 2346: case 2348: case 2350: case 2352: case 2354: case 2356: case 2358: case 2360: case 2362: case 2364: case 2366: case 2368: case 2370: case 2372: case 2374: case 2376: case 2378: case 2380: case 2382: case 2384: case 2386: case 2388: case 2390: case 2392: case 2394: case 2396: case 2398: case 2400: case 2402: case 2404: case 2406: case 2408: case 2410: case 2412: case 2414: case 2416: case 2418: case 2420: case 2422: case 2424: case 2426: case 2428: case 2430: case 2432: case 2434: case 2436: case 2438: case 2440: case 2442: case 2444: case 2446: case 2448: case 2450: case 2452: case 2454: case 2456: case 2458: case 2460: case 2462: case 2464: case 2466: case 2468: case 2470: case 2472: case 2474: case 2476: case 2478: case 2480: case 2482: case 2484: case 2486: case 2488: case 2490: case 2492: case 2494: case 2496: case 2498: case 2500: case 2502: case 2504: case 2506: case 2508: case 2510: case 2512: case 2514: case 2516: case 2518: case 2520: case 2522: case 2524: case 2526: case 2528: case 2530: case 2532: case 2534: case 2536: case 2538: case 2540: case 2542: case 2544: case 2546: case 2548: case 2550: case 2552: case 2554: case 2556: case 2558: case 2560: case 2562: case 2564: case 2566: case 2568: case 2570: case 2572: case 2574: case 2576: case 2578: case 2580: case 2582: case 2584: case 2586: case 2588: case 2590: case 2592: case 2594: case 2596: case 2598: case 2600: case 2602: case 2604: case 2606: case 2608: case 2610: case 2612: case 2614: case 2616: case 2618: case 2620: case 2622: case 2624: case 2626: case 2628: case 2630: case 2632: case 2634: case 2636: case 2638: case 2640: case 2642: case 2644: case 2646: case 2648: case 2650: case 2652: case 2654: case 2656: case 2658: case 2660: case 2662: case 2664: case 2666: case 2668: case 2670: case 2672: case 2674: case 2676: case 2678: case 2680: case 2682: case 2684: case 2686: case 2688: case 2690: case 2692: case 2694: case 2696: case 2698: case 2700: case 2702: case 2704: case 2706: case 2708: case 2710: case 2712: case 2714: case 2716: case 2718: case 2720: case 2722: case 2724: case 2726: case 2728: case 2730: case 2732: case 2734: case 2736: case 2738: case 2740: case 2742: case 2744: case 2746: case 2748: case 2750: case 2752: case 2754: case 2756: case 2758: case 2760: case 2762: case 2764: case 2766: case 2768: case 2770: case 2772: case 2774: case 2776: case 2778: case 2780: case 2782: case 2784: case 2786: case 2788: case 2790: case 2792: case 2794: case 2796: case 2798: case 2800: case 2802: case 2804: case 2806: case 2808: case 2810: case 2812: case 2814: case 2816: case 2818: case 2820: case 2822: case 2824: case 2826: case 2828: case 2830: case 2832: case 2834: case 2836: case 2838: case 2840: case 2842: case 2844: case 2846: case 2848: case 2850: case 2852: case 2854: case 2856: case 2858: case 2860: case 2862: case 2864: case 2866: case 2868: case 2870: case 2872: case 2874: case 2876: case 2878: case 2880: case 2882: case 2884: case 2886: case 2888: case 2890: case 2892: case 2894: case 2896: case 2898: case 2900: case 2902: case 2904: case 2906: case 2908: case 2910: case 2912: case 2914: case 2916: case 2918: case 2920: case 2922: case 2924: case 2926: case 2928: case 2930: case 2932: case 2934: case 2936: case 2938: case 2940: case 2942: case 2944: case 2946: case 2948: case 2950: case 2952: case 2954: case 2956: case 2958: case 2960: case 2962: case 2964: case 2966: case 2968: case 2970: case 2972: case 2974: case 2976: case 2978: case 2980: case 2982: case 2984: case 2986: case 2988: case 2990: case 2992: case 2994: case 2996: case 2998: case 3e3: case 3002: case 3004: case 3006: case 3008: case 3010: case 3012: case 3014: case 3016: case 3018: case 3020: case 3022: case 3024: case 3026: case 3028: case 3030: case 3032: case 3034: case 3036: case 3038: case 3040: case 3042: case 3044: case 3046: case 3048: case 3050: case 3052: case 3054: case 3056: case 3058: case 3060: case 3062: case 3064: case 3066: case 3068: case 3070: case 3072: case 3074: case 3076: case 3078: case 3080: case 3082: case 3084: case 3086: case 3088: case 3090: case 3092: case 3094: case 3096: case 3098: case 3100: case 3102: case 3104: case 3106: case 3108: case 3110: case 3112: case 3114: case 3116: case 3118: case 3120: case 3122: case 3124: case 3126: case 3128: case 3130: case 3132: case 3134: case 3136: case 3138: case 3140: case 3142: case 3144: case 3146: case 3148: case 3150: case 3152: case 3154: case 3156: case 3158: case 3160: case 3162: case 3164: case 3166: case 3168: case 3170: case 3172: case 3174: case 3176: case 3178: case 3180: case 3182: case 3184: case 3186: case 3188: case 3190: case 3192: case 3194: case 3196: case 3198: case 3200: case 3202: case 3204: case 3206: case 3208: case 3210: case 3212: case 3214: case 3216: case 3218: case 3220: case 3222: case 3224: case 3226: case 3228: case 3230: case 3232: case 3234: case 3236: case 3238: case 3240: case 3242: case 3244: case 3246: case 3248: case 3250: case 3252: case 3254: case 3256: case 3258: case 3260: case 3262: case 3264: case 3266: case 3268: case 3270: case 3272: case 3274: case 3276: case 3278: case 3280: case 3282: case 3284: case 3286: case 3288: case 3290: case 3292: case 3294: case 3296: case 3298: case 3300: case 3302: case 3304: case 3306: case 3308: case 3310: case 3312: case 3314: case 3316: case 3318: case 3320: case 3322: case 3324: case 3326: case 3328: case 3330: case 3332: case 3334: case 3336: case 3338: case 3340: case 3342: case 3344: case 3346: case 3348: case 3350: case 3352: case 3354: case 3356: case 3358: case 3360: case 3362: case 3364: case 3366: case 3368: case 3370: case 3372: case 3374: case 3376: case 3378: case 3380: case 3382: case 3384: case 3386: case 3388: case 3390: case 3392: case 3394: case 3396: case 3398: case 3400: case 3402: case 3404: case 3406: case 3408: case 3410: case 3412: case 3414: case 3416: case 3418: case 3420: case 3422: case 3424: case 3426: case 3428: case 3430: case 3432: case 3434: case 3436: case 3438: case 3440: case 3442: case 3444: case 3446: case 3448: case 3450: case 3452: case 3454: case 3456: case 3458: case 3460: case 3462: case 3464: case 3466: case 3468: case 3470: case 3472: case 3474: case 3476: case 3478: case 3480: case 3482: case 3484: case 3486: case 3488: case 3490: case 3492: case 3494: case 3496: case 3498: case 3500: case 3502: case 3504: case 3506: case 3508: case 3510: case 3512: case 3514: case 3516: case 3518: case 3520: case 3522: case 3524: case 3526: case 3528: case 3530: case 3532: case 3534: case 3536: case 3538: case 3540: case 3542: case 3544: case 3546: case 3548: case 3550: case 3552: case 3554: case 3556: case 3558: case 3560: case 3562: case 3564: case 3566: case 3568: case 3570: case 3572: case 3574: case 3576: case 3578: case 3580: case 3582: case 3584: case 3586: case 3588: case 3590: case 3592: case 3594: case 3596: case 3598: case 3600: case 3602: case 3604: case 3606: case 3608: case 3610: case 3612: case 3614: case 3616: case 3618: case 3620: case 3622: case 3624: case 3626: case 3628: case 3630: case 3632: case 3634: case 3636: case 3638: case 3640: case 3642: case 3644: case 3646: case 3648: case 3650: case 3652: case 3654: case 3656: case 3658: case 3660: case 3662: case 3664: case 3666: case 3668: case 3670: case 3672: case 3674: case 3676: case 3678: case 3680: case 3682: case 3684: case 3686: case 3688: case 3690: case 3692: case 3694: case 3696: case 3698: case 3700: case 3702: case 3704: case 3706: case 3708: case 3710: case 3712: case 3714: case 3716: case 3718: case 3720: case 3722: case 3724: case 3726: case 3728: case 3730: case 3732: case 3734: case 3736: case 3738: case 3740: case 3742: case 3744: case 3746: case 3748: case 3750: case 3752: case 3754: case 3756: case 3758: case 3760: case 3762: case 3764: case 3766: case 3768: case 3770: case 3772: case 3774: case 3776: case 3778: case 3780: case 3782: case 3784: case 3786: case 3788: case 3790: case 3792: case 3794: case 3796: case 3798: case 3800: case 3802: case 3804: case 3806: case 3808: case 3810: case 3812: case 3814: case 3816: case 3818: case 3820: case 3822: case 3824: case 3826: case 3828: case 3830: case 3832: case 3834: case 3836: case 3838: case 3840: case 3842: case 3844: case 3846: case 3848: case 3850: case 3852: case 3854: case 3856: case 3858: case 3860: case 3862: case 3864: case 3866: case 3868: case 3870: case 3872: case 3874: case 3876: case 3878: case 3880: case 3882: case 3884: case 3886: case 3888: case 3890: case 3892: case 3894: case 3896: case 3898: case 3900: case 3902: case 3904: case 3906: case 3908: case 3910: case 3912: case 3914: case 3916: case 3918: case 3920: case 3922: case 3924: case 3926: case 3928: case 3930: case 3932: case 3934: case 3936: case 3938: case 3940: case 3942: case 3944: case 3946: case 3948: case 3950: case 3952: case 3954: case 3956: case 3958: case 3960: case 3962: case 3964: case 3966: case 3968: case 3970: case 3972: case 3974: case 3976: case 3978: case 3980: case 3982: case 3984: case 3986: case 3988: case 3990: case 3992: case 3994: case 3996: case 3998: case 4e3: case 4002: case 4004: case 4006: case 4008: case 4010: case 4012: case 4014: case 4016: case 4018: case 4020: case 4022: case 4024: case 4026: case 4028: case 4030: case 4032: case 4034: case 4036: case 4038: case 4040: case 4042: case 4044: case 4046: case 4048: case 4050: case 4052: case 4054: case 4056: case 4058: case 4060: case 4062: case 4064: case 4066: case 4068: case 4070: case 4072: case 4074: case 4076: case 4078: case 4080: case 4082: case 4084: case 4086: case 4088: case 4090: case 4092: case 4094: case 4096: case 4098: case 4100: case 4102: case 4104: case 4106: case 4108: case 4110: case 4112: case 4114: case 4116: case 4118: case 4120: case 4122: case 4124: case 4126: case 4128: case 4130: case 4132: case 4134: case 4136: case 4138: case 4140: case 4142: case 4144: case 4146: case 4148: case 4150: case 4152: case 4154: case 4156: case 4158: case 4160: case 4162: case 4164: case 4166: case 4168: case 4170: case 4172: case 4174: case 4176: case 4178: case 4180: case 4182: case 4184: case 4186: case 4188: case 4190: case 4192: case 4194: case 4196: case 4198: case 4200: case 4202: case 4204: case 4206: case 4208: case 4210: case 4212: case 4214: case 4216: case 4218: case 4220: case 4222: case 4224: case 4226: case 4228: case 4230: case 4232: case 4234: case 4236: case 4238: case 4240: case 4242: case 4244: case 4246: case 4248: case 4250: case 4252: case 4254: case 4256: case 4258: case 4260: case 4262: case 4264: case 4266: case 4268: case 4270: case 4272: case 4274: case 4276: case 4278: case 4280: case 4282: case 4284: case 4286: case 4288: case 4290: case 4292: case 4294: case 4296: case 4298: case 4300: case 4302: case 4304: case 4306: case 4308: case 4310: case 4312: case 4314: case 4316: case 4318: case 4320: case 4322: case 4324: case 4326: case 4328: case 4330: case 4332: case 4334: case 4336: case 4338: case 4340: case 4342: case 4344: case 4346: case 4348: case 4350: case 4352: case 4354: case 4356: case 4358: case 4360: case 4362: case 4364: case 4366: case 4368: case 4370: case 4372: case 4374: case 4376: case 4378: case 4380: case 4382: case 4384: case 4386: case 4388: case 4390: case 4392: case 4394: case 4396: case 4398: case 4400: case 4402: case 4404: case 4406: case 4408: case 4410: case 4412: case 4414: case 4416: case 4418: case 4420: case 4422: case 4424: case 4426: case 4428: case 4430: case 4432: case 4434: case 4436: case 4438: case 4440: case 4442: case 4444: case 4446: case 4448: case 4450: case 4452: case 4454: case 4456: case 4458: case 4460: case 4462: case 4464: case 4466: case 4468: case 4470: case 4472: case 4474: case 4476: case 4478: case 4480: case 4482: case 4484: case 4486: case 4488: case 4490: case 4492: case 4494: case 4496: case 4498: case 4500: case 4502: case 4504: case 4506: case 4508: case 4510: case 4512: case 4514: case 4516: case 4518: case 4520: case 4522: case 4524: case 4526: case 4528: case 4530: case 4532: case 4534: case 4536: case 4538: case 4540: case 4542: case 4544: case 4546: case 4548: case 4550: case 4552: case 4554: case 4556: case 4558: case 4560: case 4562: case 4564: case 4566: case 4568: case 4570: case 4572: case 4574: case 4576: case 4578: case 4580: case 4582: case 4584: case 4586: case 4588: case 4590: case 4592: case 4594: case 4596: case 4598: case 4600: case 4602: case 4604: case 4606: case 4608: case 4610: case 4612: case 4614: case 4616: case 4618: case 4620: case 4622: case 4624: case 4626: case 4628: case 4630: case 4632: case 4634: case 4636: case 4638: case 4640: case 4642: case 4644: case 4646: case 4648: case 4650: case 4652: case 4654: case 4656: case 4658: case 4660: case 4662: case 4664: case 4666: case 4668: case 4670: case 4672: case 4674: case 4676: case 4678: case 4680: case 4682: case 4684: case 4686: case 4688: case 4690: case 4692: case 4694: case 4696: case 4698: case 4700: case 4702: case 4704: case 4706: case 4708: case 4710: case 4712: case 4714: case 4716: case 4718: case 4720: case 4722: case 4724: case 4726: case 4728: case 4730: case 4732: case 4734: case 4736: case 4738: case 4740: case 4742: case 4744: case 4746: case 4748: case 4750: case 4752: case 4754: case 4756: case 4758: case 4760: case 4762: case 4764: case 4766: case 4768: case 4770: case 4772: case 4774: case 4776: case 4778: case 4780: case 4782: case 4784: case 4786: case 4788: case 4790: case 4792: case 4794: case 4796: case 4798: case 4800: case 4802: case 4804: case 4806: case 4808: case 4810: case 4812: case 4814: case 4816: case 4818: case 4820: case 4822: case 4824: case 4826: case 4828: case 4830: case 4832: case 4834: case 4836: case 4838: case 4840: case 4842: case 4844: case 4846: case 4848: case 4850: case 4852: case 4854: case 4856: case 4858: case 4860: case 4862: case 4864: case 4866: case 4868: case 4870: case 4872: case 4874: case 4876: case 4878: case 4880: case 4882: case 4884: case 4886: case 4888: case 4890: case 4892: case 4894: case 4896: case 4898: case 4900: case 4902: case 4904: case 4906: case 4908: case 4910: case 4912: case 4914: case 4916: case 4918: case 4920: case 4922: case 4924: case 4926: case 4928: case 4930: case 4932: case 4934: case 4936: case 4938: case 4940: case 4942: case 4944: case 4946: case 4948: case 4950: case 4952: case 4954: case 4956: case 4958: case 4960: case 4962: case 4964: case 4966: case 4968: case 4970: case 4972: case 4974: case 4976: case 4978: case 4980: case 4982: case 4984: case 4986: case 4988: case 4990: case 4992: case 4994: case 4996: case 4998: case 5e3: case 5002: case 5004: case 5006: case 5008: case 5010: case 5012: case 5014: case 5016: case 5018: case 5020: case 5022: case 5024: case 5026: case 5028: case 5030: case 5032: case 5034: case 5036: case 5038: case 5040: case 5042: case 5044: case 5046: case 5048: case 5050: case 5052: case 5054: case 5056: case 5058: case 5060: case 5062: case 5064: case 5066: case 5068: case 5070: case 5072: case 5074: case 5076: case 5078: case 5080: case 5082: case 5084: case 5086: case 5088: case 5090: case 5092: case 5094: case 5096: case 5098: case 5100: case 5102: case 5104: case 5106: case 5108: case 5110: case 5112: case 5114: case 5116: case 5118: case 5120: case 5122: case 5124: case 5126: case 5128: case 5130: case 5132: case 5134: case 5136: case 5138: case 5140: case 5142: case 5144: case 5146: case 5148: case 5150: case 5152: case 5154: case 5156: case 5158: case 5160: case 5162: case 5164: case 5166: case 5168: case 5170: case 5172: case 5174: case 5176: case 5178: case 5180: case 5182: case 5184: case 5186: case 5188: case 5190: case 5192: case 5194: case 5196: case 5198: case 5200: case 5202: case 5204: case 5206: case 5208: case 5210: case 5212: case 5214: case 5216: case 5218: case 5220: case 5222: case 5224: case 5226: case 5228: case 5230: case 5232: case 5234: case 5236: case 5238: case 5240: case 5242: case 5244: case 5246: case 5248: case 5250: case 5252: case 5254: case 5256: case 5258: case 5260: case 5262: case 5264: case 5266: case 5268: case 5270: case 5272: case 5274: case 5276: case 5278: case 5280: case 5282: case 5284: case 5286: case 5288: case 5290: case 5292: case 5294: case 5296: case 5298: case 5300: case 5302: case 5304: case 5306: case 5308: case 5310: case 5312: case 5314: case 5316: case 5318: case 5320: case 5322: case 5324: case 5326: case 5328: case 5330: case 5332: case 5334: case 5336: case 5338: case 5340: case 5342: case 5344: case 5346: case 5348: case 5350: case 5352: case 5354: case 5356: case 5358: case 5360: case 5362: case 5364: case 5366: case 5368: case 5370: case 5372: case 5374: case 5376: case 5378: case 5380: case 5382: case 5384: case 5386: case 5388: case 5390: case 5392: case 5394: case 5396: case 5398: case 5400: case 5402: case 5404: case 5406: case 5408: case 5410: case 5412: case 5414: case 5416: case 5418: case 5420: case 5422: case 5424: case 5426: case 5428: case 5430: case 5432: case 5434: case 5436: case 5438: case 5440: case 5442: case 5444: case 5446: case 5448: case 5450: case 5452: case 5454: case 5456: case 5458: case 5460: case 5462: case 5464: case 5466: case 5468: case 5470: case 5472: case 5474: case 5476: case 5478: case 5480: case 5482: case 5484: case 5486: case 5488: case 5490: case 5492: case 5494: case 5496: case 5498: case 5500: case 5502: case 5504: case 5506: case 5508: case 5510: case 5512: case 5514: case 5516: case 5518: case 5520: case 5522: case 5524: case 5526: case 5528: case 5530: case 5532: case 5534: case 5536: case 5538: case 5540: case 5542: case 5544: case 5546: case 5548: case 5550: case 5552: case 5554: case 5556: case 5558: case 5560: case 5562: case 5564: case 5566: case 5568: case 5570: case 5572: case 5574: case 5576: case 5578: case 5580: case 5582: case 5584: case 5586: case 5588: case 5590: case 5592: case 5594: case 5596: case 5598: case 5600: case 5602: case 5604: case 5606: case 5608: case 5610: case 5612: case 5614: case 5616: case 5618: case 5620: case 5622: case 5624: case 5626: case 5628: case 5630: case 5632: case 5634: case 5636: case 5638: case 5640: case 5642: case 5644: case 5646: case 5648: case 5650: case 5652: case 5654: case 5656: case 5658: case 5660: case 5662: case 5664: case 5666: case 5668: case 5670: case 5672: case 5674: case 5676: case 5678: case 5680: case 5682: case 5684: case 5686: case 5688: case 5690: case 5692: case 5694: case 5696: case 5698: case 5700: case 5702: case 5704: case 5706: case 5708: case 5710: case 5712: case 5714: case 5716: case 5718: case 5720: case 5722: case 5724: case 5726: case 5728: case 5730: case 5732: case 5734: case 5736: case 5738: case 5740: case 5742: case 5744: case 5746: case 5748: case 5750: case 5752: case 5754: case 5756: case 5758: case 5760: case 5762: case 5764: case 5766: case 5768: case 5770: case 5772: case 5774: case 5776: case 5778: case 5780: case 5782: case 5784: case 5786: case 5788: case 5790: case 5792: case 5794: case 5796: case 5798: case 5800: case 5802: case 5804: case 5806: case 5808: case 5810: case 5812: case 5814: case 5816: case 5818: case 5820: case 5822: case 5824: case 5826: case 5828: case 5830: case 5832: case 5834: case 5836: case 5838: case 5840: case 5842: case 5844: case 5846: case 5848: case 5850: case 5852: case 5854: case 5856: case 5858: case 5860: case 5862: case 5864: case 5866: case 5868: case 5870: case 5872: case 5874: case 5876: case 5878: case 5880: case 5882: case 5884: case 5886: case 5888: case 5890: case 5892: case 5894: case 5896: case 5898: case 5900: case 5902: case 5904: case 5906: case 5908: case 5910: case 5912: case 5914: case 5916: case 5918: case 5920: case 5922: case 5924: case 5926: case 5928: case 5930: case 5932: case 5934: case 5936: case 5938: case 5940: case 5942: case 5944: case 5946: case 5948: case 5950: case 5952: case 5954: case 5956: case 5958: case 5960: case 5962: case 5964: case 5966: case 5968: case 5970: case 5972: case 5974: case 5976: case 5978: case 5980: case 5982: case 5984: case 5986: case 5988: case 5990: case 5992: case 5994: case 5996: case 5998: case 6e3: case 6002: case 6004: case 6006: case 6008: case 6010: case 6012: case 6014: case 6016: case 6018: case 6020: case 6022: case 6024: case 6026: case 6028: case 6030: case 6032: case 6034: case 6036: case 6038: case 6040: case 6042: case 6044: case 6046: case 6048: case 6050: case 6052: case 6054: case 6056: case 6058: case 6060: case 6062: case 6064: case 6066: case 6068: case 6070: case 6072: case 6074: case 6076: case 6078: case 6080: case 6082: case 6084: case 6086: case 6088: case 6090: case 6092: case 6094: case 6096: case 6098: case 6100: case 6102: case 6104: case 6106: case 6108: case 6110: case 6112: case 6114: case 6116: case 6118: case 6120: case 6122: case 6124: case 6126: case 6128: case 6130: case 6132: case 6134: case 6136: case 6138: case 6140: case 6142: case 6144: case 6146: case 6148: case 6150: case 6152: case 6154: case 6156: case 6158: case 6160: case 6162: case 6164: case 6166: case 6168: case 6170: case 6172: case 6174: case 6176: case 6178: case 6180: case 6182: case 6184: case 6186: case 6188: case 6190: case 6192: case 6194: case 6196: case 6198: case 6200: case 6202: case 6204: case 6206: case 6208: case 6210: case 6212: case 6214: case 6216: case 6218: case 6220: case 6222: case 6224: case 6226: case 6228: case 6230: case 6232: case 6234: case 6236: case 6238: case 6240: case 6242: case 6244: case 6246: case 6248: case 6250: case 6252: case 6254: case 6256: case 6258: case 6260: case 6262: case 6264: case 6266: case 6268: case 6270: case 6272: case 6274: case 6276: case 6278: case 6280: case 6282: case 6284: case 6286: case 6288: case 6290: case 6292: case 6294: case 6296: case 6298: case 6300: case 6302: case 6304: case 6306: case 6308: case 6310: case 6312: case 6314: case 6316: case 6318: case 6320: case 6322: case 6324: case 6326: case 6328: case 6330: case 6332: case 6334: case 6336: case 6338: case 6340: case 6342: case 6344: case 6346: case 6348: case 6350: case 6352: case 6354: case 6356: case 6358: case 6360: case 6362: case 6364: case 6366: case 6368: case 6370: case 6372: case 6374: case 6376: case 6378: case 6380: case 6382: case 6384: case 6386: case 6388: case 6390: case 6392: case 6394: case 6396: case 6398: case 6400: case 6402: case 6404: case 6406: case 6408: case 6410: case 6412: case 6414: case 6416: case 6418: case 6420: case 6422: case 6424: case 6426: case 6428: case 6430: case 6432: case 6434: case 6436: case 6438: case 6440: case 6442: case 6444: case 6446: case 6448: case 6450: case 6452: case 6454: case 6456: case 6458: case 6460: case 6462: case 6464: case 6466: case 6468: case 6470: case 6472: case 6474: case 6476: case 6478: case 6480: case 6482: case 6484: case 6486: case 6488: case 6490: case 6492: case 6494: case 6496: case 6498: case 6500: case 6502: case 6504: case 6506: case 6508: case 6510: case 6512: case 6514: case 6516: case 6518: case 6520: case 6522: case 6524: case 6526: case 6528: case 6530: case 6532: case 6534: case 6536: case 6538: case 6540: case 6542: case 6544: case 6546: case 6548: case 6550: case 6552: case 6554: case 6556: case 6558: case 6560: case 6562: case 6564: case 6566: case 6568: case 6570: case 6572: case 6574: case 6576: case 6578: case 6580: case 6582: case 6584: case 6586: case 6588: case 6590: case 6592: case 6594: case 6596: case 6598: case 6600: case 6602: case 6604: case 6606: case 6608: case 6610: case 6612: case 6614: case 6616: case 6618: case 6620: case 6622: case 6624: case 6626: case 6628: case 6630: case 6632: case 6634: case 6636: case 6638: case 6640: case 6642: case 6644: case 6646: case 6648: case 6650: case 6652: case 6654: case 6656: case 6658: case 6660: case 6662: case 6664: case 6666: case 6668: case 6670: case 6672: case 6674: case 6676: case 6678: case 6680: case 6682: case 6684: case 6686: case 6688: case 6690: case 6692: case 6694: case 6696: case 6698: case 6700: case 6702: case 6704: case 6706: case 6708: case 6710: case 6712: case 6714: case 6716: case 6718: case 6720: case 6722: case 6724: case 6726: case 6728: case 6730: case 6732: case 6734: case 6736: case 6738: case 6740: case 6742: case 6744: case 6746: case 6748: case 6750: case 6752: case 6754: case 6756: case 6758: case 6760: case 6762: case 6764: case 6766: case 6768: case 6770: case 6772: case 6774: case 6776: case 6778: case 6780: case 6782: case 6784: case 6786: case 6788: case 6790: case 6792: case 6794: case 6796: case 6798: case 6800: case 6802: case 6804: case 6806: case 6808: case 6810: case 6812: case 6814: case 6816: case 6818: case 6820: case 6822: case 6824: case 6826: case 6828: case 6830: case 6832: case 6834: case 6836: case 6838: case 6840: case 6842: case 6844: case 6846: case 6848: case 6850: case 6852: case 6854: case 6856: case 6858: case 6860: case 6862: case 6864: case 6866: case 6868: case 6870: case 6872: case 6874: case 6876: case 6878: case 6880: case 6882: case 6884: case 6886: case 6888: case 6890: case 6892: case 6894: case 6896: case 6898: case 6900: case 6902: case 6904: case 6906: case 6908: case 6910: case 6912: case 6914: case 6916: case 6918: case 6920: case 6922: case 6924: case 6926: case 6928: case 6930: case 6932: case 6934: case 6936: case 6938: case 6940: case 6942: case 6944: case 6946: case 6948: case 6950: case 6952: case 6954: case 6956: case 6958: case 6960: case 6962: case 6964: case 6966: case 6968: case 6970: case 6972: case 6974: case 6976: case 6978: case 6980: case 6982: case 6984: case 6986: case 6988: case 6990: case 6992: case 6994: case 6996: case 6998: case 7e3: case 7002: case 7004: case 7006: case 7008: case 7010: case 7012: case 7014: case 7016: case 7018: case 7020: case 7022: case 7024: case 7026: case 7028: case 7030: case 7032: case 7034: case 7036: case 7038: case 7040: case 7042: case 7044: case 7046: case 7048: case 7050: case 7052: case 7054: case 7056: case 7058: case 7060: case 7062: case 7064: case 7066: case 7068: case 7070: case 7072: case 7074: case 7076: case 7078: case 7080: case 7082: case 7084: case 7086: case 7088: case 7090: case 7092: case 7094: case 7096: case 7098: case 7100: case 7102: case 7104: case 7106: case 7108: case 7110: case 7112: case 7114: case 7116: case 7118: case 7120: case 7122: case 7124: case 7126: case 7128: case 7130: case 7132: case 7134: case 7136: case 7138: case 7140: case 7142: case 7144: case 7146: case 7148: case 7150: case 7152: case 7154: case 7156: case 7158: case 7160: case 7162: case 7164: case 7166: case 7168: case 7170: case 7172: case 7174: case 7176: case 7178: case 7180: case 7182: case 7184: case 7186: case 7188: case 7190: case 7192: case 7194: case 7196: case 7198: case 7200: case 7202: case 7204: case 7206: case 7208: case 7210: case 7212: case 7214: case 7216: case 7218: case 7220: case 7222: case 7224: case 7226: case 7228: case 7230: case 7232: case 7234: case 7236: case 7238: case 7240: case 7242: case 7244: case 7246: case 7248: case 7250: case 7252: case 7254: case 7256: case 7258: case 7260: case 7262: case 7264: case 7266: case 7268: case 7270: case 7272: case 7274: case 7276: case 7278: case 7280: case 7282: case 7284: case 7286: case 7288: case 7290: case 7292: case 7294: case 7296: case 7298: case 7300: case 7302: case 7304: case 7306: case 7308: case 7310: case 7312: case 7314: case 7316: case 7318: case 7320: case 7322: case 7324: case 7326: case 7328: case 7330: case 7332: case 7334: case 7336: case 7338: case 7340: case 7342: case 7344: case 7346: case 7348: case 7350: case 7352: case 7354: case 7356: case 7358: case 7360: case 7362: case 7364: case 7366: case 7368: case 7370: case 7372: case 7374: case 7376: case 7378: case 7380: case 7382: case 7384: case 7386: case 7388: case 7390: case 7392: case 7394: case 7396: case 7398: case 7400: case 7402: case 7404: case 7406: case 7408: case 7410: case 7412: case 7414: case 7416: case 7418: case 7420: case 7422: case 7424: case 7426: case 7428: case 7430: case 7432: case 7434: case 7436: case 7438: case 7440: case 7442: case 7444: case 7446: case 7448: case 7450: case 7452: case 7454: case 7456: case 7458: case 7460: case 7462: case 7464: case 7466: case 7468: case 7470: case 7472: case 7474: case 7476: case 7478: case 7480: case 7482: case 7484: case 7486: case 7488: case 7490: case 7492: case 7494: case 7496: case 7498: case 7500: case 7502: case 7504: case 7506: case 7508: case 7510: case 7512: case 7514: case 7516: case 7518: case 7520: case 7522: case 7524: case 7526: case 7528: case 7530: case 7532: case 7534: case 7536: case 7538: case 7540: case 7542: case 7544: case 7546: case 7548: case 7550: case 7552: case 7554: case 7556: case 7558: case 7560: case 7562: case 7564: case 7566: case 7568: case 7570: case 7572: case 7574: case 7576: case 7578: case 7580: case 7582: case 7584: case 7586: case 7588: case 7590: case 7592: case 7594: case 7596: case 7598: case 7600: case 7602: case 7604: case 7606: case 7608: case 7610: case 7612: case 7614: case 7616: case 7618: case 7620: case 7622: case 7624: case 7626: case 7628: case 7630: case 7632: case 7634: case 7636: case 7638: case 7640: case 7642: case 7644: case 7646: case 7648: case 7650: case 7652: case 7654: case 7656: case 7658: case 7660: case 7662: case 7664: case 7666: case 7668: case 7670: case 7672: case 7674: case 7676: case 7678: case 7680: case 7682: case 7684: case 7686: case 7688: case 7690: case 7692: case 7694: case 7696: case 7698: case 7700: case 7702: case 7704: case 7706: case 7708: case 7710: case 7712: case 7714: case 7716: case 7718: case 7720: case 7722: case 7724: case 7726: case 7728: case 7730: case 7732: case 7734: case 7736: case 7738: case 7740: case 7742: case 7744: case 7746: case 7748: case 7750: case 7752: case 7754: case 7756: case 7758: case 7760: case 7762: case 7764: case 7766: case 7768: case 7770: case 7772: case 7774: case 7776: case 7778: case 7780: case 7782: case 7784: case 7786: case 7788: case 7790: case 7792: case 7794: case 7796: case 7798: case 7800: case 7802: case 7804: case 7806: case 7808: case 7810: case 7812: case 7814: case 7816: case 7818: case 7820: case 7822: case 7824: case 7826: case 7828: case 7830: case 7832: case 7834: case 7836: case 7838: case 7840: case 7842: case 7844: case 7846: case 7848: case 7850: case 7852: case 7854: case 7856: case 7858: case 7860: case 7862: case 7864: case 7866: case 7868: case 7870: case 7872: case 7874: case 7876: case 7878: case 7880: case 7882: case 7884: case 7886: case 7888: case 7890: case 7892: case 7894: case 7896: case 7898: case 7900: case 7902: case 7904: case 7906: case 7908: case 7910: case 7912: case 7914: case 7916: case 7918: case 7920: case 7922: case 7924: case 7926: case 7928: case 7930: case 7932: case 7934: case 7936: case 7938: case 7940: case 7942: case 7944: case 7946: case 7948: case 7950: case 7952: case 7954: case 7956: case 7958: case 7960: case 7962: case 7964: case 7966: case 7968: case 7970: case 7972: case 7974: case 7976: case 7978: case 7980: case 7982: case 7984: case 7986: case 7988: case 7990: case 7992: case 7994: case 7996: case 7998: case 8e3: case 8002: case 8004: case 8006: case 8008: case 8010: case 8012: case 8014: case 8016: case 8018: case 8020: case 8022: case 8024: case 8026: case 8028: case 8030: case 8032: case 8034: case 8036: case 8038: case 8040: case 8042: case 8044: case 8046: case 8048: case 8050: case 8052: case 8054: case 8056: case 8058: case 8060: case 8062: case 8064: case 8066: case 8068: case 8070: case 8072: case 8074: case 8076: case 8078: case 8080: case 8082: case 8084: case 8086: case 8088: case 8090: case 8092: case 8094: case 8096: case 8098: case 8100: case 8102: case 8104: case 8106: case 8108: case 8110: case 8112: case 8114: case 8116: case 8118: case 8120: case 8122: case 8124: case 8126: case 8128: case 8130: case 8132: case 8134: case 8136: case 8138: case 8140: case 8142: case 8144: case 8146: case 8148: case 8150: case 8152: case 8154: case 8156: case 8158: case 8160: case 8162: case 8164: case 8166: case 8168: case 8170: case 8172: case 8174: case 8176: case 8178: case 8180: case 8182: case 8184: case 8186: case 8188: case 8190: case 8192: case 8194: case 8196: case 8198: case 8200: case 8202: case 8204: case 8206: case 8208: case 8210: case 8212: case 8214: case 8216: case 8218: case 8220: case 8222: case 8224: case 8226: case 8228: case 8230: case 8232: case 8234: case 8236: case 8238: case 8240: case 8242: case 8244: case 8246: case 8248: case 8250: case 8252: case 8254: case 8256: case 8258: case 8260: case 8262: case 8264: case 8266: case 8268: case 8270: case 8272: case 8274: case 8276: case 8278: case 8280: case 8282: case 8284: case 8286: case 8288: case 8290: case 8292: case 8294: case 8296: case 8298: case 8300: case 8302: case 8304: case 8306: case 8308: case 8310: case 8312: case 8314: case 8316: case 8318: case 8320: case 8322: case 8324: case 8326: case 8328: case 8330: case 8332: case 8334: case 8336: case 8338: case 8340: case 8342: case 8344: case 8346: case 8348: case 8350: case 8352: case 8354: case 8356: case 8358: case 8360: case 8362: case 8364: case 8366: case 8368: case 8370: case 8372: case 8374: case 8376: case 8378: case 8380: case 8382: case 8384: case 8386: case 8388: case 8390: case 8392: case 8394: case 8396: case 8398: case 8400: case 8402: case 8404: case 8406: case 8408: case 8410: case 8412: case 8414: case 8416: case 8418: case 8420: case 8422: case 8424: case 8426: case 8428: case 8430: case 8432: case 8434: case 8436: case 8438: case 8440: case 8442: case 8444: case 8446: case 8448: case 8450: case 8452: case 8454: case 8456: case 8458: case 8460: case 8462: case 8464: case 8466: case 8468: case 8470: case 8472: case 8474: case 8476: case 8478: case 8480: case 8482: case 8484: case 8486: case 8488: case 8490: case 8492: case 8494: case 8496: case 8498: case 8500: case 8502: case 8504: case 8506: case 8508: case 8510: case 8512: case 8514: case 8516: case 8518: case 8520: case 8522: case 8524: case 8526: case 8528: case 8530: case 8532: case 8534: case 8536: case 8538: case 8540: case 8542: case 8544: case 8546: case 8548: case 8550: case 8552: case 8554: case 8556: case 8558: case 8560: case 8562: case 8564: case 8566: case 8568: case 8570: case 8572: case 8574: case 8576: case 8578: case 8580: case 8582: case 8584: case 8586: case 8588: case 8590: case 8592: case 8594: case 8596: case 8598: case 8600: case 8602: case 8604: case 8606: case 8608: case 8610: case 8612: case 8614: case 8616: case 8618: case 8620: case 8622: case 8624: case 8626: case 8628: case 8630: case 8632: case 8634: case 8636: case 8638: case 8640: case 8642: case 8644: case 8646: case 8648: case 8650: case 8652: case 8654: case 8656: case 8658: case 8660: case 8662: case 8664: case 8666: case 8668: case 8670: case 8672: case 8674: case 8676: case 8678: case 8680: case 8682: case 8684: case 8686: case 8688: case 8690: case 8692: case 8694: case 8696: case 8698: case 8700: case 8702: case 8704: case 8706: case 8708: case 8710: case 8712: case 8714: case 8716: case 8718: case 8720: case 8722: case 8724: case 8726: case 8728: case 8730: case 8732: case 8734: case 8736: case 8738: case 8740: case 8742: case 8744: case 8746: case 8748: case 8750: case 8752: case 8754: case 8756: case 8758: case 8760: case 8762: case 8764: case 8766: case 8768: case 8770: case 8772: case 8774: case 8776: case 8778: case 8780: case 8782: case 8784: case 8786: case 8788: case 8790: case 8792: case 8794: case 8796: case 8798: case 8800: case 8802: case 8804: case 8806: case 8808: case 8810: case 8812: case 8814: case 8816: case 8818: case 8820: case 8822: case 8824: case 8826: case 8828: case 8830: case 8832: case 8834: case 8836: case 8838: case 8840: case 8842: case 8844: case 8846: case 8848: case 8850: case 8852: case 8854: case 8856: case 8858: case 8860: case 8862: case 8864: case 8866: case 8868: case 8870: case 8872: case 8874: case 8876: case 8878: case 8880: case 8882: case 8884: case 8886: case 8888: case 8890: case 8892: case 8894: case 8896: case 8898: case 8900: case 8902: case 8904: case 8906: case 8908: case 8910: case 8912: case 8914: case 8916: case 8918: case 8920: case 8922: case 8924: case 8926: case 8928: case 8930: case 8932: case 8934: case 8936: case 8938: case 8940: case 8942: case 8944: case 8946: case 8948: case 8950: case 8952: case 8954: case 8956: case 8958: case 8960: case 8962: case 8964: case 8966: case 8968: case 8970: case 8972: case 8974: case 8976: case 8978: case 8980: case 8982: case 8984: case 8986: case 8988: case 8990: case 8992: case 8994: case 8996: case 8998: case 9e3: case 9002: case 9004: case 9006: case 9008: case 9010: case 9012: case 9014: case 9016: case 9018: case 9020: case 9022: case 9024: case 9026: case 9028: case 9030: case 9032: case 9034: case 9036: case 9038: case 9040: case 9042: case 9044: case 9046: case 9048: case 9050: case 9052: case 9054: case 9056: case 9058: case 9060: case 9062: case 9064: case 9066: case 9068: case 9070: case 9072: case 9074: case 9076: case 9078: case 9080: case 9082: case 9084: case 9086: case 9088: case 9090: case 9092: case 9094: case 9096: case 9098: case 9100: case 9102: case 9104: case 9106: case 9108: case 9110: case 9112: case 9114: case 9116: case 9118: case 9120: case 9122: case 9124: case 9126: case 9128: case 9130: case 9132: case 9134: case 9136: case 9138: case 9140: case 9142: case 9144: case 9146: case 9148: case 9150: case 9152: case 9154: case 9156: case 9158: case 9160: case 9162: case 9164: case 9166: case 9168: case 9170: case 9172: case 9174: case 9176: case 9178: case 9180: case 9182: case 9184: case 9186: case 9188: case 9190: case 9192: case 9194: case 9196: case 9198: case 9200: case 9202: case 9204: case 9206: case 9208: case 9210: case 9212: case 9214: case 9216: case 9218: case 9220: case 9222: case 9224: case 9226: case 9228: case 9230: case 9232: case 9234: case 9236: case 9238: case 9240: case 9242: case 9244: case 9246: case 9248: case 9250: case 9252: case 9254: case 9256: case 9258: case 9260: case 9262: case 9264: case 9266: case 9268: case 9270: case 9272: case 9274: case 9276: case 9278: case 9280: case 9282: case 9284: case 9286: case 9288: case 9290: case 9292: case 9294: case 9296: case 9298: case 9300: case 9302: case 9304: case 9306: case 9308: case 9310: case 9312: case 9314: case 9316: case 9318: case 9320: case 9322: case 9324: case 9326: case 9328: case 9330: case 9332: case 9334: case 9336: case 9338: case 9340: case 9342: case 9344: case 9346: case 9348: case 9350: case 9352: case 9354: case 9356: case 9358: case 9360: case 9362: case 9364: case 9366: case 9368: case 9370: case 9372: case 9374: case 9376: case 9378: case 9380: case 9382: case 9384: case 9386: case 9388: case 9390: case 9392: case 9394: case 9396: case 9398: case 9400: case 9402: case 9404: case 9406: case 9408: case 9410: case 9412: case 9414: case 9416: case 9418: case 9420: case 9422: case 9424: case 9426: case 9428: case 9430: case 9432: case 9434: case 9436: case 9438: case 9440: case 9442: case 9444: case 9446: case 9448: case 9450: case 9452: case 9454: case 9456: case 9458: case 9460: case 9462: case 9464: case 9466: case 9468: case 9470: case 9472: case 9474: case 9476: case 9478: case 9480: case 9482: case 9484: case 9486: case 9488: case 9490: case 9492: case 9494: case 9496: case 9498: case 9500: case 9502: case 9504: case 9506: case 9508: case 9510: case 9512: case 9514: case 9516: case 9518: case 9520: case 9522: case 9524: case 9526: case 9528: case 9530: case 9532: case 9534: case 9536: case 9538: case 9540: case 9542: case 9544: case 9546: case 9548: case 9550: case 9552: case 9554: case 9556: case 9558: case 9560: case 9562: case 9564: case 9566: case 9568: case 9570: case 9572: case 9574: case 9576: case 9578: case 9580: case 9582: case 9584: case 9586: case 9588: case 9590: case 9592: case 9594: case 9596: case 9598: case 9600: case 9602: case 9604: case 9606: case 9608: case 9610: case 9612: case 9614: case 9616: case 9618: case 9620: case 9622: case 9624: case 9626: case 9628: case 9630: case 9632: case 9634: case 9636: case 9638: case 9640: case 9642: case 9644: case 9646: case 9648: case 9650: case 9652: case 9654: case 9656: case 9658: case 9660: case 9662: case 9664: case 9666: case 9668: case 9670: case 9672: case 9674: case 9676: case 9678: case 9680: case 9682: case 9684: case 9686: case 9688: case 9690: case 9692: case 9694: case 9696: case 9698: case 9700: case 9702: case 9704: case 9706: case 9708: case 9710: case 9712: case 9714: case 9716: case 9718: case 9720: case 9722: case 9724: case 9726: case 9728: case 9730: case 9732: case 9734: case 9736: case 9738: case 9740: case 9742: case 9744: case 9746: case 9748: case 9750: case 9752: case 9754: case 9756: case 9758: case 9760: case 9762: case 9764: case 9766: case 9768: case 9770: case 9772: case 9774: case 9776: case 9778: case 9780: case 9782: case 9784: case 9786: case 9788: case 9790: case 9792: case 9794: case 9796: case 9798: case 9800: case 9802: case 9804: case 9806: case 9808: case 9810: case 9812: case 9814: case 9816: case 9818: case 9820: case 9822: case 9824: case 9826: case 9828: case 9830: case 9832: case 9834: case 9836: case 9838: case 9840: case 9842: case 9844: case 9846: case 9848: case 9850: case 9852: case 9854: case 9856: case 9858: case 9860: case 9862: case 9864: case 9866: case 9868: case 9870: case 9872: case 9874: case 9876: case 9878: case 9880: case 9882: case 9884: case 9886: case 9888: case 9890: case 9892: case 9894: case 9896: case 9898: case 9900: case 9902: case 9904: case 9906: case 9908: case 9910: case 9912: case 9914: case 9916: case 9918: case 9920: case 9922: case 9924: case 9926: case 9928: case 9930: case 9932: case 9934: case 9936: case 9938: case 9940: case 9942: case 9944: case 9946: case 9948: case 9950: case 9952: case 9954: case 9956: case 9958: case 9960: case 9962: case 9964: case 9966: case 9968: case 9970: case 9972: case 9974: case 9976: case 9978: case 9980: case 9982: case 9984: case 9986: case 9988: case 9990: case 9992: case 9994: case 9996: case 9998: case 1e4: case 10002: case 10004: case 10006: case 10008: case 10010: case 10012: case 10014: case 10016: case 10018: case 10020: case 10022: case 10024: case 10026: case 10028: case 10030: case 10032: case 10034: case 10036: case 10038: case 10040: case 10042: case 10044: case 10046: case 10048: case 10050: case 10052: case 10054: case 10056: case 10058: case 10060: case 10062: case 10064: case 10066: case 10068: case 10070: case 10072: case 10074: case 10076: case 10078: case 10080: case 10082: case 10084: case 10086: case 10088: case 10090: case 10092: case 10094: case 10096: case 10098: case 10100: case 10102: case 10104: case 10106: case 10108: case 10110: case 10112: case 10114: case 10116: case 10118: case 10120: case 10122: case 10124: case 10126: case 10128: case 10130: case 10132: case 10134: case 10136: case 10138: case 10140: case 10142: case 10144: case 10146: case 10148: case 10150: case 10152: case 10154: case 10156: case 10158: case 10160: case 10162: case 10164: case 10166: case 10168: case 10170: case 10172: case 10174: case 10176: case 10178: case 10180: case 10182: case 10184: case 10186: case 10188: case 10190: case 10192: case 10194: case 10196: case 10198: case 10200: case 10202: case 10204: case 10206: case 10208: case 10210: case 10212: case 10214: case 10216: case 10218: case 10220: case 10222: case 10224: case 10226: case 10228: case 10230: case 10232: case 10234: case 10236: case 10238: case 10240: case 10242: case 10244: case 10246: case 10248: case 10250: case 10252: case 10254: case 10256: case 10258: case 10260: case 10262: case 10264: case 10266: case 10268: case 10270: case 10272: case 10274: case 10276: case 10278: case 10280: case 10282: case 10284: case 10286: case 10288: case 10290: case 10292: case 10294: case 10296: case 10298: case 10300: case 10302: case 10304: case 10306: case 10308: case 10310: case 10312: case 10314: case 10316: case 10318: case 10320: case 10322: case 10324: case 10326: case 10328: case 10330: case 10332: case 10334: case 10336: case 10338: case 10340: case 10342: case 10344: case 10346: case 10348: case 10350: case 10352: case 10354: case 10356: case 10358: case 10360: case 10362: case 10364: case 10366: case 10368: case 10370: case 10372: case 10374: case 10376: case 10378: case 10380: case 10382: case 10384: case 10386: case 10388: case 10390: case 10392: case 10394: case 10396: case 10398: case 10400: case 10402: case 10404: case 10406: case 10408: case 10410: case 10412: case 10414: case 10416: case 10418: case 10420: case 10422: case 10424: case 10426: case 10428: case 10430: case 10432: case 10434: case 10436: case 10438: case 10440: case 10442: case 10444: case 10446: case 10448: case 10450: case 10452: case 10454: case 10456: case 10458: case 10460: case 10462: case 10464: case 10466: case 10468: case 10470: case 10472: case 10474: case 10476: case 10478: case 10480: case 10482: case 10484: case 10486: case 10488: case 10490: case 10492: case 10494: case 10496: case 10498: case 10500: case 10502: case 10504: case 10506: case 10508: case 10510: case 10512: case 10514: case 10516: case 10518: case 10520: case 10522: case 10524: case 10526: case 10528: case 10530: case 10532: case 10534: case 10536: case 10538: case 10540: case 10542: case 10544: case 10546: case 10548: case 10550: case 10552: case 10554: case 10556: case 10558: case 10560: case 10562: case 10564: case 10566: case 10568: case 10570: case 10572: case 10574: case 10576: case 10578: case 10580: case 10582: case 10584: case 10586: case 10588: case 10590: case 10592: case 10594: case 10596: case 10598: case 10600: case 10602: case 10604: case 10606: case 10608: case 10610: case 10612: case 10614: case 10616: case 10618: case 10620: case 10622: case 10624: case 10626: case 10628: case 10630: case 10632: case 10634: case 10636: case 10638: case 10640: case 10642: case 10644: case 10646: case 10648: case 10650: case 10652: case 10654: case 10656: case 10658: case 10660: case 10662: case 10664: case 10666: case 10668: case 10670: case 10672: case 10674: case 10676: case 10678: case 10680: case 10682: case 10684: case 10686: case 10688: case 10690: case 10692: case 10694: case 10696: case 10698: case 10700: case 10702: case 10704: case 10706: case 10708: case 10710: case 10712: case 10714: case 10716: case 10718: case 10720: case 10722: case 10724: case 10726: case 10728: case 10730: case 10732: case 10734: case 10736: case 10738: case 10740: case 10742: case 10744: case 10746: case 10748: case 10750: case 10752: case 10754: case 10756: case 10758: case 10760: case 10762: case 10764: case 10766: case 10768: case 10770: case 10772: case 10774: case 10776: case 10778: case 10780: case 10782: case 10784: case 10786: case 10788: case 10790: case 10792: case 10794: case 10796: case 10798: case 10800: case 10802: case 10804: case 10806: case 10808: case 10810: case 10812: case 10814: case 10816: case 10818: case 10820: case 10822: case 10824: case 10826: case 10828: case 10830: case 10832: case 10834: case 10836: case 10838: case 10840: case 10842: case 10844: case 10846: case 10848: case 10850: case 10852: case 10854: case 10856: case 10858: case 10860: case 10862: case 10864: case 10866: case 10868: case 10870: case 10872: case 10874: case 10876: case 10878: case 10880: case 10882: case 10884: case 10886: case 10888: case 10890: case 10892: case 10894: case 10896: case 10898: case 10900: case 10902: case 10904: case 10906: case 10908: case 10910: case 10912: case 10914: case 10916: case 10918: case 10920: case 10922: case 10924: case 10926: case 10928: case 10930: case 10932: case 10934: case 10936: case 10938: case 10940: case 10942: case 10944: case 10946: case 10948: case 10950: case 10952: case 10954: case 10956: case 10958: case 10960: case 10962: case 10964: case 10966: case 10968: case 10970: case 10972: case 10974: case 10976: case 10978: case 10980: case 10982: case 10984: case 10986: case 10988: case 10990: case 10992: case 10994: case 10996: case 10998: case 11e3: case 11002: case 11004: case 11006: case 11008: case 11010: case 11012: case 11014: case 11016: case 11018: case 11020: case 11022: case 11024: case 11026: case 11028: case 11030: case 11032: case 11034: case 11036: case 11038: case 11040: case 11042: case 11044: case 11046: case 11048: case 11050: case 11052: case 11054: case 11056: case 11058: case 11060: case 11062: case 11064: case 11066: case 11068: case 11070: case 11072: case 11074: case 11076: case 11078: case 11080: case 11082: case 11084: case 11086: case 11088: case 11090: case 11092: case 11094: case 11096: case 11098: case 11100: case 11102: case 11104: case 11106: case 11108: case 11110: case 11112: case 11114: case 11116: case 11118: case 11120: case 11122: case 11124: case 11126: case 11128: case 11130: case 11132: case 11134: case 11136: case 11138: case 11140: case 11142: case 11144: case 11146: case 11148: case 11150: case 11152: case 11154: case 11156: case 11158: case 11160: case 11162: case 11164: case 11166: case 11168: case 11170: case 11172: case 11174: case 11176: case 11178: case 11180: case 11182: case 11184: case 11186: case 11188: case 11190: case 11192: case 11194: case 11196: case 11198: case 11200: case 11202: case 11204: case 11206: case 11208: case 11210: case 11212: case 11214: case 11216: case 11218: case 11220: case 11222: case 11224: case 11226: case 11228: case 11230: case 11232: case 11234: case 11236: case 11238: case 11240: case 11242: case 11244: case 11246: case 11248: case 11250: case 11252: case 11254: case 11256: case 11258: case 11260: case 11262: case 11264: case 11266: case 11268: case 11270: case 11272: case 11274: case 11276: case 11278: case 11280: case 11282: case 11284: case 11286: case 11288: case 11290: case 11292: case 11294: case 11296: case 11298: case 11300: case 11302: case 11304: case 11306: case 11308: case 11310: case 11312: case 11314: case 11316: case 11318: case 11320: case 11322: case 11324: case 11326: case 11328: case 11330: case 11332: case 11334: case 11336: case 11338: case 11340: case 11342: case 11344: case 11346: case 11348: case 11350: case 11352: case 11354: case 11356: case 11358: case 11360: case 11362: case 11364: case 11366: case 11368: case 11370: case 11372: case 11374: case 11376: case 11378: case 11380: case 11382: case 11384: case 11386: case 11388: case 11390: case 11392: case 11394: case 11396: case 11398: case 11400: case 11402: case 11404: case 11406: case 11408: case 11410: case 11412: case 11414: case 11416: case 11418: case 11420: case 11422: case 11424: case 11426: case 11428: case 11430: case 11432: case 11434: case 11436: case 11438: case 11440: case 11442: case 11444: case 11446: case 11448: case 11450: case 11452: case 11454: case 11456: case 11458: case 11460: case 11462: case 11464: case 11466: case 11468: case 11470: case 11472: case 11474: case 11476: case 11478: case 11480: case 11482: case 11484: case 11486: case 11488: case 11490: case 11492: case 11494: case 11496: case 11498: case 11500: case 11502: case 11504: case 11506: case 11508: case 11510: case 11512: case 11514: case 11516: case 11518: case 11520: case 11522: case 11524: case 11526: case 11528: case 11530: case 11532: case 11534: case 11536: case 11538: case 11540: case 11542: case 11544: case 11546: case 11548: case 11550: case 11552: case 11554: case 11556: case 11558: case 11560: case 11562: case 11564: case 11566: case 11568: case 11570: case 11572: case 11574: case 11576: case 11578: case 11580: case 11582: case 11584: case 11586: case 11588: case 11590: case 11592: case 11594: case 11596: case 11598: case 11600: case 11602: case 11604: case 11606: case 11608: case 11610: case 11612: case 11614: case 11616: case 11618: case 11620: case 11622: case 11624: case 11626: case 11628: case 11630: case 11632: case 11634: case 11636: case 11638: case 11640: case 11642: case 11644: case 11646: case 11648: case 11650: case 11652: case 11654: case 11656: case 11658: case 11660: case 11662: case 11664: case 11666: case 11668: case 11670: case 11672: case 11674: case 11676: case 11678: case 11680: case 11682: case 11684: case 11686: case 11688: case 11690: case 11692: case 11694: case 11696: case 11698: case 11700: case 11702: case 11704: case 11706: case 11708: case 11710: case 11712: case 11714: case 11716: case 11718: case 11720: case 11722: case 11724: case 11726: case 11728: case 11730: case 11732: case 11734: case 11736: case 11738: case 11740: case 11742: case 11744: case 11746: case 11748: case 11750: case 11752: case 11754: case 11756: case 11758: case 11760: case 11762: case 11764: case 11766: case 11768: case 11770: case 11772: case 11774: case 11776: case 11778: case 11780: case 11782: case 11784: case 11786: case 11788: case 11790: case 11792: case 11794: case 11796: case 11798: case 11800: case 11802: case 11804: case 11806: case 11808: case 11810: case 11812: case 11814: case 11816: case 11818: case 11820: case 11822: case 11824: case 11826: case 11828: case 11830: case 11832: case 11834: case 11836: case 11838: case 11840: case 11842: case 11844: case 11846: case 11848: case 11850: case 11852: case 11854: case 11856: case 11858: case 11860: case 11862: case 11864: case 11866: case 11868: case 11870: case 11872: case 11874: case 11876: case 11878: case 11880: case 11882: case 11884: case 11886: case 11888: case 11890: case 11892: case 11894: case 11896: case 11898: case 11900: case 11902: case 11904: case 11906: case 11908: case 11910: case 11912: case 11914: case 11916: case 11918: case 11920: case 11922: case 11924: case 11926: case 11928: case 11930: case 11932: case 11934: case 11936: case 11938: case 11940: case 11942: case 11944: case 11946: case 11948: case 11950: case 11952: case 11954: case 11956: case 11958: case 11960: case 11962: case 11964: case 11966: case 11968: case 11970: case 11972: case 11974: case 11976: case 11978: case 11980: case 11982: case 11984: case 11986: case 11988: case 11990: case 11992: case 11994: case 11996: case 11998: case 12e3: case 12002: case 12004: case 12006: case 12008: case 12010: case 12012: case 12014: case 12016: case 12018: case 12020: case 12022: case 12024: case 12026: case 12028: case 12030: case 12032: case 12034: case 12036: case 12038: case 12040: case 12042: case 12044: case 12046: case 12048: case 12050: case 12052: case 12054: case 12056: case 12058: case 12060: case 12062: case 12064: case 12066: case 12068: case 12070: case 12072: case 12074: case 12076: case 12078: case 12080: case 12082: case 12084: case 12086: case 12088: case 12090: case 12092: case 12094: case 12096: case 12098: case 12100: case 12102: case 12104: case 12106: case 12108: case 12110: case 12112: case 12114: case 12116: case 12118: case 12120: case 12122: case 12124: case 12126: case 12128: case 12130: case 12132: case 12134: case 12136: case 12138: case 12140: case 12142: case 12144: case 12146: case 12148: case 12150: case 12152: case 12154: case 12156: case 12158: case 12160: case 12162: case 12164: case 12166: case 12168: case 12170: case 12172: case 12174: case 12176: case 12178: case 12180: case 12182: case 12184: case 12186: case 12188: case 12190: case 12192: case 12194: case 12196: case 12198: case 12200: case 12202: case 12204: case 12206: case 12208: case 12210: case 12212: case 12214: case 12216: case 12218: case 12220: case 12222: case 12224: case 12226: case 12228: case 12230: case 12232: case 12234: case 12236: case 12238: case 12240: case 12242: case 12244: case 12246: case 12248: case 12250: case 12252: case 12254: case 12256: case 12258: case 12260: case 12262: case 12264: case 12266: case 12268: case 12270: case 12272: case 12274: case 12276: case 12278: case 12280: case 12282: case 12284: case 12286: case 12288: case 12290: case 12292: case 12294: case 12296: case 12298: case 12300: case 12302: case 12304: case 12306: case 12308: case 12310: case 12312: case 12314: case 12316: case 12318: case 12320: case 12322: case 12324: case 12326: case 12328: case 12330: case 12332: case 12334: case 12336: case 12338: case 12340: case 12342: case 12344: case 12346: case 12348: case 12350: case 12352: case 12354: case 12356: case 12358: case 12360: case 12362: case 12364: case 12366: case 12368: case 12370: case 12372: case 12374: case 12376: case 12378: case 12380: case 12382: case 12384: case 12386: case 12388: case 12390: case 12392: case 12394: case 12396: case 12398: case 12400: case 12402: case 12404: case 12406: case 12408: case 12410: case 12412: case 12414: case 12416: case 12418: case 12420: case 12422: case 12424: case 12426: case 12428: case 12430: case 12432: case 12434: case 12436: case 12438: case 12440: case 12442: case 12444: case 12446: case 12448: case 12450: case 12452: case 12454: case 12456: case 12458: case 12460: case 12462: case 12464: case 12466: case 12468: case 12470: case 12472: case 12474: case 12476: case 12478: case 12480: case 12482: case 12484: case 12486: case 12488: case 12490: case 12492: case 12494: case 12496: case 12498: case 12500: case 12502: case 12504: case 12506: case 12508: case 12510: case 12512: case 12514: case 12516: case 12518: case 12520: case 12522: case 12524: case 12526: case 12528: case 12530: case 12532: case 12534: case 12536: case 12538: case 12540: case 12542: case 12544: case 12546: case 12548: case 12550: case 12552: case 12554: case 12556: case 12558: case 12560: case 12562: case 12564: case 12566: case 12568: case 12570: case 12572: case 12574: case 12576: case 12578: case 12580: case 12582: case 12584: case 12586: case 12588: case 12590: case 12592: case 12594: case 12596: case 12598: case 12600: case 12602: case 12604: case 12606: case 12608: case 12610: case 12612: case 12614: case 12616: case 12618: case 12620: case 12622: case 12624: case 12626: case 12628: case 12630: case 12632: case 12634: case 12636: case 12638: case 12640: case 12642: case 12644: case 12646: case 12648: case 12650: case 12652: case 12654: case 12656: case 12658: case 12660: case 12662: case 12664: case 12666: case 12668: case 12670: case 12672: case 12674: case 12676: case 12678: case 12680: case 12682: case 12684: case 12686: case 12688: case 12690: case 12692: case 12694: case 12696: case 12698: case 12700: case 12702: case 12704: case 12706: case 12708: case 12710: case 12712: case 12714: case 12716: case 12718: case 12720: case 12722: case 12724: case 12726: case 12728: case 12730: case 12732: case 12734: case 12736: case 12738: case 12740: case 12742: case 12744: case 12746: case 12748: case 12750: case 12752: case 12754: case 12756: case 12758: case 12760: case 12762: case 12764: case 12766: case 12768: case 12770: case 12772: case 12774: case 12776: case 12778: case 12780: case 12782: case 12784: case 12786: case 12788: case 12790: case 12792: case 12794: case 12796: case 12798: case 12800: case 12802: case 12804: case 12806: case 12808: case 12810: case 12812: case 12814: case 12816: case 12818: case 12820: case 12822: case 12824: case 12826: case 12828: case 12830: case 12832: case 12834: case 12836: case 12838: case 12840: case 12842: case 12844: case 12846: case 12848: case 12850: case 12852: case 12854: case 12856: case 12858: case 12860: case 12862: case 12864: case 12866: case 12868: case 12870: case 12872: case 12874: case 12876: case 12878: case 12880: case 12882: case 12884: case 12886: case 12888: case 12890: case 12892: case 12894: case 12896: case 12898: case 12900: case 12902: case 12904: case 12906: case 12908: case 12910: case 12912: case 12914: case 12916: case 12918: case 12920: case 12922: case 12924: case 12926: case 12928: case 12930: case 12932: case 12934: case 12936: case 12938: case 12940: case 12942: case 12944: case 12946: case 12948: case 12950: case 12952: case 12954: case 12956: case 12958: case 12960: case 12962: case 12964: case 12966: case 12968: case 12970: case 12972: case 12974: case 12976: case 12978: case 12980: case 12982: case 12984: case 12986: case 12988: case 12990: case 12992: case 12994: case 12996: case 12998: case 13e3: case 13002: case 13004: case 13006: case 13008: case 13010: case 13012: case 13014: case 13016: case 13018: case 13020: case 13022: case 13024: case 13026: case 13028: case 13030: case 13032: case 13034: case 13036: case 13038: case 13040: case 13042: case 13044: case 13046: case 13048: case 13050: case 13052: case 13054: case 13056: case 13058: case 13060: case 13062: case 13064: case 13066: case 13068: case 13070: case 13072: case 13074: case 13076: case 13078: case 13080: case 13082: case 13084: case 13086: case 13088: case 13090: case 13092: case 13094: case 13096: case 13098: case 13100: case 13102: case 13104: case 13106: case 13108: case 13110: case 13112: case 13114: case 13116: case 13118: case 13120: case 13122: case 13124: case 13126: case 13128: case 13130: case 13132: case 13134: case 13136: case 13138: case 13140: case 13142: case 13144: case 13146: case 13148: case 13150: case 13152: case 13154: case 13156: case 13158: case 13160: case 13162: case 13164: case 13166: case 13168: case 13170: case 13172: case 13174: case 13176: case 13178: case 13180: case 13182: case 13184: case 13186: case 13188: case 13190: case 13192: case 13194: case 13196: case 13198: case 13200: case 13202: case 13204: case 13206: case 13208: case 13210: case 13212: case 13214: case 13216: case 13218: case 13220: case 13222: case 13224: case 13226: case 13228: case 13230: case 13232: case 13234: case 13236: case 13238: case 13240: case 13242: case 13244: case 13246: case 13248: case 13250: case 13252: case 13254: case 13256: case 13258: case 13260: case 13262: case 13264: case 13266: case 13268: case 13270: case 13272: case 13274: case 13276: case 13278: case 13280: case 13282: case 13284: case 13286: case 13288: case 13290: case 13292: case 13294: case 13296: case 13298: case 13300: case 13302: case 13304: case 13306: case 13308: case 13310: case 13312: case 13314: case 13316: case 13318: case 13320: case 13322: case 13324: case 13326: case 13328: case 13330: case 13332: case 13334: case 13336: case 13338: case 13340: case 13342: case 13344: case 13346: case 13348: case 13350: case 13352: case 13354: case 13356: case 13358: case 13360: case 13362: case 13364: case 13366: case 13368: case 13370: case 13372: case 13374: case 13376: case 13378: case 13380: case 13382: case 13384: case 13386: case 13388: case 13390: case 13392: case 13394: case 13396: case 13398: case 13400: case 13402: case 13404: case 13406: case 13408: case 13410: case 13412: case 13414: case 13416: case 13418: case 13420: case 13422: case 13424: case 13426: case 13428: case 13430: case 13432: case 13434: case 13436: case 13438: case 13440: case 13442: case 13444: case 13446: case 13448: case 13450: case 13452: case 13454: case 13456: case 13458: case 13460: case 13462: case 13464: case 13466: case 13468: case 13470: case 13472: case 13474: case 13476: case 13478: case 13480: case 13482: case 13484: case 13486: case 13488: case 13490: case 13492: case 13494: case 13496: case 13498: case 13500: case 13502: case 13504: case 13506: case 13508: case 13510: case 13512: case 13514: case 13516: case 13518: case 13520: case 13522: case 13524: case 13526: case 13528: case 13530: case 13532: case 13534: case 13536: case 13538: case 13540: case 13542: case 13544: case 13546: case 13548: case 13550: case 13552: case 13554: case 13556: case 13558: case 13560: case 13562: case 13564: case 13566: case 13568: case 13570: case 13572: case 13574: case 13576: case 13578: case 13580: case 13582: case 13584: case 13586: case 13588: case 13590: case 13592: case 13594: case 13596: case 13598: case 13600: case 13602: case 13604: case 13606: case 13608: case 13610: case 13612: case 13614: case 13616: case 13618: case 13620: case 13622: case 13624: case 13626: case 13628: case 13630: case 13632: case 13634: case 13636: case 13638: case 13640: case 13642: case 13644: case 13646: case 13648: case 13650: case 13652: case 13654: case 13656: case 13658: case 13660: case 13662: case 13664: case 13666: case 13668: case 13670: case 13672: case 13674: case 13676: case 13678: case 13680: case 13682: case 13684: case 13686: case 13688: case 13690: case 13692: case 13694: case 13696: case 13698: case 13700: case 13702: case 13704: case 13706: case 13708: case 13710: case 13712: case 13714: case 13716: case 13718: case 13720: case 13722: case 13724: case 13726: case 13728: case 13730: case 13732: case 13734: case 13736: case 13738: case 13740: case 13742: case 13744: case 13746: case 13748: case 13750: case 13752: case 13754: case 13756: case 13758: case 13760: case 13762: case 13764: case 13766: case 13768: case 13770: case 13772: case 13774: case 13776: case 13778: case 13780: case 13782: case 13784: case 13786: case 13788: case 13790: case 13792: case 13794: case 13796: case 13798: case 13800: case 13802: case 13804: case 13806: case 13808: case 13810: case 13812: case 13814: case 13816: case 13818: case 13820: case 13822: case 13824: case 13826: case 13828: case 13830: case 13832: case 13834: case 13836: case 13838: case 13840: case 13842: case 13844: case 13846: case 13848: case 13850: case 13852: case 13854: case 13856: case 13858: case 13860: case 13862: case 13864: case 13866: case 13868: case 13870: case 13872: case 13874: case 13876: case 13878: case 13880: case 13882: case 13884: case 13886: case 13888: case 13890: case 13892: case 13894: case 13896: case 13898: case 13900: case 13902: case 13904: case 13906: case 13908: case 13910: case 13912: case 13914: case 13916: case 13918: case 13920: case 13922: case 13924: case 13926: case 13928: case 13930: case 13932: case 13934: case 13936: case 13938: case 13940: case 13942: case 13944: case 13946: case 13948: case 13950: case 13952: case 13954: case 13956: case 13958: case 13960: case 13962: case 13964: case 13966: case 13968: case 13970: case 13972: case 13974: case 13976: case 13978: case 13980: case 13982: case 13984: case 13986: case 13988: case 13990: case 13992: case 13994: case 13996: case 13998: case 14e3: case 14002: case 14004: case 14006: case 14008: case 14010: case 14012: case 14014: case 14016: case 14018: case 14020: case 14022: case 14024: case 14026: case 14028: case 14030: case 14032: case 14034: case 14036: case 14038: case 14040: case 14042: case 14044: case 14046: case 14048: case 14050: case 14052: case 14054: case 14056: case 14058: case 14060: case 14062: case 14064: case 14066: case 14068: case 14070: case 14072: case 14074: case 14076: case 14078: case 14080: case 14082: case 14084: case 14086: case 14088: case 14090: case 14092: case 14094: case 14096: case 14098: case 14100: case 14102: case 14104: case 14106: case 14108: case 14110: case 14112: case 14114: case 14116: case 14118: case 14120: case 14122: case 14124: case 14126: case 14128: case 14130: case 14132: case 14134: case 14136: case 14138: case 14140: case 14142: case 14144: case 14146: case 14148: case 14150: case 14152: case 14154: case 14156: case 14158: case 14160: case 14162: case 14164: case 14166: case 14168: case 14170: case 14172: case 14174: case 14176: case 14178: case 14180: case 14182: case 14184: case 14186: case 14188: case 14190: case 14192: case 14194: case 14196: case 14198: case 14200: case 14202: case 14204: case 14206: case 14208: case 14210: case 14212: case 14214: case 14216: case 14218: case 14220: case 14222: case 14224: case 14226: case 14228: case 14230: case 14232: case 14234: case 14236: case 14238: case 14240: case 14242: case 14244: case 14246: case 14248: case 14250: case 14252: case 14254: case 14256: case 14258: case 14260: case 14262: case 14264: case 14266: case 14268: case 14270: case 14272: case 14274: case 14276: case 14278: case 14280: case 14282: case 14284: case 14286: case 14288: case 14290: case 14292: case 14294: case 14296: case 14298: case 14300: case 14302: case 14304: case 14306: case 14308: case 14310: case 14312: case 14314: case 14316: case 14318: case 14320: case 14322: case 14324: case 14326: case 14328: case 14330: case 14332: case 14334: case 14336: case 14338: case 14340: case 14342: case 14344: case 14346: case 14348: case 14350: case 14352: case 14354: case 14356: case 14358: case 14360: case 14362: case 14364: case 14366: case 14368: case 14370: case 14372: case 14374: case 14376: case 14378: case 14380: case 14382: case 14384: case 14386: case 14388: case 14390: case 14392: case 14394: case 14396: case 14398: case 14400: case 14402: case 14404: case 14406: case 14408: case 14410: case 14412: case 14414: case 14416: case 14418: case 14420: case 14422: case 14424: case 14426: case 14428: case 14430: case 14432: case 14434: case 14436: case 14438: case 14440: case 14442: case 14444: case 14446: case 14448: case 14450: case 14452: case 14454: case 14456: case 14458: case 14460: case 14462: case 14464: case 14466: case 14468: case 14470: case 14472: case 14474: case 14476: case 14478: case 14480: case 14482: case 14484: case 14486: case 14488: case 14490: case 14492: case 14494: case 14496: case 14498: case 14500: case 14502: case 14504: case 14506: case 14508: case 14510: case 14512: case 14514: case 14516: case 14518: case 14520: case 14522: case 14524: case 14526: case 14528: case 14530: case 14532: case 14534: case 14536: case 14538: case 14540: case 14542: case 14544: case 14546: case 14548: case 14550: case 14552: case 14554: case 14556: case 14558: case 14560: case 14562: case 14564: case 14566: case 14568: case 14570: case 14572: case 14574: case 14576: case 14578: case 14580: case 14582: case 14584: case 14586: case 14588: case 14590: case 14592: case 14594: case 14596: case 14598: case 14600: case 14602: case 14604: case 14606: case 14608: case 14610: case 14612: case 14614: case 14616: case 14618: case 14620: case 14622: case 14624: case 14626: case 14628: case 14630: case 14632: case 14634: case 14636: case 14638: case 14640: case 14642: case 14644: case 14646: case 14648: case 14650: case 14652: case 14654: case 14656: case 14658: case 14660: case 14662: case 14664: case 14666: case 14668: case 14670: case 14672: case 14674: case 14676: case 14678: case 14680: case 14682: case 14684: case 14686: case 14688: case 14690: case 14692: case 14694: case 14696: case 14698: case 14700: case 14702: case 14704: case 14706: case 14708: case 14710: case 14712: case 14714: case 14716: case 14718: case 14720: case 14722: case 14724: case 14726: case 14728: case 14730: case 14732: case 14734: case 14736: case 14738: case 14740: case 14742: case 14744: case 14746: case 14748: case 14750: case 14752: case 14754: case 14756: case 14758: case 14760: case 14762: case 14764: case 14766: case 14768: case 14770: case 14772: case 14774: case 14776: case 14778: case 14780: case 14782: case 14784: case 14786: case 14788: case 14790: case 14792: case 14794: case 14796: case 14798: case 14800: case 14802: case 14804: case 14806: case 14808: case 14810: case 14812: case 14814: case 14816: case 14818: case 14820: case 14822: case 14824: case 14826: case 14828: case 14830: case 14832: case 14834: case 14836: case 14838: case 14840: case 14842: case 14844: case 14846: case 14848: case 14850: case 14852: case 14854: case 14856: case 14858: case 14860: case 14862: case 14864: case 14866: case 14868: case 14870: case 14872: case 14874: case 14876: case 14878: case 14880: case 14882: case 14884: case 14886: case 14888: case 14890: case 14892: case 14894: case 14896: case 14898: case 14900: case 14902: case 14904: case 14906: case 14908: case 14910: case 14912: case 14914: case 14916: case 14918: case 14920: case 14922: case 14924: case 14926: case 14928: case 14930: case 14932: case 14934: case 14936: case 14938: case 14940: case 14942: case 14944: case 14946: case 14948: case 14950: case 14952: case 14954: case 14956: case 14958: case 14960: case 14962: case 14964: case 14966: case 14968: case 14970: case 14972: case 14974: case 14976: case 14978: case 14980: case 14982: case 14984: case 14986: case 14988: case 14990: case 14992: case 14994: case 14996: case 14998: case 15e3: case 15002: case 15004: case 15006: case 15008: case 15010: case 15012: case 15014: case 15016: case 15018: case 15020: case 15022: case 15024: case 15026: case 15028: case 15030: case 15032: case 15034: case 15036: case 15038: case 15040: case 15042: case 15044: case 15046: case 15048: case 15050: case 15052: case 15054: case 15056: case 15058: case 15060: case 15062: case 15064: case 15066: case 15068: case 15070: case 15072: case 15074: case 15076: case 15078: case 15080: case 15082: case 15084: case 15086: case 15088: case 15090: case 15092: case 15094: case 15096: case 15098: case 15100: case 15102: case 15104: case 15106: case 15108: case 15110: case 15112: case 15114: case 15116: case 15118: case 15120: case 15122: case 15124: case 15126: case 15128: case 15130: case 15132: case 15134: case 15136: case 15138: case 15140: case 15142: case 15144: case 15146: case 15148: case 15150: case 15152: case 15154: case 15156: case 15158: case 15160: case 15162: case 15164: case 15166: case 15168: case 15170: case 15172: case 15174: case 15176: case 15178: case 15180: case 15182: case 15184: case 15186: case 15188: case 15190: case 15192: case 15194: case 15196: case 15198: case 15200: case 15202: case 15204: case 15206: case 15208: case 15210: case 15212: case 15214: case 15216: case 15218: case 15220: case 15222: case 15224: case 15226: case 15228: case 15230: case 15232: case 15234: case 15236: case 15238: case 15240: case 15242: case 15244: case 15246: case 15248: case 15250: case 15252: case 15254: case 15256: case 15258: case 15260: case 15262: case 15264: case 15266: case 15268: case 15270: case 15272: case 15274: case 15276: case 15278: case 15280: case 15282: case 15284: case 15286: case 15288: case 15290: case 15292: case 15294: case 15296: case 15298: case 15300: case 15302: case 15304: case 15306: case 15308: case 15310: case 15312: case 15314: case 15316: case 15318: case 15320: case 15322: case 15324: case 15326: case 15328: case 15330: case 15332: case 15334: case 15336: case 15338: case 15340: case 15342: case 15344: case 15346: case 15348: case 15350: case 15352: case 15354: case 15356: case 15358: case 15360: case 15362: case 15364: case 15366: case 15368: case 15370: case 15372: case 15374: case 15376: case 15378: case 15380: case 15382: case 15384: case 15386: case 15388: case 15390: case 15392: case 15394: case 15396: case 15398: case 15400: case 15402: case 15404: case 15406: case 15408: case 15410: case 15412: case 15414: case 15416: case 15418: case 15420: case 15422: case 15424: case 15426: case 15428: case 15430: case 15432: case 15434: case 15436: case 15438: case 15440: case 15442: case 15444: case 15446: case 15448: case 15450: case 15452: case 15454: case 15456: case 15458: case 15460: case 15462: case 15464: case 15466: case 15468: case 15470: case 15472: case 15474: case 15476: case 15478: case 15480: case 15482: case 15484: case 15486: case 15488: case 15490: case 15492: case 15494: case 15496: case 15498: case 15500: case 15502: case 15504: case 15506: case 15508: case 15510: case 15512: case 15514: case 15516: case 15518: case 15520: case 15522: case 15524: case 15526: case 15528: case 15530: case 15532: case 15534: case 15536: case 15538: case 15540: case 15542: case 15544: case 15546: case 15548: case 15550: case 15552: case 15554: case 15556: case 15558: case 15560: case 15562: case 15564: case 15566: case 15568: case 15570: case 15572: case 15574: case 15576: case 15578: case 15580: case 15582: case 15584: case 15586: case 15588: case 15590: case 15592: case 15594: case 15596: case 15598: case 15600: case 15602: case 15604: case 15606: case 15608: case 15610: case 15612: case 15614: case 15616: case 15618: case 15620: case 15622: case 15624: case 15626: case 15628: case 15630: case 15632: case 15634: case 15636: case 15638: case 15640: case 15642: case 15644: case 15646: case 15648: case 15650: case 15652: case 15654: case 15656: case 15658: case 15660: case 15662: case 15664: case 15666: case 15668: case 15670: case 15672: case 15674: case 15676: case 15678: case 15680: case 15682: case 15684: case 15686: case 15688: case 15690: case 15692: case 15694: case 15696: case 15698: case 15700: case 15702: case 15704: case 15706: case 15708: case 15710: case 15712: case 15714: case 15716: case 15718: case 15720: case 15722: case 15724: case 15726: case 15728: case 15730: case 15732: case 15734: case 15736: case 15738: case 15740: case 15742: case 15744: case 15746: case 15748: case 15750: case 15752: case 15754: case 15756: case 15758: case 15760: case 15762: case 15764: case 15766: case 15768: case 15770: case 15772: case 15774: case 15776: case 15778: case 15780: case 15782: case 15784: case 15786: case 15788: case 15790: case 15792: case 15794: case 15796: case 15798: case 15800: case 15802: case 15804: case 15806: case 15808: case 15810: case 15812: case 15814: case 15816: case 15818: case 15820: case 15822: case 15824: case 15826: case 15828: case 15830: case 15832: case 15834: case 15836: case 15838: case 15840: case 15842: case 15844: case 15846: case 15848: case 15850: case 15852: case 15854: case 15856: case 15858: case 15860: case 15862: case 15864: case 15866: case 15868: case 15870: case 15872: case 15874: case 15876: case 15878: case 15880: case 15882: case 15884: case 15886: case 15888: case 15890: case 15892: case 15894: case 15896: case 15898: case 15900: case 15902: case 15904: case 15906: case 15908: case 15910: case 15912: case 15914: case 15916: case 15918: case 15920: case 15922: case 15924: case 15926: case 15928: case 15930: case 15932: case 15934: case 15936: case 15938: case 15940: case 15942: case 15944: case 15946: case 15948: case 15950: case 15952: case 15954: case 15956: case 15958: case 15960: case 15962: case 15964: case 15966: case 15968: case 15970: case 15972: case 15974: case 15976: case 15978: case 15980: case 15982: case 15984: case 15986: case 15988: case 15990: case 15992: case 15994: case 15996: case 15998: case 16e3: case 16002: case 16004: case 16006: case 16008: case 16010: case 16012: case 16014: case 16016: case 16018: case 16020: case 16022: case 16024: case 16026: case 16028: case 16030: case 16032: case 16034: case 16036: case 16038: case 16040: case 16042: case 16044: case 16046: case 16048: case 16050: case 16052: case 16054: case 16056: case 16058: case 16060: case 16062: case 16064: case 16066: case 16068: case 16070: case 16072: case 16074: case 16076: case 16078: case 16080: case 16082: case 16084: case 16086: case 16088: case 16090: case 16092: case 16094: case 16096: case 16098: case 16100: case 16102: case 16104: case 16106: case 16108: case 16110: case 16112: case 16114: case 16116: case 16118: case 16120: case 16122: case 16124: case 16126: case 16128: case 16130: case 16132: case 16134: case 16136: case 16138: case 16140: case 16142: case 16144: case 16146: case 16148: case 16150: case 16152: case 16154: case 16156: case 16158: case 16160: case 16162: case 16164: case 16166: case 16168: case 16170: case 16172: case 16174: case 16176: case 16178: case 16180: case 16182: case 16184: case 16186: case 16188: case 16190: case 16192: case 16194: case 16196: case 16198: case 16200: case 16202: case 16204: case 16206: case 16208: case 16210: case 16212: case 16214: case 16216: case 16218: case 16220: case 16222: case 16224: case 16226: case 16228: case 16230: case 16232: case 16234: case 16236: case 16238: case 16240: case 16242: case 16244: case 16246: case 16248: case 16250: case 16252: case 16254: case 16256: case 16258: case 16260: case 16262: case 16264: case 16266: case 16268: case 16270: case 16272: case 16274: case 16276: case 16278: case 16280: case 16282: case 16284: case 16286: case 16288: case 16290: case 16292: case 16294: case 16296: case 16298: case 16300: case 16302: case 16304: case 16306: case 16308: case 16310: case 16312: case 16314: case 16316: case 16318: case 16320: case 16322: case 16324: case 16326: case 16328: case 16330: case 16332: case 16334: case 16336: case 16338: case 16340: case 16342: case 16344: case 16346: case 16348: case 16350: case 16352: case 16354: case 16356: case 16358: case 16360: case 16362: case 16364: case 16366: case 16368: case 16370: case 16372: case 16374: case 16376: case 16378: case 16380: case 16382: case 16384: case 16386: case 16388: case 16390: case 16392: case 16394: case 16396: case 16398: case 16400: case 16402: case 16404: case 16406: case 16408: case 16410: case 16412: case 16414: case 16416: case 16418: case 16420: case 16422: case 16424: case 16426: case 16428: case 16430: case 16432: case 16434: case 16436: case 16438: case 16440: case 16442: case 16444: case 16446: case 16448: case 16450: case 16452: case 16454: case 16456: case 16458: case 16460: case 16462: case 16464: case 16466: case 16468: case 16470: case 16472: case 16474: case 16476: case 16478: case 16480: case 16482: case 16484: case 16486: case 16488: case 16490: case 16492: case 16494: case 16496: case 16498: case 16500: case 16502: case 16504: case 16506: case 16508: case 16510: case 16512: case 16514: case 16516: case 16518: case 16520: case 16522: case 16524: case 16526: case 16528: case 16530: case 16532: case 16534: case 16536: case 16538: case 16540: case 16542: case 16544: case 16546: case 16548: case 16550: case 16552: case 16554: case 16556: case 16558: case 16560: case 16562: case 16564: case 16566: case 16568: case 16570: case 16572: case 16574: case 16576: case 16578: case 16580: case 16582: case 16584: case 16586: case 16588: case 16590: case 16592: case 16594: case 16596: case 16598: case 16600: case 16602: case 16604: case 16606: case 16608: case 16610: case 16612: case 16614: case 16616: case 16618: case 16620: case 16622: case 16624: case 16626: case 16628: case 16630: case 16632: case 16634: case 16636: case 16638: case 16640: case 16642: case 16644: case 16646: case 16648: case 16650: case 16652: case 16654: case 16656: case 16658: case 16660: case 16662: case 16664: case 16666: case 16668: case 16670: case 16672: case 16674: case 16676: case 16678: case 16680: case 16682: case 16684: case 16686: case 16688: case 16690: case 16692: case 16694: case 16696: case 16698: case 16700: case 16702: case 16704: case 16706: case 16708: case 16710: case 16712: case 16714: case 16716: case 16718: case 16720: case 16722: case 16724: case 16726: case 16728: case 16730: case 16732: case 16734: case 16736: case 16738: case 16740: case 16742: case 16744: case 16746: case 16748: case 16750: case 16752: case 16754: case 16756: case 16758: case 16760: case 16762: case 16764: case 16766: case 16768: case 16770: case 16772: case 16774: case 16776: case 16778: case 16780: case 16782: case 16784: case 16786: case 16788: case 16790: case 16792: case 16794: case 16796: case 16798: case 16800: case 16802: case 16804: case 16806: case 16808: case 16810: case 16812: case 16814: case 16816: case 16818: case 16820: case 16822: case 16824: case 16826: case 16828: case 16830: case 16832: case 16834: case 16836: case 16838: case 16840: case 16842: case 16844: case 16846: case 16848: case 16850: case 16852: case 16854: case 16856: case 16858: case 16860: case 16862: case 16864: case 16866: case 16868: case 16870: case 16872: case 16874: case 16876: case 16878: case 16880: case 16882: case 16884: case 16886: case 16888: case 16890: case 16892: case 16894: case 16896: case 16898: case 16900: case 16902: case 16904: case 16906: case 16908: case 16910: case 16912: case 16914: case 16916: case 16918: case 16920: case 16922: case 16924: case 16926: case 16928: case 16930: case 16932: case 16934: case 16936: case 16938: case 16940: case 16942: case 16944: case 16946: case 16948: case 16950: case 16952: case 16954: case 16956: case 16958: case 16960: case 16962: case 16964: case 16966: case 16968: case 16970: case 16972: case 16974: case 16976: case 16978: case 16980: case 16982: case 16984: case 16986: case 16988: case 16990: case 16992: case 16994: case 16996: case 16998: case 17e3: case 17002: case 17004: case 17006: case 17008: case 17010: case 17012: case 17014: case 17016: case 17018: case 17020: case 17022: case 17024: case 17026: case 17028: case 17030: case 17032: case 17034: case 17036: case 17038: case 17040: case 17042: case 17044: case 17046: case 17048: case 17050: case 17052: case 17054: case 17056: case 17058: case 17060: case 17062: case 17064: case 17066: case 17068: case 17070: case 17072: case 17074: case 17076: case 17078: case 17080: case 17082: case 17084: case 17086: case 17088: case 17090: case 17092: case 17094: case 17096: case 17098: case 17100: case 17102: case 17104: case 17106: case 17108: case 17110: case 17112: case 17114: case 17116: case 17118: case 17120: case 17122: case 17124: case 17126: case 17128: case 17130: case 17132: case 17134: case 17136: case 17138: case 17140: case 17142: case 17144: case 17146: case 17148: case 17150: case 17152: case 17154: case 17156: case 17158: case 17160: case 17162: case 17164: case 17166: case 17168: case 17170: case 17172: case 17174: case 17176: case 17178: case 17180: case 17182: case 17184: case 17186: case 17188: case 17190: case 17192: case 17194: case 17196: case 17198: case 17200: case 17202: case 17204: case 17206: case 17208: case 17210: case 17212: case 17214: case 17216: case 17218: case 17220: case 17222: case 17224: case 17226: case 17228: case 17230: case 17232: case 17234: case 17236: case 17238: case 17240: case 17242: case 17244: case 17246: case 17248: case 17250: case 17252: case 17254: case 17256: case 17258: case 17260: case 17262: case 17264: case 17266: case 17268: case 17270: case 17272: case 17274: case 17276: case 17278: case 17280: case 17282: case 17284: case 17286: case 17288: case 17290: case 17292: case 17294: case 17296: case 17298: case 17300: case 17302: case 17304: case 17306: case 17308: case 17310: case 17312: case 17314: case 17316: case 17318: case 17320: case 17322: case 17324: case 17326: case 17328: case 17330: case 17332: case 17334: case 17336: case 17338: case 17340: case 17342: case 17344: case 17346: case 17348: case 17350: case 17352: case 17354: case 17356: case 17358: case 17360: case 17362: case 17364: case 17366: case 17368: case 17370: case 17372: case 17374: case 17376: case 17378: case 17380: case 17382: case 17384: case 17386: case 17388: case 17390: case 17392: case 17394: case 17396: case 17398: case 17400: case 17402: case 17404: case 17406: case 17408: case 17410: case 17412: case 17414: case 17416: case 17418: case 17420: case 17422: case 17424: case 17426: case 17428: case 17430: case 17432: case 17434: case 17436: case 17438: case 17440: case 17442: case 17444: case 17446: case 17448: case 17450: case 17452: case 17454: case 17456: case 17458: case 17460: case 17462: case 17464: case 17466: case 17468: case 17470: case 17472: case 17474: case 17476: case 17478: case 17480: case 17482: case 17484: case 17486: case 17488: case 17490: case 17492: case 17494: case 17496: case 17498: case 17500: case 17502: case 17504: case 17506: case 17508: case 17510: case 17512: case 17514: case 17516: case 17518: case 17520: case 17522: case 17524: case 17526: case 17528: case 17530: case 17532: case 17534: case 17536: case 17538: case 17540: case 17542: case 17544: case 17546: case 17548: case 17550: case 17552: case 17554: case 17556: case 17558: case 17560: case 17562: case 17564: case 17566: case 17568: case 17570: case 17572: case 17574: case 17576: case 17578: case 17580: case 17582: case 17584: case 17586: case 17588: case 17590: case 17592: case 17594: case 17596: case 17598: case 17600: case 17602: case 17604: case 17606: case 17608: case 17610: case 17612: case 17614: case 17616: case 17618: case 17620: case 17622: case 17624: case 17626: case 17628: case 17630: case 17632: case 17634: case 17636: case 17638: case 17640: case 17642: case 17644: case 17646: case 17648: case 17650: case 17652: case 17654: case 17656: case 17658: case 17660: case 17662: case 17664: case 17666: case 17668: case 17670: case 17672: case 17674: case 17676: case 17678: case 17680: case 17682: case 17684: case 17686: case 17688: case 17690: case 17692: case 17694: case 17696: case 17698: case 17700: case 17702: case 17704: case 17706: case 17708: case 17710: case 17712: case 17714: case 17716: case 17718: case 17720: case 17722: case 17724: case 17726: case 17728: case 17730: case 17732: case 17734: case 17736: case 17738: case 17740: case 17742: case 17744: case 17746: case 17748: case 17750: case 17752: case 17754: case 17756: case 17758: case 17760: case 17762: case 17764: case 17766: case 17768: case 17770: case 17772: case 17774: case 17776: case 17778: case 17780: case 17782: case 17784: case 17786: case 17788: case 17790: case 17792: case 17794: case 17796: case 17798: case 17800: case 17802: case 17804: case 17806: case 17808: case 17810: case 17812: case 17814: case 17816: case 17818: case 17820: case 17822: case 17824: case 17826: case 17828: case 17830: case 17832: case 17834: case 17836: case 17838: case 17840: case 17842: case 17844: case 17846: case 17848: case 17850: case 17852: case 17854: case 17856: case 17858: case 17860: case 17862: case 17864: case 17866: case 17868: case 17870: case 17872: case 17874: case 17876: case 17878: case 17880: case 17882: case 17884: case 17886: case 17888: case 17890: case 17892: case 17894: case 17896: case 17898: case 17900: case 17902: case 17904: case 17906: case 17908: case 17910: case 17912: case 17914: case 17916: case 17918: case 17920: case 17922: case 17924: case 17926: case 17928: case 17930: case 17932: case 17934: case 17936: case 17938: case 17940: case 17942: case 17944: case 17946: case 17948: case 17950: case 17952: case 17954: case 17956: case 17958: case 17960: case 17962: case 17964: case 17966: case 17968: case 17970: case 17972: case 17974: case 17976: case 17978: case 17980: case 17982: case 17984: case 17986: case 17988: case 17990: case 17992: case 17994: case 17996: case 17998: case 18e3: case 18002: case 18004: case 18006: case 18008: case 18010: case 18012: case 18014: case 18016: case 18018: case 18020: case 18022: case 18024: case 18026: case 18028: case 18030: case 18032: case 18034: case 18036: case 18038: case 18040: case 18042: case 18044: case 18046: case 18048: case 18050: case 18052: case 18054: case 18056: case 18058: case 18060: case 18062: case 18064: case 18066: case 18068: case 18070: case 18072: case 18074: case 18076: case 18078: case 18080: case 18082: case 18084: case 18086: case 18088: case 18090: case 18092: case 18094: case 18096: case 18098: case 18100: case 18102: case 18104: case 18106: case 18108: case 18110: case 18112: case 18114: case 18116: case 18118: case 18120: case 18122: case 18124: case 18126: case 18128: case 18130: case 18132: case 18134: case 18136: case 18138: case 18140: case 18142: case 18144: case 18146: case 18148: case 18150: case 18152: case 18154: case 18156: case 18158: case 18160: case 18162: case 18164: case 18166: case 18168: case 18170: case 18172: case 18174: case 18176: case 18178: case 18180: case 18182: case 18184: case 18186: case 18188: case 18190: case 18192: case 18194: case 18196: case 18198: case 18200: case 18202: case 18204: case 18206: case 18208: case 18210: case 18212: case 18214: case 18216: case 18218: case 18220: case 18222: case 18224: case 18226: case 18228: case 18230: case 18232: case 18234: case 18236: case 18238: case 18240: case 18242: case 18244: case 18246: case 18248: case 18250: case 18252: case 18254: case 18256: case 18258: case 18260: case 18262: case 18264: case 18266: case 18268: case 18270: case 18272: case 18274: case 18276: case 18278: case 18280: case 18282: case 18284: case 18286: case 18288: case 18290: case 18292: case 18294: case 18296: case 18298: case 18300: case 18302: case 18304: case 18306: case 18308: case 18310: case 18312: case 18314: case 18316: case 18318: case 18320: case 18322: case 18324: case 18326: case 18328: case 18330: case 18332: case 18334: case 18336: case 18338: case 18340: case 18342: case 18344: case 18346: case 18348: case 18350: case 18352: case 18354: case 18356: case 18358: case 18360: case 18362: case 18364: case 18366: case 18368: case 18370: case 18372: case 18374: case 18376: case 18378: case 18380: case 18382: case 18384: case 18386: case 18388: case 18390: case 18392: case 18394: case 18396: case 18398: case 18400: case 18402: case 18404: case 18406: case 18408: case 18410: case 18412: case 18414: case 18416: case 18418: case 18420: case 18422: case 18424: case 18426: case 18428: case 18430: case 18432: case 18434: case 18436: case 18438: case 18440: case 18442: case 18444: case 18446: case 18448: case 18450: case 18452: case 18454: case 18456: case 18458: case 18460: case 18462: case 18464: case 18466: case 18468: case 18470: case 18472: case 18474: case 18476: case 18478: case 18480: case 18482: case 18484: case 18486: case 18488: case 18490: case 18492: case 18494: case 18496: case 18498: case 18500: case 18502: case 18504: case 18506: case 18508: case 18510: case 18512: case 18514: case 18516: case 18518: case 18520: case 18522: case 18524: case 18526: case 18528: case 18530: case 18532: case 18534: case 18536: case 18538: case 18540: case 18542: case 18544: case 18546: case 18548: case 18550: case 18552: case 18554: case 18556: case 18558: case 18560: case 18562: case 18564: case 18566: case 18568: case 18570: case 18572: case 18574: case 18576: case 18578: case 18580: case 18582: case 18584: case 18586: case 18588: case 18590: case 18592: case 18594: case 18596: case 18598: case 18600: case 18602: case 18604: case 18606: case 18608: case 18610: case 18612: case 18614: case 18616: case 18618: case 18620: case 18622: case 18624: case 18626: case 18628: case 18630: case 18632: case 18634: case 18636: case 18638: case 18640: case 18642: case 18644: case 18646: case 18648: case 18650: case 18652: case 18654: case 18656: case 18658: case 18660: case 18662: case 18664: case 18666: case 18668: case 18670: case 18672: case 18674: case 18676: case 18678: case 18680: case 18682: case 18684: case 18686: case 18688: case 18690: case 18692: case 18694: case 18696: case 18698: case 18700: case 18702: case 18704: case 18706: case 18708: case 18710: case 18712: case 18714: case 18716: case 18718: case 18720: case 18722: case 18724: case 18726: case 18728: case 18730: case 18732: case 18734: case 18736: case 18738: case 18740: case 18742: case 18744: case 18746: case 18748: case 18750: case 18752: case 18754: case 18756: case 18758: case 18760: case 18762: case 18764: case 18766: case 18768: case 18770: case 18772: case 18774: case 18776: case 18778: case 18780: case 18782: case 18784: case 18786: case 18788: case 18790: case 18792: case 18794: case 18796: case 18798: case 18800: case 18802: case 18804: case 18806: case 18808: case 18810: case 18812: case 18814: case 18816: case 18818: case 18820: case 18822: case 18824: case 18826: case 18828: case 18830: case 18832: case 18834: case 18836: case 18838: case 18840: case 18842: case 18844: case 18846: case 18848: case 18850: case 18852: case 18854: case 18856: case 18858: case 18860: case 18862: case 18864: case 18866: case 18868: case 18870: case 18872: case 18874: case 18876: case 18878: case 18880: case 18882: case 18884: case 18886: case 18888: case 18890: case 18892: case 18894: case 18896: case 18898: case 18900: case 18902: case 18904: case 18906: case 18908: case 18910: case 18912: case 18914: case 18916: case 18918: case 18920: case 18922: case 18924: case 18926: case 18928: case 18930: case 18932: case 18934: case 18936: case 18938: case 18940: case 18942: case 18944: case 18946: case 18948: case 18950: case 18952: case 18954: case 18956: case 18958: case 18960: case 18962: case 18964: case 18966: case 18968: case 18970: case 18972: case 18974: case 18976: case 18978: case 18980: case 18982: case 18984: case 18986: case 18988: case 18990: case 18992: case 18994: case 18996: case 18998: case 19e3: case 19002: case 19004: case 19006: case 19008: case 19010: case 19012: case 19014: case 19016: case 19018: case 19020: case 19022: case 19024: case 19026: case 19028: case 19030: case 19032: case 19034: case 19036: case 19038: case 19040: case 19042: case 19044: case 19046: case 19048: case 19050: case 19052: case 19054: case 19056: case 19058: case 19060: case 19062: case 19064: case 19066: case 19068: case 19070: case 19072: case 19074: case 19076: case 19078: case 19080: case 19082: case 19084: case 19086: case 19088: case 19090: case 19092: case 19094: case 19096: case 19098: case 19100: case 19102: case 19104: case 19106: case 19108: case 19110: case 19112: case 19114: case 19116: case 19118: case 19120: case 19122: case 19124: case 19126: case 19128: case 19130: case 19132: case 19134: case 19136: case 19138: case 19140: case 19142: case 19144: case 19146: case 19148: case 19150: case 19152: case 19154: case 19156: case 19158: case 19160: case 19162: case 19164: case 19166: case 19168: case 19170: case 19172: case 19174: case 19176: case 19178: case 19180: case 19182: case 19184: case 19186: case 19188: case 19190: case 19192: case 19194: case 19196: case 19198: case 19200: case 19202: case 19204: case 19206: case 19208: case 19210: case 19212: case 19214: case 19216: case 19218: case 19220: case 19222: case 19224: case 19226: case 19228: case 19230: case 19232: case 19234: case 19236: case 19238: case 19240: case 19242: case 19244: case 19246: case 19248: case 19250: case 19252: case 19254: case 19256: case 19258: case 19260: case 19262: case 19264: case 19266: case 19268: case 19270: case 19272: case 19274: case 19276: case 19278: case 19280: case 19282: case 19284: case 19286: case 19288: case 19290: case 19292: case 19294: case 19296: case 19298: case 19300: case 19302: case 19304: case 19306: case 19308: case 19310: case 19312: case 19314: case 19316: case 19318: case 19320: case 19322: case 19324: case 19326: case 19328: case 19330: case 19332: case 19334: case 19336: case 19338: case 19340: case 19342: case 19344: case 19346: case 19348: case 19350: case 19352: case 19354: case 19356: case 19358: case 19360: case 19362: case 19364: case 19366: case 19368: case 19370: case 19372: case 19374: case 19376: case 19378: case 19380: case 19382: case 19384: case 19386: case 19388: case 19390: case 19392: case 19394: case 19396: case 19398: case 19400: case 19402: case 19404: case 19406: case 19408: case 19410: case 19412: case 19414: case 19416: case 19418: case 19420: case 19422: case 19424: case 19426: case 19428: case 19430: case 19432: case 19434: case 19436: case 19438: case 19440: case 19442: case 19444: case 19446: case 19448: case 19450: case 19452: case 19454: case 19456: case 19458: case 19460: case 19462: case 19464: case 19466: case 19468: case 19470: case 19472: case 19474: case 19476: case 19478: case 19480: case 19482: case 19484: case 19486: case 19488: case 19490: case 19492: case 19494: case 19496: case 19498: case 19500: case 19502: case 19504: case 19506: case 19508: case 19510: case 19512: case 19514: case 19516: case 19518: case 19520: case 19522: case 19524: case 19526: case 19528: case 19530: case 19532: case 19534: case 19536: case 19538: case 19540: case 19542: case 19544: case 19546: case 19548: case 19550: case 19552: case 19554: case 19556: case 19558: case 19560: case 19562: case 19564: case 19566: case 19568: case 19570: case 19572: case 19574: case 19576: case 19578: case 19580: case 19582: case 19584: case 19586: case 19588: case 19590: case 19592: case 19594: case 19596: case 19598: case 19600: case 19602: case 19604: case 19606: case 19608: case 19610: case 19612: case 19614: case 19616: case 19618: case 19620: case 19622: case 19624: case 19626: case 19628: case 19630: case 19632: case 19634: case 19636: case 19638: case 19640: case 19642: case 19644: case 19646: case 19648: case 19650: case 19652: case 19654: case 19656: case 19658: case 19660: case 19662: case 19664: case 19666: case 19668: case 19670: case 19672: case 19674: case 19676: case 19678: case 19680: case 19682: case 19684: case 19686: case 19688: case 19690: case 19692: case 19694: case 19696: case 19698: case 19700: case 19702: case 19704: case 19706: case 19708: case 19710: case 19712: case 19714: case 19716: case 19718: case 19720: case 19722: case 19724: case 19726: case 19728: case 19730: case 19732: case 19734: case 19736: case 19738: case 19740: case 19742: case 19744: case 19746: case 19748: case 19750: case 19752: case 19754: case 19756: case 19758: case 19760: case 19762: case 19764: case 19766: case 19768: case 19770: case 19772: case 19774: case 19776: case 19778: case 19780: case 19782: case 19784: case 19786: case 19788: case 19790: case 19792: case 19794: case 19796: case 19798: case 19800: case 19802: case 19804: case 19806: case 19808: case 19810: case 19812: case 19814: case 19816: case 19818: case 19820: case 19822: case 19824: case 19826: case 19828: case 19830: case 19832: case 19834: case 19836: case 19838: case 19840: case 19842: case 19844: case 19846: case 19848: case 19850: case 19852: case 19854: case 19856: case 19858: case 19860: case 19862: case 19864: case 19866: case 19868: case 19870: case 19872: case 19874: case 19876: case 19878: case 19880: case 19882: case 19884: case 19886: case 19888: case 19890: case 19892: case 19894: case 19896: case 19898: case 19900: case 19902: case 19904: case 19906: case 19908: case 19910: case 19912: case 19914: case 19916: case 19918: case 19920: case 19922: case 19924: case 19926: case 19928: case 19930: case 19932: case 19934: case 19936: case 19938: case 19940: case 19942: case 19944: case 19946: case 19948: case 19950: case 19952: case 19954: case 19956: case 19958: case 19960: case 19962: case 19964: case 19966: case 19968: case 19970: case 19972: case 19974: case 19976: case 19978: case 19980: case 19982: case 19984: case 19986: case 19988: case 19990: case 19992: case 19994: case 19996: case 19998: case 2e4: case 20002: case 20004: case 20006: case 20008: case 20010: case 20012: case 20014: case 20016: case 20018: case 20020: case 20022: case 20024: case 20026: case 20028: case 20030: case 20032: case 20034: case 20036: case 20038: case 20040: case 20042: case 20044: case 20046: case 20048: case 20050: case 20052: case 20054: case 20056: case 20058: case 20060: case 20062: case 20064: case 20066: case 20068: case 20070: case 20072: case 20074: case 20076: case 20078: case 20080: case 20082: case 20084: case 20086: case 20088: case 20090: case 20092: case 20094: case 20096: case 20098: case 20100: case 20102: case 20104: case 20106: case 20108: case 20110: case 20112: case 20114: case 20116: case 20118: case 20120: case 20122: case 20124: case 20126: case 20128: case 20130: case 20132: case 20134: case 20136: case 20138: case 20140: case 20142: case 20144: case 20146: case 20148: case 20150: case 20152: case 20154: case 20156: case 20158: case 20160: case 20162: case 20164: case 20166: case 20168: case 20170: case 20172: case 20174: case 20176: case 20178: case 20180: case 20182: case 20184: case 20186: case 20188: case 20190: case 20192: case 20194: case 20196: case 20198: case 20200: case 20202: case 20204: case 20206: case 20208: case 20210: case 20212: case 20214: case 20216: case 20218: case 20220: case 20222: case 20224: case 20226: case 20228: case 20230: case 20232: case 20234: case 20236: case 20238: case 20240: case 20242: case 20244: case 20246: case 20248: case 20250: case 20252: case 20254: case 20256: case 20258: case 20260: case 20262: case 20264: case 20266: case 20268: case 20270: case 20272: case 20274: case 20276: case 20278: case 20280: case 20282: case 20284: case 20286: case 20288: case 20290: case 20292: case 20294: case 20296: case 20298: case 20300: case 20302: case 20304: case 20306: case 20308: case 20310: case 20312: case 20314: case 20316: case 20318: case 20320: case 20322: case 20324: case 20326: case 20328: case 20330: case 20332: case 20334: case 20336: case 20338: case 20340: case 20342: case 20344: case 20346: case 20348: case 20350: case 20352: case 20354: case 20356: case 20358: case 20360: case 20362: case 20364: case 20366: case 20368: case 20370: case 20372: case 20374: case 20376: case 20378: case 20380: case 20382: case 20384: case 20386: case 20388: case 20390: case 20392: case 20394: case 20396: case 20398: case 20400: case 20402: case 20404: case 20406: case 20408: case 20410: case 20412: case 20414: case 20416: case 20418: case 20420: case 20422: case 20424: case 20426: case 20428: case 20430: case 20432: case 20434: case 20436: case 20438: case 20440: case 20442: case 20444: case 20446: case 20448: case 20450: case 20452: case 20454: case 20456: case 20458: case 20460: case 20462: case 20464: case 20466: case 20468: case 20470: case 20472: case 20474: case 20476: case 20478: case 20480: case 20482: case 20484: case 20486: case 20488: case 20490: case 20492: case 20494: case 20496: case 20498: case 20500: case 20502: case 20504: case 20506: case 20508: case 20510: case 20512: case 20514: case 20516: case 20518: case 20520: case 20522: case 20524: case 20526: case 20528: case 20530: case 20532: case 20534: case 20536: case 20538: case 20540: case 20542: case 20544: case 20546: case 20548: case 20550: case 20552: case 20554: case 20556: case 20558: case 20560: case 20562: case 20564: case 20566: case 20568: case 20570: case 20572: case 20574: case 20576: case 20578: case 20580: case 20582: case 20584: case 20586: case 20588: case 20590: case 20592: case 20594: case 20596: case 20598: case 20600: case 20602: case 20604: case 20606: case 20608: case 20610: case 20612: case 20614: case 20616: case 20618: case 20620: case 20622: case 20624: case 20626: case 20628: case 20630: case 20632: case 20634: case 20636: case 20638: case 20640: case 20642: case 20644: case 20646: case 20648: case 20650: case 20652: case 20654: case 20656: case 20658: case 20660: case 20662: case 20664: case 20666: case 20668: case 20670: case 20672: case 20674: case 20676: case 20678: case 20680: case 20682: case 20684: case 20686: case 20688: case 20690: case 20692: case 20694: case 20696: case 20698: case 20700: case 20702: case 20704: case 20706: case 20708: case 20710: case 20712: case 20714: case 20716: case 20718: case 20720: case 20722: case 20724: case 20726: case 20728: case 20730: case 20732: case 20734: case 20736: case 20738: case 20740: case 20742: case 20744: case 20746: case 20748: case 20750: case 20752: case 20754: case 20756: case 20758: case 20760: case 20762: case 20764: case 20766: case 20768: case 20770: case 20772: case 20774: case 20776: case 20778: case 20780: case 20782: case 20784: case 20786: case 20788: case 20790: case 20792: case 20794: case 20796: case 20798: case 20800: case 20802: case 20804: case 20806: case 20808: case 20810: case 20812: case 20814: case 20816: case 20818: case 20820: case 20822: case 20824: case 20826: case 20828: case 20830: case 20832: case 20834: case 20836: case 20838: case 20840: case 20842: case 20844: case 20846: case 20848: case 20850: case 20852: case 20854: case 20856: case 20858: case 20860: case 20862: case 20864: case 20866: case 20868: case 20870: case 20872: case 20874: case 20876: case 20878: case 20880: case 20882: case 20884: case 20886: case 20888: case 20890: case 20892: case 20894: case 20896: case 20898: case 20900: case 20902: case 20904: case 20906: case 20908: case 20910: case 20912: case 20914: case 20916: case 20918: case 20920: case 20922: case 20924: case 20926: case 20928: case 20930: case 20932: case 20934: case 20936: case 20938: case 20940: case 20942: case 20944: case 20946: case 20948: case 20950: case 20952: case 20954: case 20956: case 20958: case 20960: case 20962: case 20964: case 20966: case 20968: case 20970: case 20972: case 20974: case 20976: case 20978: case 20980: case 20982: case 20984: case 20986: case 20988: case 20990: case 20992: case 20994: case 20996: case 20998: case 21e3: case 21002: case 21004: case 21006: case 21008: case 21010: case 21012: case 21014: case 21016: case 21018: case 21020: case 21022: case 21024: case 21026: case 21028: case 21030: case 21032: case 21034: case 21036: case 21038: case 21040: case 21042: case 21044: case 21046: case 21048: case 21050: case 21052: case 21054: case 21056: case 21058: case 21060: case 21062: case 21064: case 21066: case 21068: case 21070: case 21072: case 21074: case 21076: case 21078: case 21080: case 21082: case 21084: case 21086: case 21088: case 21090: case 21092: case 21094: case 21096: case 21098: case 21100: case 21102: case 21104: case 21106: case 21108: case 21110: case 21112: case 21114: case 21116: case 21118: case 21120: case 21122: case 21124: case 21126: case 21128: case 21130: case 21132: case 21134: case 21136: case 21138: case 21140: case 21142: case 21144: case 21146: case 21148: case 21150: case 21152: case 21154: case 21156: case 21158: case 21160: case 21162: case 21164: case 21166: case 21168: case 21170: case 21172: case 21174: case 21176: case 21178: case 21180: case 21182: case 21184: case 21186: case 21188: case 21190: case 21192: case 21194: case 21196: case 21198: case 21200: case 21202: case 21204: case 21206: case 21208: case 21210: case 21212: case 21214: case 21216: case 21218: case 21220: case 21222: case 21224: case 21226: case 21228: case 21230: case 21232: case 21234: case 21236: case 21238: case 21240: case 21242: case 21244: case 21246: case 21248: case 21250: case 21252: case 21254: case 21256: case 21258: case 21260: case 21262: case 21264: case 21266: case 21268: case 21270: case 21272: case 21274: case 21276: case 21278: case 21280: case 21282: case 21284: case 21286: case 21288: case 21290: case 21292: case 21294: case 21296: case 21298: case 21300: case 21302: case 21304: case 21306: case 21308: case 21310: case 21312: case 21314: case 21316: case 21318: case 21320: case 21322: case 21324: case 21326: case 21328: case 21330: case 21332: case 21334: case 21336: case 21338: case 21340: case 21342: case 21344: case 21346: case 21348: case 21350: case 21352: case 21354: case 21356: case 21358: case 21360: case 21362: case 21364: case 21366: case 21368: case 21370: case 21372: case 21374: case 21376: case 21378: case 21380: case 21382: case 21384: case 21386: case 21388: case 21390: case 21392: case 21394: case 21396: case 21398: case 21400: case 21402: case 21404: case 21406: case 21408: case 21410: case 21412: case 21414: case 21416: case 21418: case 21420: case 21422: case 21424: case 21426: case 21428: case 21430: case 21432: case 21434: case 21436: case 21438: case 21440: case 21442: case 21444: case 21446: case 21448: case 21450: case 21452: case 21454: case 21456: case 21458: case 21460: case 21462: case 21464: case 21466: case 21468: case 21470: case 21472: case 21474: case 21476: case 21478: case 21480: case 21482: case 21484: case 21486: case 21488: case 21490: case 21492: case 21494: case 21496: case 21498: case 21500: case 21502: case 21504: case 21506: case 21508: case 21510: case 21512: case 21514: case 21516: case 21518: case 21520: case 21522: case 21524: case 21526: case 21528: case 21530: case 21532: case 21534: case 21536: case 21538: case 21540: case 21542: case 21544: case 21546: case 21548: case 21550: case 21552: case 21554: case 21556: case 21558: case 21560: case 21562: case 21564: case 21566: case 21568: case 21570: case 21572: case 21574: case 21576: case 21578: case 21580: case 21582: case 21584: case 21586: case 21588: case 21590: case 21592: case 21594: case 21596: case 21598: case 21600: case 21602: case 21604: case 21606: case 21608: case 21610: case 21612: case 21614: case 21616: case 21618: case 21620: case 21622: case 21624: case 21626: case 21628: case 21630: case 21632: case 21634: case 21636: case 21638: case 21640: case 21642: case 21644: case 21646: case 21648: case 21650: case 21652: case 21654: case 21656: case 21658: case 21660: case 21662: case 21664: case 21666: case 21668: case 21670: case 21672: case 21674: case 21676: case 21678: case 21680: case 21682: case 21684: case 21686: case 21688: case 21690: case 21692: case 21694: case 21696: case 21698: case 21700: case 21702: case 21704: case 21706: case 21708: case 21710: case 21712: case 21714: case 21716: case 21718: case 21720: case 21722: case 21724: case 21726: case 21728: case 21730: case 21732: case 21734: case 21736: case 21738: case 21740: case 21742: case 21744: case 21746: case 21748: case 21750: case 21752: case 21754: case 21756: case 21758: case 21760: case 21762: case 21764: case 21766: case 21768: case 21770: case 21772: case 21774: case 21776: case 21778: case 21780: case 21782: case 21784: case 21786: case 21788: case 21790: case 21792: case 21794: case 21796: case 21798: case 21800: case 21802: case 21804: case 21806: case 21808: case 21810: case 21812: case 21814: case 21816: case 21818: case 21820: case 21822: case 21824: case 21826: case 21828: case 21830: case 21832: case 21834: case 21836: case 21838: case 21840: case 21842: case 21844: case 21846: case 21848: case 21850: case 21852: case 21854: case 21856: case 21858: case 21860: case 21862: case 21864: case 21866: case 21868: case 21870: case 21872: case 21874: case 21876: case 21878: case 21880: case 21882: case 21884: case 21886: case 21888: case 21890: case 21892: case 21894: case 21896: case 21898: case 21900: case 21902: case 21904: case 21906: case 21908: case 21910: case 21912: case 21914: case 21916: case 21918: case 21920: case 21922: case 21924: case 21926: case 21928: case 21930: case 21932: case 21934: case 21936: case 21938: case 21940: case 21942: case 21944: case 21946: case 21948: case 21950: case 21952: case 21954: case 21956: case 21958: case 21960: case 21962: case 21964: case 21966: case 21968: case 21970: case 21972: case 21974: case 21976: case 21978: case 21980: case 21982: case 21984: case 21986: case 21988: case 21990: case 21992: case 21994: case 21996: case 21998: case 22e3: case 22002: case 22004: case 22006: case 22008: case 22010: case 22012: case 22014: case 22016: case 22018: case 22020: case 22022: case 22024: case 22026: case 22028: case 22030: case 22032: case 22034: case 22036: case 22038: case 22040: case 22042: case 22044: case 22046: case 22048: case 22050: case 22052: case 22054: case 22056: case 22058: case 22060: case 22062: case 22064: case 22066: case 22068: case 22070: case 22072: case 22074: case 22076: case 22078: case 22080: case 22082: case 22084: case 22086: case 22088: case 22090: case 22092: case 22094: case 22096: case 22098: case 22100: case 22102: case 22104: case 22106: case 22108: case 22110: case 22112: case 22114: case 22116: case 22118: case 22120: case 22122: case 22124: case 22126: case 22128: case 22130: case 22132: case 22134: case 22136: case 22138: case 22140: case 22142: case 22144: case 22146: case 22148: case 22150: case 22152: case 22154: case 22156: case 22158: case 22160: case 22162: case 22164: case 22166: case 22168: case 22170: case 22172: case 22174: case 22176: case 22178: case 22180: case 22182: case 22184: case 22186: case 22188: case 22190: case 22192: case 22194: case 22196: case 22198: case 22200: case 22202: case 22204: case 22206: case 22208: case 22210: case 22212: case 22214: case 22216: case 22218: case 22220: case 22222: case 22224: case 22226: case 22228: case 22230: case 22232: case 22234: case 22236: case 22238: case 22240: case 22242: case 22244: case 22246: case 22248: case 22250: case 22252: case 22254: case 22256: case 22258: case 22260: case 22262: case 22264: case 22266: case 22268: case 22270: case 22272: case 22274: case 22276: case 22278: case 22280: case 22282: case 22284: case 22286: case 22288: case 22290: case 22292: case 22294: case 22296: case 22298: case 22300: case 22302: case 22304: case 22306: case 22308: case 22310: case 22312: case 22314: case 22316: case 22318: case 22320: case 22322: case 22324: case 22326: case 22328: case 22330: case 22332: case 22334: case 22336: case 22338: case 22340: case 22342: case 22344: case 22346: case 22348: case 22350: case 22352: case 22354: case 22356: case 22358: case 22360: case 22362: case 22364: case 22366: case 22368: case 22370: case 22372: case 22374: case 22376: case 22378: case 22380: case 22382: case 22384: case 22386: case 22388: case 22390: case 22392: case 22394: case 22396: case 22398: case 22400: case 22402: case 22404: case 22406: case 22408: case 22410: case 22412: case 22414: case 22416: case 22418: case 22420: case 22422: case 22424: case 22426: case 22428: case 22430: case 22432: case 22434: case 22436: case 22438: case 22440: case 22442: case 22444: case 22446: case 22448: case 22450: case 22452: case 22454: case 22456: case 22458: case 22460: case 22462: case 22464: case 22466: case 22468: case 22470: case 22472: case 22474: case 22476: case 22478: case 22480: case 22482: case 22484: case 22486: case 22488: case 22490: case 22492: case 22494: case 22496: case 22498: case 22500: case 22502: case 22504: case 22506: case 22508: case 22510: case 22512: case 22514: case 22516: case 22518: case 22520: case 22522: case 22524: case 22526: case 22528: case 22530: case 22532: case 22534: case 22536: case 22538: case 22540: case 22542: case 22544: case 22546: case 22548: case 22550: case 22552: case 22554: case 22556: case 22558: case 22560: case 22562: case 22564: case 22566: case 22568: case 22570: case 22572: case 22574: case 22576: case 22578: case 22580: case 22582: case 22584: case 22586: case 22588: case 22590: case 22592: case 22594: case 22596: case 22598: case 22600: case 22602: case 22604: case 22606: case 22608: case 22610: case 22612: case 22614: case 22616: case 22618: case 22620: case 22622: case 22624: case 22626: case 22628: case 22630: case 22632: case 22634: case 22636: case 22638: case 22640: case 22642: case 22644: case 22646: case 22648: case 22650: case 22652: case 22654: case 22656: case 22658: case 22660: case 22662: case 22664: case 22666: case 22668: case 22670: case 22672: case 22674: case 22676: case 22678: case 22680: case 22682: case 22684: case 22686: case 22688: case 22690: case 22692: case 22694: case 22696: case 22698: case 22700: case 22702: case 22704: case 22706: case 22708: case 22710: case 22712: case 22714: case 22716: case 22718: case 22720: case 22722: case 22724: case 22726: case 22728: case 22730: case 22732: case 22734: case 22736: case 22738: case 22740: case 22742: case 22744: case 22746: case 22748: case 22750: case 22752: case 22754: case 22756: case 22758: case 22760: case 22762: case 22764: case 22766: case 22768: case 22770: case 22772: case 22774: case 22776: case 22778: case 22780: case 22782: case 22784: case 22786: case 22788: case 22790: case 22792: case 22794: case 22796: case 22798: case 22800: case 22802: case 22804: case 22806: case 22808: case 22810: case 22812: case 22814: case 22816: case 22818: case 22820: case 22822: case 22824: case 22826: case 22828: case 22830: case 22832: case 22834: case 22836: case 22838: case 22840: case 22842: case 22844: case 22846: case 22848: case 22850: case 22852: case 22854: case 22856: case 22858: case 22860: case 22862: case 22864: case 22866: case 22868: case 22870: case 22872: case 22874: case 22876: case 22878: case 22880: case 22882: case 22884: case 22886: case 22888: case 22890: case 22892: case 22894: case 22896: case 22898: case 22900: case 22902: case 22904: case 22906: case 22908: case 22910: case 22912: case 22914: case 22916: case 22918: case 22920: case 22922: case 22924: case 22926: case 22928: case 22930: case 22932: case 22934: case 22936: case 22938: case 22940: case 22942: case 22944: case 22946: case 22948: case 22950: case 22952: case 22954: case 22956: case 22958: case 22960: case 22962: case 22964: case 22966: case 22968: case 22970: case 22972: case 22974: case 22976: case 22978: case 22980: case 22982: case 22984: case 22986: case 22988: case 22990: case 22992: case 22994: case 22996: case 22998: case 23e3: case 23002: case 23004: case 23006: case 23008: case 23010: case 23012: case 23014: case 23016: case 23018: case 23020: case 23022: case 23024: case 23026: case 23028: case 23030: case 23032: case 23034: case 23036: case 23038: case 23040: case 23042: case 23044: case 23046: case 23048: case 23050: case 23052: case 23054: case 23056: case 23058: case 23060: case 23062: case 23064: case 23066: case 23068: case 23070: case 23072: case 23074: case 23076: case 23078: case 23080: case 23082: case 23084: case 23086: case 23088: case 23090: case 23092: case 23094: case 23096: case 23098: case 23100: case 23102: case 23104: case 23106: case 23108: case 23110: case 23112: case 23114: case 23116: case 23118: case 23120: case 23122: case 23124: case 23126: case 23128: case 23130: case 23132: case 23134: case 23136: case 23138: case 23140: case 23142: case 23144: case 23146: case 23148: case 23150: case 23152: case 23154: case 23156: case 23158: case 23160: case 23162: case 23164: case 23166: case 23168: case 23170: case 23172: case 23174: case 23176: case 23178: case 23180: case 23182: case 23184: case 23186: case 23188: case 23190: case 23192: case 23194: case 23196: case 23198: case 23200: case 23202: case 23204: case 23206: case 23208: case 23210: case 23212: case 23214: case 23216: case 23218: case 23220: case 23222: case 23224: case 23226: case 23228: case 23230: case 23232: case 23234: case 23236: case 23238: case 23240: case 23242: case 23244: case 23246: case 23248: case 23250: case 23252: case 23254: case 23256: case 23258: case 23260: case 23262: case 23264: case 23266: case 23268: case 23270: case 23272: case 23274: case 23276: case 23278: case 23280: case 23282: case 23284: case 23286: case 23288: case 23290: case 23292: case 23294: case 23296: case 23298: case 23300: case 23302: case 23304: case 23306: case 23308: case 23310: case 23312: case 23314: case 23316: case 23318: case 23320: case 23322: case 23324: case 23326: case 23328: case 23330: case 23332: case 23334: case 23336: case 23338: case 23340: case 23342: case 23344: case 23346: case 23348: case 23350: case 23352: case 23354: case 23356: case 23358: case 23360: case 23362: case 23364: case 23366: case 23368: case 23370: case 23372: case 23374: case 23376: case 23378: case 23380: case 23382: case 23384: case 23386: case 23388: case 23390: case 23392: case 23394: case 23396: case 23398: case 23400: case 23402: case 23404: case 23406: case 23408: case 23410: case 23412: case 23414: case 23416: case 23418: case 23420: case 23422: case 23424: case 23426: case 23428: case 23430: case 23432: case 23434: case 23436: case 23438: case 23440: case 23442: case 23444: case 23446: case 23448: case 23450: case 23452: case 23454: case 23456: case 23458: case 23460: case 23462: case 23464: case 23466: case 23468: case 23470: case 23472: case 23474: case 23476: case 23478: case 23480: case 23482: case 23484: case 23486: case 23488: case 23490: case 23492: case 23494: case 23496: case 23498: case 23500: case 23502: case 23504: case 23506: case 23508: case 23510: case 23512: case 23514: case 23516: case 23518: case 23520: case 23522: case 23524: case 23526: case 23528: case 23530: case 23532: case 23534: case 23536: case 23538: case 23540: case 23542: case 23544: case 23546: case 23548: case 23550: case 23552: case 23554: case 23556: case 23558: case 23560: case 23562: case 23564: case 23566: case 23568: case 23570: case 23572: case 23574: case 23576: case 23578: case 23580: case 23582: case 23584: case 23586: case 23588: case 23590: case 23592: case 23594: case 23596: case 23598: case 23600: case 23602: case 23604: case 23606: case 23608: case 23610: case 23612: case 23614: case 23616: case 23618: case 23620: case 23622: case 23624: case 23626: case 23628: case 23630: case 23632: case 23634: case 23636: case 23638: case 23640: case 23642: case 23644: case 23646: case 23648: case 23650: case 23652: case 23654: case 23656: case 23658: case 23660: case 23662: case 23664: case 23666: case 23668: case 23670: case 23672: case 23674: case 23676: case 23678: case 23680: case 23682: case 23684: case 23686: case 23688: case 23690: case 23692: case 23694: case 23696: case 23698: case 23700: case 23702: case 23704: case 23706: case 23708: case 23710: case 23712: case 23714: case 23716: case 23718: case 23720: case 23722: case 23724: case 23726: case 23728: case 23730: case 23732: case 23734: case 23736: case 23738: case 23740: case 23742: case 23744: case 23746: case 23748: case 23750: case 23752: case 23754: case 23756: case 23758: case 23760: case 23762: case 23764: case 23766: case 23768: case 23770: case 23772: case 23774: case 23776: case 23778: case 23780: case 23782: case 23784: case 23786: case 23788: case 23790: case 23792: case 23794: case 23796: case 23798: case 23800: case 23802: case 23804: case 23806: case 23808: case 23810: case 23812: case 23814: case 23816: case 23818: case 23820: case 23822: case 23824: case 23826: case 23828: case 23830: case 23832: case 23834: case 23836: case 23838: case 23840: case 23842: case 23844: case 23846: case 23848: case 23850: case 23852: case 23854: case 23856: case 23858: case 23860: case 23862: case 23864: case 23866: case 23868: case 23870: case 23872: case 23874: case 23876: case 23878: case 23880: case 23882: case 23884: case 23886: case 23888: case 23890: case 23892: case 23894: case 23896: case 23898: case 23900: case 23902: case 23904: case 23906: case 23908: case 23910: case 23912: case 23914: case 23916: case 23918: case 23920: case 23922: case 23924: case 23926: case 23928: case 23930: case 23932: case 23934: case 23936: case 23938: case 23940: case 23942: case 23944: case 23946: case 23948: case 23950: case 23952: case 23954: case 23956: case 23958: case 23960: case 23962: case 23964: case 23966: case 23968: case 23970: case 23972: case 23974: case 23976: case 23978: case 23980: case 23982: case 23984: case 23986: case 23988: case 23990: case 23992: case 23994: case 23996: case 23998: case 24e3: case 24002: case 24004: case 24006: case 24008: case 24010: case 24012: case 24014: case 24016: case 24018: case 24020: case 24022: case 24024: case 24026: case 24028: case 24030: case 24032: case 24034: case 24036: case 24038: case 24040: case 24042: case 24044: case 24046: case 24048: case 24050: case 24052: case 24054: case 24056: case 24058: case 24060: case 24062: case 24064: case 24066: case 24068: case 24070: case 24072: case 24074: case 24076: case 24078: case 24080: case 24082: case 24084: case 24086: case 24088: case 24090: case 24092: case 24094: case 24096: case 24098: case 24100: case 24102: case 24104: case 24106: case 24108: case 24110: case 24112: case 24114: case 24116: case 24118: case 24120: case 24122: case 24124: case 24126: case 24128: case 24130: case 24132: case 24134: case 24136: case 24138: case 24140: case 24142: case 24144: case 24146: case 24148: case 24150: case 24152: case 24154: case 24156: case 24158: case 24160: case 24162: case 24164: case 24166: case 24168: case 24170: case 24172: case 24174: case 24176: case 24178: case 24180: case 24182: case 24184: case 24186: case 24188: case 24190: case 24192: case 24194: case 24196: case 24198: case 24200: case 24202: case 24204: case 24206: case 24208: case 24210: case 24212: case 24214: case 24216: case 24218: case 24220: case 24222: case 24224: case 24226: case 24228: case 24230: case 24232: case 24234: case 24236: case 24238: case 24240: case 24242: case 24244: case 24246: case 24248: case 24250: case 24252: case 24254: case 24256: case 24258: case 24260: case 24262: case 24264: case 24266: case 24268: case 24270: case 24272: case 24274: case 24276: case 24278: case 24280: case 24282: case 24284: case 24286: case 24288: case 24290: case 24292: case 24294: case 24296: case 24298: case 24300: case 24302: case 24304: case 24306: case 24308: case 24310: case 24312: case 24314: case 24316: case 24318: case 24320: case 24322: case 24324: case 24326: case 24328: case 24330: case 24332: case 24334: case 24336: case 24338: case 24340: case 24342: case 24344: case 24346: case 24348: case 24350: case 24352: case 24354: case 24356: case 24358: case 24360: case 24362: case 24364: case 24366: case 24368: case 24370: case 24372: case 24374: case 24376: case 24378: case 24380: case 24382: case 24384: case 24386: case 24388: case 24390: case 24392: case 24394: case 24396: case 24398: case 24400: case 24402: case 24404: case 24406: case 24408: case 24410: case 24412: case 24414: case 24416: case 24418: case 24420: case 24422: case 24424: case 24426: case 24428: case 24430: case 24432: case 24434: case 24436: case 24438: case 24440: case 24442: case 24444: case 24446: case 24448: case 24450: case 24452: case 24454: case 24456: case 24458: case 24460: case 24462: case 24464: case 24466: case 24468: case 24470: case 24472: case 24474: case 24476: case 24478: case 24480: case 24482: case 24484: case 24486: case 24488: case 24490: case 24492: case 24494: case 24496: case 24498: case 24500: case 24502: case 24504: case 24506: case 24508: case 24510: case 24512: case 24514: case 24516: case 24518: case 24520: case 24522: case 24524: case 24526: case 24528: case 24530: case 24532: case 24534: case 24536: case 24538: case 24540: case 24542: case 24544: case 24546: case 24548: case 24550: case 24552: case 24554: case 24556: case 24558: case 24560: case 24562: case 24564: case 24566: case 24568: case 24570: case 24572: case 24574: case 24576: case 24578: case 24580: case 24582: case 24584: case 24586: case 24588: case 24590: case 24592: case 24594: case 24596: case 24598: case 24600: case 24602: case 24604: case 24606: case 24608: case 24610: case 24612: case 24614: return 0 | 0; default: break block; }; } return 1 | 0; } function $16() { } function $17() { block : { dummy(); switch (0 | 0) { default: break block; }; } } function $18() { block : { dummy(); switch (0 | 0) { default: break block; }; } } function $19() { var $1_1 = 0; block : { dummy(); $1_1 = 2; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $20() { var $1_1 = 0, $2_1 = 0, $4_1 = 0; __binaryen_fake_return : { loop_in : while (1) { $1_1 = 3; switch (0 | 0) { default: break __binaryen_fake_return; }; }; } return $1_1 | 0; } function $21() { var $1_1 = 0, $2_1 = 0, $4_1 = 0; __binaryen_fake_return : { loop_in : while (1) { dummy(); $1_1 = 4; switch (-1 | 0) { default: break __binaryen_fake_return; }; }; } return $1_1 | 0; } function $22() { var $1_1 = 0; __binaryen_fake_return : { loop_in : while (1) { dummy(); $1_1 = 5; switch (1 | 0) { default: break __binaryen_fake_return; }; }; } return $1_1 | 0; } function $23() { var $0 = 0; block : { $0 = 9; break block; } return $0 | 0; } function $24() { } function $25() { var $1_1 = 0; block : { $1_1 = 8; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $26() { var $1_1 = 0; block : { $1_1 = 9; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $27() { } function $28() { var $1_1 = 0; block : { $1_1 = 10; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $29() { var $1_1 = 0; block : { $1_1 = 11; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $30() { var i64toi32_i32$0 = 0, $1_1 = 0, $1$hi = 0; block : { i64toi32_i32$0 = 0; $1_1 = 7; $1$hi = i64toi32_i32$0; switch (0 | 0) { default: break block; }; } i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function $31() { var $1_1 = 0, $2_1 = 0; if_ : { $1_1 = 2; switch (0 | 0) { default: break if_; }; } return $1_1 | 0; } function $32($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $4_1 = 0, $6_1 = 0; block : { if ($0) { $4_1 = 3; switch (0 | 0) { default: break block; }; } else { $6_1 = $1_1 } $4_1 = $6_1; } return $4_1 | 0; } function $33($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $4_1 = 0, $5_1 = 0, $6_1 = 0, $7_1 = 0; block : { if_ : { if ($0) { $7_1 = $1_1 } else { $4_1 = 4; $5_1 = $4_1; $6_1 = $4_1; switch (0 | 0) { case 0: break block; default: break if_; }; } $6_1 = $7_1; } $5_1 = $6_1; } return $5_1 | 0; } function $34($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { $3_1 = 5; switch (0 | 0) { default: break block; }; } return $3_1 | 0; } function $35($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var $2_1 = 0, $4_1 = 0, $5_1 = 0; block : { $2_1 = $0; $4_1 = 6; switch (1 | 0) { default: break block; }; } return $4_1 | 0; } function $36() { var $1_1 = 0; block : { $1_1 = 7; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function f($0, $1_1, $2_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; return -1 | 0; } function $38() { var $1_1 = 0; block : { $1_1 = 12; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $39() { var $1_1 = 0; block : { $1_1 = 13; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $40() { var $1_1 = 0; block : { $1_1 = 14; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $41() { var $1_1 = 0; block : { $1_1 = 20; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $42() { var $1_1 = 0; block : { $1_1 = 21; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $43() { var $1_1 = 0; block : { $1_1 = 22; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $44() { var $1_1 = 0; block : { $1_1 = 23; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $45() { var $2_1 = 0; block : { $2_1 = 17; switch (1 | 0) { default: break block; }; } return $2_1 | 0; } function $46() { var $1_1 = 0; block : { $1_1 = 2; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $47() { var i64toi32_i32$0 = 0, $1_1 = 0, $1$hi = 0; block : { i64toi32_i32$0 = 0; $1_1 = 30; $1$hi = i64toi32_i32$0; switch (1 | 0) { default: break block; }; } i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function $48() { var $1_1 = 0; block : { $1_1 = 30; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $49() { var $1_1 = 0; block : { $1_1 = 31; switch (1 | 0) { default: break block; }; } return $1_1 | 0; } function $50() { var $1_1 = 0; block : { $1_1 = 32; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $51() { var $1_1 = 0; block : { $1_1 = 33; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $52() { var $1_1 = 0; block : { $1_1 = 3; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $53() { var $1_1 = 0; block : { $1_1 = 3; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $54() { var i64toi32_i32$0 = 0, $1_1 = 0, $1$hi = 0; block : { i64toi32_i32$0 = 0; $1_1 = 45; $1$hi = i64toi32_i32$0; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $55() { var $1_1 = 0; block : { $1_1 = 44; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $56() { var $1_1 = 0; block : { $1_1 = 43; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $57() { var $1_1 = 0; block : { $1_1 = 42; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $58() { var $1_1 = 0; block : { $1_1 = 41; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $59() { var $1_1 = 0; block : { $1_1 = 40; switch (0 | 0) { default: break block; }; } return $1_1 | 0; } function $60($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { block11 : { block12 : { $2_1 = 16; $3_1 = $2_1; $4_1 = $2_1; $5_1 = $2_1; switch ($0 | 0) { case 1: break block11; case 0: break block12; default: break block; }; } $4_1 = 2 + $5_1 | 0; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $61($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { block13 : { block14 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; $5_1 = $2_1; switch ($0 | 0) { case 0: break block; case 1: break block13; default: break block14; }; } $4_1 = 16; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $62($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { block15 : { block16 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; $5_1 = $2_1; switch ($0 | 0) { case 1: break block15; case 0: break block16; default: break block; }; } $4_1 = 16; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $63($0) { $0 = $0 | 0; var $4_1 = 0, $2_1 = 0, $3_1 = 0; block : { block17 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; switch ($0 | 0) { case 1: break block; default: break block17; }; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $64($0) { $0 = $0 | 0; var $2_1 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0; block : { block18 : { block19 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; $5_1 = $2_1; switch ($0 | 0) { case 1: break block18; case 0: break block19; default: break block; }; } $4_1 = 16; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } function $65($0) { $0 = $0 | 0; var $4_1 = 0, $2_1 = 0, $3_1 = 0; block : { block20 : { $2_1 = 8; $3_1 = $2_1; $4_1 = $2_1; switch ($0 | 0) { case 1: break block; default: break block20; }; } $3_1 = 1 + $4_1 | 0; } return $3_1 | 0; } return { "type_i32": $1, "type_i64": $2, "type_f32": $3, "type_f64": $4, "type_i32_value": $5, "type_i64_value": $6, "type_f32_value": $7, "type_f64_value": $8, "empty": $9, "empty_value": $10, "singleton": $11, "singleton_value": $12, "multiple": $13, "multiple_value": $14, "large": $15, "as_block_first": $16, "as_block_mid": $17, "as_block_last": $18, "as_block_value": $19, "as_loop_first": $20, "as_loop_mid": $21, "as_loop_last": $22, "as_br_value": $23, "as_br_if_cond": $24, "as_br_if_value": $25, "as_br_if_value_cond": $26, "as_br_table_index": $27, "as_br_table_value": $28, "as_br_table_value_index": $29, "as_return_value": $30, "as_if_cond": $31, "as_if_then": $32, "as_if_else": $33, "as_select_first": $34, "as_select_second": $35, "as_select_cond": $36, "as_call_first": $38, "as_call_mid": $39, "as_call_last": $40, "as_call_indirect_first": $41, "as_call_indirect_mid": $42, "as_call_indirect_last": $43, "as_call_indirect_func": $44, "as_local_set_value": $45, "as_load_address": $46, "as_loadN_address": $47, "as_store_address": $48, "as_store_value": $49, "as_storeN_address": $50, "as_storeN_value": $51, "as_unary_operand": $52, "as_binary_left": $53, "as_binary_right": $54, "as_test_operand": $55, "as_compare_left": $56, "as_compare_right": $57, "as_convert_operand": $58, "as_memory_grow_size": $59, "nested_block_value": $60, "nested_br_value": $61, "nested_br_if_value": $62, "nested_br_if_value_cond": $63, "nested_br_table_value": $64, "nested_br_table_value_index": $65 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var type_i32 = retasmFunc.type_i32; export var type_i64 = retasmFunc.type_i64; export var type_f32 = retasmFunc.type_f32; export var type_f64 = retasmFunc.type_f64; export var type_i32_value = retasmFunc.type_i32_value; export var type_i64_value = retasmFunc.type_i64_value; export var type_f32_value = retasmFunc.type_f32_value; export var type_f64_value = retasmFunc.type_f64_value; export var empty = retasmFunc.empty; export var empty_value = retasmFunc.empty_value; export var singleton = retasmFunc.singleton; export var singleton_value = retasmFunc.singleton_value; export var multiple = retasmFunc.multiple; export var multiple_value = retasmFunc.multiple_value; export var large = retasmFunc.large; export var as_block_first = retasmFunc.as_block_first; export var as_block_mid = retasmFunc.as_block_mid; export var as_block_last = retasmFunc.as_block_last; export var as_block_value = retasmFunc.as_block_value; export var as_loop_first = retasmFunc.as_loop_first; export var as_loop_mid = retasmFunc.as_loop_mid; export var as_loop_last = retasmFunc.as_loop_last; export var as_br_value = retasmFunc.as_br_value; export var as_br_if_cond = retasmFunc.as_br_if_cond; export var as_br_if_value = retasmFunc.as_br_if_value; export var as_br_if_value_cond = retasmFunc.as_br_if_value_cond; export var as_br_table_index = retasmFunc.as_br_table_index; export var as_br_table_value = retasmFunc.as_br_table_value; export var as_br_table_value_index = retasmFunc.as_br_table_value_index; export var as_return_value = retasmFunc.as_return_value; export var as_if_cond = retasmFunc.as_if_cond; export var as_if_then = retasmFunc.as_if_then; export var as_if_else = retasmFunc.as_if_else; export var as_select_first = retasmFunc.as_select_first; export var as_select_second = retasmFunc.as_select_second; export var as_select_cond = retasmFunc.as_select_cond; export var as_call_first = retasmFunc.as_call_first; export var as_call_mid = retasmFunc.as_call_mid; export var as_call_last = retasmFunc.as_call_last; export var as_call_indirect_first = retasmFunc.as_call_indirect_first; export var as_call_indirect_mid = retasmFunc.as_call_indirect_mid; export var as_call_indirect_last = retasmFunc.as_call_indirect_last; export var as_call_indirect_func = retasmFunc.as_call_indirect_func; export var as_local_set_value = retasmFunc.as_local_set_value; export var as_load_address = retasmFunc.as_load_address; export var as_loadN_address = retasmFunc.as_loadN_address; export var as_store_address = retasmFunc.as_store_address; export var as_store_value = retasmFunc.as_store_value; export var as_storeN_address = retasmFunc.as_storeN_address; export var as_storeN_value = retasmFunc.as_storeN_value; export var as_unary_operand = retasmFunc.as_unary_operand; export var as_binary_left = retasmFunc.as_binary_left; export var as_binary_right = retasmFunc.as_binary_right; export var as_test_operand = retasmFunc.as_test_operand; export var as_compare_left = retasmFunc.as_compare_left; export var as_compare_right = retasmFunc.as_compare_right; export var as_convert_operand = retasmFunc.as_convert_operand; export var as_memory_grow_size = retasmFunc.as_memory_grow_size; export var nested_block_value = retasmFunc.nested_block_value; export var nested_br_value = retasmFunc.nested_br_value; export var nested_br_if_value = retasmFunc.nested_br_if_value; export var nested_br_if_value_cond = retasmFunc.nested_br_if_value_cond; export var nested_br_table_value = retasmFunc.nested_br_table_value; export var nested_br_table_value_index = retasmFunc.nested_br_table_value_index; binaryen-version_108/test/wasm2js/br_table_temp.2asm.js.opt000066400000000000000000005570571423707623100241340ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function dummy() { } function $5() { return 1; } function $6() { return 2; } function $7() { return Math_fround(Math_fround(3.0)); } function $8() { return 4.0; } function $9($0) { $0 = $0 | 0; return 22; } function $10($0) { $0 = $0 | 0; return 33; } function $11($0) { $0 = $0 | 0; if ($0) { return 20 } return 22; } function $12($0) { $0 = $0 | 0; if ($0) { $0 = 33 } else { $0 = 32 } return $0 | 0; } function $13($0) { $0 = $0 | 0; block : { switch ($0 | 0) { case 3: return 100; case 2: return 101; case 1: return 102; case 0: return 103; default: break block; }; } return 104; } function $14($0) { $0 = $0 | 0; block : { switch ($0 | 0) { case 3: return 210; case 2: return 211; case 1: return 212; case 0: return 213; default: break block; }; } return 214; } function $15($0) { $0 = $0 | 0; block : { switch ($0 | 0) { case 0: case 2: case 4: case 6: case 8: case 10: case 12: case 14: case 16: case 18: case 20: case 22: case 24: case 26: case 28: case 30: case 32: case 34: case 36: case 38: case 40: case 42: case 44: case 46: case 48: case 50: case 52: case 54: case 56: case 58: case 60: case 62: case 64: case 66: case 68: case 70: case 72: case 74: case 76: case 78: case 80: case 82: case 84: case 86: case 88: case 90: case 92: case 94: case 96: case 98: case 100: case 102: case 104: case 106: case 108: case 110: case 112: case 114: case 116: case 118: case 120: case 122: case 124: case 126: case 128: case 130: case 132: case 134: case 136: case 138: case 140: case 142: case 144: case 146: case 148: case 150: case 152: case 154: case 156: case 158: case 160: case 162: case 164: case 166: case 168: case 170: case 172: case 174: case 176: case 178: case 180: case 182: case 184: case 186: case 188: case 190: case 192: case 194: case 196: case 198: case 200: case 202: case 204: case 206: case 208: case 210: case 212: case 214: case 216: case 218: case 220: case 222: case 224: case 226: case 228: case 230: case 232: case 234: case 236: case 238: case 240: case 242: case 244: case 246: case 248: case 250: case 252: case 254: case 256: case 258: case 260: case 262: case 264: case 266: case 268: case 270: case 272: case 274: case 276: case 278: case 280: case 282: case 284: case 286: case 288: case 290: case 292: case 294: case 296: case 298: case 300: case 302: case 304: case 306: case 308: case 310: case 312: case 314: case 316: case 318: case 320: case 322: case 324: case 326: case 328: case 330: case 332: case 334: case 336: case 338: case 340: case 342: case 344: case 346: case 348: case 350: case 352: case 354: case 356: case 358: case 360: case 362: case 364: case 366: case 368: case 370: case 372: case 374: case 376: case 378: case 380: case 382: case 384: case 386: case 388: case 390: case 392: case 394: case 396: case 398: case 400: case 402: case 404: case 406: case 408: case 410: case 412: case 414: case 416: case 418: case 420: case 422: case 424: case 426: case 428: case 430: case 432: case 434: case 436: case 438: case 440: case 442: case 444: case 446: case 448: case 450: case 452: case 454: case 456: case 458: case 460: case 462: case 464: case 466: case 468: case 470: case 472: case 474: case 476: case 478: case 480: case 482: case 484: case 486: case 488: case 490: case 492: case 494: case 496: case 498: case 500: case 502: case 504: case 506: case 508: case 510: case 512: case 514: case 516: case 518: case 520: case 522: case 524: case 526: case 528: case 530: case 532: case 534: case 536: case 538: case 540: case 542: case 544: case 546: case 548: case 550: case 552: case 554: case 556: case 558: case 560: case 562: case 564: case 566: case 568: case 570: case 572: case 574: case 576: case 578: case 580: case 582: case 584: case 586: case 588: case 590: case 592: case 594: case 596: case 598: case 600: case 602: case 604: case 606: case 608: case 610: case 612: case 614: case 616: case 618: case 620: case 622: case 624: case 626: case 628: case 630: case 632: case 634: case 636: case 638: case 640: case 642: case 644: case 646: case 648: case 650: case 652: case 654: case 656: case 658: case 660: case 662: case 664: case 666: case 668: case 670: case 672: case 674: case 676: case 678: case 680: case 682: case 684: case 686: case 688: case 690: case 692: case 694: case 696: case 698: case 700: case 702: case 704: case 706: case 708: case 710: case 712: case 714: case 716: case 718: case 720: case 722: case 724: case 726: case 728: case 730: case 732: case 734: case 736: case 738: case 740: case 742: case 744: case 746: case 748: case 750: case 752: case 754: case 756: case 758: case 760: case 762: case 764: case 766: case 768: case 770: case 772: case 774: case 776: case 778: case 780: case 782: case 784: case 786: case 788: case 790: case 792: case 794: case 796: case 798: case 800: case 802: case 804: case 806: case 808: case 810: case 812: case 814: case 816: case 818: case 820: case 822: case 824: case 826: case 828: case 830: case 832: case 834: case 836: case 838: case 840: case 842: case 844: case 846: case 848: case 850: case 852: case 854: case 856: case 858: case 860: case 862: case 864: case 866: case 868: case 870: case 872: case 874: case 876: case 878: case 880: case 882: case 884: case 886: case 888: case 890: case 892: case 894: case 896: case 898: case 900: case 902: case 904: case 906: case 908: case 910: case 912: case 914: case 916: case 918: case 920: case 922: case 924: case 926: case 928: case 930: case 932: case 934: case 936: case 938: case 940: case 942: case 944: case 946: case 948: case 950: case 952: case 954: case 956: case 958: case 960: case 962: case 964: case 966: case 968: case 970: case 972: case 974: case 976: case 978: case 980: case 982: case 984: case 986: case 988: case 990: case 992: case 994: case 996: case 998: case 1e3: case 1002: case 1004: case 1006: case 1008: case 1010: case 1012: case 1014: case 1016: case 1018: case 1020: case 1022: case 1024: case 1026: case 1028: case 1030: case 1032: case 1034: case 1036: case 1038: case 1040: case 1042: case 1044: case 1046: case 1048: case 1050: case 1052: case 1054: case 1056: case 1058: case 1060: case 1062: case 1064: case 1066: case 1068: case 1070: case 1072: case 1074: case 1076: case 1078: case 1080: case 1082: case 1084: case 1086: case 1088: case 1090: case 1092: case 1094: case 1096: case 1098: case 1100: case 1102: case 1104: case 1106: case 1108: case 1110: case 1112: case 1114: case 1116: case 1118: case 1120: case 1122: case 1124: case 1126: case 1128: case 1130: case 1132: case 1134: case 1136: case 1138: case 1140: case 1142: case 1144: case 1146: case 1148: case 1150: case 1152: case 1154: case 1156: case 1158: case 1160: case 1162: case 1164: case 1166: case 1168: case 1170: case 1172: case 1174: case 1176: case 1178: case 1180: case 1182: case 1184: case 1186: case 1188: case 1190: case 1192: case 1194: case 1196: case 1198: case 1200: case 1202: case 1204: case 1206: case 1208: case 1210: case 1212: case 1214: case 1216: case 1218: case 1220: case 1222: case 1224: case 1226: case 1228: case 1230: case 1232: case 1234: case 1236: case 1238: case 1240: case 1242: case 1244: case 1246: case 1248: case 1250: case 1252: case 1254: case 1256: case 1258: case 1260: case 1262: case 1264: case 1266: case 1268: case 1270: case 1272: case 1274: case 1276: case 1278: case 1280: case 1282: case 1284: case 1286: case 1288: case 1290: case 1292: case 1294: case 1296: case 1298: case 1300: case 1302: case 1304: case 1306: case 1308: case 1310: case 1312: case 1314: case 1316: case 1318: case 1320: case 1322: case 1324: case 1326: case 1328: case 1330: case 1332: case 1334: case 1336: case 1338: case 1340: case 1342: case 1344: case 1346: case 1348: case 1350: case 1352: case 1354: case 1356: case 1358: case 1360: case 1362: case 1364: case 1366: case 1368: case 1370: case 1372: case 1374: case 1376: case 1378: case 1380: case 1382: case 1384: case 1386: case 1388: case 1390: case 1392: case 1394: case 1396: case 1398: case 1400: case 1402: case 1404: case 1406: case 1408: case 1410: case 1412: case 1414: case 1416: case 1418: case 1420: case 1422: case 1424: case 1426: case 1428: case 1430: case 1432: case 1434: case 1436: case 1438: case 1440: case 1442: case 1444: case 1446: case 1448: case 1450: case 1452: case 1454: case 1456: case 1458: case 1460: case 1462: case 1464: case 1466: case 1468: case 1470: case 1472: case 1474: case 1476: case 1478: case 1480: case 1482: case 1484: case 1486: case 1488: case 1490: case 1492: case 1494: case 1496: case 1498: case 1500: case 1502: case 1504: case 1506: case 1508: case 1510: case 1512: case 1514: case 1516: case 1518: case 1520: case 1522: case 1524: case 1526: case 1528: case 1530: case 1532: case 1534: case 1536: case 1538: case 1540: case 1542: case 1544: case 1546: case 1548: case 1550: case 1552: case 1554: case 1556: case 1558: case 1560: case 1562: case 1564: case 1566: case 1568: case 1570: case 1572: case 1574: case 1576: case 1578: case 1580: case 1582: case 1584: case 1586: case 1588: case 1590: case 1592: case 1594: case 1596: case 1598: case 1600: case 1602: case 1604: case 1606: case 1608: case 1610: case 1612: case 1614: case 1616: case 1618: case 1620: case 1622: case 1624: case 1626: case 1628: case 1630: case 1632: case 1634: case 1636: case 1638: case 1640: case 1642: case 1644: case 1646: case 1648: case 1650: case 1652: case 1654: case 1656: case 1658: case 1660: case 1662: case 1664: case 1666: case 1668: case 1670: case 1672: case 1674: case 1676: case 1678: case 1680: case 1682: case 1684: case 1686: case 1688: case 1690: case 1692: case 1694: case 1696: case 1698: case 1700: case 1702: case 1704: case 1706: case 1708: case 1710: case 1712: case 1714: case 1716: case 1718: case 1720: case 1722: case 1724: case 1726: case 1728: case 1730: case 1732: case 1734: case 1736: case 1738: case 1740: case 1742: case 1744: case 1746: case 1748: case 1750: case 1752: case 1754: case 1756: case 1758: case 1760: case 1762: case 1764: case 1766: case 1768: case 1770: case 1772: case 1774: case 1776: case 1778: case 1780: case 1782: case 1784: case 1786: case 1788: case 1790: case 1792: case 1794: case 1796: case 1798: case 1800: case 1802: case 1804: case 1806: case 1808: case 1810: case 1812: case 1814: case 1816: case 1818: case 1820: case 1822: case 1824: case 1826: case 1828: case 1830: case 1832: case 1834: case 1836: case 1838: case 1840: case 1842: case 1844: case 1846: case 1848: case 1850: case 1852: case 1854: case 1856: case 1858: case 1860: case 1862: case 1864: case 1866: case 1868: case 1870: case 1872: case 1874: case 1876: case 1878: case 1880: case 1882: case 1884: case 1886: case 1888: case 1890: case 1892: case 1894: case 1896: case 1898: case 1900: case 1902: case 1904: case 1906: case 1908: case 1910: case 1912: case 1914: case 1916: case 1918: case 1920: case 1922: case 1924: case 1926: case 1928: case 1930: case 1932: case 1934: case 1936: case 1938: case 1940: case 1942: case 1944: case 1946: case 1948: case 1950: case 1952: case 1954: case 1956: case 1958: case 1960: case 1962: case 1964: case 1966: case 1968: case 1970: case 1972: case 1974: case 1976: case 1978: case 1980: case 1982: case 1984: case 1986: case 1988: case 1990: case 1992: case 1994: case 1996: case 1998: case 2e3: case 2002: case 2004: case 2006: case 2008: case 2010: case 2012: case 2014: case 2016: case 2018: case 2020: case 2022: case 2024: case 2026: case 2028: case 2030: case 2032: case 2034: case 2036: case 2038: case 2040: case 2042: case 2044: case 2046: case 2048: case 2050: case 2052: case 2054: case 2056: case 2058: case 2060: case 2062: case 2064: case 2066: case 2068: case 2070: case 2072: case 2074: case 2076: case 2078: case 2080: case 2082: case 2084: case 2086: case 2088: case 2090: case 2092: case 2094: case 2096: case 2098: case 2100: case 2102: case 2104: case 2106: case 2108: case 2110: case 2112: case 2114: case 2116: case 2118: case 2120: case 2122: case 2124: case 2126: case 2128: case 2130: case 2132: case 2134: case 2136: case 2138: case 2140: case 2142: case 2144: case 2146: case 2148: case 2150: case 2152: case 2154: case 2156: case 2158: case 2160: case 2162: case 2164: case 2166: case 2168: case 2170: case 2172: case 2174: case 2176: case 2178: case 2180: case 2182: case 2184: case 2186: case 2188: case 2190: case 2192: case 2194: case 2196: case 2198: case 2200: case 2202: case 2204: case 2206: case 2208: case 2210: case 2212: case 2214: case 2216: case 2218: case 2220: case 2222: case 2224: case 2226: case 2228: case 2230: case 2232: case 2234: case 2236: case 2238: case 2240: case 2242: case 2244: case 2246: case 2248: case 2250: case 2252: case 2254: case 2256: case 2258: case 2260: case 2262: case 2264: case 2266: case 2268: case 2270: case 2272: case 2274: case 2276: case 2278: case 2280: case 2282: case 2284: case 2286: case 2288: case 2290: case 2292: case 2294: case 2296: case 2298: case 2300: case 2302: case 2304: case 2306: case 2308: case 2310: case 2312: case 2314: case 2316: case 2318: case 2320: case 2322: case 2324: case 2326: case 2328: case 2330: case 2332: case 2334: case 2336: case 2338: case 2340: case 2342: case 2344: case 2346: case 2348: case 2350: case 2352: case 2354: case 2356: case 2358: case 2360: case 2362: case 2364: case 2366: case 2368: case 2370: case 2372: case 2374: case 2376: case 2378: case 2380: case 2382: case 2384: case 2386: case 2388: case 2390: case 2392: case 2394: case 2396: case 2398: case 2400: case 2402: case 2404: case 2406: case 2408: case 2410: case 2412: case 2414: case 2416: case 2418: case 2420: case 2422: case 2424: case 2426: case 2428: case 2430: case 2432: case 2434: case 2436: case 2438: case 2440: case 2442: case 2444: case 2446: case 2448: case 2450: case 2452: case 2454: case 2456: case 2458: case 2460: case 2462: case 2464: case 2466: case 2468: case 2470: case 2472: case 2474: case 2476: case 2478: case 2480: case 2482: case 2484: case 2486: case 2488: case 2490: case 2492: case 2494: case 2496: case 2498: case 2500: case 2502: case 2504: case 2506: case 2508: case 2510: case 2512: case 2514: case 2516: case 2518: case 2520: case 2522: case 2524: case 2526: case 2528: case 2530: case 2532: case 2534: case 2536: case 2538: case 2540: case 2542: case 2544: case 2546: case 2548: case 2550: case 2552: case 2554: case 2556: case 2558: case 2560: case 2562: case 2564: case 2566: case 2568: case 2570: case 2572: case 2574: case 2576: case 2578: case 2580: case 2582: case 2584: case 2586: case 2588: case 2590: case 2592: case 2594: case 2596: case 2598: case 2600: case 2602: case 2604: case 2606: case 2608: case 2610: case 2612: case 2614: case 2616: case 2618: case 2620: case 2622: case 2624: case 2626: case 2628: case 2630: case 2632: case 2634: case 2636: case 2638: case 2640: case 2642: case 2644: case 2646: case 2648: case 2650: case 2652: case 2654: case 2656: case 2658: case 2660: case 2662: case 2664: case 2666: case 2668: case 2670: case 2672: case 2674: case 2676: case 2678: case 2680: case 2682: case 2684: case 2686: case 2688: case 2690: case 2692: case 2694: case 2696: case 2698: case 2700: case 2702: case 2704: case 2706: case 2708: case 2710: case 2712: case 2714: case 2716: case 2718: case 2720: case 2722: case 2724: case 2726: case 2728: case 2730: case 2732: case 2734: case 2736: case 2738: case 2740: case 2742: case 2744: case 2746: case 2748: case 2750: case 2752: case 2754: case 2756: case 2758: case 2760: case 2762: case 2764: case 2766: case 2768: case 2770: case 2772: case 2774: case 2776: case 2778: case 2780: case 2782: case 2784: case 2786: case 2788: case 2790: case 2792: case 2794: case 2796: case 2798: case 2800: case 2802: case 2804: case 2806: case 2808: case 2810: case 2812: case 2814: case 2816: case 2818: case 2820: case 2822: case 2824: case 2826: case 2828: case 2830: case 2832: case 2834: case 2836: case 2838: case 2840: case 2842: case 2844: case 2846: case 2848: case 2850: case 2852: case 2854: case 2856: case 2858: case 2860: case 2862: case 2864: case 2866: case 2868: case 2870: case 2872: case 2874: case 2876: case 2878: case 2880: case 2882: case 2884: case 2886: case 2888: case 2890: case 2892: case 2894: case 2896: case 2898: case 2900: case 2902: case 2904: case 2906: case 2908: case 2910: case 2912: case 2914: case 2916: case 2918: case 2920: case 2922: case 2924: case 2926: case 2928: case 2930: case 2932: case 2934: case 2936: case 2938: case 2940: case 2942: case 2944: case 2946: case 2948: case 2950: case 2952: case 2954: case 2956: case 2958: case 2960: case 2962: case 2964: case 2966: case 2968: case 2970: case 2972: case 2974: case 2976: case 2978: case 2980: case 2982: case 2984: case 2986: case 2988: case 2990: case 2992: case 2994: case 2996: case 2998: case 3e3: case 3002: case 3004: case 3006: case 3008: case 3010: case 3012: case 3014: case 3016: case 3018: case 3020: case 3022: case 3024: case 3026: case 3028: case 3030: case 3032: case 3034: case 3036: case 3038: case 3040: case 3042: case 3044: case 3046: case 3048: case 3050: case 3052: case 3054: case 3056: case 3058: case 3060: case 3062: case 3064: case 3066: case 3068: case 3070: case 3072: case 3074: case 3076: case 3078: case 3080: case 3082: case 3084: case 3086: case 3088: case 3090: case 3092: case 3094: case 3096: case 3098: case 3100: case 3102: case 3104: case 3106: case 3108: case 3110: case 3112: case 3114: case 3116: case 3118: case 3120: case 3122: case 3124: case 3126: case 3128: case 3130: case 3132: case 3134: case 3136: case 3138: case 3140: case 3142: case 3144: case 3146: case 3148: case 3150: case 3152: case 3154: case 3156: case 3158: case 3160: case 3162: case 3164: case 3166: case 3168: case 3170: case 3172: case 3174: case 3176: case 3178: case 3180: case 3182: case 3184: case 3186: case 3188: case 3190: case 3192: case 3194: case 3196: case 3198: case 3200: case 3202: case 3204: case 3206: case 3208: case 3210: case 3212: case 3214: case 3216: case 3218: case 3220: case 3222: case 3224: case 3226: case 3228: case 3230: case 3232: case 3234: case 3236: case 3238: case 3240: case 3242: case 3244: case 3246: case 3248: case 3250: case 3252: case 3254: case 3256: case 3258: case 3260: case 3262: case 3264: case 3266: case 3268: case 3270: case 3272: case 3274: case 3276: case 3278: case 3280: case 3282: case 3284: case 3286: case 3288: case 3290: case 3292: case 3294: case 3296: case 3298: case 3300: case 3302: case 3304: case 3306: case 3308: case 3310: case 3312: case 3314: case 3316: case 3318: case 3320: case 3322: case 3324: case 3326: case 3328: case 3330: case 3332: case 3334: case 3336: case 3338: case 3340: case 3342: case 3344: case 3346: case 3348: case 3350: case 3352: case 3354: case 3356: case 3358: case 3360: case 3362: case 3364: case 3366: case 3368: case 3370: case 3372: case 3374: case 3376: case 3378: case 3380: case 3382: case 3384: case 3386: case 3388: case 3390: case 3392: case 3394: case 3396: case 3398: case 3400: case 3402: case 3404: case 3406: case 3408: case 3410: case 3412: case 3414: case 3416: case 3418: case 3420: case 3422: case 3424: case 3426: case 3428: case 3430: case 3432: case 3434: case 3436: case 3438: case 3440: case 3442: case 3444: case 3446: case 3448: case 3450: case 3452: case 3454: case 3456: case 3458: case 3460: case 3462: case 3464: case 3466: case 3468: case 3470: case 3472: case 3474: case 3476: case 3478: case 3480: case 3482: case 3484: case 3486: case 3488: case 3490: case 3492: case 3494: case 3496: case 3498: case 3500: case 3502: case 3504: case 3506: case 3508: case 3510: case 3512: case 3514: case 3516: case 3518: case 3520: case 3522: case 3524: case 3526: case 3528: case 3530: case 3532: case 3534: case 3536: case 3538: case 3540: case 3542: case 3544: case 3546: case 3548: case 3550: case 3552: case 3554: case 3556: case 3558: case 3560: case 3562: case 3564: case 3566: case 3568: case 3570: case 3572: case 3574: case 3576: case 3578: case 3580: case 3582: case 3584: case 3586: case 3588: case 3590: case 3592: case 3594: case 3596: case 3598: case 3600: case 3602: case 3604: case 3606: case 3608: case 3610: case 3612: case 3614: case 3616: case 3618: case 3620: case 3622: case 3624: case 3626: case 3628: case 3630: case 3632: case 3634: case 3636: case 3638: case 3640: case 3642: case 3644: case 3646: case 3648: case 3650: case 3652: case 3654: case 3656: case 3658: case 3660: case 3662: case 3664: case 3666: case 3668: case 3670: case 3672: case 3674: case 3676: case 3678: case 3680: case 3682: case 3684: case 3686: case 3688: case 3690: case 3692: case 3694: case 3696: case 3698: case 3700: case 3702: case 3704: case 3706: case 3708: case 3710: case 3712: case 3714: case 3716: case 3718: case 3720: case 3722: case 3724: case 3726: case 3728: case 3730: case 3732: case 3734: case 3736: case 3738: case 3740: case 3742: case 3744: case 3746: case 3748: case 3750: case 3752: case 3754: case 3756: case 3758: case 3760: case 3762: case 3764: case 3766: case 3768: case 3770: case 3772: case 3774: case 3776: case 3778: case 3780: case 3782: case 3784: case 3786: case 3788: case 3790: case 3792: case 3794: case 3796: case 3798: case 3800: case 3802: case 3804: case 3806: case 3808: case 3810: case 3812: case 3814: case 3816: case 3818: case 3820: case 3822: case 3824: case 3826: case 3828: case 3830: case 3832: case 3834: case 3836: case 3838: case 3840: case 3842: case 3844: case 3846: case 3848: case 3850: case 3852: case 3854: case 3856: case 3858: case 3860: case 3862: case 3864: case 3866: case 3868: case 3870: case 3872: case 3874: case 3876: case 3878: case 3880: case 3882: case 3884: case 3886: case 3888: case 3890: case 3892: case 3894: case 3896: case 3898: case 3900: case 3902: case 3904: case 3906: case 3908: case 3910: case 3912: case 3914: case 3916: case 3918: case 3920: case 3922: case 3924: case 3926: case 3928: case 3930: case 3932: case 3934: case 3936: case 3938: case 3940: case 3942: case 3944: case 3946: case 3948: case 3950: case 3952: case 3954: case 3956: case 3958: case 3960: case 3962: case 3964: case 3966: case 3968: case 3970: case 3972: case 3974: case 3976: case 3978: case 3980: case 3982: case 3984: case 3986: case 3988: case 3990: case 3992: case 3994: case 3996: case 3998: case 4e3: case 4002: case 4004: case 4006: case 4008: case 4010: case 4012: case 4014: case 4016: case 4018: case 4020: case 4022: case 4024: case 4026: case 4028: case 4030: case 4032: case 4034: case 4036: case 4038: case 4040: case 4042: case 4044: case 4046: case 4048: case 4050: case 4052: case 4054: case 4056: case 4058: case 4060: case 4062: case 4064: case 4066: case 4068: case 4070: case 4072: case 4074: case 4076: case 4078: case 4080: case 4082: case 4084: case 4086: case 4088: case 4090: case 4092: case 4094: case 4096: case 4098: case 4100: case 4102: case 4104: case 4106: case 4108: case 4110: case 4112: case 4114: case 4116: case 4118: case 4120: case 4122: case 4124: case 4126: case 4128: case 4130: case 4132: case 4134: case 4136: case 4138: case 4140: case 4142: case 4144: case 4146: case 4148: case 4150: case 4152: case 4154: case 4156: case 4158: case 4160: case 4162: case 4164: case 4166: case 4168: case 4170: case 4172: case 4174: case 4176: case 4178: case 4180: case 4182: case 4184: case 4186: case 4188: case 4190: case 4192: case 4194: case 4196: case 4198: case 4200: case 4202: case 4204: case 4206: case 4208: case 4210: case 4212: case 4214: case 4216: case 4218: case 4220: case 4222: case 4224: case 4226: case 4228: case 4230: case 4232: case 4234: case 4236: case 4238: case 4240: case 4242: case 4244: case 4246: case 4248: case 4250: case 4252: case 4254: case 4256: case 4258: case 4260: case 4262: case 4264: case 4266: case 4268: case 4270: case 4272: case 4274: case 4276: case 4278: case 4280: case 4282: case 4284: case 4286: case 4288: case 4290: case 4292: case 4294: case 4296: case 4298: case 4300: case 4302: case 4304: case 4306: case 4308: case 4310: case 4312: case 4314: case 4316: case 4318: case 4320: case 4322: case 4324: case 4326: case 4328: case 4330: case 4332: case 4334: case 4336: case 4338: case 4340: case 4342: case 4344: case 4346: case 4348: case 4350: case 4352: case 4354: case 4356: case 4358: case 4360: case 4362: case 4364: case 4366: case 4368: case 4370: case 4372: case 4374: case 4376: case 4378: case 4380: case 4382: case 4384: case 4386: case 4388: case 4390: case 4392: case 4394: case 4396: case 4398: case 4400: case 4402: case 4404: case 4406: case 4408: case 4410: case 4412: case 4414: case 4416: case 4418: case 4420: case 4422: case 4424: case 4426: case 4428: case 4430: case 4432: case 4434: case 4436: case 4438: case 4440: case 4442: case 4444: case 4446: case 4448: case 4450: case 4452: case 4454: case 4456: case 4458: case 4460: case 4462: case 4464: case 4466: case 4468: case 4470: case 4472: case 4474: case 4476: case 4478: case 4480: case 4482: case 4484: case 4486: case 4488: case 4490: case 4492: case 4494: case 4496: case 4498: case 4500: case 4502: case 4504: case 4506: case 4508: case 4510: case 4512: case 4514: case 4516: case 4518: case 4520: case 4522: case 4524: case 4526: case 4528: case 4530: case 4532: case 4534: case 4536: case 4538: case 4540: case 4542: case 4544: case 4546: case 4548: case 4550: case 4552: case 4554: case 4556: case 4558: case 4560: case 4562: case 4564: case 4566: case 4568: case 4570: case 4572: case 4574: case 4576: case 4578: case 4580: case 4582: case 4584: case 4586: case 4588: case 4590: case 4592: case 4594: case 4596: case 4598: case 4600: case 4602: case 4604: case 4606: case 4608: case 4610: case 4612: case 4614: case 4616: case 4618: case 4620: case 4622: case 4624: case 4626: case 4628: case 4630: case 4632: case 4634: case 4636: case 4638: case 4640: case 4642: case 4644: case 4646: case 4648: case 4650: case 4652: case 4654: case 4656: case 4658: case 4660: case 4662: case 4664: case 4666: case 4668: case 4670: case 4672: case 4674: case 4676: case 4678: case 4680: case 4682: case 4684: case 4686: case 4688: case 4690: case 4692: case 4694: case 4696: case 4698: case 4700: case 4702: case 4704: case 4706: case 4708: case 4710: case 4712: case 4714: case 4716: case 4718: case 4720: case 4722: case 4724: case 4726: case 4728: case 4730: case 4732: case 4734: case 4736: case 4738: case 4740: case 4742: case 4744: case 4746: case 4748: case 4750: case 4752: case 4754: case 4756: case 4758: case 4760: case 4762: case 4764: case 4766: case 4768: case 4770: case 4772: case 4774: case 4776: case 4778: case 4780: case 4782: case 4784: case 4786: case 4788: case 4790: case 4792: case 4794: case 4796: case 4798: case 4800: case 4802: case 4804: case 4806: case 4808: case 4810: case 4812: case 4814: case 4816: case 4818: case 4820: case 4822: case 4824: case 4826: case 4828: case 4830: case 4832: case 4834: case 4836: case 4838: case 4840: case 4842: case 4844: case 4846: case 4848: case 4850: case 4852: case 4854: case 4856: case 4858: case 4860: case 4862: case 4864: case 4866: case 4868: case 4870: case 4872: case 4874: case 4876: case 4878: case 4880: case 4882: case 4884: case 4886: case 4888: case 4890: case 4892: case 4894: case 4896: case 4898: case 4900: case 4902: case 4904: case 4906: case 4908: case 4910: case 4912: case 4914: case 4916: case 4918: case 4920: case 4922: case 4924: case 4926: case 4928: case 4930: case 4932: case 4934: case 4936: case 4938: case 4940: case 4942: case 4944: case 4946: case 4948: case 4950: case 4952: case 4954: case 4956: case 4958: case 4960: case 4962: case 4964: case 4966: case 4968: case 4970: case 4972: case 4974: case 4976: case 4978: case 4980: case 4982: case 4984: case 4986: case 4988: case 4990: case 4992: case 4994: case 4996: case 4998: case 5e3: case 5002: case 5004: case 5006: case 5008: case 5010: case 5012: case 5014: case 5016: case 5018: case 5020: case 5022: case 5024: case 5026: case 5028: case 5030: case 5032: case 5034: case 5036: case 5038: case 5040: case 5042: case 5044: case 5046: case 5048: case 5050: case 5052: case 5054: case 5056: case 5058: case 5060: case 5062: case 5064: case 5066: case 5068: case 5070: case 5072: case 5074: case 5076: case 5078: case 5080: case 5082: case 5084: case 5086: case 5088: case 5090: case 5092: case 5094: case 5096: case 5098: case 5100: case 5102: case 5104: case 5106: case 5108: case 5110: case 5112: case 5114: case 5116: case 5118: case 5120: case 5122: case 5124: case 5126: case 5128: case 5130: case 5132: case 5134: case 5136: case 5138: case 5140: case 5142: case 5144: case 5146: case 5148: case 5150: case 5152: case 5154: case 5156: case 5158: case 5160: case 5162: case 5164: case 5166: case 5168: case 5170: case 5172: case 5174: case 5176: case 5178: case 5180: case 5182: case 5184: case 5186: case 5188: case 5190: case 5192: case 5194: case 5196: case 5198: case 5200: case 5202: case 5204: case 5206: case 5208: case 5210: case 5212: case 5214: case 5216: case 5218: case 5220: case 5222: case 5224: case 5226: case 5228: case 5230: case 5232: case 5234: case 5236: case 5238: case 5240: case 5242: case 5244: case 5246: case 5248: case 5250: case 5252: case 5254: case 5256: case 5258: case 5260: case 5262: case 5264: case 5266: case 5268: case 5270: case 5272: case 5274: case 5276: case 5278: case 5280: case 5282: case 5284: case 5286: case 5288: case 5290: case 5292: case 5294: case 5296: case 5298: case 5300: case 5302: case 5304: case 5306: case 5308: case 5310: case 5312: case 5314: case 5316: case 5318: case 5320: case 5322: case 5324: case 5326: case 5328: case 5330: case 5332: case 5334: case 5336: case 5338: case 5340: case 5342: case 5344: case 5346: case 5348: case 5350: case 5352: case 5354: case 5356: case 5358: case 5360: case 5362: case 5364: case 5366: case 5368: case 5370: case 5372: case 5374: case 5376: case 5378: case 5380: case 5382: case 5384: case 5386: case 5388: case 5390: case 5392: case 5394: case 5396: case 5398: case 5400: case 5402: case 5404: case 5406: case 5408: case 5410: case 5412: case 5414: case 5416: case 5418: case 5420: case 5422: case 5424: case 5426: case 5428: case 5430: case 5432: case 5434: case 5436: case 5438: case 5440: case 5442: case 5444: case 5446: case 5448: case 5450: case 5452: case 5454: case 5456: case 5458: case 5460: case 5462: case 5464: case 5466: case 5468: case 5470: case 5472: case 5474: case 5476: case 5478: case 5480: case 5482: case 5484: case 5486: case 5488: case 5490: case 5492: case 5494: case 5496: case 5498: case 5500: case 5502: case 5504: case 5506: case 5508: case 5510: case 5512: case 5514: case 5516: case 5518: case 5520: case 5522: case 5524: case 5526: case 5528: case 5530: case 5532: case 5534: case 5536: case 5538: case 5540: case 5542: case 5544: case 5546: case 5548: case 5550: case 5552: case 5554: case 5556: case 5558: case 5560: case 5562: case 5564: case 5566: case 5568: case 5570: case 5572: case 5574: case 5576: case 5578: case 5580: case 5582: case 5584: case 5586: case 5588: case 5590: case 5592: case 5594: case 5596: case 5598: case 5600: case 5602: case 5604: case 5606: case 5608: case 5610: case 5612: case 5614: case 5616: case 5618: case 5620: case 5622: case 5624: case 5626: case 5628: case 5630: case 5632: case 5634: case 5636: case 5638: case 5640: case 5642: case 5644: case 5646: case 5648: case 5650: case 5652: case 5654: case 5656: case 5658: case 5660: case 5662: case 5664: case 5666: case 5668: case 5670: case 5672: case 5674: case 5676: case 5678: case 5680: case 5682: case 5684: case 5686: case 5688: case 5690: case 5692: case 5694: case 5696: case 5698: case 5700: case 5702: case 5704: case 5706: case 5708: case 5710: case 5712: case 5714: case 5716: case 5718: case 5720: case 5722: case 5724: case 5726: case 5728: case 5730: case 5732: case 5734: case 5736: case 5738: case 5740: case 5742: case 5744: case 5746: case 5748: case 5750: case 5752: case 5754: case 5756: case 5758: case 5760: case 5762: case 5764: case 5766: case 5768: case 5770: case 5772: case 5774: case 5776: case 5778: case 5780: case 5782: case 5784: case 5786: case 5788: case 5790: case 5792: case 5794: case 5796: case 5798: case 5800: case 5802: case 5804: case 5806: case 5808: case 5810: case 5812: case 5814: case 5816: case 5818: case 5820: case 5822: case 5824: case 5826: case 5828: case 5830: case 5832: case 5834: case 5836: case 5838: case 5840: case 5842: case 5844: case 5846: case 5848: case 5850: case 5852: case 5854: case 5856: case 5858: case 5860: case 5862: case 5864: case 5866: case 5868: case 5870: case 5872: case 5874: case 5876: case 5878: case 5880: case 5882: case 5884: case 5886: case 5888: case 5890: case 5892: case 5894: case 5896: case 5898: case 5900: case 5902: case 5904: case 5906: case 5908: case 5910: case 5912: case 5914: case 5916: case 5918: case 5920: case 5922: case 5924: case 5926: case 5928: case 5930: case 5932: case 5934: case 5936: case 5938: case 5940: case 5942: case 5944: case 5946: case 5948: case 5950: case 5952: case 5954: case 5956: case 5958: case 5960: case 5962: case 5964: case 5966: case 5968: case 5970: case 5972: case 5974: case 5976: case 5978: case 5980: case 5982: case 5984: case 5986: case 5988: case 5990: case 5992: case 5994: case 5996: case 5998: case 6e3: case 6002: case 6004: case 6006: case 6008: case 6010: case 6012: case 6014: case 6016: case 6018: case 6020: case 6022: case 6024: case 6026: case 6028: case 6030: case 6032: case 6034: case 6036: case 6038: case 6040: case 6042: case 6044: case 6046: case 6048: case 6050: case 6052: case 6054: case 6056: case 6058: case 6060: case 6062: case 6064: case 6066: case 6068: case 6070: case 6072: case 6074: case 6076: case 6078: case 6080: case 6082: case 6084: case 6086: case 6088: case 6090: case 6092: case 6094: case 6096: case 6098: case 6100: case 6102: case 6104: case 6106: case 6108: case 6110: case 6112: case 6114: case 6116: case 6118: case 6120: case 6122: case 6124: case 6126: case 6128: case 6130: case 6132: case 6134: case 6136: case 6138: case 6140: case 6142: case 6144: case 6146: case 6148: case 6150: case 6152: case 6154: case 6156: case 6158: case 6160: case 6162: case 6164: case 6166: case 6168: case 6170: case 6172: case 6174: case 6176: case 6178: case 6180: case 6182: case 6184: case 6186: case 6188: case 6190: case 6192: case 6194: case 6196: case 6198: case 6200: case 6202: case 6204: case 6206: case 6208: case 6210: case 6212: case 6214: case 6216: case 6218: case 6220: case 6222: case 6224: case 6226: case 6228: case 6230: case 6232: case 6234: case 6236: case 6238: case 6240: case 6242: case 6244: case 6246: case 6248: case 6250: case 6252: case 6254: case 6256: case 6258: case 6260: case 6262: case 6264: case 6266: case 6268: case 6270: case 6272: case 6274: case 6276: case 6278: case 6280: case 6282: case 6284: case 6286: case 6288: case 6290: case 6292: case 6294: case 6296: case 6298: case 6300: case 6302: case 6304: case 6306: case 6308: case 6310: case 6312: case 6314: case 6316: case 6318: case 6320: case 6322: case 6324: case 6326: case 6328: case 6330: case 6332: case 6334: case 6336: case 6338: case 6340: case 6342: case 6344: case 6346: case 6348: case 6350: case 6352: case 6354: case 6356: case 6358: case 6360: case 6362: case 6364: case 6366: case 6368: case 6370: case 6372: case 6374: case 6376: case 6378: case 6380: case 6382: case 6384: case 6386: case 6388: case 6390: case 6392: case 6394: case 6396: case 6398: case 6400: case 6402: case 6404: case 6406: case 6408: case 6410: case 6412: case 6414: case 6416: case 6418: case 6420: case 6422: case 6424: case 6426: case 6428: case 6430: case 6432: case 6434: case 6436: case 6438: case 6440: case 6442: case 6444: case 6446: case 6448: case 6450: case 6452: case 6454: case 6456: case 6458: case 6460: case 6462: case 6464: case 6466: case 6468: case 6470: case 6472: case 6474: case 6476: case 6478: case 6480: case 6482: case 6484: case 6486: case 6488: case 6490: case 6492: case 6494: case 6496: case 6498: case 6500: case 6502: case 6504: case 6506: case 6508: case 6510: case 6512: case 6514: case 6516: case 6518: case 6520: case 6522: case 6524: case 6526: case 6528: case 6530: case 6532: case 6534: case 6536: case 6538: case 6540: case 6542: case 6544: case 6546: case 6548: case 6550: case 6552: case 6554: case 6556: case 6558: case 6560: case 6562: case 6564: case 6566: case 6568: case 6570: case 6572: case 6574: case 6576: case 6578: case 6580: case 6582: case 6584: case 6586: case 6588: case 6590: case 6592: case 6594: case 6596: case 6598: case 6600: case 6602: case 6604: case 6606: case 6608: case 6610: case 6612: case 6614: case 6616: case 6618: case 6620: case 6622: case 6624: case 6626: case 6628: case 6630: case 6632: case 6634: case 6636: case 6638: case 6640: case 6642: case 6644: case 6646: case 6648: case 6650: case 6652: case 6654: case 6656: case 6658: case 6660: case 6662: case 6664: case 6666: case 6668: case 6670: case 6672: case 6674: case 6676: case 6678: case 6680: case 6682: case 6684: case 6686: case 6688: case 6690: case 6692: case 6694: case 6696: case 6698: case 6700: case 6702: case 6704: case 6706: case 6708: case 6710: case 6712: case 6714: case 6716: case 6718: case 6720: case 6722: case 6724: case 6726: case 6728: case 6730: case 6732: case 6734: case 6736: case 6738: case 6740: case 6742: case 6744: case 6746: case 6748: case 6750: case 6752: case 6754: case 6756: case 6758: case 6760: case 6762: case 6764: case 6766: case 6768: case 6770: case 6772: case 6774: case 6776: case 6778: case 6780: case 6782: case 6784: case 6786: case 6788: case 6790: case 6792: case 6794: case 6796: case 6798: case 6800: case 6802: case 6804: case 6806: case 6808: case 6810: case 6812: case 6814: case 6816: case 6818: case 6820: case 6822: case 6824: case 6826: case 6828: case 6830: case 6832: case 6834: case 6836: case 6838: case 6840: case 6842: case 6844: case 6846: case 6848: case 6850: case 6852: case 6854: case 6856: case 6858: case 6860: case 6862: case 6864: case 6866: case 6868: case 6870: case 6872: case 6874: case 6876: case 6878: case 6880: case 6882: case 6884: case 6886: case 6888: case 6890: case 6892: case 6894: case 6896: case 6898: case 6900: case 6902: case 6904: case 6906: case 6908: case 6910: case 6912: case 6914: case 6916: case 6918: case 6920: case 6922: case 6924: case 6926: case 6928: case 6930: case 6932: case 6934: case 6936: case 6938: case 6940: case 6942: case 6944: case 6946: case 6948: case 6950: case 6952: case 6954: case 6956: case 6958: case 6960: case 6962: case 6964: case 6966: case 6968: case 6970: case 6972: case 6974: case 6976: case 6978: case 6980: case 6982: case 6984: case 6986: case 6988: case 6990: case 6992: case 6994: case 6996: case 6998: case 7e3: case 7002: case 7004: case 7006: case 7008: case 7010: case 7012: case 7014: case 7016: case 7018: case 7020: case 7022: case 7024: case 7026: case 7028: case 7030: case 7032: case 7034: case 7036: case 7038: case 7040: case 7042: case 7044: case 7046: case 7048: case 7050: case 7052: case 7054: case 7056: case 7058: case 7060: case 7062: case 7064: case 7066: case 7068: case 7070: case 7072: case 7074: case 7076: case 7078: case 7080: case 7082: case 7084: case 7086: case 7088: case 7090: case 7092: case 7094: case 7096: case 7098: case 7100: case 7102: case 7104: case 7106: case 7108: case 7110: case 7112: case 7114: case 7116: case 7118: case 7120: case 7122: case 7124: case 7126: case 7128: case 7130: case 7132: case 7134: case 7136: case 7138: case 7140: case 7142: case 7144: case 7146: case 7148: case 7150: case 7152: case 7154: case 7156: case 7158: case 7160: case 7162: case 7164: case 7166: case 7168: case 7170: case 7172: case 7174: case 7176: case 7178: case 7180: case 7182: case 7184: case 7186: case 7188: case 7190: case 7192: case 7194: case 7196: case 7198: case 7200: case 7202: case 7204: case 7206: case 7208: case 7210: case 7212: case 7214: case 7216: case 7218: case 7220: case 7222: case 7224: case 7226: case 7228: case 7230: case 7232: case 7234: case 7236: case 7238: case 7240: case 7242: case 7244: case 7246: case 7248: case 7250: case 7252: case 7254: case 7256: case 7258: case 7260: case 7262: case 7264: case 7266: case 7268: case 7270: case 7272: case 7274: case 7276: case 7278: case 7280: case 7282: case 7284: case 7286: case 7288: case 7290: case 7292: case 7294: case 7296: case 7298: case 7300: case 7302: case 7304: case 7306: case 7308: case 7310: case 7312: case 7314: case 7316: case 7318: case 7320: case 7322: case 7324: case 7326: case 7328: case 7330: case 7332: case 7334: case 7336: case 7338: case 7340: case 7342: case 7344: case 7346: case 7348: case 7350: case 7352: case 7354: case 7356: case 7358: case 7360: case 7362: case 7364: case 7366: case 7368: case 7370: case 7372: case 7374: case 7376: case 7378: case 7380: case 7382: case 7384: case 7386: case 7388: case 7390: case 7392: case 7394: case 7396: case 7398: case 7400: case 7402: case 7404: case 7406: case 7408: case 7410: case 7412: case 7414: case 7416: case 7418: case 7420: case 7422: case 7424: case 7426: case 7428: case 7430: case 7432: case 7434: case 7436: case 7438: case 7440: case 7442: case 7444: case 7446: case 7448: case 7450: case 7452: case 7454: case 7456: case 7458: case 7460: case 7462: case 7464: case 7466: case 7468: case 7470: case 7472: case 7474: case 7476: case 7478: case 7480: case 7482: case 7484: case 7486: case 7488: case 7490: case 7492: case 7494: case 7496: case 7498: case 7500: case 7502: case 7504: case 7506: case 7508: case 7510: case 7512: case 7514: case 7516: case 7518: case 7520: case 7522: case 7524: case 7526: case 7528: case 7530: case 7532: case 7534: case 7536: case 7538: case 7540: case 7542: case 7544: case 7546: case 7548: case 7550: case 7552: case 7554: case 7556: case 7558: case 7560: case 7562: case 7564: case 7566: case 7568: case 7570: case 7572: case 7574: case 7576: case 7578: case 7580: case 7582: case 7584: case 7586: case 7588: case 7590: case 7592: case 7594: case 7596: case 7598: case 7600: case 7602: case 7604: case 7606: case 7608: case 7610: case 7612: case 7614: case 7616: case 7618: case 7620: case 7622: case 7624: case 7626: case 7628: case 7630: case 7632: case 7634: case 7636: case 7638: case 7640: case 7642: case 7644: case 7646: case 7648: case 7650: case 7652: case 7654: case 7656: case 7658: case 7660: case 7662: case 7664: case 7666: case 7668: case 7670: case 7672: case 7674: case 7676: case 7678: case 7680: case 7682: case 7684: case 7686: case 7688: case 7690: case 7692: case 7694: case 7696: case 7698: case 7700: case 7702: case 7704: case 7706: case 7708: case 7710: case 7712: case 7714: case 7716: case 7718: case 7720: case 7722: case 7724: case 7726: case 7728: case 7730: case 7732: case 7734: case 7736: case 7738: case 7740: case 7742: case 7744: case 7746: case 7748: case 7750: case 7752: case 7754: case 7756: case 7758: case 7760: case 7762: case 7764: case 7766: case 7768: case 7770: case 7772: case 7774: case 7776: case 7778: case 7780: case 7782: case 7784: case 7786: case 7788: case 7790: case 7792: case 7794: case 7796: case 7798: case 7800: case 7802: case 7804: case 7806: case 7808: case 7810: case 7812: case 7814: case 7816: case 7818: case 7820: case 7822: case 7824: case 7826: case 7828: case 7830: case 7832: case 7834: case 7836: case 7838: case 7840: case 7842: case 7844: case 7846: case 7848: case 7850: case 7852: case 7854: case 7856: case 7858: case 7860: case 7862: case 7864: case 7866: case 7868: case 7870: case 7872: case 7874: case 7876: case 7878: case 7880: case 7882: case 7884: case 7886: case 7888: case 7890: case 7892: case 7894: case 7896: case 7898: case 7900: case 7902: case 7904: case 7906: case 7908: case 7910: case 7912: case 7914: case 7916: case 7918: case 7920: case 7922: case 7924: case 7926: case 7928: case 7930: case 7932: case 7934: case 7936: case 7938: case 7940: case 7942: case 7944: case 7946: case 7948: case 7950: case 7952: case 7954: case 7956: case 7958: case 7960: case 7962: case 7964: case 7966: case 7968: case 7970: case 7972: case 7974: case 7976: case 7978: case 7980: case 7982: case 7984: case 7986: case 7988: case 7990: case 7992: case 7994: case 7996: case 7998: case 8e3: case 8002: case 8004: case 8006: case 8008: case 8010: case 8012: case 8014: case 8016: case 8018: case 8020: case 8022: case 8024: case 8026: case 8028: case 8030: case 8032: case 8034: case 8036: case 8038: case 8040: case 8042: case 8044: case 8046: case 8048: case 8050: case 8052: case 8054: case 8056: case 8058: case 8060: case 8062: case 8064: case 8066: case 8068: case 8070: case 8072: case 8074: case 8076: case 8078: case 8080: case 8082: case 8084: case 8086: case 8088: case 8090: case 8092: case 8094: case 8096: case 8098: case 8100: case 8102: case 8104: case 8106: case 8108: case 8110: case 8112: case 8114: case 8116: case 8118: case 8120: case 8122: case 8124: case 8126: case 8128: case 8130: case 8132: case 8134: case 8136: case 8138: case 8140: case 8142: case 8144: case 8146: case 8148: case 8150: case 8152: case 8154: case 8156: case 8158: case 8160: case 8162: case 8164: case 8166: case 8168: case 8170: case 8172: case 8174: case 8176: case 8178: case 8180: case 8182: case 8184: case 8186: case 8188: case 8190: case 8192: case 8194: case 8196: case 8198: case 8200: case 8202: case 8204: case 8206: case 8208: case 8210: case 8212: case 8214: case 8216: case 8218: case 8220: case 8222: case 8224: case 8226: case 8228: case 8230: case 8232: case 8234: case 8236: case 8238: case 8240: case 8242: case 8244: case 8246: case 8248: case 8250: case 8252: case 8254: case 8256: case 8258: case 8260: case 8262: case 8264: case 8266: case 8268: case 8270: case 8272: case 8274: case 8276: case 8278: case 8280: case 8282: case 8284: case 8286: case 8288: case 8290: case 8292: case 8294: case 8296: case 8298: case 8300: case 8302: case 8304: case 8306: case 8308: case 8310: case 8312: case 8314: case 8316: case 8318: case 8320: case 8322: case 8324: case 8326: case 8328: case 8330: case 8332: case 8334: case 8336: case 8338: case 8340: case 8342: case 8344: case 8346: case 8348: case 8350: case 8352: case 8354: case 8356: case 8358: case 8360: case 8362: case 8364: case 8366: case 8368: case 8370: case 8372: case 8374: case 8376: case 8378: case 8380: case 8382: case 8384: case 8386: case 8388: case 8390: case 8392: case 8394: case 8396: case 8398: case 8400: case 8402: case 8404: case 8406: case 8408: case 8410: case 8412: case 8414: case 8416: case 8418: case 8420: case 8422: case 8424: case 8426: case 8428: case 8430: case 8432: case 8434: case 8436: case 8438: case 8440: case 8442: case 8444: case 8446: case 8448: case 8450: case 8452: case 8454: case 8456: case 8458: case 8460: case 8462: case 8464: case 8466: case 8468: case 8470: case 8472: case 8474: case 8476: case 8478: case 8480: case 8482: case 8484: case 8486: case 8488: case 8490: case 8492: case 8494: case 8496: case 8498: case 8500: case 8502: case 8504: case 8506: case 8508: case 8510: case 8512: case 8514: case 8516: case 8518: case 8520: case 8522: case 8524: case 8526: case 8528: case 8530: case 8532: case 8534: case 8536: case 8538: case 8540: case 8542: case 8544: case 8546: case 8548: case 8550: case 8552: case 8554: case 8556: case 8558: case 8560: case 8562: case 8564: case 8566: case 8568: case 8570: case 8572: case 8574: case 8576: case 8578: case 8580: case 8582: case 8584: case 8586: case 8588: case 8590: case 8592: case 8594: case 8596: case 8598: case 8600: case 8602: case 8604: case 8606: case 8608: case 8610: case 8612: case 8614: case 8616: case 8618: case 8620: case 8622: case 8624: case 8626: case 8628: case 8630: case 8632: case 8634: case 8636: case 8638: case 8640: case 8642: case 8644: case 8646: case 8648: case 8650: case 8652: case 8654: case 8656: case 8658: case 8660: case 8662: case 8664: case 8666: case 8668: case 8670: case 8672: case 8674: case 8676: case 8678: case 8680: case 8682: case 8684: case 8686: case 8688: case 8690: case 8692: case 8694: case 8696: case 8698: case 8700: case 8702: case 8704: case 8706: case 8708: case 8710: case 8712: case 8714: case 8716: case 8718: case 8720: case 8722: case 8724: case 8726: case 8728: case 8730: case 8732: case 8734: case 8736: case 8738: case 8740: case 8742: case 8744: case 8746: case 8748: case 8750: case 8752: case 8754: case 8756: case 8758: case 8760: case 8762: case 8764: case 8766: case 8768: case 8770: case 8772: case 8774: case 8776: case 8778: case 8780: case 8782: case 8784: case 8786: case 8788: case 8790: case 8792: case 8794: case 8796: case 8798: case 8800: case 8802: case 8804: case 8806: case 8808: case 8810: case 8812: case 8814: case 8816: case 8818: case 8820: case 8822: case 8824: case 8826: case 8828: case 8830: case 8832: case 8834: case 8836: case 8838: case 8840: case 8842: case 8844: case 8846: case 8848: case 8850: case 8852: case 8854: case 8856: case 8858: case 8860: case 8862: case 8864: case 8866: case 8868: case 8870: case 8872: case 8874: case 8876: case 8878: case 8880: case 8882: case 8884: case 8886: case 8888: case 8890: case 8892: case 8894: case 8896: case 8898: case 8900: case 8902: case 8904: case 8906: case 8908: case 8910: case 8912: case 8914: case 8916: case 8918: case 8920: case 8922: case 8924: case 8926: case 8928: case 8930: case 8932: case 8934: case 8936: case 8938: case 8940: case 8942: case 8944: case 8946: case 8948: case 8950: case 8952: case 8954: case 8956: case 8958: case 8960: case 8962: case 8964: case 8966: case 8968: case 8970: case 8972: case 8974: case 8976: case 8978: case 8980: case 8982: case 8984: case 8986: case 8988: case 8990: case 8992: case 8994: case 8996: case 8998: case 9e3: case 9002: case 9004: case 9006: case 9008: case 9010: case 9012: case 9014: case 9016: case 9018: case 9020: case 9022: case 9024: case 9026: case 9028: case 9030: case 9032: case 9034: case 9036: case 9038: case 9040: case 9042: case 9044: case 9046: case 9048: case 9050: case 9052: case 9054: case 9056: case 9058: case 9060: case 9062: case 9064: case 9066: case 9068: case 9070: case 9072: case 9074: case 9076: case 9078: case 9080: case 9082: case 9084: case 9086: case 9088: case 9090: case 9092: case 9094: case 9096: case 9098: case 9100: case 9102: case 9104: case 9106: case 9108: case 9110: case 9112: case 9114: case 9116: case 9118: case 9120: case 9122: case 9124: case 9126: case 9128: case 9130: case 9132: case 9134: case 9136: case 9138: case 9140: case 9142: case 9144: case 9146: case 9148: case 9150: case 9152: case 9154: case 9156: case 9158: case 9160: case 9162: case 9164: case 9166: case 9168: case 9170: case 9172: case 9174: case 9176: case 9178: case 9180: case 9182: case 9184: case 9186: case 9188: case 9190: case 9192: case 9194: case 9196: case 9198: case 9200: case 9202: case 9204: case 9206: case 9208: case 9210: case 9212: case 9214: case 9216: case 9218: case 9220: case 9222: case 9224: case 9226: case 9228: case 9230: case 9232: case 9234: case 9236: case 9238: case 9240: case 9242: case 9244: case 9246: case 9248: case 9250: case 9252: case 9254: case 9256: case 9258: case 9260: case 9262: case 9264: case 9266: case 9268: case 9270: case 9272: case 9274: case 9276: case 9278: case 9280: case 9282: case 9284: case 9286: case 9288: case 9290: case 9292: case 9294: case 9296: case 9298: case 9300: case 9302: case 9304: case 9306: case 9308: case 9310: case 9312: case 9314: case 9316: case 9318: case 9320: case 9322: case 9324: case 9326: case 9328: case 9330: case 9332: case 9334: case 9336: case 9338: case 9340: case 9342: case 9344: case 9346: case 9348: case 9350: case 9352: case 9354: case 9356: case 9358: case 9360: case 9362: case 9364: case 9366: case 9368: case 9370: case 9372: case 9374: case 9376: case 9378: case 9380: case 9382: case 9384: case 9386: case 9388: case 9390: case 9392: case 9394: case 9396: case 9398: case 9400: case 9402: case 9404: case 9406: case 9408: case 9410: case 9412: case 9414: case 9416: case 9418: case 9420: case 9422: case 9424: case 9426: case 9428: case 9430: case 9432: case 9434: case 9436: case 9438: case 9440: case 9442: case 9444: case 9446: case 9448: case 9450: case 9452: case 9454: case 9456: case 9458: case 9460: case 9462: case 9464: case 9466: case 9468: case 9470: case 9472: case 9474: case 9476: case 9478: case 9480: case 9482: case 9484: case 9486: case 9488: case 9490: case 9492: case 9494: case 9496: case 9498: case 9500: case 9502: case 9504: case 9506: case 9508: case 9510: case 9512: case 9514: case 9516: case 9518: case 9520: case 9522: case 9524: case 9526: case 9528: case 9530: case 9532: case 9534: case 9536: case 9538: case 9540: case 9542: case 9544: case 9546: case 9548: case 9550: case 9552: case 9554: case 9556: case 9558: case 9560: case 9562: case 9564: case 9566: case 9568: case 9570: case 9572: case 9574: case 9576: case 9578: case 9580: case 9582: case 9584: case 9586: case 9588: case 9590: case 9592: case 9594: case 9596: case 9598: case 9600: case 9602: case 9604: case 9606: case 9608: case 9610: case 9612: case 9614: case 9616: case 9618: case 9620: case 9622: case 9624: case 9626: case 9628: case 9630: case 9632: case 9634: case 9636: case 9638: case 9640: case 9642: case 9644: case 9646: case 9648: case 9650: case 9652: case 9654: case 9656: case 9658: case 9660: case 9662: case 9664: case 9666: case 9668: case 9670: case 9672: case 9674: case 9676: case 9678: case 9680: case 9682: case 9684: case 9686: case 9688: case 9690: case 9692: case 9694: case 9696: case 9698: case 9700: case 9702: case 9704: case 9706: case 9708: case 9710: case 9712: case 9714: case 9716: case 9718: case 9720: case 9722: case 9724: case 9726: case 9728: case 9730: case 9732: case 9734: case 9736: case 9738: case 9740: case 9742: case 9744: case 9746: case 9748: case 9750: case 9752: case 9754: case 9756: case 9758: case 9760: case 9762: case 9764: case 9766: case 9768: case 9770: case 9772: case 9774: case 9776: case 9778: case 9780: case 9782: case 9784: case 9786: case 9788: case 9790: case 9792: case 9794: case 9796: case 9798: case 9800: case 9802: case 9804: case 9806: case 9808: case 9810: case 9812: case 9814: case 9816: case 9818: case 9820: case 9822: case 9824: case 9826: case 9828: case 9830: case 9832: case 9834: case 9836: case 9838: case 9840: case 9842: case 9844: case 9846: case 9848: case 9850: case 9852: case 9854: case 9856: case 9858: case 9860: case 9862: case 9864: case 9866: case 9868: case 9870: case 9872: case 9874: case 9876: case 9878: case 9880: case 9882: case 9884: case 9886: case 9888: case 9890: case 9892: case 9894: case 9896: case 9898: case 9900: case 9902: case 9904: case 9906: case 9908: case 9910: case 9912: case 9914: case 9916: case 9918: case 9920: case 9922: case 9924: case 9926: case 9928: case 9930: case 9932: case 9934: case 9936: case 9938: case 9940: case 9942: case 9944: case 9946: case 9948: case 9950: case 9952: case 9954: case 9956: case 9958: case 9960: case 9962: case 9964: case 9966: case 9968: case 9970: case 9972: case 9974: case 9976: case 9978: case 9980: case 9982: case 9984: case 9986: case 9988: case 9990: case 9992: case 9994: case 9996: case 9998: case 1e4: case 10002: case 10004: case 10006: case 10008: case 10010: case 10012: case 10014: case 10016: case 10018: case 10020: case 10022: case 10024: case 10026: case 10028: case 10030: case 10032: case 10034: case 10036: case 10038: case 10040: case 10042: case 10044: case 10046: case 10048: case 10050: case 10052: case 10054: case 10056: case 10058: case 10060: case 10062: case 10064: case 10066: case 10068: case 10070: case 10072: case 10074: case 10076: case 10078: case 10080: case 10082: case 10084: case 10086: case 10088: case 10090: case 10092: case 10094: case 10096: case 10098: case 10100: case 10102: case 10104: case 10106: case 10108: case 10110: case 10112: case 10114: case 10116: case 10118: case 10120: case 10122: case 10124: case 10126: case 10128: case 10130: case 10132: case 10134: case 10136: case 10138: case 10140: case 10142: case 10144: case 10146: case 10148: case 10150: case 10152: case 10154: case 10156: case 10158: case 10160: case 10162: case 10164: case 10166: case 10168: case 10170: case 10172: case 10174: case 10176: case 10178: case 10180: case 10182: case 10184: case 10186: case 10188: case 10190: case 10192: case 10194: case 10196: case 10198: case 10200: case 10202: case 10204: case 10206: case 10208: case 10210: case 10212: case 10214: case 10216: case 10218: case 10220: case 10222: case 10224: case 10226: case 10228: case 10230: case 10232: case 10234: case 10236: case 10238: case 10240: case 10242: case 10244: case 10246: case 10248: case 10250: case 10252: case 10254: case 10256: case 10258: case 10260: case 10262: case 10264: case 10266: case 10268: case 10270: case 10272: case 10274: case 10276: case 10278: case 10280: case 10282: case 10284: case 10286: case 10288: case 10290: case 10292: case 10294: case 10296: case 10298: case 10300: case 10302: case 10304: case 10306: case 10308: case 10310: case 10312: case 10314: case 10316: case 10318: case 10320: case 10322: case 10324: case 10326: case 10328: case 10330: case 10332: case 10334: case 10336: case 10338: case 10340: case 10342: case 10344: case 10346: case 10348: case 10350: case 10352: case 10354: case 10356: case 10358: case 10360: case 10362: case 10364: case 10366: case 10368: case 10370: case 10372: case 10374: case 10376: case 10378: case 10380: case 10382: case 10384: case 10386: case 10388: case 10390: case 10392: case 10394: case 10396: case 10398: case 10400: case 10402: case 10404: case 10406: case 10408: case 10410: case 10412: case 10414: case 10416: case 10418: case 10420: case 10422: case 10424: case 10426: case 10428: case 10430: case 10432: case 10434: case 10436: case 10438: case 10440: case 10442: case 10444: case 10446: case 10448: case 10450: case 10452: case 10454: case 10456: case 10458: case 10460: case 10462: case 10464: case 10466: case 10468: case 10470: case 10472: case 10474: case 10476: case 10478: case 10480: case 10482: case 10484: case 10486: case 10488: case 10490: case 10492: case 10494: case 10496: case 10498: case 10500: case 10502: case 10504: case 10506: case 10508: case 10510: case 10512: case 10514: case 10516: case 10518: case 10520: case 10522: case 10524: case 10526: case 10528: case 10530: case 10532: case 10534: case 10536: case 10538: case 10540: case 10542: case 10544: case 10546: case 10548: case 10550: case 10552: case 10554: case 10556: case 10558: case 10560: case 10562: case 10564: case 10566: case 10568: case 10570: case 10572: case 10574: case 10576: case 10578: case 10580: case 10582: case 10584: case 10586: case 10588: case 10590: case 10592: case 10594: case 10596: case 10598: case 10600: case 10602: case 10604: case 10606: case 10608: case 10610: case 10612: case 10614: case 10616: case 10618: case 10620: case 10622: case 10624: case 10626: case 10628: case 10630: case 10632: case 10634: case 10636: case 10638: case 10640: case 10642: case 10644: case 10646: case 10648: case 10650: case 10652: case 10654: case 10656: case 10658: case 10660: case 10662: case 10664: case 10666: case 10668: case 10670: case 10672: case 10674: case 10676: case 10678: case 10680: case 10682: case 10684: case 10686: case 10688: case 10690: case 10692: case 10694: case 10696: case 10698: case 10700: case 10702: case 10704: case 10706: case 10708: case 10710: case 10712: case 10714: case 10716: case 10718: case 10720: case 10722: case 10724: case 10726: case 10728: case 10730: case 10732: case 10734: case 10736: case 10738: case 10740: case 10742: case 10744: case 10746: case 10748: case 10750: case 10752: case 10754: case 10756: case 10758: case 10760: case 10762: case 10764: case 10766: case 10768: case 10770: case 10772: case 10774: case 10776: case 10778: case 10780: case 10782: case 10784: case 10786: case 10788: case 10790: case 10792: case 10794: case 10796: case 10798: case 10800: case 10802: case 10804: case 10806: case 10808: case 10810: case 10812: case 10814: case 10816: case 10818: case 10820: case 10822: case 10824: case 10826: case 10828: case 10830: case 10832: case 10834: case 10836: case 10838: case 10840: case 10842: case 10844: case 10846: case 10848: case 10850: case 10852: case 10854: case 10856: case 10858: case 10860: case 10862: case 10864: case 10866: case 10868: case 10870: case 10872: case 10874: case 10876: case 10878: case 10880: case 10882: case 10884: case 10886: case 10888: case 10890: case 10892: case 10894: case 10896: case 10898: case 10900: case 10902: case 10904: case 10906: case 10908: case 10910: case 10912: case 10914: case 10916: case 10918: case 10920: case 10922: case 10924: case 10926: case 10928: case 10930: case 10932: case 10934: case 10936: case 10938: case 10940: case 10942: case 10944: case 10946: case 10948: case 10950: case 10952: case 10954: case 10956: case 10958: case 10960: case 10962: case 10964: case 10966: case 10968: case 10970: case 10972: case 10974: case 10976: case 10978: case 10980: case 10982: case 10984: case 10986: case 10988: case 10990: case 10992: case 10994: case 10996: case 10998: case 11e3: case 11002: case 11004: case 11006: case 11008: case 11010: case 11012: case 11014: case 11016: case 11018: case 11020: case 11022: case 11024: case 11026: case 11028: case 11030: case 11032: case 11034: case 11036: case 11038: case 11040: case 11042: case 11044: case 11046: case 11048: case 11050: case 11052: case 11054: case 11056: case 11058: case 11060: case 11062: case 11064: case 11066: case 11068: case 11070: case 11072: case 11074: case 11076: case 11078: case 11080: case 11082: case 11084: case 11086: case 11088: case 11090: case 11092: case 11094: case 11096: case 11098: case 11100: case 11102: case 11104: case 11106: case 11108: case 11110: case 11112: case 11114: case 11116: case 11118: case 11120: case 11122: case 11124: case 11126: case 11128: case 11130: case 11132: case 11134: case 11136: case 11138: case 11140: case 11142: case 11144: case 11146: case 11148: case 11150: case 11152: case 11154: case 11156: case 11158: case 11160: case 11162: case 11164: case 11166: case 11168: case 11170: case 11172: case 11174: case 11176: case 11178: case 11180: case 11182: case 11184: case 11186: case 11188: case 11190: case 11192: case 11194: case 11196: case 11198: case 11200: case 11202: case 11204: case 11206: case 11208: case 11210: case 11212: case 11214: case 11216: case 11218: case 11220: case 11222: case 11224: case 11226: case 11228: case 11230: case 11232: case 11234: case 11236: case 11238: case 11240: case 11242: case 11244: case 11246: case 11248: case 11250: case 11252: case 11254: case 11256: case 11258: case 11260: case 11262: case 11264: case 11266: case 11268: case 11270: case 11272: case 11274: case 11276: case 11278: case 11280: case 11282: case 11284: case 11286: case 11288: case 11290: case 11292: case 11294: case 11296: case 11298: case 11300: case 11302: case 11304: case 11306: case 11308: case 11310: case 11312: case 11314: case 11316: case 11318: case 11320: case 11322: case 11324: case 11326: case 11328: case 11330: case 11332: case 11334: case 11336: case 11338: case 11340: case 11342: case 11344: case 11346: case 11348: case 11350: case 11352: case 11354: case 11356: case 11358: case 11360: case 11362: case 11364: case 11366: case 11368: case 11370: case 11372: case 11374: case 11376: case 11378: case 11380: case 11382: case 11384: case 11386: case 11388: case 11390: case 11392: case 11394: case 11396: case 11398: case 11400: case 11402: case 11404: case 11406: case 11408: case 11410: case 11412: case 11414: case 11416: case 11418: case 11420: case 11422: case 11424: case 11426: case 11428: case 11430: case 11432: case 11434: case 11436: case 11438: case 11440: case 11442: case 11444: case 11446: case 11448: case 11450: case 11452: case 11454: case 11456: case 11458: case 11460: case 11462: case 11464: case 11466: case 11468: case 11470: case 11472: case 11474: case 11476: case 11478: case 11480: case 11482: case 11484: case 11486: case 11488: case 11490: case 11492: case 11494: case 11496: case 11498: case 11500: case 11502: case 11504: case 11506: case 11508: case 11510: case 11512: case 11514: case 11516: case 11518: case 11520: case 11522: case 11524: case 11526: case 11528: case 11530: case 11532: case 11534: case 11536: case 11538: case 11540: case 11542: case 11544: case 11546: case 11548: case 11550: case 11552: case 11554: case 11556: case 11558: case 11560: case 11562: case 11564: case 11566: case 11568: case 11570: case 11572: case 11574: case 11576: case 11578: case 11580: case 11582: case 11584: case 11586: case 11588: case 11590: case 11592: case 11594: case 11596: case 11598: case 11600: case 11602: case 11604: case 11606: case 11608: case 11610: case 11612: case 11614: case 11616: case 11618: case 11620: case 11622: case 11624: case 11626: case 11628: case 11630: case 11632: case 11634: case 11636: case 11638: case 11640: case 11642: case 11644: case 11646: case 11648: case 11650: case 11652: case 11654: case 11656: case 11658: case 11660: case 11662: case 11664: case 11666: case 11668: case 11670: case 11672: case 11674: case 11676: case 11678: case 11680: case 11682: case 11684: case 11686: case 11688: case 11690: case 11692: case 11694: case 11696: case 11698: case 11700: case 11702: case 11704: case 11706: case 11708: case 11710: case 11712: case 11714: case 11716: case 11718: case 11720: case 11722: case 11724: case 11726: case 11728: case 11730: case 11732: case 11734: case 11736: case 11738: case 11740: case 11742: case 11744: case 11746: case 11748: case 11750: case 11752: case 11754: case 11756: case 11758: case 11760: case 11762: case 11764: case 11766: case 11768: case 11770: case 11772: case 11774: case 11776: case 11778: case 11780: case 11782: case 11784: case 11786: case 11788: case 11790: case 11792: case 11794: case 11796: case 11798: case 11800: case 11802: case 11804: case 11806: case 11808: case 11810: case 11812: case 11814: case 11816: case 11818: case 11820: case 11822: case 11824: case 11826: case 11828: case 11830: case 11832: case 11834: case 11836: case 11838: case 11840: case 11842: case 11844: case 11846: case 11848: case 11850: case 11852: case 11854: case 11856: case 11858: case 11860: case 11862: case 11864: case 11866: case 11868: case 11870: case 11872: case 11874: case 11876: case 11878: case 11880: case 11882: case 11884: case 11886: case 11888: case 11890: case 11892: case 11894: case 11896: case 11898: case 11900: case 11902: case 11904: case 11906: case 11908: case 11910: case 11912: case 11914: case 11916: case 11918: case 11920: case 11922: case 11924: case 11926: case 11928: case 11930: case 11932: case 11934: case 11936: case 11938: case 11940: case 11942: case 11944: case 11946: case 11948: case 11950: case 11952: case 11954: case 11956: case 11958: case 11960: case 11962: case 11964: case 11966: case 11968: case 11970: case 11972: case 11974: case 11976: case 11978: case 11980: case 11982: case 11984: case 11986: case 11988: case 11990: case 11992: case 11994: case 11996: case 11998: case 12e3: case 12002: case 12004: case 12006: case 12008: case 12010: case 12012: case 12014: case 12016: case 12018: case 12020: case 12022: case 12024: case 12026: case 12028: case 12030: case 12032: case 12034: case 12036: case 12038: case 12040: case 12042: case 12044: case 12046: case 12048: case 12050: case 12052: case 12054: case 12056: case 12058: case 12060: case 12062: case 12064: case 12066: case 12068: case 12070: case 12072: case 12074: case 12076: case 12078: case 12080: case 12082: case 12084: case 12086: case 12088: case 12090: case 12092: case 12094: case 12096: case 12098: case 12100: case 12102: case 12104: case 12106: case 12108: case 12110: case 12112: case 12114: case 12116: case 12118: case 12120: case 12122: case 12124: case 12126: case 12128: case 12130: case 12132: case 12134: case 12136: case 12138: case 12140: case 12142: case 12144: case 12146: case 12148: case 12150: case 12152: case 12154: case 12156: case 12158: case 12160: case 12162: case 12164: case 12166: case 12168: case 12170: case 12172: case 12174: case 12176: case 12178: case 12180: case 12182: case 12184: case 12186: case 12188: case 12190: case 12192: case 12194: case 12196: case 12198: case 12200: case 12202: case 12204: case 12206: case 12208: case 12210: case 12212: case 12214: case 12216: case 12218: case 12220: case 12222: case 12224: case 12226: case 12228: case 12230: case 12232: case 12234: case 12236: case 12238: case 12240: case 12242: case 12244: case 12246: case 12248: case 12250: case 12252: case 12254: case 12256: case 12258: case 12260: case 12262: case 12264: case 12266: case 12268: case 12270: case 12272: case 12274: case 12276: case 12278: case 12280: case 12282: case 12284: case 12286: case 12288: case 12290: case 12292: case 12294: case 12296: case 12298: case 12300: case 12302: case 12304: case 12306: case 12308: case 12310: case 12312: case 12314: case 12316: case 12318: case 12320: case 12322: case 12324: case 12326: case 12328: case 12330: case 12332: case 12334: case 12336: case 12338: case 12340: case 12342: case 12344: case 12346: case 12348: case 12350: case 12352: case 12354: case 12356: case 12358: case 12360: case 12362: case 12364: case 12366: case 12368: case 12370: case 12372: case 12374: case 12376: case 12378: case 12380: case 12382: case 12384: case 12386: case 12388: case 12390: case 12392: case 12394: case 12396: case 12398: case 12400: case 12402: case 12404: case 12406: case 12408: case 12410: case 12412: case 12414: case 12416: case 12418: case 12420: case 12422: case 12424: case 12426: case 12428: case 12430: case 12432: case 12434: case 12436: case 12438: case 12440: case 12442: case 12444: case 12446: case 12448: case 12450: case 12452: case 12454: case 12456: case 12458: case 12460: case 12462: case 12464: case 12466: case 12468: case 12470: case 12472: case 12474: case 12476: case 12478: case 12480: case 12482: case 12484: case 12486: case 12488: case 12490: case 12492: case 12494: case 12496: case 12498: case 12500: case 12502: case 12504: case 12506: case 12508: case 12510: case 12512: case 12514: case 12516: case 12518: case 12520: case 12522: case 12524: case 12526: case 12528: case 12530: case 12532: case 12534: case 12536: case 12538: case 12540: case 12542: case 12544: case 12546: case 12548: case 12550: case 12552: case 12554: case 12556: case 12558: case 12560: case 12562: case 12564: case 12566: case 12568: case 12570: case 12572: case 12574: case 12576: case 12578: case 12580: case 12582: case 12584: case 12586: case 12588: case 12590: case 12592: case 12594: case 12596: case 12598: case 12600: case 12602: case 12604: case 12606: case 12608: case 12610: case 12612: case 12614: case 12616: case 12618: case 12620: case 12622: case 12624: case 12626: case 12628: case 12630: case 12632: case 12634: case 12636: case 12638: case 12640: case 12642: case 12644: case 12646: case 12648: case 12650: case 12652: case 12654: case 12656: case 12658: case 12660: case 12662: case 12664: case 12666: case 12668: case 12670: case 12672: case 12674: case 12676: case 12678: case 12680: case 12682: case 12684: case 12686: case 12688: case 12690: case 12692: case 12694: case 12696: case 12698: case 12700: case 12702: case 12704: case 12706: case 12708: case 12710: case 12712: case 12714: case 12716: case 12718: case 12720: case 12722: case 12724: case 12726: case 12728: case 12730: case 12732: case 12734: case 12736: case 12738: case 12740: case 12742: case 12744: case 12746: case 12748: case 12750: case 12752: case 12754: case 12756: case 12758: case 12760: case 12762: case 12764: case 12766: case 12768: case 12770: case 12772: case 12774: case 12776: case 12778: case 12780: case 12782: case 12784: case 12786: case 12788: case 12790: case 12792: case 12794: case 12796: case 12798: case 12800: case 12802: case 12804: case 12806: case 12808: case 12810: case 12812: case 12814: case 12816: case 12818: case 12820: case 12822: case 12824: case 12826: case 12828: case 12830: case 12832: case 12834: case 12836: case 12838: case 12840: case 12842: case 12844: case 12846: case 12848: case 12850: case 12852: case 12854: case 12856: case 12858: case 12860: case 12862: case 12864: case 12866: case 12868: case 12870: case 12872: case 12874: case 12876: case 12878: case 12880: case 12882: case 12884: case 12886: case 12888: case 12890: case 12892: case 12894: case 12896: case 12898: case 12900: case 12902: case 12904: case 12906: case 12908: case 12910: case 12912: case 12914: case 12916: case 12918: case 12920: case 12922: case 12924: case 12926: case 12928: case 12930: case 12932: case 12934: case 12936: case 12938: case 12940: case 12942: case 12944: case 12946: case 12948: case 12950: case 12952: case 12954: case 12956: case 12958: case 12960: case 12962: case 12964: case 12966: case 12968: case 12970: case 12972: case 12974: case 12976: case 12978: case 12980: case 12982: case 12984: case 12986: case 12988: case 12990: case 12992: case 12994: case 12996: case 12998: case 13e3: case 13002: case 13004: case 13006: case 13008: case 13010: case 13012: case 13014: case 13016: case 13018: case 13020: case 13022: case 13024: case 13026: case 13028: case 13030: case 13032: case 13034: case 13036: case 13038: case 13040: case 13042: case 13044: case 13046: case 13048: case 13050: case 13052: case 13054: case 13056: case 13058: case 13060: case 13062: case 13064: case 13066: case 13068: case 13070: case 13072: case 13074: case 13076: case 13078: case 13080: case 13082: case 13084: case 13086: case 13088: case 13090: case 13092: case 13094: case 13096: case 13098: case 13100: case 13102: case 13104: case 13106: case 13108: case 13110: case 13112: case 13114: case 13116: case 13118: case 13120: case 13122: case 13124: case 13126: case 13128: case 13130: case 13132: case 13134: case 13136: case 13138: case 13140: case 13142: case 13144: case 13146: case 13148: case 13150: case 13152: case 13154: case 13156: case 13158: case 13160: case 13162: case 13164: case 13166: case 13168: case 13170: case 13172: case 13174: case 13176: case 13178: case 13180: case 13182: case 13184: case 13186: case 13188: case 13190: case 13192: case 13194: case 13196: case 13198: case 13200: case 13202: case 13204: case 13206: case 13208: case 13210: case 13212: case 13214: case 13216: case 13218: case 13220: case 13222: case 13224: case 13226: case 13228: case 13230: case 13232: case 13234: case 13236: case 13238: case 13240: case 13242: case 13244: case 13246: case 13248: case 13250: case 13252: case 13254: case 13256: case 13258: case 13260: case 13262: case 13264: case 13266: case 13268: case 13270: case 13272: case 13274: case 13276: case 13278: case 13280: case 13282: case 13284: case 13286: case 13288: case 13290: case 13292: case 13294: case 13296: case 13298: case 13300: case 13302: case 13304: case 13306: case 13308: case 13310: case 13312: case 13314: case 13316: case 13318: case 13320: case 13322: case 13324: case 13326: case 13328: case 13330: case 13332: case 13334: case 13336: case 13338: case 13340: case 13342: case 13344: case 13346: case 13348: case 13350: case 13352: case 13354: case 13356: case 13358: case 13360: case 13362: case 13364: case 13366: case 13368: case 13370: case 13372: case 13374: case 13376: case 13378: case 13380: case 13382: case 13384: case 13386: case 13388: case 13390: case 13392: case 13394: case 13396: case 13398: case 13400: case 13402: case 13404: case 13406: case 13408: case 13410: case 13412: case 13414: case 13416: case 13418: case 13420: case 13422: case 13424: case 13426: case 13428: case 13430: case 13432: case 13434: case 13436: case 13438: case 13440: case 13442: case 13444: case 13446: case 13448: case 13450: case 13452: case 13454: case 13456: case 13458: case 13460: case 13462: case 13464: case 13466: case 13468: case 13470: case 13472: case 13474: case 13476: case 13478: case 13480: case 13482: case 13484: case 13486: case 13488: case 13490: case 13492: case 13494: case 13496: case 13498: case 13500: case 13502: case 13504: case 13506: case 13508: case 13510: case 13512: case 13514: case 13516: case 13518: case 13520: case 13522: case 13524: case 13526: case 13528: case 13530: case 13532: case 13534: case 13536: case 13538: case 13540: case 13542: case 13544: case 13546: case 13548: case 13550: case 13552: case 13554: case 13556: case 13558: case 13560: case 13562: case 13564: case 13566: case 13568: case 13570: case 13572: case 13574: case 13576: case 13578: case 13580: case 13582: case 13584: case 13586: case 13588: case 13590: case 13592: case 13594: case 13596: case 13598: case 13600: case 13602: case 13604: case 13606: case 13608: case 13610: case 13612: case 13614: case 13616: case 13618: case 13620: case 13622: case 13624: case 13626: case 13628: case 13630: case 13632: case 13634: case 13636: case 13638: case 13640: case 13642: case 13644: case 13646: case 13648: case 13650: case 13652: case 13654: case 13656: case 13658: case 13660: case 13662: case 13664: case 13666: case 13668: case 13670: case 13672: case 13674: case 13676: case 13678: case 13680: case 13682: case 13684: case 13686: case 13688: case 13690: case 13692: case 13694: case 13696: case 13698: case 13700: case 13702: case 13704: case 13706: case 13708: case 13710: case 13712: case 13714: case 13716: case 13718: case 13720: case 13722: case 13724: case 13726: case 13728: case 13730: case 13732: case 13734: case 13736: case 13738: case 13740: case 13742: case 13744: case 13746: case 13748: case 13750: case 13752: case 13754: case 13756: case 13758: case 13760: case 13762: case 13764: case 13766: case 13768: case 13770: case 13772: case 13774: case 13776: case 13778: case 13780: case 13782: case 13784: case 13786: case 13788: case 13790: case 13792: case 13794: case 13796: case 13798: case 13800: case 13802: case 13804: case 13806: case 13808: case 13810: case 13812: case 13814: case 13816: case 13818: case 13820: case 13822: case 13824: case 13826: case 13828: case 13830: case 13832: case 13834: case 13836: case 13838: case 13840: case 13842: case 13844: case 13846: case 13848: case 13850: case 13852: case 13854: case 13856: case 13858: case 13860: case 13862: case 13864: case 13866: case 13868: case 13870: case 13872: case 13874: case 13876: case 13878: case 13880: case 13882: case 13884: case 13886: case 13888: case 13890: case 13892: case 13894: case 13896: case 13898: case 13900: case 13902: case 13904: case 13906: case 13908: case 13910: case 13912: case 13914: case 13916: case 13918: case 13920: case 13922: case 13924: case 13926: case 13928: case 13930: case 13932: case 13934: case 13936: case 13938: case 13940: case 13942: case 13944: case 13946: case 13948: case 13950: case 13952: case 13954: case 13956: case 13958: case 13960: case 13962: case 13964: case 13966: case 13968: case 13970: case 13972: case 13974: case 13976: case 13978: case 13980: case 13982: case 13984: case 13986: case 13988: case 13990: case 13992: case 13994: case 13996: case 13998: case 14e3: case 14002: case 14004: case 14006: case 14008: case 14010: case 14012: case 14014: case 14016: case 14018: case 14020: case 14022: case 14024: case 14026: case 14028: case 14030: case 14032: case 14034: case 14036: case 14038: case 14040: case 14042: case 14044: case 14046: case 14048: case 14050: case 14052: case 14054: case 14056: case 14058: case 14060: case 14062: case 14064: case 14066: case 14068: case 14070: case 14072: case 14074: case 14076: case 14078: case 14080: case 14082: case 14084: case 14086: case 14088: case 14090: case 14092: case 14094: case 14096: case 14098: case 14100: case 14102: case 14104: case 14106: case 14108: case 14110: case 14112: case 14114: case 14116: case 14118: case 14120: case 14122: case 14124: case 14126: case 14128: case 14130: case 14132: case 14134: case 14136: case 14138: case 14140: case 14142: case 14144: case 14146: case 14148: case 14150: case 14152: case 14154: case 14156: case 14158: case 14160: case 14162: case 14164: case 14166: case 14168: case 14170: case 14172: case 14174: case 14176: case 14178: case 14180: case 14182: case 14184: case 14186: case 14188: case 14190: case 14192: case 14194: case 14196: case 14198: case 14200: case 14202: case 14204: case 14206: case 14208: case 14210: case 14212: case 14214: case 14216: case 14218: case 14220: case 14222: case 14224: case 14226: case 14228: case 14230: case 14232: case 14234: case 14236: case 14238: case 14240: case 14242: case 14244: case 14246: case 14248: case 14250: case 14252: case 14254: case 14256: case 14258: case 14260: case 14262: case 14264: case 14266: case 14268: case 14270: case 14272: case 14274: case 14276: case 14278: case 14280: case 14282: case 14284: case 14286: case 14288: case 14290: case 14292: case 14294: case 14296: case 14298: case 14300: case 14302: case 14304: case 14306: case 14308: case 14310: case 14312: case 14314: case 14316: case 14318: case 14320: case 14322: case 14324: case 14326: case 14328: case 14330: case 14332: case 14334: case 14336: case 14338: case 14340: case 14342: case 14344: case 14346: case 14348: case 14350: case 14352: case 14354: case 14356: case 14358: case 14360: case 14362: case 14364: case 14366: case 14368: case 14370: case 14372: case 14374: case 14376: case 14378: case 14380: case 14382: case 14384: case 14386: case 14388: case 14390: case 14392: case 14394: case 14396: case 14398: case 14400: case 14402: case 14404: case 14406: case 14408: case 14410: case 14412: case 14414: case 14416: case 14418: case 14420: case 14422: case 14424: case 14426: case 14428: case 14430: case 14432: case 14434: case 14436: case 14438: case 14440: case 14442: case 14444: case 14446: case 14448: case 14450: case 14452: case 14454: case 14456: case 14458: case 14460: case 14462: case 14464: case 14466: case 14468: case 14470: case 14472: case 14474: case 14476: case 14478: case 14480: case 14482: case 14484: case 14486: case 14488: case 14490: case 14492: case 14494: case 14496: case 14498: case 14500: case 14502: case 14504: case 14506: case 14508: case 14510: case 14512: case 14514: case 14516: case 14518: case 14520: case 14522: case 14524: case 14526: case 14528: case 14530: case 14532: case 14534: case 14536: case 14538: case 14540: case 14542: case 14544: case 14546: case 14548: case 14550: case 14552: case 14554: case 14556: case 14558: case 14560: case 14562: case 14564: case 14566: case 14568: case 14570: case 14572: case 14574: case 14576: case 14578: case 14580: case 14582: case 14584: case 14586: case 14588: case 14590: case 14592: case 14594: case 14596: case 14598: case 14600: case 14602: case 14604: case 14606: case 14608: case 14610: case 14612: case 14614: case 14616: case 14618: case 14620: case 14622: case 14624: case 14626: case 14628: case 14630: case 14632: case 14634: case 14636: case 14638: case 14640: case 14642: case 14644: case 14646: case 14648: case 14650: case 14652: case 14654: case 14656: case 14658: case 14660: case 14662: case 14664: case 14666: case 14668: case 14670: case 14672: case 14674: case 14676: case 14678: case 14680: case 14682: case 14684: case 14686: case 14688: case 14690: case 14692: case 14694: case 14696: case 14698: case 14700: case 14702: case 14704: case 14706: case 14708: case 14710: case 14712: case 14714: case 14716: case 14718: case 14720: case 14722: case 14724: case 14726: case 14728: case 14730: case 14732: case 14734: case 14736: case 14738: case 14740: case 14742: case 14744: case 14746: case 14748: case 14750: case 14752: case 14754: case 14756: case 14758: case 14760: case 14762: case 14764: case 14766: case 14768: case 14770: case 14772: case 14774: case 14776: case 14778: case 14780: case 14782: case 14784: case 14786: case 14788: case 14790: case 14792: case 14794: case 14796: case 14798: case 14800: case 14802: case 14804: case 14806: case 14808: case 14810: case 14812: case 14814: case 14816: case 14818: case 14820: case 14822: case 14824: case 14826: case 14828: case 14830: case 14832: case 14834: case 14836: case 14838: case 14840: case 14842: case 14844: case 14846: case 14848: case 14850: case 14852: case 14854: case 14856: case 14858: case 14860: case 14862: case 14864: case 14866: case 14868: case 14870: case 14872: case 14874: case 14876: case 14878: case 14880: case 14882: case 14884: case 14886: case 14888: case 14890: case 14892: case 14894: case 14896: case 14898: case 14900: case 14902: case 14904: case 14906: case 14908: case 14910: case 14912: case 14914: case 14916: case 14918: case 14920: case 14922: case 14924: case 14926: case 14928: case 14930: case 14932: case 14934: case 14936: case 14938: case 14940: case 14942: case 14944: case 14946: case 14948: case 14950: case 14952: case 14954: case 14956: case 14958: case 14960: case 14962: case 14964: case 14966: case 14968: case 14970: case 14972: case 14974: case 14976: case 14978: case 14980: case 14982: case 14984: case 14986: case 14988: case 14990: case 14992: case 14994: case 14996: case 14998: case 15e3: case 15002: case 15004: case 15006: case 15008: case 15010: case 15012: case 15014: case 15016: case 15018: case 15020: case 15022: case 15024: case 15026: case 15028: case 15030: case 15032: case 15034: case 15036: case 15038: case 15040: case 15042: case 15044: case 15046: case 15048: case 15050: case 15052: case 15054: case 15056: case 15058: case 15060: case 15062: case 15064: case 15066: case 15068: case 15070: case 15072: case 15074: case 15076: case 15078: case 15080: case 15082: case 15084: case 15086: case 15088: case 15090: case 15092: case 15094: case 15096: case 15098: case 15100: case 15102: case 15104: case 15106: case 15108: case 15110: case 15112: case 15114: case 15116: case 15118: case 15120: case 15122: case 15124: case 15126: case 15128: case 15130: case 15132: case 15134: case 15136: case 15138: case 15140: case 15142: case 15144: case 15146: case 15148: case 15150: case 15152: case 15154: case 15156: case 15158: case 15160: case 15162: case 15164: case 15166: case 15168: case 15170: case 15172: case 15174: case 15176: case 15178: case 15180: case 15182: case 15184: case 15186: case 15188: case 15190: case 15192: case 15194: case 15196: case 15198: case 15200: case 15202: case 15204: case 15206: case 15208: case 15210: case 15212: case 15214: case 15216: case 15218: case 15220: case 15222: case 15224: case 15226: case 15228: case 15230: case 15232: case 15234: case 15236: case 15238: case 15240: case 15242: case 15244: case 15246: case 15248: case 15250: case 15252: case 15254: case 15256: case 15258: case 15260: case 15262: case 15264: case 15266: case 15268: case 15270: case 15272: case 15274: case 15276: case 15278: case 15280: case 15282: case 15284: case 15286: case 15288: case 15290: case 15292: case 15294: case 15296: case 15298: case 15300: case 15302: case 15304: case 15306: case 15308: case 15310: case 15312: case 15314: case 15316: case 15318: case 15320: case 15322: case 15324: case 15326: case 15328: case 15330: case 15332: case 15334: case 15336: case 15338: case 15340: case 15342: case 15344: case 15346: case 15348: case 15350: case 15352: case 15354: case 15356: case 15358: case 15360: case 15362: case 15364: case 15366: case 15368: case 15370: case 15372: case 15374: case 15376: case 15378: case 15380: case 15382: case 15384: case 15386: case 15388: case 15390: case 15392: case 15394: case 15396: case 15398: case 15400: case 15402: case 15404: case 15406: case 15408: case 15410: case 15412: case 15414: case 15416: case 15418: case 15420: case 15422: case 15424: case 15426: case 15428: case 15430: case 15432: case 15434: case 15436: case 15438: case 15440: case 15442: case 15444: case 15446: case 15448: case 15450: case 15452: case 15454: case 15456: case 15458: case 15460: case 15462: case 15464: case 15466: case 15468: case 15470: case 15472: case 15474: case 15476: case 15478: case 15480: case 15482: case 15484: case 15486: case 15488: case 15490: case 15492: case 15494: case 15496: case 15498: case 15500: case 15502: case 15504: case 15506: case 15508: case 15510: case 15512: case 15514: case 15516: case 15518: case 15520: case 15522: case 15524: case 15526: case 15528: case 15530: case 15532: case 15534: case 15536: case 15538: case 15540: case 15542: case 15544: case 15546: case 15548: case 15550: case 15552: case 15554: case 15556: case 15558: case 15560: case 15562: case 15564: case 15566: case 15568: case 15570: case 15572: case 15574: case 15576: case 15578: case 15580: case 15582: case 15584: case 15586: case 15588: case 15590: case 15592: case 15594: case 15596: case 15598: case 15600: case 15602: case 15604: case 15606: case 15608: case 15610: case 15612: case 15614: case 15616: case 15618: case 15620: case 15622: case 15624: case 15626: case 15628: case 15630: case 15632: case 15634: case 15636: case 15638: case 15640: case 15642: case 15644: case 15646: case 15648: case 15650: case 15652: case 15654: case 15656: case 15658: case 15660: case 15662: case 15664: case 15666: case 15668: case 15670: case 15672: case 15674: case 15676: case 15678: case 15680: case 15682: case 15684: case 15686: case 15688: case 15690: case 15692: case 15694: case 15696: case 15698: case 15700: case 15702: case 15704: case 15706: case 15708: case 15710: case 15712: case 15714: case 15716: case 15718: case 15720: case 15722: case 15724: case 15726: case 15728: case 15730: case 15732: case 15734: case 15736: case 15738: case 15740: case 15742: case 15744: case 15746: case 15748: case 15750: case 15752: case 15754: case 15756: case 15758: case 15760: case 15762: case 15764: case 15766: case 15768: case 15770: case 15772: case 15774: case 15776: case 15778: case 15780: case 15782: case 15784: case 15786: case 15788: case 15790: case 15792: case 15794: case 15796: case 15798: case 15800: case 15802: case 15804: case 15806: case 15808: case 15810: case 15812: case 15814: case 15816: case 15818: case 15820: case 15822: case 15824: case 15826: case 15828: case 15830: case 15832: case 15834: case 15836: case 15838: case 15840: case 15842: case 15844: case 15846: case 15848: case 15850: case 15852: case 15854: case 15856: case 15858: case 15860: case 15862: case 15864: case 15866: case 15868: case 15870: case 15872: case 15874: case 15876: case 15878: case 15880: case 15882: case 15884: case 15886: case 15888: case 15890: case 15892: case 15894: case 15896: case 15898: case 15900: case 15902: case 15904: case 15906: case 15908: case 15910: case 15912: case 15914: case 15916: case 15918: case 15920: case 15922: case 15924: case 15926: case 15928: case 15930: case 15932: case 15934: case 15936: case 15938: case 15940: case 15942: case 15944: case 15946: case 15948: case 15950: case 15952: case 15954: case 15956: case 15958: case 15960: case 15962: case 15964: case 15966: case 15968: case 15970: case 15972: case 15974: case 15976: case 15978: case 15980: case 15982: case 15984: case 15986: case 15988: case 15990: case 15992: case 15994: case 15996: case 15998: case 16e3: case 16002: case 16004: case 16006: case 16008: case 16010: case 16012: case 16014: case 16016: case 16018: case 16020: case 16022: case 16024: case 16026: case 16028: case 16030: case 16032: case 16034: case 16036: case 16038: case 16040: case 16042: case 16044: case 16046: case 16048: case 16050: case 16052: case 16054: case 16056: case 16058: case 16060: case 16062: case 16064: case 16066: case 16068: case 16070: case 16072: case 16074: case 16076: case 16078: case 16080: case 16082: case 16084: case 16086: case 16088: case 16090: case 16092: case 16094: case 16096: case 16098: case 16100: case 16102: case 16104: case 16106: case 16108: case 16110: case 16112: case 16114: case 16116: case 16118: case 16120: case 16122: case 16124: case 16126: case 16128: case 16130: case 16132: case 16134: case 16136: case 16138: case 16140: case 16142: case 16144: case 16146: case 16148: case 16150: case 16152: case 16154: case 16156: case 16158: case 16160: case 16162: case 16164: case 16166: case 16168: case 16170: case 16172: case 16174: case 16176: case 16178: case 16180: case 16182: case 16184: case 16186: case 16188: case 16190: case 16192: case 16194: case 16196: case 16198: case 16200: case 16202: case 16204: case 16206: case 16208: case 16210: case 16212: case 16214: case 16216: case 16218: case 16220: case 16222: case 16224: case 16226: case 16228: case 16230: case 16232: case 16234: case 16236: case 16238: case 16240: case 16242: case 16244: case 16246: case 16248: case 16250: case 16252: case 16254: case 16256: case 16258: case 16260: case 16262: case 16264: case 16266: case 16268: case 16270: case 16272: case 16274: case 16276: case 16278: case 16280: case 16282: case 16284: case 16286: case 16288: case 16290: case 16292: case 16294: case 16296: case 16298: case 16300: case 16302: case 16304: case 16306: case 16308: case 16310: case 16312: case 16314: case 16316: case 16318: case 16320: case 16322: case 16324: case 16326: case 16328: case 16330: case 16332: case 16334: case 16336: case 16338: case 16340: case 16342: case 16344: case 16346: case 16348: case 16350: case 16352: case 16354: case 16356: case 16358: case 16360: case 16362: case 16364: case 16366: case 16368: case 16370: case 16372: case 16374: case 16376: case 16378: case 16380: case 16382: case 16384: case 16386: case 16388: case 16390: case 16392: case 16394: case 16396: case 16398: case 16400: case 16402: case 16404: case 16406: case 16408: case 16410: case 16412: case 16414: case 16416: case 16418: case 16420: case 16422: case 16424: case 16426: case 16428: case 16430: case 16432: case 16434: case 16436: case 16438: case 16440: case 16442: case 16444: case 16446: case 16448: case 16450: case 16452: case 16454: case 16456: case 16458: case 16460: case 16462: case 16464: case 16466: case 16468: case 16470: case 16472: case 16474: case 16476: case 16478: case 16480: case 16482: case 16484: case 16486: case 16488: case 16490: case 16492: case 16494: case 16496: case 16498: case 16500: case 16502: case 16504: case 16506: case 16508: case 16510: case 16512: case 16514: case 16516: case 16518: case 16520: case 16522: case 16524: case 16526: case 16528: case 16530: case 16532: case 16534: case 16536: case 16538: case 16540: case 16542: case 16544: case 16546: case 16548: case 16550: case 16552: case 16554: case 16556: case 16558: case 16560: case 16562: case 16564: case 16566: case 16568: case 16570: case 16572: case 16574: case 16576: case 16578: case 16580: case 16582: case 16584: case 16586: case 16588: case 16590: case 16592: case 16594: case 16596: case 16598: case 16600: case 16602: case 16604: case 16606: case 16608: case 16610: case 16612: case 16614: case 16616: case 16618: case 16620: case 16622: case 16624: case 16626: case 16628: case 16630: case 16632: case 16634: case 16636: case 16638: case 16640: case 16642: case 16644: case 16646: case 16648: case 16650: case 16652: case 16654: case 16656: case 16658: case 16660: case 16662: case 16664: case 16666: case 16668: case 16670: case 16672: case 16674: case 16676: case 16678: case 16680: case 16682: case 16684: case 16686: case 16688: case 16690: case 16692: case 16694: case 16696: case 16698: case 16700: case 16702: case 16704: case 16706: case 16708: case 16710: case 16712: case 16714: case 16716: case 16718: case 16720: case 16722: case 16724: case 16726: case 16728: case 16730: case 16732: case 16734: case 16736: case 16738: case 16740: case 16742: case 16744: case 16746: case 16748: case 16750: case 16752: case 16754: case 16756: case 16758: case 16760: case 16762: case 16764: case 16766: case 16768: case 16770: case 16772: case 16774: case 16776: case 16778: case 16780: case 16782: case 16784: case 16786: case 16788: case 16790: case 16792: case 16794: case 16796: case 16798: case 16800: case 16802: case 16804: case 16806: case 16808: case 16810: case 16812: case 16814: case 16816: case 16818: case 16820: case 16822: case 16824: case 16826: case 16828: case 16830: case 16832: case 16834: case 16836: case 16838: case 16840: case 16842: case 16844: case 16846: case 16848: case 16850: case 16852: case 16854: case 16856: case 16858: case 16860: case 16862: case 16864: case 16866: case 16868: case 16870: case 16872: case 16874: case 16876: case 16878: case 16880: case 16882: case 16884: case 16886: case 16888: case 16890: case 16892: case 16894: case 16896: case 16898: case 16900: case 16902: case 16904: case 16906: case 16908: case 16910: case 16912: case 16914: case 16916: case 16918: case 16920: case 16922: case 16924: case 16926: case 16928: case 16930: case 16932: case 16934: case 16936: case 16938: case 16940: case 16942: case 16944: case 16946: case 16948: case 16950: case 16952: case 16954: case 16956: case 16958: case 16960: case 16962: case 16964: case 16966: case 16968: case 16970: case 16972: case 16974: case 16976: case 16978: case 16980: case 16982: case 16984: case 16986: case 16988: case 16990: case 16992: case 16994: case 16996: case 16998: case 17e3: case 17002: case 17004: case 17006: case 17008: case 17010: case 17012: case 17014: case 17016: case 17018: case 17020: case 17022: case 17024: case 17026: case 17028: case 17030: case 17032: case 17034: case 17036: case 17038: case 17040: case 17042: case 17044: case 17046: case 17048: case 17050: case 17052: case 17054: case 17056: case 17058: case 17060: case 17062: case 17064: case 17066: case 17068: case 17070: case 17072: case 17074: case 17076: case 17078: case 17080: case 17082: case 17084: case 17086: case 17088: case 17090: case 17092: case 17094: case 17096: case 17098: case 17100: case 17102: case 17104: case 17106: case 17108: case 17110: case 17112: case 17114: case 17116: case 17118: case 17120: case 17122: case 17124: case 17126: case 17128: case 17130: case 17132: case 17134: case 17136: case 17138: case 17140: case 17142: case 17144: case 17146: case 17148: case 17150: case 17152: case 17154: case 17156: case 17158: case 17160: case 17162: case 17164: case 17166: case 17168: case 17170: case 17172: case 17174: case 17176: case 17178: case 17180: case 17182: case 17184: case 17186: case 17188: case 17190: case 17192: case 17194: case 17196: case 17198: case 17200: case 17202: case 17204: case 17206: case 17208: case 17210: case 17212: case 17214: case 17216: case 17218: case 17220: case 17222: case 17224: case 17226: case 17228: case 17230: case 17232: case 17234: case 17236: case 17238: case 17240: case 17242: case 17244: case 17246: case 17248: case 17250: case 17252: case 17254: case 17256: case 17258: case 17260: case 17262: case 17264: case 17266: case 17268: case 17270: case 17272: case 17274: case 17276: case 17278: case 17280: case 17282: case 17284: case 17286: case 17288: case 17290: case 17292: case 17294: case 17296: case 17298: case 17300: case 17302: case 17304: case 17306: case 17308: case 17310: case 17312: case 17314: case 17316: case 17318: case 17320: case 17322: case 17324: case 17326: case 17328: case 17330: case 17332: case 17334: case 17336: case 17338: case 17340: case 17342: case 17344: case 17346: case 17348: case 17350: case 17352: case 17354: case 17356: case 17358: case 17360: case 17362: case 17364: case 17366: case 17368: case 17370: case 17372: case 17374: case 17376: case 17378: case 17380: case 17382: case 17384: case 17386: case 17388: case 17390: case 17392: case 17394: case 17396: case 17398: case 17400: case 17402: case 17404: case 17406: case 17408: case 17410: case 17412: case 17414: case 17416: case 17418: case 17420: case 17422: case 17424: case 17426: case 17428: case 17430: case 17432: case 17434: case 17436: case 17438: case 17440: case 17442: case 17444: case 17446: case 17448: case 17450: case 17452: case 17454: case 17456: case 17458: case 17460: case 17462: case 17464: case 17466: case 17468: case 17470: case 17472: case 17474: case 17476: case 17478: case 17480: case 17482: case 17484: case 17486: case 17488: case 17490: case 17492: case 17494: case 17496: case 17498: case 17500: case 17502: case 17504: case 17506: case 17508: case 17510: case 17512: case 17514: case 17516: case 17518: case 17520: case 17522: case 17524: case 17526: case 17528: case 17530: case 17532: case 17534: case 17536: case 17538: case 17540: case 17542: case 17544: case 17546: case 17548: case 17550: case 17552: case 17554: case 17556: case 17558: case 17560: case 17562: case 17564: case 17566: case 17568: case 17570: case 17572: case 17574: case 17576: case 17578: case 17580: case 17582: case 17584: case 17586: case 17588: case 17590: case 17592: case 17594: case 17596: case 17598: case 17600: case 17602: case 17604: case 17606: case 17608: case 17610: case 17612: case 17614: case 17616: case 17618: case 17620: case 17622: case 17624: case 17626: case 17628: case 17630: case 17632: case 17634: case 17636: case 17638: case 17640: case 17642: case 17644: case 17646: case 17648: case 17650: case 17652: case 17654: case 17656: case 17658: case 17660: case 17662: case 17664: case 17666: case 17668: case 17670: case 17672: case 17674: case 17676: case 17678: case 17680: case 17682: case 17684: case 17686: case 17688: case 17690: case 17692: case 17694: case 17696: case 17698: case 17700: case 17702: case 17704: case 17706: case 17708: case 17710: case 17712: case 17714: case 17716: case 17718: case 17720: case 17722: case 17724: case 17726: case 17728: case 17730: case 17732: case 17734: case 17736: case 17738: case 17740: case 17742: case 17744: case 17746: case 17748: case 17750: case 17752: case 17754: case 17756: case 17758: case 17760: case 17762: case 17764: case 17766: case 17768: case 17770: case 17772: case 17774: case 17776: case 17778: case 17780: case 17782: case 17784: case 17786: case 17788: case 17790: case 17792: case 17794: case 17796: case 17798: case 17800: case 17802: case 17804: case 17806: case 17808: case 17810: case 17812: case 17814: case 17816: case 17818: case 17820: case 17822: case 17824: case 17826: case 17828: case 17830: case 17832: case 17834: case 17836: case 17838: case 17840: case 17842: case 17844: case 17846: case 17848: case 17850: case 17852: case 17854: case 17856: case 17858: case 17860: case 17862: case 17864: case 17866: case 17868: case 17870: case 17872: case 17874: case 17876: case 17878: case 17880: case 17882: case 17884: case 17886: case 17888: case 17890: case 17892: case 17894: case 17896: case 17898: case 17900: case 17902: case 17904: case 17906: case 17908: case 17910: case 17912: case 17914: case 17916: case 17918: case 17920: case 17922: case 17924: case 17926: case 17928: case 17930: case 17932: case 17934: case 17936: case 17938: case 17940: case 17942: case 17944: case 17946: case 17948: case 17950: case 17952: case 17954: case 17956: case 17958: case 17960: case 17962: case 17964: case 17966: case 17968: case 17970: case 17972: case 17974: case 17976: case 17978: case 17980: case 17982: case 17984: case 17986: case 17988: case 17990: case 17992: case 17994: case 17996: case 17998: case 18e3: case 18002: case 18004: case 18006: case 18008: case 18010: case 18012: case 18014: case 18016: case 18018: case 18020: case 18022: case 18024: case 18026: case 18028: case 18030: case 18032: case 18034: case 18036: case 18038: case 18040: case 18042: case 18044: case 18046: case 18048: case 18050: case 18052: case 18054: case 18056: case 18058: case 18060: case 18062: case 18064: case 18066: case 18068: case 18070: case 18072: case 18074: case 18076: case 18078: case 18080: case 18082: case 18084: case 18086: case 18088: case 18090: case 18092: case 18094: case 18096: case 18098: case 18100: case 18102: case 18104: case 18106: case 18108: case 18110: case 18112: case 18114: case 18116: case 18118: case 18120: case 18122: case 18124: case 18126: case 18128: case 18130: case 18132: case 18134: case 18136: case 18138: case 18140: case 18142: case 18144: case 18146: case 18148: case 18150: case 18152: case 18154: case 18156: case 18158: case 18160: case 18162: case 18164: case 18166: case 18168: case 18170: case 18172: case 18174: case 18176: case 18178: case 18180: case 18182: case 18184: case 18186: case 18188: case 18190: case 18192: case 18194: case 18196: case 18198: case 18200: case 18202: case 18204: case 18206: case 18208: case 18210: case 18212: case 18214: case 18216: case 18218: case 18220: case 18222: case 18224: case 18226: case 18228: case 18230: case 18232: case 18234: case 18236: case 18238: case 18240: case 18242: case 18244: case 18246: case 18248: case 18250: case 18252: case 18254: case 18256: case 18258: case 18260: case 18262: case 18264: case 18266: case 18268: case 18270: case 18272: case 18274: case 18276: case 18278: case 18280: case 18282: case 18284: case 18286: case 18288: case 18290: case 18292: case 18294: case 18296: case 18298: case 18300: case 18302: case 18304: case 18306: case 18308: case 18310: case 18312: case 18314: case 18316: case 18318: case 18320: case 18322: case 18324: case 18326: case 18328: case 18330: case 18332: case 18334: case 18336: case 18338: case 18340: case 18342: case 18344: case 18346: case 18348: case 18350: case 18352: case 18354: case 18356: case 18358: case 18360: case 18362: case 18364: case 18366: case 18368: case 18370: case 18372: case 18374: case 18376: case 18378: case 18380: case 18382: case 18384: case 18386: case 18388: case 18390: case 18392: case 18394: case 18396: case 18398: case 18400: case 18402: case 18404: case 18406: case 18408: case 18410: case 18412: case 18414: case 18416: case 18418: case 18420: case 18422: case 18424: case 18426: case 18428: case 18430: case 18432: case 18434: case 18436: case 18438: case 18440: case 18442: case 18444: case 18446: case 18448: case 18450: case 18452: case 18454: case 18456: case 18458: case 18460: case 18462: case 18464: case 18466: case 18468: case 18470: case 18472: case 18474: case 18476: case 18478: case 18480: case 18482: case 18484: case 18486: case 18488: case 18490: case 18492: case 18494: case 18496: case 18498: case 18500: case 18502: case 18504: case 18506: case 18508: case 18510: case 18512: case 18514: case 18516: case 18518: case 18520: case 18522: case 18524: case 18526: case 18528: case 18530: case 18532: case 18534: case 18536: case 18538: case 18540: case 18542: case 18544: case 18546: case 18548: case 18550: case 18552: case 18554: case 18556: case 18558: case 18560: case 18562: case 18564: case 18566: case 18568: case 18570: case 18572: case 18574: case 18576: case 18578: case 18580: case 18582: case 18584: case 18586: case 18588: case 18590: case 18592: case 18594: case 18596: case 18598: case 18600: case 18602: case 18604: case 18606: case 18608: case 18610: case 18612: case 18614: case 18616: case 18618: case 18620: case 18622: case 18624: case 18626: case 18628: case 18630: case 18632: case 18634: case 18636: case 18638: case 18640: case 18642: case 18644: case 18646: case 18648: case 18650: case 18652: case 18654: case 18656: case 18658: case 18660: case 18662: case 18664: case 18666: case 18668: case 18670: case 18672: case 18674: case 18676: case 18678: case 18680: case 18682: case 18684: case 18686: case 18688: case 18690: case 18692: case 18694: case 18696: case 18698: case 18700: case 18702: case 18704: case 18706: case 18708: case 18710: case 18712: case 18714: case 18716: case 18718: case 18720: case 18722: case 18724: case 18726: case 18728: case 18730: case 18732: case 18734: case 18736: case 18738: case 18740: case 18742: case 18744: case 18746: case 18748: case 18750: case 18752: case 18754: case 18756: case 18758: case 18760: case 18762: case 18764: case 18766: case 18768: case 18770: case 18772: case 18774: case 18776: case 18778: case 18780: case 18782: case 18784: case 18786: case 18788: case 18790: case 18792: case 18794: case 18796: case 18798: case 18800: case 18802: case 18804: case 18806: case 18808: case 18810: case 18812: case 18814: case 18816: case 18818: case 18820: case 18822: case 18824: case 18826: case 18828: case 18830: case 18832: case 18834: case 18836: case 18838: case 18840: case 18842: case 18844: case 18846: case 18848: case 18850: case 18852: case 18854: case 18856: case 18858: case 18860: case 18862: case 18864: case 18866: case 18868: case 18870: case 18872: case 18874: case 18876: case 18878: case 18880: case 18882: case 18884: case 18886: case 18888: case 18890: case 18892: case 18894: case 18896: case 18898: case 18900: case 18902: case 18904: case 18906: case 18908: case 18910: case 18912: case 18914: case 18916: case 18918: case 18920: case 18922: case 18924: case 18926: case 18928: case 18930: case 18932: case 18934: case 18936: case 18938: case 18940: case 18942: case 18944: case 18946: case 18948: case 18950: case 18952: case 18954: case 18956: case 18958: case 18960: case 18962: case 18964: case 18966: case 18968: case 18970: case 18972: case 18974: case 18976: case 18978: case 18980: case 18982: case 18984: case 18986: case 18988: case 18990: case 18992: case 18994: case 18996: case 18998: case 19e3: case 19002: case 19004: case 19006: case 19008: case 19010: case 19012: case 19014: case 19016: case 19018: case 19020: case 19022: case 19024: case 19026: case 19028: case 19030: case 19032: case 19034: case 19036: case 19038: case 19040: case 19042: case 19044: case 19046: case 19048: case 19050: case 19052: case 19054: case 19056: case 19058: case 19060: case 19062: case 19064: case 19066: case 19068: case 19070: case 19072: case 19074: case 19076: case 19078: case 19080: case 19082: case 19084: case 19086: case 19088: case 19090: case 19092: case 19094: case 19096: case 19098: case 19100: case 19102: case 19104: case 19106: case 19108: case 19110: case 19112: case 19114: case 19116: case 19118: case 19120: case 19122: case 19124: case 19126: case 19128: case 19130: case 19132: case 19134: case 19136: case 19138: case 19140: case 19142: case 19144: case 19146: case 19148: case 19150: case 19152: case 19154: case 19156: case 19158: case 19160: case 19162: case 19164: case 19166: case 19168: case 19170: case 19172: case 19174: case 19176: case 19178: case 19180: case 19182: case 19184: case 19186: case 19188: case 19190: case 19192: case 19194: case 19196: case 19198: case 19200: case 19202: case 19204: case 19206: case 19208: case 19210: case 19212: case 19214: case 19216: case 19218: case 19220: case 19222: case 19224: case 19226: case 19228: case 19230: case 19232: case 19234: case 19236: case 19238: case 19240: case 19242: case 19244: case 19246: case 19248: case 19250: case 19252: case 19254: case 19256: case 19258: case 19260: case 19262: case 19264: case 19266: case 19268: case 19270: case 19272: case 19274: case 19276: case 19278: case 19280: case 19282: case 19284: case 19286: case 19288: case 19290: case 19292: case 19294: case 19296: case 19298: case 19300: case 19302: case 19304: case 19306: case 19308: case 19310: case 19312: case 19314: case 19316: case 19318: case 19320: case 19322: case 19324: case 19326: case 19328: case 19330: case 19332: case 19334: case 19336: case 19338: case 19340: case 19342: case 19344: case 19346: case 19348: case 19350: case 19352: case 19354: case 19356: case 19358: case 19360: case 19362: case 19364: case 19366: case 19368: case 19370: case 19372: case 19374: case 19376: case 19378: case 19380: case 19382: case 19384: case 19386: case 19388: case 19390: case 19392: case 19394: case 19396: case 19398: case 19400: case 19402: case 19404: case 19406: case 19408: case 19410: case 19412: case 19414: case 19416: case 19418: case 19420: case 19422: case 19424: case 19426: case 19428: case 19430: case 19432: case 19434: case 19436: case 19438: case 19440: case 19442: case 19444: case 19446: case 19448: case 19450: case 19452: case 19454: case 19456: case 19458: case 19460: case 19462: case 19464: case 19466: case 19468: case 19470: case 19472: case 19474: case 19476: case 19478: case 19480: case 19482: case 19484: case 19486: case 19488: case 19490: case 19492: case 19494: case 19496: case 19498: case 19500: case 19502: case 19504: case 19506: case 19508: case 19510: case 19512: case 19514: case 19516: case 19518: case 19520: case 19522: case 19524: case 19526: case 19528: case 19530: case 19532: case 19534: case 19536: case 19538: case 19540: case 19542: case 19544: case 19546: case 19548: case 19550: case 19552: case 19554: case 19556: case 19558: case 19560: case 19562: case 19564: case 19566: case 19568: case 19570: case 19572: case 19574: case 19576: case 19578: case 19580: case 19582: case 19584: case 19586: case 19588: case 19590: case 19592: case 19594: case 19596: case 19598: case 19600: case 19602: case 19604: case 19606: case 19608: case 19610: case 19612: case 19614: case 19616: case 19618: case 19620: case 19622: case 19624: case 19626: case 19628: case 19630: case 19632: case 19634: case 19636: case 19638: case 19640: case 19642: case 19644: case 19646: case 19648: case 19650: case 19652: case 19654: case 19656: case 19658: case 19660: case 19662: case 19664: case 19666: case 19668: case 19670: case 19672: case 19674: case 19676: case 19678: case 19680: case 19682: case 19684: case 19686: case 19688: case 19690: case 19692: case 19694: case 19696: case 19698: case 19700: case 19702: case 19704: case 19706: case 19708: case 19710: case 19712: case 19714: case 19716: case 19718: case 19720: case 19722: case 19724: case 19726: case 19728: case 19730: case 19732: case 19734: case 19736: case 19738: case 19740: case 19742: case 19744: case 19746: case 19748: case 19750: case 19752: case 19754: case 19756: case 19758: case 19760: case 19762: case 19764: case 19766: case 19768: case 19770: case 19772: case 19774: case 19776: case 19778: case 19780: case 19782: case 19784: case 19786: case 19788: case 19790: case 19792: case 19794: case 19796: case 19798: case 19800: case 19802: case 19804: case 19806: case 19808: case 19810: case 19812: case 19814: case 19816: case 19818: case 19820: case 19822: case 19824: case 19826: case 19828: case 19830: case 19832: case 19834: case 19836: case 19838: case 19840: case 19842: case 19844: case 19846: case 19848: case 19850: case 19852: case 19854: case 19856: case 19858: case 19860: case 19862: case 19864: case 19866: case 19868: case 19870: case 19872: case 19874: case 19876: case 19878: case 19880: case 19882: case 19884: case 19886: case 19888: case 19890: case 19892: case 19894: case 19896: case 19898: case 19900: case 19902: case 19904: case 19906: case 19908: case 19910: case 19912: case 19914: case 19916: case 19918: case 19920: case 19922: case 19924: case 19926: case 19928: case 19930: case 19932: case 19934: case 19936: case 19938: case 19940: case 19942: case 19944: case 19946: case 19948: case 19950: case 19952: case 19954: case 19956: case 19958: case 19960: case 19962: case 19964: case 19966: case 19968: case 19970: case 19972: case 19974: case 19976: case 19978: case 19980: case 19982: case 19984: case 19986: case 19988: case 19990: case 19992: case 19994: case 19996: case 19998: case 2e4: case 20002: case 20004: case 20006: case 20008: case 20010: case 20012: case 20014: case 20016: case 20018: case 20020: case 20022: case 20024: case 20026: case 20028: case 20030: case 20032: case 20034: case 20036: case 20038: case 20040: case 20042: case 20044: case 20046: case 20048: case 20050: case 20052: case 20054: case 20056: case 20058: case 20060: case 20062: case 20064: case 20066: case 20068: case 20070: case 20072: case 20074: case 20076: case 20078: case 20080: case 20082: case 20084: case 20086: case 20088: case 20090: case 20092: case 20094: case 20096: case 20098: case 20100: case 20102: case 20104: case 20106: case 20108: case 20110: case 20112: case 20114: case 20116: case 20118: case 20120: case 20122: case 20124: case 20126: case 20128: case 20130: case 20132: case 20134: case 20136: case 20138: case 20140: case 20142: case 20144: case 20146: case 20148: case 20150: case 20152: case 20154: case 20156: case 20158: case 20160: case 20162: case 20164: case 20166: case 20168: case 20170: case 20172: case 20174: case 20176: case 20178: case 20180: case 20182: case 20184: case 20186: case 20188: case 20190: case 20192: case 20194: case 20196: case 20198: case 20200: case 20202: case 20204: case 20206: case 20208: case 20210: case 20212: case 20214: case 20216: case 20218: case 20220: case 20222: case 20224: case 20226: case 20228: case 20230: case 20232: case 20234: case 20236: case 20238: case 20240: case 20242: case 20244: case 20246: case 20248: case 20250: case 20252: case 20254: case 20256: case 20258: case 20260: case 20262: case 20264: case 20266: case 20268: case 20270: case 20272: case 20274: case 20276: case 20278: case 20280: case 20282: case 20284: case 20286: case 20288: case 20290: case 20292: case 20294: case 20296: case 20298: case 20300: case 20302: case 20304: case 20306: case 20308: case 20310: case 20312: case 20314: case 20316: case 20318: case 20320: case 20322: case 20324: case 20326: case 20328: case 20330: case 20332: case 20334: case 20336: case 20338: case 20340: case 20342: case 20344: case 20346: case 20348: case 20350: case 20352: case 20354: case 20356: case 20358: case 20360: case 20362: case 20364: case 20366: case 20368: case 20370: case 20372: case 20374: case 20376: case 20378: case 20380: case 20382: case 20384: case 20386: case 20388: case 20390: case 20392: case 20394: case 20396: case 20398: case 20400: case 20402: case 20404: case 20406: case 20408: case 20410: case 20412: case 20414: case 20416: case 20418: case 20420: case 20422: case 20424: case 20426: case 20428: case 20430: case 20432: case 20434: case 20436: case 20438: case 20440: case 20442: case 20444: case 20446: case 20448: case 20450: case 20452: case 20454: case 20456: case 20458: case 20460: case 20462: case 20464: case 20466: case 20468: case 20470: case 20472: case 20474: case 20476: case 20478: case 20480: case 20482: case 20484: case 20486: case 20488: case 20490: case 20492: case 20494: case 20496: case 20498: case 20500: case 20502: case 20504: case 20506: case 20508: case 20510: case 20512: case 20514: case 20516: case 20518: case 20520: case 20522: case 20524: case 20526: case 20528: case 20530: case 20532: case 20534: case 20536: case 20538: case 20540: case 20542: case 20544: case 20546: case 20548: case 20550: case 20552: case 20554: case 20556: case 20558: case 20560: case 20562: case 20564: case 20566: case 20568: case 20570: case 20572: case 20574: case 20576: case 20578: case 20580: case 20582: case 20584: case 20586: case 20588: case 20590: case 20592: case 20594: case 20596: case 20598: case 20600: case 20602: case 20604: case 20606: case 20608: case 20610: case 20612: case 20614: case 20616: case 20618: case 20620: case 20622: case 20624: case 20626: case 20628: case 20630: case 20632: case 20634: case 20636: case 20638: case 20640: case 20642: case 20644: case 20646: case 20648: case 20650: case 20652: case 20654: case 20656: case 20658: case 20660: case 20662: case 20664: case 20666: case 20668: case 20670: case 20672: case 20674: case 20676: case 20678: case 20680: case 20682: case 20684: case 20686: case 20688: case 20690: case 20692: case 20694: case 20696: case 20698: case 20700: case 20702: case 20704: case 20706: case 20708: case 20710: case 20712: case 20714: case 20716: case 20718: case 20720: case 20722: case 20724: case 20726: case 20728: case 20730: case 20732: case 20734: case 20736: case 20738: case 20740: case 20742: case 20744: case 20746: case 20748: case 20750: case 20752: case 20754: case 20756: case 20758: case 20760: case 20762: case 20764: case 20766: case 20768: case 20770: case 20772: case 20774: case 20776: case 20778: case 20780: case 20782: case 20784: case 20786: case 20788: case 20790: case 20792: case 20794: case 20796: case 20798: case 20800: case 20802: case 20804: case 20806: case 20808: case 20810: case 20812: case 20814: case 20816: case 20818: case 20820: case 20822: case 20824: case 20826: case 20828: case 20830: case 20832: case 20834: case 20836: case 20838: case 20840: case 20842: case 20844: case 20846: case 20848: case 20850: case 20852: case 20854: case 20856: case 20858: case 20860: case 20862: case 20864: case 20866: case 20868: case 20870: case 20872: case 20874: case 20876: case 20878: case 20880: case 20882: case 20884: case 20886: case 20888: case 20890: case 20892: case 20894: case 20896: case 20898: case 20900: case 20902: case 20904: case 20906: case 20908: case 20910: case 20912: case 20914: case 20916: case 20918: case 20920: case 20922: case 20924: case 20926: case 20928: case 20930: case 20932: case 20934: case 20936: case 20938: case 20940: case 20942: case 20944: case 20946: case 20948: case 20950: case 20952: case 20954: case 20956: case 20958: case 20960: case 20962: case 20964: case 20966: case 20968: case 20970: case 20972: case 20974: case 20976: case 20978: case 20980: case 20982: case 20984: case 20986: case 20988: case 20990: case 20992: case 20994: case 20996: case 20998: case 21e3: case 21002: case 21004: case 21006: case 21008: case 21010: case 21012: case 21014: case 21016: case 21018: case 21020: case 21022: case 21024: case 21026: case 21028: case 21030: case 21032: case 21034: case 21036: case 21038: case 21040: case 21042: case 21044: case 21046: case 21048: case 21050: case 21052: case 21054: case 21056: case 21058: case 21060: case 21062: case 21064: case 21066: case 21068: case 21070: case 21072: case 21074: case 21076: case 21078: case 21080: case 21082: case 21084: case 21086: case 21088: case 21090: case 21092: case 21094: case 21096: case 21098: case 21100: case 21102: case 21104: case 21106: case 21108: case 21110: case 21112: case 21114: case 21116: case 21118: case 21120: case 21122: case 21124: case 21126: case 21128: case 21130: case 21132: case 21134: case 21136: case 21138: case 21140: case 21142: case 21144: case 21146: case 21148: case 21150: case 21152: case 21154: case 21156: case 21158: case 21160: case 21162: case 21164: case 21166: case 21168: case 21170: case 21172: case 21174: case 21176: case 21178: case 21180: case 21182: case 21184: case 21186: case 21188: case 21190: case 21192: case 21194: case 21196: case 21198: case 21200: case 21202: case 21204: case 21206: case 21208: case 21210: case 21212: case 21214: case 21216: case 21218: case 21220: case 21222: case 21224: case 21226: case 21228: case 21230: case 21232: case 21234: case 21236: case 21238: case 21240: case 21242: case 21244: case 21246: case 21248: case 21250: case 21252: case 21254: case 21256: case 21258: case 21260: case 21262: case 21264: case 21266: case 21268: case 21270: case 21272: case 21274: case 21276: case 21278: case 21280: case 21282: case 21284: case 21286: case 21288: case 21290: case 21292: case 21294: case 21296: case 21298: case 21300: case 21302: case 21304: case 21306: case 21308: case 21310: case 21312: case 21314: case 21316: case 21318: case 21320: case 21322: case 21324: case 21326: case 21328: case 21330: case 21332: case 21334: case 21336: case 21338: case 21340: case 21342: case 21344: case 21346: case 21348: case 21350: case 21352: case 21354: case 21356: case 21358: case 21360: case 21362: case 21364: case 21366: case 21368: case 21370: case 21372: case 21374: case 21376: case 21378: case 21380: case 21382: case 21384: case 21386: case 21388: case 21390: case 21392: case 21394: case 21396: case 21398: case 21400: case 21402: case 21404: case 21406: case 21408: case 21410: case 21412: case 21414: case 21416: case 21418: case 21420: case 21422: case 21424: case 21426: case 21428: case 21430: case 21432: case 21434: case 21436: case 21438: case 21440: case 21442: case 21444: case 21446: case 21448: case 21450: case 21452: case 21454: case 21456: case 21458: case 21460: case 21462: case 21464: case 21466: case 21468: case 21470: case 21472: case 21474: case 21476: case 21478: case 21480: case 21482: case 21484: case 21486: case 21488: case 21490: case 21492: case 21494: case 21496: case 21498: case 21500: case 21502: case 21504: case 21506: case 21508: case 21510: case 21512: case 21514: case 21516: case 21518: case 21520: case 21522: case 21524: case 21526: case 21528: case 21530: case 21532: case 21534: case 21536: case 21538: case 21540: case 21542: case 21544: case 21546: case 21548: case 21550: case 21552: case 21554: case 21556: case 21558: case 21560: case 21562: case 21564: case 21566: case 21568: case 21570: case 21572: case 21574: case 21576: case 21578: case 21580: case 21582: case 21584: case 21586: case 21588: case 21590: case 21592: case 21594: case 21596: case 21598: case 21600: case 21602: case 21604: case 21606: case 21608: case 21610: case 21612: case 21614: case 21616: case 21618: case 21620: case 21622: case 21624: case 21626: case 21628: case 21630: case 21632: case 21634: case 21636: case 21638: case 21640: case 21642: case 21644: case 21646: case 21648: case 21650: case 21652: case 21654: case 21656: case 21658: case 21660: case 21662: case 21664: case 21666: case 21668: case 21670: case 21672: case 21674: case 21676: case 21678: case 21680: case 21682: case 21684: case 21686: case 21688: case 21690: case 21692: case 21694: case 21696: case 21698: case 21700: case 21702: case 21704: case 21706: case 21708: case 21710: case 21712: case 21714: case 21716: case 21718: case 21720: case 21722: case 21724: case 21726: case 21728: case 21730: case 21732: case 21734: case 21736: case 21738: case 21740: case 21742: case 21744: case 21746: case 21748: case 21750: case 21752: case 21754: case 21756: case 21758: case 21760: case 21762: case 21764: case 21766: case 21768: case 21770: case 21772: case 21774: case 21776: case 21778: case 21780: case 21782: case 21784: case 21786: case 21788: case 21790: case 21792: case 21794: case 21796: case 21798: case 21800: case 21802: case 21804: case 21806: case 21808: case 21810: case 21812: case 21814: case 21816: case 21818: case 21820: case 21822: case 21824: case 21826: case 21828: case 21830: case 21832: case 21834: case 21836: case 21838: case 21840: case 21842: case 21844: case 21846: case 21848: case 21850: case 21852: case 21854: case 21856: case 21858: case 21860: case 21862: case 21864: case 21866: case 21868: case 21870: case 21872: case 21874: case 21876: case 21878: case 21880: case 21882: case 21884: case 21886: case 21888: case 21890: case 21892: case 21894: case 21896: case 21898: case 21900: case 21902: case 21904: case 21906: case 21908: case 21910: case 21912: case 21914: case 21916: case 21918: case 21920: case 21922: case 21924: case 21926: case 21928: case 21930: case 21932: case 21934: case 21936: case 21938: case 21940: case 21942: case 21944: case 21946: case 21948: case 21950: case 21952: case 21954: case 21956: case 21958: case 21960: case 21962: case 21964: case 21966: case 21968: case 21970: case 21972: case 21974: case 21976: case 21978: case 21980: case 21982: case 21984: case 21986: case 21988: case 21990: case 21992: case 21994: case 21996: case 21998: case 22e3: case 22002: case 22004: case 22006: case 22008: case 22010: case 22012: case 22014: case 22016: case 22018: case 22020: case 22022: case 22024: case 22026: case 22028: case 22030: case 22032: case 22034: case 22036: case 22038: case 22040: case 22042: case 22044: case 22046: case 22048: case 22050: case 22052: case 22054: case 22056: case 22058: case 22060: case 22062: case 22064: case 22066: case 22068: case 22070: case 22072: case 22074: case 22076: case 22078: case 22080: case 22082: case 22084: case 22086: case 22088: case 22090: case 22092: case 22094: case 22096: case 22098: case 22100: case 22102: case 22104: case 22106: case 22108: case 22110: case 22112: case 22114: case 22116: case 22118: case 22120: case 22122: case 22124: case 22126: case 22128: case 22130: case 22132: case 22134: case 22136: case 22138: case 22140: case 22142: case 22144: case 22146: case 22148: case 22150: case 22152: case 22154: case 22156: case 22158: case 22160: case 22162: case 22164: case 22166: case 22168: case 22170: case 22172: case 22174: case 22176: case 22178: case 22180: case 22182: case 22184: case 22186: case 22188: case 22190: case 22192: case 22194: case 22196: case 22198: case 22200: case 22202: case 22204: case 22206: case 22208: case 22210: case 22212: case 22214: case 22216: case 22218: case 22220: case 22222: case 22224: case 22226: case 22228: case 22230: case 22232: case 22234: case 22236: case 22238: case 22240: case 22242: case 22244: case 22246: case 22248: case 22250: case 22252: case 22254: case 22256: case 22258: case 22260: case 22262: case 22264: case 22266: case 22268: case 22270: case 22272: case 22274: case 22276: case 22278: case 22280: case 22282: case 22284: case 22286: case 22288: case 22290: case 22292: case 22294: case 22296: case 22298: case 22300: case 22302: case 22304: case 22306: case 22308: case 22310: case 22312: case 22314: case 22316: case 22318: case 22320: case 22322: case 22324: case 22326: case 22328: case 22330: case 22332: case 22334: case 22336: case 22338: case 22340: case 22342: case 22344: case 22346: case 22348: case 22350: case 22352: case 22354: case 22356: case 22358: case 22360: case 22362: case 22364: case 22366: case 22368: case 22370: case 22372: case 22374: case 22376: case 22378: case 22380: case 22382: case 22384: case 22386: case 22388: case 22390: case 22392: case 22394: case 22396: case 22398: case 22400: case 22402: case 22404: case 22406: case 22408: case 22410: case 22412: case 22414: case 22416: case 22418: case 22420: case 22422: case 22424: case 22426: case 22428: case 22430: case 22432: case 22434: case 22436: case 22438: case 22440: case 22442: case 22444: case 22446: case 22448: case 22450: case 22452: case 22454: case 22456: case 22458: case 22460: case 22462: case 22464: case 22466: case 22468: case 22470: case 22472: case 22474: case 22476: case 22478: case 22480: case 22482: case 22484: case 22486: case 22488: case 22490: case 22492: case 22494: case 22496: case 22498: case 22500: case 22502: case 22504: case 22506: case 22508: case 22510: case 22512: case 22514: case 22516: case 22518: case 22520: case 22522: case 22524: case 22526: case 22528: case 22530: case 22532: case 22534: case 22536: case 22538: case 22540: case 22542: case 22544: case 22546: case 22548: case 22550: case 22552: case 22554: case 22556: case 22558: case 22560: case 22562: case 22564: case 22566: case 22568: case 22570: case 22572: case 22574: case 22576: case 22578: case 22580: case 22582: case 22584: case 22586: case 22588: case 22590: case 22592: case 22594: case 22596: case 22598: case 22600: case 22602: case 22604: case 22606: case 22608: case 22610: case 22612: case 22614: case 22616: case 22618: case 22620: case 22622: case 22624: case 22626: case 22628: case 22630: case 22632: case 22634: case 22636: case 22638: case 22640: case 22642: case 22644: case 22646: case 22648: case 22650: case 22652: case 22654: case 22656: case 22658: case 22660: case 22662: case 22664: case 22666: case 22668: case 22670: case 22672: case 22674: case 22676: case 22678: case 22680: case 22682: case 22684: case 22686: case 22688: case 22690: case 22692: case 22694: case 22696: case 22698: case 22700: case 22702: case 22704: case 22706: case 22708: case 22710: case 22712: case 22714: case 22716: case 22718: case 22720: case 22722: case 22724: case 22726: case 22728: case 22730: case 22732: case 22734: case 22736: case 22738: case 22740: case 22742: case 22744: case 22746: case 22748: case 22750: case 22752: case 22754: case 22756: case 22758: case 22760: case 22762: case 22764: case 22766: case 22768: case 22770: case 22772: case 22774: case 22776: case 22778: case 22780: case 22782: case 22784: case 22786: case 22788: case 22790: case 22792: case 22794: case 22796: case 22798: case 22800: case 22802: case 22804: case 22806: case 22808: case 22810: case 22812: case 22814: case 22816: case 22818: case 22820: case 22822: case 22824: case 22826: case 22828: case 22830: case 22832: case 22834: case 22836: case 22838: case 22840: case 22842: case 22844: case 22846: case 22848: case 22850: case 22852: case 22854: case 22856: case 22858: case 22860: case 22862: case 22864: case 22866: case 22868: case 22870: case 22872: case 22874: case 22876: case 22878: case 22880: case 22882: case 22884: case 22886: case 22888: case 22890: case 22892: case 22894: case 22896: case 22898: case 22900: case 22902: case 22904: case 22906: case 22908: case 22910: case 22912: case 22914: case 22916: case 22918: case 22920: case 22922: case 22924: case 22926: case 22928: case 22930: case 22932: case 22934: case 22936: case 22938: case 22940: case 22942: case 22944: case 22946: case 22948: case 22950: case 22952: case 22954: case 22956: case 22958: case 22960: case 22962: case 22964: case 22966: case 22968: case 22970: case 22972: case 22974: case 22976: case 22978: case 22980: case 22982: case 22984: case 22986: case 22988: case 22990: case 22992: case 22994: case 22996: case 22998: case 23e3: case 23002: case 23004: case 23006: case 23008: case 23010: case 23012: case 23014: case 23016: case 23018: case 23020: case 23022: case 23024: case 23026: case 23028: case 23030: case 23032: case 23034: case 23036: case 23038: case 23040: case 23042: case 23044: case 23046: case 23048: case 23050: case 23052: case 23054: case 23056: case 23058: case 23060: case 23062: case 23064: case 23066: case 23068: case 23070: case 23072: case 23074: case 23076: case 23078: case 23080: case 23082: case 23084: case 23086: case 23088: case 23090: case 23092: case 23094: case 23096: case 23098: case 23100: case 23102: case 23104: case 23106: case 23108: case 23110: case 23112: case 23114: case 23116: case 23118: case 23120: case 23122: case 23124: case 23126: case 23128: case 23130: case 23132: case 23134: case 23136: case 23138: case 23140: case 23142: case 23144: case 23146: case 23148: case 23150: case 23152: case 23154: case 23156: case 23158: case 23160: case 23162: case 23164: case 23166: case 23168: case 23170: case 23172: case 23174: case 23176: case 23178: case 23180: case 23182: case 23184: case 23186: case 23188: case 23190: case 23192: case 23194: case 23196: case 23198: case 23200: case 23202: case 23204: case 23206: case 23208: case 23210: case 23212: case 23214: case 23216: case 23218: case 23220: case 23222: case 23224: case 23226: case 23228: case 23230: case 23232: case 23234: case 23236: case 23238: case 23240: case 23242: case 23244: case 23246: case 23248: case 23250: case 23252: case 23254: case 23256: case 23258: case 23260: case 23262: case 23264: case 23266: case 23268: case 23270: case 23272: case 23274: case 23276: case 23278: case 23280: case 23282: case 23284: case 23286: case 23288: case 23290: case 23292: case 23294: case 23296: case 23298: case 23300: case 23302: case 23304: case 23306: case 23308: case 23310: case 23312: case 23314: case 23316: case 23318: case 23320: case 23322: case 23324: case 23326: case 23328: case 23330: case 23332: case 23334: case 23336: case 23338: case 23340: case 23342: case 23344: case 23346: case 23348: case 23350: case 23352: case 23354: case 23356: case 23358: case 23360: case 23362: case 23364: case 23366: case 23368: case 23370: case 23372: case 23374: case 23376: case 23378: case 23380: case 23382: case 23384: case 23386: case 23388: case 23390: case 23392: case 23394: case 23396: case 23398: case 23400: case 23402: case 23404: case 23406: case 23408: case 23410: case 23412: case 23414: case 23416: case 23418: case 23420: case 23422: case 23424: case 23426: case 23428: case 23430: case 23432: case 23434: case 23436: case 23438: case 23440: case 23442: case 23444: case 23446: case 23448: case 23450: case 23452: case 23454: case 23456: case 23458: case 23460: case 23462: case 23464: case 23466: case 23468: case 23470: case 23472: case 23474: case 23476: case 23478: case 23480: case 23482: case 23484: case 23486: case 23488: case 23490: case 23492: case 23494: case 23496: case 23498: case 23500: case 23502: case 23504: case 23506: case 23508: case 23510: case 23512: case 23514: case 23516: case 23518: case 23520: case 23522: case 23524: case 23526: case 23528: case 23530: case 23532: case 23534: case 23536: case 23538: case 23540: case 23542: case 23544: case 23546: case 23548: case 23550: case 23552: case 23554: case 23556: case 23558: case 23560: case 23562: case 23564: case 23566: case 23568: case 23570: case 23572: case 23574: case 23576: case 23578: case 23580: case 23582: case 23584: case 23586: case 23588: case 23590: case 23592: case 23594: case 23596: case 23598: case 23600: case 23602: case 23604: case 23606: case 23608: case 23610: case 23612: case 23614: case 23616: case 23618: case 23620: case 23622: case 23624: case 23626: case 23628: case 23630: case 23632: case 23634: case 23636: case 23638: case 23640: case 23642: case 23644: case 23646: case 23648: case 23650: case 23652: case 23654: case 23656: case 23658: case 23660: case 23662: case 23664: case 23666: case 23668: case 23670: case 23672: case 23674: case 23676: case 23678: case 23680: case 23682: case 23684: case 23686: case 23688: case 23690: case 23692: case 23694: case 23696: case 23698: case 23700: case 23702: case 23704: case 23706: case 23708: case 23710: case 23712: case 23714: case 23716: case 23718: case 23720: case 23722: case 23724: case 23726: case 23728: case 23730: case 23732: case 23734: case 23736: case 23738: case 23740: case 23742: case 23744: case 23746: case 23748: case 23750: case 23752: case 23754: case 23756: case 23758: case 23760: case 23762: case 23764: case 23766: case 23768: case 23770: case 23772: case 23774: case 23776: case 23778: case 23780: case 23782: case 23784: case 23786: case 23788: case 23790: case 23792: case 23794: case 23796: case 23798: case 23800: case 23802: case 23804: case 23806: case 23808: case 23810: case 23812: case 23814: case 23816: case 23818: case 23820: case 23822: case 23824: case 23826: case 23828: case 23830: case 23832: case 23834: case 23836: case 23838: case 23840: case 23842: case 23844: case 23846: case 23848: case 23850: case 23852: case 23854: case 23856: case 23858: case 23860: case 23862: case 23864: case 23866: case 23868: case 23870: case 23872: case 23874: case 23876: case 23878: case 23880: case 23882: case 23884: case 23886: case 23888: case 23890: case 23892: case 23894: case 23896: case 23898: case 23900: case 23902: case 23904: case 23906: case 23908: case 23910: case 23912: case 23914: case 23916: case 23918: case 23920: case 23922: case 23924: case 23926: case 23928: case 23930: case 23932: case 23934: case 23936: case 23938: case 23940: case 23942: case 23944: case 23946: case 23948: case 23950: case 23952: case 23954: case 23956: case 23958: case 23960: case 23962: case 23964: case 23966: case 23968: case 23970: case 23972: case 23974: case 23976: case 23978: case 23980: case 23982: case 23984: case 23986: case 23988: case 23990: case 23992: case 23994: case 23996: case 23998: case 24e3: case 24002: case 24004: case 24006: case 24008: case 24010: case 24012: case 24014: case 24016: case 24018: case 24020: case 24022: case 24024: case 24026: case 24028: case 24030: case 24032: case 24034: case 24036: case 24038: case 24040: case 24042: case 24044: case 24046: case 24048: case 24050: case 24052: case 24054: case 24056: case 24058: case 24060: case 24062: case 24064: case 24066: case 24068: case 24070: case 24072: case 24074: case 24076: case 24078: case 24080: case 24082: case 24084: case 24086: case 24088: case 24090: case 24092: case 24094: case 24096: case 24098: case 24100: case 24102: case 24104: case 24106: case 24108: case 24110: case 24112: case 24114: case 24116: case 24118: case 24120: case 24122: case 24124: case 24126: case 24128: case 24130: case 24132: case 24134: case 24136: case 24138: case 24140: case 24142: case 24144: case 24146: case 24148: case 24150: case 24152: case 24154: case 24156: case 24158: case 24160: case 24162: case 24164: case 24166: case 24168: case 24170: case 24172: case 24174: case 24176: case 24178: case 24180: case 24182: case 24184: case 24186: case 24188: case 24190: case 24192: case 24194: case 24196: case 24198: case 24200: case 24202: case 24204: case 24206: case 24208: case 24210: case 24212: case 24214: case 24216: case 24218: case 24220: case 24222: case 24224: case 24226: case 24228: case 24230: case 24232: case 24234: case 24236: case 24238: case 24240: case 24242: case 24244: case 24246: case 24248: case 24250: case 24252: case 24254: case 24256: case 24258: case 24260: case 24262: case 24264: case 24266: case 24268: case 24270: case 24272: case 24274: case 24276: case 24278: case 24280: case 24282: case 24284: case 24286: case 24288: case 24290: case 24292: case 24294: case 24296: case 24298: case 24300: case 24302: case 24304: case 24306: case 24308: case 24310: case 24312: case 24314: case 24316: case 24318: case 24320: case 24322: case 24324: case 24326: case 24328: case 24330: case 24332: case 24334: case 24336: case 24338: case 24340: case 24342: case 24344: case 24346: case 24348: case 24350: case 24352: case 24354: case 24356: case 24358: case 24360: case 24362: case 24364: case 24366: case 24368: case 24370: case 24372: case 24374: case 24376: case 24378: case 24380: case 24382: case 24384: case 24386: case 24388: case 24390: case 24392: case 24394: case 24396: case 24398: case 24400: case 24402: case 24404: case 24406: case 24408: case 24410: case 24412: case 24414: case 24416: case 24418: case 24420: case 24422: case 24424: case 24426: case 24428: case 24430: case 24432: case 24434: case 24436: case 24438: case 24440: case 24442: case 24444: case 24446: case 24448: case 24450: case 24452: case 24454: case 24456: case 24458: case 24460: case 24462: case 24464: case 24466: case 24468: case 24470: case 24472: case 24474: case 24476: case 24478: case 24480: case 24482: case 24484: case 24486: case 24488: case 24490: case 24492: case 24494: case 24496: case 24498: case 24500: case 24502: case 24504: case 24506: case 24508: case 24510: case 24512: case 24514: case 24516: case 24518: case 24520: case 24522: case 24524: case 24526: case 24528: case 24530: case 24532: case 24534: case 24536: case 24538: case 24540: case 24542: case 24544: case 24546: case 24548: case 24550: case 24552: case 24554: case 24556: case 24558: case 24560: case 24562: case 24564: case 24566: case 24568: case 24570: case 24572: case 24574: case 24576: case 24578: case 24580: case 24582: case 24584: case 24586: case 24588: case 24590: case 24592: case 24594: case 24596: case 24598: case 24600: case 24602: case 24604: case 24606: case 24608: case 24610: case 24612: case 24614: return 0; default: break block; }; } return 1; } function $20() { return 3; } function $21() { return 4; } function $22() { return 5; } function $23() { return 9; } function $25() { return 8; } function $28() { return 10; } function $29() { return 11; } function $30() { return 7; } function $32($0, $1) { $0 = $0 | 0; $1 = $1 | 0; if ($0) { $1 = 3 } return $1 | 0; } function $33($0, $1) { $0 = $0 | 0; $1 = $1 | 0; if (!$0) { $1 = 4 } return $1 | 0; } function $34($0, $1) { $0 = $0 | 0; $1 = $1 | 0; return 5; } function $35($0, $1) { $0 = $0 | 0; $1 = $1 | 0; return 6; } function $38() { return 12; } function $39() { return 13; } function $40() { return 14; } function $41() { return 20; } function $42() { return 21; } function $43() { return 22; } function $44() { return 23; } function $45() { return 17; } function $47() { return 30; } function $49() { return 31; } function $50() { return 32; } function $51() { return 33; } function $54() { return 45; } function $55() { return 44; } function $56() { return 43; } function $57() { return 42; } function $58() { return 41; } function $59() { return 40; } function $60($0) { $0 = $0 | 0; var $1 = 0; $1 = 16; block : { switch ($0 | 0) { case 0: $1 = 18; case 1: $1 = $1 + 1 | 0; break; default: break block; }; } return $1 | 0; } function $61($0) { $0 = $0 | 0; var $1 = 0; $1 = 8; block : { switch ($0 | 0) { default: $1 = 16; case 1: $1 = $1 + 1 | 0; break; case 0: break block; }; } return $1 | 0; } function $62($0) { $0 = $0 | 0; var $1 = 0; $1 = 8; block : { switch ($0 | 0) { case 0: $1 = 16; case 1: $1 = $1 + 1 | 0; break; default: break block; }; } return $1 | 0; } function $63($0) { $0 = $0 | 0; if (($0 | 0) == 1) { $0 = 8 } else { $0 = 9 } return $0 | 0; } return { "type_i32": dummy, "type_i64": dummy, "type_f32": dummy, "type_f64": dummy, "type_i32_value": $5, "type_i64_value": $6, "type_f32_value": $7, "type_f64_value": $8, "empty": $9, "empty_value": $10, "singleton": $11, "singleton_value": $12, "multiple": $13, "multiple_value": $14, "large": $15, "as_block_first": dummy, "as_block_mid": dummy, "as_block_last": dummy, "as_block_value": $6, "as_loop_first": $20, "as_loop_mid": $21, "as_loop_last": $22, "as_br_value": $23, "as_br_if_cond": dummy, "as_br_if_value": $25, "as_br_if_value_cond": $23, "as_br_table_index": dummy, "as_br_table_value": $28, "as_br_table_value_index": $29, "as_return_value": $30, "as_if_cond": $6, "as_if_then": $32, "as_if_else": $33, "as_select_first": $34, "as_select_second": $35, "as_select_cond": $30, "as_call_first": $38, "as_call_mid": $39, "as_call_last": $40, "as_call_indirect_first": $41, "as_call_indirect_mid": $42, "as_call_indirect_last": $43, "as_call_indirect_func": $44, "as_local_set_value": $45, "as_load_address": $6, "as_loadN_address": $47, "as_store_address": $47, "as_store_value": $49, "as_storeN_address": $50, "as_storeN_value": $51, "as_unary_operand": $20, "as_binary_left": $20, "as_binary_right": $54, "as_test_operand": $55, "as_compare_left": $56, "as_compare_right": $57, "as_convert_operand": $58, "as_memory_grow_size": $59, "nested_block_value": $60, "nested_br_value": $61, "nested_br_if_value": $62, "nested_br_if_value_cond": $63, "nested_br_table_value": $62, "nested_br_table_value_index": $63 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var type_i32 = retasmFunc.type_i32; export var type_i64 = retasmFunc.type_i64; export var type_f32 = retasmFunc.type_f32; export var type_f64 = retasmFunc.type_f64; export var type_i32_value = retasmFunc.type_i32_value; export var type_i64_value = retasmFunc.type_i64_value; export var type_f32_value = retasmFunc.type_f32_value; export var type_f64_value = retasmFunc.type_f64_value; export var empty = retasmFunc.empty; export var empty_value = retasmFunc.empty_value; export var singleton = retasmFunc.singleton; export var singleton_value = retasmFunc.singleton_value; export var multiple = retasmFunc.multiple; export var multiple_value = retasmFunc.multiple_value; export var large = retasmFunc.large; export var as_block_first = retasmFunc.as_block_first; export var as_block_mid = retasmFunc.as_block_mid; export var as_block_last = retasmFunc.as_block_last; export var as_block_value = retasmFunc.as_block_value; export var as_loop_first = retasmFunc.as_loop_first; export var as_loop_mid = retasmFunc.as_loop_mid; export var as_loop_last = retasmFunc.as_loop_last; export var as_br_value = retasmFunc.as_br_value; export var as_br_if_cond = retasmFunc.as_br_if_cond; export var as_br_if_value = retasmFunc.as_br_if_value; export var as_br_if_value_cond = retasmFunc.as_br_if_value_cond; export var as_br_table_index = retasmFunc.as_br_table_index; export var as_br_table_value = retasmFunc.as_br_table_value; export var as_br_table_value_index = retasmFunc.as_br_table_value_index; export var as_return_value = retasmFunc.as_return_value; export var as_if_cond = retasmFunc.as_if_cond; export var as_if_then = retasmFunc.as_if_then; export var as_if_else = retasmFunc.as_if_else; export var as_select_first = retasmFunc.as_select_first; export var as_select_second = retasmFunc.as_select_second; export var as_select_cond = retasmFunc.as_select_cond; export var as_call_first = retasmFunc.as_call_first; export var as_call_mid = retasmFunc.as_call_mid; export var as_call_last = retasmFunc.as_call_last; export var as_call_indirect_first = retasmFunc.as_call_indirect_first; export var as_call_indirect_mid = retasmFunc.as_call_indirect_mid; export var as_call_indirect_last = retasmFunc.as_call_indirect_last; export var as_call_indirect_func = retasmFunc.as_call_indirect_func; export var as_local_set_value = retasmFunc.as_local_set_value; export var as_load_address = retasmFunc.as_load_address; export var as_loadN_address = retasmFunc.as_loadN_address; export var as_store_address = retasmFunc.as_store_address; export var as_store_value = retasmFunc.as_store_value; export var as_storeN_address = retasmFunc.as_storeN_address; export var as_storeN_value = retasmFunc.as_storeN_value; export var as_unary_operand = retasmFunc.as_unary_operand; export var as_binary_left = retasmFunc.as_binary_left; export var as_binary_right = retasmFunc.as_binary_right; export var as_test_operand = retasmFunc.as_test_operand; export var as_compare_left = retasmFunc.as_compare_left; export var as_compare_right = retasmFunc.as_compare_right; export var as_convert_operand = retasmFunc.as_convert_operand; export var as_memory_grow_size = retasmFunc.as_memory_grow_size; export var nested_block_value = retasmFunc.nested_block_value; export var nested_br_value = retasmFunc.nested_br_value; export var nested_br_if_value = retasmFunc.nested_br_if_value; export var nested_br_if_value_cond = retasmFunc.nested_br_if_value_cond; export var nested_br_table_value = retasmFunc.nested_br_table_value; export var nested_br_table_value_index = retasmFunc.nested_br_table_value_index; binaryen-version_108/test/wasm2js/br_table_temp.wast000066400000000000000000002347221423707623100230230ustar00rootroot00000000000000;; Test `br_table` operator TODO: implement more ops and replace with spec/br_table.wast (module ;; Auxiliary definition (func $dummy) (func (export "type-i32") (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-i64") (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) ) (func (export "type-f32") (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-f64") (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) ) (func (export "type-i32-value") (result i32) (block i32 (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) ) (func (export "type-i64-value") (result i32) (i32.wrap_i64 (block i64 (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0))))) ) (func (export "type-f32-value") (result f32) (block f32 (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) ) (func (export "type-f64-value") (result f64) (block f64 (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) ) (func (export "empty") (param i32) (result i32) (block (br_table 0 (local.get 0)) (return (i32.const 21))) (i32.const 22) ) (func (export "empty-value") (param i32) (result i32) (block i32 (br_table 0 (i32.const 33) (local.get 0)) (i32.const 31)) ) (func (export "singleton") (param i32) (result i32) (block (block (br_table 1 0 (local.get 0)) (return (i32.const 21)) ) (return (i32.const 20)) ) (i32.const 22) ) (func (export "singleton-value") (param i32) (result i32) (block i32 (drop (block i32 (br_table 0 1 (i32.const 33) (local.get 0)) (return (i32.const 31)) ) ) (i32.const 32) ) ) (func (export "multiple") (param i32) (result i32) (block (block (block (block (block (br_table 3 2 1 0 4 (local.get 0)) (return (i32.const 99)) ) (return (i32.const 100)) ) (return (i32.const 101)) ) (return (i32.const 102)) ) (return (i32.const 103)) ) (i32.const 104) ) (func (export "multiple-value") (param i32) (result i32) (local i32) (local.set 1 (block i32 (local.set 1 (block i32 (local.set 1 (block i32 (local.set 1 (block i32 (local.set 1 (block i32 (br_table 3 2 1 0 4 (i32.const 200) (local.get 0)) (return (i32.add (local.get 1) (i32.const 99))) )) (return (i32.add (local.get 1) (i32.const 10))) )) (return (i32.add (local.get 1) (i32.const 11))) )) (return (i32.add (local.get 1) (i32.const 12))) )) (return (i32.add (local.get 1) (i32.const 13))) )) (i32.add (local.get 1) (i32.const 14)) ) (func (export "large") (param i32) (result i32) (block (block (br_table 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (local.get 0) ) (return (i32.const -1)) ) (return (i32.const 0)) ) (return (i32.const 1)) ) (func (export "as-block-first") (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-mid") (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) ) (func (export "as-block-last") (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) ) (func (export "as-block-value") (result i32) (block i32 (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0))) ) (func (export "as-loop-first") (result i32) (loop i32 (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) ) (func (export "as-loop-mid") (result i32) (loop i32 (call $dummy) (br_table 1 1 1 (i32.const 4) (i32.const -1)) (i32.const 2) ) ) (func (export "as-loop-last") (result i32) (loop i32 (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1))) ) (func (export "as-br-value") (result i32) (block i32 (br 0 (br 0 (i32.const 9)))) ) (func (export "as-br_if-cond") (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) ) (func (export "as-br_if-value") (result i32) (block i32 (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_if-value-cond") (result i32) (block i32 (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) (i32.const 7) ) ) (func (export "as-br_table-index") (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) ) (func (export "as-br_table-value") (result i32) (block i32 (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) (i32.const 7) ) ) (func (export "as-br_table-value-index") (result i32) (block i32 (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) (i32.const 7) ) ) (func (export "as-return-value") (result i32) (i32.wrap_i64 (block i64 (return (br_table 0 (i64.const 7) (i32.const 0))))) ) (func (export "as-if-cond") (result i32) (block i32 (if i32 (br_table 0 (i32.const 2) (i32.const 0)) (i32.const 0) (i32.const 1) ) ) ) (func (export "as-if-then") (param i32 i32) (result i32) (block i32 (if i32 (local.get 0) (br_table 1 (i32.const 3) (i32.const 0)) (local.get 1) ) ) ) (func (export "as-if-else") (param i32 i32) (result i32) (block i32 (if i32 (local.get 0) (local.get 1) (br_table 1 0 (i32.const 4) (i32.const 0)) ) ) ) (func (export "as-select-first") (param i32 i32) (result i32) (block i32 (select (br_table 0 (i32.const 5) (i32.const 0)) (local.get 0) (local.get 1) ) ) ) (func (export "as-select-second") (param i32 i32) (result i32) (block i32 (select (local.get 0) (br_table 0 (i32.const 6) (i32.const 1)) (local.get 1) ) ) ) (func (export "as-select-cond") (result i32) (block i32 (select (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) ) ) ) (func $f (param i32 i32 i32) (result i32) (i32.const -1)) (func (export "as-call-first") (result i32) (block i32 (call $f (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call-mid") (result i32) (block i32 (call $f (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call-last") (result i32) (block i32 (call $f (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) ) ) ) (type $sig (func (param i32 i32 i32) (result i32))) (table funcref (elem $f)) (func (export "as-call_indirect-first") (result i32) (block i32 (call_indirect (type $sig) (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-mid") (result i32) (block i32 (call_indirect (type $sig) (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) (i32.const 3) ) ) ) (func (export "as-call_indirect-last") (result i32) (block i32 (call_indirect (type $sig) (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) (i32.const 3) ) ) ) (func (export "as-call_indirect-func") (result i32) (block i32 (call_indirect (type $sig) (i32.const 0) (i32.const 1) (i32.const 2) (br_table 0 (i32.const 23) (i32.const 1)) ) ) ) (func (export "as-local.set-value") (result i32) (local f32) (block i32 (local.set 0 (br_table 0 (i32.const 17) (i32.const 1))) (i32.const -1) ) ) (memory 1) (func (export "as-load-address") (result i32) (block i32 (i32.load (br_table 0 (i32.const 2) (i32.const 1)))) ) (func (export "as-loadN-address") (result i32) (i32.wrap_i64 (block i64 (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1))))) ) (func (export "as-store-address") (result i32) (block i32 (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) (i32.const -1) ) ) (func (export "as-store-value") (result i32) (block i32 (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) (i32.const -1) ) ) (func (export "as-storeN-address") (result i32) (block i32 (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) (i32.const -1) ) ) (func (export "as-storeN-value") (result i32) (block i32 (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) (i32.const -1) ) ) (func (export "as-unary-operand") (result i32) (block i32 (i32.ctz (br_table 0 (i32.const 3) (i32.const 0)))) ) (func (export "as-binary-left") (result i32) (block i32 (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) ) ) (func (export "as-binary-right") (result i32) (i32.wrap_i64 (block i64 (i64.add (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0)))) ) ) (func (export "as-test-operand") (result i32) (block i32 (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) ) (func (export "as-compare-left") (result i32) (block i32 (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) ) ) (func (export "as-compare-right") (result i32) (block i32 (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) ) ) (func (export "as-convert-operand") (result i32) (block i32 (i32.wrap_i64 (br_table 0 (i32.const 41) (i32.const 0)))) ) (func (export "as-memory.grow-size") (result i32) (block i32 (memory.grow (br_table 0 (i32.const 40) (i32.const 0)))) ) (func (export "nested-block-value") (param i32) (result i32) (block i32 (drop (i32.const -1)) (i32.add (i32.const 1) (block i32 (i32.add (i32.const 2) (block i32 (drop (i32.const 4)) (i32.add (i32.const 8) (br_table 0 1 2 (i32.const 16) (local.get 0)) ) ) ) ) ) ) ) (func (export "nested-br-value") (param i32) (result i32) (block i32 (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (drop (block i32 (drop (i32.const 4)) (br 0 (br_table 2 1 0 (i32.const 8) (local.get 0))) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value") (param i32) (result i32) (block i32 (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (drop (block i32 (drop (i32.const 4)) (br_if 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1)) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_if-value-cond") (param i32) (result i32) (block i32 (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (drop (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0)))) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value") (param i32) (result i32) (block i32 (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (drop (block i32 (drop (i32.const 4)) (br_table 0 (br_table 0 1 2 (i32.const 8) (local.get 0)) (i32.const 1)) (i32.const 32) ) ) (i32.const 16) ) ) ) ) (func (export "nested-br_table-value-index") (param i32) (result i32) (block i32 (i32.add (i32.const 1) (block i32 (drop (i32.const 2)) (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (local.get 0))) (i32.const 16) ) ) ) ) ) (assert_return (invoke "type-i32")) (assert_return (invoke "type-i64")) (assert_return (invoke "type-f32")) (assert_return (invoke "type-f64")) (assert_return (invoke "type-i32-value") (i32.const 1)) (assert_return (invoke "type-i64-value") (i32.const 2)) ;; (assert_return (invoke "type-f32-value") (f32.const 3)) ;; (assert_return (invoke "type-f64-value") (f64.const 4)) (assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) (assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) (assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) (assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) (assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) (assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) (assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) (assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) (assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) (assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) (assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) (assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) (assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) (assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) (assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) (assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) (assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) (assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) (assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) (assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) (assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) (assert_return (invoke "large" (i32.const 0)) (i32.const 0)) (assert_return (invoke "large" (i32.const 1)) (i32.const 1)) (assert_return (invoke "large" (i32.const 100)) (i32.const 0)) (assert_return (invoke "large" (i32.const 101)) (i32.const 1)) (assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) (assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) (assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) (assert_return (invoke "as-block-first")) (assert_return (invoke "as-block-mid")) (assert_return (invoke "as-block-last")) (assert_return (invoke "as-block-value") (i32.const 2)) (assert_return (invoke "as-loop-first") (i32.const 3)) (assert_return (invoke "as-loop-mid") (i32.const 4)) (assert_return (invoke "as-loop-last") (i32.const 5)) (assert_return (invoke "as-br-value") (i32.const 9)) (assert_return (invoke "as-br_if-cond")) (assert_return (invoke "as-br_if-value") (i32.const 8)) (assert_return (invoke "as-br_if-value-cond") (i32.const 9)) (assert_return (invoke "as-br_table-index")) (assert_return (invoke "as-br_table-value") (i32.const 10)) (assert_return (invoke "as-br_table-value-index") (i32.const 11)) (assert_return (invoke "as-return-value") (i32.const 7)) (assert_return (invoke "as-if-cond") (i32.const 2)) (assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) (assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) (assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) (assert_return (invoke "as-select-cond") (i32.const 7)) (assert_return (invoke "as-call-first") (i32.const 12)) (assert_return (invoke "as-call-mid") (i32.const 13)) (assert_return (invoke "as-call-last") (i32.const 14)) (assert_return (invoke "as-call_indirect-first") (i32.const 20)) (assert_return (invoke "as-call_indirect-mid") (i32.const 21)) (assert_return (invoke "as-call_indirect-last") (i32.const 22)) (assert_return (invoke "as-call_indirect-func") (i32.const 23)) (assert_return (invoke "as-local.set-value") (i32.const 17)) (assert_return (invoke "as-load-address") (i32.const 2)) (assert_return (invoke "as-loadN-address") (i32.const 30)) (assert_return (invoke "as-store-address") (i32.const 30)) (assert_return (invoke "as-store-value") (i32.const 31)) (assert_return (invoke "as-storeN-address") (i32.const 32)) (assert_return (invoke "as-storeN-value") (i32.const 33)) (assert_return (invoke "as-unary-operand") (i32.const 3)) (assert_return (invoke "as-binary-left") (i32.const 3)) (assert_return (invoke "as-binary-right") (i32.const 45)) (assert_return (invoke "as-test-operand") (i32.const 44)) (assert_return (invoke "as-compare-left") (i32.const 43)) (assert_return (invoke "as-compare-right") (i32.const 42)) (assert_return (invoke "as-convert-operand") (i32.const 41)) (assert_return (invoke "as-memory.grow-size") (i32.const 40)) (assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) (assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) (assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) (assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) (assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) (assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) (assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) (assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) (assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) (assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) (assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) (assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block (br_table 0 (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (; TODO(stack): soft failure (assert_invalid (module (func $type-arg-poly-vs-empty (block (br_table 0 (unreachable) (i32.const 1))) )) "type mismatch" ) ;) (assert_invalid (module (func $type-arg-void-vs-num (result i32) (block i32 (br_table 0 (nop) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-num-vs-num (result i32) (block i32 (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-index-void-vs-i32 (block (br_table 0 0 0 (nop))) )) "type mismatch" ) (assert_invalid (module (func $type-index-num-vs-i32 (block (br_table 0 (i64.const 0))) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-void-vs-i32 (result i32) (block i32 (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $type-arg-index-num-vs-i32 (result i32) (block i32 (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1)) )) "type mismatch" ) (assert_invalid (module (func $unbound-label (block (br_table 2 1 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label (block (br_table 0 0x10000001 0 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-label-default (block (br_table 1 2 (i32.const 1))) )) "unknown label" ) (assert_invalid (module (func $unbound-nested-label-default (block (block (br_table 0 5 (i32.const 1)))) )) "unknown label" ) (assert_invalid (module (func $large-label-default (block (br_table 0 0 0x10000001 (i32.const 1))) )) "unknown label" ) binaryen-version_108/test/wasm2js/br_table_to_loop.2asm.js000066400000000000000000000015251423707623100240210ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { block : { loop : while (1) switch (1 | 0) { case 1: continue loop; default: break block; }; } } function $1() { block : { loop : while (1) switch (1 | 0) { case 1: break block; default: continue loop; }; } } return { "exp1": $0, "exp2": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var exp1 = retasmFunc.exp1; export var exp2 = retasmFunc.exp2; binaryen-version_108/test/wasm2js/br_table_to_loop.2asm.js.opt000066400000000000000000000012021423707623100246120ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { while (1) continue; } function $1() { } return { "exp1": $0, "exp2": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var exp1 = retasmFunc.exp1; export var exp2 = retasmFunc.exp2; binaryen-version_108/test/wasm2js/br_table_to_loop.wast000066400000000000000000000003351423707623100235200ustar00rootroot00000000000000(module (func "exp1" (block $block (loop $loop (br_table $block $loop $block (i32.const 1)) ) ) ) (func "exp2" (block $block (loop $loop (br_table $loop $block $loop (i32.const 1)) ) ) ) ) binaryen-version_108/test/wasm2js/break-drop.2asm.js000066400000000000000000000013031423707623100225340ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { } function $1() { } function $2() { } return { "br": $0, "br_if": $1, "br_table": $2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var br = retasmFunc.br; export var br_if = retasmFunc.br_if; export var br_table = retasmFunc.br_table; binaryen-version_108/test/wasm2js/bulk-memory.2asm.js000066400000000000000000000320631423707623100227600ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); var bufferView; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_memory_fill(dest, value, size) { dest = dest >>> 0; size = size >>> 0; if (dest + size > bufferView.length) throw "trap: invalid memory.fill"; bufferView.fill(value, dest, dest + size); } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0($0_1, $1_1, $2) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2 = $2 | 0; wasm2js_memory_fill($0_1, $1_1, $2); } function $1($0_1) { $0_1 = $0_1 | 0; return HEAPU8[$0_1 >> 0] | 0 | 0; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; bufferView = HEAPU8; } return oldPages; } return { "fill": $0, "load8_u": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var fill = retasmFunc.fill; export var load8_u = retasmFunc.load8_u; var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 0, "qrvM3Q=="); } var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_memory_copy(dest, source, size) { // TODO: traps on invalid things bufferView.copyWithin(dest, source, source + size); } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0($0_1, $1_1, $2) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2 = $2 | 0; wasm2js_memory_copy($0_1, $1_1, $2); } function $1($0_1) { $0_1 = $0_1 | 0; return HEAPU8[$0_1 >> 0] | 0 | 0; } bufferView = HEAPU8; initActiveSegments(env); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "copy": $0, "load8_u": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var copy = retasmFunc.copy; export var load8_u = retasmFunc.load8_u; var bufferView; var memorySegments = {}; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(4), 0, "qrvM3Q=="); var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_memory_init(segment, dest, offset, size) { // TODO: traps on invalid things bufferView.set(memorySegments[segment].subarray(offset, offset + size), dest); } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0($0_1, $1_1, $2) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2 = $2 | 0; wasm2js_memory_init(0, $0_1, $1_1, $2); } function $1($0_1) { $0_1 = $0_1 | 0; return HEAPU8[$0_1 >> 0] | 0 | 0; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; bufferView = HEAPU8; } return oldPages; } return { "init": $0, "load8_u": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var init = retasmFunc.init; export var load8_u = retasmFunc.load8_u; var bufferView; var memorySegments = {}; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(0), 0, ""); function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 0, ""); } var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_data_drop(segment) { // TODO: traps on invalid things memorySegments[segment] = new Uint8Array(0); } function wasm2js_memory_init(segment, dest, offset, size) { // TODO: traps on invalid things bufferView.set(memorySegments[segment].subarray(offset, offset + size), dest); } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { wasm2js_data_drop(0); } function $1() { wasm2js_memory_init(0, 0, 0, 0); } function $2() { wasm2js_data_drop(1); } function $3() { wasm2js_memory_init(1, 0, 0, 0); } bufferView = HEAPU8; initActiveSegments(env); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; bufferView = HEAPU8; } return oldPages; } return { "drop_passive": $0, "init_passive": $1, "drop_active": $2, "init_active": $3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var drop_passive = retasmFunc.drop_passive; export var init_passive = retasmFunc.init_passive; export var drop_active = retasmFunc.drop_active; export var init_active = retasmFunc.init_active; binaryen-version_108/test/wasm2js/bulk-memory.2asm.js.opt000066400000000000000000000261051423707623100235610ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); var bufferView; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_memory_fill(dest, value, size) { dest = dest >>> 0; size = size >>> 0; if (dest + size > bufferView.length) throw "trap: invalid memory.fill"; bufferView.fill(value, dest, dest + size); } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0($0_1, $1_1, $2) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2 = $2 | 0; wasm2js_memory_fill($0_1, $1_1, $2); } function $1($0_1) { $0_1 = $0_1 | 0; return HEAPU8[$0_1 | 0]; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; bufferView = HEAPU8; } return oldPages; } return { "fill": $0, "load8_u": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var fill = retasmFunc.fill; export var load8_u = retasmFunc.load8_u; var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 0, "qrvM3Q=="); } var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_memory_copy(dest, source, size) { // TODO: traps on invalid things bufferView.copyWithin(dest, source, source + size); } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0($0_1, $1_1, $2) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2 = $2 | 0; wasm2js_memory_copy($0_1, $1_1, $2); } function $1($0_1) { $0_1 = $0_1 | 0; return HEAPU8[$0_1 | 0]; } bufferView = HEAPU8; initActiveSegments(env); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "copy": $0, "load8_u": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var copy = retasmFunc.copy; export var load8_u = retasmFunc.load8_u; var bufferView; var memorySegments = {}; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(4), 0, "qrvM3Q=="); var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_memory_init(segment, dest, offset, size) { // TODO: traps on invalid things bufferView.set(memorySegments[segment].subarray(offset, offset + size), dest); } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0($0_1, $1_1, $2) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2 = $2 | 0; wasm2js_memory_init(0, $0_1, $1_1, $2); } function $1($0_1) { $0_1 = $0_1 | 0; return HEAPU8[$0_1 | 0]; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; bufferView = HEAPU8; } return oldPages; } return { "init": $0, "load8_u": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var init = retasmFunc.init; export var load8_u = retasmFunc.load8_u; function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { } function $1() { if (__wasm_memory_size() << 16 >>> 0 < 0) { abort() } } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; } return oldPages; } return { "drop_passive": $0, "init_passive": $1, "drop_active": $0, "init_active": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var drop_passive = retasmFunc.drop_passive; export var init_passive = retasmFunc.init_passive; export var drop_active = retasmFunc.drop_active; export var init_active = retasmFunc.init_active; binaryen-version_108/test/wasm2js/comments.2asm.js000066400000000000000000000016741423707623100223460ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/conversions-modified.2asm.js000066400000000000000000000517271423707623100246530ustar00rootroot00000000000000import { setTempRet0 } from 'env'; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_load_f32() { return f32ScratchView[2]; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0; i64toi32_i32$1 = x; i64toi32_i32$0 = i64toi32_i32$1 >> 31 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $1(x) { x = x | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return x | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; return x | 0; } function $3(x) { x = Math_fround(x); return ~~x | 0; } function $4(x) { x = Math_fround(x); return ~~x >>> 0 | 0; } function $5(x) { x = +x; return ~~x | 0; } function $6(x) { x = +x; return ~~x >>> 0 | 0; } function $7(x) { x = Math_fround(x); var i64toi32_i32$0 = Math_fround(0), $4_1 = 0, $5_1 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = x; if (Math_fround(Math_abs(i64toi32_i32$0)) >= Math_fround(1.0)) { if (i64toi32_i32$0 > Math_fround(0.0)) { $4_1 = ~~Math_fround(Math_min(Math_fround(Math_floor(Math_fround(i64toi32_i32$0 / Math_fround(4294967296.0)))), Math_fround(Math_fround(4294967296.0) - Math_fround(1.0)))) >>> 0 } else { $4_1 = ~~Math_fround(Math_ceil(Math_fround(Math_fround(i64toi32_i32$0 - Math_fround(~~i64toi32_i32$0 >>> 0 >>> 0)) / Math_fround(4294967296.0)))) >>> 0 } $5_1 = $4_1; } else { $5_1 = 0 } i64toi32_i32$1 = $5_1; i64toi32_i32$2 = ~~i64toi32_i32$0 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function $8(x) { x = Math_fround(x); var i64toi32_i32$0 = Math_fround(0), $4_1 = 0, $5_1 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = x; if (Math_fround(Math_abs(i64toi32_i32$0)) >= Math_fround(1.0)) { if (i64toi32_i32$0 > Math_fround(0.0)) { $4_1 = ~~Math_fround(Math_min(Math_fround(Math_floor(Math_fround(i64toi32_i32$0 / Math_fround(4294967296.0)))), Math_fround(Math_fround(4294967296.0) - Math_fround(1.0)))) >>> 0 } else { $4_1 = ~~Math_fround(Math_ceil(Math_fround(Math_fround(i64toi32_i32$0 - Math_fround(~~i64toi32_i32$0 >>> 0 >>> 0)) / Math_fround(4294967296.0)))) >>> 0 } $5_1 = $4_1; } else { $5_1 = 0 } i64toi32_i32$1 = $5_1; i64toi32_i32$2 = ~~i64toi32_i32$0 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function $9(x) { x = +x; var i64toi32_i32$0 = 0.0, $4_1 = 0, $5_1 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = x; if (Math_abs(i64toi32_i32$0) >= 1.0) { if (i64toi32_i32$0 > 0.0) { $4_1 = ~~Math_min(Math_floor(i64toi32_i32$0 / 4294967296.0), 4294967296.0 - 1.0) >>> 0 } else { $4_1 = ~~Math_ceil((i64toi32_i32$0 - +(~~i64toi32_i32$0 >>> 0 >>> 0)) / 4294967296.0) >>> 0 } $5_1 = $4_1; } else { $5_1 = 0 } i64toi32_i32$1 = $5_1; i64toi32_i32$2 = ~~i64toi32_i32$0 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function $10(x) { x = +x; var i64toi32_i32$0 = 0.0, $4_1 = 0, $5_1 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = x; if (Math_abs(i64toi32_i32$0) >= 1.0) { if (i64toi32_i32$0 > 0.0) { $4_1 = ~~Math_min(Math_floor(i64toi32_i32$0 / 4294967296.0), 4294967296.0 - 1.0) >>> 0 } else { $4_1 = ~~Math_ceil((i64toi32_i32$0 - +(~~i64toi32_i32$0 >>> 0 >>> 0)) / 4294967296.0) >>> 0 } $5_1 = $4_1; } else { $5_1 = 0 } i64toi32_i32$1 = $5_1; i64toi32_i32$2 = ~~i64toi32_i32$0 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function $11(x) { x = x | 0; return Math_fround(Math_fround(x | 0)); } function $12(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = x$hi; return Math_fround(Math_fround(+(x >>> 0) + 4294967296.0 * +(i64toi32_i32$0 | 0))); } function $13(x) { x = x | 0; return +(+(x | 0)); } function $14(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = x$hi; return +(+(x >>> 0) + 4294967296.0 * +(i64toi32_i32$0 | 0)); } function $15(x) { x = x | 0; return Math_fround(Math_fround(x >>> 0)); } function $16(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = x$hi; return Math_fround(Math_fround(+(x >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0))); } function $17(x) { x = x | 0; return +(+(x >>> 0)); } function $18(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = x$hi; return +(+(x >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0)); } function $19(x) { x = Math_fround(x); return +(+x); } function $20(x) { x = +x; return Math_fround(Math_fround(x)); } function $21(x) { x = x | 0; return Math_fround((wasm2js_scratch_store_i32(2, x), wasm2js_scratch_load_f32())); } function $22(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = x$hi; wasm2js_scratch_store_i32(0 | 0, x | 0); wasm2js_scratch_store_i32(1 | 0, i64toi32_i32$0 | 0); return +(+wasm2js_scratch_load_f64()); } function $23(x) { x = Math_fround(x); return (wasm2js_scratch_store_f32(x), wasm2js_scratch_load_i32(2)) | 0; } function $24(x) { x = +x; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+x); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$0($0_1) { $0_1 = $0_1 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $8_1 = 0, $1_1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0($0_1 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1_1 = i64toi32_i32$0; $1$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $8_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $8_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($8_1 | 0); i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function legalstub$1($0_1) { $0_1 = $0_1 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $8_1 = 0, $1_1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $1($0_1 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1_1 = i64toi32_i32$0; $1$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $8_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $8_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($8_1 | 0); i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0_1; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$7($0_1) { $0_1 = Math_fround($0_1); var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $8_1 = 0, $1_1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $7(Math_fround($0_1)) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1_1 = i64toi32_i32$0; $1$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $8_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $8_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($8_1 | 0); i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function legalstub$8($0_1) { $0_1 = Math_fround($0_1); var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $8_1 = 0, $1_1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $8(Math_fround($0_1)) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1_1 = i64toi32_i32$0; $1$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $8_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $8_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($8_1 | 0); i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function legalstub$9($0_1) { $0_1 = +$0_1; var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $8_1 = 0, $1_1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $9(+$0_1) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1_1 = i64toi32_i32$0; $1$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $8_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $8_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($8_1 | 0); i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function legalstub$10($0_1) { $0_1 = +$0_1; var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $8_1 = 0, $1_1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $10(+$0_1) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1_1 = i64toi32_i32$0; $1$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $8_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $8_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($8_1 | 0); i64toi32_i32$0 = $1$hi; return $1_1 | 0; } function legalstub$12($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0_1; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return Math_fround(Math_fround($12(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0))); } function legalstub$14($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0_1; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return +(+$14(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0)); } function legalstub$16($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0_1; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return Math_fround(Math_fround($16(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0))); } function legalstub$18($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0_1; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return +(+$18(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0)); } function legalstub$22($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0_1; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return +(+$22(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0)); } function legalstub$24($0_1) { $0_1 = +$0_1; var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $8_1 = 0, $1_1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $24(+$0_1) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1_1 = i64toi32_i32$0; $1$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $8_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $8_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($8_1 | 0); i64toi32_i32$0 = $1$hi; return $1_1 | 0; } return { "i64_extend_s_i32": legalstub$0, "i64_extend_u_i32": legalstub$1, "i32_wrap_i64": legalstub$2, "i32_trunc_s_f32": $3, "i32_trunc_u_f32": $4, "i32_trunc_s_f64": $5, "i32_trunc_u_f64": $6, "i64_trunc_s_f32": legalstub$7, "i64_trunc_u_f32": legalstub$8, "i64_trunc_s_f64": legalstub$9, "i64_trunc_u_f64": legalstub$10, "f32_convert_s_i32": $11, "f32_convert_s_i64": legalstub$12, "f64_convert_s_i32": $13, "f64_convert_s_i64": legalstub$14, "f32_convert_u_i32": $15, "f32_convert_u_i64": legalstub$16, "f64_convert_u_i32": $17, "f64_convert_u_i64": legalstub$18, "f64_promote_f32": $19, "f32_demote_f64": $20, "f32_reinterpret_i32": $21, "f64_reinterpret_i64": legalstub$22, "i32_reinterpret_f32": $23, "i64_reinterpret_f64": legalstub$24 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i64_extend_s_i32 = retasmFunc.i64_extend_s_i32; export var i64_extend_u_i32 = retasmFunc.i64_extend_u_i32; export var i32_wrap_i64 = retasmFunc.i32_wrap_i64; export var i32_trunc_s_f32 = retasmFunc.i32_trunc_s_f32; export var i32_trunc_u_f32 = retasmFunc.i32_trunc_u_f32; export var i32_trunc_s_f64 = retasmFunc.i32_trunc_s_f64; export var i32_trunc_u_f64 = retasmFunc.i32_trunc_u_f64; export var i64_trunc_s_f32 = retasmFunc.i64_trunc_s_f32; export var i64_trunc_u_f32 = retasmFunc.i64_trunc_u_f32; export var i64_trunc_s_f64 = retasmFunc.i64_trunc_s_f64; export var i64_trunc_u_f64 = retasmFunc.i64_trunc_u_f64; export var f32_convert_s_i32 = retasmFunc.f32_convert_s_i32; export var f32_convert_s_i64 = retasmFunc.f32_convert_s_i64; export var f64_convert_s_i32 = retasmFunc.f64_convert_s_i32; export var f64_convert_s_i64 = retasmFunc.f64_convert_s_i64; export var f32_convert_u_i32 = retasmFunc.f32_convert_u_i32; export var f32_convert_u_i64 = retasmFunc.f32_convert_u_i64; export var f64_convert_u_i32 = retasmFunc.f64_convert_u_i32; export var f64_convert_u_i64 = retasmFunc.f64_convert_u_i64; export var f64_promote_f32 = retasmFunc.f64_promote_f32; export var f32_demote_f64 = retasmFunc.f32_demote_f64; export var f32_reinterpret_i32 = retasmFunc.f32_reinterpret_i32; export var f64_reinterpret_i64 = retasmFunc.f64_reinterpret_i64; export var i32_reinterpret_f32 = retasmFunc.i32_reinterpret_f32; export var i64_reinterpret_f64 = retasmFunc.i64_reinterpret_f64; binaryen-version_108/test/wasm2js/conversions-modified.2asm.js.opt000066400000000000000000000144031423707623100254420ustar00rootroot00000000000000import { setTempRet0 } from 'env'; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_load_f32() { return f32ScratchView[2]; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $3($0) { $0 = Math_fround($0); return ~~$0 | 0; } function $4($0) { $0 = Math_fround($0); return ~~$0 >>> 0 | 0; } function $5($0) { $0 = +$0; return ~~$0 | 0; } function $6($0) { $0 = +$0; return ~~$0 >>> 0 | 0; } function $11($0) { $0 = $0 | 0; return Math_fround(Math_fround($0 | 0)); } function $13($0) { $0 = $0 | 0; return +($0 | 0); } function $15($0) { $0 = $0 | 0; return Math_fround(Math_fround($0 >>> 0)); } function $17($0) { $0 = $0 | 0; return +($0 >>> 0); } function $19($0) { $0 = Math_fround($0); return +$0; } function $20($0) { $0 = +$0; return Math_fround(Math_fround($0)); } function $21($0) { $0 = $0 | 0; return Math_fround((wasm2js_scratch_store_i32(2, $0), wasm2js_scratch_load_f32())); } function $23($0) { $0 = Math_fround($0); return (wasm2js_scratch_store_f32($0), wasm2js_scratch_load_i32(2)) | 0; } function legalstub$0($0) { i64toi32_i32$HIGH_BITS = $0 >> 31; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0; } function legalstub$1($0) { i64toi32_i32$HIGH_BITS = 0; setTempRet0(0); return $0; } function legalstub$2($0, $1) { return $0; } function legalstub$7($0) { i64toi32_i32$HIGH_BITS = Math_fround(Math_abs($0)) >= Math_fround(1.0) ? ~~($0 > Math_fround(0.0) ? Math_fround(Math_min(Math_fround(Math_floor(Math_fround($0 * Math_fround(2.3283064365386963e-10)))), Math_fround(4294967296.0))) : Math_fround(Math_ceil(Math_fround(Math_fround($0 - Math_fround(~~$0 >>> 0 >>> 0)) * Math_fround(2.3283064365386963e-10))))) >>> 0 : 0; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return ~~$0 >>> 0; } function legalstub$9($0) { i64toi32_i32$HIGH_BITS = Math_abs($0) >= 1.0 ? ~~($0 > 0.0 ? Math_min(Math_floor($0 * 2.3283064365386963e-10), 4294967295.0) : Math_ceil(($0 - +(~~$0 >>> 0 >>> 0)) * 2.3283064365386963e-10)) >>> 0 : 0; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return ~~$0 >>> 0; } function legalstub$12($0, $1) { return Math_fround(+($0 >>> 0) + +($1 | 0) * 4294967296.0); } function legalstub$14($0, $1) { return +($0 >>> 0) + +($1 | 0) * 4294967296.0; } function legalstub$16($0, $1) { return Math_fround(+($0 >>> 0) + +($1 >>> 0) * 4294967296.0); } function legalstub$18($0, $1) { return +($0 >>> 0) + +($1 >>> 0) * 4294967296.0; } function legalstub$22($0, $1) { wasm2js_scratch_store_i32(0, $0 | 0); wasm2js_scratch_store_i32(1, $1 | 0); return +wasm2js_scratch_load_f64(); } function legalstub$24($0) { var $1 = 0, $2 = 0; wasm2js_scratch_store_f64(+$0); $1 = wasm2js_scratch_load_i32(1) | 0; $2 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $1; $1 = $2; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $1; } return { "i64_extend_s_i32": legalstub$0, "i64_extend_u_i32": legalstub$1, "i32_wrap_i64": legalstub$2, "i32_trunc_s_f32": $3, "i32_trunc_u_f32": $4, "i32_trunc_s_f64": $5, "i32_trunc_u_f64": $6, "i64_trunc_s_f32": legalstub$7, "i64_trunc_u_f32": legalstub$7, "i64_trunc_s_f64": legalstub$9, "i64_trunc_u_f64": legalstub$9, "f32_convert_s_i32": $11, "f32_convert_s_i64": legalstub$12, "f64_convert_s_i32": $13, "f64_convert_s_i64": legalstub$14, "f32_convert_u_i32": $15, "f32_convert_u_i64": legalstub$16, "f64_convert_u_i32": $17, "f64_convert_u_i64": legalstub$18, "f64_promote_f32": $19, "f32_demote_f64": $20, "f32_reinterpret_i32": $21, "f64_reinterpret_i64": legalstub$22, "i32_reinterpret_f32": $23, "i64_reinterpret_f64": legalstub$24 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i64_extend_s_i32 = retasmFunc.i64_extend_s_i32; export var i64_extend_u_i32 = retasmFunc.i64_extend_u_i32; export var i32_wrap_i64 = retasmFunc.i32_wrap_i64; export var i32_trunc_s_f32 = retasmFunc.i32_trunc_s_f32; export var i32_trunc_u_f32 = retasmFunc.i32_trunc_u_f32; export var i32_trunc_s_f64 = retasmFunc.i32_trunc_s_f64; export var i32_trunc_u_f64 = retasmFunc.i32_trunc_u_f64; export var i64_trunc_s_f32 = retasmFunc.i64_trunc_s_f32; export var i64_trunc_u_f32 = retasmFunc.i64_trunc_u_f32; export var i64_trunc_s_f64 = retasmFunc.i64_trunc_s_f64; export var i64_trunc_u_f64 = retasmFunc.i64_trunc_u_f64; export var f32_convert_s_i32 = retasmFunc.f32_convert_s_i32; export var f32_convert_s_i64 = retasmFunc.f32_convert_s_i64; export var f64_convert_s_i32 = retasmFunc.f64_convert_s_i32; export var f64_convert_s_i64 = retasmFunc.f64_convert_s_i64; export var f32_convert_u_i32 = retasmFunc.f32_convert_u_i32; export var f32_convert_u_i64 = retasmFunc.f32_convert_u_i64; export var f64_convert_u_i32 = retasmFunc.f64_convert_u_i32; export var f64_convert_u_i64 = retasmFunc.f64_convert_u_i64; export var f64_promote_f32 = retasmFunc.f64_promote_f32; export var f32_demote_f64 = retasmFunc.f32_demote_f64; export var f32_reinterpret_i32 = retasmFunc.f32_reinterpret_i32; export var f64_reinterpret_i64 = retasmFunc.f64_reinterpret_i64; export var i32_reinterpret_f32 = retasmFunc.i32_reinterpret_f32; export var i64_reinterpret_f64 = retasmFunc.i64_reinterpret_f64; binaryen-version_108/test/wasm2js/conversions-modified.wast000066400000000000000000001036301423707623100243430ustar00rootroot00000000000000(module (func (export "i64.extend_s_i32") (param $x i32) (result i64) (i64.extend_i32_s (local.get $x))) (func (export "i64.extend_u_i32") (param $x i32) (result i64) (i64.extend_i32_u (local.get $x))) (func (export "i32.wrap_i64") (param $x i64) (result i32) (i32.wrap_i64 (local.get $x))) (func (export "i32.trunc_s_f32") (param $x f32) (result i32) (i32.trunc_f32_s (local.get $x))) (func (export "i32.trunc_u_f32") (param $x f32) (result i32) (i32.trunc_f32_u (local.get $x))) (func (export "i32.trunc_s_f64") (param $x f64) (result i32) (i32.trunc_f64_s (local.get $x))) (func (export "i32.trunc_u_f64") (param $x f64) (result i32) (i32.trunc_f64_u (local.get $x))) (func (export "i64.trunc_s_f32") (param $x f32) (result i64) (i64.trunc_f32_s (local.get $x))) (func (export "i64.trunc_u_f32") (param $x f32) (result i64) (i64.trunc_f32_u (local.get $x))) (func (export "i64.trunc_s_f64") (param $x f64) (result i64) (i64.trunc_f64_s (local.get $x))) (func (export "i64.trunc_u_f64") (param $x f64) (result i64) (i64.trunc_f64_u (local.get $x))) (func (export "f32.convert_s_i32") (param $x i32) (result f32) (f32.convert_i32_s (local.get $x))) (func (export "f32.convert_s_i64") (param $x i64) (result f32) (f32.convert_i64_s (local.get $x))) (func (export "f64.convert_s_i32") (param $x i32) (result f64) (f64.convert_i32_s (local.get $x))) (func (export "f64.convert_s_i64") (param $x i64) (result f64) (f64.convert_i64_s (local.get $x))) (func (export "f32.convert_u_i32") (param $x i32) (result f32) (f32.convert_i32_u (local.get $x))) (func (export "f32.convert_u_i64") (param $x i64) (result f32) (f32.convert_i64_u (local.get $x))) (func (export "f64.convert_u_i32") (param $x i32) (result f64) (f64.convert_i32_u (local.get $x))) (func (export "f64.convert_u_i64") (param $x i64) (result f64) (f64.convert_i64_u (local.get $x))) (func (export "f64.promote_f32") (param $x f32) (result f64) (f64.promote_f32 (local.get $x))) (func (export "f32.demote_f64") (param $x f64) (result f32) (f32.demote_f64 (local.get $x))) (func (export "f32.reinterpret_i32") (param $x i32) (result f32) (f32.reinterpret_i32 (local.get $x))) (func (export "f64.reinterpret_i64") (param $x i64) (result f64) (f64.reinterpret_i64 (local.get $x))) (func (export "i32.reinterpret_f32") (param $x f32) (result i32) (i32.reinterpret_f32 (local.get $x))) (func (export "i64.reinterpret_f64") (param $x f64) (result i64) (i64.reinterpret_f64 (local.get $x))) ) (assert_return (invoke "i64.extend_s_i32" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_s_i32" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_s_i32" (i32.const -10000)) (i64.const -10000)) (assert_return (invoke "i64.extend_s_i32" (i32.const -1)) (i64.const -1)) (assert_return (invoke "i64.extend_s_i32" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_s_i32" (i32.const 0x80000000)) (i64.const 0xffffffff80000000)) (assert_return (invoke "i64.extend_u_i32" (i32.const 0)) (i64.const 0)) (assert_return (invoke "i64.extend_u_i32" (i32.const 10000)) (i64.const 10000)) (assert_return (invoke "i64.extend_u_i32" (i32.const -10000)) (i64.const 0x00000000ffffd8f0)) (assert_return (invoke "i64.extend_u_i32" (i32.const -1)) (i64.const 0xffffffff)) (assert_return (invoke "i64.extend_u_i32" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff)) (assert_return (invoke "i64.extend_u_i32" (i32.const 0x80000000)) (i64.const 0x0000000080000000)) (assert_return (invoke "i32.wrap_i64" (i64.const -1)) (i32.const -1)) (assert_return (invoke "i32.wrap_i64" (i64.const -100000)) (i32.const -100000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x80000000)) (i32.const 0x80000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff7fffffff)) (i32.const 0x7fffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xfffffffeffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0xffffffff00000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.wrap_i64" (i64.const 0)) (i32.const 0)) (assert_return (invoke "i32.wrap_i64" (i64.const 1311768467463790320)) (i32.const 0x9abcdef0)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x00000000ffffffff)) (i32.const 0xffffffff)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000000)) (i32.const 0x00000000)) (assert_return (invoke "i32.wrap_i64" (i64.const 0x0000000100000001)) (i32.const 0x00000001)) (assert_return (invoke "i32.trunc_s_f32" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_s_f32" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_s_f32" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_s_f32" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_s_f32" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_s_f32" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_s_f32" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_s_f32" (f32.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_s_f32" (f32.const -0x1.19999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_s_f32" (f32.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_s_f32" (f32.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_s_f32" (f32.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_s_f32" (f32.const 2147483520.0)) (i32.const 2147483520)) (assert_return (invoke "i32.trunc_s_f32" (f32.const -2147483648.0)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_s_f32" (f32.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_s_f32" (f32.const -2147483904.0)) "integer overflow") (assert_trap (invoke "i32.trunc_s_f32" (f32.const infinity)) "integer overflow") (assert_trap (invoke "i32.trunc_s_f32" (f32.const -infinity)) "integer overflow") (assert_trap (invoke "i32.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_u_f32" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f32" (f32.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f32" (f32.const 0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f32" (f32.const -0x1p-149)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f32" (f32.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_u_f32" (f32.const 0x1.19999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_u_f32" (f32.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_u_f32" (f32.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_u_f32" (f32.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_u_f32" (f32.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_u_f32" (f32.const 4294967040.0)) (i32.const -256)) (assert_return (invoke "i32.trunc_u_f32" (f32.const -0x1.ccccccp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f32" (f32.const -0x1.fffffep-1)) (i32.const 0)) (assert_trap (invoke "i32.trunc_u_f32" (f32.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f32" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f32" (f32.const infinity)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f32" (f32.const -infinity)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_s_f64" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_s_f64" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_s_f64" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_s_f64" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_s_f64" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_s_f64" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_s_f64" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_s_f64" (f64.const -1.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_s_f64" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) (assert_return (invoke "i32.trunc_s_f64" (f64.const -1.5)) (i32.const -1)) (assert_return (invoke "i32.trunc_s_f64" (f64.const -1.9)) (i32.const -1)) (assert_return (invoke "i32.trunc_s_f64" (f64.const -2.0)) (i32.const -2)) (assert_return (invoke "i32.trunc_s_f64" (f64.const 2147483647.0)) (i32.const 2147483647)) (assert_return (invoke "i32.trunc_s_f64" (f64.const -2147483648.0)) (i32.const -2147483648)) (assert_trap (invoke "i32.trunc_s_f64" (f64.const 2147483648.0)) "integer overflow") (assert_trap (invoke "i32.trunc_s_f64" (f64.const -2147483649.0)) "integer overflow") (assert_trap (invoke "i32.trunc_s_f64" (f64.const infinity)) "integer overflow") (assert_trap (invoke "i32.trunc_s_f64" (f64.const -infinity)) "integer overflow") (assert_trap (invoke "i32.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") (assert_return (invoke "i32.trunc_u_f64" (f64.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f64" (f64.const -0.0)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f64" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f64" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f64" (f64.const 1.0)) (i32.const 1)) (assert_return (invoke "i32.trunc_u_f64" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) (assert_return (invoke "i32.trunc_u_f64" (f64.const 1.5)) (i32.const 1)) (assert_return (invoke "i32.trunc_u_f64" (f64.const 1.9)) (i32.const 1)) (assert_return (invoke "i32.trunc_u_f64" (f64.const 2.0)) (i32.const 2)) (assert_return (invoke "i32.trunc_u_f64" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 (assert_return (invoke "i32.trunc_u_f64" (f64.const 4294967295.0)) (i32.const -1)) (assert_return (invoke "i32.trunc_u_f64" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f64" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) (assert_return (invoke "i32.trunc_u_f64" (f64.const 1e8)) (i32.const 100000000)) (assert_trap (invoke "i32.trunc_u_f64" (f64.const 4294967296.0)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f64" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f64" (f64.const 1e16)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f64" (f64.const 1e30)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f64" (f64.const 9223372036854775808)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f64" (f64.const infinity)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f64" (f64.const -infinity)) "integer overflow") (assert_trap (invoke "i32.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_s_f32" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_s_f32" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_s_f32" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_s_f32" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_s_f32" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_s_f32" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_s_f32" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_s_f32" (f32.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_s_f32" (f32.const -0x1.19999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_s_f32" (f32.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_s_f32" (f32.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_s_f32" (f32.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_s_f32" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_s_f32" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_s_f32" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) (assert_return (invoke "i64.trunc_s_f32" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_s_f32" (f32.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_s_f32" (f32.const -9223373136366403584.0)) "integer overflow") (assert_trap (invoke "i64.trunc_s_f32" (f32.const infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_s_f32" (f32.const -infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_u_f32" (f32.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f32" (f32.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f32" (f32.const 0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1p-149)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f32" (f32.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_u_f32" (f32.const 0x1.19999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_u_f32" (f32.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_u_f32" (f32.const 4294967296)) (i64.const 4294967296)) (assert_return (invoke "i64.trunc_u_f32" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) (assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1.ccccccp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1.fffffep-1)) (i64.const 0)) (assert_trap (invoke "i64.trunc_u_f32" (f32.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f32" (f32.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f32" (f32.const infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f32" (f32.const -infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_s_f64" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_s_f64" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_s_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_s_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_s_f64" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_s_f64" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_s_f64" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_s_f64" (f64.const -1.0)) (i64.const -1)) (assert_return (invoke "i64.trunc_s_f64" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) (assert_return (invoke "i64.trunc_s_f64" (f64.const -1.5)) (i64.const -1)) (assert_return (invoke "i64.trunc_s_f64" (f64.const -1.9)) (i64.const -1)) (assert_return (invoke "i64.trunc_s_f64" (f64.const -2.0)) (i64.const -2)) (assert_return (invoke "i64.trunc_s_f64" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 (assert_return (invoke "i64.trunc_s_f64" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 (assert_return (invoke "i64.trunc_s_f64" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) (assert_return (invoke "i64.trunc_s_f64" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_s_f64" (f64.const 9223372036854775808.0)) "integer overflow") (assert_trap (invoke "i64.trunc_s_f64" (f64.const -9223372036854777856.0)) "integer overflow") (assert_trap (invoke "i64.trunc_s_f64" (f64.const infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_s_f64" (f64.const -infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") (assert_return (invoke "i64.trunc_u_f64" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f64" (f64.const -0.0)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 1.0)) (i64.const 1)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 1.5)) (i64.const 1)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 4294967295)) (i64.const 0xffffffff)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 4294967296)) (i64.const 0x100000000)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 18446744073709549568.0)) (i64.const -2048)) (assert_return (invoke "i64.trunc_u_f64" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f64" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 1e8)) (i64.const 100000000)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 1e16)) (i64.const 10000000000000000)) (assert_return (invoke "i64.trunc_u_f64" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) (assert_trap (invoke "i64.trunc_u_f64" (f64.const 18446744073709551616.0)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f64" (f64.const -1.0)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f64" (f64.const infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f64" (f64.const -infinity)) "integer overflow") (assert_trap (invoke "i64.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") (assert_return (invoke "f32.convert_s_i32" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_s_i32" (i32.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_s_i32" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_s_i32" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_s_i32" (i32.const -2147483648)) (f32.const -2147483648)) (assert_return (invoke "f32.convert_s_i32" (i32.const 1234567890)) (f32.const 0x1.26580cp+30)) ;; Test rounding directions. (assert_return (invoke "f32.convert_s_i32" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_s_i32" (i32.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_s_i32" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_s_i32" (i32.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f32.convert_s_i64" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_s_i64" (i64.const -1)) (f32.const -1.0)) (assert_return (invoke "f32.convert_s_i64" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_s_i64" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_s_i64" (i64.const -9223372036854775808)) (f32.const -9223372036854775808)) (assert_return (invoke "f32.convert_s_i64" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI ;; Test rounding directions. (assert_return (invoke "f32.convert_s_i64" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_s_i64" (i64.const -16777217)) (f32.const -16777216.0)) (assert_return (invoke "f32.convert_s_i64" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_s_i64" (i64.const -16777219)) (f32.const -16777220.0)) (assert_return (invoke "f64.convert_s_i32" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_s_i32" (i32.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_s_i32" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_s_i32" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_s_i32" (i32.const -2147483648)) (f64.const -2147483648)) (assert_return (invoke "f64.convert_s_i32" (i32.const 987654321)) (f64.const 987654321)) (assert_return (invoke "f64.convert_s_i64" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_s_i64" (i64.const -1)) (f64.const -1.0)) (assert_return (invoke "f64.convert_s_i64" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_s_i64" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_s_i64" (i64.const -9223372036854775808)) (f64.const -9223372036854775808)) (assert_return (invoke "f64.convert_s_i64" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum ;; Test rounding directions. (assert_return (invoke "f64.convert_s_i64" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_s_i64" (i64.const -9007199254740993)) (f64.const -9007199254740992)) (assert_return (invoke "f64.convert_s_i64" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.convert_s_i64" (i64.const -9007199254740995)) (f64.const -9007199254740996)) (assert_return (invoke "f32.convert_u_i32" (i32.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_u_i32" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_u_i32" (i32.const 2147483647)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_u_i32" (i32.const -2147483648)) (f32.const 2147483648)) (assert_return (invoke "f32.convert_u_i32" (i32.const 0x12345678)) (f32.const 0x1.234568p+28)) (assert_return (invoke "f32.convert_u_i32" (i32.const 0xffffffff)) (f32.const 4294967296.0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_u_i32" (i32.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_u_i32" (i32.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f32.convert_u_i64" (i64.const 1)) (f32.const 1.0)) (assert_return (invoke "f32.convert_u_i64" (i64.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.convert_u_i64" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) (assert_return (invoke "f32.convert_u_i64" (i64.const -9223372036854775808)) (f32.const 9223372036854775808)) (assert_return (invoke "f32.convert_u_i64" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0)) ;; Test rounding directions. (assert_return (invoke "f32.convert_u_i64" (i64.const 16777217)) (f32.const 16777216.0)) (assert_return (invoke "f32.convert_u_i64" (i64.const 16777219)) (f32.const 16777220.0)) (assert_return (invoke "f64.convert_u_i32" (i32.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_u_i32" (i32.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_u_i32" (i32.const 2147483647)) (f64.const 2147483647)) (assert_return (invoke "f64.convert_u_i32" (i32.const -2147483648)) (f64.const 2147483648)) (assert_return (invoke "f64.convert_u_i32" (i32.const 0xffffffff)) (f64.const 4294967295.0)) (assert_return (invoke "f64.convert_u_i64" (i64.const 1)) (f64.const 1.0)) (assert_return (invoke "f64.convert_u_i64" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.convert_u_i64" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) (assert_return (invoke "f64.convert_u_i64" (i64.const -9223372036854775808)) (f64.const 9223372036854775808)) (assert_return (invoke "f64.convert_u_i64" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0)) ;; Test rounding directions. (assert_return (invoke "f64.convert_u_i64" (i64.const 9007199254740993)) (f64.const 9007199254740992)) (assert_return (invoke "f64.convert_u_i64" (i64.const 9007199254740995)) (f64.const 9007199254740996)) (assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-149)) (f64.const 0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1p-149)) (f64.const -0x1p-149)) (assert_return (invoke "f64.promote_f32" (f32.const 1.0)) (f64.const 1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -1.0)) (f64.const -1.0)) (assert_return (invoke "f64.promote_f32" (f32.const -0x1.fffffep+127)) (f64.const -0x1.fffffep+127)) (assert_return (invoke "f64.promote_f32" (f32.const 0x1.fffffep+127)) (f64.const 0x1.fffffep+127)) ;; Generated randomly by picking a random int and reinterpret it to float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1p-119)) (f64.const 0x1p-119)) ;; Generated randomly by picking a random float. (assert_return (invoke "f64.promote_f32" (f32.const 0x1.8f867ep+125)) (f64.const 6.6382536710104395e+37)) (assert_return (invoke "f64.promote_f32" (f32.const infinity)) (f64.const infinity)) (assert_return (invoke "f64.promote_f32" (f32.const -infinity)) (f64.const -infinity)) (assert_return (invoke "f64.promote_f32" (f32.const nan)) (f64.const nan)) (assert_return (invoke "f32.demote_f64" (f64.const 0.0)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0.0)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 1.0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const -1.0)) (f32.const -1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffe0000000p-127)) (f32.const 0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffe0000000p-127)) (f32.const -0x1p-126)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffdfffffffp-127)) (f32.const 0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffdfffffffp-127)) (f32.const -0x1.fffffcp-127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-149)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-149)) (f32.const -0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000000p+127)) (f32.const 0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000000p+127)) (f32.const -0x1.fffffcp+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000001p+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000001p+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffefffffffp+127)) (f32.const 0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffefffffffp+127)) (f32.const -0x1.fffffep+127)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.ffffffp+127)) (f32.const infinity)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.ffffffp+127)) (f32.const -infinity)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-119)) (f32.const 0x1p-119)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.8f867ep+125)) (f32.const 0x1.8f867ep+125)) (assert_return (invoke "f32.demote_f64" (f64.const infinity)) (f32.const infinity)) (assert_return (invoke "f32.demote_f64" (f64.const -infinity)) (f32.const -infinity)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p+0)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffffffffffp-1)) (f32.const 1.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+0)) (f32.const 0x1.000000p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+0)) (f32.const 0x1.000002p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000050000000p+0)) (f32.const 0x1.000004p+0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+24)) (f32.const 0x1.0p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+24)) (f32.const 0x1.000002p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+24)) (f32.const 0x1.000004p+24)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.4eae4f7024c7p+108)) (f32.const 0x1.4eae5p+108)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.a12e71e358685p-113)) (f32.const 0x1.a12e72p-113)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.cb98354d521ffp-127)) (f32.const 0x1.cb9834p-127)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.6972b30cfb562p+1)) (f32.const -0x1.6972b4p+1)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.bedbe4819d4c4p+112)) (f32.const -0x1.bedbe4p+112)) (assert_return (invoke "f32.demote_f64" (f64.const nan)) (f32.const nan)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0p-150)) (f32.const 0.0)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0p-150)) (f32.const -0.0)) (assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149)) (assert_return (invoke "f32.demote_f64" (f64.const -0x1.0000000000001p-150)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0)) (f32.const 0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x80000000)) (f32.const -0.0)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 1)) (f32.const 0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -1)) (f32.const -nan:0x7fffff)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 123456789)) (f32.const 0x1.b79a2ap-113)) (assert_return (invoke "f32.reinterpret_i32" (i32.const -2147483647)) (f32.const -0x1p-149)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7f800000)) (f32.const infinity)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xff800000)) (f32.const -infinity)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fc00000)) (f32.const nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffc00000)) (f32.const -nan)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000)) (assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0)) (f64.const 0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1)) (f64.const 0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -1)) (f64.const -nan:0xfffffffffffff)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x8000000000000000)) (f64.const -0.0)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 1234567890)) (f64.const 0x0.00000499602d2p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const -9223372036854775807)) (f64.const -0x0.0000000000001p-1022)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff0000000000000)) (f64.const infinity)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff0000000000000)) (f64.const -infinity)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff8000000000000)) (f64.const nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff8000000000000)) (f64.const -nan)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff4000000000000)) (f64.const nan:0x4000000000000)) (assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff4000000000000)) (f64.const -nan:0x4000000000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0.0)) (i32.const 0)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0.0)) (i32.const 0x80000000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1p-149)) (i32.const 1)) ;;(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x7fffff)) (i32.const -1)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1p-149)) (i32.const 0x80000001)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 1.0)) (i32.const 1065353216)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 3.1415926)) (i32.const 1078530010)) (assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1.fffffep+127)) (i32.const 2139095039)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1.fffffep+127)) (i32.const -8388609)) (assert_return (invoke "i32.reinterpret_f32" (f32.const infinity)) (i32.const 0x7f800000)) (assert_return (invoke "i32.reinterpret_f32" (f32.const -infinity)) (i32.const 0xff800000)) ;;(assert_return (invoke "i32.reinterpret_f32" (f32.const nan)) (i32.const 0x7fc00000)) ;;(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan)) (i32.const 0xffc00000)) ;;(assert_return (invoke "i32.reinterpret_f32" (f32.const nan:0x200000)) (i32.const 0x7fa00000)) ;;(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x200000)) (i32.const 0xffa00000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0.0)) (i64.const 0)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0.0)) (i64.const 0x8000000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 1)) ;;(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0xfffffffffffff)) (i64.const -1)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0x8000000000000001)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 1.0)) (i64.const 4607182418800017408)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 3.14159265358979)) (i64.const 4614256656552045841)) (assert_return (invoke "i64.reinterpret_f64" (f64.const 0x1.fffffffffffffp+1023)) (i64.const 9218868437227405311)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -0x1.fffffffffffffp+1023)) (i64.const -4503599627370497)) (assert_return (invoke "i64.reinterpret_f64" (f64.const infinity)) (i64.const 0x7ff0000000000000)) (assert_return (invoke "i64.reinterpret_f64" (f64.const -infinity)) (i64.const 0xfff0000000000000)) ;;(assert_return (invoke "i64.reinterpret_f64" (f64.const nan)) (i64.const 0x7ff8000000000000)) ;;(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan)) (i64.const 0xfff8000000000000)) ;;(assert_return (invoke "i64.reinterpret_f64" (f64.const nan:0x4000000000000)) (i64.const 0x7ff4000000000000)) ;;(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0x4000000000000)) (i64.const 0xfff4000000000000)) binaryen-version_108/test/wasm2js/deterministic.2asm.js000066400000000000000000000022321423707623100233530ustar00rootroot00000000000000 function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var global$0 = -44; function $0() { if ((global$0 >>> 0) / ((HEAP32[0 >> 2] | 0) >>> 0) | 0) { abort() } return 1 | 0; } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "foo": $0 }; } var memasmFunc = new ArrayBuffer(65536); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, memory: { buffer : memasmFunc } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/deterministic.2asm.js.opt000066400000000000000000000021511423707623100241540ustar00rootroot00000000000000 function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { if (4294967252 / HEAPU32[0] | 0) { abort() } return 1; } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "foo": $0 }; } var memasmFunc = new ArrayBuffer(65536); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, memory: { buffer : memasmFunc } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/deterministic.wast000066400000000000000000000003641423707623100230600ustar00rootroot00000000000000(module (global $global$0 (mut i32) (i32.const -44)) (import "env" "memory" (memory $0 1 1)) (func "foo" (result i32) (if (i32.div_u (global.get $global$0) (i32.load (i32.const 0)) ) (unreachable) ) (i32.const 1) ) ) binaryen-version_108/test/wasm2js/dot_import.2asm.js000066400000000000000000000011721423707623100226720ustar00rootroot00000000000000import { ba_se } from 'mod.ule'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var base = env.ba_se; function $0() { base(); } return { "exported": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, ba_se }); export var exported = retasmFunc.exported; binaryen-version_108/test/wasm2js/dot_import.2asm.js.opt000066400000000000000000000011721423707623100234730ustar00rootroot00000000000000import { ba_se } from 'mod.ule'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var base = env.ba_se; function $0() { base(); } return { "exported": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, ba_se }); export var exported = retasmFunc.exported; binaryen-version_108/test/wasm2js/dot_import.wast000066400000000000000000000001271423707623100223720ustar00rootroot00000000000000(module (import "mod.ule" "ba.se" (func $base)) (func "exported" (call $base) ) ) binaryen-version_108/test/wasm2js/dynamicLibrary.2asm.js000066400000000000000000000055311423707623100234660ustar00rootroot00000000000000import { memoryBase } from 'env'; import { tableBase } from 'env'; function Table(ret) { // grow method not included; table is not growable ret.set = function(i, func) { this[i] = func; }; ret.get = function(i) { return this[i]; }; return ret; } var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, imports[memoryBase], "ZHluYW1pYyBkYXRh"); } function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var import$memoryBase = env.memoryBase | 0; var import$tableBase = env.tableBase | 0; function foo() { } function bar() { } function baz() { } bufferView = HEAPU8; initActiveSegments(env); var FUNCTION_TABLE = Table(new Array(10)); FUNCTION_TABLE[import$tableBase + 0] = foo; FUNCTION_TABLE[import$tableBase + 1] = bar; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "baz": baz, "tab": FUNCTION_TABLE }; } var memasmFunc = new ArrayBuffer(16777216); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, memory: { buffer : memasmFunc } }); export var baz = retasmFunc.baz; binaryen-version_108/test/wasm2js/dynamicLibrary.2asm.js.opt000066400000000000000000000054451423707623100242730ustar00rootroot00000000000000import { memoryBase } from 'env'; import { tableBase } from 'env'; function Table(ret) { // grow method not included; table is not growable ret.set = function(i, func) { this[i] = func; }; ret.get = function(i) { return this[i]; }; return ret; } var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, imports[memoryBase], "ZHluYW1pYyBkYXRh"); } function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var import$memoryBase = env.memoryBase | 0; var import$tableBase = env.tableBase | 0; function foo() { } bufferView = HEAPU8; initActiveSegments(env); var FUNCTION_TABLE = Table(new Array(10)); FUNCTION_TABLE[import$tableBase + 0] = foo; FUNCTION_TABLE[import$tableBase + 1] = foo; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "baz": foo, "tab": FUNCTION_TABLE }; } var memasmFunc = new ArrayBuffer(16777216); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, memory: { buffer : memasmFunc } }); export var baz = retasmFunc.baz; binaryen-version_108/test/wasm2js/dynamicLibrary.wast000066400000000000000000000007661423707623100231740ustar00rootroot00000000000000(module (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (import "env" "memory" (memory $import$memory 256 256)) (import "env" "memoryBase" (global $import$memoryBase i32)) (data (global.get $import$memoryBase) "dynamic data") (table 10 10 funcref) (import "env" "tableBase" (global $import$tableBase i32)) (elem (global.get $import$tableBase) $foo $bar) (export "baz" (func $baz)) (export "tab" (table 0)) (func $foo) (func $bar) (func $baz) ) binaryen-version_108/test/wasm2js/empty_export.2asm.js000066400000000000000000000010351423707623100232470ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function foo() { } return { "$": foo }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var $ = retasmFunc.$; binaryen-version_108/test/wasm2js/empty_export.2asm.js.opt000066400000000000000000000010351423707623100240500ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function foo() { } return { "$": foo }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var $ = retasmFunc.$; binaryen-version_108/test/wasm2js/empty_export.wast000066400000000000000000000000631423707623100227500ustar00rootroot00000000000000(module (export "" (func $foo)) (func $foo) ) binaryen-version_108/test/wasm2js/empty_imported_table.2asm.js000066400000000000000000000016121423707623100247210ustar00rootroot00000000000000function asmFunc(global, env, buffer) { "almost asm"; var HEAP8 = new global.Int8Array(buffer); var HEAP16 = new global.Int16Array(buffer); var HEAP32 = new global.Int32Array(buffer); var HEAPU8 = new global.Uint8Array(buffer); var HEAPU16 = new global.Uint16Array(buffer); var HEAPU32 = new global.Uint32Array(buffer); var HEAPF32 = new global.Float32Array(buffer); var HEAPF64 = new global.Float64Array(buffer); var Math_imul = global.Math.imul; var Math_fround = global.Math.fround; var Math_abs = global.Math.abs; var Math_clz32 = global.Math.clz32; var Math_min = global.Math.min; var Math_max = global.Math.max; var Math_floor = global.Math.floor; var Math_ceil = global.Math.ceil; var Math_sqrt = global.Math.sqrt; var abort = env.abort; var nan = global.NaN; var infinity = global.Infinity; var import$table$0 = env.table; var i64toi32_i32$HIGH_BITS = 0; return { }; } binaryen-version_108/test/wasm2js/empty_table.2asm.js000066400000000000000000000007361423707623100230240ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/emscripten-grow-no.2asm.js000066400000000000000000000044631423707623100242570ustar00rootroot00000000000000function instantiate(asmLibraryArg) { var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); } function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; // EMSCRIPTEN_START_FUNCS ; // EMSCRIPTEN_END_FUNCS ; bufferView = HEAPU8; initActiveSegments(env); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "memory": Object.create(Object.prototype, { "grow": { }, "buffer": { "get": function () { return buffer; } } }) }; } return asmFunc(asmLibraryArg); } binaryen-version_108/test/wasm2js/emscripten-grow-no.2asm.js.opt000066400000000000000000000044631423707623100250600ustar00rootroot00000000000000function instantiate(asmLibraryArg) { var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); } function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; // EMSCRIPTEN_START_FUNCS ; // EMSCRIPTEN_END_FUNCS ; bufferView = HEAPU8; initActiveSegments(env); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "memory": Object.create(Object.prototype, { "grow": { }, "buffer": { "get": function () { return buffer; } } }) }; } return asmFunc(asmLibraryArg); } binaryen-version_108/test/wasm2js/emscripten-grow-no.wast000066400000000000000000000002101423707623100237420ustar00rootroot00000000000000(module (type $0 (func)) (import "env" "memory" (memory $0 256 256)) (data (i32.const 1600) "abc") (export "memory" (memory $0)) ) binaryen-version_108/test/wasm2js/emscripten-grow-yes.2asm.js000066400000000000000000000062751423707623100244460ustar00rootroot00000000000000function instantiate(asmLibraryArg) { var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); } function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; memory.grow = __wasm_memory_grow; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; // EMSCRIPTEN_START_FUNCS ; function $0() { return __wasm_memory_size() | 0; } // EMSCRIPTEN_END_FUNCS ; bufferView = HEAPU8; initActiveSegments(env); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; memory.buffer = buffer; bufferView = HEAPU8; } return oldPages; } return { "memory": Object.create(Object.prototype, { "grow": { "value": __wasm_memory_grow }, "buffer": { "get": function () { return buffer; } } }), "get_size": $0 }; } return asmFunc(asmLibraryArg); } binaryen-version_108/test/wasm2js/emscripten-grow-yes.2asm.js.opt000066400000000000000000000062751423707623100252470ustar00rootroot00000000000000function instantiate(asmLibraryArg) { var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); } function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; memory.grow = __wasm_memory_grow; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; // EMSCRIPTEN_START_FUNCS ; function $0() { return __wasm_memory_size() | 0; } // EMSCRIPTEN_END_FUNCS ; bufferView = HEAPU8; initActiveSegments(env); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; memory.buffer = buffer; bufferView = HEAPU8; } return oldPages; } return { "memory": Object.create(Object.prototype, { "grow": { "value": __wasm_memory_grow }, "buffer": { "get": function () { return buffer; } } }), "get_size": $0 }; } return asmFunc(asmLibraryArg); } binaryen-version_108/test/wasm2js/emscripten-grow-yes.wast000066400000000000000000000003001423707623100241260ustar00rootroot00000000000000(module (type $0 (func)) (import "env" "memory" (memory $0 256 1024)) (data (i32.const 1600) "abc") (export "memory" (memory $0)) (func (export "get_size") (result i32) (memory.size)) ) binaryen-version_108/test/wasm2js/emscripten.2asm.js000066400000000000000000000211161423707623100226630ustar00rootroot00000000000000function instantiate(asmLibraryArg) { var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 1024, "aGVsbG8sIHdvcmxkIQoAAJwMAAAtKyAgIDBYMHgAKG51bGwpAAAAAAAAAAAAAAAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAuAA=="); base64DecodeToExistingUint8Array(bufferView, 1600, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); } function asmFunc(env) { var buffer = new ArrayBuffer(16777216); var FUNCTION_TABLE = env.table; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var syscall$6 = env.__syscall6; var syscall$54 = env.__syscall54; // EMSCRIPTEN_START_FUNCS ; function main() { syscall$6(1 | 0, 2 | 0) | 0; syscall$54(3 | 0, 4 | 0) | 0; FUNCTION_TABLE[HEAP32[(0 + 1030 | 0) >> 2] | 0 | 0](); internal(1 | 0) | 0; tabled(1 | 0) | 0; exported(1 | 0) | 0; } function other() { main(); } function foo() { abort(); } function bar() { HEAPU8[128 >> 0] | 0; HEAP8[128 >> 0] | 0; HEAPU16[128 >> 1] | 0; HEAP16[128 >> 1] | 0; HEAP32[16 >> 2] = 1 + 2 | 0; HEAPF32[16 >> 2] = Math_fround(Math_fround(3.0) + Math_fround(4.0)); HEAPF64[16 >> 3] = 5.0 + 6.0; HEAP8[16 >> 0] = 7 + 8 | 0; HEAP16[16 >> 1] = 9 + 10 | 0; if ((HEAP32[100 >> 2] | 0 | 0) == (1 | 0)) { bar() } if ((HEAP32[104 >> 2] | 0 | 0) < (2 | 0)) { bar() } if ((HEAP32[108 >> 2] | 0) >>> 0 < 3 >>> 0) { bar() } if ((HEAP16[112 >> 1] | 0 | 0) == (1 | 0)) { bar() } if ((HEAP16[116 >> 1] | 0 | 0) < (2 | 0)) { bar() } if ((HEAPU16[120 >> 1] | 0 | 0) < (2 | 0)) { bar() } if ((HEAP16[124 >> 1] | 0) >>> 0 < 3 >>> 0) { bar() } if ((HEAPU16[128 >> 1] | 0) >>> 0 < 3 >>> 0) { bar() } if ((HEAP8[132 >> 0] | 0 | 0) < (2 | 0)) { bar() } if ((HEAPU8[136 >> 0] | 0 | 0) < (2 | 0)) { bar() } if ((HEAP8[140 >> 0] | 0) >>> 0 < 3 >>> 0) { bar() } if ((HEAPU8[144 >> 0] | 0) >>> 0 < 3 >>> 0) { bar() } if ((bools(314159 | 0) | 0) >>> 7 | 0) { bar() } if ((bools(314159 | 0) | 0) >> 8 | 0) { bar() } if (~~Math_fround(getf32()) >>> 0) { bar() } if (~~Math_fround(getf32())) { bar() } if (~~+getf64() >>> 0) { bar() } if (~~+getf64()) { bar() } if (((geti32() | 0) + (geti32() | 0) | 0) + (geti32() | 0) | 0) { bar() } if ((geti32() | 0) + ((geti32() | 0) + (geti32() | 0) | 0) | 0) { bar() } if (((geti32() | 0) + (geti32() | 0) | 0) + ((geti32() | 0) + (geti32() | 0) | 0) | 0) { bar() } if ((((geti32() | 0) + (geti32() | 0) | 0) + ((geti32() | 0) + (geti32() | 0) | 0) | 0) + (((geti32() | 0) + (geti32() | 0) | 0) + ((geti32() | 0) + (geti32() | 0) | 0) | 0) | 0) { bar() } } function geti32() { return geti32() | 0 | 0; } function getf32() { return Math_fround(Math_fround(getf32())); } function getf64() { return +(+getf64()); } function __growWasmMemory($0) { $0 = $0 | 0; return abort() | 0; } function internal(x) { x = x | 0; return x | 0; } function tabled(x) { x = x | 0; return x | 0; } function exported(x) { x = x | 0; return x | 0; } function sub_zero(x) { x = x | 0; return x - -5 | 0 | 0; } function select(x) { x = x | 0; var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; return (wasm2js_i32$0 = x, wasm2js_i32$1 = HEAP32[16 >> 2] | 0, wasm2js_i32$2 = x, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1) | 0; } function bools(x) { x = x | 0; bools((HEAPU8[0 >> 0] | 0) & 1 | 0 | 0) | 0; bools((HEAP8[0 >> 0] | 0) & 1 | 0 | 0) | 0; bools((HEAPU16[0 >> 1] | 0) & 1 | 0 | 0) | 0; bools((HEAP16[0 >> 1] | 0) & 1 | 0 | 0) | 0; bools((HEAP32[0 >> 2] | 0) & 1 | 0 | 0) | 0; bools((HEAPU8[0 >> 0] | 0) & 2 | 0 | 0) | 0; bools(x ^ 1 | 0 | 0) | 0; if (x ^ 1 | 0) { bools(2 | 0) | 0 } if (x ^ 2 | 0) { bools(2 | 0) | 0 } bools(!(x ^ 1 | 0) | 0) | 0; abort(); } // EMSCRIPTEN_END_FUNCS ; bufferView = HEAPU8; initActiveSegments(env); FUNCTION_TABLE[1] = foo; FUNCTION_TABLE[2] = bar; FUNCTION_TABLE[3] = tabled; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "main": main, "other": other, "__growWasmMemory": __growWasmMemory, "exported": exported, "sub_zero": sub_zero, "select": select, "bools": bools }; } return asmFunc(asmLibraryArg); } binaryen-version_108/test/wasm2js/emscripten.2asm.js.opt000066400000000000000000000131551423707623100234700ustar00rootroot00000000000000function instantiate(asmLibraryArg) { var bufferView; var base64ReverseLookup = new Uint8Array(123/*'z'+1*/); for (var i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' base64ReverseLookup[97+i] = 26+i; // 'a-z' } base64ReverseLookup[43] = 62; // '+' base64ReverseLookup[47] = 63; // '/' /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */ function base64DecodeToExistingUint8Array(uint8Array, offset, b64) { var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '='); for (; i < bLength; i += 4) { b1 = base64ReverseLookup[b64.charCodeAt(i+1)]; b2 = base64ReverseLookup[b64.charCodeAt(i+2)]; uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4; if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2; if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)]; } return uint8Array; } function initActiveSegments(imports) { base64DecodeToExistingUint8Array(bufferView, 1024, "aGVsbG8sIHdvcmxkIQoAAJwMAAAtKyAgIDBYMHgAKG51bGwp"); base64DecodeToExistingUint8Array(bufferView, 1072, "EQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAARERE="); base64DecodeToExistingUint8Array(bufferView, 1153, "CwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAAL"); base64DecodeToExistingUint8Array(bufferView, 1211, "DA=="); base64DecodeToExistingUint8Array(bufferView, 1223, "DAAAAAAMAAAAAAkMAAAAAAAMAAAM"); base64DecodeToExistingUint8Array(bufferView, 1269, "Dg=="); base64DecodeToExistingUint8Array(bufferView, 1281, "DQAAAAQNAAAAAAkOAAAAAAAOAAAO"); base64DecodeToExistingUint8Array(bufferView, 1327, "EA=="); base64DecodeToExistingUint8Array(bufferView, 1339, "DwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhIS"); base64DecodeToExistingUint8Array(bufferView, 1394, "EgAAABISEgAAAAAAAAk="); base64DecodeToExistingUint8Array(bufferView, 1443, "Cw=="); base64DecodeToExistingUint8Array(bufferView, 1455, "CgAAAAAKAAAAAAkLAAAAAAALAAAL"); base64DecodeToExistingUint8Array(bufferView, 1501, "DA=="); base64DecodeToExistingUint8Array(bufferView, 1513, "DAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAu"); } function asmFunc(env) { var buffer = new ArrayBuffer(16777216); var FUNCTION_TABLE = env.table; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var syscall$6 = env.__syscall6; var syscall$54 = env.__syscall54; // EMSCRIPTEN_START_FUNCS ; function main() { syscall$6(1, 2) | 0; syscall$54(3, 4) | 0; FUNCTION_TABLE[HEAP32[257]](); } function other() { main(); } function foo() { abort(); } function bar() { HEAP32[4] = 3; HEAPF32[4] = 7; HEAPF64[2] = 11; HEAP8[16] = 15; HEAP16[8] = 19; if (HEAP32[25] == 1) { bar() } if (HEAP32[26] < 2) { bar() } if (HEAPU32[27] < 3) { bar() } if (HEAP16[56] == 1) { bar() } if (HEAP16[58] < 2) { bar() } if (HEAPU16[60] < 2) { bar() } if (HEAP16[62] >>> 0 < 3) { bar() } if (HEAPU16[64] < 3) { bar() } if (HEAP8[132] < 2) { bar() } if (HEAPU8[136] < 2) { bar() } if (HEAP8[140] >>> 0 < 3) { bar() } if (HEAPU8[144] < 3) { bar() } if (bools(314159) >>> 7 | 0) { bar() } if (bools(314159) >> 8) { bar() } if (~~getf32() >>> 0) { bar() } if (~~getf32()) { bar() } if (~~getf64() >>> 0) { bar() } if (~~getf64()) { bar() } if ((geti32() + geti32() | 0) + geti32() | 0) { bar() } if (geti32() + (geti32() + geti32() | 0) | 0) { bar() } if (geti32() + geti32() + (geti32() + geti32()) | 0) { bar() } if (geti32() + geti32() + (geti32() + geti32()) + (geti32() + geti32() + (geti32() + geti32())) | 0) { bar() } } function geti32() { return geti32(); } function getf32() { return getf32(); } function getf64() { return getf64(); } function __growWasmMemory($0) { $0 = $0 | 0; return abort() | 0; } function internal($0) { return $0; } function sub_zero($0) { $0 = $0 | 0; return $0 + 5 | 0; } function select($0) { $0 = $0 | 0; return ($0 ? $0 : HEAP32[4]) | 0; } function bools($0) { $0 = $0 | 0; var $1 = 0; bools(HEAP8[0] & 1); bools(HEAP8[0] & 1); bools(HEAP16[0] & 1); bools(HEAP16[0] & 1); bools(HEAP32[0] & 1); bools(HEAPU8[0] & 2); $1 = $0 ^ 1; bools($1); if ($1) { bools(2) } if ($0 ^ 2) { bools(2) } bools(!($0 ^ 1)); abort(); } // EMSCRIPTEN_END_FUNCS ; bufferView = HEAPU8; initActiveSegments(env); FUNCTION_TABLE[1] = foo; FUNCTION_TABLE[2] = bar; FUNCTION_TABLE[3] = internal; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "main": main, "other": other, "__growWasmMemory": __growWasmMemory, "exported": internal, "sub_zero": sub_zero, "select": select, "bools": bools }; } return asmFunc(asmLibraryArg); } binaryen-version_108/test/wasm2js/emscripten.wast000066400000000000000000000270521423707623100223710ustar00rootroot00000000000000(module (type $0 (func)) (memory $8 256 256) (data (i32.const 1024) "hello, world!\n\00\00\9c\0c\00\00-+ 0X0x\00(null)\00\00\00\00\00\00\00\00\00\00\00\00\11\00\n\00\11\11\11\00\00\00\00\05\00\00\00\00\00\00\t\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\0f\n\11\11\11\03\n\07\00\01\13\t\0b\0b\00\00\t\06\0b\00\00\0b\00\06\11\00\00\00\11\11\11\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\n\n\11\11\11\00\n\00\00\02\00\t\0b\00\00\00\t\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\04\0d\00\00\00\00\t\0e\00\00\00\00\00\0e\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\00\0f\00\00\00\00\t\10\00\00\00\00\00\10\00\00\10\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\00\n\00\00\00\00\t\0b\00\00\00\00\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\000123456789ABCDEF-0X+0X 0X-0x+0x 0x\00inf\00INF\00nan\00NAN\00.\00") (data (i32.const 1600) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (import "env" "table" (table $timport$9 7 funcref)) (elem (i32.const 1) $foo $bar $tabled) (import "env" "__syscall6" (func $syscall$6 (param i32 i32) (result i32))) (import "env" "__syscall54" (func $syscall$54 (param i32 i32) (result i32))) (global $global$0 (mut i32) (i32.const 5243904)) (export "main" (func $main)) (export "other" (func $other)) (export "__growWasmMemory" (func $__growWasmMemory)) (export "exported" (func $exported)) (export "sub-zero" (func $sub-zero)) (export "select" (func $select)) (export "bools" (func $bools)) (func $main (drop (call $syscall$6 (i32.const 1) (i32.const 2))) (drop (call $syscall$54 (i32.const 3) (i32.const 4))) (call_indirect (type $0) (i32.load offset=1030 (i32.const 0) ) ) (drop (call $internal (i32.const 1))) (drop (call $tabled (i32.const 1))) (drop (call $exported (i32.const 1))) ) (func $other (call $main) ) (func $foo (unreachable) ) (func $bar (drop (i32.load8_u (i32.const 128) ) ) (drop (i32.load8_s (i32.const 128) ) ) (drop (i32.load16_u (i32.const 128) ) ) (drop (i32.load16_s (i32.const 128) ) ) (i32.store (i32.const 16) (i32.add (i32.const 1) (i32.const 2)) ) (f32.store (i32.const 16) (f32.add (f32.const 3) (f32.const 4)) ) (f64.store (i32.const 16) (f64.add (f64.const 5) (f64.const 6)) ) (i32.store8 (i32.const 16) (i32.add (i32.const 7) (i32.const 8)) ) (i32.store16 (i32.const 16) (i32.add (i32.const 9) (i32.const 10)) ) (if (i32.eq (i32.load (i32.const 100)) (i32.const 1)) (call $bar) ) (if (i32.lt_s (i32.load (i32.const 104)) (i32.const 2)) (call $bar) ) (if (i32.lt_u (i32.load (i32.const 108)) (i32.const 3)) (call $bar) ) (if (i32.eq (i32.load16_s (i32.const 112)) (i32.const 1)) (call $bar) ) (if (i32.lt_s (i32.load16_s (i32.const 116)) (i32.const 2)) (call $bar) ) (if (i32.lt_s (i32.load16_u (i32.const 120)) (i32.const 2)) (call $bar) ) (if (i32.lt_u (i32.load16_s (i32.const 124)) (i32.const 3)) (call $bar) ) (if (i32.lt_u (i32.load16_u (i32.const 128)) (i32.const 3)) (call $bar) ) (if (i32.lt_s (i32.load8_s (i32.const 132)) (i32.const 2)) (call $bar) ) (if (i32.lt_s (i32.load8_u (i32.const 136)) (i32.const 2)) (call $bar) ) (if (i32.lt_u (i32.load8_s (i32.const 140)) (i32.const 3)) (call $bar) ) (if (i32.lt_u (i32.load8_u (i32.const 144)) (i32.const 3)) (call $bar) ) (if (i32.shr_u (call $bools (i32.const 314159)) (i32.const 7)) (call $bar) ) (if (i32.shr_s (call $bools (i32.const 314159)) (i32.const 8)) (call $bar) ) (if (i32.trunc_f32_u (call $getf32)) (call $bar) ) (if (i32.trunc_f32_s (call $getf32)) (call $bar) ) (if (i32.trunc_f64_u (call $getf64)) (call $bar) ) (if (i32.trunc_f64_s (call $getf64)) (call $bar) ) (if (i32.add (i32.add (call $geti32) (call $geti32) ) (call $geti32) ) (call $bar) ) (if (i32.add (call $geti32) (i32.add (call $geti32) (call $geti32) ) ) (call $bar) ) (if (i32.add (i32.add (call $geti32) (call $geti32) ) (i32.add (call $geti32) (call $geti32) ) ) (call $bar) ) (if (i32.add (i32.add (i32.add (call $geti32) (call $geti32) ) (i32.add (call $geti32) (call $geti32) ) ) (i32.add (i32.add (call $geti32) (call $geti32) ) (i32.add (call $geti32) (call $geti32) ) ) ) (call $bar) ) ) (func $geti32 (result i32) (call $geti32) ) (func $getf32 (result f32) (call $getf32) ) (func $getf64 (result f64) (call $getf64) ) (func $__growWasmMemory (param $0 i32) (result i32) (memory.grow (local.get $0) ) ) (func $internal (param $x i32) (result i32) (local.get $x) ) (func $tabled (param $x i32) (result i32) (local.get $x) ) (func $exported (param $x i32) (result i32) (local.get $x) ) (func $sub-zero (param $x i32) (result i32) (i32.sub (local.get $x) (i32.const -5)) ) (func $select (param $x i32) (result i32) (select (local.get $x) (i32.load (i32.const 16)) ;; we can ignore this implicit trap, no side effects (local.get $x) ) ) (func $bools (param $x i32) (result i32) (drop (call $bools (i32.and (i32.load8_u (i32.const 0)) (i32.const 1)))) (drop (call $bools (i32.and (i32.load8_s (i32.const 0)) (i32.const 1)))) (drop (call $bools (i32.and (i32.load16_u (i32.const 0)) (i32.const 1)))) (drop (call $bools (i32.and (i32.load16_s (i32.const 0)) (i32.const 1)))) (drop (call $bools (i32.and (i32.load (i32.const 0)) (i32.const 1)))) (drop (call $bools (i32.and (i32.load8_u (i32.const 0)) (i32.const 2)))) (drop (call $bools (i32.xor (local.get $x) (i32.const 1)))) (if (i32.xor (local.get $x) (i32.const 1)) (drop (call $bools (i32.const 2))) ) (if (i32.xor (local.get $x) (i32.const 2)) (drop (call $bools (i32.const 2))) ) (drop (call $bools (i32.eqz (i32.xor (local.get $x) (i32.const 1))))) (unreachable) ) ) binaryen-version_108/test/wasm2js/endianness.2asm.js000066400000000000000000000600251423707623100226430ustar00rootroot00000000000000import { setTempRet0 } from 'env'; var bufferView; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function wasm2js_scratch_load_f32() { return f32ScratchView[2]; } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function i16_store_little(address, value) { address = address | 0; value = value | 0; HEAP8[address >> 0] = value; HEAP8[(address + 1 | 0) >> 0] = value >>> 8 | 0; } function i32_store_little(address, value) { address = address | 0; value = value | 0; i16_store_little(address | 0, value | 0); i16_store_little(address + 2 | 0 | 0, value >>> 16 | 0 | 0); } function i64_store_little(address, value, value$hi) { address = address | 0; value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $9_1 = 0, $6_1 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = value$hi; i32_store_little(address | 0, value | 0); $6_1 = address + 4 | 0; i64toi32_i32$2 = value; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $9_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $9_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } i32_store_little($6_1 | 0, $9_1 | 0); } function i16_load_little(address) { address = address | 0; return HEAPU8[address >> 0] | 0 | ((HEAPU8[(address + 1 | 0) >> 0] | 0) << 8 | 0) | 0 | 0; } function i32_load_little(address) { address = address | 0; return i16_load_little(address | 0) | 0 | ((i16_load_little(address + 2 | 0 | 0) | 0) << 16 | 0) | 0 | 0; } function i64_load_little(address) { address = address | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $9_1 = 0, $3 = 0, $3$hi = 0, $8$hi = 0; i64toi32_i32$0 = 0; $3 = i32_load_little(address | 0) | 0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = i32_load_little(address + 4 | 0 | 0) | 0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $9_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $9_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $9_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$0 | i64toi32_i32$3 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$2; return i64toi32_i32$0 | 0; } function $6(value) { value = value | 0; i16_store_little(0 | 0, value | 0); return HEAP16[0 >> 1] | 0 | 0; } function $7(value) { value = value | 0; i16_store_little(0 | 0, value | 0); return HEAPU16[0 >> 1] | 0 | 0; } function $8(value) { value = value | 0; i32_store_little(0 | 0, value | 0); return HEAP32[0 >> 2] | 0 | 0; } function $9(value, value$hi) { value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; i16_store_little(0 | 0, value | 0); i64toi32_i32$0 = HEAP16[0 >> 1] | 0; i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $10(value, value$hi) { value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; i16_store_little(0 | 0, value | 0); i64toi32_i32$0 = HEAPU16[0 >> 1] | 0; i64toi32_i32$1 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $11(value, value$hi) { value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; i32_store_little(0 | 0, value | 0); i64toi32_i32$0 = HEAP32[0 >> 2] | 0; i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $12(value, value$hi) { value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; i32_store_little(0 | 0, value | 0); i64toi32_i32$0 = HEAP32[0 >> 2] | 0; i64toi32_i32$1 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $13(value, value$hi) { value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; i64_store_little(0 | 0, value | 0, i64toi32_i32$0 | 0); i64toi32_i32$2 = 0; i64toi32_i32$0 = HEAP32[i64toi32_i32$2 >> 2] | 0; i64toi32_i32$1 = HEAP32[(i64toi32_i32$2 + 4 | 0) >> 2] | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $14(value) { value = Math_fround(value); i32_store_little(0 | 0, (wasm2js_scratch_store_f32(value), wasm2js_scratch_load_i32(2)) | 0); return Math_fround(Math_fround(HEAPF32[0 >> 2])); } function $15(value) { value = +value; var i64toi32_i32$0 = 0; wasm2js_scratch_store_f64(+value); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64_store_little(0 | 0, wasm2js_scratch_load_i32(0 | 0) | 0 | 0, i64toi32_i32$0 | 0); return +(+HEAPF64[0 >> 3]); } function $16(value) { value = value | 0; HEAP16[0 >> 1] = value; return i16_load_little(0 | 0) | 0 | 0; } function $17(value) { value = value | 0; HEAP32[0 >> 2] = value; return i32_load_little(0 | 0) | 0 | 0; } function $18(value, value$hi) { value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; HEAP16[0 >> 1] = value; i64toi32_i32$0 = 0; i64toi32_i32$1 = i16_load_little(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $19(value, value$hi) { value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; HEAP32[0 >> 2] = value; i64toi32_i32$0 = 0; i64toi32_i32$1 = i32_load_little(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $20(value, value$hi) { value = value | 0; value$hi = value$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0; i64toi32_i32$0 = value$hi; i64toi32_i32$1 = 0; HEAP32[i64toi32_i32$1 >> 2] = value; HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0; i64toi32_i32$0 = i64_load_little(0 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $21(value) { value = Math_fround(value); HEAPF32[0 >> 2] = value; return Math_fround((wasm2js_scratch_store_i32(2, i32_load_little(0 | 0) | 0), wasm2js_scratch_load_f32())); } function $22(value) { value = +value; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; HEAPF64[0 >> 3] = value; i64toi32_i32$0 = i64_load_little(0 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; wasm2js_scratch_store_i32(0 | 0, i64toi32_i32$0 | 0); wasm2js_scratch_store_i32(1 | 0, i64toi32_i32$1 | 0); return +(+wasm2js_scratch_load_f64()); } function legalstub$9($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12_1 = 0, $13_1 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $9(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13_1 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function legalstub$10($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12_1 = 0, $13_1 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $10(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13_1 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function legalstub$11($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12_1 = 0, $13_1 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $11(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13_1 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function legalstub$12($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12_1 = 0, $13_1 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $12(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13_1 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function legalstub$13($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12_1 = 0, $13_1 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $13(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13_1 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function legalstub$18($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12_1 = 0, $13_1 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $18(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13_1 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function legalstub$19($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12_1 = 0, $13_1 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $19(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13_1 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function legalstub$20($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12_1 = 0, $13_1 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $20(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13_1 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; bufferView = HEAPU8; } return oldPages; } return { "i32_load16_s": $6, "i32_load16_u": $7, "i32_load": $8, "i64_load16_s": legalstub$9, "i64_load16_u": legalstub$10, "i64_load32_s": legalstub$11, "i64_load32_u": legalstub$12, "i64_load": legalstub$13, "f32_load": $14, "f64_load": $15, "i32_store16": $16, "i32_store": $17, "i64_store16": legalstub$18, "i64_store32": legalstub$19, "i64_store": legalstub$20, "f32_store": $21, "f64_store": $22 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_load16_s = retasmFunc.i32_load16_s; export var i32_load16_u = retasmFunc.i32_load16_u; export var i32_load = retasmFunc.i32_load; export var i64_load16_s = retasmFunc.i64_load16_s; export var i64_load16_u = retasmFunc.i64_load16_u; export var i64_load32_s = retasmFunc.i64_load32_s; export var i64_load32_u = retasmFunc.i64_load32_u; export var i64_load = retasmFunc.i64_load; export var f32_load = retasmFunc.f32_load; export var f64_load = retasmFunc.f64_load; export var i32_store16 = retasmFunc.i32_store16; export var i32_store = retasmFunc.i32_store; export var i64_store16 = retasmFunc.i64_store16; export var i64_store32 = retasmFunc.i64_store32; export var i64_store = retasmFunc.i64_store; export var f32_store = retasmFunc.f32_store; export var f64_store = retasmFunc.f64_store; binaryen-version_108/test/wasm2js/excess_fallthrough.2asm.js000066400000000000000000000014351423707623100244050ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function bar() { } function foo($0) { $0 = $0 | 0; label$4 : while (1) { label$5 : { bar(); block : { switch (123 | 0) { case 0: bar(); break; default: break label$5; }; } return; } abort(); }; } return { "foo": foo }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/excess_fallthrough.2asm.js.opt000066400000000000000000000010741423707623100252050ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function foo($0) { $0 = $0 | 0; abort(); } return { "foo": foo }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/excess_fallthrough.wast000066400000000000000000000004531423707623100241050ustar00rootroot00000000000000(module (export "foo" (func $foo)) (func $bar) (func $foo (param $0 i32) (loop $label$4 (block $label$5 (call $bar) (block (block $label$7 (br_table $label$7 $label$5 (i32.const 123) ) ) (call $bar) ) (return) ) (unreachable) ) ) ) binaryen-version_108/test/wasm2js/export_global.2asm.js000066400000000000000000000013651423707623100233570ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var global0 = 655360; function $0() { return 42 | 0; } return { "HELLO": { get value() { return global0; }, set value(_global0) { global0 = _global0; } }, "helloWorld": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var HELLO = retasmFunc.HELLO; export var helloWorld = retasmFunc.helloWorld; binaryen-version_108/test/wasm2js/export_global.2asm.js.opt000066400000000000000000000013611423707623100241540ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var global0 = 655360; function $0() { return 42; } return { "HELLO": { get value() { return global0; }, set value(_global0) { global0 = _global0; } }, "helloWorld": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var HELLO = retasmFunc.HELLO; export var helloWorld = retasmFunc.helloWorld; binaryen-version_108/test/wasm2js/export_global.wast000066400000000000000000000002471423707623100230560ustar00rootroot00000000000000(module (global $global0 i32 (i32.const 655360)) (export "HELLO" (global $global0)) (func (result i32) (i32.const 42)) (export "helloWorld" (func 0)) )binaryen-version_108/test/wasm2js/f32.2asm.js000066400000000000000000000053161423707623100211100ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(x + y)); } function $1(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(x - y)); } function $2(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(x * y)); } function $3(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(x / y)); } function $4(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_sqrt(x))); } function $5(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(Math_min(x, y))); } function $6(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(Math_max(x, y))); } function $7(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_ceil(x))); } function $8(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_floor(x))); } function $9(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_trunc(x))); } function $10(x) { x = Math_fround(x); return Math_fround(Math_fround(__wasm_nearest_f32(Math_fround(x)))); } function __wasm_nearest_f32(var$0) { var$0 = Math_fround(var$0); var var$1 = Math_fround(0), var$2 = Math_fround(0); var$1 = Math_fround(Math_floor(var$0)); var$2 = Math_fround(var$0 - var$1); if (!(var$2 < Math_fround(.5))) { block : { var$0 = Math_fround(Math_ceil(var$0)); if (var$2 > Math_fround(.5)) { return Math_fround(var$0) } var$2 = Math_fround(var$1 * Math_fround(.5)); var$1 = Math_fround(var$2 - Math_fround(Math_floor(var$2))) == Math_fround(0.0) ? var$1 : var$0; } } return Math_fround(var$1); } return { "add": $0, "sub": $1, "mul": $2, "div": $3, "sqrt": $4, "min": $5, "max": $6, "ceil": $7, "floor": $8, "trunc": $9, "nearest": $10 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var add = retasmFunc.add; export var sub = retasmFunc.sub; export var mul = retasmFunc.mul; export var div = retasmFunc.div; export var sqrt = retasmFunc.sqrt; export var min = retasmFunc.min; export var max = retasmFunc.max; export var ceil = retasmFunc.ceil; export var floor = retasmFunc.floor; export var trunc = retasmFunc.trunc; export var nearest = retasmFunc.nearest; binaryen-version_108/test/wasm2js/f32_cmp.2asm.js000066400000000000000000000024011423707623100217370ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x, y) { x = Math_fround(x); y = Math_fround(y); return x == y | 0; } function $1(x, y) { x = Math_fround(x); y = Math_fround(y); return x != y | 0; } function $2(x, y) { x = Math_fround(x); y = Math_fround(y); return x < y | 0; } function $3(x, y) { x = Math_fround(x); y = Math_fround(y); return x <= y | 0; } function $4(x, y) { x = Math_fround(x); y = Math_fround(y); return x > y | 0; } function $5(x, y) { x = Math_fround(x); y = Math_fround(y); return x >= y | 0; } return { "eq": $0, "ne": $1, "lt": $2, "le": $3, "gt": $4, "ge": $5 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var eq = retasmFunc.eq; export var ne = retasmFunc.ne; export var lt = retasmFunc.lt; export var le = retasmFunc.le; export var gt = retasmFunc.gt; export var ge = retasmFunc.ge; binaryen-version_108/test/wasm2js/f64_cmp.2asm.js000066400000000000000000000021611423707623100217470ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x, y) { x = +x; y = +y; return x == y | 0; } function $1(x, y) { x = +x; y = +y; return x != y | 0; } function $2(x, y) { x = +x; y = +y; return x < y | 0; } function $3(x, y) { x = +x; y = +y; return x <= y | 0; } function $4(x, y) { x = +x; y = +y; return x > y | 0; } function $5(x, y) { x = +x; y = +y; return x >= y | 0; } return { "eq": $0, "ne": $1, "lt": $2, "le": $3, "gt": $4, "ge": $5 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var eq = retasmFunc.eq; export var ne = retasmFunc.ne; export var lt = retasmFunc.lt; export var le = retasmFunc.le; export var gt = retasmFunc.gt; export var ge = retasmFunc.ge; binaryen-version_108/test/wasm2js/fac.2asm.js000066400000000000000000000473621423707623100212560ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0($0_1, $0$hi) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $12 = 0, $12$hi = 0, $8 = 0, $8$hi = 0; i64toi32_i32$2 = $0_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & ($0$hi | 0) == (i64toi32_i32$1 | 0) | 0) { i64toi32_i32$2 = 0; $12 = 1; $12$hi = i64toi32_i32$2; } else { i64toi32_i32$2 = $0$hi; i64toi32_i32$3 = $0_1; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + 0 | 0; i64toi32_i32$5 = $0$hi - i64toi32_i32$5 | 0; i64toi32_i32$5 = $0(i64toi32_i32$3 - i64toi32_i32$1 | 0 | 0, i64toi32_i32$5 | 0) | 0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; $8 = i64toi32_i32$5; $8$hi = i64toi32_i32$3; i64toi32_i32$3 = $0$hi; i64toi32_i32$5 = $8$hi; i64toi32_i32$5 = __wasm_i64_mul($0_1 | 0, i64toi32_i32$3 | 0, $8 | 0, i64toi32_i32$5 | 0) | 0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; $12 = i64toi32_i32$5; $12$hi = i64toi32_i32$3; } i64toi32_i32$3 = $12$hi; i64toi32_i32$5 = $12; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function fac_rec_named(n, n$hi) { n = n | 0; n$hi = n$hi | 0; var i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $12 = 0, $12$hi = 0, $8 = 0, $8$hi = 0; i64toi32_i32$2 = n; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (n$hi | 0) == (i64toi32_i32$1 | 0) | 0) { i64toi32_i32$2 = 0; $12 = 1; $12$hi = i64toi32_i32$2; } else { i64toi32_i32$2 = n$hi; i64toi32_i32$3 = n; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + 0 | 0; i64toi32_i32$5 = n$hi - i64toi32_i32$5 | 0; i64toi32_i32$5 = fac_rec_named(i64toi32_i32$3 - i64toi32_i32$1 | 0 | 0, i64toi32_i32$5 | 0) | 0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; $8 = i64toi32_i32$5; $8$hi = i64toi32_i32$3; i64toi32_i32$3 = n$hi; i64toi32_i32$5 = $8$hi; i64toi32_i32$5 = __wasm_i64_mul(n | 0, i64toi32_i32$3 | 0, $8 | 0, i64toi32_i32$5 | 0) | 0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; $12 = i64toi32_i32$5; $12$hi = i64toi32_i32$3; } i64toi32_i32$3 = $12$hi; i64toi32_i32$5 = $12; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function $2($0_1, $0$hi) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, $1$hi = 0, i64toi32_i32$5 = 0, $1 = 0, $2$hi = 0, i64toi32_i32$1 = 0, $2_1 = 0; i64toi32_i32$0 = $0$hi; $1 = $0_1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; $2_1 = 1; $2$hi = i64toi32_i32$0; block : { loop_in : while (1) { i64toi32_i32$0 = $1$hi; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break block } else { i64toi32_i32$2 = $1$hi; i64toi32_i32$2 = $2$hi; i64toi32_i32$2 = $1$hi; i64toi32_i32$0 = $2$hi; i64toi32_i32$0 = __wasm_i64_mul($1 | 0, i64toi32_i32$2 | 0, $2_1 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$0; $2$hi = i64toi32_i32$2; i64toi32_i32$2 = $1$hi; i64toi32_i32$3 = $1; i64toi32_i32$0 = 0; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $1 = i64toi32_i32$3 - i64toi32_i32$1 | 0; $1$hi = i64toi32_i32$5; } continue loop_in; }; } i64toi32_i32$5 = $2$hi; i64toi32_i32$3 = $2_1; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } function $3(n, n$hi) { n = n | 0; n$hi = n$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i$hi = 0, i64toi32_i32$5 = 0, i = 0, res$hi = 0, i64toi32_i32$1 = 0, res = 0; i64toi32_i32$0 = n$hi; i = n; i$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; res = 1; res$hi = i64toi32_i32$0; done : { loop : while (1) { i64toi32_i32$0 = i$hi; i64toi32_i32$2 = i; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break done } else { i64toi32_i32$2 = i$hi; i64toi32_i32$2 = res$hi; i64toi32_i32$2 = i$hi; i64toi32_i32$0 = res$hi; i64toi32_i32$0 = __wasm_i64_mul(i | 0, i64toi32_i32$2 | 0, res | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; res = i64toi32_i32$0; res$hi = i64toi32_i32$2; i64toi32_i32$2 = i$hi; i64toi32_i32$3 = i; i64toi32_i32$0 = 0; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; i = i64toi32_i32$3 - i64toi32_i32$1 | 0; i$hi = i64toi32_i32$5; } continue loop; }; } i64toi32_i32$5 = res$hi; i64toi32_i32$3 = res; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } function $4($0_1, $0$hi) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, $1$hi = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, i64toi32_i32$4 = 0, $13 = 0, $14 = 0, $15 = 0; i64toi32_i32$0 = 0; $1 = 1; $1$hi = i64toi32_i32$0; block : { i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 2; if ((i64toi32_i32$0 | 0) < (i64toi32_i32$1 | 0)) { $10 = 1 } else { if ((i64toi32_i32$0 | 0) <= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 >= i64toi32_i32$3 >>> 0) { $11 = 0 } else { $11 = 1 } $12 = $11; } else { $12 = 0 } $10 = $12; } if ($10) { break block } loop_in : while (1) { i64toi32_i32$2 = $1$hi; i64toi32_i32$2 = $0$hi; i64toi32_i32$2 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = __wasm_i64_mul($1 | 0, i64toi32_i32$2 | 0, $0_1 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$0; $1$hi = i64toi32_i32$2; i64toi32_i32$2 = $0$hi; i64toi32_i32$3 = $0_1; i64toi32_i32$0 = -1; i64toi32_i32$1 = -1; i64toi32_i32$4 = $0_1 + i64toi32_i32$1 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$0 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$1 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } $0_1 = i64toi32_i32$4; $0$hi = i64toi32_i32$5; i64toi32_i32$2 = $0_1; i64toi32_i32$3 = 0; i64toi32_i32$1 = 1; if ((i64toi32_i32$5 | 0) > (i64toi32_i32$3 | 0)) { $13 = 1 } else { if ((i64toi32_i32$5 | 0) >= (i64toi32_i32$3 | 0)) { if (i64toi32_i32$2 >>> 0 <= i64toi32_i32$1 >>> 0) { $14 = 0 } else { $14 = 1 } $15 = $14; } else { $15 = 0 } $13 = $15; } if ($13) { continue loop_in } break loop_in; }; } i64toi32_i32$2 = $1$hi; i64toi32_i32$5 = $1; i64toi32_i32$HIGH_BITS = i64toi32_i32$2; return i64toi32_i32$5 | 0; } function legalstub$0($0_1, $1) { $0_1 = $0_1 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $0(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$fac_rec_named($0_1, $1) { $0_1 = $0_1 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = fac_rec_named(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$2($0_1, $1) { $0_1 = $0_1 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1) { $0_1 = $0_1 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$4($0_1, $1) { $0_1 = $0_1 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $4(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, var$2 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$3 = 0, var$4 = 0, var$5 = 0, $21 = 0, $22 = 0, var$6 = 0, $24 = 0, $17 = 0, $18 = 0, $23 = 0, $29 = 0, $45 = 0, $56$hi = 0, $62$hi = 0; i64toi32_i32$0 = var$1$hi; var$2 = var$1; var$4 = var$2 >>> 16 | 0; i64toi32_i32$0 = var$0$hi; var$3 = var$0; var$5 = var$3 >>> 16 | 0; $17 = Math_imul(var$4, var$5); $18 = var$2; i64toi32_i32$2 = var$3; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $21 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } $23 = $17 + Math_imul($18, $21) | 0; i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $22 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $22 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } $29 = $23 + Math_imul($22, var$3) | 0; var$2 = var$2 & 65535 | 0; var$3 = var$3 & 65535 | 0; var$6 = Math_imul(var$2, var$3); var$2 = (var$6 >>> 16 | 0) + Math_imul(var$2, var$5) | 0; $45 = $29 + (var$2 >>> 16 | 0) | 0; var$2 = (var$2 & 65535 | 0) + Math_imul(var$4, var$3) | 0; i64toi32_i32$2 = 0; i64toi32_i32$1 = $45 + (var$2 >>> 16 | 0) | 0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $24 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $24 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $56$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; $62$hi = i64toi32_i32$0; i64toi32_i32$0 = $56$hi; i64toi32_i32$2 = $24; i64toi32_i32$1 = $62$hi; i64toi32_i32$3 = var$2 << 16 | 0 | (var$6 & 65535 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; i64toi32_i32$2 = i64toi32_i32$2 | i64toi32_i32$3 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function __wasm_i64_mul(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } return { "fac_rec": legalstub$0, "fac_rec_named": legalstub$fac_rec_named, "fac_iter": legalstub$2, "fac_iter_named": legalstub$3, "fac_opt": legalstub$4 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var fac_rec = retasmFunc.fac_rec; export var fac_rec_named = retasmFunc.fac_rec_named; export var fac_iter = retasmFunc.fac_iter; export var fac_iter_named = retasmFunc.fac_iter_named; export var fac_opt = retasmFunc.fac_opt; binaryen-version_108/test/wasm2js/float-ops.2asm.js000066400000000000000000000347111423707623100224230ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround($0 + $1_1)); } function $2($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround($0 - $1_1)); } function $3($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround($0 * $1_1)); } function $4($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround($0 / $1_1)); } function $5($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +($0 + $1_1); } function $6($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +($0 - $1_1); } function $7($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +($0 * $1_1); } function $8($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +($0 / $1_1); } function $9($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 == $1_1 | 0; } function $10($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 != $1_1 | 0; } function $11($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 >= $1_1 | 0; } function $12($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 > $1_1 | 0; } function $13($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 <= $1_1 | 0; } function $14($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 < $1_1 | 0; } function $15($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 == $1_1 | 0; } function $16($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 != $1_1 | 0; } function $17($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 >= $1_1 | 0; } function $18($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 > $1_1 | 0; } function $19($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 <= $1_1 | 0; } function $20($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 < $1_1 | 0; } function $21($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround(Math_min($0, $1_1))); } function $22($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround(Math_max($0, $1_1))); } function $23($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +Math_min($0, $1_1); } function $24($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +Math_max($0, $1_1); } function $25($0) { $0 = Math_fround($0); return +(+$0); } function $26($0) { $0 = +$0; return Math_fround(Math_fround($0)); } function $27($0) { $0 = Math_fround($0); return Math_fround(Math_fround(Math_floor($0))); } function $28($0) { $0 = Math_fround($0); return Math_fround(Math_fround(Math_ceil($0))); } function $29($0) { $0 = +$0; return +Math_floor($0); } function $30($0) { $0 = +$0; return +Math_ceil($0); } function $31($0) { $0 = Math_fround($0); return Math_fround(Math_fround(Math_sqrt($0))); } function $32($0) { $0 = +$0; return +Math_sqrt($0); } function $35($0) { $0 = $0 | 0; return Math_fround(Math_fround($0 | 0)); } function $36($0) { $0 = $0 | 0; return +(+($0 | 0)); } function $37($0) { $0 = $0 | 0; return Math_fround(Math_fround($0 >>> 0)); } function $38($0) { $0 = $0 | 0; return +(+($0 >>> 0)); } function $39($0) { $0 = Math_fround($0); return ~~$0 | 0; } function $40($0) { $0 = +$0; return ~~$0 | 0; } function $41($0) { $0 = Math_fround($0); return ~~$0 >>> 0 | 0; } function $42($0) { $0 = +$0; return ~~$0 >>> 0 | 0; } function $43($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; return Math_fround(Math_fround(+($0 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 | 0))); } function $44($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; return +(+($0 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 | 0)); } function $45($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; return Math_fround(Math_fround(+($0 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0))); } function $46($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; return +(+($0 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0)); } function $47($0) { $0 = Math_fround($0); var i64toi32_i32$0 = Math_fround(0), $3_1 = 0, $4_1 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = $0; if (Math_fround(Math_abs(i64toi32_i32$0)) >= Math_fround(1.0)) { if (i64toi32_i32$0 > Math_fround(0.0)) { $3_1 = ~~Math_fround(Math_min(Math_fround(Math_floor(Math_fround(i64toi32_i32$0 / Math_fround(4294967296.0)))), Math_fround(Math_fround(4294967296.0) - Math_fround(1.0)))) >>> 0 } else { $3_1 = ~~Math_fround(Math_ceil(Math_fround(Math_fround(i64toi32_i32$0 - Math_fround(~~i64toi32_i32$0 >>> 0 >>> 0)) / Math_fround(4294967296.0)))) >>> 0 } $4_1 = $3_1; } else { $4_1 = 0 } i64toi32_i32$1 = $4_1; return (~~i64toi32_i32$0 >>> 0 | 0) == (0 | 0) & (i64toi32_i32$1 | 0) == (0 | 0) | 0 | 0; } function $48($0) { $0 = +$0; var i64toi32_i32$0 = 0.0, $3_1 = 0, $4_1 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = $0; if (Math_abs(i64toi32_i32$0) >= 1.0) { if (i64toi32_i32$0 > 0.0) { $3_1 = ~~Math_min(Math_floor(i64toi32_i32$0 / 4294967296.0), 4294967296.0 - 1.0) >>> 0 } else { $3_1 = ~~Math_ceil((i64toi32_i32$0 - +(~~i64toi32_i32$0 >>> 0 >>> 0)) / 4294967296.0) >>> 0 } $4_1 = $3_1; } else { $4_1 = 0 } i64toi32_i32$1 = $4_1; return (~~i64toi32_i32$0 >>> 0 | 0) == (0 | 0) & (i64toi32_i32$1 | 0) == (0 | 0) | 0 | 0; } function $49($0) { $0 = Math_fround($0); var i64toi32_i32$0 = Math_fround(0), $3_1 = 0, $4_1 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = $0; if (Math_fround(Math_abs(i64toi32_i32$0)) >= Math_fround(1.0)) { if (i64toi32_i32$0 > Math_fround(0.0)) { $3_1 = ~~Math_fround(Math_min(Math_fround(Math_floor(Math_fround(i64toi32_i32$0 / Math_fround(4294967296.0)))), Math_fround(Math_fround(4294967296.0) - Math_fround(1.0)))) >>> 0 } else { $3_1 = ~~Math_fround(Math_ceil(Math_fround(Math_fround(i64toi32_i32$0 - Math_fround(~~i64toi32_i32$0 >>> 0 >>> 0)) / Math_fround(4294967296.0)))) >>> 0 } $4_1 = $3_1; } else { $4_1 = 0 } i64toi32_i32$1 = $4_1; return (~~i64toi32_i32$0 >>> 0 | 0) == (0 | 0) & (i64toi32_i32$1 | 0) == (0 | 0) | 0 | 0; } function $50($0) { $0 = +$0; var i64toi32_i32$0 = 0.0, $3_1 = 0, $4_1 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = $0; if (Math_abs(i64toi32_i32$0) >= 1.0) { if (i64toi32_i32$0 > 0.0) { $3_1 = ~~Math_min(Math_floor(i64toi32_i32$0 / 4294967296.0), 4294967296.0 - 1.0) >>> 0 } else { $3_1 = ~~Math_ceil((i64toi32_i32$0 - +(~~i64toi32_i32$0 >>> 0 >>> 0)) / 4294967296.0) >>> 0 } $4_1 = $3_1; } else { $4_1 = 0 } i64toi32_i32$1 = $4_1; return (~~i64toi32_i32$0 >>> 0 | 0) == (0 | 0) & (i64toi32_i32$1 | 0) == (0 | 0) | 0 | 0; } function legalstub$43($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return Math_fround(Math_fround($43(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0))); } function legalstub$44($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return +(+$44(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0)); } function legalstub$45($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return Math_fround(Math_fround($45(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0))); } function legalstub$46($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10_1 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10_1; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return +(+$46(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0)); } return { "f32_add": $1, "f32_sub": $2, "f32_mul": $3, "f32_div": $4, "f64_add": $5, "f64_sub": $6, "f64_mul": $7, "f64_div": $8, "f32_eq": $9, "f32_ne": $10, "f32_ge": $11, "f32_gt": $12, "f32_le": $13, "f32_lt": $14, "f64_eq": $15, "f64_ne": $16, "f64_ge": $17, "f64_gt": $18, "f64_le": $19, "f64_lt": $20, "f32_min": $21, "f32_max": $22, "f64_min": $23, "f64_max": $24, "f64_promote": $25, "f32_demote": $26, "f32_floor": $27, "f32_ceil": $28, "f64_floor": $29, "f64_ceil": $30, "f32_sqrt": $31, "f64_sqrt": $32, "i32_to_f32": $35, "i32_to_f64": $36, "u32_to_f32": $37, "u32_to_f64": $38, "f32_to_i32": $39, "f64_to_i32": $40, "f32_to_u32": $41, "f64_to_u32": $42, "i64_to_f32": legalstub$43, "i64_to_f64": legalstub$44, "u64_to_f32": legalstub$45, "u64_to_f64": legalstub$46, "f32_to_i64": $47, "f64_to_i64": $48, "f32_to_u64": $49, "f64_to_u64": $50 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var f32_add = retasmFunc.f32_add; export var f32_sub = retasmFunc.f32_sub; export var f32_mul = retasmFunc.f32_mul; export var f32_div = retasmFunc.f32_div; export var f64_add = retasmFunc.f64_add; export var f64_sub = retasmFunc.f64_sub; export var f64_mul = retasmFunc.f64_mul; export var f64_div = retasmFunc.f64_div; export var f32_eq = retasmFunc.f32_eq; export var f32_ne = retasmFunc.f32_ne; export var f32_ge = retasmFunc.f32_ge; export var f32_gt = retasmFunc.f32_gt; export var f32_le = retasmFunc.f32_le; export var f32_lt = retasmFunc.f32_lt; export var f64_eq = retasmFunc.f64_eq; export var f64_ne = retasmFunc.f64_ne; export var f64_ge = retasmFunc.f64_ge; export var f64_gt = retasmFunc.f64_gt; export var f64_le = retasmFunc.f64_le; export var f64_lt = retasmFunc.f64_lt; export var f32_min = retasmFunc.f32_min; export var f32_max = retasmFunc.f32_max; export var f64_min = retasmFunc.f64_min; export var f64_max = retasmFunc.f64_max; export var f64_promote = retasmFunc.f64_promote; export var f32_demote = retasmFunc.f32_demote; export var f32_floor = retasmFunc.f32_floor; export var f32_ceil = retasmFunc.f32_ceil; export var f64_floor = retasmFunc.f64_floor; export var f64_ceil = retasmFunc.f64_ceil; export var f32_sqrt = retasmFunc.f32_sqrt; export var f64_sqrt = retasmFunc.f64_sqrt; export var i32_to_f32 = retasmFunc.i32_to_f32; export var i32_to_f64 = retasmFunc.i32_to_f64; export var u32_to_f32 = retasmFunc.u32_to_f32; export var u32_to_f64 = retasmFunc.u32_to_f64; export var f32_to_i32 = retasmFunc.f32_to_i32; export var f64_to_i32 = retasmFunc.f64_to_i32; export var f32_to_u32 = retasmFunc.f32_to_u32; export var f64_to_u32 = retasmFunc.f64_to_u32; export var i64_to_f32 = retasmFunc.i64_to_f32; export var i64_to_f64 = retasmFunc.i64_to_f64; export var u64_to_f32 = retasmFunc.u64_to_f32; export var u64_to_f64 = retasmFunc.u64_to_f64; export var f32_to_i64 = retasmFunc.f32_to_i64; export var f64_to_i64 = retasmFunc.f64_to_i64; export var f32_to_u64 = retasmFunc.f32_to_u64; export var f64_to_u64 = retasmFunc.f64_to_u64; binaryen-version_108/test/wasm2js/float-ops.2asm.js.opt000066400000000000000000000200141423707623100232130ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround($0 + $1_1)); } function $2($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround($0 - $1_1)); } function $3($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround($0 * $1_1)); } function $4($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround($0 / $1_1)); } function $5($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +($0 + $1_1); } function $6($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +($0 - $1_1); } function $7($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +($0 * $1_1); } function $8($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +($0 / $1_1); } function $9($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 == $1_1 | 0; } function $10($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 != $1_1 | 0; } function $11($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 >= $1_1 | 0; } function $12($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 > $1_1 | 0; } function $13($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 <= $1_1 | 0; } function $14($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return $0 < $1_1 | 0; } function $15($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 == $1_1 | 0; } function $16($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 != $1_1 | 0; } function $17($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 >= $1_1 | 0; } function $18($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 > $1_1 | 0; } function $19($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 <= $1_1 | 0; } function $20($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return $0 < $1_1 | 0; } function $21($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround(Math_min($0, $1_1))); } function $22($0, $1_1) { $0 = Math_fround($0); $1_1 = Math_fround($1_1); return Math_fround(Math_fround(Math_max($0, $1_1))); } function $23($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +Math_min($0, $1_1); } function $24($0, $1_1) { $0 = +$0; $1_1 = +$1_1; return +Math_max($0, $1_1); } function $25($0) { $0 = Math_fround($0); return +$0; } function $26($0) { $0 = +$0; return Math_fround(Math_fround($0)); } function $27($0) { $0 = Math_fround($0); return Math_fround(Math_fround(Math_floor($0))); } function $28($0) { $0 = Math_fround($0); return Math_fround(Math_fround(Math_ceil($0))); } function $29($0) { $0 = +$0; return +Math_floor($0); } function $30($0) { $0 = +$0; return +Math_ceil($0); } function $31($0) { $0 = Math_fround($0); return Math_fround(Math_fround(Math_sqrt($0))); } function $32($0) { $0 = +$0; return +Math_sqrt($0); } function $35($0) { $0 = $0 | 0; return Math_fround(Math_fround($0 | 0)); } function $36($0) { $0 = $0 | 0; return +($0 | 0); } function $37($0) { $0 = $0 | 0; return Math_fround(Math_fround($0 >>> 0)); } function $38($0) { $0 = $0 | 0; return +($0 >>> 0); } function $39($0) { $0 = Math_fround($0); return ~~$0 | 0; } function $40($0) { $0 = +$0; return ~~$0 | 0; } function $41($0) { $0 = Math_fround($0); return ~~$0 >>> 0 | 0; } function $42($0) { $0 = +$0; return ~~$0 >>> 0 | 0; } function $47($0) { $0 = Math_fround($0); return !(~~$0 >>> 0 | (Math_fround(Math_abs($0)) >= Math_fround(1.0) ? ~~($0 > Math_fround(0.0) ? Math_fround(Math_min(Math_fround(Math_floor(Math_fround($0 * Math_fround(2.3283064365386963e-10)))), Math_fround(4294967296.0))) : Math_fround(Math_ceil(Math_fround(Math_fround($0 - Math_fround(~~$0 >>> 0 >>> 0)) * Math_fround(2.3283064365386963e-10))))) >>> 0 : 0)) | 0; } function $48($0) { $0 = +$0; return !(~~$0 >>> 0 | (Math_abs($0) >= 1.0 ? ~~($0 > 0.0 ? Math_min(Math_floor($0 * 2.3283064365386963e-10), 4294967295.0) : Math_ceil(($0 - +(~~$0 >>> 0 >>> 0)) * 2.3283064365386963e-10)) >>> 0 : 0)) | 0; } function legalstub$43($0, $1_1) { return Math_fround(+($0 >>> 0) + +($1_1 | 0) * 4294967296.0); } function legalstub$44($0, $1_1) { return +($0 >>> 0) + +($1_1 | 0) * 4294967296.0; } function legalstub$45($0, $1_1) { return Math_fround(+($0 >>> 0) + +($1_1 >>> 0) * 4294967296.0); } function legalstub$46($0, $1_1) { return +($0 >>> 0) + +($1_1 >>> 0) * 4294967296.0; } return { "f32_add": $1, "f32_sub": $2, "f32_mul": $3, "f32_div": $4, "f64_add": $5, "f64_sub": $6, "f64_mul": $7, "f64_div": $8, "f32_eq": $9, "f32_ne": $10, "f32_ge": $11, "f32_gt": $12, "f32_le": $13, "f32_lt": $14, "f64_eq": $15, "f64_ne": $16, "f64_ge": $17, "f64_gt": $18, "f64_le": $19, "f64_lt": $20, "f32_min": $21, "f32_max": $22, "f64_min": $23, "f64_max": $24, "f64_promote": $25, "f32_demote": $26, "f32_floor": $27, "f32_ceil": $28, "f64_floor": $29, "f64_ceil": $30, "f32_sqrt": $31, "f64_sqrt": $32, "i32_to_f32": $35, "i32_to_f64": $36, "u32_to_f32": $37, "u32_to_f64": $38, "f32_to_i32": $39, "f64_to_i32": $40, "f32_to_u32": $41, "f64_to_u32": $42, "i64_to_f32": legalstub$43, "i64_to_f64": legalstub$44, "u64_to_f32": legalstub$45, "u64_to_f64": legalstub$46, "f32_to_i64": $47, "f64_to_i64": $48, "f32_to_u64": $47, "f64_to_u64": $48 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var f32_add = retasmFunc.f32_add; export var f32_sub = retasmFunc.f32_sub; export var f32_mul = retasmFunc.f32_mul; export var f32_div = retasmFunc.f32_div; export var f64_add = retasmFunc.f64_add; export var f64_sub = retasmFunc.f64_sub; export var f64_mul = retasmFunc.f64_mul; export var f64_div = retasmFunc.f64_div; export var f32_eq = retasmFunc.f32_eq; export var f32_ne = retasmFunc.f32_ne; export var f32_ge = retasmFunc.f32_ge; export var f32_gt = retasmFunc.f32_gt; export var f32_le = retasmFunc.f32_le; export var f32_lt = retasmFunc.f32_lt; export var f64_eq = retasmFunc.f64_eq; export var f64_ne = retasmFunc.f64_ne; export var f64_ge = retasmFunc.f64_ge; export var f64_gt = retasmFunc.f64_gt; export var f64_le = retasmFunc.f64_le; export var f64_lt = retasmFunc.f64_lt; export var f32_min = retasmFunc.f32_min; export var f32_max = retasmFunc.f32_max; export var f64_min = retasmFunc.f64_min; export var f64_max = retasmFunc.f64_max; export var f64_promote = retasmFunc.f64_promote; export var f32_demote = retasmFunc.f32_demote; export var f32_floor = retasmFunc.f32_floor; export var f32_ceil = retasmFunc.f32_ceil; export var f64_floor = retasmFunc.f64_floor; export var f64_ceil = retasmFunc.f64_ceil; export var f32_sqrt = retasmFunc.f32_sqrt; export var f64_sqrt = retasmFunc.f64_sqrt; export var i32_to_f32 = retasmFunc.i32_to_f32; export var i32_to_f64 = retasmFunc.i32_to_f64; export var u32_to_f32 = retasmFunc.u32_to_f32; export var u32_to_f64 = retasmFunc.u32_to_f64; export var f32_to_i32 = retasmFunc.f32_to_i32; export var f64_to_i32 = retasmFunc.f64_to_i32; export var f32_to_u32 = retasmFunc.f32_to_u32; export var f64_to_u32 = retasmFunc.f64_to_u32; export var i64_to_f32 = retasmFunc.i64_to_f32; export var i64_to_f64 = retasmFunc.i64_to_f64; export var u64_to_f32 = retasmFunc.u64_to_f32; export var u64_to_f64 = retasmFunc.u64_to_f64; export var f32_to_i64 = retasmFunc.f32_to_i64; export var f64_to_i64 = retasmFunc.f64_to_i64; export var f32_to_u64 = retasmFunc.f32_to_u64; export var f64_to_u64 = retasmFunc.f64_to_u64; binaryen-version_108/test/wasm2js/float-ops.wast000066400000000000000000000125661423707623100221300ustar00rootroot00000000000000(module (func $dummy) (func (export "f32.add") (param $0 f32) (param $1 f32) (result f32) (f32.add (local.get $0) (local.get $1))) (func (export "f32.sub") (param $0 f32) (param $1 f32) (result f32) (f32.sub (local.get $0) (local.get $1))) (func (export "f32.mul") (param $0 f32) (param $1 f32) (result f32) (f32.mul (local.get $0) (local.get $1))) (func (export "f32.div") (param $0 f32) (param $1 f32) (result f32) (f32.div (local.get $0) (local.get $1))) (func (export "f64.add") (param $0 f64) (param $1 f64) (result f64) (f64.add (local.get $0) (local.get $1))) (func (export "f64.sub") (param $0 f64) (param $1 f64) (result f64) (f64.sub (local.get $0) (local.get $1))) (func (export "f64.mul") (param $0 f64) (param $1 f64) (result f64) (f64.mul (local.get $0) (local.get $1))) (func (export "f64.div") (param $0 f64) (param $1 f64) (result f64) (f64.div (local.get $0) (local.get $1))) ;; comparisons (func (export "f32.eq") (param $0 f32) (param $1 f32) (result i32) (f32.eq (local.get $0) (local.get $1))) (func (export "f32.ne") (param $0 f32) (param $1 f32) (result i32) (f32.ne (local.get $0) (local.get $1))) (func (export "f32.ge") (param $0 f32) (param $1 f32) (result i32) (f32.ge (local.get $0) (local.get $1))) (func (export "f32.gt") (param $0 f32) (param $1 f32) (result i32) (f32.gt (local.get $0) (local.get $1))) (func (export "f32.le") (param $0 f32) (param $1 f32) (result i32) (f32.le (local.get $0) (local.get $1))) (func (export "f32.lt") (param $0 f32) (param $1 f32) (result i32) (f32.lt (local.get $0) (local.get $1))) (func (export "f64.eq") (param $0 f64) (param $1 f64) (result i32) (f64.eq (local.get $0) (local.get $1))) (func (export "f64.ne") (param $0 f64) (param $1 f64) (result i32) (f64.ne (local.get $0) (local.get $1))) (func (export "f64.ge") (param $0 f64) (param $1 f64) (result i32) (f64.ge (local.get $0) (local.get $1))) (func (export "f64.gt") (param $0 f64) (param $1 f64) (result i32) (f64.gt (local.get $0) (local.get $1))) (func (export "f64.le") (param $0 f64) (param $1 f64) (result i32) (f64.le (local.get $0) (local.get $1))) (func (export "f64.lt") (param $0 f64) (param $1 f64) (result i32) (f64.lt (local.get $0) (local.get $1))) ;; min/max (func (export "f32.min") (param $0 f32) (param $1 f32) (result f32) (f32.min (local.get $0) (local.get $1))) (func (export "f32.max") (param $0 f32) (param $1 f32) (result f32) (f32.max (local.get $0) (local.get $1))) (func (export "f64.min") (param $0 f64) (param $1 f64) (result f64) (f64.min (local.get $0) (local.get $1))) (func (export "f64.max") (param $0 f64) (param $1 f64) (result f64) (f64.max (local.get $0) (local.get $1))) ;; promotion/demotion (func (export "f64.promote") (param $0 f32) (result f64) (f64.promote_f32 (local.get $0))) (func (export "f32.demote") (param $0 f64) (result f32) (f32.demote_f64 (local.get $0))) ;; floor/ceil (func (export "f32.floor") (param $0 f32) (result f32) (f32.floor (local.get $0))) (func (export "f32.ceil") (param $0 f32) (result f32) (f32.ceil (local.get $0))) (func (export "f64.floor") (param $0 f64) (result f64) (f64.floor (local.get $0))) (func (export "f64.ceil") (param $0 f64) (result f64) (f64.ceil (local.get $0))) ;; sqrt (func (export "f32.sqrt") (param $0 f32) (result f32) (f32.sqrt (local.get $0))) (func (export "f64.sqrt") (param $0 f64) (result f64) (f64.sqrt (local.get $0))) ;; copysign (func $copysign64 (param $0 f64) (param $1 f64) (result f64) (f64.copysign (local.get $0) (local.get $1))) (func $copysign32 (param $0 f32) (param $1 f32) (result f32) (f32.copysign (local.get $0) (local.get $1))) ;; float<->int (func (export "i32_to_f32") (param $0 i32) (result f32) (f32.convert_i32_s (local.get $0))) (func (export "i32_to_f64") (param $0 i32) (result f64) (f64.convert_i32_s (local.get $0))) (func (export "u32_to_f32") (param $0 i32) (result f32) (f32.convert_i32_u (local.get $0))) (func (export "u32_to_f64") (param $0 i32) (result f64) (f64.convert_i32_u (local.get $0))) (func (export "f32_to_i32") (param $0 f32) (result i32) (i32.trunc_f32_s (local.get $0))) (func (export "f64_to_i32") (param $0 f64) (result i32) (i32.trunc_f64_s (local.get $0))) (func (export "f32_to_u32") (param $0 f32) (result i32) (i32.trunc_f32_u (local.get $0))) (func (export "f64_to_u32") (param $0 f64) (result i32) (i32.trunc_f64_u (local.get $0))) (func (export "i64_to_f32") (param $0 i64) (result f32) (f32.convert_i64_s (local.get $0))) (func (export "i64_to_f64") (param $0 i64) (result f64) (f64.convert_i64_s (local.get $0))) (func (export "u64_to_f32") (param $0 i64) (result f32) (f32.convert_i64_u (local.get $0))) (func (export "u64_to_f64") (param $0 i64) (result f64) (f64.convert_i64_u (local.get $0))) (func (export "f32_to_i64") (param $0 f32) (result i32) (i64.eq (i64.trunc_f32_s (local.get $0)) (i64.const 0))) (func (export "f64_to_i64") (param $0 f64) (result i32) (i64.eq (i64.trunc_f64_s (local.get $0)) (i64.const 0))) (func (export "f32_to_u64") (param $0 f32) (result i32) (i64.eq (i64.trunc_f32_u (local.get $0)) (i64.const 0))) (func (export "f64_to_u64") (param $0 f64) (result i32) (i64.eq (i64.trunc_f64_u (local.get $0)) (i64.const 0))) ) binaryen-version_108/test/wasm2js/float_literals-modified.2asm.js000066400000000000000000001262731423707623100253060ustar00rootroot00000000000000import { setTempRet0 } from 'env'; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0() { return (wasm2js_scratch_store_f32(Math_fround(nan)), wasm2js_scratch_load_i32(2)) | 0; } function $1() { return (wasm2js_scratch_store_f32(Math_fround(nan)), wasm2js_scratch_load_i32(2)) | 0; } function $2() { return (wasm2js_scratch_store_f32(Math_fround(-nan)), wasm2js_scratch_load_i32(2)) | 0; } function $3() { return (wasm2js_scratch_store_f32(Math_fround(nan)), wasm2js_scratch_load_i32(2)) | 0; } function $4() { return (wasm2js_scratch_store_f32(Math_fround(nan)), wasm2js_scratch_load_i32(2)) | 0; } function $5() { return (wasm2js_scratch_store_f32(Math_fround(-nan)), wasm2js_scratch_load_i32(2)) | 0; } function $6() { return (wasm2js_scratch_store_f32(Math_fround(nan)), wasm2js_scratch_load_i32(2)) | 0; } function $7() { return (wasm2js_scratch_store_f32(Math_fround(nan)), wasm2js_scratch_load_i32(2)) | 0; } function $8() { return (wasm2js_scratch_store_f32(Math_fround(-nan)), wasm2js_scratch_load_i32(2)) | 0; } function $9() { return (wasm2js_scratch_store_f32(Math_fround(infinity)), wasm2js_scratch_load_i32(2)) | 0; } function $10() { return (wasm2js_scratch_store_f32(Math_fround(infinity)), wasm2js_scratch_load_i32(2)) | 0; } function $11() { return (wasm2js_scratch_store_f32(Math_fround(-infinity)), wasm2js_scratch_load_i32(2)) | 0; } function $12() { return (wasm2js_scratch_store_f32(Math_fround(0.0)), wasm2js_scratch_load_i32(2)) | 0; } function $13() { return (wasm2js_scratch_store_f32(Math_fround(0.0)), wasm2js_scratch_load_i32(2)) | 0; } function $14() { return (wasm2js_scratch_store_f32(Math_fround(-0.0)), wasm2js_scratch_load_i32(2)) | 0; } function $15() { return (wasm2js_scratch_store_f32(Math_fround(6.2831854820251465)), wasm2js_scratch_load_i32(2)) | 0; } function $16() { return (wasm2js_scratch_store_f32(Math_fround(1.401298464324817e-45)), wasm2js_scratch_load_i32(2)) | 0; } function $17() { return (wasm2js_scratch_store_f32(Math_fround(1.1754943508222875e-38)), wasm2js_scratch_load_i32(2)) | 0; } function $18() { return (wasm2js_scratch_store_f32(Math_fround(3402823466385288598117041.0e14)), wasm2js_scratch_load_i32(2)) | 0; } function $19() { return (wasm2js_scratch_store_f32(Math_fround(1.1754942106924411e-38)), wasm2js_scratch_load_i32(2)) | 0; } function $20() { return (wasm2js_scratch_store_f32(Math_fround(1024.0)), wasm2js_scratch_load_i32(2)) | 0; } function $21() { return (wasm2js_scratch_store_f32(Math_fround(0.0)), wasm2js_scratch_load_i32(2)) | 0; } function $22() { return (wasm2js_scratch_store_f32(Math_fround(0.0)), wasm2js_scratch_load_i32(2)) | 0; } function $23() { return (wasm2js_scratch_store_f32(Math_fround(-0.0)), wasm2js_scratch_load_i32(2)) | 0; } function $24() { return (wasm2js_scratch_store_f32(Math_fround(6.2831854820251465)), wasm2js_scratch_load_i32(2)) | 0; } function $25() { return (wasm2js_scratch_store_f32(Math_fround(1.401298464324817e-45)), wasm2js_scratch_load_i32(2)) | 0; } function $26() { return (wasm2js_scratch_store_f32(Math_fround(1.1754943508222875e-38)), wasm2js_scratch_load_i32(2)) | 0; } function $27() { return (wasm2js_scratch_store_f32(Math_fround(1.1754942106924411e-38)), wasm2js_scratch_load_i32(2)) | 0; } function $28() { return (wasm2js_scratch_store_f32(Math_fround(3402823466385288598117041.0e14)), wasm2js_scratch_load_i32(2)) | 0; } function $29() { return (wasm2js_scratch_store_f32(Math_fround(1.0e10)), wasm2js_scratch_load_i32(2)) | 0; } function $30() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $31() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $32() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(-nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $33() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $34() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $35() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(-nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $36() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $37() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $38() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(-nan)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $39() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(infinity)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $40() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(infinity)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $41() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(-infinity)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $42() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(0.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $43() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(0.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $44() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(-0.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $45() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(6.283185307179586)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $46() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(5.0e-324)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $47() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(2.2250738585072014e-308)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $48() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(2.225073858507201e-308)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $49() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(1797693134862315708145274.0e284)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $50() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(1267650600228229401496703.0e6)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $51() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(0.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $52() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(0.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $53() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(-0.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $54() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(6.283185307179586)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $55() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(5.0e-324)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $56() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(2.2250738585072014e-308)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $57() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(2.225073858507201e-308)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $58() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(1797693134862315708145274.0e284)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $59() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; wasm2js_scratch_store_f64(+(1.e+100)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$30() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $30() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$31() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $31() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$32() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $32() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$33() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $33() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$34() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $34() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$35() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $35() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$36() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $36() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$37() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $37() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$38() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $38() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$39() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $39() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$40() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $40() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$41() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $41() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$42() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $42() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$43() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $43() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$44() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $44() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$45() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $45() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$46() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $46() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$47() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $47() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$48() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $48() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$49() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $49() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$50() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $50() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$51() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $51() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$52() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $52() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$53() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $53() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$54() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $54() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$55() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $55() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$56() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $56() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$57() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $57() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$58() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $58() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$59() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $59() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } return { "f32_nan": $0, "f32_positive_nan": $1, "f32_negative_nan": $2, "f32_plain_nan": $3, "f32_informally_known_as_plain_snan": $4, "f32_all_ones_nan": $5, "f32_misc_nan": $6, "f32_misc_positive_nan": $7, "f32_misc_negative_nan": $8, "f32_infinity": $9, "f32_positive_infinity": $10, "f32_negative_infinity": $11, "f32_zero": $12, "f32_positive_zero": $13, "f32_negative_zero": $14, "f32_misc": $15, "f32_min_positive": $16, "f32_min_normal": $17, "f32_max_finite": $18, "f32_max_subnormal": $19, "f32_trailing_dot": $20, "f32_dec_zero": $21, "f32_dec_positive_zero": $22, "f32_dec_negative_zero": $23, "f32_dec_misc": $24, "f32_dec_min_positive": $25, "f32_dec_min_normal": $26, "f32_dec_max_subnormal": $27, "f32_dec_max_finite": $28, "f32_dec_trailing_dot": $29, "f64_nan": legalstub$30, "f64_positive_nan": legalstub$31, "f64_negative_nan": legalstub$32, "f64_plain_nan": legalstub$33, "f64_informally_known_as_plain_snan": legalstub$34, "f64_all_ones_nan": legalstub$35, "f64_misc_nan": legalstub$36, "f64_misc_positive_nan": legalstub$37, "f64_misc_negative_nan": legalstub$38, "f64_infinity": legalstub$39, "f64_positive_infinity": legalstub$40, "f64_negative_infinity": legalstub$41, "f64_zero": legalstub$42, "f64_positive_zero": legalstub$43, "f64_negative_zero": legalstub$44, "f64_misc": legalstub$45, "f64_min_positive": legalstub$46, "f64_min_normal": legalstub$47, "f64_max_subnormal": legalstub$48, "f64_max_finite": legalstub$49, "f64_trailing_dot": legalstub$50, "f64_dec_zero": legalstub$51, "f64_dec_positive_zero": legalstub$52, "f64_dec_negative_zero": legalstub$53, "f64_dec_misc": legalstub$54, "f64_dec_min_positive": legalstub$55, "f64_dec_min_normal": legalstub$56, "f64_dec_max_subnormal": legalstub$57, "f64_dec_max_finite": legalstub$58, "f64_dec_trailing_dot": legalstub$59 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var f32_nan = retasmFunc.f32_nan; export var f32_positive_nan = retasmFunc.f32_positive_nan; export var f32_negative_nan = retasmFunc.f32_negative_nan; export var f32_plain_nan = retasmFunc.f32_plain_nan; export var f32_informally_known_as_plain_snan = retasmFunc.f32_informally_known_as_plain_snan; export var f32_all_ones_nan = retasmFunc.f32_all_ones_nan; export var f32_misc_nan = retasmFunc.f32_misc_nan; export var f32_misc_positive_nan = retasmFunc.f32_misc_positive_nan; export var f32_misc_negative_nan = retasmFunc.f32_misc_negative_nan; export var f32_infinity = retasmFunc.f32_infinity; export var f32_positive_infinity = retasmFunc.f32_positive_infinity; export var f32_negative_infinity = retasmFunc.f32_negative_infinity; export var f32_zero = retasmFunc.f32_zero; export var f32_positive_zero = retasmFunc.f32_positive_zero; export var f32_negative_zero = retasmFunc.f32_negative_zero; export var f32_misc = retasmFunc.f32_misc; export var f32_min_positive = retasmFunc.f32_min_positive; export var f32_min_normal = retasmFunc.f32_min_normal; export var f32_max_finite = retasmFunc.f32_max_finite; export var f32_max_subnormal = retasmFunc.f32_max_subnormal; export var f32_trailing_dot = retasmFunc.f32_trailing_dot; export var f32_dec_zero = retasmFunc.f32_dec_zero; export var f32_dec_positive_zero = retasmFunc.f32_dec_positive_zero; export var f32_dec_negative_zero = retasmFunc.f32_dec_negative_zero; export var f32_dec_misc = retasmFunc.f32_dec_misc; export var f32_dec_min_positive = retasmFunc.f32_dec_min_positive; export var f32_dec_min_normal = retasmFunc.f32_dec_min_normal; export var f32_dec_max_subnormal = retasmFunc.f32_dec_max_subnormal; export var f32_dec_max_finite = retasmFunc.f32_dec_max_finite; export var f32_dec_trailing_dot = retasmFunc.f32_dec_trailing_dot; export var f64_nan = retasmFunc.f64_nan; export var f64_positive_nan = retasmFunc.f64_positive_nan; export var f64_negative_nan = retasmFunc.f64_negative_nan; export var f64_plain_nan = retasmFunc.f64_plain_nan; export var f64_informally_known_as_plain_snan = retasmFunc.f64_informally_known_as_plain_snan; export var f64_all_ones_nan = retasmFunc.f64_all_ones_nan; export var f64_misc_nan = retasmFunc.f64_misc_nan; export var f64_misc_positive_nan = retasmFunc.f64_misc_positive_nan; export var f64_misc_negative_nan = retasmFunc.f64_misc_negative_nan; export var f64_infinity = retasmFunc.f64_infinity; export var f64_positive_infinity = retasmFunc.f64_positive_infinity; export var f64_negative_infinity = retasmFunc.f64_negative_infinity; export var f64_zero = retasmFunc.f64_zero; export var f64_positive_zero = retasmFunc.f64_positive_zero; export var f64_negative_zero = retasmFunc.f64_negative_zero; export var f64_misc = retasmFunc.f64_misc; export var f64_min_positive = retasmFunc.f64_min_positive; export var f64_min_normal = retasmFunc.f64_min_normal; export var f64_max_subnormal = retasmFunc.f64_max_subnormal; export var f64_max_finite = retasmFunc.f64_max_finite; export var f64_trailing_dot = retasmFunc.f64_trailing_dot; export var f64_dec_zero = retasmFunc.f64_dec_zero; export var f64_dec_positive_zero = retasmFunc.f64_dec_positive_zero; export var f64_dec_negative_zero = retasmFunc.f64_dec_negative_zero; export var f64_dec_misc = retasmFunc.f64_dec_misc; export var f64_dec_min_positive = retasmFunc.f64_dec_min_positive; export var f64_dec_min_normal = retasmFunc.f64_dec_min_normal; export var f64_dec_max_subnormal = retasmFunc.f64_dec_max_subnormal; export var f64_dec_max_finite = retasmFunc.f64_dec_max_finite; export var f64_dec_trailing_dot = retasmFunc.f64_dec_trailing_dot; binaryen-version_108/test/wasm2js/float_literals-modified.2asm.js.opt000066400000000000000000000302161423707623100260760ustar00rootroot00000000000000import { setTempRet0 } from 'env'; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0() { return 2143289344; } function $2() { return -4194304; } function $4() { return 2141192192; } function $5() { return -1; } function $6() { return 2139169605; } function $7() { return 2142257232; } function $8() { return -5587746; } function $9() { return 2139095040; } function $11() { return -8388608; } function $12() { return 0; } function $14() { return -2147483648; } function $15() { return 1086918619; } function $16() { return 1; } function $17() { return 8388608; } function $18() { return 2139095039; } function $19() { return 8388607; } function $20() { return 1149239296; } function $29() { return 1343554297; } function legalstub$30() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(nan); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$32() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(-nan); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$34() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(nan); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$35() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(-nan); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$36() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(nan); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$37() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(nan); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$38() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(-nan); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$39() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(infinity); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$41() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(-infinity); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$42() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(0.0); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$44() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(-0.0); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$45() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(6.283185307179586); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$46() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(5.0e-324); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$47() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(2.2250738585072014e-308); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$48() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(2.225073858507201e-308); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$49() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(1797693134862315708145274.0e284); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$50() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(1267650600228229401496703.0e6); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } function legalstub$59() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(1.e+100); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; i64toi32_i32$HIGH_BITS = $0_1; $0_1 = $1; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } return { "f32_nan": $0, "f32_positive_nan": $0, "f32_negative_nan": $2, "f32_plain_nan": $0, "f32_informally_known_as_plain_snan": $4, "f32_all_ones_nan": $5, "f32_misc_nan": $6, "f32_misc_positive_nan": $7, "f32_misc_negative_nan": $8, "f32_infinity": $9, "f32_positive_infinity": $9, "f32_negative_infinity": $11, "f32_zero": $12, "f32_positive_zero": $12, "f32_negative_zero": $14, "f32_misc": $15, "f32_min_positive": $16, "f32_min_normal": $17, "f32_max_finite": $18, "f32_max_subnormal": $19, "f32_trailing_dot": $20, "f32_dec_zero": $12, "f32_dec_positive_zero": $12, "f32_dec_negative_zero": $14, "f32_dec_misc": $15, "f32_dec_min_positive": $16, "f32_dec_min_normal": $17, "f32_dec_max_subnormal": $19, "f32_dec_max_finite": $18, "f32_dec_trailing_dot": $29, "f64_nan": legalstub$30, "f64_positive_nan": legalstub$30, "f64_negative_nan": legalstub$32, "f64_plain_nan": legalstub$30, "f64_informally_known_as_plain_snan": legalstub$34, "f64_all_ones_nan": legalstub$35, "f64_misc_nan": legalstub$36, "f64_misc_positive_nan": legalstub$37, "f64_misc_negative_nan": legalstub$38, "f64_infinity": legalstub$39, "f64_positive_infinity": legalstub$39, "f64_negative_infinity": legalstub$41, "f64_zero": legalstub$42, "f64_positive_zero": legalstub$42, "f64_negative_zero": legalstub$44, "f64_misc": legalstub$45, "f64_min_positive": legalstub$46, "f64_min_normal": legalstub$47, "f64_max_subnormal": legalstub$48, "f64_max_finite": legalstub$49, "f64_trailing_dot": legalstub$50, "f64_dec_zero": legalstub$42, "f64_dec_positive_zero": legalstub$42, "f64_dec_negative_zero": legalstub$44, "f64_dec_misc": legalstub$45, "f64_dec_min_positive": legalstub$46, "f64_dec_min_normal": legalstub$47, "f64_dec_max_subnormal": legalstub$48, "f64_dec_max_finite": legalstub$49, "f64_dec_trailing_dot": legalstub$59 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var f32_nan = retasmFunc.f32_nan; export var f32_positive_nan = retasmFunc.f32_positive_nan; export var f32_negative_nan = retasmFunc.f32_negative_nan; export var f32_plain_nan = retasmFunc.f32_plain_nan; export var f32_informally_known_as_plain_snan = retasmFunc.f32_informally_known_as_plain_snan; export var f32_all_ones_nan = retasmFunc.f32_all_ones_nan; export var f32_misc_nan = retasmFunc.f32_misc_nan; export var f32_misc_positive_nan = retasmFunc.f32_misc_positive_nan; export var f32_misc_negative_nan = retasmFunc.f32_misc_negative_nan; export var f32_infinity = retasmFunc.f32_infinity; export var f32_positive_infinity = retasmFunc.f32_positive_infinity; export var f32_negative_infinity = retasmFunc.f32_negative_infinity; export var f32_zero = retasmFunc.f32_zero; export var f32_positive_zero = retasmFunc.f32_positive_zero; export var f32_negative_zero = retasmFunc.f32_negative_zero; export var f32_misc = retasmFunc.f32_misc; export var f32_min_positive = retasmFunc.f32_min_positive; export var f32_min_normal = retasmFunc.f32_min_normal; export var f32_max_finite = retasmFunc.f32_max_finite; export var f32_max_subnormal = retasmFunc.f32_max_subnormal; export var f32_trailing_dot = retasmFunc.f32_trailing_dot; export var f32_dec_zero = retasmFunc.f32_dec_zero; export var f32_dec_positive_zero = retasmFunc.f32_dec_positive_zero; export var f32_dec_negative_zero = retasmFunc.f32_dec_negative_zero; export var f32_dec_misc = retasmFunc.f32_dec_misc; export var f32_dec_min_positive = retasmFunc.f32_dec_min_positive; export var f32_dec_min_normal = retasmFunc.f32_dec_min_normal; export var f32_dec_max_subnormal = retasmFunc.f32_dec_max_subnormal; export var f32_dec_max_finite = retasmFunc.f32_dec_max_finite; export var f32_dec_trailing_dot = retasmFunc.f32_dec_trailing_dot; export var f64_nan = retasmFunc.f64_nan; export var f64_positive_nan = retasmFunc.f64_positive_nan; export var f64_negative_nan = retasmFunc.f64_negative_nan; export var f64_plain_nan = retasmFunc.f64_plain_nan; export var f64_informally_known_as_plain_snan = retasmFunc.f64_informally_known_as_plain_snan; export var f64_all_ones_nan = retasmFunc.f64_all_ones_nan; export var f64_misc_nan = retasmFunc.f64_misc_nan; export var f64_misc_positive_nan = retasmFunc.f64_misc_positive_nan; export var f64_misc_negative_nan = retasmFunc.f64_misc_negative_nan; export var f64_infinity = retasmFunc.f64_infinity; export var f64_positive_infinity = retasmFunc.f64_positive_infinity; export var f64_negative_infinity = retasmFunc.f64_negative_infinity; export var f64_zero = retasmFunc.f64_zero; export var f64_positive_zero = retasmFunc.f64_positive_zero; export var f64_negative_zero = retasmFunc.f64_negative_zero; export var f64_misc = retasmFunc.f64_misc; export var f64_min_positive = retasmFunc.f64_min_positive; export var f64_min_normal = retasmFunc.f64_min_normal; export var f64_max_subnormal = retasmFunc.f64_max_subnormal; export var f64_max_finite = retasmFunc.f64_max_finite; export var f64_trailing_dot = retasmFunc.f64_trailing_dot; export var f64_dec_zero = retasmFunc.f64_dec_zero; export var f64_dec_positive_zero = retasmFunc.f64_dec_positive_zero; export var f64_dec_negative_zero = retasmFunc.f64_dec_negative_zero; export var f64_dec_misc = retasmFunc.f64_dec_misc; export var f64_dec_min_positive = retasmFunc.f64_dec_min_positive; export var f64_dec_min_normal = retasmFunc.f64_dec_min_normal; export var f64_dec_max_subnormal = retasmFunc.f64_dec_max_subnormal; export var f64_dec_max_finite = retasmFunc.f64_dec_max_finite; export var f64_dec_trailing_dot = retasmFunc.f64_dec_trailing_dot; binaryen-version_108/test/wasm2js/float_literals-modified.wast000066400000000000000000000237311423707623100250020ustar00rootroot00000000000000;; Test floating-point literal parsing. (module ;; f32 special values (func (export "f32.nan") (result i32) (i32.reinterpret_f32 (f32.const nan))) (func (export "f32.positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan))) (func (export "f32.negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan))) (func (export "f32.plain_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x400000))) (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x200000))) (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x7fffff))) (func (export "f32.misc_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x012345))) (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan:0x304050))) (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x2abcde))) (func (export "f32.infinity") (result i32) (i32.reinterpret_f32 (f32.const infinity))) (func (export "f32.positive_infinity") (result i32) (i32.reinterpret_f32 (f32.const +infinity))) (func (export "f32.negative_infinity") (result i32) (i32.reinterpret_f32 (f32.const -infinity))) ;; f32 numbers (func (export "f32.zero") (result i32) (i32.reinterpret_f32 (f32.const 0x0.0p0))) (func (export "f32.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0x0.0p0))) (func (export "f32.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0x0.0p0))) (func (export "f32.misc") (result i32) (i32.reinterpret_f32 (f32.const 0x1.921fb6p+2))) (func (export "f32.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-149))) (func (export "f32.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-126))) (func (export "f32.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffep+127))) (func (export "f32.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffcp-127))) (func (export "f32.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 0x1.p10))) ;; f32 in decimal format (func (export "f32_dec.zero") (result i32) (i32.reinterpret_f32 (f32.const 0.0e0))) (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0.0e0))) (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0.0e0))) (func (export "f32_dec.misc") (result i32) (i32.reinterpret_f32 (f32.const 6.28318548202514648))) (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 1.4013e-45))) (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754944e-38))) (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754942e-38))) (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 3.4028234e+38))) (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 1.e10))) ;; f64 special values (func (export "f64.nan") (result i64) (i64.reinterpret_f64 (f64.const nan))) (func (export "f64.positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan))) (func (export "f64.negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan))) (func (export "f64.plain_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x8000000000000))) (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x4000000000000))) (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0xfffffffffffff))) (func (export "f64.misc_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x0123456789abc))) (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan:0x3040506070809))) (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0x2abcdef012345))) (func (export "f64.infinity") (result i64) (i64.reinterpret_f64 (f64.const infinity))) (func (export "f64.positive_infinity") (result i64) (i64.reinterpret_f64 (f64.const +infinity))) (func (export "f64.negative_infinity") (result i64) (i64.reinterpret_f64 (f64.const -infinity))) ;; f64 numbers (func (export "f64.zero") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0p0))) (func (export "f64.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0x0.0p0))) (func (export "f64.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0x0.0p0))) (func (export "f64.misc") (result i64) (i64.reinterpret_f64 (f64.const 0x1.921fb54442d18p+2))) (func (export "f64.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0000000000001p-1022))) (func (export "f64.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 0x1p-1022))) (func (export "f64.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 0x0.fffffffffffffp-1022))) (func (export "f64.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 0x1.fffffffffffffp+1023))) (func (export "f64.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 0x1.p100))) ;; f64 numbers in decimal format (func (export "f64_dec.zero") (result i64) (i64.reinterpret_f64 (f64.const 0.0e0))) (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0.0e0))) (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0.0e0))) (func (export "f64_dec.misc") (result i64) (i64.reinterpret_f64 (f64.const 6.28318530717958623))) (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 4.94066e-324))) (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072012e-308))) (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072011e-308))) (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 1.7976931348623157e+308))) (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 1.e100))) ) ;;(assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) ;;(assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) ;;(assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) ;;(assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) ;;(assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) ;;(assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) ;;(assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) ;;(assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) ;;(assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) (assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) (assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) (assert_return (invoke "f32.zero") (i32.const 0)) (assert_return (invoke "f32.positive_zero") (i32.const 0)) (assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32.min_positive") (i32.const 1)) (assert_return (invoke "f32.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) (assert_return (invoke "f32_dec.zero") (i32.const 0)) (assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) (assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) (assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) (assert_return (invoke "f32_dec.min_positive") (i32.const 1)) (assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) (assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) (assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) (assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) ;;(assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) ;;(assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) ;;(assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) ;;(assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) ;;(assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) ;;(assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) ;;(assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) ;;(assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) ;;(assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) (assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) (assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) (assert_return (invoke "f64.zero") (i64.const 0)) (assert_return (invoke "f64.positive_zero") (i64.const 0)) (assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64.min_positive") (i64.const 1)) (assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) (assert_return (invoke "f64_dec.zero") (i64.const 0)) (assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) (assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) (assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) (assert_return (invoke "f64_dec.min_positive") (i64.const 1)) (assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) (assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) (assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) (assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) binaryen-version_108/test/wasm2js/float_misc.2asm.js000066400000000000000000000166171423707623100226440ustar00rootroot00000000000000 var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_load_f32() { return f32ScratchView[2]; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(x + y)); } function $1(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(x - y)); } function $2(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(x * y)); } function $3(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(x / y)); } function $4(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_sqrt(x))); } function $5(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_abs(x))); } function $6(x) { x = Math_fround(x); return Math_fround(Math_fround(-x)); } function $7(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround((wasm2js_scratch_store_i32(2, (wasm2js_scratch_store_f32(x), wasm2js_scratch_load_i32(2)) & 2147483647 | 0 | ((wasm2js_scratch_store_f32(y), wasm2js_scratch_load_i32(2)) & -2147483648 | 0) | 0), wasm2js_scratch_load_f32())); } function $8(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_ceil(x))); } function $9(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_floor(x))); } function $10(x) { x = Math_fround(x); return Math_fround(Math_fround(Math_trunc(x))); } function $11(x) { x = Math_fround(x); return Math_fround(Math_fround(__wasm_nearest_f32(Math_fround(x)))); } function $12(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(Math_min(x, y))); } function $13(x, y) { x = Math_fround(x); y = Math_fround(y); return Math_fround(Math_fround(Math_max(x, y))); } function $14(x, y) { x = +x; y = +y; return +(x + y); } function $15(x, y) { x = +x; y = +y; return +(x - y); } function $16(x, y) { x = +x; y = +y; return +(x * y); } function $17(x, y) { x = +x; y = +y; return +(x / y); } function $18(x) { x = +x; return +Math_sqrt(x); } function $19(x) { x = +x; return +Math_abs(x); } function $20(x) { x = +x; return +-x; } function $21(x, y) { x = +x; y = +y; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $4_1 = 0, $4$hi = 0, $7_1 = 0, $7$hi = 0; wasm2js_scratch_store_f64(+x); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$2 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$1 = 2147483647; i64toi32_i32$3 = -1; i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; $4_1 = i64toi32_i32$2 & i64toi32_i32$3 | 0; $4$hi = i64toi32_i32$1; wasm2js_scratch_store_f64(+y); i64toi32_i32$1 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$0 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$2 = -2147483648; i64toi32_i32$3 = 0; i64toi32_i32$2 = i64toi32_i32$1 & i64toi32_i32$2 | 0; $7_1 = i64toi32_i32$0 & i64toi32_i32$3 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = $4$hi; i64toi32_i32$1 = $4_1; i64toi32_i32$0 = $7$hi; i64toi32_i32$3 = $7_1; i64toi32_i32$0 = i64toi32_i32$2 | i64toi32_i32$0 | 0; wasm2js_scratch_store_i32(0 | 0, i64toi32_i32$1 | i64toi32_i32$3 | 0 | 0); wasm2js_scratch_store_i32(1 | 0, i64toi32_i32$0 | 0); return +(+wasm2js_scratch_load_f64()); } function $22(x) { x = +x; return +Math_ceil(x); } function $23(x) { x = +x; return +Math_floor(x); } function $24(x) { x = +x; return +Math_trunc(x); } function $25(x) { x = +x; return +(+__wasm_nearest_f64(+x)); } function $26(x, y) { x = +x; y = +y; return +Math_min(x, y); } function $27(x, y) { x = +x; y = +y; return +Math_max(x, y); } function __wasm_nearest_f32(var$0) { var$0 = Math_fround(var$0); var var$1 = Math_fround(0), var$2 = Math_fround(0); var$1 = Math_fround(Math_floor(var$0)); var$2 = Math_fround(var$0 - var$1); if (!(var$2 < Math_fround(.5))) { block : { var$0 = Math_fround(Math_ceil(var$0)); if (var$2 > Math_fround(.5)) { return Math_fround(var$0) } var$2 = Math_fround(var$1 * Math_fround(.5)); var$1 = Math_fround(var$2 - Math_fround(Math_floor(var$2))) == Math_fround(0.0) ? var$1 : var$0; } } return Math_fround(var$1); } function __wasm_nearest_f64(var$0) { var$0 = +var$0; var var$1 = 0.0, var$2 = 0.0; var$1 = Math_floor(var$0); var$2 = var$0 - var$1; if (!(var$2 < .5)) { block : { var$0 = Math_ceil(var$0); if (var$2 > .5) { return +var$0 } var$2 = var$1 * .5; var$1 = var$2 - Math_floor(var$2) == 0.0 ? var$1 : var$0; } } return +var$1; } return { "f32_add": $0, "f32_sub": $1, "f32_mul": $2, "f32_div": $3, "f32_sqrt": $4, "f32_abs": $5, "f32_neg": $6, "f32_copysign": $7, "f32_ceil": $8, "f32_floor": $9, "f32_trunc": $10, "f32_nearest": $11, "f32_min": $12, "f32_max": $13, "f64_add": $14, "f64_sub": $15, "f64_mul": $16, "f64_div": $17, "f64_sqrt": $18, "f64_abs": $19, "f64_neg": $20, "f64_copysign": $21, "f64_ceil": $22, "f64_floor": $23, "f64_trunc": $24, "f64_nearest": $25, "f64_min": $26, "f64_max": $27 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var f32_add = retasmFunc.f32_add; export var f32_sub = retasmFunc.f32_sub; export var f32_mul = retasmFunc.f32_mul; export var f32_div = retasmFunc.f32_div; export var f32_sqrt = retasmFunc.f32_sqrt; export var f32_abs = retasmFunc.f32_abs; export var f32_neg = retasmFunc.f32_neg; export var f32_copysign = retasmFunc.f32_copysign; export var f32_ceil = retasmFunc.f32_ceil; export var f32_floor = retasmFunc.f32_floor; export var f32_trunc = retasmFunc.f32_trunc; export var f32_nearest = retasmFunc.f32_nearest; export var f32_min = retasmFunc.f32_min; export var f32_max = retasmFunc.f32_max; export var f64_add = retasmFunc.f64_add; export var f64_sub = retasmFunc.f64_sub; export var f64_mul = retasmFunc.f64_mul; export var f64_div = retasmFunc.f64_div; export var f64_sqrt = retasmFunc.f64_sqrt; export var f64_abs = retasmFunc.f64_abs; export var f64_neg = retasmFunc.f64_neg; export var f64_copysign = retasmFunc.f64_copysign; export var f64_ceil = retasmFunc.f64_ceil; export var f64_floor = retasmFunc.f64_floor; export var f64_trunc = retasmFunc.f64_trunc; export var f64_nearest = retasmFunc.f64_nearest; export var f64_min = retasmFunc.f64_min; export var f64_max = retasmFunc.f64_max; binaryen-version_108/test/wasm2js/forward.2asm.js000066400000000000000000000015671423707623100221660ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function even(n) { n = n | 0; var $10 = 0; if ((n | 0) == (0 | 0)) { $10 = 1 } else { $10 = odd(n - 1 | 0 | 0) | 0 } return $10 | 0; } function odd(n) { n = n | 0; var $10 = 0; if ((n | 0) == (0 | 0)) { $10 = 0 } else { $10 = even(n - 1 | 0 | 0) | 0 } return $10 | 0; } return { "even": even, "odd": odd }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var even = retasmFunc.even; export var odd = retasmFunc.odd; binaryen-version_108/test/wasm2js/func-ptr-offset.2asm.js000066400000000000000000000013711423707623100235350ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function t1() { return 1 | 0; } function t2() { return 2 | 0; } function t3() { return 3 | 0; } function $3($0) { $0 = $0 | 0; return FUNCTION_TABLE[$0 | 0]() | 0 | 0; } var FUNCTION_TABLE = [null, t1, t2, t3]; return { "call": $3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var call = retasmFunc.call; binaryen-version_108/test/wasm2js/func-ptr-offset.2asm.js.opt000066400000000000000000000013511423707623100243340ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function t1() { return 1; } function t2() { return 2; } function t3() { return 3; } function $3($0) { $0 = $0 | 0; return FUNCTION_TABLE[$0 | 0]() | 0; } var FUNCTION_TABLE = [null, t1, t2, t3]; return { "call": $3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var call = retasmFunc.call; binaryen-version_108/test/wasm2js/func-ptr-offset.wast000066400000000000000000000007511423707623100232370ustar00rootroot00000000000000(module (type $T (func (result i32))) (table 4 funcref) (elem (i32.const 1) $t1 $t2 $t3) (func $t1 (type $T) (i32.const 1)) (func $t2 (type $T) (i32.const 2)) (func $t3 (type $T) (i32.const 3)) (func (export "call") (param i32) (result i32) (call_indirect (type $T) (local.get $0)) ) ) (assert_return (invoke "call" (i32.const 1)) (i32.const 1)) (assert_return (invoke "call" (i32.const 2)) (i32.const 2)) (assert_return (invoke "call" (i32.const 3)) (i32.const 3)) binaryen-version_108/test/wasm2js/func_ptrs.2asm.js000066400000000000000000000051431423707623100225170ustar00rootroot00000000000000import { print_i32 } from 'spectest'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var print = env.print_i32; function $3() { return 13 | 0; } function $4($0) { $0 = $0 | 0; return $0 + 1 | 0 | 0; } function $5(a) { a = a | 0; return a - 2 | 0 | 0; } function $6($0) { $0 = $0 | 0; print($0 | 0); } return { "one": $3, "two": $4, "three": $5, "four": $6 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, print_i32 }); export var one = retasmFunc.one; export var two = retasmFunc.two; export var three = retasmFunc.three; export var four = retasmFunc.four; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function t1() { return 1 | 0; } function t2() { return 2 | 0; } function t3() { return 3 | 0; } function u1() { return 4 | 0; } function u2() { return 5 | 0; } function $5(i) { i = i | 0; return FUNCTION_TABLE[i | 0]() | 0 | 0; } function $6(i) { i = i | 0; return FUNCTION_TABLE[i | 0]() | 0 | 0; } var FUNCTION_TABLE = [t1, t2, t3, u1, u2, t1, t3]; return { "callt": $5, "callu": $6 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var callt = retasmFunc.callt; export var callu = retasmFunc.callu; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function t1() { return 1 | 0; } function t2() { return 2 | 0; } function $2(i) { i = i | 0; return FUNCTION_TABLE[i | 0]() | 0 | 0; } var FUNCTION_TABLE = [t1, t2]; return { "callt": $2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var callt = retasmFunc.callt; binaryen-version_108/test/wasm2js/get-set-local.2asm.js000066400000000000000000000036411423707623100231550ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0, r, r$hi) { $0 = $0 | 0; r = r | 0; r$hi = r$hi | 0; var i64toi32_i32$0 = 0, $9$hi = 0; i64toi32_i32$0 = r$hi; i64toi32_i32$0 = 0; $9$hi = i64toi32_i32$0; i64toi32_i32$0 = r$hi; i64toi32_i32$0 = $9$hi; return ($0 | 0) == (r | 0) & (i64toi32_i32$0 | 0) == (r$hi | 0) | 0 | 0; } function legalstub$1($0, $1_1, $2) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2 = $2 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $12 = 0, $3 = 0, $5 = 0, $5$hi = 0, $8$hi = 0; $3 = $0; i64toi32_i32$0 = 0; $5 = $1_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $2; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return $1($3 | 0, i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0 | 0; } return { "check_extend_ui32": legalstub$1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var check_extend_ui32 = retasmFunc.check_extend_ui32; binaryen-version_108/test/wasm2js/get-set-local.2asm.js.opt000066400000000000000000000012111423707623100237450ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function legalstub$1($0, $1, $2) { return !$2 & ($0 | 0) == ($1 | 0); } return { "check_extend_ui32": legalstub$1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var check_extend_ui32 = retasmFunc.check_extend_ui32; binaryen-version_108/test/wasm2js/get-set-local.wast000066400000000000000000000020701423707623100226510ustar00rootroot00000000000000;; Tests for lowering local.get and local.set. (module (func $dummy) (func (export "check_extend_ui32") (param $0 i32) (param $r i64) (result i32) (local $x i32) (local $result i64) (local $extend i64) (local.set $x (local.get $0)) (local.set $result (local.get $r)) (local.set $extend (i64.extend_i32_u (local.get $x))) (i64.eq (local.get $extend) (local.get $result))) ) (assert_return (invoke "check_extend_ui32" (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_ui32" (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_ui32" (i32.const 0x7fffffff) (i32.const 0x7fffffff) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_ui32" (i32.const 0xffffffff) (i32.const 0xffffffff) (i32.const 0)) (i32.const 1)) binaryen-version_108/test/wasm2js/get_local.2asm.js000066400000000000000000000177671423707623100224640ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0() { var $0_1 = 0; return $0_1 | 0; } function $1() { var i64toi32_i32$0 = 0, $0$hi = 0, $0_1 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return $0_1 | 0; } function $2() { var $0_1 = Math_fround(0); return Math_fround($0_1); } function $3() { var $0_1 = 0.0; return +$0_1; } function $4($0_1) { $0_1 = $0_1 | 0; return $0_1 | 0; } function $5($0_1, $0$hi) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return $0_1 | 0; } function $6($0_1) { $0_1 = Math_fround($0_1); return Math_fround($0_1); } function $7($0_1) { $0_1 = +$0_1; return +$0_1; } function $8($0_1, $0$hi, $1_1, $2_1, $3_1, $4_1) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; $1_1 = Math_fround($1_1); $2_1 = +$2_1; $3_1 = $3_1 | 0; $4_1 = $4_1 | 0; var i64toi32_i32$0 = 0, $5_1 = Math_fround(0), $6$hi = 0, $6_1 = 0, $7$hi = 0, $7_1 = 0, $8_1 = 0.0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $6$hi; i64toi32_i32$0 = $7$hi; } function $9($0_1, $0$hi, $1_1, $2_1, $3_1, $4_1) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; $1_1 = Math_fround($1_1); $2_1 = +$2_1; $3_1 = $3_1 | 0; $4_1 = $4_1 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $6$hi = 0, $10 = 0.0, $21 = 0.0, $7$hi = 0, $7_1 = 0; i64toi32_i32$0 = 0; $6$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $0_1; $10 = +(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0); i64toi32_i32$0 = $6$hi; i64toi32_i32$1 = 6; $21 = +(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0); i64toi32_i32$0 = $7$hi; i64toi32_i32$1 = $7_1; return +($10 + (+$1_1 + ($2_1 + (+($3_1 >>> 0) + (+($4_1 | 0) + (+Math_fround(5.5) + ($21 + (+(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0) + 8.0)))))))); } function legalstub$1() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $1() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$5($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $5(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$8($0_1, $1_1, $2_1, $3_1, $4_1, $5_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = Math_fround($2_1); $3_1 = +$3_1; $4_1 = $4_1 | 0; $5_1 = $5_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $14 = 0, $7_1 = 0, $7$hi = 0, $10$hi = 0; i64toi32_i32$0 = 0; $7_1 = $0_1; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $14 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $14 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7_1; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $14; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $8(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0, Math_fround($2_1), +$3_1, $4_1 | 0, $5_1 | 0); } function legalstub$9($0_1, $1_1, $2_1, $3_1, $4_1, $5_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = Math_fround($2_1); $3_1 = +$3_1; $4_1 = $4_1 | 0; $5_1 = $5_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $14 = 0, $7_1 = 0, $7$hi = 0, $10$hi = 0; i64toi32_i32$0 = 0; $7_1 = $0_1; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $14 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $14 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7_1; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $14; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return +(+$9(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0, Math_fround($2_1), +$3_1, $4_1 | 0, $5_1 | 0)); } return { "type_local_i32": $0, "type_local_i64": legalstub$1, "type_local_f32": $2, "type_local_f64": $3, "type_param_i32": $4, "type_param_i64": legalstub$5, "type_param_f32": $6, "type_param_f64": $7, "type_mixed": legalstub$8, "read": legalstub$9 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var type_local_i32 = retasmFunc.type_local_i32; export var type_local_i64 = retasmFunc.type_local_i64; export var type_local_f32 = retasmFunc.type_local_f32; export var type_local_f64 = retasmFunc.type_local_f64; export var type_param_i32 = retasmFunc.type_param_i32; export var type_param_i64 = retasmFunc.type_param_i64; export var type_param_f32 = retasmFunc.type_param_f32; export var type_param_f64 = retasmFunc.type_param_f64; export var type_mixed = retasmFunc.type_mixed; export var read = retasmFunc.read; binaryen-version_108/test/wasm2js/global_i64.2asm.js000066400000000000000000000014571423707623100224420ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var f = -1412567121; var f$hi = 305419896; function call($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; } function $1() { var i64toi32_i32$0 = 0; i64toi32_i32$0 = f$hi; call(f | 0, i64toi32_i32$0 | 0); i64toi32_i32$0 = 287454020; f = 1432778632; f$hi = i64toi32_i32$0; } return { "exp": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var exp = retasmFunc.exp; binaryen-version_108/test/wasm2js/global_i64.2asm.js.opt000066400000000000000000000010411423707623100232300ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1() { } return { "exp": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var exp = retasmFunc.exp; binaryen-version_108/test/wasm2js/global_i64.wast000066400000000000000000000003411423707623100221320ustar00rootroot00000000000000(module (global $f (mut i64) (i64.const 0x12345678ABCDEFAF)) (global $g (mut i64) (global.get $f)) (func $call (param i64)) (func "exp" (call $call (global.get $f)) (global.set $f (i64.const 0x1122334455667788)) ) ) binaryen-version_108/test/wasm2js/grow-memory-tricky.2asm.js000066400000000000000000000045311423707623100243030ustar00rootroot00000000000000 function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; (wasm2js_i32$0 = 0, wasm2js_i32$1 = __wasm_memory_grow(1 | 0)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return HEAP32[0 >> 2] | 0 | 0; } function $1() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; (wasm2js_i32$0 = 0, wasm2js_i32$1 = grow() | 0), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return HEAP32[0 >> 2] | 0 | 0; } function grow() { return __wasm_memory_grow(1 | 0) | 0; } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; } return oldPages; } return { "memory": Object.create(Object.prototype, { "grow": { "value": __wasm_memory_grow }, "buffer": { "get": function () { return buffer; } } }), "f1": $0, "f2": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var memory = retasmFunc.memory; export var f1 = retasmFunc.f1; export var f2 = retasmFunc.f2; binaryen-version_108/test/wasm2js/grow-memory-tricky.2asm.js.opt000066400000000000000000000041061423707623100251020ustar00rootroot00000000000000 function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; (wasm2js_i32$0 = 0, wasm2js_i32$1 = __wasm_memory_grow(1)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return HEAP32[0]; } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; } return oldPages; } return { "memory": Object.create(Object.prototype, { "grow": { "value": __wasm_memory_grow }, "buffer": { "get": function () { return buffer; } } }), "f1": $0, "f2": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var memory = retasmFunc.memory; export var f1 = retasmFunc.f1; export var f2 = retasmFunc.f2; binaryen-version_108/test/wasm2js/grow-memory-tricky.wast000066400000000000000000000011231423707623100237760ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (type $1 (func (result i32))) (memory $0 1) (export "memory" (memory $0)) (export "f1" (func $0)) (export "f2" (func $1)) (func $0 (result i32) (block (result i32) (i32.store (i32.const 0) (memory.grow (i32.const 1))) (i32.load (i32.const 0)) ) ) (func $1 (result i32) (block (result i32) (i32.store (i32.const 0) (call $grow)) (i32.load (i32.const 0)) ) ) (func $grow (result i32) (memory.grow (i32.const 1)) ) ) (assert_return (invoke "f1") (i32.const 1)) (assert_return (invoke "f2") (i32.const 2)) binaryen-version_108/test/wasm2js/grow_memory.2asm.js000066400000000000000000000040601423707623100230570ustar00rootroot00000000000000 function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(var$0) { var$0 = var$0 | 0; return __wasm_memory_grow(var$0 | 0) | 0; } function $1() { return __wasm_memory_size() | 0; } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; } return oldPages; } return { "memory": Object.create(Object.prototype, { "grow": { "value": __wasm_memory_grow }, "buffer": { "get": function () { return buffer; } } }), "grow": $0, "current": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var memory = retasmFunc.memory; export var grow = retasmFunc.grow; export var current = retasmFunc.current; binaryen-version_108/test/wasm2js/i32.2asm.js000066400000000000000000000123411423707623100211070ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x, y) { x = x | 0; y = y | 0; return x + y | 0 | 0; } function $1(x, y) { x = x | 0; y = y | 0; return x - y | 0 | 0; } function $2(x, y) { x = x | 0; y = y | 0; return Math_imul(x, y) | 0; } function $3(x, y) { x = x | 0; y = y | 0; return (x | 0) / (y | 0) | 0 | 0; } function $4(x, y) { x = x | 0; y = y | 0; return (x >>> 0) / (y >>> 0) | 0 | 0; } function $5(x, y) { x = x | 0; y = y | 0; return (x | 0) % (y | 0) | 0 | 0; } function $6(x, y) { x = x | 0; y = y | 0; return (x >>> 0) % (y >>> 0) | 0 | 0; } function $7(x, y) { x = x | 0; y = y | 0; return x & y | 0 | 0; } function $8(x, y) { x = x | 0; y = y | 0; return x | y | 0 | 0; } function $9(x, y) { x = x | 0; y = y | 0; return x ^ y | 0 | 0; } function $10(x, y) { x = x | 0; y = y | 0; return x << y | 0 | 0; } function $11(x, y) { x = x | 0; y = y | 0; return x >> y | 0 | 0; } function $12(x, y) { x = x | 0; y = y | 0; return x >>> y | 0 | 0; } function $13(x, y) { x = x | 0; y = y | 0; return __wasm_rotl_i32(x | 0, y | 0) | 0 | 0; } function $14(x, y) { x = x | 0; y = y | 0; return __wasm_rotr_i32(x | 0, y | 0) | 0 | 0; } function $15(x) { x = x | 0; return Math_clz32(x) | 0; } function $16(x) { x = x | 0; return __wasm_ctz_i32(x | 0) | 0 | 0; } function $17(x) { x = x | 0; return __wasm_popcnt_i32(x | 0) | 0 | 0; } function $18(x) { x = x | 0; return !x | 0; } function $19(x, y) { x = x | 0; y = y | 0; return (x | 0) == (y | 0) | 0; } function $20(x, y) { x = x | 0; y = y | 0; return (x | 0) != (y | 0) | 0; } function $21(x, y) { x = x | 0; y = y | 0; return (x | 0) < (y | 0) | 0; } function $22(x, y) { x = x | 0; y = y | 0; return x >>> 0 < y >>> 0 | 0; } function $23(x, y) { x = x | 0; y = y | 0; return (x | 0) <= (y | 0) | 0; } function $24(x, y) { x = x | 0; y = y | 0; return x >>> 0 <= y >>> 0 | 0; } function $25(x, y) { x = x | 0; y = y | 0; return (x | 0) > (y | 0) | 0; } function $26(x, y) { x = x | 0; y = y | 0; return x >>> 0 > y >>> 0 | 0; } function $27(x, y) { x = x | 0; y = y | 0; return (x | 0) >= (y | 0) | 0; } function $28(x, y) { x = x | 0; y = y | 0; return x >>> 0 >= y >>> 0 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } function __wasm_popcnt_i32(var$0) { var$0 = var$0 | 0; var var$1 = 0, $5_1 = 0; label$1 : { label$2 : while (1) { $5_1 = var$1; if (!var$0) { break label$1 } var$0 = var$0 & (var$0 - 1 | 0) | 0; var$1 = var$1 + 1 | 0; continue label$2; }; } return $5_1 | 0; } function __wasm_rotl_i32(var$0, var$1) { var$0 = var$0 | 0; var$1 = var$1 | 0; var var$2 = 0; var$2 = var$1 & 31 | 0; var$1 = (0 - var$1 | 0) & 31 | 0; return ((-1 >>> var$2 | 0) & var$0 | 0) << var$2 | 0 | (((-1 << var$1 | 0) & var$0 | 0) >>> var$1 | 0) | 0 | 0; } function __wasm_rotr_i32(var$0, var$1) { var$0 = var$0 | 0; var$1 = var$1 | 0; var var$2 = 0; var$2 = var$1 & 31 | 0; var$1 = (0 - var$1 | 0) & 31 | 0; return ((-1 << var$2 | 0) & var$0 | 0) >>> var$2 | 0 | (((-1 >>> var$1 | 0) & var$0 | 0) << var$1 | 0) | 0 | 0; } return { "add": $0, "sub": $1, "mul": $2, "div_s": $3, "div_u": $4, "rem_s": $5, "rem_u": $6, "and": $7, "or": $8, "xor": $9, "shl": $10, "shr_s": $11, "shr_u": $12, "rotl": $13, "rotr": $14, "clz": $15, "ctz": $16, "popcnt": $17, "eqz": $18, "eq": $19, "ne": $20, "lt_s": $21, "lt_u": $22, "le_s": $23, "le_u": $24, "gt_s": $25, "gt_u": $26, "ge_s": $27, "ge_u": $28 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var add = retasmFunc.add; export var sub = retasmFunc.sub; export var mul = retasmFunc.mul; export var div_s = retasmFunc.div_s; export var div_u = retasmFunc.div_u; export var rem_s = retasmFunc.rem_s; export var rem_u = retasmFunc.rem_u; export var and = retasmFunc.and; export var or = retasmFunc.or; export var xor = retasmFunc.xor; export var shl = retasmFunc.shl; export var shr_s = retasmFunc.shr_s; export var shr_u = retasmFunc.shr_u; export var rotl = retasmFunc.rotl; export var rotr = retasmFunc.rotr; export var clz = retasmFunc.clz; export var ctz = retasmFunc.ctz; export var popcnt = retasmFunc.popcnt; export var eqz = retasmFunc.eqz; export var eq = retasmFunc.eq; export var ne = retasmFunc.ne; export var lt_s = retasmFunc.lt_s; export var lt_u = retasmFunc.lt_u; export var le_s = retasmFunc.le_s; export var le_u = retasmFunc.le_u; export var gt_s = retasmFunc.gt_s; export var gt_u = retasmFunc.gt_u; export var ge_s = retasmFunc.ge_s; export var ge_u = retasmFunc.ge_u; binaryen-version_108/test/wasm2js/i64-add-sub.2asm.js000066400000000000000000000177231423707623100224420ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0, $0$hi, $1_1, $1$hi, r, r$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; r = r | 0; r$hi = r$hi | 0; var i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, $5$hi = 0; i64toi32_i32$3 = $1_1; i64toi32_i32$4 = $0 + i64toi32_i32$3 | 0; i64toi32_i32$5 = $0$hi + $1$hi | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } $5$hi = i64toi32_i32$5; i64toi32_i32$5 = r$hi; i64toi32_i32$5 = $5$hi; i64toi32_i32$3 = r; return (i64toi32_i32$4 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$5 | 0) == (r$hi | 0) | 0 | 0; } function $2($0, $0$hi, $1_1, $1$hi, r, r$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; r = r | 0; r$hi = r$hi | 0; var i64toi32_i32$5 = 0, i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, $5$hi = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$3 = $1_1; i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + $1$hi | 0; i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; $5$hi = i64toi32_i32$5; i64toi32_i32$5 = r$hi; i64toi32_i32$5 = $5$hi; i64toi32_i32$0 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$2 = r$hi; i64toi32_i32$3 = r; return (i64toi32_i32$0 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$5 | 0) == (i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$1($0, $1_1, $2_1, $3, $4, $5) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3 = $3 | 0; $4 = $4 | 0; $5 = $5 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $26 = 0, $27 = 0, $28 = 0, $7 = 0, $7$hi = 0, $10$hi = 0, $11 = 0, $11$hi = 0, $13 = 0, $13$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $19 = 0, $19$hi = 0, $22$hi = 0, $23 = 0, $23$hi = 0; i64toi32_i32$0 = 0; $7 = $0; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $26 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $26 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $26; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $11 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $13 = $2_1; $13$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $27 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $27 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $16$hi = i64toi32_i32$0; i64toi32_i32$0 = $13$hi; i64toi32_i32$2 = $13; i64toi32_i32$1 = $16$hi; i64toi32_i32$3 = $27; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $17 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $17$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; $19 = $4; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = $5; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $28 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $28 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } $22$hi = i64toi32_i32$2; i64toi32_i32$2 = $19$hi; i64toi32_i32$1 = $19; i64toi32_i32$0 = $22$hi; i64toi32_i32$3 = $28; i64toi32_i32$0 = i64toi32_i32$2 | i64toi32_i32$0 | 0; $23 = i64toi32_i32$1 | i64toi32_i32$3 | 0; $23$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$1 = $17$hi; i64toi32_i32$2 = $23$hi; return $1($11 | 0, i64toi32_i32$0 | 0, $17 | 0, i64toi32_i32$1 | 0, $23 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$2($0, $1_1, $2_1, $3, $4, $5) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3 = $3 | 0; $4 = $4 | 0; $5 = $5 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $26 = 0, $27 = 0, $28 = 0, $7 = 0, $7$hi = 0, $10$hi = 0, $11 = 0, $11$hi = 0, $13 = 0, $13$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $19 = 0, $19$hi = 0, $22$hi = 0, $23 = 0, $23$hi = 0; i64toi32_i32$0 = 0; $7 = $0; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $26 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $26 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $26; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $11 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $13 = $2_1; $13$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $27 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $27 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $16$hi = i64toi32_i32$0; i64toi32_i32$0 = $13$hi; i64toi32_i32$2 = $13; i64toi32_i32$1 = $16$hi; i64toi32_i32$3 = $27; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $17 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $17$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; $19 = $4; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = $5; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $28 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $28 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } $22$hi = i64toi32_i32$2; i64toi32_i32$2 = $19$hi; i64toi32_i32$1 = $19; i64toi32_i32$0 = $22$hi; i64toi32_i32$3 = $28; i64toi32_i32$0 = i64toi32_i32$2 | i64toi32_i32$0 | 0; $23 = i64toi32_i32$1 | i64toi32_i32$3 | 0; $23$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$1 = $17$hi; i64toi32_i32$2 = $23$hi; return $2($11 | 0, i64toi32_i32$0 | 0, $17 | 0, i64toi32_i32$1 | 0, $23 | 0, i64toi32_i32$2 | 0) | 0 | 0; } return { "check_add_i64": legalstub$1, "check_sub_i64": legalstub$2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var check_add_i64 = retasmFunc.check_add_i64; export var check_sub_i64 = retasmFunc.check_sub_i64; binaryen-version_108/test/wasm2js/i64-add-sub.2asm.js.opt000066400000000000000000000017311423707623100232330ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function legalstub$1($0, $1, $2, $3, $4, $5) { $1 = $1 + $3 | 0; $0 = $0 + $2 | 0; $1 = $2 >>> 0 > $0 >>> 0 ? $1 + 1 | 0 : $1; return ($0 | 0) == ($4 | 0) & ($1 | 0) == ($5 | 0); } function legalstub$2($0, $1, $2, $3, $4, $5) { return ($4 | 0) == ($0 - $2 | 0) & ($5 | 0) == ($1 - (($0 >>> 0 < $2 >>> 0) + $3 | 0) | 0); } return { "check_add_i64": legalstub$1, "check_sub_i64": legalstub$2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var check_add_i64 = retasmFunc.check_add_i64; export var check_sub_i64 = retasmFunc.check_sub_i64; binaryen-version_108/test/wasm2js/i64-add-sub.wast000066400000000000000000000066641423707623100221450ustar00rootroot00000000000000;; Testing i64 lowering for addition and subtraction. (module (func $dummy) (func (export "check_add_i64") (param $0 i64) (param $1 i64) (param $r i64) (result i32) (i64.eq (i64.add (local.get $0) (local.get $1)) (local.get $r))) (func (export "check_sub_i64") (param $0 i64) (param $1 i64) (param $r i64) (result i32) (i64.eq (i64.sub (local.get $0) (local.get $1)) (local.get $r))) ) (assert_return (invoke "check_add_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_add_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_add_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_add_i64" (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "check_add_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "check_add_i64" (i32.const 0xffffffff) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) ;; subtraction (assert_return (invoke "check_sub_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_sub_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_sub_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "check_sub_i64" (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "check_sub_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "check_sub_i64" (i32.const 0xffffffff) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 0xfffffffe) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_sub_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 1) (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 1)) binaryen-version_108/test/wasm2js/i64-ctz.2asm.js000066400000000000000000000177341423707623100217250ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function popcnt64($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = __wasm_popcnt_i64($0 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function ctz64($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = __wasm_ctz_i64($0 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function legalstub$popcnt64($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = popcnt64(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function legalstub$ctz64($0, $1) { $0 = $0 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = ctz64(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function __wasm_ctz_i64(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $10 = 0, $5$hi = 0, $8$hi = 0; i64toi32_i32$0 = var$0$hi; if (!!(var$0 | i64toi32_i32$0 | 0)) { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = -1; i64toi32_i32$3 = -1; i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$3 | 0; i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } $5$hi = i64toi32_i32$5; i64toi32_i32$5 = var$0$hi; i64toi32_i32$5 = $5$hi; i64toi32_i32$0 = i64toi32_i32$4; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$5 ^ i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$3 = Math_clz32(i64toi32_i32$2); i64toi32_i32$5 = 0; if ((i64toi32_i32$3 | 0) == (32 | 0)) { $10 = Math_clz32(i64toi32_i32$0) + 32 | 0 } else { $10 = i64toi32_i32$3 } $8$hi = i64toi32_i32$5; i64toi32_i32$5 = 0; i64toi32_i32$0 = 63; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $10; i64toi32_i32$1 = i64toi32_i32$0 - i64toi32_i32$3 | 0; i64toi32_i32$4 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$0 = i64toi32_i32$1; i64toi32_i32$HIGH_BITS = i64toi32_i32$4; return i64toi32_i32$0 | 0; } i64toi32_i32$0 = 0; i64toi32_i32$4 = 64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function __wasm_popcnt_i64(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $5 = 0, $5$hi = 0, $4 = 0, $9$hi = 0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; $4 = !(var$0 | i64toi32_i32$0 | 0); i64toi32_i32$0 = var$1$hi; $5 = var$1; $5$hi = i64toi32_i32$0; if ($4) { break label$1 } i64toi32_i32$0 = $5$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$1 | 0; i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = i64toi32_i32$0; i64toi32_i32$0 = i64toi32_i32$2; i64toi32_i32$2 = $9$hi; i64toi32_i32$3 = i64toi32_i32$4; i64toi32_i32$2 = i64toi32_i32$5 & i64toi32_i32$2 | 0; var$0 = i64toi32_i32$0 & i64toi32_i32$4 | 0; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$5 = var$1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 1; i64toi32_i32$1 = i64toi32_i32$5 + i64toi32_i32$3 | 0; i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$0 | 0; if (i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$4 = i64toi32_i32$4 + 1 | 0 } var$1 = i64toi32_i32$1; var$1$hi = i64toi32_i32$4; continue label$2; }; } i64toi32_i32$4 = $5$hi; i64toi32_i32$5 = $5; i64toi32_i32$HIGH_BITS = i64toi32_i32$4; return i64toi32_i32$5 | 0; } return { "a": legalstub$popcnt64, "b": legalstub$ctz64 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var a = retasmFunc.a; export var b = retasmFunc.b; binaryen-version_108/test/wasm2js/i64-ctz.2asm.js.opt000066400000000000000000000031501423707623100225110ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function legalstub$popcnt64($0, $1) { var $2 = 0, $3 = 0, $4 = 0; $2 = $1; while (1) { if ($0 | $2) { $1 = $0; $0 = $0 - 1 & $0; $2 = $2 - !$1 & $2; $3 = $3 + 1 | 0; $4 = $3 ? $4 : $4 + 1 | 0; continue; } break; }; i64toi32_i32$HIGH_BITS = $4; $0 = $3; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0; } function legalstub$ctz64($0, $1) { var $2 = 0, $3 = 0, $4 = 0, $5 = 0; __inlined_func$__wasm_ctz_i64 : { if ($0 | $1) { $2 = $1 - 1 | 0; $3 = $2 + 1 | 0; $4 = $2; $2 = $0 - 1 | 0; $5 = Math_clz32($0 ^ $2) + 32 | 0; $0 = Math_clz32($1 ^ (($2 | 0) != -1 ? $3 : $4)); $0 = ($0 | 0) == 32 ? $5 : $0; $1 = 63 - $0 | 0; i64toi32_i32$HIGH_BITS = 0 - ($0 >>> 0 > 63) | 0; $0 = $1; break __inlined_func$__wasm_ctz_i64; } i64toi32_i32$HIGH_BITS = 0; $0 = 64; } setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0; } return { "a": legalstub$popcnt64, "b": legalstub$ctz64 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var a = retasmFunc.a; export var b = retasmFunc.b; binaryen-version_108/test/wasm2js/i64-ctz.wast000066400000000000000000000003321423707623100214100ustar00rootroot00000000000000(module (export "a" (func $popcnt64)) (export "b" (func $ctz64)) (func $popcnt64 (param $0 i64) (result i64) (i64.popcnt (local.get $0))) (func $ctz64 (param $0 i64) (result i64) (i64.ctz (local.get $0))) ) binaryen-version_108/test/wasm2js/i64-lowering.2asm.js000066400000000000000000000642631423707623100227520ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; return ($0 | 0) == ($1_1 | 0) & (i64toi32_i32$0 | 0) == ($1$hi | 0) | 0 | 0; } function $2($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; return ($0 | 0) != ($1_1 | 0) | (i64toi32_i32$0 | 0) != ($1$hi | 0) | 0 | 0; } function $3($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1_1; if ((i64toi32_i32$0 | 0) > ($1$hi | 0)) { $8_1 = 1 } else { if ((i64toi32_i32$0 | 0) >= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) { $9_1 = 0 } else { $9_1 = 1 } $10_1 = $9_1; } else { $10_1 = 0 } $8_1 = $10_1; } return $8_1 | 0; } function $4($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1_1; if ((i64toi32_i32$0 | 0) > ($1$hi | 0)) { $8_1 = 1 } else { if ((i64toi32_i32$0 | 0) >= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 <= i64toi32_i32$3 >>> 0) { $9_1 = 0 } else { $9_1 = 1 } $10_1 = $9_1; } else { $10_1 = 0 } $8_1 = $10_1; } return $8_1 | 0; } function $5($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1_1; if ((i64toi32_i32$0 | 0) < ($1$hi | 0)) { $8_1 = 1 } else { if ((i64toi32_i32$0 | 0) <= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 > i64toi32_i32$3 >>> 0) { $9_1 = 0 } else { $9_1 = 1 } $10_1 = $9_1; } else { $10_1 = 0 } $8_1 = $10_1; } return $8_1 | 0; } function $6($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0, $8_1 = 0, $9_1 = 0, $10_1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1_1; if ((i64toi32_i32$0 | 0) < ($1$hi | 0)) { $8_1 = 1 } else { if ((i64toi32_i32$0 | 0) <= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 >= i64toi32_i32$3 >>> 0) { $9_1 = 0 } else { $9_1 = 1 } $10_1 = $9_1; } else { $10_1 = 0 } $8_1 = $10_1; } return $8_1 | 0; } function $7($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; return i64toi32_i32$0 >>> 0 > $1$hi >>> 0 | ((i64toi32_i32$0 | 0) == ($1$hi | 0) & $0 >>> 0 >= $1_1 >>> 0 | 0) | 0 | 0; } function $8($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; return i64toi32_i32$0 >>> 0 > $1$hi >>> 0 | ((i64toi32_i32$0 | 0) == ($1$hi | 0) & $0 >>> 0 > $1_1 >>> 0 | 0) | 0 | 0; } function $9($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; return i64toi32_i32$0 >>> 0 < $1$hi >>> 0 | ((i64toi32_i32$0 | 0) == ($1$hi | 0) & $0 >>> 0 <= $1_1 >>> 0 | 0) | 0 | 0; } function $10($0, $0$hi, $1_1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; return i64toi32_i32$0 >>> 0 < $1$hi >>> 0 | ((i64toi32_i32$0 | 0) == ($1$hi | 0) & $0 >>> 0 < $1_1 >>> 0 | 0) | 0 | 0; } function legalstub$1($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $1($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$2($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $2($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$3($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $3($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$4($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $4($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$5($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $5($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$6($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $6($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$7($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $7($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$8($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $8($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$9($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $9($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$10($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $10($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } return { "eq_i64": legalstub$1, "ne_i64": legalstub$2, "ge_s_i64": legalstub$3, "gt_s_i64": legalstub$4, "le_s_i64": legalstub$5, "lt_s_i64": legalstub$6, "ge_u_i64": legalstub$7, "gt_u_i64": legalstub$8, "le_u_i64": legalstub$9, "lt_u_i64": legalstub$10 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var eq_i64 = retasmFunc.eq_i64; export var ne_i64 = retasmFunc.ne_i64; export var ge_s_i64 = retasmFunc.ge_s_i64; export var gt_s_i64 = retasmFunc.gt_s_i64; export var le_s_i64 = retasmFunc.le_s_i64; export var lt_s_i64 = retasmFunc.lt_s_i64; export var ge_u_i64 = retasmFunc.ge_u_i64; export var gt_u_i64 = retasmFunc.gt_u_i64; export var le_u_i64 = retasmFunc.le_u_i64; export var lt_u_i64 = retasmFunc.lt_u_i64; binaryen-version_108/test/wasm2js/i64-lowering.2asm.js.opt000066400000000000000000000044371423707623100235500ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function legalstub$1($0, $1, $2, $3) { return ($0 | 0) == ($2 | 0) & ($1 | 0) == ($3 | 0); } function legalstub$2($0, $1, $2, $3) { return ($0 | 0) != ($2 | 0) | ($1 | 0) != ($3 | 0); } function legalstub$3($0, $1, $2, $3) { return ($1 | 0) >= ($3 | 0) & $0 >>> 0 >= $2 >>> 0 | ($1 | 0) > ($3 | 0); } function legalstub$4($0, $1, $2, $3) { return $0 >>> 0 > $2 >>> 0 & ($1 | 0) >= ($3 | 0) | ($1 | 0) > ($3 | 0); } function legalstub$5($0, $1, $2, $3) { return ($1 | 0) <= ($3 | 0) & $0 >>> 0 <= $2 >>> 0 | ($1 | 0) < ($3 | 0); } function legalstub$6($0, $1, $2, $3) { return $0 >>> 0 < $2 >>> 0 & ($1 | 0) <= ($3 | 0) | ($1 | 0) < ($3 | 0); } function legalstub$7($0, $1, $2, $3) { return ($1 | 0) == ($3 | 0) & $0 >>> 0 >= $2 >>> 0 | $1 >>> 0 > $3 >>> 0; } function legalstub$8($0, $1, $2, $3) { return ($1 | 0) == ($3 | 0) & $0 >>> 0 > $2 >>> 0 | $1 >>> 0 > $3 >>> 0; } function legalstub$9($0, $1, $2, $3) { return ($1 | 0) == ($3 | 0) & $0 >>> 0 <= $2 >>> 0 | $1 >>> 0 < $3 >>> 0; } function legalstub$10($0, $1, $2, $3) { return ($1 | 0) == ($3 | 0) & $0 >>> 0 < $2 >>> 0 | $1 >>> 0 < $3 >>> 0; } return { "eq_i64": legalstub$1, "ne_i64": legalstub$2, "ge_s_i64": legalstub$3, "gt_s_i64": legalstub$4, "le_s_i64": legalstub$5, "lt_s_i64": legalstub$6, "ge_u_i64": legalstub$7, "gt_u_i64": legalstub$8, "le_u_i64": legalstub$9, "lt_u_i64": legalstub$10 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var eq_i64 = retasmFunc.eq_i64; export var ne_i64 = retasmFunc.ne_i64; export var ge_s_i64 = retasmFunc.ge_s_i64; export var gt_s_i64 = retasmFunc.gt_s_i64; export var le_s_i64 = retasmFunc.le_s_i64; export var lt_s_i64 = retasmFunc.lt_s_i64; export var ge_u_i64 = retasmFunc.ge_u_i64; export var gt_u_i64 = retasmFunc.gt_u_i64; export var le_u_i64 = retasmFunc.le_u_i64; export var lt_u_i64 = retasmFunc.lt_u_i64; binaryen-version_108/test/wasm2js/i64-lowering.wast000066400000000000000000000315131423707623100224430ustar00rootroot00000000000000;; Testing i64 lowering. (module (func $dummy) (func (export "eq_i64") (param $0 i64) (param $1 i64) (result i32) (i64.eq (local.get $0) (local.get $1))) (func (export "ne_i64") (param $0 i64) (param $1 i64) (result i32) (i64.ne (local.get $0) (local.get $1))) (func (export "ge_s_i64") (param $0 i64) (param $1 i64) (result i32) (i64.ge_s (local.get $0) (local.get $1))) (func (export "gt_s_i64") (param $0 i64) (param $1 i64) (result i32) (i64.gt_s (local.get $0) (local.get $1))) (func (export "le_s_i64") (param $0 i64) (param $1 i64) (result i32) (i64.le_s (local.get $0) (local.get $1))) (func (export "lt_s_i64") (param $0 i64) (param $1 i64) (result i32) (i64.lt_s (local.get $0) (local.get $1))) (func (export "ge_u_i64") (param $0 i64) (param $1 i64) (result i32) (i64.ge_u (local.get $0) (local.get $1))) (func (export "gt_u_i64") (param $0 i64) (param $1 i64) (result i32) (i64.gt_u (local.get $0) (local.get $1))) (func (export "le_u_i64") (param $0 i64) (param $1 i64) (result i32) (i64.le_u (local.get $0) (local.get $1))) (func (export "lt_u_i64") (param $0 i64) (param $1 i64) (result i32) (i64.lt_u (local.get $0) (local.get $1))) ) ;; TODO: change things so we can invoke with i64 args and automatically lower ;; the arguments, rather than doing it manually. (assert_return (invoke "eq_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "eq_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "eq_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ne_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ne_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "ne_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_u_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_u_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_u_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_u_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_u_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_u_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_u_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_u_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_u_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_u_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_u_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_u_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_u_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_u_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_u_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_u_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_u_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_u_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_s_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "lt_s_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "lt_s_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "lt_s_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "lt_s_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "lt_s_i64" (i32.const 1) (i32.const 0xffffffff) (i32.const 0) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "lt_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "lt_s_i64" (i32.const 0) (i32.const 0x80000000) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "gt_s_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "gt_s_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "gt_s_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "gt_s_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "gt_s_i64" (i32.const 1) (i32.const 0xffffffff) (i32.const 0) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "gt_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "gt_s_i64" (i32.const 0) (i32.const 0x80000000) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "le_s_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "le_s_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "le_s_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "le_s_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "le_s_i64" (i32.const 1) (i32.const 0xffffffff) (i32.const 0) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "le_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) (assert_return (invoke "le_s_i64" (i32.const 0) (i32.const 0x80000000) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s_i64" (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_s_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "ge_s_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "ge_s_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "ge_s_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "ge_s_i64" (i32.const 0) (i32.const 0xffffffff) (i32.const 1) (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "ge_s_i64" (i32.const 1) (i32.const 0xffffffff) (i32.const 0) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "ge_s_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) (assert_return (invoke "ge_s_i64" (i32.const 0) (i32.const 0x80000000) (i32.const 0) (i32.const 0)) (i32.const 0)) binaryen-version_108/test/wasm2js/i64-rotate.2asm.js000066400000000000000000000400241423707623100224070ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var i64toi32_i32$HIGH_BITS = 0; function $1($0, $0$hi, $1_1, $1$hi, $2_1, $2$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; $2_1 = $2_1 | 0; $2$hi = $2$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $5$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = __wasm_rotl_i64($0 | 0, i64toi32_i32$0 | 0, $1_1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = $2$hi; i64toi32_i32$0 = $5$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = $2$hi; return (i64toi32_i32$2 | 0) == ($2_1 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0 | 0; } function $2($0, $0$hi, $1_1, $1$hi, $2_1, $2$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; $2_1 = $2_1 | 0; $2$hi = $2$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $5$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = __wasm_rotr_i64($0 | 0, i64toi32_i32$0 | 0, $1_1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = $2$hi; i64toi32_i32$0 = $5$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = $2$hi; return (i64toi32_i32$2 | 0) == ($2_1 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0 | 0; } function legalstub$1($0, $1_1, $2_1, $3, $4, $5) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3 = $3 | 0; $4 = $4 | 0; $5 = $5 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $26 = 0, $27 = 0, $28 = 0, $7 = 0, $7$hi = 0, $10$hi = 0, $11 = 0, $11$hi = 0, $13 = 0, $13$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $19 = 0, $19$hi = 0, $22$hi = 0, $23 = 0, $23$hi = 0; i64toi32_i32$0 = 0; $7 = $0; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $26 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $26 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $26; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $11 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $13 = $2_1; $13$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $27 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $27 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $16$hi = i64toi32_i32$0; i64toi32_i32$0 = $13$hi; i64toi32_i32$2 = $13; i64toi32_i32$1 = $16$hi; i64toi32_i32$3 = $27; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $17 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $17$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; $19 = $4; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = $5; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $28 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $28 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } $22$hi = i64toi32_i32$2; i64toi32_i32$2 = $19$hi; i64toi32_i32$1 = $19; i64toi32_i32$0 = $22$hi; i64toi32_i32$3 = $28; i64toi32_i32$0 = i64toi32_i32$2 | i64toi32_i32$0 | 0; $23 = i64toi32_i32$1 | i64toi32_i32$3 | 0; $23$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$1 = $17$hi; i64toi32_i32$2 = $23$hi; return $1($11 | 0, i64toi32_i32$0 | 0, $17 | 0, i64toi32_i32$1 | 0, $23 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$2($0, $1_1, $2_1, $3, $4, $5) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3 = $3 | 0; $4 = $4 | 0; $5 = $5 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $26 = 0, $27 = 0, $28 = 0, $7 = 0, $7$hi = 0, $10$hi = 0, $11 = 0, $11$hi = 0, $13 = 0, $13$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $19 = 0, $19$hi = 0, $22$hi = 0, $23 = 0, $23$hi = 0; i64toi32_i32$0 = 0; $7 = $0; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $26 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $26 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $26; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $11 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $13 = $2_1; $13$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $27 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $27 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $16$hi = i64toi32_i32$0; i64toi32_i32$0 = $13$hi; i64toi32_i32$2 = $13; i64toi32_i32$1 = $16$hi; i64toi32_i32$3 = $27; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $17 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $17$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; $19 = $4; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = $5; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $28 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $28 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } $22$hi = i64toi32_i32$2; i64toi32_i32$2 = $19$hi; i64toi32_i32$1 = $19; i64toi32_i32$0 = $22$hi; i64toi32_i32$3 = $28; i64toi32_i32$0 = i64toi32_i32$2 | i64toi32_i32$0 | 0; $23 = i64toi32_i32$1 | i64toi32_i32$3 | 0; $23$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$1 = $17$hi; i64toi32_i32$2 = $23$hi; return $2($11 | 0, i64toi32_i32$0 | 0, $17 | 0, i64toi32_i32$1 | 0, $23 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function __wasm_rotl_i64(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, var$2$hi = 0, var$2 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $6$hi = 0, $8$hi = 0, $10 = 0, $10$hi = 0, $15$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; var$2 = i64toi32_i32$2 & i64toi32_i32$3 | 0; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = -1; i64toi32_i32$0 = -1; i64toi32_i32$2 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $19 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $19 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } $6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = $6$hi; i64toi32_i32$1 = $19; i64toi32_i32$0 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$2 & i64toi32_i32$0 | 0; $8$hi = i64toi32_i32$0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$0 = $8$hi; i64toi32_i32$2 = i64toi32_i32$1 & i64toi32_i32$3 | 0; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10 = $20; $10$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = 0; i64toi32_i32$0 = 0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$4 = i64toi32_i32$0 - i64toi32_i32$3 | 0; i64toi32_i32$5 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; i64toi32_i32$5 = i64toi32_i32$1 - i64toi32_i32$5 | 0; i64toi32_i32$1 = i64toi32_i32$4; i64toi32_i32$0 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$5 & i64toi32_i32$0 | 0; var$1 = i64toi32_i32$1 & i64toi32_i32$3 | 0; var$1$hi = i64toi32_i32$0; i64toi32_i32$0 = -1; i64toi32_i32$5 = -1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 << i64toi32_i32$2 | 0; $21 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$2 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$2 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$2 | 0) | 0; $21 = i64toi32_i32$5 << i64toi32_i32$2 | 0; } $15$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = $15$hi; i64toi32_i32$0 = $21; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$5 = i64toi32_i32$1 & i64toi32_i32$5 | 0; $17$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$5 = $17$hi; i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$3 | 0; i64toi32_i32$0 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $22 = i64toi32_i32$5 >>> i64toi32_i32$2 | 0; } else { i64toi32_i32$0 = i64toi32_i32$5 >>> i64toi32_i32$2 | 0; $22 = (((1 << i64toi32_i32$2 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$2 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$2 | 0) | 0; } $19$hi = i64toi32_i32$0; i64toi32_i32$0 = $10$hi; i64toi32_i32$5 = $10; i64toi32_i32$1 = $19$hi; i64toi32_i32$3 = $22; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; i64toi32_i32$5 = i64toi32_i32$5 | i64toi32_i32$3 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$5 | 0; } function __wasm_rotr_i64(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, var$2$hi = 0, var$2 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $6$hi = 0, $8$hi = 0, $10 = 0, $10$hi = 0, $15$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; var$2 = i64toi32_i32$2 & i64toi32_i32$3 | 0; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = -1; i64toi32_i32$0 = -1; i64toi32_i32$2 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = $6$hi; i64toi32_i32$1 = $19; i64toi32_i32$0 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$2 & i64toi32_i32$0 | 0; $8$hi = i64toi32_i32$0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$0 = $8$hi; i64toi32_i32$2 = i64toi32_i32$1 & i64toi32_i32$3 | 0; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $20 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } $10 = $20; $10$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = 0; i64toi32_i32$0 = 0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$4 = i64toi32_i32$0 - i64toi32_i32$3 | 0; i64toi32_i32$5 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; i64toi32_i32$5 = i64toi32_i32$1 - i64toi32_i32$5 | 0; i64toi32_i32$1 = i64toi32_i32$4; i64toi32_i32$0 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$5 & i64toi32_i32$0 | 0; var$1 = i64toi32_i32$1 & i64toi32_i32$3 | 0; var$1$hi = i64toi32_i32$0; i64toi32_i32$0 = -1; i64toi32_i32$5 = -1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $21 = i64toi32_i32$0 >>> i64toi32_i32$2 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$2 | 0; $21 = (((1 << i64toi32_i32$2 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$2 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$2 | 0) | 0; } $15$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = $15$hi; i64toi32_i32$0 = $21; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$5 = i64toi32_i32$1 & i64toi32_i32$5 | 0; $17$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$5 = $17$hi; i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$3 | 0; i64toi32_i32$0 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$2 | 0; $22 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$2 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$2 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$2 | 0) | 0; $22 = i64toi32_i32$1 << i64toi32_i32$2 | 0; } $19$hi = i64toi32_i32$0; i64toi32_i32$0 = $10$hi; i64toi32_i32$5 = $10; i64toi32_i32$1 = $19$hi; i64toi32_i32$3 = $22; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; i64toi32_i32$5 = i64toi32_i32$5 | i64toi32_i32$3 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$5 | 0; } return { "rotl": legalstub$1, "rotr": legalstub$2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var rotl = retasmFunc.rotl; export var rotr = retasmFunc.rotr; binaryen-version_108/test/wasm2js/i64-rotate.2asm.js.opt000066400000000000000000000047621423707623100232210ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var i64toi32_i32$HIGH_BITS = 0; function legalstub$1($0, $1, $2, $3, $4, $5) { var $6 = 0, $7 = 0, $8 = 0; $8 = $0; $0 = 0; $7 = $2 & 63; $6 = $7; $3 = $6 & 31; if ($6 >>> 0 >= 32) { $3 = -1 >>> $3 | 0 } else { $0 = -1 >>> $3 | 0; $3 = $0 | (1 << $3) - 1 << 32 - $3; } $6 = $3 & $8; $0 = $0 & $1; $3 = $7 & 31; if ($7 >>> 0 >= 32) { $0 = $6 << $3; $6 = 0; } else { $0 = (1 << $3) - 1 & $6 >>> 32 - $3 | $0 << $3; $6 = $6 << $3; } $3 = $0; $2 = 0 - $2 & 63; $0 = $2 & 31; if ($2 >>> 0 >= 32) { $0 = -1 << $0; $7 = 0; } else { $7 = -1 << $0; $0 = $7 | (1 << $0) - 1 & -1 >>> 32 - $0; } $8 = $7 & $8; $1 = $0 & $1; $0 = $2 & 31; if ($2 >>> 0 >= 32) { $2 = 0; $0 = $1 >>> $0 | 0; } else { $2 = $1 >>> $0 | 0; $0 = ((1 << $0) - 1 & $1) << 32 - $0 | $8 >>> $0; } $0 = $0 | $6; i64toi32_i32$HIGH_BITS = $2 | $3; return ($0 | 0) == ($4 | 0) & ($5 | 0) == (i64toi32_i32$HIGH_BITS | 0); } function legalstub$2($0, $1, $2, $3, $4, $5) { var $6 = 0, $7 = 0, $8 = 0, $9 = 0; $8 = $0; $7 = $2 & 63; $3 = $7; $0 = $3 & 31; if ($3 >>> 0 >= 32) { $0 = -1 << $0; $3 = 0; } else { $3 = -1 << $0; $0 = $3 | (1 << $0) - 1 & -1 >>> 32 - $0; } $9 = $3 & $8; $6 = $0 & $1; $3 = $7 & 31; if ($7 >>> 0 >= 32) { $0 = 0; $7 = $6 >>> $3 | 0; } else { $0 = $6 >>> $3 | 0; $7 = ((1 << $3) - 1 & $6) << 32 - $3 | $9 >>> $3; } $3 = $0; $6 = 0 - $2 & 63; $2 = $6 & 31; if ($6 >>> 0 >= 32) { $0 = 0; $2 = -1 >>> $2 | 0; } else { $0 = -1 >>> $2 | 0; $2 = $0 | (1 << $2) - 1 << 32 - $2; } $2 = $2 & $8; $1 = $0 & $1; $0 = $6 & 31; if ($6 >>> 0 >= 32) { $1 = $2 << $0; $0 = 0; } else { $1 = (1 << $0) - 1 & $2 >>> 32 - $0 | $1 << $0; $0 = $2 << $0; } $0 = $0 | $7; i64toi32_i32$HIGH_BITS = $1 | $3; return ($0 | 0) == ($4 | 0) & ($5 | 0) == (i64toi32_i32$HIGH_BITS | 0); } return { "rotl": legalstub$1, "rotr": legalstub$2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var rotl = retasmFunc.rotl; export var rotr = retasmFunc.rotr; binaryen-version_108/test/wasm2js/i64-rotate.wast000066400000000000000000000063231423707623100221140ustar00rootroot00000000000000;; Testing i64 rotates (module (func $dummy) (func (export "rotl") (param $0 i64) (param $1 i64) (param $2 i64) (result i32) (i64.eq (i64.rotl (local.get $0) (local.get $1)) (local.get $2))) (func (export "rotr") (param $0 i64) (param $1 i64) (param $2 i64) (result i32) (i64.eq (i64.rotr (local.get $0) (local.get $1)) (local.get $2))) ) (assert_return (invoke "rotl" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 2) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0) (i32.const 31) (i32.const 0) (i32.const 2147483648) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0) (i32.const 32) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 0) (i32.const 33) (i32.const 0) (i32.const 0) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1) (i32.const 1) (i32.const 0) (i32.const 2) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1) (i32.const 31) (i32.const 0) (i32.const 2147483648) (i32.const 2147483648)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1) (i32.const 32) (i32.const 0) (i32.const 1) (i32.const 1)) (i32.const 1)) (assert_return (invoke "rotl" (i32.const 1) (i32.const 1) (i32.const 33) (i32.const 0) (i32.const 2) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 2147483648)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0) (i32.const 31) (i32.const 0) (i32.const 0) (i32.const 2)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0) (i32.const 32) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "rotr" (i32.const 1) (i32.const 0) (i32.const 33) (i32.const 0) (i32.const 2147483648) (i32.const 0)) (i32.const 1)) binaryen-version_108/test/wasm2js/i64-select.2asm.js000066400000000000000000000007361423707623100223760ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/i64-select.2asm.js.opt000066400000000000000000000007361423707623100231770ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/i64-select.wast000066400000000000000000000012721423707623100220730ustar00rootroot00000000000000;; Testing i64 select (module (func $p (param $i i32) (result i32) (local.get $i)) (func (param i32) (result i32) (return (select (call $p (i32.const -1)) (call $p (i32.const 0)) (i32.const 1) ) ) ) (func (result i64) (return (select (i64.const -1) (i64.const 0) (i32.const 1) ) ) ) (func $unreachable-select-i64 (result i64) (select (i64.const 1) (unreachable) (i32.const 268435456) ) ) (func $unreachable-select-i64-b (result i64) (select (unreachable) (i64.const 1) (i32.const 268435456) ) ) (func $unreachable-select-i64-c (result i64) (select (i64.const 1) (i64.const 1) (unreachable) ) ) ) binaryen-version_108/test/wasm2js/i64-shifts.2asm.js000066400000000000000000000212551423707623100224160ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0, $0$hi, $1_1, $1$hi, $2_1, $2$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; $2_1 = $2_1 | 0; $2$hi = $2$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $12 = 0, $5$hi = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1_1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $5$hi = i64toi32_i32$1; i64toi32_i32$1 = $2$hi; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $12; i64toi32_i32$2 = $2$hi; i64toi32_i32$3 = $2_1; return (i64toi32_i32$0 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$1 | 0) == (i64toi32_i32$2 | 0) | 0 | 0; } function $2($0, $0$hi, $1_1, $1$hi, $2_1, $2$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1_1 = $1_1 | 0; $1$hi = $1$hi | 0; $2_1 = $2_1 | 0; $2$hi = $2$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$2 = 0, $12 = 0, $5$hi = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1_1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $12 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $12 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } $5$hi = i64toi32_i32$1; i64toi32_i32$1 = $2$hi; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $12; i64toi32_i32$2 = $2$hi; i64toi32_i32$3 = $2_1; return (i64toi32_i32$0 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$1 | 0) == ($2$hi | 0) | 0 | 0; } function legalstub$1($0, $1_1, $2_1, $3, $4, $5) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3 = $3 | 0; $4 = $4 | 0; $5 = $5 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $26 = 0, $27 = 0, $28 = 0, $7 = 0, $7$hi = 0, $10$hi = 0, $11 = 0, $11$hi = 0, $13 = 0, $13$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $19 = 0, $19$hi = 0, $22$hi = 0, $23 = 0, $23$hi = 0; i64toi32_i32$0 = 0; $7 = $0; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $26 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $26 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $26; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $11 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $13 = $2_1; $13$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $27 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $27 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $16$hi = i64toi32_i32$0; i64toi32_i32$0 = $13$hi; i64toi32_i32$2 = $13; i64toi32_i32$1 = $16$hi; i64toi32_i32$3 = $27; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $17 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $17$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; $19 = $4; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = $5; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $28 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $28 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } $22$hi = i64toi32_i32$2; i64toi32_i32$2 = $19$hi; i64toi32_i32$1 = $19; i64toi32_i32$0 = $22$hi; i64toi32_i32$3 = $28; i64toi32_i32$0 = i64toi32_i32$2 | i64toi32_i32$0 | 0; $23 = i64toi32_i32$1 | i64toi32_i32$3 | 0; $23$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$1 = $17$hi; i64toi32_i32$2 = $23$hi; return $1($11 | 0, i64toi32_i32$0 | 0, $17 | 0, i64toi32_i32$1 | 0, $23 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$2($0, $1_1, $2_1, $3, $4, $5) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3 = $3 | 0; $4 = $4 | 0; $5 = $5 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $26 = 0, $27 = 0, $28 = 0, $7 = 0, $7$hi = 0, $10$hi = 0, $11 = 0, $11$hi = 0, $13 = 0, $13$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $19 = 0, $19$hi = 0, $22$hi = 0, $23 = 0, $23$hi = 0; i64toi32_i32$0 = 0; $7 = $0; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $26 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $26 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $26; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $11 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $13 = $2_1; $13$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $27 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $27 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $16$hi = i64toi32_i32$0; i64toi32_i32$0 = $13$hi; i64toi32_i32$2 = $13; i64toi32_i32$1 = $16$hi; i64toi32_i32$3 = $27; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $17 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $17$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; $19 = $4; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = $5; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $28 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $28 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } $22$hi = i64toi32_i32$2; i64toi32_i32$2 = $19$hi; i64toi32_i32$1 = $19; i64toi32_i32$0 = $22$hi; i64toi32_i32$3 = $28; i64toi32_i32$0 = i64toi32_i32$2 | i64toi32_i32$0 | 0; $23 = i64toi32_i32$1 | i64toi32_i32$3 | 0; $23$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$1 = $17$hi; i64toi32_i32$2 = $23$hi; return $2($11 | 0, i64toi32_i32$0 | 0, $17 | 0, i64toi32_i32$1 | 0, $23 | 0, i64toi32_i32$2 | 0) | 0 | 0; } return { "shl_i64": legalstub$1, "shr_i64": legalstub$2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var shl_i64 = retasmFunc.shl_i64; export var shr_i64 = retasmFunc.shr_i64; binaryen-version_108/test/wasm2js/i64-shifts.2asm.js.opt000066400000000000000000000022261423707623100232140ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function legalstub$1($0, $1, $2, $3, $4, $5) { $3 = $0; $0 = $2 & 31; if (($2 & 63) >>> 0 >= 32) { $1 = $3 << $0; $0 = 0; } else { $1 = (1 << $0) - 1 & $3 >>> 32 - $0 | $1 << $0; $0 = $3 << $0; } return ($0 | 0) == ($4 | 0) & ($1 | 0) == ($5 | 0); } function legalstub$2($0, $1, $2, $3, $4, $5) { $3 = $0; $0 = $2 & 31; if (($2 & 63) >>> 0 >= 32) { $2 = $1 >> 31; $0 = $1 >> $0; } else { $2 = $1 >> $0; $0 = ((1 << $0) - 1 & $1) << 32 - $0 | $3 >>> $0; } return ($0 | 0) == ($4 | 0) & ($2 | 0) == ($5 | 0); } return { "shl_i64": legalstub$1, "shr_i64": legalstub$2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var shl_i64 = retasmFunc.shl_i64; export var shr_i64 = retasmFunc.shr_i64; binaryen-version_108/test/wasm2js/i64-shifts.wast000066400000000000000000000077671423707623100221330ustar00rootroot00000000000000;; Testing i64 shifts (module (func $dummy) (func (export "shl_i64") (param $0 i64) (param $1 i64) (param $2 i64) (result i32) (i64.eq (i64.shl (local.get $0) (local.get $1)) (local.get $2))) (func (export "shr_i64") (param $0 i64) (param $1 i64) (param $2 i64) (result i32) (i64.eq (i64.shr_s (local.get $0) (local.get $1)) (local.get $2))) ) (assert_return (invoke "shl_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shl_i64" (i32.const 1) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 2) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shl_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shl_i64" (i32.const 1) (i32.const 0) (i32.const 32) (i32.const 0) (i32.const 0) (i32.const 1)) (i32.const 1)) (assert_return (invoke "shl_i64" (i32.const 1) (i32.const 0) (i32.const 63) (i32.const 0) (i32.const 0) (i32.const 2147483648)) (i32.const 1)) (assert_return (invoke "shl_i64" (i32.const 1) (i32.const 0) (i32.const 64) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 1) (i32.const 0) (i32.const 32) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 0) (i32.const 1) (i32.const 32) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 0) (i32.const 2) (i32.const 33) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 0) (i32.const 2147483648) (i32.const 32) (i32.const 0) (i32.const 2147483648) (i32.const -1)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 0) (i32.const 2147483648) (i32.const 33) (i32.const 0) (i32.const 3221225472) (i32.const -1)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 0) (i32.const 2147483648) (i32.const 63) (i32.const 0) (i32.const -1) (i32.const -1)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 1) (i32.const 0) (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 1) (i32.const 0) (i32.const 2) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 2) (i32.const 1) (i32.const 1) (i32.const 0) (i32.const -2147483647) (i32.const 0)) (i32.const 1)) (assert_return (invoke "shr_i64" (i32.const 2) (i32.const 1) (i32.const 2) (i32.const 0) (i32.const 1073741824) (i32.const 0)) (i32.const 1)) binaryen-version_108/test/wasm2js/if_unreachable.2asm.js000066400000000000000000000007361423707623100234460ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/if_unreachable.2asm.js.opt000066400000000000000000000007361423707623100242470ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/if_unreachable.wast000066400000000000000000000006421423707623100231430ustar00rootroot00000000000000(module (type $0 (func (param i32 i32 i32 i32 i32 i32))) (import "env" "table" (table $timport$0 6 funcref)) (func $0 (; 0 ;) (type $0) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (if (i32.ne (i32.const 0) (i32.const 48) ) (block $label$2 (br_if $label$2 (i32.const 0) ) (unreachable) ) (unreachable) ) (unreachable) ) ) binaryen-version_108/test/wasm2js/indirect-select.2asm.js000066400000000000000000000015211423707623100235660ustar00rootroot00000000000000import { table } from 'env'; function asmFunc(env) { var FUNCTION_TABLE = env.table; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x) { x = x | 0; return FUNCTION_TABLE[(x ? 1 : 0) | 0]() | 0 | 0; } function $1(x) { x = x | 0; return FUNCTION_TABLE[(x ? 0 : 1) | 0]() | 0 | 0; } return { "foo_true": $0, "foo_false": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, table }); export var foo_true = retasmFunc.foo_true; export var foo_false = retasmFunc.foo_false; binaryen-version_108/test/wasm2js/indirect-select.2asm.js.opt000066400000000000000000000015201423707623100243660ustar00rootroot00000000000000import { table } from 'env'; function asmFunc(env) { var FUNCTION_TABLE = env.table; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0($0_1) { $0_1 = $0_1 | 0; return FUNCTION_TABLE[!!$0_1 | 0]() | 0; } function $1($0_1) { $0_1 = $0_1 | 0; return FUNCTION_TABLE[!$0_1 | 0]() | 0; } return { "foo_true": $0, "foo_false": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, table }); export var foo_true = retasmFunc.foo_true; export var foo_false = retasmFunc.foo_false; binaryen-version_108/test/wasm2js/indirect-select.wast000066400000000000000000000007331423707623100232730ustar00rootroot00000000000000(module (type $none_=>_i32 (func (result i32))) (import "env" "table" (table $timport 6 funcref)) (func "foo-true" (param $x i32) (result i32) (call_indirect (type $none_=>_i32) (select (i32.const 1) (i32.const 0) (local.get $x) ) ) ) (func "foo-false" (param $x i32) (result i32) (call_indirect (type $none_=>_i32) (select (i32.const 0) (i32.const 1) (local.get $x) ) ) ) ) binaryen-version_108/test/wasm2js/int_exprs.2asm.js000066400000000000000000014511431423707623100225350ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x, y) { x = x | 0; y = y | 0; return (x + 1 | 0 | 0) < (y + 1 | 0 | 0) | 0; } function $1(x, y) { x = x | 0; y = y | 0; return (x + 1 | 0) >>> 0 < (y + 1 | 0) >>> 0 | 0; } function $2(x, x$hi, y, y$hi) { x = x | 0; x$hi = x$hi | 0; y = y | 0; y$hi = y$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, $13 = 0, $14 = 0, $15 = 0, $3_1 = 0, $3$hi = 0, $5$hi = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$2 = x; i64toi32_i32$1 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$3 | 0; i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } $3_1 = i64toi32_i32$4; $3$hi = i64toi32_i32$5; i64toi32_i32$5 = y$hi; i64toi32_i32$0 = y; i64toi32_i32$2 = 0; i64toi32_i32$3 = 1; i64toi32_i32$1 = i64toi32_i32$0 + i64toi32_i32$3 | 0; i64toi32_i32$4 = i64toi32_i32$5 + i64toi32_i32$2 | 0; if (i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$4 = i64toi32_i32$4 + 1 | 0 } $5$hi = i64toi32_i32$4; i64toi32_i32$4 = $3$hi; i64toi32_i32$5 = $3_1; i64toi32_i32$0 = $5$hi; i64toi32_i32$3 = i64toi32_i32$1; if ((i64toi32_i32$4 | 0) < (i64toi32_i32$0 | 0)) { $13 = 1 } else { if ((i64toi32_i32$4 | 0) <= (i64toi32_i32$0 | 0)) { if (i64toi32_i32$5 >>> 0 >= i64toi32_i32$3 >>> 0) { $14 = 0 } else { $14 = 1 } $15 = $14; } else { $15 = 0 } $13 = $15; } return $13 | 0; } function $3(x, x$hi, y, y$hi) { x = x | 0; x$hi = x$hi | 0; y = y | 0; y$hi = y$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, $3_1 = 0, $3$hi = 0, $5$hi = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$2 = x; i64toi32_i32$1 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$3 | 0; i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } $3_1 = i64toi32_i32$4; $3$hi = i64toi32_i32$5; i64toi32_i32$5 = y$hi; i64toi32_i32$0 = y; i64toi32_i32$2 = 0; i64toi32_i32$3 = 1; i64toi32_i32$1 = i64toi32_i32$0 + i64toi32_i32$3 | 0; i64toi32_i32$4 = i64toi32_i32$5 + i64toi32_i32$2 | 0; if (i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$4 = i64toi32_i32$4 + 1 | 0 } $5$hi = i64toi32_i32$4; i64toi32_i32$4 = $3$hi; i64toi32_i32$5 = $3_1; i64toi32_i32$0 = $5$hi; i64toi32_i32$3 = i64toi32_i32$1; return i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0 | ((i64toi32_i32$4 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$5 >>> 0 < i64toi32_i32$3 >>> 0 | 0) | 0 | 0; } function legalstub$2($0_1, $1_1, $2_1, $3_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5 = 0, $5$hi = 0, $8$hi = 0, $9 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5 = $0_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $2($9 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$3($0_1, $1_1, $2_1, $3_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5 = 0, $5$hi = 0, $8$hi = 0, $9 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5 = $0_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $3($9 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } return { "i32_no_fold_cmp_s_offset": $0, "i32_no_fold_cmp_u_offset": $1, "i64_no_fold_cmp_s_offset": legalstub$2, "i64_no_fold_cmp_u_offset": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var i32_no_fold_cmp_s_offset = retasmFunc.i32_no_fold_cmp_s_offset; export var i32_no_fold_cmp_u_offset = retasmFunc.i32_no_fold_cmp_u_offset; export var i64_no_fold_cmp_s_offset = retasmFunc.i64_no_fold_cmp_s_offset; export var i64_no_fold_cmp_u_offset = retasmFunc.i64_no_fold_cmp_u_offset; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = x; i64toi32_i32$0 = i64toi32_i32$1 >> 31 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$0($0_1, $1) { $0_1 = $0_1 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $0(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } return { "i64_no_fold_wrap_extend_s": legalstub$0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i64_no_fold_wrap_extend_s = retasmFunc.i64_no_fold_wrap_extend_s; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$0 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return x | 0; } function legalstub$0($0_1, $1) { $0_1 = $0_1 | 0; $1 = $1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $0(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } return { "i64_no_fold_wrap_extend_u": legalstub$0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i64_no_fold_wrap_extend_u = retasmFunc.i64_no_fold_wrap_extend_u; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x << 1 | 0) >> 1 | 0 | 0; } function $1(x) { x = x | 0; return (x << 1 | 0) >>> 1 | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, $7 = 0, $8 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$2 = x; i64toi32_i32$1 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $7 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $7 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } i64toi32_i32$0 = $7; i64toi32_i32$2 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $8 = i64toi32_i32$1 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$4 | 0; $8 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$0 = $8; i64toi32_i32$HIGH_BITS = i64toi32_i32$2; return i64toi32_i32$0 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7 = 0, $8 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$2 = x; i64toi32_i32$1 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $7 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $7 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } i64toi32_i32$0 = $7; i64toi32_i32$2 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $8 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $8 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$0 = $8; i64toi32_i32$HIGH_BITS = i64toi32_i32$2; return i64toi32_i32$0 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } return { "i32_no_fold_shl_shr_s": $0, "i32_no_fold_shl_shr_u": $1, "i64_no_fold_shl_shr_s": legalstub$2, "i64_no_fold_shl_shr_u": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_shl_shr_s = retasmFunc.i32_no_fold_shl_shr_s; export var i32_no_fold_shl_shr_u = retasmFunc.i32_no_fold_shl_shr_u; export var i64_no_fold_shl_shr_s = retasmFunc.i64_no_fold_shl_shr_s; export var i64_no_fold_shl_shr_u = retasmFunc.i64_no_fold_shl_shr_u; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x >> 1 | 0) << 1 | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 1 | 0) << 1 | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, $7 = 0, $8 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$2 = x; i64toi32_i32$1 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $7 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $7 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$0 = $7; i64toi32_i32$2 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $8 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $8 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } i64toi32_i32$0 = $8; i64toi32_i32$HIGH_BITS = i64toi32_i32$2; return i64toi32_i32$0 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, $7 = 0, $8 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$2 = x; i64toi32_i32$1 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $7 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $7 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$0 = $7; i64toi32_i32$2 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; $8 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $8 = i64toi32_i32$0 << i64toi32_i32$4 | 0; } i64toi32_i32$0 = $8; i64toi32_i32$HIGH_BITS = i64toi32_i32$2; return i64toi32_i32$0 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } return { "i32_no_fold_shr_s_shl": $0, "i32_no_fold_shr_u_shl": $1, "i64_no_fold_shr_s_shl": legalstub$2, "i64_no_fold_shr_u_shl": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_shr_s_shl = retasmFunc.i32_no_fold_shr_s_shl; export var i32_no_fold_shr_u_shl = retasmFunc.i32_no_fold_shr_u_shl; export var i64_no_fold_shr_s_shl = retasmFunc.i64_no_fold_shr_s_shl; export var i64_no_fold_shr_u_shl = retasmFunc.i64_no_fold_shr_u_shl; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return Math_imul((x | 0) / (6 | 0) | 0, 6) | 0; } function $1(x) { x = x | 0; return Math_imul((x >>> 0) / (6 >>> 0) | 0, 6) | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $4 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, 6 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $4 = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_mul($4 | 0, i64toi32_i32$0 | 0, 6 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $4 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_udiv(x | 0, i64toi32_i32$0 | 0, 6 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $4 = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_mul($4 | 0, i64toi32_i32$0 | 0, 6 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, var$2 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$3 = 0, var$4 = 0, var$5 = 0, $21 = 0, $22 = 0, var$6 = 0, $24 = 0, $17 = 0, $18 = 0, $23 = 0, $29 = 0, $45 = 0, $56$hi = 0, $62$hi = 0; i64toi32_i32$0 = var$1$hi; var$2 = var$1; var$4 = var$2 >>> 16 | 0; i64toi32_i32$0 = var$0$hi; var$3 = var$0; var$5 = var$3 >>> 16 | 0; $17 = Math_imul(var$4, var$5); $18 = var$2; i64toi32_i32$2 = var$3; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $21 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } $23 = $17 + Math_imul($18, $21) | 0; i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $22 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $22 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } $29 = $23 + Math_imul($22, var$3) | 0; var$2 = var$2 & 65535 | 0; var$3 = var$3 & 65535 | 0; var$6 = Math_imul(var$2, var$3); var$2 = (var$6 >>> 16 | 0) + Math_imul(var$2, var$5) | 0; $45 = $29 + (var$2 >>> 16 | 0) | 0; var$2 = (var$2 & 65535 | 0) + Math_imul(var$4, var$3) | 0; i64toi32_i32$2 = 0; i64toi32_i32$1 = $45 + (var$2 >>> 16 | 0) | 0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $24 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $24 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $56$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; $62$hi = i64toi32_i32$0; i64toi32_i32$0 = $56$hi; i64toi32_i32$2 = $24; i64toi32_i32$1 = $62$hi; i64toi32_i32$3 = var$2 << 16 | 0 | (var$6 & 65535 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; i64toi32_i32$2 = i64toi32_i32$2 | i64toi32_i32$3 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_mul(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_no_fold_div_s_mul": $0, "i32_no_fold_div_u_mul": $1, "i64_no_fold_div_s_mul": legalstub$2, "i64_no_fold_div_u_mul": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_div_s_mul = retasmFunc.i32_no_fold_div_s_mul; export var i32_no_fold_div_u_mul = retasmFunc.i32_no_fold_div_u_mul; export var i64_no_fold_div_s_mul = retasmFunc.i64_no_fold_div_s_mul; export var i64_no_fold_div_u_mul = retasmFunc.i64_no_fold_div_u_mul; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) / (x | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) / (x >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = i64toi32_i32$0; i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, x | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = i64toi32_i32$0; i64toi32_i32$1 = __wasm_i64_udiv(x | 0, i64toi32_i32$0 | 0, x | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_no_fold_div_s_self": $0, "i32_no_fold_div_u_self": $1, "i64_no_fold_div_s_self": legalstub$2, "i64_no_fold_div_u_self": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_div_s_self = retasmFunc.i32_no_fold_div_s_self; export var i32_no_fold_div_u_self = retasmFunc.i32_no_fold_div_u_self; export var i64_no_fold_div_s_self = retasmFunc.i64_no_fold_div_s_self; export var i64_no_fold_div_u_self = retasmFunc.i64_no_fold_div_u_self; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) % (x | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) % (x >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = i64toi32_i32$0; i64toi32_i32$1 = __wasm_i64_srem(x | 0, i64toi32_i32$0 | 0, x | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = i64toi32_i32$0; i64toi32_i32$1 = __wasm_i64_urem(x | 0, i64toi32_i32$0 | 0, x | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, var$2 = 0, $20 = 0, $21 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $20 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $20; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $21 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $21 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$0 = $21; var$0$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_urem($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$2$hi; i64toi32_i32$4 = $17$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$1 = $19$hi; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = var$2$hi; i64toi32_i32$5 = i64toi32_i32$4 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$0 | 0; i64toi32_i32$4 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_srem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_urem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$0 = __wasm_intrinsics_temp_i64$hi; i64toi32_i32$1 = __wasm_intrinsics_temp_i64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_no_fold_rem_s_self": $0, "i32_no_fold_rem_u_self": $1, "i64_no_fold_rem_s_self": legalstub$2, "i64_no_fold_rem_u_self": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_rem_s_self = retasmFunc.i32_no_fold_rem_s_self; export var i32_no_fold_rem_u_self = retasmFunc.i32_no_fold_rem_u_self; export var i64_no_fold_rem_s_self = retasmFunc.i64_no_fold_rem_s_self; export var i64_no_fold_rem_u_self = retasmFunc.i64_no_fold_rem_u_self; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (Math_imul(x, 6) | 0) / (6 | 0) | 0 | 0; } function $1(x) { x = x | 0; return (Math_imul(x, 6) >>> 0) / (6 >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $4 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_mul(x | 0, i64toi32_i32$0 | 0, 6 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $4 = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_sdiv($4 | 0, i64toi32_i32$0 | 0, 6 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $4 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_mul(x | 0, i64toi32_i32$0 | 0, 6 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $4 = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_udiv($4 | 0, i64toi32_i32$0 | 0, 6 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, var$2 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$3 = 0, var$4 = 0, var$5 = 0, $21 = 0, $22 = 0, var$6 = 0, $24 = 0, $17 = 0, $18 = 0, $23 = 0, $29 = 0, $45 = 0, $56$hi = 0, $62$hi = 0; i64toi32_i32$0 = var$1$hi; var$2 = var$1; var$4 = var$2 >>> 16 | 0; i64toi32_i32$0 = var$0$hi; var$3 = var$0; var$5 = var$3 >>> 16 | 0; $17 = Math_imul(var$4, var$5); $18 = var$2; i64toi32_i32$2 = var$3; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $21 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } $23 = $17 + Math_imul($18, $21) | 0; i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $22 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $22 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } $29 = $23 + Math_imul($22, var$3) | 0; var$2 = var$2 & 65535 | 0; var$3 = var$3 & 65535 | 0; var$6 = Math_imul(var$2, var$3); var$2 = (var$6 >>> 16 | 0) + Math_imul(var$2, var$5) | 0; $45 = $29 + (var$2 >>> 16 | 0) | 0; var$2 = (var$2 & 65535 | 0) + Math_imul(var$4, var$3) | 0; i64toi32_i32$2 = 0; i64toi32_i32$1 = $45 + (var$2 >>> 16 | 0) | 0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $24 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $24 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $56$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; $62$hi = i64toi32_i32$0; i64toi32_i32$0 = $56$hi; i64toi32_i32$2 = $24; i64toi32_i32$1 = $62$hi; i64toi32_i32$3 = var$2 << 16 | 0 | (var$6 & 65535 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; i64toi32_i32$2 = i64toi32_i32$2 | i64toi32_i32$3 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_mul(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_no_fold_mul_div_s": $0, "i32_no_fold_mul_div_u": $1, "i64_no_fold_mul_div_s": legalstub$2, "i64_no_fold_mul_div_u": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_mul_div_s = retasmFunc.i32_no_fold_mul_div_s; export var i32_no_fold_mul_div_u = retasmFunc.i32_no_fold_mul_div_u; export var i64_no_fold_mul_div_s = retasmFunc.i64_no_fold_mul_div_s; export var i64_no_fold_mul_div_u = retasmFunc.i64_no_fold_mul_div_u; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) / (2 | 0) | 0 | 0; } function $1(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, 2 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$1($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $1(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_no_fold_div_s_2": $0, "i64_no_fold_div_s_2": legalstub$1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_div_s_2 = retasmFunc.i32_no_fold_div_s_2; export var i64_no_fold_div_s_2 = retasmFunc.i64_no_fold_div_s_2; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) % (2 | 0) | 0 | 0; } function $1(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_srem(x | 0, i64toi32_i32$0 | 0, 2 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$1($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $1(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, var$2 = 0, $20 = 0, $21 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $20 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $20; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $21 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $21 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$0 = $21; var$0$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_urem($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$2$hi; i64toi32_i32$4 = $17$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$1 = $19$hi; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = var$2$hi; i64toi32_i32$5 = i64toi32_i32$4 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$0 | 0; i64toi32_i32$4 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function __wasm_i64_srem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_urem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$0 = __wasm_intrinsics_temp_i64$hi; i64toi32_i32$1 = __wasm_intrinsics_temp_i64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_no_fold_rem_s_2": $0, "i64_no_fold_rem_s_2": legalstub$1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_rem_s_2 = retasmFunc.i32_no_fold_rem_s_2; export var i64_no_fold_rem_s_2 = retasmFunc.i64_no_fold_rem_s_2; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) / (0 | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) / (0 >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, 0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_udiv(x | 0, i64toi32_i32$0 | 0, 0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_div_s_0": $0, "i32_div_u_0": $1, "i64_div_s_0": legalstub$2, "i64_div_u_0": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_div_s_0 = retasmFunc.i32_div_s_0; export var i32_div_u_0 = retasmFunc.i32_div_u_0; export var i64_div_s_0 = retasmFunc.i64_div_s_0; export var i64_div_u_0 = retasmFunc.i64_div_u_0; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) / (3 | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) / (3 >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, 3 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_udiv(x | 0, i64toi32_i32$0 | 0, 3 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_div_s_3": $0, "i32_div_u_3": $1, "i64_div_s_3": legalstub$2, "i64_div_u_3": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_div_s_3 = retasmFunc.i32_div_s_3; export var i32_div_u_3 = retasmFunc.i32_div_u_3; export var i64_div_s_3 = retasmFunc.i64_div_s_3; export var i64_div_u_3 = retasmFunc.i64_div_u_3; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) / (5 | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) / (5 >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, 5 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_udiv(x | 0, i64toi32_i32$0 | 0, 5 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_div_s_5": $0, "i32_div_u_5": $1, "i64_div_s_5": legalstub$2, "i64_div_u_5": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_div_s_5 = retasmFunc.i32_div_s_5; export var i32_div_u_5 = retasmFunc.i32_div_u_5; export var i64_div_s_5 = retasmFunc.i64_div_s_5; export var i64_div_u_5 = retasmFunc.i64_div_u_5; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) / (7 | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) / (7 >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, 7 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_udiv(x | 0, i64toi32_i32$0 | 0, 7 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_div_s_7": $0, "i32_div_u_7": $1, "i64_div_s_7": legalstub$2, "i64_div_u_7": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_div_s_7 = retasmFunc.i32_div_s_7; export var i32_div_u_7 = retasmFunc.i32_div_u_7; export var i64_div_s_7 = retasmFunc.i64_div_s_7; export var i64_div_u_7 = retasmFunc.i64_div_u_7; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) % (3 | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) % (3 >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_srem(x | 0, i64toi32_i32$0 | 0, 3 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_urem(x | 0, i64toi32_i32$0 | 0, 3 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, var$2 = 0, $20 = 0, $21 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $20 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $20; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $21 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $21 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$0 = $21; var$0$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_urem($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$2$hi; i64toi32_i32$4 = $17$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$1 = $19$hi; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = var$2$hi; i64toi32_i32$5 = i64toi32_i32$4 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$0 | 0; i64toi32_i32$4 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_srem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_urem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$0 = __wasm_intrinsics_temp_i64$hi; i64toi32_i32$1 = __wasm_intrinsics_temp_i64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_rem_s_3": $0, "i32_rem_u_3": $1, "i64_rem_s_3": legalstub$2, "i64_rem_u_3": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_rem_s_3 = retasmFunc.i32_rem_s_3; export var i32_rem_u_3 = retasmFunc.i32_rem_u_3; export var i64_rem_s_3 = retasmFunc.i64_rem_s_3; export var i64_rem_u_3 = retasmFunc.i64_rem_u_3; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) % (5 | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) % (5 >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_srem(x | 0, i64toi32_i32$0 | 0, 5 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_urem(x | 0, i64toi32_i32$0 | 0, 5 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, var$2 = 0, $20 = 0, $21 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $20 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $20; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $21 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $21 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$0 = $21; var$0$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_urem($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$2$hi; i64toi32_i32$4 = $17$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$1 = $19$hi; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = var$2$hi; i64toi32_i32$5 = i64toi32_i32$4 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$0 | 0; i64toi32_i32$4 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_srem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_urem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$0 = __wasm_intrinsics_temp_i64$hi; i64toi32_i32$1 = __wasm_intrinsics_temp_i64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_rem_s_5": $0, "i32_rem_u_5": $1, "i64_rem_s_5": legalstub$2, "i64_rem_u_5": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_rem_s_5 = retasmFunc.i32_rem_s_5; export var i32_rem_u_5 = retasmFunc.i32_rem_u_5; export var i64_rem_s_5 = retasmFunc.i64_rem_s_5; export var i64_rem_u_5 = retasmFunc.i64_rem_u_5; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) % (7 | 0) | 0 | 0; } function $1(x) { x = x | 0; return (x >>> 0) % (7 >>> 0) | 0 | 0; } function $2(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_srem(x | 0, i64toi32_i32$0 | 0, 7 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $3(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = 0; i64toi32_i32$1 = __wasm_i64_urem(x | 0, i64toi32_i32$0 | 0, 7 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, var$2 = 0, $20 = 0, $21 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $20 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $20; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $21 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $21 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$0 = $21; var$0$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_urem($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$2$hi; i64toi32_i32$4 = $17$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$1 = $19$hi; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = var$2$hi; i64toi32_i32$5 = i64toi32_i32$4 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$0 | 0; i64toi32_i32$4 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_srem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_urem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$0 = __wasm_intrinsics_temp_i64$hi; i64toi32_i32$1 = __wasm_intrinsics_temp_i64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_rem_s_7": $0, "i32_rem_u_7": $1, "i64_rem_s_7": legalstub$2, "i64_rem_u_7": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_rem_s_7 = retasmFunc.i32_rem_s_7; export var i32_rem_u_7 = retasmFunc.i32_rem_u_7; export var i64_rem_s_7 = retasmFunc.i64_rem_s_7; export var i64_rem_u_7 = retasmFunc.i64_rem_u_7; import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; return (x | 0) / (-1 | 0) | 0 | 0; } function $1(x, x$hi) { x = x | 0; x$hi = x$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = x$hi; i64toi32_i32$1 = -1; i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, -1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$1($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $1(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "i32_no_fold_div_neg1": $0, "i64_no_fold_div_neg1": legalstub$1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_no_fold_div_neg1 = retasmFunc.i32_no_fold_div_neg1; export var i64_no_fold_div_neg1 = retasmFunc.i64_no_fold_div_neg1; binaryen-version_108/test/wasm2js/labels.2asm.js000066400000000000000000000123451423707623100217600ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { var $0_1 = 0; exit : { $0_1 = 1; break exit; } return $0_1 | 0; } function $1() { var i = 0, $6_1 = 0; i = 0; exit : { cont : while (1) { i = i + 1 | 0; if ((i | 0) == (5 | 0)) { $6_1 = i; break exit; } continue cont; }; } return $6_1 | 0; } function $2() { var i = 0, $8_1 = 0; i = 0; exit : { cont : while (1) { i = i + 1 | 0; if ((i | 0) == (5 | 0)) { continue cont } if ((i | 0) == (8 | 0)) { $8_1 = i; break exit; } i = i + 1 | 0; continue cont; }; } return $8_1 | 0; } function $3() { var i = 0, $6_1 = 0; i = 0; exit : { cont : while (1) { i = i + 1 | 0; if ((i | 0) == (5 | 0)) { $6_1 = i; break exit; } break cont; }; $6_1 = i; } return $6_1 | 0; } function $4(max) { max = max | 0; var i = 0, $9_1 = 0; i = 1; exit : { cont : while (1) { i = i + i | 0; if (i >>> 0 > max >>> 0) { $9_1 = i; break exit; } continue cont; }; } return $9_1 | 0; } function $5() { var $0_1 = 0; l : while (1) { $0_1 = 1; break l; }; return $0_1 + 1 | 0 | 0; } function $6() { var $2_1 = 0; loop_in : while (1) { if (0) { continue loop_in } $2_1 = 3; break loop_in; }; return $2_1 | 0; } function $7() { var i = 0; i = 0; block : { l : { break l; } i = i + 1 | 0; l1 : { break l1; } i = i + 1 | 0; l2 : { break l2; } i = i + 1 | 0; l3 : { break l3; } i = i + 1 | 0; l4 : { break l4; } i = i + 1 | 0; } return i | 0; } function $8() { var i = 0; i = 0; block : { if_ : { break if_; } i = i + 1 | 0; if5 : { break if5; } i = i + 1 | 0; if6 : { break if6; } i = i + 1 | 0; if7 : { break if7; } i = i + 1 | 0; if8 : { break if8; } i = i + 1 | 0; } return i | 0; } function $9($0_1) { $0_1 = $0_1 | 0; var $2_1 = 0, $3_1 = 0; ret : { exit : { $0 : { switch ($0_1 | 0) { case 1: case 2: $2_1 = 2; break exit; case 3: $3_1 = 3; break ret; default: case 0: break $0; }; } $2_1 = 5; } $3_1 = Math_imul(10, $2_1); } return $3_1 | 0; } function $10($0_1) { $0_1 = $0_1 | 0; $1 : { switch ($0_1 | 0) { case 0: return 0 | 0; default: break $1; }; } return 2 | 0; } function $11() { var i = 0, $10_1 = 0; i = 0; outer : { inner : { if (0) { break inner } i = i | 1 | 0; if (1) { break inner } i = i | 2 | 0; } i = i | 4 | 0; $10_1 = i; if (0) { break outer } i = i | 8 | 0; i = i | 16 | 0; $10_1 = i; if (1) { break outer } i = i | 32 | 0; $10_1 = i; } return $10_1 | 0; } function $12() { var $2_1 = 0, $0_1 = 0; l0 : { l1 : { $0_1 = 1; break l1; } $2_1 = $0_1; if (1) { break l0 } $2_1 = 0; } return $2_1 | 0; } function $13() { var $2_1 = 0, $0_1 = 0; l0 : { l1 : { $0_1 = 1; break l1; } $2_1 = $0_1; if (1) { break l0 } $2_1 = 0; } return $2_1 | 0; } function $14() { var i1 = 0, $7_1 = 0, $3_1 = 0; l0 : { i1 = 1; $3_1 = i1; i1 = 2; $7_1 = $3_1; if (i1) { break l0 } $7_1 = 0; } return i1 | 0; } function $15() { var $2_1 = 0, $0_1 = 0, $3_1 = 0; l0 : { l1 : { $0_1 = 1; break l1; } $2_1 = $0_1; break l0; } return $2_1 | 0; } function $16() { var $0_1 = 0; l1 : { $0_1 = 1; break l1; } return $0_1 | 0; } function $17() { var $1_1 = 0, $2_1 = 0; l1 : { $1_1 = 2; l113 : { $2_1 = 3; break l113; } } return $1_1 + $2_1 | 0 | 0; } return { "block": $0, "loop1": $1, "loop2": $2, "loop3": $3, "loop4": $4, "loop5": $5, "loop6": $6, "if_": $7, "if2": $8, "switch_": $9, "return_": $10, "br_if0": $11, "br_if1": $12, "br_if2": $13, "br_if3": $14, "br": $15, "shadowing": $16, "redefinition": $17 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var block = retasmFunc.block; export var loop1 = retasmFunc.loop1; export var loop2 = retasmFunc.loop2; export var loop3 = retasmFunc.loop3; export var loop4 = retasmFunc.loop4; export var loop5 = retasmFunc.loop5; export var loop6 = retasmFunc.loop6; export var if_ = retasmFunc.if_; export var if2 = retasmFunc.if2; export var switch_ = retasmFunc.switch_; export var return_ = retasmFunc.return_; export var br_if0 = retasmFunc.br_if0; export var br_if1 = retasmFunc.br_if1; export var br_if2 = retasmFunc.br_if2; export var br_if3 = retasmFunc.br_if3; export var br = retasmFunc.br; export var shadowing = retasmFunc.shadowing; export var redefinition = retasmFunc.redefinition; binaryen-version_108/test/wasm2js/left-to-right.2asm.js000066400000000000000000002111071423707623100232000ustar00rootroot00000000000000 var bufferView; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function i32_t0($0, $1) { $0 = $0 | 0; $1 = $1 | 0; return -1 | 0; } function i32_t1($0, $1) { $0 = $0 | 0; $1 = $1 | 0; return -2 | 0; } function i64_t0($0, $0$hi, $1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1 = $1 | 0; $1$hi = $1$hi | 0; return -1 | 0; } function i64_t1($0, $0$hi, $1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1 = $1 | 0; $1$hi = $1$hi | 0; return -2 | 0; } function f32_t0($0, $1) { $0 = Math_fround($0); $1 = Math_fround($1); return -1 | 0; } function f32_t1($0, $1) { $0 = Math_fround($0); $1 = Math_fround($1); return -2 | 0; } function f64_t0($0, $1) { $0 = +$0; $1 = +$1; return -1 | 0; } function f64_t1($0, $1) { $0 = +$0; $1 = +$1; return -2 | 0; } function reset() { HEAP32[8 >> 2] = 0; } function bump() { HEAP8[11 >> 0] = HEAPU8[10 >> 0] | 0; HEAP8[10 >> 0] = HEAPU8[9 >> 0] | 0; HEAP8[9 >> 0] = HEAPU8[8 >> 0] | 0; HEAP8[8 >> 0] = -3; } function get() { return HEAP32[8 >> 2] | 0 | 0; } function i32_left() { bump(); HEAP8[8 >> 0] = 1; return 0 | 0; } function i32_right() { bump(); HEAP8[8 >> 0] = 2; return 1 | 0; } function i32_callee() { bump(); HEAP8[8 >> 0] = 4; return 0 | 0; } function i32_bool() { bump(); HEAP8[8 >> 0] = 5; return 0 | 0; } function i64_left() { var i64toi32_i32$0 = 0; bump(); HEAP8[8 >> 0] = 1; i64toi32_i32$0 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return 0 | 0; } function i64_right() { var i64toi32_i32$0 = 0; bump(); HEAP8[8 >> 0] = 2; i64toi32_i32$0 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return 1 | 0; } function i64_callee() { bump(); HEAP8[8 >> 0] = 4; return 2 | 0; } function i64_bool() { bump(); HEAP8[8 >> 0] = 5; return 0 | 0; } function f32_left() { bump(); HEAP8[8 >> 0] = 1; return Math_fround(Math_fround(0.0)); } function f32_right() { bump(); HEAP8[8 >> 0] = 2; return Math_fround(Math_fround(1.0)); } function f32_callee() { bump(); HEAP8[8 >> 0] = 4; return 4 | 0; } function f32_bool() { bump(); HEAP8[8 >> 0] = 5; return 0 | 0; } function f64_left() { bump(); HEAP8[8 >> 0] = 1; return +(0.0); } function f64_right() { bump(); HEAP8[8 >> 0] = 2; return +(1.0); } function f64_callee() { bump(); HEAP8[8 >> 0] = 4; return 6 | 0; } function f64_bool() { bump(); HEAP8[8 >> 0] = 5; return 0 | 0; } function i32_dummy($0, $1) { $0 = $0 | 0; $1 = $1 | 0; } function i64_dummy($0, $0$hi, $1, $1$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; $1 = $1 | 0; $1$hi = $1$hi | 0; } function f32_dummy($0, $1) { $0 = Math_fround($0); $1 = Math_fround($1); } function f64_dummy($0, $1) { $0 = +$0; $1 = +$1; } function $35() { reset(); (i32_left() | 0) + (i32_right() | 0) | 0; return get() | 0 | 0; } function $36() { reset(); (i32_left() | 0) - (i32_right() | 0) | 0; return get() | 0 | 0; } function $37() { reset(); Math_imul(i32_left() | 0, i32_right() | 0); return get() | 0 | 0; } function $38() { reset(); (i32_left() | 0 | 0) / (i32_right() | 0 | 0) | 0; return get() | 0 | 0; } function $39() { reset(); ((i32_left() | 0) >>> 0) / ((i32_right() | 0) >>> 0) | 0; return get() | 0 | 0; } function $40() { reset(); (i32_left() | 0 | 0) % (i32_right() | 0 | 0) | 0; return get() | 0 | 0; } function $41() { reset(); ((i32_left() | 0) >>> 0) % ((i32_right() | 0) >>> 0) | 0; return get() | 0 | 0; } function $42() { reset(); (i32_left() | 0) & (i32_right() | 0) | 0; return get() | 0 | 0; } function $43() { reset(); i32_left() | 0 | (i32_right() | 0) | 0; return get() | 0 | 0; } function $44() { reset(); (i32_left() | 0) ^ (i32_right() | 0) | 0; return get() | 0 | 0; } function $45() { reset(); (i32_left() | 0) << (i32_right() | 0) | 0; return get() | 0 | 0; } function $46() { reset(); (i32_left() | 0) >>> (i32_right() | 0) | 0; return get() | 0 | 0; } function $47() { reset(); (i32_left() | 0) >> (i32_right() | 0) | 0; return get() | 0 | 0; } function $48() { reset(); (i32_left() | 0 | 0) == (i32_right() | 0 | 0); return get() | 0 | 0; } function $49() { reset(); (i32_left() | 0 | 0) != (i32_right() | 0 | 0); return get() | 0 | 0; } function $50() { reset(); (i32_left() | 0 | 0) < (i32_right() | 0 | 0); return get() | 0 | 0; } function $51() { reset(); (i32_left() | 0 | 0) <= (i32_right() | 0 | 0); return get() | 0 | 0; } function $52() { reset(); (i32_left() | 0) >>> 0 < (i32_right() | 0) >>> 0; return get() | 0 | 0; } function $53() { reset(); (i32_left() | 0) >>> 0 <= (i32_right() | 0) >>> 0; return get() | 0 | 0; } function $54() { reset(); (i32_left() | 0 | 0) > (i32_right() | 0 | 0); return get() | 0 | 0; } function $55() { reset(); (i32_left() | 0 | 0) >= (i32_right() | 0 | 0); return get() | 0 | 0; } function $56() { reset(); (i32_left() | 0) >>> 0 > (i32_right() | 0) >>> 0; return get() | 0 | 0; } function $57() { reset(); (i32_left() | 0) >>> 0 >= (i32_right() | 0) >>> 0; return get() | 0 | 0; } function $58() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i32_right() | 0), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return get() | 0 | 0; } function $59() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i32_right() | 0), HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; return get() | 0 | 0; } function $60() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i32_right() | 0), HEAP16[wasm2js_i32$0 >> 1] = wasm2js_i32$1; return get() | 0 | 0; } function $61() { reset(); i32_dummy(i32_left() | 0 | 0, i32_right() | 0 | 0); return get() | 0 | 0; } function $62() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; reset(); ((wasm2js_i32$1 = i32_left() | 0, wasm2js_i32$2 = i32_right() | 0), wasm2js_i32$0 = i32_callee() | 0 | 0), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0; return get() | 0 | 0; } function $63() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; reset(); wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i32_right() | 0, wasm2js_i32$2 = i32_bool() | 0, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1; return get() | 0 | 0; } function $64() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$5 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; i64toi32_i32$4 = $0 + i64toi32_i32$3 | 0; i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } return get() | 0 | 0; } function $65() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$1 | 0; i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; return get() | 0 | 0; } function $66() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = __wasm_i64_mul($0 | 0, i64toi32_i32$0 | 0, $1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; return get() | 0 | 0; } function $67() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = __wasm_i64_sdiv($0 | 0, i64toi32_i32$0 | 0, $1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; return get() | 0 | 0; } function $68() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = __wasm_i64_udiv($0 | 0, i64toi32_i32$0 | 0, $1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; return get() | 0 | 0; } function $69() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = __wasm_i64_srem($0 | 0, i64toi32_i32$0 | 0, $1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; return get() | 0 | 0; } function $70() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = __wasm_i64_urem($0 | 0, i64toi32_i32$0 | 0, $1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; return get() | 0 | 0; } function $71() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; return get() | 0 | 0; } function $72() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; return get() | 0 | 0; } function $73() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$1 | 0; return get() | 0 | 0; } function $74() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, $9 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $9 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $9 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } return get() | 0 | 0; } function $75() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $9 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $9 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $9 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } return get() | 0 | 0; } function $76() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $9 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0, i64toi32_i32$2 = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $9 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $9 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } return get() | 0 | 0; } function $77() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; return get() | 0 | 0; } function $78() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; return get() | 0 | 0; } function $79() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $8 = 0, $9 = 0, $10 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; if ((i64toi32_i32$0 | 0) < (i64toi32_i32$1 | 0)) { $8 = 1 } else { if ((i64toi32_i32$0 | 0) <= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 >= i64toi32_i32$3 >>> 0) { $9 = 0 } else { $9 = 1 } $10 = $9; } else { $10 = 0 } $8 = $10; } return get() | 0 | 0; } function $80() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $8 = 0, $9 = 0, $10 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; if ((i64toi32_i32$0 | 0) < (i64toi32_i32$1 | 0)) { $8 = 1 } else { if ((i64toi32_i32$0 | 0) <= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 > i64toi32_i32$3 >>> 0) { $9 = 0 } else { $9 = 1 } $10 = $9; } else { $10 = 0 } $8 = $10; } return get() | 0 | 0; } function $81() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; return get() | 0 | 0; } function $82() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; return get() | 0 | 0; } function $83() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $8 = 0, $9 = 0, $10 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; if ((i64toi32_i32$0 | 0) > (i64toi32_i32$1 | 0)) { $8 = 1 } else { if ((i64toi32_i32$0 | 0) >= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 <= i64toi32_i32$3 >>> 0) { $9 = 0 } else { $9 = 1 } $10 = $9; } else { $10 = 0 } $8 = $10; } return get() | 0 | 0; } function $84() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $8 = 0, $9 = 0, $10 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = $1$hi; i64toi32_i32$3 = $1; if ((i64toi32_i32$0 | 0) > (i64toi32_i32$1 | 0)) { $8 = 1 } else { if ((i64toi32_i32$0 | 0) >= (i64toi32_i32$1 | 0)) { if (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) { $9 = 0 } else { $9 = 1 } $10 = $9; } else { $10 = 0 } $8 = $10; } return get() | 0 | 0; } function $85() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; return get() | 0 | 0; } function $86() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; return get() | 0 | 0; } function $87() { var i64toi32_i32$0 = 0, $0 = 0, i64toi32_i32$1 = 0, $1 = 0; reset(); $0 = i32_left() | 0; i64toi32_i32$0 = i64_right() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$0; i64toi32_i32$0 = $0; HEAP32[i64toi32_i32$0 >> 2] = $1; HEAP32[(i64toi32_i32$0 + 4 | 0) >> 2] = i64toi32_i32$1; return get() | 0 | 0; } function $88() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i64_right() | 0), HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; return get() | 0 | 0; } function $89() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i64_right() | 0), HEAP16[wasm2js_i32$0 >> 1] = wasm2js_i32$1; return get() | 0 | 0; } function $90() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i64_right() | 0), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return get() | 0 | 0; } function $91() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; i64_dummy($0 | 0, i64toi32_i32$0 | 0, $1 | 0, i64toi32_i32$1 | 0); return get() | 0 | 0; } function $92() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; FUNCTION_TABLE[i64_callee() | 0 | 0]($0, i64toi32_i32$0, $1, i64toi32_i32$1) | 0; return get() | 0 | 0; } function $93() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $0 = 0, $0$hi = 0, $1 = 0, $1$hi = 0, i64toi32_i32$4 = 0; reset(); i64toi32_i32$0 = i64_left() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$1 = i64_right() | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$1; $1$hi = i64toi32_i32$0; i64toi32_i32$4 = i64_bool() | 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; return get() | 0 | 0; } function $94() { reset(); Math_fround(Math_fround(f32_left()) + Math_fround(f32_right())); return get() | 0 | 0; } function $95() { reset(); Math_fround(Math_fround(f32_left()) - Math_fround(f32_right())); return get() | 0 | 0; } function $96() { reset(); Math_fround(Math_fround(f32_left()) * Math_fround(f32_right())); return get() | 0 | 0; } function $97() { reset(); Math_fround(Math_fround(f32_left()) / Math_fround(f32_right())); return get() | 0 | 0; } function $98() { reset(); (wasm2js_scratch_store_f32(Math_fround(f32_left())), wasm2js_scratch_load_i32(2)) & 2147483647 | 0 | ((wasm2js_scratch_store_f32(Math_fround(f32_right())), wasm2js_scratch_load_i32(2)) & -2147483648 | 0) | 0; return get() | 0 | 0; } function $99() { reset(); Math_fround(f32_left()) == Math_fround(f32_right()); return get() | 0 | 0; } function $100() { reset(); Math_fround(f32_left()) != Math_fround(f32_right()); return get() | 0 | 0; } function $101() { reset(); Math_fround(f32_left()) < Math_fround(f32_right()); return get() | 0 | 0; } function $102() { reset(); Math_fround(f32_left()) <= Math_fround(f32_right()); return get() | 0 | 0; } function $103() { reset(); Math_fround(f32_left()) > Math_fround(f32_right()); return get() | 0 | 0; } function $104() { reset(); Math_fround(f32_left()) >= Math_fround(f32_right()); return get() | 0 | 0; } function $105() { reset(); Math_fround(Math_min(Math_fround(f32_left()), Math_fround(f32_right()))); return get() | 0 | 0; } function $106() { reset(); Math_fround(Math_max(Math_fround(f32_left()), Math_fround(f32_right()))); return get() | 0 | 0; } function $107() { var wasm2js_i32$0 = 0, wasm2js_f32$0 = Math_fround(0); reset(); (wasm2js_i32$0 = i32_left() | 0, wasm2js_f32$0 = Math_fround(f32_right())), HEAPF32[wasm2js_i32$0 >> 2] = wasm2js_f32$0; return get() | 0 | 0; } function $108() { reset(); f32_dummy(Math_fround(Math_fround(f32_left())), Math_fround(Math_fround(f32_right()))); return get() | 0 | 0; } function $109() { var wasm2js_i32$0 = 0, wasm2js_f32$0 = Math_fround(0), wasm2js_f32$1 = Math_fround(0); reset(); ((wasm2js_f32$0 = Math_fround(f32_left()), wasm2js_f32$1 = Math_fround(f32_right())), wasm2js_i32$0 = f32_callee() | 0 | 0), FUNCTION_TABLE[wasm2js_i32$0](Math_fround(wasm2js_f32$0), Math_fround(wasm2js_f32$1)) | 0; return get() | 0 | 0; } function $110() { var wasm2js_f32$0 = Math_fround(0), wasm2js_f32$1 = Math_fround(0), wasm2js_i32$0 = 0; reset(); wasm2js_f32$0 = Math_fround(f32_left()), wasm2js_f32$1 = Math_fround(f32_right()), wasm2js_i32$0 = f32_bool() | 0, wasm2js_i32$0 ? wasm2js_f32$0 : wasm2js_f32$1; return get() | 0 | 0; } function $111() { reset(); +f64_left() + +f64_right(); return get() | 0 | 0; } function $112() { reset(); +f64_left() - +f64_right(); return get() | 0 | 0; } function $113() { reset(); +f64_left() * +f64_right(); return get() | 0 | 0; } function $114() { reset(); +f64_left() / +f64_right(); return get() | 0 | 0; } function $115() { var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $2 = 0, $2$hi = 0, $5 = 0, $5$hi = 0; reset(); wasm2js_scratch_store_f64(+(+f64_left())); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$2 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$1 = 2147483647; i64toi32_i32$3 = -1; i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; $2 = i64toi32_i32$2 & i64toi32_i32$3 | 0; $2$hi = i64toi32_i32$1; wasm2js_scratch_store_f64(+(+f64_right())); i64toi32_i32$1 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$0 = wasm2js_scratch_load_i32(0 | 0) | 0; i64toi32_i32$2 = -2147483648; i64toi32_i32$3 = 0; i64toi32_i32$2 = i64toi32_i32$1 & i64toi32_i32$2 | 0; $5 = i64toi32_i32$0 & i64toi32_i32$3 | 0; $5$hi = i64toi32_i32$2; i64toi32_i32$2 = $2$hi; i64toi32_i32$1 = $2; i64toi32_i32$0 = $5$hi; i64toi32_i32$3 = $5; i64toi32_i32$0 = i64toi32_i32$2 | i64toi32_i32$0 | 0; wasm2js_scratch_store_i32(0 | 0, i64toi32_i32$1 | i64toi32_i32$3 | 0 | 0); wasm2js_scratch_store_i32(1 | 0, i64toi32_i32$0 | 0); +wasm2js_scratch_load_f64(); return get() | 0 | 0; } function $116() { reset(); +f64_left() == +f64_right(); return get() | 0 | 0; } function $117() { reset(); +f64_left() != +f64_right(); return get() | 0 | 0; } function $118() { reset(); +f64_left() < +f64_right(); return get() | 0 | 0; } function $119() { reset(); +f64_left() <= +f64_right(); return get() | 0 | 0; } function $120() { reset(); +f64_left() > +f64_right(); return get() | 0 | 0; } function $121() { reset(); +f64_left() >= +f64_right(); return get() | 0 | 0; } function $122() { reset(); Math_min(+f64_left(), +f64_right()); return get() | 0 | 0; } function $123() { reset(); Math_max(+f64_left(), +f64_right()); return get() | 0 | 0; } function $124() { var wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0; reset(); (wasm2js_i32$0 = i32_left() | 0, wasm2js_f64$0 = +f64_right()), HEAPF64[wasm2js_i32$0 >> 3] = wasm2js_f64$0; return get() | 0 | 0; } function $125() { reset(); f64_dummy(+(+f64_left()), +(+f64_right())); return get() | 0 | 0; } function $126() { var wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0, wasm2js_f64$1 = 0.0; reset(); ((wasm2js_f64$0 = +f64_left(), wasm2js_f64$1 = +f64_right()), wasm2js_i32$0 = f64_callee() | 0 | 0), FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, +wasm2js_f64$1) | 0; return get() | 0 | 0; } function $127() { var wasm2js_f64$0 = 0.0, wasm2js_f64$1 = 0.0, wasm2js_i32$0 = 0; reset(); wasm2js_f64$0 = +f64_left(), wasm2js_f64$1 = +f64_right(), wasm2js_i32$0 = f64_bool() | 0, wasm2js_i32$0 ? wasm2js_f64$0 : wasm2js_f64$1; return get() | 0 | 0; } function $128() { var $3 = 0; block : { reset(); $3 = i32_left() | 0; if ((i32_right() | 0) & 0 | 0) { break block } $3 = get() | 0; } return $3 | 0; } function $129() { var $2 = 0, $3 = 0, $4 = 0; a : { reset(); b : { $2 = i32_left() | 0; $3 = $2; $4 = $2; switch (i32_right() | 0 | 0) { case 0: break a; default: break b; }; } $3 = get() | 0; } return $3 | 0; } function _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, var$2 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$3 = 0, var$4 = 0, var$5 = 0, $21 = 0, $22 = 0, var$6 = 0, $24 = 0, $17 = 0, $18 = 0, $23 = 0, $29 = 0, $45_1 = 0, $56$hi = 0, $62$hi = 0; i64toi32_i32$0 = var$1$hi; var$2 = var$1; var$4 = var$2 >>> 16 | 0; i64toi32_i32$0 = var$0$hi; var$3 = var$0; var$5 = var$3 >>> 16 | 0; $17 = Math_imul(var$4, var$5); $18 = var$2; i64toi32_i32$2 = var$3; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $21 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } $23 = $17 + Math_imul($18, $21) | 0; i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $22 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $22 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } $29 = $23 + Math_imul($22, var$3) | 0; var$2 = var$2 & 65535 | 0; var$3 = var$3 & 65535 | 0; var$6 = Math_imul(var$2, var$3); var$2 = (var$6 >>> 16 | 0) + Math_imul(var$2, var$5) | 0; $45_1 = $29 + (var$2 >>> 16 | 0) | 0; var$2 = (var$2 & 65535 | 0) + Math_imul(var$4, var$3) | 0; i64toi32_i32$2 = 0; i64toi32_i32$1 = $45_1 + (var$2 >>> 16 | 0) | 0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $24 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $24 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $56$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; $62$hi = i64toi32_i32$0; i64toi32_i32$0 = $56$hi; i64toi32_i32$2 = $24; i64toi32_i32$1 = $62$hi; i64toi32_i32$3 = var$2 << 16 | 0 | (var$6 & 65535 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; i64toi32_i32$2 = i64toi32_i32$2 | i64toi32_i32$3 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, var$2 = 0, $20 = 0, $21 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $20 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $20; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $21 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $21 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$0 = $21; var$0$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_urem($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$2$hi; i64toi32_i32$4 = $17$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$1 = $19$hi; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = var$2$hi; i64toi32_i32$5 = i64toi32_i32$4 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$0 | 0; i64toi32_i32$4 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37_1 = 0, $38_1 = 0, $39_1 = 0, $40_1 = 0, $41_1 = 0, $42_1 = 0, $43_1 = 0, $44_1 = 0, var$8$hi = 0, $45_1 = 0, $46_1 = 0, $47_1 = 0, $48_1 = 0, var$7$hi = 0, $49_1 = 0, $63$hi = 0, $65_1 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37_1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37_1; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38_1; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39_1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39_1; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40_1 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65_1 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40_1; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65_1; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41_1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41_1; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42_1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42_1; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43_1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43_1; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44_1 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44_1 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44_1; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45_1 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45_1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45_1; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46_1 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46_1 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46_1; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47_1 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47_1 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47_1; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48_1 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48_1 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48_1; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49_1 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49_1 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49_1; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_mul(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_srem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_urem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$0 = __wasm_intrinsics_temp_i64$hi; i64toi32_i32$1 = __wasm_intrinsics_temp_i64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } bufferView = HEAPU8; var FUNCTION_TABLE = [i32_t0, i32_t1, i64_t0, i64_t1, f32_t0, f32_t1, f64_t0, f64_t1]; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; bufferView = HEAPU8; } return oldPages; } return { "i32_add": $35, "i32_sub": $36, "i32_mul": $37, "i32_div_s": $38, "i32_div_u": $39, "i32_rem_s": $40, "i32_rem_u": $41, "i32_and": $42, "i32_or": $43, "i32_xor": $44, "i32_shl": $45, "i32_shr_u": $46, "i32_shr_s": $47, "i32_eq": $48, "i32_ne": $49, "i32_lt_s": $50, "i32_le_s": $51, "i32_lt_u": $52, "i32_le_u": $53, "i32_gt_s": $54, "i32_ge_s": $55, "i32_gt_u": $56, "i32_ge_u": $57, "i32_store": $58, "i32_store8": $59, "i32_store16": $60, "i32_call": $61, "i32_call_indirect": $62, "i32_select": $63, "i64_add": $64, "i64_sub": $65, "i64_mul": $66, "i64_div_s": $67, "i64_div_u": $68, "i64_rem_s": $69, "i64_rem_u": $70, "i64_and": $71, "i64_or": $72, "i64_xor": $73, "i64_shl": $74, "i64_shr_u": $75, "i64_shr_s": $76, "i64_eq": $77, "i64_ne": $78, "i64_lt_s": $79, "i64_le_s": $80, "i64_lt_u": $81, "i64_le_u": $82, "i64_gt_s": $83, "i64_ge_s": $84, "i64_gt_u": $85, "i64_ge_u": $86, "i64_store": $87, "i64_store8": $88, "i64_store16": $89, "i64_store32": $90, "i64_call": $91, "i64_call_indirect": $92, "i64_select": $93, "f32_add": $94, "f32_sub": $95, "f32_mul": $96, "f32_div": $97, "f32_copysign": $98, "f32_eq": $99, "f32_ne": $100, "f32_lt": $101, "f32_le": $102, "f32_gt": $103, "f32_ge": $104, "f32_min": $105, "f32_max": $106, "f32_store": $107, "f32_call": $108, "f32_call_indirect": $109, "f32_select": $110, "f64_add": $111, "f64_sub": $112, "f64_mul": $113, "f64_div": $114, "f64_copysign": $115, "f64_eq": $116, "f64_ne": $117, "f64_lt": $118, "f64_le": $119, "f64_gt": $120, "f64_ge": $121, "f64_min": $122, "f64_max": $123, "f64_store": $124, "f64_call": $125, "f64_call_indirect": $126, "f64_select": $127, "br_if": $128, "br_table": $129 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var i32_add = retasmFunc.i32_add; export var i32_sub = retasmFunc.i32_sub; export var i32_mul = retasmFunc.i32_mul; export var i32_div_s = retasmFunc.i32_div_s; export var i32_div_u = retasmFunc.i32_div_u; export var i32_rem_s = retasmFunc.i32_rem_s; export var i32_rem_u = retasmFunc.i32_rem_u; export var i32_and = retasmFunc.i32_and; export var i32_or = retasmFunc.i32_or; export var i32_xor = retasmFunc.i32_xor; export var i32_shl = retasmFunc.i32_shl; export var i32_shr_u = retasmFunc.i32_shr_u; export var i32_shr_s = retasmFunc.i32_shr_s; export var i32_eq = retasmFunc.i32_eq; export var i32_ne = retasmFunc.i32_ne; export var i32_lt_s = retasmFunc.i32_lt_s; export var i32_le_s = retasmFunc.i32_le_s; export var i32_lt_u = retasmFunc.i32_lt_u; export var i32_le_u = retasmFunc.i32_le_u; export var i32_gt_s = retasmFunc.i32_gt_s; export var i32_ge_s = retasmFunc.i32_ge_s; export var i32_gt_u = retasmFunc.i32_gt_u; export var i32_ge_u = retasmFunc.i32_ge_u; export var i32_store = retasmFunc.i32_store; export var i32_store8 = retasmFunc.i32_store8; export var i32_store16 = retasmFunc.i32_store16; export var i32_call = retasmFunc.i32_call; export var i32_call_indirect = retasmFunc.i32_call_indirect; export var i32_select = retasmFunc.i32_select; export var i64_add = retasmFunc.i64_add; export var i64_sub = retasmFunc.i64_sub; export var i64_mul = retasmFunc.i64_mul; export var i64_div_s = retasmFunc.i64_div_s; export var i64_div_u = retasmFunc.i64_div_u; export var i64_rem_s = retasmFunc.i64_rem_s; export var i64_rem_u = retasmFunc.i64_rem_u; export var i64_and = retasmFunc.i64_and; export var i64_or = retasmFunc.i64_or; export var i64_xor = retasmFunc.i64_xor; export var i64_shl = retasmFunc.i64_shl; export var i64_shr_u = retasmFunc.i64_shr_u; export var i64_shr_s = retasmFunc.i64_shr_s; export var i64_eq = retasmFunc.i64_eq; export var i64_ne = retasmFunc.i64_ne; export var i64_lt_s = retasmFunc.i64_lt_s; export var i64_le_s = retasmFunc.i64_le_s; export var i64_lt_u = retasmFunc.i64_lt_u; export var i64_le_u = retasmFunc.i64_le_u; export var i64_gt_s = retasmFunc.i64_gt_s; export var i64_ge_s = retasmFunc.i64_ge_s; export var i64_gt_u = retasmFunc.i64_gt_u; export var i64_ge_u = retasmFunc.i64_ge_u; export var i64_store = retasmFunc.i64_store; export var i64_store8 = retasmFunc.i64_store8; export var i64_store16 = retasmFunc.i64_store16; export var i64_store32 = retasmFunc.i64_store32; export var i64_call = retasmFunc.i64_call; export var i64_call_indirect = retasmFunc.i64_call_indirect; export var i64_select = retasmFunc.i64_select; export var f32_add = retasmFunc.f32_add; export var f32_sub = retasmFunc.f32_sub; export var f32_mul = retasmFunc.f32_mul; export var f32_div = retasmFunc.f32_div; export var f32_copysign = retasmFunc.f32_copysign; export var f32_eq = retasmFunc.f32_eq; export var f32_ne = retasmFunc.f32_ne; export var f32_lt = retasmFunc.f32_lt; export var f32_le = retasmFunc.f32_le; export var f32_gt = retasmFunc.f32_gt; export var f32_ge = retasmFunc.f32_ge; export var f32_min = retasmFunc.f32_min; export var f32_max = retasmFunc.f32_max; export var f32_store = retasmFunc.f32_store; export var f32_call = retasmFunc.f32_call; export var f32_call_indirect = retasmFunc.f32_call_indirect; export var f32_select = retasmFunc.f32_select; export var f64_add = retasmFunc.f64_add; export var f64_sub = retasmFunc.f64_sub; export var f64_mul = retasmFunc.f64_mul; export var f64_div = retasmFunc.f64_div; export var f64_copysign = retasmFunc.f64_copysign; export var f64_eq = retasmFunc.f64_eq; export var f64_ne = retasmFunc.f64_ne; export var f64_lt = retasmFunc.f64_lt; export var f64_le = retasmFunc.f64_le; export var f64_gt = retasmFunc.f64_gt; export var f64_ge = retasmFunc.f64_ge; export var f64_min = retasmFunc.f64_min; export var f64_max = retasmFunc.f64_max; export var f64_store = retasmFunc.f64_store; export var f64_call = retasmFunc.f64_call; export var f64_call_indirect = retasmFunc.f64_call_indirect; export var f64_select = retasmFunc.f64_select; export var br_if = retasmFunc.br_if; export var br_table = retasmFunc.br_table; binaryen-version_108/test/wasm2js/minified-memory.2asm.js000066400000000000000000000035131423707623100236050ustar00rootroot00000000000000 function asmFunc(env) { var memory = env.a; var buffer = memory.buffer; memory.grow = __wasm_memory_grow; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { return HEAP32[0 >> 2] | 0 | 0; } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; memory.buffer = buffer; } return oldPages; } return { "foo": $0 }; } var memasmFunc = new ArrayBuffer(65536); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, a: { buffer : memasmFunc } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/minified-memory.2asm.js.opt000066400000000000000000000034761423707623100244160ustar00rootroot00000000000000 function asmFunc(env) { var memory = env.a; var buffer = memory.buffer; memory.grow = __wasm_memory_grow; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { return HEAP32[0]; } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; memory.buffer = buffer; } return oldPages; } return { "foo": $0 }; } var memasmFunc = new ArrayBuffer(65536); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, a: { buffer : memasmFunc } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/minified-memory.wast000066400000000000000000000001441423707623100233030ustar00rootroot00000000000000(module (import "env" "a" (memory $0 1)) (func "foo" (result i32) (i32.load (i32.const 0)) ) ) binaryen-version_108/test/wasm2js/minus_minus.2asm.js000066400000000000000000000011761423707623100230640ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { return ~~- -7094.0 | 0; } function $1() { $0() | 0; } return { "func_44_invoker": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var func_44_invoker = retasmFunc.func_44_invoker; binaryen-version_108/test/wasm2js/minus_minus.2asm.js.opt000066400000000000000000000011051423707623100236550ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1() { } return { "func_44_invoker": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var func_44_invoker = retasmFunc.func_44_invoker; binaryen-version_108/test/wasm2js/minus_minus.wast000066400000000000000000000005251423707623100225620ustar00rootroot00000000000000(module (type $0 (func (result i32))) (type $1 (func)) (export "func_44_invoker" (func $1)) (func $0 (; 0 ;) (type $0) (result i32) (i32.trunc_f64_s (f64.neg (f64.const -7094) ;; negation of a negative must not be emitted as "--" in js, that will not parse ) ) ) (func $1 (; 1 ;) (type $1) (drop (call $0) ) ) ) binaryen-version_108/test/wasm2js/nested-selects.2asm.js000066400000000000000000000011671423707623100234400ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0) { $0 = $0 | 0; return (($0 | 0) < (0 | 0) ? -1 : ($0 | 0) > (0 | 0) ? 1 : 0) | 0; } return { "sign": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var sign = retasmFunc.sign; binaryen-version_108/test/wasm2js/nested-selects.2asm.js.opt000066400000000000000000000011431423707623100242330ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0) { $0 = $0 | 0; return (($0 | 0) < 0 ? -1 : ($0 | 0) > 0) | 0; } return { "sign": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var sign = retasmFunc.sign; binaryen-version_108/test/wasm2js/nested-selects.wast000066400000000000000000000005161423707623100231360ustar00rootroot00000000000000(module (func $dummy) (func (export "sign") (param $0 i32) (result i32) (select (i32.const -1) (select (i32.const 1) (i32.const 0) (i32.gt_s (local.get $0) (i32.const 0) ) ) (i32.lt_s (local.get $0) (i32.const 0) ) ) ) ) binaryen-version_108/test/wasm2js/ordering.2asm.js000066400000000000000000000041341423707623100223240ustar00rootroot00000000000000import { table } from 'env'; function asmFunc(env) { var FUNCTION_TABLE = env.table; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function main() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; FUNCTION_TABLE[foo(2 | 0) | 0 | 0](1) | 0; FUNCTION_TABLE[4 | 0](foo(3 | 0) | 0) | 0; (wasm2js_i32$1 = foo(5 | 0) | 0, wasm2js_i32$0 = bar(6 | 0) | 0 | 0), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0) | 0; FUNCTION_TABLE[8 | 0](7) | 0; baz((11 ? 9 : 10) | 0) | 0; baz((wasm2js_i32$0 = foo(12 | 0) | 0, wasm2js_i32$1 = 13, wasm2js_i32$2 = 14, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1) | 0) | 0; baz((wasm2js_i32$0 = 15, wasm2js_i32$1 = foo(16 | 0) | 0, wasm2js_i32$2 = 17, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1) | 0) | 0; baz((foo(20 | 0) | 0 ? 18 : 19) | 0) | 0; baz((wasm2js_i32$0 = foo(21 | 0) | 0, wasm2js_i32$1 = 22, wasm2js_i32$2 = foo(23 | 0) | 0, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1) | 0) | 0; baz((wasm2js_i32$0 = 24, wasm2js_i32$1 = foo(25 | 0) | 0, wasm2js_i32$2 = foo(26 | 0) | 0, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1) | 0) | 0; baz((wasm2js_i32$0 = foo(27 | 0) | 0, wasm2js_i32$1 = foo(28 | 0) | 0, wasm2js_i32$2 = 29, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1) | 0) | 0; baz((wasm2js_i32$0 = foo(30 | 0) | 0, wasm2js_i32$1 = foo(31 | 0) | 0, wasm2js_i32$2 = foo(32 | 0) | 0, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1) | 0) | 0; } function foo($0) { $0 = $0 | 0; return 1 | 0; } function bar($0) { $0 = $0 | 0; return 2 | 0; } function baz($0) { $0 = $0 | 0; return 3 | 0; } FUNCTION_TABLE[1] = foo; FUNCTION_TABLE[2] = bar; FUNCTION_TABLE[3] = baz; return { "main": main }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, table }); export var main = retasmFunc.main; binaryen-version_108/test/wasm2js/ordering.2asm.js.opt000066400000000000000000000017101423707623100231220ustar00rootroot00000000000000import { table } from 'env'; function asmFunc(env) { var FUNCTION_TABLE = env.table; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function main() { FUNCTION_TABLE[1](1) | 0; FUNCTION_TABLE[4](1) | 0; FUNCTION_TABLE[2](1) | 0; FUNCTION_TABLE[8](7) | 0; } function foo($0) { $0 = $0 | 0; return 1; } function bar($0) { $0 = $0 | 0; return 2; } function baz($0) { $0 = $0 | 0; return 3; } FUNCTION_TABLE[1] = foo; FUNCTION_TABLE[2] = bar; FUNCTION_TABLE[3] = baz; return { "main": main }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, table }); export var main = retasmFunc.main; binaryen-version_108/test/wasm2js/ordering.wast000066400000000000000000000031611423707623100220240ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (import "env" "table" (table $timport$9 7 funcref)) (elem (i32.const 1) $foo $bar $baz) (export "main" (func $main)) (func $main (drop (call_indirect (type $0) (i32.const 1) (call $foo (i32.const 2)) ) ) (drop (call_indirect (type $0) (call $foo (i32.const 3)) (i32.const 4) ) ) (drop (call_indirect (type $0) (call $foo (i32.const 5)) (call $bar (i32.const 6)) ) ) (drop (call_indirect (type $0) (i32.const 7) (i32.const 8) ) ) (drop (call $baz (select (i32.const 9) (i32.const 10) (i32.const 11) ) )) (drop (call $baz (select (call $foo (i32.const 12)) (i32.const 13) (i32.const 14) ) )) (drop (call $baz (select (i32.const 15) (call $foo (i32.const 16)) (i32.const 17) ) )) (drop (call $baz (select (i32.const 18) (i32.const 19) (call $foo (i32.const 20)) ) )) (drop (call $baz (select (call $foo (i32.const 21)) (i32.const 22) (call $foo (i32.const 23)) ) )) (drop (call $baz (select (i32.const 24) (call $foo (i32.const 25)) (call $foo (i32.const 26)) ) )) (drop (call $baz (select (call $foo (i32.const 27)) (call $foo (i32.const 28)) (i32.const 29) ) )) (drop (call $baz (select (call $foo (i32.const 30)) (call $foo (i32.const 31)) (call $foo (i32.const 32)) ) )) ) (func $foo (param i32) (result i32) (i32.const 1) ) (func $bar (param i32) (result i32) (i32.const 2) ) (func $baz (param i32) (result i32) (i32.const 3) ) ) binaryen-version_108/test/wasm2js/reinterpret.2asm.js000066400000000000000000000060631423707623100230610ustar00rootroot00000000000000 var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function wasm2js_scratch_load_f32() { return f32ScratchView[2]; } function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0) { $0 = $0 | 0; return ((wasm2js_scratch_store_f32((wasm2js_scratch_store_i32(2, $0), wasm2js_scratch_load_f32())), wasm2js_scratch_load_i32(2)) | 0) == ($0 | 0) | 0; } function $2($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0, $3$hi = 0; i64toi32_i32$0 = $0$hi; wasm2js_scratch_store_i32(0 | 0, $0 | 0); wasm2js_scratch_store_i32(1 | 0, i64toi32_i32$0 | 0); wasm2js_scratch_store_f64(+(+wasm2js_scratch_load_f64())); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $3$hi; return (wasm2js_scratch_load_i32(0 | 0) | 0 | 0) == ($0 | 0) & (i64toi32_i32$0 | 0) == ($0$hi | 0) | 0 | 0; } function legalstub$2($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10 = 0, $3 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3 = $0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0 | 0; } return { "i32_roundtrip": $1, "i64_roundtrip": legalstub$2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var i32_roundtrip = retasmFunc.i32_roundtrip; export var i64_roundtrip = retasmFunc.i64_roundtrip; binaryen-version_108/test/wasm2js/reinterpret.2asm.js.opt000066400000000000000000000030441423707623100236560ustar00rootroot00000000000000 var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $1($0) { $0 = $0 | 0; return 1; } function legalstub$2($0, $1_1) { var $2 = 0; wasm2js_scratch_store_i32(0, $0 | 0); wasm2js_scratch_store_i32(1, $1_1 | 0); wasm2js_scratch_store_f64(+wasm2js_scratch_load_f64()); $2 = wasm2js_scratch_load_i32(1) | 0; return (wasm2js_scratch_load_i32(0) | 0) == ($0 | 0) & ($1_1 | 0) == ($2 | 0); } return { "i32_roundtrip": $1, "i64_roundtrip": legalstub$2 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var i32_roundtrip = retasmFunc.i32_roundtrip; export var i64_roundtrip = retasmFunc.i64_roundtrip; binaryen-version_108/test/wasm2js/reinterpret.wast000066400000000000000000000017031423707623100225560ustar00rootroot00000000000000(module (func $dummy) (func (export "i32_roundtrip") (param $0 i32) (result i32) (i32.eq (i32.reinterpret_f32 (f32.reinterpret_i32 (local.get $0))) (local.get $0))) (func (export "i64_roundtrip") (param $0 i64) (result i32) (i64.eq (i64.reinterpret_f64 (f64.reinterpret_i64 (local.get $0))) (local.get $0))) ) (assert_return (invoke "i32_roundtrip" (i32.const 0)) (i32.const 1)) (assert_return (invoke "i32_roundtrip" (i32.const 1)) (i32.const 1)) (assert_return (invoke "i32_roundtrip" (i32.const 100)) (i32.const 1)) (assert_return (invoke "i32_roundtrip" (i32.const 10000)) (i32.const 1)) (assert_return (invoke "i64_roundtrip" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "i64_roundtrip" (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "i64_roundtrip" (i32.const 0) (i32.const 1)) (i32.const 1)) binaryen-version_108/test/wasm2js/reinterpret_scratch.2asm.js000066400000000000000000000035561423707623100245740ustar00rootroot00000000000000 var bufferView; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $0_1 = Math_fround(0); wasm2js_scratch_store_f64(+(305419896.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = (wasm2js_scratch_store_f32($0_1), wasm2js_scratch_load_i32(2)); HEAP32[i64toi32_i32$1 >> 2] = wasm2js_scratch_load_i32(0 | 0) | 0; HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0; return HEAP32[0 >> 2] | 0 | 0; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "foo": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/reinterpret_scratch.2asm.js.opt000066400000000000000000000030601423707623100253630ustar00rootroot00000000000000 var bufferView; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0() { var $0_1 = 0; wasm2js_scratch_store_f64(305419896.0); $0_1 = wasm2js_scratch_load_i32(1) | 0; HEAP32[0] = wasm2js_scratch_load_i32(0); HEAP32[1] = $0_1; return HEAP32[0]; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "foo": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var foo = retasmFunc.foo; binaryen-version_108/test/wasm2js/reinterpret_scratch.wast000066400000000000000000000005521423707623100242660ustar00rootroot00000000000000(module (memory $0 1 1) (func "foo" (result i32) (local $0 f32) (i64.store align=4 (i32.reinterpret_f32 ;; i32 0 (local.get $0) ;; f32 0 ) (i64.reinterpret_f64 ;; these two reinterprets must not interfere with (f64.const 0x12345678) ;; each other, even though both use scratch memory ) ) (i32.load (i32.const 0) ) ) ) binaryen-version_108/test/wasm2js/set_local.2asm.js000066400000000000000000000162561423707623100224700ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0() { } function $1() { } function $2() { } function $3() { } function $4($0_1) { $0_1 = $0_1 | 0; } function $5($0_1, $0$hi) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; } function $6($0_1) { $0_1 = Math_fround($0_1); } function $7($0_1) { $0_1 = +$0_1; } function $8($0_1, $0$hi, $1_1, $2_1, $3_1, $4_1) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; $1_1 = Math_fround($1_1); $2_1 = +$2_1; $3_1 = $3_1 | 0; $4_1 = $4_1 | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; } function $9($0_1, $0$hi, $1_1, $2_1, $3_1, $4_1) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; $1_1 = Math_fround($1_1); $2_1 = +$2_1; $3_1 = $3_1 | 0; $4_1 = $4_1 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0.0, $14 = 0, $15 = 0, $6$hi = 0, $10 = 0.0, $21 = 0.0, $7$hi = 0, $7_1 = 0; i64toi32_i32$0 = 0; $6$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $0_1; $10 = +(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0); i64toi32_i32$0 = $6$hi; i64toi32_i32$1 = 6; $21 = +(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0); i64toi32_i32$0 = $7$hi; i64toi32_i32$1 = $7_1; i64toi32_i32$3 = $10 + (+Math_fround(-.30000001192092896) + ($2_1 + (+(40 >>> 0) + (+(-7 | 0) + (+Math_fround(5.5) + ($21 + (+(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0) + 8.0))))))); if (Math_abs(i64toi32_i32$3) >= 1.0) { if (i64toi32_i32$3 > 0.0) { $14 = ~~Math_min(Math_floor(i64toi32_i32$3 / 4294967296.0), 4294967296.0 - 1.0) >>> 0 } else { $14 = ~~Math_ceil((i64toi32_i32$3 - +(~~i64toi32_i32$3 >>> 0 >>> 0)) / 4294967296.0) >>> 0 } $15 = $14; } else { $15 = 0 } i64toi32_i32$0 = $15; i64toi32_i32$1 = ~~i64toi32_i32$3 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function legalstub$5($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0_1; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $5(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0); } function legalstub$8($0_1, $1_1, $2_1, $3_1, $4_1, $5_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = Math_fround($2_1); $3_1 = +$3_1; $4_1 = $4_1 | 0; $5_1 = $5_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $14 = 0, $7_1 = 0, $7$hi = 0, $10$hi = 0; i64toi32_i32$0 = 0; $7_1 = $0_1; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $14 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $14 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7_1; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $14; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $8(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0, Math_fround($2_1), +$3_1, $4_1 | 0, $5_1 | 0); } function legalstub$9($0_1, $1_1, $2_1, $3_1, $4_1, $5_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = Math_fround($2_1); $3_1 = +$3_1; $4_1 = $4_1 | 0; $5_1 = $5_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $16 = 0, $17 = 0, $8_1 = 0, $8$hi = 0, $11$hi = 0, $6_1 = 0, $6$hi = 0; i64toi32_i32$0 = 0; $8_1 = $0_1; $8$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $16 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $16 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $11$hi = i64toi32_i32$1; i64toi32_i32$1 = $8$hi; i64toi32_i32$0 = $8_1; i64toi32_i32$2 = $11$hi; i64toi32_i32$3 = $16; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $9(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0, Math_fround($2_1), +$3_1, $4_1 | 0, $5_1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $6_1 = i64toi32_i32$2; $6$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $17 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $17 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($17 | 0); i64toi32_i32$2 = $6$hi; return $6_1 | 0; } return { "type_local_i32": $0, "type_local_i64": $1, "type_local_f32": $2, "type_local_f64": $3, "type_param_i32": $4, "type_param_i64": legalstub$5, "type_param_f32": $6, "type_param_f64": $7, "type_mixed": legalstub$8, "write": legalstub$9 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var type_local_i32 = retasmFunc.type_local_i32; export var type_local_i64 = retasmFunc.type_local_i64; export var type_local_f32 = retasmFunc.type_local_f32; export var type_local_f64 = retasmFunc.type_local_f64; export var type_param_i32 = retasmFunc.type_param_i32; export var type_param_i64 = retasmFunc.type_param_i64; export var type_param_f32 = retasmFunc.type_param_f32; export var type_param_f64 = retasmFunc.type_param_f64; export var type_mixed = retasmFunc.type_mixed; export var write = retasmFunc.write; binaryen-version_108/test/wasm2js/sign_ext.2asm.js000066400000000000000000000013061423707623100223310ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x) { x = x | 0; return x << 24 >> 24 | 0; } function $1(x) { x = x | 0; return x << 16 >> 16 | 0; } return { "test8": $0, "test16": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var test8 = retasmFunc.test8; export var test16 = retasmFunc.test16; binaryen-version_108/test/wasm2js/sign_ext.2asm.js.opt000066400000000000000000000013261423707623100231340ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0($0_1) { $0_1 = $0_1 | 0; return $0_1 << 24 >> 24; } function $1($0_1) { $0_1 = $0_1 | 0; return $0_1 << 16 >> 16; } return { "test8": $0, "test16": $1 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var test8 = retasmFunc.test8; export var test16 = retasmFunc.test16; binaryen-version_108/test/wasm2js/sign_ext.wast000066400000000000000000000002621423707623100220320ustar00rootroot00000000000000(module (func "test8" (param $x i32) (result i32) (i32.extend8_s (local.get $x)) ) (func "test16" (param $x i32) (result i32) (i32.extend16_s (local.get $x)) ) ) binaryen-version_108/test/wasm2js/stack-modified.2asm.js000066400000000000000000000503051423707623100233770ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$1$hi = 0, i64toi32_i32$5 = 0, var$1 = 0, var$2$hi = 0, i64toi32_i32$1 = 0, var$2 = 0; i64toi32_i32$0 = var$0$hi; var$1 = var$0; var$1$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; var$2 = 1; var$2$hi = i64toi32_i32$0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { label$5 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; i64toi32_i32$0 = var$2$hi; i64toi32_i32$0 = __wasm_i64_mul(var$1 | 0, i64toi32_i32$2 | 0, var$2 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; var$2 = i64toi32_i32$0; var$2$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$0 = 0; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; var$1 = i64toi32_i32$3 - i64toi32_i32$1 | 0; var$1$hi = i64toi32_i32$5; } } continue label$2; }; } i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } function $1(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$1$hi = 0, i64toi32_i32$5 = 0, var$1 = 0, var$2$hi = 0, i64toi32_i32$1 = 0, var$2 = 0; i64toi32_i32$0 = var$0$hi; var$1 = var$0; var$1$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; var$2 = 1; var$2$hi = i64toi32_i32$0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { block : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; i64toi32_i32$0 = var$2$hi; i64toi32_i32$0 = __wasm_i64_mul(var$1 | 0, i64toi32_i32$2 | 0, var$2 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; var$2 = i64toi32_i32$0; var$2$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$0 = 0; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; var$1 = i64toi32_i32$3 - i64toi32_i32$1 | 0; var$1$hi = i64toi32_i32$5; } } continue label$2; }; } i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } function $2(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$1$hi = 0, i64toi32_i32$5 = 0, var$1 = 0, var$2$hi = 0, i64toi32_i32$1 = 0, var$2 = 0; i64toi32_i32$0 = var$0$hi; var$1 = var$0; var$1$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; var$2 = 1; var$2$hi = i64toi32_i32$0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { block : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; i64toi32_i32$0 = var$2$hi; i64toi32_i32$0 = __wasm_i64_mul(var$1 | 0, i64toi32_i32$2 | 0, var$2 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; var$2 = i64toi32_i32$0; var$2$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$0 = 0; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; var$1 = i64toi32_i32$3 - i64toi32_i32$1 | 0; var$1$hi = i64toi32_i32$5; } } continue label$2; }; } i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } function $3(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$1$hi = 0, i64toi32_i32$5 = 0, var$1 = 0, var$2$hi = 0, i64toi32_i32$1 = 0, var$2 = 0; i64toi32_i32$0 = var$0$hi; var$1 = var$0; var$1$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; var$2 = 1; var$2$hi = i64toi32_i32$0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { block : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; i64toi32_i32$0 = var$2$hi; i64toi32_i32$0 = __wasm_i64_mul(var$1 | 0, i64toi32_i32$2 | 0, var$2 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; var$2 = i64toi32_i32$0; var$2$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$0 = 0; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; var$1 = i64toi32_i32$3 - i64toi32_i32$1 | 0; var$1$hi = i64toi32_i32$5; } } continue label$2; }; } i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } function $4(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$1$hi = 0, i64toi32_i32$5 = 0, var$1 = 0, var$2$hi = 0, i64toi32_i32$1 = 0, var$2 = 0; i64toi32_i32$0 = var$0$hi; var$1 = var$0; var$1$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; var$2 = 1; var$2$hi = i64toi32_i32$0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { block : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; i64toi32_i32$0 = var$2$hi; i64toi32_i32$0 = __wasm_i64_mul(var$1 | 0, i64toi32_i32$2 | 0, var$2 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; var$2 = i64toi32_i32$0; var$2$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$0 = 0; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; var$1 = i64toi32_i32$3 - i64toi32_i32$1 | 0; var$1$hi = i64toi32_i32$5; } } continue label$2; }; } i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } function legalstub$0($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $0(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$1($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $1(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$2($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $2(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$3($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $3(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$4($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $4(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, var$2 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, var$3 = 0, var$4 = 0, var$5 = 0, $21 = 0, $22 = 0, var$6 = 0, $24 = 0, $17 = 0, $18 = 0, $23 = 0, $29 = 0, $45 = 0, $56$hi = 0, $62$hi = 0; i64toi32_i32$0 = var$1$hi; var$2 = var$1; var$4 = var$2 >>> 16 | 0; i64toi32_i32$0 = var$0$hi; var$3 = var$0; var$5 = var$3 >>> 16 | 0; $17 = Math_imul(var$4, var$5); $18 = var$2; i64toi32_i32$2 = var$3; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $21 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } $23 = $17 + Math_imul($18, $21) | 0; i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $22 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $22 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } $29 = $23 + Math_imul($22, var$3) | 0; var$2 = var$2 & 65535 | 0; var$3 = var$3 & 65535 | 0; var$6 = Math_imul(var$2, var$3); var$2 = (var$6 >>> 16 | 0) + Math_imul(var$2, var$5) | 0; $45 = $29 + (var$2 >>> 16 | 0) | 0; var$2 = (var$2 & 65535 | 0) + Math_imul(var$4, var$3) | 0; i64toi32_i32$2 = 0; i64toi32_i32$1 = $45 + (var$2 >>> 16 | 0) | 0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $24 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $24 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $56$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; $62$hi = i64toi32_i32$0; i64toi32_i32$0 = $56$hi; i64toi32_i32$2 = $24; i64toi32_i32$1 = $62$hi; i64toi32_i32$3 = var$2 << 16 | 0 | (var$6 & 65535 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; i64toi32_i32$2 = i64toi32_i32$2 | i64toi32_i32$3 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } function __wasm_i64_mul(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } return { "fac_expr": legalstub$0, "fac_stack": legalstub$1, "fac_stack_raw": legalstub$2, "fac_mixed": legalstub$3, "fac_mixed_raw": legalstub$4 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var fac_expr = retasmFunc.fac_expr; export var fac_stack = retasmFunc.fac_stack; export var fac_stack_raw = retasmFunc.fac_stack_raw; export var fac_mixed = retasmFunc.fac_mixed; export var fac_mixed_raw = retasmFunc.fac_mixed_raw; binaryen-version_108/test/wasm2js/stack-modified.2asm.js.opt000066400000000000000000000033311423707623100241750ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function legalstub$0($0, $1) { var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; $4 = $1; $2 = 1; while (1) { if ($0 | $4) { $1 = $2 >>> 16 | 0; $3 = $0 >>> 16 | 0; $9 = Math_imul($1, $3); $5 = $2 & 65535; $6 = $0 & 65535; $7 = Math_imul($5, $6); $3 = ($7 >>> 16 | 0) + Math_imul($3, $5) | 0; $1 = ($3 & 65535) + Math_imul($1, $6) | 0; i64toi32_i32$HIGH_BITS = (Math_imul($2, $4) + $9 | 0) + Math_imul($0, $8) + ($3 >>> 16) + ($1 >>> 16) | 0; $2 = $7 & 65535 | $1 << 16; $8 = i64toi32_i32$HIGH_BITS; $1 = $0; $0 = $1 - 1 | 0; $4 = $4 - !$1 | 0; continue; } break; }; i64toi32_i32$HIGH_BITS = $8; $0 = $2; setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0; } return { "fac_expr": legalstub$0, "fac_stack": legalstub$0, "fac_stack_raw": legalstub$0, "fac_mixed": legalstub$0, "fac_mixed_raw": legalstub$0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var fac_expr = retasmFunc.fac_expr; export var fac_stack = retasmFunc.fac_stack; export var fac_stack_raw = retasmFunc.fac_stack_raw; export var fac_mixed = retasmFunc.fac_mixed; export var fac_mixed_raw = retasmFunc.fac_mixed_raw; binaryen-version_108/test/wasm2js/stack-modified.wast000066400000000000000000000067141423707623100231050ustar00rootroot00000000000000(module (type $0 (func (param i64) (result i64))) (export "fac-expr" (func $0)) (export "fac-stack" (func $1)) (export "fac-stack-raw" (func $2)) (export "fac-mixed" (func $3)) (export "fac-mixed-raw" (func $4)) (func $0 (; 0 ;) (type $0) (param $var$0 i64) (result i64) (local $var$1 i64) (local $var$2 i64) (local.set $var$1 (local.get $var$0) ) (local.set $var$2 (i64.const 1) ) (block $label$1 (loop $label$2 (if (i64.eq (local.get $var$1) (i64.const 0) ) (br $label$1) (block $label$5 (local.set $var$2 (i64.mul (local.get $var$1) (local.get $var$2) ) ) (local.set $var$1 (i64.sub (local.get $var$1) (i64.const 1) ) ) ) ) (br $label$2) ) ) (local.get $var$2) ) (func $1 (; 1 ;) (type $0) (param $var$0 i64) (result i64) (local $var$1 i64) (local $var$2 i64) (local.set $var$1 (local.get $var$0) ) (local.set $var$2 (i64.const 1) ) (block $label$1 (loop $label$2 (if (i64.eq (local.get $var$1) (i64.const 0) ) (br $label$1) (block (local.set $var$2 (i64.mul (local.get $var$1) (local.get $var$2) ) ) (local.set $var$1 (i64.sub (local.get $var$1) (i64.const 1) ) ) ) ) (br $label$2) ) ) (local.get $var$2) ) (func $2 (; 2 ;) (type $0) (param $var$0 i64) (result i64) (local $var$1 i64) (local $var$2 i64) (local.set $var$1 (local.get $var$0) ) (local.set $var$2 (i64.const 1) ) (block $label$1 (loop $label$2 (if (i64.eq (local.get $var$1) (i64.const 0) ) (br $label$1) (block (local.set $var$2 (i64.mul (local.get $var$1) (local.get $var$2) ) ) (local.set $var$1 (i64.sub (local.get $var$1) (i64.const 1) ) ) ) ) (br $label$2) ) ) (local.get $var$2) ) (func $3 (; 3 ;) (type $0) (param $var$0 i64) (result i64) (local $var$1 i64) (local $var$2 i64) (local.set $var$1 (local.get $var$0) ) (local.set $var$2 (i64.const 1) ) (block $label$1 (loop $label$2 (if (i64.eq (local.get $var$1) (i64.const 0) ) (br $label$1) (block (local.set $var$2 (i64.mul (local.get $var$1) (local.get $var$2) ) ) (local.set $var$1 (i64.sub (local.get $var$1) (i64.const 1) ) ) ) ) (br $label$2) ) ) (local.get $var$2) ) (func $4 (; 4 ;) (type $0) (param $var$0 i64) (result i64) (local $var$1 i64) (local $var$2 i64) (local.set $var$1 (local.get $var$0) ) (local.set $var$2 (i64.const 1) ) (block $label$1 (loop $label$2 (if (i64.eq (local.get $var$1) (i64.const 0) ) (br $label$1) (block (local.set $var$2 (i64.mul (local.get $var$1) (local.get $var$2) ) ) (local.set $var$1 (i64.sub (local.get $var$1) (i64.const 1) ) ) ) ) (br $label$2) ) ) (local.get $var$2) ) ) (assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776)) (assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776)) binaryen-version_108/test/wasm2js/start_func.2asm.js000066400000000000000000000032141423707623100226610ustar00rootroot00000000000000 function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function foo() { HEAP32[1 >> 2] = 2; } foo(); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; } return oldPages; } return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/start_func.2asm.js.opt000066400000000000000000000032071423707623100234640ustar00rootroot00000000000000 function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function foo() { HEAP32[0] = 2; } foo(); function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; } return oldPages; } return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/start_func.wast000066400000000000000000000001431423707623100223600ustar00rootroot00000000000000(module (memory 1) (start $foo) (func $foo (i32.store (i32.const 1) (i32.const 2)) ) ) binaryen-version_108/test/wasm2js/switch.2asm.js000066400000000000000000000105031423707623100220110ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0(i) { i = i | 0; var j = 0; j = 100; switch_ : { $7 : { switch (i | 0) { case 0: return i | 0; case 1: case 2: case 3: j = 0 - i | 0; break switch_; case 4: break switch_; case 5: j = 101; break switch_; case 6: j = 101; default: j = 102; break; case 7: break $7; }; } } return j | 0; } function $1(i, i$hi) { i = i | 0; i$hi = i$hi | 0; var i64toi32_i32$5 = 0, i64toi32_i32$2 = 0, $7 = 0, $7$hi = 0, j = 0, j$hi = 0; j = 100; j$hi = 0; switch_ : { $7 : { switch (i | 0) { case 0: i64toi32_i32$HIGH_BITS = i$hi; return i | 0; case 1: case 2: case 3: i64toi32_i32$2 = 0; i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i >>> 0) + i$hi | 0; i64toi32_i32$5 = 0 - i64toi32_i32$5 | 0; $7 = i64toi32_i32$2 - i | 0; $7$hi = i64toi32_i32$5; break switch_; case 6: i64toi32_i32$5 = 0; j = 101; j$hi = i64toi32_i32$5; case 5: case 4: default: i64toi32_i32$5 = j$hi; $7 = j; $7$hi = i64toi32_i32$5; break switch_; case 7: break $7; }; } i64toi32_i32$5 = -1; $7 = -5; $7$hi = i64toi32_i32$5; } i64toi32_i32$5 = $7$hi; i64toi32_i32$2 = $7; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$2 | 0; } function $2(i) { i = i | 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; $2 : { $1 : { $0 : { default_ : { $5 = Math_imul(2, i); $6 = $5; $7 = $5; $8 = $5; $9 = $5; switch (3 & i | 0 | 0) { case 0: break $0; case 1: break $1; case 2: break $2; default: break default_; }; } $6 = 1e3 + $9 | 0; } $7 = 100 + $6 | 0; } $8 = 10 + $7 | 0; } return $8 | 0; } function $3() { return 1 | 0; } function legalstub$1($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $1(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } return { "stmt": $0, "expr": legalstub$1, "arg": $2, "corner": $3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var stmt = retasmFunc.stmt; export var expr = retasmFunc.expr; export var arg = retasmFunc.arg; export var corner = retasmFunc.corner; binaryen-version_108/test/wasm2js/tee_local.2asm.js000066400000000000000000000261101423707623100224400ustar00rootroot00000000000000import { setTempRet0 } from 'env'; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0() { return 0 | 0; } function $1() { var i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return 0 | 0; } function $2() { return Math_fround(Math_fround(0.0)); } function $3() { return +(0.0); } function $4($0_1) { $0_1 = $0_1 | 0; return 10 | 0; } function $5($0_1, $0$hi) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return 11 | 0; } function $6($0_1) { $0_1 = Math_fround($0_1); return Math_fround(Math_fround(11.100000381469727)); } function $7($0_1) { $0_1 = +$0_1; return +(12.2); } function $8($0_1, $0$hi, $1_1, $2_1, $3_1, $4_1) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; $1_1 = Math_fround($1_1); $2_1 = +$2_1; $3_1 = $3_1 | 0; $4_1 = $4_1 | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; } function $9($0_1, $0$hi, $1_1, $2_1, $3_1, $4_1) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; $1_1 = Math_fround($1_1); $2_1 = +$2_1; $3_1 = $3_1 | 0; $4_1 = $4_1 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0.0, $5_1 = Math_fround(0), $6_1 = 0, $8_1 = 0.0, $17 = 0, $18 = 0, $6$hi = 0, $16 = 0.0, $27 = 0.0, $7$hi = 0, $7_1 = 0; $1_1 = Math_fround(-.30000001192092896); $3_1 = 40; $4_1 = -7; $5_1 = Math_fround(5.5); i64toi32_i32$0 = 0; $6_1 = 6; $6$hi = i64toi32_i32$0; $8_1 = 8.0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $0_1; $16 = +(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0); i64toi32_i32$0 = $6$hi; i64toi32_i32$1 = $6_1; $27 = +(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0); i64toi32_i32$0 = $7$hi; i64toi32_i32$1 = $7_1; i64toi32_i32$3 = $16 + (+$1_1 + ($2_1 + (+($3_1 >>> 0) + (+($4_1 | 0) + (+$5_1 + ($27 + (+(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0) + $8_1))))))); if (Math_abs(i64toi32_i32$3) >= 1.0) { if (i64toi32_i32$3 > 0.0) { $17 = ~~Math_min(Math_floor(i64toi32_i32$3 / 4294967296.0), 4294967296.0 - 1.0) >>> 0 } else { $17 = ~~Math_ceil((i64toi32_i32$3 - +(~~i64toi32_i32$3 >>> 0 >>> 0)) / 4294967296.0) >>> 0 } $18 = $17; } else { $18 = 0 } i64toi32_i32$0 = $18; i64toi32_i32$1 = ~~i64toi32_i32$3 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function $10($0_1, $0$hi, $1_1, $2_1, $3_1, $4_1) { $0_1 = $0_1 | 0; $0$hi = $0$hi | 0; $1_1 = Math_fround($1_1); $2_1 = +$2_1; $3_1 = $3_1 | 0; $4_1 = $4_1 | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $10_1 = 0.0, $21 = 0.0; i64toi32_i32$0 = 0; i64toi32_i32$1 = 1; $10_1 = +(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0); i64toi32_i32$0 = 0; i64toi32_i32$1 = 6; $21 = +(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0); i64toi32_i32$0 = 0; i64toi32_i32$1 = 0; return +($10_1 + (+Math_fround(2.0) + (3.3 + (+(4 >>> 0) + (+(5 | 0) + (+Math_fround(5.5) + ($21 + (+(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0) + 8.0)))))))); } function legalstub$1() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $1() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } function legalstub$5($0_1, $1_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $12 = 0, $13 = 0, $4_1 = 0, $4$hi = 0, $7$hi = 0, $2_1 = 0, $2$hi = 0; i64toi32_i32$0 = 0; $4_1 = $0_1; $4$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $7$hi = i64toi32_i32$1; i64toi32_i32$1 = $4$hi; i64toi32_i32$0 = $4_1; i64toi32_i32$2 = $7$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $5(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $2_1 = i64toi32_i32$2; $2$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $13 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $13 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($13 | 0); i64toi32_i32$2 = $2$hi; return $2_1 | 0; } function legalstub$8($0_1, $1_1, $2_1, $3_1, $4_1, $5_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = Math_fround($2_1); $3_1 = +$3_1; $4_1 = $4_1 | 0; $5_1 = $5_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $14 = 0, $7_1 = 0, $7$hi = 0, $10$hi = 0; i64toi32_i32$0 = 0; $7_1 = $0_1; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $14 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $14 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7_1; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $14; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $8(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0, Math_fround($2_1), +$3_1, $4_1 | 0, $5_1 | 0); } function legalstub$9($0_1, $1_1, $2_1, $3_1, $4_1, $5_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = Math_fround($2_1); $3_1 = +$3_1; $4_1 = $4_1 | 0; $5_1 = $5_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $16 = 0, $17 = 0, $8_1 = 0, $8$hi = 0, $11$hi = 0, $6_1 = 0, $6$hi = 0; i64toi32_i32$0 = 0; $8_1 = $0_1; $8$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $16 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $16 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $11$hi = i64toi32_i32$1; i64toi32_i32$1 = $8$hi; i64toi32_i32$0 = $8_1; i64toi32_i32$2 = $11$hi; i64toi32_i32$3 = $16; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = $9(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0, Math_fround($2_1), +$3_1, $4_1 | 0, $5_1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; $6_1 = i64toi32_i32$2; $6$hi = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $17 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $17 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($17 | 0); i64toi32_i32$2 = $6$hi; return $6_1 | 0; } function legalstub$10($0_1, $1_1, $2_1, $3_1, $4_1, $5_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = Math_fround($2_1); $3_1 = +$3_1; $4_1 = $4_1 | 0; $5_1 = $5_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $14 = 0, $7_1 = 0, $7$hi = 0, $10$hi = 0; i64toi32_i32$0 = 0; $7_1 = $0_1; $7$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $14 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $14 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $10$hi = i64toi32_i32$1; i64toi32_i32$1 = $7$hi; i64toi32_i32$0 = $7_1; i64toi32_i32$2 = $10$hi; i64toi32_i32$3 = $14; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return +(+$10(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0, Math_fround($2_1), +$3_1, $4_1 | 0, $5_1 | 0)); } return { "type_local_i32": $0, "type_local_i64": legalstub$1, "type_local_f32": $2, "type_local_f64": $3, "type_param_i32": $4, "type_param_i64": legalstub$5, "type_param_f32": $6, "type_param_f64": $7, "type_mixed": legalstub$8, "write": legalstub$9, "result": legalstub$10 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var type_local_i32 = retasmFunc.type_local_i32; export var type_local_i64 = retasmFunc.type_local_i64; export var type_local_f32 = retasmFunc.type_local_f32; export var type_local_f64 = retasmFunc.type_local_f64; export var type_param_i32 = retasmFunc.type_param_i32; export var type_param_i64 = retasmFunc.type_param_i64; export var type_param_f32 = retasmFunc.type_param_f32; export var type_param_f64 = retasmFunc.type_param_f64; export var type_mixed = retasmFunc.type_mixed; export var write = retasmFunc.write; export var result = retasmFunc.result; binaryen-version_108/test/wasm2js/traps.2asm.js000066400000000000000000001733171423707623100216560ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x, y) { x = x | 0; y = y | 0; (x | 0) / (y | 0) | 0; } function $1(x, y) { x = x | 0; y = y | 0; (x >>> 0) / (y >>> 0) | 0; } function $2(x, x$hi, y, y$hi) { x = x | 0; x$hi = x$hi | 0; y = y | 0; y$hi = y$hi | 0; __wasm_i64_sdiv(x | 0, x$hi | 0, y | 0, y$hi | 0) | 0; } function $3(x, x$hi, y, y$hi) { x = x | 0; x$hi = x$hi | 0; y = y | 0; y$hi = y$hi | 0; __wasm_i64_udiv(x | 0, x$hi | 0, y | 0, y$hi | 0) | 0; } function legalstub$2($0_1, $1_1, $2_1, $3_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5 = 0, $5$hi = 0, $8$hi = 0, $9 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5 = $0_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; $2($9 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0); } function legalstub$3($0_1, $1_1, $2_1, $3_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5 = 0, $5$hi = 0, $8$hi = 0, $9 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5 = $0_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; $3($9 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0); } function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $21; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$2 = $22; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$5 = var$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17 = i64toi32_i32$1; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$1$hi; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = 0; i64toi32_i32$3 = 63; i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; } var$0 = $23; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = $17$hi; i64toi32_i32$1 = $17; i64toi32_i32$4 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; $23$hi = i64toi32_i32$4; i64toi32_i32$4 = var$0$hi; i64toi32_i32$4 = $23$hi; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; i64toi32_i32$2 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$2 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "no_dce_i32_div_s": $0, "no_dce_i32_div_u": $1, "no_dce_i64_div_s": legalstub$2, "no_dce_i64_div_u": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var no_dce_i32_div_s = retasmFunc.no_dce_i32_div_s; export var no_dce_i32_div_u = retasmFunc.no_dce_i32_div_u; export var no_dce_i64_div_s = retasmFunc.no_dce_i64_div_s; export var no_dce_i64_div_u = retasmFunc.no_dce_i64_div_u; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var __wasm_intrinsics_temp_i64 = 0; var __wasm_intrinsics_temp_i64$hi = 0; var i64toi32_i32$HIGH_BITS = 0; function $0(x, y) { x = x | 0; y = y | 0; (x | 0) % (y | 0) | 0; } function $1(x, y) { x = x | 0; y = y | 0; (x >>> 0) % (y >>> 0) | 0; } function $2(x, x$hi, y, y$hi) { x = x | 0; x$hi = x$hi | 0; y = y | 0; y$hi = y$hi | 0; __wasm_i64_srem(x | 0, x$hi | 0, y | 0, y$hi | 0) | 0; } function $3(x, x$hi, y, y$hi) { x = x | 0; x$hi = x$hi | 0; y = y | 0; y$hi = y$hi | 0; __wasm_i64_urem(x | 0, x$hi | 0, y | 0, y$hi | 0) | 0; } function legalstub$2($0_1, $1_1, $2_1, $3_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5 = 0, $5$hi = 0, $8$hi = 0, $9 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5 = $0_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; $2($9 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0); } function legalstub$3($0_1, $1_1, $2_1, $3_1) { $0_1 = $0_1 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5 = 0, $5$hi = 0, $8$hi = 0, $9 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5 = $0_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; $3($9 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0); } function _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, var$2 = 0, $20 = 0, $21 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17$hi = 0, $19$hi = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; $20 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $20; var$2$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = var$2$hi; i64toi32_i32$0 = var$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $7$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $7$hi; i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$0 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; $9 = i64toi32_i32$4; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = var$1$hi; i64toi32_i32$2 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 63; i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; $21 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; } else { i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; $21 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; } var$0 = $21; var$0$hi = i64toi32_i32$1; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; $14$hi = i64toi32_i32$2; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$2 = $14$hi; i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; i64toi32_i32$5 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; $16$hi = i64toi32_i32$4; i64toi32_i32$4 = $9$hi; i64toi32_i32$1 = $16$hi; i64toi32_i32$1 = __wasm_i64_urem($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; $17$hi = i64toi32_i32$4; i64toi32_i32$4 = var$2$hi; i64toi32_i32$4 = $17$hi; i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$3 = var$2; i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; $19$hi = i64toi32_i32$1; i64toi32_i32$1 = var$2$hi; i64toi32_i32$1 = $19$hi; i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; i64toi32_i32$2 = var$2$hi; i64toi32_i32$5 = i64toi32_i32$4 - i64toi32_i32$3 | 0; i64toi32_i32$6 = i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0; i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$0 | 0; i64toi32_i32$4 = i64toi32_i32$5; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, var$8$hi = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, var$7$hi = 0, $49 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0; label$1 : { label$2 : { label$3 : { label$4 : { label$5 : { label$6 : { label$7 : { label$8 : { label$9 : { label$10 : { label$11 : { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $37 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; $37 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$2 = $37; if (var$2) { block : { i64toi32_i32$1 = var$1$hi; var$3 = var$1; if (!var$3) { break label$11 } i64toi32_i32$1 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $38 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; } var$4 = $38; if (!var$4) { break label$9 } var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; if (var$2 >>> 0 <= 31 >>> 0) { break label$8 } break label$2; } } i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$0 = 1; i64toi32_i32$3 = 0; if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) { break label$2 } i64toi32_i32$1 = var$0$hi; var$2 = var$0; i64toi32_i32$1 = var$1$hi; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; __wasm_intrinsics_temp_i64 = var$0 - Math_imul(var$2, var$3) | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$2; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } i64toi32_i32$2 = var$1$hi; i64toi32_i32$3 = var$1; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $39 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } var$3 = $39; i64toi32_i32$1 = var$0$hi; if (!var$0) { break label$7 } if (!var$3) { break label$6 } var$4 = var$3 + -1 | 0; if (var$4 & var$3 | 0) { break label$6 } i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4 & var$2 | 0; i64toi32_i32$3 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $40 = 0; } else { i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $40 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $63$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$1 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = -1; i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; $65$hi = i64toi32_i32$2; i64toi32_i32$2 = $63$hi; i64toi32_i32$3 = $40; i64toi32_i32$1 = $65$hi; i64toi32_i32$0 = $65; i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; __wasm_intrinsics_temp_i64 = i64toi32_i32$3 | i64toi32_i32$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } } var$4 = var$3 + -1 | 0; if (!(var$4 & var$3 | 0)) { break label$5 } var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; var$3 = 0 - var$2 | 0; break label$3; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; break label$3; } var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$3 = 0; i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 32; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $41 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } __wasm_intrinsics_temp_i64 = $41; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$1; i64toi32_i32$1 = 0; i64toi32_i32$2 = var$4; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; } var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; if (var$2 >>> 0 < 31 >>> 0) { break label$4 } break label$2; } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; __wasm_intrinsics_temp_i64 = var$4 & var$0 | 0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$2; if ((var$3 | 0) == (1 | 0)) { break label$1 } i64toi32_i32$2 = var$0$hi; i64toi32_i32$2 = 0; $120$hi = i64toi32_i32$2; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$1 = $120$hi; i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $42 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; $42 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; } i64toi32_i32$3 = $42; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$3 | 0; } var$3 = 63 - var$2 | 0; var$2 = var$2 + 1 | 0; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$3 = 0; $129$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = $129$hi; i64toi32_i32$0 = var$2 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = 0; $43 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } var$5 = $43; var$5$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$1 = 0; $134$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = $134$hi; i64toi32_i32$0 = var$3 & 63 | 0; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; $44 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; $44 = i64toi32_i32$3 << i64toi32_i32$4 | 0; } var$0 = $44; var$0$hi = i64toi32_i32$2; label$13 : { if (var$2) { block3 : { i64toi32_i32$2 = var$1$hi; i64toi32_i32$1 = var$1; i64toi32_i32$3 = -1; i64toi32_i32$0 = -1; i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } var$8 = i64toi32_i32$4; var$8$hi = i64toi32_i32$5; label$15 : while (1) { i64toi32_i32$5 = var$5$hi; i64toi32_i32$2 = var$5; i64toi32_i32$1 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; $45 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; $45 = i64toi32_i32$2 << i64toi32_i32$3 | 0; } $140 = $45; $140$hi = i64toi32_i32$1; i64toi32_i32$1 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = 0; $46 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; } else { i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; $46 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; } $142$hi = i64toi32_i32$2; i64toi32_i32$2 = $140$hi; i64toi32_i32$1 = $140; i64toi32_i32$5 = $142$hi; i64toi32_i32$0 = $46; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; var$5$hi = i64toi32_i32$5; $144 = var$5; $144$hi = i64toi32_i32$5; i64toi32_i32$5 = var$8$hi; i64toi32_i32$5 = var$5$hi; i64toi32_i32$5 = var$8$hi; i64toi32_i32$2 = var$8; i64toi32_i32$1 = var$5$hi; i64toi32_i32$0 = var$5; i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$5 = i64toi32_i32$3; i64toi32_i32$2 = 0; i64toi32_i32$0 = 63; i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; $47 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; } else { i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; $47 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; } var$6 = $47; var$6$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$6$hi; i64toi32_i32$4 = var$6; i64toi32_i32$5 = var$1$hi; i64toi32_i32$0 = var$1; i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; $151$hi = i64toi32_i32$5; i64toi32_i32$5 = $144$hi; i64toi32_i32$2 = $144; i64toi32_i32$4 = $151$hi; i64toi32_i32$0 = $151; i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; var$5 = i64toi32_i32$1; var$5$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $48 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $48 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $154$hi = i64toi32_i32$2; i64toi32_i32$2 = var$7$hi; i64toi32_i32$2 = $154$hi; i64toi32_i32$3 = $48; i64toi32_i32$5 = var$7$hi; i64toi32_i32$0 = var$7; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; var$0$hi = i64toi32_i32$5; i64toi32_i32$5 = var$6$hi; i64toi32_i32$2 = var$6; i64toi32_i32$3 = 0; i64toi32_i32$0 = 1; i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; var$6$hi = i64toi32_i32$3; var$7 = var$6; var$7$hi = i64toi32_i32$3; var$2 = var$2 + -1 | 0; if (var$2) { continue label$15 } break label$15; }; break label$13; } } } i64toi32_i32$3 = var$5$hi; __wasm_intrinsics_temp_i64 = var$5; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$2 = 0; i64toi32_i32$0 = 1; i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; $49 = 0; } else { i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; } $165$hi = i64toi32_i32$2; i64toi32_i32$2 = var$6$hi; i64toi32_i32$2 = $165$hi; i64toi32_i32$3 = $49; i64toi32_i32$5 = var$6$hi; i64toi32_i32$0 = var$6; i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$5; return i64toi32_i32$3 | 0; } i64toi32_i32$3 = var$0$hi; __wasm_intrinsics_temp_i64 = var$0; __wasm_intrinsics_temp_i64$hi = i64toi32_i32$3; i64toi32_i32$3 = 0; var$0 = 0; var$0$hi = i64toi32_i32$3; } i64toi32_i32$3 = var$0$hi; i64toi32_i32$5 = var$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } function __wasm_i64_srem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_i64_urem(var$0, var$0$hi, var$1, var$1$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var$1 = var$1 | 0; var$1$hi = var$1$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = var$0$hi; i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$1 = var$1$hi; i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; i64toi32_i32$0 = __wasm_intrinsics_temp_i64$hi; i64toi32_i32$1 = __wasm_intrinsics_temp_i64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } return { "no_dce_i32_rem_s": $0, "no_dce_i32_rem_u": $1, "no_dce_i64_rem_s": legalstub$2, "no_dce_i64_rem_u": legalstub$3 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var no_dce_i32_rem_s = retasmFunc.no_dce_i32_rem_s; export var no_dce_i32_rem_u = retasmFunc.no_dce_i32_rem_u; export var no_dce_i64_rem_s = retasmFunc.no_dce_i64_rem_s; export var no_dce_i64_rem_u = retasmFunc.no_dce_i64_rem_u; function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(x) { x = Math_fround(x); ~~x; } function $1(x) { x = Math_fround(x); ~~x >>> 0; } function $2(x) { x = +x; ~~x; } function $3(x) { x = +x; ~~x >>> 0; } function $4(x) { x = Math_fround(x); var i64toi32_i32$0 = Math_fround(0), $2_1 = 0, $3_1 = 0; i64toi32_i32$0 = x; if (Math_fround(Math_abs(i64toi32_i32$0)) >= Math_fround(1.0)) { if (i64toi32_i32$0 > Math_fround(0.0)) { $2_1 = ~~Math_fround(Math_min(Math_fround(Math_floor(Math_fround(i64toi32_i32$0 / Math_fround(4294967296.0)))), Math_fround(Math_fround(4294967296.0) - Math_fround(1.0)))) >>> 0 } else { $2_1 = ~~Math_fround(Math_ceil(Math_fround(Math_fround(i64toi32_i32$0 - Math_fround(~~i64toi32_i32$0 >>> 0 >>> 0)) / Math_fround(4294967296.0)))) >>> 0 } $3_1 = $2_1; } else { $3_1 = 0 } ~~i64toi32_i32$0 >>> 0; } function $5(x) { x = Math_fround(x); var i64toi32_i32$0 = Math_fround(0), $2_1 = 0, $3_1 = 0; i64toi32_i32$0 = x; if (Math_fround(Math_abs(i64toi32_i32$0)) >= Math_fround(1.0)) { if (i64toi32_i32$0 > Math_fround(0.0)) { $2_1 = ~~Math_fround(Math_min(Math_fround(Math_floor(Math_fround(i64toi32_i32$0 / Math_fround(4294967296.0)))), Math_fround(Math_fround(4294967296.0) - Math_fround(1.0)))) >>> 0 } else { $2_1 = ~~Math_fround(Math_ceil(Math_fround(Math_fround(i64toi32_i32$0 - Math_fround(~~i64toi32_i32$0 >>> 0 >>> 0)) / Math_fround(4294967296.0)))) >>> 0 } $3_1 = $2_1; } else { $3_1 = 0 } ~~i64toi32_i32$0 >>> 0; } function $6(x) { x = +x; var i64toi32_i32$0 = 0.0, $2_1 = 0, $3_1 = 0; i64toi32_i32$0 = x; if (Math_abs(i64toi32_i32$0) >= 1.0) { if (i64toi32_i32$0 > 0.0) { $2_1 = ~~Math_min(Math_floor(i64toi32_i32$0 / 4294967296.0), 4294967296.0 - 1.0) >>> 0 } else { $2_1 = ~~Math_ceil((i64toi32_i32$0 - +(~~i64toi32_i32$0 >>> 0 >>> 0)) / 4294967296.0) >>> 0 } $3_1 = $2_1; } else { $3_1 = 0 } ~~i64toi32_i32$0 >>> 0; } function $7(x) { x = +x; var i64toi32_i32$0 = 0.0, $2_1 = 0, $3_1 = 0; i64toi32_i32$0 = x; if (Math_abs(i64toi32_i32$0) >= 1.0) { if (i64toi32_i32$0 > 0.0) { $2_1 = ~~Math_min(Math_floor(i64toi32_i32$0 / 4294967296.0), 4294967296.0 - 1.0) >>> 0 } else { $2_1 = ~~Math_ceil((i64toi32_i32$0 - +(~~i64toi32_i32$0 >>> 0 >>> 0)) / 4294967296.0) >>> 0 } $3_1 = $2_1; } else { $3_1 = 0 } ~~i64toi32_i32$0 >>> 0; } return { "no_dce_i32_trunc_f32_s": $0, "no_dce_i32_trunc_f32_u": $1, "no_dce_i32_trunc_f64_s": $2, "no_dce_i32_trunc_f64_u": $3, "no_dce_i64_trunc_f32_s": $4, "no_dce_i64_trunc_f32_u": $5, "no_dce_i64_trunc_f64_s": $6, "no_dce_i64_trunc_f64_u": $7 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var no_dce_i32_trunc_f32_s = retasmFunc.no_dce_i32_trunc_f32_s; export var no_dce_i32_trunc_f32_u = retasmFunc.no_dce_i32_trunc_f32_u; export var no_dce_i32_trunc_f64_s = retasmFunc.no_dce_i32_trunc_f64_s; export var no_dce_i32_trunc_f64_u = retasmFunc.no_dce_i32_trunc_f64_u; export var no_dce_i64_trunc_f32_s = retasmFunc.no_dce_i64_trunc_f32_s; export var no_dce_i64_trunc_f32_u = retasmFunc.no_dce_i64_trunc_f32_u; export var no_dce_i64_trunc_f64_s = retasmFunc.no_dce_i64_trunc_f64_s; export var no_dce_i64_trunc_f64_u = retasmFunc.no_dce_i64_trunc_f64_u; function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; function $0(i) { i = i | 0; HEAP32[i >> 2] | 0; } function $1(i) { i = i | 0; HEAP16[i >> 1] | 0; } function $2(i) { i = i | 0; HEAPU16[i >> 1] | 0; } function $3(i) { i = i | 0; HEAP8[i >> 0] | 0; } function $4(i) { i = i | 0; HEAPU8[i >> 0] | 0; } function $5(i) { i = i | 0; var i64toi32_i32$2 = 0; i64toi32_i32$2 = i; HEAP32[(i64toi32_i32$2 + 4 | 0) >> 2] | 0; HEAP32[i64toi32_i32$2 >> 2] | 0; } function $6(i) { i = i | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = HEAP32[i >> 2] | 0; } function $7(i) { i = i | 0; HEAP32[i >> 2] | 0; } function $8(i) { i = i | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = HEAP16[i >> 1] | 0; } function $9(i) { i = i | 0; HEAPU16[i >> 1] | 0; } function $10(i) { i = i | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = HEAP8[i >> 0] | 0; } function $11(i) { i = i | 0; HEAPU8[i >> 0] | 0; } function $12(i) { i = i | 0; Math_fround(HEAPF32[i >> 2]); } function $13(i) { i = i | 0; +HEAPF64[i >> 3]; } function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } function __wasm_memory_grow(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_memory_size() | 0; var newPages = oldPages + pagesToAdd | 0; if ((oldPages < newPages) && (newPages < 65536)) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); HEAPU8 = new Uint8Array(newBuffer); HEAPU16 = new Uint16Array(newBuffer); HEAPU32 = new Uint32Array(newBuffer); HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; } return oldPages; } return { "no_dce_i32_load": $0, "no_dce_i32_load16_s": $1, "no_dce_i32_load16_u": $2, "no_dce_i32_load8_s": $3, "no_dce_i32_load8_u": $4, "no_dce_i64_load": $5, "no_dce_i64_load32_s": $6, "no_dce_i64_load32_u": $7, "no_dce_i64_load16_s": $8, "no_dce_i64_load16_u": $9, "no_dce_i64_load8_s": $10, "no_dce_i64_load8_u": $11, "no_dce_f32_load": $12, "no_dce_f64_load": $13 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var no_dce_i32_load = retasmFunc.no_dce_i32_load; export var no_dce_i32_load16_s = retasmFunc.no_dce_i32_load16_s; export var no_dce_i32_load16_u = retasmFunc.no_dce_i32_load16_u; export var no_dce_i32_load8_s = retasmFunc.no_dce_i32_load8_s; export var no_dce_i32_load8_u = retasmFunc.no_dce_i32_load8_u; export var no_dce_i64_load = retasmFunc.no_dce_i64_load; export var no_dce_i64_load32_s = retasmFunc.no_dce_i64_load32_s; export var no_dce_i64_load32_u = retasmFunc.no_dce_i64_load32_u; export var no_dce_i64_load16_s = retasmFunc.no_dce_i64_load16_s; export var no_dce_i64_load16_u = retasmFunc.no_dce_i64_load16_u; export var no_dce_i64_load8_s = retasmFunc.no_dce_i64_load8_s; export var no_dce_i64_load8_u = retasmFunc.no_dce_i64_load8_u; export var no_dce_f32_load = retasmFunc.no_dce_f32_load; export var no_dce_f64_load = retasmFunc.no_dce_f64_load; binaryen-version_108/test/wasm2js/unaligned.2asm.js000066400000000000000000000145021423707623100224610ustar00rootroot00000000000000import { setTempRet0 } from 'env'; var bufferView; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_load_f32() { return f32ScratchView[2]; } function wasm2js_scratch_store_f32(value) { f32ScratchView[2] = value; } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0() { var $0_1 = 0; $0_1 = 0; return HEAPU8[$0_1 >> 0] | 0 | ((HEAPU8[($0_1 + 1 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($0_1 + 2 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($0_1 + 3 | 0) >> 0] | 0) << 24 | 0) | 0) | 0 | 0; } function $1() { var $2_1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; $2_1 = 0; i64toi32_i32$0 = HEAPU8[$2_1 >> 0] | 0 | ((HEAPU8[($2_1 + 1 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($2_1 + 2 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($2_1 + 3 | 0) >> 0] | 0) << 24 | 0) | 0) | 0; i64toi32_i32$1 = HEAPU8[($2_1 + 4 | 0) >> 0] | 0 | ((HEAPU8[($2_1 + 5 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($2_1 + 6 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($2_1 + 7 | 0) >> 0] | 0) << 24 | 0) | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $2() { var $0_1 = 0; $0_1 = 0; return Math_fround((wasm2js_scratch_store_i32(2, HEAPU8[$0_1 >> 0] | 0 | ((HEAPU8[($0_1 + 1 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($0_1 + 2 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($0_1 + 3 | 0) >> 0] | 0) << 24 | 0) | 0) | 0), wasm2js_scratch_load_f32())); } function $3() { var $1_1 = 0, i64toi32_i32$1 = 0; $1_1 = 0; i64toi32_i32$1 = HEAPU8[($1_1 + 4 | 0) >> 0] | 0 | ((HEAPU8[($1_1 + 5 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($1_1 + 6 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($1_1 + 7 | 0) >> 0] | 0) << 24 | 0) | 0) | 0; wasm2js_scratch_store_i32(0 | 0, HEAPU8[$1_1 >> 0] | 0 | ((HEAPU8[($1_1 + 1 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($1_1 + 2 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($1_1 + 3 | 0) >> 0] | 0) << 24 | 0) | 0) | 0 | 0); wasm2js_scratch_store_i32(1 | 0, i64toi32_i32$1 | 0); return +(+wasm2js_scratch_load_f64()); } function $4() { var $0_1 = 0, $1_1 = 0; $0_1 = 0; $1_1 = 0; HEAP8[$0_1 >> 0] = $1_1; HEAP8[($0_1 + 1 | 0) >> 0] = $1_1 >>> 8 | 0; HEAP8[($0_1 + 2 | 0) >> 0] = $1_1 >>> 16 | 0; HEAP8[($0_1 + 3 | 0) >> 0] = $1_1 >>> 24 | 0; } function $5() { var $0_1 = 0, $1_1 = 0, $2_1 = 0; $0_1 = 0; $1_1 = 0; HEAP8[$0_1 >> 0] = $1_1; HEAP8[($0_1 + 1 | 0) >> 0] = $1_1 >>> 8 | 0; HEAP8[($0_1 + 2 | 0) >> 0] = $1_1 >>> 16 | 0; HEAP8[($0_1 + 3 | 0) >> 0] = $1_1 >>> 24 | 0; $2_1 = 0; HEAP8[($0_1 + 4 | 0) >> 0] = $2_1; HEAP8[($0_1 + 5 | 0) >> 0] = $2_1 >>> 8 | 0; HEAP8[($0_1 + 6 | 0) >> 0] = $2_1 >>> 16 | 0; HEAP8[($0_1 + 7 | 0) >> 0] = $2_1 >>> 24 | 0; } function $6() { var $0_1 = 0, $1_1 = 0; $0_1 = 0; $1_1 = (wasm2js_scratch_store_f32(Math_fround(0.0)), wasm2js_scratch_load_i32(2)); HEAP8[$0_1 >> 0] = $1_1; HEAP8[($0_1 + 1 | 0) >> 0] = $1_1 >>> 8 | 0; HEAP8[($0_1 + 2 | 0) >> 0] = $1_1 >>> 16 | 0; HEAP8[($0_1 + 3 | 0) >> 0] = $1_1 >>> 24 | 0; } function $7() { var $1_1 = 0, $2_1 = 0, $3_1 = 0, i64toi32_i32$0 = 0; wasm2js_scratch_store_f64(+(0.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; $1_1 = 0; $2_1 = wasm2js_scratch_load_i32(0 | 0) | 0; HEAP8[$1_1 >> 0] = $2_1; HEAP8[($1_1 + 1 | 0) >> 0] = $2_1 >>> 8 | 0; HEAP8[($1_1 + 2 | 0) >> 0] = $2_1 >>> 16 | 0; HEAP8[($1_1 + 3 | 0) >> 0] = $2_1 >>> 24 | 0; $3_1 = i64toi32_i32$0; HEAP8[($1_1 + 4 | 0) >> 0] = $3_1; HEAP8[($1_1 + 5 | 0) >> 0] = $3_1 >>> 8 | 0; HEAP8[($1_1 + 6 | 0) >> 0] = $3_1 >>> 16 | 0; HEAP8[($1_1 + 7 | 0) >> 0] = $3_1 >>> 24 | 0; } function legalstub$1() { var i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, $7_1 = 0, $0_1 = 0, $0$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $1() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $0_1 = i64toi32_i32$0; $0$hi = i64toi32_i32$1; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = 0; $7_1 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; } else { i64toi32_i32$0 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; $7_1 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; } setTempRet0($7_1 | 0); i64toi32_i32$0 = $0$hi; return $0_1 | 0; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "i32_load": $0, "i64_load": legalstub$1, "f32_load": $2, "f64_load": $3, "i32_store": $4, "i64_store": $5, "f32_store": $6, "f64_store": $7 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_load = retasmFunc.i32_load; export var i64_load = retasmFunc.i64_load; export var f32_load = retasmFunc.f32_load; export var f64_load = retasmFunc.f64_load; export var i32_store = retasmFunc.i32_store; export var i64_store = retasmFunc.i64_store; export var f32_store = retasmFunc.f32_store; export var f64_store = retasmFunc.f64_store; binaryen-version_108/test/wasm2js/unaligned.2asm.js.opt000066400000000000000000000070741423707623100232700ustar00rootroot00000000000000import { setTempRet0 } from 'env'; var bufferView; var scratchBuffer = new ArrayBuffer(16); var i32ScratchView = new Int32Array(scratchBuffer); var f32ScratchView = new Float32Array(scratchBuffer); var f64ScratchView = new Float64Array(scratchBuffer); function wasm2js_scratch_load_i32(index) { return i32ScratchView[index]; } function wasm2js_scratch_store_i32(index, value) { i32ScratchView[index] = value; } function wasm2js_scratch_load_f64() { return f64ScratchView[0]; } function wasm2js_scratch_store_f64(value) { f64ScratchView[0] = value; } function wasm2js_scratch_load_f32() { return f32ScratchView[2]; } function asmFunc(env) { var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); var HEAPU8 = new Uint8Array(buffer); var HEAPU16 = new Uint16Array(buffer); var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0() { return HEAPU8[0] | HEAPU8[1] << 8 | (HEAPU8[2] << 16 | HEAPU8[3] << 24); } function $2() { return Math_fround((wasm2js_scratch_store_i32(2, HEAPU8[0] | HEAPU8[1] << 8 | (HEAPU8[2] << 16 | HEAPU8[3] << 24)), wasm2js_scratch_load_f32())); } function $3() { var $0_1 = 0; $0_1 = HEAPU8[4] | HEAPU8[5] << 8 | (HEAPU8[6] << 16 | HEAPU8[7] << 24); wasm2js_scratch_store_i32(0, HEAPU8[0] | HEAPU8[1] << 8 | (HEAPU8[2] << 16 | HEAPU8[3] << 24)); wasm2js_scratch_store_i32(1, $0_1 | 0); return +wasm2js_scratch_load_f64(); } function $4() { HEAP8[0] = 0; HEAP8[1] = 0; HEAP8[2] = 0; HEAP8[3] = 0; } function $5() { HEAP8[0] = 0; HEAP8[1] = 0; HEAP8[2] = 0; HEAP8[3] = 0; HEAP8[4] = 0; HEAP8[5] = 0; HEAP8[6] = 0; HEAP8[7] = 0; } function $7() { var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(0.0); $0_1 = wasm2js_scratch_load_i32(1) | 0; $1 = wasm2js_scratch_load_i32(0) | 0; HEAP8[0] = $1; HEAP8[1] = $1 >>> 8; HEAP8[2] = $1 >>> 16; HEAP8[3] = $1 >>> 24; HEAP8[4] = $0_1; HEAP8[5] = $0_1 >>> 8; HEAP8[6] = $0_1 >>> 16; HEAP8[7] = $0_1 >>> 24; } function legalstub$1() { var $0_1 = 0; i64toi32_i32$HIGH_BITS = HEAPU8[4] | HEAPU8[5] << 8 | (HEAPU8[6] << 16 | HEAPU8[7] << 24); $0_1 = HEAPU8[0] | HEAPU8[1] << 8 | (HEAPU8[2] << 16 | HEAPU8[3] << 24); setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } bufferView = HEAPU8; function __wasm_memory_size() { return buffer.byteLength / 65536 | 0; } return { "i32_load": $0, "i64_load": legalstub$1, "f32_load": $2, "f64_load": $3, "i32_store": $4, "i64_store": $5, "f32_store": $4, "f64_store": $7 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 }); export var i32_load = retasmFunc.i32_load; export var i64_load = retasmFunc.i64_load; export var f32_load = retasmFunc.f32_load; export var f64_load = retasmFunc.f64_load; export var i32_store = retasmFunc.i32_store; export var i64_store = retasmFunc.i64_store; export var f32_store = retasmFunc.f32_store; export var f64_store = retasmFunc.f64_store; binaryen-version_108/test/wasm2js/unaligned.wast000066400000000000000000000012371423707623100221630ustar00rootroot00000000000000(module (memory 1 1) (func (export "i32.load") (result i32) (i32.load align=1 (i32.const 0))) (func (export "i64.load") (result i64) (i64.load align=1 (i32.const 0))) (func (export "f32.load") (result f32) (f32.load align=1 (i32.const 0))) (func (export "f64.load") (result f64) (f64.load align=1 (i32.const 0))) (func (export "i32.store") (i32.store align=1 (i32.const 0) (i32.const 0))) (func (export "i64.store") (i64.store align=1 (i32.const 0) (i64.const 0))) (func (export "f32.store") (f32.store align=1 (i32.const 0) (f32.const 0))) (func (export "f64.store") (f64.store align=1 (i32.const 0) (f64.const 0))) ) binaryen-version_108/test/wasm2js/unary-ops.2asm.js000066400000000000000000000421371423707623100224550ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var i64toi32_i32$HIGH_BITS = 0; function $1($0) { $0 = $0 | 0; return __wasm_popcnt_i32($0 | 0) | 0 | 0; } function $2($0, $0$hi, r, r$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; r = r | 0; r$hi = r$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $3$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = __wasm_popcnt_i64($0 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $3$hi = i64toi32_i32$1; i64toi32_i32$1 = r$hi; i64toi32_i32$1 = $3$hi; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = r$hi; return (i64toi32_i32$2 | 0) == (r | 0) & (i64toi32_i32$1 | 0) == (i64toi32_i32$0 | 0) | 0 | 0; } function $3($0, r, r$hi) { $0 = $0 | 0; r = r | 0; r$hi = r$hi | 0; var i64toi32_i32$0 = 0, $3$hi = 0; i64toi32_i32$0 = 0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = r$hi; i64toi32_i32$0 = $3$hi; return ($0 | 0) == (r | 0) & (i64toi32_i32$0 | 0) == (r$hi | 0) | 0 | 0; } function $4($0, r, r$hi) { $0 = $0 | 0; r = r | 0; r$hi = r$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $3$hi = 0; i64toi32_i32$1 = $0; i64toi32_i32$0 = i64toi32_i32$1 >> 31 | 0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = r$hi; i64toi32_i32$0 = $3$hi; i64toi32_i32$1 = r$hi; return ($0 | 0) == (r | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0 | 0; } function $5($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; var i64toi32_i32$0 = 0; i64toi32_i32$0 = $0$hi; return !($0 | i64toi32_i32$0 | 0) | 0; } function $6($0) { $0 = $0 | 0; return Math_clz32($0) | 0; } function $7($0) { $0 = $0 | 0; return __wasm_ctz_i32($0 | 0) | 0 | 0; } function $8($0, $0$hi, r, r$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; r = r | 0; r$hi = r$hi | 0; var i64toi32_i32$3 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $9_1 = 0, $3$hi = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $0; i64toi32_i32$3 = Math_clz32(i64toi32_i32$0); i64toi32_i32$2 = 0; if ((i64toi32_i32$3 | 0) == (32 | 0)) { $9_1 = Math_clz32(i64toi32_i32$1) + 32 | 0 } else { $9_1 = i64toi32_i32$3 } $3$hi = i64toi32_i32$2; i64toi32_i32$2 = r$hi; i64toi32_i32$2 = $3$hi; i64toi32_i32$1 = $9_1; i64toi32_i32$0 = r$hi; i64toi32_i32$3 = r; return (i64toi32_i32$1 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) | 0 | 0; } function $9($0, $0$hi, r, r$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; r = r | 0; r$hi = r$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $3$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = __wasm_ctz_i64($0 | 0, i64toi32_i32$0 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $3$hi = i64toi32_i32$1; i64toi32_i32$1 = r$hi; i64toi32_i32$1 = $3$hi; i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = r$hi; return (i64toi32_i32$2 | 0) == (r | 0) & (i64toi32_i32$1 | 0) == (i64toi32_i32$0 | 0) | 0 | 0; } function legalstub$2($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $2($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$3($0, $1_1, $2_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $12 = 0, $3_1 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0; $3_1 = $0; i64toi32_i32$0 = 0; $5_1 = $1_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $2_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return $3($3_1 | 0, i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$4($0, $1_1, $2_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $12 = 0, $3_1 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0; $3_1 = $0; i64toi32_i32$0 = 0; $5_1 = $1_1; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $2_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $12 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $12 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $12; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return $4($3_1 | 0, i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$5($0, $1_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $10 = 0, $3_1 = 0, $3$hi = 0, $6$hi = 0; i64toi32_i32$0 = 0; $3_1 = $0; $3$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $10 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $10 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $6$hi = i64toi32_i32$1; i64toi32_i32$1 = $3$hi; i64toi32_i32$0 = $3_1; i64toi32_i32$2 = $6$hi; i64toi32_i32$3 = $10; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; return $5(i64toi32_i32$0 | i64toi32_i32$3 | 0 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$8($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $8($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function legalstub$9($0, $1_1, $2_1, $3_1) { $0 = $0 | 0; $1_1 = $1_1 | 0; $2_1 = $2_1 | 0; $3_1 = $3_1 | 0; var i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $19 = 0, $20 = 0, $5_1 = 0, $5$hi = 0, $8$hi = 0, $9_1 = 0, $9$hi = 0, $11 = 0, $11$hi = 0, $14$hi = 0, $15 = 0, $15$hi = 0; i64toi32_i32$0 = 0; $5_1 = $0; $5$hi = i64toi32_i32$0; i64toi32_i32$0 = 0; i64toi32_i32$2 = $1_1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; $19 = 0; } else { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $19 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } $8$hi = i64toi32_i32$1; i64toi32_i32$1 = $5$hi; i64toi32_i32$0 = $5_1; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $19; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; $9_1 = i64toi32_i32$0 | i64toi32_i32$3 | 0; $9$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; $11 = $2_1; $11$hi = i64toi32_i32$2; i64toi32_i32$2 = 0; i64toi32_i32$1 = $3_1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; $20 = 0; } else { i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; $20 = i64toi32_i32$1 << i64toi32_i32$4 | 0; } $14$hi = i64toi32_i32$0; i64toi32_i32$0 = $11$hi; i64toi32_i32$2 = $11; i64toi32_i32$1 = $14$hi; i64toi32_i32$3 = $20; i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; $15 = i64toi32_i32$2 | i64toi32_i32$3 | 0; $15$hi = i64toi32_i32$1; i64toi32_i32$1 = $9$hi; i64toi32_i32$2 = $15$hi; return $9($9_1 | 0, i64toi32_i32$1 | 0, $15 | 0, i64toi32_i32$2 | 0) | 0 | 0; } function __wasm_ctz_i32(var$0) { var$0 = var$0 | 0; if (var$0) { return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0 } return 32 | 0; } function __wasm_ctz_i64(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $10 = 0, $5$hi = 0, $8$hi = 0; i64toi32_i32$0 = var$0$hi; if (!!(var$0 | i64toi32_i32$0 | 0)) { i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = -1; i64toi32_i32$3 = -1; i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$3 | 0; i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0 } $5$hi = i64toi32_i32$5; i64toi32_i32$5 = var$0$hi; i64toi32_i32$5 = $5$hi; i64toi32_i32$0 = i64toi32_i32$4; i64toi32_i32$2 = var$0$hi; i64toi32_i32$3 = var$0; i64toi32_i32$2 = i64toi32_i32$5 ^ i64toi32_i32$2 | 0; i64toi32_i32$0 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; i64toi32_i32$3 = Math_clz32(i64toi32_i32$2); i64toi32_i32$5 = 0; if ((i64toi32_i32$3 | 0) == (32 | 0)) { $10 = Math_clz32(i64toi32_i32$0) + 32 | 0 } else { $10 = i64toi32_i32$3 } $8$hi = i64toi32_i32$5; i64toi32_i32$5 = 0; i64toi32_i32$0 = 63; i64toi32_i32$2 = $8$hi; i64toi32_i32$3 = $10; i64toi32_i32$1 = i64toi32_i32$0 - i64toi32_i32$3 | 0; i64toi32_i32$4 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; i64toi32_i32$0 = i64toi32_i32$1; i64toi32_i32$HIGH_BITS = i64toi32_i32$4; return i64toi32_i32$0 | 0; } i64toi32_i32$0 = 0; i64toi32_i32$4 = 64; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$4 | 0; } function __wasm_popcnt_i32(var$0) { var$0 = var$0 | 0; var var$1 = 0, $5_1 = 0; label$1 : { label$2 : while (1) { $5_1 = var$1; if (!var$0) { break label$1 } var$0 = var$0 & (var$0 - 1 | 0) | 0; var$1 = var$1 + 1 | 0; continue label$2; }; } return $5_1 | 0; } function __wasm_popcnt_i64(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $5_1 = 0, $5$hi = 0, $4_1 = 0, $9$hi = 0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; i64toi32_i32$0 = var$0$hi; $4_1 = !(var$0 | i64toi32_i32$0 | 0); i64toi32_i32$0 = var$1$hi; $5_1 = var$1; $5$hi = i64toi32_i32$0; if ($4_1) { break label$1 } i64toi32_i32$0 = $5$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 1; i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$3 | 0; i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$1 | 0; i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; $9$hi = i64toi32_i32$5; i64toi32_i32$5 = i64toi32_i32$0; i64toi32_i32$0 = i64toi32_i32$2; i64toi32_i32$2 = $9$hi; i64toi32_i32$3 = i64toi32_i32$4; i64toi32_i32$2 = i64toi32_i32$5 & i64toi32_i32$2 | 0; var$0 = i64toi32_i32$0 & i64toi32_i32$4 | 0; var$0$hi = i64toi32_i32$2; i64toi32_i32$2 = var$1$hi; i64toi32_i32$5 = var$1; i64toi32_i32$0 = 0; i64toi32_i32$3 = 1; i64toi32_i32$1 = i64toi32_i32$5 + i64toi32_i32$3 | 0; i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$0 | 0; if (i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0) { i64toi32_i32$4 = i64toi32_i32$4 + 1 | 0 } var$1 = i64toi32_i32$1; var$1$hi = i64toi32_i32$4; continue label$2; }; } i64toi32_i32$4 = $5$hi; i64toi32_i32$5 = $5_1; i64toi32_i32$HIGH_BITS = i64toi32_i32$4; return i64toi32_i32$5 | 0; } return { "i32_popcnt": $1, "check_popcnt_i64": legalstub$2, "check_extend_ui32": legalstub$3, "check_extend_si32": legalstub$4, "check_eqz_i64": legalstub$5, "i32_clz": $6, "i32_ctz": $7, "check_clz_i64": legalstub$8, "check_ctz_i64": legalstub$9 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var i32_popcnt = retasmFunc.i32_popcnt; export var check_popcnt_i64 = retasmFunc.check_popcnt_i64; export var check_extend_ui32 = retasmFunc.check_extend_ui32; export var check_extend_si32 = retasmFunc.check_extend_si32; export var check_eqz_i64 = retasmFunc.check_eqz_i64; export var i32_clz = retasmFunc.i32_clz; export var i32_ctz = retasmFunc.i32_ctz; export var check_clz_i64 = retasmFunc.check_clz_i64; export var check_ctz_i64 = retasmFunc.check_ctz_i64; binaryen-version_108/test/wasm2js/unary-ops.2asm.js.opt000066400000000000000000000057461423707623100232630ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var i64toi32_i32$HIGH_BITS = 0; function $1($0) { $0 = $0 | 0; var $1_1 = 0; while (1) { if ($0) { $0 = $0 - 1 & $0; $1_1 = $1_1 + 1 | 0; continue; } break; }; return $1_1 | 0; } function $6($0) { $0 = $0 | 0; return Math_clz32($0) | 0; } function $7($0) { $0 = $0 | 0; if ($0) { $0 = 31 - Math_clz32($0 - 1 ^ $0) | 0 } else { $0 = 32 } return $0 | 0; } function legalstub$2($0, $1_1, $2, $3) { var $4 = 0, $5 = 0, $6_1 = 0; $4 = $0; while (1) { if ($1_1 | $4) { $0 = $4; $4 = $4 - 1 & $4; $1_1 = $1_1 - !$0 & $1_1; $5 = $5 + 1 | 0; $6_1 = $5 ? $6_1 : $6_1 + 1 | 0; continue; } break; }; i64toi32_i32$HIGH_BITS = $6_1; return ($2 | 0) == ($5 | 0) & ($3 | 0) == (i64toi32_i32$HIGH_BITS | 0); } function legalstub$3($0, $1_1, $2) { return !$2 & ($0 | 0) == ($1_1 | 0); } function legalstub$4($0, $1_1, $2) { return ($0 | 0) == ($1_1 | 0) & ($2 | 0) == $0 >> 31; } function legalstub$5($0, $1_1) { return !($0 | $1_1); } function legalstub$8($0, $1_1, $2, $3) { var $4 = 0; $4 = Math_clz32($0) + 32 | 0; $0 = Math_clz32($1_1); return !$3 & ($2 | 0) == ((($0 | 0) == 32 ? $4 : $0) | 0); } function legalstub$9($0, $1_1, $2, $3) { var $4 = 0, $5 = 0, $6_1 = 0, $7_1 = 0; __inlined_func$__wasm_ctz_i64 : { if ($1_1 | $0) { $4 = $1_1 - 1 | 0; $5 = $4 + 1 | 0; $6_1 = $4; $4 = $0 - 1 | 0; $7_1 = Math_clz32($0 ^ $4) + 32 | 0; $0 = Math_clz32($1_1 ^ (($4 | 0) != -1 ? $5 : $6_1)); $0 = ($0 | 0) == 32 ? $7_1 : $0; $1_1 = 63 - $0 | 0; i64toi32_i32$HIGH_BITS = 0 - ($0 >>> 0 > 63) | 0; break __inlined_func$__wasm_ctz_i64; } i64toi32_i32$HIGH_BITS = 0; $1_1 = 64; } return ($1_1 | 0) == ($2 | 0) & ($3 | 0) == (i64toi32_i32$HIGH_BITS | 0); } return { "i32_popcnt": $1, "check_popcnt_i64": legalstub$2, "check_extend_ui32": legalstub$3, "check_extend_si32": legalstub$4, "check_eqz_i64": legalstub$5, "i32_clz": $6, "i32_ctz": $7, "check_clz_i64": legalstub$8, "check_ctz_i64": legalstub$9 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var i32_popcnt = retasmFunc.i32_popcnt; export var check_popcnt_i64 = retasmFunc.check_popcnt_i64; export var check_extend_ui32 = retasmFunc.check_extend_ui32; export var check_extend_si32 = retasmFunc.check_extend_si32; export var check_eqz_i64 = retasmFunc.check_eqz_i64; export var i32_clz = retasmFunc.i32_clz; export var i32_ctz = retasmFunc.i32_ctz; export var check_clz_i64 = retasmFunc.check_clz_i64; export var check_ctz_i64 = retasmFunc.check_ctz_i64; binaryen-version_108/test/wasm2js/unary-ops.wast000066400000000000000000000151461423707623100221560ustar00rootroot00000000000000(module (func $dummy) (func (export "i32.popcnt") (param $0 i32) (result i32) (i32.popcnt (local.get $0))) (func (export "check_popcnt_i64") (param $0 i64) (param $r i64) (result i32) (i64.eq (i64.popcnt (local.get $0)) (local.get $r))) (func (export "check_extend_ui32") (param $0 i32) (param $r i64) (result i32) (i64.eq (i64.extend_i32_u (local.get $0)) (local.get $r))) (func (export "check_extend_si32") (param $0 i32) (param $r i64) (result i32) (i64.eq (i64.extend_i32_s (local.get $0)) (local.get $r))) (func (export "check_eqz_i64") (param $0 i64) (result i32) (i64.eqz (local.get $0))) (func (export "i32.clz") (param $0 i32) (result i32) (i32.clz (local.get $0))) (func (export "i32.ctz") (param $0 i32) (result i32) (i32.ctz (local.get $0))) (func (export "check_clz_i64") (param $0 i64) (param $r i64) (result i32) (i64.eq (i64.clz (local.get $0)) (local.get $r))) (func (export "check_ctz_i64") (param $0 i64) (param $r i64) (result i32) (i64.eq (i64.ctz (local.get $0)) (local.get $r))) ) (assert_return (invoke "i32.popcnt" (i32.const 0)) (i32.const 0)) (assert_return (invoke "i32.popcnt" (i32.const 1)) (i32.const 1)) (assert_return (invoke "i32.popcnt" (i32.const 0x7fffffff)) (i32.const 31)) (assert_return (invoke "i32.popcnt" (i32.const 0xffffffff)) (i32.const 32)) (assert_return (invoke "check_popcnt_i64" (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_popcnt_i64" (i32.const 1) (i32.const 0) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_popcnt_i64" (i32.const 0) (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_popcnt_i64" (i32.const 0x7fffffff) (i32.const 0) (i32.const 31) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_popcnt_i64" (i32.const 0x7fffffff) (i32.const 1) (i32.const 32) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_popcnt_i64" (i32.const 0x7fffffff) (i32.const 0x7fffffff) (i32.const 62) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_popcnt_i64" (i32.const 0xffffffff) (i32.const 0xffffffff) (i32.const 64) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_ui32" (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_ui32" (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_ui32" (i32.const 0x7fffffff) (i32.const 0x7fffffff) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_ui32" (i32.const 0xffffffff) (i32.const 0xffffffff) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_si32" (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_si32" (i32.const 1) (i32.const 1) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_si32" (i32.const 0x7fffffff) (i32.const 0x7fffffff) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_extend_si32" (i32.const 0x80000000) (i32.const 0x80000000) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "check_extend_si32" (i32.const 0xffffffff) (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 1)) (assert_return (invoke "check_eqz_i64" (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_eqz_i64" (i32.const 1) (i32.const 0)) (i32.const 0)) (assert_return (invoke "check_eqz_i64" (i32.const 0) (i32.const 1)) (i32.const 0)) (assert_return (invoke "i32.clz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "i32.clz" (i32.const 1)) (i32.const 31)) (assert_return (invoke "i32.clz" (i32.const 0x7fffffff)) (i32.const 1)) (assert_return (invoke "i32.clz" (i32.const 0xffffffff)) (i32.const 0)) (assert_return (invoke "i32.ctz" (i32.const 0)) (i32.const 32)) (assert_return (invoke "i32.ctz" (i32.const 1)) (i32.const 0)) (assert_return (invoke "i32.ctz" (i32.const 0xfffffffe)) (i32.const 1)) (assert_return (invoke "i32.ctz" (i32.const 0x80000000)) (i32.const 31)) (assert_return (invoke "check_clz_i64" (i32.const 0) (i32.const 0) (i32.const 64) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_clz_i64" (i32.const 1) (i32.const 0) (i32.const 63) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_clz_i64" (i32.const 0x80000000) (i32.const 0) (i32.const 32) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_clz_i64" (i32.const 0) (i32.const 1) (i32.const 31) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_clz_i64" (i32.const 0) (i32.const 0x80000000) (i32.const 0) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_ctz_i64" (i32.const 0) (i32.const 0) (i32.const 64) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_ctz_i64" (i32.const 0) (i32.const 0x80000000) (i32.const 63) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_ctz_i64" (i32.const 0) (i32.const 1) (i32.const 32) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_ctz_i64" (i32.const 0x80000000) (i32.const 0) (i32.const 31) (i32.const 0)) (i32.const 1)) (assert_return (invoke "check_ctz_i64" (i32.const 1) (i32.const 0) (i32.const 0) (i32.const 0)) (i32.const 1)) binaryen-version_108/test/wasm2js/unreachable-get-cycle.2asm.js000066400000000000000000000007361423707623100246420ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/unreachable-get-cycle.2asm.js.opt000066400000000000000000000007361423707623100254430ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/unreachable-get-cycle.wast000066400000000000000000000011351423707623100243350ustar00rootroot00000000000000(module (type $0 (func (param i64 f64) (result i64))) (memory $0 1 1) (func $0 (; 0 ;) (type $0) (param $0 i64) (param $1 f64) (result i64) (local $2 f32) (if (result i64) (loop $label$1 (result i32) (br_if $label$1 (i32.const 1) ) (i32.const 0) ) (loop $label$3 (block $label$4 (f32.store offset=22 align=2 (i32.const 0) (local.get $2) ) (drop (local.tee $2 (if (result f32) (i32.const -19666) (local.get $2) (unreachable) ) ) ) ) (br $label$3) ) (i64.const 1) ) ) ) binaryen-version_108/test/wasm2js/unreachable-insts.2asm.js000066400000000000000000000007361423707623100241260ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/unreachable-insts.2asm.js.opt000066400000000000000000000007361423707623100247270ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; return { }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); binaryen-version_108/test/wasm2js/unreachable-insts.wast000066400000000000000000000003711423707623100236220ustar00rootroot00000000000000(module (type $0 (func (param f64 f64 f32))) (memory $0 1 1) (func $0 (; 0 ;) (type $0) (param $0 f64) (param $1 f64) (param $2 f32) (f64.store offset=22 align=1 (block $label$1 (result i32) (unreachable) ) (f64.const 1) ) ) ) binaryen-version_108/test/wasm2js/unreachable-later.2asm.js000066400000000000000000000022711423707623100240710ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var global$0 = 10; function $0($0_1) { $0_1 = $0_1 | 0; var $15 = Math_fround(0), $21 = 0, $29 = 0, $26 = 0; if (global$0) { return $0_1 | 0 } if (global$0) { return $0_1 | 0 } global$0 = 0; label$3 : while (1) { label$4 : { if (global$0) { return $0_1 | 0 } if (global$0) { return $0_1 | 0 } if (global$0) { return $0_1 | 0 } $15 = Math_fround(0.0); if (global$0) { return $0_1 | 0 } } $21 = 32; if (!$21) { continue label$3 } $26 = 1; break label$3; }; if (!$26) { $29 = 0 } else { $29 = 1 } if (!$29) { return -255 | 0 } else { abort() } } return { "func_50": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var func_50 = retasmFunc.func_50; binaryen-version_108/test/wasm2js/unreachable-later.2asm.js.opt000066400000000000000000000014611423707623100246720ustar00rootroot00000000000000 function asmFunc(env) { var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; var Math_clz32 = Math.clz32; var Math_min = Math.min; var Math_max = Math.max; var Math_floor = Math.floor; var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; var abort = env.abort; var nan = NaN; var infinity = Infinity; var global$0 = 10; function $0($0_1) { $0_1 = $0_1 | 0; folding_inner0 : { if (global$0) { break folding_inner0 } global$0 = 0; if (global$0) { break folding_inner0 } if (global$0) { break folding_inner0 } abort(); } return $0_1 | 0; } return { "func_50": $0 }; } var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } }); export var func_50 = retasmFunc.func_50; binaryen-version_108/test/wasm2js/unreachable-later.wast000066400000000000000000000031331423707623100235700ustar00rootroot00000000000000(module (type $0 (func (param i32) (result i32))) (global $global$0 (mut i32) (i32.const 10)) (export "func_50" (func $0)) (func $0 (; 0 ;) (type $0) (param $0 i32) (result i32) (if (global.get $global$0) (return (local.get $0) ) ) (if (global.get $global$0) (return (local.get $0) ) ) (global.set $global$0 (i32.const 0) ) (if (i32.eqz (if (result i32) (i32.eqz (loop $label$3 (result i32) (br_if $label$3 (i32.eqz (if (result i32) (block $label$4 (result i32) (if (global.get $global$0) (return (local.get $0) ) ) (drop (if (result f32) (block $label$6 (result i32) (if (global.get $global$0) (return (local.get $0) ) ) (i32.const 65445) ) (block (result f32) (if (global.get $global$0) (return (local.get $0) ) ) (f32.const 0) ) (f32.const 1) ) ) (if (global.get $global$0) (return (local.get $0) ) ) (i32.const 1) ) (i32.const 32) (i32.const 0) ) ) ) (i32.const 1) ) ) (i32.const 0) (i32.const 1) ) ) (return (i32.const -255) ) (unreachable) ) ) ) binaryen-version_108/test/wasm2js/wasm2js.wast.asserts000066400000000000000000000010501423707623100232570ustar00rootroot00000000000000;; i32 operations (module (func (export "empty")) (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (local.get $x) (local.get $y))) (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (local.get $x) (local.get $y))) ) (assert_return (invoke "empty")) (assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) (assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") (assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") binaryen-version_108/third_party/000077500000000000000000000000001423707623100172765ustar00rootroot00000000000000binaryen-version_108/third_party/.clang-format000066400000000000000000000000761423707623100216540ustar00rootroot00000000000000--- Language: Cpp DisableFormat: true SortIncludes: false --- binaryen-version_108/third_party/.clang-tidy000066400000000000000000000000131423707623100213240ustar00rootroot00000000000000Checks: '' binaryen-version_108/third_party/CMakeLists.txt000066400000000000000000000004631423707623100220410ustar00rootroot00000000000000if(BUILD_LLVM_DWARF) add_subdirectory(llvm-project) endif() include_directories( googletest/googletest googletest/googletest/include ) if(BUILD_TESTS) add_library(gtest STATIC googletest/googletest/src/gtest-all.cc) add_library(gtest_main STATIC googletest/googletest/src/gtest_main.cc) endif() binaryen-version_108/third_party/googletest/000077500000000000000000000000001423707623100214525ustar00rootroot00000000000000binaryen-version_108/third_party/llvm-project/000077500000000000000000000000001423707623100217145ustar00rootroot00000000000000binaryen-version_108/third_party/llvm-project/Binary.cpp000066400000000000000000000045621423707623100236530ustar00rootroot00000000000000//===- Binary.cpp - A generic binary file ---------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the Binary class. // //===----------------------------------------------------------------------===// #include "llvm/Object/Binary.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Magic.h" #include "llvm/Object/Archive.h" #include "llvm/Object/Error.h" #if 0 // XXX BINARYEN #include "llvm/Object/MachOUniversal.h" #include "llvm/Object/Minidump.h" #endif #include "llvm/Object/ObjectFile.h" #if 0 // XXX BINARYEN #include "llvm/Object/TapiUniversal.h" #include "llvm/Object/WindowsResource.h" #endif #include "llvm/Support/Error.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ErrorOr.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" #include #include #include using namespace llvm; using namespace object; Binary::~Binary() = default; Binary::Binary(unsigned int Type, MemoryBufferRef Source) : TypeID(Type), Data(Source) {} StringRef Binary::getData() const { return Data.getBuffer(); } StringRef Binary::getFileName() const { return Data.getBufferIdentifier(); } MemoryBufferRef Binary::getMemoryBufferRef() const { return Data; } Expected> object::createBinary(MemoryBufferRef Buffer, LLVMContext *Context) { llvm_unreachable("createBinary"); } #if 0 // XXX BINARYEN Expected> object::createBinary(StringRef Path) { ErrorOr> FileOrErr = MemoryBuffer::getFileOrSTDIN(Path, /*FileSize=*/-1, /*RequiresNullTerminator=*/false); if (std::error_code EC = FileOrErr.getError()) return errorCodeToError(EC); std::unique_ptr &Buffer = FileOrErr.get(); Expected> BinOrErr = createBinary(Buffer->getMemBufferRef()); if (!BinOrErr) return BinOrErr.takeError(); std::unique_ptr &Bin = BinOrErr.get(); return OwningBinary(std::move(Bin), std::move(Buffer)); } #endif binaryen-version_108/third_party/llvm-project/CMakeLists.txt000066400000000000000000000036541423707623100244640ustar00rootroot00000000000000# LLVM sources have warnings, ignore them. Otherwise, use options as close # as possible to LLVM's defaults. foreach(variable CMAKE_C_FLAGS CMAKE_CXX_FLAGS) if(NOT MSVC) set(${variable} "${${variable}} -w -std=c++14 -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS") else() set(${variable} "${${variable}} /w -std:c++14 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -DUNICODE -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS") endif() endforeach(variable) SET(llvm_dwarf_SOURCES Binary.cpp ConvertUTF.cpp DataExtractor.cpp Debug.cpp DJB.cpp Dwarf.cpp dwarf2yaml.cpp DWARFAbbreviationDeclaration.cpp DWARFAcceleratorTable.cpp DWARFAddressRange.cpp DWARFCompileUnit.cpp DWARFContext.cpp DWARFDataExtractor.cpp DWARFDebugAbbrev.cpp DWARFDebugAddr.cpp DWARFDebugAranges.cpp DWARFDebugArangeSet.cpp DWARFDebugFrame.cpp DWARFDebugInfoEntry.cpp DWARFDebugLine.cpp DWARFDebugLoc.cpp DWARFDebugMacro.cpp DWARFDebugPubTable.cpp DWARFDebugRangeList.cpp DWARFDebugRnglists.cpp DWARFDie.cpp DWARFEmitter.cpp DWARFExpression.cpp DWARFFormValue.cpp DWARFGdbIndex.cpp DWARFListTable.cpp DWARFTypeUnit.cpp DWARFUnit.cpp DWARFUnitIndex.cpp DWARFVerifier.cpp DWARFVisitor.cpp DWARFYAML.cpp Error.cpp ErrorHandling.cpp FormatVariadic.cpp Hashing.cpp LEB128.cpp LineIterator.cpp MCRegisterInfo.cpp MD5.cpp MemoryBuffer.cpp NativeFormatting.cpp ObjectFile.cpp obj2yaml_Error.cpp Optional.cpp Path.cpp raw_ostream.cpp ScopedPrinter.cpp SmallVector.cpp SourceMgr.cpp StringMap.cpp StringRef.cpp SymbolicFile.cpp Twine.cpp UnicodeCaseFold.cpp WithColor.cpp YAMLParser.cpp # XXX needed? YAMLTraits.cpp ) ADD_LIBRARY(llvm_dwarf OBJECT ${llvm_dwarf_SOURCES}) binaryen-version_108/third_party/llvm-project/ConvertUTF.cpp000066400000000000000000000664271423707623100244360ustar00rootroot00000000000000/*===--- ConvertUTF.c - Universal Character Names conversions ---------------=== * * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. * See https://llvm.org/LICENSE.txt for license information. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * *===------------------------------------------------------------------------=*/ /* * Copyright 2001-2004 Unicode, Inc. * * Disclaimer * * This source code is provided as is by Unicode, Inc. No claims are * made as to fitness for any particular purpose. No warranties of any * kind are expressed or implied. The recipient agrees to determine * applicability of information provided. If this file has been * purchased on magnetic or optical media from Unicode, Inc., the * sole remedy for any claim will be exchange of defective media * within 90 days of receipt. * * Limitations on Rights to Redistribute This Code * * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form * for internal or external distribution as long as this notice * remains attached. */ /* --------------------------------------------------------------------- Conversions between UTF32, UTF-16, and UTF-8. Source code file. Author: Mark E. Davis, 1994. Rev History: Rick McGowan, fixes & updates May 2001. Sept 2001: fixed const & error conditions per mods suggested by S. Parent & A. Lillich. June 2002: Tim Dodd added detection and handling of incomplete source sequences, enhanced error detection, added casts to eliminate compiler warnings. July 2003: slight mods to back out aggressive FFFE detection. Jan 2004: updated switches in from-UTF8 conversions. Oct 2004: updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions. See the header file "ConvertUTF.h" for complete documentation. ------------------------------------------------------------------------ */ #include "llvm/Support/ConvertUTF.h" #ifdef CVTUTF_DEBUG #include #endif #include /* * This code extensively uses fall-through switches. * Keep the compiler from warning about that. */ #if defined(__clang__) && defined(__has_warning) # if __has_warning("-Wimplicit-fallthrough") # define ConvertUTF_DISABLE_WARNINGS \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wimplicit-fallthrough\"") # define ConvertUTF_RESTORE_WARNINGS \ _Pragma("clang diagnostic pop") # endif #elif defined(__GNUC__) && __GNUC__ > 6 # define ConvertUTF_DISABLE_WARNINGS \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"") # define ConvertUTF_RESTORE_WARNINGS \ _Pragma("GCC diagnostic pop") #endif #ifndef ConvertUTF_DISABLE_WARNINGS # define ConvertUTF_DISABLE_WARNINGS #endif #ifndef ConvertUTF_RESTORE_WARNINGS # define ConvertUTF_RESTORE_WARNINGS #endif ConvertUTF_DISABLE_WARNINGS namespace llvm { static const int halfShift = 10; /* used for shifting by 10 bits */ static const UTF32 halfBase = 0x0010000UL; static const UTF32 halfMask = 0x3FFUL; #define UNI_SUR_HIGH_START (UTF32)0xD800 #define UNI_SUR_HIGH_END (UTF32)0xDBFF #define UNI_SUR_LOW_START (UTF32)0xDC00 #define UNI_SUR_LOW_END (UTF32)0xDFFF /* --------------------------------------------------------------------- */ /* * Index into the table below with the first byte of a UTF-8 sequence to * get the number of trailing bytes that are supposed to follow it. * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is * left as-is for anyone who may want to do such conversion, which was * allowed in earlier algorithms. */ static const char trailingBytesForUTF8[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; /* * Magic values subtracted from a buffer value during UTF8 conversion. * This table contains as many values as there might be trailing bytes * in a UTF-8 sequence. */ static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; /* * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed * into the first byte, depending on how many bytes follow. There are * as many entries in this table as there are UTF-8 sequence types. * (I.e., one byte sequence, two byte... etc.). Remember that sequencs * for *legal* UTF-8 will be 4 or fewer bytes total. */ static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; /* --------------------------------------------------------------------- */ /* The interface converts a whole buffer to avoid function-call overhead. * Constants have been gathered. Loops & conditionals have been removed as * much as possible for efficiency, in favor of drop-through switches. * (See "Note A" at the bottom of the file for equivalent code.) * If your compiler supports it, the "isLegalUTF8" call can be turned * into an inline function. */ /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF32toUTF16 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF32* source = *sourceStart; UTF16* target = *targetStart; while (source < sourceEnd) { UTF32 ch; if (target >= targetEnd) { result = targetExhausted; break; } ch = *source++; if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ /* UTF-16 surrogate values are illegal in UTF-32; 0xffff or 0xfffe are both reserved values */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { if (flags == strictConversion) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { *target++ = (UTF16)ch; /* normal case */ } } else if (ch > UNI_MAX_LEGAL_UTF32) { if (flags == strictConversion) { result = sourceIllegal; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { /* target is a character in range 0xFFFF - 0x10FFFF. */ if (target + 1 >= targetEnd) { --source; /* Back up source pointer! */ result = targetExhausted; break; } ch -= halfBase; *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START); *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START); } } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF16toUTF32 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF16* source = *sourceStart; UTF32* target = *targetStart; UTF32 ch, ch2; while (source < sourceEnd) { const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ ch = *source++; /* If we have a surrogate pair, convert to UTF32 first. */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) { /* If the 16 bits following the high surrogate are in the source buffer... */ if (source < sourceEnd) { ch2 = *source; /* If it's a low surrogate, convert to UTF32. */ if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + (ch2 - UNI_SUR_LOW_START) + halfBase; ++source; } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } else { /* We don't have the 16 bits following the high surrogate. */ --source; /* return to the high surrogate */ result = sourceExhausted; break; } } else if (flags == strictConversion) { /* UTF-16 surrogate values are illegal in UTF-32 */ if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } if (target >= targetEnd) { source = oldSource; /* Back up source pointer! */ result = targetExhausted; break; } *target++ = ch; } *sourceStart = source; *targetStart = target; #ifdef CVTUTF_DEBUG if (result == sourceIllegal) { fprintf(stderr, "ConvertUTF16toUTF32 illegal seq 0x%04x,%04x\n", ch, ch2); fflush(stderr); } #endif return result; } ConversionResult ConvertUTF16toUTF8 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF16* source = *sourceStart; UTF8* target = *targetStart; while (source < sourceEnd) { UTF32 ch; unsigned short bytesToWrite = 0; const UTF32 byteMask = 0xBF; const UTF32 byteMark = 0x80; const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ ch = *source++; /* If we have a surrogate pair, convert to UTF32 first. */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) { /* If the 16 bits following the high surrogate are in the source buffer... */ if (source < sourceEnd) { UTF32 ch2 = *source; /* If it's a low surrogate, convert to UTF32. */ if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + (ch2 - UNI_SUR_LOW_START) + halfBase; ++source; } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } else { /* We don't have the 16 bits following the high surrogate. */ --source; /* return to the high surrogate */ result = sourceExhausted; break; } } else if (flags == strictConversion) { /* UTF-16 surrogate values are illegal in UTF-32 */ if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } /* Figure out how many bytes the result will require */ if (ch < (UTF32)0x80) { bytesToWrite = 1; } else if (ch < (UTF32)0x800) { bytesToWrite = 2; } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; } else if (ch < (UTF32)0x110000) { bytesToWrite = 4; } else { bytesToWrite = 3; ch = UNI_REPLACEMENT_CHAR; } target += bytesToWrite; if (target > targetEnd) { source = oldSource; /* Back up source pointer! */ target -= bytesToWrite; result = targetExhausted; break; } switch (bytesToWrite) { /* note: everything falls through. */ case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 1: *--target = (UTF8)(ch | firstByteMark[bytesToWrite]); } target += bytesToWrite; } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF32toUTF8 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF32* source = *sourceStart; UTF8* target = *targetStart; while (source < sourceEnd) { UTF32 ch; unsigned short bytesToWrite = 0; const UTF32 byteMask = 0xBF; const UTF32 byteMark = 0x80; ch = *source++; if (flags == strictConversion ) { /* UTF-16 surrogate values are illegal in UTF-32 */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } /* * Figure out how many bytes the result will require. Turn any * illegally large UTF32 things (> Plane 17) into replacement chars. */ if (ch < (UTF32)0x80) { bytesToWrite = 1; } else if (ch < (UTF32)0x800) { bytesToWrite = 2; } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; } else if (ch <= UNI_MAX_LEGAL_UTF32) { bytesToWrite = 4; } else { bytesToWrite = 3; ch = UNI_REPLACEMENT_CHAR; result = sourceIllegal; } target += bytesToWrite; if (target > targetEnd) { --source; /* Back up source pointer! */ target -= bytesToWrite; result = targetExhausted; break; } switch (bytesToWrite) { /* note: everything falls through. */ case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); } target += bytesToWrite; } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ /* * Utility routine to tell whether a sequence of bytes is legal UTF-8. * This must be called with the length pre-determined by the first byte. * If not calling this from ConvertUTF8to*, then the length can be set by: * length = trailingBytesForUTF8[*source]+1; * and the sequence is illegal right away if there aren't that many bytes * available. * If presented with a length > 4, this returns false. The Unicode * definition of UTF-8 goes up to 4-byte sequences. */ static Boolean isLegalUTF8(const UTF8 *source, int length) { UTF8 a; const UTF8 *srcptr = source+length; switch (length) { default: return false; /* Everything else falls through when "true"... */ case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; case 2: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; switch (*source) { /* no fall-through in this inner switch */ case 0xE0: if (a < 0xA0) return false; break; case 0xED: if (a > 0x9F) return false; break; case 0xF0: if (a < 0x90) return false; break; case 0xF4: if (a > 0x8F) return false; break; default: if (a < 0x80) return false; } case 1: if (*source >= 0x80 && *source < 0xC2) return false; } if (*source > 0xF4) return false; return true; } /* --------------------------------------------------------------------- */ /* * Exported function to return whether a UTF-8 sequence is legal or not. * This is not used here; it's just exported. */ Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) { int length = trailingBytesForUTF8[*source]+1; if (length > sourceEnd - source) { return false; } return isLegalUTF8(source, length); } /* --------------------------------------------------------------------- */ static unsigned findMaximalSubpartOfIllFormedUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) { UTF8 b1, b2, b3; assert(!isLegalUTF8Sequence(source, sourceEnd)); /* * Unicode 6.3.0, D93b: * * Maximal subpart of an ill-formed subsequence: The longest code unit * subsequence starting at an unconvertible offset that is either: * a. the initial subsequence of a well-formed code unit sequence, or * b. a subsequence of length one. */ if (source == sourceEnd) return 0; /* * Perform case analysis. See Unicode 6.3.0, Table 3-7. Well-Formed UTF-8 * Byte Sequences. */ b1 = *source; ++source; if (b1 >= 0xC2 && b1 <= 0xDF) { /* * First byte is valid, but we know that this code unit sequence is * invalid, so the maximal subpart has to end after the first byte. */ return 1; } if (source == sourceEnd) return 1; b2 = *source; ++source; if (b1 == 0xE0) { return (b2 >= 0xA0 && b2 <= 0xBF) ? 2 : 1; } if (b1 >= 0xE1 && b1 <= 0xEC) { return (b2 >= 0x80 && b2 <= 0xBF) ? 2 : 1; } if (b1 == 0xED) { return (b2 >= 0x80 && b2 <= 0x9F) ? 2 : 1; } if (b1 >= 0xEE && b1 <= 0xEF) { return (b2 >= 0x80 && b2 <= 0xBF) ? 2 : 1; } if (b1 == 0xF0) { if (b2 >= 0x90 && b2 <= 0xBF) { if (source == sourceEnd) return 2; b3 = *source; return (b3 >= 0x80 && b3 <= 0xBF) ? 3 : 2; } return 1; } if (b1 >= 0xF1 && b1 <= 0xF3) { if (b2 >= 0x80 && b2 <= 0xBF) { if (source == sourceEnd) return 2; b3 = *source; return (b3 >= 0x80 && b3 <= 0xBF) ? 3 : 2; } return 1; } if (b1 == 0xF4) { if (b2 >= 0x80 && b2 <= 0x8F) { if (source == sourceEnd) return 2; b3 = *source; return (b3 >= 0x80 && b3 <= 0xBF) ? 3 : 2; } return 1; } assert((b1 >= 0x80 && b1 <= 0xC1) || b1 >= 0xF5); /* * There are no valid sequences that start with these bytes. Maximal subpart * is defined to have length 1 in these cases. */ return 1; } /* --------------------------------------------------------------------- */ /* * Exported function to return the total number of bytes in a codepoint * represented in UTF-8, given the value of the first byte. */ unsigned getNumBytesForUTF8(UTF8 first) { return trailingBytesForUTF8[first] + 1; } /* --------------------------------------------------------------------- */ /* * Exported function to return whether a UTF-8 string is legal or not. * This is not used here; it's just exported. */ Boolean isLegalUTF8String(const UTF8 **source, const UTF8 *sourceEnd) { while (*source != sourceEnd) { int length = trailingBytesForUTF8[**source] + 1; if (length > sourceEnd - *source || !isLegalUTF8(*source, length)) return false; *source += length; } return true; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF8toUTF16 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF8* source = *sourceStart; UTF16* target = *targetStart; while (source < sourceEnd) { UTF32 ch = 0; unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; if (extraBytesToRead >= sourceEnd - source) { result = sourceExhausted; break; } /* Do this check whether lenient or strict */ if (!isLegalUTF8(source, extraBytesToRead+1)) { result = sourceIllegal; break; } /* * The cases all fall through. See "Note A" below. */ switch (extraBytesToRead) { case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ case 3: ch += *source++; ch <<= 6; case 2: ch += *source++; ch <<= 6; case 1: ch += *source++; ch <<= 6; case 0: ch += *source++; } ch -= offsetsFromUTF8[extraBytesToRead]; if (target >= targetEnd) { source -= (extraBytesToRead+1); /* Back up source pointer! */ result = targetExhausted; break; } if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ /* UTF-16 surrogate values are illegal in UTF-32 */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { if (flags == strictConversion) { source -= (extraBytesToRead+1); /* return to the illegal value itself */ result = sourceIllegal; break; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { *target++ = (UTF16)ch; /* normal case */ } } else if (ch > UNI_MAX_UTF16) { if (flags == strictConversion) { result = sourceIllegal; source -= (extraBytesToRead+1); /* return to the start */ break; /* Bail out; shouldn't continue */ } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { /* target is a character in range 0xFFFF - 0x10FFFF. */ if (target + 1 >= targetEnd) { source -= (extraBytesToRead+1); /* Back up source pointer! */ result = targetExhausted; break; } ch -= halfBase; *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START); *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START); } } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ static ConversionResult ConvertUTF8toUTF32Impl( const UTF8** sourceStart, const UTF8* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags, Boolean InputIsPartial) { ConversionResult result = conversionOK; const UTF8* source = *sourceStart; UTF32* target = *targetStart; while (source < sourceEnd) { UTF32 ch = 0; unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; if (extraBytesToRead >= sourceEnd - source) { if (flags == strictConversion || InputIsPartial) { result = sourceExhausted; break; } else { result = sourceIllegal; /* * Replace the maximal subpart of ill-formed sequence with * replacement character. */ source += findMaximalSubpartOfIllFormedUTF8Sequence(source, sourceEnd); *target++ = UNI_REPLACEMENT_CHAR; continue; } } if (target >= targetEnd) { result = targetExhausted; break; } /* Do this check whether lenient or strict */ if (!isLegalUTF8(source, extraBytesToRead+1)) { result = sourceIllegal; if (flags == strictConversion) { /* Abort conversion. */ break; } else { /* * Replace the maximal subpart of ill-formed sequence with * replacement character. */ source += findMaximalSubpartOfIllFormedUTF8Sequence(source, sourceEnd); *target++ = UNI_REPLACEMENT_CHAR; continue; } } /* * The cases all fall through. See "Note A" below. */ switch (extraBytesToRead) { case 5: ch += *source++; ch <<= 6; case 4: ch += *source++; ch <<= 6; case 3: ch += *source++; ch <<= 6; case 2: ch += *source++; ch <<= 6; case 1: ch += *source++; ch <<= 6; case 0: ch += *source++; } ch -= offsetsFromUTF8[extraBytesToRead]; if (ch <= UNI_MAX_LEGAL_UTF32) { /* * UTF-16 surrogate values are illegal in UTF-32, and anything * over Plane 17 (> 0x10FFFF) is illegal. */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { if (flags == strictConversion) { source -= (extraBytesToRead+1); /* return to the illegal value itself */ result = sourceIllegal; break; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { *target++ = ch; } } else { /* i.e., ch > UNI_MAX_LEGAL_UTF32 */ result = sourceIllegal; *target++ = UNI_REPLACEMENT_CHAR; } } *sourceStart = source; *targetStart = target; return result; } ConversionResult ConvertUTF8toUTF32Partial(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ConversionFlags flags) { return ConvertUTF8toUTF32Impl(sourceStart, sourceEnd, targetStart, targetEnd, flags, /*InputIsPartial=*/true); } ConversionResult ConvertUTF8toUTF32(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF32 **targetStart, UTF32 *targetEnd, ConversionFlags flags) { return ConvertUTF8toUTF32Impl(sourceStart, sourceEnd, targetStart, targetEnd, flags, /*InputIsPartial=*/false); } /* --------------------------------------------------------------------- Note A. The fall-through switches in UTF-8 reading code save a temp variable, some decrements & conditionals. The switches are equivalent to the following loop: { int tmpBytesToRead = extraBytesToRead+1; do { ch += *source++; --tmpBytesToRead; if (tmpBytesToRead) ch <<= 6; } while (tmpBytesToRead > 0); } In UTF-8 writing code, the switches on "bytesToWrite" are similarly unrolled loops. --------------------------------------------------------------------- */ } // namespace llvm ConvertUTF_RESTORE_WARNINGS binaryen-version_108/third_party/llvm-project/DJB.cpp000066400000000000000000000053251423707623100230240ustar00rootroot00000000000000//===-- Support/DJB.cpp ---DJB Hash -----------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains support for the DJ Bernstein hash function. // //===----------------------------------------------------------------------===// #include "llvm/Support/DJB.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/Unicode.h" using namespace llvm; static UTF32 chopOneUTF32(StringRef &Buffer) { UTF32 C; const UTF8 *const Begin8Const = reinterpret_cast(Buffer.begin()); const UTF8 *Begin8 = Begin8Const; UTF32 *Begin32 = &C; // In lenient mode we will always end up with a "reasonable" value in C for // non-empty input. assert(!Buffer.empty()); ConvertUTF8toUTF32(&Begin8, reinterpret_cast(Buffer.end()), &Begin32, &C + 1, lenientConversion); Buffer = Buffer.drop_front(Begin8 - Begin8Const); return C; } static StringRef toUTF8(UTF32 C, MutableArrayRef Storage) { const UTF32 *Begin32 = &C; UTF8 *Begin8 = Storage.begin(); // The case-folded output should always be a valid unicode character, so use // strict mode here. ConversionResult CR = ConvertUTF32toUTF8(&Begin32, &C + 1, &Begin8, Storage.end(), strictConversion); assert(CR == conversionOK && "Case folding produced invalid char?"); (void)CR; return StringRef(reinterpret_cast(Storage.begin()), Begin8 - Storage.begin()); } static UTF32 foldCharDwarf(UTF32 C) { // DWARF v5 addition to the unicode folding rules. // Fold "Latin Small Letter Dotless I" and "Latin Capital Letter I With Dot // Above" into "i". if (C == 0x130 || C == 0x131) return 'i'; return sys::unicode::foldCharSimple(C); } static Optional fastCaseFoldingDjbHash(StringRef Buffer, uint32_t H) { bool AllASCII = true; for (unsigned char C : Buffer) { H = H * 33 + ('A' <= C && C <= 'Z' ? C - 'A' + 'a' : C); AllASCII &= C <= 0x7f; } if (AllASCII) return H; return None; } uint32_t llvm::caseFoldingDjbHash(StringRef Buffer, uint32_t H) { if (Optional Result = fastCaseFoldingDjbHash(Buffer, H)) return *Result; std::array Storage; while (!Buffer.empty()) { UTF32 C = foldCharDwarf(chopOneUTF32(Buffer)); StringRef Folded = toUTF8(C, Storage); H = djbHash(Folded, H); } return H; } binaryen-version_108/third_party/llvm-project/DWARFAbbreviationDeclaration.cpp000066400000000000000000000157301423707623100277650ustar00rootroot00000000000000//===- DWARFAbbreviationDeclaration.cpp -----------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h" #include "llvm/ADT/None.h" #include "llvm/ADT/Optional.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/Support/DataExtractor.h" #include "llvm/Support/Format.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/raw_ostream.h" #include #include using namespace llvm; using namespace dwarf; void DWARFAbbreviationDeclaration::clear() { Code = 0; Tag = DW_TAG_null; CodeByteSize = 0; HasChildren = false; AttributeSpecs.clear(); FixedAttributeSize.reset(); } DWARFAbbreviationDeclaration::DWARFAbbreviationDeclaration() { clear(); } bool DWARFAbbreviationDeclaration::extract(DataExtractor Data, uint64_t* OffsetPtr) { clear(); const uint64_t Offset = *OffsetPtr; Code = Data.getULEB128(OffsetPtr); if (Code == 0) { return false; } CodeByteSize = *OffsetPtr - Offset; Tag = static_cast(Data.getULEB128(OffsetPtr)); if (Tag == DW_TAG_null) { clear(); return false; } uint8_t ChildrenByte = Data.getU8(OffsetPtr); HasChildren = (ChildrenByte == DW_CHILDREN_yes); // Assign a value to our optional FixedAttributeSize member variable. If // this member variable still has a value after the while loop below, then // all attribute data in this abbreviation declaration has a fixed byte size. FixedAttributeSize = FixedSizeInfo(); // Read all of the abbreviation attributes and forms. while (true) { auto A = static_cast(Data.getULEB128(OffsetPtr)); auto F = static_cast
(Data.getULEB128(OffsetPtr)); if (A && F) { bool IsImplicitConst = (F == DW_FORM_implicit_const); if (IsImplicitConst) { int64_t V = Data.getSLEB128(OffsetPtr); AttributeSpecs.push_back(AttributeSpec(A, F, V)); continue; } Optional ByteSize; // If this abbrevation still has a fixed byte size, then update the // FixedAttributeSize as needed. switch (F) { case DW_FORM_addr: if (FixedAttributeSize) ++FixedAttributeSize->NumAddrs; break; case DW_FORM_ref_addr: if (FixedAttributeSize) ++FixedAttributeSize->NumRefAddrs; break; case DW_FORM_strp: case DW_FORM_GNU_ref_alt: case DW_FORM_GNU_strp_alt: case DW_FORM_line_strp: case DW_FORM_sec_offset: case DW_FORM_strp_sup: if (FixedAttributeSize) ++FixedAttributeSize->NumDwarfOffsets; break; default: // The form has a byte size that doesn't depend on Params. // If it's a fixed size, keep track of it. if ((ByteSize = dwarf::getFixedFormByteSize(F, dwarf::FormParams()))) { if (FixedAttributeSize) FixedAttributeSize->NumBytes += *ByteSize; break; } // Indicate we no longer have a fixed byte size for this // abbreviation by clearing the FixedAttributeSize optional value // so it doesn't have a value. FixedAttributeSize.reset(); break; } // Record this attribute and its fixed size if it has one. AttributeSpecs.push_back(AttributeSpec(A, F, ByteSize)); } else if (A == 0 && F == 0) { // We successfully reached the end of this abbreviation declaration // since both attribute and form are zero. break; } else { // Attribute and form pairs must either both be non-zero, in which case // they are added to the abbreviation declaration, or both be zero to // terminate the abbrevation declaration. In this case only one was // zero which is an error. clear(); return false; } } return true; } void DWARFAbbreviationDeclaration::dump(raw_ostream &OS) const { OS << '[' << getCode() << "] "; OS << formatv("{0}", getTag()); OS << "\tDW_CHILDREN_" << (hasChildren() ? "yes" : "no") << '\n'; for (const AttributeSpec &Spec : AttributeSpecs) { OS << formatv("\t{0}\t{1}", Spec.Attr, Spec.Form); if (Spec.isImplicitConst()) OS << '\t' << Spec.getImplicitConstValue(); OS << '\n'; } OS << '\n'; } Optional DWARFAbbreviationDeclaration::findAttributeIndex(dwarf::Attribute Attr) const { for (uint32_t i = 0, e = AttributeSpecs.size(); i != e; ++i) { if (AttributeSpecs[i].Attr == Attr) return i; } return None; } Optional DWARFAbbreviationDeclaration::getAttributeValue( const uint64_t DIEOffset, const dwarf::Attribute Attr, const DWARFUnit &U) const { Optional MatchAttrIndex = findAttributeIndex(Attr); if (!MatchAttrIndex) return None; auto DebugInfoData = U.getDebugInfoExtractor(); // Add the byte size of ULEB that for the abbrev Code so we can start // skipping the attribute data. uint64_t Offset = DIEOffset + CodeByteSize; uint32_t AttrIndex = 0; for (const auto &Spec : AttributeSpecs) { if (*MatchAttrIndex == AttrIndex) { // We have arrived at the attribute to extract, extract if from Offset. if (Spec.isImplicitConst()) return DWARFFormValue::createFromSValue(Spec.Form, Spec.getImplicitConstValue()); DWARFFormValue FormValue(Spec.Form); if (FormValue.extractValue(DebugInfoData, &Offset, U.getFormParams(), &U)) return FormValue; } // March Offset along until we get to the attribute we want. if (auto FixedSize = Spec.getByteSize(U)) Offset += *FixedSize; else DWARFFormValue::skipValue(Spec.Form, DebugInfoData, &Offset, U.getFormParams()); ++AttrIndex; } return None; } size_t DWARFAbbreviationDeclaration::FixedSizeInfo::getByteSize( const DWARFUnit &U) const { size_t ByteSize = NumBytes; if (NumAddrs) ByteSize += NumAddrs * U.getAddressByteSize(); if (NumRefAddrs) ByteSize += NumRefAddrs * U.getRefAddrByteSize(); if (NumDwarfOffsets) ByteSize += NumDwarfOffsets * U.getDwarfOffsetByteSize(); return ByteSize; } Optional DWARFAbbreviationDeclaration::AttributeSpec::getByteSize( const DWARFUnit &U) const { if (isImplicitConst()) return 0; if (ByteSize.HasByteSize) return ByteSize.ByteSize; Optional S; auto FixedByteSize = dwarf::getFixedFormByteSize(Form, U.getFormParams()); if (FixedByteSize) S = *FixedByteSize; return S; } Optional DWARFAbbreviationDeclaration::getFixedAttributesByteSize( const DWARFUnit &U) const { if (FixedAttributeSize) return FixedAttributeSize->getByteSize(U); return None; } binaryen-version_108/third_party/llvm-project/DWARFAcceleratorTable.cpp000066400000000000000000000724551423707623100264150ustar00rootroot00000000000000//===- DWARFAcceleratorTable.cpp ------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h" #include "llvm/ADT/SmallVector.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/DJB.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Format.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/raw_ostream.h" #include #include #include using namespace llvm; namespace { struct Atom { unsigned Value; }; static raw_ostream &operator<<(raw_ostream &OS, const Atom &A) { StringRef Str = dwarf::AtomTypeString(A.Value); if (!Str.empty()) return OS << Str; return OS << "DW_ATOM_unknown_" << format("%x", A.Value); } } // namespace static Atom formatAtom(unsigned Atom) { return {Atom}; } DWARFAcceleratorTable::~DWARFAcceleratorTable() = default; Error AppleAcceleratorTable::extract() { uint64_t Offset = 0; // Check that we can at least read the header. if (!AccelSection.isValidOffset(offsetof(Header, HeaderDataLength) + 4)) return createStringError(errc::illegal_byte_sequence, "Section too small: cannot read header."); Hdr.Magic = AccelSection.getU32(&Offset); Hdr.Version = AccelSection.getU16(&Offset); Hdr.HashFunction = AccelSection.getU16(&Offset); Hdr.BucketCount = AccelSection.getU32(&Offset); Hdr.HashCount = AccelSection.getU32(&Offset); Hdr.HeaderDataLength = AccelSection.getU32(&Offset); // Check that we can read all the hashes and offsets from the // section (see SourceLevelDebugging.rst for the structure of the index). // We need to substract one because we're checking for an *offset* which is // equal to the size for an empty table and hence pointer after the section. if (!AccelSection.isValidOffset(sizeof(Hdr) + Hdr.HeaderDataLength + Hdr.BucketCount * 4 + Hdr.HashCount * 8 - 1)) return createStringError( errc::illegal_byte_sequence, "Section too small: cannot read buckets and hashes."); HdrData.DIEOffsetBase = AccelSection.getU32(&Offset); uint32_t NumAtoms = AccelSection.getU32(&Offset); for (unsigned i = 0; i < NumAtoms; ++i) { uint16_t AtomType = AccelSection.getU16(&Offset); auto AtomForm = static_cast(AccelSection.getU16(&Offset)); HdrData.Atoms.push_back(std::make_pair(AtomType, AtomForm)); } IsValid = true; return Error::success(); } uint32_t AppleAcceleratorTable::getNumBuckets() { return Hdr.BucketCount; } uint32_t AppleAcceleratorTable::getNumHashes() { return Hdr.HashCount; } uint32_t AppleAcceleratorTable::getSizeHdr() { return sizeof(Hdr); } uint32_t AppleAcceleratorTable::getHeaderDataLength() { return Hdr.HeaderDataLength; } ArrayRef> AppleAcceleratorTable::getAtomsDesc() { return HdrData.Atoms; } bool AppleAcceleratorTable::validateForms() { for (auto Atom : getAtomsDesc()) { DWARFFormValue FormValue(Atom.second); switch (Atom.first) { case dwarf::DW_ATOM_die_offset: case dwarf::DW_ATOM_die_tag: case dwarf::DW_ATOM_type_flags: if ((!FormValue.isFormClass(DWARFFormValue::FC_Constant) && !FormValue.isFormClass(DWARFFormValue::FC_Flag)) || FormValue.getForm() == dwarf::DW_FORM_sdata) return false; break; default: break; } } return true; } std::pair AppleAcceleratorTable::readAtoms(uint64_t *HashDataOffset) { uint64_t DieOffset = dwarf::DW_INVALID_OFFSET; dwarf::Tag DieTag = dwarf::DW_TAG_null; dwarf::FormParams FormParams = {Hdr.Version, 0, dwarf::DwarfFormat::DWARF32}; for (auto Atom : getAtomsDesc()) { DWARFFormValue FormValue(Atom.second); FormValue.extractValue(AccelSection, HashDataOffset, FormParams); switch (Atom.first) { case dwarf::DW_ATOM_die_offset: DieOffset = *FormValue.getAsUnsignedConstant(); break; case dwarf::DW_ATOM_die_tag: DieTag = (dwarf::Tag)*FormValue.getAsUnsignedConstant(); break; default: break; } } return {DieOffset, DieTag}; } void AppleAcceleratorTable::Header::dump(ScopedPrinter &W) const { DictScope HeaderScope(W, "Header"); W.printHex("Magic", Magic); W.printHex("Version", Version); W.printHex("Hash function", HashFunction); W.printNumber("Bucket count", BucketCount); W.printNumber("Hashes count", HashCount); W.printNumber("HeaderData length", HeaderDataLength); } Optional AppleAcceleratorTable::HeaderData::extractOffset( Optional Value) const { if (!Value) return None; switch (Value->getForm()) { case dwarf::DW_FORM_ref1: case dwarf::DW_FORM_ref2: case dwarf::DW_FORM_ref4: case dwarf::DW_FORM_ref8: case dwarf::DW_FORM_ref_udata: return Value->getRawUValue() + DIEOffsetBase; default: return Value->getAsSectionOffset(); } } bool AppleAcceleratorTable::dumpName(ScopedPrinter &W, SmallVectorImpl &AtomForms, uint64_t *DataOffset) const { dwarf::FormParams FormParams = {Hdr.Version, 0, dwarf::DwarfFormat::DWARF32}; uint64_t NameOffset = *DataOffset; if (!AccelSection.isValidOffsetForDataOfSize(*DataOffset, 4)) { W.printString("Incorrectly terminated list."); return false; } uint64_t StringOffset = AccelSection.getRelocatedValue(4, DataOffset); if (!StringOffset) return false; // End of list DictScope NameScope(W, ("Name@0x" + Twine::utohexstr(NameOffset)).str()); W.startLine() << format("String: 0x%08" PRIx64, StringOffset); W.getOStream() << " \"" << StringSection.getCStr(&StringOffset) << "\"\n"; unsigned NumData = AccelSection.getU32(DataOffset); for (unsigned Data = 0; Data < NumData; ++Data) { ListScope DataScope(W, ("Data " + Twine(Data)).str()); unsigned i = 0; for (auto &Atom : AtomForms) { W.startLine() << format("Atom[%d]: ", i); if (Atom.extractValue(AccelSection, DataOffset, FormParams)) { Atom.dump(W.getOStream()); if (Optional Val = Atom.getAsUnsignedConstant()) { StringRef Str = dwarf::AtomValueString(HdrData.Atoms[i].first, *Val); if (!Str.empty()) W.getOStream() << " (" << Str << ")"; } } else W.getOStream() << "Error extracting the value"; W.getOStream() << "\n"; i++; } } return true; // more entries follow } LLVM_DUMP_METHOD void AppleAcceleratorTable::dump(raw_ostream &OS) const { if (!IsValid) return; ScopedPrinter W(OS); Hdr.dump(W); W.printNumber("DIE offset base", HdrData.DIEOffsetBase); W.printNumber("Number of atoms", uint64_t(HdrData.Atoms.size())); SmallVector AtomForms; { ListScope AtomsScope(W, "Atoms"); unsigned i = 0; for (const auto &Atom : HdrData.Atoms) { DictScope AtomScope(W, ("Atom " + Twine(i++)).str()); W.startLine() << "Type: " << formatAtom(Atom.first) << '\n'; W.startLine() << "Form: " << formatv("{0}", Atom.second) << '\n'; AtomForms.push_back(DWARFFormValue(Atom.second)); } } // Now go through the actual tables and dump them. uint64_t Offset = sizeof(Hdr) + Hdr.HeaderDataLength; uint64_t HashesBase = Offset + Hdr.BucketCount * 4; uint64_t OffsetsBase = HashesBase + Hdr.HashCount * 4; for (unsigned Bucket = 0; Bucket < Hdr.BucketCount; ++Bucket) { unsigned Index = AccelSection.getU32(&Offset); ListScope BucketScope(W, ("Bucket " + Twine(Bucket)).str()); if (Index == UINT32_MAX) { W.printString("EMPTY"); continue; } for (unsigned HashIdx = Index; HashIdx < Hdr.HashCount; ++HashIdx) { uint64_t HashOffset = HashesBase + HashIdx*4; uint64_t OffsetsOffset = OffsetsBase + HashIdx*4; uint32_t Hash = AccelSection.getU32(&HashOffset); if (Hash % Hdr.BucketCount != Bucket) break; uint64_t DataOffset = AccelSection.getU32(&OffsetsOffset); ListScope HashScope(W, ("Hash 0x" + Twine::utohexstr(Hash)).str()); if (!AccelSection.isValidOffset(DataOffset)) { W.printString("Invalid section offset"); continue; } while (dumpName(W, AtomForms, &DataOffset)) /*empty*/; } } } AppleAcceleratorTable::Entry::Entry( const AppleAcceleratorTable::HeaderData &HdrData) : HdrData(&HdrData) { Values.reserve(HdrData.Atoms.size()); for (const auto &Atom : HdrData.Atoms) Values.push_back(DWARFFormValue(Atom.second)); } void AppleAcceleratorTable::Entry::extract( const AppleAcceleratorTable &AccelTable, uint64_t *Offset) { dwarf::FormParams FormParams = {AccelTable.Hdr.Version, 0, dwarf::DwarfFormat::DWARF32}; for (auto &Atom : Values) Atom.extractValue(AccelTable.AccelSection, Offset, FormParams); } Optional AppleAcceleratorTable::Entry::lookup(HeaderData::AtomType Atom) const { assert(HdrData && "Dereferencing end iterator?"); assert(HdrData->Atoms.size() == Values.size()); for (const auto &Tuple : zip_first(HdrData->Atoms, Values)) { if (std::get<0>(Tuple).first == Atom) return std::get<1>(Tuple); } return None; } Optional AppleAcceleratorTable::Entry::getDIESectionOffset() const { return HdrData->extractOffset(lookup(dwarf::DW_ATOM_die_offset)); } Optional AppleAcceleratorTable::Entry::getCUOffset() const { return HdrData->extractOffset(lookup(dwarf::DW_ATOM_cu_offset)); } Optional AppleAcceleratorTable::Entry::getTag() const { Optional Tag = lookup(dwarf::DW_ATOM_die_tag); if (!Tag) return None; if (Optional Value = Tag->getAsUnsignedConstant()) return dwarf::Tag(*Value); return None; } AppleAcceleratorTable::ValueIterator::ValueIterator( const AppleAcceleratorTable &AccelTable, uint64_t Offset) : AccelTable(&AccelTable), Current(AccelTable.HdrData), DataOffset(Offset) { if (!AccelTable.AccelSection.isValidOffsetForDataOfSize(DataOffset, 4)) return; // Read the first entry. NumData = AccelTable.AccelSection.getU32(&DataOffset); Next(); } void AppleAcceleratorTable::ValueIterator::Next() { assert(NumData > 0 && "attempted to increment iterator past the end"); auto &AccelSection = AccelTable->AccelSection; if (Data >= NumData || !AccelSection.isValidOffsetForDataOfSize(DataOffset, 4)) { NumData = 0; DataOffset = 0; return; } Current.extract(*AccelTable, &DataOffset); ++Data; } iterator_range AppleAcceleratorTable::equal_range(StringRef Key) const { if (!IsValid) return make_range(ValueIterator(), ValueIterator()); // Find the bucket. unsigned HashValue = djbHash(Key); unsigned Bucket = HashValue % Hdr.BucketCount; uint64_t BucketBase = sizeof(Hdr) + Hdr.HeaderDataLength; uint64_t HashesBase = BucketBase + Hdr.BucketCount * 4; uint64_t OffsetsBase = HashesBase + Hdr.HashCount * 4; uint64_t BucketOffset = BucketBase + Bucket * 4; unsigned Index = AccelSection.getU32(&BucketOffset); // Search through all hashes in the bucket. for (unsigned HashIdx = Index; HashIdx < Hdr.HashCount; ++HashIdx) { uint64_t HashOffset = HashesBase + HashIdx * 4; uint64_t OffsetsOffset = OffsetsBase + HashIdx * 4; uint32_t Hash = AccelSection.getU32(&HashOffset); if (Hash % Hdr.BucketCount != Bucket) // We are already in the next bucket. break; uint64_t DataOffset = AccelSection.getU32(&OffsetsOffset); uint64_t StringOffset = AccelSection.getRelocatedValue(4, &DataOffset); if (!StringOffset) break; // Finally, compare the key. if (Key == StringSection.getCStr(&StringOffset)) return make_range({*this, DataOffset}, ValueIterator()); } return make_range(ValueIterator(), ValueIterator()); } void DWARFDebugNames::Header::dump(ScopedPrinter &W) const { DictScope HeaderScope(W, "Header"); W.printHex("Length", UnitLength); W.printNumber("Version", Version); W.printHex("Padding", Padding); W.printNumber("CU count", CompUnitCount); W.printNumber("Local TU count", LocalTypeUnitCount); W.printNumber("Foreign TU count", ForeignTypeUnitCount); W.printNumber("Bucket count", BucketCount); W.printNumber("Name count", NameCount); W.printHex("Abbreviations table size", AbbrevTableSize); W.startLine() << "Augmentation: '" << AugmentationString << "'\n"; } Error DWARFDebugNames::Header::extract(const DWARFDataExtractor &AS, uint64_t *Offset) { // Check that we can read the fixed-size part. if (!AS.isValidOffset(*Offset + sizeof(HeaderPOD) - 1)) return createStringError(errc::illegal_byte_sequence, "Section too small: cannot read header."); UnitLength = AS.getU32(Offset); Version = AS.getU16(Offset); Padding = AS.getU16(Offset); CompUnitCount = AS.getU32(Offset); LocalTypeUnitCount = AS.getU32(Offset); ForeignTypeUnitCount = AS.getU32(Offset); BucketCount = AS.getU32(Offset); NameCount = AS.getU32(Offset); AbbrevTableSize = AS.getU32(Offset); AugmentationStringSize = alignTo(AS.getU32(Offset), 4); if (!AS.isValidOffsetForDataOfSize(*Offset, AugmentationStringSize)) return createStringError( errc::illegal_byte_sequence, "Section too small: cannot read header augmentation."); AugmentationString.resize(AugmentationStringSize); AS.getU8(Offset, reinterpret_cast(AugmentationString.data()), AugmentationStringSize); return Error::success(); } void DWARFDebugNames::Abbrev::dump(ScopedPrinter &W) const { DictScope AbbrevScope(W, ("Abbreviation 0x" + Twine::utohexstr(Code)).str()); W.startLine() << formatv("Tag: {0}\n", Tag); for (const auto &Attr : Attributes) W.startLine() << formatv("{0}: {1}\n", Attr.Index, Attr.Form); } static constexpr DWARFDebugNames::AttributeEncoding sentinelAttrEnc() { return {dwarf::Index(0), dwarf::Form(0)}; } static bool isSentinel(const DWARFDebugNames::AttributeEncoding &AE) { return AE == sentinelAttrEnc(); } static DWARFDebugNames::Abbrev sentinelAbbrev() { return DWARFDebugNames::Abbrev(0, dwarf::Tag(0), {}); } static bool isSentinel(const DWARFDebugNames::Abbrev &Abbr) { return Abbr.Code == 0; } DWARFDebugNames::Abbrev DWARFDebugNames::AbbrevMapInfo::getEmptyKey() { return sentinelAbbrev(); } DWARFDebugNames::Abbrev DWARFDebugNames::AbbrevMapInfo::getTombstoneKey() { return DWARFDebugNames::Abbrev(~0, dwarf::Tag(0), {}); } Expected DWARFDebugNames::NameIndex::extractAttributeEncoding(uint64_t *Offset) { if (*Offset >= EntriesBase) { return createStringError(errc::illegal_byte_sequence, "Incorrectly terminated abbreviation table."); } uint32_t Index = Section.AccelSection.getULEB128(Offset); uint32_t Form = Section.AccelSection.getULEB128(Offset); return AttributeEncoding(dwarf::Index(Index), dwarf::Form(Form)); } Expected> DWARFDebugNames::NameIndex::extractAttributeEncodings(uint64_t *Offset) { std::vector Result; for (;;) { auto AttrEncOr = extractAttributeEncoding(Offset); if (!AttrEncOr) return AttrEncOr.takeError(); if (isSentinel(*AttrEncOr)) return std::move(Result); Result.emplace_back(*AttrEncOr); } } Expected DWARFDebugNames::NameIndex::extractAbbrev(uint64_t *Offset) { if (*Offset >= EntriesBase) { return createStringError(errc::illegal_byte_sequence, "Incorrectly terminated abbreviation table."); } uint32_t Code = Section.AccelSection.getULEB128(Offset); if (Code == 0) return sentinelAbbrev(); uint32_t Tag = Section.AccelSection.getULEB128(Offset); auto AttrEncOr = extractAttributeEncodings(Offset); if (!AttrEncOr) return AttrEncOr.takeError(); return Abbrev(Code, dwarf::Tag(Tag), std::move(*AttrEncOr)); } Error DWARFDebugNames::NameIndex::extract() { const DWARFDataExtractor &AS = Section.AccelSection; uint64_t Offset = Base; if (Error E = Hdr.extract(AS, &Offset)) return E; CUsBase = Offset; Offset += Hdr.CompUnitCount * 4; Offset += Hdr.LocalTypeUnitCount * 4; Offset += Hdr.ForeignTypeUnitCount * 8; BucketsBase = Offset; Offset += Hdr.BucketCount * 4; HashesBase = Offset; if (Hdr.BucketCount > 0) Offset += Hdr.NameCount * 4; StringOffsetsBase = Offset; Offset += Hdr.NameCount * 4; EntryOffsetsBase = Offset; Offset += Hdr.NameCount * 4; if (!AS.isValidOffsetForDataOfSize(Offset, Hdr.AbbrevTableSize)) return createStringError(errc::illegal_byte_sequence, "Section too small: cannot read abbreviations."); EntriesBase = Offset + Hdr.AbbrevTableSize; for (;;) { auto AbbrevOr = extractAbbrev(&Offset); if (!AbbrevOr) return AbbrevOr.takeError(); if (isSentinel(*AbbrevOr)) return Error::success(); if (!Abbrevs.insert(std::move(*AbbrevOr)).second) return createStringError(errc::invalid_argument, "Duplicate abbreviation code."); } } DWARFDebugNames::Entry::Entry(const NameIndex &NameIdx, const Abbrev &Abbr) : NameIdx(&NameIdx), Abbr(&Abbr) { // This merely creates form values. It is up to the caller // (NameIndex::getEntry) to populate them. Values.reserve(Abbr.Attributes.size()); for (const auto &Attr : Abbr.Attributes) Values.emplace_back(Attr.Form); } Optional DWARFDebugNames::Entry::lookup(dwarf::Index Index) const { assert(Abbr->Attributes.size() == Values.size()); for (const auto &Tuple : zip_first(Abbr->Attributes, Values)) { if (std::get<0>(Tuple).Index == Index) return std::get<1>(Tuple); } return None; } Optional DWARFDebugNames::Entry::getDIEUnitOffset() const { if (Optional Off = lookup(dwarf::DW_IDX_die_offset)) return Off->getAsReferenceUVal(); return None; } Optional DWARFDebugNames::Entry::getCUIndex() const { if (Optional Off = lookup(dwarf::DW_IDX_compile_unit)) return Off->getAsUnsignedConstant(); // In a per-CU index, the entries without a DW_IDX_compile_unit attribute // implicitly refer to the single CU. if (NameIdx->getCUCount() == 1) return 0; return None; } Optional DWARFDebugNames::Entry::getCUOffset() const { Optional Index = getCUIndex(); if (!Index || *Index >= NameIdx->getCUCount()) return None; return NameIdx->getCUOffset(*Index); } void DWARFDebugNames::Entry::dump(ScopedPrinter &W) const { W.printHex("Abbrev", Abbr->Code); W.startLine() << formatv("Tag: {0}\n", Abbr->Tag); assert(Abbr->Attributes.size() == Values.size()); for (const auto &Tuple : zip_first(Abbr->Attributes, Values)) { W.startLine() << formatv("{0}: ", std::get<0>(Tuple).Index); std::get<1>(Tuple).dump(W.getOStream()); W.getOStream() << '\n'; } } char DWARFDebugNames::SentinelError::ID; std::error_code DWARFDebugNames::SentinelError::convertToErrorCode() const { return inconvertibleErrorCode(); } uint64_t DWARFDebugNames::NameIndex::getCUOffset(uint32_t CU) const { assert(CU < Hdr.CompUnitCount); uint64_t Offset = CUsBase + 4 * CU; return Section.AccelSection.getRelocatedValue(4, &Offset); } uint64_t DWARFDebugNames::NameIndex::getLocalTUOffset(uint32_t TU) const { assert(TU < Hdr.LocalTypeUnitCount); uint64_t Offset = CUsBase + 4 * (Hdr.CompUnitCount + TU); return Section.AccelSection.getRelocatedValue(4, &Offset); } uint64_t DWARFDebugNames::NameIndex::getForeignTUSignature(uint32_t TU) const { assert(TU < Hdr.ForeignTypeUnitCount); uint64_t Offset = CUsBase + 4 * (Hdr.CompUnitCount + Hdr.LocalTypeUnitCount) + 8 * TU; return Section.AccelSection.getU64(&Offset); } Expected DWARFDebugNames::NameIndex::getEntry(uint64_t *Offset) const { const DWARFDataExtractor &AS = Section.AccelSection; if (!AS.isValidOffset(*Offset)) return createStringError(errc::illegal_byte_sequence, "Incorrectly terminated entry list."); uint32_t AbbrevCode = AS.getULEB128(Offset); if (AbbrevCode == 0) return make_error(); const auto AbbrevIt = Abbrevs.find_as(AbbrevCode); if (AbbrevIt == Abbrevs.end()) return createStringError(errc::invalid_argument, "Invalid abbreviation."); Entry E(*this, *AbbrevIt); dwarf::FormParams FormParams = {Hdr.Version, 0, dwarf::DwarfFormat::DWARF32}; for (auto &Value : E.Values) { if (!Value.extractValue(AS, Offset, FormParams)) return createStringError(errc::io_error, "Error extracting index attribute values."); } return std::move(E); } DWARFDebugNames::NameTableEntry DWARFDebugNames::NameIndex::getNameTableEntry(uint32_t Index) const { assert(0 < Index && Index <= Hdr.NameCount); uint64_t StringOffsetOffset = StringOffsetsBase + 4 * (Index - 1); uint64_t EntryOffsetOffset = EntryOffsetsBase + 4 * (Index - 1); const DWARFDataExtractor &AS = Section.AccelSection; uint64_t StringOffset = AS.getRelocatedValue(4, &StringOffsetOffset); uint64_t EntryOffset = AS.getU32(&EntryOffsetOffset); EntryOffset += EntriesBase; return {Section.StringSection, Index, StringOffset, EntryOffset}; } uint32_t DWARFDebugNames::NameIndex::getBucketArrayEntry(uint32_t Bucket) const { assert(Bucket < Hdr.BucketCount); uint64_t BucketOffset = BucketsBase + 4 * Bucket; return Section.AccelSection.getU32(&BucketOffset); } uint32_t DWARFDebugNames::NameIndex::getHashArrayEntry(uint32_t Index) const { assert(0 < Index && Index <= Hdr.NameCount); uint64_t HashOffset = HashesBase + 4 * (Index - 1); return Section.AccelSection.getU32(&HashOffset); } // Returns true if we should continue scanning for entries, false if this is the // last (sentinel) entry). In case of a parsing error we also return false, as // it's not possible to recover this entry list (but the other lists may still // parse OK). bool DWARFDebugNames::NameIndex::dumpEntry(ScopedPrinter &W, uint64_t *Offset) const { uint64_t EntryId = *Offset; auto EntryOr = getEntry(Offset); if (!EntryOr) { handleAllErrors(EntryOr.takeError(), [](const SentinelError &) {}, [&W](const ErrorInfoBase &EI) { EI.log(W.startLine()); }); return false; } DictScope EntryScope(W, ("Entry @ 0x" + Twine::utohexstr(EntryId)).str()); EntryOr->dump(W); return true; } void DWARFDebugNames::NameIndex::dumpName(ScopedPrinter &W, const NameTableEntry &NTE, Optional Hash) const { DictScope NameScope(W, ("Name " + Twine(NTE.getIndex())).str()); if (Hash) W.printHex("Hash", *Hash); W.startLine() << format("String: 0x%08" PRIx64, NTE.getStringOffset()); W.getOStream() << " \"" << NTE.getString() << "\"\n"; uint64_t EntryOffset = NTE.getEntryOffset(); while (dumpEntry(W, &EntryOffset)) /*empty*/; } void DWARFDebugNames::NameIndex::dumpCUs(ScopedPrinter &W) const { ListScope CUScope(W, "Compilation Unit offsets"); for (uint32_t CU = 0; CU < Hdr.CompUnitCount; ++CU) W.startLine() << format("CU[%u]: 0x%08" PRIx64 "\n", CU, getCUOffset(CU)); } void DWARFDebugNames::NameIndex::dumpLocalTUs(ScopedPrinter &W) const { if (Hdr.LocalTypeUnitCount == 0) return; ListScope TUScope(W, "Local Type Unit offsets"); for (uint32_t TU = 0; TU < Hdr.LocalTypeUnitCount; ++TU) W.startLine() << format("LocalTU[%u]: 0x%08" PRIx64 "\n", TU, getLocalTUOffset(TU)); } void DWARFDebugNames::NameIndex::dumpForeignTUs(ScopedPrinter &W) const { if (Hdr.ForeignTypeUnitCount == 0) return; ListScope TUScope(W, "Foreign Type Unit signatures"); for (uint32_t TU = 0; TU < Hdr.ForeignTypeUnitCount; ++TU) { W.startLine() << format("ForeignTU[%u]: 0x%016" PRIx64 "\n", TU, getForeignTUSignature(TU)); } } void DWARFDebugNames::NameIndex::dumpAbbreviations(ScopedPrinter &W) const { ListScope AbbrevsScope(W, "Abbreviations"); for (const auto &Abbr : Abbrevs) Abbr.dump(W); } void DWARFDebugNames::NameIndex::dumpBucket(ScopedPrinter &W, uint32_t Bucket) const { ListScope BucketScope(W, ("Bucket " + Twine(Bucket)).str()); uint32_t Index = getBucketArrayEntry(Bucket); if (Index == 0) { W.printString("EMPTY"); return; } if (Index > Hdr.NameCount) { W.printString("Name index is invalid"); return; } for (; Index <= Hdr.NameCount; ++Index) { uint32_t Hash = getHashArrayEntry(Index); if (Hash % Hdr.BucketCount != Bucket) break; dumpName(W, getNameTableEntry(Index), Hash); } } LLVM_DUMP_METHOD void DWARFDebugNames::NameIndex::dump(ScopedPrinter &W) const { DictScope UnitScope(W, ("Name Index @ 0x" + Twine::utohexstr(Base)).str()); Hdr.dump(W); dumpCUs(W); dumpLocalTUs(W); dumpForeignTUs(W); dumpAbbreviations(W); if (Hdr.BucketCount > 0) { for (uint32_t Bucket = 0; Bucket < Hdr.BucketCount; ++Bucket) dumpBucket(W, Bucket); return; } W.startLine() << "Hash table not present\n"; for (NameTableEntry NTE : *this) dumpName(W, NTE, None); } Error DWARFDebugNames::extract() { uint64_t Offset = 0; while (AccelSection.isValidOffset(Offset)) { NameIndex Next(*this, Offset); if (Error E = Next.extract()) return E; Offset = Next.getNextUnitOffset(); NameIndices.push_back(std::move(Next)); } return Error::success(); } iterator_range DWARFDebugNames::NameIndex::equal_range(StringRef Key) const { return make_range(ValueIterator(*this, Key), ValueIterator()); } LLVM_DUMP_METHOD void DWARFDebugNames::dump(raw_ostream &OS) const { ScopedPrinter W(OS); for (const NameIndex &NI : NameIndices) NI.dump(W); } Optional DWARFDebugNames::ValueIterator::findEntryOffsetInCurrentIndex() { const Header &Hdr = CurrentIndex->Hdr; if (Hdr.BucketCount == 0) { // No Hash Table, We need to search through all names in the Name Index. for (NameTableEntry NTE : *CurrentIndex) { if (NTE.getString() == Key) return NTE.getEntryOffset(); } return None; } // The Name Index has a Hash Table, so use that to speed up the search. // Compute the Key Hash, if it has not been done already. if (!Hash) Hash = caseFoldingDjbHash(Key); uint32_t Bucket = *Hash % Hdr.BucketCount; uint32_t Index = CurrentIndex->getBucketArrayEntry(Bucket); if (Index == 0) return None; // Empty bucket for (; Index <= Hdr.NameCount; ++Index) { uint32_t Hash = CurrentIndex->getHashArrayEntry(Index); if (Hash % Hdr.BucketCount != Bucket) return None; // End of bucket NameTableEntry NTE = CurrentIndex->getNameTableEntry(Index); if (NTE.getString() == Key) return NTE.getEntryOffset(); } return None; } bool DWARFDebugNames::ValueIterator::getEntryAtCurrentOffset() { auto EntryOr = CurrentIndex->getEntry(&DataOffset); if (!EntryOr) { consumeError(EntryOr.takeError()); return false; } CurrentEntry = std::move(*EntryOr); return true; } bool DWARFDebugNames::ValueIterator::findInCurrentIndex() { Optional Offset = findEntryOffsetInCurrentIndex(); if (!Offset) return false; DataOffset = *Offset; return getEntryAtCurrentOffset(); } void DWARFDebugNames::ValueIterator::searchFromStartOfCurrentIndex() { for (const NameIndex *End = CurrentIndex->Section.NameIndices.end(); CurrentIndex != End; ++CurrentIndex) { if (findInCurrentIndex()) return; } setEnd(); } void DWARFDebugNames::ValueIterator::next() { assert(CurrentIndex && "Incrementing an end() iterator?"); // First try the next entry in the current Index. if (getEntryAtCurrentOffset()) return; // If we're a local iterator or we have reached the last Index, we're done. if (IsLocal || CurrentIndex == &CurrentIndex->Section.NameIndices.back()) { setEnd(); return; } // Otherwise, try the next index. ++CurrentIndex; searchFromStartOfCurrentIndex(); } DWARFDebugNames::ValueIterator::ValueIterator(const DWARFDebugNames &AccelTable, StringRef Key) : CurrentIndex(AccelTable.NameIndices.begin()), IsLocal(false), Key(Key) { searchFromStartOfCurrentIndex(); } DWARFDebugNames::ValueIterator::ValueIterator( const DWARFDebugNames::NameIndex &NI, StringRef Key) : CurrentIndex(&NI), IsLocal(true), Key(Key) { if (!findInCurrentIndex()) setEnd(); } iterator_range DWARFDebugNames::equal_range(StringRef Key) const { if (NameIndices.empty()) return make_range(ValueIterator(), ValueIterator()); return make_range(ValueIterator(*this, Key), ValueIterator()); } const DWARFDebugNames::NameIndex * DWARFDebugNames::getCUNameIndex(uint64_t CUOffset) { if (CUToNameIndex.size() == 0 && NameIndices.size() > 0) { for (const auto &NI : *this) { for (uint32_t CU = 0; CU < NI.getCUCount(); ++CU) CUToNameIndex.try_emplace(NI.getCUOffset(CU), &NI); } } return CUToNameIndex.lookup(CUOffset); } binaryen-version_108/third_party/llvm-project/DWARFAddressRange.cpp000066400000000000000000000020101423707623100255370ustar00rootroot00000000000000//===- DWARFDebugAranges.cpp ------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; void DWARFAddressRange::dump(raw_ostream &OS, uint32_t AddressSize, DIDumpOptions DumpOpts) const { OS << (DumpOpts.DisplayRawContents ? " " : "["); OS << format("0x%*.*" PRIx64 ", ", AddressSize * 2, AddressSize * 2, LowPC) << format("0x%*.*" PRIx64, AddressSize * 2, AddressSize * 2, HighPC); OS << (DumpOpts.DisplayRawContents ? "" : ")"); } raw_ostream &llvm::operator<<(raw_ostream &OS, const DWARFAddressRange &R) { R.dump(OS, /* AddressSize */ 8); return OS; } binaryen-version_108/third_party/llvm-project/DWARFCompileUnit.cpp000066400000000000000000000031021423707623100254300ustar00rootroot00000000000000//===-- DWARFCompileUnit.cpp ----------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/DebugInfo/DWARF/DWARFDie.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; void DWARFCompileUnit::dump(raw_ostream &OS, DIDumpOptions DumpOpts) { OS << format("0x%08" PRIx64, getOffset()) << ": Compile Unit:" << " length = " << format("0x%08" PRIx64, getLength()) << " version = " << format("0x%04x", getVersion()); if (getVersion() >= 5) OS << " unit_type = " << dwarf::UnitTypeString(getUnitType()); if (auto* Abbreviations = getAbbreviations()) { // XXX BINARYEN OS << " abbr_offset = " << format("0x%04" PRIx64, Abbreviations->getOffset()); } OS << " addr_size = " << format("0x%02x", getAddressByteSize()); if (getVersion() >= 5 && getUnitType() != dwarf::DW_UT_compile) OS << " DWO_id = " << format("0x%016" PRIx64, *getDWOId()); OS << " (next unit at " << format("0x%08" PRIx64, getNextUnitOffset()) << ")\n"; if (DWARFDie CUDie = getUnitDIE(false)) CUDie.dump(OS, 0, DumpOpts); else OS << "\n\n"; } // VTable anchor. DWARFCompileUnit::~DWARFCompileUnit() = default; binaryen-version_108/third_party/llvm-project/DWARFContext.cpp000066400000000000000000002111741423707623100246360ustar00rootroot00000000000000//===- DWARFContext.cpp ---------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h" #include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAddr.h" #include "llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAranges.h" #include "llvm/DebugInfo/DWARF/DWARFDebugFrame.h" #include "llvm/DebugInfo/DWARF/DWARFDebugLine.h" #include "llvm/DebugInfo/DWARF/DWARFDebugLoc.h" #include "llvm/DebugInfo/DWARF/DWARFDebugMacro.h" #include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h" #include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h" #include "llvm/DebugInfo/DWARF/DWARFDebugRnglists.h" #include "llvm/DebugInfo/DWARF/DWARFDie.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFGdbIndex.h" #include "llvm/DebugInfo/DWARF/DWARFSection.h" #include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h" #include "llvm/DebugInfo/DWARF/DWARFVerifier.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/Object/Decompressor.h" #include "llvm/Object/MachO.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Object/RelocationResolver.h" #include "llvm/Support/Casting.h" #include "llvm/Support/DataExtractor.h" #include "llvm/Support/Error.h" #include "llvm/Support/Format.h" #include "llvm/Support/LEB128.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include #include #include using namespace llvm; using namespace dwarf; using namespace object; #define DEBUG_TYPE "dwarf" using DWARFLineTable = DWARFDebugLine::LineTable; using FileLineInfoKind = DILineInfoSpecifier::FileLineInfoKind; using FunctionNameKind = DILineInfoSpecifier::FunctionNameKind; DWARFContext::DWARFContext(std::unique_ptr DObj, std::string DWPName) : DIContext(CK_DWARF), DWPName(std::move(DWPName)), DObj(std::move(DObj)) {} DWARFContext::~DWARFContext() = default; /// Dump the UUID load command. static void dumpUUID(raw_ostream &OS, const ObjectFile &Obj) { #if 0 // XXX BINARYEN auto *MachO = dyn_cast(&Obj); if (!MachO) return; for (auto LC : MachO->load_commands()) { raw_ostream::uuid_t UUID; if (LC.C.cmd == MachO::LC_UUID) { if (LC.C.cmdsize < sizeof(UUID) + sizeof(LC.C)) { OS << "error: UUID load command is too short.\n"; return; } OS << "UUID: "; memcpy(&UUID, LC.Ptr+sizeof(LC.C), sizeof(UUID)); OS.write_uuid(UUID); Triple T = MachO->getArchTriple(); OS << " (" << T.getArchName() << ')'; OS << ' ' << MachO->getFileName() << '\n'; } } #endif } using ContributionCollection = std::vector>; // Collect all the contributions to the string offsets table from all units, // sort them by their starting offsets and remove duplicates. static ContributionCollection collectContributionData(DWARFContext::unit_iterator_range Units) { ContributionCollection Contributions; for (const auto &U : Units) if (const auto &C = U->getStringOffsetsTableContribution()) Contributions.push_back(C); // Sort the contributions so that any invalid ones are placed at // the start of the contributions vector. This way they are reported // first. llvm::sort(Contributions, [](const Optional &L, const Optional &R) { if (L && R) return L->Base < R->Base; return R.hasValue(); }); // Uniquify contributions, as it is possible that units (specifically // type units in dwo or dwp files) share contributions. We don't want // to report them more than once. Contributions.erase( std::unique(Contributions.begin(), Contributions.end(), [](const Optional &L, const Optional &R) { if (L && R) return L->Base == R->Base && L->Size == R->Size; return false; }), Contributions.end()); return Contributions; } static void dumpDWARFv5StringOffsetsSection( raw_ostream &OS, StringRef SectionName, const DWARFObject &Obj, const DWARFSection &StringOffsetsSection, StringRef StringSection, DWARFContext::unit_iterator_range Units, bool LittleEndian) { auto Contributions = collectContributionData(Units); DWARFDataExtractor StrOffsetExt(Obj, StringOffsetsSection, LittleEndian, 0); DataExtractor StrData(StringSection, LittleEndian, 0); uint64_t SectionSize = StringOffsetsSection.Data.size(); uint64_t Offset = 0; for (auto &Contribution : Contributions) { // Report an ill-formed contribution. if (!Contribution) { OS << "error: invalid contribution to string offsets table in section ." << SectionName << ".\n"; return; } dwarf::DwarfFormat Format = Contribution->getFormat(); uint16_t Version = Contribution->getVersion(); uint64_t ContributionHeader = Contribution->Base; // In DWARF v5 there is a contribution header that immediately precedes // the string offsets base (the location we have previously retrieved from // the CU DIE's DW_AT_str_offsets attribute). The header is located either // 8 or 16 bytes before the base, depending on the contribution's format. if (Version >= 5) ContributionHeader -= Format == DWARF32 ? 8 : 16; // Detect overlapping contributions. if (Offset > ContributionHeader) { WithColor::error() << "overlapping contributions to string offsets table in section ." << SectionName << ".\n"; return; } // Report a gap in the table. if (Offset < ContributionHeader) { OS << format("0x%8.8" PRIx64 ": Gap, length = ", Offset); OS << (ContributionHeader - Offset) << "\n"; } OS << format("0x%8.8" PRIx64 ": ", ContributionHeader); // In DWARF v5 the contribution size in the descriptor does not equal // the originally encoded length (it does not contain the length of the // version field and the padding, a total of 4 bytes). Add them back in // for reporting. OS << "Contribution size = " << (Contribution->Size + (Version < 5 ? 0 : 4)) << ", Format = " << (Format == DWARF32 ? "DWARF32" : "DWARF64") << ", Version = " << Version << "\n"; Offset = Contribution->Base; unsigned EntrySize = Contribution->getDwarfOffsetByteSize(); while (Offset - Contribution->Base < Contribution->Size) { OS << format("0x%8.8" PRIx64 ": ", Offset); uint64_t StringOffset = StrOffsetExt.getRelocatedValue(EntrySize, &Offset); OS << format("%8.8" PRIx64 " ", StringOffset); const char *S = StrData.getCStr(&StringOffset); if (S) OS << format("\"%s\"", S); OS << "\n"; } } // Report a gap at the end of the table. if (Offset < SectionSize) { OS << format("0x%8.8" PRIx64 ": Gap, length = ", Offset); OS << (SectionSize - Offset) << "\n"; } } // Dump a DWARF string offsets section. This may be a DWARF v5 formatted // string offsets section, where each compile or type unit contributes a // number of entries (string offsets), with each contribution preceded by // a header containing size and version number. Alternatively, it may be a // monolithic series of string offsets, as generated by the pre-DWARF v5 // implementation of split DWARF. static void dumpStringOffsetsSection(raw_ostream &OS, StringRef SectionName, const DWARFObject &Obj, const DWARFSection &StringOffsetsSection, StringRef StringSection, DWARFContext::unit_iterator_range Units, bool LittleEndian, unsigned MaxVersion) { // If we have at least one (compile or type) unit with DWARF v5 or greater, // we assume that the section is formatted like a DWARF v5 string offsets // section. if (MaxVersion >= 5) dumpDWARFv5StringOffsetsSection(OS, SectionName, Obj, StringOffsetsSection, StringSection, Units, LittleEndian); else { DataExtractor strOffsetExt(StringOffsetsSection.Data, LittleEndian, 0); uint64_t offset = 0; uint64_t size = StringOffsetsSection.Data.size(); // Ensure that size is a multiple of the size of an entry. if (size & ((uint64_t)(sizeof(uint32_t) - 1))) { OS << "error: size of ." << SectionName << " is not a multiple of " << sizeof(uint32_t) << ".\n"; size &= -(uint64_t)sizeof(uint32_t); } DataExtractor StrData(StringSection, LittleEndian, 0); while (offset < size) { OS << format("0x%8.8" PRIx64 ": ", offset); uint64_t StringOffset = strOffsetExt.getU32(&offset); OS << format("%8.8" PRIx64 " ", StringOffset); const char *S = StrData.getCStr(&StringOffset); if (S) OS << format("\"%s\"", S); OS << "\n"; } } } // Dump the .debug_addr section. static void dumpAddrSection(raw_ostream &OS, DWARFDataExtractor &AddrData, DIDumpOptions DumpOpts, uint16_t Version, uint8_t AddrSize) { uint64_t Offset = 0; while (AddrData.isValidOffset(Offset)) { DWARFDebugAddrTable AddrTable; uint64_t TableOffset = Offset; if (Error Err = AddrTable.extract(AddrData, &Offset, Version, AddrSize, DWARFContext::dumpWarning)) { WithColor::error() << toString(std::move(Err)) << '\n'; // Keep going after an error, if we can, assuming that the length field // could be read. If it couldn't, stop reading the section. if (!AddrTable.hasValidLength()) break; Offset = TableOffset + AddrTable.getLength(); } else { AddrTable.dump(OS, DumpOpts); } } } // Dump the .debug_rnglists or .debug_rnglists.dwo section (DWARF v5). static void dumpRnglistsSection( raw_ostream &OS, DWARFDataExtractor &rnglistData, llvm::function_ref(uint32_t)> LookupPooledAddress, DIDumpOptions DumpOpts) { uint64_t Offset = 0; while (rnglistData.isValidOffset(Offset)) { llvm::DWARFDebugRnglistTable Rnglists; uint64_t TableOffset = Offset; if (Error Err = Rnglists.extract(rnglistData, &Offset)) { WithColor::error() << toString(std::move(Err)) << '\n'; uint64_t Length = Rnglists.length(); // Keep going after an error, if we can, assuming that the length field // could be read. If it couldn't, stop reading the section. if (Length == 0) break; Offset = TableOffset + Length; } else { Rnglists.dump(OS, LookupPooledAddress, DumpOpts); } } } static void dumpLoclistsSection(raw_ostream &OS, DIDumpOptions DumpOpts, DWARFDataExtractor Data, const MCRegisterInfo *MRI, Optional DumpOffset) { uint64_t Offset = 0; while (Data.isValidOffset(Offset)) { DWARFListTableHeader Header(".debug_loclists", "locations"); if (Error E = Header.extract(Data, &Offset)) { WithColor::error() << toString(std::move(E)) << '\n'; return; } Header.dump(OS, DumpOpts); uint64_t EndOffset = Header.length() + Header.getHeaderOffset(); Data.setAddressSize(Header.getAddrSize()); if (DumpOffset) { if (DumpOffset >= Offset && DumpOffset < EndOffset) { Offset = *DumpOffset; DWARFDebugLoclists::dumpLocationList(Data, &Offset, Header.getVersion(), OS, /*BaseAddr=*/0, MRI, nullptr, DumpOpts, /*Indent=*/0); OS << "\n"; return; } } else { DWARFDebugLoclists::dumpRange(Data, Offset, EndOffset - Offset, Header.getVersion(), OS, 0, MRI, DumpOpts); } Offset = EndOffset; } } void DWARFContext::dump( raw_ostream &OS, DIDumpOptions DumpOpts, std::array, DIDT_ID_Count> DumpOffsets) { uint64_t DumpType = DumpOpts.DumpType; StringRef Extension = sys::path::extension(DObj->getFileName()); bool IsDWO = (Extension == ".dwo") || (Extension == ".dwp"); #if 0 // XXX BINARYEN // Print UUID header. const auto *ObjFile = DObj->getFile(); if (DumpType & DIDT_UUID) dumpUUID(OS, *ObjFile); #endif // Print a header for each explicitly-requested section. // Otherwise just print one for non-empty sections. // Only print empty .dwo section headers when dumping a .dwo file. bool Explicit = DumpType != DIDT_All && !IsDWO; bool ExplicitDWO = Explicit && IsDWO; auto shouldDump = [&](bool Explicit, const char *Name, unsigned ID, StringRef Section) -> Optional * { unsigned Mask = 1U << ID; bool Should = (DumpType & Mask) && (Explicit || !Section.empty()); if (!Should) return nullptr; OS << "\n" << Name << " contents:\n"; return &DumpOffsets[ID]; }; // Dump individual sections. if (shouldDump(Explicit, ".debug_abbrev", DIDT_ID_DebugAbbrev, DObj->getAbbrevSection())) getDebugAbbrev()->dump(OS); if (shouldDump(ExplicitDWO, ".debug_abbrev.dwo", DIDT_ID_DebugAbbrev, DObj->getAbbrevDWOSection())) getDebugAbbrevDWO()->dump(OS); auto dumpDebugInfo = [&](const char *Name, unit_iterator_range Units) { OS << '\n' << Name << " contents:\n"; if (auto DumpOffset = DumpOffsets[DIDT_ID_DebugInfo]) for (const auto &U : Units) U->getDIEForOffset(DumpOffset.getValue()) .dump(OS, 0, DumpOpts.noImplicitRecursion()); else for (const auto &U : Units) U->dump(OS, DumpOpts); }; if ((DumpType & DIDT_DebugInfo)) { if (Explicit || getNumCompileUnits()) dumpDebugInfo(".debug_info", info_section_units()); if (ExplicitDWO || getNumDWOCompileUnits()) dumpDebugInfo(".debug_info.dwo", dwo_info_section_units()); } auto dumpDebugType = [&](const char *Name, unit_iterator_range Units) { OS << '\n' << Name << " contents:\n"; for (const auto &U : Units) if (auto DumpOffset = DumpOffsets[DIDT_ID_DebugTypes]) U->getDIEForOffset(*DumpOffset) .dump(OS, 0, DumpOpts.noImplicitRecursion()); else U->dump(OS, DumpOpts); }; if ((DumpType & DIDT_DebugTypes)) { if (Explicit || getNumTypeUnits()) dumpDebugType(".debug_types", types_section_units()); if (ExplicitDWO || getNumDWOTypeUnits()) dumpDebugType(".debug_types.dwo", dwo_types_section_units()); } if (const auto *Off = shouldDump(Explicit, ".debug_loc", DIDT_ID_DebugLoc, DObj->getLocSection().Data)) { getDebugLoc()->dump(OS, getRegisterInfo(), DumpOpts, *Off); } if (const auto *Off = shouldDump(Explicit, ".debug_loclists", DIDT_ID_DebugLoclists, DObj->getLoclistsSection().Data)) { DWARFDataExtractor Data(*DObj, DObj->getLoclistsSection(), isLittleEndian(), 0); dumpLoclistsSection(OS, DumpOpts, Data, getRegisterInfo(), *Off); } if (const auto *Off = shouldDump(ExplicitDWO, ".debug_loc.dwo", DIDT_ID_DebugLoc, DObj->getLocDWOSection().Data)) { DWARFDataExtractor Data(*DObj, DObj->getLocDWOSection(), isLittleEndian(), 4); if (*Off) { uint64_t Offset = **Off; DWARFDebugLoclists::dumpLocationList(Data, &Offset, /*Version=*/4, OS, /*BaseAddr=*/0, getRegisterInfo(), nullptr, DumpOpts, /*Indent=*/0); OS << "\n"; } else { DWARFDebugLoclists::dumpRange(Data, 0, Data.getData().size(), /*Version=*/4, OS, /*BaseAddr=*/0, getRegisterInfo(), DumpOpts); } } if (const auto *Off = shouldDump(Explicit, ".debug_frame", DIDT_ID_DebugFrame, DObj->getFrameSection().Data)) getDebugFrame()->dump(OS, getRegisterInfo(), *Off); if (const auto *Off = shouldDump(Explicit, ".eh_frame", DIDT_ID_DebugFrame, DObj->getEHFrameSection().Data)) getEHFrame()->dump(OS, getRegisterInfo(), *Off); if (DumpType & DIDT_DebugMacro) { if (Explicit || !getDebugMacro()->empty()) { OS << "\n.debug_macinfo contents:\n"; getDebugMacro()->dump(OS); } } if (shouldDump(Explicit, ".debug_aranges", DIDT_ID_DebugAranges, DObj->getArangesSection())) { uint64_t offset = 0; DataExtractor arangesData(DObj->getArangesSection(), isLittleEndian(), 0); DWARFDebugArangeSet set; while (set.extract(arangesData, &offset)) set.dump(OS); } auto DumpLineSection = [&](DWARFDebugLine::SectionParser Parser, DIDumpOptions DumpOpts, Optional DumpOffset) { while (!Parser.done()) { if (DumpOffset && Parser.getOffset() != *DumpOffset) { Parser.skip(dumpWarning); continue; } OS << "debug_line[" << format("0x%8.8" PRIx64, Parser.getOffset()) << "]\n"; if (DumpOpts.Verbose) { Parser.parseNext(dumpWarning, dumpWarning, &OS); } else { DWARFDebugLine::LineTable LineTable = Parser.parseNext(dumpWarning, dumpWarning); LineTable.dump(OS, DumpOpts); } } }; if (const auto *Off = shouldDump(Explicit, ".debug_line", DIDT_ID_DebugLine, DObj->getLineSection().Data)) { DWARFDataExtractor LineData(*DObj, DObj->getLineSection(), isLittleEndian(), 0); DWARFDebugLine::SectionParser Parser(LineData, *this, compile_units(), type_units()); DumpLineSection(Parser, DumpOpts, *Off); } if (const auto *Off = shouldDump(ExplicitDWO, ".debug_line.dwo", DIDT_ID_DebugLine, DObj->getLineDWOSection().Data)) { DWARFDataExtractor LineData(*DObj, DObj->getLineDWOSection(), isLittleEndian(), 0); DWARFDebugLine::SectionParser Parser(LineData, *this, dwo_compile_units(), dwo_type_units()); DumpLineSection(Parser, DumpOpts, *Off); } if (shouldDump(Explicit, ".debug_cu_index", DIDT_ID_DebugCUIndex, DObj->getCUIndexSection())) { getCUIndex().dump(OS); } if (shouldDump(Explicit, ".debug_tu_index", DIDT_ID_DebugTUIndex, DObj->getTUIndexSection())) { getTUIndex().dump(OS); } if (shouldDump(Explicit, ".debug_str", DIDT_ID_DebugStr, DObj->getStrSection())) { DataExtractor strData(DObj->getStrSection(), isLittleEndian(), 0); uint64_t offset = 0; uint64_t strOffset = 0; while (const char *s = strData.getCStr(&offset)) { OS << format("0x%8.8" PRIx64 ": \"%s\"\n", strOffset, s); strOffset = offset; } } if (shouldDump(ExplicitDWO, ".debug_str.dwo", DIDT_ID_DebugStr, DObj->getStrDWOSection())) { DataExtractor strDWOData(DObj->getStrDWOSection(), isLittleEndian(), 0); uint64_t offset = 0; uint64_t strDWOOffset = 0; while (const char *s = strDWOData.getCStr(&offset)) { OS << format("0x%8.8" PRIx64 ": \"%s\"\n", strDWOOffset, s); strDWOOffset = offset; } } if (shouldDump(Explicit, ".debug_line_str", DIDT_ID_DebugLineStr, DObj->getLineStrSection())) { DataExtractor strData(DObj->getLineStrSection(), isLittleEndian(), 0); uint64_t offset = 0; uint64_t strOffset = 0; while (const char *s = strData.getCStr(&offset)) { OS << format("0x%8.8" PRIx64 ": \"", strOffset); OS.write_escaped(s); OS << "\"\n"; strOffset = offset; } } if (shouldDump(Explicit, ".debug_addr", DIDT_ID_DebugAddr, DObj->getAddrSection().Data)) { DWARFDataExtractor AddrData(*DObj, DObj->getAddrSection(), isLittleEndian(), 0); dumpAddrSection(OS, AddrData, DumpOpts, getMaxVersion(), getCUAddrSize()); } if (shouldDump(Explicit, ".debug_ranges", DIDT_ID_DebugRanges, DObj->getRangesSection().Data)) { uint8_t savedAddressByteSize = getCUAddrSize(); DWARFDataExtractor rangesData(*DObj, DObj->getRangesSection(), isLittleEndian(), savedAddressByteSize); uint64_t offset = 0; DWARFDebugRangeList rangeList; while (rangesData.isValidOffset(offset)) { if (Error E = rangeList.extract(rangesData, &offset)) { WithColor::error() << toString(std::move(E)) << '\n'; break; } rangeList.dump(OS); } } auto LookupPooledAddress = [&](uint32_t Index) -> Optional { const auto &CUs = compile_units(); auto I = CUs.begin(); if (I == CUs.end()) return None; return (*I)->getAddrOffsetSectionItem(Index); }; if (shouldDump(Explicit, ".debug_rnglists", DIDT_ID_DebugRnglists, DObj->getRnglistsSection().Data)) { DWARFDataExtractor RnglistData(*DObj, DObj->getRnglistsSection(), isLittleEndian(), 0); dumpRnglistsSection(OS, RnglistData, LookupPooledAddress, DumpOpts); } if (shouldDump(ExplicitDWO, ".debug_rnglists.dwo", DIDT_ID_DebugRnglists, DObj->getRnglistsDWOSection().Data)) { DWARFDataExtractor RnglistData(*DObj, DObj->getRnglistsDWOSection(), isLittleEndian(), 0); dumpRnglistsSection(OS, RnglistData, LookupPooledAddress, DumpOpts); } if (shouldDump(Explicit, ".debug_pubnames", DIDT_ID_DebugPubnames, DObj->getPubnamesSection().Data)) DWARFDebugPubTable(*DObj, DObj->getPubnamesSection(), isLittleEndian(), false) .dump(OS); if (shouldDump(Explicit, ".debug_pubtypes", DIDT_ID_DebugPubtypes, DObj->getPubtypesSection().Data)) DWARFDebugPubTable(*DObj, DObj->getPubtypesSection(), isLittleEndian(), false) .dump(OS); if (shouldDump(Explicit, ".debug_gnu_pubnames", DIDT_ID_DebugGnuPubnames, DObj->getGnuPubnamesSection().Data)) DWARFDebugPubTable(*DObj, DObj->getGnuPubnamesSection(), isLittleEndian(), true /* GnuStyle */) .dump(OS); if (shouldDump(Explicit, ".debug_gnu_pubtypes", DIDT_ID_DebugGnuPubtypes, DObj->getGnuPubtypesSection().Data)) DWARFDebugPubTable(*DObj, DObj->getGnuPubtypesSection(), isLittleEndian(), true /* GnuStyle */) .dump(OS); if (shouldDump(Explicit, ".debug_str_offsets", DIDT_ID_DebugStrOffsets, DObj->getStrOffsetsSection().Data)) dumpStringOffsetsSection(OS, "debug_str_offsets", *DObj, DObj->getStrOffsetsSection(), DObj->getStrSection(), normal_units(), isLittleEndian(), getMaxVersion()); if (shouldDump(ExplicitDWO, ".debug_str_offsets.dwo", DIDT_ID_DebugStrOffsets, DObj->getStrOffsetsDWOSection().Data)) dumpStringOffsetsSection(OS, "debug_str_offsets.dwo", *DObj, DObj->getStrOffsetsDWOSection(), DObj->getStrDWOSection(), dwo_units(), isLittleEndian(), getMaxDWOVersion()); if (shouldDump(Explicit, ".gdb_index", DIDT_ID_GdbIndex, DObj->getGdbIndexSection())) { getGdbIndex().dump(OS); } if (shouldDump(Explicit, ".apple_names", DIDT_ID_AppleNames, DObj->getAppleNamesSection().Data)) getAppleNames().dump(OS); if (shouldDump(Explicit, ".apple_types", DIDT_ID_AppleTypes, DObj->getAppleTypesSection().Data)) getAppleTypes().dump(OS); if (shouldDump(Explicit, ".apple_namespaces", DIDT_ID_AppleNamespaces, DObj->getAppleNamespacesSection().Data)) getAppleNamespaces().dump(OS); if (shouldDump(Explicit, ".apple_objc", DIDT_ID_AppleObjC, DObj->getAppleObjCSection().Data)) getAppleObjC().dump(OS); if (shouldDump(Explicit, ".debug_names", DIDT_ID_DebugNames, DObj->getNamesSection().Data)) getDebugNames().dump(OS); } DWARFCompileUnit *DWARFContext::getDWOCompileUnitForHash(uint64_t Hash) { parseDWOUnits(LazyParse); if (const auto &CUI = getCUIndex()) { if (const auto *R = CUI.getFromHash(Hash)) return dyn_cast_or_null( DWOUnits.getUnitForIndexEntry(*R)); return nullptr; } // If there's no index, just search through the CUs in the DWO - there's // probably only one unless this is something like LTO - though an in-process // built/cached lookup table could be used in that case to improve repeated // lookups of different CUs in the DWO. for (const auto &DWOCU : dwo_compile_units()) { // Might not have parsed DWO ID yet. if (!DWOCU->getDWOId()) { if (Optional DWOId = toUnsigned(DWOCU->getUnitDIE().find(DW_AT_GNU_dwo_id))) DWOCU->setDWOId(*DWOId); else // No DWO ID? continue; } if (DWOCU->getDWOId() == Hash) return dyn_cast(DWOCU.get()); } return nullptr; } DWARFDie DWARFContext::getDIEForOffset(uint64_t Offset) { parseNormalUnits(); if (auto *CU = NormalUnits.getUnitForOffset(Offset)) return CU->getDIEForOffset(Offset); return DWARFDie(); } bool DWARFContext::verify(raw_ostream &OS, DIDumpOptions DumpOpts) { bool Success = true; DWARFVerifier verifier(OS, *this, DumpOpts); Success &= verifier.handleDebugAbbrev(); if (DumpOpts.DumpType & DIDT_DebugInfo) Success &= verifier.handleDebugInfo(); if (DumpOpts.DumpType & DIDT_DebugLine) Success &= verifier.handleDebugLine(); Success &= verifier.handleAccelTables(); return Success; } const DWARFUnitIndex &DWARFContext::getCUIndex() { if (CUIndex) return *CUIndex; DataExtractor CUIndexData(DObj->getCUIndexSection(), isLittleEndian(), 0); CUIndex = std::make_unique(DW_SECT_INFO); CUIndex->parse(CUIndexData); return *CUIndex; } const DWARFUnitIndex &DWARFContext::getTUIndex() { if (TUIndex) return *TUIndex; DataExtractor TUIndexData(DObj->getTUIndexSection(), isLittleEndian(), 0); TUIndex = std::make_unique(DW_SECT_TYPES); TUIndex->parse(TUIndexData); return *TUIndex; } DWARFGdbIndex &DWARFContext::getGdbIndex() { if (GdbIndex) return *GdbIndex; DataExtractor GdbIndexData(DObj->getGdbIndexSection(), true /*LE*/, 0); GdbIndex = std::make_unique(); GdbIndex->parse(GdbIndexData); return *GdbIndex; } const DWARFDebugAbbrev *DWARFContext::getDebugAbbrev() { if (Abbrev) return Abbrev.get(); DataExtractor abbrData(DObj->getAbbrevSection(), isLittleEndian(), 0); Abbrev.reset(new DWARFDebugAbbrev()); Abbrev->extract(abbrData); return Abbrev.get(); } const DWARFDebugAbbrev *DWARFContext::getDebugAbbrevDWO() { if (AbbrevDWO) return AbbrevDWO.get(); DataExtractor abbrData(DObj->getAbbrevDWOSection(), isLittleEndian(), 0); AbbrevDWO.reset(new DWARFDebugAbbrev()); AbbrevDWO->extract(abbrData); return AbbrevDWO.get(); } const DWARFDebugLoc *DWARFContext::getDebugLoc() { if (Loc) return Loc.get(); Loc.reset(new DWARFDebugLoc); // Assume all units have the same address byte size. if (getNumCompileUnits()) { DWARFDataExtractor LocData(*DObj, DObj->getLocSection(), isLittleEndian(), getUnitAtIndex(0)->getAddressByteSize()); Loc->parse(LocData); } return Loc.get(); } const DWARFDebugAranges *DWARFContext::getDebugAranges() { if (Aranges) return Aranges.get(); Aranges.reset(new DWARFDebugAranges()); Aranges->generate(this); return Aranges.get(); } const DWARFDebugFrame *DWARFContext::getDebugFrame() { if (DebugFrame) return DebugFrame.get(); // There's a "bug" in the DWARFv3 standard with respect to the target address // size within debug frame sections. While DWARF is supposed to be independent // of its container, FDEs have fields with size being "target address size", // which isn't specified in DWARF in general. It's only specified for CUs, but // .eh_frame can appear without a .debug_info section. Follow the example of // other tools (libdwarf) and extract this from the container (ObjectFile // provides this information). This problem is fixed in DWARFv4 // See this dwarf-discuss discussion for more details: // http://lists.dwarfstd.org/htdig.cgi/dwarf-discuss-dwarfstd.org/2011-December/001173.html DWARFDataExtractor debugFrameData(*DObj, DObj->getFrameSection(), isLittleEndian(), DObj->getAddressSize()); DebugFrame.reset(new DWARFDebugFrame(getArch(), false /* IsEH */)); DebugFrame->parse(debugFrameData); return DebugFrame.get(); } const DWARFDebugFrame *DWARFContext::getEHFrame() { if (EHFrame) return EHFrame.get(); DWARFDataExtractor debugFrameData(*DObj, DObj->getEHFrameSection(), isLittleEndian(), DObj->getAddressSize()); DebugFrame.reset(new DWARFDebugFrame(getArch(), true /* IsEH */)); DebugFrame->parse(debugFrameData); return DebugFrame.get(); } const DWARFDebugMacro *DWARFContext::getDebugMacro() { if (Macro) return Macro.get(); DataExtractor MacinfoData(DObj->getMacinfoSection(), isLittleEndian(), 0); Macro.reset(new DWARFDebugMacro()); Macro->parse(MacinfoData); return Macro.get(); } template static T &getAccelTable(std::unique_ptr &Cache, const DWARFObject &Obj, const DWARFSection &Section, StringRef StringSection, bool IsLittleEndian) { if (Cache) return *Cache; DWARFDataExtractor AccelSection(Obj, Section, IsLittleEndian, 0); DataExtractor StrData(StringSection, IsLittleEndian, 0); Cache.reset(new T(AccelSection, StrData)); if (Error E = Cache->extract()) llvm::consumeError(std::move(E)); return *Cache; } const DWARFDebugNames &DWARFContext::getDebugNames() { return getAccelTable(Names, *DObj, DObj->getNamesSection(), DObj->getStrSection(), isLittleEndian()); } const AppleAcceleratorTable &DWARFContext::getAppleNames() { return getAccelTable(AppleNames, *DObj, DObj->getAppleNamesSection(), DObj->getStrSection(), isLittleEndian()); } const AppleAcceleratorTable &DWARFContext::getAppleTypes() { return getAccelTable(AppleTypes, *DObj, DObj->getAppleTypesSection(), DObj->getStrSection(), isLittleEndian()); } const AppleAcceleratorTable &DWARFContext::getAppleNamespaces() { return getAccelTable(AppleNamespaces, *DObj, DObj->getAppleNamespacesSection(), DObj->getStrSection(), isLittleEndian()); } const AppleAcceleratorTable &DWARFContext::getAppleObjC() { return getAccelTable(AppleObjC, *DObj, DObj->getAppleObjCSection(), DObj->getStrSection(), isLittleEndian()); } const DWARFDebugLine::LineTable * DWARFContext::getLineTableForUnit(DWARFUnit *U) { Expected ExpectedLineTable = getLineTableForUnit(U, dumpWarning); if (!ExpectedLineTable) { dumpWarning(ExpectedLineTable.takeError()); return nullptr; } return *ExpectedLineTable; } Expected DWARFContext::getLineTableForUnit( DWARFUnit *U, std::function RecoverableErrorCallback) { if (!Line) Line.reset(new DWARFDebugLine); auto UnitDIE = U->getUnitDIE(); if (!UnitDIE) return nullptr; auto Offset = toSectionOffset(UnitDIE.find(DW_AT_stmt_list)); if (!Offset) return nullptr; // No line table for this compile unit. uint64_t stmtOffset = *Offset + U->getLineTableOffset(); // See if the line table is cached. if (const DWARFLineTable *lt = Line->getLineTable(stmtOffset)) return lt; // Make sure the offset is good before we try to parse. if (stmtOffset >= U->getLineSection().Data.size()) return nullptr; // We have to parse it first. DWARFDataExtractor lineData(*DObj, U->getLineSection(), isLittleEndian(), U->getAddressByteSize()); return Line->getOrParseLineTable(lineData, stmtOffset, *this, U, RecoverableErrorCallback); } void DWARFContext::parseNormalUnits() { if (!NormalUnits.empty()) return; DObj->forEachInfoSections([&](const DWARFSection &S) { NormalUnits.addUnitsForSection(*this, S, DW_SECT_INFO); }); NormalUnits.finishedInfoUnits(); DObj->forEachTypesSections([&](const DWARFSection &S) { NormalUnits.addUnitsForSection(*this, S, DW_SECT_TYPES); }); } void DWARFContext::parseDWOUnits(bool Lazy) { if (!DWOUnits.empty()) return; DObj->forEachInfoDWOSections([&](const DWARFSection &S) { DWOUnits.addUnitsForDWOSection(*this, S, DW_SECT_INFO, Lazy); }); DWOUnits.finishedInfoUnits(); DObj->forEachTypesDWOSections([&](const DWARFSection &S) { DWOUnits.addUnitsForDWOSection(*this, S, DW_SECT_TYPES, Lazy); }); } DWARFCompileUnit *DWARFContext::getCompileUnitForOffset(uint64_t Offset) { parseNormalUnits(); return dyn_cast_or_null( NormalUnits.getUnitForOffset(Offset)); } DWARFCompileUnit *DWARFContext::getCompileUnitForAddress(uint64_t Address) { // First, get the offset of the compile unit. uint64_t CUOffset = getDebugAranges()->findAddress(Address); // Retrieve the compile unit. return getCompileUnitForOffset(CUOffset); } DWARFContext::DIEsForAddress DWARFContext::getDIEsForAddress(uint64_t Address) { DIEsForAddress Result; DWARFCompileUnit *CU = getCompileUnitForAddress(Address); if (!CU) return Result; Result.CompileUnit = CU; Result.FunctionDIE = CU->getSubroutineForAddress(Address); std::vector Worklist; Worklist.push_back(Result.FunctionDIE); while (!Worklist.empty()) { DWARFDie DIE = Worklist.back(); Worklist.pop_back(); if (!DIE.isValid()) continue; if (DIE.getTag() == DW_TAG_lexical_block && DIE.addressRangeContainsAddress(Address)) { Result.BlockDIE = DIE; break; } for (auto Child : DIE) Worklist.push_back(Child); } return Result; } /// TODO: change input parameter from "uint64_t Address" /// into "SectionedAddress Address" static bool getFunctionNameAndStartLineForAddress(DWARFCompileUnit *CU, uint64_t Address, FunctionNameKind Kind, std::string &FunctionName, uint32_t &StartLine) { // The address may correspond to instruction in some inlined function, // so we have to build the chain of inlined functions and take the // name of the topmost function in it. SmallVector InlinedChain; CU->getInlinedChainForAddress(Address, InlinedChain); if (InlinedChain.empty()) return false; const DWARFDie &DIE = InlinedChain[0]; bool FoundResult = false; const char *Name = nullptr; if (Kind != FunctionNameKind::None && (Name = DIE.getSubroutineName(Kind))) { FunctionName = Name; FoundResult = true; } if (auto DeclLineResult = DIE.getDeclLine()) { StartLine = DeclLineResult; FoundResult = true; } return FoundResult; } static Optional getTypeSize(DWARFDie Type, uint64_t PointerSize) { if (auto SizeAttr = Type.find(DW_AT_byte_size)) if (Optional Size = SizeAttr->getAsUnsignedConstant()) return Size; switch (Type.getTag()) { case DW_TAG_pointer_type: case DW_TAG_reference_type: case DW_TAG_rvalue_reference_type: return PointerSize; case DW_TAG_ptr_to_member_type: { if (DWARFDie BaseType = Type.getAttributeValueAsReferencedDie(DW_AT_type)) if (BaseType.getTag() == DW_TAG_subroutine_type) return 2 * PointerSize; return PointerSize; } case DW_TAG_const_type: case DW_TAG_volatile_type: case DW_TAG_restrict_type: case DW_TAG_typedef: { if (DWARFDie BaseType = Type.getAttributeValueAsReferencedDie(DW_AT_type)) return getTypeSize(BaseType, PointerSize); break; } case DW_TAG_array_type: { DWARFDie BaseType = Type.getAttributeValueAsReferencedDie(DW_AT_type); if (!BaseType) return Optional(); Optional BaseSize = getTypeSize(BaseType, PointerSize); if (!BaseSize) return Optional(); uint64_t Size = *BaseSize; for (DWARFDie Child : Type) { if (Child.getTag() != DW_TAG_subrange_type) continue; if (auto ElemCountAttr = Child.find(DW_AT_count)) if (Optional ElemCount = ElemCountAttr->getAsUnsignedConstant()) Size *= *ElemCount; if (auto UpperBoundAttr = Child.find(DW_AT_upper_bound)) if (Optional UpperBound = UpperBoundAttr->getAsSignedConstant()) { int64_t LowerBound = 0; if (auto LowerBoundAttr = Child.find(DW_AT_lower_bound)) LowerBound = LowerBoundAttr->getAsSignedConstant().getValueOr(0); Size *= *UpperBound - LowerBound + 1; } } return Size; } default: break; } return Optional(); } void DWARFContext::addLocalsForDie(DWARFCompileUnit *CU, DWARFDie Subprogram, DWARFDie Die, std::vector &Result) { if (Die.getTag() == DW_TAG_variable || Die.getTag() == DW_TAG_formal_parameter) { DILocal Local; if (auto NameAttr = Subprogram.find(DW_AT_name)) if (Optional Name = NameAttr->getAsCString()) Local.FunctionName = *Name; if (auto LocationAttr = Die.find(DW_AT_location)) if (Optional> Location = LocationAttr->getAsBlock()) if (!Location->empty() && (*Location)[0] == DW_OP_fbreg) Local.FrameOffset = decodeSLEB128(Location->data() + 1, nullptr, Location->end()); if (auto TagOffsetAttr = Die.find(DW_AT_LLVM_tag_offset)) Local.TagOffset = TagOffsetAttr->getAsUnsignedConstant(); if (auto Origin = Die.getAttributeValueAsReferencedDie(DW_AT_abstract_origin)) Die = Origin; if (auto NameAttr = Die.find(DW_AT_name)) if (Optional Name = NameAttr->getAsCString()) Local.Name = *Name; if (auto Type = Die.getAttributeValueAsReferencedDie(DW_AT_type)) Local.Size = getTypeSize(Type, getCUAddrSize()); if (auto DeclFileAttr = Die.find(DW_AT_decl_file)) { if (const auto *LT = CU->getContext().getLineTableForUnit(CU)) LT->getFileNameByIndex( DeclFileAttr->getAsUnsignedConstant().getValue(), CU->getCompilationDir(), DILineInfoSpecifier::FileLineInfoKind::AbsoluteFilePath, Local.DeclFile); } if (auto DeclLineAttr = Die.find(DW_AT_decl_line)) Local.DeclLine = DeclLineAttr->getAsUnsignedConstant().getValue(); Result.push_back(Local); return; } if (Die.getTag() == DW_TAG_inlined_subroutine) if (auto Origin = Die.getAttributeValueAsReferencedDie(DW_AT_abstract_origin)) Subprogram = Origin; for (auto Child : Die) addLocalsForDie(CU, Subprogram, Child, Result); } std::vector DWARFContext::getLocalsForAddress(object::SectionedAddress Address) { std::vector Result; DWARFCompileUnit *CU = getCompileUnitForAddress(Address.Address); if (!CU) return Result; DWARFDie Subprogram = CU->getSubroutineForAddress(Address.Address); if (Subprogram.isValid()) addLocalsForDie(CU, Subprogram, Subprogram, Result); return Result; } DILineInfo DWARFContext::getLineInfoForAddress(object::SectionedAddress Address, DILineInfoSpecifier Spec) { DILineInfo Result; DWARFCompileUnit *CU = getCompileUnitForAddress(Address.Address); if (!CU) return Result; getFunctionNameAndStartLineForAddress(CU, Address.Address, Spec.FNKind, Result.FunctionName, Result.StartLine); if (Spec.FLIKind != FileLineInfoKind::None) { if (const DWARFLineTable *LineTable = getLineTableForUnit(CU)) { LineTable->getFileLineInfoForAddress( {Address.Address, Address.SectionIndex}, CU->getCompilationDir(), Spec.FLIKind, Result); } } return Result; } DILineInfoTable DWARFContext::getLineInfoForAddressRange( object::SectionedAddress Address, uint64_t Size, DILineInfoSpecifier Spec) { DILineInfoTable Lines; DWARFCompileUnit *CU = getCompileUnitForAddress(Address.Address); if (!CU) return Lines; uint32_t StartLine = 0; std::string FunctionName(DILineInfo::BadString); getFunctionNameAndStartLineForAddress(CU, Address.Address, Spec.FNKind, FunctionName, StartLine); // If the Specifier says we don't need FileLineInfo, just // return the top-most function at the starting address. if (Spec.FLIKind == FileLineInfoKind::None) { DILineInfo Result; Result.FunctionName = FunctionName; Result.StartLine = StartLine; Lines.push_back(std::make_pair(Address.Address, Result)); return Lines; } const DWARFLineTable *LineTable = getLineTableForUnit(CU); // Get the index of row we're looking for in the line table. std::vector RowVector; if (!LineTable->lookupAddressRange({Address.Address, Address.SectionIndex}, Size, RowVector)) { return Lines; } for (uint32_t RowIndex : RowVector) { // Take file number and line/column from the row. const DWARFDebugLine::Row &Row = LineTable->Rows[RowIndex]; DILineInfo Result; LineTable->getFileNameByIndex(Row.File, CU->getCompilationDir(), Spec.FLIKind, Result.FileName); Result.FunctionName = FunctionName; Result.Line = Row.Line; Result.Column = Row.Column; Result.StartLine = StartLine; Lines.push_back(std::make_pair(Row.Address.Address, Result)); } return Lines; } DIInliningInfo DWARFContext::getInliningInfoForAddress(object::SectionedAddress Address, DILineInfoSpecifier Spec) { DIInliningInfo InliningInfo; DWARFCompileUnit *CU = getCompileUnitForAddress(Address.Address); if (!CU) return InliningInfo; const DWARFLineTable *LineTable = nullptr; SmallVector InlinedChain; CU->getInlinedChainForAddress(Address.Address, InlinedChain); if (InlinedChain.size() == 0) { // If there is no DIE for address (e.g. it is in unavailable .dwo file), // try to at least get file/line info from symbol table. if (Spec.FLIKind != FileLineInfoKind::None) { DILineInfo Frame; LineTable = getLineTableForUnit(CU); if (LineTable && LineTable->getFileLineInfoForAddress( {Address.Address, Address.SectionIndex}, CU->getCompilationDir(), Spec.FLIKind, Frame)) InliningInfo.addFrame(Frame); } return InliningInfo; } uint32_t CallFile = 0, CallLine = 0, CallColumn = 0, CallDiscriminator = 0; for (uint32_t i = 0, n = InlinedChain.size(); i != n; i++) { DWARFDie &FunctionDIE = InlinedChain[i]; DILineInfo Frame; // Get function name if necessary. if (const char *Name = FunctionDIE.getSubroutineName(Spec.FNKind)) Frame.FunctionName = Name; if (auto DeclLineResult = FunctionDIE.getDeclLine()) Frame.StartLine = DeclLineResult; if (Spec.FLIKind != FileLineInfoKind::None) { if (i == 0) { // For the topmost frame, initialize the line table of this // compile unit and fetch file/line info from it. LineTable = getLineTableForUnit(CU); // For the topmost routine, get file/line info from line table. if (LineTable) LineTable->getFileLineInfoForAddress( {Address.Address, Address.SectionIndex}, CU->getCompilationDir(), Spec.FLIKind, Frame); } else { // Otherwise, use call file, call line and call column from // previous DIE in inlined chain. if (LineTable) LineTable->getFileNameByIndex(CallFile, CU->getCompilationDir(), Spec.FLIKind, Frame.FileName); Frame.Line = CallLine; Frame.Column = CallColumn; Frame.Discriminator = CallDiscriminator; } // Get call file/line/column of a current DIE. if (i + 1 < n) { FunctionDIE.getCallerFrame(CallFile, CallLine, CallColumn, CallDiscriminator); } } InliningInfo.addFrame(Frame); } return InliningInfo; } std::shared_ptr DWARFContext::getDWOContext(StringRef AbsolutePath) { #if 0 if (auto S = DWP.lock()) { DWARFContext *Ctxt = S->Context.get(); return std::shared_ptr(std::move(S), Ctxt); } std::weak_ptr *Entry = &DWOFiles[AbsolutePath]; if (auto S = Entry->lock()) { DWARFContext *Ctxt = S->Context.get(); return std::shared_ptr(std::move(S), Ctxt); } Expected> Obj = [&] { if (!CheckedForDWP) { SmallString<128> DWPName; auto Obj = object::ObjectFile::createObjectFile( this->DWPName.empty() ? (DObj->getFileName() + ".dwp").toStringRef(DWPName) : StringRef(this->DWPName)); if (Obj) { Entry = &DWP; return Obj; } else { CheckedForDWP = true; // TODO: Should this error be handled (maybe in a high verbosity mode) // before falling back to .dwo files? consumeError(Obj.takeError()); } } return object::ObjectFile::createObjectFile(AbsolutePath); }(); if (!Obj) { // TODO: Actually report errors helpfully. consumeError(Obj.takeError()); return nullptr; } auto S = std::make_shared(); S->File = std::move(Obj.get()); S->Context = DWARFContext::create(*S->File.getBinary()); *Entry = S; auto *Ctxt = S->Context.get(); return std::shared_ptr(std::move(S), Ctxt); #else llvm_unreachable("XXX BINARYEN DWO"); #endif } static Error createError(const Twine &Reason, llvm::Error E) { return make_error(Reason + toString(std::move(E)), inconvertibleErrorCode()); } /// SymInfo contains information about symbol: it's address /// and section index which is -1LL for absolute symbols. struct SymInfo { uint64_t Address; uint64_t SectionIndex; }; /// Returns the address of symbol relocation used against and a section index. /// Used for futher relocations computation. Symbol's section load address is static Expected getSymbolInfo(const object::ObjectFile &Obj, const RelocationRef &Reloc, const LoadedObjectInfo *L, std::map &Cache) { SymInfo Ret = {0, (uint64_t)-1LL}; object::section_iterator RSec = Obj.section_end(); object::symbol_iterator Sym = Reloc.getSymbol(); std::map::iterator CacheIt = Cache.end(); // First calculate the address of the symbol or section as it appears // in the object file if (Sym != Obj.symbol_end()) { bool New; std::tie(CacheIt, New) = Cache.insert({*Sym, {0, 0}}); if (!New) return CacheIt->second; Expected SymAddrOrErr = Sym->getAddress(); if (!SymAddrOrErr) return createError("failed to compute symbol address: ", SymAddrOrErr.takeError()); // Also remember what section this symbol is in for later auto SectOrErr = Sym->getSection(); if (!SectOrErr) return createError("failed to get symbol section: ", SectOrErr.takeError()); RSec = *SectOrErr; Ret.Address = *SymAddrOrErr; #if 0 // XXX BINARYEN } else if (auto *MObj = dyn_cast(&Obj)) { RSec = MObj->getRelocationSection(Reloc.getRawDataRefImpl()); Ret.Address = RSec->getAddress(); #endif } if (RSec != Obj.section_end()) Ret.SectionIndex = RSec->getIndex(); // If we are given load addresses for the sections, we need to adjust: // SymAddr = (Address of Symbol Or Section in File) - // (Address of Section in File) + // (Load Address of Section) // RSec is now either the section being targeted or the section // containing the symbol being targeted. In either case, // we need to perform the same computation. if (L && RSec != Obj.section_end()) if (uint64_t SectionLoadAddress = L->getSectionLoadAddress(*RSec)) Ret.Address += SectionLoadAddress - RSec->getAddress(); if (CacheIt != Cache.end()) CacheIt->second = Ret; return Ret; } #if 0 // XXX BINARYEN static bool isRelocScattered(const object::ObjectFile &Obj, const RelocationRef &Reloc) { const MachOObjectFile *MachObj = dyn_cast(&Obj); if (!MachObj) return false; // MachO also has relocations that point to sections and // scattered relocations. auto RelocInfo = MachObj->getRelocation(Reloc.getRawDataRefImpl()); return MachObj->isRelocationScattered(RelocInfo); } #endif ErrorPolicy DWARFContext::defaultErrorHandler(Error E) { WithColor::error() << toString(std::move(E)) << '\n'; return ErrorPolicy::Continue; } namespace { struct DWARFSectionMap final : public DWARFSection { RelocAddrMap Relocs; }; class DWARFObjInMemory final : public DWARFObject { bool IsLittleEndian; uint8_t AddressSize; StringRef FileName; const object::ObjectFile *Obj = nullptr; std::vector SectionNames; using InfoSectionMap = MapVector>; InfoSectionMap InfoSections; InfoSectionMap TypesSections; InfoSectionMap InfoDWOSections; InfoSectionMap TypesDWOSections; DWARFSectionMap LocSection; DWARFSectionMap LoclistsSection; DWARFSectionMap LineSection; DWARFSectionMap RangesSection; DWARFSectionMap RnglistsSection; DWARFSectionMap StrOffsetsSection; DWARFSectionMap LineDWOSection; DWARFSectionMap FrameSection; DWARFSectionMap EHFrameSection; DWARFSectionMap LocDWOSection; DWARFSectionMap StrOffsetsDWOSection; DWARFSectionMap RangesDWOSection; DWARFSectionMap RnglistsDWOSection; DWARFSectionMap AddrSection; DWARFSectionMap AppleNamesSection; DWARFSectionMap AppleTypesSection; DWARFSectionMap AppleNamespacesSection; DWARFSectionMap AppleObjCSection; DWARFSectionMap NamesSection; DWARFSectionMap PubnamesSection; DWARFSectionMap PubtypesSection; DWARFSectionMap GnuPubnamesSection; DWARFSectionMap GnuPubtypesSection; DWARFSectionMap *mapNameToDWARFSection(StringRef Name) { return StringSwitch(Name) .Case("debug_loc", &LocSection) .Case("debug_loclists", &LoclistsSection) .Case("debug_line", &LineSection) .Case("debug_frame", &FrameSection) .Case("eh_frame", &EHFrameSection) .Case("debug_str_offsets", &StrOffsetsSection) .Case("debug_ranges", &RangesSection) .Case("debug_rnglists", &RnglistsSection) .Case("debug_loc.dwo", &LocDWOSection) .Case("debug_line.dwo", &LineDWOSection) .Case("debug_names", &NamesSection) .Case("debug_rnglists.dwo", &RnglistsDWOSection) .Case("debug_str_offsets.dwo", &StrOffsetsDWOSection) .Case("debug_addr", &AddrSection) .Case("apple_names", &AppleNamesSection) .Case("debug_pubnames", &PubnamesSection) .Case("debug_pubtypes", &PubtypesSection) .Case("debug_gnu_pubnames", &GnuPubnamesSection) .Case("debug_gnu_pubtypes", &GnuPubtypesSection) .Case("apple_types", &AppleTypesSection) .Case("apple_namespaces", &AppleNamespacesSection) .Case("apple_namespac", &AppleNamespacesSection) .Case("apple_objc", &AppleObjCSection) .Default(nullptr); } StringRef AbbrevSection; StringRef ArangesSection; StringRef StrSection; StringRef MacinfoSection; StringRef AbbrevDWOSection; StringRef StrDWOSection; StringRef CUIndexSection; StringRef GdbIndexSection; StringRef TUIndexSection; StringRef LineStrSection; // A deque holding section data whose iterators are not invalidated when // new decompressed sections are inserted at the end. std::deque> UncompressedSections; StringRef *mapSectionToMember(StringRef Name) { if (DWARFSection *Sec = mapNameToDWARFSection(Name)) return &Sec->Data; return StringSwitch(Name) .Case("debug_abbrev", &AbbrevSection) .Case("debug_aranges", &ArangesSection) .Case("debug_str", &StrSection) .Case("debug_macinfo", &MacinfoSection) .Case("debug_abbrev.dwo", &AbbrevDWOSection) .Case("debug_str.dwo", &StrDWOSection) .Case("debug_cu_index", &CUIndexSection) .Case("debug_tu_index", &TUIndexSection) .Case("gdb_index", &GdbIndexSection) .Case("debug_line_str", &LineStrSection) // Any more debug info sections go here. .Default(nullptr); } /// If Sec is compressed section, decompresses and updates its contents /// provided by Data. Otherwise leaves it unchanged. Error maybeDecompress(const object::SectionRef &Sec, StringRef Name, StringRef &Data) { #if 1 // XXX BINARYEN errs() << "maybeDecompress?\n"; return Error::success(); #else if (!Decompressor::isCompressed(Sec)) return Error::success(); Expected Decompressor = Decompressor::create(Name, Data, IsLittleEndian, AddressSize == 8); if (!Decompressor) return Decompressor.takeError(); SmallString<0> Out; if (auto Err = Decompressor->resizeAndDecompress(Out)) return Err; UncompressedSections.push_back(std::move(Out)); Data = UncompressedSections.back(); return Error::success(); #endif } public: DWARFObjInMemory(const StringMap> &Sections, uint8_t AddrSize, bool IsLittleEndian) : IsLittleEndian(IsLittleEndian), AddressSize(4) // XXX BINARYEN { for (const auto &SecIt : Sections) { if (StringRef *SectionData = mapSectionToMember(SecIt.first())) *SectionData = SecIt.second->getBuffer(); else if (SecIt.first() == "debug_info") // Find debug_info and debug_types data by section rather than name as // there are multiple, comdat grouped, of these sections. InfoSections[SectionRef()].Data = SecIt.second->getBuffer(); else if (SecIt.first() == "debug_info.dwo") InfoDWOSections[SectionRef()].Data = SecIt.second->getBuffer(); else if (SecIt.first() == "debug_types") TypesSections[SectionRef()].Data = SecIt.second->getBuffer(); else if (SecIt.first() == "debug_types.dwo") TypesDWOSections[SectionRef()].Data = SecIt.second->getBuffer(); } } DWARFObjInMemory(const object::ObjectFile &Obj, const LoadedObjectInfo *L, function_ref HandleError) : IsLittleEndian(Obj.isLittleEndian()), AddressSize(Obj.getBytesInAddress()), FileName(Obj.getFileName()), Obj(&Obj) { StringMap SectionAmountMap; for (const SectionRef &Section : Obj.sections()) { StringRef Name; if (auto NameOrErr = Section.getName()) Name = *NameOrErr; else consumeError(NameOrErr.takeError()); ++SectionAmountMap[Name]; SectionNames.push_back({ Name, true }); // Skip BSS and Virtual sections, they aren't interesting. if (Section.isBSS() || Section.isVirtual()) continue; // Skip sections stripped by dsymutil. if (Section.isStripped()) continue; StringRef Data; Expected SecOrErr = Section.getRelocatedSection(); if (!SecOrErr) { ErrorPolicy EP = HandleError(createError( "failed to get relocated section: ", SecOrErr.takeError())); if (EP == ErrorPolicy::Halt) return; continue; } // Try to obtain an already relocated version of this section. // Else use the unrelocated section from the object file. We'll have to // apply relocations ourselves later. section_iterator RelocatedSection = *SecOrErr; if (!L || !L->getLoadedSectionContents(*RelocatedSection, Data)) { Expected E = Section.getContents(); if (E) Data = *E; else // maybeDecompress below will error. consumeError(E.takeError()); } if (auto Err = maybeDecompress(Section, Name, Data)) { ErrorPolicy EP = HandleError(createError( "failed to decompress '" + Name + "', ", std::move(Err))); if (EP == ErrorPolicy::Halt) return; continue; } // Compressed sections names in GNU style starts from ".z", // at this point section is decompressed and we drop compression prefix. Name = Name.substr( Name.find_first_not_of("._z")); // Skip ".", "z" and "_" prefixes. // Map platform specific debug section names to DWARF standard section // names. Name = Obj.mapDebugSectionName(Name); if (StringRef *SectionData = mapSectionToMember(Name)) { *SectionData = Data; if (Name == "debug_ranges") { // FIXME: Use the other dwo range section when we emit it. RangesDWOSection.Data = Data; } } else if (Name == "debug_info") { // Find debug_info and debug_types data by section rather than name as // there are multiple, comdat grouped, of these sections. InfoSections[Section].Data = Data; } else if (Name == "debug_info.dwo") { InfoDWOSections[Section].Data = Data; } else if (Name == "debug_types") { TypesSections[Section].Data = Data; } else if (Name == "debug_types.dwo") { TypesDWOSections[Section].Data = Data; } if (RelocatedSection == Obj.section_end()) continue; StringRef RelSecName; if (auto NameOrErr = RelocatedSection->getName()) RelSecName = *NameOrErr; else consumeError(NameOrErr.takeError()); // If the section we're relocating was relocated already by the JIT, // then we used the relocated version above, so we do not need to process // relocations for it now. StringRef RelSecData; if (L && L->getLoadedSectionContents(*RelocatedSection, RelSecData)) continue; // In Mach-o files, the relocations do not need to be applied if // there is no load offset to apply. The value read at the // relocation point already factors in the section address // (actually applying the relocations will produce wrong results // as the section address will be added twice). if (!L && isa(&Obj)) continue; RelSecName = RelSecName.substr( RelSecName.find_first_not_of("._z")); // Skip . and _ prefixes. // TODO: Add support for relocations in other sections as needed. // Record relocations for the debug_info and debug_line sections. DWARFSectionMap *Sec = mapNameToDWARFSection(RelSecName); RelocAddrMap *Map = Sec ? &Sec->Relocs : nullptr; if (!Map) { // Find debug_info and debug_types relocs by section rather than name // as there are multiple, comdat grouped, of these sections. if (RelSecName == "debug_info") Map = &static_cast(InfoSections[*RelocatedSection]) .Relocs; else if (RelSecName == "debug_info.dwo") Map = &static_cast( InfoDWOSections[*RelocatedSection]) .Relocs; else if (RelSecName == "debug_types") Map = &static_cast(TypesSections[*RelocatedSection]) .Relocs; else if (RelSecName == "debug_types.dwo") Map = &static_cast( TypesDWOSections[*RelocatedSection]) .Relocs; else continue; } if (Section.relocation_begin() == Section.relocation_end()) continue; #if 1 // XXX BINARYEN errs() << "relocation?\n"; #else // Symbol to [address, section index] cache mapping. std::map AddrCache; bool (*Supports)(uint64_t); RelocationResolver Resolver; std::tie(Supports, Resolver) = getRelocationResolver(Obj); for (const RelocationRef &Reloc : Section.relocations()) { // FIXME: it's not clear how to correctly handle scattered // relocations. if (isRelocScattered(Obj, Reloc)) continue; Expected SymInfoOrErr = getSymbolInfo(Obj, Reloc, L, AddrCache); if (!SymInfoOrErr) { if (HandleError(SymInfoOrErr.takeError()) == ErrorPolicy::Halt) return; continue; } // Check if Resolver can handle this relocation type early so as not to // handle invalid cases in DWARFDataExtractor. // // TODO Don't store Resolver in every RelocAddrEntry. if (Supports && Supports(Reloc.getType())) { auto I = Map->try_emplace( Reloc.getOffset(), RelocAddrEntry{SymInfoOrErr->SectionIndex, Reloc, SymInfoOrErr->Address, Optional(), 0, Resolver}); // If we didn't successfully insert that's because we already had a // relocation for that offset. Store it as a second relocation in the // same RelocAddrEntry instead. if (!I.second) { RelocAddrEntry &entry = I.first->getSecond(); if (entry.Reloc2) { ErrorPolicy EP = HandleError(createError( "At most two relocations per offset are supported")); if (EP == ErrorPolicy::Halt) return; } entry.Reloc2 = Reloc; entry.SymbolValue2 = SymInfoOrErr->Address; } } else { SmallString<32> Type; Reloc.getTypeName(Type); ErrorPolicy EP = HandleError( createError("failed to compute relocation: " + Type + ", ", errorCodeToError(object_error::parse_failed))); if (EP == ErrorPolicy::Halt) return; } } #endif } for (SectionName &S : SectionNames) if (SectionAmountMap[S.Name] > 1) S.IsNameUnique = false; } Optional find(const DWARFSection &S, uint64_t Pos) const override { auto &Sec = static_cast(S); RelocAddrMap::const_iterator AI = Sec.Relocs.find(Pos); if (AI == Sec.Relocs.end()) return None; return AI->second; } const object::ObjectFile *getFile() const override { return Obj; } ArrayRef getSectionNames() const override { return SectionNames; } bool isLittleEndian() const override { return IsLittleEndian; } StringRef getAbbrevDWOSection() const override { return AbbrevDWOSection; } const DWARFSection &getLineDWOSection() const override { return LineDWOSection; } const DWARFSection &getLocDWOSection() const override { return LocDWOSection; } StringRef getStrDWOSection() const override { return StrDWOSection; } const DWARFSection &getStrOffsetsDWOSection() const override { return StrOffsetsDWOSection; } const DWARFSection &getRangesDWOSection() const override { return RangesDWOSection; } const DWARFSection &getRnglistsDWOSection() const override { return RnglistsDWOSection; } const DWARFSection &getAddrSection() const override { return AddrSection; } StringRef getCUIndexSection() const override { return CUIndexSection; } StringRef getGdbIndexSection() const override { return GdbIndexSection; } StringRef getTUIndexSection() const override { return TUIndexSection; } // DWARF v5 const DWARFSection &getStrOffsetsSection() const override { return StrOffsetsSection; } StringRef getLineStrSection() const override { return LineStrSection; } // Sections for DWARF5 split dwarf proposal. void forEachInfoDWOSections( function_ref F) const override { for (auto &P : InfoDWOSections) F(P.second); } void forEachTypesDWOSections( function_ref F) const override { for (auto &P : TypesDWOSections) F(P.second); } StringRef getAbbrevSection() const override { return AbbrevSection; } const DWARFSection &getLocSection() const override { return LocSection; } const DWARFSection &getLoclistsSection() const override { return LoclistsSection; } StringRef getArangesSection() const override { return ArangesSection; } const DWARFSection &getFrameSection() const override { return FrameSection; } const DWARFSection &getEHFrameSection() const override { return EHFrameSection; } const DWARFSection &getLineSection() const override { return LineSection; } StringRef getStrSection() const override { return StrSection; } const DWARFSection &getRangesSection() const override { return RangesSection; } const DWARFSection &getRnglistsSection() const override { return RnglistsSection; } StringRef getMacinfoSection() const override { return MacinfoSection; } const DWARFSection &getPubnamesSection() const override { return PubnamesSection; } const DWARFSection &getPubtypesSection() const override { return PubtypesSection; } const DWARFSection &getGnuPubnamesSection() const override { return GnuPubnamesSection; } const DWARFSection &getGnuPubtypesSection() const override { return GnuPubtypesSection; } const DWARFSection &getAppleNamesSection() const override { return AppleNamesSection; } const DWARFSection &getAppleTypesSection() const override { return AppleTypesSection; } const DWARFSection &getAppleNamespacesSection() const override { return AppleNamespacesSection; } const DWARFSection &getAppleObjCSection() const override { return AppleObjCSection; } const DWARFSection &getNamesSection() const override { return NamesSection; } StringRef getFileName() const override { return FileName; } uint8_t getAddressSize() const override { return AddressSize; } void forEachInfoSections( function_ref F) const override { for (auto &P : InfoSections) F(P.second); } void forEachTypesSections( function_ref F) const override { for (auto &P : TypesSections) F(P.second); } }; } // namespace #if 0 // XXX BINARYEN std::unique_ptr DWARFContext::create(const object::ObjectFile &Obj, const LoadedObjectInfo *L, function_ref HandleError, std::string DWPName) { auto DObj = std::make_unique(Obj, L, HandleError); return std::make_unique(std::move(DObj), std::move(DWPName)); } #endif std::unique_ptr DWARFContext::create(const StringMap> &Sections, uint8_t AddrSize, bool isLittleEndian) { auto DObj = std::make_unique(Sections, AddrSize, isLittleEndian); return std::make_unique(std::move(DObj), ""); } Error DWARFContext::loadRegisterInfo(const object::ObjectFile &Obj) { llvm_unreachable("loadRegisterInfo"); // XXX BINARYEN } uint8_t DWARFContext::getCUAddrSize() { // In theory, different compile units may have different address byte // sizes, but for simplicity we just use the address byte size of the // last compile unit. In practice the address size field is repeated across // various DWARF headers (at least in version 5) to make it easier to dump // them independently, not to enable varying the address size. uint8_t Addr = 0; for (const auto &CU : compile_units()) { Addr = CU->getAddressByteSize(); break; } return Addr; } void DWARFContext::dumpWarning(Error Warning) { handleAllErrors(std::move(Warning), [](ErrorInfoBase &Info) { WithColor::warning() << Info.message() << '\n'; }); } binaryen-version_108/third_party/llvm-project/DWARFDataExtractor.cpp000066400000000000000000000053251423707623100257560ustar00rootroot00000000000000//===- DWARFDataExtractor.cpp ---------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" using namespace llvm; uint64_t DWARFDataExtractor::getRelocatedValue(uint32_t Size, uint64_t *Off, uint64_t *SecNdx, Error *Err) const { if (SecNdx) *SecNdx = object::SectionedAddress::UndefSection; if (!Section) return getUnsigned(Off, Size, Err); Optional E = Obj->find(*Section, *Off); uint64_t A = getUnsigned(Off, Size, Err); if (!E) return A; if (SecNdx) *SecNdx = E->SectionIndex; uint64_t R = E->Resolver(E->Reloc, E->SymbolValue, A); if (E->Reloc2) R = E->Resolver(*E->Reloc2, E->SymbolValue2, R); return R; } Optional DWARFDataExtractor::getEncodedPointer(uint64_t *Offset, uint8_t Encoding, uint64_t PCRelOffset) const { if (Encoding == dwarf::DW_EH_PE_omit) return None; uint64_t Result = 0; uint64_t OldOffset = *Offset; // First get value switch (Encoding & 0x0F) { case dwarf::DW_EH_PE_absptr: switch (getAddressSize()) { case 2: case 4: case 8: Result = getUnsigned(Offset, getAddressSize()); break; default: return None; } break; case dwarf::DW_EH_PE_uleb128: Result = getULEB128(Offset); break; case dwarf::DW_EH_PE_sleb128: Result = getSLEB128(Offset); break; case dwarf::DW_EH_PE_udata2: Result = getUnsigned(Offset, 2); break; case dwarf::DW_EH_PE_udata4: Result = getUnsigned(Offset, 4); break; case dwarf::DW_EH_PE_udata8: Result = getUnsigned(Offset, 8); break; case dwarf::DW_EH_PE_sdata2: Result = getSigned(Offset, 2); break; case dwarf::DW_EH_PE_sdata4: Result = getSigned(Offset, 4); break; case dwarf::DW_EH_PE_sdata8: Result = getSigned(Offset, 8); break; default: return None; } // Then add relative offset, if required switch (Encoding & 0x70) { case dwarf::DW_EH_PE_absptr: // do nothing break; case dwarf::DW_EH_PE_pcrel: Result += PCRelOffset; break; case dwarf::DW_EH_PE_datarel: case dwarf::DW_EH_PE_textrel: case dwarf::DW_EH_PE_funcrel: case dwarf::DW_EH_PE_aligned: default: *Offset = OldOffset; return None; } return Result; } binaryen-version_108/third_party/llvm-project/DWARFDebugAbbrev.cpp000066400000000000000000000073531423707623100253640ustar00rootroot00000000000000//===- DWARFDebugAbbrev.cpp -----------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include #include #include using namespace llvm; DWARFAbbreviationDeclarationSet::DWARFAbbreviationDeclarationSet() { clear(); } void DWARFAbbreviationDeclarationSet::clear() { Offset = 0; FirstAbbrCode = 0; Decls.clear(); } bool DWARFAbbreviationDeclarationSet::extract(DataExtractor Data, uint64_t *OffsetPtr) { clear(); const uint64_t BeginOffset = *OffsetPtr; Offset = BeginOffset; DWARFAbbreviationDeclaration AbbrDecl; uint32_t PrevAbbrCode = 0; while (AbbrDecl.extract(Data, OffsetPtr)) { if (FirstAbbrCode == 0) { FirstAbbrCode = AbbrDecl.getCode(); } else { if (PrevAbbrCode + 1 != AbbrDecl.getCode()) { // Codes are not consecutive, can't do O(1) lookups. FirstAbbrCode = UINT32_MAX; } } PrevAbbrCode = AbbrDecl.getCode(); Decls.push_back(std::move(AbbrDecl)); } return BeginOffset != *OffsetPtr; } void DWARFAbbreviationDeclarationSet::dump(raw_ostream &OS) const { for (const auto &Decl : Decls) Decl.dump(OS); } const DWARFAbbreviationDeclaration * DWARFAbbreviationDeclarationSet::getAbbreviationDeclaration( uint32_t AbbrCode) const { if (FirstAbbrCode == UINT32_MAX) { for (const auto &Decl : Decls) { if (Decl.getCode() == AbbrCode) return &Decl; } return nullptr; } if (AbbrCode < FirstAbbrCode || AbbrCode >= FirstAbbrCode + Decls.size()) return nullptr; return &Decls[AbbrCode - FirstAbbrCode]; } DWARFDebugAbbrev::DWARFDebugAbbrev() { clear(); } void DWARFDebugAbbrev::clear() { AbbrDeclSets.clear(); PrevAbbrOffsetPos = AbbrDeclSets.end(); } void DWARFDebugAbbrev::extract(DataExtractor Data) { clear(); this->Data = Data; } void DWARFDebugAbbrev::parse() const { if (!Data) return; uint64_t Offset = 0; auto I = AbbrDeclSets.begin(); while (Data->isValidOffset(Offset)) { while (I != AbbrDeclSets.end() && I->first < Offset) ++I; uint64_t CUAbbrOffset = Offset; DWARFAbbreviationDeclarationSet AbbrDecls; if (!AbbrDecls.extract(*Data, &Offset)) break; AbbrDeclSets.insert(I, std::make_pair(CUAbbrOffset, std::move(AbbrDecls))); } Data = None; } void DWARFDebugAbbrev::dump(raw_ostream &OS) const { parse(); if (AbbrDeclSets.empty()) { OS << "< EMPTY >\n"; return; } for (const auto &I : AbbrDeclSets) { OS << format("Abbrev table for offset: 0x%8.8" PRIx64 "\n", I.first); I.second.dump(OS); } } const DWARFAbbreviationDeclarationSet* DWARFDebugAbbrev::getAbbreviationDeclarationSet(uint64_t CUAbbrOffset) const { const auto End = AbbrDeclSets.end(); if (PrevAbbrOffsetPos != End && PrevAbbrOffsetPos->first == CUAbbrOffset) { return &(PrevAbbrOffsetPos->second); } const auto Pos = AbbrDeclSets.find(CUAbbrOffset); if (Pos != End) { PrevAbbrOffsetPos = Pos; return &(Pos->second); } if (Data && CUAbbrOffset < Data->getData().size()) { uint64_t Offset = CUAbbrOffset; DWARFAbbreviationDeclarationSet AbbrDecls; if (!AbbrDecls.extract(*Data, &Offset)) return nullptr; PrevAbbrOffsetPos = AbbrDeclSets.insert(std::make_pair(CUAbbrOffset, std::move(AbbrDecls))) .first; return &PrevAbbrOffsetPos->second; } return nullptr; } binaryen-version_108/third_party/llvm-project/DWARFDebugAddr.cpp000066400000000000000000000164251423707623100250350ustar00rootroot00000000000000//===- DWARFDebugAddr.cpp -------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugAddr.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" using namespace llvm; void DWARFDebugAddrTable::clear() { HeaderData = {}; Addrs.clear(); invalidateLength(); } Error DWARFDebugAddrTable::extract(DWARFDataExtractor Data, uint64_t *OffsetPtr, uint16_t Version, uint8_t AddrSize, std::function WarnCallback) { clear(); HeaderOffset = *OffsetPtr; // Read and verify the length field. if (!Data.isValidOffsetForDataOfSize(*OffsetPtr, sizeof(uint32_t))) return createStringError(errc::invalid_argument, "section is not large enough to contain a " ".debug_addr table length at offset 0x%" PRIx64, *OffsetPtr); uint16_t UnitVersion; if (Version == 0) { WarnCallback(createStringError(errc::invalid_argument, "DWARF version is not defined in CU," " assuming version 5")); UnitVersion = 5; } else { UnitVersion = Version; } // TODO: Add support for DWARF64. Format = dwarf::DwarfFormat::DWARF32; if (UnitVersion >= 5) { HeaderData.Length = Data.getU32(OffsetPtr); if (HeaderData.Length == dwarf::DW_LENGTH_DWARF64) { invalidateLength(); return createStringError(errc::not_supported, "DWARF64 is not supported in .debug_addr at offset 0x%" PRIx64, HeaderOffset); } if (HeaderData.Length + sizeof(uint32_t) < sizeof(Header)) { uint32_t TmpLength = getLength(); invalidateLength(); return createStringError(errc::invalid_argument, ".debug_addr table at offset 0x%" PRIx64 " has too small length (0x%" PRIx32 ") to contain a complete header", HeaderOffset, TmpLength); } uint64_t End = HeaderOffset + getLength(); if (!Data.isValidOffsetForDataOfSize(HeaderOffset, End - HeaderOffset)) { uint32_t TmpLength = getLength(); invalidateLength(); return createStringError(errc::invalid_argument, "section is not large enough to contain a .debug_addr table " "of length 0x%" PRIx32 " at offset 0x%" PRIx64, TmpLength, HeaderOffset); } HeaderData.Version = Data.getU16(OffsetPtr); HeaderData.AddrSize = Data.getU8(OffsetPtr); HeaderData.SegSize = Data.getU8(OffsetPtr); DataSize = getDataSize(); } else { HeaderData.Version = UnitVersion; HeaderData.AddrSize = AddrSize; // TODO: Support for non-zero SegSize. HeaderData.SegSize = 0; DataSize = Data.size(); } // Perform basic validation of the remaining header fields. // We support DWARF version 5 for now as well as pre-DWARF5 // implementations of .debug_addr table, which doesn't contain a header // and consists only of a series of addresses. if (HeaderData.Version > 5) { return createStringError(errc::not_supported, "version %" PRIu16 " of .debug_addr section at offset 0x%" PRIx64 " is not supported", HeaderData.Version, HeaderOffset); } // FIXME: For now we just treat version mismatch as an error, // however the correct way to associate a .debug_addr table // with a .debug_info table is to look at the DW_AT_addr_base // attribute in the info table. if (HeaderData.Version != UnitVersion) return createStringError(errc::invalid_argument, ".debug_addr table at offset 0x%" PRIx64 " has version %" PRIu16 " which is different from the version suggested" " by the DWARF unit header: %" PRIu16, HeaderOffset, HeaderData.Version, UnitVersion); if (HeaderData.AddrSize != 4 && HeaderData.AddrSize != 8) return createStringError(errc::not_supported, ".debug_addr table at offset 0x%" PRIx64 " has unsupported address size %" PRIu8, HeaderOffset, HeaderData.AddrSize); if (HeaderData.AddrSize != AddrSize && AddrSize != 0) return createStringError(errc::invalid_argument, ".debug_addr table at offset 0x%" PRIx64 " has address size %" PRIu8 " which is different from CU address size %" PRIu8, HeaderOffset, HeaderData.AddrSize, AddrSize); // TODO: add support for non-zero segment selector size. if (HeaderData.SegSize != 0) return createStringError(errc::not_supported, ".debug_addr table at offset 0x%" PRIx64 " has unsupported segment selector size %" PRIu8, HeaderOffset, HeaderData.SegSize); if (DataSize % HeaderData.AddrSize != 0) { invalidateLength(); return createStringError(errc::invalid_argument, ".debug_addr table at offset 0x%" PRIx64 " contains data of size %" PRIu32 " which is not a multiple of addr size %" PRIu8, HeaderOffset, DataSize, HeaderData.AddrSize); } Data.setAddressSize(HeaderData.AddrSize); uint32_t AddrCount = DataSize / HeaderData.AddrSize; for (uint32_t I = 0; I < AddrCount; ++I) if (HeaderData.AddrSize == 4) Addrs.push_back(Data.getU32(OffsetPtr)); else Addrs.push_back(Data.getU64(OffsetPtr)); return Error::success(); } void DWARFDebugAddrTable::dump(raw_ostream &OS, DIDumpOptions DumpOpts) const { if (DumpOpts.Verbose) OS << format("0x%8.8" PRIx32 ": ", HeaderOffset); OS << format("Addr Section: length = 0x%8.8" PRIx32 ", version = 0x%4.4" PRIx16 ", " "addr_size = 0x%2.2" PRIx8 ", seg_size = 0x%2.2" PRIx8 "\n", HeaderData.Length, HeaderData.Version, HeaderData.AddrSize, HeaderData.SegSize); if (Addrs.size() > 0) { const char *AddrFmt = (HeaderData.AddrSize == 4) ? "0x%8.8" PRIx64 "\n" : "0x%16.16" PRIx64 "\n"; OS << "Addrs: [\n"; for (uint64_t Addr : Addrs) OS << format(AddrFmt, Addr); OS << "]\n"; } } Expected DWARFDebugAddrTable::getAddrEntry(uint32_t Index) const { if (Index < Addrs.size()) return Addrs[Index]; return createStringError(errc::invalid_argument, "Index %" PRIu32 " is out of range of the " ".debug_addr table at offset 0x%" PRIx64, Index, HeaderOffset); } uint32_t DWARFDebugAddrTable::getLength() const { if (HeaderData.Length == 0) return 0; // TODO: DWARF64 support. return HeaderData.Length + sizeof(uint32_t); } uint32_t DWARFDebugAddrTable::getDataSize() const { if (DataSize != 0) return DataSize; if (getLength() == 0) return 0; return getLength() - getHeaderSize(); } binaryen-version_108/third_party/llvm-project/DWARFDebugArangeSet.cpp000066400000000000000000000105731423707623100260320ustar00rootroot00000000000000//===- DWARFDebugArangeSet.cpp --------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include using namespace llvm; void DWARFDebugArangeSet::Descriptor::dump(raw_ostream &OS, uint32_t AddressSize) const { OS << format("[0x%*.*" PRIx64 ", ", AddressSize * 2, AddressSize * 2, Address) << format(" 0x%*.*" PRIx64 ")", AddressSize * 2, AddressSize * 2, getEndAddress()); } void DWARFDebugArangeSet::clear() { Offset = -1ULL; std::memset(&HeaderData, 0, sizeof(Header)); ArangeDescriptors.clear(); } bool DWARFDebugArangeSet::extract(DataExtractor data, uint64_t *offset_ptr) { if (data.isValidOffset(*offset_ptr)) { ArangeDescriptors.clear(); Offset = *offset_ptr; // 7.20 Address Range Table // // Each set of entries in the table of address ranges contained in // the .debug_aranges section begins with a header consisting of: a // 4-byte length containing the length of the set of entries for this // compilation unit, not including the length field itself; a 2-byte // version identifier containing the value 2 for DWARF Version 2; a // 4-byte offset into the.debug_infosection; a 1-byte unsigned integer // containing the size in bytes of an address (or the offset portion of // an address for segmented addressing) on the target system; and a // 1-byte unsigned integer containing the size in bytes of a segment // descriptor on the target system. This header is followed by a series // of tuples. Each tuple consists of an address and a length, each in // the size appropriate for an address on the target architecture. HeaderData.Length = data.getU32(offset_ptr); HeaderData.Version = data.getU16(offset_ptr); HeaderData.CuOffset = data.getU32(offset_ptr); HeaderData.AddrSize = data.getU8(offset_ptr); HeaderData.SegSize = data.getU8(offset_ptr); // Perform basic validation of the header fields. if (!data.isValidOffsetForDataOfSize(Offset, HeaderData.Length) || (HeaderData.AddrSize != 4 && HeaderData.AddrSize != 8)) { clear(); return false; } // The first tuple following the header in each set begins at an offset // that is a multiple of the size of a single tuple (that is, twice the // size of an address). The header is padded, if necessary, to the // appropriate boundary. const uint32_t header_size = *offset_ptr - Offset; const uint32_t tuple_size = HeaderData.AddrSize * 2; uint32_t first_tuple_offset = 0; while (first_tuple_offset < header_size) first_tuple_offset += tuple_size; *offset_ptr = Offset + first_tuple_offset; Descriptor arangeDescriptor; static_assert(sizeof(arangeDescriptor.Address) == sizeof(arangeDescriptor.Length), "Different datatypes for addresses and sizes!"); assert(sizeof(arangeDescriptor.Address) >= HeaderData.AddrSize); while (data.isValidOffset(*offset_ptr)) { arangeDescriptor.Address = data.getUnsigned(offset_ptr, HeaderData.AddrSize); arangeDescriptor.Length = data.getUnsigned(offset_ptr, HeaderData.AddrSize); // Each set of tuples is terminated by a 0 for the address and 0 // for the length. if (arangeDescriptor.Address || arangeDescriptor.Length) ArangeDescriptors.push_back(arangeDescriptor); else break; // We are done if we get a zero address and length } return !ArangeDescriptors.empty(); } return false; } void DWARFDebugArangeSet::dump(raw_ostream &OS) const { OS << format("Address Range Header: length = 0x%8.8x, version = 0x%4.4x, ", HeaderData.Length, HeaderData.Version) << format("cu_offset = 0x%8.8x, addr_size = 0x%2.2x, seg_size = 0x%2.2x\n", HeaderData.CuOffset, HeaderData.AddrSize, HeaderData.SegSize); for (const auto &Desc : ArangeDescriptors) { Desc.dump(OS, HeaderData.AddrSize); OS << '\n'; } } binaryen-version_108/third_party/llvm-project/DWARFDebugAranges.cpp000066400000000000000000000076531423707623100255460ustar00rootroot00000000000000//===- DWARFDebugAranges.cpp ----------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugAranges.h" #include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h" #include "llvm/Support/DataExtractor.h" #include "llvm/Support/WithColor.h" #include #include #include #include #include using namespace llvm; void DWARFDebugAranges::extract(DataExtractor DebugArangesData) { if (!DebugArangesData.isValidOffset(0)) return; uint64_t Offset = 0; DWARFDebugArangeSet Set; while (Set.extract(DebugArangesData, &Offset)) { uint64_t CUOffset = Set.getCompileUnitDIEOffset(); for (const auto &Desc : Set.descriptors()) { uint64_t LowPC = Desc.Address; uint64_t HighPC = Desc.getEndAddress(); appendRange(CUOffset, LowPC, HighPC); } ParsedCUOffsets.insert(CUOffset); } } void DWARFDebugAranges::generate(DWARFContext *CTX) { clear(); if (!CTX) return; // Extract aranges from .debug_aranges section. DataExtractor ArangesData(CTX->getDWARFObj().getArangesSection(), CTX->isLittleEndian(), 0); extract(ArangesData); // Generate aranges from DIEs: even if .debug_aranges section is present, // it may describe only a small subset of compilation units, so we need to // manually build aranges for the rest of them. for (const auto &CU : CTX->compile_units()) { uint64_t CUOffset = CU->getOffset(); if (ParsedCUOffsets.insert(CUOffset).second) { Expected CURanges = CU->collectAddressRanges(); if (!CURanges) WithColor::error() << toString(CURanges.takeError()) << '\n'; else for (const auto &R : *CURanges) appendRange(CUOffset, R.LowPC, R.HighPC); } } construct(); } void DWARFDebugAranges::clear() { Endpoints.clear(); Aranges.clear(); ParsedCUOffsets.clear(); } void DWARFDebugAranges::appendRange(uint64_t CUOffset, uint64_t LowPC, uint64_t HighPC) { if (LowPC >= HighPC) return; Endpoints.emplace_back(LowPC, CUOffset, true); Endpoints.emplace_back(HighPC, CUOffset, false); } void DWARFDebugAranges::construct() { std::multiset ValidCUs; // Maintain the set of CUs describing // a current address range. llvm::sort(Endpoints); uint64_t PrevAddress = -1ULL; for (const auto &E : Endpoints) { if (PrevAddress < E.Address && !ValidCUs.empty()) { // If the address range between two endpoints is described by some // CU, first try to extend the last range in Aranges. If we can't // do it, start a new range. if (!Aranges.empty() && Aranges.back().HighPC() == PrevAddress && ValidCUs.find(Aranges.back().CUOffset) != ValidCUs.end()) { Aranges.back().setHighPC(E.Address); } else { Aranges.emplace_back(PrevAddress, E.Address, *ValidCUs.begin()); } } // Update the set of valid CUs. if (E.IsRangeStart) { ValidCUs.insert(E.CUOffset); } else { auto CUPos = ValidCUs.find(E.CUOffset); assert(CUPos != ValidCUs.end()); ValidCUs.erase(CUPos); } PrevAddress = E.Address; } assert(ValidCUs.empty()); // Endpoints are not needed now. Endpoints.clear(); Endpoints.shrink_to_fit(); } uint32_t DWARFDebugAranges::findAddress(uint64_t Address) const { RangeCollIterator It = partition_point(Aranges, [=](Range R) { return R.HighPC() <= Address; }); if (It != Aranges.end() && It->LowPC <= Address) return It->CUOffset; return -1U; } binaryen-version_108/third_party/llvm-project/DWARFDebugFrame.cpp000066400000000000000000000506261423707623100252160ustar00rootroot00000000000000//===- DWARFDebugFrame.h - Parsing of .debug_frame ------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugFrame.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/DataExtractor.h" #include "llvm/Support/Errc.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include #include using namespace llvm; using namespace dwarf; // See DWARF standard v3, section 7.23 const uint8_t DWARF_CFI_PRIMARY_OPCODE_MASK = 0xc0; const uint8_t DWARF_CFI_PRIMARY_OPERAND_MASK = 0x3f; Error CFIProgram::parse(DWARFDataExtractor Data, uint64_t *Offset, uint64_t EndOffset) { while (*Offset < EndOffset) { uint8_t Opcode = Data.getRelocatedValue(1, Offset); // Some instructions have a primary opcode encoded in the top bits. uint8_t Primary = Opcode & DWARF_CFI_PRIMARY_OPCODE_MASK; if (Primary) { // If it's a primary opcode, the first operand is encoded in the bottom // bits of the opcode itself. uint64_t Op1 = Opcode & DWARF_CFI_PRIMARY_OPERAND_MASK; switch (Primary) { default: return createStringError(errc::illegal_byte_sequence, "Invalid primary CFI opcode 0x%" PRIx8, Primary); case DW_CFA_advance_loc: case DW_CFA_restore: addInstruction(Primary, Op1); break; case DW_CFA_offset: addInstruction(Primary, Op1, Data.getULEB128(Offset)); break; } } else { // Extended opcode - its value is Opcode itself. switch (Opcode) { default: return createStringError(errc::illegal_byte_sequence, "Invalid extended CFI opcode 0x%" PRIx8, Opcode); case DW_CFA_nop: case DW_CFA_remember_state: case DW_CFA_restore_state: case DW_CFA_GNU_window_save: // No operands addInstruction(Opcode); break; case DW_CFA_set_loc: // Operands: Address addInstruction(Opcode, Data.getRelocatedAddress(Offset)); break; case DW_CFA_advance_loc1: // Operands: 1-byte delta addInstruction(Opcode, Data.getRelocatedValue(1, Offset)); break; case DW_CFA_advance_loc2: // Operands: 2-byte delta addInstruction(Opcode, Data.getRelocatedValue(2, Offset)); break; case DW_CFA_advance_loc4: // Operands: 4-byte delta addInstruction(Opcode, Data.getRelocatedValue(4, Offset)); break; case DW_CFA_restore_extended: case DW_CFA_undefined: case DW_CFA_same_value: case DW_CFA_def_cfa_register: case DW_CFA_def_cfa_offset: case DW_CFA_GNU_args_size: // Operands: ULEB128 addInstruction(Opcode, Data.getULEB128(Offset)); break; case DW_CFA_def_cfa_offset_sf: // Operands: SLEB128 addInstruction(Opcode, Data.getSLEB128(Offset)); break; case DW_CFA_offset_extended: case DW_CFA_register: case DW_CFA_def_cfa: case DW_CFA_val_offset: { // Operands: ULEB128, ULEB128 // Note: We can not embed getULEB128 directly into function // argument list. getULEB128 changes Offset and order of evaluation // for arguments is unspecified. auto op1 = Data.getULEB128(Offset); auto op2 = Data.getULEB128(Offset); addInstruction(Opcode, op1, op2); break; } case DW_CFA_offset_extended_sf: case DW_CFA_def_cfa_sf: case DW_CFA_val_offset_sf: { // Operands: ULEB128, SLEB128 // Note: see comment for the previous case auto op1 = Data.getULEB128(Offset); auto op2 = (uint64_t)Data.getSLEB128(Offset); addInstruction(Opcode, op1, op2); break; } case DW_CFA_def_cfa_expression: { uint32_t ExprLength = Data.getULEB128(Offset); addInstruction(Opcode, 0); DataExtractor Extractor( Data.getData().slice(*Offset, *Offset + ExprLength), Data.isLittleEndian(), Data.getAddressSize()); Instructions.back().Expression = DWARFExpression( Extractor, Data.getAddressSize(), dwarf::DWARF_VERSION); *Offset += ExprLength; break; } case DW_CFA_expression: case DW_CFA_val_expression: { auto RegNum = Data.getULEB128(Offset); auto BlockLength = Data.getULEB128(Offset); addInstruction(Opcode, RegNum, 0); DataExtractor Extractor( Data.getData().slice(*Offset, *Offset + BlockLength), Data.isLittleEndian(), Data.getAddressSize()); Instructions.back().Expression = DWARFExpression( Extractor, Data.getAddressSize(), dwarf::DWARF_VERSION); *Offset += BlockLength; break; } } } } return Error::success(); } namespace { } // end anonymous namespace ArrayRef CFIProgram::getOperandTypes() { static OperandType OpTypes[DW_CFA_restore+1][2]; static bool Initialized = false; if (Initialized) { return ArrayRef(&OpTypes[0], DW_CFA_restore+1); } Initialized = true; #define DECLARE_OP2(OP, OPTYPE0, OPTYPE1) \ do { \ OpTypes[OP][0] = OPTYPE0; \ OpTypes[OP][1] = OPTYPE1; \ } while (false) #define DECLARE_OP1(OP, OPTYPE0) DECLARE_OP2(OP, OPTYPE0, OT_None) #define DECLARE_OP0(OP) DECLARE_OP1(OP, OT_None) DECLARE_OP1(DW_CFA_set_loc, OT_Address); DECLARE_OP1(DW_CFA_advance_loc, OT_FactoredCodeOffset); DECLARE_OP1(DW_CFA_advance_loc1, OT_FactoredCodeOffset); DECLARE_OP1(DW_CFA_advance_loc2, OT_FactoredCodeOffset); DECLARE_OP1(DW_CFA_advance_loc4, OT_FactoredCodeOffset); DECLARE_OP1(DW_CFA_MIPS_advance_loc8, OT_FactoredCodeOffset); DECLARE_OP2(DW_CFA_def_cfa, OT_Register, OT_Offset); DECLARE_OP2(DW_CFA_def_cfa_sf, OT_Register, OT_SignedFactDataOffset); DECLARE_OP1(DW_CFA_def_cfa_register, OT_Register); DECLARE_OP1(DW_CFA_def_cfa_offset, OT_Offset); DECLARE_OP1(DW_CFA_def_cfa_offset_sf, OT_SignedFactDataOffset); DECLARE_OP1(DW_CFA_def_cfa_expression, OT_Expression); DECLARE_OP1(DW_CFA_undefined, OT_Register); DECLARE_OP1(DW_CFA_same_value, OT_Register); DECLARE_OP2(DW_CFA_offset, OT_Register, OT_UnsignedFactDataOffset); DECLARE_OP2(DW_CFA_offset_extended, OT_Register, OT_UnsignedFactDataOffset); DECLARE_OP2(DW_CFA_offset_extended_sf, OT_Register, OT_SignedFactDataOffset); DECLARE_OP2(DW_CFA_val_offset, OT_Register, OT_UnsignedFactDataOffset); DECLARE_OP2(DW_CFA_val_offset_sf, OT_Register, OT_SignedFactDataOffset); DECLARE_OP2(DW_CFA_register, OT_Register, OT_Register); DECLARE_OP2(DW_CFA_expression, OT_Register, OT_Expression); DECLARE_OP2(DW_CFA_val_expression, OT_Register, OT_Expression); DECLARE_OP1(DW_CFA_restore, OT_Register); DECLARE_OP1(DW_CFA_restore_extended, OT_Register); DECLARE_OP0(DW_CFA_remember_state); DECLARE_OP0(DW_CFA_restore_state); DECLARE_OP0(DW_CFA_GNU_window_save); DECLARE_OP1(DW_CFA_GNU_args_size, OT_Offset); DECLARE_OP0(DW_CFA_nop); #undef DECLARE_OP0 #undef DECLARE_OP1 #undef DECLARE_OP2 return ArrayRef(&OpTypes[0], DW_CFA_restore+1); } /// Print \p Opcode's operand number \p OperandIdx which has value \p Operand. void CFIProgram::printOperand(raw_ostream &OS, const MCRegisterInfo *MRI, bool IsEH, const Instruction &Instr, unsigned OperandIdx, uint64_t Operand) const { assert(OperandIdx < 2); uint8_t Opcode = Instr.Opcode; OperandType Type = getOperandTypes()[Opcode][OperandIdx]; switch (Type) { case OT_Unset: { OS << " Unsupported " << (OperandIdx ? "second" : "first") << " operand to"; auto OpcodeName = CallFrameString(Opcode, Arch); if (!OpcodeName.empty()) OS << " " << OpcodeName; else OS << format(" Opcode %x", Opcode); break; } case OT_None: break; case OT_Address: OS << format(" %" PRIx64, Operand); break; case OT_Offset: // The offsets are all encoded in a unsigned form, but in practice // consumers use them signed. It's most certainly legacy due to // the lack of signed variants in the first Dwarf standards. OS << format(" %+" PRId64, int64_t(Operand)); break; case OT_FactoredCodeOffset: // Always Unsigned if (CodeAlignmentFactor) OS << format(" %" PRId64, Operand * CodeAlignmentFactor); else OS << format(" %" PRId64 "*code_alignment_factor" , Operand); break; case OT_SignedFactDataOffset: if (DataAlignmentFactor) OS << format(" %" PRId64, int64_t(Operand) * DataAlignmentFactor); else OS << format(" %" PRId64 "*data_alignment_factor" , int64_t(Operand)); break; case OT_UnsignedFactDataOffset: if (DataAlignmentFactor) OS << format(" %" PRId64, Operand * DataAlignmentFactor); else OS << format(" %" PRId64 "*data_alignment_factor" , Operand); break; case OT_Register: OS << format(" reg%" PRId64, Operand); break; case OT_Expression: assert(Instr.Expression && "missing DWARFExpression object"); OS << " "; Instr.Expression->print(OS, MRI, nullptr, IsEH); break; } } void CFIProgram::dump(raw_ostream &OS, const MCRegisterInfo *MRI, bool IsEH, unsigned IndentLevel) const { for (const auto &Instr : Instructions) { uint8_t Opcode = Instr.Opcode; if (Opcode & DWARF_CFI_PRIMARY_OPCODE_MASK) Opcode &= DWARF_CFI_PRIMARY_OPCODE_MASK; OS.indent(2 * IndentLevel); OS << CallFrameString(Opcode, Arch) << ":"; for (unsigned i = 0; i < Instr.Ops.size(); ++i) printOperand(OS, MRI, IsEH, Instr, i, Instr.Ops[i]); OS << '\n'; } } void CIE::dump(raw_ostream &OS, const MCRegisterInfo *MRI, bool IsEH) const { OS << format("%08x %08x %08x CIE", (uint32_t)Offset, (uint32_t)Length, DW_CIE_ID) << "\n"; OS << format(" Version: %d\n", Version); OS << " Augmentation: \"" << Augmentation << "\"\n"; if (Version >= 4) { OS << format(" Address size: %u\n", (uint32_t)AddressSize); OS << format(" Segment desc size: %u\n", (uint32_t)SegmentDescriptorSize); } OS << format(" Code alignment factor: %u\n", (uint32_t)CodeAlignmentFactor); OS << format(" Data alignment factor: %d\n", (int32_t)DataAlignmentFactor); OS << format(" Return address column: %d\n", (int32_t)ReturnAddressRegister); if (Personality) OS << format(" Personality Address: %016" PRIx64 "\n", *Personality); if (!AugmentationData.empty()) { OS << " Augmentation data: "; for (uint8_t Byte : AugmentationData) OS << ' ' << hexdigit(Byte >> 4) << hexdigit(Byte & 0xf); OS << "\n"; } OS << "\n"; CFIs.dump(OS, MRI, IsEH); OS << "\n"; } void FDE::dump(raw_ostream &OS, const MCRegisterInfo *MRI, bool IsEH) const { OS << format("%08x %08x %08x FDE ", (uint32_t)Offset, (uint32_t)Length, (int32_t)LinkedCIEOffset); OS << format("cie=%08x pc=%08x...%08x\n", (int32_t)LinkedCIEOffset, (uint32_t)InitialLocation, (uint32_t)InitialLocation + (uint32_t)AddressRange); if (LSDAAddress) OS << format(" LSDA Address: %016" PRIx64 "\n", *LSDAAddress); CFIs.dump(OS, MRI, IsEH); OS << "\n"; } DWARFDebugFrame::DWARFDebugFrame(Triple::ArchType Arch, bool IsEH, uint64_t EHFrameAddress) : Arch(Arch), IsEH(IsEH), EHFrameAddress(EHFrameAddress) {} DWARFDebugFrame::~DWARFDebugFrame() = default; static void LLVM_ATTRIBUTE_UNUSED dumpDataAux(DataExtractor Data, uint64_t Offset, int Length) { errs() << "DUMP: "; for (int i = 0; i < Length; ++i) { uint8_t c = Data.getU8(&Offset); errs().write_hex(c); errs() << " "; } errs() << "\n"; } // This is a workaround for old compilers which do not allow // noreturn attribute usage in lambdas. Once the support for those // compilers are phased out, we can remove this and return back to // a ReportError lambda: [StartOffset](const char *ErrorMsg). static void LLVM_ATTRIBUTE_NORETURN ReportError(uint64_t StartOffset, const char *ErrorMsg) { std::string Str; raw_string_ostream OS(Str); OS << format(ErrorMsg, StartOffset); OS.flush(); report_fatal_error(Str); } void DWARFDebugFrame::parse(DWARFDataExtractor Data) { uint64_t Offset = 0; DenseMap CIEs; while (Data.isValidOffset(Offset)) { uint64_t StartOffset = Offset; bool IsDWARF64 = false; uint64_t Length = Data.getRelocatedValue(4, &Offset); uint64_t Id; if (Length == dwarf::DW_LENGTH_DWARF64) { // DWARF-64 is distinguished by the first 32 bits of the initial length // field being 0xffffffff. Then, the next 64 bits are the actual entry // length. IsDWARF64 = true; Length = Data.getRelocatedValue(8, &Offset); } // At this point, Offset points to the next field after Length. // Length is the structure size excluding itself. Compute an offset one // past the end of the structure (needed to know how many instructions to // read). uint64_t StartStructureOffset = Offset; uint64_t EndStructureOffset = Offset + Length; // The Id field's size depends on the DWARF format Id = Data.getUnsigned(&Offset, (IsDWARF64 && !IsEH) ? 8 : 4); bool IsCIE = ((IsDWARF64 && Id == DW64_CIE_ID) || Id == DW_CIE_ID || (IsEH && !Id)); if (IsCIE) { uint8_t Version = Data.getU8(&Offset); const char *Augmentation = Data.getCStr(&Offset); StringRef AugmentationString(Augmentation ? Augmentation : ""); uint8_t AddressSize = Version < 4 ? Data.getAddressSize() : Data.getU8(&Offset); Data.setAddressSize(AddressSize); uint8_t SegmentDescriptorSize = Version < 4 ? 0 : Data.getU8(&Offset); uint64_t CodeAlignmentFactor = Data.getULEB128(&Offset); int64_t DataAlignmentFactor = Data.getSLEB128(&Offset); uint64_t ReturnAddressRegister = Version == 1 ? Data.getU8(&Offset) : Data.getULEB128(&Offset); // Parse the augmentation data for EH CIEs StringRef AugmentationData(""); uint32_t FDEPointerEncoding = DW_EH_PE_absptr; uint32_t LSDAPointerEncoding = DW_EH_PE_omit; Optional Personality; Optional PersonalityEncoding; if (IsEH) { Optional AugmentationLength; uint64_t StartAugmentationOffset; uint64_t EndAugmentationOffset; // Walk the augmentation string to get all the augmentation data. for (unsigned i = 0, e = AugmentationString.size(); i != e; ++i) { switch (AugmentationString[i]) { default: ReportError( StartOffset, "Unknown augmentation character in entry at %" PRIx64); case 'L': LSDAPointerEncoding = Data.getU8(&Offset); break; case 'P': { if (Personality) ReportError(StartOffset, "Duplicate personality in entry at %" PRIx64); PersonalityEncoding = Data.getU8(&Offset); Personality = Data.getEncodedPointer( &Offset, *PersonalityEncoding, EHFrameAddress ? EHFrameAddress + Offset : 0); break; } case 'R': FDEPointerEncoding = Data.getU8(&Offset); break; case 'S': // Current frame is a signal trampoline. break; case 'z': if (i) ReportError(StartOffset, "'z' must be the first character at %" PRIx64); // Parse the augmentation length first. We only parse it if // the string contains a 'z'. AugmentationLength = Data.getULEB128(&Offset); StartAugmentationOffset = Offset; EndAugmentationOffset = Offset + *AugmentationLength; break; case 'B': // B-Key is used for signing functions associated with this // augmentation string break; } } if (AugmentationLength.hasValue()) { if (Offset != EndAugmentationOffset) ReportError(StartOffset, "Parsing augmentation data at %" PRIx64 " failed"); AugmentationData = Data.getData().slice(StartAugmentationOffset, EndAugmentationOffset); } } auto Cie = std::make_unique( StartOffset, Length, Version, AugmentationString, AddressSize, SegmentDescriptorSize, CodeAlignmentFactor, DataAlignmentFactor, ReturnAddressRegister, AugmentationData, FDEPointerEncoding, LSDAPointerEncoding, Personality, PersonalityEncoding, Arch); CIEs[StartOffset] = Cie.get(); Entries.emplace_back(std::move(Cie)); } else { // FDE uint64_t CIEPointer = Id; uint64_t InitialLocation = 0; uint64_t AddressRange = 0; Optional LSDAAddress; CIE *Cie = CIEs[IsEH ? (StartStructureOffset - CIEPointer) : CIEPointer]; if (IsEH) { // The address size is encoded in the CIE we reference. if (!Cie) ReportError(StartOffset, "Parsing FDE data at %" PRIx64 " failed due to missing CIE"); if (auto Val = Data.getEncodedPointer( &Offset, Cie->getFDEPointerEncoding(), EHFrameAddress ? EHFrameAddress + Offset : 0)) { InitialLocation = *Val; } if (auto Val = Data.getEncodedPointer( &Offset, Cie->getFDEPointerEncoding(), 0)) { AddressRange = *Val; } StringRef AugmentationString = Cie->getAugmentationString(); if (!AugmentationString.empty()) { // Parse the augmentation length and data for this FDE. uint64_t AugmentationLength = Data.getULEB128(&Offset); uint64_t EndAugmentationOffset = Offset + AugmentationLength; // Decode the LSDA if the CIE augmentation string said we should. if (Cie->getLSDAPointerEncoding() != DW_EH_PE_omit) { LSDAAddress = Data.getEncodedPointer( &Offset, Cie->getLSDAPointerEncoding(), EHFrameAddress ? Offset + EHFrameAddress : 0); } if (Offset != EndAugmentationOffset) ReportError(StartOffset, "Parsing augmentation data at %" PRIx64 " failed"); } } else { InitialLocation = Data.getRelocatedAddress(&Offset); AddressRange = Data.getRelocatedAddress(&Offset); } Entries.emplace_back(new FDE(StartOffset, Length, CIEPointer, InitialLocation, AddressRange, Cie, LSDAAddress, Arch)); } if (Error E = Entries.back()->cfis().parse(Data, &Offset, EndStructureOffset)) { report_fatal_error(toString(std::move(E))); } if (Offset != EndStructureOffset) ReportError(StartOffset, "Parsing entry instructions at %" PRIx64 " failed"); } } FrameEntry *DWARFDebugFrame::getEntryAtOffset(uint64_t Offset) const { auto It = partition_point(Entries, [=](const std::unique_ptr &E) { return E->getOffset() < Offset; }); if (It != Entries.end() && (*It)->getOffset() == Offset) return It->get(); return nullptr; } void DWARFDebugFrame::dump(raw_ostream &OS, const MCRegisterInfo *MRI, Optional Offset) const { if (Offset) { if (auto *Entry = getEntryAtOffset(*Offset)) Entry->dump(OS, MRI, IsEH); return; } OS << "\n"; for (const auto &Entry : Entries) Entry->dump(OS, MRI, IsEH); } binaryen-version_108/third_party/llvm-project/DWARFDebugInfoEntry.cpp000066400000000000000000000053501423707623100260730ustar00rootroot00000000000000//===- DWARFDebugInfoEntry.cpp --------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h" #include "llvm/ADT/Optional.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/Support/DataExtractor.h" #include #include using namespace llvm; using namespace dwarf; bool DWARFDebugInfoEntry::extractFast(const DWARFUnit &U, uint64_t *OffsetPtr) { DWARFDataExtractor DebugInfoData = U.getDebugInfoExtractor(); const uint64_t UEndOffset = U.getNextUnitOffset(); return extractFast(U, OffsetPtr, DebugInfoData, UEndOffset, 0); } bool DWARFDebugInfoEntry::extractFast(const DWARFUnit &U, uint64_t *OffsetPtr, const DWARFDataExtractor &DebugInfoData, uint64_t UEndOffset, uint32_t D) { Offset = *OffsetPtr; Depth = D; if (Offset >= UEndOffset || !DebugInfoData.isValidOffset(Offset)) return false; uint64_t AbbrCode = DebugInfoData.getULEB128(OffsetPtr); if (0 == AbbrCode) { // NULL debug tag entry. AbbrevDecl = nullptr; return true; } if (auto* Abbreviations = U.getAbbreviations()) { // XXX BINARYEN AbbrevDecl = Abbreviations->getAbbreviationDeclaration(AbbrCode); } else { AbbrevDecl = nullptr; // XXX BINARYEN } if (nullptr == AbbrevDecl) { // Restore the original offset. *OffsetPtr = Offset; return false; } // See if all attributes in this DIE have fixed byte sizes. If so, we can // just add this size to the offset to skip to the next DIE. if (Optional FixedSize = AbbrevDecl->getFixedAttributesByteSize(U)) { *OffsetPtr += *FixedSize; return true; } // Skip all data in the .debug_info for the attributes for (const auto &AttrSpec : AbbrevDecl->attributes()) { // Check if this attribute has a fixed byte size. if (auto FixedSize = AttrSpec.getByteSize(U)) { // Attribute byte size if fixed, just add the size to the offset. *OffsetPtr += *FixedSize; } else if (!DWARFFormValue::skipValue(AttrSpec.Form, DebugInfoData, OffsetPtr, U.getFormParams())) { // We failed to skip this attribute's value, restore the original offset // and return the failure status. *OffsetPtr = Offset; return false; } } return true; } binaryen-version_108/third_party/llvm-project/DWARFDebugLine.cpp000066400000000000000000001311551423707623100250500ustar00rootroot00000000000000//===- DWARFDebugLine.cpp -------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugLine.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Format.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include #include using namespace llvm; using namespace dwarf; using FileLineInfoKind = DILineInfoSpecifier::FileLineInfoKind; namespace { struct ContentDescriptor { dwarf::LineNumberEntryFormat Type; dwarf::Form Form; }; using ContentDescriptors = SmallVector; } // end anonmyous namespace void DWARFDebugLine::ContentTypeTracker::trackContentType( dwarf::LineNumberEntryFormat ContentType) { switch (ContentType) { case dwarf::DW_LNCT_timestamp: HasModTime = true; break; case dwarf::DW_LNCT_size: HasLength = true; break; case dwarf::DW_LNCT_MD5: HasMD5 = true; break; case dwarf::DW_LNCT_LLVM_source: HasSource = true; break; default: // We only care about values we consider optional, and new values may be // added in the vendor extension range, so we do not match exhaustively. break; } } DWARFDebugLine::Prologue::Prologue() { clear(); } bool DWARFDebugLine::Prologue::hasFileAtIndex(uint64_t FileIndex) const { uint16_t DwarfVersion = getVersion(); assert(DwarfVersion != 0 && "line table prologue has no dwarf version information"); if (DwarfVersion >= 5) return FileIndex < FileNames.size(); return FileIndex != 0 && FileIndex <= FileNames.size(); } const llvm::DWARFDebugLine::FileNameEntry & DWARFDebugLine::Prologue::getFileNameEntry(uint64_t Index) const { uint16_t DwarfVersion = getVersion(); assert(DwarfVersion != 0 && "line table prologue has no dwarf version information"); // In DWARF v5 the file names are 0-indexed. if (DwarfVersion >= 5) return FileNames[Index]; return FileNames[Index - 1]; } void DWARFDebugLine::Prologue::clear() { TotalLength = PrologueLength = 0; SegSelectorSize = 0; MinInstLength = MaxOpsPerInst = DefaultIsStmt = LineBase = LineRange = 0; OpcodeBase = 0; FormParams = dwarf::FormParams({0, 0, DWARF32}); ContentTypes = ContentTypeTracker(); StandardOpcodeLengths.clear(); IncludeDirectories.clear(); FileNames.clear(); } void DWARFDebugLine::Prologue::dump(raw_ostream &OS, DIDumpOptions DumpOptions) const { OS << "Line table prologue:\n" << format(" total_length: 0x%8.8" PRIx64 "\n", TotalLength) << format(" version: %u\n", getVersion()); if (getVersion() >= 5) OS << format(" address_size: %u\n", getAddressSize()) << format(" seg_select_size: %u\n", SegSelectorSize); OS << format(" prologue_length: 0x%8.8" PRIx64 "\n", PrologueLength) << format(" min_inst_length: %u\n", MinInstLength) << format(getVersion() >= 4 ? "max_ops_per_inst: %u\n" : "", MaxOpsPerInst) << format(" default_is_stmt: %u\n", DefaultIsStmt) << format(" line_base: %i\n", LineBase) << format(" line_range: %u\n", LineRange) << format(" opcode_base: %u\n", OpcodeBase); for (uint32_t I = 0; I != StandardOpcodeLengths.size(); ++I) OS << format("standard_opcode_lengths[%s] = %u\n", LNStandardString(I + 1).data(), StandardOpcodeLengths[I]); if (!IncludeDirectories.empty()) { // DWARF v5 starts directory indexes at 0. uint32_t DirBase = getVersion() >= 5 ? 0 : 1; for (uint32_t I = 0; I != IncludeDirectories.size(); ++I) { OS << format("include_directories[%3u] = ", I + DirBase); IncludeDirectories[I].dump(OS, DumpOptions); OS << '\n'; } } if (!FileNames.empty()) { // DWARF v5 starts file indexes at 0. uint32_t FileBase = getVersion() >= 5 ? 0 : 1; for (uint32_t I = 0; I != FileNames.size(); ++I) { const FileNameEntry &FileEntry = FileNames[I]; OS << format("file_names[%3u]:\n", I + FileBase); OS << " name: "; FileEntry.Name.dump(OS, DumpOptions); OS << '\n' << format(" dir_index: %" PRIu64 "\n", FileEntry.DirIdx); if (ContentTypes.HasMD5) OS << " md5_checksum: " << FileEntry.Checksum.digest() << '\n'; if (ContentTypes.HasModTime) OS << format(" mod_time: 0x%8.8" PRIx64 "\n", FileEntry.ModTime); if (ContentTypes.HasLength) OS << format(" length: 0x%8.8" PRIx64 "\n", FileEntry.Length); if (ContentTypes.HasSource) { OS << " source: "; FileEntry.Source.dump(OS, DumpOptions); OS << '\n'; } } } } // Parse v2-v4 directory and file tables. static void parseV2DirFileTables(const DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr, uint64_t EndPrologueOffset, DWARFDebugLine::ContentTypeTracker &ContentTypes, std::vector &IncludeDirectories, std::vector &FileNames) { while (*OffsetPtr < EndPrologueOffset) { StringRef S = DebugLineData.getCStrRef(OffsetPtr); if (S.empty()) break; DWARFFormValue Dir = DWARFFormValue::createFromPValue(dwarf::DW_FORM_string, S.data()); IncludeDirectories.push_back(Dir); } while (*OffsetPtr < EndPrologueOffset) { StringRef Name = DebugLineData.getCStrRef(OffsetPtr); if (Name.empty()) break; DWARFDebugLine::FileNameEntry FileEntry; FileEntry.Name = DWARFFormValue::createFromPValue(dwarf::DW_FORM_string, Name.data()); FileEntry.DirIdx = DebugLineData.getULEB128(OffsetPtr); FileEntry.ModTime = DebugLineData.getULEB128(OffsetPtr); FileEntry.Length = DebugLineData.getULEB128(OffsetPtr); FileNames.push_back(FileEntry); } ContentTypes.HasModTime = true; ContentTypes.HasLength = true; } // Parse v5 directory/file entry content descriptions. // Returns the descriptors, or an error if we did not find a path or ran off // the end of the prologue. static llvm::Expected parseV5EntryFormat(const DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr, uint64_t EndPrologueOffset, DWARFDebugLine::ContentTypeTracker *ContentTypes) { ContentDescriptors Descriptors; int FormatCount = DebugLineData.getU8(OffsetPtr); bool HasPath = false; for (int I = 0; I != FormatCount; ++I) { if (*OffsetPtr >= EndPrologueOffset) return createStringError( errc::invalid_argument, "failed to parse entry content descriptions at offset " "0x%8.8" PRIx64 " because offset extends beyond the prologue end at offset " "0x%8.8" PRIx64, *OffsetPtr, EndPrologueOffset); ContentDescriptor Descriptor; Descriptor.Type = dwarf::LineNumberEntryFormat(DebugLineData.getULEB128(OffsetPtr)); Descriptor.Form = dwarf::Form(DebugLineData.getULEB128(OffsetPtr)); if (Descriptor.Type == dwarf::DW_LNCT_path) HasPath = true; if (ContentTypes) ContentTypes->trackContentType(Descriptor.Type); Descriptors.push_back(Descriptor); } if (!HasPath) return createStringError(errc::invalid_argument, "failed to parse entry content descriptions" " because no path was found"); return Descriptors; } static Error parseV5DirFileTables(const DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr, uint64_t EndPrologueOffset, const dwarf::FormParams &FormParams, const DWARFContext &Ctx, const DWARFUnit *U, DWARFDebugLine::ContentTypeTracker &ContentTypes, std::vector &IncludeDirectories, std::vector &FileNames) { // Get the directory entry description. llvm::Expected DirDescriptors = parseV5EntryFormat(DebugLineData, OffsetPtr, EndPrologueOffset, nullptr); if (!DirDescriptors) return DirDescriptors.takeError(); // Get the directory entries, according to the format described above. int DirEntryCount = DebugLineData.getU8(OffsetPtr); for (int I = 0; I != DirEntryCount; ++I) { if (*OffsetPtr >= EndPrologueOffset) return createStringError( errc::invalid_argument, "failed to parse directory entry at offset " "0x%8.8" PRIx64 " because offset extends beyond the prologue end at offset " "0x%8.8" PRIx64, *OffsetPtr, EndPrologueOffset); for (auto Descriptor : *DirDescriptors) { DWARFFormValue Value(Descriptor.Form); switch (Descriptor.Type) { case DW_LNCT_path: if (!Value.extractValue(DebugLineData, OffsetPtr, FormParams, &Ctx, U)) return createStringError(errc::invalid_argument, "failed to parse directory entry because " "extracting the form value failed."); IncludeDirectories.push_back(Value); break; default: if (!Value.skipValue(DebugLineData, OffsetPtr, FormParams)) return createStringError(errc::invalid_argument, "failed to parse directory entry because " "skipping the form value failed."); } } } // Get the file entry description. llvm::Expected FileDescriptors = parseV5EntryFormat( DebugLineData, OffsetPtr, EndPrologueOffset, &ContentTypes); if (!FileDescriptors) return FileDescriptors.takeError(); // Get the file entries, according to the format described above. int FileEntryCount = DebugLineData.getU8(OffsetPtr); for (int I = 0; I != FileEntryCount; ++I) { if (*OffsetPtr >= EndPrologueOffset) return createStringError( errc::invalid_argument, "failed to parse file entry at offset " "0x%8.8" PRIx64 " because offset extends beyond the prologue end at offset " "0x%8.8" PRIx64, *OffsetPtr, EndPrologueOffset); DWARFDebugLine::FileNameEntry FileEntry; for (auto Descriptor : *FileDescriptors) { DWARFFormValue Value(Descriptor.Form); if (!Value.extractValue(DebugLineData, OffsetPtr, FormParams, &Ctx, U)) return createStringError(errc::invalid_argument, "failed to parse file entry because " "extracting the form value failed."); switch (Descriptor.Type) { case DW_LNCT_path: FileEntry.Name = Value; break; case DW_LNCT_LLVM_source: FileEntry.Source = Value; break; case DW_LNCT_directory_index: FileEntry.DirIdx = Value.getAsUnsignedConstant().getValue(); break; case DW_LNCT_timestamp: FileEntry.ModTime = Value.getAsUnsignedConstant().getValue(); break; case DW_LNCT_size: FileEntry.Length = Value.getAsUnsignedConstant().getValue(); break; case DW_LNCT_MD5: if (!Value.getAsBlock() || Value.getAsBlock().getValue().size() != 16) return createStringError( errc::invalid_argument, "failed to parse file entry because the MD5 hash is invalid"); std::uninitialized_copy_n(Value.getAsBlock().getValue().begin(), 16, FileEntry.Checksum.Bytes.begin()); break; default: break; } } FileNames.push_back(FileEntry); } return Error::success(); } Error DWARFDebugLine::Prologue::parse(const DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr, const DWARFContext &Ctx, const DWARFUnit *U) { const uint64_t PrologueOffset = *OffsetPtr; clear(); TotalLength = DebugLineData.getRelocatedValue(4, OffsetPtr); if (TotalLength == dwarf::DW_LENGTH_DWARF64) { FormParams.Format = dwarf::DWARF64; TotalLength = DebugLineData.getU64(OffsetPtr); } else if (TotalLength >= dwarf::DW_LENGTH_lo_reserved) { return createStringError(errc::invalid_argument, "parsing line table prologue at offset 0x%8.8" PRIx64 " unsupported reserved unit length found of value 0x%8.8" PRIx64, PrologueOffset, TotalLength); } FormParams.Version = DebugLineData.getU16(OffsetPtr); if (getVersion() < 2) return createStringError(errc::not_supported, "parsing line table prologue at offset 0x%8.8" PRIx64 " found unsupported version 0x%2.2" PRIx16, PrologueOffset, getVersion()); if (getVersion() >= 5) { FormParams.AddrSize = DebugLineData.getU8(OffsetPtr); assert((DebugLineData.getAddressSize() == 0 || DebugLineData.getAddressSize() == getAddressSize()) && "Line table header and data extractor disagree"); SegSelectorSize = DebugLineData.getU8(OffsetPtr); } PrologueLength = DebugLineData.getRelocatedValue(sizeofPrologueLength(), OffsetPtr); const uint64_t EndPrologueOffset = PrologueLength + *OffsetPtr; MinInstLength = DebugLineData.getU8(OffsetPtr); if (getVersion() >= 4) MaxOpsPerInst = DebugLineData.getU8(OffsetPtr); DefaultIsStmt = DebugLineData.getU8(OffsetPtr); LineBase = DebugLineData.getU8(OffsetPtr); LineRange = DebugLineData.getU8(OffsetPtr); OpcodeBase = DebugLineData.getU8(OffsetPtr); StandardOpcodeLengths.reserve(OpcodeBase - 1); for (uint32_t I = 1; I < OpcodeBase; ++I) { uint8_t OpLen = DebugLineData.getU8(OffsetPtr); StandardOpcodeLengths.push_back(OpLen); } if (getVersion() >= 5) { if (Error e = parseV5DirFileTables( DebugLineData, OffsetPtr, EndPrologueOffset, FormParams, Ctx, U, ContentTypes, IncludeDirectories, FileNames)) { return joinErrors( createStringError( errc::invalid_argument, "parsing line table prologue at 0x%8.8" PRIx64 " found an invalid directory or file table description at" " 0x%8.8" PRIx64, PrologueOffset, *OffsetPtr), std::move(e)); } } else parseV2DirFileTables(DebugLineData, OffsetPtr, EndPrologueOffset, ContentTypes, IncludeDirectories, FileNames); if (*OffsetPtr != EndPrologueOffset) return createStringError(errc::invalid_argument, "parsing line table prologue at 0x%8.8" PRIx64 " should have ended at 0x%8.8" PRIx64 " but it ended at 0x%8.8" PRIx64, PrologueOffset, EndPrologueOffset, *OffsetPtr); return Error::success(); } DWARFDebugLine::Row::Row(bool DefaultIsStmt) { reset(DefaultIsStmt); } void DWARFDebugLine::Row::postAppend() { Discriminator = 0; BasicBlock = false; PrologueEnd = false; EpilogueBegin = false; } void DWARFDebugLine::Row::reset(bool DefaultIsStmt) { Address.Address = 0; Address.SectionIndex = object::SectionedAddress::UndefSection; Line = 1; Column = 0; File = 1; Isa = 0; Discriminator = 0; IsStmt = DefaultIsStmt; BasicBlock = false; EndSequence = false; PrologueEnd = false; EpilogueBegin = false; } void DWARFDebugLine::Row::dumpTableHeader(raw_ostream &OS) { OS << "Address Line Column File ISA Discriminator Flags\n" << "------------------ ------ ------ ------ --- ------------- " "-------------\n"; } void DWARFDebugLine::Row::dump(raw_ostream &OS) const { OS << format("0x%16.16" PRIx64 " %6u %6u", Address.Address, Line, Column) << format(" %6u %3u %13u ", File, Isa, Discriminator) << (IsStmt ? " is_stmt" : "") << (BasicBlock ? " basic_block" : "") << (PrologueEnd ? " prologue_end" : "") << (EpilogueBegin ? " epilogue_begin" : "") << (EndSequence ? " end_sequence" : "") << '\n'; } DWARFDebugLine::Sequence::Sequence() { reset(); } void DWARFDebugLine::Sequence::reset() { LowPC = 0; HighPC = 0; SectionIndex = object::SectionedAddress::UndefSection; FirstRowIndex = 0; LastRowIndex = 0; Empty = true; } DWARFDebugLine::LineTable::LineTable() { clear(); } void DWARFDebugLine::LineTable::dump(raw_ostream &OS, DIDumpOptions DumpOptions) const { Prologue.dump(OS, DumpOptions); OS << '\n'; if (!Rows.empty()) { Row::dumpTableHeader(OS); for (const Row &R : Rows) { R.dump(OS); } } } void DWARFDebugLine::LineTable::clear() { Prologue.clear(); Rows.clear(); Sequences.clear(); } DWARFDebugLine::ParsingState::ParsingState(struct LineTable *LT) : LineTable(LT) { resetRowAndSequence(); } void DWARFDebugLine::ParsingState::resetRowAndSequence() { Row.reset(LineTable->Prologue.DefaultIsStmt); Sequence.reset(); } void DWARFDebugLine::ParsingState::appendRowToMatrix() { unsigned RowNumber = LineTable->Rows.size(); if (Sequence.Empty) { // Record the beginning of instruction sequence. Sequence.Empty = false; Sequence.LowPC = Row.Address.Address; Sequence.FirstRowIndex = RowNumber; } LineTable->appendRow(Row); if (Row.EndSequence) { // Record the end of instruction sequence. Sequence.HighPC = Row.Address.Address; Sequence.LastRowIndex = RowNumber + 1; Sequence.SectionIndex = Row.Address.SectionIndex; if (Sequence.isValid()) LineTable->appendSequence(Sequence); Sequence.reset(); } Row.postAppend(); } const DWARFDebugLine::LineTable * DWARFDebugLine::getLineTable(uint64_t Offset) const { LineTableConstIter Pos = LineTableMap.find(Offset); if (Pos != LineTableMap.end()) return &Pos->second; return nullptr; } Expected DWARFDebugLine::getOrParseLineTable( DWARFDataExtractor &DebugLineData, uint64_t Offset, const DWARFContext &Ctx, const DWARFUnit *U, std::function RecoverableErrorCallback) { if (!DebugLineData.isValidOffset(Offset)) return createStringError(errc::invalid_argument, "offset 0x%8.8" PRIx64 " is not a valid debug line section offset", Offset); std::pair Pos = LineTableMap.insert(LineTableMapTy::value_type(Offset, LineTable())); LineTable *LT = &Pos.first->second; if (Pos.second) { if (Error Err = LT->parse(DebugLineData, &Offset, Ctx, U, RecoverableErrorCallback)) return std::move(Err); return LT; } return LT; } Error DWARFDebugLine::LineTable::parse( DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr, const DWARFContext &Ctx, const DWARFUnit *U, std::function RecoverableErrorCallback, raw_ostream *OS) { const uint64_t DebugLineOffset = *OffsetPtr; clear(); Error PrologueErr = Prologue.parse(DebugLineData, OffsetPtr, Ctx, U); if (OS) { // The presence of OS signals verbose dumping. DIDumpOptions DumpOptions; DumpOptions.Verbose = true; Prologue.dump(*OS, DumpOptions); } if (PrologueErr) return PrologueErr; const uint64_t EndOffset = DebugLineOffset + Prologue.TotalLength + Prologue.sizeofTotalLength(); // See if we should tell the data extractor the address size. if (DebugLineData.getAddressSize() == 0) DebugLineData.setAddressSize(Prologue.getAddressSize()); else assert(Prologue.getAddressSize() == 0 || Prologue.getAddressSize() == DebugLineData.getAddressSize()); ParsingState State(this); while (*OffsetPtr < EndOffset) { if (OS) *OS << format("0x%08.08" PRIx64 ": ", *OffsetPtr); uint8_t Opcode = DebugLineData.getU8(OffsetPtr); if (OS) *OS << format("%02.02" PRIx8 " ", Opcode); if (Opcode == 0) { // Extended Opcodes always start with a zero opcode followed by // a uleb128 length so you can skip ones you don't know about uint64_t Len = DebugLineData.getULEB128(OffsetPtr); uint64_t ExtOffset = *OffsetPtr; // Tolerate zero-length; assume length is correct and soldier on. if (Len == 0) { if (OS) *OS << "Badly formed extended line op (length 0)\n"; continue; } uint8_t SubOpcode = DebugLineData.getU8(OffsetPtr); if (OS) *OS << LNExtendedString(SubOpcode); switch (SubOpcode) { case DW_LNE_end_sequence: // Set the end_sequence register of the state machine to true and // append a row to the matrix using the current values of the // state-machine registers. Then reset the registers to the initial // values specified above. Every statement program sequence must end // with a DW_LNE_end_sequence instruction which creates a row whose // address is that of the byte after the last target machine instruction // of the sequence. State.Row.EndSequence = true; State.appendRowToMatrix(); if (OS) { *OS << "\n"; OS->indent(12); State.Row.dump(*OS); } State.resetRowAndSequence(); break; case DW_LNE_set_address: // Takes a single relocatable address as an operand. The size of the // operand is the size appropriate to hold an address on the target // machine. Set the address register to the value given by the // relocatable address. All of the other statement program opcodes // that affect the address register add a delta to it. This instruction // stores a relocatable value into it instead. // // Make sure the extractor knows the address size. If not, infer it // from the size of the operand. if (DebugLineData.getAddressSize() == 0) DebugLineData.setAddressSize(Len - 1); else if (DebugLineData.getAddressSize() != Len - 1) { return createStringError(errc::invalid_argument, "mismatching address size at offset 0x%8.8" PRIx64 " expected 0x%2.2" PRIx8 " found 0x%2.2" PRIx64, ExtOffset, DebugLineData.getAddressSize(), Len - 1); } State.Row.Address.Address = DebugLineData.getRelocatedAddress( OffsetPtr, &State.Row.Address.SectionIndex); if (OS) *OS << format(" (0x%16.16" PRIx64 ")", State.Row.Address.Address); break; case DW_LNE_define_file: // Takes 4 arguments. The first is a null terminated string containing // a source file name. The second is an unsigned LEB128 number // representing the directory index of the directory in which the file // was found. The third is an unsigned LEB128 number representing the // time of last modification of the file. The fourth is an unsigned // LEB128 number representing the length in bytes of the file. The time // and length fields may contain LEB128(0) if the information is not // available. // // The directory index represents an entry in the include_directories // section of the statement program prologue. The index is LEB128(0) // if the file was found in the current directory of the compilation, // LEB128(1) if it was found in the first directory in the // include_directories section, and so on. The directory index is // ignored for file names that represent full path names. // // The files are numbered, starting at 1, in the order in which they // appear; the names in the prologue come before names defined by // the DW_LNE_define_file instruction. These numbers are used in the // the file register of the state machine. { FileNameEntry FileEntry; const char *Name = DebugLineData.getCStr(OffsetPtr); FileEntry.Name = DWARFFormValue::createFromPValue(dwarf::DW_FORM_string, Name); FileEntry.DirIdx = DebugLineData.getULEB128(OffsetPtr); FileEntry.ModTime = DebugLineData.getULEB128(OffsetPtr); FileEntry.Length = DebugLineData.getULEB128(OffsetPtr); Prologue.FileNames.push_back(FileEntry); if (OS) *OS << " (" << Name << ", dir=" << FileEntry.DirIdx << ", mod_time=" << format("(0x%16.16" PRIx64 ")", FileEntry.ModTime) << ", length=" << FileEntry.Length << ")"; } break; case DW_LNE_set_discriminator: State.Row.Discriminator = DebugLineData.getULEB128(OffsetPtr); if (OS) *OS << " (" << State.Row.Discriminator << ")"; break; default: if (OS) *OS << format("Unrecognized extended op 0x%02.02" PRIx8, SubOpcode) << format(" length %" PRIx64, Len); // Len doesn't include the zero opcode byte or the length itself, but // it does include the sub_opcode, so we have to adjust for that. (*OffsetPtr) += Len - 1; break; } // Make sure the stated and parsed lengths are the same. // Otherwise we have an unparseable line-number program. if (*OffsetPtr - ExtOffset != Len) return createStringError(errc::illegal_byte_sequence, "unexpected line op length at offset 0x%8.8" PRIx64 " expected 0x%2.2" PRIx64 " found 0x%2.2" PRIx64, ExtOffset, Len, *OffsetPtr - ExtOffset); } else if (Opcode < Prologue.OpcodeBase) { if (OS) *OS << LNStandardString(Opcode); switch (Opcode) { // Standard Opcodes case DW_LNS_copy: // Takes no arguments. Append a row to the matrix using the // current values of the state-machine registers. if (OS) { *OS << "\n"; OS->indent(12); State.Row.dump(*OS); *OS << "\n"; } State.appendRowToMatrix(); break; case DW_LNS_advance_pc: // Takes a single unsigned LEB128 operand, multiplies it by the // min_inst_length field of the prologue, and adds the // result to the address register of the state machine. { uint64_t AddrOffset = DebugLineData.getULEB128(OffsetPtr) * Prologue.MinInstLength; State.Row.Address.Address += AddrOffset; if (OS) *OS << " (" << AddrOffset << ")"; } break; case DW_LNS_advance_line: // Takes a single signed LEB128 operand and adds that value to // the line register of the state machine. State.Row.Line += DebugLineData.getSLEB128(OffsetPtr); if (OS) *OS << " (" << State.Row.Line << ")"; break; case DW_LNS_set_file: // Takes a single unsigned LEB128 operand and stores it in the file // register of the state machine. State.Row.File = DebugLineData.getULEB128(OffsetPtr); if (OS) *OS << " (" << State.Row.File << ")"; break; case DW_LNS_set_column: // Takes a single unsigned LEB128 operand and stores it in the // column register of the state machine. State.Row.Column = DebugLineData.getULEB128(OffsetPtr); if (OS) *OS << " (" << State.Row.Column << ")"; break; case DW_LNS_negate_stmt: // Takes no arguments. Set the is_stmt register of the state // machine to the logical negation of its current value. State.Row.IsStmt = !State.Row.IsStmt; break; case DW_LNS_set_basic_block: // Takes no arguments. Set the basic_block register of the // state machine to true State.Row.BasicBlock = true; break; case DW_LNS_const_add_pc: // Takes no arguments. Add to the address register of the state // machine the address increment value corresponding to special // opcode 255. The motivation for DW_LNS_const_add_pc is this: // when the statement program needs to advance the address by a // small amount, it can use a single special opcode, which occupies // a single byte. When it needs to advance the address by up to // twice the range of the last special opcode, it can use // DW_LNS_const_add_pc followed by a special opcode, for a total // of two bytes. Only if it needs to advance the address by more // than twice that range will it need to use both DW_LNS_advance_pc // and a special opcode, requiring three or more bytes. { uint8_t AdjustOpcode = 255 - Prologue.OpcodeBase; uint64_t AddrOffset = (AdjustOpcode / Prologue.LineRange) * Prologue.MinInstLength; State.Row.Address.Address += AddrOffset; if (OS) *OS << format(" (0x%16.16" PRIx64 ")", AddrOffset); } break; case DW_LNS_fixed_advance_pc: // Takes a single uhalf operand. Add to the address register of // the state machine the value of the (unencoded) operand. This // is the only extended opcode that takes an argument that is not // a variable length number. The motivation for DW_LNS_fixed_advance_pc // is this: existing assemblers cannot emit DW_LNS_advance_pc or // special opcodes because they cannot encode LEB128 numbers or // judge when the computation of a special opcode overflows and // requires the use of DW_LNS_advance_pc. Such assemblers, however, // can use DW_LNS_fixed_advance_pc instead, sacrificing compression. { uint16_t PCOffset = DebugLineData.getRelocatedValue(2, OffsetPtr); State.Row.Address.Address += PCOffset; if (OS) *OS << format(" (0x%4.4" PRIx16 ")", PCOffset); } break; case DW_LNS_set_prologue_end: // Takes no arguments. Set the prologue_end register of the // state machine to true State.Row.PrologueEnd = true; break; case DW_LNS_set_epilogue_begin: // Takes no arguments. Set the basic_block register of the // state machine to true State.Row.EpilogueBegin = true; break; case DW_LNS_set_isa: // Takes a single unsigned LEB128 operand and stores it in the // column register of the state machine. State.Row.Isa = DebugLineData.getULEB128(OffsetPtr); if (OS) *OS << " (" << State.Row.Isa << ")"; break; default: // Handle any unknown standard opcodes here. We know the lengths // of such opcodes because they are specified in the prologue // as a multiple of LEB128 operands for each opcode. { assert(Opcode - 1U < Prologue.StandardOpcodeLengths.size()); uint8_t OpcodeLength = Prologue.StandardOpcodeLengths[Opcode - 1]; for (uint8_t I = 0; I < OpcodeLength; ++I) { uint64_t Value = DebugLineData.getULEB128(OffsetPtr); if (OS) *OS << format("Skipping ULEB128 value: 0x%16.16" PRIx64 ")\n", Value); } } break; } } else { // Special Opcodes // A special opcode value is chosen based on the amount that needs // to be added to the line and address registers. The maximum line // increment for a special opcode is the value of the line_base // field in the header, plus the value of the line_range field, // minus 1 (line base + line range - 1). If the desired line // increment is greater than the maximum line increment, a standard // opcode must be used instead of a special opcode. The "address // advance" is calculated by dividing the desired address increment // by the minimum_instruction_length field from the header. The // special opcode is then calculated using the following formula: // // opcode = (desired line increment - line_base) + // (line_range * address advance) + opcode_base // // If the resulting opcode is greater than 255, a standard opcode // must be used instead. // // To decode a special opcode, subtract the opcode_base from the // opcode itself to give the adjusted opcode. The amount to // increment the address register is the result of the adjusted // opcode divided by the line_range multiplied by the // minimum_instruction_length field from the header. That is: // // address increment = (adjusted opcode / line_range) * // minimum_instruction_length // // The amount to increment the line register is the line_base plus // the result of the adjusted opcode modulo the line_range. That is: // // line increment = line_base + (adjusted opcode % line_range) uint8_t AdjustOpcode = Opcode - Prologue.OpcodeBase; uint64_t AddrOffset = (AdjustOpcode / Prologue.LineRange) * Prologue.MinInstLength; int32_t LineOffset = Prologue.LineBase + (AdjustOpcode % Prologue.LineRange); State.Row.Line += LineOffset; State.Row.Address.Address += AddrOffset; if (OS) { *OS << "address += " << AddrOffset << ", line += " << LineOffset << "\n"; OS->indent(12); State.Row.dump(*OS); } State.appendRowToMatrix(); } if(OS) *OS << "\n"; } if (!State.Sequence.Empty) RecoverableErrorCallback( createStringError(errc::illegal_byte_sequence, "last sequence in debug line table is not terminated!")); // Sort all sequences so that address lookup will work faster. if (!Sequences.empty()) { llvm::sort(Sequences, Sequence::orderByHighPC); // Note: actually, instruction address ranges of sequences should not // overlap (in shared objects and executables). If they do, the address // lookup would still work, though, but result would be ambiguous. // We don't report warning in this case. For example, // sometimes .so compiled from multiple object files contains a few // rudimentary sequences for address ranges [0x0, 0xsomething). } return Error::success(); } uint32_t DWARFDebugLine::LineTable::findRowInSeq( const DWARFDebugLine::Sequence &Seq, object::SectionedAddress Address) const { if (!Seq.containsPC(Address)) return UnknownRowIndex; assert(Seq.SectionIndex == Address.SectionIndex); // In some cases, e.g. first instruction in a function, the compiler generates // two entries, both with the same address. We want the last one. // // In general we want a non-empty range: the last row whose address is less // than or equal to Address. This can be computed as upper_bound - 1. DWARFDebugLine::Row Row; Row.Address = Address; RowIter FirstRow = Rows.begin() + Seq.FirstRowIndex; RowIter LastRow = Rows.begin() + Seq.LastRowIndex; assert(FirstRow->Address.Address <= Row.Address.Address && Row.Address.Address < LastRow[-1].Address.Address); RowIter RowPos = std::upper_bound(FirstRow + 1, LastRow - 1, Row, DWARFDebugLine::Row::orderByAddress) - 1; assert(Seq.SectionIndex == RowPos->Address.SectionIndex); return RowPos - Rows.begin(); } uint32_t DWARFDebugLine::LineTable::lookupAddress( object::SectionedAddress Address) const { // Search for relocatable addresses uint32_t Result = lookupAddressImpl(Address); if (Result != UnknownRowIndex || Address.SectionIndex == object::SectionedAddress::UndefSection) return Result; // Search for absolute addresses Address.SectionIndex = object::SectionedAddress::UndefSection; return lookupAddressImpl(Address); } uint32_t DWARFDebugLine::LineTable::lookupAddressImpl( object::SectionedAddress Address) const { // First, find an instruction sequence containing the given address. DWARFDebugLine::Sequence Sequence; Sequence.SectionIndex = Address.SectionIndex; Sequence.HighPC = Address.Address; SequenceIter It = llvm::upper_bound(Sequences, Sequence, DWARFDebugLine::Sequence::orderByHighPC); if (It == Sequences.end() || It->SectionIndex != Address.SectionIndex) return UnknownRowIndex; return findRowInSeq(*It, Address); } bool DWARFDebugLine::LineTable::lookupAddressRange( object::SectionedAddress Address, uint64_t Size, std::vector &Result) const { // Search for relocatable addresses if (lookupAddressRangeImpl(Address, Size, Result)) return true; if (Address.SectionIndex == object::SectionedAddress::UndefSection) return false; // Search for absolute addresses Address.SectionIndex = object::SectionedAddress::UndefSection; return lookupAddressRangeImpl(Address, Size, Result); } bool DWARFDebugLine::LineTable::lookupAddressRangeImpl( object::SectionedAddress Address, uint64_t Size, std::vector &Result) const { if (Sequences.empty()) return false; uint64_t EndAddr = Address.Address + Size; // First, find an instruction sequence containing the given address. DWARFDebugLine::Sequence Sequence; Sequence.SectionIndex = Address.SectionIndex; Sequence.HighPC = Address.Address; SequenceIter LastSeq = Sequences.end(); SequenceIter SeqPos = llvm::upper_bound( Sequences, Sequence, DWARFDebugLine::Sequence::orderByHighPC); if (SeqPos == LastSeq || !SeqPos->containsPC(Address)) return false; SequenceIter StartPos = SeqPos; // Add the rows from the first sequence to the vector, starting with the // index we just calculated while (SeqPos != LastSeq && SeqPos->LowPC < EndAddr) { const DWARFDebugLine::Sequence &CurSeq = *SeqPos; // For the first sequence, we need to find which row in the sequence is the // first in our range. uint32_t FirstRowIndex = CurSeq.FirstRowIndex; if (SeqPos == StartPos) FirstRowIndex = findRowInSeq(CurSeq, Address); // Figure out the last row in the range. uint32_t LastRowIndex = findRowInSeq(CurSeq, {EndAddr - 1, Address.SectionIndex}); if (LastRowIndex == UnknownRowIndex) LastRowIndex = CurSeq.LastRowIndex - 1; assert(FirstRowIndex != UnknownRowIndex); assert(LastRowIndex != UnknownRowIndex); for (uint32_t I = FirstRowIndex; I <= LastRowIndex; ++I) { Result.push_back(I); } ++SeqPos; } return true; } Optional DWARFDebugLine::LineTable::getSourceByIndex(uint64_t FileIndex, FileLineInfoKind Kind) const { if (Kind == FileLineInfoKind::None || !Prologue.hasFileAtIndex(FileIndex)) return None; const FileNameEntry &Entry = Prologue.getFileNameEntry(FileIndex); if (Optional source = Entry.Source.getAsCString()) return StringRef(*source); return None; } static bool isPathAbsoluteOnWindowsOrPosix(const Twine &Path) { // Debug info can contain paths from any OS, not necessarily // an OS we're currently running on. Moreover different compilation units can // be compiled on different operating systems and linked together later. return sys::path::is_absolute(Path, sys::path::Style::posix) || sys::path::is_absolute(Path, sys::path::Style::windows); } bool DWARFDebugLine::Prologue::getFileNameByIndex( uint64_t FileIndex, StringRef CompDir, FileLineInfoKind Kind, std::string &Result, sys::path::Style Style) const { if (Kind == FileLineInfoKind::None || !hasFileAtIndex(FileIndex)) return false; const FileNameEntry &Entry = getFileNameEntry(FileIndex); StringRef FileName = Entry.Name.getAsCString().getValue(); if (Kind != FileLineInfoKind::AbsoluteFilePath || isPathAbsoluteOnWindowsOrPosix(FileName)) { Result = FileName; return true; } SmallString<16> FilePath; StringRef IncludeDir; // Be defensive about the contents of Entry. if (getVersion() >= 5) { if (Entry.DirIdx < IncludeDirectories.size()) IncludeDir = IncludeDirectories[Entry.DirIdx].getAsCString().getValue(); } else { if (0 < Entry.DirIdx && Entry.DirIdx <= IncludeDirectories.size()) IncludeDir = IncludeDirectories[Entry.DirIdx - 1].getAsCString().getValue(); // We may still need to append compilation directory of compile unit. // We know that FileName is not absolute, the only way to have an // absolute path at this point would be if IncludeDir is absolute. if (!CompDir.empty() && !isPathAbsoluteOnWindowsOrPosix(IncludeDir)) sys::path::append(FilePath, Style, CompDir); } // sys::path::append skips empty strings. sys::path::append(FilePath, Style, IncludeDir, FileName); Result = FilePath.str(); return true; } bool DWARFDebugLine::LineTable::getFileLineInfoForAddress( object::SectionedAddress Address, const char *CompDir, FileLineInfoKind Kind, DILineInfo &Result) const { // Get the index of row we're looking for in the line table. uint32_t RowIndex = lookupAddress(Address); if (RowIndex == -1U) return false; // Take file number and line/column from the row. const auto &Row = Rows[RowIndex]; if (!getFileNameByIndex(Row.File, CompDir, Kind, Result.FileName)) return false; Result.Line = Row.Line; Result.Column = Row.Column; Result.Discriminator = Row.Discriminator; Result.Source = getSourceByIndex(Row.File, Kind); return true; } // We want to supply the Unit associated with a .debug_line[.dwo] table when // we dump it, if possible, but still dump the table even if there isn't a Unit. // Therefore, collect up handles on all the Units that point into the // line-table section. static DWARFDebugLine::SectionParser::LineToUnitMap buildLineToUnitMap(DWARFDebugLine::SectionParser::cu_range CUs, DWARFDebugLine::SectionParser::tu_range TUs) { DWARFDebugLine::SectionParser::LineToUnitMap LineToUnit; for (const auto &CU : CUs) if (auto CUDIE = CU->getUnitDIE()) if (auto StmtOffset = toSectionOffset(CUDIE.find(DW_AT_stmt_list))) LineToUnit.insert(std::make_pair(*StmtOffset, &*CU)); for (const auto &TU : TUs) if (auto TUDIE = TU->getUnitDIE()) if (auto StmtOffset = toSectionOffset(TUDIE.find(DW_AT_stmt_list))) LineToUnit.insert(std::make_pair(*StmtOffset, &*TU)); return LineToUnit; } DWARFDebugLine::SectionParser::SectionParser(DWARFDataExtractor &Data, const DWARFContext &C, cu_range CUs, tu_range TUs) : DebugLineData(Data), Context(C) { LineToUnit = buildLineToUnitMap(CUs, TUs); if (!DebugLineData.isValidOffset(Offset)) Done = true; } bool DWARFDebugLine::Prologue::totalLengthIsValid() const { return TotalLength == dwarf::DW_LENGTH_DWARF64 || TotalLength < dwarf::DW_LENGTH_lo_reserved; } DWARFDebugLine::LineTable DWARFDebugLine::SectionParser::parseNext( function_ref RecoverableErrorCallback, function_ref UnrecoverableErrorCallback, raw_ostream *OS) { assert(DebugLineData.isValidOffset(Offset) && "parsing should have terminated"); DWARFUnit *U = prepareToParse(Offset); uint64_t OldOffset = Offset; LineTable LT; if (Error Err = LT.parse(DebugLineData, &Offset, Context, U, RecoverableErrorCallback, OS)) UnrecoverableErrorCallback(std::move(Err)); moveToNextTable(OldOffset, LT.Prologue); return LT; } void DWARFDebugLine::SectionParser::skip( function_ref ErrorCallback) { assert(DebugLineData.isValidOffset(Offset) && "parsing should have terminated"); DWARFUnit *U = prepareToParse(Offset); uint64_t OldOffset = Offset; LineTable LT; if (Error Err = LT.Prologue.parse(DebugLineData, &Offset, Context, U)) ErrorCallback(std::move(Err)); moveToNextTable(OldOffset, LT.Prologue); } DWARFUnit *DWARFDebugLine::SectionParser::prepareToParse(uint64_t Offset) { DWARFUnit *U = nullptr; auto It = LineToUnit.find(Offset); if (It != LineToUnit.end()) U = It->second; DebugLineData.setAddressSize(U ? U->getAddressByteSize() : 0); return U; } void DWARFDebugLine::SectionParser::moveToNextTable(uint64_t OldOffset, const Prologue &P) { // If the length field is not valid, we don't know where the next table is, so // cannot continue to parse. Mark the parser as done, and leave the Offset // value as it currently is. This will be the end of the bad length field. if (!P.totalLengthIsValid()) { Done = true; return; } Offset = OldOffset + P.TotalLength + P.sizeofTotalLength(); if (!DebugLineData.isValidOffset(Offset)) { Done = true; } } binaryen-version_108/third_party/llvm-project/DWARFDebugLoc.cpp000066400000000000000000000260511423707623100246740ustar00rootroot00000000000000//===- DWARFDebugLoc.cpp --------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugLoc.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFExpression.h" #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Format.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include #include #include using namespace llvm; // When directly dumping the .debug_loc without a compile unit, we have to guess // at the DWARF version. This only affects DW_OP_call_ref, which is a rare // expression that LLVM doesn't produce. Guessing the wrong version means we // won't be able to pretty print expressions in DWARF2 binaries produced by // non-LLVM tools. static void dumpExpression(raw_ostream &OS, ArrayRef Data, bool IsLittleEndian, unsigned AddressSize, const MCRegisterInfo *MRI, DWARFUnit *U) { DWARFDataExtractor Extractor(toStringRef(Data), IsLittleEndian, AddressSize); DWARFExpression(Extractor, dwarf::DWARF_VERSION, AddressSize).print(OS, MRI, U); } void DWARFDebugLoc::LocationList::dump(raw_ostream &OS, uint64_t BaseAddress, bool IsLittleEndian, unsigned AddressSize, const MCRegisterInfo *MRI, DWARFUnit *U, DIDumpOptions DumpOpts, unsigned Indent) const { for (const Entry &E : Entries) { OS << '\n'; OS.indent(Indent); OS << format("[0x%*.*" PRIx64 ", ", AddressSize * 2, AddressSize * 2, BaseAddress + E.Begin); OS << format(" 0x%*.*" PRIx64 ")", AddressSize * 2, AddressSize * 2, BaseAddress + E.End); OS << ": "; dumpExpression(OS, E.Loc, IsLittleEndian, AddressSize, MRI, U); } } DWARFDebugLoc::LocationList const * DWARFDebugLoc::getLocationListAtOffset(uint64_t Offset) const { auto It = partition_point( Locations, [=](const LocationList &L) { return L.Offset < Offset; }); if (It != Locations.end() && It->Offset == Offset) return &(*It); return nullptr; } void DWARFDebugLoc::dump(raw_ostream &OS, const MCRegisterInfo *MRI, DIDumpOptions DumpOpts, Optional Offset) const { auto DumpLocationList = [&](const LocationList &L) { OS << format("0x%8.8" PRIx64 ": ", L.Offset); L.dump(OS, 0, IsLittleEndian, AddressSize, MRI, nullptr, DumpOpts, 12); OS << "\n"; }; if (Offset) { if (auto *L = getLocationListAtOffset(*Offset)) DumpLocationList(*L); return; } for (const LocationList &L : Locations) { DumpLocationList(L); if (&L != &Locations.back()) OS << '\n'; } } Expected DWARFDebugLoc::parseOneLocationList(const DWARFDataExtractor &Data, uint64_t *Offset) { LocationList LL; LL.Offset = *Offset; AddressSize = Data.getAddressSize(); DataExtractor::Cursor C(*Offset); // 2.6.2 Location Lists // A location list entry consists of: while (true) { Entry E; // 1. A beginning address offset. ... E.Begin = Data.getRelocatedAddress(C); // 2. An ending address offset. ... E.End = Data.getRelocatedAddress(C); if (Error Err = C.takeError()) return std::move(Err); // The end of any given location list is marked by an end of list entry, // which consists of a 0 for the beginning address offset and a 0 for the // ending address offset. if (E.Begin == 0 && E.End == 0) { *Offset = C.tell(); return LL; } if (E.Begin != (AddressSize == 4 ? -1U : -1ULL)) { unsigned Bytes = Data.getU16(C); // A single location description describing the location of the object... Data.getU8(C, E.Loc, Bytes); } LL.Entries.push_back(std::move(E)); } } void DWARFDebugLoc::parse(const DWARFDataExtractor &data) { IsLittleEndian = data.isLittleEndian(); AddressSize = data.getAddressSize(); uint64_t Offset = 0; while (Offset < data.getData().size()) { if (auto LL = parseOneLocationList(data, &Offset)) Locations.push_back(std::move(*LL)); else { logAllUnhandledErrors(LL.takeError(), WithColor::error()); break; } } } Error DWARFDebugLoclists::visitLocationList( const DWARFDataExtractor &Data, uint64_t *Offset, uint16_t Version, llvm::function_ref F) { DataExtractor::Cursor C(*Offset); bool Continue = true; while (Continue) { Entry E; E.Offset = C.tell(); E.Kind = Data.getU8(C); switch (E.Kind) { case dwarf::DW_LLE_end_of_list: break; case dwarf::DW_LLE_base_addressx: E.Value0 = Data.getULEB128(C); break; case dwarf::DW_LLE_startx_length: E.Value0 = Data.getULEB128(C); // Pre-DWARF 5 has different interpretation of the length field. We have // to support both pre- and standartized styles for the compatibility. if (Version < 5) E.Value1 = Data.getU32(C); else E.Value1 = Data.getULEB128(C); break; case dwarf::DW_LLE_offset_pair: E.Value0 = Data.getULEB128(C); E.Value1 = Data.getULEB128(C); break; case dwarf::DW_LLE_base_address: E.Value0 = Data.getRelocatedAddress(C); break; case dwarf::DW_LLE_start_length: E.Value0 = Data.getRelocatedAddress(C); E.Value1 = Data.getULEB128(C); break; case dwarf::DW_LLE_startx_endx: case dwarf::DW_LLE_default_location: case dwarf::DW_LLE_start_end: default: cantFail(C.takeError()); return createStringError(errc::illegal_byte_sequence, "LLE of kind %x not supported", (int)E.Kind); } if (E.Kind != dwarf::DW_LLE_base_address && E.Kind != dwarf::DW_LLE_base_addressx && E.Kind != dwarf::DW_LLE_end_of_list) { unsigned Bytes = Version >= 5 ? Data.getULEB128(C) : Data.getU16(C); // A single location description describing the location of the object... Data.getU8(C, E.Loc, Bytes); } if (!C) return C.takeError(); Continue = F(E) && E.Kind != dwarf::DW_LLE_end_of_list; } *Offset = C.tell(); return Error::success(); } bool DWARFDebugLoclists::dumpLocationList(const DWARFDataExtractor &Data, uint64_t *Offset, uint16_t Version, raw_ostream &OS, uint64_t BaseAddr, const MCRegisterInfo *MRI, DWARFUnit *U, DIDumpOptions DumpOpts, unsigned Indent) { size_t MaxEncodingStringLength = 0; if (DumpOpts.Verbose) { #define HANDLE_DW_LLE(ID, NAME) \ MaxEncodingStringLength = std::max(MaxEncodingStringLength, \ dwarf::LocListEncodingString(ID).size()); #include "llvm/BinaryFormat/Dwarf.def" } OS << format("0x%8.8" PRIx64 ": ", *Offset); Error E = visitLocationList(Data, Offset, Version, [&](const Entry &E) { E.dump(OS, BaseAddr, Data.isLittleEndian(), Data.getAddressSize(), MRI, U, DumpOpts, Indent, MaxEncodingStringLength); return true; }); if (E) { OS << "\n"; OS.indent(Indent); OS << "error: " << toString(std::move(E)); return false; } return true; } void DWARFDebugLoclists::Entry::dump(raw_ostream &OS, uint64_t &BaseAddr, bool IsLittleEndian, unsigned AddressSize, const MCRegisterInfo *MRI, DWARFUnit *U, DIDumpOptions DumpOpts, unsigned Indent, size_t MaxEncodingStringLength) const { if (DumpOpts.Verbose) { OS << "\n"; OS.indent(Indent); auto EncodingString = dwarf::LocListEncodingString(Kind); // Unsupported encodings should have been reported during parsing. assert(!EncodingString.empty() && "Unknown loclist entry encoding"); OS << format("%s%*c", EncodingString.data(), MaxEncodingStringLength - EncodingString.size() + 1, '('); switch (Kind) { case dwarf::DW_LLE_startx_length: case dwarf::DW_LLE_start_length: case dwarf::DW_LLE_offset_pair: OS << format("0x%*.*" PRIx64 ", 0x%*.*" PRIx64, AddressSize * 2, AddressSize * 2, Value0, AddressSize * 2, AddressSize * 2, Value1); break; case dwarf::DW_LLE_base_addressx: case dwarf::DW_LLE_base_address: OS << format("0x%*.*" PRIx64, AddressSize * 2, AddressSize * 2, Value0); break; case dwarf::DW_LLE_end_of_list: break; } OS << ')'; } auto PrintPrefix = [&] { OS << "\n"; OS.indent(Indent); if (DumpOpts.Verbose) OS << format("%*s", MaxEncodingStringLength, (const char *)"=> "); }; switch (Kind) { case dwarf::DW_LLE_startx_length: PrintPrefix(); OS << "Addr idx " << Value0 << " (w/ length " << Value1 << "): "; break; case dwarf::DW_LLE_start_length: PrintPrefix(); DWARFAddressRange(Value0, Value0 + Value1) .dump(OS, AddressSize, DumpOpts); OS << ": "; break; case dwarf::DW_LLE_offset_pair: PrintPrefix(); DWARFAddressRange(BaseAddr + Value0, BaseAddr + Value1) .dump(OS, AddressSize, DumpOpts); OS << ": "; break; case dwarf::DW_LLE_base_addressx: if (!DumpOpts.Verbose) return; break; case dwarf::DW_LLE_end_of_list: if (!DumpOpts.Verbose) return; break; case dwarf::DW_LLE_base_address: BaseAddr = Value0; if (!DumpOpts.Verbose) return; break; default: llvm_unreachable("unreachable locations list kind"); } dumpExpression(OS, Loc, IsLittleEndian, AddressSize, MRI, U); } void DWARFDebugLoclists::dumpRange(const DWARFDataExtractor &Data, uint64_t StartOffset, uint64_t Size, uint16_t Version, raw_ostream &OS, uint64_t BaseAddr, const MCRegisterInfo *MRI, DIDumpOptions DumpOpts) { if (!Data.isValidOffsetForDataOfSize(StartOffset, Size)) { OS << "Invalid dump range\n"; return; } uint64_t Offset = StartOffset; StringRef Separator; bool CanContinue = true; while (CanContinue && Offset < StartOffset + Size) { OS << Separator; Separator = "\n"; CanContinue = dumpLocationList(Data, &Offset, Version, OS, BaseAddr, MRI, nullptr, DumpOpts, /*Indent=*/12); OS << '\n'; } } binaryen-version_108/third_party/llvm-project/DWARFDebugMacro.cpp000066400000000000000000000062011423707623100252130ustar00rootroot00000000000000//===- DWARFDebugMacro.cpp ------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugMacro.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include using namespace llvm; using namespace dwarf; void DWARFDebugMacro::dump(raw_ostream &OS) const { unsigned IndLevel = 0; for (const auto &Macros : MacroLists) { for (const Entry &E : Macros) { // There should not be DW_MACINFO_end_file when IndLevel is Zero. However, // this check handles the case of corrupted ".debug_macinfo" section. if (IndLevel > 0) IndLevel -= (E.Type == DW_MACINFO_end_file); // Print indentation. for (unsigned I = 0; I < IndLevel; I++) OS << " "; IndLevel += (E.Type == DW_MACINFO_start_file); WithColor(OS, HighlightColor::Macro).get() << MacinfoString(E.Type); switch (E.Type) { default: // Got a corrupted ".debug_macinfo" section (invalid macinfo type). break; case DW_MACINFO_define: case DW_MACINFO_undef: OS << " - lineno: " << E.Line; OS << " macro: " << E.MacroStr; break; case DW_MACINFO_start_file: OS << " - lineno: " << E.Line; OS << " filenum: " << E.File; break; case DW_MACINFO_end_file: break; case DW_MACINFO_vendor_ext: OS << " - constant: " << E.ExtConstant; OS << " string: " << E.ExtStr; break; } OS << "\n"; } OS << "\n"; } } void DWARFDebugMacro::parse(DataExtractor data) { uint64_t Offset = 0; MacroList *M = nullptr; while (data.isValidOffset(Offset)) { if (!M) { MacroLists.emplace_back(); M = &MacroLists.back(); } // A macro list entry consists of: M->emplace_back(); Entry &E = M->back(); // 1. Macinfo type E.Type = data.getULEB128(&Offset); if (E.Type == 0) { // Reached end of a ".debug_macinfo" section contribution. continue; } switch (E.Type) { default: // Got a corrupted ".debug_macinfo" section (invalid macinfo type). // Push the corrupted entry to the list and halt parsing. E.Type = DW_MACINFO_invalid; return; case DW_MACINFO_define: case DW_MACINFO_undef: // 2. Source line E.Line = data.getULEB128(&Offset); // 3. Macro string E.MacroStr = data.getCStr(&Offset); break; case DW_MACINFO_start_file: // 2. Source line E.Line = data.getULEB128(&Offset); // 3. Source file id E.File = data.getULEB128(&Offset); break; case DW_MACINFO_end_file: break; case DW_MACINFO_vendor_ext: // 2. Vendor extension constant E.ExtConstant = data.getULEB128(&Offset); // 3. Vendor extension string E.ExtStr = data.getCStr(&Offset); break; } } } binaryen-version_108/third_party/llvm-project/DWARFDebugPubTable.cpp000066400000000000000000000050331423707623100256520ustar00rootroot00000000000000//===- DWARFDebugPubTable.cpp ---------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h" #include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/Support/DataExtractor.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include using namespace llvm; using namespace dwarf; DWARFDebugPubTable::DWARFDebugPubTable(const DWARFObject &Obj, const DWARFSection &Sec, bool LittleEndian, bool GnuStyle) : GnuStyle(GnuStyle) { DWARFDataExtractor PubNames(Obj, Sec, LittleEndian, 0); uint64_t Offset = 0; while (PubNames.isValidOffset(Offset)) { Sets.push_back({}); Set &SetData = Sets.back(); SetData.Length = PubNames.getU32(&Offset); SetData.Version = PubNames.getU16(&Offset); SetData.Offset = PubNames.getRelocatedValue(4, &Offset); SetData.Size = PubNames.getU32(&Offset); while (Offset < Sec.Data.size()) { uint32_t DieRef = PubNames.getU32(&Offset); if (DieRef == 0) break; uint8_t IndexEntryValue = GnuStyle ? PubNames.getU8(&Offset) : 0; StringRef Name = PubNames.getCStrRef(&Offset); SetData.Entries.push_back( {DieRef, PubIndexEntryDescriptor(IndexEntryValue), Name}); } } } void DWARFDebugPubTable::dump(raw_ostream &OS) const { for (const Set &S : Sets) { OS << "length = " << format("0x%08x", S.Length); OS << " version = " << format("0x%04x", S.Version); OS << " unit_offset = " << format("0x%08" PRIx64, S.Offset); OS << " unit_size = " << format("0x%08x", S.Size) << '\n'; OS << (GnuStyle ? "Offset Linkage Kind Name\n" : "Offset Name\n"); for (const Entry &E : S.Entries) { OS << format("0x%8.8" PRIx64 " ", E.SecOffset); if (GnuStyle) { StringRef EntryLinkage = GDBIndexEntryLinkageString(E.Descriptor.Linkage); StringRef EntryKind = dwarf::GDBIndexEntryKindString(E.Descriptor.Kind); OS << format("%-8s", EntryLinkage.data()) << ' ' << format("%-8s", EntryKind.data()) << ' '; } OS << '\"' << E.Name << "\"\n"; } } } binaryen-version_108/third_party/llvm-project/DWARFDebugRangeList.cpp000066400000000000000000000063341423707623100260510ustar00rootroot00000000000000//===- DWARFDebugRangesList.cpp -------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include #include using namespace llvm; void DWARFDebugRangeList::clear() { Offset = -1ULL; AddressSize = 0; Entries.clear(); } Error DWARFDebugRangeList::extract(const DWARFDataExtractor &data, uint64_t *offset_ptr) { clear(); if (!data.isValidOffset(*offset_ptr)) return createStringError(errc::invalid_argument, "invalid range list offset 0x%" PRIx64, *offset_ptr); AddressSize = data.getAddressSize(); if (AddressSize != 4 && AddressSize != 8) return createStringError(errc::invalid_argument, "invalid address size: %" PRIu8, AddressSize); Offset = *offset_ptr; while (true) { RangeListEntry Entry; Entry.SectionIndex = -1ULL; uint64_t prev_offset = *offset_ptr; Entry.StartAddress = data.getRelocatedAddress(offset_ptr); Entry.EndAddress = data.getRelocatedAddress(offset_ptr, &Entry.SectionIndex); // Check that both values were extracted correctly. if (*offset_ptr != prev_offset + 2 * AddressSize) { clear(); return createStringError(errc::invalid_argument, "invalid range list entry at offset 0x%" PRIx64, prev_offset); } if (Entry.isEndOfListEntry()) break; Entries.push_back(Entry); } return Error::success(); } void DWARFDebugRangeList::dump(raw_ostream &OS) const { for (const RangeListEntry &RLE : Entries) { const char *format_str = (AddressSize == 4 ? "%08" PRIx64 " %08" PRIx64 " %08" PRIx64 "\n" : "%08" PRIx64 " %016" PRIx64 " %016" PRIx64 "\n"); OS << format(format_str, Offset, RLE.StartAddress, RLE.EndAddress); } OS << format("%08" PRIx64 " \n", Offset); } DWARFAddressRangesVector DWARFDebugRangeList::getAbsoluteRanges( llvm::Optional BaseAddr) const { DWARFAddressRangesVector Res; for (const RangeListEntry &RLE : Entries) { if (RLE.isBaseAddressSelectionEntry(AddressSize)) { BaseAddr = {RLE.EndAddress, RLE.SectionIndex}; continue; } DWARFAddressRange E; E.LowPC = RLE.StartAddress; E.HighPC = RLE.EndAddress; E.SectionIndex = RLE.SectionIndex; // Base address of a range list entry is determined by the closest preceding // base address selection entry in the same range list. It defaults to the // base address of the compilation unit if there is no such entry. if (BaseAddr) { E.LowPC += BaseAddr->Address; E.HighPC += BaseAddr->Address; if (E.SectionIndex == -1ULL) E.SectionIndex = BaseAddr->SectionIndex; } Res.push_back(E); } return Res; } binaryen-version_108/third_party/llvm-project/DWARFDebugRnglists.cpp000066400000000000000000000210411423707623100257560ustar00rootroot00000000000000//===- DWARFDebugRnglists.cpp ---------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDebugRnglists.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Error.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; Error RangeListEntry::extract(DWARFDataExtractor Data, uint64_t End, uint64_t *OffsetPtr) { Offset = *OffsetPtr; SectionIndex = -1ULL; // The caller should guarantee that we have at least 1 byte available, so // we just assert instead of revalidate. assert(*OffsetPtr < End && "not enough space to extract a rangelist encoding"); uint8_t Encoding = Data.getU8(OffsetPtr); switch (Encoding) { case dwarf::DW_RLE_end_of_list: Value0 = Value1 = 0; break; // TODO: Support other encodings. case dwarf::DW_RLE_base_addressx: { uint64_t PreviousOffset = *OffsetPtr - 1; Value0 = Data.getULEB128(OffsetPtr); if (End < *OffsetPtr) return createStringError( errc::invalid_argument, "read past end of table when reading " "DW_RLE_base_addressx encoding at offset 0x%" PRIx64, PreviousOffset); break; } case dwarf::DW_RLE_startx_endx: return createStringError(errc::not_supported, "unsupported rnglists encoding DW_RLE_startx_endx at " "offset 0x%" PRIx64, *OffsetPtr - 1); case dwarf::DW_RLE_startx_length: { uint64_t PreviousOffset = *OffsetPtr - 1; Value0 = Data.getULEB128(OffsetPtr); Value1 = Data.getULEB128(OffsetPtr); if (End < *OffsetPtr) return createStringError( errc::invalid_argument, "read past end of table when reading " "DW_RLE_startx_length encoding at offset 0x%" PRIx64, PreviousOffset); break; } case dwarf::DW_RLE_offset_pair: { uint64_t PreviousOffset = *OffsetPtr - 1; Value0 = Data.getULEB128(OffsetPtr); Value1 = Data.getULEB128(OffsetPtr); if (End < *OffsetPtr) return createStringError(errc::invalid_argument, "read past end of table when reading " "DW_RLE_offset_pair encoding at offset 0x%" PRIx64, PreviousOffset); break; } case dwarf::DW_RLE_base_address: { if ((End - *OffsetPtr) < Data.getAddressSize()) return createStringError(errc::invalid_argument, "insufficient space remaining in table for " "DW_RLE_base_address encoding at offset 0x%" PRIx64, *OffsetPtr - 1); Value0 = Data.getRelocatedAddress(OffsetPtr, &SectionIndex); break; } case dwarf::DW_RLE_start_end: { if ((End - *OffsetPtr) < unsigned(Data.getAddressSize() * 2)) return createStringError(errc::invalid_argument, "insufficient space remaining in table for " "DW_RLE_start_end encoding " "at offset 0x%" PRIx64, *OffsetPtr - 1); Value0 = Data.getRelocatedAddress(OffsetPtr, &SectionIndex); Value1 = Data.getRelocatedAddress(OffsetPtr); break; } case dwarf::DW_RLE_start_length: { uint64_t PreviousOffset = *OffsetPtr - 1; Value0 = Data.getRelocatedAddress(OffsetPtr, &SectionIndex); Value1 = Data.getULEB128(OffsetPtr); if (End < *OffsetPtr) return createStringError(errc::invalid_argument, "read past end of table when reading " "DW_RLE_start_length encoding at offset 0x%" PRIx64, PreviousOffset); break; } default: return createStringError(errc::not_supported, "unknown rnglists encoding 0x%" PRIx32 " at offset 0x%" PRIx64, uint32_t(Encoding), *OffsetPtr - 1); } EntryKind = Encoding; return Error::success(); } DWARFAddressRangesVector DWARFDebugRnglist::getAbsoluteRanges( llvm::Optional BaseAddr, DWARFUnit &U) const { DWARFAddressRangesVector Res; for (const RangeListEntry &RLE : Entries) { if (RLE.EntryKind == dwarf::DW_RLE_end_of_list) break; if (RLE.EntryKind == dwarf::DW_RLE_base_addressx) { BaseAddr = U.getAddrOffsetSectionItem(RLE.Value0); if (!BaseAddr) BaseAddr = {RLE.Value0, -1ULL}; continue; } if (RLE.EntryKind == dwarf::DW_RLE_base_address) { BaseAddr = {RLE.Value0, RLE.SectionIndex}; continue; } DWARFAddressRange E; E.SectionIndex = RLE.SectionIndex; if (BaseAddr && E.SectionIndex == -1ULL) E.SectionIndex = BaseAddr->SectionIndex; switch (RLE.EntryKind) { case dwarf::DW_RLE_offset_pair: E.LowPC = RLE.Value0; E.HighPC = RLE.Value1; if (BaseAddr) { E.LowPC += BaseAddr->Address; E.HighPC += BaseAddr->Address; } break; case dwarf::DW_RLE_start_end: E.LowPC = RLE.Value0; E.HighPC = RLE.Value1; break; case dwarf::DW_RLE_start_length: E.LowPC = RLE.Value0; E.HighPC = E.LowPC + RLE.Value1; break; case dwarf::DW_RLE_startx_length: { auto Start = U.getAddrOffsetSectionItem(RLE.Value0); if (!Start) Start = {0, -1ULL}; E.SectionIndex = Start->SectionIndex; E.LowPC = Start->Address; E.HighPC = E.LowPC + RLE.Value1; break; } default: // Unsupported encodings should have been reported during extraction, // so we should not run into any here. llvm_unreachable("Unsupported range list encoding"); } Res.push_back(E); } return Res; } void RangeListEntry::dump( raw_ostream &OS, uint8_t AddrSize, uint8_t MaxEncodingStringLength, uint64_t &CurrentBase, DIDumpOptions DumpOpts, llvm::function_ref(uint32_t)> LookupPooledAddress) const { auto PrintRawEntry = [](raw_ostream &OS, const RangeListEntry &Entry, uint8_t AddrSize, DIDumpOptions DumpOpts) { if (DumpOpts.Verbose) { DumpOpts.DisplayRawContents = true; DWARFAddressRange(Entry.Value0, Entry.Value1) .dump(OS, AddrSize, DumpOpts); OS << " => "; } }; if (DumpOpts.Verbose) { // Print the section offset in verbose mode. OS << format("0x%8.8" PRIx64 ":", Offset); auto EncodingString = dwarf::RangeListEncodingString(EntryKind); // Unsupported encodings should have been reported during parsing. assert(!EncodingString.empty() && "Unknown range entry encoding"); OS << format(" [%s%*c", EncodingString.data(), MaxEncodingStringLength - EncodingString.size() + 1, ']'); if (EntryKind != dwarf::DW_RLE_end_of_list) OS << ": "; } switch (EntryKind) { case dwarf::DW_RLE_end_of_list: OS << (DumpOpts.Verbose ? "" : ""); break; case dwarf::DW_RLE_base_addressx: { if (auto SA = LookupPooledAddress(Value0)) CurrentBase = SA->Address; else CurrentBase = Value0; if (!DumpOpts.Verbose) return; OS << format(" 0x%*.*" PRIx64, AddrSize * 2, AddrSize * 2, Value0); break; } case dwarf::DW_RLE_base_address: // In non-verbose mode we do not print anything for this entry. CurrentBase = Value0; if (!DumpOpts.Verbose) return; OS << format(" 0x%*.*" PRIx64, AddrSize * 2, AddrSize * 2, Value0); break; case dwarf::DW_RLE_start_length: PrintRawEntry(OS, *this, AddrSize, DumpOpts); DWARFAddressRange(Value0, Value0 + Value1).dump(OS, AddrSize, DumpOpts); break; case dwarf::DW_RLE_offset_pair: PrintRawEntry(OS, *this, AddrSize, DumpOpts); DWARFAddressRange(Value0 + CurrentBase, Value1 + CurrentBase) .dump(OS, AddrSize, DumpOpts); break; case dwarf::DW_RLE_start_end: DWARFAddressRange(Value0, Value1).dump(OS, AddrSize, DumpOpts); break; case dwarf::DW_RLE_startx_length: { PrintRawEntry(OS, *this, AddrSize, DumpOpts); uint64_t Start = 0; if (auto SA = LookupPooledAddress(Value0)) Start = SA->Address; DWARFAddressRange(Start, Start + Value1).dump(OS, AddrSize, DumpOpts); break; } default: llvm_unreachable("Unsupported range list encoding"); } OS << "\n"; } binaryen-version_108/third_party/llvm-project/DWARFDie.cpp000066400000000000000000000574201423707623100237150ustar00rootroot00000000000000//===- DWARFDie.cpp -------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFDie.h" #include "llvm/ADT/None.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h" #include "llvm/DebugInfo/DWARF/DWARFExpression.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Support/DataExtractor.h" #include "llvm/Support/Format.h" #include "llvm/Support/FormatAdapters.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include #include using namespace llvm; using namespace dwarf; using namespace object; static void dumpApplePropertyAttribute(raw_ostream &OS, uint64_t Val) { OS << " ("; do { uint64_t Shift = countTrailingZeros(Val); assert(Shift < 64 && "undefined behavior"); uint64_t Bit = 1ULL << Shift; auto PropName = ApplePropertyString(Bit); if (!PropName.empty()) OS << PropName; else OS << format("DW_APPLE_PROPERTY_0x%" PRIx64, Bit); if (!(Val ^= Bit)) break; OS << ", "; } while (true); OS << ")"; } static void dumpRanges(const DWARFObject &Obj, raw_ostream &OS, const DWARFAddressRangesVector &Ranges, unsigned AddressSize, unsigned Indent, const DIDumpOptions &DumpOpts) { if (!DumpOpts.ShowAddresses) return; ArrayRef SectionNames; if (DumpOpts.Verbose) SectionNames = Obj.getSectionNames(); for (const DWARFAddressRange &R : Ranges) { OS << '\n'; OS.indent(Indent); R.dump(OS, AddressSize); DWARFFormValue::dumpAddressSection(Obj, OS, DumpOpts, R.SectionIndex); } } static void dumpLocation(raw_ostream &OS, DWARFFormValue &FormValue, DWARFUnit *U, unsigned Indent, DIDumpOptions DumpOpts) { DWARFContext &Ctx = U->getContext(); const DWARFObject &Obj = Ctx.getDWARFObj(); const MCRegisterInfo *MRI = Ctx.getRegisterInfo(); if (FormValue.isFormClass(DWARFFormValue::FC_Block) || FormValue.isFormClass(DWARFFormValue::FC_Exprloc)) { ArrayRef Expr = *FormValue.getAsBlock(); DataExtractor Data(StringRef((const char *)Expr.data(), Expr.size()), Ctx.isLittleEndian(), 0); DWARFExpression(Data, U->getVersion(), U->getAddressByteSize()) .print(OS, MRI, U); return; } if (FormValue.isFormClass(DWARFFormValue::FC_SectionOffset)) { uint64_t Offset = *FormValue.getAsSectionOffset(); uint64_t BaseAddr = 0; if (Optional BA = U->getBaseAddress()) BaseAddr = BA->Address; auto LLDumpOpts = DumpOpts; LLDumpOpts.Verbose = false; if (!U->isDWOUnit() && !U->getLocSection()->Data.empty()) { DWARFDebugLoc DebugLoc; DWARFDataExtractor Data(Obj, *U->getLocSection(), Ctx.isLittleEndian(), Obj.getAddressSize()); FormValue.dump(OS, DumpOpts); OS << ": "; if (Expected LL = DebugLoc.parseOneLocationList(Data, &Offset)) { LL->dump(OS, BaseAddr, Ctx.isLittleEndian(), Obj.getAddressSize(), MRI, U, LLDumpOpts, Indent); } else { OS << '\n'; OS.indent(Indent); OS << formatv("error extracting location list: {0}", fmt_consume(LL.takeError())); } return; } bool UseLocLists = !U->isDWOUnit(); auto Data = UseLocLists ? DWARFDataExtractor(Obj, Obj.getLoclistsSection(), Ctx.isLittleEndian(), Obj.getAddressSize()) : DWARFDataExtractor(U->getLocSectionData(), Ctx.isLittleEndian(), Obj.getAddressSize()); if (!Data.getData().empty()) { // Old-style location list were used in DWARF v4 (.debug_loc.dwo section). // Modern locations list (.debug_loclists) are used starting from v5. // Ideally we should take the version from the .debug_loclists section // header, but using CU's version for simplicity. DWARFDebugLoclists::dumpLocationList( Data, &Offset, UseLocLists ? U->getVersion() : 4, OS, BaseAddr, MRI, U, LLDumpOpts, Indent); } return; } FormValue.dump(OS, DumpOpts); } /// Dump the name encoded in the type tag. static void dumpTypeTagName(raw_ostream &OS, dwarf::Tag T) { StringRef TagStr = TagString(T); if (!TagStr.startswith("DW_TAG_") || !TagStr.endswith("_type")) return; OS << TagStr.substr(7, TagStr.size() - 12) << " "; } static void dumpArrayType(raw_ostream &OS, const DWARFDie &D) { Optional Bound; for (const DWARFDie &C : D.children()) if (C.getTag() == DW_TAG_subrange_type) { Optional LB; Optional Count; Optional UB; Optional DefaultLB; if (Optional L = C.find(DW_AT_lower_bound)) LB = L->getAsUnsignedConstant(); if (Optional CountV = C.find(DW_AT_count)) Count = CountV->getAsUnsignedConstant(); if (Optional UpperV = C.find(DW_AT_upper_bound)) UB = UpperV->getAsUnsignedConstant(); if (Optional LV = D.getDwarfUnit()->getUnitDIE().find(DW_AT_language)) if (Optional LC = LV->getAsUnsignedConstant()) if ((DefaultLB = LanguageLowerBound(static_cast(*LC)))) if (LB && *LB == *DefaultLB) LB = None; if (!LB && !Count && !UB) OS << "[]"; else if (!LB && (Count || UB) && DefaultLB) OS << '[' << (Count ? *Count : *UB - *DefaultLB + 1) << ']'; else { OS << "[["; if (LB) OS << *LB; else OS << '?'; OS << ", "; if (Count) if (LB) OS << *LB + *Count; else OS << "? + " << *Count; else if (UB) OS << *UB + 1; else OS << '?'; OS << ")]"; } } } /// Recursively dump the DIE type name when applicable. static void dumpTypeName(raw_ostream &OS, const DWARFDie &D) { if (!D.isValid()) return; if (const char *Name = D.getName(DINameKind::LinkageName)) { OS << Name; return; } // FIXME: We should have pretty printers per language. Currently we print // everything as if it was C++ and fall back to the TAG type name. const dwarf::Tag T = D.getTag(); switch (T) { case DW_TAG_array_type: case DW_TAG_pointer_type: case DW_TAG_ptr_to_member_type: case DW_TAG_reference_type: case DW_TAG_rvalue_reference_type: case DW_TAG_subroutine_type: break; default: dumpTypeTagName(OS, T); } // Follow the DW_AT_type if possible. DWARFDie TypeDie = D.getAttributeValueAsReferencedDie(DW_AT_type); dumpTypeName(OS, TypeDie); switch (T) { case DW_TAG_subroutine_type: { if (!TypeDie) OS << "void"; OS << '('; bool First = true; for (const DWARFDie &C : D.children()) { if (C.getTag() == DW_TAG_formal_parameter) { if (!First) OS << ", "; First = false; dumpTypeName(OS, C.getAttributeValueAsReferencedDie(DW_AT_type)); } } OS << ')'; break; } case DW_TAG_array_type: { dumpArrayType(OS, D); break; } case DW_TAG_pointer_type: OS << '*'; break; case DW_TAG_ptr_to_member_type: if (DWARFDie Cont = D.getAttributeValueAsReferencedDie(DW_AT_containing_type)) { dumpTypeName(OS << ' ', Cont); OS << "::"; } OS << '*'; break; case DW_TAG_reference_type: OS << '&'; break; case DW_TAG_rvalue_reference_type: OS << "&&"; break; default: break; } } static void dumpAttribute(raw_ostream &OS, const DWARFDie &Die, uint64_t *OffsetPtr, dwarf::Attribute Attr, dwarf::Form Form, unsigned Indent, DIDumpOptions DumpOpts) { if (!Die.isValid()) return; const char BaseIndent[] = " "; OS << BaseIndent; OS.indent(Indent + 2); WithColor(OS, HighlightColor::Attribute) << formatv("{0}", Attr); if (DumpOpts.Verbose || DumpOpts.ShowForm) OS << formatv(" [{0}]", Form); DWARFUnit *U = Die.getDwarfUnit(); DWARFFormValue FormValue = DWARFFormValue::createFromUnit(Form, U, OffsetPtr); OS << "\t("; StringRef Name; std::string File; auto Color = HighlightColor::Enumerator; if (Attr == DW_AT_decl_file || Attr == DW_AT_call_file) { Color = HighlightColor::String; if (const auto *LT = U->getContext().getLineTableForUnit(U)) if (LT->getFileNameByIndex( FormValue.getAsUnsignedConstant().getValue(), U->getCompilationDir(), DILineInfoSpecifier::FileLineInfoKind::AbsoluteFilePath, File)) { File = '"' + File + '"'; Name = File; } } else if (Optional Val = FormValue.getAsUnsignedConstant()) Name = AttributeValueString(Attr, *Val); if (!Name.empty()) WithColor(OS, Color) << Name; else if (Attr == DW_AT_decl_line || Attr == DW_AT_call_line) OS << *FormValue.getAsUnsignedConstant(); else if (Attr == DW_AT_high_pc && !DumpOpts.ShowForm && !DumpOpts.Verbose && FormValue.getAsUnsignedConstant()) { if (DumpOpts.ShowAddresses) { // Print the actual address rather than the offset. uint64_t LowPC, HighPC, Index; if (Die.getLowAndHighPC(LowPC, HighPC, Index)) OS << format("0x%016" PRIx64, HighPC); else FormValue.dump(OS, DumpOpts); } } else if (DWARFAttribute::mayHaveLocationDescription(Attr)) dumpLocation(OS, FormValue, U, sizeof(BaseIndent) + Indent + 4, DumpOpts); else FormValue.dump(OS, DumpOpts); std::string Space = DumpOpts.ShowAddresses ? " " : ""; // We have dumped the attribute raw value. For some attributes // having both the raw value and the pretty-printed value is // interesting. These attributes are handled below. if (Attr == DW_AT_specification || Attr == DW_AT_abstract_origin) { if (const char *Name = Die.getAttributeValueAsReferencedDie(FormValue).getName( DINameKind::LinkageName)) OS << Space << "\"" << Name << '\"'; } else if (Attr == DW_AT_type) { OS << Space << "\""; dumpTypeName(OS, Die.getAttributeValueAsReferencedDie(FormValue)); OS << '"'; } else if (Attr == DW_AT_APPLE_property_attribute) { if (Optional OptVal = FormValue.getAsUnsignedConstant()) dumpApplePropertyAttribute(OS, *OptVal); } else if (Attr == DW_AT_ranges) { const DWARFObject &Obj = Die.getDwarfUnit()->getContext().getDWARFObj(); // For DW_FORM_rnglistx we need to dump the offset separately, since // we have only dumped the index so far. if (FormValue.getForm() == DW_FORM_rnglistx) if (auto RangeListOffset = U->getRnglistOffset(*FormValue.getAsSectionOffset())) { DWARFFormValue FV = DWARFFormValue::createFromUValue( dwarf::DW_FORM_sec_offset, *RangeListOffset); FV.dump(OS, DumpOpts); } if (auto RangesOrError = Die.getAddressRanges()) dumpRanges(Obj, OS, RangesOrError.get(), U->getAddressByteSize(), sizeof(BaseIndent) + Indent + 4, DumpOpts); else WithColor::error() << "decoding address ranges: " << toString(RangesOrError.takeError()) << '\n'; } OS << ")\n"; } bool DWARFDie::isSubprogramDIE() const { return getTag() == DW_TAG_subprogram; } bool DWARFDie::isSubroutineDIE() const { auto Tag = getTag(); return Tag == DW_TAG_subprogram || Tag == DW_TAG_inlined_subroutine; } Optional DWARFDie::find(dwarf::Attribute Attr) const { if (!isValid()) return None; auto AbbrevDecl = getAbbreviationDeclarationPtr(); if (AbbrevDecl) return AbbrevDecl->getAttributeValue(getOffset(), Attr, *U); return None; } Optional DWARFDie::find(ArrayRef Attrs) const { if (!isValid()) return None; auto AbbrevDecl = getAbbreviationDeclarationPtr(); if (AbbrevDecl) { for (auto Attr : Attrs) { if (auto Value = AbbrevDecl->getAttributeValue(getOffset(), Attr, *U)) return Value; } } return None; } Optional DWARFDie::findRecursively(ArrayRef Attrs) const { std::vector Worklist; Worklist.push_back(*this); // Keep track if DIEs already seen to prevent infinite recursion. // Empirically we rarely see a depth of more than 3 when dealing with valid // DWARF. This corresponds to following the DW_AT_abstract_origin and // DW_AT_specification just once. SmallSet Seen; Seen.insert(*this); while (!Worklist.empty()) { DWARFDie Die = Worklist.back(); Worklist.pop_back(); if (!Die.isValid()) continue; if (auto Value = Die.find(Attrs)) return Value; if (auto D = Die.getAttributeValueAsReferencedDie(DW_AT_abstract_origin)) if (Seen.insert(D).second) Worklist.push_back(D); if (auto D = Die.getAttributeValueAsReferencedDie(DW_AT_specification)) if (Seen.insert(D).second) Worklist.push_back(D); } return None; } DWARFDie DWARFDie::getAttributeValueAsReferencedDie(dwarf::Attribute Attr) const { if (Optional F = find(Attr)) return getAttributeValueAsReferencedDie(*F); return DWARFDie(); } DWARFDie DWARFDie::getAttributeValueAsReferencedDie(const DWARFFormValue &V) const { if (auto SpecRef = V.getAsRelativeReference()) { if (SpecRef->Unit) return SpecRef->Unit->getDIEForOffset(SpecRef->Unit->getOffset() + SpecRef->Offset); if (auto SpecUnit = U->getUnitVector().getUnitForOffset(SpecRef->Offset)) return SpecUnit->getDIEForOffset(SpecRef->Offset); } return DWARFDie(); } Optional DWARFDie::getRangesBaseAttribute() const { return toSectionOffset(find({DW_AT_rnglists_base, DW_AT_GNU_ranges_base})); } Optional DWARFDie::getHighPC(uint64_t LowPC) const { if (auto FormValue = find(DW_AT_high_pc)) { if (auto Address = FormValue->getAsAddress()) { // High PC is an address. return Address; } if (auto Offset = FormValue->getAsUnsignedConstant()) { // High PC is an offset from LowPC. return LowPC + *Offset; } } return None; } bool DWARFDie::getLowAndHighPC(uint64_t &LowPC, uint64_t &HighPC, uint64_t &SectionIndex) const { auto F = find(DW_AT_low_pc); auto LowPcAddr = toSectionedAddress(F); if (!LowPcAddr) return false; if (auto HighPcAddr = getHighPC(LowPcAddr->Address)) { LowPC = LowPcAddr->Address; HighPC = *HighPcAddr; SectionIndex = LowPcAddr->SectionIndex; return true; } return false; } Expected DWARFDie::getAddressRanges() const { if (isNULL()) return DWARFAddressRangesVector(); // Single range specified by low/high PC. uint64_t LowPC, HighPC, Index; if (getLowAndHighPC(LowPC, HighPC, Index)) return DWARFAddressRangesVector{{LowPC, HighPC, Index}}; Optional Value = find(DW_AT_ranges); if (Value) { if (Value->getForm() == DW_FORM_rnglistx) return U->findRnglistFromIndex(*Value->getAsSectionOffset()); return U->findRnglistFromOffset(*Value->getAsSectionOffset()); } return DWARFAddressRangesVector(); } void DWARFDie::collectChildrenAddressRanges( DWARFAddressRangesVector &Ranges) const { if (isNULL()) return; if (isSubprogramDIE()) { if (auto DIERangesOrError = getAddressRanges()) Ranges.insert(Ranges.end(), DIERangesOrError.get().begin(), DIERangesOrError.get().end()); else llvm::consumeError(DIERangesOrError.takeError()); } for (auto Child : children()) Child.collectChildrenAddressRanges(Ranges); } bool DWARFDie::addressRangeContainsAddress(const uint64_t Address) const { auto RangesOrError = getAddressRanges(); if (!RangesOrError) { llvm::consumeError(RangesOrError.takeError()); return false; } for (const auto &R : RangesOrError.get()) if (R.LowPC <= Address && Address < R.HighPC) return true; return false; } const char *DWARFDie::getSubroutineName(DINameKind Kind) const { if (!isSubroutineDIE()) return nullptr; return getName(Kind); } const char *DWARFDie::getName(DINameKind Kind) const { if (!isValid() || Kind == DINameKind::None) return nullptr; // Try to get mangled name only if it was asked for. if (Kind == DINameKind::LinkageName) { if (auto Name = dwarf::toString( findRecursively({DW_AT_MIPS_linkage_name, DW_AT_linkage_name}), nullptr)) return Name; } if (auto Name = dwarf::toString(findRecursively(DW_AT_name), nullptr)) return Name; return nullptr; } uint64_t DWARFDie::getDeclLine() const { return toUnsigned(findRecursively(DW_AT_decl_line), 0); } void DWARFDie::getCallerFrame(uint32_t &CallFile, uint32_t &CallLine, uint32_t &CallColumn, uint32_t &CallDiscriminator) const { CallFile = toUnsigned(find(DW_AT_call_file), 0); CallLine = toUnsigned(find(DW_AT_call_line), 0); CallColumn = toUnsigned(find(DW_AT_call_column), 0); CallDiscriminator = toUnsigned(find(DW_AT_GNU_discriminator), 0); } /// Helper to dump a DIE with all of its parents, but no siblings. static unsigned dumpParentChain(DWARFDie Die, raw_ostream &OS, unsigned Indent, DIDumpOptions DumpOpts, unsigned Depth = 0) { if (!Die) return Indent; if (DumpOpts.ParentRecurseDepth > 0 && Depth >= DumpOpts.ParentRecurseDepth) return Indent; Indent = dumpParentChain(Die.getParent(), OS, Indent, DumpOpts, Depth + 1); Die.dump(OS, Indent, DumpOpts); return Indent + 2; } void DWARFDie::dump(raw_ostream &OS, unsigned Indent, DIDumpOptions DumpOpts) const { if (!isValid()) return; DWARFDataExtractor debug_info_data = U->getDebugInfoExtractor(); const uint64_t Offset = getOffset(); uint64_t offset = Offset; if (DumpOpts.ShowParents) { DIDumpOptions ParentDumpOpts = DumpOpts; ParentDumpOpts.ShowParents = false; ParentDumpOpts.ShowChildren = false; Indent = dumpParentChain(getParent(), OS, Indent, ParentDumpOpts); } if (debug_info_data.isValidOffset(offset)) { uint32_t abbrCode = debug_info_data.getULEB128(&offset); if (DumpOpts.ShowAddresses) WithColor(OS, HighlightColor::Address).get() << format("\n0x%8.8" PRIx64 ": ", Offset); if (abbrCode) { auto AbbrevDecl = getAbbreviationDeclarationPtr(); if (AbbrevDecl) { WithColor(OS, HighlightColor::Tag).get().indent(Indent) << formatv("{0}", getTag()); if (DumpOpts.Verbose) OS << format(" [%u] %c", abbrCode, AbbrevDecl->hasChildren() ? '*' : ' '); OS << '\n'; // Dump all data in the DIE for the attributes. for (const auto &AttrSpec : AbbrevDecl->attributes()) { if (AttrSpec.Form == DW_FORM_implicit_const) { // We are dumping .debug_info section , // implicit_const attribute values are not really stored here, // but in .debug_abbrev section. So we just skip such attrs. continue; } dumpAttribute(OS, *this, &offset, AttrSpec.Attr, AttrSpec.Form, Indent, DumpOpts); } DWARFDie child = getFirstChild(); if (DumpOpts.ShowChildren && DumpOpts.ChildRecurseDepth > 0 && child) { DumpOpts.ChildRecurseDepth--; DIDumpOptions ChildDumpOpts = DumpOpts; ChildDumpOpts.ShowParents = false; while (child) { child.dump(OS, Indent + 2, ChildDumpOpts); child = child.getSibling(); } } } else { OS << "Abbreviation code not found in 'debug_abbrev' class for code: " << abbrCode << '\n'; } } else { OS.indent(Indent) << "NULL\n"; } } } LLVM_DUMP_METHOD void DWARFDie::dump() const { dump(llvm::errs(), 0); } DWARFDie DWARFDie::getParent() const { if (isValid()) return U->getParent(Die); return DWARFDie(); } DWARFDie DWARFDie::getSibling() const { if (isValid()) return U->getSibling(Die); return DWARFDie(); } DWARFDie DWARFDie::getPreviousSibling() const { if (isValid()) return U->getPreviousSibling(Die); return DWARFDie(); } DWARFDie DWARFDie::getFirstChild() const { if (isValid()) return U->getFirstChild(Die); return DWARFDie(); } DWARFDie DWARFDie::getLastChild() const { if (isValid()) return U->getLastChild(Die); return DWARFDie(); } iterator_range DWARFDie::attributes() const { return make_range(attribute_iterator(*this, false), attribute_iterator(*this, true)); } DWARFDie::attribute_iterator::attribute_iterator(DWARFDie D, bool End) : Die(D), Index(0) { auto AbbrDecl = Die.getAbbreviationDeclarationPtr(); assert(AbbrDecl && "Must have abbreviation declaration"); if (End) { // This is the end iterator so we set the index to the attribute count. Index = AbbrDecl->getNumAttributes(); } else { // This is the begin iterator so we extract the value for this->Index. AttrValue.Offset = D.getOffset() + AbbrDecl->getCodeByteSize(); updateForIndex(*AbbrDecl, 0); } } void DWARFDie::attribute_iterator::updateForIndex( const DWARFAbbreviationDeclaration &AbbrDecl, uint32_t I) { Index = I; // AbbrDecl must be valid before calling this function. auto NumAttrs = AbbrDecl.getNumAttributes(); if (Index < NumAttrs) { AttrValue.Attr = AbbrDecl.getAttrByIndex(Index); // Add the previous byte size of any previous attribute value. AttrValue.Offset += AttrValue.ByteSize; uint64_t ParseOffset = AttrValue.Offset; auto U = Die.getDwarfUnit(); assert(U && "Die must have valid DWARF unit"); AttrValue.Value = DWARFFormValue::createFromUnit( AbbrDecl.getFormByIndex(Index), U, &ParseOffset); AttrValue.ByteSize = ParseOffset - AttrValue.Offset; } else { assert(Index == NumAttrs && "Indexes should be [0, NumAttrs) only"); AttrValue = {}; } } DWARFDie::attribute_iterator &DWARFDie::attribute_iterator::operator++() { if (auto AbbrDecl = Die.getAbbreviationDeclarationPtr()) updateForIndex(*AbbrDecl, Index + 1); return *this; } bool DWARFAttribute::mayHaveLocationDescription(dwarf::Attribute Attr) { switch (Attr) { // From the DWARF v5 specification. case DW_AT_location: case DW_AT_byte_size: case DW_AT_bit_size: case DW_AT_string_length: case DW_AT_lower_bound: case DW_AT_return_addr: case DW_AT_bit_stride: case DW_AT_upper_bound: case DW_AT_count: case DW_AT_data_member_location: case DW_AT_frame_base: case DW_AT_segment: case DW_AT_static_link: case DW_AT_use_location: case DW_AT_vtable_elem_location: case DW_AT_allocated: case DW_AT_associated: case DW_AT_byte_stride: case DW_AT_rank: case DW_AT_call_value: case DW_AT_call_origin: case DW_AT_call_target: case DW_AT_call_target_clobbered: case DW_AT_call_data_location: case DW_AT_call_data_value: // Extensions. case DW_AT_GNU_call_site_value: case DW_AT_GNU_call_site_target: return true; default: return false; } } binaryen-version_108/third_party/llvm-project/DWARFEmitter.cpp000066400000000000000000000417401423707623100246230ustar00rootroot00000000000000//===- DWARFEmitter - Convert YAML to DWARF binary data -------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// The DWARF component of yaml2obj. Provided as library code for tests. /// //===----------------------------------------------------------------------===// #include "llvm/ObjectYAML/DWARFEmitter.h" #include "DWARFVisitor.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/ObjectYAML/DWARFYAML.h" #include "llvm/Support/Error.h" #include "llvm/Support/Host.h" #include "llvm/Support/LEB128.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/SwapByteOrder.h" #include "llvm/Support/YAMLTraits.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include #include #include using namespace llvm; template static void writeInteger(T Integer, raw_ostream &OS, bool IsLittleEndian) { if (IsLittleEndian != sys::IsLittleEndianHost) sys::swapByteOrder(Integer); OS.write(reinterpret_cast(&Integer), sizeof(T)); } static void writeVariableSizedInteger(uint64_t Integer, size_t Size, raw_ostream &OS, bool IsLittleEndian) { if (8 == Size) writeInteger((uint64_t)Integer, OS, IsLittleEndian); else if (4 == Size) writeInteger((uint32_t)Integer, OS, IsLittleEndian); else if (2 == Size) writeInteger((uint16_t)Integer, OS, IsLittleEndian); else if (1 == Size) writeInteger((uint8_t)Integer, OS, IsLittleEndian); else assert(false && "Invalid integer write size."); } static void ZeroFillBytes(raw_ostream &OS, size_t Size) { std::vector FillData; FillData.insert(FillData.begin(), Size, 0); OS.write(reinterpret_cast(FillData.data()), Size); } static void writeInitialLength(const DWARFYAML::InitialLength &Length, raw_ostream &OS, bool IsLittleEndian) { writeInteger((uint32_t)Length.TotalLength, OS, IsLittleEndian); if (Length.isDWARF64()) writeInteger((uint64_t)Length.TotalLength64, OS, IsLittleEndian); } void DWARFYAML::EmitDebugStr(raw_ostream &OS, const DWARFYAML::Data &DI) { for (auto Str : DI.DebugStrings) { OS.write(Str.data(), Str.size()); OS.write('\0'); } } void DWARFYAML::EmitDebugAbbrev(raw_ostream &OS, const DWARFYAML::Data &DI) { for (auto AbbrevDecl : DI.AbbrevDecls) { encodeULEB128(AbbrevDecl.Code, OS); // XXX BINARYEN This is a terminator. if (!AbbrevDecl.Code) { continue; } encodeULEB128(AbbrevDecl.Tag, OS); OS.write(AbbrevDecl.Children); for (auto Attr : AbbrevDecl.Attributes) { encodeULEB128(Attr.Attribute, OS); encodeULEB128(Attr.Form, OS); if (Attr.Form == dwarf::DW_FORM_implicit_const) encodeSLEB128(Attr.Value, OS); } encodeULEB128(0, OS); encodeULEB128(0, OS); } } void DWARFYAML::EmitDebugAranges(raw_ostream &OS, const DWARFYAML::Data &DI) { for (auto Range : DI.ARanges) { auto HeaderStart = OS.tell(); writeInitialLength(Range.Length, OS, DI.IsLittleEndian); writeInteger((uint16_t)Range.Version, OS, DI.IsLittleEndian); writeInteger((uint32_t)Range.CuOffset, OS, DI.IsLittleEndian); writeInteger((uint8_t)Range.AddrSize, OS, DI.IsLittleEndian); writeInteger((uint8_t)Range.SegSize, OS, DI.IsLittleEndian); auto HeaderSize = OS.tell() - HeaderStart; auto FirstDescriptor = alignTo(HeaderSize, Range.AddrSize * 2); ZeroFillBytes(OS, FirstDescriptor - HeaderSize); for (auto Descriptor : Range.Descriptors) { writeVariableSizedInteger(Descriptor.Address, Range.AddrSize, OS, DI.IsLittleEndian); writeVariableSizedInteger(Descriptor.Length, Range.AddrSize, OS, DI.IsLittleEndian); } ZeroFillBytes(OS, Range.AddrSize * 2); } } // XXX BINARYEN void DWARFYAML::EmitDebugRanges(raw_ostream &OS, const DWARFYAML::Data &DI) { // As DwarfStreamer.cpp says, "The debug_range section // format is totally trivial, consisting just of pairs of address // sized addresses describing the ranges." and apparently it ends // with a null termination of a pair of zeros for (auto Range : DI.Ranges) { writeInteger((uint32_t)Range.Start, OS, DI.IsLittleEndian); writeInteger((uint32_t)Range.End, OS, DI.IsLittleEndian); } } // XXX BINARYEN void DWARFYAML::EmitDebugLoc(raw_ostream &OS, const DWARFYAML::Data &DI) { for (auto Loc : DI.Locs) { auto AddrSize = DI.CompileUnits[0].AddrSize; // XXX BINARYEN // FIXME: Loc.Start etc should probably not be 32-bit. writeVariableSizedInteger((uint64_t)(int32_t)Loc.Start, AddrSize, OS, DI.IsLittleEndian); writeVariableSizedInteger((uint64_t)(int32_t)Loc.End, AddrSize, OS, DI.IsLittleEndian); if (Loc.Start == 0 && Loc.End == 0) { // End of a list. continue; } if (Loc.Start != -1) { writeInteger((uint16_t)Loc.Location.size(), OS, DI.IsLittleEndian); for (auto x : Loc.Location) { writeInteger((uint8_t)x, OS, DI.IsLittleEndian); } } } } void DWARFYAML::EmitPubSection(raw_ostream &OS, const DWARFYAML::PubSection &Sect, bool IsLittleEndian) { writeInitialLength(Sect.Length, OS, IsLittleEndian); writeInteger((uint16_t)Sect.Version, OS, IsLittleEndian); writeInteger((uint32_t)Sect.UnitOffset, OS, IsLittleEndian); writeInteger((uint32_t)Sect.UnitSize, OS, IsLittleEndian); for (auto Entry : Sect.Entries) { writeInteger((uint32_t)Entry.DieOffset, OS, IsLittleEndian); if (Sect.IsGNUStyle) writeInteger((uint32_t)Entry.Descriptor, OS, IsLittleEndian); OS.write(Entry.Name.data(), Entry.Name.size()); OS.write('\0'); } } namespace { /// An extension of the DWARFYAML::ConstVisitor which writes compile /// units and DIEs to a stream. class DumpVisitor : public DWARFYAML::ConstVisitor { raw_ostream &OS; size_t StartPos; // XXX BINARYEN protected: void onStartCompileUnit(const DWARFYAML::Unit &CU) override { writeInitialLength(CU.Length, OS, DebugInfo.IsLittleEndian); StartPos = OS.tell(); // XXX BINARYEN writeInteger((uint16_t)CU.Version, OS, DebugInfo.IsLittleEndian); if(CU.Version >= 5) { writeInteger((uint8_t)CU.Type, OS, DebugInfo.IsLittleEndian); writeInteger((uint8_t)CU.AddrSize, OS, DebugInfo.IsLittleEndian); writeInteger((uint32_t)CU.AbbrOffset, OS, DebugInfo.IsLittleEndian); }else { writeInteger((uint32_t)CU.AbbrOffset, OS, DebugInfo.IsLittleEndian); writeInteger((uint8_t)CU.AddrSize, OS, DebugInfo.IsLittleEndian); } } // XXX BINARYEN Make sure we emit the right size. We should not change the // size as we only modify relocatable fields like addresses, and such fields // have a fixed size, so any change is a bug. // We make an exception for AddrSizeChanged, which happens when we have run // the Memory64Lowering pass to turn wasm64 into wasm32. void onEndCompileUnit(const DWARFYAML::Unit &CU) { size_t EndPos = OS.tell(); if (EndPos - StartPos != CU.Length.getLength() && !CU.AddrSizeChanged) { llvm_unreachable("compile unit size was incorrect"); } } void onStartDIE(const DWARFYAML::Unit &CU, const DWARFYAML::Entry &DIE) override { encodeULEB128(DIE.AbbrCode, OS); } void onValue(const uint8_t U) override { writeInteger(U, OS, DebugInfo.IsLittleEndian); } void onValue(const uint16_t U) override { writeInteger(U, OS, DebugInfo.IsLittleEndian); } void onValue(const uint32_t U) override { writeInteger(U, OS, DebugInfo.IsLittleEndian); } void onValue(const uint64_t U, const bool LEB = false) override { if (LEB) encodeULEB128(U, OS); else writeInteger(U, OS, DebugInfo.IsLittleEndian); } void onValue(const int64_t S, const bool LEB = false) override { if (LEB) encodeSLEB128(S, OS); else writeInteger(S, OS, DebugInfo.IsLittleEndian); } void onValue(const StringRef String) override { OS.write(String.data(), String.size()); OS.write('\0'); } void onValue(const MemoryBufferRef MBR) override { OS.write(MBR.getBufferStart(), MBR.getBufferSize()); } public: DumpVisitor(const DWARFYAML::Data &DI, raw_ostream &Out) : DWARFYAML::ConstVisitor(DI), OS(Out) {} }; } // namespace void DWARFYAML::EmitDebugInfo(raw_ostream &OS, const DWARFYAML::Data &DI) { DumpVisitor Visitor(DI, OS); Visitor.traverseDebugInfo(); } static void EmitFileEntry(raw_ostream &OS, const DWARFYAML::File &File) { OS.write(File.Name.data(), File.Name.size()); OS.write('\0'); encodeULEB128(File.DirIdx, OS); encodeULEB128(File.ModTime, OS); encodeULEB128(File.Length, OS); } // XXX BINARYEN: Refactor to an *Internal method that allows us to optionally // compute the new lengths. static void EmitDebugLineInternal(raw_ostream &RealOS, const DWARFYAML::Data &DI, std::vector* computedLengths) { for (auto &LineTable : DI.DebugLines) { // XXX BINARYEN We need to update each line table's length. Write to a // temp stream first, then get the size from that. std::string Buffer; raw_string_ostream OS(Buffer); // XXX BINARYEN writeInitialLength(LineTable.Length, OS, DI.IsLittleEndian); uint64_t SizeOfPrologueLength = LineTable.Length.isDWARF64() ? 8 : 4; writeInteger((uint16_t)LineTable.Version, OS, DI.IsLittleEndian); writeVariableSizedInteger(LineTable.PrologueLength, SizeOfPrologueLength, OS, DI.IsLittleEndian); writeInteger((uint8_t)LineTable.MinInstLength, OS, DI.IsLittleEndian); if (LineTable.Version >= 4) writeInteger((uint8_t)LineTable.MaxOpsPerInst, OS, DI.IsLittleEndian); writeInteger((uint8_t)LineTable.DefaultIsStmt, OS, DI.IsLittleEndian); writeInteger((uint8_t)LineTable.LineBase, OS, DI.IsLittleEndian); writeInteger((uint8_t)LineTable.LineRange, OS, DI.IsLittleEndian); writeInteger((uint8_t)LineTable.OpcodeBase, OS, DI.IsLittleEndian); for (auto OpcodeLength : LineTable.StandardOpcodeLengths) writeInteger((uint8_t)OpcodeLength, OS, DI.IsLittleEndian); for (auto IncludeDir : LineTable.IncludeDirs) { OS.write(IncludeDir.data(), IncludeDir.size()); OS.write('\0'); } OS.write('\0'); for (auto File : LineTable.Files) EmitFileEntry(OS, File); OS.write('\0'); for (auto Op : LineTable.Opcodes) { writeInteger((uint8_t)Op.Opcode, OS, DI.IsLittleEndian); if (Op.Opcode == 0) { encodeULEB128(Op.ExtLen, OS); writeInteger((uint8_t)Op.SubOpcode, OS, DI.IsLittleEndian); switch (Op.SubOpcode) { case dwarf::DW_LNE_set_address: case dwarf::DW_LNE_set_discriminator: writeVariableSizedInteger(Op.Data, DI.CompileUnits[0].AddrSize, OS, DI.IsLittleEndian); break; case dwarf::DW_LNE_define_file: EmitFileEntry(OS, Op.FileEntry); break; case dwarf::DW_LNE_end_sequence: break; default: for (auto OpByte : Op.UnknownOpcodeData) writeInteger((uint8_t)OpByte, OS, DI.IsLittleEndian); } } else if (Op.Opcode < LineTable.OpcodeBase) { switch (Op.Opcode) { case dwarf::DW_LNS_copy: case dwarf::DW_LNS_negate_stmt: case dwarf::DW_LNS_set_basic_block: case dwarf::DW_LNS_const_add_pc: case dwarf::DW_LNS_set_prologue_end: case dwarf::DW_LNS_set_epilogue_begin: break; case dwarf::DW_LNS_advance_pc: case dwarf::DW_LNS_set_file: case dwarf::DW_LNS_set_column: case dwarf::DW_LNS_set_isa: encodeULEB128(Op.Data, OS); break; case dwarf::DW_LNS_advance_line: encodeSLEB128(Op.SData, OS); break; case dwarf::DW_LNS_fixed_advance_pc: writeInteger((uint16_t)Op.Data, OS, DI.IsLittleEndian); break; default: for (auto OpData : Op.StandardOpcodeData) { encodeULEB128(OpData, OS); } } } } // XXX BINARYEN Write to the actual stream, with the proper size. // We assume for now that the length fits in 32 bits. size_t Size = OS.str().size(); if (Size >= UINT32_MAX) { llvm_unreachable("Table is too big"); } if (computedLengths) { computedLengths->push_back(Size); } writeInteger((uint32_t)Size, RealOS, DI.IsLittleEndian); RealOS << OS.str(); } } void DWARFYAML::EmitDebugLine(raw_ostream &RealOS, const DWARFYAML::Data &DI) { EmitDebugLineInternal(RealOS, DI, nullptr); } void DWARFYAML::ComputeDebugLine(Data &DI, std::vector& computedLengths) { // TODO: Avoid writing out the data, or at least cache it so we don't need to // do it again later. std::string buffer; llvm::raw_string_ostream tempStream(buffer); EmitDebugLineInternal(tempStream, DI, &computedLengths); } using EmitFuncType = void (*)(raw_ostream &, const DWARFYAML::Data &); static void EmitDebugSectionImpl(const DWARFYAML::Data &DI, EmitFuncType EmitFunc, StringRef Sec, StringMap> &OutputBuffers) { std::string Data; raw_string_ostream DebugInfoStream(Data); EmitFunc(DebugInfoStream, DI); DebugInfoStream.flush(); if (!Data.empty()) OutputBuffers[Sec] = MemoryBuffer::getMemBufferCopy(Data); } namespace { class DIEFixupVisitor : public DWARFYAML::Visitor { uint64_t Length; public: DIEFixupVisitor(DWARFYAML::Data &DI) : DWARFYAML::Visitor(DI){}; private: virtual void onStartCompileUnit(DWARFYAML::Unit &CU) { Length = 7; } virtual void onEndCompileUnit(DWARFYAML::Unit &CU) { CU.Length.setLength(Length); } virtual void onStartDIE(DWARFYAML::Unit &CU, DWARFYAML::Entry &DIE) { Length += getULEB128Size(DIE.AbbrCode); } virtual void onValue(const uint8_t U) { Length += 1; } virtual void onValue(const uint16_t U) { Length += 2; } virtual void onValue(const uint32_t U) { Length += 4; } virtual void onValue(const uint64_t U, const bool LEB = false) { if (LEB) Length += getULEB128Size(U); else Length += 8; } virtual void onValue(const int64_t S, const bool LEB = false) { if (LEB) Length += getSLEB128Size(S); else Length += 8; } virtual void onValue(const StringRef String) { Length += String.size() + 1; } virtual void onValue(const MemoryBufferRef MBR) { Length += MBR.getBufferSize(); } }; } // namespace Expected>> DWARFYAML::EmitDebugSections(StringRef YAMLString, bool ApplyFixups, bool IsLittleEndian) { yaml::Input YIn(YAMLString); DWARFYAML::Data DI; DI.IsLittleEndian = IsLittleEndian; YIn >> DI; if (YIn.error()) return errorCodeToError(YIn.error()); if (ApplyFixups) { DIEFixupVisitor DIFixer(DI); DIFixer.traverseDebugInfo(); } StringMap> DebugSections; EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugInfo, "debug_info", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugLine, "debug_line", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugStr, "debug_str", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugAbbrev, "debug_abbrev", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugAranges, "debug_aranges", DebugSections); return std::move(DebugSections); } // XXX BINARYEN <-- namespace llvm { namespace DWARFYAML { StringMap> EmitDebugSections(llvm::DWARFYAML::Data &DI, bool ApplyFixups) { if (ApplyFixups) { DIEFixupVisitor DIFixer(DI); DIFixer.traverseDebugInfo(); } StringMap> DebugSections; EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugInfo, "debug_info", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugLine, "debug_line", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugStr, "debug_str", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugAbbrev, "debug_abbrev", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugAranges, "debug_aranges", DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugRanges, "debug_ranges", DebugSections); // XXX BINARYEN EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugLoc, "debug_loc", DebugSections); // XXX BINARYEN return std::move(DebugSections); } } // namespace DWARFYAML } // namespace llvm // XXX BINARYEN --> binaryen-version_108/third_party/llvm-project/DWARFExpression.cpp000066400000000000000000000300031423707623100253370ustar00rootroot00000000000000//===-- DWARFExpression.cpp -----------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFExpression.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/Support/Format.h" #include #include #include using namespace llvm; using namespace dwarf; namespace llvm { typedef std::vector DescVector; static DescVector getDescriptions() { DescVector Descriptions; typedef DWARFExpression::Operation Op; typedef Op::Description Desc; Descriptions.resize(0xff); Descriptions[DW_OP_addr] = Desc(Op::Dwarf2, Op::SizeAddr); Descriptions[DW_OP_deref] = Desc(Op::Dwarf2); Descriptions[DW_OP_const1u] = Desc(Op::Dwarf2, Op::Size1); Descriptions[DW_OP_const1s] = Desc(Op::Dwarf2, Op::SignedSize1); Descriptions[DW_OP_const2u] = Desc(Op::Dwarf2, Op::Size2); Descriptions[DW_OP_const2s] = Desc(Op::Dwarf2, Op::SignedSize2); Descriptions[DW_OP_const4u] = Desc(Op::Dwarf2, Op::Size4); Descriptions[DW_OP_const4s] = Desc(Op::Dwarf2, Op::SignedSize4); Descriptions[DW_OP_const8u] = Desc(Op::Dwarf2, Op::Size8); Descriptions[DW_OP_const8s] = Desc(Op::Dwarf2, Op::SignedSize8); Descriptions[DW_OP_constu] = Desc(Op::Dwarf2, Op::SizeLEB); Descriptions[DW_OP_consts] = Desc(Op::Dwarf2, Op::SignedSizeLEB); Descriptions[DW_OP_dup] = Desc(Op::Dwarf2); Descriptions[DW_OP_drop] = Desc(Op::Dwarf2); Descriptions[DW_OP_over] = Desc(Op::Dwarf2); Descriptions[DW_OP_pick] = Desc(Op::Dwarf2, Op::Size1); Descriptions[DW_OP_swap] = Desc(Op::Dwarf2); Descriptions[DW_OP_rot] = Desc(Op::Dwarf2); Descriptions[DW_OP_xderef] = Desc(Op::Dwarf2); Descriptions[DW_OP_abs] = Desc(Op::Dwarf2); Descriptions[DW_OP_and] = Desc(Op::Dwarf2); Descriptions[DW_OP_div] = Desc(Op::Dwarf2); Descriptions[DW_OP_minus] = Desc(Op::Dwarf2); Descriptions[DW_OP_mod] = Desc(Op::Dwarf2); Descriptions[DW_OP_mul] = Desc(Op::Dwarf2); Descriptions[DW_OP_neg] = Desc(Op::Dwarf2); Descriptions[DW_OP_not] = Desc(Op::Dwarf2); Descriptions[DW_OP_or] = Desc(Op::Dwarf2); Descriptions[DW_OP_plus] = Desc(Op::Dwarf2); Descriptions[DW_OP_plus_uconst] = Desc(Op::Dwarf2, Op::SizeLEB); Descriptions[DW_OP_shl] = Desc(Op::Dwarf2); Descriptions[DW_OP_shr] = Desc(Op::Dwarf2); Descriptions[DW_OP_shra] = Desc(Op::Dwarf2); Descriptions[DW_OP_xor] = Desc(Op::Dwarf2); Descriptions[DW_OP_skip] = Desc(Op::Dwarf2, Op::SignedSize2); Descriptions[DW_OP_bra] = Desc(Op::Dwarf2, Op::SignedSize2); Descriptions[DW_OP_eq] = Desc(Op::Dwarf2); Descriptions[DW_OP_ge] = Desc(Op::Dwarf2); Descriptions[DW_OP_gt] = Desc(Op::Dwarf2); Descriptions[DW_OP_le] = Desc(Op::Dwarf2); Descriptions[DW_OP_lt] = Desc(Op::Dwarf2); Descriptions[DW_OP_ne] = Desc(Op::Dwarf2); for (uint16_t LA = DW_OP_lit0; LA <= DW_OP_lit31; ++LA) Descriptions[LA] = Desc(Op::Dwarf2); for (uint16_t LA = DW_OP_reg0; LA <= DW_OP_reg31; ++LA) Descriptions[LA] = Desc(Op::Dwarf2); for (uint16_t LA = DW_OP_breg0; LA <= DW_OP_breg31; ++LA) Descriptions[LA] = Desc(Op::Dwarf2, Op::SignedSizeLEB); Descriptions[DW_OP_regx] = Desc(Op::Dwarf2, Op::SizeLEB); Descriptions[DW_OP_fbreg] = Desc(Op::Dwarf2, Op::SignedSizeLEB); Descriptions[DW_OP_bregx] = Desc(Op::Dwarf2, Op::SizeLEB, Op::SignedSizeLEB); Descriptions[DW_OP_piece] = Desc(Op::Dwarf2, Op::SizeLEB); Descriptions[DW_OP_deref_size] = Desc(Op::Dwarf2, Op::Size1); Descriptions[DW_OP_xderef_size] = Desc(Op::Dwarf2, Op::Size1); Descriptions[DW_OP_nop] = Desc(Op::Dwarf2); Descriptions[DW_OP_push_object_address] = Desc(Op::Dwarf3); Descriptions[DW_OP_call2] = Desc(Op::Dwarf3, Op::Size2); Descriptions[DW_OP_call4] = Desc(Op::Dwarf3, Op::Size4); Descriptions[DW_OP_call_ref] = Desc(Op::Dwarf3, Op::SizeRefAddr); Descriptions[DW_OP_form_tls_address] = Desc(Op::Dwarf3); Descriptions[DW_OP_call_frame_cfa] = Desc(Op::Dwarf3); Descriptions[DW_OP_bit_piece] = Desc(Op::Dwarf3, Op::SizeLEB, Op::SizeLEB); Descriptions[DW_OP_implicit_value] = Desc(Op::Dwarf3, Op::SizeLEB, Op::SizeBlock); Descriptions[DW_OP_stack_value] = Desc(Op::Dwarf3); Descriptions[DW_OP_WASM_location] = Desc(Op::Dwarf4, Op::SizeLEB, Op::SignedSizeLEB); Descriptions[DW_OP_GNU_push_tls_address] = Desc(Op::Dwarf3); Descriptions[DW_OP_addrx] = Desc(Op::Dwarf4, Op::SizeLEB); Descriptions[DW_OP_GNU_addr_index] = Desc(Op::Dwarf4, Op::SizeLEB); Descriptions[DW_OP_GNU_const_index] = Desc(Op::Dwarf4, Op::SizeLEB); Descriptions[DW_OP_GNU_entry_value] = Desc(Op::Dwarf4, Op::SizeLEB); Descriptions[DW_OP_convert] = Desc(Op::Dwarf5, Op::BaseTypeRef); Descriptions[DW_OP_entry_value] = Desc(Op::Dwarf5, Op::SizeLEB); return Descriptions; } static DWARFExpression::Operation::Description getOpDesc(unsigned OpCode) { // FIXME: Make this constexpr once all compilers are smart enough to do it. static DescVector Descriptions = getDescriptions(); // Handle possible corrupted or unsupported operation. if (OpCode >= Descriptions.size()) return {}; return Descriptions[OpCode]; } static uint8_t getRefAddrSize(uint8_t AddrSize, uint16_t Version) { return (Version == 2) ? AddrSize : 4; } bool DWARFExpression::Operation::extract(DataExtractor Data, uint16_t Version, uint8_t AddressSize, uint64_t Offset) { Opcode = Data.getU8(&Offset); Desc = getOpDesc(Opcode); if (Desc.Version == Operation::DwarfNA) { EndOffset = Offset; return false; } for (unsigned Operand = 0; Operand < 2; ++Operand) { unsigned Size = Desc.Op[Operand]; unsigned Signed = Size & Operation::SignBit; if (Size == Operation::SizeNA) break; switch (Size & ~Operation::SignBit) { case Operation::Size1: Operands[Operand] = Data.getU8(&Offset); if (Signed) Operands[Operand] = (int8_t)Operands[Operand]; break; case Operation::Size2: Operands[Operand] = Data.getU16(&Offset); if (Signed) Operands[Operand] = (int16_t)Operands[Operand]; break; case Operation::Size4: Operands[Operand] = Data.getU32(&Offset); if (Signed) Operands[Operand] = (int32_t)Operands[Operand]; break; case Operation::Size8: Operands[Operand] = Data.getU64(&Offset); break; case Operation::SizeAddr: if (AddressSize == 8) { Operands[Operand] = Data.getU64(&Offset); } else if (AddressSize == 4) { Operands[Operand] = Data.getU32(&Offset); } else { assert(AddressSize == 2); Operands[Operand] = Data.getU16(&Offset); } break; case Operation::SizeRefAddr: if (getRefAddrSize(AddressSize, Version) == 8) { Operands[Operand] = Data.getU64(&Offset); } else if (getRefAddrSize(AddressSize, Version) == 4) { Operands[Operand] = Data.getU32(&Offset); } else { assert(getRefAddrSize(AddressSize, Version) == 2); Operands[Operand] = Data.getU16(&Offset); } break; case Operation::SizeLEB: if (Signed) Operands[Operand] = Data.getSLEB128(&Offset); else Operands[Operand] = Data.getULEB128(&Offset); break; case Operation::BaseTypeRef: Operands[Operand] = Data.getULEB128(&Offset); break; case Operation::SizeBlock: // We need a size, so this cannot be the first operand if (Operand == 0) return false; // Store the offset of the block as the value. Operands[Operand] = Offset; Offset += Operands[Operand - 1]; break; default: llvm_unreachable("Unknown DWARFExpression Op size"); } OperandEndOffsets[Operand] = Offset; } EndOffset = Offset; return true; } static bool prettyPrintRegisterOp(raw_ostream &OS, uint8_t Opcode, uint64_t Operands[2], const MCRegisterInfo *MRI, bool isEH) { if (!MRI) return false; uint64_t DwarfRegNum; unsigned OpNum = 0; if (Opcode == DW_OP_bregx || Opcode == DW_OP_regx) DwarfRegNum = Operands[OpNum++]; else if (Opcode >= DW_OP_breg0 && Opcode < DW_OP_bregx) DwarfRegNum = Opcode - DW_OP_breg0; else DwarfRegNum = Opcode - DW_OP_reg0; if (Optional LLVMRegNum = MRI->getLLVMRegNum(DwarfRegNum, isEH)) { if (const char *RegName = MRI->getName(*LLVMRegNum)) { if ((Opcode >= DW_OP_breg0 && Opcode <= DW_OP_breg31) || Opcode == DW_OP_bregx) OS << format(" %s%+" PRId64, RegName, Operands[OpNum]); else OS << ' ' << RegName; return true; } } return false; } bool DWARFExpression::Operation::print(raw_ostream &OS, const DWARFExpression *Expr, const MCRegisterInfo *RegInfo, DWARFUnit *U, bool isEH) { if (Error) { OS << ""; return false; } StringRef Name = OperationEncodingString(Opcode); assert(!Name.empty() && "DW_OP has no name!"); OS << Name; if ((Opcode >= DW_OP_breg0 && Opcode <= DW_OP_breg31) || (Opcode >= DW_OP_reg0 && Opcode <= DW_OP_reg31) || Opcode == DW_OP_bregx || Opcode == DW_OP_regx) if (prettyPrintRegisterOp(OS, Opcode, Operands, RegInfo, isEH)) return true; for (unsigned Operand = 0; Operand < 2; ++Operand) { unsigned Size = Desc.Op[Operand]; unsigned Signed = Size & Operation::SignBit; if (Size == Operation::SizeNA) break; if (Size == Operation::BaseTypeRef && U) { auto Die = U->getDIEForOffset(U->getOffset() + Operands[Operand]); if (Die && Die.getTag() == dwarf::DW_TAG_base_type) { OS << format(" (0x%08" PRIx64 ")", U->getOffset() + Operands[Operand]); if (auto Name = Die.find(dwarf::DW_AT_name)) OS << " \"" << Name->getAsCString() << "\""; } else { OS << format(" ", Operands[Operand]); } } else if (Size == Operation::SizeBlock) { uint64_t Offset = Operands[Operand]; for (unsigned i = 0; i < Operands[Operand - 1]; ++i) OS << format(" 0x%02x", Expr->Data.getU8(&Offset)); } else { if (Signed) OS << format(" %+" PRId64, (int64_t)Operands[Operand]); else if (Opcode != DW_OP_entry_value && Opcode != DW_OP_GNU_entry_value) OS << format(" 0x%" PRIx64, Operands[Operand]); } } return true; } void DWARFExpression::print(raw_ostream &OS, const MCRegisterInfo *RegInfo, DWARFUnit *U, bool IsEH) const { uint32_t EntryValExprSize = 0; for (auto &Op : *this) { if (!Op.print(OS, this, RegInfo, U, IsEH)) { uint64_t FailOffset = Op.getEndOffset(); while (FailOffset < Data.getData().size()) OS << format(" %02x", Data.getU8(&FailOffset)); return; } if (Op.getCode() == DW_OP_entry_value || Op.getCode() == DW_OP_GNU_entry_value) { OS << "("; EntryValExprSize = Op.getRawOperand(0); continue; } if (EntryValExprSize) { EntryValExprSize--; if (EntryValExprSize == 0) OS << ")"; } if (Op.getEndOffset() < Data.getData().size()) OS << ", "; } } bool DWARFExpression::Operation::verify(DWARFUnit *U) { for (unsigned Operand = 0; Operand < 2; ++Operand) { unsigned Size = Desc.Op[Operand]; if (Size == Operation::SizeNA) break; if (Size == Operation::BaseTypeRef) { auto Die = U->getDIEForOffset(U->getOffset() + Operands[Operand]); if (!Die || Die.getTag() != dwarf::DW_TAG_base_type) { Error = true; return false; } } } return true; } bool DWARFExpression::verify(DWARFUnit *U) { for (auto &Op : *this) if (!Op.verify(U)) return false; return true; } } // namespace llvm binaryen-version_108/third_party/llvm-project/DWARFFormValue.cpp000066400000000000000000000527041423707623100251140ustar00rootroot00000000000000//===- DWARFFormValue.cpp -------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/None.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Format.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include #include #include using namespace llvm; using namespace dwarf; static const DWARFFormValue::FormClass DWARF5FormClasses[] = { DWARFFormValue::FC_Unknown, // 0x0 DWARFFormValue::FC_Address, // 0x01 DW_FORM_addr DWARFFormValue::FC_Unknown, // 0x02 unused DWARFFormValue::FC_Block, // 0x03 DW_FORM_block2 DWARFFormValue::FC_Block, // 0x04 DW_FORM_block4 DWARFFormValue::FC_Constant, // 0x05 DW_FORM_data2 // --- These can be FC_SectionOffset in DWARF3 and below: DWARFFormValue::FC_Constant, // 0x06 DW_FORM_data4 DWARFFormValue::FC_Constant, // 0x07 DW_FORM_data8 // --- DWARFFormValue::FC_String, // 0x08 DW_FORM_string DWARFFormValue::FC_Block, // 0x09 DW_FORM_block DWARFFormValue::FC_Block, // 0x0a DW_FORM_block1 DWARFFormValue::FC_Constant, // 0x0b DW_FORM_data1 DWARFFormValue::FC_Flag, // 0x0c DW_FORM_flag DWARFFormValue::FC_Constant, // 0x0d DW_FORM_sdata DWARFFormValue::FC_String, // 0x0e DW_FORM_strp DWARFFormValue::FC_Constant, // 0x0f DW_FORM_udata DWARFFormValue::FC_Reference, // 0x10 DW_FORM_ref_addr DWARFFormValue::FC_Reference, // 0x11 DW_FORM_ref1 DWARFFormValue::FC_Reference, // 0x12 DW_FORM_ref2 DWARFFormValue::FC_Reference, // 0x13 DW_FORM_ref4 DWARFFormValue::FC_Reference, // 0x14 DW_FORM_ref8 DWARFFormValue::FC_Reference, // 0x15 DW_FORM_ref_udata DWARFFormValue::FC_Indirect, // 0x16 DW_FORM_indirect DWARFFormValue::FC_SectionOffset, // 0x17 DW_FORM_sec_offset DWARFFormValue::FC_Exprloc, // 0x18 DW_FORM_exprloc DWARFFormValue::FC_Flag, // 0x19 DW_FORM_flag_present DWARFFormValue::FC_String, // 0x1a DW_FORM_strx DWARFFormValue::FC_Address, // 0x1b DW_FORM_addrx DWARFFormValue::FC_Reference, // 0x1c DW_FORM_ref_sup4 DWARFFormValue::FC_String, // 0x1d DW_FORM_strp_sup DWARFFormValue::FC_Constant, // 0x1e DW_FORM_data16 DWARFFormValue::FC_String, // 0x1f DW_FORM_line_strp DWARFFormValue::FC_Reference, // 0x20 DW_FORM_ref_sig8 DWARFFormValue::FC_Constant, // 0x21 DW_FORM_implicit_const DWARFFormValue::FC_SectionOffset, // 0x22 DW_FORM_loclistx DWARFFormValue::FC_SectionOffset, // 0x23 DW_FORM_rnglistx DWARFFormValue::FC_Reference, // 0x24 DW_FORM_ref_sup8 DWARFFormValue::FC_String, // 0x25 DW_FORM_strx1 DWARFFormValue::FC_String, // 0x26 DW_FORM_strx2 DWARFFormValue::FC_String, // 0x27 DW_FORM_strx3 DWARFFormValue::FC_String, // 0x28 DW_FORM_strx4 DWARFFormValue::FC_Address, // 0x29 DW_FORM_addrx1 DWARFFormValue::FC_Address, // 0x2a DW_FORM_addrx2 DWARFFormValue::FC_Address, // 0x2b DW_FORM_addrx3 DWARFFormValue::FC_Address, // 0x2c DW_FORM_addrx4 }; DWARFFormValue DWARFFormValue::createFromSValue(dwarf::Form F, int64_t V) { return DWARFFormValue(F, ValueType(V)); } DWARFFormValue DWARFFormValue::createFromUValue(dwarf::Form F, uint64_t V) { return DWARFFormValue(F, ValueType(V)); } DWARFFormValue DWARFFormValue::createFromPValue(dwarf::Form F, const char *V) { return DWARFFormValue(F, ValueType(V)); } DWARFFormValue DWARFFormValue::createFromBlockValue(dwarf::Form F, ArrayRef D) { ValueType V; V.uval = D.size(); V.data = D.data(); return DWARFFormValue(F, V); } DWARFFormValue DWARFFormValue::createFromUnit(dwarf::Form F, const DWARFUnit *U, uint64_t *OffsetPtr) { DWARFFormValue FormValue(F); FormValue.extractValue(U->getDebugInfoExtractor(), OffsetPtr, U->getFormParams(), U); return FormValue; } bool DWARFFormValue::skipValue(dwarf::Form Form, DataExtractor DebugInfoData, uint64_t *OffsetPtr, const dwarf::FormParams Params) { bool Indirect = false; do { switch (Form) { // Blocks of inlined data that have a length field and the data bytes // inlined in the .debug_info. case DW_FORM_exprloc: case DW_FORM_block: { uint64_t size = DebugInfoData.getULEB128(OffsetPtr); *OffsetPtr += size; return true; } case DW_FORM_block1: { uint8_t size = DebugInfoData.getU8(OffsetPtr); *OffsetPtr += size; return true; } case DW_FORM_block2: { uint16_t size = DebugInfoData.getU16(OffsetPtr); *OffsetPtr += size; return true; } case DW_FORM_block4: { uint32_t size = DebugInfoData.getU32(OffsetPtr); *OffsetPtr += size; return true; } // Inlined NULL terminated C-strings. case DW_FORM_string: DebugInfoData.getCStr(OffsetPtr); return true; case DW_FORM_addr: case DW_FORM_ref_addr: case DW_FORM_flag_present: case DW_FORM_data1: case DW_FORM_data2: case DW_FORM_data4: case DW_FORM_data8: case DW_FORM_data16: case DW_FORM_flag: case DW_FORM_ref1: case DW_FORM_ref2: case DW_FORM_ref4: case DW_FORM_ref8: case DW_FORM_ref_sig8: case DW_FORM_ref_sup4: case DW_FORM_ref_sup8: case DW_FORM_strx1: case DW_FORM_strx2: case DW_FORM_strx4: case DW_FORM_addrx1: case DW_FORM_addrx2: case DW_FORM_addrx4: case DW_FORM_sec_offset: case DW_FORM_strp: case DW_FORM_strp_sup: case DW_FORM_line_strp: case DW_FORM_GNU_ref_alt: case DW_FORM_GNU_strp_alt: if (Optional FixedSize = dwarf::getFixedFormByteSize(Form, Params)) { *OffsetPtr += *FixedSize; return true; } return false; // signed or unsigned LEB 128 values. case DW_FORM_sdata: DebugInfoData.getSLEB128(OffsetPtr); return true; case DW_FORM_udata: case DW_FORM_ref_udata: case DW_FORM_strx: case DW_FORM_addrx: case DW_FORM_loclistx: case DW_FORM_rnglistx: case DW_FORM_GNU_addr_index: case DW_FORM_GNU_str_index: DebugInfoData.getULEB128(OffsetPtr); return true; case DW_FORM_indirect: Indirect = true; Form = static_cast(DebugInfoData.getULEB128(OffsetPtr)); break; default: return false; } } while (Indirect); return true; } bool DWARFFormValue::isFormClass(DWARFFormValue::FormClass FC) const { // First, check DWARF5 form classes. if (Form < makeArrayRef(DWARF5FormClasses).size() && DWARF5FormClasses[Form] == FC) return true; // Check more forms from extensions and proposals. switch (Form) { case DW_FORM_GNU_ref_alt: return (FC == FC_Reference); case DW_FORM_GNU_addr_index: return (FC == FC_Address); case DW_FORM_GNU_str_index: case DW_FORM_GNU_strp_alt: return (FC == FC_String); default: break; } if (FC == FC_SectionOffset) { if (Form == DW_FORM_strp || Form == DW_FORM_line_strp) return true; // In DWARF3 DW_FORM_data4 and DW_FORM_data8 served also as a section // offset. If we don't have a DWARFUnit, default to the old behavior. if (Form == DW_FORM_data4 || Form == DW_FORM_data8) return !U || U->getVersion() <= 3; } return false; } bool DWARFFormValue::extractValue(const DWARFDataExtractor &Data, uint64_t *OffsetPtr, dwarf::FormParams FP, const DWARFContext *Ctx, const DWARFUnit *CU) { if (!Ctx && CU) Ctx = &CU->getContext(); C = Ctx; U = CU; bool Indirect = false; bool IsBlock = false; Value.data = nullptr; // Read the value for the form into value and follow and DW_FORM_indirect // instances we run into do { Indirect = false; switch (Form) { case DW_FORM_addr: case DW_FORM_ref_addr: { uint16_t Size = (Form == DW_FORM_addr) ? FP.AddrSize : FP.getRefAddrByteSize(); Value.uval = Data.getRelocatedValue(Size, OffsetPtr, &Value.SectionIndex); break; } case DW_FORM_exprloc: case DW_FORM_block: Value.uval = Data.getULEB128(OffsetPtr); IsBlock = true; break; case DW_FORM_block1: Value.uval = Data.getU8(OffsetPtr); IsBlock = true; break; case DW_FORM_block2: Value.uval = Data.getU16(OffsetPtr); IsBlock = true; break; case DW_FORM_block4: Value.uval = Data.getU32(OffsetPtr); IsBlock = true; break; case DW_FORM_data1: case DW_FORM_ref1: case DW_FORM_flag: case DW_FORM_strx1: case DW_FORM_addrx1: Value.uval = Data.getU8(OffsetPtr); break; case DW_FORM_data2: case DW_FORM_ref2: case DW_FORM_strx2: case DW_FORM_addrx2: Value.uval = Data.getU16(OffsetPtr); break; case DW_FORM_strx3: Value.uval = Data.getU24(OffsetPtr); break; case DW_FORM_data4: case DW_FORM_ref4: case DW_FORM_ref_sup4: case DW_FORM_strx4: case DW_FORM_addrx4: Value.uval = Data.getRelocatedValue(4, OffsetPtr); break; case DW_FORM_data8: case DW_FORM_ref8: case DW_FORM_ref_sup8: Value.uval = Data.getRelocatedValue(8, OffsetPtr); break; case DW_FORM_data16: // Treat this like a 16-byte block. Value.uval = 16; IsBlock = true; break; case DW_FORM_sdata: Value.sval = Data.getSLEB128(OffsetPtr); break; case DW_FORM_udata: case DW_FORM_ref_udata: case DW_FORM_rnglistx: Value.uval = Data.getULEB128(OffsetPtr); break; case DW_FORM_string: Value.cstr = Data.getCStr(OffsetPtr); break; case DW_FORM_indirect: Form = static_cast(Data.getULEB128(OffsetPtr)); Indirect = true; break; case DW_FORM_strp: case DW_FORM_sec_offset: case DW_FORM_GNU_ref_alt: case DW_FORM_GNU_strp_alt: case DW_FORM_line_strp: case DW_FORM_strp_sup: { Value.uval = Data.getRelocatedValue(FP.getDwarfOffsetByteSize(), OffsetPtr); break; } case DW_FORM_flag_present: Value.uval = 1; break; case DW_FORM_ref_sig8: Value.uval = Data.getU64(OffsetPtr); break; case DW_FORM_GNU_addr_index: case DW_FORM_GNU_str_index: case DW_FORM_addrx: case DW_FORM_strx: Value.uval = Data.getULEB128(OffsetPtr); break; default: // DWARFFormValue::skipValue() will have caught this and caused all // DWARF DIEs to fail to be parsed, so this code is not be reachable. llvm_unreachable("unsupported form"); } } while (Indirect); if (IsBlock) { StringRef Str = Data.getData().substr(*OffsetPtr, Value.uval); Value.data = nullptr; if (!Str.empty()) { Value.data = Str.bytes_begin(); *OffsetPtr += Value.uval; } } return true; } void DWARFFormValue::dumpSectionedAddress(raw_ostream &OS, DIDumpOptions DumpOpts, object::SectionedAddress SA) const { OS << format("0x%016" PRIx64, SA.Address); dumpAddressSection(U->getContext().getDWARFObj(), OS, DumpOpts, SA.SectionIndex); } void DWARFFormValue::dumpAddressSection(const DWARFObject &Obj, raw_ostream &OS, DIDumpOptions DumpOpts, uint64_t SectionIndex) { if (!DumpOpts.Verbose || SectionIndex == -1ULL) return; ArrayRef SectionNames = Obj.getSectionNames(); const auto &SecRef = SectionNames[SectionIndex]; OS << " \"" << SecRef.Name << '\"'; // Print section index if name is not unique. if (!SecRef.IsNameUnique) OS << format(" [%" PRIu64 "]", SectionIndex); } void DWARFFormValue::dump(raw_ostream &OS, DIDumpOptions DumpOpts) const { uint64_t UValue = Value.uval; bool CURelativeOffset = false; raw_ostream &AddrOS = DumpOpts.ShowAddresses ? WithColor(OS, HighlightColor::Address).get() : nulls(); switch (Form) { case DW_FORM_addr: dumpSectionedAddress(AddrOS, DumpOpts, {Value.uval, Value.SectionIndex}); break; case DW_FORM_addrx: case DW_FORM_addrx1: case DW_FORM_addrx2: case DW_FORM_addrx3: case DW_FORM_addrx4: case DW_FORM_GNU_addr_index: { if (U == nullptr) { OS << ""; break; } Optional A = U->getAddrOffsetSectionItem(UValue); if (!A || DumpOpts.Verbose) AddrOS << format("indexed (%8.8x) address = ", (uint32_t)UValue); if (A) dumpSectionedAddress(AddrOS, DumpOpts, *A); else OS << ""; break; } case DW_FORM_flag_present: OS << "true"; break; case DW_FORM_flag: case DW_FORM_data1: OS << format("0x%02x", (uint8_t)UValue); break; case DW_FORM_data2: OS << format("0x%04x", (uint16_t)UValue); break; case DW_FORM_data4: OS << format("0x%08x", (uint32_t)UValue); break; case DW_FORM_ref_sig8: AddrOS << format("0x%016" PRIx64, UValue); break; case DW_FORM_data8: OS << format("0x%016" PRIx64, UValue); break; case DW_FORM_data16: OS << format_bytes(ArrayRef(Value.data, 16), None, 16, 16); break; case DW_FORM_string: OS << '"'; OS.write_escaped(Value.cstr); OS << '"'; break; case DW_FORM_exprloc: case DW_FORM_block: case DW_FORM_block1: case DW_FORM_block2: case DW_FORM_block4: if (UValue > 0) { switch (Form) { case DW_FORM_exprloc: case DW_FORM_block: AddrOS << format("<0x%" PRIx64 "> ", UValue); break; case DW_FORM_block1: AddrOS << format("<0x%2.2x> ", (uint8_t)UValue); break; case DW_FORM_block2: AddrOS << format("<0x%4.4x> ", (uint16_t)UValue); break; case DW_FORM_block4: AddrOS << format("<0x%8.8x> ", (uint32_t)UValue); break; default: break; } const uint8_t *DataPtr = Value.data; if (DataPtr) { // UValue contains size of block const uint8_t *EndDataPtr = DataPtr + UValue; while (DataPtr < EndDataPtr) { AddrOS << format("%2.2x ", *DataPtr); ++DataPtr; } } else OS << "NULL"; } break; case DW_FORM_sdata: OS << Value.sval; break; case DW_FORM_udata: OS << Value.uval; break; case DW_FORM_strp: if (DumpOpts.Verbose) OS << format(" .debug_str[0x%8.8x] = ", (uint32_t)UValue); dumpString(OS); break; case DW_FORM_line_strp: if (DumpOpts.Verbose) OS << format(" .debug_line_str[0x%8.8x] = ", (uint32_t)UValue); dumpString(OS); break; case DW_FORM_strx: case DW_FORM_strx1: case DW_FORM_strx2: case DW_FORM_strx3: case DW_FORM_strx4: case DW_FORM_GNU_str_index: if (DumpOpts.Verbose) OS << format("indexed (%8.8x) string = ", (uint32_t)UValue); dumpString(OS); break; case DW_FORM_GNU_strp_alt: if (DumpOpts.Verbose) OS << format("alt indirect string, offset: 0x%" PRIx64 "", UValue); dumpString(OS); break; case DW_FORM_ref_addr: AddrOS << format("0x%016" PRIx64, UValue); break; case DW_FORM_ref1: CURelativeOffset = true; if (DumpOpts.Verbose) AddrOS << format("cu + 0x%2.2x", (uint8_t)UValue); break; case DW_FORM_ref2: CURelativeOffset = true; if (DumpOpts.Verbose) AddrOS << format("cu + 0x%4.4x", (uint16_t)UValue); break; case DW_FORM_ref4: CURelativeOffset = true; if (DumpOpts.Verbose) AddrOS << format("cu + 0x%4.4x", (uint32_t)UValue); break; case DW_FORM_ref8: CURelativeOffset = true; if (DumpOpts.Verbose) AddrOS << format("cu + 0x%8.8" PRIx64, UValue); break; case DW_FORM_ref_udata: CURelativeOffset = true; if (DumpOpts.Verbose) AddrOS << format("cu + 0x%" PRIx64, UValue); break; case DW_FORM_GNU_ref_alt: AddrOS << format("", UValue); break; // All DW_FORM_indirect attributes should be resolved prior to calling // this function case DW_FORM_indirect: OS << "DW_FORM_indirect"; break; case DW_FORM_rnglistx: OS << format("indexed (0x%x) rangelist = ", (uint32_t)UValue); break; // Should be formatted to 64-bit for DWARF64. case DW_FORM_sec_offset: AddrOS << format("0x%08x", (uint32_t)UValue); break; default: OS << format("DW_FORM(0x%4.4x)", Form); break; } if (CURelativeOffset) { if (DumpOpts.Verbose) OS << " => {"; if (DumpOpts.ShowAddresses) WithColor(OS, HighlightColor::Address).get() << format("0x%8.8" PRIx64, UValue + (U ? U->getOffset() : 0)); if (DumpOpts.Verbose) OS << "}"; } } void DWARFFormValue::dumpString(raw_ostream &OS) const { Optional DbgStr = getAsCString(); if (DbgStr.hasValue()) { auto COS = WithColor(OS, HighlightColor::String); COS.get() << '"'; COS.get().write_escaped(DbgStr.getValue()); COS.get() << '"'; } } Optional DWARFFormValue::getAsCString() const { if (!isFormClass(FC_String)) return None; if (Form == DW_FORM_string) return Value.cstr; // FIXME: Add support for DW_FORM_GNU_strp_alt if (Form == DW_FORM_GNU_strp_alt || C == nullptr) return None; uint64_t Offset = Value.uval; if (Form == DW_FORM_line_strp) { // .debug_line_str is tracked in the Context. if (const char *Str = C->getLineStringExtractor().getCStr(&Offset)) return Str; return None; } if (Form == DW_FORM_GNU_str_index || Form == DW_FORM_strx || Form == DW_FORM_strx1 || Form == DW_FORM_strx2 || Form == DW_FORM_strx3 || Form == DW_FORM_strx4) { if (!U) return None; Optional StrOffset = U->getStringOffsetSectionItem(Offset); if (!StrOffset) return None; Offset = *StrOffset; } // Prefer the Unit's string extractor, because for .dwo it will point to // .debug_str.dwo, while the Context's extractor always uses .debug_str. if (U) { if (const char *Str = U->getStringExtractor().getCStr(&Offset)) return Str; return None; } if (const char *Str = C->getStringExtractor().getCStr(&Offset)) return Str; return None; } Optional DWARFFormValue::getAsAddress() const { if (auto SA = getAsSectionedAddress()) return SA->Address; return None; } Optional DWARFFormValue::getAsSectionedAddress() const { if (!isFormClass(FC_Address)) return None; if (Form == DW_FORM_GNU_addr_index || Form == DW_FORM_addrx) { uint32_t Index = Value.uval; if (!U) return None; Optional SA = U->getAddrOffsetSectionItem(Index); if (!SA) return None; return SA; } return {{Value.uval, Value.SectionIndex}}; } Optional DWARFFormValue::getAsReference() const { if (auto R = getAsRelativeReference()) return R->Unit ? R->Unit->getOffset() + R->Offset : R->Offset; return None; } Optional DWARFFormValue::getAsRelativeReference() const { if (!isFormClass(FC_Reference)) return None; switch (Form) { case DW_FORM_ref1: case DW_FORM_ref2: case DW_FORM_ref4: case DW_FORM_ref8: case DW_FORM_ref_udata: if (!U) return None; return UnitOffset{const_cast(U), Value.uval}; case DW_FORM_ref_addr: case DW_FORM_ref_sig8: case DW_FORM_GNU_ref_alt: return UnitOffset{nullptr, Value.uval}; default: return None; } } Optional DWARFFormValue::getAsSectionOffset() const { if (!isFormClass(FC_SectionOffset)) return None; return Value.uval; } Optional DWARFFormValue::getAsUnsignedConstant() const { if ((!isFormClass(FC_Constant) && !isFormClass(FC_Flag)) || Form == DW_FORM_sdata) return None; return Value.uval; } Optional DWARFFormValue::getAsSignedConstant() const { if ((!isFormClass(FC_Constant) && !isFormClass(FC_Flag)) || (Form == DW_FORM_udata && uint64_t(std::numeric_limits::max()) < Value.uval)) return None; switch (Form) { case DW_FORM_data4: return int32_t(Value.uval); case DW_FORM_data2: return int16_t(Value.uval); case DW_FORM_data1: return int8_t(Value.uval); case DW_FORM_sdata: case DW_FORM_data8: default: return Value.sval; } } Optional> DWARFFormValue::getAsBlock() const { if (!isFormClass(FC_Block) && !isFormClass(FC_Exprloc) && Form != DW_FORM_data16) return None; return makeArrayRef(Value.data, Value.uval); } Optional DWARFFormValue::getAsCStringOffset() const { if (!isFormClass(FC_String) && Form == DW_FORM_string) return None; return Value.uval; } Optional DWARFFormValue::getAsReferenceUVal() const { if (!isFormClass(FC_Reference)) return None; return Value.uval; } binaryen-version_108/third_party/llvm-project/DWARFGdbIndex.cpp000066400000000000000000000160311423707623100246710ustar00rootroot00000000000000//===- DWARFGdbIndex.cpp --------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFGdbIndex.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Format.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include using namespace llvm; // .gdb_index section format reference: // https://sourceware.org/gdb/onlinedocs/gdb/Index-Section-Format.html void DWARFGdbIndex::dumpCUList(raw_ostream &OS) const { OS << format("\n CU list offset = 0x%x, has %" PRId64 " entries:", CuListOffset, (uint64_t)CuList.size()) << '\n'; uint32_t I = 0; for (const CompUnitEntry &CU : CuList) OS << format(" %d: Offset = 0x%llx, Length = 0x%llx\n", I++, CU.Offset, CU.Length); } void DWARFGdbIndex::dumpTUList(raw_ostream &OS) const { OS << formatv("\n Types CU list offset = {0:x}, has {1} entries:\n", TuListOffset, TuList.size()); uint32_t I = 0; for (const TypeUnitEntry &TU : TuList) OS << formatv(" {0}: offset = {1:x8}, type_offset = {2:x8}, " "type_signature = {3:x16}\n", I++, TU.Offset, TU.TypeOffset, TU.TypeSignature); } void DWARFGdbIndex::dumpAddressArea(raw_ostream &OS) const { OS << format("\n Address area offset = 0x%x, has %" PRId64 " entries:", AddressAreaOffset, (uint64_t)AddressArea.size()) << '\n'; for (const AddressEntry &Addr : AddressArea) OS << format( " Low/High address = [0x%llx, 0x%llx) (Size: 0x%llx), CU id = %d\n", Addr.LowAddress, Addr.HighAddress, Addr.HighAddress - Addr.LowAddress, Addr.CuIndex); } void DWARFGdbIndex::dumpSymbolTable(raw_ostream &OS) const { OS << format("\n Symbol table offset = 0x%x, size = %" PRId64 ", filled slots:", SymbolTableOffset, (uint64_t)SymbolTable.size()) << '\n'; uint32_t I = -1; for (const SymTableEntry &E : SymbolTable) { ++I; if (!E.NameOffset && !E.VecOffset) continue; OS << format(" %d: Name offset = 0x%x, CU vector offset = 0x%x\n", I, E.NameOffset, E.VecOffset); StringRef Name = ConstantPoolStrings.substr( ConstantPoolOffset - StringPoolOffset + E.NameOffset); auto CuVector = std::find_if( ConstantPoolVectors.begin(), ConstantPoolVectors.end(), [&](const std::pair> &V) { return V.first == E.VecOffset; }); assert(CuVector != ConstantPoolVectors.end() && "Invalid symbol table"); uint32_t CuVectorId = CuVector - ConstantPoolVectors.begin(); OS << format(" String name: %s, CU vector index: %d\n", Name.data(), CuVectorId); } } void DWARFGdbIndex::dumpConstantPool(raw_ostream &OS) const { OS << format("\n Constant pool offset = 0x%x, has %" PRId64 " CU vectors:", ConstantPoolOffset, (uint64_t)ConstantPoolVectors.size()); uint32_t I = 0; for (const auto &V : ConstantPoolVectors) { OS << format("\n %d(0x%x): ", I++, V.first); for (uint32_t Val : V.second) OS << format("0x%x ", Val); } OS << '\n'; } void DWARFGdbIndex::dump(raw_ostream &OS) { if (HasError) { OS << "\n\n"; return; } if (HasContent) { OS << " Version = " << Version << '\n'; dumpCUList(OS); dumpTUList(OS); dumpAddressArea(OS); dumpSymbolTable(OS); dumpConstantPool(OS); } } bool DWARFGdbIndex::parseImpl(DataExtractor Data) { uint64_t Offset = 0; // Only version 7 is supported at this moment. Version = Data.getU32(&Offset); if (Version != 7) return false; CuListOffset = Data.getU32(&Offset); TuListOffset = Data.getU32(&Offset); AddressAreaOffset = Data.getU32(&Offset); SymbolTableOffset = Data.getU32(&Offset); ConstantPoolOffset = Data.getU32(&Offset); if (Offset != CuListOffset) return false; uint32_t CuListSize = (TuListOffset - CuListOffset) / 16; CuList.reserve(CuListSize); for (uint32_t i = 0; i < CuListSize; ++i) { uint64_t CuOffset = Data.getU64(&Offset); uint64_t CuLength = Data.getU64(&Offset); CuList.push_back({CuOffset, CuLength}); } // CU Types are no longer needed as DWARF skeleton type units never made it // into the standard. uint32_t TuListSize = (AddressAreaOffset - TuListOffset) / 24; TuList.resize(TuListSize); for (uint32_t I = 0; I < TuListSize; ++I) { uint64_t CuOffset = Data.getU64(&Offset); uint64_t TypeOffset = Data.getU64(&Offset); uint64_t Signature = Data.getU64(&Offset); TuList[I] = {CuOffset, TypeOffset, Signature}; } uint32_t AddressAreaSize = (SymbolTableOffset - AddressAreaOffset) / 20; AddressArea.reserve(AddressAreaSize); for (uint32_t i = 0; i < AddressAreaSize; ++i) { uint64_t LowAddress = Data.getU64(&Offset); uint64_t HighAddress = Data.getU64(&Offset); uint32_t CuIndex = Data.getU32(&Offset); AddressArea.push_back({LowAddress, HighAddress, CuIndex}); } // The symbol table. This is an open addressed hash table. The size of the // hash table is always a power of 2. // Each slot in the hash table consists of a pair of offset_type values. The // first value is the offset of the symbol's name in the constant pool. The // second value is the offset of the CU vector in the constant pool. // If both values are 0, then this slot in the hash table is empty. This is ok // because while 0 is a valid constant pool index, it cannot be a valid index // for both a string and a CU vector. uint32_t SymTableSize = (ConstantPoolOffset - SymbolTableOffset) / 8; SymbolTable.reserve(SymTableSize); uint32_t CuVectorsTotal = 0; for (uint32_t i = 0; i < SymTableSize; ++i) { uint32_t NameOffset = Data.getU32(&Offset); uint32_t CuVecOffset = Data.getU32(&Offset); SymbolTable.push_back({NameOffset, CuVecOffset}); if (NameOffset || CuVecOffset) ++CuVectorsTotal; } // The constant pool. CU vectors are stored first, followed by strings. // The first value is the number of CU indices in the vector. Each subsequent // value is the index and symbol attributes of a CU in the CU list. for (uint32_t i = 0; i < CuVectorsTotal; ++i) { ConstantPoolVectors.emplace_back(0, SmallVector()); auto &Vec = ConstantPoolVectors.back(); Vec.first = Offset - ConstantPoolOffset; uint32_t Num = Data.getU32(&Offset); for (uint32_t j = 0; j < Num; ++j) Vec.second.push_back(Data.getU32(&Offset)); } ConstantPoolStrings = Data.getData().drop_front(Offset); StringPoolOffset = Offset; return true; } void DWARFGdbIndex::parse(DataExtractor Data) { HasContent = !Data.getData().empty(); HasError = HasContent && !parseImpl(Data); } binaryen-version_108/third_party/llvm-project/DWARFListTable.cpp000066400000000000000000000122001423707623100250620ustar00rootroot00000000000000//===- DWARFListTable.cpp ---------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFListTable.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Error.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; Error DWARFListTableHeader::extract(DWARFDataExtractor Data, uint64_t *OffsetPtr) { HeaderOffset = *OffsetPtr; // Read and verify the length field. if (!Data.isValidOffsetForDataOfSize(*OffsetPtr, sizeof(uint32_t))) return createStringError(errc::invalid_argument, "section is not large enough to contain a " "%s table length at offset 0x%" PRIx64, SectionName.data(), *OffsetPtr); Format = dwarf::DwarfFormat::DWARF32; uint8_t OffsetByteSize = 4; HeaderData.Length = Data.getRelocatedValue(4, OffsetPtr); if (HeaderData.Length == dwarf::DW_LENGTH_DWARF64) { Format = dwarf::DwarfFormat::DWARF64; OffsetByteSize = 8; HeaderData.Length = Data.getU64(OffsetPtr); } else if (HeaderData.Length >= dwarf::DW_LENGTH_lo_reserved) { return createStringError(errc::invalid_argument, "%s table at offset 0x%" PRIx64 " has unsupported reserved unit length of value 0x%8.8" PRIx64, SectionName.data(), HeaderOffset, HeaderData.Length); } uint64_t FullLength = HeaderData.Length + dwarf::getUnitLengthFieldByteSize(Format); assert(FullLength == length()); if (FullLength < getHeaderSize(Format)) return createStringError(errc::invalid_argument, "%s table at offset 0x%" PRIx64 " has too small length (0x%" PRIx64 ") to contain a complete header", SectionName.data(), HeaderOffset, FullLength); uint64_t End = HeaderOffset + FullLength; if (!Data.isValidOffsetForDataOfSize(HeaderOffset, FullLength)) return createStringError(errc::invalid_argument, "section is not large enough to contain a %s table " "of length 0x%" PRIx64 " at offset 0x%" PRIx64, SectionName.data(), FullLength, HeaderOffset); HeaderData.Version = Data.getU16(OffsetPtr); HeaderData.AddrSize = Data.getU8(OffsetPtr); HeaderData.SegSize = Data.getU8(OffsetPtr); HeaderData.OffsetEntryCount = Data.getU32(OffsetPtr); // Perform basic validation of the remaining header fields. if (HeaderData.Version != 5) return createStringError(errc::invalid_argument, "unrecognised %s table version %" PRIu16 " in table at offset 0x%" PRIx64, SectionName.data(), HeaderData.Version, HeaderOffset); if (HeaderData.AddrSize != 4 && HeaderData.AddrSize != 8) return createStringError(errc::not_supported, "%s table at offset 0x%" PRIx64 " has unsupported address size %" PRIu8, SectionName.data(), HeaderOffset, HeaderData.AddrSize); if (HeaderData.SegSize != 0) return createStringError(errc::not_supported, "%s table at offset 0x%" PRIx64 " has unsupported segment selector size %" PRIu8, SectionName.data(), HeaderOffset, HeaderData.SegSize); if (End < HeaderOffset + getHeaderSize(Format) + HeaderData.OffsetEntryCount * OffsetByteSize) return createStringError(errc::invalid_argument, "%s table at offset 0x%" PRIx64 " has more offset entries (%" PRIu32 ") than there is space for", SectionName.data(), HeaderOffset, HeaderData.OffsetEntryCount); Data.setAddressSize(HeaderData.AddrSize); for (uint32_t I = 0; I < HeaderData.OffsetEntryCount; ++I) Offsets.push_back(Data.getRelocatedValue(OffsetByteSize, OffsetPtr)); return Error::success(); } void DWARFListTableHeader::dump(raw_ostream &OS, DIDumpOptions DumpOpts) const { if (DumpOpts.Verbose) OS << format("0x%8.8" PRIx64 ": ", HeaderOffset); OS << format( "%s list header: length = 0x%8.8" PRIx64 ", version = 0x%4.4" PRIx16 ", " "addr_size = 0x%2.2" PRIx8 ", seg_size = 0x%2.2" PRIx8 ", offset_entry_count = " "0x%8.8" PRIx32 "\n", ListTypeString.data(), HeaderData.Length, HeaderData.Version, HeaderData.AddrSize, HeaderData.SegSize, HeaderData.OffsetEntryCount); if (HeaderData.OffsetEntryCount > 0) { OS << "offsets: ["; for (const auto &Off : Offsets) { OS << format("\n0x%8.8" PRIx64, Off); if (DumpOpts.Verbose) OS << format(" => 0x%8.8" PRIx64, Off + HeaderOffset + getHeaderSize(Format)); } OS << "\n]\n"; } } uint64_t DWARFListTableHeader::length() const { if (HeaderData.Length == 0) return 0; return HeaderData.Length + dwarf::getUnitLengthFieldByteSize(Format); } binaryen-version_108/third_party/llvm-project/DWARFTypeUnit.cpp000066400000000000000000000036301423707623100247670ustar00rootroot00000000000000//===- DWARFTypeUnit.cpp --------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFTypeUnit.h" #include "llvm/DebugInfo/DIContext.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/DebugInfo/DWARF/DWARFDie.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include using namespace llvm; void DWARFTypeUnit::dump(raw_ostream &OS, DIDumpOptions DumpOpts) { DWARFDie TD = getDIEForOffset(getTypeOffset() + getOffset()); const char *Name = TD.getName(DINameKind::ShortName); if (DumpOpts.SummarizeTypes) { OS << "name = '" << Name << "'" << " type_signature = " << format("0x%016" PRIx64, getTypeHash()) << " length = " << format("0x%08" PRIx64, getLength()) << '\n'; return; } OS << format("0x%08" PRIx64, getOffset()) << ": Type Unit:" << " length = " << format("0x%08" PRIx64, getLength()) << " version = " << format("0x%04x", getVersion()); if (getVersion() >= 5) OS << " unit_type = " << dwarf::UnitTypeString(getUnitType()); OS << " abbr_offset = " << format("0x%04" PRIx64, getAbbreviations()->getOffset()) << " addr_size = " << format("0x%02x", getAddressByteSize()) << " name = '" << Name << "'" << " type_signature = " << format("0x%016" PRIx64, getTypeHash()) << " type_offset = " << format("0x%04" PRIx64, getTypeOffset()) << " (next unit at " << format("0x%08" PRIx64, getNextUnitOffset()) << ")\n"; if (DWARFDie TU = getUnitDIE(false)) TU.dump(OS, 0, DumpOpts); else OS << "\n\n"; } binaryen-version_108/third_party/llvm-project/DWARFUnit.cpp000066400000000000000000001035451423707623100241330ustar00rootroot00000000000000//===- DWARFUnit.cpp ------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" #include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h" #include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h" #include "llvm/DebugInfo/DWARF/DWARFDebugRnglists.h" #include "llvm/DebugInfo/DWARF/DWARFDie.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFTypeUnit.h" #include "llvm/Support/DataExtractor.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Path.h" #include "llvm/Support/WithColor.h" #include #include #include #include #include #include #include using namespace llvm; using namespace dwarf; void DWARFUnitVector::addUnitsForSection(DWARFContext &C, const DWARFSection &Section, DWARFSectionKind SectionKind) { const DWARFObject &D = C.getDWARFObj(); addUnitsImpl(C, D, Section, C.getDebugAbbrev(), &D.getRangesSection(), &D.getLocSection(), D.getStrSection(), D.getStrOffsetsSection(), &D.getAddrSection(), D.getLineSection(), D.isLittleEndian(), false, false, SectionKind); } void DWARFUnitVector::addUnitsForDWOSection(DWARFContext &C, const DWARFSection &DWOSection, DWARFSectionKind SectionKind, bool Lazy) { const DWARFObject &D = C.getDWARFObj(); addUnitsImpl(C, D, DWOSection, C.getDebugAbbrevDWO(), &D.getRangesDWOSection(), &D.getLocDWOSection(), D.getStrDWOSection(), D.getStrOffsetsDWOSection(), &D.getAddrSection(), D.getLineDWOSection(), C.isLittleEndian(), true, Lazy, SectionKind); } void DWARFUnitVector::addUnitsImpl( DWARFContext &Context, const DWARFObject &Obj, const DWARFSection &Section, const DWARFDebugAbbrev *DA, const DWARFSection *RS, const DWARFSection *LocSection, StringRef SS, const DWARFSection &SOS, const DWARFSection *AOS, const DWARFSection &LS, bool LE, bool IsDWO, bool Lazy, DWARFSectionKind SectionKind) { DWARFDataExtractor Data(Obj, Section, LE, 0); // Lazy initialization of Parser, now that we have all section info. if (!Parser) { Parser = [=, &Context, &Obj, &Section, &SOS, &LS](uint64_t Offset, DWARFSectionKind SectionKind, const DWARFSection *CurSection, const DWARFUnitIndex::Entry *IndexEntry) -> std::unique_ptr { const DWARFSection &InfoSection = CurSection ? *CurSection : Section; DWARFDataExtractor Data(Obj, InfoSection, LE, 0); if (!Data.isValidOffset(Offset)) return nullptr; const DWARFUnitIndex *Index = nullptr; if (IsDWO) Index = &getDWARFUnitIndex(Context, SectionKind); DWARFUnitHeader Header; if (!Header.extract(Context, Data, &Offset, SectionKind, Index, IndexEntry)) return nullptr; std::unique_ptr U; if (Header.isTypeUnit()) U = std::make_unique(Context, InfoSection, Header, DA, RS, LocSection, SS, SOS, AOS, LS, LE, IsDWO, *this); else U = std::make_unique(Context, InfoSection, Header, DA, RS, LocSection, SS, SOS, AOS, LS, LE, IsDWO, *this); return U; }; } if (Lazy) return; // Find a reasonable insertion point within the vector. We skip over // (a) units from a different section, (b) units from the same section // but with lower offset-within-section. This keeps units in order // within a section, although not necessarily within the object file, // even if we do lazy parsing. auto I = this->begin(); uint64_t Offset = 0; while (Data.isValidOffset(Offset)) { if (I != this->end() && (&(*I)->getInfoSection() != &Section || (*I)->getOffset() == Offset)) { ++I; continue; } auto U = Parser(Offset, SectionKind, &Section, nullptr); // If parsing failed, we're done with this section. if (!U) break; Offset = U->getNextUnitOffset(); I = std::next(this->insert(I, std::move(U))); } } DWARFUnit *DWARFUnitVector::addUnit(std::unique_ptr Unit) { auto I = std::upper_bound(begin(), end(), Unit, [](const std::unique_ptr &LHS, const std::unique_ptr &RHS) { return LHS->getOffset() < RHS->getOffset(); }); return this->insert(I, std::move(Unit))->get(); } DWARFUnit *DWARFUnitVector::getUnitForOffset(uint64_t Offset) const { auto end = begin() + getNumInfoUnits(); auto *CU = std::upper_bound(begin(), end, Offset, [](uint64_t LHS, const std::unique_ptr &RHS) { return LHS < RHS->getNextUnitOffset(); }); if (CU != end && (*CU)->getOffset() <= Offset) return CU->get(); return nullptr; } DWARFUnit * DWARFUnitVector::getUnitForIndexEntry(const DWARFUnitIndex::Entry &E) { const auto *CUOff = E.getOffset(DW_SECT_INFO); if (!CUOff) return nullptr; auto Offset = CUOff->Offset; auto end = begin() + getNumInfoUnits(); auto *CU = std::upper_bound(begin(), end, CUOff->Offset, [](uint64_t LHS, const std::unique_ptr &RHS) { return LHS < RHS->getNextUnitOffset(); }); if (CU != end && (*CU)->getOffset() <= Offset) return CU->get(); if (!Parser) return nullptr; auto U = Parser(Offset, DW_SECT_INFO, nullptr, &E); if (!U) U = nullptr; auto *NewCU = U.get(); this->insert(CU, std::move(U)); ++NumInfoUnits; return NewCU; } DWARFUnit::DWARFUnit(DWARFContext &DC, const DWARFSection &Section, const DWARFUnitHeader &Header, const DWARFDebugAbbrev *DA, const DWARFSection *RS, const DWARFSection *LocSection, StringRef SS, const DWARFSection &SOS, const DWARFSection *AOS, const DWARFSection &LS, bool LE, bool IsDWO, const DWARFUnitVector &UnitVector) : Context(DC), InfoSection(Section), Header(Header), Abbrev(DA), RangeSection(RS), LocSection(LocSection), LineSection(LS), StringSection(SS), StringOffsetSection(SOS), AddrOffsetSection(AOS), isLittleEndian(LE), IsDWO(IsDWO), UnitVector(UnitVector) { clear(); // For split DWARF we only need to keep track of the location list section's // data (no relocations), and if we are reading a package file, we need to // adjust the location list data based on the index entries. if (IsDWO) { LocSectionData = LocSection->Data; if (auto *IndexEntry = Header.getIndexEntry()) if (const auto *C = IndexEntry->getOffset(DW_SECT_LOC)) LocSectionData = LocSectionData.substr(C->Offset, C->Length); } } DWARFUnit::~DWARFUnit() = default; DWARFDataExtractor DWARFUnit::getDebugInfoExtractor() const { return DWARFDataExtractor(Context.getDWARFObj(), InfoSection, isLittleEndian, getAddressByteSize()); } Optional DWARFUnit::getAddrOffsetSectionItem(uint32_t Index) const { if (IsDWO) { auto R = Context.info_section_units(); auto I = R.begin(); // Surprising if a DWO file has more than one skeleton unit in it - this // probably shouldn't be valid, but if a use case is found, here's where to // support it (probably have to linearly search for the matching skeleton CU // here) if (I != R.end() && std::next(I) == R.end()) return (*I)->getAddrOffsetSectionItem(Index); } uint64_t Offset = AddrOffsetSectionBase + Index * getAddressByteSize(); if (AddrOffsetSection->Data.size() < Offset + getAddressByteSize()) return None; DWARFDataExtractor DA(Context.getDWARFObj(), *AddrOffsetSection, isLittleEndian, getAddressByteSize()); uint64_t Section; uint64_t Address = DA.getRelocatedAddress(&Offset, &Section); return {{Address, Section}}; } Optional DWARFUnit::getStringOffsetSectionItem(uint32_t Index) const { if (!StringOffsetsTableContribution) return None; unsigned ItemSize = getDwarfStringOffsetsByteSize(); uint64_t Offset = getStringOffsetsBase() + Index * ItemSize; if (StringOffsetSection.Data.size() < Offset + ItemSize) return None; DWARFDataExtractor DA(Context.getDWARFObj(), StringOffsetSection, isLittleEndian, 0); return DA.getRelocatedValue(ItemSize, &Offset); } bool DWARFUnitHeader::extract(DWARFContext &Context, const DWARFDataExtractor &debug_info, uint64_t *offset_ptr, DWARFSectionKind SectionKind, const DWARFUnitIndex *Index, const DWARFUnitIndex::Entry *Entry) { Offset = *offset_ptr; IndexEntry = Entry; if (!IndexEntry && Index) IndexEntry = Index->getFromOffset(*offset_ptr); Length = debug_info.getRelocatedValue(4, offset_ptr); FormParams.Format = DWARF32; if (Length == dwarf::DW_LENGTH_DWARF64) { Length = debug_info.getU64(offset_ptr); FormParams.Format = DWARF64; } FormParams.Version = debug_info.getU16(offset_ptr); if (FormParams.Version >= 5) { UnitType = debug_info.getU8(offset_ptr); FormParams.AddrSize = debug_info.getU8(offset_ptr); AbbrOffset = debug_info.getRelocatedValue(FormParams.getDwarfOffsetByteSize(), offset_ptr); } else { AbbrOffset = debug_info.getRelocatedValue(FormParams.getDwarfOffsetByteSize(), offset_ptr); FormParams.AddrSize = debug_info.getU8(offset_ptr); // Fake a unit type based on the section type. This isn't perfect, // but distinguishing compile and type units is generally enough. if (SectionKind == DW_SECT_TYPES) UnitType = DW_UT_type; else UnitType = DW_UT_compile; } if (IndexEntry) { if (AbbrOffset) return false; auto *UnitContrib = IndexEntry->getOffset(); if (!UnitContrib || UnitContrib->Length != (Length + 4)) return false; auto *AbbrEntry = IndexEntry->getOffset(DW_SECT_ABBREV); if (!AbbrEntry) return false; AbbrOffset = AbbrEntry->Offset; } if (isTypeUnit()) { TypeHash = debug_info.getU64(offset_ptr); TypeOffset = debug_info.getUnsigned(offset_ptr, FormParams.getDwarfOffsetByteSize()); } else if (UnitType == DW_UT_split_compile || UnitType == DW_UT_skeleton) DWOId = debug_info.getU64(offset_ptr); // Header fields all parsed, capture the size of this unit header. assert(*offset_ptr - Offset <= 255 && "unexpected header size"); Size = uint8_t(*offset_ptr - Offset); // Type offset is unit-relative; should be after the header and before // the end of the current unit. bool TypeOffsetOK = !isTypeUnit() ? true : TypeOffset >= Size && TypeOffset < getLength() + getUnitLengthFieldByteSize(); bool LengthOK = debug_info.isValidOffset(getNextUnitOffset() - 1); bool VersionOK = DWARFContext::isSupportedVersion(getVersion()); bool AddrSizeOK = getAddressByteSize() == 4 || getAddressByteSize() == 8; if (!LengthOK || !VersionOK || !AddrSizeOK || !TypeOffsetOK) return false; // Keep track of the highest DWARF version we encounter across all units. Context.setMaxVersionIfGreater(getVersion()); return true; } // Parse the rangelist table header, including the optional array of offsets // following it (DWARF v5 and later). static Expected parseRngListTableHeader(DWARFDataExtractor &DA, uint64_t Offset, DwarfFormat Format) { // We are expected to be called with Offset 0 or pointing just past the table // header. Correct Offset in the latter case so that it points to the start // of the header. if (Offset > 0) { uint64_t HeaderSize = DWARFListTableHeader::getHeaderSize(Format); if (Offset < HeaderSize) return createStringError(errc::invalid_argument, "Did not detect a valid" " range list table with base = 0x%" PRIx64 "\n", Offset); Offset -= HeaderSize; } llvm::DWARFDebugRnglistTable Table; if (Error E = Table.extractHeaderAndOffsets(DA, &Offset)) return std::move(E); return Table; } Error DWARFUnit::extractRangeList(uint64_t RangeListOffset, DWARFDebugRangeList &RangeList) const { // Require that compile unit is extracted. assert(!DieArray.empty()); DWARFDataExtractor RangesData(Context.getDWARFObj(), *RangeSection, isLittleEndian, getAddressByteSize()); uint64_t ActualRangeListOffset = RangeSectionBase + RangeListOffset; return RangeList.extract(RangesData, &ActualRangeListOffset); } void DWARFUnit::clear() { Abbrevs = nullptr; BaseAddr.reset(); RangeSectionBase = 0; AddrOffsetSectionBase = 0; clearDIEs(false); DWO.reset(); } const char *DWARFUnit::getCompilationDir() { return dwarf::toString(getUnitDIE().find(DW_AT_comp_dir), nullptr); } void DWARFUnit::extractDIEsToVector( bool AppendCUDie, bool AppendNonCUDies, std::vector &Dies) const { if (!AppendCUDie && !AppendNonCUDies) return; // Set the offset to that of the first DIE and calculate the start of the // next compilation unit header. uint64_t DIEOffset = getOffset() + getHeaderSize(); uint64_t NextCUOffset = getNextUnitOffset(); DWARFDebugInfoEntry DIE; DWARFDataExtractor DebugInfoData = getDebugInfoExtractor(); uint32_t Depth = 0; bool IsCUDie = true; while (DIE.extractFast(*this, &DIEOffset, DebugInfoData, NextCUOffset, Depth)) { if (IsCUDie) { if (AppendCUDie) Dies.push_back(DIE); if (!AppendNonCUDies) break; // The average bytes per DIE entry has been seen to be // around 14-20 so let's pre-reserve the needed memory for // our DIE entries accordingly. Dies.reserve(Dies.size() + getDebugInfoSize() / 14); IsCUDie = false; } else { Dies.push_back(DIE); } if (const DWARFAbbreviationDeclaration *AbbrDecl = DIE.getAbbreviationDeclarationPtr()) { // Normal DIE if (AbbrDecl->hasChildren()) ++Depth; } else { // NULL DIE. if (Depth > 0) --Depth; if (Depth == 0) break; // We are done with this compile unit! } } // Give a little bit of info if we encounter corrupt DWARF (our offset // should always terminate at or before the start of the next compilation // unit header). if (DIEOffset > NextCUOffset) WithColor::warning() << format("DWARF compile unit extends beyond its " "bounds cu 0x%8.8" PRIx64 " " "at 0x%8.8" PRIx64 "\n", getOffset(), DIEOffset); } void DWARFUnit::extractDIEsIfNeeded(bool CUDieOnly) { if (Error e = tryExtractDIEsIfNeeded(CUDieOnly)) WithColor::error() << toString(std::move(e)); } Error DWARFUnit::tryExtractDIEsIfNeeded(bool CUDieOnly) { if ((CUDieOnly && !DieArray.empty()) || DieArray.size() > 1) return Error::success(); // Already parsed. bool HasCUDie = !DieArray.empty(); extractDIEsToVector(!HasCUDie, !CUDieOnly, DieArray); if (DieArray.empty()) return Error::success(); // If CU DIE was just parsed, copy several attribute values from it. if (HasCUDie) return Error::success(); DWARFDie UnitDie(this, &DieArray[0]); if (Optional DWOId = toUnsigned(UnitDie.find(DW_AT_GNU_dwo_id))) Header.setDWOId(*DWOId); if (!IsDWO) { assert(AddrOffsetSectionBase == 0); assert(RangeSectionBase == 0); AddrOffsetSectionBase = toSectionOffset(UnitDie.find(DW_AT_addr_base), 0); if (!AddrOffsetSectionBase) AddrOffsetSectionBase = toSectionOffset(UnitDie.find(DW_AT_GNU_addr_base), 0); RangeSectionBase = toSectionOffset(UnitDie.find(DW_AT_rnglists_base), 0); } // In general, in DWARF v5 and beyond we derive the start of the unit's // contribution to the string offsets table from the unit DIE's // DW_AT_str_offsets_base attribute. Split DWARF units do not use this // attribute, so we assume that there is a contribution to the string // offsets table starting at offset 0 of the debug_str_offsets.dwo section. // In both cases we need to determine the format of the contribution, // which may differ from the unit's format. DWARFDataExtractor DA(Context.getDWARFObj(), StringOffsetSection, isLittleEndian, 0); if (IsDWO || getVersion() >= 5) { auto StringOffsetOrError = IsDWO ? determineStringOffsetsTableContributionDWO(DA) : determineStringOffsetsTableContribution(DA); if (!StringOffsetOrError) return createStringError(errc::invalid_argument, "invalid reference to or invalid content in " ".debug_str_offsets[.dwo]: " + toString(StringOffsetOrError.takeError())); StringOffsetsTableContribution = *StringOffsetOrError; } // DWARF v5 uses the .debug_rnglists and .debug_rnglists.dwo sections to // describe address ranges. if (getVersion() >= 5) { if (IsDWO) setRangesSection(&Context.getDWARFObj().getRnglistsDWOSection(), 0); else setRangesSection(&Context.getDWARFObj().getRnglistsSection(), toSectionOffset(UnitDie.find(DW_AT_rnglists_base), 0)); if (RangeSection->Data.size()) { // Parse the range list table header. Individual range lists are // extracted lazily. DWARFDataExtractor RangesDA(Context.getDWARFObj(), *RangeSection, isLittleEndian, 0); auto TableOrError = parseRngListTableHeader(RangesDA, RangeSectionBase, Header.getFormat()); if (!TableOrError) return createStringError(errc::invalid_argument, "parsing a range list table: " + toString(TableOrError.takeError())); RngListTable = TableOrError.get(); // In a split dwarf unit, there is no DW_AT_rnglists_base attribute. // Adjust RangeSectionBase to point past the table header. if (IsDWO && RngListTable) RangeSectionBase = RngListTable->getHeaderSize(); } } // Don't fall back to DW_AT_GNU_ranges_base: it should be ignored for // skeleton CU DIE, so that DWARF users not aware of it are not broken. return Error::success(); } bool DWARFUnit::parseDWO() { if (IsDWO) return false; if (DWO.get()) return false; DWARFDie UnitDie = getUnitDIE(); if (!UnitDie) return false; auto DWOFileName = dwarf::toString(UnitDie.find(DW_AT_GNU_dwo_name)); if (!DWOFileName) return false; auto CompilationDir = dwarf::toString(UnitDie.find(DW_AT_comp_dir)); SmallString<16> AbsolutePath; if (sys::path::is_relative(*DWOFileName) && CompilationDir && *CompilationDir) { sys::path::append(AbsolutePath, *CompilationDir); } sys::path::append(AbsolutePath, *DWOFileName); auto DWOId = getDWOId(); if (!DWOId) return false; auto DWOContext = Context.getDWOContext(AbsolutePath); if (!DWOContext) return false; DWARFCompileUnit *DWOCU = DWOContext->getDWOCompileUnitForHash(*DWOId); if (!DWOCU) return false; DWO = std::shared_ptr(std::move(DWOContext), DWOCU); // Share .debug_addr and .debug_ranges section with compile unit in .dwo DWO->setAddrOffsetSection(AddrOffsetSection, AddrOffsetSectionBase); if (getVersion() >= 5) { DWO->setRangesSection(&Context.getDWARFObj().getRnglistsDWOSection(), 0); DWARFDataExtractor RangesDA(Context.getDWARFObj(), *RangeSection, isLittleEndian, 0); if (auto TableOrError = parseRngListTableHeader(RangesDA, RangeSectionBase, Header.getFormat())) DWO->RngListTable = TableOrError.get(); else WithColor::error() << "parsing a range list table: " << toString(TableOrError.takeError()) << '\n'; if (DWO->RngListTable) DWO->RangeSectionBase = DWO->RngListTable->getHeaderSize(); } else { auto DWORangesBase = UnitDie.getRangesBaseAttribute(); DWO->setRangesSection(RangeSection, DWORangesBase ? *DWORangesBase : 0); } return true; } void DWARFUnit::clearDIEs(bool KeepCUDie) { if (DieArray.size() > (unsigned)KeepCUDie) { DieArray.resize((unsigned)KeepCUDie); DieArray.shrink_to_fit(); } } Expected DWARFUnit::findRnglistFromOffset(uint64_t Offset) { if (getVersion() <= 4) { DWARFDebugRangeList RangeList; if (Error E = extractRangeList(Offset, RangeList)) return std::move(E); return RangeList.getAbsoluteRanges(getBaseAddress()); } if (RngListTable) { DWARFDataExtractor RangesData(Context.getDWARFObj(), *RangeSection, isLittleEndian, RngListTable->getAddrSize()); auto RangeListOrError = RngListTable->findList(RangesData, Offset); if (RangeListOrError) return RangeListOrError.get().getAbsoluteRanges(getBaseAddress(), *this); return RangeListOrError.takeError(); } return createStringError(errc::invalid_argument, "missing or invalid range list table"); } Expected DWARFUnit::findRnglistFromIndex(uint32_t Index) { if (auto Offset = getRnglistOffset(Index)) return findRnglistFromOffset(*Offset + RangeSectionBase); if (RngListTable) return createStringError(errc::invalid_argument, "invalid range list table index %d", Index); return createStringError(errc::invalid_argument, "missing or invalid range list table"); } Expected DWARFUnit::collectAddressRanges() { DWARFDie UnitDie = getUnitDIE(); if (!UnitDie) return createStringError(errc::invalid_argument, "No unit DIE"); // First, check if unit DIE describes address ranges for the whole unit. auto CUDIERangesOrError = UnitDie.getAddressRanges(); if (!CUDIERangesOrError) return createStringError(errc::invalid_argument, "decoding address ranges: %s", toString(CUDIERangesOrError.takeError()).c_str()); return *CUDIERangesOrError; } void DWARFUnit::updateAddressDieMap(DWARFDie Die) { if (Die.isSubroutineDIE()) { auto DIERangesOrError = Die.getAddressRanges(); if (DIERangesOrError) { for (const auto &R : DIERangesOrError.get()) { // Ignore 0-sized ranges. if (R.LowPC == R.HighPC) continue; auto B = AddrDieMap.upper_bound(R.LowPC); if (B != AddrDieMap.begin() && R.LowPC < (--B)->second.first) { // The range is a sub-range of existing ranges, we need to split the // existing range. if (R.HighPC < B->second.first) AddrDieMap[R.HighPC] = B->second; if (R.LowPC > B->first) AddrDieMap[B->first].first = R.LowPC; } AddrDieMap[R.LowPC] = std::make_pair(R.HighPC, Die); } } else llvm::consumeError(DIERangesOrError.takeError()); } // Parent DIEs are added to the AddrDieMap prior to the Children DIEs to // simplify the logic to update AddrDieMap. The child's range will always // be equal or smaller than the parent's range. With this assumption, when // adding one range into the map, it will at most split a range into 3 // sub-ranges. for (DWARFDie Child = Die.getFirstChild(); Child; Child = Child.getSibling()) updateAddressDieMap(Child); } DWARFDie DWARFUnit::getSubroutineForAddress(uint64_t Address) { extractDIEsIfNeeded(false); if (AddrDieMap.empty()) updateAddressDieMap(getUnitDIE()); auto R = AddrDieMap.upper_bound(Address); if (R == AddrDieMap.begin()) return DWARFDie(); // upper_bound's previous item contains Address. --R; if (Address >= R->second.first) return DWARFDie(); return R->second.second; } void DWARFUnit::getInlinedChainForAddress(uint64_t Address, SmallVectorImpl &InlinedChain) { assert(InlinedChain.empty()); // Try to look for subprogram DIEs in the DWO file. parseDWO(); // First, find the subroutine that contains the given address (the leaf // of inlined chain). DWARFDie SubroutineDIE = (DWO ? *DWO : *this).getSubroutineForAddress(Address); if (!SubroutineDIE) return; while (!SubroutineDIE.isSubprogramDIE()) { if (SubroutineDIE.getTag() == DW_TAG_inlined_subroutine) InlinedChain.push_back(SubroutineDIE); SubroutineDIE = SubroutineDIE.getParent(); } InlinedChain.push_back(SubroutineDIE); } const DWARFUnitIndex &llvm::getDWARFUnitIndex(DWARFContext &Context, DWARFSectionKind Kind) { if (Kind == DW_SECT_INFO) return Context.getCUIndex(); assert(Kind == DW_SECT_TYPES); return Context.getTUIndex(); } DWARFDie DWARFUnit::getParent(const DWARFDebugInfoEntry *Die) { if (!Die) return DWARFDie(); const uint32_t Depth = Die->getDepth(); // Unit DIEs always have a depth of zero and never have parents. if (Depth == 0) return DWARFDie(); // Depth of 1 always means parent is the compile/type unit. if (Depth == 1) return getUnitDIE(); // Look for previous DIE with a depth that is one less than the Die's depth. const uint32_t ParentDepth = Depth - 1; for (uint32_t I = getDIEIndex(Die) - 1; I > 0; --I) { if (DieArray[I].getDepth() == ParentDepth) return DWARFDie(this, &DieArray[I]); } return DWARFDie(); } DWARFDie DWARFUnit::getSibling(const DWARFDebugInfoEntry *Die) { if (!Die) return DWARFDie(); uint32_t Depth = Die->getDepth(); // Unit DIEs always have a depth of zero and never have siblings. if (Depth == 0) return DWARFDie(); // NULL DIEs don't have siblings. if (Die->getAbbreviationDeclarationPtr() == nullptr) return DWARFDie(); // Find the next DIE whose depth is the same as the Die's depth. for (size_t I = getDIEIndex(Die) + 1, EndIdx = DieArray.size(); I < EndIdx; ++I) { if (DieArray[I].getDepth() == Depth) return DWARFDie(this, &DieArray[I]); } return DWARFDie(); } DWARFDie DWARFUnit::getPreviousSibling(const DWARFDebugInfoEntry *Die) { if (!Die) return DWARFDie(); uint32_t Depth = Die->getDepth(); // Unit DIEs always have a depth of zero and never have siblings. if (Depth == 0) return DWARFDie(); // Find the previous DIE whose depth is the same as the Die's depth. for (size_t I = getDIEIndex(Die); I > 0;) { --I; if (DieArray[I].getDepth() == Depth - 1) return DWARFDie(); if (DieArray[I].getDepth() == Depth) return DWARFDie(this, &DieArray[I]); } return DWARFDie(); } DWARFDie DWARFUnit::getFirstChild(const DWARFDebugInfoEntry *Die) { if (!Die->hasChildren()) return DWARFDie(); // We do not want access out of bounds when parsing corrupted debug data. size_t I = getDIEIndex(Die) + 1; if (I >= DieArray.size()) return DWARFDie(); return DWARFDie(this, &DieArray[I]); } DWARFDie DWARFUnit::getLastChild(const DWARFDebugInfoEntry *Die) { if (!Die->hasChildren()) return DWARFDie(); uint32_t Depth = Die->getDepth(); for (size_t I = getDIEIndex(Die) + 1, EndIdx = DieArray.size(); I < EndIdx; ++I) { if (DieArray[I].getDepth() == Depth + 1 && DieArray[I].getTag() == dwarf::DW_TAG_null) return DWARFDie(this, &DieArray[I]); assert(DieArray[I].getDepth() > Depth && "Not processing children?"); } return DWARFDie(); } const DWARFAbbreviationDeclarationSet *DWARFUnit::getAbbreviations() const { if (!Abbrevs) Abbrevs = Abbrev->getAbbreviationDeclarationSet(Header.getAbbrOffset()); return Abbrevs; } llvm::Optional DWARFUnit::getBaseAddress() { if (BaseAddr) return BaseAddr; DWARFDie UnitDie = getUnitDIE(); Optional PC = UnitDie.find({DW_AT_low_pc, DW_AT_entry_pc}); BaseAddr = toSectionedAddress(PC); return BaseAddr; } Expected StrOffsetsContributionDescriptor::validateContributionSize( DWARFDataExtractor &DA) { uint8_t EntrySize = getDwarfOffsetByteSize(); // In order to ensure that we don't read a partial record at the end of // the section we validate for a multiple of the entry size. uint64_t ValidationSize = alignTo(Size, EntrySize); // Guard against overflow. if (ValidationSize >= Size) if (DA.isValidOffsetForDataOfSize((uint32_t)Base, ValidationSize)) return *this; return createStringError(errc::invalid_argument, "length exceeds section size"); } // Look for a DWARF64-formatted contribution to the string offsets table // starting at a given offset and record it in a descriptor. static Expected parseDWARF64StringOffsetsTableHeader(DWARFDataExtractor &DA, uint64_t Offset) { if (!DA.isValidOffsetForDataOfSize(Offset, 16)) return createStringError(errc::invalid_argument, "section offset exceeds section size"); if (DA.getU32(&Offset) != dwarf::DW_LENGTH_DWARF64) return createStringError(errc::invalid_argument, "32 bit contribution referenced from a 64 bit unit"); uint64_t Size = DA.getU64(&Offset); uint8_t Version = DA.getU16(&Offset); (void)DA.getU16(&Offset); // padding // The encoded length includes the 2-byte version field and the 2-byte // padding, so we need to subtract them out when we populate the descriptor. return StrOffsetsContributionDescriptor(Offset, Size - 4, Version, DWARF64); } // Look for a DWARF32-formatted contribution to the string offsets table // starting at a given offset and record it in a descriptor. static Expected parseDWARF32StringOffsetsTableHeader(DWARFDataExtractor &DA, uint64_t Offset) { if (!DA.isValidOffsetForDataOfSize(Offset, 8)) return createStringError(errc::invalid_argument, "section offset exceeds section size"); uint32_t ContributionSize = DA.getU32(&Offset); if (ContributionSize >= dwarf::DW_LENGTH_lo_reserved) return createStringError(errc::invalid_argument, "invalid length"); uint8_t Version = DA.getU16(&Offset); (void)DA.getU16(&Offset); // padding // The encoded length includes the 2-byte version field and the 2-byte // padding, so we need to subtract them out when we populate the descriptor. return StrOffsetsContributionDescriptor(Offset, ContributionSize - 4, Version, DWARF32); } static Expected parseDWARFStringOffsetsTableHeader(DWARFDataExtractor &DA, llvm::dwarf::DwarfFormat Format, uint64_t Offset) { StrOffsetsContributionDescriptor Desc; switch (Format) { case dwarf::DwarfFormat::DWARF64: { if (Offset < 16) return createStringError(errc::invalid_argument, "insufficient space for 64 bit header prefix"); auto DescOrError = parseDWARF64StringOffsetsTableHeader(DA, Offset - 16); if (!DescOrError) return DescOrError.takeError(); Desc = *DescOrError; break; } case dwarf::DwarfFormat::DWARF32: { if (Offset < 8) return createStringError(errc::invalid_argument, "insufficient space for 32 bit header prefix"); auto DescOrError = parseDWARF32StringOffsetsTableHeader(DA, Offset - 8); if (!DescOrError) return DescOrError.takeError(); Desc = *DescOrError; break; } } return Desc.validateContributionSize(DA); } Expected> DWARFUnit::determineStringOffsetsTableContribution(DWARFDataExtractor &DA) { uint64_t Offset; if (IsDWO) { Offset = 0; if (DA.getData().data() == nullptr) return None; } else { auto OptOffset = toSectionOffset(getUnitDIE().find(DW_AT_str_offsets_base)); if (!OptOffset) return None; Offset = *OptOffset; } auto DescOrError = parseDWARFStringOffsetsTableHeader(DA, Header.getFormat(), Offset); if (!DescOrError) return DescOrError.takeError(); return *DescOrError; } Expected> DWARFUnit::determineStringOffsetsTableContributionDWO(DWARFDataExtractor & DA) { uint64_t Offset = 0; auto IndexEntry = Header.getIndexEntry(); const auto *C = IndexEntry ? IndexEntry->getOffset(DW_SECT_STR_OFFSETS) : nullptr; if (C) Offset = C->Offset; if (getVersion() >= 5) { if (DA.getData().data() == nullptr) return None; Offset += Header.getFormat() == dwarf::DwarfFormat::DWARF32 ? 8 : 16; // Look for a valid contribution at the given offset. auto DescOrError = parseDWARFStringOffsetsTableHeader(DA, Header.getFormat(), Offset); if (!DescOrError) return DescOrError.takeError(); return *DescOrError; } // Prior to DWARF v5, we derive the contribution size from the // index table (in a package file). In a .dwo file it is simply // the length of the string offsets section. if (!IndexEntry) return { Optional( {0, StringOffsetSection.Data.size(), 4, DWARF32})}; if (C) return {Optional( {C->Offset, C->Length, 4, DWARF32})}; return None; } binaryen-version_108/third_party/llvm-project/DWARFUnitIndex.cpp000066400000000000000000000137771423707623100251320ustar00rootroot00000000000000//===- DWARFUnitIndex.cpp -------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include #include using namespace llvm; bool DWARFUnitIndex::Header::parse(DataExtractor IndexData, uint64_t *OffsetPtr) { if (!IndexData.isValidOffsetForDataOfSize(*OffsetPtr, 16)) return false; Version = IndexData.getU32(OffsetPtr); NumColumns = IndexData.getU32(OffsetPtr); NumUnits = IndexData.getU32(OffsetPtr); NumBuckets = IndexData.getU32(OffsetPtr); return Version <= 2; } void DWARFUnitIndex::Header::dump(raw_ostream &OS) const { OS << format("version = %u slots = %u\n\n", Version, NumBuckets); } bool DWARFUnitIndex::parse(DataExtractor IndexData) { bool b = parseImpl(IndexData); if (!b) { // Make sure we don't try to dump anything Header.NumBuckets = 0; // Release any partially initialized data. ColumnKinds.reset(); Rows.reset(); } return b; } bool DWARFUnitIndex::parseImpl(DataExtractor IndexData) { uint64_t Offset = 0; if (!Header.parse(IndexData, &Offset)) return false; if (!IndexData.isValidOffsetForDataOfSize( Offset, Header.NumBuckets * (8 + 4) + (2 * Header.NumUnits + 1) * 4 * Header.NumColumns)) return false; Rows = std::make_unique(Header.NumBuckets); auto Contribs = std::make_unique(Header.NumUnits); ColumnKinds = std::make_unique(Header.NumColumns); // Read Hash Table of Signatures for (unsigned i = 0; i != Header.NumBuckets; ++i) Rows[i].Signature = IndexData.getU64(&Offset); // Read Parallel Table of Indexes for (unsigned i = 0; i != Header.NumBuckets; ++i) { auto Index = IndexData.getU32(&Offset); if (!Index) continue; Rows[i].Index = this; Rows[i].Contributions = std::make_unique(Header.NumColumns); Contribs[Index - 1] = Rows[i].Contributions.get(); } // Read the Column Headers for (unsigned i = 0; i != Header.NumColumns; ++i) { ColumnKinds[i] = static_cast(IndexData.getU32(&Offset)); if (ColumnKinds[i] == InfoColumnKind) { if (InfoColumn != -1) return false; InfoColumn = i; } } if (InfoColumn == -1) return false; // Read Table of Section Offsets for (unsigned i = 0; i != Header.NumUnits; ++i) { auto *Contrib = Contribs[i]; for (unsigned i = 0; i != Header.NumColumns; ++i) Contrib[i].Offset = IndexData.getU32(&Offset); } // Read Table of Section Sizes for (unsigned i = 0; i != Header.NumUnits; ++i) { auto *Contrib = Contribs[i]; for (unsigned i = 0; i != Header.NumColumns; ++i) Contrib[i].Length = IndexData.getU32(&Offset); } return true; } StringRef DWARFUnitIndex::getColumnHeader(DWARFSectionKind DS) { #define CASE(DS) \ case DW_SECT_##DS: \ return #DS; switch (DS) { CASE(INFO); CASE(TYPES); CASE(ABBREV); CASE(LINE); CASE(LOC); CASE(STR_OFFSETS); CASE(MACINFO); CASE(MACRO); } llvm_unreachable("unknown DWARFSectionKind"); } void DWARFUnitIndex::dump(raw_ostream &OS) const { if (!*this) return; Header.dump(OS); OS << "Index Signature "; for (unsigned i = 0; i != Header.NumColumns; ++i) OS << ' ' << left_justify(getColumnHeader(ColumnKinds[i]), 24); OS << "\n----- ------------------"; for (unsigned i = 0; i != Header.NumColumns; ++i) OS << " ------------------------"; OS << '\n'; for (unsigned i = 0; i != Header.NumBuckets; ++i) { auto &Row = Rows[i]; if (auto *Contribs = Row.Contributions.get()) { OS << format("%5u 0x%016" PRIx64 " ", i + 1, Row.Signature); for (unsigned i = 0; i != Header.NumColumns; ++i) { auto &Contrib = Contribs[i]; OS << format("[0x%08x, 0x%08x) ", Contrib.Offset, Contrib.Offset + Contrib.Length); } OS << '\n'; } } } const DWARFUnitIndex::Entry::SectionContribution * DWARFUnitIndex::Entry::getOffset(DWARFSectionKind Sec) const { uint32_t i = 0; for (; i != Index->Header.NumColumns; ++i) if (Index->ColumnKinds[i] == Sec) return &Contributions[i]; return nullptr; } const DWARFUnitIndex::Entry::SectionContribution * DWARFUnitIndex::Entry::getOffset() const { return &Contributions[Index->InfoColumn]; } const DWARFUnitIndex::Entry * DWARFUnitIndex::getFromOffset(uint32_t Offset) const { if (OffsetLookup.empty()) { for (uint32_t i = 0; i != Header.NumBuckets; ++i) if (Rows[i].Contributions) OffsetLookup.push_back(&Rows[i]); llvm::sort(OffsetLookup, [&](Entry *E1, Entry *E2) { return E1->Contributions[InfoColumn].Offset < E2->Contributions[InfoColumn].Offset; }); } auto I = partition_point(OffsetLookup, [&](Entry *E2) { return E2->Contributions[InfoColumn].Offset <= Offset; }); if (I == OffsetLookup.begin()) return nullptr; --I; const auto *E = *I; const auto &InfoContrib = E->Contributions[InfoColumn]; if ((InfoContrib.Offset + InfoContrib.Length) <= Offset) return nullptr; return E; } const DWARFUnitIndex::Entry *DWARFUnitIndex::getFromHash(uint64_t S) const { uint64_t Mask = Header.NumBuckets - 1; auto H = S & Mask; auto HP = ((S >> 32) & Mask) | 1; while (Rows[H].getSignature() != S && Rows[H].getSignature() != 0) H = (H + HP) & Mask; if (Rows[H].getSignature() != S) return nullptr; return &Rows[H]; } binaryen-version_108/third_party/llvm-project/DWARFVerifier.cpp000066400000000000000000001527301423707623100247670ustar00rootroot00000000000000//===- DWARFVerifier.cpp --------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/DWARF/DWARFVerifier.h" #include "llvm/ADT/SmallSet.h" #include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFDebugLine.h" #include "llvm/DebugInfo/DWARF/DWARFDie.h" #include "llvm/DebugInfo/DWARF/DWARFExpression.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFSection.h" #include "llvm/Support/DJB.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include #include #include using namespace llvm; using namespace dwarf; using namespace object; DWARFVerifier::DieRangeInfo::address_range_iterator DWARFVerifier::DieRangeInfo::insert(const DWARFAddressRange &R) { auto Begin = Ranges.begin(); auto End = Ranges.end(); auto Pos = std::lower_bound(Begin, End, R); if (Pos != End) { if (Pos->intersects(R)) return std::move(Pos); if (Pos != Begin) { auto Iter = Pos - 1; if (Iter->intersects(R)) return std::move(Iter); } } Ranges.insert(Pos, R); return Ranges.end(); } DWARFVerifier::DieRangeInfo::die_range_info_iterator DWARFVerifier::DieRangeInfo::insert(const DieRangeInfo &RI) { auto End = Children.end(); auto Iter = Children.begin(); while (Iter != End) { if (Iter->intersects(RI)) return Iter; ++Iter; } Children.insert(RI); return Children.end(); } bool DWARFVerifier::DieRangeInfo::contains(const DieRangeInfo &RHS) const { auto I1 = Ranges.begin(), E1 = Ranges.end(); auto I2 = RHS.Ranges.begin(), E2 = RHS.Ranges.end(); if (I2 == E2) return true; DWARFAddressRange R = *I2; while (I1 != E1) { bool Covered = I1->LowPC <= R.LowPC; if (R.LowPC == R.HighPC || (Covered && R.HighPC <= I1->HighPC)) { if (++I2 == E2) return true; R = *I2; continue; } if (!Covered) return false; if (R.LowPC < I1->HighPC) R.LowPC = I1->HighPC; ++I1; } return false; } bool DWARFVerifier::DieRangeInfo::intersects(const DieRangeInfo &RHS) const { auto I1 = Ranges.begin(), E1 = Ranges.end(); auto I2 = RHS.Ranges.begin(), E2 = RHS.Ranges.end(); while (I1 != E1 && I2 != E2) { if (I1->intersects(*I2)) return true; if (I1->LowPC < I2->LowPC) ++I1; else ++I2; } return false; } bool DWARFVerifier::verifyUnitHeader(const DWARFDataExtractor DebugInfoData, uint64_t *Offset, unsigned UnitIndex, uint8_t &UnitType, bool &isUnitDWARF64) { uint64_t AbbrOffset, Length; uint8_t AddrSize = 0; uint16_t Version; bool Success = true; bool ValidLength = false; bool ValidVersion = false; bool ValidAddrSize = false; bool ValidType = true; bool ValidAbbrevOffset = true; uint64_t OffsetStart = *Offset; Length = DebugInfoData.getU32(Offset); if (Length == dwarf::DW_LENGTH_DWARF64) { Length = DebugInfoData.getU64(Offset); isUnitDWARF64 = true; } Version = DebugInfoData.getU16(Offset); if (Version >= 5) { UnitType = DebugInfoData.getU8(Offset); AddrSize = DebugInfoData.getU8(Offset); AbbrOffset = isUnitDWARF64 ? DebugInfoData.getU64(Offset) : DebugInfoData.getU32(Offset); ValidType = dwarf::isUnitType(UnitType); } else { UnitType = 0; AbbrOffset = isUnitDWARF64 ? DebugInfoData.getU64(Offset) : DebugInfoData.getU32(Offset); AddrSize = DebugInfoData.getU8(Offset); } if (!DCtx.getDebugAbbrev()->getAbbreviationDeclarationSet(AbbrOffset)) ValidAbbrevOffset = false; ValidLength = DebugInfoData.isValidOffset(OffsetStart + Length + 3); ValidVersion = DWARFContext::isSupportedVersion(Version); ValidAddrSize = AddrSize == 4 || AddrSize == 8; if (!ValidLength || !ValidVersion || !ValidAddrSize || !ValidAbbrevOffset || !ValidType) { Success = false; error() << format("Units[%d] - start offset: 0x%08" PRIx64 " \n", UnitIndex, OffsetStart); if (!ValidLength) note() << "The length for this unit is too " "large for the .debug_info provided.\n"; if (!ValidVersion) note() << "The 16 bit unit header version is not valid.\n"; if (!ValidType) note() << "The unit type encoding is not valid.\n"; if (!ValidAbbrevOffset) note() << "The offset into the .debug_abbrev section is " "not valid.\n"; if (!ValidAddrSize) note() << "The address size is unsupported.\n"; } *Offset = OffsetStart + Length + (isUnitDWARF64 ? 12 : 4); return Success; } unsigned DWARFVerifier::verifyUnitContents(DWARFUnit &Unit) { unsigned NumUnitErrors = 0; unsigned NumDies = Unit.getNumDIEs(); for (unsigned I = 0; I < NumDies; ++I) { auto Die = Unit.getDIEAtIndex(I); if (Die.getTag() == DW_TAG_null) continue; for (auto AttrValue : Die.attributes()) { NumUnitErrors += verifyDebugInfoAttribute(Die, AttrValue); NumUnitErrors += verifyDebugInfoForm(Die, AttrValue); } NumUnitErrors += verifyDebugInfoCallSite(Die); } DWARFDie Die = Unit.getUnitDIE(/* ExtractUnitDIEOnly = */ false); if (!Die) { error() << "Compilation unit without DIE.\n"; NumUnitErrors++; return NumUnitErrors; } if (!dwarf::isUnitType(Die.getTag())) { error() << "Compilation unit root DIE is not a unit DIE: " << dwarf::TagString(Die.getTag()) << ".\n"; NumUnitErrors++; } uint8_t UnitType = Unit.getUnitType(); if (!DWARFUnit::isMatchingUnitTypeAndTag(UnitType, Die.getTag())) { error() << "Compilation unit type (" << dwarf::UnitTypeString(UnitType) << ") and root DIE (" << dwarf::TagString(Die.getTag()) << ") do not match.\n"; NumUnitErrors++; } DieRangeInfo RI; NumUnitErrors += verifyDieRanges(Die, RI); return NumUnitErrors; } unsigned DWARFVerifier::verifyDebugInfoCallSite(const DWARFDie &Die) { if (Die.getTag() != DW_TAG_call_site && Die.getTag() != DW_TAG_GNU_call_site) return 0; DWARFDie Curr = Die.getParent(); for (; Curr.isValid() && !Curr.isSubprogramDIE(); Curr = Die.getParent()) { if (Curr.getTag() == DW_TAG_inlined_subroutine) { error() << "Call site entry nested within inlined subroutine:"; Curr.dump(OS); return 1; } } if (!Curr.isValid()) { error() << "Call site entry not nested within a valid subprogram:"; Die.dump(OS); return 1; } Optional CallAttr = Curr.find({DW_AT_call_all_calls, DW_AT_call_all_source_calls, DW_AT_call_all_tail_calls, DW_AT_GNU_all_call_sites, DW_AT_GNU_all_source_call_sites, DW_AT_GNU_all_tail_call_sites}); if (!CallAttr) { error() << "Subprogram with call site entry has no DW_AT_call attribute:"; Curr.dump(OS); Die.dump(OS, /*indent*/ 1); return 1; } return 0; } unsigned DWARFVerifier::verifyAbbrevSection(const DWARFDebugAbbrev *Abbrev) { unsigned NumErrors = 0; if (Abbrev) { const DWARFAbbreviationDeclarationSet *AbbrDecls = Abbrev->getAbbreviationDeclarationSet(0); for (auto AbbrDecl : *AbbrDecls) { SmallDenseSet AttributeSet; for (auto Attribute : AbbrDecl.attributes()) { auto Result = AttributeSet.insert(Attribute.Attr); if (!Result.second) { error() << "Abbreviation declaration contains multiple " << AttributeString(Attribute.Attr) << " attributes.\n"; AbbrDecl.dump(OS); ++NumErrors; } } } } return NumErrors; } bool DWARFVerifier::handleDebugAbbrev() { OS << "Verifying .debug_abbrev...\n"; const DWARFObject &DObj = DCtx.getDWARFObj(); unsigned NumErrors = 0; if (!DObj.getAbbrevSection().empty()) NumErrors += verifyAbbrevSection(DCtx.getDebugAbbrev()); if (!DObj.getAbbrevDWOSection().empty()) NumErrors += verifyAbbrevSection(DCtx.getDebugAbbrevDWO()); return NumErrors == 0; } unsigned DWARFVerifier::verifyUnitSection(const DWARFSection &S, DWARFSectionKind SectionKind) { const DWARFObject &DObj = DCtx.getDWARFObj(); DWARFDataExtractor DebugInfoData(DObj, S, DCtx.isLittleEndian(), 0); unsigned NumDebugInfoErrors = 0; uint64_t OffsetStart = 0, Offset = 0, UnitIdx = 0; uint8_t UnitType = 0; bool isUnitDWARF64 = false; bool isHeaderChainValid = true; bool hasDIE = DebugInfoData.isValidOffset(Offset); DWARFUnitVector TypeUnitVector; DWARFUnitVector CompileUnitVector; while (hasDIE) { OffsetStart = Offset; if (!verifyUnitHeader(DebugInfoData, &Offset, UnitIdx, UnitType, isUnitDWARF64)) { isHeaderChainValid = false; if (isUnitDWARF64) break; } else { DWARFUnitHeader Header; Header.extract(DCtx, DebugInfoData, &OffsetStart, SectionKind); DWARFUnit *Unit; switch (UnitType) { case dwarf::DW_UT_type: case dwarf::DW_UT_split_type: { Unit = TypeUnitVector.addUnit(std::make_unique( DCtx, S, Header, DCtx.getDebugAbbrev(), &DObj.getRangesSection(), &DObj.getLocSection(), DObj.getStrSection(), DObj.getStrOffsetsSection(), &DObj.getAppleObjCSection(), DObj.getLineSection(), DCtx.isLittleEndian(), false, TypeUnitVector)); break; } case dwarf::DW_UT_skeleton: case dwarf::DW_UT_split_compile: case dwarf::DW_UT_compile: case dwarf::DW_UT_partial: // UnitType = 0 means that we are verifying a compile unit in DWARF v4. case 0: { Unit = CompileUnitVector.addUnit(std::make_unique( DCtx, S, Header, DCtx.getDebugAbbrev(), &DObj.getRangesSection(), &DObj.getLocSection(), DObj.getStrSection(), DObj.getStrOffsetsSection(), &DObj.getAppleObjCSection(), DObj.getLineSection(), DCtx.isLittleEndian(), false, CompileUnitVector)); break; } default: { llvm_unreachable("Invalid UnitType."); } } NumDebugInfoErrors += verifyUnitContents(*Unit); } hasDIE = DebugInfoData.isValidOffset(Offset); ++UnitIdx; } if (UnitIdx == 0 && !hasDIE) { warn() << "Section is empty.\n"; isHeaderChainValid = true; } if (!isHeaderChainValid) ++NumDebugInfoErrors; NumDebugInfoErrors += verifyDebugInfoReferences(); return NumDebugInfoErrors; } bool DWARFVerifier::handleDebugInfo() { const DWARFObject &DObj = DCtx.getDWARFObj(); unsigned NumErrors = 0; OS << "Verifying .debug_info Unit Header Chain...\n"; DObj.forEachInfoSections([&](const DWARFSection &S) { NumErrors += verifyUnitSection(S, DW_SECT_INFO); }); OS << "Verifying .debug_types Unit Header Chain...\n"; DObj.forEachTypesSections([&](const DWARFSection &S) { NumErrors += verifyUnitSection(S, DW_SECT_TYPES); }); return NumErrors == 0; } unsigned DWARFVerifier::verifyDieRanges(const DWARFDie &Die, DieRangeInfo &ParentRI) { unsigned NumErrors = 0; if (!Die.isValid()) return NumErrors; auto RangesOrError = Die.getAddressRanges(); if (!RangesOrError) { // FIXME: Report the error. ++NumErrors; llvm::consumeError(RangesOrError.takeError()); return NumErrors; } DWARFAddressRangesVector Ranges = RangesOrError.get(); // Build RI for this DIE and check that ranges within this DIE do not // overlap. DieRangeInfo RI(Die); // TODO support object files better // // Some object file formats (i.e. non-MachO) support COMDAT. ELF in // particular does so by placing each function into a section. The DWARF data // for the function at that point uses a section relative DW_FORM_addrp for // the DW_AT_low_pc and a DW_FORM_data4 for the offset as the DW_AT_high_pc. // In such a case, when the Die is the CU, the ranges will overlap, and we // will flag valid conflicting ranges as invalid. // // For such targets, we should read the ranges from the CU and partition them // by the section id. The ranges within a particular section should be // disjoint, although the ranges across sections may overlap. We would map // the child die to the entity that it references and the section with which // it is associated. The child would then be checked against the range // information for the associated section. // // For now, simply elide the range verification for the CU DIEs if we are // processing an object file. if (!IsObjectFile || IsMachOObject || Die.getTag() != DW_TAG_compile_unit) { for (auto Range : Ranges) { if (!Range.valid()) { ++NumErrors; error() << "Invalid address range " << Range << "\n"; continue; } // Verify that ranges don't intersect. const auto IntersectingRange = RI.insert(Range); if (IntersectingRange != RI.Ranges.end()) { ++NumErrors; error() << "DIE has overlapping address ranges: " << Range << " and " << *IntersectingRange << "\n"; break; } } } // Verify that children don't intersect. const auto IntersectingChild = ParentRI.insert(RI); if (IntersectingChild != ParentRI.Children.end()) { ++NumErrors; error() << "DIEs have overlapping address ranges:"; dump(Die); dump(IntersectingChild->Die) << '\n'; } // Verify that ranges are contained within their parent. bool ShouldBeContained = !Ranges.empty() && !ParentRI.Ranges.empty() && !(Die.getTag() == DW_TAG_subprogram && ParentRI.Die.getTag() == DW_TAG_subprogram); if (ShouldBeContained && !ParentRI.contains(RI)) { ++NumErrors; error() << "DIE address ranges are not contained in its parent's ranges:"; dump(ParentRI.Die); dump(Die, 2) << '\n'; } // Recursively check children. for (DWARFDie Child : Die) NumErrors += verifyDieRanges(Child, RI); return NumErrors; } unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die, DWARFAttribute &AttrValue) { unsigned NumErrors = 0; auto ReportError = [&](const Twine &TitleMsg) { ++NumErrors; error() << TitleMsg << '\n'; dump(Die) << '\n'; }; const DWARFObject &DObj = DCtx.getDWARFObj(); const auto Attr = AttrValue.Attr; switch (Attr) { case DW_AT_ranges: // Make sure the offset in the DW_AT_ranges attribute is valid. if (auto SectionOffset = AttrValue.Value.getAsSectionOffset()) { if (*SectionOffset >= DObj.getRangesSection().Data.size()) ReportError("DW_AT_ranges offset is beyond .debug_ranges bounds:"); break; } ReportError("DIE has invalid DW_AT_ranges encoding:"); break; case DW_AT_stmt_list: // Make sure the offset in the DW_AT_stmt_list attribute is valid. if (auto SectionOffset = AttrValue.Value.getAsSectionOffset()) { if (*SectionOffset >= DObj.getLineSection().Data.size()) ReportError("DW_AT_stmt_list offset is beyond .debug_line bounds: " + llvm::formatv("{0:x8}", *SectionOffset)); break; } ReportError("DIE has invalid DW_AT_stmt_list encoding:"); break; case DW_AT_location: { auto VerifyLocationExpr = [&](ArrayRef D) { DWARFUnit *U = Die.getDwarfUnit(); DataExtractor Data(toStringRef(D), DCtx.isLittleEndian(), 0); DWARFExpression Expression(Data, U->getVersion(), U->getAddressByteSize()); bool Error = llvm::any_of(Expression, [](DWARFExpression::Operation &Op) { return Op.isError(); }); if (Error || !Expression.verify(U)) ReportError("DIE contains invalid DWARF expression:"); }; if (Optional> Expr = AttrValue.Value.getAsBlock()) { // Verify inlined location. VerifyLocationExpr(*Expr); } else if (auto LocOffset = AttrValue.Value.getAsSectionOffset()) { // Verify location list. if (auto DebugLoc = DCtx.getDebugLoc()) if (auto LocList = DebugLoc->getLocationListAtOffset(*LocOffset)) for (const auto &Entry : LocList->Entries) VerifyLocationExpr(Entry.Loc); } break; } case DW_AT_specification: case DW_AT_abstract_origin: { if (auto ReferencedDie = Die.getAttributeValueAsReferencedDie(Attr)) { auto DieTag = Die.getTag(); auto RefTag = ReferencedDie.getTag(); if (DieTag == RefTag) break; if (DieTag == DW_TAG_inlined_subroutine && RefTag == DW_TAG_subprogram) break; if (DieTag == DW_TAG_variable && RefTag == DW_TAG_member) break; // This might be reference to a function declaration. if (DieTag == DW_TAG_GNU_call_site && RefTag == DW_TAG_subprogram) break; ReportError("DIE with tag " + TagString(DieTag) + " has " + AttributeString(Attr) + " that points to DIE with " "incompatible tag " + TagString(RefTag)); } break; } case DW_AT_type: { DWARFDie TypeDie = Die.getAttributeValueAsReferencedDie(DW_AT_type); if (TypeDie && !isType(TypeDie.getTag())) { ReportError("DIE has " + AttributeString(Attr) + " with incompatible tag " + TagString(TypeDie.getTag())); } break; } default: break; } return NumErrors; } unsigned DWARFVerifier::verifyDebugInfoForm(const DWARFDie &Die, DWARFAttribute &AttrValue) { const DWARFObject &DObj = DCtx.getDWARFObj(); auto DieCU = Die.getDwarfUnit(); unsigned NumErrors = 0; const auto Form = AttrValue.Value.getForm(); switch (Form) { case DW_FORM_ref1: case DW_FORM_ref2: case DW_FORM_ref4: case DW_FORM_ref8: case DW_FORM_ref_udata: { // Verify all CU relative references are valid CU offsets. Optional RefVal = AttrValue.Value.getAsReference(); assert(RefVal); if (RefVal) { auto CUSize = DieCU->getNextUnitOffset() - DieCU->getOffset(); auto CUOffset = AttrValue.Value.getRawUValue(); if (CUOffset >= CUSize) { ++NumErrors; error() << FormEncodingString(Form) << " CU offset " << format("0x%08" PRIx64, CUOffset) << " is invalid (must be less than CU size of " << format("0x%08" PRIx64, CUSize) << "):\n"; Die.dump(OS, 0, DumpOpts); dump(Die) << '\n'; } else { // Valid reference, but we will verify it points to an actual // DIE later. ReferenceToDIEOffsets[*RefVal].insert(Die.getOffset()); } } break; } case DW_FORM_ref_addr: { // Verify all absolute DIE references have valid offsets in the // .debug_info section. Optional RefVal = AttrValue.Value.getAsReference(); assert(RefVal); if (RefVal) { if (*RefVal >= DieCU->getInfoSection().Data.size()) { ++NumErrors; error() << "DW_FORM_ref_addr offset beyond .debug_info " "bounds:\n"; dump(Die) << '\n'; } else { // Valid reference, but we will verify it points to an actual // DIE later. ReferenceToDIEOffsets[*RefVal].insert(Die.getOffset()); } } break; } case DW_FORM_strp: { auto SecOffset = AttrValue.Value.getAsSectionOffset(); assert(SecOffset); // DW_FORM_strp is a section offset. if (SecOffset && *SecOffset >= DObj.getStrSection().size()) { ++NumErrors; error() << "DW_FORM_strp offset beyond .debug_str bounds:\n"; dump(Die) << '\n'; } break; } case DW_FORM_strx: case DW_FORM_strx1: case DW_FORM_strx2: case DW_FORM_strx3: case DW_FORM_strx4: { auto Index = AttrValue.Value.getRawUValue(); auto DieCU = Die.getDwarfUnit(); // Check that we have a valid DWARF v5 string offsets table. if (!DieCU->getStringOffsetsTableContribution()) { ++NumErrors; error() << FormEncodingString(Form) << " used without a valid string offsets table:\n"; dump(Die) << '\n'; break; } // Check that the index is within the bounds of the section. unsigned ItemSize = DieCU->getDwarfStringOffsetsByteSize(); // Use a 64-bit type to calculate the offset to guard against overflow. uint64_t Offset = (uint64_t)DieCU->getStringOffsetsBase() + Index * ItemSize; if (DObj.getStrOffsetsSection().Data.size() < Offset + ItemSize) { ++NumErrors; error() << FormEncodingString(Form) << " uses index " << format("%" PRIu64, Index) << ", which is too large:\n"; dump(Die) << '\n'; break; } // Check that the string offset is valid. uint64_t StringOffset = *DieCU->getStringOffsetSectionItem(Index); if (StringOffset >= DObj.getStrSection().size()) { ++NumErrors; error() << FormEncodingString(Form) << " uses index " << format("%" PRIu64, Index) << ", but the referenced string" " offset is beyond .debug_str bounds:\n"; dump(Die) << '\n'; } break; } default: break; } return NumErrors; } unsigned DWARFVerifier::verifyDebugInfoReferences() { // Take all references and make sure they point to an actual DIE by // getting the DIE by offset and emitting an error OS << "Verifying .debug_info references...\n"; unsigned NumErrors = 0; for (const std::pair> &Pair : ReferenceToDIEOffsets) { if (DCtx.getDIEForOffset(Pair.first)) continue; ++NumErrors; error() << "invalid DIE reference " << format("0x%08" PRIx64, Pair.first) << ". Offset is in between DIEs:\n"; for (auto Offset : Pair.second) dump(DCtx.getDIEForOffset(Offset)) << '\n'; OS << "\n"; } return NumErrors; } void DWARFVerifier::verifyDebugLineStmtOffsets() { std::map StmtListToDie; for (const auto &CU : DCtx.compile_units()) { auto Die = CU->getUnitDIE(); // Get the attribute value as a section offset. No need to produce an // error here if the encoding isn't correct because we validate this in // the .debug_info verifier. auto StmtSectionOffset = toSectionOffset(Die.find(DW_AT_stmt_list)); if (!StmtSectionOffset) continue; const uint64_t LineTableOffset = *StmtSectionOffset; auto LineTable = DCtx.getLineTableForUnit(CU.get()); if (LineTableOffset < DCtx.getDWARFObj().getLineSection().Data.size()) { if (!LineTable) { ++NumDebugLineErrors; error() << ".debug_line[" << format("0x%08" PRIx64, LineTableOffset) << "] was not able to be parsed for CU:\n"; dump(Die) << '\n'; continue; } } else { // Make sure we don't get a valid line table back if the offset is wrong. assert(LineTable == nullptr); // Skip this line table as it isn't valid. No need to create an error // here because we validate this in the .debug_info verifier. continue; } auto Iter = StmtListToDie.find(LineTableOffset); if (Iter != StmtListToDie.end()) { ++NumDebugLineErrors; error() << "two compile unit DIEs, " << format("0x%08" PRIx64, Iter->second.getOffset()) << " and " << format("0x%08" PRIx64, Die.getOffset()) << ", have the same DW_AT_stmt_list section offset:\n"; dump(Iter->second); dump(Die) << '\n'; // Already verified this line table before, no need to do it again. continue; } StmtListToDie[LineTableOffset] = Die; } } void DWARFVerifier::verifyDebugLineRows() { for (const auto &CU : DCtx.compile_units()) { auto Die = CU->getUnitDIE(); auto LineTable = DCtx.getLineTableForUnit(CU.get()); // If there is no line table we will have created an error in the // .debug_info verifier or in verifyDebugLineStmtOffsets(). if (!LineTable) continue; // Verify prologue. uint32_t MaxDirIndex = LineTable->Prologue.IncludeDirectories.size(); uint32_t FileIndex = 1; StringMap FullPathMap; for (const auto &FileName : LineTable->Prologue.FileNames) { // Verify directory index. if (FileName.DirIdx > MaxDirIndex) { ++NumDebugLineErrors; error() << ".debug_line[" << format("0x%08" PRIx64, *toSectionOffset(Die.find(DW_AT_stmt_list))) << "].prologue.file_names[" << FileIndex << "].dir_idx contains an invalid index: " << FileName.DirIdx << "\n"; } // Check file paths for duplicates. std::string FullPath; const bool HasFullPath = LineTable->getFileNameByIndex( FileIndex, CU->getCompilationDir(), DILineInfoSpecifier::FileLineInfoKind::AbsoluteFilePath, FullPath); assert(HasFullPath && "Invalid index?"); (void)HasFullPath; auto It = FullPathMap.find(FullPath); if (It == FullPathMap.end()) FullPathMap[FullPath] = FileIndex; else if (It->second != FileIndex) { warn() << ".debug_line[" << format("0x%08" PRIx64, *toSectionOffset(Die.find(DW_AT_stmt_list))) << "].prologue.file_names[" << FileIndex << "] is a duplicate of file_names[" << It->second << "]\n"; } FileIndex++; } // Verify rows. uint64_t PrevAddress = 0; uint32_t RowIndex = 0; for (const auto &Row : LineTable->Rows) { // Verify row address. if (Row.Address.Address < PrevAddress) { ++NumDebugLineErrors; error() << ".debug_line[" << format("0x%08" PRIx64, *toSectionOffset(Die.find(DW_AT_stmt_list))) << "] row[" << RowIndex << "] decreases in address from previous row:\n"; DWARFDebugLine::Row::dumpTableHeader(OS); if (RowIndex > 0) LineTable->Rows[RowIndex - 1].dump(OS); Row.dump(OS); OS << '\n'; } // Verify file index. if (!LineTable->hasFileAtIndex(Row.File)) { ++NumDebugLineErrors; bool isDWARF5 = LineTable->Prologue.getVersion() >= 5; error() << ".debug_line[" << format("0x%08" PRIx64, *toSectionOffset(Die.find(DW_AT_stmt_list))) << "][" << RowIndex << "] has invalid file index " << Row.File << " (valid values are [" << (isDWARF5 ? "0," : "1,") << LineTable->Prologue.FileNames.size() << (isDWARF5 ? ")" : "]") << "):\n"; DWARFDebugLine::Row::dumpTableHeader(OS); Row.dump(OS); OS << '\n'; } if (Row.EndSequence) PrevAddress = 0; else PrevAddress = Row.Address.Address; ++RowIndex; } } } DWARFVerifier::DWARFVerifier(raw_ostream &S, DWARFContext &D, DIDumpOptions DumpOpts) : OS(S), DCtx(D), DumpOpts(std::move(DumpOpts)), IsObjectFile(false), IsMachOObject(false) { if (const auto *F = DCtx.getDWARFObj().getFile()) { IsObjectFile = F->isRelocatableObject(); IsMachOObject = F->isMachO(); } } bool DWARFVerifier::handleDebugLine() { NumDebugLineErrors = 0; OS << "Verifying .debug_line...\n"; verifyDebugLineStmtOffsets(); verifyDebugLineRows(); return NumDebugLineErrors == 0; } unsigned DWARFVerifier::verifyAppleAccelTable(const DWARFSection *AccelSection, DataExtractor *StrData, const char *SectionName) { unsigned NumErrors = 0; DWARFDataExtractor AccelSectionData(DCtx.getDWARFObj(), *AccelSection, DCtx.isLittleEndian(), 0); AppleAcceleratorTable AccelTable(AccelSectionData, *StrData); OS << "Verifying " << SectionName << "...\n"; // Verify that the fixed part of the header is not too short. if (!AccelSectionData.isValidOffset(AccelTable.getSizeHdr())) { error() << "Section is too small to fit a section header.\n"; return 1; } // Verify that the section is not too short. if (Error E = AccelTable.extract()) { error() << toString(std::move(E)) << '\n'; return 1; } // Verify that all buckets have a valid hash index or are empty. uint32_t NumBuckets = AccelTable.getNumBuckets(); uint32_t NumHashes = AccelTable.getNumHashes(); uint64_t BucketsOffset = AccelTable.getSizeHdr() + AccelTable.getHeaderDataLength(); uint64_t HashesBase = BucketsOffset + NumBuckets * 4; uint64_t OffsetsBase = HashesBase + NumHashes * 4; for (uint32_t BucketIdx = 0; BucketIdx < NumBuckets; ++BucketIdx) { uint32_t HashIdx = AccelSectionData.getU32(&BucketsOffset); if (HashIdx >= NumHashes && HashIdx != UINT32_MAX) { error() << format("Bucket[%d] has invalid hash index: %u.\n", BucketIdx, HashIdx); ++NumErrors; } } uint32_t NumAtoms = AccelTable.getAtomsDesc().size(); if (NumAtoms == 0) { error() << "No atoms: failed to read HashData.\n"; return 1; } if (!AccelTable.validateForms()) { error() << "Unsupported form: failed to read HashData.\n"; return 1; } for (uint32_t HashIdx = 0; HashIdx < NumHashes; ++HashIdx) { uint64_t HashOffset = HashesBase + 4 * HashIdx; uint64_t DataOffset = OffsetsBase + 4 * HashIdx; uint32_t Hash = AccelSectionData.getU32(&HashOffset); uint64_t HashDataOffset = AccelSectionData.getU32(&DataOffset); if (!AccelSectionData.isValidOffsetForDataOfSize(HashDataOffset, sizeof(uint64_t))) { error() << format("Hash[%d] has invalid HashData offset: " "0x%08" PRIx64 ".\n", HashIdx, HashDataOffset); ++NumErrors; } uint64_t StrpOffset; uint64_t StringOffset; uint32_t StringCount = 0; uint64_t Offset; unsigned Tag; while ((StrpOffset = AccelSectionData.getU32(&HashDataOffset)) != 0) { const uint32_t NumHashDataObjects = AccelSectionData.getU32(&HashDataOffset); for (uint32_t HashDataIdx = 0; HashDataIdx < NumHashDataObjects; ++HashDataIdx) { std::tie(Offset, Tag) = AccelTable.readAtoms(&HashDataOffset); auto Die = DCtx.getDIEForOffset(Offset); if (!Die) { const uint32_t BucketIdx = NumBuckets ? (Hash % NumBuckets) : UINT32_MAX; StringOffset = StrpOffset; const char *Name = StrData->getCStr(&StringOffset); if (!Name) Name = ""; error() << format( "%s Bucket[%d] Hash[%d] = 0x%08x " "Str[%u] = 0x%08" PRIx64 " DIE[%d] = 0x%08" PRIx64 " " "is not a valid DIE offset for \"%s\".\n", SectionName, BucketIdx, HashIdx, Hash, StringCount, StrpOffset, HashDataIdx, Offset, Name); ++NumErrors; continue; } if ((Tag != dwarf::DW_TAG_null) && (Die.getTag() != Tag)) { error() << "Tag " << dwarf::TagString(Tag) << " in accelerator table does not match Tag " << dwarf::TagString(Die.getTag()) << " of DIE[" << HashDataIdx << "].\n"; ++NumErrors; } } ++StringCount; } } return NumErrors; } unsigned DWARFVerifier::verifyDebugNamesCULists(const DWARFDebugNames &AccelTable) { // A map from CU offset to the (first) Name Index offset which claims to index // this CU. DenseMap CUMap; const uint64_t NotIndexed = std::numeric_limits::max(); CUMap.reserve(DCtx.getNumCompileUnits()); for (const auto &CU : DCtx.compile_units()) CUMap[CU->getOffset()] = NotIndexed; unsigned NumErrors = 0; for (const DWARFDebugNames::NameIndex &NI : AccelTable) { if (NI.getCUCount() == 0) { error() << formatv("Name Index @ {0:x} does not index any CU\n", NI.getUnitOffset()); ++NumErrors; continue; } for (uint32_t CU = 0, End = NI.getCUCount(); CU < End; ++CU) { uint64_t Offset = NI.getCUOffset(CU); auto Iter = CUMap.find(Offset); if (Iter == CUMap.end()) { error() << formatv( "Name Index @ {0:x} references a non-existing CU @ {1:x}\n", NI.getUnitOffset(), Offset); ++NumErrors; continue; } if (Iter->second != NotIndexed) { error() << formatv("Name Index @ {0:x} references a CU @ {1:x}, but " "this CU is already indexed by Name Index @ {2:x}\n", NI.getUnitOffset(), Offset, Iter->second); continue; } Iter->second = NI.getUnitOffset(); } } for (const auto &KV : CUMap) { if (KV.second == NotIndexed) warn() << formatv("CU @ {0:x} not covered by any Name Index\n", KV.first); } return NumErrors; } unsigned DWARFVerifier::verifyNameIndexBuckets(const DWARFDebugNames::NameIndex &NI, const DataExtractor &StrData) { struct BucketInfo { uint32_t Bucket; uint32_t Index; constexpr BucketInfo(uint32_t Bucket, uint32_t Index) : Bucket(Bucket), Index(Index) {} bool operator<(const BucketInfo &RHS) const { return Index < RHS.Index; }; }; uint32_t NumErrors = 0; if (NI.getBucketCount() == 0) { warn() << formatv("Name Index @ {0:x} does not contain a hash table.\n", NI.getUnitOffset()); return NumErrors; } // Build up a list of (Bucket, Index) pairs. We use this later to verify that // each Name is reachable from the appropriate bucket. std::vector BucketStarts; BucketStarts.reserve(NI.getBucketCount() + 1); for (uint32_t Bucket = 0, End = NI.getBucketCount(); Bucket < End; ++Bucket) { uint32_t Index = NI.getBucketArrayEntry(Bucket); if (Index > NI.getNameCount()) { error() << formatv("Bucket {0} of Name Index @ {1:x} contains invalid " "value {2}. Valid range is [0, {3}].\n", Bucket, NI.getUnitOffset(), Index, NI.getNameCount()); ++NumErrors; continue; } if (Index > 0) BucketStarts.emplace_back(Bucket, Index); } // If there were any buckets with invalid values, skip further checks as they // will likely produce many errors which will only confuse the actual root // problem. if (NumErrors > 0) return NumErrors; // Sort the list in the order of increasing "Index" entries. array_pod_sort(BucketStarts.begin(), BucketStarts.end()); // Insert a sentinel entry at the end, so we can check that the end of the // table is covered in the loop below. BucketStarts.emplace_back(NI.getBucketCount(), NI.getNameCount() + 1); // Loop invariant: NextUncovered is the (1-based) index of the first Name // which is not reachable by any of the buckets we processed so far (and // hasn't been reported as uncovered). uint32_t NextUncovered = 1; for (const BucketInfo &B : BucketStarts) { // Under normal circumstances B.Index be equal to NextUncovered, but it can // be less if a bucket points to names which are already known to be in some // bucket we processed earlier. In that case, we won't trigger this error, // but report the mismatched hash value error instead. (We know the hash // will not match because we have already verified that the name's hash // puts it into the previous bucket.) if (B.Index > NextUncovered) { error() << formatv("Name Index @ {0:x}: Name table entries [{1}, {2}] " "are not covered by the hash table.\n", NI.getUnitOffset(), NextUncovered, B.Index - 1); ++NumErrors; } uint32_t Idx = B.Index; // The rest of the checks apply only to non-sentinel entries. if (B.Bucket == NI.getBucketCount()) break; // This triggers if a non-empty bucket points to a name with a mismatched // hash. Clients are likely to interpret this as an empty bucket, because a // mismatched hash signals the end of a bucket, but if this is indeed an // empty bucket, the producer should have signalled this by marking the // bucket as empty. uint32_t FirstHash = NI.getHashArrayEntry(Idx); if (FirstHash % NI.getBucketCount() != B.Bucket) { error() << formatv( "Name Index @ {0:x}: Bucket {1} is not empty but points to a " "mismatched hash value {2:x} (belonging to bucket {3}).\n", NI.getUnitOffset(), B.Bucket, FirstHash, FirstHash % NI.getBucketCount()); ++NumErrors; } // This find the end of this bucket and also verifies that all the hashes in // this bucket are correct by comparing the stored hashes to the ones we // compute ourselves. while (Idx <= NI.getNameCount()) { uint32_t Hash = NI.getHashArrayEntry(Idx); if (Hash % NI.getBucketCount() != B.Bucket) break; const char *Str = NI.getNameTableEntry(Idx).getString(); if (caseFoldingDjbHash(Str) != Hash) { error() << formatv("Name Index @ {0:x}: String ({1}) at index {2} " "hashes to {3:x}, but " "the Name Index hash is {4:x}\n", NI.getUnitOffset(), Str, Idx, caseFoldingDjbHash(Str), Hash); ++NumErrors; } ++Idx; } NextUncovered = std::max(NextUncovered, Idx); } return NumErrors; } unsigned DWARFVerifier::verifyNameIndexAttribute( const DWARFDebugNames::NameIndex &NI, const DWARFDebugNames::Abbrev &Abbr, DWARFDebugNames::AttributeEncoding AttrEnc) { StringRef FormName = dwarf::FormEncodingString(AttrEnc.Form); if (FormName.empty()) { error() << formatv("NameIndex @ {0:x}: Abbreviation {1:x}: {2} uses an " "unknown form: {3}.\n", NI.getUnitOffset(), Abbr.Code, AttrEnc.Index, AttrEnc.Form); return 1; } if (AttrEnc.Index == DW_IDX_type_hash) { if (AttrEnc.Form != dwarf::DW_FORM_data8) { error() << formatv( "NameIndex @ {0:x}: Abbreviation {1:x}: DW_IDX_type_hash " "uses an unexpected form {2} (should be {3}).\n", NI.getUnitOffset(), Abbr.Code, AttrEnc.Form, dwarf::DW_FORM_data8); return 1; } } // A list of known index attributes and their expected form classes. // DW_IDX_type_hash is handled specially in the check above, as it has a // specific form (not just a form class) we should expect. struct FormClassTable { dwarf::Index Index; DWARFFormValue::FormClass Class; StringLiteral ClassName; }; static constexpr FormClassTable Table[] = { {dwarf::DW_IDX_compile_unit, DWARFFormValue::FC_Constant, {"constant"}}, {dwarf::DW_IDX_type_unit, DWARFFormValue::FC_Constant, {"constant"}}, {dwarf::DW_IDX_die_offset, DWARFFormValue::FC_Reference, {"reference"}}, {dwarf::DW_IDX_parent, DWARFFormValue::FC_Constant, {"constant"}}, }; ArrayRef TableRef(Table); auto Iter = find_if(TableRef, [AttrEnc](const FormClassTable &T) { return T.Index == AttrEnc.Index; }); if (Iter == TableRef.end()) { warn() << formatv("NameIndex @ {0:x}: Abbreviation {1:x} contains an " "unknown index attribute: {2}.\n", NI.getUnitOffset(), Abbr.Code, AttrEnc.Index); return 0; } if (!DWARFFormValue(AttrEnc.Form).isFormClass(Iter->Class)) { error() << formatv("NameIndex @ {0:x}: Abbreviation {1:x}: {2} uses an " "unexpected form {3} (expected form class {4}).\n", NI.getUnitOffset(), Abbr.Code, AttrEnc.Index, AttrEnc.Form, Iter->ClassName); return 1; } return 0; } unsigned DWARFVerifier::verifyNameIndexAbbrevs(const DWARFDebugNames::NameIndex &NI) { if (NI.getLocalTUCount() + NI.getForeignTUCount() > 0) { warn() << formatv("Name Index @ {0:x}: Verifying indexes of type units is " "not currently supported.\n", NI.getUnitOffset()); return 0; } unsigned NumErrors = 0; for (const auto &Abbrev : NI.getAbbrevs()) { StringRef TagName = dwarf::TagString(Abbrev.Tag); if (TagName.empty()) { warn() << formatv("NameIndex @ {0:x}: Abbreviation {1:x} references an " "unknown tag: {2}.\n", NI.getUnitOffset(), Abbrev.Code, Abbrev.Tag); } SmallSet Attributes; for (const auto &AttrEnc : Abbrev.Attributes) { if (!Attributes.insert(AttrEnc.Index).second) { error() << formatv("NameIndex @ {0:x}: Abbreviation {1:x} contains " "multiple {2} attributes.\n", NI.getUnitOffset(), Abbrev.Code, AttrEnc.Index); ++NumErrors; continue; } NumErrors += verifyNameIndexAttribute(NI, Abbrev, AttrEnc); } if (NI.getCUCount() > 1 && !Attributes.count(dwarf::DW_IDX_compile_unit)) { error() << formatv("NameIndex @ {0:x}: Indexing multiple compile units " "and abbreviation {1:x} has no {2} attribute.\n", NI.getUnitOffset(), Abbrev.Code, dwarf::DW_IDX_compile_unit); ++NumErrors; } if (!Attributes.count(dwarf::DW_IDX_die_offset)) { error() << formatv( "NameIndex @ {0:x}: Abbreviation {1:x} has no {2} attribute.\n", NI.getUnitOffset(), Abbrev.Code, dwarf::DW_IDX_die_offset); ++NumErrors; } } return NumErrors; } static SmallVector getNames(const DWARFDie &DIE, bool IncludeLinkageName = true) { SmallVector Result; if (const char *Str = DIE.getName(DINameKind::ShortName)) Result.emplace_back(Str); else if (DIE.getTag() == dwarf::DW_TAG_namespace) Result.emplace_back("(anonymous namespace)"); if (IncludeLinkageName) { if (const char *Str = DIE.getName(DINameKind::LinkageName)) { if (Result.empty() || Result[0] != Str) Result.emplace_back(Str); } } return Result; } unsigned DWARFVerifier::verifyNameIndexEntries( const DWARFDebugNames::NameIndex &NI, const DWARFDebugNames::NameTableEntry &NTE) { // Verifying type unit indexes not supported. if (NI.getLocalTUCount() + NI.getForeignTUCount() > 0) return 0; const char *CStr = NTE.getString(); if (!CStr) { error() << formatv( "Name Index @ {0:x}: Unable to get string associated with name {1}.\n", NI.getUnitOffset(), NTE.getIndex()); return 1; } StringRef Str(CStr); unsigned NumErrors = 0; unsigned NumEntries = 0; uint64_t EntryID = NTE.getEntryOffset(); uint64_t NextEntryID = EntryID; Expected EntryOr = NI.getEntry(&NextEntryID); for (; EntryOr; ++NumEntries, EntryID = NextEntryID, EntryOr = NI.getEntry(&NextEntryID)) { uint32_t CUIndex = *EntryOr->getCUIndex(); if (CUIndex > NI.getCUCount()) { error() << formatv("Name Index @ {0:x}: Entry @ {1:x} contains an " "invalid CU index ({2}).\n", NI.getUnitOffset(), EntryID, CUIndex); ++NumErrors; continue; } uint64_t CUOffset = NI.getCUOffset(CUIndex); uint64_t DIEOffset = CUOffset + *EntryOr->getDIEUnitOffset(); DWARFDie DIE = DCtx.getDIEForOffset(DIEOffset); if (!DIE) { error() << formatv("Name Index @ {0:x}: Entry @ {1:x} references a " "non-existing DIE @ {2:x}.\n", NI.getUnitOffset(), EntryID, DIEOffset); ++NumErrors; continue; } if (DIE.getDwarfUnit()->getOffset() != CUOffset) { error() << formatv("Name Index @ {0:x}: Entry @ {1:x}: mismatched CU of " "DIE @ {2:x}: index - {3:x}; debug_info - {4:x}.\n", NI.getUnitOffset(), EntryID, DIEOffset, CUOffset, DIE.getDwarfUnit()->getOffset()); ++NumErrors; } if (DIE.getTag() != EntryOr->tag()) { error() << formatv("Name Index @ {0:x}: Entry @ {1:x}: mismatched Tag of " "DIE @ {2:x}: index - {3}; debug_info - {4}.\n", NI.getUnitOffset(), EntryID, DIEOffset, EntryOr->tag(), DIE.getTag()); ++NumErrors; } auto EntryNames = getNames(DIE); if (!is_contained(EntryNames, Str)) { error() << formatv("Name Index @ {0:x}: Entry @ {1:x}: mismatched Name " "of DIE @ {2:x}: index - {3}; debug_info - {4}.\n", NI.getUnitOffset(), EntryID, DIEOffset, Str, make_range(EntryNames.begin(), EntryNames.end())); ++NumErrors; } } handleAllErrors(EntryOr.takeError(), [&](const DWARFDebugNames::SentinelError &) { if (NumEntries > 0) return; error() << formatv("Name Index @ {0:x}: Name {1} ({2}) is " "not associated with any entries.\n", NI.getUnitOffset(), NTE.getIndex(), Str); ++NumErrors; }, [&](const ErrorInfoBase &Info) { error() << formatv("Name Index @ {0:x}: Name {1} ({2}): {3}\n", NI.getUnitOffset(), NTE.getIndex(), Str, Info.message()); ++NumErrors; }); return NumErrors; } static bool isVariableIndexable(const DWARFDie &Die, DWARFContext &DCtx) { Optional Location = Die.findRecursively(DW_AT_location); if (!Location) return false; auto ContainsInterestingOperators = [&](ArrayRef D) { DWARFUnit *U = Die.getDwarfUnit(); DataExtractor Data(toStringRef(D), DCtx.isLittleEndian(), U->getAddressByteSize()); DWARFExpression Expression(Data, U->getVersion(), U->getAddressByteSize()); return any_of(Expression, [](DWARFExpression::Operation &Op) { return !Op.isError() && (Op.getCode() == DW_OP_addr || Op.getCode() == DW_OP_form_tls_address || Op.getCode() == DW_OP_GNU_push_tls_address); }); }; if (Optional> Expr = Location->getAsBlock()) { // Inlined location. if (ContainsInterestingOperators(*Expr)) return true; } else if (Optional Offset = Location->getAsSectionOffset()) { // Location list. if (const DWARFDebugLoc *DebugLoc = DCtx.getDebugLoc()) { if (const DWARFDebugLoc::LocationList *LocList = DebugLoc->getLocationListAtOffset(*Offset)) { if (any_of(LocList->Entries, [&](const DWARFDebugLoc::Entry &E) { return ContainsInterestingOperators(E.Loc); })) return true; } } } return false; } unsigned DWARFVerifier::verifyNameIndexCompleteness( const DWARFDie &Die, const DWARFDebugNames::NameIndex &NI) { // First check, if the Die should be indexed. The code follows the DWARF v5 // wording as closely as possible. // "All non-defining declarations (that is, debugging information entries // with a DW_AT_declaration attribute) are excluded." if (Die.find(DW_AT_declaration)) return 0; // "DW_TAG_namespace debugging information entries without a DW_AT_name // attribute are included with the name “(anonymous namespace)â€. // All other debugging information entries without a DW_AT_name attribute // are excluded." // "If a subprogram or inlined subroutine is included, and has a // DW_AT_linkage_name attribute, there will be an additional index entry for // the linkage name." auto IncludeLinkageName = Die.getTag() == DW_TAG_subprogram || Die.getTag() == DW_TAG_inlined_subroutine; auto EntryNames = getNames(Die, IncludeLinkageName); if (EntryNames.empty()) return 0; // We deviate from the specification here, which says: // "The name index must contain an entry for each debugging information entry // that defines a named subprogram, label, variable, type, or namespace, // subject to ..." // Instead whitelisting all TAGs representing a "type" or a "subprogram", to // make sure we catch any missing items, we instead blacklist all TAGs that we // know shouldn't be indexed. switch (Die.getTag()) { // Compile units and modules have names but shouldn't be indexed. case DW_TAG_compile_unit: case DW_TAG_module: return 0; // Function and template parameters are not globally visible, so we shouldn't // index them. case DW_TAG_formal_parameter: case DW_TAG_template_value_parameter: case DW_TAG_template_type_parameter: case DW_TAG_GNU_template_parameter_pack: case DW_TAG_GNU_template_template_param: return 0; // Object members aren't globally visible. case DW_TAG_member: return 0; // According to a strict reading of the specification, enumerators should not // be indexed (and LLVM currently does not do that). However, this causes // problems for the debuggers, so we may need to reconsider this. case DW_TAG_enumerator: return 0; // Imported declarations should not be indexed according to the specification // and LLVM currently does not do that. case DW_TAG_imported_declaration: return 0; // "DW_TAG_subprogram, DW_TAG_inlined_subroutine, and DW_TAG_label debugging // information entries without an address attribute (DW_AT_low_pc, // DW_AT_high_pc, DW_AT_ranges, or DW_AT_entry_pc) are excluded." case DW_TAG_subprogram: case DW_TAG_inlined_subroutine: case DW_TAG_label: if (Die.findRecursively( {DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges, DW_AT_entry_pc})) break; return 0; // "DW_TAG_variable debugging information entries with a DW_AT_location // attribute that includes a DW_OP_addr or DW_OP_form_tls_address operator are // included; otherwise, they are excluded." // // LLVM extension: We also add DW_OP_GNU_push_tls_address to this list. case DW_TAG_variable: if (isVariableIndexable(Die, DCtx)) break; return 0; default: break; } // Now we know that our Die should be present in the Index. Let's check if // that's the case. unsigned NumErrors = 0; uint64_t DieUnitOffset = Die.getOffset() - Die.getDwarfUnit()->getOffset(); for (StringRef Name : EntryNames) { if (none_of(NI.equal_range(Name), [&](const DWARFDebugNames::Entry &E) { return E.getDIEUnitOffset() == DieUnitOffset; })) { error() << formatv("Name Index @ {0:x}: Entry for DIE @ {1:x} ({2}) with " "name {3} missing.\n", NI.getUnitOffset(), Die.getOffset(), Die.getTag(), Name); ++NumErrors; } } return NumErrors; } unsigned DWARFVerifier::verifyDebugNames(const DWARFSection &AccelSection, const DataExtractor &StrData) { unsigned NumErrors = 0; DWARFDataExtractor AccelSectionData(DCtx.getDWARFObj(), AccelSection, DCtx.isLittleEndian(), 0); DWARFDebugNames AccelTable(AccelSectionData, StrData); OS << "Verifying .debug_names...\n"; // This verifies that we can read individual name indices and their // abbreviation tables. if (Error E = AccelTable.extract()) { error() << toString(std::move(E)) << '\n'; return 1; } NumErrors += verifyDebugNamesCULists(AccelTable); for (const auto &NI : AccelTable) NumErrors += verifyNameIndexBuckets(NI, StrData); for (const auto &NI : AccelTable) NumErrors += verifyNameIndexAbbrevs(NI); // Don't attempt Entry validation if any of the previous checks found errors if (NumErrors > 0) return NumErrors; for (const auto &NI : AccelTable) for (DWARFDebugNames::NameTableEntry NTE : NI) NumErrors += verifyNameIndexEntries(NI, NTE); if (NumErrors > 0) return NumErrors; for (const std::unique_ptr &U : DCtx.compile_units()) { if (const DWARFDebugNames::NameIndex *NI = AccelTable.getCUNameIndex(U->getOffset())) { auto *CU = cast(U.get()); for (const DWARFDebugInfoEntry &Die : CU->dies()) NumErrors += verifyNameIndexCompleteness(DWARFDie(CU, &Die), *NI); } } return NumErrors; } bool DWARFVerifier::handleAccelTables() { const DWARFObject &D = DCtx.getDWARFObj(); DataExtractor StrData(D.getStrSection(), DCtx.isLittleEndian(), 0); unsigned NumErrors = 0; if (!D.getAppleNamesSection().Data.empty()) NumErrors += verifyAppleAccelTable(&D.getAppleNamesSection(), &StrData, ".apple_names"); if (!D.getAppleTypesSection().Data.empty()) NumErrors += verifyAppleAccelTable(&D.getAppleTypesSection(), &StrData, ".apple_types"); if (!D.getAppleNamespacesSection().Data.empty()) NumErrors += verifyAppleAccelTable(&D.getAppleNamespacesSection(), &StrData, ".apple_namespaces"); if (!D.getAppleObjCSection().Data.empty()) NumErrors += verifyAppleAccelTable(&D.getAppleObjCSection(), &StrData, ".apple_objc"); if (!D.getNamesSection().Data.empty()) NumErrors += verifyDebugNames(D.getNamesSection(), StrData); return NumErrors == 0; } raw_ostream &DWARFVerifier::error() const { return WithColor::error(OS); } raw_ostream &DWARFVerifier::warn() const { return WithColor::warning(OS); } raw_ostream &DWARFVerifier::note() const { return WithColor::note(OS); } raw_ostream &DWARFVerifier::dump(const DWARFDie &Die, unsigned indent) const { Die.dump(OS, indent, DumpOpts); return OS; } binaryen-version_108/third_party/llvm-project/DWARFVisitor.cpp000066400000000000000000000212571423707623100246520ustar00rootroot00000000000000//===--- DWARFVisitor.cpp ---------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // //===----------------------------------------------------------------------===// #include #include "DWARFVisitor.h" #include "llvm/ObjectYAML/DWARFYAML.h" using namespace llvm; template void DWARFYAML::VisitorImpl::onVariableSizeValue(uint64_t U, unsigned Size) { switch (Size) { case 8: onValue((uint64_t)U); break; case 4: onValue((uint32_t)U); break; case 2: onValue((uint16_t)U); break; case 1: onValue((uint8_t)U); break; default: llvm_unreachable("Invalid integer write size."); } } static unsigned getOffsetSize(const DWARFYAML::Unit &Unit) { return Unit.Length.isDWARF64() ? 8 : 4; } static unsigned getRefSize(const DWARFYAML::Unit &Unit) { if (Unit.Version == 2) return Unit.AddrSize; return getOffsetSize(Unit); } template void DWARFYAML::VisitorImpl::traverseDebugInfo() { // XXX BINARYEN: Handle multiple linked compile units, each of which can // refer to a different abbreviation list. // TODO: This code appears to assume that abbreviation codes increment by 1 // so that lookups are linear. In LLVM output that is true, but it might not // be in general. // Create a map of [byte offset into the abbreviation section] => [index in // DebugInfo.AbbrevDecls]. This avoids linear search for each CU. std::unordered_map abbrByteOffsetToDeclsIndex; for (size_t i = 0; i < DebugInfo.AbbrevDecls.size(); i++) { auto offset = DebugInfo.AbbrevDecls[i].ListOffset; // The offset is the same for all entries for the same CU, so only note the // first as that is where the list for the CU (that LLVM DeclSet) begins. // That is, DebugInfo.AbbrevDecls looks like this: // // i CU Abbrev ListOffset // ============================ // 0 X X1 150 // 1 X X2 150 // 2 X X3 150 // .. // 6 Y Y1 260 // 7 Y Y2 260 // // Note how multiple rows i have the same CU. All those abbrevs have the // same ListOffset, which is the byte offset into the abbreviation section // for that set of abbreviations. if (abbrByteOffsetToDeclsIndex.count(offset)) { continue; } abbrByteOffsetToDeclsIndex[offset] = i; } for (auto &Unit : DebugInfo.CompileUnits) { // AbbrOffset is the byte offset into the abbreviation section, which we // need to find among the Abbrev's ListOffsets (which are the byte offsets // of where that abbreviation list begins). // TODO: Optimize this to not be O(#CUs * #abbrevs). auto offset = Unit.AbbrOffset; assert(abbrByteOffsetToDeclsIndex.count(offset)); size_t AbbrevStart = abbrByteOffsetToDeclsIndex[offset]; assert(DebugInfo.AbbrevDecls[AbbrevStart].ListOffset == offset); // Find the last entry in this abbreviation list. size_t AbbrevEnd = AbbrevStart; while (AbbrevEnd < DebugInfo.AbbrevDecls.size() && DebugInfo.AbbrevDecls[AbbrevEnd].Code) { AbbrevEnd++; } // XXX BINARYEN If there are no abbreviations, there is nothing to // do in this unit. if (AbbrevStart == AbbrevEnd) { continue; } onStartCompileUnit(Unit); if (Unit.Entries.empty()) { // XXX BINARYEN continue; } for (auto &Entry : Unit.Entries) { onStartDIE(Unit, Entry); if (Entry.AbbrCode == 0u) continue; // XXX BINARYEN valid abbreviation codes start from 1, so subtract that, // and are relative to the start of the abbrev table auto RelativeAbbrIndex = Entry.AbbrCode - 1 + AbbrevStart; if (RelativeAbbrIndex >= AbbrevEnd) { errs() << "warning: invalid abbreviation code " << Entry.AbbrCode << " (range: " << AbbrevStart << ".." << AbbrevEnd << ")\n"; continue; } auto &Abbrev = DebugInfo.AbbrevDecls[RelativeAbbrIndex]; auto FormVal = Entry.Values.begin(); auto AbbrForm = Abbrev.Attributes.begin(); for (; FormVal != Entry.Values.end() && AbbrForm != Abbrev.Attributes.end(); ++FormVal, ++AbbrForm) { onForm(*AbbrForm, *FormVal); dwarf::Form Form = AbbrForm->Form; bool Indirect; do { Indirect = false; switch (Form) { case dwarf::DW_FORM_addr: onVariableSizeValue(FormVal->Value, Unit.AddrSize); break; case dwarf::DW_FORM_ref_addr: onVariableSizeValue(FormVal->Value, getRefSize(Unit)); break; case dwarf::DW_FORM_exprloc: case dwarf::DW_FORM_block: onValue((uint64_t)FormVal->BlockData.size(), true); onValue( MemoryBufferRef(StringRef((const char *)FormVal->BlockData.data(), FormVal->BlockData.size()), "")); break; case dwarf::DW_FORM_block1: { auto writeSize = FormVal->BlockData.size(); onValue((uint8_t)writeSize); onValue( MemoryBufferRef(StringRef((const char *)FormVal->BlockData.data(), FormVal->BlockData.size()), "")); break; } case dwarf::DW_FORM_block2: { auto writeSize = FormVal->BlockData.size(); onValue((uint16_t)writeSize); onValue( MemoryBufferRef(StringRef((const char *)FormVal->BlockData.data(), FormVal->BlockData.size()), "")); break; } case dwarf::DW_FORM_block4: { auto writeSize = FormVal->BlockData.size(); onValue((uint32_t)writeSize); onValue( MemoryBufferRef(StringRef((const char *)FormVal->BlockData.data(), FormVal->BlockData.size()), "")); break; } case dwarf::DW_FORM_data1: case dwarf::DW_FORM_ref1: case dwarf::DW_FORM_flag: case dwarf::DW_FORM_strx1: case dwarf::DW_FORM_addrx1: onValue((uint8_t)FormVal->Value); break; case dwarf::DW_FORM_data2: case dwarf::DW_FORM_ref2: case dwarf::DW_FORM_strx2: case dwarf::DW_FORM_addrx2: onValue((uint16_t)FormVal->Value); break; case dwarf::DW_FORM_data4: case dwarf::DW_FORM_ref4: case dwarf::DW_FORM_ref_sup4: case dwarf::DW_FORM_strx4: case dwarf::DW_FORM_addrx4: onValue((uint32_t)FormVal->Value); break; case dwarf::DW_FORM_data8: case dwarf::DW_FORM_ref8: case dwarf::DW_FORM_ref_sup8: onValue((uint64_t)FormVal->Value); break; case dwarf::DW_FORM_sdata: onValue((int64_t)FormVal->Value, true); break; case dwarf::DW_FORM_udata: case dwarf::DW_FORM_ref_udata: onValue((uint64_t)FormVal->Value, true); break; case dwarf::DW_FORM_string: onValue(FormVal->CStr); break; case dwarf::DW_FORM_indirect: onValue((uint64_t)FormVal->Value, true); Indirect = true; Form = static_cast((uint64_t)FormVal->Value); ++FormVal; break; case dwarf::DW_FORM_strp: case dwarf::DW_FORM_sec_offset: case dwarf::DW_FORM_GNU_ref_alt: case dwarf::DW_FORM_GNU_strp_alt: case dwarf::DW_FORM_line_strp: case dwarf::DW_FORM_strp_sup: onVariableSizeValue(FormVal->Value, getOffsetSize(Unit)); break; case dwarf::DW_FORM_ref_sig8: onValue((uint64_t)FormVal->Value); break; case dwarf::DW_FORM_GNU_addr_index: case dwarf::DW_FORM_GNU_str_index: onValue((uint64_t)FormVal->Value, true); break; default: break; } } while (Indirect); } onEndDIE(Unit, Entry); } onEndCompileUnit(Unit); } } // Explicitly instantiate the two template expansions. template class DWARFYAML::VisitorImpl; template class DWARFYAML::VisitorImpl; binaryen-version_108/third_party/llvm-project/DWARFVisitor.h000066400000000000000000000054521423707623100243160ustar00rootroot00000000000000//===--- DWARFVisitor.h -----------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // //===----------------------------------------------------------------------===// #ifndef LLVM_OBJECTYAML_DWARFVISITOR_H #define LLVM_OBJECTYAML_DWARFVISITOR_H #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/Support/MemoryBuffer.h" namespace llvm { namespace DWARFYAML { struct Data; struct Unit; struct Entry; struct FormValue; struct AttributeAbbrev; /// A class to visits DWARFYAML Compile Units and DIEs in preorder. /// /// Extensions of this class can either maintain const or non-const references /// to the DWARFYAML::Data object. template class VisitorImpl { protected: T &DebugInfo; /// Visitor Functions /// @{ virtual void onStartCompileUnit(Unit &CU) {} virtual void onEndCompileUnit(Unit &CU) {} virtual void onStartDIE(Unit &CU, Entry &DIE) {} virtual void onEndDIE(Unit &CU, Entry &DIE) {} virtual void onForm(AttributeAbbrev &AttAbbrev, FormValue &Value) {} /// @} /// Const Visitor Functions /// @{ virtual void onStartCompileUnit(const Unit &CU) {} virtual void onEndCompileUnit(const Unit &CU) {} virtual void onStartDIE(const Unit &CU, const Entry &DIE) {} virtual void onEndDIE(const Unit &CU, const Entry &DIE) {} virtual void onForm(const AttributeAbbrev &AttAbbrev, const FormValue &Value) {} /// @} /// Value visitors /// @{ virtual void onValue(const uint8_t U) {} virtual void onValue(const uint16_t U) {} virtual void onValue(const uint32_t U) {} virtual void onValue(const uint64_t U, const bool LEB = false) {} virtual void onValue(const int64_t S, const bool LEB = false) {} virtual void onValue(const StringRef String) {} virtual void onValue(const MemoryBufferRef MBR) {} /// @} public: VisitorImpl(T &DI) : DebugInfo(DI) {} virtual ~VisitorImpl() {} void traverseDebugInfo(); private: void onVariableSizeValue(uint64_t U, unsigned Size); }; // Making the visior instantiations extern and explicit in the cpp file. This // prevents them from being instantiated in every compile unit that uses the // visitors. extern template class VisitorImpl; extern template class VisitorImpl; class Visitor : public VisitorImpl { public: Visitor(Data &DI) : VisitorImpl(DI) {} }; class ConstVisitor : public VisitorImpl { public: ConstVisitor(const Data &DI) : VisitorImpl(DI) {} }; } // namespace DWARFYAML } // namespace llvm #endif binaryen-version_108/third_party/llvm-project/DWARFYAML.cpp000066400000000000000000000154511423707623100237540ustar00rootroot00000000000000//===- DWARFYAML.cpp - DWARF YAMLIO implementation ------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines classes for handling the YAML representation of DWARF Debug // Info. // //===----------------------------------------------------------------------===// #include "llvm/ObjectYAML/DWARFYAML.h" namespace llvm { bool DWARFYAML::Data::isEmpty() const { return 0 == DebugStrings.size() + AbbrevDecls.size(); } namespace yaml { void MappingTraits::mapping(IO &IO, DWARFYAML::Data &DWARF) { auto oldContext = IO.getContext(); IO.setContext(&DWARF); IO.mapOptional("debug_str", DWARF.DebugStrings); IO.mapOptional("debug_abbrev", DWARF.AbbrevDecls); if (!DWARF.ARanges.empty() || !IO.outputting()) IO.mapOptional("debug_aranges", DWARF.ARanges); if (!DWARF.PubNames.Entries.empty() || !IO.outputting()) IO.mapOptional("debug_pubnames", DWARF.PubNames); if (!DWARF.PubTypes.Entries.empty() || !IO.outputting()) IO.mapOptional("debug_pubtypes", DWARF.PubTypes); if (!DWARF.GNUPubNames.Entries.empty() || !IO.outputting()) IO.mapOptional("debug_gnu_pubnames", DWARF.GNUPubNames); if (!DWARF.GNUPubTypes.Entries.empty() || !IO.outputting()) IO.mapOptional("debug_gnu_pubtypes", DWARF.GNUPubTypes); IO.mapOptional("debug_info", DWARF.CompileUnits); IO.mapOptional("debug_line", DWARF.DebugLines); IO.setContext(&oldContext); } void MappingTraits::mapping(IO &IO, DWARFYAML::Abbrev &Abbrev) { IO.mapRequired("Code", Abbrev.Code); IO.mapRequired("Tag", Abbrev.Tag); IO.mapRequired("Children", Abbrev.Children); IO.mapRequired("Attributes", Abbrev.Attributes); } void MappingTraits::mapping( IO &IO, DWARFYAML::AttributeAbbrev &AttAbbrev) { IO.mapRequired("Attribute", AttAbbrev.Attribute); IO.mapRequired("Form", AttAbbrev.Form); if(AttAbbrev.Form == dwarf::DW_FORM_implicit_const) IO.mapRequired("Value", AttAbbrev.Value); } void MappingTraits::mapping( IO &IO, DWARFYAML::ARangeDescriptor &Descriptor) { IO.mapRequired("Address", Descriptor.Address); IO.mapRequired("Length", Descriptor.Length); } void MappingTraits::mapping(IO &IO, DWARFYAML::ARange &Range) { IO.mapRequired("Length", Range.Length); IO.mapRequired("Version", Range.Version); IO.mapRequired("CuOffset", Range.CuOffset); IO.mapRequired("AddrSize", Range.AddrSize); IO.mapRequired("SegSize", Range.SegSize); IO.mapRequired("Descriptors", Range.Descriptors); } void MappingTraits::mapping(IO &IO, DWARFYAML::PubEntry &Entry) { IO.mapRequired("DieOffset", Entry.DieOffset); if (reinterpret_cast(IO.getContext())->IsGNUStyle) IO.mapRequired("Descriptor", Entry.Descriptor); IO.mapRequired("Name", Entry.Name); } void MappingTraits::mapping( IO &IO, DWARFYAML::PubSection &Section) { auto OldContext = IO.getContext(); IO.setContext(&Section); IO.mapRequired("Length", Section.Length); IO.mapRequired("Version", Section.Version); IO.mapRequired("UnitOffset", Section.UnitOffset); IO.mapRequired("UnitSize", Section.UnitSize); IO.mapRequired("Entries", Section.Entries); IO.setContext(OldContext); } void MappingTraits::mapping(IO &IO, DWARFYAML::Unit &Unit) { IO.mapRequired("Length", Unit.Length); IO.mapRequired("Version", Unit.Version); if (Unit.Version >= 5) IO.mapRequired("UnitType", Unit.Type); IO.mapRequired("AbbrOffset", Unit.AbbrOffset); IO.mapRequired("AddrSize", Unit.AddrSize); IO.mapOptional("Entries", Unit.Entries); } void MappingTraits::mapping(IO &IO, DWARFYAML::Entry &Entry) { IO.mapRequired("AbbrCode", Entry.AbbrCode); IO.mapRequired("Values", Entry.Values); } void MappingTraits::mapping( IO &IO, DWARFYAML::FormValue &FormValue) { IO.mapOptional("Value", FormValue.Value); if (!FormValue.CStr.empty() || !IO.outputting()) IO.mapOptional("CStr", FormValue.CStr); if (!FormValue.BlockData.empty() || !IO.outputting()) IO.mapOptional("BlockData", FormValue.BlockData); } void MappingTraits::mapping(IO &IO, DWARFYAML::File &File) { IO.mapRequired("Name", File.Name); IO.mapRequired("DirIdx", File.DirIdx); IO.mapRequired("ModTime", File.ModTime); IO.mapRequired("Length", File.Length); } void MappingTraits::mapping( IO &IO, DWARFYAML::LineTableOpcode &LineTableOpcode) { IO.mapRequired("Opcode", LineTableOpcode.Opcode); if (LineTableOpcode.Opcode == dwarf::DW_LNS_extended_op) { IO.mapRequired("ExtLen", LineTableOpcode.ExtLen); IO.mapRequired("SubOpcode", LineTableOpcode.SubOpcode); } if (!LineTableOpcode.UnknownOpcodeData.empty() || !IO.outputting()) IO.mapOptional("UnknownOpcodeData", LineTableOpcode.UnknownOpcodeData); if (!LineTableOpcode.UnknownOpcodeData.empty() || !IO.outputting()) IO.mapOptional("StandardOpcodeData", LineTableOpcode.StandardOpcodeData); if (!LineTableOpcode.FileEntry.Name.empty() || !IO.outputting()) IO.mapOptional("FileEntry", LineTableOpcode.FileEntry); if (LineTableOpcode.Opcode == dwarf::DW_LNS_advance_line || !IO.outputting()) IO.mapOptional("SData", LineTableOpcode.SData); IO.mapOptional("Data", LineTableOpcode.Data); } void MappingTraits::mapping( IO &IO, DWARFYAML::LineTable &LineTable) { IO.mapRequired("Length", LineTable.Length); IO.mapRequired("Version", LineTable.Version); IO.mapRequired("PrologueLength", LineTable.PrologueLength); IO.mapRequired("MinInstLength", LineTable.MinInstLength); if(LineTable.Version >= 4) IO.mapRequired("MaxOpsPerInst", LineTable.MaxOpsPerInst); IO.mapRequired("DefaultIsStmt", LineTable.DefaultIsStmt); IO.mapRequired("LineBase", LineTable.LineBase); IO.mapRequired("LineRange", LineTable.LineRange); IO.mapRequired("OpcodeBase", LineTable.OpcodeBase); IO.mapRequired("StandardOpcodeLengths", LineTable.StandardOpcodeLengths); IO.mapRequired("IncludeDirs", LineTable.IncludeDirs); IO.mapRequired("Files", LineTable.Files); IO.mapRequired("Opcodes", LineTable.Opcodes); } void MappingTraits::mapping( IO &IO, DWARFYAML::InitialLength &InitialLength) { IO.mapRequired("TotalLength", InitialLength.TotalLength); if (InitialLength.isDWARF64()) IO.mapRequired("TotalLength64", InitialLength.TotalLength64); } } // end namespace yaml } // end namespace llvm binaryen-version_108/third_party/llvm-project/DataExtractor.cpp000066400000000000000000000153351423707623100251740ustar00rootroot00000000000000//===-- DataExtractor.cpp -------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Support/DataExtractor.h" #include "llvm/Support/Errc.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Host.h" #include "llvm/Support/LEB128.h" #include "llvm/Support/SwapByteOrder.h" using namespace llvm; static void unexpectedEndReached(Error *E) { if (E) *E = createStringError(errc::illegal_byte_sequence, "unexpected end of data"); } static bool isError(Error *E) { return E && *E; } template static T getU(uint64_t *offset_ptr, const DataExtractor *de, bool isLittleEndian, const char *Data, llvm::Error *Err) { ErrorAsOutParameter ErrAsOut(Err); T val = 0; if (isError(Err)) return val; uint64_t offset = *offset_ptr; if (!de->isValidOffsetForDataOfSize(offset, sizeof(T))) { unexpectedEndReached(Err); return val; } std::memcpy(&val, &Data[offset], sizeof(val)); if (sys::IsLittleEndianHost != isLittleEndian) sys::swapByteOrder(val); // Advance the offset *offset_ptr += sizeof(val); return val; } template static T *getUs(uint64_t *offset_ptr, T *dst, uint32_t count, const DataExtractor *de, bool isLittleEndian, const char *Data, llvm::Error *Err) { ErrorAsOutParameter ErrAsOut(Err); if (isError(Err)) return nullptr; uint64_t offset = *offset_ptr; if (!de->isValidOffsetForDataOfSize(offset, sizeof(*dst) * count)) { unexpectedEndReached(Err); return nullptr; } for (T *value_ptr = dst, *end = dst + count; value_ptr != end; ++value_ptr, offset += sizeof(*dst)) *value_ptr = getU(offset_ptr, de, isLittleEndian, Data, Err); // Advance the offset *offset_ptr = offset; // Return a non-NULL pointer to the converted data as an indicator of // success return dst; } uint8_t DataExtractor::getU8(uint64_t *offset_ptr, llvm::Error *Err) const { return getU(offset_ptr, this, IsLittleEndian, Data.data(), Err); } uint8_t * DataExtractor::getU8(uint64_t *offset_ptr, uint8_t *dst, uint32_t count) const { return getUs(offset_ptr, dst, count, this, IsLittleEndian, Data.data(), nullptr); } uint8_t *DataExtractor::getU8(Cursor &C, uint8_t *Dst, uint32_t Count) const { return getUs(&C.Offset, Dst, Count, this, IsLittleEndian, Data.data(), &C.Err); } uint16_t DataExtractor::getU16(uint64_t *offset_ptr, llvm::Error *Err) const { return getU(offset_ptr, this, IsLittleEndian, Data.data(), Err); } uint16_t *DataExtractor::getU16(uint64_t *offset_ptr, uint16_t *dst, uint32_t count) const { return getUs(offset_ptr, dst, count, this, IsLittleEndian, Data.data(), nullptr); } uint32_t DataExtractor::getU24(uint64_t *offset_ptr) const { uint24_t ExtractedVal = getU(offset_ptr, this, IsLittleEndian, Data.data(), nullptr); // The 3 bytes are in the correct byte order for the host. return ExtractedVal.getAsUint32(sys::IsLittleEndianHost); } uint32_t DataExtractor::getU32(uint64_t *offset_ptr, llvm::Error *Err) const { return getU(offset_ptr, this, IsLittleEndian, Data.data(), Err); } uint32_t *DataExtractor::getU32(uint64_t *offset_ptr, uint32_t *dst, uint32_t count) const { return getUs(offset_ptr, dst, count, this, IsLittleEndian, Data.data(), nullptr); } uint64_t DataExtractor::getU64(uint64_t *offset_ptr, llvm::Error *Err) const { return getU(offset_ptr, this, IsLittleEndian, Data.data(), Err); } uint64_t *DataExtractor::getU64(uint64_t *offset_ptr, uint64_t *dst, uint32_t count) const { return getUs(offset_ptr, dst, count, this, IsLittleEndian, Data.data(), nullptr); } uint64_t DataExtractor::getUnsigned(uint64_t *offset_ptr, uint32_t byte_size, llvm::Error *Err) const { switch (byte_size) { case 1: return getU8(offset_ptr, Err); case 2: return getU16(offset_ptr, Err); case 4: return getU32(offset_ptr, Err); case 8: return getU64(offset_ptr, Err); } llvm_unreachable("getUnsigned unhandled case!"); } int64_t DataExtractor::getSigned(uint64_t *offset_ptr, uint32_t byte_size) const { switch (byte_size) { case 1: return (int8_t)getU8(offset_ptr); case 2: return (int16_t)getU16(offset_ptr); case 4: return (int32_t)getU32(offset_ptr); case 8: return (int64_t)getU64(offset_ptr); } llvm_unreachable("getSigned unhandled case!"); } const char *DataExtractor::getCStr(uint64_t *offset_ptr) const { uint64_t offset = *offset_ptr; StringRef::size_type pos = Data.find('\0', offset); if (pos != StringRef::npos) { *offset_ptr = pos + 1; return Data.data() + offset; } return nullptr; } StringRef DataExtractor::getCStrRef(uint64_t *offset_ptr) const { uint64_t Start = *offset_ptr; StringRef::size_type Pos = Data.find('\0', Start); if (Pos != StringRef::npos) { *offset_ptr = Pos + 1; return StringRef(Data.data() + Start, Pos - Start); } return StringRef(); } uint64_t DataExtractor::getULEB128(uint64_t *offset_ptr, llvm::Error *Err) const { assert(*offset_ptr <= Data.size()); ErrorAsOutParameter ErrAsOut(Err); if (isError(Err)) return 0; const char *error; unsigned bytes_read; uint64_t result = decodeULEB128( reinterpret_cast(Data.data() + *offset_ptr), &bytes_read, reinterpret_cast(Data.data() + Data.size()), &error); if (error) { if (Err) *Err = createStringError(errc::illegal_byte_sequence, error); return 0; } *offset_ptr += bytes_read; return result; } int64_t DataExtractor::getSLEB128(uint64_t *offset_ptr) const { assert(*offset_ptr <= Data.size()); const char *error; unsigned bytes_read; int64_t result = decodeSLEB128( reinterpret_cast(Data.data() + *offset_ptr), &bytes_read, reinterpret_cast(Data.data() + Data.size()), &error); if (error) return 0; *offset_ptr += bytes_read; return result; } void DataExtractor::skip(Cursor &C, uint64_t Length) const { ErrorAsOutParameter ErrAsOut(&C.Err); if (isError(&C.Err)) return; if (isValidOffsetForDataOfSize(C.Offset, Length)) C.Offset += Length; else unexpectedEndReached(&C.Err); } binaryen-version_108/third_party/llvm-project/Debug.cpp000066400000000000000000000125711423707623100234540ustar00rootroot00000000000000//===-- Debug.cpp - An easy way to add debug output to your code ----------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements a handy way of adding debugging information to your // code, without it being enabled all of the time, and without having to add // command line options to enable it. // // In particular, just wrap your code with the LLVM_DEBUG() macro, and it will // be enabled automatically if you specify '-debug' on the command-line. // Alternatively, you can also use the SET_DEBUG_TYPE("foo") macro to specify // that your debug code belongs to class "foo". Then, on the command line, you // can specify '-debug-only=foo' to enable JUST the debug information for the // foo class. // // When compiling without assertions, the -debug-* options and all code in // LLVM_DEBUG() statements disappears, so it does not affect the runtime of the // code. // //===----------------------------------------------------------------------===// #include "llvm/Support/Debug.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Signals.h" #include "llvm/Support/circular_raw_ostream.h" #include "llvm/Support/raw_ostream.h" #undef isCurrentDebugType #undef setCurrentDebugType #undef setCurrentDebugTypes using namespace llvm; // Even though LLVM might be built with NDEBUG, define symbols that the code // built without NDEBUG can depend on via the llvm/Support/Debug.h header. namespace llvm { /// Exported boolean set by the -debug option. bool DebugFlag = false; #if 0 // XXX BINARYEN static ManagedStatic> CurrentDebugType; #endif /// Return true if the specified string is the debug type /// specified on the command line, or if none was specified on the command line /// with the -debug-only=X option. bool isCurrentDebugType(const char *DebugType) { llvm_unreachable("debug type"); } /// Set the current debug type, as if the -debug-only=X /// option were specified. Note that DebugFlag also needs to be set to true for /// debug output to be produced. /// void setCurrentDebugTypes(const char **Types, unsigned Count); void setCurrentDebugType(const char *Type) { setCurrentDebugTypes(&Type, 1); } void setCurrentDebugTypes(const char **Types, unsigned Count) { llvm_unreachable("set debug type"); } } // namespace llvm // All Debug.h functionality is a no-op in NDEBUG mode. #if 0 // XXX BINARYEN ndef NDEBUG // -debug - Command line option to enable the DEBUG statements in the passes. // This flag may only be enabled in debug builds. static cl::opt Debug("debug", cl::desc("Enable debug output"), cl::Hidden, cl::location(DebugFlag)); // -debug-buffer-size - Buffer the last N characters of debug output //until program termination. static cl::opt DebugBufferSize("debug-buffer-size", cl::desc("Buffer the last N characters of debug output " "until program termination. " "[default 0 -- immediate print-out]"), cl::Hidden, cl::init(0)); namespace { struct DebugOnlyOpt { void operator=(const std::string &Val) const { if (Val.empty()) return; DebugFlag = true; SmallVector dbgTypes; StringRef(Val).split(dbgTypes, ',', -1, false); for (auto dbgType : dbgTypes) CurrentDebugType->push_back(dbgType); } }; } static DebugOnlyOpt DebugOnlyOptLoc; static cl::opt > DebugOnly("debug-only", cl::desc("Enable a specific type of debug output (comma separated list of types)"), cl::Hidden, cl::ZeroOrMore, cl::value_desc("debug string"), cl::location(DebugOnlyOptLoc), cl::ValueRequired); // Signal handlers - dump debug output on termination. static void debug_user_sig_handler(void *Cookie) { // This is a bit sneaky. Since this is under #ifndef NDEBUG, we // know that debug mode is enabled and dbgs() really is a // circular_raw_ostream. If NDEBUG is defined, then dbgs() == // errs() but this will never be invoked. llvm::circular_raw_ostream &dbgout = static_cast(llvm::dbgs()); dbgout.flushBufferWithBanner(); } /// dbgs - Return a circular-buffered debug stream. raw_ostream &llvm::dbgs() { // Do one-time initialization in a thread-safe way. static struct dbgstream { circular_raw_ostream strm; dbgstream() : strm(errs(), "*** Debug Log Output ***\n", (!EnableDebugBuffering || !DebugFlag) ? 0 : DebugBufferSize) { if (EnableDebugBuffering && DebugFlag && DebugBufferSize != 0) // TODO: Add a handler for SIGUSER1-type signals so the user can // force a debug dump. sys::AddSignalHandler(&debug_user_sig_handler, nullptr); // Otherwise we've already set the debug stream buffer size to // zero, disabling buffering so it will output directly to errs(). } } thestrm; return thestrm.strm; } #else // Avoid "has no symbols" warning. namespace llvm { /// dbgs - Return errs(). raw_ostream &dbgs() { return errs(); } } #endif /// EnableDebugBuffering - Turn on signal handler installation. /// bool llvm::EnableDebugBuffering = false; binaryen-version_108/third_party/llvm-project/Dwarf.cpp000066400000000000000000000541511423707623100234710ustar00rootroot00000000000000//===-- llvm/BinaryFormat/Dwarf.cpp - Dwarf Framework ------------*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains support for generic dwarf information. // //===----------------------------------------------------------------------===// #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/ErrorHandling.h" using namespace llvm; using namespace dwarf; StringRef llvm::dwarf::TagString(unsigned Tag) { switch (Tag) { default: return StringRef(); #define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \ case DW_TAG_##NAME: \ return "DW_TAG_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::getTag(StringRef TagString) { return StringSwitch(TagString) #define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \ .Case("DW_TAG_" #NAME, DW_TAG_##NAME) #include "llvm/BinaryFormat/Dwarf.def" .Default(DW_TAG_invalid); } unsigned llvm::dwarf::TagVersion(dwarf::Tag Tag) { switch (Tag) { default: return 0; #define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \ case DW_TAG_##NAME: \ return VERSION; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::TagVendor(dwarf::Tag Tag) { switch (Tag) { default: return 0; #define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \ case DW_TAG_##NAME: \ return DWARF_VENDOR_##VENDOR; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::ChildrenString(unsigned Children) { switch (Children) { case DW_CHILDREN_no: return "DW_CHILDREN_no"; case DW_CHILDREN_yes: return "DW_CHILDREN_yes"; } return StringRef(); } StringRef llvm::dwarf::AttributeString(unsigned Attribute) { switch (Attribute) { default: return StringRef(); #define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \ case DW_AT_##NAME: \ return "DW_AT_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::AttributeVersion(dwarf::Attribute Attribute) { switch (Attribute) { default: return 0; #define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \ case DW_AT_##NAME: \ return VERSION; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::AttributeVendor(dwarf::Attribute Attribute) { switch (Attribute) { default: return 0; #define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \ case DW_AT_##NAME: \ return DWARF_VENDOR_##VENDOR; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::FormEncodingString(unsigned Encoding) { switch (Encoding) { default: return StringRef(); #define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \ case DW_FORM_##NAME: \ return "DW_FORM_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::FormVersion(dwarf::Form Form) { switch (Form) { default: return 0; #define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \ case DW_FORM_##NAME: \ return VERSION; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::FormVendor(dwarf::Form Form) { switch (Form) { default: return 0; #define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \ case DW_FORM_##NAME: \ return DWARF_VENDOR_##VENDOR; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::OperationEncodingString(unsigned Encoding) { switch (Encoding) { default: return StringRef(); #define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \ case DW_OP_##NAME: \ return "DW_OP_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" case DW_OP_LLVM_convert: return "DW_OP_LLVM_convert"; case DW_OP_LLVM_fragment: return "DW_OP_LLVM_fragment"; case DW_OP_LLVM_tag_offset: return "DW_OP_LLVM_tag_offset"; case DW_OP_LLVM_entry_value: return "DW_OP_LLVM_entry_value"; } } unsigned llvm::dwarf::getOperationEncoding(StringRef OperationEncodingString) { return StringSwitch(OperationEncodingString) #define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \ .Case("DW_OP_" #NAME, DW_OP_##NAME) #include "llvm/BinaryFormat/Dwarf.def" .Case("DW_OP_LLVM_convert", DW_OP_LLVM_convert) .Case("DW_OP_LLVM_fragment", DW_OP_LLVM_fragment) .Case("DW_OP_LLVM_tag_offset", DW_OP_LLVM_tag_offset) .Case("DW_OP_LLVM_entry_value", DW_OP_LLVM_entry_value) .Default(0); } unsigned llvm::dwarf::OperationVersion(dwarf::LocationAtom Op) { switch (Op) { default: return 0; #define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \ case DW_OP_##NAME: \ return VERSION; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::OperationVendor(dwarf::LocationAtom Op) { switch (Op) { default: return 0; #define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \ case DW_OP_##NAME: \ return DWARF_VENDOR_##VENDOR; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::AttributeEncodingString(unsigned Encoding) { switch (Encoding) { default: return StringRef(); #define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \ case DW_ATE_##NAME: \ return "DW_ATE_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::getAttributeEncoding(StringRef EncodingString) { return StringSwitch(EncodingString) #define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \ .Case("DW_ATE_" #NAME, DW_ATE_##NAME) #include "llvm/BinaryFormat/Dwarf.def" .Default(0); } unsigned llvm::dwarf::AttributeEncodingVersion(dwarf::TypeKind ATE) { switch (ATE) { default: return 0; #define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \ case DW_ATE_##NAME: \ return VERSION; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::AttributeEncodingVendor(dwarf::TypeKind ATE) { switch (ATE) { default: return 0; #define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \ case DW_ATE_##NAME: \ return DWARF_VENDOR_##VENDOR; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::DecimalSignString(unsigned Sign) { switch (Sign) { case DW_DS_unsigned: return "DW_DS_unsigned"; case DW_DS_leading_overpunch: return "DW_DS_leading_overpunch"; case DW_DS_trailing_overpunch: return "DW_DS_trailing_overpunch"; case DW_DS_leading_separate: return "DW_DS_leading_separate"; case DW_DS_trailing_separate: return "DW_DS_trailing_separate"; } return StringRef(); } StringRef llvm::dwarf::EndianityString(unsigned Endian) { switch (Endian) { case DW_END_default: return "DW_END_default"; case DW_END_big: return "DW_END_big"; case DW_END_little: return "DW_END_little"; case DW_END_lo_user: return "DW_END_lo_user"; case DW_END_hi_user: return "DW_END_hi_user"; } return StringRef(); } StringRef llvm::dwarf::AccessibilityString(unsigned Access) { switch (Access) { // Accessibility codes case DW_ACCESS_public: return "DW_ACCESS_public"; case DW_ACCESS_protected: return "DW_ACCESS_protected"; case DW_ACCESS_private: return "DW_ACCESS_private"; } return StringRef(); } StringRef llvm::dwarf::DefaultedMemberString(unsigned DefaultedEncodings) { switch (DefaultedEncodings) { // Defaulted Member Encodings codes case DW_DEFAULTED_no: return "DW_DEFAULTED_no"; case DW_DEFAULTED_in_class: return "DW_DEFAULTED_in_class"; case DW_DEFAULTED_out_of_class: return "DW_DEFAULTED_out_of_class"; } return StringRef(); } StringRef llvm::dwarf::VisibilityString(unsigned Visibility) { switch (Visibility) { case DW_VIS_local: return "DW_VIS_local"; case DW_VIS_exported: return "DW_VIS_exported"; case DW_VIS_qualified: return "DW_VIS_qualified"; } return StringRef(); } StringRef llvm::dwarf::VirtualityString(unsigned Virtuality) { switch (Virtuality) { default: return StringRef(); #define HANDLE_DW_VIRTUALITY(ID, NAME) \ case DW_VIRTUALITY_##NAME: \ return "DW_VIRTUALITY_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::getVirtuality(StringRef VirtualityString) { return StringSwitch(VirtualityString) #define HANDLE_DW_VIRTUALITY(ID, NAME) \ .Case("DW_VIRTUALITY_" #NAME, DW_VIRTUALITY_##NAME) #include "llvm/BinaryFormat/Dwarf.def" .Default(DW_VIRTUALITY_invalid); } StringRef llvm::dwarf::LanguageString(unsigned Language) { switch (Language) { default: return StringRef(); #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \ case DW_LANG_##NAME: \ return "DW_LANG_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::getLanguage(StringRef LanguageString) { return StringSwitch(LanguageString) #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \ .Case("DW_LANG_" #NAME, DW_LANG_##NAME) #include "llvm/BinaryFormat/Dwarf.def" .Default(0); } unsigned llvm::dwarf::LanguageVersion(dwarf::SourceLanguage Lang) { switch (Lang) { default: return 0; #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \ case DW_LANG_##NAME: \ return VERSION; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::LanguageVendor(dwarf::SourceLanguage Lang) { switch (Lang) { default: return 0; #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \ case DW_LANG_##NAME: \ return DWARF_VENDOR_##VENDOR; #include "llvm/BinaryFormat/Dwarf.def" } } Optional llvm::dwarf::LanguageLowerBound(dwarf::SourceLanguage Lang) { switch (Lang) { default: return None; #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \ case DW_LANG_##NAME: \ return LOWER_BOUND; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::CaseString(unsigned Case) { switch (Case) { case DW_ID_case_sensitive: return "DW_ID_case_sensitive"; case DW_ID_up_case: return "DW_ID_up_case"; case DW_ID_down_case: return "DW_ID_down_case"; case DW_ID_case_insensitive: return "DW_ID_case_insensitive"; } return StringRef(); } StringRef llvm::dwarf::ConventionString(unsigned CC) { switch (CC) { default: return StringRef(); #define HANDLE_DW_CC(ID, NAME) \ case DW_CC_##NAME: \ return "DW_CC_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } unsigned llvm::dwarf::getCallingConvention(StringRef CCString) { return StringSwitch(CCString) #define HANDLE_DW_CC(ID, NAME) .Case("DW_CC_" #NAME, DW_CC_##NAME) #include "llvm/BinaryFormat/Dwarf.def" .Default(0); } StringRef llvm::dwarf::InlineCodeString(unsigned Code) { switch (Code) { case DW_INL_not_inlined: return "DW_INL_not_inlined"; case DW_INL_inlined: return "DW_INL_inlined"; case DW_INL_declared_not_inlined: return "DW_INL_declared_not_inlined"; case DW_INL_declared_inlined: return "DW_INL_declared_inlined"; } return StringRef(); } StringRef llvm::dwarf::ArrayOrderString(unsigned Order) { switch (Order) { case DW_ORD_row_major: return "DW_ORD_row_major"; case DW_ORD_col_major: return "DW_ORD_col_major"; } return StringRef(); } StringRef llvm::dwarf::LNStandardString(unsigned Standard) { switch (Standard) { default: return StringRef(); #define HANDLE_DW_LNS(ID, NAME) \ case DW_LNS_##NAME: \ return "DW_LNS_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::LNExtendedString(unsigned Encoding) { switch (Encoding) { default: return StringRef(); #define HANDLE_DW_LNE(ID, NAME) \ case DW_LNE_##NAME: \ return "DW_LNE_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::MacinfoString(unsigned Encoding) { switch (Encoding) { // Macinfo Type Encodings case DW_MACINFO_define: return "DW_MACINFO_define"; case DW_MACINFO_undef: return "DW_MACINFO_undef"; case DW_MACINFO_start_file: return "DW_MACINFO_start_file"; case DW_MACINFO_end_file: return "DW_MACINFO_end_file"; case DW_MACINFO_vendor_ext: return "DW_MACINFO_vendor_ext"; case DW_MACINFO_invalid: return "DW_MACINFO_invalid"; } return StringRef(); } unsigned llvm::dwarf::getMacinfo(StringRef MacinfoString) { return StringSwitch(MacinfoString) .Case("DW_MACINFO_define", DW_MACINFO_define) .Case("DW_MACINFO_undef", DW_MACINFO_undef) .Case("DW_MACINFO_start_file", DW_MACINFO_start_file) .Case("DW_MACINFO_end_file", DW_MACINFO_end_file) .Case("DW_MACINFO_vendor_ext", DW_MACINFO_vendor_ext) .Default(DW_MACINFO_invalid); } StringRef llvm::dwarf::RangeListEncodingString(unsigned Encoding) { switch (Encoding) { default: return StringRef(); #define HANDLE_DW_RLE(ID, NAME) \ case DW_RLE_##NAME: \ return "DW_RLE_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::LocListEncodingString(unsigned Encoding) { switch (Encoding) { default: return StringRef(); #define HANDLE_DW_LLE(ID, NAME) \ case DW_LLE_##NAME: \ return "DW_LLE_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::CallFrameString(unsigned Encoding, Triple::ArchType Arch) { assert(Arch != llvm::Triple::ArchType::UnknownArch); #define SELECT_AARCH64 (Arch == llvm::Triple::aarch64_be || Arch == llvm::Triple::aarch64) #define SELECT_MIPS64 Arch == llvm::Triple::mips64 #define SELECT_SPARC (Arch == llvm::Triple::sparc || Arch == llvm::Triple::sparcv9) #define SELECT_X86 (Arch == llvm::Triple::x86 || Arch == llvm::Triple::x86_64) #define HANDLE_DW_CFA(ID, NAME) #define HANDLE_DW_CFA_PRED(ID, NAME, PRED) \ if (ID == Encoding && PRED) \ return "DW_CFA_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" switch (Encoding) { default: return StringRef(); #define HANDLE_DW_CFA_PRED(ID, NAME, PRED) #define HANDLE_DW_CFA(ID, NAME) \ case DW_CFA_##NAME: \ return "DW_CFA_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" #undef SELECT_X86 #undef SELECT_SPARC #undef SELECT_MIPS64 #undef SELECT_AARCH64 } } StringRef llvm::dwarf::ApplePropertyString(unsigned Prop) { switch (Prop) { default: return StringRef(); #define HANDLE_DW_APPLE_PROPERTY(ID, NAME) \ case DW_APPLE_PROPERTY_##NAME: \ return "DW_APPLE_PROPERTY_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::UnitTypeString(unsigned UT) { switch (UT) { default: return StringRef(); #define HANDLE_DW_UT(ID, NAME) \ case DW_UT_##NAME: \ return "DW_UT_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } StringRef llvm::dwarf::AtomTypeString(unsigned AT) { switch (AT) { case dwarf::DW_ATOM_null: return "DW_ATOM_null"; case dwarf::DW_ATOM_die_offset: return "DW_ATOM_die_offset"; case DW_ATOM_cu_offset: return "DW_ATOM_cu_offset"; case DW_ATOM_die_tag: return "DW_ATOM_die_tag"; case DW_ATOM_type_flags: case DW_ATOM_type_type_flags: return "DW_ATOM_type_flags"; case DW_ATOM_qual_name_hash: return "DW_ATOM_qual_name_hash"; } return StringRef(); } StringRef llvm::dwarf::GDBIndexEntryKindString(GDBIndexEntryKind Kind) { switch (Kind) { case GIEK_NONE: return "NONE"; case GIEK_TYPE: return "TYPE"; case GIEK_VARIABLE: return "VARIABLE"; case GIEK_FUNCTION: return "FUNCTION"; case GIEK_OTHER: return "OTHER"; case GIEK_UNUSED5: return "UNUSED5"; case GIEK_UNUSED6: return "UNUSED6"; case GIEK_UNUSED7: return "UNUSED7"; } llvm_unreachable("Unknown GDBIndexEntryKind value"); } StringRef llvm::dwarf::GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage) { switch (Linkage) { case GIEL_EXTERNAL: return "EXTERNAL"; case GIEL_STATIC: return "STATIC"; } llvm_unreachable("Unknown GDBIndexEntryLinkage value"); } StringRef llvm::dwarf::AttributeValueString(uint16_t Attr, unsigned Val) { switch (Attr) { case DW_AT_accessibility: return AccessibilityString(Val); case DW_AT_virtuality: return VirtualityString(Val); case DW_AT_language: return LanguageString(Val); case DW_AT_encoding: return AttributeEncodingString(Val); case DW_AT_decimal_sign: return DecimalSignString(Val); case DW_AT_endianity: return EndianityString(Val); case DW_AT_visibility: return VisibilityString(Val); case DW_AT_identifier_case: return CaseString(Val); case DW_AT_calling_convention: return ConventionString(Val); case DW_AT_inline: return InlineCodeString(Val); case DW_AT_ordering: return ArrayOrderString(Val); case DW_AT_APPLE_runtime_class: return LanguageString(Val); case DW_AT_defaulted: return DefaultedMemberString(Val); } return StringRef(); } StringRef llvm::dwarf::AtomValueString(uint16_t Atom, unsigned Val) { switch (Atom) { case DW_ATOM_null: return "NULL"; case DW_ATOM_die_tag: return TagString(Val); } return StringRef(); } StringRef llvm::dwarf::IndexString(unsigned Idx) { switch (Idx) { default: return StringRef(); #define HANDLE_DW_IDX(ID, NAME) \ case DW_IDX_##NAME: \ return "DW_IDX_" #NAME; #include "llvm/BinaryFormat/Dwarf.def" } } Optional llvm::dwarf::getFixedFormByteSize(dwarf::Form Form, FormParams Params) { switch (Form) { case DW_FORM_addr: if (Params) return Params.AddrSize; return None; case DW_FORM_block: // ULEB128 length L followed by L bytes. case DW_FORM_block1: // 1 byte length L followed by L bytes. case DW_FORM_block2: // 2 byte length L followed by L bytes. case DW_FORM_block4: // 4 byte length L followed by L bytes. case DW_FORM_string: // C-string with null terminator. case DW_FORM_sdata: // SLEB128. case DW_FORM_udata: // ULEB128. case DW_FORM_ref_udata: // ULEB128. case DW_FORM_indirect: // ULEB128. case DW_FORM_exprloc: // ULEB128 length L followed by L bytes. case DW_FORM_strx: // ULEB128. case DW_FORM_addrx: // ULEB128. case DW_FORM_loclistx: // ULEB128. case DW_FORM_rnglistx: // ULEB128. case DW_FORM_GNU_addr_index: // ULEB128. case DW_FORM_GNU_str_index: // ULEB128. return None; case DW_FORM_ref_addr: if (Params) return Params.getRefAddrByteSize(); return None; case DW_FORM_flag: case DW_FORM_data1: case DW_FORM_ref1: case DW_FORM_strx1: case DW_FORM_addrx1: return 1; case DW_FORM_data2: case DW_FORM_ref2: case DW_FORM_strx2: case DW_FORM_addrx2: return 2; case DW_FORM_strx3: return 3; case DW_FORM_data4: case DW_FORM_ref4: case DW_FORM_ref_sup4: case DW_FORM_strx4: case DW_FORM_addrx4: return 4; case DW_FORM_strp: case DW_FORM_GNU_ref_alt: case DW_FORM_GNU_strp_alt: case DW_FORM_line_strp: case DW_FORM_sec_offset: case DW_FORM_strp_sup: if (Params) return Params.getDwarfOffsetByteSize(); return None; case DW_FORM_data8: case DW_FORM_ref8: case DW_FORM_ref_sig8: case DW_FORM_ref_sup8: return 8; case DW_FORM_flag_present: return 0; case DW_FORM_data16: return 16; case DW_FORM_implicit_const: // The implicit value is stored in the abbreviation as a SLEB128, and // there no data in debug info. return 0; default: break; } return None; } bool llvm::dwarf::isValidFormForVersion(Form F, unsigned Version, bool ExtensionsOk) { if (FormVendor(F) == DWARF_VENDOR_DWARF) { unsigned FV = FormVersion(F); return FV > 0 && FV <= Version; } return ExtensionsOk; } constexpr char llvm::dwarf::EnumTraits::Type[]; constexpr char llvm::dwarf::EnumTraits::Type[]; constexpr char llvm::dwarf::EnumTraits::Type[]; constexpr char llvm::dwarf::EnumTraits::Type[]; binaryen-version_108/third_party/llvm-project/Error.cpp000066400000000000000000000110251423707623100235100ustar00rootroot00000000000000//===----- lib/Support/Error.cpp - Error and associated utilities ---------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Support/Error.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ManagedStatic.h" #include using namespace llvm; namespace { enum class ErrorErrorCode : int { MultipleErrors = 1, FileError, InconvertibleError }; // FIXME: This class is only here to support the transition to llvm::Error. It // will be removed once this transition is complete. Clients should prefer to // deal with the Error value directly, rather than converting to error_code. class ErrorErrorCategory : public std::error_category { public: const char *name() const noexcept override { return "Error"; } std::string message(int condition) const override { switch (static_cast(condition)) { case ErrorErrorCode::MultipleErrors: return "Multiple errors"; case ErrorErrorCode::InconvertibleError: return "Inconvertible error value. An error has occurred that could " "not be converted to a known std::error_code. Please file a " "bug."; case ErrorErrorCode::FileError: return "A file error occurred."; } llvm_unreachable("Unhandled error code"); } }; } #if 0 // XXX BINARYEN static ManagedStatic ErrorErrorCat; #endif namespace llvm { void ErrorInfoBase::anchor() {} char ErrorInfoBase::ID = 0; char ErrorList::ID = 0; void ECError::anchor() {} char ECError::ID = 0; char StringError::ID = 0; char FileError::ID = 0; void logAllUnhandledErrors(Error E, raw_ostream &OS, Twine ErrorBanner) { if (!E) return; OS << ErrorBanner; handleAllErrors(std::move(E), [&](const ErrorInfoBase &EI) { EI.log(OS); OS << "\n"; }); } std::error_code ErrorList::convertToErrorCode() const { llvm_unreachable("convert error code"); } std::error_code inconvertibleErrorCode() { llvm_unreachable("inconvertible error code"); } std::error_code FileError::convertToErrorCode() const { llvm_unreachable("(file) convert error code"); } Error errorCodeToError(std::error_code EC) { if (!EC) return Error::success(); return Error(std::make_unique(ECError(EC))); } std::error_code errorToErrorCode(Error Err) { std::error_code EC; handleAllErrors(std::move(Err), [&](const ErrorInfoBase &EI) { EC = EI.convertToErrorCode(); }); if (EC == inconvertibleErrorCode()) report_fatal_error(EC.message()); return EC; } #if LLVM_ENABLE_ABI_BREAKING_CHECKS void Error::fatalUncheckedError() const { dbgs() << "Program aborted due to an unhandled Error:\n"; if (getPtr()) getPtr()->log(dbgs()); else dbgs() << "Error value was Success. (Note: Success values must still be " "checked prior to being destroyed).\n"; abort(); } #endif StringError::StringError(std::error_code EC, const Twine &S) : Msg(S.str()), EC(EC) {} StringError::StringError(const Twine &S, std::error_code EC) : Msg(S.str()), EC(EC), PrintMsgOnly(true) {} void StringError::log(raw_ostream &OS) const { if (PrintMsgOnly) { OS << Msg; } else { OS << EC.message(); if (!Msg.empty()) OS << (" " + Msg); } } std::error_code StringError::convertToErrorCode() const { return EC; } Error createStringError(std::error_code EC, char const *Msg) { return make_error(Msg, EC); } void report_fatal_error(Error Err, bool GenCrashDiag) { assert(Err && "report_fatal_error called with success value"); std::string ErrMsg; { raw_string_ostream ErrStream(ErrMsg); logAllUnhandledErrors(std::move(Err), ErrStream); } report_fatal_error(ErrMsg); } } // end namespace llvm LLVMErrorTypeId LLVMGetErrorTypeId(LLVMErrorRef Err) { return reinterpret_cast(Err)->dynamicClassID(); } void LLVMConsumeError(LLVMErrorRef Err) { consumeError(unwrap(Err)); } char *LLVMGetErrorMessage(LLVMErrorRef Err) { std::string Tmp = toString(unwrap(Err)); char *ErrMsg = new char[Tmp.size() + 1]; memcpy(ErrMsg, Tmp.data(), Tmp.size()); ErrMsg[Tmp.size()] = '\0'; return ErrMsg; } void LLVMDisposeErrorMessage(char *ErrMsg) { delete[] ErrMsg; } LLVMErrorTypeId LLVMGetStringErrorTypeId() { return reinterpret_cast(&StringError::ID); } binaryen-version_108/third_party/llvm-project/Error.h000066400000000000000000000027471423707623100231700ustar00rootroot00000000000000//===- Error.h - system_error extensions for obj2yaml -----------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_OBJ2YAML_ERROR_H #define LLVM_TOOLS_OBJ2YAML_ERROR_H #include "llvm/Support/Error.h" #include namespace llvm { const std::error_category &obj2yaml_category(); enum class obj2yaml_error { success = 0, file_not_found, unrecognized_file_format, unsupported_obj_file_format, not_implemented }; inline std::error_code make_error_code(obj2yaml_error e) { return std::error_code(static_cast(e), obj2yaml_category()); } class Obj2YamlError : public ErrorInfo { public: static char ID; Obj2YamlError(obj2yaml_error C) : Code(C) {} Obj2YamlError(std::string ErrMsg) : ErrMsg(std::move(ErrMsg)) {} Obj2YamlError(obj2yaml_error C, std::string ErrMsg) : ErrMsg(std::move(ErrMsg)), Code(C) {} void log(raw_ostream &OS) const override; const std::string &getErrorMessage() const { return ErrMsg; } std::error_code convertToErrorCode() const override; private: std::string ErrMsg; obj2yaml_error Code = obj2yaml_error::success; }; } // namespace llvm namespace std { template <> struct is_error_code_enum : std::true_type {}; } #endif binaryen-version_108/third_party/llvm-project/ErrorHandling.cpp000066400000000000000000000263041423707623100251630ustar00rootroot00000000000000//===- lib/Support/ErrorHandling.cpp - Callbacks for errors ---------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines an API used to indicate fatal error conditions. Non-fatal // errors (most of them) should be handled through LLVMContext. // //===----------------------------------------------------------------------===// #include "llvm/Support/ErrorHandling.h" #include "llvm-c/ErrorHandling.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Twine.h" #include "llvm/Config/config.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Error.h" #include "llvm/Support/Signals.h" #include "llvm/Support/Threading.h" #include "llvm/Support/WindowsError.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include // XXX BINARYEN #if defined(HAVE_UNISTD_H) # include #endif #if defined(_MSC_VER) # include # include #endif using namespace llvm; static fatal_error_handler_t ErrorHandler = nullptr; static void *ErrorHandlerUserData = nullptr; static fatal_error_handler_t BadAllocErrorHandler = nullptr; static void *BadAllocErrorHandlerUserData = nullptr; #if LLVM_ENABLE_THREADS == 1 // Mutexes to synchronize installing error handlers and calling error handlers. // Do not use ManagedStatic, or that may allocate memory while attempting to // report an OOM. // // This usage of std::mutex has to be conditionalized behind ifdefs because // of this script: // compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh // That script attempts to statically link the LLVM symbolizer library with the // STL and hide all of its symbols with 'opt -internalize'. To reduce size, it // cuts out the threading portions of the hermetic copy of libc++ that it // builds. We can remove these ifdefs if that script goes away. static std::mutex ErrorHandlerMutex; static std::mutex BadAllocErrorHandlerMutex; #endif void llvm::install_fatal_error_handler(fatal_error_handler_t handler, void *user_data) { #if LLVM_ENABLE_THREADS == 1 std::lock_guard Lock(ErrorHandlerMutex); #endif assert(!ErrorHandler && "Error handler already registered!\n"); ErrorHandler = handler; ErrorHandlerUserData = user_data; } void llvm::remove_fatal_error_handler() { #if LLVM_ENABLE_THREADS == 1 std::lock_guard Lock(ErrorHandlerMutex); #endif ErrorHandler = nullptr; ErrorHandlerUserData = nullptr; } void llvm::report_fatal_error(const char *Reason, bool GenCrashDiag) { report_fatal_error(Twine(Reason), GenCrashDiag); } void llvm::report_fatal_error(const std::string &Reason, bool GenCrashDiag) { report_fatal_error(Twine(Reason), GenCrashDiag); } void llvm::report_fatal_error(StringRef Reason, bool GenCrashDiag) { report_fatal_error(Twine(Reason), GenCrashDiag); } void llvm::report_fatal_error(const Twine &Reason, bool GenCrashDiag) { Reason.dump(); #if 0 // XXX BINARYEN llvm::fatal_error_handler_t handler = nullptr; void* handlerData = nullptr; { // Only acquire the mutex while reading the handler, so as not to invoke a // user-supplied callback under a lock. #if LLVM_ENABLE_THREADS == 1 std::lock_guard Lock(ErrorHandlerMutex); #endif handler = ErrorHandler; handlerData = ErrorHandlerUserData; } if (handler) { handler(handlerData, Reason.str(), GenCrashDiag); } else { // Blast the result out to stderr. We don't try hard to make sure this // succeeds (e.g. handling EINTR) and we can't use errs() here because // raw ostreams can call report_fatal_error. SmallVector Buffer; raw_svector_ostream OS(Buffer); OS << "LLVM ERROR: " << Reason << "\n"; ssize_t written = ::write(2, MessageStr.data(), MessageStr.size()); StringRef MessageStr = OS.str(); (void)written; // If something went wrong, we deliberately just give up. } // If we reached here, we are failing ungracefully. Run the interrupt handlers // to make sure any special cleanups get done, in particular that we remove // files registered with RemoveFileOnSignal. sys::RunInterruptHandlers(); #else Reason.dump(); #endif exit(1); } void llvm::install_bad_alloc_error_handler(fatal_error_handler_t handler, void *user_data) { #if LLVM_ENABLE_THREADS == 1 std::lock_guard Lock(BadAllocErrorHandlerMutex); #endif assert(!ErrorHandler && "Bad alloc error handler already registered!\n"); BadAllocErrorHandler = handler; BadAllocErrorHandlerUserData = user_data; } void llvm::remove_bad_alloc_error_handler() { #if LLVM_ENABLE_THREADS == 1 std::lock_guard Lock(BadAllocErrorHandlerMutex); #endif BadAllocErrorHandler = nullptr; BadAllocErrorHandlerUserData = nullptr; } void llvm::report_bad_alloc_error(const char *Reason, bool GenCrashDiag) { fatal_error_handler_t Handler = nullptr; void *HandlerData = nullptr; { // Only acquire the mutex while reading the handler, so as not to invoke a // user-supplied callback under a lock. #if LLVM_ENABLE_THREADS == 1 std::lock_guard Lock(BadAllocErrorHandlerMutex); #endif Handler = BadAllocErrorHandler; HandlerData = BadAllocErrorHandlerUserData; } if (Handler) { Handler(HandlerData, Reason, GenCrashDiag); llvm_unreachable("bad alloc handler should not return"); } #ifdef LLVM_ENABLE_EXCEPTIONS // If exceptions are enabled, make OOM in malloc look like OOM in new. throw std::bad_alloc(); #else // Don't call the normal error handler. It may allocate memory. Directly write // an OOM to stderr and abort. char OOMMessage[] = "LLVM ERROR: out of memory\n"; ssize_t written = ::write(2, OOMMessage, strlen(OOMMessage)); (void)written; abort(); #endif } #ifdef LLVM_ENABLE_EXCEPTIONS // Do not set custom new handler if exceptions are enabled. In this case OOM // errors are handled by throwing 'std::bad_alloc'. void llvm::install_out_of_memory_new_handler() { } #else // Causes crash on allocation failure. It is called prior to the handler set by // 'install_bad_alloc_error_handler'. static void out_of_memory_new_handler() { llvm::report_bad_alloc_error("Allocation failed"); } // Installs new handler that causes crash on allocation failure. It is called by // InitLLVM. void llvm::install_out_of_memory_new_handler() { std::new_handler old = std::set_new_handler(out_of_memory_new_handler); (void)old; assert(old == nullptr && "new-handler already installed"); } #endif void llvm::llvm_unreachable_internal(const char *msg, const char *file, unsigned line) { // This code intentionally doesn't call the ErrorHandler callback, because // llvm_unreachable is intended to be used to indicate "impossible" // situations, and not legitimate runtime errors. // XXX BINARYEN: use cout if (msg) std::cout << msg << "\n"; std::cout << "UNREACHABLE executed"; if (file) std::cout << " at " << file << ":" << line; std::cout << "!\n"; abort(); #ifdef LLVM_BUILTIN_UNREACHABLE // Windows systems and possibly others don't declare abort() to be noreturn, // so use the unreachable builtin to avoid a Clang self-host warning. LLVM_BUILTIN_UNREACHABLE; #endif } static void bindingsErrorHandler(void *user_data, const std::string& reason, bool gen_crash_diag) { LLVMFatalErrorHandler handler = LLVM_EXTENSION reinterpret_cast(user_data); handler(reason.c_str()); } void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler) { install_fatal_error_handler(bindingsErrorHandler, LLVM_EXTENSION reinterpret_cast(Handler)); } void LLVMResetFatalErrorHandler() { remove_fatal_error_handler(); } #ifdef _WIN32 #include // I'd rather not double the line count of the following. #define MAP_ERR_TO_COND(x, y) \ case x: \ return make_error_code(errc::y) std::error_code llvm::mapWindowsError(unsigned EV) { switch (EV) { MAP_ERR_TO_COND(ERROR_ACCESS_DENIED, permission_denied); MAP_ERR_TO_COND(ERROR_ALREADY_EXISTS, file_exists); MAP_ERR_TO_COND(ERROR_BAD_UNIT, no_such_device); MAP_ERR_TO_COND(ERROR_BUFFER_OVERFLOW, filename_too_long); MAP_ERR_TO_COND(ERROR_BUSY, device_or_resource_busy); MAP_ERR_TO_COND(ERROR_BUSY_DRIVE, device_or_resource_busy); MAP_ERR_TO_COND(ERROR_CANNOT_MAKE, permission_denied); MAP_ERR_TO_COND(ERROR_CANTOPEN, io_error); MAP_ERR_TO_COND(ERROR_CANTREAD, io_error); MAP_ERR_TO_COND(ERROR_CANTWRITE, io_error); MAP_ERR_TO_COND(ERROR_CURRENT_DIRECTORY, permission_denied); MAP_ERR_TO_COND(ERROR_DEV_NOT_EXIST, no_such_device); MAP_ERR_TO_COND(ERROR_DEVICE_IN_USE, device_or_resource_busy); MAP_ERR_TO_COND(ERROR_DIR_NOT_EMPTY, directory_not_empty); MAP_ERR_TO_COND(ERROR_DIRECTORY, invalid_argument); MAP_ERR_TO_COND(ERROR_DISK_FULL, no_space_on_device); MAP_ERR_TO_COND(ERROR_FILE_EXISTS, file_exists); MAP_ERR_TO_COND(ERROR_FILE_NOT_FOUND, no_such_file_or_directory); MAP_ERR_TO_COND(ERROR_HANDLE_DISK_FULL, no_space_on_device); MAP_ERR_TO_COND(ERROR_INVALID_ACCESS, permission_denied); MAP_ERR_TO_COND(ERROR_INVALID_DRIVE, no_such_device); MAP_ERR_TO_COND(ERROR_INVALID_FUNCTION, function_not_supported); MAP_ERR_TO_COND(ERROR_INVALID_HANDLE, invalid_argument); MAP_ERR_TO_COND(ERROR_INVALID_NAME, invalid_argument); MAP_ERR_TO_COND(ERROR_LOCK_VIOLATION, no_lock_available); MAP_ERR_TO_COND(ERROR_LOCKED, no_lock_available); MAP_ERR_TO_COND(ERROR_NEGATIVE_SEEK, invalid_argument); MAP_ERR_TO_COND(ERROR_NOACCESS, permission_denied); MAP_ERR_TO_COND(ERROR_NOT_ENOUGH_MEMORY, not_enough_memory); MAP_ERR_TO_COND(ERROR_NOT_READY, resource_unavailable_try_again); MAP_ERR_TO_COND(ERROR_OPEN_FAILED, io_error); MAP_ERR_TO_COND(ERROR_OPEN_FILES, device_or_resource_busy); MAP_ERR_TO_COND(ERROR_OUTOFMEMORY, not_enough_memory); MAP_ERR_TO_COND(ERROR_PATH_NOT_FOUND, no_such_file_or_directory); MAP_ERR_TO_COND(ERROR_BAD_NETPATH, no_such_file_or_directory); MAP_ERR_TO_COND(ERROR_READ_FAULT, io_error); MAP_ERR_TO_COND(ERROR_RETRY, resource_unavailable_try_again); MAP_ERR_TO_COND(ERROR_SEEK, io_error); MAP_ERR_TO_COND(ERROR_SHARING_VIOLATION, permission_denied); MAP_ERR_TO_COND(ERROR_TOO_MANY_OPEN_FILES, too_many_files_open); MAP_ERR_TO_COND(ERROR_WRITE_FAULT, io_error); MAP_ERR_TO_COND(ERROR_WRITE_PROTECT, permission_denied); MAP_ERR_TO_COND(WSAEACCES, permission_denied); MAP_ERR_TO_COND(WSAEBADF, bad_file_descriptor); MAP_ERR_TO_COND(WSAEFAULT, bad_address); MAP_ERR_TO_COND(WSAEINTR, interrupted); MAP_ERR_TO_COND(WSAEINVAL, invalid_argument); MAP_ERR_TO_COND(WSAEMFILE, too_many_files_open); MAP_ERR_TO_COND(WSAENAMETOOLONG, filename_too_long); default: return std::error_code(EV, std::system_category()); } } #endif binaryen-version_108/third_party/llvm-project/FormatVariadic.cpp000066400000000000000000000122201423707623100253100ustar00rootroot00000000000000//===- FormatVariadic.cpp - Format string parsing and analysis ----*-C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception //===----------------------------------------------------------------------===// #include "llvm/Support/FormatVariadic.h" using namespace llvm; static Optional translateLocChar(char C) { switch (C) { case '-': return AlignStyle::Left; case '=': return AlignStyle::Center; case '+': return AlignStyle::Right; default: return None; } LLVM_BUILTIN_UNREACHABLE; } bool formatv_object_base::consumeFieldLayout(StringRef &Spec, AlignStyle &Where, size_t &Align, char &Pad) { Where = AlignStyle::Right; Align = 0; Pad = ' '; if (Spec.empty()) return true; if (Spec.size() > 1) { // A maximum of 2 characters at the beginning can be used for something // other // than the width. // If Spec[1] is a loc char, then Spec[0] is a pad char and Spec[2:...] // contains the width. // Otherwise, if Spec[0] is a loc char, then Spec[1:...] contains the width. // Otherwise, Spec[0:...] contains the width. if (auto Loc = translateLocChar(Spec[1])) { Pad = Spec[0]; Where = *Loc; Spec = Spec.drop_front(2); } else if (auto Loc = translateLocChar(Spec[0])) { Where = *Loc; Spec = Spec.drop_front(1); } } bool Failed = Spec.consumeInteger(0, Align); return !Failed; } Optional formatv_object_base::parseReplacementItem(StringRef Spec) { StringRef RepString = Spec.trim("{}"); // If the replacement sequence does not start with a non-negative integer, // this is an error. char Pad = ' '; std::size_t Align = 0; AlignStyle Where = AlignStyle::Right; StringRef Options; size_t Index = 0; RepString = RepString.trim(); if (RepString.consumeInteger(0, Index)) { assert(false && "Invalid replacement sequence index!"); return ReplacementItem{}; } RepString = RepString.trim(); if (!RepString.empty() && RepString.front() == ',') { RepString = RepString.drop_front(); if (!consumeFieldLayout(RepString, Where, Align, Pad)) assert(false && "Invalid replacement field layout specification!"); } RepString = RepString.trim(); if (!RepString.empty() && RepString.front() == ':') { Options = RepString.drop_front().trim(); RepString = StringRef(); } RepString = RepString.trim(); if (!RepString.empty()) { assert(false && "Unexpected characters found in replacement string!"); } return ReplacementItem{Spec, Index, Align, Where, Pad, Options}; } std::pair formatv_object_base::splitLiteralAndReplacement(StringRef Fmt) { std::size_t From = 0; while (From < Fmt.size() && From != StringRef::npos) { std::size_t BO = Fmt.find_first_of('{', From); // Everything up until the first brace is a literal. if (BO != 0) return std::make_pair(ReplacementItem{Fmt.substr(0, BO)}, Fmt.substr(BO)); StringRef Braces = Fmt.drop_front(BO).take_while([](char C) { return C == '{'; }); // If there is more than one brace, then some of them are escaped. Treat // these as replacements. if (Braces.size() > 1) { size_t NumEscapedBraces = Braces.size() / 2; StringRef Middle = Fmt.substr(BO, NumEscapedBraces); StringRef Right = Fmt.drop_front(BO + NumEscapedBraces * 2); return std::make_pair(ReplacementItem{Middle}, Right); } // An unterminated open brace is undefined. We treat the rest of the string // as a literal replacement, but we assert to indicate that this is // undefined and that we consider it an error. std::size_t BC = Fmt.find_first_of('}', BO); if (BC == StringRef::npos) { assert( false && "Unterminated brace sequence. Escape with {{ for a literal brace."); return std::make_pair(ReplacementItem{Fmt}, StringRef()); } // Even if there is a closing brace, if there is another open brace before // this closing brace, treat this portion as literal, and try again with the // next one. std::size_t BO2 = Fmt.find_first_of('{', BO + 1); if (BO2 < BC) return std::make_pair(ReplacementItem{Fmt.substr(0, BO2)}, Fmt.substr(BO2)); StringRef Spec = Fmt.slice(BO + 1, BC); StringRef Right = Fmt.substr(BC + 1); auto RI = parseReplacementItem(Spec); if (RI.hasValue()) return std::make_pair(*RI, Right); // If there was an error parsing the replacement item, treat it as an // invalid replacement spec, and just continue. From = BC + 1; } return std::make_pair(ReplacementItem{Fmt}, StringRef()); } std::vector formatv_object_base::parseFormatString(StringRef Fmt) { std::vector Replacements; ReplacementItem I; while (!Fmt.empty()) { std::tie(I, Fmt) = splitLiteralAndReplacement(Fmt); if (I.Type != ReplacementType::Empty) Replacements.push_back(I); } return Replacements; } void detail::format_adapter::anchor() { } binaryen-version_108/third_party/llvm-project/Hashing.cpp000066400000000000000000000022421423707623100240010ustar00rootroot00000000000000//===-------------- lib/Support/Hashing.cpp -------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file provides implementation bits for the LLVM common hashing // infrastructure. Documentation and most of the other information is in the // header file. // //===----------------------------------------------------------------------===// #include "llvm/ADT/Hashing.h" using namespace llvm; // Provide a definition and static initializer for the fixed seed. This // initializer should always be zero to ensure its value can never appear to be // non-zero, even during dynamic initialization. uint64_t llvm::hashing::detail::fixed_seed_override = 0; // Implement the function for forced setting of the fixed seed. // FIXME: Use atomic operations here so that there is no data race. void llvm::set_fixed_execution_hash_seed(uint64_t fixed_value) { hashing::detail::fixed_seed_override = fixed_value; } binaryen-version_108/third_party/llvm-project/LEB128.cpp000066400000000000000000000022771423707623100232650ustar00rootroot00000000000000//===- LEB128.cpp - LEB128 utility functions implementation -----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements some utility functions for encoding SLEB128 and // ULEB128 values. // //===----------------------------------------------------------------------===// #include "llvm/Support/LEB128.h" namespace llvm { /// Utility function to get the size of the ULEB128-encoded value. unsigned getULEB128Size(uint64_t Value) { unsigned Size = 0; do { Value >>= 7; Size += sizeof(int8_t); } while (Value); return Size; } /// Utility function to get the size of the SLEB128-encoded value. unsigned getSLEB128Size(int64_t Value) { unsigned Size = 0; int Sign = Value >> (8 * sizeof(Value) - 1); bool IsMore; do { unsigned Byte = Value & 0x7f; Value >>= 7; IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0; Size += sizeof(int8_t); } while (IsMore); return Size; } } // namespace llvm binaryen-version_108/third_party/llvm-project/LineIterator.cpp000066400000000000000000000051651423707623100250300ustar00rootroot00000000000000//===- LineIterator.cpp - Implementation of line iteration ----------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Support/LineIterator.h" #include "llvm/Support/MemoryBuffer.h" using namespace llvm; static bool isAtLineEnd(const char *P) { if (*P == '\n') return true; if (*P == '\r' && *(P + 1) == '\n') return true; return false; } static bool skipIfAtLineEnd(const char *&P) { if (*P == '\n') { ++P; return true; } if (*P == '\r' && *(P + 1) == '\n') { P += 2; return true; } return false; } line_iterator::line_iterator(const MemoryBuffer &Buffer, bool SkipBlanks, char CommentMarker) : Buffer(Buffer.getBufferSize() ? &Buffer : nullptr), CommentMarker(CommentMarker), SkipBlanks(SkipBlanks), LineNumber(1), CurrentLine(Buffer.getBufferSize() ? Buffer.getBufferStart() : nullptr, 0) { // Ensure that if we are constructed on a non-empty memory buffer that it is // a null terminated buffer. if (Buffer.getBufferSize()) { assert(Buffer.getBufferEnd()[0] == '\0'); // Make sure we don't skip a leading newline if we're keeping blanks if (SkipBlanks || !isAtLineEnd(Buffer.getBufferStart())) advance(); } } void line_iterator::advance() { assert(Buffer && "Cannot advance past the end!"); const char *Pos = CurrentLine.end(); assert(Pos == Buffer->getBufferStart() || isAtLineEnd(Pos) || *Pos == '\0'); if (skipIfAtLineEnd(Pos)) ++LineNumber; if (!SkipBlanks && isAtLineEnd(Pos)) { // Nothing to do for a blank line. } else if (CommentMarker == '\0') { // If we're not stripping comments, this is simpler. while (skipIfAtLineEnd(Pos)) ++LineNumber; } else { // Skip comments and count line numbers, which is a bit more complex. for (;;) { if (isAtLineEnd(Pos) && !SkipBlanks) break; if (*Pos == CommentMarker) do { ++Pos; } while (*Pos != '\0' && !isAtLineEnd(Pos)); if (!skipIfAtLineEnd(Pos)) break; ++LineNumber; } } if (*Pos == '\0') { // We've hit the end of the buffer, reset ourselves to the end state. Buffer = nullptr; CurrentLine = StringRef(); return; } // Measure the line. size_t Length = 0; while (Pos[Length] != '\0' && !isAtLineEnd(&Pos[Length])) { ++Length; } CurrentLine = StringRef(Pos, Length); } binaryen-version_108/third_party/llvm-project/MCRegisterInfo.cpp000066400000000000000000000114061423707623100252420ustar00rootroot00000000000000//===- MC/MCRegisterInfo.cpp - Target Register Description ----------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements MCRegisterInfo functions. // //===----------------------------------------------------------------------===// #include "llvm/MC/MCRegisterInfo.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/ErrorHandling.h" #include #include #include using namespace llvm; MCRegister MCRegisterInfo::getMatchingSuperReg(MCRegister Reg, unsigned SubIdx, const MCRegisterClass *RC) const { for (MCSuperRegIterator Supers(Reg, this); Supers.isValid(); ++Supers) if (RC->contains(*Supers) && Reg == getSubReg(*Supers, SubIdx)) return *Supers; return 0; } MCRegister MCRegisterInfo::getSubReg(MCRegister Reg, unsigned Idx) const { assert(Idx && Idx < getNumSubRegIndices() && "This is not a subregister index"); // Get a pointer to the corresponding SubRegIndices list. This list has the // name of each sub-register in the same order as MCSubRegIterator. const uint16_t *SRI = SubRegIndices + get(Reg).SubRegIndices; for (MCSubRegIterator Subs(Reg, this); Subs.isValid(); ++Subs, ++SRI) if (*SRI == Idx) return *Subs; return 0; } unsigned MCRegisterInfo::getSubRegIndex(MCRegister Reg, MCRegister SubReg) const { assert(SubReg && SubReg < getNumRegs() && "This is not a register"); // Get a pointer to the corresponding SubRegIndices list. This list has the // name of each sub-register in the same order as MCSubRegIterator. const uint16_t *SRI = SubRegIndices + get(Reg).SubRegIndices; for (MCSubRegIterator Subs(Reg, this); Subs.isValid(); ++Subs, ++SRI) if (*Subs == SubReg) return *SRI; return 0; } unsigned MCRegisterInfo::getSubRegIdxSize(unsigned Idx) const { assert(Idx && Idx < getNumSubRegIndices() && "This is not a subregister index"); return SubRegIdxRanges[Idx].Size; } unsigned MCRegisterInfo::getSubRegIdxOffset(unsigned Idx) const { assert(Idx && Idx < getNumSubRegIndices() && "This is not a subregister index"); return SubRegIdxRanges[Idx].Offset; } int MCRegisterInfo::getDwarfRegNum(MCRegister RegNum, bool isEH) const { const DwarfLLVMRegPair *M = isEH ? EHL2DwarfRegs : L2DwarfRegs; unsigned Size = isEH ? EHL2DwarfRegsSize : L2DwarfRegsSize; if (!M) return -1; DwarfLLVMRegPair Key = { RegNum, 0 }; const DwarfLLVMRegPair *I = std::lower_bound(M, M+Size, Key); if (I == M+Size || I->FromReg != RegNum) return -1; return I->ToReg; } Optional MCRegisterInfo::getLLVMRegNum(unsigned RegNum, bool isEH) const { const DwarfLLVMRegPair *M = isEH ? EHDwarf2LRegs : Dwarf2LRegs; unsigned Size = isEH ? EHDwarf2LRegsSize : Dwarf2LRegsSize; if (!M) return None; DwarfLLVMRegPair Key = { RegNum, 0 }; const DwarfLLVMRegPair *I = std::lower_bound(M, M+Size, Key); if (I != M + Size && I->FromReg == RegNum) return I->ToReg; return None; } int MCRegisterInfo::getDwarfRegNumFromDwarfEHRegNum(unsigned RegNum) const { // On ELF platforms, DWARF EH register numbers are the same as DWARF // other register numbers. On Darwin x86, they differ and so need to be // mapped. The .cfi_* directives accept integer literals as well as // register names and should generate exactly what the assembly code // asked for, so there might be DWARF/EH register numbers that don't have // a corresponding LLVM register number at all. So if we can't map the // EH register number to an LLVM register number, assume it's just a // valid DWARF register number as is. if (Optional LRegNum = getLLVMRegNum(RegNum, true)) return getDwarfRegNum(*LRegNum, false); return RegNum; } int MCRegisterInfo::getSEHRegNum(MCRegister RegNum) const { const DenseMap::const_iterator I = L2SEHRegs.find(RegNum); if (I == L2SEHRegs.end()) return (int)RegNum; return I->second; } int MCRegisterInfo::getCodeViewRegNum(MCRegister RegNum) const { if (L2CVRegs.empty()) report_fatal_error("target does not implement codeview register mapping"); const DenseMap::const_iterator I = L2CVRegs.find(RegNum); if (I == L2CVRegs.end()) report_fatal_error("unknown codeview register " + (RegNum < getNumRegs() ? getName(RegNum) : Twine(RegNum))); return I->second; } binaryen-version_108/third_party/llvm-project/MD5.cpp000066400000000000000000000217251423707623100230140ustar00rootroot00000000000000/* * This code is derived from (original license follows): * * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. * MD5 Message-Digest Algorithm (RFC 1321). * * Homepage: * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 * * Author: * Alexander Peslyak, better known as Solar Designer * * This software was written by Alexander Peslyak in 2001. No copyright is * claimed, and the software is hereby placed in the public domain. * In case this attempt to disclaim copyright and place the software in the * public domain is deemed null and void, then the software is * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the * general public under the following terms: * * Redistribution and use in source and binary forms, with or without * modification, are permitted. * * There's ABSOLUTELY NO WARRANTY, express or implied. * * (This is a heavily cut-down "BSD license".) * * This differs from Colin Plumb's older public domain implementation in that * no exactly 32-bit integer data type is required (any 32-bit or wider * unsigned integer data type will do), there's no compile-time endianness * configuration, and the function prototypes match OpenSSL's. No code from * Colin Plumb's implementation has been reused; this comment merely compares * the properties of the two independent implementations. * * The primary goals of this implementation are portability and ease of use. * It is meant to be fast, but not as fast as possible. Some known * optimizations are not included to reduce source code size and avoid * compile-time configuration. */ #include "llvm/Support/MD5.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Endian.h" #include "llvm/Support/Format.h" #include "llvm/Support/raw_ostream.h" #include #include #include // The basic MD5 functions. // F and G are optimized compared to their RFC 1321 definitions for // architectures that lack an AND-NOT instruction, just like in Colin Plumb's // implementation. #define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) #define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y)))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | ~(z))) // The MD5 transformation for all four rounds. #define STEP(f, a, b, c, d, x, t, s) \ (a) += f((b), (c), (d)) + (x) + (t); \ (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \ (a) += (b); // SET reads 4 input bytes in little-endian byte order and stores them // in a properly aligned word in host byte order. #define SET(n) \ (block[(n)] = \ (MD5_u32plus) ptr[(n) * 4] | ((MD5_u32plus) ptr[(n) * 4 + 1] << 8) | \ ((MD5_u32plus) ptr[(n) * 4 + 2] << 16) | \ ((MD5_u32plus) ptr[(n) * 4 + 3] << 24)) #define GET(n) (block[(n)]) using namespace llvm; /// This processes one or more 64-byte data blocks, but does NOT update ///the bit counters. There are no alignment requirements. const uint8_t *MD5::body(ArrayRef Data) { const uint8_t *ptr; MD5_u32plus a, b, c, d; MD5_u32plus saved_a, saved_b, saved_c, saved_d; unsigned long Size = Data.size(); ptr = Data.data(); a = this->a; b = this->b; c = this->c; d = this->d; do { saved_a = a; saved_b = b; saved_c = c; saved_d = d; // Round 1 STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7) STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12) STEP(F, c, d, a, b, SET(2), 0x242070db, 17) STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22) STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7) STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12) STEP(F, c, d, a, b, SET(6), 0xa8304613, 17) STEP(F, b, c, d, a, SET(7), 0xfd469501, 22) STEP(F, a, b, c, d, SET(8), 0x698098d8, 7) STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12) STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17) STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22) STEP(F, a, b, c, d, SET(12), 0x6b901122, 7) STEP(F, d, a, b, c, SET(13), 0xfd987193, 12) STEP(F, c, d, a, b, SET(14), 0xa679438e, 17) STEP(F, b, c, d, a, SET(15), 0x49b40821, 22) // Round 2 STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5) STEP(G, d, a, b, c, GET(6), 0xc040b340, 9) STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14) STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20) STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5) STEP(G, d, a, b, c, GET(10), 0x02441453, 9) STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14) STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20) STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5) STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9) STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14) STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20) STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5) STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9) STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14) STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20) // Round 3 STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4) STEP(H, d, a, b, c, GET(8), 0x8771f681, 11) STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16) STEP(H, b, c, d, a, GET(14), 0xfde5380c, 23) STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4) STEP(H, d, a, b, c, GET(4), 0x4bdecfa9, 11) STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16) STEP(H, b, c, d, a, GET(10), 0xbebfbc70, 23) STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4) STEP(H, d, a, b, c, GET(0), 0xeaa127fa, 11) STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16) STEP(H, b, c, d, a, GET(6), 0x04881d05, 23) STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4) STEP(H, d, a, b, c, GET(12), 0xe6db99e5, 11) STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16) STEP(H, b, c, d, a, GET(2), 0xc4ac5665, 23) // Round 4 STEP(I, a, b, c, d, GET(0), 0xf4292244, 6) STEP(I, d, a, b, c, GET(7), 0x432aff97, 10) STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15) STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21) STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6) STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10) STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15) STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21) STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6) STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10) STEP(I, c, d, a, b, GET(6), 0xa3014314, 15) STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21) STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6) STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10) STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15) STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21) a += saved_a; b += saved_b; c += saved_c; d += saved_d; ptr += 64; } while (Size -= 64); this->a = a; this->b = b; this->c = c; this->d = d; return ptr; } MD5::MD5() = default; /// Incrementally add the bytes in \p Data to the hash. void MD5::update(ArrayRef Data) { MD5_u32plus saved_lo; unsigned long used, free; const uint8_t *Ptr = Data.data(); unsigned long Size = Data.size(); saved_lo = lo; if ((lo = (saved_lo + Size) & 0x1fffffff) < saved_lo) hi++; hi += Size >> 29; used = saved_lo & 0x3f; if (used) { free = 64 - used; if (Size < free) { memcpy(&buffer[used], Ptr, Size); return; } memcpy(&buffer[used], Ptr, free); Ptr = Ptr + free; Size -= free; body(makeArrayRef(buffer, 64)); } if (Size >= 64) { Ptr = body(makeArrayRef(Ptr, Size & ~(unsigned long) 0x3f)); Size &= 0x3f; } memcpy(buffer, Ptr, Size); } /// Add the bytes in the StringRef \p Str to the hash. // Note that this isn't a string and so this won't include any trailing NULL // bytes. void MD5::update(StringRef Str) { ArrayRef SVal((const uint8_t *)Str.data(), Str.size()); update(SVal); } /// Finish the hash and place the resulting hash into \p result. /// \param Result is assumed to be a minimum of 16-bytes in size. void MD5::final(MD5Result &Result) { unsigned long used, free; used = lo & 0x3f; buffer[used++] = 0x80; free = 64 - used; if (free < 8) { memset(&buffer[used], 0, free); body(makeArrayRef(buffer, 64)); used = 0; free = 64; } memset(&buffer[used], 0, free - 8); lo <<= 3; support::endian::write32le(&buffer[56], lo); support::endian::write32le(&buffer[60], hi); body(makeArrayRef(buffer, 64)); support::endian::write32le(&Result[0], a); support::endian::write32le(&Result[4], b); support::endian::write32le(&Result[8], c); support::endian::write32le(&Result[12], d); } SmallString<32> MD5::MD5Result::digest() const { SmallString<32> Str; raw_svector_ostream Res(Str); for (int i = 0; i < 16; ++i) Res << format("%.2x", Bytes[i]); return Str; } void MD5::stringifyResult(MD5Result &Result, SmallString<32> &Str) { Str = Result.digest(); } std::array MD5::hash(ArrayRef Data) { MD5 Hash; Hash.update(Data); MD5::MD5Result Res; Hash.final(Res); return Res; } binaryen-version_108/third_party/llvm-project/MemoryBuffer.cpp000066400000000000000000000310551423707623100250260ustar00rootroot00000000000000//===--- MemoryBuffer.cpp - Memory Buffer implementation ------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the MemoryBuffer interface. // //===----------------------------------------------------------------------===// #include "llvm/Support/MemoryBuffer.h" #include "llvm/ADT/SmallString.h" #include "llvm/Config/config.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Errno.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/Path.h" #include "llvm/Support/Process.h" #include "llvm/Support/Program.h" #include "llvm/Support/SmallVectorMemoryBuffer.h" #include #include #include #include #include #include #if !defined(_MSC_VER) && !defined(__MINGW32__) #include #else #include #endif using namespace llvm; //===----------------------------------------------------------------------===// // MemoryBuffer implementation itself. //===----------------------------------------------------------------------===// MemoryBuffer::~MemoryBuffer() { } /// init - Initialize this MemoryBuffer as a reference to externally allocated /// memory, memory that we know is already null terminated. void MemoryBuffer::init(const char *BufStart, const char *BufEnd, bool RequiresNullTerminator) { assert((!RequiresNullTerminator || BufEnd[0] == 0) && "Buffer is not null terminated!"); BufferStart = BufStart; BufferEnd = BufEnd; } //===----------------------------------------------------------------------===// // MemoryBufferMem implementation. //===----------------------------------------------------------------------===// /// CopyStringRef - Copies contents of a StringRef into a block of memory and /// null-terminates it. static void CopyStringRef(char *Memory, StringRef Data) { if (!Data.empty()) memcpy(Memory, Data.data(), Data.size()); Memory[Data.size()] = 0; // Null terminate string. } namespace { struct NamedBufferAlloc { const Twine &Name; NamedBufferAlloc(const Twine &Name) : Name(Name) {} }; } void *operator new(size_t N, const NamedBufferAlloc &Alloc) { SmallString<256> NameBuf; StringRef NameRef = Alloc.Name.toStringRef(NameBuf); char *Mem = static_cast(operator new(N + NameRef.size() + 1)); CopyStringRef(Mem + N, NameRef); return Mem; } namespace { /// MemoryBufferMem - Named MemoryBuffer pointing to a block of memory. template class MemoryBufferMem : public MB { public: MemoryBufferMem(StringRef InputData, bool RequiresNullTerminator) { MemoryBuffer::init(InputData.begin(), InputData.end(), RequiresNullTerminator); } /// Disable sized deallocation for MemoryBufferMem, because it has /// tail-allocated data. void operator delete(void *p) { ::operator delete(p); } StringRef getBufferIdentifier() const override { // The name is stored after the class itself. return StringRef(reinterpret_cast(this + 1)); } MemoryBuffer::BufferKind getBufferKind() const override { return MemoryBuffer::MemoryBuffer_Malloc; } }; } template static ErrorOr> getFileAux(const Twine &Filename, int64_t FileSize, uint64_t MapSize, uint64_t Offset, bool RequiresNullTerminator, bool IsVolatile); std::unique_ptr MemoryBuffer::getMemBuffer(StringRef InputData, StringRef BufferName, bool RequiresNullTerminator) { auto *Ret = new (NamedBufferAlloc(BufferName)) MemoryBufferMem(InputData, RequiresNullTerminator); return std::unique_ptr(Ret); } std::unique_ptr MemoryBuffer::getMemBuffer(MemoryBufferRef Ref, bool RequiresNullTerminator) { return std::unique_ptr(getMemBuffer( Ref.getBuffer(), Ref.getBufferIdentifier(), RequiresNullTerminator)); } static ErrorOr> getMemBufferCopyImpl(StringRef InputData, const Twine &BufferName) { auto Buf = WritableMemoryBuffer::getNewUninitMemBuffer(InputData.size(), BufferName); if (!Buf) return make_error_code(errc::not_enough_memory); memcpy(Buf->getBufferStart(), InputData.data(), InputData.size()); return std::move(Buf); } std::unique_ptr MemoryBuffer::getMemBufferCopy(StringRef InputData, const Twine &BufferName) { auto Buf = getMemBufferCopyImpl(InputData, BufferName); if (Buf) return std::move(*Buf); return nullptr; } ErrorOr> MemoryBuffer::getFileOrSTDIN(const Twine &Filename, int64_t FileSize, bool RequiresNullTerminator) { SmallString<256> NameBuf; StringRef NameRef = Filename.toStringRef(NameBuf); if (NameRef == "-") return getSTDIN(); return getFile(Filename, FileSize, RequiresNullTerminator); } ErrorOr> MemoryBuffer::getFileSlice(const Twine &FilePath, uint64_t MapSize, uint64_t Offset, bool IsVolatile) { return getFileAux(FilePath, -1, MapSize, Offset, false, IsVolatile); } //===----------------------------------------------------------------------===// // MemoryBuffer::getFile implementation. //===----------------------------------------------------------------------===// #if 0 // XXX BINARYEN namespace { /// Memory maps a file descriptor using sys::fs::mapped_file_region. /// /// This handles converting the offset into a legal offset on the platform. template class MemoryBufferMMapFile : public MB { sys::fs::mapped_file_region MFR; static uint64_t getLegalMapOffset(uint64_t Offset) { return Offset & ~(sys::fs::mapped_file_region::alignment() - 1); } static uint64_t getLegalMapSize(uint64_t Len, uint64_t Offset) { return Len + (Offset - getLegalMapOffset(Offset)); } const char *getStart(uint64_t Len, uint64_t Offset) { return MFR.const_data() + (Offset - getLegalMapOffset(Offset)); } public: MemoryBufferMMapFile(bool RequiresNullTerminator, sys::fs::file_t FD, uint64_t Len, uint64_t Offset, std::error_code &EC) : MFR(FD, MB::Mapmode, getLegalMapSize(Len, Offset), getLegalMapOffset(Offset), EC) { if (!EC) { const char *Start = getStart(Len, Offset); MemoryBuffer::init(Start, Start + Len, RequiresNullTerminator); } } /// Disable sized deallocation for MemoryBufferMMapFile, because it has /// tail-allocated data. void operator delete(void *p) { ::operator delete(p); } StringRef getBufferIdentifier() const override { // The name is stored after the class itself. return StringRef(reinterpret_cast(this + 1)); } MemoryBuffer::BufferKind getBufferKind() const override { return MemoryBuffer::MemoryBuffer_MMap; } }; } #endif static ErrorOr> getMemoryBufferForStream(sys::fs::file_t FD, const Twine &BufferName) { llvm_unreachable("getMemoryBufferForStream"); } ErrorOr> MemoryBuffer::getFile(const Twine &Filename, int64_t FileSize, bool RequiresNullTerminator, bool IsVolatile) { return getFileAux(Filename, FileSize, FileSize, 0, RequiresNullTerminator, IsVolatile); } template static ErrorOr> getOpenFileImpl(sys::fs::file_t FD, const Twine &Filename, uint64_t FileSize, uint64_t MapSize, int64_t Offset, bool RequiresNullTerminator, bool IsVolatile); template static ErrorOr> getFileAux(const Twine &Filename, int64_t FileSize, uint64_t MapSize, uint64_t Offset, bool RequiresNullTerminator, bool IsVolatile) { llvm_unreachable("getFileAux"); } ErrorOr> WritableMemoryBuffer::getFile(const Twine &Filename, int64_t FileSize, bool IsVolatile) { return getFileAux(Filename, FileSize, FileSize, 0, /*RequiresNullTerminator*/ false, IsVolatile); } ErrorOr> WritableMemoryBuffer::getFileSlice(const Twine &Filename, uint64_t MapSize, uint64_t Offset, bool IsVolatile) { return getFileAux(Filename, -1, MapSize, Offset, false, IsVolatile); } std::unique_ptr WritableMemoryBuffer::getNewUninitMemBuffer(size_t Size, const Twine &BufferName) { using MemBuffer = MemoryBufferMem; // Allocate space for the MemoryBuffer, the data and the name. It is important // that MemoryBuffer and data are aligned so PointerIntPair works with them. // TODO: Is 16-byte alignment enough? We copy small object files with large // alignment expectations into this buffer. SmallString<256> NameBuf; StringRef NameRef = BufferName.toStringRef(NameBuf); size_t AlignedStringLen = alignTo(sizeof(MemBuffer) + NameRef.size() + 1, 16); size_t RealLen = AlignedStringLen + Size + 1; char *Mem = static_cast(operator new(RealLen, std::nothrow)); if (!Mem) return nullptr; // The name is stored after the class itself. CopyStringRef(Mem + sizeof(MemBuffer), NameRef); // The buffer begins after the name and must be aligned. char *Buf = Mem + AlignedStringLen; Buf[Size] = 0; // Null terminate buffer. auto *Ret = new (Mem) MemBuffer(StringRef(Buf, Size), true); return std::unique_ptr(Ret); } std::unique_ptr WritableMemoryBuffer::getNewMemBuffer(size_t Size, const Twine &BufferName) { auto SB = WritableMemoryBuffer::getNewUninitMemBuffer(Size, BufferName); if (!SB) return nullptr; memset(SB->getBufferStart(), 0, Size); return SB; } static bool shouldUseMmap(sys::fs::file_t FD, size_t FileSize, size_t MapSize, off_t Offset, bool RequiresNullTerminator, int PageSize, bool IsVolatile) { // XXX BINARYEn return false; } static ErrorOr> getReadWriteFile(const Twine &Filename, uint64_t FileSize, uint64_t MapSize, uint64_t Offset) { llvm_unreachable("getReadWriteFile"); } ErrorOr> WriteThroughMemoryBuffer::getFile(const Twine &Filename, int64_t FileSize) { return getReadWriteFile(Filename, FileSize, FileSize, 0); } /// Map a subrange of the specified file as a WritableMemoryBuffer. ErrorOr> WriteThroughMemoryBuffer::getFileSlice(const Twine &Filename, uint64_t MapSize, uint64_t Offset) { return getReadWriteFile(Filename, -1, MapSize, Offset); } template static ErrorOr> getOpenFileImpl(sys::fs::file_t FD, const Twine &Filename, uint64_t FileSize, uint64_t MapSize, int64_t Offset, bool RequiresNullTerminator, bool IsVolatile) { llvm_unreachable("getOpenFileImpl"); } ErrorOr> MemoryBuffer::getOpenFile(sys::fs::file_t FD, const Twine &Filename, uint64_t FileSize, bool RequiresNullTerminator, bool IsVolatile) { return getOpenFileImpl(FD, Filename, FileSize, FileSize, 0, RequiresNullTerminator, IsVolatile); } ErrorOr> MemoryBuffer::getOpenFileSlice(sys::fs::file_t FD, const Twine &Filename, uint64_t MapSize, int64_t Offset, bool IsVolatile) { assert(MapSize != uint64_t(-1)); return getOpenFileImpl(FD, Filename, -1, MapSize, Offset, false, IsVolatile); } ErrorOr> MemoryBuffer::getSTDIN() { llvm_unreachable("getSTDIN"); } ErrorOr> MemoryBuffer::getFileAsStream(const Twine &Filename) { llvm_unreachable("getFileAsStream"); } MemoryBufferRef MemoryBuffer::getMemBufferRef() const { StringRef Data = getBuffer(); StringRef Identifier = getBufferIdentifier(); return MemoryBufferRef(Data, Identifier); } SmallVectorMemoryBuffer::~SmallVectorMemoryBuffer() {} binaryen-version_108/third_party/llvm-project/NativeFormatting.cpp000066400000000000000000000170171423707623100257070ustar00rootroot00000000000000//===- NativeFormatting.cpp - Low level formatting helpers -------*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Support/NativeFormatting.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/Format.h" #include using namespace llvm; template static int format_to_buffer(T Value, char (&Buffer)[N]) { char *EndPtr = std::end(Buffer); char *CurPtr = EndPtr; do { *--CurPtr = '0' + char(Value % 10); Value /= 10; } while (Value); return EndPtr - CurPtr; } static void writeWithCommas(raw_ostream &S, ArrayRef Buffer) { assert(!Buffer.empty()); ArrayRef ThisGroup; int InitialDigits = ((Buffer.size() - 1) % 3) + 1; ThisGroup = Buffer.take_front(InitialDigits); S.write(ThisGroup.data(), ThisGroup.size()); Buffer = Buffer.drop_front(InitialDigits); assert(Buffer.size() % 3 == 0); while (!Buffer.empty()) { S << ','; ThisGroup = Buffer.take_front(3); S.write(ThisGroup.data(), 3); Buffer = Buffer.drop_front(3); } } template static void write_unsigned_impl(raw_ostream &S, T N, size_t MinDigits, IntegerStyle Style, bool IsNegative) { static_assert(std::is_unsigned::value, "Value is not unsigned!"); char NumberBuffer[128]; std::memset(NumberBuffer, '0', sizeof(NumberBuffer)); size_t Len = 0; Len = format_to_buffer(N, NumberBuffer); if (IsNegative) S << '-'; if (Len < MinDigits && Style != IntegerStyle::Number) { for (size_t I = Len; I < MinDigits; ++I) S << '0'; } if (Style == IntegerStyle::Number) { writeWithCommas(S, ArrayRef(std::end(NumberBuffer) - Len, Len)); } else { S.write(std::end(NumberBuffer) - Len, Len); } } template static void write_unsigned(raw_ostream &S, T N, size_t MinDigits, IntegerStyle Style, bool IsNegative = false) { // Output using 32-bit div/mod if possible. if (N == static_cast(N)) write_unsigned_impl(S, static_cast(N), MinDigits, Style, IsNegative); else write_unsigned_impl(S, N, MinDigits, Style, IsNegative); } template static void write_signed(raw_ostream &S, T N, size_t MinDigits, IntegerStyle Style) { static_assert(std::is_signed::value, "Value is not signed!"); using UnsignedT = typename std::make_unsigned::type; if (N >= 0) { write_unsigned(S, static_cast(N), MinDigits, Style); return; } UnsignedT UN = -(UnsignedT)N; write_unsigned(S, UN, MinDigits, Style, true); } void llvm::write_integer(raw_ostream &S, unsigned int N, size_t MinDigits, IntegerStyle Style) { write_unsigned(S, N, MinDigits, Style); } void llvm::write_integer(raw_ostream &S, int N, size_t MinDigits, IntegerStyle Style) { write_signed(S, N, MinDigits, Style); } void llvm::write_integer(raw_ostream &S, unsigned long N, size_t MinDigits, IntegerStyle Style) { write_unsigned(S, N, MinDigits, Style); } void llvm::write_integer(raw_ostream &S, long N, size_t MinDigits, IntegerStyle Style) { write_signed(S, N, MinDigits, Style); } void llvm::write_integer(raw_ostream &S, unsigned long long N, size_t MinDigits, IntegerStyle Style) { write_unsigned(S, N, MinDigits, Style); } void llvm::write_integer(raw_ostream &S, long long N, size_t MinDigits, IntegerStyle Style) { write_signed(S, N, MinDigits, Style); } void llvm::write_hex(raw_ostream &S, uint64_t N, HexPrintStyle Style, Optional Width) { const size_t kMaxWidth = 128u; size_t W = std::min(kMaxWidth, Width.getValueOr(0u)); unsigned Nibbles = (64 - countLeadingZeros(N) + 3) / 4; bool Prefix = (Style == HexPrintStyle::PrefixLower || Style == HexPrintStyle::PrefixUpper); bool Upper = (Style == HexPrintStyle::Upper || Style == HexPrintStyle::PrefixUpper); unsigned PrefixChars = Prefix ? 2 : 0; unsigned NumChars = std::max(static_cast(W), std::max(1u, Nibbles) + PrefixChars); char NumberBuffer[kMaxWidth]; ::memset(NumberBuffer, '0', llvm::array_lengthof(NumberBuffer)); if (Prefix) NumberBuffer[1] = 'x'; char *EndPtr = NumberBuffer + NumChars; char *CurPtr = EndPtr; while (N) { unsigned char x = static_cast(N) % 16; *--CurPtr = hexdigit(x, !Upper); N /= 16; } S.write(NumberBuffer, NumChars); } void llvm::write_double(raw_ostream &S, double N, FloatStyle Style, Optional Precision) { size_t Prec = Precision.getValueOr(getDefaultPrecision(Style)); if (std::isnan(N)) { S << "nan"; return; } else if (std::isinf(N)) { S << "INF"; return; } char Letter; if (Style == FloatStyle::Exponent) Letter = 'e'; else if (Style == FloatStyle::ExponentUpper) Letter = 'E'; else Letter = 'f'; SmallString<8> Spec; llvm::raw_svector_ostream Out(Spec); Out << "%." << Prec << Letter; if (Style == FloatStyle::Exponent || Style == FloatStyle::ExponentUpper) { #ifdef _WIN32 // On MSVCRT and compatible, output of %e is incompatible to Posix // by default. Number of exponent digits should be at least 2. "%+03d" // FIXME: Implement our formatter to here or Support/Format.h! #if defined(__MINGW32__) // FIXME: It should be generic to C++11. if (N == 0.0 && std::signbit(N)) { char NegativeZero[] = "-0.000000e+00"; if (Style == FloatStyle::ExponentUpper) NegativeZero[strlen(NegativeZero) - 4] = 'E'; S << NegativeZero; return; } #else int fpcl = _fpclass(N); // negative zero if (fpcl == _FPCLASS_NZ) { char NegativeZero[] = "-0.000000e+00"; if (Style == FloatStyle::ExponentUpper) NegativeZero[strlen(NegativeZero) - 4] = 'E'; S << NegativeZero; return; } #endif char buf[32]; unsigned len; len = format(Spec.c_str(), N).snprint(buf, sizeof(buf)); if (len <= sizeof(buf) - 2) { if (len >= 5 && (buf[len - 5] == 'e' || buf[len - 5] == 'E') && buf[len - 3] == '0') { int cs = buf[len - 4]; if (cs == '+' || cs == '-') { int c1 = buf[len - 2]; int c0 = buf[len - 1]; if (isdigit(static_cast(c1)) && isdigit(static_cast(c0))) { // Trim leading '0': "...e+012" -> "...e+12\0" buf[len - 3] = c1; buf[len - 2] = c0; buf[--len] = 0; } } } S << buf; return; } #endif } if (Style == FloatStyle::Percent) N *= 100.0; char Buf[32]; format(Spec.c_str(), N).snprint(Buf, sizeof(Buf)); S << Buf; if (Style == FloatStyle::Percent) S << '%'; } bool llvm::isPrefixedHexStyle(HexPrintStyle S) { return (S == HexPrintStyle::PrefixLower || S == HexPrintStyle::PrefixUpper); } size_t llvm::getDefaultPrecision(FloatStyle Style) { switch (Style) { case FloatStyle::Exponent: case FloatStyle::ExponentUpper: return 6; // Number of decimal places. case FloatStyle::Fixed: case FloatStyle::Percent: return 2; // Number of decimal places. } LLVM_BUILTIN_UNREACHABLE; } binaryen-version_108/third_party/llvm-project/ObjectFile.cpp000066400000000000000000000066251423707623100244370ustar00rootroot00000000000000//===- ObjectFile.cpp - File format independent object file ---------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines a file format independent ObjectFile class. // //===----------------------------------------------------------------------===// #include "llvm/Object/ObjectFile.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Magic.h" #include "llvm/Object/Binary.h" #include "llvm/Object/COFF.h" #include "llvm/Object/Error.h" #include "llvm/Object/MachO.h" #include "llvm/Object/Wasm.h" #include "llvm/Support/Error.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ErrorOr.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include using namespace llvm; using namespace object; void ObjectFile::anchor() {} ObjectFile::ObjectFile(unsigned int Type, MemoryBufferRef Source) : SymbolicFile(Type, Source) {} bool SectionRef::containsSymbol(SymbolRef S) const { llvm_unreachable("containsSymbol"); // XXX BINARYEN } uint64_t ObjectFile::getSymbolValue(DataRefImpl Ref) const { uint32_t Flags = getSymbolFlags(Ref); if (Flags & SymbolRef::SF_Undefined) return 0; if (Flags & SymbolRef::SF_Common) return getCommonSymbolSize(Ref); return getSymbolValueImpl(Ref); } Error ObjectFile::printSymbolName(raw_ostream &OS, DataRefImpl Symb) const { Expected Name = getSymbolName(Symb); if (!Name) return Name.takeError(); OS << *Name; return Error::success(); } uint32_t ObjectFile::getSymbolAlignment(DataRefImpl DRI) const { return 0; } bool ObjectFile::isSectionBitcode(DataRefImpl Sec) const { Expected NameOrErr = getSectionName(Sec); if (NameOrErr) return *NameOrErr == ".llvmbc"; consumeError(NameOrErr.takeError()); return false; } bool ObjectFile::isSectionStripped(DataRefImpl Sec) const { return false; } bool ObjectFile::isBerkeleyText(DataRefImpl Sec) const { return isSectionText(Sec); } bool ObjectFile::isBerkeleyData(DataRefImpl Sec) const { return isSectionData(Sec); } Expected ObjectFile::getRelocatedSection(DataRefImpl Sec) const { return section_iterator(SectionRef(Sec, this)); } Triple ObjectFile::makeTriple() const { llvm_unreachable("makeTriple"); // XXX BINARYEN } Expected> ObjectFile::createObjectFile(MemoryBufferRef Object, file_magic Type) { llvm_unreachable("createObjectFile"); // XXX BINARYEN } #if 0 // XXX BINARYEN Expected> ObjectFile::createObjectFile(StringRef ObjectPath) { ErrorOr> FileOrErr = MemoryBuffer::getFile(ObjectPath); if (std::error_code EC = FileOrErr.getError()) return errorCodeToError(EC); std::unique_ptr Buffer = std::move(FileOrErr.get()); Expected> ObjOrErr = createObjectFile(Buffer->getMemBufferRef()); if (Error Err = ObjOrErr.takeError()) return std::move(Err); std::unique_ptr Obj = std::move(ObjOrErr.get()); return OwningBinary(std::move(Obj), std::move(Buffer)); } #endif binaryen-version_108/third_party/llvm-project/Optional.cpp000066400000000000000000000010221423707623100242000ustar00rootroot00000000000000//===- Optional.cpp - Optional values ---------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/ADT/Optional.h" #include "llvm/Support/raw_ostream.h" llvm::raw_ostream &llvm::operator<<(raw_ostream &OS, NoneType) { return OS << "None"; } binaryen-version_108/third_party/llvm-project/Path.cpp000066400000000000000000001033451423707623100233220ustar00rootroot00000000000000//===-- Path.cpp - Implement OS Path Concept ------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the operating system Path API. // //===----------------------------------------------------------------------===// #include "llvm/Support/Path.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/Config/llvm-config.h" #include "llvm/Support/Endian.h" #include "llvm/Support/Errc.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Process.h" #include "llvm/Support/Signals.h" #include #include #if !defined(_MSC_VER) && !defined(__MINGW32__) #include #else #include #endif using namespace llvm; using namespace llvm::support::endian; namespace { using llvm::StringRef; using llvm::sys::path::is_separator; using llvm::sys::path::Style; inline Style real_style(Style style) { #ifdef _WIN32 return (style == Style::posix) ? Style::posix : Style::windows; #else return (style == Style::windows) ? Style::windows : Style::posix; #endif } inline const char *separators(Style style) { if (real_style(style) == Style::windows) return "\\/"; return "/"; } inline char preferred_separator(Style style) { if (real_style(style) == Style::windows) return '\\'; return '/'; } StringRef find_first_component(StringRef path, Style style) { // Look for this first component in the following order. // * empty (in this case we return an empty string) // * either C: or {//,\\}net. // * {/,\} // * {file,directory}name if (path.empty()) return path; if (real_style(style) == Style::windows) { // C: if (path.size() >= 2 && std::isalpha(static_cast(path[0])) && path[1] == ':') return path.substr(0, 2); } // //net if ((path.size() > 2) && is_separator(path[0], style) && path[0] == path[1] && !is_separator(path[2], style)) { // Find the next directory separator. size_t end = path.find_first_of(separators(style), 2); return path.substr(0, end); } // {/,\} if (is_separator(path[0], style)) return path.substr(0, 1); // * {file,directory}name size_t end = path.find_first_of(separators(style)); return path.substr(0, end); } // Returns the first character of the filename in str. For paths ending in // '/', it returns the position of the '/'. size_t filename_pos(StringRef str, Style style) { if (str.size() > 0 && is_separator(str[str.size() - 1], style)) return str.size() - 1; size_t pos = str.find_last_of(separators(style), str.size() - 1); if (real_style(style) == Style::windows) { if (pos == StringRef::npos) pos = str.find_last_of(':', str.size() - 2); } if (pos == StringRef::npos || (pos == 1 && is_separator(str[0], style))) return 0; return pos + 1; } // Returns the position of the root directory in str. If there is no root // directory in str, it returns StringRef::npos. size_t root_dir_start(StringRef str, Style style) { // case "c:/" if (real_style(style) == Style::windows) { if (str.size() > 2 && str[1] == ':' && is_separator(str[2], style)) return 2; } // case "//net" if (str.size() > 3 && is_separator(str[0], style) && str[0] == str[1] && !is_separator(str[2], style)) { return str.find_first_of(separators(style), 2); } // case "/" if (str.size() > 0 && is_separator(str[0], style)) return 0; return StringRef::npos; } // Returns the position past the end of the "parent path" of path. The parent // path will not end in '/', unless the parent is the root directory. If the // path has no parent, 0 is returned. size_t parent_path_end(StringRef path, Style style) { size_t end_pos = filename_pos(path, style); bool filename_was_sep = path.size() > 0 && is_separator(path[end_pos], style); // Skip separators until we reach root dir (or the start of the string). size_t root_dir_pos = root_dir_start(path, style); while (end_pos > 0 && (root_dir_pos == StringRef::npos || end_pos > root_dir_pos) && is_separator(path[end_pos - 1], style)) --end_pos; if (end_pos == root_dir_pos && !filename_was_sep) { // We've reached the root dir and the input path was *not* ending in a // sequence of slashes. Include the root dir in the parent path. return root_dir_pos + 1; } // Otherwise, just include before the last slash. return end_pos; } } // end unnamed namespace enum FSEntity { FS_Dir, FS_File, FS_Name }; static std::error_code createUniqueEntity(const Twine &Model, int &ResultFD, SmallVectorImpl &ResultPath, bool MakeAbsolute, unsigned Mode, FSEntity Type, sys::fs::OpenFlags Flags = sys::fs::OF_None) { llvm_unreachable("createUniqueEntity"); // XXX BINARYEN } namespace llvm { namespace sys { namespace path { const_iterator begin(StringRef path, Style style) { const_iterator i; i.Path = path; i.Component = find_first_component(path, style); i.Position = 0; i.S = style; return i; } const_iterator end(StringRef path) { const_iterator i; i.Path = path; i.Position = path.size(); return i; } const_iterator &const_iterator::operator++() { assert(Position < Path.size() && "Tried to increment past end!"); // Increment Position to past the current component Position += Component.size(); // Check for end. if (Position == Path.size()) { Component = StringRef(); return *this; } // Both POSIX and Windows treat paths that begin with exactly two separators // specially. bool was_net = Component.size() > 2 && is_separator(Component[0], S) && Component[1] == Component[0] && !is_separator(Component[2], S); // Handle separators. if (is_separator(Path[Position], S)) { // Root dir. if (was_net || // c:/ (real_style(S) == Style::windows && Component.endswith(":"))) { Component = Path.substr(Position, 1); return *this; } // Skip extra separators. while (Position != Path.size() && is_separator(Path[Position], S)) { ++Position; } // Treat trailing '/' as a '.', unless it is the root dir. if (Position == Path.size() && Component != "/") { --Position; Component = "."; return *this; } } // Find next component. size_t end_pos = Path.find_first_of(separators(S), Position); Component = Path.slice(Position, end_pos); return *this; } bool const_iterator::operator==(const const_iterator &RHS) const { return Path.begin() == RHS.Path.begin() && Position == RHS.Position; } ptrdiff_t const_iterator::operator-(const const_iterator &RHS) const { return Position - RHS.Position; } reverse_iterator rbegin(StringRef Path, Style style) { reverse_iterator I; I.Path = Path; I.Position = Path.size(); I.S = style; ++I; return I; } reverse_iterator rend(StringRef Path) { reverse_iterator I; I.Path = Path; I.Component = Path.substr(0, 0); I.Position = 0; return I; } reverse_iterator &reverse_iterator::operator++() { size_t root_dir_pos = root_dir_start(Path, S); // Skip separators unless it's the root directory. size_t end_pos = Position; while (end_pos > 0 && (end_pos - 1) != root_dir_pos && is_separator(Path[end_pos - 1], S)) --end_pos; // Treat trailing '/' as a '.', unless it is the root dir. if (Position == Path.size() && !Path.empty() && is_separator(Path.back(), S) && (root_dir_pos == StringRef::npos || end_pos - 1 > root_dir_pos)) { --Position; Component = "."; return *this; } // Find next separator. size_t start_pos = filename_pos(Path.substr(0, end_pos), S); Component = Path.slice(start_pos, end_pos); Position = start_pos; return *this; } bool reverse_iterator::operator==(const reverse_iterator &RHS) const { return Path.begin() == RHS.Path.begin() && Component == RHS.Component && Position == RHS.Position; } ptrdiff_t reverse_iterator::operator-(const reverse_iterator &RHS) const { return Position - RHS.Position; } StringRef root_path(StringRef path, Style style) { const_iterator b = begin(path, style), pos = b, e = end(path); if (b != e) { bool has_net = b->size() > 2 && is_separator((*b)[0], style) && (*b)[1] == (*b)[0]; bool has_drive = (real_style(style) == Style::windows) && b->endswith(":"); if (has_net || has_drive) { if ((++pos != e) && is_separator((*pos)[0], style)) { // {C:/,//net/}, so get the first two components. return path.substr(0, b->size() + pos->size()); } else { // just {C:,//net}, return the first component. return *b; } } // POSIX style root directory. if (is_separator((*b)[0], style)) { return *b; } } return StringRef(); } StringRef root_name(StringRef path, Style style) { const_iterator b = begin(path, style), e = end(path); if (b != e) { bool has_net = b->size() > 2 && is_separator((*b)[0], style) && (*b)[1] == (*b)[0]; bool has_drive = (real_style(style) == Style::windows) && b->endswith(":"); if (has_net || has_drive) { // just {C:,//net}, return the first component. return *b; } } // No path or no name. return StringRef(); } StringRef root_directory(StringRef path, Style style) { const_iterator b = begin(path, style), pos = b, e = end(path); if (b != e) { bool has_net = b->size() > 2 && is_separator((*b)[0], style) && (*b)[1] == (*b)[0]; bool has_drive = (real_style(style) == Style::windows) && b->endswith(":"); if ((has_net || has_drive) && // {C:,//net}, skip to the next component. (++pos != e) && is_separator((*pos)[0], style)) { return *pos; } // POSIX style root directory. if (!has_net && is_separator((*b)[0], style)) { return *b; } } // No path or no root. return StringRef(); } StringRef relative_path(StringRef path, Style style) { StringRef root = root_path(path, style); return path.substr(root.size()); } void append(SmallVectorImpl &path, Style style, const Twine &a, const Twine &b, const Twine &c, const Twine &d) { SmallString<32> a_storage; SmallString<32> b_storage; SmallString<32> c_storage; SmallString<32> d_storage; SmallVector components; if (!a.isTriviallyEmpty()) components.push_back(a.toStringRef(a_storage)); if (!b.isTriviallyEmpty()) components.push_back(b.toStringRef(b_storage)); if (!c.isTriviallyEmpty()) components.push_back(c.toStringRef(c_storage)); if (!d.isTriviallyEmpty()) components.push_back(d.toStringRef(d_storage)); for (auto &component : components) { bool path_has_sep = !path.empty() && is_separator(path[path.size() - 1], style); if (path_has_sep) { // Strip separators from beginning of component. size_t loc = component.find_first_not_of(separators(style)); StringRef c = component.substr(loc); // Append it. path.append(c.begin(), c.end()); continue; } bool component_has_sep = !component.empty() && is_separator(component[0], style); if (!component_has_sep && !(path.empty() || has_root_name(component, style))) { // Add a separator. path.push_back(preferred_separator(style)); } path.append(component.begin(), component.end()); } } void append(SmallVectorImpl &path, const Twine &a, const Twine &b, const Twine &c, const Twine &d) { append(path, Style::native, a, b, c, d); } void append(SmallVectorImpl &path, const_iterator begin, const_iterator end, Style style) { for (; begin != end; ++begin) path::append(path, style, *begin); } StringRef parent_path(StringRef path, Style style) { size_t end_pos = parent_path_end(path, style); if (end_pos == StringRef::npos) return StringRef(); else return path.substr(0, end_pos); } void remove_filename(SmallVectorImpl &path, Style style) { size_t end_pos = parent_path_end(StringRef(path.begin(), path.size()), style); if (end_pos != StringRef::npos) path.set_size(end_pos); } void replace_extension(SmallVectorImpl &path, const Twine &extension, Style style) { StringRef p(path.begin(), path.size()); SmallString<32> ext_storage; StringRef ext = extension.toStringRef(ext_storage); // Erase existing extension. size_t pos = p.find_last_of('.'); if (pos != StringRef::npos && pos >= filename_pos(p, style)) path.set_size(pos); // Append '.' if needed. if (ext.size() > 0 && ext[0] != '.') path.push_back('.'); // Append extension. path.append(ext.begin(), ext.end()); } void replace_path_prefix(SmallVectorImpl &Path, const StringRef &OldPrefix, const StringRef &NewPrefix, Style style) { if (OldPrefix.empty() && NewPrefix.empty()) return; StringRef OrigPath(Path.begin(), Path.size()); if (!OrigPath.startswith(OldPrefix)) return; // If prefixes have the same size we can simply copy the new one over. if (OldPrefix.size() == NewPrefix.size()) { llvm::copy(NewPrefix, Path.begin()); return; } StringRef RelPath = OrigPath.substr(OldPrefix.size()); SmallString<256> NewPath; path::append(NewPath, style, NewPrefix); path::append(NewPath, style, RelPath); Path.swap(NewPath); } void native(const Twine &path, SmallVectorImpl &result, Style style) { assert((!path.isSingleStringRef() || path.getSingleStringRef().data() != result.data()) && "path and result are not allowed to overlap!"); // Clear result. result.clear(); path.toVector(result); native(result, style); } void native(SmallVectorImpl &Path, Style style) { if (Path.empty()) return; if (real_style(style) == Style::windows) { std::replace(Path.begin(), Path.end(), '/', '\\'); if (Path[0] == '~' && (Path.size() == 1 || is_separator(Path[1], style))) { llvm_unreachable("BINARYEN native"); #if 0 SmallString<128> PathHome; home_directory(PathHome); PathHome.append(Path.begin() + 1, Path.end()); Path = PathHome; #endif } } else { for (auto PI = Path.begin(), PE = Path.end(); PI < PE; ++PI) { if (*PI == '\\') { auto PN = PI + 1; if (PN < PE && *PN == '\\') ++PI; // increment once, the for loop will move over the escaped slash else *PI = '/'; } } } } std::string convert_to_slash(StringRef path, Style style) { if (real_style(style) != Style::windows) return path; std::string s = path.str(); std::replace(s.begin(), s.end(), '\\', '/'); return s; } StringRef filename(StringRef path, Style style) { return *rbegin(path, style); } StringRef stem(StringRef path, Style style) { StringRef fname = filename(path, style); size_t pos = fname.find_last_of('.'); if (pos == StringRef::npos) return fname; else if ((fname.size() == 1 && fname == ".") || (fname.size() == 2 && fname == "..")) return fname; else return fname.substr(0, pos); } StringRef extension(StringRef path, Style style) { StringRef fname = filename(path, style); size_t pos = fname.find_last_of('.'); if (pos == StringRef::npos) return StringRef(); else if ((fname.size() == 1 && fname == ".") || (fname.size() == 2 && fname == "..")) return StringRef(); else return fname.substr(pos); } bool is_separator(char value, Style style) { if (value == '/') return true; if (real_style(style) == Style::windows) return value == '\\'; return false; } StringRef get_separator(Style style) { if (real_style(style) == Style::windows) return "\\"; return "/"; } bool has_root_name(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); return !root_name(p, style).empty(); } bool has_root_directory(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); return !root_directory(p, style).empty(); } bool has_root_path(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); return !root_path(p, style).empty(); } bool has_relative_path(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); return !relative_path(p, style).empty(); } bool has_filename(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); return !filename(p, style).empty(); } bool has_parent_path(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); return !parent_path(p, style).empty(); } bool has_stem(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); return !stem(p, style).empty(); } bool has_extension(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); return !extension(p, style).empty(); } bool is_absolute(const Twine &path, Style style) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); bool rootDir = has_root_directory(p, style); bool rootName = (real_style(style) != Style::windows) || has_root_name(p, style); return rootDir && rootName; } bool is_relative(const Twine &path, Style style) { return !is_absolute(path, style); } StringRef remove_leading_dotslash(StringRef Path, Style style) { // Remove leading "./" (or ".//" or "././" etc.) while (Path.size() > 2 && Path[0] == '.' && is_separator(Path[1], style)) { Path = Path.substr(2); while (Path.size() > 0 && is_separator(Path[0], style)) Path = Path.substr(1); } return Path; } static SmallString<256> remove_dots(StringRef path, bool remove_dot_dot, Style style) { SmallVector components; // Skip the root path, then look for traversal in the components. StringRef rel = path::relative_path(path, style); for (StringRef C : llvm::make_range(path::begin(rel, style), path::end(rel))) { if (C == ".") continue; // Leading ".." will remain in the path unless it's at the root. if (remove_dot_dot && C == "..") { if (!components.empty() && components.back() != "..") { components.pop_back(); continue; } if (path::is_absolute(path, style)) continue; } components.push_back(C); } SmallString<256> buffer = path::root_path(path, style); for (StringRef C : components) path::append(buffer, style, C); return buffer; } bool remove_dots(SmallVectorImpl &path, bool remove_dot_dot, Style style) { StringRef p(path.data(), path.size()); SmallString<256> result = remove_dots(p, remove_dot_dot, style); if (result == path) return false; path.swap(result); return true; } } // end namespace path #if 0 // XXX BINARYEN namespace fs { std::error_code getUniqueID(const Twine Path, UniqueID &Result) { file_status Status; std::error_code EC = status(Path, Status); if (EC) return EC; Result = Status.getUniqueID(); return std::error_code(); } void createUniquePath(const Twine &Model, SmallVectorImpl &ResultPath, bool MakeAbsolute) { SmallString<128> ModelStorage; Model.toVector(ModelStorage); if (MakeAbsolute) { // Make model absolute by prepending a temp directory if it's not already. if (!sys::path::is_absolute(Twine(ModelStorage))) { SmallString<128> TDir; sys::path::system_temp_directory(true, TDir); sys::path::append(TDir, Twine(ModelStorage)); ModelStorage.swap(TDir); } } ResultPath = ModelStorage; ResultPath.push_back(0); ResultPath.pop_back(); // Replace '%' with random chars. for (unsigned i = 0, e = ModelStorage.size(); i != e; ++i) { if (ModelStorage[i] == '%') ResultPath[i] = "0123456789abcdef"[sys::Process::GetRandomNumber() & 15]; } } std::error_code createUniqueFile(const Twine &Model, int &ResultFd, SmallVectorImpl &ResultPath, unsigned Mode) { return createUniqueEntity(Model, ResultFd, ResultPath, false, Mode, FS_File); } static std::error_code createUniqueFile(const Twine &Model, int &ResultFd, SmallVectorImpl &ResultPath, unsigned Mode, OpenFlags Flags) { return createUniqueEntity(Model, ResultFd, ResultPath, false, Mode, FS_File, Flags); } std::error_code createUniqueFile(const Twine &Model, SmallVectorImpl &ResultPath, unsigned Mode) { int FD; auto EC = createUniqueFile(Model, FD, ResultPath, Mode); if (EC) return EC; // FD is only needed to avoid race conditions. Close it right away. close(FD); return EC; } static std::error_code createTemporaryFile(const Twine &Model, int &ResultFD, llvm::SmallVectorImpl &ResultPath, FSEntity Type) { SmallString<128> Storage; StringRef P = Model.toNullTerminatedStringRef(Storage); assert(P.find_first_of(separators(Style::native)) == StringRef::npos && "Model must be a simple filename."); // Use P.begin() so that createUniqueEntity doesn't need to recreate Storage. return createUniqueEntity(P.begin(), ResultFD, ResultPath, true, owner_read | owner_write, Type); } static std::error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix, int &ResultFD, llvm::SmallVectorImpl &ResultPath, FSEntity Type) { const char *Middle = Suffix.empty() ? "-%%%%%%" : "-%%%%%%."; return createTemporaryFile(Prefix + Middle + Suffix, ResultFD, ResultPath, Type); } std::error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix, int &ResultFD, SmallVectorImpl &ResultPath) { return createTemporaryFile(Prefix, Suffix, ResultFD, ResultPath, FS_File); } std::error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix, SmallVectorImpl &ResultPath) { int FD; auto EC = createTemporaryFile(Prefix, Suffix, FD, ResultPath); if (EC) return EC; // FD is only needed to avoid race conditions. Close it right away. close(FD); return EC; } // This is a mkdtemp with a different pattern. We use createUniqueEntity mostly // for consistency. We should try using mkdtemp. std::error_code createUniqueDirectory(const Twine &Prefix, SmallVectorImpl &ResultPath) { int Dummy; return createUniqueEntity(Prefix + "-%%%%%%", Dummy, ResultPath, true, 0, FS_Dir); } std::error_code getPotentiallyUniqueFileName(const Twine &Model, SmallVectorImpl &ResultPath) { int Dummy; return createUniqueEntity(Model, Dummy, ResultPath, false, 0, FS_Name); } std::error_code getPotentiallyUniqueTempFileName(const Twine &Prefix, StringRef Suffix, SmallVectorImpl &ResultPath) { int Dummy; return createTemporaryFile(Prefix, Suffix, Dummy, ResultPath, FS_Name); } void make_absolute(const Twine ¤t_directory, SmallVectorImpl &path) { StringRef p(path.data(), path.size()); bool rootDirectory = path::has_root_directory(p); bool rootName = path::has_root_name(p); // Already absolute. if ((rootName || real_style(Style::native) != Style::windows) && rootDirectory) return; // All of the following conditions will need the current directory. SmallString<128> current_dir; current_directory.toVector(current_dir); // Relative path. Prepend the current directory. if (!rootName && !rootDirectory) { // Append path to the current directory. path::append(current_dir, p); // Set path to the result. path.swap(current_dir); return; } if (!rootName && rootDirectory) { StringRef cdrn = path::root_name(current_dir); SmallString<128> curDirRootName(cdrn.begin(), cdrn.end()); path::append(curDirRootName, p); // Set path to the result. path.swap(curDirRootName); return; } if (rootName && !rootDirectory) { StringRef pRootName = path::root_name(p); StringRef bRootDirectory = path::root_directory(current_dir); StringRef bRelativePath = path::relative_path(current_dir); StringRef pRelativePath = path::relative_path(p); SmallString<128> res; path::append(res, pRootName, bRootDirectory, bRelativePath, pRelativePath); path.swap(res); return; } llvm_unreachable("All rootName and rootDirectory combinations should have " "occurred above!"); } std::error_code make_absolute(SmallVectorImpl &path) { if (path::is_absolute(path)) return {}; SmallString<128> current_dir; if (std::error_code ec = current_path(current_dir)) return ec; make_absolute(current_dir, path); return {}; } std::error_code create_directories(const Twine &Path, bool IgnoreExisting, perms Perms) { SmallString<128> PathStorage; StringRef P = Path.toStringRef(PathStorage); // Be optimistic and try to create the directory std::error_code EC = create_directory(P, IgnoreExisting, Perms); // If we succeeded, or had any error other than the parent not existing, just // return it. if (EC != errc::no_such_file_or_directory) return EC; // We failed because of a no_such_file_or_directory, try to create the // parent. StringRef Parent = path::parent_path(P); if (Parent.empty()) return EC; if ((EC = create_directories(Parent, IgnoreExisting, Perms))) return EC; return create_directory(P, IgnoreExisting, Perms); } static std::error_code copy_file_internal(int ReadFD, int WriteFD) { const size_t BufSize = 4096; char *Buf = new char[BufSize]; int BytesRead = 0, BytesWritten = 0; for (;;) { BytesRead = read(ReadFD, Buf, BufSize); if (BytesRead <= 0) break; while (BytesRead) { BytesWritten = write(WriteFD, Buf, BytesRead); if (BytesWritten < 0) break; BytesRead -= BytesWritten; } if (BytesWritten < 0) break; } delete[] Buf; if (BytesRead < 0 || BytesWritten < 0) return std::error_code(errno, std::generic_category()); return std::error_code(); } #ifndef __APPLE__ std::error_code copy_file(const Twine &From, const Twine &To) { int ReadFD, WriteFD; if (std::error_code EC = openFileForRead(From, ReadFD, OF_None)) return EC; if (std::error_code EC = openFileForWrite(To, WriteFD, CD_CreateAlways, OF_None)) { close(ReadFD); return EC; } std::error_code EC = copy_file_internal(ReadFD, WriteFD); close(ReadFD); close(WriteFD); return EC; } #endif std::error_code copy_file(const Twine &From, int ToFD) { int ReadFD; if (std::error_code EC = openFileForRead(From, ReadFD, OF_None)) return EC; std::error_code EC = copy_file_internal(ReadFD, ToFD); close(ReadFD); return EC; } ErrorOr md5_contents(int FD) { MD5 Hash; constexpr size_t BufSize = 4096; std::vector Buf(BufSize); int BytesRead = 0; for (;;) { BytesRead = read(FD, Buf.data(), BufSize); if (BytesRead <= 0) break; Hash.update(makeArrayRef(Buf.data(), BytesRead)); } if (BytesRead < 0) return std::error_code(errno, std::generic_category()); MD5::MD5Result Result; Hash.final(Result); return Result; } ErrorOr md5_contents(const Twine &Path) { int FD; if (auto EC = openFileForRead(Path, FD, OF_None)) return EC; auto Result = md5_contents(FD); close(FD); return Result; } bool exists(const basic_file_status &status) { return status_known(status) && status.type() != file_type::file_not_found; } bool status_known(const basic_file_status &s) { return s.type() != file_type::status_error; } file_type get_file_type(const Twine &Path, bool Follow) { file_status st; if (status(Path, st, Follow)) return file_type::status_error; return st.type(); } bool is_directory(const basic_file_status &status) { return status.type() == file_type::directory_file; } std::error_code is_directory(const Twine &path, bool &result) { file_status st; if (std::error_code ec = status(path, st)) return ec; result = is_directory(st); return std::error_code(); } bool is_regular_file(const basic_file_status &status) { return status.type() == file_type::regular_file; } std::error_code is_regular_file(const Twine &path, bool &result) { file_status st; if (std::error_code ec = status(path, st)) return ec; result = is_regular_file(st); return std::error_code(); } bool is_symlink_file(const basic_file_status &status) { return status.type() == file_type::symlink_file; } std::error_code is_symlink_file(const Twine &path, bool &result) { file_status st; if (std::error_code ec = status(path, st, false)) return ec; result = is_symlink_file(st); return std::error_code(); } bool is_other(const basic_file_status &status) { return exists(status) && !is_regular_file(status) && !is_directory(status); } std::error_code is_other(const Twine &Path, bool &Result) { file_status FileStatus; if (std::error_code EC = status(Path, FileStatus)) return EC; Result = is_other(FileStatus); return std::error_code(); } void directory_entry::replace_filename(const Twine &Filename, file_type Type, basic_file_status Status) { SmallString<128> PathStr = path::parent_path(Path); path::append(PathStr, Filename); this->Path = PathStr.str(); this->Type = Type; this->Status = Status; } ErrorOr getPermissions(const Twine &Path) { file_status Status; if (std::error_code EC = status(Path, Status)) return EC; return Status.permissions(); } } // end namespace fs #endif // XXX BINARYEN } // end namespace sys } // end namespace llvm // Include the truly platform-specific parts. #if 0 // XXX BINARYEN - we don't need platform-specific parts. #if defined(LLVM_ON_UNIX) #include "Unix/Path.inc" #endif #if defined(_WIN32) #include "Windows/Path.inc" #endif #endif #if 0 // XXX BINARYEN namespace llvm { namespace sys { namespace fs { TempFile::TempFile(StringRef Name, int FD) : TmpName(Name), FD(FD) {} TempFile::TempFile(TempFile &&Other) { *this = std::move(Other); } TempFile &TempFile::operator=(TempFile &&Other) { TmpName = std::move(Other.TmpName); FD = Other.FD; Other.Done = true; Other.FD = -1; return *this; } TempFile::~TempFile() { assert(Done); } Error TempFile::discard() { Done = true; if (FD != -1 && close(FD) == -1) { std::error_code EC = std::error_code(errno, std::generic_category()); return errorCodeToError(EC); } FD = -1; #ifdef _WIN32 // On windows closing will remove the file. TmpName = ""; return Error::success(); #else // Always try to close and remove. std::error_code RemoveEC; if (!TmpName.empty()) { RemoveEC = fs::remove(TmpName); sys::DontRemoveFileOnSignal(TmpName); if (!RemoveEC) TmpName = ""; } return errorCodeToError(RemoveEC); #endif } Error TempFile::keep(const Twine &Name) { assert(!Done); Done = true; // Always try to close and rename. #ifdef _WIN32 // If we can't cancel the delete don't rename. auto H = reinterpret_cast(_get_osfhandle(FD)); std::error_code RenameEC = setDeleteDisposition(H, false); if (!RenameEC) { RenameEC = rename_fd(FD, Name); // If rename failed because it's cross-device, copy instead if (RenameEC == std::error_code(ERROR_NOT_SAME_DEVICE, std::system_category())) { RenameEC = copy_file(TmpName, Name); setDeleteDisposition(H, true); } } // If we can't rename, discard the temporary file. if (RenameEC) setDeleteDisposition(H, true); #else std::error_code RenameEC = fs::rename(TmpName, Name); if (RenameEC) { // If we can't rename, try to copy to work around cross-device link issues. RenameEC = sys::fs::copy_file(TmpName, Name); // If we can't rename or copy, discard the temporary file. if (RenameEC) remove(TmpName); } sys::DontRemoveFileOnSignal(TmpName); #endif if (!RenameEC) TmpName = ""; if (close(FD) == -1) { std::error_code EC(errno, std::generic_category()); return errorCodeToError(EC); } FD = -1; return errorCodeToError(RenameEC); } Error TempFile::keep() { assert(!Done); Done = true; #ifdef _WIN32 auto H = reinterpret_cast(_get_osfhandle(FD)); if (std::error_code EC = setDeleteDisposition(H, false)) return errorCodeToError(EC); #else sys::DontRemoveFileOnSignal(TmpName); #endif TmpName = ""; if (close(FD) == -1) { std::error_code EC(errno, std::generic_category()); return errorCodeToError(EC); } FD = -1; return Error::success(); } Expected TempFile::create(const Twine &Model, unsigned Mode) { int FD; SmallString<128> ResultPath; if (std::error_code EC = createUniqueFile(Model, FD, ResultPath, Mode, OF_Delete)) return errorCodeToError(EC); TempFile Ret(ResultPath, FD); #ifndef _WIN32 if (sys::RemoveFileOnSignal(ResultPath)) { // Make sure we delete the file when RemoveFileOnSignal fails. consumeError(Ret.discard()); std::error_code EC(errc::operation_not_permitted); return errorCodeToError(EC); } #endif return std::move(Ret); } } } // end namsspace sys } // end namespace llvm #endif binaryen-version_108/third_party/llvm-project/ScopedPrinter.cpp000066400000000000000000000023021423707623100251760ustar00rootroot00000000000000#include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/Format.h" #include using namespace llvm::support; namespace llvm { raw_ostream &operator<<(raw_ostream &OS, const HexNumber &Value) { OS << "0x" << to_hexString(Value.Value); return OS; } const std::string to_hexString(uint64_t Value, bool UpperCase) { std::string number; llvm::raw_string_ostream stream(number); stream << format_hex_no_prefix(Value, 1, UpperCase); return stream.str(); } void ScopedPrinter::printBinaryImpl(StringRef Label, StringRef Str, ArrayRef Data, bool Block, uint32_t StartOffset) { if (Data.size() > 16) Block = true; if (Block) { startLine() << Label; if (!Str.empty()) OS << ": " << Str; OS << " (\n"; if (!Data.empty()) OS << format_bytes_with_ascii(Data, StartOffset, 16, 4, (IndentLevel + 1) * 2, true) << "\n"; startLine() << ")\n"; } else { startLine() << Label << ":"; if (!Str.empty()) OS << " " << Str; OS << " (" << format_bytes(Data, None, Data.size(), 1, 0, true) << ")\n"; } } } // namespace llvm binaryen-version_108/third_party/llvm-project/SmallVector.cpp000066400000000000000000000050001423707623100246460ustar00rootroot00000000000000//===- llvm/ADT/SmallVector.cpp - 'Normally small' vectors ----------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the SmallVector class. // //===----------------------------------------------------------------------===// #include "llvm/ADT/SmallVector.h" using namespace llvm; // Check that no bytes are wasted and everything is well-aligned. namespace { struct Struct16B { alignas(16) void *X; }; struct Struct32B { alignas(32) void *X; }; } static_assert(sizeof(SmallVector) == sizeof(unsigned) * 2 + sizeof(void *), "wasted space in SmallVector size 0"); static_assert(alignof(SmallVector) >= alignof(Struct16B), "wrong alignment for 16-byte aligned T"); static_assert(alignof(SmallVector) >= alignof(Struct32B), "wrong alignment for 32-byte aligned T"); static_assert(sizeof(SmallVector) >= alignof(Struct16B), "missing padding for 16-byte aligned T"); static_assert(sizeof(SmallVector) >= alignof(Struct32B), "missing padding for 32-byte aligned T"); static_assert(sizeof(SmallVector) == sizeof(unsigned) * 2 + sizeof(void *) * 2, "wasted space in SmallVector size 1"); /// grow_pod - This is an implementation of the grow() method which only works /// on POD-like datatypes and is out of line to reduce code duplication. void SmallVectorBase::grow_pod(void *FirstEl, size_t MinCapacity, size_t TSize) { // Ensure we can fit the new capacity in 32 bits. if (MinCapacity > UINT32_MAX) report_bad_alloc_error("SmallVector capacity overflow during allocation"); size_t NewCapacity = 2 * capacity() + 1; // Always grow. NewCapacity = std::min(std::max(NewCapacity, MinCapacity), size_t(UINT32_MAX)); void *NewElts; if (BeginX == FirstEl) { NewElts = safe_malloc(NewCapacity * TSize); // Copy the elements over. No need to run dtors on PODs. memcpy(NewElts, this->BeginX, size() * TSize); } else { // If this wasn't grown from the inline copy, grow the allocated space. NewElts = safe_realloc(this->BeginX, NewCapacity * TSize); } this->BeginX = NewElts; this->Capacity = NewCapacity; } binaryen-version_108/third_party/llvm-project/SourceMgr.cpp000066400000000000000000000421401423707623100243270ustar00rootroot00000000000000//===- SourceMgr.cpp - Manager for Simple Source Buffers & Diagnostics ----===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the SourceMgr class. This class is used as a simple // substrate for diagnostics, #include handling, and other low level things for // simple parsers. // //===----------------------------------------------------------------------===// #include "llvm/Support/SourceMgr.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/ErrorOr.h" #include "llvm/Support/Locale.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include "llvm/Support/SMLoc.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include #include #include using namespace llvm; static const size_t TabStop = 8; unsigned SourceMgr::AddIncludeFile(const std::string &Filename, SMLoc IncludeLoc, std::string &IncludedFile) { IncludedFile = Filename; ErrorOr> NewBufOrErr = MemoryBuffer::getFile(IncludedFile); // If the file didn't exist directly, see if it's in an include path. for (unsigned i = 0, e = IncludeDirectories.size(); i != e && !NewBufOrErr; ++i) { IncludedFile = IncludeDirectories[i] + sys::path::get_separator().data() + Filename; NewBufOrErr = MemoryBuffer::getFile(IncludedFile); } if (!NewBufOrErr) return 0; return AddNewSourceBuffer(std::move(*NewBufOrErr), IncludeLoc); } unsigned SourceMgr::FindBufferContainingLoc(SMLoc Loc) const { for (unsigned i = 0, e = Buffers.size(); i != e; ++i) if (Loc.getPointer() >= Buffers[i].Buffer->getBufferStart() && // Use <= here so that a pointer to the null at the end of the buffer // is included as part of the buffer. Loc.getPointer() <= Buffers[i].Buffer->getBufferEnd()) return i + 1; return 0; } template unsigned SourceMgr::SrcBuffer::getLineNumber(const char *Ptr) const { // Ensure OffsetCache is allocated and populated with offsets of all the // '\n' bytes. std::vector *Offsets = nullptr; if (OffsetCache.isNull()) { Offsets = new std::vector(); OffsetCache = Offsets; size_t Sz = Buffer->getBufferSize(); assert(Sz <= std::numeric_limits::max()); StringRef S = Buffer->getBuffer(); for (size_t N = 0; N < Sz; ++N) { if (S[N] == '\n') { Offsets->push_back(static_cast(N)); } } } else { Offsets = OffsetCache.get *>(); } const char *BufStart = Buffer->getBufferStart(); assert(Ptr >= BufStart && Ptr <= Buffer->getBufferEnd()); ptrdiff_t PtrDiff = Ptr - BufStart; assert(PtrDiff >= 0 && static_cast(PtrDiff) <= std::numeric_limits::max()); T PtrOffset = static_cast(PtrDiff); // llvm::lower_bound gives the number of EOL before PtrOffset. Add 1 to get // the line number. return llvm::lower_bound(*Offsets, PtrOffset) - Offsets->begin() + 1; } SourceMgr::SrcBuffer::SrcBuffer(SourceMgr::SrcBuffer &&Other) : Buffer(std::move(Other.Buffer)), OffsetCache(Other.OffsetCache), IncludeLoc(Other.IncludeLoc) { Other.OffsetCache = nullptr; } SourceMgr::SrcBuffer::~SrcBuffer() { if (!OffsetCache.isNull()) { if (OffsetCache.is*>()) delete OffsetCache.get*>(); else if (OffsetCache.is*>()) delete OffsetCache.get*>(); else if (OffsetCache.is*>()) delete OffsetCache.get*>(); else delete OffsetCache.get*>(); OffsetCache = nullptr; } } std::pair SourceMgr::getLineAndColumn(SMLoc Loc, unsigned BufferID) const { if (!BufferID) BufferID = FindBufferContainingLoc(Loc); assert(BufferID && "Invalid Location!"); auto &SB = getBufferInfo(BufferID); const char *Ptr = Loc.getPointer(); size_t Sz = SB.Buffer->getBufferSize(); unsigned LineNo; if (Sz <= std::numeric_limits::max()) LineNo = SB.getLineNumber(Ptr); else if (Sz <= std::numeric_limits::max()) LineNo = SB.getLineNumber(Ptr); else if (Sz <= std::numeric_limits::max()) LineNo = SB.getLineNumber(Ptr); else LineNo = SB.getLineNumber(Ptr); const char *BufStart = SB.Buffer->getBufferStart(); size_t NewlineOffs = StringRef(BufStart, Ptr-BufStart).find_last_of("\n\r"); if (NewlineOffs == StringRef::npos) NewlineOffs = ~(size_t)0; return std::make_pair(LineNo, Ptr-BufStart-NewlineOffs); } void SourceMgr::PrintIncludeStack(SMLoc IncludeLoc, raw_ostream &OS) const { if (IncludeLoc == SMLoc()) return; // Top of stack. unsigned CurBuf = FindBufferContainingLoc(IncludeLoc); assert(CurBuf && "Invalid or unspecified location!"); PrintIncludeStack(getBufferInfo(CurBuf).IncludeLoc, OS); OS << "Included from " << getBufferInfo(CurBuf).Buffer->getBufferIdentifier() << ":" << FindLineNumber(IncludeLoc, CurBuf) << ":\n"; } SMDiagnostic SourceMgr::GetMessage(SMLoc Loc, SourceMgr::DiagKind Kind, const Twine &Msg, ArrayRef Ranges, ArrayRef FixIts) const { // First thing to do: find the current buffer containing the specified // location to pull out the source line. SmallVector, 4> ColRanges; std::pair LineAndCol; StringRef BufferID = ""; std::string LineStr; if (Loc.isValid()) { unsigned CurBuf = FindBufferContainingLoc(Loc); assert(CurBuf && "Invalid or unspecified location!"); const MemoryBuffer *CurMB = getMemoryBuffer(CurBuf); BufferID = CurMB->getBufferIdentifier(); // Scan backward to find the start of the line. const char *LineStart = Loc.getPointer(); const char *BufStart = CurMB->getBufferStart(); while (LineStart != BufStart && LineStart[-1] != '\n' && LineStart[-1] != '\r') --LineStart; // Get the end of the line. const char *LineEnd = Loc.getPointer(); const char *BufEnd = CurMB->getBufferEnd(); while (LineEnd != BufEnd && LineEnd[0] != '\n' && LineEnd[0] != '\r') ++LineEnd; LineStr = std::string(LineStart, LineEnd); // Convert any ranges to column ranges that only intersect the line of the // location. for (unsigned i = 0, e = Ranges.size(); i != e; ++i) { SMRange R = Ranges[i]; if (!R.isValid()) continue; // If the line doesn't contain any part of the range, then ignore it. if (R.Start.getPointer() > LineEnd || R.End.getPointer() < LineStart) continue; // Ignore pieces of the range that go onto other lines. if (R.Start.getPointer() < LineStart) R.Start = SMLoc::getFromPointer(LineStart); if (R.End.getPointer() > LineEnd) R.End = SMLoc::getFromPointer(LineEnd); // Translate from SMLoc ranges to column ranges. // FIXME: Handle multibyte characters. ColRanges.push_back(std::make_pair(R.Start.getPointer()-LineStart, R.End.getPointer()-LineStart)); } LineAndCol = getLineAndColumn(Loc, CurBuf); } return SMDiagnostic(*this, Loc, BufferID, LineAndCol.first, LineAndCol.second-1, Kind, Msg.str(), LineStr, ColRanges, FixIts); } void SourceMgr::PrintMessage(raw_ostream &OS, const SMDiagnostic &Diagnostic, bool ShowColors) const { // Report the message with the diagnostic handler if present. if (DiagHandler) { DiagHandler(Diagnostic, DiagContext); return; } if (Diagnostic.getLoc().isValid()) { unsigned CurBuf = FindBufferContainingLoc(Diagnostic.getLoc()); assert(CurBuf && "Invalid or unspecified location!"); PrintIncludeStack(getBufferInfo(CurBuf).IncludeLoc, OS); } Diagnostic.print(nullptr, OS, ShowColors); } void SourceMgr::PrintMessage(raw_ostream &OS, SMLoc Loc, SourceMgr::DiagKind Kind, const Twine &Msg, ArrayRef Ranges, ArrayRef FixIts, bool ShowColors) const { PrintMessage(OS, GetMessage(Loc, Kind, Msg, Ranges, FixIts), ShowColors); } void SourceMgr::PrintMessage(SMLoc Loc, SourceMgr::DiagKind Kind, const Twine &Msg, ArrayRef Ranges, ArrayRef FixIts, bool ShowColors) const { PrintMessage(errs(), Loc, Kind, Msg, Ranges, FixIts, ShowColors); } //===----------------------------------------------------------------------===// // SMDiagnostic Implementation //===----------------------------------------------------------------------===// SMDiagnostic::SMDiagnostic(const SourceMgr &sm, SMLoc L, StringRef FN, int Line, int Col, SourceMgr::DiagKind Kind, StringRef Msg, StringRef LineStr, ArrayRef> Ranges, ArrayRef Hints) : SM(&sm), Loc(L), Filename(FN), LineNo(Line), ColumnNo(Col), Kind(Kind), Message(Msg), LineContents(LineStr), Ranges(Ranges.vec()), FixIts(Hints.begin(), Hints.end()) { llvm::sort(FixIts); } static void buildFixItLine(std::string &CaretLine, std::string &FixItLine, ArrayRef FixIts, ArrayRef SourceLine){ if (FixIts.empty()) return; const char *LineStart = SourceLine.begin(); const char *LineEnd = SourceLine.end(); size_t PrevHintEndCol = 0; for (ArrayRef::iterator I = FixIts.begin(), E = FixIts.end(); I != E; ++I) { // If the fixit contains a newline or tab, ignore it. if (I->getText().find_first_of("\n\r\t") != StringRef::npos) continue; SMRange R = I->getRange(); // If the line doesn't contain any part of the range, then ignore it. if (R.Start.getPointer() > LineEnd || R.End.getPointer() < LineStart) continue; // Translate from SMLoc to column. // Ignore pieces of the range that go onto other lines. // FIXME: Handle multibyte characters in the source line. unsigned FirstCol; if (R.Start.getPointer() < LineStart) FirstCol = 0; else FirstCol = R.Start.getPointer() - LineStart; // If we inserted a long previous hint, push this one forwards, and add // an extra space to show that this is not part of the previous // completion. This is sort of the best we can do when two hints appear // to overlap. // // Note that if this hint is located immediately after the previous // hint, no space will be added, since the location is more important. unsigned HintCol = FirstCol; if (HintCol < PrevHintEndCol) HintCol = PrevHintEndCol + 1; #if 0 // XXX BINARYEN // FIXME: This assertion is intended to catch unintended use of multibyte // characters in fixits. If we decide to do this, we'll have to track // separate byte widths for the source and fixit lines. assert((size_t)sys::locale::columnWidth(I->getText()) == I->getText().size()); #endif // This relies on one byte per column in our fixit hints. unsigned LastColumnModified = HintCol + I->getText().size(); if (LastColumnModified > FixItLine.size()) FixItLine.resize(LastColumnModified, ' '); std::copy(I->getText().begin(), I->getText().end(), FixItLine.begin() + HintCol); PrevHintEndCol = LastColumnModified; // For replacements, mark the removal range with '~'. // FIXME: Handle multibyte characters in the source line. unsigned LastCol; if (R.End.getPointer() >= LineEnd) LastCol = LineEnd - LineStart; else LastCol = R.End.getPointer() - LineStart; std::fill(&CaretLine[FirstCol], &CaretLine[LastCol], '~'); } } static void printSourceLine(raw_ostream &S, StringRef LineContents) { // Print out the source line one character at a time, so we can expand tabs. for (unsigned i = 0, e = LineContents.size(), OutCol = 0; i != e; ++i) { size_t NextTab = LineContents.find('\t', i); // If there were no tabs left, print the rest, we are done. if (NextTab == StringRef::npos) { S << LineContents.drop_front(i); break; } // Otherwise, print from i to NextTab. S << LineContents.slice(i, NextTab); OutCol += NextTab - i; i = NextTab; // If we have a tab, emit at least one space, then round up to 8 columns. do { S << ' '; ++OutCol; } while ((OutCol % TabStop) != 0); } S << '\n'; } static bool isNonASCII(char c) { return c & 0x80; } void SMDiagnostic::print(const char *ProgName, raw_ostream &OS, bool ShowColors, bool ShowKindLabel) const { { WithColor S(OS, raw_ostream::SAVEDCOLOR, true, false, !ShowColors); if (ProgName && ProgName[0]) S << ProgName << ": "; if (!Filename.empty()) { if (Filename == "-") S << ""; else S << Filename; if (LineNo != -1) { S << ':' << LineNo; if (ColumnNo != -1) S << ':' << (ColumnNo + 1); } S << ": "; } } if (ShowKindLabel) { switch (Kind) { case SourceMgr::DK_Error: WithColor::error(OS, "", !ShowColors); break; case SourceMgr::DK_Warning: WithColor::warning(OS, "", !ShowColors); break; case SourceMgr::DK_Note: WithColor::note(OS, "", !ShowColors); break; case SourceMgr::DK_Remark: WithColor::remark(OS, "", !ShowColors); break; } } WithColor(OS, raw_ostream::SAVEDCOLOR, true, false, !ShowColors) << Message << '\n'; if (LineNo == -1 || ColumnNo == -1) return; // FIXME: If there are multibyte or multi-column characters in the source, all // our ranges will be wrong. To do this properly, we'll need a byte-to-column // map like Clang's TextDiagnostic. For now, we'll just handle tabs by // expanding them later, and bail out rather than show incorrect ranges and // misaligned fixits for any other odd characters. if (find_if(LineContents, isNonASCII) != LineContents.end()) { printSourceLine(OS, LineContents); return; } size_t NumColumns = LineContents.size(); // Build the line with the caret and ranges. std::string CaretLine(NumColumns+1, ' '); // Expand any ranges. for (unsigned r = 0, e = Ranges.size(); r != e; ++r) { std::pair R = Ranges[r]; std::fill(&CaretLine[R.first], &CaretLine[std::min((size_t)R.second, CaretLine.size())], '~'); } // Add any fix-its. // FIXME: Find the beginning of the line properly for multibyte characters. std::string FixItInsertionLine; buildFixItLine(CaretLine, FixItInsertionLine, FixIts, makeArrayRef(Loc.getPointer() - ColumnNo, LineContents.size())); // Finally, plop on the caret. if (unsigned(ColumnNo) <= NumColumns) CaretLine[ColumnNo] = '^'; else CaretLine[NumColumns] = '^'; // ... and remove trailing whitespace so the output doesn't wrap for it. We // know that the line isn't completely empty because it has the caret in it at // least. CaretLine.erase(CaretLine.find_last_not_of(' ')+1); printSourceLine(OS, LineContents); { WithColor S(OS, raw_ostream::GREEN, true, false, !ShowColors); // Print out the caret line, matching tabs in the source line. for (unsigned i = 0, e = CaretLine.size(), OutCol = 0; i != e; ++i) { if (i >= LineContents.size() || LineContents[i] != '\t') { S << CaretLine[i]; ++OutCol; continue; } // Okay, we have a tab. Insert the appropriate number of characters. do { S << CaretLine[i]; ++OutCol; } while ((OutCol % TabStop) != 0); } S << '\n'; } // Print out the replacement line, matching tabs in the source line. if (FixItInsertionLine.empty()) return; for (size_t i = 0, e = FixItInsertionLine.size(), OutCol = 0; i < e; ++i) { if (i >= LineContents.size() || LineContents[i] != '\t') { OS << FixItInsertionLine[i]; ++OutCol; continue; } // Okay, we have a tab. Insert the appropriate number of characters. do { OS << FixItInsertionLine[i]; // FIXME: This is trying not to break up replacements, but then to re-sync // with the tabs between replacements. This will fail, though, if two // fix-it replacements are exactly adjacent, or if a fix-it contains a // space. Really we should be precomputing column widths, which we'll // need anyway for multibyte chars. if (FixItInsertionLine[i] != ' ') ++i; ++OutCol; } while (((OutCol % TabStop) != 0) && i != e); } OS << '\n'; } binaryen-version_108/third_party/llvm-project/StringMap.cpp000066400000000000000000000225241423707623100243310ustar00rootroot00000000000000//===--- StringMap.cpp - String Hash table map implementation -------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the StringMap class. // //===----------------------------------------------------------------------===// #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/DJB.h" #include "llvm/Support/MathExtras.h" #include using namespace llvm; /// Returns the number of buckets to allocate to ensure that the DenseMap can /// accommodate \p NumEntries without need to grow(). static unsigned getMinBucketToReserveForEntries(unsigned NumEntries) { // Ensure that "NumEntries * 4 < NumBuckets * 3" if (NumEntries == 0) return 0; // +1 is required because of the strict equality. // For example if NumEntries is 48, we need to return 401. return NextPowerOf2(NumEntries * 4 / 3 + 1); } StringMapImpl::StringMapImpl(unsigned InitSize, unsigned itemSize) { ItemSize = itemSize; // If a size is specified, initialize the table with that many buckets. if (InitSize) { // The table will grow when the number of entries reach 3/4 of the number of // buckets. To guarantee that "InitSize" number of entries can be inserted // in the table without growing, we allocate just what is needed here. init(getMinBucketToReserveForEntries(InitSize)); return; } // Otherwise, initialize it with zero buckets to avoid the allocation. TheTable = nullptr; NumBuckets = 0; NumItems = 0; NumTombstones = 0; } void StringMapImpl::init(unsigned InitSize) { assert((InitSize & (InitSize-1)) == 0 && "Init Size must be a power of 2 or zero!"); unsigned NewNumBuckets = InitSize ? InitSize : 16; NumItems = 0; NumTombstones = 0; TheTable = static_cast( safe_calloc(NewNumBuckets+1, sizeof(StringMapEntryBase **) + sizeof(unsigned))); // Set the member only if TheTable was successfully allocated NumBuckets = NewNumBuckets; // Allocate one extra bucket, set it to look filled so the iterators stop at // end. TheTable[NumBuckets] = (StringMapEntryBase*)2; } /// LookupBucketFor - Look up the bucket that the specified string should end /// up in. If it already exists as a key in the map, the Item pointer for the /// specified bucket will be non-null. Otherwise, it will be null. In either /// case, the FullHashValue field of the bucket will be set to the hash value /// of the string. unsigned StringMapImpl::LookupBucketFor(StringRef Name) { unsigned HTSize = NumBuckets; if (HTSize == 0) { // Hash table unallocated so far? init(16); HTSize = NumBuckets; } unsigned FullHashValue = djbHash(Name, 0); unsigned BucketNo = FullHashValue & (HTSize-1); unsigned *HashTable = (unsigned *)(TheTable + NumBuckets + 1); unsigned ProbeAmt = 1; int FirstTombstone = -1; while (true) { StringMapEntryBase *BucketItem = TheTable[BucketNo]; // If we found an empty bucket, this key isn't in the table yet, return it. if (LLVM_LIKELY(!BucketItem)) { // If we found a tombstone, we want to reuse the tombstone instead of an // empty bucket. This reduces probing. if (FirstTombstone != -1) { HashTable[FirstTombstone] = FullHashValue; return FirstTombstone; } HashTable[BucketNo] = FullHashValue; return BucketNo; } if (BucketItem == getTombstoneVal()) { // Skip over tombstones. However, remember the first one we see. if (FirstTombstone == -1) FirstTombstone = BucketNo; } else if (LLVM_LIKELY(HashTable[BucketNo] == FullHashValue)) { // If the full hash value matches, check deeply for a match. The common // case here is that we are only looking at the buckets (for item info // being non-null and for the full hash value) not at the items. This // is important for cache locality. // Do the comparison like this because Name isn't necessarily // null-terminated! char *ItemStr = (char*)BucketItem+ItemSize; if (Name == StringRef(ItemStr, BucketItem->getKeyLength())) { // We found a match! return BucketNo; } } // Okay, we didn't find the item. Probe to the next bucket. BucketNo = (BucketNo+ProbeAmt) & (HTSize-1); // Use quadratic probing, it has fewer clumping artifacts than linear // probing and has good cache behavior in the common case. ++ProbeAmt; } } /// FindKey - Look up the bucket that contains the specified key. If it exists /// in the map, return the bucket number of the key. Otherwise return -1. /// This does not modify the map. int StringMapImpl::FindKey(StringRef Key) const { unsigned HTSize = NumBuckets; if (HTSize == 0) return -1; // Really empty table? unsigned FullHashValue = djbHash(Key, 0); unsigned BucketNo = FullHashValue & (HTSize-1); unsigned *HashTable = (unsigned *)(TheTable + NumBuckets + 1); unsigned ProbeAmt = 1; while (true) { StringMapEntryBase *BucketItem = TheTable[BucketNo]; // If we found an empty bucket, this key isn't in the table yet, return. if (LLVM_LIKELY(!BucketItem)) return -1; if (BucketItem == getTombstoneVal()) { // Ignore tombstones. } else if (LLVM_LIKELY(HashTable[BucketNo] == FullHashValue)) { // If the full hash value matches, check deeply for a match. The common // case here is that we are only looking at the buckets (for item info // being non-null and for the full hash value) not at the items. This // is important for cache locality. // Do the comparison like this because NameStart isn't necessarily // null-terminated! char *ItemStr = (char*)BucketItem+ItemSize; if (Key == StringRef(ItemStr, BucketItem->getKeyLength())) { // We found a match! return BucketNo; } } // Okay, we didn't find the item. Probe to the next bucket. BucketNo = (BucketNo+ProbeAmt) & (HTSize-1); // Use quadratic probing, it has fewer clumping artifacts than linear // probing and has good cache behavior in the common case. ++ProbeAmt; } } /// RemoveKey - Remove the specified StringMapEntry from the table, but do not /// delete it. This aborts if the value isn't in the table. void StringMapImpl::RemoveKey(StringMapEntryBase *V) { const char *VStr = (char*)V + ItemSize; StringMapEntryBase *V2 = RemoveKey(StringRef(VStr, V->getKeyLength())); (void)V2; assert(V == V2 && "Didn't find key?"); } /// RemoveKey - Remove the StringMapEntry for the specified key from the /// table, returning it. If the key is not in the table, this returns null. StringMapEntryBase *StringMapImpl::RemoveKey(StringRef Key) { int Bucket = FindKey(Key); if (Bucket == -1) return nullptr; StringMapEntryBase *Result = TheTable[Bucket]; TheTable[Bucket] = getTombstoneVal(); --NumItems; ++NumTombstones; assert(NumItems + NumTombstones <= NumBuckets); return Result; } /// RehashTable - Grow the table, redistributing values into the buckets with /// the appropriate mod-of-hashtable-size. unsigned StringMapImpl::RehashTable(unsigned BucketNo) { unsigned NewSize; unsigned *HashTable = (unsigned *)(TheTable + NumBuckets + 1); // If the hash table is now more than 3/4 full, or if fewer than 1/8 of // the buckets are empty (meaning that many are filled with tombstones), // grow/rehash the table. if (LLVM_UNLIKELY(NumItems * 4 > NumBuckets * 3)) { NewSize = NumBuckets*2; } else if (LLVM_UNLIKELY(NumBuckets - (NumItems + NumTombstones) <= NumBuckets / 8)) { NewSize = NumBuckets; } else { return BucketNo; } unsigned NewBucketNo = BucketNo; // Allocate one extra bucket which will always be non-empty. This allows the // iterators to stop at end. auto NewTableArray = static_cast( safe_calloc(NewSize+1, sizeof(StringMapEntryBase *) + sizeof(unsigned))); unsigned *NewHashArray = (unsigned *)(NewTableArray + NewSize + 1); NewTableArray[NewSize] = (StringMapEntryBase*)2; // Rehash all the items into their new buckets. Luckily :) we already have // the hash values available, so we don't have to rehash any strings. for (unsigned I = 0, E = NumBuckets; I != E; ++I) { StringMapEntryBase *Bucket = TheTable[I]; if (Bucket && Bucket != getTombstoneVal()) { // Fast case, bucket available. unsigned FullHash = HashTable[I]; unsigned NewBucket = FullHash & (NewSize-1); if (!NewTableArray[NewBucket]) { NewTableArray[FullHash & (NewSize-1)] = Bucket; NewHashArray[FullHash & (NewSize-1)] = FullHash; if (I == BucketNo) NewBucketNo = NewBucket; continue; } // Otherwise probe for a spot. unsigned ProbeSize = 1; do { NewBucket = (NewBucket + ProbeSize++) & (NewSize-1); } while (NewTableArray[NewBucket]); // Finally found a slot. Fill it in. NewTableArray[NewBucket] = Bucket; NewHashArray[NewBucket] = FullHash; if (I == BucketNo) NewBucketNo = NewBucket; } } free(TheTable); TheTable = NewTableArray; NumBuckets = NewSize; NumTombstones = 0; return NewBucketNo; } binaryen-version_108/third_party/llvm-project/StringRef.cpp000066400000000000000000000363711423707623100243350ustar00rootroot00000000000000//===-- StringRef.cpp - Lightweight String References ---------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/ADT/StringRef.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APInt.h" #include "llvm/ADT/Hashing.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/edit_distance.h" #include using namespace llvm; // MSVC emits references to this into the translation units which reference it. #ifndef _MSC_VER const size_t StringRef::npos; #endif // strncasecmp() is not available on non-POSIX systems, so define an // alternative function here. static int ascii_strncasecmp(const char *LHS, const char *RHS, size_t Length) { for (size_t I = 0; I < Length; ++I) { unsigned char LHC = toLower(LHS[I]); unsigned char RHC = toLower(RHS[I]); if (LHC != RHC) return LHC < RHC ? -1 : 1; } return 0; } /// compare_lower - Compare strings, ignoring case. int StringRef::compare_lower(StringRef RHS) const { if (int Res = ascii_strncasecmp(Data, RHS.Data, std::min(Length, RHS.Length))) return Res; if (Length == RHS.Length) return 0; return Length < RHS.Length ? -1 : 1; } /// Check if this string starts with the given \p Prefix, ignoring case. bool StringRef::startswith_lower(StringRef Prefix) const { return Length >= Prefix.Length && ascii_strncasecmp(Data, Prefix.Data, Prefix.Length) == 0; } /// Check if this string ends with the given \p Suffix, ignoring case. bool StringRef::endswith_lower(StringRef Suffix) const { return Length >= Suffix.Length && ascii_strncasecmp(end() - Suffix.Length, Suffix.Data, Suffix.Length) == 0; } size_t StringRef::find_lower(char C, size_t From) const { char L = toLower(C); return find_if([L](char D) { return toLower(D) == L; }, From); } /// compare_numeric - Compare strings, handle embedded numbers. int StringRef::compare_numeric(StringRef RHS) const { for (size_t I = 0, E = std::min(Length, RHS.Length); I != E; ++I) { // Check for sequences of digits. if (isDigit(Data[I]) && isDigit(RHS.Data[I])) { // The longer sequence of numbers is considered larger. // This doesn't really handle prefixed zeros well. size_t J; for (J = I + 1; J != E + 1; ++J) { bool ld = J < Length && isDigit(Data[J]); bool rd = J < RHS.Length && isDigit(RHS.Data[J]); if (ld != rd) return rd ? -1 : 1; if (!rd) break; } // The two number sequences have the same length (J-I), just memcmp them. if (int Res = compareMemory(Data + I, RHS.Data + I, J - I)) return Res < 0 ? -1 : 1; // Identical number sequences, continue search after the numbers. I = J - 1; continue; } if (Data[I] != RHS.Data[I]) return (unsigned char)Data[I] < (unsigned char)RHS.Data[I] ? -1 : 1; } if (Length == RHS.Length) return 0; return Length < RHS.Length ? -1 : 1; } // Compute the edit distance between the two given strings. unsigned StringRef::edit_distance(llvm::StringRef Other, bool AllowReplacements, unsigned MaxEditDistance) const { return llvm::ComputeEditDistance( makeArrayRef(data(), size()), makeArrayRef(Other.data(), Other.size()), AllowReplacements, MaxEditDistance); } //===----------------------------------------------------------------------===// // String Operations //===----------------------------------------------------------------------===// std::string StringRef::lower() const { std::string Result(size(), char()); for (size_type i = 0, e = size(); i != e; ++i) { Result[i] = toLower(Data[i]); } return Result; } std::string StringRef::upper() const { std::string Result(size(), char()); for (size_type i = 0, e = size(); i != e; ++i) { Result[i] = toUpper(Data[i]); } return Result; } //===----------------------------------------------------------------------===// // String Searching //===----------------------------------------------------------------------===// /// find - Search for the first string \arg Str in the string. /// /// \return - The index of the first occurrence of \arg Str, or npos if not /// found. size_t StringRef::find(StringRef Str, size_t From) const { if (From > Length) return npos; const char *Start = Data + From; size_t Size = Length - From; const char *Needle = Str.data(); size_t N = Str.size(); if (N == 0) return From; if (Size < N) return npos; if (N == 1) { const char *Ptr = (const char *)::memchr(Start, Needle[0], Size); return Ptr == nullptr ? npos : Ptr - Data; } const char *Stop = Start + (Size - N + 1); // For short haystacks or unsupported needles fall back to the naive algorithm if (Size < 16 || N > 255) { do { if (std::memcmp(Start, Needle, N) == 0) return Start - Data; ++Start; } while (Start < Stop); return npos; } // Build the bad char heuristic table, with uint8_t to reduce cache thrashing. uint8_t BadCharSkip[256]; std::memset(BadCharSkip, N, 256); for (unsigned i = 0; i != N-1; ++i) BadCharSkip[(uint8_t)Str[i]] = N-1-i; do { uint8_t Last = Start[N - 1]; if (LLVM_UNLIKELY(Last == (uint8_t)Needle[N - 1])) if (std::memcmp(Start, Needle, N - 1) == 0) return Start - Data; // Otherwise skip the appropriate number of bytes. Start += BadCharSkip[Last]; } while (Start < Stop); return npos; } size_t StringRef::find_lower(StringRef Str, size_t From) const { StringRef This = substr(From); while (This.size() >= Str.size()) { if (This.startswith_lower(Str)) return From; This = This.drop_front(); ++From; } return npos; } size_t StringRef::rfind_lower(char C, size_t From) const { From = std::min(From, Length); size_t i = From; while (i != 0) { --i; if (toLower(Data[i]) == toLower(C)) return i; } return npos; } /// rfind - Search for the last string \arg Str in the string. /// /// \return - The index of the last occurrence of \arg Str, or npos if not /// found. size_t StringRef::rfind(StringRef Str) const { size_t N = Str.size(); if (N > Length) return npos; for (size_t i = Length - N + 1, e = 0; i != e;) { --i; if (substr(i, N).equals(Str)) return i; } return npos; } size_t StringRef::rfind_lower(StringRef Str) const { size_t N = Str.size(); if (N > Length) return npos; for (size_t i = Length - N + 1, e = 0; i != e;) { --i; if (substr(i, N).equals_lower(Str)) return i; } return npos; } /// find_first_of - Find the first character in the string that is in \arg /// Chars, or npos if not found. /// /// Note: O(size() + Chars.size()) StringRef::size_type StringRef::find_first_of(StringRef Chars, size_t From) const { std::bitset<1 << CHAR_BIT> CharBits; for (size_type i = 0; i != Chars.size(); ++i) CharBits.set((unsigned char)Chars[i]); for (size_type i = std::min(From, Length), e = Length; i != e; ++i) if (CharBits.test((unsigned char)Data[i])) return i; return npos; } /// find_first_not_of - Find the first character in the string that is not /// \arg C or npos if not found. StringRef::size_type StringRef::find_first_not_of(char C, size_t From) const { for (size_type i = std::min(From, Length), e = Length; i != e; ++i) if (Data[i] != C) return i; return npos; } /// find_first_not_of - Find the first character in the string that is not /// in the string \arg Chars, or npos if not found. /// /// Note: O(size() + Chars.size()) StringRef::size_type StringRef::find_first_not_of(StringRef Chars, size_t From) const { std::bitset<1 << CHAR_BIT> CharBits; for (size_type i = 0; i != Chars.size(); ++i) CharBits.set((unsigned char)Chars[i]); for (size_type i = std::min(From, Length), e = Length; i != e; ++i) if (!CharBits.test((unsigned char)Data[i])) return i; return npos; } /// find_last_of - Find the last character in the string that is in \arg C, /// or npos if not found. /// /// Note: O(size() + Chars.size()) StringRef::size_type StringRef::find_last_of(StringRef Chars, size_t From) const { std::bitset<1 << CHAR_BIT> CharBits; for (size_type i = 0; i != Chars.size(); ++i) CharBits.set((unsigned char)Chars[i]); for (size_type i = std::min(From, Length) - 1, e = -1; i != e; --i) if (CharBits.test((unsigned char)Data[i])) return i; return npos; } /// find_last_not_of - Find the last character in the string that is not /// \arg C, or npos if not found. StringRef::size_type StringRef::find_last_not_of(char C, size_t From) const { for (size_type i = std::min(From, Length) - 1, e = -1; i != e; --i) if (Data[i] != C) return i; return npos; } /// find_last_not_of - Find the last character in the string that is not in /// \arg Chars, or npos if not found. /// /// Note: O(size() + Chars.size()) StringRef::size_type StringRef::find_last_not_of(StringRef Chars, size_t From) const { std::bitset<1 << CHAR_BIT> CharBits; for (size_type i = 0, e = Chars.size(); i != e; ++i) CharBits.set((unsigned char)Chars[i]); for (size_type i = std::min(From, Length) - 1, e = -1; i != e; --i) if (!CharBits.test((unsigned char)Data[i])) return i; return npos; } void StringRef::split(SmallVectorImpl &A, StringRef Separator, int MaxSplit, bool KeepEmpty) const { StringRef S = *this; // Count down from MaxSplit. When MaxSplit is -1, this will just split // "forever". This doesn't support splitting more than 2^31 times // intentionally; if we ever want that we can make MaxSplit a 64-bit integer // but that seems unlikely to be useful. while (MaxSplit-- != 0) { size_t Idx = S.find(Separator); if (Idx == npos) break; // Push this split. if (KeepEmpty || Idx > 0) A.push_back(S.slice(0, Idx)); // Jump forward. S = S.slice(Idx + Separator.size(), npos); } // Push the tail. if (KeepEmpty || !S.empty()) A.push_back(S); } void StringRef::split(SmallVectorImpl &A, char Separator, int MaxSplit, bool KeepEmpty) const { StringRef S = *this; // Count down from MaxSplit. When MaxSplit is -1, this will just split // "forever". This doesn't support splitting more than 2^31 times // intentionally; if we ever want that we can make MaxSplit a 64-bit integer // but that seems unlikely to be useful. while (MaxSplit-- != 0) { size_t Idx = S.find(Separator); if (Idx == npos) break; // Push this split. if (KeepEmpty || Idx > 0) A.push_back(S.slice(0, Idx)); // Jump forward. S = S.slice(Idx + 1, npos); } // Push the tail. if (KeepEmpty || !S.empty()) A.push_back(S); } //===----------------------------------------------------------------------===// // Helpful Algorithms //===----------------------------------------------------------------------===// /// count - Return the number of non-overlapped occurrences of \arg Str in /// the string. size_t StringRef::count(StringRef Str) const { size_t Count = 0; size_t N = Str.size(); if (N > Length) return 0; for (size_t i = 0, e = Length - N + 1; i != e; ++i) if (substr(i, N).equals(Str)) ++Count; return Count; } static unsigned GetAutoSenseRadix(StringRef &Str) { if (Str.empty()) return 10; if (Str.startswith("0x") || Str.startswith("0X")) { Str = Str.substr(2); return 16; } if (Str.startswith("0b") || Str.startswith("0B")) { Str = Str.substr(2); return 2; } if (Str.startswith("0o")) { Str = Str.substr(2); return 8; } if (Str[0] == '0' && Str.size() > 1 && isDigit(Str[1])) { Str = Str.substr(1); return 8; } return 10; } bool llvm::consumeUnsignedInteger(StringRef &Str, unsigned Radix, unsigned long long &Result) { // Autosense radix if not specified. if (Radix == 0) Radix = GetAutoSenseRadix(Str); // Empty strings (after the radix autosense) are invalid. if (Str.empty()) return true; // Parse all the bytes of the string given this radix. Watch for overflow. StringRef Str2 = Str; Result = 0; while (!Str2.empty()) { unsigned CharVal; if (Str2[0] >= '0' && Str2[0] <= '9') CharVal = Str2[0] - '0'; else if (Str2[0] >= 'a' && Str2[0] <= 'z') CharVal = Str2[0] - 'a' + 10; else if (Str2[0] >= 'A' && Str2[0] <= 'Z') CharVal = Str2[0] - 'A' + 10; else break; // If the parsed value is larger than the integer radix, we cannot // consume any more characters. if (CharVal >= Radix) break; // Add in this character. unsigned long long PrevResult = Result; Result = Result * Radix + CharVal; // Check for overflow by shifting back and seeing if bits were lost. if (Result / Radix < PrevResult) return true; Str2 = Str2.substr(1); } // We consider the operation a failure if no characters were consumed // successfully. if (Str.size() == Str2.size()) return true; Str = Str2; return false; } bool llvm::consumeSignedInteger(StringRef &Str, unsigned Radix, long long &Result) { unsigned long long ULLVal; // Handle positive strings first. if (Str.empty() || Str.front() != '-') { if (consumeUnsignedInteger(Str, Radix, ULLVal) || // Check for value so large it overflows a signed value. (long long)ULLVal < 0) return true; Result = ULLVal; return false; } // Get the positive part of the value. StringRef Str2 = Str.drop_front(1); if (consumeUnsignedInteger(Str2, Radix, ULLVal) || // Reject values so large they'd overflow as negative signed, but allow // "-0". This negates the unsigned so that the negative isn't undefined // on signed overflow. (long long)-ULLVal > 0) return true; Str = Str2; Result = -ULLVal; return false; } /// GetAsUnsignedInteger - Workhorse method that converts a integer character /// sequence of radix up to 36 to an unsigned long long value. bool llvm::getAsUnsignedInteger(StringRef Str, unsigned Radix, unsigned long long &Result) { if (consumeUnsignedInteger(Str, Radix, Result)) return true; // For getAsUnsignedInteger, we require the whole string to be consumed or // else we consider it a failure. return !Str.empty(); } bool llvm::getAsSignedInteger(StringRef Str, unsigned Radix, long long &Result) { if (consumeSignedInteger(Str, Radix, Result)) return true; // For getAsSignedInteger, we require the whole string to be consumed or else // we consider it a failure. return !Str.empty(); } bool StringRef::getAsInteger(unsigned Radix, APInt &Result) const { llvm_unreachable("getAsinteger"); } bool StringRef::getAsDouble(double &Result, bool AllowInexact) const { llvm_unreachable("getAsDouble"); } // Implementation of StringRef hashing. hash_code llvm::hash_value(StringRef S) { return hash_combine_range(S.begin(), S.end()); } binaryen-version_108/third_party/llvm-project/SymbolicFile.cpp000066400000000000000000000027301423707623100250030ustar00rootroot00000000000000//===- SymbolicFile.cpp - Interface that only provides symbols ------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines a file format independent SymbolicFile class. // //===----------------------------------------------------------------------===// #include "llvm/Object/SymbolicFile.h" #include "llvm/ADT/StringRef.h" #include "llvm/BinaryFormat/Magic.h" #if 0 // XXX BINARYEN #include "llvm/Object/COFFImportFile.h" #endif #include "llvm/Object/Error.h" #if 0 // XXX BINARYEN #include "llvm/Object/IRObjectFile.h" #endif #include "llvm/Object/ObjectFile.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Error.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ErrorOr.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" #include #include using namespace llvm; using namespace object; SymbolicFile::SymbolicFile(unsigned int Type, MemoryBufferRef Source) : Binary(Type, Source) {} SymbolicFile::~SymbolicFile() = default; Expected> SymbolicFile::createSymbolicFile(MemoryBufferRef Object, file_magic Type, LLVMContext *Context) { llvm_unreachable("createSymbolicFile"); } binaryen-version_108/third_party/llvm-project/Twine.cpp000066400000000000000000000110541423707623100235070ustar00rootroot00000000000000//===-- Twine.cpp - Fast Temporary String Concatenation -------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/ADT/Twine.h" #include "llvm/ADT/SmallString.h" #include "llvm/Config/llvm-config.h" #include "llvm/Support/Debug.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; std::string Twine::str() const { // If we're storing only a std::string, just return it. if (LHSKind == StdStringKind && RHSKind == EmptyKind) return *LHS.stdString; // If we're storing a formatv_object, we can avoid an extra copy by formatting // it immediately and returning the result. if (LHSKind == FormatvObjectKind && RHSKind == EmptyKind) return LHS.formatvObject->str(); // Otherwise, flatten and copy the contents first. SmallString<256> Vec; return toStringRef(Vec).str(); } void Twine::toVector(SmallVectorImpl &Out) const { raw_svector_ostream OS(Out); print(OS); } StringRef Twine::toNullTerminatedStringRef(SmallVectorImpl &Out) const { if (isUnary()) { switch (getLHSKind()) { case CStringKind: // Already null terminated, yay! return StringRef(LHS.cString); case StdStringKind: { const std::string *str = LHS.stdString; return StringRef(str->c_str(), str->size()); } default: break; } } toVector(Out); Out.push_back(0); Out.pop_back(); return StringRef(Out.data(), Out.size()); } void Twine::printOneChild(raw_ostream &OS, Child Ptr, NodeKind Kind) const { switch (Kind) { case Twine::NullKind: break; case Twine::EmptyKind: break; case Twine::TwineKind: Ptr.twine->print(OS); break; case Twine::CStringKind: OS << Ptr.cString; break; case Twine::StdStringKind: OS << *Ptr.stdString; break; case Twine::StringRefKind: OS << *Ptr.stringRef; break; case Twine::SmallStringKind: OS << *Ptr.smallString; break; case Twine::FormatvObjectKind: OS << *Ptr.formatvObject; break; case Twine::CharKind: OS << Ptr.character; break; case Twine::DecUIKind: OS << Ptr.decUI; break; case Twine::DecIKind: OS << Ptr.decI; break; case Twine::DecULKind: OS << *Ptr.decUL; break; case Twine::DecLKind: OS << *Ptr.decL; break; case Twine::DecULLKind: OS << *Ptr.decULL; break; case Twine::DecLLKind: OS << *Ptr.decLL; break; case Twine::UHexKind: OS.write_hex(*Ptr.uHex); break; } } void Twine::printOneChildRepr(raw_ostream &OS, Child Ptr, NodeKind Kind) const { switch (Kind) { case Twine::NullKind: OS << "null"; break; case Twine::EmptyKind: OS << "empty"; break; case Twine::TwineKind: OS << "rope:"; Ptr.twine->printRepr(OS); break; case Twine::CStringKind: OS << "cstring:\"" << Ptr.cString << "\""; break; case Twine::StdStringKind: OS << "std::string:\"" << Ptr.stdString << "\""; break; case Twine::StringRefKind: OS << "stringref:\"" << Ptr.stringRef << "\""; break; case Twine::SmallStringKind: OS << "smallstring:\"" << *Ptr.smallString << "\""; break; case Twine::FormatvObjectKind: OS << "formatv:\"" << *Ptr.formatvObject << "\""; break; case Twine::CharKind: OS << "char:\"" << Ptr.character << "\""; break; case Twine::DecUIKind: OS << "decUI:\"" << Ptr.decUI << "\""; break; case Twine::DecIKind: OS << "decI:\"" << Ptr.decI << "\""; break; case Twine::DecULKind: OS << "decUL:\"" << *Ptr.decUL << "\""; break; case Twine::DecLKind: OS << "decL:\"" << *Ptr.decL << "\""; break; case Twine::DecULLKind: OS << "decULL:\"" << *Ptr.decULL << "\""; break; case Twine::DecLLKind: OS << "decLL:\"" << *Ptr.decLL << "\""; break; case Twine::UHexKind: OS << "uhex:\"" << Ptr.uHex << "\""; break; } } void Twine::print(raw_ostream &OS) const { printOneChild(OS, LHS, getLHSKind()); printOneChild(OS, RHS, getRHSKind()); } void Twine::printRepr(raw_ostream &OS) const { OS << "(Twine "; printOneChildRepr(OS, LHS, getLHSKind()); OS << " "; printOneChildRepr(OS, RHS, getRHSKind()); OS << ")"; } LLVM_DUMP_METHOD void Twine::dump() const { print(dbgs()); } LLVM_DUMP_METHOD void Twine::dumpRepr() const { printRepr(dbgs()); } binaryen-version_108/third_party/llvm-project/UnicodeCaseFold.cpp000066400000000000000000000365001423707623100254130ustar00rootroot00000000000000//===---------- Support/UnicodeCaseFold.cpp -------------------------------===// // // This file was generated by utils/unicode-case-fold.py from the Unicode // case folding database at // http://www.unicode.org/Public/9.0.0/ucd/CaseFolding.txt // // To regenerate this file, run: // utils/unicode-case-fold.py // "http://www.unicode.org/Public/9.0.0/ucd/CaseFolding.txt" // > lib/Support/UnicodeCaseFold.cpp // //===----------------------------------------------------------------------===// #include "llvm/Support/Unicode.h" int llvm::sys::unicode::foldCharSimple(int C) { if (C < 0x0041) return C; // 26 characters if (C <= 0x005a) return C + 32; // MICRO SIGN if (C == 0x00b5) return 0x03bc; if (C < 0x00c0) return C; // 23 characters if (C <= 0x00d6) return C + 32; if (C < 0x00d8) return C; // 7 characters if (C <= 0x00de) return C + 32; if (C < 0x0100) return C; // 24 characters if (C <= 0x012e) return C | 1; if (C < 0x0132) return C; // 3 characters if (C <= 0x0136) return C | 1; if (C < 0x0139) return C; // 8 characters if (C <= 0x0147 && C % 2 == 1) return C + 1; if (C < 0x014a) return C; // 23 characters if (C <= 0x0176) return C | 1; // LATIN CAPITAL LETTER Y WITH DIAERESIS if (C == 0x0178) return 0x00ff; if (C < 0x0179) return C; // 3 characters if (C <= 0x017d && C % 2 == 1) return C + 1; // LATIN SMALL LETTER LONG S if (C == 0x017f) return 0x0073; // LATIN CAPITAL LETTER B WITH HOOK if (C == 0x0181) return 0x0253; if (C < 0x0182) return C; // 2 characters if (C <= 0x0184) return C | 1; // LATIN CAPITAL LETTER OPEN O if (C == 0x0186) return 0x0254; // LATIN CAPITAL LETTER C WITH HOOK if (C == 0x0187) return 0x0188; if (C < 0x0189) return C; // 2 characters if (C <= 0x018a) return C + 205; // LATIN CAPITAL LETTER D WITH TOPBAR if (C == 0x018b) return 0x018c; // LATIN CAPITAL LETTER REVERSED E if (C == 0x018e) return 0x01dd; // LATIN CAPITAL LETTER SCHWA if (C == 0x018f) return 0x0259; // LATIN CAPITAL LETTER OPEN E if (C == 0x0190) return 0x025b; // LATIN CAPITAL LETTER F WITH HOOK if (C == 0x0191) return 0x0192; // LATIN CAPITAL LETTER G WITH HOOK if (C == 0x0193) return 0x0260; // LATIN CAPITAL LETTER GAMMA if (C == 0x0194) return 0x0263; // LATIN CAPITAL LETTER IOTA if (C == 0x0196) return 0x0269; // LATIN CAPITAL LETTER I WITH STROKE if (C == 0x0197) return 0x0268; // LATIN CAPITAL LETTER K WITH HOOK if (C == 0x0198) return 0x0199; // LATIN CAPITAL LETTER TURNED M if (C == 0x019c) return 0x026f; // LATIN CAPITAL LETTER N WITH LEFT HOOK if (C == 0x019d) return 0x0272; // LATIN CAPITAL LETTER O WITH MIDDLE TILDE if (C == 0x019f) return 0x0275; if (C < 0x01a0) return C; // 3 characters if (C <= 0x01a4) return C | 1; // LATIN LETTER YR if (C == 0x01a6) return 0x0280; // LATIN CAPITAL LETTER TONE TWO if (C == 0x01a7) return 0x01a8; // LATIN CAPITAL LETTER ESH if (C == 0x01a9) return 0x0283; // LATIN CAPITAL LETTER T WITH HOOK if (C == 0x01ac) return 0x01ad; // LATIN CAPITAL LETTER T WITH RETROFLEX HOOK if (C == 0x01ae) return 0x0288; // LATIN CAPITAL LETTER U WITH HORN if (C == 0x01af) return 0x01b0; if (C < 0x01b1) return C; // 2 characters if (C <= 0x01b2) return C + 217; if (C < 0x01b3) return C; // 2 characters if (C <= 0x01b5 && C % 2 == 1) return C + 1; // LATIN CAPITAL LETTER EZH if (C == 0x01b7) return 0x0292; if (C < 0x01b8) return C; // 2 characters if (C <= 0x01bc && C % 4 == 0) return C + 1; // LATIN CAPITAL LETTER DZ WITH CARON if (C == 0x01c4) return 0x01c6; // LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON if (C == 0x01c5) return 0x01c6; // LATIN CAPITAL LETTER LJ if (C == 0x01c7) return 0x01c9; // LATIN CAPITAL LETTER L WITH SMALL LETTER J if (C == 0x01c8) return 0x01c9; // LATIN CAPITAL LETTER NJ if (C == 0x01ca) return 0x01cc; if (C < 0x01cb) return C; // 9 characters if (C <= 0x01db && C % 2 == 1) return C + 1; if (C < 0x01de) return C; // 9 characters if (C <= 0x01ee) return C | 1; // LATIN CAPITAL LETTER DZ if (C == 0x01f1) return 0x01f3; if (C < 0x01f2) return C; // 2 characters if (C <= 0x01f4) return C | 1; // LATIN CAPITAL LETTER HWAIR if (C == 0x01f6) return 0x0195; // LATIN CAPITAL LETTER WYNN if (C == 0x01f7) return 0x01bf; if (C < 0x01f8) return C; // 20 characters if (C <= 0x021e) return C | 1; // LATIN CAPITAL LETTER N WITH LONG RIGHT LEG if (C == 0x0220) return 0x019e; if (C < 0x0222) return C; // 9 characters if (C <= 0x0232) return C | 1; // LATIN CAPITAL LETTER A WITH STROKE if (C == 0x023a) return 0x2c65; // LATIN CAPITAL LETTER C WITH STROKE if (C == 0x023b) return 0x023c; // LATIN CAPITAL LETTER L WITH BAR if (C == 0x023d) return 0x019a; // LATIN CAPITAL LETTER T WITH DIAGONAL STROKE if (C == 0x023e) return 0x2c66; // LATIN CAPITAL LETTER GLOTTAL STOP if (C == 0x0241) return 0x0242; // LATIN CAPITAL LETTER B WITH STROKE if (C == 0x0243) return 0x0180; // LATIN CAPITAL LETTER U BAR if (C == 0x0244) return 0x0289; // LATIN CAPITAL LETTER TURNED V if (C == 0x0245) return 0x028c; if (C < 0x0246) return C; // 5 characters if (C <= 0x024e) return C | 1; // COMBINING GREEK YPOGEGRAMMENI if (C == 0x0345) return 0x03b9; if (C < 0x0370) return C; // 2 characters if (C <= 0x0372) return C | 1; // GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA if (C == 0x0376) return 0x0377; // GREEK CAPITAL LETTER YOT if (C == 0x037f) return 0x03f3; // GREEK CAPITAL LETTER ALPHA WITH TONOS if (C == 0x0386) return 0x03ac; if (C < 0x0388) return C; // 3 characters if (C <= 0x038a) return C + 37; // GREEK CAPITAL LETTER OMICRON WITH TONOS if (C == 0x038c) return 0x03cc; if (C < 0x038e) return C; // 2 characters if (C <= 0x038f) return C + 63; if (C < 0x0391) return C; // 17 characters if (C <= 0x03a1) return C + 32; if (C < 0x03a3) return C; // 9 characters if (C <= 0x03ab) return C + 32; // GREEK SMALL LETTER FINAL SIGMA if (C == 0x03c2) return 0x03c3; // GREEK CAPITAL KAI SYMBOL if (C == 0x03cf) return 0x03d7; // GREEK BETA SYMBOL if (C == 0x03d0) return 0x03b2; // GREEK THETA SYMBOL if (C == 0x03d1) return 0x03b8; // GREEK PHI SYMBOL if (C == 0x03d5) return 0x03c6; // GREEK PI SYMBOL if (C == 0x03d6) return 0x03c0; if (C < 0x03d8) return C; // 12 characters if (C <= 0x03ee) return C | 1; // GREEK KAPPA SYMBOL if (C == 0x03f0) return 0x03ba; // GREEK RHO SYMBOL if (C == 0x03f1) return 0x03c1; // GREEK CAPITAL THETA SYMBOL if (C == 0x03f4) return 0x03b8; // GREEK LUNATE EPSILON SYMBOL if (C == 0x03f5) return 0x03b5; // GREEK CAPITAL LETTER SHO if (C == 0x03f7) return 0x03f8; // GREEK CAPITAL LUNATE SIGMA SYMBOL if (C == 0x03f9) return 0x03f2; // GREEK CAPITAL LETTER SAN if (C == 0x03fa) return 0x03fb; if (C < 0x03fd) return C; // 3 characters if (C <= 0x03ff) return C + -130; if (C < 0x0400) return C; // 16 characters if (C <= 0x040f) return C + 80; if (C < 0x0410) return C; // 32 characters if (C <= 0x042f) return C + 32; if (C < 0x0460) return C; // 17 characters if (C <= 0x0480) return C | 1; if (C < 0x048a) return C; // 27 characters if (C <= 0x04be) return C | 1; // CYRILLIC LETTER PALOCHKA if (C == 0x04c0) return 0x04cf; if (C < 0x04c1) return C; // 7 characters if (C <= 0x04cd && C % 2 == 1) return C + 1; if (C < 0x04d0) return C; // 48 characters if (C <= 0x052e) return C | 1; if (C < 0x0531) return C; // 38 characters if (C <= 0x0556) return C + 48; if (C < 0x10a0) return C; // 38 characters if (C <= 0x10c5) return C + 7264; if (C < 0x10c7) return C; // 2 characters if (C <= 0x10cd && C % 6 == 5) return C + 7264; if (C < 0x13f8) return C; // 6 characters if (C <= 0x13fd) return C + -8; // CYRILLIC SMALL LETTER ROUNDED VE if (C == 0x1c80) return 0x0432; // CYRILLIC SMALL LETTER LONG-LEGGED DE if (C == 0x1c81) return 0x0434; // CYRILLIC SMALL LETTER NARROW O if (C == 0x1c82) return 0x043e; if (C < 0x1c83) return C; // 2 characters if (C <= 0x1c84) return C + -6210; // CYRILLIC SMALL LETTER THREE-LEGGED TE if (C == 0x1c85) return 0x0442; // CYRILLIC SMALL LETTER TALL HARD SIGN if (C == 0x1c86) return 0x044a; // CYRILLIC SMALL LETTER TALL YAT if (C == 0x1c87) return 0x0463; // CYRILLIC SMALL LETTER UNBLENDED UK if (C == 0x1c88) return 0xa64b; if (C < 0x1e00) return C; // 75 characters if (C <= 0x1e94) return C | 1; // LATIN SMALL LETTER LONG S WITH DOT ABOVE if (C == 0x1e9b) return 0x1e61; // LATIN CAPITAL LETTER SHARP S if (C == 0x1e9e) return 0x00df; if (C < 0x1ea0) return C; // 48 characters if (C <= 0x1efe) return C | 1; if (C < 0x1f08) return C; // 8 characters if (C <= 0x1f0f) return C + -8; if (C < 0x1f18) return C; // 6 characters if (C <= 0x1f1d) return C + -8; if (C < 0x1f28) return C; // 8 characters if (C <= 0x1f2f) return C + -8; if (C < 0x1f38) return C; // 8 characters if (C <= 0x1f3f) return C + -8; if (C < 0x1f48) return C; // 6 characters if (C <= 0x1f4d) return C + -8; if (C < 0x1f59) return C; // 4 characters if (C <= 0x1f5f && C % 2 == 1) return C + -8; if (C < 0x1f68) return C; // 8 characters if (C <= 0x1f6f) return C + -8; if (C < 0x1f88) return C; // 8 characters if (C <= 0x1f8f) return C + -8; if (C < 0x1f98) return C; // 8 characters if (C <= 0x1f9f) return C + -8; if (C < 0x1fa8) return C; // 8 characters if (C <= 0x1faf) return C + -8; if (C < 0x1fb8) return C; // 2 characters if (C <= 0x1fb9) return C + -8; if (C < 0x1fba) return C; // 2 characters if (C <= 0x1fbb) return C + -74; // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI if (C == 0x1fbc) return 0x1fb3; // GREEK PROSGEGRAMMENI if (C == 0x1fbe) return 0x03b9; if (C < 0x1fc8) return C; // 4 characters if (C <= 0x1fcb) return C + -86; // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI if (C == 0x1fcc) return 0x1fc3; if (C < 0x1fd8) return C; // 2 characters if (C <= 0x1fd9) return C + -8; if (C < 0x1fda) return C; // 2 characters if (C <= 0x1fdb) return C + -100; if (C < 0x1fe8) return C; // 2 characters if (C <= 0x1fe9) return C + -8; if (C < 0x1fea) return C; // 2 characters if (C <= 0x1feb) return C + -112; // GREEK CAPITAL LETTER RHO WITH DASIA if (C == 0x1fec) return 0x1fe5; if (C < 0x1ff8) return C; // 2 characters if (C <= 0x1ff9) return C + -128; if (C < 0x1ffa) return C; // 2 characters if (C <= 0x1ffb) return C + -126; // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI if (C == 0x1ffc) return 0x1ff3; // OHM SIGN if (C == 0x2126) return 0x03c9; // KELVIN SIGN if (C == 0x212a) return 0x006b; // ANGSTROM SIGN if (C == 0x212b) return 0x00e5; // TURNED CAPITAL F if (C == 0x2132) return 0x214e; if (C < 0x2160) return C; // 16 characters if (C <= 0x216f) return C + 16; // ROMAN NUMERAL REVERSED ONE HUNDRED if (C == 0x2183) return 0x2184; if (C < 0x24b6) return C; // 26 characters if (C <= 0x24cf) return C + 26; if (C < 0x2c00) return C; // 47 characters if (C <= 0x2c2e) return C + 48; // LATIN CAPITAL LETTER L WITH DOUBLE BAR if (C == 0x2c60) return 0x2c61; // LATIN CAPITAL LETTER L WITH MIDDLE TILDE if (C == 0x2c62) return 0x026b; // LATIN CAPITAL LETTER P WITH STROKE if (C == 0x2c63) return 0x1d7d; // LATIN CAPITAL LETTER R WITH TAIL if (C == 0x2c64) return 0x027d; if (C < 0x2c67) return C; // 3 characters if (C <= 0x2c6b && C % 2 == 1) return C + 1; // LATIN CAPITAL LETTER ALPHA if (C == 0x2c6d) return 0x0251; // LATIN CAPITAL LETTER M WITH HOOK if (C == 0x2c6e) return 0x0271; // LATIN CAPITAL LETTER TURNED A if (C == 0x2c6f) return 0x0250; // LATIN CAPITAL LETTER TURNED ALPHA if (C == 0x2c70) return 0x0252; if (C < 0x2c72) return C; // 2 characters if (C <= 0x2c75 && C % 3 == 2) return C + 1; if (C < 0x2c7e) return C; // 2 characters if (C <= 0x2c7f) return C + -10815; if (C < 0x2c80) return C; // 50 characters if (C <= 0x2ce2) return C | 1; if (C < 0x2ceb) return C; // 2 characters if (C <= 0x2ced && C % 2 == 1) return C + 1; if (C < 0x2cf2) return C; // 2 characters if (C <= 0xa640 && C % 31054 == 11506) return C + 1; if (C < 0xa642) return C; // 22 characters if (C <= 0xa66c) return C | 1; if (C < 0xa680) return C; // 14 characters if (C <= 0xa69a) return C | 1; if (C < 0xa722) return C; // 7 characters if (C <= 0xa72e) return C | 1; if (C < 0xa732) return C; // 31 characters if (C <= 0xa76e) return C | 1; if (C < 0xa779) return C; // 2 characters if (C <= 0xa77b && C % 2 == 1) return C + 1; // LATIN CAPITAL LETTER INSULAR G if (C == 0xa77d) return 0x1d79; if (C < 0xa77e) return C; // 5 characters if (C <= 0xa786) return C | 1; // LATIN CAPITAL LETTER SALTILLO if (C == 0xa78b) return 0xa78c; // LATIN CAPITAL LETTER TURNED H if (C == 0xa78d) return 0x0265; if (C < 0xa790) return C; // 2 characters if (C <= 0xa792) return C | 1; if (C < 0xa796) return C; // 10 characters if (C <= 0xa7a8) return C | 1; // LATIN CAPITAL LETTER H WITH HOOK if (C == 0xa7aa) return 0x0266; // LATIN CAPITAL LETTER REVERSED OPEN E if (C == 0xa7ab) return 0x025c; // LATIN CAPITAL LETTER SCRIPT G if (C == 0xa7ac) return 0x0261; // LATIN CAPITAL LETTER L WITH BELT if (C == 0xa7ad) return 0x026c; // LATIN CAPITAL LETTER SMALL CAPITAL I if (C == 0xa7ae) return 0x026a; // LATIN CAPITAL LETTER TURNED K if (C == 0xa7b0) return 0x029e; // LATIN CAPITAL LETTER TURNED T if (C == 0xa7b1) return 0x0287; // LATIN CAPITAL LETTER J WITH CROSSED-TAIL if (C == 0xa7b2) return 0x029d; // LATIN CAPITAL LETTER CHI if (C == 0xa7b3) return 0xab53; if (C < 0xa7b4) return C; // 2 characters if (C <= 0xa7b6) return C | 1; if (C < 0xab70) return C; // 80 characters if (C <= 0xabbf) return C + -38864; if (C < 0xff21) return C; // 26 characters if (C <= 0xff3a) return C + 32; if (C < 0x10400) return C; // 40 characters if (C <= 0x10427) return C + 40; if (C < 0x104b0) return C; // 36 characters if (C <= 0x104d3) return C + 40; if (C < 0x10c80) return C; // 51 characters if (C <= 0x10cb2) return C + 64; if (C < 0x118a0) return C; // 32 characters if (C <= 0x118bf) return C + 32; if (C < 0x1e900) return C; // 34 characters if (C <= 0x1e921) return C + 34; return C; } binaryen-version_108/third_party/llvm-project/Unix/000077500000000000000000000000001423707623100226375ustar00rootroot00000000000000binaryen-version_108/third_party/llvm-project/Unix/Path.inc000066400000000000000000001111531423707623100242300ustar00rootroot00000000000000//===- llvm/Support/Unix/Path.inc - Unix Path Implementation ----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the Unix specific implementation of the Path API. // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// //=== WARNING: Implementation here must contain only generic UNIX code that //=== is guaranteed to work on *all* UNIX variants. //===----------------------------------------------------------------------===// #include "Unix.h" #include #include #if HAVE_SYS_STAT_H #include #endif #if HAVE_FCNTL_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_MMAN_H #include #endif #include #include #ifdef __APPLE__ #include #include #include #elif defined(__DragonFly__) #include #endif // Both stdio.h and cstdio are included via different paths and // stdcxx's cstdio doesn't include stdio.h, so it doesn't #undef the macros // either. #undef ferror #undef feof // For GNU Hurd #if defined(__GNU__) && !defined(PATH_MAX) # define PATH_MAX 4096 # define MAXPATHLEN 4096 #endif #include #if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && \ !defined(__linux__) && !defined(__FreeBSD_kernel__) && !defined(_AIX) #include #define STATVFS statvfs #define FSTATVFS fstatvfs #define STATVFS_F_FRSIZE(vfs) vfs.f_frsize #else #if defined(__OpenBSD__) || defined(__FreeBSD__) #include #include #elif defined(__linux__) #if defined(HAVE_LINUX_MAGIC_H) #include #else #if defined(HAVE_LINUX_NFS_FS_H) #include #endif #if defined(HAVE_LINUX_SMB_H) #include #endif #endif #include #elif defined(_AIX) #include // depends on `uint` to be a typedef from to // `uint_t`; however, does not always declare `uint`. We provide // the typedef prior to including to work around this issue. typedef uint_t uint; #include #else #include #endif #define STATVFS statfs #define FSTATVFS fstatfs #define STATVFS_F_FRSIZE(vfs) static_cast(vfs.f_bsize) #endif #if defined(__NetBSD__) || defined(__DragonFly__) || defined(__GNU__) #define STATVFS_F_FLAG(vfs) (vfs).f_flag #else #define STATVFS_F_FLAG(vfs) (vfs).f_flags #endif using namespace llvm; namespace llvm { namespace sys { namespace fs { const file_t kInvalidFile = -1; #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ defined(__minix) || defined(__FreeBSD_kernel__) || defined(__linux__) || \ defined(__CYGWIN__) || defined(__DragonFly__) || defined(_AIX) || defined(__GNU__) static int test_dir(char ret[PATH_MAX], const char *dir, const char *bin) { struct stat sb; char fullpath[PATH_MAX]; int chars = snprintf(fullpath, PATH_MAX, "%s/%s", dir, bin); // We cannot write PATH_MAX characters because the string will be terminated // with a null character. Fail if truncation happened. if (chars >= PATH_MAX) return 1; if (!realpath(fullpath, ret)) return 1; if (stat(fullpath, &sb) != 0) return 1; return 0; } static char * getprogpath(char ret[PATH_MAX], const char *bin) { /* First approach: absolute path. */ if (bin[0] == '/') { if (test_dir(ret, "/", bin) == 0) return ret; return nullptr; } /* Second approach: relative path. */ if (strchr(bin, '/')) { char cwd[PATH_MAX]; if (!getcwd(cwd, PATH_MAX)) return nullptr; if (test_dir(ret, cwd, bin) == 0) return ret; return nullptr; } /* Third approach: $PATH */ char *pv; if ((pv = getenv("PATH")) == nullptr) return nullptr; char *s = strdup(pv); if (!s) return nullptr; char *state; for (char *t = strtok_r(s, ":", &state); t != nullptr; t = strtok_r(nullptr, ":", &state)) { if (test_dir(ret, t, bin) == 0) { free(s); return ret; } } free(s); return nullptr; } #endif // __FreeBSD__ || __NetBSD__ || __FreeBSD_kernel__ /// GetMainExecutable - Return the path to the main executable, given the /// value of argv[0] from program startup. std::string getMainExecutable(const char *argv0, void *MainAddr) { #if defined(__APPLE__) // On OS X the executable path is saved to the stack by dyld. Reading it // from there is much faster than calling dladdr, especially for large // binaries with symbols. char exe_path[MAXPATHLEN]; uint32_t size = sizeof(exe_path); if (_NSGetExecutablePath(exe_path, &size) == 0) { char link_path[MAXPATHLEN]; if (realpath(exe_path, link_path)) return link_path; } #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ defined(__minix) || defined(__DragonFly__) || \ defined(__FreeBSD_kernel__) || defined(_AIX) const char *curproc = "/proc/curproc/file"; char exe_path[PATH_MAX]; // /proc is not mounted by default under FreeBSD, but gives more accurate // information than argv[0] when it is. if (sys::fs::exists(curproc)) { ssize_t len = readlink(curproc, exe_path, sizeof(exe_path)); if (len > 0) { // Null terminate the string for realpath. readlink never null // terminates its output. len = std::min(len, ssize_t(sizeof(exe_path) - 1)); exe_path[len] = '\0'; return exe_path; } } // If we don't have procfs mounted, fall back to argv[0] if (getprogpath(exe_path, argv0) != NULL) return exe_path; #elif defined(__linux__) || defined(__CYGWIN__) || defined(__gnu_hurd__) char exe_path[MAXPATHLEN]; const char *aPath = "/proc/self/exe"; if (sys::fs::exists(aPath)) { // /proc is not always mounted under Linux (chroot for example). ssize_t len = readlink(aPath, exe_path, sizeof(exe_path)); if (len < 0) return ""; // Null terminate the string for realpath. readlink never null // terminates its output. len = std::min(len, ssize_t(sizeof(exe_path) - 1)); exe_path[len] = '\0'; // On Linux, /proc/self/exe always looks through symlinks. However, on // GNU/Hurd, /proc/self/exe is a symlink to the path that was used to start // the program, and not the eventual binary file. Therefore, call realpath // so this behaves the same on all platforms. #if _POSIX_VERSION >= 200112 || defined(__GLIBC__) if (char *real_path = realpath(exe_path, NULL)) { std::string ret = std::string(real_path); free(real_path); return ret; } #else char real_path[MAXPATHLEN]; if (realpath(exe_path, real_path)) return std::string(real_path); #endif } // Fall back to the classical detection. if (getprogpath(exe_path, argv0)) return exe_path; #elif defined(HAVE_DLFCN_H) && defined(HAVE_DLADDR) // Use dladdr to get executable path if available. Dl_info DLInfo; int err = dladdr(MainAddr, &DLInfo); if (err == 0) return ""; // If the filename is a symlink, we need to resolve and return the location of // the actual executable. char link_path[MAXPATHLEN]; if (realpath(DLInfo.dli_fname, link_path)) return link_path; #else #error GetMainExecutable is not implemented on this host yet. #endif return ""; } TimePoint<> basic_file_status::getLastAccessedTime() const { return toTimePoint(fs_st_atime, fs_st_atime_nsec); } TimePoint<> basic_file_status::getLastModificationTime() const { return toTimePoint(fs_st_mtime, fs_st_mtime_nsec); } UniqueID file_status::getUniqueID() const { return UniqueID(fs_st_dev, fs_st_ino); } uint32_t file_status::getLinkCount() const { return fs_st_nlinks; } ErrorOr disk_space(const Twine &Path) { struct STATVFS Vfs; if (::STATVFS(const_cast(Path.str().c_str()), &Vfs)) return std::error_code(errno, std::generic_category()); auto FrSize = STATVFS_F_FRSIZE(Vfs); space_info SpaceInfo; SpaceInfo.capacity = static_cast(Vfs.f_blocks) * FrSize; SpaceInfo.free = static_cast(Vfs.f_bfree) * FrSize; SpaceInfo.available = static_cast(Vfs.f_bavail) * FrSize; return SpaceInfo; } std::error_code current_path(SmallVectorImpl &result) { result.clear(); const char *pwd = ::getenv("PWD"); llvm::sys::fs::file_status PWDStatus, DotStatus; if (pwd && llvm::sys::path::is_absolute(pwd) && !llvm::sys::fs::status(pwd, PWDStatus) && !llvm::sys::fs::status(".", DotStatus) && PWDStatus.getUniqueID() == DotStatus.getUniqueID()) { result.append(pwd, pwd + strlen(pwd)); return std::error_code(); } #ifdef MAXPATHLEN result.reserve(MAXPATHLEN); #else // For GNU Hurd result.reserve(1024); #endif while (true) { if (::getcwd(result.data(), result.capacity()) == nullptr) { // See if there was a real error. if (errno != ENOMEM) return std::error_code(errno, std::generic_category()); // Otherwise there just wasn't enough space. result.reserve(result.capacity() * 2); } else break; } result.set_size(strlen(result.data())); return std::error_code(); } std::error_code set_current_path(const Twine &path) { SmallString<128> path_storage; StringRef p = path.toNullTerminatedStringRef(path_storage); if (::chdir(p.begin()) == -1) return std::error_code(errno, std::generic_category()); return std::error_code(); } std::error_code create_directory(const Twine &path, bool IgnoreExisting, perms Perms) { SmallString<128> path_storage; StringRef p = path.toNullTerminatedStringRef(path_storage); if (::mkdir(p.begin(), Perms) == -1) { if (errno != EEXIST || !IgnoreExisting) return std::error_code(errno, std::generic_category()); } return std::error_code(); } // Note that we are using symbolic link because hard links are not supported by // all filesystems (SMB doesn't). std::error_code create_link(const Twine &to, const Twine &from) { // Get arguments. SmallString<128> from_storage; SmallString<128> to_storage; StringRef f = from.toNullTerminatedStringRef(from_storage); StringRef t = to.toNullTerminatedStringRef(to_storage); if (::symlink(t.begin(), f.begin()) == -1) return std::error_code(errno, std::generic_category()); return std::error_code(); } std::error_code create_hard_link(const Twine &to, const Twine &from) { // Get arguments. SmallString<128> from_storage; SmallString<128> to_storage; StringRef f = from.toNullTerminatedStringRef(from_storage); StringRef t = to.toNullTerminatedStringRef(to_storage); if (::link(t.begin(), f.begin()) == -1) return std::error_code(errno, std::generic_category()); return std::error_code(); } std::error_code remove(const Twine &path, bool IgnoreNonExisting) { SmallString<128> path_storage; StringRef p = path.toNullTerminatedStringRef(path_storage); struct stat buf; if (lstat(p.begin(), &buf) != 0) { if (errno != ENOENT || !IgnoreNonExisting) return std::error_code(errno, std::generic_category()); return std::error_code(); } // Note: this check catches strange situations. In all cases, LLVM should // only be involved in the creation and deletion of regular files. This // check ensures that what we're trying to erase is a regular file. It // effectively prevents LLVM from erasing things like /dev/null, any block // special file, or other things that aren't "regular" files. if (!S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode) && !S_ISLNK(buf.st_mode)) return make_error_code(errc::operation_not_permitted); if (::remove(p.begin()) == -1) { if (errno != ENOENT || !IgnoreNonExisting) return std::error_code(errno, std::generic_category()); } return std::error_code(); } static bool is_local_impl(struct STATVFS &Vfs) { #if defined(__linux__) || defined(__GNU__) #ifndef NFS_SUPER_MAGIC #define NFS_SUPER_MAGIC 0x6969 #endif #ifndef SMB_SUPER_MAGIC #define SMB_SUPER_MAGIC 0x517B #endif #ifndef CIFS_MAGIC_NUMBER #define CIFS_MAGIC_NUMBER 0xFF534D42 #endif #ifdef __GNU__ switch ((uint32_t)Vfs.__f_type) { #else switch ((uint32_t)Vfs.f_type) { #endif case NFS_SUPER_MAGIC: case SMB_SUPER_MAGIC: case CIFS_MAGIC_NUMBER: return false; default: return true; } #elif defined(__CYGWIN__) // Cygwin doesn't expose this information; would need to use Win32 API. return false; #elif defined(__Fuchsia__) // Fuchsia doesn't yet support remote filesystem mounts. return true; #elif defined(__EMSCRIPTEN__) // Emscripten doesn't currently support remote filesystem mounts. return true; #elif defined(__HAIKU__) // Haiku doesn't expose this information. return false; #elif defined(__sun) // statvfs::f_basetype contains a null-terminated FSType name of the mounted target StringRef fstype(Vfs.f_basetype); // NFS is the only non-local fstype?? return !fstype.equals("nfs"); #elif defined(_AIX) // Call mntctl; try more than twice in case of timing issues with a concurrent // mount. int Ret; size_t BufSize = 2048u; std::unique_ptr Buf; int Tries = 3; while (Tries--) { Buf = std::make_unique(BufSize); Ret = mntctl(MCTL_QUERY, BufSize, Buf.get()); if (Ret != 0) break; BufSize = *reinterpret_cast(Buf.get()); Buf.reset(); } if (Ret == -1) // There was an error; "remote" is the conservative answer. return false; // Look for the correct vmount entry. char *CurObjPtr = Buf.get(); while (Ret--) { struct vmount *Vp = reinterpret_cast(CurObjPtr); static_assert(sizeof(Vfs.f_fsid) == sizeof(Vp->vmt_fsid), "fsid length mismatch"); if (memcmp(&Vfs.f_fsid, &Vp->vmt_fsid, sizeof Vfs.f_fsid) == 0) return (Vp->vmt_flags & MNT_REMOTE) == 0; CurObjPtr += Vp->vmt_length; } // vmount entry not found; "remote" is the conservative answer. return false; #else return !!(STATVFS_F_FLAG(Vfs) & MNT_LOCAL); #endif } std::error_code is_local(const Twine &Path, bool &Result) { struct STATVFS Vfs; if (::STATVFS(const_cast(Path.str().c_str()), &Vfs)) return std::error_code(errno, std::generic_category()); Result = is_local_impl(Vfs); return std::error_code(); } std::error_code is_local(int FD, bool &Result) { struct STATVFS Vfs; if (::FSTATVFS(FD, &Vfs)) return std::error_code(errno, std::generic_category()); Result = is_local_impl(Vfs); return std::error_code(); } std::error_code rename(const Twine &from, const Twine &to) { // Get arguments. SmallString<128> from_storage; SmallString<128> to_storage; StringRef f = from.toNullTerminatedStringRef(from_storage); StringRef t = to.toNullTerminatedStringRef(to_storage); if (::rename(f.begin(), t.begin()) == -1) return std::error_code(errno, std::generic_category()); return std::error_code(); } std::error_code resize_file(int FD, uint64_t Size) { #if defined(HAVE_POSIX_FALLOCATE) // If we have posix_fallocate use it. Unlike ftruncate it always allocates // space, so we get an error if the disk is full. if (int Err = ::posix_fallocate(FD, 0, Size)) { #ifdef _AIX constexpr int NotSupportedError = ENOTSUP; #else constexpr int NotSupportedError = EOPNOTSUPP; #endif if (Err != EINVAL && Err != NotSupportedError) return std::error_code(Err, std::generic_category()); } #endif // Use ftruncate as a fallback. It may or may not allocate space. At least on // OS X with HFS+ it does. if (::ftruncate(FD, Size) == -1) return std::error_code(errno, std::generic_category()); return std::error_code(); } static int convertAccessMode(AccessMode Mode) { switch (Mode) { case AccessMode::Exist: return F_OK; case AccessMode::Write: return W_OK; case AccessMode::Execute: return R_OK | X_OK; // scripts also need R_OK. } llvm_unreachable("invalid enum"); } std::error_code access(const Twine &Path, AccessMode Mode) { SmallString<128> PathStorage; StringRef P = Path.toNullTerminatedStringRef(PathStorage); if (::access(P.begin(), convertAccessMode(Mode)) == -1) return std::error_code(errno, std::generic_category()); if (Mode == AccessMode::Execute) { // Don't say that directories are executable. struct stat buf; if (0 != stat(P.begin(), &buf)) return errc::permission_denied; if (!S_ISREG(buf.st_mode)) return errc::permission_denied; } return std::error_code(); } bool can_execute(const Twine &Path) { return !access(Path, AccessMode::Execute); } bool equivalent(file_status A, file_status B) { assert(status_known(A) && status_known(B)); return A.fs_st_dev == B.fs_st_dev && A.fs_st_ino == B.fs_st_ino; } std::error_code equivalent(const Twine &A, const Twine &B, bool &result) { file_status fsA, fsB; if (std::error_code ec = status(A, fsA)) return ec; if (std::error_code ec = status(B, fsB)) return ec; result = equivalent(fsA, fsB); return std::error_code(); } static void expandTildeExpr(SmallVectorImpl &Path) { StringRef PathStr(Path.begin(), Path.size()); if (PathStr.empty() || !PathStr.startswith("~")) return; PathStr = PathStr.drop_front(); StringRef Expr = PathStr.take_until([](char c) { return path::is_separator(c); }); StringRef Remainder = PathStr.substr(Expr.size() + 1); SmallString<128> Storage; if (Expr.empty()) { // This is just ~/..., resolve it to the current user's home dir. if (!path::home_directory(Storage)) { // For some reason we couldn't get the home directory. Just exit. return; } // Overwrite the first character and insert the rest. Path[0] = Storage[0]; Path.insert(Path.begin() + 1, Storage.begin() + 1, Storage.end()); return; } // This is a string of the form ~username/, look up this user's entry in the // password database. struct passwd *Entry = nullptr; std::string User = Expr.str(); Entry = ::getpwnam(User.c_str()); if (!Entry) { // Unable to look up the entry, just return back the original path. return; } Storage = Remainder; Path.clear(); Path.append(Entry->pw_dir, Entry->pw_dir + strlen(Entry->pw_dir)); llvm::sys::path::append(Path, Storage); } void expand_tilde(const Twine &path, SmallVectorImpl &dest) { dest.clear(); if (path.isTriviallyEmpty()) return; path.toVector(dest); expandTildeExpr(dest); return; } static file_type typeForMode(mode_t Mode) { if (S_ISDIR(Mode)) return file_type::directory_file; else if (S_ISREG(Mode)) return file_type::regular_file; else if (S_ISBLK(Mode)) return file_type::block_file; else if (S_ISCHR(Mode)) return file_type::character_file; else if (S_ISFIFO(Mode)) return file_type::fifo_file; else if (S_ISSOCK(Mode)) return file_type::socket_file; else if (S_ISLNK(Mode)) return file_type::symlink_file; return file_type::type_unknown; } static std::error_code fillStatus(int StatRet, const struct stat &Status, file_status &Result) { if (StatRet != 0) { std::error_code EC(errno, std::generic_category()); if (EC == errc::no_such_file_or_directory) Result = file_status(file_type::file_not_found); else Result = file_status(file_type::status_error); return EC; } uint32_t atime_nsec, mtime_nsec; #if defined(HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC) atime_nsec = Status.st_atimespec.tv_nsec; mtime_nsec = Status.st_mtimespec.tv_nsec; #elif defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC) atime_nsec = Status.st_atim.tv_nsec; mtime_nsec = Status.st_mtim.tv_nsec; #else atime_nsec = mtime_nsec = 0; #endif perms Perms = static_cast(Status.st_mode) & all_perms; Result = file_status(typeForMode(Status.st_mode), Perms, Status.st_dev, Status.st_nlink, Status.st_ino, Status.st_atime, atime_nsec, Status.st_mtime, mtime_nsec, Status.st_uid, Status.st_gid, Status.st_size); return std::error_code(); } std::error_code status(const Twine &Path, file_status &Result, bool Follow) { SmallString<128> PathStorage; StringRef P = Path.toNullTerminatedStringRef(PathStorage); struct stat Status; int StatRet = (Follow ? ::stat : ::lstat)(P.begin(), &Status); return fillStatus(StatRet, Status, Result); } std::error_code status(int FD, file_status &Result) { struct stat Status; int StatRet = ::fstat(FD, &Status); return fillStatus(StatRet, Status, Result); } unsigned getUmask() { // Chose arbitary new mask and reset the umask to the old mask. // umask(2) never fails so ignore the return of the second call. unsigned Mask = ::umask(0); (void) ::umask(Mask); return Mask; } std::error_code setPermissions(const Twine &Path, perms Permissions) { SmallString<128> PathStorage; StringRef P = Path.toNullTerminatedStringRef(PathStorage); if (::chmod(P.begin(), Permissions)) return std::error_code(errno, std::generic_category()); return std::error_code(); } std::error_code setPermissions(int FD, perms Permissions) { if (::fchmod(FD, Permissions)) return std::error_code(errno, std::generic_category()); return std::error_code(); } std::error_code setLastAccessAndModificationTime(int FD, TimePoint<> AccessTime, TimePoint<> ModificationTime) { #if defined(HAVE_FUTIMENS) timespec Times[2]; Times[0] = sys::toTimeSpec(AccessTime); Times[1] = sys::toTimeSpec(ModificationTime); if (::futimens(FD, Times)) return std::error_code(errno, std::generic_category()); return std::error_code(); #elif defined(HAVE_FUTIMES) timeval Times[2]; Times[0] = sys::toTimeVal( std::chrono::time_point_cast(AccessTime)); Times[1] = sys::toTimeVal(std::chrono::time_point_cast( ModificationTime)); if (::futimes(FD, Times)) return std::error_code(errno, std::generic_category()); return std::error_code(); #else #warning Missing futimes() and futimens() return make_error_code(errc::function_not_supported); #endif } std::error_code mapped_file_region::init(int FD, uint64_t Offset, mapmode Mode) { assert(Size != 0); int flags = (Mode == readwrite) ? MAP_SHARED : MAP_PRIVATE; int prot = (Mode == readonly) ? PROT_READ : (PROT_READ | PROT_WRITE); #if defined(__APPLE__) //---------------------------------------------------------------------- // Newer versions of MacOSX have a flag that will allow us to read from // binaries whose code signature is invalid without crashing by using // the MAP_RESILIENT_CODESIGN flag. Also if a file from removable media // is mapped we can avoid crashing and return zeroes to any pages we try // to read if the media becomes unavailable by using the // MAP_RESILIENT_MEDIA flag. These flags are only usable when mapping // with PROT_READ, so take care not to specify them otherwise. //---------------------------------------------------------------------- if (Mode == readonly) { #if defined(MAP_RESILIENT_CODESIGN) flags |= MAP_RESILIENT_CODESIGN; #endif #if defined(MAP_RESILIENT_MEDIA) flags |= MAP_RESILIENT_MEDIA; #endif } #endif // #if defined (__APPLE__) Mapping = ::mmap(nullptr, Size, prot, flags, FD, Offset); if (Mapping == MAP_FAILED) return std::error_code(errno, std::generic_category()); return std::error_code(); } mapped_file_region::mapped_file_region(int fd, mapmode mode, size_t length, uint64_t offset, std::error_code &ec) : Size(length), Mapping(), Mode(mode) { (void)Mode; ec = init(fd, offset, mode); if (ec) Mapping = nullptr; } mapped_file_region::~mapped_file_region() { if (Mapping) ::munmap(Mapping, Size); } size_t mapped_file_region::size() const { assert(Mapping && "Mapping failed but used anyway!"); return Size; } char *mapped_file_region::data() const { assert(Mapping && "Mapping failed but used anyway!"); return reinterpret_cast(Mapping); } const char *mapped_file_region::const_data() const { assert(Mapping && "Mapping failed but used anyway!"); return reinterpret_cast(Mapping); } int mapped_file_region::alignment() { return Process::getPageSizeEstimate(); } std::error_code detail::directory_iterator_construct(detail::DirIterState &it, StringRef path, bool follow_symlinks) { SmallString<128> path_null(path); DIR *directory = ::opendir(path_null.c_str()); if (!directory) return std::error_code(errno, std::generic_category()); it.IterationHandle = reinterpret_cast(directory); // Add something for replace_filename to replace. path::append(path_null, "."); it.CurrentEntry = directory_entry(path_null.str(), follow_symlinks); return directory_iterator_increment(it); } std::error_code detail::directory_iterator_destruct(detail::DirIterState &it) { if (it.IterationHandle) ::closedir(reinterpret_cast(it.IterationHandle)); it.IterationHandle = 0; it.CurrentEntry = directory_entry(); return std::error_code(); } static file_type direntType(dirent* Entry) { // Most platforms provide the file type in the dirent: Linux/BSD/Mac. // The DTTOIF macro lets us reuse our status -> type conversion. // Note that while glibc provides a macro to see if this is supported, // _DIRENT_HAVE_D_TYPE, it's not defined on BSD/Mac, so we test for the // d_type-to-mode_t conversion macro instead. #if defined(DTTOIF) return typeForMode(DTTOIF(Entry->d_type)); #else // Other platforms such as Solaris require a stat() to get the type. return file_type::type_unknown; #endif } std::error_code detail::directory_iterator_increment(detail::DirIterState &It) { errno = 0; dirent *CurDir = ::readdir(reinterpret_cast(It.IterationHandle)); if (CurDir == nullptr && errno != 0) { return std::error_code(errno, std::generic_category()); } else if (CurDir != nullptr) { StringRef Name(CurDir->d_name); if ((Name.size() == 1 && Name[0] == '.') || (Name.size() == 2 && Name[0] == '.' && Name[1] == '.')) return directory_iterator_increment(It); It.CurrentEntry.replace_filename(Name, direntType(CurDir)); } else return directory_iterator_destruct(It); return std::error_code(); } ErrorOr directory_entry::status() const { file_status s; if (auto EC = fs::status(Path, s, FollowSymlinks)) return EC; return s; } #if !defined(F_GETPATH) static bool hasProcSelfFD() { // If we have a /proc filesystem mounted, we can quickly establish the // real name of the file with readlink static const bool Result = (::access("/proc/self/fd", R_OK) == 0); return Result; } #endif static int nativeOpenFlags(CreationDisposition Disp, OpenFlags Flags, FileAccess Access) { int Result = 0; if (Access == FA_Read) Result |= O_RDONLY; else if (Access == FA_Write) Result |= O_WRONLY; else if (Access == (FA_Read | FA_Write)) Result |= O_RDWR; // This is for compatibility with old code that assumed OF_Append implied // would open an existing file. See Windows/Path.inc for a longer comment. if (Flags & OF_Append) Disp = CD_OpenAlways; if (Disp == CD_CreateNew) { Result |= O_CREAT; // Create if it doesn't exist. Result |= O_EXCL; // Fail if it does. } else if (Disp == CD_CreateAlways) { Result |= O_CREAT; // Create if it doesn't exist. Result |= O_TRUNC; // Truncate if it does. } else if (Disp == CD_OpenAlways) { Result |= O_CREAT; // Create if it doesn't exist. } else if (Disp == CD_OpenExisting) { // Nothing special, just don't add O_CREAT and we get these semantics. } if (Flags & OF_Append) Result |= O_APPEND; #ifdef O_CLOEXEC if (!(Flags & OF_ChildInherit)) Result |= O_CLOEXEC; #endif return Result; } std::error_code openFile(const Twine &Name, int &ResultFD, CreationDisposition Disp, FileAccess Access, OpenFlags Flags, unsigned Mode) { int OpenFlags = nativeOpenFlags(Disp, Flags, Access); SmallString<128> Storage; StringRef P = Name.toNullTerminatedStringRef(Storage); // Call ::open in a lambda to avoid overload resolution in RetryAfterSignal // when open is overloaded, such as in Bionic. auto Open = [&]() { return ::open(P.begin(), OpenFlags, Mode); }; if ((ResultFD = sys::RetryAfterSignal(-1, Open)) < 0) return std::error_code(errno, std::generic_category()); #ifndef O_CLOEXEC if (!(Flags & OF_ChildInherit)) { int r = fcntl(ResultFD, F_SETFD, FD_CLOEXEC); (void)r; assert(r == 0 && "fcntl(F_SETFD, FD_CLOEXEC) failed"); } #endif return std::error_code(); } Expected openNativeFile(const Twine &Name, CreationDisposition Disp, FileAccess Access, OpenFlags Flags, unsigned Mode) { int FD; std::error_code EC = openFile(Name, FD, Disp, Access, Flags, Mode); if (EC) return errorCodeToError(EC); return FD; } std::error_code openFileForRead(const Twine &Name, int &ResultFD, OpenFlags Flags, SmallVectorImpl *RealPath) { std::error_code EC = openFile(Name, ResultFD, CD_OpenExisting, FA_Read, Flags, 0666); if (EC) return EC; // Attempt to get the real name of the file, if the user asked if(!RealPath) return std::error_code(); RealPath->clear(); #if defined(F_GETPATH) // When F_GETPATH is availble, it is the quickest way to get // the real path name. char Buffer[MAXPATHLEN]; if (::fcntl(ResultFD, F_GETPATH, Buffer) != -1) RealPath->append(Buffer, Buffer + strlen(Buffer)); #else char Buffer[PATH_MAX]; if (hasProcSelfFD()) { char ProcPath[64]; snprintf(ProcPath, sizeof(ProcPath), "/proc/self/fd/%d", ResultFD); ssize_t CharCount = ::readlink(ProcPath, Buffer, sizeof(Buffer)); if (CharCount > 0) RealPath->append(Buffer, Buffer + CharCount); } else { SmallString<128> Storage; StringRef P = Name.toNullTerminatedStringRef(Storage); // Use ::realpath to get the real path name if (::realpath(P.begin(), Buffer) != nullptr) RealPath->append(Buffer, Buffer + strlen(Buffer)); } #endif return std::error_code(); } Expected openNativeFileForRead(const Twine &Name, OpenFlags Flags, SmallVectorImpl *RealPath) { file_t ResultFD; std::error_code EC = openFileForRead(Name, ResultFD, Flags, RealPath); if (EC) return errorCodeToError(EC); return ResultFD; } file_t getStdinHandle() { return 0; } file_t getStdoutHandle() { return 1; } file_t getStderrHandle() { return 2; } Expected readNativeFile(file_t FD, MutableArrayRef Buf) { ssize_t NumRead = sys::RetryAfterSignal(-1, ::read, FD, Buf.data(), Buf.size()); if (ssize_t(NumRead) == -1) return errorCodeToError(std::error_code(errno, std::generic_category())); return NumRead; } Expected readNativeFileSlice(file_t FD, MutableArrayRef Buf, uint64_t Offset) { #ifdef HAVE_PREAD ssize_t NumRead = sys::RetryAfterSignal(-1, ::pread, FD, Buf.data(), Buf.size(), Offset); #else if (lseek(FD, Offset, SEEK_SET) == -1) return errorCodeToError(std::error_code(errno, std::generic_category())); ssize_t NumRead = sys::RetryAfterSignal(-1, ::read, FD, Buf.data(), Buf.size()); #endif if (NumRead == -1) return errorCodeToError(std::error_code(errno, std::generic_category())); return NumRead; } std::error_code closeFile(file_t &F) { file_t TmpF = F; F = kInvalidFile; return Process::SafelyCloseFileDescriptor(TmpF); } template static std::error_code remove_directories_impl(const T &Entry, bool IgnoreErrors) { std::error_code EC; directory_iterator Begin(Entry, EC, false); directory_iterator End; while (Begin != End) { auto &Item = *Begin; ErrorOr st = Item.status(); if (!st && !IgnoreErrors) return st.getError(); if (is_directory(*st)) { EC = remove_directories_impl(Item, IgnoreErrors); if (EC && !IgnoreErrors) return EC; } EC = fs::remove(Item.path(), true); if (EC && !IgnoreErrors) return EC; Begin.increment(EC); if (EC && !IgnoreErrors) return EC; } return std::error_code(); } std::error_code remove_directories(const Twine &path, bool IgnoreErrors) { auto EC = remove_directories_impl(path, IgnoreErrors); if (EC && !IgnoreErrors) return EC; EC = fs::remove(path, true); if (EC && !IgnoreErrors) return EC; return std::error_code(); } std::error_code real_path(const Twine &path, SmallVectorImpl &dest, bool expand_tilde) { dest.clear(); if (path.isTriviallyEmpty()) return std::error_code(); if (expand_tilde) { SmallString<128> Storage; path.toVector(Storage); expandTildeExpr(Storage); return real_path(Storage, dest, false); } SmallString<128> Storage; StringRef P = path.toNullTerminatedStringRef(Storage); char Buffer[PATH_MAX]; if (::realpath(P.begin(), Buffer) == nullptr) return std::error_code(errno, std::generic_category()); dest.append(Buffer, Buffer + strlen(Buffer)); return std::error_code(); } } // end namespace fs namespace path { bool home_directory(SmallVectorImpl &result) { char *RequestedDir = getenv("HOME"); if (!RequestedDir) { struct passwd *pw = getpwuid(getuid()); if (pw && pw->pw_dir) RequestedDir = pw->pw_dir; } if (!RequestedDir) return false; result.clear(); result.append(RequestedDir, RequestedDir + strlen(RequestedDir)); return true; } static bool getDarwinConfDir(bool TempDir, SmallVectorImpl &Result) { #if defined(_CS_DARWIN_USER_TEMP_DIR) && defined(_CS_DARWIN_USER_CACHE_DIR) // On Darwin, use DARWIN_USER_TEMP_DIR or DARWIN_USER_CACHE_DIR. // macros defined in on darwin >= 9 int ConfName = TempDir ? _CS_DARWIN_USER_TEMP_DIR : _CS_DARWIN_USER_CACHE_DIR; size_t ConfLen = confstr(ConfName, nullptr, 0); if (ConfLen > 0) { do { Result.resize(ConfLen); ConfLen = confstr(ConfName, Result.data(), Result.size()); } while (ConfLen > 0 && ConfLen != Result.size()); if (ConfLen > 0) { assert(Result.back() == 0); Result.pop_back(); return true; } Result.clear(); } #endif return false; } static const char *getEnvTempDir() { // Check whether the temporary directory is specified by an environment // variable. const char *EnvironmentVariables[] = {"TMPDIR", "TMP", "TEMP", "TEMPDIR"}; for (const char *Env : EnvironmentVariables) { if (const char *Dir = std::getenv(Env)) return Dir; } return nullptr; } static const char *getDefaultTempDir(bool ErasedOnReboot) { #ifdef P_tmpdir if ((bool)P_tmpdir) return P_tmpdir; #endif if (ErasedOnReboot) return "/tmp"; return "/var/tmp"; } void system_temp_directory(bool ErasedOnReboot, SmallVectorImpl &Result) { Result.clear(); if (ErasedOnReboot) { // There is no env variable for the cache directory. if (const char *RequestedDir = getEnvTempDir()) { Result.append(RequestedDir, RequestedDir + strlen(RequestedDir)); return; } } if (getDarwinConfDir(ErasedOnReboot, Result)) return; const char *RequestedDir = getDefaultTempDir(ErasedOnReboot); Result.append(RequestedDir, RequestedDir + strlen(RequestedDir)); } } // end namespace path namespace fs { #ifdef __APPLE__ /// This implementation tries to perform an APFS CoW clone of the file, /// which can be much faster and uses less space. /// Unfortunately fcopyfile(3) does not support COPYFILE_CLONE, so the /// file descriptor variant of this function still uses the default /// implementation. std::error_code copy_file(const Twine &From, const Twine &To) { uint32_t Flag = COPYFILE_DATA; #if __has_builtin(__builtin_available) && defined(COPYFILE_CLONE) if (__builtin_available(macos 10.12, *)) { bool IsSymlink; if (std::error_code Error = is_symlink_file(From, IsSymlink)) return Error; // COPYFILE_CLONE clones the symlink instead of following it // and returns EEXISTS if the target file already exists. if (!IsSymlink && !exists(To)) Flag = COPYFILE_CLONE; } #endif int Status = copyfile(From.str().c_str(), To.str().c_str(), /* State */ NULL, Flag); if (Status == 0) return std::error_code(); return std::error_code(errno, std::generic_category()); } #endif // __APPLE__ } // end namespace fs } // end namespace sys } // end namespace llvm binaryen-version_108/third_party/llvm-project/Unix/Unix.h000066400000000000000000000064031423707623100237360ustar00rootroot00000000000000//===- llvm/Support/Unix/Unix.h - Common Unix Include File -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines things specific to Unix implementations. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_SUPPORT_UNIX_UNIX_H #define LLVM_LIB_SUPPORT_UNIX_UNIX_H //===----------------------------------------------------------------------===// //=== WARNING: Implementation here must contain only generic UNIX code that //=== is guaranteed to work on all UNIX variants. //===----------------------------------------------------------------------===// #include "llvm/Config/config.h" #include "llvm/Support/Chrono.h" #include "llvm/Support/Errno.h" #include "llvm/Support/ErrorHandling.h" #include #include #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_TIME_H # include #endif #include #ifdef HAVE_DLFCN_H # include #endif #ifdef HAVE_FCNTL_H # include #endif /// This function builds an error message into \p ErrMsg using the \p prefix /// string and the Unix error number given by \p errnum. If errnum is -1, the /// default then the value of errno is used. /// Make an error message /// /// If the error number can be converted to a string, it will be /// separated from prefix by ": ". static inline bool MakeErrMsg( std::string* ErrMsg, const std::string& prefix, int errnum = -1) { if (!ErrMsg) return true; if (errnum == -1) errnum = errno; *ErrMsg = prefix + ": " + llvm::sys::StrError(errnum); return true; } // Include StrError(errnum) in a fatal error message. LLVM_ATTRIBUTE_NORETURN static inline void ReportErrnumFatal(const char *Msg, int errnum) { std::string ErrMsg; MakeErrMsg(&ErrMsg, Msg, errnum); llvm::report_fatal_error(ErrMsg); } namespace llvm { namespace sys { /// Convert a struct timeval to a duration. Note that timeval can be used both /// as a time point and a duration. Be sure to check what the input represents. inline std::chrono::microseconds toDuration(const struct timeval &TV) { return std::chrono::seconds(TV.tv_sec) + std::chrono::microseconds(TV.tv_usec); } /// Convert a time point to struct timespec. inline struct timespec toTimeSpec(TimePoint<> TP) { using namespace std::chrono; struct timespec RetVal; RetVal.tv_sec = toTimeT(TP); RetVal.tv_nsec = (TP.time_since_epoch() % seconds(1)).count(); return RetVal; } /// Convert a time point to struct timeval. inline struct timeval toTimeVal(TimePoint TP) { using namespace std::chrono; struct timeval RetVal; RetVal.tv_sec = toTimeT(TP); RetVal.tv_usec = (TP.time_since_epoch() % seconds(1)).count(); return RetVal; } } // namespace sys } // namespace llvm #endif binaryen-version_108/third_party/llvm-project/WithColor.cpp000066400000000000000000000050521423707623100243340ustar00rootroot00000000000000//===- WithColor.cpp ------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; #if 0 // XXX BINARYEN cl::OptionCategory llvm::ColorCategory("Color Options"); static cl::opt UseColor("color", cl::cat(ColorCategory), cl::desc("Use colors in output (default=autodetect)"), cl::init(cl::BOU_UNSET)); #endif WithColor::WithColor(raw_ostream &OS, HighlightColor Color, bool DisableColors) : OS(OS), DisableColors(DisableColors) { // Detect color from terminal type unless the user passed the --color option. // XXX BINARYEN - no color support } raw_ostream &WithColor::error() { return error(errs()); } raw_ostream &WithColor::warning() { return warning(errs()); } raw_ostream &WithColor::note() { return note(errs()); } raw_ostream &WithColor::remark() { return remark(errs()); } raw_ostream &WithColor::error(raw_ostream &OS, StringRef Prefix, bool DisableColors) { if (!Prefix.empty()) OS << Prefix << ": "; return WithColor(OS, HighlightColor::Error, DisableColors).get() << "error: "; } raw_ostream &WithColor::warning(raw_ostream &OS, StringRef Prefix, bool DisableColors) { if (!Prefix.empty()) OS << Prefix << ": "; return WithColor(OS, HighlightColor::Warning, DisableColors).get() << "warning: "; } raw_ostream &WithColor::note(raw_ostream &OS, StringRef Prefix, bool DisableColors) { if (!Prefix.empty()) OS << Prefix << ": "; return WithColor(OS, HighlightColor::Note, DisableColors).get() << "note: "; } raw_ostream &WithColor::remark(raw_ostream &OS, StringRef Prefix, bool DisableColors) { if (!Prefix.empty()) OS << Prefix << ": "; return WithColor(OS, HighlightColor::Remark, DisableColors).get() << "remark: "; } bool WithColor::colorsEnabled() { return false; // XXX BINARYEN } WithColor &WithColor::changeColor(raw_ostream::Colors Color, bool Bold, bool BG) { // XXX BINARYEN return *this; } WithColor &WithColor::resetColor() { // XXX BINARYEN return *this; } WithColor::~WithColor() { resetColor(); } binaryen-version_108/third_party/llvm-project/YAMLParser.cpp000066400000000000000000002044021423707623100243410ustar00rootroot00000000000000//===- YAMLParser.cpp - Simple YAML parser --------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements a YAML parser. // //===----------------------------------------------------------------------===// #include "llvm/Support/YAMLParser.h" #include "llvm/ADT/AllocatorList.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/None.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/SMLoc.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/Unicode.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include #include #include #include #include using namespace llvm; using namespace yaml; enum UnicodeEncodingForm { UEF_UTF32_LE, ///< UTF-32 Little Endian UEF_UTF32_BE, ///< UTF-32 Big Endian UEF_UTF16_LE, ///< UTF-16 Little Endian UEF_UTF16_BE, ///< UTF-16 Big Endian UEF_UTF8, ///< UTF-8 or ascii. UEF_Unknown ///< Not a valid Unicode encoding. }; /// EncodingInfo - Holds the encoding type and length of the byte order mark if /// it exists. Length is in {0, 2, 3, 4}. using EncodingInfo = std::pair; /// getUnicodeEncoding - Reads up to the first 4 bytes to determine the Unicode /// encoding form of \a Input. /// /// @param Input A string of length 0 or more. /// @returns An EncodingInfo indicating the Unicode encoding form of the input /// and how long the byte order mark is if one exists. static EncodingInfo getUnicodeEncoding(StringRef Input) { if (Input.empty()) return std::make_pair(UEF_Unknown, 0); switch (uint8_t(Input[0])) { case 0x00: if (Input.size() >= 4) { if ( Input[1] == 0 && uint8_t(Input[2]) == 0xFE && uint8_t(Input[3]) == 0xFF) return std::make_pair(UEF_UTF32_BE, 4); if (Input[1] == 0 && Input[2] == 0 && Input[3] != 0) return std::make_pair(UEF_UTF32_BE, 0); } if (Input.size() >= 2 && Input[1] != 0) return std::make_pair(UEF_UTF16_BE, 0); return std::make_pair(UEF_Unknown, 0); case 0xFF: if ( Input.size() >= 4 && uint8_t(Input[1]) == 0xFE && Input[2] == 0 && Input[3] == 0) return std::make_pair(UEF_UTF32_LE, 4); if (Input.size() >= 2 && uint8_t(Input[1]) == 0xFE) return std::make_pair(UEF_UTF16_LE, 2); return std::make_pair(UEF_Unknown, 0); case 0xFE: if (Input.size() >= 2 && uint8_t(Input[1]) == 0xFF) return std::make_pair(UEF_UTF16_BE, 2); return std::make_pair(UEF_Unknown, 0); case 0xEF: if ( Input.size() >= 3 && uint8_t(Input[1]) == 0xBB && uint8_t(Input[2]) == 0xBF) return std::make_pair(UEF_UTF8, 3); return std::make_pair(UEF_Unknown, 0); } // It could still be utf-32 or utf-16. if (Input.size() >= 4 && Input[1] == 0 && Input[2] == 0 && Input[3] == 0) return std::make_pair(UEF_UTF32_LE, 0); if (Input.size() >= 2 && Input[1] == 0) return std::make_pair(UEF_UTF16_LE, 0); return std::make_pair(UEF_UTF8, 0); } /// Pin the vtables to this file. void Node::anchor() {} void NullNode::anchor() {} void ScalarNode::anchor() {} void BlockScalarNode::anchor() {} void KeyValueNode::anchor() {} void MappingNode::anchor() {} void SequenceNode::anchor() {} void AliasNode::anchor() {} namespace llvm { namespace yaml { /// Token - A single YAML token. struct Token { enum TokenKind { TK_Error, // Uninitialized token. TK_StreamStart, TK_StreamEnd, TK_VersionDirective, TK_TagDirective, TK_DocumentStart, TK_DocumentEnd, TK_BlockEntry, TK_BlockEnd, TK_BlockSequenceStart, TK_BlockMappingStart, TK_FlowEntry, TK_FlowSequenceStart, TK_FlowSequenceEnd, TK_FlowMappingStart, TK_FlowMappingEnd, TK_Key, TK_Value, TK_Scalar, TK_BlockScalar, TK_Alias, TK_Anchor, TK_Tag } Kind = TK_Error; /// A string of length 0 or more whose begin() points to the logical location /// of the token in the input. StringRef Range; /// The value of a block scalar node. std::string Value; Token() = default; }; } // end namespace yaml } // end namespace llvm using TokenQueueT = BumpPtrList; namespace { /// This struct is used to track simple keys. /// /// Simple keys are handled by creating an entry in SimpleKeys for each Token /// which could legally be the start of a simple key. When peekNext is called, /// if the Token To be returned is referenced by a SimpleKey, we continue /// tokenizing until that potential simple key has either been found to not be /// a simple key (we moved on to the next line or went further than 1024 chars). /// Or when we run into a Value, and then insert a Key token (and possibly /// others) before the SimpleKey's Tok. struct SimpleKey { TokenQueueT::iterator Tok; unsigned Column = 0; unsigned Line = 0; unsigned FlowLevel = 0; bool IsRequired = false; bool operator ==(const SimpleKey &Other) { return Tok == Other.Tok; } }; } // end anonymous namespace /// The Unicode scalar value of a UTF-8 minimal well-formed code unit /// subsequence and the subsequence's length in code units (uint8_t). /// A length of 0 represents an error. using UTF8Decoded = std::pair; static UTF8Decoded decodeUTF8(StringRef Range) { StringRef::iterator Position= Range.begin(); StringRef::iterator End = Range.end(); // 1 byte: [0x00, 0x7f] // Bit pattern: 0xxxxxxx if ((*Position & 0x80) == 0) { return std::make_pair(*Position, 1); } // 2 bytes: [0x80, 0x7ff] // Bit pattern: 110xxxxx 10xxxxxx if (Position + 1 != End && ((*Position & 0xE0) == 0xC0) && ((*(Position + 1) & 0xC0) == 0x80)) { uint32_t codepoint = ((*Position & 0x1F) << 6) | (*(Position + 1) & 0x3F); if (codepoint >= 0x80) return std::make_pair(codepoint, 2); } // 3 bytes: [0x8000, 0xffff] // Bit pattern: 1110xxxx 10xxxxxx 10xxxxxx if (Position + 2 != End && ((*Position & 0xF0) == 0xE0) && ((*(Position + 1) & 0xC0) == 0x80) && ((*(Position + 2) & 0xC0) == 0x80)) { uint32_t codepoint = ((*Position & 0x0F) << 12) | ((*(Position + 1) & 0x3F) << 6) | (*(Position + 2) & 0x3F); // Codepoints between 0xD800 and 0xDFFF are invalid, as // they are high / low surrogate halves used by UTF-16. if (codepoint >= 0x800 && (codepoint < 0xD800 || codepoint > 0xDFFF)) return std::make_pair(codepoint, 3); } // 4 bytes: [0x10000, 0x10FFFF] // Bit pattern: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx if (Position + 3 != End && ((*Position & 0xF8) == 0xF0) && ((*(Position + 1) & 0xC0) == 0x80) && ((*(Position + 2) & 0xC0) == 0x80) && ((*(Position + 3) & 0xC0) == 0x80)) { uint32_t codepoint = ((*Position & 0x07) << 18) | ((*(Position + 1) & 0x3F) << 12) | ((*(Position + 2) & 0x3F) << 6) | (*(Position + 3) & 0x3F); if (codepoint >= 0x10000 && codepoint <= 0x10FFFF) return std::make_pair(codepoint, 4); } return std::make_pair(0, 0); } namespace llvm { namespace yaml { /// Scans YAML tokens from a MemoryBuffer. class Scanner { public: Scanner(StringRef Input, SourceMgr &SM, bool ShowColors = true, std::error_code *EC = nullptr); Scanner(MemoryBufferRef Buffer, SourceMgr &SM_, bool ShowColors = true, std::error_code *EC = nullptr); /// Parse the next token and return it without popping it. Token &peekNext(); /// Parse the next token and pop it from the queue. Token getNext(); void printError(SMLoc Loc, SourceMgr::DiagKind Kind, const Twine &Message, ArrayRef Ranges = None) { SM.PrintMessage(Loc, Kind, Message, Ranges, /* FixIts= */ None, ShowColors); } void setError(const Twine &Message, StringRef::iterator Position) { if (Current >= End) Current = End - 1; // propagate the error if possible if (EC) *EC = make_error_code(std::errc::invalid_argument); // Don't print out more errors after the first one we encounter. The rest // are just the result of the first, and have no meaning. if (!Failed) printError(SMLoc::getFromPointer(Current), SourceMgr::DK_Error, Message); Failed = true; } void setError(const Twine &Message) { setError(Message, Current); } /// Returns true if an error occurred while parsing. bool failed() { return Failed; } private: void init(MemoryBufferRef Buffer); StringRef currentInput() { return StringRef(Current, End - Current); } /// Decode a UTF-8 minimal well-formed code unit subsequence starting /// at \a Position. /// /// If the UTF-8 code units starting at Position do not form a well-formed /// code unit subsequence, then the Unicode scalar value is 0, and the length /// is 0. UTF8Decoded decodeUTF8(StringRef::iterator Position) { return ::decodeUTF8(StringRef(Position, End - Position)); } // The following functions are based on the gramar rules in the YAML spec. The // style of the function names it meant to closely match how they are written // in the spec. The number within the [] is the number of the grammar rule in // the spec. // // See 4.2 [Production Naming Conventions] for the meaning of the prefixes. // // c- // A production starting and ending with a special character. // b- // A production matching a single line break. // nb- // A production starting and ending with a non-break character. // s- // A production starting and ending with a white space character. // ns- // A production starting and ending with a non-space character. // l- // A production matching complete line(s). /// Skip a single nb-char[27] starting at Position. /// /// A nb-char is 0x9 | [0x20-0x7E] | 0x85 | [0xA0-0xD7FF] | [0xE000-0xFEFE] /// | [0xFF00-0xFFFD] | [0x10000-0x10FFFF] /// /// @returns The code unit after the nb-char, or Position if it's not an /// nb-char. StringRef::iterator skip_nb_char(StringRef::iterator Position); /// Skip a single b-break[28] starting at Position. /// /// A b-break is 0xD 0xA | 0xD | 0xA /// /// @returns The code unit after the b-break, or Position if it's not a /// b-break. StringRef::iterator skip_b_break(StringRef::iterator Position); /// Skip a single s-space[31] starting at Position. /// /// An s-space is 0x20 /// /// @returns The code unit after the s-space, or Position if it's not a /// s-space. StringRef::iterator skip_s_space(StringRef::iterator Position); /// Skip a single s-white[33] starting at Position. /// /// A s-white is 0x20 | 0x9 /// /// @returns The code unit after the s-white, or Position if it's not a /// s-white. StringRef::iterator skip_s_white(StringRef::iterator Position); /// Skip a single ns-char[34] starting at Position. /// /// A ns-char is nb-char - s-white /// /// @returns The code unit after the ns-char, or Position if it's not a /// ns-char. StringRef::iterator skip_ns_char(StringRef::iterator Position); using SkipWhileFunc = StringRef::iterator (Scanner::*)(StringRef::iterator); /// Skip minimal well-formed code unit subsequences until Func /// returns its input. /// /// @returns The code unit after the last minimal well-formed code unit /// subsequence that Func accepted. StringRef::iterator skip_while( SkipWhileFunc Func , StringRef::iterator Position); /// Skip minimal well-formed code unit subsequences until Func returns its /// input. void advanceWhile(SkipWhileFunc Func); /// Scan ns-uri-char[39]s starting at Cur. /// /// This updates Cur and Column while scanning. void scan_ns_uri_char(); /// Consume a minimal well-formed code unit subsequence starting at /// \a Cur. Return false if it is not the same Unicode scalar value as /// \a Expected. This updates \a Column. bool consume(uint32_t Expected); /// Skip \a Distance UTF-8 code units. Updates \a Cur and \a Column. void skip(uint32_t Distance); /// Return true if the minimal well-formed code unit subsequence at /// Pos is whitespace or a new line bool isBlankOrBreak(StringRef::iterator Position); /// Consume a single b-break[28] if it's present at the current position. /// /// Return false if the code unit at the current position isn't a line break. bool consumeLineBreakIfPresent(); /// If IsSimpleKeyAllowed, create and push_back a new SimpleKey. void saveSimpleKeyCandidate( TokenQueueT::iterator Tok , unsigned AtColumn , bool IsRequired); /// Remove simple keys that can no longer be valid simple keys. /// /// Invalid simple keys are not on the current line or are further than 1024 /// columns back. void removeStaleSimpleKeyCandidates(); /// Remove all simple keys on FlowLevel \a Level. void removeSimpleKeyCandidatesOnFlowLevel(unsigned Level); /// Unroll indentation in \a Indents back to \a Col. Creates BlockEnd /// tokens if needed. bool unrollIndent(int ToColumn); /// Increase indent to \a Col. Creates \a Kind token at \a InsertPoint /// if needed. bool rollIndent( int ToColumn , Token::TokenKind Kind , TokenQueueT::iterator InsertPoint); /// Skip a single-line comment when the comment starts at the current /// position of the scanner. void skipComment(); /// Skip whitespace and comments until the start of the next token. void scanToNextToken(); /// Must be the first token generated. bool scanStreamStart(); /// Generate tokens needed to close out the stream. bool scanStreamEnd(); /// Scan a %BLAH directive. bool scanDirective(); /// Scan a ... or ---. bool scanDocumentIndicator(bool IsStart); /// Scan a [ or { and generate the proper flow collection start token. bool scanFlowCollectionStart(bool IsSequence); /// Scan a ] or } and generate the proper flow collection end token. bool scanFlowCollectionEnd(bool IsSequence); /// Scan the , that separates entries in a flow collection. bool scanFlowEntry(); /// Scan the - that starts block sequence entries. bool scanBlockEntry(); /// Scan an explicit ? indicating a key. bool scanKey(); /// Scan an explicit : indicating a value. bool scanValue(); /// Scan a quoted scalar. bool scanFlowScalar(bool IsDoubleQuoted); /// Scan an unquoted scalar. bool scanPlainScalar(); /// Scan an Alias or Anchor starting with * or &. bool scanAliasOrAnchor(bool IsAlias); /// Scan a block scalar starting with | or >. bool scanBlockScalar(bool IsLiteral); /// Scan a chomping indicator in a block scalar header. char scanBlockChompingIndicator(); /// Scan an indentation indicator in a block scalar header. unsigned scanBlockIndentationIndicator(); /// Scan a block scalar header. /// /// Return false if an error occurred. bool scanBlockScalarHeader(char &ChompingIndicator, unsigned &IndentIndicator, bool &IsDone); /// Look for the indentation level of a block scalar. /// /// Return false if an error occurred. bool findBlockScalarIndent(unsigned &BlockIndent, unsigned BlockExitIndent, unsigned &LineBreaks, bool &IsDone); /// Scan the indentation of a text line in a block scalar. /// /// Return false if an error occurred. bool scanBlockScalarIndent(unsigned BlockIndent, unsigned BlockExitIndent, bool &IsDone); /// Scan a tag of the form !stuff. bool scanTag(); /// Dispatch to the next scanning function based on \a *Cur. bool fetchMoreTokens(); /// The SourceMgr used for diagnostics and buffer management. SourceMgr &SM; /// The original input. MemoryBufferRef InputBuffer; /// The current position of the scanner. StringRef::iterator Current; /// The end of the input (one past the last character). StringRef::iterator End; /// Current YAML indentation level in spaces. int Indent; /// Current column number in Unicode code points. unsigned Column; /// Current line number. unsigned Line; /// How deep we are in flow style containers. 0 Means at block level. unsigned FlowLevel; /// Are we at the start of the stream? bool IsStartOfStream; /// Can the next token be the start of a simple key? bool IsSimpleKeyAllowed; /// True if an error has occurred. bool Failed; /// Should colors be used when printing out the diagnostic messages? bool ShowColors; /// Queue of tokens. This is required to queue up tokens while looking /// for the end of a simple key. And for cases where a single character /// can produce multiple tokens (e.g. BlockEnd). TokenQueueT TokenQueue; /// Indentation levels. SmallVector Indents; /// Potential simple keys. SmallVector SimpleKeys; std::error_code *EC; }; } // end namespace yaml } // end namespace llvm /// encodeUTF8 - Encode \a UnicodeScalarValue in UTF-8 and append it to result. static void encodeUTF8( uint32_t UnicodeScalarValue , SmallVectorImpl &Result) { if (UnicodeScalarValue <= 0x7F) { Result.push_back(UnicodeScalarValue & 0x7F); } else if (UnicodeScalarValue <= 0x7FF) { uint8_t FirstByte = 0xC0 | ((UnicodeScalarValue & 0x7C0) >> 6); uint8_t SecondByte = 0x80 | (UnicodeScalarValue & 0x3F); Result.push_back(FirstByte); Result.push_back(SecondByte); } else if (UnicodeScalarValue <= 0xFFFF) { uint8_t FirstByte = 0xE0 | ((UnicodeScalarValue & 0xF000) >> 12); uint8_t SecondByte = 0x80 | ((UnicodeScalarValue & 0xFC0) >> 6); uint8_t ThirdByte = 0x80 | (UnicodeScalarValue & 0x3F); Result.push_back(FirstByte); Result.push_back(SecondByte); Result.push_back(ThirdByte); } else if (UnicodeScalarValue <= 0x10FFFF) { uint8_t FirstByte = 0xF0 | ((UnicodeScalarValue & 0x1F0000) >> 18); uint8_t SecondByte = 0x80 | ((UnicodeScalarValue & 0x3F000) >> 12); uint8_t ThirdByte = 0x80 | ((UnicodeScalarValue & 0xFC0) >> 6); uint8_t FourthByte = 0x80 | (UnicodeScalarValue & 0x3F); Result.push_back(FirstByte); Result.push_back(SecondByte); Result.push_back(ThirdByte); Result.push_back(FourthByte); } } bool yaml::dumpTokens(StringRef Input, raw_ostream &OS) { SourceMgr SM; Scanner scanner(Input, SM); while (true) { Token T = scanner.getNext(); switch (T.Kind) { case Token::TK_StreamStart: OS << "Stream-Start: "; break; case Token::TK_StreamEnd: OS << "Stream-End: "; break; case Token::TK_VersionDirective: OS << "Version-Directive: "; break; case Token::TK_TagDirective: OS << "Tag-Directive: "; break; case Token::TK_DocumentStart: OS << "Document-Start: "; break; case Token::TK_DocumentEnd: OS << "Document-End: "; break; case Token::TK_BlockEntry: OS << "Block-Entry: "; break; case Token::TK_BlockEnd: OS << "Block-End: "; break; case Token::TK_BlockSequenceStart: OS << "Block-Sequence-Start: "; break; case Token::TK_BlockMappingStart: OS << "Block-Mapping-Start: "; break; case Token::TK_FlowEntry: OS << "Flow-Entry: "; break; case Token::TK_FlowSequenceStart: OS << "Flow-Sequence-Start: "; break; case Token::TK_FlowSequenceEnd: OS << "Flow-Sequence-End: "; break; case Token::TK_FlowMappingStart: OS << "Flow-Mapping-Start: "; break; case Token::TK_FlowMappingEnd: OS << "Flow-Mapping-End: "; break; case Token::TK_Key: OS << "Key: "; break; case Token::TK_Value: OS << "Value: "; break; case Token::TK_Scalar: OS << "Scalar: "; break; case Token::TK_BlockScalar: OS << "Block Scalar: "; break; case Token::TK_Alias: OS << "Alias: "; break; case Token::TK_Anchor: OS << "Anchor: "; break; case Token::TK_Tag: OS << "Tag: "; break; case Token::TK_Error: break; } OS << T.Range << "\n"; if (T.Kind == Token::TK_StreamEnd) break; else if (T.Kind == Token::TK_Error) return false; } return true; } bool yaml::scanTokens(StringRef Input) { SourceMgr SM; Scanner scanner(Input, SM); while (true) { Token T = scanner.getNext(); if (T.Kind == Token::TK_StreamEnd) break; else if (T.Kind == Token::TK_Error) return false; } return true; } std::string yaml::escape(StringRef Input, bool EscapePrintable) { llvm_unreachable("BYN yaml::escape"); } Scanner::Scanner(StringRef Input, SourceMgr &sm, bool ShowColors, std::error_code *EC) : SM(sm), ShowColors(ShowColors), EC(EC) { init(MemoryBufferRef(Input, "YAML")); } Scanner::Scanner(MemoryBufferRef Buffer, SourceMgr &SM_, bool ShowColors, std::error_code *EC) : SM(SM_), ShowColors(ShowColors), EC(EC) { init(Buffer); } void Scanner::init(MemoryBufferRef Buffer) { InputBuffer = Buffer; Current = InputBuffer.getBufferStart(); End = InputBuffer.getBufferEnd(); Indent = -1; Column = 0; Line = 0; FlowLevel = 0; IsStartOfStream = true; IsSimpleKeyAllowed = true; Failed = false; std::unique_ptr InputBufferOwner = MemoryBuffer::getMemBuffer(Buffer); SM.AddNewSourceBuffer(std::move(InputBufferOwner), SMLoc()); } Token &Scanner::peekNext() { // If the current token is a possible simple key, keep parsing until we // can confirm. bool NeedMore = false; while (true) { if (TokenQueue.empty() || NeedMore) { if (!fetchMoreTokens()) { TokenQueue.clear(); SimpleKeys.clear(); TokenQueue.push_back(Token()); return TokenQueue.front(); } } assert(!TokenQueue.empty() && "fetchMoreTokens lied about getting tokens!"); removeStaleSimpleKeyCandidates(); SimpleKey SK; SK.Tok = TokenQueue.begin(); if (!is_contained(SimpleKeys, SK)) break; else NeedMore = true; } return TokenQueue.front(); } Token Scanner::getNext() { Token Ret = peekNext(); // TokenQueue can be empty if there was an error getting the next token. if (!TokenQueue.empty()) TokenQueue.pop_front(); // There cannot be any referenced Token's if the TokenQueue is empty. So do a // quick deallocation of them all. if (TokenQueue.empty()) TokenQueue.resetAlloc(); return Ret; } StringRef::iterator Scanner::skip_nb_char(StringRef::iterator Position) { if (Position == End) return Position; // Check 7 bit c-printable - b-char. if ( *Position == 0x09 || (*Position >= 0x20 && *Position <= 0x7E)) return Position + 1; // Check for valid UTF-8. if (uint8_t(*Position) & 0x80) { UTF8Decoded u8d = decodeUTF8(Position); if ( u8d.second != 0 && u8d.first != 0xFEFF && ( u8d.first == 0x85 || ( u8d.first >= 0xA0 && u8d.first <= 0xD7FF) || ( u8d.first >= 0xE000 && u8d.first <= 0xFFFD) || ( u8d.first >= 0x10000 && u8d.first <= 0x10FFFF))) return Position + u8d.second; } return Position; } StringRef::iterator Scanner::skip_b_break(StringRef::iterator Position) { if (Position == End) return Position; if (*Position == 0x0D) { if (Position + 1 != End && *(Position + 1) == 0x0A) return Position + 2; return Position + 1; } if (*Position == 0x0A) return Position + 1; return Position; } StringRef::iterator Scanner::skip_s_space(StringRef::iterator Position) { if (Position == End) return Position; if (*Position == ' ') return Position + 1; return Position; } StringRef::iterator Scanner::skip_s_white(StringRef::iterator Position) { if (Position == End) return Position; if (*Position == ' ' || *Position == '\t') return Position + 1; return Position; } StringRef::iterator Scanner::skip_ns_char(StringRef::iterator Position) { if (Position == End) return Position; if (*Position == ' ' || *Position == '\t') return Position; return skip_nb_char(Position); } StringRef::iterator Scanner::skip_while( SkipWhileFunc Func , StringRef::iterator Position) { while (true) { StringRef::iterator i = (this->*Func)(Position); if (i == Position) break; Position = i; } return Position; } void Scanner::advanceWhile(SkipWhileFunc Func) { auto Final = skip_while(Func, Current); Column += Final - Current; Current = Final; } static bool is_ns_hex_digit(const char C) { return (C >= '0' && C <= '9') || (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z'); } static bool is_ns_word_char(const char C) { return C == '-' || (C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z'); } void Scanner::scan_ns_uri_char() { while (true) { if (Current == End) break; if (( *Current == '%' && Current + 2 < End && is_ns_hex_digit(*(Current + 1)) && is_ns_hex_digit(*(Current + 2))) || is_ns_word_char(*Current) || StringRef(Current, 1).find_first_of("#;/?:@&=+$,_.!~*'()[]") != StringRef::npos) { ++Current; ++Column; } else break; } } bool Scanner::consume(uint32_t Expected) { if (Expected >= 0x80) { setError("Cannot consume non-ascii characters"); return false; } if (Current == End) return false; if (uint8_t(*Current) >= 0x80) { setError("Cannot consume non-ascii characters"); return false; } if (uint8_t(*Current) == Expected) { ++Current; ++Column; return true; } return false; } void Scanner::skip(uint32_t Distance) { Current += Distance; Column += Distance; assert(Current <= End && "Skipped past the end"); } bool Scanner::isBlankOrBreak(StringRef::iterator Position) { if (Position == End) return false; return *Position == ' ' || *Position == '\t' || *Position == '\r' || *Position == '\n'; } bool Scanner::consumeLineBreakIfPresent() { auto Next = skip_b_break(Current); if (Next == Current) return false; Column = 0; ++Line; Current = Next; return true; } void Scanner::saveSimpleKeyCandidate( TokenQueueT::iterator Tok , unsigned AtColumn , bool IsRequired) { if (IsSimpleKeyAllowed) { SimpleKey SK; SK.Tok = Tok; SK.Line = Line; SK.Column = AtColumn; SK.IsRequired = IsRequired; SK.FlowLevel = FlowLevel; SimpleKeys.push_back(SK); } } void Scanner::removeStaleSimpleKeyCandidates() { for (SmallVectorImpl::iterator i = SimpleKeys.begin(); i != SimpleKeys.end();) { if (i->Line != Line || i->Column + 1024 < Column) { if (i->IsRequired) setError( "Could not find expected : for simple key" , i->Tok->Range.begin()); i = SimpleKeys.erase(i); } else ++i; } } void Scanner::removeSimpleKeyCandidatesOnFlowLevel(unsigned Level) { if (!SimpleKeys.empty() && (SimpleKeys.end() - 1)->FlowLevel == Level) SimpleKeys.pop_back(); } bool Scanner::unrollIndent(int ToColumn) { Token T; // Indentation is ignored in flow. if (FlowLevel != 0) return true; while (Indent > ToColumn) { T.Kind = Token::TK_BlockEnd; T.Range = StringRef(Current, 1); TokenQueue.push_back(T); Indent = Indents.pop_back_val(); } return true; } bool Scanner::rollIndent( int ToColumn , Token::TokenKind Kind , TokenQueueT::iterator InsertPoint) { if (FlowLevel) return true; if (Indent < ToColumn) { Indents.push_back(Indent); Indent = ToColumn; Token T; T.Kind = Kind; T.Range = StringRef(Current, 0); TokenQueue.insert(InsertPoint, T); } return true; } void Scanner::skipComment() { if (*Current != '#') return; while (true) { // This may skip more than one byte, thus Column is only incremented // for code points. StringRef::iterator I = skip_nb_char(Current); if (I == Current) break; Current = I; ++Column; } } void Scanner::scanToNextToken() { while (true) { while (*Current == ' ' || *Current == '\t') { skip(1); } skipComment(); // Skip EOL. StringRef::iterator i = skip_b_break(Current); if (i == Current) break; Current = i; ++Line; Column = 0; // New lines may start a simple key. if (!FlowLevel) IsSimpleKeyAllowed = true; } } bool Scanner::scanStreamStart() { IsStartOfStream = false; EncodingInfo EI = getUnicodeEncoding(currentInput()); Token T; T.Kind = Token::TK_StreamStart; T.Range = StringRef(Current, EI.second); TokenQueue.push_back(T); Current += EI.second; return true; } bool Scanner::scanStreamEnd() { // Force an ending new line if one isn't present. if (Column != 0) { Column = 0; ++Line; } unrollIndent(-1); SimpleKeys.clear(); IsSimpleKeyAllowed = false; Token T; T.Kind = Token::TK_StreamEnd; T.Range = StringRef(Current, 0); TokenQueue.push_back(T); return true; } bool Scanner::scanDirective() { // Reset the indentation level. unrollIndent(-1); SimpleKeys.clear(); IsSimpleKeyAllowed = false; StringRef::iterator Start = Current; consume('%'); StringRef::iterator NameStart = Current; Current = skip_while(&Scanner::skip_ns_char, Current); StringRef Name(NameStart, Current - NameStart); Current = skip_while(&Scanner::skip_s_white, Current); Token T; if (Name == "YAML") { Current = skip_while(&Scanner::skip_ns_char, Current); T.Kind = Token::TK_VersionDirective; T.Range = StringRef(Start, Current - Start); TokenQueue.push_back(T); return true; } else if(Name == "TAG") { Current = skip_while(&Scanner::skip_ns_char, Current); Current = skip_while(&Scanner::skip_s_white, Current); Current = skip_while(&Scanner::skip_ns_char, Current); T.Kind = Token::TK_TagDirective; T.Range = StringRef(Start, Current - Start); TokenQueue.push_back(T); return true; } return false; } bool Scanner::scanDocumentIndicator(bool IsStart) { unrollIndent(-1); SimpleKeys.clear(); IsSimpleKeyAllowed = false; Token T; T.Kind = IsStart ? Token::TK_DocumentStart : Token::TK_DocumentEnd; T.Range = StringRef(Current, 3); skip(3); TokenQueue.push_back(T); return true; } bool Scanner::scanFlowCollectionStart(bool IsSequence) { Token T; T.Kind = IsSequence ? Token::TK_FlowSequenceStart : Token::TK_FlowMappingStart; T.Range = StringRef(Current, 1); skip(1); TokenQueue.push_back(T); // [ and { may begin a simple key. saveSimpleKeyCandidate(--TokenQueue.end(), Column - 1, false); // And may also be followed by a simple key. IsSimpleKeyAllowed = true; ++FlowLevel; return true; } bool Scanner::scanFlowCollectionEnd(bool IsSequence) { removeSimpleKeyCandidatesOnFlowLevel(FlowLevel); IsSimpleKeyAllowed = false; Token T; T.Kind = IsSequence ? Token::TK_FlowSequenceEnd : Token::TK_FlowMappingEnd; T.Range = StringRef(Current, 1); skip(1); TokenQueue.push_back(T); if (FlowLevel) --FlowLevel; return true; } bool Scanner::scanFlowEntry() { removeSimpleKeyCandidatesOnFlowLevel(FlowLevel); IsSimpleKeyAllowed = true; Token T; T.Kind = Token::TK_FlowEntry; T.Range = StringRef(Current, 1); skip(1); TokenQueue.push_back(T); return true; } bool Scanner::scanBlockEntry() { rollIndent(Column, Token::TK_BlockSequenceStart, TokenQueue.end()); removeSimpleKeyCandidatesOnFlowLevel(FlowLevel); IsSimpleKeyAllowed = true; Token T; T.Kind = Token::TK_BlockEntry; T.Range = StringRef(Current, 1); skip(1); TokenQueue.push_back(T); return true; } bool Scanner::scanKey() { if (!FlowLevel) rollIndent(Column, Token::TK_BlockMappingStart, TokenQueue.end()); removeSimpleKeyCandidatesOnFlowLevel(FlowLevel); IsSimpleKeyAllowed = !FlowLevel; Token T; T.Kind = Token::TK_Key; T.Range = StringRef(Current, 1); skip(1); TokenQueue.push_back(T); return true; } bool Scanner::scanValue() { // If the previous token could have been a simple key, insert the key token // into the token queue. if (!SimpleKeys.empty()) { SimpleKey SK = SimpleKeys.pop_back_val(); Token T; T.Kind = Token::TK_Key; T.Range = SK.Tok->Range; TokenQueueT::iterator i, e; for (i = TokenQueue.begin(), e = TokenQueue.end(); i != e; ++i) { if (i == SK.Tok) break; } if (i == e) { Failed = true; return false; } i = TokenQueue.insert(i, T); // We may also need to add a Block-Mapping-Start token. rollIndent(SK.Column, Token::TK_BlockMappingStart, i); IsSimpleKeyAllowed = false; } else { if (!FlowLevel) rollIndent(Column, Token::TK_BlockMappingStart, TokenQueue.end()); IsSimpleKeyAllowed = !FlowLevel; } Token T; T.Kind = Token::TK_Value; T.Range = StringRef(Current, 1); skip(1); TokenQueue.push_back(T); return true; } // Forbidding inlining improves performance by roughly 20%. // FIXME: Remove once llvm optimizes this to the faster version without hints. LLVM_ATTRIBUTE_NOINLINE static bool wasEscaped(StringRef::iterator First, StringRef::iterator Position); // Returns whether a character at 'Position' was escaped with a leading '\'. // 'First' specifies the position of the first character in the string. static bool wasEscaped(StringRef::iterator First, StringRef::iterator Position) { assert(Position - 1 >= First); StringRef::iterator I = Position - 1; // We calculate the number of consecutive '\'s before the current position // by iterating backwards through our string. while (I >= First && *I == '\\') --I; // (Position - 1 - I) now contains the number of '\'s before the current // position. If it is odd, the character at 'Position' was escaped. return (Position - 1 - I) % 2 == 1; } bool Scanner::scanFlowScalar(bool IsDoubleQuoted) { StringRef::iterator Start = Current; unsigned ColStart = Column; if (IsDoubleQuoted) { do { ++Current; while (Current != End && *Current != '"') ++Current; // Repeat until the previous character was not a '\' or was an escaped // backslash. } while ( Current != End && *(Current - 1) == '\\' && wasEscaped(Start + 1, Current)); } else { skip(1); while (true) { // Skip a ' followed by another '. if (Current + 1 < End && *Current == '\'' && *(Current + 1) == '\'') { skip(2); continue; } else if (*Current == '\'') break; StringRef::iterator i = skip_nb_char(Current); if (i == Current) { i = skip_b_break(Current); if (i == Current) break; Current = i; Column = 0; ++Line; } else { if (i == End) break; Current = i; ++Column; } } } if (Current == End) { setError("Expected quote at end of scalar", Current); return false; } skip(1); // Skip ending quote. Token T; T.Kind = Token::TK_Scalar; T.Range = StringRef(Start, Current - Start); TokenQueue.push_back(T); saveSimpleKeyCandidate(--TokenQueue.end(), ColStart, false); IsSimpleKeyAllowed = false; return true; } bool Scanner::scanPlainScalar() { StringRef::iterator Start = Current; unsigned ColStart = Column; unsigned LeadingBlanks = 0; assert(Indent >= -1 && "Indent must be >= -1 !"); unsigned indent = static_cast(Indent + 1); while (true) { if (*Current == '#') break; while (!isBlankOrBreak(Current)) { if ( FlowLevel && *Current == ':' && !(isBlankOrBreak(Current + 1) || *(Current + 1) == ',')) { setError("Found unexpected ':' while scanning a plain scalar", Current); return false; } // Check for the end of the plain scalar. if ( (*Current == ':' && isBlankOrBreak(Current + 1)) || ( FlowLevel && (StringRef(Current, 1).find_first_of(",:?[]{}") != StringRef::npos))) break; StringRef::iterator i = skip_nb_char(Current); if (i == Current) break; Current = i; ++Column; } // Are we at the end? if (!isBlankOrBreak(Current)) break; // Eat blanks. StringRef::iterator Tmp = Current; while (isBlankOrBreak(Tmp)) { StringRef::iterator i = skip_s_white(Tmp); if (i != Tmp) { if (LeadingBlanks && (Column < indent) && *Tmp == '\t') { setError("Found invalid tab character in indentation", Tmp); return false; } Tmp = i; ++Column; } else { i = skip_b_break(Tmp); if (!LeadingBlanks) LeadingBlanks = 1; Tmp = i; Column = 0; ++Line; } } if (!FlowLevel && Column < indent) break; Current = Tmp; } if (Start == Current) { setError("Got empty plain scalar", Start); return false; } Token T; T.Kind = Token::TK_Scalar; T.Range = StringRef(Start, Current - Start); TokenQueue.push_back(T); // Plain scalars can be simple keys. saveSimpleKeyCandidate(--TokenQueue.end(), ColStart, false); IsSimpleKeyAllowed = false; return true; } bool Scanner::scanAliasOrAnchor(bool IsAlias) { StringRef::iterator Start = Current; unsigned ColStart = Column; skip(1); while(true) { if ( *Current == '[' || *Current == ']' || *Current == '{' || *Current == '}' || *Current == ',' || *Current == ':') break; StringRef::iterator i = skip_ns_char(Current); if (i == Current) break; Current = i; ++Column; } if (Start == Current) { setError("Got empty alias or anchor", Start); return false; } Token T; T.Kind = IsAlias ? Token::TK_Alias : Token::TK_Anchor; T.Range = StringRef(Start, Current - Start); TokenQueue.push_back(T); // Alias and anchors can be simple keys. saveSimpleKeyCandidate(--TokenQueue.end(), ColStart, false); IsSimpleKeyAllowed = false; return true; } char Scanner::scanBlockChompingIndicator() { char Indicator = ' '; if (Current != End && (*Current == '+' || *Current == '-')) { Indicator = *Current; skip(1); } return Indicator; } /// Get the number of line breaks after chomping. /// /// Return the number of trailing line breaks to emit, depending on /// \p ChompingIndicator. static unsigned getChompedLineBreaks(char ChompingIndicator, unsigned LineBreaks, StringRef Str) { if (ChompingIndicator == '-') // Strip all line breaks. return 0; if (ChompingIndicator == '+') // Keep all line breaks. return LineBreaks; // Clip trailing lines. return Str.empty() ? 0 : 1; } unsigned Scanner::scanBlockIndentationIndicator() { unsigned Indent = 0; if (Current != End && (*Current >= '1' && *Current <= '9')) { Indent = unsigned(*Current - '0'); skip(1); } return Indent; } bool Scanner::scanBlockScalarHeader(char &ChompingIndicator, unsigned &IndentIndicator, bool &IsDone) { auto Start = Current; ChompingIndicator = scanBlockChompingIndicator(); IndentIndicator = scanBlockIndentationIndicator(); // Check for the chomping indicator once again. if (ChompingIndicator == ' ') ChompingIndicator = scanBlockChompingIndicator(); Current = skip_while(&Scanner::skip_s_white, Current); skipComment(); if (Current == End) { // EOF, we have an empty scalar. Token T; T.Kind = Token::TK_BlockScalar; T.Range = StringRef(Start, Current - Start); TokenQueue.push_back(T); IsDone = true; return true; } if (!consumeLineBreakIfPresent()) { setError("Expected a line break after block scalar header", Current); return false; } return true; } bool Scanner::findBlockScalarIndent(unsigned &BlockIndent, unsigned BlockExitIndent, unsigned &LineBreaks, bool &IsDone) { unsigned MaxAllSpaceLineCharacters = 0; StringRef::iterator LongestAllSpaceLine; while (true) { advanceWhile(&Scanner::skip_s_space); if (skip_nb_char(Current) != Current) { // This line isn't empty, so try and find the indentation. if (Column <= BlockExitIndent) { // End of the block literal. IsDone = true; return true; } // We found the block's indentation. BlockIndent = Column; if (MaxAllSpaceLineCharacters > BlockIndent) { setError( "Leading all-spaces line must be smaller than the block indent", LongestAllSpaceLine); return false; } return true; } if (skip_b_break(Current) != Current && Column > MaxAllSpaceLineCharacters) { // Record the longest all-space line in case it's longer than the // discovered block indent. MaxAllSpaceLineCharacters = Column; LongestAllSpaceLine = Current; } // Check for EOF. if (Current == End) { IsDone = true; return true; } if (!consumeLineBreakIfPresent()) { IsDone = true; return true; } ++LineBreaks; } return true; } bool Scanner::scanBlockScalarIndent(unsigned BlockIndent, unsigned BlockExitIndent, bool &IsDone) { // Skip the indentation. while (Column < BlockIndent) { auto I = skip_s_space(Current); if (I == Current) break; Current = I; ++Column; } if (skip_nb_char(Current) == Current) return true; if (Column <= BlockExitIndent) { // End of the block literal. IsDone = true; return true; } if (Column < BlockIndent) { if (Current != End && *Current == '#') { // Trailing comment. IsDone = true; return true; } setError("A text line is less indented than the block scalar", Current); return false; } return true; // A normal text line. } bool Scanner::scanBlockScalar(bool IsLiteral) { // Eat '|' or '>' assert(*Current == '|' || *Current == '>'); skip(1); char ChompingIndicator; unsigned BlockIndent; bool IsDone = false; if (!scanBlockScalarHeader(ChompingIndicator, BlockIndent, IsDone)) return false; if (IsDone) return true; auto Start = Current; unsigned BlockExitIndent = Indent < 0 ? 0 : (unsigned)Indent; unsigned LineBreaks = 0; if (BlockIndent == 0) { if (!findBlockScalarIndent(BlockIndent, BlockExitIndent, LineBreaks, IsDone)) return false; } // Scan the block's scalars body. SmallString<256> Str; while (!IsDone) { if (!scanBlockScalarIndent(BlockIndent, BlockExitIndent, IsDone)) return false; if (IsDone) break; // Parse the current line. auto LineStart = Current; advanceWhile(&Scanner::skip_nb_char); if (LineStart != Current) { Str.append(LineBreaks, '\n'); Str.append(StringRef(LineStart, Current - LineStart)); LineBreaks = 0; } // Check for EOF. if (Current == End) break; if (!consumeLineBreakIfPresent()) break; ++LineBreaks; } if (Current == End && !LineBreaks) // Ensure that there is at least one line break before the end of file. LineBreaks = 1; Str.append(getChompedLineBreaks(ChompingIndicator, LineBreaks, Str), '\n'); // New lines may start a simple key. if (!FlowLevel) IsSimpleKeyAllowed = true; Token T; T.Kind = Token::TK_BlockScalar; T.Range = StringRef(Start, Current - Start); T.Value = Str.str().str(); TokenQueue.push_back(T); return true; } bool Scanner::scanTag() { StringRef::iterator Start = Current; unsigned ColStart = Column; skip(1); // Eat !. if (Current == End || isBlankOrBreak(Current)); // An empty tag. else if (*Current == '<') { skip(1); scan_ns_uri_char(); if (!consume('>')) return false; } else { // FIXME: Actually parse the c-ns-shorthand-tag rule. Current = skip_while(&Scanner::skip_ns_char, Current); } Token T; T.Kind = Token::TK_Tag; T.Range = StringRef(Start, Current - Start); TokenQueue.push_back(T); // Tags can be simple keys. saveSimpleKeyCandidate(--TokenQueue.end(), ColStart, false); IsSimpleKeyAllowed = false; return true; } bool Scanner::fetchMoreTokens() { if (IsStartOfStream) return scanStreamStart(); scanToNextToken(); if (Current == End) return scanStreamEnd(); removeStaleSimpleKeyCandidates(); unrollIndent(Column); if (Column == 0 && *Current == '%') return scanDirective(); if (Column == 0 && Current + 4 <= End && *Current == '-' && *(Current + 1) == '-' && *(Current + 2) == '-' && (Current + 3 == End || isBlankOrBreak(Current + 3))) return scanDocumentIndicator(true); if (Column == 0 && Current + 4 <= End && *Current == '.' && *(Current + 1) == '.' && *(Current + 2) == '.' && (Current + 3 == End || isBlankOrBreak(Current + 3))) return scanDocumentIndicator(false); if (*Current == '[') return scanFlowCollectionStart(true); if (*Current == '{') return scanFlowCollectionStart(false); if (*Current == ']') return scanFlowCollectionEnd(true); if (*Current == '}') return scanFlowCollectionEnd(false); if (*Current == ',') return scanFlowEntry(); if (*Current == '-' && isBlankOrBreak(Current + 1)) return scanBlockEntry(); if (*Current == '?' && (FlowLevel || isBlankOrBreak(Current + 1))) return scanKey(); if (*Current == ':' && (FlowLevel || isBlankOrBreak(Current + 1))) return scanValue(); if (*Current == '*') return scanAliasOrAnchor(true); if (*Current == '&') return scanAliasOrAnchor(false); if (*Current == '!') return scanTag(); if (*Current == '|' && !FlowLevel) return scanBlockScalar(true); if (*Current == '>' && !FlowLevel) return scanBlockScalar(false); if (*Current == '\'') return scanFlowScalar(false); if (*Current == '"') return scanFlowScalar(true); // Get a plain scalar. StringRef FirstChar(Current, 1); if (!(isBlankOrBreak(Current) || FirstChar.find_first_of("-?:,[]{}#&*!|>'\"%@`") != StringRef::npos) || (*Current == '-' && !isBlankOrBreak(Current + 1)) || (!FlowLevel && (*Current == '?' || *Current == ':') && isBlankOrBreak(Current + 1)) || (!FlowLevel && *Current == ':' && Current + 2 < End && *(Current + 1) == ':' && !isBlankOrBreak(Current + 2))) return scanPlainScalar(); setError("Unrecognized character while tokenizing."); return false; } Stream::Stream(StringRef Input, SourceMgr &SM, bool ShowColors, std::error_code *EC) : scanner(new Scanner(Input, SM, ShowColors, EC)), CurrentDoc() {} Stream::Stream(MemoryBufferRef InputBuffer, SourceMgr &SM, bool ShowColors, std::error_code *EC) : scanner(new Scanner(InputBuffer, SM, ShowColors, EC)), CurrentDoc() {} Stream::~Stream() = default; bool Stream::failed() { return scanner->failed(); } void Stream::printError(Node *N, const Twine &Msg) { SMRange Range = N ? N->getSourceRange() : SMRange(); scanner->printError( Range.Start , SourceMgr::DK_Error , Msg , Range); } document_iterator Stream::begin() { if (CurrentDoc) report_fatal_error("Can only iterate over the stream once"); // Skip Stream-Start. scanner->getNext(); CurrentDoc.reset(new Document(*this)); return document_iterator(CurrentDoc); } document_iterator Stream::end() { return document_iterator(); } void Stream::skip() { for (document_iterator i = begin(), e = end(); i != e; ++i) i->skip(); } Node::Node(unsigned int Type, std::unique_ptr &D, StringRef A, StringRef T) : Doc(D), TypeID(Type), Anchor(A), Tag(T) { SMLoc Start = SMLoc::getFromPointer(peekNext().Range.begin()); SourceRange = SMRange(Start, Start); } std::string Node::getVerbatimTag() const { StringRef Raw = getRawTag(); if (!Raw.empty() && Raw != "!") { std::string Ret; if (Raw.find_last_of('!') == 0) { Ret = Doc->getTagMap().find("!")->second; Ret += Raw.substr(1); return Ret; } else if (Raw.startswith("!!")) { Ret = Doc->getTagMap().find("!!")->second; Ret += Raw.substr(2); return Ret; } else { StringRef TagHandle = Raw.substr(0, Raw.find_last_of('!') + 1); std::map::const_iterator It = Doc->getTagMap().find(TagHandle); if (It != Doc->getTagMap().end()) Ret = It->second; else { Token T; T.Kind = Token::TK_Tag; T.Range = TagHandle; setError(Twine("Unknown tag handle ") + TagHandle, T); } Ret += Raw.substr(Raw.find_last_of('!') + 1); return Ret; } } switch (getType()) { case NK_Null: return "tag:yaml.org,2002:null"; case NK_Scalar: case NK_BlockScalar: // TODO: Tag resolution. return "tag:yaml.org,2002:str"; case NK_Mapping: return "tag:yaml.org,2002:map"; case NK_Sequence: return "tag:yaml.org,2002:seq"; } return ""; } Token &Node::peekNext() { return Doc->peekNext(); } Token Node::getNext() { return Doc->getNext(); } Node *Node::parseBlockNode() { return Doc->parseBlockNode(); } BumpPtrAllocator &Node::getAllocator() { return Doc->NodeAllocator; } void Node::setError(const Twine &Msg, Token &Tok) const { Doc->setError(Msg, Tok); } bool Node::failed() const { return Doc->failed(); } StringRef ScalarNode::getValue(SmallVectorImpl &Storage) const { // TODO: Handle newlines properly. We need to remove leading whitespace. if (Value[0] == '"') { // Double quoted. // Pull off the leading and trailing "s. StringRef UnquotedValue = Value.substr(1, Value.size() - 2); // Search for characters that would require unescaping the value. StringRef::size_type i = UnquotedValue.find_first_of("\\\r\n"); if (i != StringRef::npos) return unescapeDoubleQuoted(UnquotedValue, i, Storage); return UnquotedValue; } else if (Value[0] == '\'') { // Single quoted. // Pull off the leading and trailing 's. StringRef UnquotedValue = Value.substr(1, Value.size() - 2); StringRef::size_type i = UnquotedValue.find('\''); if (i != StringRef::npos) { // We're going to need Storage. Storage.clear(); Storage.reserve(UnquotedValue.size()); for (; i != StringRef::npos; i = UnquotedValue.find('\'')) { StringRef Valid(UnquotedValue.begin(), i); Storage.insert(Storage.end(), Valid.begin(), Valid.end()); Storage.push_back('\''); UnquotedValue = UnquotedValue.substr(i + 2); } Storage.insert(Storage.end(), UnquotedValue.begin(), UnquotedValue.end()); return StringRef(Storage.begin(), Storage.size()); } return UnquotedValue; } // Plain or block. return Value.rtrim(' '); } StringRef ScalarNode::unescapeDoubleQuoted( StringRef UnquotedValue , StringRef::size_type i , SmallVectorImpl &Storage) const { // Use Storage to build proper value. Storage.clear(); Storage.reserve(UnquotedValue.size()); for (; i != StringRef::npos; i = UnquotedValue.find_first_of("\\\r\n")) { // Insert all previous chars into Storage. StringRef Valid(UnquotedValue.begin(), i); Storage.insert(Storage.end(), Valid.begin(), Valid.end()); // Chop off inserted chars. UnquotedValue = UnquotedValue.substr(i); assert(!UnquotedValue.empty() && "Can't be empty!"); // Parse escape or line break. switch (UnquotedValue[0]) { case '\r': case '\n': Storage.push_back('\n'); if ( UnquotedValue.size() > 1 && (UnquotedValue[1] == '\r' || UnquotedValue[1] == '\n')) UnquotedValue = UnquotedValue.substr(1); UnquotedValue = UnquotedValue.substr(1); break; default: if (UnquotedValue.size() == 1) { Token T; T.Range = StringRef(UnquotedValue.begin(), 1); setError("Unrecognized escape code", T); return ""; } UnquotedValue = UnquotedValue.substr(1); switch (UnquotedValue[0]) { default: { Token T; T.Range = StringRef(UnquotedValue.begin(), 1); setError("Unrecognized escape code", T); return ""; } case '\r': case '\n': // Remove the new line. if ( UnquotedValue.size() > 1 && (UnquotedValue[1] == '\r' || UnquotedValue[1] == '\n')) UnquotedValue = UnquotedValue.substr(1); // If this was just a single byte newline, it will get skipped // below. break; case '0': Storage.push_back(0x00); break; case 'a': Storage.push_back(0x07); break; case 'b': Storage.push_back(0x08); break; case 't': case 0x09: Storage.push_back(0x09); break; case 'n': Storage.push_back(0x0A); break; case 'v': Storage.push_back(0x0B); break; case 'f': Storage.push_back(0x0C); break; case 'r': Storage.push_back(0x0D); break; case 'e': Storage.push_back(0x1B); break; case ' ': Storage.push_back(0x20); break; case '"': Storage.push_back(0x22); break; case '/': Storage.push_back(0x2F); break; case '\\': Storage.push_back(0x5C); break; case 'N': encodeUTF8(0x85, Storage); break; case '_': encodeUTF8(0xA0, Storage); break; case 'L': encodeUTF8(0x2028, Storage); break; case 'P': encodeUTF8(0x2029, Storage); break; case 'x': { if (UnquotedValue.size() < 3) // TODO: Report error. break; unsigned int UnicodeScalarValue; if (UnquotedValue.substr(1, 2).getAsInteger(16, UnicodeScalarValue)) // TODO: Report error. UnicodeScalarValue = 0xFFFD; encodeUTF8(UnicodeScalarValue, Storage); UnquotedValue = UnquotedValue.substr(2); break; } case 'u': { if (UnquotedValue.size() < 5) // TODO: Report error. break; unsigned int UnicodeScalarValue; if (UnquotedValue.substr(1, 4).getAsInteger(16, UnicodeScalarValue)) // TODO: Report error. UnicodeScalarValue = 0xFFFD; encodeUTF8(UnicodeScalarValue, Storage); UnquotedValue = UnquotedValue.substr(4); break; } case 'U': { if (UnquotedValue.size() < 9) // TODO: Report error. break; unsigned int UnicodeScalarValue; if (UnquotedValue.substr(1, 8).getAsInteger(16, UnicodeScalarValue)) // TODO: Report error. UnicodeScalarValue = 0xFFFD; encodeUTF8(UnicodeScalarValue, Storage); UnquotedValue = UnquotedValue.substr(8); break; } } UnquotedValue = UnquotedValue.substr(1); } } Storage.insert(Storage.end(), UnquotedValue.begin(), UnquotedValue.end()); return StringRef(Storage.begin(), Storage.size()); } Node *KeyValueNode::getKey() { if (Key) return Key; // Handle implicit null keys. { Token &t = peekNext(); if ( t.Kind == Token::TK_BlockEnd || t.Kind == Token::TK_Value || t.Kind == Token::TK_Error) { return Key = new (getAllocator()) NullNode(Doc); } if (t.Kind == Token::TK_Key) getNext(); // skip TK_Key. } // Handle explicit null keys. Token &t = peekNext(); if (t.Kind == Token::TK_BlockEnd || t.Kind == Token::TK_Value) { return Key = new (getAllocator()) NullNode(Doc); } // We've got a normal key. return Key = parseBlockNode(); } Node *KeyValueNode::getValue() { if (Value) return Value; if (Node* Key = getKey()) Key->skip(); else { setError("Null key in Key Value.", peekNext()); return Value = new (getAllocator()) NullNode(Doc); } if (failed()) return Value = new (getAllocator()) NullNode(Doc); // Handle implicit null values. { Token &t = peekNext(); if ( t.Kind == Token::TK_BlockEnd || t.Kind == Token::TK_FlowMappingEnd || t.Kind == Token::TK_Key || t.Kind == Token::TK_FlowEntry || t.Kind == Token::TK_Error) { return Value = new (getAllocator()) NullNode(Doc); } if (t.Kind != Token::TK_Value) { setError("Unexpected token in Key Value.", t); return Value = new (getAllocator()) NullNode(Doc); } getNext(); // skip TK_Value. } // Handle explicit null values. Token &t = peekNext(); if (t.Kind == Token::TK_BlockEnd || t.Kind == Token::TK_Key) { return Value = new (getAllocator()) NullNode(Doc); } // We got a normal value. return Value = parseBlockNode(); } void MappingNode::increment() { if (failed()) { IsAtEnd = true; CurrentEntry = nullptr; return; } if (CurrentEntry) { CurrentEntry->skip(); if (Type == MT_Inline) { IsAtEnd = true; CurrentEntry = nullptr; return; } } Token T = peekNext(); if (T.Kind == Token::TK_Key || T.Kind == Token::TK_Scalar) { // KeyValueNode eats the TK_Key. That way it can detect null keys. CurrentEntry = new (getAllocator()) KeyValueNode(Doc); } else if (Type == MT_Block) { switch (T.Kind) { case Token::TK_BlockEnd: getNext(); IsAtEnd = true; CurrentEntry = nullptr; break; default: setError("Unexpected token. Expected Key or Block End", T); LLVM_FALLTHROUGH; case Token::TK_Error: IsAtEnd = true; CurrentEntry = nullptr; } } else { switch (T.Kind) { case Token::TK_FlowEntry: // Eat the flow entry and recurse. getNext(); return increment(); case Token::TK_FlowMappingEnd: getNext(); LLVM_FALLTHROUGH; case Token::TK_Error: // Set this to end iterator. IsAtEnd = true; CurrentEntry = nullptr; break; default: setError( "Unexpected token. Expected Key, Flow Entry, or Flow " "Mapping End." , T); IsAtEnd = true; CurrentEntry = nullptr; } } } void SequenceNode::increment() { if (failed()) { IsAtEnd = true; CurrentEntry = nullptr; return; } if (CurrentEntry) CurrentEntry->skip(); Token T = peekNext(); if (SeqType == ST_Block) { switch (T.Kind) { case Token::TK_BlockEntry: getNext(); CurrentEntry = parseBlockNode(); if (!CurrentEntry) { // An error occurred. IsAtEnd = true; CurrentEntry = nullptr; } break; case Token::TK_BlockEnd: getNext(); IsAtEnd = true; CurrentEntry = nullptr; break; default: setError( "Unexpected token. Expected Block Entry or Block End." , T); LLVM_FALLTHROUGH; case Token::TK_Error: IsAtEnd = true; CurrentEntry = nullptr; } } else if (SeqType == ST_Indentless) { switch (T.Kind) { case Token::TK_BlockEntry: getNext(); CurrentEntry = parseBlockNode(); if (!CurrentEntry) { // An error occurred. IsAtEnd = true; CurrentEntry = nullptr; } break; default: case Token::TK_Error: IsAtEnd = true; CurrentEntry = nullptr; } } else if (SeqType == ST_Flow) { switch (T.Kind) { case Token::TK_FlowEntry: // Eat the flow entry and recurse. getNext(); WasPreviousTokenFlowEntry = true; return increment(); case Token::TK_FlowSequenceEnd: getNext(); LLVM_FALLTHROUGH; case Token::TK_Error: // Set this to end iterator. IsAtEnd = true; CurrentEntry = nullptr; break; case Token::TK_StreamEnd: case Token::TK_DocumentEnd: case Token::TK_DocumentStart: setError("Could not find closing ]!", T); // Set this to end iterator. IsAtEnd = true; CurrentEntry = nullptr; break; default: if (!WasPreviousTokenFlowEntry) { setError("Expected , between entries!", T); IsAtEnd = true; CurrentEntry = nullptr; break; } // Otherwise it must be a flow entry. CurrentEntry = parseBlockNode(); if (!CurrentEntry) { IsAtEnd = true; } WasPreviousTokenFlowEntry = false; break; } } } Document::Document(Stream &S) : stream(S), Root(nullptr) { // Tag maps starts with two default mappings. TagMap["!"] = "!"; TagMap["!!"] = "tag:yaml.org,2002:"; if (parseDirectives()) expectToken(Token::TK_DocumentStart); Token &T = peekNext(); if (T.Kind == Token::TK_DocumentStart) getNext(); } bool Document::skip() { if (stream.scanner->failed()) return false; if (!Root) getRoot(); Root->skip(); Token &T = peekNext(); if (T.Kind == Token::TK_StreamEnd) return false; if (T.Kind == Token::TK_DocumentEnd) { getNext(); return skip(); } return true; } Token &Document::peekNext() { return stream.scanner->peekNext(); } Token Document::getNext() { return stream.scanner->getNext(); } void Document::setError(const Twine &Message, Token &Location) const { stream.scanner->setError(Message, Location.Range.begin()); } bool Document::failed() const { return stream.scanner->failed(); } Node *Document::parseBlockNode() { Token T = peekNext(); // Handle properties. Token AnchorInfo; Token TagInfo; parse_property: switch (T.Kind) { case Token::TK_Alias: getNext(); return new (NodeAllocator) AliasNode(stream.CurrentDoc, T.Range.substr(1)); case Token::TK_Anchor: if (AnchorInfo.Kind == Token::TK_Anchor) { setError("Already encountered an anchor for this node!", T); return nullptr; } AnchorInfo = getNext(); // Consume TK_Anchor. T = peekNext(); goto parse_property; case Token::TK_Tag: if (TagInfo.Kind == Token::TK_Tag) { setError("Already encountered a tag for this node!", T); return nullptr; } TagInfo = getNext(); // Consume TK_Tag. T = peekNext(); goto parse_property; default: break; } switch (T.Kind) { case Token::TK_BlockEntry: // We got an unindented BlockEntry sequence. This is not terminated with // a BlockEnd. // Don't eat the TK_BlockEntry, SequenceNode needs it. return new (NodeAllocator) SequenceNode( stream.CurrentDoc , AnchorInfo.Range.substr(1) , TagInfo.Range , SequenceNode::ST_Indentless); case Token::TK_BlockSequenceStart: getNext(); return new (NodeAllocator) SequenceNode( stream.CurrentDoc , AnchorInfo.Range.substr(1) , TagInfo.Range , SequenceNode::ST_Block); case Token::TK_BlockMappingStart: getNext(); return new (NodeAllocator) MappingNode( stream.CurrentDoc , AnchorInfo.Range.substr(1) , TagInfo.Range , MappingNode::MT_Block); case Token::TK_FlowSequenceStart: getNext(); return new (NodeAllocator) SequenceNode( stream.CurrentDoc , AnchorInfo.Range.substr(1) , TagInfo.Range , SequenceNode::ST_Flow); case Token::TK_FlowMappingStart: getNext(); return new (NodeAllocator) MappingNode( stream.CurrentDoc , AnchorInfo.Range.substr(1) , TagInfo.Range , MappingNode::MT_Flow); case Token::TK_Scalar: getNext(); return new (NodeAllocator) ScalarNode( stream.CurrentDoc , AnchorInfo.Range.substr(1) , TagInfo.Range , T.Range); case Token::TK_BlockScalar: { getNext(); StringRef NullTerminatedStr(T.Value.c_str(), T.Value.length() + 1); StringRef StrCopy = NullTerminatedStr.copy(NodeAllocator).drop_back(); return new (NodeAllocator) BlockScalarNode(stream.CurrentDoc, AnchorInfo.Range.substr(1), TagInfo.Range, StrCopy, T.Range); } case Token::TK_Key: // Don't eat the TK_Key, KeyValueNode expects it. return new (NodeAllocator) MappingNode( stream.CurrentDoc , AnchorInfo.Range.substr(1) , TagInfo.Range , MappingNode::MT_Inline); case Token::TK_DocumentStart: case Token::TK_DocumentEnd: case Token::TK_StreamEnd: default: // TODO: Properly handle tags. "[!!str ]" should resolve to !!str "", not // !!null null. return new (NodeAllocator) NullNode(stream.CurrentDoc); case Token::TK_FlowMappingEnd: case Token::TK_FlowSequenceEnd: case Token::TK_FlowEntry: { if (Root && (isa(Root) || isa(Root))) return new (NodeAllocator) NullNode(stream.CurrentDoc); setError("Unexpected token", T); return nullptr; } case Token::TK_Error: return nullptr; } llvm_unreachable("Control flow shouldn't reach here."); return nullptr; } bool Document::parseDirectives() { bool isDirective = false; while (true) { Token T = peekNext(); if (T.Kind == Token::TK_TagDirective) { parseTAGDirective(); isDirective = true; } else if (T.Kind == Token::TK_VersionDirective) { parseYAMLDirective(); isDirective = true; } else break; } return isDirective; } void Document::parseYAMLDirective() { getNext(); // Eat %YAML } void Document::parseTAGDirective() { Token Tag = getNext(); // %TAG StringRef T = Tag.Range; // Strip %TAG T = T.substr(T.find_first_of(" \t")).ltrim(" \t"); std::size_t HandleEnd = T.find_first_of(" \t"); StringRef TagHandle = T.substr(0, HandleEnd); StringRef TagPrefix = T.substr(HandleEnd).ltrim(" \t"); TagMap[TagHandle] = TagPrefix; } bool Document::expectToken(int TK) { Token T = getNext(); if (T.Kind != TK) { setError("Unexpected token", T); return false; } return true; } binaryen-version_108/third_party/llvm-project/YAMLTraits.cpp000066400000000000000000000705251423707623100243620ustar00rootroot00000000000000//===- lib/Support/YAMLTraits.cpp -----------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Support/YAMLTraits.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Errc.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Format.h" #include "llvm/Support/LineIterator.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Unicode.h" #include "llvm/Support/YAMLParser.h" #include "llvm/Support/raw_ostream.h" #include #include #include #include #include #include #include using namespace llvm; using namespace yaml; //===----------------------------------------------------------------------===// // IO //===----------------------------------------------------------------------===// IO::IO(void *Context) : Ctxt(Context) {} IO::~IO() = default; void *IO::getContext() const { return Ctxt; } void IO::setContext(void *Context) { Ctxt = Context; } //===----------------------------------------------------------------------===// // Input //===----------------------------------------------------------------------===// Input::Input(StringRef InputContent, void *Ctxt, SourceMgr::DiagHandlerTy DiagHandler, void *DiagHandlerCtxt) : IO(Ctxt), Strm(new Stream(InputContent, SrcMgr, false, &EC)) { if (DiagHandler) SrcMgr.setDiagHandler(DiagHandler, DiagHandlerCtxt); DocIterator = Strm->begin(); } Input::Input(MemoryBufferRef Input, void *Ctxt, SourceMgr::DiagHandlerTy DiagHandler, void *DiagHandlerCtxt) : IO(Ctxt), Strm(new Stream(Input, SrcMgr, false, &EC)) { if (DiagHandler) SrcMgr.setDiagHandler(DiagHandler, DiagHandlerCtxt); DocIterator = Strm->begin(); } Input::~Input() = default; std::error_code Input::error() { return EC; } // Pin the vtables to this file. void Input::HNode::anchor() {} void Input::EmptyHNode::anchor() {} void Input::ScalarHNode::anchor() {} void Input::MapHNode::anchor() {} void Input::SequenceHNode::anchor() {} bool Input::outputting() const { return false; } bool Input::setCurrentDocument() { if (DocIterator != Strm->end()) { Node *N = DocIterator->getRoot(); if (!N) { EC = make_error_code(errc::invalid_argument); return false; } if (isa(N)) { // Empty files are allowed and ignored ++DocIterator; return setCurrentDocument(); } TopNode = createHNodes(N); CurrentNode = TopNode.get(); return true; } return false; } bool Input::nextDocument() { return ++DocIterator != Strm->end(); } const Node *Input::getCurrentNode() const { return CurrentNode ? CurrentNode->_node : nullptr; } bool Input::mapTag(StringRef Tag, bool Default) { // CurrentNode can be null if setCurrentDocument() was unable to // parse the document because it was invalid or empty. if (!CurrentNode) return false; std::string foundTag = CurrentNode->_node->getVerbatimTag(); if (foundTag.empty()) { // If no tag found and 'Tag' is the default, say it was found. return Default; } // Return true iff found tag matches supplied tag. return Tag.equals(foundTag); } void Input::beginMapping() { if (EC) return; // CurrentNode can be null if the document is empty. MapHNode *MN = dyn_cast_or_null(CurrentNode); if (MN) { MN->ValidKeys.clear(); } } std::vector Input::keys() { MapHNode *MN = dyn_cast(CurrentNode); std::vector Ret; if (!MN) { setError(CurrentNode, "not a mapping"); return Ret; } for (auto &P : MN->Mapping) Ret.push_back(P.first()); return Ret; } bool Input::preflightKey(const char *Key, bool Required, bool, bool &UseDefault, void *&SaveInfo) { UseDefault = false; if (EC) return false; // CurrentNode is null for empty documents, which is an error in case required // nodes are present. if (!CurrentNode) { if (Required) EC = make_error_code(errc::invalid_argument); return false; } MapHNode *MN = dyn_cast(CurrentNode); if (!MN) { if (Required || !isa(CurrentNode)) setError(CurrentNode, "not a mapping"); return false; } MN->ValidKeys.push_back(Key); HNode *Value = MN->Mapping[Key].get(); if (!Value) { if (Required) setError(CurrentNode, Twine("missing required key '") + Key + "'"); else UseDefault = true; return false; } SaveInfo = CurrentNode; CurrentNode = Value; return true; } void Input::postflightKey(void *saveInfo) { CurrentNode = reinterpret_cast(saveInfo); } void Input::endMapping() { if (EC) return; // CurrentNode can be null if the document is empty. MapHNode *MN = dyn_cast_or_null(CurrentNode); if (!MN) return; for (const auto &NN : MN->Mapping) { if (!is_contained(MN->ValidKeys, NN.first())) { setError(NN.second.get(), Twine("unknown key '") + NN.first() + "'"); break; } } } void Input::beginFlowMapping() { beginMapping(); } void Input::endFlowMapping() { endMapping(); } unsigned Input::beginSequence() { if (SequenceHNode *SQ = dyn_cast(CurrentNode)) return SQ->Entries.size(); if (isa(CurrentNode)) return 0; // Treat case where there's a scalar "null" value as an empty sequence. if (ScalarHNode *SN = dyn_cast(CurrentNode)) { if (isNull(SN->value())) return 0; } // Any other type of HNode is an error. setError(CurrentNode, "not a sequence"); return 0; } void Input::endSequence() { } bool Input::preflightElement(unsigned Index, void *&SaveInfo) { if (EC) return false; if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { SaveInfo = CurrentNode; CurrentNode = SQ->Entries[Index].get(); return true; } return false; } void Input::postflightElement(void *SaveInfo) { CurrentNode = reinterpret_cast(SaveInfo); } unsigned Input::beginFlowSequence() { return beginSequence(); } bool Input::preflightFlowElement(unsigned index, void *&SaveInfo) { if (EC) return false; if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { SaveInfo = CurrentNode; CurrentNode = SQ->Entries[index].get(); return true; } return false; } void Input::postflightFlowElement(void *SaveInfo) { CurrentNode = reinterpret_cast(SaveInfo); } void Input::endFlowSequence() { } void Input::beginEnumScalar() { ScalarMatchFound = false; } bool Input::matchEnumScalar(const char *Str, bool) { if (ScalarMatchFound) return false; if (ScalarHNode *SN = dyn_cast(CurrentNode)) { if (SN->value().equals(Str)) { ScalarMatchFound = true; return true; } } return false; } bool Input::matchEnumFallback() { if (ScalarMatchFound) return false; ScalarMatchFound = true; return true; } void Input::endEnumScalar() { if (!ScalarMatchFound) { setError(CurrentNode, "unknown enumerated scalar"); } } bool Input::beginBitSetScalar(bool &DoClear) { BitValuesUsed.clear(); if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { BitValuesUsed.insert(BitValuesUsed.begin(), SQ->Entries.size(), false); } else { setError(CurrentNode, "expected sequence of bit values"); } DoClear = true; return true; } bool Input::bitSetMatch(const char *Str, bool) { if (EC) return false; if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { unsigned Index = 0; for (auto &N : SQ->Entries) { if (ScalarHNode *SN = dyn_cast(N.get())) { if (SN->value().equals(Str)) { BitValuesUsed[Index] = true; return true; } } else { setError(CurrentNode, "unexpected scalar in sequence of bit values"); } ++Index; } } else { setError(CurrentNode, "expected sequence of bit values"); } return false; } void Input::endBitSetScalar() { if (EC) return; if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { assert(BitValuesUsed.size() == SQ->Entries.size()); for (unsigned i = 0; i < SQ->Entries.size(); ++i) { if (!BitValuesUsed[i]) { setError(SQ->Entries[i].get(), "unknown bit value"); return; } } } } void Input::scalarString(StringRef &S, QuotingType) { if (ScalarHNode *SN = dyn_cast(CurrentNode)) { S = SN->value(); } else { setError(CurrentNode, "unexpected scalar"); } } void Input::blockScalarString(StringRef &S) { scalarString(S, QuotingType::None); } void Input::scalarTag(std::string &Tag) { Tag = CurrentNode->_node->getVerbatimTag(); } void Input::setError(HNode *hnode, const Twine &message) { assert(hnode && "HNode must not be NULL"); setError(hnode->_node, message); } NodeKind Input::getNodeKind() { if (isa(CurrentNode)) return NodeKind::Scalar; else if (isa(CurrentNode)) return NodeKind::Map; else if (isa(CurrentNode)) return NodeKind::Sequence; llvm_unreachable("Unsupported node kind"); } void Input::setError(Node *node, const Twine &message) { Strm->printError(node, message); EC = make_error_code(errc::invalid_argument); } std::unique_ptr Input::createHNodes(Node *N) { SmallString<128> StringStorage; if (ScalarNode *SN = dyn_cast(N)) { StringRef KeyStr = SN->getValue(StringStorage); if (!StringStorage.empty()) { // Copy string to permanent storage KeyStr = StringStorage.str().copy(StringAllocator); } return std::make_unique(N, KeyStr); } else if (BlockScalarNode *BSN = dyn_cast(N)) { StringRef ValueCopy = BSN->getValue().copy(StringAllocator); return std::make_unique(N, ValueCopy); } else if (SequenceNode *SQ = dyn_cast(N)) { auto SQHNode = std::make_unique(N); for (Node &SN : *SQ) { auto Entry = createHNodes(&SN); if (EC) break; SQHNode->Entries.push_back(std::move(Entry)); } return std::move(SQHNode); } else if (MappingNode *Map = dyn_cast(N)) { auto mapHNode = std::make_unique(N); for (KeyValueNode &KVN : *Map) { Node *KeyNode = KVN.getKey(); ScalarNode *Key = dyn_cast_or_null(KeyNode); Node *Value = KVN.getValue(); if (!Key || !Value) { if (!Key) setError(KeyNode, "Map key must be a scalar"); if (!Value) setError(KeyNode, "Map value must not be empty"); break; } StringStorage.clear(); StringRef KeyStr = Key->getValue(StringStorage); if (!StringStorage.empty()) { // Copy string to permanent storage KeyStr = StringStorage.str().copy(StringAllocator); } auto ValueHNode = createHNodes(Value); if (EC) break; mapHNode->Mapping[KeyStr] = std::move(ValueHNode); } return std::move(mapHNode); } else if (isa(N)) { return std::make_unique(N); } else { setError(N, "unknown node kind"); return nullptr; } } void Input::setError(const Twine &Message) { setError(CurrentNode, Message); } bool Input::canElideEmptySequence() { return false; } //===----------------------------------------------------------------------===// // Output //===----------------------------------------------------------------------===// Output::Output(raw_ostream &yout, void *context, int WrapColumn) : IO(context), Out(yout), WrapColumn(WrapColumn) {} Output::~Output() = default; bool Output::outputting() const { return true; } void Output::beginMapping() { StateStack.push_back(inMapFirstKey); PaddingBeforeContainer = Padding; Padding = "\n"; } bool Output::mapTag(StringRef Tag, bool Use) { if (Use) { // If this tag is being written inside a sequence we should write the start // of the sequence before writing the tag, otherwise the tag won't be // attached to the element in the sequence, but rather the sequence itself. bool SequenceElement = false; if (StateStack.size() > 1) { auto &E = StateStack[StateStack.size() - 2]; SequenceElement = inSeqAnyElement(E) || inFlowSeqAnyElement(E); } if (SequenceElement && StateStack.back() == inMapFirstKey) { newLineCheck(); } else { output(" "); } output(Tag); if (SequenceElement) { // If we're writing the tag during the first element of a map, the tag // takes the place of the first element in the sequence. if (StateStack.back() == inMapFirstKey) { StateStack.pop_back(); StateStack.push_back(inMapOtherKey); } // Tags inside maps in sequences should act as keys in the map from a // formatting perspective, so we always want a newline in a sequence. Padding = "\n"; } } return Use; } void Output::endMapping() { // If we did not map anything, we should explicitly emit an empty map if (StateStack.back() == inMapFirstKey) { Padding = PaddingBeforeContainer; newLineCheck(); output("{}"); Padding = "\n"; } StateStack.pop_back(); } std::vector Output::keys() { report_fatal_error("invalid call"); } bool Output::preflightKey(const char *Key, bool Required, bool SameAsDefault, bool &UseDefault, void *&) { UseDefault = false; if (Required || !SameAsDefault || WriteDefaultValues) { auto State = StateStack.back(); if (State == inFlowMapFirstKey || State == inFlowMapOtherKey) { flowKey(Key); } else { newLineCheck(); paddedKey(Key); } return true; } return false; } void Output::postflightKey(void *) { if (StateStack.back() == inMapFirstKey) { StateStack.pop_back(); StateStack.push_back(inMapOtherKey); } else if (StateStack.back() == inFlowMapFirstKey) { StateStack.pop_back(); StateStack.push_back(inFlowMapOtherKey); } } void Output::beginFlowMapping() { StateStack.push_back(inFlowMapFirstKey); newLineCheck(); ColumnAtMapFlowStart = Column; output("{ "); } void Output::endFlowMapping() { StateStack.pop_back(); outputUpToEndOfLine(" }"); } void Output::beginDocuments() { outputUpToEndOfLine("---"); } bool Output::preflightDocument(unsigned index) { if (index > 0) outputUpToEndOfLine("\n---"); return true; } void Output::postflightDocument() { } void Output::endDocuments() { output("\n...\n"); } unsigned Output::beginSequence() { StateStack.push_back(inSeqFirstElement); PaddingBeforeContainer = Padding; Padding = "\n"; return 0; } void Output::endSequence() { // If we did not emit anything, we should explicitly emit an empty sequence if (StateStack.back() == inSeqFirstElement) { Padding = PaddingBeforeContainer; newLineCheck(); output("[]"); Padding = "\n"; } StateStack.pop_back(); } bool Output::preflightElement(unsigned, void *&) { return true; } void Output::postflightElement(void *) { if (StateStack.back() == inSeqFirstElement) { StateStack.pop_back(); StateStack.push_back(inSeqOtherElement); } else if (StateStack.back() == inFlowSeqFirstElement) { StateStack.pop_back(); StateStack.push_back(inFlowSeqOtherElement); } } unsigned Output::beginFlowSequence() { StateStack.push_back(inFlowSeqFirstElement); newLineCheck(); ColumnAtFlowStart = Column; output("[ "); NeedFlowSequenceComma = false; return 0; } void Output::endFlowSequence() { StateStack.pop_back(); outputUpToEndOfLine(" ]"); } bool Output::preflightFlowElement(unsigned, void *&) { if (NeedFlowSequenceComma) output(", "); if (WrapColumn && Column > WrapColumn) { output("\n"); for (int i = 0; i < ColumnAtFlowStart; ++i) output(" "); Column = ColumnAtFlowStart; output(" "); } return true; } void Output::postflightFlowElement(void *) { NeedFlowSequenceComma = true; } void Output::beginEnumScalar() { EnumerationMatchFound = false; } bool Output::matchEnumScalar(const char *Str, bool Match) { if (Match && !EnumerationMatchFound) { newLineCheck(); outputUpToEndOfLine(Str); EnumerationMatchFound = true; } return false; } bool Output::matchEnumFallback() { if (EnumerationMatchFound) return false; EnumerationMatchFound = true; return true; } void Output::endEnumScalar() { if (!EnumerationMatchFound) llvm_unreachable("bad runtime enum value"); } bool Output::beginBitSetScalar(bool &DoClear) { newLineCheck(); output("[ "); NeedBitValueComma = false; DoClear = false; return true; } bool Output::bitSetMatch(const char *Str, bool Matches) { if (Matches) { if (NeedBitValueComma) output(", "); output(Str); NeedBitValueComma = true; } return false; } void Output::endBitSetScalar() { outputUpToEndOfLine(" ]"); } void Output::scalarString(StringRef &S, QuotingType MustQuote) { newLineCheck(); if (S.empty()) { // Print '' for the empty string because leaving the field empty is not // allowed. outputUpToEndOfLine("''"); return; } if (MustQuote == QuotingType::None) { // Only quote if we must. outputUpToEndOfLine(S); return; } const char *const Quote = MustQuote == QuotingType::Single ? "'" : "\""; output(Quote); // Starting quote. // When using double-quoted strings (and only in that case), non-printable characters may be // present, and will be escaped using a variety of unicode-scalar and special short-form // escapes. This is handled in yaml::escape. if (MustQuote == QuotingType::Double) { output(yaml::escape(S, /* EscapePrintable= */ false)); outputUpToEndOfLine(Quote); return; } unsigned i = 0; unsigned j = 0; unsigned End = S.size(); const char *Base = S.data(); // When using single-quoted strings, any single quote ' must be doubled to be escaped. while (j < End) { if (S[j] == '\'') { // Escape quotes. output(StringRef(&Base[i], j - i)); // "flush". output(StringLiteral("''")); // Print it as '' i = j + 1; } ++j; } output(StringRef(&Base[i], j - i)); outputUpToEndOfLine(Quote); // Ending quote. } void Output::blockScalarString(StringRef &S) { if (!StateStack.empty()) newLineCheck(); output(" |"); outputNewLine(); unsigned Indent = StateStack.empty() ? 1 : StateStack.size(); auto Buffer = MemoryBuffer::getMemBuffer(S, "", false); for (line_iterator Lines(*Buffer, false); !Lines.is_at_end(); ++Lines) { for (unsigned I = 0; I < Indent; ++I) { output(" "); } output(*Lines); outputNewLine(); } } void Output::scalarTag(std::string &Tag) { if (Tag.empty()) return; newLineCheck(); output(Tag); output(" "); } void Output::setError(const Twine &message) { } bool Output::canElideEmptySequence() { // Normally, with an optional key/value where the value is an empty sequence, // the whole key/value can be not written. But, that produces wrong yaml // if the key/value is the only thing in the map and the map is used in // a sequence. This detects if the this sequence is the first key/value // in map that itself is embedded in a sequnce. if (StateStack.size() < 2) return true; if (StateStack.back() != inMapFirstKey) return true; return !inSeqAnyElement(StateStack[StateStack.size() - 2]); } void Output::output(StringRef s) { Column += s.size(); Out << s; } void Output::outputUpToEndOfLine(StringRef s) { output(s); if (StateStack.empty() || (!inFlowSeqAnyElement(StateStack.back()) && !inFlowMapAnyKey(StateStack.back()))) Padding = "\n"; } void Output::outputNewLine() { Out << "\n"; Column = 0; } // if seq at top, indent as if map, then add "- " // if seq in middle, use "- " if firstKey, else use " " // void Output::newLineCheck() { if (Padding != "\n") { output(Padding); Padding = {}; return; } outputNewLine(); Padding = {}; if (StateStack.size() == 0) return; unsigned Indent = StateStack.size() - 1; bool OutputDash = false; if (StateStack.back() == inSeqFirstElement || StateStack.back() == inSeqOtherElement) { OutputDash = true; } else if ((StateStack.size() > 1) && ((StateStack.back() == inMapFirstKey) || inFlowSeqAnyElement(StateStack.back()) || (StateStack.back() == inFlowMapFirstKey)) && inSeqAnyElement(StateStack[StateStack.size() - 2])) { --Indent; OutputDash = true; } for (unsigned i = 0; i < Indent; ++i) { output(" "); } if (OutputDash) { output("- "); } } void Output::paddedKey(StringRef key) { output(key); output(":"); const char *spaces = " "; if (key.size() < strlen(spaces)) Padding = &spaces[key.size()]; else Padding = " "; } void Output::flowKey(StringRef Key) { if (StateStack.back() == inFlowMapOtherKey) output(", "); if (WrapColumn && Column > WrapColumn) { output("\n"); for (int I = 0; I < ColumnAtMapFlowStart; ++I) output(" "); Column = ColumnAtMapFlowStart; output(" "); } output(Key); output(": "); } NodeKind Output::getNodeKind() { report_fatal_error("invalid call"); } bool Output::inSeqAnyElement(InState State) { return State == inSeqFirstElement || State == inSeqOtherElement; } bool Output::inFlowSeqAnyElement(InState State) { return State == inFlowSeqFirstElement || State == inFlowSeqOtherElement; } bool Output::inMapAnyKey(InState State) { return State == inMapFirstKey || State == inMapOtherKey; } bool Output::inFlowMapAnyKey(InState State) { return State == inFlowMapFirstKey || State == inFlowMapOtherKey; } //===----------------------------------------------------------------------===// // traits for built-in types //===----------------------------------------------------------------------===// void ScalarTraits::output(const bool &Val, void *, raw_ostream &Out) { Out << (Val ? "true" : "false"); } StringRef ScalarTraits::input(StringRef Scalar, void *, bool &Val) { if (Scalar.equals("true")) { Val = true; return StringRef(); } else if (Scalar.equals("false")) { Val = false; return StringRef(); } return "invalid boolean"; } void ScalarTraits::output(const StringRef &Val, void *, raw_ostream &Out) { Out << Val; } StringRef ScalarTraits::input(StringRef Scalar, void *, StringRef &Val) { Val = Scalar; return StringRef(); } void ScalarTraits::output(const std::string &Val, void *, raw_ostream &Out) { Out << Val; } StringRef ScalarTraits::input(StringRef Scalar, void *, std::string &Val) { Val = Scalar.str(); return StringRef(); } void ScalarTraits::output(const uint8_t &Val, void *, raw_ostream &Out) { // use temp uin32_t because ostream thinks uint8_t is a character uint32_t Num = Val; Out << Num; } StringRef ScalarTraits::input(StringRef Scalar, void *, uint8_t &Val) { unsigned long long n; if (getAsUnsignedInteger(Scalar, 0, n)) return "invalid number"; if (n > 0xFF) return "out of range number"; Val = n; return StringRef(); } void ScalarTraits::output(const uint16_t &Val, void *, raw_ostream &Out) { Out << Val; } StringRef ScalarTraits::input(StringRef Scalar, void *, uint16_t &Val) { unsigned long long n; if (getAsUnsignedInteger(Scalar, 0, n)) return "invalid number"; if (n > 0xFFFF) return "out of range number"; Val = n; return StringRef(); } void ScalarTraits::output(const uint32_t &Val, void *, raw_ostream &Out) { Out << Val; } StringRef ScalarTraits::input(StringRef Scalar, void *, uint32_t &Val) { unsigned long long n; if (getAsUnsignedInteger(Scalar, 0, n)) return "invalid number"; if (n > 0xFFFFFFFFUL) return "out of range number"; Val = n; return StringRef(); } void ScalarTraits::output(const uint64_t &Val, void *, raw_ostream &Out) { Out << Val; } StringRef ScalarTraits::input(StringRef Scalar, void *, uint64_t &Val) { unsigned long long N; if (getAsUnsignedInteger(Scalar, 0, N)) return "invalid number"; Val = N; return StringRef(); } void ScalarTraits::output(const int8_t &Val, void *, raw_ostream &Out) { // use temp in32_t because ostream thinks int8_t is a character int32_t Num = Val; Out << Num; } StringRef ScalarTraits::input(StringRef Scalar, void *, int8_t &Val) { long long N; if (getAsSignedInteger(Scalar, 0, N)) return "invalid number"; if ((N > 127) || (N < -128)) return "out of range number"; Val = N; return StringRef(); } void ScalarTraits::output(const int16_t &Val, void *, raw_ostream &Out) { Out << Val; } StringRef ScalarTraits::input(StringRef Scalar, void *, int16_t &Val) { long long N; if (getAsSignedInteger(Scalar, 0, N)) return "invalid number"; if ((N > INT16_MAX) || (N < INT16_MIN)) return "out of range number"; Val = N; return StringRef(); } void ScalarTraits::output(const int32_t &Val, void *, raw_ostream &Out) { Out << Val; } StringRef ScalarTraits::input(StringRef Scalar, void *, int32_t &Val) { long long N; if (getAsSignedInteger(Scalar, 0, N)) return "invalid number"; if ((N > INT32_MAX) || (N < INT32_MIN)) return "out of range number"; Val = N; return StringRef(); } void ScalarTraits::output(const int64_t &Val, void *, raw_ostream &Out) { Out << Val; } StringRef ScalarTraits::input(StringRef Scalar, void *, int64_t &Val) { long long N; if (getAsSignedInteger(Scalar, 0, N)) return "invalid number"; Val = N; return StringRef(); } void ScalarTraits::output(const double &Val, void *, raw_ostream &Out) { Out << format("%g", Val); } StringRef ScalarTraits::input(StringRef Scalar, void *, double &Val) { if (to_float(Scalar, Val)) return StringRef(); return "invalid floating point number"; } void ScalarTraits::output(const float &Val, void *, raw_ostream &Out) { Out << format("%g", Val); } StringRef ScalarTraits::input(StringRef Scalar, void *, float &Val) { if (to_float(Scalar, Val)) return StringRef(); return "invalid floating point number"; } void ScalarTraits::output(const Hex8 &Val, void *, raw_ostream &Out) { uint8_t Num = Val; Out << format("0x%02X", Num); } StringRef ScalarTraits::input(StringRef Scalar, void *, Hex8 &Val) { unsigned long long n; if (getAsUnsignedInteger(Scalar, 0, n)) return "invalid hex8 number"; if (n > 0xFF) return "out of range hex8 number"; Val = n; return StringRef(); } void ScalarTraits::output(const Hex16 &Val, void *, raw_ostream &Out) { uint16_t Num = Val; Out << format("0x%04X", Num); } StringRef ScalarTraits::input(StringRef Scalar, void *, Hex16 &Val) { unsigned long long n; if (getAsUnsignedInteger(Scalar, 0, n)) return "invalid hex16 number"; if (n > 0xFFFF) return "out of range hex16 number"; Val = n; return StringRef(); } void ScalarTraits::output(const Hex32 &Val, void *, raw_ostream &Out) { uint32_t Num = Val; Out << format("0x%08X", Num); } StringRef ScalarTraits::input(StringRef Scalar, void *, Hex32 &Val) { unsigned long long n; if (getAsUnsignedInteger(Scalar, 0, n)) return "invalid hex32 number"; if (n > 0xFFFFFFFFUL) return "out of range hex32 number"; Val = n; return StringRef(); } void ScalarTraits::output(const Hex64 &Val, void *, raw_ostream &Out) { uint64_t Num = Val; Out << format("0x%016llX", Num); } StringRef ScalarTraits::input(StringRef Scalar, void *, Hex64 &Val) { unsigned long long Num; if (getAsUnsignedInteger(Scalar, 0, Num)) return "invalid hex64 number"; Val = Num; return StringRef(); } binaryen-version_108/third_party/llvm-project/dwarf2yaml.cpp000066400000000000000000000401751423707623100244770ustar00rootroot00000000000000//===------ dwarf2yaml.cpp - obj2yaml conversion tool -----------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "Error.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/ObjectYAML/DWARFYAML.h" #include using namespace llvm; void dumpInitialLength(DataExtractor &Data, uint64_t &Offset, DWARFYAML::InitialLength &InitialLength) { InitialLength.TotalLength = Data.getU32(&Offset); if (InitialLength.isDWARF64()) InitialLength.TotalLength64 = Data.getU64(&Offset); } void dumpDebugAbbrev(DWARFContext &DCtx, DWARFYAML::Data &Y) { auto AbbrevSetPtr = DCtx.getDebugAbbrev(); if (AbbrevSetPtr) { for (auto AbbrvDeclSet : *AbbrevSetPtr) { auto ListOffset = AbbrvDeclSet.second.getOffset(); for (auto AbbrvDecl : AbbrvDeclSet.second) { DWARFYAML::Abbrev Abbrv; Abbrv.Code = AbbrvDecl.getCode(); Abbrv.Tag = AbbrvDecl.getTag(); Abbrv.Children = AbbrvDecl.hasChildren() ? dwarf::DW_CHILDREN_yes : dwarf::DW_CHILDREN_no; for (auto Attribute : AbbrvDecl.attributes()) { DWARFYAML::AttributeAbbrev AttAbrv; AttAbrv.Attribute = Attribute.Attr; AttAbrv.Form = Attribute.Form; if (AttAbrv.Form == dwarf::DW_FORM_implicit_const) AttAbrv.Value = Attribute.getImplicitConstValue(); Abbrv.Attributes.push_back(AttAbrv); } Abbrv.ListOffset = ListOffset; Y.AbbrevDecls.push_back(Abbrv); } // XXX BINARYEN: null-terminate the DeclSet. This is needed to separate // DeclSets from each other, and to null-terminate the entire list // (LLVM works with or without this, but other decoders may error, see // https://bugs.llvm.org/show_bug.cgi?id=44511). DWARFYAML::Abbrev Abbrv; Abbrv.Code = 0; Abbrv.Tag = dwarf::Tag(0); Y.AbbrevDecls.push_back(Abbrv); } } } void dumpDebugStrings(DWARFContext &DCtx, DWARFYAML::Data &Y) { StringRef RemainingTable = DCtx.getDWARFObj().getStrSection(); while (RemainingTable.size() > 0) { auto SymbolPair = RemainingTable.split('\0'); RemainingTable = SymbolPair.second; Y.DebugStrings.push_back(SymbolPair.first); } } void dumpDebugARanges(DWARFContext &DCtx, DWARFYAML::Data &Y) { DataExtractor ArangesData(DCtx.getDWARFObj().getArangesSection(), DCtx.isLittleEndian(), 0); uint64_t Offset = 0; DWARFDebugArangeSet Set; while (Set.extract(ArangesData, &Offset)) { DWARFYAML::ARange Range; Range.Length.setLength(Set.getHeader().Length); Range.Version = Set.getHeader().Version; Range.CuOffset = Set.getHeader().CuOffset; Range.AddrSize = Set.getHeader().AddrSize; Range.SegSize = Set.getHeader().SegSize; for (auto Descriptor : Set.descriptors()) { DWARFYAML::ARangeDescriptor Desc; Desc.Address = Descriptor.Address; Desc.Length = Descriptor.Length; Range.Descriptors.push_back(Desc); } Y.ARanges.push_back(Range); } } void dumpDebugRanges(DWARFContext &DCtx, DWARFYAML::Data &Y) { // XXX BINARYEN uint8_t savedAddressByteSize = 4; DWARFDataExtractor rangesData(DCtx.getDWARFObj(), DCtx.getDWARFObj().getRangesSection(), DCtx.isLittleEndian(), savedAddressByteSize); uint64_t offset = 0; DWARFDebugRangeList rangeList; while (rangesData.isValidOffset(offset)) { if (Error E = rangeList.extract(rangesData, &offset)) { errs() << toString(std::move(E)) << '\n'; break; } for (auto& entry : rangeList.getEntries()) { DWARFYAML::Range range; range.Start = entry.StartAddress; range.End = entry.EndAddress; range.SectionIndex = entry.SectionIndex; Y.Ranges.push_back(range); } DWARFYAML::Range range; range.Start = 0; range.End = 0; range.SectionIndex = -1; Y.Ranges.push_back(range); } } void dumpDebugLoc(DWARFContext &DCtx, DWARFYAML::Data &Y) { // XXX BINARYEN // This blindly grabs the first CU, which should be ok since they all have // the same address size? auto CU = DCtx.normal_units().begin()->get(); uint8_t savedAddressByteSize = CU->getFormParams().AddrSize; // XXX BINARYEN DWARFDataExtractor locsData(DCtx.getDWARFObj(), DCtx.getDWARFObj().getLocSection(), DCtx.isLittleEndian(), savedAddressByteSize); uint64_t offset = 0; DWARFDebugLoc locList; while (locsData.isValidOffset(offset)) { uint64_t locListOffset = offset; // XXX BINARYEN auto list = locList.parseOneLocationList(locsData, &offset); if (!list) { errs() << "debug_loc error\n"; exit(1); } for (auto& entry : list.get().Entries) { DWARFYAML::Loc loc; loc.Start = entry.Begin; loc.End = entry.End; for (auto x : entry.Loc) { loc.Location.push_back(x); } loc.CompileUnitOffset = locListOffset; // XXX BINARYEN Y.Locs.push_back(loc); } DWARFYAML::Loc loc; loc.Start = 0; loc.End = 0; loc.CompileUnitOffset = locListOffset; // XXX BINARYEN Y.Locs.push_back(loc); } } void dumpPubSection(DWARFContext &DCtx, DWARFYAML::PubSection &Y, DWARFSection Section) { DWARFDataExtractor PubSectionData(DCtx.getDWARFObj(), Section, DCtx.isLittleEndian(), 0); uint64_t Offset = 0; dumpInitialLength(PubSectionData, Offset, Y.Length); Y.Version = PubSectionData.getU16(&Offset); Y.UnitOffset = PubSectionData.getU32(&Offset); Y.UnitSize = PubSectionData.getU32(&Offset); while (Offset < Y.Length.getLength()) { DWARFYAML::PubEntry NewEntry; NewEntry.DieOffset = PubSectionData.getU32(&Offset); if (Y.IsGNUStyle) NewEntry.Descriptor = PubSectionData.getU8(&Offset); NewEntry.Name = PubSectionData.getCStr(&Offset); Y.Entries.push_back(NewEntry); } } void dumpDebugPubSections(DWARFContext &DCtx, DWARFYAML::Data &Y) { const DWARFObject &D = DCtx.getDWARFObj(); Y.PubNames.IsGNUStyle = false; dumpPubSection(DCtx, Y.PubNames, D.getPubnamesSection()); Y.PubTypes.IsGNUStyle = false; dumpPubSection(DCtx, Y.PubTypes, D.getPubtypesSection()); Y.GNUPubNames.IsGNUStyle = true; dumpPubSection(DCtx, Y.GNUPubNames, D.getGnuPubnamesSection()); Y.GNUPubTypes.IsGNUStyle = true; dumpPubSection(DCtx, Y.GNUPubTypes, D.getGnuPubtypesSection()); } void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) { for (const auto &CU : DCtx.compile_units()) { DWARFYAML::Unit NewUnit; NewUnit.Length.setLength(CU->getLength()); NewUnit.Version = CU->getVersion(); if(NewUnit.Version >= 5) NewUnit.Type = (dwarf::UnitType)CU->getUnitType(); if (auto* Abbreviations = CU->getAbbreviations()) { // XXX BINARYEN NewUnit.AbbrOffset = Abbreviations->getOffset(); } NewUnit.AddrSize = CU->getAddressByteSize(); for (auto DIE : CU->dies()) { DWARFYAML::Entry NewEntry; DataExtractor EntryData = CU->getDebugInfoExtractor(); uint64_t offset = DIE.getOffset(); assert(EntryData.isValidOffset(offset) && "Invalid DIE Offset"); if (!EntryData.isValidOffset(offset)) continue; NewEntry.AbbrCode = EntryData.getULEB128(&offset); auto AbbrevDecl = DIE.getAbbreviationDeclarationPtr(); if (AbbrevDecl) { for (const auto &AttrSpec : AbbrevDecl->attributes()) { DWARFYAML::FormValue NewValue; NewValue.Value = 0xDEADBEEFDEADBEEF; DWARFDie DIEWrapper(CU.get(), &DIE); auto FormValue = DIEWrapper.find(AttrSpec.Attr); if (!FormValue) return; auto Form = FormValue.getValue().getForm(); bool indirect = false; do { indirect = false; switch (Form) { case dwarf::DW_FORM_addr: case dwarf::DW_FORM_GNU_addr_index: if (auto Val = FormValue.getValue().getAsAddress()) NewValue.Value = Val.getValue(); break; case dwarf::DW_FORM_ref_addr: case dwarf::DW_FORM_ref1: case dwarf::DW_FORM_ref2: case dwarf::DW_FORM_ref4: case dwarf::DW_FORM_ref8: case dwarf::DW_FORM_ref_udata: case dwarf::DW_FORM_ref_sig8: if (auto Val = FormValue.getValue().getAsReferenceUVal()) NewValue.Value = Val.getValue(); break; case dwarf::DW_FORM_exprloc: case dwarf::DW_FORM_block: case dwarf::DW_FORM_block1: case dwarf::DW_FORM_block2: case dwarf::DW_FORM_block4: if (auto Val = FormValue.getValue().getAsBlock()) { auto BlockData = Val.getValue(); std::copy(BlockData.begin(), BlockData.end(), std::back_inserter(NewValue.BlockData)); } NewValue.Value = NewValue.BlockData.size(); break; case dwarf::DW_FORM_data1: case dwarf::DW_FORM_flag: case dwarf::DW_FORM_data2: case dwarf::DW_FORM_data4: case dwarf::DW_FORM_data8: case dwarf::DW_FORM_udata: case dwarf::DW_FORM_ref_sup4: case dwarf::DW_FORM_ref_sup8: if (auto Val = FormValue.getValue().getAsUnsignedConstant()) NewValue.Value = Val.getValue(); break; // XXX BINARYEN: sdata is signed, and FormValue won't return it as // unsigned (it returns an empty value). case dwarf::DW_FORM_sdata: if (auto Val = FormValue.getValue().getAsSignedConstant()) NewValue.Value = Val.getValue(); break; case dwarf::DW_FORM_string: if (auto Val = FormValue.getValue().getAsCString()) NewValue.CStr = Val.getValue(); break; case dwarf::DW_FORM_indirect: indirect = true; if (auto Val = FormValue.getValue().getAsUnsignedConstant()) { NewValue.Value = Val.getValue(); NewEntry.Values.push_back(NewValue); Form = static_cast(Val.getValue()); } break; case dwarf::DW_FORM_strp: case dwarf::DW_FORM_sec_offset: case dwarf::DW_FORM_GNU_ref_alt: case dwarf::DW_FORM_GNU_strp_alt: case dwarf::DW_FORM_line_strp: case dwarf::DW_FORM_strp_sup: case dwarf::DW_FORM_GNU_str_index: case dwarf::DW_FORM_strx: if (auto Val = FormValue.getValue().getAsCStringOffset()) NewValue.Value = Val.getValue(); break; case dwarf::DW_FORM_flag_present: NewValue.Value = 1; break; default: break; } } while (indirect); NewEntry.Values.push_back(NewValue); } } NewUnit.Entries.push_back(NewEntry); } Y.CompileUnits.push_back(NewUnit); } } bool dumpFileEntry(DataExtractor &Data, uint64_t &Offset, DWARFYAML::File &File) { File.Name = Data.getCStr(&Offset); if (File.Name.empty()) return false; File.DirIdx = Data.getULEB128(&Offset); File.ModTime = Data.getULEB128(&Offset); File.Length = Data.getULEB128(&Offset); return true; } void dumpDebugLines(DWARFContext &DCtx, DWARFYAML::Data &Y) { for (const auto &CU : DCtx.compile_units()) { auto CUDIE = CU->getUnitDIE(); if (!CUDIE) continue; if (auto StmtOffset = dwarf::toSectionOffset(CUDIE.find(dwarf::DW_AT_stmt_list))) { DWARFYAML::LineTable DebugLines; DataExtractor LineData(DCtx.getDWARFObj().getLineSection().Data, DCtx.isLittleEndian(), CU->getAddressByteSize()); uint64_t Offset = *StmtOffset; DebugLines.Position = Offset; dumpInitialLength(LineData, Offset, DebugLines.Length); uint64_t LineTableLength = DebugLines.Length.getLength(); uint64_t SizeOfPrologueLength = DebugLines.Length.isDWARF64() ? 8 : 4; DebugLines.Version = LineData.getU16(&Offset); DebugLines.PrologueLength = LineData.getUnsigned(&Offset, SizeOfPrologueLength); const uint64_t EndPrologue = DebugLines.PrologueLength + Offset; DebugLines.MinInstLength = LineData.getU8(&Offset); if (DebugLines.Version >= 4) DebugLines.MaxOpsPerInst = LineData.getU8(&Offset); DebugLines.DefaultIsStmt = LineData.getU8(&Offset); DebugLines.LineBase = LineData.getU8(&Offset); DebugLines.LineRange = LineData.getU8(&Offset); DebugLines.OpcodeBase = LineData.getU8(&Offset); DebugLines.StandardOpcodeLengths.reserve(DebugLines.OpcodeBase - 1); for (uint8_t i = 1; i < DebugLines.OpcodeBase; ++i) DebugLines.StandardOpcodeLengths.push_back(LineData.getU8(&Offset)); while (Offset < EndPrologue) { StringRef Dir = LineData.getCStr(&Offset); if (!Dir.empty()) DebugLines.IncludeDirs.push_back(Dir); else break; } while (Offset < EndPrologue) { DWARFYAML::File TmpFile; if (dumpFileEntry(LineData, Offset, TmpFile)) DebugLines.Files.push_back(TmpFile); else break; } const uint64_t LineEnd = LineTableLength + *StmtOffset + SizeOfPrologueLength; while (Offset < LineEnd) { DWARFYAML::LineTableOpcode NewOp = {}; NewOp.Opcode = (dwarf::LineNumberOps)LineData.getU8(&Offset); if (NewOp.Opcode == 0) { auto StartExt = Offset; NewOp.ExtLen = LineData.getULEB128(&Offset); NewOp.SubOpcode = (dwarf::LineNumberExtendedOps)LineData.getU8(&Offset); switch (NewOp.SubOpcode) { case dwarf::DW_LNE_set_address: case dwarf::DW_LNE_set_discriminator: NewOp.Data = LineData.getAddress(&Offset); break; case dwarf::DW_LNE_define_file: dumpFileEntry(LineData, Offset, NewOp.FileEntry); break; case dwarf::DW_LNE_end_sequence: break; default: while (Offset < StartExt + NewOp.ExtLen) NewOp.UnknownOpcodeData.push_back(LineData.getU8(&Offset)); } } else if (NewOp.Opcode < DebugLines.OpcodeBase) { switch (NewOp.Opcode) { case dwarf::DW_LNS_copy: case dwarf::DW_LNS_negate_stmt: case dwarf::DW_LNS_set_basic_block: case dwarf::DW_LNS_const_add_pc: case dwarf::DW_LNS_set_prologue_end: case dwarf::DW_LNS_set_epilogue_begin: break; case dwarf::DW_LNS_advance_pc: case dwarf::DW_LNS_set_file: case dwarf::DW_LNS_set_column: case dwarf::DW_LNS_set_isa: NewOp.Data = LineData.getULEB128(&Offset); break; case dwarf::DW_LNS_advance_line: NewOp.SData = LineData.getSLEB128(&Offset); break; case dwarf::DW_LNS_fixed_advance_pc: NewOp.Data = LineData.getU16(&Offset); break; default: for (uint8_t i = 0; i < DebugLines.StandardOpcodeLengths[NewOp.Opcode - 1]; ++i) NewOp.StandardOpcodeData.push_back(LineData.getULEB128(&Offset)); } } DebugLines.Opcodes.push_back(NewOp); } Y.DebugLines.push_back(DebugLines); } } } std::error_code dwarf2yaml(DWARFContext &DCtx, DWARFYAML::Data &Y) { Y.IsLittleEndian = true; // XXX BINARYEN dumpDebugAbbrev(DCtx, Y); dumpDebugStrings(DCtx, Y); dumpDebugARanges(DCtx, Y); dumpDebugRanges(DCtx, Y); // XXX BINARYEN dumpDebugPubSections(DCtx, Y); dumpDebugInfo(DCtx, Y); // dumpDebugLoc relies on the address size being known from dumpDebugInfo. dumpDebugLoc(DCtx, Y); // XXX BINARYEN dumpDebugLines(DCtx, Y); return obj2yaml_error::success; } binaryen-version_108/third_party/llvm-project/include/000077500000000000000000000000001423707623100233375ustar00rootroot00000000000000binaryen-version_108/third_party/llvm-project/include/llvm-c/000077500000000000000000000000001423707623100245315ustar00rootroot00000000000000binaryen-version_108/third_party/llvm-project/include/llvm-c/DataTypes.h000066400000000000000000000060141423707623100266010ustar00rootroot00000000000000/*===-- include/llvm-c/DataTypes.h - Define fixed size types ------*- C -*-===*\ |* *| |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| |* Exceptions. *| |* See https://llvm.org/LICENSE.txt for license information. *| |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| |* *| |*===----------------------------------------------------------------------===*| |* *| |* This file contains definitions to figure out the size of _HOST_ data types.*| |* This file is important because different host OS's define different macros,*| |* which makes portability tough. This file exports the following *| |* definitions: *| |* *| |* [u]int(32|64)_t : typedefs for signed and unsigned 32/64 bit system types*| |* [U]INT(8|16|32|64)_(MIN|MAX) : Constants for the min and max values. *| |* *| |* No library is required when using these functions. *| |* *| |*===----------------------------------------------------------------------===*/ /* Please leave this file C-compatible. */ #ifndef LLVM_C_DATATYPES_H #define LLVM_C_DATATYPES_H #ifdef __cplusplus #include #else #include #endif #include #include #ifndef _MSC_VER #if !defined(UINT32_MAX) # error "The standard header is not C++11 compliant. Must #define "\ "__STDC_LIMIT_MACROS before #including llvm-c/DataTypes.h" #endif #if !defined(UINT32_C) # error "The standard header is not C++11 compliant. Must #define "\ "__STDC_CONSTANT_MACROS before #including llvm-c/DataTypes.h" #endif /* Note that includes , if this is a C99 system. */ #include #ifdef _AIX // GCC is strict about defining large constants: they must have LL modifier. #undef INT64_MAX #undef INT64_MIN #endif #else /* _MSC_VER */ #ifdef __cplusplus #include #include #else #include #include #endif #include #if defined(_WIN64) typedef signed __int64 ssize_t; #else typedef signed int ssize_t; #endif /* _WIN64 */ #endif /* _MSC_VER */ /* Set defaults for constants which we cannot find. */ #if !defined(INT64_MAX) # define INT64_MAX 9223372036854775807LL #endif #if !defined(INT64_MIN) # define INT64_MIN ((-INT64_MAX)-1) #endif #if !defined(UINT64_MAX) # define UINT64_MAX 0xffffffffffffffffULL #endif #ifndef HUGE_VALF #define HUGE_VALF (float)HUGE_VAL #endif #endif /* LLVM_C_DATATYPES_H */ binaryen-version_108/third_party/llvm-project/include/llvm-c/DisassemblerTypes.h000066400000000000000000000171271423707623100303540ustar00rootroot00000000000000/*===-- llvm-c/DisassemblerTypedefs.h -----------------------------*- C -*-===*\ |* *| |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| |* Exceptions. *| |* See https://llvm.org/LICENSE.txt for license information. *| |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| |* *| |*===----------------------------------------------------------------------===*/ #ifndef LLVM_DISASSEMBLER_TYPES_H #define LLVM_DISASSEMBLER_TYPES_H #include "llvm-c/DataTypes.h" #ifdef __cplusplus #include #else #include #endif /** * An opaque reference to a disassembler context. */ typedef void *LLVMDisasmContextRef; /** * The type for the operand information call back function. This is called to * get the symbolic information for an operand of an instruction. Typically * this is from the relocation information, symbol table, etc. That block of * information is saved when the disassembler context is created and passed to * the call back in the DisInfo parameter. The instruction containing operand * is at the PC parameter. For some instruction sets, there can be more than * one operand with symbolic information. To determine the symbolic operand * information for each operand, the bytes for the specific operand in the * instruction are specified by the Offset parameter and its byte widith is the * size parameter. For instructions sets with fixed widths and one symbolic * operand per instruction, the Offset parameter will be zero and Size parameter * will be the instruction width. The information is returned in TagBuf and is * Triple specific with its specific information defined by the value of * TagType for that Triple. If symbolic information is returned the function * returns 1, otherwise it returns 0. */ typedef int (*LLVMOpInfoCallback)(void *DisInfo, uint64_t PC, uint64_t Offset, uint64_t Size, int TagType, void *TagBuf); /** * The initial support in LLVM MC for the most general form of a relocatable * expression is "AddSymbol - SubtractSymbol + Offset". For some Darwin targets * this full form is encoded in the relocation information so that AddSymbol and * SubtractSymbol can be link edited independent of each other. Many other * platforms only allow a relocatable expression of the form AddSymbol + Offset * to be encoded. * * The LLVMOpInfoCallback() for the TagType value of 1 uses the struct * LLVMOpInfo1. The value of the relocatable expression for the operand, * including any PC adjustment, is passed in to the call back in the Value * field. The symbolic information about the operand is returned using all * the fields of the structure with the Offset of the relocatable expression * returned in the Value field. It is possible that some symbols in the * relocatable expression were assembly temporary symbols, for example * "Ldata - LpicBase + constant", and only the Values of the symbols without * symbol names are present in the relocation information. The VariantKind * type is one of the Target specific #defines below and is used to print * operands like "_foo@GOT", ":lower16:_foo", etc. */ struct LLVMOpInfoSymbol1 { uint64_t Present; /* 1 if this symbol is present */ const char *Name; /* symbol name if not NULL */ uint64_t Value; /* symbol value if name is NULL */ }; struct LLVMOpInfo1 { struct LLVMOpInfoSymbol1 AddSymbol; struct LLVMOpInfoSymbol1 SubtractSymbol; uint64_t Value; uint64_t VariantKind; }; /** * The operand VariantKinds for symbolic disassembly. */ #define LLVMDisassembler_VariantKind_None 0 /* all targets */ /** * The ARM target VariantKinds. */ #define LLVMDisassembler_VariantKind_ARM_HI16 1 /* :upper16: */ #define LLVMDisassembler_VariantKind_ARM_LO16 2 /* :lower16: */ /** * The ARM64 target VariantKinds. */ #define LLVMDisassembler_VariantKind_ARM64_PAGE 1 /* @page */ #define LLVMDisassembler_VariantKind_ARM64_PAGEOFF 2 /* @pageoff */ #define LLVMDisassembler_VariantKind_ARM64_GOTPAGE 3 /* @gotpage */ #define LLVMDisassembler_VariantKind_ARM64_GOTPAGEOFF 4 /* @gotpageoff */ #define LLVMDisassembler_VariantKind_ARM64_TLVP 5 /* @tvlppage */ #define LLVMDisassembler_VariantKind_ARM64_TLVOFF 6 /* @tvlppageoff */ /** * The type for the symbol lookup function. This may be called by the * disassembler for things like adding a comment for a PC plus a constant * offset load instruction to use a symbol name instead of a load address value. * It is passed the block information is saved when the disassembler context is * created and the ReferenceValue to look up as a symbol. If no symbol is found * for the ReferenceValue NULL is returned. The ReferenceType of the * instruction is passed indirectly as is the PC of the instruction in * ReferencePC. If the output reference can be determined its type is returned * indirectly in ReferenceType along with ReferenceName if any, or that is set * to NULL. */ typedef const char *(*LLVMSymbolLookupCallback)(void *DisInfo, uint64_t ReferenceValue, uint64_t *ReferenceType, uint64_t ReferencePC, const char **ReferenceName); /** * The reference types on input and output. */ /* No input reference type or no output reference type. */ #define LLVMDisassembler_ReferenceType_InOut_None 0 /* The input reference is from a branch instruction. */ #define LLVMDisassembler_ReferenceType_In_Branch 1 /* The input reference is from a PC relative load instruction. */ #define LLVMDisassembler_ReferenceType_In_PCrel_Load 2 /* The input reference is from an ARM64::ADRP instruction. */ #define LLVMDisassembler_ReferenceType_In_ARM64_ADRP 0x100000001 /* The input reference is from an ARM64::ADDXri instruction. */ #define LLVMDisassembler_ReferenceType_In_ARM64_ADDXri 0x100000002 /* The input reference is from an ARM64::LDRXui instruction. */ #define LLVMDisassembler_ReferenceType_In_ARM64_LDRXui 0x100000003 /* The input reference is from an ARM64::LDRXl instruction. */ #define LLVMDisassembler_ReferenceType_In_ARM64_LDRXl 0x100000004 /* The input reference is from an ARM64::ADR instruction. */ #define LLVMDisassembler_ReferenceType_In_ARM64_ADR 0x100000005 /* The output reference is to as symbol stub. */ #define LLVMDisassembler_ReferenceType_Out_SymbolStub 1 /* The output reference is to a symbol address in a literal pool. */ #define LLVMDisassembler_ReferenceType_Out_LitPool_SymAddr 2 /* The output reference is to a cstring address in a literal pool. */ #define LLVMDisassembler_ReferenceType_Out_LitPool_CstrAddr 3 /* The output reference is to a Objective-C CoreFoundation string. */ #define LLVMDisassembler_ReferenceType_Out_Objc_CFString_Ref 4 /* The output reference is to a Objective-C message. */ #define LLVMDisassembler_ReferenceType_Out_Objc_Message 5 /* The output reference is to a Objective-C message ref. */ #define LLVMDisassembler_ReferenceType_Out_Objc_Message_Ref 6 /* The output reference is to a Objective-C selector ref. */ #define LLVMDisassembler_ReferenceType_Out_Objc_Selector_Ref 7 /* The output reference is to a Objective-C class ref. */ #define LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref 8 /* The output reference is to a C++ symbol name. */ #define LLVMDisassembler_ReferenceType_DeMangled_Name 9 #endif binaryen-version_108/third_party/llvm-project/include/llvm-c/Error.h000066400000000000000000000044531423707623100260010ustar00rootroot00000000000000/*===------- llvm-c/Error.h - llvm::Error class C Interface -------*- C -*-===*\ |* *| |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| |* Exceptions. *| |* See https://llvm.org/LICENSE.txt for license information. *| |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| |* *| |*===----------------------------------------------------------------------===*| |* *| |* This file defines the C interface to LLVM's Error class. *| |* *| \*===----------------------------------------------------------------------===*/ #ifndef LLVM_C_ERROR_H #define LLVM_C_ERROR_H #ifdef __cplusplus extern "C" { #endif #define LLVMErrorSuccess 0 /** * Opaque reference to an error instance. Null serves as the 'success' value. */ typedef struct LLVMOpaqueError *LLVMErrorRef; /** * Error type identifier. */ typedef const void *LLVMErrorTypeId; /** * Returns the type id for the given error instance, which must be a failure * value (i.e. non-null). */ LLVMErrorTypeId LLVMGetErrorTypeId(LLVMErrorRef Err); /** * Dispose of the given error without handling it. This operation consumes the * error, and the given LLVMErrorRef value is not usable once this call returns. * Note: This method *only* needs to be called if the error is not being passed * to some other consuming operation, e.g. LLVMGetErrorMessage. */ void LLVMConsumeError(LLVMErrorRef Err); /** * Returns the given string's error message. This operation consumes the error, * and the given LLVMErrorRef value is not usable once this call returns. * The caller is responsible for disposing of the string by calling * LLVMDisposeErrorMessage. */ char *LLVMGetErrorMessage(LLVMErrorRef Err); /** * Dispose of the given error message. */ void LLVMDisposeErrorMessage(char *ErrMsg); /** * Returns the type id for llvm StringError. */ LLVMErrorTypeId LLVMGetStringErrorTypeId(void); #ifdef __cplusplus } #endif #endif binaryen-version_108/third_party/llvm-project/include/llvm-c/ErrorHandling.h000066400000000000000000000036321423707623100274440ustar00rootroot00000000000000/*===-- llvm-c/ErrorHandling.h - Error Handling C Interface -------*- C -*-===*\ |* *| |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| |* Exceptions. *| |* See https://llvm.org/LICENSE.txt for license information. *| |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| |* *| |*===----------------------------------------------------------------------===*| |* *| |* This file defines the C interface to LLVM's error handling mechanism. *| |* *| \*===----------------------------------------------------------------------===*/ #ifndef LLVM_C_ERROR_HANDLING_H #define LLVM_C_ERROR_HANDLING_H #ifdef __cplusplus extern "C" { #endif typedef void (*LLVMFatalErrorHandler)(const char *Reason); /** * Install a fatal error handler. By default, if LLVM detects a fatal error, it * will call exit(1). This may not be appropriate in many contexts. For example, * doing exit(1) will bypass many crash reporting/tracing system tools. This * function allows you to install a callback that will be invoked prior to the * call to exit(1). */ void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler); /** * Reset the fatal error handler. This resets LLVM's fatal error handling * behavior to the default. */ void LLVMResetFatalErrorHandler(void); /** * Enable LLVM's built-in stack trace code. This intercepts the OS's crash * signals and prints which component of LLVM you were in at the time if the * crash. */ void LLVMEnablePrettyStackTrace(void); #ifdef __cplusplus } #endif #endif binaryen-version_108/third_party/llvm-project/include/llvm-c/Types.h000066400000000000000000000110421423707623100260040ustar00rootroot00000000000000/*===-- llvm-c/Support.h - C Interface Types declarations ---------*- C -*-===*\ |* *| |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| |* Exceptions. *| |* See https://llvm.org/LICENSE.txt for license information. *| |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| |* *| |*===----------------------------------------------------------------------===*| |* *| |* This file defines types used by the C interface to LLVM. *| |* *| \*===----------------------------------------------------------------------===*/ #ifndef LLVM_C_TYPES_H #define LLVM_C_TYPES_H #include "llvm-c/DataTypes.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup LLVMCSupportTypes Types and Enumerations * * @{ */ typedef int LLVMBool; /* Opaque types. */ /** * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore * parameters must be passed as base types. Despite the declared types, most * of the functions provided operate only on branches of the type hierarchy. * The declared parameter names are descriptive and specify which type is * required. Additionally, each type hierarchy is documented along with the * functions that operate upon it. For more detail, refer to LLVM's C++ code. * If in doubt, refer to Core.cpp, which performs parameter downcasts in the * form unwrap(Param). */ /** * Used to pass regions of memory through LLVM interfaces. * * @see llvm::MemoryBuffer */ typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef; /** * The top-level container for all LLVM global data. See the LLVMContext class. */ typedef struct LLVMOpaqueContext *LLVMContextRef; /** * The top-level container for all other LLVM Intermediate Representation (IR) * objects. * * @see llvm::Module */ typedef struct LLVMOpaqueModule *LLVMModuleRef; /** * Each value in the LLVM IR has a type, an LLVMTypeRef. * * @see llvm::Type */ typedef struct LLVMOpaqueType *LLVMTypeRef; /** * Represents an individual value in LLVM IR. * * This models llvm::Value. */ typedef struct LLVMOpaqueValue *LLVMValueRef; /** * Represents a basic block of instructions in LLVM IR. * * This models llvm::BasicBlock. */ typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef; /** * Represents an LLVM Metadata. * * This models llvm::Metadata. */ typedef struct LLVMOpaqueMetadata *LLVMMetadataRef; /** * Represents an LLVM Named Metadata Node. * * This models llvm::NamedMDNode. */ typedef struct LLVMOpaqueNamedMDNode *LLVMNamedMDNodeRef; /** * Represents an entry in a Global Object's metadata attachments. * * This models std::pair */ typedef struct LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry; /** * Represents an LLVM basic block builder. * * This models llvm::IRBuilder. */ typedef struct LLVMOpaqueBuilder *LLVMBuilderRef; /** * Represents an LLVM debug info builder. * * This models llvm::DIBuilder. */ typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef; /** * Interface used to provide a module to JIT or interpreter. * This is now just a synonym for llvm::Module, but we have to keep using the * different type to keep binary compatibility. */ typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef; /** @see llvm::PassManagerBase */ typedef struct LLVMOpaquePassManager *LLVMPassManagerRef; /** @see llvm::PassRegistry */ typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef; /** * Used to get the users and usees of a Value. * * @see llvm::Use */ typedef struct LLVMOpaqueUse *LLVMUseRef; /** * Used to represent an attributes. * * @see llvm::Attribute */ typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef; /** * @see llvm::DiagnosticInfo */ typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef; /** * @see llvm::Comdat */ typedef struct LLVMComdat *LLVMComdatRef; /** * @see llvm::Module::ModuleFlagEntry */ typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry; /** * @see llvm::JITEventListener */ typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef; /** * @see llvm::object::Binary */ typedef struct LLVMOpaqueBinary *LLVMBinaryRef; /** * @} */ #ifdef __cplusplus } #endif #endif binaryen-version_108/third_party/llvm-project/include/llvm/000077500000000000000000000000001423707623100243115ustar00rootroot00000000000000binaryen-version_108/third_party/llvm-project/include/llvm/ADT/000077500000000000000000000000001423707623100247215ustar00rootroot00000000000000binaryen-version_108/third_party/llvm-project/include/llvm/ADT/APFloat.h000066400000000000000000001365171423707623100263750ustar00rootroot00000000000000//===- llvm/ADT/APFloat.h - Arbitrary Precision Floating Point ---*- C++ -*-==// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// \brief /// This file declares a class to represent arbitrary precision floating point /// values and provide a variety of arithmetic operations on them. /// //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_APFLOAT_H #define LLVM_ADT_APFLOAT_H #include "llvm/ADT/APInt.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/ErrorHandling.h" #include #define APFLOAT_DISPATCH_ON_SEMANTICS(METHOD_CALL) \ do { \ if (usesLayout(getSemantics())) \ return U.IEEE.METHOD_CALL; \ if (usesLayout(getSemantics())) \ return U.Double.METHOD_CALL; \ llvm_unreachable("Unexpected semantics"); \ } while (false) namespace llvm { struct fltSemantics; class APSInt; class StringRef; class APFloat; class raw_ostream; template class SmallVectorImpl; /// Enum that represents what fraction of the LSB truncated bits of an fp number /// represent. /// /// This essentially combines the roles of guard and sticky bits. enum lostFraction { // Example of truncated bits: lfExactlyZero, // 000000 lfLessThanHalf, // 0xxxxx x's not all zero lfExactlyHalf, // 100000 lfMoreThanHalf // 1xxxxx x's not all zero }; /// A self-contained host- and target-independent arbitrary-precision /// floating-point software implementation. /// /// APFloat uses bignum integer arithmetic as provided by static functions in /// the APInt class. The library will work with bignum integers whose parts are /// any unsigned type at least 16 bits wide, but 64 bits is recommended. /// /// Written for clarity rather than speed, in particular with a view to use in /// the front-end of a cross compiler so that target arithmetic can be correctly /// performed on the host. Performance should nonetheless be reasonable, /// particularly for its intended use. It may be useful as a base /// implementation for a run-time library during development of a faster /// target-specific one. /// /// All 5 rounding modes in the IEEE-754R draft are handled correctly for all /// implemented operations. Currently implemented operations are add, subtract, /// multiply, divide, fused-multiply-add, conversion-to-float, /// conversion-to-integer and conversion-from-integer. New rounding modes /// (e.g. away from zero) can be added with three or four lines of code. /// /// Four formats are built-in: IEEE single precision, double precision, /// quadruple precision, and x87 80-bit extended double (when operating with /// full extended precision). Adding a new format that obeys IEEE semantics /// only requires adding two lines of code: a declaration and definition of the /// format. /// /// All operations return the status of that operation as an exception bit-mask, /// so multiple operations can be done consecutively with their results or-ed /// together. The returned status can be useful for compiler diagnostics; e.g., /// inexact, underflow and overflow can be easily diagnosed on constant folding, /// and compiler optimizers can determine what exceptions would be raised by /// folding operations and optimize, or perhaps not optimize, accordingly. /// /// At present, underflow tininess is detected after rounding; it should be /// straight forward to add support for the before-rounding case too. /// /// The library reads hexadecimal floating point numbers as per C99, and /// correctly rounds if necessary according to the specified rounding mode. /// Syntax is required to have been validated by the caller. It also converts /// floating point numbers to hexadecimal text as per the C99 %a and %A /// conversions. The output precision (or alternatively the natural minimal /// precision) can be specified; if the requested precision is less than the /// natural precision the output is correctly rounded for the specified rounding /// mode. /// /// It also reads decimal floating point numbers and correctly rounds according /// to the specified rounding mode. /// /// Conversion to decimal text is not currently implemented. /// /// Non-zero finite numbers are represented internally as a sign bit, a 16-bit /// signed exponent, and the significand as an array of integer parts. After /// normalization of a number of precision P the exponent is within the range of /// the format, and if the number is not denormal the P-th bit of the /// significand is set as an explicit integer bit. For denormals the most /// significant bit is shifted right so that the exponent is maintained at the /// format's minimum, so that the smallest denormal has just the least /// significant bit of the significand set. The sign of zeroes and infinities /// is significant; the exponent and significand of such numbers is not stored, /// but has a known implicit (deterministic) value: 0 for the significands, 0 /// for zero exponent, all 1 bits for infinity exponent. For NaNs the sign and /// significand are deterministic, although not really meaningful, and preserved /// in non-conversion operations. The exponent is implicitly all 1 bits. /// /// APFloat does not provide any exception handling beyond default exception /// handling. We represent Signaling NaNs via IEEE-754R 2008 6.2.1 should clause /// by encoding Signaling NaNs with the first bit of its trailing significand as /// 0. /// /// TODO /// ==== /// /// Some features that may or may not be worth adding: /// /// Binary to decimal conversion (hard). /// /// Optional ability to detect underflow tininess before rounding. /// /// New formats: x87 in single and double precision mode (IEEE apart from /// extended exponent range) (hard). /// /// New operations: sqrt, IEEE remainder, C90 fmod, nexttoward. /// // This is the common type definitions shared by APFloat and its internal // implementation classes. This struct should not define any non-static data // members. struct APFloatBase { typedef APInt::WordType integerPart; static const unsigned integerPartWidth = APInt::APINT_BITS_PER_WORD; /// A signed type to represent a floating point numbers unbiased exponent. typedef signed short ExponentType; /// \name Floating Point Semantics. /// @{ enum Semantics { S_IEEEhalf, S_IEEEsingle, S_IEEEdouble, S_x87DoubleExtended, S_IEEEquad, S_PPCDoubleDouble }; static const llvm::fltSemantics &EnumToSemantics(Semantics S); static Semantics SemanticsToEnum(const llvm::fltSemantics &Sem); static const fltSemantics &IEEEhalf() LLVM_READNONE; static const fltSemantics &IEEEsingle() LLVM_READNONE; static const fltSemantics &IEEEdouble() LLVM_READNONE; static const fltSemantics &IEEEquad() LLVM_READNONE; static const fltSemantics &PPCDoubleDouble() LLVM_READNONE; static const fltSemantics &x87DoubleExtended() LLVM_READNONE; /// A Pseudo fltsemantic used to construct APFloats that cannot conflict with /// anything real. static const fltSemantics &Bogus() LLVM_READNONE; /// @} /// IEEE-754R 5.11: Floating Point Comparison Relations. enum cmpResult { cmpLessThan, cmpEqual, cmpGreaterThan, cmpUnordered }; /// IEEE-754R 4.3: Rounding-direction attributes. enum roundingMode { rmNearestTiesToEven, rmTowardPositive, rmTowardNegative, rmTowardZero, rmNearestTiesToAway }; /// IEEE-754R 7: Default exception handling. /// /// opUnderflow or opOverflow are always returned or-ed with opInexact. /// /// APFloat models this behavior specified by IEEE-754: /// "For operations producing results in floating-point format, the default /// result of an operation that signals the invalid operation exception /// shall be a quiet NaN." enum opStatus { opOK = 0x00, opInvalidOp = 0x01, opDivByZero = 0x02, opOverflow = 0x04, opUnderflow = 0x08, opInexact = 0x10 }; /// Category of internally-represented number. enum fltCategory { fcInfinity, fcNaN, fcNormal, fcZero }; /// Convenience enum used to construct an uninitialized APFloat. enum uninitializedTag { uninitialized }; /// Enumeration of \c ilogb error results. enum IlogbErrorKinds { IEK_Zero = INT_MIN + 1, IEK_NaN = INT_MIN, IEK_Inf = INT_MAX }; static unsigned int semanticsPrecision(const fltSemantics &); static ExponentType semanticsMinExponent(const fltSemantics &); static ExponentType semanticsMaxExponent(const fltSemantics &); static unsigned int semanticsSizeInBits(const fltSemantics &); /// Returns the size of the floating point number (in bits) in the given /// semantics. static unsigned getSizeInBits(const fltSemantics &Sem); }; namespace detail { class IEEEFloat final : public APFloatBase { public: /// \name Constructors /// @{ IEEEFloat(const fltSemantics &); // Default construct to 0.0 IEEEFloat(const fltSemantics &, integerPart); IEEEFloat(const fltSemantics &, uninitializedTag); IEEEFloat(const fltSemantics &, const APInt &); explicit IEEEFloat(double d); explicit IEEEFloat(float f); IEEEFloat(const IEEEFloat &); IEEEFloat(IEEEFloat &&); ~IEEEFloat(); /// @} /// Returns whether this instance allocated memory. bool needsCleanup() const { return partCount() > 1; } /// \name Convenience "constructors" /// @{ /// @} /// \name Arithmetic /// @{ opStatus add(const IEEEFloat &, roundingMode); opStatus subtract(const IEEEFloat &, roundingMode); opStatus multiply(const IEEEFloat &, roundingMode); opStatus divide(const IEEEFloat &, roundingMode); /// IEEE remainder. opStatus remainder(const IEEEFloat &); /// C fmod, or llvm frem. opStatus mod(const IEEEFloat &); opStatus fusedMultiplyAdd(const IEEEFloat &, const IEEEFloat &, roundingMode); opStatus roundToIntegral(roundingMode); /// IEEE-754R 5.3.1: nextUp/nextDown. opStatus next(bool nextDown); /// @} /// \name Sign operations. /// @{ void changeSign(); /// @} /// \name Conversions /// @{ opStatus convert(const fltSemantics &, roundingMode, bool *); opStatus convertToInteger(MutableArrayRef, unsigned int, bool, roundingMode, bool *) const; opStatus convertFromAPInt(const APInt &, bool, roundingMode); opStatus convertFromSignExtendedInteger(const integerPart *, unsigned int, bool, roundingMode); opStatus convertFromZeroExtendedInteger(const integerPart *, unsigned int, bool, roundingMode); opStatus convertFromString(StringRef, roundingMode); APInt bitcastToAPInt() const; double convertToDouble() const; float convertToFloat() const; /// @} /// The definition of equality is not straightforward for floating point, so /// we won't use operator==. Use one of the following, or write whatever it /// is you really mean. bool operator==(const IEEEFloat &) const = delete; /// IEEE comparison with another floating point number (NaNs compare /// unordered, 0==-0). cmpResult compare(const IEEEFloat &) const; /// Bitwise comparison for equality (QNaNs compare equal, 0!=-0). bool bitwiseIsEqual(const IEEEFloat &) const; /// Write out a hexadecimal representation of the floating point value to DST, /// which must be of sufficient size, in the C99 form [-]0xh.hhhhp[+-]d. /// Return the number of characters written, excluding the terminating NUL. unsigned int convertToHexString(char *dst, unsigned int hexDigits, bool upperCase, roundingMode) const; /// \name IEEE-754R 5.7.2 General operations. /// @{ /// IEEE-754R isSignMinus: Returns true if and only if the current value is /// negative. /// /// This applies to zeros and NaNs as well. bool isNegative() const { return sign; } /// IEEE-754R isNormal: Returns true if and only if the current value is normal. /// /// This implies that the current value of the float is not zero, subnormal, /// infinite, or NaN following the definition of normality from IEEE-754R. bool isNormal() const { return !isDenormal() && isFiniteNonZero(); } /// Returns true if and only if the current value is zero, subnormal, or /// normal. /// /// This means that the value is not infinite or NaN. bool isFinite() const { return !isNaN() && !isInfinity(); } /// Returns true if and only if the float is plus or minus zero. bool isZero() const { return category == fcZero; } /// IEEE-754R isSubnormal(): Returns true if and only if the float is a /// denormal. bool isDenormal() const; /// IEEE-754R isInfinite(): Returns true if and only if the float is infinity. bool isInfinity() const { return category == fcInfinity; } /// Returns true if and only if the float is a quiet or signaling NaN. bool isNaN() const { return category == fcNaN; } /// Returns true if and only if the float is a signaling NaN. bool isSignaling() const; /// @} /// \name Simple Queries /// @{ fltCategory getCategory() const { return category; } const fltSemantics &getSemantics() const { return *semantics; } bool isNonZero() const { return category != fcZero; } bool isFiniteNonZero() const { return isFinite() && !isZero(); } bool isPosZero() const { return isZero() && !isNegative(); } bool isNegZero() const { return isZero() && isNegative(); } /// Returns true if and only if the number has the smallest possible non-zero /// magnitude in the current semantics. bool isSmallest() const; /// Returns true if and only if the number has the largest possible finite /// magnitude in the current semantics. bool isLargest() const; /// Returns true if and only if the number is an exact integer. bool isInteger() const; /// @} IEEEFloat &operator=(const IEEEFloat &); IEEEFloat &operator=(IEEEFloat &&); /// Overload to compute a hash code for an APFloat value. /// /// Note that the use of hash codes for floating point values is in general /// frought with peril. Equality is hard to define for these values. For /// example, should negative and positive zero hash to different codes? Are /// they equal or not? This hash value implementation specifically /// emphasizes producing different codes for different inputs in order to /// be used in canonicalization and memoization. As such, equality is /// bitwiseIsEqual, and 0 != -0. friend hash_code hash_value(const IEEEFloat &Arg); /// Converts this value into a decimal string. /// /// \param FormatPrecision The maximum number of digits of /// precision to output. If there are fewer digits available, /// zero padding will not be used unless the value is /// integral and small enough to be expressed in /// FormatPrecision digits. 0 means to use the natural /// precision of the number. /// \param FormatMaxPadding The maximum number of zeros to /// consider inserting before falling back to scientific /// notation. 0 means to always use scientific notation. /// /// \param TruncateZero Indicate whether to remove the trailing zero in /// fraction part or not. Also setting this parameter to false forcing /// producing of output more similar to default printf behavior. /// Specifically the lower e is used as exponent delimiter and exponent /// always contains no less than two digits. /// /// Number Precision MaxPadding Result /// ------ --------- ---------- ------ /// 1.01E+4 5 2 10100 /// 1.01E+4 4 2 1.01E+4 /// 1.01E+4 5 1 1.01E+4 /// 1.01E-2 5 2 0.0101 /// 1.01E-2 4 2 0.0101 /// 1.01E-2 4 1 1.01E-2 void toString(SmallVectorImpl &Str, unsigned FormatPrecision = 0, unsigned FormatMaxPadding = 3, bool TruncateZero = true) const; /// If this value has an exact multiplicative inverse, store it in inv and /// return true. bool getExactInverse(APFloat *inv) const; /// Returns the exponent of the internal representation of the APFloat. /// /// Because the radix of APFloat is 2, this is equivalent to floor(log2(x)). /// For special APFloat values, this returns special error codes: /// /// NaN -> \c IEK_NaN /// 0 -> \c IEK_Zero /// Inf -> \c IEK_Inf /// friend int ilogb(const IEEEFloat &Arg); /// Returns: X * 2^Exp for integral exponents. friend IEEEFloat scalbn(IEEEFloat X, int Exp, roundingMode); friend IEEEFloat frexp(const IEEEFloat &X, int &Exp, roundingMode); /// \name Special value setters. /// @{ void makeLargest(bool Neg = false); void makeSmallest(bool Neg = false); void makeNaN(bool SNaN = false, bool Neg = false, const APInt *fill = nullptr); void makeInf(bool Neg = false); void makeZero(bool Neg = false); void makeQuiet(); /// Returns the smallest (by magnitude) normalized finite number in the given /// semantics. /// /// \param Negative - True iff the number should be negative void makeSmallestNormalized(bool Negative = false); /// @} cmpResult compareAbsoluteValue(const IEEEFloat &) const; private: /// \name Simple Queries /// @{ integerPart *significandParts(); const integerPart *significandParts() const; unsigned int partCount() const; /// @} /// \name Significand operations. /// @{ integerPart addSignificand(const IEEEFloat &); integerPart subtractSignificand(const IEEEFloat &, integerPart); lostFraction addOrSubtractSignificand(const IEEEFloat &, bool subtract); lostFraction multiplySignificand(const IEEEFloat &, const IEEEFloat *); lostFraction divideSignificand(const IEEEFloat &); void incrementSignificand(); void initialize(const fltSemantics *); void shiftSignificandLeft(unsigned int); lostFraction shiftSignificandRight(unsigned int); unsigned int significandLSB() const; unsigned int significandMSB() const; void zeroSignificand(); /// Return true if the significand excluding the integral bit is all ones. bool isSignificandAllOnes() const; /// Return true if the significand excluding the integral bit is all zeros. bool isSignificandAllZeros() const; /// @} /// \name Arithmetic on special values. /// @{ opStatus addOrSubtractSpecials(const IEEEFloat &, bool subtract); opStatus divideSpecials(const IEEEFloat &); opStatus multiplySpecials(const IEEEFloat &); opStatus modSpecials(const IEEEFloat &); /// @} /// \name Miscellany /// @{ bool convertFromStringSpecials(StringRef str); opStatus normalize(roundingMode, lostFraction); opStatus addOrSubtract(const IEEEFloat &, roundingMode, bool subtract); opStatus handleOverflow(roundingMode); bool roundAwayFromZero(roundingMode, lostFraction, unsigned int) const; opStatus convertToSignExtendedInteger(MutableArrayRef, unsigned int, bool, roundingMode, bool *) const; opStatus convertFromUnsignedParts(const integerPart *, unsigned int, roundingMode); opStatus convertFromHexadecimalString(StringRef, roundingMode); opStatus convertFromDecimalString(StringRef, roundingMode); char *convertNormalToHexString(char *, unsigned int, bool, roundingMode) const; opStatus roundSignificandWithExponent(const integerPart *, unsigned int, int, roundingMode); /// @} APInt convertHalfAPFloatToAPInt() const; APInt convertFloatAPFloatToAPInt() const; APInt convertDoubleAPFloatToAPInt() const; APInt convertQuadrupleAPFloatToAPInt() const; APInt convertF80LongDoubleAPFloatToAPInt() const; APInt convertPPCDoubleDoubleAPFloatToAPInt() const; void initFromAPInt(const fltSemantics *Sem, const APInt &api); void initFromHalfAPInt(const APInt &api); void initFromFloatAPInt(const APInt &api); void initFromDoubleAPInt(const APInt &api); void initFromQuadrupleAPInt(const APInt &api); void initFromF80LongDoubleAPInt(const APInt &api); void initFromPPCDoubleDoubleAPInt(const APInt &api); void assign(const IEEEFloat &); void copySignificand(const IEEEFloat &); void freeSignificand(); /// Note: this must be the first data member. /// The semantics that this value obeys. const fltSemantics *semantics; /// A binary fraction with an explicit integer bit. /// /// The significand must be at least one bit wider than the target precision. union Significand { integerPart part; integerPart *parts; } significand; /// The signed unbiased exponent of the value. ExponentType exponent; /// What kind of floating point number this is. /// /// Only 2 bits are required, but VisualStudio incorrectly sign extends it. /// Using the extra bit keeps it from failing under VisualStudio. fltCategory category : 3; /// Sign bit of the number. unsigned int sign : 1; }; hash_code hash_value(const IEEEFloat &Arg); int ilogb(const IEEEFloat &Arg); IEEEFloat scalbn(IEEEFloat X, int Exp, IEEEFloat::roundingMode); IEEEFloat frexp(const IEEEFloat &Val, int &Exp, IEEEFloat::roundingMode RM); // This mode implements more precise float in terms of two APFloats. // The interface and layout is designed for arbitray underlying semantics, // though currently only PPCDoubleDouble semantics are supported, whose // corresponding underlying semantics are IEEEdouble. class DoubleAPFloat final : public APFloatBase { // Note: this must be the first data member. const fltSemantics *Semantics; std::unique_ptr Floats; opStatus addImpl(const APFloat &a, const APFloat &aa, const APFloat &c, const APFloat &cc, roundingMode RM); opStatus addWithSpecial(const DoubleAPFloat &LHS, const DoubleAPFloat &RHS, DoubleAPFloat &Out, roundingMode RM); public: DoubleAPFloat(const fltSemantics &S); DoubleAPFloat(const fltSemantics &S, uninitializedTag); DoubleAPFloat(const fltSemantics &S, integerPart); DoubleAPFloat(const fltSemantics &S, const APInt &I); DoubleAPFloat(const fltSemantics &S, APFloat &&First, APFloat &&Second); DoubleAPFloat(const DoubleAPFloat &RHS); DoubleAPFloat(DoubleAPFloat &&RHS); DoubleAPFloat &operator=(const DoubleAPFloat &RHS); DoubleAPFloat &operator=(DoubleAPFloat &&RHS) { if (this != &RHS) { this->~DoubleAPFloat(); new (this) DoubleAPFloat(std::move(RHS)); } return *this; } bool needsCleanup() const { return Floats != nullptr; } APFloat &getFirst() { return Floats[0]; } const APFloat &getFirst() const { return Floats[0]; } APFloat &getSecond() { return Floats[1]; } const APFloat &getSecond() const { return Floats[1]; } opStatus add(const DoubleAPFloat &RHS, roundingMode RM); opStatus subtract(const DoubleAPFloat &RHS, roundingMode RM); opStatus multiply(const DoubleAPFloat &RHS, roundingMode RM); opStatus divide(const DoubleAPFloat &RHS, roundingMode RM); opStatus remainder(const DoubleAPFloat &RHS); opStatus mod(const DoubleAPFloat &RHS); opStatus fusedMultiplyAdd(const DoubleAPFloat &Multiplicand, const DoubleAPFloat &Addend, roundingMode RM); opStatus roundToIntegral(roundingMode RM); void changeSign(); cmpResult compareAbsoluteValue(const DoubleAPFloat &RHS) const; fltCategory getCategory() const; bool isNegative() const; void makeInf(bool Neg); void makeZero(bool Neg); void makeLargest(bool Neg); void makeSmallest(bool Neg); void makeSmallestNormalized(bool Neg); void makeNaN(bool SNaN, bool Neg, const APInt *fill); cmpResult compare(const DoubleAPFloat &RHS) const; bool bitwiseIsEqual(const DoubleAPFloat &RHS) const; APInt bitcastToAPInt() const; opStatus convertFromString(StringRef, roundingMode); opStatus next(bool nextDown); opStatus convertToInteger(MutableArrayRef Input, unsigned int Width, bool IsSigned, roundingMode RM, bool *IsExact) const; opStatus convertFromAPInt(const APInt &Input, bool IsSigned, roundingMode RM); opStatus convertFromSignExtendedInteger(const integerPart *Input, unsigned int InputSize, bool IsSigned, roundingMode RM); opStatus convertFromZeroExtendedInteger(const integerPart *Input, unsigned int InputSize, bool IsSigned, roundingMode RM); unsigned int convertToHexString(char *DST, unsigned int HexDigits, bool UpperCase, roundingMode RM) const; bool isDenormal() const; bool isSmallest() const; bool isLargest() const; bool isInteger() const; void toString(SmallVectorImpl &Str, unsigned FormatPrecision, unsigned FormatMaxPadding, bool TruncateZero = true) const; bool getExactInverse(APFloat *inv) const; friend int ilogb(const DoubleAPFloat &Arg); friend DoubleAPFloat scalbn(DoubleAPFloat X, int Exp, roundingMode); friend DoubleAPFloat frexp(const DoubleAPFloat &X, int &Exp, roundingMode); friend hash_code hash_value(const DoubleAPFloat &Arg); }; hash_code hash_value(const DoubleAPFloat &Arg); } // End detail namespace // This is a interface class that is currently forwarding functionalities from // detail::IEEEFloat. class APFloat : public APFloatBase { typedef detail::IEEEFloat IEEEFloat; typedef detail::DoubleAPFloat DoubleAPFloat; static_assert(std::is_standard_layout::value, ""); union Storage { const fltSemantics *semantics; IEEEFloat IEEE; DoubleAPFloat Double; explicit Storage(IEEEFloat F, const fltSemantics &S); explicit Storage(DoubleAPFloat F, const fltSemantics &S) : Double(std::move(F)) { assert(&S == &PPCDoubleDouble()); } template Storage(const fltSemantics &Semantics, ArgTypes &&... Args) { if (usesLayout(Semantics)) { new (&IEEE) IEEEFloat(Semantics, std::forward(Args)...); return; } if (usesLayout(Semantics)) { new (&Double) DoubleAPFloat(Semantics, std::forward(Args)...); return; } llvm_unreachable("Unexpected semantics"); } ~Storage() { if (usesLayout(*semantics)) { IEEE.~IEEEFloat(); return; } if (usesLayout(*semantics)) { Double.~DoubleAPFloat(); return; } llvm_unreachable("Unexpected semantics"); } Storage(const Storage &RHS) { if (usesLayout(*RHS.semantics)) { new (this) IEEEFloat(RHS.IEEE); return; } if (usesLayout(*RHS.semantics)) { new (this) DoubleAPFloat(RHS.Double); return; } llvm_unreachable("Unexpected semantics"); } Storage(Storage &&RHS) { if (usesLayout(*RHS.semantics)) { new (this) IEEEFloat(std::move(RHS.IEEE)); return; } if (usesLayout(*RHS.semantics)) { new (this) DoubleAPFloat(std::move(RHS.Double)); return; } llvm_unreachable("Unexpected semantics"); } Storage &operator=(const Storage &RHS) { if (usesLayout(*semantics) && usesLayout(*RHS.semantics)) { IEEE = RHS.IEEE; } else if (usesLayout(*semantics) && usesLayout(*RHS.semantics)) { Double = RHS.Double; } else if (this != &RHS) { this->~Storage(); new (this) Storage(RHS); } return *this; } Storage &operator=(Storage &&RHS) { if (usesLayout(*semantics) && usesLayout(*RHS.semantics)) { IEEE = std::move(RHS.IEEE); } else if (usesLayout(*semantics) && usesLayout(*RHS.semantics)) { Double = std::move(RHS.Double); } else if (this != &RHS) { this->~Storage(); new (this) Storage(std::move(RHS)); } return *this; } } U; template static bool usesLayout(const fltSemantics &Semantics) { static_assert(std::is_same::value || std::is_same::value, ""); if (std::is_same::value) { return &Semantics == &PPCDoubleDouble(); } return &Semantics != &PPCDoubleDouble(); } IEEEFloat &getIEEE() { if (usesLayout(*U.semantics)) return U.IEEE; if (usesLayout(*U.semantics)) return U.Double.getFirst().U.IEEE; llvm_unreachable("Unexpected semantics"); } const IEEEFloat &getIEEE() const { if (usesLayout(*U.semantics)) return U.IEEE; if (usesLayout(*U.semantics)) return U.Double.getFirst().U.IEEE; llvm_unreachable("Unexpected semantics"); } void makeZero(bool Neg) { APFLOAT_DISPATCH_ON_SEMANTICS(makeZero(Neg)); } void makeInf(bool Neg) { APFLOAT_DISPATCH_ON_SEMANTICS(makeInf(Neg)); } void makeNaN(bool SNaN, bool Neg, const APInt *fill) { APFLOAT_DISPATCH_ON_SEMANTICS(makeNaN(SNaN, Neg, fill)); } void makeLargest(bool Neg) { APFLOAT_DISPATCH_ON_SEMANTICS(makeLargest(Neg)); } void makeSmallest(bool Neg) { APFLOAT_DISPATCH_ON_SEMANTICS(makeSmallest(Neg)); } void makeSmallestNormalized(bool Neg) { APFLOAT_DISPATCH_ON_SEMANTICS(makeSmallestNormalized(Neg)); } // FIXME: This is due to clang 3.3 (or older version) always checks for the // default constructor in an array aggregate initialization, even if no // elements in the array is default initialized. APFloat() : U(IEEEdouble()) { llvm_unreachable("This is a workaround for old clang."); } explicit APFloat(IEEEFloat F, const fltSemantics &S) : U(std::move(F), S) {} explicit APFloat(DoubleAPFloat F, const fltSemantics &S) : U(std::move(F), S) {} cmpResult compareAbsoluteValue(const APFloat &RHS) const { assert(&getSemantics() == &RHS.getSemantics() && "Should only compare APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.compareAbsoluteValue(RHS.U.IEEE); if (usesLayout(getSemantics())) return U.Double.compareAbsoluteValue(RHS.U.Double); llvm_unreachable("Unexpected semantics"); } public: APFloat(const fltSemantics &Semantics) : U(Semantics) {} APFloat(const fltSemantics &Semantics, StringRef S); APFloat(const fltSemantics &Semantics, integerPart I) : U(Semantics, I) {} // TODO: Remove this constructor. This isn't faster than the first one. APFloat(const fltSemantics &Semantics, uninitializedTag) : U(Semantics, uninitialized) {} APFloat(const fltSemantics &Semantics, const APInt &I) : U(Semantics, I) {} explicit APFloat(double d) : U(IEEEFloat(d), IEEEdouble()) {} explicit APFloat(float f) : U(IEEEFloat(f), IEEEsingle()) {} APFloat(const APFloat &RHS) = default; APFloat(APFloat &&RHS) = default; ~APFloat() = default; bool needsCleanup() const { APFLOAT_DISPATCH_ON_SEMANTICS(needsCleanup()); } /// Factory for Positive and Negative Zero. /// /// \param Negative True iff the number should be negative. static APFloat getZero(const fltSemantics &Sem, bool Negative = false) { APFloat Val(Sem, uninitialized); Val.makeZero(Negative); return Val; } /// Factory for Positive and Negative Infinity. /// /// \param Negative True iff the number should be negative. static APFloat getInf(const fltSemantics &Sem, bool Negative = false) { APFloat Val(Sem, uninitialized); Val.makeInf(Negative); return Val; } /// Factory for NaN values. /// /// \param Negative - True iff the NaN generated should be negative. /// \param payload - The unspecified fill bits for creating the NaN, 0 by /// default. The value is truncated as necessary. static APFloat getNaN(const fltSemantics &Sem, bool Negative = false, uint64_t payload = 0) { if (payload) { APInt intPayload(64, payload); return getQNaN(Sem, Negative, &intPayload); } else { return getQNaN(Sem, Negative, nullptr); } } /// Factory for QNaN values. static APFloat getQNaN(const fltSemantics &Sem, bool Negative = false, const APInt *payload = nullptr) { APFloat Val(Sem, uninitialized); Val.makeNaN(false, Negative, payload); return Val; } /// Factory for SNaN values. static APFloat getSNaN(const fltSemantics &Sem, bool Negative = false, const APInt *payload = nullptr) { APFloat Val(Sem, uninitialized); Val.makeNaN(true, Negative, payload); return Val; } /// Returns the largest finite number in the given semantics. /// /// \param Negative - True iff the number should be negative static APFloat getLargest(const fltSemantics &Sem, bool Negative = false) { APFloat Val(Sem, uninitialized); Val.makeLargest(Negative); return Val; } /// Returns the smallest (by magnitude) finite number in the given semantics. /// Might be denormalized, which implies a relative loss of precision. /// /// \param Negative - True iff the number should be negative static APFloat getSmallest(const fltSemantics &Sem, bool Negative = false) { APFloat Val(Sem, uninitialized); Val.makeSmallest(Negative); return Val; } /// Returns the smallest (by magnitude) normalized finite number in the given /// semantics. /// /// \param Negative - True iff the number should be negative static APFloat getSmallestNormalized(const fltSemantics &Sem, bool Negative = false) { APFloat Val(Sem, uninitialized); Val.makeSmallestNormalized(Negative); return Val; } /// Returns a float which is bitcasted from an all one value int. /// /// \param BitWidth - Select float type /// \param isIEEE - If 128 bit number, select between PPC and IEEE static APFloat getAllOnesValue(unsigned BitWidth, bool isIEEE = false); /// Used to insert APFloat objects, or objects that contain APFloat objects, /// into FoldingSets. void Profile(FoldingSetNodeID &NID) const; opStatus add(const APFloat &RHS, roundingMode RM) { assert(&getSemantics() == &RHS.getSemantics() && "Should only call on two APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.add(RHS.U.IEEE, RM); if (usesLayout(getSemantics())) return U.Double.add(RHS.U.Double, RM); llvm_unreachable("Unexpected semantics"); } opStatus subtract(const APFloat &RHS, roundingMode RM) { assert(&getSemantics() == &RHS.getSemantics() && "Should only call on two APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.subtract(RHS.U.IEEE, RM); if (usesLayout(getSemantics())) return U.Double.subtract(RHS.U.Double, RM); llvm_unreachable("Unexpected semantics"); } opStatus multiply(const APFloat &RHS, roundingMode RM) { assert(&getSemantics() == &RHS.getSemantics() && "Should only call on two APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.multiply(RHS.U.IEEE, RM); if (usesLayout(getSemantics())) return U.Double.multiply(RHS.U.Double, RM); llvm_unreachable("Unexpected semantics"); } opStatus divide(const APFloat &RHS, roundingMode RM) { assert(&getSemantics() == &RHS.getSemantics() && "Should only call on two APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.divide(RHS.U.IEEE, RM); if (usesLayout(getSemantics())) return U.Double.divide(RHS.U.Double, RM); llvm_unreachable("Unexpected semantics"); } opStatus remainder(const APFloat &RHS) { assert(&getSemantics() == &RHS.getSemantics() && "Should only call on two APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.remainder(RHS.U.IEEE); if (usesLayout(getSemantics())) return U.Double.remainder(RHS.U.Double); llvm_unreachable("Unexpected semantics"); } opStatus mod(const APFloat &RHS) { assert(&getSemantics() == &RHS.getSemantics() && "Should only call on two APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.mod(RHS.U.IEEE); if (usesLayout(getSemantics())) return U.Double.mod(RHS.U.Double); llvm_unreachable("Unexpected semantics"); } opStatus fusedMultiplyAdd(const APFloat &Multiplicand, const APFloat &Addend, roundingMode RM) { assert(&getSemantics() == &Multiplicand.getSemantics() && "Should only call on APFloats with the same semantics"); assert(&getSemantics() == &Addend.getSemantics() && "Should only call on APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.fusedMultiplyAdd(Multiplicand.U.IEEE, Addend.U.IEEE, RM); if (usesLayout(getSemantics())) return U.Double.fusedMultiplyAdd(Multiplicand.U.Double, Addend.U.Double, RM); llvm_unreachable("Unexpected semantics"); } opStatus roundToIntegral(roundingMode RM) { APFLOAT_DISPATCH_ON_SEMANTICS(roundToIntegral(RM)); } // TODO: bool parameters are not readable and a source of bugs. // Do something. opStatus next(bool nextDown) { APFLOAT_DISPATCH_ON_SEMANTICS(next(nextDown)); } /// Add two APFloats, rounding ties to the nearest even. /// No error checking. APFloat operator+(const APFloat &RHS) const { APFloat Result(*this); (void)Result.add(RHS, rmNearestTiesToEven); return Result; } /// Subtract two APFloats, rounding ties to the nearest even. /// No error checking. APFloat operator-(const APFloat &RHS) const { APFloat Result(*this); (void)Result.subtract(RHS, rmNearestTiesToEven); return Result; } /// Multiply two APFloats, rounding ties to the nearest even. /// No error checking. APFloat operator*(const APFloat &RHS) const { APFloat Result(*this); (void)Result.multiply(RHS, rmNearestTiesToEven); return Result; } /// Divide the first APFloat by the second, rounding ties to the nearest even. /// No error checking. APFloat operator/(const APFloat &RHS) const { APFloat Result(*this); (void)Result.divide(RHS, rmNearestTiesToEven); return Result; } void changeSign() { APFLOAT_DISPATCH_ON_SEMANTICS(changeSign()); } void clearSign() { if (isNegative()) changeSign(); } void copySign(const APFloat &RHS) { if (isNegative() != RHS.isNegative()) changeSign(); } /// A static helper to produce a copy of an APFloat value with its sign /// copied from some other APFloat. static APFloat copySign(APFloat Value, const APFloat &Sign) { Value.copySign(Sign); return Value; } opStatus convert(const fltSemantics &ToSemantics, roundingMode RM, bool *losesInfo); opStatus convertToInteger(MutableArrayRef Input, unsigned int Width, bool IsSigned, roundingMode RM, bool *IsExact) const { APFLOAT_DISPATCH_ON_SEMANTICS( convertToInteger(Input, Width, IsSigned, RM, IsExact)); } opStatus convertToInteger(APSInt &Result, roundingMode RM, bool *IsExact) const; opStatus convertFromAPInt(const APInt &Input, bool IsSigned, roundingMode RM) { APFLOAT_DISPATCH_ON_SEMANTICS(convertFromAPInt(Input, IsSigned, RM)); } opStatus convertFromSignExtendedInteger(const integerPart *Input, unsigned int InputSize, bool IsSigned, roundingMode RM) { APFLOAT_DISPATCH_ON_SEMANTICS( convertFromSignExtendedInteger(Input, InputSize, IsSigned, RM)); } opStatus convertFromZeroExtendedInteger(const integerPart *Input, unsigned int InputSize, bool IsSigned, roundingMode RM) { APFLOAT_DISPATCH_ON_SEMANTICS( convertFromZeroExtendedInteger(Input, InputSize, IsSigned, RM)); } opStatus convertFromString(StringRef, roundingMode); APInt bitcastToAPInt() const { APFLOAT_DISPATCH_ON_SEMANTICS(bitcastToAPInt()); } double convertToDouble() const { return getIEEE().convertToDouble(); } float convertToFloat() const { return getIEEE().convertToFloat(); } bool operator==(const APFloat &) const = delete; cmpResult compare(const APFloat &RHS) const { assert(&getSemantics() == &RHS.getSemantics() && "Should only compare APFloats with the same semantics"); if (usesLayout(getSemantics())) return U.IEEE.compare(RHS.U.IEEE); if (usesLayout(getSemantics())) return U.Double.compare(RHS.U.Double); llvm_unreachable("Unexpected semantics"); } bool bitwiseIsEqual(const APFloat &RHS) const { if (&getSemantics() != &RHS.getSemantics()) return false; if (usesLayout(getSemantics())) return U.IEEE.bitwiseIsEqual(RHS.U.IEEE); if (usesLayout(getSemantics())) return U.Double.bitwiseIsEqual(RHS.U.Double); llvm_unreachable("Unexpected semantics"); } /// We don't rely on operator== working on double values, as /// it returns true for things that are clearly not equal, like -0.0 and 0.0. /// As such, this method can be used to do an exact bit-for-bit comparison of /// two floating point values. /// /// We leave the version with the double argument here because it's just so /// convenient to write "2.0" and the like. Without this function we'd /// have to duplicate its logic everywhere it's called. bool isExactlyValue(double V) const { bool ignored; APFloat Tmp(V); Tmp.convert(getSemantics(), APFloat::rmNearestTiesToEven, &ignored); return bitwiseIsEqual(Tmp); } unsigned int convertToHexString(char *DST, unsigned int HexDigits, bool UpperCase, roundingMode RM) const { APFLOAT_DISPATCH_ON_SEMANTICS( convertToHexString(DST, HexDigits, UpperCase, RM)); } bool isZero() const { return getCategory() == fcZero; } bool isInfinity() const { return getCategory() == fcInfinity; } bool isNaN() const { return getCategory() == fcNaN; } bool isNegative() const { return getIEEE().isNegative(); } bool isDenormal() const { APFLOAT_DISPATCH_ON_SEMANTICS(isDenormal()); } bool isSignaling() const { return getIEEE().isSignaling(); } bool isNormal() const { return !isDenormal() && isFiniteNonZero(); } bool isFinite() const { return !isNaN() && !isInfinity(); } fltCategory getCategory() const { return getIEEE().getCategory(); } const fltSemantics &getSemantics() const { return *U.semantics; } bool isNonZero() const { return !isZero(); } bool isFiniteNonZero() const { return isFinite() && !isZero(); } bool isPosZero() const { return isZero() && !isNegative(); } bool isNegZero() const { return isZero() && isNegative(); } bool isSmallest() const { APFLOAT_DISPATCH_ON_SEMANTICS(isSmallest()); } bool isLargest() const { APFLOAT_DISPATCH_ON_SEMANTICS(isLargest()); } bool isInteger() const { APFLOAT_DISPATCH_ON_SEMANTICS(isInteger()); } APFloat &operator=(const APFloat &RHS) = default; APFloat &operator=(APFloat &&RHS) = default; void toString(SmallVectorImpl &Str, unsigned FormatPrecision = 0, unsigned FormatMaxPadding = 3, bool TruncateZero = true) const { APFLOAT_DISPATCH_ON_SEMANTICS( toString(Str, FormatPrecision, FormatMaxPadding, TruncateZero)); } void print(raw_ostream &) const; void dump() const; bool getExactInverse(APFloat *inv) const { APFLOAT_DISPATCH_ON_SEMANTICS(getExactInverse(inv)); } friend hash_code hash_value(const APFloat &Arg); friend int ilogb(const APFloat &Arg) { return ilogb(Arg.getIEEE()); } friend APFloat scalbn(APFloat X, int Exp, roundingMode RM); friend APFloat frexp(const APFloat &X, int &Exp, roundingMode RM); friend IEEEFloat; friend DoubleAPFloat; }; /// See friend declarations above. /// /// These additional declarations are required in order to compile LLVM with IBM /// xlC compiler. hash_code hash_value(const APFloat &Arg); inline APFloat scalbn(APFloat X, int Exp, APFloat::roundingMode RM) { if (APFloat::usesLayout(X.getSemantics())) return APFloat(scalbn(X.U.IEEE, Exp, RM), X.getSemantics()); if (APFloat::usesLayout(X.getSemantics())) return APFloat(scalbn(X.U.Double, Exp, RM), X.getSemantics()); llvm_unreachable("Unexpected semantics"); } /// Equivalent of C standard library function. /// /// While the C standard says Exp is an unspecified value for infinity and nan, /// this returns INT_MAX for infinities, and INT_MIN for NaNs. inline APFloat frexp(const APFloat &X, int &Exp, APFloat::roundingMode RM) { if (APFloat::usesLayout(X.getSemantics())) return APFloat(frexp(X.U.IEEE, Exp, RM), X.getSemantics()); if (APFloat::usesLayout(X.getSemantics())) return APFloat(frexp(X.U.Double, Exp, RM), X.getSemantics()); llvm_unreachable("Unexpected semantics"); } /// Returns the absolute value of the argument. inline APFloat abs(APFloat X) { X.clearSign(); return X; } /// Returns the negated value of the argument. inline APFloat neg(APFloat X) { X.changeSign(); return X; } /// Implements IEEE minNum semantics. Returns the smaller of the 2 arguments if /// both are not NaN. If either argument is a NaN, returns the other argument. LLVM_READONLY inline APFloat minnum(const APFloat &A, const APFloat &B) { if (A.isNaN()) return B; if (B.isNaN()) return A; return (B.compare(A) == APFloat::cmpLessThan) ? B : A; } /// Implements IEEE maxNum semantics. Returns the larger of the 2 arguments if /// both are not NaN. If either argument is a NaN, returns the other argument. LLVM_READONLY inline APFloat maxnum(const APFloat &A, const APFloat &B) { if (A.isNaN()) return B; if (B.isNaN()) return A; return (A.compare(B) == APFloat::cmpLessThan) ? B : A; } /// Implements IEEE 754-2018 minimum semantics. Returns the smaller of 2 /// arguments, propagating NaNs and treating -0 as less than +0. LLVM_READONLY inline APFloat minimum(const APFloat &A, const APFloat &B) { if (A.isNaN()) return A; if (B.isNaN()) return B; if (A.isZero() && B.isZero() && (A.isNegative() != B.isNegative())) return A.isNegative() ? A : B; return (B.compare(A) == APFloat::cmpLessThan) ? B : A; } /// Implements IEEE 754-2018 maximum semantics. Returns the larger of 2 /// arguments, propagating NaNs and treating -0 as less than +0. LLVM_READONLY inline APFloat maximum(const APFloat &A, const APFloat &B) { if (A.isNaN()) return A; if (B.isNaN()) return B; if (A.isZero() && B.isZero() && (A.isNegative() != B.isNegative())) return A.isNegative() ? B : A; return (A.compare(B) == APFloat::cmpLessThan) ? B : A; } } // namespace llvm #undef APFLOAT_DISPATCH_ON_SEMANTICS #endif // LLVM_ADT_APFLOAT_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/APInt.h000066400000000000000000002222441423707623100260530ustar00rootroot00000000000000//===-- llvm/ADT/APInt.h - For Arbitrary Precision Integer -----*- C++ -*--===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file implements a class to represent arbitrary precision /// integral constant values and operations on them. /// //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_APINT_H #define LLVM_ADT_APINT_H #include "llvm/Support/Compiler.h" #include "llvm/Support/MathExtras.h" #include #include #include #include namespace llvm { class FoldingSetNodeID; class StringRef; class hash_code; class raw_ostream; template class SmallVectorImpl; template class ArrayRef; template class Optional; class APInt; inline APInt operator-(APInt); //===----------------------------------------------------------------------===// // APInt Class //===----------------------------------------------------------------------===// /// Class for arbitrary precision integers. /// /// APInt is a functional replacement for common case unsigned integer type like /// "unsigned", "unsigned long" or "uint64_t", but also allows non-byte-width /// integer sizes and large integer value types such as 3-bits, 15-bits, or more /// than 64-bits of precision. APInt provides a variety of arithmetic operators /// and methods to manipulate integer values of any bit-width. It supports both /// the typical integer arithmetic and comparison operations as well as bitwise /// manipulation. /// /// The class has several invariants worth noting: /// * All bit, byte, and word positions are zero-based. /// * Once the bit width is set, it doesn't change except by the Truncate, /// SignExtend, or ZeroExtend operations. /// * All binary operators must be on APInt instances of the same bit width. /// Attempting to use these operators on instances with different bit /// widths will yield an assertion. /// * The value is stored canonically as an unsigned value. For operations /// where it makes a difference, there are both signed and unsigned variants /// of the operation. For example, sdiv and udiv. However, because the bit /// widths must be the same, operations such as Mul and Add produce the same /// results regardless of whether the values are interpreted as signed or /// not. /// * In general, the class tries to follow the style of computation that LLVM /// uses in its IR. This simplifies its use for LLVM. /// class LLVM_NODISCARD APInt { public: typedef uint64_t WordType; /// This enum is used to hold the constants we needed for APInt. enum : unsigned { /// Byte size of a word. APINT_WORD_SIZE = sizeof(WordType), /// Bits in a word. APINT_BITS_PER_WORD = APINT_WORD_SIZE * CHAR_BIT }; enum class Rounding { DOWN, TOWARD_ZERO, UP, }; static const WordType WORDTYPE_MAX = ~WordType(0); private: /// This union is used to store the integer value. When the /// integer bit-width <= 64, it uses VAL, otherwise it uses pVal. union { uint64_t VAL; ///< Used to store the <= 64 bits integer value. uint64_t *pVal; ///< Used to store the >64 bits integer value. } U; unsigned BitWidth; ///< The number of bits in this APInt. friend struct DenseMapAPIntKeyInfo; friend class APSInt; /// Fast internal constructor /// /// This constructor is used only internally for speed of construction of /// temporaries. It is unsafe for general use so it is not public. APInt(uint64_t *val, unsigned bits) : BitWidth(bits) { U.pVal = val; } /// Determine if this APInt just has one word to store value. /// /// \returns true if the number of bits <= 64, false otherwise. bool isSingleWord() const { return BitWidth <= APINT_BITS_PER_WORD; } /// Determine which word a bit is in. /// /// \returns the word position for the specified bit position. static unsigned whichWord(unsigned bitPosition) { return bitPosition / APINT_BITS_PER_WORD; } /// Determine which bit in a word a bit is in. /// /// \returns the bit position in a word for the specified bit position /// in the APInt. static unsigned whichBit(unsigned bitPosition) { return bitPosition % APINT_BITS_PER_WORD; } /// Get a single bit mask. /// /// \returns a uint64_t with only bit at "whichBit(bitPosition)" set /// This method generates and returns a uint64_t (word) mask for a single /// bit at a specific bit position. This is used to mask the bit in the /// corresponding word. static uint64_t maskBit(unsigned bitPosition) { return 1ULL << whichBit(bitPosition); } /// Clear unused high order bits /// /// This method is used internally to clear the top "N" bits in the high order /// word that are not used by the APInt. This is needed after the most /// significant word is assigned a value to ensure that those bits are /// zero'd out. APInt &clearUnusedBits() { // Compute how many bits are used in the final word unsigned WordBits = ((BitWidth-1) % APINT_BITS_PER_WORD) + 1; // Mask out the high bits. uint64_t mask = WORDTYPE_MAX >> (APINT_BITS_PER_WORD - WordBits); if (isSingleWord()) U.VAL &= mask; else U.pVal[getNumWords() - 1] &= mask; return *this; } /// Get the word corresponding to a bit position /// \returns the corresponding word for the specified bit position. uint64_t getWord(unsigned bitPosition) const { return isSingleWord() ? U.VAL : U.pVal[whichWord(bitPosition)]; } /// Utility method to change the bit width of this APInt to new bit width, /// allocating and/or deallocating as necessary. There is no guarantee on the /// value of any bits upon return. Caller should populate the bits after. void reallocate(unsigned NewBitWidth); /// Convert a char array into an APInt /// /// \param radix 2, 8, 10, 16, or 36 /// Converts a string into a number. The string must be non-empty /// and well-formed as a number of the given base. The bit-width /// must be sufficient to hold the result. /// /// This is used by the constructors that take string arguments. /// /// StringRef::getAsInteger is superficially similar but (1) does /// not assume that the string is well-formed and (2) grows the /// result to hold the input. void fromString(unsigned numBits, StringRef str, uint8_t radix); /// An internal division function for dividing APInts. /// /// This is used by the toString method to divide by the radix. It simply /// provides a more convenient form of divide for internal use since KnuthDiv /// has specific constraints on its inputs. If those constraints are not met /// then it provides a simpler form of divide. static void divide(const WordType *LHS, unsigned lhsWords, const WordType *RHS, unsigned rhsWords, WordType *Quotient, WordType *Remainder); /// out-of-line slow case for inline constructor void initSlowCase(uint64_t val, bool isSigned); /// shared code between two array constructors void initFromArray(ArrayRef array); /// out-of-line slow case for inline copy constructor void initSlowCase(const APInt &that); /// out-of-line slow case for shl void shlSlowCase(unsigned ShiftAmt); /// out-of-line slow case for lshr. void lshrSlowCase(unsigned ShiftAmt); /// out-of-line slow case for ashr. void ashrSlowCase(unsigned ShiftAmt); /// out-of-line slow case for operator= void AssignSlowCase(const APInt &RHS); /// out-of-line slow case for operator== bool EqualSlowCase(const APInt &RHS) const LLVM_READONLY; /// out-of-line slow case for countLeadingZeros unsigned countLeadingZerosSlowCase() const LLVM_READONLY; /// out-of-line slow case for countLeadingOnes. unsigned countLeadingOnesSlowCase() const LLVM_READONLY; /// out-of-line slow case for countTrailingZeros. unsigned countTrailingZerosSlowCase() const LLVM_READONLY; /// out-of-line slow case for countTrailingOnes unsigned countTrailingOnesSlowCase() const LLVM_READONLY; /// out-of-line slow case for countPopulation unsigned countPopulationSlowCase() const LLVM_READONLY; /// out-of-line slow case for intersects. bool intersectsSlowCase(const APInt &RHS) const LLVM_READONLY; /// out-of-line slow case for isSubsetOf. bool isSubsetOfSlowCase(const APInt &RHS) const LLVM_READONLY; /// out-of-line slow case for setBits. void setBitsSlowCase(unsigned loBit, unsigned hiBit); /// out-of-line slow case for flipAllBits. void flipAllBitsSlowCase(); /// out-of-line slow case for operator&=. void AndAssignSlowCase(const APInt& RHS); /// out-of-line slow case for operator|=. void OrAssignSlowCase(const APInt& RHS); /// out-of-line slow case for operator^=. void XorAssignSlowCase(const APInt& RHS); /// Unsigned comparison. Returns -1, 0, or 1 if this APInt is less than, equal /// to, or greater than RHS. int compare(const APInt &RHS) const LLVM_READONLY; /// Signed comparison. Returns -1, 0, or 1 if this APInt is less than, equal /// to, or greater than RHS. int compareSigned(const APInt &RHS) const LLVM_READONLY; public: /// \name Constructors /// @{ /// Create a new APInt of numBits width, initialized as val. /// /// If isSigned is true then val is treated as if it were a signed value /// (i.e. as an int64_t) and the appropriate sign extension to the bit width /// will be done. Otherwise, no sign extension occurs (high order bits beyond /// the range of val are zero filled). /// /// \param numBits the bit width of the constructed APInt /// \param val the initial value of the APInt /// \param isSigned how to treat signedness of val APInt(unsigned numBits, uint64_t val, bool isSigned = false) : BitWidth(numBits) { assert(BitWidth && "bitwidth too small"); if (isSingleWord()) { U.VAL = val; clearUnusedBits(); } else { initSlowCase(val, isSigned); } } /// Construct an APInt of numBits width, initialized as bigVal[]. /// /// Note that bigVal.size() can be smaller or larger than the corresponding /// bit width but any extraneous bits will be dropped. /// /// \param numBits the bit width of the constructed APInt /// \param bigVal a sequence of words to form the initial value of the APInt APInt(unsigned numBits, ArrayRef bigVal); /// Equivalent to APInt(numBits, ArrayRef(bigVal, numWords)), but /// deprecated because this constructor is prone to ambiguity with the /// APInt(unsigned, uint64_t, bool) constructor. /// /// If this overload is ever deleted, care should be taken to prevent calls /// from being incorrectly captured by the APInt(unsigned, uint64_t, bool) /// constructor. APInt(unsigned numBits, unsigned numWords, const uint64_t bigVal[]); /// Construct an APInt from a string representation. /// /// This constructor interprets the string \p str in the given radix. The /// interpretation stops when the first character that is not suitable for the /// radix is encountered, or the end of the string. Acceptable radix values /// are 2, 8, 10, 16, and 36. It is an error for the value implied by the /// string to require more bits than numBits. /// /// \param numBits the bit width of the constructed APInt /// \param str the string to be interpreted /// \param radix the radix to use for the conversion APInt(unsigned numBits, StringRef str, uint8_t radix); /// Simply makes *this a copy of that. /// Copy Constructor. APInt(const APInt &that) : BitWidth(that.BitWidth) { if (isSingleWord()) U.VAL = that.U.VAL; else initSlowCase(that); } /// Move Constructor. APInt(APInt &&that) : BitWidth(that.BitWidth) { memcpy(&U, &that.U, sizeof(U)); that.BitWidth = 0; } /// Destructor. ~APInt() { if (needsCleanup()) delete[] U.pVal; } /// Default constructor that creates an uninteresting APInt /// representing a 1-bit zero value. /// /// This is useful for object deserialization (pair this with the static /// method Read). explicit APInt() : BitWidth(1) { U.VAL = 0; } /// Returns whether this instance allocated memory. bool needsCleanup() const { return !isSingleWord(); } /// Used to insert APInt objects, or objects that contain APInt objects, into /// FoldingSets. void Profile(FoldingSetNodeID &id) const; /// @} /// \name Value Tests /// @{ /// Determine sign of this APInt. /// /// This tests the high bit of this APInt to determine if it is set. /// /// \returns true if this APInt is negative, false otherwise bool isNegative() const { return (*this)[BitWidth - 1]; } /// Determine if this APInt Value is non-negative (>= 0) /// /// This tests the high bit of the APInt to determine if it is unset. bool isNonNegative() const { return !isNegative(); } /// Determine if sign bit of this APInt is set. /// /// This tests the high bit of this APInt to determine if it is set. /// /// \returns true if this APInt has its sign bit set, false otherwise. bool isSignBitSet() const { return (*this)[BitWidth-1]; } /// Determine if sign bit of this APInt is clear. /// /// This tests the high bit of this APInt to determine if it is clear. /// /// \returns true if this APInt has its sign bit clear, false otherwise. bool isSignBitClear() const { return !isSignBitSet(); } /// Determine if this APInt Value is positive. /// /// This tests if the value of this APInt is positive (> 0). Note /// that 0 is not a positive value. /// /// \returns true if this APInt is positive. bool isStrictlyPositive() const { return isNonNegative() && !isNullValue(); } /// Determine if all bits are set /// /// This checks to see if the value has all bits of the APInt are set or not. bool isAllOnesValue() const { if (isSingleWord()) return U.VAL == WORDTYPE_MAX >> (APINT_BITS_PER_WORD - BitWidth); return countTrailingOnesSlowCase() == BitWidth; } /// Determine if all bits are clear /// /// This checks to see if the value has all bits of the APInt are clear or /// not. bool isNullValue() const { return !*this; } /// Determine if this is a value of 1. /// /// This checks to see if the value of this APInt is one. bool isOneValue() const { if (isSingleWord()) return U.VAL == 1; return countLeadingZerosSlowCase() == BitWidth - 1; } /// Determine if this is the largest unsigned value. /// /// This checks to see if the value of this APInt is the maximum unsigned /// value for the APInt's bit width. bool isMaxValue() const { return isAllOnesValue(); } /// Determine if this is the largest signed value. /// /// This checks to see if the value of this APInt is the maximum signed /// value for the APInt's bit width. bool isMaxSignedValue() const { if (isSingleWord()) return U.VAL == ((WordType(1) << (BitWidth - 1)) - 1); return !isNegative() && countTrailingOnesSlowCase() == BitWidth - 1; } /// Determine if this is the smallest unsigned value. /// /// This checks to see if the value of this APInt is the minimum unsigned /// value for the APInt's bit width. bool isMinValue() const { return isNullValue(); } /// Determine if this is the smallest signed value. /// /// This checks to see if the value of this APInt is the minimum signed /// value for the APInt's bit width. bool isMinSignedValue() const { if (isSingleWord()) return U.VAL == (WordType(1) << (BitWidth - 1)); return isNegative() && countTrailingZerosSlowCase() == BitWidth - 1; } /// Check if this APInt has an N-bits unsigned integer value. bool isIntN(unsigned N) const { assert(N && "N == 0 ???"); return getActiveBits() <= N; } /// Check if this APInt has an N-bits signed integer value. bool isSignedIntN(unsigned N) const { assert(N && "N == 0 ???"); return getMinSignedBits() <= N; } /// Check if this APInt's value is a power of two greater than zero. /// /// \returns true if the argument APInt value is a power of two > 0. bool isPowerOf2() const { if (isSingleWord()) return isPowerOf2_64(U.VAL); return countPopulationSlowCase() == 1; } /// Check if the APInt's value is returned by getSignMask. /// /// \returns true if this is the value returned by getSignMask. bool isSignMask() const { return isMinSignedValue(); } /// Convert APInt to a boolean value. /// /// This converts the APInt to a boolean value as a test against zero. bool getBoolValue() const { return !!*this; } /// If this value is smaller than the specified limit, return it, otherwise /// return the limit value. This causes the value to saturate to the limit. uint64_t getLimitedValue(uint64_t Limit = UINT64_MAX) const { return ugt(Limit) ? Limit : getZExtValue(); } /// Check if the APInt consists of a repeated bit pattern. /// /// e.g. 0x01010101 satisfies isSplat(8). /// \param SplatSizeInBits The size of the pattern in bits. Must divide bit /// width without remainder. bool isSplat(unsigned SplatSizeInBits) const; /// \returns true if this APInt value is a sequence of \param numBits ones /// starting at the least significant bit with the remainder zero. bool isMask(unsigned numBits) const { assert(numBits != 0 && "numBits must be non-zero"); assert(numBits <= BitWidth && "numBits out of range"); if (isSingleWord()) return U.VAL == (WORDTYPE_MAX >> (APINT_BITS_PER_WORD - numBits)); unsigned Ones = countTrailingOnesSlowCase(); return (numBits == Ones) && ((Ones + countLeadingZerosSlowCase()) == BitWidth); } /// \returns true if this APInt is a non-empty sequence of ones starting at /// the least significant bit with the remainder zero. /// Ex. isMask(0x0000FFFFU) == true. bool isMask() const { if (isSingleWord()) return isMask_64(U.VAL); unsigned Ones = countTrailingOnesSlowCase(); return (Ones > 0) && ((Ones + countLeadingZerosSlowCase()) == BitWidth); } /// Return true if this APInt value contains a sequence of ones with /// the remainder zero. bool isShiftedMask() const { if (isSingleWord()) return isShiftedMask_64(U.VAL); unsigned Ones = countPopulationSlowCase(); unsigned LeadZ = countLeadingZerosSlowCase(); return (Ones + LeadZ + countTrailingZeros()) == BitWidth; } /// @} /// \name Value Generators /// @{ /// Gets maximum unsigned value of APInt for specific bit width. static APInt getMaxValue(unsigned numBits) { return getAllOnesValue(numBits); } /// Gets maximum signed value of APInt for a specific bit width. static APInt getSignedMaxValue(unsigned numBits) { APInt API = getAllOnesValue(numBits); API.clearBit(numBits - 1); return API; } /// Gets minimum unsigned value of APInt for a specific bit width. static APInt getMinValue(unsigned numBits) { return APInt(numBits, 0); } /// Gets minimum signed value of APInt for a specific bit width. static APInt getSignedMinValue(unsigned numBits) { APInt API(numBits, 0); API.setBit(numBits - 1); return API; } /// Get the SignMask for a specific bit width. /// /// This is just a wrapper function of getSignedMinValue(), and it helps code /// readability when we want to get a SignMask. static APInt getSignMask(unsigned BitWidth) { return getSignedMinValue(BitWidth); } /// Get the all-ones value. /// /// \returns the all-ones value for an APInt of the specified bit-width. static APInt getAllOnesValue(unsigned numBits) { return APInt(numBits, WORDTYPE_MAX, true); } /// Get the '0' value. /// /// \returns the '0' value for an APInt of the specified bit-width. static APInt getNullValue(unsigned numBits) { return APInt(numBits, 0); } /// Compute an APInt containing numBits highbits from this APInt. /// /// Get an APInt with the same BitWidth as this APInt, just zero mask /// the low bits and right shift to the least significant bit. /// /// \returns the high "numBits" bits of this APInt. APInt getHiBits(unsigned numBits) const; /// Compute an APInt containing numBits lowbits from this APInt. /// /// Get an APInt with the same BitWidth as this APInt, just zero mask /// the high bits. /// /// \returns the low "numBits" bits of this APInt. APInt getLoBits(unsigned numBits) const; /// Return an APInt with exactly one bit set in the result. static APInt getOneBitSet(unsigned numBits, unsigned BitNo) { APInt Res(numBits, 0); Res.setBit(BitNo); return Res; } /// Get a value with a block of bits set. /// /// Constructs an APInt value that has a contiguous range of bits set. The /// bits from loBit (inclusive) to hiBit (exclusive) will be set. All other /// bits will be zero. For example, with parameters(32, 0, 16) you would get /// 0x0000FFFF. If hiBit is less than loBit then the set bits "wrap". For /// example, with parameters (32, 28, 4), you would get 0xF000000F. /// /// \param numBits the intended bit width of the result /// \param loBit the index of the lowest bit set. /// \param hiBit the index of the highest bit set. /// /// \returns An APInt value with the requested bits set. static APInt getBitsSet(unsigned numBits, unsigned loBit, unsigned hiBit) { APInt Res(numBits, 0); Res.setBits(loBit, hiBit); return Res; } /// Get a value with upper bits starting at loBit set. /// /// Constructs an APInt value that has a contiguous range of bits set. The /// bits from loBit (inclusive) to numBits (exclusive) will be set. All other /// bits will be zero. For example, with parameters(32, 12) you would get /// 0xFFFFF000. /// /// \param numBits the intended bit width of the result /// \param loBit the index of the lowest bit to set. /// /// \returns An APInt value with the requested bits set. static APInt getBitsSetFrom(unsigned numBits, unsigned loBit) { APInt Res(numBits, 0); Res.setBitsFrom(loBit); return Res; } /// Get a value with high bits set /// /// Constructs an APInt value that has the top hiBitsSet bits set. /// /// \param numBits the bitwidth of the result /// \param hiBitsSet the number of high-order bits set in the result. static APInt getHighBitsSet(unsigned numBits, unsigned hiBitsSet) { APInt Res(numBits, 0); Res.setHighBits(hiBitsSet); return Res; } /// Get a value with low bits set /// /// Constructs an APInt value that has the bottom loBitsSet bits set. /// /// \param numBits the bitwidth of the result /// \param loBitsSet the number of low-order bits set in the result. static APInt getLowBitsSet(unsigned numBits, unsigned loBitsSet) { APInt Res(numBits, 0); Res.setLowBits(loBitsSet); return Res; } /// Return a value containing V broadcasted over NewLen bits. static APInt getSplat(unsigned NewLen, const APInt &V); /// Determine if two APInts have the same value, after zero-extending /// one of them (if needed!) to ensure that the bit-widths match. static bool isSameValue(const APInt &I1, const APInt &I2) { if (I1.getBitWidth() == I2.getBitWidth()) return I1 == I2; if (I1.getBitWidth() > I2.getBitWidth()) return I1 == I2.zext(I1.getBitWidth()); return I1.zext(I2.getBitWidth()) == I2; } /// Overload to compute a hash_code for an APInt value. friend hash_code hash_value(const APInt &Arg); /// This function returns a pointer to the internal storage of the APInt. /// This is useful for writing out the APInt in binary form without any /// conversions. const uint64_t *getRawData() const { if (isSingleWord()) return &U.VAL; return &U.pVal[0]; } /// @} /// \name Unary Operators /// @{ /// Postfix increment operator. /// /// Increments *this by 1. /// /// \returns a new APInt value representing the original value of *this. const APInt operator++(int) { APInt API(*this); ++(*this); return API; } /// Prefix increment operator. /// /// \returns *this incremented by one APInt &operator++(); /// Postfix decrement operator. /// /// Decrements *this by 1. /// /// \returns a new APInt value representing the original value of *this. const APInt operator--(int) { APInt API(*this); --(*this); return API; } /// Prefix decrement operator. /// /// \returns *this decremented by one. APInt &operator--(); /// Logical negation operator. /// /// Performs logical negation operation on this APInt. /// /// \returns true if *this is zero, false otherwise. bool operator!() const { if (isSingleWord()) return U.VAL == 0; return countLeadingZerosSlowCase() == BitWidth; } /// @} /// \name Assignment Operators /// @{ /// Copy assignment operator. /// /// \returns *this after assignment of RHS. APInt &operator=(const APInt &RHS) { // If the bitwidths are the same, we can avoid mucking with memory if (isSingleWord() && RHS.isSingleWord()) { U.VAL = RHS.U.VAL; BitWidth = RHS.BitWidth; return clearUnusedBits(); } AssignSlowCase(RHS); return *this; } /// Move assignment operator. APInt &operator=(APInt &&that) { #ifdef _MSC_VER // The MSVC std::shuffle implementation still does self-assignment. if (this == &that) return *this; #endif assert(this != &that && "Self-move not supported"); if (!isSingleWord()) delete[] U.pVal; // Use memcpy so that type based alias analysis sees both VAL and pVal // as modified. memcpy(&U, &that.U, sizeof(U)); BitWidth = that.BitWidth; that.BitWidth = 0; return *this; } /// Assignment operator. /// /// The RHS value is assigned to *this. If the significant bits in RHS exceed /// the bit width, the excess bits are truncated. If the bit width is larger /// than 64, the value is zero filled in the unspecified high order bits. /// /// \returns *this after assignment of RHS value. APInt &operator=(uint64_t RHS) { if (isSingleWord()) { U.VAL = RHS; clearUnusedBits(); } else { U.pVal[0] = RHS; memset(U.pVal+1, 0, (getNumWords() - 1) * APINT_WORD_SIZE); } return *this; } /// Bitwise AND assignment operator. /// /// Performs a bitwise AND operation on this APInt and RHS. The result is /// assigned to *this. /// /// \returns *this after ANDing with RHS. APInt &operator&=(const APInt &RHS) { assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); if (isSingleWord()) U.VAL &= RHS.U.VAL; else AndAssignSlowCase(RHS); return *this; } /// Bitwise AND assignment operator. /// /// Performs a bitwise AND operation on this APInt and RHS. RHS is /// logically zero-extended or truncated to match the bit-width of /// the LHS. APInt &operator&=(uint64_t RHS) { if (isSingleWord()) { U.VAL &= RHS; return *this; } U.pVal[0] &= RHS; memset(U.pVal+1, 0, (getNumWords() - 1) * APINT_WORD_SIZE); return *this; } /// Bitwise OR assignment operator. /// /// Performs a bitwise OR operation on this APInt and RHS. The result is /// assigned *this; /// /// \returns *this after ORing with RHS. APInt &operator|=(const APInt &RHS) { assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); if (isSingleWord()) U.VAL |= RHS.U.VAL; else OrAssignSlowCase(RHS); return *this; } /// Bitwise OR assignment operator. /// /// Performs a bitwise OR operation on this APInt and RHS. RHS is /// logically zero-extended or truncated to match the bit-width of /// the LHS. APInt &operator|=(uint64_t RHS) { if (isSingleWord()) { U.VAL |= RHS; clearUnusedBits(); } else { U.pVal[0] |= RHS; } return *this; } /// Bitwise XOR assignment operator. /// /// Performs a bitwise XOR operation on this APInt and RHS. The result is /// assigned to *this. /// /// \returns *this after XORing with RHS. APInt &operator^=(const APInt &RHS) { assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); if (isSingleWord()) U.VAL ^= RHS.U.VAL; else XorAssignSlowCase(RHS); return *this; } /// Bitwise XOR assignment operator. /// /// Performs a bitwise XOR operation on this APInt and RHS. RHS is /// logically zero-extended or truncated to match the bit-width of /// the LHS. APInt &operator^=(uint64_t RHS) { if (isSingleWord()) { U.VAL ^= RHS; clearUnusedBits(); } else { U.pVal[0] ^= RHS; } return *this; } /// Multiplication assignment operator. /// /// Multiplies this APInt by RHS and assigns the result to *this. /// /// \returns *this APInt &operator*=(const APInt &RHS); APInt &operator*=(uint64_t RHS); /// Addition assignment operator. /// /// Adds RHS to *this and assigns the result to *this. /// /// \returns *this APInt &operator+=(const APInt &RHS); APInt &operator+=(uint64_t RHS); /// Subtraction assignment operator. /// /// Subtracts RHS from *this and assigns the result to *this. /// /// \returns *this APInt &operator-=(const APInt &RHS); APInt &operator-=(uint64_t RHS); /// Left-shift assignment function. /// /// Shifts *this left by shiftAmt and assigns the result to *this. /// /// \returns *this after shifting left by ShiftAmt APInt &operator<<=(unsigned ShiftAmt) { assert(ShiftAmt <= BitWidth && "Invalid shift amount"); if (isSingleWord()) { if (ShiftAmt == BitWidth) U.VAL = 0; else U.VAL <<= ShiftAmt; return clearUnusedBits(); } shlSlowCase(ShiftAmt); return *this; } /// Left-shift assignment function. /// /// Shifts *this left by shiftAmt and assigns the result to *this. /// /// \returns *this after shifting left by ShiftAmt APInt &operator<<=(const APInt &ShiftAmt); /// @} /// \name Binary Operators /// @{ /// Multiplication operator. /// /// Multiplies this APInt by RHS and returns the result. APInt operator*(const APInt &RHS) const; /// Left logical shift operator. /// /// Shifts this APInt left by \p Bits and returns the result. APInt operator<<(unsigned Bits) const { return shl(Bits); } /// Left logical shift operator. /// /// Shifts this APInt left by \p Bits and returns the result. APInt operator<<(const APInt &Bits) const { return shl(Bits); } /// Arithmetic right-shift function. /// /// Arithmetic right-shift this APInt by shiftAmt. APInt ashr(unsigned ShiftAmt) const { APInt R(*this); R.ashrInPlace(ShiftAmt); return R; } /// Arithmetic right-shift this APInt by ShiftAmt in place. void ashrInPlace(unsigned ShiftAmt) { assert(ShiftAmt <= BitWidth && "Invalid shift amount"); if (isSingleWord()) { int64_t SExtVAL = SignExtend64(U.VAL, BitWidth); if (ShiftAmt == BitWidth) U.VAL = SExtVAL >> (APINT_BITS_PER_WORD - 1); // Fill with sign bit. else U.VAL = SExtVAL >> ShiftAmt; clearUnusedBits(); return; } ashrSlowCase(ShiftAmt); } /// Logical right-shift function. /// /// Logical right-shift this APInt by shiftAmt. APInt lshr(unsigned shiftAmt) const { APInt R(*this); R.lshrInPlace(shiftAmt); return R; } /// Logical right-shift this APInt by ShiftAmt in place. void lshrInPlace(unsigned ShiftAmt) { assert(ShiftAmt <= BitWidth && "Invalid shift amount"); if (isSingleWord()) { if (ShiftAmt == BitWidth) U.VAL = 0; else U.VAL >>= ShiftAmt; return; } lshrSlowCase(ShiftAmt); } /// Left-shift function. /// /// Left-shift this APInt by shiftAmt. APInt shl(unsigned shiftAmt) const { APInt R(*this); R <<= shiftAmt; return R; } /// Rotate left by rotateAmt. APInt rotl(unsigned rotateAmt) const; /// Rotate right by rotateAmt. APInt rotr(unsigned rotateAmt) const; /// Arithmetic right-shift function. /// /// Arithmetic right-shift this APInt by shiftAmt. APInt ashr(const APInt &ShiftAmt) const { APInt R(*this); R.ashrInPlace(ShiftAmt); return R; } /// Arithmetic right-shift this APInt by shiftAmt in place. void ashrInPlace(const APInt &shiftAmt); /// Logical right-shift function. /// /// Logical right-shift this APInt by shiftAmt. APInt lshr(const APInt &ShiftAmt) const { APInt R(*this); R.lshrInPlace(ShiftAmt); return R; } /// Logical right-shift this APInt by ShiftAmt in place. void lshrInPlace(const APInt &ShiftAmt); /// Left-shift function. /// /// Left-shift this APInt by shiftAmt. APInt shl(const APInt &ShiftAmt) const { APInt R(*this); R <<= ShiftAmt; return R; } /// Rotate left by rotateAmt. APInt rotl(const APInt &rotateAmt) const; /// Rotate right by rotateAmt. APInt rotr(const APInt &rotateAmt) const; /// Unsigned division operation. /// /// Perform an unsigned divide operation on this APInt by RHS. Both this and /// RHS are treated as unsigned quantities for purposes of this division. /// /// \returns a new APInt value containing the division result, rounded towards /// zero. APInt udiv(const APInt &RHS) const; APInt udiv(uint64_t RHS) const; /// Signed division function for APInt. /// /// Signed divide this APInt by APInt RHS. /// /// The result is rounded towards zero. APInt sdiv(const APInt &RHS) const; APInt sdiv(int64_t RHS) const; /// Unsigned remainder operation. /// /// Perform an unsigned remainder operation on this APInt with RHS being the /// divisor. Both this and RHS are treated as unsigned quantities for purposes /// of this operation. Note that this is a true remainder operation and not a /// modulo operation because the sign follows the sign of the dividend which /// is *this. /// /// \returns a new APInt value containing the remainder result APInt urem(const APInt &RHS) const; uint64_t urem(uint64_t RHS) const; /// Function for signed remainder operation. /// /// Signed remainder operation on APInt. APInt srem(const APInt &RHS) const; int64_t srem(int64_t RHS) const; /// Dual division/remainder interface. /// /// Sometimes it is convenient to divide two APInt values and obtain both the /// quotient and remainder. This function does both operations in the same /// computation making it a little more efficient. The pair of input arguments /// may overlap with the pair of output arguments. It is safe to call /// udivrem(X, Y, X, Y), for example. static void udivrem(const APInt &LHS, const APInt &RHS, APInt &Quotient, APInt &Remainder); static void udivrem(const APInt &LHS, uint64_t RHS, APInt &Quotient, uint64_t &Remainder); static void sdivrem(const APInt &LHS, const APInt &RHS, APInt &Quotient, APInt &Remainder); static void sdivrem(const APInt &LHS, int64_t RHS, APInt &Quotient, int64_t &Remainder); // Operations that return overflow indicators. APInt sadd_ov(const APInt &RHS, bool &Overflow) const; APInt uadd_ov(const APInt &RHS, bool &Overflow) const; APInt ssub_ov(const APInt &RHS, bool &Overflow) const; APInt usub_ov(const APInt &RHS, bool &Overflow) const; APInt sdiv_ov(const APInt &RHS, bool &Overflow) const; APInt smul_ov(const APInt &RHS, bool &Overflow) const; APInt umul_ov(const APInt &RHS, bool &Overflow) const; APInt sshl_ov(const APInt &Amt, bool &Overflow) const; APInt ushl_ov(const APInt &Amt, bool &Overflow) const; // Operations that saturate APInt sadd_sat(const APInt &RHS) const; APInt uadd_sat(const APInt &RHS) const; APInt ssub_sat(const APInt &RHS) const; APInt usub_sat(const APInt &RHS) const; APInt smul_sat(const APInt &RHS) const; APInt umul_sat(const APInt &RHS) const; APInt sshl_sat(const APInt &RHS) const; APInt ushl_sat(const APInt &RHS) const; /// Array-indexing support. /// /// \returns the bit value at bitPosition bool operator[](unsigned bitPosition) const { assert(bitPosition < getBitWidth() && "Bit position out of bounds!"); return (maskBit(bitPosition) & getWord(bitPosition)) != 0; } /// @} /// \name Comparison Operators /// @{ /// Equality operator. /// /// Compares this APInt with RHS for the validity of the equality /// relationship. bool operator==(const APInt &RHS) const { assert(BitWidth == RHS.BitWidth && "Comparison requires equal bit widths"); if (isSingleWord()) return U.VAL == RHS.U.VAL; return EqualSlowCase(RHS); } /// Equality operator. /// /// Compares this APInt with a uint64_t for the validity of the equality /// relationship. /// /// \returns true if *this == Val bool operator==(uint64_t Val) const { return (isSingleWord() || getActiveBits() <= 64) && getZExtValue() == Val; } /// Equality comparison. /// /// Compares this APInt with RHS for the validity of the equality /// relationship. /// /// \returns true if *this == Val bool eq(const APInt &RHS) const { return (*this) == RHS; } /// Inequality operator. /// /// Compares this APInt with RHS for the validity of the inequality /// relationship. /// /// \returns true if *this != Val bool operator!=(const APInt &RHS) const { return !((*this) == RHS); } /// Inequality operator. /// /// Compares this APInt with a uint64_t for the validity of the inequality /// relationship. /// /// \returns true if *this != Val bool operator!=(uint64_t Val) const { return !((*this) == Val); } /// Inequality comparison /// /// Compares this APInt with RHS for the validity of the inequality /// relationship. /// /// \returns true if *this != Val bool ne(const APInt &RHS) const { return !((*this) == RHS); } /// Unsigned less than comparison /// /// Regards both *this and RHS as unsigned quantities and compares them for /// the validity of the less-than relationship. /// /// \returns true if *this < RHS when both are considered unsigned. bool ult(const APInt &RHS) const { return compare(RHS) < 0; } /// Unsigned less than comparison /// /// Regards both *this as an unsigned quantity and compares it with RHS for /// the validity of the less-than relationship. /// /// \returns true if *this < RHS when considered unsigned. bool ult(uint64_t RHS) const { // Only need to check active bits if not a single word. return (isSingleWord() || getActiveBits() <= 64) && getZExtValue() < RHS; } /// Signed less than comparison /// /// Regards both *this and RHS as signed quantities and compares them for /// validity of the less-than relationship. /// /// \returns true if *this < RHS when both are considered signed. bool slt(const APInt &RHS) const { return compareSigned(RHS) < 0; } /// Signed less than comparison /// /// Regards both *this as a signed quantity and compares it with RHS for /// the validity of the less-than relationship. /// /// \returns true if *this < RHS when considered signed. bool slt(int64_t RHS) const { return (!isSingleWord() && getMinSignedBits() > 64) ? isNegative() : getSExtValue() < RHS; } /// Unsigned less or equal comparison /// /// Regards both *this and RHS as unsigned quantities and compares them for /// validity of the less-or-equal relationship. /// /// \returns true if *this <= RHS when both are considered unsigned. bool ule(const APInt &RHS) const { return compare(RHS) <= 0; } /// Unsigned less or equal comparison /// /// Regards both *this as an unsigned quantity and compares it with RHS for /// the validity of the less-or-equal relationship. /// /// \returns true if *this <= RHS when considered unsigned. bool ule(uint64_t RHS) const { return !ugt(RHS); } /// Signed less or equal comparison /// /// Regards both *this and RHS as signed quantities and compares them for /// validity of the less-or-equal relationship. /// /// \returns true if *this <= RHS when both are considered signed. bool sle(const APInt &RHS) const { return compareSigned(RHS) <= 0; } /// Signed less or equal comparison /// /// Regards both *this as a signed quantity and compares it with RHS for the /// validity of the less-or-equal relationship. /// /// \returns true if *this <= RHS when considered signed. bool sle(uint64_t RHS) const { return !sgt(RHS); } /// Unsigned greater than comparison /// /// Regards both *this and RHS as unsigned quantities and compares them for /// the validity of the greater-than relationship. /// /// \returns true if *this > RHS when both are considered unsigned. bool ugt(const APInt &RHS) const { return !ule(RHS); } /// Unsigned greater than comparison /// /// Regards both *this as an unsigned quantity and compares it with RHS for /// the validity of the greater-than relationship. /// /// \returns true if *this > RHS when considered unsigned. bool ugt(uint64_t RHS) const { // Only need to check active bits if not a single word. return (!isSingleWord() && getActiveBits() > 64) || getZExtValue() > RHS; } /// Signed greater than comparison /// /// Regards both *this and RHS as signed quantities and compares them for the /// validity of the greater-than relationship. /// /// \returns true if *this > RHS when both are considered signed. bool sgt(const APInt &RHS) const { return !sle(RHS); } /// Signed greater than comparison /// /// Regards both *this as a signed quantity and compares it with RHS for /// the validity of the greater-than relationship. /// /// \returns true if *this > RHS when considered signed. bool sgt(int64_t RHS) const { return (!isSingleWord() && getMinSignedBits() > 64) ? !isNegative() : getSExtValue() > RHS; } /// Unsigned greater or equal comparison /// /// Regards both *this and RHS as unsigned quantities and compares them for /// validity of the greater-or-equal relationship. /// /// \returns true if *this >= RHS when both are considered unsigned. bool uge(const APInt &RHS) const { return !ult(RHS); } /// Unsigned greater or equal comparison /// /// Regards both *this as an unsigned quantity and compares it with RHS for /// the validity of the greater-or-equal relationship. /// /// \returns true if *this >= RHS when considered unsigned. bool uge(uint64_t RHS) const { return !ult(RHS); } /// Signed greater or equal comparison /// /// Regards both *this and RHS as signed quantities and compares them for /// validity of the greater-or-equal relationship. /// /// \returns true if *this >= RHS when both are considered signed. bool sge(const APInt &RHS) const { return !slt(RHS); } /// Signed greater or equal comparison /// /// Regards both *this as a signed quantity and compares it with RHS for /// the validity of the greater-or-equal relationship. /// /// \returns true if *this >= RHS when considered signed. bool sge(int64_t RHS) const { return !slt(RHS); } /// This operation tests if there are any pairs of corresponding bits /// between this APInt and RHS that are both set. bool intersects(const APInt &RHS) const { assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); if (isSingleWord()) return (U.VAL & RHS.U.VAL) != 0; return intersectsSlowCase(RHS); } /// This operation checks that all bits set in this APInt are also set in RHS. bool isSubsetOf(const APInt &RHS) const { assert(BitWidth == RHS.BitWidth && "Bit widths must be the same"); if (isSingleWord()) return (U.VAL & ~RHS.U.VAL) == 0; return isSubsetOfSlowCase(RHS); } /// @} /// \name Resizing Operators /// @{ /// Truncate to new width. /// /// Truncate the APInt to a specified width. It is an error to specify a width /// that is greater than or equal to the current width. APInt trunc(unsigned width) const; /// Truncate to new width with unsigned saturation. /// /// If the APInt, treated as unsigned integer, can be losslessly truncated to /// the new bitwidth, then return truncated APInt. Else, return max value. APInt truncUSat(unsigned width) const; /// Truncate to new width with signed saturation. /// /// If this APInt, treated as signed integer, can be losslessly truncated to /// the new bitwidth, then return truncated APInt. Else, return either /// signed min value if the APInt was negative, or signed max value. APInt truncSSat(unsigned width) const; /// Sign extend to a new width. /// /// This operation sign extends the APInt to a new width. If the high order /// bit is set, the fill on the left will be done with 1 bits, otherwise zero. /// It is an error to specify a width that is less than or equal to the /// current width. APInt sext(unsigned width) const; /// Zero extend to a new width. /// /// This operation zero extends the APInt to a new width. The high order bits /// are filled with 0 bits. It is an error to specify a width that is less /// than or equal to the current width. APInt zext(unsigned width) const; /// Sign extend or truncate to width /// /// Make this APInt have the bit width given by \p width. The value is sign /// extended, truncated, or left alone to make it that width. APInt sextOrTrunc(unsigned width) const; /// Zero extend or truncate to width /// /// Make this APInt have the bit width given by \p width. The value is zero /// extended, truncated, or left alone to make it that width. APInt zextOrTrunc(unsigned width) const; /// Sign extend or truncate to width /// /// Make this APInt have the bit width given by \p width. The value is sign /// extended, or left alone to make it that width. APInt sextOrSelf(unsigned width) const; /// Zero extend or truncate to width /// /// Make this APInt have the bit width given by \p width. The value is zero /// extended, or left alone to make it that width. APInt zextOrSelf(unsigned width) const; /// @} /// \name Bit Manipulation Operators /// @{ /// Set every bit to 1. void setAllBits() { if (isSingleWord()) U.VAL = WORDTYPE_MAX; else // Set all the bits in all the words. memset(U.pVal, -1, getNumWords() * APINT_WORD_SIZE); // Clear the unused ones clearUnusedBits(); } /// Set a given bit to 1. /// /// Set the given bit to 1 whose position is given as "bitPosition". void setBit(unsigned BitPosition) { assert(BitPosition < BitWidth && "BitPosition out of range"); WordType Mask = maskBit(BitPosition); if (isSingleWord()) U.VAL |= Mask; else U.pVal[whichWord(BitPosition)] |= Mask; } /// Set the sign bit to 1. void setSignBit() { setBit(BitWidth - 1); } /// Set the bits from loBit (inclusive) to hiBit (exclusive) to 1. void setBits(unsigned loBit, unsigned hiBit) { assert(hiBit <= BitWidth && "hiBit out of range"); assert(loBit <= BitWidth && "loBit out of range"); assert(loBit <= hiBit && "loBit greater than hiBit"); if (loBit == hiBit) return; if (loBit < APINT_BITS_PER_WORD && hiBit <= APINT_BITS_PER_WORD) { uint64_t mask = WORDTYPE_MAX >> (APINT_BITS_PER_WORD - (hiBit - loBit)); mask <<= loBit; if (isSingleWord()) U.VAL |= mask; else U.pVal[0] |= mask; } else { setBitsSlowCase(loBit, hiBit); } } /// Set the top bits starting from loBit. void setBitsFrom(unsigned loBit) { return setBits(loBit, BitWidth); } /// Set the bottom loBits bits. void setLowBits(unsigned loBits) { return setBits(0, loBits); } /// Set the top hiBits bits. void setHighBits(unsigned hiBits) { return setBits(BitWidth - hiBits, BitWidth); } /// Set every bit to 0. void clearAllBits() { if (isSingleWord()) U.VAL = 0; else memset(U.pVal, 0, getNumWords() * APINT_WORD_SIZE); } /// Set a given bit to 0. /// /// Set the given bit to 0 whose position is given as "bitPosition". void clearBit(unsigned BitPosition) { assert(BitPosition < BitWidth && "BitPosition out of range"); WordType Mask = ~maskBit(BitPosition); if (isSingleWord()) U.VAL &= Mask; else U.pVal[whichWord(BitPosition)] &= Mask; } /// Set bottom loBits bits to 0. void clearLowBits(unsigned loBits) { assert(loBits <= BitWidth && "More bits than bitwidth"); APInt Keep = getHighBitsSet(BitWidth, BitWidth - loBits); *this &= Keep; } /// Set the sign bit to 0. void clearSignBit() { clearBit(BitWidth - 1); } /// Toggle every bit to its opposite value. void flipAllBits() { if (isSingleWord()) { U.VAL ^= WORDTYPE_MAX; clearUnusedBits(); } else { flipAllBitsSlowCase(); } } /// Toggles a given bit to its opposite value. /// /// Toggle a given bit to its opposite value whose position is given /// as "bitPosition". void flipBit(unsigned bitPosition); /// Negate this APInt in place. void negate() { flipAllBits(); ++(*this); } /// Insert the bits from a smaller APInt starting at bitPosition. void insertBits(const APInt &SubBits, unsigned bitPosition); void insertBits(uint64_t SubBits, unsigned bitPosition, unsigned numBits); /// Return an APInt with the extracted bits [bitPosition,bitPosition+numBits). APInt extractBits(unsigned numBits, unsigned bitPosition) const; uint64_t extractBitsAsZExtValue(unsigned numBits, unsigned bitPosition) const; /// @} /// \name Value Characterization Functions /// @{ /// Return the number of bits in the APInt. unsigned getBitWidth() const { return BitWidth; } /// Get the number of words. /// /// Here one word's bitwidth equals to that of uint64_t. /// /// \returns the number of words to hold the integer value of this APInt. unsigned getNumWords() const { return getNumWords(BitWidth); } /// Get the number of words. /// /// *NOTE* Here one word's bitwidth equals to that of uint64_t. /// /// \returns the number of words to hold the integer value with a given bit /// width. static unsigned getNumWords(unsigned BitWidth) { return ((uint64_t)BitWidth + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD; } /// Compute the number of active bits in the value /// /// This function returns the number of active bits which is defined as the /// bit width minus the number of leading zeros. This is used in several /// computations to see how "wide" the value is. unsigned getActiveBits() const { return BitWidth - countLeadingZeros(); } /// Compute the number of active words in the value of this APInt. /// /// This is used in conjunction with getActiveData to extract the raw value of /// the APInt. unsigned getActiveWords() const { unsigned numActiveBits = getActiveBits(); return numActiveBits ? whichWord(numActiveBits - 1) + 1 : 1; } /// Get the minimum bit size for this signed APInt /// /// Computes the minimum bit width for this APInt while considering it to be a /// signed (and probably negative) value. If the value is not negative, this /// function returns the same value as getActiveBits()+1. Otherwise, it /// returns the smallest bit width that will retain the negative value. For /// example, -1 can be written as 0b1 or 0xFFFFFFFFFF. 0b1 is shorter and so /// for -1, this function will always return 1. unsigned getMinSignedBits() const { if (isNegative()) return BitWidth - countLeadingOnes() + 1; return getActiveBits() + 1; } /// Get zero extended value /// /// This method attempts to return the value of this APInt as a zero extended /// uint64_t. The bitwidth must be <= 64 or the value must fit within a /// uint64_t. Otherwise an assertion will result. uint64_t getZExtValue() const { if (isSingleWord()) return U.VAL; assert(getActiveBits() <= 64 && "Too many bits for uint64_t"); return U.pVal[0]; } /// Get sign extended value /// /// This method attempts to return the value of this APInt as a sign extended /// int64_t. The bit width must be <= 64 or the value must fit within an /// int64_t. Otherwise an assertion will result. int64_t getSExtValue() const { if (isSingleWord()) return SignExtend64(U.VAL, BitWidth); assert(getMinSignedBits() <= 64 && "Too many bits for int64_t"); return int64_t(U.pVal[0]); } /// Get bits required for string value. /// /// This method determines how many bits are required to hold the APInt /// equivalent of the string given by \p str. static unsigned getBitsNeeded(StringRef str, uint8_t radix); /// The APInt version of the countLeadingZeros functions in /// MathExtras.h. /// /// It counts the number of zeros from the most significant bit to the first /// one bit. /// /// \returns BitWidth if the value is zero, otherwise returns the number of /// zeros from the most significant bit to the first one bits. unsigned countLeadingZeros() const { if (isSingleWord()) { unsigned unusedBits = APINT_BITS_PER_WORD - BitWidth; return llvm::countLeadingZeros(U.VAL) - unusedBits; } return countLeadingZerosSlowCase(); } /// Count the number of leading one bits. /// /// This function is an APInt version of the countLeadingOnes /// functions in MathExtras.h. It counts the number of ones from the most /// significant bit to the first zero bit. /// /// \returns 0 if the high order bit is not set, otherwise returns the number /// of 1 bits from the most significant to the least unsigned countLeadingOnes() const { if (isSingleWord()) return llvm::countLeadingOnes(U.VAL << (APINT_BITS_PER_WORD - BitWidth)); return countLeadingOnesSlowCase(); } /// Computes the number of leading bits of this APInt that are equal to its /// sign bit. unsigned getNumSignBits() const { return isNegative() ? countLeadingOnes() : countLeadingZeros(); } /// Count the number of trailing zero bits. /// /// This function is an APInt version of the countTrailingZeros /// functions in MathExtras.h. It counts the number of zeros from the least /// significant bit to the first set bit. /// /// \returns BitWidth if the value is zero, otherwise returns the number of /// zeros from the least significant bit to the first one bit. unsigned countTrailingZeros() const { if (isSingleWord()) return std::min(unsigned(llvm::countTrailingZeros(U.VAL)), BitWidth); return countTrailingZerosSlowCase(); } /// Count the number of trailing one bits. /// /// This function is an APInt version of the countTrailingOnes /// functions in MathExtras.h. It counts the number of ones from the least /// significant bit to the first zero bit. /// /// \returns BitWidth if the value is all ones, otherwise returns the number /// of ones from the least significant bit to the first zero bit. unsigned countTrailingOnes() const { if (isSingleWord()) return llvm::countTrailingOnes(U.VAL); return countTrailingOnesSlowCase(); } /// Count the number of bits set. /// /// This function is an APInt version of the countPopulation functions /// in MathExtras.h. It counts the number of 1 bits in the APInt value. /// /// \returns 0 if the value is zero, otherwise returns the number of set bits. unsigned countPopulation() const { if (isSingleWord()) return llvm::countPopulation(U.VAL); return countPopulationSlowCase(); } /// @} /// \name Conversion Functions /// @{ void print(raw_ostream &OS, bool isSigned) const; /// Converts an APInt to a string and append it to Str. Str is commonly a /// SmallString. void toString(SmallVectorImpl &Str, unsigned Radix, bool Signed, bool formatAsCLiteral = false) const; /// Considers the APInt to be unsigned and converts it into a string in the /// radix given. The radix can be 2, 8, 10 16, or 36. void toStringUnsigned(SmallVectorImpl &Str, unsigned Radix = 10) const { toString(Str, Radix, false, false); } /// Considers the APInt to be signed and converts it into a string in the /// radix given. The radix can be 2, 8, 10, 16, or 36. void toStringSigned(SmallVectorImpl &Str, unsigned Radix = 10) const { toString(Str, Radix, true, false); } /// Return the APInt as a std::string. /// /// Note that this is an inefficient method. It is better to pass in a /// SmallVector/SmallString to the methods above to avoid thrashing the heap /// for the string. std::string toString(unsigned Radix, bool Signed) const; /// \returns a byte-swapped representation of this APInt Value. APInt byteSwap() const; /// \returns the value with the bit representation reversed of this APInt /// Value. APInt reverseBits() const; /// Converts this APInt to a double value. double roundToDouble(bool isSigned) const; /// Converts this unsigned APInt to a double value. double roundToDouble() const { return roundToDouble(false); } /// Converts this signed APInt to a double value. double signedRoundToDouble() const { return roundToDouble(true); } /// Converts APInt bits to a double /// /// The conversion does not do a translation from integer to double, it just /// re-interprets the bits as a double. Note that it is valid to do this on /// any bit width. Exactly 64 bits will be translated. double bitsToDouble() const { return BitsToDouble(getWord(0)); } /// Converts APInt bits to a float /// /// The conversion does not do a translation from integer to float, it just /// re-interprets the bits as a float. Note that it is valid to do this on /// any bit width. Exactly 32 bits will be translated. float bitsToFloat() const { return BitsToFloat(static_cast(getWord(0))); } /// Converts a double to APInt bits. /// /// The conversion does not do a translation from double to integer, it just /// re-interprets the bits of the double. static APInt doubleToBits(double V) { return APInt(sizeof(double) * CHAR_BIT, DoubleToBits(V)); } /// Converts a float to APInt bits. /// /// The conversion does not do a translation from float to integer, it just /// re-interprets the bits of the float. static APInt floatToBits(float V) { return APInt(sizeof(float) * CHAR_BIT, FloatToBits(V)); } /// @} /// \name Mathematics Operations /// @{ /// \returns the floor log base 2 of this APInt. unsigned logBase2() const { return getActiveBits() - 1; } /// \returns the ceil log base 2 of this APInt. unsigned ceilLogBase2() const { APInt temp(*this); --temp; return temp.getActiveBits(); } /// \returns the nearest log base 2 of this APInt. Ties round up. /// /// NOTE: When we have a BitWidth of 1, we define: /// /// log2(0) = UINT32_MAX /// log2(1) = 0 /// /// to get around any mathematical concerns resulting from /// referencing 2 in a space where 2 does no exist. unsigned nearestLogBase2() const { // Special case when we have a bitwidth of 1. If VAL is 1, then we // get 0. If VAL is 0, we get WORDTYPE_MAX which gets truncated to // UINT32_MAX. if (BitWidth == 1) return U.VAL - 1; // Handle the zero case. if (isNullValue()) return UINT32_MAX; // The non-zero case is handled by computing: // // nearestLogBase2(x) = logBase2(x) + x[logBase2(x)-1]. // // where x[i] is referring to the value of the ith bit of x. unsigned lg = logBase2(); return lg + unsigned((*this)[lg - 1]); } /// \returns the log base 2 of this APInt if its an exact power of two, -1 /// otherwise int32_t exactLogBase2() const { if (!isPowerOf2()) return -1; return logBase2(); } /// Compute the square root APInt sqrt() const; /// Get the absolute value; /// /// If *this is < 0 then return -(*this), otherwise *this; APInt abs() const { if (isNegative()) return -(*this); return *this; } /// \returns the multiplicative inverse for a given modulo. APInt multiplicativeInverse(const APInt &modulo) const; /// @} /// \name Support for division by constant /// @{ /// Calculate the magic number for signed division by a constant. struct ms; ms magic() const; /// Calculate the magic number for unsigned division by a constant. struct mu; mu magicu(unsigned LeadingZeros = 0) const; /// @} /// \name Building-block Operations for APInt and APFloat /// @{ // These building block operations operate on a representation of arbitrary // precision, two's-complement, bignum integer values. They should be // sufficient to implement APInt and APFloat bignum requirements. Inputs are // generally a pointer to the base of an array of integer parts, representing // an unsigned bignum, and a count of how many parts there are. /// Sets the least significant part of a bignum to the input value, and zeroes /// out higher parts. static void tcSet(WordType *, WordType, unsigned); /// Assign one bignum to another. static void tcAssign(WordType *, const WordType *, unsigned); /// Returns true if a bignum is zero, false otherwise. static bool tcIsZero(const WordType *, unsigned); /// Extract the given bit of a bignum; returns 0 or 1. Zero-based. static int tcExtractBit(const WordType *, unsigned bit); /// Copy the bit vector of width srcBITS from SRC, starting at bit srcLSB, to /// DST, of dstCOUNT parts, such that the bit srcLSB becomes the least /// significant bit of DST. All high bits above srcBITS in DST are /// zero-filled. static void tcExtract(WordType *, unsigned dstCount, const WordType *, unsigned srcBits, unsigned srcLSB); /// Set the given bit of a bignum. Zero-based. static void tcSetBit(WordType *, unsigned bit); /// Clear the given bit of a bignum. Zero-based. static void tcClearBit(WordType *, unsigned bit); /// Returns the bit number of the least or most significant set bit of a /// number. If the input number has no bits set -1U is returned. static unsigned tcLSB(const WordType *, unsigned n); static unsigned tcMSB(const WordType *parts, unsigned n); /// Negate a bignum in-place. static void tcNegate(WordType *, unsigned); /// DST += RHS + CARRY where CARRY is zero or one. Returns the carry flag. static WordType tcAdd(WordType *, const WordType *, WordType carry, unsigned); /// DST += RHS. Returns the carry flag. static WordType tcAddPart(WordType *, WordType, unsigned); /// DST -= RHS + CARRY where CARRY is zero or one. Returns the carry flag. static WordType tcSubtract(WordType *, const WordType *, WordType carry, unsigned); /// DST -= RHS. Returns the carry flag. static WordType tcSubtractPart(WordType *, WordType, unsigned); /// DST += SRC * MULTIPLIER + PART if add is true /// DST = SRC * MULTIPLIER + PART if add is false /// /// Requires 0 <= DSTPARTS <= SRCPARTS + 1. If DST overlaps SRC they must /// start at the same point, i.e. DST == SRC. /// /// If DSTPARTS == SRC_PARTS + 1 no overflow occurs and zero is returned. /// Otherwise DST is filled with the least significant DSTPARTS parts of the /// result, and if all of the omitted higher parts were zero return zero, /// otherwise overflow occurred and return one. static int tcMultiplyPart(WordType *dst, const WordType *src, WordType multiplier, WordType carry, unsigned srcParts, unsigned dstParts, bool add); /// DST = LHS * RHS, where DST has the same width as the operands and is /// filled with the least significant parts of the result. Returns one if /// overflow occurred, otherwise zero. DST must be disjoint from both /// operands. static int tcMultiply(WordType *, const WordType *, const WordType *, unsigned); /// DST = LHS * RHS, where DST has width the sum of the widths of the /// operands. No overflow occurs. DST must be disjoint from both operands. static void tcFullMultiply(WordType *, const WordType *, const WordType *, unsigned, unsigned); /// If RHS is zero LHS and REMAINDER are left unchanged, return one. /// Otherwise set LHS to LHS / RHS with the fractional part discarded, set /// REMAINDER to the remainder, return zero. i.e. /// /// OLD_LHS = RHS * LHS + REMAINDER /// /// SCRATCH is a bignum of the same size as the operands and result for use by /// the routine; its contents need not be initialized and are destroyed. LHS, /// REMAINDER and SCRATCH must be distinct. static int tcDivide(WordType *lhs, const WordType *rhs, WordType *remainder, WordType *scratch, unsigned parts); /// Shift a bignum left Count bits. Shifted in bits are zero. There are no /// restrictions on Count. static void tcShiftLeft(WordType *, unsigned Words, unsigned Count); /// Shift a bignum right Count bits. Shifted in bits are zero. There are no /// restrictions on Count. static void tcShiftRight(WordType *, unsigned Words, unsigned Count); /// The obvious AND, OR and XOR and complement operations. static void tcAnd(WordType *, const WordType *, unsigned); static void tcOr(WordType *, const WordType *, unsigned); static void tcXor(WordType *, const WordType *, unsigned); static void tcComplement(WordType *, unsigned); /// Comparison (unsigned) of two bignums. static int tcCompare(const WordType *, const WordType *, unsigned); /// Increment a bignum in-place. Return the carry flag. static WordType tcIncrement(WordType *dst, unsigned parts) { return tcAddPart(dst, 1, parts); } /// Decrement a bignum in-place. Return the borrow flag. static WordType tcDecrement(WordType *dst, unsigned parts) { return tcSubtractPart(dst, 1, parts); } /// Set the least significant BITS and clear the rest. static void tcSetLeastSignificantBits(WordType *, unsigned, unsigned bits); /// debug method void dump() const; /// @} }; /// Magic data for optimising signed division by a constant. struct APInt::ms { APInt m; ///< magic number unsigned s; ///< shift amount }; /// Magic data for optimising unsigned division by a constant. struct APInt::mu { APInt m; ///< magic number bool a; ///< add indicator unsigned s; ///< shift amount }; inline bool operator==(uint64_t V1, const APInt &V2) { return V2 == V1; } inline bool operator!=(uint64_t V1, const APInt &V2) { return V2 != V1; } /// Unary bitwise complement operator. /// /// \returns an APInt that is the bitwise complement of \p v. inline APInt operator~(APInt v) { v.flipAllBits(); return v; } inline APInt operator&(APInt a, const APInt &b) { a &= b; return a; } inline APInt operator&(const APInt &a, APInt &&b) { b &= a; return std::move(b); } inline APInt operator&(APInt a, uint64_t RHS) { a &= RHS; return a; } inline APInt operator&(uint64_t LHS, APInt b) { b &= LHS; return b; } inline APInt operator|(APInt a, const APInt &b) { a |= b; return a; } inline APInt operator|(const APInt &a, APInt &&b) { b |= a; return std::move(b); } inline APInt operator|(APInt a, uint64_t RHS) { a |= RHS; return a; } inline APInt operator|(uint64_t LHS, APInt b) { b |= LHS; return b; } inline APInt operator^(APInt a, const APInt &b) { a ^= b; return a; } inline APInt operator^(const APInt &a, APInt &&b) { b ^= a; return std::move(b); } inline APInt operator^(APInt a, uint64_t RHS) { a ^= RHS; return a; } inline APInt operator^(uint64_t LHS, APInt b) { b ^= LHS; return b; } inline raw_ostream &operator<<(raw_ostream &OS, const APInt &I) { I.print(OS, true); return OS; } inline APInt operator-(APInt v) { v.negate(); return v; } inline APInt operator+(APInt a, const APInt &b) { a += b; return a; } inline APInt operator+(const APInt &a, APInt &&b) { b += a; return std::move(b); } inline APInt operator+(APInt a, uint64_t RHS) { a += RHS; return a; } inline APInt operator+(uint64_t LHS, APInt b) { b += LHS; return b; } inline APInt operator-(APInt a, const APInt &b) { a -= b; return a; } inline APInt operator-(const APInt &a, APInt &&b) { b.negate(); b += a; return std::move(b); } inline APInt operator-(APInt a, uint64_t RHS) { a -= RHS; return a; } inline APInt operator-(uint64_t LHS, APInt b) { b.negate(); b += LHS; return b; } inline APInt operator*(APInt a, uint64_t RHS) { a *= RHS; return a; } inline APInt operator*(uint64_t LHS, APInt b) { b *= LHS; return b; } namespace APIntOps { /// Determine the smaller of two APInts considered to be signed. inline const APInt &smin(const APInt &A, const APInt &B) { return A.slt(B) ? A : B; } /// Determine the larger of two APInts considered to be signed. inline const APInt &smax(const APInt &A, const APInt &B) { return A.sgt(B) ? A : B; } /// Determine the smaller of two APInts considered to be signed. inline const APInt &umin(const APInt &A, const APInt &B) { return A.ult(B) ? A : B; } /// Determine the larger of two APInts considered to be unsigned. inline const APInt &umax(const APInt &A, const APInt &B) { return A.ugt(B) ? A : B; } /// Compute GCD of two unsigned APInt values. /// /// This function returns the greatest common divisor of the two APInt values /// using Stein's algorithm. /// /// \returns the greatest common divisor of A and B. APInt GreatestCommonDivisor(APInt A, APInt B); /// Converts the given APInt to a double value. /// /// Treats the APInt as an unsigned value for conversion purposes. inline double RoundAPIntToDouble(const APInt &APIVal) { return APIVal.roundToDouble(); } /// Converts the given APInt to a double value. /// /// Treats the APInt as a signed value for conversion purposes. inline double RoundSignedAPIntToDouble(const APInt &APIVal) { return APIVal.signedRoundToDouble(); } /// Converts the given APInt to a float vlalue. inline float RoundAPIntToFloat(const APInt &APIVal) { return float(RoundAPIntToDouble(APIVal)); } /// Converts the given APInt to a float value. /// /// Treats the APInt as a signed value for conversion purposes. inline float RoundSignedAPIntToFloat(const APInt &APIVal) { return float(APIVal.signedRoundToDouble()); } /// Converts the given double value into a APInt. /// /// This function convert a double value to an APInt value. APInt RoundDoubleToAPInt(double Double, unsigned width); /// Converts a float value into a APInt. /// /// Converts a float value into an APInt value. inline APInt RoundFloatToAPInt(float Float, unsigned width) { return RoundDoubleToAPInt(double(Float), width); } /// Return A unsign-divided by B, rounded by the given rounding mode. APInt RoundingUDiv(const APInt &A, const APInt &B, APInt::Rounding RM); /// Return A sign-divided by B, rounded by the given rounding mode. APInt RoundingSDiv(const APInt &A, const APInt &B, APInt::Rounding RM); /// Let q(n) = An^2 + Bn + C, and BW = bit width of the value range /// (e.g. 32 for i32). /// This function finds the smallest number n, such that /// (a) n >= 0 and q(n) = 0, or /// (b) n >= 1 and q(n-1) and q(n), when evaluated in the set of all /// integers, belong to two different intervals [Rk, Rk+R), /// where R = 2^BW, and k is an integer. /// The idea here is to find when q(n) "overflows" 2^BW, while at the /// same time "allowing" subtraction. In unsigned modulo arithmetic a /// subtraction (treated as addition of negated numbers) would always /// count as an overflow, but here we want to allow values to decrease /// and increase as long as they are within the same interval. /// Specifically, adding of two negative numbers should not cause an /// overflow (as long as the magnitude does not exceed the bit width). /// On the other hand, given a positive number, adding a negative /// number to it can give a negative result, which would cause the /// value to go from [-2^BW, 0) to [0, 2^BW). In that sense, zero is /// treated as a special case of an overflow. /// /// This function returns None if after finding k that minimizes the /// positive solution to q(n) = kR, both solutions are contained between /// two consecutive integers. /// /// There are cases where q(n) > T, and q(n+1) < T (assuming evaluation /// in arithmetic modulo 2^BW, and treating the values as signed) by the /// virtue of *signed* overflow. This function will *not* find such an n, /// however it may find a value of n satisfying the inequalities due to /// an *unsigned* overflow (if the values are treated as unsigned). /// To find a solution for a signed overflow, treat it as a problem of /// finding an unsigned overflow with a range with of BW-1. /// /// The returned value may have a different bit width from the input /// coefficients. Optional SolveQuadraticEquationWrap(APInt A, APInt B, APInt C, unsigned RangeWidth); /// Compare two values, and if they are different, return the position of the /// most significant bit that is different in the values. Optional GetMostSignificantDifferentBit(const APInt &A, const APInt &B); } // End of APIntOps namespace // See friend declaration above. This additional declaration is required in // order to compile LLVM with IBM xlC compiler. hash_code hash_value(const APInt &Arg); /// StoreIntToMemory - Fills the StoreBytes bytes of memory starting from Dst /// with the integer held in IntVal. void StoreIntToMemory(const APInt &IntVal, uint8_t *Dst, unsigned StoreBytes); /// LoadIntFromMemory - Loads the integer stored in the LoadBytes bytes starting /// from Src into IntVal, which is assumed to be wide enough and to hold zero. void LoadIntFromMemory(APInt &IntVal, uint8_t *Src, unsigned LoadBytes); } // namespace llvm #endif binaryen-version_108/third_party/llvm-project/include/llvm/ADT/APSInt.h000066400000000000000000000274001423707623100261730ustar00rootroot00000000000000//===-- llvm/ADT/APSInt.h - Arbitrary Precision Signed Int -----*- C++ -*--===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the APSInt class, which is a simple class that // represents an arbitrary sized integer that knows its signedness. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_APSINT_H #define LLVM_ADT_APSINT_H #include "llvm/ADT/APInt.h" namespace llvm { class LLVM_NODISCARD APSInt : public APInt { bool IsUnsigned; public: /// Default constructor that creates an uninitialized APInt. explicit APSInt() : IsUnsigned(false) {} /// APSInt ctor - Create an APSInt with the specified width, default to /// unsigned. explicit APSInt(uint32_t BitWidth, bool isUnsigned = true) : APInt(BitWidth, 0), IsUnsigned(isUnsigned) {} explicit APSInt(APInt I, bool isUnsigned = true) : APInt(std::move(I)), IsUnsigned(isUnsigned) {} /// Construct an APSInt from a string representation. /// /// This constructor interprets the string \p Str using the radix of 10. /// The interpretation stops at the end of the string. The bit width of the /// constructed APSInt is determined automatically. /// /// \param Str the string to be interpreted. explicit APSInt(StringRef Str); /// Determine sign of this APSInt. /// /// \returns true if this APSInt is negative, false otherwise bool isNegative() const { return isSigned() && APInt::isNegative(); } /// Determine if this APSInt Value is non-negative (>= 0) /// /// \returns true if this APSInt is non-negative, false otherwise bool isNonNegative() const { return !isNegative(); } /// Determine if this APSInt Value is positive. /// /// This tests if the value of this APSInt is positive (> 0). Note /// that 0 is not a positive value. /// /// \returns true if this APSInt is positive. bool isStrictlyPositive() const { return isNonNegative() && !isNullValue(); } APSInt &operator=(APInt RHS) { // Retain our current sign. APInt::operator=(std::move(RHS)); return *this; } APSInt &operator=(uint64_t RHS) { // Retain our current sign. APInt::operator=(RHS); return *this; } // Query sign information. bool isSigned() const { return !IsUnsigned; } bool isUnsigned() const { return IsUnsigned; } void setIsUnsigned(bool Val) { IsUnsigned = Val; } void setIsSigned(bool Val) { IsUnsigned = !Val; } /// toString - Append this APSInt to the specified SmallString. void toString(SmallVectorImpl &Str, unsigned Radix = 10) const { APInt::toString(Str, Radix, isSigned()); } /// toString - Converts an APInt to a std::string. This is an inefficient /// method; you should prefer passing in a SmallString instead. std::string toString(unsigned Radix) const { return APInt::toString(Radix, isSigned()); } using APInt::toString; /// Get the correctly-extended \c int64_t value. int64_t getExtValue() const { assert(getMinSignedBits() <= 64 && "Too many bits for int64_t"); return isSigned() ? getSExtValue() : getZExtValue(); } APSInt trunc(uint32_t width) const { return APSInt(APInt::trunc(width), IsUnsigned); } APSInt extend(uint32_t width) const { if (IsUnsigned) return APSInt(zext(width), IsUnsigned); else return APSInt(sext(width), IsUnsigned); } APSInt extOrTrunc(uint32_t width) const { if (IsUnsigned) return APSInt(zextOrTrunc(width), IsUnsigned); else return APSInt(sextOrTrunc(width), IsUnsigned); } const APSInt &operator%=(const APSInt &RHS) { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); if (IsUnsigned) *this = urem(RHS); else *this = srem(RHS); return *this; } const APSInt &operator/=(const APSInt &RHS) { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); if (IsUnsigned) *this = udiv(RHS); else *this = sdiv(RHS); return *this; } APSInt operator%(const APSInt &RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return IsUnsigned ? APSInt(urem(RHS), true) : APSInt(srem(RHS), false); } APSInt operator/(const APSInt &RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return IsUnsigned ? APSInt(udiv(RHS), true) : APSInt(sdiv(RHS), false); } APSInt operator>>(unsigned Amt) const { return IsUnsigned ? APSInt(lshr(Amt), true) : APSInt(ashr(Amt), false); } APSInt& operator>>=(unsigned Amt) { if (IsUnsigned) lshrInPlace(Amt); else ashrInPlace(Amt); return *this; } inline bool operator<(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return IsUnsigned ? ult(RHS) : slt(RHS); } inline bool operator>(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return IsUnsigned ? ugt(RHS) : sgt(RHS); } inline bool operator<=(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return IsUnsigned ? ule(RHS) : sle(RHS); } inline bool operator>=(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return IsUnsigned ? uge(RHS) : sge(RHS); } inline bool operator==(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return eq(RHS); } inline bool operator!=(const APSInt& RHS) const { return !((*this) == RHS); } bool operator==(int64_t RHS) const { return compareValues(*this, get(RHS)) == 0; } bool operator!=(int64_t RHS) const { return compareValues(*this, get(RHS)) != 0; } bool operator<=(int64_t RHS) const { return compareValues(*this, get(RHS)) <= 0; } bool operator>=(int64_t RHS) const { return compareValues(*this, get(RHS)) >= 0; } bool operator<(int64_t RHS) const { return compareValues(*this, get(RHS)) < 0; } bool operator>(int64_t RHS) const { return compareValues(*this, get(RHS)) > 0; } // The remaining operators just wrap the logic of APInt, but retain the // signedness information. APSInt operator<<(unsigned Bits) const { return APSInt(static_cast(*this) << Bits, IsUnsigned); } APSInt& operator<<=(unsigned Amt) { static_cast(*this) <<= Amt; return *this; } APSInt& operator++() { ++(static_cast(*this)); return *this; } APSInt& operator--() { --(static_cast(*this)); return *this; } APSInt operator++(int) { return APSInt(++static_cast(*this), IsUnsigned); } APSInt operator--(int) { return APSInt(--static_cast(*this), IsUnsigned); } APSInt operator-() const { return APSInt(-static_cast(*this), IsUnsigned); } APSInt& operator+=(const APSInt& RHS) { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); static_cast(*this) += RHS; return *this; } APSInt& operator-=(const APSInt& RHS) { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); static_cast(*this) -= RHS; return *this; } APSInt& operator*=(const APSInt& RHS) { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); static_cast(*this) *= RHS; return *this; } APSInt& operator&=(const APSInt& RHS) { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); static_cast(*this) &= RHS; return *this; } APSInt& operator|=(const APSInt& RHS) { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); static_cast(*this) |= RHS; return *this; } APSInt& operator^=(const APSInt& RHS) { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); static_cast(*this) ^= RHS; return *this; } APSInt operator&(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return APSInt(static_cast(*this) & RHS, IsUnsigned); } APSInt operator|(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return APSInt(static_cast(*this) | RHS, IsUnsigned); } APSInt operator^(const APSInt &RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return APSInt(static_cast(*this) ^ RHS, IsUnsigned); } APSInt operator*(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return APSInt(static_cast(*this) * RHS, IsUnsigned); } APSInt operator+(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return APSInt(static_cast(*this) + RHS, IsUnsigned); } APSInt operator-(const APSInt& RHS) const { assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!"); return APSInt(static_cast(*this) - RHS, IsUnsigned); } APSInt operator~() const { return APSInt(~static_cast(*this), IsUnsigned); } /// getMaxValue - Return the APSInt representing the maximum integer value /// with the given bit width and signedness. static APSInt getMaxValue(uint32_t numBits, bool Unsigned) { return APSInt(Unsigned ? APInt::getMaxValue(numBits) : APInt::getSignedMaxValue(numBits), Unsigned); } /// getMinValue - Return the APSInt representing the minimum integer value /// with the given bit width and signedness. static APSInt getMinValue(uint32_t numBits, bool Unsigned) { return APSInt(Unsigned ? APInt::getMinValue(numBits) : APInt::getSignedMinValue(numBits), Unsigned); } /// Determine if two APSInts have the same value, zero- or /// sign-extending as needed. static bool isSameValue(const APSInt &I1, const APSInt &I2) { return !compareValues(I1, I2); } /// Compare underlying values of two numbers. static int compareValues(const APSInt &I1, const APSInt &I2) { if (I1.getBitWidth() == I2.getBitWidth() && I1.isSigned() == I2.isSigned()) return I1.IsUnsigned ? I1.compare(I2) : I1.compareSigned(I2); // Check for a bit-width mismatch. if (I1.getBitWidth() > I2.getBitWidth()) return compareValues(I1, I2.extend(I1.getBitWidth())); if (I2.getBitWidth() > I1.getBitWidth()) return compareValues(I1.extend(I2.getBitWidth()), I2); // We have a signedness mismatch. Check for negative values and do an // unsigned compare if both are positive. if (I1.isSigned()) { assert(!I2.isSigned() && "Expected signed mismatch"); if (I1.isNegative()) return -1; } else { assert(I2.isSigned() && "Expected signed mismatch"); if (I2.isNegative()) return 1; } return I1.compare(I2); } static APSInt get(int64_t X) { return APSInt(APInt(64, X), false); } static APSInt getUnsigned(uint64_t X) { return APSInt(APInt(64, X), true); } /// Profile - Used to insert APSInt objects, or objects that contain APSInt /// objects, into FoldingSets. void Profile(FoldingSetNodeID& ID) const; }; inline bool operator==(int64_t V1, const APSInt &V2) { return V2 == V1; } inline bool operator!=(int64_t V1, const APSInt &V2) { return V2 != V1; } inline bool operator<=(int64_t V1, const APSInt &V2) { return V2 >= V1; } inline bool operator>=(int64_t V1, const APSInt &V2) { return V2 <= V1; } inline bool operator<(int64_t V1, const APSInt &V2) { return V2 > V1; } inline bool operator>(int64_t V1, const APSInt &V2) { return V2 < V1; } inline raw_ostream &operator<<(raw_ostream &OS, const APSInt &I) { I.print(OS, I.isSigned()); return OS; } } // end namespace llvm #endif binaryen-version_108/third_party/llvm-project/include/llvm/ADT/AllocatorList.h000066400000000000000000000170601423707623100276520ustar00rootroot00000000000000//===- llvm/ADT/AllocatorList.h - Custom allocator list ---------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_ALLOCATORLIST_H #define LLVM_ADT_ALLOCATORLIST_H #include "llvm/ADT/ilist_node.h" #include "llvm/ADT/iterator.h" #include "llvm/ADT/simple_ilist.h" #include "llvm/Support/Allocator.h" #include #include #include #include #include #include namespace llvm { /// A linked-list with a custom, local allocator. /// /// Expose a std::list-like interface that owns and uses a custom LLVM-style /// allocator (e.g., BumpPtrAllocator), leveraging \a simple_ilist for the /// implementation details. /// /// Because this list owns the allocator, calling \a splice() with a different /// list isn't generally safe. As such, \a splice has been left out of the /// interface entirely. template class AllocatorList : AllocatorT { struct Node : ilist_node { Node(Node &&) = delete; Node(const Node &) = delete; Node &operator=(Node &&) = delete; Node &operator=(const Node &) = delete; Node(T &&V) : V(std::move(V)) {} Node(const T &V) : V(V) {} template Node(Ts &&... Vs) : V(std::forward(Vs)...) {} T V; }; using list_type = simple_ilist; list_type List; AllocatorT &getAlloc() { return *this; } const AllocatorT &getAlloc() const { return *this; } template Node *create(ArgTs &&... Args) { return new (getAlloc()) Node(std::forward(Args)...); } struct Cloner { AllocatorList &AL; Cloner(AllocatorList &AL) : AL(AL) {} Node *operator()(const Node &N) const { return AL.create(N.V); } }; struct Disposer { AllocatorList &AL; Disposer(AllocatorList &AL) : AL(AL) {} void operator()(Node *N) const { N->~Node(); AL.getAlloc().Deallocate(N); } }; public: using value_type = T; using pointer = T *; using reference = T &; using const_pointer = const T *; using const_reference = const T &; using size_type = typename list_type::size_type; using difference_type = typename list_type::difference_type; private: template class IteratorImpl : public iterator_adaptor_base, IteratorBase, std::bidirectional_iterator_tag, ValueT> { template friend class IteratorImpl; friend AllocatorList; using base_type = iterator_adaptor_base, IteratorBase, std::bidirectional_iterator_tag, ValueT>; public: using value_type = ValueT; using pointer = ValueT *; using reference = ValueT &; IteratorImpl() = default; IteratorImpl(const IteratorImpl &) = default; IteratorImpl &operator=(const IteratorImpl &) = default; explicit IteratorImpl(const IteratorBase &I) : base_type(I) {} template IteratorImpl(const IteratorImpl &X, typename std::enable_if::value>::type * = nullptr) : base_type(X.wrapped()) {} ~IteratorImpl() = default; reference operator*() const { return base_type::wrapped()->V; } pointer operator->() const { return &operator*(); } friend bool operator==(const IteratorImpl &L, const IteratorImpl &R) { return L.wrapped() == R.wrapped(); } friend bool operator!=(const IteratorImpl &L, const IteratorImpl &R) { return !(L == R); } }; public: using iterator = IteratorImpl; using reverse_iterator = IteratorImpl; using const_iterator = IteratorImpl; using const_reverse_iterator = IteratorImpl; AllocatorList() = default; AllocatorList(AllocatorList &&X) : AllocatorT(std::move(X.getAlloc())), List(std::move(X.List)) {} AllocatorList(const AllocatorList &X) { List.cloneFrom(X.List, Cloner(*this), Disposer(*this)); } AllocatorList &operator=(AllocatorList &&X) { clear(); // Dispose of current nodes explicitly. List = std::move(X.List); getAlloc() = std::move(X.getAlloc()); return *this; } AllocatorList &operator=(const AllocatorList &X) { List.cloneFrom(X.List, Cloner(*this), Disposer(*this)); return *this; } ~AllocatorList() { clear(); } void swap(AllocatorList &RHS) { List.swap(RHS.List); std::swap(getAlloc(), RHS.getAlloc()); } bool empty() { return List.empty(); } size_t size() { return List.size(); } iterator begin() { return iterator(List.begin()); } iterator end() { return iterator(List.end()); } const_iterator begin() const { return const_iterator(List.begin()); } const_iterator end() const { return const_iterator(List.end()); } reverse_iterator rbegin() { return reverse_iterator(List.rbegin()); } reverse_iterator rend() { return reverse_iterator(List.rend()); } const_reverse_iterator rbegin() const { return const_reverse_iterator(List.rbegin()); } const_reverse_iterator rend() const { return const_reverse_iterator(List.rend()); } T &back() { return List.back().V; } T &front() { return List.front().V; } const T &back() const { return List.back().V; } const T &front() const { return List.front().V; } template iterator emplace(iterator I, Ts &&... Vs) { return iterator(List.insert(I.wrapped(), *create(std::forward(Vs)...))); } iterator insert(iterator I, T &&V) { return iterator(List.insert(I.wrapped(), *create(std::move(V)))); } iterator insert(iterator I, const T &V) { return iterator(List.insert(I.wrapped(), *create(V))); } template void insert(iterator I, Iterator First, Iterator Last) { for (; First != Last; ++First) List.insert(I.wrapped(), *create(*First)); } iterator erase(iterator I) { return iterator(List.eraseAndDispose(I.wrapped(), Disposer(*this))); } iterator erase(iterator First, iterator Last) { return iterator( List.eraseAndDispose(First.wrapped(), Last.wrapped(), Disposer(*this))); } void clear() { List.clearAndDispose(Disposer(*this)); } void pop_back() { List.eraseAndDispose(--List.end(), Disposer(*this)); } void pop_front() { List.eraseAndDispose(List.begin(), Disposer(*this)); } void push_back(T &&V) { insert(end(), std::move(V)); } void push_front(T &&V) { insert(begin(), std::move(V)); } void push_back(const T &V) { insert(end(), V); } void push_front(const T &V) { insert(begin(), V); } template void emplace_back(Ts &&... Vs) { emplace(end(), std::forward(Vs)...); } template void emplace_front(Ts &&... Vs) { emplace(begin(), std::forward(Vs)...); } /// Reset the underlying allocator. /// /// \pre \c empty() void resetAlloc() { assert(empty() && "Cannot reset allocator if not empty"); getAlloc().Reset(); } }; template using BumpPtrList = AllocatorList; } // end namespace llvm #endif // LLVM_ADT_ALLOCATORLIST_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/ArrayRef.h000066400000000000000000000425141423707623100266130ustar00rootroot00000000000000//===- ArrayRef.h - Array Reference Wrapper ---------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_ARRAYREF_H #define LLVM_ADT_ARRAYREF_H #include "llvm/ADT/Hashing.h" #include "llvm/ADT/None.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/Compiler.h" #include #include #include #include #include #include #include #include #include namespace llvm { /// ArrayRef - Represent a constant reference to an array (0 or more elements /// consecutively in memory), i.e. a start pointer and a length. It allows /// various APIs to take consecutive elements easily and conveniently. /// /// This class does not own the underlying data, it is expected to be used in /// situations where the data resides in some other buffer, whose lifetime /// extends past that of the ArrayRef. For this reason, it is not in general /// safe to store an ArrayRef. /// /// This is intended to be trivially copyable, so it should be passed by /// value. template class LLVM_NODISCARD ArrayRef { public: using iterator = const T *; using const_iterator = const T *; using size_type = size_t; using reverse_iterator = std::reverse_iterator; private: /// The start of the array, in an external buffer. const T *Data = nullptr; /// The number of elements. size_type Length = 0; public: /// @name Constructors /// @{ /// Construct an empty ArrayRef. /*implicit*/ ArrayRef() = default; /// Construct an empty ArrayRef from None. /*implicit*/ ArrayRef(NoneType) {} /// Construct an ArrayRef from a single element. /*implicit*/ ArrayRef(const T &OneElt) : Data(&OneElt), Length(1) {} /// Construct an ArrayRef from a pointer and length. /*implicit*/ ArrayRef(const T *data, size_t length) : Data(data), Length(length) {} /// Construct an ArrayRef from a range. ArrayRef(const T *begin, const T *end) : Data(begin), Length(end - begin) {} /// Construct an ArrayRef from a SmallVector. This is templated in order to /// avoid instantiating SmallVectorTemplateCommon whenever we /// copy-construct an ArrayRef. template /*implicit*/ ArrayRef(const SmallVectorTemplateCommon &Vec) : Data(Vec.data()), Length(Vec.size()) { } /// Construct an ArrayRef from a std::vector. template /*implicit*/ ArrayRef(const std::vector &Vec) : Data(Vec.data()), Length(Vec.size()) {} /// Construct an ArrayRef from a std::array template /*implicit*/ constexpr ArrayRef(const std::array &Arr) : Data(Arr.data()), Length(N) {} /// Construct an ArrayRef from a C array. template /*implicit*/ constexpr ArrayRef(const T (&Arr)[N]) : Data(Arr), Length(N) {} /// Construct an ArrayRef from a std::initializer_list. /*implicit*/ ArrayRef(const std::initializer_list &Vec) : Data(Vec.begin() == Vec.end() ? (T*)nullptr : Vec.begin()), Length(Vec.size()) {} /// Construct an ArrayRef from ArrayRef. This uses SFINAE to /// ensure that only ArrayRefs of pointers can be converted. template ArrayRef( const ArrayRef &A, typename std::enable_if< std::is_convertible::value>::type * = nullptr) : Data(A.data()), Length(A.size()) {} /// Construct an ArrayRef from a SmallVector. This is /// templated in order to avoid instantiating SmallVectorTemplateCommon /// whenever we copy-construct an ArrayRef. template /*implicit*/ ArrayRef( const SmallVectorTemplateCommon &Vec, typename std::enable_if< std::is_convertible::value>::type * = nullptr) : Data(Vec.data()), Length(Vec.size()) { } /// Construct an ArrayRef from std::vector. This uses SFINAE /// to ensure that only vectors of pointers can be converted. template ArrayRef(const std::vector &Vec, typename std::enable_if< std::is_convertible::value>::type* = 0) : Data(Vec.data()), Length(Vec.size()) {} /// @} /// @name Simple Operations /// @{ iterator begin() const { return Data; } iterator end() const { return Data + Length; } reverse_iterator rbegin() const { return reverse_iterator(end()); } reverse_iterator rend() const { return reverse_iterator(begin()); } /// empty - Check if the array is empty. bool empty() const { return Length == 0; } const T *data() const { return Data; } /// size - Get the array size. size_t size() const { return Length; } /// front - Get the first element. const T &front() const { assert(!empty()); return Data[0]; } /// back - Get the last element. const T &back() const { assert(!empty()); return Data[Length-1]; } // copy - Allocate copy in Allocator and return ArrayRef to it. template ArrayRef copy(Allocator &A) { T *Buff = A.template Allocate(Length); std::uninitialized_copy(begin(), end(), Buff); return ArrayRef(Buff, Length); } /// equals - Check for element-wise equality. bool equals(ArrayRef RHS) const { if (Length != RHS.Length) return false; return std::equal(begin(), end(), RHS.begin()); } /// slice(n, m) - Chop off the first N elements of the array, and keep M /// elements in the array. ArrayRef slice(size_t N, size_t M) const { assert(N+M <= size() && "Invalid specifier"); return ArrayRef(data()+N, M); } /// slice(n) - Chop off the first N elements of the array. ArrayRef slice(size_t N) const { return slice(N, size() - N); } /// Drop the first \p N elements of the array. ArrayRef drop_front(size_t N = 1) const { assert(size() >= N && "Dropping more elements than exist"); return slice(N, size() - N); } /// Drop the last \p N elements of the array. ArrayRef drop_back(size_t N = 1) const { assert(size() >= N && "Dropping more elements than exist"); return slice(0, size() - N); } /// Return a copy of *this with the first N elements satisfying the /// given predicate removed. template ArrayRef drop_while(PredicateT Pred) const { return ArrayRef(find_if_not(*this, Pred), end()); } /// Return a copy of *this with the first N elements not satisfying /// the given predicate removed. template ArrayRef drop_until(PredicateT Pred) const { return ArrayRef(find_if(*this, Pred), end()); } /// Return a copy of *this with only the first \p N elements. ArrayRef take_front(size_t N = 1) const { if (N >= size()) return *this; return drop_back(size() - N); } /// Return a copy of *this with only the last \p N elements. ArrayRef take_back(size_t N = 1) const { if (N >= size()) return *this; return drop_front(size() - N); } /// Return the first N elements of this Array that satisfy the given /// predicate. template ArrayRef take_while(PredicateT Pred) const { return ArrayRef(begin(), find_if_not(*this, Pred)); } /// Return the first N elements of this Array that don't satisfy the /// given predicate. template ArrayRef take_until(PredicateT Pred) const { return ArrayRef(begin(), find_if(*this, Pred)); } /// @} /// @name Operator Overloads /// @{ const T &operator[](size_t Index) const { assert(Index < Length && "Invalid index!"); return Data[Index]; } /// Disallow accidental assignment from a temporary. /// /// The declaration here is extra complicated so that "arrayRef = {}" /// continues to select the move assignment operator. template typename std::enable_if::value, ArrayRef>::type & operator=(U &&Temporary) = delete; /// Disallow accidental assignment from a temporary. /// /// The declaration here is extra complicated so that "arrayRef = {}" /// continues to select the move assignment operator. template typename std::enable_if::value, ArrayRef>::type & operator=(std::initializer_list) = delete; /// @} /// @name Expensive Operations /// @{ std::vector vec() const { return std::vector(Data, Data+Length); } /// @} /// @name Conversion operators /// @{ operator std::vector() const { return std::vector(Data, Data+Length); } /// @} }; /// MutableArrayRef - Represent a mutable reference to an array (0 or more /// elements consecutively in memory), i.e. a start pointer and a length. It /// allows various APIs to take and modify consecutive elements easily and /// conveniently. /// /// This class does not own the underlying data, it is expected to be used in /// situations where the data resides in some other buffer, whose lifetime /// extends past that of the MutableArrayRef. For this reason, it is not in /// general safe to store a MutableArrayRef. /// /// This is intended to be trivially copyable, so it should be passed by /// value. template class LLVM_NODISCARD MutableArrayRef : public ArrayRef { public: using iterator = T *; using reverse_iterator = std::reverse_iterator; /// Construct an empty MutableArrayRef. /*implicit*/ MutableArrayRef() = default; /// Construct an empty MutableArrayRef from None. /*implicit*/ MutableArrayRef(NoneType) : ArrayRef() {} /// Construct an MutableArrayRef from a single element. /*implicit*/ MutableArrayRef(T &OneElt) : ArrayRef(OneElt) {} /// Construct an MutableArrayRef from a pointer and length. /*implicit*/ MutableArrayRef(T *data, size_t length) : ArrayRef(data, length) {} /// Construct an MutableArrayRef from a range. MutableArrayRef(T *begin, T *end) : ArrayRef(begin, end) {} /// Construct an MutableArrayRef from a SmallVector. /*implicit*/ MutableArrayRef(SmallVectorImpl &Vec) : ArrayRef(Vec) {} /// Construct a MutableArrayRef from a std::vector. /*implicit*/ MutableArrayRef(std::vector &Vec) : ArrayRef(Vec) {} /// Construct an ArrayRef from a std::array template /*implicit*/ constexpr MutableArrayRef(std::array &Arr) : ArrayRef(Arr) {} /// Construct an MutableArrayRef from a C array. template /*implicit*/ constexpr MutableArrayRef(T (&Arr)[N]) : ArrayRef(Arr) {} T *data() const { return const_cast(ArrayRef::data()); } iterator begin() const { return data(); } iterator end() const { return data() + this->size(); } reverse_iterator rbegin() const { return reverse_iterator(end()); } reverse_iterator rend() const { return reverse_iterator(begin()); } /// front - Get the first element. T &front() const { assert(!this->empty()); return data()[0]; } /// back - Get the last element. T &back() const { assert(!this->empty()); return data()[this->size()-1]; } /// slice(n, m) - Chop off the first N elements of the array, and keep M /// elements in the array. MutableArrayRef slice(size_t N, size_t M) const { assert(N + M <= this->size() && "Invalid specifier"); return MutableArrayRef(this->data() + N, M); } /// slice(n) - Chop off the first N elements of the array. MutableArrayRef slice(size_t N) const { return slice(N, this->size() - N); } /// Drop the first \p N elements of the array. MutableArrayRef drop_front(size_t N = 1) const { assert(this->size() >= N && "Dropping more elements than exist"); return slice(N, this->size() - N); } MutableArrayRef drop_back(size_t N = 1) const { assert(this->size() >= N && "Dropping more elements than exist"); return slice(0, this->size() - N); } /// Return a copy of *this with the first N elements satisfying the /// given predicate removed. template MutableArrayRef drop_while(PredicateT Pred) const { return MutableArrayRef(find_if_not(*this, Pred), end()); } /// Return a copy of *this with the first N elements not satisfying /// the given predicate removed. template MutableArrayRef drop_until(PredicateT Pred) const { return MutableArrayRef(find_if(*this, Pred), end()); } /// Return a copy of *this with only the first \p N elements. MutableArrayRef take_front(size_t N = 1) const { if (N >= this->size()) return *this; return drop_back(this->size() - N); } /// Return a copy of *this with only the last \p N elements. MutableArrayRef take_back(size_t N = 1) const { if (N >= this->size()) return *this; return drop_front(this->size() - N); } /// Return the first N elements of this Array that satisfy the given /// predicate. template MutableArrayRef take_while(PredicateT Pred) const { return MutableArrayRef(begin(), find_if_not(*this, Pred)); } /// Return the first N elements of this Array that don't satisfy the /// given predicate. template MutableArrayRef take_until(PredicateT Pred) const { return MutableArrayRef(begin(), find_if(*this, Pred)); } /// @} /// @name Operator Overloads /// @{ T &operator[](size_t Index) const { assert(Index < this->size() && "Invalid index!"); return data()[Index]; } }; /// This is a MutableArrayRef that owns its array. template class OwningArrayRef : public MutableArrayRef { public: OwningArrayRef() = default; OwningArrayRef(size_t Size) : MutableArrayRef(new T[Size], Size) {} OwningArrayRef(ArrayRef Data) : MutableArrayRef(new T[Data.size()], Data.size()) { std::copy(Data.begin(), Data.end(), this->begin()); } OwningArrayRef(OwningArrayRef &&Other) { *this = std::move(Other); } OwningArrayRef &operator=(OwningArrayRef &&Other) { delete[] this->data(); this->MutableArrayRef::operator=(Other); Other.MutableArrayRef::operator=(MutableArrayRef()); return *this; } ~OwningArrayRef() { delete[] this->data(); } }; /// @name ArrayRef Convenience constructors /// @{ /// Construct an ArrayRef from a single element. template ArrayRef makeArrayRef(const T &OneElt) { return OneElt; } /// Construct an ArrayRef from a pointer and length. template ArrayRef makeArrayRef(const T *data, size_t length) { return ArrayRef(data, length); } /// Construct an ArrayRef from a range. template ArrayRef makeArrayRef(const T *begin, const T *end) { return ArrayRef(begin, end); } /// Construct an ArrayRef from a SmallVector. template ArrayRef makeArrayRef(const SmallVectorImpl &Vec) { return Vec; } /// Construct an ArrayRef from a SmallVector. template ArrayRef makeArrayRef(const SmallVector &Vec) { return Vec; } /// Construct an ArrayRef from a std::vector. template ArrayRef makeArrayRef(const std::vector &Vec) { return Vec; } /// Construct an ArrayRef from a std::array. template ArrayRef makeArrayRef(const std::array &Arr) { return Arr; } /// Construct an ArrayRef from an ArrayRef (no-op) (const) template ArrayRef makeArrayRef(const ArrayRef &Vec) { return Vec; } /// Construct an ArrayRef from an ArrayRef (no-op) template ArrayRef &makeArrayRef(ArrayRef &Vec) { return Vec; } /// Construct an ArrayRef from a C array. template ArrayRef makeArrayRef(const T (&Arr)[N]) { return ArrayRef(Arr); } /// Construct a MutableArrayRef from a single element. template MutableArrayRef makeMutableArrayRef(T &OneElt) { return OneElt; } /// Construct a MutableArrayRef from a pointer and length. template MutableArrayRef makeMutableArrayRef(T *data, size_t length) { return MutableArrayRef(data, length); } /// @} /// @name ArrayRef Comparison Operators /// @{ template inline bool operator==(ArrayRef LHS, ArrayRef RHS) { return LHS.equals(RHS); } template inline bool operator!=(ArrayRef LHS, ArrayRef RHS) { return !(LHS == RHS); } /// @} template hash_code hash_value(ArrayRef S) { return hash_combine_range(S.begin(), S.end()); } } // end namespace llvm #endif // LLVM_ADT_ARRAYREF_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/BitmaskEnum.h000066400000000000000000000127171423707623100273210ustar00rootroot00000000000000//===-- llvm/ADT/BitmaskEnum.h ----------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_BITMASKENUM_H #define LLVM_ADT_BITMASKENUM_H #include #include #include #include "llvm/Support/MathExtras.h" /// LLVM_MARK_AS_BITMASK_ENUM lets you opt in an individual enum type so you can /// perform bitwise operations on it without putting static_cast everywhere. /// /// \code /// enum MyEnum { /// E1 = 1, E2 = 2, E3 = 4, E4 = 8, /// LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ E4) /// }; /// /// void Foo() { /// MyEnum A = (E1 | E2) & E3 ^ ~E4; // Look, ma: No static_cast! /// } /// \endcode /// /// Normally when you do a bitwise operation on an enum value, you get back an /// instance of the underlying type (e.g. int). But using this macro, bitwise /// ops on your enum will return you back instances of the enum. This is /// particularly useful for enums which represent a combination of flags. /// /// The parameter to LLVM_MARK_AS_BITMASK_ENUM should be the largest individual /// value in your enum. /// /// All of the enum's values must be non-negative. #define LLVM_MARK_AS_BITMASK_ENUM(LargestValue) \ LLVM_BITMASK_LARGEST_ENUMERATOR = LargestValue /// LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE() pulls the operator overloads used /// by LLVM_MARK_AS_BITMASK_ENUM into the current namespace. /// /// Suppose you have an enum foo::bar::MyEnum. Before using /// LLVM_MARK_AS_BITMASK_ENUM on MyEnum, you must put /// LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE() somewhere inside namespace foo or /// namespace foo::bar. This allows the relevant operator overloads to be found /// by ADL. /// /// You don't need to use this macro in namespace llvm; it's done at the bottom /// of this file. #define LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE() \ using ::llvm::BitmaskEnumDetail::operator~; \ using ::llvm::BitmaskEnumDetail::operator|; \ using ::llvm::BitmaskEnumDetail::operator&; \ using ::llvm::BitmaskEnumDetail::operator^; \ using ::llvm::BitmaskEnumDetail::operator|=; \ using ::llvm::BitmaskEnumDetail::operator&=; \ /* Force a semicolon at the end of this macro. */ \ using ::llvm::BitmaskEnumDetail::operator^= namespace llvm { /// Traits class to determine whether an enum has a /// LLVM_BITMASK_LARGEST_ENUMERATOR enumerator. template struct is_bitmask_enum : std::false_type {}; template struct is_bitmask_enum< E, typename std::enable_if= 0>::type> : std::true_type {}; namespace BitmaskEnumDetail { /// Get a bitmask with 1s in all places up to the high-order bit of E's largest /// value. template typename std::underlying_type::type Mask() { // On overflow, NextPowerOf2 returns zero with the type uint64_t, so // subtracting 1 gives us the mask with all bits set, like we want. return NextPowerOf2(static_cast::type>( E::LLVM_BITMASK_LARGEST_ENUMERATOR)) - 1; } /// Check that Val is in range for E, and return Val cast to E's underlying /// type. template typename std::underlying_type::type Underlying(E Val) { auto U = static_cast::type>(Val); assert(U >= 0 && "Negative enum values are not allowed."); assert(U <= Mask() && "Enum value too large (or largest val too small?)"); return U; } template ::value>::type> E operator~(E Val) { return static_cast(~Underlying(Val) & Mask()); } template ::value>::type> E operator|(E LHS, E RHS) { return static_cast(Underlying(LHS) | Underlying(RHS)); } template ::value>::type> E operator&(E LHS, E RHS) { return static_cast(Underlying(LHS) & Underlying(RHS)); } template ::value>::type> E operator^(E LHS, E RHS) { return static_cast(Underlying(LHS) ^ Underlying(RHS)); } // |=, &=, and ^= return a reference to LHS, to match the behavior of the // operators on builtin types. template ::value>::type> E &operator|=(E &LHS, E RHS) { LHS = LHS | RHS; return LHS; } template ::value>::type> E &operator&=(E &LHS, E RHS) { LHS = LHS & RHS; return LHS; } template ::value>::type> E &operator^=(E &LHS, E RHS) { LHS = LHS ^ RHS; return LHS; } } // namespace BitmaskEnumDetail // Enable bitmask enums in namespace ::llvm and all nested namespaces. LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE(); } // namespace llvm #endif binaryen-version_108/third_party/llvm-project/include/llvm/ADT/DenseMap.h000066400000000000000000001220651423707623100265740ustar00rootroot00000000000000//===- llvm/ADT/DenseMap.h - Dense probed hash table ------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the DenseMap class. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_DENSEMAP_H #define LLVM_ADT_DENSEMAP_H #include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/EpochTracker.h" #include "llvm/Support/AlignOf.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/ReverseIteration.h" #include "llvm/Support/type_traits.h" #include #include #include #include #include #include #include #include #include namespace llvm { namespace detail { // We extend a pair to allow users to override the bucket type with their own // implementation without requiring two members. template struct DenseMapPair : public std::pair { using std::pair::pair; KeyT &getFirst() { return std::pair::first; } const KeyT &getFirst() const { return std::pair::first; } ValueT &getSecond() { return std::pair::second; } const ValueT &getSecond() const { return std::pair::second; } }; } // end namespace detail template , typename Bucket = llvm::detail::DenseMapPair, bool IsConst = false> class DenseMapIterator; template class DenseMapBase : public DebugEpochBase { template using const_arg_type_t = typename const_pointer_or_const_ref::type; public: using size_type = unsigned; using key_type = KeyT; using mapped_type = ValueT; using value_type = BucketT; using iterator = DenseMapIterator; using const_iterator = DenseMapIterator; inline iterator begin() { // When the map is empty, avoid the overhead of advancing/retreating past // empty buckets. if (empty()) return end(); if (shouldReverseIterate()) return makeIterator(getBucketsEnd() - 1, getBuckets(), *this); return makeIterator(getBuckets(), getBucketsEnd(), *this); } inline iterator end() { return makeIterator(getBucketsEnd(), getBucketsEnd(), *this, true); } inline const_iterator begin() const { if (empty()) return end(); if (shouldReverseIterate()) return makeConstIterator(getBucketsEnd() - 1, getBuckets(), *this); return makeConstIterator(getBuckets(), getBucketsEnd(), *this); } inline const_iterator end() const { return makeConstIterator(getBucketsEnd(), getBucketsEnd(), *this, true); } LLVM_NODISCARD bool empty() const { return getNumEntries() == 0; } unsigned size() const { return getNumEntries(); } /// Grow the densemap so that it can contain at least \p NumEntries items /// before resizing again. void reserve(size_type NumEntries) { auto NumBuckets = getMinBucketToReserveForEntries(NumEntries); incrementEpoch(); if (NumBuckets > getNumBuckets()) grow(NumBuckets); } void clear() { incrementEpoch(); if (getNumEntries() == 0 && getNumTombstones() == 0) return; // If the capacity of the array is huge, and the # elements used is small, // shrink the array. if (getNumEntries() * 4 < getNumBuckets() && getNumBuckets() > 64) { shrink_and_clear(); return; } const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey(); if (is_trivially_copyable::value && is_trivially_copyable::value) { // Use a simpler loop when these are trivial types. for (BucketT *P = getBuckets(), *E = getBucketsEnd(); P != E; ++P) P->getFirst() = EmptyKey; } else { unsigned NumEntries = getNumEntries(); for (BucketT *P = getBuckets(), *E = getBucketsEnd(); P != E; ++P) { if (!KeyInfoT::isEqual(P->getFirst(), EmptyKey)) { if (!KeyInfoT::isEqual(P->getFirst(), TombstoneKey)) { P->getSecond().~ValueT(); --NumEntries; } P->getFirst() = EmptyKey; } } assert(NumEntries == 0 && "Node count imbalance!"); } setNumEntries(0); setNumTombstones(0); } /// Return 1 if the specified key is in the map, 0 otherwise. size_type count(const_arg_type_t Val) const { const BucketT *TheBucket; return LookupBucketFor(Val, TheBucket) ? 1 : 0; } iterator find(const_arg_type_t Val) { BucketT *TheBucket; if (LookupBucketFor(Val, TheBucket)) return makeIterator(TheBucket, getBucketsEnd(), *this, true); return end(); } const_iterator find(const_arg_type_t Val) const { const BucketT *TheBucket; if (LookupBucketFor(Val, TheBucket)) return makeConstIterator(TheBucket, getBucketsEnd(), *this, true); return end(); } /// Alternate version of find() which allows a different, and possibly /// less expensive, key type. /// The DenseMapInfo is responsible for supplying methods /// getHashValue(LookupKeyT) and isEqual(LookupKeyT, KeyT) for each key /// type used. template iterator find_as(const LookupKeyT &Val) { BucketT *TheBucket; if (LookupBucketFor(Val, TheBucket)) return makeIterator(TheBucket, getBucketsEnd(), *this, true); return end(); } template const_iterator find_as(const LookupKeyT &Val) const { const BucketT *TheBucket; if (LookupBucketFor(Val, TheBucket)) return makeConstIterator(TheBucket, getBucketsEnd(), *this, true); return end(); } /// lookup - Return the entry for the specified key, or a default /// constructed value if no such entry exists. ValueT lookup(const_arg_type_t Val) const { const BucketT *TheBucket; if (LookupBucketFor(Val, TheBucket)) return TheBucket->getSecond(); return ValueT(); } // Inserts key,value pair into the map if the key isn't already in the map. // If the key is already in the map, it returns false and doesn't update the // value. std::pair insert(const std::pair &KV) { return try_emplace(KV.first, KV.second); } // Inserts key,value pair into the map if the key isn't already in the map. // If the key is already in the map, it returns false and doesn't update the // value. std::pair insert(std::pair &&KV) { return try_emplace(std::move(KV.first), std::move(KV.second)); } // Inserts key,value pair into the map if the key isn't already in the map. // The value is constructed in-place if the key is not in the map, otherwise // it is not moved. template std::pair try_emplace(KeyT &&Key, Ts &&... Args) { BucketT *TheBucket; if (LookupBucketFor(Key, TheBucket)) return std::make_pair( makeIterator(TheBucket, getBucketsEnd(), *this, true), false); // Already in map. // Otherwise, insert the new element. TheBucket = InsertIntoBucket(TheBucket, std::move(Key), std::forward(Args)...); return std::make_pair( makeIterator(TheBucket, getBucketsEnd(), *this, true), true); } // Inserts key,value pair into the map if the key isn't already in the map. // The value is constructed in-place if the key is not in the map, otherwise // it is not moved. template std::pair try_emplace(const KeyT &Key, Ts &&... Args) { BucketT *TheBucket; if (LookupBucketFor(Key, TheBucket)) return std::make_pair( makeIterator(TheBucket, getBucketsEnd(), *this, true), false); // Already in map. // Otherwise, insert the new element. TheBucket = InsertIntoBucket(TheBucket, Key, std::forward(Args)...); return std::make_pair( makeIterator(TheBucket, getBucketsEnd(), *this, true), true); } /// Alternate version of insert() which allows a different, and possibly /// less expensive, key type. /// The DenseMapInfo is responsible for supplying methods /// getHashValue(LookupKeyT) and isEqual(LookupKeyT, KeyT) for each key /// type used. template std::pair insert_as(std::pair &&KV, const LookupKeyT &Val) { BucketT *TheBucket; if (LookupBucketFor(Val, TheBucket)) return std::make_pair( makeIterator(TheBucket, getBucketsEnd(), *this, true), false); // Already in map. // Otherwise, insert the new element. TheBucket = InsertIntoBucketWithLookup(TheBucket, std::move(KV.first), std::move(KV.second), Val); return std::make_pair( makeIterator(TheBucket, getBucketsEnd(), *this, true), true); } /// insert - Range insertion of pairs. template void insert(InputIt I, InputIt E) { for (; I != E; ++I) insert(*I); } bool erase(const KeyT &Val) { BucketT *TheBucket; if (!LookupBucketFor(Val, TheBucket)) return false; // not in map. TheBucket->getSecond().~ValueT(); TheBucket->getFirst() = getTombstoneKey(); decrementNumEntries(); incrementNumTombstones(); return true; } void erase(iterator I) { BucketT *TheBucket = &*I; TheBucket->getSecond().~ValueT(); TheBucket->getFirst() = getTombstoneKey(); decrementNumEntries(); incrementNumTombstones(); } value_type& FindAndConstruct(const KeyT &Key) { BucketT *TheBucket; if (LookupBucketFor(Key, TheBucket)) return *TheBucket; return *InsertIntoBucket(TheBucket, Key); } ValueT &operator[](const KeyT &Key) { return FindAndConstruct(Key).second; } value_type& FindAndConstruct(KeyT &&Key) { BucketT *TheBucket; if (LookupBucketFor(Key, TheBucket)) return *TheBucket; return *InsertIntoBucket(TheBucket, std::move(Key)); } ValueT &operator[](KeyT &&Key) { return FindAndConstruct(std::move(Key)).second; } /// isPointerIntoBucketsArray - Return true if the specified pointer points /// somewhere into the DenseMap's array of buckets (i.e. either to a key or /// value in the DenseMap). bool isPointerIntoBucketsArray(const void *Ptr) const { return Ptr >= getBuckets() && Ptr < getBucketsEnd(); } /// getPointerIntoBucketsArray() - Return an opaque pointer into the buckets /// array. In conjunction with the previous method, this can be used to /// determine whether an insertion caused the DenseMap to reallocate. const void *getPointerIntoBucketsArray() const { return getBuckets(); } protected: DenseMapBase() = default; void destroyAll() { if (getNumBuckets() == 0) // Nothing to do. return; const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey(); for (BucketT *P = getBuckets(), *E = getBucketsEnd(); P != E; ++P) { if (!KeyInfoT::isEqual(P->getFirst(), EmptyKey) && !KeyInfoT::isEqual(P->getFirst(), TombstoneKey)) P->getSecond().~ValueT(); P->getFirst().~KeyT(); } } void initEmpty() { setNumEntries(0); setNumTombstones(0); assert((getNumBuckets() & (getNumBuckets()-1)) == 0 && "# initial buckets must be a power of two!"); const KeyT EmptyKey = getEmptyKey(); for (BucketT *B = getBuckets(), *E = getBucketsEnd(); B != E; ++B) ::new (&B->getFirst()) KeyT(EmptyKey); } /// Returns the number of buckets to allocate to ensure that the DenseMap can /// accommodate \p NumEntries without need to grow(). unsigned getMinBucketToReserveForEntries(unsigned NumEntries) { // Ensure that "NumEntries * 4 < NumBuckets * 3" if (NumEntries == 0) return 0; // +1 is required because of the strict equality. // For example if NumEntries is 48, we need to return 401. return NextPowerOf2(NumEntries * 4 / 3 + 1); } void moveFromOldBuckets(BucketT *OldBucketsBegin, BucketT *OldBucketsEnd) { initEmpty(); // Insert all the old elements. const KeyT EmptyKey = getEmptyKey(); const KeyT TombstoneKey = getTombstoneKey(); for (BucketT *B = OldBucketsBegin, *E = OldBucketsEnd; B != E; ++B) { if (!KeyInfoT::isEqual(B->getFirst(), EmptyKey) && !KeyInfoT::isEqual(B->getFirst(), TombstoneKey)) { // Insert the key/value into the new table. BucketT *DestBucket; bool FoundVal = LookupBucketFor(B->getFirst(), DestBucket); (void)FoundVal; // silence warning. assert(!FoundVal && "Key already in new map?"); DestBucket->getFirst() = std::move(B->getFirst()); ::new (&DestBucket->getSecond()) ValueT(std::move(B->getSecond())); incrementNumEntries(); // Free the value. B->getSecond().~ValueT(); } B->getFirst().~KeyT(); } } template void copyFrom( const DenseMapBase &other) { assert(&other != this); assert(getNumBuckets() == other.getNumBuckets()); setNumEntries(other.getNumEntries()); setNumTombstones(other.getNumTombstones()); if (is_trivially_copyable::value && is_trivially_copyable::value) memcpy(reinterpret_cast(getBuckets()), other.getBuckets(), getNumBuckets() * sizeof(BucketT)); else for (size_t i = 0; i < getNumBuckets(); ++i) { ::new (&getBuckets()[i].getFirst()) KeyT(other.getBuckets()[i].getFirst()); if (!KeyInfoT::isEqual(getBuckets()[i].getFirst(), getEmptyKey()) && !KeyInfoT::isEqual(getBuckets()[i].getFirst(), getTombstoneKey())) ::new (&getBuckets()[i].getSecond()) ValueT(other.getBuckets()[i].getSecond()); } } static unsigned getHashValue(const KeyT &Val) { return KeyInfoT::getHashValue(Val); } template static unsigned getHashValue(const LookupKeyT &Val) { return KeyInfoT::getHashValue(Val); } static const KeyT getEmptyKey() { static_assert(std::is_base_of::value, "Must pass the derived type to this template!"); return KeyInfoT::getEmptyKey(); } static const KeyT getTombstoneKey() { return KeyInfoT::getTombstoneKey(); } private: iterator makeIterator(BucketT *P, BucketT *E, DebugEpochBase &Epoch, bool NoAdvance=false) { if (shouldReverseIterate()) { BucketT *B = P == getBucketsEnd() ? getBuckets() : P + 1; return iterator(B, E, Epoch, NoAdvance); } return iterator(P, E, Epoch, NoAdvance); } const_iterator makeConstIterator(const BucketT *P, const BucketT *E, const DebugEpochBase &Epoch, const bool NoAdvance=false) const { if (shouldReverseIterate()) { const BucketT *B = P == getBucketsEnd() ? getBuckets() : P + 1; return const_iterator(B, E, Epoch, NoAdvance); } return const_iterator(P, E, Epoch, NoAdvance); } unsigned getNumEntries() const { return static_cast(this)->getNumEntries(); } void setNumEntries(unsigned Num) { static_cast(this)->setNumEntries(Num); } void incrementNumEntries() { setNumEntries(getNumEntries() + 1); } void decrementNumEntries() { setNumEntries(getNumEntries() - 1); } unsigned getNumTombstones() const { return static_cast(this)->getNumTombstones(); } void setNumTombstones(unsigned Num) { static_cast(this)->setNumTombstones(Num); } void incrementNumTombstones() { setNumTombstones(getNumTombstones() + 1); } void decrementNumTombstones() { setNumTombstones(getNumTombstones() - 1); } const BucketT *getBuckets() const { return static_cast(this)->getBuckets(); } BucketT *getBuckets() { return static_cast(this)->getBuckets(); } unsigned getNumBuckets() const { return static_cast(this)->getNumBuckets(); } BucketT *getBucketsEnd() { return getBuckets() + getNumBuckets(); } const BucketT *getBucketsEnd() const { return getBuckets() + getNumBuckets(); } void grow(unsigned AtLeast) { static_cast(this)->grow(AtLeast); } void shrink_and_clear() { static_cast(this)->shrink_and_clear(); } template BucketT *InsertIntoBucket(BucketT *TheBucket, KeyArg &&Key, ValueArgs &&... Values) { TheBucket = InsertIntoBucketImpl(Key, Key, TheBucket); TheBucket->getFirst() = std::forward(Key); ::new (&TheBucket->getSecond()) ValueT(std::forward(Values)...); return TheBucket; } template BucketT *InsertIntoBucketWithLookup(BucketT *TheBucket, KeyT &&Key, ValueT &&Value, LookupKeyT &Lookup) { TheBucket = InsertIntoBucketImpl(Key, Lookup, TheBucket); TheBucket->getFirst() = std::move(Key); ::new (&TheBucket->getSecond()) ValueT(std::move(Value)); return TheBucket; } template BucketT *InsertIntoBucketImpl(const KeyT &Key, const LookupKeyT &Lookup, BucketT *TheBucket) { incrementEpoch(); // If the load of the hash table is more than 3/4, or if fewer than 1/8 of // the buckets are empty (meaning that many are filled with tombstones), // grow the table. // // The later case is tricky. For example, if we had one empty bucket with // tons of tombstones, failing lookups (e.g. for insertion) would have to // probe almost the entire table until it found the empty bucket. If the // table completely filled with tombstones, no lookup would ever succeed, // causing infinite loops in lookup. unsigned NewNumEntries = getNumEntries() + 1; unsigned NumBuckets = getNumBuckets(); if (LLVM_UNLIKELY(NewNumEntries * 4 >= NumBuckets * 3)) { this->grow(NumBuckets * 2); LookupBucketFor(Lookup, TheBucket); NumBuckets = getNumBuckets(); } else if (LLVM_UNLIKELY(NumBuckets-(NewNumEntries+getNumTombstones()) <= NumBuckets/8)) { this->grow(NumBuckets); LookupBucketFor(Lookup, TheBucket); } assert(TheBucket); // Only update the state after we've grown our bucket space appropriately // so that when growing buckets we have self-consistent entry count. incrementNumEntries(); // If we are writing over a tombstone, remember this. const KeyT EmptyKey = getEmptyKey(); if (!KeyInfoT::isEqual(TheBucket->getFirst(), EmptyKey)) decrementNumTombstones(); return TheBucket; } /// LookupBucketFor - Lookup the appropriate bucket for Val, returning it in /// FoundBucket. If the bucket contains the key and a value, this returns /// true, otherwise it returns a bucket with an empty marker or tombstone and /// returns false. template bool LookupBucketFor(const LookupKeyT &Val, const BucketT *&FoundBucket) const { const BucketT *BucketsPtr = getBuckets(); const unsigned NumBuckets = getNumBuckets(); if (NumBuckets == 0) { FoundBucket = nullptr; return false; } // FoundTombstone - Keep track of whether we find a tombstone while probing. const BucketT *FoundTombstone = nullptr; const KeyT EmptyKey = getEmptyKey(); const KeyT TombstoneKey = getTombstoneKey(); assert(!KeyInfoT::isEqual(Val, EmptyKey) && !KeyInfoT::isEqual(Val, TombstoneKey) && "Empty/Tombstone value shouldn't be inserted into map!"); unsigned BucketNo = getHashValue(Val) & (NumBuckets-1); unsigned ProbeAmt = 1; while (true) { const BucketT *ThisBucket = BucketsPtr + BucketNo; // Found Val's bucket? If so, return it. if (LLVM_LIKELY(KeyInfoT::isEqual(Val, ThisBucket->getFirst()))) { FoundBucket = ThisBucket; return true; } // If we found an empty bucket, the key doesn't exist in the set. // Insert it and return the default value. if (LLVM_LIKELY(KeyInfoT::isEqual(ThisBucket->getFirst(), EmptyKey))) { // If we've already seen a tombstone while probing, fill it in instead // of the empty bucket we eventually probed to. FoundBucket = FoundTombstone ? FoundTombstone : ThisBucket; return false; } // If this is a tombstone, remember it. If Val ends up not in the map, we // prefer to return it than something that would require more probing. if (KeyInfoT::isEqual(ThisBucket->getFirst(), TombstoneKey) && !FoundTombstone) FoundTombstone = ThisBucket; // Remember the first tombstone found. // Otherwise, it's a hash collision or a tombstone, continue quadratic // probing. BucketNo += ProbeAmt++; BucketNo &= (NumBuckets-1); } } template bool LookupBucketFor(const LookupKeyT &Val, BucketT *&FoundBucket) { const BucketT *ConstFoundBucket; bool Result = const_cast(this) ->LookupBucketFor(Val, ConstFoundBucket); FoundBucket = const_cast(ConstFoundBucket); return Result; } public: /// Return the approximate size (in bytes) of the actual map. /// This is just the raw memory used by DenseMap. /// If entries are pointers to objects, the size of the referenced objects /// are not included. size_t getMemorySize() const { return getNumBuckets() * sizeof(BucketT); } }; /// Equality comparison for DenseMap. /// /// Iterates over elements of LHS confirming that each (key, value) pair in LHS /// is also in RHS, and that no additional pairs are in RHS. /// Equivalent to N calls to RHS.find and N value comparisons. Amortized /// complexity is linear, worst case is O(N^2) (if every hash collides). template bool operator==( const DenseMapBase &LHS, const DenseMapBase &RHS) { if (LHS.size() != RHS.size()) return false; for (auto &KV : LHS) { auto I = RHS.find(KV.first); if (I == RHS.end() || I->second != KV.second) return false; } return true; } /// Inequality comparison for DenseMap. /// /// Equivalent to !(LHS == RHS). See operator== for performance notes. template bool operator!=( const DenseMapBase &LHS, const DenseMapBase &RHS) { return !(LHS == RHS); } template , typename BucketT = llvm::detail::DenseMapPair> class DenseMap : public DenseMapBase, KeyT, ValueT, KeyInfoT, BucketT> { friend class DenseMapBase; // Lift some types from the dependent base class into this class for // simplicity of referring to them. using BaseT = DenseMapBase; BucketT *Buckets; unsigned NumEntries; unsigned NumTombstones; unsigned NumBuckets; public: /// Create a DenseMap wth an optional \p InitialReserve that guarantee that /// this number of elements can be inserted in the map without grow() explicit DenseMap(unsigned InitialReserve = 0) { init(InitialReserve); } DenseMap(const DenseMap &other) : BaseT() { init(0); copyFrom(other); } DenseMap(DenseMap &&other) : BaseT() { init(0); swap(other); } template DenseMap(const InputIt &I, const InputIt &E) { init(std::distance(I, E)); this->insert(I, E); } DenseMap(std::initializer_list Vals) { init(Vals.size()); this->insert(Vals.begin(), Vals.end()); } ~DenseMap() { this->destroyAll(); deallocate_buffer(Buckets, sizeof(BucketT) * NumBuckets, alignof(BucketT)); } void swap(DenseMap& RHS) { this->incrementEpoch(); RHS.incrementEpoch(); std::swap(Buckets, RHS.Buckets); std::swap(NumEntries, RHS.NumEntries); std::swap(NumTombstones, RHS.NumTombstones); std::swap(NumBuckets, RHS.NumBuckets); } DenseMap& operator=(const DenseMap& other) { if (&other != this) copyFrom(other); return *this; } DenseMap& operator=(DenseMap &&other) { this->destroyAll(); deallocate_buffer(Buckets, sizeof(BucketT) * NumBuckets, alignof(BucketT)); init(0); swap(other); return *this; } void copyFrom(const DenseMap& other) { this->destroyAll(); deallocate_buffer(Buckets, sizeof(BucketT) * NumBuckets, alignof(BucketT)); if (allocateBuckets(other.NumBuckets)) { this->BaseT::copyFrom(other); } else { NumEntries = 0; NumTombstones = 0; } } void init(unsigned InitNumEntries) { auto InitBuckets = BaseT::getMinBucketToReserveForEntries(InitNumEntries); if (allocateBuckets(InitBuckets)) { this->BaseT::initEmpty(); } else { NumEntries = 0; NumTombstones = 0; } } void grow(unsigned AtLeast) { unsigned OldNumBuckets = NumBuckets; BucketT *OldBuckets = Buckets; allocateBuckets(std::max(64, static_cast(NextPowerOf2(AtLeast-1)))); assert(Buckets); if (!OldBuckets) { this->BaseT::initEmpty(); return; } this->moveFromOldBuckets(OldBuckets, OldBuckets+OldNumBuckets); // Free the old table. deallocate_buffer(OldBuckets, sizeof(BucketT) * OldNumBuckets, alignof(BucketT)); } void shrink_and_clear() { unsigned OldNumBuckets = NumBuckets; unsigned OldNumEntries = NumEntries; this->destroyAll(); // Reduce the number of buckets. unsigned NewNumBuckets = 0; if (OldNumEntries) NewNumBuckets = std::max(64, 1 << (Log2_32_Ceil(OldNumEntries) + 1)); if (NewNumBuckets == NumBuckets) { this->BaseT::initEmpty(); return; } deallocate_buffer(Buckets, sizeof(BucketT) * OldNumBuckets, alignof(BucketT)); init(NewNumBuckets); } private: unsigned getNumEntries() const { return NumEntries; } void setNumEntries(unsigned Num) { NumEntries = Num; } unsigned getNumTombstones() const { return NumTombstones; } void setNumTombstones(unsigned Num) { NumTombstones = Num; } BucketT *getBuckets() const { return Buckets; } unsigned getNumBuckets() const { return NumBuckets; } bool allocateBuckets(unsigned Num) { NumBuckets = Num; if (NumBuckets == 0) { Buckets = nullptr; return false; } Buckets = static_cast( allocate_buffer(sizeof(BucketT) * NumBuckets, alignof(BucketT))); return true; } }; template , typename BucketT = llvm::detail::DenseMapPair> class SmallDenseMap : public DenseMapBase< SmallDenseMap, KeyT, ValueT, KeyInfoT, BucketT> { friend class DenseMapBase; // Lift some types from the dependent base class into this class for // simplicity of referring to them. using BaseT = DenseMapBase; static_assert(isPowerOf2_64(InlineBuckets), "InlineBuckets must be a power of 2."); unsigned Small : 1; unsigned NumEntries : 31; unsigned NumTombstones; struct LargeRep { BucketT *Buckets; unsigned NumBuckets; }; /// A "union" of an inline bucket array and the struct representing /// a large bucket. This union will be discriminated by the 'Small' bit. AlignedCharArrayUnion storage; public: explicit SmallDenseMap(unsigned NumInitBuckets = 0) { init(NumInitBuckets); } SmallDenseMap(const SmallDenseMap &other) : BaseT() { init(0); copyFrom(other); } SmallDenseMap(SmallDenseMap &&other) : BaseT() { init(0); swap(other); } template SmallDenseMap(const InputIt &I, const InputIt &E) { init(NextPowerOf2(std::distance(I, E))); this->insert(I, E); } ~SmallDenseMap() { this->destroyAll(); deallocateBuckets(); } void swap(SmallDenseMap& RHS) { unsigned TmpNumEntries = RHS.NumEntries; RHS.NumEntries = NumEntries; NumEntries = TmpNumEntries; std::swap(NumTombstones, RHS.NumTombstones); const KeyT EmptyKey = this->getEmptyKey(); const KeyT TombstoneKey = this->getTombstoneKey(); if (Small && RHS.Small) { // If we're swapping inline bucket arrays, we have to cope with some of // the tricky bits of DenseMap's storage system: the buckets are not // fully initialized. Thus we swap every key, but we may have // a one-directional move of the value. for (unsigned i = 0, e = InlineBuckets; i != e; ++i) { BucketT *LHSB = &getInlineBuckets()[i], *RHSB = &RHS.getInlineBuckets()[i]; bool hasLHSValue = (!KeyInfoT::isEqual(LHSB->getFirst(), EmptyKey) && !KeyInfoT::isEqual(LHSB->getFirst(), TombstoneKey)); bool hasRHSValue = (!KeyInfoT::isEqual(RHSB->getFirst(), EmptyKey) && !KeyInfoT::isEqual(RHSB->getFirst(), TombstoneKey)); if (hasLHSValue && hasRHSValue) { // Swap together if we can... std::swap(*LHSB, *RHSB); continue; } // Swap separately and handle any assymetry. std::swap(LHSB->getFirst(), RHSB->getFirst()); if (hasLHSValue) { ::new (&RHSB->getSecond()) ValueT(std::move(LHSB->getSecond())); LHSB->getSecond().~ValueT(); } else if (hasRHSValue) { ::new (&LHSB->getSecond()) ValueT(std::move(RHSB->getSecond())); RHSB->getSecond().~ValueT(); } } return; } if (!Small && !RHS.Small) { std::swap(getLargeRep()->Buckets, RHS.getLargeRep()->Buckets); std::swap(getLargeRep()->NumBuckets, RHS.getLargeRep()->NumBuckets); return; } SmallDenseMap &SmallSide = Small ? *this : RHS; SmallDenseMap &LargeSide = Small ? RHS : *this; // First stash the large side's rep and move the small side across. LargeRep TmpRep = std::move(*LargeSide.getLargeRep()); LargeSide.getLargeRep()->~LargeRep(); LargeSide.Small = true; // This is similar to the standard move-from-old-buckets, but the bucket // count hasn't actually rotated in this case. So we have to carefully // move construct the keys and values into their new locations, but there // is no need to re-hash things. for (unsigned i = 0, e = InlineBuckets; i != e; ++i) { BucketT *NewB = &LargeSide.getInlineBuckets()[i], *OldB = &SmallSide.getInlineBuckets()[i]; ::new (&NewB->getFirst()) KeyT(std::move(OldB->getFirst())); OldB->getFirst().~KeyT(); if (!KeyInfoT::isEqual(NewB->getFirst(), EmptyKey) && !KeyInfoT::isEqual(NewB->getFirst(), TombstoneKey)) { ::new (&NewB->getSecond()) ValueT(std::move(OldB->getSecond())); OldB->getSecond().~ValueT(); } } // The hard part of moving the small buckets across is done, just move // the TmpRep into its new home. SmallSide.Small = false; new (SmallSide.getLargeRep()) LargeRep(std::move(TmpRep)); } SmallDenseMap& operator=(const SmallDenseMap& other) { if (&other != this) copyFrom(other); return *this; } SmallDenseMap& operator=(SmallDenseMap &&other) { this->destroyAll(); deallocateBuckets(); init(0); swap(other); return *this; } void copyFrom(const SmallDenseMap& other) { this->destroyAll(); deallocateBuckets(); Small = true; if (other.getNumBuckets() > InlineBuckets) { Small = false; new (getLargeRep()) LargeRep(allocateBuckets(other.getNumBuckets())); } this->BaseT::copyFrom(other); } void init(unsigned InitBuckets) { Small = true; if (InitBuckets > InlineBuckets) { Small = false; new (getLargeRep()) LargeRep(allocateBuckets(InitBuckets)); } this->BaseT::initEmpty(); } void grow(unsigned AtLeast) { if (AtLeast >= InlineBuckets) AtLeast = std::max(64, NextPowerOf2(AtLeast-1)); if (Small) { if (AtLeast < InlineBuckets) return; // Nothing to do. // First move the inline buckets into a temporary storage. AlignedCharArrayUnion TmpStorage; BucketT *TmpBegin = reinterpret_cast(TmpStorage.buffer); BucketT *TmpEnd = TmpBegin; // Loop over the buckets, moving non-empty, non-tombstones into the // temporary storage. Have the loop move the TmpEnd forward as it goes. const KeyT EmptyKey = this->getEmptyKey(); const KeyT TombstoneKey = this->getTombstoneKey(); for (BucketT *P = getBuckets(), *E = P + InlineBuckets; P != E; ++P) { if (!KeyInfoT::isEqual(P->getFirst(), EmptyKey) && !KeyInfoT::isEqual(P->getFirst(), TombstoneKey)) { assert(size_t(TmpEnd - TmpBegin) < InlineBuckets && "Too many inline buckets!"); ::new (&TmpEnd->getFirst()) KeyT(std::move(P->getFirst())); ::new (&TmpEnd->getSecond()) ValueT(std::move(P->getSecond())); ++TmpEnd; P->getSecond().~ValueT(); } P->getFirst().~KeyT(); } // Now make this map use the large rep, and move all the entries back // into it. Small = false; new (getLargeRep()) LargeRep(allocateBuckets(AtLeast)); this->moveFromOldBuckets(TmpBegin, TmpEnd); return; } LargeRep OldRep = std::move(*getLargeRep()); getLargeRep()->~LargeRep(); if (AtLeast <= InlineBuckets) { Small = true; } else { new (getLargeRep()) LargeRep(allocateBuckets(AtLeast)); } this->moveFromOldBuckets(OldRep.Buckets, OldRep.Buckets+OldRep.NumBuckets); // Free the old table. deallocate_buffer(OldRep.Buckets, sizeof(BucketT) * OldRep.NumBuckets, alignof(BucketT)); } void shrink_and_clear() { unsigned OldSize = this->size(); this->destroyAll(); // Reduce the number of buckets. unsigned NewNumBuckets = 0; if (OldSize) { NewNumBuckets = 1 << (Log2_32_Ceil(OldSize) + 1); if (NewNumBuckets > InlineBuckets && NewNumBuckets < 64u) NewNumBuckets = 64; } if ((Small && NewNumBuckets <= InlineBuckets) || (!Small && NewNumBuckets == getLargeRep()->NumBuckets)) { this->BaseT::initEmpty(); return; } deallocateBuckets(); init(NewNumBuckets); } private: unsigned getNumEntries() const { return NumEntries; } void setNumEntries(unsigned Num) { // NumEntries is hardcoded to be 31 bits wide. assert(Num < (1U << 31) && "Cannot support more than 1<<31 entries"); NumEntries = Num; } unsigned getNumTombstones() const { return NumTombstones; } void setNumTombstones(unsigned Num) { NumTombstones = Num; } const BucketT *getInlineBuckets() const { assert(Small); // Note that this cast does not violate aliasing rules as we assert that // the memory's dynamic type is the small, inline bucket buffer, and the // 'storage.buffer' static type is 'char *'. return reinterpret_cast(storage.buffer); } BucketT *getInlineBuckets() { return const_cast( const_cast(this)->getInlineBuckets()); } const LargeRep *getLargeRep() const { assert(!Small); // Note, same rule about aliasing as with getInlineBuckets. return reinterpret_cast(storage.buffer); } LargeRep *getLargeRep() { return const_cast( const_cast(this)->getLargeRep()); } const BucketT *getBuckets() const { return Small ? getInlineBuckets() : getLargeRep()->Buckets; } BucketT *getBuckets() { return const_cast( const_cast(this)->getBuckets()); } unsigned getNumBuckets() const { return Small ? InlineBuckets : getLargeRep()->NumBuckets; } void deallocateBuckets() { if (Small) return; deallocate_buffer(getLargeRep()->Buckets, sizeof(BucketT) * getLargeRep()->NumBuckets, alignof(BucketT)); getLargeRep()->~LargeRep(); } LargeRep allocateBuckets(unsigned Num) { assert(Num > InlineBuckets && "Must allocate more buckets than are inline"); LargeRep Rep = {static_cast(allocate_buffer( sizeof(BucketT) * Num, alignof(BucketT))), Num}; return Rep; } }; template class DenseMapIterator : DebugEpochBase::HandleBase { friend class DenseMapIterator; friend class DenseMapIterator; using ConstIterator = DenseMapIterator; public: using difference_type = ptrdiff_t; using value_type = typename std::conditional::type; using pointer = value_type *; using reference = value_type &; using iterator_category = std::forward_iterator_tag; private: pointer Ptr = nullptr; pointer End = nullptr; public: DenseMapIterator() = default; DenseMapIterator(pointer Pos, pointer E, const DebugEpochBase &Epoch, bool NoAdvance = false) : DebugEpochBase::HandleBase(&Epoch), Ptr(Pos), End(E) { assert(isHandleInSync() && "invalid construction!"); if (NoAdvance) return; if (shouldReverseIterate()) { RetreatPastEmptyBuckets(); return; } AdvancePastEmptyBuckets(); } // Converting ctor from non-const iterators to const iterators. SFINAE'd out // for const iterator destinations so it doesn't end up as a user defined copy // constructor. template ::type> DenseMapIterator( const DenseMapIterator &I) : DebugEpochBase::HandleBase(I), Ptr(I.Ptr), End(I.End) {} reference operator*() const { assert(isHandleInSync() && "invalid iterator access!"); if (shouldReverseIterate()) return Ptr[-1]; return *Ptr; } pointer operator->() const { assert(isHandleInSync() && "invalid iterator access!"); if (shouldReverseIterate()) return &(Ptr[-1]); return Ptr; } bool operator==(const ConstIterator &RHS) const { assert((!Ptr || isHandleInSync()) && "handle not in sync!"); assert((!RHS.Ptr || RHS.isHandleInSync()) && "handle not in sync!"); assert(getEpochAddress() == RHS.getEpochAddress() && "comparing incomparable iterators!"); return Ptr == RHS.Ptr; } bool operator!=(const ConstIterator &RHS) const { assert((!Ptr || isHandleInSync()) && "handle not in sync!"); assert((!RHS.Ptr || RHS.isHandleInSync()) && "handle not in sync!"); assert(getEpochAddress() == RHS.getEpochAddress() && "comparing incomparable iterators!"); return Ptr != RHS.Ptr; } inline DenseMapIterator& operator++() { // Preincrement assert(isHandleInSync() && "invalid iterator access!"); if (shouldReverseIterate()) { --Ptr; RetreatPastEmptyBuckets(); return *this; } ++Ptr; AdvancePastEmptyBuckets(); return *this; } DenseMapIterator operator++(int) { // Postincrement assert(isHandleInSync() && "invalid iterator access!"); DenseMapIterator tmp = *this; ++*this; return tmp; } private: void AdvancePastEmptyBuckets() { assert(Ptr <= End); const KeyT Empty = KeyInfoT::getEmptyKey(); const KeyT Tombstone = KeyInfoT::getTombstoneKey(); while (Ptr != End && (KeyInfoT::isEqual(Ptr->getFirst(), Empty) || KeyInfoT::isEqual(Ptr->getFirst(), Tombstone))) ++Ptr; } void RetreatPastEmptyBuckets() { assert(Ptr >= End); const KeyT Empty = KeyInfoT::getEmptyKey(); const KeyT Tombstone = KeyInfoT::getTombstoneKey(); while (Ptr != End && (KeyInfoT::isEqual(Ptr[-1].getFirst(), Empty) || KeyInfoT::isEqual(Ptr[-1].getFirst(), Tombstone))) --Ptr; } }; template inline size_t capacity_in_bytes(const DenseMap &X) { return X.getMemorySize(); } } // end namespace llvm #endif // LLVM_ADT_DENSEMAP_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/DenseMapInfo.h000066400000000000000000000227771423707623100274210ustar00rootroot00000000000000//===- llvm/ADT/DenseMapInfo.h - Type traits for DenseMap -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines DenseMapInfo traits for DenseMap. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_DENSEMAPINFO_H #define LLVM_ADT_DENSEMAPINFO_H #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/Hashing.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/PointerLikeTypeTraits.h" #include "llvm/Support/TypeSize.h" #include #include #include #include namespace llvm { template struct DenseMapInfo { //static inline T getEmptyKey(); //static inline T getTombstoneKey(); //static unsigned getHashValue(const T &Val); //static bool isEqual(const T &LHS, const T &RHS); }; // Provide DenseMapInfo for all pointers. template struct DenseMapInfo { static inline T* getEmptyKey() { uintptr_t Val = static_cast(-1); Val <<= PointerLikeTypeTraits::NumLowBitsAvailable; return reinterpret_cast(Val); } static inline T* getTombstoneKey() { uintptr_t Val = static_cast(-2); Val <<= PointerLikeTypeTraits::NumLowBitsAvailable; return reinterpret_cast(Val); } static unsigned getHashValue(const T *PtrVal) { return (unsigned((uintptr_t)PtrVal) >> 4) ^ (unsigned((uintptr_t)PtrVal) >> 9); } static bool isEqual(const T *LHS, const T *RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for chars. template<> struct DenseMapInfo { static inline char getEmptyKey() { return ~0; } static inline char getTombstoneKey() { return ~0 - 1; } static unsigned getHashValue(const char& Val) { return Val * 37U; } static bool isEqual(const char &LHS, const char &RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for unsigned chars. template <> struct DenseMapInfo { static inline unsigned char getEmptyKey() { return ~0; } static inline unsigned char getTombstoneKey() { return ~0 - 1; } static unsigned getHashValue(const unsigned char &Val) { return Val * 37U; } static bool isEqual(const unsigned char &LHS, const unsigned char &RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for unsigned shorts. template <> struct DenseMapInfo { static inline unsigned short getEmptyKey() { return 0xFFFF; } static inline unsigned short getTombstoneKey() { return 0xFFFF - 1; } static unsigned getHashValue(const unsigned short &Val) { return Val * 37U; } static bool isEqual(const unsigned short &LHS, const unsigned short &RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for unsigned ints. template<> struct DenseMapInfo { static inline unsigned getEmptyKey() { return ~0U; } static inline unsigned getTombstoneKey() { return ~0U - 1; } static unsigned getHashValue(const unsigned& Val) { return Val * 37U; } static bool isEqual(const unsigned& LHS, const unsigned& RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for unsigned longs. template<> struct DenseMapInfo { static inline unsigned long getEmptyKey() { return ~0UL; } static inline unsigned long getTombstoneKey() { return ~0UL - 1L; } static unsigned getHashValue(const unsigned long& Val) { return (unsigned)(Val * 37UL); } static bool isEqual(const unsigned long& LHS, const unsigned long& RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for unsigned long longs. template<> struct DenseMapInfo { static inline unsigned long long getEmptyKey() { return ~0ULL; } static inline unsigned long long getTombstoneKey() { return ~0ULL - 1ULL; } static unsigned getHashValue(const unsigned long long& Val) { return (unsigned)(Val * 37ULL); } static bool isEqual(const unsigned long long& LHS, const unsigned long long& RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for shorts. template <> struct DenseMapInfo { static inline short getEmptyKey() { return 0x7FFF; } static inline short getTombstoneKey() { return -0x7FFF - 1; } static unsigned getHashValue(const short &Val) { return Val * 37U; } static bool isEqual(const short &LHS, const short &RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for ints. template<> struct DenseMapInfo { static inline int getEmptyKey() { return 0x7fffffff; } static inline int getTombstoneKey() { return -0x7fffffff - 1; } static unsigned getHashValue(const int& Val) { return (unsigned)(Val * 37U); } static bool isEqual(const int& LHS, const int& RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for longs. template<> struct DenseMapInfo { static inline long getEmptyKey() { return (1UL << (sizeof(long) * 8 - 1)) - 1UL; } static inline long getTombstoneKey() { return getEmptyKey() - 1L; } static unsigned getHashValue(const long& Val) { return (unsigned)(Val * 37UL); } static bool isEqual(const long& LHS, const long& RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for long longs. template<> struct DenseMapInfo { static inline long long getEmptyKey() { return 0x7fffffffffffffffLL; } static inline long long getTombstoneKey() { return -0x7fffffffffffffffLL-1; } static unsigned getHashValue(const long long& Val) { return (unsigned)(Val * 37ULL); } static bool isEqual(const long long& LHS, const long long& RHS) { return LHS == RHS; } }; // Provide DenseMapInfo for all pairs whose members have info. template struct DenseMapInfo> { using Pair = std::pair; using FirstInfo = DenseMapInfo; using SecondInfo = DenseMapInfo; static inline Pair getEmptyKey() { return std::make_pair(FirstInfo::getEmptyKey(), SecondInfo::getEmptyKey()); } static inline Pair getTombstoneKey() { return std::make_pair(FirstInfo::getTombstoneKey(), SecondInfo::getTombstoneKey()); } static unsigned getHashValue(const Pair& PairVal) { uint64_t key = (uint64_t)FirstInfo::getHashValue(PairVal.first) << 32 | (uint64_t)SecondInfo::getHashValue(PairVal.second); key += ~(key << 32); key ^= (key >> 22); key += ~(key << 13); key ^= (key >> 8); key += (key << 3); key ^= (key >> 15); key += ~(key << 27); key ^= (key >> 31); return (unsigned)key; } static bool isEqual(const Pair &LHS, const Pair &RHS) { return FirstInfo::isEqual(LHS.first, RHS.first) && SecondInfo::isEqual(LHS.second, RHS.second); } }; // Provide DenseMapInfo for StringRefs. template <> struct DenseMapInfo { static inline StringRef getEmptyKey() { return StringRef(reinterpret_cast(~static_cast(0)), 0); } static inline StringRef getTombstoneKey() { return StringRef(reinterpret_cast(~static_cast(1)), 0); } static unsigned getHashValue(StringRef Val) { assert(Val.data() != getEmptyKey().data() && "Cannot hash the empty key!"); assert(Val.data() != getTombstoneKey().data() && "Cannot hash the tombstone key!"); return (unsigned)(hash_value(Val)); } static bool isEqual(StringRef LHS, StringRef RHS) { if (RHS.data() == getEmptyKey().data()) return LHS.data() == getEmptyKey().data(); if (RHS.data() == getTombstoneKey().data()) return LHS.data() == getTombstoneKey().data(); return LHS == RHS; } }; // Provide DenseMapInfo for ArrayRefs. template struct DenseMapInfo> { static inline ArrayRef getEmptyKey() { return ArrayRef(reinterpret_cast(~static_cast(0)), size_t(0)); } static inline ArrayRef getTombstoneKey() { return ArrayRef(reinterpret_cast(~static_cast(1)), size_t(0)); } static unsigned getHashValue(ArrayRef Val) { assert(Val.data() != getEmptyKey().data() && "Cannot hash the empty key!"); assert(Val.data() != getTombstoneKey().data() && "Cannot hash the tombstone key!"); return (unsigned)(hash_value(Val)); } static bool isEqual(ArrayRef LHS, ArrayRef RHS) { if (RHS.data() == getEmptyKey().data()) return LHS.data() == getEmptyKey().data(); if (RHS.data() == getTombstoneKey().data()) return LHS.data() == getTombstoneKey().data(); return LHS == RHS; } }; template <> struct DenseMapInfo { static inline hash_code getEmptyKey() { return hash_code(-1); } static inline hash_code getTombstoneKey() { return hash_code(-2); } static unsigned getHashValue(hash_code val) { return val; } static bool isEqual(hash_code LHS, hash_code RHS) { return LHS == RHS; } }; template <> struct DenseMapInfo { static inline ElementCount getEmptyKey() { return {~0U, true}; } static inline ElementCount getTombstoneKey() { return {~0U - 1, false}; } static unsigned getHashValue(const ElementCount& EltCnt) { if (EltCnt.Scalable) return (EltCnt.Min * 37U) - 1U; return EltCnt.Min * 37U; } static bool isEqual(const ElementCount& LHS, const ElementCount& RHS) { return LHS == RHS; } }; } // end namespace llvm #endif // LLVM_ADT_DENSEMAPINFO_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/DenseSet.h000066400000000000000000000222561423707623100266130ustar00rootroot00000000000000//===- llvm/ADT/DenseSet.h - Dense probed hash table ------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the DenseSet and SmallDenseSet classes. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_DENSESET_H #define LLVM_ADT_DENSESET_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMapInfo.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/type_traits.h" #include #include #include #include #include namespace llvm { namespace detail { struct DenseSetEmpty {}; // Use the empty base class trick so we can create a DenseMap where the buckets // contain only a single item. template class DenseSetPair : public DenseSetEmpty { KeyT key; public: KeyT &getFirst() { return key; } const KeyT &getFirst() const { return key; } DenseSetEmpty &getSecond() { return *this; } const DenseSetEmpty &getSecond() const { return *this; } }; /// Base class for DenseSet and DenseSmallSet. /// /// MapTy should be either /// /// DenseMap> /// /// or the equivalent SmallDenseMap type. ValueInfoT must implement the /// DenseMapInfo "concept". template class DenseSetImpl { static_assert(sizeof(typename MapTy::value_type) == sizeof(ValueT), "DenseMap buckets unexpectedly large!"); MapTy TheMap; template using const_arg_type_t = typename const_pointer_or_const_ref::type; public: using key_type = ValueT; using value_type = ValueT; using size_type = unsigned; explicit DenseSetImpl(unsigned InitialReserve = 0) : TheMap(InitialReserve) {} DenseSetImpl(std::initializer_list Elems) : DenseSetImpl(PowerOf2Ceil(Elems.size())) { insert(Elems.begin(), Elems.end()); } bool empty() const { return TheMap.empty(); } size_type size() const { return TheMap.size(); } size_t getMemorySize() const { return TheMap.getMemorySize(); } /// Grow the DenseSet so that it has at least Size buckets. Will not shrink /// the Size of the set. void resize(size_t Size) { TheMap.resize(Size); } /// Grow the DenseSet so that it can contain at least \p NumEntries items /// before resizing again. void reserve(size_t Size) { TheMap.reserve(Size); } void clear() { TheMap.clear(); } /// Return 1 if the specified key is in the set, 0 otherwise. size_type count(const_arg_type_t V) const { return TheMap.count(V); } bool erase(const ValueT &V) { return TheMap.erase(V); } void swap(DenseSetImpl &RHS) { TheMap.swap(RHS.TheMap); } // Iterators. class ConstIterator; class Iterator { typename MapTy::iterator I; friend class DenseSetImpl; friend class ConstIterator; public: using difference_type = typename MapTy::iterator::difference_type; using value_type = ValueT; using pointer = value_type *; using reference = value_type &; using iterator_category = std::forward_iterator_tag; Iterator() = default; Iterator(const typename MapTy::iterator &i) : I(i) {} ValueT &operator*() { return I->getFirst(); } const ValueT &operator*() const { return I->getFirst(); } ValueT *operator->() { return &I->getFirst(); } const ValueT *operator->() const { return &I->getFirst(); } Iterator& operator++() { ++I; return *this; } Iterator operator++(int) { auto T = *this; ++I; return T; } bool operator==(const ConstIterator& X) const { return I == X.I; } bool operator!=(const ConstIterator& X) const { return I != X.I; } }; class ConstIterator { typename MapTy::const_iterator I; friend class DenseSetImpl; friend class Iterator; public: using difference_type = typename MapTy::const_iterator::difference_type; using value_type = ValueT; using pointer = const value_type *; using reference = const value_type &; using iterator_category = std::forward_iterator_tag; ConstIterator() = default; ConstIterator(const Iterator &B) : I(B.I) {} ConstIterator(const typename MapTy::const_iterator &i) : I(i) {} const ValueT &operator*() const { return I->getFirst(); } const ValueT *operator->() const { return &I->getFirst(); } ConstIterator& operator++() { ++I; return *this; } ConstIterator operator++(int) { auto T = *this; ++I; return T; } bool operator==(const ConstIterator& X) const { return I == X.I; } bool operator!=(const ConstIterator& X) const { return I != X.I; } }; using iterator = Iterator; using const_iterator = ConstIterator; iterator begin() { return Iterator(TheMap.begin()); } iterator end() { return Iterator(TheMap.end()); } const_iterator begin() const { return ConstIterator(TheMap.begin()); } const_iterator end() const { return ConstIterator(TheMap.end()); } iterator find(const_arg_type_t V) { return Iterator(TheMap.find(V)); } const_iterator find(const_arg_type_t V) const { return ConstIterator(TheMap.find(V)); } /// Alternative version of find() which allows a different, and possibly less /// expensive, key type. /// The DenseMapInfo is responsible for supplying methods /// getHashValue(LookupKeyT) and isEqual(LookupKeyT, KeyT) for each key type /// used. template iterator find_as(const LookupKeyT &Val) { return Iterator(TheMap.find_as(Val)); } template const_iterator find_as(const LookupKeyT &Val) const { return ConstIterator(TheMap.find_as(Val)); } void erase(Iterator I) { return TheMap.erase(I.I); } void erase(ConstIterator CI) { return TheMap.erase(CI.I); } std::pair insert(const ValueT &V) { detail::DenseSetEmpty Empty; return TheMap.try_emplace(V, Empty); } std::pair insert(ValueT &&V) { detail::DenseSetEmpty Empty; return TheMap.try_emplace(std::move(V), Empty); } /// Alternative version of insert that uses a different (and possibly less /// expensive) key type. template std::pair insert_as(const ValueT &V, const LookupKeyT &LookupKey) { return TheMap.insert_as({V, detail::DenseSetEmpty()}, LookupKey); } template std::pair insert_as(ValueT &&V, const LookupKeyT &LookupKey) { return TheMap.insert_as({std::move(V), detail::DenseSetEmpty()}, LookupKey); } // Range insertion of values. template void insert(InputIt I, InputIt E) { for (; I != E; ++I) insert(*I); } }; /// Equality comparison for DenseSet. /// /// Iterates over elements of LHS confirming that each element is also a member /// of RHS, and that RHS contains no additional values. /// Equivalent to N calls to RHS.count. Amortized complexity is linear, worst /// case is O(N^2) (if every hash collides). template bool operator==(const DenseSetImpl &LHS, const DenseSetImpl &RHS) { if (LHS.size() != RHS.size()) return false; for (auto &E : LHS) if (!RHS.count(E)) return false; return true; } /// Inequality comparison for DenseSet. /// /// Equivalent to !(LHS == RHS). See operator== for performance notes. template bool operator!=(const DenseSetImpl &LHS, const DenseSetImpl &RHS) { return !(LHS == RHS); } } // end namespace detail /// Implements a dense probed hash-table based set. template > class DenseSet : public detail::DenseSetImpl< ValueT, DenseMap>, ValueInfoT> { using BaseT = detail::DenseSetImpl>, ValueInfoT>; public: using BaseT::BaseT; }; /// Implements a dense probed hash-table based set with some number of buckets /// stored inline. template > class SmallDenseSet : public detail::DenseSetImpl< ValueT, SmallDenseMap>, ValueInfoT> { using BaseT = detail::DenseSetImpl< ValueT, SmallDenseMap>, ValueInfoT>; public: using BaseT::BaseT; }; } // end namespace llvm #endif // LLVM_ADT_DENSESET_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/EpochTracker.h000066400000000000000000000063171423707623100274530ustar00rootroot00000000000000//===- llvm/ADT/EpochTracker.h - ADT epoch tracking --------------*- C++ -*-==// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the DebugEpochBase and DebugEpochBase::HandleBase classes. // These can be used to write iterators that are fail-fast when LLVM is built // with asserts enabled. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_EPOCH_TRACKER_H #define LLVM_ADT_EPOCH_TRACKER_H #include "llvm/Config/abi-breaking.h" #include namespace llvm { #if LLVM_ENABLE_ABI_BREAKING_CHECKS /// A base class for data structure classes wishing to make iterators /// ("handles") pointing into themselves fail-fast. When building without /// asserts, this class is empty and does nothing. /// /// DebugEpochBase does not by itself track handles pointing into itself. The /// expectation is that routines touching the handles will poll on /// isHandleInSync at appropriate points to assert that the handle they're using /// is still valid. /// class DebugEpochBase { uint64_t Epoch; public: DebugEpochBase() : Epoch(0) {} /// Calling incrementEpoch invalidates all handles pointing into the /// calling instance. void incrementEpoch() { ++Epoch; } /// The destructor calls incrementEpoch to make use-after-free bugs /// more likely to crash deterministically. ~DebugEpochBase() { incrementEpoch(); } /// A base class for iterator classes ("handles") that wish to poll for /// iterator invalidating modifications in the underlying data structure. /// When LLVM is built without asserts, this class is empty and does nothing. /// /// HandleBase does not track the parent data structure by itself. It expects /// the routines modifying the data structure to call incrementEpoch when they /// make an iterator-invalidating modification. /// class HandleBase { const uint64_t *EpochAddress; uint64_t EpochAtCreation; public: HandleBase() : EpochAddress(nullptr), EpochAtCreation(UINT64_MAX) {} explicit HandleBase(const DebugEpochBase *Parent) : EpochAddress(&Parent->Epoch), EpochAtCreation(Parent->Epoch) {} /// Returns true if the DebugEpochBase this Handle is linked to has /// not called incrementEpoch on itself since the creation of this /// HandleBase instance. bool isHandleInSync() const { return *EpochAddress == EpochAtCreation; } /// Returns a pointer to the epoch word stored in the data structure /// this handle points into. Can be used to check if two iterators point /// into the same data structure. const void *getEpochAddress() const { return EpochAddress; } }; }; #else class DebugEpochBase { public: void incrementEpoch() {} class HandleBase { public: HandleBase() = default; explicit HandleBase(const DebugEpochBase *) {} bool isHandleInSync() const { return true; } const void *getEpochAddress() const { return nullptr; } }; }; #endif // LLVM_ENABLE_ABI_BREAKING_CHECKS } // namespace llvm #endif binaryen-version_108/third_party/llvm-project/include/llvm/ADT/FoldingSet.h000066400000000000000000000702731423707623100271410ustar00rootroot00000000000000//===- llvm/ADT/FoldingSet.h - Uniquing Hash Set ----------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines a hash set that can be used to remove duplication of nodes // in a graph. This code was originally created by Chris Lattner for use with // SelectionDAGCSEMap, but was isolated to provide use across the llvm code set. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_FOLDINGSET_H #define LLVM_ADT_FOLDINGSET_H #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/iterator.h" #include "llvm/Support/Allocator.h" #include #include #include #include namespace llvm { /// This folding set used for two purposes: /// 1. Given information about a node we want to create, look up the unique /// instance of the node in the set. If the node already exists, return /// it, otherwise return the bucket it should be inserted into. /// 2. Given a node that has already been created, remove it from the set. /// /// This class is implemented as a single-link chained hash table, where the /// "buckets" are actually the nodes themselves (the next pointer is in the /// node). The last node points back to the bucket to simplify node removal. /// /// Any node that is to be included in the folding set must be a subclass of /// FoldingSetNode. The node class must also define a Profile method used to /// establish the unique bits of data for the node. The Profile method is /// passed a FoldingSetNodeID object which is used to gather the bits. Just /// call one of the Add* functions defined in the FoldingSetBase::NodeID class. /// NOTE: That the folding set does not own the nodes and it is the /// responsibility of the user to dispose of the nodes. /// /// Eg. /// class MyNode : public FoldingSetNode { /// private: /// std::string Name; /// unsigned Value; /// public: /// MyNode(const char *N, unsigned V) : Name(N), Value(V) {} /// ... /// void Profile(FoldingSetNodeID &ID) const { /// ID.AddString(Name); /// ID.AddInteger(Value); /// } /// ... /// }; /// /// To define the folding set itself use the FoldingSet template; /// /// Eg. /// FoldingSet MyFoldingSet; /// /// Four public methods are available to manipulate the folding set; /// /// 1) If you have an existing node that you want add to the set but unsure /// that the node might already exist then call; /// /// MyNode *M = MyFoldingSet.GetOrInsertNode(N); /// /// If The result is equal to the input then the node has been inserted. /// Otherwise, the result is the node existing in the folding set, and the /// input can be discarded (use the result instead.) /// /// 2) If you are ready to construct a node but want to check if it already /// exists, then call FindNodeOrInsertPos with a FoldingSetNodeID of the bits to /// check; /// /// FoldingSetNodeID ID; /// ID.AddString(Name); /// ID.AddInteger(Value); /// void *InsertPoint; /// /// MyNode *M = MyFoldingSet.FindNodeOrInsertPos(ID, InsertPoint); /// /// If found then M with be non-NULL, else InsertPoint will point to where it /// should be inserted using InsertNode. /// /// 3) If you get a NULL result from FindNodeOrInsertPos then you can as a new /// node with FindNodeOrInsertPos; /// /// InsertNode(N, InsertPoint); /// /// 4) Finally, if you want to remove a node from the folding set call; /// /// bool WasRemoved = RemoveNode(N); /// /// The result indicates whether the node existed in the folding set. class FoldingSetNodeID; class StringRef; //===----------------------------------------------------------------------===// /// FoldingSetBase - Implements the folding set functionality. The main /// structure is an array of buckets. Each bucket is indexed by the hash of /// the nodes it contains. The bucket itself points to the nodes contained /// in the bucket via a singly linked list. The last node in the list points /// back to the bucket to facilitate node removal. /// class FoldingSetBase { virtual void anchor(); // Out of line virtual method. protected: /// Buckets - Array of bucket chains. void **Buckets; /// NumBuckets - Length of the Buckets array. Always a power of 2. unsigned NumBuckets; /// NumNodes - Number of nodes in the folding set. Growth occurs when NumNodes /// is greater than twice the number of buckets. unsigned NumNodes; explicit FoldingSetBase(unsigned Log2InitSize = 6); FoldingSetBase(FoldingSetBase &&Arg); FoldingSetBase &operator=(FoldingSetBase &&RHS); ~FoldingSetBase(); public: //===--------------------------------------------------------------------===// /// Node - This class is used to maintain the singly linked bucket list in /// a folding set. class Node { private: // NextInFoldingSetBucket - next link in the bucket list. void *NextInFoldingSetBucket = nullptr; public: Node() = default; // Accessors void *getNextInBucket() const { return NextInFoldingSetBucket; } void SetNextInBucket(void *N) { NextInFoldingSetBucket = N; } }; /// clear - Remove all nodes from the folding set. void clear(); /// size - Returns the number of nodes in the folding set. unsigned size() const { return NumNodes; } /// empty - Returns true if there are no nodes in the folding set. bool empty() const { return NumNodes == 0; } /// reserve - Increase the number of buckets such that adding the /// EltCount-th node won't cause a rebucket operation. reserve is permitted /// to allocate more space than requested by EltCount. void reserve(unsigned EltCount); /// capacity - Returns the number of nodes permitted in the folding set /// before a rebucket operation is performed. unsigned capacity() { // We allow a load factor of up to 2.0, // so that means our capacity is NumBuckets * 2 return NumBuckets * 2; } private: /// GrowHashTable - Double the size of the hash table and rehash everything. void GrowHashTable(); /// GrowBucketCount - resize the hash table and rehash everything. /// NewBucketCount must be a power of two, and must be greater than the old /// bucket count. void GrowBucketCount(unsigned NewBucketCount); protected: /// GetNodeProfile - Instantiations of the FoldingSet template implement /// this function to gather data bits for the given node. virtual void GetNodeProfile(Node *N, FoldingSetNodeID &ID) const = 0; /// NodeEquals - Instantiations of the FoldingSet template implement /// this function to compare the given node with the given ID. virtual bool NodeEquals(Node *N, const FoldingSetNodeID &ID, unsigned IDHash, FoldingSetNodeID &TempID) const=0; /// ComputeNodeHash - Instantiations of the FoldingSet template implement /// this function to compute a hash value for the given node. virtual unsigned ComputeNodeHash(Node *N, FoldingSetNodeID &TempID) const = 0; // The below methods are protected to encourage subclasses to provide a more // type-safe API. /// RemoveNode - Remove a node from the folding set, returning true if one /// was removed or false if the node was not in the folding set. bool RemoveNode(Node *N); /// GetOrInsertNode - If there is an existing simple Node exactly /// equal to the specified node, return it. Otherwise, insert 'N' and return /// it instead. Node *GetOrInsertNode(Node *N); /// FindNodeOrInsertPos - Look up the node specified by ID. If it exists, /// return it. If not, return the insertion token that will make insertion /// faster. Node *FindNodeOrInsertPos(const FoldingSetNodeID &ID, void *&InsertPos); /// InsertNode - Insert the specified node into the folding set, knowing that /// it is not already in the folding set. InsertPos must be obtained from /// FindNodeOrInsertPos. void InsertNode(Node *N, void *InsertPos); }; //===----------------------------------------------------------------------===// /// DefaultFoldingSetTrait - This class provides default implementations /// for FoldingSetTrait implementations. template struct DefaultFoldingSetTrait { static void Profile(const T &X, FoldingSetNodeID &ID) { X.Profile(ID); } static void Profile(T &X, FoldingSetNodeID &ID) { X.Profile(ID); } // Equals - Test if the profile for X would match ID, using TempID // to compute a temporary ID if necessary. The default implementation // just calls Profile and does a regular comparison. Implementations // can override this to provide more efficient implementations. static inline bool Equals(T &X, const FoldingSetNodeID &ID, unsigned IDHash, FoldingSetNodeID &TempID); // ComputeHash - Compute a hash value for X, using TempID to // compute a temporary ID if necessary. The default implementation // just calls Profile and does a regular hash computation. // Implementations can override this to provide more efficient // implementations. static inline unsigned ComputeHash(T &X, FoldingSetNodeID &TempID); }; /// FoldingSetTrait - This trait class is used to define behavior of how /// to "profile" (in the FoldingSet parlance) an object of a given type. /// The default behavior is to invoke a 'Profile' method on an object, but /// through template specialization the behavior can be tailored for specific /// types. Combined with the FoldingSetNodeWrapper class, one can add objects /// to FoldingSets that were not originally designed to have that behavior. template struct FoldingSetTrait : public DefaultFoldingSetTrait {}; /// DefaultContextualFoldingSetTrait - Like DefaultFoldingSetTrait, but /// for ContextualFoldingSets. template struct DefaultContextualFoldingSetTrait { static void Profile(T &X, FoldingSetNodeID &ID, Ctx Context) { X.Profile(ID, Context); } static inline bool Equals(T &X, const FoldingSetNodeID &ID, unsigned IDHash, FoldingSetNodeID &TempID, Ctx Context); static inline unsigned ComputeHash(T &X, FoldingSetNodeID &TempID, Ctx Context); }; /// ContextualFoldingSetTrait - Like FoldingSetTrait, but for /// ContextualFoldingSets. template struct ContextualFoldingSetTrait : public DefaultContextualFoldingSetTrait {}; //===--------------------------------------------------------------------===// /// FoldingSetNodeIDRef - This class describes a reference to an interned /// FoldingSetNodeID, which can be a useful to store node id data rather /// than using plain FoldingSetNodeIDs, since the 32-element SmallVector /// is often much larger than necessary, and the possibility of heap /// allocation means it requires a non-trivial destructor call. class FoldingSetNodeIDRef { const unsigned *Data = nullptr; size_t Size = 0; public: FoldingSetNodeIDRef() = default; FoldingSetNodeIDRef(const unsigned *D, size_t S) : Data(D), Size(S) {} /// ComputeHash - Compute a strong hash value for this FoldingSetNodeIDRef, /// used to lookup the node in the FoldingSetBase. unsigned ComputeHash() const; bool operator==(FoldingSetNodeIDRef) const; bool operator!=(FoldingSetNodeIDRef RHS) const { return !(*this == RHS); } /// Used to compare the "ordering" of two nodes as defined by the /// profiled bits and their ordering defined by memcmp(). bool operator<(FoldingSetNodeIDRef) const; const unsigned *getData() const { return Data; } size_t getSize() const { return Size; } }; //===--------------------------------------------------------------------===// /// FoldingSetNodeID - This class is used to gather all the unique data bits of /// a node. When all the bits are gathered this class is used to produce a /// hash value for the node. class FoldingSetNodeID { /// Bits - Vector of all the data bits that make the node unique. /// Use a SmallVector to avoid a heap allocation in the common case. SmallVector Bits; public: FoldingSetNodeID() = default; FoldingSetNodeID(FoldingSetNodeIDRef Ref) : Bits(Ref.getData(), Ref.getData() + Ref.getSize()) {} /// Add* - Add various data types to Bit data. void AddPointer(const void *Ptr); void AddInteger(signed I); void AddInteger(unsigned I); void AddInteger(long I); void AddInteger(unsigned long I); void AddInteger(long long I); void AddInteger(unsigned long long I); void AddBoolean(bool B) { AddInteger(B ? 1U : 0U); } void AddString(StringRef String); void AddNodeID(const FoldingSetNodeID &ID); template inline void Add(const T &x) { FoldingSetTrait::Profile(x, *this); } /// clear - Clear the accumulated profile, allowing this FoldingSetNodeID /// object to be used to compute a new profile. inline void clear() { Bits.clear(); } /// ComputeHash - Compute a strong hash value for this FoldingSetNodeID, used /// to lookup the node in the FoldingSetBase. unsigned ComputeHash() const; /// operator== - Used to compare two nodes to each other. bool operator==(const FoldingSetNodeID &RHS) const; bool operator==(const FoldingSetNodeIDRef RHS) const; bool operator!=(const FoldingSetNodeID &RHS) const { return !(*this == RHS); } bool operator!=(const FoldingSetNodeIDRef RHS) const { return !(*this ==RHS);} /// Used to compare the "ordering" of two nodes as defined by the /// profiled bits and their ordering defined by memcmp(). bool operator<(const FoldingSetNodeID &RHS) const; bool operator<(const FoldingSetNodeIDRef RHS) const; /// Intern - Copy this node's data to a memory region allocated from the /// given allocator and return a FoldingSetNodeIDRef describing the /// interned data. FoldingSetNodeIDRef Intern(BumpPtrAllocator &Allocator) const; }; // Convenience type to hide the implementation of the folding set. using FoldingSetNode = FoldingSetBase::Node; template class FoldingSetIterator; template class FoldingSetBucketIterator; // Definitions of FoldingSetTrait and ContextualFoldingSetTrait functions, which // require the definition of FoldingSetNodeID. template inline bool DefaultFoldingSetTrait::Equals(T &X, const FoldingSetNodeID &ID, unsigned /*IDHash*/, FoldingSetNodeID &TempID) { FoldingSetTrait::Profile(X, TempID); return TempID == ID; } template inline unsigned DefaultFoldingSetTrait::ComputeHash(T &X, FoldingSetNodeID &TempID) { FoldingSetTrait::Profile(X, TempID); return TempID.ComputeHash(); } template inline bool DefaultContextualFoldingSetTrait::Equals(T &X, const FoldingSetNodeID &ID, unsigned /*IDHash*/, FoldingSetNodeID &TempID, Ctx Context) { ContextualFoldingSetTrait::Profile(X, TempID, Context); return TempID == ID; } template inline unsigned DefaultContextualFoldingSetTrait::ComputeHash(T &X, FoldingSetNodeID &TempID, Ctx Context) { ContextualFoldingSetTrait::Profile(X, TempID, Context); return TempID.ComputeHash(); } //===----------------------------------------------------------------------===// /// FoldingSetImpl - An implementation detail that lets us share code between /// FoldingSet and ContextualFoldingSet. template class FoldingSetImpl : public FoldingSetBase { protected: explicit FoldingSetImpl(unsigned Log2InitSize) : FoldingSetBase(Log2InitSize) {} FoldingSetImpl(FoldingSetImpl &&Arg) = default; FoldingSetImpl &operator=(FoldingSetImpl &&RHS) = default; ~FoldingSetImpl() = default; public: using iterator = FoldingSetIterator; iterator begin() { return iterator(Buckets); } iterator end() { return iterator(Buckets+NumBuckets); } using const_iterator = FoldingSetIterator; const_iterator begin() const { return const_iterator(Buckets); } const_iterator end() const { return const_iterator(Buckets+NumBuckets); } using bucket_iterator = FoldingSetBucketIterator; bucket_iterator bucket_begin(unsigned hash) { return bucket_iterator(Buckets + (hash & (NumBuckets-1))); } bucket_iterator bucket_end(unsigned hash) { return bucket_iterator(Buckets + (hash & (NumBuckets-1)), true); } /// RemoveNode - Remove a node from the folding set, returning true if one /// was removed or false if the node was not in the folding set. bool RemoveNode(T *N) { return FoldingSetBase::RemoveNode(N); } /// GetOrInsertNode - If there is an existing simple Node exactly /// equal to the specified node, return it. Otherwise, insert 'N' and /// return it instead. T *GetOrInsertNode(T *N) { return static_cast(FoldingSetBase::GetOrInsertNode(N)); } /// FindNodeOrInsertPos - Look up the node specified by ID. If it exists, /// return it. If not, return the insertion token that will make insertion /// faster. T *FindNodeOrInsertPos(const FoldingSetNodeID &ID, void *&InsertPos) { return static_cast(FoldingSetBase::FindNodeOrInsertPos(ID, InsertPos)); } /// InsertNode - Insert the specified node into the folding set, knowing that /// it is not already in the folding set. InsertPos must be obtained from /// FindNodeOrInsertPos. void InsertNode(T *N, void *InsertPos) { FoldingSetBase::InsertNode(N, InsertPos); } /// InsertNode - Insert the specified node into the folding set, knowing that /// it is not already in the folding set. void InsertNode(T *N) { T *Inserted = GetOrInsertNode(N); (void)Inserted; assert(Inserted == N && "Node already inserted!"); } }; //===----------------------------------------------------------------------===// /// FoldingSet - This template class is used to instantiate a specialized /// implementation of the folding set to the node class T. T must be a /// subclass of FoldingSetNode and implement a Profile function. /// /// Note that this set type is movable and move-assignable. However, its /// moved-from state is not a valid state for anything other than /// move-assigning and destroying. This is primarily to enable movable APIs /// that incorporate these objects. template class FoldingSet final : public FoldingSetImpl { using Super = FoldingSetImpl; using Node = typename Super::Node; /// GetNodeProfile - Each instantiatation of the FoldingSet needs to provide a /// way to convert nodes into a unique specifier. void GetNodeProfile(Node *N, FoldingSetNodeID &ID) const override { T *TN = static_cast(N); FoldingSetTrait::Profile(*TN, ID); } /// NodeEquals - Instantiations may optionally provide a way to compare a /// node with a specified ID. bool NodeEquals(Node *N, const FoldingSetNodeID &ID, unsigned IDHash, FoldingSetNodeID &TempID) const override { T *TN = static_cast(N); return FoldingSetTrait::Equals(*TN, ID, IDHash, TempID); } /// ComputeNodeHash - Instantiations may optionally provide a way to compute a /// hash value directly from a node. unsigned ComputeNodeHash(Node *N, FoldingSetNodeID &TempID) const override { T *TN = static_cast(N); return FoldingSetTrait::ComputeHash(*TN, TempID); } public: explicit FoldingSet(unsigned Log2InitSize = 6) : Super(Log2InitSize) {} FoldingSet(FoldingSet &&Arg) = default; FoldingSet &operator=(FoldingSet &&RHS) = default; }; //===----------------------------------------------------------------------===// /// ContextualFoldingSet - This template class is a further refinement /// of FoldingSet which provides a context argument when calling /// Profile on its nodes. Currently, that argument is fixed at /// initialization time. /// /// T must be a subclass of FoldingSetNode and implement a Profile /// function with signature /// void Profile(FoldingSetNodeID &, Ctx); template class ContextualFoldingSet final : public FoldingSetImpl { // Unfortunately, this can't derive from FoldingSet because the // construction of the vtable for FoldingSet requires // FoldingSet::GetNodeProfile to be instantiated, which in turn // requires a single-argument T::Profile(). using Super = FoldingSetImpl; using Node = typename Super::Node; Ctx Context; /// GetNodeProfile - Each instantiatation of the FoldingSet needs to provide a /// way to convert nodes into a unique specifier. void GetNodeProfile(Node *N, FoldingSetNodeID &ID) const override { T *TN = static_cast(N); ContextualFoldingSetTrait::Profile(*TN, ID, Context); } bool NodeEquals(Node *N, const FoldingSetNodeID &ID, unsigned IDHash, FoldingSetNodeID &TempID) const override { T *TN = static_cast(N); return ContextualFoldingSetTrait::Equals(*TN, ID, IDHash, TempID, Context); } unsigned ComputeNodeHash(Node *N, FoldingSetNodeID &TempID) const override { T *TN = static_cast(N); return ContextualFoldingSetTrait::ComputeHash(*TN, TempID, Context); } public: explicit ContextualFoldingSet(Ctx Context, unsigned Log2InitSize = 6) : Super(Log2InitSize), Context(Context) {} Ctx getContext() const { return Context; } }; //===----------------------------------------------------------------------===// /// FoldingSetVector - This template class combines a FoldingSet and a vector /// to provide the interface of FoldingSet but with deterministic iteration /// order based on the insertion order. T must be a subclass of FoldingSetNode /// and implement a Profile function. template > class FoldingSetVector { FoldingSet Set; VectorT Vector; public: explicit FoldingSetVector(unsigned Log2InitSize = 6) : Set(Log2InitSize) {} using iterator = pointee_iterator; iterator begin() { return Vector.begin(); } iterator end() { return Vector.end(); } using const_iterator = pointee_iterator; const_iterator begin() const { return Vector.begin(); } const_iterator end() const { return Vector.end(); } /// clear - Remove all nodes from the folding set. void clear() { Set.clear(); Vector.clear(); } /// FindNodeOrInsertPos - Look up the node specified by ID. If it exists, /// return it. If not, return the insertion token that will make insertion /// faster. T *FindNodeOrInsertPos(const FoldingSetNodeID &ID, void *&InsertPos) { return Set.FindNodeOrInsertPos(ID, InsertPos); } /// GetOrInsertNode - If there is an existing simple Node exactly /// equal to the specified node, return it. Otherwise, insert 'N' and /// return it instead. T *GetOrInsertNode(T *N) { T *Result = Set.GetOrInsertNode(N); if (Result == N) Vector.push_back(N); return Result; } /// InsertNode - Insert the specified node into the folding set, knowing that /// it is not already in the folding set. InsertPos must be obtained from /// FindNodeOrInsertPos. void InsertNode(T *N, void *InsertPos) { Set.InsertNode(N, InsertPos); Vector.push_back(N); } /// InsertNode - Insert the specified node into the folding set, knowing that /// it is not already in the folding set. void InsertNode(T *N) { Set.InsertNode(N); Vector.push_back(N); } /// size - Returns the number of nodes in the folding set. unsigned size() const { return Set.size(); } /// empty - Returns true if there are no nodes in the folding set. bool empty() const { return Set.empty(); } }; //===----------------------------------------------------------------------===// /// FoldingSetIteratorImpl - This is the common iterator support shared by all /// folding sets, which knows how to walk the folding set hash table. class FoldingSetIteratorImpl { protected: FoldingSetNode *NodePtr; FoldingSetIteratorImpl(void **Bucket); void advance(); public: bool operator==(const FoldingSetIteratorImpl &RHS) const { return NodePtr == RHS.NodePtr; } bool operator!=(const FoldingSetIteratorImpl &RHS) const { return NodePtr != RHS.NodePtr; } }; template class FoldingSetIterator : public FoldingSetIteratorImpl { public: explicit FoldingSetIterator(void **Bucket) : FoldingSetIteratorImpl(Bucket) {} T &operator*() const { return *static_cast(NodePtr); } T *operator->() const { return static_cast(NodePtr); } inline FoldingSetIterator &operator++() { // Preincrement advance(); return *this; } FoldingSetIterator operator++(int) { // Postincrement FoldingSetIterator tmp = *this; ++*this; return tmp; } }; //===----------------------------------------------------------------------===// /// FoldingSetBucketIteratorImpl - This is the common bucket iterator support /// shared by all folding sets, which knows how to walk a particular bucket /// of a folding set hash table. class FoldingSetBucketIteratorImpl { protected: void *Ptr; explicit FoldingSetBucketIteratorImpl(void **Bucket); FoldingSetBucketIteratorImpl(void **Bucket, bool) : Ptr(Bucket) {} void advance() { void *Probe = static_cast(Ptr)->getNextInBucket(); uintptr_t x = reinterpret_cast(Probe) & ~0x1; Ptr = reinterpret_cast(x); } public: bool operator==(const FoldingSetBucketIteratorImpl &RHS) const { return Ptr == RHS.Ptr; } bool operator!=(const FoldingSetBucketIteratorImpl &RHS) const { return Ptr != RHS.Ptr; } }; template class FoldingSetBucketIterator : public FoldingSetBucketIteratorImpl { public: explicit FoldingSetBucketIterator(void **Bucket) : FoldingSetBucketIteratorImpl(Bucket) {} FoldingSetBucketIterator(void **Bucket, bool) : FoldingSetBucketIteratorImpl(Bucket, true) {} T &operator*() const { return *static_cast(Ptr); } T *operator->() const { return static_cast(Ptr); } inline FoldingSetBucketIterator &operator++() { // Preincrement advance(); return *this; } FoldingSetBucketIterator operator++(int) { // Postincrement FoldingSetBucketIterator tmp = *this; ++*this; return tmp; } }; //===----------------------------------------------------------------------===// /// FoldingSetNodeWrapper - This template class is used to "wrap" arbitrary /// types in an enclosing object so that they can be inserted into FoldingSets. template class FoldingSetNodeWrapper : public FoldingSetNode { T data; public: template explicit FoldingSetNodeWrapper(Ts &&... Args) : data(std::forward(Args)...) {} void Profile(FoldingSetNodeID &ID) { FoldingSetTrait::Profile(data, ID); } T &getValue() { return data; } const T &getValue() const { return data; } operator T&() { return data; } operator const T&() const { return data; } }; //===----------------------------------------------------------------------===// /// FastFoldingSetNode - This is a subclass of FoldingSetNode which stores /// a FoldingSetNodeID value rather than requiring the node to recompute it /// each time it is needed. This trades space for speed (which can be /// significant if the ID is long), and it also permits nodes to drop /// information that would otherwise only be required for recomputing an ID. class FastFoldingSetNode : public FoldingSetNode { FoldingSetNodeID FastID; protected: explicit FastFoldingSetNode(const FoldingSetNodeID &ID) : FastID(ID) {} public: void Profile(FoldingSetNodeID &ID) const { ID.AddNodeID(FastID); } }; //===----------------------------------------------------------------------===// // Partial specializations of FoldingSetTrait. template struct FoldingSetTrait { static inline void Profile(T *X, FoldingSetNodeID &ID) { ID.AddPointer(X); } }; template struct FoldingSetTrait> { static inline void Profile(const std::pair &P, FoldingSetNodeID &ID) { ID.Add(P.first); ID.Add(P.second); } }; } // end namespace llvm #endif // LLVM_ADT_FOLDINGSET_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/FunctionExtras.h000066400000000000000000000257371423707623100300640ustar00rootroot00000000000000//===- FunctionExtras.h - Function type erasure utilities -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// \file /// This file provides a collection of function (or more generally, callable) /// type erasure utilities supplementing those provided by the standard library /// in ``. /// /// It provides `unique_function`, which works like `std::function` but supports /// move-only callable objects. /// /// Future plans: /// - Add a `function` that provides const, volatile, and ref-qualified support, /// which doesn't work with `std::function`. /// - Provide support for specifying multiple signatures to type erase callable /// objects with an overload set, such as those produced by generic lambdas. /// - Expand to include a copyable utility that directly replaces std::function /// but brings the above improvements. /// /// Note that LLVM's utilities are greatly simplified by not supporting /// allocators. /// /// If the standard library ever begins to provide comparable facilities we can /// consider switching to those. /// //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_FUNCTION_EXTRAS_H #define LLVM_ADT_FUNCTION_EXTRAS_H #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/PointerUnion.h" #include "llvm/Support/type_traits.h" #include namespace llvm { template class unique_function; template class unique_function { static constexpr size_t InlineStorageSize = sizeof(void *) * 3; // MSVC has a bug and ICEs if we give it a particular dependent value // expression as part of the `std::conditional` below. To work around this, // we build that into a template struct's constexpr bool. template struct IsSizeLessThanThresholdT { static constexpr bool value = sizeof(T) <= (2 * sizeof(void *)); }; // Provide a type function to map parameters that won't observe extra copies // or moves and which are small enough to likely pass in register to values // and all other types to l-value reference types. We use this to compute the // types used in our erased call utility to minimize copies and moves unless // doing so would force things unnecessarily into memory. // // The heuristic used is related to common ABI register passing conventions. // It doesn't have to be exact though, and in one way it is more strict // because we want to still be able to observe either moves *or* copies. template using AdjustedParamT = typename std::conditional< !std::is_reference::value && llvm::is_trivially_copy_constructible::value && llvm::is_trivially_move_constructible::value && IsSizeLessThanThresholdT::value, T, T &>::type; // The type of the erased function pointer we use as a callback to dispatch to // the stored callable when it is trivial to move and destroy. using CallPtrT = ReturnT (*)(void *CallableAddr, AdjustedParamT... Params); using MovePtrT = void (*)(void *LHSCallableAddr, void *RHSCallableAddr); using DestroyPtrT = void (*)(void *CallableAddr); /// A struct to hold a single trivial callback with sufficient alignment for /// our bitpacking. struct alignas(8) TrivialCallback { CallPtrT CallPtr; }; /// A struct we use to aggregate three callbacks when we need full set of /// operations. struct alignas(8) NonTrivialCallbacks { CallPtrT CallPtr; MovePtrT MovePtr; DestroyPtrT DestroyPtr; }; // Create a pointer union between either a pointer to a static trivial call // pointer in a struct or a pointer to a static struct of the call, move, and // destroy pointers. using CallbackPointerUnionT = PointerUnion; // The main storage buffer. This will either have a pointer to out-of-line // storage or an inline buffer storing the callable. union StorageUnionT { // For out-of-line storage we keep a pointer to the underlying storage and // the size. This is enough to deallocate the memory. struct OutOfLineStorageT { void *StoragePtr; size_t Size; size_t Alignment; } OutOfLineStorage; static_assert( sizeof(OutOfLineStorageT) <= InlineStorageSize, "Should always use all of the out-of-line storage for inline storage!"); // For in-line storage, we just provide an aligned character buffer. We // provide three pointers worth of storage here. typename std::aligned_storage::type InlineStorage; } StorageUnion; // A compressed pointer to either our dispatching callback or our table of // dispatching callbacks and the flag for whether the callable itself is // stored inline or not. PointerIntPair CallbackAndInlineFlag; bool isInlineStorage() const { return CallbackAndInlineFlag.getInt(); } bool isTrivialCallback() const { return CallbackAndInlineFlag.getPointer().template is(); } CallPtrT getTrivialCallback() const { return CallbackAndInlineFlag.getPointer().template get()->CallPtr; } NonTrivialCallbacks *getNonTrivialCallbacks() const { return CallbackAndInlineFlag.getPointer() .template get(); } void *getInlineStorage() { return &StorageUnion.InlineStorage; } void *getOutOfLineStorage() { return StorageUnion.OutOfLineStorage.StoragePtr; } size_t getOutOfLineStorageSize() const { return StorageUnion.OutOfLineStorage.Size; } size_t getOutOfLineStorageAlignment() const { return StorageUnion.OutOfLineStorage.Alignment; } void setOutOfLineStorage(void *Ptr, size_t Size, size_t Alignment) { StorageUnion.OutOfLineStorage = {Ptr, Size, Alignment}; } template static ReturnT CallImpl(void *CallableAddr, AdjustedParamT... Params) { return (*reinterpret_cast(CallableAddr))( std::forward(Params)...); } template static void MoveImpl(void *LHSCallableAddr, void *RHSCallableAddr) noexcept { new (LHSCallableAddr) CallableT(std::move(*reinterpret_cast(RHSCallableAddr))); } template static void DestroyImpl(void *CallableAddr) noexcept { reinterpret_cast(CallableAddr)->~CallableT(); } public: unique_function() = default; unique_function(std::nullptr_t /*null_callable*/) {} ~unique_function() { if (!CallbackAndInlineFlag.getPointer()) return; // Cache this value so we don't re-check it after type-erased operations. bool IsInlineStorage = isInlineStorage(); if (!isTrivialCallback()) getNonTrivialCallbacks()->DestroyPtr( IsInlineStorage ? getInlineStorage() : getOutOfLineStorage()); if (!IsInlineStorage) deallocate_buffer(getOutOfLineStorage(), getOutOfLineStorageSize(), getOutOfLineStorageAlignment()); } unique_function(unique_function &&RHS) noexcept { // Copy the callback and inline flag. CallbackAndInlineFlag = RHS.CallbackAndInlineFlag; // If the RHS is empty, just copying the above is sufficient. if (!RHS) return; if (!isInlineStorage()) { // The out-of-line case is easiest to move. StorageUnion.OutOfLineStorage = RHS.StorageUnion.OutOfLineStorage; } else if (isTrivialCallback()) { // Move is trivial, just memcpy the bytes across. memcpy(getInlineStorage(), RHS.getInlineStorage(), InlineStorageSize); } else { // Non-trivial move, so dispatch to a type-erased implementation. getNonTrivialCallbacks()->MovePtr(getInlineStorage(), RHS.getInlineStorage()); } // Clear the old callback and inline flag to get back to as-if-null. RHS.CallbackAndInlineFlag = {}; #ifndef NDEBUG // In debug builds, we also scribble across the rest of the storage. memset(RHS.getInlineStorage(), 0xAD, InlineStorageSize); #endif } unique_function &operator=(unique_function &&RHS) noexcept { if (this == &RHS) return *this; // Because we don't try to provide any exception safety guarantees we can // implement move assignment very simply by first destroying the current // object and then move-constructing over top of it. this->~unique_function(); new (this) unique_function(std::move(RHS)); return *this; } template unique_function(CallableT Callable) { bool IsInlineStorage = true; void *CallableAddr = getInlineStorage(); if (sizeof(CallableT) > InlineStorageSize || alignof(CallableT) > alignof(decltype(StorageUnion.InlineStorage))) { IsInlineStorage = false; // Allocate out-of-line storage. FIXME: Use an explicit alignment // parameter in C++17 mode. auto Size = sizeof(CallableT); auto Alignment = alignof(CallableT); CallableAddr = allocate_buffer(Size, Alignment); setOutOfLineStorage(CallableAddr, Size, Alignment); } // Now move into the storage. new (CallableAddr) CallableT(std::move(Callable)); // See if we can create a trivial callback. We need the callable to be // trivially moved and trivially destroyed so that we don't have to store // type erased callbacks for those operations. // // FIXME: We should use constexpr if here and below to avoid instantiating // the non-trivial static objects when unnecessary. While the linker should // remove them, it is still wasteful. if (llvm::is_trivially_move_constructible::value && std::is_trivially_destructible::value) { // We need to create a nicely aligned object. We use a static variable // for this because it is a trivial struct. static TrivialCallback Callback = { &CallImpl }; CallbackAndInlineFlag = {&Callback, IsInlineStorage}; return; } // Otherwise, we need to point at an object that contains all the different // type erased behaviors needed. Create a static instance of the struct type // here and then use a pointer to that. static NonTrivialCallbacks Callbacks = { &CallImpl, &MoveImpl, &DestroyImpl}; CallbackAndInlineFlag = {&Callbacks, IsInlineStorage}; } ReturnT operator()(ParamTs... Params) { void *CallableAddr = isInlineStorage() ? getInlineStorage() : getOutOfLineStorage(); return (isTrivialCallback() ? getTrivialCallback() : getNonTrivialCallbacks()->CallPtr)(CallableAddr, Params...); } explicit operator bool() const { return (bool)CallbackAndInlineFlag.getPointer(); } }; } // end namespace llvm #endif // LLVM_ADT_FUNCTION_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/Hashing.h000066400000000000000000000622521423707623100264620ustar00rootroot00000000000000//===-- llvm/ADT/Hashing.h - Utilities for hashing --------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the newly proposed standard C++ interfaces for hashing // arbitrary data and building hash functions for user-defined types. This // interface was originally proposed in N3333[1] and is currently under review // for inclusion in a future TR and/or standard. // // The primary interfaces provide are comprised of one type and three functions: // // -- 'hash_code' class is an opaque type representing the hash code for some // data. It is the intended product of hashing, and can be used to implement // hash tables, checksumming, and other common uses of hashes. It is not an // integer type (although it can be converted to one) because it is risky // to assume much about the internals of a hash_code. In particular, each // execution of the program has a high probability of producing a different // hash_code for a given input. Thus their values are not stable to save or // persist, and should only be used during the execution for the // construction of hashing datastructures. // // -- 'hash_value' is a function designed to be overloaded for each // user-defined type which wishes to be used within a hashing context. It // should be overloaded within the user-defined type's namespace and found // via ADL. Overloads for primitive types are provided by this library. // // -- 'hash_combine' and 'hash_combine_range' are functions designed to aid // programmers in easily and intuitively combining a set of data into // a single hash_code for their object. They should only logically be used // within the implementation of a 'hash_value' routine or similar context. // // Note that 'hash_combine_range' contains very special logic for hashing // a contiguous array of integers or pointers. This logic is *extremely* fast, // on a modern Intel "Gainestown" Xeon (Nehalem uarch) @2.2 GHz, these were // benchmarked at over 6.5 GiB/s for large keys, and <20 cycles/hash for keys // under 32-bytes. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_HASHING_H #define LLVM_ADT_HASHING_H #include "llvm/Support/DataTypes.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/SwapByteOrder.h" #include "llvm/Support/type_traits.h" #include #include #include #include #include namespace llvm { /// An opaque object representing a hash code. /// /// This object represents the result of hashing some entity. It is intended to /// be used to implement hashtables or other hashing-based data structures. /// While it wraps and exposes a numeric value, this value should not be /// trusted to be stable or predictable across processes or executions. /// /// In order to obtain the hash_code for an object 'x': /// \code /// using llvm::hash_value; /// llvm::hash_code code = hash_value(x); /// \endcode class hash_code { size_t value; public: /// Default construct a hash_code. /// Note that this leaves the value uninitialized. hash_code() = default; /// Form a hash code directly from a numerical value. hash_code(size_t value) : value(value) {} /// Convert the hash code to its numerical value for use. /*explicit*/ operator size_t() const { return value; } friend bool operator==(const hash_code &lhs, const hash_code &rhs) { return lhs.value == rhs.value; } friend bool operator!=(const hash_code &lhs, const hash_code &rhs) { return lhs.value != rhs.value; } /// Allow a hash_code to be directly run through hash_value. friend size_t hash_value(const hash_code &code) { return code.value; } }; /// Compute a hash_code for any integer value. /// /// Note that this function is intended to compute the same hash_code for /// a particular value without regard to the pre-promotion type. This is in /// contrast to hash_combine which may produce different hash_codes for /// differing argument types even if they would implicit promote to a common /// type without changing the value. template typename std::enable_if::value, hash_code>::type hash_value(T value); /// Compute a hash_code for a pointer's address. /// /// N.B.: This hashes the *address*. Not the value and not the type. template hash_code hash_value(const T *ptr); /// Compute a hash_code for a pair of objects. template hash_code hash_value(const std::pair &arg); /// Compute a hash_code for a standard string. template hash_code hash_value(const std::basic_string &arg); /// Override the execution seed with a fixed value. /// /// This hashing library uses a per-execution seed designed to change on each /// run with high probability in order to ensure that the hash codes are not /// attackable and to ensure that output which is intended to be stable does /// not rely on the particulars of the hash codes produced. /// /// That said, there are use cases where it is important to be able to /// reproduce *exactly* a specific behavior. To that end, we provide a function /// which will forcibly set the seed to a fixed value. This must be done at the /// start of the program, before any hashes are computed. Also, it cannot be /// undone. This makes it thread-hostile and very hard to use outside of /// immediately on start of a simple program designed for reproducible /// behavior. void set_fixed_execution_hash_seed(uint64_t fixed_value); // All of the implementation details of actually computing the various hash // code values are held within this namespace. These routines are included in // the header file mainly to allow inlining and constant propagation. namespace hashing { namespace detail { inline uint64_t fetch64(const char *p) { uint64_t result; memcpy(&result, p, sizeof(result)); if (sys::IsBigEndianHost) sys::swapByteOrder(result); return result; } inline uint32_t fetch32(const char *p) { uint32_t result; memcpy(&result, p, sizeof(result)); if (sys::IsBigEndianHost) sys::swapByteOrder(result); return result; } /// Some primes between 2^63 and 2^64 for various uses. static const uint64_t k0 = 0xc3a5c85c97cb3127ULL; static const uint64_t k1 = 0xb492b66fbe98f273ULL; static const uint64_t k2 = 0x9ae16a3b2f90404fULL; static const uint64_t k3 = 0xc949d7c7509e6557ULL; /// Bitwise right rotate. /// Normally this will compile to a single instruction, especially if the /// shift is a manifest constant. inline uint64_t rotate(uint64_t val, size_t shift) { // Avoid shifting by 64: doing so yields an undefined result. return shift == 0 ? val : ((val >> shift) | (val << (64 - shift))); } inline uint64_t shift_mix(uint64_t val) { return val ^ (val >> 47); } inline uint64_t hash_16_bytes(uint64_t low, uint64_t high) { // Murmur-inspired hashing. const uint64_t kMul = 0x9ddfea08eb382d69ULL; uint64_t a = (low ^ high) * kMul; a ^= (a >> 47); uint64_t b = (high ^ a) * kMul; b ^= (b >> 47); b *= kMul; return b; } inline uint64_t hash_1to3_bytes(const char *s, size_t len, uint64_t seed) { uint8_t a = s[0]; uint8_t b = s[len >> 1]; uint8_t c = s[len - 1]; uint32_t y = static_cast(a) + (static_cast(b) << 8); uint32_t z = static_cast(len) + (static_cast(c) << 2); return shift_mix(y * k2 ^ z * k3 ^ seed) * k2; } inline uint64_t hash_4to8_bytes(const char *s, size_t len, uint64_t seed) { uint64_t a = fetch32(s); return hash_16_bytes(len + (a << 3), seed ^ fetch32(s + len - 4)); } inline uint64_t hash_9to16_bytes(const char *s, size_t len, uint64_t seed) { uint64_t a = fetch64(s); uint64_t b = fetch64(s + len - 8); return hash_16_bytes(seed ^ a, rotate(b + len, len)) ^ b; } inline uint64_t hash_17to32_bytes(const char *s, size_t len, uint64_t seed) { uint64_t a = fetch64(s) * k1; uint64_t b = fetch64(s + 8); uint64_t c = fetch64(s + len - 8) * k2; uint64_t d = fetch64(s + len - 16) * k0; return hash_16_bytes(rotate(a - b, 43) + rotate(c ^ seed, 30) + d, a + rotate(b ^ k3, 20) - c + len + seed); } inline uint64_t hash_33to64_bytes(const char *s, size_t len, uint64_t seed) { uint64_t z = fetch64(s + 24); uint64_t a = fetch64(s) + (len + fetch64(s + len - 16)) * k0; uint64_t b = rotate(a + z, 52); uint64_t c = rotate(a, 37); a += fetch64(s + 8); c += rotate(a, 7); a += fetch64(s + 16); uint64_t vf = a + z; uint64_t vs = b + rotate(a, 31) + c; a = fetch64(s + 16) + fetch64(s + len - 32); z = fetch64(s + len - 8); b = rotate(a + z, 52); c = rotate(a, 37); a += fetch64(s + len - 24); c += rotate(a, 7); a += fetch64(s + len - 16); uint64_t wf = a + z; uint64_t ws = b + rotate(a, 31) + c; uint64_t r = shift_mix((vf + ws) * k2 + (wf + vs) * k0); return shift_mix((seed ^ (r * k0)) + vs) * k2; } inline uint64_t hash_short(const char *s, size_t length, uint64_t seed) { if (length >= 4 && length <= 8) return hash_4to8_bytes(s, length, seed); if (length > 8 && length <= 16) return hash_9to16_bytes(s, length, seed); if (length > 16 && length <= 32) return hash_17to32_bytes(s, length, seed); if (length > 32) return hash_33to64_bytes(s, length, seed); if (length != 0) return hash_1to3_bytes(s, length, seed); return k2 ^ seed; } /// The intermediate state used during hashing. /// Currently, the algorithm for computing hash codes is based on CityHash and /// keeps 56 bytes of arbitrary state. struct hash_state { uint64_t h0 = 0, h1 = 0, h2 = 0, h3 = 0, h4 = 0, h5 = 0, h6 = 0; /// Create a new hash_state structure and initialize it based on the /// seed and the first 64-byte chunk. /// This effectively performs the initial mix. static hash_state create(const char *s, uint64_t seed) { hash_state state = { 0, seed, hash_16_bytes(seed, k1), rotate(seed ^ k1, 49), seed * k1, shift_mix(seed), 0 }; state.h6 = hash_16_bytes(state.h4, state.h5); state.mix(s); return state; } /// Mix 32-bytes from the input sequence into the 16-bytes of 'a' /// and 'b', including whatever is already in 'a' and 'b'. static void mix_32_bytes(const char *s, uint64_t &a, uint64_t &b) { a += fetch64(s); uint64_t c = fetch64(s + 24); b = rotate(b + a + c, 21); uint64_t d = a; a += fetch64(s + 8) + fetch64(s + 16); b += rotate(a, 44) + d; a += c; } /// Mix in a 64-byte buffer of data. /// We mix all 64 bytes even when the chunk length is smaller, but we /// record the actual length. void mix(const char *s) { h0 = rotate(h0 + h1 + h3 + fetch64(s + 8), 37) * k1; h1 = rotate(h1 + h4 + fetch64(s + 48), 42) * k1; h0 ^= h6; h1 += h3 + fetch64(s + 40); h2 = rotate(h2 + h5, 33) * k1; h3 = h4 * k1; h4 = h0 + h5; mix_32_bytes(s, h3, h4); h5 = h2 + h6; h6 = h1 + fetch64(s + 16); mix_32_bytes(s + 32, h5, h6); std::swap(h2, h0); } /// Compute the final 64-bit hash code value based on the current /// state and the length of bytes hashed. uint64_t finalize(size_t length) { return hash_16_bytes(hash_16_bytes(h3, h5) + shift_mix(h1) * k1 + h2, hash_16_bytes(h4, h6) + shift_mix(length) * k1 + h0); } }; /// A global, fixed seed-override variable. /// /// This variable can be set using the \see llvm::set_fixed_execution_seed /// function. See that function for details. Do not, under any circumstances, /// set or read this variable. extern uint64_t fixed_seed_override; inline uint64_t get_execution_seed() { // FIXME: This needs to be a per-execution seed. This is just a placeholder // implementation. Switching to a per-execution seed is likely to flush out // instability bugs and so will happen as its own commit. // // However, if there is a fixed seed override set the first time this is // called, return that instead of the per-execution seed. const uint64_t seed_prime = 0xff51afd7ed558ccdULL; static uint64_t seed = fixed_seed_override ? fixed_seed_override : seed_prime; return seed; } /// Trait to indicate whether a type's bits can be hashed directly. /// /// A type trait which is true if we want to combine values for hashing by /// reading the underlying data. It is false if values of this type must /// first be passed to hash_value, and the resulting hash_codes combined. // // FIXME: We want to replace is_integral_or_enum and is_pointer here with // a predicate which asserts that comparing the underlying storage of two // values of the type for equality is equivalent to comparing the two values // for equality. For all the platforms we care about, this holds for integers // and pointers, but there are platforms where it doesn't and we would like to // support user-defined types which happen to satisfy this property. template struct is_hashable_data : std::integral_constant::value || std::is_pointer::value) && 64 % sizeof(T) == 0)> {}; // Special case std::pair to detect when both types are viable and when there // is no alignment-derived padding in the pair. This is a bit of a lie because // std::pair isn't truly POD, but it's close enough in all reasonable // implementations for our use case of hashing the underlying data. template struct is_hashable_data > : std::integral_constant::value && is_hashable_data::value && (sizeof(T) + sizeof(U)) == sizeof(std::pair))> {}; /// Helper to get the hashable data representation for a type. /// This variant is enabled when the type itself can be used. template typename std::enable_if::value, T>::type get_hashable_data(const T &value) { return value; } /// Helper to get the hashable data representation for a type. /// This variant is enabled when we must first call hash_value and use the /// result as our data. template typename std::enable_if::value, size_t>::type get_hashable_data(const T &value) { using ::llvm::hash_value; return hash_value(value); } /// Helper to store data from a value into a buffer and advance the /// pointer into that buffer. /// /// This routine first checks whether there is enough space in the provided /// buffer, and if not immediately returns false. If there is space, it /// copies the underlying bytes of value into the buffer, advances the /// buffer_ptr past the copied bytes, and returns true. template bool store_and_advance(char *&buffer_ptr, char *buffer_end, const T& value, size_t offset = 0) { size_t store_size = sizeof(value) - offset; if (buffer_ptr + store_size > buffer_end) return false; const char *value_data = reinterpret_cast(&value); memcpy(buffer_ptr, value_data + offset, store_size); buffer_ptr += store_size; return true; } /// Implement the combining of integral values into a hash_code. /// /// This overload is selected when the value type of the iterator is /// integral. Rather than computing a hash_code for each object and then /// combining them, this (as an optimization) directly combines the integers. template hash_code hash_combine_range_impl(InputIteratorT first, InputIteratorT last) { const uint64_t seed = get_execution_seed(); char buffer[64], *buffer_ptr = buffer; char *const buffer_end = std::end(buffer); while (first != last && store_and_advance(buffer_ptr, buffer_end, get_hashable_data(*first))) ++first; if (first == last) return hash_short(buffer, buffer_ptr - buffer, seed); assert(buffer_ptr == buffer_end); hash_state state = state.create(buffer, seed); size_t length = 64; while (first != last) { // Fill up the buffer. We don't clear it, which re-mixes the last round // when only a partial 64-byte chunk is left. buffer_ptr = buffer; while (first != last && store_and_advance(buffer_ptr, buffer_end, get_hashable_data(*first))) ++first; // Rotate the buffer if we did a partial fill in order to simulate doing // a mix of the last 64-bytes. That is how the algorithm works when we // have a contiguous byte sequence, and we want to emulate that here. std::rotate(buffer, buffer_ptr, buffer_end); // Mix this chunk into the current state. state.mix(buffer); length += buffer_ptr - buffer; }; return state.finalize(length); } /// Implement the combining of integral values into a hash_code. /// /// This overload is selected when the value type of the iterator is integral /// and when the input iterator is actually a pointer. Rather than computing /// a hash_code for each object and then combining them, this (as an /// optimization) directly combines the integers. Also, because the integers /// are stored in contiguous memory, this routine avoids copying each value /// and directly reads from the underlying memory. template typename std::enable_if::value, hash_code>::type hash_combine_range_impl(ValueT *first, ValueT *last) { const uint64_t seed = get_execution_seed(); const char *s_begin = reinterpret_cast(first); const char *s_end = reinterpret_cast(last); const size_t length = std::distance(s_begin, s_end); if (length <= 64) return hash_short(s_begin, length, seed); const char *s_aligned_end = s_begin + (length & ~63); hash_state state = state.create(s_begin, seed); s_begin += 64; while (s_begin != s_aligned_end) { state.mix(s_begin); s_begin += 64; } if (length & 63) state.mix(s_end - 64); return state.finalize(length); } } // namespace detail } // namespace hashing /// Compute a hash_code for a sequence of values. /// /// This hashes a sequence of values. It produces the same hash_code as /// 'hash_combine(a, b, c, ...)', but can run over arbitrary sized sequences /// and is significantly faster given pointers and types which can be hashed as /// a sequence of bytes. template hash_code hash_combine_range(InputIteratorT first, InputIteratorT last) { return ::llvm::hashing::detail::hash_combine_range_impl(first, last); } // Implementation details for hash_combine. namespace hashing { namespace detail { /// Helper class to manage the recursive combining of hash_combine /// arguments. /// /// This class exists to manage the state and various calls involved in the /// recursive combining of arguments used in hash_combine. It is particularly /// useful at minimizing the code in the recursive calls to ease the pain /// caused by a lack of variadic functions. struct hash_combine_recursive_helper { char buffer[64] = {}; hash_state state; const uint64_t seed; public: /// Construct a recursive hash combining helper. /// /// This sets up the state for a recursive hash combine, including getting /// the seed and buffer setup. hash_combine_recursive_helper() : seed(get_execution_seed()) {} /// Combine one chunk of data into the current in-flight hash. /// /// This merges one chunk of data into the hash. First it tries to buffer /// the data. If the buffer is full, it hashes the buffer into its /// hash_state, empties it, and then merges the new chunk in. This also /// handles cases where the data straddles the end of the buffer. template char *combine_data(size_t &length, char *buffer_ptr, char *buffer_end, T data) { if (!store_and_advance(buffer_ptr, buffer_end, data)) { // Check for skew which prevents the buffer from being packed, and do // a partial store into the buffer to fill it. This is only a concern // with the variadic combine because that formation can have varying // argument types. size_t partial_store_size = buffer_end - buffer_ptr; memcpy(buffer_ptr, &data, partial_store_size); // If the store fails, our buffer is full and ready to hash. We have to // either initialize the hash state (on the first full buffer) or mix // this buffer into the existing hash state. Length tracks the *hashed* // length, not the buffered length. if (length == 0) { state = state.create(buffer, seed); length = 64; } else { // Mix this chunk into the current state and bump length up by 64. state.mix(buffer); length += 64; } // Reset the buffer_ptr to the head of the buffer for the next chunk of // data. buffer_ptr = buffer; // Try again to store into the buffer -- this cannot fail as we only // store types smaller than the buffer. if (!store_and_advance(buffer_ptr, buffer_end, data, partial_store_size)) llvm_unreachable("buffer smaller than stored type"); } return buffer_ptr; } /// Recursive, variadic combining method. /// /// This function recurses through each argument, combining that argument /// into a single hash. template hash_code combine(size_t length, char *buffer_ptr, char *buffer_end, const T &arg, const Ts &...args) { buffer_ptr = combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg)); // Recurse to the next argument. return combine(length, buffer_ptr, buffer_end, args...); } /// Base case for recursive, variadic combining. /// /// The base case when combining arguments recursively is reached when all /// arguments have been handled. It flushes the remaining buffer and /// constructs a hash_code. hash_code combine(size_t length, char *buffer_ptr, char *buffer_end) { // Check whether the entire set of values fit in the buffer. If so, we'll // use the optimized short hashing routine and skip state entirely. if (length == 0) return hash_short(buffer, buffer_ptr - buffer, seed); // Mix the final buffer, rotating it if we did a partial fill in order to // simulate doing a mix of the last 64-bytes. That is how the algorithm // works when we have a contiguous byte sequence, and we want to emulate // that here. std::rotate(buffer, buffer_ptr, buffer_end); // Mix this chunk into the current state. state.mix(buffer); length += buffer_ptr - buffer; return state.finalize(length); } }; } // namespace detail } // namespace hashing /// Combine values into a single hash_code. /// /// This routine accepts a varying number of arguments of any type. It will /// attempt to combine them into a single hash_code. For user-defined types it /// attempts to call a \see hash_value overload (via ADL) for the type. For /// integer and pointer types it directly combines their data into the /// resulting hash_code. /// /// The result is suitable for returning from a user's hash_value /// *implementation* for their user-defined type. Consumers of a type should /// *not* call this routine, they should instead call 'hash_value'. template hash_code hash_combine(const Ts &...args) { // Recursively hash each argument using a helper class. ::llvm::hashing::detail::hash_combine_recursive_helper helper; return helper.combine(0, helper.buffer, helper.buffer + 64, args...); } // Implementation details for implementations of hash_value overloads provided // here. namespace hashing { namespace detail { /// Helper to hash the value of a single integer. /// /// Overloads for smaller integer types are not provided to ensure consistent /// behavior in the presence of integral promotions. Essentially, /// "hash_value('4')" and "hash_value('0' + 4)" should be the same. inline hash_code hash_integer_value(uint64_t value) { // Similar to hash_4to8_bytes but using a seed instead of length. const uint64_t seed = get_execution_seed(); const char *s = reinterpret_cast(&value); const uint64_t a = fetch32(s); return hash_16_bytes(seed + (a << 3), fetch32(s + 4)); } } // namespace detail } // namespace hashing // Declared and documented above, but defined here so that any of the hashing // infrastructure is available. template typename std::enable_if::value, hash_code>::type hash_value(T value) { return ::llvm::hashing::detail::hash_integer_value( static_cast(value)); } // Declared and documented above, but defined here so that any of the hashing // infrastructure is available. template hash_code hash_value(const T *ptr) { return ::llvm::hashing::detail::hash_integer_value( reinterpret_cast(ptr)); } // Declared and documented above, but defined here so that any of the hashing // infrastructure is available. template hash_code hash_value(const std::pair &arg) { return hash_combine(arg.first, arg.second); } // Declared and documented above, but defined here so that any of the hashing // infrastructure is available. template hash_code hash_value(const std::basic_string &arg) { return hash_combine_range(arg.begin(), arg.end()); } } // namespace llvm #endif binaryen-version_108/third_party/llvm-project/include/llvm/ADT/MapVector.h000066400000000000000000000174531423707623100270040ustar00rootroot00000000000000//===- llvm/ADT/MapVector.h - Map w/ deterministic value order --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements a map that provides insertion order iteration. The // interface is purposefully minimal. The key is assumed to be cheap to copy // and 2 copies are kept, one for indexing in a DenseMap, one for iteration in // a std::vector. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_MAPVECTOR_H #define LLVM_ADT_MAPVECTOR_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" #include #include #include #include #include #include #include namespace llvm { /// This class implements a map that also provides access to all stored values /// in a deterministic order. The values are kept in a std::vector and the /// mapping is done with DenseMap from Keys to indexes in that vector. template, typename VectorType = std::vector>> class MapVector { MapType Map; VectorType Vector; static_assert( std::is_integral::value, "The mapped_type of the specified Map must be an integral type"); public: using value_type = typename VectorType::value_type; using size_type = typename VectorType::size_type; using iterator = typename VectorType::iterator; using const_iterator = typename VectorType::const_iterator; using reverse_iterator = typename VectorType::reverse_iterator; using const_reverse_iterator = typename VectorType::const_reverse_iterator; /// Clear the MapVector and return the underlying vector. VectorType takeVector() { Map.clear(); return std::move(Vector); } size_type size() const { return Vector.size(); } /// Grow the MapVector so that it can contain at least \p NumEntries items /// before resizing again. void reserve(size_type NumEntries) { Map.reserve(NumEntries); Vector.reserve(NumEntries); } iterator begin() { return Vector.begin(); } const_iterator begin() const { return Vector.begin(); } iterator end() { return Vector.end(); } const_iterator end() const { return Vector.end(); } reverse_iterator rbegin() { return Vector.rbegin(); } const_reverse_iterator rbegin() const { return Vector.rbegin(); } reverse_iterator rend() { return Vector.rend(); } const_reverse_iterator rend() const { return Vector.rend(); } bool empty() const { return Vector.empty(); } std::pair &front() { return Vector.front(); } const std::pair &front() const { return Vector.front(); } std::pair &back() { return Vector.back(); } const std::pair &back() const { return Vector.back(); } void clear() { Map.clear(); Vector.clear(); } void swap(MapVector &RHS) { std::swap(Map, RHS.Map); std::swap(Vector, RHS.Vector); } ValueT &operator[](const KeyT &Key) { std::pair Pair = std::make_pair(Key, 0); std::pair Result = Map.insert(Pair); auto &I = Result.first->second; if (Result.second) { Vector.push_back(std::make_pair(Key, ValueT())); I = Vector.size() - 1; } return Vector[I].second; } // Returns a copy of the value. Only allowed if ValueT is copyable. ValueT lookup(const KeyT &Key) const { static_assert(std::is_copy_constructible::value, "Cannot call lookup() if ValueT is not copyable."); typename MapType::const_iterator Pos = Map.find(Key); return Pos == Map.end()? ValueT() : Vector[Pos->second].second; } std::pair insert(const std::pair &KV) { std::pair Pair = std::make_pair(KV.first, 0); std::pair Result = Map.insert(Pair); auto &I = Result.first->second; if (Result.second) { Vector.push_back(std::make_pair(KV.first, KV.second)); I = Vector.size() - 1; return std::make_pair(std::prev(end()), true); } return std::make_pair(begin() + I, false); } std::pair insert(std::pair &&KV) { // Copy KV.first into the map, then move it into the vector. std::pair Pair = std::make_pair(KV.first, 0); std::pair Result = Map.insert(Pair); auto &I = Result.first->second; if (Result.second) { Vector.push_back(std::move(KV)); I = Vector.size() - 1; return std::make_pair(std::prev(end()), true); } return std::make_pair(begin() + I, false); } size_type count(const KeyT &Key) const { typename MapType::const_iterator Pos = Map.find(Key); return Pos == Map.end()? 0 : 1; } iterator find(const KeyT &Key) { typename MapType::const_iterator Pos = Map.find(Key); return Pos == Map.end()? Vector.end() : (Vector.begin() + Pos->second); } const_iterator find(const KeyT &Key) const { typename MapType::const_iterator Pos = Map.find(Key); return Pos == Map.end()? Vector.end() : (Vector.begin() + Pos->second); } /// Remove the last element from the vector. void pop_back() { typename MapType::iterator Pos = Map.find(Vector.back().first); Map.erase(Pos); Vector.pop_back(); } /// Remove the element given by Iterator. /// /// Returns an iterator to the element following the one which was removed, /// which may be end(). /// /// \note This is a deceivingly expensive operation (linear time). It's /// usually better to use \a remove_if() if possible. typename VectorType::iterator erase(typename VectorType::iterator Iterator) { Map.erase(Iterator->first); auto Next = Vector.erase(Iterator); if (Next == Vector.end()) return Next; // Update indices in the map. size_t Index = Next - Vector.begin(); for (auto &I : Map) { assert(I.second != Index && "Index was already erased!"); if (I.second > Index) --I.second; } return Next; } /// Remove all elements with the key value Key. /// /// Returns the number of elements removed. size_type erase(const KeyT &Key) { auto Iterator = find(Key); if (Iterator == end()) return 0; erase(Iterator); return 1; } /// Remove the elements that match the predicate. /// /// Erase all elements that match \c Pred in a single pass. Takes linear /// time. template void remove_if(Predicate Pred); }; template template void MapVector::remove_if(Function Pred) { auto O = Vector.begin(); for (auto I = O, E = Vector.end(); I != E; ++I) { if (Pred(*I)) { // Erase from the map. Map.erase(I->first); continue; } if (I != O) { // Move the value and update the index in the map. *O = std::move(*I); Map[O->first] = O - Vector.begin(); } ++O; } // Erase trailing entries in the vector. Vector.erase(O, Vector.end()); } /// A MapVector that performs no allocations if smaller than a certain /// size. template struct SmallMapVector : MapVector, SmallVector, N>> { }; } // end namespace llvm #endif // LLVM_ADT_MAPVECTOR_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/None.h000066400000000000000000000017271423707623100260000ustar00rootroot00000000000000//===-- None.h - Simple null value for implicit construction ------*- C++ -*-=// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file provides None, an enumerator for use in implicit constructors // of various (usually templated) types to make such construction more // terse. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_NONE_H #define LLVM_ADT_NONE_H namespace llvm { /// A simple null object to allow implicit construction of Optional /// and similar types without having to spell out the specialization's name. // (constant value 1 in an attempt to workaround MSVC build issue... ) enum class NoneType { None = 1 }; const NoneType None = NoneType::None; } #endif binaryen-version_108/third_party/llvm-project/include/llvm/ADT/Optional.h000066400000000000000000000244651423707623100266720ustar00rootroot00000000000000//===- Optional.h - Simple variant for passing optional values --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file provides Optional, a template class modeled in the spirit of // OCaml's 'opt' variant. The idea is to strongly type whether or not // a value can be optional. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_OPTIONAL_H #define LLVM_ADT_OPTIONAL_H #include "llvm/ADT/None.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/type_traits.h" #include #include #include #include namespace llvm { class raw_ostream; namespace optional_detail { struct in_place_t {}; /// Storage for any type. template ::value> class OptionalStorage { union { char empty; T value; }; bool hasVal; public: ~OptionalStorage() { reset(); } OptionalStorage() noexcept : empty(), hasVal(false) {} OptionalStorage(OptionalStorage const &other) : OptionalStorage() { if (other.hasValue()) { emplace(other.value); } } OptionalStorage(OptionalStorage &&other) : OptionalStorage() { if (other.hasValue()) { emplace(std::move(other.value)); } } template explicit OptionalStorage(in_place_t, Args &&... args) : value(std::forward(args)...), hasVal(true) {} void reset() noexcept { if (hasVal) { value.~T(); hasVal = false; } } bool hasValue() const noexcept { return hasVal; } T &getValue() LLVM_LVALUE_FUNCTION noexcept { assert(hasVal); return value; } T const &getValue() const LLVM_LVALUE_FUNCTION noexcept { assert(hasVal); return value; } #if LLVM_HAS_RVALUE_REFERENCE_THIS T &&getValue() && noexcept { assert(hasVal); return std::move(value); } #endif template void emplace(Args &&... args) { reset(); ::new ((void *)std::addressof(value)) T(std::forward(args)...); hasVal = true; } OptionalStorage &operator=(T const &y) { if (hasValue()) { value = y; } else { ::new ((void *)std::addressof(value)) T(y); hasVal = true; } return *this; } OptionalStorage &operator=(T &&y) { if (hasValue()) { value = std::move(y); } else { ::new ((void *)std::addressof(value)) T(std::move(y)); hasVal = true; } return *this; } OptionalStorage &operator=(OptionalStorage const &other) { if (other.hasValue()) { if (hasValue()) { value = other.value; } else { ::new ((void *)std::addressof(value)) T(other.value); hasVal = true; } } else { reset(); } return *this; } OptionalStorage &operator=(OptionalStorage &&other) { if (other.hasValue()) { if (hasValue()) { value = std::move(other.value); } else { ::new ((void *)std::addressof(value)) T(std::move(other.value)); hasVal = true; } } else { reset(); } return *this; } }; template class OptionalStorage { union { char empty; T value; }; bool hasVal = false; public: ~OptionalStorage() = default; OptionalStorage() noexcept : empty{} {} OptionalStorage(OptionalStorage const &other) = default; OptionalStorage(OptionalStorage &&other) = default; OptionalStorage &operator=(OptionalStorage const &other) = default; OptionalStorage &operator=(OptionalStorage &&other) = default; template explicit OptionalStorage(in_place_t, Args &&... args) : value(std::forward(args)...), hasVal(true) {} void reset() noexcept { if (hasVal) { value.~T(); hasVal = false; } } bool hasValue() const noexcept { return hasVal; } T &getValue() LLVM_LVALUE_FUNCTION noexcept { assert(hasVal); return value; } T const &getValue() const LLVM_LVALUE_FUNCTION noexcept { assert(hasVal); return value; } #if LLVM_HAS_RVALUE_REFERENCE_THIS T &&getValue() && noexcept { assert(hasVal); return std::move(value); } #endif template void emplace(Args &&... args) { reset(); ::new ((void *)std::addressof(value)) T(std::forward(args)...); hasVal = true; } OptionalStorage &operator=(T const &y) { if (hasValue()) { value = y; } else { ::new ((void *)std::addressof(value)) T(y); hasVal = true; } return *this; } OptionalStorage &operator=(T &&y) { if (hasValue()) { value = std::move(y); } else { ::new ((void *)std::addressof(value)) T(std::move(y)); hasVal = true; } return *this; } }; } // namespace optional_detail template class Optional { optional_detail::OptionalStorage Storage; public: using value_type = T; constexpr Optional() {} constexpr Optional(NoneType) {} Optional(const T &y) : Storage(optional_detail::in_place_t{}, y) {} Optional(const Optional &O) = default; Optional(T &&y) : Storage(optional_detail::in_place_t{}, std::move(y)) {} Optional(Optional &&O) = default; Optional &operator=(T &&y) { Storage = std::move(y); return *this; } Optional &operator=(Optional &&O) = default; /// Create a new object by constructing it in place with the given arguments. template void emplace(ArgTypes &&... Args) { Storage.emplace(std::forward(Args)...); } static inline Optional create(const T *y) { return y ? Optional(*y) : Optional(); } Optional &operator=(const T &y) { Storage = y; return *this; } Optional &operator=(const Optional &O) = default; void reset() { Storage.reset(); } const T *getPointer() const { return &Storage.getValue(); } T *getPointer() { return &Storage.getValue(); } const T &getValue() const LLVM_LVALUE_FUNCTION { return Storage.getValue(); } T &getValue() LLVM_LVALUE_FUNCTION { return Storage.getValue(); } explicit operator bool() const { return hasValue(); } bool hasValue() const { return Storage.hasValue(); } const T *operator->() const { return getPointer(); } T *operator->() { return getPointer(); } const T &operator*() const LLVM_LVALUE_FUNCTION { return getValue(); } T &operator*() LLVM_LVALUE_FUNCTION { return getValue(); } template constexpr T getValueOr(U &&value) const LLVM_LVALUE_FUNCTION { return hasValue() ? getValue() : std::forward(value); } #if LLVM_HAS_RVALUE_REFERENCE_THIS T &&getValue() && { return std::move(Storage.getValue()); } T &&operator*() && { return std::move(Storage.getValue()); } template T getValueOr(U &&value) && { return hasValue() ? std::move(getValue()) : std::forward(value); } #endif }; template bool operator==(const Optional &X, const Optional &Y) { if (X && Y) return *X == *Y; return X.hasValue() == Y.hasValue(); } template bool operator!=(const Optional &X, const Optional &Y) { return !(X == Y); } template bool operator<(const Optional &X, const Optional &Y) { if (X && Y) return *X < *Y; return X.hasValue() < Y.hasValue(); } template bool operator<=(const Optional &X, const Optional &Y) { return !(Y < X); } template bool operator>(const Optional &X, const Optional &Y) { return Y < X; } template bool operator>=(const Optional &X, const Optional &Y) { return !(X < Y); } template bool operator==(const Optional &X, NoneType) { return !X; } template bool operator==(NoneType, const Optional &X) { return X == None; } template bool operator!=(const Optional &X, NoneType) { return !(X == None); } template bool operator!=(NoneType, const Optional &X) { return X != None; } template bool operator<(const Optional &X, NoneType) { return false; } template bool operator<(NoneType, const Optional &X) { return X.hasValue(); } template bool operator<=(const Optional &X, NoneType) { return !(None < X); } template bool operator<=(NoneType, const Optional &X) { return !(X < None); } template bool operator>(const Optional &X, NoneType) { return None < X; } template bool operator>(NoneType, const Optional &X) { return X < None; } template bool operator>=(const Optional &X, NoneType) { return None <= X; } template bool operator>=(NoneType, const Optional &X) { return X <= None; } template bool operator==(const Optional &X, const T &Y) { return X && *X == Y; } template bool operator==(const T &X, const Optional &Y) { return Y && X == *Y; } template bool operator!=(const Optional &X, const T &Y) { return !(X == Y); } template bool operator!=(const T &X, const Optional &Y) { return !(X == Y); } template bool operator<(const Optional &X, const T &Y) { return !X || *X < Y; } template bool operator<(const T &X, const Optional &Y) { return Y && X < *Y; } template bool operator<=(const Optional &X, const T &Y) { return !(Y < X); } template bool operator<=(const T &X, const Optional &Y) { return !(Y < X); } template bool operator>(const Optional &X, const T &Y) { return Y < X; } template bool operator>(const T &X, const Optional &Y) { return Y < X; } template bool operator>=(const Optional &X, const T &Y) { return !(X < Y); } template bool operator>=(const T &X, const Optional &Y) { return !(X < Y); } raw_ostream &operator<<(raw_ostream &OS, NoneType); template () << std::declval())> raw_ostream &operator<<(raw_ostream &OS, const Optional &O) { if (O) OS << *O; else OS << None; return OS; } } // end namespace llvm #endif // LLVM_ADT_OPTIONAL_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/PointerIntPair.h000066400000000000000000000212661423707623100300100ustar00rootroot00000000000000//===- llvm/ADT/PointerIntPair.h - Pair for pointer and int -----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the PointerIntPair class. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_POINTERINTPAIR_H #define LLVM_ADT_POINTERINTPAIR_H #include "llvm/Support/Compiler.h" #include "llvm/Support/PointerLikeTypeTraits.h" #include "llvm/Support/type_traits.h" #include #include #include namespace llvm { template struct DenseMapInfo; template struct PointerIntPairInfo; /// PointerIntPair - This class implements a pair of a pointer and small /// integer. It is designed to represent this in the space required by one /// pointer by bitmangling the integer into the low part of the pointer. This /// can only be done for small integers: typically up to 3 bits, but it depends /// on the number of bits available according to PointerLikeTypeTraits for the /// type. /// /// Note that PointerIntPair always puts the IntVal part in the highest bits /// possible. For example, PointerIntPair will put the bit for /// the bool into bit #2, not bit #0, which allows the low two bits to be used /// for something else. For example, this allows: /// PointerIntPair, 1, bool> /// ... and the two bools will land in different bits. template , typename Info = PointerIntPairInfo> class PointerIntPair { // Used by MSVC visualizer and generally helpful for debugging/visualizing. using InfoTy = Info; intptr_t Value = 0; public: constexpr PointerIntPair() = default; PointerIntPair(PointerTy PtrVal, IntType IntVal) { setPointerAndInt(PtrVal, IntVal); } explicit PointerIntPair(PointerTy PtrVal) { initWithPointer(PtrVal); } PointerTy getPointer() const { return Info::getPointer(Value); } IntType getInt() const { return (IntType)Info::getInt(Value); } void setPointer(PointerTy PtrVal) LLVM_LVALUE_FUNCTION { Value = Info::updatePointer(Value, PtrVal); } void setInt(IntType IntVal) LLVM_LVALUE_FUNCTION { Value = Info::updateInt(Value, static_cast(IntVal)); } void initWithPointer(PointerTy PtrVal) LLVM_LVALUE_FUNCTION { Value = Info::updatePointer(0, PtrVal); } void setPointerAndInt(PointerTy PtrVal, IntType IntVal) LLVM_LVALUE_FUNCTION { Value = Info::updateInt(Info::updatePointer(0, PtrVal), static_cast(IntVal)); } PointerTy const *getAddrOfPointer() const { return const_cast(this)->getAddrOfPointer(); } PointerTy *getAddrOfPointer() { assert(Value == reinterpret_cast(getPointer()) && "Can only return the address if IntBits is cleared and " "PtrTraits doesn't change the pointer"); return reinterpret_cast(&Value); } void *getOpaqueValue() const { return reinterpret_cast(Value); } void setFromOpaqueValue(void *Val) LLVM_LVALUE_FUNCTION { Value = reinterpret_cast(Val); } static PointerIntPair getFromOpaqueValue(void *V) { PointerIntPair P; P.setFromOpaqueValue(V); return P; } // Allow PointerIntPairs to be created from const void * if and only if the // pointer type could be created from a const void *. static PointerIntPair getFromOpaqueValue(const void *V) { (void)PtrTraits::getFromVoidPointer(V); return getFromOpaqueValue(const_cast(V)); } bool operator==(const PointerIntPair &RHS) const { return Value == RHS.Value; } bool operator!=(const PointerIntPair &RHS) const { return Value != RHS.Value; } bool operator<(const PointerIntPair &RHS) const { return Value < RHS.Value; } bool operator>(const PointerIntPair &RHS) const { return Value > RHS.Value; } bool operator<=(const PointerIntPair &RHS) const { return Value <= RHS.Value; } bool operator>=(const PointerIntPair &RHS) const { return Value >= RHS.Value; } }; // Specialize is_trivially_copyable to avoid limitation of llvm::is_trivially_copyable // when compiled with gcc 4.9. template struct is_trivially_copyable> : std::true_type { #ifdef HAVE_STD_IS_TRIVIALLY_COPYABLE static_assert(std::is_trivially_copyable>::value, "inconsistent behavior between llvm:: and std:: implementation of is_trivially_copyable"); #endif }; template struct PointerIntPairInfo { static_assert(PtrTraits::NumLowBitsAvailable < std::numeric_limits::digits, "cannot use a pointer type that has all bits free"); static_assert(IntBits <= PtrTraits::NumLowBitsAvailable, "PointerIntPair with integer size too large for pointer"); enum : uintptr_t { /// PointerBitMask - The bits that come from the pointer. PointerBitMask = ~(uintptr_t)(((intptr_t)1 << PtrTraits::NumLowBitsAvailable) - 1), /// IntShift - The number of low bits that we reserve for other uses, and /// keep zero. IntShift = (uintptr_t)PtrTraits::NumLowBitsAvailable - IntBits, /// IntMask - This is the unshifted mask for valid bits of the int type. IntMask = (uintptr_t)(((intptr_t)1 << IntBits) - 1), // ShiftedIntMask - This is the bits for the integer shifted in place. ShiftedIntMask = (uintptr_t)(IntMask << IntShift) }; static PointerT getPointer(intptr_t Value) { return PtrTraits::getFromVoidPointer( reinterpret_cast(Value & PointerBitMask)); } static intptr_t getInt(intptr_t Value) { return (Value >> IntShift) & IntMask; } static intptr_t updatePointer(intptr_t OrigValue, PointerT Ptr) { intptr_t PtrWord = reinterpret_cast(PtrTraits::getAsVoidPointer(Ptr)); assert((PtrWord & ~PointerBitMask) == 0 && "Pointer is not sufficiently aligned"); // Preserve all low bits, just update the pointer. return PtrWord | (OrigValue & ~PointerBitMask); } static intptr_t updateInt(intptr_t OrigValue, intptr_t Int) { intptr_t IntWord = static_cast(Int); assert((IntWord & ~IntMask) == 0 && "Integer too large for field"); // Preserve all bits other than the ones we are updating. return (OrigValue & ~ShiftedIntMask) | IntWord << IntShift; } }; // Provide specialization of DenseMapInfo for PointerIntPair. template struct DenseMapInfo> { using Ty = PointerIntPair; static Ty getEmptyKey() { uintptr_t Val = static_cast(-1); Val <<= PointerLikeTypeTraits::NumLowBitsAvailable; return Ty::getFromOpaqueValue(reinterpret_cast(Val)); } static Ty getTombstoneKey() { uintptr_t Val = static_cast(-2); Val <<= PointerLikeTypeTraits::NumLowBitsAvailable; return Ty::getFromOpaqueValue(reinterpret_cast(Val)); } static unsigned getHashValue(Ty V) { uintptr_t IV = reinterpret_cast(V.getOpaqueValue()); return unsigned(IV) ^ unsigned(IV >> 9); } static bool isEqual(const Ty &LHS, const Ty &RHS) { return LHS == RHS; } }; // Teach SmallPtrSet that PointerIntPair is "basically a pointer". template struct PointerLikeTypeTraits< PointerIntPair> { static inline void * getAsVoidPointer(const PointerIntPair &P) { return P.getOpaqueValue(); } static inline PointerIntPair getFromVoidPointer(void *P) { return PointerIntPair::getFromOpaqueValue(P); } static inline PointerIntPair getFromVoidPointer(const void *P) { return PointerIntPair::getFromOpaqueValue(P); } enum { NumLowBitsAvailable = PtrTraits::NumLowBitsAvailable - IntBits }; }; } // end namespace llvm #endif // LLVM_ADT_POINTERINTPAIR_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/PointerUnion.h000066400000000000000000000251121423707623100275240ustar00rootroot00000000000000//===- llvm/ADT/PointerUnion.h - Discriminated Union of 2 Ptrs --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the PointerUnion class, which is a discriminated union of // pointer types. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_POINTERUNION_H #define LLVM_ADT_POINTERUNION_H #include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/Support/PointerLikeTypeTraits.h" #include #include #include namespace llvm { template struct PointerUnionTypeSelectorReturn { using Return = T; }; /// Get a type based on whether two types are the same or not. /// /// For: /// /// \code /// using Ret = typename PointerUnionTypeSelector::Return; /// \endcode /// /// Ret will be EQ type if T1 is same as T2 or NE type otherwise. template struct PointerUnionTypeSelector { using Return = typename PointerUnionTypeSelectorReturn::Return; }; template struct PointerUnionTypeSelector { using Return = typename PointerUnionTypeSelectorReturn::Return; }; template struct PointerUnionTypeSelectorReturn< PointerUnionTypeSelector> { using Return = typename PointerUnionTypeSelector::Return; }; namespace pointer_union_detail { /// Determine the number of bits required to store integers with values < n. /// This is ceil(log2(n)). constexpr int bitsRequired(unsigned n) { return n > 1 ? 1 + bitsRequired((n + 1) / 2) : 0; } template constexpr int lowBitsAvailable() { return std::min({PointerLikeTypeTraits::NumLowBitsAvailable...}); } /// Find the index of a type in a list of types. TypeIndex::Index /// is the index of T in Us, or sizeof...(Us) if T does not appear in the /// list. template struct TypeIndex; template struct TypeIndex { static constexpr int Index = 0; }; template struct TypeIndex { static constexpr int Index = 1 + TypeIndex::Index; }; template struct TypeIndex { static constexpr int Index = 0; }; /// Find the first type in a list of types. template struct GetFirstType { using type = T; }; /// Provide PointerLikeTypeTraits for void* that is used by PointerUnion /// for the template arguments. template class PointerUnionUIntTraits { public: static inline void *getAsVoidPointer(void *P) { return P; } static inline void *getFromVoidPointer(void *P) { return P; } static constexpr int NumLowBitsAvailable = lowBitsAvailable(); }; /// Implement assigment in terms of construction. template struct AssignableFrom { Derived &operator=(T t) { return static_cast(*this) = Derived(t); } }; template class PointerUnionMembers; template class PointerUnionMembers { protected: ValTy Val; PointerUnionMembers() = default; PointerUnionMembers(ValTy Val) : Val(Val) {} friend struct PointerLikeTypeTraits; }; template class PointerUnionMembers : public PointerUnionMembers { using Base = PointerUnionMembers; public: using Base::Base; PointerUnionMembers() = default; PointerUnionMembers(Type V) : Base(ValTy(const_cast( PointerLikeTypeTraits::getAsVoidPointer(V)), I)) {} using Base::operator=; Derived &operator=(Type V) { this->Val = ValTy( const_cast(PointerLikeTypeTraits::getAsVoidPointer(V)), I); return static_cast(*this); }; }; } /// A discriminated union of two or more pointer types, with the discriminator /// in the low bit of the pointer. /// /// This implementation is extremely efficient in space due to leveraging the /// low bits of the pointer, while exposing a natural and type-safe API. /// /// Common use patterns would be something like this: /// PointerUnion P; /// P = (int*)0; /// printf("%d %d", P.is(), P.is()); // prints "1 0" /// X = P.get(); // ok. /// Y = P.get(); // runtime assertion failure. /// Z = P.get(); // compile time failure. /// P = (float*)0; /// Y = P.get(); // ok. /// X = P.get(); // runtime assertion failure. template class PointerUnion : public pointer_union_detail::PointerUnionMembers< PointerUnion, PointerIntPair< void *, pointer_union_detail::bitsRequired(sizeof...(PTs)), int, pointer_union_detail::PointerUnionUIntTraits>, 0, PTs...> { // The first type is special because we want to directly cast a pointer to a // default-initialized union to a pointer to the first type. But we don't // want PointerUnion to be a 'template ' // because it's much more convenient to have a name for the whole pack. So // split off the first type here. using First = typename pointer_union_detail::GetFirstType::type; using Base = typename PointerUnion::PointerUnionMembers; public: PointerUnion() = default; PointerUnion(std::nullptr_t) : PointerUnion() {} using Base::Base; /// Test if the pointer held in the union is null, regardless of /// which type it is. bool isNull() const { return !this->Val.getPointer(); } explicit operator bool() const { return !isNull(); } /// Test if the Union currently holds the type matching T. template int is() const { constexpr int Index = pointer_union_detail::TypeIndex::Index; static_assert(Index < sizeof...(PTs), "PointerUnion::is given type not in the union"); return this->Val.getInt() == Index; } /// Returns the value of the specified pointer type. /// /// If the specified pointer type is incorrect, assert. template T get() const { assert(is() && "Invalid accessor called"); return PointerLikeTypeTraits::getFromVoidPointer(this->Val.getPointer()); } /// Returns the current pointer if it is of the specified pointer type, /// otherwises returns null. template T dyn_cast() const { if (is()) return get(); return T(); } /// If the union is set to the first pointer type get an address pointing to /// it. First const *getAddrOfPtr1() const { return const_cast(this)->getAddrOfPtr1(); } /// If the union is set to the first pointer type get an address pointing to /// it. First *getAddrOfPtr1() { assert(is() && "Val is not the first pointer"); assert( PointerLikeTypeTraits::getAsVoidPointer(get()) == this->Val.getPointer() && "Can't get the address because PointerLikeTypeTraits changes the ptr"); return const_cast( reinterpret_cast(this->Val.getAddrOfPointer())); } /// Assignment from nullptr which just clears the union. const PointerUnion &operator=(std::nullptr_t) { this->Val.initWithPointer(nullptr); return *this; } /// Assignment from elements of the union. using Base::operator=; void *getOpaqueValue() const { return this->Val.getOpaqueValue(); } static inline PointerUnion getFromOpaqueValue(void *VP) { PointerUnion V; V.Val = decltype(V.Val)::getFromOpaqueValue(VP); return V; } }; template bool operator==(PointerUnion lhs, PointerUnion rhs) { return lhs.getOpaqueValue() == rhs.getOpaqueValue(); } template bool operator!=(PointerUnion lhs, PointerUnion rhs) { return lhs.getOpaqueValue() != rhs.getOpaqueValue(); } template bool operator<(PointerUnion lhs, PointerUnion rhs) { return lhs.getOpaqueValue() < rhs.getOpaqueValue(); } // Teach SmallPtrSet that PointerUnion is "basically a pointer", that has // # low bits available = min(PT1bits,PT2bits)-1. template struct PointerLikeTypeTraits> { static inline void *getAsVoidPointer(const PointerUnion &P) { return P.getOpaqueValue(); } static inline PointerUnion getFromVoidPointer(void *P) { return PointerUnion::getFromOpaqueValue(P); } // The number of bits available are the min of the pointer types minus the // bits needed for the discriminator. static constexpr int NumLowBitsAvailable = PointerLikeTypeTraits::Val)>::NumLowBitsAvailable; }; /// A pointer union of three pointer types. See documentation for PointerUnion /// for usage. template using PointerUnion3 = PointerUnion; /// A pointer union of four pointer types. See documentation for PointerUnion /// for usage. template using PointerUnion4 = PointerUnion; // Teach DenseMap how to use PointerUnions as keys. template struct DenseMapInfo> { using Union = PointerUnion; using FirstInfo = DenseMapInfo::type>; static inline Union getEmptyKey() { return Union(FirstInfo::getEmptyKey()); } static inline Union getTombstoneKey() { return Union(FirstInfo::getTombstoneKey()); } static unsigned getHashValue(const Union &UnionVal) { intptr_t key = (intptr_t)UnionVal.getOpaqueValue(); return DenseMapInfo::getHashValue(key); } static bool isEqual(const Union &LHS, const Union &RHS) { return LHS == RHS; } }; } // end namespace llvm #endif // LLVM_ADT_POINTERUNION_H binaryen-version_108/third_party/llvm-project/include/llvm/ADT/STLExtras.h000066400000000000000000001552331423707623100267340ustar00rootroot00000000000000//===- llvm/ADT/STLExtras.h - Useful STL related functions ------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains some templates that are useful if you are working with the // STL at all. // // No library is required when using these functions. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_STLEXTRAS_H #define LLVM_ADT_STLEXTRAS_H #include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/iterator.h" #include "llvm/ADT/iterator_range.h" #include "llvm/Config/abi-breaking.h" #include "llvm/Support/ErrorHandling.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef EXPENSIVE_CHECKS #include // for std::mt19937 #endif namespace llvm { // Only used by compiler if both template types are the same. Useful when // using SFINAE to test for the existence of member functions. template struct SameType; namespace detail { template using IterOfRange = decltype(std::begin(std::declval())); template using ValueOfRange = typename std::remove_reference()))>::type; } // end namespace detail //===----------------------------------------------------------------------===// // Extra additions to //===----------------------------------------------------------------------===// template struct negation : std::integral_constant {}; template struct conjunction : std::true_type {}; template struct conjunction : B1 {}; template struct conjunction : std::conditional, B1>::type {}; template struct make_const_ptr { using type = typename std::add_pointer::type>::type; }; template struct make_const_ref { using type = typename std::add_lvalue_reference< typename std::add_const::type>::type; }; //===----------------------------------------------------------------------===// // Extra additions to //===----------------------------------------------------------------------===// template struct identity { using argument_type = Ty; Ty &operator()(Ty &self) const { return self; } const Ty &operator()(const Ty &self) const { return self; } }; /// An efficient, type-erasing, non-owning reference to a callable. This is /// intended for use as the type of a function parameter that is not used /// after the function in question returns. /// /// This class does not own the callable, so it is not in general safe to store /// a function_ref. template class function_ref; template class function_ref { Ret (*callback)(intptr_t callable, Params ...params) = nullptr; intptr_t callable; template static Ret callback_fn(intptr_t callable, Params ...params) { return (*reinterpret_cast(callable))( std::forward(params)...); } public: function_ref() = default; function_ref(std::nullptr_t) {} template function_ref(Callable &&callable, typename std::enable_if< !std::is_same::type, function_ref>::value>::type * = nullptr) : callback(callback_fn::type>), callable(reinterpret_cast(&callable)) {} Ret operator()(Params ...params) const { return callback(callable, std::forward(params)...); } operator bool() const { return callback; } }; // deleter - Very very very simple method that is used to invoke operator // delete on something. It is used like this: // // for_each(V.begin(), B.end(), deleter); template inline void deleter(T *Ptr) { delete Ptr; } //===----------------------------------------------------------------------===// // Extra additions to //===----------------------------------------------------------------------===// namespace adl_detail { using std::begin; template auto adl_begin(ContainerTy &&container) -> decltype(begin(std::forward(container))) { return begin(std::forward(container)); } using std::end; template auto adl_end(ContainerTy &&container) -> decltype(end(std::forward(container))) { return end(std::forward(container)); } using std::swap; template void adl_swap(T &&lhs, T &&rhs) noexcept(noexcept(swap(std::declval(), std::declval()))) { swap(std::forward(lhs), std::forward(rhs)); } } // end namespace adl_detail template auto adl_begin(ContainerTy &&container) -> decltype(adl_detail::adl_begin(std::forward(container))) { return adl_detail::adl_begin(std::forward(container)); } template auto adl_end(ContainerTy &&container) -> decltype(adl_detail::adl_end(std::forward(container))) { return adl_detail::adl_end(std::forward(container)); } template void adl_swap(T &&lhs, T &&rhs) noexcept( noexcept(adl_detail::adl_swap(std::declval(), std::declval()))) { adl_detail::adl_swap(std::forward(lhs), std::forward(rhs)); } /// Test whether \p RangeOrContainer is empty. Similar to C++17 std::empty. template constexpr bool empty(const T &RangeOrContainer) { return adl_begin(RangeOrContainer) == adl_end(RangeOrContainer); } // mapped_iterator - This is a simple iterator adapter that causes a function to // be applied whenever operator* is invoked on the iterator. template ()(*std::declval()))> class mapped_iterator : public iterator_adaptor_base< mapped_iterator, ItTy, typename std::iterator_traits::iterator_category, typename std::remove_reference::type> { public: mapped_iterator(ItTy U, FuncTy F) : mapped_iterator::iterator_adaptor_base(std::move(U)), F(std::move(F)) {} ItTy getCurrent() { return this->I; } FuncReturnTy operator*() { return F(*this->I); } private: FuncTy F; }; // map_iterator - Provide a convenient way to create mapped_iterators, just like // make_pair is useful for creating pairs... template inline mapped_iterator map_iterator(ItTy I, FuncTy F) { return mapped_iterator(std::move(I), std::move(F)); } template auto map_range(ContainerTy &&C, FuncTy F) -> decltype(make_range(map_iterator(C.begin(), F), map_iterator(C.end(), F))) { return make_range(map_iterator(C.begin(), F), map_iterator(C.end(), F)); } /// Helper to determine if type T has a member called rbegin(). template class has_rbegin_impl { using yes = char[1]; using no = char[2]; template static yes& test(Inner *I, decltype(I->rbegin()) * = nullptr); template static no& test(...); public: static const bool value = sizeof(test(nullptr)) == sizeof(yes); }; /// Metafunction to determine if T& or T has a member called rbegin(). template struct has_rbegin : has_rbegin_impl::type> { }; // Returns an iterator_range over the given container which iterates in reverse. // Note that the container must have rbegin()/rend() methods for this to work. template auto reverse(ContainerTy &&C, typename std::enable_if::value>::type * = nullptr) -> decltype(make_range(C.rbegin(), C.rend())) { return make_range(C.rbegin(), C.rend()); } // Returns a std::reverse_iterator wrapped around the given iterator. template std::reverse_iterator make_reverse_iterator(IteratorTy It) { return std::reverse_iterator(It); } // Returns an iterator_range over the given container which iterates in reverse. // Note that the container must have begin()/end() methods which return // bidirectional iterators for this to work. template auto reverse( ContainerTy &&C, typename std::enable_if::value>::type * = nullptr) -> decltype(make_range(llvm::make_reverse_iterator(std::end(C)), llvm::make_reverse_iterator(std::begin(C)))) { return make_range(llvm::make_reverse_iterator(std::end(C)), llvm::make_reverse_iterator(std::begin(C))); } /// An iterator adaptor that filters the elements of given inner iterators. /// /// The predicate parameter should be a callable object that accepts the wrapped /// iterator's reference type and returns a bool. When incrementing or /// decrementing the iterator, it will call the predicate on each element and /// skip any where it returns false. /// /// \code /// int A[] = { 1, 2, 3, 4 }; /// auto R = make_filter_range(A, [](int N) { return N % 2 == 1; }); /// // R contains { 1, 3 }. /// \endcode /// /// Note: filter_iterator_base implements support for forward iteration. /// filter_iterator_impl exists to provide support for bidirectional iteration, /// conditional on whether the wrapped iterator supports it. template class filter_iterator_base : public iterator_adaptor_base< filter_iterator_base, WrappedIteratorT, typename std::common_type< IterTag, typename std::iterator_traits< WrappedIteratorT>::iterator_category>::type> { using BaseT = iterator_adaptor_base< filter_iterator_base, WrappedIteratorT, typename std::common_type< IterTag, typename std::iterator_traits< WrappedIteratorT>::iterator_category>::type>; protected: WrappedIteratorT End; PredicateT Pred; void findNextValid() { while (this->I != End && !Pred(*this->I)) BaseT::operator++(); } // Construct the iterator. The begin iterator needs to know where the end // is, so that it can properly stop when it gets there. The end iterator only // needs the predicate to support bidirectional iteration. filter_iterator_base(WrappedIteratorT Begin, WrappedIteratorT End, PredicateT Pred) : BaseT(Begin), End(End), Pred(Pred) { findNextValid(); } public: using BaseT::operator++; filter_iterator_base &operator++() { BaseT::operator++(); findNextValid(); return *this; } }; /// Specialization of filter_iterator_base for forward iteration only. template class filter_iterator_impl : public filter_iterator_base { using BaseT = filter_iterator_base; public: filter_iterator_impl(WrappedIteratorT Begin, WrappedIteratorT End, PredicateT Pred) : BaseT(Begin, End, Pred) {} }; /// Specialization of filter_iterator_base for bidirectional iteration. template class filter_iterator_impl : public filter_iterator_base { using BaseT = filter_iterator_base; void findPrevValid() { while (!this->Pred(*this->I)) BaseT::operator--(); } public: using BaseT::operator--; filter_iterator_impl(WrappedIteratorT Begin, WrappedIteratorT End, PredicateT Pred) : BaseT(Begin, End, Pred) {} filter_iterator_impl &operator--() { BaseT::operator--(); findPrevValid(); return *this; } }; namespace detail { template struct fwd_or_bidi_tag_impl { using type = std::forward_iterator_tag; }; template <> struct fwd_or_bidi_tag_impl { using type = std::bidirectional_iterator_tag; }; /// Helper which sets its type member to forward_iterator_tag if the category /// of \p IterT does not derive from bidirectional_iterator_tag, and to /// bidirectional_iterator_tag otherwise. template struct fwd_or_bidi_tag { using type = typename fwd_or_bidi_tag_impl::iterator_category>::value>::type; }; } // namespace detail /// Defines filter_iterator to a suitable specialization of /// filter_iterator_impl, based on the underlying iterator's category. template using filter_iterator = filter_iterator_impl< WrappedIteratorT, PredicateT, typename detail::fwd_or_bidi_tag::type>; /// Convenience function that takes a range of elements and a predicate, /// and return a new filter_iterator range. /// /// FIXME: Currently if RangeT && is a rvalue reference to a temporary, the /// lifetime of that temporary is not kept by the returned range object, and the /// temporary is going to be dropped on the floor after the make_iterator_range /// full expression that contains this function call. template iterator_range, PredicateT>> make_filter_range(RangeT &&Range, PredicateT Pred) { using FilterIteratorT = filter_iterator, PredicateT>; return make_range( FilterIteratorT(std::begin(std::forward(Range)), std::end(std::forward(Range)), Pred), FilterIteratorT(std::end(std::forward(Range)), std::end(std::forward(Range)), Pred)); } /// A pseudo-iterator adaptor that is designed to implement "early increment" /// style loops. /// /// This is *not a normal iterator* and should almost never be used directly. It /// is intended primarily to be used with range based for loops and some range /// algorithms. /// /// The iterator isn't quite an `OutputIterator` or an `InputIterator` but /// somewhere between them. The constraints of these iterators are: /// /// - On construction or after being incremented, it is comparable and /// dereferencable. It is *not* incrementable. /// - After being dereferenced, it is neither comparable nor dereferencable, it /// is only incrementable. /// /// This means you can only dereference the iterator once, and you can only /// increment it once between dereferences. template class early_inc_iterator_impl : public iterator_adaptor_base, WrappedIteratorT, std::input_iterator_tag> { using BaseT = iterator_adaptor_base, WrappedIteratorT, std::input_iterator_tag>; using PointerT = typename std::iterator_traits::pointer; protected: #if LLVM_ENABLE_ABI_BREAKING_CHECKS bool IsEarlyIncremented = false; #endif public: early_inc_iterator_impl(WrappedIteratorT I) : BaseT(I) {} using BaseT::operator*; typename BaseT::reference operator*() { #if LLVM_ENABLE_ABI_BREAKING_CHECKS assert(!IsEarlyIncremented && "Cannot dereference twice!"); IsEarlyIncremented = true; #endif return *(this->I)++; } using BaseT::operator++; early_inc_iterator_impl &operator++() { #if LLVM_ENABLE_ABI_BREAKING_CHECKS assert(IsEarlyIncremented && "Cannot increment before dereferencing!"); IsEarlyIncremented = false; #endif return *this; } using BaseT::operator==; bool operator==(const early_inc_iterator_impl &RHS) const { #if LLVM_ENABLE_ABI_BREAKING_CHECKS assert(!IsEarlyIncremented && "Cannot compare after dereferencing!"); #endif return BaseT::operator==(RHS); } }; /// Make a range that does early increment to allow mutation of the underlying /// range without disrupting iteration. /// /// The underlying iterator will be incremented immediately after it is /// dereferenced, allowing deletion of the current node or insertion of nodes to /// not disrupt iteration provided they do not invalidate the *next* iterator -- /// the current iterator can be invalidated. /// /// This requires a very exact pattern of use that is only really suitable to /// range based for loops and other range algorithms that explicitly guarantee /// to dereference exactly once each element, and to increment exactly once each /// element. template iterator_range>> make_early_inc_range(RangeT &&Range) { using EarlyIncIteratorT = early_inc_iterator_impl>; return make_range(EarlyIncIteratorT(std::begin(std::forward(Range))), EarlyIncIteratorT(std::end(std::forward(Range)))); } // forward declarations required by zip_shortest/zip_first/zip_longest template bool all_of(R &&range, UnaryPredicate P); template bool any_of(R &&range, UnaryPredicate P); namespace detail { using std::declval; // We have to alias this since inlining the actual type at the usage site // in the parameter list of iterator_facade_base<> below ICEs MSVC 2017. template struct ZipTupleType { using type = std::tuple())...>; }; template using zip_traits = iterator_facade_base< ZipType, typename std::common_type::iterator_category...>::type, // ^ TODO: Implement random access methods. typename ZipTupleType::type, typename std::iterator_traits>::type>::difference_type, // ^ FIXME: This follows boost::make_zip_iterator's assumption that all // inner iterators have the same difference_type. It would fail if, for // instance, the second field's difference_type were non-numeric while the // first is. typename ZipTupleType::type *, typename ZipTupleType::type>; template struct zip_common : public zip_traits { using Base = zip_traits; using value_type = typename Base::value_type; std::tuple iterators; protected: template value_type deref(std::index_sequence) const { return value_type(*std::get(iterators)...); } template decltype(iterators) tup_inc(std::index_sequence) const { return std::tuple(std::next(std::get(iterators))...); } template decltype(iterators) tup_dec(std::index_sequence) const { return std::tuple(std::prev(std::get(iterators))...); } public: zip_common(Iters &&... ts) : iterators(std::forward(ts)...) {} value_type operator*() { return deref(std::index_sequence_for{}); } const value_type operator*() const { return deref(std::index_sequence_for{}); } ZipType &operator++() { iterators = tup_inc(std::index_sequence_for{}); return *reinterpret_cast(this); } ZipType &operator--() { static_assert(Base::IsBidirectional, "All inner iterators must be at least bidirectional."); iterators = tup_dec(std::index_sequence_for{}); return *reinterpret_cast(this); } }; template struct zip_first : public zip_common, Iters...> { using Base = zip_common, Iters...>; bool operator==(const zip_first &other) const { return std::get<0>(this->iterators) == std::get<0>(other.iterators); } zip_first(Iters &&... ts) : Base(std::forward(ts)...) {} }; template class zip_shortest : public zip_common, Iters...> { template bool test(const zip_shortest &other, std::index_sequence) const { return all_of(std::initializer_list{std::get(this->iterators) != std::get(other.iterators)...}, identity{}); } public: using Base = zip_common, Iters...>; zip_shortest(Iters &&... ts) : Base(std::forward(ts)...) {} bool operator==(const zip_shortest &other) const { return !test(other, std::index_sequence_for{}); } }; template